From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Tomas Mraz To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: minor upstream release 1.0.2e fixing moderate severity security issues Date: Tue, 09 Jun 2026 12:43:39 GMT Message-ID: <178100901982.1.14752141444755782236.rpms-openssl-4240ecaa1b74@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: 4240ecaa1b74f981176641a70d44666287367896 ICAgICAgICAgICAgQSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KCiAgICAgICAgICAgIFJl cG8gICA6IHJwbXMvb3BlbnNzbAogICAgICAgICAgICBCcmFuY2ggOiByZWJhc2VfNDBiZXRhCiAg ICAgICAgICAgIENvbW1pdCA6IDQyNDBlY2FhMWI3NGY5ODExNzY2NDFhNzBkNDQ2NjYyODczNjc4 OTYKICAgICAgICAgICAgQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5v cmc+CiAgICAgICAgICAgIERhdGUgICA6IDIwMTUtMTItMDRUMTQ6MTM6NTkrMDE6MDAKICAgICAg ICAgICAgU3RhdHMgIDogKzE0MzgwLy0xNDM5NCBpbiAxMCBmaWxlKHMpCiAgICAgICAgICAgIFVS TCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3JnL3JwbXMvb3BlbnNzbC9jLzQyNDBl Y2FhMWI3NGY5ODExNzY2NDFhNzBkNDQ2NjYyODczNjc4OTY/YnJhbmNoPXJlYmFzZV80MGJldGEK CiAgICAgICAgICAgIExvZzoKICAgICAgICAgICAgbWlub3IgdXBzdHJlYW0gcmVsZWFzZSAxLjAu MmUgZml4aW5nIG1vZGVyYXRlIHNldmVyaXR5IHNlY3VyaXR5IGlzc3VlcwoKLSBlbmFibGUgZmFz dCBhc3NlbWJsZXIgaW1wbGVtZW50YXRpb24gZm9yIE5JU1QgUC0yNTYgYW5kIFAtNTIxCiAgZWxs aXB0aWMgY3VydmVzICgjMTE2NDIxMCkKLSBmaWx0ZXIgb3V0IHVud2FudGVkIGxpbmsgb3B0aW9u cyBmcm9tIHRoZSAucGMgZmlsZXMgKCMxMjU3ODM2KQoKLS0tCmRpZmYgLS1naXQgYS8uZ2l0aWdu b3JlIGIvLmdpdGlnbm9yZQppbmRleCA5OTljNzMyLi5kMzNjNzgzIDEwMDY0NAotLS0gYS8uZ2l0 aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTI1LDMgKzI1LDQgQEAgb3BlbnNzbC0xLjAuMGEt dXNhLnRhci5iejIKIC9vcGVuc3NsLTEuMC4yYS1ob2JibGVkLnRhci54egogL29wZW5zc2wtMS4w LjJjLWhvYmJsZWQudGFyLnh6CiAvb3BlbnNzbC0xLjAuMmQtaG9iYmxlZC50YXIueHoKKy9vcGVu c3NsLTEuMC4yZS1ob2JibGVkLnRhci54egoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjJhLXdy YXAtcGFkLnBhdGNoIGIvb3BlbnNzbC0xLjAuMmEtd3JhcC1wYWQucGF0Y2gKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGZmMWExMzMuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMmEt d3JhcC1wYWQucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1NTUgKzAsMCBAQAotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmEvY3J5cHRvL2V2cC9jX2FsbGMuYy53cmFwIG9wZW5zc2wtMS4wLjJhL2Ny eXB0by9ldnAvY19hbGxjLmMKLS0tLSBvcGVuc3NsLTEuMC4yYS9jcnlwdG8vZXZwL2NfYWxsYy5j LndyYXAJMjAxNS0wNC0yMiAxNTo0MTozMi4xNDc0ODgxMDcgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4yYS9jcnlwdG8vZXZwL2NfYWxsYy5jCTIwMTUtMDQtMjIgMTU6NDc6MjUuNDg2OTQ2MjM5ICsw MjAwCi1AQCAtMTc5LDYgKzE3OSw3IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9p ZCkKLSAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfeHRzKCkpOwotICAgICBFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzEyOF9jY20oKSk7Ci0gICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTI4X3dyYXAoKSk7Ci0rICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3dyYXBfcGFkKCkp OwotICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywgIkFFUzEyOCIpOwot ICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywgImFlczEyOCIpOwotICAg ICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7Ci1AQCAtMTkxLDYgKzE5Miw3IEBA IHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKLSAgICAgRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xOTJfZ2NtKCkpOwotICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jY20o KSk7Ci0gICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX3dyYXAoKSk7Ci0rICAgIEVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMTkyX3dyYXBfcGFkKCkpOwotICAgICBFVlBfYWRkX2NpcGhlcl9h bGlhcyhTTl9hZXNfMTkyX2NiYywgIkFFUzE5MiIpOwotICAgICBFVlBfYWRkX2NpcGhlcl9hbGlh cyhTTl9hZXNfMTkyX2NiYywgImFlczE5MiIpOwotICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9lY2IoKSk7Ci1AQCAtMjA0LDYgKzIwNiw3IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2Np cGhlcnModm9pZCkKLSAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfeHRzKCkpOwotICAg ICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jY20oKSk7Ci0gICAgIEVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMjU2X3dyYXAoKSk7Ci0rICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3dy YXBfcGFkKCkpOwotICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywgIkFF UzI1NiIpOwotICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywgImFlczI1 NiIpOwotICMgaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xf Tk9fU0hBMSkKLUBAIC0yNTgsNiArMjYxLDcgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVy cyh2b2lkKQotIAotICAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUoKSk7Ci0gICAg ICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTMoKSk7Ci0rICAgICAgICBFVlBfYWRkX2Np cGhlcihFVlBfZGVzX2VkZTNfd3JhcCgpKTsKLSAjIGVuZGlmCi0gCi0gIyBpZm5kZWYgT1BFTlNT TF9OT19BRVMKLUBAIC0yNzIsNiArMjc2LDcgQEAgdm9pZCBPcGVuU1NMX2FkZF9hbGxfY2lwaGVy cyh2b2lkKQotICAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfeHRzKCkpOwotICAg ICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2NtKCkpOwotICAgICAgICAgRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xMjhfd3JhcCgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTI4X3dyYXBfcGFkKCkpOwotICAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05f YWVzXzEyOF9jYmMsICJBRVMxMjgiKTsKLSAgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNO X2Flc18xMjhfY2JjLCAiYWVzMTI4Iik7Ci0gICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzE5Ml9lY2IoKSk7Ci1AQCAtMjg0LDYgKzI4OSw3IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2Np cGhlcnModm9pZCkKLSAgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2djbSgpKTsK LSAgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NjbSgpKTsKLSAgICAgICAgIEVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX3dyYXAoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzE5Ml93cmFwX3BhZCgpKTsKLSAgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFz KFNOX2Flc18xOTJfY2JjLCAiQUVTMTkyIik7Ci0gICAgICAgICBFVlBfYWRkX2NpcGhlcl9hbGlh cyhTTl9hZXNfMTkyX2NiYywgImFlczE5MiIpOwotICAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18yNTZfZWNiKCkpOwotQEAgLTI5Nyw2ICszMDMsNyBAQCB2b2lkIE9wZW5TU0xfYWRkX2Fs bF9jaXBoZXJzKHZvaWQpCi0gICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl94dHMo KSk7Ci0gICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jY20oKSk7Ci0gICAgICAg ICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl93cmFwKCkpOwotKyAgICAgICAgRVZQX2FkZF9j aXBoZXIoRVZQX2Flc18yNTZfd3JhcF9wYWQoKSk7Ci0gICAgICAgICBFVlBfYWRkX2NpcGhlcl9h bGlhcyhTTl9hZXNfMjU2X2NiYywgIkFFUzI1NiIpOwotICAgICAgICAgRVZQX2FkZF9jaXBoZXJf YWxpYXMoU05fYWVzXzI1Nl9jYmMsICJhZXMyNTYiKTsKLSAjIGVuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4yYS9jcnlwdG8vZXZwL2VfYWVzLmMud3JhcCBvcGVuc3NsLTEuMC4yYS9jcnlwdG8v ZXZwL2VfYWVzLmMKLS0tLSBvcGVuc3NsLTEuMC4yYS9jcnlwdG8vZXZwL2VfYWVzLmMud3JhcAky MDE1LTA0LTIyIDE1OjQxOjMyLjE0ODQ4ODEzMSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJhL2Ny eXB0by9ldnAvZV9hZXMuYwkyMDE1LTA0LTIyIDE1OjUyOjIxLjgwOTAzOTUwNiArMDIwMAotQEAg LTEsNSArMSw1IEBACi0gLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAx MSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKiBDb3B5cmln aHQgKGMpIDIwMDEtMjAxNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSAgKgotICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotQEAgLTE5NTIsNyArMTk1Miw3 IEBAIHN0YXRpYyBpbnQgYWVzX3dyYXBfaW5pdF9rZXkoRVZQX0NJUEhFUl8KLSAgICAgICAgICAg ICB3Y3R4LT5pdiA9IE5VTEw7Ci0gICAgIH0KLSAgICAgaWYgKGl2KSB7Ci0tICAgICAgICBtZW1j cHkoY3R4LT5pdiwgaXYsIDgpOwotKyAgICAgICAgbWVtY3B5KGN0eC0+aXYsIGl2LCBFVlBfQ0lQ SEVSX0NUWF9pdl9sZW5ndGgoY3R4KSk7Ci0gICAgICAgICB3Y3R4LT5pdiA9IGN0eC0+aXY7Ci0g ICAgIH0KLSAgICAgcmV0dXJuIDE7Ci1AQCAtMTk2MywzMCArMTk2Myw1NyBAQCBzdGF0aWMgaW50 IGFlc193cmFwX2NpcGhlcihFVlBfQ0lQSEVSX0NUCi0gewotICAgICBFVlBfQUVTX1dSQVBfQ1RY ICp3Y3R4ID0gY3R4LT5jaXBoZXJfZGF0YTsKLSAgICAgc2l6ZV90IHJ2OwotKyAgICAvKiBBRVMg d3JhcCB3aXRoIHBhZGRpbmcgaGFzIElWIGxlbmd0aCBvZiA0LCB3aXRob3V0IHBhZGRpbmcgOCAq LwotKyAgICBpbnQgcGFkID0gRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoKGN0eCkgPT0gNDsKLSsg ICAgLyogTm8gZmluYWwgb3BlcmF0aW9uIHNvIGFsd2F5cyByZXR1cm4gemVybyBsZW5ndGggKi8K LSAgICAgaWYgKCFpbikKLSAgICAgICAgIHJldHVybiAwOwotLSAgICBpZiAoaW5sZW4gJSA4KQot KyAgICAvKiBJbnB1dCBsZW5ndGggbXVzdCBhbHdheXMgYmUgbm9uLXplcm8gKi8KLSsgICAgaWYg KCFpbmxlbikKLSAgICAgICAgIHJldHVybiAtMTsKLS0gICAgaWYgKGN0eC0+ZW5jcnlwdCAmJiBp bmxlbiA8IDgpCi0rICAgIC8qIElmIGRlY3J5cHRpbmcgbmVlZCBhdCBsZWFzdCAxNiBieXRlcyBh bmQgbXVsdGlwbGUgb2YgOCAqLwotKyAgICBpZiAoIWN0eC0+ZW5jcnlwdCAmJiAoaW5sZW4gPCAx NiB8fCBpbmxlbiAmIDB4NykpCi0gICAgICAgICByZXR1cm4gLTE7Ci0tICAgIGlmICghY3R4LT5l bmNyeXB0ICYmIGlubGVuIDwgMTYpCi0rICAgIC8qIElmIG5vdCBwYWRkaW5nIGlucHV0IG11c3Qg YmUgbXVsdGlwbGUgb2YgOCAqLwotKyAgICBpZiAoIXBhZCAmJiBpbmxlbiAmIDB4NykKLSAgICAg ICAgIHJldHVybiAtMTsKLSAgICAgaWYgKCFvdXQpIHsKLS0gICAgICAgIGlmIChjdHgtPmVuY3J5 cHQpCi0rICAgICAgICBpZiAoY3R4LT5lbmNyeXB0KSB7Ci0rICAgICAgICAgICAgLyogSWYgcGFk ZGluZyByb3VuZCB1cCB0byBtdWx0aXBsZSBvZiA4ICovCi0rICAgICAgICAgICAgaWYgKHBhZCkK LSsgICAgICAgICAgICAgICAgaW5sZW4gPSAoaW5sZW4gKyA3KSAvIDggKiA4OwotKyAgICAgICAg ICAgIC8qIDggYnl0ZSBwcmVmaXggKi8KLSAgICAgICAgICAgICByZXR1cm4gaW5sZW4gKyA4Owot LSAgICAgICAgZWxzZQotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICAvKiBJZiBub3Qg cGFkZGluZyBvdXRwdXQgd2lsbCBiZSBleGFjdGx5IDggYnl0ZXMKLSsgICAgICAgICAgICAgKiBz bWFsbGVyIHRoYW4gaW5wdXQuIElmIHBhZGRpbmcgaXQgd2lsbCBiZSBhdAotKyAgICAgICAgICAg ICAqIGxlYXN0IDggYnl0ZXMgc21hbGxlciBidXQgd2UgZG9uJ3Qga25vdyBob3cKLSsgICAgICAg ICAgICAgKiBtdWNoLgotKyAgICAgICAgICAgICAqLwotICAgICAgICAgICAgIHJldHVybiBpbmxl biAtIDg7Ci0gICAgIH0KLSsgICAgfQotKyAgICBpZiAocGFkKSB7Ci0gICAgIGlmIChjdHgtPmVu Y3J5cHQpCi0tICAgICAgICBydiA9IENSWVBUT18xMjhfd3JhcCgmd2N0eC0+a3Mua3MsIHdjdHgt Pml2LCBvdXQsIGluLCBpbmxlbiwKLSsgICAgICAgICAgICBydiA9IENSWVBUT18xMjhfd3JhcF9w YWQoJndjdHgtPmtzLmtzLCB3Y3R4LT5pdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgb3V0LCBpbiwgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo YmxvY2sxMjhfZikgQUVTX2VuY3J5cHQpOwotICAgICBlbHNlCi0tICAgICAgICBydiA9IENSWVBU T18xMjhfdW53cmFwKCZ3Y3R4LT5rcy5rcywgd2N0eC0+aXYsIG91dCwgaW4sIGlubGVuLAotKyAg ICAgICAgICAgIHJ2ID0gQ1JZUFRPXzEyOF91bndyYXBfcGFkKCZ3Y3R4LT5rcy5rcywgd2N0eC0+ aXYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBpbiwgaW5s ZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibG9jazEyOF9mKSBBRVNfZGVj cnlwdCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgICBpZiAoY3R4LT5lbmNyeXB0KQotKyAgICAg ICAgICAgIHJ2ID0gQ1JZUFRPXzEyOF93cmFwKCZ3Y3R4LT5rcy5rcywgd2N0eC0+aXYsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBpbiwgaW5sZW4sIChibG9jazEyOF9m KSBBRVNfZW5jcnlwdCk7Ci0rICAgICAgICBlbHNlCi0rICAgICAgICAgICAgcnYgPSBDUllQVE9f MTI4X3Vud3JhcCgmd2N0eC0+a3Mua3MsIHdjdHgtPml2LAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgb3V0LCBpbiwgaW5sZW4sIChibG9jazEyOF9mKSBBRVNfZGVjcnlwdCk7 Ci0rICAgIH0KLSAgICAgcmV0dXJuIHJ2ID8gKGludClydiA6IC0xOwotIH0KLSAKLS0jZGVmaW5l IFdSQVBfRkxBR1MgICAgICAoRVZQX0NJUEhfV1JBUF9NT0RFIFwKLSsjIGRlZmluZSBXUkFQX0ZM QUdTICAgICAgKEVWUF9DSVBIX1dSQVBfTU9ERSB8IEVWUF9DSVBIX0ZMQUdfRklQUyBcCi0gICAg ICAgICAgICAgICAgIHwgRVZQX0NJUEhfQ1VTVE9NX0lWIHwgRVZQX0NJUEhfRkxBR19DVVNUT01f Q0lQSEVSIFwKLSAgICAgICAgICAgICAgICAgfCBFVlBfQ0lQSF9BTFdBWVNfQ0FMTF9JTklUIHwg RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0gCi1AQCAtMjAzMSwzICsyMDU4LDQ1IEBAIGNv bnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X3dyYXAodm9pZCkKLSB7Ci0gICAgIHJldHVybiAm YWVzXzI1Nl93cmFwOwotIH0KLSsKLStzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBhZXNfMTI4X3dy YXBfcGFkID0gewotKyAgICBOSURfaWRfYWVzMTI4X3dyYXBfcGFkLAotKyAgICA4LCAxNiwgNCwg V1JBUF9GTEFHUywKLSsgICAgYWVzX3dyYXBfaW5pdF9rZXksIGFlc193cmFwX2NpcGhlciwKLSsg ICAgTlVMTCwKLSsgICAgc2l6ZW9mKEVWUF9BRVNfV1JBUF9DVFgpLAotKyAgICBOVUxMLCBOVUxM LCBOVUxMLCBOVUxMCi0rfTsKLSsKLStjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF93cmFw X3BhZCh2b2lkKQotK3sKLSsgICAgcmV0dXJuICZhZXNfMTI4X3dyYXBfcGFkOwotK30KLSsKLStz dGF0aWMgY29uc3QgRVZQX0NJUEhFUiBhZXNfMTkyX3dyYXBfcGFkID0gewotKyAgICBOSURfaWRf YWVzMTkyX3dyYXBfcGFkLAotKyAgICA4LCAyNCwgNCwgV1JBUF9GTEFHUywKLSsgICAgYWVzX3dy YXBfaW5pdF9rZXksIGFlc193cmFwX2NpcGhlciwKLSsgICAgTlVMTCwKLSsgICAgc2l6ZW9mKEVW UF9BRVNfV1JBUF9DVFgpLAotKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCi0rfTsKLSsKLStj b25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml93cmFwX3BhZCh2b2lkKQotK3sKLSsgICAgcmV0 dXJuICZhZXNfMTkyX3dyYXBfcGFkOwotK30KLSsKLStzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBh ZXNfMjU2X3dyYXBfcGFkID0gewotKyAgICBOSURfaWRfYWVzMjU2X3dyYXBfcGFkLAotKyAgICA4 LCAzMiwgNCwgV1JBUF9GTEFHUywKLSsgICAgYWVzX3dyYXBfaW5pdF9rZXksIGFlc193cmFwX2Np cGhlciwKLSsgICAgTlVMTCwKLSsgICAgc2l6ZW9mKEVWUF9BRVNfV1JBUF9DVFgpLAotKyAgICBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMCi0rfTsKLSsKLStjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVz XzI1Nl93cmFwX3BhZCh2b2lkKQotK3sKLSsgICAgcmV0dXJuICZhZXNfMjU2X3dyYXBfcGFkOwot K30KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJhL2NyeXB0by9ldnAvZV9kZXMzLmMud3JhcCBvcGVu c3NsLTEuMC4yYS9jcnlwdG8vZXZwL2VfZGVzMy5jCi0tLS0gb3BlbnNzbC0xLjAuMmEvY3J5cHRv L2V2cC9lX2RlczMuYy53cmFwCTIwMTUtMDQtMjIgMTU6NDE6NDAuMzAxNjgzMzAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMmEvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDE1LTA0LTIyIDE1OjUzOjM5 LjUyOTg5OTk2NCArMDIwMAotQEAgLTQ3Myw3ICs0NzMsNyBAQCBzdGF0aWMgY29uc3QgRVZQX0NJ UEhFUiBkZXMzX3dyYXAgPSB7Ci0gICAgIE5JRF9pZF9zbWltZV9hbGdfQ01TM0RFU3dyYXAsCi0g ICAgIDgsIDI0LCAwLAotICAgICBFVlBfQ0lQSF9XUkFQX01PREUgfCBFVlBfQ0lQSF9DVVNUT01f SVYgfCBFVlBfQ0lQSF9GTEFHX0NVU1RPTV9DSVBIRVIKLS0gICAgICAgIHwgRVZQX0NJUEhfRkxB R19ERUZBVUxUX0FTTjEsCi0rICAgICAgICB8IEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xIHwg RVZQX0NJUEhfRkxBR19GSVBTLAotICAgICBkZXNfZWRlM19pbml0X2tleSwgZGVzX2VkZTNfd3Jh cF9jaXBoZXIsCi0gICAgIE5VTEwsCi0gICAgIHNpemVvZihERVNfRURFX0tFWSksCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4yYS9jcnlwdG8vZXZwL2V2cC5oLndyYXAgb3BlbnNzbC0xLjAuMmEvY3J5 cHRvL2V2cC9ldnAuaAotLS0tIG9wZW5zc2wtMS4wLjJhL2NyeXB0by9ldnAvZXZwLmgud3JhcAky MDE1LTA0LTIyIDE5OjMwOjU3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJhL2Ny eXB0by9ldnAvZXZwLmgJMjAxNS0wNC0yMiAxOTo1MTowNi4zNTI4MzI1MTYgKzAyMDAKLUBAIC04 MzIsNiArODMyLDcgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2NtKHZvaWQpOwot IGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2djbSh2b2lkKTsKLSBjb25zdCBFVlBfQ0lQ SEVSICpFVlBfYWVzXzEyOF94dHModm9pZCk7Ci0gY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18x Mjhfd3JhcCh2b2lkKTsKLStjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF93cmFwX3BhZCh2 b2lkKTsKLSBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9lY2Iodm9pZCk7Ci0gY29uc3Qg RVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfY2JjKHZvaWQpOwotIGNvbnN0IEVWUF9DSVBIRVIgKkVW UF9hZXNfMTkyX2NmYjEodm9pZCk7Ci1AQCAtODQzLDYgKzg0NCw3IEBAIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF9hZXNfMTkyX2N0cih2b2lkKTsKLSBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5 Ml9jY20odm9pZCk7Ci0gY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfZ2NtKHZvaWQpOwot IGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX3dyYXAodm9pZCk7Ci0rY29uc3QgRVZQX0NJ UEhFUiAqRVZQX2Flc18xOTJfd3JhcF9wYWQodm9pZCk7Ci0gY29uc3QgRVZQX0NJUEhFUiAqRVZQ X2Flc18yNTZfZWNiKHZvaWQpOwotIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X2NiYyh2 b2lkKTsKLSBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jZmIxKHZvaWQpOwotQEAgLTg1 NSw2ICs4NTcsNyBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jY20odm9pZCk7Ci0g Y29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfZ2NtKHZvaWQpOwotIGNvbnN0IEVWUF9DSVBI RVIgKkVWUF9hZXNfMjU2X3h0cyh2b2lkKTsKLSBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1 Nl93cmFwKHZvaWQpOwotK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X3dyYXBfcGFkKHZv aWQpOwotICMgIGlmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NM X05PX1NIQTEpCi0gY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2JjX2htYWNfc2hhMSh2 b2lkKTsKLSBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jYmNfaG1hY19zaGExKHZvaWQp OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmEvY3J5cHRvL2V2cC9ldnB0ZXN0cy50eHQud3JhcCBv cGVuc3NsLTEuMC4yYS9jcnlwdG8vZXZwL2V2cHRlc3RzLnR4dAotLS0tIG9wZW5zc2wtMS4wLjJh L2NyeXB0by9ldnAvZXZwdGVzdHMudHh0LndyYXAJMjAxNS0wNC0yMiAxNTo0MTo0Ny4xOTQ4NDgz MDcgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYS9jcnlwdG8vZXZwL2V2cHRlc3RzLnR4dAkyMDE1 LTA0LTIyIDE2OjAxOjA4LjE3NDU0MDk3NyArMDIwMAotQEAgLTM5OSwzICszOTksNyBAQCBpZC1h ZXMyNTYtd3JhcDowMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwCi0gaWQtYWVzMTkyLXdyYXA6MDAw MTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3OjowMDExMjIzMzQ0 NTU2Njc3ODg5OUFBQkJDQ0RERUVGRjAwMDEwMjAzMDQwNTA2MDc6MDMxRDMzMjY0RTE1RDMzMjY4 RjI0RUMyNjA3NDNFRENFMUM2QzdEREVFNzI1QTkzNkJBODE0OTE1QzY3NjJEMgotIGlkLWFlczI1 Ni13cmFwOjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMTAxMTEyMTMxNDE1MTYxNzE4 MTkxQTFCMUMxRDFFMUY6OjAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERFRUZGMDAwMTAyMDMw NDA1MDYwNzpBOEY5QkMxNjEyQzY4QjNGRjZFNkY0RkJFMzBFNzFFNDc2OUM4QjgwQTMyQ0I4OTU4 Q0Q1RDE3RDZCMjU0REExCi0gaWQtYWVzMjU2LXdyYXA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBC MEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjo6MDAxMTIyMzM0NDU1NjY3 Nzg4OTlBQUJCQ0NEREVFRkYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBEMEUwRjoyOEM5RjQw NEM0QjgxMEY0Q0JDQ0IzNUNGQjg3RjgyNjNGNTc4NkUyRDgwRUQzMjZDQkM3RjBFNzFBOTlGNDNC RkI5ODhCOUI3QTAyREQyMQotKyMgQUVTIHdyYXAgdGVzdHMgZnJvbSBSRkM1NjQ5Ci0raWQtYWVz MTkyLXdyYXAtcGFkOjU4NDBkZjZlMjliMDJhZjFhYjQ5M2I3MDViZjE2ZWExYWU4MzM4ZjRkY2Mx NzZhODo6YzM3YjdlNjQ5MjU4NDM0MGJlZDEyMjA3ODA4OTQxMTU1MDY4ZjczODoxMzhiZGVhYTli OGZhN2ZjNjFmOTc3NDJlNzIyNDhlZTVhZTZhZTUzNjBkMWFlNmE1ZjU0ZjM3M2ZhNTQzYjZhCi0r aWQtYWVzMTkyLXdyYXAtcGFkOjU4NDBkZjZlMjliMDJhZjFhYjQ5M2I3MDViZjE2ZWExYWU4MzM4 ZjRkY2MxNzZhODo6NDY2ZjcyNTA2MTczNjk6YWZiZWIwZjA3ZGZiZjU0MTkyMDBmMmNjYjUwYmIy NGYKLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJhL2NyeXB0by9tb2Rlcy9tb2Rlcy5oLndyYXAg b3BlbnNzbC0xLjAuMmEvY3J5cHRvL21vZGVzL21vZGVzLmgKLS0tLSBvcGVuc3NsLTEuMC4yYS9j cnlwdG8vbW9kZXMvbW9kZXMuaC53cmFwCTIwMTUtMDQtMjIgMTU6NDE6NDkuMjI4ODk2OTk3ICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMmEvY3J5cHRvL21vZGVzL21vZGVzLmgJMjAxNS0wNC0yMiAx NjowMzo0MC43MjQxNTI4NTUgKzAyMDAKLUBAIC0xNTcsNiArMTU3LDEyIEBAIHNpemVfdCBDUllQ VE9fMTI4X3Vud3JhcCh2b2lkICprZXksIGNvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2hhciAqb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBi bG9jazEyOF9mIGJsb2NrKTsKLStzaXplX3QgQ1JZUFRPXzEyOF93cmFwX3BhZCh2b2lkICprZXks IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmljdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBpbmxlbiwgYmxvY2sxMjhfZiBibG9jayk7Ci0rc2l6ZV90 IENSWVBUT18xMjhfdW53cmFwX3BhZCh2b2lkICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlj diwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgY29u c3QgdW5zaWduZWQgY2hhciAqaW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgaW5sZW4sIGJsb2NrMTI4X2YgYmxvY2spOwotIAotICNpZmRlZiAgX19jcGx1c3BsdXMKLSB9 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYS9jcnlwdG8vbW9kZXMvd3JhcDEyOC5jLndyYXAgb3Bl bnNzbC0xLjAuMmEvY3J5cHRvL21vZGVzL3dyYXAxMjguYwotLS0tIG9wZW5zc2wtMS4wLjJhL2Ny eXB0by9tb2Rlcy93cmFwMTI4LmMud3JhcAkyMDE1LTAzLTE5IDE0OjMwOjM2LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjJhL2NyeXB0by9tb2Rlcy93cmFwMTI4LmMJMjAxNS0wNC0y MiAxNjowNjoxNi43OTg4NDgxOTcgKzAyMDAKLUBAIC0yLDYgKzIsNyBAQAotIC8qCi0gICogV3Jp dHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBP cGVuU1NMCi0gICogcHJvamVjdC4KLSsgKiBNb2RlIHdpdGggcGFkZGluZyBjb250cmlidXRlZCBi eSBQZXRyIFNwYWNlayAocHNwYWNla0ByZWRoYXQuY29tKS4KLSAgKi8KLSAvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotICAqIENvcHlyaWdodCAoYykgMjAxMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KLUBAIC01MiwxOSArNTMsNDQgQEAKLSAgKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAqLwot IAotKy8qKiAgQmV3YXJlIQotKyAqCi0rICogIEZvbGxvd2luZyB3cmFwcGluZyBtb2RlcyB3ZXJl IGRlc2lnbmVkIGZvciBBRVMgYnV0IHRoaXMgaW1wbGVtZW50YXRpb24KLSsgKiAgYWxsb3dzIHlv dSB0byB1c2UgdGhlbSBmb3IgYW55IDEyOCBiaXQgYmxvY2sgY2lwaGVyLgotKyAqLwotKwotICNp bmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRlIDxvcGVuc3NsL21vZGVzLmg+Ci0gCi0rLyoq IFJGQyAzMzk0IHNlY3Rpb24gMi4yLjMuMSBEZWZhdWx0IEluaXRpYWwgVmFsdWUgKi8KLSBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZWZhdWx0X2l2W10gPSB7Ci0gICAgIDB4QTYsIDB4QTYs IDB4QTYsIDB4QTYsIDB4QTYsIDB4QTYsIDB4QTYsIDB4QTYsCi0gfTsKLSAKLS0vKgotLSAqIElu cHV0IHNpemUgbGltaXQ6IGxvd2VyIHRoYW4gbWF4aW11bSBvZiBzdGFuZGFyZHMgYnV0IGZhciBs YXJnZXIgdGhhbgotKy8qKiBSRkMgNTY0OSBzZWN0aW9uIDMgQWx0ZXJuYXRpdmUgSW5pdGlhbCBW YWx1ZSAzMi1iaXQgY29uc3RhbnQgKi8KLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZWZh dWx0X2FpdltdID0gewotKyAgICAweEE2LCAweDU5LCAweDU5LCAweEE2Ci0rfTsKLSsKLSsvKiog SW5wdXQgc2l6ZSBsaW1pdDogbG93ZXIgdGhhbiBtYXhpbXVtIG9mIHN0YW5kYXJkcyBidXQgZmFy IGxhcmdlciB0aGFuCi0gICogYW55dGhpbmcgdGhhdCB3aWxsIGJlIHVzZWQgaW4gcHJhY3RpY2Uu Ci0gICovCi0gI2RlZmluZSBDUllQVE8xMjhfV1JBUF9NQVggKDFVTCA8PCAzMSkKLSAKLSsvKiog V3JhcHBpbmcgYWNjb3JkaW5nIHRvIFJGQyAzMzk0IHNlY3Rpb24gMi4yLjEuCi0rICoKLSsgKiAg QHBhcmFtW2luXSAga2V5ICAgIEtleSB2YWx1ZS4gCi0rICogIEBwYXJhbVtpbl0gIGl2ICAgICBJ ViB2YWx1ZS4gTGVuZ3RoID0gOCBieXRlcy4gTlVMTCA9IHVzZSBkZWZhdWx0X2l2LgotKyAqICBA cGFyYW1baW5dICBpbiAgICAgUGxhaW4gdGV4dCBhcyBuIDY0LWJpdCBibG9ja3MsIG4gPj0gMi4K LSsgKiAgQHBhcmFtW2luXSAgaW5sZW4gIExlbmd0aCBvZiBpbi4KLSsgKiAgQHBhcmFtW291dF0g b3V0ICAgIENpcGhlciB0ZXh0LiBNaW5pbWFsIGJ1ZmZlciBsZW5ndGggPSAoaW5sZW4gKyA4KSBi eXRlcy4KLSsgKiAgICAgICAgICAgICAgICAgICAgIElucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBj YW4gb3ZlcmxhcCBpZiBibG9jayBmdW5jdGlvbgotKyAqICAgICAgICAgICAgICAgICAgICAgc3Vw cG9ydHMgdGhhdC4KLSsgKiAgQHBhcmFtW2luXSAgYmxvY2sgIEJsb2NrIHByb2Nlc3NpbmcgZnVu Y3Rpb24uCi0rICogIEByZXR1cm4gICAgICAgICAgICAwIGlmIGlubGVuIGRvZXMgbm90IGNvbnNp c3Qgb2YgbiA2NC1iaXQgYmxvY2tzLCBuID49IDIuCi0rICogICAgICAgICAgICAgICAgICAgICBv ciBpZiBpbmxlbiA+IENSWVBUTzEyOF9XUkFQX01BWC4KLSsgKiAgICAgICAgICAgICAgICAgICAg IE91dHB1dCBsZW5ndGggaWYgd3JhcHBpbmcgc3VjY2VlZGVkLgotKyAqLwotIHNpemVfdCBDUllQ VE9fMTI4X3dyYXAodm9pZCAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKLSAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKLSAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4sCi1AQCAtNzIsMTEgKzk4 LDExIEBAIHNpemVfdCBDUllQVE9fMTI4X3dyYXAodm9pZCAqa2V5LCBjb25zdAotIHsKLSAgICAg dW5zaWduZWQgY2hhciAqQSwgQlsxNl0sICpSOwotICAgICBzaXplX3QgaSwgaiwgdDsKLS0gICAg aWYgKChpbmxlbiAmIDB4NykgfHwgKGlubGVuIDwgOCkgfHwgKGlubGVuID4gQ1JZUFRPMTI4X1dS QVBfTUFYKSkKLSsgICAgaWYgKChpbmxlbiAmIDB4NykgfHwgKGlubGVuIDwgMTYpIHx8IChpbmxl biA+IENSWVBUTzEyOF9XUkFQX01BWCkpCi0gICAgICAgICByZXR1cm4gMDsKLSAgICAgQSA9IEI7 Ci0gICAgIHQgPSAxOwotLSAgICBtZW1jcHkob3V0ICsgOCwgaW4sIGlubGVuKTsKLSsgICAgbWVt bW92ZShvdXQgKyA4LCBpbiwgaW5sZW4pOwotICAgICBpZiAoIWl2KQotICAgICAgICAgaXYgPSBk ZWZhdWx0X2l2OwotIAotQEAgLTEwMCw3ICsxMjYsMjMgQEAgc2l6ZV90IENSWVBUT18xMjhfd3Jh cCh2b2lkICprZXksIGNvbnN0Ci0gICAgIHJldHVybiBpbmxlbiArIDg7Ci0gfQotIAotLXNpemVf dCBDUllQVE9fMTI4X3Vud3JhcCh2b2lkICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAot Ky8qKiBVbndyYXBwaW5nIGFjY29yZGluZyB0byBSRkMgMzM5NCBzZWN0aW9uIDIuMi4yIHN0ZXBz IDEtMi4KLSsgKiAgSVYgY2hlY2sgKHN0ZXAgMykgaXMgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNh bGxlci4KLSsgKgotKyAqICBAcGFyYW1baW5dICBrZXkgICAgS2V5IHZhbHVlLiAKLSsgKiAgQHBh cmFtW291dF0gaXYgICAgIFVuY2hlY2tlZCBJViB2YWx1ZS4gTWluaW1hbCBidWZmZXIgbGVuZ3Ro ID0gOCBieXRlcy4KLSsgKiAgQHBhcmFtW291dF0gb3V0ICAgIFBsYWluIHRleHQgd2l0aG91dCBJ Vi4KLSsgKiAgICAgICAgICAgICAgICAgICAgIE1pbmltYWwgYnVmZmVyIGxlbmd0aCA9IChpbmxl biAtIDgpIGJ5dGVzLgotKyAqICAgICAgICAgICAgICAgICAgICAgSW5wdXQgYW5kIG91dHB1dCBi dWZmZXJzIGNhbiBvdmVybGFwIGlmIGJsb2NrIGZ1bmN0aW9uCi0rICogICAgICAgICAgICAgICAg ICAgICBzdXBwb3J0cyB0aGF0LgotKyAqICBAcGFyYW1baW5dICBpbiAgICAgQ2lwaGVydGV4dCB0 ZXh0IGFzIG4gNjQtYml0IGJsb2NrcwotKyAqICBAcGFyYW1baW5dICBpbmxlbiAgTGVuZ3RoIG9m IGluLgotKyAqICBAcGFyYW1baW5dICBibG9jayAgQmxvY2sgcHJvY2Vzc2luZyBmdW5jdGlvbi4K LSsgKiAgQHJldHVybiAgICAgICAgICAgIDAgaWYgaW5sZW4gaXMgb3V0IG9mIHJhbmdlIFsyNCwg Q1JZUFRPMTI4X1dSQVBfTUFYXQotKyAqICAgICAgICAgICAgICAgICAgICAgb3IgaWYgaW5sZW4g aXMgbm90IG11bHRpcGx5IG9mIDguCi0rICogICAgICAgICAgICAgICAgICAgICBPdXRwdXQgbGVu Z3RoIG90aGVyd2lzZS4KLSsgKi8KLStzdGF0aWMgc2l6ZV90IGNyeXB0b18xMjhfdW53cmFwX3Jh dyh2b2lkICprZXksIHVuc2lnbmVkIGNoYXIgKml2LAotICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBjaGFyICpvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAg IGJsb2NrMTI4X2YgYmxvY2spCi1AQCAtMTEzLDcgKzE1NSw3IEBAIHNpemVfdCBDUllQVE9fMTI4 X3Vud3JhcCh2b2lkICprZXksIGNvbnMKLSAgICAgQSA9IEI7Ci0gICAgIHQgPSA2ICogKGlubGVu ID4+IDMpOwotICAgICBtZW1jcHkoQSwgaW4sIDgpOwotLSAgICBtZW1jcHkob3V0LCBpbiArIDgs IGlubGVuKTsKLSsgICAgbWVtbW92ZShvdXQsIGluICsgOCwgaW5sZW4pOwotICAgICBmb3IgKGog PSAwOyBqIDwgNjsgaisrKSB7Ci0gICAgICAgICBSID0gb3V0ICsgaW5sZW4gLSA4OwotICAgICAg ICAgZm9yIChpID0gMDsgaSA8IGlubGVuOyBpICs9IDgsIHQtLSwgUiAtPSA4KSB7Ci1AQCAtMTI4 LDExICsxNzAsMTkwIEBAIHNpemVfdCBDUllQVE9fMTI4X3Vud3JhcCh2b2lkICprZXksIGNvbnMK LSAgICAgICAgICAgICBtZW1jcHkoUiwgQiArIDgsIDgpOwotICAgICAgICAgfQotICAgICB9Ci0r ICAgIG1lbWNweShpdiwgQSwgOCk7Ci0rICAgIHJldHVybiBpbmxlbjsKLSt9Ci0rCi0rLyoqIFVu d3JhcHBpbmcgYWNjb3JkaW5nIHRvIFJGQyAzMzk0IHNlY3Rpb24gMi4yLjIgaW5jbHVkaW5nIElW IGNoZWNrLgotKyAqICBGaXJzdCBibG9jayBvZiBwbGFpbiB0ZXh0IGhhdmUgdG8gbWF0Y2ggc3Vw cGxpZWQgSVYgb3RoZXJ3aXNlIGFuIGVycm9yIGlzCi0rICogIHJldHVybmVkLgotKyAqCi0rICog IEBwYXJhbVtpbl0gIGtleSAgICBLZXkgdmFsdWUuIAotKyAqICBAcGFyYW1bb3V0XSBpdiAgICAg VW5jaGVja2VkIElWIHZhbHVlLiBNaW5pbWFsIGJ1ZmZlciBsZW5ndGggPSA4IGJ5dGVzLgotKyAq ICBAcGFyYW1bb3V0XSBvdXQgICAgUGxhaW4gdGV4dCB3aXRob3V0IElWLgotKyAqICAgICAgICAg ICAgICAgICAgICAgTWluaW1hbCBidWZmZXIgbGVuZ3RoID0gKGlubGVuIC0gOCkgYnl0ZXMuCi0r ICogICAgICAgICAgICAgICAgICAgICBJbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgY2FuIG92ZXJs YXAgaWYgYmxvY2sgZnVuY3Rpb24KLSsgKiAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRzIHRo YXQuCi0rICogIEBwYXJhbVtpbl0gIGluICAgICBDaXBoZXJ0ZXh0IHRleHQgYXMgbiA2NC1iaXQg YmxvY2tzCi0rICogIEBwYXJhbVtpbl0gIGlubGVuICBMZW5ndGggb2YgaW4uCi0rICogIEBwYXJh bVtpbl0gIGJsb2NrICBCbG9jayBwcm9jZXNzaW5nIGZ1bmN0aW9uLgotKyAqICBAcmV0dXJuICAg ICAgICAgICAgMCBpZiBpbmxlbiBpcyBvdXQgb2YgcmFuZ2UgWzI0LCBDUllQVE8xMjhfV1JBUF9N QVhdCi0rICogICAgICAgICAgICAgICAgICAgICBvciBpZiBpbmxlbiBpcyBub3QgbXVsdGlwbHkg b2YgOAotKyAqICAgICAgICAgICAgICAgICAgICAgb3IgaWYgSVYgZG9lc24ndCBtYXRjaCBleHBl Y3RlZCB2YWx1ZS4KLSsgKiAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBsZW5ndGggb3RoZXJ3 aXNlLgotKyAqLwotK3NpemVfdCBDUllQVE9fMTI4X3Vud3JhcCh2b2lkICprZXksIGNvbnN0IHVu c2lnbmVkIGNoYXIgKml2LAotKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy ICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgaW5sZW4sIGJsb2NrMTI4X2YgYmxvY2spCi0rewotKyAgICBzaXplX3QgcmV0Owot KyAgICB1bnNpZ25lZCBjaGFyIGdvdF9pdls4XTsKLSsKLSsgICAgcmV0ID0gY3J5cHRvXzEyOF91 bndyYXBfcmF3KGtleSwgZ290X2l2LCBvdXQsIGluLCBpbmxlbiwgYmxvY2spOwotKyAgICBpZiAo cmV0ID09IDApCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSAgICAgaWYgKCFpdikKLSAgICAgICAg IGl2ID0gZGVmYXVsdF9pdjsKLS0gICAgaWYgKG1lbWNtcChBLCBpdiwgOCkpIHsKLSsgICAgaWYg KENSWVBUT19tZW1jbXAoZ290X2l2LCBpdiwgOCkpIHsKLSsgICAgICAgIE9QRU5TU0xfY2xlYW5z ZShvdXQsIHJldCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICByZXR1cm4gcmV0 OwotK30KLSsKLSsvKiogV3JhcHBpbmcgYWNjb3JkaW5nIHRvIFJGQyA1NjQ5IHNlY3Rpb24gNC4x LgotKyAqCi0rICogIEBwYXJhbVtpbl0gIGtleSAgICBLZXkgdmFsdWUuIAotKyAqICBAcGFyYW1b aW5dICBpY3YgICAgKE5vbi1zdGFuZGFyZCkgSVYsIDQgYnl0ZXMuIE5VTEwgPSB1c2UgZGVmYXVs dF9haXYuCi0rICogIEBwYXJhbVtvdXRdIG91dCAgICBDaXBoZXIgdGV4dC4gTWluaW1hbCBidWZm ZXIgbGVuZ3RoID0gKGlubGVuICsgMTUpIGJ5dGVzLgotKyAqICAgICAgICAgICAgICAgICAgICAg SW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGNhbiBvdmVybGFwIGlmIGJsb2NrIGZ1bmN0aW9uCi0r ICogICAgICAgICAgICAgICAgICAgICBzdXBwb3J0cyB0aGF0LgotKyAqICBAcGFyYW1baW5dICBp biAgICAgUGxhaW4gdGV4dCBhcyBuIDY0LWJpdCBibG9ja3MsIG4gPj0gMi4KLSsgKiAgQHBhcmFt W2luXSAgaW5sZW4gIExlbmd0aCBvZiBpbi4KLSsgKiAgQHBhcmFtW2luXSAgYmxvY2sgIEJsb2Nr IHByb2Nlc3NpbmcgZnVuY3Rpb24uCi0rICogIEByZXR1cm4gICAgICAgICAgICAwIGlmIGlubGVu IGlzIG91dCBvZiByYW5nZSBbMSwgQ1JZUFRPMTI4X1dSQVBfTUFYXS4KLSsgKiAgICAgICAgICAg ICAgICAgICAgIE91dHB1dCBsZW5ndGggaWYgd3JhcHBpbmcgc3VjY2VlZGVkLgotKyAqLwotK3Np emVfdCBDUllQVE9fMTI4X3dyYXBfcGFkKHZvaWQgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAq aWN2LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90 IGlubGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrMTI4X2YgYmxvY2spCi0r ewotKyAgICAvKiBuOiBudW1iZXIgb2YgNjQtYml0IGJsb2NrcyBpbiB0aGUgcGFkZGVkIGtleSBk YXRhICovCi0rICAgIGNvbnN0IHNpemVfdCBibG9ja3NfcGFkZGVkID0gKGlubGVuICsgNykgLyA4 OwotKyAgICBjb25zdCBzaXplX3QgcGFkZGVkX2xlbiA9IGJsb2Nrc19wYWRkZWQgKiA4OwotKyAg ICBjb25zdCBzaXplX3QgcGFkZGluZ19sZW4gPSBwYWRkZWRfbGVuIC0gaW5sZW47Ci0rICAgIC8q IFJGQyA1NjQ5IHNlY3Rpb24gMzogQWx0ZXJuYXRpdmUgSW5pdGlhbCBWYWx1ZSAqLwotKyAgICB1 bnNpZ25lZCBjaGFyIGFpdls4XTsKLSsgICAgaW50IHJldDsKLSsKLSsgICAgLyogU2VjdGlvbiAx OiB1c2UgMzItYml0IGZpeGVkIGZpZWxkIGZvciBwbGFpbnRleHQgb2N0ZXQgbGVuZ3RoICovCi0r ICAgIGlmIChpbmxlbiA9PSAwIHx8IGlubGVuID49IENSWVBUTzEyOF9XUkFQX01BWCkKLSsgICAg ICAgIHJldHVybiAwOwotKwotKyAgICAvKiBTZWN0aW9uIDM6IEFsdGVybmF0aXZlIEluaXRpYWwg VmFsdWUgKi8KLSsgICAgaWYgKCFpY3YpCi0rICAgICAgICBtZW1jcHkoYWl2LCBkZWZhdWx0X2Fp diwgNCk7Ci0rICAgIGVsc2UKLSsgICAgICAgIG1lbWNweShhaXYsIGljdiwgNCk7ICAgIC8qIFN0 YW5kYXJkIGRvZXNuJ3QgbWVudGlvbiB0aGlzLiAqLwotKwotKyAgICBhaXZbNF0gPSAoaW5sZW4g Pj4gMjQpICYgMHhGRjsKLSsgICAgYWl2WzVdID0gKGlubGVuID4+IDE2KSAmIDB4RkY7Ci0rICAg IGFpdls2XSA9IChpbmxlbiA+PiA4KSAmIDB4RkY7Ci0rICAgIGFpdls3XSA9IGlubGVuICYgMHhG RjsKLSsKLSsgICAgaWYgKHBhZGRlZF9sZW4gPT0gOCkgewotKyAgICAgICAgLyogU2VjdGlvbiA0 LjEgLSBzcGVjaWFsIGNhc2UgaW4gc3RlcCAyOgotKyAgICAgICAgICogSWYgdGhlIHBhZGRlZCBw bGFpbnRleHQgY29udGFpbnMgZXhhY3RseSBlaWdodCBvY3RldHMsIHRoZW4KLSsgICAgICAgICAq IHByZXBlbmQgdGhlIEFJViBhbmQgZW5jcnlwdCB0aGUgcmVzdWx0aW5nIDEyOC1iaXQgYmxvY2sK LSsgICAgICAgICAqIHVzaW5nIEFFUyBpbiBFQ0IgbW9kZS4gKi8KLSsgICAgICAgIG1lbW1vdmUo b3V0ICsgOCwgaW4sIGlubGVuKTsKLSsgICAgICAgIG1lbWNweShvdXQsIGFpdiwgOCk7Ci0rICAg ICAgICBtZW1zZXQob3V0ICsgOCArIGlubGVuLCAwLCBwYWRkaW5nX2xlbik7Ci0rICAgICAgICBi bG9jayhvdXQsIG91dCwga2V5KTsKLSsgICAgICAgIHJldCA9IDE2OyAgICAgICAgICAgICAgIC8q IEFJViArIHBhZGRlZCBpbnB1dCAqLwotKyAgICB9IGVsc2UgewotKyAgICAgICAgbWVtbW92ZShv dXQsIGluLCBpbmxlbik7Ci0rICAgICAgICBtZW1zZXQob3V0ICsgaW5sZW4sIDAsIHBhZGRpbmdf bGVuKTsgLyogU2VjdGlvbiA0LjEgc3RlcCAxICovCi0rICAgICAgICByZXQgPSBDUllQVE9fMTI4 X3dyYXAoa2V5LCBhaXYsIG91dCwgb3V0LCBwYWRkZWRfbGVuLCBibG9jayk7Ci0rICAgIH0KLSsK LSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rCi0rLyoqIFVud3JhcHBpbmcgYWNjb3JkaW5nIHRvIFJG QyA1NjQ5IHNlY3Rpb24gNC4yLgotKyAqCi0rICogIEBwYXJhbVtpbl0gIGtleSAgICBLZXkgdmFs dWUuIAotKyAqICBAcGFyYW1baW5dICBpY3YgICAgKE5vbi1zdGFuZGFyZCkgSVYsIDQgYnl0ZXMu IE5VTEwgPSB1c2UgZGVmYXVsdF9haXYuCi0rICogIEBwYXJhbVtvdXRdIG91dCAgICBQbGFpbiB0 ZXh0LiBNaW5pbWFsIGJ1ZmZlciBsZW5ndGggPSBpbmxlbiBieXRlcy4KLSsgKiAgICAgICAgICAg ICAgICAgICAgIElucHV0IGFuZCBvdXRwdXQgYnVmZmVycyBjYW4gb3ZlcmxhcCBpZiBibG9jayBm dW5jdGlvbgotKyAqICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHMgdGhhdC4KLSsgKiAgQHBh cmFtW2luXSAgaW4gICAgIENpcGhlcnRleHQgdGV4dCBhcyBuIDY0LWJpdCBibG9ja3MKLSsgKiAg QHBhcmFtW2luXSAgaW5sZW4gIExlbmd0aCBvZiBpbi4KLSsgKiAgQHBhcmFtW2luXSAgYmxvY2sg IEJsb2NrIHByb2Nlc3NpbmcgZnVuY3Rpb24uCi0rICogIEByZXR1cm4gICAgICAgICAgICAwIGlm IGlubGVuIGlzIG91dCBvZiByYW5nZSBbMTYsIENSWVBUTzEyOF9XUkFQX01BWF0sCi0rICogICAg ICAgICAgICAgICAgICAgICBvciBpZiBpbmxlbiBpcyBub3QgbXVsdGlwbHkgb2YgOAotKyAqICAg ICAgICAgICAgICAgICAgICAgb3IgaWYgSVYgYW5kIG1lc3NhZ2UgbGVuZ3RoIGluZGljYXRvciBk b2Vzbid0IG1hdGNoLgotKyAqICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IGxlbmd0aCBpZiB1 bndyYXBwaW5nIHN1Y2NlZWRlZCBhbmQgSVYgbWF0Y2hlcy4KLSsgKi8KLStzaXplX3QgQ1JZUFRP XzEyOF91bndyYXBfcGFkKHZvaWQgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaWN2LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxl biwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrMTI4X2YgYmxvY2spCi0rewot KyAgICAvKiBuOiBudW1iZXIgb2YgNjQtYml0IGJsb2NrcyBpbiB0aGUgcGFkZGVkIGtleSBkYXRh ICovCi0rICAgIHNpemVfdCBuID0gaW5sZW4gLyA4IC0gMTsKLSsgICAgc2l6ZV90IHBhZGRlZF9s ZW47Ci0rICAgIHNpemVfdCBwYWRkaW5nX2xlbjsKLSsgICAgc2l6ZV90IHB0ZXh0X2xlbjsKLSsg ICAgLyogUkZDIDU2NDkgc2VjdGlvbiAzOiBBbHRlcm5hdGl2ZSBJbml0aWFsIFZhbHVlICovCi0r ICAgIHVuc2lnbmVkIGNoYXIgYWl2WzhdOwotKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciB6ZXJv c1s4XSA9IHsgMHgwIH07Ci0rICAgIHNpemVfdCByZXQ7Ci0rCi0rICAgIC8qIFNlY3Rpb24gNC4y OiBDaXBoZXIgdGV4dCBsZW5ndGggaGFzIHRvIGJlIChuKzEpIDY0LWJpdCBibG9ja3MuICovCi0r ICAgIGlmICgoaW5sZW4gJiAweDcpICE9IDAgfHwgaW5sZW4gPCAxNiB8fCBpbmxlbiA+PSBDUllQ VE8xMjhfV1JBUF9NQVgpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgbWVtbW92ZShvdXQs IGluLCBpbmxlbik7Ci0rICAgIGlmIChpbmxlbiA9PSAxNikgewotKyAgICAgICAgLyogU2VjdGlv biA0LjIgLSBzcGVjaWFsIGNhc2UgaW4gc3RlcCAxOgotKyAgICAgICAgICogV2hlbiBuPTEsIHRo ZSBjaXBoZXJ0ZXh0IGNvbnRhaW5zIGV4YWN0bHkgdHdvIDY0LWJpdAotKyAgICAgICAgICogYmxv Y2tzIGFuZCB0aGV5IGFyZSBkZWNyeXB0ZWQgYXMgYSBzaW5nbGUgQUVTCi0rICAgICAgICAgKiBi bG9jayB1c2luZyBBRVMgaW4gRUNCIG1vZGU6Ci0rICAgICAgICAgKiBBSVYgfCBQWzFdID0gREVD KEssIENbMF0gfCBDWzFdKQotKyAgICAgICAgICovCi0rICAgICAgICBibG9jayhvdXQsIG91dCwg a2V5KTsKLSsgICAgICAgIG1lbWNweShhaXYsIG91dCwgOCk7Ci0rICAgICAgICAvKiBSZW1vdmUg QUlWICovCi0rICAgICAgICBtZW1tb3ZlKG91dCwgb3V0ICsgOCwgOCk7Ci0rICAgICAgICBwYWRk ZWRfbGVuID0gODsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIHBhZGRlZF9sZW4gPSBpbmxlbiAt IDg7Ci0rICAgICAgICByZXQgPSBjcnlwdG9fMTI4X3Vud3JhcF9yYXcoa2V5LCBhaXYsIG91dCwg b3V0LCBpbmxlbiwgYmxvY2spOwotKyAgICAgICAgaWYgKHBhZGRlZF9sZW4gIT0gcmV0KSB7Ci0g ICAgICAgICBPUEVOU1NMX2NsZWFuc2Uob3V0LCBpbmxlbik7Ci0gICAgICAgICByZXR1cm4gMDsK LSAgICAgfQotLSAgICByZXR1cm4gaW5sZW47Ci0rICAgIH0KLSsKLSsgICAgLyogU2VjdGlvbiAz OiBBSVYgY2hlY2tzOiBDaGVjayB0aGF0IE1TQigzMixBKSA9IEE2NTk1OUE2LgotKyAgICAgKiBP cHRpb25hbGx5IGEgdXNlci1zdXBwbGllZCB2YWx1ZSBjYW4gYmUgdXNlZAotKyAgICAgKiAoZXZl biBpZiBzdGFuZGFyZCBkb2Vzbid0IG1lbnRpb24gdGhpcykuICovCi0rICAgIGlmICgoIWljdiAm JiBDUllQVE9fbWVtY21wKGFpdiwgZGVmYXVsdF9haXYsIDQpKQotKyAgICAgICAgfHwgKGljdiAm JiBDUllQVE9fbWVtY21wKGFpdiwgaWN2LCA0KSkpIHsKLSsgICAgICAgIE9QRU5TU0xfY2xlYW5z ZShvdXQsIGlubGVuKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rICAgIC8qIENo ZWNrIHRoYXQgOCoobi0xKSA8IExTQigzMixBSVYpIDw9IDgqbi4KLSsgICAgICogSWYgc28sIGxl dCBwdGV4dF9sZW4gPSBMU0IoMzIsQUlWKS4gKi8KLSsKLSsgICAgcHRleHRfbGVuID0gKGFpdls0 XSA8PCAyNCkgfCAoYWl2WzVdIDw8IDE2KSB8IChhaXZbNl0gPDwgOCkgfCBhaXZbN107Ci0rICAg IGlmICg4ICogKG4gLSAxKSA+PSBwdGV4dF9sZW4gfHwgcHRleHRfbGVuID4gOCAqIG4pIHsKLSsg ICAgICAgIE9QRU5TU0xfY2xlYW5zZShvdXQsIGlubGVuKTsKLSsgICAgICAgIHJldHVybiAwOwot KyAgICB9Ci0rCi0rICAgIC8qIENoZWNrIHRoYXQgdGhlIHJpZ2h0bW9zdCBwYWRkaW5nX2xlbiBv Y3RldHMgb2YgdGhlIG91dHB1dCBkYXRhCi0rICAgICAqIGFyZSB6ZXJvLiAqLwotKyAgICBwYWRk aW5nX2xlbiA9IHBhZGRlZF9sZW4gLSBwdGV4dF9sZW47Ci0rICAgIGlmIChDUllQVE9fbWVtY21w KG91dCArIHB0ZXh0X2xlbiwgemVyb3MsIHBhZGRpbmdfbGVuKSAhPSAwKSB7Ci0rICAgICAgICBP UEVOU1NMX2NsZWFuc2Uob3V0LCBpbmxlbik7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQot KwotKyAgICAvKiBTZWN0aW9uIDQuMiBzdGVwIDM6IFJlbW92ZSBwYWRkaW5nICovCi0rICAgIHJl dHVybiBwdGV4dF9sZW47Ci0gfQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjJjLWZpcHMucGF0 Y2ggYi9vcGVuc3NsLTEuMC4yYy1maXBzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBiMjMzNjhkLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjJjLWZpcHMucGF0Y2gKKysr IC9kZXYvbnVsbApAQCAtMSwxMzY5OSArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9h cHBzL3NwZWVkLmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9hcHBzL3NwZWVkLmMKLS0tLSBvcGVuc3Ns LTEuMC4yYy9hcHBzL3NwZWVkLmMuZmlwcwkyMDE1LTA2LTEyIDE2OjUxOjIxLjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2FwcHMvc3BlZWQuYwkyMDE1LTA2LTE1IDE3OjI5OjU5 Ljk5OTI4Mzc3NiArMDIwMAotQEAgLTE5Nyw3ICsxOTcsNiBAQAotICMgIGlmZGVmIE9QRU5TU0xf RE9JTkdfTUFLRURFUEVORAotICMgICB1bmRlZiBBRVNfc2V0X2VuY3J5cHRfa2V5Ci0gIyAgIHVu ZGVmIEFFU19zZXRfZGVjcnlwdF9rZXkKLS0jICAgdW5kZWYgREVTX3NldF9rZXlfdW5jaGVja2Vk Ci0gIyAgZW5kaWYKLSAjICBkZWZpbmUgQkZfc2V0X2tleSAgICAgIHByaXZhdGVfQkZfc2V0X2tl eQotICMgIGRlZmluZSBDQVNUX3NldF9rZXkgICAgcHJpdmF0ZV9DQVNUX3NldF9rZXkKLUBAIC0y MDUsNyArMjA0LDYgQEAKLSAjICBkZWZpbmUgU0VFRF9zZXRfa2V5ICAgIHByaXZhdGVfU0VFRF9z ZXRfa2V5Ci0gIyAgZGVmaW5lIFJDMl9zZXRfa2V5ICAgICBwcml2YXRlX1JDMl9zZXRfa2V5Ci0g IyAgZGVmaW5lIFJDNF9zZXRfa2V5ICAgICBwcml2YXRlX1JDNF9zZXRfa2V5Ci0tIyAgZGVmaW5l IERFU19zZXRfa2V5X3VuY2hlY2tlZCAgIHByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkCi0g IyAgZGVmaW5lIEFFU19zZXRfZW5jcnlwdF9rZXkgICAgIHByaXZhdGVfQUVTX3NldF9lbmNyeXB0 X2tleQotICMgIGRlZmluZSBBRVNfc2V0X2RlY3J5cHRfa2V5ICAgICBwcml2YXRlX0FFU19zZXRf ZGVjcnlwdF9rZXkKLSAjICBkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSAgICAgICAgcHJpdmF0ZV9D YW1lbGxpYV9zZXRfa2V5Ci1AQCAtOTc0LDcgKzk3MiwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCi0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gICAgICAg ICBpZiAoc3RyY21wKCphcmd2LCAicnNhIikgPT0gMCkgewotLSAgICAgICAgICAgIHJzYV9kb2l0 W1JfUlNBXzUxMl0gPSAxOwotKyMgIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICAgICAgICAgIGlm ICghRklQU19tb2RlKCkpCi0rIyAgZW5kaWYKLSsgICAgICAgICAgICB7Ci0rICAgICAgICAgICAg ICAgIHJzYV9kb2l0W1JfUlNBXzUxMl0gPSAxOwotKyAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICByc2FfZG9pdFtSX1JTQV8xMDI0XSA9IDE7Ci0gICAgICAgICAgICAgcnNhX2RvaXRbUl9SU0Ff MjA0OF0gPSAxOwotICAgICAgICAgICAgIHJzYV9kb2l0W1JfUlNBXzQwOTZdID0gMTsKLUBAIC05 ODIsNyArOTg1LDEyIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAjIGVuZGlm Ci0gIyBpZm5kZWYgT1BFTlNTTF9OT19EU0EKLSAgICAgICAgIGlmIChzdHJjbXAoKmFyZ3YsICJk c2EiKSA9PSAwKSB7Ci0tICAgICAgICAgICAgZHNhX2RvaXRbUl9EU0FfNTEyXSA9IDE7Ci0rIyAg aWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgICAgICAgICAgaWYgKCFGSVBTX21vZGUoKSkKLSsjICBl bmRpZgotKyAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgZHNhX2RvaXRbUl9EU0FfNTEy XSA9IDE7Ci0rICAgICAgICAgICAgfQotICAgICAgICAgICAgIGRzYV9kb2l0W1JfRFNBXzEwMjRd ID0gMTsKLSAgICAgICAgICAgICBkc2FfZG9pdFtSX0RTQV8yMDQ4XSA9IDE7Ci0gICAgICAgICB9 IGVsc2UKLUBAIC0xMjMzLDEzICsxMjQxLDE5IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoq YXJndikKLSAKLSAgICAgaWYgKGogPT0gMCkgewotICAgICAgICAgZm9yIChpID0gMDsgaSA8IEFM R09SX05VTTsgaSsrKSB7Ci0tICAgICAgICAgICAgaWYgKGkgIT0gRF9FVlApCi0rICAgICAgICAg ICAgaWYgKGkgIT0gRF9FVlAgJiYKLSsgICAgICAgICAgICAgICAgKCFGSVBTX21vZGUoKSB8fCAo aSAhPSBEX1dISVJMUE9PTCAmJgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ICE9IERfTUQyICYmIGkgIT0gRF9NRDQgJiYKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaSAhPSBEX01ENSAmJiBpICE9IERfTURDMiAmJgotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpICE9IERfUk1EMTYwKSkpCi0gICAgICAgICAgICAgICAgIGRvaXRbaV0g PSAxOwotICAgICAgICAgfQotICAgICAgICAgZm9yIChpID0gMDsgaSA8IFJTQV9OVU07IGkrKykK LS0gICAgICAgICAgICByc2FfZG9pdFtpXSA9IDE7Ci0rICAgICAgICAgICAgaWYgKCFGSVBTX21v ZGUoKSB8fCBpICE9IFJfUlNBXzUxMikKLSsgICAgICAgICAgICAgICAgcnNhX2RvaXRbaV0gPSAx OwotICAgICAgICAgZm9yIChpID0gMDsgaSA8IERTQV9OVU07IGkrKykKLS0gICAgICAgICAgICBk c2FfZG9pdFtpXSA9IDE7Ci0rICAgICAgICAgICAgaWYgKCFGSVBTX21vZGUoKSB8fCBpICE9IFJf RFNBXzUxMikKLSsgICAgICAgICAgICAgICAgZHNhX2RvaXRbaV0gPSAxOwotICMgaWZuZGVmIE9Q RU5TU0xfTk9fRUNEU0EKLSAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBFQ19OVU07IGkrKykKLSAg ICAgICAgICAgICBlY2RzYV9kb2l0W2ldID0gMTsKLUBAIC0xMjk5LDMwICsxMzEzLDQ2IEBAIGlu dCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAgQUVTX3NldF9lbmNyeXB0X2tleShr ZXkzMiwgMjU2LCAmYWVzX2tzMyk7Ci0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9fQ0FN RUxMSUEKLS0gICAgQ2FtZWxsaWFfc2V0X2tleShrZXkxNiwgMTI4LCAmY2FtZWxsaWFfa3MxKTsK LS0gICAgQ2FtZWxsaWFfc2V0X2tleShja2V5MjQsIDE5MiwgJmNhbWVsbGlhX2tzMik7Ci0tICAg IENhbWVsbGlhX3NldF9rZXkoY2tleTMyLCAyNTYsICZjYW1lbGxpYV9rczMpOwotKyAgICBpZiAo ZG9pdFtEX0NCQ18xMjhfQ01MXSB8fCBkb2l0W0RfQ0JDXzE5Ml9DTUxdIHx8IGRvaXRbRF9DQkNf MjU2X0NNTF0pIHsKLSsgICAgICAgIENhbWVsbGlhX3NldF9rZXkoa2V5MTYsIDEyOCwgJmNhbWVs bGlhX2tzMSk7Ci0rICAgICAgICBDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwgMTkyLCAmY2FtZWxs aWFfa3MyKTsKLSsgICAgICAgIENhbWVsbGlhX3NldF9rZXkoY2tleTMyLCAyNTYsICZjYW1lbGxp YV9rczMpOwotKyAgICB9Ci0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9fSURFQQotLSAg ICBpZGVhX3NldF9lbmNyeXB0X2tleShrZXkxNiwgJmlkZWFfa3MpOwotKyAgICBpZiAoZG9pdFtE X0NCQ19JREVBXSkgewotKyAgICAgICAgaWRlYV9zZXRfZW5jcnlwdF9rZXkoa2V5MTYsICZpZGVh X2tzKTsKLSsgICAgfQotICMgZW5kaWYKLSAjIGlmbmRlZiBPUEVOU1NMX05PX1NFRUQKLS0gICAg U0VFRF9zZXRfa2V5KGtleTE2LCAmc2VlZF9rcyk7Ci0rICAgIGlmIChkb2l0W0RfQ0JDX1NFRURd KSB7Ci0rICAgICAgICBTRUVEX3NldF9rZXkoa2V5MTYsICZzZWVkX2tzKTsKLSsgICAgfQotICMg ZW5kaWYKLSAjIGlmbmRlZiBPUEVOU1NMX05PX1JDNAotLSAgICBSQzRfc2V0X2tleSgmcmM0X2tz LCAxNiwga2V5MTYpOwotKyAgICBpZiAoZG9pdFtEX1JDNF0pIHsKLSsgICAgICAgIFJDNF9zZXRf a2V5KCZyYzRfa3MsIDE2LCBrZXkxNik7Ci0rICAgIH0KLSAjIGVuZGlmCi0gIyBpZm5kZWYgT1BF TlNTTF9OT19SQzIKLS0gICAgUkMyX3NldF9rZXkoJnJjMl9rcywgMTYsIGtleTE2LCAxMjgpOwot KyAgICBpZiAoZG9pdFtEX0NCQ19SQzJdKSB7Ci0rICAgICAgICBSQzJfc2V0X2tleSgmcmMyX2tz LCAxNiwga2V5MTYsIDEyOCk7Ci0rICAgIH0KLSAjIGVuZGlmCi0gIyBpZm5kZWYgT1BFTlNTTF9O T19SQzUKLS0gICAgUkM1XzMyX3NldF9rZXkoJnJjNV9rcywgMTYsIGtleTE2LCAxMik7Ci0rICAg IGlmIChkb2l0W0RfQ0JDX1JDNV0pIHsKLSsgICAgICAgIFJDNV8zMl9zZXRfa2V5KCZyYzVfa3Ms IDE2LCBrZXkxNiwgMTIpOwotKyAgICB9Ci0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9f QkYKLS0gICAgQkZfc2V0X2tleSgmYmZfa3MsIDE2LCBrZXkxNik7Ci0rICAgIGlmIChkb2l0W0Rf Q0JDX0JGXSkgewotKyAgICAgICAgQkZfc2V0X2tleSgmYmZfa3MsIDE2LCBrZXkxNik7Ci0rICAg IH0KLSAjIGVuZGlmCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19DQVNUCi0tICAgIENBU1Rfc2V0X2tl eSgmY2FzdF9rcywgMTYsIGtleTE2KTsKLSsgICAgaWYgKGRvaXRbRF9DQkNfQ0FTVF0pIHsKLSsg ICAgICAgIENBU1Rfc2V0X2tleSgmY2FzdF9rcywgMTYsIGtleTE2KTsKLSsgICAgfQotICMgZW5k aWYKLSAjIGlmbmRlZiBPUEVOU1NMX05PX1JTQQotICAgICBtZW1zZXQocnNhX2MsIDAsIHNpemVv Zihyc2FfYykpOwotQEAgLTE2MDUsNiArMTYzNSw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFy ICoqYXJndikKLSAgICAgICAgIEhNQUNfQ1RYIGhjdHg7Ci0gCi0gICAgICAgICBITUFDX0NUWF9p bml0KCZoY3R4KTsKLSsgICAgICAgIEhNQUNfQ1RYX3NldF9mbGFncygmaGN0eCwgRVZQX01EX0NU WF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAgICAgICAgIEhNQUNfSW5pdF9leCgmaGN0eCwgKHVu c2lnbmVkIGNoYXIgKikiVGhpcyBpcyBhIGtleS4uLiIsCi0gICAgICAgICAgICAgICAgICAgICAg MTYsIEVWUF9tZDUoKSwgTlVMTCk7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9Db25maWd1 cmUuZmlwcyBvcGVuc3NsLTEuMC4yYy9Db25maWd1cmUKLS0tLSBvcGVuc3NsLTEuMC4yYy9Db25m aWd1cmUuZmlwcwkyMDE1LTA2LTE1IDE3OjI5OjU5Ljk4MjI4MzM4NyArMDIwMAotKysrIG9wZW5z c2wtMS4wLjJjL0NvbmZpZ3VyZQkyMDE1LTA2LTE1IDE3OjI5OjU5Ljk5OTI4Mzc3NiArMDIwMAot QEAgLTEwNTcsMTEgKzEwNTcsNiBAQCBpZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBk ZWZpbmVkCi0gCSRkaXNhYmxlZHsic3NsMiJ9ID0gImZvcmNlZCI7Ci0gCX0KLSAKLS1pZiAoJGZp cHMgJiYgJGZpcHNsaWJkaXIgZXEgIiIpCi0tCXsKLS0JJGZpcHNsaWJkaXIgPSAkZmlwc2RpciAu ICIvbGliLyI7Ci0tCX0KLS0KLSAjIFJTQVggRU5HSU5FIHNldHMgZGVmYXVsdCBub24tRklQUyBS U0EgbWV0aG9kLgotIGlmICgkZmlwcykKLSAJewotQEAgLTE1NTAsNyArMTU0NSw2IEBAICRjZmxh Z3MuPSIgLURPUEVOU1NMX0JOX0FTTV9HRjJtIiBpZiAoJGIKLSBpZiAoJGZpcHMpCi0gCXsKLSAJ JG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTXG4iOwotLQkkY2Zs YWdzIC49ICIgLUlcJChGSVBTRElSKS9pbmNsdWRlIjsKLSAJfQotIAotICRjcHVpZF9vYmo9Im1l bV9jbHIubyIJdW5sZXNzICgkY3B1aWRfb2JqID1+IC9cLm8kLyk7Ci1AQCAtMTc1MSw5ICsxNzQ1 LDEyIEBAIHdoaWxlICg8SU4+KQotIAotIAlzL15GSVBTRElSPS4qL0ZJUFNESVI9JGZpcHNkaXIv OwotIAlzL15GSVBTTElCRElSPS4qL0ZJUFNMSUJESVI9JGZpcHNsaWJkaXIvOwotLQlzL15GSVBT Q0FOTElCPS4qL0ZJUFNDQU5MSUI9bGliY3J5cHRvLyBpZiAkZmlwczsKLSAJcy9eQkFTRUFERFI9 LiovQkFTRUFERFI9JGJhc2VhZGRyLzsKLSAKLSsJaWYgKCRmaXBzKQotKwkJewotKwkJcy9eRklQ Uz0uKi9GSVBTPXllcy87Ci0rCQl9Ci0gCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9 JHNoYXJlZF90YXJnZXQvOwotIAlzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9t YXJrLzsKLSAJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykg XCQoU0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4y Yy9jcnlwdG8vYWVzL2Flc19taXNjLmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vYWVzL2Fl c19taXNjLmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vYWVzL2Flc19taXNjLmMuZmlwcwky MDE1LTA2LTEyIDE2OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2Ny eXB0by9hZXMvYWVzX21pc2MuYwkyMDE1LTA2LTE1IDE3OjI5OjU5Ljk5OTI4Mzc3NiArMDIwMAot QEAgLTcwLDE3ICs3MCwxMSBAQCBjb25zdCBjaGFyICpBRVNfb3B0aW9ucyh2b2lkKQotIGludCBB RVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGlu dCBiaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIEFFU19LRVkgKmtleSkKLSB7Ci0tI2lm ZGVmIE9QRU5TU0xfRklQUwotLSAgICBmaXBzX2NpcGhlcl9hYm9ydChBRVMpOwotLSNlbmRpZgot ICAgICByZXR1cm4gcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtl eSk7Ci0gfQotIAotIGludCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIg KnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIEFFU19L RVkgKmtleSkKLSB7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBmaXBzX2NpcGhlcl9hYm9y dChBRVMpOwotLSNlbmRpZgotICAgICByZXR1cm4gcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5 KHVzZXJLZXksIGJpdHMsIGtleSk7Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRv L2NtYWMvY21hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2NtYWMvY21hYy5jCi0tLS0g b3BlbnNzbC0xLjAuMmMvY3J5cHRvL2NtYWMvY21hYy5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToy MS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vY21hYy9jbWFjLmMJ MjAxNS0wNi0xNSAxNzoyOTo1OS45OTkyODM3NzYgKzAyMDAKLUBAIC0xMDUsMTIgKzEwNSw2IEBA IENNQUNfQ1RYICpDTUFDX0NUWF9uZXcodm9pZCkKLSAKLSB2b2lkIENNQUNfQ1RYX2NsZWFudXAo Q01BQ19DVFggKmN0eCkKLSB7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBpZiAoRklQU19t b2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpIHsKLS0gICAgICAgIEZJUFNfY21hY19jdHhfY2xl YW51cChjdHgpOwotLSAgICAgICAgcmV0dXJuOwotLSAgICB9Ci0tI2VuZGlmCi0gICAgIEVWUF9D SVBIRVJfQ1RYX2NsZWFudXAoJmN0eC0+Y2N0eCk7Ci0gICAgIE9QRU5TU0xfY2xlYW5zZShjdHgt PnRibCwgRVZQX01BWF9CTE9DS19MRU5HVEgpOwotICAgICBPUEVOU1NMX2NsZWFuc2UoY3R4LT5r MSwgRVZQX01BWF9CTE9DS19MRU5HVEgpOwotQEAgLTE2MCwxMiArMTU0LDYgQEAgaW50IENNQUNf SW5pdChDTUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkCi0gICAgICAgICAgICAgRVZQZXJyKEVWUF9G X0NNQUNfSU5JVCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotICAgICAgICAgICAgIHJldHVy biAwOwotICAgICAgICAgfQotLSAgICAgICAgLyoKLS0gICAgICAgICAqIE90aGVyIGFsZ29yaXRo bSBibG9ja2luZyB3aWxsIGJlIGRvbmUgaW4gRklQU19jbWFjX2luaXQsIHZpYQotLSAgICAgICAg ICogRklQU19jaXBoZXJpbml0KCkuCi0tICAgICAgICAgKi8KLS0gICAgICAgIGlmICghaW1wbCAm JiAhY3R4LT5jY3R4LmVuZ2luZSkKLS0gICAgICAgICAgICByZXR1cm4gRklQU19jbWFjX2luaXQo Y3R4LCBrZXksIGtleWxlbiwgY2lwaGVyLCBOVUxMKTsKLSAgICAgfQotICNlbmRpZgotICAgICAv KiBBbGwgemVyb3MgbWVhbnMgcmVzdGFydCAqLwotQEAgLTIxMSwxMCArMTk5LDYgQEAgaW50IENN QUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaQotIHsKLSAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqZGF0YSA9IGluOwotICAgICBzaXplX3QgYmw7Ci0tI2lmZGVmIE9QRU5TU0xfRklQ UwotLSAgICBpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCi0tICAgICAgICBy ZXR1cm4gRklQU19jbWFjX3VwZGF0ZShjdHgsIGluLCBkbGVuKTsKLS0jZW5kaWYKLSAgICAgaWYg KGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCi0gICAgICAgICByZXR1cm4gMDsKLSAgICAgaWYgKGRs ZW4gPT0gMCkKLUBAIC0yNTQsMTAgKzIzOCw2IEBAIGludCBDTUFDX1VwZGF0ZShDTUFDX0NUWCAq Y3R4LCBjb25zdCB2b2kKLSBpbnQgQ01BQ19GaW5hbChDTUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBj aGFyICpvdXQsIHNpemVfdCAqcG91dGxlbikKLSB7Ci0gICAgIGludCBpLCBibCwgbGI7Ci0tI2lm ZGVmIE9QRU5TU0xfRklQUwotLSAgICBpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdp bmUpCi0tICAgICAgICByZXR1cm4gRklQU19jbWFjX2ZpbmFsKGN0eCwgb3V0LCBwb3V0bGVuKTsK LS0jZW5kaWYKLSAgICAgaWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCi0gICAgICAgICByZXR1 cm4gMDsKLSAgICAgYmwgPSBFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplKCZjdHgtPmNjdHgpOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2NyeXB0by5oLmZpcHMgb3BlbnNzbC0xLjAu MmMvY3J5cHRvL2NyeXB0by5oCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2NyeXB0by5oLmZp cHMJMjAxNS0wNi0xNSAxNzoyOTo1OS44ODYyODExODggKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4y Yy9jcnlwdG8vY3J5cHRvLmgJMjAxNS0wNi0xNSAxNzoyOTo1OS45OTkyODM3NzYgKzAyMDAKLUBA IC02MDAsMjQgKzYwMCwyOSBAQCBpbnQgRklQU19tb2RlX3NldChpbnQgcik7Ci0gdm9pZCBPUEVO U1NMX2luaXQodm9pZCk7Ci0gCi0gIyBkZWZpbmUgZmlwc19tZF9pbml0KGFsZykgZmlwc19tZF9p bml0X2N0eChhbGcsIGFsZykKLSsjIGRlZmluZSBub25maXBzX21kX2luaXQoYWxnKSBub25maXBz X21kX2luaXRfY3R4KGFsZywgYWxnKQotKyMgZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBj eCkgXAotKyAgICAgICAgaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCi0gCi0gIyBpZmRlZiBP UEVOU1NMX0ZJUFMKLS0jICBkZWZpbmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0rIyAg ZGVmaW5lIG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAotICAgICAgICAgaW50IGFsZyMj X0luaXQoY3gjI19DVFggKmMpIFwKLSAgICAgICAgIHsgXAotICAgICAgICAgaWYgKEZJUFNfbW9k ZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotLSAgICAgICAgICAgICAgICAi TG93IGxldmVsIEFQSSBjYWxsIHRvIGRpZ2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBt b2RlISIpOyBcCi0rICAgICAgICAgICAgICAgICJEaWdlc3QgIiAjYWxnICIgZm9yYmlkZGVuIGlu IEZJUFMgbW9kZSEiKTsgXAotICAgICAgICAgcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMp OyBcCi0gICAgICAgICB9IFwKLSAgICAgICAgIGludCBwcml2YXRlXyMjYWxnIyNfSW5pdChjeCMj X0NUWCAqYykKLSAKLSAjICBkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQoYWxnKSBcCi0gICAgICAg ICBpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCi0tICAg ICAgICAgICAgICAgICJMb3cgbGV2ZWwgQVBJIGNhbGwgdG8gY2lwaGVyICIgI2FsZyAiIGZvcmJp ZGRlbiBpbiBGSVBTIG1vZGUhIikKLSsgICAgICAgICAgICAgICAgIkNpcGhlciAiICNhbGcgIiBm b3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCi0rCi0rLyogZGllIGlmIEZJUFMgc2VsZnRlc3QgZmFp bGVkICovCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpOwotIAotICMgZWxzZQotLSMg IGRlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKLS0gICAgICAgIGludCBhbGcjI19J bml0KGN4IyNfQ1RYICpjKQotKyMgIGRlZmluZSBub25maXBzX21kX2luaXRfY3R4KGFsZywgY3gp IGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkKLSAjICBkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQo YWxnKSB3aGlsZSgwKQotICMgZW5kaWYKLSAKLUBAIC02MzcsNiArNjQyLDkgQEAgaW50IENSWVBU T19tZW1jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3QgdgotICAqLwotIHZvaWQgRVJSX2xvYWRfQ1JZ UFRPX3N0cmluZ3Modm9pZCk7Ci0gCi0rIyBkZWZpbmUgT1BFTlNTTF9IQVZFX0lOSVQgICAgICAg MQotK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7Ci0rCi0gLyogRXJyb3IgY29kZXMg Zm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLwotIAotIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2Rlcy9kZXMuaC5maXBzIG9wZW5zc2wtMS4w LjJjL2NyeXB0by9kZXMvZGVzLmgKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZGVzL2Rlcy5o LmZpcHMJMjAxNS0wNi0xNSAxNzoyOTo1OS45MTUyODE4NTIgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4yYy9jcnlwdG8vZGVzL2Rlcy5oCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDAwMjgzNzk5ICswMjAw Ci1AQCAtMjMxLDEwICsyMzEsNiBAQCBpbnQgREVTX3NldF9rZXkoY29uc3RfREVTX2NibG9jayAq a2V5LCBECi0gaW50IERFU19rZXlfc2NoZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5 X3NjaGVkdWxlICpzY2hlZHVsZSk7Ci0gaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVT X2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Ci0gdm9pZCBERVNfc2V0 X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpz Y2hlZHVsZSk7Ci0tIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLS12b2lkIHByaXZhdGVfREVTX3NldF9r ZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKLS0jIGVuZGlmCi0g dm9pZCBERVNfc3RyaW5nX3RvX2tleShjb25zdCBjaGFyICpzdHIsIERFU19jYmxvY2sgKmtleSk7 Ci0gdm9pZCBERVNfc3RyaW5nX3RvXzJrZXlzKGNvbnN0IGNoYXIgKnN0ciwgREVTX2NibG9jayAq a2V5MSwgREVTX2NibG9jayAqa2V5Mik7Ci0gdm9pZCBERVNfY2ZiNjRfZW5jcnlwdChjb25zdCB1 bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmMvY3J5cHRvL2Rlcy9zZXRfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZGVz L3NldF9rZXkuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kZXMvc2V0X2tleS5jLmZpcHMJ MjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9j cnlwdG8vZGVzL3NldF9rZXkuYwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAwMDI4Mzc5OSArMDIwMAot QEAgLTM1OSwxNSArMzU5LDYgQEAgaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2Ni bG9jawotIH0KLSAKLSB2b2lkIERFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2Nr ICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQotLSNpZmRlZiBPUEVOU1NMX0ZJUFMK LS17Ci0tICAgIGZpcHNfY2lwaGVyX2Fib3J0KERFUyk7Ci0tICAgIHByaXZhdGVfREVTX3NldF9r ZXlfdW5jaGVja2VkKGtleSwgc2NoZWR1bGUpOwotLX0KLS0KLS12b2lkIHByaXZhdGVfREVTX3Nl dF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwKLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQotLSNlbmRpZgot IHsKLSAgICAgc3RhdGljIGNvbnN0IGludCBzaGlmdHMyWzE2XSA9Ci0gICAgICAgICB7IDAsIDAs IDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAgfTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjJjL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0 by9kaC9kaF9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kaC9kaF9nZW4uYy5maXBz CTIwMTUtMDYtMTIgMTY6NTE6MjEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMv Y3J5cHRvL2RoL2RoX2dlbi5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDAwMjgzNzk5ICswMjAwCi1A QCAtODUsMTAgKzg1LDYgQEAgaW50IERIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoREggKnJldCwg aQotICNlbmRpZgotICAgICBpZiAocmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMpCi0gICAgICAg ICByZXR1cm4gcmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdlbmVy YXRvciwgY2IpOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgaWYgKEZJUFNfbW9kZSgpKQot LSAgICAgICAgcmV0dXJuIEZJUFNfZGhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChyZXQsIHByaW1l X2xlbiwgZ2VuZXJhdG9yLCBjYik7Ci0tI2VuZGlmCi0gICAgIHJldHVybiBkaF9idWlsdGluX2dl bnBhcmFtcyhyZXQsIHByaW1lX2xlbiwgZ2VuZXJhdG9yLCBjYik7Ci0gfQotIAotQEAgLTEyNiw2 ICsxMjIsMTggQEAgc3RhdGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LAotICAg ICBpbnQgZywgb2sgPSAtMTsKLSAgICAgQk5fQ1RYICpjdHggPSBOVUxMOwotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAg IEZJUFNlcnIoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLCBGSVBTX1JfRklQU19TRUxGVEVT VF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgaWYgKEZJUFNf bW9kZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykp IHsKLSsgICAgICAgIERIZXJyKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIERIX1JfS0VZX1NJ WkVfVE9PX1NNQUxMKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0g ICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKLSAgICAgaWYgKGN0eCA9PSBOVUxMKQotICAgICAgICAg Z290byBlcnI7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZGgvZGguaC5maXBzIG9w ZW5zc2wtMS4wLjJjL2NyeXB0by9kaC9kaC5oCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2Ro L2RoLmguZmlwcwkyMDE1LTA2LTE1IDE3OjI5OjU5Ljg2MDI4MDU5MyArMDIwMAotKysrIG9wZW5z c2wtMS4wLjJjL2NyeXB0by9kaC9kaC5oCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDAwMjgzNzk5ICsw MjAwCi1AQCAtNzcsNiArNzcsOCBAQAotICMgIGRlZmluZSBPUEVOU1NMX0RIX01BWF9NT0RVTFVT X0JJVFMgICAgMTAwMDAKLSAjIGVuZGlmCi0gCi0rIyBkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01J Tl9NT0RVTFVTX0JJVFMgMTAyNAotKwotICMgZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9OVF9QICAg ICAweDAxCi0gCi0gLyoKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kaC9kaF9rZXku Yy5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kaC9kaF9rZXkuYwotLS0tIG9wZW5zc2wtMS4w LjJjL2NyeXB0by9kaC9kaF9rZXkuYy5maXBzCTIwMTUtMDYtMTIgMTY6NTE6MjEuMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2RoL2RoX2tleS5jCTIwMTUtMDYtMTUg MTc6MzA6MDAuMDAwMjgzNzk5ICswMjAwCi1AQCAtNjEsNiArNjEsOSBAQAotICNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNsdWRlIDxvcGVu c3NsL2RoLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2VuZGlmCi0gCi0gc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKTsKLSBzdGF0 aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJf a2V5LCBESCAqZGgpOwotQEAgLTk3LDcgKzEwMCw3IEBAIGludCBESF9jb21wdXRlX2tleSh1bnNp Z25lZCBjaGFyICprZXksIGMKLSBpbnQgREhfY29tcHV0ZV9rZXlfcGFkZGVkKHVuc2lnbmVkIGNo YXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpCi0gewotICAgICBpbnQgcnYs IHBhZDsKLS0gICAgcnYgPSBkaC0+bWV0aC0+Y29tcHV0ZV9rZXkoa2V5LCBwdWJfa2V5LCBkaCk7 Ci0rICAgIHJ2ID0gREhfY29tcHV0ZV9rZXkoa2V5LCBwdWJfa2V5LCBkaCk7Ci0gICAgIGlmIChy diA8PSAwKQotICAgICAgICAgcmV0dXJuIHJ2OwotICAgICBwYWQgPSBCTl9udW1fYnl0ZXMoZGgt PnApIC0gcnY7Ci1AQCAtMTE1LDcgKzExOCw3IEBAIHN0YXRpYyBESF9NRVRIT0QgZGhfb3NzbCA9 IHsKLSAgICAgZGhfYm5fbW9kX2V4cCwKLSAgICAgZGhfaW5pdCwKLSAgICAgZGhfZmluaXNoLAot LSAgICAwLAotKyAgICBESF9GTEFHX0ZJUFNfTUVUSE9ELAotICAgICBOVUxMLAotICAgICBOVUxM Ci0gfTsKLUBAIC0xMzQsNiArMTM3LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpk aCkKLSAgICAgQk5fTU9OVF9DVFggKm1vbnQgPSBOVUxMOwotICAgICBCSUdOVU0gKnB1Yl9rZXkg PSBOVUxMLCAqcHJpdl9rZXkgPSBOVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAg aWYgKEZJUFNfbW9kZSgpCi0rICAgICAgICAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNT TF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICBESGVycihESF9GX0dFTkVS QVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIH0KLSsjZW5kaWYKLSsKLSAgICAgY3R4ID0gQk5fQ1RYX25ldygpOwotICAgICBpZiAoY3R4 ID09IE5VTEwpCi0gICAgICAgICBnb3RvIGVycjsKLUBAIC0yMTcsNiArMjI4LDEzIEBAIHN0YXRp YyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2UKLSAgICAgICAgIERIZXJyKERIX0Zf Q09NUFVURV9LRVksIERIX1JfTU9EVUxVU19UT09fTEFSR0UpOwotICAgICAgICAgZ290byBlcnI7 Ci0gICAgIH0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKQotKyAg ICAgICAgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxV U19CSVRTKSkgewotKyAgICAgICAgREhlcnIoREhfRl9DT01QVVRFX0tFWSwgREhfUl9LRVlfU0la RV9UT09fU01BTEwpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsjZW5kaWYKLSAKLSAg ICAgY3R4ID0gQk5fQ1RYX25ldygpOwotICAgICBpZiAoY3R4ID09IE5VTEwpCi1AQCAtMjc3LDYg KzI5NSw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgsIEIKLSAKLSBz dGF0aWMgaW50IGRoX2luaXQoREggKmRoKQotIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAg IEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAgICAgZGgtPmZsYWdzIHw9IERIX0ZM QUdfQ0FDSEVfTU9OVF9QOwotICAgICByZXR1cm4gKDEpOwotIH0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjJjL2NyeXB0by9kaC9kaF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kaC9k aF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kaC9kaF9saWIuYy5maXBzCTIwMTUt MDYtMTIgMTY6NTE6MjEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRv L2RoL2RoX2xpYi5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDAwMjgzNzk5ICswMjAwCi1AQCAtODAs MTQgKzgwLDcgQEAgdm9pZCBESF9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgREhfTUVUSAotIGNv bnN0IERIX01FVEhPRCAqREhfZ2V0X2RlZmF1bHRfbWV0aG9kKHZvaWQpCi0gewotICAgICBpZiAo IWRlZmF1bHRfREhfbWV0aG9kKSB7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICAgICAgaWYg KEZJUFNfbW9kZSgpKQotLSAgICAgICAgICAgIHJldHVybiBGSVBTX2RoX29wZW5zc2woKTsKLS0g ICAgICAgIGVsc2UKLS0gICAgICAgICAgICByZXR1cm4gREhfT3BlblNTTCgpOwotLSNlbHNlCi0g ICAgICAgICBkZWZhdWx0X0RIX21ldGhvZCA9IERIX09wZW5TU0woKTsKLS0jZW5kaWYKLSAgICAg fQotICAgICByZXR1cm4gZGVmYXVsdF9ESF9tZXRob2Q7Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmMvY3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZHNh L2RzYV9lcnIuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMJ MjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9j cnlwdG8vZHNhL2RzYV9lcnIuYwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAwMTI4MzgyMiArMDIwMAot QEAgLTc0LDYgKzc0LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX2Z1bmN0c1td Ci0gICAgIHtFUlJfRlVOQyhEU0FfRl9ET19EU0FfUFJJTlQpLCAiRE9fRFNBX1BSSU5UIn0sCi0g ICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJTlQpLCAiRFNBcGFyYW1zX3ByaW50In0s Ci0gICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlApLCAiRFNBcGFyYW1zX3By aW50X2ZwIn0sCi0rICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4pLCAiZHNh X2J1aWx0aW5fa2V5Z2VuIn0sCi0rICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9QQVJB TUdFTiksICJkc2FfYnVpbHRpbl9wYXJhbWdlbiJ9LAotICAgICB7RVJSX0ZVTkMoRFNBX0ZfRFNB X0JVSUxUSU5fUEFSQU1HRU4yKSwgIkRTQV9CVUlMVElOX1BBUkFNR0VOMiJ9LAotICAgICB7RVJS X0ZVTkMoRFNBX0ZfRFNBX0RPX1NJR04pLCAiRFNBX2RvX3NpZ24ifSwKLSAgICAge0VSUl9GVU5D KERTQV9GX0RTQV9ET19WRVJJRlkpLCAiRFNBX2RvX3ZlcmlmeSJ9LAotQEAgLTEwOSw2ICsxMTEs OCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfcmVhc29uc1tdCi0gICAgIHtFUlJf UkVBU09OKERTQV9SX0RFQ09ERV9FUlJPUiksICJkZWNvZGUgZXJyb3IifSwKLSAgICAge0VSUl9S RUFTT04oRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRSksICJpbnZhbGlkIGRpZ2VzdCB0eXBlIn0s Ci0gICAgIHtFUlJfUkVBU09OKERTQV9SX0lOVkFMSURfUEFSQU1FVEVSUyksICJpbnZhbGlkIHBh cmFtZXRlcnMifSwKLSsgICAge0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCksICJr ZXkgc2l6ZSBpbnZhbGlkIn0sCi0rICAgIHtFUlJfUkVBU09OKERTQV9SX0tFWV9TSVpFX1RPT19T TUFMTCksICJrZXkgc2l6ZSB0b28gc21hbGwifSwKLSAgICAge0VSUl9SRUFTT04oRFNBX1JfTUlT U0lOR19QQVJBTUVURVJTKSwgIm1pc3NpbmcgcGFyYW1ldGVycyJ9LAotICAgICB7RVJSX1JFQVNP TihEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSksICJtb2R1bHVzIHRvbyBsYXJnZSJ9LAotICAgICB7 RVJSX1JFQVNPTihEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMpLCAibmVlZCBuZXcgc2V0dXAg dmFsdWVzIn0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZHNhL2RzYV9nZW4uYy5m aXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kc2EvZHNhX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAu MmMvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDE1LTA2LTEyIDE2OjUxOjIxLjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kc2EvZHNhX2dlbi5jCTIwMTUtMDYt MTUgMTc6MzA6MDAuMDAxMjgzODIyICswMjAwCi1AQCAtOTEsNiArOTEsMTYgQEAKLSAjICBpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSAjIGVuZGlmCi0gCi0rIyBpZm5kZWYgT1BFTlNTTF9GSVBT Ci0rc3RhdGljIGludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6ZV90IGJp dHMsIHNpemVfdCBxYml0cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEVWUF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgc2VlZF9sZW4sIEJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3Jl dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIEJO X0dFTkNCICpjYik7Ci0rc3RhdGljIGludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4 LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QklHTlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCTl9HRU5DQiAqY2IpOwotKyMgZW5kaWYKLSsKLSBpbnQgRFNBX2dlbmVy YXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBpbnQgc2VlZF9sZW4s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIHVuc2ln bmVkIGxvbmcgKmhfcmV0LAotQEAgLTEwNiwxMyArMTE2LDYgQEAgaW50IERTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KERTQSAqcmV0LAotICAgICBpZiAocmV0LT5tZXRoLT5kc2FfcGFyYW1nZW4p Ci0gICAgICAgICByZXR1cm4gcmV0LT5tZXRoLT5kc2FfcGFyYW1nZW4ocmV0LCBiaXRzLCBzZWVk X2luLCBzZWVkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b3VudGVyX3JldCwgaF9yZXQsIGNiKTsKLS0jIGlmZGVmIE9QRU5TU0xfRklQUwotLSAgICBlbHNl IGlmIChGSVBTX21vZGUoKSkgewotLSAgICAgICAgcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX3Bh cmFtZXRlcnNfZXgocmV0LCBiaXRzLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2VlZF9pbiwgc2VlZF9sZW4sCi0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKLS0gICAg fQotLSMgZW5kaWYKLSAgICAgZWxzZSB7Ci0gICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kOwot ICAgICAgICAgc2l6ZV90IHFiaXRzID0gYml0cyA+PSAyMDQ4ID8gMjU2IDogMTYwOwotQEAgLTEy Niw4MCArMTI5LDE1NiBAQCBpbnQgRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQs Ci0gICAgICAgICB9Ci0gCi0gICAgICAgICByZXR1cm4gZHNhX2J1aWx0aW5fcGFyYW1nZW4ocmV0 LCBiaXRzLCBxYml0cywgZXZwbWQsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VlZF9pbiwgc2VlZF9sZW4sIE5VTEwsIGNvdW50ZXJfcmV0LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNlZWRfaW4sIHNlZWRfbGVuLCBjb3VudGVyX3JldCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoX3JldCwgY2IpOwotICAgICB9Ci0g fQotIAotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IEZJUFNfZHNhX2J1aWx0aW5fcGFyYW1n ZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgRVZQX01EICpldnBtZCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBzaXplX3Qgc2VlZF9sZW4s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVyX3JldCwgdW5zaWdu ZWQgbG9uZyAqaF9yZXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk5fR0VOQ0Ig KmNiKQotK3sKLSsgICAgcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwgYml0cywgcWJp dHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldnBtZCwgc2VlZF9pbiwgc2Vl ZF9sZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyX3JldCwgaF9y ZXQsIGNiKTsKLSt9Ci0rIyBlbmRpZgotKwotIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0Eg KnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwKLS0g ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRfbGVuLCB1bnNpZ25lZCBjaGFyICpz ZWVkX291dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRfbGVuLAotICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpo X3JldCwgQk5fR0VOQ0IgKmNiKQotIHsKLSAgICAgaW50IG9rID0gMDsKLSAgICAgdW5zaWduZWQg Y2hhciBzZWVkW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsgICAgQklHTlVNICpnID0gTlVMTCwg KnEgPSBOVUxMLCAqcCA9IE5VTEw7Ci0rICAgIHNpemVfdCBxc2l6ZSA9IHFiaXRzID4+IDM7Ci0r ICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSsgICAgCi0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsg ICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19G X0RTQV9CVUlMVElOX1BBUkFNR0VOLCBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAg ICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAm JgotKyAgICAgICAgKGJpdHMgIT0gMTAyNCB8fCBxYml0cyAhPSAxNjApICYmCi0rICAgICAgICAo Yml0cyAhPSAyMDQ4IHx8IHFiaXRzICE9IDIyNCkgJiYKLSsgICAgICAgIChiaXRzICE9IDIwNDgg fHwgcWJpdHMgIT0gMjU2KSAmJiAoYml0cyAhPSAzMDcyIHx8IHFiaXRzICE9IDI1NikpIHsKLSsg ICAgICAgIERTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwgRFNBX1JfS0VZX1NJWkVf SU5WQUxJRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKyMgZW5kaWYKLSsgICAgaWYg KHNlZWRfbGVuICYmIChzZWVkX2xlbiA8IChzaXplX3QpcXNpemUpKQotKyAgICAgICAgc2VlZF9p biA9IE5VTEw7ICAgICAgICAgLyogc2VlZCBidWZmZXIgdG9vIHNtYWxsIC0tIGlnbm9yZSAqLwot KyAgICBpZiAoc2VlZF9sZW4gPiBzaXplb2Yoc2VlZCkpCi0rICAgICAgICBzZWVkX2xlbiA9IHNp emVvZihzZWVkKTsgLyogQXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFsbG93cyBsYXJnZXIgU0VF RCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBidXQgb3VyIGludGVybmFs IGJ1ZmZlcnMgYXJlIHJlc3RyaWN0ZWQgdG8gMjU2IGJpdHMqLwotKyAgICBpZiAoc2VlZF9pbiAh PSBOVUxMKQotKyAgICAgICAgbWVtY3B5KHNlZWQsIHNlZWRfaW4sIHNlZWRfbGVuKTsKLSsgICAg ZWxzZQotKyAgICAgICAgc2VlZF9sZW4gPSAwOwotKyAgICAgICAgCi0rICAgIGlmICgoY3R4ID0g Qk5fQ1RYX25ldygpKSA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rIAotKyAgICBCTl9D VFhfc3RhcnQoY3R4KTsKLSsgCi0rICAgIGlmICghRklQU19kc2FfZ2VuZXJhdGVfcHEoY3R4LCBi aXRzLCBxYml0cywgZXZwbWQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZCwg c2VlZF9sZW4sICZwLCAmcSwgY291bnRlcl9yZXQsIGNiKSkKLSsgICAgICAgIGdvdG8gZXJyOwot KyAKLSsgICAgaWYgKCFGSVBTX2RzYV9nZW5lcmF0ZV9nKGN0eCwgcCwgcSwgJmcsIGhfcmV0LCBj YikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgCi0rICAgIG9rID0gMTsKLSsgZXJyOgotKyAgICBp ZiAob2spIHsKLSsgICAgICAgIGlmIChyZXQtPnApIHsKLSsgICAgICAgICAgICBCTl9mcmVlKHJl dC0+cCk7Ci0rICAgICAgICAgICAgcmV0LT5wID0gTlVMTDsKLSsgICAgICAgIH0KLSsgICAgICAg IGlmIChyZXQtPnEpIHsKLSsgICAgICAgICAgICBCTl9mcmVlKHJldC0+cSk7Ci0rICAgICAgICAg ICAgcmV0LT5xID0gTlVMTDsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmIChyZXQtPmcpIHsKLSsg ICAgICAgICAgICBCTl9mcmVlKHJldC0+Zyk7Ci0rICAgICAgICAgICAgcmV0LT5nID0gTlVMTDsK LSsgICAgICAgIH0KLSsgICAgICAgIHJldC0+cCA9IEJOX2R1cChwKTsKLSsgICAgICAgIHJldC0+ cSA9IEJOX2R1cChxKTsKLSsgICAgICAgIHJldC0+ZyA9IEJOX2R1cChnKTsKLSsgICAgICAgIGlm IChyZXQtPnAgPT0gTlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkKLSsg ICAgICAgICAgICBvayA9IDA7Ci0rICAgIH0KLSsgICAgaWYgKGN0eCkgewotKyAgICAgICAgQk5f Q1RYX2VuZChjdHgpOwotKyAgICAgICAgQk5fQ1RYX2ZyZWUoY3R4KTsKLSsgICAgfQotKyAgICBy ZXR1cm4gb2s7Ci0rfQotKwotKyMgaWZuZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYwotKyMgZW5k aWYKLStpbnQgRklQU19kc2FfZ2VuZXJhdGVfcHEoQk5fQ1RYICpjdHgsIHNpemVfdCBiaXRzLCBz aXplX3QgcWJpdHMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAqZXZw bWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGludCBz ZWVkX2xlbiwgQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCBCTl9HRU5DQiAqY2IpCi0rewotKyAgICBpbnQg b2sgPSAwOwotICAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLS0g ICAgdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdLCBidWYyW1NIQTI1Nl9E SUdFU1RfTEVOR1RIXTsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5H VEhdOwotICAgICBCSUdOVU0gKnIwLCAqVywgKlgsICpjLCAqdGVzdDsKLS0gICAgQklHTlVNICpn ID0gTlVMTCwgKnEgPSBOVUxMLCAqcCA9IE5VTEw7Ci0tICAgIEJOX01PTlRfQ1RYICptb250ID0g TlVMTDsKLS0gICAgaW50IGksIGssIG4gPSAwLCBtID0gMCwgcXNpemUgPSBxYml0cyA+PiAzOwot KyAgICBCSUdOVU0gKnEgPSBOVUxMLCAqcCA9IE5VTEw7Ci0rICAgIGludCBpLCBrLCBiLCBuID0g MCwgbSA9IDAsIHFzaXplID0gcWJpdHMgPj4gMzsKLSAgICAgaW50IGNvdW50ZXIgPSAwOwotICAg ICBpbnQgciA9IDA7Ci0tICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLS0gICAgdW5zaWduZWQgaW50 IGggPSAyOwotIAotICAgICBpZiAocXNpemUgIT0gU0hBX0RJR0VTVF9MRU5HVEggJiYgcXNpemUg IT0gU0hBMjI0X0RJR0VTVF9MRU5HVEggJiYKLSAgICAgICAgIHFzaXplICE9IFNIQTI1Nl9ESUdF U1RfTEVOR1RIKQotICAgICAgICAgLyogaW52YWxpZCBxIHNpemUgKi8KLSAgICAgICAgIHJldHVy biAwOwotIAotLSAgICBpZiAoZXZwbWQgPT0gTlVMTCkKLS0gICAgICAgIC8qIHVzZSBTSEExIGFz IGRlZmF1bHQgKi8KLS0gICAgICAgIGV2cG1kID0gRVZQX3NoYTEoKTsKLSsgICAgaWYgKGV2cG1k ID09IE5VTEwpIHsKLSsgICAgICAgIGlmIChxYml0cyA8PSAxNjApCi0rICAgICAgICAgICAgZXZw bWQgPSBFVlBfc2hhMSgpOwotKyAgICAgICAgZWxzZSBpZiAocWJpdHMgPD0gMjI0KQotKyAgICAg ICAgICAgIGV2cG1kID0gRVZQX3NoYTIyNCgpOwotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAg IGV2cG1kID0gRVZQX3NoYTI1NigpOwotKyAgICB9Ci0gCi0gICAgIGlmIChiaXRzIDwgNTEyKQot ICAgICAgICAgYml0cyA9IDUxMjsKLSAKLSAgICAgYml0cyA9IChiaXRzICsgNjMpIC8gNjQgKiA2 NDsKLSAKLS0gICAgLyoKLS0gICAgICogTkI6IHNlZWRfbGVuID09IDAgaXMgc3BlY2lhbCBjYXNl OiBjb3B5IGdlbmVyYXRlZCBzZWVkIHRvIHNlZWRfaW4gaWYKLS0gICAgICogaXQgaXMgbm90IE5V TEwuCi0tICAgICAqLwotLSAgICBpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClx c2l6ZSkpCi0tICAgICAgICBzZWVkX2luID0gTlVMTDsgICAgICAgICAvKiBzZWVkIGJ1ZmZlciB0 b28gc21hbGwgLS0gaWdub3JlICovCi0tICAgIGlmIChzZWVkX2xlbiA+IChzaXplX3QpcXNpemUp Ci0tICAgICAgICBzZWVkX2xlbiA9IHFzaXplOyAgICAgICAvKiBBcHAuIDIuMiBvZiBGSVBTIFBV QiAxODYgYWxsb3dzIGxhcmdlcgotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICog U0VFRCwgYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZQotLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICogcmVzdHJpY3RlZCB0byAxNjAgYml0cyAqLwotLSAgICBpZiAoc2VlZF9p biAhPSBOVUxMKQotLSAgICAgICAgbWVtY3B5KHNlZWQsIHNlZWRfaW4sIHNlZWRfbGVuKTsKLS0K LS0gICAgaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCi0tICAgICAgICBnb3RvIGVy cjsKLS0KLS0gICAgaWYgKChtb250ID0gQk5fTU9OVF9DVFhfbmV3KCkpID09IE5VTEwpCi0tICAg ICAgICBnb3RvIGVycjsKLS0KLS0gICAgQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0gICAgIHIwID0gQk5f Q1RYX2dldChjdHgpOwotLSAgICBnID0gQk5fQ1RYX2dldChjdHgpOwotICAgICBXID0gQk5fQ1RY X2dldChjdHgpOwotLSAgICBxID0gQk5fQ1RYX2dldChjdHgpOwotKyAgICAqcV9yZXQgPSBxID0g Qk5fQ1RYX2dldChjdHgpOwotICAgICBYID0gQk5fQ1RYX2dldChjdHgpOwotICAgICBjID0gQk5f Q1RYX2dldChjdHgpOwotLSAgICBwID0gQk5fQ1RYX2dldChjdHgpOwotKyAgICAqcF9yZXQgPSBw ID0gQk5fQ1RYX2dldChjdHgpOwotICAgICB0ZXN0ID0gQk5fQ1RYX2dldChjdHgpOwotIAotICAg ICBpZiAoIUJOX2xzaGlmdCh0ZXN0LCBCTl92YWx1ZV9vbmUoKSwgYml0cyAtIDEpKQotICAgICAg ICAgZ290byBlcnI7Ci0gCi0rICAgIC8qIHN0ZXAgMyBuID0gXGxjZWlsIGJpdHMgLyBxYml0cyBc cmNlaWwgLSAxICovCi0rICAgIG4gPSAoYml0cyArIHFiaXRzIC0gMSkgLyBxYml0cyAtIDE7Ci0r ICAgIC8qIHN0ZXAgNCBiID0gYml0cyAtIDEgLSBuICogcWJpdHMgKi8KLSsgICAgYiA9IGJpdHMg LSAxIC0gbiAqIHFiaXRzOwotKyAgICAKLSAgICAgZm9yICg7OykgewotICAgICAgICAgZm9yICg7 OykgeyAgICAgICAgICAgICAgLyogZmluZCBxICovCi0gICAgICAgICAgICAgaW50IHNlZWRfaXNf cmFuZG9tOwotIAotLSAgICAgICAgICAgIC8qIHN0ZXAgMSAqLwotKyAgICAgICAgICAgIC8qIHN0 ZXAgNSBnZW5lcmF0ZSBzZWVkICovCi0gICAgICAgICAgICAgaWYgKCFCTl9HRU5DQl9jYWxsKGNi LCAwLCBtKyspKQotICAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSAKLUBAIC0yMTMsMjkgKzI5 MiwxOCBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBiZSBiYWQgKi8KLSAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgbWVtY3B5KGJ1Ziwgc2VlZCwgcXNpemUpOwotLSAgICAgICAgICAgIG1lbWNw eShidWYyLCBzZWVkLCBxc2l6ZSk7Ci0tICAgICAgICAgICAgLyogcHJlY29tcHV0ZSAiU0VFRCAr IDEiIGZvciBzdGVwIDc6ICovCi0tICAgICAgICAgICAgZm9yIChpID0gcXNpemUgLSAxOyBpID49 IDA7IGktLSkgewotLSAgICAgICAgICAgICAgICBidWZbaV0rKzsKLS0gICAgICAgICAgICAgICAg aWYgKGJ1ZltpXSAhPSAwKQotLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0tICAgICAgICAg ICAgfQotIAotLSAgICAgICAgICAgIC8qIHN0ZXAgMiAqLwotKyAgICAgICAgICAgIC8qIHN0ZXAg NiBVID0gaGFzaChzZWVkKSAqLwotICAgICAgICAgICAgIGlmICghRVZQX0RpZ2VzdChzZWVkLCBx c2l6ZSwgbWQsIE5VTEwsIGV2cG1kLCBOVUxMKSkKLSAgICAgICAgICAgICAgICAgZ290byBlcnI7 Ci0tICAgICAgICAgICAgaWYgKCFFVlBfRGlnZXN0KGJ1ZiwgcXNpemUsIGJ1ZjIsIE5VTEwsIGV2 cG1kLCBOVUxMKSkKLS0gICAgICAgICAgICAgICAgZ290byBlcnI7Ci0tICAgICAgICAgICAgZm9y IChpID0gMDsgaSA8IHFzaXplOyBpKyspCi0tICAgICAgICAgICAgICAgIG1kW2ldIF49IGJ1ZjJb aV07Ci0gCi0tICAgICAgICAgICAgLyogc3RlcCAzICovCi0rICAgICAgICAgICAgLyogc3RlcCA3 IHEgPSAyXihxYml0cy0xKSArIFUgKyAxIC0gKFUgbW9kIDIpICovCi0gICAgICAgICAgICAgbWRb MF0gfD0gMHg4MDsKLSAgICAgICAgICAgICBtZFtxc2l6ZSAtIDFdIHw9IDB4MDE7Ci0gICAgICAg ICAgICAgaWYgKCFCTl9iaW4yYm4obWQsIHFzaXplLCBxKSkKLSAgICAgICAgICAgICAgICAgZ290 byBlcnI7Ci0gCi0tICAgICAgICAgICAgLyogc3RlcCA0ICovCi0rICAgICAgICAgICAgLyogc3Rl cCA4IHRlc3QgZm9yIHByaW1lICg2NCByb3VuZCBvZiBSYWJpbi1NaWxsZXIpICovCi0gICAgICAg ICAgICAgciA9IEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHEsIERTU19wcmltZV9jaGVja3MsIGN0 eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZF9pc19yYW5k b20sIGNiKTsKLSAgICAgICAgICAgICBpZiAociA+IDApCi1AQCAtMjQzLDggKzMxMSw2IEBAIGlu dCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KLSAgICAgICAgICAgICBpZiAo ciAhPSAwKQotICAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSAKLS0gICAgICAgICAgICAvKiBk byBhIGNhbGxiYWNrIGNhbGwgKi8KLS0gICAgICAgICAgICAvKiBzdGVwIDUgKi8KLSAgICAgICAg IH0KLSAKLSAgICAgICAgIGlmICghQk5fR0VOQ0JfY2FsbChjYiwgMiwgMCkpCi1AQCAtMjUyLDE5 ICszMTgsMTYgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotICAg ICAgICAgaWYgKCFCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKSkKLSAgICAgICAgICAgICBnb3RvIGVy cjsKLSAKLS0gICAgICAgIC8qIHN0ZXAgNiAqLwotKyAgICAgICAgLyogc3RlcCAxMSAqLwotICAg ICAgICAgY291bnRlciA9IDA7Ci0tICAgICAgICAvKiAib2Zmc2V0ID0gMiIgKi8KLS0KLS0gICAg ICAgIG4gPSAoYml0cyAtIDEpIC8gMTYwOwotKyAgICAgICAgLyogIm9mZnNldCA9IDEiICovCi0g Ci0gICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgaWYgKChjb3VudGVyICE9IDApICYm ICFCTl9HRU5DQl9jYWxsKGNiLCAwLCBjb3VudGVyKSkKLSAgICAgICAgICAgICAgICAgZ290byBl cnI7Ci0gCi0tICAgICAgICAgICAgLyogc3RlcCA3ICovCi0rICAgICAgICAgICAgLyogc3RlcCAx MS4xLCAxMS4yIG9idGFpbiBXICovCi0gICAgICAgICAgICAgQk5femVybyhXKTsKLS0gICAgICAg ICAgICAvKiBub3cgJ2J1ZicgY29udGFpbnMgIlNFRUQgKyBvZmZzZXQgLSAxIiAqLwotICAgICAg ICAgICAgIGZvciAoayA9IDA7IGsgPD0gbjsgaysrKSB7Ci0gICAgICAgICAgICAgICAgIC8qCi0g ICAgICAgICAgICAgICAgICAqIG9idGFpbiAiU0VFRCArIG9mZnNldCArIGsiIGJ5IGluY3JlbWVu dGluZzoKLUBAIC0yNzgsMzYgKzM0MSwzNyBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNB ICpyZXQsIHNpemVfCi0gICAgICAgICAgICAgICAgIGlmICghRVZQX0RpZ2VzdChidWYsIHFzaXpl LCBtZCwgTlVMTCwgZXZwbWQsIE5VTEwpKQotICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7 Ci0gCi0tICAgICAgICAgICAgICAgIC8qIHN0ZXAgOCAqLwotICAgICAgICAgICAgICAgICBpZiAo IUJOX2JpbjJibihtZCwgcXNpemUsIHIwKSkKLSAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJy OwotLSAgICAgICAgICAgICAgICBpZiAoIUJOX2xzaGlmdChyMCwgcjAsIChxc2l6ZSA8PCAzKSAq IGspKQotKyAgICAgICAgICAgICAgICBpZiAoayA9PSBuKQotKyAgICAgICAgICAgICAgICAgICAg Qk5fbWFza19iaXRzKHIwLCBiKTsKLSsgICAgICAgICAgICAgICAgaWYgKCFCTl9sc2hpZnQocjAs IHIwLCBxYml0cyAqIGspKQotICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0gICAgICAg ICAgICAgICAgIGlmICghQk5fYWRkKFcsIFcsIHIwKSkKLSAgICAgICAgICAgICAgICAgICAgIGdv dG8gZXJyOwotICAgICAgICAgICAgIH0KLSAKLS0gICAgICAgICAgICAvKiBtb3JlIG9mIHN0ZXAg OCAqLwotLSAgICAgICAgICAgIGlmICghQk5fbWFza19iaXRzKFcsIGJpdHMgLSAxKSkKLS0gICAg ICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICAgICAgLyogc3RlcCAxMS4zIFggPSBXICsg Ml4oTC0xKSAqLwotICAgICAgICAgICAgIGlmICghQk5fY29weShYLCBXKSkKLSAgICAgICAgICAg ICAgICAgZ290byBlcnI7Ci0gICAgICAgICAgICAgaWYgKCFCTl9hZGQoWCwgWCwgdGVzdCkpCi0g ICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotIAotLSAgICAgICAgICAgIC8qIHN0ZXAgOSAqLwot KyAgICAgICAgICAgIC8qIHN0ZXAgMTEuNCBjID0gWCBtb2QgMipxICovCi0gICAgICAgICAgICAg aWYgKCFCTl9sc2hpZnQxKHIwLCBxKSkKLSAgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0gICAg ICAgICAgICAgaWYgKCFCTl9tb2QoYywgWCwgcjAsIGN0eCkpCi0gICAgICAgICAgICAgICAgIGdv dG8gZXJyOwotKwotKyAgICAgICAgICAgIC8qIHN0ZXAgMTEuNSBwID0gWCAtIChjIC0gMSkgKi8K LSAgICAgICAgICAgICBpZiAoIUJOX3N1YihyMCwgYywgQk5fdmFsdWVfb25lKCkpKQotICAgICAg ICAgICAgICAgICBnb3RvIGVycjsKLSAgICAgICAgICAgICBpZiAoIUJOX3N1YihwLCBYLCByMCkp Ci0gICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotIAotLSAgICAgICAgICAgIC8qIHN0ZXAgMTAg Ki8KLSsgICAgICAgICAgICAvKiBzdGVwIDExLjYgKi8KLSAgICAgICAgICAgICBpZiAoQk5fY21w KHAsIHRlc3QpID49IDApIHsKLS0gICAgICAgICAgICAgICAgLyogc3RlcCAxMSAqLwotKyAgICAg ICAgICAgICAgICAvKiBzdGVwIDExLjcgKi8KLSAgICAgICAgICAgICAgICAgciA9IEJOX2lzX3By aW1lX2Zhc3R0ZXN0X2V4KHAsIERTU19wcmltZV9jaGVja3MsIGN0eCwgMSwgY2IpOwotICAgICAg ICAgICAgICAgICBpZiAociA+IDApCi0gICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsgICAv KiBmb3VuZCBpdCAqLwotQEAgLTMxNSwxMiArMzc5LDEyIEBAIGludCBkc2FfYnVpbHRpbl9wYXJh bWdlbihEU0EgKnJldCwgc2l6ZV8KLSAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotICAg ICAgICAgICAgIH0KLSAKLS0gICAgICAgICAgICAvKiBzdGVwIDEzICovCi0rICAgICAgICAgICAg Lyogc3RlcCAxMS45ICovCi0gICAgICAgICAgICAgY291bnRlcisrOwotICAgICAgICAgICAgIC8q ICJvZmZzZXQgPSBvZmZzZXQgKyBuICsgMSIgKi8KLSAKLS0gICAgICAgICAgICAvKiBzdGVwIDE0 ICovCi0tICAgICAgICAgICAgaWYgKGNvdW50ZXIgPj0gNDA5NikKLSsgICAgICAgICAgICAvKiBz dGVwIDEyICovCi0rICAgICAgICAgICAgaWYgKGNvdW50ZXIgPj0gNCAqIGJpdHMpCi0gICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgfQotICAgICB9Ci1AQCAtMzI4LDcgKzM5MiwzMyBA QCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gICAgIGlmICghQk5f R0VOQ0JfY2FsbChjYiwgMiwgMSkpCi0gICAgICAgICBnb3RvIGVycjsKLSAKLS0gICAgLyogV2Ug bm93IG5lZWQgdG8gZ2VuZXJhdGUgZyAqLwotKyAgICBvayA9IDE7Ci0rIGVycjoKLSsgICAgaWYg KG9rKSB7Ci0rICAgICAgICBpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkKLSsgICAgICAgICAgICAq Y291bnRlcl9yZXQgPSBjb3VudGVyOwotKyAgICB9Ci0rICAgIHJldHVybiBvazsKLSt9Ci0rCi0r IyBpZm5kZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljCi0rIyBlbmRpZgotK2ludCBGSVBTX2RzYV9n ZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICBCSUdOVU0gKipnX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dF TkNCICpjYikKLSt7Ci0rICAgIGludCBvayA9IDA7Ci0rICAgIEJJR05VTSAqcjAsICp0ZXN0LCAq ZyA9IE5VTEw7Ci0rICAgIEJOX01PTlRfQ1RYICptb250OwotKyAgICB1bnNpZ25lZCBpbnQgaCA9 IDI7Ci0rCi0rICAgIGlmICgobW9udCA9IEJOX01PTlRfQ1RYX25ldygpKSA9PSBOVUxMKQotKyAg ICAgICAgZ290byBlcnI7Ci0rCi0rICAgIHIwID0gQk5fQ1RYX2dldChjdHgpOwotKyAgICAqZ19y ZXQgPSBnID0gQk5fQ1RYX2dldChjdHgpOwotKyAgICB0ZXN0ID0gQk5fQ1RYX2dldChjdHgpOwot KwotICAgICAvKiBTZXQgcjA9KHAtMSkvcSAqLwotICAgICBpZiAoIUJOX3N1Yih0ZXN0LCBwLCBC Tl92YWx1ZV9vbmUoKSkpCi0gICAgICAgICBnb3RvIGVycjsKLUBAIC0zNTcsNDYgKzQ0NywxNCBA QCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gICAgIG9rID0gMTsK LSAgZXJyOgotICAgICBpZiAob2spIHsKLS0gICAgICAgIGlmIChyZXQtPnApCi0tICAgICAgICAg ICAgQk5fZnJlZShyZXQtPnApOwotLSAgICAgICAgaWYgKHJldC0+cSkKLS0gICAgICAgICAgICBC Tl9mcmVlKHJldC0+cSk7Ci0tICAgICAgICBpZiAocmV0LT5nKQotLSAgICAgICAgICAgIEJOX2Zy ZWUocmV0LT5nKTsKLS0gICAgICAgIHJldC0+cCA9IEJOX2R1cChwKTsKLS0gICAgICAgIHJldC0+ cSA9IEJOX2R1cChxKTsKLS0gICAgICAgIHJldC0+ZyA9IEJOX2R1cChnKTsKLS0gICAgICAgIGlm IChyZXQtPnAgPT0gTlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkgewot LSAgICAgICAgICAgIG9rID0gMDsKLS0gICAgICAgICAgICBnb3RvIGVycjsKLS0gICAgICAgIH0K LS0gICAgICAgIGlmIChjb3VudGVyX3JldCAhPSBOVUxMKQotLSAgICAgICAgICAgICpjb3VudGVy X3JldCA9IGNvdW50ZXI7Ci0gICAgICAgICBpZiAoaF9yZXQgIT0gTlVMTCkKLSAgICAgICAgICAg ICAqaF9yZXQgPSBoOwotLSAgICAgICAgaWYgKHNlZWRfb3V0KQotLSAgICAgICAgICAgIG1lbWNw eShzZWVkX291dCwgc2VlZCwgcXNpemUpOwotLSAgICB9Ci0tICAgIGlmIChjdHgpIHsKLS0gICAg ICAgIEJOX0NUWF9lbmQoY3R4KTsKLS0gICAgICAgIEJOX0NUWF9mcmVlKGN0eCk7Ci0gICAgIH0K LSAgICAgaWYgKG1vbnQgIT0gTlVMTCkKLSAgICAgICAgIEJOX01PTlRfQ1RYX2ZyZWUobW9udCk7 Ci0gICAgIHJldHVybiBvazsKLSB9Ci0gCi0tIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLS0jICB1bmRl ZiBmaXBzX2RzYV9idWlsdGluX3BhcmFtZ2VuMgotLWV4dGVybiBpbnQgZmlwc19kc2FfYnVpbHRp bl9wYXJhbWdlbjIoRFNBICpyZXQsIHNpemVfdCBMLCBzaXplX3QgTiwKLS0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAqZXZwbWQsCi0tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2lu LAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRfbGVu LCBpbnQgaWR4LAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgY2hhciAqc2VlZF9vdXQsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwKLS0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYik7Ci0tIyBlbmRpZgotLQotIC8q Ci0gICogVGhpcyBpcyBhIHBhcmFtZXRlciBnZW5lcmF0aW9uIGFsZ29yaXRobSBmb3IgdGhlIERT QTIgYWxnb3JpdGhtIGFzCi0gICogZGVzY3JpYmVkIGluIEZJUFMgMTg2LTMuCi1AQCAtNDIyLDE0 ICs0ODAsNiBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4yKERTQSAqcmV0LCBzaXplCi0gICAg IEVWUF9NRF9DVFggbWN0eDsKLSAgICAgdW5zaWduZWQgaW50IGggPSAyOwotIAotLSMgaWZkZWYg T1BFTlNTTF9GSVBTCi0tCi0tICAgIGlmIChGSVBTX21vZGUoKSkKLS0gICAgICAgIHJldHVybiBm aXBzX2RzYV9idWlsdGluX3BhcmFtZ2VuMihyZXQsIEwsIE4sIGV2cG1kLAotLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRfaW4sIHNlZWRfbGVuLCBpZHgsCi0t ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZF9vdXQsIGNvdW50 ZXJfcmV0LCBoX3JldCwgY2IpOwotLSMgZW5kaWYKLS0KLSAgICAgRVZQX01EX0NUWF9pbml0KCZt Y3R4KTsKLSAKLSAgICAgaWYgKGV2cG1kID09IE5VTEwpIHsKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjJjL2NyeXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZHNhL2RzYS5o Ci0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2RzYS9kc2EuaC5maXBzCTIwMTUtMDYtMTUgMTc6 Mjk6NTkuNzg0Mjc4ODUzICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2RzYS9kc2Eu aAkyMDE1LTA2LTE1IDE3OjMwOjAwLjAwMTI4MzgyMiArMDIwMAotQEAgLTg4LDYgKzg4LDggQEAK LSAjICBkZWZpbmUgT1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUyAgIDEwMDAwCi0gIyBlbmRp ZgotIAotKyMgZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0r Ci0gIyBkZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QICAgMHgwMQotIC8qCi0gICogbmV3IHdp dGggMC45LjdoOyB0aGUgYnVpbHQtaW4gRFNBIGltcGxlbWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0 YW50IHRpbWUKLUBAIC0yNjUsNiArMjY3LDIwIEBAIGludCBEU0FfcHJpbnRfZnAoRklMRSAqYnAs IGNvbnN0IERTQSAqeCwKLSBESCAqRFNBX2R1cF9ESChjb25zdCBEU0EgKnIpOwotICMgZW5kaWYK LSAKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotK2ludCBGSVBTX2RzYV9idWlsdGluX3BhcmFtZ2Vu KERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAqZXZwbWQsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3Qgc2VlZF9sZW4sIGludCAqY291bnRlcl9yZXQsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpj Yik7Ci0raW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywg c2l6ZV90IHFiaXRzLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2 cG1kLCB1bnNpZ25lZCBjaGFyICpzZWVkLAotKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg c2VlZF9sZW4sIEJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3JldCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKLStpbnQgRklQU19k c2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0gKnEsIEJJR05VTSAq KmdfcmV0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpoX3Jl dCwgQk5fR0VOQ0IgKmNiKTsKLSsjIGVuZGlmCi0rCi0gIyBkZWZpbmUgRVZQX1BLRVlfQ1RYX3Nl dF9kc2FfcGFyYW1nZW5fYml0cyhjdHgsIG5iaXRzKSBcCi0gICAgICAgICBFVlBfUEtFWV9DVFhf Y3RybChjdHgsIEVWUF9QS0VZX0RTQSwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9QS0VZX0NUUkxfRFNBX1BBUkFNR0VOX0JJVFMs IG5iaXRzLCBOVUxMKQotQEAgLTI4NywxMSArMzAzLDE0IEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0 cmluZ3Modm9pZCk7Ci0gIyBkZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEwNAotICMgZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxMDAKLSAjIGRlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJ TlRfRlAgICAgICAgICAgICAgICAgICAgICAgICAgMTAxCi0tIyBkZWZpbmUgRFNBX0ZfRFNBX0JV SUxUSU5fUEFSQU1HRU4yICAgICAgICAgICAgICAgICAgICAgIDEyNgotKyMgZGVmaW5lIERTQV9G X0RTQV9CVUlMVElOX0tFWUdFTiAgICAgICAgICAgICAgICAgICAgICAgICAxMjQKLSsjIGRlZmlu ZSBEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiAgICAgICAgICAgICAgICAgICAgICAgMTIzCi0r IyBkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yICAgICAgICAgICAgICAgICAgICAg IDIyNgotICMgZGVmaW5lIERTQV9GX0RTQV9ET19TSUdOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxMTIKLSAjIGRlZmluZSBEU0FfRl9EU0FfRE9fVkVSSUZZICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMTEzCi0tIyBkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX0tFWSAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEyNAotLSMgZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9Q QVJBTUVURVJTX0VYICAgICAgICAgICAgICAgICAxMjMKLSsjIGRlZmluZSBEU0FfRl9EU0FfR0VO RVJBVEVfS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI2Ci0rIyBkZWZpbmUgRFNBX0Zf RFNBX0dFTkVSQVRFX1BBUkFNRVRFUlNfRVggICAgICAgICAgICAgICAgIDEyNwotKyMgZGVmaW5l IERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTICAgLyogdW51c2VkICovICAgICAxMjUKLSAj IGRlZmluZSBEU0FfRl9EU0FfTkVXX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MTAzCi0gIyBkZWZpbmUgRFNBX0ZfRFNBX1BBUkFNX0RFQ09ERSAgICAgICAgICAgICAgICAgICAg ICAgICAgIDExOQotICMgZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMDUKLUBAIC0zMTcsMTIgKzMzNiwxNiBAQCB2b2lkIEVSUl9sb2FkX0RT QV9zdHJpbmdzKHZvaWQpOwotICMgZGVmaW5lIERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlf U0laRSAgICAgICAgICAgICAgICAxMDAKLSAjIGRlZmluZSBEU0FfUl9ERUNPREVfRVJST1IgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA0Ci0gIyBkZWZpbmUgRFNBX1JfSU5WQUxJRF9E SUdFU1RfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgIDEwNgotLSMgZGVmaW5lIERTQV9SX0lO VkFMSURfUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAxMTIKLSsjIGRlZmluZSBE U0FfUl9JTlZBTElEX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgICAgMjEyCi0rIyBk ZWZpbmUgRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEx MwotKyMgZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCAgICAgICAgICAgICAgICAgICAg ICAgICAxMTAKLSAjIGRlZmluZSBEU0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMgICAgICAgICAgICAg ICAgICAgICAgICAgMTAxCi0gIyBkZWZpbmUgRFNBX1JfTU9EVUxVU19UT09fTEFSR0UgICAgICAg ICAgICAgICAgICAgICAgICAgIDEwMwotLSMgZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZB TFVFUyAgICAgICAgICAgICAgICAgICAgICAxMTAKLSsjIGRlZmluZSBEU0FfUl9ORUVEX05FV19T RVRVUF9WQUxVRVMgICAgICAgICAgICAgICAgICAgICAgMTEyCi0gIyBkZWZpbmUgRFNBX1JfTk9O X0ZJUFNfRFNBX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgIDExMQotKyMgZGVmaW5lIERT QV9SX05PTl9GSVBTX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTEKLSAjIGRl ZmluZSBEU0FfUl9OT19QQVJBTUVURVJTX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTA3 Ci0rIyBkZWZpbmUgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSAvKiB1 bnVzZWQgKi8gMTEyCi0gIyBkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SICAg ICAgICAgICAgICAgICAgIDEwNQotICMgZGVmaW5lIERTQV9SX1FfTk9UX1BSSU1FICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxMTMKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2Ny eXB0by9kc2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2RzYS9kc2Ffa2V5 LmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzCTIwMTUtMDYt MTIgMTY6NTE6MjEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2Rz YS9kc2Ffa2V5LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDEyODM4MjIgKzAyMDAKLUBAIC02Niw2 ICs2NiwzNCBAQAotIAotICMgaWZkZWYgT1BFTlNTTF9GSVBTCi0gIyAgaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rIyAgaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsKLStzdGF0aWMgaW50IGZp cHNfY2hlY2tfZHNhKERTQSAqZHNhKQotK3sKLSsgICAgRVZQX1BLRVkgKnBrOwotKyAgICB1bnNp Z25lZCBjaGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKLSsgICAgaW50IHJl dCA9IDA7Ci0rCi0rICAgIGlmICgocGsgPSBFVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsgICAg ICAgIGdvdG8gZXJyOwotKwotKyAgICBFVlBfUEtFWV9zZXQxX0RTQShwaywgZHNhKTsKLSsKLSsg ICAgaWYgKGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwgTlVMTCwgMCwgTlVM TCwgMCwgTlVMTCkpCi0rICAgICAgICByZXQgPSAxOwotKwotKyBlcnI6Ci0rICAgIGlmIChyZXQg PT0gMCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19EU0EsIEZJUFNfUl9Q QUlSV0lTRV9URVNUX0ZBSUxFRCk7Ci0rICAgICAgICBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7 Ci0rICAgIH0KLSsKLSsgICAgaWYgKHBrKQotKyAgICAgICAgRVZQX1BLRVlfZnJlZShwayk7Ci0r Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwotICMgZW5kaWYKLSAKLSBzdGF0aWMgaW50IGRzYV9i dWlsdGluX2tleWdlbihEU0EgKmRzYSk7Ci1AQCAtODEsMTAgKzEwOSw2IEBAIGludCBEU0FfZ2Vu ZXJhdGVfa2V5KERTQSAqZHNhKQotICMgZW5kaWYKLSAgICAgaWYgKGRzYS0+bWV0aC0+ZHNhX2tl eWdlbikKLSAgICAgICAgIHJldHVybiBkc2EtPm1ldGgtPmRzYV9rZXlnZW4oZHNhKTsKLS0jIGlm ZGVmIE9QRU5TU0xfRklQUwotLSAgICBpZiAoRklQU19tb2RlKCkpCi0tICAgICAgICByZXR1cm4g RklQU19kc2FfZ2VuZXJhdGVfa2V5KGRzYSk7Ci0tIyBlbmRpZgotICAgICByZXR1cm4gZHNhX2J1 aWx0aW5fa2V5Z2VuKGRzYSk7Ci0gfQotIAotQEAgLTk0LDYgKzExOCwxNCBAQCBzdGF0aWMgaW50 IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSkKLSAgICAgQk5fQ1RYICpjdHggPSBOVUxMOwot ICAgICBCSUdOVU0gKnB1Yl9rZXkgPSBOVUxMLCAqcHJpdl9rZXkgPSBOVUxMOwotIAotKyMgaWZk ZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBE U0FfRkxBR19OT05fRklQU19BTExPVykKLSsgICAgICAgICYmIChCTl9udW1fYml0cyhkc2EtPnAp IDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkgewotKyAgICAgICAgRFNBZXJy KERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsg ICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rIyBlbmRpZgotKwotICAgICBpZiAoKGN0eCA9IEJO X0NUWF9uZXcoKSkgPT0gTlVMTCkKLSAgICAgICAgIGdvdG8gZXJyOwotIAotQEAgLTEzMSw2ICsx NjMsMTMgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCi0gCi0gICAg IGRzYS0+cHJpdl9rZXkgPSBwcml2X2tleTsKLSAgICAgZHNhLT5wdWJfa2V5ID0gcHViX2tleTsK LSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIWZpcHNfY2hl Y2tfZHNhKGRzYSkpIHsKLSsgICAgICAgIGRzYS0+cHViX2tleSA9IE5VTEw7Ci0rICAgICAgICBk c2EtPnByaXZfa2V5ID0gTlVMTDsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rIyBlbmRp ZgotICAgICBvayA9IDE7Ci0gCi0gIGVycjoKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0 by9kc2EvZHNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2RzYS9kc2FfbGliLmMK LS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZHNhL2RzYV9saWIuYy5maXBzCTIwMTUtMDYtMTIg MTY6NTE6MjEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2RzYS9k c2FfbGliLmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDEyODM4MjIgKzAyMDAKLUBAIC04NiwxNCAr ODYsNyBAQCB2b2lkIERTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgRFNBX01FCi0gY29uc3Qg RFNBX01FVEhPRCAqRFNBX2dldF9kZWZhdWx0X21ldGhvZCh2b2lkKQotIHsKLSAgICAgaWYgKCFk ZWZhdWx0X0RTQV9tZXRob2QpIHsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgICAgICBpZiAo RklQU19tb2RlKCkpCi0tICAgICAgICAgICAgcmV0dXJuIEZJUFNfZHNhX29wZW5zc2woKTsKLS0g ICAgICAgIGVsc2UKLS0gICAgICAgICAgICByZXR1cm4gRFNBX09wZW5TU0woKTsKLS0jZWxzZQot ICAgICAgICAgZGVmYXVsdF9EU0FfbWV0aG9kID0gRFNBX09wZW5TU0woKTsKLS0jZW5kaWYKLSAg ICAgfQotICAgICByZXR1cm4gZGVmYXVsdF9EU0FfbWV0aG9kOwotIH0KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjJjL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0 by9kc2EvZHNhX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kc2EvZHNhX2xvY2wu aC5maXBzCTIwMTUtMDYtMTUgMTc6Mjk6NTkuNzg2Mjc4ODk4ICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMmMvY3J5cHRvL2RzYS9kc2FfbG9jbC5oCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDAyMjgzODQ1 ICswMjAwCi1AQCAtNTYsNyArNTYsNyBAQAotIAotIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihE U0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwK LS0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRfbGVuLCB1bnNpZ25lZCBjaGFy ICpzZWVkX291dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRfbGVuLAot ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25n ICpoX3JldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKTsKLSAKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzIG9wZW5zc2wt MS4wLjJjL2NyeXB0by9kc2EvZHNhX29zc2wuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9k c2EvZHNhX29zc2wuYy5maXBzCTIwMTUtMDYtMTIgMTY6NTE6MjEuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCTIwMTUtMDYtMTUgMTc6MzA6 MDAuMDAyMjgzODQ1ICswMjAwCi1AQCAtNjUsNiArNjUsOSBAQAotICNpbmNsdWRlIDxvcGVuc3Ns L2RzYS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9h c24xLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ Ci0rI2VuZGlmCi0gCi0gc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbmVk IGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0EgKmRzYSk7Ci0gc3RhdGljIGludCBkc2Ffc2lnbl9z ZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAqKmtpbnZwLAotQEAgLTgzLDcg Kzg2LDcgQEAgc3RhdGljIERTQV9NRVRIT0Qgb3BlbnNzbF9kc2FfbWV0aCA9IHsKLSAgICAgTlVM TCwgICAgICAgICAgICAgICAgICAgICAgIC8qIGRzYV9ibl9tb2RfZXhwLCAqLwotICAgICBkc2Ff aW5pdCwKLSAgICAgZHNhX2ZpbmlzaCwKLS0gICAgMCwKLSsgICAgRFNBX0ZMQUdfRklQU19NRVRI T0QsCi0gICAgIE5VTEwsCi0gICAgIE5VTEwsCi0gICAgIE5VTEwKLUBAIC0xNDAsNiArMTQzLDE5 IEBAIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ24KLSAgICAgRFNBX1NJ RyAqcmV0ID0gTlVMTDsKLSAgICAgaW50IG5vcmVkbyA9IDA7Ci0gCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgRklQU2Vy cihGSVBTX0ZfRFNBX0RPX1NJR04sIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAg ICAgICByZXR1cm4gTlVMTDsKLSsgICAgfQotKwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShk c2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rICAgICAgICAmJiAoQk5fbnVt X2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKLSsg ICAgICAgIERTQWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxM KTsKLSsgICAgICAgIHJldHVybiBOVUxMOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0gICAgIEJOX2lu aXQoJm0pOwotICAgICBCTl9pbml0KCZ4cik7Ci0gCi1AQCAtMzMwLDYgKzM0NiwxOCBAQCBzdGF0 aWMgaW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQKLSAgICAgICAgIERTQWVycihEU0Ff Rl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9CQURfUV9WQUxVRSk7Ci0gICAgICAgICByZXR1cm4gLTE7 Ci0gICAgIH0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fVkVSSUZZLCBGSVBTX1Jf RklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIC0xOwotKyAgICB9Ci0rCi0r ICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19B TExPVykKLSsgICAgICAgICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQ U19NSU5fTU9EVUxVU19CSVRTKSkgewotKyAgICAgICAgRFNBZXJyKERTQV9GX0RTQV9ET19WRVJJ RlksIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rICAgICAgICByZXR1cm4gLTE7Ci0rICAg IH0KLSsjZW5kaWYKLSAKLSAgICAgaWYgKEJOX251bV9iaXRzKGRzYS0+cCkgPiBPUEVOU1NMX0RT QV9NQVhfTU9EVUxVU19CSVRTKSB7Ci0gICAgICAgICBEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklG WSwgRFNBX1JfTU9EVUxVU19UT09fTEFSR0UpOwotQEAgLTQxMCw2ICs0MzgsOSBAQCBzdGF0aWMg aW50IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQKLSAKLSBzdGF0aWMgaW50IGRzYV9pbml0 KERTQSAqZHNhKQotIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIEZJUFNfc2VsZnRlc3Rf Y2hlY2soKTsKLSsjZW5kaWYKLSAgICAgZHNhLT5mbGFncyB8PSBEU0FfRkxBR19DQUNIRV9NT05U X1A7Ci0gICAgIHJldHVybiAoMSk7Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRv L2RzYS9kc2FfcG1ldGguYy5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9kc2EvZHNhX3BtZXRo LmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMJMjAxNS0w Ni0xMiAxNjo1MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8v ZHNhL2RzYV9wbWV0aC5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDAyMjgzODQ1ICswMjAwCi1AQCAt MjUzLDcgKzI1Myw3IEBAIHN0YXRpYyBpbnQgcGtleV9kc2FfcGFyYW1nZW4oRVZQX1BLRVlfQ1QK LSAgICAgaWYgKCFkc2EpCi0gICAgICAgICByZXR1cm4gMDsKLSAgICAgcmV0ID0gZHNhX2J1aWx0 aW5fcGFyYW1nZW4oZHNhLCBkY3R4LT5uYml0cywgZGN0eC0+cWJpdHMsIGRjdHgtPnBtZCwKLS0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwg cGNiKTsKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgTlVM TCwgcGNiKTsKLSAgICAgaWYgKHJldCkKLSAgICAgICAgIEVWUF9QS0VZX2Fzc2lnbl9EU0EocGtl eSwgZHNhKTsKLSAgICAgZWxzZQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2RzYS9k c2F0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZHNhL2RzYXRlc3QuYwotLS0tIG9w ZW5zc2wtMS4wLjJjL2NyeXB0by9kc2EvZHNhdGVzdC5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToy MS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZHNhL2RzYXRlc3Qu YwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAwMjI4Mzg0NSArMDIwMAotQEAgLTEwMCwzNiArMTAwLDQx IEBAIHN0YXRpYyBpbnQgTVNfQ0FMTEJBQ0sgZHNhX2NiKGludCBwLCBpbnQKLSAgKiBQVUIgMTg2 IGFuZCBhbHNvIGFwcGVhciBpbiBBcHBlbmRpeCA1IHRvIEZJUFMgUElCIDE4Ni0xCi0gICovCi0g c3RhdGljIHVuc2lnbmVkIGNoYXIgc2VlZFsyMF0gPSB7Ci0tICAgIDB4ZDUsIDB4MDEsIDB4NGUs IDB4NGIsIDB4NjAsIDB4ZWYsIDB4MmIsIDB4YTgsIDB4YjYsIDB4MjEsIDB4MWIsIDB4NDAsCi0t ICAgIDB4NjIsIDB4YmEsIDB4MzIsIDB4MjQsIDB4ZTAsIDB4NDIsIDB4N2QsIDB4ZDMsCi0rICAg IDB4MDIsIDB4NDcsIDB4MTEsIDB4OTIsIDB4MTEsIDB4ODgsIDB4QzgsIDB4RkIsIDB4QUYsIDB4 NDgsIDB4NEMsIDB4NjIsCi0rICAgIDB4REYsIDB4QTUsIDB4QkUsIDB4QTAsIDB4QTQsIDB4M0Ms IDB4NTYsIDB4RTMsCi0gfTsKLSAKLSBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcFtdID0gewot LSAgICAweDhkLCAweGYyLCAweGE0LCAweDk0LCAweDQ5LCAweDIyLCAweDc2LCAweGFhLAotLSAg ICAweDNkLCAweDI1LCAweDc1LCAweDliLCAweGIwLCAweDY4LCAweDY5LCAweGNiLAotLSAgICAw eGVhLCAweGMwLCAweGQ4LCAweDNhLCAweGZiLCAweDhkLCAweDBjLCAweGY3LAotLSAgICAweGNi LCAweGI4LCAweDMyLCAweDRmLCAweDBkLCAweDc4LCAweDgyLCAweGU1LAotLSAgICAweGQwLCAw eDc2LCAweDJmLCAweGM1LCAweGI3LCAweDIxLCAweDBlLCAweGFmLAotLSAgICAweGMyLCAweGU5 LCAweGFkLCAweGFjLCAweDMyLCAweGFiLCAweDdhLCAweGFjLAotLSAgICAweDQ5LCAweDY5LCAw eDNkLCAweGZiLCAweGY4LCAweDM3LCAweDI0LCAweGMyLAotLSAgICAweGVjLCAweDA3LCAweDM2 LCAweGVlLCAweDMxLCAweGM4LCAweDAyLCAweDkxLAotKyAgICAweEFDLCAweENCLCAweDFFLCAw eDYzLCAweDYwLCAweDY5LCAweDBDLCAweEZCLCAweDA2LCAweDE5LCAweDY4LCAweDNFLAotKyAg ICAweEE1LCAweDAxLCAweDVBLCAweEEyLCAweDE1LCAweDVDLCAweEUyLCAweDk5LCAweDJELCAw eEQ1LCAweDMwLCAweDk5LAotKyAgICAweDdFLCAweDVGLCAweDhELCAweEUyLCAweEY3LCAweEM2 LCAweDJFLCAweDhELCAweEEzLCAweDlGLCAweDU4LCAweEFELAotKyAgICAweEQ2LCAweEE5LCAw eDdELCAweDBFLCAweDBELCAweDk1LCAweDUzLCAweEE2LCAweDcxLCAweDNBLCAweERFLCAweEFC LAotKyAgICAweEFDLCAweEU5LCAweEY0LCAweDM2LCAweDU1LCAweDlFLCAweEI5LCAweEQ2LCAw eDkzLCAweEJGLCAweEYzLCAweDE4LAotKyAgICAweDFDLCAweDE0LCAweDdCLCAweEE1LCAweDQy LCAweDJFLCAweENELCAweDAwLCAweEVCLCAweDM1LCAweDNCLCAweDFCLAotKyAgICAweEE4LCAw eDUxLCAweEJCLCAweEUxLCAweDU4LCAweDQyLCAweDg1LCAweDg0LCAweDIyLCAweEE3LCAweDk3 LCAweDVFLAotKyAgICAweDk5LCAweDZGLCAweDM4LCAweDIwLCAweEJELCAweDlELCAweEI2LCAw eEQ5LCAweDMzLCAweDM3LCAweDJBLCAweEZELAotKyAgICAweEJCLCAweEQ0LCAweEJDLCAweDBD LCAweDJBLCAweDY3LCAweENCLCAweDlGLCAweEJCLCAweERGLCAweEY5LCAweDkzLAotKyAgICAw eEFBLCAweEQ2LCAweEYwLCAweEQ2LCAweDk1LCAweDBCLCAweDVELCAweDY1LCAweDE0LCAweEQw LCAweDE4LCAweDlELAotKyAgICAweEM2LCAweEFGLCAweEYwLCAweEM2LCAweDM3LCAweDdDLCAw eEYzLCAweDVGLAotIH07Ci0gCi0gc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3FbXSA9IHsKLS0g ICAgMHhjNywgMHg3MywgMHgyMSwgMHg4YywgMHg3MywgMHg3ZSwgMHhjOCwgMHhlZSwKLS0gICAg MHg5OSwgMHgzYiwgMHg0ZiwgMHgyZCwgMHhlZCwgMHgzMCwgMHhmNCwgMHg4ZSwKLS0gICAgMHhk YSwgMHhjZSwgMHg5MSwgMHg1ZiwKLSsgICAgMHhFMywgMHg4RSwgMHg1RSwgMHg2RCwgMHhCRiwg MHgyQiwgMHg3OSwgMHhGOCwgMHhDNSwgMHg0QiwgMHg4OSwgMHg4QiwKLSsgICAgMHhCQSwgMHgy RCwgMHg5MSwgMHhDMywgMHg2QywgMHg4MCwgMHhBQywgMHg4NywKLSB9OwotIAotIHN0YXRpYyB1 bnNpZ25lZCBjaGFyIG91dF9nW10gPSB7Ci0tICAgIDB4NjIsIDB4NmQsIDB4MDIsIDB4NzgsIDB4 MzksIDB4ZWEsIDB4MGEsIDB4MTMsCi0tICAgIDB4NDEsIDB4MzEsIDB4NjMsIDB4YTUsIDB4NWIs IDB4NGMsIDB4YjUsIDB4MDAsCi0tICAgIDB4MjksIDB4OWQsIDB4NTUsIDB4MjIsIDB4OTUsIDB4 NmMsIDB4ZWYsIDB4Y2IsCi0tICAgIDB4M2IsIDB4ZmYsIDB4MTAsIDB4ZjMsIDB4OTksIDB4Y2Us IDB4MmMsIDB4MmUsCi0tICAgIDB4NzEsIDB4Y2IsIDB4OWQsIDB4ZTUsIDB4ZmEsIDB4MjQsIDB4 YmEsIDB4YmYsCi0tICAgIDB4NTgsIDB4ZTUsIDB4YjcsIDB4OTUsIDB4MjEsIDB4OTIsIDB4NWMs IDB4OWMsCi0tICAgIDB4YzQsIDB4MmUsIDB4OWYsIDB4NmYsIDB4NDYsIDB4NGIsIDB4MDgsIDB4 OGMsCi0tICAgIDB4YzUsIDB4NzIsIDB4YWYsIDB4NTMsIDB4ZTYsIDB4ZDcsIDB4ODgsIDB4MDIs Ci0rICAgIDB4NDIsIDB4NEEsIDB4MDQsIDB4NEUsIDB4NzksIDB4QjQsIDB4OTksIDB4N0YsIDB4 RkQsIDB4NTgsIDB4MzYsIDB4MkMsCi0rICAgIDB4MUIsIDB4NUYsIDB4MTgsIDB4N0UsIDB4MEQs IDB4Q0MsIDB4QUIsIDB4ODEsIDB4QzksIDB4NUQsIDB4MTAsIDB4Q0UsCi0rICAgIDB4NEUsIDB4 ODAsIDB4N0UsIDB4NTgsIDB4QjQsIDB4MzQsIDB4M0YsIDB4QTcsIDB4NDUsIDB4QzcsIDB4QUEs IDB4MzYsCi0rICAgIDB4MjQsIDB4NDIsIDB4QTksIDB4M0IsIDB4RTgsIDB4MEUsIDB4MDQsIDB4 MDIsIDB4MkQsIDB4RkIsIDB4QTYsIDB4MTMsCi0rICAgIDB4QjksIDB4QjUsIDB4MTUsIDB4QTUs IDB4NTYsIDB4MDcsIDB4MzUsIDB4RTQsIDB4MDMsIDB4QjYsIDB4NzksIDB4N0MsCi0rICAgIDB4 NjIsIDB4REQsIDB4REYsIDB4M0YsIDB4NzEsIDB4M0EsIDB4OUQsIDB4OEIsIDB4QzQsIDB4RjYs IDB4RTcsIDB4MUQsCi0rICAgIDB4NTIsIDB4QTgsIDB4QTksIDB4NDMsIDB4MUQsIDB4MzMsIDB4 NTEsIDB4ODgsIDB4MzksIDB4QkQsIDB4NzMsIDB4RTksCi0rICAgIDB4NUYsIDB4QkUsIDB4ODIs IDB4NDksIDB4MjcsIDB4RTYsIDB4QjUsIDB4NTMsIDB4QzEsIDB4MzgsIDB4QUMsIDB4MkYsCi0r ICAgIDB4NkQsIDB4OTcsIDB4NkMsIDB4RUIsIDB4NjcsIDB4QzEsIDB4NUYsIDB4NjcsIDB4Rjgs IDB4MzUsIDB4MDUsIDB4NUUsCi0rICAgIDB4RDUsIDB4NjgsIDB4ODAsIDB4QUEsIDB4OTYsIDB4 Q0EsIDB4MEIsIDB4OEEsIDB4RTYsIDB4RjEsIDB4QjEsIDB4NDEsCi0rICAgIDB4QzYsIDB4NzUs IDB4OTQsIDB4MEEsIDB4MEEsIDB4MkEsIDB4RkEsIDB4MjksCi0gfTsKLSAKLSBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzdHIxW10gPSAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOwotQEAgLTE2 Miw3ICsxNjcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gICAgIEJJT19w cmludGYoYmlvX2VyciwgInRlc3QgZ2VuZXJhdGlvbiBvZiBEU0EgcGFyYW1ldGVyc1xuIik7Ci0g Ci0gICAgIEJOX0dFTkNCX3NldCgmY2IsIGRzYV9jYiwgYmlvX2Vycik7Ci0tICAgIGlmICgoKGRz YSA9IERTQV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRz YSwgNTEyLAotKyAgICBpZiAoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0FfZ2Vu ZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWQsIDIwLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmY291bnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmgsICZjYikpCi1AQCAtMTc2LDggKzE4MSw4 IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAgQklPX3ByaW50ZihiaW9f ZXJyLCAiXG5jb3VudGVyPSVkIGg9JWxkXG4iLCBjb3VudGVyLCBoKTsKLSAKLSAgICAgRFNBX3By aW50KGJpb19lcnIsIGRzYSwgMCk7Ci0tICAgIGlmIChjb3VudGVyICE9IDEwNSkgewotLSAgICAg ICAgQklPX3ByaW50ZihiaW9fZXJyLCAiY291bnRlciBzaG91bGQgYmUgMTA1XG4iKTsKLSsgICAg aWYgKGNvdW50ZXIgIT0gMjM5KSB7Ci0rICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsICJjb3Vu dGVyIHNob3VsZCBiZSAyMzlcbiIpOwotICAgICAgICAgZ290byBlbmQ7Ci0gICAgIH0KLSAgICAg aWYgKGggIT0gMikgewotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2VuZ2luZS9lbmdf YWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYwotLS0tIG9w ZW5zc2wtMS4wLjJjL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1 MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZW5naW5lL2Vu Z19hbGwuYwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAwMjI4Mzg0NSArMDIwMAotQEAgLTU5LDExICs1 OSwyNSBAQAotIAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRlICJlbmdfaW50Lmgi Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2Vu ZGlmCi0gCi0gdm9pZCBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXModm9pZCkKLSB7Ci0gICAg IC8qIFNvbWUgRU5HSU5FcyBuZWVkIHRoaXMgKi8KLSAgICAgT1BFTlNTTF9jcHVpZF9zZXR1cCgp OwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsg ICAgaWYgKEZJUFNfbW9kZSgpKSB7Ci0rICAgICAgICAvKiBXZSBhbGxvdyBsb2FkaW5nIGR5bmFt aWMgZW5naW5lIGFzIGEgdGhpcmQgcGFydHkKLSsgICAgICAgICAgIGVuZ2luZSBtaWdodCBiZSBG SVBTIHZhbGlkYXRlZC4KLSsgICAgICAgICAgIFVzZXIgaXMgZGlzYWxsb3dlZCB0byBsb2FkIG5v bi12YWxpZGF0ZWQgZW5naW5lcwotKyAgICAgICAgICAgYnkgc2VjdXJpdHkgcG9saWN5LiAqLwot KyAgICAgICAgRU5HSU5FX2xvYWRfZHluYW1pYygpOwotKyAgICAgICAgcmV0dXJuOwotKyAgICB9 Ci0rI2VuZGlmCi0gI2lmIDAKLSAgICAgLyoKLSAgICAgICogVGhlcmUncyBubyBsb25nZXIgYW55 IG5lZWQgZm9yIGFuICJvcGVuc3NsIiBFTkdJTkUgdW5sZXNzLCBvbmUgZGF5LCBpdAotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9jX2FsbGMuYy5maXBzIG9wZW5zc2wtMS4wLjJj L2NyeXB0by9ldnAvY19hbGxjLmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL2NfYWxs Yy5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4yYy9jcnlwdG8vZXZwL2NfYWxsYy5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDAyMjgzODQ1 ICswMjAwCi1AQCAtNjUsNiArNjUsMTAgQEAKLSB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJz KHZvaWQpCi0gewotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgT1BFTlNTTF9pbml0X2xp YnJhcnkoKTsKLSsgICAgaWYgKCFGSVBTX21vZGUoKSkgewotKyNlbmRpZgotICNpZm5kZWYgT1BF TlNTTF9OT19ERVMKLSAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7Ci0gICAgIEVW UF9hZGRfY2lwaGVyKEVWUF9kZXNfY2ZiMSgpKTsKLUBAIC0yMzgsNCArMjQyLDY0IEBAIHZvaWQg T3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKLSAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMo U05fY2FtZWxsaWFfMjU2X2NiYywgIkNBTUVMTElBMjU2Iik7Ci0gICAgIEVWUF9hZGRfY2lwaGVy X2FsaWFzKFNOX2NhbWVsbGlhXzI1Nl9jYmMsICJjYW1lbGxpYTI1NiIpOwotICNlbmRpZgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgfSBlbHNlIHsKLSsjIGlmbmRlZiBPUEVOU1NMX05PX0RF UwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfY2ZiKCkpOwotKyAgICAgICAg RVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NmYigpKTsKLSsKLSsgICAgICAgIEVWUF9hZGRf Y2lwaGVyKEVWUF9kZXNfZWRlX29mYigpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9k ZXNfZWRlM19vZmIoKSk7Ci0rCi0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9j YmMoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOwotKyAg ICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNfY2JjLCAiREVTMyIpOwotKyAg ICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNfY2JjLCAiZGVzMyIpOwotKwot KyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUoKSk7Ci0rICAgICAgICBFVlBfYWRk X2NpcGhlcihFVlBfZGVzX2VkZTMoKSk7Ci0rIyBlbmRpZgotKwotKyMgaWZuZGVmIE9QRU5TU0xf Tk9fQUVTCi0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9lY2IoKSk7Ci0rICAg ICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7Ci0rICAgICAgICBFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzEyOF9jZmIoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzEyOF9jZmIxKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2Zi OCgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29mYigpKTsKLSsgICAg ICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2N0cigpKTsKLSsgICAgICAgIEVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMTI4X2djbSgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTI4X3h0cygpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NjbSgp KTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3dyYXAoKSk7Ci0rICAgICAg ICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywgIkFFUzEyOCIpOwotKyAgICAg ICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsICJhZXMxMjgiKTsKLSsgICAg ICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2VjYigpKTsKLSsgICAgICAgIEVWUF9hZGRf Y2lwaGVyKEVWUF9hZXNfMTkyX2NiYygpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9h ZXNfMTkyX2NmYigpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYjEo KSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmI4KCkpOwotKyAgICAg ICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfb2ZiKCkpOwotKyAgICAgICAgRVZQX2FkZF9j aXBoZXIoRVZQX2Flc18xOTJfY3RyKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18xOTJfZ2NtKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2NtKCkp OwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfd3JhcCgpKTsKLSsgICAgICAg IEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCAiQUVTMTkyIik7Ci0rICAgICAg ICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywgImFlczE5MiIpOwotKyAgICAg ICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNiKCkpOwotKyAgICAgICAgRVZQX2FkZF9j aXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18yNTZfY2ZiKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiMSgp KTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYjgoKSk7Ci0rICAgICAg ICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9vZmIoKSk7Ci0rICAgICAgICBFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzI1Nl9jdHIoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzI1Nl9nY20oKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl94dHMoKSk7 Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jY20oKSk7Ci0rICAgICAgICBF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl93cmFwKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBo ZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsICJBRVMyNTYiKTsKLSsgICAgICAgIEVWUF9hZGRfY2lw aGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCAiYWVzMjU2Iik7Ci0rIyBlbmRpZgotKyAgICB9Ci0r I2VuZGlmCi0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9jX2FsbGQuYy5m aXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvY19hbGxkLmMKLS0tLSBvcGVuc3NsLTEuMC4y Yy9jcnlwdG8vZXZwL2NfYWxsZC5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL2NfYWxsZC5jCTIwMTUtMDYtMTUg MTc6MzA6MDAuMDAzMjgzODY4ICswMjAwCi1AQCAtNjQsNTEgKzY0LDgxIEBACi0gCi0gdm9pZCBP cGVuU1NMX2FkZF9hbGxfZGlnZXN0cyh2b2lkKQotIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r ICAgIE9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0rICAgIGlmICghRklQU19tb2RlKCkpIHsKLSsj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fTUQ0Ci0tICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9t ZDQoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfbWQ0KCkpOwotICNlbmRpZgotICNp Zm5kZWYgT1BFTlNTTF9OT19NRDUKLS0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX21kNSgpKTsKLS0g ICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCAic3NsMi1tZDUiKTsKLS0gICAgRVZQX2Fk ZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCAic3NsMy1tZDUiKTsKLSsgICAgICAgIEVWUF9hZGRfZGln ZXN0KEVWUF9tZDUoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsICJz c2wyLW1kNSIpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCAic3NsMy1t ZDUiKTsKLSAjZW5kaWYKLSAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVk KE9QRU5TU0xfTk9fU0hBMCkKLS0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYSgpKTsKLSsgICAg ICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEoKSk7Ci0gIyBpZm5kZWYgT1BFTlNTTF9OT19EU0EK LS0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX2RzcygpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0 KEVWUF9kc3MoKSk7Ci0gIyBlbmRpZgotICNlbmRpZgotICNpZiAhZGVmaW5lZChPUEVOU1NMX05P X1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQotLSAgICBFVlBfYWRkX2RpZ2VzdChF VlBfc2hhMSgpKTsKLS0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwgInNzbDMtc2hh MSIpOwotLSAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVuY3J5cHRpb24s IFNOX3NoYTFXaXRoUlNBKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOwot KyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwgInNzbDMtc2hhMSIpOwotKyAg ICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLCBTTl9z aGExV2l0aFJTQSk7Ci0gIyBpZm5kZWYgT1BFTlNTTF9OT19EU0EKLS0gICAgRVZQX2FkZF9kaWdl c3QoRVZQX2RzczEoKSk7Ci0tICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEEx LCBTTl9kc2FXaXRoU0hBMV8yKTsKLS0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0 aFNIQTEsICJEU1MxIik7Ci0tICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEEx LCAiZHNzMSIpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEoKSk7Ci0rICAgICAg ICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwgU05fZHNhV2l0aFNIQTFfMik7 Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwgIkRTUzEiKTsK LSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCAiZHNzMSIpOwot ICMgZW5kaWYKLSAjIGlmbmRlZiBPUEVOU1NMX05PX0VDRFNBCi0tICAgIEVWUF9hZGRfZGlnZXN0 KEVWUF9lY2RzYSgpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsKLSAj IGVuZGlmCi0gI2VuZGlmCi0gI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fTURDMikgJiYgIWRlZmlu ZWQoT1BFTlNTTF9OT19ERVMpCi0tICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZGMyKCkpOwotKyAg ICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX21kYzIoKSk7Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVO U1NMX05PX1JJUEVNRAotLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfcmlwZW1kMTYwKCkpOwotLSAg ICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9yaXBlbWQxNjAsICJyaXBlbWQiKTsKLS0gICAgRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fcmlwZW1kMTYwLCAicm1kMTYwIik7Ci0rICAgICAgICBFVlBf YWRkX2RpZ2VzdChFVlBfcmlwZW1kMTYwKCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxp YXMoU05fcmlwZW1kMTYwLCAicmlwZW1kIik7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlh cyhTTl9yaXBlbWQxNjAsICJybWQxNjAiKTsKLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9f U0hBMjU2Ci0tICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7Ci0tICAgIEVWUF9hZGRf ZGlnZXN0KEVWUF9zaGEyNTYoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0 KCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKLSAjZW5kaWYKLSAj aWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0tICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEzODQo KSk7Ci0tICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7Ci0rICAgICAgICBFVlBfYWRk X2RpZ2VzdChFVlBfc2hhMzg0KCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUx MigpKTsKLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCi0tICAgIEVWUF9h ZGRfZGlnZXN0KEVWUF93aGlybHBvb2woKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBf d2hpcmxwb29sKCkpOwotKyNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgfSBlbHNl IHsKLSsjIGlmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05P X1NIQTEpCi0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsKLSsgICAgICAgIEVW UF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsICJzc2wzLXNoYTEiKTsKLSsgICAgICAgIEVWUF9h ZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwgU05fc2hhMVdpdGhSU0Ep OwotKyMgIGlmbmRlZiBPUEVOU1NMX05PX0RTQQotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQ X2RzczEoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwg U05fZHNhV2l0aFNIQTFfMik7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FX aXRoU0hBMSwgIkRTUzEiKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdp dGhTSEExLCAiZHNzMSIpOwotKyMgIGVuZGlmCi0rIyAgaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EK LSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsKLSsjICBlbmRpZgotKyMgZW5k aWYKLSsjIGlmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgotKyAgICAgICAgRVZQX2FkZF9kaWdlc3Qo RVZQX3NoYTIyNCgpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7Ci0r IyBlbmRpZgotKyMgaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0rICAgICAgICBFVlBfYWRkX2Rp Z2VzdChFVlBfc2hhMzg0KCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigp KTsKLSsjIGVuZGlmCi0rICAgIH0KLSAjZW5kaWYKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4y Yy9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9kaWdl c3QuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDE1LTA2 LTEyIDE2OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9l dnAvZGlnZXN0LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDMyODM4NjggKzAyMDAKLUBAIC0xNDMs MTggKzE0Myw1NSBAQCBpbnQgRVZQX0RpZ2VzdEluaXQoRVZQX01EX0NUWCAqY3R4LCBjb25zCi0g ICAgIHJldHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgsIHR5cGUsIE5VTEwpOwotIH0KLSAKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJh cCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCi0rICogYWxnb3JpdGhtcyBp biBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgotKyAqLwotKwotK3N0YXRpYyBpbnQg YmFkX2luaXQoRVZQX01EX0NUWCAqY3R4KQotK3sKLSsgICAgRklQU19FUlJPUl9JR05PUkVEKCJE aWdlc3QgaW5pdCIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0rc3RhdGljIGludCBiYWRfdXBk YXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQotK3sK LSsgICAgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgdXBkYXRlIik7Ci0rICAgIHJldHVybiAw OwotK30KLSsKLStzdGF0aWMgaW50IGJhZF9maW5hbChFVlBfTURfQ1RYICpjdHgsIHVuc2lnbmVk IGNoYXIgKm1kKQotK3sKLSsgICAgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgRmluYWwiKTsK LSsgICAgcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBFVlBfTUQgYmFkX21kID0gewot KyAgICAwLAotKyAgICAwLAotKyAgICAwLAotKyAgICAwLAotKyAgICBiYWRfaW5pdCwKLSsgICAg YmFkX3VwZGF0ZSwKLSsgICAgYmFkX2ZpbmFsLAotKyAgICBOVUxMLAotKyAgICBOVUxMLAotKyAg ICBOVUxMLAotKyAgICAwLAotKyAgICB7MCwgMCwgMCwgMH0sCi0rfTsKLSsKLSsjZW5kaWYKLSsK LSBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjb25zdCBFVlBfTUQgKnR5 cGUsIEVOR0lORSAqaW1wbCkKLSB7Ci0gICAgIEVWUF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LCBF VlBfTURfQ1RYX0ZMQUdfQ0xFQU5FRCk7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICAvKiBJ ZiBGSVBTIG1vZGUgc3dpdGNoIHRvIGFwcHJvdmVkIGltcGxlbWVudGF0aW9uIGlmIHBvc3NpYmxl ICovCi0tICAgIGlmIChGSVBTX21vZGUoKSkgewotLSAgICAgICAgY29uc3QgRVZQX01EICpmaXBz bWQ7Ci0tICAgICAgICBpZiAodHlwZSkgewotLSAgICAgICAgICAgIGZpcHNtZCA9IGV2cF9nZXRf Zmlwc19tZCh0eXBlKTsKLS0gICAgICAgICAgICBpZiAoZmlwc21kKQotLSAgICAgICAgICAgICAg ICB0eXBlID0gZmlwc21kOwotLSAgICAgICAgfQotKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWls ZWQoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgsIEZJUFNf Ul9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICBjdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7 Ci0rICAgICAgICByZXR1cm4gMDsKLSAgICAgfQotICNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9O T19FTkdJTkUKLUBAIC0yMTIsNiArMjQ5LDE2IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBf TURfQ1RYICpjdHgsIGMKLSAgICAgfQotICNlbmRpZgotICAgICBpZiAoY3R4LT5kaWdlc3QgIT0g dHlwZSkgewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgICAgIGlmIChGSVBTX21vZGUoKSkg ewotKyAgICAgICAgICAgIGlmICghKHR5cGUtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykKLSsg ICAgICAgICAgICAgICAgJiYgIShjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBT X0FMTE9XKSkgewotKyAgICAgICAgICAgICAgICBFVlBlcnIoRVZQX0ZfRVZQX0RJR0VTVElOSVRf RVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKLSsgICAgICAgICAgICAgICAgY3R4LT5kaWdl c3QgPSAmYmFkX21kOwotKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICB9 Ci0rICAgICAgICB9Ci0rI2VuZGlmCi0gICAgICAgICBpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5k aWdlc3QtPmN0eF9zaXplKQotICAgICAgICAgICAgIE9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEp OwotICAgICAgICAgY3R4LT5kaWdlc3QgPSB0eXBlOwotQEAgLTIzNiwyNSArMjgzLDE1IEBAIGlu dCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMKLSAgICAgfQotICAgICBpZiAo Y3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT19JTklUKQotICAgICAgICAgcmV0dXJuIDE7 Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBpZiAoRklQU19tb2RlKCkpIHsKLS0gICAgICAg IGlmIChGSVBTX2RpZ2VzdGluaXQoY3R4LCB0eXBlKSkKLS0gICAgICAgICAgICByZXR1cm4gMTsK LS0gICAgICAgIE9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwotLSAgICAgICAgY3R4LT5tZF9k YXRhID0gTlVMTDsKLS0gICAgICAgIHJldHVybiAwOwotLSAgICB9Ci0tI2VuZGlmCi0gICAgIHJl dHVybiBjdHgtPmRpZ2VzdC0+aW5pdChjdHgpOwotIH0KLSAKLSBpbnQgRVZQX0RpZ2VzdFVwZGF0 ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBjb3VudCkKLSB7Ci0g I2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICByZXR1cm4gRklQU19kaWdlc3R1cGRhdGUoY3R4LCBk YXRhLCBjb3VudCk7Ci0tI2Vsc2UKLS0gICAgcmV0dXJuIGN0eC0+dXBkYXRlKGN0eCwgZGF0YSwg Y291bnQpOwotKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0gI2VuZGlmCi0rICAgIHJldHVy biBjdHgtPnVwZGF0ZShjdHgsIGRhdGEsIGNvdW50KTsKLSB9Ci0gCi0gLyogVGhlIGNhbGxlciBj YW4gYXNzdW1lIHRoYXQgdGhpcyByZW1vdmVzIGFueSBzZWNyZXQgZGF0YSBmcm9tIHRoZSBjb250 ZXh0ICovCi1AQCAtMjY5LDExICszMDYsMTEgQEAgaW50IEVWUF9EaWdlc3RGaW5hbChFVlBfTURf Q1RYICpjdHgsIHVucwotIC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3Zl cyBhbnkgc2VjcmV0IGRhdGEgZnJvbSB0aGUgY29udGV4dCAqLwotIGludCBFVlBfRGlnZXN0Rmlu YWxfZXgoRVZQX01EX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpz aXplKQotIHsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIHJldHVybiBGSVBTX2RpZ2VzdGZp bmFsKGN0eCwgbWQsIHNpemUpOwotLSNlbHNlCi0gICAgIGludCByZXQ7Ci0gCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gICAgIE9Q RU5TU0xfYXNzZXJ0KGN0eC0+ZGlnZXN0LT5tZF9zaXplIDw9IEVWUF9NQVhfTURfU0laRSk7Ci0g ICAgIHJldCA9IGN0eC0+ZGlnZXN0LT5maW5hbChjdHgsIG1kKTsKLSAgICAgaWYgKHNpemUgIT0g TlVMTCkKLUBAIC0yODQsNyArMzIxLDYgQEAgaW50IEVWUF9EaWdlc3RGaW5hbF9leChFVlBfTURf Q1RYICpjdHgsCi0gICAgIH0KLSAgICAgbWVtc2V0KGN0eC0+bWRfZGF0YSwgMCwgY3R4LT5kaWdl c3QtPmN0eF9zaXplKTsKLSAgICAgcmV0dXJuIHJldDsKLS0jZW5kaWYKLSB9Ci0gCi0gaW50IEVW UF9NRF9DVFhfY29weShFVlBfTURfQ1RYICpvdXQsIGNvbnN0IEVWUF9NRF9DVFggKmluKQotQEAg LTM3Myw3ICs0MDksNiBAQCB2b2lkIEVWUF9NRF9DVFhfZGVzdHJveShFVlBfTURfQ1RYICpjdHgp Ci0gLyogVGhpcyBjYWxsIGZyZWVzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRl eHQgKi8KLSBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9NRF9DVFggKmN0eCkKLSB7Ci0tI2lm bmRlZiBPUEVOU1NMX0ZJUFMKLSAgICAgLyoKLSAgICAgICogRG9uJ3QgYXNzdW1lIGN0eC0+bWRf ZGF0YSB3YXMgY2xlYW5lZCBpbiBFVlBfRGlnZXN0X0ZpbmFsLCBiZWNhdXNlCi0gICAgICAqIHNv bWV0aW1lcyBvbmx5IGNvcGllcyBvZiB0aGUgY29udGV4dCBhcmUgZXZlciBmaW5hbGlzZWQuCi1A QCAtMzg2LDcgKzQyMSw2IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4 KQotICAgICAgICAgT1BFTlNTTF9jbGVhbnNlKGN0eC0+bWRfZGF0YSwgY3R4LT5kaWdlc3QtPmN0 eF9zaXplKTsKLSAgICAgICAgIE9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwotICAgICB9Ci0t I2VuZGlmCi0gICAgIGlmIChjdHgtPnBjdHgpCi0gICAgICAgICBFVlBfUEtFWV9DVFhfZnJlZShj dHgtPnBjdHgpOwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLUBAIC0zOTcsOSArNDMxLDYg QEAgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCi0gICAgICAgICAgKi8K LSAgICAgICAgIEVOR0lORV9maW5pc2goY3R4LT5lbmdpbmUpOwotICNlbmRpZgotLSNpZmRlZiBP UEVOU1NMX0ZJUFMKLS0gICAgRklQU19tZF9jdHhfY2xlYW51cChjdHgpOwotLSNlbmRpZgotICAg ICBtZW1zZXQoY3R4LCAnXDAnLCBzaXplb2YgKmN0eCk7Ci0gCi0gICAgIHJldHVybiAxOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMgb3BlbnNzbC0xLjAu MmMvY3J5cHRvL2V2cC9lX2Flcy5jCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9lX2Fl cy5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4yYy9jcnlwdG8vZXZwL2VfYWVzLmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDMyODM4Njgg KzAyMDAKLUBAIC02MCw5ICs2MCw2IEBACi0gIyBpbmNsdWRlICJtb2Rlc19sY2wuaCIKLSAjIGlu Y2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotIAotLSMgdW5kZWYgRVZQX0NJUEhfRkxBR19GSVBTCi0t IyBkZWZpbmUgRVZQX0NJUEhfRkxBR19GSVBTIDAKLS0KLSB0eXBlZGVmIHN0cnVjdCB7Ci0gICAg IHVuaW9uIHsKLSAgICAgICAgIGRvdWJsZSBhbGlnbjsKLUBAIC0xMTU5LDYgKzExNTYsMTEgQEAg c3RhdGljIGludCBhZXNfZ2NtX2N0cmwoRVZQX0NJUEhFUl9DVFggKgotICAgICBjYXNlIEVWUF9D VFJMX0dDTV9TRVRfSVZMRU46Ci0gICAgICAgICBpZiAoYXJnIDw9IDApCi0gICAgICAgICAgICAg cmV0dXJuIDA7Ci0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgICAgIGlmIChGSVBTX21vZHVs ZV9tb2RlKCkgJiYgIShjLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0r ICAgICAgICAgICAgJiYgYXJnIDwgMTIpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rIyBlbmRp ZgotICAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IGZvciBJViBpZiBuZWVkZWQgKi8KLSAgICAg ICAgIGlmICgoYXJnID4gRVZQX01BWF9JVl9MRU5HVEgpICYmIChhcmcgPiBnY3R4LT5pdmxlbikp IHsKLSAgICAgICAgICAgICBpZiAoZ2N0eC0+aXYgIT0gYy0+aXYpCi1AQCAtMTcyNyw2ICsxNzI5 LDE0IEBAIHN0YXRpYyBpbnQgYWVzX3h0c19jaXBoZXIoRVZQX0NJUEhFUl9DVFgKLSAgICAgICAg IHJldHVybiAwOwotICAgICBpZiAoIW91dCB8fCAhaW4gfHwgbGVuIDwgQUVTX0JMT0NLX1NJWkUp Ci0gICAgICAgICByZXR1cm4gMDsKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICAvKiBSZXF1 aXJlbWVudCBvZiBTUDgwMC0zOEUgKi8KLSsgICAgaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAh KGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSAmJgotKyAgICAgICAg KGxlbiA+ICgxVUwgPDwgMjApICogMTYpKSB7Ci0rICAgICAgICBFVlBlcnIoRVZQX0ZfQUVTX1hU U19DSVBIRVIsIEVWUF9SX1RPT19MQVJHRSk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQot KyMgZW5kaWYKLSAgICAgaWYgKHhjdHgtPnN0cmVhbSkKLSAgICAgICAgICgqeGN0eC0+c3RyZWFt KSAoaW4sIG91dCwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICB4Y3R4LT54dHMua2V5 MSwgeGN0eC0+eHRzLmtleTIsIGN0eC0+aXYpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5 cHRvL2V2cC9lX2RlczMuYy5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvZV9kZXMzLmMK LS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMJMjAxNS0wNi0xMiAx Njo1MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL2Vf ZGVzMy5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDAzMjgzODY4ICswMjAwCi1AQCAtNjUsMTAgKzY1 LDYgQEAKLSAjIGluY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0gIyBpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KLSAKLS0vKiBCbG9jayB1c2Ugb2YgaW1wbGVtZW50YXRpb25zIGluIEZJUFMgbW9kZSAq LwotLSMgdW5kZWYgRVZQX0NJUEhfRkxBR19GSVBTCi0tIyBkZWZpbmUgRVZQX0NJUEhfRkxBR19G SVBTICAgICAgMAotLQotIHR5cGVkZWYgc3RydWN0IHsKLSAgICAgdW5pb24gewotICAgICAgICAg ZG91YmxlIGFsaWduOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9lX251bGwu Yy5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvZV9udWxsLmMKLS0tLSBvcGVuc3NsLTEu MC4yYy9jcnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL2VfbnVsbC5jCTIwMTUtMDYt MTUgMTc6MzA6MDAuMDAzMjgzODY4ICswMjAwCi1AQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgaW50 IG51bGxfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjCi0gc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIg bl9jaXBoZXIgPSB7Ci0gICAgIE5JRF91bmRlZiwKLSAgICAgMSwgMCwgMCwKLS0gICAgMCwKLSsg ICAgRVZQX0NJUEhfRkxBR19GSVBTLAotICAgICBudWxsX2luaXRfa2V5LAotICAgICBudWxsX2Np cGhlciwKLSAgICAgTlVMTCwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvZXZw X2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9ldnBfZW5jLmMKLS0tLSBvcGVu c3NsLTEuMC4yYy9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzCTIwMTUtMDYtMTIgMTY6NTE6MjEu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9ldnBfZW5jLmMJ MjAxNS0wNi0xNSAxNzozMDowMC4wMDQyODM4OTEgKzAyMDAKLUBAIC02OSwxNiArNjksNzMgQEAK LSAjZW5kaWYKLSAjaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLS0jaWZkZWYgT1BFTlNTTF9GSVBT Ci0tIyBkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpIEZJUFNfY2lwaGVyKGN0 eCwgb3V0LCBpbiwgaW5sKQotLSNlbHNlCi0tIyBkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQs IGluLCBpbmwpIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpCi0tI2Vu ZGlmCi0rI2RlZmluZSBNX2RvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkgY3R4LT5jaXBoZXIt PmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkKLSAKLSBjb25zdCBjaGFyIEVWUF92ZXJzaW9u W10gPSAiRVZQIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwotKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBh dHRlbXB0IHRvIHVzZSBub24gRklQUwotKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBp Z25vcmUgdGhlIGVycm9ycy4KLSsgKi8KLSsKLStzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9DSVBI RVJfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLSsgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCBpbnQgZW5jKQotK3sKLSsgICAgRklQU19FUlJP Ul9JR05PUkVEKCJDaXBoZXIgaW5pdCIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0rc3RhdGlj IGludCBiYWRfZG9fY2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91 dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVu c2lnbmVkIGludCBpbmwpCi0rewotKyAgICBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciB1cGRh dGUiKTsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKwotKy8qIE5COiBubyBjbGVhbnVwIGJlY2F1c2Ug aXQgaXMgYWxsb3dlZCBhZnRlciBmYWlsZWQgaW5pdCAqLwotKwotK3N0YXRpYyBpbnQgYmFkX3Nl dF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQotK3sKLSsgICAgRklQ U19FUlJPUl9JR05PUkVEKCJDaXBoZXIgc2V0X2FzbjEiKTsKLSsgICAgcmV0dXJuIDA7Ci0rfQot KwotK3N0YXRpYyBpbnQgYmFkX2dldF9hc24xKEVWUF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQ RSAqdHlwKQotK3sKLSsgICAgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgZ2V0X2FzbjEiKTsK LSsgICAgcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRpYyBpbnQgYmFkX2N0cmwoRVZQX0NJUEhFUl9D VFggKmN0eCwgaW50IHR5cGUsIGludCBhcmcsIHZvaWQgKnB0cikKLSt7Ci0rICAgIEZJUFNfRVJS T1JfSUdOT1JFRCgiQ2lwaGVyIGN0cmwiKTsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKwotK3N0YXRp YyBjb25zdCBFVlBfQ0lQSEVSIGJhZF9jaXBoZXIgPSB7Ci0rICAgIDAsCi0rICAgIDAsCi0rICAg IDAsCi0rICAgIDAsCi0rICAgIDAsCi0rICAgIGJhZF9pbml0LAotKyAgICBiYWRfZG9fY2lwaGVy LAotKyAgICBOVUxMLAotKyAgICAwLAotKyAgICBiYWRfc2V0X2FzbjEsCi0rICAgIGJhZF9nZXRf YXNuMSwKLSsgICAgYmFkX2N0cmwsCi0rICAgIE5VTEwKLSt9OwotKwotKyNlbmRpZgotKwotIHZv aWQgRVZQX0NJUEhFUl9DVFhfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4KQotIHsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAgICAg bWVtc2V0KGN0eCwgMCwgc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7Ci0gICAgIC8qIGN0eC0+Y2lw aGVyPU5VTEw7ICovCi0gfQotQEAgLTExMCw2ICsxNjcsMTMgQEAgaW50IEVWUF9DaXBoZXJJbml0 X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotICAgICAgICAgICAgIGVuYyA9IDE7Ci0gICAgICAgICBj dHgtPmVuY3J5cHQgPSBlbmM7Ci0gICAgIH0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlm IChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9FVlBf Q0lQSEVSSU5JVF9FWCwgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIGN0 eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyNl bmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAgICAgLyoKLSAgICAgICogV2hldGhl ciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMiIGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250 ZXh0cyBzbwotQEAgLTE2OCwxNiArMjMyLDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4KEVWUF9D SVBIRVJfQ1RYICpjdAotICAgICAgICAgICAgIGN0eC0+ZW5naW5lID0gTlVMTDsKLSAjZW5kaWYK LSAKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgICAgICBpZiAoRklQU19tb2RlKCkpIHsKLS0g ICAgICAgICAgICBjb25zdCBFVlBfQ0lQSEVSICpmY2lwaGVyOwotLSAgICAgICAgICAgIGlmIChj aXBoZXIpCi0tICAgICAgICAgICAgICAgIGZjaXBoZXIgPSBldnBfZ2V0X2ZpcHNfY2lwaGVyKGNp cGhlcik7Ci0tICAgICAgICAgICAgaWYgKGZjaXBoZXIpCi0tICAgICAgICAgICAgICAgIGNpcGhl ciA9IGZjaXBoZXI7Ci0tICAgICAgICAgICAgcmV0dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgsIGNp cGhlciwga2V5LCBpdiwgZW5jKTsKLS0gICAgICAgIH0KLS0jZW5kaWYKLSAgICAgICAgIGN0eC0+ Y2lwaGVyID0gY2lwaGVyOwotICAgICAgICAgaWYgKGN0eC0+Y2lwaGVyLT5jdHhfc2l6ZSkgewot ICAgICAgICAgICAgIGN0eC0+Y2lwaGVyX2RhdGEgPSBPUEVOU1NMX21hbGxvYyhjdHgtPmNpcGhl ci0+Y3R4X3NpemUpOwotQEAgLTIwNCwxMCArMjU4LDYgQEAgaW50IEVWUF9DaXBoZXJJbml0X2V4 KEVWUF9DSVBIRVJfQ1RYICpjdAotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAgc2tpcF90 b19pbml0OgotICNlbmRpZgotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgaWYgKEZJUFNfbW9k ZSgpKQotLSAgICAgICAgcmV0dXJuIEZJUFNfY2lwaGVyaW5pdChjdHgsIGNpcGhlciwga2V5LCBp diwgZW5jKTsKLS0jZW5kaWYKLSAgICAgLyogd2UgYXNzdW1lIGJsb2NrIHNpemUgaXMgYSBwb3dl ciBvZiAyIGluICpjcnlwdFVwZGF0ZSAqLwotICAgICBPUEVOU1NMX2Fzc2VydChjdHgtPmNpcGhl ci0+YmxvY2tfc2l6ZSA9PSAxCi0gICAgICAgICAgICAgICAgICAgIHx8IGN0eC0+Y2lwaGVyLT5i bG9ja19zaXplID09IDgKLUBAIC0yNTMsNiArMzAzLDE5IEBAIGludCBFVlBfQ2lwaGVySW5pdF9l eChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLSAg ICAgfQotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgLyogQWZ0ZXIgJ2tleScgaXMgc2V0IG5v IGZ1cnRoZXIgcGFyYW1ldGVycyBjaGFuZ2VzIGFyZSBwZXJtaXNzaWJsZS4KLSsgICAgICogU28g b25seSBjaGVjayBmb3Igbm9uIEZJUFMgZW5hYmxpbmcgYXQgdGhpcyBwb2ludC4KLSsgICAgICov Ci0rICAgIGlmIChrZXkgJiYgRklQU19tb2RlKCkpIHsKLSsgICAgICAgIGlmICghKGN0eC0+Y2lw aGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfRklQUykKLSsgICAgICAgICAgICAmICEoY3R4LT5m bGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSB7Ci0rICAgICAgICAgICAgRVZQ ZXJyKEVWUF9GX0VWUF9DSVBIRVJJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0r ICAgICAgICAgICAgY3R4LT5jaXBoZXIgPSAmYmFkX2NpcGhlcjsKLSsgICAgICAgICAgICByZXR1 cm4gMDsKLSsgICAgICAgIH0KLSsgICAgfQotKyNlbmRpZgotIAotICAgICBpZiAoa2V5IHx8IChj dHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9BTFdBWVNfQ0FMTF9JTklUKSkgewotICAgICAg ICAgaWYgKCFjdHgtPmNpcGhlci0+aW5pdChjdHgsIGtleSwgaXYsIGVuYykpCi1AQCAtNTU0LDcg KzYxNyw2IEBAIHZvaWQgRVZQX0NJUEhFUl9DVFhfZnJlZShFVlBfQ0lQSEVSX0NUWAotIAotIGlu dCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1RYICpjKQotIHsKLS0jaWZuZGVm IE9QRU5TU0xfRklQUwotICAgICBpZiAoYy0+Y2lwaGVyICE9IE5VTEwpIHsKLSAgICAgICAgIGlm IChjLT5jaXBoZXItPmNsZWFudXAgJiYgIWMtPmNpcGhlci0+Y2xlYW51cChjKSkKLSAgICAgICAg ICAgICByZXR1cm4gMDsKLUBAIC01NjQsNyArNjI2LDYgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2Ns ZWFudXAoRVZQX0NJUEhFUl9DVAotICAgICB9Ci0gICAgIGlmIChjLT5jaXBoZXJfZGF0YSkKLSAg ICAgICAgIE9QRU5TU0xfZnJlZShjLT5jaXBoZXJfZGF0YSk7Ci0tI2VuZGlmCi0gI2lmbmRlZiBP UEVOU1NMX05PX0VOR0lORQotICAgICBpZiAoYy0+ZW5naW5lKQotICAgICAgICAgLyoKLUBAIC01 NzMsOSArNjM0LDYgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoRVZQX0NJUEhFUl9DVAot ICAgICAgICAgICovCi0gICAgICAgICBFTkdJTkVfZmluaXNoKGMtPmVuZ2luZSk7Ci0gI2VuZGlm Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBGSVBTX2NpcGhlcl9jdHhfY2xlYW51cChjKTsK LS0jZW5kaWYKLSAgICAgbWVtc2V0KGMsIDAsIHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOwotICAg ICByZXR1cm4gMTsKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL2V2cC5o LmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9ldnAuaAotLS0tIG9wZW5zc2wtMS4wLjJj L2NyeXB0by9ldnAvZXZwLmguZmlwcwkyMDE1LTA2LTE1IDE3OjI5OjU5Ljg5ODI4MTQ2MyArMDIw MAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvZXZwLmgJMjAxNS0wNi0xNSAxNzozMDow MC4wMDQyODM4OTEgKzAyMDAKLUBAIC0xMjIsNiArMTIyLDEwIEBACi0gZXh0ZXJuICJDIiB7Ci0g I2VuZGlmCi0gCi0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjICBpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjIGVuZGlmCi0rCi0gLyoKLSAgKiBUeXBlIG5lZWRzIHRvIGJlIGEgYml0IGZpZWxk IFN1Yi10eXBlIG5lZWRzIHRvIGJlIGZvciB2YXJpYXRpb25zIG9uIHRoZQotICAqIG1ldGhvZCwg YXMgaW4sIGNhbiBpdCBkbyBhcmJpdHJhcnkgZW5jcnlwdGlvbi4uLi4KLUBAIC0yODUsMTEgKzI4 OSw2IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIGNsZWFuZWQgKi8KLSAjIGRlZmluZSBFVlBfTURfQ1RY X0ZMQUdfUkVVU0UgICAgICAgICAgIDB4MDAwNC8qIERvbid0IGZyZWUgdXAgY3R4LT5tZF9kYXRh Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbiBF VlBfTURfQ1RYX2NsZWFudXAgKi8KLS0vKgotLSAqIEZJUFMgYW5kIHBhZCBvcHRpb25zIGFyZSBp Z25vcmVkIGluIDEuMC4wLCBkZWZpbml0aW9ucyBhcmUgaGVyZSBzbyB3ZQotLSAqIGRvbid0IGFj Y2lkZW50YWxseSByZXVzZSB0aGUgdmFsdWVzIGZvciBvdGhlciBwdXJwb3Nlcy4KLS0gKi8KLS0K LSAjIGRlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cgIDB4MDAwOC8qIEFsbG93 IHVzZSBvZiBub24gRklQUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICogZGlnZXN0IGluIEZJUFMgbW9kZSAqLwotIAotQEAgLTMwMiw2ICszMDEsMTAg QEAgc3RydWN0IGVudl9tZF9jdHhfc3QgewotICMgZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURf UEtDUzEgICAgICAgMHgwMC8qIFBLQ1MjMSB2MS41IG1vZGUgKi8KLSAjIGRlZmluZSBFVlBfTURf Q1RYX0ZMQUdfUEFEX1g5MzEgICAgICAgIDB4MTAvKiBYOS4zMSBtb2RlICovCi0gIyBkZWZpbmUg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MgICAgICAgICAweDIwLyogUFNTIG1vZGUgKi8KLSsjIGRl ZmluZSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpIFwKLSsgICAgICAgICAgICAgICAg KChjdHgtPmZsYWdzPj4xNikgJjB4RkZGRikgLyogc2VlZCBsZW5ndGggKi8KLSsjIGRlZmluZSBF VlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOICAgICAgIDB4RkZGRi8qIHNhbHQgbGVuIHNhbWUgYXMg ZGlnZXN0ICovCi0rIyBkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDICAgICAgICAweEZG RkUvKiBzYWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLwotIAotICMgZGVmaW5lIEVWUF9NRF9D VFhfRkxBR19OT19JTklUICAgICAgICAgMHgwMTAwLyogRG9uJ3QgaW5pdGlhbGl6ZSBtZF9kYXRh ICovCi0gCi1AQCAtMzYzLDE1ICszNjYsMTUgQEAgc3RydWN0IGV2cF9jaXBoZXJfc3QgewotIC8q IGNpcGhlciBoYW5kbGVzIHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLwotICMgZGVmaW5lICAgICAg ICAgRVZQX0NJUEhfUkFORF9LRVkgICAgICAgICAgICAgICAweDIwMAotIC8qIGNpcGhlciBoYXMg aXRzIG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMgKi8KLS0jIGRlZmluZSAgICAgICAgIEVW UF9DSVBIX0NVU1RPTV9DT1BZICAgICAgICAgICAgMHg0MDAKLSsjIGRlZmluZSAgICAgICAgIEVW UF9DSVBIX0NVU1RPTV9DT1BZICAgICAgICAgICAgMHg0MDAwCi0gLyogQWxsb3cgdXNlIGRlZmF1 bHQgQVNOMSBnZXQvc2V0IGl2ICovCi0gIyBkZWZpbmUgICAgICAgICBFVlBfQ0lQSF9GTEFHX0RF RkFVTFRfQVNOMSAgICAgIDB4MTAwMAotIC8qIEJ1ZmZlciBsZW5ndGggaW4gYml0cyBub3QgYnl0 ZXM6IENGQjEgbW9kZSBvbmx5ICovCi0gIyBkZWZpbmUgICAgICAgICBFVlBfQ0lQSF9GTEFHX0xF TkdUSF9CSVRTICAgICAgIDB4MjAwMAotIC8qIE5vdGUgaWYgc3VpdGFibGUgZm9yIHVzZSBpbiBG SVBTIG1vZGUgKi8KLS0jIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX0ZMQUdfRklQUyAgICAgICAg ICAgICAgMHg0MDAwCi0rIyBkZWZpbmUgICAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFMgICAgICAg ICAgICAgIDB4NDAwCi0gLyogQWxsb3cgbm9uIEZJUFMgY2lwaGVyIGluIEZJUFMgbW9kZSAqLwot LSMgZGVmaW5lICAgICAgICAgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVyAgICAweDgwMDAK LSsjIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cgICAgMHg4MDAK LSAvKgotICAqIENpcGhlciBoYW5kbGVzIGFueSBhbmQgYWxsIHBhZGRpbmcgbG9naWMgYXMgd2Vs bCBhcyBmaW5hbGlzYXRpb24uCi0gICovCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8v ZXZwL2V2cF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvZXZwX2xpYi5jCi0t LS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcwkyMDE1LTA2LTEyIDE2 OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvZXZw X2xpYi5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDA0MjgzODkxICswMjAwCi1AQCAtNjAsMTAgKzYw LDYgQEAKLSAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSMg aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0tIyBpbmNsdWRlICJldnBfbG9jbC5oIgotLSNlbmRp ZgotIAotIGludCBFVlBfQ0lQSEVSX3BhcmFtX3RvX2FzbjEoRVZQX0NJUEhFUl9DVFggKmMsIEFT TjFfVFlQRSAqdHlwZSkKLSB7Ci1AQCAtMjAwLDYgKzE5Niw5IEBAIGludCBFVlBfQ0lQSEVSX0NU WF9ibG9ja19zaXplKGNvbnN0IEVWUF8KLSBpbnQgRVZQX0NpcGhlcihFVlBfQ0lQSEVSX0NUWCAq Y3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmwpCi0gewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsg ICAgRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotICAgICByZXR1cm4gY3R4LT5jaXBo ZXItPmRvX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCk7Ci0gfQotIAotQEAgLTIxMCwyMiArMjA5 LDEyIEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9DSVBIRVJfQ1RYX2NpcGhlcigKLSAKLSB1bnNp Z25lZCBsb25nIEVWUF9DSVBIRVJfZmxhZ3MoY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyKQotIHsK LS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIGNvbnN0IEVWUF9DSVBIRVIgKmZjaXBoZXI7Ci0t ICAgIGZjaXBoZXIgPSBldnBfZ2V0X2ZpcHNfY2lwaGVyKGNpcGhlcik7Ci0tICAgIGlmIChmY2lw aGVyICYmIGZjaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19GSVBTKQotLSAgICAgICAgcmV0 dXJuIGNpcGhlci0+ZmxhZ3MgfCBFVlBfQ0lQSF9GTEFHX0ZJUFM7Ci0tI2VuZGlmCi0gICAgIHJl dHVybiBjaXBoZXItPmZsYWdzOwotIH0KLSAKLSB1bnNpZ25lZCBsb25nIEVWUF9DSVBIRVJfQ1RY X2ZsYWdzKGNvbnN0IEVWUF9DSVBIRVJfQ1RYICpjdHgpCi0gewotLSNpZmRlZiBPUEVOU1NMX0ZJ UFMKLS0gICAgcmV0dXJuIEVWUF9DSVBIRVJfZmxhZ3MoY3R4LT5jaXBoZXIpOwotLSNlbHNlCi0g ICAgIHJldHVybiBjdHgtPmNpcGhlci0+ZmxhZ3M7Ci0tI2VuZGlmCi0gfQotIAotIHZvaWQgKkVW UF9DSVBIRVJfQ1RYX2dldF9hcHBfZGF0YShjb25zdCBFVlBfQ0lQSEVSX0NUWCAqY3R4KQotQEAg LTI5Miw0MCArMjgxLDggQEAgaW50IEVWUF9NRF9zaXplKGNvbnN0IEVWUF9NRCAqbWQpCi0gICAg IHJldHVybiBtZC0+bWRfc2l6ZTsKLSB9Ci0gCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLQotLWNv bnN0IEVWUF9NRCAqZXZwX2dldF9maXBzX21kKGNvbnN0IEVWUF9NRCAqbWQpCi0tewotLSAgICBp bnQgbmlkID0gRVZQX01EX3R5cGUobWQpOwotLSAgICBpZiAobmlkID09IE5JRF9kc2EpCi0tICAg ICAgICByZXR1cm4gRklQU19ldnBfZHNzMSgpOwotLSAgICBlbHNlIGlmIChuaWQgPT0gTklEX2Rz YVdpdGhTSEEpCi0tICAgICAgICByZXR1cm4gRklQU19ldnBfZHNzKCk7Ci0tICAgIGVsc2UgaWYg KG5pZCA9PSBOSURfZWNkc2Ffd2l0aF9TSEExKQotLSAgICAgICAgcmV0dXJuIEZJUFNfZXZwX2Vj ZHNhKCk7Ci0tICAgIGVsc2UKLS0gICAgICAgIHJldHVybiBGSVBTX2dldF9kaWdlc3RieW5pZChu aWQpOwotLX0KLS0KLS1jb25zdCBFVlBfQ0lQSEVSICpldnBfZ2V0X2ZpcHNfY2lwaGVyKGNvbnN0 IEVWUF9DSVBIRVIgKmNpcGhlcikKLS17Ci0tICAgIGludCBuaWQgPSBjaXBoZXItPm5pZDsKLS0g ICAgaWYgKG5pZCA9PSBOSURfdW5kZWYpCi0tICAgICAgICByZXR1cm4gRklQU19ldnBfZW5jX251 bGwoKTsKLS0gICAgZWxzZQotLSAgICAgICAgcmV0dXJuIEZJUFNfZ2V0X2NpcGhlcmJ5bmlkKG5p ZCk7Ci0tfQotLQotLSNlbmRpZgotLQotIHVuc2lnbmVkIGxvbmcgRVZQX01EX2ZsYWdzKGNvbnN0 IEVWUF9NRCAqbWQpCi0gewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgY29uc3QgRVZQX01E ICpmbWQ7Ci0tICAgIGZtZCA9IGV2cF9nZXRfZmlwc19tZChtZCk7Ci0tICAgIGlmIChmbWQgJiYg Zm1kLT5mbGFncyAmIEVWUF9NRF9GTEFHX0ZJUFMpCi0tICAgICAgICByZXR1cm4gbWQtPmZsYWdz IHwgRVZQX01EX0ZMQUdfRklQUzsKLS0jZW5kaWYKLSAgICAgcmV0dXJuIG1kLT5mbGFnczsKLSB9 Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcyBv cGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4yYy9j cnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcwkyMDE1LTA2LTE1IDE3OjI5OjU5Ljg5NTI4MTM5NCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvZXZwX2xvY2wuaAkyMDE1LTA2LTE1 IDE3OjMwOjAwLjAwNDI4Mzg5MSArMDIwMAotQEAgLTI1OCwxMCArMjU4LDggQEAgY29uc3QgRVZQ X0NJUEhFUiAqRVZQXyMjY25hbWUjI19lY2Iodm9pZAotICAgICAgICAgQkxPQ0tfQ0lQSEVSX2Z1 bmNfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxjcHJlZml4LGNiaXRzLGtzdHJ1Y3Qsa3NjaGVkKSBc Ci0gICAgICAgICBCTE9DS19DSVBIRVJfZGVmX2NmYihjaXBoZXIjI18jI2tleXNpemUsa3N0cnVj dCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTklEXyMjY2lwaGVyIyNfIyNrZXlz aXplLCBrZXlzaXplLzgsIGl2X2xlbiwgY2JpdHMsIFwKLS0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDAsIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBcCi0tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LCBcCi0tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFVlBfQ0lQSEVSX2dldF9hc24xX2l2LCBcCi0tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBOVUxMKQotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhf RkxBR19ERUZBVUxUX0FTTjEsIFwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhl ciMjX2luaXRfa2V5LCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQotIAotIHN0cnVjdCBldnBfcGtl eV9jdHhfc3QgewotICAgICAvKiBNZXRob2QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3BlcmF0aW9u ICovCi1AQCAtMzU1LDExICszNTMsNiBAQCBjb25zdCBFVlBfQ0lQSEVSICpldnBfZ2V0X2ZpcHNf Y2lwaGVyKGNvCi0gIyBkZWZpbmUgTUQyX0luaXQgICAgICAgIHByaXZhdGVfTUQyX0luaXQKLSAj IGRlZmluZSBNREMyX0luaXQgICAgICAgcHJpdmF0ZV9NREMyX0luaXQKLSAjIGRlZmluZSBTSEFf SW5pdCAgICAgICAgcHJpdmF0ZV9TSEFfSW5pdAotLSMgZGVmaW5lIFNIQTFfSW5pdCAgICAgICBw cml2YXRlX1NIQTFfSW5pdAotLSMgZGVmaW5lIFNIQTIyNF9Jbml0ICAgICBwcml2YXRlX1NIQTIy NF9Jbml0Ci0tIyBkZWZpbmUgU0hBMjU2X0luaXQgICAgIHByaXZhdGVfU0hBMjU2X0luaXQKLS0j IGRlZmluZSBTSEEzODRfSW5pdCAgICAgcHJpdmF0ZV9TSEEzODRfSW5pdAotLSMgZGVmaW5lIFNI QTUxMl9Jbml0ICAgICBwcml2YXRlX1NIQTUxMl9Jbml0Ci0gCi0gIyBkZWZpbmUgQkZfc2V0X2tl eSAgICAgIHByaXZhdGVfQkZfc2V0X2tleQotICMgZGVmaW5lIENBU1Rfc2V0X2tleSAgICBwcml2 YXRlX0NBU1Rfc2V0X2tleQotQEAgLTM2Nyw3ICszNjAsNiBAQCBjb25zdCBFVlBfQ0lQSEVSICpl dnBfZ2V0X2ZpcHNfY2lwaGVyKGNvCi0gIyBkZWZpbmUgU0VFRF9zZXRfa2V5ICAgIHByaXZhdGVf U0VFRF9zZXRfa2V5Ci0gIyBkZWZpbmUgUkMyX3NldF9rZXkgICAgIHByaXZhdGVfUkMyX3NldF9r ZXkKLSAjIGRlZmluZSBSQzRfc2V0X2tleSAgICAgcHJpdmF0ZV9SQzRfc2V0X2tleQotLSMgZGVm aW5lIERFU19zZXRfa2V5X3VuY2hlY2tlZCAgIHByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2Vk Ci0gIyBkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSAgICAgICAgcHJpdmF0ZV9DYW1lbGxpYV9zZXRf a2V5Ci0gCi0gI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL21fZHNz LmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL21fZHNzLmMKLS0tLSBvcGVuc3NsLTEu MC4yYy9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcwkyMDE1LTA2LTEyIDE2OjUxOjIxLjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvbV9kc3MuYwkyMDE1LTA2LTE1 IDE3OjMwOjAwLjAwNDI4Mzg5MSArMDIwMAotQEAgLTg2LDcgKzg2LDcgQEAgc3RhdGljIGNvbnN0 IEVWUF9NRCBkc2FfbWQgPSB7Ci0gICAgIE5JRF9kc2FXaXRoU0hBLAotICAgICBOSURfZHNhV2l0 aFNIQSwKLSAgICAgU0hBX0RJR0VTVF9MRU5HVEgsCi0tICAgIEVWUF9NRF9GTEFHX1BLRVlfRElH RVNULAotKyAgICBFVlBfTURfRkxBR19QS0VZX0RJR0VTVCB8IEVWUF9NRF9GTEFHX0ZJUFMsCi0g ICAgIGluaXQsCi0gICAgIHVwZGF0ZSwKLSAgICAgZmluYWwsCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4yYy9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9t X2RzczEuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvbV9kc3MxLmMuZmlwcwkyMDE1 LTA2LTEyIDE2OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0 by9ldnAvbV9kc3MxLmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDQyODM4OTEgKzAyMDAKLUBAIC04 Nyw3ICs4Nyw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNzMV9tZCA9IHsKLSAgICAgTklEX2Rz YSwKLSAgICAgTklEX2RzYVdpdGhTSEExLAotICAgICBTSEFfRElHRVNUX0xFTkdUSCwKLS0gICAg RVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCi0rICAgIEVWUF9NRF9GTEFHX1BLRVlfRElHRVNUIHwg RVZQX01EX0ZMQUdfRklQUywKLSAgICAgaW5pdCwKLSAgICAgdXBkYXRlLAotICAgICBmaW5hbCwK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvbV9tZDIuYy5maXBzIG9wZW5zc2wt MS4wLjJjL2NyeXB0by9ldnAvbV9tZDIuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAv bV9tZDIuYy5maXBzCTIwMTUtMDYtMTIgMTY6NTE6MjEuMDAwMDAwMDAwICswMjAwCi0rKysgb3Bl bnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9tX21kMi5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDA1Mjgz OTEzICswMjAwCi1AQCAtNjgsNiArNjgsNyBAQAotICMgaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0g IyAgaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAjIGVuZGlmCi0rIyBpbmNsdWRlICJldnBfbG9j bC5oIgotIAotIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCi0gewotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmMvY3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzIG9wZW5zc2wtMS4wLjJjL2Ny eXB0by9ldnAvbV9zaGExLmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL21fc2hhMS5j LmZpcHMJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4yYy9jcnlwdG8vZXZwL21fc2hhMS5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDA1MjgzOTEzICsw MjAwCi1AQCAtODcsNyArODcsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTFfbWQgPSB7Ci0g ICAgIE5JRF9zaGExLAotICAgICBOSURfc2hhMVdpdGhSU0FFbmNyeXB0aW9uLAotICAgICBTSEFf RElHRVNUX0xFTkdUSCwKLS0gICAgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwg RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKyAgICBFVlBfTURfRkxBR19QS0VZX01FVEhP RF9TSUdOQVRVUkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQgfAotKyAgICAgICAgRVZQ X01EX0ZMQUdfRklQUywKLSAgICAgaW5pdCwKLSAgICAgdXBkYXRlLAotICAgICBmaW5hbCwKLUBA IC0xMzQsNyArMTM1LDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEyMjRfbWQgPSB7Ci0gICAg IE5JRF9zaGEyMjQsCi0gICAgIE5JRF9zaGEyMjRXaXRoUlNBRW5jcnlwdGlvbiwKLSAgICAgU0hB MjI0X0RJR0VTVF9MRU5HVEgsCi0tICAgIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVS RSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsgICAgRVZQX01EX0ZMQUdfUEtFWV9N RVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UIHwKLSsgICAgICAg IEVWUF9NRF9GTEFHX0ZJUFMsCi0gICAgIGluaXQyMjQsCi0gICAgIHVwZGF0ZTI1NiwKLSAgICAg ZmluYWwyNTYsCi1AQCAtMTU0LDcgKzE1Niw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjU2 X21kID0gewotICAgICBOSURfc2hhMjU2LAotICAgICBOSURfc2hhMjU2V2l0aFJTQUVuY3J5cHRp b24sCi0gICAgIFNIQTI1Nl9ESUdFU1RfTEVOR1RILAotLSAgICBFVlBfTURfRkxBR19QS0VZX01F VEhPRF9TSUdOQVRVUkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rICAgIEVWUF9N RF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VO VCB8Ci0rICAgICAgICBFVlBfTURfRkxBR19GSVBTLAotICAgICBpbml0MjU2LAotICAgICB1cGRh dGUyNTYsCi0gICAgIGZpbmFsMjU2LAotQEAgLTE5Nyw3ICsyMDAsOCBAQCBzdGF0aWMgY29uc3Qg RVZQX01EIHNoYTM4NF9tZCA9IHsKLSAgICAgTklEX3NoYTM4NCwKLSAgICAgTklEX3NoYTM4NFdp dGhSU0FFbmNyeXB0aW9uLAotICAgICBTSEEzODRfRElHRVNUX0xFTkdUSCwKLS0gICAgRVZQX01E X0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5U LAotKyAgICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUgfCBFVlBfTURfRkxBR19E SUdBTEdJRF9BQlNFTlQgfAotKyAgICAgICAgRVZQX01EX0ZMQUdfRklQUywKLSAgICAgaW5pdDM4 NCwKLSAgICAgdXBkYXRlNTEyLAotICAgICBmaW5hbDUxMiwKLUBAIC0yMTcsNyArMjIxLDggQEAg c3RhdGljIGNvbnN0IEVWUF9NRCBzaGE1MTJfbWQgPSB7Ci0gICAgIE5JRF9zaGE1MTIsCi0gICAg IE5JRF9zaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiwKLSAgICAgU0hBNTEyX0RJR0VTVF9MRU5HVEgs Ci0tICAgIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJ R0FMR0lEX0FCU0VOVCwKLSsgICAgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwg RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UIHwKLSsgICAgICAgIEVWUF9NRF9GTEFHX0ZJUFMs Ci0gICAgIGluaXQ1MTIsCi0gICAgIHVwZGF0ZTUxMiwKLSAgICAgZmluYWw1MTIsCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMmMv Y3J5cHRvL2V2cC9wX3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9ldnAvcF9zaWdu LmMuZmlwcwkyMDE1LTA2LTEyIDE2OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjJjL2NyeXB0by9ldnAvcF9zaWduLmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDUyODM5MTMg KzAyMDAKLUBAIC02MSw2ICs2MSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2lu Y2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAKLSAjaWZkZWYgdW5kZWYKLSB2b2lkIEVWUF9TaWdu SW5pdChFVlBfTURfQ1RYICpjdHgsIEVWUF9NRCAqdHlwZSkKLUBAIC0xMDEsNiArMTAyLDIyIEBA IGludCBFVlBfU2lnbkZpbmFsKEVWUF9NRF9DVFggKmN0eCwgdW5zaWcKLSAgICAgICAgICAgICBn b3RvIGVycjsKLSAgICAgICAgIGlmIChFVlBfUEtFWV9DVFhfc2V0X3NpZ25hdHVyZV9tZChwa2N0 eCwgY3R4LT5kaWdlc3QpIDw9IDApCi0gICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICBp ZiAoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSkKLSsgICAgICAgICAgICBp ZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1g5MzFfUEFERElORykg PD0gMCkKLSsgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICBpZiAoY3R4LT5mbGFn cyAmIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTKSB7Ci0rICAgICAgICAgICAgaW50IHNhbHRsZW47 Ci0rICAgICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJT QV9QS0NTMV9QU1NfUEFERElORykgPD0KLSsgICAgICAgICAgICAgICAgMCkKLSsgICAgICAgICAg ICAgICAgZ290byBlcnI7Ci0rICAgICAgICAgICAgc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFH X1BTU19TQUxUKGN0eCk7Ci0rICAgICAgICAgICAgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9G TEFHX1BTU19NRExFTikKLSsgICAgICAgICAgICAgICAgc2FsdGxlbiA9IC0xOwotKyAgICAgICAg ICAgIGVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQotKyAgICAg ICAgICAgICAgICBzYWx0bGVuID0gLTI7Ci0rICAgICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9z ZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQotKyAgICAgICAgICAgICAg ICBnb3RvIGVycjsKLSsgICAgICAgIH0KLSAgICAgICAgIGlmIChFVlBfUEtFWV9zaWduKHBrY3R4 LCBzaWdyZXQsICZzbHRtcCwgbSwgbV9sZW4pIDw9IDApCi0gICAgICAgICAgICAgZ290byBlcnI7 Ci0gICAgICAgICAqc2lnbGVuID0gc2x0bXA7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlw dG8vZXZwL3BfdmVyaWZ5LmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL3BfdmVyaWZ5 LmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcwkyMDE1LTA2 LTEyIDE2OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9l dnAvcF92ZXJpZnkuYwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAwNTI4MzkxMyArMDIwMAotQEAgLTYx LDYgKzYxLDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSAjaW5jbHVkZSA8b3BlbnNz bC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL3JzYS5oPgotIAotIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01EX0NUWCAqY3R4LCBjb25z dCB1bnNpZ25lZCBjaGFyICpzaWdidWYsCi0gICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgc2lnbGVuLCBFVlBfUEtFWSAqcGtleSkKLUBAIC04Nyw2ICs4OCwyMiBAQCBpbnQgRVZQX1Zl cmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29uCi0gICAgICAgICAgICAgZ290byBlcnI7Ci0g ICAgICAgICBpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGln ZXN0KSA8PSAwKQotICAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgaWYgKGN0eC0+Zmxh Z3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCi0rICAgICAgICAgICAgaWYgKEVWUF9QS0VZ X0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCi0rICAg ICAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BTUykgewotKyAgICAgICAgICAgIGludCBzYWx0bGVuOwotKyAgICAgICAg ICAgIGlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNT X1BBRERJTkcpIDw9Ci0rICAgICAgICAgICAgICAgIDApCi0rICAgICAgICAgICAgICAgIGdvdG8g ZXJyOwotKyAgICAgICAgICAgIHNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChj dHgpOwotKyAgICAgICAgICAgIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURM RU4pCi0rICAgICAgICAgICAgICAgIHNhbHRsZW4gPSAtMTsKLSsgICAgICAgICAgICBlbHNlIGlm IChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKLSsgICAgICAgICAgICAgICAg c2FsdGxlbiA9IC0yOwotKyAgICAgICAgICAgIGlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nf c2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKLSsgICAgICAgICAgICAgICAgZ290byBlcnI7 Ci0rICAgICAgICB9Ci0gICAgICAgICBpID0gRVZQX1BLRVlfdmVyaWZ5KHBrY3R4LCBzaWdidWYs IHNpZ2xlbiwgbSwgbV9sZW4pOwotICBlcnI6Ci0gICAgICAgICBFVlBfUEtFWV9DVFhfZnJlZShw a2N0eCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxm dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3Qu YwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMuZmlw cwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAwNTI4MzkxMyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJj L2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDUy ODM5MTMgKzAyMDAKLUBAIC0wLDAgKzEsMzY1IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5 cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu Ci0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0r ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0r ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICov Ci0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgot KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0 aWMgY29uc3Qgc3RydWN0IHsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdOwotKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFsxNl07Ci0rICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgY2lwaGVydGV4dFsxNl07Ci0rfSB0ZXN0c1tdID0gewotKyAgICB7Ci0rICAgICAgICB7 Ci0rICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3 LAotKyAgICAgICAgICAgICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAw eDBFLCAweDBGfSwgewotKyAgICAgICAgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1 NSwgMHg2NiwgMHg3NywKLSsgICAgICAgICAgICAgICAgMHg4OCwgMHg5OSwgMHhBQSwgMHhCQiwg MHhDQywgMHhERCwgMHhFRSwgMHhGRn0sIHsKLSsweDY5LCAweEM0LCAweEUwLCAweEQ4LCAweDZB LCAweDdCLCAweDA0LCAweDMwLAotKyAgICAgICAgICAgICAgICAweEQ4LCAweENELCAweEI3LCAw eDgwLCAweDcwLCAweEI0LCAweEM1LCAweDVBfSx9LH07Ci0rCi0rc3RhdGljIGludCBjb3JydXB0 X2FlczsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9hZXMoKQotK3sKLSsgICAgY29ycnVwdF9hZXMg PSAxOwotK30KLSsKLStpbnQgRklQU19zZWxmdGVzdF9hZXMoKQotK3sKLSsgICAgaW50IG47Ci0r ICAgIGludCByZXQgPSAwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBI RVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGZvciAobiA9IDA7IG4gPCAxOyArK24pIHsKLSsg ICAgICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsKLSsgICAgICAgIG1lbWNweShrZXksIHRl c3RzW25dLmtleSwgc2l6ZW9mKGtleSkpOwotKyAgICAgICAgaWYgKGNvcnJ1cHRfYWVzKQotKyAg ICAgICAgICAgIGtleVswXSsrOwotKyAgICAgICAgaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwg RVZQX2Flc18xMjhfZWNiKCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIE5V TEwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c1tuXS5wbGFpbnRleHQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c1tuXS5jaXBoZXJ0ZXh0LCAxNikgPD0g MCkKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKyAgICByZXQgPSAxOwotKyBlcnI6 Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rICAgIGlmIChyZXQgPT0gMCkK LSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTLCBGSVBTX1JfU0VMRlRF U1RfRkFJTEVEKTsKLSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rCi0rLyogQUVTLUNDTSB0ZXN0IGRh dGEgZnJvbSBOSVNUIHB1YmxpYyB0ZXN0IHZlY3RvcnMgKi8KLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBjY21fa2V5W10gPSB7Ci0rICAgIDB4Y2UsIDB4YjAsIDB4MDksIDB4YWUsIDB4 YTQsIDB4NDUsIDB4NDQsIDB4NTEsIDB4ZmUsIDB4YWQsIDB4ZjAsIDB4ZTYsCi0rICAgIDB4YjMs IDB4NmYsIDB4NDUsIDB4NTUsIDB4NWQsIDB4ZDAsIDB4NDcsIDB4MjMsIDB4YmEsIDB4YTQsIDB4 NDgsIDB4ZTgKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9ub25jZVtd ID0gewotKyAgICAweDc2LCAweDQwLCAweDQzLCAweGM0LCAweDk0LCAweDYwLCAweGI3Ci0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fYWRhdGFbXSA9IHsKLSsgICAgMHg2 ZSwgMHg4MCwgMHhkZCwgMHg3ZiwgMHgxYiwgMHhhZCwgMHhmMywgMHhhMSwgMHhjOSwgMHhhYiwg MHgyNSwgMHhjNywKLSsgICAgMHg1ZiwgMHgxMCwgMHhiZCwgMHhlNywgMHg4YywgMHgyMywgMHhm YSwgMHgwZSwgMHhiOCwgMHhmOSwgMHhhYSwgMHhhNSwKLSsgICAgMHgzYSwgMHhkZSwgMHhmYiwg MHhmNCwgMHhjYiwgMHhmNywgMHg4ZiwgMHhlNAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgY2NtX3B0W10gPSB7Ci0rICAgIDB4YzgsIDB4ZDIsIDB4NzUsIDB4ZjksIDB4MTks IDB4ZTEsIDB4N2QsIDB4N2YsIDB4ZTYsIDB4OWMsIDB4MmEsIDB4MWYsCi0rICAgIDB4NTgsIDB4 OTMsIDB4OWQsIDB4ZmUsIDB4NGQsIDB4NDAsIDB4MzcsIDB4OTEsIDB4YjUsIDB4ZGYsIDB4MTMs IDB4MTAKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9jdFtdID0gewot KyAgICAweDhhLCAweDBmLCAweDNkLCAweDgyLCAweDI5LCAweGU0LCAweDhlLCAweDc0LCAweDg3 LCAweGZkLCAweDk1LCAweGEyLAotKyAgICAweDhhLCAweGQzLCAweDkyLCAweGM4LCAweDBiLCAw eDM2LCAweDgxLCAweGQ0LCAweGZiLCAweGM3LCAweGJiLCAweGZkCi0rfTsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBjY21fdGFnW10gPSB7Ci0rICAgIDB4MmQsIDB4ZDYsIDB4ZWYs IDB4MWMsIDB4NDUsIDB4ZDQsIDB4Y2MsIDB4YjcsIDB4MjMsIDB4ZGMsIDB4MDcsIDB4NDQsCi0r ICAgIDB4MTQsIDB4ZGIsIDB4NTAsIDB4NmQKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Fl c19jY20odm9pZCkKLSt7Ci0rICAgIGludCByZXQgPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIG91 dFsxMjhdLCB0YWdbMTZdOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBI RVJfQ1RYX2luaXQoJmN0eCk7Ci0rICAgIG1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKLSsg ICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzE5Ml9jY20oKSwgTlVMTCwg TlVMTCwgTlVMTCwgMSkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfQ0lQSEVS X0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4sCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YoY2NtX25vbmNlKSwgTlVMTCkpCi0rICAgICAgICBnb3RvIGVy cjsKLSsgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRf VEFHLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNjbV90YWcpLCBOVUxM KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgs IE5VTEwsIE5VTEwsIGNjbV9rZXksIGNjbV9ub25jZSwgMSkpCi0rICAgICAgICBnb3RvIGVycjsK LSsgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgTlVMTCwgc2l6ZW9mKGNjbV9wdCkpICE9 IHNpemVvZihjY21fcHQpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVy KCZjdHgsIE5VTEwsIGNjbV9hZGF0YSwgc2l6ZW9mKGNjbV9hZGF0YSkpIDwgMCkKLSsgICAgICAg IGdvdG8gZXJyOwotKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBvdXQsIGNjbV9wdCwgc2l6ZW9m KGNjbV9wdCkpICE9IHNpemVvZihjY21fY3QpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAg IGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fR0VUX1RBRywgMTYs IHRhZykpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKG1lbWNtcCh0YWcsIGNjbV90YWcs IHNpemVvZihjY21fdGFnKSkKLSsgICAgICAgIHx8IG1lbWNtcChvdXQsIGNjbV9jdCwgc2l6ZW9m KGNjbV9jdCkpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIG1lbXNldChvdXQsIDAsIHNp emVvZihvdXQpKTsKLSsKLSsgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVz XzE5Ml9jY20oKSwgTlVMTCwgTlVMTCwgTlVMTCwgMCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsg ICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0NDTV9TRVRfSVZMRU4s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2NtX25vbmNlKSwgTlVMTCkp Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgs IEVWUF9DVFJMX0NDTV9TRVRfVEFHLCAxNiwgdGFnKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAg ICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIE5VTEwsIE5VTEwsIGNjbV9rZXksIGNjbV9u b25jZSwgMCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwg TlVMTCwgTlVMTCwgc2l6ZW9mKGNjbV9jdCkpICE9IHNpemVvZihjY21fY3QpKQotKyAgICAgICAg Z290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIGNjbV9hZGF0YSwgc2l6 ZW9mKGNjbV9hZGF0YSkpIDwgMCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoRVZQX0Np cGhlcigmY3R4LCBvdXQsIGNjbV9jdCwgc2l6ZW9mKGNjbV9jdCkpICE9IHNpemVvZihjY21fcHQp KQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGlmIChtZW1jbXAob3V0LCBjY21fcHQsIHNp emVvZihjY21fcHQpKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICByZXQgPSAxOwotKwot KyBlcnI6Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCi0rICAgIGlmIChy ZXQgPT0gMCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNfQ0NN LCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9IGVs c2UKLSsgICAgICAgIHJldHVybiByZXQ7Ci0rCi0rfQotKwotKy8qIEFFUy1HQ00gdGVzdCBkYXRh IGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCi0rCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgZ2NtX2tleVtdID0gewotKyAgICAweGVlLCAweGJjLCAweDFmLCAweDU3LCAweDQ4 LCAweDdmLCAweDUxLCAweDkyLCAweDFjLCAweDA0LCAweDY1LCAweDY2LAotKyAgICAweDVmLCAw eDhhLCAweGU2LCAweGQxLCAweDY1LCAweDhiLCAweGIyLCAweDZkLCAweGU2LCAweGY4LCAweGEw LCAweDY5LAotKyAgICAweGEzLCAweDUyLCAweDAyLCAweDkzLCAweGE1LCAweDcyLCAweDA3LCAw eDhmCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21faXZbXSA9IHsKLSsg ICAgMHg5OSwgMHhhYSwgMHgzZSwgMHg2OCwgMHhlZCwgMHg4MSwgMHg3MywgMHhhMCwgMHhlZSwg MHhkMCwgMHg2NiwgMHg4NAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2Nt X3B0W10gPSB7Ci0rICAgIDB4ZjUsIDB4NmUsIDB4ODcsIDB4MDUsIDB4NWIsIDB4YzMsIDB4MmQs IDB4MGUsIDB4ZWIsIDB4MzEsIDB4YjIsIDB4ZWEsCi0rICAgIDB4Y2MsIDB4MmIsIDB4ZjIsIDB4 YTUKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9hYWRbXSA9IHsKLSsg ICAgMHg0ZCwgMHgyMywgMHhjMywgMHhjZSwgMHhjMywgMHgzNCwgMHhiNCwgMHg5YiwgMHhkYiwg MHgzNywgMHgwYywgMHg0MywKLSsgICAgMHg3ZiwgMHhlYywgMHg3OCwgMHhkZQotK307Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2N0W10gPSB7Ci0rICAgIDB4ZjcsIDB4MjYs IDB4NDQsIDB4MTMsIDB4YTgsIDB4NGMsIDB4MGUsIDB4N2MsIDB4ZDUsIDB4MzYsIDB4ODYsIDB4 N2UsCi0rICAgIDB4YjksIDB4ZjIsIDB4MTcsIDB4MzYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGdjbV90YWdbXSA9IHsKLSsgICAgMHg2NywgMHhiYSwgMHgwNSwgMHgxMCwg MHgyNiwgMHgyYSwgMHhlNCwgMHg4NywgMHhkNywgMHgzNywgMHhlZSwgMHg2MiwKLSsgICAgMHg5 OCwgMHhmNywgMHg3ZSwgMHgwYwotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVzX2djbSh2 b2lkKQotK3sKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgb3V0WzEyOF0s IHRhZ1sxNl07Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhf aW5pdCgmY3R4KTsKLSsgICAgbWVtc2V0KG91dCwgMCwgc2l6ZW9mKG91dCkpOwotKyAgICBtZW1z ZXQodGFnLCAwLCBzaXplb2YodGFnKSk7Ci0rICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0 eCwgRVZQX2Flc18yNTZfZ2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDEpKQotKyAgICAgICAgZ290 byBlcnI7Ci0rICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9HQ01f U0VUX0lWTEVOLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGdjbV9pdiks IE5VTEwpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgo JmN0eCwgTlVMTCwgTlVMTCwgZ2NtX2tleSwgZ2NtX2l2LCAxKSkKLSsgICAgICAgIGdvdG8gZXJy OwotKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBnY21fYWFkLCBzaXplb2YoZ2NtX2Fh ZCkpIDwgMCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBv dXQsIGdjbV9wdCwgc2l6ZW9mKGdjbV9wdCkpICE9IHNpemVvZihnY21fY3QpKQotKyAgICAgICAg Z290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIDApIDwgMCkK LSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0 eCwgRVZQX0NUUkxfR0NNX0dFVF9UQUcsIDE2LCB0YWcpKQotKyAgICAgICAgZ290byBlcnI7Ci0r Ci0rICAgIGlmIChtZW1jbXAodGFnLCBnY21fdGFnLCAxNikgfHwgbWVtY21wKG91dCwgZ2NtX2N0 LCAxNikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgbWVtc2V0KG91dCwgMCwgc2l6ZW9m KG91dCkpOwotKwotKyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMjU2 X2djbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAwKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBp ZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihnY21faXYpLCBOVUxMKSkKLSsgICAg ICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NU UkxfR0NNX1NFVF9UQUcsIDE2LCB0YWcpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICgh RVZQX0NpcGhlckluaXRfZXgoJmN0eCwgTlVMTCwgTlVMTCwgZ2NtX2tleSwgZ2NtX2l2LCAwKSkK LSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBnY21f YWFkLCBzaXplb2YoZ2NtX2FhZCkpIDwgMCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAo RVZQX0NpcGhlcigmY3R4LCBvdXQsIGdjbV9jdCwgc2l6ZW9mKGdjbV9jdCkpICE9IHNpemVvZihn Y21fcHQpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKCZjdHgsIE5V TEwsIE5VTEwsIDApIDwgMCkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAobWVtY21w KG91dCwgZ2NtX3B0LCAxNikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgcmV0ID0gMTsK LSsKLSsgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKwotKyAgICBp ZiAocmV0ID09IDApIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVT X0dDTSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAg fSBlbHNlCi0rICAgICAgICByZXR1cm4gcmV0OwotKwotK30KLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBYVFNfMTI4X2tleVtdID0gewotKyAgICAweGExLCAweGI5LCAweDBjLCAweGJh LCAweDNmLCAweDA2LCAweGFjLCAweDM1LCAweDNiLCAweDJjLCAweDM0LCAweDM4LAotKyAgICAw eDc2LCAweDA4LCAweDE3LCAweDYyLCAweDA5LCAweDA5LCAweDIzLCAweDAyLCAweDZlLCAweDkx LCAweDc3LCAweDE4LAotKyAgICAweDE1LCAweGYyLCAweDlkLCAweGFiLCAweDAxLCAweDkzLCAw eDJmLCAweDJmCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2lb XSA9IHsKLSsgICAgMHg0ZiwgMHhhZSwgMHhmNywgMHgxMSwgMHg3YywgMHhkYSwgMHg1OSwgMHhj NiwgMHg2ZSwgMHg0YiwgMHg5MiwgMHgwMSwKLSsgICAgMHgzZSwgMHg3NiwgMHg4YSwgMHhkNQot K307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9wdFtdID0gewotKyAg ICAweGViLCAweGFiLCAweGNlLCAweDk1LCAweGIxLCAweDRkLCAweDNjLCAweDhkLCAweDZmLCAw eGIzLCAweDUwLCAweDM5LAotKyAgICAweDA3LCAweDkwLCAweDMxLCAweDFjCi0rfTsKLSsKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMTI4X2N0W10gPSB7Ci0rICAgIDB4NzcsIDB4 OGEsIDB4ZTgsIDB4YjQsIDB4M2MsIDB4YjksIDB4OGQsIDB4NWEsIDB4ODIsIDB4NTAsIDB4ODEs IDB4ZDUsCi0rICAgIDB4YmUsIDB4NDcsIDB4MWMsIDB4NjMKLSt9OwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfa2V5W10gPSB7Ci0rICAgIDB4MWUsIDB4YTYsIDB4NjEs IDB4YzUsIDB4OGQsIDB4OTQsIDB4M2EsIDB4MGUsIDB4NDgsIDB4MDEsIDB4ZTQsIDB4MmYsCi0r ICAgIDB4NGIsIDB4MDksIDB4NDcsIDB4MTQsIDB4OWUsIDB4N2YsIDB4OWYsIDB4OGUsIDB4M2Us IDB4NjgsIDB4ZDAsIDB4YzcsCi0rICAgIDB4NTAsIDB4NTIsIDB4MTAsIDB4YmQsIDB4MzEsIDB4 MWEsIDB4MGUsIDB4N2MsIDB4ZDYsIDB4ZTEsIDB4M2YsIDB4ZmQsCi0rICAgIDB4ZjIsIDB4NDEs IDB4OGQsIDB4OGQsIDB4MTksIDB4MTEsIDB4YzAsIDB4MDQsIDB4Y2QsIDB4YTUsIDB4OGQsIDB4 YTMsCi0rICAgIDB4ZDYsIDB4MTksIDB4YjcsIDB4ZTIsIDB4YjksIDB4MTQsIDB4MWUsIDB4NTgs IDB4MzEsIDB4OGUsIDB4ZWEsIDB4MzksCi0rICAgIDB4MmMsIDB4ZjQsIDB4MWIsIDB4MDgKLSt9 OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18yNTZfaVtdID0gewotKyAgICAw eGFkLCAweGY4LCAweGQ5LCAweDI2LCAweDI3LCAweDQ2LCAweDRhLCAweGQyLCAweGYwLCAweDQy LCAweDhlLCAweDg0LAotKyAgICAweGE5LCAweGY4LCAweDc1LCAweDY0Ci0rfTsKLSsKLStzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X3B0W10gPSB7Ci0rICAgIDB4MmUsIDB4ZWQs IDB4ZWEsIDB4NTIsIDB4Y2QsIDB4ODIsIDB4MTUsIDB4ZTEsIDB4YWMsIDB4YzYsIDB4NDcsIDB4 ZTgsCi0rICAgIDB4MTAsIDB4YmIsIDB4YzMsIDB4NjQsIDB4MmUsIDB4ODcsIDB4MjgsIDB4N2Ys IDB4OGQsIDB4MmUsIDB4NTcsIDB4ZTMsCi0rICAgIDB4NmMsIDB4MGEsIDB4MjQsIDB4ZmIsIDB4 YzEsIDB4MmEsIDB4MjAsIDB4MmUKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IFhUU18yNTZfY3RbXSA9IHsKLSsgICAgMHhjYiwgMHhhYSwgMHhkMCwgMHhlMiwgMHhmNiwgMHhj ZSwgMHhhMywgMHhmNSwgMHgwYiwgMHgzNywgMHhmOSwgMHgzNCwKLSsgICAgMHhkNCwgMHg2YSwg MHg5YiwgMHgxMywgMHgwYiwgMHg5ZCwgMHg1NCwgMHhmMCwgMHg3ZSwgMHgzNCwgMHhmMywgMHg2 YSwKLSsgICAgMHhmNywgMHg5MywgMHhlOCwgMHg2ZiwgMHg3MywgMHhjNiwgMHhkNywgMHhkYgot K307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVzX3h0cygpCi0rewotKyAgICBpbnQgcmV0ID0g MTsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZj dHgpOwotKwotKyAgICBpZiAoZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfYWVzXzEyOF94dHMo KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgWFRTXzEyOF9rZXksIFhUU18xMjhfaSwgWFRT XzEyOF9wdCwgWFRTXzEyOF9jdCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFhU U18xMjhfcHQpKSA8PSAwKQotKyAgICAgICAgcmV0ID0gMDsKLSsKLSsgICAgaWYgKGZpcHNfY2lw aGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18yNTZfeHRzKCksCi0rICAgICAgICAgICAgICAgICAgICAg ICAgIFhUU18yNTZfa2V5LCBYVFNfMjU2X2ksIFhUU18yNTZfcHQsIFhUU18yNTZfY3QsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihYVFNfMjU2X3B0KSkgPD0gMCkKLSsgICAgICAg IHJldCA9IDA7Ci0rCi0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rICAgIGlm IChyZXQgPT0gMCkKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX1hU UywgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwotKyNl bmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwcy5jLmZpcHMgb3Bl bnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwcy5jCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRv L2ZpcHMvZmlwcy5jLmZpcHMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDYyODM5MzYgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzLmMJMjAxNS0wNi0xNSAxNzozMDowMC4w MDYyODM5MzYgKzAyMDAKLUBAIC0wLDAgKzEsNDgzIEBACi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3Ns Lm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z Ci0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0r ICovCi0rCi0rI2RlZmluZSBfR05VX1NPVVJDRQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFj Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNp bmNsdWRlIDxsaW1pdHMuaD4KLSsjaW5jbHVkZSA8ZGxmY24uaD4KLSsjaW5jbHVkZSA8c3RkaW8u aD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKwotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotKyMg aWZuZGVmIFBBVEhfTUFYCi0rIyAgZGVmaW5lIFBBVEhfTUFYIDEwMjQKLSsjIGVuZGlmCi0rCi0r c3RhdGljIGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOwotK3N0YXRpYyBpbnQgZmlwc19tb2Rl ID0gMDsKLStzdGF0aWMgaW50IGZpcHNfc3RhcnRlZCA9IDA7Ci0rCi0rc3RhdGljIGludCBmaXBz X2lzX293bmluZ190aHJlYWQodm9pZCk7Ci0rc3RhdGljIGludCBmaXBzX3NldF9vd25pbmdfdGhy ZWFkKHZvaWQpOwotK3N0YXRpYyBpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpOwot KwotKyMgZGVmaW5lIGZpcHNfd19sb2NrKCkgICBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJ UFMpCi0rIyBkZWZpbmUgZmlwc193X3VubG9jaygpIENSWVBUT193X3VubG9jayhDUllQVE9fTE9D S19GSVBTKQotKyMgZGVmaW5lIGZpcHNfcl9sb2NrKCkgICBDUllQVE9fcl9sb2NrKENSWVBUT19M T0NLX0ZJUFMpCi0rIyBkZWZpbmUgZmlwc19yX3VubG9jaygpIENSWVBUT19yX3VubG9jayhDUllQ VE9fTE9DS19GSVBTKQotKwotK3N0YXRpYyB2b2lkIGZpcHNfc2V0X21vZGUoaW50IG9ub2ZmKQot K3sKLSsgICAgaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsK LSsgICAgaWYgKGZpcHNfc3RhcnRlZCkgewotKyAgICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQot KyAgICAgICAgICAgIGZpcHNfd19sb2NrKCk7Ci0rICAgICAgICBmaXBzX21vZGUgPSBvbm9mZjsK LSsgICAgICAgIGlmICghb3duaW5nX3RocmVhZCkKLSsgICAgICAgICAgICBmaXBzX3dfdW5sb2Nr KCk7Ci0rICAgIH0KLSt9Ci0rCi0raW50IEZJUFNfbW9kdWxlX21vZGUodm9pZCkKLSt7Ci0rICAg IGludCByZXQgPSAwOwotKyAgICBpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3Ro cmVhZCgpOwotKwotKyAgICBpZiAoZmlwc19zdGFydGVkKSB7Ci0rICAgICAgICBpZiAoIW93bmlu Z190aHJlYWQpCi0rICAgICAgICAgICAgZmlwc19yX2xvY2soKTsKLSsgICAgICAgIHJldCA9IGZp cHNfbW9kZTsKLSsgICAgICAgIGlmICghb3duaW5nX3RocmVhZCkKLSsgICAgICAgICAgICBmaXBz X3JfdW5sb2NrKCk7Ci0rICAgIH0KLSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rCi0raW50IEZJUFNf c2VsZnRlc3RfZmFpbGVkKHZvaWQpCi0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgaWYgKGZp cHNfc3RhcnRlZCkgewotKyAgICAgICAgaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmlu Z190aHJlYWQoKTsKLSsKLSsgICAgICAgIGlmICghb3duaW5nX3RocmVhZCkKLSsgICAgICAgICAg ICBmaXBzX3JfbG9jaygpOwotKyAgICAgICAgcmV0ID0gZmlwc19zZWxmdGVzdF9mYWlsOwotKyAg ICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQotKyAgICAgICAgICAgIGZpcHNfcl91bmxvY2soKTsK LSsgICAgfQotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLSsvKiBTZWxmdGVzdCBmYWlsdXJlIGZh dGFsIGV4aXQgcm91dGluZS4gVGhpcyB3aWxsIGJlIGNhbGxlZAotKyAqIGR1cmluZyAqYW55KiBj cnlwdG9ncmFwaGljIG9wZXJhdGlvbi4gSXQgaGFzIHRoZSBtaW5pbXVtCi0rICogb3ZlcmhlYWQg cG9zc2libGUgdG8gYXZvaWQgdG9vIGJpZyBhIHBlcmZvcm1hbmNlIGhpdC4KLSsgKi8KLSsKLSt2 b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2sodm9pZCkKLSt7Ci0rICAgIGlmIChmaXBzX3NlbGZ0ZXN0 X2ZhaWwpIHsKLSsgICAgICAgIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCAiRkFUQUwg RklQUyBTRUxGVEVTVCBGQUlMVVJFIik7Ci0rICAgIH0KLSt9Ci0rCi0rdm9pZCBmaXBzX3NldF9z ZWxmdGVzdF9mYWlsKHZvaWQpCi0rewotKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotK30K LSsKLSsvKiB3ZSBpbXBsZW1lbnQgd2hhdCBsaWJmaXBzY2hlY2sgZG9lcyBvdXJzZWx2ZXMgKi8K LSsKLStzdGF0aWMgaW50Ci0rZ2V0X2xpYnJhcnlfcGF0aChjb25zdCBjaGFyICpsaWJuYW1lLCBj b25zdCBjaGFyICpzeW1ib2xuYW1lLCBjaGFyICpwYXRoLAotKyAgICAgICAgICAgICAgICAgc2l6 ZV90IHBhdGhsZW4pCi0rewotKyAgICBEbF9pbmZvIGluZm87Ci0rICAgIHZvaWQgKmRsLCAqc3lt OwotKyAgICBpbnQgcnYgPSAtMTsKLSsKLSsgICAgZGwgPSBkbG9wZW4obGlibmFtZSwgUlRMRF9M QVpZKTsKLSsgICAgaWYgKGRsID09IE5VTEwpIHsKLSsgICAgICAgIHJldHVybiAtMTsKLSsgICAg fQotKwotKyAgICBzeW0gPSBkbHN5bShkbCwgc3ltYm9sbmFtZSk7Ci0rCi0rICAgIGlmIChzeW0g IT0gTlVMTCAmJiBkbGFkZHIoc3ltLCAmaW5mbykpIHsKLSsgICAgICAgIHN0cm5jcHkocGF0aCwg aW5mby5kbGlfZm5hbWUsIHBhdGhsZW4gLSAxKTsKLSsgICAgICAgIHBhdGhbcGF0aGxlbiAtIDFd ID0gJ1wwJzsKLSsgICAgICAgIHJ2ID0gMDsKLSsgICAgfQotKwotKyAgICBkbGNsb3NlKGRsKTsK LSsKLSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgY29uc3QgY2hhciBjb252W10gPSAi MDEyMzQ1Njc4OWFiY2RlZiI7Ci0rCi0rc3RhdGljIGNoYXIgKmJpbjJoZXgodm9pZCAqYnVmLCBz aXplX3QgbGVuKQotK3sKLSsgICAgY2hhciAqaGV4LCAqcDsKLSsgICAgdW5zaWduZWQgY2hhciAq c3JjID0gYnVmOwotKwotKyAgICBoZXggPSBtYWxsb2MobGVuICogMiArIDEpOwotKyAgICBpZiAo aGV4ID09IE5VTEwpCi0rICAgICAgICByZXR1cm4gTlVMTDsKLSsKLSsgICAgcCA9IGhleDsKLSsK LSsgICAgd2hpbGUgKGxlbiA+IDApIHsKLSsgICAgICAgIHVuc2lnbmVkIGM7Ci0rCi0rICAgICAg ICBjID0gKnNyYzsKLSsgICAgICAgIHNyYysrOwotKwotKyAgICAgICAgKnAgPSBjb252W2MgPj4g NF07Ci0rICAgICAgICArK3A7Ci0rICAgICAgICAqcCA9IGNvbnZbYyAmIDB4MGZdOwotKyAgICAg ICAgKytwOwotKyAgICAgICAgLS1sZW47Ci0rICAgIH0KLSsgICAgKnAgPSAnXDAnOwotKyAgICBy ZXR1cm4gaGV4OwotK30KLSsKLSsjIGRlZmluZSBITUFDX1BSRUZJWCAiLiIKLSsjIGRlZmluZSBI TUFDX1NVRkZJWCAiLmhtYWMiCi0rIyBkZWZpbmUgUkVBRF9CVUZGRVJfTEVOR1RIIDE2Mzg0Ci0r Ci0rc3RhdGljIGNoYXIgKm1ha2VfaG1hY19wYXRoKGNvbnN0IGNoYXIgKm9yaWdwYXRoKQotK3sK LSsgICAgY2hhciAqcGF0aCwgKnA7Ci0rICAgIGNvbnN0IGNoYXIgKmZuOwotKwotKyAgICBwYXRo ID0KLSsgICAgICAgIG1hbGxvYyhzaXplb2YoSE1BQ19QUkVGSVgpICsgc2l6ZW9mKEhNQUNfU1VG RklYKSArIHN0cmxlbihvcmlncGF0aCkpOwotKyAgICBpZiAocGF0aCA9PSBOVUxMKSB7Ci0rICAg ICAgICByZXR1cm4gTlVMTDsKLSsgICAgfQotKwotKyAgICBmbiA9IHN0cnJjaHIob3JpZ3BhdGgs ICcvJyk7Ci0rICAgIGlmIChmbiA9PSBOVUxMKSB7Ci0rICAgICAgICBmbiA9IG9yaWdwYXRoOwot KyAgICB9IGVsc2UgewotKyAgICAgICAgKytmbjsKLSsgICAgfQotKwotKyAgICBzdHJuY3B5KHBh dGgsIG9yaWdwYXRoLCBmbiAtIG9yaWdwYXRoKTsKLSsgICAgcCA9IHBhdGggKyAoZm4gLSBvcmln cGF0aCk7Ci0rICAgIHAgPSBzdHBjcHkocCwgSE1BQ19QUkVGSVgpOwotKyAgICBwID0gc3RwY3B5 KHAsIGZuKTsKLSsgICAgcCA9IHN0cGNweShwLCBITUFDX1NVRkZJWCk7Ci0rCi0rICAgIHJldHVy biBwYXRoOwotK30KLSsKLStzdGF0aWMgY29uc3QgY2hhciBobWFja2V5W10gPSAib3Jib0RlSklU SVRlanNpcnBBRE9OaXZpcnBVa3ZhclAiOwotKwotK3N0YXRpYyBpbnQgY29tcHV0ZV9maWxlX2ht YWMoY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqKmJ1Ziwgc2l6ZV90ICpobWFjbGVuKQotK3sKLSsg ICAgRklMRSAqZiA9IE5VTEw7Ci0rICAgIGludCBydiA9IC0xOwotKyAgICB1bnNpZ25lZCBjaGFy IHJidWZbUkVBRF9CVUZGRVJfTEVOR1RIXTsKLSsgICAgc2l6ZV90IGxlbjsKLSsgICAgdW5zaWdu ZWQgaW50IGhsZW47Ci0rICAgIEhNQUNfQ1RYIGM7Ci0rCi0rICAgIEhNQUNfQ1RYX2luaXQoJmMp OwotKwotKyAgICBmID0gZm9wZW4ocGF0aCwgInIiKTsKLSsKLSsgICAgaWYgKGYgPT0gTlVMTCkg ewotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsKLSsgICAgSE1BQ19Jbml0KCZjLCBobWFj a2V5LCBzaXplb2YoaG1hY2tleSkgLSAxLCBFVlBfc2hhMjU2KCkpOwotKwotKyAgICB3aGlsZSAo KGxlbiA9IGZyZWFkKHJidWYsIDEsIHNpemVvZihyYnVmKSwgZikpICE9IDApIHsKLSsgICAgICAg IEhNQUNfVXBkYXRlKCZjLCByYnVmLCBsZW4pOwotKyAgICB9Ci0rCi0rICAgIGxlbiA9IHNpemVv ZihyYnVmKTsKLSsgICAgLyogcmV1c2UgcmJ1ZiBmb3IgaG1hYyAqLwotKyAgICBITUFDX0ZpbmFs KCZjLCByYnVmLCAmaGxlbik7Ci0rCi0rICAgICpidWYgPSBtYWxsb2MoaGxlbik7Ci0rICAgIGlm ICgqYnVmID09IE5VTEwpIHsKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICB9Ci0rCi0rICAgICpo bWFjbGVuID0gaGxlbjsKLSsKLSsgICAgbWVtY3B5KCpidWYsIHJidWYsIGhsZW4pOwotKwotKyAg ICBydiA9IDA7Ci0rIGVuZDoKLSsgICAgSE1BQ19DVFhfY2xlYW51cCgmYyk7Ci0rCi0rICAgIGlm IChmKQotKyAgICAgICAgZmNsb3NlKGYpOwotKwotKyAgICByZXR1cm4gcnY7Ci0rfQotKwotK3N0 YXRpYyBpbnQgRklQU0NIRUNLX3ZlcmlmeShjb25zdCBjaGFyICpsaWJuYW1lLCBjb25zdCBjaGFy ICpzeW1ib2xuYW1lKQotK3sKLSsgICAgY2hhciBwYXRoW1BBVEhfTUFYICsgMV07Ci0rICAgIGlu dCBydjsKLSsgICAgRklMRSAqaGY7Ci0rICAgIGNoYXIgKmhtYWNwYXRoLCAqcDsKLSsgICAgY2hh ciAqaG1hYyA9IE5VTEw7Ci0rICAgIHNpemVfdCBuOwotKwotKyAgICBydiA9IGdldF9saWJyYXJ5 X3BhdGgobGlibmFtZSwgc3ltYm9sbmFtZSwgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKLSsKLSsgICAg aWYgKHJ2IDwgMCkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBobWFjcGF0aCA9IG1ha2Vf aG1hY19wYXRoKHBhdGgpOwotKyAgICBpZiAoaG1hY3BhdGggPT0gTlVMTCkKLSsgICAgICAgIHJl dHVybiAwOwotKwotKyAgICBoZiA9IGZvcGVuKGhtYWNwYXRoLCAiciIpOwotKyAgICBpZiAoaGYg PT0gTlVMTCkgewotKyAgICAgICAgZnJlZShobWFjcGF0aCk7Ci0rICAgICAgICByZXR1cm4gMDsK LSsgICAgfQotKwotKyAgICBpZiAoZ2V0bGluZSgmaG1hYywgJm4sIGhmKSA+IDApIHsKLSsgICAg ICAgIHZvaWQgKmJ1ZjsKLSsgICAgICAgIHNpemVfdCBobWFjbGVuOwotKyAgICAgICAgY2hhciAq aGV4OwotKwotKyAgICAgICAgaWYgKChwID0gc3RyY2hyKGhtYWMsICdcbicpKSAhPSBOVUxMKQot KyAgICAgICAgICAgICpwID0gJ1wwJzsKLSsKLSsgICAgICAgIGlmIChjb21wdXRlX2ZpbGVfaG1h YyhwYXRoLCAmYnVmLCAmaG1hY2xlbikgPCAwKSB7Ci0rICAgICAgICAgICAgcnYgPSAtNDsKLSsg ICAgICAgICAgICBnb3RvIGVuZDsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGlmICgoaGV4ID0g YmluMmhleChidWYsIGhtYWNsZW4pKSA9PSBOVUxMKSB7Ci0rICAgICAgICAgICAgZnJlZShidWYp OwotKyAgICAgICAgICAgIHJ2ID0gLTU7Ci0rICAgICAgICAgICAgZ290byBlbmQ7Ci0rICAgICAg ICB9Ci0rCi0rICAgICAgICBpZiAoc3RyY21wKGhleCwgaG1hYykgIT0gMCkgewotKyAgICAgICAg ICAgIHJ2ID0gLTE7Ci0rICAgICAgICB9Ci0rICAgICAgICBmcmVlKGJ1Zik7Ci0rICAgICAgICBm cmVlKGhleCk7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAgICBydiA9IC0xOwotKyAgICB9Ci0rCi0r IGVuZDoKLSsgICAgZnJlZShobWFjKTsKLSsgICAgZnJlZShobWFjcGF0aCk7Ci0rICAgIGZjbG9z ZShoZik7Ci0rCi0rICAgIGlmIChydiA8IDApCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAg LyogY2hlY2sgc3VjY2Vzc2Z1bCAqLwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0raW50IEZJUFNf bW9kdWxlX21vZGVfc2V0KGludCBvbm9mZiwgY29uc3QgY2hhciAqYXV0aCkKLSt7Ci0rICAgIGlu dCByZXQgPSAwOwotKwotKyAgICBmaXBzX3dfbG9jaygpOwotKyAgICBmaXBzX3N0YXJ0ZWQgPSAx OwotKyAgICBmaXBzX3NldF9vd25pbmdfdGhyZWFkKCk7Ci0rCi0rICAgIGlmIChvbm9mZikgewot KwotKyAgICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsKLSsgICAgICAgIC8qIERvbid0 IGdvIGludG8gRklQUyBtb2RlIHR3aWNlLCBqdXN0IHNvIHdlIGNhbiBkbyBhdXRvbWFnaWMKLSsg ICAgICAgICAgIHNlZWRpbmcgKi8KLSsgICAgICAgIGlmIChGSVBTX21vZHVsZV9tb2RlKCkpIHsK LSsgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCwKLSsgICAg ICAgICAgICAgICAgICAgIEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQpOwotKyAgICAgICAg ICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rICAgICAgICAgICAgcmV0ID0gMDsKLSsgICAg ICAgICAgICBnb3RvIGVuZDsKLSsgICAgICAgIH0KLSsjIGlmZGVmIE9QRU5TU0xfSUEzMl9TU0Uy Ci0rICAgICAgICB7Ci0rICAgICAgICAgICAgZXh0ZXJuIHVuc2lnbmVkIGludCBPUEVOU1NMX2lh MzJjYXBfUFsyXTsKLSsgICAgICAgICAgICBpZiAoKE9QRU5TU0xfaWEzMmNhcF9QWzBdICYgKDEg PDwgMjUgfCAxIDw8IDI2KSkgIT0KLSsgICAgICAgICAgICAgICAgKDEgPDwgMjUgfCAxIDw8IDI2 KSkgewotKyAgICAgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NF VCwKLSsgICAgICAgICAgICAgICAgICAgICAgICBGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0p OwotKyAgICAgICAgICAgICAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKyAgICAgICAgICAg ICAgICByZXQgPSAwOwotKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSsgICAgICAgICAgICB9 Ci0rICAgICAgICAgICAgT1BFTlNTTF9pYTMyY2FwX1BbMF0gfD0gKDEgPDwgMjgpOyAvKiBzZXQg InNoYXJlZCBjYWNoZSIgICAqLwotKyAgICAgICAgICAgIE9QRU5TU0xfaWEzMmNhcF9QWzFdICY9 IH4oMSA8PCAoNjAgLSAzMikpOyAvKiBjbGVhciBBVlggICAgICAgICAgICAqLwotKyAgICAgICAg fQotKyMgZW5kaWYKLSsKLSsgICAgICAgIGlmICghRklQU0NIRUNLX3ZlcmlmeQotKyAgICAgICAg ICAgICgibGliY3J5cHRvLnNvLiIgU0hMSUJfVkVSU0lPTl9OVU1CRVIsICJGSVBTX21vZGVfc2V0 IikpIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCwK LSsgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCk7 Ci0rICAgICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsgICAgICAgICAgICByZXQg PSAwOwotKyAgICAgICAgICAgIGdvdG8gZW5kOwotKyAgICAgICAgfQotKwotKyAgICAgICAgaWYg KCFGSVBTQ0hFQ0tfdmVyaWZ5Ci0rICAgICAgICAgICAgKCJsaWJzc2wuc28uIiBTSExJQl9WRVJT SU9OX05VTUJFUiwgIlNTTF9DVFhfbmV3IikpIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX01PRFVMRV9NT0RFX1NFVCwKLSsgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9GSU5H RVJQUklOVF9ET0VTX05PVF9NQVRDSCk7Ci0rICAgICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKLSsgICAgICAgICAgICByZXQgPSAwOwotKyAgICAgICAgICAgIGdvdG8gZW5kOwotKyAg ICAgICAgfQotKwotKyAgICAgICAgaWYgKEZJUFNfc2VsZnRlc3QoKSkKLSsgICAgICAgICAgICBm aXBzX3NldF9tb2RlKG9ub2ZmKTsKLSsgICAgICAgIGVsc2UgewotKyAgICAgICAgICAgIGZpcHNf c2VsZnRlc3RfZmFpbCA9IDE7Ci0rICAgICAgICAgICAgcmV0ID0gMDsKLSsgICAgICAgICAgICBn b3RvIGVuZDsKLSsgICAgICAgIH0KLSsgICAgICAgIHJldCA9IDE7Ci0rICAgICAgICBnb3RvIGVu ZDsKLSsgICAgfQotKyAgICBmaXBzX3NldF9tb2RlKDApOwotKyAgICBmaXBzX3NlbGZ0ZXN0X2Zh aWwgPSAwOwotKyAgICByZXQgPSAxOwotKyBlbmQ6Ci0rICAgIGZpcHNfY2xlYXJfb3duaW5nX3Ro cmVhZCgpOwotKyAgICBmaXBzX3dfdW5sb2NrKCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwot K3N0YXRpYyBDUllQVE9fVEhSRUFESUQgZmlwc190aHJlYWQ7Ci0rc3RhdGljIGludCBmaXBzX3Ro cmVhZF9zZXQgPSAwOwotKwotK3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQp Ci0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsKLSsgICAgaWYgKGZpcHNfc3RhcnRlZCkgewotKyAg ICAgICAgQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rICAgICAgICBpZiAoZmlw c190aHJlYWRfc2V0KSB7Ci0rICAgICAgICAgICAgQ1JZUFRPX1RIUkVBRElEIGN1cjsKLSsgICAg ICAgICAgICBDUllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKLSsgICAgICAgICAgICBpZiAo IUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwgJmZpcHNfdGhyZWFkKSkKLSsgICAgICAgICAgICAg ICAgcmV0ID0gMTsKLSsgICAgICAgIH0KLSsgICAgICAgIENSWVBUT19yX3VubG9jayhDUllQVE9f TE9DS19GSVBTMik7Ci0rICAgIH0KLSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rCi0raW50IGZpcHNf c2V0X293bmluZ190aHJlYWQodm9pZCkKLSt7Ci0rICAgIGludCByZXQgPSAwOwotKwotKyAgICBp ZiAoZmlwc19zdGFydGVkKSB7Ci0rICAgICAgICBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJ UFMyKTsKLSsgICAgICAgIGlmICghZmlwc190aHJlYWRfc2V0KSB7Ci0rICAgICAgICAgICAgQ1JZ UFRPX1RIUkVBRElEX2N1cnJlbnQoJmZpcHNfdGhyZWFkKTsKLSsgICAgICAgICAgICByZXQgPSAx OwotKyAgICAgICAgICAgIGZpcHNfdGhyZWFkX3NldCA9IDE7Ci0rICAgICAgICB9Ci0rICAgICAg ICBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKyAgICB9Ci0rICAgIHJldHVy biByZXQ7Ci0rfQotKwotK2ludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQodm9pZCkKLSt7Ci0r ICAgIGludCByZXQgPSAwOwotKwotKyAgICBpZiAoZmlwc19zdGFydGVkKSB7Ci0rICAgICAgICBD UllQVE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsgICAgICAgIGlmIChmaXBzX3RocmVh ZF9zZXQpIHsKLSsgICAgICAgICAgICBDUllQVE9fVEhSRUFESUQgY3VyOwotKyAgICAgICAgICAg IENSWVBUT19USFJFQURJRF9jdXJyZW50KCZjdXIpOwotKyAgICAgICAgICAgIGlmICghQ1JZUFRP X1RIUkVBRElEX2NtcCgmY3VyLCAmZmlwc190aHJlYWQpKQotKyAgICAgICAgICAgICAgICBmaXBz X3RocmVhZF9zZXQgPSAwOwotKyAgICAgICAgfQotKyAgICAgICAgQ1JZUFRPX3dfdW5sb2NrKENS WVBUT19MT0NLX0ZJUFMyKTsKLSsgICAgfQotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLSsjIGlm IDAKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGlzIGlzIHRvIGVuc3VyZSB0aGUgZXJyb3IgY29kZSBl eGlzdHMgYW5kIHRoZSBmdW5jdGlvbgotKyAqIG5hbWUgaXMgdG8ga2VlcCB0aGUgZXJyb3IgY2hl Y2tpbmcgc2NyaXB0IHF1aWV0Ci0rICovCi0rdm9pZCBoYXNoX2ZpbmFsKHZvaWQpCi0rewotKyAg ICBGSVBTZXJyKEZJUFNfRl9IQVNIX0ZJTkFMLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSt9 Ci0rIyBlbmRpZgotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2Zp cHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9m aXBzX2NtYWNfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNf Y21hY19zZWxmdGVzdC5jLmZpcHMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDYyODM5MzYgKzAyMDAK LSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYwkyMDE1 LTA2LTE1IDE3OjMwOjAwLjAwNjI4MzkzNiArMDIwMAotQEAgLTAsMCArMSwxNTYgQEAKLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24u Ci0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2NtYWMuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotK3R5cGVkZWYgc3RydWN0IHsKLSsgICAgaW50IG5pZDsKLSsgICAgY29uc3QgdW5z aWduZWQgY2hhciBrZXlbRVZQX01BWF9LRVlfTEVOR1RIXTsKLSsgICAgc2l6ZV90IGtleXNpemU7 Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnWzY0XTsKLSsgICAgc2l6ZV90IG1zZ3NpemU7 Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWFjWzMyXTsKLSsgICAgc2l6ZV90IG1hY3NpemU7 Ci0rfSBDTUFDX0tBVDsKLSsKLSsvKiBmcm9tIGh0dHA6Ly9jc3JjLm5pc3QuZ292L3B1YmxpY2F0 aW9ucy9uaXN0cHVicy84MDAtMzhCL1NQXzgwMC0zOEIucGRmICovCi0rc3RhdGljIGNvbnN0IENN QUNfS0FUIHZlY3RvcltdID0gewotKyAgICB7TklEX2Flc18xMjhfY2JjLCAgICAgICAgICAgLyog Q291bnQgPSAzMiBmcm9tIENNQUNHZW5BRVMxMjgudHh0ICovCi0rICAgICB7MHg3NywgMHhhNywg MHg3ZiwgMHhhZiwgMHgyOSwgMHgwYywgMHgxZiwgMHhhMywKLSsgICAgICAweDBjLCAweDY4LCAw eDNkLCAweGYxLCAweDZiLCAweGE3LCAweGE3LCAweDdiLH0sIDEyOCwKLSsgICAgIHsweDAyLCAw eDA2LCAweDgzLCAweGUxLCAweGYwLCAweDM5LCAweDJmLCAweDRjLAotKyAgICAgIDB4YWMsIDB4 NTQsIDB4MzEsIDB4OGIsIDB4NjAsIDB4MjksIDB4MjUsIDB4OWUsCi0rICAgICAgMHg5YywgMHg1 NSwgMHgzZCwgMHhiYywgMHg0YiwgMHg2YSwgMHhkOSwgMHg5OCwKLSsgICAgICAweGU2LCAweDRk LCAweDU4LCAweGU0LCAweGU3LCAweGRjLCAweDJlLCAweDEzLH0sIDI1NiwKLSsgICAgIHsweGZi LCAweGZlLCAweGE0LCAweDFiLH0sIDMyfSwKLSsgICAge05JRF9hZXNfMTkyX2NiYywgICAgICAg ICAgIC8qIENvdW50ID0gMjMgZnJvbSBDTUFDR2VuQUVTMTkyLnR4dCAqLwotKyAgICAgezB4N2Is IDB4MzIsIDB4MzksIDB4MTMsIDB4NjksIDB4YWEsIDB4NGMsIDB4YTksCi0rICAgICAgMHg3NSwg MHg1OCwgMHgwOSwgMHg1YiwgMHhlMywgMHhjMywgMHhlYywgMHg4NiwKLSsgICAgICAweDJiLCAw eGQwLCAweDU3LCAweGNlLCAweGYxLCAweGUzLCAweDJkLCAweDYyLH0sIDE5MiwKLSsgICAgIHsw eDB9LCAwLAotKyAgICAgezB4ZTQsIDB4ZDksIDB4MzQsIDB4MGIsIDB4MDMsIDB4ZTYsIDB4N2Qs IDB4ZWYsCi0rICAgICAgMHhkNCwgMHg5NiwgMHg5YywgMHhjMSwgMHhlZCwgMHgzNywgMHgzNSwg MHhlNix9LCAxMjgsCi0rICAgICB9LAotKyAgICB7TklEX2Flc18yNTZfY2JjLCAgICAgICAgICAg LyogQ291bnQgPSAzMyBmcm9tIENNQUNHZW5BRVMyNTYudHh0ICovCi0rICAgICB7MHgwYiwgMHgx MiwgMHgyYSwgMHhjOCwgMHhmMywgMHg0ZSwgMHhkMSwgMHhmZSwKLSsgICAgICAweDA4LCAweDJh LCAweDM2LCAweDI1LCAweGQxLCAweDU3LCAweDU2LCAweDE0LAotKyAgICAgIDB4NTQsIDB4MTYs IDB4N2EsIDB4YzEsIDB4NDUsIDB4YTEsIDB4MGIsIDB4YmYsCi0rICAgICAgMHg3NywgMHhjNiwg MHhhNywgMHgwNSwgMHg5NiwgMHhkNSwgMHg3NCwgMHhmMSx9LCAyNTYsCi0rICAgICB7MHg0OSwg MHg4YiwgMHg1MywgMHhmZCwgMHhlYywgMHg4NywgMHhlZCwgMHhjYiwKLSsgICAgICAweGYwLCAw eDcwLCAweDk3LCAweGRjLCAweGNkLCAweGU5LCAweDNhLCAweDA4LAotKyAgICAgIDB4NGIsIDB4 YWQsIDB4NzUsIDB4MDEsIDB4YTIsIDB4MjQsIDB4ZTMsIDB4ODgsCi0rICAgICAgMHhkZiwgMHgz NCwgMHg5YywgMHhlMSwgMHg4OSwgMHg1OSwgMHhmZSwgMHg4NCwKLSsgICAgICAweDg1LCAweGY4 LCAweGFkLCAweDE1LCAweDM3LCAweGYwLCAweGQ4LCAweDk2LAotKyAgICAgIDB4ZWEsIDB4NzMs IDB4YmUsIDB4ZGMsIDB4NzIsIDB4MTQsIDB4NzEsIDB4M2YsfSwgMzg0LAotKyAgICAgezB4ZjYs IDB4MmMsIDB4NDYsIDB4MzIsIDB4OWIsfSwgNDAsCi0rICAgICB9LAotKyAgICB7TklEX2Rlc19l ZGUzX2NiYywgICAgICAgICAgLyogQ291bnQgPSA0MSBmcm9tIENNQUNHZW5UREVTMy5yZXEgKi8K LSsgICAgIHsweDg5LCAweGJjLCAweGQ5LCAweDUyLCAweGE4LCAweGM4LCAweGFiLCAweDM3LAot KyAgICAgIDB4MWEsIDB4ZjQsIDB4OGEsIDB4YzcsIDB4ZDAsIDB4NzAsIDB4ODUsIDB4ZDUsCi0r ICAgICAgMHhlZiwgMHhmNywgMHgwMiwgMHhlNiwgMHhkNiwgMHgyYywgMHhkYywgMHgyMyx9LCAx OTIsCi0rICAgICB7MHhmYSwgMHg2MiwgMHgwYywgMHgxYiwgMHhiZSwgMHg5NywgMHgzMSwgMHg5 ZSwKLSsgICAgICAweDlhLCAweDBjLCAweGYwLCAweDQ5LCAweDIxLCAweDIxLCAweGY3LCAweGEy LAotKyAgICAgIDB4MGUsIDB4YjAsIDB4OGEsIDB4NmEsIDB4NzAsIDB4OWQsIDB4Y2IsIDB4ZDAs Ci0rICAgICAgMHgwYSwgMHhhZiwgMHgzOCwgMHhlNCwgMHhmOSwgMHg5ZSwgMHg3NSwgMHg0ZSx9 LCAyNTYsCi0rICAgICB7MHg4ZiwgMHg0OSwgMHhhMSwgMHhiNywgMHhkNiwgMHhhYSwgMHgyMiwg MHg1OCx9LCA2NCwKLSsgICAgIH0sCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9jbWFjKCkK LSt7Ci0rICAgIHNpemVfdCBuLCBvdXRsZW47Ci0rICAgIHVuc2lnbmVkIGNoYXIgb3V0WzMyXTsK LSsgICAgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyOwotKyAgICBDTUFDX0NUWCAqY3R4ID0gQ01B Q19DVFhfbmV3KCk7Ci0rICAgIGNvbnN0IENNQUNfS0FUICp0OwotKyAgICBpbnQgcnYgPSAxOwot KwotKyAgICBmb3IgKG4gPSAwLCB0ID0gdmVjdG9yOyBuIDwgc2l6ZW9mKHZlY3RvcikgLyBzaXpl b2YodmVjdG9yWzBdKTsgbisrLCB0KyspIHsKLSsgICAgICAgIGNpcGhlciA9IEZJUFNfZ2V0X2Np cGhlcmJ5bmlkKHQtPm5pZCk7Ci0rICAgICAgICBpZiAoIWNpcGhlcikgewotKyAgICAgICAgICAg IHJ2ID0gLTE7Ci0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0rICAgICAgICBp ZiAoIUNNQUNfSW5pdChjdHgsIHQtPmtleSwgdC0+a2V5c2l6ZSAvIDgsIGNpcGhlciwgMCkpIHsK LSsgICAgICAgICAgICBydiA9IC0xOwotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAg fQotKyAgICAgICAgaWYgKCFDTUFDX1VwZGF0ZShjdHgsIHQtPm1zZywgdC0+bXNnc2l6ZSAvIDgp KSB7Ci0rICAgICAgICAgICAgcnYgPSAtMTsKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAg ICAgIH0KLSsKLSsgICAgICAgIGlmICghQ01BQ19GaW5hbChjdHgsIG91dCwgJm91dGxlbikpIHsK LSsgICAgICAgICAgICBydiA9IC0xOwotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAg fQotKyAgICAgICAgQ01BQ19DVFhfY2xlYW51cChjdHgpOwotKwotKyAgICAgICAgaWYgKG91dGxl biA8IHQtPm1hY3NpemUgLyA4IHx8IG1lbWNtcChvdXQsIHQtPm1hYywgdC0+bWFjc2l6ZSAvIDgp KSB7Ci0rICAgICAgICAgICAgcnYgPSAwOwotKyAgICAgICAgfQotKyAgICB9Ci0rCi0rIGVycjoK LSsgICAgQ01BQ19DVFhfZnJlZShjdHgpOwotKwotKyAgICBpZiAocnYgPT0gLTEpIHsKLSsgICAg ICAgIHJ2ID0gMDsKLSsgICAgfQotKyAgICBpZiAoIXJ2KQotKyAgICAgICAgRklQU2VycihGSVBT X0ZfRklQU19TRUxGVEVTVF9DTUFDLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsKLSsgICAg cmV0dXJuIHJ2OwotK30KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9m aXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9m aXBzX2Rlc19zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19k ZXNfc2VsZnRlc3QuYy5maXBzCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDA2MjgzOTM2ICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwkyMDE1LTA2 LTE1IDE3OjMwOjAwLjAwNjI4MzkzNiArMDIwMAotQEAgLTAsMCArMSwxMzggQEAKLSsvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0r ICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoK LSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0r ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGlj IGNvbnN0IHN0cnVjdCB7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKLSsgICAg Y29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgY2lwaGVydGV4dFs4XTsKLSt9IHRlc3RzMltdID0gewotKyAgICB7Ci0rICAgICAgICB7Ci0r ICAgICAgICAweDdjLCAweDRmLCAweDZlLCAweGY3LCAweGEyLCAweDA0LCAweDE2LCAweGVjLAot KyAgICAgICAgICAgICAgICAweDBiLCAweDZiLCAweDdjLCAweDllLCAweDVlLCAweDE5LCAweGE3 LCAweGM0fSwgewotKyAgICAgICAgMHgwNiwgMHhhNywgMHhkOCwgMHg3OSwgMHhhYSwgMHhjZSwg MHg2OSwgMHhlZn0sIHsKLSsgICAgICAgIDB4NGMsIDB4MTEsIDB4MTcsIDB4NTUsIDB4YmYsIDB4 YzQsIDB4NGUsIDB4ZmR9Ci0rICAgIH0sIHsKLSsgICAgICAgIHsKLSsgICAgICAgIDB4NWQsIDB4 OWUsIDB4MDEsIDB4ZDMsIDB4MjUsIDB4YzcsIDB4M2UsIDB4MzQsCi0rICAgICAgICAgICAgICAg IDB4MDEsIDB4MTYsIDB4N2MsIDB4ODUsIDB4MjMsIDB4ZGYsIDB4ZTAsIDB4Njh9LCB7Ci0rICAg ICAgICAweDljLCAweDUwLCAweDA5LCAweDBmLCAweDVlLCAweDdkLCAweDY5LCAweDdlfSwgewot KyAgICAweGQyLCAweDBiLCAweDE4LCAweGRmLCAweGQ5LCAweDBkLCAweDllLCAweGZmfSx9Ci0r fTsKLSsKLStzdGF0aWMgY29uc3Qgc3RydWN0IHsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBr ZXlbMjRdOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsgICAgY29u c3QgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzhdOwotK30gdGVzdHMzW10gPSB7Ci0rICAgIHsK LSsgICAgICAgIHsKLSsgICAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsCi0rICAgICAgICAgICAgICAgIDB4RkUsIDB4REMsIDB4QkEsIDB4OTgsIDB4 NzYsIDB4NTQsIDB4MzIsIDB4MTAsCi0rICAgICAgICAgICAgICAgIDB4MTIsIDB4MzQsIDB4NTYs IDB4NzgsIDB4OWEsIDB4YmMsIDB4ZGUsIDB4ZjB9LCB7Ci0rICAgICAgICAweDhmLCAweDhmLCAw eGJmLCAweDliLCAweDVkLCAweDQ4LCAweGI0LCAweDFjfSwgewotKyAgICAweDU5LCAweDhjLCAw eGU1LCAweGQzLCAweDZjLCAweGEyLCAweGVhLCAweDFifSx9LCB7Ci0rICAgICAgICB7Ci0rICAg ICAgICAweERDLCAweEJBLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLCAweEZFLAotKyAg ICAgICAgICAgICAgICAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAw eEVGLAotKyAgICAgICAgICAgICAgICAweEVELCAweDM5LCAweEQ5LCAweDUwLCAweEZBLCAweDc0 LCAweEJDLCAweEM0fSwgewotKyAgICAgICAgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwg MHhBQiwgMHhDRCwgMHhFRn0sIHsKLSsweDExLCAweDI1LCAweGIwLCAweDM1LCAweGJlLCAweGEw LCAweDgyLCAweDg2fSx9LH07Ci0rCi0rc3RhdGljIGludCBjb3JydXB0X2RlczsKLSsKLSt2b2lk IEZJUFNfY29ycnVwdF9kZXMoKQotK3sKLSsgICAgY29ycnVwdF9kZXMgPSAxOwotK30KLSsKLStp bnQgRklQU19zZWxmdGVzdF9kZXMoKQotK3sKLSsgICAgaW50IG4sIHJldCA9IDA7Ci0rICAgIEVW UF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsgICAg LyogRW5jcnlwdC9kZWNyeXB0IHdpdGggMi1rZXkgM0RFUyBhbmQgY29tcGFyZSB0byBrbm93biBh bnN3ZXJzICovCi0rICAgIGZvciAobiA9IDA7IG4gPCAyOyArK24pIHsKLSsgICAgICAgIHVuc2ln bmVkIGNoYXIgcGxhaW50ZXh0WzhdOwotKwotKyAgICAgICAgbWVtY3B5KHBsYWludGV4dCwgdGVz dHMyW25dLnBsYWludGV4dCwgc2l6ZW9mKHBsYWludGV4dCkpOwotKyAgICAgICAgaWYgKGNvcnJ1 cHRfZGVzKQotKyAgICAgICAgICAgIHBsYWludGV4dFswXSsrOwotKyAgICAgICAgaWYgKCFmaXBz X2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9kZXNfZWRlX2VjYigpLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRlc3RzMltuXS5rZXksIE5VTEwsCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGxhaW50ZXh0LCB0ZXN0czJbbl0uY2lwaGVydGV4dCwgOCkpCi0rICAgICAgICAg ICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgLyogRW5jcnlwdC9kZWNyeXB0IHdpdGggM0RF UyBhbmQgY29tcGFyZSB0byBrbm93biBhbnN3ZXJzICovCi0rICAgIGZvciAobiA9IDA7IG4gPCAy OyArK24pIHsKLSsgICAgICAgIGlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2Vk ZTNfZWNiKCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMzW25dLmtleSwg TlVMTCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0czNbbl0ucGxhaW50ZXh0 LCB0ZXN0czNbbl0uY2lwaGVydGV4dCwgOCkpCi0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAg IH0KLSsgICAgcmV0ID0gMTsKLSsgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZj dHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NF TEZURVNUX0RFUywgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCi0rICAgIHJldHVybiByZXQ7 Ci0rfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19k cmJnX2N0ci5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5j Ci0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jLmZpcHMJMjAx NS0wNi0xNSAxNzozMDowMC4wMDYyODM5MzYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlw dG8vZmlwcy9maXBzX2RyYmdfY3RyLmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDYyODM5MzYgKzAy MDAKLUBAIC0wLDAgKzEsNDE1IEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfZHJiZ19jdHIuYyAqLwot Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBD b3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAq Ci0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz Ci0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwot KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0r ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFu ZF9sY2wuaCIKLSsKLStzdGF0aWMgdm9pZCBpbmNfMTI4KERSQkdfQ1RSX0NUWCAqIGNjdHgpCi0r ewotKyAgICBpbnQgaTsKLSsgICAgdW5zaWduZWQgY2hhciBjOwotKyAgICB1bnNpZ25lZCBjaGFy ICpwID0gY2N0eC0+ViArIDE1OwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotKyAg ICAgICAgYyA9ICpwOwotKyAgICAgICAgYysrOwotKyAgICAgICAgKnAgPSBjOwotKyAgICAgICAg aWYgKGMpCi0rICAgICAgICAgICAgcmV0dXJuOwotKyAgICAgICAgcC0tOwotKyAgICB9Ci0rfQot KwotK3N0YXRpYyB2b2lkIGN0cl9YT1IoRFJCR19DVFJfQ1RYICogY2N0eCwgY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4sCi0rICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5sZW4pCi0rewotKyAg ICBzaXplX3QgaSwgbjsKLSsgICAgLyogQW55IHplcm8gcGFkZGluZyB3aWxsIGhhdmUgbm8gZWZm ZWN0IG9uIHRoZSByZXN1bHQgYXMgd2UKLSsgICAgICogYXJlIFhPUmluZy4gU28ganVzdCBwcm9j ZXNzIGhvd2V2ZXIgbXVjaCBpbnB1dCB3ZSBoYXZlLgotKyAgICAgKi8KLSsKLSsgICAgaWYgKCFp biB8fCAhaW5sZW4pCi0rICAgICAgICByZXR1cm47Ci0rCi0rICAgIGlmIChpbmxlbiA8IGNjdHgt PmtleWxlbikKLSsgICAgICAgIG4gPSBpbmxlbjsKLSsgICAgZWxzZQotKyAgICAgICAgbiA9IGNj dHgtPmtleWxlbjsKLSsKLSsgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKLSsgICAgICAgIGNj dHgtPktbaV0gXj0gaW5baV07Ci0rICAgIGlmIChpbmxlbiA8PSBjY3R4LT5rZXlsZW4pCi0rICAg ICAgICByZXR1cm47Ci0rCi0rICAgIG4gPSBpbmxlbiAtIGNjdHgtPmtleWxlbjsKLSsgICAgLyog U2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotKyAgICBpZiAobiA+IDE2KQotKyAgICAgICAgbiA9IDE2 OwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLSsgICAgICAgIGNjdHgtPlZbaV0gXj0g aW5baSArIGNjdHgtPmtleWxlbl07Ci0rfQotKwotKy8qIFByb2Nlc3MgYSBjb21wbGV0ZSBibG9j ayB1c2luZyBCQ0MgYWxnb3JpdGhtIG9mIFNQUCA4MDAtOTAgMTAuNC4zICovCi0rCi0rc3RhdGlj IHZvaWQgY3RyX0JDQ19ibG9jayhEUkJHX0NUUl9DVFggKiBjY3R4LCB1bnNpZ25lZCBjaGFyICpv dXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbikK LSt7Ci0rICAgIGludCBpOwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLSsgICAgICAg IG91dFtpXSBePSBpbltpXTsKLSsgICAgQUVTX2VuY3J5cHQob3V0LCBvdXQsICZjY3R4LT5kZl9r cyk7Ci0rI2lmIDAKLSsgICAgZnByaW50ZihzdGRlcnIsICJCQ0MgaW4rb3V0XG4iKTsKLSsgICAg QklPX2R1bXBfZnAoc3RkZXJyLCBpbiwgMTYpOwotKyAgICBCSU9fZHVtcF9mcChzdGRlcnIsIG91 dCwgMTYpOwotKyNlbmRpZgotK30KLSsKLSsvKiBIYW5kbGUgc2V2ZXJhbCBCQ0Mgb3BlcmF0aW9u cyBmb3IgYXMgbXVjaCBkYXRhIGFzIHdlIG5lZWQgZm9yIEsgYW5kIFggKi8KLStzdGF0aWMgdm9p ZCBjdHJfQkNDX2Jsb2NrcyhEUkJHX0NUUl9DVFggKiBjY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFy ICppbikKLSt7Ci0rICAgIGN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1gsIGluKTsKLSsgICAg Y3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDE2LCBpbik7Ci0rICAgIGlmIChjY3R4LT5r ZXlsZW4gIT0gMTYpCi0rICAgICAgICBjdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMzIs IGluKTsKLSt9Ci0rCi0rLyogSW5pdGlhbGlzZSBCQ0MgYmxvY2tzOiB0aGVzZSBoYXZlIHRoZSB2 YWx1ZSAwLDEsMiBpbiBsZWZ0bW9zdCBwb3NpdGlvbnM6Ci0rICogc2VlIDEwLjQuMiBzdGFnZSA3 LgotKyAqLwotK3N0YXRpYyB2b2lkIGN0cl9CQ0NfaW5pdChEUkJHX0NUUl9DVFggKiBjY3R4KQot K3sKLSsgICAgbWVtc2V0KGNjdHgtPktYLCAwLCA0OCk7Ci0rICAgIG1lbXNldChjY3R4LT5ibHRt cCwgMCwgMTYpOwotKyAgICBjdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYLCBjY3R4LT5ibHRt cCk7Ci0rICAgIGNjdHgtPmJsdG1wWzNdID0gMTsKLSsgICAgY3RyX0JDQ19ibG9jayhjY3R4LCBj Y3R4LT5LWCArIDE2LCBjY3R4LT5ibHRtcCk7Ci0rICAgIGlmIChjY3R4LT5rZXlsZW4gIT0gMTYp IHsKLSsgICAgICAgIGNjdHgtPmJsdG1wWzNdID0gMjsKLSsgICAgICAgIGN0cl9CQ0NfYmxvY2so Y2N0eCwgY2N0eC0+S1ggKyAzMiwgY2N0eC0+Ymx0bXApOwotKyAgICB9Ci0rfQotKwotKy8qIFBy b2Nlc3Mgc2V2ZXJhbCBibG9ja3MgaW50byBCQ0MgYWxnb3JpdGhtLCBzb21lIHBvc3NpYmx5IHBh cnRpYWwgKi8KLStzdGF0aWMgdm9pZCBjdHJfQkNDX3VwZGF0ZShEUkJHX0NUUl9DVFggKiBjY3R4 LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBz aXplX3QgaW5sZW4pCi0rewotKyAgICBpZiAoIWluIHx8ICFpbmxlbikKLSsgICAgICAgIHJldHVy bjsKLSsgICAgLyogSWYgd2UgaGF2ZSBwYXJ0aWFsIGJsb2NrIGhhbmRsZSBpdCBmaXJzdCAqLwot KyAgICBpZiAoY2N0eC0+Ymx0bXBfcG9zKSB7Ci0rICAgICAgICBzaXplX3QgbGVmdCA9IDE2IC0g Y2N0eC0+Ymx0bXBfcG9zOwotKyAgICAgICAgLyogSWYgd2Ugbm93IGhhdmUgYSBjb21wbGV0ZSBi bG9jayBwcm9jZXNzIGl0ICovCi0rICAgICAgICBpZiAoaW5sZW4gPj0gbGVmdCkgewotKyAgICAg ICAgICAgIG1lbWNweShjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1wX3BvcywgaW4sIGxlZnQpOwot KyAgICAgICAgICAgIGN0cl9CQ0NfYmxvY2tzKGNjdHgsIGNjdHgtPmJsdG1wKTsKLSsgICAgICAg ICAgICBjY3R4LT5ibHRtcF9wb3MgPSAwOwotKyAgICAgICAgICAgIGlubGVuIC09IGxlZnQ7Ci0r ICAgICAgICAgICAgaW4gKz0gbGVmdDsKLSsgICAgICAgIH0KLSsgICAgfQotKyAgICAvKiBQcm9j ZXNzIHplcm8gb3IgbW9yZSBjb21wbGV0ZSBibG9ja3MgKi8KLSsgICAgd2hpbGUgKGlubGVuID49 IDE2KSB7Ci0rICAgICAgICBjdHJfQkNDX2Jsb2NrcyhjY3R4LCBpbik7Ci0rICAgICAgICBpbiAr PSAxNjsKLSsgICAgICAgIGlubGVuIC09IDE2OwotKyAgICB9Ci0rICAgIC8qIENvcHkgYW55IHJl bWFpbmluZyBwYXJ0aWFsIGJsb2NrIHRvIHRoZSB0ZW1wb3JhcnkgYnVmZmVyICovCi0rICAgIGlm IChpbmxlbiA+IDApIHsKLSsgICAgICAgIG1lbWNweShjY3R4LT5ibHRtcCArIGNjdHgtPmJsdG1w X3BvcywgaW4sIGlubGVuKTsKLSsgICAgICAgIGNjdHgtPmJsdG1wX3BvcyArPSBpbmxlbjsKLSsg ICAgfQotK30KLSsKLStzdGF0aWMgdm9pZCBjdHJfQkNDX2ZpbmFsKERSQkdfQ1RSX0NUWCAqIGNj dHgpCi0rewotKyAgICBpZiAoY2N0eC0+Ymx0bXBfcG9zKSB7Ci0rICAgICAgICBtZW1zZXQoY2N0 eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIDAsIDE2IC0gY2N0eC0+Ymx0bXBfcG9zKTsKLSsg ICAgICAgIGN0cl9CQ0NfYmxvY2tzKGNjdHgsIGNjdHgtPmJsdG1wKTsKLSsgICAgfQotK30KLSsK LStzdGF0aWMgdm9pZCBjdHJfZGYoRFJCR19DVFJfQ1RYICogY2N0eCwKLSsgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAotKyAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjIsIHNpemVfdCBpbjJsZW4sCi0rICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMywgc2l6ZV90IGluM2xlbikK LSt7Ci0rICAgIHNpemVfdCBpbmxlbjsKLSsgICAgdW5zaWduZWQgY2hhciAqcCA9IGNjdHgtPmJs dG1wOwotKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBjODAgPSAweDgwOwotKwotKyAgICBjdHJf QkNDX2luaXQoY2N0eCk7Ci0rICAgIGlmICghaW4xKQotKyAgICAgICAgaW4xbGVuID0gMDsKLSsg ICAgaWYgKCFpbjIpCi0rICAgICAgICBpbjJsZW4gPSAwOwotKyAgICBpZiAoIWluMykKLSsgICAg ICAgIGluM2xlbiA9IDA7Ci0rICAgIGlubGVuID0gaW4xbGVuICsgaW4ybGVuICsgaW4zbGVuOwot KyAgICAvKiBJbml0aWFsaXNlIEx8fE4gaW4gdGVtcG9yYXJ5IGJsb2NrICovCi0rICAgICpwKysg PSAoaW5sZW4gPj4gMjQpICYgMHhmZjsKLSsgICAgKnArKyA9IChpbmxlbiA+PiAxNikgJiAweGZm OwotKyAgICAqcCsrID0gKGlubGVuID4+IDgpICYgMHhmZjsKLSsgICAgKnArKyA9IGlubGVuICYg MHhmZjsKLSsgICAgLyogTkIga2V5bGVuIGlzIGF0IG1vc3QgMzIgYnl0ZXMgKi8KLSsgICAgKnAr KyA9IDA7Ci0rICAgICpwKysgPSAwOwotKyAgICAqcCsrID0gMDsKLSsgICAgKnAgPSAodW5zaWdu ZWQgY2hhcikoKGNjdHgtPmtleWxlbiArIDE2KSAmIDB4ZmYpOwotKyAgICBjY3R4LT5ibHRtcF9w b3MgPSA4OwotKyAgICBjdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjEsIGluMWxlbik7Ci0rICAgIGN0 cl9CQ0NfdXBkYXRlKGNjdHgsIGluMiwgaW4ybGVuKTsKLSsgICAgY3RyX0JDQ191cGRhdGUoY2N0 eCwgaW4zLCBpbjNsZW4pOwotKyAgICBjdHJfQkNDX3VwZGF0ZShjY3R4LCAmYzgwLCAxKTsKLSsg ICAgY3RyX0JDQ19maW5hbChjY3R4KTsKLSsgICAgLyogU2V0IHVwIGtleSBLICovCi0rICAgIEFF U19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+S1gsIGNjdHgtPmtleWxlbiAqIDgsICZjY3R4LT5kZl9r eGtzKTsKLSsgICAgLyogWCBmb2xsb3dzIGtleSBLICovCi0rICAgIEFFU19lbmNyeXB0KGNjdHgt PktYICsgY2N0eC0+a2V5bGVuLCBjY3R4LT5LWCwgJmNjdHgtPmRmX2t4a3MpOwotKyAgICBBRVNf ZW5jcnlwdChjY3R4LT5LWCwgY2N0eC0+S1ggKyAxNiwgJmNjdHgtPmRmX2t4a3MpOwotKyAgICBp ZiAoY2N0eC0+a2V5bGVuICE9IDE2KQotKyAgICAgICAgQUVTX2VuY3J5cHQoY2N0eC0+S1ggKyAx NiwgY2N0eC0+S1ggKyAzMiwgJmNjdHgtPmRmX2t4a3MpOwotKyNpZiAwCi0rICAgIGZwcmludGYo c3RkZXJyLCAiT3V0cHV0IG9mIGN0cl9kZjpcbiIpOwotKyAgICBCSU9fZHVtcF9mcChzdGRlcnIs IGNjdHgtPktYLCBjY3R4LT5rZXlsZW4gKyAxNik7Ci0rI2VuZGlmCi0rfQotKwotKy8qIE5CIHRo ZSBuby1kZiAgVXBkYXRlIGluIFNQODAwLTkwIHNwZWNpZmllcyBhIGNvbnN0YW50IGlucHV0IGxl bmd0aAotKyAqIG9mIHNlZWRsZW4sIGhvd2V2ZXIgb3RoZXIgdXNlcyBvZiB0aGlzIGFsZ29yaXRo bSBwYWQgdGhlIGlucHV0IHdpdGgKLSsgKiB6ZXJvZXMgaWYgbmVjZXNzYXJ5IGFuZCBoYXZlIHVw IHRvIHR3byBwYXJhbWV0ZXJzIFhPUmVkIHRvZ2V0aGVyLAotKyAqIGhhbmRsZSBib3RoIGNhc2Vz IGluIHRoaXMgZnVuY3Rpb24gaW5zdGVhZC4KLSsgKi8KLSsKLStzdGF0aWMgdm9pZCBjdHJfVXBk YXRlKERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4xLCBzaXplX3QgaW4xbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAotKyAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbikKLSt7Ci0r ICAgIERSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKLSsgICAgLyoga3MgaXMgYWxy ZWFkeSBzZXR1cCBmb3IgY29ycmVjdCBrZXkgKi8KLSsgICAgaW5jXzEyOChjY3R4KTsKLSsgICAg QUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtzKTsKLSsgICAgLyogSWYga2V5 bGVuIGxvbmdlciB0aGFuIDEyOCBiaXRzIG5lZWQgZXh0cmEgZW5jcnlwdCAqLwotKyAgICBpZiAo Y2N0eC0+a2V5bGVuICE9IDE2KSB7Ci0rICAgICAgICBpbmNfMTI4KGNjdHgpOwotKyAgICAgICAg QUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SyArIDE2LCAmY2N0eC0+a3MpOwotKyAgICB9Ci0r ICAgIGluY18xMjgoY2N0eCk7Ci0rICAgIEFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPlYsICZj Y3R4LT5rcyk7Ci0rICAgIC8qIElmIDE5MiBiaXQga2V5IHBhcnQgb2YgViBpcyBvbiBlbmQgb2Yg SyAqLwotKyAgICBpZiAoY2N0eC0+a2V5bGVuID09IDI0KSB7Ci0rICAgICAgICBtZW1jcHkoY2N0 eC0+ViArIDgsIGNjdHgtPlYsIDgpOwotKyAgICAgICAgbWVtY3B5KGNjdHgtPlYsIGNjdHgtPksg KyAyNCwgOCk7Ci0rICAgIH0KLSsKLSsgICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19D VFJfVVNFX0RGKSB7Ci0rICAgICAgICAvKiBJZiBubyBpbnB1dCByZXVzZSBleGlzdGluZyBkZXJp dmVkIHZhbHVlICovCi0rICAgICAgICBpZiAoaW4xIHx8IG5vbmNlIHx8IGluMikKLSsgICAgICAg ICAgICBjdHJfZGYoY2N0eCwgaW4xLCBpbjFsZW4sIG5vbmNlLCBub25jZWxlbiwgaW4yLCBpbjJs ZW4pOwotKyAgICAgICAgLyogSWYgdGhpcyBhIHJldXNlIGlucHV0IGluMWxlbiAhPSAwICovCi0r ICAgICAgICBpZiAoaW4xbGVuKQotKyAgICAgICAgICAgIGN0cl9YT1IoY2N0eCwgY2N0eC0+S1gs IGRjdHgtPnNlZWRsZW4pOwotKyAgICB9IGVsc2UgewotKyAgICAgICAgY3RyX1hPUihjY3R4LCBp bjEsIGluMWxlbik7Ci0rICAgICAgICBjdHJfWE9SKGNjdHgsIGluMiwgaW4ybGVuKTsKLSsgICAg fQotKwotKyAgICBBRVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAm Y2N0eC0+a3MpOwotKyNpZiAwCi0rICAgIGZwcmludGYoc3RkZXJyLCAiSytWIGFmdGVyIHVwZGF0 ZSBpczpcbiIpOwotKyAgICBCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPkssIGNjdHgtPmtleWxl bik7Ci0rICAgIEJJT19kdW1wX2ZwKHN0ZGVyciwgY2N0eC0+ViwgMTYpOwotKyNlbmRpZgotK30K LSsKLStzdGF0aWMgaW50IGRyYmdfY3RyX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBz aXplX3QgZW50bGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKQot K3sKLSsgICAgRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwotKyAgICBtZW1zZXQo Y2N0eC0+SywgMCwgc2l6ZW9mKGNjdHgtPkspKTsKLSsgICAgbWVtc2V0KGNjdHgtPlYsIDAsIHNp emVvZihjY3R4LT5WKSk7Ci0rICAgIEFFU19zZXRfZW5jcnlwdF9rZXkoY2N0eC0+SywgZGN0eC0+ c3RyZW5ndGgsICZjY3R4LT5rcyk7Ci0rICAgIGN0cl9VcGRhdGUoZGN0eCwgZW50LCBlbnRsZW4s IHBlcnMsIHBlcnNsZW4sIG5vbmNlLCBub25jZWxlbik7Ci0rICAgIHJldHVybiAxOwotK30KLSsK LStzdGF0aWMgaW50IGRyYmdfY3RyX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwg c2l6ZV90IGFkaW5sZW4pCi0rewotKyAgICBjdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVuLCBh ZGluLCBhZGlubGVuLCBOVUxMLCAwKTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBp bnQgZHJiZ19jdHJfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRp bmxlbikKLSt7Ci0rICAgIERSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKLSsgICAg aWYgKGFkaW4gJiYgYWRpbmxlbikgewotKyAgICAgICAgY3RyX1VwZGF0ZShkY3R4LCBhZGluLCBh ZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKLSsgICAgICAgIC8qIFRoaXMgbWVhbnMgd2UgcmV1 c2UgZGVyaXZlZCB2YWx1ZSAqLwotKyAgICAgICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxB R19DVFJfVVNFX0RGKSB7Ci0rICAgICAgICAgICAgYWRpbiA9IE5VTEw7Ci0rICAgICAgICAgICAg YWRpbmxlbiA9IDE7Ci0rICAgICAgICB9Ci0rICAgIH0gZWxzZQotKyAgICAgICAgYWRpbmxlbiA9 IDA7Ci0rCi0rICAgIGZvciAoOzspIHsKLSsgICAgICAgIGluY18xMjgoY2N0eCk7Ci0rICAgICAg ICBpZiAoIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkgJiYgIWRjdHgtPmxiX3ZhbGlk KSB7Ci0rICAgICAgICAgICAgQUVTX2VuY3J5cHQoY2N0eC0+ViwgZGN0eC0+bGIsICZjY3R4LT5r cyk7Ci0rICAgICAgICAgICAgZGN0eC0+bGJfdmFsaWQgPSAxOwotKyAgICAgICAgICAgIGNvbnRp bnVlOwotKyAgICAgICAgfQotKyAgICAgICAgaWYgKG91dGxlbiA8IDE2KSB7Ci0rICAgICAgICAg ICAgLyogVXNlIEsgYXMgdGVtcCBzcGFjZSBhcyBpdCB3aWxsIGJlIHVwZGF0ZWQgKi8KLSsgICAg ICAgICAgICBBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5LLCAmY2N0eC0+a3MpOwotKyAgICAg ICAgICAgIGlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgY2N0eC0+SykpCi0rICAgICAg ICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgIG1lbWNweShvdXQsIGNjdHgtPkssIG91 dGxlbik7Ci0rICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICB9Ci0rICAgICAgICBBRVNfZW5j cnlwdChjY3R4LT5WLCBvdXQsICZjY3R4LT5rcyk7Ci0rICAgICAgICBpZiAoIWZpcHNfZHJiZ19j cHJuZ190ZXN0KGRjdHgsIG91dCkpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBv dXQgKz0gMTY7Ci0rICAgICAgICBvdXRsZW4gLT0gMTY7Ci0rICAgICAgICBpZiAob3V0bGVuID09 IDApCi0rICAgICAgICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgY3RyX1VwZGF0ZShkY3R4 LCBhZGluLCBhZGlubGVuLCBOVUxMLCAwLCBOVUxMLCAwKTsKLSsKLSsgICAgcmV0dXJuIDE7Ci0r Ci0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19jdHJfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0 eCkKLSt7Ci0rICAgIG1lbXNldCgmZGN0eC0+ZC5jdHIsIDAsIHNpemVvZihEUkJHX0NUUl9DVFgp KTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK2ludCBmaXBzX2RyYmdfY3RyX2luaXQoRFJCR19D VFggKmRjdHgpCi0rewotKyAgICBEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7Ci0r Ci0rICAgIHNpemVfdCBrZXlsZW47Ci0rCi0rICAgIHN3aXRjaCAoZGN0eC0+dHlwZSkgewotKyAg ICBjYXNlIE5JRF9hZXNfMTI4X2N0cjoKLSsgICAgICAgIGtleWxlbiA9IDE2OwotKyAgICAgICAg YnJlYWs7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJfY3RyOgotKyAgICAgICAga2V5bGVuID0g MjQ7Ci0rICAgICAgICBicmVhazsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzI1Nl9jdHI6Ci0rICAg ICAgICBrZXlsZW4gPSAzMjsKLSsgICAgICAgIGJyZWFrOwotKwotKyAgICBkZWZhdWx0OgotKyAg ICAgICAgcmV0dXJuIC0yOwotKyAgICB9Ci0rCi0rICAgIGRjdHgtPmluc3RhbnRpYXRlID0gZHJi Z19jdHJfaW5zdGFudGlhdGU7Ci0rICAgIGRjdHgtPnJlc2VlZCA9IGRyYmdfY3RyX3Jlc2VlZDsK LSsgICAgZGN0eC0+Z2VuZXJhdGUgPSBkcmJnX2N0cl9nZW5lcmF0ZTsKLSsgICAgZGN0eC0+dW5p bnN0YW50aWF0ZSA9IGRyYmdfY3RyX3VuaW5zdGFudGlhdGU7Ci0rCi0rICAgIGNjdHgtPmtleWxl biA9IGtleWxlbjsKLSsgICAgZGN0eC0+c3RyZW5ndGggPSBrZXlsZW4gKiA4OwotKyAgICBkY3R4 LT5ibG9ja2xlbmd0aCA9IDE2OwotKyAgICBkY3R4LT5zZWVkbGVuID0ga2V5bGVuICsgMTY7Ci0r Ci0rICAgIGlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikgewotKyAgICAg ICAgLyogZGYgaW5pdGlhbGlzYXRpb24gKi8KLSsgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy IGRmX2tleVszMl0gPSB7Ci0rICAgICAgICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgw NCwgMHgwNSwgMHgwNiwgMHgwNywKLSsgICAgICAgICAgICAweDA4LCAweDA5LCAweDBhLCAweDBi LCAweDBjLCAweDBkLCAweDBlLCAweDBmLAotKyAgICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIs IDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCi0rICAgICAgICAgICAgMHgxOCwgMHgxOSwg MHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZgotKyAgICAgICAgfTsKLSsgICAgICAg IC8qIFNldCBrZXkgc2NoZWR1bGUgZm9yIGRmX2tleSAqLwotKyAgICAgICAgQUVTX3NldF9lbmNy eXB0X2tleShkZl9rZXksIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+ZGZfa3MpOwotKwotKyAgICAg ICAgZGN0eC0+bWluX2VudHJvcHkgPSBjY3R4LT5rZXlsZW47Ci0rICAgICAgICBkY3R4LT5tYXhf ZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKLSsgICAgICAgIGRjdHgtPm1pbl9ub25jZSA9IGRj dHgtPm1pbl9lbnRyb3B5IC8gMjsKLSsgICAgICAgIGRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFY X0xFTkdUSDsKLSsgICAgICAgIGRjdHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RIOwotKyAg ICAgICAgZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7Ci0rICAgIH0gZWxzZSB7Ci0r ICAgICAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnNlZWRsZW47Ci0rICAgICAgICBkY3R4 LT5tYXhfZW50cm9weSA9IGRjdHgtPnNlZWRsZW47Ci0rICAgICAgICAvKiBOb25jZSBub3QgdXNl ZCAqLwotKyAgICAgICAgZGN0eC0+bWluX25vbmNlID0gMDsKLSsgICAgICAgIGRjdHgtPm1heF9u b25jZSA9IDA7Ci0rICAgICAgICBkY3R4LT5tYXhfcGVycyA9IGRjdHgtPnNlZWRsZW47Ci0rICAg ICAgICBkY3R4LT5tYXhfYWRpbiA9IGRjdHgtPnNlZWRsZW47Ci0rICAgIH0KLSsKLSsgICAgZGN0 eC0+bWF4X3JlcXVlc3QgPSAxIDw8IDE2OwotKyAgICBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAx IDw8IDI0OwotKwotKyAgICByZXR1cm4gMTsKLSt9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9j cnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2Zp cHMvZmlwc19kcmJnX2hhc2guYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19oYXNoLmMuZmlwcwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAwNjI4MzkzNiArMDIwMAotKysr IG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMJMjAxNS0wNi0xNSAx NzozMDowMC4wMDYyODM5MzYgKzAyMDAKLUBAIC0wLDAgKzEsMzU4IEBACi0rLyogZmlwcy9yYW5k L2ZpcHNfZHJiZ19oYXNoLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24g KHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwot Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgot KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1 dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoK LSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAg ICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu Ci0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIK LSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKyNkZWZpbmUgT1BFTlNTTF9G SVBTQVBJCi0rCi0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wu aCIKLSsKLSsvKiBUaGlzIGlzIEhhc2hfZGYgZnJvbSBTUCA4MDAtOTAgMTAuNC4xICovCi0rCi0r c3RhdGljIGludCBoYXNoX2RmKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0r ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxl biwKLSsgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3Qg aW4ybGVuLAotKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNp emVfdCBpbjNsZW4sCi0rICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu NCwgc2l6ZV90IGluNGxlbikKLSt7Ci0rICAgIEVWUF9NRF9DVFggKm1jdHggPSAmZGN0eC0+ZC5o YXNoLm1jdHg7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnZ0bXAgPSBkY3R4LT5kLmhhc2gudnRtcDsK LSsgICAgdW5zaWduZWQgY2hhciB0bXBbNl07Ci0rICAgIC8qIFN0YW5kYXJkIG9ubHkgZXZlciBu ZWVkcyBzZWVkbGVuIGJ5dGVzIHdoaWNoIGlzIGFsd2F5cyBsZXNzIHRoYW4KLSsgICAgICogbWF4 aW11bSBwZXJtaXR0ZWQgc28gbm8gbmVlZCB0byBjaGVjayBsZW5ndGguCi0rICAgICAqLwotKyAg ICBzaXplX3Qgb3V0bGVuID0gZGN0eC0+c2VlZGxlbjsKLSsgICAgdG1wWzBdID0gMTsKLSsgICAg dG1wWzFdID0gKChvdXRsZW4gKiA4KSA+PiAyNCkgJiAweGZmOwotKyAgICB0bXBbMl0gPSAoKG91 dGxlbiAqIDgpID4+IDE2KSAmIDB4ZmY7Ci0rICAgIHRtcFszXSA9ICgob3V0bGVuICogOCkgPj4g OCkgJiAweGZmOwotKyAgICB0bXBbNF0gPSAob3V0bGVuICogOCkgJiAweGZmOwotKyAgICBpZiAo IWluMSkgewotKyAgICAgICAgdG1wWzVdID0gKHVuc2lnbmVkIGNoYXIpaW4xbGVuOwotKyAgICAg ICAgaW4xID0gdG1wICsgNTsKLSsgICAgICAgIGluMWxlbiA9IDE7Ci0rICAgIH0KLSsgICAgZm9y ICg7OykgewotKyAgICAgICAgaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgZGN0eC0+ZC5oYXNo Lm1kKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIGlmICghRklQU19kaWdlc3R1 cGRhdGUobWN0eCwgdG1wLCA1KSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIGlm IChpbjEgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMSwgaW4xbGVuKSkKLSsgICAgICAg ICAgICByZXR1cm4gMDsKLSsgICAgICAgIGlmIChpbjIgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1j dHgsIGluMiwgaW4ybGVuKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIGlmIChp bjMgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIGluMywgaW4zbGVuKSkKLSsgICAgICAgICAg ICByZXR1cm4gMDsKLSsgICAgICAgIGlmIChpbjQgJiYgIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgs IGluNCwgaW40bGVuKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIGlmIChvdXRs ZW4gPCBkY3R4LT5ibG9ja2xlbmd0aCkgewotKyAgICAgICAgICAgIGlmICghRklQU19kaWdlc3Rm aW5hbChtY3R4LCB2dG1wLCBOVUxMKSkKLSsgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAg ICAgICAgICAgbWVtY3B5KG91dCwgdnRtcCwgb3V0bGVuKTsKLSsgICAgICAgICAgICBPUEVOU1NM X2NsZWFuc2UodnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKyAgICAgICAgICAgIHJldHVybiAx OwotKyAgICAgICAgfSBlbHNlIGlmICghRklQU19kaWdlc3RmaW5hbChtY3R4LCBvdXQsIE5VTEwp KQotKyAgICAgICAgICAgIHJldHVybiAwOwotKwotKyAgICAgICAgb3V0bGVuIC09IGRjdHgtPmJs b2NrbGVuZ3RoOwotKyAgICAgICAgaWYgKG91dGxlbiA9PSAwKQotKyAgICAgICAgICAgIHJldHVy biAxOwotKyAgICAgICAgdG1wWzBdKys7Ci0rICAgICAgICBvdXQgKz0gZGN0eC0+YmxvY2tsZW5n dGg7Ci0rICAgIH0KLSt9Ci0rCi0rLyogQWRkIGFuIHVuc2lnbmVkIGJ1ZmZlciB0byB0aGUgYnVm IHZhbHVlLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gYnVmLiBGb3IKLSsgKiB0aGlzIGFsZ29yaXRo bSB0aGUgbGVuZ3RoIG9mIGlucHV0IG5ldmVyIGV4Y2VlZHMgdGhlIHNlZWQgbGVuZ3RoLgotKyAq LwotKwotK3N0YXRpYyB2b2lkIGN0eF9hZGRfYnVmKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBj aGFyICpidWYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqaW4sIHNp emVfdCBpbmxlbikKLSt7Ci0rICAgIHNpemVfdCBpID0gaW5sZW47Ci0rICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKnE7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYywgKnA7Ci0rICAgIHAgPSBidWYgKyBk Y3R4LT5zZWVkbGVuOwotKyAgICBxID0gaW4gKyBpbmxlbjsKLSsKLSsgICAgT1BFTlNTTF9hc3Nl cnQoaSA8PSBkY3R4LT5zZWVkbGVuKTsKLSsKLSsgICAgLyogU3BlY2lhbCBjYXNlOiB6ZXJvIGxl bmd0aCwganVzdCBpbmNyZW1lbnQgYnVmZmVyICovCi0rICAgIGlmIChpKQotKyAgICAgICAgYyA9 IDA7Ci0rICAgIGVsc2UKLSsgICAgICAgIGMgPSAxOwotKwotKyAgICB3aGlsZSAoaSkgewotKyAg ICAgICAgaW50IHI7Ci0rICAgICAgICBwLS07Ci0rICAgICAgICBxLS07Ci0rICAgICAgICByID0g KnAgKyAqcSArIGM7Ci0rICAgICAgICAvKiBDYXJyeSAqLwotKyAgICAgICAgaWYgKHIgPiAweGZm KQotKyAgICAgICAgICAgIGMgPSAxOwotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAgIGMgPSAw OwotKyAgICAgICAgKnAgPSByICYgMHhmZjsKLSsgICAgICAgIGktLTsKLSsgICAgfQotKwotKyAg ICBpID0gZGN0eC0+c2VlZGxlbiAtIGlubGVuOwotKwotKyAgICAvKiBJZiBub3QgYWRkaW5nIHdo b2xlIGJ1ZmZlciBoYW5kbGUgZmluYWwgY2FycmllcyAqLwotKyAgICBpZiAoYyAmJiBpKSB7Ci0r ICAgICAgICBkbyB7Ci0rICAgICAgICAgICAgcC0tOwotKyAgICAgICAgICAgIGMgPSAqcDsKLSsg ICAgICAgICAgICBjKys7Ci0rICAgICAgICAgICAgKnAgPSBjOwotKyAgICAgICAgICAgIGlmIChj KQotKyAgICAgICAgICAgICAgICByZXR1cm47Ci0rICAgICAgICB9IHdoaWxlIChpLS0pOwotKyAg ICB9Ci0rfQotKwotKy8qIEZpbmFsaXNlIGFuZCBhZGQgaGFzaCB0byBWICovCi0rCi0rc3RhdGlj IGludCBjdHhfYWRkX21kKERSQkdfQ1RYICpkY3R4KQotK3sKLSsgICAgaWYgKCFGSVBTX2RpZ2Vz dGZpbmFsKCZkY3R4LT5kLmhhc2gubWN0eCwgZGN0eC0+ZC5oYXNoLnZ0bXAsIE5VTEwpKQotKyAg ICAgICAgcmV0dXJuIDA7Ci0rICAgIGN0eF9hZGRfYnVmKGRjdHgsIGRjdHgtPmQuaGFzaC5WLCBk Y3R4LT5kLmhhc2gudnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKyAgICByZXR1cm4gMTsKLSt9 Ci0rCi0rc3RhdGljIGludCBoYXNoX2dlbihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAq b3V0LCBzaXplX3Qgb3V0bGVuKQotK3sKLSsgICAgRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4 LT5kLmhhc2g7Ci0rICAgIGlmIChvdXRsZW4gPT0gMCkKLSsgICAgICAgIHJldHVybiAxOwotKyAg ICBtZW1jcHkoaGN0eC0+dnRtcCwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7Ci0rICAgIGZvciAo OzspIHsKLSsgICAgICAgIEZJUFNfZGlnZXN0aW5pdCgmaGN0eC0+bWN0eCwgaGN0eC0+bWQpOwot KyAgICAgICAgRklQU19kaWdlc3R1cGRhdGUoJmhjdHgtPm1jdHgsIGhjdHgtPnZ0bXAsIGRjdHgt PnNlZWRsZW4pOwotKyAgICAgICAgaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1Qp ICYmICFkY3R4LT5sYl92YWxpZCkgewotKyAgICAgICAgICAgIEZJUFNfZGlnZXN0ZmluYWwoJmhj dHgtPm1jdHgsIGRjdHgtPmxiLCBOVUxMKTsKLSsgICAgICAgICAgICBkY3R4LT5sYl92YWxpZCA9 IDE7Ci0rICAgICAgICB9IGVsc2UgaWYgKG91dGxlbiA8IGRjdHgtPmJsb2NrbGVuZ3RoKSB7Ci0r ICAgICAgICAgICAgRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgaGN0eC0+dnRtcCwgTlVM TCk7Ci0rICAgICAgICAgICAgaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBoY3R4LT52 dG1wKSkKLSsgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgbWVtY3B5KG91 dCwgaGN0eC0+dnRtcCwgb3V0bGVuKTsKLSsgICAgICAgICAgICByZXR1cm4gMTsKLSsgICAgICAg IH0gZWxzZSB7Ci0rICAgICAgICAgICAgRklQU19kaWdlc3RmaW5hbCgmaGN0eC0+bWN0eCwgb3V0 LCBOVUxMKTsKLSsgICAgICAgICAgICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91 dCkpCi0rICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgIG91dGxlbiAtPSBk Y3R4LT5ibG9ja2xlbmd0aDsKLSsgICAgICAgICAgICBpZiAob3V0bGVuID09IDApCi0rICAgICAg ICAgICAgICAgIHJldHVybiAxOwotKyAgICAgICAgICAgIG91dCArPSBkY3R4LT5ibG9ja2xlbmd0 aDsKLSsgICAgICAgIH0KLSsgICAgICAgIGN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPnZ0bXAsIE5V TEwsIDApOwotKyAgICB9Ci0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2luc3RhbnRpYXRl KERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZV9s ZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqcHN0ciwgc2l6ZV90IHBzdHJfbGVuKQotK3sKLSsgICAgRFJCR19IQVNIX0NUWCAqaGN0eCA9 ICZkY3R4LT5kLmhhc2g7Ci0rICAgIGlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5WLAotKyAgICAg ICAgICAgICAgICAgZW50LCBlbnRfbGVuLCBub25jZSwgbm9uY2VfbGVuLCBwc3RyLCBwc3RyX2xl biwgTlVMTCwgMCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFoYXNoX2RmKGRjdHgs IGhjdHgtPkMsCi0rICAgICAgICAgICAgICAgICBOVUxMLCAwLCBoY3R4LT5WLCBkY3R4LT5zZWVk bGVuLCBOVUxMLCAwLCBOVUxMLCAwKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyNpZmRlZiBI QVNIX0RSQkdfVFJBQ0UKLSsgICAgZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0ZXIgaW5zdGFudGlh dGU6XG4iKTsKLSsgICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsK LSsgICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsjZW5kaWYK LSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3Jlc2VlZChEUkJH X0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqZW50LCBzaXplX3QgZW50X2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQotK3sKLSsgICAgRFJC R19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7Ci0rICAgIC8qIFYgYWJvdXQgdG8gYmUg dXBkYXRlZCBzbyB1c2UgQyBhcyBvdXRwdXQgaW5zdGVhZCAqLwotKyAgICBpZiAoIWhhc2hfZGYo ZGN0eCwgaGN0eC0+QywKLSsgICAgICAgICAgICAgICAgIE5VTEwsIDEsIGhjdHgtPlYsIGRjdHgt PnNlZWRsZW4sCi0rICAgICAgICAgICAgICAgICBlbnQsIGVudF9sZW4sIGFkaW4sIGFkaW5fbGVu KSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBtZW1jcHkoaGN0eC0+ViwgaGN0eC0+QywgZGN0 eC0+c2VlZGxlbik7Ci0rICAgIGlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLCBOVUxMLCAwLAot KyAgICAgICAgICAgICAgICAgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwgTlVMTCwgMCwgTlVMTCwg MCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCi0rICAgIGZw cmludGYoc3RkZXJyLCAiVitDIGFmdGVyIHJlc2VlZDpcbiIpOwotKyAgICBoZXhwcmludChzdGRl cnIsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOwotKyAgICBoZXhwcmludChzdGRlcnIsIGhjdHgt PkMsIGRjdHgtPnNlZWRsZW4pOwotKyNlbmRpZgotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3Rh dGljIGludCBkcmJnX2hhc2hfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNp emVfdCBhZGluX2xlbikKLSt7Ci0rICAgIERSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5o YXNoOwotKyAgICBFVlBfTURfQ1RYICptY3R4ID0gJmhjdHgtPm1jdHg7Ci0rICAgIHVuc2lnbmVk IGNoYXIgdG1wWzRdOwotKyAgICBpZiAoYWRpbiAmJiBhZGluX2xlbikgewotKyAgICAgICAgdG1w WzBdID0gMjsKLSsgICAgICAgIGlmICghRklQU19kaWdlc3Rpbml0KG1jdHgsIGhjdHgtPm1kKSkK LSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIGlmICghRVZQX0RpZ2VzdFVwZGF0ZSht Y3R4LCB0bXAsIDEpKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgaWYgKCFFVlBf RGlnZXN0VXBkYXRlKG1jdHgsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pKQotKyAgICAgICAgICAg IHJldHVybiAwOwotKyAgICAgICAgaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGFkaW4sIGFk aW5fbGVuKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIGlmICghY3R4X2FkZF9t ZChkY3R4KSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBpZiAoIWhhc2hf Z2VuKGRjdHgsIG91dCwgb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICB0bXBb MF0gPSAzOwotKyAgICBpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBoY3R4LT5tZCkpCi0rICAg ICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIHRtcCwgMSkp Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFFVlBfRGlnZXN0VXBkYXRlKG1jdHgsIGhj dHgtPlYsIGRjdHgtPnNlZWRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIGlmICgh Y3R4X2FkZF9tZChkY3R4KSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBjdHhfYWRkX2J1 ZihkY3R4LCBoY3R4LT5WLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsKLSsgICAgdG1wWzBd ID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDI0KSAmIDB4ZmY7Ci0rICAgIHRtcFsxXSA9IChk Y3R4LT5yZXNlZWRfY291bnRlciA+PiAxNikgJiAweGZmOwotKyAgICB0bXBbMl0gPSAoZGN0eC0+ cmVzZWVkX2NvdW50ZXIgPj4gOCkgJiAweGZmOwotKyAgICB0bXBbM10gPSBkY3R4LT5yZXNlZWRf Y291bnRlciAmIDB4ZmY7Ci0rICAgIGN0eF9hZGRfYnVmKGRjdHgsIGhjdHgtPlYsIHRtcCwgNCk7 Ci0rI2lmZGVmIEhBU0hfRFJCR19UUkFDRQotKyAgICBmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRl ciBnZW5lcmF0ZTpcbiIpOwotKyAgICBoZXhwcmludChzdGRlcnIsIGhjdHgtPlYsIGRjdHgtPnNl ZWRsZW4pOwotKyAgICBoZXhwcmludChzdGRlcnIsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwot KyNlbmRpZgotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX2hhc2hfdW5p bnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgm ZGN0eC0+ZC5oYXNoLm1jdHgpOwotKyAgICBPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQuaGFzaCwg c2l6ZW9mKERSQkdfSEFTSF9DVFgpKTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK2ludCBmaXBz X2RyYmdfaGFzaF9pbml0KERSQkdfQ1RYICpkY3R4KQotK3sKLSsgICAgY29uc3QgRVZQX01EICpt ZDsKLSsgICAgRFJCR19IQVNIX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhhc2g7Ci0rICAgIG1kID0g RklQU19nZXRfZGlnZXN0YnluaWQoZGN0eC0+dHlwZSk7Ci0rICAgIGlmICghbWQpCi0rICAgICAg ICByZXR1cm4gLTI7Ci0rICAgIHN3aXRjaCAoZGN0eC0+dHlwZSkgewotKyAgICBjYXNlIE5JRF9z aGExOgotKyAgICAgICAgZGN0eC0+c3RyZW5ndGggPSAxMjg7Ci0rICAgICAgICBicmVhazsKLSsK LSsgICAgY2FzZSBOSURfc2hhMjI0OgotKyAgICAgICAgZGN0eC0+c3RyZW5ndGggPSAxOTI7Ci0r ICAgICAgICBicmVhazsKLSsKLSsgICAgZGVmYXVsdDoKLSsgICAgICAgIGRjdHgtPnN0cmVuZ3Ro ID0gMjU2OwotKyAgICAgICAgYnJlYWs7Ci0rICAgIH0KLSsKLSsgICAgZGN0eC0+aW5zdGFudGlh dGUgPSBkcmJnX2hhc2hfaW5zdGFudGlhdGU7Ci0rICAgIGRjdHgtPnJlc2VlZCA9IGRyYmdfaGFz aF9yZXNlZWQ7Ci0rICAgIGRjdHgtPmdlbmVyYXRlID0gZHJiZ19oYXNoX2dlbmVyYXRlOwotKyAg ICBkY3R4LT51bmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX3VuaW5zdGFudGlhdGU7Ci0rCi0rICAg IGRjdHgtPmQuaGFzaC5tZCA9IG1kOwotKyAgICBFVlBfTURfQ1RYX2luaXQoJmhjdHgtPm1jdHgp OwotKwotKyAgICAvKiBUaGVzZSBhcmUgdGFrZW4gZnJvbSBTUCA4MDAtOTAgMTAuMSB0YWJsZSAy ICovCi0rCi0rICAgIGRjdHgtPmJsb2NrbGVuZ3RoID0gTV9FVlBfTURfc2l6ZShtZCk7Ci0rICAg IGlmIChkY3R4LT5ibG9ja2xlbmd0aCA+IDMyKQotKyAgICAgICAgZGN0eC0+c2VlZGxlbiA9IDEx MTsKLSsgICAgZWxzZQotKyAgICAgICAgZGN0eC0+c2VlZGxlbiA9IDU1OwotKwotKyAgICBkY3R4 LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8gODsKLSsgICAgZGN0eC0+bWF4X2VudHJv cHkgPSBEUkJHX01BWF9MRU5HVEg7Ci0rCi0rICAgIGRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1p bl9lbnRyb3B5IC8gMjsKLSsgICAgZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOwot KwotKyAgICBkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKLSsgICAgZGN0eC0+bWF4 X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7Ci0rCi0rICAgIGRjdHgtPm1heF9yZXF1ZXN0ID0gMSA8 PCAxNjsKLSsgICAgZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMSA8PCAyNDsKLSsKLSsgICAgcmV0 dXJuIDE7Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19kcmJn X2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMK LS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jLmZpcHMJMjAx NS0wNi0xNSAxNzozMDowMC4wMDYyODM5MzYgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlw dG8vZmlwcy9maXBzX2RyYmdfaG1hYy5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDA2MjgzOTM2ICsw MjAwCi1AQCAtMCwwICsxLDI3MCBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfaG1hYy5jICov Ci0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykg Zm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq IENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0r ICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv Ci0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wu b3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tu b3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK LSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws Ci0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9hZXMu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19y YW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLStzdGF0aWMgaW50IGRyYmdf aG1hY191cGRhdGUoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNp emVfdCBpbjNsZW4pCi0rewotKyAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBjMCA9IDAsIGMxID0g MTsKLSsgICAgRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0rICAgIEhNQUNf Q1RYICpoY3R4ID0gJmhtYWMtPmhjdHg7Ci0rCi0rICAgIGlmICghSE1BQ19Jbml0X2V4KGhjdHgs IGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9j a2xlbmd0aCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4 LCAmYzAsIDEpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChpbjFsZW4gJiYgIUhNQUNf VXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAo aW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikpCi0rICAgICAgICByZXR1 cm4gMDsKLSsgICAgaWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4p KQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBobWFj LT5LLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBpZiAoIUhNQUNfSW5pdF9l eChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKyAg ICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0 eC0+YmxvY2tsZW5ndGgpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIGlmICghSE1BQ19G aW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBp ZiAoIWluMWxlbiAmJiAhaW4ybGVuICYmICFpbjNsZW4pCi0rICAgICAgICByZXR1cm4gMTsKLSsK LSsgICAgaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgs IGhtYWMtPm1kLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoIUhNQUNfVXBk YXRlKGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsgICAgICAgIHJldHVybiAw OwotKyAgICBpZiAoIUhNQUNfVXBkYXRlKGhjdHgsICZjMSwgMSkpCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgaWYgKGluMWxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4xLCBpbjFsZW4pKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChpbjJsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgs IGluMiwgaW4ybGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoaW4zbGVuICYmICFI TUFDX1VwZGF0ZShoY3R4LCBpbjMsIGluM2xlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsg ICAgaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPkssIE5VTEwpKQotKyAgICAgICAgcmV0dXJu IDA7Ci0rCi0rICAgIGlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2Nr bGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFI TUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsKLSsgICAgaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwpKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIHJldHVybiAxOwotKwotK30KLSsKLStzdGF0aWMg aW50IGRyYmdfaG1hY19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRf bGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VfbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3RyX2xlbikKLSt7Ci0r ICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOwotKyAgICBtZW1zZXQoaG1h Yy0+SywgMCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKyAgICBtZW1zZXQoaG1hYy0+ViwgMSwgZGN0 eC0+YmxvY2tsZW5ndGgpOwotKyAgICBpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNlX2xlbiwgcHN0 ciwgcHN0cl9sZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rI2lmZGVmIEhNQUNfRFJCR19U UkFDRQotKyAgICBmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciBpbnN0YW50aWF0ZTpcbiIpOwot KyAgICBoZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsKLSsgICAg aGV4cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rI2VuZGlmCi0r ICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50IGRyYmdfaG1hY19yZXNlZWQoRFJCR19D VFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKLSt7Ci0rICAgIGlmICgh ZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBlbnQsIGVudF9sZW4sIGFkaW4sIGFkaW5fbGVuLCBOVUxM LCAwKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyNpZmRlZiBITUFDX0RSQkdfVFJBQ0UKLSsg ICAgewotKyAgICAgICAgRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0rICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciByZXNlZWQ6XG4iKTsKLSsgICAgICAgIGhl eHByaW50KHN0ZGVyciwgaG1hYy0+SywgaG1hYy0+YmxvY2tsZW5ndGgpOwotKyAgICAgICAgaGV4 cHJpbnQoc3RkZXJyLCBobWFjLT5WLCBobWFjLT5ibG9ja2xlbmd0aCk7Ci0rICAgIH0KLSsjZW5k aWYKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19obWFjX2dlbmVyYXRl KERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rewotKyAgICBE UkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKLSsgICAgSE1BQ19DVFggKmhjdHgg PSAmaG1hYy0+aGN0eDsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqVnRtcCA9IGhtYWMtPlY7 Ci0rICAgIGlmIChhZGluX2xlbiAmJiAhZHJiZ19obWFjX3VwZGF0ZShkY3R4LCBhZGluLCBhZGlu X2xlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgZm9yICg7 OykgewotKyAgICAgICAgaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+Ymxv Y2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAg ICAgIGlmICghSE1BQ19VcGRhdGUoaGN0eCwgVnRtcCwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKyAg ICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19G TEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxpZCkgewotKyAgICAgICAgICAgIGlmICghSE1BQ19G aW5hbChoY3R4LCBkY3R4LT5sYiwgTlVMTCkpCi0rICAgICAgICAgICAgICAgIHJldHVybiAwOwot KyAgICAgICAgICAgIGRjdHgtPmxiX3ZhbGlkID0gMTsKLSsgICAgICAgICAgICBWdG1wID0gZGN0 eC0+bGI7Ci0rICAgICAgICAgICAgY29udGludWU7Ci0rICAgICAgICB9IGVsc2UgaWYgKG91dGxl biA+IGRjdHgtPmJsb2NrbGVuZ3RoKSB7Ci0rICAgICAgICAgICAgaWYgKCFITUFDX0ZpbmFsKGhj dHgsIG91dCwgTlVMTCkpCi0rICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAg IGlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgb3V0KSkKLSsgICAgICAgICAgICAgICAg cmV0dXJuIDA7Ci0rICAgICAgICAgICAgVnRtcCA9IG91dDsKLSsgICAgICAgIH0gZWxzZSB7Ci0r ICAgICAgICAgICAgaWYgKCFITUFDX0ZpbmFsKGhjdHgsIGhtYWMtPlYsIE5VTEwpKQotKyAgICAg ICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190 ZXN0KGRjdHgsIGhtYWMtPlYpKQotKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAg ICAgICBtZW1jcHkob3V0LCBobWFjLT5WLCBvdXRsZW4pOwotKyAgICAgICAgICAgIGJyZWFrOwot KyAgICAgICAgfQotKyAgICAgICAgb3V0ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOwotKyAgICAgICAg b3V0bGVuIC09IGRjdHgtPmJsb2NrbGVuZ3RoOwotKyAgICB9Ci0rICAgIGlmICghZHJiZ19obWFj X3VwZGF0ZShkY3R4LCBhZGluLCBhZGluX2xlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCi0rICAgICAg ICByZXR1cm4gMDsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19o bWFjX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0rewotKyAgICBITUFDX0NUWF9jbGVh bnVwKCZkY3R4LT5kLmhtYWMuaGN0eCk7Ci0rICAgIE9QRU5TU0xfY2xlYW5zZSgmZGN0eC0+ZC5o bWFjLCBzaXplb2YoRFJCR19ITUFDX0NUWCkpOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0raW50 IGZpcHNfZHJiZ19obWFjX2luaXQoRFJCR19DVFggKmRjdHgpCi0rewotKyAgICBjb25zdCBFVlBf TUQgKm1kID0gTlVMTDsKLSsgICAgRFJCR19ITUFDX0NUWCAqaGN0eCA9ICZkY3R4LT5kLmhtYWM7 Ci0rICAgIGRjdHgtPnN0cmVuZ3RoID0gMjU2OwotKyAgICBzd2l0Y2ggKGRjdHgtPnR5cGUpIHsK LSsgICAgY2FzZSBOSURfaG1hY1dpdGhTSEExOgotKyAgICAgICAgbWQgPSBFVlBfc2hhMSgpOwot KyAgICAgICAgZGN0eC0+c3RyZW5ndGggPSAxMjg7Ci0rICAgICAgICBicmVhazsKLSsKLSsgICAg Y2FzZSBOSURfaG1hY1dpdGhTSEEyMjQ6Ci0rICAgICAgICBtZCA9IEVWUF9zaGEyMjQoKTsKLSsg ICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTkyOwotKyAgICAgICAgYnJlYWs7Ci0rCi0rICAgIGNh c2UgTklEX2htYWNXaXRoU0hBMjU2OgotKyAgICAgICAgbWQgPSBFVlBfc2hhMjU2KCk7Ci0rICAg ICAgICBicmVhazsKLSsKLSsgICAgY2FzZSBOSURfaG1hY1dpdGhTSEEzODQ6Ci0rICAgICAgICBt ZCA9IEVWUF9zaGEzODQoKTsKLSsgICAgICAgIGJyZWFrOwotKwotKyAgICBjYXNlIE5JRF9obWFj V2l0aFNIQTUxMjoKLSsgICAgICAgIG1kID0gRVZQX3NoYTUxMigpOwotKyAgICAgICAgYnJlYWs7 Ci0rCi0rICAgIGRlZmF1bHQ6Ci0rICAgICAgICBkY3R4LT5zdHJlbmd0aCA9IDA7Ci0rICAgICAg ICByZXR1cm4gLTI7Ci0rICAgIH0KLSsgICAgZGN0eC0+aW5zdGFudGlhdGUgPSBkcmJnX2htYWNf aW5zdGFudGlhdGU7Ci0rICAgIGRjdHgtPnJlc2VlZCA9IGRyYmdfaG1hY19yZXNlZWQ7Ci0rICAg IGRjdHgtPmdlbmVyYXRlID0gZHJiZ19obWFjX2dlbmVyYXRlOwotKyAgICBkY3R4LT51bmluc3Rh bnRpYXRlID0gZHJiZ19obWFjX3VuaW5zdGFudGlhdGU7Ci0rICAgIEhNQUNfQ1RYX2luaXQoJmhj dHgtPmhjdHgpOwotKyAgICBoY3R4LT5tZCA9IG1kOwotKyAgICBkY3R4LT5ibG9ja2xlbmd0aCA9 IE1fRVZQX01EX3NpemUobWQpOwotKyAgICBkY3R4LT5zZWVkbGVuID0gTV9FVlBfTURfc2l6ZSht ZCk7Ci0rCi0rICAgIGRjdHgtPm1pbl9lbnRyb3B5ID0gZGN0eC0+c3RyZW5ndGggLyA4OwotKyAg ICBkY3R4LT5tYXhfZW50cm9weSA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsgICAgZGN0eC0+bWlu X25vbmNlID0gZGN0eC0+bWluX2VudHJvcHkgLyAyOwotKyAgICBkY3R4LT5tYXhfbm9uY2UgPSBE UkJHX01BWF9MRU5HVEg7Ci0rCi0rICAgIGRjdHgtPm1heF9wZXJzID0gRFJCR19NQVhfTEVOR1RI OwotKyAgICBkY3R4LT5tYXhfYWRpbiA9IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsgICAgZGN0eC0+ bWF4X3JlcXVlc3QgPSAxIDw8IDE2OwotKyAgICBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSAxIDw8 IDI0OwotKwotKyAgICByZXR1cm4gMTsKLSt9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlw dG8vZmlwcy9maXBzX2RyYmdfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdf bGliLmMuZmlwcwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAwNzI4Mzk1OSArMDIwMAotKysrIG9wZW5z c2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19saWIuYwkyMDE1LTA2LTE1IDE3OjMwOjAw LjAwNzI4Mzk1OSArMDIwMAotQEAgLTAsMCArMSw1NTMgQEAKLSsvKiBXcml0dGVuIGJ5IERyIFN0 ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBw cm9qZWN0LgotKyAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot KyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKLSsgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu T3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5j bHVkZSAiZmlwc19sb2NsLmgiCi0rI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsKLSsvKiBT dXBwb3J0IGZyYW1ld29yayBmb3IgU1A4MDAtOTAgRFJCR3MgKi8KLSsKLStpbnQgRklQU19kcmJn X2luaXQoRFJCR19DVFggKmRjdHgsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi0rewot KyAgICBpbnQgcnY7Ci0rICAgIG1lbXNldChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKLSsg ICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKLSsgICAgZGN0eC0+ eGZsYWdzID0gZmxhZ3M7Ci0rICAgIGRjdHgtPnR5cGUgPSB0eXBlOwotKwotKyAgICBkY3R4LT5p ZmxhZ3MgPSAwOwotKyAgICBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuID0gMDsKLSsgICAgZGN0eC0+ aGVhbHRoX2NoZWNrX2NudCA9IDA7Ci0rICAgIGRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCA9 IERSQkdfSEVBTFRIX0lOVEVSVkFMOwotKwotKyAgICBydiA9IGZpcHNfZHJiZ19oYXNoX2luaXQo ZGN0eCk7Ci0rCi0rICAgIGlmIChydiA9PSAtMikKLSsgICAgICAgIHJ2ID0gZmlwc19kcmJnX2N0 cl9pbml0KGRjdHgpOwotKyAgICBpZiAocnYgPT0gLTIpCi0rICAgICAgICBydiA9IGZpcHNfZHJi Z19obWFjX2luaXQoZGN0eCk7Ci0rCi0rICAgIGlmIChydiA8PSAwKSB7Ci0rICAgICAgICBpZiAo cnYgPT0gLTIpCi0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJ UFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUpOwotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5H X0RSQkcpOwotKyAgICB9Ci0rCi0rICAgIC8qIElmIG5vdCBpbiB0ZXN0IG1vZGUgcnVuIHNlbGZ0 ZXN0cyBvbiBEUkJHIG9mIHRoZSBzYW1lIHR5cGUgKi8KLSsKLSsgICAgaWYgKCEoZGN0eC0+eGZs YWdzICYgRFJCR19GTEFHX1RFU1QpKSB7Ci0rICAgICAgICBpZiAoIUZJUFNfZHJiZ19oZWFsdGhf Y2hlY2soZGN0eCkpIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5J VCwgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUpOwotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAg ICAgICAgfQotKyAgICB9Ci0rCi0rICAgIHJldHVybiBydjsKLSt9Ci0rCi0rRFJCR19DVFggKkZJ UFNfZHJiZ19uZXcoaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncykKLSt7Ci0rICAgIERSQkdf Q1RYICpkY3R4OwotKyAgICBkY3R4ID0gT1BFTlNTTF9tYWxsb2Moc2l6ZW9mKERSQkdfQ1RYKSk7 Ci0rICAgIGlmICghZGN0eCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX05F VywgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0K LSsKLSsgICAgaWYgKHR5cGUgPT0gMCkgewotKyAgICAgICAgbWVtc2V0KGRjdHgsIDAsIHNpemVv ZihEUkJHX0NUWCkpOwotKyAgICAgICAgZGN0eC0+dHlwZSA9IDA7Ci0rICAgICAgICBkY3R4LT5z dGF0dXMgPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEOwotKyAgICAgICAgcmV0dXJuIGRjdHg7 Ci0rICAgIH0KLSsKLSsgICAgaWYgKEZJUFNfZHJiZ19pbml0KGRjdHgsIHR5cGUsIGZsYWdzKSA8 PSAwKSB7Ci0rICAgICAgICBPUEVOU1NMX2ZyZWUoZGN0eCk7Ci0rICAgICAgICByZXR1cm4gTlVM TDsKLSsgICAgfQotKwotKyAgICByZXR1cm4gZGN0eDsKLSt9Ci0rCi0rdm9pZCBGSVBTX2RyYmdf ZnJlZShEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIGlmIChkY3R4LT51bmluc3RhbnRpYXRlKQot KyAgICAgICAgZGN0eC0+dW5pbnN0YW50aWF0ZShkY3R4KTsKLSsgICAgLyogRG9uJ3QgZnJlZSB1 cCBkZWZhdWx0IERSQkcgKi8KLSsgICAgaWYgKGRjdHggPT0gRklQU19nZXRfZGVmYXVsdF9kcmJn KCkpIHsKLSsgICAgICAgIG1lbXNldChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKLSsgICAg ICAgIGRjdHgtPnR5cGUgPSAwOwotKyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNf VU5JTklUSUFMSVNFRDsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAgIE9QRU5TU0xfY2xlYW5zZSgm ZGN0eC0+ZCwgc2l6ZW9mKGRjdHgtPmQpKTsKLSsgICAgICAgIE9QRU5TU0xfZnJlZShkY3R4KTsK LSsgICAgfQotK30KLSsKLStzdGF0aWMgc2l6ZV90IGZpcHNfZ2V0X2VudHJvcHkoRFJCR19DVFgg KmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotK3sKLSsg ICAgdW5zaWduZWQgY2hhciAqdG91dCwgKnA7Ci0rICAgIHNpemVfdCBibCA9IGRjdHgtPmVudHJv cHlfYmxvY2tsZW4sIHJ2OwotKyAgICBpZiAoIWRjdHgtPmdldF9lbnRyb3B5KQotKyAgICAgICAg cmV0dXJuIDA7Ci0rICAgIGlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCB8fCAhYmwp Ci0rICAgICAgICByZXR1cm4gZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgcG91dCwgZW50cm9weSwg bWluX2xlbiwgbWF4X2xlbik7Ci0rICAgIHJ2ID0gZGN0eC0+Z2V0X2VudHJvcHkoZGN0eCwgJnRv dXQsIGVudHJvcHkgKyBibCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fbGVuICsg YmwsIG1heF9sZW4gKyBibCk7Ci0rICAgIGlmICh0b3V0ID09IE5VTEwpCi0rICAgICAgICByZXR1 cm4gMDsKLSsgICAgKnBvdXQgPSB0b3V0ICsgYmw7Ci0rICAgIGlmIChydiA8IChtaW5fbGVuICsg YmwpIHx8IChydiAlIGJsKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICAvKiBDb21wYXJlIGNv bnNlY3V0aXZlIGJsb2NrcyBmb3IgY29udGludW91cyBQUk5HIHRlc3QgKi8KLSsgICAgZm9yIChw ID0gdG91dDsgcCA8IHRvdXQgKyBydiAtIGJsOyBwICs9IGJsKSB7Ci0rICAgICAgICBpZiAoIW1l bWNtcChwLCBwICsgYmwsIGJsKSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf R0VUX0VOVFJPUFksIEZJUFNfUl9FTlRST1BZX1NPVVJDRV9TVFVDSyk7Ci0rICAgICAgICAgICAg cmV0dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsgICAgcnYgLT0gYmw7Ci0rICAgIGlmIChy diA+IG1heF9sZW4pCi0rICAgICAgICByZXR1cm4gbWF4X2xlbjsKLSsgICAgcmV0dXJuIHJ2Owot K30KLSsKLStzdGF0aWMgdm9pZCBmaXBzX2NsZWFudXBfZW50cm9weShEUkJHX0NUWCAqZGN0eCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHNp emVfdCBvbGVuKQotK3sKLSsgICAgc2l6ZV90IGJsOwotKyAgICBpZiAoZGN0eC0+eGZsYWdzICYg RFJCR19GTEFHX1RFU1QpCi0rICAgICAgICBibCA9IDA7Ci0rICAgIGVsc2UKLSsgICAgICAgIGJs ID0gZGN0eC0+ZW50cm9weV9ibG9ja2xlbjsKLSsgICAgLyogQ2FsbCBjbGVhbnVwIHdpdGggb3Jp Z2luYWwgYXJndW1lbnRzICovCi0rICAgIGRjdHgtPmNsZWFudXBfZW50cm9weShkY3R4LCBvdXQg LSBibCwgb2xlbiArIGJsKTsKLSt9Ci0rCi0raW50IEZJUFNfZHJiZ19pbnN0YW50aWF0ZShEUkJH X0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKQotK3sKLSsgICAgc2l6ZV90IGVudGxlbiA9IDAsIG5v bmNlbGVuID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciAqbm9uY2UgPSBOVUxMLCAqZW50cm9weSA9 IE5VTEw7Ci0rCi0rI2lmIDAKLSsgICAgLyogUHV0IGhlcmUgc28gZXJyb3Igc2NyaXB0IHBpY2tz IHRoZW0gdXAgKi8KLSsgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLAot KyAgICAgICAgICAgIEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HKTsKLSsg ICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5fRVJST1Jf U1RBVEUpOwotKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNf Ul9BTFJFQURZX0lOU1RBTlRJQVRFRCk7Ci0rICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19J TlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWSk7Ci0rICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdf Tk9OQ0UpOwotKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNf Ul9JTlNUQU5USUFURV9FUlJPUik7Ci0rICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNU QU5USUFURSwgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEKTsKLSsjZW5kaWYKLSsKLSsgICAg aW50IHIgPSAwOwotKwotKyAgICBpZiAocGVyc2xlbiA+IGRjdHgtPm1heF9wZXJzKSB7Ci0rICAg ICAgICByID0gRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJTkdfVE9PX0xPTkc7Ci0rICAgICAg ICBnb3RvIGVuZDsKLSsgICAgfQotKwotKyAgICBpZiAoIWRjdHgtPmluc3RhbnRpYXRlKSB7Ci0r ICAgICAgICByID0gRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEOwotKyAgICAgICAgZ290byBl bmQ7Ci0rICAgIH0KLSsKLSsgICAgaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19VTklO SVRJQUxJU0VEKSB7Ci0rICAgICAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VS Uk9SKQotKyAgICAgICAgICAgIHIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0rICAgICAgICBl bHNlCi0rICAgICAgICAgICAgciA9IEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRDsKLSsgICAg ICAgIGdvdG8gZW5kOwotKyAgICB9Ci0rCi0rICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVT X0VSUk9SOwotKwotKyAgICBlbnRsZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5 LCBkY3R4LT5zdHJlbmd0aCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY3R4LT5t aW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOwotKwotKyAgICBpZiAoZW50bGVuIDwgZGN0 eC0+bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpIHsKLSsgICAgICAg IHIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZOwotKyAgICAgICAgZ290byBlbmQ7 Ci0rICAgIH0KLSsKLSsgICAgaWYgKGRjdHgtPm1heF9ub25jZSA+IDAgJiYgZGN0eC0+Z2V0X25v bmNlKSB7Ci0rICAgICAgICBub25jZWxlbiA9IGRjdHgtPmdldF9ub25jZShkY3R4LCAmbm9uY2Us Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY3R4LT5zdHJlbmd0aCAvIDIs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkY3R4LT5taW5fbm9uY2UsIGRj dHgtPm1heF9ub25jZSk7Ci0rCi0rICAgICAgICBpZiAobm9uY2VsZW4gPCBkY3R4LT5taW5fbm9u Y2UgfHwgbm9uY2VsZW4gPiBkY3R4LT5tYXhfbm9uY2UpIHsKLSsgICAgICAgICAgICByID0gRklQ U19SX0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0U7Ci0rICAgICAgICAgICAgZ290byBlbmQ7Ci0rICAg ICAgICB9Ci0rCi0rICAgIH0KLSsKLSsgICAgaWYgKCFkY3R4LT5pbnN0YW50aWF0ZShkY3R4LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJvcHksIGVudGxlbiwgbm9uY2UsIG5vbmNl bGVuLCBwZXJzLCBwZXJzbGVuKSkgewotKyAgICAgICAgciA9IEZJUFNfUl9FUlJPUl9JTlNUQU5U SUFUSU5HX0RSQkc7Ci0rICAgICAgICBnb3RvIGVuZDsKLSsgICAgfQotKwotKyAgICBkY3R4LT5z dGF0dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKLSsgICAgaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJC R19DVVNUT01fUkVTRUVEKSkKLSsgICAgICAgIGRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsKLSsK LSsgZW5kOgotKwotKyAgICBpZiAoZW50cm9weSAmJiBkY3R4LT5jbGVhbnVwX2VudHJvcHkpCi0r ICAgICAgICBmaXBzX2NsZWFudXBfZW50cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOwotKwot KyAgICBpZiAobm9uY2UgJiYgZGN0eC0+Y2xlYW51cF9ub25jZSkKLSsgICAgICAgIGRjdHgtPmNs ZWFudXBfbm9uY2UoZGN0eCwgbm9uY2UsIG5vbmNlbGVuKTsKLSsKLSsgICAgaWYgKGRjdHgtPnN0 YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSkKLSsgICAgICAgIHJldHVybiAxOwotKwotKyAgICBp ZiAociAmJiAhKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCi0rICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIHIpOwotKwotKyAgICByZXR1cm4gMDsK LSsKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwKLSsgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlu bGVuLCBpbnQgaGNoZWNrKQotK3sKLSsgICAgdW5zaWduZWQgY2hhciAqZW50cm9weSA9IE5VTEw7 Ci0rICAgIHNpemVfdCBlbnRsZW4gPSAwOwotKyAgICBpbnQgciA9IDA7Ci0rCi0rI2lmIDAKLSsg ICAgRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEKTsK LSsgICAgRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIEZJUFNfUl9BRERJVElPTkFMX0lOUFVU X1RPT19MT05HKTsKLSsjZW5kaWYKLSsgICAgaWYgKGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRV U19SRUFEWQotKyAgICAgICAgJiYgZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1JFU0VFRCkg ewotKyAgICAgICAgaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKLSsgICAg ICAgICAgICByID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOwotKyAgICAgICAgZWxzZSBpZiAoZGN0 eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQpCi0rICAgICAgICAgICAgciA9 IEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEOwotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsK LSsgICAgaWYgKCFhZGluKQotKyAgICAgICAgYWRpbmxlbiA9IDA7Ci0rICAgIGVsc2UgaWYgKGFk aW5sZW4gPiBkY3R4LT5tYXhfYWRpbikgewotKyAgICAgICAgciA9IEZJUFNfUl9BRERJVElPTkFM X0lOUFVUX1RPT19MT05HOwotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsKLSsgICAgZGN0 eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Ci0rICAgIC8qIFBlZm9ybSBoZWFsdGggY2hl Y2sgb24gYWxsIHJlc2VlZCBvcGVyYXRpb25zIGlmIG5vdCBhIHByZWRpY3Rpb24KLSsgICAgICog cmVzaXN0YW5jZSByZXF1ZXN0IGFuZCBub3QgaW4gdGVzdCBtb2RlLgotKyAgICAgKi8KLSsgICAg aWYgKGhjaGVjayAmJiAhKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkgewotKyAgICAg ICAgaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKSB7Ci0rICAgICAgICAgICAgciA9 IEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFOwotKyAgICAgICAgICAgIGdvdG8gZW5kOwotKyAgICAg ICAgfQotKyAgICB9Ci0rCi0rICAgIGVudGxlbiA9IGZpcHNfZ2V0X2VudHJvcHkoZGN0eCwgJmVu dHJvcHksIGRjdHgtPnN0cmVuZ3RoLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRj dHgtPm1pbl9lbnRyb3B5LCBkY3R4LT5tYXhfZW50cm9weSk7Ci0rCi0rICAgIGlmIChlbnRsZW4g PCBkY3R4LT5taW5fZW50cm9weSB8fCBlbnRsZW4gPiBkY3R4LT5tYXhfZW50cm9weSkgewotKyAg ICAgICAgciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFk7Ci0rICAgICAgICBnb3Rv IGVuZDsKLSsgICAgfQotKwotKyAgICBpZiAoIWRjdHgtPnJlc2VlZChkY3R4LCBlbnRyb3B5LCBl bnRsZW4sIGFkaW4sIGFkaW5sZW4pKQotKyAgICAgICAgZ290byBlbmQ7Ci0rCi0rICAgIGRjdHgt PnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFQURZOwotKyAgICBpZiAoIShkY3R4LT5pZmxhZ3MgJiBE UkJHX0NVU1RPTV9SRVNFRUQpKQotKyAgICAgICAgZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSAxOwot KyBlbmQ6Ci0rCi0rICAgIGlmIChlbnRyb3B5ICYmIGRjdHgtPmNsZWFudXBfZW50cm9weSkKLSsg ICAgICAgIGZpcHNfY2xlYW51cF9lbnRyb3B5KGRjdHgsIGVudHJvcHksIGVudGxlbik7Ci0rCi0r ICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCi0rICAgICAgICByZXR1 cm4gMTsKLSsKLSsgICAgaWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIp KQotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRFJCR19SRVNFRUQsIHIpOwotKwotKyAgICByZXR1 cm4gMDsKLSt9Ci0rCi0raW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsCi0rICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5s ZW4pCi0rewotKyAgICByZXR1cm4gZHJiZ19yZXNlZWQoZGN0eCwgYWRpbiwgYWRpbmxlbiwgMSk7 Ci0rfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2NoZWNrKERSQkdfQ1RYICpkY3R4KQotK3sK LSsgICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQotKyAgICAgICAgcmV0dXJu IDE7Ci0rICAgIGRjdHgtPmhlYWx0aF9jaGVja19jbnQrKzsKLSsgICAgaWYgKGRjdHgtPmhlYWx0 aF9jaGVja19jbnQgPj0gZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsKSB7Ci0rICAgICAgICBp ZiAoIUZJUFNfZHJiZ19oZWFsdGhfY2hlY2soZGN0eCkpIHsKLSsgICAgICAgICAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfQ0hFQ0ssIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsKLSsgICAg ICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0KLSsgICAgfQotKyAgICByZXR1cm4gMTsKLSt9 Ci0rCi0raW50IEZJUFNfZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hh ciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWRp Y3Rpb25fcmVzaXN0YW5jZSwKLSsgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotK3sKLSsgICAgaW50IHIgPSAwOwotKwotKyAg ICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0dFTkVSQVRFLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJl dHVybiAwOwotKyAgICB9Ci0rCi0rICAgIGlmICghZmlwc19kcmJnX2NoZWNrKGRjdHgpKQotKyAg ICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIGlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNf UkVBRFkKLSsgICAgICAgICYmIGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRVNFRUQpIHsK LSsgICAgICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCi0rICAgICAg ICAgICAgciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKLSsgICAgICAgIGVsc2UgaWYgKGRjdHgt PnN0YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKyAgICAgICAgICAgIHIgPSBG SVBTX1JfTk9UX0lOU1RBTlRJQVRFRDsKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICB9Ci0rCi0r ICAgIGlmIChvdXRsZW4gPiBkY3R4LT5tYXhfcmVxdWVzdCkgewotKyAgICAgICAgciA9IEZJUFNf Ul9SRVFVRVNUX1RPT19MQVJHRV9GT1JfRFJCRzsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9 Ci0rCi0rICAgIGlmIChhZGlubGVuID4gZGN0eC0+bWF4X2FkaW4pIHsKLSsgICAgICAgIHIgPSBG SVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKLSsgICAgICAgIGdvdG8gZW5kOwotKyAg ICB9Ci0rCi0rICAgIGlmIChkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpCi0rICAg ICAgICBkY3R4LT5nZW5lcmF0ZShkY3R4LCBOVUxMLCBvdXRsZW4sIE5VTEwsIDApOwotKyAgICBl bHNlIGlmIChkY3R4LT5yZXNlZWRfY291bnRlciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCi0r ICAgICAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRVNFRUQ7Ci0rCi0rICAgIGlmIChk Y3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVTRUVEIHx8IHByZWRpY3Rpb25fcmVzaXN0YW5j ZSkgewotKyAgICAgICAgLyogSWYgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVlc3QgZG9uJ3Qg ZG8gaGVhbHRoIGNoZWNrICovCi0rICAgICAgICBpbnQgaGNoZWNrID0gcHJlZGljdGlvbl9yZXNp c3RhbmNlID8gMCA6IDE7Ci0rCi0rICAgICAgICBpZiAoIWRyYmdfcmVzZWVkKGRjdHgsIGFkaW4s IGFkaW5sZW4sIGhjaGVjaykpIHsKLSsgICAgICAgICAgICByID0gRklQU19SX1JFU0VFRF9FUlJP UjsKLSsgICAgICAgICAgICBnb3RvIGVuZDsKLSsgICAgICAgIH0KLSsgICAgICAgIGFkaW4gPSBO VUxMOwotKyAgICAgICAgYWRpbmxlbiA9IDA7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCFkY3R4LT5n ZW5lcmF0ZShkY3R4LCBvdXQsIG91dGxlbiwgYWRpbiwgYWRpbmxlbikpIHsKLSsgICAgICAgIHIg PSBGSVBTX1JfR0VORVJBVEVfRVJST1I7Ci0rICAgICAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NU QVRVU19FUlJPUjsKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICB9Ci0rICAgIGlmICghKGRjdHgt PmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpIHsKLSsgICAgICAgIGlmIChkY3R4LT5yZXNl ZWRfY291bnRlciA+PSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwpCi0rICAgICAgICAgICAgZGN0eC0+ c3RhdHVzID0gRFJCR19TVEFUVVNfUkVTRUVEOwotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAg IGRjdHgtPnJlc2VlZF9jb3VudGVyKys7Ci0rICAgIH0KLSsKLSsgZW5kOgotKyAgICBpZiAocikg ewotKyAgICAgICAgaWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKLSsgICAg ICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfR0VORVJBVEUsIHIpOwotKyAgICAgICAg cmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK2ludCBGSVBTX2Ry YmdfdW5pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIGludCBydjsKLSsgICAg aWYgKCFkY3R4LT51bmluc3RhbnRpYXRlKQotKyAgICAgICAgcnYgPSAxOwotKyAgICBlbHNlCi0r ICAgICAgICBydiA9IGRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7Ci0rICAgIC8qIEFsdGhvdWdo IHdlJ2QgbGlrZSB0byBjbGVhbnNlIGhlcmUgd2UgY2FuJ3QgYmVjYXVzZSB3ZSBoYXZlIHRvCi0r ICAgICAqIHRlc3QgdGhlIHVuaW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcyB0aGUgZGF0YS4KLSsg ICAgICovCi0rICAgIG1lbXNldCgmZGN0eC0+ZCwgMCwgc2l6ZW9mKGRjdHgtPmQpKTsKLSsgICAg ZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKLSsgICAgLyogSWYgbWV0 aG9kIGhhcyBwcm9ibGVtcyB1bmluc3RhbnRpYXRpbmcsIHJldHVybiBlcnJvciAqLwotKyAgICBy ZXR1cm4gcnY7Ci0rfQotKwotK2ludCBGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhEUkJHX0NUWCAq ZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICgqZ2V0X2VudHJvcHkp IChEUkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaW5fbGVuLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBtYXhfbGVuKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNsZWFudXBf ZW50cm9weSkgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xlbiksCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbnRyb3B5X2Jsb2NrbGVuLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfbm9uY2UpIChEUkJHX0NUWCAq Y3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2xlbiksCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVwX25vbmNlKSAoRFJCR19D VFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pKQotK3sKLSsgICAgaWYgKGRjdHgtPnN0 YXR1cyAhPSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIGRjdHgtPmVudHJvcHlfYmxvY2tsZW4gPSBlbnRyb3B5X2Jsb2NrbGVuOwotKyAgICBkY3R4 LT5nZXRfZW50cm9weSA9IGdldF9lbnRyb3B5OwotKyAgICBkY3R4LT5jbGVhbnVwX2VudHJvcHkg PSBjbGVhbnVwX2VudHJvcHk7Ci0rICAgIGRjdHgtPmdldF9ub25jZSA9IGdldF9ub25jZTsKLSsg ICAgZGN0eC0+Y2xlYW51cF9ub25jZSA9IGNsZWFudXBfbm9uY2U7Ci0rICAgIHJldHVybiAxOwot K30KLSsKLStpbnQgRklQU19kcmJnX3NldF9yYW5kX2NhbGxiYWNrcyhEUkJHX0NUWCAqZGN0eCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfYWRpbikgKERS QkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCksCi0rICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAoKmNsZWFudXBfYWRpbikgKERSQkdfQ1RYICpjdHgsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGNoYXIgKm91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IG9sZW4pLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAoKnJhbmRfc2VlZF9jYikgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBudW0pLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKnJhbmRfYWRk X2NiKSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbnRyb3B5 KSkKLSt7Ci0rICAgIGlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNF RCkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBkY3R4LT5nZXRfYWRpbiA9IGdldF9hZGluOwot KyAgICBkY3R4LT5jbGVhbnVwX2FkaW4gPSBjbGVhbnVwX2FkaW47Ci0rICAgIGRjdHgtPnJhbmRf c2VlZF9jYiA9IHJhbmRfc2VlZF9jYjsKLSsgICAgZGN0eC0+cmFuZF9hZGRfY2IgPSByYW5kX2Fk ZF9jYjsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3ZvaWQgKkZJUFNfZHJiZ19nZXRfYXBwX2Rh dGEoRFJCR19DVFggKmRjdHgpCi0rewotKyAgICByZXR1cm4gZGN0eC0+YXBwX2RhdGE7Ci0rfQot KwotK3ZvaWQgRklQU19kcmJnX3NldF9hcHBfZGF0YShEUkJHX0NUWCAqZGN0eCwgdm9pZCAqYXBw X2RhdGEpCi0rewotKyAgICBkY3R4LT5hcHBfZGF0YSA9IGFwcF9kYXRhOwotK30KLSsKLStzaXpl X3QgRklQU19kcmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIHJl dHVybiBkY3R4LT5ibG9ja2xlbmd0aDsKLSt9Ci0rCi0raW50IEZJUFNfZHJiZ19nZXRfc3RyZW5n dGgoRFJCR19DVFggKmRjdHgpCi0rewotKyAgICByZXR1cm4gZGN0eC0+c3RyZW5ndGg7Ci0rfQot KwotK3ZvaWQgRklQU19kcmJnX3NldF9jaGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50 IGludGVydmFsKQotK3sKLSsgICAgZGN0eC0+aGVhbHRoX2NoZWNrX2ludGVydmFsID0gaW50ZXJ2 YWw7Ci0rfQotKwotK3ZvaWQgRklQU19kcmJnX3NldF9yZXNlZWRfaW50ZXJ2YWwoRFJCR19DVFgg KmRjdHgsIGludCBpbnRlcnZhbCkKLSt7Ci0rICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IGlu dGVydmFsOwotK30KLSsKLStzdGF0aWMgaW50IGRyYmdfc3RpY2sgPSAwOwotKwotK3ZvaWQgRklQ U19kcmJnX3N0aWNrKGludCBvbm9mZikKLSt7Ci0rICAgIGRyYmdfc3RpY2sgPSBvbm9mZjsKLSt9 Ci0rCi0rLyogQ29udGludW91cyBEUkJHIHV0aWxpdHkgZnVuY3Rpb24gKi8KLStpbnQgZmlwc19k cmJnX2Nwcm5nX3Rlc3QoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm91dCkK LSt7Ci0rICAgIC8qIE5vIENQUk5HIGluIHRlc3QgbW9kZSAqLwotKyAgICBpZiAoZGN0eC0+eGZs YWdzICYgRFJCR19GTEFHX1RFU1QpCi0rICAgICAgICByZXR1cm4gMTsKLSsgICAgLyogQ2hlY2sg YmxvY2sgaXMgdmFsaWQ6IHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLSsgICAgaWYgKGRjdHgtPmxi X3ZhbGlkID09IDApIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19DUFJOR19U RVNULCBGSVBTX1JfSU5URVJOQUxfRVJST1IpOwotKyAgICAgICAgZmlwc19zZXRfc2VsZnRlc3Rf ZmFpbCgpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsgICAgaWYgKGRyYmdfc3RpY2sp Ci0rICAgICAgICBtZW1jcHkoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpOwotKyAg ICAvKiBDaGVjayBhZ2FpbnN0IGxhc3QgYmxvY2s6IGZhaWwgaWYgbWF0Y2ggKi8KLSsgICAgaWYg KCFtZW1jbXAoZGN0eC0+bGIsIG91dCwgZGN0eC0+YmxvY2tsZW5ndGgpKSB7Ci0rICAgICAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0RSQkdfU1RVQ0spOwot KyAgICAgICAgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIH0KLSsgICAgLyogU2F2ZSBsYXN0IGJsb2NrIGZvciBuZXh0IGNvbXBhcmlzb24gKi8KLSsg ICAgbWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsgICAgcmV0dXJu IDE7Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3Jh bmQuYy5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMKLS0t LSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jLmZpcHMJMjAxNS0w Ni0xNSAxNzozMDowMC4wMDcyODM5NTkgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8v Zmlwcy9maXBzX2RyYmdfcmFuZC5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDA3MjgzOTU5ICswMjAw Ci1AQCAtMCwwICsxLDE2NiBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfcmFuZC5jICovCi0r LyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9y IHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENv cHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3Jn LgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0r ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Y3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv cmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBz X3JhbmRfbGNsLmgiCi0rCi0rLyogTWFwcGluZyBvZiBTUDgwMC05MCBEUkJHcyB0byBPcGVuU1NM IFJBTkRfTUVUSE9EICovCi0rCi0rLyogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBnbG9iYWwgUFJO RyB1c2VkIGF0IGFueSB0aW1lIGluIE9wZW5TU0wgdXNlIGEgZ2xvYmFsCi0rICogdmFyaWFibGUg dG8gc3RvcmUgY29udGV4dC4KLSsgKi8KLSsKLStzdGF0aWMgRFJCR19DVFggb3NzbF9kY3R4Owot KwotK0RSQkdfQ1RYICpGSVBTX2dldF9kZWZhdWx0X2RyYmcodm9pZCkKLSt7Ci0rICAgIHJldHVy biAmb3NzbF9kY3R4OwotK30KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19ieXRlcyh1bnNpZ25l ZCBjaGFyICpvdXQsIGludCBjb3VudCkKLSt7Ci0rICAgIERSQkdfQ1RYICpkY3R4ID0gJm9zc2xf ZGN0eDsKLSsgICAgaW50IHJ2ID0gMDsKLSsgICAgdW5zaWduZWQgY2hhciAqYWRpbiA9IE5VTEw7 Ci0rICAgIHNpemVfdCBhZGlubGVuID0gMDsKLSsgICAgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9D S19SQU5EKTsKLSsgICAgZG8gewotKyAgICAgICAgc2l6ZV90IHJjbnQ7Ci0rICAgICAgICBpZiAo Y291bnQgPiAoaW50KWRjdHgtPm1heF9yZXF1ZXN0KQotKyAgICAgICAgICAgIHJjbnQgPSBkY3R4 LT5tYXhfcmVxdWVzdDsKLSsgICAgICAgIGVsc2UKLSsgICAgICAgICAgICByY250ID0gY291bnQ7 Ci0rICAgICAgICBpZiAoZGN0eC0+Z2V0X2FkaW4pIHsKLSsgICAgICAgICAgICBhZGlubGVuID0g ZGN0eC0+Z2V0X2FkaW4oZGN0eCwgJmFkaW4pOwotKyAgICAgICAgICAgIGlmIChhZGlubGVuICYm ICFhZGluKSB7Ci0rICAgICAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19CWVRF UywKLSsgICAgICAgICAgICAgICAgICAgICAgICBGSVBTX1JfRVJST1JfUkVUUklFVklOR19BRERJ VElPTkFMX0lOUFVUKTsKLSsgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICAgICAg fQotKyAgICAgICAgfQotKyAgICAgICAgcnYgPSBGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgb3V0 LCByY250LCAwLCBhZGluLCBhZGlubGVuKTsKLSsgICAgICAgIGlmIChhZGluKSB7Ci0rICAgICAg ICAgICAgaWYgKGRjdHgtPmNsZWFudXBfYWRpbikKLSsgICAgICAgICAgICAgICAgZGN0eC0+Y2xl YW51cF9hZGluKGRjdHgsIGFkaW4sIGFkaW5sZW4pOwotKyAgICAgICAgICAgIGFkaW4gPSBOVUxM OwotKyAgICAgICAgfQotKyAgICAgICAgaWYgKCFydikKLSsgICAgICAgICAgICBnb3RvIGVycjsK LSsgICAgICAgIG91dCArPSByY250OwotKyAgICAgICAgY291bnQgLT0gcmNudDsKLSsgICAgfQot KyAgICB3aGlsZSAoY291bnQpOwotKyAgICBydiA9IDE7Ci0rIGVycjoKLSsgICAgQ1JZUFRPX3df dW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKyAgICByZXR1cm4gcnY7Ci0rfQotKwotK3N0YXRp YyBpbnQgZmlwc19kcmJnX3BzZXVkbyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKLSt7 Ci0rICAgIGlmIChmaXBzX2RyYmdfYnl0ZXMob3V0LCBjb3VudCkgPD0gMCkKLSsgICAgICAgIHJl dHVybiAtMTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX3N0 YXR1cyh2b2lkKQotK3sKLSsgICAgRFJCR19DVFggKmRjdHggPSAmb3NzbF9kY3R4OwotKyAgICBp bnQgcnY7Ci0rICAgIENSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rICAgIHJ2ID0g ZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZID8gMSA6IDA7Ci0rICAgIENSWVBUT19y X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLStzdGF0 aWMgdm9pZCBmaXBzX2RyYmdfY2xlYW51cCh2b2lkKQotK3sKLSsgICAgRFJCR19DVFggKmRjdHgg PSAmb3NzbF9kY3R4OwotKyAgICBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKyAg ICBGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KTsKLSsgICAgQ1JZUFRPX3dfdW5sb2NrKENS WVBUT19MT0NLX1JBTkQpOwotK30KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19zZWVkKGNvbnN0 IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuKQotK3sKLSsgICAgRFJCR19DVFggKmRjdHggPSAmb3Nz bF9kY3R4OwotKyAgICBpZiAoZGN0eC0+cmFuZF9zZWVkX2NiKQotKyAgICAgICAgcmV0dXJuIGRj dHgtPnJhbmRfc2VlZF9jYihkY3R4LCBzZWVkLCBzZWVkbGVuKTsKLSsgICAgcmV0dXJuIDE7Ci0r fQotKwotK3N0YXRpYyBpbnQgZmlwc19kcmJnX2FkZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2Vl ZGxlbiwgZG91YmxlIGFkZF9lbnRyb3B5KQotK3sKLSsgICAgRFJCR19DVFggKmRjdHggPSAmb3Nz bF9kY3R4OwotKyAgICBpZiAoZGN0eC0+cmFuZF9hZGRfY2IpCi0rICAgICAgICByZXR1cm4gZGN0 eC0+cmFuZF9hZGRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbiwgYWRkX2VudHJvcHkpOwotKyAgICBy ZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfZHJiZ19tZXRo ID0gewotKyAgICBmaXBzX2RyYmdfc2VlZCwKLSsgICAgZmlwc19kcmJnX2J5dGVzLAotKyAgICBm aXBzX2RyYmdfY2xlYW51cCwKLSsgICAgZmlwc19kcmJnX2FkZCwKLSsgICAgZmlwc19kcmJnX3Bz ZXVkbywKLSsgICAgZmlwc19kcmJnX3N0YXR1cwotK307Ci0rCi0rY29uc3QgUkFORF9NRVRIT0Qg KkZJUFNfZHJiZ19tZXRob2Qodm9pZCkKLSt7Ci0rICAgIHJldHVybiAmcmFuZF9kcmJnX21ldGg7 Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0 ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3Qu YwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZp cHMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDcyODM5NTkgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4y Yy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAw NzI4Mzk1OSArMDIwMAotQEAgLTAsMCArMSw4MjcgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19kcmJn X3NlbGZ0ZXN0LmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZl QG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4K LSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBsaWNl bnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgot KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5o IgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaW5jbHVkZSAiZmlwc19kcmJnX3NlbGZ0 ZXN0LmgiCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgewotKyAgICBpbnQgcG9zdDsKLSsgICAgaW50IG5p ZDsKLSsgICAgdW5zaWduZWQgaW50IGZsYWdzOwotKwotKyAgICAvKiBLQVQgZGF0YSBmb3Igbm8g UFIgKi8KLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50OwotKyAgICBzaXplX3QgZW50bGVu OwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZTsKLSsgICAgc2l6ZV90IG5vbmNlbGVu OwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzOwotKyAgICBzaXplX3QgcGVyc2xlbjsK LSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbjsKLSsgICAgc2l6ZV90IGFkaW5sZW47Ci0r ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHJlc2VlZDsKLSsgICAgc2l6ZV90IGVudHJlc2Vl ZGxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbnJlc2VlZDsKLSsgICAgc2l6ZV90 IGFkaW5yZXNlZWRsZW47Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4yOwotKyAgICBz aXplX3QgYWRpbjJsZW47Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDsKLSsgICAgc2l6 ZV90IGthdGxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0MjsKLSsgICAgc2l6ZV90 IGthdDJsZW47Ci0rCi0rICAgIC8qIEtBVCBkYXRhIGZvciBQUiAqLwotKyAgICBjb25zdCB1bnNp Z25lZCBjaGFyICplbnRfcHI7Ci0rICAgIHNpemVfdCBlbnRsZW5fcHI7Ci0rICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKm5vbmNlX3ByOwotKyAgICBzaXplX3Qgbm9uY2VsZW5fcHI7Ci0rICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnBlcnNfcHI7Ci0rICAgIHNpemVfdCBwZXJzbGVuX3ByOwotKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluX3ByOwotKyAgICBzaXplX3QgYWRpbmxlbl9wcjsK LSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50cHJfcHI7Ci0rICAgIHNpemVfdCBlbnRwcmxl bl9wcjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbmdfcHI7Ci0rICAgIHNpemVfdCBh ZGluZ2xlbl9wcjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50Z19wcjsKLSsgICAgc2l6 ZV90IGVudGdsZW5fcHI7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdF9wcjsKLSsgICAg c2l6ZV90IGthdGxlbl9wcjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0Ml9wcjsKLSsg ICAgc2l6ZV90IGthdDJsZW5fcHI7Ci0rCi0rfSBEUkJHX1NFTEZURVNUX0RBVEE7Ci0rCi0rI2Rl ZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRhKG5pZCwgZmxhZywgcHIsIHApIHtwLCBuaWQsIGZsYWcg fCBEUkJHX0ZMQUdfVEVTVCwgXAotKyAgICAgICAgcHIjI19lbnRyb3B5aW5wdXQsIHNpemVvZihw ciMjX2VudHJvcHlpbnB1dCksIFwKLSsgICAgICAgIHByIyNfbm9uY2UsIHNpemVvZihwciMjX25v bmNlKSwgXAotKyAgICAgICAgcHIjI19wZXJzb25hbGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMj X3BlcnNvbmFsaXphdGlvbnN0cmluZyksIFwKLSsgICAgICAgIHByIyNfYWRkaXRpb25hbGlucHV0 LCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXQpLCBcCi0rICAgICAgICBwciMjX2VudHJvcHlp bnB1dHJlc2VlZCwgc2l6ZW9mKHByIyNfZW50cm9weWlucHV0cmVzZWVkKSwgXAotKyAgICAgICAg cHIjI19hZGRpdGlvbmFsaW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dHJl c2VlZCksIFwKLSsgICAgICAgIHByIyNfYWRkaXRpb25hbGlucHV0Miwgc2l6ZW9mKHByIyNfYWRk aXRpb25hbGlucHV0MiksIFwKLSsgICAgICAgIHByIyNfaW50X3JldHVybmVkYml0cywgc2l6ZW9m KHByIyNfaW50X3JldHVybmVkYml0cyksIFwKLSsgICAgICAgIHByIyNfcmV0dXJuZWRiaXRzLCBz aXplb2YocHIjI19yZXR1cm5lZGJpdHMpLCBcCi0rICAgICAgICBwciMjX3ByX2VudHJvcHlpbnB1 dCwgc2l6ZW9mKHByIyNfcHJfZW50cm9weWlucHV0KSwgXAotKyAgICAgICAgcHIjI19wcl9ub25j ZSwgc2l6ZW9mKHByIyNfcHJfbm9uY2UpLCBcCi0rICAgICAgICBwciMjX3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZywgc2l6ZW9mKHByIyNfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nKSwgXAotKyAg ICAgICAgcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQsIHNpemVvZihwciMjX3ByX2FkZGl0aW9uYWxp bnB1dCksIFwKLSsgICAgICAgIHByIyNfcHJfZW50cm9weWlucHV0cHIsIHNpemVvZihwciMjX3By X2VudHJvcHlpbnB1dHByKSwgXAotKyAgICAgICAgcHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyLCBz aXplb2YocHIjI19wcl9hZGRpdGlvbmFsaW5wdXQyKSwgXAotKyAgICAgICAgcHIjI19wcl9lbnRy b3B5aW5wdXRwcjIsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dHByMiksIFwKLSsgICAgICAg IHByIyNfcHJfaW50X3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfcHJfaW50X3JldHVybmVkYml0 cyksIFwKLSsgICAgICAgIHByIyNfcHJfcmV0dXJuZWRiaXRzLCBzaXplb2YocHIjI19wcl9yZXR1 cm5lZGJpdHMpLCBcCi0rICAgICAgICB9Ci0rCi0rI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRh X2RmKG5pZCwgcHIsIHApIFwKLSsgICAgICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEobmlkLCBEUkJH X0ZMQUdfQ1RSX1VTRV9ERiwgcHIsIHApCi0rCi0rI2RlZmluZSBtYWtlX2RyYmdfdGVzdF9kYXRh X2VjKGN1cnZlLCBtZCwgcHIsIHApIFwKLSsgICAgICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoKGN1 cnZlIDw8IDE2KSB8IG1kICwgMCwgcHIsIHApCi0rCi0rc3RhdGljIERSQkdfU0VMRlRFU1RfREFU QSBkcmJnX3Rlc3RbXSA9IHsKLSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihOSURfYWVzXzEy OF9jdHIsIGFlc18xMjhfdXNlX2RmLCAwKSwKLSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihO SURfYWVzXzE5Ml9jdHIsIGFlc18xOTJfdXNlX2RmLCAwKSwKLSsgICAgbWFrZV9kcmJnX3Rlc3Rf ZGF0YV9kZihOSURfYWVzXzI1Nl9jdHIsIGFlc18yNTZfdXNlX2RmLCAxKSwKLSsgICAgbWFrZV9k cmJnX3Rlc3RfZGF0YShOSURfYWVzXzEyOF9jdHIsIDAsIGFlc18xMjhfbm9fZGYsIDApLAotKyAg ICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMTkyX2N0ciwgMCwgYWVzXzE5Ml9ub19kZiwg MCksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18yNTZfY3RyLCAwLCBhZXNfMjU2 X25vX2RmLCAxKSwKLSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMSwgMCwgc2hhMSwg MCksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTIyNCwgMCwgc2hhMjI0LCAwKSwK LSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMjU2LCAwLCBzaGEyNTYsIDEpLAotKyAg ICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEzODQsIDAsIHNoYTM4NCwgMCksCi0rICAgIG1h a2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTUxMiwgMCwgc2hhNTEyLCAwKSwKLSsgICAgbWFrZV9k cmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEExLCAwLCBobWFjX3NoYTEsIDApLAotKyAgICBt YWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTIyNCwgMCwgaG1hY19zaGEyMjQsIDAp LAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTI1NiwgMCwgaG1hY19z aGEyNTYsIDEpLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0aFNIQTM4NCwg MCwgaG1hY19zaGEzODQsIDApLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9obWFjV2l0 aFNIQTUxMiwgMCwgaG1hY19zaGE1MTIsIDApLAotKyAgICB7MCwgMCwgMH0KLSt9OwotKwotK3R5 cGVkZWYgc3RydWN0IHsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50OwotKyAgICBzaXpl X3QgZW50bGVuOwotKyAgICBpbnQgZW50Y250OwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpu b25jZTsKLSsgICAgc2l6ZV90IG5vbmNlbGVuOwotKyAgICBpbnQgbm9uY2VjbnQ7Ci0rfSBURVNU X0VOVDsKLSsKLStzdGF0aWMgc2l6ZV90IHRlc3RfZW50cm9weShEUkJHX0NUWCAqZGN0eCwgdW5z aWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJv cHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKLSt7Ci0rICAgIFRFU1RfRU5UICp0 ID0gRklQU19kcmJnX2dldF9hcHBfZGF0YShkY3R4KTsKLSsgICAgKnBvdXQgPSAodW5zaWduZWQg Y2hhciAqKXQtPmVudDsKLSsgICAgdC0+ZW50Y250Kys7Ci0rICAgIHJldHVybiB0LT5lbnRsZW47 Ci0rfQotKwotK3N0YXRpYyBzaXplX3QgdGVzdF9ub25jZShEUkJHX0NUWCAqZGN0eCwgdW5zaWdu ZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBz aXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0rewotKyAgICBURVNUX0VOVCAqdCA9IEZJ UFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7Ci0rICAgICpwb3V0ID0gKHVuc2lnbmVkIGNoYXIg Kil0LT5ub25jZTsKLSsgICAgdC0+bm9uY2VjbnQrKzsKLSsgICAgcmV0dXJuIHQtPm5vbmNlbGVu OwotK30KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19zaW5nbGVfa2F0KERSQkdfQ1RYICpkY3R4 LCBEUkJHX1NFTEZURVNUX0RBVEEgKiB0ZCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBxdWljaykKLSt7Ci0rICAgIFRFU1RfRU5UIHQ7Ci0rICAgIGludCBydiA9IDA7Ci0r ICAgIHNpemVfdCBhZGlubGVuOwotKyAgICB1bnNpZ25lZCBjaGFyIHJhbmRvdXRbMTAyNF07Ci0r Ci0rICAgIC8qIEluaXRpYWwgdGVzdCB3aXRob3V0IFBSICovCi0rCi0rICAgIC8qIEluc3RhbnRp YXRlIERSQkcgd2l0aCB0ZXN0IGVudHJvcHksIG5vbmNlIGFuZCBwZXJzb25hbGlzYXRpb24KLSsg ICAgICogc3RyaW5nLgotKyAgICAgKi8KLSsKLSsgICAgaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4 LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmICghRklQ U19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNl LCAwKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBGSVBTX2RyYmdfc2V0X2FwcF9kYXRh KGRjdHgsICZ0KTsKLSsKLSsgICAgdC5lbnQgPSB0ZC0+ZW50OwotKyAgICB0LmVudGxlbiA9IHRk LT5lbnRsZW47Ci0rICAgIHQubm9uY2UgPSB0ZC0+bm9uY2U7Ci0rICAgIHQubm9uY2VsZW4gPSB0 ZC0+bm9uY2VsZW47Ci0rICAgIHQuZW50Y250ID0gMDsKLSsgICAgdC5ub25jZWNudCA9IDA7Ci0r Ci0rICAgIGlmICghRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVy c2xlbikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgLyogTm90ZSBmb3IgQ1RSIHdpdGhv dXQgREYgc29tZSBhZGRpdGlvbmFsIGlucHV0IHZhbHVlcwotKyAgICAgKiBpZ25vcmUgYnl0ZXMg YWZ0ZXIgdGhlIGtleWxlbmd0aDogc28gcmVkdWNlIGFkaW5sZW4KLSsgICAgICogdG8gaGFsZiB0 byBlbnN1cmUgaW52YWxpZCBkYXRhIGlzIGZlZCBpbi4KLSsgICAgICovCi0rICAgIGlmICghZmlw c19wb3N0X2NvcnJ1cHQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT5pZmxhZ3Mp KQotKyAgICAgICAgYWRpbmxlbiA9IHRkLT5hZGlubGVuIC8gMjsKLSsgICAgZWxzZQotKyAgICAg ICAgYWRpbmxlbiA9IHRkLT5hZGlubGVuOwotKwotKyAgICAvKiBHZW5lcmF0ZSB3aXRoIG5vIFBS IGFuZCB2ZXJpZnkgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YSAqLwotKyAgICBpZiAoIUZJ UFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLCB0ZC0+YWRpbiwg YWRpbmxlbikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKG1lbWNtcChyYW5kb3V0 LCB0ZC0+a2F0LCB0ZC0+a2F0bGVuKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19E UkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9OT1BSX1RFU1QxX0ZBSUxVUkUpOwotKyAgICAgICAgZ290 byBlcnIyOwotKyAgICB9Ci0rICAgIC8qIElmIGFiYnJldmlhdGVkIFBPU1QgZW5kIG9mIHRlc3Qg Ki8KLSsgICAgaWYgKHF1aWNrKSB7Ci0rICAgICAgICBydiA9IDE7Ci0rICAgICAgICBnb3RvIGVy cjsKLSsgICAgfQotKyAgICAvKiBSZXNlZWQgRFJCRyB3aXRoIHRlc3QgZW50cm9weSBhbmQgYWRk aXRpb25hbCBpbnB1dCAqLwotKyAgICB0LmVudCA9IHRkLT5lbnRyZXNlZWQ7Ci0rICAgIHQuZW50 bGVuID0gdGQtPmVudHJlc2VlZGxlbjsKLSsKLSsgICAgaWYgKCFGSVBTX2RyYmdfcmVzZWVkKGRj dHgsIHRkLT5hZGlucmVzZWVkLCB0ZC0+YWRpbnJlc2VlZGxlbikpCi0rICAgICAgICBnb3RvIGVy cjsKLSsKLSsgICAgLyogR2VuZXJhdGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRj aGVzIGV4cGVjdGVkIGRhdGEgKi8KLSsgICAgaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwg cmFuZG91dCwgdGQtPmthdDJsZW4sIDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRk LT5hZGluMiwgdGQtPmFkaW4ybGVuKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAo bWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyLCB0ZC0+a2F0MmxlbikpIHsKLSsgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfTk9QUl9URVNUMl9GQUlMVVJF KTsKLSsgICAgICAgIGdvdG8gZXJyMjsKLSsgICAgfQotKwotKyAgICBGSVBTX2RyYmdfdW5pbnN0 YW50aWF0ZShkY3R4KTsKLSsKLSsgICAgLyogTm93IHRlc3Qgd2l0aCBQUiAqLwotKwotKyAgICAv KiBJbnN0YW50aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVyc29uYWxp c2F0aW9uCi0rICAgICAqIHN0cmluZy4KLSsgICAgICovCi0rICAgIGlmICghRklQU19kcmJnX2lu aXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBp ZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVz dF9ub25jZSwgMCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgRklQU19kcmJnX3NldF9h cHBfZGF0YShkY3R4LCAmdCk7Ci0rCi0rICAgIHQuZW50ID0gdGQtPmVudF9wcjsKLSsgICAgdC5l bnRsZW4gPSB0ZC0+ZW50bGVuX3ByOwotKyAgICB0Lm5vbmNlID0gdGQtPm5vbmNlX3ByOwotKyAg ICB0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuX3ByOwotKyAgICB0LmVudGNudCA9IDA7Ci0rICAg IHQubm9uY2VjbnQgPSAwOwotKwotKyAgICBpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4 LCB0ZC0+cGVyc19wciwgdGQtPnBlcnNsZW5fcHIpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0r ICAgIC8qIE5vdyBnZW5lcmF0ZSB3aXRoIFBSOiB3ZSBuZWVkIHRvIHN1cHBseSBlbnRyb3B5IGFz IHRoaXMgd2lsbAotKyAgICAgKiBwZXJmb3JtIGEgcmVzZWVkIG9wZXJhdGlvbi4gQ2hlY2sgb3V0 cHV0IG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUuCi0rICAgICAqLwotKwotKyAgICB0LmVudCA9IHRk LT5lbnRwcl9wcjsKLSsgICAgdC5lbnRsZW4gPSB0ZC0+ZW50cHJsZW5fcHI7Ci0rCi0rICAgIC8q IE5vdGUgZm9yIENUUiB3aXRob3V0IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKLSsg ICAgICogaWdub3JlIGJ5dGVzIGFmdGVyIHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVu Ci0rICAgICAqIHRvIGhhbGYgdG8gZW5zdXJlIGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCi0rICAg ICAqLwotKyAgICBpZiAoIWZpcHNfcG9zdF9jb3JydXB0KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50 eXBlLCAmZGN0eC0+aWZsYWdzKSkKLSsgICAgICAgIGFkaW5sZW4gPSB0ZC0+YWRpbmxlbl9wciAv IDI7Ci0rICAgIGVsc2UKLSsgICAgICAgIGFkaW5sZW4gPSB0ZC0+YWRpbmxlbl9wcjsKLSsgICAg aWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbl9wciwgMSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW5fcHIsIGFkaW5sZW4pKQotKyAg ICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdF9wciwg dGQtPmthdGxlbl9wcikpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5H TEVfS0FULCBGSVBTX1JfUFJfVEVTVDFfRkFJTFVSRSk7Ci0rICAgICAgICBnb3RvIGVycjI7Ci0r ICAgIH0KLSsKLSsgICAgLyogTm93IGdlbmVyYXRlIGFnYWluIHdpdGggUFI6IHN1cHBseSBuZXcg ZW50cm9weSBhZ2Fpbi4KLSsgICAgICogQ2hlY2sgb3V0cHV0IG1hdGNoZXMgZXhwZWN0ZWQgdmFs dWUuCi0rICAgICAqLwotKwotKyAgICB0LmVudCA9IHRkLT5lbnRnX3ByOwotKyAgICB0LmVudGxl biA9IHRkLT5lbnRnbGVuX3ByOwotKwotKyAgICBpZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4 LCByYW5kb3V0LCB0ZC0+a2F0Mmxlbl9wciwgMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGQtPmFkaW5nX3ByLCB0ZC0+YWRpbmdsZW5fcHIpKQotKyAgICAgICAgZ290byBlcnI7Ci0r Ci0rICAgIGlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdDJfcHIsIHRkLT5rYXQybGVuX3ByKSkg ewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQsIEZJUFNfUl9Q Ul9URVNUMl9GQUlMVVJFKTsKLSsgICAgICAgIGdvdG8gZXJyMjsKLSsgICAgfQotKyAgICAvKiBB bGwgT0ssIHRlc3QgY29tcGxldGUgKi8KLSsgICAgcnYgPSAxOwotKwotKyBlcnI6Ci0rICAgIGlm IChydiA9PSAwKQotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQs IEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKyBlcnIyOgotKyAgICBGSVBTX2RyYmdfdW5pbnN0 YW50aWF0ZShkY3R4KTsKLSsKLSsgICAgcmV0dXJuIHJ2OwotKwotK30KLSsKLSsvKiBJbml0aWFs aXNlIGEgRFJCRyBiYXNlZCBvbiBzZWxmdGVzdCBkYXRhICovCi0rCi0rc3RhdGljIGludCBkb19k cmJnX2luaXQoRFJCR19DVFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqIHRkLCBURVNUX0VO VCAqIHQpCi0rewotKwotKyAgICBpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRk LT5mbGFncykpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgaWYgKCFGSVBTX2RyYmdfc2V0 X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQotKyAg ICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgdCk7 Ci0rCi0rICAgIHQtPmVudCA9IHRkLT5lbnQ7Ci0rICAgIHQtPmVudGxlbiA9IHRkLT5lbnRsZW47 Ci0rICAgIHQtPm5vbmNlID0gdGQtPm5vbmNlOwotKyAgICB0LT5ub25jZWxlbiA9IHRkLT5ub25j ZWxlbjsKLSsgICAgdC0+ZW50Y250ID0gMDsKLSsgICAgdC0+bm9uY2VjbnQgPSAwOwotKyAgICBy ZXR1cm4gMTsKLSt9Ci0rCi0rLyogSW5pdGlhbGlzZSBhbmQgaW5zdGFudGlhdGUgRFJCRyBiYXNl ZCBvbiBzZWxmdGVzdCBkYXRhICovCi0rc3RhdGljIGludCBkb19kcmJnX2luc3RhbnRpYXRlKERS QkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKiB0ZCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVEVTVF9FTlQgKiB0KQotK3sKLSsgICAgaWYgKCFkb19kcmJnX2luaXQo ZGN0eCwgdGQsIHQpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmICghRklQU19kcmJnX2lu c3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikpCi0rICAgICAgICByZXR1cm4g MDsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMg ZXh0ZW5zaXZlIGVycm9yIGNoZWNraW5nIGFzIHJlcXVpcmVkIGJ5IFNQODAwLTkwLgotKyAqIElu ZHVjZSBzZXZlcmFsIGZhaWx1cmUgbW9kZXMgYW5kIGNoZWNrIGFuIGVycm9yIGNvbmRpdGlvbiBp cyBzZXQuCi0rICogVGhpcyBmdW5jdGlvbiBhbG9uZyB3aXRoIGZpcHNfZHJiZ19zaW5nbGVfa2F0 IHBlZm9ybXMgdGhlIGhlYWx0aCBjaGVja2luZwotKyAqIG9wZXJhdGlvbi4KLSsgKi8KLSsKLStz dGF0aWMgaW50IGZpcHNfZHJiZ19lcnJvcl9jaGVjayhEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxG VEVTVF9EQVRBICogdGQpCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIHJhbmRvdXRbMTAyNF07Ci0r ICAgIFRFU1RfRU5UIHQ7Ci0rICAgIHNpemVfdCBpOwotKyAgICB1bnNpZ25lZCBpbnQgcmVzZWVk X2NvdW50ZXJfdG1wOwotKyAgICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKilk Y3R4OwotKwotKyAgICAvKiBJbml0aWFsaXNlIERSQkcgKi8KLSsKLSsgICAgaWYgKCFkb19kcmJn X2luaXQoZGN0eCwgdGQsICZ0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICAvKiBEb24n dCByZXBvcnQgaW5kdWNlZCBlcnJvcnMgKi8KLSsgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxB R19OT0VSUjsKLSsKLSsgICAgLyogUGVyc29uYWxpc2F0aW9uIHN0cmluZyB0ZXN0cyAqLwotKwot KyAgICAvKiBUZXN0IGRldGVjdGlvbiBvZiB0b28gbGFyZ2UgcGVyc29ubGlzYXRpb24gc3RyaW5n ICovCi0rCi0rICAgIGlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIGRj dHgtPm1heF9wZXJzICsgMSkgPiAwKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNfUl9QRVJTT05BTElTQVRJT05f RVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICAv KiBFbnRyb3B5IHNvdXJjZSB0ZXN0cyAqLwotKwotKyAgICAvKiBUZXN0IGVudHJvcHkgc291cmNl IGZhaWx1cmUgZGV0ZWNpb246IGkuZS4gcmV0dXJucyBubyBkYXRhICovCi0rCi0rICAgIHQuZW50 bGVuID0gMDsKLSsKLSsgICAgaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVy cywgdGQtPnBlcnNsZW4pID4gMCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRF VEVDVEVEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIC8qIFRyeSB0byBn ZW5lcmF0ZSBvdXRwdXQgZnJvbSB1bmluc3RhbnRpYXRlZCBEUkJHICovCi0rICAgIGlmIChGSVBT X2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKSB7Ci0rICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNf Ul9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9 Ci0rCi0rICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKyAgICBpZiAoIUZJ UFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsgICAg ICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRk LCAmdCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdf RkxBR19OT0VSUjsKLSsKLSsgICAgLyogVGVzdCBpbnN1ZmZpY2llbnQgZW50cm9weSAqLwotKwot KyAgICB0LmVudGxlbiA9IGRjdHgtPm1pbl9lbnRyb3B5IC0gMTsKLSsKLSsgICAgaWYgKEZJUFNf ZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkgewotKyAg ICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAg ICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAgICAgIGdvdG8gZXJy OwotKyAgICB9Ci0rCi0rICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKyAg ICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7Ci0rICAgICAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9S KTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIC8qIFRlc3QgdG9vIG11Y2gg ZW50cm9weSAqLwotKwotKyAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKyAg ICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7 Ci0rCi0rICAgIHQuZW50bGVuID0gZGN0eC0+bWF4X2VudHJvcHkgKyAxOwotKwotKyAgICBpZiAo RklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKSB7 Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAg ICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAgZ290 byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7 Ci0rICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVf RVJST1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgLyogTm9uY2UgdGVz dHMgKi8KLSsKLSsgICAgLyogVGVzdCB0b28gc21hbGwgbm9uY2UgKi8KLSsKLSsgICAgaWYgKGRj dHgtPm1pbl9ub25jZSkgewotKwotKyAgICAgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQs ICZ0KSkKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgICAgIGRjdHgtPmlmbGFncyB8 PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rICAgICAgICB0Lm5vbmNlbGVuID0gZGN0eC0+bWluX25v bmNlIC0gMTsKLSsKLSsgICAgICAgIGlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQt PnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgICAgICBGSVBTX1JfTk9OQ0Vf RVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0r Ci0rICAgICAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsgICAgICAgIGlm ICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAgICAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9S KTsKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIH0KLSsKLSsgICAgfQotKwotKyAg ICAvKiBUZXN0IHRvbyBsYXJnZSBub25jZSAqLwotKwotKyAgICBpZiAoZGN0eC0+bWF4X25vbmNl KSB7Ci0rCi0rICAgICAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKyAgICAg ICAgICAgIGdvdG8gZXJyOwotKwotKyAgICAgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19O T0VSUjsKLSsKLSsgICAgICAgIHQubm9uY2VsZW4gPSBkY3R4LT5tYXhfbm9uY2UgKyAxOwotKwot KyAgICAgICAgaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBl cnNsZW4pID4gMCkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywKLSsgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9OT05DRV9FUlJPUl9VTkRFVEVD VEVEKTsKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGRj dHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKyAgICAgICAgaWYgKCFGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKyAgICAgICAg ICAgIGdvdG8gZXJyOwotKyAgICAgICAgfQotKwotKyAgICB9Ci0rCi0rICAgIC8qIEluc3RhbnRp YXRlIHdpdGggdmFsaWQgZGF0YS4gKi8KLSsgICAgaWYgKCFkb19kcmJnX2luc3RhbnRpYXRlKGRj dHgsIHRkLCAmdCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgLyogQ2hlY2sgZ2VuZXJh dGlvbiBpcyBub3cgT0sgKi8KLSsgICAgaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFu ZG91dCwgdGQtPmthdGxlbiwgMCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFk aW4sIHRkLT5hZGlubGVuKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBkY3R4LT5pZmxh Z3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKyAgICAvKiBSZXF1ZXN0IHRvbyBtdWNoIGRhdGEg Zm9yIG9uZSByZXF1ZXN0ICovCi0rICAgIGlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFu ZG91dCwgZGN0eC0+bWF4X3JlcXVlc3QgKyAxLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAgRklQU19SX1JFUVVFU1RfTEVO R1RIX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsg ICAgLyogVHJ5IHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0ICovCi0rICAgIGlmIChGSVBTX2Ry YmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZC0+YWRpbiwgZGN0eC0+bWF4X2FkaW4gKyAxKSkgewotKyAgICAgICAg RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICBG SVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAgICAgIGdvdG8g ZXJyOwotKyAgICB9Ci0rCi0rICAgIC8qIENoZWNrIHByZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1 ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCi0rICAgICAqIGZhaWx1cmUuCi0rICAgICAqLwot KwotKyAgICB0LmVudGxlbiA9IDA7Ci0rCi0rICAgIGlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0 eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICB0 ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VO REVURUNURUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgZGN0eC0+aWZs YWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlh dGUoZGN0eCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAg IH0KLSsKLSsgICAgLyogSW5zdGFudGlhdGUgYWdhaW4gd2l0aCB2YWxpZCBkYXRhICovCi0rCi0r ICAgIGlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQotKyAgICAgICAgZ290 byBlcnI7Ci0rICAgIC8qIFRlc3QgcmVzZWVkIGNvdW50ZXIgd29ya3MgKi8KLSsgICAgLyogU2F2 ZSBpbml0aWFsIHJlc2VlZCBjb3VudGVyICovCi0rICAgIHJlc2VlZF9jb3VudGVyX3RtcCA9IGRj dHgtPnJlc2VlZF9jb3VudGVyOwotKyAgICAvKiBTZXQgcmVzZWVkIGNvdW50ZXIgdG8gYmV5b25k IGludGVydmFsICovCi0rICAgIGRjdHgtPnJlc2VlZF9jb3VudGVyID0gZGN0eC0+cmVzZWVkX2lu dGVydmFsOwotKwotKyAgICAvKiBHZW5lcmF0ZSBvdXRwdXQgYW5kIGNoZWNrIGVudHJvcHkgaGFz IGJlZW4gcmVxdWVzdGVkIGZvciByZXNlZWQgKi8KLSsgICAgdC5lbnRjbnQgPSAwOwotKyAgICBp ZiAoIUZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0bGVuLCAwLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKQotKyAgICAg ICAgZ290byBlcnI7Ci0rICAgIGlmICh0LmVudGNudCAhPSAxKSB7Ci0rICAgICAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNfUl9F TlRST1BZX05PVF9SRVFVRVNURURfRk9SX1JFU0VFRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsg ICAgfQotKyAgICAvKiBDaGVjayByZXNlZWQgY291bnRlciBoYXMgYmVlbiByZXNldCAqLwotKyAg ICBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgIT0gcmVzZWVkX2NvdW50ZXJfdG1wICsgMSkgewot KyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfUkVT RUVEX0NPVU5URVJfRVJST1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAg ZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rICAgIGlmICghRklQU19kcmJnX3Vu aW5zdGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKyAgICAgICAgZ290byBl cnI7Ci0rICAgIH0KLSsKLSsgICAgLyogQ2hlY2sgcHJlZGljdGlvbiByZXNpc3RhbmNlIHJlcXVl c3QgZmFpbHMgaWYgZW50cm9weSBzb3VyY2UKLSsgICAgICogZmFpbHVyZS4KLSsgICAgICovCi0r Ci0rICAgIHQuZW50bGVuID0gMDsKLSsKLSsgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19O T0VSUjsKLSsgICAgaWYgKEZJUFNfZHJiZ19nZW5lcmF0ZShkY3R4LCByYW5kb3V0LCB0ZC0+a2F0 bGVuLCAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxl bikpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsg ICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAg ICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19O T0VSUjsKLSsKLSsgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAg ICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNU QU5USUFURV9FUlJPUik7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBpZiAo IWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKLSsgICAgICAgIGdvdG8gZXJyOwot KyAgICAvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtzICovCi0rICAgIC8qIFNhdmUgaW5pdGlh bCByZXNlZWQgY291bnRlciAqLwotKyAgICByZXNlZWRfY291bnRlcl90bXAgPSBkY3R4LT5yZXNl ZWRfY291bnRlcjsKLSsgICAgLyogU2V0IHJlc2VlZCBjb3VudGVyIHRvIGJleW9uZCBpbnRlcnZh bCAqLwotKyAgICBkY3R4LT5yZXNlZWRfY291bnRlciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsK LSsKLSsgICAgLyogR2VuZXJhdGUgb3V0cHV0IGFuZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVuIHJl cXVlc3RlZCBmb3IgcmVzZWVkICovCi0rICAgIHQuZW50Y250ID0gMDsKLSsgICAgaWYgKCFGSVBT X2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKLSsgICAgICAgIGdvdG8g ZXJyOwotKyAgICBpZiAodC5lbnRjbnQgIT0gMSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9O T1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsg ICAgLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFzIGJlZW4gcmVzZXQgKi8KLSsgICAgaWYgKGRj dHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9jb3VudGVyX3RtcCArIDEpIHsKLSsgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JFU0VFRF9DT1VO VEVSX0VSUk9SKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIGRjdHgtPmlm bGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRp YXRlKGRjdHgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hF Q0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAg ICB9Ci0rCi0rICAgIC8qIEV4cGxpY2l0IHJlc2VlZCB0ZXN0cyAqLwotKwotKyAgICAvKiBUZXN0 IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBsYXJnZSBhZGRpdGlvbmFsIGlucHV0ICovCi0rICAg IGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsK LSsgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsgICAgaWYgKEZJUFNf ZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIGRjdHgtPm1heF9hZGluICsgMSkgPiAwKSB7Ci0r ICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAg ICAgICAgIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAg ICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0 aCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlICovCi0rCi0rICAgIHQuZW50bGVuID0gMDsKLSsKLSsg ICAgaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDAp IHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAg ICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAgICBn b3RvIGVycjsKLSsgICAgfQotKwotKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0r Ci0rICAgIC8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIG11Y2ggZW50cm9weSAqLwot KwotKyAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKyAgICAgICAgZ290byBl cnI7Ci0rCi0rICAgIGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rICAgIHQu ZW50bGVuID0gZGN0eC0+bWF4X2VudHJvcHkgKyAxOwotKwotKyAgICBpZiAoRklQU19kcmJnX3Jl c2VlZChkY3R4LCB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pID4gMCkgewotKyAgICAgICAgRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICBGSVBTX1Jf RU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0r Ci0rICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVf RVJST1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgLyogVGVzdCBleHBs aWNpdCByZXNlZWQgd2l0aCB0b28gbGl0dGxlIGVudHJvcHkgKi8KLSsKLSsgICAgaWYgKCFkb19k cmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBkY3R4 LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKyAgICB0LmVudGxlbiA9IGRjdHgtPm1p bl9lbnRyb3B5IC0gMTsKLSsKLSsgICAgaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFk aW4sIHRkLT5hZGlubGVuKSA+IDApIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5E RVRFQ1RFRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBpZiAoIUZJUFNf ZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsgICAgICAg IGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSZkY3R4LT5k OwotKyAgICAvKiBTdGFuZGFyZCBzYXlzIHdlIGhhdmUgdG8gY2hlY2sgdW5pbnN0YW50aWF0ZSBy ZWFsbHkgemVyb2VzCi0rICAgICAqIHRoZSBkYXRhLi4uCi0rICAgICAqLwotKyAgICBmb3IgKGkg PSAwOyBpIDwgc2l6ZW9mKGRjdHgtPmQpOyBpKyspIHsKLSsgICAgICAgIGlmICgqcCAhPSAwKSB7 Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAg ICAgICAgICAgICAgICAgICAgRklQU19SX1VOSU5TVEFOVElBVEVfWkVST0lTRV9FUlJPUik7Ci0r ICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0rICAgICAgICBwKys7Ci0rICAgIH0K LSsKLSsgICAgcmV0dXJuIDE7Ci0rCi0rIGVycjoKLSsgICAgLyogQSByZWFsIGVycm9yIGFzIG9w cG9zZWQgdG8gYW4gaW5kdWNlZCBvbmU6IHVuZGVybHlpbmcgZnVuY3Rpb24gd2lsbAotKyAgICAg KiBpbmRpY2F0ZSB0aGUgZXJyb3IuCi0rICAgICAqLwotKyAgICBpZiAoIShkY3R4LT5pZmxhZ3Mg JiBEUkJHX0ZMQUdfTk9FUlIpKQotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLCBGSVBTX1JfRlVOQ1RJT05fRVJST1IpOwotKyAgICBGSVBTX2RyYmdfdW5pbnN0 YW50aWF0ZShkY3R4KTsKLSsgICAgcmV0dXJuIDA7Ci0rCi0rfQotKwotK2ludCBmaXBzX2RyYmdf a2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi0rewotKyAg ICBEUkJHX1NFTEZURVNUX0RBVEEgKnRkOwotKyAgICBmbGFncyB8PSBEUkJHX0ZMQUdfVEVTVDsK LSsgICAgZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKSB7Ci0rICAgICAg ICBpZiAodGQtPm5pZCA9PSBuaWQgJiYgdGQtPmZsYWdzID09IGZsYWdzKSB7Ci0rICAgICAgICAg ICAgaWYgKCFmaXBzX2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMCkpCi0rICAgICAgICAgICAg ICAgIHJldHVybiAwOwotKyAgICAgICAgICAgIHJldHVybiBmaXBzX2RyYmdfZXJyb3JfY2hlY2so ZGN0eCwgdGQpOwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIHJldHVybiAwOwotK30KLSsKLStp bnQgRklQU19kcmJnX2hlYWx0aF9jaGVjayhEUkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIGludCBy djsKLSsgICAgRFJCR19DVFggKnRjdHggPSBOVUxMOwotKyAgICB0Y3R4ID0gRklQU19kcmJnX25l dygwLCAwKTsKLSsgICAgZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5 cGUsICZkY3R4LT54ZmxhZ3MpOwotKyAgICBpZiAoIXRjdHgpCi0rICAgICAgICByZXR1cm4gMDsK LSsgICAgcnYgPSBmaXBzX2RyYmdfa2F0KHRjdHgsIGRjdHgtPnR5cGUsIGRjdHgtPnhmbGFncyk7 Ci0rICAgIGlmICh0Y3R4KQotKyAgICAgICAgRklQU19kcmJnX2ZyZWUodGN0eCk7Ci0rICAgIGlm IChydikKLSsgICAgICAgIGZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50 eXBlLCAmZGN0eC0+eGZsYWdzKTsKLSsgICAgZWxzZQotKyAgICAgICAgZmlwc19wb3N0X2ZhaWxl ZChGSVBTX1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0rICAgIGlmICgh cnYpCi0rICAgICAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsgICAgZWxz ZQotKyAgICAgICAgZGN0eC0+aGVhbHRoX2NoZWNrX2NudCA9IDA7Ci0rICAgIHJldHVybiBydjsK LSt9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZHJiZyh2b2lkKQotK3sKLSsgICAgRFJCR19DVFgg KmRjdHg7Ci0rICAgIERSQkdfU0VMRlRFU1RfREFUQSAqdGQ7Ci0rICAgIGludCBydiA9IDE7Ci0r ICAgIGRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDApOwotKyAgICBpZiAoIWRjdHgpCi0rICAgICAg ICByZXR1cm4gMDsKLSsgICAgZm9yICh0ZCA9IGRyYmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsr KSB7Ci0rICAgICAgICBpZiAodGQtPnBvc3QgIT0gMSkKLSsgICAgICAgICAgICBjb250aW51ZTsK LSsgICAgICAgIGlmICghZmlwc19wb3N0X3N0YXJ0ZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQs ICZ0ZC0+ZmxhZ3MpKQotKyAgICAgICAgICAgIHJldHVybiAxOwotKyAgICAgICAgaWYgKCFmaXBz X2RyYmdfc2luZ2xlX2thdChkY3R4LCB0ZCwgMSkpIHsKLSsgICAgICAgICAgICBmaXBzX3Bvc3Rf ZmFpbGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKTsKLSsgICAgICAgICAg ICBydiA9IDA7Ci0rICAgICAgICAgICAgY29udGludWU7Ci0rICAgICAgICB9Ci0rICAgICAgICBp ZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdz KSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBGSVBTX2RyYmdfZnJlZShk Y3R4KTsKLSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLStpbnQgRklQU19zZWxmdGVzdF9kcmJnX2Fs bCh2b2lkKQotK3sKLSsgICAgRFJCR19DVFggKmRjdHg7Ci0rICAgIERSQkdfU0VMRlRFU1RfREFU QSAqdGQ7Ci0rICAgIGludCBydiA9IDE7Ci0rICAgIGRjdHggPSBGSVBTX2RyYmdfbmV3KDAsIDAp OwotKyAgICBpZiAoIWRjdHgpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgZm9yICh0ZCA9IGRy YmdfdGVzdDsgdGQtPm5pZCAhPSAwOyB0ZCsrKSB7Ci0rICAgICAgICBpZiAoIWZpcHNfcG9zdF9z dGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKLSsgICAgICAgICAg ICByZXR1cm4gMTsKLSsgICAgICAgIGlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQs IDApKSB7Ci0rICAgICAgICAgICAgZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQt Pm5pZCwgJnRkLT5mbGFncyk7Ci0rICAgICAgICAgICAgcnYgPSAwOwotKyAgICAgICAgICAgIGNv bnRpbnVlOwotKyAgICAgICAgfQotKyAgICAgICAgaWYgKCFmaXBzX2RyYmdfZXJyb3JfY2hlY2so ZGN0eCwgdGQpKSB7Ci0rICAgICAgICAgICAgZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJC RywgdGQtPm5pZCwgJnRkLT5mbGFncyk7Ci0rICAgICAgICAgICAgcnYgPSAwOwotKyAgICAgICAg ICAgIGNvbnRpbnVlOwotKyAgICAgICAgfQotKyAgICAgICAgaWYgKCFmaXBzX3Bvc3Rfc3VjY2Vz cyhGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCi0rICAgICAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIH0KLSsgICAgRklQU19kcmJnX2ZyZWUoZGN0eCk7Ci0rICAgIHJldHVybiBy djsKLSt9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2Vs ZnRlc3QuaC5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVz dC5oCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0Lmgu ZmlwcwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAwODI4Mzk4MiArMDIwMAotKysrIG9wZW5zc2wtMS4w LjJjL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5oCTIwMTUtMDYtMTUgMTc6MzA6MDAu MDA4MjgzOTgyICswMjAwCi1AQCAtMCwwICsxLDE3OTEgQEAKLSsvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAq IENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0r ICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv Ci0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlLm9yZy4K LSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0r Ci0rLyogU2VsZnRlc3QgYW5kIGhlYWx0aCBjaGVjayBkYXRhIGZvciB0aGUgU1A4MDAtOTAgRFJC RyAqLwotKwotKyNkZWZpbmUgX19maXBzX2NvbnN0c2VnCi0rCi0rLyogQUVTLTEyOCB1c2UgZGYg UFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x MjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDYxLCAweDUyLCAweDdjLCAw eGUzLCAweDIzLCAweDdkLCAweDBhLCAweDA3LCAweDEwLCAweDBjLCAweDUwLCAweDMzLAotKyAg ICAweGM4LCAweGRiLCAweGZmLCAweDEyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfbm9uY2VbXSA9IHsKLSsgICAg MHg1MSwgMHgwZCwgMHg4NSwgMHg3NywgMHhlZCwgMHgyMiwgMHg5NywgMHgyOAotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf dXNlX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDU5LCAweDlmLCAw eGJiLCAweGNkLCAweGQ1LCAweDI1LCAweDY5LCAweGI1LCAweGNiLCAweGI1LCAweDAzLCAweGZl LAotKyAgICAweGQ3LCAweGQ3LCAweDAxLCAweDY3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfYWRkaXRp b25hbGlucHV0W10gPSB7Ci0rICAgIDB4ZWYsIDB4ODgsIDB4NzYsIDB4MDEsIDB4YWYsIDB4M2Ms IDB4ZmUsIDB4OGIsIDB4YWYsIDB4MjYsIDB4MDYsIDB4OWUsCi0rICAgIDB4OWEsIDB4NDcsIDB4 MDgsIDB4NzYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAw eGUyLCAweDc2LCAweGY5LCAweGY2LCAweDNhLCAweGJhLCAweDEwLCAweDlmLCAweGJmLCAweDQ3 LCAweDBlLCAweDUxLAotKyAgICAweDA5LCAweGZiLCAweGEzLCAweGI2Ci0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2Vf ZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGQ0LCAweDk4LCAweDhhLCAweDQ2 LCAweDgwLCAweDRjLCAweGRiLCAweGEzLCAweDU5LCAweDAyLCAweDU3LCAweDUyLAotKyAgICAw eDY2LCAweDFjLCAweGVhLCAweDViCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0 MltdID0gewotKyAgICAweDg4LCAweDhjLCAweDkxLCAweGQ2LCAweGJlLCAweDU2LCAweDZlLCAw eDA4LCAweDlhLCAweDYyLCAweDJiLCAweDExLAotKyAgICAweDNmLCAweDVlLCAweDMxLCAweDA2 Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4YzAsIDB4 NWMsIDB4NmIsIDB4OTgsIDB4MDEsIDB4MGQsIDB4NTgsIDB4MTgsIDB4NTEsIDB4MTgsIDB4OTYs IDB4YWUsCi0rICAgIDB4YTcsIDB4ZTMsIDB4YTgsIDB4NjcKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9yZXR1cm5l ZGJpdHNbXSA9IHsKLSsgICAgMHhjZiwgMHgwMSwgMHhhYywgMHgyMiwgMHgzMSwgMHgwNiwgMHg4 ZSwgMHhmYywgMHhjZSwgMHg1NiwgMHhlYSwgMHgyNCwKLSsgICAgMHgwZiwgMHgzOCwgMHg0Mywg MHhjNgotK307Ci0rCi0rLyogQUVTLTEyOCB1c2UgZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2VudHJvcHlpbnB1 dFtdID0gewotKyAgICAweDFmLCAweDhlLCAweDM0LCAweDgyLCAweDBjLCAweGI3LCAweGJlLCAw eGM1LCAweDAxLCAweDNlLCAweGQwLCAweGEzLAotKyAgICAweDlkLCAweDdkLCAweDFjLCAweDli Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF91c2VfZGZfbm9uY2VbXSA9IHsKLSsgICAgMHhkNSwgMHg0ZCwgMHhiZCwgMHg0YSwgMHg5 MywgMHg3ZiwgMHhiOCwgMHg5NgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0gewotKyAgICAweGFiLCAweGQ2LCAweDNmLCAweDA0LCAweGZlLCAweDI3LCAweDZiLCAw eDJkLCAweGQ3LCAweGMzLCAweDFjLCAweGYzLAotKyAgICAweDM4LCAweDY2LCAweGJhLCAweDFi Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4ZmUsIDB4ZjQsIDB4MDks IDB4YTgsIDB4YjcsIDB4NzMsIDB4MjcsIDB4OWMsIDB4NWYsIDB4YTcsIDB4ZWEsIDB4NDYsCi0r ICAgIDB4YjUsIDB4ZTIsIDB4YjIsIDB4NDEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10g PSB7Ci0rICAgIDB4NDIsIDB4ZTQsIDB4NGUsIDB4N2IsIDB4MjcsIDB4ZGQsIDB4Y2IsIDB4YmMs IDB4MGEsIDB4Y2YsIDB4YTYsIDB4NjcsCi0rICAgIDB4ZTcsIDB4NTcsIDB4MTEsIDB4YjQKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHgxNCwgMHgyNiwg MHg2OSwgMHhkOSwgMHhmMywgMHg2NSwgMHgwMywgMHhkNiwgMHg2YiwgMHhiOSwgMHg0NCwgMHgw YiwKLSsgICAgMHhjNywgMHhjNCwgMHg5ZSwgMHgzOQotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9u YWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDU1LCAweDJlLCAweDYwLCAweDlhLCAweDA1LCAw eDcyLCAweDhhLCAweGE4LCAweGVmLCAweDIyLCAweDgxLCAweDVhLAotKyAgICAweGM4LCAweDkz LCAweGZhLCAweDg0Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDNj LCAweDQwLCAweGM4LCAweGM0LCAweDE2LCAweDBjLCAweDIxLCAweGE0LCAweDM3LCAweDJjLCAw eDhmLCAweGE1LAotKyAgICAweDA2LCAweDBjLCAweDE1LCAweDJjCi0rfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcmV0dXJu ZWRiaXRzW10gPSB7Ci0rICAgIDB4ZTEsIDB4M2UsIDB4OTksIDB4OTgsIDB4ODYsIDB4NjcsIDB4 MGIsIDB4NjMsIDB4N2IsIDB4YmUsIDB4M2YsIDB4ODgsCi0rICAgIDB4NDYsIDB4ODEsIDB4Yzcs IDB4MTkKLSt9OwotKwotKy8qIEFFUy0xOTIgdXNlIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5w dXRbXSA9IHsKLSsgICAgMHgyYiwgMHg0ZSwgMHg4YiwgMHhlMSwgMHhmMSwgMHgzNCwgMHg4MCwg MHg1NiwgMHg4MSwgMHhmOSwgMHg3NCwgMHhlYywKLSsgICAgMHgxNywgMHg0NCwgMHgyYSwgMHhm MSwgMHgxNCwgMHhiMCwgMHhiZiwgMHg5NywgMHgzOSwgMHhiNywgMHgwNCwgMHg3ZAotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNl X2RmX3ByX25vbmNlW10gPSB7Ci0rICAgIDB4ZDYsIDB4OWQsIDB4ZWIsIDB4MTQsIDB4NGUsIDB4 NmMsIDB4MzAsIDB4MWUsIDB4MzksIDB4NTUsIDB4NzMsIDB4ZDAsCi0rICAgIDB4ZDEsIDB4ODAs IDB4NzgsIDB4ZmEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9 IHsKLSsgICAgMHhmYywgMHg0MywgMHg0YSwgMHhmOCwgMHg5YSwgMHg1NSwgMHhiMywgMHg1Mywg MHg4MywgMHhlMiwgMHgxOCwgMHgxNiwKLSsgICAgMHgwYywgMHhkYywgMHhjZCwgMHg1ZSwgMHg0 ZiwgMHhhMCwgMHgwMywgMHgwMSwgMHgyYiwgMHg5ZiwgMHhlNCwgMHhkNSwKLSsgICAgMHg3ZCwg MHg0OSwgMHhmMCwgMHg0MSwgMHg5ZSwgMHgzZCwgMHg5OSwgMHgwNAotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2Rm X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDVlLCAweDlmLCAweDQ5LCAweDZmLCAw eDIxLCAweDhiLCAweDFkLCAweDMyLCAweGQ1LCAweDg0LCAweDVjLCAweGFjLAotKyAgICAweGFm LCAweGRmLCAweGU0LCAweDc5LCAweDllLCAweGFmLCAweGE5LCAweDgyLCAweGQwLCAweGY4LCAw eDRmLCAweGNiLAotKyAgICAweDY5LCAweDEwLCAweDBhLCAweDdlLCAweDgxLCAweDU3LCAweGI1 LCAweDM2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHhk NCwgMHg4MSwgMHgwYywgMHhkNywgMHg2NiwgMHgzOSwgMHhlYywgMHg0MiwgMHg1MywgMHg4Nywg MHg0MSwgMHhhNSwKLSsgICAgMHgxZSwgMHg3ZCwgMHg4MCwgMHg5MSwgMHg4ZSwgMHhiYiwgMHhl ZCwgMHhhYywgMHgxNCwgMHgwMiwgMHgxYSwgMHhkNQotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2ludF9y ZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhkZiwgMHgxZCwgMHgzOSwgMHg0NSwgMHg3YywgMHg5 YiwgMHhjNiwgMHgyYiwgMHg3ZCwgMHg4YywgMHg5MywgMHhlOSwKLSsgICAgMHgxOSwgMHgzMCwg MHg2YiwgMHg2NwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsg ICAgMHgwMCwgMHg3MSwgMHgyNywgMHg0ZSwgMHhkMywgMHgxNCwgMHhmMSwgMHgyMCwgMHg3Ziwg MHg0YSwgMHg0MSwgMHgzMiwKLSsgICAgMHgyYSwgMHg5NywgMHgxMSwgMHg0MywgMHg4ZiwgMHg0 YSwgMHgxNSwgMHg3YiwgMHg5YiwgMHg1MSwgMHg3OSwgMHhkYSwKLSsgICAgMHg0OSwgMHgzZCwg MHhkZSwgMHhlOCwgMHhiYywgMHg5MywgMHg5MSwgMHg5OQotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2Vu dHJvcHlpbnB1dHByMltdID0gewotKyAgICAweDkwLCAweGVlLCAweDc2LCAweGExLCAweDQ1LCAw eDhkLCAweGI3LCAweDQwLCAweGIwLCAweDExLCAweGJmLCAweGQwLAotKyAgICAweDY1LCAweGQ3 LCAweDNjLCAweDdjLCAweDRmLCAweDIwLCAweDNmLCAweDRlLCAweDExLCAweDlkLCAweGIzLCAw eDVlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzE5Ml91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4MjQsIDB4M2IsIDB4 MjAsIDB4YTQsIDB4MzcsIDB4NjYsIDB4YmEsIDB4NzIsIDB4MzksIDB4M2YsIDB4Y2YsIDB4M2Ms Ci0rICAgIDB4N2UsIDB4MWEsIDB4MmIsIDB4ODMKLSt9OwotKwotKy8qIEFFUy0xOTIgdXNlIGRm IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHg4ZCwgMHg3NCwgMHhhNCwg MHg1MCwgMHgxYSwgMHgwMiwgMHg2OCwgMHgwYywgMHgyYSwgMHg2OSwgMHhjNCwgMHg4MiwKLSsg ICAgMHgzYiwgMHhiYiwgMHhkYSwgMHgwZSwgMHg3ZiwgMHg3NywgMHhhMywgMHgxNywgMHg3OCwg MHg1NywgMHhiMiwgMHg3YgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX25vbmNlW10gPSB7Ci0rICAgIDB4NzUsIDB4ZDUs IDB4MWYsIDB4YWMsIDB4YTQsIDB4OGQsIDB4NDIsIDB4NzgsIDB4ZDcsIDB4NjksIDB4ODYsIDB4 OWQsCi0rICAgIDB4NzcsIDB4ZDcsIDB4NDEsIDB4MGUKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg0ZSwgMHgzMywgMHg0MSwgMHgzYywgMHg5Yywg MHhjMiwgMHhkMiwgMHg1MywgMHhhZiwgMHg5MCwgMHhlYSwgMHhjZiwKLSsgICAgMHgxOSwgMHg1 MCwgMHgxZSwgMHhlNiwgMHg2ZiwgMHg2MywgMHhjOCwgMHgzMiwgMHgyMiwgMHhkYywgMHgwNywg MHg2NSwKLSsgICAgMHg5YywgMHhkMywgMHhmOCwgMHgzMCwgMHg5ZSwgMHhlZCwgMHgzNSwgMHg3 MAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDVkLCAweDhiLCAweDhj LCAweGMxLCAweGRmLCAweDBlLCAweDAyLCAweDc4LCAweGZiLCAweDE5LCAweGI4LCAweDY5LAot KyAgICAweDc4LCAweDRlLCAweDljLCAweDUyLCAweGJjLCAweGM3LCAweDIwLCAweGM5LCAweGU2 LCAweDVlLCAweDc3LCAweDIyLAotKyAgICAweDI4LCAweDNkLCAweDBjLCAweDllLCAweDY4LCAw eGE4LCAweDQ1LCAweGQ3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAw eGQ1LCAweGU3LCAweDA4LCAweGM1LCAweDE5LCAweDk5LCAweGQ1LCAweDMxLCAweDAzLCAweDBh LCAweDc0LCAweGI2LAotKyAgICAweGI3LCAweGVkLCAweGU5LCAweGVhCi0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2Vf ZGZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4OWMsIDB4MjYsIDB4ZGEsIDB4ZjEs IDB4YWMsIDB4ZDksIDB4NWEsIDB4ZDYsIDB4YTgsIDB4NjUsIDB4ZjUsIDB4MDIsCi0rICAgIDB4 OGYsIDB4ZGMsIDB4YTIsIDB4MDksIDB4NTQsIDB4YTYsIDB4ZTIsIDB4YTQsIDB4ZGUsIDB4MzIs IDB4ZTAsIDB4MDEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsK LSsgICAgMHg5YiwgMHg5MCwgMHhiMCwgMHgzYSwgMHgwZSwgMHgzYSwgMHg4MCwgMHgwNywgMHg0 YSwgMHhmNCwgMHhkYSwgMHg3NiwKLSsgICAgMHgyOCwgMHgzMCwgMHgzYywgMHhlZSwgMHg1NCwg MHgxYiwgMHg5NCwgMHg1OSwgMHg1MSwgMHg0MywgMHg1NiwgMHg3NywKLSsgICAgMHhhZiwgMHg4 OCwgMHhkZCwgMHg2MywgMHg4OSwgMHg0NywgMHgwNiwgMHg2NQotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2FkZGl0aW9u YWxpbnB1dDJbXSA9IHsKLSsgICAgMHgzYywgMHgxMSwgMHg2NCwgMHg3YSwgMHg5NiwgMHhmNSwg MHhkOCwgMHhiOCwgMHhhZSwgMHhkNiwgMHg3MCwgMHg0ZSwKLSsgICAgMHgxNiwgMHg5NiwgMHhk ZSwgMHhlOSwgMHg2MiwgMHhiYywgMHhlZSwgMHgyOCwgMHgyZiwgMHgyNiwgMHhhNiwgMHhmMCwK LSsgICAgMHg1NiwgMHhlZiwgMHhhMywgMHhmMSwgMHg2YiwgMHhhMSwgMHhiMSwgMHg3NwotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf dXNlX2RmX3JldHVybmVkYml0c1tdID0gewotKyAgICAweDBiLCAweGUyLCAweDU2LCAweDAzLCAw eDFlLCAweGRiLCAweDJjLCAweDZkLCAweDdmLCAweDFiLCAweDE1LCAweDU4LAotKyAgICAweDFh LCAweGY5LCAweDEzLCAweDI4Ci0rfTsKLSsKLSsvKiBBRVMtMjU2IHVzZSBkZiBQUiAgKi8KLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZf cHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4NjEsIDB4NjgsIDB4ZmMsIDB4MWEsIDB4ZjAs IDB4YjUsIDB4OTUsIDB4NmIsIDB4ODUsIDB4MDksIDB4OWIsIDB4NzQsCi0rICAgIDB4M2YsIDB4 MTMsIDB4NzgsIDB4NDksIDB4M2IsIDB4ODUsIDB4ZWMsIDB4OTMsIDB4MTMsIDB4M2IsIDB4YTks IDB4NGYsCi0rICAgIDB4OTYsIDB4YWIsIDB4MmMsIDB4ZTQsIDB4YzgsIDB4OGYsIDB4ZGQsIDB4 NmEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X3VzZV9kZl9wcl9ub25jZVtdID0gewotKyAgICAweGFkLCAweGQyLCAweGJiLCAweGJh LCAweGI3LCAweDY1LCAweDg5LCAweGMzLCAweDIxLCAweDZjLCAweDU1LCAweDMzLAotKyAgICAw eDJiLCAweDM2LCAweGZmLCAweGE0Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPSB7Ci0rICAgIDB4NmUsIDB4Y2EsIDB4ZTcsIDB4MjAsIDB4NzIsIDB4ZDMsIDB4 ODQsIDB4NWEsIDB4MzIsIDB4ZDMsIDB4NGIsIDB4MjQsCi0rICAgIDB4NzIsIDB4YzQsIDB4NjMs IDB4MmIsIDB4OWQsIDB4MTIsIDB4MjQsIDB4MGMsIDB4MjMsIDB4MjYsIDB4OGUsIDB4ODMsCi0r ICAgIDB4MTYsIDB4MzcsIDB4MGIsIDB4ZDEsIDB4MDYsIDB4NGYsIDB4NjgsIDB4NmQKLSt9Owot KwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg3ZSwgMHgwOCwgMHg0 YSwgMHhiYiwgMHhlMywgMHgyMSwgMHg3YywgMHhjOSwgMHgyMywgMHhkMiwgMHhmOCwgMHhiMCwK LSsgICAgMHg3MywgMHg5OCwgMHhiYSwgMHg4NCwgMHg3NCwgMHgyMywgMHhhYiwgMHgwNiwgMHg4 YSwgMHhlMiwgMHgyMiwgMHhkMywKLSsgICAgMHg3YiwgMHhjZSwgMHg5YiwgMHhkMiwgMHg0YSwg MHg3NiwgMHhiOCwgMHhkZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPSB7 Ci0rICAgIDB4MGIsIDB4MjMsIDB4YWYsIDB4ZGYsIDB4ZjEsIDB4NjIsIDB4ZDcsIDB4ZDMsIDB4 NDMsIDB4OTcsIDB4ZjgsIDB4NzcsCi0rICAgIDB4MDQsIDB4YTgsIDB4NDIsIDB4MjAsIDB4YmQs IDB4ZjYsIDB4MGYsIDB4YzEsIDB4MTcsIDB4MmYsIDB4OWYsIDB4NTQsCi0rICAgIDB4YmIsIDB4 NTYsIDB4MTcsIDB4ODYsIDB4NjgsIDB4MGUsIDB4YmEsIDB4YTkKLSt9OwotKwotK19fZmlwc19j b25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9w cl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4MzEsIDB4OGUsIDB4YWQsIDB4YWYsIDB4 NDAsIDB4ZWIsIDB4NmIsIDB4NzQsIDB4MzEsIDB4NDYsIDB4ODAsIDB4YzcsCi0rICAgIDB4MTcs IDB4YWIsIDB4M2MsIDB4N2EKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10g PSB7Ci0rICAgIDB4OTQsIDB4NmIsIDB4YzksIDB4OWYsIDB4YWIsIDB4OGQsIDB4YzUsIDB4ZWMs IDB4NzEsIDB4ODgsIDB4MWQsIDB4MDAsCi0rICAgIDB4OGMsIDB4ODksIDB4NjgsIDB4ZTQsIDB4 YzgsIDB4MDcsIDB4NzcsIDB4MzYsIDB4MTcsIDB4NmQsIDB4NzksIDB4NzgsCi0rICAgIDB4Yzcs IDB4MDYsIDB4NGUsIDB4OTksIDB4MDQsIDB4MjgsIDB4MjksIDB4YzMKLSt9OwotKwotK19fZmlw c19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9k Zl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHhiZiwgMHg2YywgMHg1OSwgMHgyYSwg MHgwZCwgMHg0NCwgMHgwZiwgMHhhZSwgMHg5YSwgMHg1ZSwgMHgwMywgMHg3MywKLSsgICAgMHhk OCwgMHhhNiwgMHhlMSwgMHhjZiwgMHgyNSwgMHg2MSwgMHgzOCwgMHgyNCwgMHg4NiwgMHg5ZSwg MHg1MywgMHhlOCwKLSsgICAgMHhhNCwgMHhkZiwgMHg1NiwgMHhmNCwgMHgwNiwgMHgwNywgMHg5 YywgMHgwZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAweDIyLCAweDRh LCAweGI0LCAweGI4LCAweGI2LCAweGVlLCAweDdkLCAweGIxLCAweDllLCAweGM5LCAweGY5LCAw eGEwLAotKyAgICAweGQ5LCAweGUyLCAweDk3LCAweDAwCi0rfTsKLSsKLSsvKiBBRVMtMjU2IHVz ZSBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl91c2VfZGZfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4YTUsIDB4M2UsIDB4 MzcsIDB4MTAsIDB4MTcsIDB4NDMsIDB4OTEsIDB4OTMsIDB4NTksIDB4MWUsIDB4NDcsIDB4NTAs Ci0rICAgIDB4ODcsIDB4YWEsIDB4ZGQsIDB4ZDUsIDB4YzEsIDB4YzMsIDB4ODYsIDB4Y2QsIDB4 Y2EsIDB4MGQsIDB4ZGIsIDB4NjgsCi0rICAgIDB4ZTAsIDB4MDIsIDB4ZDgsIDB4MGYsIDB4ZGMs IDB4NDAsIDB4MWEsIDB4NDcKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9ub25jZVtdID0gewotKyAgICAweGE5LCAweDRk LCAweGE1LCAweDVhLCAweGZkLCAweGM1LCAweDBjLCAweGU1LCAweDFjLCAweDlhLCAweDNiLCAw eDhhLAotKyAgICAweDRjLCAweDQ0LCAweDg0LCAweDQwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcGVyc29u YWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4OGIsIDB4NTIsIDB4YTIsIDB4NGEsIDB4OTMs IDB4YzMsIDB4NGUsIDB4YTcsIDB4MWUsIDB4MWMsIDB4YTcsIDB4MDUsCi0rICAgIDB4ZWIsIDB4 ODIsIDB4OWIsIDB4YTYsIDB4NWQsIDB4ZTQsIDB4ZDQsIDB4ZTAsIDB4N2YsIDB4YTMsIDB4ZDgs IDB4NmIsCi0rICAgIDB4MzcsIDB4ODQsIDB4NWYsIDB4ZjEsIDB4YzcsIDB4ZDUsIDB4ZjYsIDB4 ZDIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHgyMCwgMHhmNCwgMHgy MiwgMHhlZCwgMHhmOCwgMHg1YywgMHhhMSwgMHg2YSwgMHgwMSwgMHhjZiwgMHhiZSwgMHg1ZiwK LSsgICAgMHg4ZCwgMHg2YywgMHg5NCwgMHg3ZiwgMHhhZSwgMHgxMiwgMHhhOCwgMHg1NywgMHhk YiwgMHgyYSwgMHhhOSwgMHhiZiwKLSsgICAgMHhjNywgMHhiMywgMHg2NSwgMHg4MSwgMHg4MCwg MHg4ZCwgMHgwZCwgMHg0NgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAg MHg0ZSwgMHg0NCwgMHhmZCwgMHhmMywgMHg5ZSwgMHgyOSwgMHhhMiwgMHhiOCwgMHgwZiwgMHg1 ZCwgMHg2YywgMHhlMSwKLSsgICAgMHgyOCwgMHgwYywgMHgzYiwgMHhjMQotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNl X2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweGRkLCAweDQwLCAweGU1LCAweDk4 LCAweDdiLCAweDI3LCAweDE2LCAweDczLCAweDE1LCAweDY4LCAweGQyLCAweDc2LAotKyAgICAw eGJmLCAweDBjLCAweDY3LCAweDE1LCAweDc1LCAweDc5LCAweDAzLCAweGQzLCAweGRlLCAweGRl LCAweDkxLCAweDQ2LAotKyAgICAweDQyLCAweGRkLCAweGQ0LCAweDY3LCAweGM4LCAweDc5LCAw eGM4LCAweDFlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0r ICAgIDB4N2YsIDB4ZDgsIDB4MWYsIDB4YmQsIDB4MmEsIDB4YjUsIDB4MWMsIDB4MTEsIDB4NWQs IDB4ODMsIDB4NGUsIDB4OTksCi0rICAgIDB4ZjYsIDB4NWMsIDB4YTUsIDB4NDAsIDB4MjAsIDB4 ZWQsIDB4MzgsIDB4OGUsIDB4ZDUsIDB4OWUsIDB4ZTAsIDB4NzUsCi0rICAgIDB4OTMsIDB4ZmUs IDB4MTIsIDB4NWUsIDB4NWQsIDB4NzMsIDB4ZmIsIDB4NzUKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9hZGRpdGlvbmFs aW5wdXQyW10gPSB7Ci0rICAgIDB4Y2QsIDB4MmMsIDB4ZmYsIDB4MTQsIDB4NjksIDB4M2UsIDB4 NGMsIDB4OWUsIDB4ZmQsIDB4ZmUsIDB4MjYsIDB4MGQsCi0rICAgIDB4ZTksIDB4ODYsIDB4MDAs IDB4NDksIDB4MzAsIDB4YmEsIDB4YjEsIDB4YzYsIDB4NTAsIDB4NTcsIDB4NzcsIDB4MmEsCi0r ICAgIDB4NjIsIDB4MzksIDB4MmMsIDB4M2IsIDB4NzQsIDB4ZWIsIDB4YzksIDB4MGQKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3Vz ZV9kZl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg0ZiwgMHg3OCwgMHhiZSwgMHhiOSwgMHg0 ZCwgMHg5NywgMHg4YywgMHhlOSwgMHhkMCwgMHg5NywgMHhmZSwgMHhhZCwKLSsgICAgMHhmYSwg MHhmZCwgMHgzNSwgMHg1ZQotK307Ci0rCi0rLyogQUVTLTEyOCBubyBkZiBQUiAgKi8KLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9l bnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHg5YSwgMHgyNSwgMHg2NSwgMHgxMCwgMHg2NywgMHhk NSwgMHhiNiwgMHg2YiwgMHg3MCwgMHhhMSwgMHhiMywgMHhhNCwKLSsgICAgMHg0MywgMHg5NSwg MHg4MCwgMHhjMCwgMHg4NCwgMHgwYSwgMHg3OSwgMHhiMCwgMHg4OCwgMHg3NCwgMHhmMiwgMHhi ZiwKLSsgICAgMHgzMSwgMHg2YywgMHgzMywgMHgzOCwgMHgwYiwgMHgwMCwgMHhiMiwgMHg1YQot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x Mjhfbm9fZGZfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHg3OCwgMHg0NywgMHg2YiwgMHhmNywgMHg5 MCwgMHg4ZSwgMHg4NywgMHhmMQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPSB7Ci0rICAgIDB4ZjcsIDB4MjIsIDB4MWQsIDB4M2EsIDB4YmUsIDB4MWQsIDB4Y2Es IDB4MzIsIDB4MWIsIDB4YmQsIDB4ODcsIDB4MGMsCi0rICAgIDB4NTEsIDB4MjQsIDB4MTksIDB4 ZWUsIDB4YTMsIDB4MjMsIDB4MDksIDB4NjMsIDB4MzMsIDB4M2QsIDB4YTgsIDB4MGMsCi0rICAg IDB4MWMsIDB4ZmEsIDB4NDIsIDB4ODksIDB4Y2MsIDB4NmYsIDB4YTAsIDB4YTgKLSt9OwotKwot K19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweGM5LCAweGUwLCAweDgwLCAw eGJmLCAweDhjLCAweDQ1LCAweDU4LCAweDM5LCAweGZmLCAweDAwLCAweGFiLCAweDAyLAotKyAg ICAweDRjLCAweDNlLCAweDNhLCAweDk1LCAweDliLCAweDgwLCAweGE4LCAweDIxLCAweDJhLCAw eGVlLCAweGJhLCAweDczLAotKyAgICAweGIxLCAweGQ5LCAweGNmLCAweDI4LCAweGY2LCAweDhm LCAweDliLCAweDEyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweDRj LCAweGE4LCAweGM1LCAweGYwLCAweDU5LCAweDllLCAweGE2LCAweDhkLCAweDI2LCAweDUzLCAw eGQ3LCAweDhhLAotKyAgICAweGE5LCAweGQ4LCAweGY3LCAweGVkLCAweGIyLCAweGY5LCAweDEy LCAweDQyLCAweGUxLCAweGU1LCAweGJkLCAweGU3LAotKyAgICAweGU3LCAweDFkLCAweDc0LCAw eDk5LCAweDAwLCAweDlkLCAweDMxLCAweDNlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9pbnRfcmV0dXJu ZWRiaXRzW10gPSB7Ci0rICAgIDB4ZTIsIDB4YWMsIDB4MjAsIDB4ZjAsIDB4ODAsIDB4ZTcsIDB4 YmMsIDB4N2UsIDB4OWMsIDB4N2IsIDB4NjUsIDB4NzEsCi0rICAgIDB4YWYsIDB4MTksIDB4MzIs IDB4MTYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHgz MiwgMHg3ZiwgMHgzOCwgMHg4YiwgMHg3MywgMHgwYSwgMHg3OCwgMHg4MywgMHhkYywgMHgzMCwg MHhiZSwgMHg5ZiwKLSsgICAgMHgxMCwgMHgxZiwgMHhmNSwgMHgxZiwgMHhjYSwgMHgwMCwgMHhi NSwgMHgwZCwgMHhkNiwgMHg5ZCwgMHg2MCwgMHg4MywKLSsgICAgMHg1MSwgMHg1NCwgMHg3ZCwg MHgzOCwgMHgyMywgMHgzYSwgMHg1MiwgMHg1MAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlu cHV0cHIyW10gPSB7Ci0rICAgIDB4MTgsIDB4NjEsIDB4NTMsIDB4NTYsIDB4ZWQsIDB4ZWQsIDB4 ZDcsIDB4MjAsIDB4ZmIsIDB4NzEsIDB4MDQsIDB4N2EsCi0rICAgIDB4YjIsIDB4YWMsIDB4YzEs IDB4MjgsIDB4Y2QsIDB4ZjIsIDB4YzIsIDB4ZmMsIDB4YWEsIDB4YjEsIDB4MDYsIDB4MDcsCi0r ICAgIDB4ZTksIDB4NDYsIDB4OTUsIDB4MDIsIDB4NDgsIDB4MDEsIDB4NzgsIDB4ZjkKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25v X2RmX3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAweDI5LCAweGM4LCAweDFiLCAweDE1LCAw eGIxLCAweGQxLCAweGMyLCAweGY2LCAweDcxLCAweDg2LCAweDY4LCAweDMzLAotKyAgICAweDU3 LCAweDgyLCAweDMzLCAweGFmCi0rfTsKLSsKLSsvKiBBRVMtMTI4IG5vIGRmIE5vIFBSICAqLwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2Rm X2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweGM5LCAweGM1LCAweDc5LCAweGJjLCAweGU4LCAw eGM1LCAweDE5LCAweGQ4LCAweGJjLCAweDY2LCAweDczLCAweDY3LAotKyAgICAweGY2LCAweGQz LCAweDcyLCAweGFhLCAweGE2LCAweDE2LCAweGI4LCAweDUwLCAweGI3LCAweDQ3LCAweDNhLCAw eDQyLAotKyAgICAweGFiLCAweGY0LCAweDE2LCAweGIyLCAweDk2LCAweGQyLCAweGI2LCAweDYw Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9ub19kZl9ub25jZVtdID0gewotKyAgICAweDVmLCAweGJmLCAweDk3LCAweDBjLCAweDRi LCAweGE0LCAweDg3LCAweDEzCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9IHsKLSsgICAgMHhjZSwgMHhmYiwgMHg3YiwgMHgzZiwgMHhkNCwgMHg2YiwgMHgyOSwgMHgw ZCwgMHg2OSwgMHgwNiwgMHhmZiwgMHhiYiwKLSsgICAgMHhmMiwgMHhlNSwgMHhjNiwgMHg2Yywg MHgwYSwgMHgxMCwgMHhhMCwgMHhjZiwgMHgxYSwgMHg0OCwgMHhjNywgMHg4YiwKLSsgICAgMHgz YywgMHgxNiwgMHg4OCwgMHhlZCwgMHg1MCwgMHgxMywgMHg4MSwgMHhjZQotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRk aXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4NGIsIDB4MjIsIDB4NDYsIDB4MTgsIDB4MDIsIDB4 N2IsIDB4ZDIsIDB4MWIsIDB4MjIsIDB4NDIsIDB4N2MsIDB4MzcsCi0rICAgIDB4ZDksIDB4ZjYs IDB4ZTgsIDB4OWIsIDB4MTIsIDB4MzAsIDB4NWYsIDB4ZTksIDB4OTAsIDB4ZTgsIDB4MDgsIDB4 MjQsCi0rICAgIDB4NGYsIDB4MDYsIDB4NjYsIDB4ZGIsIDB4MTksIDB4MmIsIDB4MTMsIDB4OTUK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgyZSwgMHg5NiwgMHg3MCwg MHg2NCwgMHhmYSwgMHhkZiwgMHhkZiwgMHg1NywgMHhiNSwgMHg4MiwgMHhlZSwgMHhkNiwKLSsg ICAgMHhlZCwgMHgzZSwgMHg2NSwgMHhjMgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfZW50cm9weWlucHV0cmVz ZWVkW10gPSB7Ci0rICAgIDB4MjYsIDB4YzAsIDB4NzIsIDB4MTYsIDB4M2EsIDB4NGIsIDB4Yjcs IDB4OTksIDB4ZDQsIDB4MDcsIDB4YWYsIDB4NjYsCi0rICAgIDB4NjIsIDB4MzYsIDB4OTYsIDB4 YTQsIDB4NTEsIDB4MTcsIDB4ZmEsIDB4MDcsIDB4OGIsIDB4MTcsIDB4NWUsIDB4YTEsCi0rICAg IDB4MmYsIDB4M2MsIDB4MTAsIDB4ZTcsIDB4OTAsIDB4ZDAsIDB4NDYsIDB4MDAKLSt9OwotKwot K19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDgzLCAweDM5LCAweDM3 LCAweDdiLCAweDAyLCAweDA2LCAweGQyLCAweDEyLCAweDEzLCAweDhkLCAweDhiLCAweGYyLAot KyAgICAweGYwLCAweGY2LCAweDI2LCAweGViLCAweGE0LCAweDIyLCAweDdiLCAweGMyLCAweGU3 LCAweGJhLCAweDc5LCAweGU0LAotKyAgICAweDNiLCAweDc3LCAweDVkLCAweDRkLCAweDQ3LCAw eGIyLCAweDJkLCAweGI0Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4 MGIsIDB4YjksIDB4NjcsIDB4MzcsIDB4ZGIsIDB4ODMsIDB4ZGYsIDB4Y2EsIDB4ODEsIDB4OGIs IDB4ZjksIDB4M2YsCi0rICAgIDB4ZjEsIDB4MTEsIDB4MWIsIDB4MmYsIDB4ZjAsIDB4NjEsIDB4 YTYsIDB4ZGYsIDB4YmEsIDB4YTMsIDB4YjEsIDB4YWMsCi0rICAgIDB4ZDMsIDB4ZTYsIDB4MDks IDB4YjgsIDB4MmMsIDB4NmEsIDB4NjcsIDB4ZDYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3JldHVybmVkYml0c1tdID0g ewotKyAgICAweDFlLCAweGE3LCAweGE0LCAweGU0LCAweGUxLCAweGE2LCAweDdjLCAweDY5LCAw eDlhLCAweDQ0LCAweDZjLCAweDM2LAotKyAgICAweDgxLCAweDM3LCAweDE5LCAweGQ0Ci0rfTsK LSsKLSsvKiBBRVMtMTkyIG5vIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAg ICAweDlkLCAweDJjLCAweGQyLCAweDU1LCAweDY2LCAweGVhLCAweGUwLCAweGJlLCAweDE4LCAw eGI3LCAweDc2LCAweGU3LAotKyAgICAweDczLCAweDM1LCAweGQ4LCAweDFmLCAweGFkLCAweDNh LCAweGUzLCAweDgxLCAweDBlLCAweDkyLCAweGQwLCAweDYxLAotKyAgICAweGM5LCAweDEyLCAw eDI2LCAweGY2LCAweDFjLCAweGRmLCAweGZlLCAweDQ3LCAweGFhLCAweGZlLCAweDdkLCAweDVh LAotKyAgICAweDE3LCAweDFmLCAweDhkLCAweDlhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9ub25jZVtdID0gewot KyAgICAweDQ0LCAweDgyLCAweGVkLCAweGU4LCAweDRjLCAweDI4LCAweDVhLCAweDE0LCAweGZm LCAweDg4LCAweDhkLCAweDE5LAotKyAgICAweDYxLCAweDVjLCAweGVlLCAweDBmCi0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg0NywgMHhkNywg MHg5YiwgMHg5OSwgMHhhYSwgMHhjYiwgMHhlNywgMHhkMiwgMHg1NywgMHg2NiwgMHgyYywgMHhl MSwKLSsgICAgMHg3OCwgMHhkNiwgMHgyYywgMHhlYSwgMHhhMywgMHgyMywgMHg1ZiwgMHgyYSwg MHhjMSwgMHgzYSwgMHhmMCwgMHhhNCwKLSsgICAgMHgyMCwgMHgzYiwgMHhmYSwgMHgwNywgMHhk NSwgMHgwNSwgMHgwMiwgMHhlNCwgMHg1NywgMHgwMSwgMHhiNiwgMHgxMCwKLSsgICAgMHg1Nywg MHgyZSwgMHhlNywgMHg1NQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7 Ci0rICAgIDB4NGIsIDB4NzQsIDB4MGIsIDB4NDAsIDB4Y2UsIDB4NmIsIDB4YzIsIDB4NmEsIDB4 MjQsIDB4YjQsIDB4ZjMsIDB4YWQsCi0rICAgIDB4N2EsIDB4YTUsIDB4N2EsIDB4YTIsIDB4MTUs IDB4ZTIsIDB4YzgsIDB4NjEsIDB4MTUsIDB4YzYsIDB4YjcsIDB4ODUsCi0rICAgIDB4NjksIDB4 MTEsIDB4YWQsIDB4N2IsIDB4MTQsIDB4ZDIsIDB4ZjYsIDB4MTIsIDB4YTEsIDB4OTUsIDB4NWQs IDB4M2YsCi0rICAgIDB4ZTIsIDB4ZDAsIDB4MGMsIDB4MmYKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2VudHJvcHlp bnB1dHByW10gPSB7Ci0rICAgIDB4MGMsIDB4OWMsIDB4YWQsIDB4MDUsIDB4ZWUsIDB4YWUsIDB4 NDgsIDB4MjMsIDB4ODksIDB4NTksIDB4YTEsIDB4OTQsCi0rICAgIDB4ZDcsIDB4ZDgsIDB4NzUs IDB4ZDUsIDB4NTQsIDB4OTMsIDB4YzcsIDB4NGEsIDB4ZDksIDB4MjYsIDB4ZGUsIDB4ZWIsCi0r ICAgIDB4YmEsIDB4YjAsIDB4N2UsIDB4MzAsIDB4MWQsIDB4NWYsIDB4NjksIDB4NDAsIDB4OWMs IDB4M2IsIDB4MTcsIDB4NTgsCi0rICAgIDB4MWQsIDB4MzAsIDB4YjMsIDB4NzgKLSt9OwotKwot K19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhmNywgMHg5MywgMHhiMCwg MHg2ZCwgMHg3NywgMHg4MywgMHhkNSwgMHgzOCwgMHgwMSwgMHhlMSwgMHg1MiwgMHg0MCwKLSsg ICAgMHg3ZSwgMHgzZSwgMHgwYywgMHgyNgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfYWRkaXRpb25hbGlu cHV0MltdID0gewotKyAgICAweGJjLCAweDRiLCAweDM3LCAweDQ0LCAweDFjLCAweGM1LCAweDQ1 LCAweDVmLCAweDhmLCAweDUxLCAweDYyLCAweDhhLAotKyAgICAweDg1LCAweDMwLCAweDFkLCAw eDdjLCAweGU0LCAweGNmLCAweGY3LCAweDQ0LCAweGNlLCAweDMyLCAweDNlLCAweDU3LAotKyAg ICAweDk1LCAweGE0LCAweDJhLCAweGRmLCAweGZkLCAweDllLCAweDM4LCAweDQxLCAweGIzLCAw eGY2LCAweGM1LCAweGVlLAotKyAgICAweDBjLCAweDRiLCAweGVlLCAweDZlCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9u b19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHhlYywgMHhhZiwgMHhmNiwgMHg0 ZiwgMHhiMSwgMHhhMCwgMHg1NCwgMHhiNSwgMHg1YiwgMHhlMywgMHg0NiwgMHhiMCwKLSsgICAg MHg3NiwgMHg1YSwgMHg3YywgMHgzZiwgMHg3YiwgMHg5NCwgMHg2OSwgMHgyMSwgMHg1MSwgMHgw MiwgMHhlNSwgMHg5ZiwKLSsgICAgMHgwNCwgMHg1OSwgMHgwMiwgMHg5OCwgMHhjNiwgMHg0Mywg MHgyYywgMHhjYywgMHgyNiwgMHg0YywgMHg4NywgMHg2YiwKLSsgICAgMHg4ZSwgMHgwYSwgMHg4 MywgMHhkZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4NzQsIDB4NDUs IDB4ZmIsIDB4NTMsIDB4ODQsIDB4OTYsIDB4YmUsIDB4ZmYsIDB4MTUsIDB4Y2MsIDB4NDEsIDB4 OTEsCi0rICAgIDB4YjksIDB4YTEsIDB4MjEsIDB4NjgKLSt9OwotKwotKy8qIEFFUy0xOTIgbm8g ZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4M2MsIDB4N2QsIDB4YjUs IDB4ZTAsIDB4NTQsIDB4ZDksIDB4NmUsIDB4OGMsIDB4YTksIDB4ODYsIDB4Y2UsIDB4NGUsCi0r ICAgIDB4NmIsIDB4YWYsIDB4ZWIsIDB4MmYsIDB4ZTcsIDB4NzUsIDB4ZTAsIDB4OGIsIDB4YTQs IDB4M2IsIDB4MDcsIDB4ZmUsCi0rICAgIDB4YmUsIDB4MzMsIDB4NzUsIDB4OTMsIDB4ODAsIDB4 MjcsIDB4YjUsIDB4MjksIDB4NDcsIDB4OGIsIDB4YzcsIDB4MjgsCi0rICAgIDB4OTQsIDB4YzMs IDB4NTksIDB4NjMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX25vX2RmX25vbmNlW10gPSB7Ci0rICAgIDB4NDMsIDB4ZjEsIDB4N2Qs IDB4YjgsIDB4YzMsIDB4ZmUsIDB4ZDAsIDB4MjMsIDB4NmIsIDB4YjQsIDB4OTIsIDB4ZGIsCi0r ICAgIDB4MjksIDB4ZmQsIDB4NDUsIDB4NzEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0gewotKyAgICAweDlmLCAweDI0LCAweDI5LCAweDk5LCAweDllLCAweDAxLCAw eGFiLCAweGU5LCAweDE5LCAweGQ4LCAweDIzLCAweDA4LAotKyAgICAweGI3LCAweGQ2LCAweDdl LCAweDhjLCAweGMwLCAweDllLCAweDdmLCAweDZlLCAweDViLCAweDMzLCAweDIwLCAweDk2LAot KyAgICAweDBiLCAweDIzLCAweDJjLCAweGE1LCAweDZhLCAweGY4LCAweDFiLCAweDA0LCAweDI2 LCAweGRiLCAweDJlLCAweDJiLAotKyAgICAweDNiLCAweDg4LCAweGNlLCAweDM1Ci0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg5NCwgMHhlOSwgMHg3YywgMHgzZCwgMHhh NywgMHhkYiwgMHg2MCwgMHg4MywgMHgxZiwgMHg5OCwgMHgzZiwgMHgwYiwKLSsgICAgMHg4OCwg MHg1OSwgMHg1NywgMHg1MSwgMHg4OCwgMHg5ZiwgMHg3NiwgMHg0OSwgMHg5ZiwgMHhhNiwgMHhk YSwgMHg3MSwKLSsgICAgMHgxZCwgMHgwZCwgMHg0NywgMHgxNiwgMHg2MywgMHhjNSwgMHg2OCwg MHhlNCwgMHg1ZCwgMHgzOSwgMHg2OSwgMHhiMywKLSsgICAgMHgzZSwgMHhiZSwgMHhkNCwgMHg4 ZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xOTJfbm9fZGZfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGY5LCAweGQ3LCAweGFk LCAweDY5LCAweGFiLCAweDhmLCAweDIzLCAweDU2LCAweDcwLCAweDE3LCAweDRmLCAweDJhLAot KyAgICAweDQ1LCAweGU3LCAweDRhLCAweGM1Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9lbnRyb3B5aW5wdXRy ZXNlZWRbXSA9IHsKLSsgICAgMHhhNiwgMHg3MSwgMHg2YSwgMHgzZCwgMHhiYSwgMHhkMSwgMHhl OCwgMHg2NiwgMHhhNiwgMHhlZiwgMHhiMiwgMHgwZSwKLSsgICAgMHhhOCwgMHg5YywgMHhhYSwg MHg0ZSwgMHhhZiwgMHgxNywgMHg4OSwgMHg1MCwgMHgwMCwgMHhkYSwgMHhhMSwgMHhiMSwKLSsg ICAgMHgwYiwgMHhhNCwgMHhkOSwgMHgzNSwgMHg4OSwgMHhjOCwgMHhlNSwgMHhiMCwgMHhkOSwg MHhiNywgMHhjNCwgMHgzMywKLSsgICAgMHg5YiwgMHhjYiwgMHg3ZSwgMHg3NQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf bm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4MjcsIDB4MjEsIDB4ZmMs IDB4YzIsIDB4YmQsIDB4ZjMsIDB4M2MsIDB4Y2UsIDB4YzMsIDB4Y2EsIDB4YzEsIDB4MDEsCi0r ICAgIDB4ZTAsIDB4ZmYsIDB4OTMsIDB4MTIsIDB4N2QsIDB4NTQsIDB4NDIsIDB4ZTMsIDB4OWYs IDB4MDMsIDB4ZGYsIDB4MjcsCi0rICAgIDB4MDQsIDB4MDcsIDB4M2MsIDB4NTMsIDB4N2YsIDB4 YTgsIDB4NjYsIDB4YzgsIDB4OTcsIDB4NGIsIDB4NjEsIDB4NDAsCi0rICAgIDB4NWQsIDB4N2Es IDB4MjUsIDB4NzkKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHgyZCwg MHg4ZSwgMHgxNiwgMHg1ZCwgMHgwYiwgMHg5ZiwgMHhlYiwgMHhhYSwgMHhkNiwgMHhlYywgMHgy OCwgMHg3MSwKLSsgICAgMHg3YywgMHgwYiwgMHhjMSwgMHgxZCwgMHhkNCwgMHg0NCwgMHgxOSwg MHg0NywgMHhmZCwgMHgxZCwgMHg3YywgMHhlNSwKLSsgICAgMHhmMywgMHgyNywgMHhlMSwgMHhi NiwgMHg3MiwgMHgwYSwgMHhlMCwgMHhlYywgMHgwZSwgMHhjZCwgMHhlZiwgMHgxYSwKLSsgICAg MHg5MSwgMHg2YSwgMHhlMywgMHg1ZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAg IDB4ZTUsIDB4ZGEsIDB4YjgsIDB4ZTAsIDB4NjMsIDB4NTksIDB4NWEsIDB4Y2MsIDB4M2QsIDB4 ZGMsIDB4OWYsIDB4ZTgsCi0rICAgIDB4NjYsIDB4NjcsIDB4MmMsIDB4OTIKLSt9OwotKwotKy8q IEFFUy0yNTYgbm8gZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4MTUs IDB4YzcsIDB4NWQsIDB4Y2IsIDB4NDEsIDB4NGIsIDB4MTYsIDB4MDEsIDB4M2EsIDB4ZDEsIDB4 NDQsIDB4ZTgsCi0rICAgIDB4MjIsIDB4MzIsIDB4YzYsIDB4OWMsIDB4M2YsIDB4ZTcsIDB4NDMs IDB4ZjUsIDB4OWEsIDB4ZDMsIDB4ZWEsIDB4ZjIsCi0rICAgIDB4ZDcsIDB4NGUsIDB4NmUsIDB4 NmEsIDB4NTUsIDB4NzMsIDB4NDAsIDB4ZWYsIDB4ODksIDB4YWQsIDB4MGQsIDB4MDMsCi0rICAg IDB4OTYsIDB4N2UsIDB4NzgsIDB4ODEsIDB4MmYsIDB4OTEsIDB4MWIsIDB4NDQsIDB4YjAsIDB4 MDIsIDB4YmEsIDB4MWMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX25vbmNlW10gPSB7Ci0rICAgIDB4ZGMsIDB4ZTQs IDB4ZDQsIDB4MjcsIDB4N2EsIDB4OTAsIDB4ZDcsIDB4OTksIDB4NDMsIDB4YTEsIDB4M2MsIDB4 MzAsCi0rICAgIDB4Y2MsIDB4NGIsIDB4ZWUsIDB4MmUKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweGUzLCAweGU2LCAweGI5LCAweDExLCAweGU0 LCAweDdhLCAweGE0LCAweDQwLCAweDZiLCAweGY4LCAweDczLCAweGY3LAotKyAgICAweDdlLCAw eGVjLCAweGM3LCAweGI5LCAweDk3LCAweGJmLCAweGY4LCAweDI1LCAweDdiLCAweGJlLCAweDEx LCAweDliLAotKyAgICAweDViLCAweDZhLCAweDBjLCAweDJlLCAweDJiLCAweDAxLCAweDUxLCAw eGNkLCAweDQxLCAweDRiLCAweDZiLCAweGFjLAotKyAgICAweDMxLCAweGE4LCAweDBiLCAweGY3 LCAweGU2LCAweDU5LCAweDQyLCAweGI4LCAweDAzLCAweDBjLCAweGY4LCAweDA2Ci0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg2YSwgMHg5ZiwgMHgwMCwg MHg5MSwgMHhhZSwgMHhmZSwgMHhjZiwgMHg4NCwgMHg5OSwgMHhjZSwgMHhiMSwgMHg0MCwKLSsg ICAgMHg2ZCwgMHg1ZCwgMHgzMywgMHgyOCwgMHg4NCwgMHhmNCwgMHg4YywgMHg2MywgMHg0Yywg MHg3ZSwgMHhiZCwgMHgyYywKLSsgICAgMHg4MCwgMHg3NiwgMHhlZSwgMHg1YSwgMHhhYSwgMHgx NSwgMHgwNywgMHgzMSwgMHhkOCwgMHhiYiwgMHg4YywgMHg2OSwKLSsgICAgMHg5ZCwgMHg5ZCwg MHhiYywgMHg3ZSwgMHg0OSwgMHhhZSwgMHhlYywgMHgzOSwgMHg2YiwgMHhkMSwgMHgxZiwgMHg3 ZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfbm9fZGZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHhmMywgMHhiOSwgMHg3 NSwgMHg5YywgMHhiZCwgMHg4OCwgMHhlYSwgMHhhMiwgMHg1MCwgMHhhZCwgMHhkNiwgMHgxNiwK LSsgICAgMHgxYSwgMHgxMiwgMHgzYywgMHg4NiwgMHg2OCwgMHhhZiwgMHg2ZiwgMHhiZSwgMHgx OSwgMHhmMiwgMHhlZSwgMHhjYywKLSsgICAgMHhhNSwgMHg3MCwgMHg4NCwgMHg1MywgMHg1MCwg MHhjYiwgMHg5ZiwgMHgxNCwgMHhhOSwgMHhlNSwgMHhlZSwgMHhiOSwKLSsgICAgMHg0OCwgMHg0 NSwgMHg0MCwgMHhlMiwgMHhjNywgMHhjOSwgMHg5YSwgMHg3NCwgMHhmZiwgMHg4YywgMHg5OSwg MHgxZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDJl LCAweGYyLCAweDQ1LCAweDRjLCAweDYyLCAweDJlLCAweDBhLCAweGI5LCAweDZiLCAweGEyLCAw eGZkLCAweDU2LAotKyAgICAweDc5LCAweDYwLCAweDkzLCAweGNmCi0rfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9w cl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4YWYsIDB4NjksIDB4MjAsIDB4ZTksIDB4 M2IsIDB4MzcsIDB4OWQsIDB4M2YsIDB4YjQsIDB4ODAsIDB4MDIsIDB4N2EsCi0rICAgIDB4MjUs IDB4N2QsIDB4YjgsIDB4ZGUsIDB4NzEsIDB4YzUsIDB4MDYsIDB4MGMsIDB4YjQsIDB4ZTIsIDB4 OGYsIDB4MzUsCi0rICAgIDB4ZDgsIDB4MTQsIDB4MGQsIDB4N2YsIDB4NzYsIDB4NjMsIDB4NGUs IDB4YjUsIDB4ZWUsIDB4ZTksIDB4NmYsIDB4MzQsCi0rICAgIDB4YzcsIDB4NWYsIDB4NTYsIDB4 MTQsIDB4NGEsIDB4ZTgsIDB4NzMsIDB4OTUsIDB4NWIsIDB4MWMsIDB4YjksIDB4Y2IKLSt9Owot KwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0gewotKyAgICAweGU1LCAweGIwLCAweDJl LCAweDdlLCAweDUyLCAweDMwLCAweGUzLCAweDYzLCAweDgyLCAweGI2LCAweDQ0LCAweGQzLAot KyAgICAweDI1LCAweDE5LCAweDA1LCAweDI0LCAweDlhLCAweDlmLCAweDVmLCAweDI3LCAweDZh LCAweDI5LCAweGFiLCAweGZhLAotKyAgICAweDA3LCAweGEyLCAweDQyLCAweDBmLCAweGM1LCAw eGE4LCAweDk0LCAweDdjLCAweDE3LCAweDdiLCAweDg1LCAweDgzLAotKyAgICAweDBjLCAweDI1 LCAweDBlLCAweDYzLCAweDBiLCAweGU5LCAweDEyLCAweDYwLCAweGNkLCAweGVmLCAweDgwLCAw eDBmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg1ZSwgMHhmMiwgMHgy NiwgMHhlZiwgMHg5ZiwgMHg1OCwgMHg1ZCwgMHhkNSwgMHg0YSwgMHgxMCwgMHhmZSwgMHhhNywK LSsgICAgMHgyZCwgMHg1ZiwgMHg0YSwgMHg0NgotK307Ci0rCi0rLyogQUVTLTI1NiBubyBkZiBO byBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHhmYiwgMHhjZiwgMHgxYiwgMHg2 MSwgMHgxNiwgMHg4OSwgMHg3OCwgMHgyMywgMHhmNSwgMHhkOCwgMHg5NiwgMHhlMywKLSsgICAg MHg0ZSwgMHg2NCwgMHgwYiwgMHgyOSwgMHg5YSwgMHgzZiwgMHhmOCwgMHhhNSwgMHhlZCwgMHhm MiwgMHhmZSwgMHhkYiwKLSsgICAgMHgxNiwgMHhjYSwgMHg3ZiwgMHgxMCwgMHhmYSwgMHg1ZSwg MHgxOCwgMHg3NiwgMHgyYywgMHg2MywgMHg1ZSwgMHg5NiwKLSsgICAgMHhjZiwgMHhiMywgMHhk NiwgMHhmYywgMHhhZiwgMHg5OSwgMHgzOSwgMHgyOCwgMHg5YywgMHg2MSwgMHhlOCwgMHhiMwot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18y NTZfbm9fZGZfbm9uY2VbXSA9IHsKLSsgICAgMHgxMiwgMHg5NiwgMHhmMCwgMHg1MiwgMHhmMywg MHg4ZCwgMHg4MSwgMHhjZiwgMHhkZSwgMHg4NiwgMHhmMiwgMHg5OSwKLSsgICAgMHg0MywgMHg5 NiwgMHhiOSwgMHhmMAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7 Ci0rICAgIDB4NjMsIDB4MGQsIDB4NzgsIDB4ZjUsIDB4OTAsIDB4OGUsIDB4MzIsIDB4NDcsIDB4 YjAsIDB4NGQsIDB4MzcsIDB4NjAsCi0rICAgIDB4MDksIDB4OTYsIDB4YmMsIDB4YmYsIDB4OTcs IDB4N2EsIDB4NjIsIDB4MTQsIDB4NDUsIDB4YmQsIDB4OGQsIDB4Y2MsCi0rICAgIDB4NjksIDB4 ZmIsIDB4MDMsIDB4ZTEsIDB4ODAsIDB4MWMsIDB4YzcsIDB4ZTIsIDB4MmEsIDB4ZjksIDB4Mzcs IDB4M2YsCi0rICAgIDB4NjYsIDB4NGQsIDB4NjIsIDB4ZDksIDB4MTAsIDB4ZTAsIDB4YWQsIDB4 YzgsIDB4OWEsIDB4ZjAsIDB4YTgsIDB4NmQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0g ewotKyAgICAweDM2LCAweGM2LCAweDEzLCAweDYwLCAweGJiLCAweDE0LCAweGFkLCAweDIyLCAw eGIwLCAweDM4LCAweGFjLCAweGE2LAotKyAgICAweDE4LCAweDE2LCAweDkzLCAweDI1LCAweDg2 LCAweGI3LCAweGRjLCAweGRjLCAweDM2LCAweDk4LCAweDJiLCAweGY5LAotKyAgICAweDY4LCAw eDMzLCAweGQzLCAweGM2LCAweGZmLCAweGNlLCAweDhkLCAweDE1LCAweDU5LCAweDgyLCAweDc2 LCAweGVkLAotKyAgICAweDZmLCAweDhkLCAweDQ5LCAweDc0LCAweDJmLCAweGRhLCAweGRjLCAw eDFmLCAweDE3LCAweGQwLCAweGRlLCAweDE3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10g PSB7Ci0rICAgIDB4MTYsIDB4MmYsIDB4OGUsIDB4M2YsIDB4MjEsIDB4N2EsIDB4MWMsIDB4MjAs IDB4NTYsIDB4ZDEsIDB4OTIsIDB4ZjYsCi0rICAgIDB4ZDIsIDB4MjUsIDB4NzUsIDB4MGUKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X25vX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDkxLCAweDc5LCAw eDc2LCAweGVlLCAweGUwLCAweGNmLCAweDllLCAweGMyLCAweGQ1LCAweGQ0LCAweDIzLCAweDli LAotKyAgICAweDEyLCAweDhjLCAweDdlLCAweDBhLCAweGI3LCAweGQyLCAweDhiLCAweGQ2LCAw eDdjLCAweGEzLCAweGM2LCAweGU1LAotKyAgICAweDBlLCAweGFhLCAweGM3LCAweDZiLCAweGFl LCAweDBkLCAweGZhLCAweDUzLCAweDA2LCAweDc5LCAweGExLCAweGVkLAotKyAgICAweDRkLCAw eDZhLCAweDBlLCAweGQ4LCAweDlkLCAweGJlLCAweDFiLCAweDMxLCAweDkzLCAweDdiLCAweGVj LCAweGZiCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAg MHhkMiwgMHg0NiwgMHg1MCwgMHgyMiwgMHgxMCwgMHgxNCwgMHg2MywgMHhmNywgMHhlYSwgMHgw ZiwgMHhiOSwgMHg3ZSwKLSsgICAgMHgwZCwgMHhlMSwgMHg5NCwgMHgwNywgMHhhZiwgMHgwOSwg MHg0NCwgMHgzMSwgMHhlYSwgMHg2NCwgMHhhNCwgMHgxOCwKLSsgICAgMHg1YiwgMHhmOSwgMHhk OCwgMHhjMiwgMHhmYSwgMHgwMywgMHg0NywgMHhjNSwgMHgzOSwgMHg0MywgMHhkNSwgMHgzYiwK LSsgICAgMHg2MiwgMHg4NiwgMHg2NCwgMHhlYSwgMHgyYywgMHg3MywgMHg4YywgMHhhZSwgMHg5 ZCwgMHg5OCwgMHg5OCwgMHgyOQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAg ICAweDhjLCAweGFiLCAweDE4LCAweGY4LCAweGMzLCAweGVjLCAweDE4LCAweDVjLCAweGIzLCAw eDFlLCAweDlkLCAweGJlLAotKyAgICAweDNmLCAweDAzLCAweGI0LCAweDAwLCAweDk4LCAweDlk LCAweGFlLCAweGViLCAweGY0LCAweDk0LCAweGY4LCAweDQyLAotKyAgICAweDhmLCAweGUzLCAw eDM5LCAweDA3LCAweGUxLCAweGM5LCAweGFkLCAweDBiLCAweDFmLCAweGVkLCAweGMwLCAweGJh LAotKyAgICAweGY2LCAweGQxLCAweGVjLCAweDI3LCAweDg2LCAweDdiLCAweGQ2LCAweDU1LCAw eDliLCAweDYwLCAweGE1LCAweGM2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAg MHhlZiwgMHhkMiwgMHhkOCwgMHg1YywgMHhkYywgMHg2MiwgMHgyNSwgMHg5ZiwgMHhhYSwgMHgx ZSwgMHgyYywgMHg2NywKLSsgICAgMHhmNiwgMHgwMiwgMHgzMiwgMHhlMgotK307Ci0rCi0rLyog U0hBLTEgUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTFfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4ZDIsIDB4MzYsIDB4YTUsIDB4Mjcs IDB4MzEsIDB4NzMsIDB4ZGQsIDB4MTEsIDB4NGYsIDB4OTMsIDB4YmQsIDB4ZTIsCi0rICAgIDB4 MzEsIDB4YTUsIDB4OTEsIDB4MTMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGExX3ByX25vbmNlW10gPSB7Ci0rICAgIDB4YjUsIDB4YjMsIDB4 NjAsIDB4ZWYsIDB4ZjcsIDB4NjMsIDB4MzEsIDB4ZjMKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0gewotKyAgICAweGQ0LCAweGJiLCAweDAyLCAweDEwLCAweGIyLCAweDcxLCAweGRiLCAw eDgxLCAweGQ2LCAweGYwLCAweDQyLCAweDYwLAotKyAgICAweGRhLCAweGVhLCAweDc3LCAweDUy Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MV9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg0ZCwgMHhkMiwgMHg2YywgMHg4Nywg MHhmYiwgMHgyYywgMHg0ZiwgMHhhNiwgMHg4ZCwgMHgxNiwgMHg2MywgMHgyMiwKLSsgICAgMHg2 YSwgMHg1MSwgMHhlMywgMHhmOAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHhjOSwg MHg4MywgMHg5ZSwgMHgxNiwgMHhmNiwgMHgxYywgMHgwZiwgMHhiMiwgMHhlYywgMHg2MCwgMHgz MSwgMHhhOSwKLSsgICAgMHhjYiwgMHhhOSwgMHgzNiwgMHg3YQotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfaW50X3JldHVybmVkYml0 c1tdID0gewotKyAgICAweGE4LCAweDEzLCAweDRmLCAweGY0LCAweDMxLCAweDAyLCAweDQ0LCAw eGUzLCAweGQzLCAweDNkLCAweDYxLCAweDllLAotKyAgICAweGU1LCAweGM2LCAweDNlLCAweDg5 LCAweGI1LCAweDliLCAweDBmLCAweDM1Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAg IDB4ZjksIDB4ZTgsIDB4ZDIsIDB4NzIsIDB4MTMsIDB4MzQsIDB4OTUsIDB4NmYsIDB4MTUsIDB4 NDksIDB4NDcsIDB4OTksCi0rICAgIDB4MTYsIDB4MDMsIDB4MTksIDB4NDcKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlp bnB1dHByMltdID0gewotKyAgICAweDRlLCAweDhjLCAweDQ5LCAweDliLCAweDRhLCAweDVjLCAw eDliLCAweDljLCAweDNhLCAweGVlLCAweGZiLCAweGQyLAotKyAgICAweGFlLCAweGNkLCAweDhj LCAweGM0Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg1MCwgMHhiNCwgMHhiNCwgMHhj ZCwgMHg2OCwgMHg1NywgMHhmYywgMHgyZSwgMHhjMSwgMHg1MiwgMHhjYywgMHhmNiwKLSsgICAg MHg2OCwgMHhhNCwgMHg4MSwgMHhlZCwgMHg3ZSwgMHhlNCwgMHgxZCwgMHg4NwotK307Ci0rCi0r LyogU0hBLTEgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTFfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4YTksIDB4NDcsIDB4MWIsIDB4 MjksIDB4MmQsIDB4MWMsIDB4MDUsIDB4ZGYsIDB4NzYsIDB4ZDAsIDB4NjIsIDB4ZjksCi0rICAg IDB4ZTIsIDB4N2YsIDB4NGMsIDB4N2IKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGExX25vbmNlW10gPSB7Ci0rICAgIDB4NTMsIDB4MjMsIDB4 MjQsIDB4ZTMsIDB4ZWMsIDB4MGMsIDB4NTQsIDB4MTQKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0gewotKyAgICAweDdhLCAweDg3LCAweGExLCAweGFjLCAweDFjLCAweGZkLCAweGFiLCAweGFl LCAweGY3LCAweGQ2LCAweGZiLCAweDc2LAotKyAgICAweDI4LCAweGVjLCAweDZkLCAweGNhCi0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9h ZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHhmYywgMHg5MiwgMHgzNSwgMHhkNiwgMHg3ZSwg MHhiNywgMHgyNCwgMHg2NSwgMHhmZCwgMHgxMiwgMHgyNywgMHgzNSwKLSsgICAgMHhjMCwgMHg3 MiwgMHhjYSwgMHgyOAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTFfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDU3LCAweDg4LCAw eDgyLCAweGU1LCAweDI1LCAweGE1LCAweDJjLCAweDRhLCAweDA2LCAweDIwLCAweDZjLCAweDcy LAotKyAgICAweDU1LCAweDYxLCAweGRkLCAweDkwLCAweDcxLCAweDlmLCAweDk1LCAweGVhCi0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9l bnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg2OSwgMHhhNSwgMHg0MCwgMHg2MiwgMHg5 OCwgMHg0NywgMHg1NiwgMHg3MywgMHg0YSwgMHg4ZiwgMHg2MCwgMHg5NiwKLSsgICAgMHhkNiwg MHg5OSwgMHgyNywgMHhlZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4ZTUs IDB4NDAsIDB4NGUsIDB4YmQsIDB4NTAsIDB4MDAsIDB4ZjUsIDB4MTUsIDB4YTYsIDB4ZWUsIDB4 NDUsIDB4ZGEsCi0rICAgIDB4ODQsIDB4M2QsIDB4ZDQsIDB4YzAKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dDJb XSA9IHsKLSsgICAgMHgxMSwgMHg1MSwgMHgxNCwgMHhmMCwgMHgwOSwgMHgxYiwgMHg0ZSwgMHg1 NiwgMHgwZCwgMHhlOSwgMHhmNiwgMHgxZSwKLSsgICAgMHg1MiwgMHg2NSwgMHhjZCwgMHg5Ngot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFf cmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4YTEsIDB4OWMsIDB4OTQsIDB4NmUsIDB4MjksIDB4 ZTEsIDB4MzMsIDB4MGQsIDB4MzIsIDB4ZDYsIDB4YWEsIDB4Y2UsCi0rICAgIDB4NzEsIDB4M2Ys IDB4NTIsIDB4NzIsIDB4OGIsIDB4NDIsIDB4YTgsIDB4ZDcKLSt9OwotKwotKy8qIFNIQS0yMjQg UFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIy NF9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHgxMiwgMHg2OSwgMHgzMiwgMHg0ZiwgMHg4 MywgMHhhNiwgMHhmNSwgMHgxNCwgMHhlMywgMHg0OSwgMHgzZSwgMHg3NSwKLSsgICAgMHgzZSwg MHhkZSwgMHhhZCwgMHhhMSwgMHgyOSwgMHhjMywgMHhmMywgMHgxOSwgMHgyMCwgMHhiNSwgMHg0 YywgMHhkOQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9wcl9ub25jZVtdID0gewotKyAgICAweDZhLCAweDc4LCAweGQwLCAweGViLCAw eGJiLCAweDVhLCAweGYwLCAweGVlLCAweGU4LCAweGMzLCAweGJhLCAweDcxCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweGQ1LCAweGI4LCAweGI2LCAweGJjLCAweGMx LCAweDViLCAweDYwLCAweDMxLCAweDNjLCAweGY1LCAweGU1LCAweGMwLAotKyAgICAweDhlLCAw eDUyLCAweDdhLCAweGJkLCAweGVhLCAweDQ3LCAweGE5LCAweDVmLCAweDhmLCAweGY5LCAweDhi LCAweGFlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDFmLCAweDU1LCAweGVj LCAweGFlLCAweDE2LCAweDEyLCAweDg0LCAweGJhLCAweDg0LCAweDE2LCAweDE5LCAweDg4LAot KyAgICAweDhlLCAweGI4LCAweDMzLCAweDI1LCAweDU0LCAweGZmLCAweGNhLCAweDc5LCAweGFm LCAweDA3LCAweDI1LCAweDUwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAgIDB4OTIs IDB4YTMsIDB4MzIsIDB4YTgsIDB4OWEsIDB4MGEsIDB4NTgsIDB4N2MsIDB4MWQsIDB4NWEsIDB4 N2UsIDB4ZTEsCi0rICAgIDB4YjIsIDB4NzMsIDB4YWIsIDB4MGUsIDB4MTYsIDB4NzksIDB4MjMs IDB4ZDMsIDB4MjksIDB4ODksIDB4ODEsIDB4ZTEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfaW50X3JldHVybmVkYml0c1tdID0g ewotKyAgICAweGYzLCAweDM4LCAweDkxLCAweDQwLCAweDM3LCAweDdhLCAweDUxLCAweDcyLCAw eDQyLCAweDc0LCAweDc4LCAweDBhLAotKyAgICAweDY5LCAweGZkLCAweGE2LCAweDQ0LCAweDQz LCAweDQ1LCAweDZjLCAweDBjLCAweDVhLCAweDE5LCAweGZmLCAweGYxLAotKyAgICAweDU0LCAw eDYwLCAweGVlLCAweDZhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHg3NSwg MHhmMywgMHgwNCwgMHgyNSwgMHhkZCwgMHgzNiwgMHhhOCwgMHgzNywgMHg0NiwgMHhhZSwgMHgw YywgMHg1MiwKLSsgICAgMHgwNSwgMHg3OSwgMHg0YywgMHgyNiwgMHhkYiwgMHhlOSwgMHg3MSwg MHgxNiwgMHg0YywgMHgwYSwgMHhmMiwgMHg2MAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsK LSsgICAgMHhlYSwgMHhjNSwgMHgwMywgMHgwYSwgMHg0ZiwgMHhiMCwgMHgzOCwgMHg4ZCwgMHgy MywgMHhkNCwgMHhjOCwgMHg3NywKLSsgICAgMHhlMiwgMHg2ZCwgMHg5YywgMHgwYiwgMHg0NCwg MHhmNywgMHgyZCwgMHg1YiwgMHhiZiwgMHg1ZCwgMHgyYSwgMHgxMQotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9yZXR1cm5lZGJp dHNbXSA9IHsKLSsgICAgMHg2MCwgMHg1MCwgMHgyYiwgMHhlNywgMHg4NiwgMHhkOCwgMHgyNiwg MHg3MywgMHhlMywgMHgxZCwgMHg5NSwgMHgyMCwKLSsgICAgMHhiMywgMHgyYywgMHgzMiwgMHgx YywgMHhmNSwgMHhjZSwgMHg1NywgMHhhNiwgMHg2NywgMHgyYiwgMHhkYywgMHg0ZSwKLSsgICAg MHhkZCwgMHgxMSwgMHg0YywgMHhjNAotK307Ci0rCi0rLyogU0hBLTIyNCBObyBQUiAgKi8KLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJvcHlp bnB1dFtdID0gewotKyAgICAweGIyLCAweDFjLCAweDc3LCAweDRkLCAweGY2LCAweGQzLCAweGI2 LCAweDQwLCAweGI3LCAweDMwLCAweDNlLCAweDI5LAotKyAgICAweGIwLCAweDg1LCAweDFjLCAw eGJlLCAweDRhLCAweGVhLCAweDZiLCAweDVhLCAweGI1LCAweDhhLCAweDk3LCAweGViCi0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X25v bmNlW10gPSB7Ci0rICAgIDB4NDIsIDB4MDIsIDB4MGEsIDB4MWMsIDB4OTgsIDB4OWEsIDB4Nzcs IDB4OWUsIDB4OWYsIDB4ODAsIDB4YmEsIDB4ZTAKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PSB7Ci0rICAgIDB4OTgsIDB4YjgsIDB4MDQsIDB4NDEsIDB4ZmMsIDB4YzEsIDB4NWQsIDB4YzUs IDB4ZTksIDB4YjksIDB4MDgsIDB4ZGEsCi0rICAgIDB4ZjksIDB4ZmEsIDB4MGQsIDB4OTAsIDB4 Y2UsIDB4ZGYsIDB4MWQsIDB4MTAsIDB4YTksIDB4OGQsIDB4NTAsIDB4MGMKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfYWRkaXRpb25h bGlucHV0W10gPSB7Ci0rICAgIDB4OWEsIDB4OGQsIDB4MzksIDB4NDksIDB4NDIsIDB4ZDUsIDB4 MGIsIDB4YWUsIDB4ZTEsIDB4YWYsIDB4YjcsIDB4MDAsCi0rICAgIDB4MDIsIDB4ZmEsIDB4OTYs IDB4YjEsIDB4YTUsIDB4MWQsIDB4MmQsIDB4MjUsIDB4NzgsIDB4ZWUsIDB4ODMsIDB4M2YKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRf aW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGU0LCAweGY1LCAweDUzLCAweDc5LCAweDVh LCAweDk3LCAweDU4LCAweDA2LCAweDA4LCAweGJhLCAweDdiLCAweGZhLAotKyAgICAweGYwLCAw eDgzLCAweDA1LCAweDhjLCAweDIyLCAweGMwLCAweGM5LCAweGRiLCAweDE1LCAweGU3LCAweGRl LCAweDIwLAotKyAgICAweDU1LCAweDIyLCAweDlhLCAweGFkCi0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2VudHJvcHlpbnB1dHJlc2Vl ZFtdID0gewotKyAgICAweDY3LCAweDA5LCAweDQ4LCAweGFhLCAweDA3LCAweDE2LCAweDk5LCAw eDg5LCAweDdmLCAweDZkLCAweGEwLCAweGU1LAotKyAgICAweDhmLCAweGRmLCAweGJjLCAweGRi LCAweGZlLCAweGU1LCAweDZjLCAweDdhLCAweDk1LCAweDRhLCAweDY2LCAweDE3Ci0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0 aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDBmLCAweDRiLCAweDFjLCAweDZmLCAweGI3 LCAweGUzLCAweDQ3LCAweGU1LCAweDVkLCAweDdkLCAweDM4LCAweGQ2LAotKyAgICAweDI4LCAw eDliLCAweGViLCAweDU1LCAweDYzLCAweDA5LCAweDNlLCAweDdjLCAweDU2LCAweGVhLCAweGY4 LCAweDE5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHgyZCwgMHgyNiwgMHg3Yywg MHgzNywgMHhlNCwgMHg3YSwgMHgyOCwgMHg1ZSwgMHg1YSwgMHgzYywgMHhhZiwgMHgzZCwKLSsg ICAgMHg1YSwgMHg4ZSwgMHg1NSwgMHhhMiwgMHgxYSwgMHg2ZSwgMHhjMCwgMHhlNSwgMHhmNiwg MHgyMSwgMHhkMywgMHhmNgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTIyNF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg0ZCwgMHg4Mywg MHgzNSwgMHhkZiwgMHg2NywgMHhhOSwgMHhmYywgMHgxNywgMHhkYSwgMHg3MCwgMHhjYywgMHg4 YiwKLSsgICAgMHg3ZiwgMHg3NywgMHhhZSwgMHhhMiwgMHg1ZiwgMHhiOSwgMHg3ZSwgMHg3NCwg MHg0YywgMHgyNiwgMHhjMSwgMHg3YSwKLSsgICAgMHgzYiwgMHhhNywgMHg1YywgMHg5MwotK307 Ci0rCi0rLyogU0hBLTI1NiBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweGNlLCAweDQ5 LCAweDAwLCAweDdhLCAweDU2LCAweGUzLCAweDY3LCAweDhmLCAweGUxLCAweGI2LCAweGE3LCAw eGQ0LAotKyAgICAweDRmLCAweDA4LCAweDdhLCAweDFiLCAweDAxLCAweGY0LCAweGZhLCAweDZi LCAweGVmLCAweGI3LCAweGU1LCAweGViLAotKyAgICAweDA3LCAweDNkLCAweDExLCAweDBkLCAw eGM4LCAweGVhLCAweDJiLCAweGZlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX25vbmNlW10gPSB7Ci0rICAgIDB4NzMsIDB4NDEs IDB4YzgsIDB4OTIsIDB4OTQsIDB4ZTIsIDB4YzUsIDB4NWYsIDB4OTMsIDB4ZmQsIDB4MzksIDB4 NWQsCi0rICAgIDB4MmIsIDB4OTEsIDB4NGQsIDB4MzgKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPSB7Ci0rICAgIDB4NTAsIDB4NmQsIDB4MDEsIDB4MDEsIDB4MDcsIDB4NWEsIDB4ODAs IDB4MzUsIDB4N2EsIDB4NTYsIDB4MWEsIDB4NTYsCi0rICAgIDB4MmYsIDB4OWEsIDB4MGIsIDB4 MzUsIDB4YjIsIDB4YjEsIDB4YzksIDB4ZTUsIDB4Y2EsIDB4NjksIDB4NjEsIDB4NDgsCi0rICAg IDB4ZmYsIDB4ZmIsIDB4MGYsIDB4ZDksIDB4NGIsIDB4NzksIDB4MWQsIDB4YmEKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfYWRk aXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4MjAsIDB4YjgsIDB4ZGYsIDB4NDQsIDB4NzcsIDB4 NWEsIDB4YjgsIDB4ZDMsIDB4YmYsIDB4ZjYsIDB4Y2YsIDB4YWMsCi0rICAgIDB4NWUsIDB4YTYs IDB4OTYsIDB4NjIsIDB4NzMsIDB4NDQsIDB4NDAsIDB4NGEsIDB4MzAsIDB4ZmIsIDB4MzgsIDB4 YTUsCi0rICAgIDB4N2IsIDB4MGQsIDB4ZTQsIDB4MGQsIDB4YzYsIDB4ZTQsIDB4OWEsIDB4MWYK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy NTZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHgwNCwgMHhjNCwgMHg2NSwgMHhmNCwg MHhkMywgMHhiZiwgMHg4MywgMHg0YiwgMHhhYiwgMHhjOCwgMHg0MSwgMHhhOCwKLSsgICAgMHhj MiwgMHhlMCwgMHg0NCwgMHg2MywgMHg3NywgMHg0YywgMHg2ZiwgMHg2YywgMHg0OSwgMHg0Niwg MHhmZiwgMHg5NCwKLSsgICAgMHgxNywgMHhlYSwgMHhlNiwgMHgxYSwgMHg5ZCwgMHg1ZSwgMHg2 NiwgMHg3OAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTI1Nl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4MDcsIDB4NGQsIDB4 YWMsIDB4OWIsIDB4ODYsIDB4Y2EsIDB4NGEsIDB4YWEsIDB4NmUsIDB4N2EsIDB4MDMsIDB4YTIs Ci0rICAgIDB4NWQsIDB4MTAsIDB4ZWEsIDB4MGIsIDB4ZjksIDB4ODMsIDB4Y2MsIDB4ZDEsIDB4 ZmMsIDB4ZTIsIDB4MDcsIDB4YzcsCi0rICAgIDB4MDYsIDB4MzQsIDB4NjAsIDB4NmYsIDB4ODMs IDB4OTQsIDB4OTksIDB4NzYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDg5 LCAweDRlLCAweDQ1LCAweDhjLCAweDExLCAweGY5LCAweGJjLCAweDViLCAweGFjLCAweDc0LCAw eDhiLCAweDRiLAotKyAgICAweDVmLCAweGY3LCAweDE5LCAweGYzLCAweGY1LCAweDI0LCAweDU0 LCAweDE0LCAweGQxLCAweDE1LCAweGIxLCAweDQzLAotKyAgICAweDEyLCAweGE0LCAweDVmLCAw eGQ0LCAweGVjLCAweGZjLCAweGNkLCAweDA5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltdID0gewot KyAgICAweDBlLCAweGViLCAweDFmLCAweGQ3LCAweGZjLCAweGQxLCAweDlkLCAweGQ0LCAweDA1 LCAweDM2LCAweDhiLCAweGIyLAotKyAgICAweGZiLCAweGU0LCAweGY0LCAweDUxLCAweDBjLCAw eDg3LCAweDliLCAweDAyLCAweDQ0LCAweGQ1LCAweDkyLCAweDRkLAotKyAgICAweDQ0LCAweGZl LCAweDFhLCAweDAzLCAweDQzLCAweDU2LCAweGJkLCAweDg2Ci0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX3JldHVybmVkYml0c1td ID0gewotKyAgICAweDAyLCAweGFhLCAweGI2LCAweDFkLCAweDdlLCAweDJhLCAweDQwLCAweDAz LCAweDY5LCAweDJkLCAweDQ5LCAweGEzLAotKyAgICAweDQxLCAweGU3LCAweDQ0LCAweDBiLCAw eGFmLCAweDdiLCAweDg1LCAweGU0LCAweDVmLCAweDUzLCAweDNiLCAweDY0LAotKyAgICAweGJj LCAweDg5LCAweGM4LCAweDgyLCAweGQ0LCAweDc4LCAweDM3LCAweGEyCi0rfTsKLSsKLSsvKiBT SEEtMjU2IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyNTZfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4NWIsIDB4MWIsIDB4ZWMsIDB4 NGQsIDB4YTksIDB4MzgsIDB4NzQsIDB4NWEsIDB4MzQsIDB4MGIsIDB4N2IsIDB4YzUsCi0rICAg IDB4ZTUsIDB4ZDcsIDB4NjYsIDB4N2MsIDB4YmMsIDB4ODIsIDB4YjksIDB4MGUsIDB4MmQsIDB4 MWYsIDB4OTIsIDB4ZDcsCi0rICAgIDB4YzEsIDB4YmMsIDB4NjcsIDB4NjksIDB4ZWMsIDB4NmIs IDB4MDMsIDB4M2MKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEyNTZfbm9uY2VbXSA9IHsKLSsgICAgMHhhNCwgMHgwYywgMHhkOCwgMHg5Yywg MHg2MSwgMHhkOCwgMHhjMywgMHg1NCwgMHhmZSwgMHg1MywgMHhjOSwgMHhlNSwKLSsgICAgMHg1 ZCwgMHg2ZiwgMHg2ZCwgMHgzNQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAg MHgyMiwgMHg1ZSwgMHg2MiwgMHg5MywgMHg0MiwgMHg4MywgMHg3OCwgMHgyNCwgMHhkOCwgMHg0 MCwgMHg4YywgMHhkZSwKLSsgICAgMHg2ZiwgMHhmOSwgMHhhNCwgMHg3YSwgMHhjNSwgMHhhNywg MHgzYiwgMHg4OCwgMHhhMywgMHhlZSwgMHg0MiwgMHgyMCwKLSsgICAgMHhmZCwgMHg2MSwgMHg1 NiwgMHhjNiwgMHg0YywgMHgxMywgMHg0MSwgMHg5YwotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsK LSsgICAgMHhiZiwgMHg3NCwgMHg1YiwgMHhmNiwgMHhjNSwgMHg2NCwgMHg1ZSwgMHg5OSwgMHgz NCwgMHg4ZiwgMHhiYywgMHhhNCwKLSsgICAgMHhlMiwgMHhiZCwgMHhkOCwgMHg4NSwgMHgyNiwg MHgzNywgMHhlYSwgMHhiYSwgMHg0ZiwgMHhmMiwgMHg5YSwgMHg5YSwKLSsgICAgMHg2NiwgMHhm YywgMHhkZiwgMHg2MywgMHgyNiwgMHgyNiwgMHgxOSwgMHg4NwotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9pbnRfcmV0dXJuZWRiaXRz W10gPSB7Ci0rICAgIDB4YjMsIDB4YzYsIDB4MDcsIDB4MDcsIDB4ZDYsIDB4NzUsIDB4ZjYsIDB4 MmIsIDB4ZDYsIDB4MjEsIDB4OTYsIDB4ZjEsCi0rICAgIDB4YWUsIDB4ZGIsIDB4MmIsIDB4YWMs IDB4MjUsIDB4MmEsIDB4YWUsIDB4YWUsIDB4NDEsIDB4NzIsIDB4MDMsIDB4NWUsCi0rICAgIDB4 YmYsIDB4ZDMsIDB4NjQsIDB4YmMsIDB4NTksIDB4ZjksIDB4YzAsIDB4NzYKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfZW50cm9weWlu cHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4YmYsIDB4MjAsIDB4MzMsIDB4NTYsIDB4MjksIDB4YTgs IDB4MzcsIDB4MDQsIDB4MWYsIDB4NzgsIDB4MzQsIDB4M2QsCi0rICAgIDB4ODEsIDB4MmEsIDB4 YzksIDB4ODYsIDB4YzYsIDB4N2EsIDB4MmYsIDB4ODgsIDB4NWUsIDB4ZDUsIDB4YmUsIDB4MzQs Ci0rICAgIDB4NDYsIDB4MjAsIDB4YTQsIDB4MzUsIDB4ZWIsIDB4YzcsIDB4ZTIsIDB4OWQKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZf YWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4OWIsIDB4YWUsIDB4MmQsIDB4MmQs IDB4NjEsIDB4YTQsIDB4ODksIDB4ZWIsIDB4NDMsIDB4NDYsIDB4YTcsIDB4ZGEsCi0rICAgIDB4 ZWYsIDB4NDAsIDB4Y2EsIDB4NGEsIDB4OTksIDB4MTEsIDB4NDEsIDB4ZGMsIDB4NWMsIDB4OTQs IDB4ZTksIDB4YWMsCi0rICAgIDB4ZDQsIDB4ZDAsIDB4ZTYsIDB4YmQsIDB4ZmIsIDB4MDMsIDB4 OWMsIDB4YTgKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDIzLCAweGFhLCAweDBj LCAweGJkLCAweDI4LCAweDMzLCAweGUyLCAweDUxLCAweGZjLCAweDcxLCAweGQyLCAweDE1LAot KyAgICAweDFmLCAweDc2LCAweGZkLCAweDBkLCAweGUwLCAweGI3LCAweGI1LCAweDg0LCAweDc1 LCAweDViLCAweGJlLCAweGYzLAotKyAgICAweDVjLCAweGNhLCAweGM1LCAweDMwLCAweGYyLCAw eDc1LCAweDFmLCAweGRhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjU2X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDkwLCAweDNjLCAw eGMxLCAweDEwLCAweDhjLCAweDEyLCAweDAxLCAweGM2LCAweGE2LCAweDNhLCAweDBmLCAweDRk LAotKyAgICAweGI2LCAweDNhLCAweDRmLCAweDQxLCAweDljLCAweDYxLCAweDc1LCAweDg0LCAw eGU5LCAweDc0LCAweDc1LCAweGZkLAotKyAgICAweGZlLCAweGYyLCAweDFmLCAweDQzLCAweGQ4 LCAweDVlLCAweDI0LCAweGEzCi0rfTsKLSsKLSsvKiBTSEEtMzg0IFBSICAqLwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0 W10gPSB7Ci0rICAgIDB4NzEsIDB4OWQsIDB4YjIsIDB4NWEsIDB4NzEsIDB4NmQsIDB4MDQsIDB4 ZTksIDB4MWUsIDB4YzcsIDB4OTIsIDB4MjQsCi0rICAgIDB4NmUsIDB4MTIsIDB4MzMsIDB4YTks IDB4NTIsIDB4NjQsIDB4MzEsIDB4ZWYsIDB4NzEsIDB4ZWIsIDB4MjIsIDB4NTUsCi0rICAgIDB4 MjgsIDB4OTcsIDB4MDYsIDB4NmEsIDB4YzAsIDB4MGMsIDB4YTAsIDB4N2UKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfbm9uY2Vb XSA9IHsKLSsgICAgMHhmNSwgMHgwZCwgMHhmYSwgMHhiMCwgMHhlYywgMHg2YSwgMHg3YywgMHhk NiwgMHhiZCwgMHg5YiwgMHgwNSwgMHhmZCwKLSsgICAgMHgzOCwgMHgzZSwgMHgyZSwgMHg1Ngot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4 NF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg3NCwgMHhhYywgMHg3ZSwg MHg2ZCwgMHhiMSwgMHhhNCwgMHhlNywgMHgyMSwgMHhkMSwgMHgxZSwgMHg2ZSwgMHg5NiwKLSsg ICAgMHg2ZCwgMHg0ZCwgMHg1MywgMHg0NiwgMHg4MiwgMHg5NiwgMHg2ZSwgMHhjZiwgMHhhYSwg MHg4MSwgMHg4ZCwgMHg3ZCwKLSsgICAgMHg5ZSwgMHhlMSwgMHgwZiwgMHgxNSwgMHhlYSwgMHg0 MSwgMHhiZiwgMHhlMwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHhkYSwgMHg5 NSwgMHhkNCwgMHhkMCwgMHhiOCwgMHgxMSwgMHhkMywgMHg0OSwgMHgyNywgMHg1ZCwgMHhhOSwg MHgzOSwKLSsgICAgMHg2OCwgMHhmMywgMHhhOCwgMHhlOSwgMHg1ZCwgMHgxOSwgMHg4YSwgMHgy YiwgMHg2NiwgMHhlOCwgMHg2OSwgMHgwNiwKLSsgICAgMHg3YywgMHg5ZSwgMHgwMywgMHhhMSwg MHg4YiwgMHgyNiwgMHgyZCwgMHg2ZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAw eDQ5LCAweGRmLCAweDQ0LCAweDAwLCAweGU0LCAweDFjLCAweDc1LCAweDBiLCAweDI2LCAweDVh LCAweDU5LCAweDY0LAotKyAgICAweDFmLCAweDRlLCAweGIxLCAweGIyLCAweDEzLCAweGYxLCAw eDIyLCAweDRlLCAweGI0LCAweDZkLCAweDlhLCAweGNjLAotKyAgICAweGEwLCAweDQ4LCAweGU2 LCAweGNmLCAweDFkLCAweGQxLCAweDkyLCAweDBkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 IHsKLSsgICAgMHhjOCwgMHg1MiwgMHhhZSwgMHhiZiwgMHgwNCwgMHgzYywgMHgyNywgMHhiNywg MHg3OCwgMHgxOCwgMHhhYSwgMHg4ZiwKLSsgICAgMHhmZiwgMHhjZiwgMHhhNCwgMHhmMSwgMHhj YywgMHhlNywgMHg2OCwgMHhmYSwgMHgyMiwgMHhhMiwgMHgxMywgMHg0NSwKLSsgICAgMHhlOCwg MHhkZCwgMHg4NywgMHhlNiwgMHhmMiwgMHg2ZSwgMHhkZCwgMHhjNywgMHg1MiwgMHg5MCwgMHg5 ZiwgMHg3YiwKLSsgICAgMHhmYSwgMHg2MSwgMHgyZCwgMHg5ZCwgMHg5ZSwgMHhjZiwgMHg5OCwg MHhhYywgMHg1MiwgMHg0MCwgMHhjZSwgMHhhZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7 Ci0rICAgIDB4NjEsIDB4N2MsIDB4MDMsIDB4OWEsIDB4M2UsIDB4NTAsIDB4NTcsIDB4NjAsIDB4 YzUsIDB4ODMsIDB4YzksIDB4YjIsCi0rICAgIDB4ZDEsIDB4ODcsIDB4ODUsIDB4NjYsIDB4OTIs IDB4NWQsIDB4ODQsIDB4MGUsIDB4NTMsIDB4ZmIsIDB4NzAsIDB4MDMsCi0rICAgIDB4NzIsIDB4 ZmQsIDB4YmEsIDB4YWUsIDB4OWMsIDB4OGYsIDB4ZjgsIDB4MTgKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0 cHIyW10gPSB7Ci0rICAgIDB4ZjgsIDB4ZWIsIDB4ODksIDB4YjEsIDB4OGQsIDB4NzgsIDB4YmUs IDB4MjEsIDB4ZTAsIDB4YmIsIDB4OWQsIDB4YjcsCi0rICAgIDB4OTUsIDB4MGUsIDB4ZDksIDB4 NDYsIDB4MGMsIDB4OGMsIDB4ZTIsIDB4NjMsIDB4YjcsIDB4OWQsIDB4NjcsIDB4OTAsCi0rICAg IDB4YmQsIDB4YzcsIDB4MGIsIDB4YTUsIDB4Y2UsIDB4YjIsIDB4NjUsIDB4ODEKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfcmV0 dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ZTYsIDB4OWYsIDB4ZmUsIDB4NjgsIDB4ZDYsIDB4YjUs IDB4NzksIDB4ZjEsIDB4MDYsIDB4NWYsIDB4YTMsIDB4YmIsCi0rICAgIDB4MjMsIDB4ODUsIDB4 ZDgsIDB4ZjAsIDB4MjksIDB4NWEsIDB4NjgsIDB4OWUsIDB4ZjUsIDB4ZjQsIDB4YTYsIDB4MTIs Ci0rICAgIDB4ZTAsIDB4OWEsIDB4ZTIsIDB4YWMsIDB4MDAsIDB4MWQsIDB4OTgsIDB4MjYsIDB4 ZmMsIDB4NTMsIDB4OTUsIDB4NTMsCi0rICAgIDB4ZTQsIDB4M2UsIDB4MTcsIDB4ZDUsIDB4MDgs IDB4MGIsIDB4NzAsIDB4M2QsIDB4NjcsIDB4OTksIDB4YWMsIDB4NjYKLSt9OwotKwotKy8qIFNI QS0zODQgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHgwNywgMHgxNSwgMHgyNywgMHgy YSwgMHhhZiwgMHg3NCwgMHgyNCwgMHgzNywgMHhiYywgMHhkNSwgMHgxNCwgMHg2OSwKLSsgICAg MHhjZSwgMHgxMSwgMHhmZiwgMHhhMiwgMHg2YiwgMHhiOCwgMHgwNSwgMHg2NywgMHgzNCwgMHhm OCwgMHhiZCwgMHg2ZCwKLSsgICAgMHg2YSwgMHhjYywgMHhjZCwgMHg2MCwgMHhhMywgMHg2OCwg MHhjYSwgMHhmNAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTM4NF9ub25jZVtdID0gewotKyAgICAweDcwLCAweDE3LCAweGMyLCAweDViLCAw eDVkLCAweDIyLCAweDBiLCAweDA2LCAweDE1LCAweDU0LCAweDc4LCAweDc3LAotKyAgICAweDQ0 LCAweGFmLCAweDJmLCAweDA5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAw eDg5LCAweDM5LCAweDI4LCAweGIwLCAweDYwLCAweGViLCAweDNkLCAweGRjLCAweDU1LCAweDc1 LCAweDg2LCAweGViLAotKyAgICAweGFlLCAweGEyLCAweDhmLCAweGJjLCAweDFiLCAweDc1LCAw eGQ0LCAweGUxLCAweDBmLCAweGFhLCAweDM4LCAweGNhLAotKyAgICAweDYyLCAweDhiLCAweGNi LCAweDJjLCAweDI2LCAweGY2LCAweGJjLCAweGIxCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0gewot KyAgICAweDMwLCAweDJiLCAweDQyLCAweDM1LCAweGVmLCAweGRhLCAweDQwLCAweDU1LCAweDI4 LCAweGM2LCAweDk1LCAweGZiLAotKyAgICAweDU0LCAweDAxLCAweDYyLCAweGQ3LCAweDg3LCAw eDE0LCAweDQ4LCAweDZkLCAweDkwLCAweDRjLCAweGE5LCAweDAyLAotKyAgICAweDU0LCAweDQw LCAweDIyLCAweGM4LCAweDY2LCAweGE1LCAweDQ4LCAweDQ4Ci0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X2ludF9yZXR1cm5lZGJpdHNb XSA9IHsKLSsgICAgMHg4MiwgMHhjNCwgMHhhMSwgMHg5YywgMHgyMSwgMHhkMiwgMHhlNywgMHhh NSwgMHhhNiwgMHhmNiwgMHg1ZiwgMHgwNCwKLSsgICAgMHg1YywgMHhjNywgMHgzMSwgMHg5ZCwg MHg4ZCwgMHg1OSwgMHg3NCwgMHg1MCwgMHgxOSwgMHg4OSwgMHgyZiwgMHg2MywKLSsgICAgMHhk NSwgMHhiNywgMHg3ZSwgMHhlYiwgMHgxNSwgMHhlMywgMHg3MCwgMHg4MywgMHhhMSwgMHgyNCwg MHg1OSwgMHhmYSwKLSsgICAgMHgyYywgMHg1NiwgMHhmNiwgMHg4OCwgMHgzYSwgMHg5MiwgMHg5 MywgMHhhMSwgMHhmYiwgMHg3OSwgMHhjMSwgMHg3YQotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9 IHsKLSsgICAgMHgzOSwgMHhhNiwgMHhlOCwgMHg1YywgMHg4MiwgMHgxNywgMHg3MSwgMHgyNiwg MHg1NywgMHg0ZiwgMHg5ZiwgMHhjMiwKLSsgICAgMHg1NSwgMHhmZiwgMHg1YywgMHg5YiwgMHg1 MywgMHgxYSwgMHhkMSwgMHg1ZiwgMHhiYywgMHg2MiwgMHhlNCwgMHgyNywKLSsgICAgMHgyZCwg MHgzMiwgMHhmMCwgMHhlNCwgMHg1MiwgMHg4YywgMHhjNSwgMHgwYwotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5w dXRyZXNlZWRbXSA9IHsKLSsgICAgMHg4ZCwgMHhjYiwgMHg4ZCwgMHhjZSwgMHgwOCwgMHhlYSwg MHg4MCwgMHhlOCwgMHg5YiwgMHg2MSwgMHhhOCwgMHgwZiwKLSsgICAgMHhhZiwgMHg0OSwgMHgy MCwgMHg5ZSwgMHg3NCwgMHhjYiwgMHg1NywgMHg4MCwgMHg0MiwgMHhiMCwgMHg4NCwgMHg1ZSwK LSsgICAgMHgzMCwgMHgyYSwgMHg2NywgMHgwOCwgMHhmNCwgMHhlMywgMHg0MCwgMHgyMgotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9h ZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4N2MsIDB4OGYsIDB4YzIsIDB4YWUsIDB4MjIs IDB4NGEsIDB4ZDYsIDB4ZjYsIDB4MDUsIDB4YTQsIDB4N2EsIDB4ZWEsCi0rICAgIDB4YmIsIDB4 MjUsIDB4ZDAsIDB4YjcsIDB4NWEsIDB4ZDYsIDB4Y2YsIDB4OWQsIDB4ZjMsIDB4NmMsIDB4ZTIs IDB4YjIsCi0rICAgIDB4NGUsIDB4YjQsIDB4YmQsIDB4ZjQsIDB4ZTUsIDB4NDAsIDB4ODAsIDB4 OTQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEzODRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4OWUsIDB4N2UsIDB4ZmIsIDB4NTksIDB4 YmIsIDB4YWEsIDB4M2MsIDB4ZjcsIDB4ZTEsIDB4ZjgsIDB4NzYsIDB4ZGQsCi0rICAgIDB4NjMs IDB4NWYsIDB4YWYsIDB4MjMsIDB4ZDYsIDB4NjQsIDB4NjEsIDB4YzAsIDB4OWEsIDB4MDksIDB4 NDcsIDB4YzksCi0rICAgIDB4MzMsIDB4ZGYsIDB4NmQsIDB4NTUsIDB4OTEsIDB4MzQsIDB4Nzks IDB4NzAsIDB4YzQsIDB4OTksIDB4NmUsIDB4NTQsCi0rICAgIDB4MDksIDB4NjQsIDB4MjEsIDB4 MWEsIDB4YmQsIDB4MWUsIDB4ODAsIDB4NDAsIDB4MzQsIDB4YWQsIDB4ZmEsIDB4ZDcKLSt9Owot KwotKy8qIFNIQS01MTIgUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHgxMywgMHhmNywg MHg2MSwgMHg3NSwgMHg2NSwgMHgyOCwgMHhhMiwgMHg1OSwgMHgxMywgMHg1YSwgMHg0YSwgMHg0 ZiwKLSsgICAgMHg1NiwgMHg2MCwgMHg4YywgMHg1MywgMHg3ZCwgMHhiMCwgMHhiZCwgMHgwNiwg MHg0ZiwgMHhlZCwgMHhjYywgMHhkMiwKLSsgICAgMHhhMiwgMHhiNSwgMHhmZCwgMHg1YiwgMHgz YSwgMHhhYiwgMHhlYywgMHgyOAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9ub25jZVtdID0gewotKyAgICAweGJlLCAweGEzLCAw eDkxLCAweDkzLCAweDFkLCAweGMzLCAweDMxLCAweDNhLCAweDIzLCAweDMzLCAweDUwLCAweDY3 LAotKyAgICAweDg4LCAweGM3LCAweGEyLCAweGM0Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0gewotKyAgICAweDFmLCAweDU5LCAweDRkLCAweDdiLCAweGU2LCAweDQ2LCAweDkxLCAw eDQ4LCAweGMxLCAweDI1LCAweGZhLCAweGZmLAotKyAgICAweDg5LCAweDEyLCAweDc3LCAweDM1 LCAweGRmLCAweDNlLCAweGY0LCAweDgwLCAweDVmLCAweGQ5LCAweGIwLCAweDA3LAotKyAgICAw eDIyLCAweDQxLCAweGRkLCAweDQ4LCAweDc4LCAweDZiLCAweDc3LCAweDJiCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2FkZGl0 aW9uYWxpbnB1dFtdID0gewotKyAgICAweDMwLCAweGZmLCAweDYzLCAweDZmLCAweGFjLCAweGQ5 LCAweDg0LCAweDM5LCAweDZmLCAweGU0LCAweDk5LCAweGNlLAotKyAgICAweDkxLCAweDdkLCAw eDdlLCAweGM4LCAweDU4LCAweGYyLCAweDEyLCAweGMzLCAweGI2LCAweGFkLCAweGRhLCAweDIy LAotKyAgICAweDA0LCAweGEwLCAweGQyLCAweDIxLCAweGZlLCAweGYyLCAweDk1LCAweDFkCi0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEy X3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAgIDB4NjQsIDB4NTQsIDB4MTMsIDB4ZWMsIDB4 NGYsIDB4NzcsIDB4ZGEsIDB4YjIsIDB4OTIsIDB4MmUsIDB4NTIsIDB4ODAsCi0rICAgIDB4MTEs IDB4MTAsIDB4YzIsIDB4ZjgsIDB4ZTYsIDB4YTcsIDB4Y2QsIDB4NGIsIDB4ZmMsIDB4MzIsIDB4 MmUsIDB4OWUsCi0rICAgIDB4ZWIsIDB4YmIsIDB4YjEsIDB4YmYsIDB4MTUsIDB4NWMsIDB4NzMs IDB4MDgKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGE1MTJfcHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGVmLCAweDFlLCAweGRj LCAweDBhLCAweGE0LCAweDM2LCAweDkxLCAweDljLCAweDNkLCAweDI3LCAweDk3LCAweDUwLAot KyAgICAweDhkLCAweDM2LCAweDI5LCAweDhkLCAweGNlLCAweDZhLCAweDBjLCAweGY3LCAweDIx LCAweGMwLCAweDkxLCAweGFlLAotKyAgICAweDBjLCAweDk2LCAweDcyLCAweGJkLCAweDUyLCAw eDgxLCAweDU4LCAweGZjLCAweDZkLCAweGU1LCAweGY3LCAweGE1LAotKyAgICAweGZkLCAweDVk LCAweGE3LCAweDU4LCAweDY4LCAweGM4LCAweDk5LCAweDU4LCAweDhlLCAweGM4LCAweGNlLCAw eDk1LAotKyAgICAweDAxLCAweDdkLCAweGZmLCAweGE0LCAweGM4LCAweGY3LCAweDYzLCAweGZl LCAweDVmLCAweDY5LCAweDgzLCAweDUzLAotKyAgICAweGUyLCAweGM2LCAweDhiLCAweGMzCi0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEy X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHhlNiwgMHg5YiwgMHhjNCwgMHg4OCwg MHgzNCwgMHhjYSwgMHhlYSwgMHgyOSwgMHgyZiwgMHg5OCwgMHgwNSwgMHhhNCwKLSsgICAgMHhk MywgMHhjMCwgMHg3YiwgMHgxMSwgMHhlOCwgMHhiYiwgMHg3NSwgMHhmMiwgMHhiZCwgMHgyOSwg MHhiNywgMHg0MCwKLSsgICAgMHgyNSwgMHg3ZiwgMHhjMSwgMHhiNywgMHhiMSwgMHhmMSwgMHgy NSwgMHg2MQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHgyMywgMHg2ZCwgMHhm ZiwgMHhkZSwgMHhmYiwgMHhkMSwgMHhiYSwgMHgzMywgMHgxOCwgMHhlNiwgMHhiZSwgMHhiNSwK LSsgICAgMHg0OCwgMHg3NywgMHg2ZCwgMHg3ZiwgMHhhNywgMHhlMSwgMHg0ZCwgMHg0OCwgMHgx ZSwgMHgzYywgMHhhNywgMHgzNCwKLSsgICAgMHgxYSwgMHhjOCwgMHg2MCwgMHhkYiwgMHg4Ziwg MHg5OSwgMHgxNSwgMHg5OQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg3MCwgMHgy NywgMHgzMSwgMHhkYiwgMHg5MiwgMHg3MCwgMHgyMSwgMHhmZSwgMHgxNiwgMHhiNiwgMHhjOCwg MHg1MSwKLSsgICAgMHgzNCwgMHg4NywgMHg2NSwgMHhkMCwgMHg0ZSwgMHhmZCwgMHhmZSwgMHg2 OCwgMHhlYywgMHhhYywgMHhkYywgMHg5MywKLSsgICAgMHg0MSwgMHgzOCwgMHg5MiwgMHg5MCwg MHhiNCwgMHg5NCwgMHhmOSwgMHgwZCwgMHhhNCwgMHhmNywgMHg0ZSwgMHg4MCwKLSsgICAgMHg5 MiwgMHg2NywgMHg0OCwgMHg0MCwgMHhhNywgMHgwOCwgMHhjNywgMHhiYywgMHg2NiwgMHgwMCwg MHhmZCwgMHhmNywKLSsgICAgMHg0YywgMHg4YiwgMHgxNywgMHg2ZSwgMHhkMSwgMHg4ZiwgMHg5 YiwgMHhmMywgMHg2ZiwgMHhmNiwgMHgzNCwgMHhkZCwKLSsgICAgMHg2NywgMHhmNywgMHg2OCwg MHhkZAotK307Ci0rCi0rLyogU0hBLTUxMiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAw eGI2LCAweDBiLCAweGI3LCAweGJjLCAweDg0LCAweDU2LCAweGY2LCAweDEyLCAweGFmLCAweDQ1 LCAweDY3LCAweDE3LAotKyAgICAweDdjLCAweGQxLCAweGIyLCAweDc4LCAweDJiLCAweGEwLCAw eGYyLCAweGJlLCAweGI2LCAweDZkLCAweDhiLCAweDU2LAotKyAgICAweGM2LCAweGJjLCAweDRk LCAweGUxLCAweGY3LCAweGJlLCAweGNlLCAweGJkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX25vbmNlW10gPSB7Ci0rICAgIDB4OWQs IDB4ZWQsIDB4YzAsIDB4ZTUsIDB4NWEsIDB4OTgsIDB4NmEsIDB4Y2IsIDB4NTEsIDB4N2QsIDB4 NzYsIDB4MzEsCi0rICAgIDB4NWEsIDB4NjQsIDB4ZjAsIDB4ZjcKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPSB7Ci0rICAgIDB4YzIsIDB4NmQsIDB4YTMsIDB4YzMsIDB4MDYsIDB4NzQsIDB4 ZTUsIDB4MDEsIDB4NWMsIDB4MTAsIDB4MTcsIDB4YzcsCi0rICAgIDB4YWYsIDB4ODMsIDB4OWQs IDB4NTksIDB4OGQsIDB4MmQsIDB4MjksIDB4MzgsIDB4YzUsIDB4NTksIDB4NzAsIDB4OGIsCi0r ICAgIDB4NDYsIDB4NDgsIDB4MmQsIDB4Y2YsIDB4MzYsIDB4N2QsIDB4NTksIDB4YzAKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfYWRk aXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4ZWMsIDB4OGMsIDB4ZDQsIDB4ZjcsIDB4NjEsIDB4 NmUsIDB4MGQsIDB4OTUsIDB4NzksIDB4YjcsIDB4MjgsIDB4YWQsCi0rICAgIDB4NWYsIDB4Njks IDB4NzQsIDB4NWYsIDB4MmQsIDB4MzYsIDB4MDYsIDB4OGEsIDB4NmIsIDB4YWMsIDB4NTQsIDB4 OTcsCi0rICAgIDB4YzQsIDB4YTEsIDB4MTIsIDB4ODUsIDB4MGEsIDB4ZGYsIDB4NGIsIDB4MzQK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1 MTJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDg0LCAweDJmLCAweDFmLCAweDY4LCAw eDZhLCAweGEzLCAweGFkLCAweDFlLCAweGZiLCAweGY0LCAweDE1LCAweGJkLAotKyAgICAweGRl LCAweDM4LCAweGQ0LCAweDMwLCAweDgwLCAweDUxLCAweGU5LCAweGQzLCAweGM3LCAweDIwLCAw eDg4LCAweGU5LAotKyAgICAweGY1LCAweGNjLCAweGRmLCAweDU3LCAweDVjLCAweDQ3LCAweDJm LCAweDU3LCAweDNjLCAweDVmLCAweDEzLCAweDU2LAotKyAgICAweGNjLCAweGM1LCAweDRmLCAw eDg0LCAweGY4LCAweDEwLCAweDQxLCAweGQ1LCAweDdlLCAweDU4LCAweDZlLCAweDE5LAotKyAg ICAweDE5LCAweDllLCAweGFmLCAweGMyLCAweDIyLCAweDU4LCAweDQxLCAweDUwLCAweDc5LCAw eGMyLCAweGQ4LCAweDA0LAotKyAgICAweDI4LCAweGQ0LCAweDM5LCAweDlhCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2VudHJvcHlp bnB1dHJlc2VlZFtdID0gewotKyAgICAweGZhLCAweDdmLCAweDQ2LCAweDUxLCAweDgzLCAweDYy LCAweDk4LCAweDE2LCAweDlhLCAweDE5LCAweGEyLCAweDQ5LAotKyAgICAweGE5LCAweGU2LCAw eDRhLCAweGQ4LCAweDg1LCAweGU3LCAweGQ0LCAweDNiLCAweDJjLCAweDgyLCAweGM1LCAweDgy LAotKyAgICAweGJmLCAweDExLCAweGY5LCAweDllLCAweGJjLCAweGQwLCAweDAxLCAweGVlCi0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEy X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweGI5LCAweDEyLCAweGUwLCAweDRm LCAweGY3LCAweGE3LCAweGM0LCAweGQ4LCAweGQwLCAweDhlLCAweDk5LCAweDI5LAotKyAgICAw eDdjLCAweDlhLCAweGU5LCAweGNmLCAweGM0LCAweDZjLCAweGY4LCAweGMzLCAweGE3LCAweDQx LCAweDgzLCAweGQ2LAotKyAgICAweDJlLCAweGZhLCAweGI4LCAweDVlLCAweDhlLCAweDZiLCAw eDc4LCAweDIwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHhkNywgMHgwNywgMHg1 MiwgMHhiOSwgMHg4MywgMHgyYywgMHgwMywgMHg3MSwgMHhlZSwgMHhjOSwgMHhjMCwgMHg4NSwK LSsgICAgMHhlMSwgMHg1NywgMHhiMiwgMHhjZCwgMHgzYSwgMHhmMCwgMHhjOSwgMHgzNCwgMHgy NCwgMHg0MSwgMHgxYywgMHg0MiwKLSsgICAgMHg5OSwgMHhiMiwgMHg4NCwgMHhlOSwgMHgxNywg MHhkMiwgMHg3NiwgMHg5MgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgzNiwgMHgxNywg MHg1ZCwgMHg5OCwgMHgyYiwgMHg2NSwgMHgyNSwgMHg4ZSwgMHhjOCwgMHgyOSwgMHhkZiwgMHgy NywKLSsgICAgMHgwNSwgMHgzNiwgMHgyNiwgMHgxMiwgMHg4YSwgMHg2OCwgMHg3NCwgMHgyNywg MHgzNywgMHhkNCwgMHg3ZiwgMHgzMiwKLSsgICAgMHhiMSwgMHgxMiwgMHhkNiwgMHg4NSwgMHg4 MywgMHhlYiwgMHgyZSwgMHhhMCwgMHhlZCwgMHg0YiwgMHhiNSwgMHg3YiwKLSsgICAgMHg2Ziwg MHgzOSwgMHgzYywgMHg3MSwgMHg3NywgMHgwMiwgMHgxMiwgMHhjYywgMHgyYywgMHgzYSwgMHg4 ZSwgMHg2MywKLSsgICAgMHhkZiwgMHg0YSwgMHhiZCwgMHg2ZiwgMHg2ZSwgMHgyZSwgMHhlZCwg MHgwYSwgMHg4NSwgMHhhNSwgMHgyZiwgMHhhMiwKLSsgICAgMHg2OCwgMHhkZSwgMHg0MiwgMHhi NQotK307Ci0rCi0rLyogSE1BQyBTSEEtMSBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAg ICAweDI2LCAweDVmLCAweDM2LCAweDE0LCAweGZmLCAweDNkLCAweDgzLCAweGZhLCAweDczLCAw eDVlLCAweDc1LCAweGRjLAotKyAgICAweDJjLCAweDE4LCAweDE3LCAweDFiCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX25v bmNlW10gPSB7Ci0rICAgIDB4YzgsIDB4ZTMsIDB4NTcsIDB4YTUsIDB4N2IsIDB4NzQsIDB4ODYs IDB4NmUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTFfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4 NmUsIDB4ZGIsIDB4MGQsIDB4ZmUsIDB4N2QsIDB4YWMsIDB4NzksIDB4ZDAsIDB4YTUsIDB4M2Es IDB4NDgsIDB4ODUsCi0rICAgIDB4ODAsIDB4ZTIsIDB4N2YsIDB4MmEKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfYWRkaXRp b25hbGlucHV0W10gPSB7Ci0rICAgIDB4MzEsIDB4Y2QsIDB4NWUsIDB4NDMsIDB4ZGMsIDB4ZmIs IDB4N2EsIDB4NzksIDB4Y2EsIDB4ODgsIDB4ZGUsIDB4MWYsCi0rICAgIDB4ZDcsIDB4YmIsIDB4 NDIsIDB4MDkKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTFfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHg3YywgMHgyMywg MHg5NSwgMHgzOCwgMHgwMCwgMHg5NSwgMHhjMSwgMHg3OCwgMHgxZiwgMHg4ZiwgMHhkNywgMHg2 MywKLSsgICAgMHgyMywgMHg4NywgMHgyYSwgMHhlZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9pbnRfcmV0dXJuZWRiaXRz W10gPSB7Ci0rICAgIDB4YmIsIDB4MzQsIDB4ZTcsIDB4OTMsIDB4YTMsIDB4MDIsIDB4MmMsIDB4 NGEsIDB4ZDAsIDB4ODksIDB4ZGEsIDB4N2YsCi0rICAgIDB4ZWQsIDB4ZjQsIDB4NGMsIDB4ZGUs IDB4MTcsIDB4ZWMsIDB4ZTUsIDB4NmMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfYWRkaXRpb25hbGlucHV0MltdID0gewot KyAgICAweDQ5LCAweGJjLCAweDJkLCAweDJjLCAweGI3LCAweDMyLCAweGNiLCAweDIwLCAweGRm LCAweGY1LCAweDc3LCAweDU4LAotKyAgICAweGEwLCAweDRiLCAweDkzLCAweDZlCi0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3By X2VudHJvcHlpbnB1dHByMltdID0gewotKyAgICAweDNjLCAweGFhLCAweGIwLCAweDIxLCAweDQy LCAweGIwLCAweGRkLCAweDM0LCAweGYwLCAweDE2LCAweDdmLCAweDBjLAotKyAgICAweDBmLCAw eGZmLCAweDJlLCAweGFmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAweDhlLCAw eGNiLCAweGEzLCAweDY0LCAweGIyLCAweGI4LCAweDMzLCAweDZjLCAweDY0LCAweDNiLCAweDc4 LCAweDE2LAotKyAgICAweDk5LCAweDM1LCAweGM4LCAweDMwLCAweGNiLCAweDNlLCAweGEwLCAw eGQ4Ci0rfTsKLSsKLSsvKiBITUFDIFNIQS0xIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfZW50cm9weWlucHV0W10gPSB7Ci0r ICAgIDB4MzIsIDB4OWEsIDB4MmEsIDB4ODcsIDB4N2IsIDB4ODksIDB4N2MsIDB4ZjYsIDB4Y2Is IDB4OTUsIDB4ZDUsIDB4NDAsCi0rICAgIDB4MTcsIDB4ZmUsIDB4NDcsIDB4NzAKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfbm9u Y2VbXSA9IHsKLSsgICAgMHgxNiwgMHhkOCwgMHhlMCwgMHhjNywgMHg1MiwgMHhjZiwgMHg0YSwg MHgyNQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHgzNSwgMHgzNSwg MHhhOSwgMHhhNSwgMHg0MCwgMHhiZSwgMHg5YiwgMHhkMSwgMHg1NiwgMHhkZCwgMHg0NCwgMHgw MCwKLSsgICAgMHg3MiwgMHhmNywgMHhkMywgMHg1ZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9hZGRpdGlvbmFsaW5wdXRbXSA9 IHsKLSsgICAgMHgxYiwgMHgyYywgMHg4NCwgMHgyZCwgMHg0YSwgMHg4OSwgMHg4ZiwgMHg2OSwg MHgxOSwgMHhmMSwgMHhmMywgMHhkYiwKLSsgICAgMHhiYiwgMHhlMywgMHhhYSwgMHhlYQotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MV9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4Y2YsIDB4ZmEsIDB4N2QsIDB4NzIsIDB4 MGYsIDB4ZTYsIDB4YzcsIDB4OTYsIDB4YTAsIDB4NjksIDB4MzEsIDB4MTEsCi0rICAgIDB4OWIs IDB4MGIsIDB4MWEsIDB4MjAsIDB4MWYsIDB4M2YsIDB4YWEsIDB4ZDEKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfZW50cm9weWlu cHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4OTAsIDB4NzUsIDB4MTUsIDB4MDQsIDB4OTUsIDB4ZjEs IDB4YmEsIDB4ODEsIDB4MGMsIDB4MzcsIDB4OTQsIDB4NmYsCi0rICAgIDB4ODYsIDB4NTIsIDB4 NmQsIDB4OWMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4NWIsIDB4 NDAsIDB4YmEsIDB4NWYsIDB4MTcsIDB4NzAsIDB4ZjAsIDB4NGIsIDB4ZGYsIDB4YzksIDB4OTcs IDB4OTIsCi0rICAgIDB4NzksIDB4YzUsIDB4ODIsIDB4MjgKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0 MltdID0gewotKyAgICAweDk3LCAweGM4LCAweDgwLCAweDkwLCAweGIzLCAweGFhLCAweDZlLCAw eDYwLCAweGVhLCAweDgzLCAweDdhLCAweGUzLAotKyAgICAweDhhLCAweGNhLCAweGE0LCAweDdm Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGExX3JldHVybmVkYml0c1tdID0gewotKyAgICAweDkwLCAweGJkLCAweDA1LCAweDU2LCAw eDZkLCAweGI1LCAweDIyLCAweGQ1LCAweGI5LCAweDVhLCAweDI5LCAweDJkLAotKyAgICAweGU5 LCAweDBiLCAweGUxLCAweGFjLCAweGRlLCAweDI3LCAweDBiLCAweGIwCi0rfTsKLSsKLSsvKiBI TUFDIFNIQS0yMjQgUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDE3LCAweDMy LCAweDJiLCAweDJlLCAweDZmLCAweDFiLCAweDljLCAweDZkLCAweDMxLCAweGUwLCAweDM0LCAw eDA3LAotKyAgICAweGNmLCAweGVkLCAweGY2LCAweGI2LCAweDVhLCAweDc2LCAweDRjLCAweGJj LCAweDYyLCAweDg1LCAweDAxLCAweDkwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHgz OCwgMHhiZiwgMHg1ZiwgMHgyMCwgMHhiMywgMHg2OCwgMHgyZiwgMHg0MywgMHg2MSwgMHgwNSwg MHg4ZiwgMHgyMwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewot KyAgICAweGMwLCAweGM5LCAweDQ1LCAweGFjLCAweDhkLCAweDI3LCAweDc3LCAweDA4LCAweDBi LCAweDE3LCAweDZkLCAweGVkLAotKyAgICAweGMxLCAweDdkLCAweGQ1LCAweDA3LCAweDlkLCAw eDZlLCAweGY4LCAweDIzLCAweDJhLCAweDIyLCAweDEzLCAweGJkCi0rfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfYWRkaXRp b25hbGlucHV0W10gPSB7Ci0rICAgIDB4YTQsIDB4M2MsIDB4ZTcsIDB4M2IsIDB4ZWEsIDB4MTks IDB4NDUsIDB4MzIsIDB4YzIsIDB4ODMsIDB4NmQsIDB4MjEsCi0rICAgIDB4OGEsIDB4YzAsIDB4 ZWUsIDB4NjcsIDB4NDUsIDB4ZGUsIDB4MTMsIDB4N2QsIDB4OWQsIDB4NjEsIDB4MDAsIDB4M2IK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweDE1LCAweDA1LCAweDc0LCAw eDRhLCAweDdmLCAweDhkLCAweDVjLCAweDYwLCAweDE2LCAweGU1LCAweDdiLCAweGFkLAotKyAg ICAweGY1LCAweDQxLCAweDhmLCAweDU1LCAweDYwLCAweGM0LCAweDA5LCAweGVlLCAweDFlLCAw eDExLCAweDgxLCAweGFiCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAw eDZmLCAweGY1LCAweDlhLCAweGUyLCAweDU0LCAweDUzLCAweDMwLCAweDNkLCAweDVhLCAweDI3 LCAweDI5LCAweDM4LAotKyAgICAweDI3LCAweGYyLCAweDBkLCAweDA1LCAweGU5LCAweDI2LCAw eGNiLCAweDE2LCAweGMzLCAweDUxLCAweDVmLCAweDEzLAotKyAgICAweDQxLCAweGZlLCAweDk5 LCAweGYyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyMjRfcHJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDczLCAweDgx LCAweDg4LCAweDg0LCAweDhmLCAweGVkLCAweDZmLCAweDEwLCAweDlmLCAweDkzLCAweGJmLCAw eDE3LAotKyAgICAweDM1LCAweDdjLCAweGVmLCAweGQ1LCAweDhkLCAweDI2LCAweGE2LCAweDdh LCAweGU4LCAweDA5LCAweDM2LCAweDRmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0cHIyW10gPSB7 Ci0rICAgIDB4ZTYsIDB4Y2YsIDB4Y2YsIDB4N2UsIDB4MTIsIDB4ZTUsIDB4NDMsIDB4ZDIsIDB4 MzgsIDB4ZDgsIDB4MjQsIDB4NmYsCi0rICAgIDB4NWEsIDB4MzcsIDB4NjgsIDB4YmYsIDB4NGYs IDB4YTAsIDB4ZmYsIDB4ZDUsIDB4NjEsIDB4OGEsIDB4OTMsIDB4ZTAKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9yZXR1 cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhhZiwgMHhmOSwgMHhkOCwgMHgxOSwgMHg5MSwgMHgzMCwg MHg4MiwgMHg2ZiwgMHhhOSwgMHgxZSwgMHg5ZCwgMHhkNywKLSsgICAgMHhmMywgMHg1MCwgMHhl MCwgMHhjNywgMHhkNSwgMHg2NCwgMHg5NiwgMHg3ZCwgMHg0YywgMHg0ZCwgMHg3OCwgMHgwMywK LSsgICAgMHg2ZCwgMHhkOCwgMHg5ZSwgMHg3MgotK307Ci0rCi0rLyogSE1BQyBTSEEtMjI0IE5v IFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTIyNF9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHgxMSwgMHg4MiwgMHhmZCwgMHhkOSwg MHg0MiwgMHhmNCwgMHhmYSwgMHhjOCwgMHhmMiwgMHg0MSwgMHhlNiwgMHg1NCwKLSsgICAgMHgw MSwgMHhhZSwgMHgyMiwgMHg2ZSwgMHhjNiwgMHhhZiwgMHhhZiwgMHhkMCwgMHhhNiwgMHhiMiwg MHhlMiwgMHg2ZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjI0X25vbmNlW10gPSB7Ci0rICAgIDB4YTksIDB4NDgsIDB4ZDcsIDB4 OTIsIDB4MzksIDB4N2UsIDB4MmEsIDB4ZGMsIDB4MzAsIDB4MWYsIDB4MGUsIDB4MmIKLSt9Owot KwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTIyNF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHgxMSwgMHhkNSwgMHhm NCwgMHhiZCwgMHg2NywgMHg4YywgMHgzMSwgMHhjZiwgMHhhMywgMHgzZiwgMHgxZSwgMHg2YiwK LSsgICAgMHhhOCwgMHgwNywgMHgwMiwgMHgwYiwgMHhjOCwgMHgyZSwgMHg2YywgMHg2NCwgMHg0 MSwgMHg1YiwgMHhjOCwgMHgzNwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAw eDY4LCAweDE4LCAweGMyLCAweDA2LCAweGViLCAweDNlLCAweDA0LCAweDk1LCAweDQ0LCAweDVl LCAweGZiLCAweGU2LAotKyAgICAweDQxLCAweGMxLCAweDVjLCAweGNjLCAweDQwLCAweDJmLCAw eGI3LCAweGQyLCAweDBmLCAweGYzLCAweDZiLCAweGU3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfaW50X3JldHVybmVkYml0 c1tdID0gewotKyAgICAweDdmLCAweDQ1LCAweGM3LCAweDVkLCAweDMyLCAweGU2LCAweDE3LCAw eDYwLCAweGJhLCAweGRjLCAweGI4LCAweDQyLAotKyAgICAweDFiLCAweDljLCAweGYxLCAweGZh LCAweDNiLCAweDRkLCAweDI5LCAweDU0LCAweGM2LCAweDkwLCAweGZmLCAweDVjLAotKyAgICAw eGNkLCAweGQ2LCAweGE5LCAweGNjCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfZW50cm9weWlucHV0cmVzZWVkW10gPSB7Ci0r ICAgIDB4YzQsIDB4OGUsIDB4MzcsIDB4OTUsIDB4NjksIDB4NTMsIDB4MjgsIDB4ZDcsIDB4Mzcs IDB4YmIsIDB4NzAsIDB4OTUsCi0rICAgIDB4MWMsIDB4MDcsIDB4MWQsIDB4ZDksIDB4YjcsIDB4 ZTYsIDB4MWIsIDB4YmIsIDB4ZmUsIDB4NDEsIDB4ZWIsIDB4YzkKLSt9OwotKwotK19fZmlwc19j b25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRp dGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg1MywgMHgxNywgMHhhMSwgMHg2YSwgMHhm YSwgMHg3NywgMHg0NywgMHhiMCwgMHg5NSwgMHg1NiwgMHg5YSwgMHgyMCwKLSsgICAgMHg1Nywg MHhkZSwgMHg1YywgMHg4OSwgMHg5ZiwgMHg3ZiwgMHhlMiwgMHhkZSwgMHgxNywgMHgzYSwgMHg1 MCwgMHgyMwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjI0X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHgzYSwgMHgzMiwg MHhmOSwgMHg4NSwgMHgwYywgMHhjMSwgMHhlZCwgMHg3NiwgMHgyZCwgMHhkZiwgMHg0MCwgMHhj MywKLSsgICAgMHgwNiwgMHgyMiwgMHg2NiwgMHhkNCwgMHg5YSwgMHg5YSwgMHhmZiwgMHg1YSwg MHg3ZSwgMHg3YSwgMHhmMywgMHg5NgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3JldHVybmVkYml0c1tdID0gewotKyAgICAw eDQzLCAweGI0LCAweDU3LCAweDVjLCAweDM4LCAweDI1LCAweDlkLCAweGFlLCAweGVjLCAweDk2 LCAweGQxLCAweDg1LAotKyAgICAweDNhLCAweDg0LCAweDhkLCAweGZlLCAweDY4LCAweGQ1LCAw eDBlLCAweDVjLCAweDhmLCAweDY1LCAweGE1LCAweDRlLAotKyAgICAweDQ1LCAweDg0LCAweGE4 LCAweDk0Ci0rfTsKLSsKLSsvKiBITUFDIFNIQS0yNTYgUFIgICovCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dFtd ID0gewotKyAgICAweDRkLCAweGIwLCAweDQzLCAweGQ4LCAweDM0LCAweDRiLCAweDEwLCAweDcw LCAweGIxLCAweDhiLCAweGVkLCAweGVhLAotKyAgICAweDA3LCAweDkyLCAweDlmLCAweDZjLCAw eDc5LCAweDMxLCAweGFmLCAweDgxLCAweDI5LCAweGViLCAweDZlLCAweGNhLAotKyAgICAweDMy LCAweDQ4LCAweDI4LCAweGU3LCAweDAyLCAweDVkLCAweGE2LCAweGE2Ci0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfbm9u Y2VbXSA9IHsKLSsgICAgMHgzYSwgMHhhZSwgMHgxNSwgMHhhOSwgMHg5OSwgMHhkYywgMHhlNCwg MHg2NywgMHgzNCwgMHgzYiwgMHg3MCwgMHgxNSwKLSsgICAgMHhhYSwgMHhkMywgMHgzMCwgMHg5 YQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjU2X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDEz LCAweDFkLCAweDI0LCAweDA0LCAweGIwLCAweDE4LCAweDgxLCAweDE1LCAweDIxLCAweDUxLCAw eDJhLCAweDI0LAotKyAgICAweDUyLCAweDYxLCAweGJlLCAweDY0LCAweDgyLCAweDZiLCAweDU1 LCAweDJmLCAweGUyLCAweGYxLCAweDQwLCAweDdkLAotKyAgICAweDcxLCAweGQ4LCAweDAxLCAw eDg2LCAweDE1LCAweGI3LCAweDhiLCAweGI1Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0W10g PSB7Ci0rICAgIDB4OGYsIDB4YTYsIDB4NTQsIDB4NWYsIDB4YjEsIDB4ZDAsIDB4ZDgsIDB4YzMs IDB4ZTcsIDB4MGMsIDB4MTUsIDB4YTksCi0rICAgIDB4MjMsIDB4NmUsIDB4ZmUsIDB4ZmIsIDB4 OTMsIDB4ZjcsIDB4M2EsIDB4YmQsIDB4NTksIDB4MDEsIDB4ZmEsIDB4MTgsCi0rICAgIDB4OGUs IDB4ZTksIDB4MWEsIDB4YTksIDB4NzgsIDB4ZmMsIDB4NzksIDB4MGIKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRy b3B5aW5wdXRwcltdID0gewotKyAgICAweGNmLCAweDI0LCAweGI5LCAweGViLCAweGIzLCAweGQ0 LCAweGNkLCAweDE3LCAweDM3LCAweDM4LCAweDc1LCAweDc5LAotKyAgICAweDE1LCAweGNiLCAw eDJkLCAweDc1LCAweDUxLCAweGYxLCAweGNjLCAweGFhLCAweDMyLCAweGE0LCAweGE3LCAweDM2 LAotKyAgICAweDdjLCAweDVjLCAweGU0LCAweDQ3LCAweGYxLCAweDNlLCAweDFkLCAweGU1Ci0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDUyLCAweDQyLCAweGZhLCAw eGViLCAweDg1LCAweGUwLCAweDMwLCAweDIyLCAweDc5LCAweDAwLCAweDE2LCAweGIyLAotKyAg ICAweDg4LCAweDJmLCAweDE0LCAweDZhLCAweGI3LCAweGZjLCAweGI3LCAweDUzLCAweGRjLCAw eDRhLCAweDEyLCAweGVmLAotKyAgICAweDU0LCAweGQ2LCAweDMzLCAweGU5LCAweDIwLCAweGQ2 LCAweGZkLCAweDU2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweGY0 LCAweGY2LCAweDQ5LCAweGExLCAweDJkLCAweDY0LCAweDJiLCAweDMwLCAweDU4LCAweGY4LCAw eGJkLCAweGI4LAotKyAgICAweDc1LCAweGViLCAweGJiLCAweDVlLCAweDFjLCAweDliLCAweDgx LCAweDZhLCAweGRhLCAweDE0LCAweDg2LCAweDZlLAotKyAgICAweGQwLCAweGRhLCAweDE4LCAw eGI3LCAweDg4LCAweGZiLCAweDU5LCAweGYzCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0cHIyW10g PSB7Ci0rICAgIDB4MjEsIDB4Y2QsIDB4NmUsIDB4NDYsIDB4YWQsIDB4OTksIDB4MDcsIDB4MTcs IDB4YjQsIDB4M2QsIDB4NzYsIDB4MGEsCi0rICAgIDB4ZmYsIDB4NWIsIDB4NTIsIDB4NTAsIDB4 NzgsIDB4ZGYsIDB4MWYsIDB4MjQsIDB4MDYsIDB4MGQsIDB4M2YsIDB4NzQsCi0rICAgIDB4YTks IDB4YzksIDB4MzcsIDB4Y2YsIDB4ZDgsIDB4MjYsIDB4MjUsIDB4OTEKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9yZXR1 cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhhNywgMHhhZiwgMHgyZiwgMHgyOSwgMHhlMCwgMHgzYSwg MHg3MiwgMHg5NSwgMHg5NiwgMHgxYywgMHhhOSwgMHhmMCwKLSsgICAgMHg0YSwgMHgxNywgMHg0 ZCwgMHg2NiwgMHgwNiwgMHgxMCwgMHhiZiwgMHgzOSwgMHg4OSwgMHg4OCwgMHhiOCwgMHg5MSwK LSsgICAgMHgzNywgMHgxOCwgMHg5OSwgMHhjZiwgMHg4YywgMHg1MywgMHgzYiwgMHg3ZQotK307 Ci0rCi0rLyogSE1BQyBTSEEtMjU2IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAg MHg5NiwgMHhiNywgMHg1MywgMHgyMiwgMHgxZSwgMHg1MiwgMHgyYSwgMHg5NiwgMHhiMSwgMHgx NSwgMHgzYywgMHgzNSwKLSsgICAgMHg1YSwgMHg4YiwgMHhkMywgMHg0YSwgMHhhNiwgMHg2Yywg MHg4MywgMHgwYSwgMHg3ZCwgMHhhMywgMHgyMywgMHgzZCwKLSsgICAgMHg0MywgMHhhMSwgMHgw NywgMHgyYywgMHgyZCwgMHhlMywgMHg4MSwgMHhjYwotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X25vbmNlW10gPSB7Ci0rICAg IDB4ZjEsIDB4YWMsIDB4OTcsIDB4Y2IsIDB4NWUsIDB4MDYsIDB4NDgsIDB4ZDIsIDB4OTQsIDB4 YmUsIDB4MTUsIDB4MmUsCi0rICAgIDB4YzcsIDB4ZmMsIDB4YzIsIDB4MDEKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1 Nl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg5OCwgMHhjNSwgMHgxZSwgMHgz NSwgMHg1ZSwgMHg4OSwgMHgwZCwgMHhjZSwgMHg2NCwgMHg2ZCwgMHgxOCwgMHhhNywKLSsgICAg MHg1YSwgMHhjNiwgMHhmMywgMHhlNywgMHhkNiwgMHg5ZSwgMHhjMCwgMHhlYSwgMHhiNywgMHgz YSwgMHg4ZCwgMHg2NSwKLSsgICAgMHhiOCwgMHhlYiwgMHgxMCwgMHhkNywgMHg1NywgMHgxOCwg MHhhMCwgMHgzMgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDFiLCAweDEw LCAweGFmLCAweGFjLCAweGQwLCAweDY1LCAweDk1LCAweGFkLCAweDA0LCAweGFkLCAweDAzLCAw eDFjLAotKyAgICAweGUwLCAweDQwLCAweGQ2LCAweDNlLCAweDFjLCAweDQ2LCAweDUzLCAweDM5 LCAweDdjLCAweGUyLCAweGJjLCAweGRhLAotKyAgICAweDhjLCAweGEyLCAweDMzLCAweGE3LCAw eDlhLCAweDI2LCAweGQzLCAweDI3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfaW50X3JldHVybmVkYml0c1tdID0gewotKyAg ICAweGJhLCAweDYxLCAweDBlLCAweDU1LCAweGZlLCAweDExLCAweDhhLCAweDllLCAweDBmLCAw eDgwLCAweGRmLCAweDFkLAotKyAgICAweDAzLCAweDBhLCAweGZlLCAweDE1LCAweDk0LCAweDI4 LCAweDRiLCAweGJhLCAweGY0LCAweDlmLCAweDUxLCAweDI1LAotKyAgICAweDg4LCAweGU1LCAw eDRlLCAweGZiLCAweGFmLCAweGNlLCAweDY5LCAweDkwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlucHV0cmVz ZWVkW10gPSB7Ci0rICAgIDB4NjIsIDB4N2YsIDB4MWUsIDB4NmIsIDB4ZTgsIDB4OGUsIDB4ZTEs IDB4MzUsIDB4N2QsIDB4OWIsIDB4NGYsIDB4YzcsCi0rICAgIDB4ZWMsIDB4YzgsIDB4YWMsIDB4 ZWYsIDB4NmIsIDB4MTMsIDB4OWUsIDB4MDUsIDB4NTYsIDB4YzEsIDB4MDgsIDB4ZjksCi0rICAg IDB4MmYsIDB4MGYsIDB4MjcsIDB4OWMsIDB4ZDQsIDB4MTUsIDB4ZWQsIDB4MmQKLSt9OwotKwot K19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTI1Nl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHhjNywgMHg3NiwgMHg2ZSwg MHhhOSwgMHhkMiwgMHhiMiwgMHg3NiwgMHg0MCwgMHg4MiwgMHgyNSwgMHgyYywgMHhiMywKLSsg ICAgMHg2ZiwgMHhhYywgMHhlOSwgMHg3NCwgMHhlZiwgMHg4ZiwgMHgzYywgMHg4ZSwgMHhjZCwg MHhmMSwgMHhiZiwgMHhiMywKLSsgICAgMHg0OSwgMHg3NywgMHgzNCwgMHg4OCwgMHg1MiwgMHgz NiwgMHhlNiwgMHgyZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMjU2X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHg4ZCwg MHhiOCwgMHgwYywgMHhkMSwgMHhiZiwgMHg3MCwgMHhmNiwgMHgxOSwgMHhjMywgMHg0MSwgMHg4 MCwgMHg5ZiwKLSsgICAgMHhlMSwgMHhhNSwgMHhhNCwgMHgxZiwgMHgyYywgMHgyNiwgMHhiMSwg MHhlNSwgMHhkOCwgMHhlYiwgMHhiZSwgMHhmOCwKLSsgICAgMHhkZiwgMHg4OCwgMHg2YSwgMHg4 OSwgMHhkNiwgMHgwNSwgMHhkOCwgMHg5ZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3JldHVybmVkYml0c1tdID0gewotKyAg ICAweDQzLCAweDEyLCAweDJhLCAweDJjLCAweDQwLCAweDUzLCAweDJlLCAweDdjLCAweDY2LCAw eDM0LCAweGFjLCAweGMzLAotKyAgICAweDQzLCAweGUzLCAweGUwLCAweDZhLCAweGZjLCAweGZh LCAweGVhLCAweDg3LCAweDIxLCAweDFmLCAweGUyLCAweDI2LAotKyAgICAweGM0LCAweGY5LCAw eDA5LCAweDlhLCAweDBkLCAweDZlLCAweDdmLCAweGUwCi0rfTsKLSsKLSsvKiBITUFDIFNIQS0z ODQgUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDY5LCAweDgxLCAweDk4LCAw eDg4LCAweDQ0LCAweGY1LCAweGQ2LCAweDJlLCAweDAwLCAweDA4LCAweDNiLCAweGM1LAotKyAg ICAweGZiLCAweGQ3LCAweDhlLCAweDZmLCAweDIzLCAweGY4LCAweDZkLCAweDA5LCAweGQ2LCAw eDg1LCAweDQ5LCAweGQxLAotKyAgICAweGY4LCAweDZkLCAweGE0LCAweDU4LCAweDU0LCAweGZk LCAweDg4LCAweGE5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEzODRfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHg2ZSwgMHgzOCwgMHg4 MSwgMHhjYSwgMHhiNywgMHhlOCwgMHg2ZSwgMHg2NiwgMHg0OSwgMHg4YSwgMHhiMiwgMHg1OSwK LSsgICAgMHhlZSwgMHgxNiwgMHhjOSwgMHhkZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0gewotKyAgICAweGZlLCAweDRjLCAweGQ5LCAweGY0LCAweDc4LCAweDNi LCAweDA4LCAweDQxLCAweDhkLCAweDhmLCAweDU1LCAweGM0LAotKyAgICAweDQzLCAweDU2LCAw eGI2LCAweDEyLCAweDM2LCAweDZiLCAweDMwLCAweGI3LCAweDVlLCAweGUxLCAweGI5LCAweDQ3 LAotKyAgICAweDA0LCAweGIxLCAweDRlLCAweGE5LCAweDAwLCAweGExLCAweDUyLCAweGExCi0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4ODksIDB4ZTksIDB4Y2MsIDB4 OGYsIDB4MjcsIDB4M2MsIDB4MjYsIDB4ZDEsIDB4OTUsIDB4YzgsIDB4N2QsIDB4MGYsCi0rICAg IDB4NWIsIDB4MWEsIDB4ZjAsIDB4NzgsIDB4MzksIDB4NTYsIDB4NmYsIDB4YTQsIDB4MjMsIDB4 ZTcsIDB4ZDEsIDB4ZGEsCi0rICAgIDB4N2MsIDB4NjYsIDB4MzMsIDB4YTAsIDB4OTAsIDB4Yzks IDB4OTIsIDB4ODgKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweGJlLCAw eDNkLCAweDdjLCAweDBkLCAweGNhLCAweGRhLCAweDdjLCAweDQ5LCAweGI4LCAweDEyLCAweDM2 LCAweGMwLAotKyAgICAweGRiLCAweGFkLCAweDM1LCAweGE4LCAweGM3LCAweDBiLCAweDJhLCAw eDJjLCAweDY5LCAweDZkLCAweDI1LCAweDU2LAotKyAgICAweDYzLCAweDgyLCAweDExLCAweDNl LCAweGE3LCAweDMzLCAweDcwLCAweDcyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfaW50X3JldHVybmVkYml0c1tdID0g ewotKyAgICAweDgyLCAweDNkLCAweGU2LCAweDU0LCAweDgwLCAweDQyLCAweGY4LCAweGJhLCAw eDkwLCAweDRmLCAweDA2LCAweGE2LAotKyAgICAweGQyLCAweDdmLCAweGJmLCAweDc5LCAweDdj LCAweDEyLCAweDdkLCAweGE2LCAweGEyLCAweDY2LCAweGU4LCAweGE2LAotKyAgICAweGMwLCAw eGQ2LCAweDRhLCAweDU1LCAweGJmLCAweGQ4LCAweDBhLCAweGM1LCAweGY4LCAweDAzLCAweDg4 LCAweGRkLAotKyAgICAweDhlLCAweDg3LCAweGQxLCAweDVhLCAweDQ4LCAweDI2LCAweDcyLCAw eDJhLCAweDhlLCAweGNmLCAweGVlLCAweGJhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfYWRkaXRpb25hbGlucHV0Mltd ID0gewotKyAgICAweDhmLCAweGZmLCAweGQ5LCAweDg0LCAweGJiLCAweDg1LCAweDNhLCAweDY2 LCAweGExLCAweDIxLCAweGNlLCAweGIyLAotKyAgICAweDNhLCAweDNhLCAweDE3LCAweDIyLCAw eDE5LCAweGFlLCAweGM3LCAweGI2LCAweDYzLCAweDgxLCAweGQ1LCAweGZmLAotKyAgICAweDBk LCAweGM4LCAweGUxLCAweGFmLCAweDU3LCAweGQyLCAweGNiLCAweDYwCi0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfZW50 cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4ZDcsIDB4ZmIsIDB4YzksIDB4ZTgsIDB4ZTIsIDB4 ZjIsIDB4YWEsIDB4NGMsIDB4YjgsIDB4NTEsIDB4MmYsIDB4ZTEsCi0rICAgIDB4MjIsIDB4YmEs IDB4ZjMsIDB4ZGEsIDB4MGEsIDB4MTksIDB4NzYsIDB4NzEsIDB4NTcsIDB4YjIsIDB4MWQsIDB4 OTQsCi0rICAgIDB4MDksIDB4NjksIDB4NmMsIDB4ZDMsIDB4OTcsIDB4NTEsIDB4ODEsIDB4ODcK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTM4NF9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhlNiwgMHgxOSwgMHgyOCwgMHhh OCwgMHgyMSwgMHhjZSwgMHg1ZSwgMHhkYiwgMHgyNCwgMHg3OSwgMHg4YywgMHg3NiwKLSsgICAg MHg1ZCwgMHg3MywgMHhiMiwgMHhkZiwgMHhhYywgMHhlZiwgMHg4NSwgMHhhNywgMHgzYiwgMHgx OSwgMHgwOSwgMHg4YiwKLSsgICAgMHg3ZiwgMHg5OCwgMHgyOCwgMHhhOSwgMHg5MywgMHhkOCwg MHg3YSwgMHhhZCwgMHg1NSwgMHg4YiwgMHgyNCwgMHg5ZCwKLSsgICAgMHhlNiwgMHg5OCwgMHhm ZSwgMHg0NywgMHhkNSwgMHg0OCwgMHhjMSwgMHgyMywgMHhkOCwgMHgxZCwgMHg2MiwgMHg3NQot K307Ci0rCi0rLyogSE1BQyBTSEEtMzg0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9lbnRyb3B5aW5wdXRbXSA9IHsKLSsg ICAgMHhjMywgMHg1NiwgMHgyYiwgMHgxZCwgMHhjMiwgMHhiYiwgMHhhOCwgMHhmMCwgMHhhZSwg MHgxYiwgMHgwZCwgMHhkMywKLSsgICAgMHg1YSwgMHg2YywgMHhkYSwgMHg1NywgMHg4ZSwgMHhh NSwgMHg4YSwgMHgwZCwgMHg2YywgMHg0YiwgMHgxOCwgMHhiMSwKLSsgICAgMHgwNCwgMHgzZSwg MHhiNCwgMHg5OSwgMHgzNSwgMHhjNCwgMHhjMCwgMHg1ZgotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X25vbmNlW10gPSB7Ci0r ICAgIDB4YzUsIDB4NDksIDB4MWUsIDB4NjYsIDB4MjcsIDB4OTIsIDB4YmUsIDB4ZWMsIDB4YjUs IDB4MWUsIDB4NGIsIDB4YjEsCi0rICAgIDB4MzgsIDB4ZTMsIDB4ZWIsIDB4NjIKLSt9OwotKwot K19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTM4NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHhiZSwgMHhlNywgMHg2Yiwg MHg1NywgMHhkZSwgMHg4OCwgMHgxMSwgMHg5NiwgMHg5YiwgMHg2ZSwgMHhlYSwgMHhlNSwKLSsg ICAgMHg2MywgMHg4MywgMHg0YywgMHhiNiwgMHg4ZCwgMHg2NiwgMHhhYSwgMHgxZiwgMHg4Yiwg MHg1NCwgMHhlNywgMHg2MiwKLSsgICAgMHg2ZCwgMHg1YSwgMHhmYywgMHhiZiwgMHg5NywgMHhi YSwgMHhjZCwgMHg3NwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweGU1LCAw eDI4LCAweDVmLCAweDQzLCAweGY1LCAweDgzLCAweDZlLCAweDBhLCAweDgzLCAweDVjLCAweGUz LCAweDgxLAotKyAgICAweDAzLCAweGYyLCAweGY4LCAweDc4LCAweDAwLCAweDdjLCAweDk1LCAw eDg3LCAweDE2LCAweGQ2LCAweDZjLCAweDU4LAotKyAgICAweDMzLCAweDZjLCAweDUzLCAweDM1 LCAweDBkLCAweDY2LCAweGUzLCAweGNlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfaW50X3JldHVybmVkYml0c1tdID0gewot KyAgICAweGUyLCAweDFmLCAweGYzLCAweGRhLCAweDBkLCAweDE5LCAweDk5LCAweDg3LCAweGM0 LCAweDkwLCAweGEyLCAweDMxLAotKyAgICAweGNhLCAweDJhLCAweDg5LCAweDU4LCAweDQzLCAw eDQ0LCAweGI4LCAweGRlLCAweGNmLCAweGE0LCAweGJlLCAweDNiLAotKyAgICAweDUzLCAweDI2 LCAweDIyLCAweDMxLCAweDc2LCAweDQxLCAweDIyLCAweGI1LCAweGE4LCAweDcwLCAweDJmLCAw eDRiLAotKyAgICAweDY0LCAweDk1LCAweDRkLCAweDQ4LCAweDk2LCAweDM1LCAweGU2LCAweGJk LCAweDNjLCAweDM0LCAweGRiLCAweDFiCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfZW50cm9weWlucHV0cmVzZWVkW10gPSB7 Ci0rICAgIDB4NzcsIDB4NjEsIDB4YmEsIDB4YmMsIDB4ZjIsIDB4YzEsIDB4ZjMsIDB4NGIsIDB4 ODYsIDB4NjUsIDB4ZmQsIDB4NDgsCi0rICAgIDB4MGUsIDB4M2MsIDB4MDIsIDB4NWUsIDB4YTIs IDB4N2EsIDB4NmIsIDB4N2MsIDB4ZWQsIDB4MjEsIDB4NWUsIDB4ZjksCi0rICAgIDB4Y2QsIDB4 Y2QsIDB4NzcsIDB4MDcsIDB4MmIsIDB4YmUsIDB4YzUsIDB4NWMKLSt9OwotKwotK19fZmlwc19j b25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRp dGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHgxOCwgMHgyNCwgMHg1ZiwgMHhjNiwgMHg4 NCwgMHhkMSwgMHg2NywgMHhjMywgMHg5YSwgMHgxMSwgMHhhNSwgMHg4YywKLSsgICAgMHgwNywg MHgzOSwgMHgyMSwgMHg4MywgMHg0ZCwgMHgwNCwgMHhjNCwgMHg2YSwgMHgyOCwgMHgxOSwgMHhj ZiwgMHg5MiwKLSsgICAgMHgyMSwgMHhkOSwgMHg5ZSwgMHg0MSwgMHg3MiwgMHg2YywgMHg5ZSwg MHg2MwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMzg0X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHg5NiwgMHg2NywgMHg0 MSwgMHgyOCwgMHg5YiwgMHhiNywgMHg5MiwgMHg4ZCwgMHg2NCwgMHgzYiwgMHhlNCwgMHhjZiwK LSsgICAgMHg3ZSwgMHhhYSwgMHgxZSwgMHhiMSwgMHg0YiwgMHgxZCwgMHgwOSwgMHg1NiwgMHg2 NywgMHg5YywgMHhjNiwgMHg2ZCwKLSsgICAgMHgzYiwgMHhlOCwgMHg5MSwgMHg5ZCwgMHhlMSwg MHg4YSwgMHhiNywgMHgzMgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGUzLCAw eDU5LCAweDYxLCAweDM4LCAweDkyLCAweGVjLCAweGUyLCAweDNjLCAweGZmLCAweGI3LCAweGRi LCAweDE5LAotKyAgICAweDBmLCAweDViLCAweDkzLCAweDY4LCAweDBkLCAweGE0LCAweDk0LCAw eDQwLCAweDcyLCAweDBiLCAweGUwLCAweGVkLAotKyAgICAweDRkLCAweGNkLCAweDY4LCAweGEw LCAweDFlLCAweGZlLCAweDY3LCAweGIyLCAweGZhLCAweDIxLCAweDU2LCAweDc0LAotKyAgICAw eGE0LCAweGFkLCAweGNmLCAweGI3LCAweDYwLCAweDY2LCAweDJlLCAweDQwLCAweGRlLCAweDgy LCAweGNhLCAweGZiCi0rfTsKLSsKLSsvKiBITUFDIFNIQS01MTIgUFIgICovCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlp bnB1dFtdID0gewotKyAgICAweGFhLCAweDllLCAweDQ1LCAweDY3LCAweDBlLCAweDAwLCAweDJh LCAweDY3LCAweDk4LCAweGQ2LCAweGRhLCAweDBiLAotKyAgICAweDBmLCAweDE3LCAweDdlLCAw eGFjLCAweGZkLCAweDI3LCAweGM0LCAweGNhLCAweDg0LCAweGRmLCAweGRlLCAweGJhLAotKyAg ICAweDg1LCAweGQ5LCAweGJlLCAweDhmLCAweGYzLCAweGZmLCAweDkxLCAweDRkCi0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf cHJfbm9uY2VbXSA9IHsKLSsgICAgMHg4YywgMHg0OSwgMHgyZiwgMHg1OCwgMHgxZSwgMHg3YSwg MHhkYSwgMHg0YiwgMHg3ZSwgMHg4YSwgMHgzMCwgMHg3YiwKLSsgICAgMHg4NiwgMHhlYSwgMHhh ZiwgMHhhMgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAg ICAweDcxLCAweGUxLCAweGJiLCAweGFkLCAweGE3LCAweDRiLCAweDJlLCAweDMxLCAweDNiLCAw eDBiLCAweGVjLCAweDI0LAotKyAgICAweDk5LCAweDM4LCAweGJjLCAweGFhLCAweDA1LCAweDRj LCAweDQ2LCAweDQ0LCAweGZhLCAweGFkLCAweDhlLCAweDAyLAotKyAgICAweGMxLCAweDdlLCAw eGFkLCAweGVjLCAweDU0LCAweGE2LCAweGQwLCAweGFkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfYWRkaXRpb25hbGlu cHV0W10gPSB7Ci0rICAgIDB4M2QsIDB4NmUsIDB4YTYsIDB4YTgsIDB4MjksIDB4MmEsIDB4YjIs IDB4ZjUsIDB4OTgsIDB4NDIsIDB4ZTQsIDB4OTIsCi0rICAgIDB4NzgsIDB4MjIsIDB4NjcsIDB4 ZmQsIDB4MWIsIDB4MTUsIDB4MWUsIDB4MjksIDB4YWEsIDB4NzEsIDB4M2MsIDB4M2MsCi0rICAg IDB4ZTcsIDB4MDUsIDB4MjAsIDB4YTksIDB4MjksIDB4YzYsIDB4NzUsIDB4NzEKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9w cl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweGFiLCAweGI5LCAweDE2LCAweGQ4LCAweDU1 LCAweDM1LCAweDU0LCAweGI3LCAweDk3LCAweDNmLCAweDk0LCAweGJjLAotKyAgICAweDJmLCAw eDdjLCAweDcwLCAweGM3LCAweGQwLCAweGVkLCAweGI3LCAweDRiLCAweGY3LCAweGY2LCAweDZj LCAweDAzLAotKyAgICAweDBjLCAweGIwLCAweDAzLCAweGQ4LCAweGJiLCAweDcxLCAweGQ5LCAw eDEwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGE1MTJfcHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDhlLCAweGQzLCAw eGZkLCAweDUyLCAweDllLCAweDgzLCAweDA4LCAweDQ5LCAweDE4LCAweDZlLCAweDIzLCAweDU2 LAotKyAgICAweDVjLCAweDQ1LCAweDkzLCAweDM0LCAweDA1LCAweGUyLCAweDk4LCAweDhmLCAw eDBjLCAweGQ0LCAweDMyLCAweDBjLAotKyAgICAweGZkLCAweGRhLCAweDVmLCAweDkyLCAweDNh LCAweDhjLCAweDgxLCAweGJkLCAweGY2LCAweDZjLCAweDU1LCAweGZkLAotKyAgICAweGI4LCAw eDIwLCAweGNlLCAweDhkLCAweDk3LCAweDI3LCAweGU4LCAweGU4LCAweGUwLCAweGIzLCAweDg1 LCAweDUwLAotKyAgICAweGEyLCAweGMyLCAweGIyLCAweDk1LCAweDFkLCAweDQ4LCAweGQzLCAw eDdiLCAweDRiLCAweDc4LCAweDEzLCAweDM1LAotKyAgICAweDA1LCAweDE3LCAweGJlLCAweDBk Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGE1MTJfcHJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweGMzLCAweGZjLCAweDk1 LCAweGFhLCAweDY5LCAweDA2LCAweGFlLCAweDU5LCAweDQxLCAweGNlLCAweDI2LCAweDA4LAot KyAgICAweDI5LCAweDZkLCAweDQ1LCAweGRhLCAweGU4LCAweGIzLCAweDZjLCAweDk1LCAweDYw LCAweDBmLCAweDcwLCAweDJjLAotKyAgICAweDEwLCAweGJhLCAweDM4LCAweDhjLCAweGNmLCAw eDI5LCAweDk5LCAweGFhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4 M2IsIDB4OWEsIDB4MjUsIDB4Y2UsIDB4ZDcsIDB4ZjksIDB4NWMsIDB4ZDEsIDB4M2EsIDB4M2Us IDB4YWEsIDB4NzEsCi0rICAgIDB4MTQsIDB4M2UsIDB4MTksIDB4ZTgsIDB4Y2UsIDB4ZTYsIDB4 ZmUsIDB4NTEsIDB4ODQsIDB4ZTksIDB4MWIsIDB4ZmUsCi0rICAgIDB4M2YsIDB4YTcsIDB4ZjIs IDB4ZmQsIDB4NzYsIDB4NWYsIDB4NmEsIDB4ZTcKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9yZXR1cm5lZGJpdHNbXSA9 IHsKLSsgICAgMHhiNywgMHg4MiwgMHhhOSwgMHg1NywgMHg4MSwgMHg2NywgMHg1MywgMHhiNSwg MHhhMSwgMHhlOSwgMHgzZCwgMHgzNSwKLSsgICAgMHhmOSwgMHhlNCwgMHg5NywgMHhiZSwgMHhh NiwgMHhjYSwgMHhmMSwgMHgwMSwgMHgxMywgMHgwOSwgMHhlNywgMHgyMSwKLSsgICAgMHhjMCwg MHhlZCwgMHg5MywgMHg1ZCwgMHg0YiwgMHhmNCwgMHhlYiwgMHg4ZCwgMHg1MywgMHgyNSwgMHg4 YSwgMHhjNCwKLSsgICAgMHhiMSwgMHg2ZiwgMHg2ZSwgMHgzNywgMHhjZCwgMHgyZSwgMHhhYywg MHgzOSwgMHhiMiwgMHhiNiwgMHg5OSwgMHhhMywKLSsgICAgMHg4MiwgMHgwMCwgMHhiMCwgMHgy MSwgMHhmMCwgMHhjNywgMHgyZiwgMHg0YywgMHg3MywgMHg5MiwgMHhmZCwgMHgwMCwKLSsgICAg MHhiNiwgMHhhZiwgMHhiYywgMHhkMwotK307Ci0rCi0rLyogSE1BQyBTSEEtNTEyIE5vIFBSICAq LwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUx Ml9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHg2ZSwgMHg4NSwgMHhlNiwgMHgyNSwgMHg5Niwg MHgyOSwgMHhhNywgMHg1MiwgMHg1YiwgMHg2MCwgMHhiYSwgMHhhYSwKLSsgICAgMHhkZSwgMHhk YiwgMHgzNiwgMHgwYSwgMHg1MSwgMHg5YSwgMHgxNSwgMHhhZSwgMHg2ZSwgMHgxOCwgMHhkMywg MHhmZSwKLSsgICAgMHgzOSwgMHhiOSwgMHg0YSwgMHg5NiwgMHhmOCwgMHg3NywgMHhjYiwgMHg5 NQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhNTEyX25vbmNlW10gPSB7Ci0rICAgIDB4ZTAsIDB4YTYsIDB4NWQsIDB4MDgsIDB4YzMs IDB4N2MsIDB4YWUsIDB4MjUsIDB4MmUsIDB4ODAsIDB4ZDEsIDB4M2UsCi0rICAgIDB4ZDksIDB4 YWYsIDB4NDMsIDB4M2MKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsK LSsgICAgMHg1MywgMHg5OSwgMHg1MiwgMHg1ZiwgMHgxMSwgMHhhOSwgMHg2NCwgMHg2NiwgMHgy MCwgMHg1ZSwgMHgxYiwgMHg1ZiwKLSsgICAgMHg0MiwgMHhiMywgMHhmNCwgMHhkYSwgMHhlZCwg MHhiYiwgMHg2MywgMHhjMSwgMHgyMywgMHhhZiwgMHhkMCwgMHgwMSwKLSsgICAgMHg5MCwgMHgz YiwgMHhkMCwgMHg3OCwgMHhlNCwgMHgwYiwgMHhhNywgMHgyMAotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxp bnB1dFtdID0gewotKyAgICAweDg1LCAweDkwLCAweDgwLCAweGQzLCAweDk4LCAweGYxLCAweDUz LCAweDZkLCAweDY4LCAweDE1LCAweDhmLCAweGU1LAotKyAgICAweDYwLCAweDNmLCAweDE3LCAw eDI5LCAweDU1LCAweDhkLCAweDMzLCAweGIxLCAweDQ1LCAweDY0LCAweDY0LCAweDhkLAotKyAg ICAweDUwLCAweDIxLCAweDg5LCAweGFlLCAweGY2LCAweGZkLCAweDMyLCAweDczCi0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf aW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDI4LCAweDU2LCAweDMwLCAweDZmLCAweGY0 LCAweGExLCAweDQ4LCAweGUwLCAweGM5LCAweGY1LCAweDc1LCAweDkwLAotKyAgICAweGNjLCAw eGZiLCAweGRmLCAweGRmLCAweDcxLCAweDNkLCAweDBhLCAweDlhLCAweDAzLCAweDY1LCAweDNi LCAweDE4LAotKyAgICAweDYxLCAweGUzLCAweGQxLCAweGRhLCAweGNjLCAweDRhLCAweGZlLCAw eDU1LCAweDM4LCAweGY4LCAweDIxLCAweDZiLAotKyAgICAweGZhLCAweDE4LCAweDAxLCAweDQy LCAweDM5LCAweDJmLCAweDk5LCAweDUzLCAweDM4LCAweDE1LCAweDgyLCAweDM0LAotKyAgICAw eGM1LCAweDkzLCAweDkyLCAweGJjLCAweDRkLCAweDc1LCAweDFhLCAweDVmLCAweDIxLCAweDI3 LCAweGNjLCAweGExLAotKyAgICAweGIxLCAweDU3LCAweDY5LCAweGU4Ci0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfZW50cm9w eWlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4OGMsIDB4NTIsIDB4N2UsIDB4NzcsIDB4NzIsIDB4 M2YsIDB4YTMsIDB4MDQsIDB4OTcsIDB4MTAsIDB4OWIsIDB4NDEsCi0rICAgIDB4YmQsIDB4ZTgs IDB4ZmYsIDB4ODksIDB4ZWQsIDB4ODAsIDB4ZTMsIDB4YmQsIDB4YWEsIDB4MTIsIDB4MmQsIDB4 Y2EsCi0rICAgIDB4NzUsIDB4ODIsIDB4MzYsIDB4NzcsIDB4ODgsIDB4Y2QsIDB4YTYsIDB4NzMK LSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg3ZSwgMHgz MiwgMHhlMywgMHg2OSwgMHg2OSwgMHgwNywgMHgzNCwgMHhhMiwgMHgxNiwgMHhhMiwgMHg1ZCwg MHgxYSwKLSsgICAgMHgxMCwgMHg5MSwgMHhkMywgMHhlMiwgMHgyMSwgMHhhMiwgMHhhMywgMHhk ZCwgMHhjZCwgMHgwYywgMHgwOSwgMHg4NiwKLSsgICAgMHgxMSwgMHhlMSwgMHg1MCwgMHhmZiwg MHg1YywgMHhiNywgMHhlYiwgMHg1YwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsg ICAgMHg3ZiwgMHg3OCwgMHg2NiwgMHhkOCwgMHhmYiwgMHg2NywgMHhjZiwgMHg4ZCwgMHg4Yywg MHgwOCwgMHgzMCwgMHhhNSwKLSsgICAgMHhmOCwgMHg3ZCwgMHhjZiwgMHg0NCwgMHg1OSwgMHhj ZSwgMHhmOCwgMHhkZiwgMHg1OCwgMHhkMywgMHg2MCwgMHhjYiwKLSsgICAgMHhhOCwgMHg2MCwg MHhiOSwgMHgwNywgMHhjNCwgMHhiMSwgMHg5NSwgMHg0OAotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3JldHVybmVkYml0c1td ID0gewotKyAgICAweGRmLCAweGE3LCAweDM2LCAweGQ0LCAweGRjLCAweDVkLCAweDRkLCAweDMx LCAweGFkLCAweDY5LCAweDQ2LCAweDlmLAotKyAgICAweGYxLCAweDdjLCAweGQ3LCAweDNiLCAw eDRmLCAweDU1LCAweGYyLCAweGQ3LCAweGI5LCAweDlkLCAweGFkLCAweDdhLAotKyAgICAweDc5 LCAweDA4LCAweDU5LCAweGE1LCAweGRjLCAweDc0LCAweGY1LCAweDliLCAweDczLCAweGQyLCAw eDEzLCAweDI1LAotKyAgICAweDBiLCAweDgxLCAweDA4LCAweDA4LCAweDI1LCAweGZiLCAweDM5 LCAweGYyLCAweGYwLCAweGEzLCAweGE0LCAweDhkLAotKyAgICAweGVmLCAweDA1LCAweDllLCAw eGI4LCAweGM3LCAweDUyLCAweGU0LCAweDBlLCAweDQyLCAweGFhLCAweDdjLCAweDc5LAotKyAg ICAweGMyLCAweGQ2LCAweGZkLCAweGE1Ci0rfTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2Ny eXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8v Zmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMv Zmlwc19kc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDA4MjgzOTgyICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYwky MDE1LTA2LTE1IDE3OjMwOjAwLjAwODI4Mzk4MiArMDIwMAotQEAgLTAsMCArMSwxOTIgQEAKLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg b3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgImZp cHNfbG9jbC5oIgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4X3BbXSA9IHsKLSsgICAgMHhhOCwgMHg1MywgMHg3OCwg MHhkOCwgMHhmZCwgMHgzZiwgMHg4ZCwgMHg3MiwgMHhlYywgMHg3NCwgMHgxOCwgMHgwOCwKLSsg ICAgMHgwZCwgMHhhMiwgMHgxMywgMHgxNywgMHhlNCwgMHgzZSwgMHhjNCwgMHhiNiwgMHgyYiwg MHhhOCwgMHhjOCwgMHg2MiwKLSsgICAgMHgzYiwgMHg3ZSwgMHg0ZCwgMHgwNCwgMHg0NCwgMHgx ZCwgMHhkMSwgMHhhMCwgMHg2NSwgMHg4NiwgMHg2MiwgMHg1OSwKLSsgICAgMHg2NCwgMHg5Mywg MHhjYSwgMHg4ZSwgMHg5ZSwgMHg4ZiwgMHhiYiwgMHg3ZSwgMHgzNCwgMHhhYSwgMHhkZCwgMHhi NiwKLSsgICAgMHgyZSwgMHg1ZCwgMHg2NywgMHhiNiwgMHhkMCwgMHg5YSwgMHg2ZSwgMHg2MSwg MHhiNywgMHg2OSwgMHhlNywgMHhjMywKLSsgICAgMHg1MiwgMHhhYSwgMHgyYiwgMHgxMCwgMHhl MiwgMHgwYywgMHhhMCwgMHg2MywgMHg2OSwgMHg2MywgMHhiNSwgMHg1MiwKLSsgICAgMHgzZSwg MHg4NiwgMHg0NywgMHgwZCwgMHhlYywgMHhiYiwgMHhlZCwgMHhhMCwgMHgyNywgMHhlNywgMHg5 NywgMHhlNywKLSsgICAgMHhiNiwgMHg3NiwgMHgzNSwgMHhkNCwgMHhkNCwgMHg5YywgMHgzMCwg MHg3MCwgMHgwZSwgMHg3NCwgMHhhZiwgMHg4YSwKLSsgICAgMHgwZiwgMHhmMSwgMHg1NiwgMHhh OCwgMHgwMSwgMHhhZiwgMHg1NywgMHhhMiwgMHg2ZSwgMHg3MCwgMHg3OCwgMHhmMSwKLSsgICAg MHhkOCwgMHgyZiwgMHg3NCwgMHg5MCwgMHg4ZSwgMHhjYiwgMHg2ZCwgMHgwNywgMHhlNywgMHgw YiwgMHgzNSwgMHgwMywKLSsgICAgMHhlZSwgMHhkOSwgMHg0ZiwgMHhhMywgMHgyYywgMHhmMSwg MHg3YSwgMHg3ZiwgMHhjMywgMHhkNiwgMHhjZiwgMHg0MCwKLSsgICAgMHhkYywgMHg3YiwgMHgw MCwgMHg4MywgMHgwZSwgMHg2YSwgMHgyNSwgMHg2NiwgMHhkYywgMHgwNywgMHgzZSwgMHgzNCwK LSsgICAgMHgzMywgMHgxMiwgMHg1MSwgMHg3YywgMHg2YSwgMHhhNSwgMHgxNSwgMHgyYiwgMHg0 YiwgMHhmZSwgMHhjZCwgMHgyZSwKLSsgICAgMHg1NSwgMHgxZiwgMHhlZSwgMHgzNCwgMHg2Mywg MHgxOCwgMHhhMSwgMHg1MywgMHg0MiwgMHgzYywgMHg5OSwgMHg2YiwKLSsgICAgMHgwZCwgMHg1 ZCwgMHhjYiwgMHg5MSwgMHgwMiwgMHhhZSwgMHhkZCwgMHgzOCwgMHg3OSwgMHg4NiwgMHgxNiwg MHhmMSwKLSsgICAgMHhmMSwgMHhlMCwgMHhkNiwgMHhjNCwgMHgwMywgMHg1MiwgMHg1YiwgMHgx ZiwgMHg5YiwgMHgzZCwgMHg0ZCwgMHhjNywKLSsgICAgMHg2NiwgMHhkZSwgMHgyZCwgMHhmYywg MHg0YSwgMHg1NiwgMHhkNywgMHhiOCwgMHhiYSwgMHg1OSwgMHg2MywgMHhkNiwKLSsgICAgMHgw ZiwgMHgzZSwgMHgxNiwgMHgzMSwgMHg4OCwgMHg3MCwgMHhhZCwgMHg0MywgMHg2OSwgMHg1Miwg MHhlNSwgMHg1NywKLSsgICAgMHg2NSwgMHgzNywgMHg0ZSwgMHhhYiwgMHg4NSwgMHhlOCwgMHhl YywgMHgxNywgMHhkNiwgMHhiOSwgMHhhNCwgMHg1NCwKLSsgICAgMHg3YiwgMHg5YiwgMHg1Ziwg MHgyNywgMHg1MiwgMHhmMywgMHgxMCwgMHg1YiwgMHhlOCwgMHgwOSwgMHhiMiwgMHgzYSwKLSsg ICAgMHgyYywgMHg4ZCwgMHg3NCwgMHg2OSwgMHhkYiwgMHgwMiwgMHhlMiwgMHg0ZCwgMHg1OSwg MHgyMywgMHg5NCwgMHhhNywKLSsgICAgMHhkYiwgMHhhMCwgMHg2OSwgMHhlOQotK307Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9xW10gPSB7Ci0rICAgIDB4 ZDIsIDB4NzcsIDB4MDQsIDB4NGUsIDB4NTAsIDB4ZjUsIDB4YTQsIDB4ZTMsIDB4ZjUsIDB4MTAs IDB4YTUsIDB4MGEsCi0rICAgIDB4MGIsIDB4ODQsIDB4ZmQsIDB4ZmYsIDB4YmMsIDB4YTAsIDB4 NDcsIDB4ZWQsIDB4MjcsIDB4NjAsIDB4MjAsIDB4NTYsCi0rICAgIDB4NzQsIDB4NDEsIDB4YTAs IDB4YTUKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhf Z1tdID0gewotKyAgICAweDEzLCAweGQ3LCAweDU0LCAweGUyLCAweDFmLCAweGQyLCAweDQxLCAw eDY1LCAweDVkLCAweGE4LCAweDkxLCAweGM1LAotKyAgICAweDIyLCAweGE2LCAweDVhLCAweDcy LCAweGE4LCAweDliLCAweGRjLCAweDY0LCAweGVjLCAweDliLCAweDU0LCAweGE4LAotKyAgICAw eDIxLCAweGVkLCAweDRhLCAweDg5LCAweDhiLCAweDQ5LCAweDBlLCAweDBjLCAweDRmLCAweGNi LCAweDcyLCAweDE5LAotKyAgICAweDJhLCAweDRhLCAweDIwLCAweGY1LCAweDQxLCAweGYzLCAw eGYyLCAweDkyLCAweDUzLCAweDk5LCAweGYwLCAweGJhLAotKyAgICAweGVjLCAweGY5LCAweDI5 LCAweGFhLCAweGZiLCAweGY3LCAweDlkLCAweGZlLCAweDQzLCAweDMyLCAweDM5LCAweDNiLAot KyAgICAweDMyLCAweGNkLCAweDJlLCAweDJmLCAweGNmLCAweDI3LCAweDJmLCAweDMyLCAweGE2 LCAweDI3LCAweDQzLCAweDRhLAotKyAgICAweDBkLCAweGYyLCAweDQyLCAweGI3LCAweDViLCAw eDQxLCAweDRkLCAweGYzLCAweDcyLCAweDEyLCAweDFlLCAweDUzLAotKyAgICAweGE1LCAweDUz LCAweGYyLCAweDIyLCAweGY4LCAweDM2LCAweGIwLCAweDAwLCAweGYwLCAweDE2LCAweDQ4LCAw eDViLAotKyAgICAweDZiLCAweGQwLCAweDg5LCAweDg0LCAweDUxLCAweDgwLCAweDFkLCAweGNk LCAweDhkLCAweGU2LCAweDRjLCAweGQ1LAotKyAgICAweDM2LCAweDU2LCAweDk2LCAweGZmLCAw eGM1LCAweDMyLCAweGQ1LCAweDI4LCAweGM1LCAweDA2LCAweDYyLCAweDBhLAotKyAgICAweDk0 LCAweDJhLCAweDAzLCAweDA1LCAweDA0LCAweDZkLCAweDhmLCAweDE4LCAweDc2LCAweDM0LCAw eDFmLCAweDFlLAotKyAgICAweDU3LCAweDBiLCAweGMzLCAweDk3LCAweDRiLCAweGE2LCAweGI5 LCAweGE0LCAweDM4LCAweGU5LCAweDcwLCAweDIzLAotKyAgICAweDAyLCAweGEyLCAweGU2LCAw eGU2LCAweDdiLCAweGZkLCAweDA2LCAweGQzLCAweDJiLCAweGM2LCAweDc5LCAweDk2LAotKyAg ICAweDIyLCAweDcxLCAweGQ3LCAweGI0LCAweDBjLCAweGQ3LCAweDJmLCAweDM4LCAweDZlLCAw eDY0LCAweGUwLCAweGQ3LAotKyAgICAweGVmLCAweDg2LCAweGNhLCAweDhjLCAweGE1LCAweGQx LCAweDQyLCAweDI4LCAweGRjLCAweDJhLCAweDRmLCAweDE2LAotKyAgICAweGUzLCAweDE4LCAw eDk4LCAweDg2LCAweGI1LCAweDk5LCAweDA2LCAweDc0LCAweGY0LCAweDIwLCAweDBmLCAweDNh LAotKyAgICAweDRjLCAweGY2LCAweDVhLCAweDNmLCAweDBkLCAweGRiLCAweGExLCAweGZhLCAw eDY3LCAweDJkLCAweGZmLCAweDJmLAotKyAgICAweDVlLCAweDE0LCAweDNkLCAweDEwLCAweGU0 LCAweGU5LCAweDdhLCAweGU4LCAweDRmLCAweDZkLCAweGEwLCAweDk1LAotKyAgICAweDM1LCAw eGQ1LCAweGI5LCAweGRmLCAweDI1LCAweDkxLCAweDgxLCAweGE3LCAweDliLCAweDYzLCAweGIw LCAweDY5LAotKyAgICAweGU5LCAweDQ5LCAweDk3LCAweDJiLCAweDAyLCAweGJhLCAweDM2LCAw eGIzLCAweDU4LCAweDZhLCAweGFiLCAweDdlLAotKyAgICAweDQ1LCAweGYzLCAweDIyLCAweGY4 LCAweDJlLCAweDRlLCAweDg1LCAweGNhLCAweDNhLCAweGI4LCAweDU1LCAweDkxLAotKyAgICAw eGIzLCAweGMyLCAweGE5LCAweDY2Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBkc2FfdGVzdF8yMDQ4X3B1Yl9rZXlbXSA9IHsKLSsgICAgMHgyNCwgMHg1MiwgMHhmMywgMHhj YywgMHhiZSwgMHg5ZSwgMHhkNSwgMHhjYSwgMHg3ZCwgMHhjNywgMHg0YywgMHg2MCwKLSsgICAg MHgyYiwgMHg5OSwgMHgyMiwgMHg2ZSwgMHg4ZiwgMHgyZiwgMHhhYiwgMHgzOCwgMHhlNywgMHhk NywgMHhkZCwgMHhmYiwKLSsgICAgMHg3NSwgMHg1MywgMHg5YiwgMHgxNywgMHgxNSwgMHg1ZSwg MHg5ZiwgMHhjZiwgMHhkMSwgMHhhYiwgMHhhNSwgMHg2NCwKLSsgICAgMHhlYiwgMHg4NSwgMHgz NSwgMHhkOCwgMHgxMiwgMHhjOSwgMHhjMiwgMHhkYywgMHhmOSwgMHg3MiwgMHg4NCwgMHg0NCwK LSsgICAgMHgxYiwgMHhjNCwgMHg4MiwgMHgyNCwgMHgzNiwgMHgyNCwgMHhjNywgMHhmNCwgMHg1 NywgMHg1OCwgMHgwYywgMHgxYywKLSsgICAgMHgzOCwgMHhhNSwgMHg3YywgMHg0NiwgMHhjNCwg MHg1NywgMHgzOSwgMHgyNCwgMHg3MCwgMHhlZCwgMHhiNSwgMHgyYywKLSsgICAgMHhiNSwgMHhh NiwgMHhlMCwgMHgzZiwgMHhlNiwgMHgyOCwgMHg3YiwgMHhiNiwgMHhmNCwgMHg5YSwgMHg0Miwg MHhhMiwKLSsgICAgMHgwNiwgMHg1YSwgMHgwNSwgMHg0ZiwgMHgwMywgMHgwOCwgMHgzOSwgMHhk ZiwgMHgxZiwgMHhkMywgMHgxNCwgMHg5YywKLSsgICAgMHg0YywgMHhhMCwgMHg1MywgMHgxZCwg MHhkOCwgMHhjYSwgMHg4YSwgMHhhYSwgMHg5YywgMHhjNywgMHgzMywgMHg3MSwKLSsgICAgMHg5 MywgMHgzOCwgMHg3MywgMHg0OCwgMHgzMywgMHg2MSwgMHgxOCwgMHgyMiwgMHg0NSwgMHg0NSwg MHhlOCwgMHg4YywKLSsgICAgMHg4MCwgMHhmZiwgMHhkOCwgMHg3NiwgMHg1ZCwgMHg3NCwgMHgz NiwgMHgwMywgMHgzMywgMHhjYywgMHhhYiwgMHg5OSwKLSsgICAgMHg3MiwgMHg3NywgMHg5Yiwg MHg2NSwgMHgyNSwgMHhhNiwgMHg1YiwgMHhkZCwgMHgwZCwgMHgxMCwgMHhjNiwgMHg3NSwKLSsg ICAgMHhjMSwgMHgwOSwgMHhiYiwgMHhkMywgMHhlNSwgMHhiZSwgMHg0ZCwgMHg3MiwgMHhlZiwg MHg2ZSwgMHhiYSwgMHg2ZSwKLSsgICAgMHg0MywgMHg4ZCwgMHg1MiwgMHgyNiwgMHgyMywgMHg3 ZCwgMHhiOCwgMHg4OCwgMHgzNywgMHg5YywgMHg1ZiwgMHhjYywKLSsgICAgMHg0NywgMHhhMywg MHg4NCwgMHg3ZiwgMHhmNiwgMHgzNywgMHgxMSwgMHhiYSwgMHhlZCwgMHg2ZCwgMHgwMywgMHhh ZiwKLSsgICAgMHhlOCwgMHgxZSwgMHg2OSwgMHg0YSwgMHg0MSwgMHgzYiwgMHg2OCwgMHgwYiwg MHhkMywgMHg4YSwgMHhiNCwgMHg5MCwKLSsgICAgMHgzZiwgMHg4MywgMHg3MCwgMHhhNywgMHgw NywgMHhlZiwgMHg1NSwgMHgxZCwgMHg0OSwgMHg0MSwgMHgwMiwgMHg2ZCwKLSsgICAgMHg5NSwg MHg3OSwgMHhkNiwgMHg5MSwgMHhkZSwgMHg4ZSwgMHhkYSwgMHhhMSwgMHg2MSwgMHgwNSwgMHhl YiwgMHg5ZCwKLSsgICAgMHhiYSwgMHgzYywgMHgyZiwgMHg0YywgMHgxYiwgMHhlYywgMHg1MCwg MHg4MiwgMHg3NSwgMHhhYSwgMHgwMiwgMHgwNywKLSsgICAgMHhlMiwgMHg1MSwgMHhiNSwgMHhl YywgMHhjYiwgMHgyOCwgMHg2YSwgMHg0YiwgMHgwMSwgMHhkNCwgMHg0OSwgMHhkMywKLSsgICAg MHgwYSwgMHhjYiwgMHg2NywgMHgzNywgMHgxNywgMHhhMCwgMHhkMiwgMHhmYiwgMHgzYiwgMHg1 MCwgMHhjOCwgMHg5MywKLSsgICAgMHhmNywgMHhkYSwgMHhiMSwgMHg0ZgotK307Ci0rCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wcml2X2tleVtdID0gewotKyAg ICAweDBjLCAweDRiLCAweDMwLCAweDg5LCAweGQxLCAweGI4LCAweDYyLCAweGNiLCAweDNjLCAw eDQzLCAweDY0LCAweDkxLAotKyAgICAweGYwLCAweDkxLCAweDU0LCAweDcwLCAweGM1LCAweDI3 LCAweDk2LCAweGUzLCAweGFjLCAweGJlLCAweGU4LCAweDAwLAotKyAgICAweGVjLCAweDU1LCAw eGY2LCAweGNjCi0rfTsKLSsKLStzdGF0aWMgaW50IGNvcnJ1cHRfZHNhOwotKwotK3ZvaWQgRklQ U19jb3JydXB0X2RzYSgpCi0rewotKyAgICBjb3JydXB0X2RzYSA9IDE7Ci0rfQotKwotK2ludCBG SVBTX3NlbGZ0ZXN0X2RzYSgpCi0rewotKyAgICBEU0EgKmRzYSA9IE5VTEw7Ci0rICAgIEVWUF9Q S0VZICpwayA9IE5VTEw7Ci0rICAgIGludCByZXQgPSAwOwotKwotKyAgICBkc2EgPSBEU0FfbmV3 KCk7Ci0rCi0rICAgIGlmIChkc2EgPT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAg ICBmaXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHAsIGRzYV90ZXN0XzIwNDgpOwotKyAgICBm aXBzX2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHEsIGRzYV90ZXN0XzIwNDgpOwotKyAgICBmaXBz X2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIGcsIGRzYV90ZXN0XzIwNDgpOwotKyAgICBmaXBzX2xv YWRfa2V5X2NvbXBvbmVudChkc2EsIHB1Yl9rZXksIGRzYV90ZXN0XzIwNDgpOwotKyAgICBmaXBz X2xvYWRfa2V5X2NvbXBvbmVudChkc2EsIHByaXZfa2V5LCBkc2FfdGVzdF8yMDQ4KTsKLSsKLSsg ICAgaWYgKGNvcnJ1cHRfZHNhKQotKyAgICAgICAgQk5fc2V0X2JpdChkc2EtPnB1Yl9rZXksIDIw NDcpOwotKwotKyAgICBpZiAoKHBrID0gRVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0rICAgICAg ICBnb3RvIGVycjsKLSsKLSsgICAgRVZQX1BLRVlfYXNzaWduX0RTQShwaywgZHNhKTsKLSsKLSsg ICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIE5VTEwsIDAsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIEVWUF9zaGEyNTYoKSwgMCwgIkRTQSBT SEEyNTYiKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICByZXQgPSAxOwotKwotKyBlcnI6Ci0r ICAgIGlmIChwaykKLSsgICAgICAgIEVWUF9QS0VZX2ZyZWUocGspOwotKyAgICBlbHNlIGlmIChk c2EpCi0rICAgICAgICBEU0FfZnJlZShkc2EpOwotKyAgICByZXR1cm4gcmV0OwotK30KLSsjZW5k aWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMuZmlwcyBv cGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMmMv Y3J5cHRvL2ZpcHMvZmlwc19lbmMuYy5maXBzCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDA5Mjg0MDA1 ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYwkyMDE1LTA2 LTE1IDE3OjMwOjAwLjAwOTI4NDAwNSArMDIwMAotQEAgLTAsMCArMSwxODkgQEAKLSsvKiBmaXBl L2V2cC9maXBzX2VuYy5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3Vu ZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVy aWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2Fz IHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICog VGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVz ZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRv LiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQg aW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVT LCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRp b24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhl IHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0g SHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMg RXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0 aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVz ZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgot KyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICog VGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBz dGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3Zp ZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQot KyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBi eQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdv cmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRo ZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRl ZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAo b3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5 IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1 ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs IFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VD SCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBm b3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9m IHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1w bHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNl bmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsj aW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKwotK2NvbnN0IEVWUF9DSVBIRVIgKkZJUFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBu aWQpCi0rewotKyAgICBzd2l0Y2ggKG5pZCkgewotKyAgICBjYXNlIE5JRF9hZXNfMTI4X2NiYzoK LSsgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9jYmMoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVz XzEyOF9jY206Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY2NtKCk7Ci0rCi0rICAgIGNh c2UgTklEX2Flc18xMjhfY2ZiMToKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9jZmIxKCk7 Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xMjhfY2ZiMTI4OgotKyAgICAgICAgcmV0dXJuIEVWUF9h ZXNfMTI4X2NmYjEyOCgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTI4X2NmYjg6Ci0rICAgICAg ICByZXR1cm4gRVZQX2Flc18xMjhfY2ZiOCgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTI4X2N0 cjoKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9jdHIoKTsKLSsKLSsgICAgY2FzZSBOSURf YWVzXzEyOF9lY2I6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfZWNiKCk7Ci0rCi0rICAg IGNhc2UgTklEX2Flc18xMjhfZ2NtOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2djbSgp OwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTI4X29mYjEyODoKLSsgICAgICAgIHJldHVybiBFVlBf YWVzXzEyOF9vZmIoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzEyOF94dHM6Ci0rICAgICAgICBy ZXR1cm4gRVZQX2Flc18xMjhfeHRzKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJfY2JjOgot KyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2NiYygpOwotKwotKyAgICBjYXNlIE5JRF9hZXNf MTkyX2NjbToKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jY20oKTsKLSsKLSsgICAgY2Fz ZSBOSURfYWVzXzE5Ml9jZmIxOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEoKTsK LSsKLSsgICAgY2FzZSBOSURfYWVzXzE5Ml9jZmIxMjg6Ci0rICAgICAgICByZXR1cm4gRVZQX2Fl c18xOTJfY2ZiMTI4KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJfY2ZiODoKLSsgICAgICAg IHJldHVybiBFVlBfYWVzXzE5Ml9jZmI4KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJfY3Ry OgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2N0cigpOwotKwotKyAgICBjYXNlIE5JRF9h ZXNfMTkyX2VjYjoKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9lY2IoKTsKLSsKLSsgICAg Y2FzZSBOSURfYWVzXzE5Ml9nY206Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfZ2NtKCk7 Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJfb2ZiMTI4OgotKyAgICAgICAgcmV0dXJuIEVWUF9h ZXNfMTkyX29mYigpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X2NiYzoKLSsgICAgICAgIHJl dHVybiBFVlBfYWVzXzI1Nl9jYmMoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzI1Nl9jY206Ci0r ICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY2NtKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18y NTZfY2ZiMToKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0rCi0rICAgIGNh c2UgTklEX2Flc18yNTZfY2ZiMTI4OgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjEy OCgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X2NmYjg6Ci0rICAgICAgICByZXR1cm4gRVZQ X2Flc18yNTZfY2ZiOCgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X2N0cjoKLSsgICAgICAg IHJldHVybiBFVlBfYWVzXzI1Nl9jdHIoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzI1Nl9lY2I6 Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfZWNiKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Fl c18yNTZfZ2NtOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2djbSgpOwotKwotKyAgICBj YXNlIE5JRF9hZXNfMjU2X29mYjEyODoKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9vZmIo KTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzI1Nl94dHM6Ci0rICAgICAgICByZXR1cm4gRVZQX2Fl c18yNTZfeHRzKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Rlc19lZGVfZWNiOgotKyAgICAgICAgcmV0 dXJuIEVWUF9kZXNfZWRlKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Rlc19lZGUzX2VjYjoKLSsgICAg ICAgIHJldHVybiBFVlBfZGVzX2VkZTMoKTsKLSsKLSsgICAgY2FzZSBOSURfZGVzX2VkZTNfY2Jj OgotKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlM19jYmMoKTsKLSsKLSsgICAgY2FzZSBOSURf ZGVzX2VkZTNfY2ZiMToKLSsgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTNfY2ZiMSgpOwotKwot KyAgICBjYXNlIE5JRF9kZXNfZWRlM19jZmI2NDoKLSsgICAgICAgIHJldHVybiBFVlBfZGVzX2Vk ZTNfY2ZiNjQoKTsKLSsKLSsgICAgY2FzZSBOSURfZGVzX2VkZTNfY2ZiODoKLSsgICAgICAgIHJl dHVybiBFVlBfZGVzX2VkZTNfY2ZiOCgpOwotKwotKyAgICBjYXNlIE5JRF9kZXNfZWRlM19vZmI2 NDoKLSsgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTNfb2ZiKCk7Ci0rCi0rICAgIGNhc2UgTklE X2Rlc19lZGVfY2JjOgotKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlX2NiYygpOwotKwotKyAg ICBjYXNlIE5JRF9kZXNfZWRlX2NmYjY0OgotKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlX2Nm YjY0KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Rlc19lZGVfb2ZiNjQ6Ci0rICAgICAgICByZXR1cm4g RVZQX2Rlc19lZGVfb2ZiKCk7Ci0rCi0rICAgIGRlZmF1bHQ6Ci0rICAgICAgICByZXR1cm4gTlVM TDsKLSsKLSsgICAgfQotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2Zp cHMuaC5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHMuaAotLS0tIG9wZW5zc2wt MS4wLjJjL2NyeXB0by9maXBzL2ZpcHMuaC5maXBzCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDA5Mjg0 MDA1ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwcy5oCTIwMTUtMDYt MTUgMTc6MzA6MDAuMDA5Mjg0MDA1ICswMjAwCi1AQCAtMCwwICsxLDI3OCBAQAotKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICog YXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsg KgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgot KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUgPHN0ZGFyZy5oPgotKwotKyNp Zm5kZWYgT1BFTlNTTF9GSVBTCi0rIyBlcnJvciBGSVBTIGlzIGRpc2FibGVkLgotKyNlbmRpZgot KwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjIGlmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVy biAiQyIgewotKyMgZW5kaWYKLSsKLSsgICAgc3RydWN0IGRzYV9zdDsKLSsgICAgc3RydWN0IHJz YV9zdDsKLSsgICAgc3RydWN0IGV2cF9wa2V5X3N0OwotKyAgICBzdHJ1Y3QgZW52X21kX3N0Owot KyAgICBzdHJ1Y3QgZW52X21kX2N0eF9zdDsKLSsgICAgc3RydWN0IGV2cF9jaXBoZXJfc3Q7Ci0r ICAgIHN0cnVjdCBldnBfY2lwaGVyX2N0eF9zdDsKLSsgICAgc3RydWN0IGRoX21ldGhvZDsKLSsg ICAgc3RydWN0IENNQUNfQ1RYX3N0OwotKyAgICBzdHJ1Y3QgaG1hY19jdHhfc3Q7Ci0rCi0rICAg IGludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNvbnN0IGNoYXIgKmF1dGgpOwot KyAgICBpbnQgRklQU19tb2R1bGVfbW9kZSh2b2lkKTsKLSsgICAgY29uc3Qgdm9pZCAqRklQU19y YW5kX2NoZWNrKHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVzdCh2b2lkKTsKLSsgICAgaW50 IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpOwotKyAgICB2b2lkIEZJUFNfY29ycnVwdF9zaGEx KHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVzdF9zaGExKHZvaWQpOwotKyAgICBpbnQgRklQ U19zZWxmdGVzdF9zaGEyKHZvaWQpOwotKyAgICB2b2lkIEZJUFNfY29ycnVwdF9hZXModm9pZCk7 Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0X2Flc19jY20odm9pZCk7Ci0rICAgIGludCBGSVBTX3Nl bGZ0ZXN0X2Flc19nY20odm9pZCk7Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0X2Flc194dHModm9p ZCk7Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0X2Flcyh2b2lkKTsKLSsgICAgdm9pZCBGSVBTX2Nv cnJ1cHRfZGVzKHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVzdF9kZXModm9pZCk7Ci0rICAg IHZvaWQgRklQU19jb3JydXB0X3JzYSh2b2lkKTsKLSsgICAgdm9pZCBGSVBTX2NvcnJ1cHRfcnNh X2tleWdlbih2b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRlc3RfcnNhKHZvaWQpOwotKyAgICB2 b2lkIEZJUFNfY29ycnVwdF9kc2Eodm9pZCk7Ci0rICAgIHZvaWQgRklQU19jb3JydXB0X2RzYV9r ZXlnZW4odm9pZCk7Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0X2RzYSh2b2lkKTsKLSsgICAgdm9p ZCBGSVBTX2NvcnJ1cHRfcm5nKHZvaWQpOwotKyAgICB2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQp OwotKyAgICB2b2lkIEZJUFNfeDkzMV9zdGljayhpbnQgb25vZmYpOwotKyAgICB2b2lkIEZJUFNf ZHJiZ19zdGljayhpbnQgb25vZmYpOwotKyAgICBpbnQgRklQU19zZWxmdGVzdF9ybmcodm9pZCk7 Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0X3g5MzEodm9pZCk7Ci0rICAgIGludCBGSVBTX3NlbGZ0 ZXN0X2htYWModm9pZCk7Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCk7Ci0rICAg IGludCBGSVBTX3NlbGZ0ZXN0X2RyYmdfYWxsKHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVz dF9jbWFjKHZvaWQpOwotKwotKyAgICB2b2lkIEZJUFNfZ2V0X3RpbWV2ZWModW5zaWduZWQgY2hh ciAqYnVmLCB1bnNpZ25lZCBsb25nICpwY3RyKTsKLSsKLSsjIGRlZmluZSBGSVBTX0VSUk9SX0lH Tk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotKyAgICAgICAgICAg ICAgICBhbGcgIiBwcmV2aW91cyBGSVBTIGZvcmJpZGRlbiBhbGdvcml0aG0gZXJyb3IgaWdub3Jl ZCIpOwotKwotKyAgICBpbnQgZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHN0cnVjdCBldnBfcGtl eV9zdCAqcGtleSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2F0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBrYXRsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqZGlnZXN0LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtZF9mbGFncywgY29uc3QgY2hhciAqZmFp bF9zdHIpOwotKwotKyAgICBpbnQgZmlwc19jaXBoZXJfdGVzdChzdHJ1Y3QgZXZwX2NpcGhlcl9j dHhfc3QgKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGV2cF9j aXBoZXJfc3QgKmNpcGhlciwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqa2V5LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICppdiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq cGxhaW50ZXh0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICpjaXBoZXJ0ZXh0LCBpbnQgbGVuKTsKLSsKLSsgICAgdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9m YWlsKHZvaWQpOwotKwotKyAgICBjb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpGSVBTX2dldF9kaWdl c3RieW5pZChpbnQgbmlkKTsKLSsKLSsgICAgY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKkZJ UFNfZ2V0X2NpcGhlcmJ5bmlkKGludCBuaWQpOwotKwotKy8qIEJFR0lOIEVSUk9SIENPREVTICov Ci0rLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIHNjcmlw dCBta2Vyci5wbC4gQW55IGNoYW5nZXMKLSsgKiBtYWRlIGFmdGVyIHRoaXMgcG9pbnQgbWF5IGJl IG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1bi4KLSsgKi8KLSsgICAgdm9p ZCBFUlJfbG9hZF9GSVBTX3N0cmluZ3Modm9pZCk7Ci0rCi0rLyogRXJyb3IgY29kZXMgZm9yIHRo ZSBGSVBTIGZ1bmN0aW9ucy4gKi8KLSsKLSsvKiBGdW5jdGlvbiBjb2Rlcy4gKi8KLSsjIGRlZmlu ZSBGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMgICAgICAgICAgICAgICAgICAgICAgMTAwCi0r IyBkZWZpbmUgRklQU19GX0RIX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDE0OAotKyMgZGVmaW5lIEZJUFNfRl9EUkJHX1JFU0VFRCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxNjIKLSsjIGRlZmluZSBGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4gICAgICAg ICAgICAgICAgICAgICAgMTAxCi0rIyBkZWZpbmUgRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VO MiAgICAgICAgICAgICAgICAgICAgIDEwNwotKyMgZGVmaW5lIEZJUFNfRl9EU0FfRE9fU0lHTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDIKLSsjIGRlZmluZSBGSVBTX0ZfRFNBX0RP X1ZFUklGWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAzCi0rIyBkZWZpbmUgRklQU19G X0VDREhfQ09NUFVURV9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgIDE2MwotKyMgZGVmaW5l IEZJUFNfRl9FQ0RTQV9ET19TSUdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjQKLSsj IGRlZmluZSBGSVBTX0ZfRUNEU0FfRE9fVkVSSUZZICAgICAgICAgICAgICAgICAgICAgICAgICAg MTY1Ci0rIyBkZWZpbmUgRklQU19GX0VDX0tFWV9HRU5FUkFURV9LRVkgICAgICAgICAgICAgICAg ICAgICAgIDE2NgotKyMgZGVmaW5lIEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWCAgICAgICAgICAg ICAgICAgICAgICAgICAxMjQKLSsjIGRlZmluZSBGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVggICAg ICAgICAgICAgICAgICAgICAgICAgMTI1Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNB ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNAotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NI RUNLX0RTQV9QUk5HICAgICAgICAgICAgICAgICAgICAgICAxNTEKLSsjIGRlZmluZSBGSVBTX0Zf RklQU19DSEVDS19FQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQyCi0rIyBkZWZpbmUg RklQU19GX0ZJUFNfQ0hFQ0tfRUNfUFJORyAgICAgICAgICAgICAgICAgICAgICAgIDE1MgotKyMg ZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVCAgICAgICAgICAgICAx MDUKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19DSEVDS19SU0EgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTA2Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBX1BSTkcgICAgICAgICAg ICAgICAgICAgICAgIDE1MAotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NJUEhFUiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxNjAKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19DSVBIRVJJTklU ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQzCi0rIyBkZWZpbmUgRklQU19GX0ZJUFNfQ0lQ SEVSX0NUWF9DVFJMICAgICAgICAgICAgICAgICAgICAgIDE2MQotKyMgZGVmaW5lIEZJUFNfRl9G SVBTX0RJR0VTVEZJTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAxNTgKLSsjIGRlZmluZSBG SVBTX0ZfRklQU19ESUdFU1RJTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI4Ci0rIyBk ZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgIDE1 OQotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQllURVMgICAgICAgICAgICAgICAgICAgICAg ICAgICAxMzEKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0NIRUNLICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTQ2Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19DUFJOR19URVNUICAg ICAgICAgICAgICAgICAgICAgIDEzMgotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfRVJST1Jf Q0hFQ0sgICAgICAgICAgICAgICAgICAgICAxMzYKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJH X0dFTkVSQVRFICAgICAgICAgICAgICAgICAgICAgICAgMTM0Ci0rIyBkZWZpbmUgRklQU19GX0ZJ UFNfRFJCR19JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNQotKyMgZGVmaW5lIEZJ UFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUgICAgICAgICAgICAgICAgICAgICAxMzgKLSsjIGRl ZmluZSBGSVBTX0ZfRklQU19EUkJHX05FVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM5 Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19SRVNFRUQgICAgICAgICAgICAgICAgICAgICAg ICAgIDE0MAotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCAgICAgICAgICAg ICAgICAgICAgICAxNDEKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19EU0FfQ0hFQ0sgICAgICAgICAg IC8qIHVudXNlZCAqLyAgICAgMTA3Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfRFNBX1NJR05fRElH RVNUICAgICAgICAgICAgICAgICAgICAgIDE1NAotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9W RVJJRllfRElHRVNUICAgICAgICAgICAgICAgICAgICAxNTUKLSsjIGRlZmluZSBGSVBTX0ZfRklQ U19HRVRfRU5UUk9QWSAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ3Ci0rIyBkZWZpbmUgRklQ U19GX0ZJUFNfTU9ERV9TRVQgICAgICAgICAgICAvKiB1bnVzZWQgKi8gICAgIDEwOAotKyMgZGVm aW5lIEZJUFNfRl9GSVBTX01PRFVMRV9NT0RFX1NFVCAgICAgICAgICAgICAgICAgICAgICAxMDgK LSsjIGRlZmluZSBGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNUICAgICAgICAgICAgICAg ICAgMTA5Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9BREQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEzNwotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfQllURVMgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMjIKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19SQU5EX1BTRVVET19C WVRFUyAgICAgICAgICAgICAgICAgICAgMTY3Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9T RUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2OAotKyMgZGVmaW5lIEZJUFNfRl9GSVBT X1JBTkRfU0VUX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAxMjYKLSsjIGRlZmluZSBGSVBT X0ZfRklQU19SQU5EX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgMTI3Ci0rIyBkZWZp bmUgRklQU19GX0ZJUFNfUlNBX1NJR05fRElHRVNUICAgICAgICAgICAgICAgICAgICAgIDE1Ngot KyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JTQV9WRVJJRllfRElHRVNUICAgICAgICAgICAgICAgICAg ICAxNTcKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMgICAgICAgICAgICAgICAg ICAgICAgICAgMTEwCi0rIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0NDTSAgICAg ICAgICAgICAgICAgICAgIDE0NQotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19H Q00gICAgICAgICAgICAgICAgICAgICAxMjkKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVT VF9BRVNfWFRTICAgICAgICAgICAgICAgICAgICAgMTQ0Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNf U0VMRlRFU1RfQ01BQyAgICAgICAgICAgICAgICAgICAgICAgIDEzMAotKyMgZGVmaW5lIEZJUFNf Rl9GSVBTX1NFTEZURVNUX0RFUyAgICAgICAgICAgICAgICAgICAgICAgICAxMTEKLSsjIGRlZmlu ZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9EU0EgICAgICAgICAgICAgICAgICAgICAgICAgMTEyCi0r IyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRUNEU0EgICAgICAgICAgICAgICAgICAgICAg IDEzMwotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMgICAgICAgICAgICAgICAg ICAgICAgICAxMTMKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcgICAgICAgIC8q IHVudXNlZCAqLyAgICAgMTE0Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSAg ICAgICAgICAgICAgICAgICAgICAgIDExNQotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNU X1g5MzEgICAgICAgICAgICAgICAgICAgICAgICAxMTQKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19T RVRfUFJOR19LRVkgICAgICAgICAgICAgICAgICAgICAgICAgMTUzCi0rIyBkZWZpbmUgRklQU19G X0hBU0hfRklOQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMwotKyMgZGVmaW5l IEZJUFNfRl9SU0FfQlVJTFRJTl9LRVlHRU4gICAgICAgICAgICAgICAgICAgICAgICAxMTYKLSsj IGRlZmluZSBGSVBTX0ZfUlNBX0VBWV9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MTQ5Ci0rIyBkZWZpbmUgRklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUICAgICAgICAgICAg ICAgICAgIDExNwotKyMgZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCAgICAg ICAgICAgICAgICAgICAxMTgKLSsjIGRlZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQ VCAgICAgICAgICAgICAgICAgICAgMTE5Ci0rIyBkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElD X0VOQ1JZUFQgICAgICAgICAgICAgICAgICAgIDEyMAotKyMgZGVmaW5lIEZJUFNfRl9SU0FfWDkz MV9HRU5FUkFURV9LRVlfRVggICAgICAgICAgICAgICAgICAxMjEKLSsjIGRlZmluZSBGSVBTX0Zf U1NMRUFZX1JBTkRfQllURVMgICAgICAgIC8qIHVudXNlZCAqLyAgICAgMTIyCi0rCi0rLyogUmVh c29uIGNvZGVzLiAqLwotKyMgZGVmaW5lIEZJUFNfUl9BRERJVElPTkFMX0lOUFVUX0VSUk9SX1VO REVURUNURUQgICAgICAgICAxNTAKLSsjIGRlZmluZSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9U T09fTE9ORyAgICAgICAgICAgICAgICAgMTI1Ci0rIyBkZWZpbmUgRklQU19SX0FMUkVBRFlfSU5T VEFOVElBVEVEICAgICAgICAgICAgICAgICAgICAgIDEzNAotKyMgZGVmaW5lIEZJUFNfUl9BVVRI RU5USUNBVElPTl9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAxNTEKLSsjIGRlZmluZSBGSVBT X1JfQ0FOTk9UX1JFQURfRVhFICAgICAgICAgIC8qIHVudXNlZCAqLyAgICAgMTAzCi0rIyBkZWZp bmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdFU1QgICAvKiB1bnVzZWQgKi8gICAgIDEwNAot KyMgZGVmaW5lIEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNFICAgICAgICAgICAgICAgICAg ICAxMTQKLSsjIGRlZmluZSBGSVBTX1JfRFJCR19OT1RfSU5JVElBTElTRUQgICAgICAgICAgICAg ICAgICAgICAgMTUyCi0rIyBkZWZpbmUgRklQU19SX0RSQkdfU1RVQ0sgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEwMwotKyMgZGVmaW5lIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVU RUNURUQgICAgICAgICAgICAgICAgICAxMDQKLSsjIGRlZmluZSBGSVBTX1JfRU5UUk9QWV9OT1Rf UkVRVUVTVEVEX0ZPUl9SRVNFRUQgICAgICAgICAgMTA1Ci0rIyBkZWZpbmUgRklQU19SX0VOVFJP UFlfU09VUkNFX1NUVUNLICAgICAgICAgICAgICAgICAgICAgIDE0MgotKyMgZGVmaW5lIEZJUFNf Ul9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRyAgICAgICAgICAgICAgICAgICAxMTUKLSsjIGRlZmlu ZSBGSVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHICAgICAgICAgICAgICAgICAgMTI3Ci0r IyBkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBVVCAgICAgICAg IDEyNAotKyMgZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkgICAgICAgICAg ICAgICAgICAxMjIKLSsjIGRlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19OT05DRSAgICAg ICAgICAgICAgICAgICAgMTQwCi0rIyBkZWZpbmUgRklQU19SX0VYRV9ESUdFU1RfRE9FU19OT1Rf TUFUQ0ggICAvKiB1bnVzZWQgKi8gIDEwNQotKyMgZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9E T0VTX05PVF9NQVRDSCAgICAgICAgICAgICAgICAxMTAKLSsjIGRlZmluZSBGSVBTX1JfRklOR0VS UFJJTlRfRE9FU19OT1RfTUFUQ0hfTk9OUElDX1JFTE9DQVRFRCAxMTEKLSsjIGRlZmluZSBGSVBT X1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyAxMTIKLSsjIGRl ZmluZSBGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUICAgICAgICAgICAgICAgICAgICAgMTAy Ci0rIyBkZWZpbmUgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEICAgICAgICAgICAgICAgICAg ICAgIDEwNgotKyMgZGVmaW5lIEZJUFNfUl9GVU5DVElPTl9FUlJPUiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxMTYKLSsjIGRlZmluZSBGSVBTX1JfR0VORVJBVEVfRVJST1IgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMTM3Ci0rIyBkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SX1VO REVURUNURUQgICAgICAgICAgICAgICAgIDExOAotKyMgZGVmaW5lIEZJUFNfUl9JTlNUQU5USUFU RV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAxMTkKLSsjIGRlZmluZSBGSVBTX1JfSU5T VUZGSUNJRU5UX1NFQ1VSSVRZX1NUUkVOR1RIICAgICAgICAgICAgMTIwCi0rIyBkZWZpbmUgRklQ U19SX0lOVEVSTkFMX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMQotKyMgZGVm aW5lIEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAxMDkK LSsjIGRlZmluZSBGSVBTX1JfSU5WQUxJRF9QQVJBTUVURVJTICAgICAgICAgICAgICAgICAgICAg ICAgMTQ0Ci0rIyBkZWZpbmUgRklQU19SX0lOX0VSUk9SX1NUQVRFICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEyMwotKyMgZGVmaW5lIEZJUFNfUl9LRVlfVE9PX1NIT1JUICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMDgKLSsjIGRlZmluZSBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRF Q1RFRCAgICAgICAgICAgICAgICAgICAgMTQ5Ci0rIyBkZWZpbmUgRklQU19SX05PTl9GSVBTX01F VEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMAotKyMgZGVmaW5lIEZJUFNfUl9OT1BS X1RFU1QxX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAxNDUKLSsjIGRlZmluZSBGSVBT X1JfTk9QUl9URVNUMl9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgMTQ2Ci0rIyBkZWZp bmUgRklQU19SX05PVF9JTlNUQU5USUFURUQgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNgot KyMgZGVmaW5lIEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAg ICAxMDcKLSsjIGRlZmluZSBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQg ICAgICAgICAgMTI4Ci0rIyBkZWZpbmUgRklQU19SX1BFUlNPTkFMSVNBVElPTl9TVFJJTkdfVE9P X0xPTkcgICAgICAgICAgIDEyOQotKyMgZGVmaW5lIEZJUFNfUl9QUk5HX1NUUkVOR1RIX1RPT19M T1cgICAgICAgICAgICAgICAgICAgICAxNDMKLSsjIGRlZmluZSBGSVBTX1JfUFJfVEVTVDFfRkFJ TFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgMTQ3Ci0rIyBkZWZpbmUgRklQU19SX1BSX1RF U1QyX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OAotKyMgZGVmaW5lIEZJUFNf Ul9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgICAxMzAKLSsjIGRlZmlu ZSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkcgICAgICAgICAgICAgICAgMTMxCi0r IyBkZWZpbmUgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SICAgICAgICAgICAgICAgICAgICAg IDEzMgotKyMgZGVmaW5lIEZJUFNfUl9SRVNFRURfRVJST1IgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxMzMKLSsjIGRlZmluZSBGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1IgICAgICAgIC8q IHVudXNlZCAqLyAgICAgMTE1Ci0rIyBkZWZpbmUgRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SICAg ICAgICAvKiB1bnVzZWQgKi8gICAgIDExNgotKyMgZGVmaW5lIEZJUFNfUl9TRUxGVEVTVF9GQUlM RUQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDEKLSsjIGRlZmluZSBGSVBTX1JfU0VMRlRF U1RfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgMTM1Ci0rIyBkZWZpbmUgRklQU19S X1NUUkVOR1RIX0VSUk9SX1VOREVURUNURUQgICAgICAgICAgICAgICAgIDEzNgotKyMgZGVmaW5l IEZJUFNfUl9URVNUX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTcKLSsj IGRlZmluZSBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAg MTQxCi0rIyBkZWZpbmUgRklQU19SX1VOSU5TVEFOVElBVEVfWkVST0lTRV9FUlJPUiAgICAgICAg ICAgICAgIDEzOAotKyMgZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9EUkJHX1RZUEUgICAgICAg ICAgICAgICAgICAgICAxMzkKLSsjIGRlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0g ICAgICAgICAgICAgICAgICAgICAgMTEzCi0rCi0rIyBpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0r IyBlbmRpZgotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlw c19obWFjX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX2ht YWNfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfaG1hY19z ZWxmdGVzdC5jLmZpcHMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDkyODQwMDUgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYwkyMDE1LTA2LTE1 IDE3OjMwOjAwLjAwOTI4NDAwNSArMDIwMAotQEAgLTAsMCArMSwxMzQgQEAKLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFy ZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoK LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1j b3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKwotKyNpZmRlZiBPUEVO U1NMX0ZJUFMKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rICAgIGNvbnN0IEVWUF9NRCAqKCphbGcpICh2 b2lkKTsKLSsgICAgY29uc3QgY2hhciAqa2V5LCAqaXY7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2 YWxbRVZQX01BWF9NRF9TSVpFXTsKLSt9IEhNQUNfS0FUOwotKwotK3N0YXRpYyBjb25zdCBITUFD X0tBVCB2ZWN0b3JbXSA9IHsKLSsgICAge0VWUF9zaGExLAotKyAgICAgLyogZnJvbSBodHRwOi8v Y3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTk4L2ZpcHMtMTk4YS5wZGYgKi8K LSsgICAgICIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rICAgICAiU2FtcGxlICMyIiwKLSsgICAg IHsweDA5LCAweDIyLCAweGQzLCAweDQwLCAweDVmLCAweGFhLCAweDNkLCAweDE5LAotKyAgICAg IDB4NGYsIDB4ODIsIDB4YTQsIDB4NTgsIDB4MzAsIDB4NzMsIDB4N2QsIDB4NWMsCi0rICAgICAg MHhjNiwgMHhjNywgMHg1ZCwgMHgyNH0KLSsgICAgIH0sCi0rICAgIHtFVlBfc2hhMjI0LAotKyAg ICAgLyoganVzdCBrZWVwIGV4dGVuZGluZyB0aGUgYWJvdmUuLi4gKi8KLSsgICAgICIwMTIzNDU2 Nzg5Ojs8PT4/QEFCQyIsCi0rICAgICAiU2FtcGxlICMyIiwKLSsgICAgIHsweGRkLCAweGVmLCAw eDBhLCAweDQwLCAweGNiLCAweDdkLCAweDUwLCAweGZiLAotKyAgICAgIDB4NmUsIDB4ZTYsIDB4 Y2UsIDB4YTEsIDB4MjAsIDB4YmEsIDB4MjYsIDB4YWEsCi0rICAgICAgMHgwOCwgMHhmMywgMHgw NywgMHg3NSwgMHg4NywgMHhiOCwgMHhhZCwgMHgxYiwKLSsgICAgICAweDhjLCAweDhkLCAweDEy LCAweGM3fQotKyAgICAgfSwKLSsgICAge0VWUF9zaGEyNTYsCi0rICAgICAiMDEyMzQ1Njc4OTo7 PD0+P0BBQkMiLAotKyAgICAgIlNhbXBsZSAjMiIsCi0rICAgICB7MHhiOCwgMHhmMiwgMHgwZCwg MHhiNSwgMHg0MSwgMHhlYSwgMHg0MywgMHgwOSwKLSsgICAgICAweGNhLCAweDRlLCAweGE5LCAw eDM4LCAweDBjLCAweGQwLCAweGU4LCAweDM0LAotKyAgICAgIDB4ZjcsIDB4MWYsIDB4YmUsIDB4 OTEsIDB4NzQsIDB4YTIsIDB4NjEsIDB4MzgsCi0rICAgICAgMHgwZCwgMHhjMSwgMHg3ZSwgMHhh ZSwgMHg2YSwgMHgzNCwgMHg1MSwgMHhkOX0KLSsgICAgIH0sCi0rICAgIHtFVlBfc2hhMzg0LAot KyAgICAgIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsgICAgICJTYW1wbGUgIzIiLAotKyAgICAg ezB4MDgsIDB4YmMsIDB4YjAsIDB4ZGEsIDB4NDksIDB4MWUsIDB4ODcsIDB4YWQsCi0rICAgICAg MHg5YSwgMHgxZCwgMHg2YSwgMHhjZSwgMHgyMywgMHhjNSwgMHgwYiwgMHhmNiwKLSsgICAgICAw eGI3LCAweDE4LCAweDA2LCAweGE1LCAweDc3LCAweGNkLCAweDQ5LCAweDA0LAotKyAgICAgIDB4 ODksIDB4ZjEsIDB4ZTYsIDB4MjMsIDB4NDQsIDB4NTEsIDB4NTEsIDB4OWYsCi0rICAgICAgMHg4 NSwgMHg1NiwgMHg4MCwgMHg3OSwgMHgwYywgMHhiZCwgMHg0ZCwgMHg1MCwKLSsgICAgICAweGE0 LCAweDVmLCAweDI5LCAweGUzLCAweDkzLCAweGYwLCAweGU4LCAweDdmfQotKyAgICAgfSwKLSsg ICAge0VWUF9zaGE1MTIsCi0rICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKyAgICAgIlNh bXBsZSAjMiIsCi0rICAgICB7MHg4MCwgMHg5ZCwgMHg0NCwgMHgwNSwgMHg3YywgMHg1YiwgMHg5 NSwgMHg0MSwKLSsgICAgICAweDA1LCAweGJkLCAweDA0LCAweDEzLCAweDE2LCAweGRiLCAweDBm LCAweGFjLAotKyAgICAgIDB4NDQsIDB4ZDUsIDB4YTQsIDB4ZDUsIDB4ZDAsIDB4ODksIDB4MmIs IDB4ZDAsCi0rICAgICAgMHg0ZSwgMHg4NiwgMHg2NCwgMHgxMiwgMHhjMCwgMHg5MCwgMHg3Nywg MHg2OCwKLSsgICAgICAweGYxLCAweDg3LCAweGI3LCAweDdjLCAweDRmLCAweGFlLCAweDJjLCAw eDJmLAotKyAgICAgIDB4MjEsIDB4YTUsIDB4YjUsIDB4NjUsIDB4OWEsIDB4NGYsIDB4NGIsIDB4 YTcsCi0rICAgICAgMHg0NywgMHgwMiwgMHhhMywgMHhkZSwgMHg5YiwgMHg1MSwgMHhmMSwgMHg0 NSwKLSsgICAgICAweGJkLCAweDRmLCAweDI1LCAweDI3LCAweDQyLCAweDk4LCAweDk5LCAweDA1 fQotKyAgICAgfSwKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWMoKQotK3sKLSsgICAg aW50IG47Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rICAgIHVuc2lnbmVkIGNoYXIgb3V0 W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIGNvbnN0IEVWUF9NRCAqbWQ7Ci0rICAgIGNvbnN0IEhN QUNfS0FUICp0OwotKwotKyAgICBmb3IgKG4gPSAwLCB0ID0gdmVjdG9yOyBuIDwgc2l6ZW9mKHZl Y3RvcikgLyBzaXplb2YodmVjdG9yWzBdKTsgbisrLCB0KyspIHsKLSsgICAgICAgIG1kID0gKCp0 LT5hbGcpICgpOwotKyAgICAgICAgSE1BQyhtZCwgdC0+a2V5LCBzdHJsZW4odC0+a2V5KSwKLSsg ICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKil0LT5pdiwgc3RybGVuKHQtPml2KSwg b3V0LCAmb3V0bGVuKTsKLSsKLSsgICAgICAgIGlmIChtZW1jbXAob3V0LCB0LT5rYXZhbCwgb3V0 bGVuKSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQywg RklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAg ICB9Ci0rICAgIH0KLSsgICAgcmV0dXJuIDE7Ci0rfQotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlw dG8vZmlwcy9maXBzX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNf bG9jbC5oLmZpcHMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDkyODQwMDUgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaAkyMDE1LTA2LTE1IDE3OjMwOjAwLjAw OTI4NDAwNSArMDIwMAotQEAgLTAsMCArMSw3MSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29w eXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAq LwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsjIGlmZGVmICBfX2NwbHVzcGx1cwotK2V4 dGVybiAiQyIgewotKyMgZW5kaWYKLSsKLSsjIGRlZmluZSBGSVBTX01BWF9DSVBIRVJfVEVTVF9T SVpFICAgICAgIDMyCi0rIyBkZWZpbmUgZmlwc19sb2FkX2tleV9jb21wb25lbnQoa2V5LCBjb21w LCBwcmUpIFwKLSsgICAgICAgIGtleS0+Y29tcCA9IEJOX2JpbjJibihwcmUjI18jI2NvbXAsIHNp emVvZihwcmUjI18jI2NvbXApLCBrZXktPmNvbXApOyBcCi0rICAgICAgICBpZiAoIWtleS0+Y29t cCkgXAotKyAgICAgICAgICAgICAgICBnb3RvIGVycgotKwotKyMgZGVmaW5lIGZpcHNfcG9zdF9z dGFydGVkKGlkLCBzdWJpZCwgZXgpIDEKLSsjIGRlZmluZSBmaXBzX3Bvc3Rfc3VjY2VzcyhpZCwg c3ViaWQsIGV4KSAxCi0rIyBkZWZpbmUgZmlwc19wb3N0X2ZhaWxlZChpZCwgc3ViaWQsIGV4KSAx Ci0rIyBkZWZpbmUgZmlwc19wb3N0X2NvcnJ1cHQoaWQsIHN1YmlkLCBleCkgMQotKyMgZGVmaW5l IGZpcHNfcG9zdF9zdGF0dXMoKSAxCi0rCi0rIyBpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rIyBl bmRpZgotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19t ZC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19tZC5jCi0tLS0gb3BlbnNz bC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19tZC5jLmZpcHMJMjAxNS0wNi0xNSAxNzozMDowMC4w MDkyODQwMDUgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX21kLmMJ MjAxNS0wNi0xNSAxNzozMDowMC4wMDkyODQwMDUgKzAyMDAKLUBAIC0wLDAgKzEsMTQ0IEBACi0r LyogZmlwcy9ldnAvZmlwc19tZC5jICovCi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJp YyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg KgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAq IGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRp b24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICog Ci0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJj aWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVh cmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUg Zm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFz aCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3Vt ZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQg YnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBp cyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJl bWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4K LSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdl IGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1 dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQu Ci0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJv Z3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwp IHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0 d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3Jp dHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAg VGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBm cm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMg cmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMg Y29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGly ZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdl bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkg VGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1Mg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF Ci0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0r ICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0 ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0 aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5v dCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlv biBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8K LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK LSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRp c3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK LSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAq Ci0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK LSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICogVGhpcyBwcm9k dWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5n Ci0rICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IFRpbQotKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqCi0r ICovCi0rCi0rLyogTWluaW1hbCBzdGFuZGFsb25lIEZJUFMgdmVyc2lvbnMgb2YgRGlnZXN0IG9w ZXJhdGlvbnMgKi8KLSsKLSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwotKyNpbmNsdWRlIDxz dGRpby5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3Rz Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK2NvbnN0IEVWUF9NRCAqRklQU19nZXRf ZGlnZXN0YnluaWQoaW50IG5pZCkKLSt7Ci0rICAgIHN3aXRjaCAobmlkKSB7Ci0rICAgIGNhc2Ug TklEX3NoYTE6Ci0rICAgICAgICByZXR1cm4gRVZQX3NoYTEoKTsKLSsKLSsgICAgY2FzZSBOSURf c2hhMjI0OgotKyAgICAgICAgcmV0dXJuIEVWUF9zaGEyMjQoKTsKLSsKLSsgICAgY2FzZSBOSURf c2hhMjU2OgotKyAgICAgICAgcmV0dXJuIEVWUF9zaGEyNTYoKTsKLSsKLSsgICAgY2FzZSBOSURf c2hhMzg0OgotKyAgICAgICAgcmV0dXJuIEVWUF9zaGEzODQoKTsKLSsKLSsgICAgY2FzZSBOSURf c2hhNTEyOgotKyAgICAgICAgcmV0dXJuIEVWUF9zaGE1MTIoKTsKLSsKLSsgICAgZGVmYXVsdDoK LSsgICAgICAgIHJldHVybiBOVUxMOwotKyAgICB9Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmMvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlw cy9maXBzX3Bvc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5j LmZpcHMJMjAxNS0wNi0xNSAxNzozMDowMC4wMDkyODQwMDUgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4yYy9jcnlwdG8vZmlwcy9maXBzX3Bvc3QuYwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAwOTI4NDAw NSArMDIwMAotQEAgLTAsMCArMSwyMDEgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdo dCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg KgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgot KyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRn bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsK LSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3Jh bmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8u aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNs dWRlIDxsaW1pdHMuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyogUG93ZXIgb24g c2VsZiB0ZXN0IChQT1NUKSBzdXBwb3J0IGZ1bmN0aW9ucyAqLwotKwotKyMgaW5jbHVkZSA8b3Bl bnNzbC9maXBzLmg+Ci0rIyBpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsvKiBSdW4gYWxsIHNl bGZ0ZXN0cyAqLwotK2ludCBGSVBTX3NlbGZ0ZXN0KHZvaWQpCi0rewotKyAgICBpbnQgcnYgPSAx OwotKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfZHJiZygpKQotKyAgICAgICAgcnYgPSAwOwotKyAg ICBpZiAoIUZJUFNfc2VsZnRlc3RfeDkzMSgpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAo IUZJUFNfc2VsZnRlc3Rfc2hhMSgpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAoIUZJUFNf c2VsZnRlc3Rfc2hhMigpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAoIUZJUFNfc2VsZnRl c3RfaG1hYygpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfY21h YygpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfYWVzKCkpCi0r ICAgICAgICBydiA9IDA7Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF9hZXNfY2NtKCkpCi0rICAg ICAgICBydiA9IDA7Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF9hZXNfZ2NtKCkpCi0rICAgICAg ICBydiA9IDA7Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF9hZXNfeHRzKCkpCi0rICAgICAgICBy diA9IDA7Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF9kZXMoKSkKLSsgICAgICAgIHJ2ID0gMDsK LSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X3JzYSgpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBp ZiAoIUZJUFNfc2VsZnRlc3RfZHNhKCkpCi0rICAgICAgICBydiA9IDA7Ci0rICAgIHJldHVybiBy djsKLSt9Ci0rCi0rLyogR2VuZXJhbGl6ZWQgcHVibGljIGtleSB0ZXN0IHJvdXRpbmUuIFNpZ25z IGFuZCB2ZXJpZmllcyB0aGUgZGF0YQotKyAqIHN1cHBsaWVkIGluIHRicyB1c2luZyBtZXNhZ2Ug ZGlnZXN0IG1kIGFuZCBzZXR0aW5nIG9wdGlvbiBkaWdlc3QKLSsgKiBmbGFncyBtZF9mbGFncy4g SWYgdGhlICdrYXQnIHBhcmFtZXRlciBpcyBub3QgTlVMTCBpdCB3aWxsCi0rICogYWRkaXRpb25h bGx5IGNoZWNrIHRoZSBzaWduYXR1cmUgbWF0Y2hlcyBpdDogYSBrbm93biBhbnN3ZXIgdGVzdAot KyAqIFRoZSBzdHJpbmcgImZhaWxfc3RyIiBpcyB1c2VkIGZvciBpZGVudGlmaWNhdGlvbiBwdXJw b3NlcyBpbiBjYXNlCi0rICogb2YgZmFpbHVyZS4gSWYgInBrZXkiIGlzIE5VTEwganVzdCBwZXJm b3JtIGEgbWVzc2FnZSBkaWdlc3QgY2hlY2suCi0rICovCi0rCi0raW50IGZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChFVlBfUEtFWSAqcGtleSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxl biwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAqZGlnZXN0LCB1 bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpmYWlsX3N0cikKLSt7Ci0rICAgIGludCByZXQgPSAwOwotKyAgICB1bnNpZ25lZCBj aGFyIHNpZ3RtcFsyNTZdLCAqc2lnID0gc2lndG1wOwotKyAgICB1bnNpZ25lZCBpbnQgc2lnbGVu OwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0r Ci0rICAgIGlmIChkaWdlc3QgPT0gTlVMTCkKLSsgICAgICAgIGRpZ2VzdCA9IEVWUF9zaGEyNTYo KTsKLSsKLSsgICAgaWYgKChwa2V5LT50eXBlID09IEVWUF9QS0VZX1JTQSkKLSsgICAgICAgICYm IChSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkgPiBzaXplb2Yoc2lndG1wKSkpIHsKLSsgICAgICAg IHNpZyA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSk7Ci0rICAgICAg ICBpZiAoIXNpZykgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdO QVRVUkVfVEVTVCwgRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotKyAgICAgICAgICAgIHJldHVybiAw OwotKyAgICAgICAgfQotKyAgICB9Ci0rCi0rICAgIGlmICh0YnNsZW4gPT0gLTEpCi0rICAgICAg ICB0YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMpOwotKwotKyAgICBpZiAobWRfZmxhZ3MpCi0r ICAgICAgICBFVlBfTURfQ1RYX3NldF9mbGFncygmbWN0eCwgbWRfZmxhZ3MpOwotKwotKyAgICBp ZiAoIUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKLSsgICAgICAgIGdvdG8g ZXJyb3I7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKLSsg ICAgICAgIGdvdG8gZXJyb3I7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2lnLCAm c2lnbGVuLCBwa2V5KSkKLSsgICAgICAgIGdvdG8gZXJyb3I7Ci0rCi0rICAgIGlmIChrYXQgJiYg KChzaWdsZW4gIT0ga2F0bGVuKSB8fCBtZW1jbXAoa2F0LCBzaWcsIGthdGxlbikpKQotKyAgICAg ICAgZ290byBlcnJvcjsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgZGln ZXN0LCBOVUxMKSkKLSsgICAgICAgIGdvdG8gZXJyb3I7Ci0rICAgIGlmICghRVZQX1ZlcmlmeVVw ZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQotKyAgICAgICAgZ290byBlcnJvcjsKLSsgICAgcmV0 ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWcsIHNpZ2xlbiwgcGtleSk7Ci0rCi0rIGVycm9y OgotKyAgICBpZiAoc2lnICE9IHNpZ3RtcCkKLSsgICAgICAgIE9QRU5TU0xfZnJlZShzaWcpOwot KyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKyAgICBpZiAocmV0ICE9IDEpIHsKLSsg ICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCwgRklQU19SX1RF U1RfRkFJTFVSRSk7Ci0rICAgICAgICBpZiAoZmFpbF9zdHIpCi0rICAgICAgICAgICAgRVJSX2Fk ZF9lcnJvcl9kYXRhKDIsICJUeXBlPSIsIGZhaWxfc3RyKTsKLSsgICAgICAgIHJldHVybiAwOwot KyAgICB9Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsvKiBHZW5lcmFsaXplZCBzeW1tZXRyaWMg Y2lwaGVyIHRlc3Qgcm91dGluZS4gRW5jcnlwdCBkYXRhLCB2ZXJpZnkgcmVzdWx0Ci0rICogYWdh aW5zdCBrbm93biBhbnN3ZXIsIGRlY3J5cHQgYW5kIGNvbXBhcmUgd2l0aCBvcmlnaW5hbCBwbGFp bnRleHQuCi0rICovCi0rCi0raW50IGZpcHNfY2lwaGVyX3Rlc3QoRVZQX0NJUEhFUl9DVFggKmN0 eCwgY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLAotKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmtleSwKLSsgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICppdiwKLSsgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpw bGFpbnRleHQsCi0rICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2lw aGVydGV4dCwgaW50IGxlbikKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGx0bXBbRklQU19NQVhf Q0lQSEVSX1RFU1RfU0laRV07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2l0bXBbRklQU19NQVhfQ0lQ SEVSX1RFU1RfU0laRV07Ci0rCi0rICAgIE9QRU5TU0xfYXNzZXJ0KGxlbiA8PSBGSVBTX01BWF9D SVBIRVJfVEVTVF9TSVpFKTsKLSsgICAgbWVtc2V0KHBsdG1wLCAwLCBGSVBTX01BWF9DSVBIRVJf VEVTVF9TSVpFKTsKLSsgICAgbWVtc2V0KGNpdG1wLCAwLCBGSVBTX01BWF9DSVBIRVJfVEVTVF9T SVpFKTsKLSsKLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBr ZXksIGl2LCAxKSA8PSAwKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChFVlBfQ2lwaGVy KGN0eCwgY2l0bXAsIHBsYWludGV4dCwgbGVuKSA8PSAwKQotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIGlmIChtZW1jbXAoY2l0bXAsIGNpcGhlcnRleHQsIGxlbikpCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBrZXksIGl2 LCAwKSA8PSAwKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKGN0eCwg cGx0bXAsIGNpdG1wLCBsZW4pIDw9IDApCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKG1l bWNtcChwbHRtcCwgcGxhaW50ZXh0LCBsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJl dHVybiAxOwotK30KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBz L2ZpcHNfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMK LS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzCTIwMTUtMDYt MTUgMTc6MzA6MDAuMDEwMjg0MDI4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2Zp cHMvZmlwc19yYW5kLmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTAyODQwMjggKzAyMDAKLUBAIC0w LDAgKzEsNDI4IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0r ICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAot KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rLyoKLSsgKiBUaGlz IGlzIGEgRklQUyBhcHByb3ZlZCBBRVMgUFJORyBiYXNlZCBvbiBBTlNJIFg5LjMxIEEuMi40Lgot KyAqLwotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlICJlX29zLmgiCi0r Ci0rLyogSWYgd2UgZG9uJ3QgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQsIHN0cnVjdCB0 aW1ldmFsIHdvbid0Ci0rICAgYmUgZGVmaW5lZCBhbmQgZ2V0dGltZW9mZGF5KCkgd29uJ3QgYmUg ZGVjbGFyZWQgd2l0aCBzdHJpY3QgY29tcGlsZXJzCi0rICAgbGlrZSBERUMgQyBpbiBBTlNJIEMg bW9kZS4gICovCi0rI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECi0rIyBkZWZpbmUgX1hP UEVOX1NPVVJDRV9FWFRFTkRFRCAxCi0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmFu ZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpZiAhKGRlZmluZWQoT1BFTlNT TF9TWVNfV0lOMzIpIHx8IGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykpCi0rIyBpbmNsdWRl IDxzeXMvdGltZS5oPgotKyNlbmRpZgotKyNpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1Mp Ci0rIyBpbmNsdWRlIDx0aW1lLmg+Ci0rI2VuZGlmCi0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNp Zm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsjIGlmZGVmIE9QRU5TU0xfVU5JU1RECi0rIyAgaW5j bHVkZSBPUEVOU1NMX1VOSVNURAotKyMgZWxzZQotKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPgotKyMg ZW5kaWYKLSsjZW5kaWYKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rCi0rdm9pZCAqT1BFTlNTTF9zdGRlcnIodm9pZCk7Ci0rCi0rIyBkZWZpbmUgQUVTX0JMT0NL X0xFTkdUSCAgICAgICAgMTYKLSsKLSsvKiBBRVMgRklQUyBQUk5HIGltcGxlbWVudGF0aW9uICov Ci0rCi0rdHlwZWRlZiBzdHJ1Y3QgewotKyAgICBpbnQgc2VlZGVkOwotKyAgICBpbnQga2V5ZWQ7 Ci0rICAgIGludCB0ZXN0X21vZGU7Ci0rICAgIGludCBzZWNvbmQ7Ci0rICAgIGludCBlcnJvcjsK LSsgICAgdW5zaWduZWQgbG9uZyBjb3VudGVyOwotKyAgICBBRVNfS0VZIGtzOwotKyAgICBpbnQg dnBvczsKLSsgICAgLyogVGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGtleSBpZiBpdCBlcXVhbHMgc2Vl ZCBsZW5ndGggKi8KLSsgICAgdW5zaWduZWQgY2hhciB0bXBfa2V5W0FFU19CTE9DS19MRU5HVEhd OwotKyAgICB1bnNpZ25lZCBjaGFyIFZbQUVTX0JMT0NLX0xFTkdUSF07Ci0rICAgIHVuc2lnbmVk IGNoYXIgRFRbQUVTX0JMT0NLX0xFTkdUSF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgbGFzdFtBRVNf QkxPQ0tfTEVOR1RIXTsKLSt9IEZJUFNfUFJOR19DVFg7Ci0rCi0rc3RhdGljIEZJUFNfUFJOR19D VFggc2N0eDsKLSsKLStzdGF0aWMgaW50IGZpcHNfcHJuZ19mYWlsID0gMDsKLSsKLSt2b2lkIEZJ UFNfeDkzMV9zdGljayhpbnQgb25vZmYpCi0rewotKyAgICBmaXBzX3BybmdfZmFpbCA9IG9ub2Zm OwotK30KLSsKLSt2b2lkIEZJUFNfcm5nX3N0aWNrKHZvaWQpCi0rewotKyAgICBGSVBTX3g5MzFf c3RpY2soMSk7Ci0rfQotKwotK3N0YXRpYyB2b2lkIGZpcHNfcmFuZF9wcm5nX3Jlc2V0KEZJUFNf UFJOR19DVFggKiBjdHgpCi0rewotKyAgICBjdHgtPnNlZWRlZCA9IDA7Ci0rICAgIGN0eC0+a2V5 ZWQgPSAwOwotKyAgICBjdHgtPnRlc3RfbW9kZSA9IDA7Ci0rICAgIGN0eC0+Y291bnRlciA9IDA7 Ci0rICAgIGN0eC0+c2Vjb25kID0gMDsKLSsgICAgY3R4LT5lcnJvciA9IDA7Ci0rICAgIGN0eC0+ dnBvcyA9IDA7Ci0rICAgIE9QRU5TU0xfY2xlYW5zZShjdHgtPlYsIEFFU19CTE9DS19MRU5HVEgp OwotKyAgICBPUEVOU1NMX2NsZWFuc2UoJmN0eC0+a3MsIHNpemVvZihBRVNfS0VZKSk7Ci0rfQot KwotK3N0YXRpYyBpbnQgZmlwc19zZXRfcHJuZ19rZXkoRklQU19QUk5HX0NUWCAqIGN0eCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5z aWduZWQgaW50IGtleWxlbikKLSt7Ci0rICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7 Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFVF9QUk5HX0tFWSwgRklQU19SX1NFTEZU RVNUX0ZBSUxFRCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBpZiAoa2V5bGVu ICE9IDE2ICYmIGtleWxlbiAhPSAyNCAmJiBrZXlsZW4gIT0gMzIpIHsKLSsgICAgICAgIC8qIGVy cm9yOiBpbnZhbGlkIGtleSBzaXplICovCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAg ICBBRVNfc2V0X2VuY3J5cHRfa2V5KGtleSwga2V5bGVuIDw8IDMsICZjdHgtPmtzKTsKLSsgICAg aWYgKGtleWxlbiA9PSAxNikgewotKyAgICAgICAgbWVtY3B5KGN0eC0+dG1wX2tleSwga2V5LCAx Nik7Ci0rICAgICAgICBjdHgtPmtleWVkID0gMjsKLSsgICAgfSBlbHNlCi0rICAgICAgICBjdHgt PmtleWVkID0gMTsKLSsgICAgY3R4LT5zZWVkZWQgPSAwOwotKyAgICBjdHgtPnNlY29uZCA9IDA7 Ci0rICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfc2VlZChG SVBTX1BSTkdfQ1RYICogY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnNlZWQsIHVuc2lnbmVkIGludCBzZWVkbGVuKQotK3sKLSsgICAgdW5z aWduZWQgaW50IGk7Ci0rICAgIGlmICghY3R4LT5rZXllZCkKLSsgICAgICAgIHJldHVybiAwOwot KyAgICAvKiBJbiB0ZXN0IG1vZGUgc2VlZCBpcyBqdXN0IHN1cHBsaWVkIGRhdGEgKi8KLSsgICAg aWYgKGN0eC0+dGVzdF9tb2RlKSB7Ci0rICAgICAgICBpZiAoc2VlZGxlbiAhPSBBRVNfQkxPQ0tf TEVOR1RIKQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgbWVtY3B5KGN0eC0+Viwg c2VlZCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rICAgICAgICBjdHgtPnNlZWRlZCA9IDE7Ci0rICAg ICAgICByZXR1cm4gMTsKLSsgICAgfQotKyAgICAvKiBPdXRzaWRlIHRlc3QgbW9kZSBYT1Igc3Vw cGxpZWQgZGF0YSB3aXRoIGV4aXN0aW5nIHNlZWQgKi8KLSsgICAgZm9yIChpID0gMDsgaSA8IHNl ZWRsZW47IGkrKykgewotKyAgICAgICAgY3R4LT5WW2N0eC0+dnBvcysrXSBePSBzZWVkW2ldOwot KyAgICAgICAgaWYgKGN0eC0+dnBvcyA9PSBBRVNfQkxPQ0tfTEVOR1RIKSB7Ci0rICAgICAgICAg ICAgY3R4LT52cG9zID0gMDsKLSsgICAgICAgICAgICAvKiBTcGVjaWFsIGNhc2UgaWYgZmlyc3Qg c2VlZCBhbmQga2V5IGxlbmd0aCBlcXVhbHMKLSsgICAgICAgICAgICAgKiBibG9jayBzaXplIGNo ZWNrIGtleSBhbmQgc2VlZCBkbyBub3QgbWF0Y2guCi0rICAgICAgICAgICAgICovCi0rICAgICAg ICAgICAgaWYgKGN0eC0+a2V5ZWQgPT0gMikgewotKyAgICAgICAgICAgICAgICBpZiAoIW1lbWNt cChjdHgtPnRtcF9rZXksIGN0eC0+ViwgMTYpKSB7Ci0rICAgICAgICAgICAgICAgICAgICBSQU5E ZXJyKFJBTkRfRl9GSVBTX1NFVF9QUk5HX1NFRUQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZKTsKLSsgICAgICAgICAgICAg ICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgICAgIE9Q RU5TU0xfY2xlYW5zZShjdHgtPnRtcF9rZXksIDE2KTsKLSsgICAgICAgICAgICAgICAgY3R4LT5r ZXllZCA9IDE7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIGN0eC0+c2VlZGVkID0gMTsK LSsgICAgICAgIH0KLSsgICAgfQotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBm aXBzX3NldF90ZXN0X21vZGUoRklQU19QUk5HX0NUWCAqIGN0eCkKLSt7Ci0rICAgIGlmIChjdHgt PmtleWVkKSB7Ci0rICAgICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUsIFJB TkRfUl9QUk5HX0tFWUVEKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGN0eC0+ dGVzdF9tb2RlID0gMTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK2ludCBGSVBTX3g5MzFfdGVz dF9tb2RlKHZvaWQpCi0rewotKyAgICByZXR1cm4gZmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsK LSt9Ci0rCi0raW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCkKLSt7Ci0rICAgIHJldHVybiBm aXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOwotK30KLSsKLStpbnQgRklQU194OTMxX3NldF9kdCh1 bnNpZ25lZCBjaGFyICpkdCkKLSt7Ci0rICAgIGlmICghc2N0eC50ZXN0X21vZGUpIHsKLSsgICAg ICAgIFJBTkRlcnIoUkFORF9GX0ZJUFNfWDkzMV9TRVRfRFQsIFJBTkRfUl9OT1RfSU5fVEVTVF9N T0RFKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIG1lbWNweShzY3R4LkRULCBk dCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLStpbnQgRklQU19y YW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCkKLSt7Ci0rICAgIGlmICghc2N0eC50ZXN0X21v ZGUpIHsKLSsgICAgICAgIFJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQsIFJBTkRfUl9O T1RfSU5fVEVTVF9NT0RFKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIG1lbWNw eShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rICAgIHJldHVybiAxOwotK30KLSsK LSt2b2lkIEZJUFNfZ2V0X3RpbWV2ZWModW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25n ICpwY3RyKQotK3sKLSsjIGlmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rICAgIEZJTEVUSU1FIGZ0 OwotKyMgZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCi0rICAgIHN0cnVjdCB0aW1l c3BlYyB0czsKLSsjIGVsc2UKLSsgICAgc3RydWN0IHRpbWV2YWwgdHY7Ci0rIyBlbmRpZgotKwot KyMgaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUwotKyAgICB1bnNpZ25lZCBsb25nIHBpZDsK LSsjIGVuZGlmCi0rCi0rIyBpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKyAgICBHZXRTeXN0ZW1U aW1lQXNGaWxlVGltZSgmZnQpOwotKyAgICBidWZbMF0gPSAodW5zaWduZWQgY2hhcikoZnQuZHdI aWdoRGF0ZVRpbWUgJiAweGZmKTsKLSsgICAgYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5k d0hpZ2hEYXRlVGltZSA+PiA4KSAmIDB4ZmYpOwotKyAgICBidWZbMl0gPSAodW5zaWduZWQgY2hh cikoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKyAgICBidWZbM10gPSAodW5z aWduZWQgY2hhcikoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKyAgICBidWZb NF0gPSAodW5zaWduZWQgY2hhcikoZnQuZHdMb3dEYXRlVGltZSAmIDB4ZmYpOwotKyAgICBidWZb NV0gPSAodW5zaWduZWQgY2hhcikoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKLSsg ICAgYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0xvd0RhdGVUaW1lID4+IDE2KSAmIDB4 ZmYpOwotKyAgICBidWZbN10gPSAodW5zaWduZWQgY2hhcikoKGZ0LmR3TG93RGF0ZVRpbWUgPj4g MjQpICYgMHhmZik7Ci0rIyBlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfVlhXT1JLUykKLSsgICAg Y2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzKTsKLSsgICAgYnVmWzBdID0gKHVuc2ln bmVkIGNoYXIpKHRzLnR2X3NlYyAmIDB4ZmYpOwotKyAgICBidWZbMV0gPSAodW5zaWduZWQgY2hh cikoKHRzLnR2X3NlYyA+PiA4KSAmIDB4ZmYpOwotKyAgICBidWZbMl0gPSAodW5zaWduZWQgY2hh cikoKHRzLnR2X3NlYyA+PiAxNikgJiAweGZmKTsKLSsgICAgYnVmWzNdID0gKHVuc2lnbmVkIGNo YXIpKCh0cy50dl9zZWMgPj4gMjQpICYgMHhmZik7Ci0rICAgIGJ1Zls0XSA9ICh1bnNpZ25lZCBj aGFyKSh0cy50dl9uc2VjICYgMHhmZik7Ci0rICAgIGJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSgo dHMudHZfbnNlYyA+PiA4KSAmIDB4ZmYpOwotKyAgICBidWZbNl0gPSAodW5zaWduZWQgY2hhciko KHRzLnR2X25zZWMgPj4gMTYpICYgMHhmZik7Ci0rICAgIGJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFy KSgodHMudHZfbnNlYyA+PiAyNCkgJiAweGZmKTsKLSsjIGVsc2UKLSsgICAgZ2V0dGltZW9mZGF5 KCZ0diwgTlVMTCk7Ci0rICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSh0di50dl9zZWMgJiAw eGZmKTsKLSsgICAgYnVmWzFdID0gKHVuc2lnbmVkIGNoYXIpKCh0di50dl9zZWMgPj4gOCkgJiAw eGZmKTsKLSsgICAgYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpKCh0di50dl9zZWMgPj4gMTYpICYg MHhmZik7Ci0rICAgIGJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSgodHYudHZfc2VjID4+IDI0KSAm IDB4ZmYpOwotKyAgICBidWZbNF0gPSAodW5zaWduZWQgY2hhcikodHYudHZfdXNlYyAmIDB4ZmYp OwotKyAgICBidWZbNV0gPSAodW5zaWduZWQgY2hhcikoKHR2LnR2X3VzZWMgPj4gOCkgJiAweGZm KTsKLSsgICAgYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpKCh0di50dl91c2VjID4+IDE2KSAmIDB4 ZmYpOwotKyAgICBidWZbN10gPSAodW5zaWduZWQgY2hhcikoKHR2LnR2X3VzZWMgPj4gMjQpICYg MHhmZik7Ci0rIyBlbmRpZgotKyAgICBidWZbOF0gPSAodW5zaWduZWQgY2hhcikoKnBjdHIgJiAw eGZmKTsKLSsgICAgYnVmWzldID0gKHVuc2lnbmVkIGNoYXIpKCgqcGN0ciA+PiA4KSAmIDB4ZmYp OwotKyAgICBidWZbMTBdID0gKHVuc2lnbmVkIGNoYXIpKCgqcGN0ciA+PiAxNikgJiAweGZmKTsK LSsgICAgYnVmWzExXSA9ICh1bnNpZ25lZCBjaGFyKSgoKnBjdHIgPj4gMjQpICYgMHhmZik7Ci0r Ci0rICAgICgqcGN0cikrKzsKLSsKLSsjIGlmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKLSsg ICAgcGlkID0gKHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7Ci0rICAgIGJ1ZlsxMl0gPSAodW5zaWdu ZWQgY2hhcikocGlkICYgMHhmZik7Ci0rICAgIGJ1ZlsxM10gPSAodW5zaWduZWQgY2hhcikoKHBp ZCA+PiA4KSAmIDB4ZmYpOwotKyAgICBidWZbMTRdID0gKHVuc2lnbmVkIGNoYXIpKChwaWQgPj4g MTYpICYgMHhmZik7Ci0rICAgIGJ1ZlsxNV0gPSAodW5zaWduZWQgY2hhcikoKHBpZCA+PiAyNCkg JiAweGZmKTsKLSsjIGVuZGlmCi0rfQotKwotK3N0YXRpYyBpbnQgZmlwc19yYW5kKEZJUFNfUFJO R19DVFggKiBjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1 bnNpZ25lZCBpbnQgb3V0bGVuKQotK3sKLSsgICAgdW5zaWduZWQgY2hhciBSW0FFU19CTE9DS19M RU5HVEhdLCBJW0FFU19CTE9DS19MRU5HVEhdOwotKyAgICB1bnNpZ25lZCBjaGFyIHRtcFtBRVNf QkxPQ0tfTEVOR1RIXTsKLSsgICAgaW50IGk7Ci0rICAgIGlmIChjdHgtPmVycm9yKSB7Ci0rICAg ICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsIFJBTkRfUl9QUk5HX0VSUk9SKTsKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGlmICghY3R4LT5rZXllZCkgewotKyAgICAgICAg UkFORGVycihSQU5EX0ZfRklQU19SQU5ELCBSQU5EX1JfTk9fS0VZX1NFVCk7Ci0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgfQotKyAgICBpZiAoIWN0eC0+c2VlZGVkKSB7Ci0rICAgICAgICBSQU5E ZXJyKFJBTkRfRl9GSVBTX1JBTkQsIFJBTkRfUl9QUk5HX05PVF9TRUVERUQpOwotKyAgICAgICAg cmV0dXJuIDA7Ci0rICAgIH0KLSsgICAgZm9yICg7OykgewotKyAgICAgICAgaWYgKCFjdHgtPnRl c3RfbW9kZSkKLSsgICAgICAgICAgICBGSVBTX2dldF90aW1ldmVjKGN0eC0+RFQsICZjdHgtPmNv dW50ZXIpOwotKyAgICAgICAgQUVTX2VuY3J5cHQoY3R4LT5EVCwgSSwgJmN0eC0+a3MpOwotKyAg ICAgICAgZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKLSsgICAgICAgICAg ICB0bXBbaV0gPSBJW2ldIF4gY3R4LT5WW2ldOwotKyAgICAgICAgQUVTX2VuY3J5cHQodG1wLCBS LCAmY3R4LT5rcyk7Ci0rICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsg aSsrKQotKyAgICAgICAgICAgIHRtcFtpXSA9IFJbaV0gXiBJW2ldOwotKyAgICAgICAgQUVTX2Vu Y3J5cHQodG1wLCBjdHgtPlYsICZjdHgtPmtzKTsKLSsgICAgICAgIC8qIENvbnRpbnVvdXMgUFJO RyB0ZXN0ICovCi0rICAgICAgICBpZiAoY3R4LT5zZWNvbmQpIHsKLSsgICAgICAgICAgICBpZiAo Zmlwc19wcm5nX2ZhaWwpCi0rICAgICAgICAgICAgICAgIG1lbWNweShjdHgtPmxhc3QsIFIsIEFF U19CTE9DS19MRU5HVEgpOwotKyAgICAgICAgICAgIGlmICghbWVtY21wKFIsIGN0eC0+bGFzdCwg QUVTX0JMT0NLX0xFTkdUSCkpIHsKLSsgICAgICAgICAgICAgICAgUkFORGVycihSQU5EX0ZfRklQ U19SQU5ELCBSQU5EX1JfUFJOR19TVFVDSyk7Ci0rICAgICAgICAgICAgICAgIGN0eC0+ZXJyb3Ig PSAxOwotKyAgICAgICAgICAgICAgICBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7Ci0rICAgICAg ICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAgICAg IG1lbWNweShjdHgtPmxhc3QsIFIsIEFFU19CTE9DS19MRU5HVEgpOwotKyAgICAgICAgaWYgKCFj dHgtPnNlY29uZCkgewotKyAgICAgICAgICAgIGN0eC0+c2Vjb25kID0gMTsKLSsgICAgICAgICAg ICBpZiAoIWN0eC0+dGVzdF9tb2RlKQotKyAgICAgICAgICAgICAgICBjb250aW51ZTsKLSsgICAg ICAgIH0KLSsKLSsgICAgICAgIGlmIChvdXRsZW4gPD0gQUVTX0JMT0NLX0xFTkdUSCkgewotKyAg ICAgICAgICAgIG1lbWNweShvdXQsIFIsIG91dGxlbik7Ci0rICAgICAgICAgICAgYnJlYWs7Ci0r ICAgICAgICB9Ci0rCi0rICAgICAgICBtZW1jcHkob3V0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsK LSsgICAgICAgIG91dCArPSBBRVNfQkxPQ0tfTEVOR1RIOwotKyAgICAgICAgb3V0bGVuIC09IEFF U19CTE9DS19MRU5HVEg7Ci0rICAgIH0KLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK2ludCBGSVBT X3g5MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pCi0rewot KyAgICBpbnQgcmV0OwotKyAgICBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKyAg ICByZXQgPSBmaXBzX3NldF9wcm5nX2tleSgmc2N0eCwga2V5LCBrZXlsZW4pOwotKyAgICBDUllQ VE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwot K2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFO RF9TSVpFX1Qga2V5bGVuKQotK3sKLSsgICAgcmV0dXJuIEZJUFNfeDkzMV9zZXRfa2V5KGtleSwg a2V5bGVuKTsKLSt9Ci0rCi0raW50IEZJUFNfeDkzMV9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGlu dCBzZWVkbGVuKQotK3sKLSsgICAgaW50IHJldDsKLSsgICAgQ1JZUFRPX3dfbG9jayhDUllQVE9f TE9DS19SQU5EKTsKLSsgICAgcmV0ID0gZmlwc19zZXRfcHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBz ZWVkbGVuKTsKLSsgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKyAgICBy ZXR1cm4gcmV0OwotK30KLSsKLStpbnQgRklQU194OTMxX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91 dCwgaW50IGNvdW50KQotK3sKLSsgICAgaW50IHJldDsKLSsgICAgQ1JZUFRPX3dfbG9jayhDUllQ VE9fTE9DS19SQU5EKTsKLSsgICAgcmV0ID0gZmlwc19yYW5kKCZzY3R4LCBvdXQsIGNvdW50KTsK LSsgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKyAgICByZXR1cm4gcmV0 OwotK30KLSsKLStpbnQgRklQU194OTMxX3N0YXR1cyh2b2lkKQotK3sKLSsgICAgaW50IHJldDsK LSsgICAgQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsgICAgcmV0ID0gc2N0eC5z ZWVkZWQ7Ci0rICAgIENSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsgICAgcmV0 dXJuIHJldDsKLSt9Ci0rCi0rdm9pZCBGSVBTX3g5MzFfcmVzZXQodm9pZCkKLSt7Ci0rICAgIENS WVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rICAgIGZpcHNfcmFuZF9wcm5nX3Jlc2V0 KCZzY3R4KTsKLSsgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotK30KLSsK LStzdGF0aWMgaW50IGZpcHNfZG9fcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVk bGVuKQotK3sKLSsgICAgRklQU194OTMxX3NlZWQoc2VlZCwgc2VlZGxlbik7Ci0rICAgIHJldHVy biAxOwotK30KLSsKLStzdGF0aWMgaW50IGZpcHNfZG9fcmFuZF9hZGQoY29uc3Qgdm9pZCAqc2Vl ZCwgaW50IHNlZWRsZW4sIGRvdWJsZSBhZGRfZW50cm9weSkKLSt7Ci0rICAgIEZJUFNfeDkzMV9z ZWVkKHNlZWQsIHNlZWRsZW4pOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0 IFJBTkRfTUVUSE9EIHJhbmRfeDkzMV9tZXRoID0gewotKyAgICBmaXBzX2RvX3JhbmRfc2VlZCwK LSsgICAgRklQU194OTMxX2J5dGVzLAotKyAgICBGSVBTX3g5MzFfcmVzZXQsCi0rICAgIGZpcHNf ZG9fcmFuZF9hZGQsCi0rICAgIEZJUFNfeDkzMV9ieXRlcywKLSsgICAgRklQU194OTMxX3N0YXR1 cwotK307Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfeDkzMV9tZXRob2Qodm9pZCkKLSt7 Ci0rICAgIHJldHVybiAmcmFuZF94OTMxX21ldGg7Ci0rfQotKwotKyNlbmRpZgotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmguZmlwcyBvcGVuc3NsLTEuMC4y Yy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBz L2ZpcHNfcmFuZC5oLmZpcHMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTAyODQwMjggKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAkyMDE1LTA2LTE1IDE3OjMw OjAwLjAxMDI4NDAyOCArMDIwMAotQEAgLTAsMCArMSwxNjMgQEAKLSsvKiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot KyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6 Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVz ICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2Vk IHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3 cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9w ZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIg YXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1p c3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9u cyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAg ICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFO RCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJ VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg KElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF VkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0r ICoKLSsgKi8KLSsKLSsjaWZuZGVmIEhFQURFUl9GSVBTX1JBTkRfSAotKyMgZGVmaW5lIEhFQURF Ul9GSVBTX1JBTkRfSAotKwotKyMgaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjIGluY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0rIyBpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjIGluY2x1ZGUg PG9wZW5zc2wvcmFuZC5oPgotKwotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rIyAgaWZkZWYg IF9fY3BsdXNwbHVzCi0rZXh0ZXJuICJDIiB7Ci0rIyAgZW5kaWYKLSsKLSsgICAgaW50IEZJUFNf eDkzMV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbik7Ci0rICAg IGludCBGSVBTX3g5MzFfc2VlZChjb25zdCB2b2lkICpidWYsIGludCBudW0pOwotKyAgICBpbnQg RklQU194OTMxX2J5dGVzKHVuc2lnbmVkIGNoYXIgKm91dCwgaW50IG91dGxlbik7Ci0rCi0rICAg IGludCBGSVBTX3g5MzFfdGVzdF9tb2RlKHZvaWQpOwotKyAgICB2b2lkIEZJUFNfeDkzMV9yZXNl dCh2b2lkKTsKLSsgICAgaW50IEZJUFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOwot KwotKyAgICBpbnQgRklQU194OTMxX3N0YXR1cyh2b2lkKTsKLSsKLSsgICAgY29uc3QgUkFORF9N RVRIT0QgKkZJUFNfeDkzMV9tZXRob2Qodm9pZCk7Ci0rCi0rICAgIHR5cGVkZWYgc3RydWN0IGRy YmdfY3R4X3N0IERSQkdfQ1RYOwotKy8qIERSQkcgZXh0ZXJuYWwgZmxhZ3MgKi8KLSsvKiBGbGFn IGZvciBDVFIgbW9kZSBvbmx5OiB1c2UgZGVyaXZhdGlvbiBmdW5jdGlvbiBjdHJfZGYgKi8KLSsj ICBkZWZpbmUgRFJCR19GTEFHX0NUUl9VU0VfREYgICAgICAgICAgICAweDEKLSsvKiBQUk5HIGlz IGluIHRlc3Qgc3RhdGUgKi8KLSsjICBkZWZpbmUgRFJCR19GTEFHX1RFU1QgICAgICAgICAgICAg ICAgICAweDIKLSsKLSsgICAgRFJCR19DVFggKkZJUFNfZHJiZ19uZXcoaW50IHR5cGUsIHVuc2ln bmVkIGludCBmbGFncyk7Ci0rICAgIGludCBGSVBTX2RyYmdfaW5pdChEUkJHX0NUWCAqZGN0eCwg aW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0rICAgIGludCBGSVBTX2RyYmdfaW5zdGFu dGlhdGUoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqcGVycywgc2l6ZV90IHBlcnNsZW4pOwotKyAgICBpbnQgRklQU19k cmJnX3Jlc2VlZChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFkaW5sZW4pOwotKyAgICBpbnQgRklQU19k cmJnX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBv dXRsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWRpY3Rpb25fcmVzaXN0 YW5jZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICph ZGluLCBzaXplX3QgYWRpbmxlbik7Ci0rCi0rICAgIGludCBGSVBTX2RyYmdfdW5pbnN0YW50aWF0 ZShEUkJHX0NUWCAqZGN0eCk7Ci0rICAgIHZvaWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRj dHgpOwotKwotKyAgICBpbnQgRklQU19kcmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfZW50cm9weSkg KERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IG1pbl9sZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBtYXhfbGVuKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKCpjbGVhbnVwX2VudHJvcHkpIChEUkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo YXIgKm91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3Qgb2xlbiksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgZW50cm9weV9ibG9ja2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCAoKmdldF9ub25jZSkgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91 dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBlbnRyb3B5LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IG1pbl9sZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2xlbiksCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2xlYW51cF9ub25jZSkgKERSQkdfQ1RYICpjdHgs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGNoYXIgKm91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pKTsKLSsKLSsgICAgaW50IEZJUFNfZHJi Z19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCAoKmdldF9hZGluKSAoRFJCR19DVFggKmN0eCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjaGFyCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKipwb3V0KSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAoKmNsZWFudXBfYWRpbikgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj aGFyICpvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3Qgb2xlbiksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCAoKnJhbmRfc2VlZF9jYikgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZv aWQgKmJ1ZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IG51bSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCAoKnJhbmRfYWRkX2NiKSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IG51bSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkb3VibGUgZW50cm9weSkpOwotKwotKyAgICB2b2lkICpGSVBTX2RyYmdf Z2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgpOwotKyAgICB2b2lkIEZJUFNfZHJiZ19zZXRfYXBw X2RhdGEoRFJCR19DVFggKmN0eCwgdm9pZCAqYXBwX2RhdGEpOwotKyAgICBzaXplX3QgRklQU19k cmJnX2dldF9ibG9ja2xlbmd0aChEUkJHX0NUWCAqZGN0eCk7Ci0rICAgIGludCBGSVBTX2RyYmdf Z2V0X3N0cmVuZ3RoKERSQkdfQ1RYICpkY3R4KTsKLSsgICAgdm9pZCBGSVBTX2RyYmdfc2V0X2No ZWNrX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpOwotKyAgICB2b2lkIEZJ UFNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwp OwotKwotKyAgICBpbnQgRklQU19kcmJnX2hlYWx0aF9jaGVjayhEUkJHX0NUWCAqZGN0eCk7Ci0r Ci0rICAgIERSQkdfQ1RYICpGSVBTX2dldF9kZWZhdWx0X2RyYmcodm9pZCk7Ci0rICAgIGNvbnN0 IFJBTkRfTUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpOwotKwotKyAgICBpbnQgRklQU19y YW5kX3NldF9tZXRob2QoY29uc3QgUkFORF9NRVRIT0QgKm1ldGgpOwotKyAgICBjb25zdCBSQU5E X01FVEhPRCAqRklQU19yYW5kX2dldF9tZXRob2Qodm9pZCk7Ci0rCi0rICAgIHZvaWQgRklQU19y YW5kX3NldF9iaXRzKGludCBuYml0cyk7Ci0rCi0rICAgIGludCBGSVBTX3JhbmRfc3RyZW5ndGgo dm9pZCk7Ci0rCi0rLyogMS4wLjAgY29tcGF0IGZ1bmN0aW9ucyAqLwotKyAgICBpbnQgRklQU19y YW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtl eWxlbik7Ci0rICAgIGludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFO RF9TSVpFX1QgbnVtKTsKLSsgICAgaW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpv dXQsIEZJUFNfUkFORF9TSVpFX1Qgb3V0bGVuKTsKLSsgICAgaW50IEZJUFNfcmFuZF90ZXN0X21v ZGUodm9pZCk7Ci0rICAgIHZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpOwotKyAgICBpbnQgRklQ U19yYW5kX3NldF9kdCh1bnNpZ25lZCBjaGFyICpkdCk7Ci0rICAgIGludCBGSVBTX3JhbmRfc3Rh dHVzKHZvaWQpOwotKyAgICBjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lk KTsKLSsKLSsjICBpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rIyAgZW5kaWYKLSsjIGVuZGlmCi0r I2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNs LmguZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgKLS0tLSBv cGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmguZmlwcwkyMDE1LTA2LTE1 IDE3OjMwOjAwLjAxMDI4NDAyOCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBz L2ZpcHNfcmFuZF9sY2wuaAkyMDE1LTA2LTE1IDE3OjMwOjAwLjAxMDI4NDAyOCArMDIwMAotQEAg LTAsMCArMSwyMTMgQEAKLSsvKiBmaXBzL3JhbmQvZmlwc19yYW5kX2xjbC5oICovCi0rLyogV3Jp dHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBP cGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdo dCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg KgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKi8KLSsKLSt0eXBlZGVmIHN0cnVjdCBkcmJnX2hhc2hfY3R4X3N0IERSQkdfSEFTSF9DVFg7 Ci0rdHlwZWRlZiBzdHJ1Y3QgZHJiZ19obWFjX2N0eF9zdCBEUkJHX0hNQUNfQ1RYOwotK3R5cGVk ZWYgc3RydWN0IGRyYmdfY3RyX2N0eF9zdCBEUkJHX0NUUl9DVFg7Ci0rCi0rLyogODg4IGJpdHMg ZnJvbSAxMC4xIHRhYmxlIDIgKi8KLSsjZGVmaW5lIEhBU0hfUFJOR19NQVhfU0VFRExFTiAgIDEx MQotKwotK3N0cnVjdCBkcmJnX2hhc2hfY3R4X3N0IHsKLSsgICAgY29uc3QgRVZQX01EICptZDsK LSsgICAgRVZQX01EX0NUWCBtY3R4OwotKyAgICB1bnNpZ25lZCBjaGFyIFZbSEFTSF9QUk5HX01B WF9TRUVETEVOXTsKLSsgICAgdW5zaWduZWQgY2hhciBDW0hBU0hfUFJOR19NQVhfU0VFRExFTl07 Ci0rICAgIC8qIFRlbXBvcmFyeSB2YWx1ZSBzdG9yYWdlOiBzaG91bGQgYWx3YXlzIGV4Y2VlZCBt YXggZGlnZXN0IGxlbmd0aCAqLwotKyAgICB1bnNpZ25lZCBjaGFyIHZ0bXBbSEFTSF9QUk5HX01B WF9TRUVETEVOXTsKLSt9OwotKwotK3N0cnVjdCBkcmJnX2htYWNfY3R4X3N0IHsKLSsgICAgY29u c3QgRVZQX01EICptZDsKLSsgICAgSE1BQ19DVFggaGN0eDsKLSsgICAgdW5zaWduZWQgY2hhciBL W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGNoYXIgVltFVlBfTUFYX01EX1NJWkVd OwotK307Ci0rCi0rc3RydWN0IGRyYmdfY3RyX2N0eF9zdCB7Ci0rICAgIEFFU19LRVkga3M7Ci0r ICAgIHNpemVfdCBrZXlsZW47Ci0rICAgIHVuc2lnbmVkIGNoYXIgS1szMl07Ci0rICAgIHVuc2ln bmVkIGNoYXIgVlsxNl07Ci0rICAgIC8qIFRlbXAgdmFyaWFibGVzIHVzZWQgYnkgZGVyaXZhdGlv biBmdW5jdGlvbiAqLwotKyAgICBBRVNfS0VZIGRmX2tzOwotKyAgICBBRVNfS0VZIGRmX2t4a3M7 Ci0rICAgIC8qIFRlbXBvcmFyeSBibG9jayBzdG9yYWdlIHVzZWQgYnkgY3RyX2RmICovCi0rICAg IHVuc2lnbmVkIGNoYXIgYmx0bXBbMTZdOwotKyAgICBzaXplX3QgYmx0bXBfcG9zOwotKyAgICB1 bnNpZ25lZCBjaGFyIEtYWzQ4XTsKLSt9OwotKwotKy8qIERSQkcgaW50ZXJuYWwgZmxhZ3MgKi8K LSsKLSsvKiBGdW5jdGlvbnMgc2hvdWxkbid0IGNhbGwgZXJyIGxpYnJhcnkgKi8KLSsjZGVmaW5l IERSQkdfRkxBR19OT0VSUiAgICAgICAgICAgICAgICAgMHgxCi0rLyogQ3VzdG9tIHJlc2VlZCBj aGVja2luZyAqLwotKyNkZWZpbmUgRFJCR19DVVNUT01fUkVTRUVEICAgICAgICAgICAgICAweDIK LSsKLSsvKiBEUkJHIHN0YXR1cyB2YWx1ZXMgKi8KLSsvKiBub3QgaW5pdGlhbGlzZWQgKi8KLSsj ZGVmaW5lIERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQgICAgICAgMAotKy8qIG9rIGFuZCByZWFk eSB0byBnZW5lcmF0ZSByYW5kb20gYml0cyAqLwotKyNkZWZpbmUgRFJCR19TVEFUVVNfUkVBRFkg ICAgICAgICAgICAgICAxCi0rLyogcmVzZWVkIHJlcXVpcmVkICovCi0rI2RlZmluZSBEUkJHX1NU QVRVU19SRVNFRUQgICAgICAgICAgICAgIDIKLSsvKiBmYXRhbCBlcnJvciBjb25kaXRpb24gKi8K LSsjZGVmaW5lIERSQkdfU1RBVFVTX0VSUk9SICAgICAgICAgICAgICAgMwotKwotKy8qIEEgZGVm YXVsdCBtYXhpbXVtIGxlbmd0aDogbGFyZ2VyIHRoYW4gYW55IHJlYXNvbmFibGUgdmFsdWUgdXNl ZCBpbiBwcmF0aWNlICovCi0rCi0rI2RlZmluZSBEUkJHX01BWF9MRU5HVEggICAgICAgICAgICAg ICAgIDB4N2ZmZmZmZjAKLSsvKiBNYXhpbXVtIERSQkcgYmxvY2sgbGVuZ3RoOiBhbGwgbWQgc2l6 ZXMgYXJlIGJpZ2dlciB0aGFuIGNpcGhlciBibG9ja3Mgc2l6ZXMKLSsgKiBzbyB1c2UgbWF4IGRp Z2VzdCBsZW5ndGguCi0rICovCi0rI2RlZmluZSBEUkJHX01BWF9CTE9DSyAgICAgICAgICAgICAg ICAgIEVWUF9NQVhfTURfU0laRQotKwotKyNkZWZpbmUgRFJCR19IRUFMVEhfSU5URVJWQUwgICAg ICAgICAgICAoMSA8PCAyNCkKLSsKLSsvKiBEUkJHIGNvbnRleHQgc3RydWN0dXJlICovCi0rCi0r c3RydWN0IGRyYmdfY3R4X3N0IHsKLSsgICAgLyogRmlyc3QgdHlwZXMgY29tbW9uIHRvIGFsbCBp bXBsZW1lbnRhdGlvbnMgKi8KLSsgICAgLyogRFJCRyB0eXBlOiBhIE5JRCBmb3IgdGhlIHVuZGVy bHlpbmcgYWxnb3JpdGhtICovCi0rICAgIGludCB0eXBlOwotKyAgICAvKiBWYXJpb3VzIGV4dGVy bmFsIGZsYWdzICovCi0rICAgIHVuc2lnbmVkIGludCB4ZmxhZ3M7Ci0rICAgIC8qIFZhcmlvdXMg aW50ZXJuYWwgdXNlIG9ubHkgZmxhZ3MgKi8KLSsgICAgdW5zaWduZWQgaW50IGlmbGFnczsKLSsg ICAgLyogVXNlZCBmb3IgcGVyaW9kaWMgaGVhbHRoIGNoZWNrcyAqLwotKyAgICBpbnQgaGVhbHRo X2NoZWNrX2NudCwgaGVhbHRoX2NoZWNrX2ludGVydmFsOwotKwotKyAgICAvKiBUaGUgZm9sbG93 aW5nIHBhcmFtZXRlcnMgYXJlIHNldHVwIGJ5IG1lY2hhbmlzbSBkcmJnX2luaXQoKSBjYWxsICov Ci0rICAgIGludCBzdHJlbmd0aDsKLSsgICAgc2l6ZV90IGJsb2NrbGVuZ3RoOwotKyAgICBzaXpl X3QgbWF4X3JlcXVlc3Q7Ci0rCi0rICAgIHNpemVfdCBtaW5fZW50cm9weSwgbWF4X2VudHJvcHk7 Ci0rICAgIHNpemVfdCBtaW5fbm9uY2UsIG1heF9ub25jZTsKLSsgICAgc2l6ZV90IG1heF9wZXJz LCBtYXhfYWRpbjsKLSsgICAgdW5zaWduZWQgaW50IHJlc2VlZF9jb3VudGVyOwotKyAgICB1bnNp Z25lZCBpbnQgcmVzZWVkX2ludGVydmFsOwotKyAgICBzaXplX3Qgc2VlZGxlbjsKLSsgICAgaW50 IHN0YXR1czsKLSsgICAgLyogQXBwbGljYXRpb24gZGF0YTogdHlwaWNhbGx5IHVzZWQgYnkgdGVz dCBnZXRfZW50cm9weSAqLwotKyAgICB2b2lkICphcHBfZGF0YTsKLSsgICAgLyogSW1wbGVtZW50 YXRpb24gc3BlY2lmaWMgc3RydWN0dXJlcyAqLwotKyAgICB1bmlvbiB7Ci0rICAgICAgICBEUkJH X0hBU0hfQ1RYIGhhc2g7Ci0rICAgICAgICBEUkJHX0hNQUNfQ1RYIGhtYWM7Ci0rICAgICAgICBE UkJHX0NUUl9DVFggY3RyOwotKyAgICB9IGQ7Ci0rICAgIC8qIEluaXRpYWxpYXNlIFBSTkcgYW5k IHNldHVwIGNhbGxiYWNrcyBiZWxvdyAqLwotKyAgICBpbnQgKCppbml0KSAoRFJCR19DVFggKmN0 eCwgaW50IG5pZCwgaW50IHNlY3VyaXR5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotKyAgICAvKiBJ bnRhbnRpYXRlIFBSTkcgKi8KLSsgICAgaW50ICgqaW5zdGFudGlhdGUpIChEUkJHX0NUWCAqY3R4 LAotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6 ZV90IGVudGxlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICpub25jZSwgc2l6ZV90IG5vbmNlbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKTsKLSsgICAgLyogcmVzZWVkICov Ci0rICAgIGludCAoKnJlc2VlZCkgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKLSsgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOwotKyAgICAv KiBnZW5lcmF0IG91dHB1dCAqLwotKyAgICBpbnQgKCpnZW5lcmF0ZSkgKERSQkdfQ1RYICpjdHgs Ci0rICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVu LAotKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVf dCBhZGlubGVuKTsKLSsgICAgLyogdW5pbnN0YW50aWF0ZSAqLwotKyAgICBpbnQgKCp1bmluc3Rh bnRpYXRlKSAoRFJCR19DVFggKmN0eCk7Ci0rCi0rICAgIC8qIEVudHJvcHkgc291cmNlIGJsb2Nr IGxlbmd0aCAqLwotKyAgICBzaXplX3QgZW50cm9weV9ibG9ja2xlbjsKLSsKLSsgICAgLyogZW50 cm9weSBnYXRoZXJpbmcgZnVuY3Rpb24gKi8KLSsgICAgc2l6ZV90ICgqZ2V0X2VudHJvcHkpIChE UkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKTsKLSsg ICAgLyogSW5kaWNhdGVzIHdlIGhhdmUgZmluaXNoZWQgd2l0aCBlbnRyb3B5IGJ1ZmZlciAqLwot KyAgICB2b2lkICgqY2xlYW51cF9lbnRyb3B5KSAoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hh ciAqb3V0LCBzaXplX3Qgb2xlbik7Ci0rCi0rICAgIC8qIG5vbmNlIGdhdGhlcmluZyBmdW5jdGlv biAqLwotKyAgICBzaXplX3QgKCpnZXRfbm9uY2UpIChEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBj aGFyICoqcG91dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVf dCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbik7Ci0rICAgIC8qIEluZGljYXRlcyB3ZSBoYXZlIGZp bmlzaGVkIHdpdGggbm9uY2UgYnVmZmVyICovCi0rICAgIHZvaWQgKCpjbGVhbnVwX25vbmNlKSAo RFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7Ci0rCi0rICAg IC8qIENvbnRpbnVvdXMgcmFuZG9tIG51bWJlciB0ZXN0IHRlbXBvcmFyeSBhcmVhICovCi0rICAg IC8qIExhc3QgYmxvY2sgKi8KLSsgICAgdW5zaWduZWQgY2hhciBsYltFVlBfTUFYX01EX1NJWkVd OwotKyAgICAvKiBzZXQgaWYgbGIgaXMgdmFsaWQgKi8KLSsgICAgaW50IGxiX3ZhbGlkOwotKwot KyAgICAvKiBDYWxsYmFja3MgdXNlZCB3aGVuIGNhbGxlZCB0aHJvdWdoIFJBTkQgaW50ZXJmYWNl ICovCi0rICAgIC8qIEdldCBhbnkgYWRkaXRpb25hbCBpbnB1dCBmb3IgZ2VuZXJhdGUgKi8KLSsg ICAgc2l6ZV90ICgqZ2V0X2FkaW4pIChEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91 dCk7Ci0rICAgIHZvaWQgKCpjbGVhbnVwX2FkaW4pIChEUkJHX0NUWCAqY3R4LCB1bnNpZ25lZCBj aGFyICpvdXQsIHNpemVfdCBvbGVuKTsKLSsgICAgLyogQ2FsbGJhY2sgZm9yIFJBTkRfc2VlZCgp LCBSQU5EX2FkZCgpICovCi0rICAgIGludCAoKnJhbmRfc2VlZF9jYikgKERSQkdfQ1RYICpjdHgs IGNvbnN0IHZvaWQgKmJ1ZiwgaW50IG51bSk7Ci0rICAgIGludCAoKnJhbmRfYWRkX2NiKSAoRFJC R19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsIGlu dCBudW0sIGRvdWJsZSBlbnRyb3B5KTsKLSt9OwotKwotK2ludCBmaXBzX2RyYmdfY3RyX2luaXQo RFJCR19DVFggKmRjdHgpOwotK2ludCBmaXBzX2RyYmdfaGFzaF9pbml0KERSQkdfQ1RYICpkY3R4 KTsKLStpbnQgZmlwc19kcmJnX2htYWNfaW5pdChEUkJHX0NUWCAqZGN0eCk7Ci0raW50IGZpcHNf ZHJiZ19rYXQoRFJCR19DVFggKmRjdHgsIGludCBuaWQsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0r aW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBj aGFyICpvdXQpOwotKwotK2NvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKkZJUFNfZ2V0X2RpZ2VzdGJ5 bmlkKGludCBuaWQpOwotKwotK2NvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpGSVBTX2dldF9j aXBoZXJieW5pZChpbnQgbmlkKTsKLSsKLSsjZGVmaW5lIEZJUFNfZGlnZXN0aW5pdCBFVlBfRGln ZXN0SW5pdAotKyNkZWZpbmUgRklQU19kaWdlc3R1cGRhdGUgRVZQX0RpZ2VzdFVwZGF0ZQotKyNk ZWZpbmUgRklQU19kaWdlc3RmaW5hbCBFVlBfRGlnZXN0RmluYWwKLSsjZGVmaW5lIE1fRVZQX01E X3NpemUgRVZQX01EX3NpemUKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2Zp cHNfcmFuZF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9s aWIuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYy5maXBz CTIwMTUtMDYtMTUgMTc6MzA6MDAuMDEwMjg0MDI4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMv Y3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xpYi5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDEwMjg0MDI4 ICswMjAwCi1AQCAtMCwwICsxLDE4MSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0 IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAq Ci0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu Ci0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0r ICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwot KyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImVfb3MuaCIKLSsKLSsv KiBGSVBTIEFQSSBmb3IgUFJORyB1c2UuIFNpbWlsYXIgdG8gUkFORCBmdW5jdGlvbmFsaXR5IGJ1 dCB3aXRob3V0Ci0rICogRU5HSU5FIGFuZCBhZGRpdGlvbmFsIGNoZWNraW5nIGZvciBub24tRklQ UyByYW5kIG1ldGhvZHMuCi0rICovCi0rCi0rc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EICpmaXBz X3JhbmRfbWV0aCA9IE5VTEw7Ci0rc3RhdGljIGludCBmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCA9 IDA7Ci0rc3RhdGljIGludCBmaXBzX3JhbmRfYml0cyA9IDA7Ci0rCi0rLyogQWxsb3dzIGFwcGxp Y2F0aW9uIHRvIG92ZXJyaWRlIG51bWJlciBvZiBiaXRzIGFuZCB1c2VzIG5vbi1GSVBTIG1ldGhv ZHMgKi8KLSt2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpCi0rewotKyAgICBmaXBz X3JhbmRfYml0cyA9IG5iaXRzOwotK30KLSsKLStpbnQgRklQU19yYW5kX3NldF9tZXRob2QoY29u c3QgUkFORF9NRVRIT0QgKm1ldGgpCi0rewotKyAgICBpZiAoIWZpcHNfcmFuZF9iaXRzKSB7Ci0r ICAgICAgICBpZiAobWV0aCA9PSBGSVBTX2RyYmdfbWV0aG9kKCkpCi0rICAgICAgICAgICAgZmlw c19hcHByb3ZlZF9yYW5kX21ldGggPSAxOwotKyAgICAgICAgZWxzZSBpZiAobWV0aCA9PSBGSVBT X3g5MzFfbWV0aG9kKCkpCi0rICAgICAgICAgICAgZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPSAy OwotKyAgICAgICAgZWxzZSB7Ci0rICAgICAgICAgICAgZmlwc19hcHByb3ZlZF9yYW5kX21ldGgg PSAwOwotKyAgICAgICAgICAgIGlmIChGSVBTX21vZHVsZV9tb2RlKCkpIHsKLSsgICAgICAgICAg ICAgICAgRklQU2VycihGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QsIEZJUFNfUl9OT05fRklQ U19NRVRIT0QpOwotKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICB9Ci0r ICAgICAgICB9Ci0rICAgIH0KLSsgICAgZmlwc19yYW5kX21ldGggPSBtZXRoOwotKyAgICByZXR1 cm4gMTsKLSt9Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZv aWQpCi0rewotKyAgICByZXR1cm4gZmlwc19yYW5kX21ldGg7Ci0rfQotKwotK2NvbnN0IFJBTkRf TUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZvaWQpCi0rewotKyAgICByZXR1cm4gRklQU19yYW5k X2dldF9tZXRob2QoKTsKLSt9Ci0rCi0rdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCkKLSt7Ci0r ICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCkKLSsgICAg ICAgIGZpcHNfcmFuZF9tZXRoLT5jbGVhbnVwKCk7Ci0rfQotKwotK2ludCBGSVBTX3JhbmRfc2Vl ZChjb25zdCB2b2lkICpidWYsIEZJUFNfUkFORF9TSVpFX1QgbnVtKQotK3sKLSsgICAgaWYgKCFm aXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpIHsKLSsgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TRUVELCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsK LSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBm aXBzX3JhbmRfbWV0aC0+c2VlZCkKLSsgICAgICAgIGZpcHNfcmFuZF9tZXRoLT5zZWVkKGJ1Ziwg bnVtKTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3ZvaWQgRklQU19yYW5kX2FkZChjb25zdCB2 b2lkICpidWYsIGludCBudW0sIGRvdWJsZSBlbnRyb3B5KQotK3sKLSsgICAgaWYgKCFmaXBzX2Fw cHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVsZV9tb2RlKCkpIHsKLSsgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfUkFORF9BREQsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKyAgICAg ICAgcmV0dXJuOwotKyAgICB9Ci0rICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRf bWV0aC0+YWRkKQotKyAgICAgICAgZmlwc19yYW5kX21ldGgtPmFkZChidWYsIG51bSwgZW50cm9w eSk7Ci0rfQotKwotK2ludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqYnVmLCBGSVBT X1JBTkRfU0laRV9UIG51bSkKLSt7Ci0rICAgIGlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGgg JiYgRklQU19tb2R1bGVfbW9kZSgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JB TkRfQllURVMsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIH0KLSsgICAgaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5ieXRlcykK LSsgICAgICAgIHJldHVybiBmaXBzX3JhbmRfbWV0aC0+Ynl0ZXMoYnVmLCBudW0pOwotKyAgICBy ZXR1cm4gMDsKLSt9Ci0rCi0raW50IEZJUFNfcmFuZF9wc2V1ZG9fYnl0ZXModW5zaWduZWQgY2hh ciAqYnVmLCBpbnQgbnVtKQotK3sKLSsgICAgaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAm JiBGSVBTX21vZHVsZV9tb2RlKCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUkFO RF9QU0VVRE9fQllURVMsIEZJUFNfUl9OT05fRklQU19NRVRIT0QpOwotKyAgICAgICAgcmV0dXJu IDA7Ci0rICAgIH0KLSsgICAgaWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5w c2V1ZG9yYW5kKQotKyAgICAgICAgcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5wc2V1ZG9yYW5kKGJ1 ZiwgbnVtKTsKLSsgICAgcmV0dXJuIC0xOwotK30KLSsKLStpbnQgRklQU19yYW5kX3N0YXR1cyh2 b2lkKQotK3sKLSsgICAgaWYgKCFmaXBzX2FwcHJvdmVkX3JhbmRfbWV0aCAmJiBGSVBTX21vZHVs ZV9tb2RlKCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TVEFUVVMsIEZJ UFNfUl9OT05fRklQU19NRVRIT0QpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsgICAg aWYgKGZpcHNfcmFuZF9tZXRoICYmIGZpcHNfcmFuZF9tZXRoLT5zdGF0dXMpCi0rICAgICAgICBy ZXR1cm4gZmlwc19yYW5kX21ldGgtPnN0YXR1cygpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0r LyogUmV0dXJuIGluc3RhbnRpYXRlZCBzdHJlbmd0aCBvZiBQUk5HLiBGb3IgRFJCRyB0aGlzIGlz IGFuIGludGVybmFsCi0rICogcGFyYW1ldGVyLiBGb3IgWDkuMzEgUFJORyBpdCBpcyA4MCBiaXRz IChmcm9tIFNQODAwLTEzMSkuIEFueSBvdGhlcgotKyAqIHR5cGUgb2YgUFJORyBpcyBub3QgYXBw cm92ZWQgYW5kIHJldHVybnMgMCBpbiBGSVBTIG1vZGUgYW5kIG1heGltdW0KLSsgKiAyNTYgb3V0 c2lkZSBGSVBTIG1vZGUuCi0rICovCi0rCi0raW50IEZJUFNfcmFuZF9zdHJlbmd0aCh2b2lkKQot K3sKLSsgICAgaWYgKGZpcHNfcmFuZF9iaXRzKQotKyAgICAgICAgcmV0dXJuIGZpcHNfcmFuZF9i aXRzOwotKyAgICBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0gMSkKLSsgICAgICAgIHJl dHVybiBGSVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKEZJUFNfZ2V0X2RlZmF1bHRfZHJiZygpKTsKLSsg ICAgZWxzZSBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0gMikKLSsgICAgICAgIHJldHVy biA4MDsKLSsgICAgZWxzZSBpZiAoZmlwc19hcHByb3ZlZF9yYW5kX21ldGggPT0gMCkgewotKyAg ICAgICAgaWYgKEZJUFNfbW9kdWxlX21vZGUoKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsg ICAgICAgIGVsc2UKLSsgICAgICAgICAgICByZXR1cm4gMjU2OwotKyAgICB9Ci0rICAgIHJldHVy biAwOwotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9z ZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0 ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3Qu Yy5maXBzCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDEwMjg0MDI4ICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMJMjAxNS0wNi0xNSAxNzozMDow MC4wMTAyODQwMjggKzAyMDAKLUBAIC0wLDAgKzEsMTc2IEBACi0rLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0Ogot KyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAq Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5o IgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rICAgIHVu c2lnbmVkIGNoYXIgRFRbMTZdOwotKyAgICB1bnNpZ25lZCBjaGFyIFZbMTZdOwotKyAgICB1bnNp Z25lZCBjaGFyIFJbMTZdOwotK30gQUVTX1BSTkdfVFY7Ci0rCi0rLyogVGhlIGZvbGxvd2luZyB0 ZXN0IHZlY3RvcnMgYXJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZTIHNwZWMgKi8KLSsK LStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X2tleVsxNl0gPQotKyAgICB7IDB4ZjMsIDB4 YjEsIDB4NjYsIDB4NmQsIDB4MTMsIDB4NjAsIDB4NzIsIDB4NDIsCi0rICAgIDB4ZWQsIDB4MDYs IDB4MWMsIDB4YWIsIDB4YjgsIDB4ZDQsIDB4NjIsIDB4MDIKLSt9OwotKwotK3N0YXRpYyBBRVNf UFJOR19UViBhZXNfMTI4X3R2ID0gewotKyAgICAvKiBEVCAqLwotKyAgICB7MHhlNiwgMHhiMywg MHhiZSwgMHg3OCwgMHgyYSwgMHgyMywgMHhmYSwgMHg2MiwKLSsgICAgIDB4ZDcsIDB4MWQsIDB4 NGEsIDB4ZmIsIDB4YjAsIDB4ZTksIDB4MjIsIDB4Zjl9LAotKyAgICAvKiBWICovCi0rICAgIHsw eDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotKyAgICAgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCi0rICAgIC8qIFIg Ki8KLSsgICAgezB4NTksIDB4NTMsIDB4MWUsIDB4ZDEsIDB4M2IsIDB4YjAsIDB4YzAsIDB4NTUs Ci0rICAgICAweDg0LCAweDc5LCAweDY2LCAweDg1LCAweGMxLCAweDJmLCAweDc2LCAweDQxfQot K307Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9rZXlbMjRdID0KLSsgICAgeyAw eDE1LCAweGQ4LCAweDc4LCAweDBkLCAweDYyLCAweGQzLCAweDI1LCAweDZlLAotKyAgICAweDQ0 LCAweDY0LCAweDEwLCAweDEzLCAweDYwLCAweDJiLCAweGE5LCAweGJjLAotKyAgICAweDRhLCAw eGZiLCAweGNhLCAweGViLCAweDRjLCAweDhiLCAweDk5LCAweDNiCi0rfTsKLSsKLStzdGF0aWMg QUVTX1BSTkdfVFYgYWVzXzE5Ml90diA9IHsKLSsgICAgLyogRFQgKi8KLSsgICAgezB4M2YsIDB4 ZDgsIDB4ZmYsIDB4ZTgsIDB4ODAsIDB4NjksIDB4OGIsIDB4YzEsCi0rICAgICAweGJmLCAweDk5 LCAweDdkLCAweGE0LCAweDI0LCAweDc4LCAweGYzLCAweDRifSwKLSsgICAgLyogViAqLwotKyAg ICB7MHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSsgICAg IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAotKyAgICAv KiBSICovCi0rICAgIHsweDE3LCAweDA3LCAweGQ1LCAweDI4LCAweDE5LCAweDc5LCAweDFlLCAw eGVmLAotKyAgICAgMHhhNSwgMHgwYywgMHhiZiwgMHgyNSwgMHhlNSwgMHg1NiwgMHhiNCwgMHg5 M30KLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfa2V5WzMyXSA9Ci0rICAg IHsgMHg2ZCwgMHgxNCwgMHgwNiwgMHg2YywgMHhiNiwgMHhkOCwgMHgyMSwgMHgyZCwKLSsgICAg MHg4MiwgMHg4ZCwgMHhmYSwgMHhmMiwgMHg3YSwgMHgwMywgMHhiNywgMHg5ZiwKLSsgICAgMHgw YywgMHhjNywgMHgzZSwgMHhjZCwgMHg3NiwgMHhlYiwgMHhlZSwgMHhiNSwKLSsgICAgMHgyMSwg MHgwNSwgMHg4YywgMHg0ZiwgMHgzMSwgMHg3YSwgMHg4MCwgMHhiYgotK307Ci0rCi0rc3RhdGlj IEFFU19QUk5HX1RWIGFlc18yNTZfdHYgPSB7Ci0rICAgIC8qIERUICovCi0rICAgIHsweGRhLCAw eDNhLCAweDQxLCAweGVjLCAweDFkLCAweGEzLCAweGIwLCAweGQ1LAotKyAgICAgMHhmMiwgMHhh OSwgMHg0ZSwgMHgzNCwgMHg3NCwgMHg4ZSwgMHg5ZSwgMHg4OH0sCi0rICAgIC8qIFYgKi8KLSsg ICAgezB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0rICAg ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKLSsgICAg LyogUiAqLwotKyAgICB7MHgzNSwgMHhjNywgMHhlZiwgMHhhNywgMHg3OCwgMHg0ZCwgMHgyOSwg MHhiYywKLSsgICAgIDB4ODIsIDB4NzksIDB4OTksIDB4ZmIsIDB4ZDAsIDB4YjMsIDB4M2IsIDB4 NzJ9Ci0rfTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmcoKQotK3sKLSsgICAgYWVzXzE5Ml90 di5WWzBdKys7Ci0rfQotKwotKyMgZGVmaW5lIGZpcHNfeDkzMV90ZXN0KGtleSwgdHYpIFwKLSsg ICAgICAgIGRvX3g5MzFfdGVzdChrZXksIHNpemVvZiBrZXksICZ0dikKLSsKLStzdGF0aWMgaW50 IGRvX3g5MzFfdGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIEFFU19QUk5HX1RW ICogdHYpCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIFJbMTZdLCBWWzE2XTsKLSsgICAgaW50IHJ2 ID0gMTsKLSsgICAgbWVtY3B5KFYsIHR2LT5WLCBzaXplb2YoVikpOwotKyAgICBpZiAoIUZJUFNf eDkzMV9zZXRfa2V5KGtleSwga2V5bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAo IWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQotKyAgICAg ICAgcmV0dXJuIDE7Ci0rICAgIGlmICghZmlwc19wb3N0X2NvcnJ1cHQoRklQU19URVNUX1g5MzEs IGtleWxlbiwgTlVMTCkpCi0rICAgICAgICBWWzBdKys7Ci0rICAgIEZJUFNfeDkzMV9zZWVkKFYs IDE2KTsKLSsgICAgRklQU194OTMxX3NldF9kdCh0di0+RFQpOwotKyAgICBGSVBTX3g5MzFfYnl0 ZXMoUiwgMTYpOwotKyAgICBpZiAobWVtY21wKFIsIHR2LT5SLCAxNikpIHsKLSsgICAgICAgIGZp cHNfcG9zdF9mYWlsZWQoRklQU19URVNUX1g5MzEsIGtleWxlbiwgTlVMTCk7Ci0rICAgICAgICBy diA9IDA7Ci0rICAgIH0gZWxzZSBpZiAoIWZpcHNfcG9zdF9zdWNjZXNzKEZJUFNfVEVTVF9YOTMx LCBrZXlsZW4sIE5VTEwpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiBydjsKLSt9 Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfeDkzMSgpCi0rewotKyAgICBpbnQgcnYgPSAxOwotKyAg ICBGSVBTX3g5MzFfcmVzZXQoKTsKLSsgICAgaWYgKCFGSVBTX3g5MzFfdGVzdF9tb2RlKCkpIHsK LSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMSwgRklQU19SX1NFTEZU RVNUX0ZBSUxFRCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBpZiAoIWZpcHNf eDkzMV90ZXN0KGFlc18xMjhfa2V5LCBhZXNfMTI4X3R2KSkKLSsgICAgICAgIHJ2ID0gMDsKLSsg ICAgaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMTkyX2tleSwgYWVzXzE5Ml90dikpCi0rICAgICAg ICBydiA9IDA7Ci0rICAgIGlmICghZmlwc194OTMxX3Rlc3QoYWVzXzI1Nl9rZXksIGFlc18yNTZf dHYpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKLSsgICAgaWYg KCFydikKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfWDkzMSwgRklQU19S X1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgIHJldHVybiBydjsKLSt9Ci0rCi0raW50IEZJUFNfc2Vs ZnRlc3Rfcm5nKHZvaWQpCi0rewotKyAgICByZXR1cm4gRklQU19zZWxmdGVzdF94OTMxKCk7Ci0r fQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19y YW5kdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5j Ci0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMJMjAx NS0wNi0xNSAxNzozMDowMC4wMTAyODQwMjggKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlw dG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTAyODQwMjggKzAy MDAKLUBAIC0wLDAgKzEsMjQ3IEBACi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZ b3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5 IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24g d2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0r ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFs IHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVk IHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91 bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwg REVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50 YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkg dGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBU aW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJpZ2h0IHJlbWFp bnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsg KiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlz IHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlv bgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0r ICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3Jh bSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHBy b3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1 dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2Fy ZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRl biBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhl IHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9t IHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVs YXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29k ZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0 b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGlt IEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICog U1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJt cyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZl IG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBz aW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBs aWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg b3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki Ci0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVk ZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgot KwotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJBTkQg c3VwcG9ydFxuIik7Ci0rICAgIHJldHVybiAoMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rIyBpbmNs dWRlICJmaXBzX3V0bC5oIgotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rdHlwZWRl ZiBzdHJ1Y3QgewotKyAgICB1bnNpZ25lZCBjaGFyIERUWzE2XTsKLSsgICAgdW5zaWduZWQgY2hh ciBWWzE2XTsKLSsgICAgdW5zaWduZWQgY2hhciBSWzE2XTsKLSt9IEFFU19QUk5HX01DVDsKLSsK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X21jdF9rZXlbMTZdID0KLSsgICAg eyAweDlmLCAweDViLCAweDUxLCAweDIwLCAweDBiLCAweGYzLCAweDM0LCAweGI1LAotKyAgICAw eGQ4LCAweDJiLCAweGU4LCAweGMzLCAweDcyLCAweDU1LCAweGM4LCAweDQ4Ci0rfTsKLSsKLStz dGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18xMjhfbWN0X3R2ID0gewotKyAgICAvKiBEVCAq LwotKyAgICB7MHg2MywgMHg3NiwgMHhiYiwgMHhlNSwgMHgyOSwgMHgwMiwgMHhiYSwgMHgzYiwK LSsgICAgIDB4NjcsIDB4YzksIDB4MjUsIDB4ZmEsIDB4NzAsIDB4MWYsIDB4MTEsIDB4YWN9LAot KyAgICAvKiBWICovCi0rICAgIHsweDU3LCAweDJjLCAweDhlLCAweDc2LCAweDg3LCAweDI2LCAw eDQ3LCAweDk3LAotKyAgICAgMHg3ZSwgMHg3NCwgMHhmYiwgMHhkZCwgMHhjNCwgMHg5NSwgMHgw MSwgMHhkMX0sCi0rICAgIC8qIFIgKi8KLSsgICAgezB4NDgsIDB4ZTksIDB4YmQsIDB4MGQsIDB4 MDYsIDB4ZWUsIDB4MTgsIDB4ZmIsCi0rICAgICAweGU0LCAweDU3LCAweDkwLCAweGQ1LCAweGMz LCAweGZjLCAweDliLCAweDczfQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzE5Ml9tY3Rfa2V5WzI0XSA9Ci0rICAgIHsgMHhiNywgMHg2YywgMHgzNCwgMHhkMSwgMHgw OSwgMHg2NywgMHhhYiwgMHg3MywKLSsgICAgMHg0ZCwgMHg1YSwgMHhkNSwgMHgzNCwgMHg5OCwg MHgxNiwgMHgwYiwgMHg5MSwKLSsgICAgMHhiYywgMHgzNSwgMHg1MSwgMHgxNiwgMHg2YiwgMHhh ZSwgMHg5MywgMHg4YQotK307Ci0rCi0rc3RhdGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMTky X21jdF90diA9IHsKLSsgICAgLyogRFQgKi8KLSsgICAgezB4ODQsIDB4Y2UsIDB4MjIsIDB4N2Qs IDB4OTEsIDB4NWEsIDB4YTMsIDB4YzksCi0rICAgICAweDg0LCAweDNjLCAweDBhLCAweGIzLCAw eGE5LCAweDYzLCAweDE1LCAweDUyfSwKLSsgICAgLyogViAqLwotKyAgICB7MHhiNiwgMHhhZiwg MHhlNiwgMHg4ZiwgMHg5OSwgMHg5ZSwgMHg5MCwgMHg2NCwKLSsgICAgIDB4ZGQsIDB4YzcsIDB4 N2EsIDB4YzEsIDB4YmIsIDB4OTAsIDB4M2EsIDB4NmR9LAotKyAgICAvKiBSICovCi0rICAgIHsw eGZjLCAweDg1LCAweDYwLCAweDlhLCAweDI5LCAweDZmLCAweGVmLCAweDIxLAotKyAgICAgMHhk ZCwgMHg4NiwgMHgyMCwgMHgzMiwgMHg4YSwgMHgyOSwgMHg2ZiwgMHg0N30KLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbWN0X2tleVszMl0gPQotKyAgICB7IDB4 OWIsIDB4MDUsIDB4YzgsIDB4NjgsIDB4ZmYsIDB4NDcsIDB4ZjgsIDB4M2EsCi0rICAgIDB4YTYs IDB4M2EsIDB4YTgsIDB4Y2IsIDB4NGUsIDB4NzEsIDB4YjIsIDB4ZTAsCi0rICAgIDB4YjgsIDB4 N2UsIDB4ZjEsIDB4MzcsIDB4YjYsIDB4YjQsIDB4ZjYsIDB4NmQsCi0rICAgIDB4ODYsIDB4MzIs IDB4ZmMsIDB4MWYsIDB4NWUsIDB4MWQsIDB4MWUsIDB4NTAKLSt9OwotKwotK3N0YXRpYyBjb25z dCBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7Ci0rICAgIC8qIERUICovCi0rICAgIHsw eDMxLCAweDZlLCAweDM1LCAweDlhLCAweGIxLCAweDQ0LCAweGYwLCAweGVlLAotKyAgICAgMHg2 MiwgMHg2ZCwgMHgwNCwgMHg0NiwgMHhlMCwgMHhhMywgMHg5MiwgMHg0Y30sCi0rICAgIC8qIFYg Ki8KLSsgICAgezB4NGYsIDB4Y2QsIDB4YzEsIDB4ODcsIDB4ODIsIDB4MWYsIDB4NGQsIDB4YTEs Ci0rICAgICAweDNlLCAweDBlLCAweDU2LCAweDQ0LCAweDU5LCAweGU4LCAweDgzLCAweGNhfSwK LSsgICAgLyogUiAqLwotKyAgICB7MHhjOCwgMHg4NywgMHhjMiwgMHg2MSwgMHg1YiwgMHhkMCwg MHhiOSwgMHhlMSwKLSsgICAgIDB4ZTcsIDB4ZjMsIDB4OGIsIDB4ZDcsIDB4NWIsIDB4ZDUsIDB4 ZjEsIDB4OGR9Ci0rfTsKLSsKLStzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIg KmIsIGludCBuKQotK3sKLSsgICAgd2hpbGUgKG4tLSA+IDApIHsKLSsgICAgICAgIHByaW50Zigi ICUwMngiLCAqYisrKTsKLSsgICAgfQotK30KLSsKLStzdGF0aWMgdm9pZCBjb21wYXJlKGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnJlc3VsdCwKLSsgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmV4cGVjdGVkLCBpbnQgbikKLSt7Ci0rICAgIGludCBpOwotKwotKyAgICBmb3Ig KGkgPSAwOyBpIDwgbjsgKytpKQotKyAgICAgICAgaWYgKHJlc3VsdFtpXSAhPSBleHBlY3RlZFtp XSkgewotKyAgICAgICAgICAgIHB1dHMoIlJhbmRvbSB0ZXN0IGZhaWxlZCwgZ290OiIpOwotKyAg ICAgICAgICAgIGR1bXAocmVzdWx0LCBuKTsKLSsgICAgICAgICAgICBwdXRzKCJcbiAgICAgICAg ICAgICAgIGV4cGVjdGVkOiIpOwotKyAgICAgICAgICAgIGR1bXAoZXhwZWN0ZWQsIG4pOwotKyAg ICAgICAgICAgIHB1dGNoYXIoJ1xuJyk7Ci0rICAgICAgICAgICAgRVhJVCgxKTsKLSsgICAgICAg IH0KLSt9Ci0rCi0rc3RhdGljIHZvaWQgcnVuX3Rlc3QoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5 LCBpbnQga2V5bGVuLAotKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFFU19QUk5HX01DVCAq IHR2KQotK3sKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMTZdLCBkdFsxNl07Ci0rICAgIGludCBp LCBqOwotKyAgICBGSVBTX3g5MzFfcmVzZXQoKTsKLSsgICAgRklQU194OTMxX3Rlc3RfbW9kZSgp OwotKyAgICBGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7Ci0rICAgIEZJUFNfeDkzMV9z ZWVkKHR2LT5WLCAxNik7Ci0rICAgIG1lbWNweShkdCwgdHYtPkRULCAxNik7Ci0rICAgIGZvciAo aSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7Ci0rICAgICAgICBGSVBTX3g5MzFfc2V0X2R0KGR0KTsK LSsgICAgICAgIEZJUFNfeDkzMV9ieXRlcyhidWYsIDE2KTsKLSsgICAgICAgIC8qIEluY3JlbWVu dCBEVCAqLwotKyAgICAgICAgZm9yIChqID0gMTU7IGogPj0gMDsgai0tKSB7Ci0rICAgICAgICAg ICAgZHRbal0rKzsKLSsgICAgICAgICAgICBpZiAoZHRbal0pCi0rICAgICAgICAgICAgICAgIGJy ZWFrOwotKyAgICAgICAgfQotKyAgICB9Ci0rCi0rICAgIGNvbXBhcmUoYnVmLCB0di0+UiwgMTYp OwotK30KLSsKLStpbnQgbWFpbigpCi0rewotKyAgICBydW5fdGVzdChhZXNfMTI4X21jdF9rZXks IDE2LCAmYWVzXzEyOF9tY3RfdHYpOwotKyAgICBwcmludGYoIkZJUFMgUFJORyB0ZXN0IDEgZG9u ZVxuIik7Ci0rICAgIHJ1bl90ZXN0KGFlc18xOTJfbWN0X2tleSwgMjQsICZhZXNfMTkyX21jdF90 dik7Ci0rICAgIHByaW50ZigiRklQUyBQUk5HIHRlc3QgMiBkb25lXG4iKTsKLSsgICAgcnVuX3Rl c3QoYWVzXzI1Nl9tY3Rfa2V5LCAzMiwgJmFlc18yNTZfbWN0X3R2KTsKLSsgICAgcHJpbnRmKCJG SVBTIFBSTkcgdGVzdCAzIGRvbmVcbiIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0rI2VuZGlm Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwotLS0t IG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDE1 LTA2LTE1IDE3OjMwOjAwLjAxMTI4NDA1MSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0 by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTEyODQwNTEg KzAyMDAKLUBAIC0wLDAgKzEsNDQ0IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQg KGMpIDIwMDMtMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K LSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3Jn LgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0r ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8K LSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0r I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgot KwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBu W10gPQotKyAgICAiXHgwMFx4QkJceEY4XHgyRlx4MDlceDA2XHg4Mlx4Q0VceDlDXHgyM1x4Mzhc eEFDXHgyQlx4OURceEE4XHg3MSIKLSsgICAgIlx4RjdceDM2XHg4RFx4MDdceEVFXHhENFx4MTBc eDQzXHhBNFx4NDBceEQ2XHhCNlx4RjBceDc0XHg1NFx4RjUiCi0rICAgICJceDFGXHhCOFx4REZc eEJBXHhBRlx4MDNceDVDXHgwMlx4QUJceDYxXHhFQVx4NDhceENFXHhFQlx4NkZceENEIgotKyAg ICAiXHg0OFx4NzZceEVEXHg1Mlx4MERceDYwXHhFMVx4RUNceDQ2XHgxOVx4NzFceDlEXHg4QVx4 NUJceDhCXHg4MCIKLSsgICAgIlx4N0ZceEFGXHhCOFx4RTBceEEzXHhERlx4QzdceDM3XHg3Mlx4 M0VceEU2XHhCNFx4QjdceEQ5XHgzQVx4MjUiCi0rICAgICJceDg0XHhFRVx4NkFceDY0XHg5RFx4 MDZceDA5XHg1M1x4NzRceDg4XHgzNFx4QjJceDQ1XHg0NVx4OThceDM5IgotKyAgICAiXHg0RVx4 RTBceEFBXHhCMVx4MkRceDdCXHg2MVx4QTVceDFGXHg1Mlx4N0FceDlBXHg0MVx4RjZceEMxXHg2 OCIKLSsgICAgIlx4N0ZceEUyXHg1M1x4NzJceDk4XHhDQVx4MkFceDhGXHg1OVx4NDZceEY4XHhF NVx4RkRceDA5XHgxRFx4QkQiICJceENCIjsKLSsKLStzdGF0aWMgaW50IGNvcnJ1cHRfcnNhOwot KwotK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQotK3sKLSsgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgZVtdID0gIlx4MTEiOwotKwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBkW10gPQotKyAgICAgICAgIlx4MDBceEE1XHhEQVx4RkNceDUzXHg0MVx4RkFceEYy XHg4OVx4QzRceEI5XHg4OFx4REJceDMwXHhDMVx4Q0QiCi0rICAgICAgICAiXHhGOFx4M0ZceDMx XHgyNVx4MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIKLSsg ICAgICAgICJceEIyXHg5NFx4MTBceEIzXHhDN1x4OTlceDhEXHg2Qlx4QzRceDY1XHg3NFx4NUVc eDVDXHgzOVx4MjZceDY5IgotKyAgICAgICAgIlx4RDZceDg3XHgwRFx4QTJceEMwXHg4Mlx4QTlc eDM5XHhFM1x4N0ZceERDXHhCOFx4MkVceEM5XHgzRVx4REEiCi0rICAgICAgICAiXHhDOVx4N0Zc eEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgxMVx4MUNceDc2XHhGMVx4QTlceDUyXHg5NCIK LSsgICAgICAgICJceDQ0XHhFNVx4NkFceEFGXHg2OFx4QzVceDZDXHgwOVx4MkNceEQzXHg4RFx4 QzNceEJFXHhGNVx4RDJceDBBIgotKyAgICAgICAgIlx4OTNceDk5XHgyNlx4RURceDRGXHg3NFx4 QTFceDNFXHhERFx4RkJceEUxXHhBMVx4Q0VceENDXHg0OFx4OTQiCi0rICAgICAgICAiXHhBRlx4 OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFDXHhC MyIKLSsgICAgICAgICJceEMxIjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg cFtdID0KLSsgICAgICAgICJceDAwXHhFRVx4Q0ZceEFFXHg4MVx4QjFceEI5XHhCM1x4QzlceDA4 XHg4MVx4MEJceDEwXHhBMVx4QjVceDYwIgotKyAgICAgICAgIlx4MDFceDk5XHhFQlx4OUZceDQ0 XHhBRVx4RjRceEZEXHhBNFx4OTNceEI4XHgxQVx4OUVceDNEXHg4NFx4RjYiCi0rICAgICAgICAi XHgzMlx4MTJceDRFXHhGMFx4MjNceDZFXHg1RFx4MUVceDNCXHg3RVx4MjhceEZBXHhFN1x4QUFc eDA0XHgwQSIKLSsgICAgICAgICJceDJEXHg1Qlx4MjVceDIxXHg3Nlx4NDVceDlEXHgxRlx4Mzlc eDc1XHg0MVx4QkFceDJBXHg1OFx4RkJceDY1IgotKyAgICAgICAgIlx4OTkiOwotKwotKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQotKyAgICAgICAgIlx4MDBceEM5XHg3Rlx4 QjFceEYwXHgyN1x4RjRceDUzXHhGNlx4MzRceDEyXHgzM1x4RUFceEFBXHhEMVx4RDkiCi0rICAg ICAgICAiXHgzNVx4M0ZceDZDXHg0Mlx4RDBceDg4XHg2Nlx4QjFceEQwXHg1QVx4MEZceDIwXHgz NVx4MDJceDhCXHg5RCIKLSsgICAgICAgICJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgy RVx4OTJceEVBXHgwRFx4QTNceEI0XHgzMlx4MDRceEI1IgotKyAgICAgICAgIlx4Q0ZceENFXHgz M1x4NTJceDUyXHg0RFx4MDRceDE2XHhBNVx4QTRceDQxXHhFN1x4MDBceEFGXHg0Nlx4MTUiCi0r ICAgICAgICAiXHgwMyI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRtcDFb XSA9Ci0rICAgICAgICAiXHg1NFx4NDlceDRDXHhBNlx4M0VceEJBXHgwM1x4MzdceEU0XHhFMlx4 NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKLSsgICAgICAgICJceEVCXHgwN1x4RERceERDXHgwMVx4 ODNceEE0XHhEMFx4QUNceDlCXHg1NFx4QjBceDUxXHhGMlx4QjFceDNFIgotKyAgICAgICAgIlx4 RDlceDQ5XHgwOVx4NzVceEVBXHhCN1x4NzRceDE0XHhGRlx4NTlceEMxXHhGN1x4NjlceDJFXHg5 QVx4MkUiCi0rICAgICAgICAiXHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFceDc0XHhB RFx4QzlceDNDXHgxRlx4NjdceEM5XHg4MSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGRtcTFbXSA9Ci0rICAgICAgICAiXHg0N1x4MUVceDAyXHg5MFx4RkZceDBBXHhGMFx4 NzVceDAzXHg1MVx4QjdceEY4XHg3OFx4ODZceDRDXHhBOSIKLSsgICAgICAgICJceDYxXHhBRFx4 QkRceDNBXHg4QVx4N0VceDk5XHgxQ1x4NUNceDA1XHg1Nlx4QTlceDRDXHgzMVx4NDZceEE3Igot KyAgICAgICAgIlx4RjlceDgwXHgzRlx4OEZceDZGXHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4 QVx4RTRceDdBXHgyMlx4MEQiCi0rICAgICAgICAiXHgxQlx4OTlceEE0XHg5NVx4ODRceDk4XHgw N1x4RkVceDM5XHhGOVx4MjRceDVBXHg5OFx4MzZceERBXHgzRCI7Ci0rCi0rICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGlxbXBbXSA9Ci0rICAgICAgICAiXHgwMFx4QjBceDZDXHg0Rlx4 REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVceDk0XHgyMyIKLSsgICAgICAg ICJceEIzXHg4MFx4RjJceDcxXHhGN1x4MzRceDUzXHg4OFx4NTBceDkzXHgwN1x4N0ZceENEXHgz OVx4RTJceDExIgotKyAgICAgICAgIlx4OUZceEM5XHg4Nlx4MzJceDE1XHg0Rlx4NThceDgzXHhC MVx4NjdceEE5XHg2N1x4QkZceDQwXHgyQlx4NEUiCi0rICAgICAgICAiXHg5RVx4MkVceDBGXHg5 Nlx4NTZceEU2XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKLSsgICAg ICAgICJceEY3IjsKLSsKLSsgICAga2V5LT5uID0gQk5fYmluMmJuKG4sIHNpemVvZihuKSAtIDEs IGtleS0+bik7Ci0rICAgIGlmIChjb3JydXB0X3JzYSkKLSsgICAgICAgIEJOX3NldF9iaXQoa2V5 LT5uLCAxMDI0KTsKLSsgICAga2V5LT5lID0gQk5fYmluMmJuKGUsIHNpemVvZihlKSAtIDEsIGtl eS0+ZSk7Ci0rICAgIGtleS0+ZCA9IEJOX2JpbjJibihkLCBzaXplb2YoZCkgLSAxLCBrZXktPmQp OwotKyAgICBrZXktPnAgPSBCTl9iaW4yYm4ocCwgc2l6ZW9mKHApIC0gMSwga2V5LT5wKTsKLSsg ICAga2V5LT5xID0gQk5fYmluMmJuKHEsIHNpemVvZihxKSAtIDEsIGtleS0+cSk7Ci0rICAgIGtl eS0+ZG1wMSA9IEJOX2JpbjJibihkbXAxLCBzaXplb2YoZG1wMSkgLSAxLCBrZXktPmRtcDEpOwot KyAgICBrZXktPmRtcTEgPSBCTl9iaW4yYm4oZG1xMSwgc2l6ZW9mKGRtcTEpIC0gMSwga2V5LT5k bXExKTsKLSsgICAga2V5LT5pcW1wID0gQk5fYmluMmJuKGlxbXAsIHNpemVvZihpcW1wKSAtIDEs IGtleS0+aXFtcCk7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9y c2EoKQotK3sKLSsgICAgY29ycnVwdF9yc2EgPSAxOwotK30KLSsKLSsvKiBLbm93biBBbnN3ZXIg VGVzdCAoS0FUKSBkYXRhIGZvciB0aGUgYWJvdmUgUlNBIHByaXZhdGUga2V5IHNpZ25pbmcKLSsg KiBrYXRfdGJzLgotKyAqLwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF90YnNb XSA9Ci0rICAgICJPcGVuU1NMIEZJUFMgMTQwLTIgUHVibGljIEtleSBSU0EgS0FUIjsKLSsKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEExW10gPSB7Ci0rICAgIDB4 MkQsIDB4QUYsIDB4NkUsIDB4QzIsIDB4OTgsIDB4RkIsIDB4OEEsIDB4QTEsIDB4QjksIDB4NDYs IDB4REEsIDB4MEYsCi0rICAgIDB4MDEsIDB4MUUsIDB4MzcsIDB4OTMsIDB4QzIsIDB4NTUsIDB4 MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIsCi0rICAgIDB4RjQsIDB4QkYsIDB4NEEs IDB4NzQsIDB4MzksIDB4NTEsIDB4QkIsIDB4RTgsIDB4MEMsIDB4QjcsIDB4RjgsIDB4RDMsCi0r ICAgIDB4RDEsIDB4REYsIDB4RTcsIDB4QkUsIDB4ODAsIDB4MDUsIDB4QzMsIDB4QjUsIDB4Qzcs IDB4ODMsIDB4RDUsIDB4NEMsCi0rICAgIDB4N0YsIDB4NDksIDB4RkIsIDB4M0YsIDB4MjksIDB4 OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAsIDB4QTcsCi0rICAgIDB4MEQsIDB4QTks IDB4MjgsIDB4NTYsIDB4NzMsIDB4RDksIDB4MDcsIDB4RTMsIDB4NUUsIDB4M0YsIDB4OUIsIDB4 RjUsCi0rICAgIDB4QjYsIDB4RjMsIDB4RjIsIDB4NUUsIDB4NzQsIDB4QzksIDB4ODMsIDB4ODEs IDB4NDcsIDB4RjAsIDB4QzUsIDB4NDUsCi0rICAgIDB4MEEsIDB4RTksIDB4OEUsIDB4MzgsIDB4 RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4QjcsIDB4MzEsCi0rICAgIDB4RDYs IDB4NTUsIDB4RTQsIDB4NjYsIDB4NzgsIDB4ODEsIDB4RDQsIDB4RTYsIDB4REIsIDB4OUYsIDB4 QkEsIDB4RTgsCi0rICAgIDB4MjMsIDB4QjUsIDB4N0YsIDB4REMsIDB4MDgsIDB4RUEsIDB4RDUs IDB4MjYsIDB4MUUsIDB4MjAsIDB4MjUsIDB4ODQsCi0rICAgIDB4MjYsIDB4QzYsIDB4NzksIDB4 QzksIDB4OUIsIDB4M0QsIDB4N0UsIDB4QTkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGthdF9SU0FfUFNTX1NIQTIyNFtdID0gewotKyAgICAweDM5LCAweDRBLCAweDZBLCAw eDIwLCAweEJDLCAweEU5LCAweDMzLCAweEVELCAweEVGLCAweEM1LCAweDU4LCAweEE3LAotKyAg ICAweEZFLCAweDgxLCAweEM0LCAweDM2LCAweDUwLCAweDlBLCAweDJDLCAweDgyLCAweDk4LCAw eDA4LCAweDk1LCAweEZBLAotKyAgICAweEIxLCAweDlFLCAweEQyLCAweDU1LCAweDYxLCAweDg3 LCAweDIxLCAweDU5LCAweDg3LCAweDdCLCAweDFGLCAweDU3LAotKyAgICAweDMwLCAweDlELCAw eDBELCAweDRBLCAweDA2LCAweEVCLCAweDUyLCAweDM3LCAweDU1LCAweDU0LCAweDFDLCAweDg5 LAotKyAgICAweDgzLCAweDc1LCAweDU5LCAweDY1LCAweDY0LCAweDkwLCAweDJFLCAweDE2LCAw eENDLCAweDg2LCAweDA1LCAweEVFLAotKyAgICAweEIxLCAweEU2LCAweDdCLCAweEJBLCAweDE2 LCAweDc1LCAweDBELCAweDBDLCAweDY0LCAweDBCLCAweEFCLCAweDIyLAotKyAgICAweDE1LCAw eDc4LCAweDZCLCAweDZGLCAweEE0LCAweEZCLCAweDc3LCAweDQwLCAweDY0LCAweDYyLCAweEQx LCAweEI1LAotKyAgICAweDM3LCAweDFFLCAweEUwLCAweDNELCAweEE4LCAweEY5LCAweEQyLCAw eEJELCAweEFBLCAweDM4LCAweDI0LCAweDQ5LAotKyAgICAweDU4LCAweEQyLCAweDc0LCAweDg1 LCAweEY0LCAweEI1LCAweDkzLCAweDhFLCAweEY1LCAweDAzLCAweEVBLCAweDJELAotKyAgICAw eEM4LCAweDUyLCAweEZBLCAweENGLCAweDdFLCAweDM1LCAweEIwLCAweDZBLCAweEFGLCAweDk1 LCAweEMwLCAweDAwLAotKyAgICAweDU0LCAweDc2LCAweDNELCAweDBDLCAweDlDLCAweEIyLCAw eEVFLCAweEMwCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BT U19TSEEyNTZbXSA9IHsKLSsgICAgMHg2RCwgMHgzRCwgMHhCRSwgMHg4RiwgMHg2MCwgMHg2RCwg MHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwgMHhFMywgMHg4OSwKLSsgICAgMHgwMCwgMHg5NywgMHhG QSwgMHg5OSwgMHg3MSwgMHgyOCwgMHhFNSwgMHgxMCwgMHgyNSwgMHg5QSwgMHhGMywgMHg4RiwK LSsgICAgMHg3QiwgMHhDNSwgMHhBOCwgMHg0QSwgMHg3NCwgMHg1MSwgMHgzNiwgMHhFMiwgMHg4 RCwgMHg3RCwgMHg3MywgMHgyOCwKLSsgICAgMHhDMSwgMHg3NywgMHhDNiwgMHgyNywgMHg5Nywg MHgwMCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5NiwgMHg3MywgMHg0RSwKLSsgICAgMHg3RCwgMHgy RSwgMHgyQywgMHgzNCwgMHg2OCwgMHg4QywgMHg4RSwgMHhERiwgMHg5RCwgMHg0OSwgMHg0Nywg MHgwNSwKLSsgICAgMHhBQiwgMHhGNSwgMHgwMSwgMHhENiwgMHg4MSwgMHg0NywgMHg3MCwgMHhG NSwgMHgxRCwgMHg2RCwgMHgyNiwgMHhCQSwKLSsgICAgMHgyRiwgMHg3QSwgMHg1NCwgMHg1Mywg MHg0RSwgMHhFRCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhGMywgMHhEQSwgMHhCNiwKLSsgICAgMHgw QiwgMHg0NywgMHgzNCwgMHhBRiwgMHg5MCwgMHhEQywgMHhDOCwgMHhEOSwgMHg2RiwgMHg1Niwg MHhDRCwgMHg5RiwKLSsgICAgMHgyMSwgMHhCNywgMHg3RSwgMHhBRCwgMHg3QywgMHgyRiwgMHg3 NSwgMHg1MCwgMHg0NywgMHgxMiwgMHhFNCwgMHg2RCwKLSsgICAgMHg1RiwgMHhCNywgMHgwMSwg MHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhBOSwgMHg5RSwgMHg0OSwgMHhCOSwgMHhGNiwKLSsg ICAgMHg3MiwgMHhGNCwgMHhGNiwgMHhFRiwgMHg4OCwgMHgxRSwgMHgyRCwgMHgxQwotK307Ci0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMzg0W10gPSB7Ci0r ICAgIDB4NDAsIDB4RkIsIDB4QTEsIDB4MjEsIDB4RjQsIDB4QjIsIDB4NDAsIDB4OUEsIDB4QjQs IDB4MzEsIDB4QTgsIDB4RjIsCi0rICAgIDB4RUMsIDB4MUMsIDB4QzQsIDB4QzgsIDB4N0MsIDB4 MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCi0rICAgIDB4ODYsIDB4MDAs IDB4RjcsIDB4MjUsIDB4NzgsIDB4REUsIDB4REMsIDB4N0EsIDB4NzEsIDB4NDQsIDB4OUEsIDB4 Q0QsCi0rICAgIDB4QUEsIDB4MjUsIDB4RjQsIDB4QjIsIDB4RkMsIDB4RjAsIDB4NzUsIDB4RDks IDB4MkYsIDB4NzgsIDB4MjMsIDB4N0YsCi0rICAgIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEsIDB4 QUYsIDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCi0rICAgIDB4QjIs IDB4NDQsIDB4RTUsIDB4NEQsIDB4NjYsIDB4QTIsIDB4RTYsIDB4NzEsIDB4RjMsIDB4QUMsIDB4 NEYsIDB4RkIsCi0rICAgIDB4OTEsIDB4Q0EsIDB4RjUsIDB4NzAsIDB4RUYsIDB4NkIsIDB4OUQs IDB4QTQsIDB4RUYsIDB4RDksIDB4M0QsIDB4MkYsCi0rICAgIDB4M0EsIDB4QkUsIDB4ODksIDB4 MzgsIDB4NTksIDB4MDEsIDB4QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCi0rICAg IDB4OTgsIDB4OEIsIDB4MzksIDB4NDQsIDB4RjAsIDB4RkMsIDB4MzgsIDB4QUMsIDB4ODcsIDB4 MUYsIDB4Q0EsIDB4NkYsCi0rICAgIDB4NDgsIDB4RjYsIDB4QUUsIDB4RDcsIDB4NDUsIDB4RUUs IDB4QUUsIDB4ODgsIDB4MEUsIDB4NjAsIDB4RjQsIDB4NTUsCi0rICAgIDB4NDgsIDB4NDQsIDB4 RUUsIDB4MUYsIDB4OTAsIDB4MTgsIDB4NEIsIDB4RjEKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTUxMltdID0gewotKyAgICAweDA3LCAweDFFLCAw eEQ4LCAweEQ1LCAweDA1LCAweEU4LCAweEU2LCAweEU2LCAweDU3LCAweEFFLCAweDYzLCAweDhD LAotKyAgICAweEM2LCAweDgzLCAweEI3LCAweEEwLCAweDU5LCAweEJCLCAweEYyLCAweEM2LCAw eDhGLCAweDEyLCAweDUzLCAweDlBLAotKyAgICAweDlCLCAweDU0LCAweDlFLCAweEIzLCAweEMx LCAweDFELCAweDIzLCAweDRELCAweDUxLCAweEVELCAweDlFLCAweERELAotKyAgICAweDRCLCAw eEYzLCAweDQ2LCAweDlCLCAweDZCLCAweEY2LCAweDdDLCAweDI0LCAweDYwLCAweDc5LCAweDIz LCAweDM5LAotKyAgICAweDAxLCAweDFDLCAweDUxLCAweENCLCAweEQ4LCAweEU5LCAweDlBLCAw eDAxLCAweDY3LCAweDVGLCAweEZFLCAweEQ3LAotKyAgICAweDdDLCAweEUzLCAweDdGLCAweEVE LCAweERCLCAweDg3LCAweEJCLCAweEYwLCAweDNELCAweDc4LCAweDU1LCAweDYxLAotKyAgICAw eDU3LCAweEUzLCAweDBGLCAweEUzLCAweEQyLCAweDlELCAweDBDLCAweDJBLCAweDIwLCAweEIw LCAweDg1LCAweDEzLAotKyAgICAweEM1LCAweDQ3LCAweDM0LCAweDBELCAweDMyLCAweDE1LCAw eEM4LCAweEFFLCAweDlBLCAweDZBLCAweDM5LCAweDYzLAotKyAgICAweDJELCAweDYwLCAweEY1 LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAweDRCLCAweEJGLCAweEY0LCAweEE4LCAweEZFLAot KyAgICAweDc2LCAweEYyLCAweDMyLCAweDFCLCAweDlDLCAweDdDLCAweENBLCAweEZFLCAweDdG LCAweDgwLCAweEMyLCAweDg4LAotKyAgICAweDVDLCAweDk3LCAweDcwLCAweEI0LCAweDI2LCAw eEM5LCAweDE0LCAweDhCCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRf UlNBX1NIQTFbXSA9IHsKLSsgICAgMHg3MSwgMHhFRSwgMHgxQSwgMHhDMCwgMHhGRSwgMHgwMSwg MHg5MywgMHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0QywKLSsgICAgMHg0QSwgMHhGRCwgMHgx QSwgMHgwNSwgMHg4RiwgMHg2NCwgMHhCMSwgMHg2RCwgMHg2MSwgMHgzMywgMHg4RCwgMHg5QiwK LSsgICAgMHhFNywgMHhGRCwgMHg2MCwgMHhBMywgMHg4MywgMHhCNSwgMHhBMywgMHg1MSwgMHg1 NSwgMHg3NywgMHg5MCwgMHhDRiwKLSsgICAgMHhEQywgMHgyMiwgMHgzNywgMHg4RSwgMHhEMCwg MHhFMSwgMHhBRSwgMHgwOSwgMHhFMywgMHgzRCwgMHgxRSwgMHhGOCwKLSsgICAgMHg4MCwgMHhE MSwgMHg4QiwgMHhDMiwgMHhFQywgMHgwQSwgMHhENywgMHg2QiwgMHg4OCwgMHg4QiwgMHg4Qiwg MHhBMSwKLSsgICAgMHgyMCwgMHgyMiwgMHhCRSwgMHg1OSwgMHg1QiwgMHhFMCwgMHgyMywgMHgy NCwgMHhBMSwgMHg0OSwgMHgzMCwgMHhCQSwKLSsgICAgMHhBOSwgMHg5RSwgMHhFOCwgMHhCMSwg MHg4QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwgMHhDQSwgMHgyRSwgMHg0RSwKLSsgICAgMHhC QywgMHgyOSwgMHhBOCwgMHg2NywgMHgxMywgMHhCNywgMHg5RiwgMHgxRCwgMHgwNCwgMHg0NCwg MHhFNSwgMHg1RiwKLSsgICAgMHgzNSwgMHgwNywgMHgxMSwgMHhCQywgMHhFRCwgMHgxOSwgMHgz NywgMHgyMSwgMHhDRiwgMHgyMywgMHg0OCwgMHgxRiwKLSsgICAgMHg3MiwgMHgwNSwgMHhERSwg MHhFNiwgMHhFOCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3NiwgMHg0QiwgMHgyRiwgMHg5NSwKLSsg ICAgMHhERiwgMHhGMSwgMHg1RiwgMHg4NCwgMHg4MCwgMHhEOSwgMHg0NiwgMHhCNAotK307Ci0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyMjRbXSA9IHsKLSsgICAg MHg2MiwgMHhBQSwgMHg3OSwgMHhBOSwgMHgxOCwgMHgwRSwgMHg1RiwgMHg4QywgMHhCQiwgMHhC NywgMHgxNSwgMHhGOSwKLSsgICAgMHgyNSwgMHhCQiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwg MHhFRCwgMHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwKLSsgICAgMHg1QiwgMHg1NSwgMHg5 QSwgMHg3RSwgMHgxRSwgMHgwOCwgMHgwOCwgMHg2MCwgMHhDNSwgMHgxQSwgMHhDNSwgMHg4OSwK LSsgICAgMHgwOCwgMHhFMiwgMHgxQiwgMHhCRCwgMHg2MiwgMHg1MCwgMHgxNywgMHg3NiwgMHgz MCwgMHgyQywgMHg5RSwgMHhDRCwKLSsgICAgMHhBNCwgMHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwg MHg0NCwgMHg2RCwgMHhENSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwKLSsgICAgMHhFRSwgMHgx RiwgMHg4RCwgMHg3RSwgMHgwOCwgMHgxNiwgMHhBNiwgMHhFMSwgMHg1RSwgMHgwQiwgMHhBOSwg MHhDQywKLSsgICAgMHhEQiwgMHg1OSwgMHg1NSwgMHg4NywgMHgwOSwgMHgyNSwgMHg3MCwgMHg4 NiwgMHg4NCwgMHgwMiwgMHhDNiwgMHgzQiwKLSsgICAgMHgwQiwgMHg0NCwgMHg0QywgMHg0Niwg MHg5NSwgMHhGNCwgMHhGOCwgMHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwKLSsgICAgMHg1 OCwgMHgyRSwgMHgwNiwgMHg0NSwgMHg0OSwgMHhFMCwgMHg5MiwgMHhFMiwgMHhDMCwgMHg2Niwg MHhFNiwgMHgzNSwKLSsgICAgMHhEOSwgMHg3OSwgMHg3RiwgMHgxNywgMHg1RSwgMHgwMiwgMHg3 MywgMHgwNCwgMHg3NywgMHg4MiwgMHhFNiwgMHhEQywKLSsgICAgMHg0MCwgMHgyMSwgMHg4OSwg MHg4QiwgMHgzNywgMHgzRSwgMHgxRSwgMHg4RAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9TSEEyNTZbXSA9IHsKLSsgICAgMHgwRCwgMHg1NSwgMHhFMiwgMHhB QSwgMHg4MSwgMHhEQiwgMHg4RSwgMHg4MiwgMHgwNSwgMHgxNywgMHhBNSwgMHgyMywKLSsgICAg MHhFNywgMHgzQiwgMHgxRCwgMHhBRiwgMHhGQiwgMHg4QywgMHhEMCwgMHg4MSwgMHgyMCwgMHg3 QiwgMHhBQSwgMHgyMywKLSsgICAgMHg5MiwgMHg4NywgMHg4QywgMHhEMSwgMHg1MywgMHg4NSwg MHgxNiwgMHhEQywgMHhCRSwgMHhBRCwgMHg2RiwgMHgzNSwKLSsgICAgMHg5OCwgMHgyRCwgMHg2 OSwgMHg4NCwgMHhCRiwgMHhEOSwgMHg4QSwgMHgwMSwgMHgxNywgMHg1OCwgMHhCMiwgMHg2RSwK LSsgICAgMHgyQywgMHg0NCwgMHg5QiwgMHg5MCwgMHhGMSwgMHhGQiwgMHg1MSwgMHhFOCwgMHg2 QSwgMHg5MCwgMHgyRCwgMHgxOCwKLSsgICAgMHgwRSwgMHhDMCwgMHg5MCwgMHgxMCwgMHgyNCwg MHhBOSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwgMHg5MSwgMHgzMCwKLSsgICAgMHhCRSwgMHgy MiwgMHhDNywgMHhEMywgMHhFQywgMHhDMywgMHgwOSwgMHg1RCwgMHhCRiwgMHhFMiwgMHg4MCwg MHgzQSwKLSsgICAgMHg3QywgMHg4NSwgMHhCNCwgMHhCQywgMHhEMSwgMHhFOSwgMHhGMCwgMHg1 QywgMHhERSwgMHg4MSwgMHhBNiwgMHgzOCwKLSsgICAgMHhCOCwgMHg0MiwgMHhCQiwgMHg4Niwg MHhDNSwgMHg5RCwgMHhDRSwgMHg3QywgMHgyQywgMHhFRSwgMHhEMSwgMHhEQSwKLSsgICAgMHgy NywgMHg0OCwgMHgyQiwgMHhGNSwgMHhBQiwgMHhCOSwgMHhGNywgMHg4MCwgMHhEMSwgMHg5MCwg MHgyNywgMHg5MCwKLSsgICAgMHhCRCwgMHg0NCwgMHg5NywgMHg2MCwgMHhDRCwgMHg1NywgMHhD MCwgMHg3QQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEz ODRbXSA9IHsKLSsgICAgMHgxRCwgMHhFMywgMHg2QSwgMHhERCwgMHgyNywgMHg0QywgMHhDMCwg MHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgxRiwKLSsgICAgMHhEMiwgMHg5MSwgMHg2OCwgMHg1 OSwgMHgwNCwgMHhBRSwgMHhCRCwgMHg5OSwgMHg2MywgMHg1NiwgMHg0NywgMHhDNywKLSsgICAg MHg2RiwgMHgyMiwgMHgxNiwgMHg0OCwgMHhEMCwgMHhGOSwgMHgxOCwgMHhBOSwgMHhDQSwgMHhG QSwgMHg1RCwgMHg1QywKLSsgICAgMHhBNywgMHg2NSwgMHg1MiwgMHg4QSwgMHhDOCwgMHg0NCwg MHg3RSwgMHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1NSwKLSsgICAgMHg2NSwgMHgzRSwgMHhE OSwgMHgyRCwgMHgwMiwgMHgzOCwgMHhBOCwgMHg3OSwgMHgyOCwgMHg3RiwgMHhCNiwgMHhDRiwK LSsgICAgMHg4MiwgMHhERCwgMHg3RSwgMHg1NSwgMHhFMSwgMHhCMSwgMHhCQywgMHhFMiwgMHgx OSwgMHgyQiwgMHgzMCwgMHhDMiwKLSsgICAgMHgxQiwgMHgyQiwgMHhCMCwgMHg4MiwgMHg0Niwg MHhBQywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3RCwgMHhFQiwgMHg4QywKLSsgICAgMHhGRiwgMHg5 NSwgMHhFOSwgMHg2QSwgMHgxQywgMHgzRCwgMHg0RCwgMHhCRiwgMHg4RiwgMHg4QiwgMHg5Qywg MHhDRCwKLSsgICAgMHhFQSwgMHg4NSwgMHhFRSwgMHgwMCwgMHhEQywgMHgxQywgMHhBNywgMHhF QiwgMHhEMCwgMHg4RiwgMHg5OSwgMHhGMSwKLSsgICAgMHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwg MHgwNCwgMHgzOSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgzNywgMHhEQywgMHgwNCwKLSsgICAgMHhC RCwgMHgzMSwgMHhBMiwgMHgyRiwgMHhCMywgMHgzNSwgMHg1NiwgMHhCRgotK307Ci0rCi0rc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEE1MTJbXSA9IHsKLSsgICAgMHg2OSwg MHg1MiwgMHgxQiwgMHg1MSwgMHg1RSwgMHgwNiwgMHhDQSwgMHg5QiwgMHgxNiwgMHg1MSwgMHg1 RCwgMHhDRiwKLSsgICAgMHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0Qywg MHgzNiwgMHg0MCwgMHhGOCwgMHhCMiwgMHg5QSwKLSsgICAgMHgxNSwgMHhFQSwgMHg1QywgMHhF NSwgMHhFNiwgMHg4MiwgMHhFMCwgMHg4NiwgMHg4MiwgMHg2QiwgMHgzMiwgMHhGMSwKLSsgICAg MHgwNCwgMHhDMSwgMHg1QSwgMHgxQSwgMHhFRCwgMHgxRSwgMHg5QSwgMHhCNiwgMHg0QywgMHg1 NCwgMHg5RiwgMHhEOCwKLSsgICAgMHg4RCwgMHhDQywgMHhBQywgMHg4QSwgMHhCQiwgMHg5Qywg MHg4MiwgMHgzRiwgMHhBNiwgMHg1MywgMHg2MiwgMHhCNSwKLSsgICAgMHg4MCwgMHhFMiwgMHhC QywgMHhERCwgMHg2NywgMHgyQiwgMHhEOSwgMHgzRiwgMHhFNCwgMHg3NSwgMHg5MiwgMHg2QiwK LSsgICAgMHhBRiwgMHg2MiwgMHg3QywgMHg1MiwgMHhGMCwgMHhFRSwgMHgzMywgMHhERiwgMHgx QiwgMHgxRCwgMHg0NywgMHhFNiwKLSsgICAgMHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwgMHg1Qywg MHhFNiwgMHg3NywgMHg3OCwgMHgxNiwgMHg2MywgMHg4NCwgMHgwNSwKLSsgICAgMHg2RiwgMHgw RSwgMHgyQiwgMHgzMSwgMHg5RCwgMHhGNywgMHg3RiwgMHhCMiwgMHg2NCwgMHg3MSwgMHhFMCwg MHgyRCwKLSsgICAgMHgzRSwgMHg2MiwgMHhDRSwgMHhCNSwgMHgzRiwgMHg4OCwgMHhERiwgMHgy RCwgMHhBQiwgMHg5OCwgMHg2NSwgMHg5MSwKLSsgICAgMHhERiwgMHg3MCwgMHgxNCwgMHhBNSwg MHgzRiwgMHgzNiwgMHhBQiwgMHg4NAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsKLSsgICAgMHg4NiwgMHhCNCwgMHgxOCwgMHhCQSwg MHhEMSwgMHg4MCwgMHhCNiwgMHg3QywgMHg0MiwgMHg0NSwgMHg0RCwgMHhERiwKLSsgICAgMHhF OSwgMHgyRCwgMHhFMSwgMHg4MywgMHg1RiwgMHhCNSwgMHgyRiwgMHhDOSwgMHhDRCwgMHhDNCwg MHhCMiwgMHg3NSwKLSsgICAgMHg4MCwgMHhBNCwgMHhGMSwgMHg0QSwgMHhFNywgMHg4MywgMHgx MiwgMHgxRSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywKLSsgICAgMHgzNSwgMHhFMiwgMHhBQSwg MHgwQiwgMHg1QywgMHhGOCwgMHgzOCwgMHg0RCwgMHgwNCwgMHhFRSwgMHhBOSwgMHg5NywKLSsg ICAgMHg3MCwgMHhGQiwgMHg1RSwgMHhFNywgMHhCNywgMHhFMywgMHg2MiwgMHgyMywgMHg0Qiwg MHgzOCwgMHhCRSwgMHhENiwKLSsgICAgMHg1MywgMHgxNSwgMHhGNywgMHhERiwgMHg4NywgMHhC NCwgMHgwRSwgMHhDQywgMHhCMSwgMHgxQSwgMHgxMSwgMHgxOSwKLSsgICAgMHhFRSwgMHg1MSwg MHhDQywgMHg5MiwgMHhERCwgMHhCQywgMHg2MywgMHgyOSwgMHg2MywgMHgwQywgMHg1OSwgMHhE NywKLSsgICAgMHg2RiwgMHg0QywgMHgzQywgMHgzNywgMHg1QiwgMHgzNywgMHgwMywgMHg2MSwg MHg3RCwgMHgyNCwgMHgxQywgMHg5OSwKLSsgICAgMHg0OCwgMHhBRiwgMHg4MiwgMHhGRSwgMHgz MiwgMHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhFQSwgMHhFRCwgMHg3NiwKLSsgICAgMHg4RSwg MHg2RSwgMHhDQSwgMHg3RSwgMHg0RSwgMHgxNCwgMHhCQSwgMHgzMCwgMHg4NCwgMHgxQywgMHhC MywgMHg2NywKLSsgICAgMHhBMywgMHgyOSwgMHg4MCwgMHg3MCwgMHg1NCwgMHg2OCwgMHg3RCwg MHg0OQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NI QTI1NltdID0gewotKyAgICAweDdFLCAweEEyLCAweDc3LCAweEZFLCAweEI4LCAweDU0LCAweDhB LCAweEM3LCAweDdGLCAweDY0LCAweDU0LCAweDg5LAotKyAgICAweEU1LCAweDUyLCAweDE1LCAw eDhFLCAweDUyLCAweDk2LCAweDRFLCAweEE2LCAweDU4LCAweDkyLCAweDFDLCAweERELAotKyAg ICAweEVBLCAweEEyLCAweDJELCAweDVDLCAweEQxLCAweDYyLCAweDAwLCAweDQ5LCAweDA1LCAw eDk1LCAweDczLCAweENGLAotKyAgICAweDE2LCAweDc2LCAweDY4LCAweEY2LCAweEM2LCAweDVF LCAweDgwLCAweEI4LCAweEI4LCAweDdCLCAweEM4LCAweDlCLAotKyAgICAweEM2LCAweDUzLCAw eDg4LCAweDI2LCAweDIwLCAweDg4LCAweDczLCAweEI2LCAweDEzLCAweEI4LCAweEYwLCAweDRC LAotKyAgICAweDAwLCAweDg1LCAweEYzLCAweERELCAweDA3LCAweDUwLCAweEVCLCAweDIwLCAw eEM0LCAweDM4LCAweDBFLCAweDk4LAotKyAgICAweEFELCAweDRFLCAweDQ5LCAweDJDLCAweEQ3 LCAweDY1LCAweEE1LCAweDE5LCAweDBFLCAweDU5LCAweDAxLCAweEVDLAotKyAgICAweDdFLCAw eDc1LCAweDg5LCAweDY5LCAweDJFLCAweDYzLCAweDc2LCAweDg1LCAweDQ2LCAweDhELCAweEEw LCAweDhDLAotKyAgICAweDMzLCAweDFELCAweDgyLCAweDhDLCAweDAzLCAweEVBLCAweDY5LCAw eDg4LCAweDM1LCAweEExLCAweDQyLCAweEJELAotKyAgICAweDIxLCAweEVELCAweDhELCAweEJD LCAweEJDLCAweERCLCAweDMwLCAweEZGLCAweDg2LCAweEYwLCAweDVCLCAweERDLAotKyAgICAw eEUzLCAweEUyLCAweEU4LCAweDBBLCAweDBBLCAweDI5LCAweDk0LCAweDgwCi0rfTsKLSsKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMzg0W10gPSB7Ci0rICAg IDB4NUMsIDB4N0QsIDB4OTYsIDB4MzUsIDB4RUMsIDB4N0UsIDB4MTEsIDB4MzgsIDB4QkIsIDB4 N0IsIDB4RUMsIDB4N0IsCi0rICAgIDB4RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4RUYs IDB4RDgsIDB4QUUsIDB4RDcsIDB4MzksIDB4MzcsIDB4Q0IsCi0rICAgIDB4RTYsIDB4NEYsIDB4 NUUsIDB4MEEsIDB4MTMsIDB4RTQsIDB4MkUsIDB4NDAsIDB4QjksIDB4QkUsIDB4MkUsIDB4RTMs Ci0rICAgIDB4RUYsIDB4NzgsIDB4ODMsIDB4MTgsIDB4NDQsIDB4MzUsIDB4OUMsIDB4OEUsIDB4 RDcsIDB4NEEsIDB4NjMsIDB4RjYsCi0rICAgIDB4NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEs IDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTksIDB4NjYsIDB4RUUsIDB4MzEsCi0rICAgIDB4RDgsIDB4 NjksIDB4RTksIDB4QUIsIDB4MTMsIDB4MjcsIDB4N0IsIDB4NDEsIDB4MUUsIDB4NkQsIDB4OEQs IDB4RjEsCi0rICAgIDB4M0UsIDB4OUMsIDB4MzUsIDB4OTUsIDB4NTgsIDB4REQsIDB4MkIsIDB4 RDUsIDB4QTAsIDB4NjAsIDB4NDEsIDB4NzksCi0rICAgIDB4MjQsIDB4MjIsIDB4RTQsIDB4Qjcs IDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQsIDB4RDUsIDB4N0MsIDB4RkYsCi0rICAgIDB4 MEUsIDB4MDksIDB4RUUsIDB4MkUsIDB4RTIsIDB4MzcsIDB4QjksIDB4REUsIDB4QzUsIDB4MTIs IDB4NDQsIDB4MzUsCi0rICAgIDB4RUYsIDB4MDEsIDB4RTYsIDB4NUUsIDB4MzksIDB4MzEsIDB4 MkQsIDB4NzEsIDB4QTUsIDB4REMsIDB4QzYsIDB4NkQsCi0rICAgIDB4RTIsIDB4Q0QsIDB4ODUs IDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9IHsKLSsgICAgMHhBNiwgMHg2NSwgMHhB MiwgMHg3NywgMHg0RiwgMHhCMywgMHg4NiwgMHhDQiwgMHg2NCwgMHgzQSwgMHhDMSwgMHg2MywK LSsgICAgMHhGQywgMHhBMSwgMHhBQSwgMHhDQiwgMHg5QiwgMHg3OSwgMHhERCwgMHg0QiwgMHhF MSwgMHhEOSwgMHhEQSwgMHhBQywKLSsgICAgMHhFNywgMHg0NywgMHgwOSwgMHhCMiwgMHgxMSwg MHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5RSwgMHg3NywgMHhENywKLSsgICAgMHgzQSwgMHhC RCwgMHg1RSwgMHg1MywgMHgwOSwgMHg0QSwgMHhFNiwgMHgwRiwgMHg1RSwgMHhGOSwgMHgxNCwg MHgyOCwKLSsgICAgMHhBMCwgMHg5OSwgMHg3NCwgMHg2NCwgMHg3MCwgMHg0RSwgMHhGMiwgMHhF MywgMHhGQSwgMHhDNywgMHhGOCwgMHhDNSwKLSsgICAgMHg2RSwgMHgyQiwgMHg3OSwgMHg5Niwg MHgwRCwgMHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1MywgMHhEMiwgMHhBRiwKLSsgICAgMHgx NywgMHgwRSwgMHhFMCwgMHhCRiwgMHg3OSwgMHhGNiwgMHgwNCwgMHg3MiwgMHgxMCwgMHhFMCwg MHhGNiwgMHhEMCwKLSsgICAgMHhDRSwgMHg4QSwgMHg2RiwgMHhBMSwgMHg5NSwgMHg4OSwgMHhC RiwgMHg1OCwgMHg4RiwgMHg0NiwgMHg1RiwgMHgwOSwKLSsgICAgMHg5RiwgMHgwOSwgMHhDQSwg MHg4NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhFRCwgMHgwNCwgMHgyRCwgMHhGQiwgMHg3QywKLSsg ICAgMHgzNiwgMHgzNSwgMHgyMSwgMHgzMSwgMHhDMywgMHhGRCwgMHg5MiwgMHg0MiwgMHgxMSwg MHgzMCwgMHg3MSwgMHgxQiwKLSsgICAgMHg2MCwgMHg4MywgMHgxOCwgMHg4OCwgMHhBMywgMHhG NSwgMHg1OSwgMHhDMwotK307Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfcnNhKCkKLSt7Ci0rICAg IGludCByZXQgPSAwOwotKyAgICBSU0EgKmtleTsKLSsgICAgRVZQX1BLRVkgKnBrID0gTlVMTDsK LSsKLSsgICAgaWYgKChrZXkgPSBSU0FfbmV3KCkpID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVy cjsKLSsgICAgc2V0cnNha2V5KGtleSk7Ci0rICAgIGlmICgocGsgPSBFVlBfUEtFWV9uZXcoKSkg PT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBFVlBfUEtFWV9hc3NpZ25fUlNB KHBrLCBrZXkpOwotKwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga2F0X1JTQV9TSEExLCBzaXplb2Yoa2F0X1JTQV9TSEExKSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NT MSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBTSEExIFBLQ1MjMSIp KQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0 KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBrYXRfUlNBX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfU0hBMjI0KSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX3NoYTIyNCgpLCBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BLQ1MxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNB IFNIQTIyNCBQS0NTIzEiKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9TSEEyNTYsIHNpemVvZihrYXRf UlNBX1NIQTI1NiksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9zaGEy NTYoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlJTQSBTSEEyNTYgUEtDUyMxIikpCi0rICAgICAgICBnb3RvIGVycjsKLSsg ICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfU0hB Mzg0LCBzaXplb2Yoa2F0X1JTQV9TSEEzODQpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBMzg0IFBLQ1MjMSIpKQotKyAgICAg ICAgZ290byBlcnI7Ci0rICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBrYXRfUlNBX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfU0hBNTEyKSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRVZQX3NoYTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BLQ1MxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNBIFNIQTUxMiBQ S0NTIzEiKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9QU1NfU0hBMSwgc2l6ZW9mKGthdF9SU0Ff UFNTX1NIQTEpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfc2hhMSgp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlJTQSBTSEExIFBTUyIpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1BTU19TSEEyMjQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrYXRfUlNBX1BTU19TSEEy MjQpLCBFVlBfc2hhMjI0KCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTLCAiUlNBIFNIQTIyNCBQU1MiKSkKLSsgICAgICAgIGdvdG8g ZXJyOwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0 X1JTQV9QU1NfU0hBMjU2LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2Yoa2F0X1JTQV9QU1NfU0hBMjU2KSwgRVZQX3NoYTI1NigpLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgIlJTQSBTSEEyNTYgUFNT IikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NIQTM4NCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTM4NCksIEVWUF9zaGEzODQoKSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9Q U1MsICJSU0EgU0hBMzg0IFBTUyIpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1BTU19TSEE1MTIsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrYXRfUlNBX1BTU19TSEE1 MTIpLCBFVlBfc2hhNTEyKCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTLCAiUlNBIFNIQTUxMiBQU1MiKSkKLSsgICAgICAgIGdvdG8g ZXJyOwotKwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywg c2l6ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg a2F0X1JTQV9YOTMxX1NIQTEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZihrYXRfUlNBX1g5MzFfU0hBMSksIEVWUF9zaGExKCksCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwgIlJTQSBTSEExIFg5MzEi KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICAvKiBOQjogU0hBMjI0IG5vdCBzdXBwb3J0ZWQg aW4gWDkuMzEgKi8KLSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90 YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGthdF9SU0FfWDkzMV9TSEEyNTYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMjU2KSwgRVZQX3NoYTI1NigpLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBMjU2IFg5MzEiKSkKLSsgICAg ICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga2F0X1JTQV9YOTMxX1NIQTM4NCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEEzODQpLCBFVlBfc2hhMzg0KCksCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBTSEEzODQgWDkzMSIpKQotKyAg ICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBr YXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBrYXRfUlNBX1g5MzFfU0hBNTEyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTUxMiksIEVWUF9zaGE1MTIoKSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNBIFNIQTUxMiBYOTMxIikpCi0r ICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgcmV0ID0gMTsKLSsKLSsgZXJyOgotKyAgICBpZiAo cGspCi0rICAgICAgICBFVlBfUEtFWV9mcmVlKHBrKTsKLSsgICAgZWxzZSBpZiAoa2V5KQotKyAg ICAgICAgUlNBX2ZyZWUoa2V5KTsKLSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rCi0rI2VuZGlmICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBkZWYgT1BFTlNTTF9GSVBTICovCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMgb3BlbnNzbC0x LjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2Ny eXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMuZmlwcwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAxMTI4 NDA1MSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFn LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTEyODQwNTEgKzAyMDAKLUBAIC0wLDAgKzEsMjczIEBA Ci0rLyogY3J5cHRvL3JzYS9yc2FfZ2VuLmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5 OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVu Ci0rICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1l bnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4K LSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNv bW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKLSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl IGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwg Y29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAq IGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wg ZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292 ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9s ZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmln aHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNl cyBpbgotKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBh Y2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0 dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkg dXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBh dCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4 dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz IHNvZnR3YXJlCi0rICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2Vt ZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5Ci0rICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsg KiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3Vp bmVzIGZyb20gdGhlIGxpYnJhcnkKLSsgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3Jh cGhpYyByZWxhdGVkIDotKS4KLSsgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVj aWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBw cyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93 bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRl biBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQ UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwKLSsgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUCi0rICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YKLSsgKiBTVUNIIERBTUFHRS4KLSsgKiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0 aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRl cml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUg Y2Fubm90IHNpbXBseSBiZQotKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJp YnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQot KyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5j bHVkZSA8dGltZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0rZXh0ZXJuIGludCBmaXBzX2NoZWNr X3JzYShSU0EgKnJzYSk7Ci0rI2VuZGlmCi0rCi0rLyogWDkuMzEgUlNBIGtleSBkZXJpdmF0aW9u IGFuZCBnZW5lcmF0aW9uICovCi0rCi0raW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwg QklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwKLSsgICAgICAgICAgICAgICAgICAg ICAgIEJJR05VTSAqcTIsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKLSsg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05VTSAqWHEx LCBjb25zdCBCSUdOVU0gKlhxMiwKLSsgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJJR05V TSAqWHEsIGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQotK3sKLSsgICAgQklHTlVNICpy MCA9IE5VTEwsICpyMSA9IE5VTEwsICpyMiA9IE5VTEwsICpyMyA9IE5VTEw7Ci0rICAgIEJOX0NU WCAqY3R4ID0gTlVMTCwgKmN0eDIgPSBOVUxMOwotKwotKyAgICBpZiAoIXJzYSkKLSsgICAgICAg IGdvdG8gZXJyOwotKwotKyAgICBjdHggPSBCTl9DVFhfbmV3KCk7Ci0rICAgIGlmICghY3R4KQot KyAgICAgICAgZ290byBlcnI7Ci0rICAgIEJOX0NUWF9zdGFydChjdHgpOwotKwotKyAgICByMCA9 IEJOX0NUWF9nZXQoY3R4KTsKLSsgICAgcjEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rICAgIHIyID0g Qk5fQ1RYX2dldChjdHgpOwotKyAgICByMyA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsgICAgaWYg KHIzID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFyc2EtPmUpIHsKLSsg ICAgICAgIHJzYS0+ZSA9IEJOX2R1cChlKTsKLSsgICAgICAgIGlmICghcnNhLT5lKQotKyAgICAg ICAgICAgIGdvdG8gZXJyOwotKyAgICB9IGVsc2UKLSsgICAgICAgIGUgPSByc2EtPmU7Ci0rCi0r ICAgIC8qIElmIG5vdCBhbGwgcGFyYW1ldGVycyBwcmVzZW50IG9ubHkgY2FsY3VsYXRlIHdoYXQg d2UgY2FuLgotKyAgICAgKiBUaGlzIGFsbG93cyB0ZXN0IHByb2dyYW1zIHRvIG91dHB1dCBzZWxl Y3RpdmUgcGFyYW1ldGVycy4KLSsgICAgICovCi0rCi0rICAgIGlmIChYcCAmJiAhcnNhLT5wKSB7 Ci0rICAgICAgICByc2EtPnAgPSBCTl9uZXcoKTsKLSsgICAgICAgIGlmICghcnNhLT5wKQotKyAg ICAgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICAgICAgaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmlt ZV9leChyc2EtPnAsIHAxLCBwMiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgWHAsIFhwMSwgWHAyLCBlLCBjdHgsIGNiKSkKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsg ICAgfQotKwotKyAgICBpZiAoWHEgJiYgIXJzYS0+cSkgewotKyAgICAgICAgcnNhLT5xID0gQk5f bmV3KCk7Ci0rICAgICAgICBpZiAoIXJzYS0+cSkKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsg ICAgICAgIGlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNhLT5xLCBxMSwgcTIsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhxLCBYcTEsIFhxMiwgZSwgY3R4LCBj YikpCi0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCFyc2EtPnAg fHwgIXJzYS0+cSkgewotKyAgICAgICAgQk5fQ1RYX2VuZChjdHgpOwotKyAgICAgICAgQk5fQ1RY X2ZyZWUoY3R4KTsKLSsgICAgICAgIHJldHVybiAyOwotKyAgICB9Ci0rCi0rICAgIC8qIFNpbmNl IGJvdGggcHJpbWVzIGFyZSBzZXQgd2UgY2FuIG5vdyBjYWxjdWxhdGUgYWxsIHJlbWFpbmluZyAK LSsgICAgICogY29tcG9uZW50cy4KLSsgICAgICovCi0rCi0rICAgIC8qIGNhbGN1bGF0ZSBuICov Ci0rICAgIHJzYS0+biA9IEJOX25ldygpOwotKyAgICBpZiAocnNhLT5uID09IE5VTEwpCi0rICAg ICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFCTl9tdWwocnNhLT5uLCByc2EtPnAsIHJzYS0+cSwg Y3R4KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICAvKiBjYWxjdWxhdGUgZCAqLwotKyAg ICBpZiAoIUJOX3N1YihyMSwgcnNhLT5wLCBCTl92YWx1ZV9vbmUoKSkpCi0rICAgICAgICBnb3Rv IGVycjsgICAgICAgICAgICAgICAvKiBwLTEgKi8KLSsgICAgaWYgKCFCTl9zdWIocjIsIHJzYS0+ cSwgQk5fdmFsdWVfb25lKCkpKQotKyAgICAgICAgZ290byBlcnI7ICAgICAgICAgICAgICAgLyog cS0xICovCi0rICAgIGlmICghQk5fbXVsKHIwLCByMSwgcjIsIGN0eCkpCi0rICAgICAgICBnb3Rv IGVycjsgICAgICAgICAgICAgICAvKiAocC0xKShxLTEpICovCi0rCi0rICAgIGlmICghQk5fZ2Nk KHIzLCByMSwgcjIsIGN0eCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKCFCTl9k aXYocjAsIE5VTEwsIHIwLCByMywgY3R4KSkKLSsgICAgICAgIGdvdG8gZXJyOyAgICAgICAgICAg ICAgIC8qIExDTSgocC0xKShxLTEpKSAqLwotKwotKyAgICBjdHgyID0gQk5fQ1RYX25ldygpOwot KyAgICBpZiAoIWN0eDIpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgcnNhLT5kID0gQk5f bW9kX2ludmVyc2UoTlVMTCwgcnNhLT5lLCByMCwgY3R4Mik7IC8qIGQgKi8KLSsgICAgaWYgKHJz YS0+ZCA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIC8qIGNhbGN1bGF0ZSBk IG1vZCAocC0xKSAqLwotKyAgICByc2EtPmRtcDEgPSBCTl9uZXcoKTsKLSsgICAgaWYgKHJzYS0+ ZG1wMSA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghQk5fbW9kKHJzYS0+ ZG1wMSwgcnNhLT5kLCByMSwgY3R4KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICAvKiBj YWxjdWxhdGUgZCBtb2QgKHEtMSkgKi8KLSsgICAgcnNhLT5kbXExID0gQk5fbmV3KCk7Ci0rICAg IGlmIChyc2EtPmRtcTEgPT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIUJO X21vZChyc2EtPmRtcTEsIHJzYS0+ZCwgcjIsIGN0eCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsK LSsgICAgLyogY2FsY3VsYXRlIGludmVyc2Ugb2YgcSBtb2QgcCAqLwotKyAgICByc2EtPmlxbXAg PSBCTl9tb2RfaW52ZXJzZShOVUxMLCByc2EtPnEsIHJzYS0+cCwgY3R4Mik7Ci0rCi0rIGVycjoK LSsgICAgaWYgKGN0eCkgewotKyAgICAgICAgQk5fQ1RYX2VuZChjdHgpOwotKyAgICAgICAgQk5f Q1RYX2ZyZWUoY3R4KTsKLSsgICAgfQotKyAgICBpZiAoY3R4MikKLSsgICAgICAgIEJOX0NUWF9m cmVlKGN0eDIpOwotKyAgICAvKiBJZiB0aGlzIGlzIHNldCBhbGwgY2FsbHMgc3VjY2Vzc2Z1bCAq LwotKyAgICBpZiAocnNhICYmIHJzYS0+aXFtcCAhPSBOVUxMKQotKyAgICAgICAgcmV0dXJuIDE7 Ci0rCi0rICAgIHJldHVybiAwOwotKwotK30KLSsKLStpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5 X2V4KFJTQSAqcnNhLCBpbnQgYml0cywgY29uc3QgQklHTlVNICplLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKQotK3sKLSsgICAgaW50IG9rID0gMDsKLSsgICAg QklHTlVNICpYcCA9IE5VTEwsICpYcSA9IE5VTEw7Ci0rICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsK LSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykgJiYKLSsgICAgICAgIChiaXRzIDwgT1BF TlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkgewotKyAgICAgICAgRklQU2VycihGSVBT X0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLCBGSVBTX1JfS0VZX1RPT19TSE9SVCk7Ci0rICAg ICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAgICBpZiAoYml0cyAmIDB4ZmYpIHsKLSsgICAg ICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCwgRklQU19SX0lOVkFM SURfS0VZX0xFTkdUSCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAgICBpZiAo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5 MzFfR0VORVJBVEVfS0VZX0VYLCBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAg ICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsjZW5kaWYKLSsKLSsgICAgY3R4ID0gQk5fQ1RYX25ldygp OwotKyAgICBpZiAoIWN0eCkKLSsgICAgICAgIGdvdG8gZXJyb3I7Ci0rCi0rICAgIEJOX0NUWF9z dGFydChjdHgpOwotKyAgICBYcCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsgICAgWHEgPSBCTl9DVFhf Z2V0KGN0eCk7Ci0rICAgIGlmICghQk5fWDkzMV9nZW5lcmF0ZV9YcHEoWHAsIFhxLCBiaXRzLCBj dHgpKQotKyAgICAgICAgZ290byBlcnJvcjsKLSsKLSsgICAgcnNhLT5wID0gQk5fbmV3KCk7Ci0r ICAgIHJzYS0+cSA9IEJOX25ldygpOwotKyAgICBpZiAoIXJzYS0+cCB8fCAhcnNhLT5xKQotKyAg ICAgICAgZ290byBlcnJvcjsKLSsKLSsgICAgLyogR2VuZXJhdGUgdHdvIHByaW1lcyBmcm9tIFhw LCBYcSAqLwotKwotKyAgICBpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5wLCBO VUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGUsIGN0eCwgY2IpKQotKyAgICAgICAgZ290byBlcnJvcjsKLSsKLSsgICAgaWYgKCFC Tl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg WHEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLCBjdHgsIGNiKSkKLSsg ICAgICAgIGdvdG8gZXJyb3I7Ci0rCi0rICAgIC8qIFNpbmNlIHJzYS0+cCBhbmQgcnNhLT5xIGFy ZSB2YWxpZCB0aGlzIGNhbGwgd2lsbCBqdXN0IGRlcml2ZQotKyAgICAgKiByZW1haW5pbmcgUlNB IGNvbXBvbmVudHMuCi0rICAgICAqLwotKwotKyAgICBpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChy c2EsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGUsIGNiKSkKLSsgICAgICAgIGdv dG8gZXJyb3I7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoIWZpcHNfY2hlY2tf cnNhKHJzYSkpCi0rICAgICAgICBnb3RvIGVycm9yOwotKyNlbmRpZgotKwotKyAgICBvayA9IDE7 Ci0rCi0rIGVycm9yOgotKyAgICBpZiAoY3R4KSB7Ci0rICAgICAgICBCTl9DVFhfZW5kKGN0eCk7 Ci0rICAgICAgICBCTl9DVFhfZnJlZShjdHgpOwotKyAgICB9Ci0rCi0rICAgIGlmIChvaykKLSsg ICAgICAgIHJldHVybiAxOwotKwotKyAgICByZXR1cm4gMDsKLSsKLSt9Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJj L2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMuZmlwcwkyMDE1LTA2LTE1IDE3OjMwOjAw LjAxMTI4NDA1MSArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfc2hh X3NlbGZ0ZXN0LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTEyODQwNTEgKzAyMDAKLUBAIC0wLDAg KzEsMTQ1IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICog ICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu Ci0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsj IGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LStzdGF0aWMgY29uc3QgY2hhciB0ZXN0W11bNjBdID0gewotKyAgICAiIiwKLSsgICAgImFiYyIs Ci0rICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9t bm9wbm9wcSIKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJldFtdW1NIQV9E SUdFU1RfTEVOR1RIXSA9IHsKLSsgICAgezB4ZGEsIDB4MzksIDB4YTMsIDB4ZWUsIDB4NWUsIDB4 NmIsIDB4NGIsIDB4MGQsIDB4MzIsIDB4NTUsCi0rICAgICAweGJmLCAweGVmLCAweDk1LCAweDYw LCAweDE4LCAweDkwLCAweGFmLCAweGQ4LCAweDA3LCAweDA5fSwKLSsgICAgezB4YTksIDB4OTks IDB4M2UsIDB4MzYsIDB4NDcsIDB4MDYsIDB4ODEsIDB4NmEsIDB4YmEsIDB4M2UsCi0rICAgICAw eDI1LCAweDcxLCAweDc4LCAweDUwLCAweGMyLCAweDZjLCAweDljLCAweGQwLCAweGQ4LCAweDlk fSwKLSsgICAgezB4ODQsIDB4OTgsIDB4M2UsIDB4NDQsIDB4MWMsIDB4M2IsIDB4ZDIsIDB4NmUs IDB4YmEsIDB4YWUsCi0rICAgICAweDRhLCAweGExLCAweGY5LCAweDUxLCAweDI5LCAweGU1LCAw eGU1LCAweDQ2LCAweDcwLCAweGYxfSwKLSt9OwotKwotK3N0YXRpYyBpbnQgY29ycnVwdF9zaGE7 Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSgpCi0rewotKyAgICBjb3JydXB0X3NoYSA9IDE7 Ci0rfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTEoKQotK3sKLSsgICAgaW50IG47Ci0rCi0r ICAgIGZvciAobiA9IDA7IG4gPCBzaXplb2YodGVzdCkgLyBzaXplb2YodGVzdFswXSk7ICsrbikg ewotKyAgICAgICAgdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAg ICAgICBFVlBfRGlnZXN0KHRlc3Rbbl0sIHN0cmxlbih0ZXN0W25dKSArIGNvcnJ1cHRfc2hhLCBt ZCwgTlVMTCwKLSsgICAgICAgICAgICAgICAgICAgRVZQX3NoYTEoKSwgTlVMTCk7Ci0rICAgICAg ICBpZiAobWVtY21wKG1kLCByZXRbbl0sIHNpemVvZiBtZCkpIHsKLSsgICAgICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwot KyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIHJldHVybiAx OwotK30KLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtc2dfc2hhMjU2W10gPQotKyAg ICB7IDB4ZmEsIDB4NDgsIDB4NTksIDB4MmEsIDB4ZTEsIDB4YWUsIDB4MWYsIDB4MzAsCi0rICAg IDB4ZmMKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ19zaGEyNTZbXSA9 Ci0rICAgIHsgMHhmNywgMHgyNiwgMHhkOCwgMHg5OCwgMHg0NywgMHg5MSwgMHg2OCwgMHg1YiwK LSsgICAgMHg5ZSwgMHgzOSwgMHhiMiwgMHg1OCwgMHhiYiwgMHg3NSwgMHhiZiwgMHgwMSwKLSsg ICAgMHgxNywgMHgwYywgMHg4NCwgMHgwMCwgMHgwMSwgMHg3YSwgMHg5NCwgMHg4MywKLSsgICAg MHhmMywgMHgwYiwgMHgxNSwgMHg4NCwgMHg0YiwgMHg2OSwgMHg4OCwgMHg4YQotK307Ci0rCi0r c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTUxMltdID0KLSsgICAgeyAweDM3LCAw eGQxLCAweDM1LCAweDlkLCAweDE4LCAweDQxLCAweGU5LCAweGI3LAotKyAgICAweDZkLCAweDlh LCAweDEzLCAweGRhLCAweDVmLCAweGYzLCAweGJkCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBkaWdfc2hhNTEyW10gPQotKyAgICB7IDB4MTEsIDB4MTMsIDB4YzQsIDB4MTks IDB4ZWQsIDB4MmIsIDB4MWQsIDB4MTYsCi0rICAgIDB4MTEsIDB4ZWIsIDB4OWIsIDB4YmUsIDB4 ZjAsIDB4N2YsIDB4Y2YsIDB4NDQsCi0rICAgIDB4OGIsIDB4ZDcsIDB4NTcsIDB4YmQsIDB4OGQs IDB4YTksIDB4MjUsIDB4YjAsCi0rICAgIDB4NDcsIDB4MjUsIDB4ZDYsIDB4NmMsIDB4OWEsIDB4 NTQsIDB4N2YsIDB4OGYsCi0rICAgIDB4MGIsIDB4NTMsIDB4MWEsIDB4MTAsIDB4NjgsIDB4MzIs IDB4MDMsIDB4MzgsCi0rICAgIDB4ODIsIDB4YzQsIDB4ODcsIDB4YzQsIDB4ZWEsIDB4MGUsIDB4 ZDEsIDB4MDQsCi0rICAgIDB4YTksIDB4OTgsIDB4YzEsIDB4MDUsIDB4YTMsIDB4ZjMsIDB4Zjgs IDB4YjEsCi0rICAgIDB4YWYsIDB4YmMsIDB4ZDksIDB4NzgsIDB4N2UsIDB4ZWUsIDB4M2QsIDB4 NDMKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3NoYTIodm9pZCkKLSt7Ci0rICAgIHVuc2ln bmVkIGNoYXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFVlBfRGlnZXN0KG1z Z19zaGEyNTYsIHNpemVvZihtc2dfc2hhMjU2KSwgbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVM TCk7Ci0rICAgIGlmIChtZW1jbXAoZGlnX3NoYTI1NiwgbWQsIHNpemVvZihkaWdfc2hhMjU2KSkp IHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsIEZJUFNfUl9TRUxGVEVT VF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgRVZQX0RpZ2Vz dChtc2dfc2hhNTEyLCBzaXplb2YobXNnX3NoYTUxMiksIG1kLCBOVUxMLCBFVlBfc2hhNTEyKCks IE5VTEwpOwotKyAgICBpZiAobWVtY21wKGRpZ19zaGE1MTIsIG1kLCBzaXplb2YoZGlnX3NoYTUx MikpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULCBGSVBTX1JfU0VM RlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rICAgIHJldHVy biAxOwotK30KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBz L2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9m aXBzX3N0YW5kYWxvbmVfaG1hYy5jCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlw c19zdGFuZGFsb25lX2htYWMuYy5maXBzCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDExMjg0MDUxICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMu YwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAxMTI4NDA1MSArMDIwMAotQEAgLTAsMCArMSwyNjggQEAK LSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoK LSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmli dXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICog ICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAg bm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3Jp dHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAq IDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRo ZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBS T0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0r ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NM IFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBV U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dF VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O VFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO Q0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkg T0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5j bHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2xjb25mLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvaG1hYy5oPgotKwotKyNpZm5kZWYgRklQU0NBTklTVEVSX08KLStpbnQgRklQU19zZWxm dGVzdF9mYWlsZWQoKQotK3sKLSsgICAgcmV0dXJuIDA7Ci0rfQotKwotK3ZvaWQgRklQU19zZWxm dGVzdF9jaGVjaygpCi0rewotK30KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r aW50IGJuX211bF9tb250X2ZwdTY0KEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcgKmFwLCBj b25zdCBCTl9VTE9ORyAqYnAsCi0rICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJOX1VMT05H ICpucCwgY29uc3QgQk5fVUxPTkcgKm4wLCBpbnQgbnVtKQotK3sKLSsgICAgcmV0dXJuIDA7Ci0r fTsKLSsKLStpbnQgYm5fbXVsX21vbnRfaW50KEJOX1VMT05HICpycCwgY29uc3QgQk5fVUxPTkcg KmFwLCBjb25zdCBCTl9VTE9ORyAqYnAsCi0rICAgICAgICAgICAgICAgICAgICBjb25zdCBCTl9V TE9ORyAqbnAsIGNvbnN0IEJOX1VMT05HICpuMCwgaW50IG51bSkKLSt7Ci0rICAgIHJldHVybiAw OwotK307Ci0rCi0rIyBpZiAgICAgZGVmaW5lZChfX2kzODYpICAgfHwgZGVmaW5lZChfX2kzODZf XykgICB8fCBkZWZpbmVkKF9NX0lYODYpIHx8IFwKLSsgICAgICAgIGRlZmluZWQoX19JTlRFTF9f KSB8fCBcCi0rICAgICAgICBkZWZpbmVkKF9feDg2XzY0KSB8fCBkZWZpbmVkKF9feDg2XzY0X18p IHx8IFwKLSsgICAgICAgIGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KQotKwot K3Vuc2lnbmVkIGludCBPUEVOU1NMX2lhMzJjYXBfUFs0XTsKLSt1bnNpZ25lZCBsb25nICpPUEVO U1NMX2lhMzJjYXBfbG9jKHZvaWQpCi0rewotKyAgICBpZiAoc2l6ZW9mKGxvbmcpID09IDQpCi0r ICAgICAgICAvKgotKyAgICAgICAgICogSWYgMzItYml0IGFwcGxpY2F0aW9uIHB1bGxzIGFkZHJl c3Mgb2YgT1BFTlNTTF9pYTMyY2FwX1BbMF0KLSsgICAgICAgICAqIGNsZWFyIHNlY29uZCBlbGVt ZW50IHRvIG1haW50YWluIHRoZSBpbGx1c2lvbiB0aGF0IHZlY3RvcgotKyAgICAgICAgICogaXMg MzItYml0LgotKyAgICAgICAgICovCi0rICAgICAgICBPUEVOU1NMX2lhMzJjYXBfUFsxXSA9IDA7 Ci0rCi0rICAgIE9QRU5TU0xfaWEzMmNhcF9QWzJdID0gMDsKLSsKLSsgICAgcmV0dXJuICh1bnNp Z25lZCBsb25nICopT1BFTlNTTF9pYTMyY2FwX1A7Ci0rfQotKwotKyMgIGlmIGRlZmluZWQoT1BF TlNTTF9DUFVJRF9PQkopICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKSAmJiAhZGVmaW5lZChJ Mzg2X09OTFkpCi0rIyAgIGRlZmluZSBPUEVOU1NMX0NQVUlEX1NFVFVQCi0rIyAgIGlmIGRlZmlu ZWQoX1dJTjMyKQotK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBJQTMyQ0FQOwotKyMgICBlbHNl Ci0rdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgSUEzMkNBUDsKLSsjICAgZW5kaWYKLSt2b2lk IE9QRU5TU0xfY3B1aWRfc2V0dXAodm9pZCkKLSt7Ci0rICAgIHN0YXRpYyBpbnQgdHJpZ2dlciA9 IDA7Ci0rICAgIElBMzJDQVAgT1BFTlNTTF9pYTMyX2NwdWlkKHVuc2lnbmVkIGludCAqKTsKLSsg ICAgSUEzMkNBUCB2ZWM7Ci0rICAgIGNoYXIgKmVudjsKLSsKLSsgICAgaWYgKHRyaWdnZXIpCi0r ICAgICAgICByZXR1cm47Ci0rCi0rICAgIHRyaWdnZXIgPSAxOwotKyAgICBpZiAoKGVudiA9IGdl dGVudigiT1BFTlNTTF9pYTMyY2FwIikpKSB7Ci0rICAgICAgICBpbnQgb2ZmID0gKGVudlswXSA9 PSAnficpID8gMSA6IDA7Ci0rIyAgIGlmIGRlZmluZWQoX1dJTjMyKQotKyAgICAgICAgaWYgKCFz c2NhbmYoZW52ICsgb2ZmLCAiJUk2NGkiLCAmdmVjKSkKLSsgICAgICAgICAgICB2ZWMgPSBzdHJ0 b3VsKGVudiArIG9mZiwgTlVMTCwgMCk7Ci0rIyAgIGVsc2UKLSsgICAgICAgIGlmICghc3NjYW5m KGVudiArIG9mZiwgIiVsbGkiLCAobG9uZyBsb25nICopJnZlYykpCi0rICAgICAgICAgICAgdmVj ID0gc3RydG91bChlbnYgKyBvZmYsIE5VTEwsIDApOwotKyMgICBlbmRpZgotKyAgICAgICAgaWYg KG9mZikKLSsgICAgICAgICAgICB2ZWMgPSBPUEVOU1NMX2lhMzJfY3B1aWQoT1BFTlNTTF9pYTMy Y2FwX1ApICYgfnZlYzsKLSsgICAgICAgIGVsc2UgaWYgKGVudlswXSA9PSAnOicpCi0rICAgICAg ICAgICAgdmVjID0gT1BFTlNTTF9pYTMyX2NwdWlkKE9QRU5TU0xfaWEzMmNhcF9QKTsKLSsKLSsg ICAgICAgIE9QRU5TU0xfaWEzMmNhcF9QWzJdID0gMDsKLSsgICAgICAgIGlmICgoZW52ID0gc3Ry Y2hyKGVudiwgJzonKSkpIHsKLSsgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVjeDsKLSsgICAg ICAgICAgICBlbnYrKzsKLSsgICAgICAgICAgICBvZmYgPSAoZW52WzBdID09ICd+JykgPyAxIDog MDsKLSsgICAgICAgICAgICB2ZWN4ID0gc3RydG91bChlbnYgKyBvZmYsIE5VTEwsIDApOwotKyAg ICAgICAgICAgIGlmIChvZmYpCi0rICAgICAgICAgICAgICAgIE9QRU5TU0xfaWEzMmNhcF9QWzJd ICY9IH52ZWN4OwotKyAgICAgICAgICAgIGVsc2UKLSsgICAgICAgICAgICAgICAgT1BFTlNTTF9p YTMyY2FwX1BbMl0gPSB2ZWN4OwotKyAgICAgICAgfQotKyAgICB9IGVsc2UKLSsgICAgICAgIHZl YyA9IE9QRU5TU0xfaWEzMl9jcHVpZChPUEVOU1NMX2lhMzJjYXBfUCk7Ci0rCi0rICAgIC8qCi0r ICAgICAqIHwoMTw8MTApIHNldHMgYSByZXNlcnZlZCBiaXQgdG8gc2lnbmFsIHRoYXQgdmFyaWFi bGUKLSsgICAgICogd2FzIGluaXRpYWxpemVkIGFscmVhZHkuLi4gVGhpcyBpcyB0byBhdm9pZCBp bnRlcmZlcmVuY2UKLSsgICAgICogd2l0aCBjcHVpZCBzbmlwcGV0cyBpbiBFTEYgLmluaXQgc2Vn bWVudC4KLSsgICAgICovCi0rICAgIE9QRU5TU0xfaWEzMmNhcF9QWzBdID0gKHVuc2lnbmVkIGlu dCl2ZWMgfCAoMSA8PCAxMCk7Ci0rICAgIE9QRU5TU0xfaWEzMmNhcF9QWzFdID0gKHVuc2lnbmVk IGludCkodmVjID4+IDMyKTsKLSt9Ci0rIyAgZWxzZQotK3Vuc2lnbmVkIGludCBPUEVOU1NMX2lh MzJjYXBfUFs0XTsKLSsjICBlbmRpZgotKwotKyMgZWxzZQotK3Vuc2lnbmVkIGxvbmcgKk9QRU5T U0xfaWEzMmNhcF9sb2Modm9pZCkKLSt7Ci0rICAgIHJldHVybiBOVUxMOwotK30KLSsjIGVuZGlm Ci0raW50IE9QRU5TU0xfTk9OUElDX3JlbG9jYXRlZCA9IDA7Ci0rIyBpZiAhZGVmaW5lZChPUEVO U1NMX0NQVUlEX1NFVFVQKSAmJiAhZGVmaW5lZChPUEVOU1NMX0NQVUlEX09CSikKLSt2b2lkIE9Q RU5TU0xfY3B1aWRfc2V0dXAodm9pZCkKLSt7Ci0rfQotKyMgZW5kaWYKLSsKLStzdGF0aWMgdm9p ZCBobWFjX2luaXQoU0hBMjU2X0NUWCAqbWRfY3R4LCBTSEEyNTZfQ1RYICpvX2N0eCwgY29uc3Qg Y2hhciAqa2V5KQotK3sKLSsgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihrZXkpOwotKyAgICBpbnQg aTsKLSsgICAgdW5zaWduZWQgY2hhciBrZXltZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKyAgICB1 bnNpZ25lZCBjaGFyIHBhZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKwotKyAgICBpZiAobGVuID4g U0hBX0NCTE9DSykgewotKyAgICAgICAgU0hBMjU2X0luaXQobWRfY3R4KTsKLSsgICAgICAgIFNI QTI1Nl9VcGRhdGUobWRfY3R4LCBrZXksIGxlbik7Ci0rICAgICAgICBTSEEyNTZfRmluYWwoa2V5 bWQsIG1kX2N0eCk7Ci0rICAgICAgICBsZW4gPSBTSEEyNTZfRElHRVNUX0xFTkdUSDsKLSsgICAg fSBlbHNlCi0rICAgICAgICBtZW1jcHkoa2V5bWQsIGtleSwgbGVuKTsKLSsgICAgbWVtc2V0KCZr ZXltZFtsZW5dLCAnXDAnLCBITUFDX01BWF9NRF9DQkxPQ0sgLSBsZW4pOwotKwotKyAgICBmb3Ig KGkgPSAwOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLOyBpKyspCi0rICAgICAgICBwYWRbaV0gPSAw eDM2IF4ga2V5bWRbaV07Ci0rICAgIFNIQTI1Nl9Jbml0KG1kX2N0eCk7Ci0rICAgIFNIQTI1Nl9V cGRhdGUobWRfY3R4LCBwYWQsIFNIQTI1Nl9DQkxPQ0spOwotKwotKyAgICBmb3IgKGkgPSAwOyBp IDwgSE1BQ19NQVhfTURfQ0JMT0NLOyBpKyspCi0rICAgICAgICBwYWRbaV0gPSAweDVjIF4ga2V5 bWRbaV07Ci0rICAgIFNIQTI1Nl9Jbml0KG9fY3R4KTsKLSsgICAgU0hBMjU2X1VwZGF0ZShvX2N0 eCwgcGFkLCBTSEEyNTZfQ0JMT0NLKTsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgaG1hY19maW5hbCh1 bnNpZ25lZCBjaGFyICptZCwgU0hBMjU2X0NUWCAqbWRfY3R4LAotKyAgICAgICAgICAgICAgICAg ICAgICAgU0hBMjU2X0NUWCAqb19jdHgpCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZltTSEEy NTZfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIFNIQTI1Nl9GaW5hbChidWYsIG1kX2N0eCk7Ci0r ICAgIFNIQTI1Nl9VcGRhdGUob19jdHgsIGJ1Ziwgc2l6ZW9mIGJ1Zik7Ci0rICAgIFNIQTI1Nl9G aW5hbChtZCwgb19jdHgpOwotK30KLSsKLSsjZW5kaWYKLSsKLStpbnQgbWFpbihpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCi0rewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgc3RhdGljIGNoYXIg a2V5W10gPSAib3Jib0RlSklUSVRlanNpcnBBRE9OaXZpcnBVa3ZhclAiOwotKyAgICBpbnQgbiwg YmluYXJ5ID0gMDsKLSsKLSsgICAgaWYgKGFyZ2MgPCAyKSB7Ci0rICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIiVzIFs8ZmlsZT5dK1xuIiwgYXJndlswXSk7Ci0rICAgICAgICBleGl0KDEpOwotKyAg ICB9Ci0rCi0rICAgIG4gPSAxOwotKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCAiLWJpbmFyeSIp KSB7Ci0rICAgICAgICBuKys7Ci0rICAgICAgICBiaW5hcnkgPSAxOyAgICAgICAgICAgICAvKiBl bWl0IGJpbmFyeSBmaW5nZXJwcmludC4uLiAqLwotKyAgICB9Ci0rCi0rICAgIGZvciAoOyBuIDwg YXJnYzsgKytuKSB7Ci0rICAgICAgICBGSUxFICpmID0gZm9wZW4oYXJndltuXSwgInJiIik7Ci0r ICAgICAgICBTSEEyNTZfQ1RYIG1kX2N0eCwgb19jdHg7Ci0rICAgICAgICB1bnNpZ25lZCBjaGFy IG1kW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsgICAgICAgIGludCBpOwotKwotKyAgICAgICAg aWYgKCFmKSB7Ci0rICAgICAgICAgICAgcGVycm9yKGFyZ3Zbbl0pOwotKyAgICAgICAgICAgIGV4 aXQoMik7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBobWFjX2luaXQoJm1kX2N0eCwgJm9fY3R4 LCBrZXkpOwotKyAgICAgICAgZm9yICg7OykgewotKyAgICAgICAgICAgIGNoYXIgYnVmWzEwMjRd OwotKyAgICAgICAgICAgIHNpemVfdCBsID0gZnJlYWQoYnVmLCAxLCBzaXplb2YgYnVmLCBmKTsK LSsKLSsgICAgICAgICAgICBpZiAobCA9PSAwKSB7Ci0rICAgICAgICAgICAgICAgIGlmIChmZXJy b3IoZikpIHsKLSsgICAgICAgICAgICAgICAgICAgIHBlcnJvcihhcmd2W25dKTsKLSsgICAgICAg ICAgICAgICAgICAgIGV4aXQoMyk7Ci0rICAgICAgICAgICAgICAgIH0gZWxzZQotKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIFNIQTI1Nl9V cGRhdGUoJm1kX2N0eCwgYnVmLCBsKTsKLSsgICAgICAgIH0KLSsgICAgICAgIGhtYWNfZmluYWwo bWQsICZtZF9jdHgsICZvX2N0eCk7Ci0rCi0rICAgICAgICBpZiAoYmluYXJ5KSB7Ci0rICAgICAg ICAgICAgZndyaXRlKG1kLCBTSEEyNTZfRElHRVNUX0xFTkdUSCwgMSwgc3Rkb3V0KTsKLSsgICAg ICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qIC4uLiBmb3Igc2luZ2xlKCEpIGZpbGUgKi8K LSsgICAgICAgIH0KLSsKLSsvKiAgICAgIHByaW50ZigiSE1BQy1TSEExKCVzKT0gIixhcmd2W25d KTsgKi8KLSsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBTSEEyNTZfRElHRVNUX0xFTkdUSDsgKytp KQotKyAgICAgICAgICAgIHByaW50ZigiJTAyeCIsIG1kW2ldKTsKLSsgICAgICAgIHByaW50Zigi XG4iKTsKLSsgICAgfQotKyNlbmRpZgotKyAgICByZXR1cm4gMDsKLSt9Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYy5maXBzIG9wZW5zc2wtMS4w LjJjL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5 cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAxMjI4 NDA3NCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0 ZS5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDEyMjg0MDc0ICswMjAwCi1AQCAtMCwwICsxLDYzOSBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICoKLSsgKiBUaGlzIGNvbW1hbmQg aXMgaW50ZW5kZWQgYXMgYSB0ZXN0IGRyaXZlciBmb3IgdGhlIEZJUFMtMTQwIHRlc3RpbmcKLSsg KiBsYWIgcGVyZm9ybWluZyBGSVBTLTE0MCB2YWxpZGF0aW9uLiAgSXQgZGVtb25zdHJhdGVzIHRo ZSB1c2Ugb2YgdGhlCi0rICogT3BlblNTTCBsaWJyYXJ5IGl0byBwZXJmb3JtIGEgdmFyaWV0eSBv ZiBjb21tb24gY3J5cHRvZ3JhcGhpYwotKyAqIGZ1bmN0aW9ucy4gIEEgcG93ZXItdXAgc2VsZiB0 ZXN0IGlzIGRlbW9uc3RyYXRlZCBieSBkZWxpYmVyYXRlbHkKLSsgKiBwb2ludGluZyB0byBhbiBp bnZhbGlkIGV4ZWN1dGFibGUgaGFzaAotKyAqCi0rICogQ29udHJpYnV0ZWQgYnkgU3RldmUgTWFy cXVlc3MuCi0rICoKLSsgKi8KLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8YXNzZXJ0 Lmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRl IDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9kZXMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9k c2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9kaC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4K LSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybiAo MCk7Ci0rfQotKyNlbHNlCi0rCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjIGluY2x1 ZGUgImZpcHNfdXRsLmgiCi0rCi0rLyogQUVTOiBlbmNyeXB0IGFuZCBkZWNyeXB0IGtub3duIHBs YWludGV4dCwgdmVyaWZ5IHJlc3VsdCBtYXRjaGVzIG9yaWdpbmFsIHBsYWludGV4dAotKyovCi0r c3RhdGljIGludCBGSVBTX2Flc190ZXN0KHZvaWQpCi0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsg ICAgdW5zaWduZWQgY2hhciBwbHRtcFsxNl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2l0bXBbMTZd OwotKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl0gPQotKyAgICAgICAgeyAxLCAyLCAzLCA0LCA1 LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiB9OwotKyAgICB1bnNpZ25l ZCBjaGFyIHBsYWludGV4dFsxNl0gPSAiZXRhb25yaXNoZGxjdSI7Ci0rICAgIEVWUF9DSVBIRVJf Q1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsgICAgaWYgKEVWUF9D aXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLCBOVUxMLCBrZXksIE5VTEwsIDEp IDw9IDApCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwg cGxhaW50ZXh0LCAxNik7Ci0rICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVz XzEyOF9lY2IoKSwgTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKyAgICAgICAgZ290byBlcnI7 Ci0rICAgIEVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCAxNik7Ci0rICAgIGlmIChtZW1j bXAocGx0bXAsIHBsYWludGV4dCwgMTYpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIHJldCA9 IDE7Ci0rIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsgICAgcmV0 dXJuIHJldDsKLSt9Ci0rCi0rc3RhdGljIGludCBGSVBTX2RlczNfdGVzdCh2b2lkKQotK3sKLSsg ICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGx0bXBbOF07Ci0rICAgIHVuc2ln bmVkIGNoYXIgY2l0bXBbOF07Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPQotKyAgICAgICAg eyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwg MTcsIDE4LAotKyAgICAgICAgMTksIDIwLCAyMSwgMjIsIDIzLCAyNAotKyAgICB9OwotKyAgICB1 bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0geyAnZScsICd0JywgJ2EnLCAnbycsICduJywgJ3In LCAnaScsICdzJyB9OwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJf Q1RYX2luaXQoJmN0eCk7Ci0rICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVz X2VkZTNfZWNiKCksIE5VTEwsIGtleSwgTlVMTCwgMSkgPD0gMCkKLSsgICAgICAgIGdvdG8gZXJy OwotKyAgICBFVlBfQ2lwaGVyKCZjdHgsIGNpdG1wLCBwbGFpbnRleHQsIDgpOwotKyAgICBpZiAo RVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLCBOVUxMLCBrZXksIE5V TEwsIDApIDw9IDApCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgRVZQX0NpcGhlcigmY3R4LCBw bHRtcCwgY2l0bXAsIDgpOwotKyAgICBpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDgpKQot KyAgICAgICAgZ290byBlcnI7Ci0rICAgIHJldCA9IDE7Ci0rIGVycjoKLSsgICAgRVZQX0NJUEhF Ul9DVFhfY2xlYW51cCgmY3R4KTsKLSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rCi0rLyoKLSsgKiBE U0E6IGdlbmVyYXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCi0rICov Ci0rc3RhdGljIGludCBGSVBTX2RzYV90ZXN0KGludCBiYWQpCi0rewotKyAgICBEU0EgKmRzYSA9 IE5VTEw7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAgICB1bnNpZ25lZCBjaGFyIGRnc3RbXSA9ICJl dGFvbnJpc2hkbGMiOwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2MF07Ci0rICAgIHVuc2lnbmVk IGludCBzbGVuOwotKyAgICBpbnQgciA9IDA7Ci0rICAgIEVWUF9NRF9DVFggbWN0eDsKLSsKLSsg ICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rICAg IGRzYSA9IERTQV9uZXcoKTsKLSsgICAgaWYgKCFkc2EpCi0rICAgICAgICBnb3RvIGVuZDsKLSsg ICAgaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQsIE5VTEwsIDAsIE5V TEwsIE5VTEwsIE5VTEwpKQotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIGlmICghRFNBX2dlbmVy YXRlX2tleShkc2EpKQotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIGlmIChiYWQpCi0rICAgICAg ICBCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOwotKwotKyAgICBway50eXBlID0gRVZQX1BL RVlfRFNBOwotKyAgICBway5wa2V5LmRzYSA9IGRzYTsKLSsKLSsgICAgaWYgKCFFVlBfU2lnbklu aXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQotKyAgICAgICAgZ290byBlbmQ7Ci0rICAg IGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQotKyAg ICAgICAgZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xl biwgJnBrKSkKLSsgICAgICAgIGdvdG8gZW5kOwotKwotKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0 X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICBp ZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQotKyAg ICAgICAgZ290byBlbmQ7Ci0rICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1Ziwgc2xl biwgJnBrKTsKLSsgZW5kOgotKyAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOwotKyAgICBp ZiAoZHNhKQotKyAgICAgICAgRFNBX2ZyZWUoZHNhKTsKLSsgICAgaWYgKHIgIT0gMSkKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rLyoKLSsgKiBSU0E6IGdlbmVy YXRlIGtleXMgYW5kIHNpZ24sIHZlcmlmeSBpbnB1dCBwbGFpbnRleHQuCi0rICovCi0rc3RhdGlj IGludCBGSVBTX3JzYV90ZXN0KGludCBiYWQpCi0rewotKyAgICBSU0EgKmtleTsKLSsgICAgdW5z aWduZWQgY2hhciBpbnB1dF9wdGV4dFtdID0gImV0YW9ucmlzaGRsYyI7Ci0rICAgIHVuc2lnbmVk IGNoYXIgYnVmWzI1Nl07Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAgICBCSUdOVU0gKmJu OwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAgICBpbnQgciA9 IDA7Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURfQ1RYX2luaXQoJm1j dHgpOwotKyAgICBrZXkgPSBSU0FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3KCk7Ci0rICAgIGlm ICgha2V5IHx8ICFibikKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBCTl9zZXRfd29yZChibiwg NjU1MzcpOwotKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LCBibiwgTlVM TCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgQk5fZnJlZShibik7Ci0rICAgIGlmIChiYWQp Ci0rICAgICAgICBCTl9hZGRfd29yZChrZXktPm4sIDEpOwotKwotKyAgICBway50eXBlID0gRVZQ X1BLRVlfUlNBOwotKyAgICBway5wa2V5LnJzYSA9IGtleTsKLSsKLSsgICAgaWYgKCFFVlBfU2ln bkluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQotKyAgICAgICAgZ290byBlbmQ7Ci0r ICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRf cHRleHQpIC0gMSkpCi0rICAgICAgICBnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFs KCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQotKyAgICAgICAgZ290byBlbmQ7Ci0rCi0rICAgIGlm ICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIEVWUF9zaGExKCksIE5VTEwpKQotKyAgICAgICAg Z290byBlbmQ7Ci0rICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQs IHNpemVvZihpbnB1dF9wdGV4dCkgLSAxKSkKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICByID0g RVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0rIGVuZDoKLSsgICAgRVZQ X01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKGtleSkKLSsgICAgICAgIFJTQV9mcmVl KGtleSk7Ci0rICAgIGlmIChyICE9IDEpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJu IDE7Ci0rfQotKwotKy8qIFNIQTE6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVl IGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8K LStzdGF0aWMgaW50IEZJUFNfc2hhMV90ZXN0KCkKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGln ZXN0W1NIQV9ESUdFU1RfTEVOR1RIXSA9Ci0rICAgICAgICB7IDB4MTEsIDB4ZjEsIDB4OWEsIDB4 M2EsIDB4ZWMsIDB4MWEsIDB4MWUsIDB4OGUsIDB4NjUsIDB4ZDQsIDB4OWEsCi0rMHgzOCwgMHgw YywgMHg4YiwgMHgxZSwgMHgyYywgMHhlOCwgMHhiMywgMHhjNSwgMHgxOCB9OwotKyAgICB1bnNp Z25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1k W1NIQV9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlm ICghRVZQX0RpZ2VzdChzdHIsIHNpemVvZihzdHIpIC0gMSwgbWQsIE5VTEwsIEVWUF9zaGExKCks IE5VTEwpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAobWQsIGRpZ2VzdCwg c2l6ZW9mKG1kKSkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwot Ky8qIFNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBh cmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBp bnQgRklQU19zaGEyNTZfdGVzdCgpCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEy NTZfRElHRVNUX0xFTkdUSF0gPQotKyAgICAgICAgeyAweGY1LCAweDUzLCAweGNkLCAweGI4LCAw eGNmLCAweDEsIDB4ZWUsIDB4MTcsIDB4OWIsIDB4OTMsIDB4YzksCi0rMHg2OCwgMHhjMCwgMHhl YSwgMHg0MCwgMHg5MSwKLSsgICAgICAgIDB4NiwgMHhlYywgMHg4ZSwgMHgxMSwgMHg5NiwgMHhj OCwgMHg1ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgyMiwgMHhlNiwKLSsgICAgICAgICAgICAweDUw LCAweDRmLCAweDQ3LCAweDU3Ci0rICAgIH07Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAi ZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5H VEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0 ciwgc2l6ZW9mKHN0cikgLSAxLCBtZCwgTlVMTCwgRVZQX3NoYTI1NigpLCBOVUxMKSkKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLCBkaWdlc3QsIHNpemVvZihtZCkpKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsvKiBTSEE1MTI6IGdl bmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0r ICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfc2hhNTEy X3Rlc3QoKQotK3sKLSsgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5H VEhdID0KLSsgICAgICAgIHsgMHg5OSwgMHhjOSwgMHhlOSwgMHg1YiwgMHg4OCwgMHhkNCwgMHg3 OCwgMHg4OCwgMHhkZiwgMHg4OCwgMHg1ZiwKLSsweDk0LCAweDcxLCAweDY0LCAweDI4LCAweGNh LAotKyAgICAgICAgMHgxNiwgMHgxZiwgMHgzZCwgMHhmNCwgMHgxZiwgMHhmMywgMHgwZiwgMHhj NSwgMHgwMywgMHg5OSwgMHhiMiwKLSsgICAgICAgICAgICAweGQwLCAweGU3LCAweDBiLCAweDk0 LCAweDRhLAotKyAgICAgICAgMHg0NSwgMHhkMiwgMHg2YywgMHg0ZiwgMHgyMCwgMHgwNiwgMHhl ZiwgMHg3MSwgMHhhOSwgMHgyNSwgMHg3ZiwKLSsgICAgICAgICAgICAweDI0LCAweGIxLCAweGQ5 LCAweDQwLCAweDIyLAotKyAgICAgICAgMHg0OSwgMHg1NCwgMHgxMCwgMHhjMiwgMHgyMiwgMHg5 ZCwgMHgyNywgMHhmZSwgMHhiZCwgMHhkNiwgMHhkNiwKLSsgICAgICAgICAgICAweGViLCAweDJk LCAweDQyLCAweDFkLCAweGEzCi0rICAgIH07Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAi ZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5H VEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0 ciwgc2l6ZW9mKHN0cikgLSAxLCBtZCwgTlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKSkKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLCBkaWdlc3QsIHNpemVvZihtZCkpKQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsvKiBITUFDLVNIQTE6 IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3du Ci0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1h Y19zaGExX3Rlc3QoKQotK3sKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hk IjsKLSsgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWdu ZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KLSsgICAgICAgIHsgMHg3MywgMHhmNywg MHhhMCwgMHg0OCwgMHhmOCwgMHg5NCwgMHhlZCwgMHhkZCwgMHgwYSwgMHhlYSwgMHhlYSwKLSsw eDU2LCAweDFiLCAweDYxLCAweDJlLCAweDcwLAotKyAgICAgICAgMHhiMiwgMHhmYiwgMHhlYywg MHhjNgotKyAgICB9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVd OwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK LSsgICAgaWYgKCFITUFDCi0rICAgICAgICAoRVZQX3NoYTEoKSwga2V5LCBzaXplb2Yoa2V5KSAt IDEsIGl2LCBzaXplb2YoaXYpIC0gMSwgb3V0LCAmb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAw OwotKyAgICBpZiAobWVtY21wKG91dCwga2F2YWwsIG91dGxlbikpCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIEhNQUMtU0hBMjI0OiBnZW5lcmF0ZSBoYXNo IG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1 dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjI0X3Rlc3Qo KQotK3sKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5z aWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZh bFtFVlBfTUFYX01EX1NJWkVdID0KLSsgICAgICAgIHsgMHg3NSwgMHg1OCwgMHhkNSwgMHhiZCwg MHg1NSwgMHg2ZCwgMHg4NywgMHgwZiwgMHg3NSwgMHhmZiwgMHhiZSwKLSsweDFjLCAweGIyLCAw eGYwLCAweDIwLCAweDM1LAotKyAgICAgICAgMHhlNSwgMHg2MiwgMHg0OSwgMHhiNiwgMHg5NCwg MHhiOSwgMHhmYywgMHg2NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgxOQotKyAgICB9OwotKwotKyAg ICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQg b3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFITUFDCi0rICAg ICAgICAoRVZQX3NoYTIyNCgpLCBrZXksIHNpemVvZihrZXkpIC0gMSwgaXYsIHNpemVvZihpdikg LSAxLCBvdXQsCi0rICAgICAgICAgJm91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAg aWYgKG1lbWNtcChvdXQsIGthdmFsLCBvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IHJldHVybiAxOwotK30KLSsKLSsvKiBITUFDLVNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93 biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3Jy ZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTI1Nl90ZXN0KCkKLSt7Ci0r ICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNo YXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01B WF9NRF9TSVpFXSA9Ci0rICAgICAgICB7IDB4ZTksIDB4MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4 NmIsIDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYsCi0rMHgwMiwgMHhmNSwgMHg3MiwgMHgz MywgMHg4NywKLSsgICAgICAgIDB4OWYsIDB4YzYsIDB4NmUsIDB4N2IsIDB4N2UsIDB4YTgsIDB4 ZWEsIDB4YWEsIDB4OWYsIDB4YmEsIDB4ZWUsCi0rICAgICAgICAgICAgMHg1MSwgMHhmZiwgMHhk YSwgMHgyNCwgMHhmNAotKyAgICB9OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFY X01EX1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJf ZXJyb3IoKTsKLSsgICAgaWYgKCFITUFDCi0rICAgICAgICAoRVZQX3NoYTI1NigpLCBrZXksIHNp emVvZihrZXkpIC0gMSwgaXYsIHNpemVvZihpdikgLSAxLCBvdXQsCi0rICAgICAgICAgJm91dGxl bikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsIGthdmFsLCBvdXRs ZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsvKiBITUFD LVNIQTM4NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUg dG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQg RklQU19obWFjX3NoYTM4NF90ZXN0KCkKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAi ZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0r ICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rICAgICAgICB7IDB4 YjIsIDB4OWQsIDB4NDAsIDB4NTgsIDB4MzIsIDB4YzQsIDB4ZTMsIDB4MzEsIDB4YjYsIDB4NjMs IDB4MDgsCi0rMHgyNiwgMHg5OSwgMHhlZiwgMHgzYiwgMHgxMCwKLSsgICAgICAgIDB4ZTIsIDB4 ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEsIDB4MDMsIDB4MjksIDB4ODEsIDB4MmEsIDB4MWIs Ci0rICAgICAgICAgICAgMHhhYywgMHhiMCwgMHgwNywgMHgzOSwgMHgwOCwKLSsgICAgICAgIDB4 ZjMsIDB4OTEsIDB4MzUsIDB4MTEsIDB4NzYsIDB4ZDYsIDB4NGMsIDB4MjAsIDB4ZmIsIDB4NGQs IDB4YzMsCi0rICAgICAgICAgICAgMHhmMywgMHhiOCwgMHg5YiwgMHg4OCwgMHgxYwotKyAgICB9 OwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNp Z25lZCBpbnQgb3V0bGVuOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFI TUFDCi0rICAgICAgICAoRVZQX3NoYTM4NCgpLCBrZXksIHNpemVvZihrZXkpIC0gMSwgaXYsIHNp emVvZihpdikgLSAxLCBvdXQsCi0rICAgICAgICAgJm91dGxlbikpCi0rICAgICAgICByZXR1cm4g MDsKLSsgICAgaWYgKG1lbWNtcChvdXQsIGthdmFsLCBvdXRsZW4pKQotKyAgICAgICAgcmV0dXJu IDA7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsvKiBITUFDLVNIQTUxMjogZ2VuZXJhdGUgaGFz aCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21w dXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTUxMl90ZXN0 KCkKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVu c2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2 YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rICAgICAgICB7IDB4Y2QsIDB4M2UsIDB4YjksIDB4NTEs IDB4YjgsIDB4YmMsIDB4N2YsIDB4OWEsIDB4MjMsIDB4YWYsIDB4ZjMsCi0rMHg3NywgMHg1OSwg MHg4NSwgMHhhOSwgMHhlNiwKLSsgICAgICAgIDB4ZjcsIDB4ZDEsIDB4NTEsIDB4OTYsIDB4MTcs IDB4ZTAsIDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEsCi0rICAgICAgICAgICAgMHhhZCwg MHg3ZSwgMHgyNCwgMHhjYSwgMHhiMSwKLSsgICAgICAgIDB4ZDcsIDB4NzksIDB4MGEsIDB4YTUs IDB4ZWEsIDB4MmMsIDB4MDIsIDB4NTgsIDB4MGIsIDB4YTYsIDB4NTIsCi0rICAgICAgICAgICAg MHg2YiwgMHg2MSwgMHg3ZiwgMHhlYiwgMHg5YywKLSsgICAgICAgIDB4NDcsIDB4ODYsIDB4NWQs IDB4NzQsIDB4MmIsIDB4ODgsIDB4ZGYsIDB4ZWUsIDB4NDYsIDB4NjksIDB4OTYsCi0rICAgICAg ICAgICAgMHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1MwotKyAgICB9OwotKwotKyAgICB1bnNp Z25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVu OwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgaWYgKCFITUFDCi0rICAgICAgICAo RVZQX3NoYTUxMigpLCBrZXksIHNpemVvZihrZXkpIC0gMSwgaXYsIHNpemVvZihpdikgLSAxLCBv dXQsCi0rICAgICAgICAgJm91dGxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKG1l bWNtcChvdXQsIGthdmFsLCBvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVy biAxOwotK30KLSsKLSsvKiBESDogZ2VuZXJhdGUgc2hhcmVkIHBhcmFtZXRlcnMKLSsqLwotK3N0 YXRpYyBpbnQgZGhfdGVzdCgpCi0rewotKyAgICBESCAqZGg7Ci0rICAgIEVSUl9jbGVhcl9lcnJv cigpOwotKyAgICBkaCA9IEZJUFNfZGhfbmV3KCk7Ci0rICAgIGlmICghZGgpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgaWYgKCFESF9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRoLCAxMDI0LCAy LCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBGSVBTX2RoX2ZyZWUoZGgpOwotKyAg ICByZXR1cm4gMTsKLSt9Ci0rCi0rLyogWmVyb2l6ZQotKyovCi0rc3RhdGljIGludCBaZXJvaXpl KCkKLSt7Ci0rICAgIFJTQSAqa2V5OwotKyAgICBCSUdOVU0gKmJuOwotKyAgICB1bnNpZ25lZCBj aGFyIHVzZXJrZXlbMTZdID0KLSsgICAgICAgIHsgMHg0OCwgMHg1MCwgMHhmMCwgMHhhMywgMHgz YSwgMHhlZCwgMHhkMywgMHhhZiwgMHg2ZSwgMHg0NywgMHg3ZiwKLSsweDgzLCAweDAyLCAweGIx LCAweDA5LCAweDY4IH07Ci0rICAgIGludCBpLCBuOwotKwotKyAgICBrZXkgPSBGSVBTX3JzYV9u ZXcoKTsKLSsgICAgYm4gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFrZXkgfHwgIWJuKQotKyAgICAg ICAgcmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3JkKGJuLCA2NTUzNyk7Ci0rICAgIGlmICghUlNB X2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsIGJuLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAw OwotKyAgICBCTl9mcmVlKGJuKTsKLSsKLSsgICAgbiA9IEJOX251bV9ieXRlcyhrZXktPmQpOwot KyAgICBwcmludGYoIiBHZW5lcmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0ZSBrZXlcbiIsIG4pOwot KyAgICBwcmludGYoIlx0Qk4ga2V5IGJlZm9yZSBvdmVyd3JpdGluZzpcbiIpOwotKyAgICBkb19i bl9wcmludChzdGRvdXQsIGtleS0+ZCk7Ci0rICAgIEJOX3JhbmQoa2V5LT5kLCBuICogOCwgLTEs IDApOwotKyAgICBwcmludGYoIlx0Qk4ga2V5IGFmdGVyIG92ZXJ3cml0aW5nOlxuIik7Ci0rICAg IGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKLSsKLSsgICAgcHJpbnRmKCJcdGNoYXIgYnVm ZmVyIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOwotKyAgICBmb3IgKGkgPSAwOyBp IDwgc2l6ZW9mKHVzZXJrZXkpOyBpKyspCi0rICAgICAgICBwcmludGYoIiUwMngiLCB1c2Vya2V5 W2ldKTsKLSsgICAgcHJpbnRmKCJcbiIpOwotKyAgICBSQU5EX2J5dGVzKHVzZXJrZXksIHNpemVv ZiB1c2Vya2V5KTsKLSsgICAgcHJpbnRmKCJcdGNoYXIgYnVmZmVyIGtleSBhZnRlciBvdmVyd3Jp dGluZzogXG5cdFx0Iik7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkr KykKLSsgICAgICAgIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOwotKyAgICBwcmludGYoIlxu Iik7Ci0rCi0rICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50IEVycm9yOwotK2NvbnN0 IGNoYXIgKkZhaWwoY29uc3QgY2hhciAqbXNnKQotK3sKLSsgICAgZG9fcHJpbnRfZXJyb3JzKCk7 Ci0rICAgIEVycm9yKys7Ci0rICAgIHJldHVybiBtc2c7Ci0rfQotKwotK2ludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikKLSt7Ci0rCi0rICAgIGludCBkb19jb3JydXB0X3JzYV9rZXlnZW4g PSAwLCBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAwOwotKyAgICBpbnQgYmFkX3JzYSA9IDAsIGJh ZF9kc2EgPSAwOwotKyAgICBpbnQgZG9fcm5nX3N0aWNrID0gMDsKLSsgICAgaW50IG5vX2V4aXQg PSAwOwotKwotKyAgICBwcmludGYoIlx0RklQUy1tb2RlIHRlc3QgYXBwbGljYXRpb25cblxuIik7 Ci0rCi0rICAgIC8qIExvYWQgZW50cm9weSBmcm9tIGV4dGVybmFsIGZpbGUsIGlmIGFueSAqLwot KyAgICBSQU5EX2xvYWRfZmlsZSgiLnJuZCIsIDEwMjQpOwotKwotKyAgICBpZiAoYXJndlsxXSkg ewotKyAgICAgICAgLyogQ29ycnVwdGVkIEtBVCB0ZXN0cyAqLwotKyAgICAgICAgaWYgKCFzdHJj bXAoYXJndlsxXSwgImFlcyIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X2FlcygpOwot KyAgICAgICAgICAgIHByaW50ZigiQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1 cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJk ZXMiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kZXMoKTsKLSsgICAgICAgICAgICBw cmludGYoIkRFUzMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQu Li5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2EiKSkgewot KyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2EoKTsKLSsgICAgICAgICAgICBwcmludGYKLSsg ICAgICAgICAgICAgICAgKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0 aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJj bXAoYXJndlsxXSwgInJzYSIpKSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X3JzYSgpOwot KyAgICAgICAgICAgIHByaW50ZgotKyAgICAgICAgICAgICAgICAoIlJTQSBrZXkgZ2VuZXJhdGlv biBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsg ICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNha2V5IikpIHsKLSsgICAgICAg ICAgICBwcmludGYKLSsgICAgICAgICAgICAgICAgKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNp Z25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7Ci0rICAgICAgICAg ICAgYmFkX3JzYSA9IDE7Ci0rICAgICAgICAgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICB9IGVs c2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleWdlbiIpKSB7Ci0rICAgICAgICAgICAgZG9f Y29ycnVwdF9yc2Ffa2V5Z2VuID0gMTsKLSsgICAgICAgICAgICBub19leGl0ID0gMTsKLSsgICAg ICAgICAgICBwcmludGYKLSsgICAgICAgICAgICAgICAgKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5k IHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7Ci0rICAg ICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleSIpKSB7Ci0rICAgICAgICAg ICAgcHJpbnRmCi0rICAgICAgICAgICAgICAgICgiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWdu YXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOwotKyAgICAgICAgICAg IGJhZF9kc2EgPSAxOwotKyAgICAgICAgICAgIG5vX2V4aXQgPSAxOwotKyAgICAgICAgfSBlbHNl IGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXlnZW4iKSkgewotKyAgICAgICAgICAgIGRvX2Nv cnJ1cHRfZHNhX2tleWdlbiA9IDE7Ci0rICAgICAgICAgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAg ICAgICAgcHJpbnRmCi0rICAgICAgICAgICAgICAgICgiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBz aWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5cbiIpOwotKyAgICAg ICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJzaGExIikpIHsKLSsgICAgICAgICAgICBG SVBTX2NvcnJ1cHRfc2hhMSgpOwotKyAgICAgICAgICAgIHByaW50ZigiU0hBLTEgaGFzaCB3aXRo IGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3Zb MV0sICJybmciKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9ybmcoKTsKLSsgICAgICAg IH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nc3RpY2siKSkgewotKyAgICAgICAgICAg IGRvX3JuZ19zdGljayA9IDE7Ci0rICAgICAgICAgICAgbm9fZXhpdCA9IDE7Ci0rICAgICAgICAg ICAgcHJpbnRmKCJSTkcgdGVzdCB3aXRoIHN0dWNrIGNvbnRpbnVvdXMgdGVzdC4uLlxuIik7Ci0r ICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIHByaW50ZigiQmFkIGFyZ3VtZW50IFwiJXNc IlxuIiwgYXJndlsxXSk7Ci0rICAgICAgICAgICAgZXhpdCgxKTsKLSsgICAgICAgIH0KLSsgICAg ICAgIGlmICghbm9fZXhpdCkgewotKyAgICAgICAgICAgIGlmICghRklQU19tb2RlX3NldCgxKSkg ewotKyAgICAgICAgICAgICAgICBkb19wcmludF9lcnJvcnMoKTsKLSsgICAgICAgICAgICAgICAg cHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3QgZmFpbGVkXG4iKTsKLSsgICAgICAgICAgICAgICAg ZXhpdCgxKTsKLSsgICAgICAgICAgICB9Ci0rICAgICAgICAgICAgcHJpbnRmKCJQb3dlci11cCBz ZWxmIHRlc3Qgc3VjY2Vzc2Z1bFxuIik7Ci0rICAgICAgICAgICAgZXhpdCgwKTsKLSsgICAgICAg IH0KLSsgICAgfQotKwotKyAgICAvKiBOb24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRp b24KLSsgICAgICovCi0rICAgIHByaW50ZigiMS4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMg b3BlcmF0aW9uIHRlc3QuLi5cbiIpOwotKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3Jp dGhtIChELUgpLi4uIik7Ci0rICAgIHByaW50ZihkaF90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDog RmFpbCgiRkFJTEVEIVxuIikpOwotKwotKyAgICAvKiBQb3dlci11cCBzZWxmIHRlc3QKLSsgICAg ICovCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBwcmludGYoIjIuIEF1dG9tYXRpYyBw b3dlci11cCBzZWxmIHRlc3QuLi4iKTsKLSsgICAgaWYgKCFGSVBTX21vZGVfc2V0KDEpKSB7Ci0r ICAgICAgICBkb19wcmludF9lcnJvcnMoKTsKLSsgICAgICAgIHByaW50ZihGYWlsKCJGQUlMRUQh XG4iKSk7Ci0rICAgICAgICBleGl0KDEpOwotKyAgICB9Ci0rICAgIHByaW50Zigic3VjY2Vzc2Z1 bFxuIik7Ci0rICAgIGlmIChkb19jb3JydXB0X2RzYV9rZXlnZW4pCi0rICAgICAgICBGSVBTX2Nv cnJ1cHRfZHNhX2tleWdlbigpOwotKyAgICBpZiAoZG9fY29ycnVwdF9yc2Ffa2V5Z2VuKQotKyAg ICAgICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4oKTsKLSsgICAgaWYgKGRvX3JuZ19zdGljaykK LSsgICAgICAgIEZJUFNfcm5nX3N0aWNrKCk7Ci0rCi0rICAgIC8qIEFFUyBlbmNyeXB0aW9uL2Rl Y3J5cHRpb24KLSsgICAgICovCi0rICAgIHByaW50ZigiMy4gQUVTIGVuY3J5cHRpb24vZGVjcnlw dGlvbi4uLiIpOwotKyAgICBwcmludGYoRklQU19hZXNfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6 IEZhaWwoIkZBSUxFRCFcbiIpKTsKLSsKLSsgICAgLyogUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBl bmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgICovCi0rICAgIHByaW50ZigiNC4gUlNBIGtleSBn ZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRmKEZJ UFNfcnNhX3Rlc3QoYmFkX3JzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIp KTsKLSsKLSsgICAgLyogREVTLUNCQyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsgICAgICovCi0r ICAgIHByaW50ZigiNS4gREVTLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAg cHJpbnRmKEZJUFNfZGVzM190ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxu IikpOwotKwotKyAgICAvKiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0 aW9uCi0rICAgICAqLwotKyAgICBwcmludGYoIjYuIERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2ln bmF0dXJlIHZhbGlkYXRpb24uLi4iKTsKLSsgICAgcHJpbnRmKEZJUFNfZHNhX3Rlc3QoYmFkX2Rz YSkgPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKLSsKLSsgICAgLyogU0hB LTEgaGFzaAotKyAgICAgKi8KLSsgICAgcHJpbnRmKCI3YS4gU0hBLTEgaGFzaC4uLiIpOwotKyAg ICBwcmludGYoRklQU19zaGExX3Rlc3QoKT8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQh XG4iKSk7Ci0rCi0rICAgIC8qIFNIQS0yNTYgaGFzaAotKyAgICAgKi8KLSsgICAgcHJpbnRmKCI3 Yi4gU0hBLTI1NiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZihGSVBTX3NoYTI1Nl90ZXN0KCk/ICJz dWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxuIikpOwotKwotKyAgICAvKiBTSEEtNTEyIGhh c2gKLSsgICAgICovCi0rICAgIHByaW50ZigiN2MuIFNIQS01MTIgaGFzaC4uLiIpOwotKyAgICBw cmludGYoRklQU19zaGE1MTJfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFc biIpKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMSBoYXNoCi0rICAgICAqLwotKyAgICBwcmludGYo IjdkLiBITUFDLVNIQS0xIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKEZJUFNfaG1hY19zaGExX3Rl c3QoKT8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCi0rICAgIC8qIEhN QUMtU0hBLTIyNCBoYXNoCi0rICAgICAqLwotKyAgICBwcmludGYoIjdlLiBITUFDLVNIQS0yMjQg aGFzaC4uLiIpOwotKyAgICBwcmludGYoRklQU19obWFjX3NoYTIyNF90ZXN0KCk/ICJzdWNjZXNz ZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxuIikpOwotKwotKyAgICAvKiBITUFDLVNIQS0yNTYgaGFz aAotKyAgICAgKi8KLSsgICAgcHJpbnRmKCI3Zi4gSE1BQy1TSEEtMjU2IGhhc2guLi4iKTsKLSsg ICAgcHJpbnRmKEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwo IkZBSUxFRCFcbiIpKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMzg0IGhhc2gKLSsgICAgICovCi0r ICAgIHByaW50ZigiN2cuIEhNQUMtU0hBLTM4NCBoYXNoLi4uIik7Ci0rICAgIHByaW50ZihGSVBT X2htYWNfc2hhMzg0X3Rlc3QoKT8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7 Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTUxMiBoYXNoCi0rICAgICAqLwotKyAgICBwcmludGYoIjdo LiBITUFDLVNIQS01MTIgaGFzaC4uLiIpOwotKyAgICBwcmludGYoRklQU19obWFjX3NoYTUxMl90 ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxuIikpOwotKwotKyAgICAvKiBO b24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KLSsgICAgICovCi0rICAgIHByaW50 ZigiOC4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOwot KyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7Ci0rICAgIHBy aW50ZihkaF90ZXN0KCk/ICJzdWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rICAgICAgICAgICA6 IEZhaWwoImZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpKTsKLSsKLSsgICAgLyogWmVyb2l6YXRpb24K LSsgICAgICovCi0rICAgIHByaW50ZigiOS4gWmVyby1pemF0aW9uLi4uXG4iKTsKLSsgICAgcHJp bnRmKFplcm9pemUoKT8gIlx0c3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgotKyAgICAgICAgICAg OiBGYWlsKCJcdGZhaWxlZCBJTkNPUlJFQ1RMWSFcbiIpKTsKLSsKLSsgICAgcHJpbnRmKCJcbkFs bCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAlZCBlcnJvcnNcbiIsIEVycm9yKTsKLSsgICAgcmV0dXJu IEVycm9yID8gMSA6IDA7Ci0rfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMv Y3J5cHRvL2ZpcHMvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vZmlwcy9NYWtl ZmlsZQotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMJMjAxNS0w Ni0xNSAxNzozMDowMC4wMTIyODQwNzQgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8v Zmlwcy9NYWtlZmlsZQkyMDE1LTA2LTE1IDE3OjMwOjAwLjAxMjI4NDA3NCArMDIwMAotQEAgLTAs MCArMSwzNDEgQEAKLSsjCi0rIyBPcGVuU1NML2NyeXB0by9maXBzL01ha2VmaWxlCi0rIwotKwot K0RJUj0JZmlwcwotK1RPUD0JLi4vLi4KLStDQz0JY2MKLStJTkNMVURFUz0KLStDRkxBRz0tZwot K01BS0VGSUxFPQlNYWtlZmlsZQotK0FSPQkJYXIgcgotKwotK0NGTEFHUz0gJChJTkNMVURFUykg JChDRkxBRykKLSsKLStHRU5FUkFMPU1ha2VmaWxlCi0rVEVTVD1maXBzX3Rlc3Rfc3VpdGUuYyBm aXBzX3JhbmR0ZXN0LmMKLStBUFBTPQotKwotK1BST0dSQU09IGZpcHNfc3RhbmRhbG9uZV9obWFj Ci0rRVhFPSAkKFBST0dSQU0pJChFWEVfRVhUKQotKwotK0xJQj0kKFRPUCkvbGliY3J5cHRvLmEK LStMSUJTUkM9Zmlwc19hZXNfc2VsZnRlc3QuYyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZpcHNfaG1h Y19zZWxmdGVzdC5jIGZpcHNfcmFuZF9zZWxmdGVzdC5jIFwKLSsgICAgZmlwc19yc2Ffc2VsZnRl c3QuYyBmaXBzX3NoYV9zZWxmdGVzdC5jIGZpcHMuYyBmaXBzX2RzYV9zZWxmdGVzdC5jICBmaXBz X3JhbmQuYyBcCi0rICAgIGZpcHNfcnNhX3g5MzFnLmMgZmlwc19wb3N0LmMgZmlwc19kcmJnX2N0 ci5jIGZpcHNfZHJiZ19oYXNoLmMgZmlwc19kcmJnX2htYWMuYyBcCi0rICAgIGZpcHNfZHJiZ19s aWIuYyBmaXBzX2RyYmdfcmFuZC5jIGZpcHNfZHJiZ19zZWxmdGVzdC5jIGZpcHNfcmFuZF9saWIu YyBcCi0rICAgIGZpcHNfY21hY19zZWxmdGVzdC5jIGZpcHNfZW5jLmMgZmlwc19tZC5jCi0rCi0r TElCT0JKPWZpcHNfYWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRlc3QubyBmaXBzX2htYWNf c2VsZnRlc3QubyBmaXBzX3JhbmRfc2VsZnRlc3QubyBcCi0rICAgIGZpcHNfcnNhX3NlbGZ0ZXN0 Lm8gZmlwc19zaGFfc2VsZnRlc3QubyBmaXBzLm8gZmlwc19kc2Ffc2VsZnRlc3QubyAgZmlwc19y YW5kLm8gXAotKyAgICBmaXBzX3JzYV94OTMxZy5vIGZpcHNfcG9zdC5vIGZpcHNfZHJiZ19jdHIu byBmaXBzX2RyYmdfaGFzaC5vIGZpcHNfZHJiZ19obWFjLm8gXAotKyAgICBmaXBzX2RyYmdfbGli Lm8gZmlwc19kcmJnX3JhbmQubyBmaXBzX2RyYmdfc2VsZnRlc3QubyBmaXBzX3JhbmRfbGliLm8g XAotKyAgICBmaXBzX2NtYWNfc2VsZnRlc3QubyBmaXBzX2VuYy5vIGZpcHNfbWQubwotKwotK0xJ QkNSWVBUTz0tTC4uIC1sY3J5cHRvCi0rCi0rU1JDPSAkKExJQlNSQykgZmlwc19zdGFuZGFsb25l X2htYWMuYwotKwotK0VYSEVBREVSPSBmaXBzLmggZmlwc19yYW5kLmgKLStIRUFERVI9CSQoRVhI RUFERVIpCi0rCi0rQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKLSsKLSt0b3A6 Ci0rCShjZCAuLi8uLjsgJChNQUtFKSBESVJTPWNyeXB0byBTRElSUz0kKERJUikgc3ViX2FsbCkK LSsKLSthbGw6CWxpYiBleGUKLSsKLStsaWI6CSQoTElCT0JKKQotKwkkKEFSKSAkKExJQikgJChM SUJPQkopCi0rCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotKwlAdG91Y2gg bGliCi0rCi0rZXhlOgkkKEVYRSkKLSsKLStmaWxlczoKLSsJJChQRVJMKSAkKFRPUCkvdXRpbC9m aWxlcy5wbCBNYWtlZmlsZSA+PiAkKFRPUCkvTUlORk8KLSsKLStsaW5rczoKLSsJQCQoUEVSTCkg JChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL2luY2x1ZGUvb3BlbnNzbCAkKEVYSEVBREVSKQot KwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vdGVzdCAkKFRFU1QpCi0rCUAk KFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9hcHBzICQoQVBQUykKLSsKLStpbnN0 YWxsOgotKwlAWyAtbiAiJChJTlNUQUxMVE9QKSIgXSAjIHNob3VsZCBiZSBzZXQgYnkgdG9wIE1h a2VmaWxlLi4uCi0rCUBoZWFkZXJsaXN0PSIkKEVYSEVBREVSKSI7IGZvciBpIGluICQkaGVhZGVy bGlzdCA7IFwKLSsJZG8gIFwKLSsJKGNwICQkaSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRP UCkvaW5jbHVkZS9vcGVuc3NsLyQkaTsgXAotKwljaG1vZCA2NDQgJChJTlNUQUxMX1BSRUZJWCkk KElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGkgKTsgXAotKwlkb25lOwotKwotK3RhZ3M6 Ci0rCWN0YWdzICQoU1JDKQotKwotK3Rlc3RzOgotKwotK2xpbnQ6Ci0rCWxpbnQgLURMSU5UICQo SU5DTFVERVMpICQoU1JDKT5mbHVmZgotKwotK2RlcGVuZDoKLSsJQFsgLW4gIiQoTUFLRURFUEVO RCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHVwcGVyIE1ha2VmaWxlLi4uCi0rCSQoTUFLRURFUEVO RCkgLS0gJChDRkxBRykgJChJTkNMVURFUykgJChERVBGTEFHKSAtLSAkKFBST0dTKSAkKExJQlNS QykKLSsKLStkY2xlYW46Ci0rCSQoUEVSTCkgLXBlICdpZiAoL14jIERPIE5PVCBERUxFVEUgVEhJ UyBMSU5FLykge3ByaW50OyBleGl0KDApO30nICQoTUFLRUZJTEUpID5NYWtlZmlsZS5uZXcKLSsJ bXYgLWYgTWFrZWZpbGUubmV3ICQoTUFLRUZJTEUpCi0rCi0rY2xlYW46Ci0rCXJtIC1mICoubyAq Lm9iaiBsaWIgdGFncyBjb3JlIC5wdXJlIC5uZnMqICoub2xkICouYmFrIGZsdWZmCi0rCi0rJChF WEUpOiAkKFBST0dSQU0pLm8KLSsJRklQU19TSEFfQVNNPSIiOyBmb3IgaSBpbiAkKFNIQTFfQVNN X09CSikgc2hhMjU2Lm87IGRvIEZJUFNfU0hBX0FTTT0iJCRGSVBTX1NIQV9BU00gLi4vc2hhLyQk aSIgOyBkb25lOyBcCi0rCWZvciBpIGluICQoQ1BVSURfT0JKKTsgZG8gRklQU19TSEFfQVNNPSIk JEZJUFNfU0hBX0FTTSAuLi8kJGkiIDsgZG9uZTsgXAotKwkkKENDKSAtbyAkQCAkKENGTEFHUykg JChQUk9HUkFNKS5vICQkRklQU19TSEFfQVNNCi0rCi0rIyBETyBOT1QgREVMRVRFIFRISVMgTElO RSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgotKwotK2ZpcHMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgK LStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz X3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0rZmlwcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlw cy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLStmaXBzLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3Rh Y2suaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwcy5jIGZp cHNfbG9jbC5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStm aXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3Nsdi5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1o YWNrcy5oIGZpcHNfYWVzX3NlbGZ0ZXN0LmMKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNf ZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZGVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lcnIuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19kZXNfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kZXNfc2VsZnRlc3QuYwotK2ZpcHNfZHJiZ19j dHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfZHJi Z19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwc19yYW5kLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9o bWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19jdHIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19k cmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2RyYmdf Y3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zeW1oYWNrcy5oCi0rZmlwc19kcmJnX2N0ci5vOiBmaXBzX2RyYmdfY3RyLmMgZmlwc19yYW5k X2xjbC5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19k cmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQu aAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19oYXNo Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19oYXNoLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kcmJnX2hhc2gubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX2hhc2guYwotK2ZpcHNfZHJiZ19o YXNoLm86IGZpcHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX2ht YWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9j cnlwdG8uaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2RyYmdfaG1h Yy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX2htYWMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgK LStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStm aXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfZHJi Z19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19obWFj LmMKLStmaXBzX2RyYmdfaG1hYy5vOiBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RyYmdfbGliLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5o Ci0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2RyYmdfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2Zp cHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfZHJi Z19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv cmFuZC5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNr LmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oCi0rZmlwc19kcmJnX2xpYi5vOiBmaXBzX2RyYmdf bGliLmMgZmlwc19sb2NsLmggZmlwc19yYW5kX2xjbC5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStm aXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19kcmJnX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBz LmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgK LStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3Nsdi5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N5bWhhY2tzLmggZmlwc19kcmJnX3JhbmQuYwotK2ZpcHNfZHJiZ19yYW5kLm86IGZp cHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX2RyYmdfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAot K2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2htYWMuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmplY3RzLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc2FmZXN0YWNrLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N5bWhhY2tzLmggZmlwc19kcmJnX3NlbGZ0ZXN0LmMKLStmaXBzX2RyYmdfc2VsZnRlc3Qubzog Zmlwc19kcmJnX3NlbGZ0ZXN0LmggZmlwc19sb2NsLmggZmlwc19yYW5kX2xjbC5oCi0rZmlwc19k c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYm4uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vf b3MyLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2Zp cHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBz X2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19k c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBz X2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNf ZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19k c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19k c2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2RzYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RzYV9zZWxm dGVzdC5jCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogZmlwc19sb2NsLmgKLStmaXBzX2htYWNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Ny eXB0by5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAot K2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oCi0rZmlw c19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19o bWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2ht YWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfaG1h Y19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNf aG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNf aG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNf aG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBz X2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2ht YWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19obWFj X3NlbGZ0ZXN0LmMKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfcG9zdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZHNhLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3My LmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfcG9zdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0r Zmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfcG9zdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotK2Zp cHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmggZmlwc19sb2NsLmggZmlwc19wb3N0LmMKLStmaXBzX3JhbmQubzogLi4vLi4vZV9v cy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfcmFu ZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Vfb3MyLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfcmFuZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFz aC5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAotK2ZpcHNfcmFuZC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2ZpcHNfcmFuZC5vOiBmaXBzX2xvY2wuaCBm aXBzX3JhbmQuYwotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vZV9vcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hZXMuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaAot K2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX3JhbmRfbGli Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgK LStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBz X3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19y YW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfcmFuZF9s aWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3JhbmQuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2ZpcHNfcmFuZF9saWIubzogZmlwc19y YW5kX2xpYi5jCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h ZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlw c19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzX3JhbmQuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvaG1hYy5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9saGFzaC5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbGNvbmYuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbHYuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3NzbF90eXAuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvcmFuZC5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z YWZlc3RhY2suaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaCBmaXBzX2xvY2wuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiBmaXBzX3JhbmRfc2Vs ZnRlc3QuYwotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0r Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX3JzYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcnNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX3JzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19yc2Ffc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3JzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19yc2Ffc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX3JzYV9zZWxmdGVzdC5jCi0rZmlwc19yc2Ff eDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYm4uaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBz X3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9saGFzaC5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3BlbnNzbHYuaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3Ns X3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19yc2FfeDkzMWcuYwotK2ZpcHNfc2hhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o Ci0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX3No YV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfc2hhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX3NoYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19zaGFfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3NoYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfc2hhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19zaGFfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19zaGFfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NoYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmggZmlwc19zaGFfc2VsZnRlc3QuYwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRv L2htYWMvaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL2htYWMvaG1hYy5jCi0tLS0g b3BlbnNzbC0xLjAuMmMvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToy Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vaG1hYy9obWFjLmMJ MjAxNS0wNi0xNSAxNzozMzoxMS43MDc2ODI5MDggKzAyMDAKLUBAIC04OSwxMiArODksNiBAQCBp bnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgsIGNvbnN0IHZvCi0gICAgICAgICAgICAgRVZQ ZXJyKEVWUF9GX0hNQUNfSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotICAgICAg ICAgICAgIHJldHVybiAwOwotICAgICAgICAgfQotLSAgICAgICAgLyoKLS0gICAgICAgICAqIE90 aGVyIGFsZ29yaXRobSBibG9ja2luZyB3aWxsIGJlIGRvbmUgaW4gRklQU19jbWFjX2luaXQsIHZp YQotLSAgICAgICAgICogRklQU19obWFjX2luaXRfZXgoKS4KLS0gICAgICAgICAqLwotLSAgICAg ICAgaWYgKCFpbXBsICYmICFjdHgtPmlfY3R4LmVuZ2luZSkKLS0gICAgICAgICAgICByZXR1cm4g RklQU19obWFjX2luaXRfZXgoY3R4LCBrZXksIGxlbiwgbWQsIE5VTEwpOwotICAgICB9Ci0gI2Vu ZGlmCi0gICAgIC8qIElmIHdlIGFyZSBjaGFuZ2luZyBNRCB0aGVuIHdlIG11c3QgaGF2ZSBhIGtl eSAqLwotQEAgLTExMSw2ICsxMDUsMTMgQEAgaW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4 LCBjb25zdCB2bwotICAgICB9Ci0gCi0gICAgIGlmIChrZXkgIT0gTlVMTCkgewotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsgICAgICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKG1kLT5mbGFncyAmIEVW UF9NRF9GTEFHX0ZJUFMpCi0rICAgICAgICAgICAgJiYgKCEoY3R4LT5tZF9jdHguZmxhZ3MgJiBF VlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rICAgICAgICAgICAgICAgIHx8ICEoY3R4 LT5pX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKLSsgICAgICAg ICAgICAgICAgfHwgIShjdHgtPm9fY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBT X0FMTE9XKSkpCi0rICAgICAgICAgICAgZ290byBlcnI7Ci0rI2VuZGlmCi0gICAgICAgICByZXNl dCA9IDE7Ci0gICAgICAgICBqID0gRVZQX01EX2Jsb2NrX3NpemUobWQpOwotICAgICAgICAgT1BF TlNTTF9hc3NlcnQoaiA8PSAoaW50KXNpemVvZihjdHgtPmtleSkpOwotQEAgLTE2NCwxMCArMTY1 LDYgQEAgaW50IEhNQUNfSW5pdChITUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkCi0gCi0gaW50IEhN QUNfVXBkYXRlKEhNQUNfQ1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVf dCBsZW4pCi0gewotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgaWYgKEZJUFNfbW9kZSgpICYm ICFjdHgtPmlfY3R4LmVuZ2luZSkKLS0gICAgICAgIHJldHVybiBGSVBTX2htYWNfdXBkYXRlKGN0 eCwgZGF0YSwgbGVuKTsKLS0jZW5kaWYKLSAgICAgaWYgKCFjdHgtPm1kKQotICAgICAgICAgcmV0 dXJuIDA7Ci0gCi1AQCAtMTc4LDEwICsxNzUsNiBAQCBpbnQgSE1BQ19GaW5hbChITUFDX0NUWCAq Y3R4LCB1bnNpZ25lZCBjCi0gewotICAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICAgdW5zaWduZWQg Y2hhciBidWZbRVZQX01BWF9NRF9TSVpFXTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIGlm IChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCi0tICAgICAgICByZXR1cm4gRklQ U19obWFjX2ZpbmFsKGN0eCwgbWQsIGxlbik7Ci0tI2VuZGlmCi0gCi0gICAgIGlmICghY3R4LT5t ZCkKLSAgICAgICAgIGdvdG8gZXJyOwotQEAgLTIyNSwxMiArMjE4LDYgQEAgaW50IEhNQUNfQ1RY X2NvcHkoSE1BQ19DVFggKmRjdHgsIEhNQUNfQwotIAotIHZvaWQgSE1BQ19DVFhfY2xlYW51cChI TUFDX0NUWCAqY3R4KQotIHsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIGlmIChGSVBTX21v ZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpIHsKLS0gICAgICAgIEZJUFNfaG1hY19jdHhfY2xl YW51cChjdHgpOwotLSAgICAgICAgcmV0dXJuOwotLSAgICB9Ci0tI2VuZGlmCi0gICAgIEVWUF9N RF9DVFhfY2xlYW51cCgmY3R4LT5pX2N0eCk7Ci0gICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmY3R4 LT5vX2N0eCk7Ci0gICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmY3R4LT5tZF9jdHgpOwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzIG9wZW5zc2wtMS4w LjJjL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vbWRj Mi9tZGMyZGdzdC5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsr KyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCTIwMTUtMDYtMTUgMTc6MzA6 MDAuMDEyMjg0MDc0ICswMjAwCi1AQCAtNzYsNyArNzYsNyBAQAotICAgICAgICAgICAgICAgICAg ICAgICAgICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4ZmYpKQotIAotIHN0 YXRpYyB2b2lkIG1kYzJfYm9keShNREMyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4s IHNpemVfdCBsZW4pOwotLWZpcHNfbWRfaW5pdChNREMyKQotK25vbmZpcHNfbWRfaW5pdChNREMy KQotIHsKLSAgICAgYy0+bnVtID0gMDsKLSAgICAgYy0+cGFkX3R5cGUgPSAxOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmMvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMv Y3J5cHRvL21kMi9tZDJfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL21kMi9tZDJf ZGdzdC5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVu c3NsLTEuMC4yYy9jcnlwdG8vbWQyL21kMl9kZ3N0LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTIy ODQwNzQgKzAyMDAKLUBAIC02Miw2ICs2MiwxMSBAQAotICNpbmNsdWRlIDxvcGVuc3NsL21kMi5o PgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ Ci0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gCi0gY29uc3QgY2hhciBN RDJfdmVyc2lvbltdID0gIk1EMiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTExOSw3 ICsxMjQsNyBAQCBjb25zdCBjaGFyICpNRDJfb3B0aW9ucyh2b2lkKQotICAgICAgICAgcmV0dXJu ICgibWQyKGludCkiKTsKLSB9Ci0gCi0tZmlwc19tZF9pbml0KE1EMikKLStub25maXBzX21kX2lu aXQoTUQyKQotIHsKLSAgICAgYy0+bnVtID0gMDsKLSAgICAgbWVtc2V0KGMtPnN0YXRlLCAwLCBz aXplb2YgYy0+c3RhdGUpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL21kNC9tZDRf ZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL21kNC9tZDRfZGdzdC5jCi0tLS0gb3Bl bnNzbC0xLjAuMmMvY3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToy MS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vbWQ0L21kNF9kZ3N0 LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTMyODQwOTcgKzAyMDAKLUBAIC03Miw3ICs3Miw3IEBA IGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXSA9ICJNRDQiIE9QRU5TU0wKLSAjZGVmaW5lIElOSVRf REFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCi0gI2RlZmluZSBJTklUX0RBVEFfRCAo dW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAotIAotLWZpcHNfbWRfaW5pdChNRDQpCi0rbm9uZmlw c19tZF9pbml0KE1ENCkKLSB7Ci0gICAgIG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKLSAgICAg Yy0+QSA9IElOSVRfREFUQV9BOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL21kNS9t ZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL21kNS9tZDVfZGdzdC5jCi0tLS0g b3BlbnNzbC0xLjAuMmMvY3J5cHRvL21kNS9tZDVfZGdzdC5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1 MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vbWQ1L21kNV9k Z3N0LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTMyODQwOTcgKzAyMDAKLUBAIC03Miw3ICs3Miw3 IEBAIGNvbnN0IGNoYXIgTUQ1X3ZlcnNpb25bXSA9ICJNRDUiIE9QRU5TU0wKLSAjZGVmaW5lIElO SVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRjZmVMCi0gI2RlZmluZSBJTklUX0RBVEFf RCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAotIAotLWZpcHNfbWRfaW5pdChNRDUpCi0rbm9u Zmlwc19tZF9pbml0KE1ENSkKLSB7Ci0gICAgIG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKLSAg ICAgYy0+QSA9IElOSVRfREFUQV9BOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL29f Zmlwcy5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL29fZmlwcy5jCi0tLS0gb3BlbnNzbC0x LjAuMmMvY3J5cHRvL29fZmlwcy5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAwMDAg KzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vb19maXBzLmMJMjAxNS0wNi0xNSAxNzoz MDowMC4wMTMyODQwOTcgKzAyMDAKLUBAIC04MCw2ICs4MCw4IEBAIGludCBGSVBTX21vZGVfc2V0 KGludCByKQotICMgaWZuZGVmIEZJUFNfQVVUSF9VU0VSX1BBU1MKLSAjICBkZWZpbmUgRklQU19B VVRIX1VTRVJfUEFTUyAgICAgIkRlZmF1bHQgRklQUyBDcnlwdG8gVXNlciBQYXNzd29yZCIKLSAj IGVuZGlmCi0rICAgIGlmIChyICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgLyogY2FuIGJlIGltcGxp Y2l0bHkgaW5pdGlhbGl6ZWQgYnkgT1BFTlNTTF9pbml0KCkgKi8KLSsgICAgICAgIHJldHVybiAx OwotICAgICBpZiAoIUZJUFNfbW9kdWxlX21vZGVfc2V0KHIsIEZJUFNfQVVUSF9VU0VSX1BBU1Mp KQotICAgICAgICAgcmV0dXJuIDA7Ci0gICAgIGlmIChyKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmMvY3J5cHRvL29faW5pdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL29faW5pdC5jCi0t LS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL29faW5pdC5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToy MS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vb19pbml0LmMJMjAx NS0wNi0xNSAxNzozMDowMC4wMTMyODQwOTcgKzAyMDAKLUBAIC01Niw4ICs1NiwzNyBAQAotICNp bmNsdWRlIDxlX29zLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2lmZGVmIE9QRU5T U0xfRklQUwotKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0rIyBpbmNsdWRlIDxzeXMvc3RhdC5o PgotKyMgaW5jbHVkZSA8ZmNudGwuaD4KLSsjIGluY2x1ZGUgPHVuaXN0ZC5oPgotKyMgaW5jbHVk ZSA8ZXJybm8uaD4KLSsjIGluY2x1ZGUgPHN0ZGxpYi5oPgotICMgaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+Ci0gIyBpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsKLSsjIGRlZmluZSBGSVBTX01P REVfU1dJVENIX0ZJTEUgIi9wcm9jL3N5cy9jcnlwdG8vZmlwc19lbmFibGVkIgotKwotK3N0YXRp YyB2b2lkIGluaXRfZmlwc19tb2RlKHZvaWQpCi0rewotKyAgICBjaGFyIGJ1ZlsyXSA9ICIwIjsK LSsgICAgaW50IGZkOwotKwotKyAgICBpZiAoZ2V0ZW52KCJPUEVOU1NMX0ZPUkNFX0ZJUFNfTU9E RSIpICE9IE5VTEwpIHsKLSsgICAgICAgIGJ1ZlswXSA9ICcxJzsKLSsgICAgfSBlbHNlIGlmICgo ZmQgPSBvcGVuKEZJUFNfTU9ERV9TV0lUQ0hfRklMRSwgT19SRE9OTFkpKSA+PSAwKSB7Ci0rICAg ICAgICB3aGlsZSAocmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPCAwICYmIGVycm5vID09IEVJ TlRSKSA7Ci0rICAgICAgICBjbG9zZShmZCk7Ci0rICAgIH0KLSsgICAgLyogRmFpbHVyZSByZWFk aW5nIHRoZSBmaXBzIG1vZGUgc3dpdGNoIGZpbGUgbWVhbnMganVzdCBub3QKLSsgICAgICogc3dp dGNoaW5nIGludG8gRklQUyBtb2RlLiBXZSB3b3VsZCBicmVhayB0b28gbWFueSB0aGluZ3MKLSsg ICAgICogb3RoZXJ3aXNlLi4KLSsgICAgICovCi0rCi0rICAgIGlmIChidWZbMF0gPT0gJzEnKSB7 Ci0rICAgICAgICBGSVBTX21vZGVfc2V0KDEpOwotKyAgICB9Ci0rfQotICNlbmRpZgotIAotIC8q Ci1AQCAtNjUsMTkgKzk0LDI2IEBACi0gICogc2V0cyBGSVBTIGNhbGxiYWNrcwotICAqLwotIAot LXZvaWQgT1BFTlNTTF9pbml0KHZvaWQpCi0rdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lk KQotIHsKLSAgICAgc3RhdGljIGludCBkb25lID0gMDsKLSAgICAgaWYgKGRvbmUpCi0gICAgICAg ICByZXR1cm47Ci0gICAgIGRvbmUgPSAxOwotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgRklQ U19zZXRfbG9ja2luZ19jYWxsYmFja3MoQ1JZUFRPX2xvY2ssIENSWVBUT19hZGRfbG9jayk7Ci0t ICAgIEZJUFNfc2V0X2Vycm9yX2NhbGxiYWNrcyhFUlJfcHV0X2Vycm9yLCBFUlJfYWRkX2Vycm9y X3ZkYXRhKTsKLS0gICAgRklQU19zZXRfbWFsbG9jX2NhbGxiYWNrcyhDUllQVE9fbWFsbG9jLCBD UllQVE9fZnJlZSk7Ci0gICAgIFJBTkRfaW5pdF9maXBzKCk7Ci0rICAgIGluaXRfZmlwc19tb2Rl KCk7Ci0rICAgIGlmICghRklQU19tb2RlKCkpIHsKLSsgICAgICAgIC8qIENsZWFuIHVwIHByZW1h dHVyZWx5IHNldCBkZWZhdWx0IHJhbmQgbWV0aG9kICovCi0rICAgICAgICBSQU5EX3NldF9yYW5k X21ldGhvZChOVUxMKTsKLSsgICAgfQotICNlbmRpZgotICNpZiAwCi0gICAgIGZwcmludGYoc3Rk ZXJyLCAiQ2FsbGVkIE9QRU5TU0xfaW5pdFxuIik7Ci0gI2VuZGlmCi0gfQotKwotK3ZvaWQgT1BF TlNTTF9pbml0KHZvaWQpCi0rewotKyAgICBPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotK30KLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9vcGVuc3NsY29uZi5oLmluLmZpcHMgb3BlbnNz bC0xLjAuMmMvY3J5cHRvL29wZW5zc2xjb25mLmguaW4KLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlw dG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzCTIwMTUtMDYtMTIgMTY6NTE6MjEuMDAwMDAwMDAwICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL29wZW5zc2xjb25mLmguaW4JMjAxNS0wNi0x NSAxNzozMDowMC4wMTMyODQwOTcgKzAyMDAKLUBAIC0xLDUgKzEsMjAgQEAKLSAvKiBjcnlwdG8v b3BlbnNzbGNvbmYuaC5pbiAqLwotIAotKyNpZmRlZiBPUEVOU1NMX0RPSU5HX01BS0VERVBFTkQK LSsKLSsvKiBJbmNsdWRlIGFueSBzeW1ib2xzIGhlcmUgdGhhdCBoYXZlIHRvIGJlIGV4cGxpY2l0 bHkgc2V0IHRvIGVuYWJsZSBhIGZlYXR1cmUKLSsgKiB0aGF0IHNob3VsZCBiZSB2aXNpYmxlIHRv IG1ha2VkZXBlbmQuCi0rICoKLSsgKiBbT3VyICJtYWtlIGRlcGVuZCIgZG9lc24ndCBhY3R1YWxs eSBsb29rIGF0IHRoaXMsIHdlIHVzZSBhY3R1YWwgYnVpbGQgc2V0dGluZ3MKLSsgKiBpbnN0ZWFk OyB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSB0byByZW1vdmUgc3ViZGlyZWN0b3JpZXMgd2l0aCBk aXNhYmxlZCBhbGdvcml0aG1zLl0KLSsgKi8KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyNk ZWZpbmUgT1BFTlNTTF9GSVBTCi0rI2VuZGlmCi0rCi0rI2VuZGlmCi0rCi0gLyogR2VuZXJhdGUg ODAzODYgY29kZT8gKi8KLSAjdW5kZWYgSTM4Nl9PTkxZCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4yYy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vcmFu ZC9tZF9yYW5kLmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMuZmlw cwkyMDE1LTA2LTEyIDE2OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJj L2NyeXB0by9yYW5kL21kX3JhbmQuYwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAxMzI4NDA5NyArMDIw MAotQEAgLTM5MSw3ICszOTEsMTAgQEAgaW50IHNzbGVheV9yYW5kX2J5dGVzKHVuc2lnbmVkIGNo YXIgKmJ1ZgotICAgICBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfUkFORDIpOwotICAgICBj cnlwdG9fbG9ja19yYW5kID0gMTsKLSAKLS0gICAgaWYgKCFpbml0aWFsaXplZCkgewotKyAgICAv KiBhbHdheXMgcG9sbCBmb3IgZXh0ZXJuYWwgZW50cm9weSBpbiBGSVBTIG1vZGUsIGRyYmcgcHJv dmlkZXMgdGhlIAotKyAgICAgKiBleHBhbnNpb24KLSsgICAgICovCi0rICAgIGlmICghaW5pdGlh bGl6ZWQgfHwgRklQU19tb2R1bGVfbW9kZSgpKSB7Ci0gICAgICAgICBSQU5EX3BvbGwoKTsKLSAg ICAgICAgIGluaXRpYWxpemVkID0gMTsKLSAgICAgfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMv Y3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3JhbmQvcmFuZC5o Ci0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMJMjAxNS0wNi0xNSAx NzoyOTo1OS43NzMyNzg2MDEgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vcmFuZC9y YW5kLmgJMjAxNS0wNi0xNSAxNzozMDowMC4wMTMyODQwOTcgKzAyMDAKLUBAIC0xMzMsMTYgKzEz MywzNCBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5ncyh2b2lkKTsKLSAvKiBFcnJvciBjb2Rl cyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLwotIAotIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwot KyMgZGVmaW5lIFJBTkRfRl9FTkdfUkFORF9HRVRfUkFORF9NRVRIT0QgICAgICAgICAgICAgICAg ICAxMDgKLSsjIGRlZmluZSBSQU5EX0ZfRklQU19SQU5EICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTAzCi0rIyBkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9CWVRFUyAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEwMgotKyMgZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RUICAg ICAgICAgICAgICAgICAgICAgICAgICAxMDYKLSsjIGRlZmluZSBSQU5EX0ZfRklQU19YOTMxX1NF VF9EVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTA2Ci0rIyBkZWZpbmUgUkFORF9GX0ZJUFNf U0VUX0RUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNAotKyMgZGVmaW5lIFJBTkRf Rl9GSVBTX1NFVF9QUk5HX1NFRUQgICAgICAgICAgICAgICAgICAgICAgICAxMDcKLSsjIGRlZmlu ZSBSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgMTA1Ci0g IyBkZWZpbmUgUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9EICAgICAgICAgICAgICAgICAgICAg IDEwMQotLSMgZGVmaW5lIFJBTkRfRl9SQU5EX0lOSVRfRklQUyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxMDIKLSsjIGRlZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMTA5Ci0gIyBkZWZpbmUgUkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTICAg ICAgICAgICAgICAgICAgICAgICAgIDEwMAotIAotIC8qIFJlYXNvbiBjb2Rlcy4gKi8KLS0jIGRl ZmluZSBSQU5EX1JfRFVBTF9FQ19EUkJHX0RJU0FCTEVEICAgICAgICAgICAgICAgICAgICAgMTA0 Ci0tIyBkZWZpbmUgUkFORF9SX0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHICAgICAgICAgICAgICAg ICAgIDEwMgotLSMgZGVmaW5lIFJBTkRfUl9FUlJPUl9JTlNUQU5USUFUSU5HX0RSQkcgICAgICAg ICAgICAgICAgICAxMDMKLS0jIGRlZmluZSBSQU5EX1JfTk9fRklQU19SQU5ET01fTUVUSE9EX1NF VCAgICAgICAgICAgICAgICAgMTAxCi0rIyBkZWZpbmUgUkFORF9SX0RVQUxfRUNfRFJCR19ESVNB QkxFRCAgICAgICAgICAgICAgICAgICAgIDExNAotKyMgZGVmaW5lIFJBTkRfUl9FUlJPUl9JTklU SUFMSVNJTkdfRFJCRyAgICAgICAgICAgICAgICAgICAxMTIKLSsjIGRlZmluZSBSQU5EX1JfRVJS T1JfSU5TVEFOVElBVElOR19EUkJHICAgICAgICAgICAgICAgICAgMTEzCi0rIyBkZWZpbmUgUkFO RF9SX05PTl9GSVBTX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNQotKyMgZGVm aW5lIFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAxMDYK LSsjIGRlZmluZSBSQU5EX1JfTk9fRklQU19SQU5ET01fTUVUSE9EX1NFVCAgICAgICAgICAgICAg ICAgMTExCi0rIyBkZWZpbmUgUkFORF9SX05PX0tFWV9TRVQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEwNwotKyMgZGVmaW5lIFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9PX01VQ0gg ICAgICAgICAgICAgICAgICAxMDEKLSsjIGRlZmluZSBSQU5EX1JfUFJOR19FUlJPUiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTA4Ci0rIyBkZWZpbmUgUkFORF9SX1BSTkdfS0VZRUQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOQotKyMgZGVmaW5lIFJBTkRfUl9QUk5H X05PVF9SRUtFWUVEICAgICAgICAgICAgICAgICAgICAgICAgICAxMDIKLSsjIGRlZmluZSBSQU5E X1JfUFJOR19OT1RfUkVTRUVERUQgICAgICAgICAgICAgICAgICAgICAgICAgMTAzCi0gIyBkZWZp bmUgUkFORF9SX1BSTkdfTk9UX1NFRURFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMAot KyMgZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZICAgICAgICAgICAg ICAxMTAKLSsjIGRlZmluZSBSQU5EX1JfUFJOR19TVFVDSyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTA0Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwotIH0KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjJjL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJjL2Ny eXB0by9yaXBlbWQvcm1kX2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9yaXBlbWQv cm1kX2Rnc3QuYy5maXBzCTIwMTUtMDYtMTIgMTY6NTE6MjEuMDAwMDAwMDAwICswMjAwCi0rKysg b3BlbnNzbC0xLjAuMmMvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jCTIwMTUtMDYtMTUgMTc6MzA6 MDAuMDE0Mjg0MTE5ICswMjAwCi1AQCAtNzAsNyArNzAsNyBAQCB2b2lkIHJpcGVtZDE2MF9ibG9j a194ODYoUklQRU1EMTYwX0NUWCAqCi0gdm9pZCByaXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NU WCAqYywgdW5zaWduZWQgbG9uZyAqcCwgc2l6ZV90IG51bSk7Ci0gI2VuZGlmCi0gCi0tZmlwc19t ZF9pbml0KFJJUEVNRDE2MCkKLStub25maXBzX21kX2luaXQoUklQRU1EMTYwKQotIHsKLSAgICAg bWVtc2V0KGMsIDAsIHNpemVvZigqYykpOwotICAgICBjLT5BID0gUklQRU1EMTYwX0E7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMuZmlwcyBvcGVuc3NsLTEu MC4yYy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vcnNh L3JzYV9jcnB0LmMuZmlwcwkyMDE1LTA2LTEyIDE2OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysr IG9wZW5zc2wtMS4wLjJjL2NyeXB0by9yc2EvcnNhX2NycHQuYwkyMDE1LTA2LTE1IDE3OjMwOjAw LjAxNDI4NDExOSArMDIwMAotQEAgLTg5LDkgKzg5LDkgQEAgaW50IFJTQV9wcml2YXRlX2VuY3J5 cHQoaW50IGZsZW4sIGNvbnN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh ciAqdG8sIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLSB7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwot LSAgICBpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQ U19NRVRIT0QpCi0tICAgICAgICAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19B TExPVykpIHsKLS0gICAgICAgIFJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBULCBSU0Ff Ul9OT05fRklQU19SU0FfTUVUSE9EKTsKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5m bGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkgewotKyAgICAgICAgUlNBZXJyKFJTQV9G X1JTQV9QUklWQVRFX0VOQ1JZUFQsCi0rICAgICAgICAgICAgICAgUlNBX1JfT1BFUkFUSU9OX05P VF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0gICAgICAgICByZXR1cm4gLTE7Ci0gICAgIH0KLSAj ZW5kaWYKLUBAIC0xMTUsOSArMTE1LDkgQEAgaW50IFJTQV9wdWJsaWNfZGVjcnlwdChpbnQgZmxl biwgY29uc3QgdQotICAgICAgICAgICAgICAgICAgICAgICAgUlNBICpyc2EsIGludCBwYWRkaW5n KQotIHsKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJz YS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKLS0gICAgICAgICYmICEocnNh LT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkgewotLSAgICAgICAgUlNBZXJyKFJT QV9GX1JTQV9QVUJMSUNfREVDUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7Ci0rICAg IGlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExP VykpIHsKLSsgICAgICAgIFJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsCi0rICAgICAg ICAgICAgICAgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7Ci0gICAg ICAgICByZXR1cm4gLTE7Ci0gICAgIH0KLSAjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJj L2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3JzYS9yc2Ff ZWF5LmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzCTIwMTUt MDYtMTIgMTY6NTE6MjEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRv L3JzYS9yc2FfZWF5LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTQyODQxMTkgKzAyMDAKLUBAIC0x MTQsNiArMTE0LDEwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAjaW5jbHVkZSA8b3Bl bnNzbC9yc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2VuZGlmCi0gCi0gI2lmbmRlZiBSU0FfTlVMTAotIAotQEAgLTE0MCw3ICsxNDQsNyBA QCBzdGF0aWMgUlNBX01FVEhPRCByc2FfcGtjczFfZWF5X21ldGggPSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBpZiBlID09IDMgKi8KLSAgICAgUlNBX2VheV9pbml0LAot ICAgICBSU0FfZWF5X2ZpbmlzaCwKLS0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IGZsYWdzICovCi0rICAgIFJTQV9GTEFHX0ZJUFNfTUVUSE9ELCAgICAgICAvKiBmbGFncyAqLwot ICAgICBOVUxMLAotICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcnNhX3NpZ24g Ki8KLSAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJzYV92ZXJpZnkgKi8KLUBA IC0xNjAsNiArMTY0LDIyIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQg ZmwKLSAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKLSAgICAgQk5fQ1RYICpjdHggPSBO VUxMOwotIAotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSkgewot KyAgICAgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgICAgICBGSVBT ZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULAotKyAgICAgICAgICAgICAgICAgICAg RklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsg ICAgICAgIH0KLSsKLSsgICAgICAgIGlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQ U19BTExPVykKLSsgICAgICAgICAgICAmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xf UlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKLSsgICAgICAgICAgICBSU0FlcnIoUlNBX0Zf UlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsgICAg ICAgICAgICByZXR1cm4gLTE7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsjIGVuZGlmCi0rCi0gICAg IGlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykg ewotICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJTQV9SX01P RFVMVVNfVE9PX0xBUkdFKTsKLSAgICAgICAgIHJldHVybiAtMTsKLUBAIC0zNjEsNiArMzgxLDIy IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2VuY3J5cHQoaW50IGYKLSAgICAgQklHTlVN ICp1bmJsaW5kID0gTlVMTDsKLSAgICAgQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKLSAK LSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19tb2RlKCkpIHsKLSsgICAgICAg IGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBT X0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsCi0rICAgICAgICAgICAgICAgICAgICBGSVBTX1Jf RklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgICAgIHJldHVybiAtMTsKLSsgICAgICAg IH0KLSsKLSsgICAgICAgIGlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExP VykKLSsgICAgICAgICAgICAmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJ UFNfTUlOX01PRFVMVVNfQklUUykpIHsKLSsgICAgICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX0VB WV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rICAgICAgICAg ICAgcmV0dXJuIC0xOwotKyAgICAgICAgfQotKyAgICB9Ci0rIyBlbmRpZgotKwotICAgICBpZiAo KGN0eCA9IEJOX0NUWF9uZXcoKSkgPT0gTlVMTCkKLSAgICAgICAgIGdvdG8gZXJyOwotICAgICBC Tl9DVFhfc3RhcnQoY3R4KTsKLUBAIC00OTcsNiArNTMzLDIyIEBAIHN0YXRpYyBpbnQgUlNBX2Vh eV9wcml2YXRlX2RlY3J5cHQoaW50IGYKLSAgICAgQklHTlVNICp1bmJsaW5kID0gTlVMTDsKLSAg ICAgQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKLSAKLSsjIGlmZGVmIE9QRU5TU0xfRklQ UwotKyAgICBpZiAoRklQU19tb2RlKCkpIHsKLSsgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RF Q1JZUFQsCi0rICAgICAgICAgICAgICAgICAgICBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQp OwotKyAgICAgICAgICAgIHJldHVybiAtMTsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGlmICgh KHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykKLSsgICAgICAgICAgICAmJiAo Qk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykp IHsKLSsgICAgICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsIFJT QV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rICAgICAgICAgICAgcmV0dXJuIC0xOwotKyAgICAg ICAgfQotKyAgICB9Ci0rIyBlbmRpZgotKwotICAgICBpZiAoKGN0eCA9IEJOX0NUWF9uZXcoKSkg PT0gTlVMTCkKLSAgICAgICAgIGdvdG8gZXJyOwotICAgICBCTl9DVFhfc3RhcnQoY3R4KTsKLUBA IC02MjMsNiArNjc1LDIyIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZGVjcnlwdChpbnQg ZmwKLSAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gTlVMTDsKLSAgICAgQk5fQ1RYICpjdHggPSBO VUxMOwotIAotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKSkgewot KyAgICAgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgICAgICBGSVBT ZXJyKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULAotKyAgICAgICAgICAgICAgICAgICAg RklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsg ICAgICAgIH0KLSsKLSsgICAgICAgIGlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQ U19BTExPVykKLSsgICAgICAgICAgICAmJiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xf UlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKLSsgICAgICAgICAgICBSU0FlcnIoUlNBX0Zf UlNBX0VBWV9QVUJMSUNfREVDUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsgICAg ICAgICAgICByZXR1cm4gLTE7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsjIGVuZGlmCi0rCi0gICAg IGlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykg ewotICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX01P RFVMVVNfVE9PX0xBUkdFKTsKLSAgICAgICAgIHJldHVybiAtMTsKLUBAIC04ODYsNiArOTU0LDkg QEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAoQklHTlVNICpyMCwgYwotIAotIHN0YXRpYyBp bnQgUlNBX2VheV9pbml0KFJTQSAqcnNhKQotIHsKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAg ICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rIyBlbmRpZgotICAgICByc2EtPmZsYWdzIHw9IFJT QV9GTEFHX0NBQ0hFX1BVQkxJQyB8IFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEU7Ci0gICAgIHJldHVy biAoMSk7Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3JzYS9yc2FfZXJyLmMu ZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vcnNhL3JzYV9lcnIuYwotLS0tIG9wZW5zc2wtMS4w LjJjL2NyeXB0by9yc2EvcnNhX2Vyci5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAw MDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vcnNhL3JzYV9lcnIuYwkyMDE1LTA2 LTE1IDE3OjMwOjAwLjAxNDI4NDExOSArMDIwMAotQEAgLTEzNiw2ICsxMzYsOCBAQCBzdGF0aWMg RVJSX1NUUklOR19EQVRBIFJTQV9zdHJfZnVuY3RzW10KLSAgICAge0VSUl9GVU5DKFJTQV9GX1JT QV9QVUJMSUNfRU5DUllQVCksICJSU0FfcHVibGljX2VuY3J5cHQifSwKLSAgICAge0VSUl9GVU5D KFJTQV9GX1JTQV9QVUJfREVDT0RFKSwgIlJTQV9QVUJfREVDT0RFIn0sCi0gICAgIHtFUlJfRlVO QyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcpLCAiUlNBX3NldHVwX2JsaW5kaW5nIn0sCi0rICAg IHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9EKSwgIlJTQV9zZXRfZGVmYXVs dF9tZXRob2QifSwKLSsgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfTUVUSE9EKSwgIlJTQV9z ZXRfbWV0aG9kIn0sCi0gICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTiksICJSU0Ffc2lnbiJ9 LAotICAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcpLAotICAg ICAgIlJTQV9zaWduX0FTTjFfT0NURVRfU1RSSU5HIn0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4y Yy9jcnlwdG8vcnNhL3JzYV9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9yc2EvcnNh X2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcwkyMDE1 LTA2LTEyIDE2OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0 by9yc2EvcnNhX2dlbi5jCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDE0Mjg0MTE5ICswMjAwCi1AQCAt NjksNiArNjksODAgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAjaWZkZWYgT1BFTlNT TF9GSVBTCi0gIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjIGluY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+Ci0rIyBpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKwotK3N0YXRpYyBpbnQgZmlwc19y c2FfcGFpcndpc2VfZmFpbCA9IDA7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2 b2lkKQotK3sKLSsgICAgZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDE7Ci0rfQotKwotK2ludCBm aXBzX2NoZWNrX3JzYShSU0EgKnJzYSkKLSt7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgdGJz W10gPSAiUlNBIFBhaXJ3aXNlIENoZWNrIERhdGEiOwotKyAgICB1bnNpZ25lZCBjaGFyICpjdGJ1 ZiA9IE5VTEwsICpwdGJ1ZiA9IE5VTEw7Ci0rICAgIGludCBsZW4sIHJldCA9IDA7Ci0rICAgIEVW UF9QS0VZICpwazsKLSsKLSsgICAgaWYgKChwayA9IEVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQot KyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIEVWUF9QS0VZX3NldDFfUlNBKHBrLCByc2EpOwot KwotKyAgICAvKiBQZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0ICov Ci0rICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBFVlBfc2hhMSgpLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLCBO VUxMKQotKyAgICAgICAgfHwgIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwg TlVMTCwgMCwgRVZQX3NoYTEoKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLCBOVUxMKQotKyAgICAgICAgfHwgIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwgTlVMTCwgMCwgRVZQX3NoYTEoKSwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1Ms IE5VTEwpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIC8qIE5vdyBwZXJmb3JtIHBhaXJ3aXNl IGNvbnNpc3RlbmN5IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCi0rICAgIGN0YnVmID0gT1BFTlNT TF9tYWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rICAgIGlmICghY3RidWYpCi0rICAgICAgICBnb3Rv IGVycjsKLSsKLSsgICAgbGVuID0KLSsgICAgICAgIFJTQV9wdWJsaWNfZW5jcnlwdChzaXplb2Yo dGJzKSAtIDEsIHRicywgY3RidWYsIHJzYSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBS U0FfUEtDUzFfUEFERElORyk7Ci0rICAgIGlmIChsZW4gPD0gMCkKLSsgICAgICAgIGdvdG8gZXJy OwotKyAgICAvKiBDaGVjayBjaXBoZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCi0r ICAgIGlmICgobGVuID09IChzaXplb2YodGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3RidWYs IGxlbikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgcHRidWYgPSBPUEVOU1NMX21hbGxvYyhS U0Ffc2l6ZShyc2EpKTsKLSsKLSsgICAgaWYgKCFwdGJ1ZikKLSsgICAgICAgIGdvdG8gZXJyOwot KyAgICBsZW4gPSBSU0FfcHJpdmF0ZV9kZWNyeXB0KGxlbiwgY3RidWYsIHB0YnVmLCByc2EsIFJT QV9QS0NTMV9QQURESU5HKTsKLSsgICAgaWYgKGxlbiAhPSAoc2l6ZW9mKHRicykgLSAxKSkKLSsg ICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAobWVtY21wKHB0YnVmLCB0YnMsIGxlbikpCi0rICAg ICAgICBnb3RvIGVycjsKLSsKLSsgICAgcmV0ID0gMTsKLSsKLSsgICAgaWYgKCFwdGJ1ZikKLSsg ICAgICAgIGdvdG8gZXJyOwotKwotKyBlcnI6Ci0rICAgIGlmIChyZXQgPT0gMCkgewotKyAgICAg ICAgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQ U19DSEVDS19SU0EsIEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7Ci0rICAgIH0KLSsKLSsg ICAgaWYgKGN0YnVmKQotKyAgICAgICAgT1BFTlNTTF9mcmVlKGN0YnVmKTsKLSsgICAgaWYgKHB0 YnVmKQotKyAgICAgICAgT1BFTlNTTF9mcmVlKHB0YnVmKTsKLSsgICAgaWYgKHBrKQotKyAgICAg ICAgRVZQX1BLRVlfZnJlZShwayk7Ci0rCi0rICAgIHJldHVybiByZXQ7Ci0rfQotICNlbmRpZgot IAotIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywgQklH TlVNICplX3ZhbHVlLAotQEAgLTg0LDcgKzE1OCw3IEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5f a2V5Z2VuKFJTQSAqcnNhLAotIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQg Yml0cywgQklHTlVNICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpCi0gewotICNpZmRlZiBPUEVOU1NM X0ZJUFMKLS0gICAgaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9G TEFHX0ZJUFNfTUVUSE9EKQotKyAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEocnNhLT5t ZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQotICAgICAgICAgJiYgIShyc2EtPmZs YWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSB7Ci0gICAgICAgICBSU0FlcnIoUlNBX0Zf UlNBX0dFTkVSQVRFX0tFWV9FWCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7Ci0gICAgICAg ICByZXR1cm4gMDsKLUBAIC05MiwxMCArMTY2LDYgQEAgaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgo UlNBICpyc2EsIGludCBiaQotICNlbmRpZgotICAgICBpZiAocnNhLT5tZXRoLT5yc2Ffa2V5Z2Vu KQotICAgICAgICAgcmV0dXJuIHJzYS0+bWV0aC0+cnNhX2tleWdlbihyc2EsIGJpdHMsIGVfdmFs dWUsIGNiKTsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIGlmIChGSVBTX21vZGUoKSkKLS0g ICAgICAgIHJldHVybiBGSVBTX3JzYV9nZW5lcmF0ZV9rZXlfZXgocnNhLCBiaXRzLCBlX3ZhbHVl LCBjYik7Ci0tI2VuZGlmCi0gICAgIHJldHVybiByc2FfYnVpbHRpbl9rZXlnZW4ocnNhLCBiaXRz LCBlX3ZhbHVlLCBjYik7Ci0gfQotIAotQEAgLTEwOCw2ICsxNzgsMjAgQEAgc3RhdGljIGludCBy c2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCi0gICAgIGludCBiaXRzcCwgYml0c3EsIG9rID0g LTEsIG4gPSAwOwotICAgICBCTl9DVFggKmN0eCA9IE5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xf RklQUwotKyAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgpKSB7Ci0rICAgICAgICBpZiAoRklQU19z ZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlM VElOX0tFWUdFTiwgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgICAgICBy ZXR1cm4gMDsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGlmIChiaXRzIDwgT1BFTlNTTF9SU0Ff RklQU19NSU5fTU9EVUxVU19CSVRTKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNB X0JVSUxUSU5fS0VZR0VOLCBGSVBTX1JfS0VZX1RPT19TSE9SVCk7Ci0rICAgICAgICAgICAgcmV0 dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsjZW5kaWYKLSsKLSAgICAgY3R4ID0gQk5fQ1RY X25ldygpOwotICAgICBpZiAoY3R4ID09IE5VTEwpCi0gICAgICAgICBnb3RvIGVycjsKLUBAIC0y MzMsNiArMzE3LDE2IEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAot ICAgICBpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFtcCwgcnNhLT5xLCBwLCBjdHgpKQotICAg ICAgICAgZ290byBlcnI7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19t b2R1bGVfbW9kZSgpKSB7Ci0rICAgICAgICBpZiAoZmlwc19yc2FfcGFpcndpc2VfZmFpbCkKLSsg ICAgICAgICAgICBCTl9hZGRfd29yZChyc2EtPm4sIDEpOwotKwotKyAgICAgICAgaWYgKCFmaXBz X2NoZWNrX3JzYShyc2EpKQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rI2VuZGlm Ci0rCi0gICAgIG9rID0gMTsKLSAgZXJyOgotICAgICBpZiAob2sgPT0gLTEpIHsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjJjL2NyeXB0by9yc2EvcnNhLmguZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlw dG8vcnNhL3JzYS5oCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3JzYS9yc2EuaC5maXBzCTIw MTUtMDYtMTUgMTc6Mjk6NTkuOTAzMjgxNTc4ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5 cHRvL3JzYS9yc2EuaAkyMDE1LTA2LTE1IDE3OjMwOjAwLjAxNDI4NDExOSArMDIwMAotQEAgLTE2 OCw2ICsxNjgsOCBAQCBzdHJ1Y3QgcnNhX3N0IHsKLSAjICBkZWZpbmUgT1BFTlNTTF9SU0FfTUFY X01PRFVMVVNfQklUUyAgIDE2Mzg0Ci0gIyBlbmRpZgotIAotKyMgZGVmaW5lIE9QRU5TU0xfUlNB X0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0rCi0gIyBpZm5kZWYgT1BFTlNTTF9SU0FfU01B TExfTU9EVUxVU19CSVRTCi0gIyAgZGVmaW5lIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklU UyAzMDcyCi0gIyBlbmRpZgotQEAgLTMyOSw2ICszMzEsMTMgQEAgUlNBICpSU0FfZ2VuZXJhdGVf a2V5KGludCBiaXRzLCB1bnNpZ25lZAotIAotIC8qIE5ldyB2ZXJzaW9uICovCi0gaW50IFJTQV9n ZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpj Yik7Ci0raW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVN ICpwMiwgQklHTlVNICpxMSwKLSsgICAgICAgICAgICAgICAgICAgICAgIEJJR05VTSAqcTIsIGNv bnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKLSsgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05VTSAqWHExLAotKyAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCi0rICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7Ci0raW50IFJTQV9Y OTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYik7Ci0gCi0gaW50IFJT QV9jaGVja19rZXkoY29uc3QgUlNBICopOwotICAgICAgICAgLyogbmV4dCA0IHJldHVybiAtMSBv biBlcnJvciAqLwotQEAgLTUzOCw3ICs1NDcsNyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdz KHZvaWQpOwotICMgZGVmaW5lIFJTQV9GX1JTQV9BTEdPUl9UT19NRCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxNTcKLSAjIGRlZmluZSBSU0FfRl9SU0FfQlVJTFRJTl9LRVlHRU4gICAgICAg ICAgICAgICAgICAgICAgICAgMTI5Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX0NIRUNLX0tFWSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEyMwotLSMgZGVmaW5lIFJTQV9GX1JTQV9DTVNfREVD UllQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTgKLSsjIGRlZmluZSBSU0FfRl9SU0Ff Q01TX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU4Ci0gIyBkZWZpbmUgUlNB X0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgIDEwMQotICMgZGVm aW5lIFJTQV9GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUICAgICAgICAgICAgICAgICAgICAxMDIK LSAjIGRlZmluZSBSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUICAgICAgICAgICAgICAgICAg ICAgMTAzCi1AQCAtNTU5LDcgKzU2OCw3IEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9p ZCk7Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX09BRVAgICAgICAgICAg ICAgICAgIDEyMQotICMgZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9PQUVQX01H RjEgICAgICAgICAgICAxNjAKLSAjIGRlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFf UFNTICAgICAgICAgICAgICAgICAgMTI1Ci0tIyBkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQURE X1BLQ1MxX1BTU19NR0YxICAgICAgICAgICAgIDE0OAotKyMgZGVmaW5lIFJTQV9GX1JTQV9QQURE SU5HX0FERF9QS0NTMV9QU1NfTUdGMSAgICAgICAgICAgICAxNTgKLSAjIGRlZmluZSBSU0FfRl9S U0FfUEFERElOR19BRERfUEtDUzFfVFlQRV8xICAgICAgICAgICAgICAgMTA4Ci0gIyBkZWZpbmUg UlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVfMiAgICAgICAgICAgICAgIDEwOQotICMg ZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9TU0xWMjMgICAgICAgICAgICAgICAgICAgICAx MTAKLUBAIC01NzMsMjEgKzU4MiwyMyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQp OwotICMgZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0NIRUNLX1g5MzEgICAgICAgICAgICAgICAg ICAgICAxMjgKLSAjIGRlZmluZSBSU0FfRl9SU0FfUFJJTlQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTE1Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDExNgotLSMgZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZ UFQgICAgICAgICAgICAgICAgICAgICAgICAxNTAKLS0jIGRlZmluZSBSU0FfRl9SU0FfUFJJVkFU RV9FTkNSWVBUICAgICAgICAgICAgICAgICAgICAgICAgMTUxCi0rIyBkZWZpbmUgUlNBX0ZfUlNB X1BSSVZBVEVfREVDUllQVCAgICAgICAgICAgICAgICAgICAgICAgIDE1NwotKyMgZGVmaW5lIFJT QV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAxNDgKLSAjIGRl ZmluZSBSU0FfRl9SU0FfUFJJVl9ERUNPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM3 Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RFICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEzOAotICMgZGVmaW5lIFJTQV9GX1JTQV9QU1NfVE9fQ1RYICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxNjIKLS0jIGRlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQgICAgICAg ICAgICAgICAgICAgICAgICAgMTUyCi0rIyBkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBU ICAgICAgICAgICAgICAgICAgICAgICAgIDE0OQotICMgZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNf RU5DUllQVCAgICAgICAgICAgICAgICAgICAgICAgICAxNTMKLSAjIGRlZmluZSBSU0FfRl9SU0Ff UFVCX0RFQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM5Ci0gIyBkZWZpbmUgUlNB X0ZfUlNBX1NFVFVQX0JMSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgIDEzNgotKyMgZGVm aW5lIFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAxNTAK LSsjIGRlZmluZSBSU0FfRl9SU0FfU0VUX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMTUxCi0gIyBkZWZpbmUgUlNBX0ZfUlNBX1NJR04gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDExNwotICMgZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5H ICAgICAgICAgICAgICAgICAxMTgKLSAjIGRlZmluZSBSU0FfRl9SU0FfVkVSSUZZICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTE5Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9B U04xX09DVEVUX1NUUklORyAgICAgICAgICAgICAgIDEyMAotICMgZGVmaW5lIFJTQV9GX1JTQV9W RVJJRllfUEtDUzFfUFNTICAgICAgICAgICAgICAgICAgICAgICAxMjYKLS0jIGRlZmluZSBSU0Ff Rl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxICAgICAgICAgICAgICAgICAgMTQ5Ci0rIyBkZWZp bmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdGMSAgICAgICAgICAgICAgICAgIDE1Mgot IAotIC8qIFJlYXNvbiBjb2Rlcy4gKi8KLSAjIGRlZmluZSBSU0FfUl9BTEdPUklUSE1fTUlTTUFU Q0ggICAgICAgICAgICAgICAgICAgICAgICAgMTAwCi1AQCAtNjIwLDIxICs2MzEsMjIgQEAgdm9p ZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAjIGRlZmluZSBSU0FfUl9JTlZBTElEX09B RVBfUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAgICAgMTYyCi0gIyBkZWZpbmUgUlNBX1JfSU5W QUxJRF9QQURESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOAotICMgZGVmaW5lIFJT QV9SX0lOVkFMSURfUEFERElOR19NT0RFICAgICAgICAgICAgICAgICAgICAgICAxNDEKLS0jIGRl ZmluZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJTICAgICAgICAgICAgICAgICAgICAgMTQ5 Ci0rIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9QU1NfUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAg ICAgIDE1NwotICMgZGVmaW5lIFJTQV9SX0lOVkFMSURfUFNTX1NBTFRMRU4gICAgICAgICAgICAg ICAgICAgICAgICAxNDYKLS0jIGRlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVOR1RIICAgICAg ICAgICAgICAgICAgICAgICAgMTUwCi0rIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdU SCAgICAgICAgICAgICAgICAgICAgICAgIDE1OAotICMgZGVmaW5lIFJTQV9SX0lOVkFMSURfVFJB SUxFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzkKLSAjIGRlZmluZSBSU0FfUl9JTlZB TElEX1g5MzFfRElHRVNUICAgICAgICAgICAgICAgICAgICAgICAgMTQyCi0gIyBkZWZpbmUgUlNB X1JfSVFNUF9OT1RfSU5WRVJTRV9PRl9RICAgICAgICAgICAgICAgICAgICAgIDEyNgotICMgZGVm aW5lIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCAgICAgICAgICAgICAgICAgICAgICAgICAxMjAK LSAjIGRlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAg ICAgMTM0Ci0gIyBkZWZpbmUgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UgICAgICAgICAgICAgICAg ICAgICAgICAgIDEwNQotLSMgZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QgICAgICAg ICAgICAgICAgICAgICAgICAxNTcKLSsjIGRlZmluZSBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9E ICAgICAgICAgICAgICAgICAgICAgICAgMTQ5Ci0rIyBkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVU SE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0OQotICMgZGVmaW5lIFJTQV9SX05PX1BV QkxJQ19FWFBPTkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAxNDAKLSAjIGRlZmluZSBSU0Ff Ul9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HICAgICAgICAgICAgICAgICAgMTEzCi0gIyBkZWZp bmUgUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EgICAgICAgICAgICAgICAgICAgICAgIDEyNwot ICMgZGVmaW5lIFJTQV9SX09BRVBfREVDT0RJTkdfRVJST1IgICAgICAgICAgICAgICAgICAgICAg ICAxMjEKLS0jIGRlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RF ICAgICAgICAgMTU4Ci0rIyBkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJ UFNfTU9ERSAgICAgICAgIDE1MAotICMgZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9S VEVEX0ZPUl9USElTX0tFWVRZUEUgICAxNDgKLSAjIGRlZmluZSBSU0FfUl9QQURESU5HX0NIRUNL X0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgMTE0Ci0gIyBkZWZpbmUgUlNBX1JfUEtDU19E RUNPRElOR19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgIDE1OQotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmMvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8v cnNhL3JzYV9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZp cHMJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4y Yy9jcnlwdG8vcnNhL3JzYV9saWIuYwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAxNTI4NDE0MiArMDIw MAotQEAgLTg0LDIzICs4NCwyMiBAQCBSU0EgKlJTQV9uZXcodm9pZCkKLSAKLSB2b2lkIFJTQV9z ZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKLSB7Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9G TEFHX0ZJUFNfTUVUSE9EKSkgewotKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVM VF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7Ci0rICAgICAgICByZXR1cm47Ci0rICAg IH0KLSsjZW5kaWYKLSAgICAgZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7Ci0gfQotIAotIGNvbnN0 IFJTQV9NRVRIT0QgKlJTQV9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCkKLSB7Ci0gICAgIGlmIChk ZWZhdWx0X1JTQV9tZXRoID09IE5VTEwpIHsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgICAg ICBpZiAoRklQU19tb2RlKCkpCi0tICAgICAgICAgICAgcmV0dXJuIEZJUFNfcnNhX3BrY3MxX3Nz bGVheSgpOwotLSAgICAgICAgZWxzZQotLSAgICAgICAgICAgIHJldHVybiBSU0FfUEtDUzFfU1NM ZWF5KCk7Ci0tI2Vsc2UKLS0jIGlmZGVmIFJTQV9OVUxMCi0rI2lmZGVmIFJTQV9OVUxMCi0gICAg ICAgICBkZWZhdWx0X1JTQV9tZXRoID0gUlNBX251bGxfbWV0aG9kKCk7Ci0tIyBlbHNlCi0rI2Vs c2UKLSAgICAgICAgIGRlZmF1bHRfUlNBX21ldGggPSBSU0FfUEtDUzFfU1NMZWF5KCk7Ci0tIyBl bmRpZgotICNlbmRpZgotICAgICB9Ci0gCi1AQCAtMTE5LDYgKzExOCwxMiBAQCBpbnQgUlNBX3Nl dF9tZXRob2QoUlNBICpyc2EsIGNvbnN0IFJTQV9NCi0gICAgICAqIHRvIGRlYWwgd2l0aCB3aGlj aCBFTkdJTkUgaXQgY29tZXMgZnJvbS4KLSAgICAgICovCi0gICAgIGNvbnN0IFJTQV9NRVRIT0Qg Km10bXA7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgISht ZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkgewotKyAgICAgICAgUlNBZXJyKFJT QV9GX1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOwotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIH0KLSsjZW5kaWYKLSAgICAgbXRtcCA9IHJzYS0+bWV0aDsKLSAgICAgaWYg KG10bXAtPmZpbmlzaCkKLSAgICAgICAgIG10bXAtPmZpbmlzaChyc2EpOwotQEAgLTE2NSw2ICsx NzAsMTcgQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKLSAgICAgICAgIH0K LSAgICAgfQotICNlbmRpZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9k ZSgpICYmICEocmV0LT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkgewotKyAg ICAgICAgUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0Qp OwotKyMgaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0rICAgICAgICBpZiAocmV0LT5lbmdpbmUp Ci0rICAgICAgICAgICAgRU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7Ci0rIyBlbmRpZgotKyAg ICAgICAgT1BFTlNTTF9mcmVlKHJldCk7Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgfQot KyNlbmRpZgotIAotICAgICByZXQtPnBhZCA9IDA7Ci0gICAgIHJldC0+dmVyc2lvbiA9IDA7Ci1A QCAtMTgzLDcgKzE5OSw3IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCi0g ICAgIHJldC0+YmxpbmRpbmcgPSBOVUxMOwotICAgICByZXQtPm10X2JsaW5kaW5nID0gTlVMTDsK LSAgICAgcmV0LT5iaWdudW1fZGF0YSA9IE5VTEw7Ci0tICAgIHJldC0+ZmxhZ3MgPSByZXQtPm1l dGgtPmZsYWdzICYgflJTQV9GTEFHX05PTl9GSVBTX0FMTE9XOwotKyAgICByZXQtPmZsYWdzID0g cmV0LT5tZXRoLT5mbGFnczsKLSAgICAgaWYgKCFDUllQVE9fbmV3X2V4X2RhdGEoQ1JZUFRPX0VY X0lOREVYX1JTQSwgcmV0LCAmcmV0LT5leF9kYXRhKSkgewotICNpZm5kZWYgT1BFTlNTTF9OT19F TkdJTkUKLSAgICAgICAgIGlmIChyZXQtPmVuZ2luZSkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJj L2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vcnNhL3Jz YV9wbWV0aC5jCi0tLS0gb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3JzYS9yc2FfcG1ldGguYy5maXBz CTIwMTUtMDYtMTIgMTY6NTE6MjEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMv Y3J5cHRvL3JzYS9yc2FfcG1ldGguYwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAxNTI4NDE0MiArMDIw MAotQEAgLTIyOCwyMCArMjI4LDYgQEAgc3RhdGljIGludCBwa2V5X3JzYV9zaWduKEVWUF9QS0VZ X0NUWCAqYwotICAgICAgICAgICAgIFJTQWVycihSU0FfRl9QS0VZX1JTQV9TSUdOLCBSU0FfUl9J TlZBTElEX0RJR0VTVF9MRU5HVEgpOwotICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAg IH0KLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgICAgICBpZiAocmV0ID4gMCkgewotLSAgICAg ICAgICAgIHVuc2lnbmVkIGludCBzbGVuOwotLSAgICAgICAgICAgIHJldCA9IEZJUFNfcnNhX3Np Z25fZGlnZXN0KHJzYSwgdGJzLCB0YnNsZW4sIHJjdHgtPm1kLAotLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJjdHgtPnBhZF9tb2RlLAotLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJjdHgtPnNhbHRsZW4sCi0tICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmN0eC0+bWdmMW1kLCBzaWcsICZzbGVuKTsKLS0gICAgICAg ICAgICBpZiAocmV0ID4gMCkKLS0gICAgICAgICAgICAgICAgKnNpZ2xlbiA9IHNsZW47Ci0tICAg ICAgICAgICAgZWxzZQotLSAgICAgICAgICAgICAgICAqc2lnbGVuID0gMDsKLS0gICAgICAgICAg ICByZXR1cm4gcmV0OwotLSAgICAgICAgfQotLSNlbmRpZgotIAotICAgICAgICAgaWYgKEVWUF9N RF90eXBlKHJjdHgtPm1kKSA9PSBOSURfbWRjMikgewotICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBzbHRtcDsKLUBAIC0zNTksMTcgKzM0NSw2IEBAIHN0YXRpYyBpbnQgcGtleV9yc2FfdmVyaWZ5 KEVWUF9QS0VZX0NUWAotICAgICB9Ci0gI2VuZGlmCi0gICAgIGlmIChyY3R4LT5tZCkgewotLSNp ZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgICAgIGlmIChydiA+IDApIHsKLS0gICAgICAgICAgICBy ZXR1cm4gRklQU19yc2FfdmVyaWZ5X2RpZ2VzdChyc2EsCi0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGJzLCB0YnNsZW4sCi0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmN0eC0+bWQsCi0tICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmN0eC0+cGFkX21vZGUsCi0tICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmN0eC0+c2FsdGxlbiwKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByY3R4LT5tZ2YxbWQsIHNpZywgc2lnbGVuKTsKLS0KLS0g ICAgICAgIH0KLS0jZW5kaWYKLSAgICAgICAgIGlmIChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfUEtD UzFfUEFERElORykKLSAgICAgICAgICAgICByZXR1cm4gUlNBX3ZlcmlmeShFVlBfTURfdHlwZShy Y3R4LT5tZCksIHRicywgdGJzbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp Zywgc2lnbGVuLCByc2EpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3JzYS9yc2Ff c2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCi0tLS0gb3Bl bnNzbC0xLjAuMmMvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jLmZpcHMJMjAxNS0wNi0xMiAxNjo1MToy MS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vcnNhL3JzYV9zaWdu LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTUyODQxNDIgKzAyMDAKLUBAIC0xMzIsNyArMTMyLDEw IEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKLSAgICAgICAgIGky ZF9YNTA5X1NJRygmc2lnLCAmcCk7Ci0gICAgICAgICBzID0gdG1wczsKLSAgICAgfQotLSAgICBp ID0gUlNBX3ByaXZhdGVfZW5jcnlwdChpLCBzLCBzaWdyZXQsIHJzYSwgUlNBX1BLQ1MxX1BBRERJ TkcpOwotKyAgICAvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9p ZCBGSVBTIGJsb2NraW5nICovCi0rICAgIGkgPSByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJz YS0+bWV0aC0+cnNhX3ByaXZfZW5jKGksIHMsIHNpZ3JldCwgcnNhLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUEtDUzFfUEFE RElORykgOgotKyAgICAgICAgMDsKLSAgICAgaWYgKGkgPD0gMCkKLSAgICAgICAgIHJldCA9IDA7 Ci0gICAgIGVsc2UKLUBAIC0xODgsOCArMTkxLDEwIEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQg ZHR5cGUsIGNvbnN0IHVuc2kKLSAgICAgfQotIAotICAgICBpZiAoKGR0eXBlID09IE5JRF9tZDVf c2hhMSkgJiYgcm0pIHsKLS0gICAgICAgIGkgPSBSU0FfcHVibGljX2RlY3J5cHQoKGludClzaWds ZW4sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2J1Ziwgcm0sIHJzYSwgUlNB X1BLQ1MxX1BBRERJTkcpOwotKyAgICAgICAgaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyBy c2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2J1Ziwgcm0sIHJzYSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSU0FfUEtDUzFfUEFERElORykKLSsgICAgICAgICAgICA6IDA7Ci0gICAgICAgICBpZiAo aSA8PSAwKQotICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgKnBybV9sZW4gPSBpOwot QEAgLTIwNSw3ICsyMTAsMTEgQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3Qg dW5zaQotICAgICAgICAgUlNBZXJyKFJTQV9GX0lOVF9SU0FfVkVSSUZZLCBSU0FfUl9JTlZBTElE X01FU1NBR0VfTEVOR1RIKTsKLSAgICAgICAgIGdvdG8gZXJyOwotICAgICB9Ci0tICAgIGkgPSBS U0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sIHNpZ2J1ZiwgcywgcnNhLCBSU0FfUEtDUzFf UEFERElORyk7Ci0rICAgIC8qIE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRv IGF2b2lkIEZJUFMgYmxvY2tpbmcgKi8KLSsgICAgaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMg PyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLCBzaWdidWYsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLCByc2EsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS U0FfUEtDUzFfUEFERElORykgOgotKyAgICAgICAgMDsKLSAKLSAgICAgaWYgKGkgPD0gMCkKLSAg ICAgICAgIGdvdG8gZXJyOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3NoYS9zaGEu aC5maXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9zaGEvc2hhLmgKLS0tLSBvcGVuc3NsLTEuMC4y Yy9jcnlwdG8vc2hhL3NoYS5oLmZpcHMJMjAxNS0wNi0xNSAxNzoyOTo1OS42OTcyNzY4NjAgKzAy MDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vc2hhL3NoYS5oCTIwMTUtMDYtMTUgMTc6MzA6 MDAuMDE1Mjg0MTQyICswMjAwCi1AQCAtMTA1LDkgKzEwNSw2IEBAIHR5cGVkZWYgc3RydWN0IFNI QXN0YXRlX3N0IHsKLSB9IFNIQV9DVFg7Ci0gCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19TSEEwCi0t IyAgaWZkZWYgT1BFTlNTTF9GSVBTCi0taW50IHByaXZhdGVfU0hBX0luaXQoU0hBX0NUWCAqYyk7 Ci0tIyAgZW5kaWYKLSBpbnQgU0hBX0luaXQoU0hBX0NUWCAqYyk7Ci0gaW50IFNIQV9VcGRhdGUo U0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IFNIQV9GaW5h bCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7Ci1AQCAtMTE1LDkgKzExMiw2IEBAIHVu c2lnbmVkIGNoYXIgKlNIQShjb25zdCB1bnNpZ25lZCBjaGFyICoKLSB2b2lkIFNIQV9UcmFuc2Zv cm0oU0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0gIyBlbmRpZgotICMg aWZuZGVmIE9QRU5TU0xfTk9fU0hBMQotLSMgIGlmZGVmIE9QRU5TU0xfRklQUwotLWludCBwcml2 YXRlX1NIQTFfSW5pdChTSEFfQ1RYICpjKTsKLS0jICBlbmRpZgotIGludCBTSEExX0luaXQoU0hB X0NUWCAqYyk7Ci0gaW50IFNIQTFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEs IHNpemVfdCBsZW4pOwotIGludCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RY ICpjKTsKLUBAIC0xMzksMTAgKzEzMyw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTI1NnN0YXRlX3N0 IHsKLSB9IFNIQTI1Nl9DVFg7Ci0gCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKLS0jICBp ZmRlZiBPUEVOU1NMX0ZJUFMKLS1pbnQgcHJpdmF0ZV9TSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpj KTsKLS1pbnQgcHJpdmF0ZV9TSEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjKTsKLS0jICBlbmRpZgot IGludCBTSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKLSBpbnQgU0hBMjI0X1VwZGF0ZShTSEEy NTZfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgU0hBMjI0X0Zp bmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKLUBAIC0xOTIsMTAgKzE4Miw2 IEBAIHR5cGVkZWYgc3RydWN0IFNIQTUxMnN0YXRlX3N0IHsKLSAjIGVuZGlmCi0gCi0gIyBpZm5k ZWYgT1BFTlNTTF9OT19TSEE1MTIKLS0jICBpZmRlZiBPUEVOU1NMX0ZJUFMKLS1pbnQgcHJpdmF0 ZV9TSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKLS1pbnQgcHJpdmF0ZV9TSEE1MTJfSW5pdChT SEE1MTJfQ1RYICpjKTsKLS0jICBlbmRpZgotIGludCBTSEEzODRfSW5pdChTSEE1MTJfQ1RYICpj KTsKLSBpbnQgU0hBMzg0X1VwZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBz aXplX3QgbGVuKTsKLSBpbnQgU0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJf Q1RYICpjKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5m aXBzIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9zaGEvc2hhX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4w LjJjL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzCTIwMTUtMDYtMTUgMTc6Mjk6NTkuNjk5Mjc2 OTA2ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIwMTUt MDYtMTUgMTc6MzA6MDAuMDE1Mjg0MTQyICswMjAwCi1AQCAtMTIzLDExICsxMjMsMTQgQEAgdm9p ZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIoU0hBX0NUWCAqYywgYwotICNkZWZpbmUgSU5JVF9EQVRB X2g0IDB4YzNkMmUxZjBVTAotIAotICNpZmRlZiBTSEFfMAotLWZpcHNfbWRfaW5pdChTSEEpCi0r bm9uZmlwc19tZF9pbml0KFNIQSkKLSAjZWxzZQotIGZpcHNfbWRfaW5pdF9jdHgoU0hBMSwgU0hB KQotICNlbmRpZgotIHsKLSsjaWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJ UFMpCi0rICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAgICAgbWVtc2V0KGMs IDAsIHNpemVvZigqYykpOwotICAgICBjLT5oMCA9IElOSVRfREFUQV9oMDsKLSAgICAgYy0+aDEg PSBJTklUX0RBVEFfaDE7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlwdG8vc2hhL3NoYTI1 Ni5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3NoYS9zaGEyNTYuYwotLS0tIG9wZW5zc2wt MS4wLjJjL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcwkyMDE1LTA2LTEyIDE2OjUxOjIxLjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9zaGEvc2hhMjU2LmMJMjAxNS0w Ni0xNSAxNzozMDowMC4wMTUyODQxNDIgKzAyMDAKLUBAIC0xMiwxMiArMTIsMTkgQEAKLSAKLSAj IGluY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0gIyBpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgot KyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyAgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rIyBl bmRpZgotKwotICMgaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotIAotIGNvbnN0IGNoYXIg U0hBMjU2X3ZlcnNpb25bXSA9ICJTSEEtMjU2IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi0g Zmlwc19tZF9pbml0X2N0eChTSEEyMjQsIFNIQTI1NikKLSB7Ci0rIyBpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyMgZW5kaWYKLSAgICAgbWVtc2V0KGMs IDAsIHNpemVvZigqYykpOwotICAgICBjLT5oWzBdID0gMHhjMTA1OWVkOFVMOwotICAgICBjLT5o WzFdID0gMHgzNjdjZDUwN1VMOwotQEAgLTMzLDYgKzQwLDkgQEAgZmlwc19tZF9pbml0X2N0eChT SEEyMjQsIFNIQTI1NikKLSAKLSBmaXBzX21kX2luaXQoU0hBMjU2KQotIHsKLSsjIGlmZGVmIE9Q RU5TU0xfRklQUwotKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rIyBlbmRpZgotICAgICBt ZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7Ci0gICAgIGMtPmhbMF0gPSAweDZhMDllNjY3VUw7Ci0g ICAgIGMtPmhbMV0gPSAweGJiNjdhZTg1VUw7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9jcnlw dG8vc2hhL3NoYTUxMi5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3NoYS9zaGE1MTIuYwot LS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDE1LTA2LTEyIDE2 OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2NyeXB0by9zaGEvc2hh NTEyLmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTYyODQxNjUgKzAyMDAKLUBAIC01LDYgKzUsMTAg QEAKLSAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotICAqLwotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25m Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0r I2VuZGlmCi0rCi0gI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVO U1NMX05PX1NIQTUxMikKLSAvKi0KLSAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUy4KLUBAIC02Miw2 ICs2Niw5IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3ZlcnNpb25bXSA9ICJTSEEtNTEyIgotIAotIGZp cHNfbWRfaW5pdF9jdHgoU0hBMzg0LCBTSEE1MTIpCi0gewotKyMgaWZkZWYgT1BFTlNTTF9GSVBT Ci0rICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjIGVuZGlmCi0gICAgIGMtPmhbMF0gPSBV NjQoMHhjYmJiOWQ1ZGMxMDU5ZWQ4KTsKLSAgICAgYy0+aFsxXSA9IFU2NCgweDYyOWEyOTJhMzY3 Y2Q1MDcpOwotICAgICBjLT5oWzJdID0gVTY0KDB4OTE1OTAxNWEzMDcwZGQxNyk7Ci1AQCAtODAs NiArODcsOSBAQCBmaXBzX21kX2luaXRfY3R4KFNIQTM4NCwgU0hBNTEyKQotIAotIGZpcHNfbWRf aW5pdChTSEE1MTIpCi0gewotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIEZJUFNfc2VsZnRl c3RfY2hlY2soKTsKLSsjIGVuZGlmCi0gICAgIGMtPmhbMF0gPSBVNjQoMHg2YTA5ZTY2N2YzYmNj OTA4KTsKLSAgICAgYy0+aFsxXSA9IFU2NCgweGJiNjdhZTg1ODRjYWE3M2IpOwotICAgICBjLT5o WzJdID0gVTY0KDB4M2M2ZWYzNzJmZTk0ZjgyYik7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9j cnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmMvY3J5cHRvL3docmxw b29sL3dwX2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2NyeXB0by93aHJscG9vbC93cF9kZ3N0 LmMuZmlwcwkyMDE1LTA2LTEyIDE2OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjJjL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMJMjAxNS0wNi0xNSAxNzozMDowMC4wMTYy ODQxNjUgKzAyMDAKLUBAIC01NSw3ICs1NSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRv Lmg+Ci0gI2luY2x1ZGUgPHN0cmluZy5oPgotIAotLWZpcHNfbWRfaW5pdChXSElSTFBPT0wpCi0r bm9uZmlwc19tZF9pbml0KFdISVJMUE9PTCkKLSB7Ci0gICAgIG1lbXNldChjLCAwLCBzaXplb2Yo KmMpKTsKLSAgICAgcmV0dXJuICgxKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL01ha2VmaWxl Lm9yZy5maXBzIG9wZW5zc2wtMS4wLjJjL01ha2VmaWxlLm9yZwotLS0tIG9wZW5zc2wtMS4wLjJj L01ha2VmaWxlLm9yZy5maXBzCTIwMTUtMDYtMTUgMTc6Mjk6NTkuOTg2MjgzNDc4ICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMmMvTWFrZWZpbGUub3JnCTIwMTUtMDYtMTUgMTc6MzA6MDAuMDE2Mjg0 MTY1ICswMjAwCi1AQCAtMTM3LDYgKzEzNyw5IEBAIEZJUFNDQU5MSUI9Ci0gCi0gQkFTRUFERFI9 Ci0gCi0rIyBOb24tZW1wdHkgaWYgRklQUyBlbmFibGVkCi0rRklQUz0KLSsKLSBESVJTPSAgIGNy eXB0byBzc2wgZW5naW5lcyBhcHBzIHRlc3QgdG9vbHMKLSBFTkdESVJTPSBjY2dvc3QKLSBTSExJ QkRJUlM9IGNyeXB0byBzc2wKLUBAIC0xNDksNyArMTUyLDcgQEAgU0RJUlM9ICBcCi0gCWJuIGVj IHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28gZW5naW5lIFwKLSAJYnVmZmVyIGJpbyBzdGFjayBs aGFzaCByYW5kIGVyciBcCi0gCWV2cCBhc24xIHBlbSB4NTA5IHg1MDl2MyBjb25mIHR4dF9kYiBw a2NzNyBwa2NzMTIgY29tcCBvY3NwIHVpIGtyYjUgXAotLQljbXMgcHF1ZXVlIHRzIGpwYWtlIHNy cCBzdG9yZSBjbWFjCi0rCWNtcyBwcXVldWUgdHMganBha2Ugc3JwIHN0b3JlIGNtYWMgZmlwcwot ICMga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGFib3ZlIGxpc3QgaXMgYWRqdXN0ZWQgYnkgLi9Db25m aWd1cmUKLSAjIGFjY29yZGluZyB0byBuby14eHggYXJndW1lbnRzLi4uCi0gCi1AQCAtMjM4LDYg KzI0MSw3IEBAIEJVSUxERU5WPQlQTEFURk9STT0nJChQTEFURk9STSknIFBST0NFU1MKLSAJCUZJ UFNMSUJESVI9JyR7RklQU0xJQkRJUn0nCQkJXAotIAkJRklQU0RJUj0nJHtGSVBTRElSfScJCQkJ XAotIAkJRklQU0NBTkxJQj0iJCR7RklQU0NBTkxJQjotJChGSVBTQ0FOTElCKX0iCVwKLSsJCUZJ UFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCi0gCQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklMRT1N YWtlZmlsZSBNQUtFT1ZFUlJJREVTPQotICMgTUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkgImVx dWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAotICMgd2hpY2ggaW4g dHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRoIC1l LgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvc3NsL3NzbF9hbGdzLmMuZmlwcyBvcGVuc3NsLTEu MC4yYy9zc2wvc3NsX2FsZ3MuYwotLS0tIG9wZW5zc2wtMS4wLjJjL3NzbC9zc2xfYWxncy5jLmZp cHMJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4y Yy9zc2wvc3NsX2FsZ3MuYwkyMDE1LTA2LTE1IDE3OjMwOjAwLjAxNjI4NDE2NSArMDIwMAotQEAg LTY0LDYgKzY0LDExIEBACi0gaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKLSB7Ci0gCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyAgICBPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKyAgICBpZiAo IUZJUFNfbW9kZSgpKSB7Ci0rI2VuZGlmCi0rCi0gI2lmbmRlZiBPUEVOU1NMX05PX0RFUwotICAg ICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NiYygpKTsKLSAgICAgRVZQX2FkZF9jaXBoZXIoRVZQ X2Rlc19lZGUzX2NiYygpKTsKLUBAIC0xNDIsNiArMTQ3LDQ4IEBAIGludCBTU0xfbGlicmFyeV9p bml0KHZvaWQpCi0gICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEoKSk7Ci0gICAgIEVWUF9hZGRf ZGlnZXN0KEVWUF9kc3MoKSk7Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICB9 IGVsc2UgewotKyMgaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0rICAgICAgICBFVlBfYWRkX2NpcGhl cihFVlBfZGVzX2VkZTNfY2JjKCkpOwotKyMgZW5kaWYKLSsjIGlmbmRlZiBPUEVOU1NMX05PX0FF UwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwotKyAgICAgICAg RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18yNTZfY2JjKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18x MjhfZ2NtKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOwot KyMgZW5kaWYKLSsjIGlmbmRlZiBPUEVOU1NMX05PX01ENQotKyAgICAgICAgLyogbmVlZGVkIGV2 ZW4gaW4gdGhlIEZJUFMgbW9kZSBmb3IgVExTIE1BQyAqLwotKyAgICAgICAgRVZQX2FkZF9kaWdl c3QoRVZQX21kNSgpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwgInNz bDItbWQ1Iik7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsICJzc2wzLW1k NSIpOwotKyMgZW5kaWYKLSsjIGlmbmRlZiBPUEVOU1NMX05PX1NIQQotKyAgICAgICAgRVZQX2Fk ZF9kaWdlc3QoRVZQX3NoYTEoKSk7IC8qIFJTQSB3aXRoIHNoYTEgKi8KLSsgICAgICAgIEVWUF9h ZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsICJzc2wzLXNoYTEiKTsKLSsgICAgICAgIEVWUF9hZGRf ZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwgU05fc2hhMVdpdGhSU0EpOwot KyMgZW5kaWYKLSsjIGlmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgotKyAgICAgICAgRVZQX2FkZF9k aWdlc3QoRVZQX3NoYTIyNCgpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYo KSk7Ci0rIyBlbmRpZgotKyMgaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0rICAgICAgICBFVlBf YWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3No YTUxMigpKTsKLSsjIGVuZGlmCi0rIyBpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRl ZmluZWQoT1BFTlNTTF9OT19EU0EpCi0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgp KTsgLyogRFNBIHdpdGggc2hhMSAqLwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05f ZHNhV2l0aFNIQTEsIFNOX2RzYVdpdGhTSEExXzIpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3Rf YWxpYXMoU05fZHNhV2l0aFNIQTEsICJEU1MxIik7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9h bGlhcyhTTl9kc2FXaXRoU0hBMSwgImRzczEiKTsKLSsjIGVuZGlmCi0rIyBpZm5kZWYgT1BFTlNT TF9OT19FQ0RTQQotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOwotKyMgZW5k aWYKLSsgICAgfQotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCi0gICAgIC8qCi0g ICAgICAqIFRoaXMgd2lsbCBpbml0aWFsaXNlIHRoZSBidWlsdC1pbiBjb21wcmVzc2lvbiBhbGdv cml0aG1zLiBUaGUgdmFsdWUKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4yYy1ycG1idWlsZC5w YXRjaCBiL29wZW5zc2wtMS4wLjJjLXJwbWJ1aWxkLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA5YTY1OTRhLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjJjLXJwbWJ1aWxk LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjJjL0NvbmZpZ3VyZS5ycG1idWlsZCBvcGVuc3NsLTEuMC4yYy9Db25maWd1cmUKLS0tLSBv cGVuc3NsLTEuMC4yYy9Db25maWd1cmUucnBtYnVpbGQJMjAxNS0wNi0xMiAxNjo1MToyMS4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9Db25maWd1cmUJMjAxNS0wNi0xNSAxNzoy Mjo1Mi41OTg0OTY2ODAgKzAyMDAKLUBAIC0zNjUsOCArMzY1LDggQEAgbXkgJXRhYmxlPSgKLSAj IyMjCi0gIyAqLWdlbmVyaWMqIGlzIGVuZGlhbi1uZXV0cmFsIHRhcmdldCwgYnV0IC4vY29uZmln IGlzIGZyZWUgdG8KLSAjIHRocm93IGluIC1EW0JMXV9FTkRJQU4sIHdoaWNoZXZlciBhcHByb3By aWF0ZS4uLgotLSJsaW51eC1nZW5lcmljMzIiLCJnY2M6LU8zIC1mb21pdC1mcmFtZS1wb2ludGVy IC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERF U19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ Qzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotLSJsaW51eC1wcGMiLAki Z2NjOi1EQl9FTkRJQU4gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0 X0NIQVIgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjMzJfYXNtfTpsaW51eDMy OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9N SU5PUikiLAotKyJsaW51eC1nZW5lcmljMzIiLCJnY2M6LVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6 Oi1EX1JFRU5UUkFOVDo6LVdsLC16LHJlbHJvIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NI VU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJl ZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCi0rImxp bnV4LXBwYyIsCSJnY2M6LURCX0VORElBTiAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVF TlRSQU5UOjotV2wsLXoscmVscm8gLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVT X1JJU0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVk Oi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKLSAKLSAj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwotICMgTm90ZSB0aGF0IC1tYXJjaCBpcyBub3QgYW1vbmcgY29tcGlsZXIg b3B0aW9ucyBpbiBiZWxvdyBsaW51eC1hcm12NAotQEAgLTM5NSwzMCArMzk1LDMwIEBAIG15ICV0 YWJsZT0oCi0gIwotICMgICAgICAgLi9Db25maWd1cmUgbGludXgtYXJtdjQgLW1hcmNoPWFybXY2 IC1EX19BUk1fTUFYX0FSQ0hfXz04Ci0gIwotLSJsaW51eC1hcm12NCIsCSJnY2M6IC1PMyAtV2Fs bDo6LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5U IERFU19VTlJPTEwgQkZfUFRSOiR7YXJtdjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6 Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLS0ibGludXgtYWFyY2g2NCIs ImdjYzogLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBS QzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke2FhcmNoNjRfYXNt fTpsaW51eDY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5c JChTSExJQl9NSU5PUikiLAotKyJsaW51eC1hcm12NCIsCSJnY2M6LVdhbGwgXCQoUlBNX09QVF9G TEFHUyk6Oi1EX1JFRU5UUkFOVDo6LVdsLC16LHJlbHJvIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIg UkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthcm12NF9hc219OmRsZmNuOmxp bnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVS KSIsCi0rImxpbnV4LWFhcmNoNjQiLCJnY2M6LURMX0VORElBTiAtV2FsbCBcJChSUE1fT1BUX0ZM QUdTKTo6LURfUkVFTlRSQU5UOjotV2wsLXoscmVscm8gLWxkbDpTSVhUWV9GT1VSX0JJVF9MT05H IFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YWFyY2g2NF9h c219OmxpbnV4NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5z by5cJChTSExJQl9TT05BTUVWRVIpOjo6NjQiLAotICMgQ29uZmlndXJlIHNjcmlwdCBhZGRzIG1p bmltYWxseSByZXF1aXJlZCAtbWFyY2ggZm9yIGFzc2VtYmx5IHN1cHBvcnQsCi0gIyBpZiBubyAt bWFyY2ggd2FzIHNwZWNpZmllZCBhdCBjb21tYW5kIGxpbmUuIG1pcHMzMiBhbmQgbWlwczY0IGJl bG93Ci0gIyByZWZlciB0byBjb250ZW1wb3JhcnkgTUlQUyBBcmNoaXRlY3R1cmUgc3BlY2lmaWNh dGlvbnMsIE1JUFMzMiBhbmQKLSAjIE1JUFM2NCwgcmF0aGVyIHRoYW4gdG8ga2VybmVsIGJpdG5l c3MuCi0tImxpbnV4LW1pcHMzMiIsCSJnY2M6LW1hYmk9MzIgLU8zIC1XYWxsIC1EQk5fRElWM1c6 Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBE RVNfVU5ST0xMIEJGX1BUUjoke21pcHMzMl9hc219Om8zMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQ SUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLS0ibGludXgtbWlwczY0 IiwgICAiZ2NjOi1tYWJpPW4zMiAtTzMgLVdhbGwgLURCTl9ESVYzVzo6LURfUkVFTlRSQU5UOjot bGRsOlNJWFRZX0ZPVVJfQklUIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwg QkZfUFRSOiR7bWlwczY0X2FzbX06bjMyOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbWFiaT1u MzI6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6OjozMiIsCi0tImxpbnV4NjQt bWlwczY0IiwgICAiZ2NjOi1tYWJpPTY0IC1PMyAtV2FsbCAtREJOX0RJVjNXOjotRF9SRUVOVFJB TlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBE RVNfVU5ST0xMIEJGX1BUUjoke21pcHM2NF9hc219OjY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ QzotbWFiaT02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKLSsi bGludXgtbWlwczMyIiwJImdjYzotbWFiaT0zMiAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKSAtREJO X0RJVjNXOjotRF9SRUVOVFJBTlQ6Oi1XbCwteixyZWxybyAtbGRsOkJOX0xMT05HIFJDNF9DSEFS IFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bWlwczMyX2FzbX06bzMyOmRs ZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09O QU1FVkVSKSIsCi0rImxpbnV4LW1pcHM2NCIsICAgImdjYzotbWFiaT1uMzIgLVdhbGwgXCQoUlBN X09QVF9GTEFHUykgLURCTl9ESVYzVzo6LURfUkVFTlRSQU5UOjotV2wsLXoscmVscm8gLWxkbDpT SVhUWV9GT1VSX0JJVCBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BU Ujoke21pcHM2NF9hc219Om4zMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW1hYmk9bjMyIFwk KFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpOjo6MzIiLAotKyJsaW51eDY0 LW1pcHM2NCIsICAgImdjYzotbWFiaT02NCAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKSAtREJOX0RJ VjNXOjotRF9SRUVOVFJBTlQ6Oi1XbCwteixyZWxybyAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcg UkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHttaXBzNjRfYXNt fTo2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW1hYmk9NjQgXCQoUlBNX09QVF9GTEFHUyk6 LnNvLlwkKFNITElCX1NPTkFNRVZFUik6Ojo2NCIsCi0gIyMjIyBJQS0zMiB0YXJnZXRzLi4uCi0g ImxpbnV4LWlhMzItaWNjIiwJImljYzotRExfRU5ESUFOIC1PMjo6LURfUkVFTlRSQU5UOjotbGRs IC1ub19jcHBydDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZf ZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1LUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwk KFNITElCX01JTk9SKSIsCi0tImxpbnV4LWVsZiIsCSJnY2M6LURMX0VORElBTiAtTzMgLWZvbWl0 LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyAke3g4Nl9n Y2NfZGVzfSAke3g4Nl9nY2Nfb3B0c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVk Oi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCi0rImxpbnV4LWVs ZiIsCSJnY2M6LURMX0VORElBTiAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5U OjotV2wsLXoscmVscm8gLWxkbDpCTl9MTE9ORyAke3g4Nl9nY2NfZGVzfSAke3g4Nl9nY2Nfb3B0 c306JHt4ODZfZWxmX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxB R1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKLSAibGludXgtYW91dCIsCSJnY2M6LURMX0VO RElBTiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLW1hcmNoPWk0ODYgLVdhbGw6Oih1bmtub3du KTo6OkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9hc219OmEu b3V0IiwKLSAjIyMjCi0tImxpbnV4LWdlbmVyaWM2NCIsImdjYzotTzMgLVdhbGw6Oi1EX1JFRU5U UkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5U IERFU19VTlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5z by5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLS0ibGludXgtcHBjNjQiLAkiZ2Nj Oi1tNjQgLURCX0VORElBTiAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VS X0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzY0 X2FzbX06bGludXg2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJf TUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKLS0ibGludXgtcHBjNjRsZSIsImdjYzotbTY0 IC1ETF9FTkRJQU4gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRf TE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHBwYzY0X2FzbTps aW51eDY0bGU6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9S KS5cJChTSExJQl9NSU5PUik6OjoiLAotLSJsaW51eC1pYTY0IiwJImdjYzotRExfRU5ESUFOIC1E VEVSTUlPIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcg UkM0X0NIVU5LIERFU19VTlJPTEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFy ZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKLSsibGludXgt Z2VuZXJpYzY0IiwiZ2NjOi1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1X bCwteixyZWxybyAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERF U19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ QzpcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKTo6OjY0IiwKLSsibGlu dXgtcHBjNjQiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6 LURfUkVFTlRSQU5UOjotV2wsLXoscmVscm8gLWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9D SEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3BwYzY0X2FzbX06bGludXg2NDpk bGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NCBcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hM SUJfU09OQU1FVkVSKTo6OjY0IiwKLSsibGludXgtcHBjNjRsZSIsImdjYzotbTY0IC1ETF9FTkRJ QU4gLVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LVdsLC16LHJlbHJvIC1s ZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19V TlJPTEw6JHBwYzY0X2FzbTpsaW51eDY0bGU6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQg XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUik6Ojo2NCIsCi0rImxpbnV4 LWlhNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5U UkFOVDo6LVdsLC16LHJlbHJvIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVT X1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpcJChS UE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCi0gImxpbnV4LWlhNjQtaWNj IiwiaWNjOi1ETF9FTkRJQU4gLU8yIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGwgLW5vX2NwcHJ0 OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19SSVNDMSBERVNfSU5UOiR7aWE2NF9h c219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJ Ql9NSU5PUikiLAotLSJsaW51eC14ODZfNjQiLAkiZ2NjOi1tNjQgLURMX0VORElBTiAtTzMgLVdh bGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNf SU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElD Oi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCi0rImxpbnV4 LXg4Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjot RF9SRUVOVFJBTlQ6Oi1XbCwteixyZWxybyAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NI VU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFy ZWQ6LWZQSUM6LW02NCBcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKTo6 OjY0IiwKLSAibGludXgteDg2XzY0LWNsYW5nIiwJImNsYW5nOiAtbTY0IC1ETF9FTkRJQU4gLU8z IC1XYWxsIC1XZXh0cmEgJGNsYW5nX2Rpc2FibGVkX3dhcm5pbmdzIC1RdW51c2VkLWFyZ3VtZW50 czo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19J TlQgREVTX1VOUk9MTDoke3g4Nl82NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6 LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKLSAibGludXgt eDg2XzY0LWljYyIsICJpY2M6LURMX0VORElBTiAtTzI6Oi1EX1JFRU5UUkFOVDo6LWxkbCAtbm9f Y3BwcnQ6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7 eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01B Sk9SKS5cJChTSExJQl9NSU5PUik6Ojo2NCIsCi0gImxpbnV4LXgzMiIsCSJnY2M6LW14MzIgLURM X0VORElBTiAtTzMgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVCBSQzRf Q0hVTktfTEwgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4 LXNoYXJlZDotZlBJQzotbXgzMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6 OngzMiIsCi0tImxpbnV4NjQtczM5MHgiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAtTzMgLVdhbGw6 Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVO SyBERVNfSU5UIERFU19VTlJPTEw6JHtzMzkweF9hc219OjY0OmRsZmNuOmxpbnV4LXNoYXJlZDot ZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAotKyJs aW51eDY0LXMzOTB4IiwJImdjYzotbTY0IC1EQl9FTkRJQU4gLVdhbGwgXCQoUlBNX09QVF9GTEFH Uyk6Oi1EX1JFRU5UUkFOVDo6LVdsLC16LHJlbHJvIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBS QzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7czM5MHhfYXNtfTo2NDpkbGZj bjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NCBcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJf U09OQU1FVkVSKTo6OjY0IiwKLSAjIyMjIFNvIGNhbGxlZCAiaGlnaGdwcnMiIHRhcmdldCBmb3Ig ei9BcmNoaXRlY3R1cmUgQ1BVcwotICMgIkhpZ2hncHJzIiBpcyBrZXJuZWwgZmVhdHVyZSBmaXJz dCBpbXBsZW1lbnRlZCBpbiBMaW51eCAyLjYuMzIsIHNlZQotICMgL3Byb2MvY3B1aW5mby4gVGhl IGlkZWEgaXMgdG8gcHJlc2VydmUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mCi1AQCAtNDM2LDEy ICs0MzYsMTIgQEAgbXkgJXRhYmxlPSgKLSAjIyMjIFNQQVJDIExpbnV4IHNldHVwcwotICMgUmF5 IE1pbGxlciA8cmF5Lm1pbGxlckBjb21wdXRpbmctc2VydmljZXMub3hmb3JkLmFjLnVrPiBoYXMg cGF0aWVudGx5Ci0gIyBhc3Npc3RlZCB3aXRoIGRlYnVnZ2luZyBvZiBmb2xsb3dpbmcgdHdvIGNv bmZpZ3MuCi0tImxpbnV4LXNwYXJjdjgiLCJnY2M6LW1jcHU9djggLURCX0VORElBTiAtTzMgLWZv bWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOjotbGRsOkJO X0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjhfYXNt fTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJf TUlOT1IpIiwKLSsibGludXgtc3BhcmN2OCIsImdjYzotbWNwdT12OCAtREJfRU5ESUFOIC1XYWxs IFwkKFJQTV9PUFRfRkxBR1MpIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFOVDo6LVdsLC16LHJlbHJv IC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7c3Bh cmN2OF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTouc28u XCQoU0hMSUJfU09OQU1FVkVSKSIsCi0gIyBpdCdzIGEgcmVhbCBtZXNzIHdpdGggLW1jcHU9dWx0 cmFzcGFyYyBvcHRpb24gdW5kZXIgTGludXgsIGJ1dAotICMgLVdhLC1BdjhwbHVzIHNob3VsZCBk byB0aGUgdHJpY2sgbm8gbWF0dGVyIHdoYXQuCi0tImxpbnV4LXNwYXJjdjkiLCJnY2M6LW0zMiAt bWNwdT11bHRyYXNwYXJjIC1EQl9FTkRJQU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxs IC1XYSwtQXY4cGx1cyAtREJOX0RJVjJXOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotbGRsOkJO X0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNt fTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW0zMjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNI TElCX01JTk9SKSIsCi0rImxpbnV4LXNwYXJjdjkiLCJnY2M6LW0zMiAtbWNwdT11bHRyYXNwYXJj IC1EQl9FTkRJQU4gLVdhbGwgXCQoUlBNX09QVF9GTEFHUykgLVdhLC1BdjhwbHVzIC1EQk5fRElW Mlc6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1XbCwteixyZWxybyAtbGRsOkJOX0xMT05HIFJD NF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3NwYXJjdjlfYXNtfTpkbGZjbjps aW51eC1zaGFyZWQ6LWZQSUM6LW0zMiBcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09O QU1FVkVSKSIsCi0gIyBHQ0MgMy4xIGlzIGEgcmVxdWlyZW1lbnQKLS0ibGludXg2NC1zcGFyY3Y5 IiwiZ2NjOi1tNjQgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUt cG9pbnRlciAtV2FsbDo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LWxkbDpCTl9MTE9ORyBSQzRf Q0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BU Ujoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hM SUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKLSsibGludXg2NC1zcGFyY3Y5IiwiZ2Nj Oi1tNjQgLW1jcHU9dWx0cmFzcGFyYyAtREJfRU5ESUFOIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1Mp OjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFSQzotV2wsLXoscmVscm8gLWxkbDpCTl9MTE9ORyBSQzRf Q0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfUFRSIERFU19SSVNDMSBERVNfVU5ST0xMIEJGX1BU Ujoke3NwYXJjdjlfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NCBcJChSUE1fT1BU X0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKTo6OjY0IiwKLSAjIyMjIEFscGhhIExpbnV4 IHdpdGggR05VIEMgYW5kIENvbXBhcSBDIHNldHVwcwotICMgU3BlY2lhbCBub3RlczoKLSAjIC0g bGludXgtYWxwaGErYnd4LWdjYyBpcyBtZW50IHRvIGJlIHVzZWQgZnJvbSAuL2NvbmZpZyBvbmx5 LiBJZiB5b3UKLUBAIC0xNzY0LDcgKzE3NjQsNyBAQCB3aGlsZSAoPElOPikKLSAJZWxzaWYgKCRz aGFyZWRfZXh0ZW5zaW9uIG5lICIiICYmICRzaGFyZWRfZXh0ZW5zaW9uID1+IC9eXC5zKFtvbF0p XC5bXlwuXSpcLlteXC5dKiQvKQotIAkJewotIAkJbXkgJHNvdG1wID0gJDE7Ci0tCQlzL15TSEFS RURfTElCU19MSU5LX0VYVFM9LiovU0hBUkVEX0xJQlNfTElOS19FWFRTPS5zJHNvdG1wLlwkKFNI TElCX01BSk9SKSAucyRzb3RtcC87Ci0rCQlzL15TSEFSRURfTElCU19MSU5LX0VYVFM9LiovU0hB UkVEX0xJQlNfTElOS19FWFRTPS5zJHNvdG1wLlwkKFNITElCX1NPTkFNRVZFUikgLnMkc290bXAv OwotIAkJfQotIAllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRl bnNpb24gPX4gL15cLlteXC5dKlwuW15cLl0qXC5keWxpYiQvKQotIAkJewotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmMvTWFrZWZpbGUub3JnLnJwbWJ1aWxkIG9wZW5zc2wtMS4wLjJjL01ha2VmaWxl Lm9yZwotLS0tIG9wZW5zc2wtMS4wLjJjL01ha2VmaWxlLm9yZy5ycG1idWlsZAkyMDE1LTA2LTEy IDE2OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL01ha2VmaWxlLm9y ZwkyMDE1LTA2LTE1IDE3OjE5OjE0Ljg3NDUxMDk5NSArMDIwMAotQEAgLTEwLDYgKzEwLDcgQEAg U0hMSUJfVkVSU0lPTl9ISVNUT1JZPQotIFNITElCX01BSk9SPQotIFNITElCX01JTk9SPQotIFNI TElCX0VYVD0KLStTSExJQl9TT05BTUVWRVI9MTAKLSBQTEFURk9STT1kaXN0Ci0gT1BUSU9OUz0K LSBDT05GSUdVUkVfQVJHUz0KLUBAIC0zMzgsMTAgKzMzOSw5IEBAIGNsZWFuLXNoYXJlZDoKLSBs aW5rLXNoYXJlZDoKLSAJQCBzZXQgLWU7IGZvciBpIGluICQoU0hMSUJESVJTKTsgZG8gXAotIAkJ JChNQUtFKSAtZiAkKEhFUkUpL01ha2VmaWxlLnNoYXJlZCAtZSAkKEJVSUxERU5WKSBcCi0tCQkJ TElCTkFNRT0kJGkgTElCVkVSU0lPTj0kKFNITElCX01BSk9SKS4kKFNITElCX01JTk9SKSBcCi0r CQkJTElCTkFNRT0kJGkgTElCVkVSU0lPTj0kKFNITElCX1NPTkFNRVZFUikgXAotIAkJCUxJQkNP TVBBVFZFUlNJT05TPSI7JChTSExJQl9WRVJTSU9OX0hJU1RPUlkpIiBcCi0gCQkJc3ltbGluay4k KFNITElCX1RBUkdFVCk7IFwKLS0JCWxpYnM9IiQkbGlicyAtbCQkaSI7IFwKLSAJZG9uZQotIAot IGJ1aWxkLXNoYXJlZDogZG9fJChTSExJQl9UQVJHRVQpIGxpbmstc2hhcmVkCi1AQCAtMzUyLDcg KzM1Miw3IEBAIGRvXyQoU0hMSUJfVEFSR0VUKToKLSAJCQlsaWJzPSIkKExJQktSQjUpICQkbGli cyI7IFwKLSAJCWZpOyBcCi0gCQkkKENMRUFSRU5WKSAmJiAkKE1BS0UpIC1mIE1ha2VmaWxlLnNo YXJlZCAtZSAkKEJVSUxERU5WKSBcCi0tCQkJTElCTkFNRT0kJGkgTElCVkVSU0lPTj0kKFNITElC X01BSk9SKS4kKFNITElCX01JTk9SKSBcCi0rCQkJTElCTkFNRT0kJGkgTElCVkVSU0lPTj0kKFNI TElCX1NPTkFNRVZFUikgXAotIAkJCUxJQkNPTVBBVFZFUlNJT05TPSI7JChTSExJQl9WRVJTSU9O X0hJU1RPUlkpIiBcCi0gCQkJTElCREVQUz0iJCRsaWJzICQoRVhfTElCUykiIFwKLSAJCQlsaW5r X2EuJChTSExJQl9UQVJHRVQpOyBcCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMmQtYW1kLXNp Z2lsbC5wYXRjaCBiL29wZW5zc2wtMS4wLjJkLWFtZC1zaWdpbGwucGF0Y2gKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDkxZjE3ZDkuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMmQt YW1kLXNpZ2lsbC5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjJkL2NyeXB0by9hZXMvYXNtL2Flc25pLXNoYTI1Ni14ODZfNjQucGwuc2ln aWxsIG9wZW5zc2wtMS4wLjJkL2NyeXB0by9hZXMvYXNtL2Flc25pLXNoYTI1Ni14ODZfNjQucGwK LS0tLSBvcGVuc3NsLTEuMC4yZC9jcnlwdG8vYWVzL2FzbS9hZXNuaS1zaGEyNTYteDg2XzY0LnBs LnNpZ2lsbAkyMDE1LTA3LTA5IDE2OjUxOjI1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wt MS4wLjJkL2NyeXB0by9hZXMvYXNtL2Flc25pLXNoYTI1Ni14ODZfNjQucGwJMjAxNS0xMS0xNiAx Nzo0Mzo1Mi41NTQ4MjY1MDUgKzAxMDAKLUBAIC0xMzksMTEgKzEzOSw4IEBAICRjb2RlLj08PF9f XyBpZiAoJGF2eD4xKTsKLSAJamUJJHtmdW5jfV9hdngyCi0gX19fCi0gJGNvZGUuPTw8X19fOwot LQlhbmQJXCRgMTw8MzBgLCVlYXgJCQkjIG1hc2sgIkludGVsIENQVSIgYml0Ci0tCWFuZAlcJGAx PDwyOHwxPDw5YCwlcjEwZAkJIyBtYXNrIEFWWCtTU1NFMyBiaXRzCi0tCW9yCSVlYXgsJXIxMGQK LS0JY21wCVwkYDE8PDI4fDE8PDl8MTw8MzBgLCVyMTBkCi0tCWplCSR7ZnVuY31fYXZ4Ci0rCWFu ZAlcJGAxPDwyOGAsJXIxMGQJCQkjIGNoZWNrIGZvciBBVlgKLSsJam56CSR7ZnVuY31fYXZ4Ci0g CXVkMgotIF9fXwotIAkJCQkJCX0KCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4yZS1maXBzLnBh dGNoIGIvb3BlbnNzbC0xLjAuMmUtZmlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5hZTRlMTNkCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMmUtZmlw cy5wYXRjaApAQCAtMCwwICsxLDEzNzA0IEBACitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9hcHBz L3NwZWVkLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9hcHBzL3NwZWVkLmMKKy0tLSBvcGVuc3NsLTEu MC4yZS9hcHBzL3NwZWVkLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjJlL2FwcHMvc3BlZWQuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1 NjU2MjM4OSArMDEwMAorQEAgLTE5Nyw3ICsxOTcsNiBAQAorICMgIGlmZGVmIE9QRU5TU0xfRE9J TkdfTUFLRURFUEVORAorICMgICB1bmRlZiBBRVNfc2V0X2VuY3J5cHRfa2V5CisgIyAgIHVuZGVm IEFFU19zZXRfZGVjcnlwdF9rZXkKKy0jICAgdW5kZWYgREVTX3NldF9rZXlfdW5jaGVja2VkCisg IyAgZW5kaWYKKyAjICBkZWZpbmUgQkZfc2V0X2tleSAgICAgIHByaXZhdGVfQkZfc2V0X2tleQor ICMgIGRlZmluZSBDQVNUX3NldF9rZXkgICAgcHJpdmF0ZV9DQVNUX3NldF9rZXkKK0BAIC0yMDUs NyArMjA0LDYgQEAKKyAjICBkZWZpbmUgU0VFRF9zZXRfa2V5ICAgIHByaXZhdGVfU0VFRF9zZXRf a2V5CisgIyAgZGVmaW5lIFJDMl9zZXRfa2V5ICAgICBwcml2YXRlX1JDMl9zZXRfa2V5CisgIyAg ZGVmaW5lIFJDNF9zZXRfa2V5ICAgICBwcml2YXRlX1JDNF9zZXRfa2V5CistIyAgZGVmaW5lIERF U19zZXRfa2V5X3VuY2hlY2tlZCAgIHByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkCisgIyAg ZGVmaW5lIEFFU19zZXRfZW5jcnlwdF9rZXkgICAgIHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tl eQorICMgIGRlZmluZSBBRVNfc2V0X2RlY3J5cHRfa2V5ICAgICBwcml2YXRlX0FFU19zZXRfZGVj cnlwdF9rZXkKKyAjICBkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSAgICAgICAgcHJpdmF0ZV9DYW1l bGxpYV9zZXRfa2V5CitAQCAtOTc0LDcgKzk3MiwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCisgIyBlbmRpZgorICMgaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgICAgICAgICBp ZiAoc3RyY21wKCphcmd2LCAicnNhIikgPT0gMCkgeworLSAgICAgICAgICAgIHJzYV9kb2l0W1Jf UlNBXzUxMl0gPSAxOworKyMgIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICAgICAgICAgIGlmICgh RklQU19tb2RlKCkpCisrIyAgZW5kaWYKKysgICAgICAgICAgICB7CisrICAgICAgICAgICAgICAg IHJzYV9kb2l0W1JfUlNBXzUxMl0gPSAxOworKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBy c2FfZG9pdFtSX1JTQV8xMDI0XSA9IDE7CisgICAgICAgICAgICAgcnNhX2RvaXRbUl9SU0FfMjA0 OF0gPSAxOworICAgICAgICAgICAgIHJzYV9kb2l0W1JfUlNBXzQwOTZdID0gMTsKK0BAIC05ODIs NyArOTg1LDEyIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAjIGVuZGlmCisg IyBpZm5kZWYgT1BFTlNTTF9OT19EU0EKKyAgICAgICAgIGlmIChzdHJjbXAoKmFyZ3YsICJkc2Ei KSA9PSAwKSB7CistICAgICAgICAgICAgZHNhX2RvaXRbUl9EU0FfNTEyXSA9IDE7CisrIyAgaWZk ZWYgT1BFTlNTTF9GSVBTCisrICAgICAgICAgICAgaWYgKCFGSVBTX21vZGUoKSkKKysjICBlbmRp ZgorKyAgICAgICAgICAgIHsKKysgICAgICAgICAgICAgICAgZHNhX2RvaXRbUl9EU0FfNTEyXSA9 IDE7CisrICAgICAgICAgICAgfQorICAgICAgICAgICAgIGRzYV9kb2l0W1JfRFNBXzEwMjRdID0g MTsKKyAgICAgICAgICAgICBkc2FfZG9pdFtSX0RTQV8yMDQ4XSA9IDE7CisgICAgICAgICB9IGVs c2UKK0BAIC0xMjMzLDEzICsxMjQxLDE5IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJn dikKKyAKKyAgICAgaWYgKGogPT0gMCkgeworICAgICAgICAgZm9yIChpID0gMDsgaSA8IEFMR09S X05VTTsgaSsrKSB7CistICAgICAgICAgICAgaWYgKGkgIT0gRF9FVlApCisrICAgICAgICAgICAg aWYgKGkgIT0gRF9FVlAgJiYKKysgICAgICAgICAgICAgICAgKCFGSVBTX21vZGUoKSB8fCAoaSAh PSBEX1dISVJMUE9PTCAmJgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9 IERfTUQyICYmIGkgIT0gRF9NRDQgJiYKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaSAhPSBEX01ENSAmJiBpICE9IERfTURDMiAmJgorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpICE9IERfUk1EMTYwKSkpCisgICAgICAgICAgICAgICAgIGRvaXRbaV0gPSAx OworICAgICAgICAgfQorICAgICAgICAgZm9yIChpID0gMDsgaSA8IFJTQV9OVU07IGkrKykKKy0g ICAgICAgICAgICByc2FfZG9pdFtpXSA9IDE7CisrICAgICAgICAgICAgaWYgKCFGSVBTX21vZGUo KSB8fCBpICE9IFJfUlNBXzUxMikKKysgICAgICAgICAgICAgICAgcnNhX2RvaXRbaV0gPSAxOwor ICAgICAgICAgZm9yIChpID0gMDsgaSA8IERTQV9OVU07IGkrKykKKy0gICAgICAgICAgICBkc2Ff ZG9pdFtpXSA9IDE7CisrICAgICAgICAgICAgaWYgKCFGSVBTX21vZGUoKSB8fCBpICE9IFJfRFNB XzUxMikKKysgICAgICAgICAgICAgICAgZHNhX2RvaXRbaV0gPSAxOworICMgaWZuZGVmIE9QRU5T U0xfTk9fRUNEU0EKKyAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBFQ19OVU07IGkrKykKKyAgICAg ICAgICAgICBlY2RzYV9kb2l0W2ldID0gMTsKK0BAIC0xMjk5LDMwICsxMzEzLDQ2IEBAIGludCBN QUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgQUVTX3NldF9lbmNyeXB0X2tleShrZXkz MiwgMjU2LCAmYWVzX2tzMyk7CisgIyBlbmRpZgorICMgaWZuZGVmIE9QRU5TU0xfTk9fQ0FNRUxM SUEKKy0gICAgQ2FtZWxsaWFfc2V0X2tleShrZXkxNiwgMTI4LCAmY2FtZWxsaWFfa3MxKTsKKy0g ICAgQ2FtZWxsaWFfc2V0X2tleShja2V5MjQsIDE5MiwgJmNhbWVsbGlhX2tzMik7CistICAgIENh bWVsbGlhX3NldF9rZXkoY2tleTMyLCAyNTYsICZjYW1lbGxpYV9rczMpOworKyAgICBpZiAoZG9p dFtEX0NCQ18xMjhfQ01MXSB8fCBkb2l0W0RfQ0JDXzE5Ml9DTUxdIHx8IGRvaXRbRF9DQkNfMjU2 X0NNTF0pIHsKKysgICAgICAgIENhbWVsbGlhX3NldF9rZXkoa2V5MTYsIDEyOCwgJmNhbWVsbGlh X2tzMSk7CisrICAgICAgICBDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwgMTkyLCAmY2FtZWxsaWFf a3MyKTsKKysgICAgICAgIENhbWVsbGlhX3NldF9rZXkoY2tleTMyLCAyNTYsICZjYW1lbGxpYV9r czMpOworKyAgICB9CisgIyBlbmRpZgorICMgaWZuZGVmIE9QRU5TU0xfTk9fSURFQQorLSAgICBp ZGVhX3NldF9lbmNyeXB0X2tleShrZXkxNiwgJmlkZWFfa3MpOworKyAgICBpZiAoZG9pdFtEX0NC Q19JREVBXSkgeworKyAgICAgICAgaWRlYV9zZXRfZW5jcnlwdF9rZXkoa2V5MTYsICZpZGVhX2tz KTsKKysgICAgfQorICMgZW5kaWYKKyAjIGlmbmRlZiBPUEVOU1NMX05PX1NFRUQKKy0gICAgU0VF RF9zZXRfa2V5KGtleTE2LCAmc2VlZF9rcyk7CisrICAgIGlmIChkb2l0W0RfQ0JDX1NFRURdKSB7 CisrICAgICAgICBTRUVEX3NldF9rZXkoa2V5MTYsICZzZWVkX2tzKTsKKysgICAgfQorICMgZW5k aWYKKyAjIGlmbmRlZiBPUEVOU1NMX05PX1JDNAorLSAgICBSQzRfc2V0X2tleSgmcmM0X2tzLCAx Niwga2V5MTYpOworKyAgICBpZiAoZG9pdFtEX1JDNF0pIHsKKysgICAgICAgIFJDNF9zZXRfa2V5 KCZyYzRfa3MsIDE2LCBrZXkxNik7CisrICAgIH0KKyAjIGVuZGlmCisgIyBpZm5kZWYgT1BFTlNT TF9OT19SQzIKKy0gICAgUkMyX3NldF9rZXkoJnJjMl9rcywgMTYsIGtleTE2LCAxMjgpOworKyAg ICBpZiAoZG9pdFtEX0NCQ19SQzJdKSB7CisrICAgICAgICBSQzJfc2V0X2tleSgmcmMyX2tzLCAx Niwga2V5MTYsIDEyOCk7CisrICAgIH0KKyAjIGVuZGlmCisgIyBpZm5kZWYgT1BFTlNTTF9OT19S QzUKKy0gICAgUkM1XzMyX3NldF9rZXkoJnJjNV9rcywgMTYsIGtleTE2LCAxMik7CisrICAgIGlm IChkb2l0W0RfQ0JDX1JDNV0pIHsKKysgICAgICAgIFJDNV8zMl9zZXRfa2V5KCZyYzVfa3MsIDE2 LCBrZXkxNiwgMTIpOworKyAgICB9CisgIyBlbmRpZgorICMgaWZuZGVmIE9QRU5TU0xfTk9fQkYK Ky0gICAgQkZfc2V0X2tleSgmYmZfa3MsIDE2LCBrZXkxNik7CisrICAgIGlmIChkb2l0W0RfQ0JD X0JGXSkgeworKyAgICAgICAgQkZfc2V0X2tleSgmYmZfa3MsIDE2LCBrZXkxNik7CisrICAgIH0K KyAjIGVuZGlmCisgIyBpZm5kZWYgT1BFTlNTTF9OT19DQVNUCistICAgIENBU1Rfc2V0X2tleSgm Y2FzdF9rcywgMTYsIGtleTE2KTsKKysgICAgaWYgKGRvaXRbRF9DQkNfQ0FTVF0pIHsKKysgICAg ICAgIENBU1Rfc2V0X2tleSgmY2FzdF9rcywgMTYsIGtleTE2KTsKKysgICAgfQorICMgZW5kaWYK KyAjIGlmbmRlZiBPUEVOU1NMX05PX1JTQQorICAgICBtZW1zZXQocnNhX2MsIDAsIHNpemVvZihy c2FfYykpOworQEAgLTE2MDUsNiArMTYzNSw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoq YXJndikKKyAgICAgICAgIEhNQUNfQ1RYIGhjdHg7CisgCisgICAgICAgICBITUFDX0NUWF9pbml0 KCZoY3R4KTsKKysgICAgICAgIEhNQUNfQ1RYX3NldF9mbGFncygmaGN0eCwgRVZQX01EX0NUWF9G TEFHX05PTl9GSVBTX0FMTE9XKTsKKyAgICAgICAgIEhNQUNfSW5pdF9leCgmaGN0eCwgKHVuc2ln bmVkIGNoYXIgKikiVGhpcyBpcyBhIGtleS4uLiIsCisgICAgICAgICAgICAgICAgICAgICAgMTYs IEVWUF9tZDUoKSwgTlVMTCk7CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9Db25maWd1cmUu ZmlwcyBvcGVuc3NsLTEuMC4yZS9Db25maWd1cmUKKy0tLSBvcGVuc3NsLTEuMC4yZS9Db25maWd1 cmUuZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjkzOTU2MTk5MiArMDEwMAorKysrIG9wZW5zc2wt MS4wLjJlL0NvbmZpZ3VyZQkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1NjU2MjM4OSArMDEwMAorQEAg LTEwNTgsMTEgKzEwNTgsNiBAQCBpZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBkZWZp bmVkCisgCSRkaXNhYmxlZHsic3NsMiJ9ID0gImZvcmNlZCI7CisgCX0KKyAKKy1pZiAoJGZpcHMg JiYgJGZpcHNsaWJkaXIgZXEgIiIpCistCXsKKy0JJGZpcHNsaWJkaXIgPSAkZmlwc2RpciAuICIv bGliLyI7CistCX0KKy0KKyAjIFJTQVggRU5HSU5FIHNldHMgZGVmYXVsdCBub24tRklQUyBSU0Eg bWV0aG9kLgorIGlmICgkZmlwcykKKyAJeworQEAgLTE1NTEsNyArMTU0Niw2IEBAICRjZmxhZ3Mu PSIgLURPUEVOU1NMX0JOX0FTTV9HRjJtIiBpZiAoJGIKKyBpZiAoJGZpcHMpCisgCXsKKyAJJG9w ZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTXG4iOworLQkkY2ZsYWdz IC49ICIgLUlcJChGSVBTRElSKS9pbmNsdWRlIjsKKyAJfQorIAorICRjcHVpZF9vYmo9Im1lbV9j bHIubyIJdW5sZXNzICgkY3B1aWRfb2JqID1+IC9cLm8kLyk7CitAQCAtMTc1NCw5ICsxNzQ4LDEy IEBAIHdoaWxlICg8SU4+KQorIAorIAlzL15GSVBTRElSPS4qL0ZJUFNESVI9JGZpcHNkaXIvOwor IAlzL15GSVBTTElCRElSPS4qL0ZJUFNMSUJESVI9JGZpcHNsaWJkaXIvOworLQlzL15GSVBTQ0FO TElCPS4qL0ZJUFNDQU5MSUI9bGliY3J5cHRvLyBpZiAkZmlwczsKKyAJcy9eQkFTRUFERFI9Liov QkFTRUFERFI9JGJhc2VhZGRyLzsKKyAKKysJaWYgKCRmaXBzKQorKwkJeworKwkJcy9eRklQUz0u Ki9GSVBTPXllcy87CisrCQl9CisgCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNo YXJlZF90YXJnZXQvOworIAlzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJr LzsKKyAJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykgXCQo U0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vYWVzL2Flc19taXNjLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vYWVzL2Flc19t aXNjLmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vYWVzL2Flc19taXNjLmMuZmlwcwkyMDE1 LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0 by9hZXMvYWVzX21pc2MuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1NjU2MjM4OSArMDEwMAorQEAg LTcwLDE3ICs3MCwxMSBAQCBjb25zdCBjaGFyICpBRVNfb3B0aW9ucyh2b2lkKQorIGludCBBRVNf c2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBi aXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFFU19LRVkgKmtleSkKKyB7CistI2lmZGVm IE9QRU5TU0xfRklQUworLSAgICBmaXBzX2NpcGhlcl9hYm9ydChBRVMpOworLSNlbmRpZgorICAg ICByZXR1cm4gcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7 CisgfQorIAorIGludCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVz ZXJLZXksIGNvbnN0IGludCBiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFFU19LRVkg KmtleSkKKyB7CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBmaXBzX2NpcGhlcl9hYm9ydChB RVMpOworLSNlbmRpZgorICAgICByZXR1cm4gcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5KHVz ZXJLZXksIGJpdHMsIGtleSk7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Nt YWMvY21hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2NtYWMvY21hYy5jCistLS0gb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL2NtYWMvY21hYy5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vY21hYy9jbWFjLmMJMjAx NS0xMi0wNCAxMzo1NTo1MS45NTc1NjI0MTIgKzAxMDAKK0BAIC0xMDUsMTIgKzEwNSw2IEBAIENN QUNfQ1RYICpDTUFDX0NUWF9uZXcodm9pZCkKKyAKKyB2b2lkIENNQUNfQ1RYX2NsZWFudXAoQ01B Q19DVFggKmN0eCkKKyB7CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBpZiAoRklQU19tb2Rl KCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpIHsKKy0gICAgICAgIEZJUFNfY21hY19jdHhfY2xlYW51 cChjdHgpOworLSAgICAgICAgcmV0dXJuOworLSAgICB9CistI2VuZGlmCisgICAgIEVWUF9DSVBI RVJfQ1RYX2NsZWFudXAoJmN0eC0+Y2N0eCk7CisgICAgIE9QRU5TU0xfY2xlYW5zZShjdHgtPnRi bCwgRVZQX01BWF9CTE9DS19MRU5HVEgpOworICAgICBPUEVOU1NMX2NsZWFuc2UoY3R4LT5rMSwg RVZQX01BWF9CTE9DS19MRU5HVEgpOworQEAgLTE2MCwxMiArMTU0LDYgQEAgaW50IENNQUNfSW5p dChDTUFDX0NUWCAqY3R4LCBjb25zdCB2b2lkCisgICAgICAgICAgICAgRVZQZXJyKEVWUF9GX0NN QUNfSU5JVCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOworICAgICAgICAgICAgIHJldHVybiAw OworICAgICAgICAgfQorLSAgICAgICAgLyoKKy0gICAgICAgICAqIE90aGVyIGFsZ29yaXRobSBi bG9ja2luZyB3aWxsIGJlIGRvbmUgaW4gRklQU19jbWFjX2luaXQsIHZpYQorLSAgICAgICAgICog RklQU19jaXBoZXJpbml0KCkuCistICAgICAgICAgKi8KKy0gICAgICAgIGlmICghaW1wbCAmJiAh Y3R4LT5jY3R4LmVuZ2luZSkKKy0gICAgICAgICAgICByZXR1cm4gRklQU19jbWFjX2luaXQoY3R4 LCBrZXksIGtleWxlbiwgY2lwaGVyLCBOVUxMKTsKKyAgICAgfQorICNlbmRpZgorICAgICAvKiBB bGwgemVyb3MgbWVhbnMgcmVzdGFydCAqLworQEAgLTIxMSwxMCArMTk5LDYgQEAgaW50IENNQUNf VXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaQorIHsKKyAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqZGF0YSA9IGluOworICAgICBzaXplX3QgYmw7CistI2lmZGVmIE9QRU5TU0xfRklQUwor LSAgICBpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCistICAgICAgICByZXR1 cm4gRklQU19jbWFjX3VwZGF0ZShjdHgsIGluLCBkbGVuKTsKKy0jZW5kaWYKKyAgICAgaWYgKGN0 eC0+bmxhc3RfYmxvY2sgPT0gLTEpCisgICAgICAgICByZXR1cm4gMDsKKyAgICAgaWYgKGRsZW4g PT0gMCkKK0BAIC0yNTQsMTAgKzIzOCw2IEBAIGludCBDTUFDX1VwZGF0ZShDTUFDX0NUWCAqY3R4 LCBjb25zdCB2b2kKKyBpbnQgQ01BQ19GaW5hbChDTUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFy ICpvdXQsIHNpemVfdCAqcG91dGxlbikKKyB7CisgICAgIGludCBpLCBibCwgbGI7CistI2lmZGVm IE9QRU5TU0xfRklQUworLSAgICBpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUp CistICAgICAgICByZXR1cm4gRklQU19jbWFjX2ZpbmFsKGN0eCwgb3V0LCBwb3V0bGVuKTsKKy0j ZW5kaWYKKyAgICAgaWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCisgICAgICAgICByZXR1cm4g MDsKKyAgICAgYmwgPSBFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplKCZjdHgtPmNjdHgpOworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2NyeXB0by5oLmZpcHMgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2NyeXB0by5oCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2NyeXB0by5oLmZpcHMJ MjAxNS0xMi0wNCAxMzo1NTo1MS44NDM1NTk3NTMgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vY3J5cHRvLmgJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTc1NjI0MTIgKzAxMDAKK0BAIC02 MDAsMjQgKzYwMCwyOSBAQCBpbnQgRklQU19tb2RlX3NldChpbnQgcik7Cisgdm9pZCBPUEVOU1NM X2luaXQodm9pZCk7CisgCisgIyBkZWZpbmUgZmlwc19tZF9pbml0KGFsZykgZmlwc19tZF9pbml0 X2N0eChhbGcsIGFsZykKKysjIGRlZmluZSBub25maXBzX21kX2luaXQoYWxnKSBub25maXBzX21k X2luaXRfY3R4KGFsZywgYWxnKQorKyMgZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkg XAorKyAgICAgICAgaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCisgCisgIyBpZmRlZiBPUEVO U1NMX0ZJUFMKKy0jICBkZWZpbmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisrIyAgZGVm aW5lIG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAorICAgICAgICAgaW50IGFsZyMjX0lu aXQoY3gjI19DVFggKmMpIFwKKyAgICAgICAgIHsgXAorICAgICAgICAgaWYgKEZJUFNfbW9kZSgp KSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAorLSAgICAgICAgICAgICAgICAiTG93 IGxldmVsIEFQSSBjYWxsIHRvIGRpZ2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2Rl ISIpOyBcCisrICAgICAgICAgICAgICAgICJEaWdlc3QgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJ UFMgbW9kZSEiKTsgXAorICAgICAgICAgcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMpOyBc CisgICAgICAgICB9IFwKKyAgICAgICAgIGludCBwcml2YXRlXyMjYWxnIyNfSW5pdChjeCMjX0NU WCAqYykKKyAKKyAjICBkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQoYWxnKSBcCisgICAgICAgICBp ZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCistICAgICAg ICAgICAgICAgICJMb3cgbGV2ZWwgQVBJIGNhbGwgdG8gY2lwaGVyICIgI2FsZyAiIGZvcmJpZGRl biBpbiBGSVBTIG1vZGUhIikKKysgICAgICAgICAgICAgICAgIkNpcGhlciAiICNhbGcgIiBmb3Ji aWRkZW4gaW4gRklQUyBtb2RlISIpCisrCisrLyogZGllIGlmIEZJUFMgc2VsZnRlc3QgZmFpbGVk ICovCisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpOworIAorICMgZWxzZQorLSMgIGRl ZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKy0gICAgICAgIGludCBhbGcjI19Jbml0 KGN4IyNfQ1RYICpjKQorKyMgIGRlZmluZSBub25maXBzX21kX2luaXRfY3R4KGFsZywgY3gpIGZp cHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkKKyAjICBkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQoYWxn KSB3aGlsZSgwKQorICMgZW5kaWYKKyAKK0BAIC02MzcsNiArNjQyLDkgQEAgaW50IENSWVBUT19t ZW1jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3QgdgorICAqLworIHZvaWQgRVJSX2xvYWRfQ1JZUFRP X3N0cmluZ3Modm9pZCk7CisgCisrIyBkZWZpbmUgT1BFTlNTTF9IQVZFX0lOSVQgICAgICAgMQor K3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7CisrCisgLyogRXJyb3IgY29kZXMgZm9y IHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Rlcy9kZXMuaC5maXBzIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9kZXMvZGVzLmgKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZGVzL2Rlcy5oLmZp cHMJMjAxNS0xMi0wNCAxMzo1NTo1MS44NzE1NjA0MDYgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4y ZS9jcnlwdG8vZGVzL2Rlcy5oCTIwMTUtMTItMDQgMTM6NTU6NTEuOTU3NTYyNDEyICswMTAwCitA QCAtMjMxLDEwICsyMzEsNiBAQCBpbnQgREVTX3NldF9rZXkoY29uc3RfREVTX2NibG9jayAqa2V5 LCBECisgaW50IERFU19rZXlfc2NoZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3Nj aGVkdWxlICpzY2hlZHVsZSk7CisgaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2Ni bG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Cisgdm9pZCBERVNfc2V0X2tl eV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hl ZHVsZSk7CistIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKy12b2lkIHByaXZhdGVfREVTX3NldF9rZXlf dW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKy0jIGVuZGlmCisgdm9p ZCBERVNfc3RyaW5nX3RvX2tleShjb25zdCBjaGFyICpzdHIsIERFU19jYmxvY2sgKmtleSk7Cisg dm9pZCBERVNfc3RyaW5nX3RvXzJrZXlzKGNvbnN0IGNoYXIgKnN0ciwgREVTX2NibG9jayAqa2V5 MSwgREVTX2NibG9jayAqa2V5Mik7Cisgdm9pZCBERVNfY2ZiNjRfZW5jcnlwdChjb25zdCB1bnNp Z25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL2Rlcy9zZXRfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZGVzL3Nl dF9rZXkuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kZXMvc2V0X2tleS5jLmZpcHMJMjAx NS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vZGVzL3NldF9rZXkuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1NzU2MjQxMiArMDEwMAorQEAg LTM1OSwxNSArMzU5LDYgQEAgaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2NibG9j aworIH0KKyAKKyB2b2lkIERFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICpr ZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy17 CistICAgIGZpcHNfY2lwaGVyX2Fib3J0KERFUyk7CistICAgIHByaXZhdGVfREVTX3NldF9rZXlf dW5jaGVja2VkKGtleSwgc2NoZWR1bGUpOworLX0KKy0KKy12b2lkIHByaXZhdGVfREVTX3NldF9r ZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQorLSNlbmRpZgorIHsK KyAgICAgc3RhdGljIGNvbnN0IGludCBzaGlmdHMyWzE2XSA9CisgICAgICAgICB7IDAsIDAsIDEs IDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAgfTsKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9k aC9kaF9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzCTIw MTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL2RoL2RoX2dlbi5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTU3NTYyNDEyICswMTAwCitAQCAt ODUsMTAgKzg1LDYgQEAgaW50IERIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoREggKnJldCwgaQor ICNlbmRpZgorICAgICBpZiAocmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMpCisgICAgICAgICBy ZXR1cm4gcmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdlbmVyYXRv ciwgY2IpOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgaWYgKEZJUFNfbW9kZSgpKQorLSAg ICAgICAgcmV0dXJuIEZJUFNfZGhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChyZXQsIHByaW1lX2xl biwgZ2VuZXJhdG9yLCBjYik7CistI2VuZGlmCisgICAgIHJldHVybiBkaF9idWlsdGluX2dlbnBh cmFtcyhyZXQsIHByaW1lX2xlbiwgZ2VuZXJhdG9yLCBjYik7CisgfQorIAorQEAgLTEyNiw2ICsx MjIsMTggQEAgc3RhdGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LAorICAgICBp bnQgZywgb2sgPSAtMTsKKyAgICAgQk5fQ1RYICpjdHggPSBOVUxMOworIAorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKKysgICAgICAgIEZJ UFNlcnIoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLCBGSVBTX1JfRklQU19TRUxGVEVTVF9G QUlMRUQpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgaWYgKEZJUFNfbW9k ZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsK KysgICAgICAgIERIZXJyKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIERIX1JfS0VZX1NJWkVf VE9PX1NNQUxMKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrI2VuZGlmCisrCisgICAg IGN0eCA9IEJOX0NUWF9uZXcoKTsKKyAgICAgaWYgKGN0eCA9PSBOVUxMKQorICAgICAgICAgZ290 byBlcnI7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZGgvZGguaC5maXBzIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9kaC9kaC5oCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RoL2Ro LmguZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjgxNjU1OTEyNCArMDEwMAorKysrIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9kaC9kaC5oCTIwMTUtMTItMDQgMTM6NTU6NTEuOTU3NTYyNDEyICswMTAw CitAQCAtNzcsNiArNzcsOCBAQAorICMgIGRlZmluZSBPUEVOU1NMX0RIX01BWF9NT0RVTFVTX0JJ VFMgICAgMTAwMDAKKyAjIGVuZGlmCisgCisrIyBkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01JTl9N T0RVTFVTX0JJVFMgMTAyNAorKworICMgZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9OVF9QICAgICAw eDAxCisgCisgLyoKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kaC9kaF9rZXkuYy5m aXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kaC9kaF9rZXkuYworLS0tIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9kaC9kaF9rZXkuYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RoL2RoX2tleS5jCTIwMTUtMTItMDQgMTM6 NTU6NTEuOTU4NTYyNDM1ICswMTAwCitAQCAtNjEsNiArNjEsOSBAQAorICNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorICNpbmNsdWRlIDxvcGVuc3Ns L2RoLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2VuZGlmCisgCisgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKTsKKyBzdGF0aWMg aW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5 LCBESCAqZGgpOworQEAgLTk3LDcgKzEwMCw3IEBAIGludCBESF9jb21wdXRlX2tleSh1bnNpZ25l ZCBjaGFyICprZXksIGMKKyBpbnQgREhfY29tcHV0ZV9rZXlfcGFkZGVkKHVuc2lnbmVkIGNoYXIg KmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpCisgeworICAgICBpbnQgcnYsIHBh ZDsKKy0gICAgcnYgPSBkaC0+bWV0aC0+Y29tcHV0ZV9rZXkoa2V5LCBwdWJfa2V5LCBkaCk7Cisr ICAgIHJ2ID0gREhfY29tcHV0ZV9rZXkoa2V5LCBwdWJfa2V5LCBkaCk7CisgICAgIGlmIChydiA8 PSAwKQorICAgICAgICAgcmV0dXJuIHJ2OworICAgICBwYWQgPSBCTl9udW1fYnl0ZXMoZGgtPnAp IC0gcnY7CitAQCAtMTE1LDcgKzExOCw3IEBAIHN0YXRpYyBESF9NRVRIT0QgZGhfb3NzbCA9IHsK KyAgICAgZGhfYm5fbW9kX2V4cCwKKyAgICAgZGhfaW5pdCwKKyAgICAgZGhfZmluaXNoLAorLSAg ICAwLAorKyAgICBESF9GTEFHX0ZJUFNfTUVUSE9ELAorICAgICBOVUxMLAorICAgICBOVUxMCisg fTsKK0BAIC0xMzQsNiArMTM3LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpkaCkK KyAgICAgQk5fTU9OVF9DVFggKm1vbnQgPSBOVUxMOworICAgICBCSUdOVU0gKnB1Yl9rZXkgPSBO VUxMLCAqcHJpdl9rZXkgPSBOVUxMOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYg KEZJUFNfbW9kZSgpCisrICAgICAgICAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9E SF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICBESGVycihESF9GX0dFTkVSQVRF X0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAg IH0KKysjZW5kaWYKKysKKyAgICAgY3R4ID0gQk5fQ1RYX25ldygpOworICAgICBpZiAoY3R4ID09 IE5VTEwpCisgICAgICAgICBnb3RvIGVycjsKK0BAIC0yMTcsNiArMjI4LDEzIEBAIHN0YXRpYyBp bnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2UKKyAgICAgICAgIERIZXJyKERIX0ZfQ09N UFVURV9LRVksIERIX1JfTU9EVUxVU19UT09fTEFSR0UpOworICAgICAgICAgZ290byBlcnI7Cisg ICAgIH0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21vZGUoKQorKyAgICAg ICAgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19C SVRTKSkgeworKyAgICAgICAgREhlcnIoREhfRl9DT01QVVRFX0tFWSwgREhfUl9LRVlfU0laRV9U T09fU01BTEwpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysjZW5kaWYKKyAKKyAgICAg Y3R4ID0gQk5fQ1RYX25ldygpOworICAgICBpZiAoY3R4ID09IE5VTEwpCitAQCAtMjc3LDYgKzI5 NSw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgsIEIKKyAKKyBzdGF0 aWMgaW50IGRoX2luaXQoREggKmRoKQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIEZJ UFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAgICAgZGgtPmZsYWdzIHw9IERIX0ZMQUdf Q0FDSEVfTU9OVF9QOworICAgICByZXR1cm4gKDEpOworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjJlL2NyeXB0by9kaC9kaF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kaC9kaF9s aWIuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kaC9kaF9saWIuYy5maXBzCTIwMTUtMTIt MDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Ro L2RoX2xpYi5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTU4NTYyNDM1ICswMTAwCitAQCAtODAsMTQg KzgwLDcgQEAgdm9pZCBESF9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgREhfTUVUSAorIGNvbnN0 IERIX01FVEhPRCAqREhfZ2V0X2RlZmF1bHRfbWV0aG9kKHZvaWQpCisgeworICAgICBpZiAoIWRl ZmF1bHRfREhfbWV0aG9kKSB7CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICAgICAgaWYgKEZJ UFNfbW9kZSgpKQorLSAgICAgICAgICAgIHJldHVybiBGSVBTX2RoX29wZW5zc2woKTsKKy0gICAg ICAgIGVsc2UKKy0gICAgICAgICAgICByZXR1cm4gREhfT3BlblNTTCgpOworLSNlbHNlCisgICAg ICAgICBkZWZhdWx0X0RIX21ldGhvZCA9IERIX09wZW5TU0woKTsKKy0jZW5kaWYKKyAgICAgfQor ICAgICByZXR1cm4gZGVmYXVsdF9ESF9tZXRob2Q7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2Rz YV9lcnIuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMJMjAx NS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vZHNhL2RzYV9lcnIuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1ODU2MjQzNSArMDEwMAorQEAg LTc0LDYgKzc0LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX2Z1bmN0c1tdCisg ICAgIHtFUlJfRlVOQyhEU0FfRl9ET19EU0FfUFJJTlQpLCAiRE9fRFNBX1BSSU5UIn0sCisgICAg IHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJTlQpLCAiRFNBcGFyYW1zX3ByaW50In0sCisg ICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlApLCAiRFNBcGFyYW1zX3ByaW50 X2ZwIn0sCisrICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4pLCAiZHNhX2J1 aWx0aW5fa2V5Z2VuIn0sCisrICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdF TiksICJkc2FfYnVpbHRpbl9wYXJhbWdlbiJ9LAorICAgICB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0JV SUxUSU5fUEFSQU1HRU4yKSwgIkRTQV9CVUlMVElOX1BBUkFNR0VOMiJ9LAorICAgICB7RVJSX0ZV TkMoRFNBX0ZfRFNBX0RPX1NJR04pLCAiRFNBX2RvX3NpZ24ifSwKKyAgICAge0VSUl9GVU5DKERT QV9GX0RTQV9ET19WRVJJRlkpLCAiRFNBX2RvX3ZlcmlmeSJ9LAorQEAgLTEwOSw2ICsxMTEsOCBA QCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfcmVhc29uc1tdCisgICAgIHtFUlJfUkVB U09OKERTQV9SX0RFQ09ERV9FUlJPUiksICJkZWNvZGUgZXJyb3IifSwKKyAgICAge0VSUl9SRUFT T04oRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRSksICJpbnZhbGlkIGRpZ2VzdCB0eXBlIn0sCisg ICAgIHtFUlJfUkVBU09OKERTQV9SX0lOVkFMSURfUEFSQU1FVEVSUyksICJpbnZhbGlkIHBhcmFt ZXRlcnMifSwKKysgICAge0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCksICJrZXkg c2l6ZSBpbnZhbGlkIn0sCisrICAgIHtFUlJfUkVBU09OKERTQV9SX0tFWV9TSVpFX1RPT19TTUFM TCksICJrZXkgc2l6ZSB0b28gc21hbGwifSwKKyAgICAge0VSUl9SRUFTT04oRFNBX1JfTUlTU0lO R19QQVJBTUVURVJTKSwgIm1pc3NpbmcgcGFyYW1ldGVycyJ9LAorICAgICB7RVJSX1JFQVNPTihE U0FfUl9NT0RVTFVTX1RPT19MQVJHRSksICJtb2R1bHVzIHRvbyBsYXJnZSJ9LAorICAgICB7RVJS X1JFQVNPTihEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMpLCAibmVlZCBuZXcgc2V0dXAgdmFs dWVzIn0sCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBz IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2EvZHNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2EvZHNhX2dlbi5jCTIwMTUtMTItMDQg MTM6NTc6MzkuMTIyMDYxNDgxICswMTAwCitAQCAtOTEsNiArOTEsMTYgQEAKKyAjICBpbmNsdWRl IDxvcGVuc3NsL2ZpcHMuaD4KKyAjIGVuZGlmCisgCisrIyBpZm5kZWYgT1BFTlNTTF9GSVBTCisr c3RhdGljIGludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6ZV90IGJpdHMs IHNpemVfdCBxYml0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVW UF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgc2VlZF9sZW4sIEJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3JldCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIEJOX0dF TkNCICpjYik7Cisrc3RhdGljIGludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4LCBC SUdOVU0gKnAsIEJJR05VTSAqcSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklH TlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBCTl9HRU5DQiAqY2IpOworKyMgZW5kaWYKKysKKyBpbnQgRFNBX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBpbnQgc2VlZF9sZW4sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIHVuc2lnbmVk IGxvbmcgKmhfcmV0LAorQEAgLTEwNiw5NyArMTE2LDE2NSBAQCBpbnQgRFNBX2dlbmVyYXRlX3Bh cmFtZXRlcnNfZXgoRFNBICpyZXQsCisgICAgIGlmIChyZXQtPm1ldGgtPmRzYV9wYXJhbWdlbikK KyAgICAgICAgIHJldHVybiByZXQtPm1ldGgtPmRzYV9wYXJhbWdlbihyZXQsIGJpdHMsIHNlZWRf aW4sIHNlZWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv dW50ZXJfcmV0LCBoX3JldCwgY2IpOworLSMgaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGVsc2Ug aWYgKEZJUFNfbW9kZSgpKSB7CistICAgICAgICByZXR1cm4gRklQU19kc2FfZ2VuZXJhdGVfcGFy YW1ldGVyc19leChyZXQsIGJpdHMsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWVkX2luLCBzZWVkX2xlbiwKKy0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOworLSAgICB9 CistIyBlbmRpZgorICAgICBlbHNlIHsKKyAgICAgICAgIGNvbnN0IEVWUF9NRCAqZXZwbWQgPSBi aXRzID49IDIwNDggPyBFVlBfc2hhMjU2KCkgOiBFVlBfc2hhMSgpOworICAgICAgICAgc2l6ZV90 IHFiaXRzID0gRVZQX01EX3NpemUoZXZwbWQpICogODsKKyAKKyAgICAgICAgIHJldHVybiBkc2Ff YnVpbHRpbl9wYXJhbWdlbihyZXQsIGJpdHMsIHFiaXRzLCBldnBtZCwKKy0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZWVkX2luLCBzZWVkX2xlbiwgTlVMTCwgY291bnRlcl9y ZXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZF9pbiwgc2VlZF9s ZW4sIGNvdW50ZXJfcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhf cmV0LCBjYik7CisgICAgIH0KKyB9CisgCisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgRklQ U19kc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0 cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRf aW4sIHNpemVfdCBzZWVkX2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg KmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBCTl9HRU5DQiAqY2IpCisreworKyAgICByZXR1cm4gZHNhX2J1aWx0aW5fcGFy YW1nZW4ocmV0LCBiaXRzLCBxYml0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGV2cG1kLCBzZWVkX2luLCBzZWVkX2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOworK30KKysjIGVuZGlmCisrCisgaW50IGRzYV9i dWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNpZ25l ZCBjaGFyICpzZWVkX2luLAorLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2VlZF9s ZW4sIHVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3Qgc2VlZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9y ZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCisgeworICAgICBpbnQgb2sg PSAwOworICAgICB1bnNpZ25lZCBjaGFyIHNlZWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKyAg ICBCSUdOVU0gKmcgPSBOVUxMLCAqcSA9IE5VTEwsICpwID0gTlVMTDsKKysgICAgc2l6ZV90IHFz aXplID0gcWJpdHMgPj4gMzsKKysgICAgQk5fQ1RYICpjdHggPSBOVUxMOworKyAgICAKKysjIGlm ZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAg ICAgICAgRklQU2VycihGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sIEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBpZiAo RklQU19tb2R1bGVfbW9kZSgpICYmCisrICAgICAgICAoYml0cyAhPSAxMDI0IHx8IHFiaXRzICE9 IDE2MCkgJiYKKysgICAgICAgIChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjI0KSAmJgorKyAg ICAgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyNTYpICYmIChiaXRzICE9IDMwNzIgfHwg cWJpdHMgIT0gMjU2KSkgeworKyAgICAgICAgRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BBUkFN R0VOLCBEU0FfUl9LRVlfU0laRV9JTlZBTElEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9 CisrIyBlbmRpZgorKyAgICBpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClxc2l6 ZSkpCisrICAgICAgICBzZWVkX2luID0gTlVMTDsgICAgICAgICAvKiBzZWVkIGJ1ZmZlciB0b28g c21hbGwgLS0gaWdub3JlICovCisrICAgIGlmIChzZWVkX2xlbiA+IHNpemVvZihzZWVkKSkKKysg ICAgICAgIHNlZWRfbGVuID0gc2l6ZW9mKHNlZWQpOyAvKiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAx ODYgYWxsb3dzIGxhcmdlciBTRUVELAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqIGJ1dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUgcmVzdHJpY3RlZCB0byAyNTYgYml0cyov CisrICAgIGlmIChzZWVkX2luICE9IE5VTEwpCisrICAgICAgICBtZW1jcHkoc2VlZCwgc2VlZF9p biwgc2VlZF9sZW4pOworKyAgICBlbHNlCisrICAgICAgICBzZWVkX2xlbiA9IDA7CisrICAgICAg ICAKKysgICAgaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCisrICAgICAgICBnb3Rv IGVycjsKKysgCisrICAgIEJOX0NUWF9zdGFydChjdHgpOworKyAKKysgICAgaWYgKCFGSVBTX2Rz YV9nZW5lcmF0ZV9wcShjdHgsIGJpdHMsIHFiaXRzLCBldnBtZCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWVkLCBzZWVkX2xlbiwgJnAsICZxLCBjb3VudGVyX3JldCwgY2IpKQor KyAgICAgICAgZ290byBlcnI7CisrIAorKyAgICBpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX2coY3R4 LCBwLCBxLCAmZywgaF9yZXQsIGNiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAKKysgICAgb2sg PSAxOworKyBlcnI6CisrICAgIGlmIChvaykgeworKyAgICAgICAgaWYgKHJldC0+cCkgeworKyAg ICAgICAgICAgIEJOX2ZyZWUocmV0LT5wKTsKKysgICAgICAgICAgICByZXQtPnAgPSBOVUxMOwor KyAgICAgICAgfQorKyAgICAgICAgaWYgKHJldC0+cSkgeworKyAgICAgICAgICAgIEJOX2ZyZWUo cmV0LT5xKTsKKysgICAgICAgICAgICByZXQtPnEgPSBOVUxMOworKyAgICAgICAgfQorKyAgICAg ICAgaWYgKHJldC0+ZykgeworKyAgICAgICAgICAgIEJOX2ZyZWUocmV0LT5nKTsKKysgICAgICAg ICAgICByZXQtPmcgPSBOVUxMOworKyAgICAgICAgfQorKyAgICAgICAgcmV0LT5wID0gQk5fZHVw KHApOworKyAgICAgICAgcmV0LT5xID0gQk5fZHVwKHEpOworKyAgICAgICAgcmV0LT5nID0gQk5f ZHVwKGcpOworKyAgICAgICAgaWYgKHJldC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxMIHx8 IHJldC0+ZyA9PSBOVUxMKQorKyAgICAgICAgICAgIG9rID0gMDsKKysgICAgfQorKyAgICBpZiAo Y3R4KSB7CisrICAgICAgICBCTl9DVFhfZW5kKGN0eCk7CisrICAgICAgICBCTl9DVFhfZnJlZShj dHgpOworKyAgICB9CisrICAgIHJldHVybiBvazsKKyt9CisrCisrIyBpZm5kZWYgT1BFTlNTTF9G SVBTCisrc3RhdGljCisrIyBlbmRpZgorK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFgg KmN0eCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKysgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHNlZWRfbGVuLCBCSUdOVU0gKipwX3JldCwgQklHTlVNICoqcV9y ZXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNC ICpjYikKKyt7CisrICAgIGludCBvayA9IDA7CisgICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBMjU2 X0RJR0VTVF9MRU5HVEhdOworLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNUX0xF TkdUSF0sIGJ1ZjJbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKyAgICB1bnNpZ25lZCBjaGFyIGJ1 ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07CisgICAgIEJJR05VTSAqcjAsICpXLCAqWCwgKmMsICp0 ZXN0OworLSAgICBCSUdOVU0gKmcgPSBOVUxMLCAqcSA9IE5VTEwsICpwID0gTlVMTDsKKy0gICAg Qk5fTU9OVF9DVFggKm1vbnQgPSBOVUxMOworLSAgICBpbnQgaSwgaywgbiA9IDAsIG0gPSAwLCBx c2l6ZSA9IHFiaXRzID4+IDM7CisrICAgIEJJR05VTSAqcSA9IE5VTEwsICpwID0gTlVMTDsKKysg ICAgaW50IGksIGssIGIsIG4gPSAwLCBtID0gMCwgcXNpemUgPSBxYml0cyA+PiAzOworICAgICBp bnQgY291bnRlciA9IDA7CisgICAgIGludCByID0gMDsKKy0gICAgQk5fQ1RYICpjdHggPSBOVUxM OworLSAgICB1bnNpZ25lZCBpbnQgaCA9IDI7CisgCisgICAgIGlmIChxc2l6ZSAhPSBTSEFfRElH RVNUX0xFTkdUSCAmJiBxc2l6ZSAhPSBTSEEyMjRfRElHRVNUX0xFTkdUSCAmJgorICAgICAgICAg cXNpemUgIT0gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCisgICAgICAgICAvKiBpbnZhbGlkIHEgc2l6 ZSAqLworICAgICAgICAgcmV0dXJuIDA7CisgCistICAgIGlmIChldnBtZCA9PSBOVUxMKQorLSAg ICAgICAgLyogdXNlIFNIQTEgYXMgZGVmYXVsdCAqLworKyAgICBpZiAoZXZwbWQgPT0gTlVMTCkg eworKyAgICAgICAgaWYgKHFiaXRzIDw9IDE2MCkKKyAgICAgICAgIGV2cG1kID0gRVZQX3NoYTEo KTsKKysgICAgICAgIGVsc2UgaWYgKHFiaXRzIDw9IDIyNCkKKysgICAgICAgICAgICBldnBtZCA9 IEVWUF9zaGEyMjQoKTsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBldnBtZCA9IEVWUF9z aGEyNTYoKTsKKysgICAgfQorIAorICAgICBpZiAoYml0cyA8IDUxMikKKyAgICAgICAgIGJpdHMg PSA1MTI7CisgCisgICAgIGJpdHMgPSAoYml0cyArIDYzKSAvIDY0ICogNjQ7CisgCistICAgIC8q CistICAgICAqIE5COiBzZWVkX2xlbiA9PSAwIGlzIHNwZWNpYWwgY2FzZTogY29weSBnZW5lcmF0 ZWQgc2VlZCB0byBzZWVkX2luIGlmCistICAgICAqIGl0IGlzIG5vdCBOVUxMLgorLSAgICAgKi8K Ky0gICAgaWYgKHNlZWRfbGVuICYmIChzZWVkX2xlbiA8IChzaXplX3QpcXNpemUpKQorLSAgICAg ICAgc2VlZF9pbiA9IE5VTEw7ICAgICAgICAgLyogc2VlZCBidWZmZXIgdG9vIHNtYWxsIC0tIGln bm9yZSAqLworLSAgICBpZiAoc2VlZF9sZW4gPiAoc2l6ZV90KXFzaXplKQorLSAgICAgICAgc2Vl ZF9sZW4gPSBxc2l6ZTsgICAgICAgLyogQXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFsbG93cyBs YXJnZXIKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFNFRUQsIGJ1dCBvdXIg aW50ZXJuYWwgYnVmZmVycyBhcmUKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq IHJlc3RyaWN0ZWQgdG8gMTYwIGJpdHMgKi8KKy0gICAgaWYgKHNlZWRfaW4gIT0gTlVMTCkKKy0g ICAgICAgIG1lbWNweShzZWVkLCBzZWVkX2luLCBzZWVkX2xlbik7CistCistICAgIGlmICgobW9u dCA9IEJOX01PTlRfQ1RYX25ldygpKSA9PSBOVUxMKQorLSAgICAgICAgZ290byBlcnI7CistCist ICAgIGlmICgoY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKQorLSAgICAgICAgZ290byBlcnI7 CistCistICAgIEJOX0NUWF9zdGFydChjdHgpOworLQorICAgICByMCA9IEJOX0NUWF9nZXQoY3R4 KTsKKy0gICAgZyA9IEJOX0NUWF9nZXQoY3R4KTsKKyAgICAgVyA9IEJOX0NUWF9nZXQoY3R4KTsK Ky0gICAgcSA9IEJOX0NUWF9nZXQoY3R4KTsKKysgICAgKnFfcmV0ID0gcSA9IEJOX0NUWF9nZXQo Y3R4KTsKKyAgICAgWCA9IEJOX0NUWF9nZXQoY3R4KTsKKyAgICAgYyA9IEJOX0NUWF9nZXQoY3R4 KTsKKy0gICAgcCA9IEJOX0NUWF9nZXQoY3R4KTsKKysgICAgKnBfcmV0ID0gcCA9IEJOX0NUWF9n ZXQoY3R4KTsKKyAgICAgdGVzdCA9IEJOX0NUWF9nZXQoY3R4KTsKKyAKKyAgICAgaWYgKCFCTl9s c2hpZnQodGVzdCwgQk5fdmFsdWVfb25lKCksIGJpdHMgLSAxKSkKKyAgICAgICAgIGdvdG8gZXJy OworIAorKyAgICAvKiBzdGVwIDMgbiA9IFxsY2VpbCBiaXRzIC8gcWJpdHMgXHJjZWlsIC0gMSAq LworKyAgICBuID0gKGJpdHMgKyBxYml0cyAtIDEpIC8gcWJpdHMgLSAxOworKyAgICAvKiBzdGVw IDQgYiA9IGJpdHMgLSAxIC0gbiAqIHFiaXRzICovCisrICAgIGIgPSBiaXRzIC0gMSAtIG4gKiBx Yml0czsKKysKKyAgICAgZm9yICg7OykgeworICAgICAgICAgZm9yICg7OykgeyAgICAgICAgICAg ICAgLyogZmluZCBxICovCisgICAgICAgICAgICAgaW50IHNlZWRfaXNfcmFuZG9tOworIAorLSAg ICAgICAgICAgIC8qIHN0ZXAgMSAqLworKyAgICAgICAgICAgIC8qIHN0ZXAgNSBnZW5lcmF0ZSBz ZWVkICovCisgICAgICAgICAgICAgaWYgKCFCTl9HRU5DQl9jYWxsKGNiLCAwLCBtKyspKQorICAg ICAgICAgICAgICAgICBnb3RvIGVycjsKKyAKKy0gICAgICAgICAgICBpZiAoIXNlZWRfbGVuIHx8 ICFzZWVkX2luKSB7CisrICAgICAgICAgICAgaWYgKCFzZWVkX2xlbikgeworICAgICAgICAgICAg ICAgICBpZiAoUkFORF9wc2V1ZG9fYnl0ZXMoc2VlZCwgcXNpemUpIDwgMCkKKyAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICAgICAgICAgICBzZWVkX2lzX3JhbmRvbSA9IDE7 CitAQCAtMjA2LDI5ICsyODQsMTggQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0 LCBzaXplXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgYmFkICovCisg ICAgICAgICAgICAgfQorICAgICAgICAgICAgIG1lbWNweShidWYsIHNlZWQsIHFzaXplKTsKKy0g ICAgICAgICAgICBtZW1jcHkoYnVmMiwgc2VlZCwgcXNpemUpOworLSAgICAgICAgICAgIC8qIHBy ZWNvbXB1dGUgIlNFRUQgKyAxIiBmb3Igc3RlcCA3OiAqLworLSAgICAgICAgICAgIGZvciAoaSA9 IHFzaXplIC0gMTsgaSA+PSAwOyBpLS0pIHsKKy0gICAgICAgICAgICAgICAgYnVmW2ldKys7Cist ICAgICAgICAgICAgICAgIGlmIChidWZbaV0gIT0gMCkKKy0gICAgICAgICAgICAgICAgICAgIGJy ZWFrOworLSAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICAvKiBzdGVwIDIgKi8KKysgICAg ICAgICAgICAvKiBzdGVwIDYgVSA9IGhhc2goc2VlZCkgKi8KKyAgICAgICAgICAgICBpZiAoIUVW UF9EaWdlc3Qoc2VlZCwgcXNpemUsIG1kLCBOVUxMLCBldnBtZCwgTlVMTCkpCisgICAgICAgICAg ICAgICAgIGdvdG8gZXJyOworLSAgICAgICAgICAgIGlmICghRVZQX0RpZ2VzdChidWYsIHFzaXpl LCBidWYyLCBOVUxMLCBldnBtZCwgTlVMTCkpCistICAgICAgICAgICAgICAgIGdvdG8gZXJyOwor LSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBxc2l6ZTsgaSsrKQorLSAgICAgICAgICAgICAg ICBtZFtpXSBePSBidWYyW2ldOworIAorLSAgICAgICAgICAgIC8qIHN0ZXAgMyAqLworKyAgICAg ICAgICAgIC8qIHN0ZXAgNyBxID0gMl4ocWJpdHMtMSkgKyBVICsgMSAtIChVIG1vZCAyKSAqLwor ICAgICAgICAgICAgIG1kWzBdIHw9IDB4ODA7CisgICAgICAgICAgICAgbWRbcXNpemUgLSAxXSB8 PSAweDAxOworICAgICAgICAgICAgIGlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcSkpCisgICAg ICAgICAgICAgICAgIGdvdG8gZXJyOworIAorLSAgICAgICAgICAgIC8qIHN0ZXAgNCAqLworKyAg ICAgICAgICAgIC8qIHN0ZXAgOCB0ZXN0IGZvciBwcmltZSAoNjQgcm91bmQgb2YgUmFiaW4tTWls bGVyKSAqLworICAgICAgICAgICAgIHIgPSBCTl9pc19wcmltZV9mYXN0dGVzdF9leChxLCBEU1Nf cHJpbWVfY2hlY2tzLCBjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNlZWRfaXNfcmFuZG9tLCBjYik7CisgICAgICAgICAgICAgaWYgKHIgPiAwKQorQEAgLTIz Niw4ICszMDMsNiBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisg ICAgICAgICAgICAgaWYgKHIgIT0gMCkKKyAgICAgICAgICAgICAgICAgZ290byBlcnI7CisgCist ICAgICAgICAgICAgLyogZG8gYSBjYWxsYmFjayBjYWxsICovCistICAgICAgICAgICAgLyogc3Rl cCA1ICovCisgICAgICAgICB9CisgCisgICAgICAgICBpZiAoIUJOX0dFTkNCX2NhbGwoY2IsIDIs IDApKQorQEAgLTI0NSwxOSArMzEwLDE2IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0Eg KnJldCwgc2l6ZV8KKyAgICAgICAgIGlmICghQk5fR0VOQ0JfY2FsbChjYiwgMywgMCkpCisgICAg ICAgICAgICAgZ290byBlcnI7CisgCistICAgICAgICAvKiBzdGVwIDYgKi8KKysgICAgICAgIC8q IHN0ZXAgMTEgKi8KKyAgICAgICAgIGNvdW50ZXIgPSAwOworLSAgICAgICAgLyogIm9mZnNldCA9 IDIiICovCistCistICAgICAgICBuID0gKGJpdHMgLSAxKSAvIDE2MDsKKysgICAgICAgIC8qICJv ZmZzZXQgPSAxIiAqLworIAorICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgIGlmICgo Y291bnRlciAhPSAwKSAmJiAhQk5fR0VOQ0JfY2FsbChjYiwgMCwgY291bnRlcikpCisgICAgICAg ICAgICAgICAgIGdvdG8gZXJyOworIAorLSAgICAgICAgICAgIC8qIHN0ZXAgNyAqLworKyAgICAg ICAgICAgIC8qIHN0ZXAgMTEuMSwgMTEuMiBvYnRhaW4gVyAqLworICAgICAgICAgICAgIEJOX3pl cm8oVyk7CistICAgICAgICAgICAgLyogbm93ICdidWYnIGNvbnRhaW5zICJTRUVEICsgb2Zmc2V0 IC0gMSIgKi8KKyAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDw9IG47IGsrKykgeworICAgICAg ICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgKiBvYnRhaW4gIlNFRUQgKyBvZmZzZXQg KyBrIiBieSBpbmNyZW1lbnRpbmc6CitAQCAtMjcxLDM2ICszMzMsMzcgQEAgaW50IGRzYV9idWls dGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworICAgICAgICAgICAgICAgICBpZiAoIUVWUF9E aWdlc3QoYnVmLCBxc2l6ZSwgbWQsIE5VTEwsIGV2cG1kLCBOVUxMKSkKKyAgICAgICAgICAgICAg ICAgICAgIGdvdG8gZXJyOworIAorLSAgICAgICAgICAgICAgICAvKiBzdGVwIDggKi8KKyAgICAg ICAgICAgICAgICAgaWYgKCFCTl9iaW4yYm4obWQsIHFzaXplLCByMCkpCisgICAgICAgICAgICAg ICAgICAgICBnb3RvIGVycjsKKy0gICAgICAgICAgICAgICAgaWYgKCFCTl9sc2hpZnQocjAsIHIw LCAocXNpemUgPDwgMykgKiBrKSkKKysgICAgICAgICAgICAgICAgaWYgKGsgPT0gbikKKysgICAg ICAgICAgICAgICAgICAgIEJOX21hc2tfYml0cyhyMCwgYik7CisrICAgICAgICAgICAgICAgIGlm ICghQk5fbHNoaWZ0KHIwLCByMCwgcWJpdHMgKiBrKSkKKyAgICAgICAgICAgICAgICAgICAgIGdv dG8gZXJyOworICAgICAgICAgICAgICAgICBpZiAoIUJOX2FkZChXLCBXLCByMCkpCisgICAgICAg ICAgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgICAgICB9CisgCistICAgICAgICAgICAg LyogbW9yZSBvZiBzdGVwIDggKi8KKy0gICAgICAgICAgICBpZiAoIUJOX21hc2tfYml0cyhXLCBi aXRzIC0gMSkpCistICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgICAgIC8qIHN0 ZXAgMTEuMyBYID0gVyArIDJeKEwtMSkgKi8KKyAgICAgICAgICAgICBpZiAoIUJOX2NvcHkoWCwg VykpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICAgICAgIGlmICghQk5fYWRk KFgsIFgsIHRlc3QpKQorICAgICAgICAgICAgICAgICBnb3RvIGVycjsKKyAKKy0gICAgICAgICAg ICAvKiBzdGVwIDkgKi8KKysgICAgICAgICAgICAvKiBzdGVwIDExLjQgYyA9IFggbW9kIDIqcSAq LworICAgICAgICAgICAgIGlmICghQk5fbHNoaWZ0MShyMCwgcSkpCisgICAgICAgICAgICAgICAg IGdvdG8gZXJyOworICAgICAgICAgICAgIGlmICghQk5fbW9kKGMsIFgsIHIwLCBjdHgpKQorICAg ICAgICAgICAgICAgICBnb3RvIGVycjsKKysKKysgICAgICAgICAgICAvKiBzdGVwIDExLjUgcCA9 IFggLSAoYyAtIDEpICovCisgICAgICAgICAgICAgaWYgKCFCTl9zdWIocjAsIGMsIEJOX3ZhbHVl X29uZSgpKSkKKyAgICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICAgICAgaWYgKCFC Tl9zdWIocCwgWCwgcjApKQorICAgICAgICAgICAgICAgICBnb3RvIGVycjsKKyAKKy0gICAgICAg ICAgICAvKiBzdGVwIDEwICovCisrICAgICAgICAgICAgLyogc3RlcCAxMS42ICovCisgICAgICAg ICAgICAgaWYgKEJOX2NtcChwLCB0ZXN0KSA+PSAwKSB7CistICAgICAgICAgICAgICAgIC8qIHN0 ZXAgMTEgKi8KKysgICAgICAgICAgICAgICAgLyogc3RlcCAxMS43ICovCisgICAgICAgICAgICAg ICAgIHIgPSBCTl9pc19wcmltZV9mYXN0dGVzdF9leChwLCBEU1NfcHJpbWVfY2hlY2tzLCBjdHgs IDEsIGNiKTsKKyAgICAgICAgICAgICAgICAgaWYgKHIgPiAwKQorICAgICAgICAgICAgICAgICAg ICAgZ290byBlbmQ7ICAgLyogZm91bmQgaXQgKi8KK0BAIC0zMDgsMTIgKzM3MSwxMiBAQCBpbnQg ZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgICAgICAgICAgICAgICAgICAg ICBnb3RvIGVycjsKKyAgICAgICAgICAgICB9CisgCistICAgICAgICAgICAgLyogc3RlcCAxMyAq LworKyAgICAgICAgICAgIC8qIHN0ZXAgMTEuOSAqLworICAgICAgICAgICAgIGNvdW50ZXIrKzsK KyAgICAgICAgICAgICAvKiAib2Zmc2V0ID0gb2Zmc2V0ICsgbiArIDEiICovCisgCistICAgICAg ICAgICAgLyogc3RlcCAxNCAqLworLSAgICAgICAgICAgIGlmIChjb3VudGVyID49IDQwOTYpCisr ICAgICAgICAgICAgLyogc3RlcCAxMiAqLworKyAgICAgICAgICAgIGlmIChjb3VudGVyID49IDQg KiBiaXRzKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgfQorQEAg LTMyMSw3ICszODQsMzMgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXpl XworICAgICBpZiAoIUJOX0dFTkNCX2NhbGwoY2IsIDIsIDEpKQorICAgICAgICAgZ290byBlcnI7 CisgCistICAgIC8qIFdlIG5vdyBuZWVkIHRvIGdlbmVyYXRlIGcgKi8KKysgICAgb2sgPSAxOwor KyBlcnI6CisrICAgIGlmIChvaykgeworKyAgICAgICAgaWYgKGNvdW50ZXJfcmV0ICE9IE5VTEwp CisrICAgICAgICAgICAgKmNvdW50ZXJfcmV0ID0gY291bnRlcjsKKysgICAgfQorKyAgICByZXR1 cm4gb2s7CisrfQorKworKyMgaWZuZGVmIE9QRU5TU0xfRklQUworK3N0YXRpYworKyMgZW5kaWYK KytpbnQgRklQU19kc2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0g KnEsCisrICAgICAgICAgICAgICAgICAgICAgICAgQklHTlVNICoqZ19yZXQsIHVuc2lnbmVkIGxv bmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCisreworKyAgICBpbnQgb2sgPSAwOworKyAgICBCSUdO VU0gKnIwLCAqdGVzdCwgKmcgPSBOVUxMOworKyAgICBCTl9NT05UX0NUWCAqbW9udDsKKysgICAg dW5zaWduZWQgaW50IGggPSAyOworKworKyAgICBpZiAoKG1vbnQgPSBCTl9NT05UX0NUWF9uZXco KSkgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICByMCA9IEJOX0NUWF9nZXQo Y3R4KTsKKysgICAgKmdfcmV0ID0gZyA9IEJOX0NUWF9nZXQoY3R4KTsKKysgICAgdGVzdCA9IEJO X0NUWF9nZXQoY3R4KTsKKysKKyAgICAgLyogU2V0IHIwPShwLTEpL3EgKi8KKyAgICAgaWYgKCFC Tl9zdWIodGVzdCwgcCwgQk5fdmFsdWVfb25lKCkpKQorICAgICAgICAgZ290byBlcnI7CitAQCAt MzUwLDQ2ICs0MzksMTQgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXpl XworICAgICBvayA9IDE7CisgIGVycjoKKyAgICAgaWYgKG9rKSB7CistICAgICAgICBpZiAocmV0 LT5wKQorLSAgICAgICAgICAgIEJOX2ZyZWUocmV0LT5wKTsKKy0gICAgICAgIGlmIChyZXQtPnEp CistICAgICAgICAgICAgQk5fZnJlZShyZXQtPnEpOworLSAgICAgICAgaWYgKHJldC0+ZykKKy0g ICAgICAgICAgICBCTl9mcmVlKHJldC0+Zyk7CistICAgICAgICByZXQtPnAgPSBCTl9kdXAocCk7 CistICAgICAgICByZXQtPnEgPSBCTl9kdXAocSk7CistICAgICAgICByZXQtPmcgPSBCTl9kdXAo Zyk7CistICAgICAgICBpZiAocmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwgfHwgcmV0 LT5nID09IE5VTEwpIHsKKy0gICAgICAgICAgICBvayA9IDA7CistICAgICAgICAgICAgZ290byBl cnI7CistICAgICAgICB9CistICAgICAgICBpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkKKy0gICAg ICAgICAgICAqY291bnRlcl9yZXQgPSBjb3VudGVyOworICAgICAgICAgaWYgKGhfcmV0ICE9IE5V TEwpCisgICAgICAgICAgICAgKmhfcmV0ID0gaDsKKy0gICAgICAgIGlmIChzZWVkX291dCkKKy0g ICAgICAgICAgICBtZW1jcHkoc2VlZF9vdXQsIHNlZWQsIHFzaXplKTsKKy0gICAgfQorLSAgICBp ZiAoY3R4KSB7CistICAgICAgICBCTl9DVFhfZW5kKGN0eCk7CistICAgICAgICBCTl9DVFhfZnJl ZShjdHgpOworICAgICB9CisgICAgIGlmIChtb250ICE9IE5VTEwpCisgICAgICAgICBCTl9NT05U X0NUWF9mcmVlKG1vbnQpOworICAgICByZXR1cm4gb2s7CisgfQorIAorLSMgaWZkZWYgT1BFTlNT TF9GSVBTCistIyAgdW5kZWYgZmlwc19kc2FfYnVpbHRpbl9wYXJhbWdlbjIKKy1leHRlcm4gaW50 IGZpcHNfZHNhX2J1aWx0aW5fcGFyYW1nZW4yKERTQSAqcmV0LCBzaXplX3QgTCwgc2l6ZV90IE4s CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2 cG1kLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqc2VlZF9pbiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBzZWVkX2xlbiwgaW50IGlkeCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAorLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQs CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTl9HRU5DQiAqY2IpOwor LSMgZW5kaWYKKy0KKyAvKgorICAqIFRoaXMgaXMgYSBwYXJhbWV0ZXIgZ2VuZXJhdGlvbiBhbGdv cml0aG0gZm9yIHRoZSBEU0EyIGFsZ29yaXRobSBhcworICAqIGRlc2NyaWJlZCBpbiBGSVBTIDE4 Ni0zLgorQEAgLTQxNSwxNCArNDcyLDYgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuMihEU0Eg KnJldCwgc2l6ZQorICAgICBFVlBfTURfQ1RYIG1jdHg7CisgICAgIHVuc2lnbmVkIGludCBoID0g MjsKKyAKKy0jIGlmZGVmIE9QRU5TU0xfRklQUworLQorLSAgICBpZiAoRklQU19tb2RlKCkpCist ICAgICAgICByZXR1cm4gZmlwc19kc2FfYnVpbHRpbl9wYXJhbWdlbjIocmV0LCBMLCBOLCBldnBt ZCwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkX2luLCBz ZWVkX2xlbiwgaWR4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNlZWRfb3V0LCBjb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKKy0jIGVuZGlmCistCisgICAgIEVW UF9NRF9DVFhfaW5pdCgmbWN0eCk7CisgCisgICAgIGlmIChldnBtZCA9PSBOVUxMKSB7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2RzYS9kc2EuaAorLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2EvZHNhLmguZmlw cwkyMDE1LTEyLTA0IDEzOjU1OjUxLjc0MDU1NzM1MSArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9kc2EvZHNhLmgJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTg1NjI0MzUgKzAxMDAKK0BA IC04OCw2ICs4OCw4IEBACisgIyAgZGVmaW5lIE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMg ICAxMDAwMAorICMgZW5kaWYKKyAKKysjIGRlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RV TFVTX0JJVFMgMTAyNAorKworICMgZGVmaW5lIERTQV9GTEFHX0NBQ0hFX01PTlRfUCAgIDB4MDEK KyAvKgorICAqIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERTQSBpbXBsZW1lbnRhdGlv biBub3cgdXNlcyBjb25zdGFudCB0aW1lCitAQCAtMjY1LDYgKzI2NywyMCBAQCBpbnQgRFNBX3By aW50X2ZwKEZJTEUgKmJwLCBjb25zdCBEU0EgKngsCisgREggKkRTQV9kdXBfREgoY29uc3QgRFNB ICpyKTsKKyAjIGVuZGlmCisgCisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgRklQU19kc2Ff YnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRfbGVuLCBpbnQgKmNvdW50 ZXJfcmV0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmhf cmV0LCBCTl9HRU5DQiAqY2IpOworK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0 eCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKysgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHNlZWRfbGVuLCBCSUdOVU0gKipwX3JldCwgQklHTlVNICoqcV9yZXQs CisrICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNCICpj Yik7CisraW50IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklH TlVNICpxLCBCSUdOVU0gKipnX3JldCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7CisrIyBlbmRpZgorKworICMgZGVmaW5l IEVWUF9QS0VZX0NUWF9zZXRfZHNhX3BhcmFtZ2VuX2JpdHMoY3R4LCBuYml0cykgXAorICAgICAg ICAgRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9EU0EsIEVWUF9QS0VZX09QX1BBUkFN R0VOLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfUEtFWV9DVFJMX0RT QV9QQVJBTUdFTl9CSVRTLCBuYml0cywgTlVMTCkKK0BAIC0yODcsMTEgKzMwMywxNCBAQCB2b2lk IEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOworICMgZGVmaW5lIERTQV9GX0RPX0RTQV9QUklO VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQKKyAjIGRlZmluZSBEU0FfRl9EU0FQ QVJBTVNfUFJJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwCisgIyBkZWZpbmUgRFNB X0ZfRFNBUEFSQU1TX1BSSU5UX0ZQICAgICAgICAgICAgICAgICAgICAgICAgIDEwMQorLSMgZGVm aW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOMiAgICAgICAgICAgICAgICAgICAgICAxMjYK KysjIGRlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4gICAgICAgICAgICAgICAgICAgICAg ICAgMTI0CisrIyBkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4gICAgICAgICAgICAg ICAgICAgICAgIDEyMworKyMgZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOMiAgICAg ICAgICAgICAgICAgICAgICAyMjYKKyAjIGRlZmluZSBEU0FfRl9EU0FfRE9fU0lHTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTEyCisgIyBkZWZpbmUgRFNBX0ZfRFNBX0RPX1ZFUklG WSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMworLSMgZGVmaW5lIERTQV9GX0RTQV9H RU5FUkFURV9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjQKKy0jIGRlZmluZSBEU0Ff Rl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSU19FWCAgICAgICAgICAgICAgICAgMTIzCisrIyBkZWZp bmUgRFNBX0ZfRFNBX0dFTkVSQVRFX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNgor KyMgZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTX0VYICAgICAgICAgICAgICAg ICAxMjcKKysjIGRlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUyAgIC8qIHVudXNl ZCAqLyAgICAgMTI1CisgIyBkZWZpbmUgRFNBX0ZfRFNBX05FV19NRVRIT0QgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEwMworICMgZGVmaW5lIERTQV9GX0RTQV9QQVJBTV9ERUNPREUgICAg ICAgICAgICAgICAgICAgICAgICAgICAxMTkKKyAjIGRlZmluZSBEU0FfRl9EU0FfUFJJTlRfRlAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA1CitAQCAtMzE3LDEyICszMzYsMTYgQEAg dm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKKyAjIGRlZmluZSBEU0FfUl9EQVRBX1RP T19MQVJHRV9GT1JfS0VZX1NJWkUgICAgICAgICAgICAgICAgMTAwCisgIyBkZWZpbmUgRFNBX1Jf REVDT0RFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNAorICMgZGVmaW5l IERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAxMDYKKy0j IGRlZmluZSBEU0FfUl9JTlZBTElEX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgICAg MTEyCisrIyBkZWZpbmUgRFNBX1JfSU5WQUxJRF9QQVJBTUVURVJTICAgICAgICAgICAgICAgICAg ICAgICAgIDIxMgorKyMgZGVmaW5lIERTQV9SX0tFWV9TSVpFX0lOVkFMSUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMTMKKysjIGRlZmluZSBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwgICAg ICAgICAgICAgICAgICAgICAgICAgMTEwCisgIyBkZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJBTUVU RVJTICAgICAgICAgICAgICAgICAgICAgICAgIDEwMQorICMgZGVmaW5lIERTQV9SX01PRFVMVVNf VE9PX0xBUkdFICAgICAgICAgICAgICAgICAgICAgICAgICAxMDMKKy0jIGRlZmluZSBEU0FfUl9O RUVEX05FV19TRVRVUF9WQUxVRVMgICAgICAgICAgICAgICAgICAgICAgMTEwCisrIyBkZWZpbmUg RFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTICAgICAgICAgICAgICAgICAgICAgIDExMgorICMg ZGVmaW5lIERTQV9SX05PTl9GSVBTX0RTQV9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgICAx MTEKKysjIGRlZmluZSBEU0FfUl9OT05fRklQU19NRVRIT0QgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTExCisgIyBkZWZpbmUgRFNBX1JfTk9fUEFSQU1FVEVSU19TRVQgICAgICAgICAgICAg ICAgICAgICAgICAgIDEwNworKyMgZGVmaW5lIERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9J Tl9GSVBTX01PREUgLyogdW51c2VkICovIDExMgorICMgZGVmaW5lIERTQV9SX1BBUkFNRVRFUl9F TkNPRElOR19FUlJPUiAgICAgICAgICAgICAgICAgICAxMDUKKyAjIGRlZmluZSBEU0FfUl9RX05P VF9QUklNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEzCisgCitkaWZmIC11cCBv cGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9kc2EvZHNhX2tleS5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2Ffa2V5 LmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9kc2EvZHNhX2tleS5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTU4NTYyNDM1 ICswMTAwCitAQCAtNjYsNiArNjYsMzQgQEAKKyAKKyAjIGlmZGVmIE9QRU5TU0xfRklQUworICMg IGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyMgIGluY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Cisr Cisrc3RhdGljIGludCBmaXBzX2NoZWNrX2RzYShEU0EgKmRzYSkKKyt7CisrICAgIEVWUF9QS0VZ ICpwazsKKysgICAgdW5zaWduZWQgY2hhciB0YnNbXSA9ICJEU0EgUGFpcndpc2UgQ2hlY2sgRGF0 YSI7CisrICAgIGludCByZXQgPSAwOworKworKyAgICBpZiAoKHBrID0gRVZQX1BLRVlfbmV3KCkp ID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgRVZQX1BLRVlfc2V0MV9EU0Eo cGssIGRzYSk7CisrCisrICAgIGlmIChmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywg LTEsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwpKQorKyAgICAgICAgcmV0ID0gMTsKKysKKysgZXJy OgorKyAgICBpZiAocmV0ID09IDApIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfQ0hF Q0tfRFNBLCBGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOworKyAgICAgICAgZmlwc19zZXRf c2VsZnRlc3RfZmFpbCgpOworKyAgICB9CisrCisrICAgIGlmIChwaykKKysgICAgICAgIEVWUF9Q S0VZX2ZyZWUocGspOworKworKyAgICByZXR1cm4gcmV0OworK30KKysKKyAjIGVuZGlmCisgCisg c3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpOworQEAgLTgxLDEwICsxMDks NiBAQCBpbnQgRFNBX2dlbmVyYXRlX2tleShEU0EgKmRzYSkKKyAjIGVuZGlmCisgICAgIGlmIChk c2EtPm1ldGgtPmRzYV9rZXlnZW4pCisgICAgICAgICByZXR1cm4gZHNhLT5tZXRoLT5kc2Ffa2V5 Z2VuKGRzYSk7CistIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgaWYgKEZJUFNfbW9kZSgpKQor LSAgICAgICAgcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX2tleShkc2EpOworLSMgZW5kaWYKKyAg ICAgcmV0dXJuIGRzYV9idWlsdGluX2tleWdlbihkc2EpOworIH0KKyAKK0BAIC05NCw2ICsxMTgs MTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCisgICAgIEJOX0NU WCAqY3R4ID0gTlVMTDsKKyAgICAgQklHTlVNICpwdWJfa2V5ID0gTlVMTCwgKnByaXZfa2V5ID0g TlVMTDsKKyAKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2RlKCkgJiYg IShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrICAgICAgICAmJiAoQk5f bnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsK KysgICAgICAgIERTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4sIERTQV9SX0tFWV9TSVpF X1RPT19TTUFMTCk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKyMgZW5kaWYKKysKKyAg ICAgaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCisgICAgICAgICBnb3RvIGVycjsK KyAKK0BAIC0xMzEsNiArMTYzLDEzIEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2VuKERT QSAqZHNhKQorIAorICAgICBkc2EtPnByaXZfa2V5ID0gcHJpdl9rZXk7CisgICAgIGRzYS0+cHVi X2tleSA9IHB1Yl9rZXk7CisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9k ZSgpICYmICFmaXBzX2NoZWNrX2RzYShkc2EpKSB7CisrICAgICAgICBkc2EtPnB1Yl9rZXkgPSBO VUxMOworKyAgICAgICAgZHNhLT5wcml2X2tleSA9IE5VTEw7CisrICAgICAgICBnb3RvIGVycjsK KysgICAgfQorKyMgZW5kaWYKKyAgICAgb2sgPSAxOworIAorICBlcnI6CitkaWZmIC11cCBvcGVu c3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0 by9kc2EvZHNhX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2FfbGliLmMu ZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjJlL2NyeXB0by9kc2EvZHNhX2xpYi5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTU5NTYyNDU4ICsw MTAwCitAQCAtODYsMTQgKzg2LDcgQEAgdm9pZCBEU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNvbnN0 IERTQV9NRQorIGNvbnN0IERTQV9NRVRIT0QgKkRTQV9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCkK KyB7CisgICAgIGlmICghZGVmYXVsdF9EU0FfbWV0aG9kKSB7CistI2lmZGVmIE9QRU5TU0xfRklQ UworLSAgICAgICAgaWYgKEZJUFNfbW9kZSgpKQorLSAgICAgICAgICAgIHJldHVybiBGSVBTX2Rz YV9vcGVuc3NsKCk7CistICAgICAgICBlbHNlCistICAgICAgICAgICAgcmV0dXJuIERTQV9PcGVu U1NMKCk7CistI2Vsc2UKKyAgICAgICAgIGRlZmF1bHRfRFNBX21ldGhvZCA9IERTQV9PcGVuU1NM KCk7CistI2VuZGlmCisgICAgIH0KKyAgICAgcmV0dXJuIGRlZmF1bHRfRFNBX21ldGhvZDsKKyB9 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9sb2NsLmguZmlwcyBvcGVu c3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vZHNhL2RzYV9sb2NsLmguZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjc0MjU1NzM5OCArMDEw MAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2EvZHNhX2xvY2wuaAkyMDE1LTEyLTA0IDEz OjU1OjUxLjk1OTU2MjQ1OCArMDEwMAorQEAgLTU2LDcgKzU2LDcgQEAKKyAKKyBpbnQgZHNhX2J1 aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKnNlZWRfaW4sCistICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZWVkX2xl biwgdW5zaWduZWQgY2hhciAqc2VlZF9vdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBzZWVkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVyX3Jl dCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dF TkNCICpjYik7CisgCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9vc3Ns LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMKKy0tLSBvcGVuc3Ns LTEuMC4yZS9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9kc2EvZHNhX29zc2wuYwky MDE1LTEyLTA0IDEzOjU1OjUxLjk1OTU2MjQ1OCArMDEwMAorQEAgLTY1LDYgKzY1LDkgQEAKKyAj aW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgI2lu Y2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2ln bihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpkc2EpOworIHN0YXRp YyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAqY3R4X2luLCBCSUdOVU0gKipr aW52cCwKK0BAIC04Myw3ICs4Niw3IEBAIHN0YXRpYyBEU0FfTUVUSE9EIG9wZW5zc2xfZHNhX21l dGggPSB7CisgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBkc2FfYm5fbW9kX2V4 cCwgKi8KKyAgICAgZHNhX2luaXQsCisgICAgIGRzYV9maW5pc2gsCistICAgIDAsCisrICAgIERT QV9GTEFHX0ZJUFNfTUVUSE9ELAorICAgICBOVUxMLAorICAgICBOVUxMLAorICAgICBOVUxMCitA QCAtMTQwLDYgKzE0MywxOSBAQCBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3QgdW5z aWduCisgICAgIERTQV9TSUcgKnJldCA9IE5VTEw7CisgICAgIGludCBub3JlZG8gPSAwOworIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsK KysgICAgICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19TSUdOLCBGSVBTX1JfRklQU19TRUxGVEVT VF9GQUlMRUQpOworKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAgaWYgKEZJ UFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQorKyAg ICAgICAgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RV TFVTX0JJVFMpKSB7CisrICAgICAgICBEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERTQV9SX0tF WV9TSVpFX1RPT19TTUFMTCk7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKyNlbmRp ZgorKworICAgICBCTl9pbml0KCZtKTsKKyAgICAgQk5faW5pdCgmeHIpOworIAorQEAgLTMzMCw2 ICszNDYsMTggQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkCisgICAg ICAgICBEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNBX1JfQkFEX1FfVkFMVUUpOworICAg ICAgICAgcmV0dXJuIC0xOworICAgICB9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRFNBX0RP X1ZFUklGWSwgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgIHJldHVybiAt MTsKKysgICAgfQorKworKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYgRFNB X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrICAgICAgICAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8 IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKKysgICAgICAgIERTQWVycihE U0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKyAgICAgICAg cmV0dXJuIC0xOworKyAgICB9CisrI2VuZGlmCisgCisgICAgIGlmIChCTl9udW1fYml0cyhkc2Et PnApID4gT1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUykgeworICAgICAgICAgRFNBZXJyKERT QV9GX0RTQV9ET19WRVJJRlksIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKK0BAIC00MTAsNiAr NDM4LDkgQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkCisgCisgc3Rh dGljIGludCBkc2FfaW5pdChEU0EgKmRzYSkKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAg ICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgICAgIGRzYS0+ZmxhZ3MgfD0gRFNB X0ZMQUdfQ0FDSEVfTU9OVF9QOworICAgICByZXR1cm4gKDEpOworIH0KK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vZHNhL2RzYV9wbWV0aC5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9kc2FfcG1l dGguYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL2RzYS9kc2FfcG1ldGguYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk1OTU2 MjQ1OCArMDEwMAorQEAgLTI1Myw3ICsyNTMsNyBAQCBzdGF0aWMgaW50IHBrZXlfZHNhX3BhcmFt Z2VuKEVWUF9QS0VZX0NUCisgICAgIGlmICghZHNhKQorICAgICAgICAgcmV0dXJuIDA7CisgICAg IHJldCA9IGRzYV9idWlsdGluX3BhcmFtZ2VuKGRzYSwgZGN0eC0+bmJpdHMsIGRjdHgtPnFiaXRz LCBkY3R4LT5wbWQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIE5V TEwsIE5VTEwsIE5VTEwsIHBjYik7CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V TEwsIDAsIE5VTEwsIE5VTEwsIHBjYik7CisgICAgIGlmIChyZXQpCisgICAgICAgICBFVlBfUEtF WV9hc3NpZ25fRFNBKHBrZXksIGRzYSk7CisgICAgIGVsc2UKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjJlL2NyeXB0by9kc2EvZHNhdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2RzYS9k c2F0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZHNhL2RzYXRlc3QuYy5maXBzCTIw MTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL2RzYS9kc2F0ZXN0LmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTk1NjI0NTggKzAxMDAKK0BA IC0xMDAsMzYgKzEwMCw0MSBAQCBzdGF0aWMgaW50IE1TX0NBTExCQUNLIGRzYV9jYihpbnQgcCwg aW50CisgICogUFVCIDE4NiBhbmQgYWxzbyBhcHBlYXIgaW4gQXBwZW5kaXggNSB0byBGSVBTIFBJ QiAxODYtMQorICAqLworIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNlZWRbMjBdID0geworLSAgICAw eGQ1LCAweDAxLCAweDRlLCAweDRiLCAweDYwLCAweGVmLCAweDJiLCAweGE4LCAweGI2LCAweDIx LCAweDFiLCAweDQwLAorLSAgICAweDYyLCAweGJhLCAweDMyLCAweDI0LCAweGUwLCAweDQyLCAw eDdkLCAweGQzLAorKyAgICAweDAyLCAweDQ3LCAweDExLCAweDkyLCAweDExLCAweDg4LCAweEM4 LCAweEZCLCAweEFGLCAweDQ4LCAweDRDLCAweDYyLAorKyAgICAweERGLCAweEE1LCAweEJFLCAw eEEwLCAweEE0LCAweDNDLCAweDU2LCAweEUzLAorIH07CisgCisgc3RhdGljIHVuc2lnbmVkIGNo YXIgb3V0X3BbXSA9IHsKKy0gICAgMHg4ZCwgMHhmMiwgMHhhNCwgMHg5NCwgMHg0OSwgMHgyMiwg MHg3NiwgMHhhYSwKKy0gICAgMHgzZCwgMHgyNSwgMHg3NSwgMHg5YiwgMHhiMCwgMHg2OCwgMHg2 OSwgMHhjYiwKKy0gICAgMHhlYSwgMHhjMCwgMHhkOCwgMHgzYSwgMHhmYiwgMHg4ZCwgMHgwYywg MHhmNywKKy0gICAgMHhjYiwgMHhiOCwgMHgzMiwgMHg0ZiwgMHgwZCwgMHg3OCwgMHg4MiwgMHhl NSwKKy0gICAgMHhkMCwgMHg3NiwgMHgyZiwgMHhjNSwgMHhiNywgMHgyMSwgMHgwZSwgMHhhZiwK Ky0gICAgMHhjMiwgMHhlOSwgMHhhZCwgMHhhYywgMHgzMiwgMHhhYiwgMHg3YSwgMHhhYywKKy0g ICAgMHg0OSwgMHg2OSwgMHgzZCwgMHhmYiwgMHhmOCwgMHgzNywgMHgyNCwgMHhjMiwKKy0gICAg MHhlYywgMHgwNywgMHgzNiwgMHhlZSwgMHgzMSwgMHhjOCwgMHgwMiwgMHg5MSwKKysgICAgMHhB QywgMHhDQiwgMHgxRSwgMHg2MywgMHg2MCwgMHg2OSwgMHgwQywgMHhGQiwgMHgwNiwgMHgxOSwg MHg2OCwgMHgzRSwKKysgICAgMHhBNSwgMHgwMSwgMHg1QSwgMHhBMiwgMHgxNSwgMHg1QywgMHhF MiwgMHg5OSwgMHgyRCwgMHhENSwgMHgzMCwgMHg5OSwKKysgICAgMHg3RSwgMHg1RiwgMHg4RCwg MHhFMiwgMHhGNywgMHhDNiwgMHgyRSwgMHg4RCwgMHhBMywgMHg5RiwgMHg1OCwgMHhBRCwKKysg ICAgMHhENiwgMHhBOSwgMHg3RCwgMHgwRSwgMHgwRCwgMHg5NSwgMHg1MywgMHhBNiwgMHg3MSwg MHgzQSwgMHhERSwgMHhBQiwKKysgICAgMHhBQywgMHhFOSwgMHhGNCwgMHgzNiwgMHg1NSwgMHg5 RSwgMHhCOSwgMHhENiwgMHg5MywgMHhCRiwgMHhGMywgMHgxOCwKKysgICAgMHgxQywgMHgxNCwg MHg3QiwgMHhBNSwgMHg0MiwgMHgyRSwgMHhDRCwgMHgwMCwgMHhFQiwgMHgzNSwgMHgzQiwgMHgx QiwKKysgICAgMHhBOCwgMHg1MSwgMHhCQiwgMHhFMSwgMHg1OCwgMHg0MiwgMHg4NSwgMHg4NCwg MHgyMiwgMHhBNywgMHg5NywgMHg1RSwKKysgICAgMHg5OSwgMHg2RiwgMHgzOCwgMHgyMCwgMHhC RCwgMHg5RCwgMHhCNiwgMHhEOSwgMHgzMywgMHgzNywgMHgyQSwgMHhGRCwKKysgICAgMHhCQiwg MHhENCwgMHhCQywgMHgwQywgMHgyQSwgMHg2NywgMHhDQiwgMHg5RiwgMHhCQiwgMHhERiwgMHhG OSwgMHg5MywKKysgICAgMHhBQSwgMHhENiwgMHhGMCwgMHhENiwgMHg5NSwgMHgwQiwgMHg1RCwg MHg2NSwgMHgxNCwgMHhEMCwgMHgxOCwgMHg5RCwKKysgICAgMHhDNiwgMHhBRiwgMHhGMCwgMHhD NiwgMHgzNywgMHg3QywgMHhGMywgMHg1RiwKKyB9OworIAorIHN0YXRpYyB1bnNpZ25lZCBjaGFy IG91dF9xW10gPSB7CistICAgIDB4YzcsIDB4NzMsIDB4MjEsIDB4OGMsIDB4NzMsIDB4N2UsIDB4 YzgsIDB4ZWUsCistICAgIDB4OTksIDB4M2IsIDB4NGYsIDB4MmQsIDB4ZWQsIDB4MzAsIDB4ZjQs IDB4OGUsCistICAgIDB4ZGEsIDB4Y2UsIDB4OTEsIDB4NWYsCisrICAgIDB4RTMsIDB4OEUsIDB4 NUUsIDB4NkQsIDB4QkYsIDB4MkIsIDB4NzksIDB4RjgsIDB4QzUsIDB4NEIsIDB4ODksIDB4OEIs CisrICAgIDB4QkEsIDB4MkQsIDB4OTEsIDB4QzMsIDB4NkMsIDB4ODAsIDB4QUMsIDB4ODcsCisg fTsKKyAKKyBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfZ1tdID0geworLSAgICAweDYyLCAweDZk LCAweDAyLCAweDc4LCAweDM5LCAweGVhLCAweDBhLCAweDEzLAorLSAgICAweDQxLCAweDMxLCAw eDYzLCAweGE1LCAweDViLCAweDRjLCAweGI1LCAweDAwLAorLSAgICAweDI5LCAweDlkLCAweDU1 LCAweDIyLCAweDk1LCAweDZjLCAweGVmLCAweGNiLAorLSAgICAweDNiLCAweGZmLCAweDEwLCAw eGYzLCAweDk5LCAweGNlLCAweDJjLCAweDJlLAorLSAgICAweDcxLCAweGNiLCAweDlkLCAweGU1 LCAweGZhLCAweDI0LCAweGJhLCAweGJmLAorLSAgICAweDU4LCAweGU1LCAweGI3LCAweDk1LCAw eDIxLCAweDkyLCAweDVjLCAweDljLAorLSAgICAweGM0LCAweDJlLCAweDlmLCAweDZmLCAweDQ2 LCAweDRiLCAweDA4LCAweDhjLAorLSAgICAweGM1LCAweDcyLCAweGFmLCAweDUzLCAweGU2LCAw eGQ3LCAweDg4LCAweDAyLAorKyAgICAweDQyLCAweDRBLCAweDA0LCAweDRFLCAweDc5LCAweEI0 LCAweDk5LCAweDdGLCAweEZELCAweDU4LCAweDM2LCAweDJDLAorKyAgICAweDFCLCAweDVGLCAw eDE4LCAweDdFLCAweDBELCAweENDLCAweEFCLCAweDgxLCAweEM5LCAweDVELCAweDEwLCAweENF LAorKyAgICAweDRFLCAweDgwLCAweDdFLCAweDU4LCAweEI0LCAweDM0LCAweDNGLCAweEE3LCAw eDQ1LCAweEM3LCAweEFBLCAweDM2LAorKyAgICAweDI0LCAweDQyLCAweEE5LCAweDNCLCAweEU4 LCAweDBFLCAweDA0LCAweDAyLCAweDJELCAweEZCLCAweEE2LCAweDEzLAorKyAgICAweEI5LCAw eEI1LCAweDE1LCAweEE1LCAweDU2LCAweDA3LCAweDM1LCAweEU0LCAweDAzLCAweEI2LCAweDc5 LCAweDdDLAorKyAgICAweDYyLCAweERELCAweERGLCAweDNGLCAweDcxLCAweDNBLCAweDlELCAw eDhCLCAweEM0LCAweEY2LCAweEU3LCAweDFELAorKyAgICAweDUyLCAweEE4LCAweEE5LCAweDQz LCAweDFELCAweDMzLCAweDUxLCAweDg4LCAweDM5LCAweEJELCAweDczLCAweEU5LAorKyAgICAw eDVGLCAweEJFLCAweDgyLCAweDQ5LCAweDI3LCAweEU2LCAweEI1LCAweDUzLCAweEMxLCAweDM4 LCAweEFDLCAweDJGLAorKyAgICAweDZELCAweDk3LCAweDZDLCAweEVCLCAweDY3LCAweEMxLCAw eDVGLCAweDY3LCAweEY4LCAweDM1LCAweDA1LCAweDVFLAorKyAgICAweEQ1LCAweDY4LCAweDgw LCAweEFBLCAweDk2LCAweENBLCAweDBCLCAweDhBLCAweEU2LCAweEYxLCAweEIxLCAweDQxLAor KyAgICAweEM2LCAweDc1LCAweDk0LCAweDBBLCAweDBBLCAweDJBLCAweEZBLCAweDI5LAorIH07 CisgCisgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3RyMVtdID0gIjEyMzQ1Njc4OTAxMjM0 NTY3ODkwIjsKK0BAIC0xNjIsNyArMTY3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQorICAgICBCSU9fcHJpbnRmKGJpb19lcnIsICJ0ZXN0IGdlbmVyYXRpb24gb2YgRFNBIHBh cmFtZXRlcnNcbiIpOworIAorICAgICBCTl9HRU5DQl9zZXQoJmNiLCBkc2FfY2IsIGJpb19lcnIp OworLSAgICBpZiAoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChkc2EsIDUxMiwKKysgICAgaWYgKCgoZHNhID0gRFNBX25ldygpKSA9PSBO VUxMKSB8fCAhRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzZWVkLCAyMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50ZXIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoLCAmY2IpKQor QEAgLTE3Niw4ICsxODEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAg IEJJT19wcmludGYoYmlvX2VyciwgIlxuY291bnRlcj0lZCBoPSVsZFxuIiwgY291bnRlciwgaCk7 CisgCisgICAgIERTQV9wcmludChiaW9fZXJyLCBkc2EsIDApOworLSAgICBpZiAoY291bnRlciAh PSAxMDUpIHsKKy0gICAgICAgIEJJT19wcmludGYoYmlvX2VyciwgImNvdW50ZXIgc2hvdWxkIGJl IDEwNVxuIik7CisrICAgIGlmIChjb3VudGVyICE9IDIzOSkgeworKyAgICAgICAgQklPX3ByaW50 ZihiaW9fZXJyLCAiY291bnRlciBzaG91bGQgYmUgMjM5XG4iKTsKKyAgICAgICAgIGdvdG8gZW5k OworICAgICB9CisgICAgIGlmIChoICE9IDIpIHsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2VuZ2luZS9l bmdfYWxsLmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5maXBz CTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NTk1NjI0NTggKzAx MDAKK0BAIC01OSwxMSArNTksMjUgQEAKKyAKKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5j bHVkZSAiZW5nX2ludC5oIgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVz KHZvaWQpCisgeworICAgICAvKiBTb21lIEVOR0lORXMgbmVlZCB0aGlzICovCisgICAgIE9QRU5T U0xfY3B1aWRfc2V0dXAoKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIE9QRU5TU0xfaW5p dF9saWJyYXJ5KCk7CisrICAgIGlmIChGSVBTX21vZGUoKSkgeworKyAgICAgICAgLyogV2UgYWxs b3cgbG9hZGluZyBkeW5hbWljIGVuZ2luZSBhcyBhIHRoaXJkIHBhcnR5CisrICAgICAgICAgICBl bmdpbmUgbWlnaHQgYmUgRklQUyB2YWxpZGF0ZWQuCisrICAgICAgICAgICBVc2VyIGlzIGRpc2Fs bG93ZWQgdG8gbG9hZCBub24tdmFsaWRhdGVkIGVuZ2luZXMKKysgICAgICAgICAgIGJ5IHNlY3Vy aXR5IHBvbGljeS4gKi8KKysgICAgICAgIEVOR0lORV9sb2FkX2R5bmFtaWMoKTsKKysgICAgICAg IHJldHVybjsKKysgICAgfQorKyNlbmRpZgorICNpZiAwCisgICAgIC8qCisgICAgICAqIFRoZXJl J3Mgbm8gbG9uZ2VyIGFueSBuZWVkIGZvciBhbiAib3BlbnNzbCIgRU5HSU5FIHVubGVzcywgb25l IGRheSwgaXQKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvY19hbGxjLmMuZmlw cyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2NfYWxsYy5jCistLS0gb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2V2cC9jX2FsbGMuYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDE1LTEyLTA0IDEz OjU1OjUxLjk1OTU2MjQ1OCArMDEwMAorQEAgLTY1LDYgKzY1LDEwIEBACisgdm9pZCBPcGVuU1NM X2FkZF9hbGxfY2lwaGVycyh2b2lkKQorIHsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAg IE9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrICAgIGlmICghRklQU19tb2RlKCkpIHsKKysjZW5k aWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCisgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNf Y2ZiKCkpOworICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NmYjEoKSk7CitAQCAtMjM4LDQg KzI0Miw2NCBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCisgICAgIEVWUF9h ZGRfY2lwaGVyX2FsaWFzKFNOX2NhbWVsbGlhXzI1Nl9jYmMsICJDQU1FTExJQTI1NiIpOworICAg ICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCAiY2FtZWxsaWEyNTYi KTsKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIH0gZWxzZSB7CisrIyBpZm5k ZWYgT1BFTlNTTF9OT19ERVMKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlX2Nm YigpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jZmIoKSk7CisrCisr ICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9vZmIoKSk7CisrICAgICAgICBFVlBf YWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkpOworKworKyAgICAgICAgRVZQX2FkZF9jaXBo ZXIoRVZQX2Rlc19lZGVfY2JjKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19l ZGUzX2NiYygpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2Ni YywgIkRFUzMiKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUzX2Ni YywgImRlczMiKTsKKysKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlKCkpOwor KyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzKCkpOworKyMgZW5kaWYKKysKKysj IGlmbmRlZiBPUEVOU1NMX05PX0FFUworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18x MjhfZWNiKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwor KyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiKCkpOworKyAgICAgICAgRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiMSgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMTI4X2NmYjgoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEy OF9vZmIoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jdHIoKSk7Cisr ICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7CisrICAgICAgICBFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzEyOF94dHMoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzEyOF9jY20oKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF93 cmFwKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsICJB RVMxMjgiKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCAi YWVzMTI4Iik7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7Cisr ICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jYmMoKSk7CisrICAgICAgICBFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzE5Ml9jZmIxKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJf Y2ZiOCgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX29mYigpKTsKKysg ICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2N0cigpKTsKKysgICAgICAgIEVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2djbSgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMTkyX2NjbSgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX3dy YXAoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywgIkFF UzE5MiIpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMsICJh ZXMxOTIiKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2VjYigpKTsKKysg ICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKKysgICAgICAgIEVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYigpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMjU2X2NmYjEoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9j ZmI4KCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfb2ZiKCkpOworKyAg ICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY3RyKCkpOworKyAgICAgICAgRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18yNTZfeHRzKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2Nt KCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfd3JhcCgpKTsKKysgICAg ICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCAiQUVTMjU2Iik7CisrICAg ICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywgImFlczI1NiIpOworKyMg ZW5kaWYKKysgICAgfQorKyNlbmRpZgorIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0 by9ldnAvY19hbGxkLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2NfYWxsZC5jCist LS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9jX2FsbGQuYy5maXBzCTIwMTUtMTItMDMgMTU6 MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9jX2Fs bGQuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MDU2MjQ4MiArMDEwMAorQEAgLTY0LDUxICs2NCw4 MSBAQAorIAorIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHModm9pZCkKKyB7CisrI2lmZGVm IE9QRU5TU0xfRklQUworKyAgICBPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKyAgICBpZiAoIUZJ UFNfbW9kZSgpKSB7CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX01ENAorLSAgICBFVlBf YWRkX2RpZ2VzdChFVlBfbWQ0KCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX21kNCgp KTsKKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1CistICAgIEVWUF9hZGRfZGlnZXN0 KEVWUF9tZDUoKSk7CistICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwgInNzbDItbWQ1 Iik7CistICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwgInNzbDMtbWQ1Iik7CisrICAg ICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfbWQ1KCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3Rf YWxpYXMoU05fbWQ1LCAic3NsMi1tZDUiKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFz KFNOX21kNSwgInNzbDMtbWQ1Iik7CisgI2VuZGlmCisgI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9f U0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTApCistICAgIEVWUF9hZGRfZGlnZXN0KEVW UF9zaGEoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhKCkpOworICMgaWZuZGVm IE9QRU5TU0xfTk9fRFNBCistICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9kc3MoKSk7CisrICAgICAg ICBFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOworICMgZW5kaWYKKyAjZW5kaWYKKyAjaWYgIWRl ZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkKKy0gICAg RVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7CistICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNO X3NoYTEsICJzc2wzLXNoYTEiKTsKKy0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdp dGhSU0FFbmNyeXB0aW9uLCBTTl9zaGExV2l0aFJTQSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2Vz dChFVlBfc2hhMSgpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsICJz c2wzLXNoYTEiKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNB RW5jcnlwdGlvbiwgU05fc2hhMVdpdGhSU0EpOworICMgaWZuZGVmIE9QRU5TU0xfTk9fRFNBCist ICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOworLSAgICBFVlBfYWRkX2RpZ2VzdF9hbGlh cyhTTl9kc2FXaXRoU0hBMSwgU05fZHNhV2l0aFNIQTFfMik7CistICAgIEVWUF9hZGRfZGlnZXN0 X2FsaWFzKFNOX2RzYVdpdGhTSEExLCAiRFNTMSIpOworLSAgICBFVlBfYWRkX2RpZ2VzdF9hbGlh cyhTTl9kc2FXaXRoU0hBMSwgImRzczEiKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9k c3MxKCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIFNO X2RzYVdpdGhTSEExXzIpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0 aFNIQTEsICJEU1MxIik7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRo U0hBMSwgImRzczEiKTsKKyAjIGVuZGlmCisgIyBpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorLSAg ICBFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChF VlBfZWNkc2EoKSk7CisgIyBlbmRpZgorICNlbmRpZgorICNpZiAhZGVmaW5lZChPUEVOU1NMX05P X01EQzIpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fREVTKQorLSAgICBFVlBfYWRkX2RpZ2VzdChF VlBfbWRjMigpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZGMyKCkpOworICNlbmRp ZgorICNpZm5kZWYgT1BFTlNTTF9OT19SSVBFTUQKKy0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX3Jp cGVtZDE2MCgpKTsKKy0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fcmlwZW1kMTYwLCAicmlw ZW1kIik7CistICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3JpcGVtZDE2MCwgInJtZDE2MCIp OworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3JpcGVtZDE2MCgpKTsKKysgICAgICAgIEVW UF9hZGRfZGlnZXN0X2FsaWFzKFNOX3JpcGVtZDE2MCwgInJpcGVtZCIpOworKyAgICAgICAgRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fcmlwZW1kMTYwLCAicm1kMTYwIik7CisgI2VuZGlmCisgI2lm bmRlZiBPUEVOU1NMX05PX1NIQTI1NgorLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkp OworLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOworKyAgICAgICAgRVZQX2FkZF9k aWdlc3QoRVZQX3NoYTIyNCgpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYo KSk7CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorLSAgICBFVlBfYWRkX2Rp Z2VzdChFVlBfc2hhMzg0KCkpOworLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkpOwor KyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKKysgICAgICAgIEVWUF9hZGRf ZGlnZXN0KEVWUF9zaGE1MTIoKSk7CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05PX1dISVJM UE9PTAorLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxwb29sKCkpOworKyAgICAgICAgRVZQ X2FkZF9kaWdlc3QoRVZQX3doaXJscG9vbCgpKTsKKysjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9G SVBTCisrICAgIH0gZWxzZSB7CisrIyBpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRl ZmluZWQoT1BFTlNTTF9OT19TSEExKQorKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEo KSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCAic3NsMy1zaGExIik7 CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVuY3J5cHRpb24s IFNOX3NoYTFXaXRoUlNBKTsKKysjICBpZm5kZWYgT1BFTlNTTF9OT19EU0EKKysgICAgICAgIEVW UF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMo U05fZHNhV2l0aFNIQTEsIFNOX2RzYVdpdGhTSEExXzIpOworKyAgICAgICAgRVZQX2FkZF9kaWdl c3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsICJEU1MxIik7CisrICAgICAgICBFVlBfYWRkX2RpZ2Vz dF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwgImRzczEiKTsKKysjICBlbmRpZgorKyMgIGlmbmRlZiBP UEVOU1NMX05PX0VDRFNBCisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7Cisr IyAgZW5kaWYKKysjIGVuZGlmCisrIyBpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKysgICAgICAg IEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChF VlBfc2hhMjU2KCkpOworKyMgZW5kaWYKKysjIGlmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgorKyAg ICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKKysgICAgICAgIEVWUF9hZGRfZGln ZXN0KEVWUF9zaGE1MTIoKSk7CisrIyBlbmRpZgorKyAgICB9CisgI2VuZGlmCisgfQorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9ldnAvZGlnZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2RpZ2Vz dC5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4yZS9jcnlwdG8vZXZwL2RpZ2VzdC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTYwNTYyNDgy ICswMTAwCitAQCAtMTQzLDE4ICsxNDMsNTUgQEAgaW50IEVWUF9EaWdlc3RJbml0KEVWUF9NRF9D VFggKmN0eCwgY29ucworICAgICByZXR1cm4gRVZQX0RpZ2VzdEluaXRfZXgoY3R4LCB0eXBlLCBO VUxMKTsKKyB9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIFRoZSBwdXJwb3NlIG9m IHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUwor KyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KKysgKi8K KysKKytzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9NRF9DVFggKmN0eCkKKyt7CisrICAgIEZJUFNf RVJST1JfSUdOT1JFRCgiRGlnZXN0IGluaXQiKTsKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0 YXRpYyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHNp emVfdCBjb3VudCkKKyt7CisrICAgIEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IHVwZGF0ZSIp OworKyAgICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBiYWRfZmluYWwoRVZQX01EX0NU WCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCkKKyt7CisrICAgIEZJUFNfRVJST1JfSUdOT1JFRCgi RGlnZXN0IEZpbmFsIik7CisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgY29uc3QgRVZQ X01EIGJhZF9tZCA9IHsKKysgICAgMCwKKysgICAgMCwKKysgICAgMCwKKysgICAgMCwKKysgICAg YmFkX2luaXQsCisrICAgIGJhZF91cGRhdGUsCisrICAgIGJhZF9maW5hbCwKKysgICAgTlVMTCwK KysgICAgTlVMTCwKKysgICAgTlVMTCwKKysgICAgMCwKKysgICAgezAsIDAsIDAsIDB9LAorK307 CisrCisrI2VuZGlmCisrCisgaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwg Y29uc3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCisgeworICAgICBFVlBfTURfQ1RYX2Ns ZWFyX2ZsYWdzKGN0eCwgRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOworICNpZmRlZiBPUEVOU1NM X0ZJUFMKKy0gICAgLyogSWYgRklQUyBtb2RlIHN3aXRjaCB0byBhcHByb3ZlZCBpbXBsZW1lbnRh dGlvbiBpZiBwb3NzaWJsZSAqLworLSAgICBpZiAoRklQU19tb2RlKCkpIHsKKy0gICAgICAgIGNv bnN0IEVWUF9NRCAqZmlwc21kOworLSAgICAgICAgaWYgKHR5cGUpIHsKKy0gICAgICAgICAgICBm aXBzbWQgPSBldnBfZ2V0X2ZpcHNfbWQodHlwZSk7CistICAgICAgICAgICAgaWYgKGZpcHNtZCkK Ky0gICAgICAgICAgICAgICAgdHlwZSA9IGZpcHNtZDsKKy0gICAgICAgIH0KKysgICAgaWYgKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0VWUF9ESUdF U1RJTklUX0VYLCBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgY3R4LT5k aWdlc3QgPSAmYmFkX21kOworKyAgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKyAjZW5kaWYKKyAj aWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitAQCAtMjEyLDYgKzI0OSwxNiBAQCBpbnQgRVZQX0Rp Z2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCisgICAgIH0KKyAjZW5kaWYKKyAgICAgaWYg KGN0eC0+ZGlnZXN0ICE9IHR5cGUpIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgICAgICBp ZiAoRklQU19tb2RlKCkpIHsKKysgICAgICAgICAgICBpZiAoISh0eXBlLT5mbGFncyAmIEVWUF9N RF9GTEFHX0ZJUFMpCisrICAgICAgICAgICAgICAgICYmICEoY3R4LT5mbGFncyAmIEVWUF9NRF9D VFhfRkxBR19OT05fRklQU19BTExPVykpIHsKKysgICAgICAgICAgICAgICAgRVZQZXJyKEVWUF9G X0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7CisrICAgICAgICAg ICAgICAgIGN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7 CisrICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyNlbmRpZgorICAgICAgICAgaWYgKGN0eC0+ ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKKyAgICAgICAgICAgICBPUEVOU1NMX2Zy ZWUoY3R4LT5tZF9kYXRhKTsKKyAgICAgICAgIGN0eC0+ZGlnZXN0ID0gdHlwZTsKK0BAIC0yMzYs MjUgKzI4MywxNSBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCisg ICAgIH0KKyAgICAgaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVCkKKyAg ICAgICAgIHJldHVybiAxOworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgaWYgKEZJUFNfbW9k ZSgpKSB7CistICAgICAgICBpZiAoRklQU19kaWdlc3Rpbml0KGN0eCwgdHlwZSkpCistICAgICAg ICAgICAgcmV0dXJuIDE7CistICAgICAgICBPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKy0g ICAgICAgIGN0eC0+bWRfZGF0YSA9IE5VTEw7CistICAgICAgICByZXR1cm4gMDsKKy0gICAgfQor LSNlbmRpZgorICAgICByZXR1cm4gY3R4LT5kaWdlc3QtPmluaXQoY3R4KTsKKyB9CisgCisgaW50 IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXpl X3QgY291bnQpCisgeworICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgcmV0dXJuIEZJUFNfZGln ZXN0dXBkYXRlKGN0eCwgZGF0YSwgY291bnQpOworLSNlbHNlCistICAgIHJldHVybiBjdHgtPnVw ZGF0ZShjdHgsIGRhdGEsIGNvdW50KTsKKysgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOworICNl bmRpZgorKyAgICByZXR1cm4gY3R4LT51cGRhdGUoY3R4LCBkYXRhLCBjb3VudCk7CisgfQorIAor IC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRh dGEgZnJvbSB0aGUgY29udGV4dCAqLworQEAgLTI2OSwxMSArMzA2LDExIEBAIGludCBFVlBfRGln ZXN0RmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnMKKyAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1bWUg dGhhdCB0aGlzIHJlbW92ZXMgYW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8KKyBp bnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQs IHVuc2lnbmVkIGludCAqc2l6ZSkKKyB7CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICByZXR1 cm4gRklQU19kaWdlc3RmaW5hbChjdHgsIG1kLCBzaXplKTsKKy0jZWxzZQorICAgICBpbnQgcmV0 OworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOwor KyNlbmRpZgorICAgICBPUEVOU1NMX2Fzc2VydChjdHgtPmRpZ2VzdC0+bWRfc2l6ZSA8PSBFVlBf TUFYX01EX1NJWkUpOworICAgICByZXQgPSBjdHgtPmRpZ2VzdC0+ZmluYWwoY3R4LCBtZCk7Cisg ICAgIGlmIChzaXplICE9IE5VTEwpCitAQCAtMjg0LDcgKzMyMSw2IEBAIGludCBFVlBfRGlnZXN0 RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LAorICAgICB9CisgICAgIG1lbXNldChjdHgtPm1kX2Rh dGEsIDAsIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7CisgICAgIHJldHVybiByZXQ7CistI2VuZGlm CisgfQorIAorIGludCBFVlBfTURfQ1RYX2NvcHkoRVZQX01EX0NUWCAqb3V0LCBjb25zdCBFVlBf TURfQ1RYICppbikKK0BAIC0zNzMsNyArNDA5LDYgQEAgdm9pZCBFVlBfTURfQ1RYX2Rlc3Ryb3ko RVZQX01EX0NUWCAqY3R4KQorIC8qIFRoaXMgY2FsbCBmcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRl ZCB3aXRoIHRoZSBjb250ZXh0ICovCisgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RY ICpjdHgpCisgeworLSNpZm5kZWYgT1BFTlNTTF9GSVBTCisgICAgIC8qCisgICAgICAqIERvbid0 IGFzc3VtZSBjdHgtPm1kX2RhdGEgd2FzIGNsZWFuZWQgaW4gRVZQX0RpZ2VzdF9GaW5hbCwgYmVj YXVzZQorICAgICAgKiBzb21ldGltZXMgb25seSBjb3BpZXMgb2YgdGhlIGNvbnRleHQgYXJlIGV2 ZXIgZmluYWxpc2VkLgorQEAgLTM4Niw3ICs0MjEsNiBAQCBpbnQgRVZQX01EX0NUWF9jbGVhbnVw KEVWUF9NRF9DVFggKmN0eCkKKyAgICAgICAgIE9QRU5TU0xfY2xlYW5zZShjdHgtPm1kX2RhdGEs IGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7CisgICAgICAgICBPUEVOU1NMX2ZyZWUoY3R4LT5tZF9k YXRhKTsKKyAgICAgfQorLSNlbmRpZgorICAgICBpZiAoY3R4LT5wY3R4KQorICAgICAgICAgRVZQ X1BLRVlfQ1RYX2ZyZWUoY3R4LT5wY3R4KTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitA QCAtMzk3LDkgKzQzMSw2IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4 KQorICAgICAgICAgICovCisgICAgICAgICBFTkdJTkVfZmluaXNoKGN0eC0+ZW5naW5lKTsKKyAj ZW5kaWYKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIEZJUFNfbWRfY3R4X2NsZWFudXAoY3R4 KTsKKy0jZW5kaWYKKyAgICAgbWVtc2V0KGN0eCwgJ1wwJywgc2l6ZW9mICpjdHgpOworIAorICAg ICByZXR1cm4gMTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZV9hZXMuYy5m aXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZV9hZXMuYworLS0tIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9ldnAvZV9hZXMuYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICsw MTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9lX2Flcy5jCTIwMTUtMTItMDQgMTM6 NTU6NTEuOTYwNTYyNDgyICswMTAwCitAQCAtNjAsOSArNjAsNiBAQAorICMgaW5jbHVkZSAibW9k ZXNfbGNsLmgiCisgIyBpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAKKy0jIHVuZGVmIEVWUF9D SVBIX0ZMQUdfRklQUworLSMgZGVmaW5lIEVWUF9DSVBIX0ZMQUdfRklQUyAwCistCisgdHlwZWRl ZiBzdHJ1Y3QgeworICAgICB1bmlvbiB7CisgICAgICAgICBkb3VibGUgYWxpZ247CitAQCAtMTE1 OSw2ICsxMTU2LDExIEBAIHN0YXRpYyBpbnQgYWVzX2djbV9jdHJsKEVWUF9DSVBIRVJfQ1RYICoK KyAgICAgY2FzZSBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOOgorICAgICAgICAgaWYgKGFyZyA8PSAw KQorICAgICAgICAgICAgIHJldHVybiAwOworKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgICAg ICBpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEoYy0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05P Tl9GSVBTX0FMTE9XKQorKyAgICAgICAgICAgICYmIGFyZyA8IDEyKQorKyAgICAgICAgICAgIHJl dHVybiAwOworKyMgZW5kaWYKKyAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgSVYgaWYg bmVlZGVkICovCisgICAgICAgICBpZiAoKGFyZyA+IEVWUF9NQVhfSVZfTEVOR1RIKSAmJiAoYXJn ID4gZ2N0eC0+aXZsZW4pKSB7CisgICAgICAgICAgICAgaWYgKGdjdHgtPml2ICE9IGMtPml2KQor QEAgLTE3MjcsNiArMTcyOSwxNCBAQCBzdGF0aWMgaW50IGFlc194dHNfY2lwaGVyKEVWUF9DSVBI RVJfQ1RYCisgICAgICAgICByZXR1cm4gMDsKKyAgICAgaWYgKCFvdXQgfHwgIWluIHx8IGxlbiA8 IEFFU19CTE9DS19TSVpFKQorICAgICAgICAgcmV0dXJuIDA7CisrIyBpZmRlZiBPUEVOU1NMX0ZJ UFMKKysgICAgLyogUmVxdWlyZW1lbnQgb2YgU1A4MDAtMzhFICovCisrICAgIGlmIChGSVBTX21v ZHVsZV9tb2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExP VykgJiYKKysgICAgICAgIChsZW4gPiAoMVVMIDw8IDIwKSAqIDE2KSkgeworKyAgICAgICAgRVZQ ZXJyKEVWUF9GX0FFU19YVFNfQ0lQSEVSLCBFVlBfUl9UT09fTEFSR0UpOworKyAgICAgICAgcmV0 dXJuIDA7CisrICAgIH0KKysjIGVuZGlmCisgICAgIGlmICh4Y3R4LT5zdHJlYW0pCisgICAgICAg ICAoKnhjdHgtPnN0cmVhbSkgKGluLCBvdXQsIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgeGN0eC0+eHRzLmtleTEsIHhjdHgtPnh0cy5rZXkyLCBjdHgtPml2KTsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vZXZwL2VfZGVzMy5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9lX2RlczMuYy5m aXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MDU2MjQ4MiArMDEw MAorQEAgLTY1LDEwICs2NSw2IEBACisgIyBpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorICMgaW5j bHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgCistLyogQmxvY2sgdXNlIG9mIGltcGxlbWVudGF0aW9u cyBpbiBGSVBTIG1vZGUgKi8KKy0jIHVuZGVmIEVWUF9DSVBIX0ZMQUdfRklQUworLSMgZGVmaW5l IEVWUF9DSVBIX0ZMQUdfRklQUyAgICAgIDAKKy0KKyB0eXBlZGVmIHN0cnVjdCB7CisgICAgIHVu aW9uIHsKKyAgICAgICAgIGRvdWJsZSBhbGlnbjsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2VfbnVsbC5j CistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIwMTUtMTItMDMg MTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9l X251bGwuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MDU2MjQ4MiArMDEwMAorQEAgLTY4LDcgKzY4 LDcgQEAgc3RhdGljIGludCBudWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqYworIHN0YXRpYyBj b25zdCBFVlBfQ0lQSEVSIG5fY2lwaGVyID0geworICAgICBOSURfdW5kZWYsCisgICAgIDEsIDAs IDAsCistICAgIDAsCisrICAgIEVWUF9DSVBIX0ZMQUdfRklQUywKKyAgICAgbnVsbF9pbml0X2tl eSwKKyAgICAgbnVsbF9jaXBoZXIsCisgICAgIE5VTEwsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4y ZS9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZXZw X2VuYy5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcwkyMDE1 LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0 by9ldnAvZXZwX2VuYy5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTYxNTYyNTA1ICswMTAwCitAQCAt NjksMTYgKzY5LDczIEBACisgI2VuZGlmCisgI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCistI2lm ZGVmIE9QRU5TU0xfRklQUworLSMgZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5s KSBGSVBTX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkKKy0jZWxzZQorLSMgZGVmaW5lIE1fZG9f Y2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCwgb3V0 LCBpbiwgaW5sKQorLSNlbmRpZgorKyNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBp bmwpIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpCisgCisgY29uc3Qg Y2hhciBFVlBfdmVyc2lvbltdID0gIkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFw IHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKKysgKiBhbGdvcml0aG1zIGlu IEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCisrICovCisrCisrc3RhdGljIGludCBi YWRfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisr ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKKyt7 CisrICAgIEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGluaXQiKTsKKysgICAgcmV0dXJuIDA7 CisrfQorKworK3N0YXRpYyBpbnQgYmFkX2RvX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1 bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorK3sKKysgICAgRklQU19FUlJPUl9JR05P UkVEKCJDaXBoZXIgdXBkYXRlIik7CisrICAgIHJldHVybiAwOworK30KKysKKysvKiBOQjogbm8g Y2xlYW51cCBiZWNhdXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KKysKKytz dGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5 cCkKKyt7CisrICAgIEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHNldF9hc24xIik7CisrICAg IHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGJhZF9nZXRfYXNuMShFVlBfQ0lQSEVSX0NU WCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKKyt7CisrICAgIEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lw aGVyIGdldF9hc24xIik7CisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGJhZF9j dHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIpCisr eworKyAgICBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7CisrICAgIHJldHVybiAw OworK30KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0geworKyAgICAw LAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICBiYWRfaW5pdCwKKysg ICAgYmFkX2RvX2NpcGhlciwKKysgICAgTlVMTCwKKysgICAgMCwKKysgICAgYmFkX3NldF9hc24x LAorKyAgICBiYWRfZ2V0X2FzbjEsCisrICAgIGJhZF9jdHJsLAorKyAgICBOVUxMCisrfTsKKysK KysjZW5kaWYKKysKKyB2b2lkIEVWUF9DSVBIRVJfQ1RYX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0 eCkKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7 CisrI2VuZGlmCisgICAgIG1lbXNldChjdHgsIDAsIHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOwor ICAgICAvKiBjdHgtPmNpcGhlcj1OVUxMOyAqLworIH0KK0BAIC0xMTAsNiArMTY3LDEzIEBAIGlu dCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAgICAgICAgICAgICBlbmMg PSAxOworICAgICAgICAgY3R4LT5lbmNyeXB0ID0gZW5jOworICAgICB9CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgRklQ U2VycihGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgsIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxF RCk7CisrICAgICAgICBjdHgtPmNpcGhlciA9ICZiYWRfY2lwaGVyOworKyAgICAgICAgcmV0dXJu IDA7CisrICAgIH0KKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgICAgIC8q CisgICAgICAqIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBv biAiRmluYWwiJ2QgY29udGV4dHMgc28KK0BAIC0xNjgsMTYgKzIzMiw2IEBAIGludCBFVlBfQ2lw aGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAgICAgICAgICAgICBjdHgtPmVuZ2luZSA9 IE5VTEw7CisgI2VuZGlmCisgCistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICAgICAgaWYgKEZJ UFNfbW9kZSgpKSB7CistICAgICAgICAgICAgY29uc3QgRVZQX0NJUEhFUiAqZmNpcGhlcjsKKy0g ICAgICAgICAgICBpZiAoY2lwaGVyKQorLSAgICAgICAgICAgICAgICBmY2lwaGVyID0gZXZwX2dl dF9maXBzX2NpcGhlcihjaXBoZXIpOworLSAgICAgICAgICAgIGlmIChmY2lwaGVyKQorLSAgICAg ICAgICAgICAgICBjaXBoZXIgPSBmY2lwaGVyOworLSAgICAgICAgICAgIHJldHVybiBGSVBTX2Np cGhlcmluaXQoY3R4LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7CistICAgICAgICB9CistI2VuZGlm CisgICAgICAgICBjdHgtPmNpcGhlciA9IGNpcGhlcjsKKyAgICAgICAgIGlmIChjdHgtPmNpcGhl ci0+Y3R4X3NpemUpIHsKKyAgICAgICAgICAgICBjdHgtPmNpcGhlcl9kYXRhID0gT1BFTlNTTF9t YWxsb2MoY3R4LT5jaXBoZXItPmN0eF9zaXplKTsKK0BAIC0yMDQsMTAgKzI1OCw2IEBAIGludCBF VlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAjaWZuZGVmIE9QRU5TU0xfTk9f RU5HSU5FCisgIHNraXBfdG9faW5pdDoKKyAjZW5kaWYKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCist ICAgIGlmIChGSVBTX21vZGUoKSkKKy0gICAgICAgIHJldHVybiBGSVBTX2NpcGhlcmluaXQoY3R4 LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7CistI2VuZGlmCisgICAgIC8qIHdlIGFzc3VtZSBibG9j ayBzaXplIGlzIGEgcG93ZXIgb2YgMiBpbiAqY3J5cHRVcGRhdGUgKi8KKyAgICAgT1BFTlNTTF9h c3NlcnQoY3R4LT5jaXBoZXItPmJsb2NrX3NpemUgPT0gMQorICAgICAgICAgICAgICAgICAgICB8 fCBjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSA4CitAQCAtMjUzLDYgKzMwMywxOSBAQCBpbnQg RVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0CisgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICB9CisgICAgIH0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIC8qIEFmdGVy ICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFtZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlzc2li bGUuCisrICAgICAqIFNvIG9ubHkgY2hlY2sgZm9yIG5vbiBGSVBTIGVuYWJsaW5nIGF0IHRoaXMg cG9pbnQuCisrICAgICAqLworKyAgICBpZiAoa2V5ICYmIEZJUFNfbW9kZSgpKSB7CisrICAgICAg ICBpZiAoIShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrICAgICAg ICAgICAgJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkgewor KyAgICAgICAgICAgIEVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElTQUJM RURfRk9SX0ZJUFMpOworKyAgICAgICAgICAgIGN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Cisr ICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyAKKyAg ICAgaWYgKGtleSB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExf SU5JVCkpIHsKKyAgICAgICAgIGlmICghY3R4LT5jaXBoZXItPmluaXQoY3R4LCBrZXksIGl2LCBl bmMpKQorQEAgLTU1NCw3ICs2MTcsNiBAQCB2b2lkIEVWUF9DSVBIRVJfQ1RYX2ZyZWUoRVZQX0NJ UEhFUl9DVFgKKyAKKyBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAq YykKKyB7CistI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKyAgICAgaWYgKGMtPmNpcGhlciAhPSBOVUxM KSB7CisgICAgICAgICBpZiAoYy0+Y2lwaGVyLT5jbGVhbnVwICYmICFjLT5jaXBoZXItPmNsZWFu dXAoYykpCisgICAgICAgICAgICAgcmV0dXJuIDA7CitAQCAtNTY0LDcgKzYyNiw2IEBAIGludCBF VlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1QKKyAgICAgfQorICAgICBpZiAoYy0+ Y2lwaGVyX2RhdGEpCisgICAgICAgICBPUEVOU1NMX2ZyZWUoYy0+Y2lwaGVyX2RhdGEpOworLSNl bmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAgICAgaWYgKGMtPmVuZ2luZSkKKyAg ICAgICAgIC8qCitAQCAtNTczLDkgKzYzNCw2IEBAIGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVw KEVWUF9DSVBIRVJfQ1QKKyAgICAgICAgICAqLworICAgICAgICAgRU5HSU5FX2ZpbmlzaChjLT5l bmdpbmUpOworICNlbmRpZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgRklQU19jaXBoZXJf Y3R4X2NsZWFudXAoYyk7CistI2VuZGlmCisgICAgIG1lbXNldChjLCAwLCBzaXplb2YoRVZQX0NJ UEhFUl9DVFgpKTsKKyAgICAgcmV0dXJuIDE7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZXZwLmgKKy0t LSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2V2cC5oLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1 MS44NTU1NjAwMzMgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2V2cC5oCTIw MTUtMTItMDQgMTM6NTU6NTEuOTYxNTYyNTA1ICswMTAwCitAQCAtMTIyLDYgKzEyMiwxMCBAQAor IGV4dGVybiAiQyIgeworICNlbmRpZgorIAorKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrIyAgaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrIyBlbmRpZgorKworIC8qCisgICogVHlwZSBuZWVkcyB0 byBiZSBhIGJpdCBmaWVsZCBTdWItdHlwZSBuZWVkcyB0byBiZSBmb3IgdmFyaWF0aW9ucyBvbiB0 aGUKKyAgKiBtZXRob2QsIGFzIGluLCBjYW4gaXQgZG8gYXJiaXRyYXJ5IGVuY3J5cHRpb24uLi4u CitAQCAtMjg1LDExICsyODksNiBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdCB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjbGVhbmVkICovCisgIyBk ZWZpbmUgRVZQX01EX0NUWF9GTEFHX1JFVVNFICAgICAgICAgICAweDAwMDQvKiBEb24ndCBmcmVl IHVwIGN0eC0+bWRfZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICogaW4gRVZQX01EX0NUWF9jbGVhbnVwICovCistLyoKKy0gKiBGSVBTIGFuZCBw YWQgb3B0aW9ucyBhcmUgaWdub3JlZCBpbiAxLjAuMCwgZGVmaW5pdGlvbnMgYXJlIGhlcmUgc28g d2UKKy0gKiBkb24ndCBhY2NpZGVudGFsbHkgcmV1c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIgcHVy cG9zZXMuCistICovCistCisgIyBkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9X ICAweDAwMDgvKiBBbGxvdyB1c2Ugb2Ygbm9uIEZJUFMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRpZ2VzdCBpbiBGSVBTIG1vZGUgKi8KKyAKK0BA IC0zMDIsNiArMzAxLDEwIEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0IHsKKyAjIGRlZmluZSBFVlBf TURfQ1RYX0ZMQUdfUEFEX1BLQ1MxICAgICAgIDB4MDAvKiBQS0NTIzEgdjEuNSBtb2RlICovCisg IyBkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxICAgICAgICAweDEwLyogWDkuMzEgbW9k ZSAqLworICMgZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTICAgICAgICAgMHgyMC8qIFBT UyBtb2RlICovCisrIyBkZWZpbmUgTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KSBcCisr ICAgICAgICAgICAgICAgICgoY3R4LT5mbGFncz4+MTYpICYweEZGRkYpIC8qIHNlZWQgbGVuZ3Ro ICovCisrIyBkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTiAgICAgICAweEZGRkYvKiBz YWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLworKyMgZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1Nf TVJFQyAgICAgICAgMHhGRkZFLyogc2FsdCBtYXggb3IgYXV0byByZWNvdmVyZWQgKi8KKyAKKyAj IGRlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVCAgICAgICAgIDB4MDEwMC8qIERvbid0IGlu aXRpYWxpemUgbWRfZGF0YSAqLworIAorQEAgLTM2MywxNSArMzY2LDE1IEBAIHN0cnVjdCBldnBf Y2lwaGVyX3N0IHsKKyAvKiBjaXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRpb24gKi8K KyAjIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX1JBTkRfS0VZICAgICAgICAgICAgICAgMHgyMDAK KyAvKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICovCistIyBk ZWZpbmUgICAgICAgICBFVlBfQ0lQSF9DVVNUT01fQ09QWSAgICAgICAgICAgIDB4NDAwCisrIyBk ZWZpbmUgICAgICAgICBFVlBfQ0lQSF9DVVNUT01fQ09QWSAgICAgICAgICAgIDB4NDAwMAorIC8q IEFsbG93IHVzZSBkZWZhdWx0IEFTTjEgZ2V0L3NldCBpdiAqLworICMgZGVmaW5lICAgICAgICAg RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEgICAgICAweDEwMDAKKyAvKiBCdWZmZXIgbGVuZ3Ro IGluIGJpdHMgbm90IGJ5dGVzOiBDRkIxIG1vZGUgb25seSAqLworICMgZGVmaW5lICAgICAgICAg RVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyAgICAgICAweDIwMDAKKyAvKiBOb3RlIGlmIHN1aXRh YmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCistIyBkZWZpbmUgICAgICAgICBFVlBfQ0lQSF9G TEFHX0ZJUFMgICAgICAgICAgICAgIDB4NDAwMAorKyMgZGVmaW5lICAgICAgICAgRVZQX0NJUEhf RkxBR19GSVBTICAgICAgICAgICAgICAweDQwMAorIC8qIEFsbG93IG5vbiBGSVBTIGNpcGhlciBp biBGSVBTIG1vZGUgKi8KKy0jIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNf QUxMT1cgICAgMHg4MDAwCisrIyBkZWZpbmUgICAgICAgICBFVlBfQ0lQSF9GTEFHX05PTl9GSVBT X0FMTE9XICAgIDB4ODAwCisgLyoKKyAgKiBDaXBoZXIgaGFuZGxlcyBhbnkgYW5kIGFsbCBwYWRk aW5nIGxvZ2ljIGFzIHdlbGwgYXMgZmluYWxpc2F0aW9uLgorICAqLworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v ZXZwL2V2cF9saWIuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZp cHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4y ZS9jcnlwdG8vZXZwL2V2cF9saWIuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2MTU2MjUwNSArMDEw MAorQEAgLTYwLDEwICs2MCw2IEBACisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorLSNpZmRlZiBP UEVOU1NMX0ZJUFMKKy0jIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorLSMgaW5jbHVkZSAiZXZw X2xvY2wuaCIKKy0jZW5kaWYKKyAKKyBpbnQgRVZQX0NJUEhFUl9wYXJhbV90b19hc24xKEVWUF9D SVBIRVJfQ1RYICpjLCBBU04xX1RZUEUgKnR5cGUpCisgeworQEAgLTIyNCw2ICsyMjAsOSBAQCBp bnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZShjb25zdCBFVlBfCisgaW50IEVWUF9DaXBoZXIo RVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorIHsKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAgICAg cmV0dXJuIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpOworIH0KKyAK K0BAIC0yMzQsMjIgKzIzMywxMiBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfQ0lQSEVSX0NUWF9j aXBoZXIoCisgCisgdW5zaWduZWQgbG9uZyBFVlBfQ0lQSEVSX2ZsYWdzKGNvbnN0IEVWUF9DSVBI RVIgKmNpcGhlcikKKyB7CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBjb25zdCBFVlBfQ0lQ SEVSICpmY2lwaGVyOworLSAgICBmY2lwaGVyID0gZXZwX2dldF9maXBzX2NpcGhlcihjaXBoZXIp OworLSAgICBpZiAoZmNpcGhlciAmJiBmY2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfRklQ UykKKy0gICAgICAgIHJldHVybiBjaXBoZXItPmZsYWdzIHwgRVZQX0NJUEhfRkxBR19GSVBTOwor LSNlbmRpZgorICAgICByZXR1cm4gY2lwaGVyLT5mbGFnczsKKyB9CisgCisgdW5zaWduZWQgbG9u ZyBFVlBfQ0lQSEVSX0NUWF9mbGFncyhjb25zdCBFVlBfQ0lQSEVSX0NUWCAqY3R4KQorIHsKKy0j aWZkZWYgT1BFTlNTTF9GSVBTCistICAgIHJldHVybiBFVlBfQ0lQSEVSX2ZsYWdzKGN0eC0+Y2lw aGVyKTsKKy0jZWxzZQorICAgICByZXR1cm4gY3R4LT5jaXBoZXItPmZsYWdzOworLSNlbmRpZgor IH0KKyAKKyB2b2lkICpFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGEoY29uc3QgRVZQX0NJUEhF Ul9DVFggKmN0eCkKK0BAIC0zMTYsNDAgKzMwNSw4IEBAIGludCBFVlBfTURfc2l6ZShjb25zdCBF VlBfTUQgKm1kKQorICAgICByZXR1cm4gbWQtPm1kX3NpemU7CisgfQorIAorLSNpZmRlZiBPUEVO U1NMX0ZJUFMKKy0KKy1jb25zdCBFVlBfTUQgKmV2cF9nZXRfZmlwc19tZChjb25zdCBFVlBfTUQg Km1kKQorLXsKKy0gICAgaW50IG5pZCA9IEVWUF9NRF90eXBlKG1kKTsKKy0gICAgaWYgKG5pZCA9 PSBOSURfZHNhKQorLSAgICAgICAgcmV0dXJuIEZJUFNfZXZwX2RzczEoKTsKKy0gICAgZWxzZSBp ZiAobmlkID09IE5JRF9kc2FXaXRoU0hBKQorLSAgICAgICAgcmV0dXJuIEZJUFNfZXZwX2Rzcygp OworLSAgICBlbHNlIGlmIChuaWQgPT0gTklEX2VjZHNhX3dpdGhfU0hBMSkKKy0gICAgICAgIHJl dHVybiBGSVBTX2V2cF9lY2RzYSgpOworLSAgICBlbHNlCistICAgICAgICByZXR1cm4gRklQU19n ZXRfZGlnZXN0YnluaWQobmlkKTsKKy19CistCistY29uc3QgRVZQX0NJUEhFUiAqZXZwX2dldF9m aXBzX2NpcGhlcihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIpCisteworLSAgICBpbnQgbmlkID0g Y2lwaGVyLT5uaWQ7CistICAgIGlmIChuaWQgPT0gTklEX3VuZGVmKQorLSAgICAgICAgcmV0dXJu IEZJUFNfZXZwX2VuY19udWxsKCk7CistICAgIGVsc2UKKy0gICAgICAgIHJldHVybiBGSVBTX2dl dF9jaXBoZXJieW5pZChuaWQpOworLX0KKy0KKy0jZW5kaWYKKy0KKyB1bnNpZ25lZCBsb25nIEVW UF9NRF9mbGFncyhjb25zdCBFVlBfTUQgKm1kKQorIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCist ICAgIGNvbnN0IEVWUF9NRCAqZm1kOworLSAgICBmbWQgPSBldnBfZ2V0X2ZpcHNfbWQobWQpOwor LSAgICBpZiAoZm1kICYmIGZtZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKQorLSAgICAgICAg cmV0dXJuIG1kLT5mbGFncyB8IEVWUF9NRF9GTEFHX0ZJUFM7CistI2VuZGlmCisgICAgIHJldHVy biBtZC0+ZmxhZ3M7CisgfQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9l dnBfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCistLS0g b3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMJMjAxNS0xMi0wNCAxMzo1 NTo1MS44NTE1NTk5NDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2V2cF9s b2NsLmgJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjE1NjI1MDUgKzAxMDAKK0BAIC0yNTgsMTAgKzI1 OCw4IEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF8jI2NuYW1lIyNfZWNiKHZvaWQKKyAgICAgICAg IEJMT0NLX0NJUEhFUl9mdW5jX2NmYihjaXBoZXIjI18jI2tleXNpemUsY3ByZWZpeCxjYml0cyxr c3RydWN0LGtzY2hlZCkgXAorICAgICAgICAgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNf IyNrZXlzaXplLGtzdHJ1Y3QsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JRF8j I2NpcGhlciMjXyMja2V5c2l6ZSwga2V5c2l6ZS84LCBpdl9sZW4sIGNiaXRzLCBcCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgXAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwgXAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLCBcCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKyAK KyBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0IHsKKyAgICAgLyogTWV0aG9kIGFzc29jaWF0ZWQgd2l0 aCB0aGlzIG9wZXJhdGlvbiAqLworQEAgLTM1NSwxMSArMzUzLDYgQEAgY29uc3QgRVZQX0NJUEhF UiAqZXZwX2dldF9maXBzX2NpcGhlcihjbworICMgZGVmaW5lIE1EMl9Jbml0ICAgICAgICBwcml2 YXRlX01EMl9Jbml0CisgIyBkZWZpbmUgTURDMl9Jbml0ICAgICAgIHByaXZhdGVfTURDMl9Jbml0 CisgIyBkZWZpbmUgU0hBX0luaXQgICAgICAgIHByaXZhdGVfU0hBX0luaXQKKy0jIGRlZmluZSBT SEExX0luaXQgICAgICAgcHJpdmF0ZV9TSEExX0luaXQKKy0jIGRlZmluZSBTSEEyMjRfSW5pdCAg ICAgcHJpdmF0ZV9TSEEyMjRfSW5pdAorLSMgZGVmaW5lIFNIQTI1Nl9Jbml0ICAgICBwcml2YXRl X1NIQTI1Nl9Jbml0CistIyBkZWZpbmUgU0hBMzg0X0luaXQgICAgIHByaXZhdGVfU0hBMzg0X0lu aXQKKy0jIGRlZmluZSBTSEE1MTJfSW5pdCAgICAgcHJpdmF0ZV9TSEE1MTJfSW5pdAorIAorICMg ZGVmaW5lIEJGX3NldF9rZXkgICAgICBwcml2YXRlX0JGX3NldF9rZXkKKyAjIGRlZmluZSBDQVNU X3NldF9rZXkgICAgcHJpdmF0ZV9DQVNUX3NldF9rZXkKK0BAIC0zNjcsNyArMzYwLDYgQEAgY29u c3QgRVZQX0NJUEhFUiAqZXZwX2dldF9maXBzX2NpcGhlcihjbworICMgZGVmaW5lIFNFRURfc2V0 X2tleSAgICBwcml2YXRlX1NFRURfc2V0X2tleQorICMgZGVmaW5lIFJDMl9zZXRfa2V5ICAgICBw cml2YXRlX1JDMl9zZXRfa2V5CisgIyBkZWZpbmUgUkM0X3NldF9rZXkgICAgIHByaXZhdGVfUkM0 X3NldF9rZXkKKy0jIGRlZmluZSBERVNfc2V0X2tleV91bmNoZWNrZWQgICBwcml2YXRlX0RFU19z ZXRfa2V5X3VuY2hlY2tlZAorICMgZGVmaW5lIENhbWVsbGlhX3NldF9rZXkgICAgICAgIHByaXZh dGVfQ2FtZWxsaWFfc2V0X2tleQorIAorICNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9tX2Rzcy5j CistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAxNS0xMi0wMyAx NTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL21f ZHNzLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjE1NjI1MDUgKzAxMDAKK0BAIC04Niw3ICs4Niw3 IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNhX21kID0geworICAgICBOSURfZHNhV2l0aFNIQSwK KyAgICAgTklEX2RzYVdpdGhTSEEsCisgICAgIFNIQV9ESUdFU1RfTEVOR1RILAorLSAgICBFVlBf TURfRkxBR19QS0VZX0RJR0VTVCwKKysgICAgRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QgfCBFVlBf TURfRkxBR19GSVBTLAorICAgICBpbml0LAorICAgICB1cGRhdGUsCisgICAgIGZpbmFsLAorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzIG9wZW5zc2wtMS4w LjJlL2NyeXB0by9ldnAvbV9kc3MxLmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL21f ZHNzMS5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4yZS9jcnlwdG8vZXZwL21fZHNzMS5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTYxNTYy NTA1ICswMTAwCitAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzczFfbWQg PSB7CisgICAgIE5JRF9kc2EsCisgICAgIE5JRF9kc2FXaXRoU0hBMSwKKyAgICAgU0hBX0RJR0VT VF9MRU5HVEgsCistICAgIEVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAorKyAgICBFVlBfTURfRkxB R19QS0VZX0RJR0VTVCB8IEVWUF9NRF9GTEFHX0ZJUFMsCisgICAgIGluaXQsCisgICAgIHVwZGF0 ZSwKKyAgICAgZmluYWwsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL21fbWQy LmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL21fbWQyLmMKKy0tLSBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvbV9tZDIuYwkyMDE1LTEyLTA0 IDEzOjU1OjUxLjk2MjU2MjUyOSArMDEwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyAjIGlmbmRlZiBP UEVOU1NMX05PX1JTQQorICMgIGluY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgIyBlbmRpZgorKyMg aW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4 KQorIHsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcyBv cGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL21fc2hhMS5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL2V2cC9tX3NoYTEuYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9tX3NoYTEuYwkyMDE1LTEyLTA0IDEzOjU1 OjUxLjk2MjU2MjUyOSArMDEwMAorQEAgLTg3LDcgKzg3LDggQEAgc3RhdGljIGNvbnN0IEVWUF9N RCBzaGExX21kID0geworICAgICBOSURfc2hhMSwKKyAgICAgTklEX3NoYTFXaXRoUlNBRW5jcnlw dGlvbiwKKyAgICAgU0hBX0RJR0VTVF9MRU5HVEgsCistICAgIEVWUF9NRF9GTEFHX1BLRVlfTUVU SE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysgICAgRVZQX01E X0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5U IHwKKysgICAgICAgIEVWUF9NRF9GTEFHX0ZJUFMsCisgICAgIGluaXQsCisgICAgIHVwZGF0ZSwK KyAgICAgZmluYWwsCitAQCAtMTM0LDcgKzEzNSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hh MjI0X21kID0geworICAgICBOSURfc2hhMjI0LAorICAgICBOSURfc2hhMjI0V2l0aFJTQUVuY3J5 cHRpb24sCisgICAgIFNIQTIyNF9ESUdFU1RfTEVOR1RILAorLSAgICBFVlBfTURfRkxBR19QS0VZ X01FVEhPRF9TSUdOQVRVUkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrICAgIEVW UF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVCB8CisrICAgICAgICBFVlBfTURfRkxBR19GSVBTLAorICAgICBpbml0MjI0LAorICAgICB1 cGRhdGUyNTYsCisgICAgIGZpbmFsMjU2LAorQEAgLTE1NCw3ICsxNTYsOCBAQCBzdGF0aWMgY29u c3QgRVZQX01EIHNoYTI1Nl9tZCA9IHsKKyAgICAgTklEX3NoYTI1NiwKKyAgICAgTklEX3NoYTI1 NldpdGhSU0FFbmNyeXB0aW9uLAorICAgICBTSEEyNTZfRElHRVNUX0xFTkdUSCwKKy0gICAgRVZQ X01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJT RU5ULAorKyAgICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUgfCBFVlBfTURfRkxB R19ESUdBTEdJRF9BQlNFTlQgfAorKyAgICAgICAgRVZQX01EX0ZMQUdfRklQUywKKyAgICAgaW5p dDI1NiwKKyAgICAgdXBkYXRlMjU2LAorICAgICBmaW5hbDI1NiwKK0BAIC0xOTcsNyArMjAwLDgg QEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEzODRfbWQgPSB7CisgICAgIE5JRF9zaGEzODQsCisg ICAgIE5JRF9zaGEzODRXaXRoUlNBRW5jcnlwdGlvbiwKKyAgICAgU0hBMzg0X0RJR0VTVF9MRU5H VEgsCistICAgIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFH X0RJR0FMR0lEX0FCU0VOVCwKKysgICAgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJF IHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UIHwKKysgICAgICAgIEVWUF9NRF9GTEFHX0ZJ UFMsCisgICAgIGluaXQzODQsCisgICAgIHVwZGF0ZTUxMiwKKyAgICAgZmluYWw1MTIsCitAQCAt MjE3LDcgKzIyMSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEyX21kID0geworICAgICBO SURfc2hhNTEyLAorICAgICBOSURfc2hhNTEyV2l0aFJTQUVuY3J5cHRpb24sCisgICAgIFNIQTUx Ml9ESUdFU1RfTEVOR1RILAorLSAgICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUg fCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrICAgIEVWUF9NRF9GTEFHX1BLRVlfTUVU SE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCB8CisrICAgICAgICBF VlBfTURfRkxBR19GSVBTLAorICAgICBpbml0NTEyLAorICAgICB1cGRhdGU1MTIsCisgICAgIGZp bmFsNTEyLAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBz IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvcF9zaWduLmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL3Bfc2lnbi5jCTIwMTUtMTItMDQgMTM6 NTU6NTEuOTYyNTYyNTI5ICswMTAwCitAQCAtNjEsNiArNjEsNyBAQAorICNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3Bl bnNzbC94NTA5Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgCisgI2lmZGVmIHVuZGVm Cisgdm9pZCBFVlBfU2lnbkluaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfTUQgKnR5cGUpCitAQCAt MTAxLDYgKzEwMiwyMiBAQCBpbnQgRVZQX1NpZ25GaW5hbChFVlBfTURfQ1RYICpjdHgsIHVuc2ln CisgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICBpZiAoRVZQX1BLRVlfQ1RYX3NldF9z aWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorICAgICAgICAgICAgIGdvdG8g ZXJyOworKyAgICAgICAgaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEp CisrICAgICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJT QV9YOTMxX1BBRERJTkcpIDw9IDApCisrICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAg ICAgaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykgeworKyAgICAgICAg ICAgIGludCBzYWx0bGVuOworKyAgICAgICAgICAgIGlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9w YWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9CisrICAgICAgICAgICAgICAg IDApCisrICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgICAgIHNhbHRsZW4gPSBN X0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOworKyAgICAgICAgICAgIGlmIChzYWx0bGVu ID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCisrICAgICAgICAgICAgICAgIHNhbHRsZW4g PSAtMTsKKysgICAgICAgICAgICBlbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19Q U1NfTVJFQykKKysgICAgICAgICAgICAgICAgc2FsdGxlbiA9IC0yOworKyAgICAgICAgICAgIGlm IChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkK KysgICAgICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICB9CisgICAgICAgICBpZiAoRVZQ X1BLRVlfc2lnbihwa2N0eCwgc2lncmV0LCAmc2x0bXAsIG0sIG1fbGVuKSA8PSAwKQorICAgICAg ICAgICAgIGdvdG8gZXJyOworICAgICAgICAgKnNpZ2xlbiA9IHNsdG1wOworZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL2V2cC9wX3ZlcmlmeS5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9wX3Zlcmlm eS5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4yZS9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjI1NjI1 MjkgKzAxMDAKK0BAIC02MSw2ICs2MSw3IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Cisg I2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAKKyBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9N RF9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLAorICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IHNpZ2xlbiwgRVZQX1BLRVkgKnBrZXkpCitAQCAtODcsNiArODgs MjIgQEAgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbgorICAgICAgICAg ICAgIGdvdG8gZXJyOworICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21k KHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKyAgICAgICAgICAgICBnb3RvIGVycjsKKysgICAg ICAgIGlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQorKyAgICAgICAg ICAgIGlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURE SU5HKSA8PSAwKQorKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIGlmIChjdHgt PmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpIHsKKysgICAgICAgICAgICBpbnQgc2Fs dGxlbjsKKysgICAgICAgICAgICBpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0 eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PQorKyAgICAgICAgICAgICAgICAwKQorKyAgICAg ICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgICAgICBzYWx0bGVuID0gTV9FVlBfTURfQ1RY X0ZMQUdfUFNTX1NBTFQoY3R4KTsKKysgICAgICAgICAgICBpZiAoc2FsdGxlbiA9PSBFVlBfTURf Q1RYX0ZMQUdfUFNTX01ETEVOKQorKyAgICAgICAgICAgICAgICBzYWx0bGVuID0gLTE7CisrICAg ICAgICAgICAgZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCisr ICAgICAgICAgICAgICAgIHNhbHRsZW4gPSAtMjsKKysgICAgICAgICAgICBpZiAoRVZQX1BLRVlf Q1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCisrICAgICAgICAg ICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorICAgICAgICAgaSA9IEVWUF9QS0VZX3Zlcmlm eShwa2N0eCwgc2lnYnVmLCBzaWdsZW4sIG0sIG1fbGVuKTsKKyAgZXJyOgorICAgICAgICAgRVZQ X1BLRVlfQ1RYX2ZyZWUocGtjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Zp cHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2Zp cHNfYWVzX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2Fl c19zZWxmdGVzdC5jLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjI1NjI1MjkgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCTIwMTUtMTIt MDQgMTM6NTU6NTEuOTYyNTYyNTI5ICswMTAwCitAQCAtMCwwICsxLDM2NSBAQAorKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwg cmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0 IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysg KgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBU aGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90 IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv bi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3Ns LWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrIyBpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrc3RhdGljIGNvbnN0IHN0cnVjdCB7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIga2V5WzE2XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOworKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMTZdOworK30gdGVzdHNbXSA9IHsKKysg ICAgeworKyAgICAgICAgeworKyAgICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwg MHgwNSwgMHgwNiwgMHgwNywKKysgICAgICAgICAgICAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgw QiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRn0sIHsKKysgICAgICAgIDB4MDAsIDB4MTEsIDB4MjIs IDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsCisrICAgICAgICAgICAgICAgIDB4ODgsIDB4 OTksIDB4QUEsIDB4QkIsIDB4Q0MsIDB4REQsIDB4RUUsIDB4RkZ9LCB7CisrMHg2OSwgMHhDNCwg MHhFMCwgMHhEOCwgMHg2QSwgMHg3QiwgMHgwNCwgMHgzMCwKKysgICAgICAgICAgICAgICAgMHhE OCwgMHhDRCwgMHhCNywgMHg4MCwgMHg3MCwgMHhCNCwgMHhDNSwgMHg1QX0sfSx9OworKworK3N0 YXRpYyBpbnQgY29ycnVwdF9hZXM7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKCkKKyt7Cisr ICAgIGNvcnJ1cHRfYWVzID0gMTsKKyt9CisrCisraW50IEZJUFNfc2VsZnRlc3RfYWVzKCkKKyt7 CisrICAgIGludCBuOworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4 OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBmb3IgKG4gPSAwOyBu IDwgMTsgKytuKSB7CisrICAgICAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl07CisrCisrICAgICAg ICBtZW1jcHkoa2V5LCB0ZXN0c1tuXS5rZXksIHNpemVvZihrZXkpKTsKKysgICAgICAgIGlmIChj b3JydXB0X2FlcykKKysgICAgICAgICAgICBrZXlbMF0rKzsKKysgICAgICAgIGlmIChmaXBzX2Np cGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAga2V5LCBOVUxMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNb bl0ucGxhaW50ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNbbl0uY2lw aGVydGV4dCwgMTYpIDw9IDApCisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysgICAg cmV0ID0gMTsKKysgZXJyOgorKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKyAg ICBpZiAocmV0ID09IDApCisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FF UywgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgIHJldHVybiByZXQ7CisrfQorKworKy8q IEFFUy1DQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2tleVtdID0geworKyAgICAweGNlLCAweGIw LCAweDA5LCAweGFlLCAweGE0LCAweDQ1LCAweDQ0LCAweDUxLCAweGZlLCAweGFkLCAweGYwLCAw eGU2LAorKyAgICAweGIzLCAweDZmLCAweDQ1LCAweDU1LCAweDVkLCAweGQwLCAweDQ3LCAweDIz LCAweGJhLCAweGE0LCAweDQ4LCAweGU4CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBjY21fbm9uY2VbXSA9IHsKKysgICAgMHg3NiwgMHg0MCwgMHg0MywgMHhjNCwgMHg5NCwg MHg2MCwgMHhiNworK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2FkYXRh W10gPSB7CisrICAgIDB4NmUsIDB4ODAsIDB4ZGQsIDB4N2YsIDB4MWIsIDB4YWQsIDB4ZjMsIDB4 YTEsIDB4YzksIDB4YWIsIDB4MjUsIDB4YzcsCisrICAgIDB4NWYsIDB4MTAsIDB4YmQsIDB4ZTcs IDB4OGMsIDB4MjMsIDB4ZmEsIDB4MGUsIDB4YjgsIDB4ZjksIDB4YWEsIDB4YTUsCisrICAgIDB4 M2EsIDB4ZGUsIDB4ZmIsIDB4ZjQsIDB4Y2IsIDB4ZjcsIDB4OGYsIDB4ZTQKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9wdFtdID0geworKyAgICAweGM4LCAweGQyLCAw eDc1LCAweGY5LCAweDE5LCAweGUxLCAweDdkLCAweDdmLCAweGU2LCAweDljLCAweDJhLCAweDFm LAorKyAgICAweDU4LCAweDkzLCAweDlkLCAweGZlLCAweDRkLCAweDQwLCAweDM3LCAweDkxLCAw eGI1LCAweGRmLCAweDEzLCAweDEwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBjY21fY3RbXSA9IHsKKysgICAgMHg4YSwgMHgwZiwgMHgzZCwgMHg4MiwgMHgyOSwgMHhlNCwg MHg4ZSwgMHg3NCwgMHg4NywgMHhmZCwgMHg5NSwgMHhhMiwKKysgICAgMHg4YSwgMHhkMywgMHg5 MiwgMHhjOCwgMHgwYiwgMHgzNiwgMHg4MSwgMHhkNCwgMHhmYiwgMHhjNywgMHhiYiwgMHhmZAor K307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3RhZ1tdID0geworKyAgICAw eDJkLCAweGQ2LCAweGVmLCAweDFjLCAweDQ1LCAweGQ0LCAweGNjLCAweGI3LCAweDIzLCAweGRj LCAweDA3LCAweDQ0LAorKyAgICAweDE0LCAweGRiLCAweDUwLCAweDZkCisrfTsKKysKKytpbnQg RklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysgICAg dW5zaWduZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4 OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKyAgICBtZW1zZXQob3V0LCAwLCBz aXplb2Yob3V0KSk7CisrICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18x OTJfY2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDEpKQorKyAgICAgICAgZ290byBlcnI7CisrICAg IGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQor KyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBF VlBfQ1RSTF9DQ01fU0VUX1RBRywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVv ZihjY21fdGFnKSwgTlVMTCkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfQ2lw aGVySW5pdF9leCgmY3R4LCBOVUxMLCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDEpKQorKyAg ICAgICAgZ290byBlcnI7CisrICAgIGlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNp emVvZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX3B0KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAg ICBpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEp KSA8IDApCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0 LCBjY21fcHQsIHNpemVvZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX2N0KSkKKysgICAgICAgIGdv dG8gZXJyOworKworKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxf Q0NNX0dFVF9UQUcsIDE2LCB0YWcpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmIChtZW1j bXAodGFnLCBjY21fdGFnLCBzaXplb2YoY2NtX3RhZykpCisrICAgICAgICB8fCBtZW1jbXAob3V0 LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBt ZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7CisrCisrICAgIGlmICghRVZQX0NpcGhlckluaXRf ZXgoJmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDApKQorKyAgICAg ICAgZ290byBlcnI7CisrICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RS TF9DQ01fU0VUX0lWTEVOLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNj bV9ub25jZSksIE5VTEwpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghRVZQX0NJUEhF Ul9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgMTYsIHRhZykpCisrICAgICAg ICBnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBOVUxMLCBOVUxM LCBjY21fa2V5LCBjY21fbm9uY2UsIDApKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmIChF VlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2Nt X2N0KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxM LCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCisrICAgICAgICBnb3RvIGVycjsK KysgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSAh PSBzaXplb2YoY2NtX3B0KSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBpZiAobWVtY21w KG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0KSkpCisrICAgICAgICBnb3RvIGVycjsKKysKKysg ICAgcmV0ID0gMTsKKysKKysgZXJyOgorKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgp OworKworKyAgICBpZiAocmV0ID09IDApIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf U0VMRlRFU1RfQUVTX0NDTSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1 cm4gMDsKKysgICAgfSBlbHNlCisrICAgICAgICByZXR1cm4gcmV0OworKworK30KKysKKysvKiBB RVMtR0NNIHRlc3QgZGF0YSBmcm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9rZXlbXSA9IHsKKysgICAgMHhlZSwgMHhiYywg MHgxZiwgMHg1NywgMHg0OCwgMHg3ZiwgMHg1MSwgMHg5MiwgMHgxYywgMHgwNCwgMHg2NSwgMHg2 NiwKKysgICAgMHg1ZiwgMHg4YSwgMHhlNiwgMHhkMSwgMHg2NSwgMHg4YiwgMHhiMiwgMHg2ZCwg MHhlNiwgMHhmOCwgMHhhMCwgMHg2OSwKKysgICAgMHhhMywgMHg1MiwgMHgwMiwgMHg5MywgMHhh NSwgMHg3MiwgMHgwNywgMHg4ZgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg Z2NtX2l2W10gPSB7CisrICAgIDB4OTksIDB4YWEsIDB4M2UsIDB4NjgsIDB4ZWQsIDB4ODEsIDB4 NzMsIDB4YTAsIDB4ZWUsIDB4ZDAsIDB4NjYsIDB4ODQKKyt9OworKworK3N0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGdjbV9wdFtdID0geworKyAgICAweGY1LCAweDZlLCAweDg3LCAweDA1LCAw eDViLCAweGMzLCAweDJkLCAweDBlLCAweGViLCAweDMxLCAweGIyLCAweGVhLAorKyAgICAweGNj LCAweDJiLCAweGYyLCAweGE1CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBn Y21fYWFkW10gPSB7CisrICAgIDB4NGQsIDB4MjMsIDB4YzMsIDB4Y2UsIDB4YzMsIDB4MzQsIDB4 YjQsIDB4OWIsIDB4ZGIsIDB4MzcsIDB4MGMsIDB4NDMsCisrICAgIDB4N2YsIDB4ZWMsIDB4Nzgs IDB4ZGUKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9jdFtdID0gewor KyAgICAweGY3LCAweDI2LCAweDQ0LCAweDEzLCAweGE4LCAweDRjLCAweDBlLCAweDdjLCAweGQ1 LCAweDM2LCAweDg2LCAweDdlLAorKyAgICAweGI5LCAweGYyLCAweDE3LCAweDM2CisrfTsKKysK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fdGFnW10gPSB7CisrICAgIDB4NjcsIDB4 YmEsIDB4MDUsIDB4MTAsIDB4MjYsIDB4MmEsIDB4ZTQsIDB4ODcsIDB4ZDcsIDB4MzcsIDB4ZWUs IDB4NjIsCisrICAgIDB4OTgsIDB4ZjcsIDB4N2UsIDB4MGMKKyt9OworKworK2ludCBGSVBTX3Nl bGZ0ZXN0X2Flc19nY20odm9pZCkKKyt7CisrICAgIGludCByZXQgPSAwOworKyAgICB1bnNpZ25l ZCBjaGFyIG91dFsxMjhdLCB0YWdbMTZdOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAg IEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrICAgIG1lbXNldChvdXQsIDAsIHNpemVvZihv dXQpKTsKKysgICAgbWVtc2V0KHRhZywgMCwgc2l6ZW9mKHRhZykpOworKyAgICBpZiAoIUVWUF9D aXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAx KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0 eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZihnY21faXYpLCBOVUxMKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIUVW UF9DaXBoZXJJbml0X2V4KCZjdHgsIE5VTEwsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMSkpCisr ICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2NtX2Fh ZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKEVW UF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fcHQsIHNpemVvZihnY21fcHQpKSAhPSBzaXplb2YoZ2Nt X2N0KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxM LCBOVUxMLCAwKSA8IDApCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgaWYgKCFFVlBfQ0lQ SEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLCAxNiwgdGFnKSkKKysgICAg ICAgIGdvdG8gZXJyOworKworKyAgICBpZiAobWVtY21wKHRhZywgZ2NtX3RhZywgMTYpIHx8IG1l bWNtcChvdXQsIGdjbV9jdCwgMTYpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIG1lbXNl dChvdXQsIDAsIHNpemVvZihvdXQpKTsKKysKKysgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgm Y3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwgTlVMTCwgMCkpCisrICAgICAgICBn b3RvIGVycjsKKysgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dD TV9TRVRfSVZMRU4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZ2NtX2l2 KSwgTlVMTCkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9j dHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfVEFHLCAxNiwgdGFnKSkKKysgICAgICAgIGdvdG8g ZXJyOworKyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIE5VTEwsIE5VTEwsIGdjbV9r ZXksIGdjbV9pdiwgMCkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKEVWUF9DaXBoZXIo JmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCisrICAgICAgICBnb3Rv IGVycjsKKysgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fY3QsIHNpemVvZihnY21f Y3QpKSAhPSBzaXplb2YoZ2NtX3B0KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQ X0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCisrICAgICAgICBnb3RvIGVycjsKKysK KysgICAgaWYgKG1lbWNtcChvdXQsIGdjbV9wdCwgMTYpKQorKyAgICAgICAgZ290byBlcnI7Cisr CisrICAgIHJldCA9IDE7CisrCisrIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgm Y3R4KTsKKysKKysgICAgaWYgKHJldCA9PSAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX1NFTEZURVNUX0FFU19HQ00sIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAg cmV0dXJuIDA7CisrICAgIH0gZWxzZQorKyAgICAgICAgcmV0dXJuIHJldDsKKysKKyt9CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9rZXlbXSA9IHsKKysgICAgMHhhMSwg MHhiOSwgMHgwYywgMHhiYSwgMHgzZiwgMHgwNiwgMHhhYywgMHgzNSwgMHgzYiwgMHgyYywgMHgz NCwgMHgzOCwKKysgICAgMHg3NiwgMHgwOCwgMHgxNywgMHg2MiwgMHgwOSwgMHgwOSwgMHgyMywg MHgwMiwgMHg2ZSwgMHg5MSwgMHg3NywgMHgxOCwKKysgICAgMHgxNSwgMHhmMiwgMHg5ZCwgMHhh YiwgMHgwMSwgMHg5MywgMHgyZiwgMHgyZgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgWFRTXzEyOF9pW10gPSB7CisrICAgIDB4NGYsIDB4YWUsIDB4ZjcsIDB4MTEsIDB4N2Ms IDB4ZGEsIDB4NTksIDB4YzYsIDB4NmUsIDB4NGIsIDB4OTIsIDB4MDEsCisrICAgIDB4M2UsIDB4 NzYsIDB4OGEsIDB4ZDUKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18x MjhfcHRbXSA9IHsKKysgICAgMHhlYiwgMHhhYiwgMHhjZSwgMHg5NSwgMHhiMSwgMHg0ZCwgMHgz YywgMHg4ZCwgMHg2ZiwgMHhiMywgMHg1MCwgMHgzOSwKKysgICAgMHgwNywgMHg5MCwgMHgzMSwg MHgxYworK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9jdFtdID0g eworKyAgICAweDc3LCAweDhhLCAweGU4LCAweGI0LCAweDNjLCAweGI5LCAweDhkLCAweDVhLCAw eDgyLCAweDUwLCAweDgxLCAweGQ1LAorKyAgICAweGJlLCAweDQ3LCAweDFjLCAweDYzCisrfTsK KysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2tleVtdID0geworKyAgICAw eDFlLCAweGE2LCAweDYxLCAweGM1LCAweDhkLCAweDk0LCAweDNhLCAweDBlLCAweDQ4LCAweDAx LCAweGU0LCAweDJmLAorKyAgICAweDRiLCAweDA5LCAweDQ3LCAweDE0LCAweDllLCAweDdmLCAw eDlmLCAweDhlLCAweDNlLCAweDY4LCAweGQwLCAweGM3LAorKyAgICAweDUwLCAweDUyLCAweDEw LCAweGJkLCAweDMxLCAweDFhLCAweDBlLCAweDdjLCAweGQ2LCAweGUxLCAweDNmLCAweGZkLAor KyAgICAweGYyLCAweDQxLCAweDhkLCAweDhkLCAweDE5LCAweDExLCAweGMwLCAweDA0LCAweGNk LCAweGE1LCAweDhkLCAweGEzLAorKyAgICAweGQ2LCAweDE5LCAweGI3LCAweGUyLCAweGI5LCAw eDE0LCAweDFlLCAweDU4LCAweDMxLCAweDhlLCAweGVhLCAweDM5LAorKyAgICAweDJjLCAweGY0 LCAweDFiLCAweDA4CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2 X2lbXSA9IHsKKysgICAgMHhhZCwgMHhmOCwgMHhkOSwgMHgyNiwgMHgyNywgMHg0NiwgMHg0YSwg MHhkMiwgMHhmMCwgMHg0MiwgMHg4ZSwgMHg4NCwKKysgICAgMHhhOSwgMHhmOCwgMHg3NSwgMHg2 NAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9wdFtdID0gewor KyAgICAweDJlLCAweGVkLCAweGVhLCAweDUyLCAweGNkLCAweDgyLCAweDE1LCAweGUxLCAweGFj LCAweGM2LCAweDQ3LCAweGU4LAorKyAgICAweDEwLCAweGJiLCAweGMzLCAweDY0LCAweDJlLCAw eDg3LCAweDI4LCAweDdmLCAweDhkLCAweDJlLCAweDU3LCAweGUzLAorKyAgICAweDZjLCAweDBh LCAweDI0LCAweGZiLCAweGMxLCAweDJhLCAweDIwLCAweDJlCisrfTsKKysKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2N0W10gPSB7CisrICAgIDB4Y2IsIDB4YWEsIDB4ZDAs IDB4ZTIsIDB4ZjYsIDB4Y2UsIDB4YTMsIDB4ZjUsIDB4MGIsIDB4MzcsIDB4ZjksIDB4MzQsCisr ICAgIDB4ZDQsIDB4NmEsIDB4OWIsIDB4MTMsIDB4MGIsIDB4OWQsIDB4NTQsIDB4ZjAsIDB4N2Us IDB4MzQsIDB4ZjMsIDB4NmEsCisrICAgIDB4ZjcsIDB4OTMsIDB4ZTgsIDB4NmYsIDB4NzMsIDB4 YzYsIDB4ZDcsIDB4ZGIKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc194dHMoKQorK3sK KysgICAgaW50IHJldCA9IDE7CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJ UEhFUl9DVFhfaW5pdCgmY3R4KTsKKysKKysgICAgaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwg RVZQX2Flc18xMjhfeHRzKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgIFhUU18xMjhfa2V5 LCBYVFNfMTI4X2ksIFhUU18xMjhfcHQsIFhUU18xMjhfY3QsCisrICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZihYVFNfMTI4X3B0KSkgPD0gMCkKKysgICAgICAgIHJldCA9IDA7CisrCisr ICAgIGlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMjU2X3h0cygpLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICBYVFNfMjU2X2tleSwgWFRTXzI1Nl9pLCBYVFNfMjU2X3B0LCBY VFNfMjU2X2N0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWFRTXzI1Nl9wdCkp IDw9IDApCisrICAgICAgICByZXQgPSAwOworKworKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVw KCZjdHgpOworKyAgICBpZiAocmV0ID09IDApCisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X1NFTEZURVNUX0FFU19YVFMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICByZXR1cm4g cmV0OworK30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBz L2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHMuYworLS0tIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTYy NTYyNTI5ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwcy5jCTIwMTUt MTItMDQgMTM6NTU6NTEuOTYyNTYyNTI5ICswMTAwCitAQCAtMCwwICsxLDQ4MyBAQAorKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4K KysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisr ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK KysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKysgKgorKyAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRl IDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgPGRsZmNuLmg+Cisr I2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJmaXBz X2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrIyBpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysKKysjIGlmbmRlZiBQQVRIX01BWAorKyMgIGRlZmluZSBQQVRIX01BWCAxMDI0 CisrIyBlbmRpZgorKworK3N0YXRpYyBpbnQgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKytzdGF0 aWMgaW50IGZpcHNfbW9kZSA9IDA7Cisrc3RhdGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOworKwor K3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpOworK3N0YXRpYyBpbnQgZmlw c19zZXRfb3duaW5nX3RocmVhZCh2b2lkKTsKKytzdGF0aWMgaW50IGZpcHNfY2xlYXJfb3duaW5n X3RocmVhZCh2b2lkKTsKKysKKysjIGRlZmluZSBmaXBzX3dfbG9jaygpICAgQ1JZUFRPX3dfbG9j ayhDUllQVE9fTE9DS19GSVBTKQorKyMgZGVmaW5lIGZpcHNfd191bmxvY2soKSBDUllQVE9fd191 bmxvY2soQ1JZUFRPX0xPQ0tfRklQUykKKysjIGRlZmluZSBmaXBzX3JfbG9jaygpICAgQ1JZUFRP X3JfbG9jayhDUllQVE9fTE9DS19GSVBTKQorKyMgZGVmaW5lIGZpcHNfcl91bmxvY2soKSBDUllQ VE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUykKKysKKytzdGF0aWMgdm9pZCBmaXBzX3NldF9t b2RlKGludCBvbm9mZikKKyt7CisrICAgIGludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25p bmdfdGhyZWFkKCk7CisrCisrICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKKysgICAgICAgIGlmICgh b3duaW5nX3RocmVhZCkKKysgICAgICAgICAgICBmaXBzX3dfbG9jaygpOworKyAgICAgICAgZmlw c19tb2RlID0gb25vZmY7CisrICAgICAgICBpZiAoIW93bmluZ190aHJlYWQpCisrICAgICAgICAg ICAgZmlwc193X3VubG9jaygpOworKyAgICB9CisrfQorKworK2ludCBGSVBTX21vZHVsZV9tb2Rl KHZvaWQpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgaW50IG93bmluZ190aHJlYWQgPSBm aXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysgICAgaWYgKGZpcHNfc3RhcnRlZCkgeworKyAg ICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQorKyAgICAgICAgICAgIGZpcHNfcl9sb2NrKCk7Cisr ICAgICAgICByZXQgPSBmaXBzX21vZGU7CisrICAgICAgICBpZiAoIW93bmluZ190aHJlYWQpCisr ICAgICAgICAgICAgZmlwc19yX3VubG9jaygpOworKyAgICB9CisrICAgIHJldHVybiByZXQ7Cisr fQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKQorK3sKKysgICAgaW50IHJldCA9 IDA7CisrICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKKysgICAgICAgIGludCBvd25pbmdfdGhyZWFk ID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7CisrCisrICAgICAgICBpZiAoIW93bmluZ190aHJl YWQpCisrICAgICAgICAgICAgZmlwc19yX2xvY2soKTsKKysgICAgICAgIHJldCA9IGZpcHNfc2Vs ZnRlc3RfZmFpbDsKKysgICAgICAgIGlmICghb3duaW5nX3RocmVhZCkKKysgICAgICAgICAgICBm aXBzX3JfdW5sb2NrKCk7CisrICAgIH0KKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrLyogU2Vs ZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0IHJvdXRpbmUuIFRoaXMgd2lsbCBiZSBjYWxsZWQKKysg KiBkdXJpbmcgKmFueSogY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24uIEl0IGhhcyB0aGUgbWluaW11 bQorKyAqIG92ZXJoZWFkIHBvc3NpYmxlIHRvIGF2b2lkIHRvbyBiaWcgYSBwZXJmb3JtYW5jZSBo aXQuCisrICovCisrCisrdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpCisreworKyAgICBp ZiAoZmlwc19zZWxmdGVzdF9mYWlsKSB7CisrICAgICAgICBPcGVuU1NMRGllKF9fRklMRV9fLCBf X0xJTkVfXywgIkZBVEFMIEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIpOworKyAgICB9CisrfQorKwor K3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKQorK3sKKysgICAgZmlwc19zZWxmdGVz dF9mYWlsID0gMTsKKyt9CisrCisrLyogd2UgaW1wbGVtZW50IHdoYXQgbGliZmlwc2NoZWNrIGRv ZXMgb3Vyc2VsdmVzICovCisrCisrc3RhdGljIGludAorK2dldF9saWJyYXJ5X3BhdGgoY29uc3Qg Y2hhciAqbGlibmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSwgY2hhciAqcGF0aCwKKysgICAg ICAgICAgICAgICAgIHNpemVfdCBwYXRobGVuKQorK3sKKysgICAgRGxfaW5mbyBpbmZvOworKyAg ICB2b2lkICpkbCwgKnN5bTsKKysgICAgaW50IHJ2ID0gLTE7CisrCisrICAgIGRsID0gZGxvcGVu KGxpYm5hbWUsIFJUTERfTEFaWSk7CisrICAgIGlmIChkbCA9PSBOVUxMKSB7CisrICAgICAgICBy ZXR1cm4gLTE7CisrICAgIH0KKysKKysgICAgc3ltID0gZGxzeW0oZGwsIHN5bWJvbG5hbWUpOwor KworKyAgICBpZiAoc3ltICE9IE5VTEwgJiYgZGxhZGRyKHN5bSwgJmluZm8pKSB7CisrICAgICAg ICBzdHJuY3B5KHBhdGgsIGluZm8uZGxpX2ZuYW1lLCBwYXRobGVuIC0gMSk7CisrICAgICAgICBw YXRoW3BhdGhsZW4gLSAxXSA9ICdcMCc7CisrICAgICAgICBydiA9IDA7CisrICAgIH0KKysKKysg ICAgZGxjbG9zZShkbCk7CisrCisrICAgIHJldHVybiBydjsKKyt9CisrCisrc3RhdGljIGNvbnN0 IGNoYXIgY29udltdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworKworK3N0YXRpYyBjaGFyICpiaW4y aGV4KHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKKyt7CisrICAgIGNoYXIgKmhleCwgKnA7CisrICAg IHVuc2lnbmVkIGNoYXIgKnNyYyA9IGJ1ZjsKKysKKysgICAgaGV4ID0gbWFsbG9jKGxlbiAqIDIg KyAxKTsKKysgICAgaWYgKGhleCA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIE5VTEw7CisrCisr ICAgIHAgPSBoZXg7CisrCisrICAgIHdoaWxlIChsZW4gPiAwKSB7CisrICAgICAgICB1bnNpZ25l ZCBjOworKworKyAgICAgICAgYyA9ICpzcmM7CisrICAgICAgICBzcmMrKzsKKysKKysgICAgICAg ICpwID0gY29udltjID4+IDRdOworKyAgICAgICAgKytwOworKyAgICAgICAgKnAgPSBjb252W2Mg JiAweDBmXTsKKysgICAgICAgICsrcDsKKysgICAgICAgIC0tbGVuOworKyAgICB9CisrICAgICpw ID0gJ1wwJzsKKysgICAgcmV0dXJuIGhleDsKKyt9CisrCisrIyBkZWZpbmUgSE1BQ19QUkVGSVgg Ii4iCisrIyBkZWZpbmUgSE1BQ19TVUZGSVggIi5obWFjIgorKyMgZGVmaW5lIFJFQURfQlVGRkVS X0xFTkdUSCAxNjM4NAorKworK3N0YXRpYyBjaGFyICptYWtlX2htYWNfcGF0aChjb25zdCBjaGFy ICpvcmlncGF0aCkKKyt7CisrICAgIGNoYXIgKnBhdGgsICpwOworKyAgICBjb25zdCBjaGFyICpm bjsKKysKKysgICAgcGF0aCA9CisrICAgICAgICBtYWxsb2Moc2l6ZW9mKEhNQUNfUFJFRklYKSAr IHNpemVvZihITUFDX1NVRkZJWCkgKyBzdHJsZW4ob3JpZ3BhdGgpKTsKKysgICAgaWYgKHBhdGgg PT0gTlVMTCkgeworKyAgICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAgZm4gPSBz dHJyY2hyKG9yaWdwYXRoLCAnLycpOworKyAgICBpZiAoZm4gPT0gTlVMTCkgeworKyAgICAgICAg Zm4gPSBvcmlncGF0aDsKKysgICAgfSBlbHNlIHsKKysgICAgICAgICsrZm47CisrICAgIH0KKysK KysgICAgc3RybmNweShwYXRoLCBvcmlncGF0aCwgZm4gLSBvcmlncGF0aCk7CisrICAgIHAgPSBw YXRoICsgKGZuIC0gb3JpZ3BhdGgpOworKyAgICBwID0gc3RwY3B5KHAsIEhNQUNfUFJFRklYKTsK KysgICAgcCA9IHN0cGNweShwLCBmbik7CisrICAgIHAgPSBzdHBjcHkocCwgSE1BQ19TVUZGSVgp OworKworKyAgICByZXR1cm4gcGF0aDsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgaG1hY2tl eVtdID0gIm9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKKysKKytzdGF0aWMgaW50 IGNvbXB1dGVfZmlsZV9obWFjKGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKipidWYsIHNpemVfdCAq aG1hY2xlbikKKyt7CisrICAgIEZJTEUgKmYgPSBOVUxMOworKyAgICBpbnQgcnYgPSAtMTsKKysg ICAgdW5zaWduZWQgY2hhciByYnVmW1JFQURfQlVGRkVSX0xFTkdUSF07CisrICAgIHNpemVfdCBs ZW47CisrICAgIHVuc2lnbmVkIGludCBobGVuOworKyAgICBITUFDX0NUWCBjOworKworKyAgICBI TUFDX0NUWF9pbml0KCZjKTsKKysKKysgICAgZiA9IGZvcGVuKHBhdGgsICJyIik7CisrCisrICAg IGlmIChmID09IE5VTEwpIHsKKysgICAgICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIEhN QUNfSW5pdCgmYywgaG1hY2tleSwgc2l6ZW9mKGhtYWNrZXkpIC0gMSwgRVZQX3NoYTI1NigpKTsK KysKKysgICAgd2hpbGUgKChsZW4gPSBmcmVhZChyYnVmLCAxLCBzaXplb2YocmJ1ZiksIGYpKSAh PSAwKSB7CisrICAgICAgICBITUFDX1VwZGF0ZSgmYywgcmJ1ZiwgbGVuKTsKKysgICAgfQorKwor KyAgICBsZW4gPSBzaXplb2YocmJ1Zik7CisrICAgIC8qIHJldXNlIHJidWYgZm9yIGhtYWMgKi8K KysgICAgSE1BQ19GaW5hbCgmYywgcmJ1ZiwgJmhsZW4pOworKworKyAgICAqYnVmID0gbWFsbG9j KGhsZW4pOworKyAgICBpZiAoKmJ1ZiA9PSBOVUxMKSB7CisrICAgICAgICBnb3RvIGVuZDsKKysg ICAgfQorKworKyAgICAqaG1hY2xlbiA9IGhsZW47CisrCisrICAgIG1lbWNweSgqYnVmLCByYnVm LCBobGVuKTsKKysKKysgICAgcnYgPSAwOworKyBlbmQ6CisrICAgIEhNQUNfQ1RYX2NsZWFudXAo JmMpOworKworKyAgICBpZiAoZikKKysgICAgICAgIGZjbG9zZShmKTsKKysKKysgICAgcmV0dXJu IHJ2OworK30KKysKKytzdGF0aWMgaW50IEZJUFNDSEVDS192ZXJpZnkoY29uc3QgY2hhciAqbGli bmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSkKKyt7CisrICAgIGNoYXIgcGF0aFtQQVRIX01B WCArIDFdOworKyAgICBpbnQgcnY7CisrICAgIEZJTEUgKmhmOworKyAgICBjaGFyICpobWFjcGF0 aCwgKnA7CisrICAgIGNoYXIgKmhtYWMgPSBOVUxMOworKyAgICBzaXplX3QgbjsKKysKKysgICAg cnYgPSBnZXRfbGlicmFyeV9wYXRoKGxpYm5hbWUsIHN5bWJvbG5hbWUsIHBhdGgsIHNpemVvZihw YXRoKSk7CisrCisrICAgIGlmIChydiA8IDApCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAg aG1hY3BhdGggPSBtYWtlX2htYWNfcGF0aChwYXRoKTsKKysgICAgaWYgKGhtYWNwYXRoID09IE5V TEwpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgaGYgPSBmb3BlbihobWFjcGF0aCwgInIi KTsKKysgICAgaWYgKGhmID09IE5VTEwpIHsKKysgICAgICAgIGZyZWUoaG1hY3BhdGgpOworKyAg ICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgaWYgKGdldGxpbmUoJmhtYWMsICZuLCBo ZikgPiAwKSB7CisrICAgICAgICB2b2lkICpidWY7CisrICAgICAgICBzaXplX3QgaG1hY2xlbjsK KysgICAgICAgIGNoYXIgKmhleDsKKysKKysgICAgICAgIGlmICgocCA9IHN0cmNocihobWFjLCAn XG4nKSkgIT0gTlVMTCkKKysgICAgICAgICAgICAqcCA9ICdcMCc7CisrCisrICAgICAgICBpZiAo Y29tcHV0ZV9maWxlX2htYWMocGF0aCwgJmJ1ZiwgJmhtYWNsZW4pIDwgMCkgeworKyAgICAgICAg ICAgIHJ2ID0gLTQ7CisrICAgICAgICAgICAgZ290byBlbmQ7CisrICAgICAgICB9CisrCisrICAg ICAgICBpZiAoKGhleCA9IGJpbjJoZXgoYnVmLCBobWFjbGVuKSkgPT0gTlVMTCkgeworKyAgICAg ICAgICAgIGZyZWUoYnVmKTsKKysgICAgICAgICAgICBydiA9IC01OworKyAgICAgICAgICAgIGdv dG8gZW5kOworKyAgICAgICAgfQorKworKyAgICAgICAgaWYgKHN0cmNtcChoZXgsIGhtYWMpICE9 IDApIHsKKysgICAgICAgICAgICBydiA9IC0xOworKyAgICAgICAgfQorKyAgICAgICAgZnJlZShi dWYpOworKyAgICAgICAgZnJlZShoZXgpOworKyAgICB9IGVsc2UgeworKyAgICAgICAgcnYgPSAt MTsKKysgICAgfQorKworKyBlbmQ6CisrICAgIGZyZWUoaG1hYyk7CisrICAgIGZyZWUoaG1hY3Bh dGgpOworKyAgICBmY2xvc2UoaGYpOworKworKyAgICBpZiAocnYgPCAwKQorKyAgICAgICAgcmV0 dXJuIDA7CisrCisrICAgIC8qIGNoZWNrIHN1Y2Nlc3NmdWwgKi8KKysgICAgcmV0dXJuIDE7Cisr fQorKworK2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNvbnN0IGNoYXIgKmF1 dGgpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAgZmlwc193X2xvY2soKTsKKysgICAg Zmlwc19zdGFydGVkID0gMTsKKysgICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOworKworKyAg ICBpZiAob25vZmYpIHsKKysKKysgICAgICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7CisrCisr ICAgICAgICAvKiBEb24ndCBnbyBpbnRvIEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4g ZG8gYXV0b21hZ2ljCisrICAgICAgICAgICBzZWVkaW5nICovCisrICAgICAgICBpZiAoRklQU19t b2R1bGVfbW9kZSgpKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVf TU9ERV9TRVQsCisrICAgICAgICAgICAgICAgICAgICBGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlf U0VUKTsKKysgICAgICAgICAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKyAgICAgICAgICAg IHJldCA9IDA7CisrICAgICAgICAgICAgZ290byBlbmQ7CisrICAgICAgICB9CisrIyBpZmRlZiBP UEVOU1NMX0lBMzJfU1NFMgorKyAgICAgICAgeworKyAgICAgICAgICAgIGV4dGVybiB1bnNpZ25l ZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbMl07CisrICAgICAgICAgICAgaWYgKChPUEVOU1NMX2lh MzJjYXBfUFswXSAmICgxIDw8IDI1IHwgMSA8PCAyNikpICE9CisrICAgICAgICAgICAgICAgICgx IDw8IDI1IHwgMSA8PCAyNikpIHsKKysgICAgICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQ U19NT0RVTEVfTU9ERV9TRVQsCisrICAgICAgICAgICAgICAgICAgICAgICAgRklQU19SX1VOU1VQ UE9SVEVEX1BMQVRGT1JNKTsKKysgICAgICAgICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0g MTsKKysgICAgICAgICAgICAgICAgcmV0ID0gMDsKKysgICAgICAgICAgICAgICAgZ290byBlbmQ7 CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIE9QRU5TU0xfaWEzMmNhcF9QWzBdIHw9ICgx IDw8IDI4KTsgLyogc2V0ICJzaGFyZWQgY2FjaGUiICAgKi8KKysgICAgICAgICAgICBPUEVOU1NM X2lhMzJjYXBfUFsxXSAmPSB+KDEgPDwgKDYwIC0gMzIpKTsgLyogY2xlYXIgQVZYICAgICAgICAg ICAgKi8KKysgICAgICAgIH0KKysjIGVuZGlmCisrCisrICAgICAgICBpZiAoIUZJUFNDSEVDS192 ZXJpZnkKKysgICAgICAgICAgICAoImxpYmNyeXB0by5zby4iIFNITElCX1ZFUlNJT05fTlVNQkVS LCAiRklQU19tb2RlX3NldCIpKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19N T0RVTEVfTU9ERV9TRVQsCisrICAgICAgICAgICAgICAgICAgICBGSVBTX1JfRklOR0VSUFJJTlRf RE9FU19OT1RfTUFUQ0gpOworKyAgICAgICAgICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Cisr ICAgICAgICAgICAgcmV0ID0gMDsKKysgICAgICAgICAgICBnb3RvIGVuZDsKKysgICAgICAgIH0K KysKKysgICAgICAgIGlmICghRklQU0NIRUNLX3ZlcmlmeQorKyAgICAgICAgICAgICgibGlic3Ns LnNvLiIgU0hMSUJfVkVSU0lPTl9OVU1CRVIsICJTU0xfQ1RYX25ldyIpKSB7CisrICAgICAgICAg ICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsCisrICAgICAgICAgICAgICAg ICAgICBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpOworKyAgICAgICAgICAgIGZp cHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrICAgICAgICAgICAgcmV0ID0gMDsKKysgICAgICAgICAg ICBnb3RvIGVuZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0KCkp CisrICAgICAgICAgICAgZmlwc19zZXRfbW9kZShvbm9mZik7CisrICAgICAgICBlbHNlIHsKKysg ICAgICAgICAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKyAgICAgICAgICAgIHJldCA9IDA7 CisrICAgICAgICAgICAgZ290byBlbmQ7CisrICAgICAgICB9CisrICAgICAgICByZXQgPSAxOwor KyAgICAgICAgZ290byBlbmQ7CisrICAgIH0KKysgICAgZmlwc19zZXRfbW9kZSgwKTsKKysgICAg Zmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKysgICAgcmV0ID0gMTsKKysgZW5kOgorKyAgICBmaXBz X2NsZWFyX293bmluZ190aHJlYWQoKTsKKysgICAgZmlwc193X3VubG9jaygpOworKyAgICByZXR1 cm4gcmV0OworK30KKysKKytzdGF0aWMgQ1JZUFRPX1RIUkVBRElEIGZpcHNfdGhyZWFkOworK3N0 YXRpYyBpbnQgZmlwc190aHJlYWRfc2V0ID0gMDsKKysKKytzdGF0aWMgaW50IGZpcHNfaXNfb3du aW5nX3RocmVhZCh2b2lkKQorK3sKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGlmIChmaXBz X3N0YXJ0ZWQpIHsKKysgICAgICAgIENSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwor KyAgICAgICAgaWYgKGZpcHNfdGhyZWFkX3NldCkgeworKyAgICAgICAgICAgIENSWVBUT19USFJF QURJRCBjdXI7CisrICAgICAgICAgICAgQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmN1cik7Cisr ICAgICAgICAgICAgaWYgKCFDUllQVE9fVEhSRUFESURfY21wKCZjdXIsICZmaXBzX3RocmVhZCkp CisrICAgICAgICAgICAgICAgIHJldCA9IDE7CisrICAgICAgICB9CisrICAgICAgICBDUllQVE9f cl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKyAgICB9CisrICAgIHJldHVybiByZXQ7Cisr fQorKworK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCisreworKyAgICBpbnQgcmV0 ID0gMDsKKysKKysgICAgaWYgKGZpcHNfc3RhcnRlZCkgeworKyAgICAgICAgQ1JZUFRPX3dfbG9j ayhDUllQVE9fTE9DS19GSVBTMik7CisrICAgICAgICBpZiAoIWZpcHNfdGhyZWFkX3NldCkgewor KyAgICAgICAgICAgIENSWVBUT19USFJFQURJRF9jdXJyZW50KCZmaXBzX3RocmVhZCk7CisrICAg ICAgICAgICAgcmV0ID0gMTsKKysgICAgICAgICAgICBmaXBzX3RocmVhZF9zZXQgPSAxOworKyAg ICAgICAgfQorKyAgICAgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysg ICAgfQorKyAgICByZXR1cm4gcmV0OworK30KKysKKytpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhy ZWFkKHZvaWQpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAgaWYgKGZpcHNfc3RhcnRl ZCkgeworKyAgICAgICAgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrICAgICAg ICBpZiAoZmlwc190aHJlYWRfc2V0KSB7CisrICAgICAgICAgICAgQ1JZUFRPX1RIUkVBRElEIGN1 cjsKKysgICAgICAgICAgICBDUllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKKysgICAgICAg ICAgICBpZiAoIUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwgJmZpcHNfdGhyZWFkKSkKKysgICAg ICAgICAgICAgICAgZmlwc190aHJlYWRfc2V0ID0gMDsKKysgICAgICAgIH0KKysgICAgICAgIENS WVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrICAgIH0KKysgICAgcmV0dXJuIHJl dDsKKyt9CisrCisrIyBpZiAwCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1cmUg dGhlIGVycm9yIGNvZGUgZXhpc3RzIGFuZCB0aGUgZnVuY3Rpb24KKysgKiBuYW1lIGlzIHRvIGtl ZXAgdGhlIGVycm9yIGNoZWNraW5nIHNjcmlwdCBxdWlldAorKyAqLworK3ZvaWQgaGFzaF9maW5h bCh2b2lkKQorK3sKKysgICAgRklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCwgRklQU19SX05PTl9G SVBTX01FVEhPRCk7CisrfQorKyMgZW5kaWYKKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEu OTYzNTYyNTUyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19jbWFj X3NlbGZ0ZXN0LmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjM1NjI1NTIgKzAxMDAKK0BAIC0wLDAg KzEsMTU2IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK KysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICog ICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu CisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jbWFjLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgor KworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt0eXBlZGVmIHN0cnVjdCB7CisrICAgIGludCBuaWQ7 CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W0VWUF9NQVhfS0VZX0xFTkdUSF07CisrICAg IHNpemVfdCBrZXlzaXplOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ1s2NF07CisrICAg IHNpemVfdCBtc2dzaXplOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIG1hY1szMl07CisrICAg IHNpemVfdCBtYWNzaXplOworK30gQ01BQ19LQVQ7CisrCisrLyogZnJvbSBodHRwOi8vY3NyYy5u aXN0Lmdvdi9wdWJsaWNhdGlvbnMvbmlzdHB1YnMvODAwLTM4Qi9TUF84MDAtMzhCLnBkZiAqLwor K3N0YXRpYyBjb25zdCBDTUFDX0tBVCB2ZWN0b3JbXSA9IHsKKysgICAge05JRF9hZXNfMTI4X2Ni YywgICAgICAgICAgIC8qIENvdW50ID0gMzIgZnJvbSBDTUFDR2VuQUVTMTI4LnR4dCAqLworKyAg ICAgezB4NzcsIDB4YTcsIDB4N2YsIDB4YWYsIDB4MjksIDB4MGMsIDB4MWYsIDB4YTMsCisrICAg ICAgMHgwYywgMHg2OCwgMHgzZCwgMHhmMSwgMHg2YiwgMHhhNywgMHhhNywgMHg3Yix9LCAxMjgs CisrICAgICB7MHgwMiwgMHgwNiwgMHg4MywgMHhlMSwgMHhmMCwgMHgzOSwgMHgyZiwgMHg0YywK KysgICAgICAweGFjLCAweDU0LCAweDMxLCAweDhiLCAweDYwLCAweDI5LCAweDI1LCAweDllLAor KyAgICAgIDB4OWMsIDB4NTUsIDB4M2QsIDB4YmMsIDB4NGIsIDB4NmEsIDB4ZDksIDB4OTgsCisr ICAgICAgMHhlNiwgMHg0ZCwgMHg1OCwgMHhlNCwgMHhlNywgMHhkYywgMHgyZSwgMHgxMyx9LCAy NTYsCisrICAgICB7MHhmYiwgMHhmZSwgMHhhNCwgMHgxYix9LCAzMn0sCisrICAgIHtOSURfYWVz XzE5Ml9jYmMsICAgICAgICAgICAvKiBDb3VudCA9IDIzIGZyb20gQ01BQ0dlbkFFUzE5Mi50eHQg Ki8KKysgICAgIHsweDdiLCAweDMyLCAweDM5LCAweDEzLCAweDY5LCAweGFhLCAweDRjLCAweGE5 LAorKyAgICAgIDB4NzUsIDB4NTgsIDB4MDksIDB4NWIsIDB4ZTMsIDB4YzMsIDB4ZWMsIDB4ODYs CisrICAgICAgMHgyYiwgMHhkMCwgMHg1NywgMHhjZSwgMHhmMSwgMHhlMywgMHgyZCwgMHg2Mix9 LCAxOTIsCisrICAgICB7MHgwfSwgMCwKKysgICAgIHsweGU0LCAweGQ5LCAweDM0LCAweDBiLCAw eDAzLCAweGU2LCAweDdkLCAweGVmLAorKyAgICAgIDB4ZDQsIDB4OTYsIDB4OWMsIDB4YzEsIDB4 ZWQsIDB4MzcsIDB4MzUsIDB4ZTYsfSwgMTI4LAorKyAgICAgfSwKKysgICAge05JRF9hZXNfMjU2 X2NiYywgICAgICAgICAgIC8qIENvdW50ID0gMzMgZnJvbSBDTUFDR2VuQUVTMjU2LnR4dCAqLwor KyAgICAgezB4MGIsIDB4MTIsIDB4MmEsIDB4YzgsIDB4ZjMsIDB4NGUsIDB4ZDEsIDB4ZmUsCisr ICAgICAgMHgwOCwgMHgyYSwgMHgzNiwgMHgyNSwgMHhkMSwgMHg1NywgMHg1NiwgMHgxNCwKKysg ICAgICAweDU0LCAweDE2LCAweDdhLCAweGMxLCAweDQ1LCAweGExLCAweDBiLCAweGJmLAorKyAg ICAgIDB4NzcsIDB4YzYsIDB4YTcsIDB4MDUsIDB4OTYsIDB4ZDUsIDB4NzQsIDB4ZjEsfSwgMjU2 LAorKyAgICAgezB4NDksIDB4OGIsIDB4NTMsIDB4ZmQsIDB4ZWMsIDB4ODcsIDB4ZWQsIDB4Y2Is CisrICAgICAgMHhmMCwgMHg3MCwgMHg5NywgMHhkYywgMHhjZCwgMHhlOSwgMHgzYSwgMHgwOCwK KysgICAgICAweDRiLCAweGFkLCAweDc1LCAweDAxLCAweGEyLCAweDI0LCAweGUzLCAweDg4LAor KyAgICAgIDB4ZGYsIDB4MzQsIDB4OWMsIDB4ZTEsIDB4ODksIDB4NTksIDB4ZmUsIDB4ODQsCisr ICAgICAgMHg4NSwgMHhmOCwgMHhhZCwgMHgxNSwgMHgzNywgMHhmMCwgMHhkOCwgMHg5NiwKKysg ICAgICAweGVhLCAweDczLCAweGJlLCAweGRjLCAweDcyLCAweDE0LCAweDcxLCAweDNmLH0sIDM4 NCwKKysgICAgIHsweGY2LCAweDJjLCAweDQ2LCAweDMyLCAweDliLH0sIDQwLAorKyAgICAgfSwK KysgICAge05JRF9kZXNfZWRlM19jYmMsICAgICAgICAgIC8qIENvdW50ID0gNDEgZnJvbSBDTUFD R2VuVERFUzMucmVxICovCisrICAgICB7MHg4OSwgMHhiYywgMHhkOSwgMHg1MiwgMHhhOCwgMHhj OCwgMHhhYiwgMHgzNywKKysgICAgICAweDFhLCAweGY0LCAweDhhLCAweGM3LCAweGQwLCAweDcw LCAweDg1LCAweGQ1LAorKyAgICAgIDB4ZWYsIDB4ZjcsIDB4MDIsIDB4ZTYsIDB4ZDYsIDB4MmMs IDB4ZGMsIDB4MjMsfSwgMTkyLAorKyAgICAgezB4ZmEsIDB4NjIsIDB4MGMsIDB4MWIsIDB4YmUs IDB4OTcsIDB4MzEsIDB4OWUsCisrICAgICAgMHg5YSwgMHgwYywgMHhmMCwgMHg0OSwgMHgyMSwg MHgyMSwgMHhmNywgMHhhMiwKKysgICAgICAweDBlLCAweGIwLCAweDhhLCAweDZhLCAweDcwLCAw eDlkLCAweGNiLCAweGQwLAorKyAgICAgIDB4MGEsIDB4YWYsIDB4MzgsIDB4ZTQsIDB4ZjksIDB4 OWUsIDB4NzUsIDB4NGUsfSwgMjU2LAorKyAgICAgezB4OGYsIDB4NDksIDB4YTEsIDB4YjcsIDB4 ZDYsIDB4YWEsIDB4MjIsIDB4NTgsfSwgNjQsCisrICAgICB9LAorK307CisrCisraW50IEZJUFNf c2VsZnRlc3RfY21hYygpCisreworKyAgICBzaXplX3Qgbiwgb3V0bGVuOworKyAgICB1bnNpZ25l ZCBjaGFyIG91dFszMl07CisrICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcjsKKysgICAgQ01B Q19DVFggKmN0eCA9IENNQUNfQ1RYX25ldygpOworKyAgICBjb25zdCBDTUFDX0tBVCAqdDsKKysg ICAgaW50IHJ2ID0gMTsKKysKKysgICAgZm9yIChuID0gMCwgdCA9IHZlY3RvcjsgbiA8IHNpemVv Zih2ZWN0b3IpIC8gc2l6ZW9mKHZlY3RvclswXSk7IG4rKywgdCsrKSB7CisrICAgICAgICBjaXBo ZXIgPSBGSVBTX2dldF9jaXBoZXJieW5pZCh0LT5uaWQpOworKyAgICAgICAgaWYgKCFjaXBoZXIp IHsKKysgICAgICAgICAgICBydiA9IC0xOworKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAg ICAgfQorKyAgICAgICAgaWYgKCFDTUFDX0luaXQoY3R4LCB0LT5rZXksIHQtPmtleXNpemUgLyA4 LCBjaXBoZXIsIDApKSB7CisrICAgICAgICAgICAgcnYgPSAtMTsKKysgICAgICAgICAgICBnb3Rv IGVycjsKKysgICAgICAgIH0KKysgICAgICAgIGlmICghQ01BQ19VcGRhdGUoY3R4LCB0LT5tc2cs IHQtPm1zZ3NpemUgLyA4KSkgeworKyAgICAgICAgICAgIHJ2ID0gLTE7CisrICAgICAgICAgICAg Z290byBlcnI7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIUNNQUNfRmluYWwoY3R4LCBv dXQsICZvdXRsZW4pKSB7CisrICAgICAgICAgICAgcnYgPSAtMTsKKysgICAgICAgICAgICBnb3Rv IGVycjsKKysgICAgICAgIH0KKysgICAgICAgIENNQUNfQ1RYX2NsZWFudXAoY3R4KTsKKysKKysg ICAgICAgIGlmIChvdXRsZW4gPCB0LT5tYWNzaXplIC8gOCB8fCBtZW1jbXAob3V0LCB0LT5tYWMs IHQtPm1hY3NpemUgLyA4KSkgeworKyAgICAgICAgICAgIHJ2ID0gMDsKKysgICAgICAgIH0KKysg ICAgfQorKworKyBlcnI6CisrICAgIENNQUNfQ1RYX2ZyZWUoY3R4KTsKKysKKysgICAgaWYgKHJ2 ID09IC0xKSB7CisrICAgICAgICBydiA9IDA7CisrICAgIH0KKysgICAgaWYgKCFydikKKysgICAg ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQ01BQywgRklQU19SX1NFTEZURVNUX0ZB SUxFRCk7CisrCisrICAgIHJldHVybiBydjsKKyt9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2 MzU2MjU1MiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfZGVzX3Nl bGZ0ZXN0LmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjM1NjI1NTIgKzAxMDAKK0BAIC0wLDAgKzEs MTM4IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAg ZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgor KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisr ICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisr ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGlu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisrI2lmZGVmIE9QRU5TU0xf RklQUworKworK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy IGtleVsxNl07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKyAgICBj b25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07CisrfSB0ZXN0czJbXSA9IHsKKysgICAg eworKyAgICAgICAgeworKyAgICAgICAgMHg3YywgMHg0ZiwgMHg2ZSwgMHhmNywgMHhhMiwgMHgw NCwgMHgxNiwgMHhlYywKKysgICAgICAgICAgICAgICAgMHgwYiwgMHg2YiwgMHg3YywgMHg5ZSwg MHg1ZSwgMHgxOSwgMHhhNywgMHhjNH0sIHsKKysgICAgICAgIDB4MDYsIDB4YTcsIDB4ZDgsIDB4 NzksIDB4YWEsIDB4Y2UsIDB4NjksIDB4ZWZ9LCB7CisrICAgICAgICAweDRjLCAweDExLCAweDE3 LCAweDU1LCAweGJmLCAweGM0LCAweDRlLCAweGZkfQorKyAgICB9LCB7CisrICAgICAgICB7Cisr ICAgICAgICAweDVkLCAweDllLCAweDAxLCAweGQzLCAweDI1LCAweGM3LCAweDNlLCAweDM0LAor KyAgICAgICAgICAgICAgICAweDAxLCAweDE2LCAweDdjLCAweDg1LCAweDIzLCAweGRmLCAweGUw LCAweDY4fSwgeworKyAgICAgICAgMHg5YywgMHg1MCwgMHgwOSwgMHgwZiwgMHg1ZSwgMHg3ZCwg MHg2OSwgMHg3ZX0sIHsKKysgICAgMHhkMiwgMHgwYiwgMHgxOCwgMHhkZiwgMHhkOSwgMHgwZCwg MHg5ZSwgMHhmZn0sfQorK307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCB7CisrICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2V5WzI0XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRl eHRbOF07CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKKyt9IHRlc3Rz M1tdID0geworKyAgICB7CisrICAgICAgICB7CisrICAgICAgICAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKyAgICAgICAgICAgICAgICAweEZFLCAweERD LCAweEJBLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLAorKyAgICAgICAgICAgICAgICAw eDEyLCAweDM0LCAweDU2LCAweDc4LCAweDlhLCAweGJjLCAweGRlLCAweGYwfSwgeworKyAgICAg ICAgMHg4ZiwgMHg4ZiwgMHhiZiwgMHg5YiwgMHg1ZCwgMHg0OCwgMHhiNCwgMHgxY30sIHsKKysg ICAgMHg1OSwgMHg4YywgMHhlNSwgMHhkMywgMHg2YywgMHhhMiwgMHhlYSwgMHgxYn0sfSwgewor KyAgICAgICAgeworKyAgICAgICAgMHhEQywgMHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwg MHgxMCwgMHhGRSwKKysgICAgICAgICAgICAgICAgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4 OSwgMHhBQiwgMHhDRCwgMHhFRiwKKysgICAgICAgICAgICAgICAgMHhFRCwgMHgzOSwgMHhEOSwg MHg1MCwgMHhGQSwgMHg3NCwgMHhCQywgMHhDNH0sIHsKKysgICAgICAgIDB4MDEsIDB4MjMsIDB4 NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUZ9LCB7CisrMHgxMSwgMHgyNSwgMHhiMCwg MHgzNSwgMHhiZSwgMHhhMCwgMHg4MiwgMHg4Nn0sfSx9OworKworK3N0YXRpYyBpbnQgY29ycnVw dF9kZXM7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKCkKKyt7CisrICAgIGNvcnJ1cHRfZGVz ID0gMTsKKyt9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKKyt7CisrICAgIGludCBuLCBy ZXQgPSAwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2lu aXQoJmN0eCk7CisrICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5kIGNv bXBhcmUgdG8ga25vd24gYW5zd2VycyAqLworKyAgICBmb3IgKG4gPSAwOyBuIDwgMjsgKytuKSB7 CisrICAgICAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKKysKKysgICAgICAgIG1lbWNw eShwbGFpbnRleHQsIHRlc3RzMltuXS5wbGFpbnRleHQsIHNpemVvZihwbGFpbnRleHQpKTsKKysg ICAgICAgIGlmIChjb3JydXB0X2RlcykKKysgICAgICAgICAgICBwbGFpbnRleHRbMF0rKzsKKysg ICAgICAgIGlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9lY2IoKSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0czJbbl0ua2V5LCBOVUxMLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWludGV4dCwgdGVzdHMyW25dLmNpcGhlcnRleHQs IDgpKQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIEVuY3J5cHQv ZGVjcnlwdCB3aXRoIDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLworKyAgICBm b3IgKG4gPSAwOyBuIDwgMjsgKytuKSB7CisrICAgICAgICBpZiAoIWZpcHNfY2lwaGVyX3Rlc3Qo JmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRlc3RzM1tuXS5rZXksIE5VTEwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz dHMzW25dLnBsYWludGV4dCwgdGVzdHMzW25dLmNpcGhlcnRleHQsIDgpKQorKyAgICAgICAgICAg IGdvdG8gZXJyOworKyAgICB9CisrICAgIHJldCA9IDE7CisrIGVycjoKKysgICAgRVZQX0NJUEhF Ul9DVFhfY2xlYW51cCgmY3R4KTsKKysgICAgaWYgKHJldCA9PSAwKQorKyAgICAgICAgRklQU2Vy cihGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKwor KyAgICByZXR1cm4gcmV0OworK30KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19jdHIuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfZHJi Z19jdHIuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTYzNTYyNTUyICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCTIwMTUtMTItMDQgMTM6NTU6 NTEuOTYzNTYyNTUyICswMTAwCitAQCAtMCwwICsxLDQxNSBAQAorKy8qIGZpcHMvcmFuZC9maXBz X2RyYmdfY3RyLmMgKi8KKysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZl QG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4K KysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNl bnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNp bmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrc3RhdGljIHZvaWQgaW5jXzEyOChEUkJHX0NU Ul9DVFggKiBjY3R4KQorK3sKKysgICAgaW50IGk7CisrICAgIHVuc2lnbmVkIGNoYXIgYzsKKysg ICAgdW5zaWduZWQgY2hhciAqcCA9IGNjdHgtPlYgKyAxNTsKKysgICAgZm9yIChpID0gMDsgaSA8 IDE2OyBpKyspIHsKKysgICAgICAgIGMgPSAqcDsKKysgICAgICAgIGMrKzsKKysgICAgICAgICpw ID0gYzsKKysgICAgICAgIGlmIChjKQorKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIHAt LTsKKysgICAgfQorK30KKysKKytzdGF0aWMgdm9pZCBjdHJfWE9SKERSQkdfQ1RSX0NUWCAqIGNj dHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IGlubGVuKQorK3sKKysgICAgc2l6ZV90IGksIG47CisrICAgIC8qIEFueSB6ZXJvIHBhZGRpbmcg d2lsbCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcmVzdWx0IGFzIHdlCisrICAgICAqIGFyZSBYT1Jp bmcuIFNvIGp1c3QgcHJvY2VzcyBob3dldmVyIG11Y2ggaW5wdXQgd2UgaGF2ZS4KKysgICAgICov CisrCisrICAgIGlmICghaW4gfHwgIWlubGVuKQorKyAgICAgICAgcmV0dXJuOworKworKyAgICBp ZiAoaW5sZW4gPCBjY3R4LT5rZXlsZW4pCisrICAgICAgICBuID0gaW5sZW47CisrICAgIGVsc2UK KysgICAgICAgIG4gPSBjY3R4LT5rZXlsZW47CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCBuOyBp KyspCisrICAgICAgICBjY3R4LT5LW2ldIF49IGluW2ldOworKyAgICBpZiAoaW5sZW4gPD0gY2N0 eC0+a2V5bGVuKQorKyAgICAgICAgcmV0dXJuOworKworKyAgICBuID0gaW5sZW4gLSBjY3R4LT5r ZXlsZW47CisrICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKysgICAgaWYgKG4gPiAxNikK KysgICAgICAgIG4gPSAxNjsKKysgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrICAgICAg ICBjY3R4LT5WW2ldIF49IGluW2kgKyBjY3R4LT5rZXlsZW5dOworK30KKysKKysvKiBQcm9jZXNz IGEgY29tcGxldGUgYmxvY2sgdXNpbmcgQkNDIGFsZ29yaXRobSBvZiBTUFAgODAwLTkwIDEwLjQu MyAqLworKworK3N0YXRpYyB2b2lkIGN0cl9CQ0NfYmxvY2soRFJCR19DVFJfQ1RYICogY2N0eCwg dW5zaWduZWQgY2hhciAqb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqaW4pCisreworKyAgICBpbnQgaTsKKysgICAgZm9yIChpID0gMDsgaSA8IDE2 OyBpKyspCisrICAgICAgICBvdXRbaV0gXj0gaW5baV07CisrICAgIEFFU19lbmNyeXB0KG91dCwg b3V0LCAmY2N0eC0+ZGZfa3MpOworKyNpZiAwCisrICAgIGZwcmludGYoc3RkZXJyLCAiQkNDIGlu K291dFxuIik7CisrICAgIEJJT19kdW1wX2ZwKHN0ZGVyciwgaW4sIDE2KTsKKysgICAgQklPX2R1 bXBfZnAoc3RkZXJyLCBvdXQsIDE2KTsKKysjZW5kaWYKKyt9CisrCisrLyogSGFuZGxlIHNldmVy YWwgQkNDIG9wZXJhdGlvbnMgZm9yIGFzIG11Y2ggZGF0YSBhcyB3ZSBuZWVkIGZvciBLIGFuZCBY ICovCisrc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9ja3MoRFJCR19DVFJfQ1RYICogY2N0eCwgY29u c3QgdW5zaWduZWQgY2hhciAqaW4pCisreworKyAgICBjdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgt PktYLCBpbik7CisrICAgIGN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAxNiwgaW4pOwor KyAgICBpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQorKyAgICAgICAgY3RyX0JDQ19ibG9jayhjY3R4 LCBjY3R4LT5LWCArIDMyLCBpbik7CisrfQorKworKy8qIEluaXRpYWxpc2UgQkNDIGJsb2Nrczog dGhlc2UgaGF2ZSB0aGUgdmFsdWUgMCwxLDIgaW4gbGVmdG1vc3QgcG9zaXRpb25zOgorKyAqIHNl ZSAxMC40LjIgc3RhZ2UgNy4KKysgKi8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX2luaXQoRFJCR19D VFJfQ1RYICogY2N0eCkKKyt7CisrICAgIG1lbXNldChjY3R4LT5LWCwgMCwgNDgpOworKyAgICBt ZW1zZXQoY2N0eC0+Ymx0bXAsIDAsIDE2KTsKKysgICAgY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4 LT5LWCwgY2N0eC0+Ymx0bXApOworKyAgICBjY3R4LT5ibHRtcFszXSA9IDE7CisrICAgIGN0cl9C Q0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAxNiwgY2N0eC0+Ymx0bXApOworKyAgICBpZiAoY2N0 eC0+a2V5bGVuICE9IDE2KSB7CisrICAgICAgICBjY3R4LT5ibHRtcFszXSA9IDI7CisrICAgICAg ICBjdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGNjdHgtPmJsdG1wKTsKKysgICAg fQorK30KKysKKysvKiBQcm9jZXNzIHNldmVyYWwgYmxvY2tzIGludG8gQkNDIGFsZ29yaXRobSwg c29tZSBwb3NzaWJseSBwYXJ0aWFsICovCisrc3RhdGljIHZvaWQgY3RyX0JDQ191cGRhdGUoRFJC R19DVFJfQ1RYICogY2N0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQorK3sKKysgICAgaWYgKCFpbiB8fCAhaW5sZW4p CisrICAgICAgICByZXR1cm47CisrICAgIC8qIElmIHdlIGhhdmUgcGFydGlhbCBibG9jayBoYW5k bGUgaXQgZmlyc3QgKi8KKysgICAgaWYgKGNjdHgtPmJsdG1wX3BvcykgeworKyAgICAgICAgc2l6 ZV90IGxlZnQgPSAxNiAtIGNjdHgtPmJsdG1wX3BvczsKKysgICAgICAgIC8qIElmIHdlIG5vdyBo YXZlIGEgY29tcGxldGUgYmxvY2sgcHJvY2VzcyBpdCAqLworKyAgICAgICAgaWYgKGlubGVuID49 IGxlZnQpIHsKKysgICAgICAgICAgICBtZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9w b3MsIGluLCBsZWZ0KTsKKysgICAgICAgICAgICBjdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5i bHRtcCk7CisrICAgICAgICAgICAgY2N0eC0+Ymx0bXBfcG9zID0gMDsKKysgICAgICAgICAgICBp bmxlbiAtPSBsZWZ0OworKyAgICAgICAgICAgIGluICs9IGxlZnQ7CisrICAgICAgICB9CisrICAg IH0KKysgICAgLyogUHJvY2VzcyB6ZXJvIG9yIG1vcmUgY29tcGxldGUgYmxvY2tzICovCisrICAg IHdoaWxlIChpbmxlbiA+PSAxNikgeworKyAgICAgICAgY3RyX0JDQ19ibG9ja3MoY2N0eCwgaW4p OworKyAgICAgICAgaW4gKz0gMTY7CisrICAgICAgICBpbmxlbiAtPSAxNjsKKysgICAgfQorKyAg ICAvKiBDb3B5IGFueSByZW1haW5pbmcgcGFydGlhbCBibG9jayB0byB0aGUgdGVtcG9yYXJ5IGJ1 ZmZlciAqLworKyAgICBpZiAoaW5sZW4gPiAwKSB7CisrICAgICAgICBtZW1jcHkoY2N0eC0+Ymx0 bXAgKyBjY3R4LT5ibHRtcF9wb3MsIGluLCBpbmxlbik7CisrICAgICAgICBjY3R4LT5ibHRtcF9w b3MgKz0gaW5sZW47CisrICAgIH0KKyt9CisrCisrc3RhdGljIHZvaWQgY3RyX0JDQ19maW5hbChE UkJHX0NUUl9DVFggKiBjY3R4KQorK3sKKysgICAgaWYgKGNjdHgtPmJsdG1wX3BvcykgeworKyAg ICAgICAgbWVtc2V0KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCAwLCAxNiAtIGNjdHgt PmJsdG1wX3Bvcyk7CisrICAgICAgICBjdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7 CisrICAgIH0KKyt9CisrCisrc3RhdGljIHZvaWQgY3RyX2RmKERSQkdfQ1RSX0NUWCAqIGNjdHgs CisrICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGlu MWxlbiwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXpl X3QgaW4ybGVuLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjMs IHNpemVfdCBpbjNsZW4pCisreworKyAgICBzaXplX3QgaW5sZW47CisrICAgIHVuc2lnbmVkIGNo YXIgKnAgPSBjY3R4LT5ibHRtcDsKKysgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYzgwID0gMHg4 MDsKKysKKysgICAgY3RyX0JDQ19pbml0KGNjdHgpOworKyAgICBpZiAoIWluMSkKKysgICAgICAg IGluMWxlbiA9IDA7CisrICAgIGlmICghaW4yKQorKyAgICAgICAgaW4ybGVuID0gMDsKKysgICAg aWYgKCFpbjMpCisrICAgICAgICBpbjNsZW4gPSAwOworKyAgICBpbmxlbiA9IGluMWxlbiArIGlu MmxlbiArIGluM2xlbjsKKysgICAgLyogSW5pdGlhbGlzZSBMfHxOIGluIHRlbXBvcmFyeSBibG9j ayAqLworKyAgICAqcCsrID0gKGlubGVuID4+IDI0KSAmIDB4ZmY7CisrICAgICpwKysgPSAoaW5s ZW4gPj4gMTYpICYgMHhmZjsKKysgICAgKnArKyA9IChpbmxlbiA+PiA4KSAmIDB4ZmY7CisrICAg ICpwKysgPSBpbmxlbiAmIDB4ZmY7CisrICAgIC8qIE5CIGtleWxlbiBpcyBhdCBtb3N0IDMyIGJ5 dGVzICovCisrICAgICpwKysgPSAwOworKyAgICAqcCsrID0gMDsKKysgICAgKnArKyA9IDA7Cisr ICAgICpwID0gKHVuc2lnbmVkIGNoYXIpKChjY3R4LT5rZXlsZW4gKyAxNikgJiAweGZmKTsKKysg ICAgY2N0eC0+Ymx0bXBfcG9zID0gODsKKysgICAgY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4xLCBp bjFsZW4pOworKyAgICBjdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjIsIGluMmxlbik7CisrICAgIGN0 cl9CQ0NfdXBkYXRlKGNjdHgsIGluMywgaW4zbGVuKTsKKysgICAgY3RyX0JDQ191cGRhdGUoY2N0 eCwgJmM4MCwgMSk7CisrICAgIGN0cl9CQ0NfZmluYWwoY2N0eCk7CisrICAgIC8qIFNldCB1cCBr ZXkgSyAqLworKyAgICBBRVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgtPktYLCBjY3R4LT5rZXlsZW4g KiA4LCAmY2N0eC0+ZGZfa3hrcyk7CisrICAgIC8qIFggZm9sbG93cyBrZXkgSyAqLworKyAgICBB RVNfZW5jcnlwdChjY3R4LT5LWCArIGNjdHgtPmtleWxlbiwgY2N0eC0+S1gsICZjY3R4LT5kZl9r eGtzKTsKKysgICAgQUVTX2VuY3J5cHQoY2N0eC0+S1gsIGNjdHgtPktYICsgMTYsICZjY3R4LT5k Zl9reGtzKTsKKysgICAgaWYgKGNjdHgtPmtleWxlbiAhPSAxNikKKysgICAgICAgIEFFU19lbmNy eXB0KGNjdHgtPktYICsgMTYsIGNjdHgtPktYICsgMzIsICZjY3R4LT5kZl9reGtzKTsKKysjaWYg MAorKyAgICBmcHJpbnRmKHN0ZGVyciwgIk91dHB1dCBvZiBjdHJfZGY6XG4iKTsKKysgICAgQklP X2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICsgMTYpOworKyNlbmRpZgor K30KKysKKysvKiBOQiB0aGUgbm8tZGYgIFVwZGF0ZSBpbiBTUDgwMC05MCBzcGVjaWZpZXMgYSBj b25zdGFudCBpbnB1dCBsZW5ndGgKKysgKiBvZiBzZWVkbGVuLCBob3dldmVyIG90aGVyIHVzZXMg b2YgdGhpcyBhbGdvcml0aG0gcGFkIHRoZSBpbnB1dCB3aXRoCisrICogemVyb2VzIGlmIG5lY2Vz c2FyeSBhbmQgaGF2ZSB1cCB0byB0d28gcGFyYW1ldGVycyBYT1JlZCB0b2dldGhlciwKKysgKiBo YW5kbGUgYm90aCBjYXNlcyBpbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQuCisrICovCisrCisrc3Rh dGljIHZvaWQgY3RyX1VwZGF0ZShEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKKysg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qg bm9uY2VsZW4pCisreworKyAgICBEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7Cisr ICAgIC8qIGtzIGlzIGFscmVhZHkgc2V0dXAgZm9yIGNvcnJlY3Qga2V5ICovCisrICAgIGluY18x MjgoY2N0eCk7CisrICAgIEFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7 CisrICAgIC8qIElmIGtleWxlbiBsb25nZXIgdGhhbiAxMjggYml0cyBuZWVkIGV4dHJhIGVuY3J5 cHQgKi8KKysgICAgaWYgKGNjdHgtPmtleWxlbiAhPSAxNikgeworKyAgICAgICAgaW5jXzEyOChj Y3R4KTsKKysgICAgICAgIEFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPksgKyAxNiwgJmNjdHgt PmtzKTsKKysgICAgfQorKyAgICBpbmNfMTI4KGNjdHgpOworKyAgICBBRVNfZW5jcnlwdChjY3R4 LT5WLCBjY3R4LT5WLCAmY2N0eC0+a3MpOworKyAgICAvKiBJZiAxOTIgYml0IGtleSBwYXJ0IG9m IFYgaXMgb24gZW5kIG9mIEsgKi8KKysgICAgaWYgKGNjdHgtPmtleWxlbiA9PSAyNCkgeworKyAg ICAgICAgbWVtY3B5KGNjdHgtPlYgKyA4LCBjY3R4LT5WLCA4KTsKKysgICAgICAgIG1lbWNweShj Y3R4LT5WLCBjY3R4LT5LICsgMjQsIDgpOworKyAgICB9CisrCisrICAgIGlmIChkY3R4LT54Zmxh Z3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikgeworKyAgICAgICAgLyogSWYgbm8gaW5wdXQgcmV1 c2UgZXhpc3RpbmcgZGVyaXZlZCB2YWx1ZSAqLworKyAgICAgICAgaWYgKGluMSB8fCBub25jZSB8 fCBpbjIpCisrICAgICAgICAgICAgY3RyX2RmKGNjdHgsIGluMSwgaW4xbGVuLCBub25jZSwgbm9u Y2VsZW4sIGluMiwgaW4ybGVuKTsKKysgICAgICAgIC8qIElmIHRoaXMgYSByZXVzZSBpbnB1dCBp bjFsZW4gIT0gMCAqLworKyAgICAgICAgaWYgKGluMWxlbikKKysgICAgICAgICAgICBjdHJfWE9S KGNjdHgsIGNjdHgtPktYLCBkY3R4LT5zZWVkbGVuKTsKKysgICAgfSBlbHNlIHsKKysgICAgICAg IGN0cl9YT1IoY2N0eCwgaW4xLCBpbjFsZW4pOworKyAgICAgICAgY3RyX1hPUihjY3R4LCBpbjIs IGluMmxlbik7CisrICAgIH0KKysKKysgICAgQUVTX3NldF9lbmNyeXB0X2tleShjY3R4LT5LLCBk Y3R4LT5zdHJlbmd0aCwgJmNjdHgtPmtzKTsKKysjaWYgMAorKyAgICBmcHJpbnRmKHN0ZGVyciwg IksrViBhZnRlciB1cGRhdGUgaXM6XG4iKTsKKysgICAgQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4 LT5LLCBjY3R4LT5rZXlsZW4pOworKyAgICBCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPlYsIDE2 KTsKKysjZW5kaWYKKyt9CisrCisrc3RhdGljIGludCBkcmJnX2N0cl9pbnN0YW50aWF0ZShEUkJH X0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4sCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBz aXplX3QgcGVyc2xlbikKKyt7CisrICAgIERSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0 cjsKKysgICAgbWVtc2V0KGNjdHgtPkssIDAsIHNpemVvZihjY3R4LT5LKSk7CisrICAgIG1lbXNl dChjY3R4LT5WLCAwLCBzaXplb2YoY2N0eC0+VikpOworKyAgICBBRVNfc2V0X2VuY3J5cHRfa2V5 KGNjdHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOworKyAgICBjdHJfVXBkYXRlKGRj dHgsIGVudCwgZW50bGVuLCBwZXJzLCBwZXJzbGVuLCBub25jZSwgbm9uY2VsZW4pOworKyAgICBy ZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludCBkcmJnX2N0cl9yZXNlZWQoRFJCR19DVFggKmRj dHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50 LCBzaXplX3QgZW50bGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQorK3sKKysgICAgY3RyX1VwZGF0ZShkY3R4 LCBlbnQsIGVudGxlbiwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCk7CisrICAgIHJldHVybiAxOwor K30KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0 bGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq YWRpbiwgc2l6ZV90IGFkaW5sZW4pCisreworKyAgICBEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0 eC0+ZC5jdHI7CisrICAgIGlmIChhZGluICYmIGFkaW5sZW4pIHsKKysgICAgICAgIGN0cl9VcGRh dGUoZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7CisrICAgICAgICAvKiBU aGlzIG1lYW5zIHdlIHJldXNlIGRlcml2ZWQgdmFsdWUgKi8KKysgICAgICAgIGlmIChkY3R4LT54 ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikgeworKyAgICAgICAgICAgIGFkaW4gPSBOVUxM OworKyAgICAgICAgICAgIGFkaW5sZW4gPSAxOworKyAgICAgICAgfQorKyAgICB9IGVsc2UKKysg ICAgICAgIGFkaW5sZW4gPSAwOworKworKyAgICBmb3IgKDs7KSB7CisrICAgICAgICBpbmNfMTI4 KGNjdHgpOworKyAgICAgICAgaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYm ICFkY3R4LT5sYl92YWxpZCkgeworKyAgICAgICAgICAgIEFFU19lbmNyeXB0KGNjdHgtPlYsIGRj dHgtPmxiLCAmY2N0eC0+a3MpOworKyAgICAgICAgICAgIGRjdHgtPmxiX3ZhbGlkID0gMTsKKysg ICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChvdXRsZW4gPCAx NikgeworKyAgICAgICAgICAgIC8qIFVzZSBLIGFzIHRlbXAgc3BhY2UgYXMgaXQgd2lsbCBiZSB1 cGRhdGVkICovCisrICAgICAgICAgICAgQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNj dHgtPmtzKTsKKysgICAgICAgICAgICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGNj dHgtPkspKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICBtZW1jcHko b3V0LCBjY3R4LT5LLCBvdXRsZW4pOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQor KyAgICAgICAgQUVTX2VuY3J5cHQoY2N0eC0+Viwgb3V0LCAmY2N0eC0+a3MpOworKyAgICAgICAg aWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQorKyAgICAgICAgICAgIHJldHVy biAwOworKyAgICAgICAgb3V0ICs9IDE2OworKyAgICAgICAgb3V0bGVuIC09IDE2OworKyAgICAg ICAgaWYgKG91dGxlbiA9PSAwKQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAg IGN0cl9VcGRhdGUoZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7CisrCisr ICAgIHJldHVybiAxOworKworK30KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX3VuaW5zdGFudGlh dGUoRFJCR19DVFggKmRjdHgpCisreworKyAgICBtZW1zZXQoJmRjdHgtPmQuY3RyLCAwLCBzaXpl b2YoRFJCR19DVFJfQ1RYKSk7CisrICAgIHJldHVybiAxOworK30KKysKKytpbnQgZmlwc19kcmJn X2N0cl9pbml0KERSQkdfQ1RYICpkY3R4KQorK3sKKysgICAgRFJCR19DVFJfQ1RYICpjY3R4ID0g JmRjdHgtPmQuY3RyOworKworKyAgICBzaXplX3Qga2V5bGVuOworKworKyAgICBzd2l0Y2ggKGRj dHgtPnR5cGUpIHsKKysgICAgY2FzZSBOSURfYWVzXzEyOF9jdHI6CisrICAgICAgICBrZXlsZW4g PSAxNjsKKysgICAgICAgIGJyZWFrOworKworKyAgICBjYXNlIE5JRF9hZXNfMTkyX2N0cjoKKysg ICAgICAgIGtleWxlbiA9IDI0OworKyAgICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgTklEX2Fl c18yNTZfY3RyOgorKyAgICAgICAga2V5bGVuID0gMzI7CisrICAgICAgICBicmVhazsKKysKKysg ICAgZGVmYXVsdDoKKysgICAgICAgIHJldHVybiAtMjsKKysgICAgfQorKworKyAgICBkY3R4LT5p bnN0YW50aWF0ZSA9IGRyYmdfY3RyX2luc3RhbnRpYXRlOworKyAgICBkY3R4LT5yZXNlZWQgPSBk cmJnX2N0cl9yZXNlZWQ7CisrICAgIGRjdHgtPmdlbmVyYXRlID0gZHJiZ19jdHJfZ2VuZXJhdGU7 CisrICAgIGRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2N0cl91bmluc3RhbnRpYXRlOworKwor KyAgICBjY3R4LT5rZXlsZW4gPSBrZXlsZW47CisrICAgIGRjdHgtPnN0cmVuZ3RoID0ga2V5bGVu ICogODsKKysgICAgZGN0eC0+YmxvY2tsZW5ndGggPSAxNjsKKysgICAgZGN0eC0+c2VlZGxlbiA9 IGtleWxlbiArIDE2OworKworKyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9V U0VfREYpIHsKKysgICAgICAgIC8qIGRmIGluaXRpYWxpc2F0aW9uICovCisrICAgICAgICBzdGF0 aWMgdW5zaWduZWQgY2hhciBkZl9rZXlbMzJdID0geworKyAgICAgICAgICAgIDB4MDAsIDB4MDEs IDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisrICAgICAgICAgICAgMHgwOCwg MHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKysgICAgICAgICAgICAw eDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorKyAgICAgICAg ICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYKKysgICAg ICAgIH07CisrICAgICAgICAvKiBTZXQga2V5IHNjaGVkdWxlIGZvciBkZl9rZXkgKi8KKysgICAg ICAgIEFFU19zZXRfZW5jcnlwdF9rZXkoZGZfa2V5LCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmRm X2tzKTsKKysKKysgICAgICAgIGRjdHgtPm1pbl9lbnRyb3B5ID0gY2N0eC0+a2V5bGVuOworKyAg ICAgICAgZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrICAgICAgICBkY3R4 LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7CisrICAgICAgICBkY3R4LT5tYXhf bm9uY2UgPSBEUkJHX01BWF9MRU5HVEg7CisrICAgICAgICBkY3R4LT5tYXhfcGVycyA9IERSQkdf TUFYX0xFTkdUSDsKKysgICAgICAgIGRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOwor KyAgICB9IGVsc2UgeworKyAgICAgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zZWVkbGVu OworKyAgICAgICAgZGN0eC0+bWF4X2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOworKyAgICAgICAg LyogTm9uY2Ugbm90IHVzZWQgKi8KKysgICAgICAgIGRjdHgtPm1pbl9ub25jZSA9IDA7CisrICAg ICAgICBkY3R4LT5tYXhfbm9uY2UgPSAwOworKyAgICAgICAgZGN0eC0+bWF4X3BlcnMgPSBkY3R4 LT5zZWVkbGVuOworKyAgICAgICAgZGN0eC0+bWF4X2FkaW4gPSBkY3R4LT5zZWVkbGVuOworKyAg ICB9CisrCisrICAgIGRjdHgtPm1heF9yZXF1ZXN0ID0gMSA8PCAxNjsKKysgICAgZGN0eC0+cmVz ZWVkX2ludGVydmFsID0gMSA8PCAyNDsKKysKKysgICAgcmV0dXJuIDE7CisrfQorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYy5maXBzIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjM1 NjI1NTIgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFz aC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTYzNTYyNTUyICswMTAwCitAQCAtMCwwICsxLDM1OCBA QAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfaGFzaC5jICovCisrLyogV3JpdHRlbiBieSBEciBT dGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICog cHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK KysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisr ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysj ZGVmaW5lIE9QRU5TU0xfRklQU0FQSQorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRl ICJmaXBzX3JhbmRfbGNsLmgiCisrCisrLyogVGhpcyBpcyBIYXNoX2RmIGZyb20gU1AgODAwLTkw IDEwLjQuMSAqLworKworK3N0YXRpYyBpbnQgaGFzaF9kZihEUkJHX0NUWCAqZGN0eCwgdW5zaWdu ZWQgY2hhciAqb3V0LAorKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpp bjEsIHNpemVfdCBpbjFsZW4sCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmluMiwgc2l6ZV90IGluMmxlbiwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBjaGFyICppbjQsIHNpemVfdCBpbjRsZW4pCisreworKyAgICBFVlBfTURfQ1RYICpt Y3R4ID0gJmRjdHgtPmQuaGFzaC5tY3R4OworKyAgICB1bnNpZ25lZCBjaGFyICp2dG1wID0gZGN0 eC0+ZC5oYXNoLnZ0bXA7CisrICAgIHVuc2lnbmVkIGNoYXIgdG1wWzZdOworKyAgICAvKiBTdGFu ZGFyZCBvbmx5IGV2ZXIgbmVlZHMgc2VlZGxlbiBieXRlcyB3aGljaCBpcyBhbHdheXMgbGVzcyB0 aGFuCisrICAgICAqIG1heGltdW0gcGVybWl0dGVkIHNvIG5vIG5lZWQgdG8gY2hlY2sgbGVuZ3Ro LgorKyAgICAgKi8KKysgICAgc2l6ZV90IG91dGxlbiA9IGRjdHgtPnNlZWRsZW47CisrICAgIHRt cFswXSA9IDE7CisrICAgIHRtcFsxXSA9ICgob3V0bGVuICogOCkgPj4gMjQpICYgMHhmZjsKKysg ICAgdG1wWzJdID0gKChvdXRsZW4gKiA4KSA+PiAxNikgJiAweGZmOworKyAgICB0bXBbM10gPSAo KG91dGxlbiAqIDgpID4+IDgpICYgMHhmZjsKKysgICAgdG1wWzRdID0gKG91dGxlbiAqIDgpICYg MHhmZjsKKysgICAgaWYgKCFpbjEpIHsKKysgICAgICAgIHRtcFs1XSA9ICh1bnNpZ25lZCBjaGFy KWluMWxlbjsKKysgICAgICAgIGluMSA9IHRtcCArIDU7CisrICAgICAgICBpbjFsZW4gPSAxOwor KyAgICB9CisrICAgIGZvciAoOzspIHsKKysgICAgICAgIGlmICghRklQU19kaWdlc3Rpbml0KG1j dHgsIGRjdHgtPmQuaGFzaC5tZCkpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBp ZiAoIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIHRtcCwgNSkpCisrICAgICAgICAgICAgcmV0dXJu IDA7CisrICAgICAgICBpZiAoaW4xICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjEsIGlu MWxlbikpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoaW4yICYmICFGSVBT X2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjIsIGluMmxlbikpCisrICAgICAgICAgICAgcmV0dXJuIDA7 CisrICAgICAgICBpZiAoaW4zICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjMsIGluM2xl bikpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoaW40ICYmICFGSVBTX2Rp Z2VzdHVwZGF0ZShtY3R4LCBpbjQsIGluNGxlbikpCisrICAgICAgICAgICAgcmV0dXJuIDA7Cisr ICAgICAgICBpZiAob3V0bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpIHsKKysgICAgICAgICAgICBp ZiAoIUZJUFNfZGlnZXN0ZmluYWwobWN0eCwgdnRtcCwgTlVMTCkpCisrICAgICAgICAgICAgICAg IHJldHVybiAwOworKyAgICAgICAgICAgIG1lbWNweShvdXQsIHZ0bXAsIG91dGxlbik7CisrICAg ICAgICAgICAgT1BFTlNTTF9jbGVhbnNlKHZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysgICAg ICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIH0gZWxzZSBpZiAoIUZJUFNfZGlnZXN0ZmluYWwo bWN0eCwgb3V0LCBOVUxMKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysKKysgICAgICAgIG91 dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysgICAgICAgIGlmIChvdXRsZW4gPT0gMCkKKysg ICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIHRtcFswXSsrOworKyAgICAgICAgb3V0ICs9 IGRjdHgtPmJsb2NrbGVuZ3RoOworKyAgICB9CisrfQorKworKy8qIEFkZCBhbiB1bnNpZ25lZCBi dWZmZXIgdG8gdGhlIGJ1ZiB2YWx1ZSwgc3RvcmluZyB0aGUgcmVzdWx0IGluIGJ1Zi4gRm9yCisr ICogdGhpcyBhbGdvcml0aG0gdGhlIGxlbmd0aCBvZiBpbnB1dCBuZXZlciBleGNlZWRzIHRoZSBz ZWVkIGxlbmd0aC4KKysgKi8KKysKKytzdGF0aWMgdm9pZCBjdHhfYWRkX2J1ZihEUkJHX0NUWCAq ZGN0eCwgdW5zaWduZWQgY2hhciAqYnVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCisreworKyAgICBzaXplX3QgaSA9IGlubGVuOwor KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxOworKyAgICB1bnNpZ25lZCBjaGFyIGMsICpwOwor KyAgICBwID0gYnVmICsgZGN0eC0+c2VlZGxlbjsKKysgICAgcSA9IGluICsgaW5sZW47CisrCisr ICAgIE9QRU5TU0xfYXNzZXJ0KGkgPD0gZGN0eC0+c2VlZGxlbik7CisrCisrICAgIC8qIFNwZWNp YWwgY2FzZTogemVybyBsZW5ndGgsIGp1c3QgaW5jcmVtZW50IGJ1ZmZlciAqLworKyAgICBpZiAo aSkKKysgICAgICAgIGMgPSAwOworKyAgICBlbHNlCisrICAgICAgICBjID0gMTsKKysKKysgICAg d2hpbGUgKGkpIHsKKysgICAgICAgIGludCByOworKyAgICAgICAgcC0tOworKyAgICAgICAgcS0t OworKyAgICAgICAgciA9ICpwICsgKnEgKyBjOworKyAgICAgICAgLyogQ2FycnkgKi8KKysgICAg ICAgIGlmIChyID4gMHhmZikKKysgICAgICAgICAgICBjID0gMTsKKysgICAgICAgIGVsc2UKKysg ICAgICAgICAgICBjID0gMDsKKysgICAgICAgICpwID0gciAmIDB4ZmY7CisrICAgICAgICBpLS07 CisrICAgIH0KKysKKysgICAgaSA9IGRjdHgtPnNlZWRsZW4gLSBpbmxlbjsKKysKKysgICAgLyog SWYgbm90IGFkZGluZyB3aG9sZSBidWZmZXIgaGFuZGxlIGZpbmFsIGNhcnJpZXMgKi8KKysgICAg aWYgKGMgJiYgaSkgeworKyAgICAgICAgZG8geworKyAgICAgICAgICAgIHAtLTsKKysgICAgICAg ICAgICBjID0gKnA7CisrICAgICAgICAgICAgYysrOworKyAgICAgICAgICAgICpwID0gYzsKKysg ICAgICAgICAgICBpZiAoYykKKysgICAgICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfSB3 aGlsZSAoaS0tKTsKKysgICAgfQorK30KKysKKysvKiBGaW5hbGlzZSBhbmQgYWRkIGhhc2ggdG8g ViAqLworKworK3N0YXRpYyBpbnQgY3R4X2FkZF9tZChEUkJHX0NUWCAqZGN0eCkKKyt7CisrICAg IGlmICghRklQU19kaWdlc3RmaW5hbCgmZGN0eC0+ZC5oYXNoLm1jdHgsIGRjdHgtPmQuaGFzaC52 dG1wLCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBjdHhfYWRkX2J1ZihkY3R4LCBk Y3R4LT5kLmhhc2guViwgZGN0eC0+ZC5oYXNoLnZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysg ICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQgaGFzaF9nZW4oRFJCR19DVFggKmRjdHgs IHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbikKKyt7CisrICAgIERSQkdfSEFTSF9D VFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKyAgICBpZiAob3V0bGVuID09IDApCisrICAgICAg ICByZXR1cm4gMTsKKysgICAgbWVtY3B5KGhjdHgtPnZ0bXAsIGhjdHgtPlYsIGRjdHgtPnNlZWRs ZW4pOworKyAgICBmb3IgKDs7KSB7CisrICAgICAgICBGSVBTX2RpZ2VzdGluaXQoJmhjdHgtPm1j dHgsIGhjdHgtPm1kKTsKKysgICAgICAgIEZJUFNfZGlnZXN0dXBkYXRlKCZoY3R4LT5tY3R4LCBo Y3R4LT52dG1wLCBkY3R4LT5zZWVkbGVuKTsKKysgICAgICAgIGlmICghKGRjdHgtPnhmbGFncyAm IERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpIHsKKysgICAgICAgICAgICBGSVBT X2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBkY3R4LT5sYiwgTlVMTCk7CisrICAgICAgICAgICAg ZGN0eC0+bGJfdmFsaWQgPSAxOworKyAgICAgICAgfSBlbHNlIGlmIChvdXRsZW4gPCBkY3R4LT5i bG9ja2xlbmd0aCkgeworKyAgICAgICAgICAgIEZJUFNfZGlnZXN0ZmluYWwoJmhjdHgtPm1jdHgs IGhjdHgtPnZ0bXAsIE5VTEwpOworKyAgICAgICAgICAgIGlmICghZmlwc19kcmJnX2Nwcm5nX3Rl c3QoZGN0eCwgaGN0eC0+dnRtcCkpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAg ICAgICAgIG1lbWNweShvdXQsIGhjdHgtPnZ0bXAsIG91dGxlbik7CisrICAgICAgICAgICAgcmV0 dXJuIDE7CisrICAgICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIEZJUFNfZGlnZXN0ZmluYWwo JmhjdHgtPm1jdHgsIG91dCwgTlVMTCk7CisrICAgICAgICAgICAgaWYgKCFmaXBzX2RyYmdfY3By bmdfdGVzdChkY3R4LCBvdXQpKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAg ICAgICBvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7CisrICAgICAgICAgICAgaWYgKG91dGxl biA9PSAwKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgICAgICBvdXQgKz0g ZGN0eC0+YmxvY2tsZW5ndGg7CisrICAgICAgICB9CisrICAgICAgICBjdHhfYWRkX2J1ZihkY3R4 LCBoY3R4LT52dG1wLCBOVUxMLCAwKTsKKysgICAgfQorK30KKysKKytzdGF0aWMgaW50IGRyYmdf aGFzaF9pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNl LCBzaXplX3Qgbm9uY2VfbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3RyX2xlbikKKyt7CisrICAgIERSQkdf SEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKyAgICBpZiAoIWhhc2hfZGYoZGN0eCwg aGN0eC0+ViwKKysgICAgICAgICAgICAgICAgIGVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNlX2xl biwgcHN0ciwgcHN0cl9sZW4sIE5VTEwsIDApKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlm ICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLAorKyAgICAgICAgICAgICAgICAgTlVMTCwgMCwgaGN0 eC0+ViwgZGN0eC0+c2VlZGxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCisrICAgICAgICByZXR1cm4g MDsKKysKKysjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCisrICAgIGZwcmludGYoc3RkZXJyLCAiVitD IGFmdGVyIGluc3RhbnRpYXRlOlxuIik7CisrICAgIGhleHByaW50KHN0ZGVyciwgaGN0eC0+Viwg ZGN0eC0+c2VlZGxlbik7CisrICAgIGhleHByaW50KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+c2Vl ZGxlbik7CisrI2VuZGlmCisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGRyYmdf aGFzaF9yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xl bikKKyt7CisrICAgIERSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKyAgICAv KiBWIGFib3V0IHRvIGJlIHVwZGF0ZWQgc28gdXNlIEMgYXMgb3V0cHV0IGluc3RlYWQgKi8KKysg ICAgaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsCisrICAgICAgICAgICAgICAgICBOVUxMLCAx LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAorKyAgICAgICAgICAgICAgICAgZW50LCBlbnRfbGVu LCBhZGluLCBhZGluX2xlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgbWVtY3B5KGhjdHgt PlYsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOworKyAgICBpZiAoIWhhc2hfZGYoZGN0eCwgaGN0 eC0+QywgTlVMTCwgMCwKKysgICAgICAgICAgICAgICAgIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4s IE5VTEwsIDAsIE5VTEwsIDApKQorKyAgICAgICAgcmV0dXJuIDA7CisrI2lmZGVmIEhBU0hfRFJC R19UUkFDRQorKyAgICBmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciByZXNlZWQ6XG4iKTsKKysg ICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysgICAgaGV4cHJp bnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysjZW5kaWYKKysgICAgcmV0dXJu IDE7CisrfQorKworK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6 ZV90IG91dGxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCisreworKyAgICBEUkJHX0hBU0hfQ1RYICpo Y3R4ID0gJmRjdHgtPmQuaGFzaDsKKysgICAgRVZQX01EX0NUWCAqbWN0eCA9ICZoY3R4LT5tY3R4 OworKyAgICB1bnNpZ25lZCBjaGFyIHRtcFs0XTsKKysgICAgaWYgKGFkaW4gJiYgYWRpbl9sZW4p IHsKKysgICAgICAgIHRtcFswXSA9IDI7CisrICAgICAgICBpZiAoIUZJUFNfZGlnZXN0aW5pdCht Y3R4LCBoY3R4LT5tZCkpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoIUVW UF9EaWdlc3RVcGRhdGUobWN0eCwgdG1wLCAxKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysg ICAgICAgIGlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVu KSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGlmICghRVZQX0RpZ2VzdFVwZGF0 ZShtY3R4LCBhZGluLCBhZGluX2xlbikpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAg ICBpZiAoIWN0eF9hZGRfbWQoZGN0eCkpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0K KysgICAgaWYgKCFoYXNoX2dlbihkY3R4LCBvdXQsIG91dGxlbikpCisrICAgICAgICByZXR1cm4g MDsKKysKKysgICAgdG1wWzBdID0gMzsKKysgICAgaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwg aGN0eC0+bWQpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICghRVZQX0RpZ2VzdFVwZGF0 ZShtY3R4LCB0bXAsIDEpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICghRVZQX0RpZ2Vz dFVwZGF0ZShtY3R4LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKSkKKysgICAgICAgIHJldHVybiAw OworKworKyAgICBpZiAoIWN0eF9hZGRfbWQoZGN0eCkpCisrICAgICAgICByZXR1cm4gMDsKKysK KysgICAgY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7 CisrCisrICAgIHRtcFswXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAyNCkgJiAweGZmOwor KyAgICB0bXBbMV0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gMTYpICYgMHhmZjsKKysgICAg dG1wWzJdID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDgpICYgMHhmZjsKKysgICAgdG1wWzNd ID0gZGN0eC0+cmVzZWVkX2NvdW50ZXIgJiAweGZmOworKyAgICBjdHhfYWRkX2J1ZihkY3R4LCBo Y3R4LT5WLCB0bXAsIDQpOworKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKKysgICAgZnByaW50Zihz dGRlcnIsICJWK0MgYWZ0ZXIgZ2VuZXJhdGU6XG4iKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBo Y3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBk Y3R4LT5zZWVkbGVuKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBp bnQgZHJiZ19oYXNoX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisreworKyAgICBFVlBf TURfQ1RYX2NsZWFudXAoJmRjdHgtPmQuaGFzaC5tY3R4KTsKKysgICAgT1BFTlNTTF9jbGVhbnNl KCZkY3R4LT5kLmhhc2gsIHNpemVvZihEUkJHX0hBU0hfQ1RYKSk7CisrICAgIHJldHVybiAxOwor K30KKysKKytpbnQgZmlwc19kcmJnX2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0eCkKKyt7CisrICAg IGNvbnN0IEVWUF9NRCAqbWQ7CisrICAgIERSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5o YXNoOworKyAgICBtZCA9IEZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGRjdHgtPnR5cGUpOworKyAgICBp ZiAoIW1kKQorKyAgICAgICAgcmV0dXJuIC0yOworKyAgICBzd2l0Y2ggKGRjdHgtPnR5cGUpIHsK KysgICAgY2FzZSBOSURfc2hhMToKKysgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTI4OworKyAg ICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgTklEX3NoYTIyNDoKKysgICAgICAgIGRjdHgtPnN0 cmVuZ3RoID0gMTkyOworKyAgICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAg ICBkY3R4LT5zdHJlbmd0aCA9IDI1NjsKKysgICAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAg IGRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX2luc3RhbnRpYXRlOworKyAgICBkY3R4LT5y ZXNlZWQgPSBkcmJnX2hhc2hfcmVzZWVkOworKyAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaGFz aF9nZW5lcmF0ZTsKKysgICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaGFzaF91bmluc3Rh bnRpYXRlOworKworKyAgICBkY3R4LT5kLmhhc2gubWQgPSBtZDsKKysgICAgRVZQX01EX0NUWF9p bml0KCZoY3R4LT5tY3R4KTsKKysKKysgICAgLyogVGhlc2UgYXJlIHRha2VuIGZyb20gU1AgODAw LTkwIDEwLjEgdGFibGUgMiAqLworKworKyAgICBkY3R4LT5ibG9ja2xlbmd0aCA9IE1fRVZQX01E X3NpemUobWQpOworKyAgICBpZiAoZGN0eC0+YmxvY2tsZW5ndGggPiAzMikKKysgICAgICAgIGRj dHgtPnNlZWRsZW4gPSAxMTE7CisrICAgIGVsc2UKKysgICAgICAgIGRjdHgtPnNlZWRsZW4gPSA1 NTsKKysKKysgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7CisrICAg IGRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOworKworKyAgICBkY3R4LT5taW5f bm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7CisrICAgIGRjdHgtPm1heF9ub25jZSA9IERS QkdfTUFYX0xFTkdUSDsKKysKKysgICAgZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7 CisrICAgIGRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOworKworKyAgICBkY3R4LT5t YXhfcmVxdWVzdCA9IDEgPDwgMTY7CisrICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDEgPDwg MjQ7CisrCisrICAgIHJldHVybiAxOworK30KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0 by9maXBzL2ZpcHNfZHJiZ19obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfaG1hYy5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJn X2htYWMuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTYzNTYyNTUyICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYwkyMDE1LTEyLTA0IDEzOjU1 OjUxLjk2MzU2MjU1MiArMDEwMAorQEAgLTAsMCArMSwyNzAgQEAKKysvKiBmaXBzL3JhbmQvZmlw c19kcmJnX2htYWMuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3Rl dmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9u LgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxp Y2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisr c3RhdGljIGludCBkcmJnX2htYWNfdXBkYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4s CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwg c2l6ZV90IGluMmxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuKQorK3sKKysgICAgc3RhdGljIHVuc2lnbmVkIGNo YXIgYzAgPSAwLCBjMSA9IDE7CisrICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5o bWFjOworKyAgICBITUFDX0NUWCAqaGN0eCA9ICZobWFjLT5oY3R4OworKworKyAgICBpZiAoIUhN QUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5V TEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1h Yy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICgh SE1BQ19VcGRhdGUoaGN0eCwgJmMwLCAxKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAo aW4xbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEsIGluMWxlbikpCisrICAgICAgICByZXR1 cm4gMDsKKysgICAgaWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4yLCBpbjJsZW4p KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChpbjNsZW4gJiYgIUhNQUNfVXBkYXRlKGhj dHgsIGluMywgaW4zbGVuKSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICBpZiAoIUhNQUNf RmluYWwoaGN0eCwgaG1hYy0+SywgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAg aWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMt Pm1kLCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoIUhNQUNfVXBkYXRlKGhj dHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysgICAgICAgIHJldHVybiAwOworKwor KyAgICBpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCisrICAgICAgICByZXR1 cm4gMDsKKysKKysgICAgaWYgKCFpbjFsZW4gJiYgIWluMmxlbiAmJiAhaW4zbGVuKQorKyAgICAg ICAgcmV0dXJuIDE7CisrCisrICAgIGlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRj dHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysg ICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisr ICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCAmYzEsIDEpKQor KyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChpbjFsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgs IGluMSwgaW4xbGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoaW4ybGVuICYmICFI TUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAg aWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQorKyAgICAgICAg cmV0dXJuIDA7CisrCisrICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkK KysgICAgICAgIHJldHVybiAwOworKworKyAgICBpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFj LT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQorKyAgICAgICAgcmV0dXJu IDA7CisrICAgIGlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5n dGgpKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBo bWFjLT5WLCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICByZXR1cm4gMTsKKysK Kyt9CisrCisrc3RhdGljIGludCBkcmJnX2htYWNfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq ZW50LCBzaXplX3QgZW50X2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xlbiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwc3RyLCBzaXplX3Qg cHN0cl9sZW4pCisreworKyAgICBEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsK KysgICAgbWVtc2V0KGhtYWMtPkssIDAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysgICAgbWVtc2V0 KGhtYWMtPlYsIDEsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysgICAgaWYgKCFkcmJnX2htYWNfdXBk YXRlKGRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBlbnQsIGVudF9sZW4sIG5vbmNl LCBub25jZV9sZW4sIHBzdHIsIHBzdHJfbGVuKSkKKysgICAgICAgIHJldHVybiAwOworKworKyNp ZmRlZiBITUFDX0RSQkdfVFJBQ0UKKysgICAgZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgaW5z dGFudGlhdGU6XG4iKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5LLCBobWFjLT5ibG9j a2xlbmd0aCk7CisrICAgIGhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2tsZW5n dGgpOworKyNlbmRpZgorKyAgICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludCBkcmJnX2ht YWNfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4p CisreworKyAgICBpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgZW50LCBlbnRfbGVuLCBhZGlu LCBhZGluX2xlbiwgTlVMTCwgMCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysjaWZkZWYgSE1B Q19EUkJHX1RSQUNFCisrICAgIHsKKysgICAgICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0 eC0+ZC5obWFjOworKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgcmVzZWVkOlxu Iik7CisrICAgICAgICBoZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJsb2NrbGVuZ3Ro KTsKKysgICAgICAgIGhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2tsZW5ndGgp OworKyAgICB9CisrI2VuZGlmCisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGRy YmdfaG1hY19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5f bGVuKQorK3sKKysgICAgRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7CisrICAg IEhNQUNfQ1RYICpoY3R4ID0gJmhtYWMtPmhjdHg7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KlZ0bXAgPSBobWFjLT5WOworKyAgICBpZiAoYWRpbl9sZW4gJiYgIWRyYmdfaG1hY191cGRhdGUo ZGN0eCwgYWRpbiwgYWRpbl9sZW4sIE5VTEwsIDAsIE5VTEwsIDApKQorKyAgICAgICAgcmV0dXJu IDA7CisrICAgIGZvciAoOzspIHsKKysgICAgICAgIGlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGht YWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCisrICAgICAgICAgICAg cmV0dXJuIDA7CisrICAgICAgICBpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIFZ0bXAsIGRjdHgtPmJs b2NrbGVuZ3RoKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGlmICghKGRjdHgt PnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpIHsKKysgICAgICAg ICAgICBpZiAoIUhNQUNfRmluYWwoaGN0eCwgZGN0eC0+bGIsIE5VTEwpKQorKyAgICAgICAgICAg ICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICBkY3R4LT5sYl92YWxpZCA9IDE7CisrICAgICAg ICAgICAgVnRtcCA9IGRjdHgtPmxiOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAg fSBlbHNlIGlmIChvdXRsZW4gPiBkY3R4LT5ibG9ja2xlbmd0aCkgeworKyAgICAgICAgICAgIGlm ICghSE1BQ19GaW5hbChoY3R4LCBvdXQsIE5VTEwpKQorKyAgICAgICAgICAgICAgICByZXR1cm4g MDsKKysgICAgICAgICAgICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCisr ICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgIFZ0bXAgPSBvdXQ7CisrICAg ICAgICB9IGVsc2UgeworKyAgICAgICAgICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5W LCBOVUxMKSkKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgaWYgKCFm aXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBobWFjLT5WKSkKKysgICAgICAgICAgICAgICAgcmV0 dXJuIDA7CisrICAgICAgICAgICAgbWVtY3B5KG91dCwgaG1hYy0+Viwgb3V0bGVuKTsKKysgICAg ICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgICAgIG91dCArPSBkY3R4LT5ibG9ja2xl bmd0aDsKKysgICAgICAgIG91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysgICAgfQorKyAg ICBpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sIE5VTEwsIDAsIE5V TEwsIDApKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIHJldHVybiAxOworK30KKysKKytz dGF0aWMgaW50IGRyYmdfaG1hY191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQorK3sKKysg ICAgSE1BQ19DVFhfY2xlYW51cCgmZGN0eC0+ZC5obWFjLmhjdHgpOworKyAgICBPUEVOU1NMX2Ns ZWFuc2UoJmRjdHgtPmQuaG1hYywgc2l6ZW9mKERSQkdfSE1BQ19DVFgpKTsKKysgICAgcmV0dXJu IDE7CisrfQorKworK2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KQorK3sK KysgICAgY29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrICAgIERSQkdfSE1BQ19DVFggKmhjdHgg PSAmZGN0eC0+ZC5obWFjOworKyAgICBkY3R4LT5zdHJlbmd0aCA9IDI1NjsKKysgICAgc3dpdGNo IChkY3R4LT50eXBlKSB7CisrICAgIGNhc2UgTklEX2htYWNXaXRoU0hBMToKKysgICAgICAgIG1k ID0gRVZQX3NoYTEoKTsKKysgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTI4OworKyAgICAgICAg YnJlYWs7CisrCisrICAgIGNhc2UgTklEX2htYWNXaXRoU0hBMjI0OgorKyAgICAgICAgbWQgPSBF VlBfc2hhMjI0KCk7CisrICAgICAgICBkY3R4LT5zdHJlbmd0aCA9IDE5MjsKKysgICAgICAgIGJy ZWFrOworKworKyAgICBjYXNlIE5JRF9obWFjV2l0aFNIQTI1NjoKKysgICAgICAgIG1kID0gRVZQ X3NoYTI1NigpOworKyAgICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgTklEX2htYWNXaXRoU0hB Mzg0OgorKyAgICAgICAgbWQgPSBFVlBfc2hhMzg0KCk7CisrICAgICAgICBicmVhazsKKysKKysg ICAgY2FzZSBOSURfaG1hY1dpdGhTSEE1MTI6CisrICAgICAgICBtZCA9IEVWUF9zaGE1MTIoKTsK KysgICAgICAgIGJyZWFrOworKworKyAgICBkZWZhdWx0OgorKyAgICAgICAgZGN0eC0+c3RyZW5n dGggPSAwOworKyAgICAgICAgcmV0dXJuIC0yOworKyAgICB9CisrICAgIGRjdHgtPmluc3RhbnRp YXRlID0gZHJiZ19obWFjX2luc3RhbnRpYXRlOworKyAgICBkY3R4LT5yZXNlZWQgPSBkcmJnX2ht YWNfcmVzZWVkOworKyAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaG1hY19nZW5lcmF0ZTsKKysg ICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaG1hY191bmluc3RhbnRpYXRlOworKyAgICBI TUFDX0NUWF9pbml0KCZoY3R4LT5oY3R4KTsKKysgICAgaGN0eC0+bWQgPSBtZDsKKysgICAgZGN0 eC0+YmxvY2tsZW5ndGggPSBNX0VWUF9NRF9zaXplKG1kKTsKKysgICAgZGN0eC0+c2VlZGxlbiA9 IE1fRVZQX01EX3NpemUobWQpOworKworKyAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnN0 cmVuZ3RoIC8gODsKKysgICAgZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7Cisr CisrICAgIGRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKKysgICAgZGN0 eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOworKworKyAgICBkY3R4LT5tYXhfcGVycyA9 IERSQkdfTUFYX0xFTkdUSDsKKysgICAgZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7 CisrCisrICAgIGRjdHgtPm1heF9yZXF1ZXN0ID0gMSA8PCAxNjsKKysgICAgZGN0eC0+cmVzZWVk X2ludGVydmFsID0gMSA8PCAyNDsKKysKKysgICAgcmV0dXJuIDE7CisrfQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRv L2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjQ1NjI1NzUg KzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMJMjAx NS0xMi0wNCAxMzo1NTo1MS45NjQ1NjI1NzUgKzAxMDAKK0BAIC0wLDAgKzEsNTUzIEBACisrLyog V3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRo ZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHly aWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K KysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y bXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92 aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysg KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysg KiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NM IFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICog ICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBl cm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgor KyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw c19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKyNpbmNsdWRlICJmaXBzX3JhbmRf bGNsLmgiCisrCisrLyogU3VwcG9ydCBmcmFtZXdvcmsgZm9yIFNQODAwLTkwIERSQkdzICovCisr CisraW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQg aW50IGZsYWdzKQorK3sKKysgICAgaW50IHJ2OworKyAgICBtZW1zZXQoZGN0eCwgMCwgc2l6ZW9m KERSQkdfQ1RYKSk7CisrICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElT RUQ7CisrICAgIGRjdHgtPnhmbGFncyA9IGZsYWdzOworKyAgICBkY3R4LT50eXBlID0gdHlwZTsK KysKKysgICAgZGN0eC0+aWZsYWdzID0gMDsKKysgICAgZGN0eC0+ZW50cm9weV9ibG9ja2xlbiA9 IDA7CisrICAgIGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOworKyAgICBkY3R4LT5oZWFsdGhf Y2hlY2tfaW50ZXJ2YWwgPSBEUkJHX0hFQUxUSF9JTlRFUlZBTDsKKysKKysgICAgcnYgPSBmaXBz X2RyYmdfaGFzaF9pbml0KGRjdHgpOworKworKyAgICBpZiAocnYgPT0gLTIpCisrICAgICAgICBy diA9IGZpcHNfZHJiZ19jdHJfaW5pdChkY3R4KTsKKysgICAgaWYgKHJ2ID09IC0yKQorKyAgICAg ICAgcnYgPSBmaXBzX2RyYmdfaG1hY19pbml0KGRjdHgpOworKworKyAgICBpZiAocnYgPD0gMCkg eworKyAgICAgICAgaWYgKHJ2ID09IC0yKQorKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19JTklULCBGSVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFKTsKKysgICAgICAgIGVs c2UKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX0VS Uk9SX0lOSVRJQUxJU0lOR19EUkJHKTsKKysgICAgfQorKworKyAgICAvKiBJZiBub3QgaW4gdGVz dCBtb2RlIHJ1biBzZWxmdGVzdHMgb24gRFJCRyBvZiB0aGUgc2FtZSB0eXBlICovCisrCisrICAg IGlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkgeworKyAgICAgICAgaWYgKCFG SVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBT X0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsKKysgICAgICAgICAg ICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gcnY7CisrfQor KworK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3Mp CisreworKyAgICBEUkJHX0NUWCAqZGN0eDsKKysgICAgZGN0eCA9IE9QRU5TU0xfbWFsbG9jKHNp emVvZihEUkJHX0NUWCkpOworKyAgICBpZiAoIWRjdHgpIHsKKysgICAgICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19ORVcsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKysgICAgICAgIHJldHVy biBOVUxMOworKyAgICB9CisrCisrICAgIGlmICh0eXBlID09IDApIHsKKysgICAgICAgIG1lbXNl dChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKKysgICAgICAgIGRjdHgtPnR5cGUgPSAwOwor KyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKKysgICAg ICAgIHJldHVybiBkY3R4OworKyAgICB9CisrCisrICAgIGlmIChGSVBTX2RyYmdfaW5pdChkY3R4 LCB0eXBlLCBmbGFncykgPD0gMCkgeworKyAgICAgICAgT1BFTlNTTF9mcmVlKGRjdHgpOworKyAg ICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGRjdHg7CisrfQorKwor K3ZvaWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRjdHgpCisreworKyAgICBpZiAoZGN0eC0+ dW5pbnN0YW50aWF0ZSkKKysgICAgICAgIGRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7CisrICAg IC8qIERvbid0IGZyZWUgdXAgZGVmYXVsdCBEUkJHICovCisrICAgIGlmIChkY3R4ID09IEZJUFNf Z2V0X2RlZmF1bHRfZHJiZygpKSB7CisrICAgICAgICBtZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERS QkdfQ1RYKSk7CisrICAgICAgICBkY3R4LT50eXBlID0gMDsKKysgICAgICAgIGRjdHgtPnN0YXR1 cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7CisrICAgIH0gZWxzZSB7CisrICAgICAgICBP UEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQsIHNpemVvZihkY3R4LT5kKSk7CisrICAgICAgICBPUEVO U1NMX2ZyZWUoZGN0eCk7CisrICAgIH0KKyt9CisrCisrc3RhdGljIHNpemVfdCBmaXBzX2dldF9l bnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3Qg bWF4X2xlbikKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIgKnRvdXQsICpwOworKyAgICBzaXplX3Qg YmwgPSBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuLCBydjsKKysgICAgaWYgKCFkY3R4LT5nZXRfZW50 cm9weSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19G TEFHX1RFU1QgfHwgIWJsKQorKyAgICAgICAgcmV0dXJuIGRjdHgtPmdldF9lbnRyb3B5KGRjdHgs IHBvdXQsIGVudHJvcHksIG1pbl9sZW4sIG1heF9sZW4pOworKyAgICBydiA9IGRjdHgtPmdldF9l bnRyb3B5KGRjdHgsICZ0b3V0LCBlbnRyb3B5ICsgYmwsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWluX2xlbiArIGJsLCBtYXhfbGVuICsgYmwpOworKyAgICBpZiAodG91dCA9PSBOVUxM KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgICpwb3V0ID0gdG91dCArIGJsOworKyAgICBpZiAo cnYgPCAobWluX2xlbiArIGJsKSB8fCAocnYgJSBibCkpCisrICAgICAgICByZXR1cm4gMDsKKysg ICAgLyogQ29tcGFyZSBjb25zZWN1dGl2ZSBibG9ja3MgZm9yIGNvbnRpbnVvdXMgUFJORyB0ZXN0 ICovCisrICAgIGZvciAocCA9IHRvdXQ7IHAgPCB0b3V0ICsgcnYgLSBibDsgcCArPSBibCkgewor KyAgICAgICAgaWYgKCFtZW1jbXAocCwgcCArIGJsLCBibCkpIHsKKysgICAgICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZLCBGSVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RVQ0sp OworKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJ2IC09 IGJsOworKyAgICBpZiAocnYgPiBtYXhfbGVuKQorKyAgICAgICAgcmV0dXJuIG1heF9sZW47Cisr ICAgIHJldHVybiBydjsKKyt9CisrCisrc3RhdGljIHZvaWQgZmlwc19jbGVhbnVwX2VudHJvcHko RFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikKKyt7CisrICAgIHNpemVfdCBibDsKKysgICAgaWYg KGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQorKyAgICAgICAgYmwgPSAwOworKyAgICBl bHNlCisrICAgICAgICBibCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW47CisrICAgIC8qIENhbGwg Y2xlYW51cCB3aXRoIG9yaWdpbmFsIGFyZ3VtZW50cyAqLworKyAgICBkY3R4LT5jbGVhbnVwX2Vu dHJvcHkoZGN0eCwgb3V0IC0gYmwsIG9sZW4gKyBibCk7CisrfQorKworK2ludCBGSVBTX2RyYmdf aW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbikKKyt7CisrICAgIHNpemVf dCBlbnRsZW4gPSAwLCBub25jZWxlbiA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgKm5vbmNlID0g TlVMTCwgKmVudHJvcHkgPSBOVUxMOworKworKyNpZiAwCisrICAgIC8qIFB1dCBoZXJlIHNvIGVy cm9yIHNjcmlwdCBwaWNrcyB0aGVtIHVwICovCisrICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19JTlNUQU5USUFURSwKKysgICAgICAgICAgICBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklO R19UT09fTE9ORyk7CisrICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwg RklQU19SX0lOX0VSUk9SX1NUQVRFKTsKKysgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lO U1RBTlRJQVRFLCBGSVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQpOworKyAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJP UFkpOworKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9F UlJPUl9SRVRSSUVWSU5HX05PTkNFKTsKKysgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lO U1RBTlRJQVRFLCBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IpOworKyAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRCk7Cisr I2VuZGlmCisrCisrICAgIGludCByID0gMDsKKysKKysgICAgaWYgKHBlcnNsZW4gPiBkY3R4LT5t YXhfcGVycykgeworKyAgICAgICAgciA9IEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RP T19MT05HOworKyAgICAgICAgZ290byBlbmQ7CisrICAgIH0KKysKKysgICAgaWYgKCFkY3R4LT5p bnN0YW50aWF0ZSkgeworKyAgICAgICAgciA9IEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRDsK KysgICAgICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIGlmIChkY3R4LT5zdGF0dXMgIT0g RFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkgeworKyAgICAgICAgaWYgKGRjdHgtPnN0YXR1cyA9 PSBEUkJHX1NUQVRVU19FUlJPUikKKysgICAgICAgICAgICByID0gRklQU19SX0lOX0VSUk9SX1NU QVRFOworKyAgICAgICAgZWxzZQorKyAgICAgICAgICAgIHIgPSBGSVBTX1JfQUxSRUFEWV9JTlNU QU5USUFURUQ7CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgfQorKworKyAgICBkY3R4LT5zdGF0 dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKKysKKysgICAgZW50bGVuID0gZmlwc19nZXRfZW50cm9w eShkY3R4LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsKKysKKysgICAg aWYgKGVudGxlbiA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9lbnRy b3B5KSB7CisrICAgICAgICByID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKKysg ICAgICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIGlmIChkY3R4LT5tYXhfbm9uY2UgPiAw ICYmIGRjdHgtPmdldF9ub25jZSkgeworKyAgICAgICAgbm9uY2VsZW4gPSBkY3R4LT5nZXRfbm9u Y2UoZGN0eCwgJm5vbmNlLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGN0 eC0+c3RyZW5ndGggLyAyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGN0 eC0+bWluX25vbmNlLCBkY3R4LT5tYXhfbm9uY2UpOworKworKyAgICAgICAgaWYgKG5vbmNlbGVu IDwgZGN0eC0+bWluX25vbmNlIHx8IG5vbmNlbGVuID4gZGN0eC0+bWF4X25vbmNlKSB7CisrICAg ICAgICAgICAgciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFOworKyAgICAgICAgICAg IGdvdG8gZW5kOworKyAgICAgICAgfQorKworKyAgICB9CisrCisrICAgIGlmICghZGN0eC0+aW5z dGFudGlhdGUoZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyb3B5LCBlbnRs ZW4sIG5vbmNlLCBub25jZWxlbiwgcGVycywgcGVyc2xlbikpIHsKKysgICAgICAgIHIgPSBGSVBT X1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHOworKyAgICAgICAgZ290byBlbmQ7CisrICAgIH0K KysKKysgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVBRFk7CisrICAgIGlmICghKGRj dHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCisrICAgICAgICBkY3R4LT5yZXNlZWRf Y291bnRlciA9IDE7CisrCisrIGVuZDoKKysKKysgICAgaWYgKGVudHJvcHkgJiYgZGN0eC0+Y2xl YW51cF9lbnRyb3B5KQorKyAgICAgICAgZmlwc19jbGVhbnVwX2VudHJvcHkoZGN0eCwgZW50cm9w eSwgZW50bGVuKTsKKysKKysgICAgaWYgKG5vbmNlICYmIGRjdHgtPmNsZWFudXBfbm9uY2UpCisr ICAgICAgICBkY3R4LT5jbGVhbnVwX25vbmNlKGRjdHgsIG5vbmNlLCBub25jZWxlbik7CisrCisr ICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCisrICAgICAgICByZXR1 cm4gMTsKKysKKysgICAgaWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIp KQorKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCByKTsKKysK KysgICAgcmV0dXJuIDA7CisrCisrfQorKworK3N0YXRpYyBpbnQgZHJiZ19yZXNlZWQoRFJCR19D VFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICph ZGluLCBzaXplX3QgYWRpbmxlbiwgaW50IGhjaGVjaykKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIg KmVudHJvcHkgPSBOVUxMOworKyAgICBzaXplX3QgZW50bGVuID0gMDsKKysgICAgaW50IHIgPSAw OworKworKyNpZiAwCisrICAgIEZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1JfTk9U X0lOU1RBTlRJQVRFRCk7CisrICAgIEZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1Jf QURESVRJT05BTF9JTlBVVF9UT09fTE9ORyk7CisrI2VuZGlmCisrICAgIGlmIChkY3R4LT5zdGF0 dXMgIT0gRFJCR19TVEFUVVNfUkVBRFkKKysgICAgICAgICYmIGRjdHgtPnN0YXR1cyAhPSBEUkJH X1NUQVRVU19SRVNFRUQpIHsKKysgICAgICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFU VVNfRVJST1IpCisrICAgICAgICAgICAgciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKKysgICAg ICAgIGVsc2UgaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQor KyAgICAgICAgICAgIHIgPSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRDsKKysgICAgICAgIGdvdG8g ZW5kOworKyAgICB9CisrCisrICAgIGlmICghYWRpbikKKysgICAgICAgIGFkaW5sZW4gPSAwOwor KyAgICBlbHNlIGlmIChhZGlubGVuID4gZGN0eC0+bWF4X2FkaW4pIHsKKysgICAgICAgIHIgPSBG SVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKKysgICAgICAgIGdvdG8gZW5kOworKyAg ICB9CisrCisrICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOworKyAgICAvKiBQ ZWZvcm0gaGVhbHRoIGNoZWNrIG9uIGFsbCByZXNlZWQgb3BlcmF0aW9ucyBpZiBub3QgYSBwcmVk aWN0aW9uCisrICAgICAqIHJlc2lzdGFuY2UgcmVxdWVzdCBhbmQgbm90IGluIHRlc3QgbW9kZS4K KysgICAgICovCisrICAgIGlmIChoY2hlY2sgJiYgIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdf VEVTVCkpIHsKKysgICAgICAgIGlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkgewor KyAgICAgICAgICAgIHIgPSBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRTsKKysgICAgICAgICAgICBn b3RvIGVuZDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBlbnRsZW4gPSBmaXBzX2dldF9l bnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkY3R4LT5taW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOworKwor KyAgICBpZiAoZW50bGVuIDwgZGN0eC0+bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4 X2VudHJvcHkpIHsKKysgICAgICAgIHIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZ OworKyAgICAgICAgZ290byBlbmQ7CisrICAgIH0KKysKKysgICAgaWYgKCFkY3R4LT5yZXNlZWQo ZGN0eCwgZW50cm9weSwgZW50bGVuLCBhZGluLCBhZGlubGVuKSkKKysgICAgICAgIGdvdG8gZW5k OworKworKyAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKKysgICAgaWYgKCEo ZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKKysgICAgICAgIGRjdHgtPnJlc2Vl ZF9jb3VudGVyID0gMTsKKysgZW5kOgorKworKyAgICBpZiAoZW50cm9weSAmJiBkY3R4LT5jbGVh bnVwX2VudHJvcHkpCisrICAgICAgICBmaXBzX2NsZWFudXBfZW50cm9weShkY3R4LCBlbnRyb3B5 LCBlbnRsZW4pOworKworKyAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZ KQorKyAgICAgICAgcmV0dXJuIDE7CisrCisrICAgIGlmIChyICYmICEoZGN0eC0+aWZsYWdzICYg RFJCR19GTEFHX05PRVJSKSkKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBy KTsKKysKKysgICAgcmV0dXJuIDA7CisrfQorKworK2ludCBGSVBTX2RyYmdfcmVzZWVkKERSQkdf Q1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFk aW4sIHNpemVfdCBhZGlubGVuKQorK3sKKysgICAgcmV0dXJuIGRyYmdfcmVzZWVkKGRjdHgsIGFk aW4sIGFkaW5sZW4sIDEpOworK30KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19jaGVjayhEUkJH X0NUWCAqZGN0eCkKKyt7CisrICAgIGlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkK KysgICAgICAgIHJldHVybiAxOworKyAgICBkY3R4LT5oZWFsdGhfY2hlY2tfY250Kys7CisrICAg IGlmIChkY3R4LT5oZWFsdGhfY2hlY2tfY250ID49IGRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZh bCkgeworKyAgICAgICAgaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKSB7CisrICAg ICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NIRUNLLCBGSVBTX1JfU0VMRlRFU1Rf RkFJTFVSRSk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgIH0KKysg ICAgcmV0dXJuIDE7CisrfQorKworK2ludCBGSVBTX2RyYmdfZ2VuZXJhdGUoRFJCR19DVFggKmRj dHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysgICAgICAgICAgICAgICAg ICAgICAgIGludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UsCisrICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKKyt7CisrICAgIGlu dCByID0gMDsKKysKKysgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKKysgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwgRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICBpZiAoIWZpcHNfZHJiZ19j aGVjayhkY3R4KSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICBpZiAoZGN0eC0+c3RhdHVz ICE9IERSQkdfU1RBVFVTX1JFQURZCisrICAgICAgICAmJiBkY3R4LT5zdGF0dXMgIT0gRFJCR19T VEFUVVNfUkVTRUVEKSB7CisrICAgICAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVT X0VSUk9SKQorKyAgICAgICAgICAgIHIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7CisrICAgICAg ICBlbHNlIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysg ICAgICAgICAgICByID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7CisrICAgICAgICBnb3RvIGVu ZDsKKysgICAgfQorKworKyAgICBpZiAob3V0bGVuID4gZGN0eC0+bWF4X3JlcXVlc3QpIHsKKysg ICAgICAgIHIgPSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkc7CisrICAgICAgICBy ZXR1cm4gMDsKKysgICAgfQorKworKyAgICBpZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKSB7 CisrICAgICAgICByID0gRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkc7CisrICAgICAg ICBnb3RvIGVuZDsKKysgICAgfQorKworKyAgICBpZiAoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNU T01fUkVTRUVEKQorKyAgICAgICAgZGN0eC0+Z2VuZXJhdGUoZGN0eCwgTlVMTCwgb3V0bGVuLCBO VUxMLCAwKTsKKysgICAgZWxzZSBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVz ZWVkX2ludGVydmFsKQorKyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVTRUVE OworKworKyAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFU0VFRCB8fCBwcmVk aWN0aW9uX3Jlc2lzdGFuY2UpIHsKKysgICAgICAgIC8qIElmIHByZWRpY3Rpb24gcmVzaXN0YW5j ZSByZXF1ZXN0IGRvbid0IGRvIGhlYWx0aCBjaGVjayAqLworKyAgICAgICAgaW50IGhjaGVjayA9 IHByZWRpY3Rpb25fcmVzaXN0YW5jZSA/IDAgOiAxOworKworKyAgICAgICAgaWYgKCFkcmJnX3Jl c2VlZChkY3R4LCBhZGluLCBhZGlubGVuLCBoY2hlY2spKSB7CisrICAgICAgICAgICAgciA9IEZJ UFNfUl9SRVNFRURfRVJST1I7CisrICAgICAgICAgICAgZ290byBlbmQ7CisrICAgICAgICB9Cisr ICAgICAgICBhZGluID0gTlVMTDsKKysgICAgICAgIGFkaW5sZW4gPSAwOworKyAgICB9CisrCisr ICAgIGlmICghZGN0eC0+Z2VuZXJhdGUoZGN0eCwgb3V0LCBvdXRsZW4sIGFkaW4sIGFkaW5sZW4p KSB7CisrICAgICAgICByID0gRklQU19SX0dFTkVSQVRFX0VSUk9SOworKyAgICAgICAgZGN0eC0+ c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgfQor KyAgICBpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKSB7CisrICAgICAg ICBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQorKyAg ICAgICAgICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKKysgICAgICAgIGVs c2UKKysgICAgICAgICAgICBkY3R4LT5yZXNlZWRfY291bnRlcisrOworKyAgICB9CisrCisrIGVu ZDoKKysgICAgaWYgKHIpIHsKKysgICAgICAgIGlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfRkxB R19OT0VSUikpCisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRF LCByKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIHJldHVybiAxOworK30K KysKKytpbnQgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisreworKyAg ICBpbnQgcnY7CisrICAgIGlmICghZGN0eC0+dW5pbnN0YW50aWF0ZSkKKysgICAgICAgIHJ2ID0g MTsKKysgICAgZWxzZQorKyAgICAgICAgcnYgPSBkY3R4LT51bmluc3RhbnRpYXRlKGRjdHgpOwor KyAgICAvKiBBbHRob3VnaCB3ZSdkIGxpa2UgdG8gY2xlYW5zZSBoZXJlIHdlIGNhbid0IGJlY2F1 c2Ugd2UgaGF2ZSB0bworKyAgICAgKiB0ZXN0IHRoZSB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJv ZXMgdGhlIGRhdGEuCisrICAgICAqLworKyAgICBtZW1zZXQoJmRjdHgtPmQsIDAsIHNpemVvZihk Y3R4LT5kKSk7CisrICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7 CisrICAgIC8qIElmIG1ldGhvZCBoYXMgcHJvYmxlbXMgdW5pbnN0YW50aWF0aW5nLCByZXR1cm4g ZXJyb3IgKi8KKysgICAgcmV0dXJuIHJ2OworK30KKysKKytpbnQgRklQU19kcmJnX3NldF9jYWxs YmFja3MoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCAoKmdldF9lbnRyb3B5KSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9w eSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgbWluX2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgbWF4X2xlbiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKCpjbGVhbnVwX2VudHJvcHkpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IG9sZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZW50cm9w eV9ibG9ja2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICgqZ2V0X25v bmNlKSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xl biwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IG1heF9sZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2xlYW51 cF9ub25jZSkgKERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSkKKyt7Cisr ICAgIGlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysgICAg ICAgIHJldHVybiAwOworKyAgICBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuID0gZW50cm9weV9ibG9j a2xlbjsKKysgICAgZGN0eC0+Z2V0X2VudHJvcHkgPSBnZXRfZW50cm9weTsKKysgICAgZGN0eC0+ Y2xlYW51cF9lbnRyb3B5ID0gY2xlYW51cF9lbnRyb3B5OworKyAgICBkY3R4LT5nZXRfbm9uY2Ug PSBnZXRfbm9uY2U7CisrICAgIGRjdHgtPmNsZWFudXBfbm9uY2UgPSBjbGVhbnVwX25vbmNlOwor KyAgICByZXR1cm4gMTsKKyt9CisrCisraW50IEZJUFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFja3Mo RFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 ICgqZ2V0X2FkaW4pIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnBvdXQpLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVwX2FkaW4pIChEUkJHX0NU WCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKCpyYW5kX3NlZWRfY2IpIChEUkJHX0NUWCAqY3R4LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHZvaWQgKmJ1ZiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgbnVtKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgKCpyYW5kX2FkZF9jYikgKERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsIGludCBu dW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkb3VibGUgZW50cm9weSkpCisreworKyAgICBpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RB VFVTX1VOSU5JVElBTElTRUQpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgZGN0eC0+Z2V0X2Fk aW4gPSBnZXRfYWRpbjsKKysgICAgZGN0eC0+Y2xlYW51cF9hZGluID0gY2xlYW51cF9hZGluOwor KyAgICBkY3R4LT5yYW5kX3NlZWRfY2IgPSByYW5kX3NlZWRfY2I7CisrICAgIGRjdHgtPnJhbmRf YWRkX2NiID0gcmFuZF9hZGRfY2I7CisrICAgIHJldHVybiAxOworK30KKysKKyt2b2lkICpGSVBT X2RyYmdfZ2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4KQorK3sKKysgICAgcmV0dXJuIGRjdHgt PmFwcF9kYXRhOworK30KKysKKyt2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJCR19DVFgg KmRjdHgsIHZvaWQgKmFwcF9kYXRhKQorK3sKKysgICAgZGN0eC0+YXBwX2RhdGEgPSBhcHBfZGF0 YTsKKyt9CisrCisrc2l6ZV90IEZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRj dHgpCisreworKyAgICByZXR1cm4gZGN0eC0+YmxvY2tsZW5ndGg7CisrfQorKworK2ludCBGSVBT X2RyYmdfZ2V0X3N0cmVuZ3RoKERSQkdfQ1RYICpkY3R4KQorK3sKKysgICAgcmV0dXJuIGRjdHgt PnN0cmVuZ3RoOworK30KKysKKyt2b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwoRFJC R19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkKKyt7CisrICAgIGRjdHgtPmhlYWx0aF9jaGVja19p bnRlcnZhbCA9IGludGVydmFsOworK30KKysKKyt2b2lkIEZJUFNfZHJiZ19zZXRfcmVzZWVkX2lu dGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpCisreworKyAgICBkY3R4LT5yZXNl ZWRfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyt9CisrCisrc3RhdGljIGludCBkcmJnX3N0aWNrID0g MDsKKysKKyt2b2lkIEZJUFNfZHJiZ19zdGljayhpbnQgb25vZmYpCisreworKyAgICBkcmJnX3N0 aWNrID0gb25vZmY7CisrfQorKworKy8qIENvbnRpbnVvdXMgRFJCRyB1dGlsaXR5IGZ1bmN0aW9u ICovCisraW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNp Z25lZCBjaGFyICpvdXQpCisreworKyAgICAvKiBObyBDUFJORyBpbiB0ZXN0IG1vZGUgKi8KKysg ICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQorKyAgICAgICAgcmV0dXJuIDE7 CisrICAgIC8qIENoZWNrIGJsb2NrIGlzIHZhbGlkOiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisr ICAgIGlmIChkY3R4LT5sYl92YWxpZCA9PSAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0lOVEVSTkFMX0VSUk9SKTsKKysgICAgICAgIGZp cHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAg IGlmIChkcmJnX3N0aWNrKQorKyAgICAgICAgbWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJs b2NrbGVuZ3RoKTsKKysgICAgLyogQ2hlY2sgYWdhaW5zdCBsYXN0IGJsb2NrOiBmYWlsIGlmIG1h dGNoICovCisrICAgIGlmICghbWVtY21wKGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3Ro KSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QsIEZJUFNf Ul9EUkJHX1NUVUNLKTsKKysgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysgICAg ICAgIHJldHVybiAwOworKyAgICB9CisrICAgIC8qIFNhdmUgbGFzdCBibG9jayBmb3IgbmV4dCBj b21wYXJpc29uICovCisrICAgIG1lbWNweShkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0 aCk7CisrICAgIHJldHVybiAxOworK30KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBz X2RyYmdfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3Jh bmQuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY0NTYyNTc1ICswMTAwCisrKysgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYwkyMDE1LTEyLTA0IDEzOjU1OjUx Ljk2NDU2MjU3NSArMDEwMAorQEAgLTAsMCArMSwxNjYgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19k cmJnX3JhbmQuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVA b3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vu c2luZ0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n CisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S CisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4K KysjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgorKworKy8qIE1hcHBpbmcgb2YgU1A4MDAtOTAg RFJCR3MgdG8gT3BlblNTTCBSQU5EX01FVEhPRCAqLworKworKy8qIFNpbmNlIHdlIG9ubHkgaGF2 ZSBvbmUgZ2xvYmFsIFBSTkcgdXNlZCBhdCBhbnkgdGltZSBpbiBPcGVuU1NMIHVzZSBhIGdsb2Jh bAorKyAqIHZhcmlhYmxlIHRvIHN0b3JlIGNvbnRleHQuCisrICovCisrCisrc3RhdGljIERSQkdf Q1RYIG9zc2xfZGN0eDsKKysKKytEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQp CisreworKyAgICByZXR1cm4gJm9zc2xfZGN0eDsKKyt9CisrCisrc3RhdGljIGludCBmaXBzX2Ry YmdfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCisreworKyAgICBEUkJHX0NU WCAqZGN0eCA9ICZvc3NsX2RjdHg7CisrICAgIGludCBydiA9IDA7CisrICAgIHVuc2lnbmVkIGNo YXIgKmFkaW4gPSBOVUxMOworKyAgICBzaXplX3QgYWRpbmxlbiA9IDA7CisrICAgIENSWVBUT193 X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrICAgIGRvIHsKKysgICAgICAgIHNpemVfdCByY250 OworKyAgICAgICAgaWYgKGNvdW50ID4gKGludClkY3R4LT5tYXhfcmVxdWVzdCkKKysgICAgICAg ICAgICByY250ID0gZGN0eC0+bWF4X3JlcXVlc3Q7CisrICAgICAgICBlbHNlCisrICAgICAgICAg ICAgcmNudCA9IGNvdW50OworKyAgICAgICAgaWYgKGRjdHgtPmdldF9hZGluKSB7CisrICAgICAg ICAgICAgYWRpbmxlbiA9IGRjdHgtPmdldF9hZGluKGRjdHgsICZhZGluKTsKKysgICAgICAgICAg ICBpZiAoYWRpbmxlbiAmJiAhYWRpbikgeworKyAgICAgICAgICAgICAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfQllURVMsCisrICAgICAgICAgICAgICAgICAgICAgICAgRklQU19SX0VSUk9S X1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBVVCk7CisrICAgICAgICAgICAgICAgIGdvdG8gZXJy OworKyAgICAgICAgICAgIH0KKysgICAgICAgIH0KKysgICAgICAgIHJ2ID0gRklQU19kcmJnX2dl bmVyYXRlKGRjdHgsIG91dCwgcmNudCwgMCwgYWRpbiwgYWRpbmxlbik7CisrICAgICAgICBpZiAo YWRpbikgeworKyAgICAgICAgICAgIGlmIChkY3R4LT5jbGVhbnVwX2FkaW4pCisrICAgICAgICAg ICAgICAgIGRjdHgtPmNsZWFudXBfYWRpbihkY3R4LCBhZGluLCBhZGlubGVuKTsKKysgICAgICAg ICAgICBhZGluID0gTlVMTDsKKysgICAgICAgIH0KKysgICAgICAgIGlmICghcnYpCisrICAgICAg ICAgICAgZ290byBlcnI7CisrICAgICAgICBvdXQgKz0gcmNudDsKKysgICAgICAgIGNvdW50IC09 IHJjbnQ7CisrICAgIH0KKysgICAgd2hpbGUgKGNvdW50KTsKKysgICAgcnYgPSAxOworKyBlcnI6 CisrICAgIENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysgICAgcmV0dXJuIHJ2 OworK30KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19wc2V1ZG8odW5zaWduZWQgY2hhciAqb3V0 LCBpbnQgY291bnQpCisreworKyAgICBpZiAoZmlwc19kcmJnX2J5dGVzKG91dCwgY291bnQpIDw9 IDApCisrICAgICAgICByZXR1cm4gLTE7CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMg aW50IGZpcHNfZHJiZ19zdGF0dXModm9pZCkKKyt7CisrICAgIERSQkdfQ1RYICpkY3R4ID0gJm9z c2xfZGN0eDsKKysgICAgaW50IHJ2OworKyAgICBDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JB TkQpOworKyAgICBydiA9IGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSA/IDEgOiAw OworKyAgICBDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrICAgIHJldHVybiBy djsKKyt9CisrCisrc3RhdGljIHZvaWQgZmlwc19kcmJnX2NsZWFudXAodm9pZCkKKyt7CisrICAg IERSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysgICAgQ1JZUFRPX3dfbG9jayhDUllQVE9f TE9DS19SQU5EKTsKKysgICAgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrICAgIENS WVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKyt9CisrCisrc3RhdGljIGludCBmaXBz X2RyYmdfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKKyt7CisrICAgIERSQkdf Q1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysgICAgaWYgKGRjdHgtPnJhbmRfc2VlZF9jYikKKysg ICAgICAgIHJldHVybiBkY3R4LT5yYW5kX3NlZWRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbik7Cisr ICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19hZGQoY29uc3Qgdm9p ZCAqc2VlZCwgaW50IHNlZWRsZW4sIGRvdWJsZSBhZGRfZW50cm9weSkKKyt7CisrICAgIERSQkdf Q1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysgICAgaWYgKGRjdHgtPnJhbmRfYWRkX2NiKQorKyAg ICAgICAgcmV0dXJuIGRjdHgtPnJhbmRfYWRkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4sIGFkZF9l bnRyb3B5KTsKKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhP RCByYW5kX2RyYmdfbWV0aCA9IHsKKysgICAgZmlwc19kcmJnX3NlZWQsCisrICAgIGZpcHNfZHJi Z19ieXRlcywKKysgICAgZmlwc19kcmJnX2NsZWFudXAsCisrICAgIGZpcHNfZHJiZ19hZGQsCisr ICAgIGZpcHNfZHJiZ19wc2V1ZG8sCisrICAgIGZpcHNfZHJiZ19zdGF0dXMKKyt9OworKworK2Nv bnN0IFJBTkRfTUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpCisreworKyAgICByZXR1cm4g JnJhbmRfZHJiZ19tZXRoOworK30KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBz L2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlw c19kcmJnX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2Ry Ymdfc2VsZnRlc3QuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY0NTYyNTc1ICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMJMjAxNS0x Mi0wNCAxMzo1NTo1MS45NjQ1NjI1NzUgKzAxMDAKK0BAIC0wLDAgKzEsODI3IEBACisrLyogZmlw cy9yYW5kL2ZpcHNfZHJiZ19zZWxmdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVu IE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVj dC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAg ICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5T U0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVk ZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUg ImZpcHNfcmFuZF9sY2wuaCIKKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2luY2x1ZGUg ImZpcHNfZHJiZ19zZWxmdGVzdC5oIgorKworK3R5cGVkZWYgc3RydWN0IHsKKysgICAgaW50IHBv c3Q7CisrICAgIGludCBuaWQ7CisrICAgIHVuc2lnbmVkIGludCBmbGFnczsKKysKKysgICAgLyog S0FUIGRhdGEgZm9yIG5vIFBSICovCisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudDsKKysg ICAgc2l6ZV90IGVudGxlbjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2U7CisrICAg IHNpemVfdCBub25jZWxlbjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGVyczsKKysgICAg c2l6ZV90IHBlcnNsZW47CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW47CisrICAgIHNp emVfdCBhZGlubGVuOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnRyZXNlZWQ7CisrICAg IHNpemVfdCBlbnRyZXNlZWRsZW47CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5yZXNl ZWQ7CisrICAgIHNpemVfdCBhZGlucmVzZWVkbGVuOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICphZGluMjsKKysgICAgc2l6ZV90IGFkaW4ybGVuOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICprYXQ7CisrICAgIHNpemVfdCBrYXRsZW47CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmth dDI7CisrICAgIHNpemVfdCBrYXQybGVuOworKworKyAgICAvKiBLQVQgZGF0YSBmb3IgUFIgKi8K KysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50X3ByOworKyAgICBzaXplX3QgZW50bGVuX3By OworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZV9wcjsKKysgICAgc2l6ZV90IG5vbmNl bGVuX3ByOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzX3ByOworKyAgICBzaXplX3Qg cGVyc2xlbl9wcjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbl9wcjsKKysgICAgc2l6 ZV90IGFkaW5sZW5fcHI7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHByX3ByOworKyAg ICBzaXplX3QgZW50cHJsZW5fcHI7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5nX3By OworKyAgICBzaXplX3QgYWRpbmdsZW5fcHI7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVu dGdfcHI7CisrICAgIHNpemVfdCBlbnRnbGVuX3ByOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICprYXRfcHI7CisrICAgIHNpemVfdCBrYXRsZW5fcHI7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmthdDJfcHI7CisrICAgIHNpemVfdCBrYXQybGVuX3ByOworKworK30gRFJCR19TRUxGVEVT VF9EQVRBOworKworKyNkZWZpbmUgbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIGZsYWcsIHByLCBw KSB7cCwgbmlkLCBmbGFnIHwgRFJCR19GTEFHX1RFU1QsIFwKKysgICAgICAgIHByIyNfZW50cm9w eWlucHV0LCBzaXplb2YocHIjI19lbnRyb3B5aW5wdXQpLCBcCisrICAgICAgICBwciMjX25vbmNl LCBzaXplb2YocHIjI19ub25jZSksIFwKKysgICAgICAgIHByIyNfcGVyc29uYWxpemF0aW9uc3Ry aW5nLCBzaXplb2YocHIjI19wZXJzb25hbGl6YXRpb25zdHJpbmcpLCBcCisrICAgICAgICBwciMj X2FkZGl0aW9uYWxpbnB1dCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0KSwgXAorKyAgICAg ICAgcHIjI19lbnRyb3B5aW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2VudHJvcHlpbnB1dHJlc2Vl ZCksIFwKKysgICAgICAgIHByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkLCBzaXplb2YocHIjI19h ZGRpdGlvbmFsaW5wdXRyZXNlZWQpLCBcCisrICAgICAgICBwciMjX2FkZGl0aW9uYWxpbnB1dDIs IHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dDIpLCBcCisrICAgICAgICBwciMjX2ludF9yZXR1 cm5lZGJpdHMsIHNpemVvZihwciMjX2ludF9yZXR1cm5lZGJpdHMpLCBcCisrICAgICAgICBwciMj X3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfcmV0dXJuZWRiaXRzKSwgXAorKyAgICAgICAgcHIj I19wcl9lbnRyb3B5aW5wdXQsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dCksIFwKKysgICAg ICAgIHByIyNfcHJfbm9uY2UsIHNpemVvZihwciMjX3ByX25vbmNlKSwgXAorKyAgICAgICAgcHIj I19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3ByX3BlcnNvbmFsaXphdGlv bnN0cmluZyksIFwKKysgICAgICAgIHByIyNfcHJfYWRkaXRpb25hbGlucHV0LCBzaXplb2YocHIj I19wcl9hZGRpdGlvbmFsaW5wdXQpLCBcCisrICAgICAgICBwciMjX3ByX2VudHJvcHlpbnB1dHBy LCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXRwciksIFwKKysgICAgICAgIHByIyNfcHJfYWRk aXRpb25hbGlucHV0Miwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0MiksIFwKKysgICAg ICAgIHByIyNfcHJfZW50cm9weWlucHV0cHIyLCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXRw cjIpLCBcCisrICAgICAgICBwciMjX3ByX2ludF9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3By X2ludF9yZXR1cm5lZGJpdHMpLCBcCisrICAgICAgICBwciMjX3ByX3JldHVybmVkYml0cywgc2l6 ZW9mKHByIyNfcHJfcmV0dXJuZWRiaXRzKSwgXAorKyAgICAgICAgfQorKworKyNkZWZpbmUgbWFr ZV9kcmJnX3Rlc3RfZGF0YV9kZihuaWQsIHByLCBwKSBcCisrICAgICAgICBtYWtlX2RyYmdfdGVz dF9kYXRhKG5pZCwgRFJCR19GTEFHX0NUUl9VU0VfREYsIHByLCBwKQorKworKyNkZWZpbmUgbWFr ZV9kcmJnX3Rlc3RfZGF0YV9lYyhjdXJ2ZSwgbWQsIHByLCBwKSBcCisrICAgICAgICBtYWtlX2Ry YmdfdGVzdF9kYXRhKChjdXJ2ZSA8PCAxNikgfCBtZCAsIDAsIHByLCBwKQorKworK3N0YXRpYyBE UkJHX1NFTEZURVNUX0RBVEEgZHJiZ190ZXN0W10gPSB7CisrICAgIG1ha2VfZHJiZ190ZXN0X2Rh dGFfZGYoTklEX2Flc18xMjhfY3RyLCBhZXNfMTI4X3VzZV9kZiwgMCksCisrICAgIG1ha2VfZHJi Z190ZXN0X2RhdGFfZGYoTklEX2Flc18xOTJfY3RyLCBhZXNfMTkyX3VzZV9kZiwgMCksCisrICAg IG1ha2VfZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18yNTZfY3RyLCBhZXNfMjU2X3VzZV9kZiwg MSksCisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18xMjhfY3RyLCAwLCBhZXNfMTI4 X25vX2RmLCAwKSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzE5Ml9jdHIsIDAs IGFlc18xOTJfbm9fZGYsIDApLAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMjU2 X2N0ciwgMCwgYWVzXzI1Nl9ub19kZiwgMSksCisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklE X3NoYTEsIDAsIHNoYTEsIDApLAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEyMjQs IDAsIHNoYTIyNCwgMCksCisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTI1NiwgMCwg c2hhMjU2LCAxKSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMzg0LCAwLCBzaGEz ODQsIDApLAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGE1MTIsIDAsIHNoYTUxMiwg MCksCisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMSwgMCwgaG1hY19z aGExLCAwKSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEyMjQsIDAs IGhtYWNfc2hhMjI0LCAwKSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhT SEEyNTYsIDAsIGhtYWNfc2hhMjU2LCAxKSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURf aG1hY1dpdGhTSEEzODQsIDAsIGhtYWNfc2hhMzg0LCAwKSwKKysgICAgbWFrZV9kcmJnX3Rlc3Rf ZGF0YShOSURfaG1hY1dpdGhTSEE1MTIsIDAsIGhtYWNfc2hhNTEyLCAwKSwKKysgICAgezAsIDAs IDB9CisrfTsKKysKKyt0eXBlZGVmIHN0cnVjdCB7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmVudDsKKysgICAgc2l6ZV90IGVudGxlbjsKKysgICAgaW50IGVudGNudDsKKysgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqbm9uY2U7CisrICAgIHNpemVfdCBub25jZWxlbjsKKysgICAgaW50IG5v bmNlY250OworK30gVEVTVF9FTlQ7CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X2VudHJvcHkoRFJC R19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisrewor KyAgICBURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7CisrICAgICpw b3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5lbnQ7CisrICAgIHQtPmVudGNudCsrOworKyAgICBy ZXR1cm4gdC0+ZW50bGVuOworK30KKysKKytzdGF0aWMgc2l6ZV90IHRlc3Rfbm9uY2UoRFJCR19D VFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQorK3sKKysgICAg VEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKyAgICAqcG91dCA9 ICh1bnNpZ25lZCBjaGFyICopdC0+bm9uY2U7CisrICAgIHQtPm5vbmNlY250Kys7CisrICAgIHJl dHVybiB0LT5ub25jZWxlbjsKKyt9CisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfc2luZ2xlX2th dChEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICogdGQsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgcXVpY2spCisreworKyAgICBURVNUX0VOVCB0OworKyAg ICBpbnQgcnYgPSAwOworKyAgICBzaXplX3QgYWRpbmxlbjsKKysgICAgdW5zaWduZWQgY2hhciBy YW5kb3V0WzEwMjRdOworKworKyAgICAvKiBJbml0aWFsIHRlc3Qgd2l0aG91dCBQUiAqLworKwor KyAgICAvKiBJbnN0YW50aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVy c29uYWxpc2F0aW9uCisrICAgICAqIHN0cmluZy4KKysgICAgICovCisrCisrICAgIGlmICghRklQ U19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkKKysgICAgICAgIHJldHVybiAw OworKyAgICBpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwg MCwgMCwgdGVzdF9ub25jZSwgMCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgRklQU19k cmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7CisrCisrICAgIHQuZW50ID0gdGQtPmVudDsKKysg ICAgdC5lbnRsZW4gPSB0ZC0+ZW50bGVuOworKyAgICB0Lm5vbmNlID0gdGQtPm5vbmNlOworKyAg ICB0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOworKyAgICB0LmVudGNudCA9IDA7CisrICAgIHQu bm9uY2VjbnQgPSAwOworKworKyAgICBpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0 ZC0+cGVycywgdGQtPnBlcnNsZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIC8qIE5v dGUgZm9yIENUUiB3aXRob3V0IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKKysgICAg ICogaWdub3JlIGJ5dGVzIGFmdGVyIHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVuCisr ICAgICAqIHRvIGhhbGYgdG8gZW5zdXJlIGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCisrICAgICAq LworKyAgICBpZiAoIWZpcHNfcG9zdF9jb3JydXB0KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBl LCAmZGN0eC0+aWZsYWdzKSkKKysgICAgICAgIGFkaW5sZW4gPSB0ZC0+YWRpbmxlbiAvIDI7Cisr ICAgIGVsc2UKKysgICAgICAgIGFkaW5sZW4gPSB0ZC0+YWRpbmxlbjsKKysKKysgICAgLyogR2Vu ZXJhdGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIGRhdGEg Ki8KKysgICAgaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxl biwgMCwgdGQtPmFkaW4sIGFkaW5sZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGlm IChtZW1jbXAocmFuZG91dCwgdGQtPmthdCwgdGQtPmthdGxlbikpIHsKKysgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJF KTsKKysgICAgICAgIGdvdG8gZXJyMjsKKysgICAgfQorKyAgICAvKiBJZiBhYmJyZXZpYXRlZCBQ T1NUIGVuZCBvZiB0ZXN0ICovCisrICAgIGlmIChxdWljaykgeworKyAgICAgICAgcnYgPSAxOwor KyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysgICAgLyogUmVzZWVkIERSQkcgd2l0aCB0ZXN0 IGVudHJvcHkgYW5kIGFkZGl0aW9uYWwgaW5wdXQgKi8KKysgICAgdC5lbnQgPSB0ZC0+ZW50cmVz ZWVkOworKyAgICB0LmVudGxlbiA9IHRkLT5lbnRyZXNlZWRsZW47CisrCisrICAgIGlmICghRklQ U19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbnJlc2VlZCwgdGQtPmFkaW5yZXNlZWRsZW4pKQor KyAgICAgICAgZ290byBlcnI7CisrCisrICAgIC8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZl cmlmeSBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCBkYXRhICovCisrICAgIGlmICghRklQU19kcmJn X2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXQybGVuLCAwLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZC0+YWRpbjIsIHRkLT5hZGluMmxlbikpCisrICAgICAgICBnb3RvIGVy cjsKKysKKysgICAgaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0MiwgdGQtPmthdDJsZW4pKSB7 CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX05P UFJfVEVTVDJfRkFJTFVSRSk7CisrICAgICAgICBnb3RvIGVycjI7CisrICAgIH0KKysKKysgICAg RklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrCisrICAgIC8qIE5vdyB0ZXN0IHdpdGgg UFIgKi8KKysKKysgICAgLyogSW5zdGFudGlhdGUgRFJCRyB3aXRoIHRlc3QgZW50cm9weSwgbm9u Y2UgYW5kIHBlcnNvbmFsaXNhdGlvbgorKyAgICAgKiBzdHJpbmcuCisrICAgICAqLworKyAgICBp ZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCisrICAgICAgICBy ZXR1cm4gMDsKKysgICAgaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2Vu dHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAg IEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOworKworKyAgICB0LmVudCA9IHRkLT5l bnRfcHI7CisrICAgIHQuZW50bGVuID0gdGQtPmVudGxlbl9wcjsKKysgICAgdC5ub25jZSA9IHRk LT5ub25jZV9wcjsKKysgICAgdC5ub25jZWxlbiA9IHRkLT5ub25jZWxlbl9wcjsKKysgICAgdC5l bnRjbnQgPSAwOworKyAgICB0Lm5vbmNlY250ID0gMDsKKysKKysgICAgaWYgKCFGSVBTX2RyYmdf aW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnNfcHIsIHRkLT5wZXJzbGVuX3ByKSkKKysgICAgICAg IGdvdG8gZXJyOworKworKyAgICAvKiBOb3cgZ2VuZXJhdGUgd2l0aCBQUjogd2UgbmVlZCB0byBz dXBwbHkgZW50cm9weSBhcyB0aGlzIHdpbGwKKysgICAgICogcGVyZm9ybSBhIHJlc2VlZCBvcGVy YXRpb24uIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlLgorKyAgICAgKi8KKysK KysgICAgdC5lbnQgPSB0ZC0+ZW50cHJfcHI7CisrICAgIHQuZW50bGVuID0gdGQtPmVudHBybGVu X3ByOworKworKyAgICAvKiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFkZGl0aW9uYWwg aW5wdXQgdmFsdWVzCisrICAgICAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVuZ3RoOiBz byByZWR1Y2UgYWRpbmxlbgorKyAgICAgKiB0byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRhdGEg aXMgZmVkIGluLgorKyAgICAgKi8KKysgICAgaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RF U1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFncykpCisrICAgICAgICBhZGlubGVuID0g dGQtPmFkaW5sZW5fcHIgLyAyOworKyAgICBlbHNlCisrICAgICAgICBhZGlubGVuID0gdGQtPmFk aW5sZW5fcHI7CisrICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRk LT5rYXRsZW5fcHIsIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluX3By LCBhZGlubGVuKSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBpZiAobWVtY21wKHJhbmRv dXQsIHRkLT5rYXRfcHIsIHRkLT5rYXRsZW5fcHIpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1QxX0ZBSUxVUkUpOworKyAgICAg ICAgZ290byBlcnIyOworKyAgICB9CisrCisrICAgIC8qIE5vdyBnZW5lcmF0ZSBhZ2FpbiB3aXRo IFBSOiBzdXBwbHkgbmV3IGVudHJvcHkgYWdhaW4uCisrICAgICAqIENoZWNrIG91dHB1dCBtYXRj aGVzIGV4cGVjdGVkIHZhbHVlLgorKyAgICAgKi8KKysKKysgICAgdC5lbnQgPSB0ZC0+ZW50Z19w cjsKKysgICAgdC5lbnRsZW4gPSB0ZC0+ZW50Z2xlbl9wcjsKKysKKysgICAgaWYgKCFGSVBTX2Ry YmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdDJsZW5fcHIsIDEsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkLT5hZGluZ19wciwgdGQtPmFkaW5nbGVuX3ByKSkKKysgICAg ICAgIGdvdG8gZXJyOworKworKyAgICBpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyX3ByLCB0 ZC0+a2F0Mmxlbl9wcikpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5H TEVfS0FULCBGSVBTX1JfUFJfVEVTVDJfRkFJTFVSRSk7CisrICAgICAgICBnb3RvIGVycjI7Cisr ICAgIH0KKysgICAgLyogQWxsIE9LLCB0ZXN0IGNvbXBsZXRlICovCisrICAgIHJ2ID0gMTsKKysK KysgZXJyOgorKyAgICBpZiAocnYgPT0gMCkKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19TSU5HTEVfS0FULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysgZXJyMjoKKysgICAg RklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrCisrICAgIHJldHVybiBydjsKKysKKyt9 CisrCisrLyogSW5pdGlhbGlzZSBhIERSQkcgYmFzZWQgb24gc2VsZnRlc3QgZGF0YSAqLworKwor K3N0YXRpYyBpbnQgZG9fZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RB VEEgKiB0ZCwgVEVTVF9FTlQgKiB0KQorK3sKKysKKysgICAgaWYgKCFGSVBTX2RyYmdfaW5pdChk Y3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIGlm ICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0 X25vbmNlLCAwKSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICBGSVBTX2RyYmdfc2V0X2Fw cF9kYXRhKGRjdHgsIHQpOworKworKyAgICB0LT5lbnQgPSB0ZC0+ZW50OworKyAgICB0LT5lbnRs ZW4gPSB0ZC0+ZW50bGVuOworKyAgICB0LT5ub25jZSA9IHRkLT5ub25jZTsKKysgICAgdC0+bm9u Y2VsZW4gPSB0ZC0+bm9uY2VsZW47CisrICAgIHQtPmVudGNudCA9IDA7CisrICAgIHQtPm5vbmNl Y250ID0gMDsKKysgICAgcmV0dXJuIDE7CisrfQorKworKy8qIEluaXRpYWxpc2UgYW5kIGluc3Rh bnRpYXRlIERSQkcgYmFzZWQgb24gc2VsZnRlc3QgZGF0YSAqLworK3N0YXRpYyBpbnQgZG9fZHJi Z19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICogdGQsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfRU5UICogdCkKKyt7CisrICAgIGlm ICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCB0KSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBp ZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pKQor KyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIHJldHVybiAxOworK30KKysKKysvKiBUaGlzIGZ1 bmN0aW9uIHBlcmZvcm1zIGV4dGVuc2l2ZSBlcnJvciBjaGVja2luZyBhcyByZXF1aXJlZCBieSBT UDgwMC05MC4KKysgKiBJbmR1Y2Ugc2V2ZXJhbCBmYWlsdXJlIG1vZGVzIGFuZCBjaGVjayBhbiBl cnJvciBjb25kaXRpb24gaXMgc2V0LgorKyAqIFRoaXMgZnVuY3Rpb24gYWxvbmcgd2l0aCBmaXBz X2RyYmdfc2luZ2xlX2thdCBwZWZvcm1zIHRoZSBoZWFsdGggY2hlY2tpbmcKKysgKiBvcGVyYXRp b24uCisrICovCisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfZXJyb3JfY2hlY2soRFJCR19DVFgg KmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqIHRkKQorK3sKKysgICAgdW5zaWduZWQgY2hhciBy YW5kb3V0WzEwMjRdOworKyAgICBURVNUX0VOVCB0OworKyAgICBzaXplX3QgaTsKKysgICAgdW5z aWduZWQgaW50IHJlc2VlZF9jb3VudGVyX3RtcDsKKysgICAgdW5zaWduZWQgY2hhciAqcCA9ICh1 bnNpZ25lZCBjaGFyICopZGN0eDsKKysKKysgICAgLyogSW5pdGlhbGlzZSBEUkJHICovCisrCisr ICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrICAgICAgICBnb3RvIGVycjsK KysKKysgICAgLyogRG9uJ3QgcmVwb3J0IGluZHVjZWQgZXJyb3JzICovCisrICAgIGRjdHgtPmlm bGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrICAgIC8qIFBlcnNvbmFsaXNhdGlvbiBzdHJp bmcgdGVzdHMgKi8KKysKKysgICAgLyogVGVzdCBkZXRlY3Rpb24gb2YgdG9vIGxhcmdlIHBlcnNv bmxpc2F0aW9uIHN0cmluZyAqLworKworKyAgICBpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRj dHgsIHRkLT5wZXJzLCBkY3R4LT5tYXhfcGVycyArIDEpID4gMCkgeworKyAgICAgICAgRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICBGSVBTX1Jf UEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQpOworKyAgICAgICAgZ290byBlcnI7Cisr ICAgIH0KKysKKysgICAgLyogRW50cm9weSBzb3VyY2UgdGVzdHMgKi8KKysKKysgICAgLyogVGVz dCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlIGRldGVjaW9uOiBpLmUuIHJldHVybnMgbm8gZGF0YSAq LworKworKyAgICB0LmVudGxlbiA9IDA7CisrCisrICAgIGlmIChGSVBTX2RyYmdfaW5zdGFudGlh dGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApIHsKKysgICAgICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgRklQU19SX0VO VFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKwor KyAgICAvKiBUcnkgdG8gZ2VuZXJhdGUgb3V0cHV0IGZyb20gdW5pbnN0YW50aWF0ZWQgRFJCRyAq LworKyAgICBpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4s IDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkg eworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAg ICAgICAgICAgICBGSVBTX1JfR0VORVJBVEVfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBn b3RvIGVycjsKKysgICAgfQorKworKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VS UjsKKysgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAg RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFU RV9FUlJPUik7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBpZiAoIWRvX2Ry YmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGRjdHgt PmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrICAgIC8qIFRlc3QgaW5zdWZmaWNpZW50 IGVudHJvcHkgKi8KKysKKysgICAgdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7Cisr CisrICAgIGlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJz bGVuKSA+IDApIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywKKysgICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Cisr ICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdf RkxBR19OT0VSUjsKKysgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewor KyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9FUlJPUik7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICAv KiBUZXN0IHRvbyBtdWNoIGVudHJvcHkgKi8KKysKKysgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0 eCwgdGQsICZ0KSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBkY3R4LT5pZmxhZ3MgfD0g RFJCR19GTEFHX05PRVJSOworKworKyAgICB0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsg MTsKKysKKysgICAgaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQt PnBlcnNsZW4pID4gMCkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLAorKyAgICAgICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVE KTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGRjdHgtPmlmbGFncyAmPSB+ RFJCR19GTEFHX05PRVJSOworKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgp KSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisr ICAgIC8qIE5vbmNlIHRlc3RzICovCisrCisrICAgIC8qIFRlc3QgdG9vIHNtYWxsIG5vbmNlICov CisrCisrICAgIGlmIChkY3R4LT5taW5fbm9uY2UpIHsKKysKKysgICAgICAgIGlmICghZG9fZHJi Z19pbml0KGRjdHgsIHRkLCAmdCkpCisrICAgICAgICAgICAgZ290byBlcnI7CisrCisrICAgICAg ICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKyAgICAgICAgdC5ub25jZWxl biA9IGRjdHgtPm1pbl9ub25jZSAtIDE7CisrCisrICAgICAgICBpZiAoRklQU19kcmJnX2luc3Rh bnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKSB7CisrICAgICAgICAgICAg RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICAg ICAgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOworKyAgICAgICAgICAgIGdvdG8gZXJy OworKyAgICAgICAgfQorKworKyAgICAgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9F UlI7CisrICAgICAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7CisrICAg ICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5J TlNUQU5USUFURV9FUlJPUik7CisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICB9Cisr CisrICAgIH0KKysKKysgICAgLyogVGVzdCB0b28gbGFyZ2Ugbm9uY2UgKi8KKysKKysgICAgaWYg KGRjdHgtPm1heF9ub25jZSkgeworKworKyAgICAgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwg dGQsICZ0KSkKKysgICAgICAgICAgICBnb3RvIGVycjsKKysKKysgICAgICAgIGRjdHgtPmlmbGFn cyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrICAgICAgICB0Lm5vbmNlbGVuID0gZGN0eC0+bWF4 X25vbmNlICsgMTsKKysKKysgICAgICAgIGlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwg dGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgICAgICBGSVBTX1JfTk9O Q0VfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICB9 CisrCisrICAgICAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysgICAgICAg IGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKKysgICAgICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VS Uk9SKTsKKysgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIH0KKysKKysgICAgfQorKwor KyAgICAvKiBJbnN0YW50aWF0ZSB3aXRoIHZhbGlkIGRhdGEuICovCisrICAgIGlmICghZG9fZHJi Z19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAg IC8qIENoZWNrIGdlbmVyYXRpb24gaXMgbm93IE9LICovCisrICAgIGlmICghRklQU19kcmJnX2dl bmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrICAgICAgICBnb3RvIGVycjsKKysK KysgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysgICAgLyogUmVxdWVz dCB0b28gbXVjaCBkYXRhIGZvciBvbmUgcmVxdWVzdCAqLworKyAgICBpZiAoRklQU19kcmJnX2dl bmVyYXRlKGRjdHgsIHJhbmRvdXQsIGRjdHgtPm1heF9yZXF1ZXN0ICsgMSwgMCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKSB7CisrICAgICAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJ UFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVEKTsKKysgICAgICAgIGdvdG8gZXJy OworKyAgICB9CisrCisrICAgIC8qIFRyeSB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAqLwor KyAgICBpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIGRjdHgtPm1heF9hZGluICsg MSkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysg ICAgICAgICAgICAgICAgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCk7 CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICAvKiBDaGVjayBwcmVkaWN0aW9u IHJlc2lzdGFuY2UgcmVxdWVzdCBmYWlscyBpZiBlbnRyb3B5IHNvdXJjZQorKyAgICAgKiBmYWls dXJlLgorKyAgICAgKi8KKysKKysgICAgdC5lbnRsZW4gPSAwOworKworKyAgICBpZiAoRklQU19k cmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDEsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkgeworKyAgICAgICAgRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICBGSVBTX1Jf RU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9Cisr CisrICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKyAgICBpZiAoIUZJUFNf ZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysgICAgICAg IGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIEluc3RhbnRpYXRlIGFnYWluIHdpdGggdmFs aWQgZGF0YSAqLworKworKyAgICBpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0 KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICAvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtz ICovCisrICAgIC8qIFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAqLworKyAgICByZXNlZWRf Y291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291bnRlcjsKKysgICAgLyogU2V0IHJlc2VlZCBj b3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLworKyAgICBkY3R4LT5yZXNlZWRfY291bnRlciA9 IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsKKysKKysgICAgLyogR2VuZXJhdGUgb3V0cHV0IGFuZCBj aGVjayBlbnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCisrICAgIHQuZW50 Y250ID0gMDsKKysgICAgaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQt PmthdGxlbiwgMCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5h ZGlubGVuKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAodC5lbnRjbnQgIT0gMSkgewor KyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAg ICAgICAgICBGSVBTX1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOworKyAgICAg ICAgZ290byBlcnI7CisrICAgIH0KKysgICAgLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFzIGJl ZW4gcmVzZXQgKi8KKysgICAgaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9jb3Vu dGVyX3RtcCArIDEpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SKTsKKysgICAgICAgIGdvdG8gZXJyOwor KyAgICB9CisrCisrICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKyAgICBp ZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsK KysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIENoZWNrIHByZWRpY3Rpb24g cmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCisrICAgICAqIGZhaWx1 cmUuCisrICAgICAqLworKworKyAgICB0LmVudGxlbiA9IDA7CisrCisrICAgIGRjdHgtPmlmbGFn cyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrICAgIGlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwg cmFuZG91dCwgdGQtPmthdGxlbiwgMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+ YWRpbiwgdGQtPmFkaW5sZW4pKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVU RUNURUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgZGN0eC0+aWZsYWdz ICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrCisrICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlh dGUoZGN0eCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVD SywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOworKyAgICAgICAgZ290byBlcnI7CisrICAg IH0KKysKKysgICAgaWYgKCFkb19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCisrICAg ICAgICBnb3RvIGVycjsKKysgICAgLyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLworKyAg ICAvKiBTYXZlIGluaXRpYWwgcmVzZWVkIGNvdW50ZXIgKi8KKysgICAgcmVzZWVkX2NvdW50ZXJf dG1wID0gZGN0eC0+cmVzZWVkX2NvdW50ZXI7CisrICAgIC8qIFNldCByZXNlZWQgY291bnRlciB0 byBiZXlvbmQgaW50ZXJ2YWwgKi8KKysgICAgZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5y ZXNlZWRfaW50ZXJ2YWw7CisrCisrICAgIC8qIEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50 cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHJlc2VlZCAqLworKyAgICB0LmVudGNudCA9IDA7 CisrICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4s IDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikp CisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKHQuZW50Y250ICE9IDEpIHsKKysgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAg RklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKKysgICAgICAgIGdvdG8g ZXJyOworKyAgICB9CisrICAgIC8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0 ICovCisrICAgIGlmIChkY3R4LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAg KyAxKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUik7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQor KworKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysgICAgaWYgKCFGSVBT X2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrICAgICAg ICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICAvKiBFeHBsaWNpdCByZXNlZWQgdGVzdHMgKi8K KysKKysgICAgLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbGFyZ2UgYWRkaXRpb25h bCBpbnB1dCAqLworKyAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKyAgICAg ICAgZ290byBlcnI7CisrCisrICAgIGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Cisr CisrICAgIGlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCBkY3R4LT5tYXhfYWRp biArIDEpID4gMCkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLAorKyAgICAgICAgICAgICAgICBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRF VEVDVEVEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIFRlc3QgZXhw bGljaXQgcmVzZWVkIHdpdGggZW50cm9weSBzb3VyY2UgZmFpbHVyZSAqLworKworKyAgICB0LmVu dGxlbiA9IDA7CisrCisrICAgIGlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0 ZC0+YWRpbmxlbikgPiAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNU RUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgaWYgKCFGSVBTX2RyYmdf dW5pbnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrICAgICAgICBnb3Rv IGVycjsKKysgICAgfQorKworKyAgICAvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBt dWNoIGVudHJvcHkgKi8KKysKKysgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkK KysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05P RVJSOworKworKyAgICB0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKKysKKysgICAg aWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApIHsK KysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAg ICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3Rv IGVycjsKKysgICAgfQorKworKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgp KSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNf Ul9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisr ICAgIC8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIGxpdHRsZSBlbnRyb3B5ICovCisr CisrICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrICAgICAgICBnb3RvIGVy cjsKKysKKysgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysgICAgdC5l bnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7CisrCisrICAgIGlmIChGSVBTX2RyYmdfcmVz ZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKSB7CisrICAgICAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJUFNfUl9F TlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysK KysgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAgRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9F UlJPUik7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBwID0gKHVuc2lnbmVk IGNoYXIgKikmZGN0eC0+ZDsKKysgICAgLyogU3RhbmRhcmQgc2F5cyB3ZSBoYXZlIHRvIGNoZWNr IHVuaW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcworKyAgICAgKiB0aGUgZGF0YS4uLgorKyAgICAg Ki8KKysgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihkY3R4LT5kKTsgaSsrKSB7CisrICAgICAg ICBpZiAoKnAgIT0gMCkgeworKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pF Uk9JU0VfRVJST1IpOworKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorKyAgICAg ICAgcCsrOworKyAgICB9CisrCisrICAgIHJldHVybiAxOworKworKyBlcnI6CisrICAgIC8qIEEg cmVhbCBlcnJvciBhcyBvcHBvc2VkIHRvIGFuIGluZHVjZWQgb25lOiB1bmRlcmx5aW5nIGZ1bmN0 aW9uIHdpbGwKKysgICAgICogaW5kaWNhdGUgdGhlIGVycm9yLgorKyAgICAgKi8KKysgICAgaWYg KCEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKKysgICAgICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0ZVTkNUSU9OX0VSUk9SKTsKKysgICAg RklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrICAgIHJldHVybiAwOworKworK30KKysK KytpbnQgZmlwc19kcmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50 IGZsYWdzKQorK3sKKysgICAgRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKKysgICAgZmxhZ3MgfD0g RFJCR19GTEFHX1RFU1Q7CisrICAgIGZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsg dGQrKykgeworKyAgICAgICAgaWYgKHRkLT5uaWQgPT0gbmlkICYmIHRkLT5mbGFncyA9PSBmbGFn cykgeworKyAgICAgICAgICAgIGlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDAp KQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICByZXR1cm4gZmlwc19k cmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1 cm4gMDsKKyt9CisrCisraW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2soRFJCR19DVFggKmRjdHgp CisreworKyAgICBpbnQgcnY7CisrICAgIERSQkdfQ1RYICp0Y3R4ID0gTlVMTDsKKysgICAgdGN0 eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7CisrICAgIGZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVT VF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKKysgICAgaWYgKCF0Y3R4KQorKyAg ICAgICAgcmV0dXJuIDA7CisrICAgIHJ2ID0gZmlwc19kcmJnX2thdCh0Y3R4LCBkY3R4LT50eXBl LCBkY3R4LT54ZmxhZ3MpOworKyAgICBpZiAodGN0eCkKKysgICAgICAgIEZJUFNfZHJiZ19mcmVl KHRjdHgpOworKyAgICBpZiAocnYpCisrICAgICAgICBmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RF U1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7CisrICAgIGVsc2UKKysgICAgICAg IGZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54Zmxh Z3MpOworKyAgICBpZiAoIXJ2KQorKyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNf RVJST1I7CisrICAgIGVsc2UKKysgICAgICAgIGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOwor KyAgICByZXR1cm4gcnY7CisrfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCkKKyt7 CisrICAgIERSQkdfQ1RYICpkY3R4OworKyAgICBEUkJHX1NFTEZURVNUX0RBVEEgKnRkOworKyAg ICBpbnQgcnYgPSAxOworKyAgICBkY3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKKysgICAgaWYg KCFkY3R4KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGZvciAodGQgPSBkcmJnX3Rlc3Q7IHRk LT5uaWQgIT0gMDsgdGQrKykgeworKyAgICAgICAgaWYgKHRkLT5wb3N0ICE9IDEpCisrICAgICAg ICAgICAgY29udGludWU7CisrICAgICAgICBpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVT VF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysg ICAgICAgIGlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDEpKSB7CisrICAgICAg ICAgICAgZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFn cyk7CisrICAgICAgICAgICAgcnYgPSAwOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAg ICAgfQorKyAgICAgICAgaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgdGQt Pm5pZCwgJnRkLT5mbGFncykpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAg RklQU19kcmJnX2ZyZWUoZGN0eCk7CisrICAgIHJldHVybiBydjsKKyt9CisrCisraW50IEZJUFNf c2VsZnRlc3RfZHJiZ19hbGwodm9pZCkKKyt7CisrICAgIERSQkdfQ1RYICpkY3R4OworKyAgICBE UkJHX1NFTEZURVNUX0RBVEEgKnRkOworKyAgICBpbnQgcnYgPSAxOworKyAgICBkY3R4ID0gRklQ U19kcmJnX25ldygwLCAwKTsKKysgICAgaWYgKCFkY3R4KQorKyAgICAgICAgcmV0dXJuIDA7Cisr ICAgIGZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykgeworKyAgICAgICAg aWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFn cykpCisrICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAgICBpZiAoIWZpcHNfZHJiZ19zaW5n bGVfa2F0KGRjdHgsIHRkLCAwKSkgeworKyAgICAgICAgICAgIGZpcHNfcG9zdF9mYWlsZWQoRklQ U19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKyAgICAgICAgICAgIHJ2ID0gMDsK KysgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmICghZmlwc19k cmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKSkgeworKyAgICAgICAgICAgIGZpcHNfcG9zdF9mYWls ZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKyAgICAgICAgICAgIHJ2 ID0gMDsKKysgICAgICAgICAgICBjb250aW51ZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmICgh Zmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQor KyAgICAgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIEZJUFNfZHJiZ19mcmVlKGRjdHgp OworKyAgICByZXR1cm4gcnY7CisrfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Zp cHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfc2VsZnRlc3QuaAorLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19zZWxmdGVzdC5oLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjU1NjI1OTggKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaAkyMDE1 LTEyLTA0IDEzOjU1OjUxLjk2NTU2MjU5OCArMDEwMAorQEAgLTAsMCArMSwxNzkxIEBACisrLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9u LgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9w ZW5zc2wtY29yZS5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwor KyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgor KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KKysgKgorKyAqLworKworKy8qIFNlbGZ0ZXN0IGFuZCBoZWFsdGggY2hlY2sgZGF0YSBmb3Ig dGhlIFNQODAwLTkwIERSQkcgKi8KKysKKysjZGVmaW5lIF9fZmlwc19jb25zdHNlZworKworKy8q IEFFUy0xMjggdXNlIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHg2 MSwgMHg1MiwgMHg3YywgMHhlMywgMHgyMywgMHg3ZCwgMHgwYSwgMHgwNywgMHgxMCwgMHgwYywg MHg1MCwgMHgzMywKKysgICAgMHhjOCwgMHhkYiwgMHhmZiwgMHgxMgorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX25v bmNlW10gPSB7CisrICAgIDB4NTEsIDB4MGQsIDB4ODUsIDB4NzcsIDB4ZWQsIDB4MjIsIDB4OTcs IDB4MjgKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysg ICAgMHg1OSwgMHg5ZiwgMHhiYiwgMHhjZCwgMHhkNSwgMHgyNSwgMHg2OSwgMHhiNSwgMHhjYiwg MHhiNSwgMHgwMywgMHhmZSwKKysgICAgMHhkNywgMHhkNywgMHgwMSwgMHg2NworK307CisrCisr X19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf dXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweGVmLCAweDg4LCAweDc2LCAw eDAxLCAweGFmLCAweDNjLCAweGZlLCAweDhiLCAweGFmLCAweDI2LCAweDA2LCAweDllLAorKyAg ICAweDlhLCAweDQ3LCAweDA4LCAweDc2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0 cHJbXSA9IHsKKysgICAgMHhlMiwgMHg3NiwgMHhmOSwgMHhmNiwgMHgzYSwgMHhiYSwgMHgxMCwg MHg5ZiwgMHhiZiwgMHg0NywgMHgwZSwgMHg1MSwKKysgICAgMHgwOSwgMHhmYiwgMHhhMywgMHhi NgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhkNCwg MHg5OCwgMHg4YSwgMHg0NiwgMHg4MCwgMHg0YywgMHhkYiwgMHhhMywgMHg1OSwgMHgwMiwgMHg1 NywgMHg1MiwKKysgICAgMHg2NiwgMHgxYywgMHhlYSwgMHg1YgorK307CisrCisrX19maXBzX2Nv bnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3By X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHg4OCwgMHg4YywgMHg5MSwgMHhkNiwgMHhi ZSwgMHg1NiwgMHg2ZSwgMHgwOCwgMHg5YSwgMHg2MiwgMHgyYiwgMHgxMSwKKysgICAgMHgzZiwg MHg1ZSwgMHgzMSwgMHgwNgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0g eworKyAgICAweGMwLCAweDVjLCAweDZiLCAweDk4LCAweDAxLCAweDBkLCAweDU4LCAweDE4LCAw eDUxLCAweDE4LCAweDk2LCAweGFlLAorKyAgICAweGE3LCAweGUzLCAweGE4LCAweDY3CisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91 c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4Y2YsIDB4MDEsIDB4YWMsIDB4MjIs IDB4MzEsIDB4MDYsIDB4OGUsIDB4ZmMsIDB4Y2UsIDB4NTYsIDB4ZWEsIDB4MjQsCisrICAgIDB4 MGYsIDB4MzgsIDB4NDMsIDB4YzYKKyt9OworKworKy8qIEFFUy0xMjggdXNlIGRmIE5vIFBSICAq LworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3Vz ZV9kZl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHgxZiwgMHg4ZSwgMHgzNCwgMHg4MiwgMHgw YywgMHhiNywgMHhiZSwgMHhjNSwgMHgwMSwgMHgzZSwgMHhkMCwgMHhhMywKKysgICAgMHg5ZCwg MHg3ZCwgMHgxYywgMHg5YgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX25vbmNlW10gPSB7CisrICAgIDB4ZDUsIDB4NGQs IDB4YmQsIDB4NGEsIDB4OTMsIDB4N2YsIDB4YjgsIDB4OTYKKyt9OworKworK19fZmlwc19jb25z dHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wZXJz b25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHhhYiwgMHhkNiwgMHgzZiwgMHgwNCwgMHhm ZSwgMHgyNywgMHg2YiwgMHgyZCwgMHhkNywgMHhjMywgMHgxYywgMHhmMywKKysgICAgMHgzOCwg MHg2NiwgMHhiYSwgMHgxYgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAw eGZlLCAweGY0LCAweDA5LCAweGE4LCAweGI3LCAweDczLCAweDI3LCAweDljLCAweDVmLCAweGE3 LCAweGVhLCAweDQ2LAorKyAgICAweGI1LCAweGUyLCAweGIyLCAweDQxCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfaW50 X3JldHVybmVkYml0c1tdID0geworKyAgICAweDQyLCAweGU0LCAweDRlLCAweDdiLCAweDI3LCAw eGRkLCAweGNiLCAweGJjLCAweDBhLCAweGNmLCAweGE2LCAweDY3LAorKyAgICAweGU3LCAweDU3 LCAweDExLCAweGI0CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7Cisr ICAgIDB4MTQsIDB4MjYsIDB4NjksIDB4ZDksIDB4ZjMsIDB4NjUsIDB4MDMsIDB4ZDYsIDB4NmIs IDB4YjksIDB4NDQsIDB4MGIsCisrICAgIDB4YzcsIDB4YzQsIDB4OWUsIDB4MzkKKyt9OworKwor K19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg1NSwgMHgyZSwgMHg2 MCwgMHg5YSwgMHgwNSwgMHg3MiwgMHg4YSwgMHhhOCwgMHhlZiwgMHgyMiwgMHg4MSwgMHg1YSwK KysgICAgMHhjOCwgMHg5MywgMHhmYSwgMHg4NAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJb XSA9IHsKKysgICAgMHgzYywgMHg0MCwgMHhjOCwgMHhjNCwgMHgxNiwgMHgwYywgMHgyMSwgMHhh NCwgMHgzNywgMHgyYywgMHg4ZiwgMHhhNSwKKysgICAgMHgwNiwgMHgwYywgMHgxNSwgMHgyYwor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x MjhfdXNlX2RmX3JldHVybmVkYml0c1tdID0geworKyAgICAweGUxLCAweDNlLCAweDk5LCAweDk4 LCAweDg2LCAweDY3LCAweDBiLCAweDYzLCAweDdiLCAweGJlLCAweDNmLCAweDg4LAorKyAgICAw eDQ2LCAweDgxLCAweGM3LCAweDE5CisrfTsKKysKKysvKiBBRVMtMTkyIHVzZSBkZiBQUiAgKi8K KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2Vf ZGZfcHJfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4MmIsIDB4NGUsIDB4OGIsIDB4ZTEsIDB4 ZjEsIDB4MzQsIDB4ODAsIDB4NTYsIDB4ODEsIDB4ZjksIDB4NzQsIDB4ZWMsCisrICAgIDB4MTcs IDB4NDQsIDB4MmEsIDB4ZjEsIDB4MTQsIDB4YjAsIDB4YmYsIDB4OTcsIDB4MzksIDB4YjcsIDB4 MDQsIDB4N2QKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX3VzZV9kZl9wcl9ub25jZVtdID0geworKyAgICAweGQ2LCAweDlkLCAweGVi LCAweDE0LCAweDRlLCAweDZjLCAweDMwLCAweDFlLCAweDM5LCAweDU1LCAweDczLCAweGQwLAor KyAgICAweGQxLCAweDgwLCAweDc4LCAweGZhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4ZmMsIDB4NDMsIDB4NGEsIDB4ZjgsIDB4OWEsIDB4 NTUsIDB4YjMsIDB4NTMsIDB4ODMsIDB4ZTIsIDB4MTgsIDB4MTYsCisrICAgIDB4MGMsIDB4ZGMs IDB4Y2QsIDB4NWUsIDB4NGYsIDB4YTAsIDB4MDMsIDB4MDEsIDB4MmIsIDB4OWYsIDB4ZTQsIDB4 ZDUsCisrICAgIDB4N2QsIDB4NDksIDB4ZjAsIDB4NDEsIDB4OWUsIDB4M2QsIDB4OTksIDB4MDQK Kyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHg1ZSwgMHg5 ZiwgMHg0OSwgMHg2ZiwgMHgyMSwgMHg4YiwgMHgxZCwgMHgzMiwgMHhkNSwgMHg4NCwgMHg1Yywg MHhhYywKKysgICAgMHhhZiwgMHhkZiwgMHhlNCwgMHg3OSwgMHg5ZSwgMHhhZiwgMHhhOSwgMHg4 MiwgMHhkMCwgMHhmOCwgMHg0ZiwgMHhjYiwKKysgICAgMHg2OSwgMHgxMCwgMHgwYSwgMHg3ZSwg MHg4MSwgMHg1NywgMHhiNSwgMHgzNgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHBy W10gPSB7CisrICAgIDB4ZDQsIDB4ODEsIDB4MGMsIDB4ZDcsIDB4NjYsIDB4MzksIDB4ZWMsIDB4 NDIsIDB4NTMsIDB4ODcsIDB4NDEsIDB4YTUsCisrICAgIDB4MWUsIDB4N2QsIDB4ODAsIDB4OTEs IDB4OGUsIDB4YmIsIDB4ZWQsIDB4YWMsIDB4MTQsIDB4MDIsIDB4MWEsIDB4ZDUKKyt9OworKwor K19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZGYsIDB4MWQsIDB4Mzks IDB4NDUsIDB4N2MsIDB4OWIsIDB4YzYsIDB4MmIsIDB4N2QsIDB4OGMsIDB4OTMsIDB4ZTksCisr ICAgIDB4MTksIDB4MzAsIDB4NmIsIDB4NjcKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlvbmFs aW5wdXQyW10gPSB7CisrICAgIDB4MDAsIDB4NzEsIDB4MjcsIDB4NGUsIDB4ZDMsIDB4MTQsIDB4 ZjEsIDB4MjAsIDB4N2YsIDB4NGEsIDB4NDEsIDB4MzIsCisrICAgIDB4MmEsIDB4OTcsIDB4MTEs IDB4NDMsIDB4OGYsIDB4NGEsIDB4MTUsIDB4N2IsIDB4OWIsIDB4NTEsIDB4NzksIDB4ZGEsCisr ICAgIDB4NDksIDB4M2QsIDB4ZGUsIDB4ZTgsIDB4YmMsIDB4OTMsIDB4OTEsIDB4OTkKKyt9Owor KworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAgMHg5MCwgMHhlZSwgMHg3 NiwgMHhhMSwgMHg0NSwgMHg4ZCwgMHhiNywgMHg0MCwgMHhiMCwgMHgxMSwgMHhiZiwgMHhkMCwK KysgICAgMHg2NSwgMHhkNywgMHgzYywgMHg3YywgMHg0ZiwgMHgyMCwgMHgzZiwgMHg0ZSwgMHgx MSwgMHg5ZCwgMHhiMywgMHg1ZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0geworKyAg ICAweDI0LCAweDNiLCAweDIwLCAweGE0LCAweDM3LCAweDY2LCAweGJhLCAweDcyLCAweDM5LCAw eDNmLCAweGNmLCAweDNjLAorKyAgICAweDdlLCAweDFhLCAweDJiLCAweDgzCisrfTsKKysKKysv KiBBRVMtMTkyIHVzZSBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4 OGQsIDB4NzQsIDB4YTQsIDB4NTAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4MGMsIDB4MmEsIDB4Njks IDB4YzQsIDB4ODIsCisrICAgIDB4M2IsIDB4YmIsIDB4ZGEsIDB4MGUsIDB4N2YsIDB4NzcsIDB4 YTMsIDB4MTcsIDB4NzgsIDB4NTcsIDB4YjIsIDB4N2IKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9ub25jZVtdID0gewor KyAgICAweDc1LCAweGQ1LCAweDFmLCAweGFjLCAweGE0LCAweDhkLCAweDQyLCAweDc4LCAweGQ3 LCAweDY5LCAweDg2LCAweDlkLAorKyAgICAweDc3LCAweGQ3LCAweDQxLCAweDBlCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml91c2VfZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4NGUsIDB4MzMsIDB4 NDEsIDB4M2MsIDB4OWMsIDB4YzIsIDB4ZDIsIDB4NTMsIDB4YWYsIDB4OTAsIDB4ZWEsIDB4Y2Ys CisrICAgIDB4MTksIDB4NTAsIDB4MWUsIDB4ZTYsIDB4NmYsIDB4NjMsIDB4YzgsIDB4MzIsIDB4 MjIsIDB4ZGMsIDB4MDcsIDB4NjUsCisrICAgIDB4OWMsIDB4ZDMsIDB4ZjgsIDB4MzAsIDB4OWUs IDB4ZWQsIDB4MzUsIDB4NzAKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAg MHg1ZCwgMHg4YiwgMHg4YywgMHhjMSwgMHhkZiwgMHgwZSwgMHgwMiwgMHg3OCwgMHhmYiwgMHgx OSwgMHhiOCwgMHg2OSwKKysgICAgMHg3OCwgMHg0ZSwgMHg5YywgMHg1MiwgMHhiYywgMHhjNywg MHgyMCwgMHhjOSwgMHhlNiwgMHg1ZSwgMHg3NywgMHgyMiwKKysgICAgMHgyOCwgMHgzZCwgMHgw YywgMHg5ZSwgMHg2OCwgMHhhOCwgMHg0NSwgMHhkNworK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2ludF9yZXR1cm5lZGJp dHNbXSA9IHsKKysgICAgMHhkNSwgMHhlNywgMHgwOCwgMHhjNSwgMHgxOSwgMHg5OSwgMHhkNSwg MHgzMSwgMHgwMywgMHgwYSwgMHg3NCwgMHhiNiwKKysgICAgMHhiNywgMHhlZCwgMHhlOSwgMHhl YQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweDljLCAw eDI2LCAweGRhLCAweGYxLCAweGFjLCAweGQ5LCAweDVhLCAweGQ2LCAweGE4LCAweDY1LCAweGY1 LCAweDAyLAorKyAgICAweDhmLCAweGRjLCAweGEyLCAweDA5LCAweDU0LCAweGE2LCAweGUyLCAw eGE0LCAweGRlLCAweDMyLCAweGUwLCAweDAxCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlu cHV0cmVzZWVkW10gPSB7CisrICAgIDB4OWIsIDB4OTAsIDB4YjAsIDB4M2EsIDB4MGUsIDB4M2Es IDB4ODAsIDB4MDcsIDB4NGEsIDB4ZjQsIDB4ZGEsIDB4NzYsCisrICAgIDB4MjgsIDB4MzAsIDB4 M2MsIDB4ZWUsIDB4NTQsIDB4MWIsIDB4OTQsIDB4NTksIDB4NTEsIDB4NDMsIDB4NTYsIDB4Nzcs CisrICAgIDB4YWYsIDB4ODgsIDB4ZGQsIDB4NjMsIDB4ODksIDB4NDcsIDB4MDYsIDB4NjUKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4M2MsIDB4MTEsIDB4NjQsIDB4 N2EsIDB4OTYsIDB4ZjUsIDB4ZDgsIDB4YjgsIDB4YWUsIDB4ZDYsIDB4NzAsIDB4NGUsCisrICAg IDB4MTYsIDB4OTYsIDB4ZGUsIDB4ZTksIDB4NjIsIDB4YmMsIDB4ZWUsIDB4MjgsIDB4MmYsIDB4 MjYsIDB4YTYsIDB4ZjAsCisrICAgIDB4NTYsIDB4ZWYsIDB4YTMsIDB4ZjEsIDB4NmIsIDB4YTEs IDB4YjEsIDB4NzcKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgwYiwgMHhl MiwgMHg1NiwgMHgwMywgMHgxZSwgMHhkYiwgMHgyYywgMHg2ZCwgMHg3ZiwgMHgxYiwgMHgxNSwg MHg1OCwKKysgICAgMHgxYSwgMHhmOSwgMHgxMywgMHgyOAorK307CisrCisrLyogQUVTLTI1NiB1 c2UgZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDYxLCAweDY4LCAw eGZjLCAweDFhLCAweGYwLCAweGI1LCAweDk1LCAweDZiLCAweDg1LCAweDA5LCAweDliLCAweDc0 LAorKyAgICAweDNmLCAweDEzLCAweDc4LCAweDQ5LCAweDNiLCAweDg1LCAweGVjLCAweDkzLCAw eDEzLCAweDNiLCAweGE5LCAweDRmLAorKyAgICAweDk2LCAweGFiLCAweDJjLCAweGU0LCAweGM4 LCAweDhmLCAweGRkLCAweDZhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfbm9uY2VbXSA9IHsKKysgICAgMHhhZCwg MHhkMiwgMHhiYiwgMHhiYSwgMHhiNywgMHg2NSwgMHg4OSwgMHhjMywgMHgyMSwgMHg2YywgMHg1 NSwgMHgzMywKKysgICAgMHgyYiwgMHgzNiwgMHhmZiwgMHhhNAorK307CisrCisrX19maXBzX2Nv bnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3By X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweDZlLCAweGNhLCAweGU3LCAweDIw LCAweDcyLCAweGQzLCAweDg0LCAweDVhLCAweDMyLCAweGQzLCAweDRiLCAweDI0LAorKyAgICAw eDcyLCAweGM0LCAweDYzLCAweDJiLCAweDlkLCAweDEyLCAweDI0LCAweDBjLCAweDIzLCAweDI2 LCAweDhlLCAweDgzLAorKyAgICAweDE2LCAweDM3LCAweDBiLCAweGQxLCAweDA2LCAweDRmLCAw eDY4LCAweDZkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAg IDB4N2UsIDB4MDgsIDB4NGEsIDB4YmIsIDB4ZTMsIDB4MjEsIDB4N2MsIDB4YzksIDB4MjMsIDB4 ZDIsIDB4ZjgsIDB4YjAsCisrICAgIDB4NzMsIDB4OTgsIDB4YmEsIDB4ODQsIDB4NzQsIDB4MjMs IDB4YWIsIDB4MDYsIDB4OGEsIDB4ZTIsIDB4MjIsIDB4ZDMsCisrICAgIDB4N2IsIDB4Y2UsIDB4 OWIsIDB4ZDIsIDB4NGEsIDB4NzYsIDB4YjgsIDB4ZGUKKyt9OworKworK19fZmlwc19jb25zdHNl ZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRy b3B5aW5wdXRwcltdID0geworKyAgICAweDBiLCAweDIzLCAweGFmLCAweGRmLCAweGYxLCAweDYy LCAweGQ3LCAweGQzLCAweDQzLCAweDk3LCAweGY4LCAweDc3LAorKyAgICAweDA0LCAweGE4LCAw eDQyLCAweDIwLCAweGJkLCAweGY2LCAweDBmLCAweGMxLCAweDE3LCAweDJmLCAweDlmLCAweDU0 LAorKyAgICAweGJiLCAweDU2LCAweDE3LCAweDg2LCAweDY4LCAweDBlLCAweGJhLCAweGE5Cisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweDMxLCAweDhl LCAweGFkLCAweGFmLCAweDQwLCAweGViLCAweDZiLCAweDc0LCAweDMxLCAweDQ2LCAweDgwLCAw eGM3LAorKyAgICAweDE3LCAweGFiLCAweDNjLCAweDdhCisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfYWRk aXRpb25hbGlucHV0MltdID0geworKyAgICAweDk0LCAweDZiLCAweGM5LCAweDlmLCAweGFiLCAw eDhkLCAweGM1LCAweGVjLCAweDcxLCAweDg4LCAweDFkLCAweDAwLAorKyAgICAweDhjLCAweDg5 LCAweDY4LCAweGU0LCAweGM4LCAweDA3LCAweDc3LCAweDM2LCAweDE3LCAweDZkLCAweDc5LCAw eDc4LAorKyAgICAweGM3LCAweDA2LCAweDRlLCAweDk5LCAweDA0LCAweDI4LCAweDI5LCAweGMz CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4YmYsIDB4 NmMsIDB4NTksIDB4MmEsIDB4MGQsIDB4NDQsIDB4MGYsIDB4YWUsIDB4OWEsIDB4NWUsIDB4MDMs IDB4NzMsCisrICAgIDB4ZDgsIDB4YTYsIDB4ZTEsIDB4Y2YsIDB4MjUsIDB4NjEsIDB4MzgsIDB4 MjQsIDB4ODYsIDB4OWUsIDB4NTMsIDB4ZTgsCisrICAgIDB4YTQsIDB4ZGYsIDB4NTYsIDB4ZjQs IDB4MDYsIDB4MDcsIDB4OWMsIDB4MGYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsK KysgICAgMHgyMiwgMHg0YSwgMHhiNCwgMHhiOCwgMHhiNiwgMHhlZSwgMHg3ZCwgMHhiMSwgMHg5 ZSwgMHhjOSwgMHhmOSwgMHhhMCwKKysgICAgMHhkOSwgMHhlMiwgMHg5NywgMHgwMAorK307Cisr CisrLyogQUVTLTI1NiB1c2UgZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0geworKyAg ICAweGE1LCAweDNlLCAweDM3LCAweDEwLCAweDE3LCAweDQzLCAweDkxLCAweDkzLCAweDU5LCAw eDFlLCAweDQ3LCAweDUwLAorKyAgICAweDg3LCAweGFhLCAweGRkLCAweGQ1LCAweGMxLCAweGMz LCAweDg2LCAweGNkLCAweGNhLCAweDBkLCAweGRiLCAweDY4LAorKyAgICAweGUwLCAweDAyLCAw eGQ4LCAweDBmLCAweGRjLCAweDQwLCAweDFhLCAweDQ3CisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfbm9uY2VbXSA9IHsK KysgICAgMHhhOSwgMHg0ZCwgMHhhNSwgMHg1YSwgMHhmZCwgMHhjNSwgMHgwYywgMHhlNSwgMHgx YywgMHg5YSwgMHgzYiwgMHg4YSwKKysgICAgMHg0YywgMHg0NCwgMHg4NCwgMHg0MAorK307Cisr CisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18y NTZfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweDhiLCAweDUyLCAw eGEyLCAweDRhLCAweDkzLCAweGMzLCAweDRlLCAweGE3LCAweDFlLCAweDFjLCAweGE3LCAweDA1 LAorKyAgICAweGViLCAweDgyLCAweDliLCAweGE2LCAweDVkLCAweGU0LCAweGQ0LCAweGUwLCAw eDdmLCAweGEzLCAweGQ4LCAweDZiLAorKyAgICAweDM3LCAweDg0LCAweDVmLCAweGYxLCAweGM3 LCAweGQ1LCAweGY2LCAweGQyCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAg IDB4MjAsIDB4ZjQsIDB4MjIsIDB4ZWQsIDB4ZjgsIDB4NWMsIDB4YTEsIDB4NmEsIDB4MDEsIDB4 Y2YsIDB4YmUsIDB4NWYsCisrICAgIDB4OGQsIDB4NmMsIDB4OTQsIDB4N2YsIDB4YWUsIDB4MTIs IDB4YTgsIDB4NTcsIDB4ZGIsIDB4MmEsIDB4YTksIDB4YmYsCisrICAgIDB4YzcsIDB4YjMsIDB4 NjUsIDB4ODEsIDB4ODAsIDB4OGQsIDB4MGQsIDB4NDYKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9pbnRfcmV0dXJuZWRi aXRzW10gPSB7CisrICAgIDB4NGUsIDB4NDQsIDB4ZmQsIDB4ZjMsIDB4OWUsIDB4MjksIDB4YTIs IDB4YjgsIDB4MGYsIDB4NWQsIDB4NmMsIDB4ZTEsCisrICAgIDB4MjgsIDB4MGMsIDB4M2IsIDB4 YzEKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHhkZCwg MHg0MCwgMHhlNSwgMHg5OCwgMHg3YiwgMHgyNywgMHgxNiwgMHg3MywgMHgxNSwgMHg2OCwgMHhk MiwgMHg3NiwKKysgICAgMHhiZiwgMHgwYywgMHg2NywgMHgxNSwgMHg3NSwgMHg3OSwgMHgwMywg MHhkMywgMHhkZSwgMHhkZSwgMHg5MSwgMHg0NiwKKysgICAgMHg0MiwgMHhkZCwgMHhkNCwgMHg2 NywgMHhjOCwgMHg3OSwgMHhjOCwgMHgxZQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1 dHJlc2VlZFtdID0geworKyAgICAweDdmLCAweGQ4LCAweDFmLCAweGJkLCAweDJhLCAweGI1LCAw eDFjLCAweDExLCAweDVkLCAweDgzLCAweDRlLCAweDk5LAorKyAgICAweGY2LCAweDVjLCAweGE1 LCAweDQwLCAweDIwLCAweGVkLCAweDM4LCAweDhlLCAweGQ1LCAweDllLCAweGUwLCAweDc1LAor KyAgICAweDkzLCAweGZlLCAweDEyLCAweDVlLCAweDVkLCAweDczLCAweGZiLCAweDc1CisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweGNkLCAweDJjLCAweGZmLCAweDE0 LCAweDY5LCAweDNlLCAweDRjLCAweDllLCAweGZkLCAweGZlLCAweDI2LCAweDBkLAorKyAgICAw eGU5LCAweDg2LCAweDAwLCAweDQ5LCAweDMwLCAweGJhLCAweGIxLCAweGM2LCAweDUwLCAweDU3 LCAweDc3LCAweDJhLAorKyAgICAweDYyLCAweDM5LCAweDJjLCAweDNiLCAweDc0LCAweGViLCAw eGM5LCAweDBkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzI1Nl91c2VfZGZfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4NGYsIDB4Nzgs IDB4YmUsIDB4YjksIDB4NGQsIDB4OTcsIDB4OGMsIDB4ZTksIDB4ZDAsIDB4OTcsIDB4ZmUsIDB4 YWQsCisrICAgIDB4ZmEsIDB4ZmQsIDB4MzUsIDB4NWUKKyt9OworKworKy8qIEFFUy0xMjggbm8g ZGYgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4OWEsIDB4MjUsIDB4NjUs IDB4MTAsIDB4NjcsIDB4ZDUsIDB4YjYsIDB4NmIsIDB4NzAsIDB4YTEsIDB4YjMsIDB4YTQsCisr ICAgIDB4NDMsIDB4OTUsIDB4ODAsIDB4YzAsIDB4ODQsIDB4MGEsIDB4NzksIDB4YjAsIDB4ODgs IDB4NzQsIDB4ZjIsIDB4YmYsCisrICAgIDB4MzEsIDB4NmMsIDB4MzMsIDB4MzgsIDB4MGIsIDB4 MDAsIDB4YjIsIDB4NWEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX25vbmNlW10gPSB7CisrICAgIDB4NzgsIDB4NDcs IDB4NmIsIDB4ZjcsIDB4OTAsIDB4OGUsIDB4ODcsIDB4ZjEKKyt9OworKworK19fZmlwc19jb25z dHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweGY3LCAweDIyLCAweDFkLCAweDNhLCAw eGJlLCAweDFkLCAweGNhLCAweDMyLCAweDFiLCAweGJkLCAweDg3LCAweDBjLAorKyAgICAweDUx LCAweDI0LCAweDE5LCAweGVlLCAweGEzLCAweDIzLCAweDA5LCAweDYzLCAweDMzLCAweDNkLCAw eGE4LCAweDBjLAorKyAgICAweDFjLCAweGZhLCAweDQyLCAweDg5LCAweGNjLCAweDZmLCAweGEw LCAweGE4CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHhj OSwgMHhlMCwgMHg4MCwgMHhiZiwgMHg4YywgMHg0NSwgMHg1OCwgMHgzOSwgMHhmZiwgMHgwMCwg MHhhYiwgMHgwMiwKKysgICAgMHg0YywgMHgzZSwgMHgzYSwgMHg5NSwgMHg5YiwgMHg4MCwgMHhh OCwgMHgyMSwgMHgyYSwgMHhlZSwgMHhiYSwgMHg3MywKKysgICAgMHhiMSwgMHhkOSwgMHhjZiwg MHgyOCwgMHhmNiwgMHg4ZiwgMHg5YiwgMHgxMgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0cHJb XSA9IHsKKysgICAgMHg0YywgMHhhOCwgMHhjNSwgMHhmMCwgMHg1OSwgMHg5ZSwgMHhhNiwgMHg4 ZCwgMHgyNiwgMHg1MywgMHhkNywgMHg4YSwKKysgICAgMHhhOSwgMHhkOCwgMHhmNywgMHhlZCwg MHhiMiwgMHhmOSwgMHgxMiwgMHg0MiwgMHhlMSwgMHhlNSwgMHhiZCwgMHhlNywKKysgICAgMHhl NywgMHgxZCwgMHg3NCwgMHg5OSwgMHgwMCwgMHg5ZCwgMHgzMSwgMHgzZQorK307CisrCisrX19m aXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9f ZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGUyLCAweGFjLCAweDIwLCAweGYw LCAweDgwLCAweGU3LCAweGJjLCAweDdlLCAweDljLCAweDdiLCAweDY1LCAweDcxLAorKyAgICAw eGFmLCAweDE5LCAweDMyLCAweDE2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQy W10gPSB7CisrICAgIDB4MzIsIDB4N2YsIDB4MzgsIDB4OGIsIDB4NzMsIDB4MGEsIDB4NzgsIDB4 ODMsIDB4ZGMsIDB4MzAsIDB4YmUsIDB4OWYsCisrICAgIDB4MTAsIDB4MWYsIDB4ZjUsIDB4MWYs IDB4Y2EsIDB4MDAsIDB4YjUsIDB4MGQsIDB4ZDYsIDB4OWQsIDB4NjAsIDB4ODMsCisrICAgIDB4 NTEsIDB4NTQsIDB4N2QsIDB4MzgsIDB4MjMsIDB4M2EsIDB4NTIsIDB4NTAKKyt9OworKworK19f Zmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25v X2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAweDE4LCAweDYxLCAweDUzLCAweDU2 LCAweGVkLCAweGVkLCAweGQ3LCAweDIwLCAweGZiLCAweDcxLCAweDA0LCAweDdhLAorKyAgICAw eGIyLCAweGFjLCAweGMxLCAweDI4LCAweGNkLCAweGYyLCAweGMyLCAweGZjLCAweGFhLCAweGIx LCAweDA2LCAweDA3LAorKyAgICAweGU5LCAweDQ2LCAweDk1LCAweDAyLCAweDQ4LCAweDAxLCAw eDc4LCAweGY5CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgyOSwgMHhj OCwgMHgxYiwgMHgxNSwgMHhiMSwgMHhkMSwgMHhjMiwgMHhmNiwgMHg3MSwgMHg4NiwgMHg2OCwg MHgzMywKKysgICAgMHg1NywgMHg4MiwgMHgzMywgMHhhZgorK307CisrCisrLyogQUVTLTEyOCBu byBkZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHhjOSwgMHhjNSwgMHg3 OSwgMHhiYywgMHhlOCwgMHhjNSwgMHgxOSwgMHhkOCwgMHhiYywgMHg2NiwgMHg3MywgMHg2NywK KysgICAgMHhmNiwgMHhkMywgMHg3MiwgMHhhYSwgMHhhNiwgMHgxNiwgMHhiOCwgMHg1MCwgMHhi NywgMHg0NywgMHgzYSwgMHg0MiwKKysgICAgMHhhYiwgMHhmNCwgMHgxNiwgMHhiMiwgMHg5Niwg MHhkMiwgMHhiNiwgMHg2MAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfbm9uY2VbXSA9IHsKKysgICAgMHg1ZiwgMHhiZiwg MHg5NywgMHgwYywgMHg0YiwgMHhhNCwgMHg4NywgMHgxMworK307CisrCisrX19maXBzX2NvbnN0 c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcGVyc29u YWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4Y2UsIDB4ZmIsIDB4N2IsIDB4M2YsIDB4ZDQs IDB4NmIsIDB4MjksIDB4MGQsIDB4NjksIDB4MDYsIDB4ZmYsIDB4YmIsCisrICAgIDB4ZjIsIDB4 ZTUsIDB4YzYsIDB4NmMsIDB4MGEsIDB4MTAsIDB4YTAsIDB4Y2YsIDB4MWEsIDB4NDgsIDB4Yzcs IDB4OGIsCisrICAgIDB4M2MsIDB4MTYsIDB4ODgsIDB4ZWQsIDB4NTAsIDB4MTMsIDB4ODEsIDB4 Y2UKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDRiLCAweDIyLCAweDQ2 LCAweDE4LCAweDAyLCAweDdiLCAweGQyLCAweDFiLCAweDIyLCAweDQyLCAweDdjLCAweDM3LAor KyAgICAweGQ5LCAweGY2LCAweGU4LCAweDliLCAweDEyLCAweDMwLCAweDVmLCAweGU5LCAweDkw LCAweGU4LCAweDA4LCAweDI0LAorKyAgICAweDRmLCAweDA2LCAweDY2LCAweGRiLCAweDE5LCAw eDJiLCAweDEzLCAweDk1CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4 MmUsIDB4OTYsIDB4NzAsIDB4NjQsIDB4ZmEsIDB4ZGYsIDB4ZGYsIDB4NTcsIDB4YjUsIDB4ODIs IDB4ZWUsIDB4ZDYsCisrICAgIDB4ZWQsIDB4M2UsIDB4NjUsIDB4YzIKKyt9OworKworK19fZmlw c19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2Rm X2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweDI2LCAweGMwLCAweDcyLCAweDE2LCAw eDNhLCAweDRiLCAweGI3LCAweDk5LCAweGQ0LCAweDA3LCAweGFmLCAweDY2LAorKyAgICAweDYy LCAweDM2LCAweDk2LCAweGE0LCAweDUxLCAweDE3LCAweGZhLCAweDA3LCAweDhiLCAweDE3LCAw eDVlLCAweGExLAorKyAgICAweDJmLCAweDNjLCAweDEwLCAweGU3LCAweDkwLCAweGQwLCAweDQ2 LCAweDAwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAg MHg4MywgMHgzOSwgMHgzNywgMHg3YiwgMHgwMiwgMHgwNiwgMHhkMiwgMHgxMiwgMHgxMywgMHg4 ZCwgMHg4YiwgMHhmMiwKKysgICAgMHhmMCwgMHhmNiwgMHgyNiwgMHhlYiwgMHhhNCwgMHgyMiwg MHg3YiwgMHhjMiwgMHhlNywgMHhiYSwgMHg3OSwgMHhlNCwKKysgICAgMHgzYiwgMHg3NywgMHg1 ZCwgMHg0ZCwgMHg0NywgMHhiMiwgMHgyZCwgMHhiNAorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0 MltdID0geworKyAgICAweDBiLCAweGI5LCAweDY3LCAweDM3LCAweGRiLCAweDgzLCAweGRmLCAw eGNhLCAweDgxLCAweDhiLCAweGY5LCAweDNmLAorKyAgICAweGYxLCAweDExLCAweDFiLCAweDJm LCAweGYwLCAweDYxLCAweGE2LCAweGRmLCAweGJhLCAweGEzLCAweGIxLCAweGFjLAorKyAgICAw eGQzLCAweGU2LCAweDA5LCAweGI4LCAweDJjLCAweDZhLCAweDY3LCAweGQ2CisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9y ZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgxZSwgMHhhNywgMHhhNCwgMHhlNCwgMHhlMSwgMHhh NiwgMHg3YywgMHg2OSwgMHg5YSwgMHg0NCwgMHg2YywgMHgzNiwKKysgICAgMHg4MSwgMHgzNywg MHgxOSwgMHhkNAorK307CisrCisrLyogQUVTLTE5MiBubyBkZiBQUiAgKi8KKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5 aW5wdXRbXSA9IHsKKysgICAgMHg5ZCwgMHgyYywgMHhkMiwgMHg1NSwgMHg2NiwgMHhlYSwgMHhl MCwgMHhiZSwgMHgxOCwgMHhiNywgMHg3NiwgMHhlNywKKysgICAgMHg3MywgMHgzNSwgMHhkOCwg MHgxZiwgMHhhZCwgMHgzYSwgMHhlMywgMHg4MSwgMHgwZSwgMHg5MiwgMHhkMCwgMHg2MSwKKysg ICAgMHhjOSwgMHgxMiwgMHgyNiwgMHhmNiwgMHgxYywgMHhkZiwgMHhmZSwgMHg0NywgMHhhYSwg MHhmZSwgMHg3ZCwgMHg1YSwKKysgICAgMHgxNywgMHgxZiwgMHg4ZCwgMHg5YQorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZf cHJfbm9uY2VbXSA9IHsKKysgICAgMHg0NCwgMHg4MiwgMHhlZCwgMHhlOCwgMHg0YywgMHgyOCwg MHg1YSwgMHgxNCwgMHhmZiwgMHg4OCwgMHg4ZCwgMHgxOSwKKysgICAgMHg2MSwgMHg1YywgMHhl ZSwgMHgwZgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Cisr ICAgIDB4NDcsIDB4ZDcsIDB4OWIsIDB4OTksIDB4YWEsIDB4Y2IsIDB4ZTcsIDB4ZDIsIDB4NTcs IDB4NjYsIDB4MmMsIDB4ZTEsCisrICAgIDB4NzgsIDB4ZDYsIDB4MmMsIDB4ZWEsIDB4YTMsIDB4 MjMsIDB4NWYsIDB4MmEsIDB4YzEsIDB4M2EsIDB4ZjAsIDB4YTQsCisrICAgIDB4MjAsIDB4M2Is IDB4ZmEsIDB4MDcsIDB4ZDUsIDB4MDUsIDB4MDIsIDB4ZTQsIDB4NTcsIDB4MDEsIDB4YjYsIDB4 MTAsCisrICAgIDB4NTcsIDB4MmUsIDB4ZTcsIDB4NTUKKyt9OworKworK19fZmlwc19jb25zdHNl ZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2FkZGl0 aW9uYWxpbnB1dFtdID0geworKyAgICAweDRiLCAweDc0LCAweDBiLCAweDQwLCAweGNlLCAweDZi LCAweGMyLCAweDZhLCAweDI0LCAweGI0LCAweGYzLCAweGFkLAorKyAgICAweDdhLCAweGE1LCAw eDdhLCAweGEyLCAweDE1LCAweGUyLCAweGM4LCAweDYxLCAweDE1LCAweGM2LCAweGI3LCAweDg1 LAorKyAgICAweDY5LCAweDExLCAweGFkLCAweDdiLCAweDE0LCAweGQyLCAweGY2LCAweDEyLCAw eGExLCAweDk1LCAweDVkLCAweDNmLAorKyAgICAweGUyLCAweGQwLCAweDBjLCAweDJmCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9u b19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0geworKyAgICAweDBjLCAweDljLCAweGFkLCAweDA1 LCAweGVlLCAweGFlLCAweDQ4LCAweDIzLCAweDg5LCAweDU5LCAweGExLCAweDk0LAorKyAgICAw eGQ3LCAweGQ4LCAweDc1LCAweGQ1LCAweDU0LCAweDkzLCAweGM3LCAweDRhLCAweGQ5LCAweDI2 LCAweGRlLCAweGViLAorKyAgICAweGJhLCAweGIwLCAweDdlLCAweDMwLCAweDFkLCAweDVmLCAw eDY5LCAweDQwLCAweDljLCAweDNiLCAweDE3LCAweDU4LAorKyAgICAweDFkLCAweDMwLCAweGIz LCAweDc4CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4 ZjcsIDB4OTMsIDB4YjAsIDB4NmQsIDB4NzcsIDB4ODMsIDB4ZDUsIDB4MzgsIDB4MDEsIDB4ZTEs IDB4NTIsIDB4NDAsCisrICAgIDB4N2UsIDB4M2UsIDB4MGMsIDB4MjYKKyt9OworKworK19fZmlw c19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2Rm X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHhiYywgMHg0YiwgMHgzNywgMHg0NCwg MHgxYywgMHhjNSwgMHg0NSwgMHg1ZiwgMHg4ZiwgMHg1MSwgMHg2MiwgMHg4YSwKKysgICAgMHg4 NSwgMHgzMCwgMHgxZCwgMHg3YywgMHhlNCwgMHhjZiwgMHhmNywgMHg0NCwgMHhjZSwgMHgzMiwg MHgzZSwgMHg1NywKKysgICAgMHg5NSwgMHhhNCwgMHgyYSwgMHhkZiwgMHhmZCwgMHg5ZSwgMHgz OCwgMHg0MSwgMHhiMywgMHhmNiwgMHhjNSwgMHhlZSwKKysgICAgMHgwYywgMHg0YiwgMHhlZSwg MHg2ZQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4ZWMs IDB4YWYsIDB4ZjYsIDB4NGYsIDB4YjEsIDB4YTAsIDB4NTQsIDB4YjUsIDB4NWIsIDB4ZTMsIDB4 NDYsIDB4YjAsCisrICAgIDB4NzYsIDB4NWEsIDB4N2MsIDB4M2YsIDB4N2IsIDB4OTQsIDB4Njks IDB4MjEsIDB4NTEsIDB4MDIsIDB4ZTUsIDB4OWYsCisrICAgIDB4MDQsIDB4NTksIDB4MDIsIDB4 OTgsIDB4YzYsIDB4NDMsIDB4MmMsIDB4Y2MsIDB4MjYsIDB4NGMsIDB4ODcsIDB4NmIsCisrICAg IDB4OGUsIDB4MGEsIDB4ODMsIDB4ZGYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX3JldHVybmVkYml0c1tdID0gewor KyAgICAweDc0LCAweDQ1LCAweGZiLCAweDUzLCAweDg0LCAweDk2LCAweGJlLCAweGZmLCAweDE1 LCAweGNjLCAweDQxLCAweDkxLAorKyAgICAweGI5LCAweGExLCAweDIxLCAweDY4CisrfTsKKysK KysvKiBBRVMtMTkyIG5vIGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dFtdID0geworKyAgICAw eDNjLCAweDdkLCAweGI1LCAweGUwLCAweDU0LCAweGQ5LCAweDZlLCAweDhjLCAweGE5LCAweDg2 LCAweGNlLCAweDRlLAorKyAgICAweDZiLCAweGFmLCAweGViLCAweDJmLCAweGU3LCAweDc1LCAw eGUwLCAweDhiLCAweGE0LCAweDNiLCAweDA3LCAweGZlLAorKyAgICAweGJlLCAweDMzLCAweDc1 LCAweDkzLCAweDgwLCAweDI3LCAweGI1LCAweDI5LCAweDQ3LCAweDhiLCAweGM3LCAweDI4LAor KyAgICAweDk0LCAweGMzLCAweDU5LCAweDYzCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9ub25jZVtdID0geworKyAgICAw eDQzLCAweGYxLCAweDdkLCAweGI4LCAweGMzLCAweGZlLCAweGQwLCAweDIzLCAweDZiLCAweGI0 LCAweDkyLCAweGRiLAorKyAgICAweDI5LCAweGZkLCAweDQ1LCAweDcxCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19k Zl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHg5ZiwgMHgyNCwgMHgyOSwgMHg5 OSwgMHg5ZSwgMHgwMSwgMHhhYiwgMHhlOSwgMHgxOSwgMHhkOCwgMHgyMywgMHgwOCwKKysgICAg MHhiNywgMHhkNiwgMHg3ZSwgMHg4YywgMHhjMCwgMHg5ZSwgMHg3ZiwgMHg2ZSwgMHg1YiwgMHgz MywgMHgyMCwgMHg5NiwKKysgICAgMHgwYiwgMHgyMywgMHgyYywgMHhhNSwgMHg2YSwgMHhmOCwg MHgxYiwgMHgwNCwgMHgyNiwgMHhkYiwgMHgyZSwgMHgyYiwKKysgICAgMHgzYiwgMHg4OCwgMHhj ZSwgMHgzNQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4OTQsIDB4ZTks IDB4N2MsIDB4M2QsIDB4YTcsIDB4ZGIsIDB4NjAsIDB4ODMsIDB4MWYsIDB4OTgsIDB4M2YsIDB4 MGIsCisrICAgIDB4ODgsIDB4NTksIDB4NTcsIDB4NTEsIDB4ODgsIDB4OWYsIDB4NzYsIDB4NDks IDB4OWYsIDB4YTYsIDB4ZGEsIDB4NzEsCisrICAgIDB4MWQsIDB4MGQsIDB4NDcsIDB4MTYsIDB4 NjMsIDB4YzUsIDB4NjgsIDB4ZTQsIDB4NWQsIDB4MzksIDB4NjksIDB4YjMsCisrICAgIDB4M2Us IDB4YmUsIDB4ZDQsIDB4OGUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAg MHhmOSwgMHhkNywgMHhhZCwgMHg2OSwgMHhhYiwgMHg4ZiwgMHgyMywgMHg1NiwgMHg3MCwgMHgx NywgMHg0ZiwgMHgyYSwKKysgICAgMHg0NSwgMHhlNywgMHg0YSwgMHhjNQorK307CisrCisrX19m aXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9f ZGZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4YTYsIDB4NzEsIDB4NmEsIDB4M2Qs IDB4YmEsIDB4ZDEsIDB4ZTgsIDB4NjYsIDB4YTYsIDB4ZWYsIDB4YjIsIDB4MGUsCisrICAgIDB4 YTgsIDB4OWMsIDB4YWEsIDB4NGUsIDB4YWYsIDB4MTcsIDB4ODksIDB4NTAsIDB4MDAsIDB4ZGEs IDB4YTEsIDB4YjEsCisrICAgIDB4MGIsIDB4YTQsIDB4ZDksIDB4MzUsIDB4ODksIDB4YzgsIDB4 ZTUsIDB4YjAsIDB4ZDksIDB4YjcsIDB4YzQsIDB4MzMsCisrICAgIDB4OWIsIDB4Y2IsIDB4N2Us IDB4NzUKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAw eDI3LCAweDIxLCAweGZjLCAweGMyLCAweGJkLCAweGYzLCAweDNjLCAweGNlLCAweGMzLCAweGNh LCAweGMxLCAweDAxLAorKyAgICAweGUwLCAweGZmLCAweDkzLCAweDEyLCAweDdkLCAweDU0LCAw eDQyLCAweGUzLCAweDlmLCAweDAzLCAweGRmLCAweDI3LAorKyAgICAweDA0LCAweDA3LCAweDNj LCAweDUzLCAweDdmLCAweGE4LCAweDY2LCAweGM4LCAweDk3LCAweDRiLCAweDYxLCAweDQwLAor KyAgICAweDVkLCAweDdhLCAweDI1LCAweDc5CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10g PSB7CisrICAgIDB4MmQsIDB4OGUsIDB4MTYsIDB4NWQsIDB4MGIsIDB4OWYsIDB4ZWIsIDB4YWEs IDB4ZDYsIDB4ZWMsIDB4MjgsIDB4NzEsCisrICAgIDB4N2MsIDB4MGIsIDB4YzEsIDB4MWQsIDB4 ZDQsIDB4NDQsIDB4MTksIDB4NDcsIDB4ZmQsIDB4MWQsIDB4N2MsIDB4ZTUsCisrICAgIDB4ZjMs IDB4MjcsIDB4ZTEsIDB4YjYsIDB4NzIsIDB4MGEsIDB4ZTAsIDB4ZWMsIDB4MGUsIDB4Y2QsIDB4 ZWYsIDB4MWEsCisrICAgIDB4OTEsIDB4NmEsIDB4ZTMsIDB4NWYKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3JldHVybmVk Yml0c1tdID0geworKyAgICAweGU1LCAweGRhLCAweGI4LCAweGUwLCAweDYzLCAweDU5LCAweDVh LCAweGNjLCAweDNkLCAweGRjLCAweDlmLCAweGU4LAorKyAgICAweDY2LCAweDY3LCAweDJjLCAw eDkyCisrfTsKKysKKysvKiBBRVMtMjU2IG5vIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dFtd ID0geworKyAgICAweDE1LCAweGM3LCAweDVkLCAweGNiLCAweDQxLCAweDRiLCAweDE2LCAweDAx LCAweDNhLCAweGQxLCAweDQ0LCAweGU4LAorKyAgICAweDIyLCAweDMyLCAweGM2LCAweDljLCAw eDNmLCAweGU3LCAweDQzLCAweGY1LCAweDlhLCAweGQzLCAweGVhLCAweGYyLAorKyAgICAweGQ3 LCAweDRlLCAweDZlLCAweDZhLCAweDU1LCAweDczLCAweDQwLCAweGVmLCAweDg5LCAweGFkLCAw eDBkLCAweDAzLAorKyAgICAweDk2LCAweDdlLCAweDc4LCAweDgxLCAweDJmLCAweDkxLCAweDFi LCAweDQ0LCAweGIwLCAweDAyLCAweGJhLCAweDFjCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9ub25jZVtdID0gewor KyAgICAweGRjLCAweGU0LCAweGQ0LCAweDI3LCAweDdhLCAweDkwLCAweGQ3LCAweDk5LCAweDQz LCAweGExLCAweDNjLCAweDMwLAorKyAgICAweGNjLCAweDRiLCAweGVlLCAweDJlCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHhlMywgMHhlNiwg MHhiOSwgMHgxMSwgMHhlNCwgMHg3YSwgMHhhNCwgMHg0MCwgMHg2YiwgMHhmOCwgMHg3MywgMHhm NywKKysgICAgMHg3ZSwgMHhlYywgMHhjNywgMHhiOSwgMHg5NywgMHhiZiwgMHhmOCwgMHgyNSwg MHg3YiwgMHhiZSwgMHgxMSwgMHg5YiwKKysgICAgMHg1YiwgMHg2YSwgMHgwYywgMHgyZSwgMHgy YiwgMHgwMSwgMHg1MSwgMHhjZCwgMHg0MSwgMHg0YiwgMHg2YiwgMHhhYywKKysgICAgMHgzMSwg MHhhOCwgMHgwYiwgMHhmNywgMHhlNiwgMHg1OSwgMHg0MiwgMHhiOCwgMHgwMywgMHgwYywgMHhm OCwgMHgwNgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4 NmEsIDB4OWYsIDB4MDAsIDB4OTEsIDB4YWUsIDB4ZmUsIDB4Y2YsIDB4ODQsIDB4OTksIDB4Y2Us IDB4YjEsIDB4NDAsCisrICAgIDB4NmQsIDB4NWQsIDB4MzMsIDB4MjgsIDB4ODQsIDB4ZjQsIDB4 OGMsIDB4NjMsIDB4NGMsIDB4N2UsIDB4YmQsIDB4MmMsCisrICAgIDB4ODAsIDB4NzYsIDB4ZWUs IDB4NWEsIDB4YWEsIDB4MTUsIDB4MDcsIDB4MzEsIDB4ZDgsIDB4YmIsIDB4OGMsIDB4NjksCisr ICAgIDB4OWQsIDB4OWQsIDB4YmMsIDB4N2UsIDB4NDksIDB4YWUsIDB4ZWMsIDB4MzksIDB4NmIs IDB4ZDEsIDB4MWYsIDB4N2UKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAg IDB4ZjMsIDB4YjksIDB4NzUsIDB4OWMsIDB4YmQsIDB4ODgsIDB4ZWEsIDB4YTIsIDB4NTAsIDB4 YWQsIDB4ZDYsIDB4MTYsCisrICAgIDB4MWEsIDB4MTIsIDB4M2MsIDB4ODYsIDB4NjgsIDB4YWYs IDB4NmYsIDB4YmUsIDB4MTksIDB4ZjIsIDB4ZWUsIDB4Y2MsCisrICAgIDB4YTUsIDB4NzAsIDB4 ODQsIDB4NTMsIDB4NTAsIDB4Y2IsIDB4OWYsIDB4MTQsIDB4YTksIDB4ZTUsIDB4ZWUsIDB4Yjks CisrICAgIDB4NDgsIDB4NDUsIDB4NDAsIDB4ZTIsIDB4YzcsIDB4YzksIDB4OWEsIDB4NzQsIDB4 ZmYsIDB4OGMsIDB4OTksIDB4MWYKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNb XSA9IHsKKysgICAgMHgyZSwgMHhmMiwgMHg0NSwgMHg0YywgMHg2MiwgMHgyZSwgMHgwYSwgMHhi OSwgMHg2YiwgMHhhMiwgMHhmZCwgMHg1NiwKKysgICAgMHg3OSwgMHg2MCwgMHg5MywgMHhjZgor K307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweGFmLCAweDY5 LCAweDIwLCAweGU5LCAweDNiLCAweDM3LCAweDlkLCAweDNmLCAweGI0LCAweDgwLCAweDAyLCAw eDdhLAorKyAgICAweDI1LCAweDdkLCAweGI4LCAweGRlLCAweDcxLCAweGM1LCAweDA2LCAweDBj LCAweGI0LCAweGUyLCAweDhmLCAweDM1LAorKyAgICAweGQ4LCAweDE0LCAweDBkLCAweDdmLCAw eDc2LCAweDYzLCAweDRlLCAweGI1LCAweGVlLCAweGU5LCAweDZmLCAweDM0LAorKyAgICAweGM3 LCAweDVmLCAweDU2LCAweDE0LCAweDRhLCAweGU4LCAweDczLCAweDk1LCAweDViLCAweDFjLCAw eGI5LCAweGNiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAg MHhlNSwgMHhiMCwgMHgyZSwgMHg3ZSwgMHg1MiwgMHgzMCwgMHhlMywgMHg2MywgMHg4MiwgMHhi NiwgMHg0NCwgMHhkMywKKysgICAgMHgyNSwgMHgxOSwgMHgwNSwgMHgyNCwgMHg5YSwgMHg5Ziwg MHg1ZiwgMHgyNywgMHg2YSwgMHgyOSwgMHhhYiwgMHhmYSwKKysgICAgMHgwNywgMHhhMiwgMHg0 MiwgMHgwZiwgMHhjNSwgMHhhOCwgMHg5NCwgMHg3YywgMHgxNywgMHg3YiwgMHg4NSwgMHg4MywK KysgICAgMHgwYywgMHgyNSwgMHgwZSwgMHg2MywgMHgwYiwgMHhlOSwgMHgxMiwgMHg2MCwgMHhj ZCwgMHhlZiwgMHg4MCwgMHgwZgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAg IDB4NWUsIDB4ZjIsIDB4MjYsIDB4ZWYsIDB4OWYsIDB4NTgsIDB4NWQsIDB4ZDUsIDB4NGEsIDB4 MTAsIDB4ZmUsIDB4YTcsCisrICAgIDB4MmQsIDB4NWYsIDB4NGEsIDB4NDYKKyt9OworKworKy8q IEFFUy0yNTYgbm8gZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4ZmIs IDB4Y2YsIDB4MWIsIDB4NjEsIDB4MTYsIDB4ODksIDB4NzgsIDB4MjMsIDB4ZjUsIDB4ZDgsIDB4 OTYsIDB4ZTMsCisrICAgIDB4NGUsIDB4NjQsIDB4MGIsIDB4MjksIDB4OWEsIDB4M2YsIDB4Zjgs IDB4YTUsIDB4ZWQsIDB4ZjIsIDB4ZmUsIDB4ZGIsCisrICAgIDB4MTYsIDB4Y2EsIDB4N2YsIDB4 MTAsIDB4ZmEsIDB4NWUsIDB4MTgsIDB4NzYsIDB4MmMsIDB4NjMsIDB4NWUsIDB4OTYsCisrICAg IDB4Y2YsIDB4YjMsIDB4ZDYsIDB4ZmMsIDB4YWYsIDB4OTksIDB4MzksIDB4MjgsIDB4OWMsIDB4 NjEsIDB4ZTgsIDB4YjMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X25vX2RmX25vbmNlW10gPSB7CisrICAgIDB4MTIsIDB4OTYsIDB4 ZjAsIDB4NTIsIDB4ZjMsIDB4OGQsIDB4ODEsIDB4Y2YsIDB4ZGUsIDB4ODYsIDB4ZjIsIDB4OTks CisrICAgIDB4NDMsIDB4OTYsIDB4YjksIDB4ZjAKKyt9OworKworK19fZmlwc19jb25zdHNlZwor KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3BlcnNvbmFsaXph dGlvbnN0cmluZ1tdID0geworKyAgICAweDYzLCAweDBkLCAweDc4LCAweGY1LCAweDkwLCAweDhl LCAweDMyLCAweDQ3LCAweGIwLCAweDRkLCAweDM3LCAweDYwLAorKyAgICAweDA5LCAweDk2LCAw eGJjLCAweGJmLCAweDk3LCAweDdhLCAweDYyLCAweDE0LCAweDQ1LCAweGJkLCAweDhkLCAweGNj LAorKyAgICAweDY5LCAweGZiLCAweDAzLCAweGUxLCAweDgwLCAweDFjLCAweGM3LCAweGUyLCAw eDJhLCAweGY5LCAweDM3LCAweDNmLAorKyAgICAweDY2LCAweDRkLCAweDYyLCAweGQ5LCAweDEw LCAweGUwLCAweGFkLCAweGM4LCAweDlhLCAweGYwLCAweGE4LCAweDZkCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRp dGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHgzNiwgMHhjNiwgMHgxMywgMHg2MCwgMHhiYiwgMHgx NCwgMHhhZCwgMHgyMiwgMHhiMCwgMHgzOCwgMHhhYywgMHhhNiwKKysgICAgMHgxOCwgMHgxNiwg MHg5MywgMHgyNSwgMHg4NiwgMHhiNywgMHhkYywgMHhkYywgMHgzNiwgMHg5OCwgMHgyYiwgMHhm OSwKKysgICAgMHg2OCwgMHgzMywgMHhkMywgMHhjNiwgMHhmZiwgMHhjZSwgMHg4ZCwgMHgxNSwg MHg1OSwgMHg4MiwgMHg3NiwgMHhlZCwKKysgICAgMHg2ZiwgMHg4ZCwgMHg0OSwgMHg3NCwgMHgy ZiwgMHhkYSwgMHhkYywgMHgxZiwgMHgxNywgMHhkMCwgMHhkZSwgMHgxNworK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfaW50 X3JldHVybmVkYml0c1tdID0geworKyAgICAweDE2LCAweDJmLCAweDhlLCAweDNmLCAweDIxLCAw eDdhLCAweDFjLCAweDIwLCAweDU2LCAweGQxLCAweDkyLCAweGY2LAorKyAgICAweGQyLCAweDI1 LCAweDc1LCAweDBlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKKysg ICAgMHg5MSwgMHg3OSwgMHg3NiwgMHhlZSwgMHhlMCwgMHhjZiwgMHg5ZSwgMHhjMiwgMHhkNSwg MHhkNCwgMHgyMywgMHg5YiwKKysgICAgMHgxMiwgMHg4YywgMHg3ZSwgMHgwYSwgMHhiNywgMHhk MiwgMHg4YiwgMHhkNiwgMHg3YywgMHhhMywgMHhjNiwgMHhlNSwKKysgICAgMHgwZSwgMHhhYSwg MHhjNywgMHg2YiwgMHhhZSwgMHgwZCwgMHhmYSwgMHg1MywgMHgwNiwgMHg3OSwgMHhhMSwgMHhl ZCwKKysgICAgMHg0ZCwgMHg2YSwgMHgwZSwgMHhkOCwgMHg5ZCwgMHhiZSwgMHgxYiwgMHgzMSwg MHg5MywgMHg3YiwgMHhlYywgMHhmYgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVz ZWVkW10gPSB7CisrICAgIDB4ZDIsIDB4NDYsIDB4NTAsIDB4MjIsIDB4MTAsIDB4MTQsIDB4NjMs IDB4ZjcsIDB4ZWEsIDB4MGYsIDB4YjksIDB4N2UsCisrICAgIDB4MGQsIDB4ZTEsIDB4OTQsIDB4 MDcsIDB4YWYsIDB4MDksIDB4NDQsIDB4MzEsIDB4ZWEsIDB4NjQsIDB4YTQsIDB4MTgsCisrICAg IDB4NWIsIDB4ZjksIDB4ZDgsIDB4YzIsIDB4ZmEsIDB4MDMsIDB4NDcsIDB4YzUsIDB4MzksIDB4 NDMsIDB4ZDUsIDB4M2IsCisrICAgIDB4NjIsIDB4ODYsIDB4NjQsIDB4ZWEsIDB4MmMsIDB4NzMs IDB4OGMsIDB4YWUsIDB4OWQsIDB4OTgsIDB4OTgsIDB4MjkKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxp bnB1dDJbXSA9IHsKKysgICAgMHg4YywgMHhhYiwgMHgxOCwgMHhmOCwgMHhjMywgMHhlYywgMHgx OCwgMHg1YywgMHhiMywgMHgxZSwgMHg5ZCwgMHhiZSwKKysgICAgMHgzZiwgMHgwMywgMHhiNCwg MHgwMCwgMHg5OCwgMHg5ZCwgMHhhZSwgMHhlYiwgMHhmNCwgMHg5NCwgMHhmOCwgMHg0MiwKKysg ICAgMHg4ZiwgMHhlMywgMHgzOSwgMHgwNywgMHhlMSwgMHhjOSwgMHhhZCwgMHgwYiwgMHgxZiwg MHhlZCwgMHhjMCwgMHhiYSwKKysgICAgMHhmNiwgMHhkMSwgMHhlYywgMHgyNywgMHg4NiwgMHg3 YiwgMHhkNiwgMHg1NSwgMHg5YiwgMHg2MCwgMHhhNSwgMHhjNgorK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcmV0dXJuZWRi aXRzW10gPSB7CisrICAgIDB4ZWYsIDB4ZDIsIDB4ZDgsIDB4NWMsIDB4ZGMsIDB4NjIsIDB4MjUs IDB4OWYsIDB4YWEsIDB4MWUsIDB4MmMsIDB4NjcsCisrICAgIDB4ZjYsIDB4MDIsIDB4MzIsIDB4 ZTIKKyt9OworKworKy8qIFNIQS0xIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweGQyLCAw eDM2LCAweGE1LCAweDI3LCAweDMxLCAweDczLCAweGRkLCAweDExLCAweDRmLCAweDkzLCAweGJk LCAweGUyLAorKyAgICAweDMxLCAweGE1LCAweDkxLCAweDEzCisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9ub25jZVtdID0geworKyAg ICAweGI1LCAweGIzLCAweDYwLCAweGVmLCAweGY3LCAweDYzLCAweDMxLCAweGYzCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9wZXJz b25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHhkNCwgMHhiYiwgMHgwMiwgMHgxMCwgMHhi MiwgMHg3MSwgMHhkYiwgMHg4MSwgMHhkNiwgMHhmMCwgMHg0MiwgMHg2MCwKKysgICAgMHhkYSwg MHhlYSwgMHg3NywgMHg1MgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4NGQsIDB4 ZDIsIDB4NmMsIDB4ODcsIDB4ZmIsIDB4MmMsIDB4NGYsIDB4YTYsIDB4OGQsIDB4MTYsIDB4NjMs IDB4MjIsCisrICAgIDB4NmEsIDB4NTEsIDB4ZTMsIDB4ZjgKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHByW10g PSB7CisrICAgIDB4YzksIDB4ODMsIDB4OWUsIDB4MTYsIDB4ZjYsIDB4MWMsIDB4MGYsIDB4YjIs IDB4ZWMsIDB4NjAsIDB4MzEsIDB4YTksCisrICAgIDB4Y2IsIDB4YTksIDB4MzYsIDB4N2EKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3By X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhhOCwgMHgxMywgMHg0ZiwgMHhmNCwgMHgz MSwgMHgwMiwgMHg0NCwgMHhlMywgMHhkMywgMHgzZCwgMHg2MSwgMHg5ZSwKKysgICAgMHhlNSwg MHhjNiwgMHgzZSwgMHg4OSwgMHhiNSwgMHg5YiwgMHgwZiwgMHgzNQorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfYWRkaXRpb25hbGlu cHV0MltdID0geworKyAgICAweGY5LCAweGU4LCAweGQyLCAweDcyLCAweDEzLCAweDM0LCAweDk1 LCAweDZmLCAweDE1LCAweDQ5LCAweDQ3LCAweDk5LAorKyAgICAweDE2LCAweDAzLCAweDE5LCAw eDQ3CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAgMHg0ZSwgMHg4YywgMHg0OSwgMHg5 YiwgMHg0YSwgMHg1YywgMHg5YiwgMHg5YywgMHgzYSwgMHhlZSwgMHhmYiwgMHhkMiwKKysgICAg MHhhZSwgMHhjZCwgMHg4YywgMHhjNAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4NTAs IDB4YjQsIDB4YjQsIDB4Y2QsIDB4NjgsIDB4NTcsIDB4ZmMsIDB4MmUsIDB4YzEsIDB4NTIsIDB4 Y2MsIDB4ZjYsCisrICAgIDB4NjgsIDB4YTQsIDB4ODEsIDB4ZWQsIDB4N2UsIDB4ZTQsIDB4MWQs IDB4ODcKKyt9OworKworKy8qIFNIQS0xIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweGE5 LCAweDQ3LCAweDFiLCAweDI5LCAweDJkLCAweDFjLCAweDA1LCAweGRmLCAweDc2LCAweGQwLCAw eDYyLCAweGY5LAorKyAgICAweGUyLCAweDdmLCAweDRjLCAweDdiCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9ub25jZVtdID0geworKyAg ICAweDUzLCAweDIzLCAweDI0LCAweGUzLCAweGVjLCAweDBjLCAweDU0LCAweDE0CisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wZXJzb25h bGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHg3YSwgMHg4NywgMHhhMSwgMHhhYywgMHgxYywg MHhmZCwgMHhhYiwgMHhhZSwgMHhmNywgMHhkNiwgMHhmYiwgMHg3NiwKKysgICAgMHgyOCwgMHhl YywgMHg2ZCwgMHhjYQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4ZmMsIDB4OTIsIDB4 MzUsIDB4ZDYsIDB4N2UsIDB4YjcsIDB4MjQsIDB4NjUsIDB4ZmQsIDB4MTIsIDB4MjcsIDB4MzUs CisrICAgIDB4YzAsIDB4NzIsIDB4Y2EsIDB4MjgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysg ICAgMHg1NywgMHg4OCwgMHg4MiwgMHhlNSwgMHgyNSwgMHhhNSwgMHgyYywgMHg0YSwgMHgwNiwg MHgyMCwgMHg2YywgMHg3MiwKKysgICAgMHg1NSwgMHg2MSwgMHhkZCwgMHg5MCwgMHg3MSwgMHg5 ZiwgMHg5NSwgMHhlYQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTFfZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4NjksIDB4YTUs IDB4NDAsIDB4NjIsIDB4OTgsIDB4NDcsIDB4NTYsIDB4NzMsIDB4NGEsIDB4OGYsIDB4NjAsIDB4 OTYsCisrICAgIDB4ZDYsIDB4OTksIDB4MjcsIDB4ZWQKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtd ID0geworKyAgICAweGU1LCAweDQwLCAweDRlLCAweGJkLCAweDUwLCAweDAwLCAweGY1LCAweDE1 LCAweGE2LCAweGVlLCAweDQ1LCAweGRhLAorKyAgICAweDg0LCAweDNkLCAweGQ0LCAweGMwCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9h ZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4MTEsIDB4NTEsIDB4MTQsIDB4ZjAsIDB4MDks IDB4MWIsIDB4NGUsIDB4NTYsIDB4MGQsIDB4ZTksIDB4ZjYsIDB4MWUsCisrICAgIDB4NTIsIDB4 NjUsIDB4Y2QsIDB4OTYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGExX3JldHVybmVkYml0c1tdID0geworKyAgICAweGExLCAweDljLCAweDk0 LCAweDZlLCAweDI5LCAweGUxLCAweDMzLCAweDBkLCAweDMyLCAweGQ2LCAweGFhLCAweGNlLAor KyAgICAweDcxLCAweDNmLCAweDUyLCAweDcyLCAweDhiLCAweDQyLCAweGE4LCAweGQ3CisrfTsK KysKKysvKiBTSEEtMjI0IFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4MTIsIDB4Njks IDB4MzIsIDB4NGYsIDB4ODMsIDB4YTYsIDB4ZjUsIDB4MTQsIDB4ZTMsIDB4NDksIDB4M2UsIDB4 NzUsCisrICAgIDB4M2UsIDB4ZGUsIDB4YWQsIDB4YTEsIDB4MjksIDB4YzMsIDB4ZjMsIDB4MTks IDB4MjAsIDB4YjUsIDB4NGMsIDB4ZDkKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfbm9uY2VbXSA9IHsKKysgICAgMHg2YSwgMHg3 OCwgMHhkMCwgMHhlYiwgMHhiYiwgMHg1YSwgMHhmMCwgMHhlZSwgMHhlOCwgMHhjMywgMHhiYSwg MHg3MQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTIyNF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHhkNSwgMHhiOCwg MHhiNiwgMHhiYywgMHhjMSwgMHg1YiwgMHg2MCwgMHgzMSwgMHgzYywgMHhmNSwgMHhlNSwgMHhj MCwKKysgICAgMHg4ZSwgMHg1MiwgMHg3YSwgMHhiZCwgMHhlYSwgMHg0NywgMHhhOSwgMHg1Ziwg MHg4ZiwgMHhmOSwgMHg4YiwgMHhhZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAg MHgxZiwgMHg1NSwgMHhlYywgMHhhZSwgMHgxNiwgMHgxMiwgMHg4NCwgMHhiYSwgMHg4NCwgMHgx NiwgMHgxOSwgMHg4OCwKKysgICAgMHg4ZSwgMHhiOCwgMHgzMywgMHgyNSwgMHg1NCwgMHhmZiwg MHhjYSwgMHg3OSwgMHhhZiwgMHgwNywgMHgyNSwgMHg1MAorK307CisrCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltd ID0geworKyAgICAweDkyLCAweGEzLCAweDMyLCAweGE4LCAweDlhLCAweDBhLCAweDU4LCAweDdj LCAweDFkLCAweDVhLCAweDdlLCAweGUxLAorKyAgICAweGIyLCAweDczLCAweGFiLCAweDBlLCAw eDE2LCAweDc5LCAweDIzLCAweGQzLCAweDI5LCAweDg5LCAweDgxLCAweGUxCisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2ludF9y ZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhmMywgMHgzOCwgMHg5MSwgMHg0MCwgMHgzNywgMHg3 YSwgMHg1MSwgMHg3MiwgMHg0MiwgMHg3NCwgMHg3OCwgMHgwYSwKKysgICAgMHg2OSwgMHhmZCwg MHhhNiwgMHg0NCwgMHg0MywgMHg0NSwgMHg2YywgMHgwYywgMHg1YSwgMHgxOSwgMHhmZiwgMHhm MSwKKysgICAgMHg1NCwgMHg2MCwgMHhlZSwgMHg2YQorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXQyW10g PSB7CisrICAgIDB4NzUsIDB4ZjMsIDB4MDQsIDB4MjUsIDB4ZGQsIDB4MzYsIDB4YTgsIDB4Mzcs IDB4NDYsIDB4YWUsIDB4MGMsIDB4NTIsCisrICAgIDB4MDUsIDB4NzksIDB4NGMsIDB4MjYsIDB4 ZGIsIDB4ZTksIDB4NzEsIDB4MTYsIDB4NGMsIDB4MGEsIDB4ZjIsIDB4NjAKKyt9OworKworK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9w eWlucHV0cHIyW10gPSB7CisrICAgIDB4ZWEsIDB4YzUsIDB4MDMsIDB4MGEsIDB4NGYsIDB4YjAs IDB4MzgsIDB4OGQsIDB4MjMsIDB4ZDQsIDB4YzgsIDB4NzcsCisrICAgIDB4ZTIsIDB4NmQsIDB4 OWMsIDB4MGIsIDB4NDQsIDB4ZjcsIDB4MmQsIDB4NWIsIDB4YmYsIDB4NWQsIDB4MmEsIDB4MTEK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy MjRfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4NjAsIDB4NTAsIDB4MmIsIDB4ZTcsIDB4 ODYsIDB4ZDgsIDB4MjYsIDB4NzMsIDB4ZTMsIDB4MWQsIDB4OTUsIDB4MjAsCisrICAgIDB4YjMs IDB4MmMsIDB4MzIsIDB4MWMsIDB4ZjUsIDB4Y2UsIDB4NTcsIDB4YTYsIDB4NjcsIDB4MmIsIDB4 ZGMsIDB4NGUsCisrICAgIDB4ZGQsIDB4MTEsIDB4NGMsIDB4YzQKKyt9OworKworKy8qIFNIQS0y MjQgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTIyNF9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHhiMiwgMHgxYywgMHg3NywgMHg0ZCwg MHhmNiwgMHhkMywgMHhiNiwgMHg0MCwgMHhiNywgMHgzMCwgMHgzZSwgMHgyOSwKKysgICAgMHhi MCwgMHg4NSwgMHgxYywgMHhiZSwgMHg0YSwgMHhlYSwgMHg2YiwgMHg1YSwgMHhiNSwgMHg4YSwg MHg5NywgMHhlYgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9ub25jZVtdID0geworKyAgICAweDQyLCAweDAyLCAweDBhLCAweDFjLCAw eDk4LCAweDlhLCAweDc3LCAweDllLCAweDlmLCAweDgwLCAweGJhLCAweGUwCisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0geworKyAgICAweDk4LCAweGI4LCAweDA0LCAweDQxLCAweGZjLCAw eGMxLCAweDVkLCAweGM1LCAweGU5LCAweGI5LCAweDA4LCAweGRhLAorKyAgICAweGY5LCAweGZh LCAweDBkLCAweDkwLCAweGNlLCAweGRmLCAweDFkLCAweDEwLCAweGE5LCAweDhkLCAweDUwLCAw eDBjCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDlhLCAweDhkLCAweDM5LCAweDQ5 LCAweDQyLCAweGQ1LCAweDBiLCAweGFlLCAweGUxLCAweGFmLCAweGI3LCAweDAwLAorKyAgICAw eDAyLCAweGZhLCAweDk2LCAweGIxLCAweGE1LCAweDFkLCAweDJkLCAweDI1LCAweDc4LCAweGVl LCAweDgzLCAweDNmCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjI0X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhlNCwgMHhmNSwg MHg1MywgMHg3OSwgMHg1YSwgMHg5NywgMHg1OCwgMHgwNiwgMHgwOCwgMHhiYSwgMHg3YiwgMHhm YSwKKysgICAgMHhmMCwgMHg4MywgMHgwNSwgMHg4YywgMHgyMiwgMHhjMCwgMHhjOSwgMHhkYiwg MHgxNSwgMHhlNywgMHhkZSwgMHgyMCwKKysgICAgMHg1NSwgMHgyMiwgMHg5YSwgMHhhZAorK307 CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9l bnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg2NywgMHgwOSwgMHg0OCwgMHhhYSwgMHgw NywgMHgxNiwgMHg5OSwgMHg4OSwgMHg3ZiwgMHg2ZCwgMHhhMCwgMHhlNSwKKysgICAgMHg4Ziwg MHhkZiwgMHhiYywgMHhkYiwgMHhmZSwgMHhlNSwgMHg2YywgMHg3YSwgMHg5NSwgMHg0YSwgMHg2 NiwgMHgxNworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHgwZiwgMHg0Yiwg MHgxYywgMHg2ZiwgMHhiNywgMHhlMywgMHg0NywgMHhlNSwgMHg1ZCwgMHg3ZCwgMHgzOCwgMHhk NiwKKysgICAgMHgyOCwgMHg5YiwgMHhlYiwgMHg1NSwgMHg2MywgMHgwOSwgMHgzZSwgMHg3Yywg MHg1NiwgMHhlYSwgMHhmOCwgMHgxOQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4 MmQsIDB4MjYsIDB4N2MsIDB4MzcsIDB4ZTQsIDB4N2EsIDB4MjgsIDB4NWUsIDB4NWEsIDB4M2Ms IDB4YWYsIDB4M2QsCisrICAgIDB4NWEsIDB4OGUsIDB4NTUsIDB4YTIsIDB4MWEsIDB4NmUsIDB4 YzAsIDB4ZTUsIDB4ZjYsIDB4MjEsIDB4ZDMsIDB4ZjYKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcmV0dXJuZWRiaXRzW10gPSB7Cisr ICAgIDB4NGQsIDB4ODMsIDB4MzUsIDB4ZGYsIDB4NjcsIDB4YTksIDB4ZmMsIDB4MTcsIDB4ZGEs IDB4NzAsIDB4Y2MsIDB4OGIsCisrICAgIDB4N2YsIDB4NzcsIDB4YWUsIDB4YTIsIDB4NWYsIDB4 YjksIDB4N2UsIDB4NzQsIDB4NGMsIDB4MjYsIDB4YzEsIDB4N2EsCisrICAgIDB4M2IsIDB4YTcs IDB4NWMsIDB4OTMKKyt9OworKworKy8qIFNIQS0yNTYgUFIgICovCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsK KysgICAgMHhjZSwgMHg0OSwgMHgwMCwgMHg3YSwgMHg1NiwgMHhlMywgMHg2NywgMHg4ZiwgMHhl MSwgMHhiNiwgMHhhNywgMHhkNCwKKysgICAgMHg0ZiwgMHgwOCwgMHg3YSwgMHgxYiwgMHgwMSwg MHhmNCwgMHhmYSwgMHg2YiwgMHhlZiwgMHhiNywgMHhlNSwgMHhlYiwKKysgICAgMHgwNywgMHgz ZCwgMHgxMSwgMHgwZCwgMHhjOCwgMHhlYSwgMHgyYiwgMHhmZQorK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9ub25jZVtdID0gewor KyAgICAweDczLCAweDQxLCAweGM4LCAweDkyLCAweDk0LCAweGUyLCAweGM1LCAweDVmLCAweDkz LCAweGZkLCAweDM5LCAweDVkLAorKyAgICAweDJiLCAweDkxLCAweDRkLCAweDM4CisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX3Bl cnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweDUwLCAweDZkLCAweDAxLCAweDAxLCAw eDA3LCAweDVhLCAweDgwLCAweDM1LCAweDdhLCAweDU2LCAweDFhLCAweDU2LAorKyAgICAweDJm LCAweDlhLCAweDBiLCAweDM1LCAweGIyLCAweGIxLCAweGM5LCAweGU1LCAweGNhLCAweDY5LCAw eDYxLCAweDQ4LAorKyAgICAweGZmLCAweGZiLCAweDBmLCAweGQ5LCAweDRiLCAweDc5LCAweDFk LCAweGJhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDIwLCAweGI4LCAweGRm LCAweDQ0LCAweDc3LCAweDVhLCAweGI4LCAweGQzLCAweGJmLCAweGY2LCAweGNmLCAweGFjLAor KyAgICAweDVlLCAweGE2LCAweDk2LCAweDYyLCAweDczLCAweDQ0LCAweDQwLCAweDRhLCAweDMw LCAweGZiLCAweDM4LCAweGE1LAorKyAgICAweDdiLCAweDBkLCAweGU0LCAweDBkLCAweGM2LCAw eGU0LCAweDlhLCAweDFmCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAgIDB4MDQsIDB4 YzQsIDB4NjUsIDB4ZjQsIDB4ZDMsIDB4YmYsIDB4ODMsIDB4NGIsIDB4YWIsIDB4YzgsIDB4NDEs IDB4YTgsCisrICAgIDB4YzIsIDB4ZTAsIDB4NDQsIDB4NjMsIDB4NzcsIDB4NGMsIDB4NmYsIDB4 NmMsIDB4NDksIDB4NDYsIDB4ZmYsIDB4OTQsCisrICAgIDB4MTcsIDB4ZWEsIDB4ZTYsIDB4MWEs IDB4OWQsIDB4NWUsIDB4NjYsIDB4NzgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAg ICAweDA3LCAweDRkLCAweGFjLCAweDliLCAweDg2LCAweGNhLCAweDRhLCAweGFhLCAweDZlLCAw eDdhLCAweDAzLCAweGEyLAorKyAgICAweDVkLCAweDEwLCAweGVhLCAweDBiLCAweGY5LCAweDgz LCAweGNjLCAweGQxLCAweGZjLCAweGUyLCAweDA3LCAweGM3LAorKyAgICAweDA2LCAweDM0LCAw eDYwLCAweDZmLCAweDgzLCAweDk0LCAweDk5LCAweDc2CisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9IHsKKysgICAgMHg4OSwgMHg0ZSwgMHg0NSwgMHg4YywgMHgxMSwgMHhmOSwgMHhiYywgMHg1 YiwgMHhhYywgMHg3NCwgMHg4YiwgMHg0YiwKKysgICAgMHg1ZiwgMHhmNywgMHgxOSwgMHhmMywg MHhmNSwgMHgyNCwgMHg1NCwgMHgxNCwgMHhkMSwgMHgxNSwgMHhiMSwgMHg0MywKKysgICAgMHgx MiwgMHhhNCwgMHg1ZiwgMHhkNCwgMHhlYywgMHhmYywgMHhjZCwgMHgwOQorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5 aW5wdXRwcjJbXSA9IHsKKysgICAgMHgwZSwgMHhlYiwgMHgxZiwgMHhkNywgMHhmYywgMHhkMSwg MHg5ZCwgMHhkNCwgMHgwNSwgMHgzNiwgMHg4YiwgMHhiMiwKKysgICAgMHhmYiwgMHhlNCwgMHhm NCwgMHg1MSwgMHgwYywgMHg4NywgMHg5YiwgMHgwMiwgMHg0NCwgMHhkNSwgMHg5MiwgMHg0ZCwK KysgICAgMHg0NCwgMHhmZSwgMHgxYSwgMHgwMywgMHg0MywgMHg1NiwgMHhiZCwgMHg4NgorK307 CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9w cl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgwMiwgMHhhYSwgMHhiNiwgMHgxZCwgMHg3ZSwg MHgyYSwgMHg0MCwgMHgwMywgMHg2OSwgMHgyZCwgMHg0OSwgMHhhMywKKysgICAgMHg0MSwgMHhl NywgMHg0NCwgMHgwYiwgMHhhZiwgMHg3YiwgMHg4NSwgMHhlNCwgMHg1ZiwgMHg1MywgMHgzYiwg MHg2NCwKKysgICAgMHhiYywgMHg4OSwgMHhjOCwgMHg4MiwgMHhkNCwgMHg3OCwgMHgzNywgMHhh MgorK307CisrCisrLyogU0hBLTI1NiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDVi LCAweDFiLCAweGVjLCAweDRkLCAweGE5LCAweDM4LCAweDc0LCAweDVhLCAweDM0LCAweDBiLCAw eDdiLCAweGM1LAorKyAgICAweGU1LCAweGQ3LCAweDY2LCAweDdjLCAweGJjLCAweDgyLCAweGI5 LCAweDBlLCAweDJkLCAweDFmLCAweDkyLCAweGQ3LAorKyAgICAweGMxLCAweGJjLCAweDY3LCAw eDY5LCAweGVjLCAweDZiLCAweDAzLCAweDNjCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X25vbmNlW10gPSB7CisrICAgIDB4YTQsIDB4 MGMsIDB4ZDgsIDB4OWMsIDB4NjEsIDB4ZDgsIDB4YzMsIDB4NTQsIDB4ZmUsIDB4NTMsIDB4Yzks IDB4ZTUsCisrICAgIDB4NWQsIDB4NmYsIDB4NmQsIDB4MzUKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcGVyc29uYWxpemF0aW9uc3Ry aW5nW10gPSB7CisrICAgIDB4MjIsIDB4NWUsIDB4NjIsIDB4OTMsIDB4NDIsIDB4ODMsIDB4Nzgs IDB4MjQsIDB4ZDgsIDB4NDAsIDB4OGMsIDB4ZGUsCisrICAgIDB4NmYsIDB4ZjksIDB4YTQsIDB4 N2EsIDB4YzUsIDB4YTcsIDB4M2IsIDB4ODgsIDB4YTMsIDB4ZWUsIDB4NDIsIDB4MjAsCisrICAg IDB4ZmQsIDB4NjEsIDB4NTYsIDB4YzYsIDB4NGMsIDB4MTMsIDB4NDEsIDB4OWMKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRkaXRp b25hbGlucHV0W10gPSB7CisrICAgIDB4YmYsIDB4NzQsIDB4NWIsIDB4ZjYsIDB4YzUsIDB4NjQs IDB4NWUsIDB4OTksIDB4MzQsIDB4OGYsIDB4YmMsIDB4YTQsCisrICAgIDB4ZTIsIDB4YmQsIDB4 ZDgsIDB4ODUsIDB4MjYsIDB4MzcsIDB4ZWEsIDB4YmEsIDB4NGYsIDB4ZjIsIDB4OWEsIDB4OWEs CisrICAgIDB4NjYsIDB4ZmMsIDB4ZGYsIDB4NjMsIDB4MjYsIDB4MjYsIDB4MTksIDB4ODcKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZf aW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGIzLCAweGM2LCAweDA3LCAweDA3LCAweGQ2 LCAweDc1LCAweGY2LCAweDJiLCAweGQ2LCAweDIxLCAweDk2LCAweGYxLAorKyAgICAweGFlLCAw eGRiLCAweDJiLCAweGFjLCAweDI1LCAweDJhLCAweGFlLCAweGFlLCAweDQxLCAweDcyLCAweDAz LCAweDVlLAorKyAgICAweGJmLCAweGQzLCAweDY0LCAweGJjLCAweDU5LCAweGY5LCAweGMwLCAw eDc2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMjU2X2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweGJmLCAweDIwLCAweDMzLCAw eDU2LCAweDI5LCAweGE4LCAweDM3LCAweDA0LCAweDFmLCAweDc4LCAweDM0LCAweDNkLAorKyAg ICAweDgxLCAweDJhLCAweGM5LCAweDg2LCAweGM2LCAweDdhLCAweDJmLCAweDg4LCAweDVlLCAw eGQ1LCAweGJlLCAweDM0LAorKyAgICAweDQ2LCAweDIwLCAweGE0LCAweDM1LCAweGViLCAweGM3 LCAweGUyLCAweDlkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAweDliLCAw eGFlLCAweDJkLCAweDJkLCAweDYxLCAweGE0LCAweDg5LCAweGViLCAweDQzLCAweDQ2LCAweGE3 LCAweGRhLAorKyAgICAweGVmLCAweDQwLCAweGNhLCAweDRhLCAweDk5LCAweDExLCAweDQxLCAw eGRjLCAweDVjLCAweDk0LCAweGU5LCAweGFjLAorKyAgICAweGQ0LCAweGQwLCAweGU2LCAweGJk LCAweGZiLCAweDAzLCAweDljLCAweGE4CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAg MHgyMywgMHhhYSwgMHgwYywgMHhiZCwgMHgyOCwgMHgzMywgMHhlMiwgMHg1MSwgMHhmYywgMHg3 MSwgMHhkMiwgMHgxNSwKKysgICAgMHgxZiwgMHg3NiwgMHhmZCwgMHgwZCwgMHhlMCwgMHhiNywg MHhiNSwgMHg4NCwgMHg3NSwgMHg1YiwgMHhiZSwgMHhmMywKKysgICAgMHg1YywgMHhjYSwgMHhj NSwgMHgzMCwgMHhmMiwgMHg3NSwgMHgxZiwgMHhkYQorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9IHsKKysg ICAgMHg5MCwgMHgzYywgMHhjMSwgMHgxMCwgMHg4YywgMHgxMiwgMHgwMSwgMHhjNiwgMHhhNiwg MHgzYSwgMHgwZiwgMHg0ZCwKKysgICAgMHhiNiwgMHgzYSwgMHg0ZiwgMHg0MSwgMHg5YywgMHg2 MSwgMHg3NSwgMHg4NCwgMHhlOSwgMHg3NCwgMHg3NSwgMHhmZCwKKysgICAgMHhmZSwgMHhmMiwg MHgxZiwgMHg0MywgMHhkOCwgMHg1ZSwgMHgyNCwgMHhhMworK307CisrCisrLyogU0hBLTM4NCBQ UiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0 X3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDcxLCAweDlkLCAweGIyLCAweDVhLCAweDcx LCAweDZkLCAweDA0LCAweGU5LCAweDFlLCAweGM3LCAweDkyLCAweDI0LAorKyAgICAweDZlLCAw eDEyLCAweDMzLCAweGE5LCAweDUyLCAweDY0LCAweDMxLCAweGVmLCAweDcxLCAweGViLCAweDIy LCAweDU1LAorKyAgICAweDI4LCAweDk3LCAweDA2LCAweDZhLCAweGMwLCAweDBjLCAweGEwLCAw eDdlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMzg0X3ByX25vbmNlW10gPSB7CisrICAgIDB4ZjUsIDB4MGQsIDB4ZmEsIDB4YjAsIDB4ZWMs IDB4NmEsIDB4N2MsIDB4ZDYsIDB4YmQsIDB4OWIsIDB4MDUsIDB4ZmQsCisrICAgIDB4MzgsIDB4 M2UsIDB4MmUsIDB4NTYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEzODRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4 NzQsIDB4YWMsIDB4N2UsIDB4NmQsIDB4YjEsIDB4YTQsIDB4ZTcsIDB4MjEsIDB4ZDEsIDB4MWUs IDB4NmUsIDB4OTYsCisrICAgIDB4NmQsIDB4NGQsIDB4NTMsIDB4NDYsIDB4ODIsIDB4OTYsIDB4 NmUsIDB4Y2YsIDB4YWEsIDB4ODEsIDB4OGQsIDB4N2QsCisrICAgIDB4OWUsIDB4ZTEsIDB4MGYs IDB4MTUsIDB4ZWEsIDB4NDEsIDB4YmYsIDB4ZTMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7 CisrICAgIDB4ZGEsIDB4OTUsIDB4ZDQsIDB4ZDAsIDB4YjgsIDB4MTEsIDB4ZDMsIDB4NDksIDB4 MjcsIDB4NWQsIDB4YTksIDB4MzksCisrICAgIDB4NjgsIDB4ZjMsIDB4YTgsIDB4ZTksIDB4NWQs IDB4MTksIDB4OGEsIDB4MmIsIDB4NjYsIDB4ZTgsIDB4NjksIDB4MDYsCisrICAgIDB4N2MsIDB4 OWUsIDB4MDMsIDB4YTEsIDB4OGIsIDB4MjYsIDB4MmQsIDB4NmUKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0 cHJbXSA9IHsKKysgICAgMHg0OSwgMHhkZiwgMHg0NCwgMHgwMCwgMHhlNCwgMHgxYywgMHg3NSwg MHgwYiwgMHgyNiwgMHg1YSwgMHg1OSwgMHg2NCwKKysgICAgMHgxZiwgMHg0ZSwgMHhiMSwgMHhi MiwgMHgxMywgMHhmMSwgMHgyMiwgMHg0ZSwgMHhiNCwgMHg2ZCwgMHg5YSwgMHhjYywKKysgICAg MHhhMCwgMHg0OCwgMHhlNiwgMHhjZiwgMHgxZCwgMHhkMSwgMHg5MiwgMHgwZAorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9pbnRf cmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4YzgsIDB4NTIsIDB4YWUsIDB4YmYsIDB4MDQsIDB4 M2MsIDB4MjcsIDB4YjcsIDB4NzgsIDB4MTgsIDB4YWEsIDB4OGYsCisrICAgIDB4ZmYsIDB4Y2Ys IDB4YTQsIDB4ZjEsIDB4Y2MsIDB4ZTcsIDB4NjgsIDB4ZmEsIDB4MjIsIDB4YTIsIDB4MTMsIDB4 NDUsCisrICAgIDB4ZTgsIDB4ZGQsIDB4ODcsIDB4ZTYsIDB4ZjIsIDB4NmUsIDB4ZGQsIDB4Yzcs IDB4NTIsIDB4OTAsIDB4OWYsIDB4N2IsCisrICAgIDB4ZmEsIDB4NjEsIDB4MmQsIDB4OWQsIDB4 OWUsIDB4Y2YsIDB4OTgsIDB4YWMsIDB4NTIsIDB4NDAsIDB4Y2UsIDB4YWYKKyt9OworKworK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfYWRkaXRp b25hbGlucHV0MltdID0geworKyAgICAweDYxLCAweDdjLCAweDAzLCAweDlhLCAweDNlLCAweDUw LCAweDU3LCAweDYwLCAweGM1LCAweDgzLCAweGM5LCAweGIyLAorKyAgICAweGQxLCAweDg3LCAw eDg1LCAweDY2LCAweDkyLCAweDVkLCAweDg0LCAweDBlLCAweDUzLCAweGZiLCAweDcwLCAweDAz LAorKyAgICAweDcyLCAweGZkLCAweGJhLCAweGFlLCAweDljLCAweDhmLCAweGY4LCAweDE4Cisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0 X3ByX2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAweGY4LCAweGViLCAweDg5LCAweGIxLCAw eDhkLCAweDc4LCAweGJlLCAweDIxLCAweGUwLCAweGJiLCAweDlkLCAweGI3LAorKyAgICAweDk1 LCAweDBlLCAweGQ5LCAweDQ2LCAweDBjLCAweDhjLCAweGUyLCAweDYzLCAweGI3LCAweDlkLCAw eDY3LCAweDkwLAorKyAgICAweGJkLCAweGM3LCAweDBiLCAweGE1LCAweGNlLCAweGIyLCAweDY1 LCAweDgxCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0geworKyAgICAweGU2LCAweDlmLCAweGZlLCAw eDY4LCAweGQ2LCAweGI1LCAweDc5LCAweGYxLCAweDA2LCAweDVmLCAweGEzLCAweGJiLAorKyAg ICAweDIzLCAweDg1LCAweGQ4LCAweGYwLCAweDI5LCAweDVhLCAweDY4LCAweDllLCAweGY1LCAw eGY0LCAweGE2LCAweDEyLAorKyAgICAweGUwLCAweDlhLCAweGUyLCAweGFjLCAweDAwLCAweDFk LCAweDk4LCAweDI2LCAweGZjLCAweDUzLCAweDk1LCAweDUzLAorKyAgICAweGU0LCAweDNlLCAw eDE3LCAweGQ1LCAweDA4LCAweDBiLCAweDcwLCAweDNkLCAweDY3LCAweDk5LCAweGFjLCAweDY2 CisrfTsKKysKKysvKiBTSEEtMzg0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4MDcs IDB4MTUsIDB4MjcsIDB4MmEsIDB4YWYsIDB4NzQsIDB4MjQsIDB4MzcsIDB4YmMsIDB4ZDUsIDB4 MTQsIDB4NjksCisrICAgIDB4Y2UsIDB4MTEsIDB4ZmYsIDB4YTIsIDB4NmIsIDB4YjgsIDB4MDUs IDB4NjcsIDB4MzQsIDB4ZjgsIDB4YmQsIDB4NmQsCisrICAgIDB4NmEsIDB4Y2MsIDB4Y2QsIDB4 NjAsIDB4YTMsIDB4NjgsIDB4Y2EsIDB4ZjQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfbm9uY2VbXSA9IHsKKysgICAgMHg3MCwgMHgx NywgMHhjMiwgMHg1YiwgMHg1ZCwgMHgyMiwgMHgwYiwgMHgwNiwgMHgxNSwgMHg1NCwgMHg3OCwg MHg3NywKKysgICAgMHg0NCwgMHhhZiwgMHgyZiwgMHgwOQorK307CisrCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9IHsKKysgICAgMHg4OSwgMHgzOSwgMHgyOCwgMHhiMCwgMHg2MCwgMHhlYiwgMHgzZCwg MHhkYywgMHg1NSwgMHg3NSwgMHg4NiwgMHhlYiwKKysgICAgMHhhZSwgMHhhMiwgMHg4ZiwgMHhi YywgMHgxYiwgMHg3NSwgMHhkNCwgMHhlMSwgMHgwZiwgMHhhYSwgMHgzOCwgMHhjYSwKKysgICAg MHg2MiwgMHg4YiwgMHhjYiwgMHgyYywgMHgyNiwgMHhmNiwgMHhiYywgMHhiMQorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlv bmFsaW5wdXRbXSA9IHsKKysgICAgMHgzMCwgMHgyYiwgMHg0MiwgMHgzNSwgMHhlZiwgMHhkYSwg MHg0MCwgMHg1NSwgMHgyOCwgMHhjNiwgMHg5NSwgMHhmYiwKKysgICAgMHg1NCwgMHgwMSwgMHg2 MiwgMHhkNywgMHg4NywgMHgxNCwgMHg0OCwgMHg2ZCwgMHg5MCwgMHg0YywgMHhhOSwgMHgwMiwK KysgICAgMHg1NCwgMHg0MCwgMHgyMiwgMHhjOCwgMHg2NiwgMHhhNSwgMHg0OCwgMHg0OAorK307 CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9p bnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ODIsIDB4YzQsIDB4YTEsIDB4OWMsIDB4MjEs IDB4ZDIsIDB4ZTcsIDB4YTUsIDB4YTYsIDB4ZjYsIDB4NWYsIDB4MDQsCisrICAgIDB4NWMsIDB4 YzcsIDB4MzEsIDB4OWQsIDB4OGQsIDB4NTksIDB4NzQsIDB4NTAsIDB4MTksIDB4ODksIDB4MmYs IDB4NjMsCisrICAgIDB4ZDUsIDB4YjcsIDB4N2UsIDB4ZWIsIDB4MTUsIDB4ZTMsIDB4NzAsIDB4 ODMsIDB4YTEsIDB4MjQsIDB4NTksIDB4ZmEsCisrICAgIDB4MmMsIDB4NTYsIDB4ZjYsIDB4ODgs IDB4M2EsIDB4OTIsIDB4OTMsIDB4YTEsIDB4ZmIsIDB4NzksIDB4YzEsIDB4N2EKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9w eWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4MzksIDB4YTYsIDB4ZTgsIDB4NWMsIDB4ODIsIDB4 MTcsIDB4NzEsIDB4MjYsIDB4NTcsIDB4NGYsIDB4OWYsIDB4YzIsCisrICAgIDB4NTUsIDB4ZmYs IDB4NWMsIDB4OWIsIDB4NTMsIDB4MWEsIDB4ZDEsIDB4NWYsIDB4YmMsIDB4NjIsIDB4ZTQsIDB4 MjcsCisrICAgIDB4MmQsIDB4MzIsIDB4ZjAsIDB4ZTQsIDB4NTIsIDB4OGMsIDB4YzUsIDB4MGMK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEz ODRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4OGQsIDB4Y2IsIDB4OGQsIDB4 Y2UsIDB4MDgsIDB4ZWEsIDB4ODAsIDB4ZTgsIDB4OWIsIDB4NjEsIDB4YTgsIDB4MGYsCisrICAg IDB4YWYsIDB4NDksIDB4MjAsIDB4OWUsIDB4NzQsIDB4Y2IsIDB4NTcsIDB4ODAsIDB4NDIsIDB4 YjAsIDB4ODQsIDB4NWUsCisrICAgIDB4MzAsIDB4MmEsIDB4NjcsIDB4MDgsIDB4ZjQsIDB4ZTMs IDB4NDAsIDB4MjIKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweDdjLCAweDhmLCAw eGMyLCAweGFlLCAweDIyLCAweDRhLCAweGQ2LCAweGY2LCAweDA1LCAweGE0LCAweDdhLCAweGVh LAorKyAgICAweGJiLCAweDI1LCAweGQwLCAweGI3LCAweDVhLCAweGQ2LCAweGNmLCAweDlkLCAw eGYzLCAweDZjLCAweGUyLCAweGIyLAorKyAgICAweDRlLCAweGI0LCAweGJkLCAweGY0LCAweGU1 LCAweDQwLCAweDgwLCAweDk0CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3JldHVybmVkYml0c1tdID0geworKyAgICAweDllLCAweDdl LCAweGZiLCAweDU5LCAweGJiLCAweGFhLCAweDNjLCAweGY3LCAweGUxLCAweGY4LCAweDc2LCAw eGRkLAorKyAgICAweDYzLCAweDVmLCAweGFmLCAweDIzLCAweGQ2LCAweDY0LCAweDYxLCAweGMw LCAweDlhLCAweDA5LCAweDQ3LCAweGM5LAorKyAgICAweDMzLCAweGRmLCAweDZkLCAweDU1LCAw eDkxLCAweDM0LCAweDc5LCAweDcwLCAweGM0LCAweDk5LCAweDZlLCAweDU0LAorKyAgICAweDA5 LCAweDY0LCAweDIxLCAweDFhLCAweGJkLCAweDFlLCAweDgwLCAweDQwLCAweDM0LCAweGFkLCAw eGZhLCAweGQ3CisrfTsKKysKKysvKiBTSEEtNTEyIFBSICAqLworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0W10gPSB7Cisr ICAgIDB4MTMsIDB4ZjcsIDB4NjEsIDB4NzUsIDB4NjUsIDB4MjgsIDB4YTIsIDB4NTksIDB4MTMs IDB4NWEsIDB4NGEsIDB4NGYsCisrICAgIDB4NTYsIDB4NjAsIDB4OGMsIDB4NTMsIDB4N2QsIDB4 YjAsIDB4YmQsIDB4MDYsIDB4NGYsIDB4ZWQsIDB4Y2MsIDB4ZDIsCisrICAgIDB4YTIsIDB4YjUs IDB4ZmQsIDB4NWIsIDB4M2EsIDB4YWIsIDB4ZWMsIDB4MjgKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfbm9uY2VbXSA9IHsKKysg ICAgMHhiZSwgMHhhMywgMHg5MSwgMHg5MywgMHgxZCwgMHhjMywgMHgzMSwgMHgzYSwgMHgyMywg MHgzMywgMHg1MCwgMHg2NywKKysgICAgMHg4OCwgMHhjNywgMHhhMiwgMHhjNAorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9wZXJz b25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHgxZiwgMHg1OSwgMHg0ZCwgMHg3YiwgMHhl NiwgMHg0NiwgMHg5MSwgMHg0OCwgMHhjMSwgMHgyNSwgMHhmYSwgMHhmZiwKKysgICAgMHg4OSwg MHgxMiwgMHg3NywgMHgzNSwgMHhkZiwgMHgzZSwgMHhmNCwgMHg4MCwgMHg1ZiwgMHhkOSwgMHhi MCwgMHgwNywKKysgICAgMHgyMiwgMHg0MSwgMHhkZCwgMHg0OCwgMHg3OCwgMHg2YiwgMHg3Nywg MHgyYgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHgzMCwgMHhmZiwgMHg2Mywg MHg2ZiwgMHhhYywgMHhkOSwgMHg4NCwgMHgzOSwgMHg2ZiwgMHhlNCwgMHg5OSwgMHhjZSwKKysg ICAgMHg5MSwgMHg3ZCwgMHg3ZSwgMHhjOCwgMHg1OCwgMHhmMiwgMHgxMiwgMHhjMywgMHhiNiwg MHhhZCwgMHhkYSwgMHgyMiwKKysgICAgMHgwNCwgMHhhMCwgMHhkMiwgMHgyMSwgMHhmZSwgMHhm MiwgMHg5NSwgMHgxZAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0geworKyAgICAweDY0LCAweDU0 LCAweDEzLCAweGVjLCAweDRmLCAweDc3LCAweGRhLCAweGIyLCAweDkyLCAweDJlLCAweDUyLCAw eDgwLAorKyAgICAweDExLCAweDEwLCAweGMyLCAweGY4LCAweGU2LCAweGE3LCAweGNkLCAweDRi LCAweGZjLCAweDMyLCAweDJlLCAweDllLAorKyAgICAweGViLCAweGJiLCAweGIxLCAweGJmLCAw eDE1LCAweDVjLCAweDczLCAweDA4CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAg MHhlZiwgMHgxZSwgMHhkYywgMHgwYSwgMHhhNCwgMHgzNiwgMHg5MSwgMHg5YywgMHgzZCwgMHgy NywgMHg5NywgMHg1MCwKKysgICAgMHg4ZCwgMHgzNiwgMHgyOSwgMHg4ZCwgMHhjZSwgMHg2YSwg MHgwYywgMHhmNywgMHgyMSwgMHhjMCwgMHg5MSwgMHhhZSwKKysgICAgMHgwYywgMHg5NiwgMHg3 MiwgMHhiZCwgMHg1MiwgMHg4MSwgMHg1OCwgMHhmYywgMHg2ZCwgMHhlNSwgMHhmNywgMHhhNSwK KysgICAgMHhmZCwgMHg1ZCwgMHhhNywgMHg1OCwgMHg2OCwgMHhjOCwgMHg5OSwgMHg1OCwgMHg4 ZSwgMHhjOCwgMHhjZSwgMHg5NSwKKysgICAgMHgwMSwgMHg3ZCwgMHhmZiwgMHhhNCwgMHhjOCwg MHhmNywgMHg2MywgMHhmZSwgMHg1ZiwgMHg2OSwgMHg4MywgMHg1MywKKysgICAgMHhlMiwgMHhj NiwgMHg4YiwgMHhjMworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4ZTYsIDB4 OWIsIDB4YzQsIDB4ODgsIDB4MzQsIDB4Y2EsIDB4ZWEsIDB4MjksIDB4MmYsIDB4OTgsIDB4MDUs IDB4YTQsCisrICAgIDB4ZDMsIDB4YzAsIDB4N2IsIDB4MTEsIDB4ZTgsIDB4YmIsIDB4NzUsIDB4 ZjIsIDB4YmQsIDB4MjksIDB4YjcsIDB4NDAsCisrICAgIDB4MjUsIDB4N2YsIDB4YzEsIDB4Yjcs IDB4YjEsIDB4ZjEsIDB4MjUsIDB4NjEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAg IDB4MjMsIDB4NmQsIDB4ZmYsIDB4ZGUsIDB4ZmIsIDB4ZDEsIDB4YmEsIDB4MzMsIDB4MTgsIDB4 ZTYsIDB4YmUsIDB4YjUsCisrICAgIDB4NDgsIDB4NzcsIDB4NmQsIDB4N2YsIDB4YTcsIDB4ZTEs IDB4NGQsIDB4NDgsIDB4MWUsIDB4M2MsIDB4YTcsIDB4MzQsCisrICAgIDB4MWEsIDB4YzgsIDB4 NjAsIDB4ZGIsIDB4OGYsIDB4OTksIDB4MTUsIDB4OTkKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcmV0dXJuZWRiaXRzW10gPSB7 CisrICAgIDB4NzAsIDB4MjcsIDB4MzEsIDB4ZGIsIDB4OTIsIDB4NzAsIDB4MjEsIDB4ZmUsIDB4 MTYsIDB4YjYsIDB4YzgsIDB4NTEsCisrICAgIDB4MzQsIDB4ODcsIDB4NjUsIDB4ZDAsIDB4NGUs IDB4ZmQsIDB4ZmUsIDB4NjgsIDB4ZWMsIDB4YWMsIDB4ZGMsIDB4OTMsCisrICAgIDB4NDEsIDB4 MzgsIDB4OTIsIDB4OTAsIDB4YjQsIDB4OTQsIDB4ZjksIDB4MGQsIDB4YTQsIDB4ZjcsIDB4NGUs IDB4ODAsCisrICAgIDB4OTIsIDB4NjcsIDB4NDgsIDB4NDAsIDB4YTcsIDB4MDgsIDB4YzcsIDB4 YmMsIDB4NjYsIDB4MDAsIDB4ZmQsIDB4ZjcsCisrICAgIDB4NGMsIDB4OGIsIDB4MTcsIDB4NmUs IDB4ZDEsIDB4OGYsIDB4OWIsIDB4ZjMsIDB4NmYsIDB4ZjYsIDB4MzQsIDB4ZGQsCisrICAgIDB4 NjcsIDB4ZjcsIDB4NjgsIDB4ZGQKKyt9OworKworKy8qIFNIQS01MTIgTm8gUFIgICovCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRyb3B5aW5w dXRbXSA9IHsKKysgICAgMHhiNiwgMHgwYiwgMHhiNywgMHhiYywgMHg4NCwgMHg1NiwgMHhmNiwg MHgxMiwgMHhhZiwgMHg0NSwgMHg2NywgMHgxNywKKysgICAgMHg3YywgMHhkMSwgMHhiMiwgMHg3 OCwgMHgyYiwgMHhhMCwgMHhmMiwgMHhiZSwgMHhiNiwgMHg2ZCwgMHg4YiwgMHg1NiwKKysgICAg MHhjNiwgMHhiYywgMHg0ZCwgMHhlMSwgMHhmNywgMHhiZSwgMHhjZSwgMHhiZAorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9ub25jZVtd ID0geworKyAgICAweDlkLCAweGVkLCAweGMwLCAweGU1LCAweDVhLCAweDk4LCAweDZhLCAweGNi LCAweDUxLCAweDdkLCAweDc2LCAweDMxLAorKyAgICAweDVhLCAweDY0LCAweGYwLCAweGY3Cisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEy X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweGMyLCAweDZkLCAweGEzLCAweGMz LCAweDA2LCAweDc0LCAweGU1LCAweDAxLCAweDVjLCAweDEwLCAweDE3LCAweGM3LAorKyAgICAw eGFmLCAweDgzLCAweDlkLCAweDU5LCAweDhkLCAweDJkLCAweDI5LCAweDM4LCAweGM1LCAweDU5 LCAweDcwLCAweDhiLAorKyAgICAweDQ2LCAweDQ4LCAweDJkLCAweGNmLCAweDM2LCAweDdkLCAw eDU5LCAweGMwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweGVjLCAweDhjLCAweGQ0 LCAweGY3LCAweDYxLCAweDZlLCAweDBkLCAweDk1LCAweDc5LCAweGI3LCAweDI4LCAweGFkLAor KyAgICAweDVmLCAweDY5LCAweDc0LCAweDVmLCAweDJkLCAweDM2LCAweDA2LCAweDhhLCAweDZi LCAweGFjLCAweDU0LCAweDk3LAorKyAgICAweGM0LCAweGExLCAweDEyLCAweDg1LCAweDBhLCAw eGRmLCAweDRiLCAweDM0CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg4NCwgMHgy ZiwgMHgxZiwgMHg2OCwgMHg2YSwgMHhhMywgMHhhZCwgMHgxZSwgMHhmYiwgMHhmNCwgMHgxNSwg MHhiZCwKKysgICAgMHhkZSwgMHgzOCwgMHhkNCwgMHgzMCwgMHg4MCwgMHg1MSwgMHhlOSwgMHhk MywgMHhjNywgMHgyMCwgMHg4OCwgMHhlOSwKKysgICAgMHhmNSwgMHhjYywgMHhkZiwgMHg1Nywg MHg1YywgMHg0NywgMHgyZiwgMHg1NywgMHgzYywgMHg1ZiwgMHgxMywgMHg1NiwKKysgICAgMHhj YywgMHhjNSwgMHg0ZiwgMHg4NCwgMHhmOCwgMHgxMCwgMHg0MSwgMHhkNSwgMHg3ZSwgMHg1OCwg MHg2ZSwgMHgxOSwKKysgICAgMHgxOSwgMHg5ZSwgMHhhZiwgMHhjMiwgMHgyMiwgMHg1OCwgMHg0 MSwgMHg1MCwgMHg3OSwgMHhjMiwgMHhkOCwgMHgwNCwKKysgICAgMHgyOCwgMHhkNCwgMHgzOSwg MHg5YQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHNoYTUxMl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHhmYSwgMHg3ZiwgMHg0Niwg MHg1MSwgMHg4MywgMHg2MiwgMHg5OCwgMHgxNiwgMHg5YSwgMHgxOSwgMHhhMiwgMHg0OSwKKysg ICAgMHhhOSwgMHhlNiwgMHg0YSwgMHhkOCwgMHg4NSwgMHhlNywgMHhkNCwgMHgzYiwgMHgyYywg MHg4MiwgMHhjNSwgMHg4MiwKKysgICAgMHhiZiwgMHgxMSwgMHhmOSwgMHg5ZSwgMHhiYywgMHhk MCwgMHgwMSwgMHhlZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHhiOSwg MHgxMiwgMHhlMCwgMHg0ZiwgMHhmNywgMHhhNywgMHhjNCwgMHhkOCwgMHhkMCwgMHg4ZSwgMHg5 OSwgMHgyOSwKKysgICAgMHg3YywgMHg5YSwgMHhlOSwgMHhjZiwgMHhjNCwgMHg2YywgMHhmOCwg MHhjMywgMHhhNywgMHg0MSwgMHg4MywgMHhkNiwKKysgICAgMHgyZSwgMHhmYSwgMHhiOCwgMHg1 ZSwgMHg4ZSwgMHg2YiwgMHg3OCwgMHgyMAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAg IDB4ZDcsIDB4MDcsIDB4NTIsIDB4YjksIDB4ODMsIDB4MmMsIDB4MDMsIDB4NzEsIDB4ZWUsIDB4 YzksIDB4YzAsIDB4ODUsCisrICAgIDB4ZTEsIDB4NTcsIDB4YjIsIDB4Y2QsIDB4M2EsIDB4ZjAs IDB4YzksIDB4MzQsIDB4MjQsIDB4NDEsIDB4MWMsIDB4NDIsCisrICAgIDB4OTksIDB4YjIsIDB4 ODQsIDB4ZTksIDB4MTcsIDB4ZDIsIDB4NzYsIDB4OTIKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcmV0dXJuZWRiaXRzW10gPSB7Cisr ICAgIDB4MzYsIDB4MTcsIDB4NWQsIDB4OTgsIDB4MmIsIDB4NjUsIDB4MjUsIDB4OGUsIDB4Yzgs IDB4MjksIDB4ZGYsIDB4MjcsCisrICAgIDB4MDUsIDB4MzYsIDB4MjYsIDB4MTIsIDB4OGEsIDB4 NjgsIDB4NzQsIDB4MjcsIDB4MzcsIDB4ZDQsIDB4N2YsIDB4MzIsCisrICAgIDB4YjEsIDB4MTIs IDB4ZDYsIDB4ODUsIDB4ODMsIDB4ZWIsIDB4MmUsIDB4YTAsIDB4ZWQsIDB4NGIsIDB4YjUsIDB4 N2IsCisrICAgIDB4NmYsIDB4MzksIDB4M2MsIDB4NzEsIDB4NzcsIDB4MDIsIDB4MTIsIDB4Y2Ms IDB4MmMsIDB4M2EsIDB4OGUsIDB4NjMsCisrICAgIDB4ZGYsIDB4NGEsIDB4YmQsIDB4NmYsIDB4 NmUsIDB4MmUsIDB4ZWQsIDB4MGEsIDB4ODUsIDB4YTUsIDB4MmYsIDB4YTIsCisrICAgIDB4Njgs IDB4ZGUsIDB4NDIsIDB4YjUKKyt9OworKworKy8qIEhNQUMgU0hBLTEgUFIgICovCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5 aW5wdXRbXSA9IHsKKysgICAgMHgyNiwgMHg1ZiwgMHgzNiwgMHgxNCwgMHhmZiwgMHgzZCwgMHg4 MywgMHhmYSwgMHg3MywgMHg1ZSwgMHg3NSwgMHhkYywKKysgICAgMHgyYywgMHgxOCwgMHgxNywg MHgxYgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMV9wcl9ub25jZVtdID0geworKyAgICAweGM4LCAweGUzLCAweDU3LCAweGE1LCAw eDdiLCAweDc0LCAweDg2LCAweDZlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3BlcnNvbmFsaXphdGlvbnN0cmlu Z1tdID0geworKyAgICAweDZlLCAweGRiLCAweDBkLCAweGZlLCAweDdkLCAweGFjLCAweDc5LCAw eGQwLCAweGE1LCAweDNhLCAweDQ4LCAweDg1LAorKyAgICAweDgwLCAweGUyLCAweDdmLCAweDJh CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDMxLCAweGNkLCAweDVlLCAw eDQzLCAweGRjLCAweGZiLCAweDdhLCAweDc5LCAweGNhLCAweDg4LCAweGRlLCAweDFmLAorKyAg ICAweGQ3LCAweGJiLCAweDQyLCAweDA5CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByW10gPSB7Cisr ICAgIDB4N2MsIDB4MjMsIDB4OTUsIDB4MzgsIDB4MDAsIDB4OTUsIDB4YzEsIDB4NzgsIDB4MWYs IDB4OGYsIDB4ZDcsIDB4NjMsCisrICAgIDB4MjMsIDB4ODcsIDB4MmEsIDB4ZWQKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJf aW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGJiLCAweDM0LCAweGU3LCAweDkzLCAweGEz LCAweDAyLCAweDJjLCAweDRhLCAweGQwLCAweDg5LCAweGRhLCAweDdmLAorKyAgICAweGVkLCAw eGY0LCAweDRjLCAweGRlLCAweDE3LCAweGVjLCAweGU1LCAweDZjCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2FkZGl0aW9u YWxpbnB1dDJbXSA9IHsKKysgICAgMHg0OSwgMHhiYywgMHgyZCwgMHgyYywgMHhiNywgMHgzMiwg MHhjYiwgMHgyMCwgMHhkZiwgMHhmNSwgMHg3NywgMHg1OCwKKysgICAgMHhhMCwgMHg0YiwgMHg5 MywgMHg2ZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAgMHgzYywgMHhhYSwg MHhiMCwgMHgyMSwgMHg0MiwgMHhiMCwgMHhkZCwgMHgzNCwgMHhmMCwgMHgxNiwgMHg3ZiwgMHgw YywKKysgICAgMHgwZiwgMHhmZiwgMHgyZSwgMHhhZgorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9 IHsKKysgICAgMHg4ZSwgMHhjYiwgMHhhMywgMHg2NCwgMHhiMiwgMHhiOCwgMHgzMywgMHg2Yywg MHg2NCwgMHgzYiwgMHg3OCwgMHgxNiwKKysgICAgMHg5OSwgMHgzNSwgMHhjOCwgMHgzMCwgMHhj YiwgMHgzZSwgMHhhMCwgMHhkOAorK307CisrCisrLyogSE1BQyBTSEEtMSBObyBQUiAgKi8KKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJv cHlpbnB1dFtdID0geworKyAgICAweDMyLCAweDlhLCAweDJhLCAweDg3LCAweDdiLCAweDg5LCAw eDdjLCAweGY2LCAweGNiLCAweDk1LCAweGQ1LCAweDQwLAorKyAgICAweDE3LCAweGZlLCAweDQ3 LCAweDcwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGExX25vbmNlW10gPSB7CisrICAgIDB4MTYsIDB4ZDgsIDB4ZTAsIDB4YzcsIDB4 NTIsIDB4Y2YsIDB4NGEsIDB4MjUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Cisr ICAgIDB4MzUsIDB4MzUsIDB4YTksIDB4YTUsIDB4NDAsIDB4YmUsIDB4OWIsIDB4ZDEsIDB4NTYs IDB4ZGQsIDB4NDQsIDB4MDAsCisrICAgIDB4NzIsIDB4ZjcsIDB4ZDMsIDB4NWUKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRk aXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4MWIsIDB4MmMsIDB4ODQsIDB4MmQsIDB4NGEsIDB4 ODksIDB4OGYsIDB4NjksIDB4MTksIDB4ZjEsIDB4ZjMsIDB4ZGIsCisrICAgIDB4YmIsIDB4ZTMs IDB4YWEsIDB4ZWEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTFfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGNmLCAweGZh LCAweDdkLCAweDcyLCAweDBmLCAweGU2LCAweGM3LCAweDk2LCAweGEwLCAweDY5LCAweDMxLCAw eDExLAorKyAgICAweDliLCAweDBiLCAweDFhLCAweDIwLCAweDFmLCAweDNmLCAweGFhLCAweGQx CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGExX2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweDkwLCAweDc1LCAweDE1LCAw eDA0LCAweDk1LCAweGYxLCAweGJhLCAweDgxLCAweDBjLCAweDM3LCAweDk0LCAweDZmLAorKyAg ICAweDg2LCAweDUyLCAweDZkLCAweDljCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0g eworKyAgICAweDViLCAweDQwLCAweGJhLCAweDVmLCAweDE3LCAweDcwLCAweGYwLCAweDRiLCAw eGRmLCAweGM5LCAweDk3LCAweDkyLAorKyAgICAweDc5LCAweGM1LCAweDgyLCAweDI4CisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEx X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHg5NywgMHhjOCwgMHg4MCwgMHg5MCwgMHhi MywgMHhhYSwgMHg2ZSwgMHg2MCwgMHhlYSwgMHg4MywgMHg3YSwgMHhlMywKKysgICAgMHg4YSwg MHhjYSwgMHhhNCwgMHg3ZgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg5MCwgMHhi ZCwgMHgwNSwgMHg1NiwgMHg2ZCwgMHhiNSwgMHgyMiwgMHhkNSwgMHhiOSwgMHg1YSwgMHgyOSwg MHgyZCwKKysgICAgMHhlOSwgMHgwYiwgMHhlMSwgMHhhYywgMHhkZSwgMHgyNywgMHgwYiwgMHhi MAorK307CisrCisrLyogSE1BQyBTSEEtMjI0IFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9IHsK KysgICAgMHgxNywgMHgzMiwgMHgyYiwgMHgyZSwgMHg2ZiwgMHgxYiwgMHg5YywgMHg2ZCwgMHgz MSwgMHhlMCwgMHgzNCwgMHgwNywKKysgICAgMHhjZiwgMHhlZCwgMHhmNiwgMHhiNiwgMHg1YSwg MHg3NiwgMHg0YywgMHhiYywgMHg2MiwgMHg4NSwgMHgwMSwgMHg5MAorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX25vbmNl W10gPSB7CisrICAgIDB4MzgsIDB4YmYsIDB4NWYsIDB4MjAsIDB4YjMsIDB4NjgsIDB4MmYsIDB4 NDMsIDB4NjEsIDB4MDUsIDB4OGYsIDB4MjMKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9wZXJzb25hbGl6YXRp b25zdHJpbmdbXSA9IHsKKysgICAgMHhjMCwgMHhjOSwgMHg0NSwgMHhhYywgMHg4ZCwgMHgyNywg MHg3NywgMHgwOCwgMHgwYiwgMHgxNywgMHg2ZCwgMHhlZCwKKysgICAgMHhjMSwgMHg3ZCwgMHhk NSwgMHgwNywgMHg5ZCwgMHg2ZSwgMHhmOCwgMHgyMywgMHgyYSwgMHgyMiwgMHgxMywgMHhiZAor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweGE0LCAweDNjLCAweGU3LCAw eDNiLCAweGVhLCAweDE5LCAweDQ1LCAweDMyLCAweGMyLCAweDgzLCAweDZkLCAweDIxLAorKyAg ICAweDhhLCAweGMwLCAweGVlLCAweDY3LCAweDQ1LCAweGRlLCAweDEzLCAweDdkLCAweDlkLCAw eDYxLCAweDAwLCAweDNiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAgMHgx NSwgMHgwNSwgMHg3NCwgMHg0YSwgMHg3ZiwgMHg4ZCwgMHg1YywgMHg2MCwgMHgxNiwgMHhlNSwg MHg3YiwgMHhhZCwKKysgICAgMHhmNSwgMHg0MSwgMHg4ZiwgMHg1NSwgMHg2MCwgMHhjNCwgMHgw OSwgMHhlZSwgMHgxZSwgMHgxMSwgMHg4MSwgMHhhYgorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2ludF9yZXR1cm5lZGJp dHNbXSA9IHsKKysgICAgMHg2ZiwgMHhmNSwgMHg5YSwgMHhlMiwgMHg1NCwgMHg1MywgMHgzMCwg MHgzZCwgMHg1YSwgMHgyNywgMHgyOSwgMHgzOCwKKysgICAgMHgyNywgMHhmMiwgMHgwZCwgMHgw NSwgMHhlOSwgMHgyNiwgMHhjYiwgMHgxNiwgMHhjMywgMHg1MSwgMHg1ZiwgMHgxMywKKysgICAg MHg0MSwgMHhmZSwgMHg5OSwgMHhmMgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsK KysgICAgMHg3MywgMHg4MSwgMHg4OCwgMHg4NCwgMHg4ZiwgMHhlZCwgMHg2ZiwgMHgxMCwgMHg5 ZiwgMHg5MywgMHhiZiwgMHgxNywKKysgICAgMHgzNSwgMHg3YywgMHhlZiwgMHhkNSwgMHg4ZCwg MHgyNiwgMHhhNiwgMHg3YSwgMHhlOCwgMHgwOSwgMHgzNiwgMHg0ZgorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJv cHlpbnB1dHByMltdID0geworKyAgICAweGU2LCAweGNmLCAweGNmLCAweDdlLCAweDEyLCAweGU1 LCAweDQzLCAweGQyLCAweDM4LCAweGQ4LCAweDI0LCAweDZmLAorKyAgICAweDVhLCAweDM3LCAw eDY4LCAweGJmLCAweDRmLCAweGEwLCAweGZmLCAweGQ1LCAweDYxLCAweDhhLCAweDkzLCAweGUw CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyMjRfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4YWYsIDB4ZjksIDB4ZDgsIDB4 MTksIDB4OTEsIDB4MzAsIDB4ODIsIDB4NmYsIDB4YTksIDB4MWUsIDB4OWQsIDB4ZDcsCisrICAg IDB4ZjMsIDB4NTAsIDB4ZTAsIDB4YzcsIDB4ZDUsIDB4NjQsIDB4OTYsIDB4N2QsIDB4NGMsIDB4 NGQsIDB4NzgsIDB4MDMsCisrICAgIDB4NmQsIDB4ZDgsIDB4OWUsIDB4NzIKKyt9OworKworKy8q IEhNQUMgU0hBLTIyNCBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4MTEsIDB4 ODIsIDB4ZmQsIDB4ZDksIDB4NDIsIDB4ZjQsIDB4ZmEsIDB4YzgsIDB4ZjIsIDB4NDEsIDB4ZTYs IDB4NTQsCisrICAgIDB4MDEsIDB4YWUsIDB4MjIsIDB4NmUsIDB4YzYsIDB4YWYsIDB4YWYsIDB4 ZDAsIDB4YTYsIDB4YjIsIDB4ZTIsIDB4NmQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9ub25jZVtdID0geworKyAgICAweGE5 LCAweDQ4LCAweGQ3LCAweDkyLCAweDM5LCAweDdlLCAweDJhLCAweGRjLCAweDMwLCAweDFmLCAw eDBlLCAweDJiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAg IDB4MTEsIDB4ZDUsIDB4ZjQsIDB4YmQsIDB4NjcsIDB4OGMsIDB4MzEsIDB4Y2YsIDB4YTMsIDB4 M2YsIDB4MWUsIDB4NmIsCisrICAgIDB4YTgsIDB4MDcsIDB4MDIsIDB4MGIsIDB4YzgsIDB4MmUs IDB4NmMsIDB4NjQsIDB4NDEsIDB4NWIsIDB4YzgsIDB4MzcKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5w dXRbXSA9IHsKKysgICAgMHg2OCwgMHgxOCwgMHhjMiwgMHgwNiwgMHhlYiwgMHgzZSwgMHgwNCwg MHg5NSwgMHg0NCwgMHg1ZSwgMHhmYiwgMHhlNiwKKysgICAgMHg0MSwgMHhjMSwgMHg1YywgMHhj YywgMHg0MCwgMHgyZiwgMHhiNywgMHhkMiwgMHgwZiwgMHhmMywgMHg2YiwgMHhlNworK307Cisr CisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0 X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg3ZiwgMHg0NSwgMHhjNywgMHg1ZCwgMHgz MiwgMHhlNiwgMHgxNywgMHg2MCwgMHhiYSwgMHhkYywgMHhiOCwgMHg0MiwKKysgICAgMHgxYiwg MHg5YywgMHhmMSwgMHhmYSwgMHgzYiwgMHg0ZCwgMHgyOSwgMHg1NCwgMHhjNiwgMHg5MCwgMHhm ZiwgMHg1YywKKysgICAgMHhjZCwgMHhkNiwgMHhhOSwgMHhjYworK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1 dHJlc2VlZFtdID0geworKyAgICAweGM0LCAweDhlLCAweDM3LCAweDk1LCAweDY5LCAweDUzLCAw eDI4LCAweGQ3LCAweDM3LCAweGJiLCAweDcwLCAweDk1LAorKyAgICAweDFjLCAweDA3LCAweDFk LCAweGQ5LCAweGI3LCAweGU2LCAweDFiLCAweGJiLCAweGZlLCAweDQxLCAweGViLCAweGM5Cisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4NTMsIDB4MTcs IDB4YTEsIDB4NmEsIDB4ZmEsIDB4NzcsIDB4NDcsIDB4YjAsIDB4OTUsIDB4NTYsIDB4OWEsIDB4 MjAsCisrICAgIDB4NTcsIDB4ZGUsIDB4NWMsIDB4ODksIDB4OWYsIDB4N2YsIDB4ZTIsIDB4ZGUs IDB4MTcsIDB4M2EsIDB4NTAsIDB4MjMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Cisr ICAgIDB4M2EsIDB4MzIsIDB4ZjksIDB4ODUsIDB4MGMsIDB4YzEsIDB4ZWQsIDB4NzYsIDB4MmQs IDB4ZGYsIDB4NDAsIDB4YzMsCisrICAgIDB4MDYsIDB4MjIsIDB4NjYsIDB4ZDQsIDB4OWEsIDB4 OWEsIDB4ZmYsIDB4NWEsIDB4N2UsIDB4N2EsIDB4ZjMsIDB4OTYKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9yZXR1cm5lZGJp dHNbXSA9IHsKKysgICAgMHg0MywgMHhiNCwgMHg1NywgMHg1YywgMHgzOCwgMHgyNSwgMHg5ZCwg MHhhZSwgMHhlYywgMHg5NiwgMHhkMSwgMHg4NSwKKysgICAgMHgzYSwgMHg4NCwgMHg4ZCwgMHhm ZSwgMHg2OCwgMHhkNSwgMHgwZSwgMHg1YywgMHg4ZiwgMHg2NSwgMHhhNSwgMHg0ZSwKKysgICAg MHg0NSwgMHg4NCwgMHhhOCwgMHg5NAorK307CisrCisrLyogSE1BQyBTSEEtMjU2IFBSICAqLwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9w cl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHg0ZCwgMHhiMCwgMHg0MywgMHhkOCwgMHgzNCwg MHg0YiwgMHgxMCwgMHg3MCwgMHhiMSwgMHg4YiwgMHhlZCwgMHhlYSwKKysgICAgMHgwNywgMHg5 MiwgMHg5ZiwgMHg2YywgMHg3OSwgMHgzMSwgMHhhZiwgMHg4MSwgMHgyOSwgMHhlYiwgMHg2ZSwg MHhjYSwKKysgICAgMHgzMiwgMHg0OCwgMHgyOCwgMHhlNywgMHgwMiwgMHg1ZCwgMHhhNiwgMHhh NgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMjU2X3ByX25vbmNlW10gPSB7CisrICAgIDB4M2EsIDB4YWUsIDB4MTUsIDB4YTksIDB4 OTksIDB4ZGMsIDB4ZTQsIDB4NjcsIDB4MzQsIDB4M2IsIDB4NzAsIDB4MTUsCisrICAgIDB4YWEs IDB4ZDMsIDB4MzAsIDB4OWEKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9IHsKKysgICAgMHgxMywgMHgxZCwgMHgyNCwgMHgwNCwgMHhiMCwgMHgxOCwgMHg4MSwgMHgx NSwgMHgyMSwgMHg1MSwgMHgyYSwgMHgyNCwKKysgICAgMHg1MiwgMHg2MSwgMHhiZSwgMHg2NCwg MHg4MiwgMHg2YiwgMHg1NSwgMHgyZiwgMHhlMiwgMHhmMSwgMHg0MCwgMHg3ZCwKKysgICAgMHg3 MSwgMHhkOCwgMHgwMSwgMHg4NiwgMHgxNSwgMHhiNywgMHg4YiwgMHhiNQorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2Fk ZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDhmLCAweGE2LCAweDU0LCAweDVmLCAweGIxLCAw eGQwLCAweGQ4LCAweGMzLCAweGU3LCAweDBjLCAweDE1LCAweGE5LAorKyAgICAweDIzLCAweDZl LCAweGZlLCAweGZiLCAweDkzLCAweGY3LCAweDNhLCAweGJkLCAweDU5LCAweDAxLCAweGZhLCAw eDE4LAorKyAgICAweDhlLCAweGU5LCAweDFhLCAweGE5LCAweDc4LCAweGZjLCAweDc5LCAweDBi CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAgMHhjZiwgMHgyNCwgMHhiOSwg MHhlYiwgMHhiMywgMHhkNCwgMHhjZCwgMHgxNywgMHgzNywgMHgzOCwgMHg3NSwgMHg3OSwKKysg ICAgMHgxNSwgMHhjYiwgMHgyZCwgMHg3NSwgMHg1MSwgMHhmMSwgMHhjYywgMHhhYSwgMHgzMiwg MHhhNCwgMHhhNywgMHgzNiwKKysgICAgMHg3YywgMHg1YywgMHhlNCwgMHg0NywgMHhmMSwgMHgz ZSwgMHgxZCwgMHhlNQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg1 MiwgMHg0MiwgMHhmYSwgMHhlYiwgMHg4NSwgMHhlMCwgMHgzMCwgMHgyMiwgMHg3OSwgMHgwMCwg MHgxNiwgMHhiMiwKKysgICAgMHg4OCwgMHgyZiwgMHgxNCwgMHg2YSwgMHhiNywgMHhmYywgMHhi NywgMHg1MywgMHhkYywgMHg0YSwgMHgxMiwgMHhlZiwKKysgICAgMHg1NCwgMHhkNiwgMHgzMywg MHhlOSwgMHgyMCwgMHhkNiwgMHhmZCwgMHg1NgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9IHsKKysgICAgMHhmNCwgMHhmNiwgMHg0OSwgMHhhMSwgMHgyZCwgMHg2NCwgMHgyYiwgMHgz MCwgMHg1OCwgMHhmOCwgMHhiZCwgMHhiOCwKKysgICAgMHg3NSwgMHhlYiwgMHhiYiwgMHg1ZSwg MHgxYywgMHg5YiwgMHg4MSwgMHg2YSwgMHhkYSwgMHgxNCwgMHg4NiwgMHg2ZSwKKysgICAgMHhk MCwgMHhkYSwgMHgxOCwgMHhiNywgMHg4OCwgMHhmYiwgMHg1OSwgMHhmMworK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2Vu dHJvcHlpbnB1dHByMltdID0geworKyAgICAweDIxLCAweGNkLCAweDZlLCAweDQ2LCAweGFkLCAw eDk5LCAweDA3LCAweDE3LCAweGI0LCAweDNkLCAweDc2LCAweDBhLAorKyAgICAweGZmLCAweDVi LCAweDUyLCAweDUwLCAweDc4LCAweGRmLCAweDFmLCAweDI0LCAweDA2LCAweDBkLCAweDNmLCAw eDc0LAorKyAgICAweGE5LCAweGM5LCAweDM3LCAweGNmLCAweGQ4LCAweDI2LCAweDI1LCAweDkx CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyNTZfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4YTcsIDB4YWYsIDB4MmYsIDB4 MjksIDB4ZTAsIDB4M2EsIDB4NzIsIDB4OTUsIDB4OTYsIDB4MWMsIDB4YTksIDB4ZjAsCisrICAg IDB4NGEsIDB4MTcsIDB4NGQsIDB4NjYsIDB4MDYsIDB4MTAsIDB4YmYsIDB4MzksIDB4ODksIDB4 ODgsIDB4YjgsIDB4OTEsCisrICAgIDB4MzcsIDB4MTgsIDB4OTksIDB4Y2YsIDB4OGMsIDB4NTMs IDB4M2IsIDB4N2UKKyt9OworKworKy8qIEhNQUMgU0hBLTI1NiBObyBQUiAgKi8KKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlu cHV0W10gPSB7CisrICAgIDB4OTYsIDB4YjcsIDB4NTMsIDB4MjIsIDB4MWUsIDB4NTIsIDB4MmEs IDB4OTYsIDB4YjEsIDB4MTUsIDB4M2MsIDB4MzUsCisrICAgIDB4NWEsIDB4OGIsIDB4ZDMsIDB4 NGEsIDB4YTYsIDB4NmMsIDB4ODMsIDB4MGEsIDB4N2QsIDB4YTMsIDB4MjMsIDB4M2QsCisrICAg IDB4NDMsIDB4YTEsIDB4MDcsIDB4MmMsIDB4MmQsIDB4ZTMsIDB4ODEsIDB4Y2MKKyt9OworKwor K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9u b25jZVtdID0geworKyAgICAweGYxLCAweGFjLCAweDk3LCAweGNiLCAweDVlLCAweDA2LCAweDQ4 LCAweGQyLCAweDk0LCAweGJlLCAweDE1LCAweDJlLAorKyAgICAweGM3LCAweGZjLCAweGMyLCAw eDAxCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4OTgs IDB4YzUsIDB4MWUsIDB4MzUsIDB4NWUsIDB4ODksIDB4MGQsIDB4Y2UsIDB4NjQsIDB4NmQsIDB4 MTgsIDB4YTcsCisrICAgIDB4NWEsIDB4YzYsIDB4ZjMsIDB4ZTcsIDB4ZDYsIDB4OWUsIDB4YzAs IDB4ZWEsIDB4YjcsIDB4M2EsIDB4OGQsIDB4NjUsCisrICAgIDB4YjgsIDB4ZWIsIDB4MTAsIDB4 ZDcsIDB4NTcsIDB4MTgsIDB4YTAsIDB4MzIKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsK KysgICAgMHgxYiwgMHgxMCwgMHhhZiwgMHhhYywgMHhkMCwgMHg2NSwgMHg5NSwgMHhhZCwgMHgw NCwgMHhhZCwgMHgwMywgMHgxYywKKysgICAgMHhlMCwgMHg0MCwgMHhkNiwgMHgzZSwgMHgxYywg MHg0NiwgMHg1MywgMHgzOSwgMHg3YywgMHhlMiwgMHhiYywgMHhkYSwKKysgICAgMHg4YywgMHhh MiwgMHgzMywgMHhhNywgMHg5YSwgMHgyNiwgMHhkMywgMHgyNworK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2ludF9yZXR1cm5l ZGJpdHNbXSA9IHsKKysgICAgMHhiYSwgMHg2MSwgMHgwZSwgMHg1NSwgMHhmZSwgMHgxMSwgMHg4 YSwgMHg5ZSwgMHgwZiwgMHg4MCwgMHhkZiwgMHgxZCwKKysgICAgMHgwMywgMHgwYSwgMHhmZSwg MHgxNSwgMHg5NCwgMHgyOCwgMHg0YiwgMHhiYSwgMHhmNCwgMHg5ZiwgMHg1MSwgMHgyNSwKKysg ICAgMHg4OCwgMHhlNSwgMHg0ZSwgMHhmYiwgMHhhZiwgMHhjZSwgMHg2OSwgMHg5MAorK307Cisr CisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2 X2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweDYyLCAweDdmLCAweDFlLCAweDZiLCAw eGU4LCAweDhlLCAweGUxLCAweDM1LCAweDdkLCAweDliLCAweDRmLCAweGM3LAorKyAgICAweGVj LCAweGM4LCAweGFjLCAweGVmLCAweDZiLCAweDEzLCAweDllLCAweDA1LCAweDU2LCAweGMxLCAw eDA4LCAweGY5LAorKyAgICAweDJmLCAweDBmLCAweDI3LCAweDljLCAweGQ0LCAweDE1LCAweGVk LCAweDJkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4 YzcsIDB4NzYsIDB4NmUsIDB4YTksIDB4ZDIsIDB4YjIsIDB4NzYsIDB4NDAsIDB4ODIsIDB4MjUs IDB4MmMsIDB4YjMsCisrICAgIDB4NmYsIDB4YWMsIDB4ZTksIDB4NzQsIDB4ZWYsIDB4OGYsIDB4 M2MsIDB4OGUsIDB4Y2QsIDB4ZjEsIDB4YmYsIDB4YjMsCisrICAgIDB4NDksIDB4NzcsIDB4MzQs IDB4ODgsIDB4NTIsIDB4MzYsIDB4ZTYsIDB4MmUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXQyW10g PSB7CisrICAgIDB4OGQsIDB4YjgsIDB4MGMsIDB4ZDEsIDB4YmYsIDB4NzAsIDB4ZjYsIDB4MTks IDB4YzMsIDB4NDEsIDB4ODAsIDB4OWYsCisrICAgIDB4ZTEsIDB4YTUsIDB4YTQsIDB4MWYsIDB4 MmMsIDB4MjYsIDB4YjEsIDB4ZTUsIDB4ZDgsIDB4ZWIsIDB4YmUsIDB4ZjgsCisrICAgIDB4ZGYs IDB4ODgsIDB4NmEsIDB4ODksIDB4ZDYsIDB4MDUsIDB4ZDgsIDB4OWQKKyt9OworKworK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9yZXR1cm5l ZGJpdHNbXSA9IHsKKysgICAgMHg0MywgMHgxMiwgMHgyYSwgMHgyYywgMHg0MCwgMHg1MywgMHgy ZSwgMHg3YywgMHg2NiwgMHgzNCwgMHhhYywgMHhjMywKKysgICAgMHg0MywgMHhlMywgMHhlMCwg MHg2YSwgMHhmYywgMHhmYSwgMHhlYSwgMHg4NywgMHgyMSwgMHgxZiwgMHhlMiwgMHgyNiwKKysg ICAgMHhjNCwgMHhmOSwgMHgwOSwgMHg5YSwgMHgwZCwgMHg2ZSwgMHg3ZiwgMHhlMAorK307Cisr CisrLyogSE1BQyBTSEEtMzg0IFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHg2 OSwgMHg4MSwgMHg5OCwgMHg4OCwgMHg0NCwgMHhmNSwgMHhkNiwgMHgyZSwgMHgwMCwgMHgwOCwg MHgzYiwgMHhjNSwKKysgICAgMHhmYiwgMHhkNywgMHg4ZSwgMHg2ZiwgMHgyMywgMHhmOCwgMHg2 ZCwgMHgwOSwgMHhkNiwgMHg4NSwgMHg0OSwgMHhkMSwKKysgICAgMHhmOCwgMHg2ZCwgMHhhNCwg MHg1OCwgMHg1NCwgMHhmZCwgMHg4OCwgMHhhOQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX25vbmNlW10gPSB7CisrICAg IDB4NmUsIDB4MzgsIDB4ODEsIDB4Y2EsIDB4YjcsIDB4ZTgsIDB4NmUsIDB4NjYsIDB4NDksIDB4 OGEsIDB4YjIsIDB4NTksCisrICAgIDB4ZWUsIDB4MTYsIDB4YzksIDB4ZGUKKyt9OworKworK19f Zmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4 NF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHhmZSwgMHg0YywgMHhkOSwg MHhmNCwgMHg3OCwgMHgzYiwgMHgwOCwgMHg0MSwgMHg4ZCwgMHg4ZiwgMHg1NSwgMHhjNCwKKysg ICAgMHg0MywgMHg1NiwgMHhiNiwgMHgxMiwgMHgzNiwgMHg2YiwgMHgzMCwgMHhiNywgMHg1ZSwg MHhlMSwgMHhiOSwgMHg0NywKKysgICAgMHgwNCwgMHhiMSwgMHg0ZSwgMHhhOSwgMHgwMCwgMHhh MSwgMHg1MiwgMHhhMQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDg5 LCAweGU5LCAweGNjLCAweDhmLCAweDI3LCAweDNjLCAweDI2LCAweGQxLCAweDk1LCAweGM4LCAw eDdkLCAweDBmLAorKyAgICAweDViLCAweDFhLCAweGYwLCAweDc4LCAweDM5LCAweDU2LCAweDZm LCAweGE0LCAweDIzLCAweGU3LCAweGQxLCAweGRhLAorKyAgICAweDdjLCAweDY2LCAweDMzLCAw eGEwLCAweDkwLCAweGM5LCAweDkyLCAweDg4CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0cHJbXSA9 IHsKKysgICAgMHhiZSwgMHgzZCwgMHg3YywgMHgwZCwgMHhjYSwgMHhkYSwgMHg3YywgMHg0OSwg MHhiOCwgMHgxMiwgMHgzNiwgMHhjMCwKKysgICAgMHhkYiwgMHhhZCwgMHgzNSwgMHhhOCwgMHhj NywgMHgwYiwgMHgyYSwgMHgyYywgMHg2OSwgMHg2ZCwgMHgyNSwgMHg1NiwKKysgICAgMHg2Mywg MHg4MiwgMHgxMSwgMHgzZSwgMHhhNywgMHgzMywgMHg3MCwgMHg3MgorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2ludF9y ZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg4MiwgMHgzZCwgMHhlNiwgMHg1NCwgMHg4MCwgMHg0 MiwgMHhmOCwgMHhiYSwgMHg5MCwgMHg0ZiwgMHgwNiwgMHhhNiwKKysgICAgMHhkMiwgMHg3Ziwg MHhiZiwgMHg3OSwgMHg3YywgMHgxMiwgMHg3ZCwgMHhhNiwgMHhhMiwgMHg2NiwgMHhlOCwgMHhh NiwKKysgICAgMHhjMCwgMHhkNiwgMHg0YSwgMHg1NSwgMHhiZiwgMHhkOCwgMHgwYSwgMHhjNSwg MHhmOCwgMHgwMywgMHg4OCwgMHhkZCwKKysgICAgMHg4ZSwgMHg4NywgMHhkMSwgMHg1YSwgMHg0 OCwgMHgyNiwgMHg3MiwgMHgyYSwgMHg4ZSwgMHhjZiwgMHhlZSwgMHhiYQorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2Fk ZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHg4ZiwgMHhmZiwgMHhkOSwgMHg4NCwgMHhiYiwg MHg4NSwgMHgzYSwgMHg2NiwgMHhhMSwgMHgyMSwgMHhjZSwgMHhiMiwKKysgICAgMHgzYSwgMHgz YSwgMHgxNywgMHgyMiwgMHgxOSwgMHhhZSwgMHhjNywgMHhiNiwgMHg2MywgMHg4MSwgMHhkNSwg MHhmZiwKKysgICAgMHgwZCwgMHhjOCwgMHhlMSwgMHhhZiwgMHg1NywgMHhkMiwgMHhjYiwgMHg2 MAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAweGQ3LCAweGZiLCAweGM5 LCAweGU4LCAweGUyLCAweGYyLCAweGFhLCAweDRjLCAweGI4LCAweDUxLCAweDJmLCAweGUxLAor KyAgICAweDIyLCAweGJhLCAweGYzLCAweGRhLCAweDBhLCAweDE5LCAweDc2LCAweDcxLCAweDU3 LCAweGIyLCAweDFkLCAweDk0LAorKyAgICAweDA5LCAweDY5LCAweDZjLCAweGQzLCAweDk3LCAw eDUxLCAweDgxLCAweDg3CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZTYs IDB4MTksIDB4MjgsIDB4YTgsIDB4MjEsIDB4Y2UsIDB4NWUsIDB4ZGIsIDB4MjQsIDB4NzksIDB4 OGMsIDB4NzYsCisrICAgIDB4NWQsIDB4NzMsIDB4YjIsIDB4ZGYsIDB4YWMsIDB4ZWYsIDB4ODUs IDB4YTcsIDB4M2IsIDB4MTksIDB4MDksIDB4OGIsCisrICAgIDB4N2YsIDB4OTgsIDB4MjgsIDB4 YTksIDB4OTMsIDB4ZDgsIDB4N2EsIDB4YWQsIDB4NTUsIDB4OGIsIDB4MjQsIDB4OWQsCisrICAg IDB4ZTYsIDB4OTgsIDB4ZmUsIDB4NDcsIDB4ZDUsIDB4NDgsIDB4YzEsIDB4MjMsIDB4ZDgsIDB4 MWQsIDB4NjIsIDB4NzUKKyt9OworKworKy8qIEhNQUMgU0hBLTM4NCBObyBQUiAgKi8KKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfZW50cm9w eWlucHV0W10gPSB7CisrICAgIDB4YzMsIDB4NTYsIDB4MmIsIDB4MWQsIDB4YzIsIDB4YmIsIDB4 YTgsIDB4ZjAsIDB4YWUsIDB4MWIsIDB4MGQsIDB4ZDMsCisrICAgIDB4NWEsIDB4NmMsIDB4ZGEs IDB4NTcsIDB4OGUsIDB4YTUsIDB4OGEsIDB4MGQsIDB4NmMsIDB4NGIsIDB4MTgsIDB4YjEsCisr ICAgIDB4MDQsIDB4M2UsIDB4YjQsIDB4OTksIDB4MzUsIDB4YzQsIDB4YzAsIDB4NWYKKyt9Owor KworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4 NF9ub25jZVtdID0geworKyAgICAweGM1LCAweDQ5LCAweDFlLCAweDY2LCAweDI3LCAweDkyLCAw eGJlLCAweGVjLCAweGI1LCAweDFlLCAweDRiLCAweGIxLAorKyAgICAweDM4LCAweGUzLCAweGVi LCAweDYyCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEzODRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4 YmUsIDB4ZTcsIDB4NmIsIDB4NTcsIDB4ZGUsIDB4ODgsIDB4MTEsIDB4OTYsIDB4OWIsIDB4NmUs IDB4ZWEsIDB4ZTUsCisrICAgIDB4NjMsIDB4ODMsIDB4NGMsIDB4YjYsIDB4OGQsIDB4NjYsIDB4 YWEsIDB4MWYsIDB4OGIsIDB4NTQsIDB4ZTcsIDB4NjIsCisrICAgIDB4NmQsIDB4NWEsIDB4ZmMs IDB4YmYsIDB4OTcsIDB4YmEsIDB4Y2QsIDB4NzcKKyt9OworKworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXRbXSA9 IHsKKysgICAgMHhlNSwgMHgyOCwgMHg1ZiwgMHg0MywgMHhmNSwgMHg4MywgMHg2ZSwgMHgwYSwg MHg4MywgMHg1YywgMHhlMywgMHg4MSwKKysgICAgMHgwMywgMHhmMiwgMHhmOCwgMHg3OCwgMHgw MCwgMHg3YywgMHg5NSwgMHg4NywgMHgxNiwgMHhkNiwgMHg2YywgMHg1OCwKKysgICAgMHgzMywg MHg2YywgMHg1MywgMHgzNSwgMHgwZCwgMHg2NiwgMHhlMywgMHhjZQorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2ludF9yZXR1 cm5lZGJpdHNbXSA9IHsKKysgICAgMHhlMiwgMHgxZiwgMHhmMywgMHhkYSwgMHgwZCwgMHgxOSwg MHg5OSwgMHg4NywgMHhjNCwgMHg5MCwgMHhhMiwgMHgzMSwKKysgICAgMHhjYSwgMHgyYSwgMHg4 OSwgMHg1OCwgMHg0MywgMHg0NCwgMHhiOCwgMHhkZSwgMHhjZiwgMHhhNCwgMHhiZSwgMHgzYiwK KysgICAgMHg1MywgMHgyNiwgMHgyMiwgMHgzMSwgMHg3NiwgMHg0MSwgMHgyMiwgMHhiNSwgMHhh OCwgMHg3MCwgMHgyZiwgMHg0YiwKKysgICAgMHg2NCwgMHg5NSwgMHg0ZCwgMHg0OCwgMHg5Niwg MHgzNSwgMHhlNiwgMHhiZCwgMHgzYywgMHgzNCwgMHhkYiwgMHgxYgorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJvcHlp bnB1dHJlc2VlZFtdID0geworKyAgICAweDc3LCAweDYxLCAweGJhLCAweGJjLCAweGYyLCAweGMx LCAweGYzLCAweDRiLCAweDg2LCAweDY1LCAweGZkLCAweDQ4LAorKyAgICAweDBlLCAweDNjLCAw eDAyLCAweDVlLCAweGEyLCAweDdhLCAweDZiLCAweDdjLCAweGVkLCAweDIxLCAweDVlLCAweGY5 LAorKyAgICAweGNkLCAweGNkLCAweDc3LCAweDA3LCAweDJiLCAweGJlLCAweGM1LCAweDVjCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4MTgsIDB4MjQs IDB4NWYsIDB4YzYsIDB4ODQsIDB4ZDEsIDB4NjcsIDB4YzMsIDB4OWEsIDB4MTEsIDB4YTUsIDB4 OGMsCisrICAgIDB4MDcsIDB4MzksIDB4MjEsIDB4ODMsIDB4NGQsIDB4MDQsIDB4YzQsIDB4NmEs IDB4MjgsIDB4MTksIDB4Y2YsIDB4OTIsCisrICAgIDB4MjEsIDB4ZDksIDB4OWUsIDB4NDEsIDB4 NzIsIDB4NmMsIDB4OWUsIDB4NjMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAg IDB4OTYsIDB4NjcsIDB4NDEsIDB4MjgsIDB4OWIsIDB4YjcsIDB4OTIsIDB4OGQsIDB4NjQsIDB4 M2IsIDB4ZTQsIDB4Y2YsCisrICAgIDB4N2UsIDB4YWEsIDB4MWUsIDB4YjEsIDB4NGIsIDB4MWQs IDB4MDksIDB4NTYsIDB4NjcsIDB4OWMsIDB4YzYsIDB4NmQsCisrICAgIDB4M2IsIDB4ZTgsIDB4 OTEsIDB4OWQsIDB4ZTEsIDB4OGEsIDB4YjcsIDB4MzIKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9yZXR1cm5lZGJpdHNbXSA9 IHsKKysgICAgMHhlMywgMHg1OSwgMHg2MSwgMHgzOCwgMHg5MiwgMHhlYywgMHhlMiwgMHgzYywg MHhmZiwgMHhiNywgMHhkYiwgMHgxOSwKKysgICAgMHgwZiwgMHg1YiwgMHg5MywgMHg2OCwgMHgw ZCwgMHhhNCwgMHg5NCwgMHg0MCwgMHg3MiwgMHgwYiwgMHhlMCwgMHhlZCwKKysgICAgMHg0ZCwg MHhjZCwgMHg2OCwgMHhhMCwgMHgxZSwgMHhmZSwgMHg2NywgMHhiMiwgMHhmYSwgMHgyMSwgMHg1 NiwgMHg3NCwKKysgICAgMHhhNCwgMHhhZCwgMHhjZiwgMHhiNywgMHg2MCwgMHg2NiwgMHgyZSwg MHg0MCwgMHhkZSwgMHg4MiwgMHhjYSwgMHhmYgorK307CisrCisrLyogSE1BQyBTSEEtNTEyIFBS ICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHhhYSwgMHg5ZSwgMHg0NSwgMHg2Nywg MHgwZSwgMHgwMCwgMHgyYSwgMHg2NywgMHg5OCwgMHhkNiwgMHhkYSwgMHgwYiwKKysgICAgMHgw ZiwgMHgxNywgMHg3ZSwgMHhhYywgMHhmZCwgMHgyNywgMHhjNCwgMHhjYSwgMHg4NCwgMHhkZiwg MHhkZSwgMHhiYSwKKysgICAgMHg4NSwgMHhkOSwgMHhiZSwgMHg4ZiwgMHhmMywgMHhmZiwgMHg5 MSwgMHg0ZAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhNTEyX3ByX25vbmNlW10gPSB7CisrICAgIDB4OGMsIDB4NDksIDB4MmYsIDB4 NTgsIDB4MWUsIDB4N2EsIDB4ZGEsIDB4NGIsIDB4N2UsIDB4OGEsIDB4MzAsIDB4N2IsCisrICAg IDB4ODYsIDB4ZWEsIDB4YWYsIDB4YTIKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9IHsKKysgICAgMHg3MSwgMHhlMSwgMHhiYiwgMHhhZCwgMHhhNywgMHg0YiwgMHgy ZSwgMHgzMSwgMHgzYiwgMHgwYiwgMHhlYywgMHgyNCwKKysgICAgMHg5OSwgMHgzOCwgMHhiYywg MHhhYSwgMHgwNSwgMHg0YywgMHg0NiwgMHg0NCwgMHhmYSwgMHhhZCwgMHg4ZSwgMHgwMiwKKysg ICAgMHhjMSwgMHg3ZSwgMHhhZCwgMHhlYywgMHg1NCwgMHhhNiwgMHhkMCwgMHhhZAorK307Cisr CisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEy X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDNkLCAweDZlLCAweGE2LCAweGE4LCAw eDI5LCAweDJhLCAweGIyLCAweGY1LCAweDk4LCAweDQyLCAweGU0LCAweDkyLAorKyAgICAweDc4 LCAweDIyLCAweDY3LCAweGZkLCAweDFiLCAweDE1LCAweDFlLCAweDI5LCAweGFhLCAweDcxLCAw eDNjLCAweDNjLAorKyAgICAweGU3LCAweDA1LCAweDIwLCAweGE5LCAweDI5LCAweGM2LCAweDc1 LCAweDcxCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAgMHhhYiwgMHhiOSwg MHgxNiwgMHhkOCwgMHg1NSwgMHgzNSwgMHg1NCwgMHhiNywgMHg5NywgMHgzZiwgMHg5NCwgMHhi YywKKysgICAgMHgyZiwgMHg3YywgMHg3MCwgMHhjNywgMHhkMCwgMHhlZCwgMHhiNywgMHg0Yiwg MHhmNywgMHhmNiwgMHg2YywgMHgwMywKKysgICAgMHgwYywgMHhiMCwgMHgwMywgMHhkOCwgMHhi YiwgMHg3MSwgMHhkOSwgMHgxMAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysg ICAgMHg4ZSwgMHhkMywgMHhmZCwgMHg1MiwgMHg5ZSwgMHg4MywgMHgwOCwgMHg0OSwgMHgxOCwg MHg2ZSwgMHgyMywgMHg1NiwKKysgICAgMHg1YywgMHg0NSwgMHg5MywgMHgzNCwgMHgwNSwgMHhl MiwgMHg5OCwgMHg4ZiwgMHgwYywgMHhkNCwgMHgzMiwgMHgwYywKKysgICAgMHhmZCwgMHhkYSwg MHg1ZiwgMHg5MiwgMHgzYSwgMHg4YywgMHg4MSwgMHhiZCwgMHhmNiwgMHg2YywgMHg1NSwgMHhm ZCwKKysgICAgMHhiOCwgMHgyMCwgMHhjZSwgMHg4ZCwgMHg5NywgMHgyNywgMHhlOCwgMHhlOCwg MHhlMCwgMHhiMywgMHg4NSwgMHg1MCwKKysgICAgMHhhMiwgMHhjMiwgMHhiMiwgMHg5NSwgMHgx ZCwgMHg0OCwgMHhkMywgMHg3YiwgMHg0YiwgMHg3OCwgMHgxMywgMHgzNSwKKysgICAgMHgwNSwg MHgxNywgMHhiZSwgMHgwZAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAg MHhjMywgMHhmYywgMHg5NSwgMHhhYSwgMHg2OSwgMHgwNiwgMHhhZSwgMHg1OSwgMHg0MSwgMHhj ZSwgMHgyNiwgMHgwOCwKKysgICAgMHgyOSwgMHg2ZCwgMHg0NSwgMHhkYSwgMHhlOCwgMHhiMywg MHg2YywgMHg5NSwgMHg2MCwgMHgwZiwgMHg3MCwgMHgyYywKKysgICAgMHgxMCwgMHhiYSwgMHgz OCwgMHg4YywgMHhjZiwgMHgyOSwgMHg5OSwgMHhhYQorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dHBy MltdID0geworKyAgICAweDNiLCAweDlhLCAweDI1LCAweGNlLCAweGQ3LCAweGY5LCAweDVjLCAw eGQxLCAweDNhLCAweDNlLCAweGFhLCAweDcxLAorKyAgICAweDE0LCAweDNlLCAweDE5LCAweGU4 LCAweGNlLCAweGU2LCAweGZlLCAweDUxLCAweDg0LCAweGU5LCAweDFiLCAweGZlLAorKyAgICAw eDNmLCAweGE3LCAweGYyLCAweGZkLCAweDc2LCAweDVmLCAweDZhLCAweGU3CisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJf cmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4YjcsIDB4ODIsIDB4YTksIDB4NTcsIDB4ODEsIDB4 NjcsIDB4NTMsIDB4YjUsIDB4YTEsIDB4ZTksIDB4M2QsIDB4MzUsCisrICAgIDB4ZjksIDB4ZTQs IDB4OTcsIDB4YmUsIDB4YTYsIDB4Y2EsIDB4ZjEsIDB4MDEsIDB4MTMsIDB4MDksIDB4ZTcsIDB4 MjEsCisrICAgIDB4YzAsIDB4ZWQsIDB4OTMsIDB4NWQsIDB4NGIsIDB4ZjQsIDB4ZWIsIDB4OGQs IDB4NTMsIDB4MjUsIDB4OGEsIDB4YzQsCisrICAgIDB4YjEsIDB4NmYsIDB4NmUsIDB4MzcsIDB4 Y2QsIDB4MmUsIDB4YWMsIDB4MzksIDB4YjIsIDB4YjYsIDB4OTksIDB4YTMsCisrICAgIDB4ODIs IDB4MDAsIDB4YjAsIDB4MjEsIDB4ZjAsIDB4YzcsIDB4MmYsIDB4NGMsIDB4NzMsIDB4OTIsIDB4 ZmQsIDB4MDAsCisrICAgIDB4YjYsIDB4YWYsIDB4YmMsIDB4ZDMKKyt9OworKworKy8qIEhNQUMg U0hBLTUxMiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGE1MTJfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4NmUsIDB4ODUsIDB4 ZTYsIDB4MjUsIDB4OTYsIDB4MjksIDB4YTcsIDB4NTIsIDB4NWIsIDB4NjAsIDB4YmEsIDB4YWEs CisrICAgIDB4ZGUsIDB4ZGIsIDB4MzYsIDB4MGEsIDB4NTEsIDB4OWEsIDB4MTUsIDB4YWUsIDB4 NmUsIDB4MTgsIDB4ZDMsIDB4ZmUsCisrICAgIDB4MzksIDB4YjksIDB4NGEsIDB4OTYsIDB4Zjgs IDB4NzcsIDB4Y2IsIDB4OTUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9ub25jZVtdID0geworKyAgICAweGUwLCAweGE2LCAw eDVkLCAweDA4LCAweGMzLCAweDdjLCAweGFlLCAweDI1LCAweDJlLCAweDgwLCAweGQxLCAweDNl LAorKyAgICAweGQ5LCAweGFmLCAweDQzLCAweDNjCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcK KysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcGVyc29uYWxpemF0 aW9uc3RyaW5nW10gPSB7CisrICAgIDB4NTMsIDB4OTksIDB4NTIsIDB4NWYsIDB4MTEsIDB4YTks IDB4NjQsIDB4NjYsIDB4MjAsIDB4NWUsIDB4MWIsIDB4NWYsCisrICAgIDB4NDIsIDB4YjMsIDB4 ZjQsIDB4ZGEsIDB4ZWQsIDB4YmIsIDB4NjMsIDB4YzEsIDB4MjMsIDB4YWYsIDB4ZDAsIDB4MDEs CisrICAgIDB4OTAsIDB4M2IsIDB4ZDAsIDB4NzgsIDB4ZTQsIDB4MGIsIDB4YTcsIDB4MjAKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHg4NSwgMHg5MCwgMHg4MCwgMHhkMywg MHg5OCwgMHhmMSwgMHg1MywgMHg2ZCwgMHg2OCwgMHgxNSwgMHg4ZiwgMHhlNSwKKysgICAgMHg2 MCwgMHgzZiwgMHgxNywgMHgyOSwgMHg1NSwgMHg4ZCwgMHgzMywgMHhiMSwgMHg0NSwgMHg2NCwg MHg2NCwgMHg4ZCwKKysgICAgMHg1MCwgMHgyMSwgMHg4OSwgMHhhZSwgMHhmNiwgMHhmZCwgMHgz MiwgMHg3MworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgyOCwgMHg1Niwg MHgzMCwgMHg2ZiwgMHhmNCwgMHhhMSwgMHg0OCwgMHhlMCwgMHhjOSwgMHhmNSwgMHg3NSwgMHg5 MCwKKysgICAgMHhjYywgMHhmYiwgMHhkZiwgMHhkZiwgMHg3MSwgMHgzZCwgMHgwYSwgMHg5YSwg MHgwMywgMHg2NSwgMHgzYiwgMHgxOCwKKysgICAgMHg2MSwgMHhlMywgMHhkMSwgMHhkYSwgMHhj YywgMHg0YSwgMHhmZSwgMHg1NSwgMHgzOCwgMHhmOCwgMHgyMSwgMHg2YiwKKysgICAgMHhmYSwg MHgxOCwgMHgwMSwgMHg0MiwgMHgzOSwgMHgyZiwgMHg5OSwgMHg1MywgMHgzOCwgMHgxNSwgMHg4 MiwgMHgzNCwKKysgICAgMHhjNSwgMHg5MywgMHg5MiwgMHhiYywgMHg0ZCwgMHg3NSwgMHgxYSwg MHg1ZiwgMHgyMSwgMHgyNywgMHhjYywgMHhhMSwKKysgICAgMHhiMSwgMHg1NywgMHg2OSwgMHhl OAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhNTEyX2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweDhjLCAweDUyLCAweDdl LCAweDc3LCAweDcyLCAweDNmLCAweGEzLCAweDA0LCAweDk3LCAweDEwLCAweDliLCAweDQxLAor KyAgICAweGJkLCAweGU4LCAweGZmLCAweDg5LCAweGVkLCAweDgwLCAweGUzLCAweGJkLCAweGFh LCAweDEyLCAweDJkLCAweGNhLAorKyAgICAweDc1LCAweDgyLCAweDM2LCAweDc3LCAweDg4LCAw eGNkLCAweGE2LCAweDczCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7 CisrICAgIDB4N2UsIDB4MzIsIDB4ZTMsIDB4NjksIDB4NjksIDB4MDcsIDB4MzQsIDB4YTIsIDB4 MTYsIDB4YTIsIDB4NWQsIDB4MWEsCisrICAgIDB4MTAsIDB4OTEsIDB4ZDMsIDB4ZTIsIDB4MjEs IDB4YTIsIDB4YTMsIDB4ZGQsIDB4Y2QsIDB4MGMsIDB4MDksIDB4ODYsCisrICAgIDB4MTEsIDB4 ZTEsIDB4NTAsIDB4ZmYsIDB4NWMsIDB4YjcsIDB4ZWIsIDB4NWMKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFs aW5wdXQyW10gPSB7CisrICAgIDB4N2YsIDB4NzgsIDB4NjYsIDB4ZDgsIDB4ZmIsIDB4NjcsIDB4 Y2YsIDB4OGQsIDB4OGMsIDB4MDgsIDB4MzAsIDB4YTUsCisrICAgIDB4ZjgsIDB4N2QsIDB4Y2Ys IDB4NDQsIDB4NTksIDB4Y2UsIDB4ZjgsIDB4ZGYsIDB4NTgsIDB4ZDMsIDB4NjAsIDB4Y2IsCisr ICAgIDB4YTgsIDB4NjAsIDB4YjksIDB4MDcsIDB4YzQsIDB4YjEsIDB4OTUsIDB4NDgKKyt9Owor KworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUx Ml9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhkZiwgMHhhNywgMHgzNiwgMHhkNCwgMHhkYywg MHg1ZCwgMHg0ZCwgMHgzMSwgMHhhZCwgMHg2OSwgMHg0NiwgMHg5ZiwKKysgICAgMHhmMSwgMHg3 YywgMHhkNywgMHgzYiwgMHg0ZiwgMHg1NSwgMHhmMiwgMHhkNywgMHhiOSwgMHg5ZCwgMHhhZCwg MHg3YSwKKysgICAgMHg3OSwgMHgwOCwgMHg1OSwgMHhhNSwgMHhkYywgMHg3NCwgMHhmNSwgMHg5 YiwgMHg3MywgMHhkMiwgMHgxMywgMHgyNSwKKysgICAgMHgwYiwgMHg4MSwgMHgwOCwgMHgwOCwg MHgyNSwgMHhmYiwgMHgzOSwgMHhmMiwgMHhmMCwgMHhhMywgMHhhNCwgMHg4ZCwKKysgICAgMHhl ZiwgMHgwNSwgMHg5ZSwgMHhiOCwgMHhjNywgMHg1MiwgMHhlNCwgMHgwZSwgMHg0MiwgMHhhYSwg MHg3YywgMHg3OSwKKysgICAgMHhjMiwgMHhkNiwgMHhmZCwgMHhhNQorK307CitkaWZmIC11cCBv cGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4w LjJlL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1 OjUxLjk2NTU2MjU5OCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNf ZHNhX3NlbGZ0ZXN0LmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjU1NjI1OTggKzAxMDAKK0BAIC0w LDAgKzEsMTkyIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisr ICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0 cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5o PgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wW10gPSB7CisrICAgIDB4 YTgsIDB4NTMsIDB4NzgsIDB4ZDgsIDB4ZmQsIDB4M2YsIDB4OGQsIDB4NzIsIDB4ZWMsIDB4NzQs IDB4MTgsIDB4MDgsCisrICAgIDB4MGQsIDB4YTIsIDB4MTMsIDB4MTcsIDB4ZTQsIDB4M2UsIDB4 YzQsIDB4YjYsIDB4MmIsIDB4YTgsIDB4YzgsIDB4NjIsCisrICAgIDB4M2IsIDB4N2UsIDB4NGQs IDB4MDQsIDB4NDQsIDB4MWQsIDB4ZDEsIDB4YTAsIDB4NjUsIDB4ODYsIDB4NjIsIDB4NTksCisr ICAgIDB4NjQsIDB4OTMsIDB4Y2EsIDB4OGUsIDB4OWUsIDB4OGYsIDB4YmIsIDB4N2UsIDB4MzQs IDB4YWEsIDB4ZGQsIDB4YjYsCisrICAgIDB4MmUsIDB4NWQsIDB4NjcsIDB4YjYsIDB4ZDAsIDB4 OWEsIDB4NmUsIDB4NjEsIDB4YjcsIDB4NjksIDB4ZTcsIDB4YzMsCisrICAgIDB4NTIsIDB4YWEs IDB4MmIsIDB4MTAsIDB4ZTIsIDB4MGMsIDB4YTAsIDB4NjMsIDB4NjksIDB4NjMsIDB4YjUsIDB4 NTIsCisrICAgIDB4M2UsIDB4ODYsIDB4NDcsIDB4MGQsIDB4ZWMsIDB4YmIsIDB4ZWQsIDB4YTAs IDB4MjcsIDB4ZTcsIDB4OTcsIDB4ZTcsCisrICAgIDB4YjYsIDB4NzYsIDB4MzUsIDB4ZDQsIDB4 ZDQsIDB4OWMsIDB4MzAsIDB4NzAsIDB4MGUsIDB4NzQsIDB4YWYsIDB4OGEsCisrICAgIDB4MGYs IDB4ZjEsIDB4NTYsIDB4YTgsIDB4MDEsIDB4YWYsIDB4NTcsIDB4YTIsIDB4NmUsIDB4NzAsIDB4 NzgsIDB4ZjEsCisrICAgIDB4ZDgsIDB4MmYsIDB4NzQsIDB4OTAsIDB4OGUsIDB4Y2IsIDB4NmQs IDB4MDcsIDB4ZTcsIDB4MGIsIDB4MzUsIDB4MDMsCisrICAgIDB4ZWUsIDB4ZDksIDB4NGYsIDB4 YTMsIDB4MmMsIDB4ZjEsIDB4N2EsIDB4N2YsIDB4YzMsIDB4ZDYsIDB4Y2YsIDB4NDAsCisrICAg IDB4ZGMsIDB4N2IsIDB4MDAsIDB4ODMsIDB4MGUsIDB4NmEsIDB4MjUsIDB4NjYsIDB4ZGMsIDB4 MDcsIDB4M2UsIDB4MzQsCisrICAgIDB4MzMsIDB4MTIsIDB4NTEsIDB4N2MsIDB4NmEsIDB4YTUs IDB4MTUsIDB4MmIsIDB4NGIsIDB4ZmUsIDB4Y2QsIDB4MmUsCisrICAgIDB4NTUsIDB4MWYsIDB4 ZWUsIDB4MzQsIDB4NjMsIDB4MTgsIDB4YTEsIDB4NTMsIDB4NDIsIDB4M2MsIDB4OTksIDB4NmIs CisrICAgIDB4MGQsIDB4NWQsIDB4Y2IsIDB4OTEsIDB4MDIsIDB4YWUsIDB4ZGQsIDB4MzgsIDB4 NzksIDB4ODYsIDB4MTYsIDB4ZjEsCisrICAgIDB4ZjEsIDB4ZTAsIDB4ZDYsIDB4YzQsIDB4MDMs IDB4NTIsIDB4NWIsIDB4MWYsIDB4OWIsIDB4M2QsIDB4NGQsIDB4YzcsCisrICAgIDB4NjYsIDB4 ZGUsIDB4MmQsIDB4ZmMsIDB4NGEsIDB4NTYsIDB4ZDcsIDB4YjgsIDB4YmEsIDB4NTksIDB4NjMs IDB4ZDYsCisrICAgIDB4MGYsIDB4M2UsIDB4MTYsIDB4MzEsIDB4ODgsIDB4NzAsIDB4YWQsIDB4 NDMsIDB4NjksIDB4NTIsIDB4ZTUsIDB4NTcsCisrICAgIDB4NjUsIDB4MzcsIDB4NGUsIDB4YWIs IDB4ODUsIDB4ZTgsIDB4ZWMsIDB4MTcsIDB4ZDYsIDB4YjksIDB4YTQsIDB4NTQsCisrICAgIDB4 N2IsIDB4OWIsIDB4NWYsIDB4MjcsIDB4NTIsIDB4ZjMsIDB4MTAsIDB4NWIsIDB4ZTgsIDB4MDks IDB4YjIsIDB4M2EsCisrICAgIDB4MmMsIDB4OGQsIDB4NzQsIDB4NjksIDB4ZGIsIDB4MDIsIDB4 ZTIsIDB4NGQsIDB4NTksIDB4MjMsIDB4OTQsIDB4YTcsCisrICAgIDB4ZGIsIDB4YTAsIDB4Njks IDB4ZTkKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhf cVtdID0geworKyAgICAweGQyLCAweDc3LCAweDA0LCAweDRlLCAweDUwLCAweGY1LCAweGE0LCAw eGUzLCAweGY1LCAweDEwLCAweGE1LCAweDBhLAorKyAgICAweDBiLCAweDg0LCAweGZkLCAweGZm LCAweGJjLCAweGEwLCAweDQ3LCAweGVkLCAweDI3LCAweDYwLCAweDIwLCAweDU2LAorKyAgICAw eDc0LCAweDQxLCAweGEwLCAweGE1CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBkc2FfdGVzdF8yMDQ4X2dbXSA9IHsKKysgICAgMHgxMywgMHhkNywgMHg1NCwgMHhlMiwgMHgx ZiwgMHhkMiwgMHg0MSwgMHg2NSwgMHg1ZCwgMHhhOCwgMHg5MSwgMHhjNSwKKysgICAgMHgyMiwg MHhhNiwgMHg1YSwgMHg3MiwgMHhhOCwgMHg5YiwgMHhkYywgMHg2NCwgMHhlYywgMHg5YiwgMHg1 NCwgMHhhOCwKKysgICAgMHgyMSwgMHhlZCwgMHg0YSwgMHg4OSwgMHg4YiwgMHg0OSwgMHgwZSwg MHgwYywgMHg0ZiwgMHhjYiwgMHg3MiwgMHgxOSwKKysgICAgMHgyYSwgMHg0YSwgMHgyMCwgMHhm NSwgMHg0MSwgMHhmMywgMHhmMiwgMHg5MiwgMHg1MywgMHg5OSwgMHhmMCwgMHhiYSwKKysgICAg MHhlYywgMHhmOSwgMHgyOSwgMHhhYSwgMHhmYiwgMHhmNywgMHg5ZCwgMHhmZSwgMHg0MywgMHgz MiwgMHgzOSwgMHgzYiwKKysgICAgMHgzMiwgMHhjZCwgMHgyZSwgMHgyZiwgMHhjZiwgMHgyNywg MHgyZiwgMHgzMiwgMHhhNiwgMHgyNywgMHg0MywgMHg0YSwKKysgICAgMHgwZCwgMHhmMiwgMHg0 MiwgMHhiNywgMHg1YiwgMHg0MSwgMHg0ZCwgMHhmMywgMHg3MiwgMHgxMiwgMHgxZSwgMHg1MywK KysgICAgMHhhNSwgMHg1MywgMHhmMiwgMHgyMiwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMCwgMHhm MCwgMHgxNiwgMHg0OCwgMHg1YiwKKysgICAgMHg2YiwgMHhkMCwgMHg4OSwgMHg4NCwgMHg1MSwg MHg4MCwgMHgxZCwgMHhjZCwgMHg4ZCwgMHhlNiwgMHg0YywgMHhkNSwKKysgICAgMHgzNiwgMHg1 NiwgMHg5NiwgMHhmZiwgMHhjNSwgMHgzMiwgMHhkNSwgMHgyOCwgMHhjNSwgMHgwNiwgMHg2Miwg MHgwYSwKKysgICAgMHg5NCwgMHgyYSwgMHgwMywgMHgwNSwgMHgwNCwgMHg2ZCwgMHg4ZiwgMHgx OCwgMHg3NiwgMHgzNCwgMHgxZiwgMHgxZSwKKysgICAgMHg1NywgMHgwYiwgMHhjMywgMHg5Nywg MHg0YiwgMHhhNiwgMHhiOSwgMHhhNCwgMHgzOCwgMHhlOSwgMHg3MCwgMHgyMywKKysgICAgMHgw MiwgMHhhMiwgMHhlNiwgMHhlNiwgMHg3YiwgMHhmZCwgMHgwNiwgMHhkMywgMHgyYiwgMHhjNiwg MHg3OSwgMHg5NiwKKysgICAgMHgyMiwgMHg3MSwgMHhkNywgMHhiNCwgMHgwYywgMHhkNywgMHgy ZiwgMHgzOCwgMHg2ZSwgMHg2NCwgMHhlMCwgMHhkNywKKysgICAgMHhlZiwgMHg4NiwgMHhjYSwg MHg4YywgMHhhNSwgMHhkMSwgMHg0MiwgMHgyOCwgMHhkYywgMHgyYSwgMHg0ZiwgMHgxNiwKKysg ICAgMHhlMywgMHgxOCwgMHg5OCwgMHg4NiwgMHhiNSwgMHg5OSwgMHgwNiwgMHg3NCwgMHhmNCwg MHgyMCwgMHgwZiwgMHgzYSwKKysgICAgMHg0YywgMHhmNiwgMHg1YSwgMHgzZiwgMHgwZCwgMHhk YiwgMHhhMSwgMHhmYSwgMHg2NywgMHgyZCwgMHhmZiwgMHgyZiwKKysgICAgMHg1ZSwgMHgxNCwg MHgzZCwgMHgxMCwgMHhlNCwgMHhlOSwgMHg3YSwgMHhlOCwgMHg0ZiwgMHg2ZCwgMHhhMCwgMHg5 NSwKKysgICAgMHgzNSwgMHhkNSwgMHhiOSwgMHhkZiwgMHgyNSwgMHg5MSwgMHg4MSwgMHhhNywg MHg5YiwgMHg2MywgMHhiMCwgMHg2OSwKKysgICAgMHhlOSwgMHg0OSwgMHg5NywgMHgyYiwgMHgw MiwgMHhiYSwgMHgzNiwgMHhiMywgMHg1OCwgMHg2YSwgMHhhYiwgMHg3ZSwKKysgICAgMHg0NSwg MHhmMywgMHgyMiwgMHhmOCwgMHgyZSwgMHg0ZSwgMHg4NSwgMHhjYSwgMHgzYSwgMHhiOCwgMHg1 NSwgMHg5MSwKKysgICAgMHhiMywgMHhjMiwgMHhhOSwgMHg2NgorK307CisrCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wdWJfa2V5W10gPSB7CisrICAgIDB4MjQs IDB4NTIsIDB4ZjMsIDB4Y2MsIDB4YmUsIDB4OWUsIDB4ZDUsIDB4Y2EsIDB4N2QsIDB4YzcsIDB4 NGMsIDB4NjAsCisrICAgIDB4MmIsIDB4OTksIDB4MjIsIDB4NmUsIDB4OGYsIDB4MmYsIDB4YWIs IDB4MzgsIDB4ZTcsIDB4ZDcsIDB4ZGQsIDB4ZmIsCisrICAgIDB4NzUsIDB4NTMsIDB4OWIsIDB4 MTcsIDB4MTUsIDB4NWUsIDB4OWYsIDB4Y2YsIDB4ZDEsIDB4YWIsIDB4YTUsIDB4NjQsCisrICAg IDB4ZWIsIDB4ODUsIDB4MzUsIDB4ZDgsIDB4MTIsIDB4YzksIDB4YzIsIDB4ZGMsIDB4ZjksIDB4 NzIsIDB4ODQsIDB4NDQsCisrICAgIDB4MWIsIDB4YzQsIDB4ODIsIDB4MjQsIDB4MzYsIDB4MjQs IDB4YzcsIDB4ZjQsIDB4NTcsIDB4NTgsIDB4MGMsIDB4MWMsCisrICAgIDB4MzgsIDB4YTUsIDB4 N2MsIDB4NDYsIDB4YzQsIDB4NTcsIDB4MzksIDB4MjQsIDB4NzAsIDB4ZWQsIDB4YjUsIDB4MmMs CisrICAgIDB4YjUsIDB4YTYsIDB4ZTAsIDB4M2YsIDB4ZTYsIDB4MjgsIDB4N2IsIDB4YjYsIDB4 ZjQsIDB4OWEsIDB4NDIsIDB4YTIsCisrICAgIDB4MDYsIDB4NWEsIDB4MDUsIDB4NGYsIDB4MDMs IDB4MDgsIDB4MzksIDB4ZGYsIDB4MWYsIDB4ZDMsIDB4MTQsIDB4OWMsCisrICAgIDB4NGMsIDB4 YTAsIDB4NTMsIDB4MWQsIDB4ZDgsIDB4Y2EsIDB4OGEsIDB4YWEsIDB4OWMsIDB4YzcsIDB4MzMs IDB4NzEsCisrICAgIDB4OTMsIDB4MzgsIDB4NzMsIDB4NDgsIDB4MzMsIDB4NjEsIDB4MTgsIDB4 MjIsIDB4NDUsIDB4NDUsIDB4ZTgsIDB4OGMsCisrICAgIDB4ODAsIDB4ZmYsIDB4ZDgsIDB4NzYs IDB4NWQsIDB4NzQsIDB4MzYsIDB4MDMsIDB4MzMsIDB4Y2MsIDB4YWIsIDB4OTksCisrICAgIDB4 NzIsIDB4NzcsIDB4OWIsIDB4NjUsIDB4MjUsIDB4YTYsIDB4NWIsIDB4ZGQsIDB4MGQsIDB4MTAs IDB4YzYsIDB4NzUsCisrICAgIDB4YzEsIDB4MDksIDB4YmIsIDB4ZDMsIDB4ZTUsIDB4YmUsIDB4 NGQsIDB4NzIsIDB4ZWYsIDB4NmUsIDB4YmEsIDB4NmUsCisrICAgIDB4NDMsIDB4OGQsIDB4NTIs IDB4MjYsIDB4MjMsIDB4N2QsIDB4YjgsIDB4ODgsIDB4MzcsIDB4OWMsIDB4NWYsIDB4Y2MsCisr ICAgIDB4NDcsIDB4YTMsIDB4ODQsIDB4N2YsIDB4ZjYsIDB4MzcsIDB4MTEsIDB4YmEsIDB4ZWQs IDB4NmQsIDB4MDMsIDB4YWYsCisrICAgIDB4ZTgsIDB4MWUsIDB4NjksIDB4NGEsIDB4NDEsIDB4 M2IsIDB4NjgsIDB4MGIsIDB4ZDMsIDB4OGEsIDB4YjQsIDB4OTAsCisrICAgIDB4M2YsIDB4ODMs IDB4NzAsIDB4YTcsIDB4MDcsIDB4ZWYsIDB4NTUsIDB4MWQsIDB4NDksIDB4NDEsIDB4MDIsIDB4 NmQsCisrICAgIDB4OTUsIDB4NzksIDB4ZDYsIDB4OTEsIDB4ZGUsIDB4OGUsIDB4ZGEsIDB4YTEs IDB4NjEsIDB4MDUsIDB4ZWIsIDB4OWQsCisrICAgIDB4YmEsIDB4M2MsIDB4MmYsIDB4NGMsIDB4 MWIsIDB4ZWMsIDB4NTAsIDB4ODIsIDB4NzUsIDB4YWEsIDB4MDIsIDB4MDcsCisrICAgIDB4ZTIs IDB4NTEsIDB4YjUsIDB4ZWMsIDB4Y2IsIDB4MjgsIDB4NmEsIDB4NGIsIDB4MDEsIDB4ZDQsIDB4 NDksIDB4ZDMsCisrICAgIDB4MGEsIDB4Y2IsIDB4NjcsIDB4MzcsIDB4MTcsIDB4YTAsIDB4ZDIs IDB4ZmIsIDB4M2IsIDB4NTAsIDB4YzgsIDB4OTMsCisrICAgIDB4ZjcsIDB4ZGEsIDB4YjEsIDB4 NGYKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHJp dl9rZXlbXSA9IHsKKysgICAgMHgwYywgMHg0YiwgMHgzMCwgMHg4OSwgMHhkMSwgMHhiOCwgMHg2 MiwgMHhjYiwgMHgzYywgMHg0MywgMHg2NCwgMHg5MSwKKysgICAgMHhmMCwgMHg5MSwgMHg1NCwg MHg3MCwgMHhjNSwgMHgyNywgMHg5NiwgMHhlMywgMHhhYywgMHhiZSwgMHhlOCwgMHgwMCwKKysg ICAgMHhlYywgMHg1NSwgMHhmNiwgMHhjYworK307CisrCisrc3RhdGljIGludCBjb3JydXB0X2Rz YTsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9kc2EoKQorK3sKKysgICAgY29ycnVwdF9kc2EgPSAx OworK30KKysKKytpbnQgRklQU19zZWxmdGVzdF9kc2EoKQorK3sKKysgICAgRFNBICpkc2EgPSBO VUxMOworKyAgICBFVlBfUEtFWSAqcGsgPSBOVUxMOworKyAgICBpbnQgcmV0ID0gMDsKKysKKysg ICAgZHNhID0gRFNBX25ldygpOworKworKyAgICBpZiAoZHNhID09IE5VTEwpCisrICAgICAgICBn b3RvIGVycjsKKysKKysgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwLCBkc2FfdGVz dF8yMDQ4KTsKKysgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBxLCBkc2FfdGVzdF8y MDQ4KTsKKysgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBnLCBkc2FfdGVzdF8yMDQ4 KTsKKysgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwdWJfa2V5LCBkc2FfdGVzdF8y MDQ4KTsKKysgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwcml2X2tleSwgZHNhX3Rl c3RfMjA0OCk7CisrCisrICAgIGlmIChjb3JydXB0X2RzYSkKKysgICAgICAgIEJOX3NldF9iaXQo ZHNhLT5wdWJfa2V5LCAyMDQ3KTsKKysKKysgICAgaWYgKChwayA9IEVWUF9QS0VZX25ldygpKSA9 PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIEVWUF9QS0VZX2Fzc2lnbl9EU0Eo cGssIGRzYSk7CisrCisrICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBOVUxM LCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBFVlBfc2hh MjU2KCksIDAsICJEU0EgU0hBMjU2IikpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgcmV0ID0g MTsKKysKKysgZXJyOgorKyAgICBpZiAocGspCisrICAgICAgICBFVlBfUEtFWV9mcmVlKHBrKTsK KysgICAgZWxzZSBpZiAoZHNhKQorKyAgICAgICAgRFNBX2ZyZWUoZHNhKTsKKysgICAgcmV0dXJu IHJldDsKKyt9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9m aXBzX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYworLS0t IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMuZmlwcwkyMDE1LTEyLTA0IDEz OjU1OjUxLjk2NTU2MjU5OCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2Zp cHNfZW5jLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjU1NjI1OTggKzAxMDAKK0BAIC0wLDAgKzEs MTg5IEBACisrLyogZmlwZS9ldnAvZmlwc19lbmMuYyAqLworKy8qIENvcHlyaWdodCAoQykgMTk5 NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdy aXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGlt cGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMg U1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBu b24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRv IGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0Es CisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhl IFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBp cyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRo ZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAqIENv cHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBu b3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRo aXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2 ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGli cmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNz YWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBv ciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAz LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9m IHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds ZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20p IgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhl IHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlw dG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dz IHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRo ZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBh Y2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3 cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFO WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysg KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7 IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p CisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ TElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0 cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisr ICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMg Y29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBk aXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5j ZS5dCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKytjb25zdCBFVlBfQ0lQSEVSICpGSVBTX2dldF9j aXBoZXJieW5pZChpbnQgbmlkKQorK3sKKysgICAgc3dpdGNoIChuaWQpIHsKKysgICAgY2FzZSBO SURfYWVzXzEyOF9jYmM6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY2JjKCk7CisrCisr ICAgIGNhc2UgTklEX2Flc18xMjhfY2NtOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2Nj bSgpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTI4X2NmYjE6CisrICAgICAgICByZXR1cm4gRVZQ X2Flc18xMjhfY2ZiMSgpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTI4X2NmYjEyODoKKysgICAg ICAgIHJldHVybiBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzEy OF9jZmI4OgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2NmYjgoKTsKKysKKysgICAgY2Fz ZSBOSURfYWVzXzEyOF9jdHI6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY3RyKCk7Cisr CisrICAgIGNhc2UgTklEX2Flc18xMjhfZWNiOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4 X2VjYigpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTI4X2djbToKKysgICAgICAgIHJldHVybiBF VlBfYWVzXzEyOF9nY20oKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzEyOF9vZmIxMjg6CisrICAg ICAgICByZXR1cm4gRVZQX2Flc18xMjhfb2ZiKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xMjhf eHRzOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X3h0cygpOworKworKyAgICBjYXNlIE5J RF9hZXNfMTkyX2NiYzoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jYmMoKTsKKysKKysg ICAgY2FzZSBOSURfYWVzXzE5Ml9jY206CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfY2Nt KCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xOTJfY2ZiMToKKysgICAgICAgIHJldHVybiBFVlBf YWVzXzE5Ml9jZmIxKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xOTJfY2ZiMTI4OgorKyAgICAg ICAgcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEyOCgpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTky X2NmYjg6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfY2ZiOCgpOworKworKyAgICBjYXNl IE5JRF9hZXNfMTkyX2N0cjoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jdHIoKTsKKysK KysgICAgY2FzZSBOSURfYWVzXzE5Ml9lY2I6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJf ZWNiKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xOTJfZ2NtOgorKyAgICAgICAgcmV0dXJuIEVW UF9hZXNfMTkyX2djbSgpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTkyX29mYjEyODoKKysgICAg ICAgIHJldHVybiBFVlBfYWVzXzE5Ml9vZmIoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzI1Nl9j YmM6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY2JjKCk7CisrCisrICAgIGNhc2UgTklE X2Flc18yNTZfY2NtOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2NjbSgpOworKworKyAg ICBjYXNlIE5JRF9hZXNfMjU2X2NmYjE6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY2Zi MSgpOworKworKyAgICBjYXNlIE5JRF9hZXNfMjU2X2NmYjEyODoKKysgICAgICAgIHJldHVybiBF VlBfYWVzXzI1Nl9jZmIxMjgoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzI1Nl9jZmI4OgorKyAg ICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjgoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzI1 Nl9jdHI6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY3RyKCk7CisrCisrICAgIGNhc2Ug TklEX2Flc18yNTZfZWNiOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2VjYigpOworKwor KyAgICBjYXNlIE5JRF9hZXNfMjU2X2djbToKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9n Y20oKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzI1Nl9vZmIxMjg6CisrICAgICAgICByZXR1cm4g RVZQX2Flc18yNTZfb2ZiKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18yNTZfeHRzOgorKyAgICAg ICAgcmV0dXJuIEVWUF9hZXNfMjU2X3h0cygpOworKworKyAgICBjYXNlIE5JRF9kZXNfZWRlX2Vj YjoKKysgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZSgpOworKworKyAgICBjYXNlIE5JRF9kZXNf ZWRlM19lY2I6CisrICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGUzKCk7CisrCisrICAgIGNhc2Ug TklEX2Rlc19lZGUzX2NiYzoKKysgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTNfY2JjKCk7Cisr CisrICAgIGNhc2UgTklEX2Rlc19lZGUzX2NmYjE6CisrICAgICAgICByZXR1cm4gRVZQX2Rlc19l ZGUzX2NmYjEoKTsKKysKKysgICAgY2FzZSBOSURfZGVzX2VkZTNfY2ZiNjQ6CisrICAgICAgICBy ZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjY0KCk7CisrCisrICAgIGNhc2UgTklEX2Rlc19lZGUzX2Nm Yjg6CisrICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjgoKTsKKysKKysgICAgY2FzZSBO SURfZGVzX2VkZTNfb2ZiNjQ6CisrICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGUzX29mYigpOwor KworKyAgICBjYXNlIE5JRF9kZXNfZWRlX2NiYzoKKysgICAgICAgIHJldHVybiBFVlBfZGVzX2Vk ZV9jYmMoKTsKKysKKysgICAgY2FzZSBOSURfZGVzX2VkZV9jZmI2NDoKKysgICAgICAgIHJldHVy biBFVlBfZGVzX2VkZV9jZmI2NCgpOworKworKyAgICBjYXNlIE5JRF9kZXNfZWRlX29mYjY0Ogor KyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlX29mYigpOworKworKyAgICBkZWZhdWx0OgorKyAg ICAgICAgcmV0dXJuIE5VTEw7CisrCisrICAgIH0KKyt9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4y ZS9jcnlwdG8vZmlwcy9maXBzLmguZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBz LmgKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzLmguZmlwcwkyMDE1LTEyLTA0 IDEzOjU1OjUxLjk2NjU2MjYyMiArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBz L2ZpcHMuaAkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NjU2MjYyMiArMDEwMAorQEAgLTAsMCArMSwy NzggQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9v cGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxz dGRhcmcuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKyMgZXJyb3IgRklQUyBpcyBkaXNh YmxlZC4KKysjZW5kaWYKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrIyBpZmRlZiAgX19j cGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjIGVuZGlmCisrCisrICAgIHN0cnVjdCBkc2Ffc3Q7 CisrICAgIHN0cnVjdCByc2Ffc3Q7CisrICAgIHN0cnVjdCBldnBfcGtleV9zdDsKKysgICAgc3Ry dWN0IGVudl9tZF9zdDsKKysgICAgc3RydWN0IGVudl9tZF9jdHhfc3Q7CisrICAgIHN0cnVjdCBl dnBfY2lwaGVyX3N0OworKyAgICBzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3Q7CisrICAgIHN0cnVj dCBkaF9tZXRob2Q7CisrICAgIHN0cnVjdCBDTUFDX0NUWF9zdDsKKysgICAgc3RydWN0IGhtYWNf Y3R4X3N0OworKworKyAgICBpbnQgRklQU19tb2R1bGVfbW9kZV9zZXQoaW50IG9ub2ZmLCBjb25z dCBjaGFyICphdXRoKTsKKysgICAgaW50IEZJUFNfbW9kdWxlX21vZGUodm9pZCk7CisrICAgIGNv bnN0IHZvaWQgKkZJUFNfcmFuZF9jaGVjayh2b2lkKTsKKysgICAgaW50IEZJUFNfc2VsZnRlc3Qo dm9pZCk7CisrICAgIGludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKKysgICAgdm9pZCBG SVBTX2NvcnJ1cHRfc2hhMSh2b2lkKTsKKysgICAgaW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2b2lk KTsKKysgICAgaW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKTsKKysgICAgdm9pZCBGSVBTX2Nv cnJ1cHRfYWVzKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpOwor KyAgICBpbnQgRklQU19zZWxmdGVzdF9hZXNfZ2NtKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxm dGVzdF9hZXNfeHRzKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF9hZXModm9pZCk7Cisr ICAgIHZvaWQgRklQU19jb3JydXB0X2Rlcyh2b2lkKTsKKysgICAgaW50IEZJUFNfc2VsZnRlc3Rf ZGVzKHZvaWQpOworKyAgICB2b2lkIEZJUFNfY29ycnVwdF9yc2Eodm9pZCk7CisrICAgIHZvaWQg RklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCk7CisrICAgIGludCBGSVBTX3NlbGZ0ZXN0X3Jz YSh2b2lkKTsKKysgICAgdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOworKyAgICB2b2lkIEZJ UFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF9kc2Eo dm9pZCk7CisrICAgIHZvaWQgRklQU19jb3JydXB0X3JuZyh2b2lkKTsKKysgICAgdm9pZCBGSVBT X3JuZ19zdGljayh2b2lkKTsKKysgICAgdm9pZCBGSVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKTsK KysgICAgdm9pZCBGSVBTX2RyYmdfc3RpY2soaW50IG9ub2ZmKTsKKysgICAgaW50IEZJUFNfc2Vs ZnRlc3Rfcm5nKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF94OTMxKHZvaWQpOworKyAg ICBpbnQgRklQU19zZWxmdGVzdF9obWFjKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF9k cmJnKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKTsKKysgICAg aW50IEZJUFNfc2VsZnRlc3RfY21hYyh2b2lkKTsKKysKKysgICAgdm9pZCBGSVBTX2dldF90aW1l dmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cik7CisrCisrIyBkZWZp bmUgRklQU19FUlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18s IFwKKysgICAgICAgICAgICAgICAgYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3Jp dGhtIGVycm9yIGlnbm9yZWQiKTsKKysKKysgICAgaW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChzdHJ1Y3QgZXZwX3BrZXlfc3QgKnBrZXksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2F0bGVuLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWRfZmxhZ3Ms IGNvbnN0IGNoYXIgKmZhaWxfc3RyKTsKKysKKysgICAgaW50IGZpcHNfY2lwaGVyX3Rlc3Qoc3Ry dWN0IGV2cF9jaXBoZXJfY3R4X3N0ICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpjaXBoZXIsCisrICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxlbik7CisrCisrICAgIHZvaWQgZmlw c19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKKysKKysgICAgY29uc3Qgc3RydWN0IGVudl9tZF9z dCAqRklQU19nZXRfZGlnZXN0YnluaWQoaW50IG5pZCk7CisrCisrICAgIGNvbnN0IHN0cnVjdCBl dnBfY2lwaGVyX3N0ICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKKysKKysvKiBCRUdJ TiBFUlJPUiBDT0RFUyAqLworKy8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJh dGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCisrICogbWFkZSBhZnRlciB0 aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4u CisrICovCisrICAgIHZvaWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpOworKworKy8qIEVy cm9yIGNvZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICovCisrCisrLyogRnVuY3Rpb24gY29k ZXMuICovCisrIyBkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TICAgICAgICAgICAg ICAgICAgICAgIDEwMAorKyMgZGVmaW5lIEZJUFNfRl9ESF9JTklUICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxNDgKKysjIGRlZmluZSBGSVBTX0ZfRFJCR19SRVNFRUQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTYyCisrIyBkZWZpbmUgRklQU19GX0RTQV9CVUlMVElO X1BBUkFNR0VOICAgICAgICAgICAgICAgICAgICAgIDEwMQorKyMgZGVmaW5lIEZJUFNfRl9EU0Ff QlVJTFRJTl9QQVJBTUdFTjIgICAgICAgICAgICAgICAgICAgICAxMDcKKysjIGRlZmluZSBGSVBT X0ZfRFNBX0RPX1NJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyCisrIyBkZWZp bmUgRklQU19GX0RTQV9ET19WRVJJRlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMwor KyMgZGVmaW5lIEZJUFNfRl9FQ0RIX0NPTVBVVEVfS0VZICAgICAgICAgICAgICAgICAgICAgICAg ICAxNjMKKysjIGRlZmluZSBGSVBTX0ZfRUNEU0FfRE9fU0lHTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTY0CisrIyBkZWZpbmUgRklQU19GX0VDRFNBX0RPX1ZFUklGWSAgICAgICAgICAg ICAgICAgICAgICAgICAgIDE2NQorKyMgZGVmaW5lIEZJUFNfRl9FQ19LRVlfR0VORVJBVEVfS0VZ ICAgICAgICAgICAgICAgICAgICAgICAxNjYKKysjIGRlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklO SVRfRVggICAgICAgICAgICAgICAgICAgICAgICAgMTI0CisrIyBkZWZpbmUgRklQU19GX0VWUF9E SUdFU1RJTklUX0VYICAgICAgICAgICAgICAgICAgICAgICAgIDEyNQorKyMgZGVmaW5lIEZJUFNf Rl9GSVBTX0NIRUNLX0RTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQKKysjIGRlZmlu ZSBGSVBTX0ZfRklQU19DSEVDS19EU0FfUFJORyAgICAgICAgICAgICAgICAgICAgICAgMTUxCisr IyBkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDE0MgorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0VDX1BSTkcgICAgICAgICAgICAgICAg ICAgICAgICAxNTIKKysjIGRlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJ TlQgICAgICAgICAgICAgMTA1CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEwNgorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JT QV9QUk5HICAgICAgICAgICAgICAgICAgICAgICAxNTAKKysjIGRlZmluZSBGSVBTX0ZfRklQU19D SVBIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYwCisrIyBkZWZpbmUgRklQU19G X0ZJUFNfQ0lQSEVSSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MworKyMgZGVmaW5l IEZJUFNfRl9GSVBTX0NJUEhFUl9DVFhfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAxNjEKKysj IGRlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RGSU5BTCAgICAgICAgICAgICAgICAgICAgICAgICAg MTU4CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUSU5JVCAgICAgICAgICAgICAgICAgICAg ICAgICAgIDEyOAorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVFVQREFURSAgICAgICAgICAg ICAgICAgICAgICAgICAxNTkKKysjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0JZVEVTICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTMxCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19DSEVD SyAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NgorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RS QkdfQ1BSTkdfVEVTVCAgICAgICAgICAgICAgICAgICAgICAxMzIKKysjIGRlZmluZSBGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLICAgICAgICAgICAgICAgICAgICAgMTM2CisrIyBkZWZpbmUg RklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSAgICAgICAgICAgICAgICAgICAgICAgIDEzNAorKyMg ZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAx MzUKKysjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFICAgICAgICAgICAgICAg ICAgICAgMTM4CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19ORVcgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEzOQorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfUkVTRUVEICAgICAg ICAgICAgICAgICAgICAgICAgICAxNDAKKysjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX1NJTkdM RV9LQVQgICAgICAgICAgICAgICAgICAgICAgMTQxCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRFNB X0NIRUNLICAgICAgICAgICAvKiB1bnVzZWQgKi8gICAgIDEwNworKyMgZGVmaW5lIEZJUFNfRl9G SVBTX0RTQV9TSUdOX0RJR0VTVCAgICAgICAgICAgICAgICAgICAgICAxNTQKKysjIGRlZmluZSBG SVBTX0ZfRklQU19EU0FfVkVSSUZZX0RJR0VTVCAgICAgICAgICAgICAgICAgICAgMTU1CisrIyBk ZWZpbmUgRklQU19GX0ZJUFNfR0VUX0VOVFJPUFkgICAgICAgICAgICAgICAgICAgICAgICAgIDE0 NworKyMgZGVmaW5lIEZJUFNfRl9GSVBTX01PREVfU0VUICAgICAgICAgICAgLyogdW51c2VkICov ICAgICAxMDgKKysjIGRlZmluZSBGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQgICAgICAgICAg ICAgICAgICAgICAgMTA4CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVT VCAgICAgICAgICAgICAgICAgIDEwOQorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfQUREICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxMzcKKysjIGRlZmluZSBGSVBTX0ZfRklQU19SQU5E X0JZVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIyCisrIyBkZWZpbmUgRklQU19GX0ZJ UFNfUkFORF9QU0VVRE9fQllURVMgICAgICAgICAgICAgICAgICAgIDE2NworKyMgZGVmaW5lIEZJ UFNfRl9GSVBTX1JBTkRfU0VFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjgKKysjIGRl ZmluZSBGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMTI2 CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAg ICAgIDEyNworKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JTQV9TSUdOX0RJR0VTVCAgICAgICAgICAg ICAgICAgICAgICAxNTYKKysjIGRlZmluZSBGSVBTX0ZfRklQU19SU0FfVkVSSUZZX0RJR0VTVCAg ICAgICAgICAgICAgICAgICAgMTU3CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVT ICAgICAgICAgICAgICAgICAgICAgICAgIDExMAorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZU RVNUX0FFU19DQ00gICAgICAgICAgICAgICAgICAgICAxNDUKKysjIGRlZmluZSBGSVBTX0ZfRklQ U19TRUxGVEVTVF9BRVNfR0NNICAgICAgICAgICAgICAgICAgICAgMTI5CisrIyBkZWZpbmUgRklQ U19GX0ZJUFNfU0VMRlRFU1RfQUVTX1hUUyAgICAgICAgICAgICAgICAgICAgIDE0NAorKyMgZGVm aW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0NNQUMgICAgICAgICAgICAgICAgICAgICAgICAxMzAK KysjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMgICAgICAgICAgICAgICAgICAgICAg ICAgMTExCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBICAgICAgICAgICAgICAg ICAgICAgICAgIDExMgorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0VDRFNBICAgICAg ICAgICAgICAgICAgICAgICAxMzMKKysjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFD ICAgICAgICAgICAgICAgICAgICAgICAgMTEzCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRF U1RfUk5HICAgICAgICAvKiB1bnVzZWQgKi8gICAgIDExNAorKyMgZGVmaW5lIEZJUFNfRl9GSVBT X1NFTEZURVNUX1NIQTEgICAgICAgICAgICAgICAgICAgICAgICAxMTUKKysjIGRlZmluZSBGSVBT X0ZfRklQU19TRUxGVEVTVF9YOTMxICAgICAgICAgICAgICAgICAgICAgICAgMTE0CisrIyBkZWZp bmUgRklQU19GX0ZJUFNfU0VUX1BSTkdfS0VZICAgICAgICAgICAgICAgICAgICAgICAgIDE1Mwor KyMgZGVmaW5lIEZJUFNfRl9IQVNIX0ZJTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxMjMKKysjIGRlZmluZSBGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOICAgICAgICAgICAgICAg ICAgICAgICAgMTE2CisrIyBkZWZpbmUgRklQU19GX1JTQV9FQVlfSU5JVCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDE0OQorKyMgZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVD UllQVCAgICAgICAgICAgICAgICAgICAxMTcKKysjIGRlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklW QVRFX0VOQ1JZUFQgICAgICAgICAgICAgICAgICAgMTE4CisrIyBkZWZpbmUgRklQU19GX1JTQV9F QVlfUFVCTElDX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgIDExOQorKyMgZGVmaW5lIEZJUFNf Rl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUICAgICAgICAgICAgICAgICAgICAxMjAKKysjIGRlZmlu ZSBGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYICAgICAgICAgICAgICAgICAgMTIxCisr IyBkZWZpbmUgRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTICAgICAgICAvKiB1bnVzZWQgKi8gICAg IDEyMgorKworKy8qIFJlYXNvbiBjb2Rlcy4gKi8KKysjIGRlZmluZSBGSVBTX1JfQURESVRJT05B TF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgMTUwCisrIyBkZWZpbmUgRklQU19SX0FE RElUSU9OQUxfSU5QVVRfVE9PX0xPTkcgICAgICAgICAgICAgICAgIDEyNQorKyMgZGVmaW5lIEZJ UFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRCAgICAgICAgICAgICAgICAgICAgICAxMzQKKysjIGRl ZmluZSBGSVBTX1JfQVVUSEVOVElDQVRJT05fRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgMTUx CisrIyBkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRSAgICAgICAgICAvKiB1bnVzZWQgKi8g ICAgIDEwMworKyMgZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNUICAgLyogdW51 c2VkICovICAgICAxMDQKKysjIGRlZmluZSBGSVBTX1JfQ09OVFJBRElDVElOR19FVklERU5DRSAg ICAgICAgICAgICAgICAgICAgMTE0CisrIyBkZWZpbmUgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJ U0VEICAgICAgICAgICAgICAgICAgICAgIDE1MgorKyMgZGVmaW5lIEZJUFNfUl9EUkJHX1NUVUNL ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDMKKysjIGRlZmluZSBGSVBTX1JfRU5U Uk9QWV9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgICAgICAgICAgMTA0CisrIyBkZWZpbmUgRklQ U19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEICAgICAgICAgIDEwNQorKyMgZGVm aW5lIEZJUFNfUl9FTlRST1BZX1NPVVJDRV9TVFVDSyAgICAgICAgICAgICAgICAgICAgICAxNDIK KysjIGRlZmluZSBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcgICAgICAgICAgICAgICAg ICAgMTE1CisrIyBkZWZpbmUgRklQU19SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRyAgICAgICAg ICAgICAgICAgIDEyNworKyMgZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElUSU9O QUxfSU5QVVQgICAgICAgICAxMjQKKysjIGRlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19F TlRST1BZICAgICAgICAgICAgICAgICAgMTIyCisrIyBkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJ RVZJTkdfTk9OQ0UgICAgICAgICAgICAgICAgICAgIDE0MAorKyMgZGVmaW5lIEZJUFNfUl9FWEVf RElHRVNUX0RPRVNfTk9UX01BVENIICAgLyogdW51c2VkICovICAxMDUKKysjIGRlZmluZSBGSVBT X1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0ggICAgICAgICAgICAgICAgMTEwCisrIyBkZWZp bmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTEx CisrIyBkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJ QVNJTkcgMTEyCisrIyBkZWZpbmUgRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCAgICAgICAg ICAgICAgICAgICAgIDEwMgorKyMgZGVmaW5lIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCAg ICAgICAgICAgICAgICAgICAgICAxMDYKKysjIGRlZmluZSBGSVBTX1JfRlVOQ1RJT05fRVJST1Ig ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE2CisrIyBkZWZpbmUgRklQU19SX0dFTkVSQVRF X0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNworKyMgZGVmaW5lIEZJUFNfUl9H RU5FUkFURV9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgICAgICAgICAxMTgKKysjIGRlZmluZSBG SVBTX1JfSU5TVEFOVElBVEVfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgMTE5CisrIyBk ZWZpbmUgRklQU19SX0lOU1VGRklDSUVOVF9TRUNVUklUWV9TVFJFTkdUSCAgICAgICAgICAgIDEy MAorKyMgZGVmaW5lIEZJUFNfUl9JTlRFUk5BTF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxMjEKKysjIGRlZmluZSBGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIICAgICAgICAgICAg ICAgICAgICAgICAgMTA5CisrIyBkZWZpbmUgRklQU19SX0lOVkFMSURfUEFSQU1FVEVSUyAgICAg ICAgICAgICAgICAgICAgICAgIDE0NAorKyMgZGVmaW5lIEZJUFNfUl9JTl9FUlJPUl9TVEFURSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxMjMKKysjIGRlZmluZSBGSVBTX1JfS0VZX1RPT19T SE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4CisrIyBkZWZpbmUgRklQU19SX05P TkNFX0VSUk9SX1VOREVURUNURUQgICAgICAgICAgICAgICAgICAgIDE0OQorKyMgZGVmaW5lIEZJ UFNfUl9OT05fRklQU19NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKKysjIGRl ZmluZSBGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgMTQ1 CisrIyBkZWZpbmUgRklQU19SX05PUFJfVEVTVDJfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAg ICAgIDE0NgorKyMgZGVmaW5lIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEICAgICAgICAgICAgICAg ICAgICAgICAgICAxMjYKKysjIGRlZmluZSBGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQgICAg ICAgICAgICAgICAgICAgICAgMTA3CisrIyBkZWZpbmUgRklQU19SX1BFUlNPTkFMSVNBVElPTl9F UlJPUl9VTkRFVEVDVEVEICAgICAgICAgIDEyOAorKyMgZGVmaW5lIEZJUFNfUl9QRVJTT05BTElT QVRJT05fU1RSSU5HX1RPT19MT05HICAgICAgICAgICAxMjkKKysjIGRlZmluZSBGSVBTX1JfUFJO R19TVFJFTkdUSF9UT09fTE9XICAgICAgICAgICAgICAgICAgICAgMTQzCisrIyBkZWZpbmUgRklQ U19SX1BSX1RFU1QxX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NworKyMgZGVm aW5lIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAxNDgK KysjIGRlZmluZSBGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCAgICAgICAg ICAgMTMwCisrIyBkZWZpbmUgRklQU19SX1JFUVVFU1RfVE9PX0xBUkdFX0ZPUl9EUkJHICAgICAg ICAgICAgICAgIDEzMQorKyMgZGVmaW5lIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUiAgICAg ICAgICAgICAgICAgICAgICAxMzIKKysjIGRlZmluZSBGSVBTX1JfUkVTRUVEX0VSUk9SICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTMzCisrIyBkZWZpbmUgRklQU19SX1JTQV9ERUNSWVBU X0VSUk9SICAgICAgICAvKiB1bnVzZWQgKi8gICAgIDExNQorKyMgZGVmaW5lIEZJUFNfUl9SU0Ff RU5DUllQVF9FUlJPUiAgICAgICAgLyogdW51c2VkICovICAgICAxMTYKKysjIGRlZmluZSBGSVBT X1JfU0VMRlRFU1RfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAxCisrIyBkZWZp bmUgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNQor KyMgZGVmaW5lIEZJUFNfUl9TVFJFTkdUSF9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgICAgICAg ICAxMzYKKysjIGRlZmluZSBGSVBTX1JfVEVTVF9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTE3CisrIyBkZWZpbmUgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IgICAgICAg ICAgICAgICAgICAgICAgIDE0MQorKyMgZGVmaW5lIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pFUk9J U0VfRVJST1IgICAgICAgICAgICAgICAxMzgKKysjIGRlZmluZSBGSVBTX1JfVU5TVVBQT1JURURf RFJCR19UWVBFICAgICAgICAgICAgICAgICAgICAgMTM5CisrIyBkZWZpbmUgRklQU19SX1VOU1VQ UE9SVEVEX1BMQVRGT1JNICAgICAgICAgICAgICAgICAgICAgIDExMworKworKyMgaWZkZWYgIF9f Y3BsdXNwbHVzCisrfQorKyMgZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v Zmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY2NTYy NjIyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0 ZXN0LmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NjY1NjI2MjIgKzAxMDAKK0BAIC0wLDAgKzEsMTM0 IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wg UHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor KyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlz dHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5 IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK KysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJv amVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAor KyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAq ICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9y IHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoK KysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFp biB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3Ns Lm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNT TCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FS UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3Bl blNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1Mg T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICog SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO IENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklM SVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4K KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrdHlwZWRlZiBzdHJ1Y3QgeworKyAgICBjb25zdCBF VlBfTUQgKigqYWxnKSAodm9pZCk7CisrICAgIGNvbnN0IGNoYXIgKmtleSwgKml2OworKyAgICB1 bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV07CisrfSBITUFDX0tBVDsKKysKKytz dGF0aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7CisrICAgIHtFVlBfc2hhMSwKKysgICAg IC8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5OC9m aXBzLTE5OGEucGRmICovCisrICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKyAgICAgIlNh bXBsZSAjMiIsCisrICAgICB7MHgwOSwgMHgyMiwgMHhkMywgMHg0MCwgMHg1ZiwgMHhhYSwgMHgz ZCwgMHgxOSwKKysgICAgICAweDRmLCAweDgyLCAweGE0LCAweDU4LCAweDMwLCAweDczLCAweDdk LCAweDVjLAorKyAgICAgIDB4YzYsIDB4YzcsIDB4NWQsIDB4MjR9CisrICAgICB9LAorKyAgICB7 RVZQX3NoYTIyNCwKKysgICAgIC8qIGp1c3Qga2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4uICov CisrICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKyAgICAgIlNhbXBsZSAjMiIsCisrICAg ICB7MHhkZCwgMHhlZiwgMHgwYSwgMHg0MCwgMHhjYiwgMHg3ZCwgMHg1MCwgMHhmYiwKKysgICAg ICAweDZlLCAweGU2LCAweGNlLCAweGExLCAweDIwLCAweGJhLCAweDI2LCAweGFhLAorKyAgICAg IDB4MDgsIDB4ZjMsIDB4MDcsIDB4NzUsIDB4ODcsIDB4YjgsIDB4YWQsIDB4MWIsCisrICAgICAg MHg4YywgMHg4ZCwgMHgxMiwgMHhjN30KKysgICAgIH0sCisrICAgIHtFVlBfc2hhMjU2LAorKyAg ICAgIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysgICAgICJTYW1wbGUgIzIiLAorKyAgICAgezB4 YjgsIDB4ZjIsIDB4MGQsIDB4YjUsIDB4NDEsIDB4ZWEsIDB4NDMsIDB4MDksCisrICAgICAgMHhj YSwgMHg0ZSwgMHhhOSwgMHgzOCwgMHgwYywgMHhkMCwgMHhlOCwgMHgzNCwKKysgICAgICAweGY3 LCAweDFmLCAweGJlLCAweDkxLCAweDc0LCAweGEyLCAweDYxLCAweDM4LAorKyAgICAgIDB4MGQs IDB4YzEsIDB4N2UsIDB4YWUsIDB4NmEsIDB4MzQsIDB4NTEsIDB4ZDl9CisrICAgICB9LAorKyAg ICB7RVZQX3NoYTM4NCwKKysgICAgICIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrICAgICAiU2Ft cGxlICMyIiwKKysgICAgIHsweDA4LCAweGJjLCAweGIwLCAweGRhLCAweDQ5LCAweDFlLCAweDg3 LCAweGFkLAorKyAgICAgIDB4OWEsIDB4MWQsIDB4NmEsIDB4Y2UsIDB4MjMsIDB4YzUsIDB4MGIs IDB4ZjYsCisrICAgICAgMHhiNywgMHgxOCwgMHgwNiwgMHhhNSwgMHg3NywgMHhjZCwgMHg0OSwg MHgwNCwKKysgICAgICAweDg5LCAweGYxLCAweGU2LCAweDIzLCAweDQ0LCAweDUxLCAweDUxLCAw eDlmLAorKyAgICAgIDB4ODUsIDB4NTYsIDB4ODAsIDB4NzksIDB4MGMsIDB4YmQsIDB4NGQsIDB4 NTAsCisrICAgICAgMHhhNCwgMHg1ZiwgMHgyOSwgMHhlMywgMHg5MywgMHhmMCwgMHhlOCwgMHg3 Zn0KKysgICAgIH0sCisrICAgIHtFVlBfc2hhNTEyLAorKyAgICAgIjAxMjM0NTY3ODk6Ozw9Pj9A QUJDIiwKKysgICAgICJTYW1wbGUgIzIiLAorKyAgICAgezB4ODAsIDB4OWQsIDB4NDQsIDB4MDUs IDB4N2MsIDB4NWIsIDB4OTUsIDB4NDEsCisrICAgICAgMHgwNSwgMHhiZCwgMHgwNCwgMHgxMywg MHgxNiwgMHhkYiwgMHgwZiwgMHhhYywKKysgICAgICAweDQ0LCAweGQ1LCAweGE0LCAweGQ1LCAw eGQwLCAweDg5LCAweDJiLCAweGQwLAorKyAgICAgIDB4NGUsIDB4ODYsIDB4NjQsIDB4MTIsIDB4 YzAsIDB4OTAsIDB4NzcsIDB4NjgsCisrICAgICAgMHhmMSwgMHg4NywgMHhiNywgMHg3YywgMHg0 ZiwgMHhhZSwgMHgyYywgMHgyZiwKKysgICAgICAweDIxLCAweGE1LCAweGI1LCAweDY1LCAweDlh LCAweDRmLCAweDRiLCAweGE3LAorKyAgICAgIDB4NDcsIDB4MDIsIDB4YTMsIDB4ZGUsIDB4OWIs IDB4NTEsIDB4ZjEsIDB4NDUsCisrICAgICAgMHhiZCwgMHg0ZiwgMHgyNSwgMHgyNywgMHg0Miwg MHg5OCwgMHg5OSwgMHgwNX0KKysgICAgIH0sCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9o bWFjKCkKKyt7CisrICAgIGludCBuOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKyAgICB1 bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICBjb25zdCBFVlBfTUQgKm1k OworKyAgICBjb25zdCBITUFDX0tBVCAqdDsKKysKKysgICAgZm9yIChuID0gMCwgdCA9IHZlY3Rv cjsgbiA8IHNpemVvZih2ZWN0b3IpIC8gc2l6ZW9mKHZlY3RvclswXSk7IG4rKywgdCsrKSB7Cisr ICAgICAgICBtZCA9ICgqdC0+YWxnKSAoKTsKKysgICAgICAgIEhNQUMobWQsIHQtPmtleSwgc3Ry bGVuKHQtPmtleSksCisrICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+aXYs IHN0cmxlbih0LT5pdiksIG91dCwgJm91dGxlbik7CisrCisrICAgICAgICBpZiAobWVtY21wKG91 dCwgdC0+a2F2YWwsIG91dGxlbikpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X1NFTEZURVNUX0hNQUMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgICAgIHJl dHVybiAwOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysjZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMgb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4yZS9j cnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY2NTYyNjIy ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgJMjAxNS0x Mi0wNCAxMzo1NTo1MS45NjY1NjI2MjIgKzAxMDAKK0BAIC0wLDAgKzEsNzEgQEAKKysvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs IHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwg YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAq IGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisr ICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJl IGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUg T3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4g VGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5v dCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNz bC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICoKKysgKi8KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrIyBpZmRlZiAg X19jcGx1c3BsdXMKKytleHRlcm4gIkMiIHsKKysjIGVuZGlmCisrCisrIyBkZWZpbmUgRklQU19N QVhfQ0lQSEVSX1RFU1RfU0laRSAgICAgICAzMgorKyMgZGVmaW5lIGZpcHNfbG9hZF9rZXlfY29t cG9uZW50KGtleSwgY29tcCwgcHJlKSBcCisrICAgICAgICBrZXktPmNvbXAgPSBCTl9iaW4yYm4o cHJlIyNfIyNjb21wLCBzaXplb2YocHJlIyNfIyNjb21wKSwga2V5LT5jb21wKTsgXAorKyAgICAg ICAgaWYgKCFrZXktPmNvbXApIFwKKysgICAgICAgICAgICAgICAgZ290byBlcnIKKysKKysjIGRl ZmluZSBmaXBzX3Bvc3Rfc3RhcnRlZChpZCwgc3ViaWQsIGV4KSAxCisrIyBkZWZpbmUgZmlwc19w b3N0X3N1Y2Nlc3MoaWQsIHN1YmlkLCBleCkgMQorKyMgZGVmaW5lIGZpcHNfcG9zdF9mYWlsZWQo aWQsIHN1YmlkLCBleCkgMQorKyMgZGVmaW5lIGZpcHNfcG9zdF9jb3JydXB0KGlkLCBzdWJpZCwg ZXgpIDEKKysjIGRlZmluZSBmaXBzX3Bvc3Rfc3RhdHVzKCkgMQorKworKyMgaWZkZWYgIF9fY3Bs dXNwbHVzCisrfQorKyMgZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9maXBzL2ZpcHNfbWQuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNf bWQuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzCTIwMTUt MTItMDQgMTM6NTU6NTEuOTY2NTYyNjIyICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRv L2ZpcHMvZmlwc19tZC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY2NTYyNjIyICswMTAwCitAQCAt MCwwICsxLDE0NCBAQAorKy8qIGZpcHMvZXZwL2ZpcHNfbWQuYyAqLworKy8qIENvcHlyaWdodCAo QykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0 aW9uIHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICog VGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRz Y2FwZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFs IGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFw cGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0 LCBSU0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2Rl LiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1 dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0 aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAor KyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHly aWdodCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAq IElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQg YmUgZ2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0 aGUgbGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVh bCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9u bGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K KysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFw aGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29m dC5jb20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQg aWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5v dCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBX aW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAq ICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVk ZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAor KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKKysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICog T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFu ZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9u IG9yCisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUu IHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5v dGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMg TGljZW5jZS5dCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDE5OTgt MjAwMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK KysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisr ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoK KysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisr ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNv ZnQuY29tKS4KKysgKgorKyAqLworKworKy8qIE1pbmltYWwgc3RhbmRhbG9uZSBGSVBTIHZlcnNp b25zIG9mIERpZ2VzdCBvcGVyYXRpb25zICovCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkK KysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvb2JqZWN0cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKytjb25zdCBF VlBfTUQgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpCisreworKyAgICBzd2l0Y2ggKG5p ZCkgeworKyAgICBjYXNlIE5JRF9zaGExOgorKyAgICAgICAgcmV0dXJuIEVWUF9zaGExKCk7Cisr CisrICAgIGNhc2UgTklEX3NoYTIyNDoKKysgICAgICAgIHJldHVybiBFVlBfc2hhMjI0KCk7Cisr CisrICAgIGNhc2UgTklEX3NoYTI1NjoKKysgICAgICAgIHJldHVybiBFVlBfc2hhMjU2KCk7Cisr CisrICAgIGNhc2UgTklEX3NoYTM4NDoKKysgICAgICAgIHJldHVybiBFVlBfc2hhMzg0KCk7Cisr CisrICAgIGNhc2UgTklEX3NoYTUxMjoKKysgICAgICAgIHJldHVybiBFVlBfc2hhNTEyKCk7Cisr CisrICAgIGRlZmF1bHQ6CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorK30KK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMgb3BlbnNzbC0x LjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v Zmlwcy9maXBzX3Bvc3QuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY2NTYyNjIyICswMTAw CisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMJMjAxNS0xMi0wNCAx Mzo1NTo1MS45NjY1NjI2MjIgKzAxMDAKK0BAIC0wLDAgKzEsMjAxIEBACisrLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUg bWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29y ZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisr ICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisr ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKyAqCisrICovCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxz dHJpbmcuaD4KKysjaW5jbHVkZSA8bGltaXRzLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KworKy8qIFBvd2VyIG9uIHNlbGYgdGVzdCAoUE9TVCkgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKysK KysjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyMgaW5jbHVkZSAiZmlwc19sb2NsLmgiCisr CisrLyogUnVuIGFsbCBzZWxmdGVzdHMgKi8KKytpbnQgRklQU19zZWxmdGVzdCh2b2lkKQorK3sK KysgICAgaW50IHJ2ID0gMTsKKysgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2RyYmcoKSkKKysgICAg ICAgIHJ2ID0gMDsKKysgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X3g5MzEoKSkKKysgICAgICAgIHJ2 ID0gMDsKKysgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X3NoYTEoKSkKKysgICAgICAgIHJ2ID0gMDsK KysgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X3NoYTIoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAg aWYgKCFGSVBTX3NlbGZ0ZXN0X2htYWMoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYgKCFG SVBTX3NlbGZ0ZXN0X2NtYWMoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYgKCFGSVBTX3Nl bGZ0ZXN0X2FlcygpKQorKyAgICAgICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3Rf YWVzX2NjbSgpKQorKyAgICAgICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfYWVz X2djbSgpKQorKyAgICAgICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX3h0 cygpKQorKyAgICAgICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfZGVzKCkpCisr ICAgICAgICBydiA9IDA7CisrICAgIGlmICghRklQU19zZWxmdGVzdF9yc2EoKSkKKysgICAgICAg IHJ2ID0gMDsKKysgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2RzYSgpKQorKyAgICAgICAgcnYgPSAw OworKyAgICByZXR1cm4gcnY7CisrfQorKworKy8qIEdlbmVyYWxpemVkIHB1YmxpYyBrZXkgdGVz dCByb3V0aW5lLiBTaWducyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKKysgKiBzdXBwbGllZCBpbiB0 YnMgdXNpbmcgbWVzYWdlIGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24gZGlnZXN0CisrICog ZmxhZ3MgbWRfZmxhZ3MuIElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQgd2ls bAorKyAqIGFkZGl0aW9uYWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEga25v d24gYW5zd2VyIHRlc3QKKysgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMgdXNlZCBmb3IgaWRl bnRpZmljYXRpb24gcHVycG9zZXMgaW4gY2FzZQorKyAqIG9mIGZhaWx1cmUuIElmICJwa2V5IiBp cyBOVUxMIGp1c3QgcGVyZm9ybSBhIG1lc3NhZ2UgZGlnZXN0IGNoZWNrLgorKyAqLworKworK2lu dCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVu c2lnbmVkIGludCBrYXRsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBF VlBfTUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqZmFpbF9zdHIpCisreworKyAgICBpbnQgcmV0ID0gMDsK KysgICAgdW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNpZ3RtcDsKKysgICAgdW5z aWduZWQgaW50IHNpZ2xlbjsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBFVlBfTURfQ1RY X2luaXQoJm1jdHgpOworKworKyAgICBpZiAoZGlnZXN0ID09IE5VTEwpCisrICAgICAgICBkaWdl c3QgPSBFVlBfc2hhMjU2KCk7CisrCisrICAgIGlmICgocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9S U0EpCisrICAgICAgICAmJiAoUlNBX3NpemUocGtleS0+cGtleS5yc2EpID4gc2l6ZW9mKHNpZ3Rt cCkpKSB7CisrICAgICAgICBzaWcgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShwa2V5LT5wa2V5 LnJzYSkpOworKyAgICAgICAgaWYgKCFzaWcpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKysgICAg ICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAodGJzbGVu ID09IC0xKQorKyAgICAgICAgdGJzbGVuID0gc3RybGVuKChjaGFyICopdGJzKTsKKysKKysgICAg aWYgKG1kX2ZsYWdzKQorKyAgICAgICAgRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1jdHgsIG1kX2Zs YWdzKTsKKysKKysgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkp CisrICAgICAgICBnb3RvIGVycm9yOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCB0 YnMsIHRic2xlbikpCisrICAgICAgICBnb3RvIGVycm9yOworKyAgICBpZiAoIUVWUF9TaWduRmlu YWwoJm1jdHgsIHNpZywgJnNpZ2xlbiwgcGtleSkpCisrICAgICAgICBnb3RvIGVycm9yOworKwor KyAgICBpZiAoa2F0ICYmICgoc2lnbGVuICE9IGthdGxlbikgfHwgbWVtY21wKGthdCwgc2lnLCBr YXRsZW4pKSkKKysgICAgICAgIGdvdG8gZXJyb3I7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUlu aXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCisrICAgICAgICBnb3RvIGVycm9yOworKyAgICBp ZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKKysgICAgICAgIGdvdG8g ZXJyb3I7CisrICAgIHJldCA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnLCBzaWdsZW4sIHBr ZXkpOworKworKyBlcnJvcjoKKysgICAgaWYgKHNpZyAhPSBzaWd0bXApCisrICAgICAgICBPUEVO U1NMX2ZyZWUoc2lnKTsKKysgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysgICAgaWYg KHJldCAhPSAxKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJF X1RFU1QsIEZJUFNfUl9URVNUX0ZBSUxVUkUpOworKyAgICAgICAgaWYgKGZhaWxfc3RyKQorKyAg ICAgICAgICAgIEVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlwZT0iLCBmYWlsX3N0cik7CisrICAg ICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogR2VuZXJh bGl6ZWQgc3ltbWV0cmljIGNpcGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5cHQgZGF0YSwgdmVyaWZ5 IHJlc3VsdAorKyAqIGFnYWluc3Qga25vd24gYW5zd2VyLCBkZWNyeXB0IGFuZCBjb21wYXJlIHdp dGggb3JpZ2luYWwgcGxhaW50ZXh0LgorKyAqLworKworK2ludCBmaXBzX2NpcGhlcl90ZXN0KEVW UF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwKKysgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisrICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsIGludCBsZW4pCisreworKyAgICB1bnNpZ25lZCBjaGFy IHBsdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOworKyAgICB1bnNpZ25lZCBjaGFyIGNp dG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOworKworKyAgICBPUEVOU1NMX2Fzc2VydChs ZW4gPD0gRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7CisrICAgIG1lbXNldChwbHRtcCwgMCwg RklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7CisrICAgIG1lbXNldChjaXRtcCwgMCwgRklQU19N QVhfQ0lQSEVSX1RFU1RfU0laRSk7CisrCisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgs IGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMSkgPD0gMCkKKysgICAgICAgIHJldHVybiAwOworKyAg ICBpZiAoRVZQX0NpcGhlcihjdHgsIGNpdG1wLCBwbGFpbnRleHQsIGxlbikgPD0gMCkKKysgICAg ICAgIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0ZXh0LCBsZW4pKQor KyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhl ciwgTlVMTCwga2V5LCBpdiwgMCkgPD0gMCkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAo RVZQX0NpcGhlcihjdHgsIHBsdG1wLCBjaXRtcCwgbGVuKSA8PSAwKQorKyAgICAgICAgcmV0dXJu IDA7CisrICAgIGlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgbGVuKSkKKysgICAgICAgIHJl dHVybiAwOworKyAgICByZXR1cm4gMTsKKyt9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9m aXBzL2ZpcHNfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19yYW5k LmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NzU2MjY0NSArMDEwMAorKysrIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY3NTYy NjQ1ICswMTAwCitAQCAtMCwwICsxLDQyOCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJp Z2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor KyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu CisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLwor KworKy8qCisrICogVGhpcyBpcyBhIEZJUFMgYXBwcm92ZWQgQUVTIFBSTkcgYmFzZWQgb24gQU5T SSBYOS4zMSBBLjIuNC4KKysgKi8KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5j bHVkZSAiZV9vcy5oIgorKworKy8qIElmIHdlIGRvbid0IGRlZmluZSBfWE9QRU5fU09VUkNFX0VY VEVOREVELCBzdHJ1Y3QgdGltZXZhbCB3b24ndAorKyAgIGJlIGRlZmluZWQgYW5kIGdldHRpbWVv ZmRheSgpIHdvbid0IGJlIGRlY2xhcmVkIHdpdGggc3RyaWN0IGNvbXBpbGVycworKyAgIGxpa2Ug REVDIEMgaW4gQU5TSSBDIG1vZGUuICAqLworKyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRF RAorKyMgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorKyNlbmRpZgorKworKyNpbmNs dWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaWYg IShkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09S S1MpKQorKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZChPUEVO U1NMX1NZU19WWFdPUktTKQorKyMgaW5jbHVkZSA8dGltZS5oPgorKyNlbmRpZgorKyNpbmNsdWRl IDxhc3NlcnQuaD4KKysjaWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrIyBpZmRlZiBPUEVOU1NM X1VOSVNURAorKyMgIGluY2x1ZGUgT1BFTlNTTF9VTklTVEQKKysjIGVsc2UKKysjICBpbmNsdWRl IDx1bmlzdGQuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKworK3ZvaWQgKk9QRU5TU0xfc3RkZXJyKHZvaWQpOworKworKyMg ZGVmaW5lIEFFU19CTE9DS19MRU5HVEggICAgICAgIDE2CisrCisrLyogQUVTIEZJUFMgUFJORyBp bXBsZW1lbnRhdGlvbiAqLworKworK3R5cGVkZWYgc3RydWN0IHsKKysgICAgaW50IHNlZWRlZDsK KysgICAgaW50IGtleWVkOworKyAgICBpbnQgdGVzdF9tb2RlOworKyAgICBpbnQgc2Vjb25kOwor KyAgICBpbnQgZXJyb3I7CisrICAgIHVuc2lnbmVkIGxvbmcgY291bnRlcjsKKysgICAgQUVTX0tF WSBrczsKKysgICAgaW50IHZwb3M7CisrICAgIC8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBrZXkg aWYgaXQgZXF1YWxzIHNlZWQgbGVuZ3RoICovCisrICAgIHVuc2lnbmVkIGNoYXIgdG1wX2tleVtB RVNfQkxPQ0tfTEVOR1RIXTsKKysgICAgdW5zaWduZWQgY2hhciBWW0FFU19CTE9DS19MRU5HVEhd OworKyAgICB1bnNpZ25lZCBjaGFyIERUW0FFU19CTE9DS19MRU5HVEhdOworKyAgICB1bnNpZ25l ZCBjaGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07CisrfSBGSVBTX1BSTkdfQ1RYOworKworK3N0 YXRpYyBGSVBTX1BSTkdfQ1RYIHNjdHg7CisrCisrc3RhdGljIGludCBmaXBzX3BybmdfZmFpbCA9 IDA7CisrCisrdm9pZCBGSVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKQorK3sKKysgICAgZmlwc19w cm5nX2ZhaWwgPSBvbm9mZjsKKyt9CisrCisrdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQorK3sK KysgICAgRklQU194OTMxX3N0aWNrKDEpOworK30KKysKKytzdGF0aWMgdm9pZCBmaXBzX3JhbmRf cHJuZ19yZXNldChGSVBTX1BSTkdfQ1RYICogY3R4KQorK3sKKysgICAgY3R4LT5zZWVkZWQgPSAw OworKyAgICBjdHgtPmtleWVkID0gMDsKKysgICAgY3R4LT50ZXN0X21vZGUgPSAwOworKyAgICBj dHgtPmNvdW50ZXIgPSAwOworKyAgICBjdHgtPnNlY29uZCA9IDA7CisrICAgIGN0eC0+ZXJyb3Ig PSAwOworKyAgICBjdHgtPnZwb3MgPSAwOworKyAgICBPUEVOU1NMX2NsZWFuc2UoY3R4LT5WLCBB RVNfQkxPQ0tfTEVOR1RIKTsKKysgICAgT1BFTlNTTF9jbGVhbnNlKCZjdHgtPmtzLCBzaXplb2Yo QUVTX0tFWSkpOworK30KKysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfa2V5KEZJUFNfUFJO R19DVFggKiBjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCisreworKyAgICBpZiAoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRVRfUFJOR19L RVksIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0K KysgICAgaWYgKGtleWxlbiAhPSAxNiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKSB7 CisrICAgICAgICAvKiBlcnJvcjogaW52YWxpZCBrZXkgc2l6ZSAqLworKyAgICAgICAgcmV0dXJu IDA7CisrICAgIH0KKysgICAgQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAzLCAm Y3R4LT5rcyk7CisrICAgIGlmIChrZXlsZW4gPT0gMTYpIHsKKysgICAgICAgIG1lbWNweShjdHgt PnRtcF9rZXksIGtleSwgMTYpOworKyAgICAgICAgY3R4LT5rZXllZCA9IDI7CisrICAgIH0gZWxz ZQorKyAgICAgICAgY3R4LT5rZXllZCA9IDE7CisrICAgIGN0eC0+c2VlZGVkID0gMDsKKysgICAg Y3R4LT5zZWNvbmQgPSAwOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludCBmaXBz X3NldF9wcm5nX3NlZWQoRklQU19QUk5HX0NUWCAqIGN0eCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkLCB1bnNpZ25lZCBpbnQgc2VlZGxl bikKKyt7CisrICAgIHVuc2lnbmVkIGludCBpOworKyAgICBpZiAoIWN0eC0+a2V5ZWQpCisrICAg ICAgICByZXR1cm4gMDsKKysgICAgLyogSW4gdGVzdCBtb2RlIHNlZWQgaXMganVzdCBzdXBwbGll ZCBkYXRhICovCisrICAgIGlmIChjdHgtPnRlc3RfbW9kZSkgeworKyAgICAgICAgaWYgKHNlZWRs ZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAg IG1lbWNweShjdHgtPlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOworKyAgICAgICAgY3R4LT5z ZWVkZWQgPSAxOworKyAgICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysgICAgLyogT3V0c2lkZSB0 ZXN0IG1vZGUgWE9SIHN1cHBsaWVkIGRhdGEgd2l0aCBleGlzdGluZyBzZWVkICovCisrICAgIGZv ciAoaSA9IDA7IGkgPCBzZWVkbGVuOyBpKyspIHsKKysgICAgICAgIGN0eC0+VltjdHgtPnZwb3Mr K10gXj0gc2VlZFtpXTsKKysgICAgICAgIGlmIChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdU SCkgeworKyAgICAgICAgICAgIGN0eC0+dnBvcyA9IDA7CisrICAgICAgICAgICAgLyogU3BlY2lh bCBjYXNlIGlmIGZpcnN0IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxzCisrICAgICAgICAgICAg ICogYmxvY2sgc2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQgZG8gbm90IG1hdGNoLgorKyAgICAgICAg ICAgICAqLworKyAgICAgICAgICAgIGlmIChjdHgtPmtleWVkID09IDIpIHsKKysgICAgICAgICAg ICAgICAgaWYgKCFtZW1jbXAoY3R4LT50bXBfa2V5LCBjdHgtPlYsIDE2KSkgeworKyAgICAgICAg ICAgICAgICAgICAgUkFORGVycihSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSk7 CisrICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICAgICAgfQorKyAg ICAgICAgICAgICAgICBPUEVOU1NMX2NsZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7CisrICAgICAg ICAgICAgICAgIGN0eC0+a2V5ZWQgPSAxOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBj dHgtPnNlZWRlZCA9IDE7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIDE7CisrfQor KworK3N0YXRpYyBpbnQgZmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKiBjdHgpCisr eworKyAgICBpZiAoY3R4LT5rZXllZCkgeworKyAgICAgICAgUkFORGVycihSQU5EX0ZfRklQU19T RVRfVEVTVF9NT0RFLCBSQU5EX1JfUFJOR19LRVlFRCk7CisrICAgICAgICByZXR1cm4gMDsKKysg ICAgfQorKyAgICBjdHgtPnRlc3RfbW9kZSA9IDE7CisrICAgIHJldHVybiAxOworK30KKysKKytp bnQgRklQU194OTMxX3Rlc3RfbW9kZSh2b2lkKQorK3sKKysgICAgcmV0dXJuIGZpcHNfc2V0X3Rl c3RfbW9kZSgmc2N0eCk7CisrfQorKworK2ludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpCisr eworKyAgICByZXR1cm4gZmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKKyt9CisrCisraW50IEZJ UFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCisreworKyAgICBpZiAoIXNjdHgudGVz dF9tb2RlKSB7CisrICAgICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1g5MzFfU0VUX0RULCBSQU5E X1JfTk9UX0lOX1RFU1RfTU9ERSk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICBt ZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOworKyAgICByZXR1cm4gMTsKKyt9 CisrCisraW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCisreworKyAgICBp ZiAoIXNjdHgudGVzdF9tb2RlKSB7CisrICAgICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkRf U0VUX0RULCBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7CisrICAgICAgICByZXR1cm4gMDsKKysg ICAgfQorKyAgICBtZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOworKyAgICBy ZXR1cm4gMTsKKyt9CisrCisrdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1 ZiwgdW5zaWduZWQgbG9uZyAqcGN0cikKKyt7CisrIyBpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgor KyAgICBGSUxFVElNRSBmdDsKKysjIGVsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQor KyAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisrIyBlbHNlCisrICAgIHN0cnVjdCB0aW1ldmFsIHR2 OworKyMgZW5kaWYKKysKKysjIGlmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKKysgICAgdW5z aWduZWQgbG9uZyBwaWQ7CisrIyBlbmRpZgorKworKyMgaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIK KysgICAgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsKKysgICAgYnVmWzBdID0gKHVuc2ln bmVkIGNoYXIpKGZ0LmR3SGlnaERhdGVUaW1lICYgMHhmZik7CisrICAgIGJ1ZlsxXSA9ICh1bnNp Z25lZCBjaGFyKSgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzJd ID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAxNikgJiAweGZmKTsKKysg ICAgYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkgJiAw eGZmKTsKKysgICAgYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpKGZ0LmR3TG93RGF0ZVRpbWUgJiAw eGZmKTsKKysgICAgYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0xvd0RhdGVUaW1lID4+ IDgpICYgMHhmZik7CisrICAgIGJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSgoZnQuZHdMb3dEYXRl VGltZSA+PiAxNikgJiAweGZmKTsKKysgICAgYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpKChmdC5k d0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOworKyMgZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lT X1ZYV09SS1MpCisrICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cyk7CisrICAg IGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSh0cy50dl9zZWMgJiAweGZmKTsKKysgICAgYnVmWzFd ID0gKHVuc2lnbmVkIGNoYXIpKCh0cy50dl9zZWMgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzJd ID0gKHVuc2lnbmVkIGNoYXIpKCh0cy50dl9zZWMgPj4gMTYpICYgMHhmZik7CisrICAgIGJ1Zlsz XSA9ICh1bnNpZ25lZCBjaGFyKSgodHMudHZfc2VjID4+IDI0KSAmIDB4ZmYpOworKyAgICBidWZb NF0gPSAodW5zaWduZWQgY2hhcikodHMudHZfbnNlYyAmIDB4ZmYpOworKyAgICBidWZbNV0gPSAo dW5zaWduZWQgY2hhcikoKHRzLnR2X25zZWMgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzZdID0g KHVuc2lnbmVkIGNoYXIpKCh0cy50dl9uc2VjID4+IDE2KSAmIDB4ZmYpOworKyAgICBidWZbN10g PSAodW5zaWduZWQgY2hhcikoKHRzLnR2X25zZWMgPj4gMjQpICYgMHhmZik7CisrIyBlbHNlCisr ICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworKyAgICBidWZbMF0gPSAodW5zaWduZWQgY2hh cikodHYudHZfc2VjICYgMHhmZik7CisrICAgIGJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSgodHYu dHZfc2VjID4+IDgpICYgMHhmZik7CisrICAgIGJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSgodHYu dHZfc2VjID4+IDE2KSAmIDB4ZmYpOworKyAgICBidWZbM10gPSAodW5zaWduZWQgY2hhcikoKHR2 LnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKKysgICAgYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpKHR2 LnR2X3VzZWMgJiAweGZmKTsKKysgICAgYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpKCh0di50dl91 c2VjID4+IDgpICYgMHhmZik7CisrICAgIGJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSgodHYudHZf dXNlYyA+PiAxNikgJiAweGZmKTsKKysgICAgYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpKCh0di50 dl91c2VjID4+IDI0KSAmIDB4ZmYpOworKyMgZW5kaWYKKysgICAgYnVmWzhdID0gKHVuc2lnbmVk IGNoYXIpKCpwY3RyICYgMHhmZik7CisrICAgIGJ1Zls5XSA9ICh1bnNpZ25lZCBjaGFyKSgoKnBj dHIgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzEwXSA9ICh1bnNpZ25lZCBjaGFyKSgoKnBjdHIg Pj4gMTYpICYgMHhmZik7CisrICAgIGJ1ZlsxMV0gPSAodW5zaWduZWQgY2hhcikoKCpwY3RyID4+ IDI0KSAmIDB4ZmYpOworKworKyAgICAoKnBjdHIpKys7CisrCisrIyBpZm5kZWYgR0VUUElEX0lT X01FQU5JTkdMRVNTCisrICAgIHBpZCA9ICh1bnNpZ25lZCBsb25nKWdldHBpZCgpOworKyAgICBi dWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpKHBpZCAmIDB4ZmYpOworKyAgICBidWZbMTNdID0gKHVu c2lnbmVkIGNoYXIpKChwaWQgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzE0XSA9ICh1bnNpZ25l ZCBjaGFyKSgocGlkID4+IDE2KSAmIDB4ZmYpOworKyAgICBidWZbMTVdID0gKHVuc2lnbmVkIGNo YXIpKChwaWQgPj4gMjQpICYgMHhmZik7CisrIyBlbmRpZgorK30KKysKKytzdGF0aWMgaW50IGZp cHNfcmFuZChGSVBTX1BSTkdfQ1RYICogY3R4LAorKyAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKm91dCwgdW5zaWduZWQgaW50IG91dGxlbikKKyt7CisrICAgIHVuc2lnbmVkIGNo YXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RIXTsKKysgICAgdW5zaWdu ZWQgY2hhciB0bXBbQUVTX0JMT0NLX0xFTkdUSF07CisrICAgIGludCBpOworKyAgICBpZiAoY3R4 LT5lcnJvcikgeworKyAgICAgICAgUkFORGVycihSQU5EX0ZfRklQU19SQU5ELCBSQU5EX1JfUFJO R19FUlJPUik7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICBpZiAoIWN0eC0+a2V5 ZWQpIHsKKysgICAgICAgIFJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCwgUkFORF9SX05PX0tFWV9T RVQpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgaWYgKCFjdHgtPnNlZWRlZCkg eworKyAgICAgICAgUkFORGVycihSQU5EX0ZfRklQU19SQU5ELCBSQU5EX1JfUFJOR19OT1RfU0VF REVEKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIGZvciAoOzspIHsKKysgICAg ICAgIGlmICghY3R4LT50ZXN0X21vZGUpCisrICAgICAgICAgICAgRklQU19nZXRfdGltZXZlYyhj dHgtPkRULCAmY3R4LT5jb3VudGVyKTsKKysgICAgICAgIEFFU19lbmNyeXB0KGN0eC0+RFQsIEks ICZjdHgtPmtzKTsKKysgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBp KyspCisrICAgICAgICAgICAgdG1wW2ldID0gSVtpXSBeIGN0eC0+VltpXTsKKysgICAgICAgIEFF U19lbmNyeXB0KHRtcCwgUiwgJmN0eC0+a3MpOworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEFF U19CTE9DS19MRU5HVEg7IGkrKykKKysgICAgICAgICAgICB0bXBbaV0gPSBSW2ldIF4gSVtpXTsK KysgICAgICAgIEFFU19lbmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7CisrICAgICAgICAv KiBDb250aW51b3VzIFBSTkcgdGVzdCAqLworKyAgICAgICAgaWYgKGN0eC0+c2Vjb25kKSB7Cisr ICAgICAgICAgICAgaWYgKGZpcHNfcHJuZ19mYWlsKQorKyAgICAgICAgICAgICAgICBtZW1jcHko Y3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysgICAgICAgICAgICBpZiAoIW1lbWNt cChSLCBjdHgtPmxhc3QsIEFFU19CTE9DS19MRU5HVEgpKSB7CisrICAgICAgICAgICAgICAgIFJB TkRlcnIoUkFORF9GX0ZJUFNfUkFORCwgUkFORF9SX1BSTkdfU1RVQ0spOworKyAgICAgICAgICAg ICAgICBjdHgtPmVycm9yID0gMTsKKysgICAgICAgICAgICAgICAgZmlwc19zZXRfc2VsZnRlc3Rf ZmFpbCgpOworKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICB9CisrICAg ICAgICB9CisrICAgICAgICBtZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsK KysgICAgICAgIGlmICghY3R4LT5zZWNvbmQpIHsKKysgICAgICAgICAgICBjdHgtPnNlY29uZCA9 IDE7CisrICAgICAgICAgICAgaWYgKCFjdHgtPnRlc3RfbW9kZSkKKysgICAgICAgICAgICAgICAg Y29udGludWU7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAob3V0bGVuIDw9IEFFU19CTE9D S19MRU5HVEgpIHsKKysgICAgICAgICAgICBtZW1jcHkob3V0LCBSLCBvdXRsZW4pOworKyAgICAg ICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKworKyAgICAgICAgbWVtY3B5KG91dCwgUiwgQUVT X0JMT0NLX0xFTkdUSCk7CisrICAgICAgICBvdXQgKz0gQUVTX0JMT0NLX0xFTkdUSDsKKysgICAg ICAgIG91dGxlbiAtPSBBRVNfQkxPQ0tfTEVOR1RIOworKyAgICB9CisrICAgIHJldHVybiAxOwor K30KKysKKytpbnQgRklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBp bnQga2V5bGVuKQorK3sKKysgICAgaW50IHJldDsKKysgICAgQ1JZUFRPX3dfbG9jayhDUllQVE9f TE9DS19SQU5EKTsKKysgICAgcmV0ID0gZmlwc19zZXRfcHJuZ19rZXkoJnNjdHgsIGtleSwga2V5 bGVuKTsKKysgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKyAgICByZXR1 cm4gcmV0OworK30KKysKKytpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hh ciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbikKKyt7CisrICAgIHJldHVybiBGSVBTX3g5 MzFfc2V0X2tleShrZXksIGtleWxlbik7CisrfQorKworK2ludCBGSVBTX3g5MzFfc2VlZChjb25z dCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKKyt7CisrICAgIGludCByZXQ7CisrICAgIENSWVBU T193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrICAgIHJldCA9IGZpcHNfc2V0X3Bybmdfc2Vl ZCgmc2N0eCwgc2VlZCwgc2VlZGxlbik7CisrICAgIENSWVBUT193X3VubG9jayhDUllQVE9fTE9D S19SQU5EKTsKKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisraW50IEZJUFNfeDkzMV9ieXRlcyh1 bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKKyt7CisrICAgIGludCByZXQ7CisrICAgIENS WVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrICAgIHJldCA9IGZpcHNfcmFuZCgmc2N0 eCwgb3V0LCBjb3VudCk7CisrICAgIENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsK KysgICAgcmV0dXJuIHJldDsKKyt9CisrCisraW50IEZJUFNfeDkzMV9zdGF0dXModm9pZCkKKyt7 CisrICAgIGludCByZXQ7CisrICAgIENSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Cisr ICAgIHJldCA9IHNjdHguc2VlZGVkOworKyAgICBDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tf UkFORCk7CisrICAgIHJldHVybiByZXQ7CisrfQorKworK3ZvaWQgRklQU194OTMxX3Jlc2V0KHZv aWQpCisreworKyAgICBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKyAgICBmaXBz X3JhbmRfcHJuZ19yZXNldCgmc2N0eCk7CisrICAgIENSWVBUT193X3VubG9jayhDUllQVE9fTE9D S19SQU5EKTsKKyt9CisrCisrc3RhdGljIGludCBmaXBzX2RvX3JhbmRfc2VlZChjb25zdCB2b2lk ICpzZWVkLCBpbnQgc2VlZGxlbikKKyt7CisrICAgIEZJUFNfeDkzMV9zZWVkKHNlZWQsIHNlZWRs ZW4pOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludCBmaXBzX2RvX3JhbmRfYWRk KGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLCBkb3VibGUgYWRkX2VudHJvcHkpCisrewor KyAgICBGSVBTX3g5MzFfc2VlZChzZWVkLCBzZWVkbGVuKTsKKysgICAgcmV0dXJuIDE7CisrfQor KworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX3g5MzFfbWV0aCA9IHsKKysgICAgZmlw c19kb19yYW5kX3NlZWQsCisrICAgIEZJUFNfeDkzMV9ieXRlcywKKysgICAgRklQU194OTMxX3Jl c2V0LAorKyAgICBmaXBzX2RvX3JhbmRfYWRkLAorKyAgICBGSVBTX3g5MzFfYnl0ZXMsCisrICAg IEZJUFNfeDkzMV9zdGF0dXMKKyt9OworKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3g5MzFf bWV0aG9kKHZvaWQpCisreworKyAgICByZXR1cm4gJnJhbmRfeDkzMV9tZXRoOworK30KKysKKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZp cHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgKKy0tLSBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY3 NTYyNjQ1ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgJ MjAxNS0xMi0wNCAxMzo1NTo1MS45Njc1NjI2NDUgKzAxMDAKK0BAIC0wLDAgKzEsMTYzIEBACisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lmbmRlZiBIRUFERVJfRklQU19SQU5EX0gK KysjIGRlZmluZSBIRUFERVJfRklQU19SQU5EX0gKKysKKysjIGluY2x1ZGUgPG9wZW5zc2wvYWVz Lmg+CisrIyBpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyMgaW5jbHVkZSA8b3BlbnNzbC9obWFj Lmg+CisrIyBpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysKKysjIGlmZGVmIE9QRU5TU0xfRklQ UworKworKyMgIGlmZGVmICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyMgIGVuZGlmCisr CisrICAgIGludCBGSVBTX3g5MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGlu dCBrZXlsZW4pOworKyAgICBpbnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBpbnQg bnVtKTsKKysgICAgaW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBv dXRsZW4pOworKworKyAgICBpbnQgRklQU194OTMxX3Rlc3RfbW9kZSh2b2lkKTsKKysgICAgdm9p ZCBGSVBTX3g5MzFfcmVzZXQodm9pZCk7CisrICAgIGludCBGSVBTX3g5MzFfc2V0X2R0KHVuc2ln bmVkIGNoYXIgKmR0KTsKKysKKysgICAgaW50IEZJUFNfeDkzMV9zdGF0dXModm9pZCk7CisrCisr ICAgIGNvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpOworKworKyAgICB0 eXBlZGVmIHN0cnVjdCBkcmJnX2N0eF9zdCBEUkJHX0NUWDsKKysvKiBEUkJHIGV4dGVybmFsIGZs YWdzICovCisrLyogRmxhZyBmb3IgQ1RSIG1vZGUgb25seTogdXNlIGRlcml2YXRpb24gZnVuY3Rp b24gY3RyX2RmICovCisrIyAgZGVmaW5lIERSQkdfRkxBR19DVFJfVVNFX0RGICAgICAgICAgICAg MHgxCisrLyogUFJORyBpcyBpbiB0ZXN0IHN0YXRlICovCisrIyAgZGVmaW5lIERSQkdfRkxBR19U RVNUICAgICAgICAgICAgICAgICAgMHgyCisrCisrICAgIERSQkdfQ1RYICpGSVBTX2RyYmdfbmV3 KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworKyAgICBpbnQgRklQU19kcmJnX2luaXQo RFJCR19DVFggKmRjdHgsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworKyAgICBpbnQg RklQU19kcmJnX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKTsK KysgICAgaW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmFkaW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhZGlubGVuKTsK KysgICAgaW50IEZJUFNfZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hh ciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBw cmVkaWN0aW9uX3Jlc2lzdGFuY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOworKworKyAgICBpbnQgRklQU19k cmJnX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpOworKyAgICB2b2lkIEZJUFNfZHJiZ19m cmVlKERSQkdfQ1RYICpkY3R4KTsKKysKKysgICAgaW50IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tz KERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 ICgqZ2V0X2VudHJvcHkpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGVudHJvcHksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBtaW5fbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2xlbiksCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2xlYW51cF9lbnRyb3B5KSAoRFJCR19DVFggKmN0 eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfbm9uY2UpIChEUkJHX0NUWCAqY3R4LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaW5fbGVuLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9sZW4p LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNsZWFudXBfbm9uY2Up IChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSk7CisrCisr ICAgIGludCBGSVBTX2RyYmdfc2V0X3JhbmRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfYWRpbikgKERS QkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcgorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqcG91dCksCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVwX2FkaW4pIChEUkJHX0NUWCAqY3R4 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpyYW5kX3NlZWRfY2IpIChEUkJHX0NUWCAq Y3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB2b2lkICpidWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0pLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKCpyYW5kX2FkZF9jYikgKERSQkdfQ1RYICpjdHgsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgdm9pZCAqYnVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBudW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVudHJvcHkpKTsKKysKKysgICAg dm9pZCAqRklQU19kcmJnX2dldF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4KTsKKysgICAgdm9pZCBG SVBTX2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgsIHZvaWQgKmFwcF9kYXRhKTsKKysg ICAgc2l6ZV90IEZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpOworKyAg ICBpbnQgRklQU19kcmJnX2dldF9zdHJlbmd0aChEUkJHX0NUWCAqZGN0eCk7CisrICAgIHZvaWQg RklQU19kcmJnX3NldF9jaGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFs KTsKKysgICAgdm9pZCBGSVBTX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbChEUkJHX0NUWCAqZGN0 eCwgaW50IGludGVydmFsKTsKKysKKysgICAgaW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2soRFJC R19DVFggKmRjdHgpOworKworKyAgICBEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZv aWQpOworKyAgICBjb25zdCBSQU5EX01FVEhPRCAqRklQU19kcmJnX21ldGhvZCh2b2lkKTsKKysK KysgICAgaW50IEZJUFNfcmFuZF9zZXRfbWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRoKTsK KysgICAgY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZvaWQpOworKwor KyAgICB2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpOworKworKyAgICBpbnQgRklQ U19yYW5kX3N0cmVuZ3RoKHZvaWQpOworKworKy8qIDEuMC4wIGNvbXBhdCBmdW5jdGlvbnMgKi8K KysgICAgaW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQ U19SQU5EX1NJWkVfVCBrZXlsZW4pOworKyAgICBpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9p ZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSk7CisrICAgIGludCBGSVBTX3JhbmRfYnl0ZXMo dW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7CisrICAgIGludCBG SVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpOworKyAgICB2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lk KTsKKysgICAgaW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOworKyAgICBp bnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKTsKKysgICAgY29uc3QgUkFORF9NRVRIT0QgKkZJUFNf cmFuZF9tZXRob2Qodm9pZCk7CisrCisrIyAgaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyMgIGVu ZGlmCisrIyBlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2Zp cHMvZmlwc19yYW5kX2xjbC5oLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19y YW5kX2xjbC5oCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5o LmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45Njc1NjI2NDUgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgJMjAxNS0xMi0wNCAxMzo1NTo1MS45Njc1 NjI2NDUgKzAxMDAKK0BAIC0wLDAgKzEsMjEzIEBACisrLyogZmlwcy9yYW5kL2ZpcHNfcmFuZF9s Y2wuaCAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNz bC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUg bWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisr ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BP cGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICog ICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor KyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9z dCBEUkJHX0hBU0hfQ1RYOworK3R5cGVkZWYgc3RydWN0IGRyYmdfaG1hY19jdHhfc3QgRFJCR19I TUFDX0NUWDsKKyt0eXBlZGVmIHN0cnVjdCBkcmJnX2N0cl9jdHhfc3QgRFJCR19DVFJfQ1RYOwor KworKy8qIDg4OCBiaXRzIGZyb20gMTAuMSB0YWJsZSAyICovCisrI2RlZmluZSBIQVNIX1BSTkdf TUFYX1NFRURMRU4gICAxMTEKKysKKytzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdCB7CisrICAgIGNv bnN0IEVWUF9NRCAqbWQ7CisrICAgIEVWUF9NRF9DVFggbWN0eDsKKysgICAgdW5zaWduZWQgY2hh ciBWW0hBU0hfUFJOR19NQVhfU0VFRExFTl07CisrICAgIHVuc2lnbmVkIGNoYXIgQ1tIQVNIX1BS TkdfTUFYX1NFRURMRU5dOworKyAgICAvKiBUZW1wb3JhcnkgdmFsdWUgc3RvcmFnZTogc2hvdWxk IGFsd2F5cyBleGNlZWQgbWF4IGRpZ2VzdCBsZW5ndGggKi8KKysgICAgdW5zaWduZWQgY2hhciB2 dG1wW0hBU0hfUFJOR19NQVhfU0VFRExFTl07CisrfTsKKysKKytzdHJ1Y3QgZHJiZ19obWFjX2N0 eF9zdCB7CisrICAgIGNvbnN0IEVWUF9NRCAqbWQ7CisrICAgIEhNQUNfQ1RYIGhjdHg7CisrICAg IHVuc2lnbmVkIGNoYXIgS1tFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBjaGFyIFZb RVZQX01BWF9NRF9TSVpFXTsKKyt9OworKworK3N0cnVjdCBkcmJnX2N0cl9jdHhfc3QgeworKyAg ICBBRVNfS0VZIGtzOworKyAgICBzaXplX3Qga2V5bGVuOworKyAgICB1bnNpZ25lZCBjaGFyIEtb MzJdOworKyAgICB1bnNpZ25lZCBjaGFyIFZbMTZdOworKyAgICAvKiBUZW1wIHZhcmlhYmxlcyB1 c2VkIGJ5IGRlcml2YXRpb24gZnVuY3Rpb24gKi8KKysgICAgQUVTX0tFWSBkZl9rczsKKysgICAg QUVTX0tFWSBkZl9reGtzOworKyAgICAvKiBUZW1wb3JhcnkgYmxvY2sgc3RvcmFnZSB1c2VkIGJ5 IGN0cl9kZiAqLworKyAgICB1bnNpZ25lZCBjaGFyIGJsdG1wWzE2XTsKKysgICAgc2l6ZV90IGJs dG1wX3BvczsKKysgICAgdW5zaWduZWQgY2hhciBLWFs0OF07CisrfTsKKysKKysvKiBEUkJHIGlu dGVybmFsIGZsYWdzICovCisrCisrLyogRnVuY3Rpb25zIHNob3VsZG4ndCBjYWxsIGVyciBsaWJy YXJ5ICovCisrI2RlZmluZSBEUkJHX0ZMQUdfTk9FUlIgICAgICAgICAgICAgICAgIDB4MQorKy8q IEN1c3RvbSByZXNlZWQgY2hlY2tpbmcgKi8KKysjZGVmaW5lIERSQkdfQ1VTVE9NX1JFU0VFRCAg ICAgICAgICAgICAgMHgyCisrCisrLyogRFJCRyBzdGF0dXMgdmFsdWVzICovCisrLyogbm90IGlu aXRpYWxpc2VkICovCisrI2RlZmluZSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEICAgICAgIDAK KysvKiBvayBhbmQgcmVhZHkgdG8gZ2VuZXJhdGUgcmFuZG9tIGJpdHMgKi8KKysjZGVmaW5lIERS QkdfU1RBVFVTX1JFQURZICAgICAgICAgICAgICAgMQorKy8qIHJlc2VlZCByZXF1aXJlZCAqLwor KyNkZWZpbmUgRFJCR19TVEFUVVNfUkVTRUVEICAgICAgICAgICAgICAyCisrLyogZmF0YWwgZXJy b3IgY29uZGl0aW9uICovCisrI2RlZmluZSBEUkJHX1NUQVRVU19FUlJPUiAgICAgICAgICAgICAg IDMKKysKKysvKiBBIGRlZmF1bHQgbWF4aW11bSBsZW5ndGg6IGxhcmdlciB0aGFuIGFueSByZWFz b25hYmxlIHZhbHVlIHVzZWQgaW4gcHJhdGljZSAqLworKworKyNkZWZpbmUgRFJCR19NQVhfTEVO R1RIICAgICAgICAgICAgICAgICAweDdmZmZmZmYwCisrLyogTWF4aW11bSBEUkJHIGJsb2NrIGxl bmd0aDogYWxsIG1kIHNpemVzIGFyZSBiaWdnZXIgdGhhbiBjaXBoZXIgYmxvY2tzIHNpemVzCisr ICogc28gdXNlIG1heCBkaWdlc3QgbGVuZ3RoLgorKyAqLworKyNkZWZpbmUgRFJCR19NQVhfQkxP Q0sgICAgICAgICAgICAgICAgICBFVlBfTUFYX01EX1NJWkUKKysKKysjZGVmaW5lIERSQkdfSEVB TFRIX0lOVEVSVkFMICAgICAgICAgICAgKDEgPDwgMjQpCisrCisrLyogRFJCRyBjb250ZXh0IHN0 cnVjdHVyZSAqLworKworK3N0cnVjdCBkcmJnX2N0eF9zdCB7CisrICAgIC8qIEZpcnN0IHR5cGVz IGNvbW1vbiB0byBhbGwgaW1wbGVtZW50YXRpb25zICovCisrICAgIC8qIERSQkcgdHlwZTogYSBO SUQgZm9yIHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobSAqLworKyAgICBpbnQgdHlwZTsKKysgICAg LyogVmFyaW91cyBleHRlcm5hbCBmbGFncyAqLworKyAgICB1bnNpZ25lZCBpbnQgeGZsYWdzOwor KyAgICAvKiBWYXJpb3VzIGludGVybmFsIHVzZSBvbmx5IGZsYWdzICovCisrICAgIHVuc2lnbmVk IGludCBpZmxhZ3M7CisrICAgIC8qIFVzZWQgZm9yIHBlcmlvZGljIGhlYWx0aCBjaGVja3MgKi8K KysgICAgaW50IGhlYWx0aF9jaGVja19jbnQsIGhlYWx0aF9jaGVja19pbnRlcnZhbDsKKysKKysg ICAgLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBzZXR1cCBieSBtZWNoYW5pc20gZHJi Z19pbml0KCkgY2FsbCAqLworKyAgICBpbnQgc3RyZW5ndGg7CisrICAgIHNpemVfdCBibG9ja2xl bmd0aDsKKysgICAgc2l6ZV90IG1heF9yZXF1ZXN0OworKworKyAgICBzaXplX3QgbWluX2VudHJv cHksIG1heF9lbnRyb3B5OworKyAgICBzaXplX3QgbWluX25vbmNlLCBtYXhfbm9uY2U7CisrICAg IHNpemVfdCBtYXhfcGVycywgbWF4X2FkaW47CisrICAgIHVuc2lnbmVkIGludCByZXNlZWRfY291 bnRlcjsKKysgICAgdW5zaWduZWQgaW50IHJlc2VlZF9pbnRlcnZhbDsKKysgICAgc2l6ZV90IHNl ZWRsZW47CisrICAgIGludCBzdGF0dXM7CisrICAgIC8qIEFwcGxpY2F0aW9uIGRhdGE6IHR5cGlj YWxseSB1c2VkIGJ5IHRlc3QgZ2V0X2VudHJvcHkgKi8KKysgICAgdm9pZCAqYXBwX2RhdGE7Cisr ICAgIC8qIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN0cnVjdHVyZXMgKi8KKysgICAgdW5pb24g eworKyAgICAgICAgRFJCR19IQVNIX0NUWCBoYXNoOworKyAgICAgICAgRFJCR19ITUFDX0NUWCBo bWFjOworKyAgICAgICAgRFJCR19DVFJfQ1RYIGN0cjsKKysgICAgfSBkOworKyAgICAvKiBJbml0 aWFsaWFzZSBQUk5HIGFuZCBzZXR1cCBjYWxsYmFja3MgYmVsb3cgKi8KKysgICAgaW50ICgqaW5p dCkgKERSQkdfQ1RYICpjdHgsIGludCBuaWQsIGludCBzZWN1cml0eSwgdW5zaWduZWQgaW50IGZs YWdzKTsKKysgICAgLyogSW50YW50aWF0ZSBQUk5HICovCisrICAgIGludCAoKmluc3RhbnRpYXRl KSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKKysgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7Cisr ICAgIC8qIHJlc2VlZCAqLworKyAgICBpbnQgKCpyZXNlZWQpIChEUkJHX0NUWCAqY3R4LAorKyAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4s CisrICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBh ZGlubGVuKTsKKysgICAgLyogZ2VuZXJhdCBvdXRwdXQgKi8KKysgICAgaW50ICgqZ2VuZXJhdGUp IChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91 dCwgc2l6ZV90IG91dGxlbiwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7CisrICAgIC8qIHVuaW5zdGFudGlhdGUgKi8KKysg ICAgaW50ICgqdW5pbnN0YW50aWF0ZSkgKERSQkdfQ1RYICpjdHgpOworKworKyAgICAvKiBFbnRy b3B5IHNvdXJjZSBibG9jayBsZW5ndGggKi8KKysgICAgc2l6ZV90IGVudHJvcHlfYmxvY2tsZW47 CisrCisrICAgIC8qIGVudHJvcHkgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCisrICAgIHNpemVfdCAo KmdldF9lbnRyb3B5KSAoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXpl X3QgbWF4X2xlbik7CisrICAgIC8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggZW50 cm9weSBidWZmZXIgKi8KKysgICAgdm9pZCAoKmNsZWFudXBfZW50cm9weSkgKERSQkdfQ1RYICpj dHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOworKworKyAgICAvKiBub25jZSBn YXRoZXJpbmcgZnVuY3Rpb24gKi8KKysgICAgc2l6ZV90ICgqZ2V0X25vbmNlKSAoRFJCR19DVFgg KmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOworKyAgICAvKiBJbmRp Y2F0ZXMgd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIG5vbmNlIGJ1ZmZlciAqLworKyAgICB2b2lkICgq Y2xlYW51cF9ub25jZSkgKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90 IG9sZW4pOworKworKyAgICAvKiBDb250aW51b3VzIHJhbmRvbSBudW1iZXIgdGVzdCB0ZW1wb3Jh cnkgYXJlYSAqLworKyAgICAvKiBMYXN0IGJsb2NrICovCisrICAgIHVuc2lnbmVkIGNoYXIgbGJb RVZQX01BWF9NRF9TSVpFXTsKKysgICAgLyogc2V0IGlmIGxiIGlzIHZhbGlkICovCisrICAgIGlu dCBsYl92YWxpZDsKKysKKysgICAgLyogQ2FsbGJhY2tzIHVzZWQgd2hlbiBjYWxsZWQgdGhyb3Vn aCBSQU5EIGludGVyZmFjZSAqLworKyAgICAvKiBHZXQgYW55IGFkZGl0aW9uYWwgaW5wdXQgZm9y IGdlbmVyYXRlICovCisrICAgIHNpemVfdCAoKmdldF9hZGluKSAoRFJCR19DVFggKmN0eCwgdW5z aWduZWQgY2hhciAqKnBvdXQpOworKyAgICB2b2lkICgqY2xlYW51cF9hZGluKSAoRFJCR19DVFgg KmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7CisrICAgIC8qIENhbGxiYWNr IGZvciBSQU5EX3NlZWQoKSwgUkFORF9hZGQoKSAqLworKyAgICBpbnQgKCpyYW5kX3NlZWRfY2Ip IChEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pOworKyAgICBpbnQgKCpy YW5kX2FkZF9jYikgKERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSk7CisrfTsKKysKKytpbnQgZmlw c19kcmJnX2N0cl9pbml0KERSQkdfQ1RYICpkY3R4KTsKKytpbnQgZmlwc19kcmJnX2hhc2hfaW5p dChEUkJHX0NUWCAqZGN0eCk7CisraW50IGZpcHNfZHJiZ19obWFjX2luaXQoRFJCR19DVFggKmRj dHgpOworK2ludCBmaXBzX2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNpZ25l ZCBpbnQgZmxhZ3MpOworK2ludCBmaXBzX2RyYmdfY3BybmdfdGVzdChEUkJHX0NUWCAqZGN0eCwg Y29uc3QgdW5zaWduZWQgY2hhciAqb3V0KTsKKysKKytjb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpG SVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKTsKKysKKytjb25zdCBzdHJ1Y3QgZXZwX2NpcGhl cl9zdCAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7CisrCisrI2RlZmluZSBGSVBTX2Rp Z2VzdGluaXQgRVZQX0RpZ2VzdEluaXQKKysjZGVmaW5lIEZJUFNfZGlnZXN0dXBkYXRlIEVWUF9E aWdlc3RVcGRhdGUKKysjZGVmaW5lIEZJUFNfZGlnZXN0ZmluYWwgRVZQX0RpZ2VzdEZpbmFsCisr I2RlZmluZSBNX0VWUF9NRF9zaXplIEVWUF9NRF9zaXplCitkaWZmIC11cCBvcGVuc3NsLTEuMC4y ZS9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v Zmlwcy9maXBzX3JhbmRfbGliLmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBz X3JhbmRfbGliLmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NzU2MjY0NSArMDEwMAorKysr IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYwkyMDE1LTEyLTA0IDEz OjU1OjUxLjk2NzU2MjY0NSArMDEwMAorQEAgLTAsMCArMSwxODEgQEAKKysvKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBt ZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3Ry aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo dAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5h bWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1 c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZv ciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3Jl QG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysg KiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu CisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRl ICJlX29zLmgiCisrCisrLyogRklQUyBBUEkgZm9yIFBSTkcgdXNlLiBTaW1pbGFyIHRvIFJBTkQg ZnVuY3Rpb25hbGl0eSBidXQgd2l0aG91dAorKyAqIEVOR0lORSBhbmQgYWRkaXRpb25hbCBjaGVj a2luZyBmb3Igbm9uLUZJUFMgcmFuZCBtZXRob2RzLgorKyAqLworKworK3N0YXRpYyBjb25zdCBS QU5EX01FVEhPRCAqZmlwc19yYW5kX21ldGggPSBOVUxMOworK3N0YXRpYyBpbnQgZmlwc19hcHBy b3ZlZF9yYW5kX21ldGggPSAwOworK3N0YXRpYyBpbnQgZmlwc19yYW5kX2JpdHMgPSAwOworKwor Ky8qIEFsbG93cyBhcHBsaWNhdGlvbiB0byBvdmVycmlkZSBudW1iZXIgb2YgYml0cyBhbmQgdXNl cyBub24tRklQUyBtZXRob2RzICovCisrdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50IG5iaXRz KQorK3sKKysgICAgZmlwc19yYW5kX2JpdHMgPSBuYml0czsKKyt9CisrCisraW50IEZJUFNfcmFu ZF9zZXRfbWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRoKQorK3sKKysgICAgaWYgKCFmaXBz X3JhbmRfYml0cykgeworKyAgICAgICAgaWYgKG1ldGggPT0gRklQU19kcmJnX21ldGhvZCgpKQor KyAgICAgICAgICAgIGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMTsKKysgICAgICAgIGVsc2Ug aWYgKG1ldGggPT0gRklQU194OTMxX21ldGhvZCgpKQorKyAgICAgICAgICAgIGZpcHNfYXBwcm92 ZWRfcmFuZF9tZXRoID0gMjsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIGZpcHNfYXBw cm92ZWRfcmFuZF9tZXRoID0gMDsKKysgICAgICAgICAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgp KSB7CisrICAgICAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TRVRfTUVUSE9E LCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisr ICAgICAgICAgICAgfQorKyAgICAgICAgfQorKyAgICB9CisrICAgIGZpcHNfcmFuZF9tZXRoID0g bWV0aDsKKysgICAgcmV0dXJuIDE7CisrfQorKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3Jh bmRfZ2V0X21ldGhvZCh2b2lkKQorK3sKKysgICAgcmV0dXJuIGZpcHNfcmFuZF9tZXRoOworK30K KysKKytjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKQorK3sKKysgICAg cmV0dXJuIEZJUFNfcmFuZF9nZXRfbWV0aG9kKCk7CisrfQorKworK3ZvaWQgRklQU19yYW5kX3Jl c2V0KHZvaWQpCisreworKyAgICBpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgt PmNsZWFudXApCisrICAgICAgICBmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCgpOworK30KKysKKytp bnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSkK Kyt7CisrICAgIGlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9k ZSgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU0VFRCwgRklQU19SX05P Tl9GSVBTX01FVEhPRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICBpZiAoZmlw c19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnNlZWQpCisrICAgICAgICBmaXBzX3JhbmRf bWV0aC0+c2VlZChidWYsIG51bSk7CisrICAgIHJldHVybiAxOworK30KKysKKyt2b2lkIEZJUFNf cmFuZF9hZGQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkKKyt7Cisr ICAgIGlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKSB7 CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfQURELCBGSVBTX1JfTk9OX0ZJUFNf TUVUSE9EKTsKKysgICAgICAgIHJldHVybjsKKysgICAgfQorKyAgICBpZiAoZmlwc19yYW5kX21l dGggJiYgZmlwc19yYW5kX21ldGgtPmFkZCkKKysgICAgICAgIGZpcHNfcmFuZF9tZXRoLT5hZGQo YnVmLCBudW0sIGVudHJvcHkpOworK30KKysKKytpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVk IGNoYXIgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pCisreworKyAgICBpZiAoIWZpcHNfYXBw cm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgeworKyAgICAgICAgRklQU2Vy cihGSVBTX0ZfRklQU19SQU5EX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysgICAg ICAgIHJldHVybiAwOworKyAgICB9CisrICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3Jh bmRfbWV0aC0+Ynl0ZXMpCisrICAgICAgICByZXR1cm4gZmlwc19yYW5kX21ldGgtPmJ5dGVzKGJ1 ZiwgbnVtKTsKKysgICAgcmV0dXJuIDA7CisrfQorKworK2ludCBGSVBTX3JhbmRfcHNldWRvX2J5 dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG51bSkKKyt7CisrICAgIGlmICghZmlwc19hcHBy b3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKSB7CisrICAgICAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsK KysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBm aXBzX3JhbmRfbWV0aC0+cHNldWRvcmFuZCkKKysgICAgICAgIHJldHVybiBmaXBzX3JhbmRfbWV0 aC0+cHNldWRvcmFuZChidWYsIG51bSk7CisrICAgIHJldHVybiAtMTsKKyt9CisrCisraW50IEZJ UFNfcmFuZF9zdGF0dXModm9pZCkKKyt7CisrICAgIGlmICghZmlwc19hcHByb3ZlZF9yYW5kX21l dGggJiYgRklQU19tb2R1bGVfbW9kZSgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X1JBTkRfU1RBVFVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysgICAgICAgIHJldHVybiAw OworKyAgICB9CisrICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+c3Rh dHVzKQorKyAgICAgICAgcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5zdGF0dXMoKTsKKysgICAgcmV0 dXJuIDA7CisrfQorKworKy8qIFJldHVybiBpbnN0YW50aWF0ZWQgc3RyZW5ndGggb2YgUFJORy4g Rm9yIERSQkcgdGhpcyBpcyBhbiBpbnRlcm5hbAorKyAqIHBhcmFtZXRlci4gRm9yIFg5LjMxIFBS TkcgaXQgaXMgODAgYml0cyAoZnJvbSBTUDgwMC0xMzEpLiBBbnkgb3RoZXIKKysgKiB0eXBlIG9m IFBSTkcgaXMgbm90IGFwcHJvdmVkIGFuZCByZXR1cm5zIDAgaW4gRklQUyBtb2RlIGFuZCBtYXhp bXVtCisrICogMjU2IG91dHNpZGUgRklQUyBtb2RlLgorKyAqLworKworK2ludCBGSVBTX3JhbmRf c3RyZW5ndGgodm9pZCkKKyt7CisrICAgIGlmIChmaXBzX3JhbmRfYml0cykKKysgICAgICAgIHJl dHVybiBmaXBzX3JhbmRfYml0czsKKysgICAgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09 IDEpCisrICAgICAgICByZXR1cm4gRklQU19kcmJnX2dldF9zdHJlbmd0aChGSVBTX2dldF9kZWZh dWx0X2RyYmcoKSk7CisrICAgIGVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDIp CisrICAgICAgICByZXR1cm4gODA7CisrICAgIGVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9t ZXRoID09IDApIHsKKysgICAgICAgIGlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrICAgICAgICAg ICAgcmV0dXJuIDA7CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgcmV0dXJuIDI1NjsKKysg ICAgfQorKyAgICByZXR1cm4gMDsKKyt9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v Zmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBz L2ZpcHNfcmFuZF9zZWxmdGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlw c19yYW5kX3NlbGZ0ZXN0LmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2NzU2MjY0NSArMDEw MAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCTIw MTUtMTItMDQgMTM6NTU6NTEuOTY3NTYyNjQ1ICswMTAwCitAQCAtMCwwICsxLDE3NiBAQAorKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlv bi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBv cGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu CisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK KysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNs dWRlICJmaXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrdHlwZWRlZiBz dHJ1Y3QgeworKyAgICB1bnNpZ25lZCBjaGFyIERUWzE2XTsKKysgICAgdW5zaWduZWQgY2hhciBW WzE2XTsKKysgICAgdW5zaWduZWQgY2hhciBSWzE2XTsKKyt9IEFFU19QUk5HX1RWOworKworKy8q IFRoZSBmb2xsb3dpbmcgdGVzdCB2ZWN0b3JzIGFyZSB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSBS R05WUyBzcGVjICovCisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9rZXlbMTZdID0K KysgICAgeyAweGYzLCAweGIxLCAweDY2LCAweDZkLCAweDEzLCAweDYwLCAweDcyLCAweDQyLAor KyAgICAweGVkLCAweDA2LCAweDFjLCAweGFiLCAweGI4LCAweGQ0LCAweDYyLCAweDAyCisrfTsK KysKKytzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzEyOF90diA9IHsKKysgICAgLyogRFQgKi8KKysg ICAgezB4ZTYsIDB4YjMsIDB4YmUsIDB4NzgsIDB4MmEsIDB4MjMsIDB4ZmEsIDB4NjIsCisrICAg ICAweGQ3LCAweDFkLCAweDRhLCAweGZiLCAweGIwLCAweGU5LCAweDIyLCAweGY5fSwKKysgICAg LyogViAqLworKyAgICB7MHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwKKysgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDB9LAorKyAgICAvKiBSICovCisrICAgIHsweDU5LCAweDUzLCAweDFlLCAweGQxLCAweDNiLCAw eGIwLCAweGMwLCAweDU1LAorKyAgICAgMHg4NCwgMHg3OSwgMHg2NiwgMHg4NSwgMHhjMSwgMHgy ZiwgMHg3NiwgMHg0MX0KKyt9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5 WzI0XSA9CisrICAgIHsgMHgxNSwgMHhkOCwgMHg3OCwgMHgwZCwgMHg2MiwgMHhkMywgMHgyNSwg MHg2ZSwKKysgICAgMHg0NCwgMHg2NCwgMHgxMCwgMHgxMywgMHg2MCwgMHgyYiwgMHhhOSwgMHhi YywKKysgICAgMHg0YSwgMHhmYiwgMHhjYSwgMHhlYiwgMHg0YywgMHg4YiwgMHg5OSwgMHgzYgor K307CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18xOTJfdHYgPSB7CisrICAgIC8qIERUICov CisrICAgIHsweDNmLCAweGQ4LCAweGZmLCAweGU4LCAweDgwLCAweDY5LCAweDhiLCAweGMxLAor KyAgICAgMHhiZiwgMHg5OSwgMHg3ZCwgMHhhNCwgMHgyNCwgMHg3OCwgMHhmMywgMHg0Yn0sCisr ICAgIC8qIFYgKi8KKysgICAgezB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsCisrICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwfSwKKysgICAgLyogUiAqLworKyAgICB7MHgxNywgMHgwNywgMHhkNSwgMHgyOCwgMHgx OSwgMHg3OSwgMHgxZSwgMHhlZiwKKysgICAgIDB4YTUsIDB4MGMsIDB4YmYsIDB4MjUsIDB4ZTUs IDB4NTYsIDB4YjQsIDB4OTN9CisrfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2 X2tleVszMl0gPQorKyAgICB7IDB4NmQsIDB4MTQsIDB4MDYsIDB4NmMsIDB4YjYsIDB4ZDgsIDB4 MjEsIDB4MmQsCisrICAgIDB4ODIsIDB4OGQsIDB4ZmEsIDB4ZjIsIDB4N2EsIDB4MDMsIDB4Yjcs IDB4OWYsCisrICAgIDB4MGMsIDB4YzcsIDB4M2UsIDB4Y2QsIDB4NzYsIDB4ZWIsIDB4ZWUsIDB4 YjUsCisrICAgIDB4MjEsIDB4MDUsIDB4OGMsIDB4NGYsIDB4MzEsIDB4N2EsIDB4ODAsIDB4YmIK Kyt9OworKworK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMjU2X3R2ID0geworKyAgICAvKiBEVCAq LworKyAgICB7MHhkYSwgMHgzYSwgMHg0MSwgMHhlYywgMHgxZCwgMHhhMywgMHhiMCwgMHhkNSwK KysgICAgIDB4ZjIsIDB4YTksIDB4NGUsIDB4MzQsIDB4NzQsIDB4OGUsIDB4OWUsIDB4ODh9LAor KyAgICAvKiBWICovCisrICAgIHsweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLAorKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMH0sCisrICAgIC8qIFIgKi8KKysgICAgezB4MzUsIDB4YzcsIDB4ZWYsIDB4YTcsIDB4 NzgsIDB4NGQsIDB4MjksIDB4YmMsCisrICAgICAweDgyLCAweDc5LCAweDk5LCAweGZiLCAweGQw LCAweGIzLCAweDNiLCAweDcyfQorK307CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKCkKKyt7 CisrICAgIGFlc18xOTJfdHYuVlswXSsrOworK30KKysKKysjIGRlZmluZSBmaXBzX3g5MzFfdGVz dChrZXksIHR2KSBcCisrICAgICAgICBkb194OTMxX3Rlc3Qoa2V5LCBzaXplb2Yga2V5LCAmdHYp CisrCisrc3RhdGljIGludCBkb194OTMxX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5 bGVuLCBBRVNfUFJOR19UViAqIHR2KQorK3sKKysgICAgdW5zaWduZWQgY2hhciBSWzE2XSwgVlsx Nl07CisrICAgIGludCBydiA9IDE7CisrICAgIG1lbWNweShWLCB0di0+Viwgc2l6ZW9mKFYpKTsK KysgICAgaWYgKCFGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbikpCisrICAgICAgICByZXR1 cm4gMDsKKysgICAgaWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfWDkzMSwga2V5bGVu LCBOVUxMKSkKKysgICAgICAgIHJldHVybiAxOworKyAgICBpZiAoIWZpcHNfcG9zdF9jb3JydXB0 KEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQorKyAgICAgICAgVlswXSsrOworKyAgICBG SVBTX3g5MzFfc2VlZChWLCAxNik7CisrICAgIEZJUFNfeDkzMV9zZXRfZHQodHYtPkRUKTsKKysg ICAgRklQU194OTMxX2J5dGVzKFIsIDE2KTsKKysgICAgaWYgKG1lbWNtcChSLCB0di0+UiwgMTYp KSB7CisrICAgICAgICBmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5V TEwpOworKyAgICAgICAgcnYgPSAwOworKyAgICB9IGVsc2UgaWYgKCFmaXBzX3Bvc3Rfc3VjY2Vz cyhGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOworKyAg ICByZXR1cm4gcnY7CisrfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X3g5MzEoKQorK3sKKysgICAg aW50IHJ2ID0gMTsKKysgICAgRklQU194OTMxX3Jlc2V0KCk7CisrICAgIGlmICghRklQU194OTMx X3Rlc3RfbW9kZSgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5 MzEsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0K KysgICAgaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMTI4X2tleSwgYWVzXzEyOF90dikpCisrICAg ICAgICBydiA9IDA7CisrICAgIGlmICghZmlwc194OTMxX3Rlc3QoYWVzXzE5Ml9rZXksIGFlc18x OTJfdHYpKQorKyAgICAgICAgcnYgPSAwOworKyAgICBpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18y NTZfa2V5LCBhZXNfMjU2X3R2KSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgRklQU194OTMxX3Jl c2V0KCk7CisrICAgIGlmICghcnYpCisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZU RVNUX1g5MzEsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICByZXR1cm4gcnY7CisrfQor KworK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKQorK3sKKysgICAgcmV0dXJuIEZJUFNfc2Vs ZnRlc3RfeDkzMSgpOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBz L2ZpcHNfcmFuZHRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcmFu ZHRlc3QuYy5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY3NTYyNjQ1ICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCTIwMTUtMTItMDQgMTM6NTU6 NTEuOTY3NTYyNjQ1ICswMTAwCitAQCAtMCwwICsxLDI0NyBAQAorKy8qIENvcHlyaWdodCAoQykg MTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9u IHdyaXR0ZW4KKysgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhl IGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2Fw ZXMgU1NMLgorKyAqIAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFu ZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5 IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBS U0EsCisrICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAg VGhlIFNTTCBkb2N1bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlv biBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0 IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAq IENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdo dCBub3RpY2VzIGluCisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElm IHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUg Z2l2ZW4gYXR0cmlidXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUg bGlicmFyeSB1c2VkLgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBt ZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGlu ZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMgc29mdHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGlj IHNvZnR3YXJlIHdyaXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5j b20pIgorKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYg dGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBj cnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5k b3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAg IHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBh biBhY2tub3dsZWRnZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAq IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK KysgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRgorKyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBk aXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9y CisrICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRo aXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhl ciBkaXN0cmlidXRpb24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGlj ZW5jZS5dCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhl IE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUg ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisr ICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFs cyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVz dCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAor KyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9w ZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJv bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2Ug Y29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVu U1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRo b3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2pl Y3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBt dXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU SEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor KyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhF IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0 ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5j bHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KKysKKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNT TF9GSVBTCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50 ZigiTm8gRklQUyBSQU5EIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4gKDApOworK30KKysKKysj ZWxzZQorKworKyMgaW5jbHVkZSAiZmlwc191dGwuaCIKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKworK3R5cGVkZWYgc3RydWN0IHsKKysgICAgdW5zaWduZWQgY2hhciBEVFsxNl07Cisr ICAgIHVuc2lnbmVkIGNoYXIgVlsxNl07CisrICAgIHVuc2lnbmVkIGNoYXIgUlsxNl07CisrfSBB RVNfUFJOR19NQ1Q7CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9tY3Rf a2V5WzE2XSA9CisrICAgIHsgMHg5ZiwgMHg1YiwgMHg1MSwgMHgyMCwgMHgwYiwgMHhmMywgMHgz NCwgMHhiNSwKKysgICAgMHhkOCwgMHgyYiwgMHhlOCwgMHhjMywgMHg3MiwgMHg1NSwgMHhjOCwg MHg0OAorK307CisrCisrc3RhdGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMTI4X21jdF90diA9 IHsKKysgICAgLyogRFQgKi8KKysgICAgezB4NjMsIDB4NzYsIDB4YmIsIDB4ZTUsIDB4MjksIDB4 MDIsIDB4YmEsIDB4M2IsCisrICAgICAweDY3LCAweGM5LCAweDI1LCAweGZhLCAweDcwLCAweDFm LCAweDExLCAweGFjfSwKKysgICAgLyogViAqLworKyAgICB7MHg1NywgMHgyYywgMHg4ZSwgMHg3 NiwgMHg4NywgMHgyNiwgMHg0NywgMHg5NywKKysgICAgIDB4N2UsIDB4NzQsIDB4ZmIsIDB4ZGQs IDB4YzQsIDB4OTUsIDB4MDEsIDB4ZDF9LAorKyAgICAvKiBSICovCisrICAgIHsweDQ4LCAweGU5 LCAweGJkLCAweDBkLCAweDA2LCAweGVlLCAweDE4LCAweGZiLAorKyAgICAgMHhlNCwgMHg1Nywg MHg5MCwgMHhkNSwgMHhjMywgMHhmYywgMHg5YiwgMHg3M30KKyt9OworKworK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbWN0X2tleVsyNF0gPQorKyAgICB7IDB4YjcsIDB4NmMs IDB4MzQsIDB4ZDEsIDB4MDksIDB4NjcsIDB4YWIsIDB4NzMsCisrICAgIDB4NGQsIDB4NWEsIDB4 ZDUsIDB4MzQsIDB4OTgsIDB4MTYsIDB4MGIsIDB4OTEsCisrICAgIDB4YmMsIDB4MzUsIDB4NTEs IDB4MTYsIDB4NmIsIDB4YWUsIDB4OTMsIDB4OGEKKyt9OworKworK3N0YXRpYyBjb25zdCBBRVNf UFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYgPSB7CisrICAgIC8qIERUICovCisrICAgIHsweDg0LCAw eGNlLCAweDIyLCAweDdkLCAweDkxLCAweDVhLCAweGEzLCAweGM5LAorKyAgICAgMHg4NCwgMHgz YywgMHgwYSwgMHhiMywgMHhhOSwgMHg2MywgMHgxNSwgMHg1Mn0sCisrICAgIC8qIFYgKi8KKysg ICAgezB4YjYsIDB4YWYsIDB4ZTYsIDB4OGYsIDB4OTksIDB4OWUsIDB4OTAsIDB4NjQsCisrICAg ICAweGRkLCAweGM3LCAweDdhLCAweGMxLCAweGJiLCAweDkwLCAweDNhLCAweDZkfSwKKysgICAg LyogUiAqLworKyAgICB7MHhmYywgMHg4NSwgMHg2MCwgMHg5YSwgMHgyOSwgMHg2ZiwgMHhlZiwg MHgyMSwKKysgICAgIDB4ZGQsIDB4ODYsIDB4MjAsIDB4MzIsIDB4OGEsIDB4MjksIDB4NmYsIDB4 NDd9CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X21jdF9rZXlb MzJdID0KKysgICAgeyAweDliLCAweDA1LCAweGM4LCAweDY4LCAweGZmLCAweDQ3LCAweGY4LCAw eDNhLAorKyAgICAweGE2LCAweDNhLCAweGE4LCAweGNiLCAweDRlLCAweDcxLCAweGIyLCAweGUw LAorKyAgICAweGI4LCAweDdlLCAweGYxLCAweDM3LCAweGI2LCAweGI0LCAweGY2LCAweDZkLAor KyAgICAweDg2LCAweDMyLCAweGZjLCAweDFmLCAweDVlLCAweDFkLCAweDFlLCAweDUwCisrfTsK KysKKytzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18yNTZfbWN0X3R2ID0geworKyAgICAv KiBEVCAqLworKyAgICB7MHgzMSwgMHg2ZSwgMHgzNSwgMHg5YSwgMHhiMSwgMHg0NCwgMHhmMCwg MHhlZSwKKysgICAgIDB4NjIsIDB4NmQsIDB4MDQsIDB4NDYsIDB4ZTAsIDB4YTMsIDB4OTIsIDB4 NGN9LAorKyAgICAvKiBWICovCisrICAgIHsweDRmLCAweGNkLCAweGMxLCAweDg3LCAweDgyLCAw eDFmLCAweDRkLCAweGExLAorKyAgICAgMHgzZSwgMHgwZSwgMHg1NiwgMHg0NCwgMHg1OSwgMHhl OCwgMHg4MywgMHhjYX0sCisrICAgIC8qIFIgKi8KKysgICAgezB4YzgsIDB4ODcsIDB4YzIsIDB4 NjEsIDB4NWIsIDB4ZDAsIDB4YjksIDB4ZTEsCisrICAgICAweGU3LCAweGYzLCAweDhiLCAweGQ3 LCAweDViLCAweGQ1LCAweGYxLCAweDhkfQorK307CisrCisrc3RhdGljIHZvaWQgZHVtcChjb25z dCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgbikKKyt7CisrICAgIHdoaWxlIChuLS0gPiAwKSB7Cisr ICAgICAgICBwcmludGYoIiAlMDJ4IiwgKmIrKyk7CisrICAgIH0KKyt9CisrCisrc3RhdGljIHZv aWQgY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsCisrICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHBlY3RlZCwgaW50IG4pCisreworKyAgICBpbnQg aTsKKysKKysgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKKysgICAgICAgIGlmIChyZXN1bHRb aV0gIT0gZXhwZWN0ZWRbaV0pIHsKKysgICAgICAgICAgICBwdXRzKCJSYW5kb20gdGVzdCBmYWls ZWQsIGdvdDoiKTsKKysgICAgICAgICAgICBkdW1wKHJlc3VsdCwgbik7CisrICAgICAgICAgICAg cHV0cygiXG4gICAgICAgICAgICAgICBleHBlY3RlZDoiKTsKKysgICAgICAgICAgICBkdW1wKGV4 cGVjdGVkLCBuKTsKKysgICAgICAgICAgICBwdXRjaGFyKCdcbicpOworKyAgICAgICAgICAgIEVY SVQoMSk7CisrICAgICAgICB9CisrfQorKworK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGNvbnN0IHVu c2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKKysgICAgICAgICAgICAgICAgICAgICBjb25z dCBBRVNfUFJOR19NQ1QgKiB0dikKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XSwgZHRb MTZdOworKyAgICBpbnQgaSwgajsKKysgICAgRklQU194OTMxX3Jlc2V0KCk7CisrICAgIEZJUFNf eDkzMV90ZXN0X21vZGUoKTsKKysgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOwor KyAgICBGSVBTX3g5MzFfc2VlZCh0di0+ViwgMTYpOworKyAgICBtZW1jcHkoZHQsIHR2LT5EVCwg MTYpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworKyAgICAgICAgRklQU194 OTMxX3NldF9kdChkdCk7CisrICAgICAgICBGSVBTX3g5MzFfYnl0ZXMoYnVmLCAxNik7CisrICAg ICAgICAvKiBJbmNyZW1lbnQgRFQgKi8KKysgICAgICAgIGZvciAoaiA9IDE1OyBqID49IDA7IGot LSkgeworKyAgICAgICAgICAgIGR0W2pdKys7CisrICAgICAgICAgICAgaWYgKGR0W2pdKQorKyAg ICAgICAgICAgICAgICBicmVhazsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBjb21wYXJl KGJ1ZiwgdHYtPlIsIDE2KTsKKyt9CisrCisraW50IG1haW4oKQorK3sKKysgICAgcnVuX3Rlc3Qo YWVzXzEyOF9tY3Rfa2V5LCAxNiwgJmFlc18xMjhfbWN0X3R2KTsKKysgICAgcHJpbnRmKCJGSVBT IFBSTkcgdGVzdCAxIGRvbmVcbiIpOworKyAgICBydW5fdGVzdChhZXNfMTkyX21jdF9rZXksIDI0 LCAmYWVzXzE5Ml9tY3RfdHYpOworKyAgICBwcmludGYoIkZJUFMgUFJORyB0ZXN0IDIgZG9uZVxu Iik7CisrICAgIHJ1bl90ZXN0KGFlc18yNTZfbWN0X2tleSwgMzIsICZhZXNfMjU2X21jdF90dik7 CisrICAgIHByaW50ZigiRklQUyBQUk5HIHRlc3QgMyBkb25lXG4iKTsKKysgICAgcmV0dXJuIDA7 CisrfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlw c19yc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcnNh X3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxm dGVzdC5jLmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS45Njg1NjI2NjggKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCTIwMTUtMTItMDQgMTM6 NTU6NTEuOTY4NTYyNjY4ICswMTAwCitAQCAtMCwwICsxLDQ0NCBAQAorKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAq CisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n CisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S CisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv b3BlbnNzbGNvbmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgbltdID0KKysgICAgIlx4MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4ODJc eENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJceDlEXHhBOFx4NzEiCisrICAgICJceEY3XHgzNlx4OERc eDA3XHhFRVx4RDRceDEwXHg0M1x4QTRceDQwXHhENlx4QjZceEYwXHg3NFx4NTRceEY1IgorKyAg ICAiXHgxRlx4QjhceERGXHhCQVx4QUZceDAzXHg1Q1x4MDJceEFCXHg2MVx4RUFceDQ4XHhDRVx4 RUJceDZGXHhDRCIKKysgICAgIlx4NDhceDc2XHhFRFx4NTJceDBEXHg2MFx4RTFceEVDXHg0Nlx4 MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCisrICAgICJceDdGXHhBRlx4QjhceEUwXHhBM1x4 REZceEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1IgorKyAgICAiXHg4NFx4 RUVceDZBXHg2NFx4OURceDA2XHgwOVx4NTNceDc0XHg4OFx4MzRceEIyXHg0NVx4NDVceDk4XHgz OSIKKysgICAgIlx4NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4NTJceDdBXHg5 QVx4NDFceEY2XHhDMVx4NjgiCisrICAgICJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJBXHg4 Rlx4NTlceDQ2XHhGOFx4RTVceEZEXHgwOVx4MURceEJEIiAiXHhDQiI7CisrCisrc3RhdGljIGlu dCBjb3JydXB0X3JzYTsKKysKKytzdGF0aWMgaW50IHNldHJzYWtleShSU0EgKmtleSkKKyt7Cisr ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKKysKKysgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KKysgICAgICAgICJceDAwXHhBNVx4REFceEZD XHg1M1x4NDFceEZBXHhGMlx4ODlceEM0XHhCOVx4ODhceERCXHgzMFx4QzFceENEIgorKyAgICAg ICAgIlx4RjhceDNGXHgzMVx4MjVceDFFXHgwNlx4NjhceEI0XHgyN1x4ODRceDgxXHgzOFx4MDFc eDU3XHg5Nlx4NDEiCisrICAgICAgICAiXHhCMlx4OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJc eEM0XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIKKysgICAgICAgICJceEQ2XHg4N1x4MERc eEEyXHhDMFx4ODJceEE5XHgzOVx4RTNceDdGXHhEQ1x4QjhceDJFXHhDOVx4M0VceERBIgorKyAg ICAgICAgIlx4QzlceDdGXHhGM1x4QURceDU5XHg1MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3Nlx4 RjFceEE5XHg1Mlx4OTQiCisrICAgICAgICAiXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4 MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKKysgICAgICAgICJceDkzXHg5OVx4 MjZceEVEXHg0Rlx4NzRceEExXHgzRVx4RERceEZCXHhFMVx4QTFceENFXHhDQ1x4NDhceDk0Igor KyAgICAgICAgIlx4QUZceDk0XHgyOFx4QzJceEI3XHhCOFx4ODhceDNGXHhFNFx4NDZceDNBXHg0 Qlx4QzhceDVCXHgxQ1x4QjMiCisrICAgICAgICAiXHhDMSI7CisrCisrICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHBbXSA9CisrICAgICAgICAiXHgwMFx4RUVceENGXHhBRVx4ODFceEIx XHhCOVx4QjNceEM5XHgwOFx4ODFceDBCXHgxMFx4QTFceEI1XHg2MCIKKysgICAgICAgICJceDAx XHg5OVx4RUJceDlGXHg0NFx4QUVceEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgzRFx4ODRc eEY2IgorKyAgICAgICAgIlx4MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFFXHgzQlx4N0Vc eDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCisrICAgICAgICAiXHgyRFx4NUJceDI1XHgyMVx4NzZc eDQ1XHg5RFx4MUZceDM5XHg3NVx4NDFceEJBXHgyQVx4NThceEZCXHg2NSIKKysgICAgICAgICJc eDk5IjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcVtdID0KKysgICAgICAg ICJceDAwXHhDOVx4N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhB QVx4RDFceEQ5IgorKyAgICAgICAgIlx4MzVceDNGXHg2Q1x4NDJceEQwXHg4OFx4NjZceEIxXHhE MFx4NUFceDBGXHgyMFx4MzVceDAyXHg4Qlx4OUQiCisrICAgICAgICAiXHg4Nlx4OThceDQwXHhC NFx4MTZceDY2XHhCNFx4MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJceDA0XHhCNSIKKysgICAg ICAgICJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVceEE0XHg0MVx4RTdceDAw XHhBRlx4NDZceDE1IgorKyAgICAgICAgIlx4MDMiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBkbXAxW10gPQorKyAgICAgICAgIlx4NTRceDQ5XHg0Q1x4QTZceDNFXHhCQVx4 MDNceDM3XHhFNFx4RTJceDQwXHgyM1x4RkNceEQ2XHg5QVx4NUEiCisrICAgICAgICAiXHhFQlx4 MDdceEREXHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgz RSIKKysgICAgICAgICJceEQ5XHg0OVx4MDlceDc1XHhFQVx4QjdceDc0XHgxNFx4RkZceDU5XHhD MVx4RjdceDY5XHgyRVx4OUFceDJFIgorKyAgICAgICAgIlx4MjBceDJCXHgzOFx4RkNceDkxXHgw QVx4NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEiOworKworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQorKyAgICAgICAgIlx4NDdceDFFXHgwMlx4 OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCisrICAg ICAgICAiXHg2MVx4QURceEJEXHgzQVx4OEFceDdFXHg5OVx4MUNceDVDXHgwNVx4NTZceEE5XHg0 Q1x4MzFceDQ2XHhBNyIKKysgICAgICAgICJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0 Mlx4RTlceDMxXHhGRFx4OEFceEU0XHg3QVx4MjJceDBEIgorKyAgICAgICAgIlx4MUJceDk5XHhB NFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0QiOwor KworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10gPQorKyAgICAgICAgIlx4 MDBceEIwXHg2Q1x4NEZceERBXHhCQlx4NjNceDAxXHgxOVx4OERceDI2XHg1Qlx4REJceEFFXHg5 NFx4MjMiCisrICAgICAgICAiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUwXHg5 M1x4MDdceDdGXHhDRFx4MzlceEUyXHgxMSIKKysgICAgICAgICJceDlGXHhDOVx4ODZceDMyXHgx NVx4NEZceDU4XHg4M1x4QjFceDY3XHhBOVx4NjdceEJGXHg0MFx4MkJceDRFIgorKyAgICAgICAg Ilx4OUVceDJFXHgwRlx4OTZceDU2XHhFNlx4OThceEVBXHgzNlx4NjZceEVEXHhGQlx4MjVceDc5 XHg4MFx4MzkiCisrICAgICAgICAiXHhGNyI7CisrCisrICAgIGtleS0+biA9IEJOX2JpbjJibihu LCBzaXplb2YobikgLSAxLCBrZXktPm4pOworKyAgICBpZiAoY29ycnVwdF9yc2EpCisrICAgICAg ICBCTl9zZXRfYml0KGtleS0+biwgMTAyNCk7CisrICAgIGtleS0+ZSA9IEJOX2JpbjJibihlLCBz aXplb2YoZSkgLSAxLCBrZXktPmUpOworKyAgICBrZXktPmQgPSBCTl9iaW4yYm4oZCwgc2l6ZW9m KGQpIC0gMSwga2V5LT5kKTsKKysgICAga2V5LT5wID0gQk5fYmluMmJuKHAsIHNpemVvZihwKSAt IDEsIGtleS0+cCk7CisrICAgIGtleS0+cSA9IEJOX2JpbjJibihxLCBzaXplb2YocSkgLSAxLCBr ZXktPnEpOworKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6ZW9mKGRtcDEpIC0g MSwga2V5LT5kbXAxKTsKKysgICAga2V5LT5kbXExID0gQk5fYmluMmJuKGRtcTEsIHNpemVvZihk bXExKSAtIDEsIGtleS0+ZG1xMSk7CisrICAgIGtleS0+aXFtcCA9IEJOX2JpbjJibihpcW1wLCBz aXplb2YoaXFtcCkgLSAxLCBrZXktPmlxbXApOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrdm9p ZCBGSVBTX2NvcnJ1cHRfcnNhKCkKKyt7CisrICAgIGNvcnJ1cHRfcnNhID0gMTsKKyt9CisrCisr LyogS25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3ZlIFJTQSBwcml2YXRl IGtleSBzaWduaW5nCisrICoga2F0X3Ricy4KKysgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfdGJzW10gPQorKyAgICAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBLZXkg UlNBIEtBVCI7CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hB MVtdID0geworKyAgICAweDJELCAweEFGLCAweDZFLCAweEMyLCAweDk4LCAweEZCLCAweDhBLCAw eEExLCAweEI5LCAweDQ2LCAweERBLCAweDBGLAorKyAgICAweDAxLCAweDFFLCAweDM3LCAweDkz LCAweEMyLCAweDU1LCAweDI3LCAweEU0LCAweDFELCAweEQyLCAweDkwLCAweEJCLAorKyAgICAw eEY0LCAweEJGLCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3 LCAweEY4LCAweEQzLAorKyAgICAweEQxLCAweERGLCAweEU3LCAweEJFLCAweDgwLCAweDA1LCAw eEMzLCAweEI1LCAweEM3LCAweDgzLCAweEQ1LCAweDRDLAorKyAgICAweDdGLCAweDQ5LCAweEZC LCAweDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEyLCAweDUxLCAweDYwLCAweEQwLCAweEE3LAor KyAgICAweDBELCAweEE5LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVF LCAweDNGLCAweDlCLCAweEY1LAorKyAgICAweEI2LCAweEYzLCAweEYyLCAweDVFLCAweDc0LCAw eEM5LCAweDgzLCAweDgxLCAweDQ3LCAweEYwLCAweEM1LCAweDQ1LAorKyAgICAweDBBLCAweEU5 LCAweDhFLCAweDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJBLCAweDBGLCAweEY4LCAweEI3LCAw eDMxLAorKyAgICAweEQ2LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2 LCAweERCLCAweDlGLCAweEJBLCAweEU4LAorKyAgICAweDIzLCAweEI1LCAweDdGLCAweERDLCAw eDA4LCAweEVBLCAweEQ1LCAweDI2LCAweDFFLCAweDIwLCAweDI1LCAweDg0LAorKyAgICAweDI2 LCAweEM2LCAweDc5LCAweEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5CisrfTsKKysKKytzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9IHsKKysgICAgMHgz OSwgMHg0QSwgMHg2QSwgMHgyMCwgMHhCQywgMHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhDNSwg MHg1OCwgMHhBNywKKysgICAgMHhGRSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5QSwgMHgy QywgMHg4MiwgMHg5OCwgMHgwOCwgMHg5NSwgMHhGQSwKKysgICAgMHhCMSwgMHg5RSwgMHhEMiwg MHg1NSwgMHg2MSwgMHg4NywgMHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1NywKKysg ICAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0QSwgMHgwNiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1NSwg MHg1NCwgMHgxQywgMHg4OSwKKysgICAgMHg4MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2NCwgMHg5 MCwgMHgyRSwgMHgxNiwgMHhDQywgMHg4NiwgMHgwNSwgMHhFRSwKKysgICAgMHhCMSwgMHhFNiwg MHg3QiwgMHhCQSwgMHgxNiwgMHg3NSwgMHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwgMHgy MiwKKysgICAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2RiwgMHhBNCwgMHhGQiwgMHg3NywgMHg0MCwg MHg2NCwgMHg2MiwgMHhEMSwgMHhCNSwKKysgICAgMHgzNywgMHgxRSwgMHhFMCwgMHgzRCwgMHhB OCwgMHhGOSwgMHhEMiwgMHhCRCwgMHhBQSwgMHgzOCwgMHgyNCwgMHg0OSwKKysgICAgMHg1OCwg MHhEMiwgMHg3NCwgMHg4NSwgMHhGNCwgMHhCNSwgMHg5MywgMHg4RSwgMHhGNSwgMHgwMywgMHhF QSwgMHgyRCwKKysgICAgMHhDOCwgMHg1MiwgMHhGQSwgMHhDRiwgMHg3RSwgMHgzNSwgMHhCMCwg MHg2QSwgMHhBRiwgMHg5NSwgMHhDMCwgMHgwMCwKKysgICAgMHg1NCwgMHg3NiwgMHgzRCwgMHgw QywgMHg5QywgMHhCMiwgMHhFRSwgMHhDMAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9QU1NfU0hBMjU2W10gPSB7CisrICAgIDB4NkQsIDB4M0QsIDB4QkUsIDB4 OEYsIDB4NjAsIDB4NkQsIDB4MjUsIDB4MTQsIDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCisrICAg IDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUsIDB4MTAsIDB4MjUsIDB4 OUEsIDB4RjMsIDB4OEYsCisrICAgIDB4N0IsIDB4QzUsIDB4QTgsIDB4NEEsIDB4NzQsIDB4NTEs IDB4MzYsIDB4RTIsIDB4OEQsIDB4N0QsIDB4NzMsIDB4MjgsCisrICAgIDB4QzEsIDB4NzcsIDB4 QzYsIDB4MjcsIDB4OTcsIDB4MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4OTYsIDB4NzMsIDB4NEUs CisrICAgIDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUsIDB4REYsIDB4 OUQsIDB4NDksIDB4NDcsIDB4MDUsCisrICAgIDB4QUIsIDB4RjUsIDB4MDEsIDB4RDYsIDB4ODEs IDB4NDcsIDB4NzAsIDB4RjUsIDB4MUQsIDB4NkQsIDB4MjYsIDB4QkEsCisrICAgIDB4MkYsIDB4 N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4RjMsIDB4REEs IDB4QjYsCisrICAgIDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4QzgsIDB4 RDksIDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYsCisrICAgIDB4MjEsIDB4QjcsIDB4N0UsIDB4QUQs IDB4N0MsIDB4MkYsIDB4NzUsIDB4NTAsIDB4NDcsIDB4MTIsIDB4RTQsIDB4NkQsCisrICAgIDB4 NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4NDks IDB4QjksIDB4RjYsCisrICAgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4 MkQsIDB4MUMKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNT X1NIQTM4NFtdID0geworKyAgICAweDQwLCAweEZCLCAweEExLCAweDIxLCAweEY0LCAweEIyLCAw eDQwLCAweDlBLCAweEI0LCAweDMxLCAweEE4LCAweEYyLAorKyAgICAweEVDLCAweDFDLCAweEM0 LCAweEM4LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAweDU3LCAweDQ1LCAweENELCAweDVFLAor KyAgICAweDg2LCAweDAwLCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcx LCAweDQ0LCAweDlBLCAweENELAorKyAgICAweEFBLCAweDI1LCAweEY0LCAweEIyLCAweEZDLCAw eEYwLCAweDc1LCAweEQ5LCAweDJGLCAweDc4LCAweDIzLCAweDdGLAorKyAgICAweDZGLCAweDAy LCAweEVGLCAweEMxLCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMxLCAweERDLCAweDQyLCAw eDZDLAorKyAgICAweEIyLCAweDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcx LCAweEYzLCAweEFDLCAweDRGLCAweEZCLAorKyAgICAweDkxLCAweENBLCAweEY1LCAweDcwLCAw eEVGLCAweDZCLCAweDlELCAweEE0LCAweEVGLCAweEQ5LCAweDNELCAweDJGLAorKyAgICAweDNB LCAweEJFLCAweDg5LCAweDM4LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMyLCAweEFELCAw eDQyLCAweDg5LAorKyAgICAweDk4LCAweDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4 LCAweEFDLCAweDg3LCAweDFGLCAweENBLCAweDZGLAorKyAgICAweDQ4LCAweEY2LCAweEFFLCAw eEQ3LCAweDQ1LCAweEVFLCAweEFFLCAweDg4LCAweDBFLCAweDYwLCAweEY0LCAweDU1LAorKyAg ICAweDQ4LCAweDQ0LCAweEVFLCAweDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYxCisrfTsKKysK KytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsKKysg ICAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwgMHgwNSwgMHhFOCwgMHhFNiwgMHhFNiwgMHg1Nywg MHhBRSwgMHg2MywgMHg4QywKKysgICAgMHhDNiwgMHg4MywgMHhCNywgMHhBMCwgMHg1OSwgMHhC QiwgMHhGMiwgMHhDNiwgMHg4RiwgMHgxMiwgMHg1MywgMHg5QSwKKysgICAgMHg5QiwgMHg1NCwg MHg5RSwgMHhCMywgMHhDMSwgMHgxRCwgMHgyMywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhE RCwKKysgICAgMHg0QiwgMHhGMywgMHg0NiwgMHg5QiwgMHg2QiwgMHhGNiwgMHg3QywgMHgyNCwg MHg2MCwgMHg3OSwgMHgyMywgMHgzOSwKKysgICAgMHgwMSwgMHgxQywgMHg1MSwgMHhDQiwgMHhE OCwgMHhFOSwgMHg5QSwgMHgwMSwgMHg2NywgMHg1RiwgMHhGRSwgMHhENywKKysgICAgMHg3Qywg MHhFMywgMHg3RiwgMHhFRCwgMHhEQiwgMHg4NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3OCwgMHg1 NSwgMHg2MSwKKysgICAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywgMHhEMiwgMHg5RCwgMHgwQywg MHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwgMHgxMywKKysgICAgMHhDNSwgMHg0NywgMHgzNCwgMHgw RCwgMHgzMiwgMHgxNSwgMHhDOCwgMHhBRSwgMHg5QSwgMHg2QSwgMHgzOSwgMHg2MywKKysgICAg MHgyRCwgMHg2MCwgMHhGNSwgMHg0QywgMHhERiwgMHg4QSwgMHg0OCwgMHg0QiwgMHhCRiwgMHhG NCwgMHhBOCwgMHhGRSwKKysgICAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwgMHg5QywgMHg3Qywg MHhDQSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwgMHg4OCwKKysgICAgMHg1QywgMHg5NywgMHg3 MCwgMHhCNCwgMHgyNiwgMHhDOSwgMHgxNCwgMHg4QgorK307CisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2F0X1JTQV9TSEExW10gPSB7CisrICAgIDB4NzEsIDB4RUUsIDB4MUEsIDB4 QzAsIDB4RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NzksIDB4NUMsIDB4RjIsIDB4NEMsCisrICAg IDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4NjEsIDB4 MzMsIDB4OEQsIDB4OUIsCisrICAgIDB4RTcsIDB4RkQsIDB4NjAsIDB4QTMsIDB4ODMsIDB4QjUs IDB4QTMsIDB4NTEsIDB4NTUsIDB4NzcsIDB4OTAsIDB4Q0YsCisrICAgIDB4REMsIDB4MjIsIDB4 MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4RTMsIDB4M0QsIDB4MUUsIDB4Rjgs CisrICAgIDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4 ODgsIDB4OEIsIDB4OEIsIDB4QTEsCisrICAgIDB4MjAsIDB4MjIsIDB4QkUsIDB4NTksIDB4NUIs IDB4RTAsIDB4MjMsIDB4MjQsIDB4QTEsIDB4NDksIDB4MzAsIDB4QkEsCisrICAgIDB4QTksIDB4 OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUsIDB4Q0EsIDB4MkUs IDB4NEUsCisrICAgIDB4QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYsIDB4 MUQsIDB4MDQsIDB4NDQsIDB4RTUsIDB4NUYsCisrICAgIDB4MzUsIDB4MDcsIDB4MTEsIDB4QkMs IDB4RUQsIDB4MTksIDB4MzcsIDB4MjEsIDB4Q0YsIDB4MjMsIDB4NDgsIDB4MUYsCisrICAgIDB4 NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYsIDB4NEIs IDB4MkYsIDB4OTUsCisrICAgIDB4REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDksIDB4 NDYsIDB4QjQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hB MjI0W10gPSB7CisrICAgIDB4NjIsIDB4QUEsIDB4NzksIDB4QTksIDB4MTgsIDB4MEUsIDB4NUYs IDB4OEMsIDB4QkIsIDB4QjcsIDB4MTUsIDB4RjksCisrICAgIDB4MjUsIDB4QkIsIDB4RkEsIDB4 RDQsIDB4M0EsIDB4MzQsIDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgsIDB4OEQsCisrICAg IDB4NUIsIDB4NTUsIDB4OUEsIDB4N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4 MUEsIDB4QzUsIDB4ODksCisrICAgIDB4MDgsIDB4RTIsIDB4MUIsIDB4QkQsIDB4NjIsIDB4NTAs IDB4MTcsIDB4NzYsIDB4MzAsIDB4MkMsIDB4OUUsIDB4Q0QsCisrICAgIDB4QTQsIDB4MDIsIDB4 QUQsIDB4QjEsIDB4NkQsIDB4NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEsIDB4RTUs CisrICAgIDB4RUUsIDB4MUYsIDB4OEQsIDB4N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4 NUUsIDB4MEIsIDB4QTksIDB4Q0MsCisrICAgIDB4REIsIDB4NTksIDB4NTUsIDB4ODcsIDB4MDks IDB4MjUsIDB4NzAsIDB4ODYsIDB4ODQsIDB4MDIsIDB4QzYsIDB4M0IsCisrICAgIDB4MEIsIDB4 NDQsIDB4NEMsIDB4NDYsIDB4OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4M0Us IDB4QjIsCisrICAgIDB4NTgsIDB4MkUsIDB4MDYsIDB4NDUsIDB4NDksIDB4RTAsIDB4OTIsIDB4 RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCisrICAgIDB4RDksIDB4NzksIDB4N0YsIDB4MTcs IDB4NUUsIDB4MDIsIDB4NzMsIDB4MDQsIDB4NzcsIDB4ODIsIDB4RTYsIDB4REMsCisrICAgIDB4 NDAsIDB4MjEsIDB4ODksIDB4OEIsIDB4MzcsIDB4M0UsIDB4MUUsIDB4OEQKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjU2W10gPSB7CisrICAgIDB4MEQs IDB4NTUsIDB4RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUsIDB4ODIsIDB4MDUsIDB4MTcsIDB4 QTUsIDB4MjMsCisrICAgIDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4RkIsIDB4OEMsIDB4RDAs IDB4ODEsIDB4MjAsIDB4N0IsIDB4QUEsIDB4MjMsCisrICAgIDB4OTIsIDB4ODcsIDB4OEMsIDB4 RDEsIDB4NTMsIDB4ODUsIDB4MTYsIDB4REMsIDB4QkUsIDB4QUQsIDB4NkYsIDB4MzUsCisrICAg IDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEsIDB4MDEsIDB4MTcsIDB4 NTgsIDB4QjIsIDB4NkUsCisrICAgIDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4RjEsIDB4RkIs IDB4NTEsIDB4RTgsIDB4NkEsIDB4OTAsIDB4MkQsIDB4MTgsCisrICAgIDB4MEUsIDB4QzAsIDB4 OTAsIDB4MTAsIDB4MjQsIDB4QTksIDB4MUQsIDB4QjMsIDB4NTgsIDB4N0EsIDB4OTEsIDB4MzAs CisrICAgIDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDksIDB4NUQsIDB4 QkYsIDB4RTIsIDB4ODAsIDB4M0EsCisrICAgIDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4RDEs IDB4RTksIDB4RjAsIDB4NUMsIDB4REUsIDB4ODEsIDB4QTYsIDB4MzgsCisrICAgIDB4QjgsIDB4 NDIsIDB4QkIsIDB4ODYsIDB4QzUsIDB4OUQsIDB4Q0UsIDB4N0MsIDB4MkMsIDB4RUUsIDB4RDEs IDB4REEsCisrICAgIDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4RjcsIDB4 ODAsIDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAsCisrICAgIDB4QkQsIDB4NDQsIDB4OTcsIDB4NjAs IDB4Q0QsIDB4NTcsIDB4QzAsIDB4N0EKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfU0hBMzg0W10gPSB7CisrICAgIDB4MUQsIDB4RTMsIDB4NkEsIDB4REQsIDB4 MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYsIDB4MUYsCisrICAgIDB4RDIs IDB4OTEsIDB4NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4 NDcsIDB4QzcsCisrICAgIDB4NkYsIDB4MjIsIDB4MTYsIDB4NDgsIDB4RDAsIDB4RjksIDB4MTgs IDB4QTksIDB4Q0EsIDB4RkEsIDB4NUQsIDB4NUMsCisrICAgIDB4QTcsIDB4NjUsIDB4NTIsIDB4 OEEsIDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4QTYsIDB4NTUsCisrICAg IDB4NjUsIDB4M0UsIDB4RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4MjgsIDB4 N0YsIDB4QjYsIDB4Q0YsCisrICAgIDB4ODIsIDB4REQsIDB4N0UsIDB4NTUsIDB4RTEsIDB4QjEs IDB4QkMsIDB4RTIsIDB4MTksIDB4MkIsIDB4MzAsIDB4QzIsCisrICAgIDB4MUIsIDB4MkIsIDB4 QjAsIDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIsIDB4OEMs CisrICAgIDB4RkYsIDB4OTUsIDB4RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4 OEYsIDB4OEIsIDB4OUMsIDB4Q0QsCisrICAgIDB4RUEsIDB4ODUsIDB4RUUsIDB4MDAsIDB4REMs IDB4MUMsIDB4QTcsIDB4RUIsIDB4RDAsIDB4OEYsIDB4OTksIDB4RjEsCisrICAgIDB4MTYsIDB4 MjgsIDB4MjQsIDB4NjQsIDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4REMs IDB4MDQsCisrICAgIDB4QkQsIDB4MzEsIDB4QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYsIDB4 QkYKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10g PSB7CisrICAgIDB4NjksIDB4NTIsIDB4MUIsIDB4NTEsIDB4NUUsIDB4MDYsIDB4Q0EsIDB4OUIs IDB4MTYsIDB4NTEsIDB4NUQsIDB4Q0YsCisrICAgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEsIDB4 NkEsIDB4NzcsIDB4NEMsIDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCisrICAgIDB4MTUs IDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4ODIsIDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4 MzIsIDB4RjEsCisrICAgIDB4MDQsIDB4QzEsIDB4NUEsIDB4MUEsIDB4RUQsIDB4MUUsIDB4OUEs IDB4QjYsIDB4NEMsIDB4NTQsIDB4OUYsIDB4RDgsCisrICAgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4 OEEsIDB4QkIsIDB4OUMsIDB4ODIsIDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCisrICAg IDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4MkIsIDB4RDksIDB4M0YsIDB4RTQsIDB4 NzUsIDB4OTIsIDB4NkIsCisrICAgIDB4QUYsIDB4NjIsIDB4N0MsIDB4NTIsIDB4RjAsIDB4RUUs IDB4MzMsIDB4REYsIDB4MUIsIDB4MUQsIDB4NDcsIDB4RTYsCisrICAgIDB4NTksIDB4NTYsIDB4 QTUsIDB4QjksIDB4NUMsIDB4RTYsIDB4NzcsIDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQsIDB4MDUs CisrICAgIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4RjcsIDB4N0YsIDB4QjIsIDB4 NjQsIDB4NzEsIDB4RTAsIDB4MkQsCisrICAgIDB4M0UsIDB4NjIsIDB4Q0UsIDB4QjUsIDB4M0Ys IDB4ODgsIDB4REYsIDB4MkQsIDB4QUIsIDB4OTgsIDB4NjUsIDB4OTEsCisrICAgIDB4REYsIDB4 NzAsIDB4MTQsIDB4QTUsIDB4M0YsIDB4MzYsIDB4QUIsIDB4ODQKKyt9OworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEExW10gPSB7CisrICAgIDB4ODYsIDB4 QjQsIDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIsIDB4NDUsIDB4NEQs IDB4REYsCisrICAgIDB4RTksIDB4MkQsIDB4RTEsIDB4ODMsIDB4NUYsIDB4QjUsIDB4MkYsIDB4 QzksIDB4Q0QsIDB4QzQsIDB4QjIsIDB4NzUsCisrICAgIDB4ODAsIDB4QTQsIDB4RjEsIDB4NEEs IDB4RTcsIDB4ODMsIDB4MTIsIDB4MUUsIDB4MUUsIDB4MTQsIDB4QjgsIDB4QUMsCisrICAgIDB4 MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQsIDB4RUUs IDB4QTksIDB4OTcsCisrICAgIDB4NzAsIDB4RkIsIDB4NUUsIDB4RTcsIDB4QjcsIDB4RTMsIDB4 NjIsIDB4MjMsIDB4NEIsIDB4MzgsIDB4QkUsIDB4RDYsCisrICAgIDB4NTMsIDB4MTUsIDB4Rjcs IDB4REYsIDB4ODcsIDB4QjQsIDB4MEUsIDB4Q0MsIDB4QjEsIDB4MUEsIDB4MTEsIDB4MTksCisr ICAgIDB4RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMs IDB4MEMsIDB4NTksIDB4RDcsCisrICAgIDB4NkYsIDB4NEMsIDB4M0MsIDB4MzcsIDB4NUIsIDB4 MzcsIDB4MDMsIDB4NjEsIDB4N0QsIDB4MjQsIDB4MUMsIDB4OTksCisrICAgIDB4NDgsIDB4QUYs IDB4ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIsIDB4QjIsIDB4REIsIDB4RUEsIDB4RUQsIDB4 NzYsCisrICAgIDB4OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4MzAs IDB4ODQsIDB4MUMsIDB4QjMsIDB4NjcsCisrICAgIDB4QTMsIDB4MjksIDB4ODAsIDB4NzAsIDB4 NTQsIDB4NjgsIDB4N0QsIDB4NDkKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGthdF9SU0FfWDkzMV9TSEEyNTZbXSA9IHsKKysgICAgMHg3RSwgMHhBMiwgMHg3NywgMHhGRSwg MHhCOCwgMHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKKysgICAgMHhF NSwgMHg1MiwgMHgxNSwgMHg4RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5Miwg MHgxQywgMHhERCwKKysgICAgMHhFQSwgMHhBMiwgMHgyRCwgMHg1QywgMHhEMSwgMHg2MiwgMHgw MCwgMHg0OSwgMHgwNSwgMHg5NSwgMHg3MywgMHhDRiwKKysgICAgMHgxNiwgMHg3NiwgMHg2OCwg MHhGNiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwKKysg ICAgMHhDNiwgMHg1MywgMHg4OCwgMHgyNiwgMHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgxMywg MHhCOCwgMHhGMCwgMHg0QiwKKysgICAgMHgwMCwgMHg4NSwgMHhGMywgMHhERCwgMHgwNywgMHg1 MCwgMHhFQiwgMHgyMCwgMHhDNCwgMHgzOCwgMHgwRSwgMHg5OCwKKysgICAgMHhBRCwgMHg0RSwg MHg0OSwgMHgyQywgMHhENywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhF QywKKysgICAgMHg3RSwgMHg3NSwgMHg4OSwgMHg2OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4NSwg MHg0NiwgMHg4RCwgMHhBMCwgMHg4QywKKysgICAgMHgzMywgMHgxRCwgMHg4MiwgMHg4QywgMHgw MywgMHhFQSwgMHg2OSwgMHg4OCwgMHgzNSwgMHhBMSwgMHg0MiwgMHhCRCwKKysgICAgMHgyMSwg MHhFRCwgMHg4RCwgMHhCQywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1 QiwgMHhEQywKKysgICAgMHhFMywgMHhFMiwgMHhFOCwgMHgwQSwgMHgwQSwgMHgyOSwgMHg5NCwg MHg4MAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NI QTM4NFtdID0geworKyAgICAweDVDLCAweDdELCAweDk2LCAweDM1LCAweEVDLCAweDdFLCAweDEx LCAweDM4LCAweEJCLCAweDdCLCAweEVDLCAweDdCLAorKyAgICAweEYyLCAweDgyLCAweDhFLCAw eDk5LCAweEJELCAweEVGLCAweEQ4LCAweEFFLCAweEQ3LCAweDM5LCAweDM3LCAweENCLAorKyAg ICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0LCAweDJFLCAweDQwLCAweEI5LCAw eEJFLCAweDJFLCAweEUzLAorKyAgICAweEVGLCAweDc4LCAweDgzLCAweDE4LCAweDQ0LCAweDM1 LCAweDlDLCAweDhFLCAweEQ3LCAweDRBLCAweDYzLCAweEY2LAorKyAgICAweDU3LCAweEMyLCAw eEIwLCAweDA4LCAweDUxLCAweDczLCAweENGLCAweENBLCAweDk5LCAweDY2LCAweEVFLCAweDMx LAorKyAgICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAweDdCLCAweDQxLCAw eDFFLCAweDZELCAweDhELCAweEYxLAorKyAgICAweDNFLCAweDlDLCAweDM1LCAweDk1LCAweDU4 LCAweERELCAweDJCLCAweEQ1LCAweEEwLCAweDYwLCAweDQxLCAweDc5LAorKyAgICAweDI0LCAw eDIyLCAweEU0LCAweEI3LCAweEJGLCAweDQ3LCAweDUzLCAweEY2LCAweDM0LCAweEQ1LCAweDdD LCAweEZGLAorKyAgICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAweEI5LCAw eERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAorKyAgICAweEVGLCAweDAxLCAweEU2LCAweDVF LCAweDM5LCAweDMxLCAweDJELCAweDcxLCAweEE1LCAweERDLCAweEM2LCAweDZELAorKyAgICAw eEUyLCAweENELCAweDg1LCAweERCLCAweDczLCAweDgyLCAweDY1LCAweDI4CisrfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBNTEyW10gPSB7CisrICAg IDB4QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQsIDB4 M0EsIDB4QzEsIDB4NjMsCisrICAgIDB4RkMsIDB4QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4Nzks IDB4REQsIDB4NEIsIDB4RTEsIDB4RDksIDB4REEsIDB4QUMsCisrICAgIDB4RTcsIDB4NDcsIDB4 MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEsIDB4QUEsIDB4MDUsIDB4OUUsIDB4NzcsIDB4RDcs CisrICAgIDB4M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4 NUUsIDB4RjksIDB4MTQsIDB4MjgsCisrICAgIDB4QTAsIDB4OTksIDB4NzQsIDB4NjQsIDB4NzAs IDB4NEUsIDB4RjIsIDB4RTMsIDB4RkEsIDB4QzcsIDB4RjgsIDB4QzUsCisrICAgIDB4NkUsIDB4 MkIsIDB4NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4QzgsIDB4MTAsIDB4MzQsIDB4NTMsIDB4RDIs IDB4QUYsCisrICAgIDB4MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQsIDB4 NzIsIDB4MTAsIDB4RTAsIDB4RjYsIDB4RDAsCisrICAgIDB4Q0UsIDB4OEEsIDB4NkYsIDB4QTEs IDB4OTUsIDB4ODksIDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYsIDB4MDksCisrICAgIDB4 OUYsIDB4MDksIDB4Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4RUQsIDB4MDQsIDB4MkQs IDB4RkIsIDB4N0MsCisrICAgIDB4MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4 OTIsIDB4NDIsIDB4MTEsIDB4MzAsIDB4NzEsIDB4MUIsCisrICAgIDB4NjAsIDB4ODMsIDB4MTgs IDB4ODgsIDB4QTMsIDB4RjUsIDB4NTksIDB4QzMKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0 X3JzYSgpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgUlNBICprZXk7CisrICAgIEVWUF9Q S0VZICpwayA9IE5VTEw7CisrCisrICAgIGlmICgoa2V5ID0gUlNBX25ldygpKSA9PSBOVUxMKQor KyAgICAgICAgZ290byBlcnI7CisrICAgIHNldHJzYWtleShrZXkpOworKyAgICBpZiAoKHBrID0g RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgRVZQ X1BLRVlfYXNzaWduX1JTQShwaywga2V5KTsKKysKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfU0hBMSwgc2l6ZW9mKGthdF9SU0FfU0hBMSks CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9zaGExKCksIEVWUF9NRF9D VFhfRkxBR19QQURfUEtDUzEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJS U0EgU0hBMSBQS0NTIzEiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9TSEEyMjQsIHNpemVvZihrYXRf UlNBX1NIQTIyNCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9zaGEy MjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlJTQSBTSEEyMjQgUEtDUyMxIikpCisrICAgICAgICBnb3RvIGVycjsKKysg ICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRf dGJzKSAtIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfU0hB MjU2LCBzaXplb2Yoa2F0X1JTQV9TSEEyNTYpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBMjU2IFBLQ1MjMSIpKQorKyAgICAg ICAgZ290byBlcnI7CisrICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBrYXRfUlNBX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfU0hBMzg0KSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BLQ1MxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNBIFNIQTM4NCBQ S0NTIzEiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1 cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1NIQTUx MiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9zaGE1MTIoKSwgRVZQ X01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlJTQSBTSEE1MTIgUEtDUyMxIikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgaWYg KCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAt IDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NIQTEs IHNpemVvZihrYXRfUlNBX1BTU19TSEExKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBMSBQU1MiKSkKKysgICAgICAgIGdvdG8gZXJy OworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JT QV9QU1NfU0hBMjI0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo a2F0X1JTQV9QU1NfU0hBMjI0KSwgRVZQX3NoYTIyNCgpLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgIlJTQSBTSEEyMjQgUFNTIikp CisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qo cGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NIQTI1NiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTI1NiksIEVWUF9zaGEyNTYoKSwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1Ms ICJSU0EgU0hBMjU2IFBTUyIpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghZmlwc19w a2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1BTU19TSEEzODQsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrYXRfUlNBX1BTU19TSEEzODQp LCBFVlBfc2hhMzg0KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9N RF9DVFhfRkxBR19QQURfUFNTLCAiUlNBIFNIQTM4NCBQU1MiKSkKKysgICAgICAgIGdvdG8gZXJy OworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9m KGthdF90YnMpIC0gMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JT QV9QU1NfU0hBNTEyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo a2F0X1JTQV9QU1NfU0hBNTEyKSwgRVZQX3NoYTUxMigpLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgIlJTQSBTSEE1MTIgUFNTIikp CisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGthdF9SU0FfWDkzMV9TSEExLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTEpLCBFVlBfc2hhMSgpLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEs ICJSU0EgU0hBMSBYOTMxIikpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgLyogTkI6IFNIQTIy NCBub3Qgc3VwcG9ydGVkIGluIFg5LjMxICovCisrICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVy ZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1g5MzFfU0hBMjU2LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksIEVWUF9zaGEy NTYoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFH X1BBRF9YOTMxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNBIFNIQTI1 NiBYOTMxIikpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfWDkzMV9TSEEzODQsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMzg0KSwgRVZQX3No YTM4NCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZM QUdfUEFEX1g5MzEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hB Mzg0IFg5MzEiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9YOTMxX1NIQTUxMiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLCBFVlBf c2hhNTEyKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhf RkxBR19QQURfWDkzMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBT SEE1MTIgWDkzMSIpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIHJldCA9IDE7CisrCisr IGVycjoKKysgICAgaWYgKHBrKQorKyAgICAgICAgRVZQX1BLRVlfZnJlZShwayk7CisrICAgIGVs c2UgaWYgKGtleSkKKysgICAgICAgIFJTQV9mcmVlKGtleSk7CisrICAgIHJldHVybiByZXQ7Cisr fQorKworKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmIE9QRU5TU0xfRklQ UyAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcu Yy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMKKy0tLSBv cGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMJMjAxNS0xMi0w NCAxMzo1NTo1MS45Njg1NjI2NjggKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlw cy9maXBzX3JzYV94OTMxZy5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY4NTYyNjY4ICswMTAwCitA QCAtMCwwICsxLDI3MyBAQAorKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCisrLyogQ29weXJp Z2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxs IHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVt ZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4K KysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRo IE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1l cmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisr ICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRo ZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NM IGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlz dHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhj ZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisr ICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkg Q29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQu CisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNo b3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRz IG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0 ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlv biAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0 b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5 cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0 IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBh cmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUg YW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20g CisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBp bmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAq IAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycg QU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBP UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK KysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2Vu Y2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZl cnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4g IGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRl ciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1 YmxpYyBMaWNlbmNlLl0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8 c3RyaW5nLmg+CisrI2luY2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworK2V4dGVy biBpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpOworKyNlbmRpZgorKworKy8qIFg5LjMxIFJT QSBrZXkgZGVyaXZhdGlvbiBhbmQgZ2VuZXJhdGlvbiAqLworKworK2ludCBSU0FfWDkzMV9kZXJp dmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsCisrICAg ICAgICAgICAgICAgICAgICAgICBCSUdOVU0gKnEyLCBjb25zdCBCSUdOVU0gKlhwMSwgY29uc3Qg QklHTlVNICpYcDIsCisrICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCSUdOVU0gKlhwLCBj b25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsCisrICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBCSUdOVU0gKlhxLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKKyt7 CisrICAgIEJJR05VTSAqcjAgPSBOVUxMLCAqcjEgPSBOVUxMLCAqcjIgPSBOVUxMLCAqcjMgPSBO VUxMOworKyAgICBCTl9DVFggKmN0eCA9IE5VTEwsICpjdHgyID0gTlVMTDsKKysKKysgICAgaWYg KCFyc2EpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgY3R4ID0gQk5fQ1RYX25ldygpOwor KyAgICBpZiAoIWN0eCkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBCTl9DVFhfc3RhcnQoY3R4 KTsKKysKKysgICAgcjAgPSBCTl9DVFhfZ2V0KGN0eCk7CisrICAgIHIxID0gQk5fQ1RYX2dldChj dHgpOworKyAgICByMiA9IEJOX0NUWF9nZXQoY3R4KTsKKysgICAgcjMgPSBCTl9DVFhfZ2V0KGN0 eCk7CisrCisrICAgIGlmIChyMyA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlm ICghcnNhLT5lKSB7CisrICAgICAgICByc2EtPmUgPSBCTl9kdXAoZSk7CisrICAgICAgICBpZiAo IXJzYS0+ZSkKKysgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgfSBlbHNlCisrICAgICAgICBl ID0gcnNhLT5lOworKworKyAgICAvKiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBvbmx5 IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4KKysgICAgICogVGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFt cyB0byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFtZXRlcnMuCisrICAgICAqLworKworKyAgICBpZiAo WHAgJiYgIXJzYS0+cCkgeworKyAgICAgICAgcnNhLT5wID0gQk5fbmV3KCk7CisrICAgICAgICBp ZiAoIXJzYS0+cCkKKysgICAgICAgICAgICBnb3RvIGVycjsKKysKKysgICAgICAgIGlmICghQk5f WDkzMV9kZXJpdmVfcHJpbWVfZXgocnNhLT5wLCBwMSwgcDIsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikpCisrICAgICAgICAg ICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgaWYgKFhxICYmICFyc2EtPnEpIHsKKysgICAg ICAgIHJzYS0+cSA9IEJOX25ldygpOworKyAgICAgICAgaWYgKCFyc2EtPnEpCisrICAgICAgICAg ICAgZ290byBlcnI7CisrICAgICAgICBpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+ cSwgcTEsIHEyLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYcSwgWHEx LCBYcTIsIGUsIGN0eCwgY2IpKQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisr ICAgIGlmICghcnNhLT5wIHx8ICFyc2EtPnEpIHsKKysgICAgICAgIEJOX0NUWF9lbmQoY3R4KTsK KysgICAgICAgIEJOX0NUWF9mcmVlKGN0eCk7CisrICAgICAgICByZXR1cm4gMjsKKysgICAgfQor KworKyAgICAvKiBTaW5jZSBib3RoIHByaW1lcyBhcmUgc2V0IHdlIGNhbiBub3cgY2FsY3VsYXRl IGFsbCByZW1haW5pbmcgCisrICAgICAqIGNvbXBvbmVudHMuCisrICAgICAqLworKworKyAgICAv KiBjYWxjdWxhdGUgbiAqLworKyAgICByc2EtPm4gPSBCTl9uZXcoKTsKKysgICAgaWYgKHJzYS0+ biA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghQk5fbXVsKHJzYS0+biwg cnNhLT5wLCByc2EtPnEsIGN0eCkpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgLyogY2Fs Y3VsYXRlIGQgKi8KKysgICAgaWYgKCFCTl9zdWIocjEsIHJzYS0+cCwgQk5fdmFsdWVfb25lKCkp KQorKyAgICAgICAgZ290byBlcnI7ICAgICAgICAgICAgICAgLyogcC0xICovCisrICAgIGlmICgh Qk5fc3ViKHIyLCByc2EtPnEsIEJOX3ZhbHVlX29uZSgpKSkKKysgICAgICAgIGdvdG8gZXJyOyAg ICAgICAgICAgICAgIC8qIHEtMSAqLworKyAgICBpZiAoIUJOX211bChyMCwgcjEsIHIyLCBjdHgp KQorKyAgICAgICAgZ290byBlcnI7ICAgICAgICAgICAgICAgLyogKHAtMSkocS0xKSAqLworKwor KyAgICBpZiAoIUJOX2djZChyMywgcjEsIHIyLCBjdHgpKQorKyAgICAgICAgZ290byBlcnI7Cisr CisrICAgIGlmICghQk5fZGl2KHIwLCBOVUxMLCByMCwgcjMsIGN0eCkpCisrICAgICAgICBnb3Rv IGVycjsgICAgICAgICAgICAgICAvKiBMQ00oKHAtMSkocS0xKSkgKi8KKysKKysgICAgY3R4MiA9 IEJOX0NUWF9uZXcoKTsKKysgICAgaWYgKCFjdHgyKQorKyAgICAgICAgZ290byBlcnI7CisrCisr ICAgIHJzYS0+ZCA9IEJOX21vZF9pbnZlcnNlKE5VTEwsIHJzYS0+ZSwgcjAsIGN0eDIpOyAvKiBk ICovCisrICAgIGlmIChyc2EtPmQgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAg ICAvKiBjYWxjdWxhdGUgZCBtb2QgKHAtMSkgKi8KKysgICAgcnNhLT5kbXAxID0gQk5fbmV3KCk7 CisrICAgIGlmIChyc2EtPmRtcDEgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBp ZiAoIUJOX21vZChyc2EtPmRtcDEsIHJzYS0+ZCwgcjEsIGN0eCkpCisrICAgICAgICBnb3RvIGVy cjsKKysKKysgICAgLyogY2FsY3VsYXRlIGQgbW9kIChxLTEpICovCisrICAgIHJzYS0+ZG1xMSA9 IEJOX25ldygpOworKyAgICBpZiAocnNhLT5kbXExID09IE5VTEwpCisrICAgICAgICBnb3RvIGVy cjsKKysgICAgaWYgKCFCTl9tb2QocnNhLT5kbXExLCByc2EtPmQsIHIyLCBjdHgpKQorKyAgICAg ICAgZ290byBlcnI7CisrCisrICAgIC8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8K KysgICAgcnNhLT5pcW1wID0gQk5fbW9kX2ludmVyc2UoTlVMTCwgcnNhLT5xLCByc2EtPnAsIGN0 eDIpOworKworKyBlcnI6CisrICAgIGlmIChjdHgpIHsKKysgICAgICAgIEJOX0NUWF9lbmQoY3R4 KTsKKysgICAgICAgIEJOX0NUWF9mcmVlKGN0eCk7CisrICAgIH0KKysgICAgaWYgKGN0eDIpCisr ICAgICAgICBCTl9DVFhfZnJlZShjdHgyKTsKKysgICAgLyogSWYgdGhpcyBpcyBzZXQgYWxsIGNh bGxzIHN1Y2Nlc3NmdWwgKi8KKysgICAgaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVMTCkKKysg ICAgICAgIHJldHVybiAxOworKworKyAgICByZXR1cm4gMDsKKysKKyt9CisrCisraW50IFJTQV9Y OTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYikKKyt7CisrICAgIGlu dCBvayA9IDA7CisrICAgIEJJR05VTSAqWHAgPSBOVUxMLCAqWHEgPSBOVUxMOworKyAgICBCTl9D VFggKmN0eCA9IE5VTEw7CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19t b2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmCisrICAg ICAgICAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKKysgICAg ICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCwgRklQU19SX0tFWV9U T09fU0hPUlQpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgaWYgKGJpdHMg JiAweGZmKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlf RVgsIEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAg IH0KKysKKysgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKKysgICAgICAgIEZJUFNl cnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCwgRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrI2VuZGlmCisrCisrICAgIGN0 eCA9IEJOX0NUWF9uZXcoKTsKKysgICAgaWYgKCFjdHgpCisrICAgICAgICBnb3RvIGVycm9yOwor KworKyAgICBCTl9DVFhfc3RhcnQoY3R4KTsKKysgICAgWHAgPSBCTl9DVFhfZ2V0KGN0eCk7Cisr ICAgIFhxID0gQk5fQ1RYX2dldChjdHgpOworKyAgICBpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfWHBx KFhwLCBYcSwgYml0cywgY3R4KSkKKysgICAgICAgIGdvdG8gZXJyb3I7CisrCisrICAgIHJzYS0+ cCA9IEJOX25ldygpOworKyAgICByc2EtPnEgPSBCTl9uZXcoKTsKKysgICAgaWYgKCFyc2EtPnAg fHwgIXJzYS0+cSkKKysgICAgICAgIGdvdG8gZXJyb3I7CisrCisrICAgIC8qIEdlbmVyYXRlIHR3 byBwcmltZXMgZnJvbSBYcCwgWHEgKi8KKysKKysgICAgaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3By aW1lX2V4KHJzYS0+cCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHAsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlLCBjdHgsIGNiKSkKKysgICAgICAgIGdvdG8gZXJyb3I7 CisrCisrICAgIGlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnEsIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwsIFhxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZSwgY3R4LCBjYikpCisrICAgICAgICBnb3RvIGVycm9yOworKworKyAgICAvKiBTaW5jZSByc2Et PnAgYW5kIHJzYS0+cSBhcmUgdmFsaWQgdGhpcyBjYWxsIHdpbGwganVzdCBkZXJpdmUKKysgICAg ICogcmVtYWluaW5nIFJTQSBjb21wb25lbnRzLgorKyAgICAgKi8KKysKKysgICAgaWYgKCFSU0Ff WDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBlLCBj YikpCisrICAgICAgICBnb3RvIGVycm9yOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAg aWYgKCFmaXBzX2NoZWNrX3JzYShyc2EpKQorKyAgICAgICAgZ290byBlcnJvcjsKKysjZW5kaWYK KysKKysgICAgb2sgPSAxOworKworKyBlcnJvcjoKKysgICAgaWYgKGN0eCkgeworKyAgICAgICAg Qk5fQ1RYX2VuZChjdHgpOworKyAgICAgICAgQk5fQ1RYX2ZyZWUoY3R4KTsKKysgICAgfQorKwor KyAgICBpZiAob2spCisrICAgICAgICByZXR1cm4gMTsKKysKKysgICAgcmV0dXJuIDA7CisrCisr fQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMKKy0t LSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jLmZpcHMJMjAx NS0xMi0wNCAxMzo1NTo1MS45Njg1NjI2NjggKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlw dG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY4NTYyNjY4 ICswMTAwCitAQCAtMCwwICsxLDE0NSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0 IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAq CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEu IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w eXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu CisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRp c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAg IHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAq ICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVu U1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9v bGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBl bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0 aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlz c2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisr ICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJl IGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhl aXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUg T3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3Jt IHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVY UFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g Tk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRP UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP UiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJ TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKwor KyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5j bHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljIGNvbnN0IGNoYXIgdGVzdFtdWzYwXSA9IHsKKysgICAg IiIsCisrICAgICJhYmMiLAorKyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtp amtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF0gPSB7CisrICAgIHsweGRhLCAweDM5LCAweGEz LCAweGVlLCAweDVlLCAweDZiLCAweDRiLCAweDBkLCAweDMyLCAweDU1LAorKyAgICAgMHhiZiwg MHhlZiwgMHg5NSwgMHg2MCwgMHgxOCwgMHg5MCwgMHhhZiwgMHhkOCwgMHgwNywgMHgwOX0sCisr ICAgIHsweGE5LCAweDk5LCAweDNlLCAweDM2LCAweDQ3LCAweDA2LCAweDgxLCAweDZhLCAweGJh LCAweDNlLAorKyAgICAgMHgyNSwgMHg3MSwgMHg3OCwgMHg1MCwgMHhjMiwgMHg2YywgMHg5Yywg MHhkMCwgMHhkOCwgMHg5ZH0sCisrICAgIHsweDg0LCAweDk4LCAweDNlLCAweDQ0LCAweDFjLCAw eDNiLCAweGQyLCAweDZlLCAweGJhLCAweGFlLAorKyAgICAgMHg0YSwgMHhhMSwgMHhmOSwgMHg1 MSwgMHgyOSwgMHhlNSwgMHhlNSwgMHg0NiwgMHg3MCwgMHhmMX0sCisrfTsKKysKKytzdGF0aWMg aW50IGNvcnJ1cHRfc2hhOworKworK3ZvaWQgRklQU19jb3JydXB0X3NoYTEoKQorK3sKKysgICAg Y29ycnVwdF9zaGEgPSAxOworK30KKysKKytpbnQgRklQU19zZWxmdGVzdF9zaGExKCkKKyt7Cisr ICAgIGludCBuOworKworKyAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHRlc3QpIC8gc2l6ZW9m KHRlc3RbMF0pOyArK24pIHsKKysgICAgICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9M RU5HVEhdOworKworKyAgICAgICAgRVZQX0RpZ2VzdCh0ZXN0W25dLCBzdHJsZW4odGVzdFtuXSkg KyBjb3JydXB0X3NoYSwgbWQsIE5VTEwsCisrICAgICAgICAgICAgICAgICAgIEVWUF9zaGExKCks IE5VTEwpOworKyAgICAgICAgaWYgKG1lbWNtcChtZCwgcmV0W25dLCBzaXplb2YgbWQpKSB7Cisr ICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExLCBGSVBTX1JfU0VM RlRFU1RfRkFJTEVEKTsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAg fQorKyAgICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNn X3NoYTI1NltdID0KKysgICAgeyAweGZhLCAweDQ4LCAweDU5LCAweDJhLCAweGUxLCAweGFlLCAw eDFmLCAweDMwLAorKyAgICAweGZjCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBkaWdfc2hhMjU2W10gPQorKyAgICB7IDB4ZjcsIDB4MjYsIDB4ZDgsIDB4OTgsIDB4NDcsIDB4 OTEsIDB4NjgsIDB4NWIsCisrICAgIDB4OWUsIDB4MzksIDB4YjIsIDB4NTgsIDB4YmIsIDB4NzUs IDB4YmYsIDB4MDEsCisrICAgIDB4MTcsIDB4MGMsIDB4ODQsIDB4MDAsIDB4MDEsIDB4N2EsIDB4 OTQsIDB4ODMsCisrICAgIDB4ZjMsIDB4MGIsIDB4MTUsIDB4ODQsIDB4NGIsIDB4NjksIDB4ODgs IDB4OGEKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGE1MTJbXSA9 CisrICAgIHsgMHgzNywgMHhkMSwgMHgzNSwgMHg5ZCwgMHgxOCwgMHg0MSwgMHhlOSwgMHhiNywK KysgICAgMHg2ZCwgMHg5YSwgMHgxMywgMHhkYSwgMHg1ZiwgMHhmMywgMHhiZAorK307CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnX3NoYTUxMltdID0KKysgICAgeyAweDExLCAw eDEzLCAweGM0LCAweDE5LCAweGVkLCAweDJiLCAweDFkLCAweDE2LAorKyAgICAweDExLCAweGVi LCAweDliLCAweGJlLCAweGYwLCAweDdmLCAweGNmLCAweDQ0LAorKyAgICAweDhiLCAweGQ3LCAw eDU3LCAweGJkLCAweDhkLCAweGE5LCAweDI1LCAweGIwLAorKyAgICAweDQ3LCAweDI1LCAweGQ2 LCAweDZjLCAweDlhLCAweDU0LCAweDdmLCAweDhmLAorKyAgICAweDBiLCAweDUzLCAweDFhLCAw eDEwLCAweDY4LCAweDMyLCAweDAzLCAweDM4LAorKyAgICAweDgyLCAweGM0LCAweDg3LCAweGM0 LCAweGVhLCAweDBlLCAweGQxLCAweDA0LAorKyAgICAweGE5LCAweDk4LCAweGMxLCAweDA1LCAw eGEzLCAweGYzLCAweGY4LCAweGIxLAorKyAgICAweGFmLCAweGJjLCAweGQ5LCAweDc4LCAweDdl LCAweGVlLCAweDNkLCAweDQzCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9zaGEyKHZvaWQp CisreworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKKysKKysg ICAgRVZQX0RpZ2VzdChtc2dfc2hhMjU2LCBzaXplb2YobXNnX3NoYTI1NiksIG1kLCBOVUxMLCBF VlBfc2hhMjU2KCksIE5VTEwpOworKyAgICBpZiAobWVtY21wKGRpZ19zaGEyNTYsIG1kLCBzaXpl b2YoZGlnX3NoYTI1NikpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VU LCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9Cisr CisrICAgIEVWUF9EaWdlc3QobXNnX3NoYTUxMiwgc2l6ZW9mKG1zZ19zaGE1MTIpLCBtZCwgTlVM TCwgRVZQX3NoYTUxMigpLCBOVUxMKTsKKysgICAgaWYgKG1lbWNtcChkaWdfc2hhNTEyLCBtZCwg c2l6ZW9mKGRpZ19zaGE1MTIpKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RF X1NFVCwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAg fQorKworKyAgICByZXR1cm4gMTsKKyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYworLS0tIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMuZmlwcwkyMDE1LTEyLTA0IDEzOjU1 OjUxLjk2ODU2MjY2OCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNf c3RhbmRhbG9uZV9obWFjLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45Njg1NjI2NjggKzAxMDAKK0BA IC0wLDAgKzEsMjY4IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl CisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUg PHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysKKysjaWZuZGVmIEZJUFNDQU5JU1RFUl9P CisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkKKyt7CisrICAgIHJldHVybiAwOworK30KKysK Kyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKQorK3sKKyt9CisrI2VuZGlmCisrCisrI2lmZGVm IE9QRU5TU0xfRklQUworK2ludCBibl9tdWxfbW9udF9mcHU2NChCTl9VTE9ORyAqcnAsIGNvbnN0 IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcgKmJwLAorKyAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBCTl9VTE9ORyAqbnAsIGNvbnN0IEJOX1VMT05HICpuMCwgaW50IG51bSkKKyt7Cisr ICAgIHJldHVybiAwOworK307CisrCisraW50IGJuX211bF9tb250X2ludChCTl9VTE9ORyAqcnAs IGNvbnN0IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcgKmJwLAorKyAgICAgICAgICAgICAg ICAgICAgY29uc3QgQk5fVUxPTkcgKm5wLCBjb25zdCBCTl9VTE9ORyAqbjAsIGludCBudW0pCisr eworKyAgICByZXR1cm4gMDsKKyt9OworKworKyMgaWYgICAgIGRlZmluZWQoX19pMzg2KSAgIHx8 IGRlZmluZWQoX19pMzg2X18pICAgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBcCisrICAgICAgICBk ZWZpbmVkKF9fSU5URUxfXykgfHwgXAorKyAgICAgICAgZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVm aW5lZChfX3g4Nl82NF9fKSB8fCBcCisrICAgICAgICBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZp bmVkKF9NX1g2NCkKKysKKyt1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbNF07CisrdW5z aWduZWQgbG9uZyAqT1BFTlNTTF9pYTMyY2FwX2xvYyh2b2lkKQorK3sKKysgICAgaWYgKHNpemVv Zihsb25nKSA9PSA0KQorKyAgICAgICAgLyoKKysgICAgICAgICAqIElmIDMyLWJpdCBhcHBsaWNh dGlvbiBwdWxscyBhZGRyZXNzIG9mIE9QRU5TU0xfaWEzMmNhcF9QWzBdCisrICAgICAgICAgKiBj bGVhciBzZWNvbmQgZWxlbWVudCB0byBtYWludGFpbiB0aGUgaWxsdXNpb24gdGhhdCB2ZWN0b3IK KysgICAgICAgICAqIGlzIDMyLWJpdC4KKysgICAgICAgICAqLworKyAgICAgICAgT1BFTlNTTF9p YTMyY2FwX1BbMV0gPSAwOworKworKyAgICBPUEVOU1NMX2lhMzJjYXBfUFsyXSA9IDA7CisrCisr ICAgIHJldHVybiAodW5zaWduZWQgbG9uZyAqKU9QRU5TU0xfaWEzMmNhcF9QOworK30KKysKKysj ICBpZiBkZWZpbmVkKE9QRU5TU0xfQ1BVSURfT0JKKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FT TSkgJiYgIWRlZmluZWQoSTM4Nl9PTkxZKQorKyMgICBkZWZpbmUgT1BFTlNTTF9DUFVJRF9TRVRV UAorKyMgICBpZiBkZWZpbmVkKF9XSU4zMikKKyt0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgSUEz MkNBUDsKKysjICAgZWxzZQorK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIElBMzJDQVA7Cisr IyAgIGVuZGlmCisrdm9pZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpCisreworKyAgICBzdGF0 aWMgaW50IHRyaWdnZXIgPSAwOworKyAgICBJQTMyQ0FQIE9QRU5TU0xfaWEzMl9jcHVpZCh1bnNp Z25lZCBpbnQgKik7CisrICAgIElBMzJDQVAgdmVjOworKyAgICBjaGFyICplbnY7CisrCisrICAg IGlmICh0cmlnZ2VyKQorKyAgICAgICAgcmV0dXJuOworKworKyAgICB0cmlnZ2VyID0gMTsKKysg ICAgaWYgKChlbnYgPSBnZXRlbnYoIk9QRU5TU0xfaWEzMmNhcCIpKSkgeworKyAgICAgICAgaW50 IG9mZiA9IChlbnZbMF0gPT0gJ34nKSA/IDEgOiAwOworKyMgICBpZiBkZWZpbmVkKF9XSU4zMikK KysgICAgICAgIGlmICghc3NjYW5mKGVudiArIG9mZiwgIiVJNjRpIiwgJnZlYykpCisrICAgICAg ICAgICAgdmVjID0gc3RydG91bChlbnYgKyBvZmYsIE5VTEwsIDApOworKyMgICBlbHNlCisrICAg ICAgICBpZiAoIXNzY2FuZihlbnYgKyBvZmYsICIlbGxpIiwgKGxvbmcgbG9uZyAqKSZ2ZWMpKQor KyAgICAgICAgICAgIHZlYyA9IHN0cnRvdWwoZW52ICsgb2ZmLCBOVUxMLCAwKTsKKysjICAgZW5k aWYKKysgICAgICAgIGlmIChvZmYpCisrICAgICAgICAgICAgdmVjID0gT1BFTlNTTF9pYTMyX2Nw dWlkKE9QRU5TU0xfaWEzMmNhcF9QKSAmIH52ZWM7CisrICAgICAgICBlbHNlIGlmIChlbnZbMF0g PT0gJzonKQorKyAgICAgICAgICAgIHZlYyA9IE9QRU5TU0xfaWEzMl9jcHVpZChPUEVOU1NMX2lh MzJjYXBfUCk7CisrCisrICAgICAgICBPUEVOU1NMX2lhMzJjYXBfUFsyXSA9IDA7CisrICAgICAg ICBpZiAoKGVudiA9IHN0cmNocihlbnYsICc6JykpKSB7CisrICAgICAgICAgICAgdW5zaWduZWQg aW50IHZlY3g7CisrICAgICAgICAgICAgZW52Kys7CisrICAgICAgICAgICAgb2ZmID0gKGVudlsw XSA9PSAnficpID8gMSA6IDA7CisrICAgICAgICAgICAgdmVjeCA9IHN0cnRvdWwoZW52ICsgb2Zm LCBOVUxMLCAwKTsKKysgICAgICAgICAgICBpZiAob2ZmKQorKyAgICAgICAgICAgICAgICBPUEVO U1NMX2lhMzJjYXBfUFsyXSAmPSB+dmVjeDsKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAg ICAgICAgIE9QRU5TU0xfaWEzMmNhcF9QWzJdID0gdmVjeDsKKysgICAgICAgIH0KKysgICAgfSBl bHNlCisrICAgICAgICB2ZWMgPSBPUEVOU1NMX2lhMzJfY3B1aWQoT1BFTlNTTF9pYTMyY2FwX1Ap OworKworKyAgICAvKgorKyAgICAgKiB8KDE8PDEwKSBzZXRzIGEgcmVzZXJ2ZWQgYml0IHRvIHNp Z25hbCB0aGF0IHZhcmlhYmxlCisrICAgICAqIHdhcyBpbml0aWFsaXplZCBhbHJlYWR5Li4uIFRo aXMgaXMgdG8gYXZvaWQgaW50ZXJmZXJlbmNlCisrICAgICAqIHdpdGggY3B1aWQgc25pcHBldHMg aW4gRUxGIC5pbml0IHNlZ21lbnQuCisrICAgICAqLworKyAgICBPUEVOU1NMX2lhMzJjYXBfUFsw XSA9ICh1bnNpZ25lZCBpbnQpdmVjIHwgKDEgPDwgMTApOworKyAgICBPUEVOU1NMX2lhMzJjYXBf UFsxXSA9ICh1bnNpZ25lZCBpbnQpKHZlYyA+PiAzMik7CisrfQorKyMgIGVsc2UKKyt1bnNpZ25l ZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbNF07CisrIyAgZW5kaWYKKysKKysjIGVsc2UKKyt1bnNp Z25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBfbG9jKHZvaWQpCisreworKyAgICByZXR1cm4gTlVM TDsKKyt9CisrIyBlbmRpZgorK2ludCBPUEVOU1NMX05PTlBJQ19yZWxvY2F0ZWQgPSAwOworKyMg aWYgIWRlZmluZWQoT1BFTlNTTF9DUFVJRF9TRVRVUCkgJiYgIWRlZmluZWQoT1BFTlNTTF9DUFVJ RF9PQkopCisrdm9pZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpCisreworK30KKysjIGVuZGlm CisrCisrc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQTI1Nl9DVFggKm1kX2N0eCwgU0hBMjU2X0NU WCAqb19jdHgsIGNvbnN0IGNoYXIgKmtleSkKKyt7CisrICAgIHNpemVfdCBsZW4gPSBzdHJsZW4o a2V5KTsKKysgICAgaW50IGk7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5bWRbSE1BQ19NQVhfTURf Q0JMT0NLXTsKKysgICAgdW5zaWduZWQgY2hhciBwYWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKKysK KysgICAgaWYgKGxlbiA+IFNIQV9DQkxPQ0spIHsKKysgICAgICAgIFNIQTI1Nl9Jbml0KG1kX2N0 eCk7CisrICAgICAgICBTSEEyNTZfVXBkYXRlKG1kX2N0eCwga2V5LCBsZW4pOworKyAgICAgICAg U0hBMjU2X0ZpbmFsKGtleW1kLCBtZF9jdHgpOworKyAgICAgICAgbGVuID0gU0hBMjU2X0RJR0VT VF9MRU5HVEg7CisrICAgIH0gZWxzZQorKyAgICAgICAgbWVtY3B5KGtleW1kLCBrZXksIGxlbik7 CisrICAgIG1lbXNldCgma2V5bWRbbGVuXSwgJ1wwJywgSE1BQ19NQVhfTURfQ0JMT0NLIC0gbGVu KTsKKysKKysgICAgZm9yIChpID0gMDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSzsgaSsrKQorKyAg ICAgICAgcGFkW2ldID0gMHgzNiBeIGtleW1kW2ldOworKyAgICBTSEEyNTZfSW5pdChtZF9jdHgp OworKyAgICBTSEEyNTZfVXBkYXRlKG1kX2N0eCwgcGFkLCBTSEEyNTZfQ0JMT0NLKTsKKysKKysg ICAgZm9yIChpID0gMDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSzsgaSsrKQorKyAgICAgICAgcGFk W2ldID0gMHg1YyBeIGtleW1kW2ldOworKyAgICBTSEEyNTZfSW5pdChvX2N0eCk7CisrICAgIFNI QTI1Nl9VcGRhdGUob19jdHgsIHBhZCwgU0hBMjU2X0NCTE9DSyk7CisrfQorKworK3N0YXRpYyB2 b2lkIGhtYWNfZmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKm1kX2N0eCwKKysg ICAgICAgICAgICAgICAgICAgICAgIFNIQTI1Nl9DVFggKm9fY3R4KQorK3sKKysgICAgdW5zaWdu ZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOworKworKyAgICBTSEEyNTZfRmluYWwo YnVmLCBtZF9jdHgpOworKyAgICBTSEEyNTZfVXBkYXRlKG9fY3R4LCBidWYsIHNpemVvZiBidWYp OworKyAgICBTSEEyNTZfRmluYWwobWQsIG9fY3R4KTsKKyt9CisrCisrI2VuZGlmCisrCisraW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr ICAgIHN0YXRpYyBjaGFyIGtleVtdID0gIm9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQ IjsKKysgICAgaW50IG4sIGJpbmFyeSA9IDA7CisrCisrICAgIGlmIChhcmdjIDwgMikgeworKyAg ICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBbPGZpbGU+XStcbiIsIGFyZ3ZbMF0pOworKyAgICAg ICAgZXhpdCgxKTsKKysgICAgfQorKworKyAgICBuID0gMTsKKysgICAgaWYgKCFzdHJjbXAoYXJn dltuXSwgIi1iaW5hcnkiKSkgeworKyAgICAgICAgbisrOworKyAgICAgICAgYmluYXJ5ID0gMTsg ICAgICAgICAgICAgLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQuLi4gKi8KKysgICAgfQorKwor KyAgICBmb3IgKDsgbiA8IGFyZ2M7ICsrbikgeworKyAgICAgICAgRklMRSAqZiA9IGZvcGVuKGFy Z3Zbbl0sICJyYiIpOworKyAgICAgICAgU0hBMjU2X0NUWCBtZF9jdHgsIG9fY3R4OworKyAgICAg ICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrICAgICAgICBpbnQg aTsKKysKKysgICAgICAgIGlmICghZikgeworKyAgICAgICAgICAgIHBlcnJvcihhcmd2W25dKTsK KysgICAgICAgICAgICBleGl0KDIpOworKyAgICAgICAgfQorKworKyAgICAgICAgaG1hY19pbml0 KCZtZF9jdHgsICZvX2N0eCwga2V5KTsKKysgICAgICAgIGZvciAoOzspIHsKKysgICAgICAgICAg ICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgICAgICAgICBzaXplX3QgbCA9IGZyZWFkKGJ1ZiwgMSwg c2l6ZW9mIGJ1ZiwgZik7CisrCisrICAgICAgICAgICAgaWYgKGwgPT0gMCkgeworKyAgICAgICAg ICAgICAgICBpZiAoZmVycm9yKGYpKSB7CisrICAgICAgICAgICAgICAgICAgICBwZXJyb3IoYXJn dltuXSk7CisrICAgICAgICAgICAgICAgICAgICBleGl0KDMpOworKyAgICAgICAgICAgICAgICB9 IGVsc2UKKysgICAgICAgICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAg ICAgICAgICBTSEEyNTZfVXBkYXRlKCZtZF9jdHgsIGJ1ZiwgbCk7CisrICAgICAgICB9CisrICAg ICAgICBobWFjX2ZpbmFsKG1kLCAmbWRfY3R4LCAmb19jdHgpOworKworKyAgICAgICAgaWYgKGJp bmFyeSkgeworKyAgICAgICAgICAgIGZ3cml0ZShtZCwgU0hBMjU2X0RJR0VTVF9MRU5HVEgsIDEs IHN0ZG91dCk7CisrICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiAuLi4gZm9yIHNp bmdsZSghKSBmaWxlICovCisrICAgICAgICB9CisrCisrLyogICAgICBwcmludGYoIkhNQUMtU0hB MSglcyk9ICIsYXJndltuXSk7ICovCisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgU0hBMjU2X0RJ R0VTVF9MRU5HVEg7ICsraSkKKysgICAgICAgICAgICBwcmludGYoIiUwMngiLCBtZFtpXSk7Cisr ICAgICAgICBwcmludGYoIlxuIik7CisrICAgIH0KKysjZW5kaWYKKysgICAgcmV0dXJuIDA7Cisr fQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMu ZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYworLS0tIG9w ZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMJMjAxNS0xMi0w NCAxMzo1NTo1MS45Njg1NjI2NjggKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlw cy9maXBzX3Rlc3Rfc3VpdGUuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk2ODU2MjY2OCArMDEwMAor QEAgLTAsMCArMSw2MzkgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAw MyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqCisr ICogVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBGSVBT LTE0MCB0ZXN0aW5nCisrICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFsaWRhdGlvbi4gIEl0 IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZQorKyAqIE9wZW5TU0wgbGlicmFyeSBpdG8gcGVy Zm9ybSBhIHZhcmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKKysgKiBmdW5jdGlvbnMuICBB IHBvd2VyLXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJlcmF0ZWx5CisrICog cG9pbnRpbmcgdG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhhc2gKKysgKgorKyAqIENvbnRyaWJ1 dGVkIGJ5IFN0ZXZlIE1hcnF1ZXNzLgorKyAqCisrICovCisrI2luY2x1ZGUgPHN0ZGlvLmg+Cisr I2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJp bmcuaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrCisrI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvc2hhLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIHN1cHBvcnRcbiIp OworKyAgICByZXR1cm4gKDApOworK30KKysjZWxzZQorKworKyMgaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrIyBpbmNsdWRlICJmaXBzX3V0bC5oIgorKworKy8qIEFFUzogZW5jcnlwdCBhbmQg ZGVjcnlwdCBrbm93biBwbGFpbnRleHQsIHZlcmlmeSByZXN1bHQgbWF0Y2hlcyBvcmlnaW5hbCBw bGFpbnRleHQKKysqLworK3N0YXRpYyBpbnQgRklQU19hZXNfdGVzdCh2b2lkKQorK3sKKysgICAg aW50IHJldCA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgcGx0bXBbMTZdOworKyAgICB1bnNpZ25l ZCBjaGFyIGNpdG1wWzE2XTsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdID0KKysgICAgICAg IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYg fTsKKysgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdID0gImV0YW9ucmlzaGRsY3UiOwor KyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7 CisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwgTlVM TCwga2V5LCBOVUxMLCAxKSA8PSAwKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIEVWUF9DaXBo ZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYpOworKyAgICBpZiAoRVZQX0NpcGhlckluaXRf ZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksIE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKKysg ICAgICAgIGdvdG8gZXJyOworKyAgICBFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgMTYp OworKyAgICBpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDE2KSkKKysgICAgICAgIGdvdG8g ZXJyOworKyAgICByZXQgPSAxOworKyBlcnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAo JmN0eCk7CisrICAgIHJldHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQgRklQU19kZXMzX3Rl c3Qodm9pZCkKKyt7CisrICAgIGludCByZXQgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHBsdG1w WzhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpdG1wWzhdOworKyAgICB1bnNpZ25lZCBjaGFyIGtl eVtdID0KKysgICAgICAgIHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwg MTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwKKysgICAgICAgIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQK KysgICAgfTsKKysgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbXSA9IHsgJ2UnLCAndCcsICdh JywgJ28nLCAnbicsICdyJywgJ2knLCAncycgfTsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4Owor KyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOworKyAgICBpZiAoRVZQX0NpcGhlckluaXRf ZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLCBOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCisr ICAgICAgICBnb3RvIGVycjsKKysgICAgRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0 LCA4KTsKKysgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2Io KSwgTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIEVW UF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCA4KTsKKysgICAgaWYgKG1lbWNtcChwbHRtcCwg cGxhaW50ZXh0LCA4KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICByZXQgPSAxOworKyBlcnI6 CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIHJldHVybiByZXQ7Cisr fQorKworKy8qCisrICogRFNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQg cGxhaW50ZXh0LgorKyAqLworK3N0YXRpYyBpbnQgRklQU19kc2FfdGVzdChpbnQgYmFkKQorK3sK KysgICAgRFNBICpkc2EgPSBOVUxMOworKyAgICBFVlBfUEtFWSBwazsKKysgICAgdW5zaWduZWQg Y2hhciBkZ3N0W10gPSAiZXRhb25yaXNoZGxjIjsKKysgICAgdW5zaWduZWQgY2hhciBidWZbNjBd OworKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysgICAgaW50IHIgPSAwOworKyAgICBFVlBfTURf Q1RYIG1jdHg7CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBFVlBfTURfQ1RYX2lu aXQoJm1jdHgpOworKyAgICBkc2EgPSBEU0FfbmV3KCk7CisrICAgIGlmICghZHNhKQorKyAgICAg ICAgZ290byBlbmQ7CisrICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCAx MDI0LCBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMKSkKKysgICAgICAgIGdvdG8gZW5kOworKyAg ICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysgICAgICAgIGdvdG8gZW5kOworKyAgICBp ZiAoYmFkKQorKyAgICAgICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKKysKKysgICAg cGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKKysgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCisrICAg IGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKKysgICAgICAg IGdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2Yo ZGdzdCkgLSAxKSkKKysgICAgICAgIGdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwo Jm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCisrICAgICAgICBnb3RvIGVuZDsKKysKKysgICAgaWYg KCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrICAgICAgICBn b3RvIGVuZDsKKysgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2Yo ZGdzdCkgLSAxKSkKKysgICAgICAgIGdvdG8gZW5kOworKyAgICByID0gRVZQX1ZlcmlmeUZpbmFs KCZtY3R4LCBidWYsIHNsZW4sICZwayk7CisrIGVuZDoKKysgICAgRVZQX01EX0NUWF9jbGVhbnVw KCZtY3R4KTsKKysgICAgaWYgKGRzYSkKKysgICAgICAgIERTQV9mcmVlKGRzYSk7CisrICAgIGlm IChyICE9IDEpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrfQorKworKy8q CisrICogUlNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50ZXh0 LgorKyAqLworK3N0YXRpYyBpbnQgRklQU19yc2FfdGVzdChpbnQgYmFkKQorK3sKKysgICAgUlNB ICprZXk7CisrICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRfcHRleHRbXSA9ICJldGFvbnJpc2hkbGMi OworKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsK KysgICAgQklHTlVNICpibjsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBFVlBfUEtFWSBw azsKKysgICAgaW50IHIgPSAwOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgRVZQ X01EX0NUWF9pbml0KCZtY3R4KTsKKysgICAga2V5ID0gUlNBX25ldygpOworKyAgICBibiA9IEJO X25ldygpOworKyAgICBpZiAoIWtleSB8fCAhYm4pCisrICAgICAgICByZXR1cm4gMDsKKysgICAg Qk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKKysgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtl eSwgMTAyNCwgYm4sIE5VTEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIEJOX2ZyZWUoYm4p OworKyAgICBpZiAoYmFkKQorKyAgICAgICAgQk5fYWRkX3dvcmQoa2V5LT5uLCAxKTsKKysKKysg ICAgcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKKysgICAgcGsucGtleS5yc2EgPSBrZXk7CisrCisr ICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKKysgICAg ICAgIGdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4 dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQorKyAgICAgICAgZ290byBlbmQ7CisrICAgIGlm ICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKKysgICAgICAgIGdvdG8g ZW5kOworKworKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBO VUxMKSkKKysgICAgICAgIGdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1j dHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCisrICAgICAgICBnb3Rv IGVuZDsKKysgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOwor KyBlbmQ6CisrICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrICAgIGlmIChrZXkpCisr ICAgICAgICBSU0FfZnJlZShrZXkpOworKyAgICBpZiAociAhPSAxKQorKyAgICAgICAgcmV0dXJu IDA7CisrICAgIHJldHVybiAxOworK30KKysKKysvKiBTSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtu b3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNv cnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTFfdGVzdCgpCisreworKyAgICB1 bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEFfRElHRVNUX0xFTkdUSF0gPQorKyAgICAgICAgeyAweDEx LCAweGYxLCAweDlhLCAweDNhLCAweGVjLCAweDFhLCAweDFlLCAweDhlLCAweDY1LCAweGQ0LCAw eDlhLAorKzB4MzgsIDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUsIDB4 MTggfTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKKysKKysgICAg dW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07CisrCisrICAgIEVSUl9jbGVhcl9l cnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLCBzaXplb2Yoc3RyKSAtIDEsIG1kLCBO VUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAobWVt Y21wKG1kLCBkaWdlc3QsIHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJl dHVybiAxOworK30KKysKKysvKiBTSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0 IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNo CisrKi8KKytzdGF0aWMgaW50IEZJUFNfc2hhMjU2X3Rlc3QoKQorK3sKKysgICAgdW5zaWduZWQg Y2hhciBkaWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0KKysgICAgICAgIHsgMHhmNSwgMHg1 MywgMHhjZCwgMHhiOCwgMHhjZiwgMHgxLCAweGVlLCAweDE3LCAweDliLCAweDkzLCAweGM5LAor KzB4NjgsIDB4YzAsIDB4ZWEsIDB4NDAsIDB4OTEsCisrICAgICAgICAweDYsIDB4ZWMsIDB4OGUs IDB4MTEsIDB4OTYsIDB4YzgsIDB4NWQsIDB4MWMsIDB4YWYsIDB4NjQsIDB4MjIsIDB4ZTYsCisr ICAgICAgICAgICAgMHg1MCwgMHg0ZiwgMHg0NywgMHg1NworKyAgICB9OworKyAgICB1bnNpZ25l ZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NI QTI1Nl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlm ICghRVZQX0RpZ2VzdChzdHIsIHNpemVvZihzdHIpIC0gMSwgbWQsIE5VTEwsIEVWUF9zaGEyNTYo KSwgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCwgZGlnZXN0 LCBzaXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKyt9Cisr CisrLyogU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29t cGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGlj IGludCBGSVBTX3NoYTUxMl90ZXN0KCkKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NI QTUxMl9ESUdFU1RfTEVOR1RIXSA9CisrICAgICAgICB7IDB4OTksIDB4YzksIDB4ZTksIDB4NWIs IDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4NWYsCisrMHg5NCwgMHg3MSwg MHg2NCwgMHgyOCwgMHhjYSwKKysgICAgICAgIDB4MTYsIDB4MWYsIDB4M2QsIDB4ZjQsIDB4MWYs IDB4ZjMsIDB4MGYsIDB4YzUsIDB4MDMsIDB4OTksIDB4YjIsCisrICAgICAgICAgICAgMHhkMCwg MHhlNywgMHgwYiwgMHg5NCwgMHg0YSwKKysgICAgICAgIDB4NDUsIDB4ZDIsIDB4NmMsIDB4NGYs IDB4MjAsIDB4MDYsIDB4ZWYsIDB4NzEsIDB4YTksIDB4MjUsIDB4N2YsCisrICAgICAgICAgICAg MHgyNCwgMHhiMSwgMHhkOSwgMHg0MCwgMHgyMiwKKysgICAgICAgIDB4NDksIDB4NTQsIDB4MTAs IDB4YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYsCisrICAgICAg ICAgICAgMHhlYiwgMHgyZCwgMHg0MiwgMHgxZCwgMHhhMworKyAgICB9OworKyAgICB1bnNpZ25l ZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NI QTUxMl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlm ICghRVZQX0RpZ2VzdChzdHIsIHNpemVvZihzdHIpIC0gMSwgbWQsIE5VTEwsIEVWUF9zaGE1MTIo KSwgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCwgZGlnZXN0 LCBzaXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKyt9Cisr CisrLyogSE1BQy1TSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQg Y29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3Rh dGljIGludCBGSVBTX2htYWNfc2hhMV90ZXN0KCkKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5 W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4 dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrICAgICAg ICB7IDB4NzMsIDB4ZjcsIDB4YTAsIDB4NDgsIDB4ZjgsIDB4OTQsIDB4ZWQsIDB4ZGQsIDB4MGEs IDB4ZWEsIDB4ZWEsCisrMHg1NiwgMHgxYiwgMHg2MSwgMHgyZSwgMHg3MCwKKysgICAgICAgIDB4 YjIsIDB4ZmIsIDB4ZWMsIDB4YzYKKysgICAgfTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRb RVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJS X2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQworKyAgICAgICAgKEVWUF9zaGExKCksIGtl eSwgc2l6ZW9mKGtleSkgLSAxLCBpdiwgc2l6ZW9mKGl2KSAtIDEsIG91dCwgJm91dGxlbikpCisr ICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsIGthdmFsLCBvdXRsZW4pKQor KyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworK30KKysKKysvKiBITUFDLVNIQTIy NDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25v d24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19o bWFjX3NoYTIyNF90ZXN0KCkKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25y aXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVu c2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrICAgICAgICB7IDB4NzUsIDB4 NTgsIDB4ZDUsIDB4YmQsIDB4NTUsIDB4NmQsIDB4ODcsIDB4MGYsIDB4NzUsIDB4ZmYsIDB4YmUs CisrMHgxYywgMHhiMiwgMHhmMCwgMHgyMCwgMHgzNSwKKysgICAgICAgIDB4ZTUsIDB4NjIsIDB4 NDksIDB4YjYsIDB4OTQsIDB4YjksIDB4ZmMsIDB4NjUsIDB4MzQsIDB4MzMsIDB4M2EsIDB4MTkK KysgICAgfTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysg ICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAg IGlmICghSE1BQworKyAgICAgICAgKEVWUF9zaGEyMjQoKSwga2V5LCBzaXplb2Yoa2V5KSAtIDEs IGl2LCBzaXplb2YoaXYpIC0gMSwgb3V0LAorKyAgICAgICAgICZvdXRsZW4pKQorKyAgICAgICAg cmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LCBrYXZhbCwgb3V0bGVuKSkKKysgICAgICAg IHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogSE1BQy1TSEEyNTY6IGdlbmVy YXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAg cHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEy NTZfdGVzdCgpCisreworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwor KyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBj aGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKyAgICAgICAgeyAweGU5LCAweDE3LCAweGMx LCAweDdiLCAweDRjLCAweDZiLCAweDc3LCAweGRhLCAweGQyLCAweDMwLCAweDM2LAorKzB4MDIs IDB4ZjUsIDB4NzIsIDB4MzMsIDB4ODcsCisrICAgICAgICAweDlmLCAweGM2LCAweDZlLCAweDdi LCAweDdlLCAweGE4LCAweGVhLCAweGFhLCAweDlmLCAweGJhLCAweGVlLAorKyAgICAgICAgICAg IDB4NTEsIDB4ZmYsIDB4ZGEsIDB4MjQsIDB4ZjQKKysgICAgfTsKKysKKysgICAgdW5zaWduZWQg Y2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysK KysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQworKyAgICAgICAgKEVWUF9z aGEyNTYoKSwga2V5LCBzaXplb2Yoa2V5KSAtIDEsIGl2LCBzaXplb2YoaXYpIC0gMSwgb3V0LAor KyAgICAgICAgICZvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAo b3V0LCBrYXZhbCwgb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsK Kyt9CisrCisrLyogSE1BQy1TSEEzODQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZh bHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisr Ki8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEzODRfdGVzdCgpCisreworKyAgICB1bnNpZ25l ZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAi U2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0g PQorKyAgICAgICAgeyAweGIyLCAweDlkLCAweDQwLCAweDU4LCAweDMyLCAweGM0LCAweGUzLCAw eDMxLCAweGI2LCAweDYzLCAweDA4LAorKzB4MjYsIDB4OTksIDB4ZWYsIDB4M2IsIDB4MTAsCisr ICAgICAgICAweGUyLCAweGRmLCAweGY4LCAweGZmLCAweGM2LCAweGUxLCAweDAzLCAweDI5LCAw eDgxLCAweDJhLCAweDFiLAorKyAgICAgICAgICAgIDB4YWMsIDB4YjAsIDB4MDcsIDB4MzksIDB4 MDgsCisrICAgICAgICAweGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2LCAweGQ2LCAweDRjLCAw eDIwLCAweGZiLCAweDRkLCAweGMzLAorKyAgICAgICAgICAgIDB4ZjMsIDB4YjgsIDB4OWIsIDB4 ODgsIDB4MWMKKysgICAgfTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9T SVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9y KCk7CisrICAgIGlmICghSE1BQworKyAgICAgICAgKEVWUF9zaGEzODQoKSwga2V5LCBzaXplb2Yo a2V5KSAtIDEsIGl2LCBzaXplb2YoaXYpIC0gMSwgb3V0LAorKyAgICAgICAgICZvdXRsZW4pKQor KyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LCBrYXZhbCwgb3V0bGVuKSkK KysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogSE1BQy1TSEE1 MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtu b3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNf aG1hY19zaGE1MTJfdGVzdCgpCisreworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9u cmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1 bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKyAgICAgICAgeyAweGNkLCAw eDNlLCAweGI5LCAweDUxLCAweGI4LCAweGJjLCAweDdmLCAweDlhLCAweDIzLCAweGFmLCAweGYz LAorKzB4NzcsIDB4NTksIDB4ODUsIDB4YTksIDB4ZTYsCisrICAgICAgICAweGY3LCAweGQxLCAw eDUxLCAweDk2LCAweDE3LCAweGUwLCAweDkyLCAweGQ4LCAweGE2LCAweDNiLCAweGMxLAorKyAg ICAgICAgICAgIDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCisrICAgICAgICAweGQ3LCAw eDc5LCAweDBhLCAweGE1LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAweDUy LAorKyAgICAgICAgICAgIDB4NmIsIDB4NjEsIDB4N2YsIDB4ZWIsIDB4OWMsCisrICAgICAgICAw eDQ3LCAweDg2LCAweDVkLCAweDc0LCAweDJiLCAweDg4LCAweGRmLCAweGVlLCAweDQ2LCAweDY5 LCAweDk2LAorKyAgICAgICAgICAgIDB4M2QsIDB4YTYsIDB4ZDksIDB4MmEsIDB4NTMKKysgICAg fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5z aWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICgh SE1BQworKyAgICAgICAgKEVWUF9zaGE1MTIoKSwga2V5LCBzaXplb2Yoa2V5KSAtIDEsIGl2LCBz aXplb2YoaXYpIC0gMSwgb3V0LAorKyAgICAgICAgICZvdXRsZW4pKQorKyAgICAgICAgcmV0dXJu IDA7CisrICAgIGlmIChtZW1jbXAob3V0LCBrYXZhbCwgb3V0bGVuKSkKKysgICAgICAgIHJldHVy biAwOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogREg6IGdlbmVyYXRlIHNoYXJlZCBwYXJh bWV0ZXJzCisrKi8KKytzdGF0aWMgaW50IGRoX3Rlc3QoKQorK3sKKysgICAgREggKmRoOworKyAg ICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgZGggPSBGSVBTX2RoX25ldygpOworKyAgICBpZiAo IWRoKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICghREhfZ2VuZXJhdGVfcGFyYW1ldGVy c19leChkaCwgMTAyNCwgMiwgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgRklQU19k aF9mcmVlKGRoKTsKKysgICAgcmV0dXJuIDE7CisrfQorKworKy8qIFplcm9pemUKKysqLworK3N0 YXRpYyBpbnQgWmVyb2l6ZSgpCisreworKyAgICBSU0EgKmtleTsKKysgICAgQklHTlVNICpibjsK KysgICAgdW5zaWduZWQgY2hhciB1c2Vya2V5WzE2XSA9CisrICAgICAgICB7IDB4NDgsIDB4NTAs IDB4ZjAsIDB4YTMsIDB4M2EsIDB4ZWQsIDB4ZDMsIDB4YWYsIDB4NmUsIDB4NDcsIDB4N2YsCisr MHg4MywgMHgwMiwgMHhiMSwgMHgwOSwgMHg2OCB9OworKyAgICBpbnQgaSwgbjsKKysKKysgICAg a2V5ID0gRklQU19yc2FfbmV3KCk7CisrICAgIGJuID0gQk5fbmV3KCk7CisrICAgIGlmICgha2V5 IHx8ICFibikKKysgICAgICAgIHJldHVybiAwOworKyAgICBCTl9zZXRfd29yZChibiwgNjU1Mzcp OworKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LCBibiwgTlVMTCkpCisr ICAgICAgICByZXR1cm4gMDsKKysgICAgQk5fZnJlZShibik7CisrCisrICAgIG4gPSBCTl9udW1f Ynl0ZXMoa2V5LT5kKTsKKysgICAgcHJpbnRmKCIgR2VuZXJhdGVkICVkIGJ5dGUgUlNBIHByaXZh dGUga2V5XG4iLCBuKTsKKysgICAgcHJpbnRmKCJcdEJOIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6 XG4iKTsKKysgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOworKyAgICBCTl9yYW5kKGtl eS0+ZCwgbiAqIDgsIC0xLCAwKTsKKysgICAgcHJpbnRmKCJcdEJOIGtleSBhZnRlciBvdmVyd3Jp dGluZzpcbiIpOworKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7CisrCisrICAgIHBy aW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsKKysg ICAgZm9yIChpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKQorKyAgICAgICAgcHJpbnRm KCIlMDJ4IiwgdXNlcmtleVtpXSk7CisrICAgIHByaW50ZigiXG4iKTsKKysgICAgUkFORF9ieXRl cyh1c2Vya2V5LCBzaXplb2YgdXNlcmtleSk7CisrICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBr ZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6 ZW9mKHVzZXJrZXkpOyBpKyspCisrICAgICAgICBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsK KysgICAgcHJpbnRmKCJcbiIpOworKworKyAgICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGlu dCBFcnJvcjsKKytjb25zdCBjaGFyICpGYWlsKGNvbnN0IGNoYXIgKm1zZykKKyt7CisrICAgIGRv X3ByaW50X2Vycm9ycygpOworKyAgICBFcnJvcisrOworKyAgICByZXR1cm4gbXNnOworK30KKysK KytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKworKyAgICBpbnQgZG9fY29y cnVwdF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMDsKKysgICAgaW50 IGJhZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsKKysgICAgaW50IGRvX3JuZ19zdGljayA9IDA7Cisr ICAgIGludCBub19leGl0ID0gMDsKKysKKysgICAgcHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFw cGxpY2F0aW9uXG5cbiIpOworKworKyAgICAvKiBMb2FkIGVudHJvcHkgZnJvbSBleHRlcm5hbCBm aWxlLCBpZiBhbnkgKi8KKysgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQiLCAxMDI0KTsKKysKKysg ICAgaWYgKGFyZ3ZbMV0pIHsKKysgICAgICAgIC8qIENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8KKysg ICAgICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJhZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNf Y29ycnVwdF9hZXMoKTsKKysgICAgICAgICAgICBwcmludGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5 cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcChhcmd2WzFdLCAiZGVzIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7 CisrICAgICAgICAgICAgcHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0 aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2 WzFdLCAiZHNhIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhKCk7CisrICAgICAg ICAgICAgcHJpbnRmCisrICAgICAgICAgICAgICAgICgiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBz aWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAg fSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2EiKSkgeworKyAgICAgICAgICAgIEZJUFNf Y29ycnVwdF9yc2EoKTsKKysgICAgICAgICAgICBwcmludGYKKysgICAgICAgICAgICAgICAgKCJS U0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVk IEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtl eSIpKSB7CisrICAgICAgICAgICAgcHJpbnRmCisrICAgICAgICAgICAgICAgICgiUlNBIGtleSBn ZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5c biIpOworKyAgICAgICAgICAgIGJhZF9yc2EgPSAxOworKyAgICAgICAgICAgIG5vX2V4aXQgPSAx OworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXlnZW4iKSkgewor KyAgICAgICAgICAgIGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDE7CisrICAgICAgICAgICAgbm9f ZXhpdCA9IDE7CisrICAgICAgICAgICAgcHJpbnRmCisrICAgICAgICAgICAgICAgICgiUlNBIGtl eSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXln ZW4uLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXki KSkgeworKyAgICAgICAgICAgIHByaW50ZgorKyAgICAgICAgICAgICAgICAoIkRTQSBrZXkgZ2Vu ZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4i KTsKKysgICAgICAgICAgICBiYWRfZHNhID0gMTsKKysgICAgICAgICAgICBub19leGl0ID0gMTsK KysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5Z2VuIikpIHsKKysg ICAgICAgICAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAxOworKyAgICAgICAgICAgIG5vX2V4 aXQgPSAxOworKyAgICAgICAgICAgIHByaW50ZgorKyAgICAgICAgICAgICAgICAoIkRTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2Vu Li4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hhMSIpKSB7 CisrICAgICAgICAgICAgRklQU19jb3JydXB0X3NoYTEoKTsKKysgICAgICAgICAgICBwcmludGYo IlNIQS0xIGhhc2ggd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBp ZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRf cm5nKCk7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJuZ3N0aWNrIikp IHsKKysgICAgICAgICAgICBkb19ybmdfc3RpY2sgPSAxOworKyAgICAgICAgICAgIG5vX2V4aXQg PSAxOworKyAgICAgICAgICAgIHByaW50ZigiUk5HIHRlc3Qgd2l0aCBzdHVjayBjb250aW51b3Vz IHRlc3QuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBwcmludGYoIkJh ZCBhcmd1bWVudCBcIiVzXCJcbiIsIGFyZ3ZbMV0pOworKyAgICAgICAgICAgIGV4aXQoMSk7Cisr ICAgICAgICB9CisrICAgICAgICBpZiAoIW5vX2V4aXQpIHsKKysgICAgICAgICAgICBpZiAoIUZJ UFNfbW9kZV9zZXQoMSkpIHsKKysgICAgICAgICAgICAgICAgZG9fcHJpbnRfZXJyb3JzKCk7Cisr ICAgICAgICAgICAgICAgIHByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxlZFxuIik7Cisr ICAgICAgICAgICAgICAgIGV4aXQoMSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHBy aW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IHN1Y2Nlc3NmdWxcbiIpOworKyAgICAgICAgICAgIGV4 aXQoMCk7CisrICAgICAgICB9CisrICAgIH0KKysKKysgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0 b2dyYXBoaWMgb3BlcmF0aW9uCisrICAgICAqLworKyAgICBwcmludGYoIjEuIE5vbi1BcHByb3Zl ZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKKysgICAgcHJpbnRmKCJcdGEu IEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOworKyAgICBwcmludGYoZGhfdGVzdCgpPyAi c3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysgICAgLyogUG93ZXItdXAg c2VsZiB0ZXN0CisrICAgICAqLworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgcHJpbnRm KCIyLiBBdXRvbWF0aWMgcG93ZXItdXAgc2VsZiB0ZXN0Li4uIik7CisrICAgIGlmICghRklQU19t b2RlX3NldCgxKSkgeworKyAgICAgICAgZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgICAgICBwcmlu dGYoRmFpbCgiRkFJTEVEIVxuIikpOworKyAgICAgICAgZXhpdCgxKTsKKysgICAgfQorKyAgICBw cmludGYoInN1Y2Nlc3NmdWxcbiIpOworKyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2VuKQor KyAgICAgICAgRklQU19jb3JydXB0X2RzYV9rZXlnZW4oKTsKKysgICAgaWYgKGRvX2NvcnJ1cHRf cnNhX2tleWdlbikKKysgICAgICAgIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKCk7CisrICAgIGlm IChkb19ybmdfc3RpY2spCisrICAgICAgICBGSVBTX3JuZ19zdGljaygpOworKworKyAgICAvKiBB RVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICAqLworKyAgICBwcmludGYoIjMuIEFFUyBl bmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKEZJUFNfYWVzX3Rlc3QoKT8g InN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7CisrCisrICAgIC8qIFJTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICAqLworKyAgICBwcmlu dGYoIjQuIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7 CisrICAgIHByaW50ZihGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiBG YWlsKCJGQUlMRUQhXG4iKSk7CisrCisrICAgIC8qIERFUy1DQkMgZW5jcnlwdGlvbi9kZWNyeXB0 aW9uCisrICAgICAqLworKyAgICBwcmludGYoIjUuIERFUy1FQ0IgZW5jcnlwdGlvbi9kZWNyeXB0 aW9uLi4uIik7CisrICAgIHByaW50ZihGSVBTX2RlczNfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6 IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysgICAgLyogRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBz aWduYXR1cmUgdmFsaWRhdGlvbgorKyAgICAgKi8KKysgICAgcHJpbnRmKCI2LiBEU0Ega2V5IGdl bmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uLi4uIik7CisrICAgIHByaW50ZihGSVBT X2RzYV90ZXN0KGJhZF9kc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7 CisrCisrICAgIC8qIFNIQS0xIGhhc2gKKysgICAgICovCisrICAgIHByaW50ZigiN2EuIFNIQS0x IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKEZJUFNfc2hhMV90ZXN0KCk/ICJzdWNjZXNzZnVsXG4i IDogRmFpbCgiRkFJTEVEIVxuIikpOworKworKyAgICAvKiBTSEEtMjU2IGhhc2gKKysgICAgICov CisrICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIpOworKyAgICBwcmludGYoRklQU19z aGEyNTZfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysg ICAgLyogU0hBLTUxMiBoYXNoCisrICAgICAqLworKyAgICBwcmludGYoIjdjLiBTSEEtNTEyIGhh c2guLi4iKTsKKysgICAgcHJpbnRmKEZJUFNfc2hhNTEyX3Rlc3QoKT8gInN1Y2Nlc3NmdWxcbiIg OiBGYWlsKCJGQUlMRUQhXG4iKSk7CisrCisrICAgIC8qIEhNQUMtU0hBLTEgaGFzaAorKyAgICAg Ki8KKysgICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEtMSBoYXNoLi4uIik7CisrICAgIHByaW50ZihG SVBTX2htYWNfc2hhMV90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxuIikp OworKworKyAgICAvKiBITUFDLVNIQS0yMjQgaGFzaAorKyAgICAgKi8KKysgICAgcHJpbnRmKCI3 ZS4gSE1BQy1TSEEtMjI0IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKEZJUFNfaG1hY19zaGEyMjRf dGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysgICAgLyog SE1BQy1TSEEtMjU2IGhhc2gKKysgICAgICovCisrICAgIHByaW50ZigiN2YuIEhNQUMtU0hBLTI1 NiBoYXNoLi4uIik7CisrICAgIHByaW50ZihGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKT8gInN1Y2Nl c3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7CisrCisrICAgIC8qIEhNQUMtU0hBLTM4NCBo YXNoCisrICAgICAqLworKyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIpOwor KyAgICBwcmludGYoRklQU19obWFjX3NoYTM4NF90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFp bCgiRkFJTEVEIVxuIikpOworKworKyAgICAvKiBITUFDLVNIQS01MTIgaGFzaAorKyAgICAgKi8K KysgICAgcHJpbnRmKCI3aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKEZJ UFNfaG1hY19zaGE1MTJfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIp KTsKKysKKysgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCisrICAg ICAqLworKyAgICBwcmludGYoIjguIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlv biB0ZXN0Li4uXG4iKTsKKysgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1I KS4uLiIpOworKyAgICBwcmludGYoZGhfdGVzdCgpPyAic3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxu IgorKyAgICAgICAgICAgOiBGYWlsKCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSk7CisrCisrICAg IC8qIFplcm9pemF0aW9uCisrICAgICAqLworKyAgICBwcmludGYoIjkuIFplcm8taXphdGlvbi4u LlxuIik7CisrICAgIHByaW50ZihaZXJvaXplKCk/ICJcdHN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRc biIKKysgICAgICAgICAgIDogRmFpbCgiXHRmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSk7CisrCisr ICAgIHByaW50ZigiXG5BbGwgdGVzdHMgY29tcGxldGVkIHdpdGggJWQgZXJyb3JzXG4iLCBFcnJv cik7CisrICAgIHJldHVybiBFcnJvciA/IDEgOiAwOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL2ZpcHMvTWFrZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZmlwcy9NYWtl ZmlsZS5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY5NTYyNjkyICswMTAwCisrKysgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAxNS0xMi0wNCAxMzo1NTo1MS45Njk1NjI2 OTIgKzAxMDAKK0BAIC0wLDAgKzEsMzQxIEBACisrIworKyMgT3BlblNTTC9jcnlwdG8vZmlwcy9N YWtlZmlsZQorKyMKKysKKytESVI9CWZpcHMKKytUT1A9CS4uLy4uCisrQ0M9CWNjCisrSU5DTFVE RVM9CisrQ0ZMQUc9LWcKKytNQUtFRklMRT0JTWFrZWZpbGUKKytBUj0JCWFyIHIKKysKKytDRkxB R1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCisrCisrR0VORVJBTD1NYWtlZmlsZQorK1RFU1Q9Zmlw c190ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5jCisrQVBQUz0KKysKKytQUk9HUkFNPSBmaXBz X3N0YW5kYWxvbmVfaG1hYworK0VYRT0gJChQUk9HUkFNKSQoRVhFX0VYVCkKKysKKytMSUI9JChU T1ApL2xpYmNyeXB0by5hCisrTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlwc19kZXNfc2Vs ZnRlc3QuYyBmaXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3JhbmRfc2VsZnRlc3QuYyBcCisrICAg IGZpcHNfcnNhX3NlbGZ0ZXN0LmMgZmlwc19zaGFfc2VsZnRlc3QuYyBmaXBzLmMgZmlwc19kc2Ff c2VsZnRlc3QuYyAgZmlwc19yYW5kLmMgXAorKyAgICBmaXBzX3JzYV94OTMxZy5jIGZpcHNfcG9z dC5jIGZpcHNfZHJiZ19jdHIuYyBmaXBzX2RyYmdfaGFzaC5jIGZpcHNfZHJiZ19obWFjLmMgXAor KyAgICBmaXBzX2RyYmdfbGliLmMgZmlwc19kcmJnX3JhbmQuYyBmaXBzX2RyYmdfc2VsZnRlc3Qu YyBmaXBzX3JhbmRfbGliLmMgXAorKyAgICBmaXBzX2NtYWNfc2VsZnRlc3QuYyBmaXBzX2VuYy5j IGZpcHNfbWQuYworKworK0xJQk9CSj1maXBzX2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3NlbGZ0 ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAorKyAgICBm aXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNfc2hhX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3Nl bGZ0ZXN0Lm8gIGZpcHNfcmFuZC5vIFwKKysgICAgZmlwc19yc2FfeDkzMWcubyBmaXBzX3Bvc3Qu byBmaXBzX2RyYmdfY3RyLm8gZmlwc19kcmJnX2hhc2gubyBmaXBzX2RyYmdfaG1hYy5vIFwKKysg ICAgZmlwc19kcmJnX2xpYi5vIGZpcHNfZHJiZ19yYW5kLm8gZmlwc19kcmJnX3NlbGZ0ZXN0Lm8g Zmlwc19yYW5kX2xpYi5vIFwKKysgICAgZmlwc19jbWFjX3NlbGZ0ZXN0Lm8gZmlwc19lbmMubyBm aXBzX21kLm8KKysKKytMSUJDUllQVE89LUwuLiAtbGNyeXB0bworKworK1NSQz0gJChMSUJTUkMp IGZpcHNfc3RhbmRhbG9uZV9obWFjLmMKKysKKytFWEhFQURFUj0gZmlwcy5oIGZpcHNfcmFuZC5o CisrSEVBREVSPQkkKEVYSEVBREVSKQorKworK0FMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChI RUFERVIpCisrCisrdG9wOgorKwkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9 JChESVIpIHN1Yl9hbGwpCisrCisrYWxsOglsaWIgZXhlCisrCisrbGliOgkkKExJQk9CSikKKysJ JChBUikgJChMSUIpICQoTElCT0JKKQorKwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIg bWluZC4KKysJQHRvdWNoIGxpYgorKworK2V4ZToJJChFWEUpCisrCisrZmlsZXM6CisrCSQoUEVS TCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCisrCisrbGlu a3M6CisrCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5z c2wgJChFWEhFQURFUikKKysJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rl c3QgJChURVNUKQorKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAk KEFQUFMpCisrCisraW5zdGFsbDoKKysJQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQg YmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgorKwlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBm b3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCisrCWRvICBcCisrCShjcCAkJGkgJChJTlNUQUxMX1BS RUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKKysJY2htb2QgNjQ0ICQo SU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKKysJ ZG9uZTsKKysKKyt0YWdzOgorKwljdGFncyAkKFNSQykKKysKKyt0ZXN0czoKKysKKytsaW50Ogor KwlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKKysKKytkZXBlbmQ6CisrCUBb IC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4u LgorKwkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0g JChQUk9HUykgJChMSUJTUkMpCisrCisrZGNsZWFuOgorKwkkKFBFUkwpIC1wZSAnaWYgKC9eIyBE TyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+ TWFrZWZpbGUubmV3CisrCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQorKworK2NsZWFu OgorKwlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJh ayBmbHVmZgorKworKyQoRVhFKTogJChQUk9HUkFNKS5vCisrCUZJUFNfU0hBX0FTTT0iIjsgZm9y IGkgaW4gJChTSEExX0FTTV9PQkopIHNoYTI1Ni5vOyBkbyBGSVBTX1NIQV9BU009IiQkRklQU19T SEFfQVNNIC4uL3NoYS8kJGkiIDsgZG9uZTsgXAorKwlmb3IgaSBpbiAkKENQVUlEX09CSik7IGRv IEZJUFNfU0hBX0FTTT0iJCRGSVBTX1NIQV9BU00gLi4vJCRpIiA7IGRvbmU7IFwKKysJJChDQykg LW8gJEAgJChDRkxBR1MpICQoUFJPR1JBTSkubyAkJEZJUFNfU0hBX0FTTQorKworKyMgRE8gTk9U IERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KKysKKytmaXBz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2NyeXB0by5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwcy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwc19yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2Zp cHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29ial9tYWMuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBz Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Jz YS5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1o YWNrcy5oIGZpcHMuYyBmaXBzX2xvY2wuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19h ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19hZXNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2Flc19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2Flc19zZWxmdGVzdC5jCisrZmlwc19kZXNfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2Zp cHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19k ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZGVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2Rlc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZGVz X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kZXNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2Rlc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2Rlc19z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZGVzX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZGVzX3NlbGZ0ZXN0 LmMKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX2N0 ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytm aXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2Ry YmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJn X2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19jdHIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3JhbmQuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2ZpcHNfZHJiZ19jdHIubzogZmlwc19kcmJn X2N0ci5jIGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX2hh c2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9j cnlwdG8uaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfaGFz aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX2hhc2gubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgK KytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytm aXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJi Z19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19oYXNo LmMKKytmaXBzX2RyYmdfaGFzaC5vOiBmaXBzX3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfaG1hYy5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEu aAorK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX2RyYmdf aG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX2htYWMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJnX2htYWMubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o CisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2Zp cHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlw c19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2Ry YmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcmFuZC5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3Mu aCBmaXBzX2RyYmdfaG1hYy5jCisrZmlwc19kcmJnX2htYWMubzogZmlwc19yYW5kX2xjbC5oCisr Zmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19saWIubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o CisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2ZpcHNfcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBzX2RyYmdf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAor K2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2ZpcHNfZHJiZ19s aWIubzogZmlwc19kcmJnX2xpYi5jIGZpcHNfbG9jbC5oIGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNf ZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jp by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAor K2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfZHJiZ19yYW5kLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2Ry YmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdf cmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJiZ19yYW5kLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19yYW5kLmMKKytmaXBz X2RyYmdfcmFuZC5vOiBmaXBzX3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytm aXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19k cmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJi Z19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJnX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2RyYmdfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19zZWxmdGVzdC5jCisrZmlwc19k cmJnX3NlbGZ0ZXN0Lm86IGZpcHNfZHJiZ19zZWxmdGVzdC5oIGZpcHNfbG9jbC5oIGZpcHNfcmFu ZF9sY2wuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24x LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisr Zmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfZHNhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2xoYXNoLmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29i amVjdHMuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVu c3NsY29uZi5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKKytmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFj ay5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tz LmggZmlwc19kc2Ffc2VsZnRlc3QuYworK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IGZpcHNfbG9jbC5o CisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2ht YWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9maXBzLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2htYWMuaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv bGhhc2guaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq X21hYy5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpl Y3RzLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2xjb25mLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2x2LmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29z c2xfdHlwLmgKKytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3Nh ZmVzdGFjay5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1o YWNrcy5oIGZpcHNfaG1hY19zZWxmdGVzdC5jCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19wb3N0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRv LmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9lX29zMi5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytm aXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAorK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3Bvc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytm aXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvcnNhLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfbG9jbC5oIGZpcHNfcG9zdC5jCisrZmlwc19y YW5kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKKytmaXBzX3Jh bmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YmlvLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX3JhbmQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5k LmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3JhbmQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlw LmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytmaXBzX3JhbmQu bzogZmlwc19sb2NsLmggZmlwc19yYW5kLmMKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2Vfb3Mu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19y YW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l cnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5o CisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqX21hYy5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqZWN0cy5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNz bGNvbmYuaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytmaXBzX3Jh bmRfbGliLm86IGZpcHNfcmFuZF9saWIuYworK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNf cmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JhbmRf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19yYW5kX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lcnIuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv ZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX3JhbmRfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19sb2NsLmgKKytmaXBzX3JhbmRfc2VsZnRlc3Qu bzogZmlwc19yYW5kX3NlbGZ0ZXN0LmMKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfcnNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9jcnlwdG8uaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgK KytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisr Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2Zp cHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisr Zmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytm aXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2Zp cHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorK2ZpcHNfcnNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcnNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19yc2Ffc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19yc2Ffc2VsZnRl c3QuYworK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19yc2Ff eDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Vyci5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKKytmaXBz X3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3Jz YV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfcnNhX3g5MzFn Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfcnNhX3g5MzFnLmMKKytm aXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfc2hhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oCisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmgKKytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o CisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAor K2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o CisrZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK KytmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAor K2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAor K2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfc2hhX3NlbGZ0ZXN0LmMKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9obWFjL2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9o bWFjL2htYWMuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9obWFjL2htYWMuYy5maXBzCTIw MTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL2htYWMvaG1hYy5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY5NTYyNjkyICswMTAwCitAQCAt ODksMTIgKzg5LDYgQEAgaW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bwor ICAgICAgICAgICAgIEVWUGVycihFVlBfRl9ITUFDX0lOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZP Ul9GSVBTKTsKKyAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIH0KKy0gICAgICAgIC8q CistICAgICAgICAgKiBPdGhlciBhbGdvcml0aG0gYmxvY2tpbmcgd2lsbCBiZSBkb25lIGluIEZJ UFNfY21hY19pbml0LCB2aWEKKy0gICAgICAgICAqIEZJUFNfaG1hY19pbml0X2V4KCkuCistICAg ICAgICAgKi8KKy0gICAgICAgIGlmICghaW1wbCAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCistICAg ICAgICAgICAgcmV0dXJuIEZJUFNfaG1hY19pbml0X2V4KGN0eCwga2V5LCBsZW4sIG1kLCBOVUxM KTsKKyAgICAgfQorICNlbmRpZgorICAgICAvKiBJZiB3ZSBhcmUgY2hhbmdpbmcgTUQgdGhlbiB3 ZSBtdXN0IGhhdmUgYSBrZXkgKi8KK0BAIC0xMTEsNiArMTA1LDEzIEBAIGludCBITUFDX0luaXRf ZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KKyAgICAgfQorIAorICAgICBpZiAoa2V5ICE9IE5V TEwpIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgICAgICBpZiAoRklQU19tb2RlKCkgJiYg IShtZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKQorKyAgICAgICAgICAgICYmICghKGN0eC0+ bWRfY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKyAgICAgICAg ICAgICAgICB8fCAhKGN0eC0+aV9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpCisrICAgICAgICAgICAgICAgIHx8ICEoY3R4LT5vX2N0eC5mbGFncyAmIEVWUF9NRF9D VFhfRkxBR19OT05fRklQU19BTExPVykpKQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKyNlbmRp ZgorICAgICAgICAgcmVzZXQgPSAxOworICAgICAgICAgaiA9IEVWUF9NRF9ibG9ja19zaXplKG1k KTsKKyAgICAgICAgIE9QRU5TU0xfYXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5rZXkpKTsK K0BAIC0xNjQsMTAgKzE2NSw2IEBAIGludCBITUFDX0luaXQoSE1BQ19DVFggKmN0eCwgY29uc3Qg dm9pZAorIAorIGludCBITUFDX1VwZGF0ZShITUFDX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBj aGFyICpkYXRhLCBzaXplX3QgbGVuKQorIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGlm IChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCistICAgICAgICByZXR1cm4gRklQ U19obWFjX3VwZGF0ZShjdHgsIGRhdGEsIGxlbik7CistI2VuZGlmCisgICAgIGlmICghY3R4LT5t ZCkKKyAgICAgICAgIHJldHVybiAwOworIAorQEAgLTE3OCwxMCArMTc1LDYgQEAgaW50IEhNQUNf RmluYWwoSE1BQ19DVFggKmN0eCwgdW5zaWduZWQgYworIHsKKyAgICAgdW5zaWduZWQgaW50IGk7 CisgICAgIHVuc2lnbmVkIGNoYXIgYnVmW0VWUF9NQVhfTURfU0laRV07CistI2lmZGVmIE9QRU5T U0xfRklQUworLSAgICBpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQorLSAg ICAgICAgcmV0dXJuIEZJUFNfaG1hY19maW5hbChjdHgsIG1kLCBsZW4pOworLSNlbmRpZgorIAor ICAgICBpZiAoIWN0eC0+bWQpCisgICAgICAgICBnb3RvIGVycjsKK0BAIC0yMjUsMTIgKzIxOCw2 IEBAIGludCBITUFDX0NUWF9jb3B5KEhNQUNfQ1RYICpkY3R4LCBITUFDX0MKKyAKKyB2b2lkIEhN QUNfQ1RYX2NsZWFudXAoSE1BQ19DVFggKmN0eCkKKyB7CistI2lmZGVmIE9QRU5TU0xfRklQUwor LSAgICBpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKSB7CistICAgICAgICBG SVBTX2htYWNfY3R4X2NsZWFudXAoY3R4KTsKKy0gICAgICAgIHJldHVybjsKKy0gICAgfQorLSNl bmRpZgorICAgICBFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+aV9jdHgpOworICAgICBFVlBfTURf Q1RYX2NsZWFudXAoJmN0eC0+b19jdHgpOworICAgICBFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+ bWRfY3R4KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMu ZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCistLS0gb3BlbnNzbC0x LjAuMmUvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwky MDE1LTEyLTA0IDEzOjU1OjUxLjk2OTU2MjY5MiArMDEwMAorQEAgLTc2LDcgKzc2LDcgQEAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRM KSYweGZmKSkKKyAKKyBzdGF0aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKKy1maXBzX21kX2luaXQoTURDMikKKytub25m aXBzX21kX2luaXQoTURDMikKKyB7CisgICAgIGMtPm51bSA9IDA7CisgICAgIGMtPnBhZF90eXBl ID0gMTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBz IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tZDIvbWQyX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAw ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL21kMi9tZDJfZGdzdC5jCTIwMTUtMTIt MDQgMTM6NTU6NTEuOTY5NTYyNjkyICswMTAwCitAQCAtNjIsNiArNjIsMTEgQEAKKyAjaW5jbHVk ZSA8b3BlbnNzbC9tZDIuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorICNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgor IAorIGNvbnN0IGNoYXIgTUQyX3ZlcnNpb25bXSA9ICJNRDIiIE9QRU5TU0xfVkVSU0lPTl9QVEVY VDsKKyAKK0BAIC0xMTksNyArMTI0LDcgQEAgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9pZCkK KyAgICAgICAgIHJldHVybiAoIm1kMihpbnQpIik7CisgfQorIAorLWZpcHNfbWRfaW5pdChNRDIp Cisrbm9uZmlwc19tZF9pbml0KE1EMikKKyB7CisgICAgIGMtPm51bSA9IDA7CisgICAgIG1lbXNl dChjLT5zdGF0ZSwgMCwgc2l6ZW9mIGMtPnN0YXRlKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tZDQvbWQ0 X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzCTIw MTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL21kNC9tZDRfZGdzdC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY5NTYyNjkyICswMTAwCitA QCAtNzIsNyArNzIsNyBAQCBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW10gPSAiTUQ0IiBPUEVOU1NM CisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAorICNkZWZp bmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1maXBzX21kX2lu aXQoTUQ0KQorK25vbmZpcHNfbWRfaW5pdChNRDQpCisgeworICAgICBtZW1zZXQoYywgMCwgc2l6 ZW9mKCpjKSk7CisgICAgIGMtPkEgPSBJTklUX0RBVEFfQTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjJlL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tZDUv bWQ1X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBz CTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUv Y3J5cHRvL21kNS9tZDVfZGdzdC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTY5NTYyNjkyICswMTAw CitAQCAtNzIsNyArNzIsNyBAQCBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW10gPSAiTUQ1IiBPUEVO U1NMCisgI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAorICNk ZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1maXBzX21k X2luaXQoTUQ1KQorK25vbmZpcHNfbWRfaW5pdChNRDUpCisgeworICAgICBtZW1zZXQoYywgMCwg c2l6ZW9mKCpjKSk7CisgICAgIGMtPkEgPSBJTklUX0RBVEFfQTsKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjJlL2NyeXB0by9vX2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9vX2ZpcHMu YworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9vX2ZpcHMuYy5maXBzCTIwMTUtMTItMDMgMTU6 MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL29fZmlwcy5j CTIwMTUtMTItMDQgMTM6NTU6NTEuOTcwNTYyNzE1ICswMTAwCitAQCAtODAsNiArODAsOCBAQCBp bnQgRklQU19tb2RlX3NldChpbnQgcikKKyAjIGlmbmRlZiBGSVBTX0FVVEhfVVNFUl9QQVNTCisg IyAgZGVmaW5lIEZJUFNfQVVUSF9VU0VSX1BBU1MgICAgICJEZWZhdWx0IEZJUFMgQ3J5cHRvIFVz ZXIgUGFzc3dvcmQiCisgIyBlbmRpZgorKyAgICBpZiAociAmJiBGSVBTX21vZHVsZV9tb2RlKCkp IC8qIGNhbiBiZSBpbXBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IE9QRU5TU0xfaW5pdCgpICovCisr ICAgICAgICByZXR1cm4gMTsKKyAgICAgaWYgKCFGSVBTX21vZHVsZV9tb2RlX3NldChyLCBGSVBT X0FVVEhfVVNFUl9QQVNTKSkKKyAgICAgICAgIHJldHVybiAwOworICAgICBpZiAocikKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9vX2luaXQuYy5maXBzIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9vX2luaXQuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9vX2luaXQuYy5maXBzCTIw MTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5 cHRvL29faW5pdC5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTcwNTYyNzE1ICswMTAwCitAQCAtNTYs OCArNTYsMzcgQEAKKyAjaW5jbHVkZSA8ZV9vcy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorICNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorKyMgaW5j bHVkZSA8c3lzL3N0YXQuaD4KKysjIGluY2x1ZGUgPGZjbnRsLmg+CisrIyBpbmNsdWRlIDx1bmlz dGQuaD4KKysjIGluY2x1ZGUgPGVycm5vLmg+CisrIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyAjIGlu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorICMgaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrCisr IyBkZWZpbmUgRklQU19NT0RFX1NXSVRDSF9GSUxFICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5h YmxlZCIKKysKKytzdGF0aWMgdm9pZCBpbml0X2ZpcHNfbW9kZSh2b2lkKQorK3sKKysgICAgY2hh ciBidWZbMl0gPSAiMCI7CisrICAgIGludCBmZDsKKysKKysgICAgaWYgKGdldGVudigiT1BFTlNT TF9GT1JDRV9GSVBTX01PREUiKSAhPSBOVUxMKSB7CisrICAgICAgICBidWZbMF0gPSAnMSc7Cisr ICAgIH0gZWxzZSBpZiAoKGZkID0gb3BlbihGSVBTX01PREVfU1dJVENIX0ZJTEUsIE9fUkRPTkxZ KSkgPj0gMCkgeworKyAgICAgICAgd2hpbGUgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwg MCAmJiBlcnJubyA9PSBFSU5UUikgOworKyAgICAgICAgY2xvc2UoZmQpOworKyAgICB9CisrICAg IC8qIEZhaWx1cmUgcmVhZGluZyB0aGUgZmlwcyBtb2RlIHN3aXRjaCBmaWxlIG1lYW5zIGp1c3Qg bm90CisrICAgICAqIHN3aXRjaGluZyBpbnRvIEZJUFMgbW9kZS4gV2Ugd291bGQgYnJlYWsgdG9v IG1hbnkgdGhpbmdzCisrICAgICAqIG90aGVyd2lzZS4uCisrICAgICAqLworKworKyAgICBpZiAo YnVmWzBdID09ICcxJykgeworKyAgICAgICAgRklQU19tb2RlX3NldCgxKTsKKysgICAgfQorK30K KyAjZW5kaWYKKyAKKyAvKgorQEAgLTY1LDE5ICs5NCwyNiBAQAorICAqIHNldHMgRklQUyBjYWxs YmFja3MKKyAgKi8KKyAKKy12b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQorK3ZvaWQgT1BFTlNTTF9p bml0X2xpYnJhcnkodm9pZCkKKyB7CisgICAgIHN0YXRpYyBpbnQgZG9uZSA9IDA7CisgICAgIGlm IChkb25lKQorICAgICAgICAgcmV0dXJuOworICAgICBkb25lID0gMTsKKyAjaWZkZWYgT1BFTlNT TF9GSVBTCistICAgIEZJUFNfc2V0X2xvY2tpbmdfY2FsbGJhY2tzKENSWVBUT19sb2NrLCBDUllQ VE9fYWRkX2xvY2spOworLSAgICBGSVBTX3NldF9lcnJvcl9jYWxsYmFja3MoRVJSX3B1dF9lcnJv ciwgRVJSX2FkZF9lcnJvcl92ZGF0YSk7CistICAgIEZJUFNfc2V0X21hbGxvY19jYWxsYmFja3Mo Q1JZUFRPX21hbGxvYywgQ1JZUFRPX2ZyZWUpOworICAgICBSQU5EX2luaXRfZmlwcygpOworKyAg ICBpbml0X2ZpcHNfbW9kZSgpOworKyAgICBpZiAoIUZJUFNfbW9kZSgpKSB7CisrICAgICAgICAv KiBDbGVhbiB1cCBwcmVtYXR1cmVseSBzZXQgZGVmYXVsdCByYW5kIG1ldGhvZCAqLworKyAgICAg ICAgUkFORF9zZXRfcmFuZF9tZXRob2QoTlVMTCk7CisrICAgIH0KKyAjZW5kaWYKKyAjaWYgMAor ICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbGxlZCBPUEVOU1NMX2luaXRcbiIpOworICNlbmRpZgor IH0KKysKKyt2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQorK3sKKysgICAgT1BFTlNTTF9pbml0X2xp YnJhcnkoKTsKKyt9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vb3BlbnNzbGNvbmYu aC5pbi5maXBzIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCistLS0gb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcwkyMDE1LTEyLTAzIDE1OjA0 OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9vcGVuc3NsY29u Zi5oLmluCTIwMTUtMTItMDQgMTM6NTU6NTEuOTcwNTYyNzE1ICswMTAwCitAQCAtMSw1ICsxLDIw IEBACisgLyogY3J5cHRvL29wZW5zc2xjb25mLmguaW4gKi8KKyAKKysjaWZkZWYgT1BFTlNTTF9E T0lOR19NQUtFREVQRU5ECisrCisrLyogSW5jbHVkZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2 ZSB0byBiZSBleHBsaWNpdGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJlCisrICogdGhhdCBzaG91 bGQgYmUgdmlzaWJsZSB0byBtYWtlZGVwZW5kLgorKyAqCisrICogW091ciAibWFrZSBkZXBlbmQi IGRvZXNuJ3QgYWN0dWFsbHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRp bmdzCisrICogaW5zdGVhZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRp cmVjdG9yaWVzIHdpdGggZGlzYWJsZWQgYWxnb3JpdGhtcy5dCisrICovCisrCisrI2lmbmRlZiBP UEVOU1NMX0ZJUFMKKysjZGVmaW5lIE9QRU5TU0xfRklQUworKyNlbmRpZgorKworKyNlbmRpZgor KworIC8qIEdlbmVyYXRlIDgwMzg2IGNvZGU/ICovCisgI3VuZGVmIEkzODZfT05MWQorIAorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNzbC0x LjAuMmUvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3Jh bmQvbWRfcmFuZC5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcmFuZC9tZF9yYW5kLmMJMjAxNS0xMi0wNCAxMzo1NTo1 MS45NzA1NjI3MTUgKzAxMDAKK0BAIC0zOTEsNyArMzkxLDEwIEBAIGludCBzc2xlYXlfcmFuZF9i eXRlcyh1bnNpZ25lZCBjaGFyICpidWYKKyAgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NL X1JBTkQyKTsKKyAgICAgY3J5cHRvX2xvY2tfcmFuZCA9IDE7CisgCistICAgIGlmICghaW5pdGlh bGl6ZWQpIHsKKysgICAgLyogYWx3YXlzIHBvbGwgZm9yIGV4dGVybmFsIGVudHJvcHkgaW4gRklQ UyBtb2RlLCBkcmJnIHByb3ZpZGVzIHRoZSAKKysgICAgICogZXhwYW5zaW9uCisrICAgICAqLwor KyAgICBpZiAoIWluaXRpYWxpemVkIHx8IEZJUFNfbW9kdWxlX21vZGUoKSkgeworICAgICAgICAg UkFORF9wb2xsKCk7CisgICAgICAgICBpbml0aWFsaXplZCA9IDE7CisgICAgIH0KK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yYW5kL3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9yYW5kL3JhbmQuaAorLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yYW5kL3JhbmQuaC5m aXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuNzI5NTU3MDk1ICswMTAwCisrKysgb3BlbnNzbC0xLjAu MmUvY3J5cHRvL3JhbmQvcmFuZC5oCTIwMTUtMTItMDQgMTM6NTU6NTEuOTcwNTYyNzE1ICswMTAw CitAQCAtMTMzLDE2ICsxMzMsMzQgQEAgdm9pZCBFUlJfbG9hZF9SQU5EX3N0cmluZ3Modm9pZCk7 CisgLyogRXJyb3IgY29kZXMgZm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8KKyAKKyAvKiBGdW5j dGlvbiBjb2Rlcy4gKi8KKysjIGRlZmluZSBSQU5EX0ZfRU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9E ICAgICAgICAgICAgICAgICAgMTA4CisrIyBkZWZpbmUgUkFORF9GX0ZJUFNfUkFORCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMworKyMgZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRf QllURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDIKKysjIGRlZmluZSBSQU5EX0ZfRklQ U19SQU5EX1NFVF9EVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTA2CisrIyBkZWZpbmUgUkFO RF9GX0ZJUFNfWDkzMV9TRVRfRFQgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNgorKyMgZGVm aW5lIFJBTkRfRl9GSVBTX1NFVF9EVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQK KysjIGRlZmluZSBSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVEICAgICAgICAgICAgICAgICAgICAg ICAgMTA3CisrIyBkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSAgICAgICAgICAgICAg ICAgICAgICAgIDEwNQorICMgZGVmaW5lIFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCAgICAg ICAgICAgICAgICAgICAgICAxMDEKKy0jIGRlZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTAyCisrIyBkZWZpbmUgUkFORF9GX1JBTkRfSU5JVF9G SVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOQorICMgZGVmaW5lIFJBTkRfRl9TU0xF QVlfUkFORF9CWVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKKyAKKyAvKiBSZWFzb24g Y29kZXMuICovCistIyBkZWZpbmUgUkFORF9SX0RVQUxfRUNfRFJCR19ESVNBQkxFRCAgICAgICAg ICAgICAgICAgICAgIDEwNAorLSMgZGVmaW5lIFJBTkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJC RyAgICAgICAgICAgICAgICAgICAxMDIKKy0jIGRlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElB VElOR19EUkJHICAgICAgICAgICAgICAgICAgMTAzCistIyBkZWZpbmUgUkFORF9SX05PX0ZJUFNf UkFORE9NX01FVEhPRF9TRVQgICAgICAgICAgICAgICAgIDEwMQorKyMgZGVmaW5lIFJBTkRfUl9E VUFMX0VDX0RSQkdfRElTQUJMRUQgICAgICAgICAgICAgICAgICAgICAxMTQKKysjIGRlZmluZSBS QU5EX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcgICAgICAgICAgICAgICAgICAgMTEyCisrIyBk ZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRyAgICAgICAgICAgICAgICAgIDEx MworKyMgZGVmaW5lIFJBTkRfUl9OT05fRklQU19NRVRIT0QgICAgICAgICAgICAgICAgICAgICAg ICAgICAxMDUKKysjIGRlZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSAgICAgICAgICAgICAg ICAgICAgICAgICAgMTA2CisrIyBkZWZpbmUgUkFORF9SX05PX0ZJUFNfUkFORE9NX01FVEhPRF9T RVQgICAgICAgICAgICAgICAgIDExMQorKyMgZGVmaW5lIFJBTkRfUl9OT19LRVlfU0VUICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDcKKysjIGRlZmluZSBSQU5EX1JfUFJOR19BU0tJ TkdfRk9SX1RPT19NVUNIICAgICAgICAgICAgICAgICAgMTAxCisrIyBkZWZpbmUgUkFORF9SX1BS TkdfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOAorKyMgZGVmaW5lIFJB TkRfUl9QUk5HX0tFWUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDkKKysjIGRl ZmluZSBSQU5EX1JfUFJOR19OT1RfUkVLRVlFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMTAy CisrIyBkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFU0VFREVEICAgICAgICAgICAgICAgICAgICAg ICAgIDEwMworICMgZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9TRUVERUQgICAgICAgICAgICAgICAg ICAgICAgICAgICAxMDAKKysjIGRlZmluZSBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENI X0tFWSAgICAgICAgICAgICAgMTEwCisrIyBkZWZpbmUgUkFORF9SX1BSTkdfU1RVQ0sgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEwNAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcyBv cGVuc3NsLTEuMC4yZS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4y ZS9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAw MDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwky MDE1LTEyLTA0IDEzOjU1OjUxLjk3MDU2MjcxNSArMDEwMAorQEAgLTcwLDcgKzcwLDcgQEAgdm9p ZCByaXBlbWQxNjBfYmxvY2tfeDg2KFJJUEVNRDE2MF9DVFggKgorIHZvaWQgcmlwZW1kMTYwX2Js b2NrKFJJUEVNRDE2MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsIHNpemVfdCBudW0pOworICNl bmRpZgorIAorLWZpcHNfbWRfaW5pdChSSVBFTUQxNjApCisrbm9uZmlwc19tZF9pbml0KFJJUEVN RDE2MCkKKyB7CisgICAgIG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKyAgICAgYy0+QSA9IFJJ UEVNRDE2MF9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2FfY3JwdC5j LmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2FfY3JwdC5jCistLS0gb3BlbnNzbC0x LjAuMmUvY3J5cHRvL3JzYS9yc2FfY3JwdC5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAw MDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYV9jcnB0LmMJMjAx NS0xMi0wNCAxMzo1NTo1MS45NzA1NjI3MTUgKzAxMDAKK0BAIC04OSw5ICs4OSw5IEBAIGludCBS U0FfcHJpdmF0ZV9lbmNyeXB0KGludCBmbGVuLCBjb25zdAorICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgKnRvLCBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCisgeworICNpZmRl ZiBPUEVOU1NMX0ZJUFMKKy0gICAgaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFn cyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQorLSAgICAgICAgJiYgIShyc2EtPmZsYWdzICYgUlNB X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSB7CistICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX1BSSVZB VEVfRU5DUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisrICAgIGlmIChGSVBTX21v ZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpIHsKKysgICAg ICAgIFJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBULAorKyAgICAgICAgICAgICAgIFJT QV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOworICAgICAgICAgcmV0dXJu IC0xOworICAgICB9CisgI2VuZGlmCitAQCAtMTE1LDkgKzExNSw5IEBAIGludCBSU0FfcHVibGlj X2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IHUKKyAgICAgICAgICAgICAgICAgICAgICAgIFJTQSAq cnNhLCBpbnQgcGFkZGluZykKKyB7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBpZiAoRklQ U19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCist ICAgICAgICAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpIHsKKy0g ICAgICAgIFJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JT QV9NRVRIT0QpOworKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZM QUdfTk9OX0ZJUFNfQUxMT1cpKSB7CisrICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19E RUNSWVBULAorKyAgICAgICAgICAgICAgIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9G SVBTX01PREUpOworICAgICAgICAgcmV0dXJuIC0xOworICAgICB9CisgI2VuZGlmCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9yc2EvcnNhX2VheS5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2Ff ZWF5LmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX2VheS5jCTIwMTUtMTItMDQgMTM6NTU6NTEuOTcxNTYy NzM4ICswMTAwCitAQCAtMTE0LDYgKzExNCwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+ CisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorICNpZm5kZWYgUlNBX05VTEwKKyAKK0BA IC0xNDAsNyArMTQ0LDcgQEAgc3RhdGljIFJTQV9NRVRIT0QgcnNhX3BrY3MxX2VheV9tZXRoID0g eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWYgZSA9PSAzICovCisgICAg IFJTQV9lYXlfaW5pdCwKKyAgICAgUlNBX2VheV9maW5pc2gsCistICAgIDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAvKiBmbGFncyAqLworKyAgICBSU0FfRkxBR19GSVBTX01FVEhPRCwgICAg ICAgLyogZmxhZ3MgKi8KKyAgICAgTlVMTCwKKyAgICAgMCwgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIHJzYV9zaWduICovCisgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBy c2FfdmVyaWZ5ICovCitAQCAtMTYwLDYgKzE2NCwyMiBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVi bGljX2VuY3J5cHQoaW50IGZsCisgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisgICAg IEJOX0NUWCAqY3R4ID0gTlVMTDsKKyAKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAo RklQU19tb2RlKCkpIHsKKysgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7Cisr ICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwKKysgICAg ICAgICAgICAgICAgICAgIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICAg ICAgZ290byBlcnI7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIShyc2EtPmZsYWdzICYg UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrICAgICAgICAgICAgJiYgKEJOX251bV9iaXRzKHJz YS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICAg ICAgUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RP T19TTUFMTCk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9Cisr IyBlbmRpZgorKworICAgICBpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01B WF9NT0RVTFVTX0JJVFMpIHsKKyAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19F TkNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CisgICAgICAgICByZXR1cm4gLTE7CitA QCAtMzYxLDYgKzM4MSwyMiBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGlu dCBmCisgICAgIEJJR05VTSAqdW5ibGluZCA9IE5VTEw7CisgICAgIEJOX0JMSU5ESU5HICpibGlu ZGluZyA9IE5VTEw7CisgCisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9k ZSgpKSB7CisrICAgICAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAg ICAgIEZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULAorKyAgICAgICAgICAg ICAgICAgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgICAgICByZXR1 cm4gLTE7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZM QUdfTk9OX0ZJUFNfQUxMT1cpCisrICAgICAgICAgICAgJiYgKEJOX251bV9iaXRzKHJzYS0+bikg PCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICAgICAgUlNB ZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01B TEwpOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAgICAgIH0KKysgICAgfQorKyMgZW5k aWYKKysKKyAgICAgaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCisgICAgICAgICBn b3RvIGVycjsKKyAgICAgQk5fQ1RYX3N0YXJ0KGN0eCk7CitAQCAtNDk3LDYgKzUzMywyMiBAQCBz dGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0KGludCBmCisgICAgIEJJR05VTSAqdW5i bGluZCA9IE5VTEw7CisgICAgIEJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7CisgCisrIyBp ZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpKSB7CisrICAgICAgICBpZiAo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX1JT QV9FQVlfUFJJVkFURV9ERUNSWVBULAorKyAgICAgICAgICAgICAgICAgICAgRklQU19SX0ZJUFNf U0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9Cisr CisrICAgICAgICBpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisr ICAgICAgICAgICAgJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJ VkFURV9ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKyAgICAgICAgICAgIHJl dHVybiAtMTsKKysgICAgICAgIH0KKysgICAgfQorKyMgZW5kaWYKKysKKyAgICAgaWYgKChjdHgg PSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCisgICAgICAgICBnb3RvIGVycjsKKyAgICAgQk5fQ1RY X3N0YXJ0KGN0eCk7CitAQCAtNjIzLDYgKzY3NSwyMiBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVi bGljX2RlY3J5cHQoaW50IGZsCisgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisgICAg IEJOX0NUWCAqY3R4ID0gTlVMTDsKKyAKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAo RklQU19tb2RlKCkpIHsKKysgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7Cisr ICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCwKKysgICAg ICAgICAgICAgICAgICAgIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICAg ICAgZ290byBlcnI7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoIShyc2EtPmZsYWdzICYg UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrICAgICAgICAgICAgJiYgKEJOX251bV9iaXRzKHJz YS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICAg ICAgUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RP T19TTUFMTCk7CisrICAgICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9Cisr IyBlbmRpZgorKworICAgICBpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01B WF9NT0RVTFVTX0JJVFMpIHsKKyAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19E RUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CisgICAgICAgICByZXR1cm4gLTE7CitA QCAtODg2LDYgKzk1NCw5IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAqcjAs IGMKKyAKKyBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKKyB7CisrIyBpZmRlZiBP UEVOU1NMX0ZJUFMKKysgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOworKyMgZW5kaWYKKyAgICAg cnNhLT5mbGFncyB8PSBSU0FfRkxBR19DQUNIRV9QVUJMSUMgfCBSU0FfRkxBR19DQUNIRV9QUklW QVRFOworICAgICByZXR1cm4gKDEpOworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0 by9yc2EvcnNhX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2FfZXJyLmMK Ky0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzCTIwMTUtMTItMDMg MTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9y c2FfZXJyLmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NzE1NjI3MzggKzAxMDAKK0BAIC0xMzYsNiAr MTM2LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdCisgICAgIHtF UlJfRlVOQyhSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQpLCAiUlNBX3B1YmxpY19lbmNyeXB0In0s CisgICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFVCX0RFQ09ERSksICJSU0FfUFVCX0RFQ09ERSJ9 LAorICAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HKSwgIlJTQV9zZXR1cF9i bGluZGluZyJ9LAorKyAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCks ICJSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kIn0sCisrICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VU X01FVEhPRCksICJSU0Ffc2V0X21ldGhvZCJ9LAorICAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJ R04pLCAiUlNBX3NpZ24ifSwKKyAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NU RVRfU1RSSU5HKSwKKyAgICAgICJSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORyJ9LAorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4y ZS9jcnlwdG8vcnNhL3JzYV9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNh X2dlbi5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYV9nZW4uYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk3MTU2 MjczOCArMDEwMAorQEAgLTY5LDggKzY5LDgwIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+ CisgI2lmZGVmIE9QRU5TU0xfRklQUworICMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CistZXh0 ZXJuIGludCBGSVBTX3JzYV94OTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMs IEJJR05VTSAqZSwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJO X0dFTkNCICpjYik7CisrIyBpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyMgaW5jbHVkZSA8b3Bl bnNzbC9ldnAuaD4KKysKKytzdGF0aWMgaW50IGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAwOwor KworK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCkKKyt7CisrICAgIGZpcHNfcnNh X3BhaXJ3aXNlX2ZhaWwgPSAxOworK30KKysKKytpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2Ep CisreworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHRic1tdID0gIlJTQSBQYWlyd2lzZSBDaGVj ayBEYXRhIjsKKysgICAgdW5zaWduZWQgY2hhciAqY3RidWYgPSBOVUxMLCAqcHRidWYgPSBOVUxM OworKyAgICBpbnQgbGVuLCByZXQgPSAwOworKyAgICBFVlBfUEtFWSAqcGs7CisrCisrICAgIGlm ICgocGsgPSBFVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKwor KyAgICBFVlBfUEtFWV9zZXQxX1JTQShwaywgcnNhKTsKKysKKysgICAgLyogUGVyZm9ybSBwYWly d2lzZSBjb25zaXN0ZW5jeSBzaWduYXR1cmUgdGVzdCAqLworKyAgICBpZiAoIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTlVMTCwgMCwgRVZQX3NoYTEoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwgTlVMTCkKKysgICAgICAgIHx8ICFmaXBz X3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsIE5VTEwsIDAsIEVWUF9zaGExKCksCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURf WDkzMSwgTlVMTCkKKysgICAgICAgIHx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRi cywgLTEsIE5VTEwsIDAsIEVWUF9zaGExKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCBOVUxMKSkKKysgICAgICAgIGdvdG8g ZXJyOworKyAgICAvKiBOb3cgcGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBlbmNyeXB0L2Rl Y3J5cHQgdGVzdCAqLworKyAgICBjdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkp OworKyAgICBpZiAoIWN0YnVmKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGxlbiA9Cisr ICAgICAgICBSU0FfcHVibGljX2VuY3J5cHQoc2l6ZW9mKHRicykgLSAxLCB0YnMsIGN0YnVmLCBy c2EsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNBX1BLQ1MxX1BBRERJTkcpOworKyAg ICBpZiAobGVuIDw9IDApCisrICAgICAgICBnb3RvIGVycjsKKysgICAgLyogQ2hlY2sgY2lwaGVy dGV4dCBkb2Vzbid0IG1hdGNoIHBsYWludGV4dCAqLworKyAgICBpZiAoKGxlbiA9PSAoc2l6ZW9m KHRicykgLSAxKSkgJiYgIW1lbWNtcCh0YnMsIGN0YnVmLCBsZW4pKQorKyAgICAgICAgZ290byBl cnI7CisrICAgIHB0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7CisrCisrICAg IGlmICghcHRidWYpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgbGVuID0gUlNBX3ByaXZhdGVf ZGVjcnlwdChsZW4sIGN0YnVmLCBwdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7CisrICAg IGlmIChsZW4gIT0gKHNpemVvZih0YnMpIC0gMSkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAg aWYgKG1lbWNtcChwdGJ1ZiwgdGJzLCBsZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAg IHJldCA9IDE7CisrCisrICAgIGlmICghcHRidWYpCisrICAgICAgICBnb3RvIGVycjsKKysKKysg ZXJyOgorKyAgICBpZiAocmV0ID09IDApIHsKKysgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0X2Zh aWwoKTsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfQ0hFQ0tfUlNBLCBGSVBTX1JfUEFJ UldJU0VfVEVTVF9GQUlMRUQpOworKyAgICB9CisrCisrICAgIGlmIChjdGJ1ZikKKysgICAgICAg IE9QRU5TU0xfZnJlZShjdGJ1Zik7CisrICAgIGlmIChwdGJ1ZikKKysgICAgICAgIE9QRU5TU0xf ZnJlZShwdGJ1Zik7CisrICAgIGlmIChwaykKKysgICAgICAgIEVWUF9QS0VZX2ZyZWUocGspOwor KworKyAgICByZXR1cm4gcmV0OworK30KKyAjZW5kaWYKKyAKKyBzdGF0aWMgaW50IHJzYV9idWls dGluX2tleWdlbihSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwKK0BAIC04Niw3 ICsxNTgsNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKKyBpbnQg UlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwg Qk5fR0VOQ0IgKmNiKQorIHsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGlmIChGSVBTX21v ZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKysgICAg aWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19G SVBTX01FVEhPRCkKKyAgICAgICAgICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBT X0FMTE9XKSkgeworICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9HRU5FUkFURV9LRVlfRVgsIFJT QV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOworICAgICAgICAgcmV0dXJuIDA7CitAQCAtOTQsMTAg KzE2Niw2IEBAIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYmkKKyAjZW5k aWYKKyAgICAgaWYgKHJzYS0+bWV0aC0+cnNhX2tleWdlbikKKyAgICAgICAgIHJldHVybiByc2Et Pm1ldGgtPnJzYV9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CistI2lmZGVmIE9QRU5T U0xfRklQUworLSAgICBpZiAoRklQU19tb2RlKCkpCistICAgICAgICByZXR1cm4gRklQU19yc2Ff eDkzMV9nZW5lcmF0ZV9rZXlfZXgocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CistI2VuZGlmCisg ICAgIHJldHVybiByc2FfYnVpbHRpbl9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7Cisg fQorIAorQEAgLTExMCw2ICsxNzgsMjAgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4o UlNBICpyc2EsCisgICAgIGludCBiaXRzcCwgYml0c3EsIG9rID0gLTEsIG4gPSAwOworICAgICBC Tl9DVFggKmN0eCA9IE5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQ U19tb2R1bGVfbW9kZSgpKSB7CisrICAgICAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkg eworKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiwgRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAg IH0KKysKKysgICAgICAgIGlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19C SVRTKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOLCBG SVBTX1JfS0VZX1RPT19TSE9SVCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9 CisrICAgIH0KKysjZW5kaWYKKysKKyAgICAgY3R4ID0gQk5fQ1RYX25ldygpOworICAgICBpZiAo Y3R4ID09IE5VTEwpCisgICAgICAgICBnb3RvIGVycjsKK0BAIC0yMzUsNiArMzE3LDE2IEBAIHN0 YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAorICAgICBpZiAoIUJOX21vZF9p bnZlcnNlKHJzYS0+aXFtcCwgcnNhLT5xLCBwLCBjdHgpKQorICAgICAgICAgZ290byBlcnI7Cisg CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgpKSB7Cisr ICAgICAgICBpZiAoZmlwc19yc2FfcGFpcndpc2VfZmFpbCkKKysgICAgICAgICAgICBCTl9hZGRf d29yZChyc2EtPm4sIDEpOworKworKyAgICAgICAgaWYgKCFmaXBzX2NoZWNrX3JzYShyc2EpKQor KyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrI2VuZGlmCisrCisgICAgIG9rID0gMTsK KyAgZXJyOgorICAgICBpZiAob2sgPT0gLTEpIHsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2Ny eXB0by9yc2EvcnNhLmguZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYS5oCistLS0g b3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEu ODU5NTYwMTI2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2EuaAkyMDE1 LTEyLTA0IDEzOjU1OjUxLjk3MTU2MjczOCArMDEwMAorQEAgLTE2OCw2ICsxNjgsOCBAQCBzdHJ1 Y3QgcnNhX3N0IHsKKyAjICBkZWZpbmUgT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUyAgIDE2 Mzg0CisgIyBlbmRpZgorIAorKyMgZGVmaW5lIE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNf QklUUyAxMDI0CisrCisgIyBpZm5kZWYgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCisg IyAgZGVmaW5lIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUyAzMDcyCisgIyBlbmRpZgor QEAgLTMyOSw2ICszMzEsMTMgQEAgUlNBICpSU0FfZ2VuZXJhdGVfa2V5KGludCBiaXRzLCB1bnNp Z25lZAorIAorIC8qIE5ldyB2ZXJzaW9uICovCisgaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNB ICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CisraW50IFJTQV9YOTMx X2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwK KysgICAgICAgICAgICAgICAgICAgICAgIEJJR05VTSAqcTIsIGNvbnN0IEJJR05VTSAqWHAxLCBj b25zdCBCSUdOVU0gKlhwMiwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJJR05VTSAq WHAsIGNvbnN0IEJJR05VTSAqWHExLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQklH TlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCisrICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CisraW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9l eChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJOX0dFTkNCICpjYik7CisgCisgaW50IFJTQV9jaGVja19rZXkoY29uc3Qg UlNBICopOworICAgICAgICAgLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLworQEAgLTUz OCw3ICs1NDcsNyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICMgZGVmaW5l IFJTQV9GX1JTQV9BTEdPUl9UT19NRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTcKKyAj IGRlZmluZSBSU0FfRl9SU0FfQlVJTFRJTl9LRVlHRU4gICAgICAgICAgICAgICAgICAgICAgICAg MTI5CisgIyBkZWZpbmUgUlNBX0ZfUlNBX0NIRUNLX0tFWSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDEyMworLSMgZGVmaW5lIFJTQV9GX1JTQV9DTVNfREVDUllQVCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxNTgKKysjIGRlZmluZSBSU0FfRl9SU0FfQ01TX0RFQ1JZUFQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMjU4CisgIyBkZWZpbmUgUlNBX0ZfUlNBX0VBWV9QUklWQVRF X0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgIDEwMQorICMgZGVmaW5lIFJTQV9GX1JTQV9FQVlf UFJJVkFURV9FTkNSWVBUICAgICAgICAgICAgICAgICAgICAxMDIKKyAjIGRlZmluZSBSU0FfRl9S U0FfRUFZX1BVQkxJQ19ERUNSWVBUICAgICAgICAgICAgICAgICAgICAgMTAzCitAQCAtNTU5LDcg KzU2OCw3IEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgIyBkZWZpbmUgUlNB X0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX09BRVAgICAgICAgICAgICAgICAgIDEyMQorICMgZGVm aW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9PQUVQX01HRjEgICAgICAgICAgICAxNjAK KyAjIGRlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTICAgICAgICAgICAgICAg ICAgMTI1CistIyBkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0YxICAg ICAgICAgICAgIDE0OAorKyMgZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1Nf TUdGMSAgICAgICAgICAgICAxNTgKKyAjIGRlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtD UzFfVFlQRV8xICAgICAgICAgICAgICAgMTA4CisgIyBkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdf QUREX1BLQ1MxX1RZUEVfMiAgICAgICAgICAgICAgIDEwOQorICMgZGVmaW5lIFJTQV9GX1JTQV9Q QURESU5HX0FERF9TU0xWMjMgICAgICAgICAgICAgICAgICAgICAxMTAKK0BAIC01NzMsMjEgKzU4 MiwyMyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICMgZGVmaW5lIFJTQV9G X1JTQV9QQURESU5HX0NIRUNLX1g5MzEgICAgICAgICAgICAgICAgICAgICAxMjgKKyAjIGRlZmlu ZSBSU0FfRl9SU0FfUFJJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE1Cisg IyBkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDExNgorLSMgZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZUFQgICAgICAgICAgICAgICAg ICAgICAgICAxNTAKKy0jIGRlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUICAgICAgICAg ICAgICAgICAgICAgICAgMTUxCisrIyBkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVCAg ICAgICAgICAgICAgICAgICAgICAgIDE1NworKyMgZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VO Q1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAxNDgKKyAjIGRlZmluZSBSU0FfRl9SU0FfUFJJ Vl9ERUNPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM3CisgIyBkZWZpbmUgUlNBX0Zf UlNBX1BSSVZfRU5DT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOAorICMgZGVmaW5l IFJTQV9GX1JTQV9QU1NfVE9fQ1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjIKKy0j IGRlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAg MTUyCisrIyBkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUICAgICAgICAgICAgICAgICAg ICAgICAgIDE0OQorICMgZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfRU5DUllQVCAgICAgICAgICAg ICAgICAgICAgICAgICAxNTMKKyAjIGRlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTM5CisgIyBkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5E SU5HICAgICAgICAgICAgICAgICAgICAgICAgIDEzNgorKyMgZGVmaW5lIFJTQV9GX1JTQV9TRVRf REVGQVVMVF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAxNTAKKysjIGRlZmluZSBSU0FfRl9S U0FfU0VUX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUxCisgIyBkZWZpbmUg UlNBX0ZfUlNBX1NJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNworICMg ZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HICAgICAgICAgICAgICAgICAx MTgKKyAjIGRlZmluZSBSU0FfRl9SU0FfVkVSSUZZICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTE5CisgIyBkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9BU04xX09DVEVUX1NUUklORyAg ICAgICAgICAgICAgIDEyMAorICMgZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTICAg ICAgICAgICAgICAgICAgICAgICAxMjYKKy0jIGRlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1Mx X1BTU19NR0YxICAgICAgICAgICAgICAgICAgMTQ5CisrIyBkZWZpbmUgUlNBX0ZfUlNBX1ZFUklG WV9QS0NTMV9QU1NfTUdGMSAgICAgICAgICAgICAgICAgIDE1MgorIAorIC8qIFJlYXNvbiBjb2Rl cy4gKi8KKyAjIGRlZmluZSBSU0FfUl9BTEdPUklUSE1fTUlTTUFUQ0ggICAgICAgICAgICAgICAg ICAgICAgICAgMTAwCitAQCAtNjIwLDIxICs2MzEsMjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3Ry aW5ncyh2b2lkKTsKKyAjIGRlZmluZSBSU0FfUl9JTlZBTElEX09BRVBfUEFSQU1FVEVSUyAgICAg ICAgICAgICAgICAgICAgMTYyCisgIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDEzOAorICMgZGVmaW5lIFJTQV9SX0lOVkFMSURfUEFERElO R19NT0RFICAgICAgICAgICAgICAgICAgICAgICAxNDEKKy0jIGRlZmluZSBSU0FfUl9JTlZBTElE X1BTU19QQVJBTUVURVJTICAgICAgICAgICAgICAgICAgICAgMTQ5CisrIyBkZWZpbmUgUlNBX1Jf SU5WQUxJRF9QU1NfUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAgICAgIDE1NworICMgZGVmaW5l IFJTQV9SX0lOVkFMSURfUFNTX1NBTFRMRU4gICAgICAgICAgICAgICAgICAgICAgICAxNDYKKy0j IGRlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAg MTUwCisrIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSCAgICAgICAgICAgICAgICAg ICAgICAgIDE1OAorICMgZGVmaW5lIFJTQV9SX0lOVkFMSURfVFJBSUxFUiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMzkKKyAjIGRlZmluZSBSU0FfUl9JTlZBTElEX1g5MzFfRElHRVNUICAg ICAgICAgICAgICAgICAgICAgICAgMTQyCisgIyBkZWZpbmUgUlNBX1JfSVFNUF9OT1RfSU5WRVJT RV9PRl9RICAgICAgICAgICAgICAgICAgICAgIDEyNgorICMgZGVmaW5lIFJTQV9SX0tFWV9TSVpF X1RPT19TTUFMTCAgICAgICAgICAgICAgICAgICAgICAgICAxMjAKKyAjIGRlZmluZSBSU0FfUl9M QVNUX09DVEVUX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgMTM0CisgIyBkZWZpbmUg UlNBX1JfTU9EVUxVU19UT09fTEFSR0UgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNQorLSMg ZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgICAx NTcKKysjIGRlZmluZSBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EICAgICAgICAgICAgICAgICAg ICAgICAgMTQ5CisrIyBkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDE0OQorICMgZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVCAgICAg ICAgICAgICAgICAgICAgICAgICAxNDAKKyAjIGRlZmluZSBSU0FfUl9OVUxMX0JFRk9SRV9CTE9D S19NSVNTSU5HICAgICAgICAgICAgICAgICAgMTEzCisgIyBkZWZpbmUgUlNBX1JfTl9ET0VTX05P VF9FUVVBTF9QX1EgICAgICAgICAgICAgICAgICAgICAgIDEyNworICMgZGVmaW5lIFJTQV9SX09B RVBfREVDT0RJTkdfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAxMjEKKy0jIGRlZmluZSBS U0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFICAgICAgICAgMTU4CisrIyBk ZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSAgICAgICAgIDE1 MAorICMgZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZ UEUgICAxNDgKKyAjIGRlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRCAgICAgICAgICAg ICAgICAgICAgICAgMTE0CisgIyBkZWZpbmUgUlNBX1JfUEtDU19ERUNPRElOR19FUlJPUiAgICAg ICAgICAgICAgICAgICAgICAgIDE1OQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3Jz YS9yc2FfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYV9saWIuYworLS0t IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMJMjAxNS0xMi0wMyAxNTow NDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYV9s aWIuYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk3MTU2MjczOCArMDEwMAorQEAgLTg0LDIzICs4NCwy MiBAQCBSU0EgKlJTQV9uZXcodm9pZCkKKyAKKyB2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2Qo Y29uc3QgUlNBX01FVEhPRCAqbWV0aCkKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBp ZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkg eworKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9SX05P Tl9GSVBTX01FVEhPRCk7CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysjZW5kaWYKKyAgICAg ZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7CisgfQorIAorIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9n ZXRfZGVmYXVsdF9tZXRob2Qodm9pZCkKKyB7CisgICAgIGlmIChkZWZhdWx0X1JTQV9tZXRoID09 IE5VTEwpIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgICAgICBpZiAoRklQU19tb2RlKCkp CistICAgICAgICAgICAgcmV0dXJuIEZJUFNfcnNhX3BrY3MxX3NzbGVheSgpOworLSAgICAgICAg ZWxzZQorLSAgICAgICAgICAgIHJldHVybiBSU0FfUEtDUzFfU1NMZWF5KCk7CistI2Vsc2UKKy0j IGlmZGVmIFJTQV9OVUxMCisrI2lmZGVmIFJTQV9OVUxMCisgICAgICAgICBkZWZhdWx0X1JTQV9t ZXRoID0gUlNBX251bGxfbWV0aG9kKCk7CistIyBlbHNlCisrI2Vsc2UKKyAgICAgICAgIGRlZmF1 bHRfUlNBX21ldGggPSBSU0FfUEtDUzFfU1NMZWF5KCk7CistIyBlbmRpZgorICNlbmRpZgorICAg ICB9CisgCitAQCAtMTE5LDYgKzExOCwxMiBAQCBpbnQgUlNBX3NldF9tZXRob2QoUlNBICpyc2Es IGNvbnN0IFJTQV9NCisgICAgICAqIHRvIGRlYWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29tZXMg ZnJvbS4KKyAgICAgICovCisgICAgIGNvbnN0IFJTQV9NRVRIT0QgKm10bXA7CisrI2lmZGVmIE9Q RU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9G TEFHX0ZJUFNfTUVUSE9EKSkgeworKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9TRVRfTUVUSE9E LCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysj ZW5kaWYKKyAgICAgbXRtcCA9IHJzYS0+bWV0aDsKKyAgICAgaWYgKG10bXAtPmZpbmlzaCkKKyAg ICAgICAgIG10bXAtPmZpbmlzaChyc2EpOworQEAgLTE2NSw2ICsxNzAsMTcgQEAgUlNBICpSU0Ff bmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKKyAgICAgICAgIH0KKyAgICAgfQorICNlbmRpZgor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRo LT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkgeworKyAgICAgICAgUlNBZXJyKFJTQV9G X1JTQV9ORVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKyMgaWZuZGVmIE9QRU5T U0xfTk9fRU5HSU5FCisrICAgICAgICBpZiAocmV0LT5lbmdpbmUpCisrICAgICAgICAgICAgRU5H SU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7CisrIyBlbmRpZgorKyAgICAgICAgT1BFTlNTTF9mcmVl KHJldCk7CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorKyNlbmRpZgorIAorICAgICBy ZXQtPnBhZCA9IDA7CisgICAgIHJldC0+dmVyc2lvbiA9IDA7CitAQCAtMTgzLDcgKzE5OSw3IEBA IFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCisgICAgIHJldC0+YmxpbmRpbmcg PSBOVUxMOworICAgICByZXQtPm10X2JsaW5kaW5nID0gTlVMTDsKKyAgICAgcmV0LT5iaWdudW1f ZGF0YSA9IE5VTEw7CistICAgIHJldC0+ZmxhZ3MgPSByZXQtPm1ldGgtPmZsYWdzICYgflJTQV9G TEFHX05PTl9GSVBTX0FMTE9XOworKyAgICByZXQtPmZsYWdzID0gcmV0LT5tZXRoLT5mbGFnczsK KyAgICAgaWYgKCFDUllQVE9fbmV3X2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1JTQSwgcmV0LCAm cmV0LT5leF9kYXRhKSkgeworICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAgICAgICAgIGlm IChyZXQtPmVuZ2luZSkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9yc2EvcnNhX3Bt ZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jCistLS0gb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2FfcG1ldGguYy5maXBzCTIwMTUtMTItMDMgMTU6MDQ6 MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2FfcG1l dGguYwkyMDE1LTEyLTA0IDEzOjU1OjUxLjk3MjU2Mjc2MiArMDEwMAorQEAgLTIyOCwyMCArMjI4 LDYgQEAgc3RhdGljIGludCBwa2V5X3JzYV9zaWduKEVWUF9QS0VZX0NUWCAqYworICAgICAgICAg ICAgIFJTQWVycihSU0FfRl9QS0VZX1JTQV9TSUdOLCBSU0FfUl9JTlZBTElEX0RJR0VTVF9MRU5H VEgpOworICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgIH0KKy0jaWZkZWYgT1BFTlNT TF9GSVBTCistICAgICAgICBpZiAocmV0ID4gMCkgeworLSAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBzbGVuOworLSAgICAgICAgICAgIHJldCA9IEZJUFNfcnNhX3NpZ25fZGlnZXN0KHJzYSwgdGJz LCB0YnNsZW4sIHJjdHgtPm1kLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJjdHgtPnBhZF9tb2RlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJjdHgtPnNhbHRsZW4sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmN0eC0+bWdmMW1kLCBzaWcsICZzbGVuKTsKKy0gICAgICAgICAgICBpZiAocmV0ID4gMCkK Ky0gICAgICAgICAgICAgICAgKnNpZ2xlbiA9IHNsZW47CistICAgICAgICAgICAgZWxzZQorLSAg ICAgICAgICAgICAgICAqc2lnbGVuID0gMDsKKy0gICAgICAgICAgICByZXR1cm4gcmV0OworLSAg ICAgICAgfQorLSNlbmRpZgorIAorICAgICAgICAgaWYgKEVWUF9NRF90eXBlKHJjdHgtPm1kKSA9 PSBOSURfbWRjMikgeworICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzbHRtcDsKK0BAIC0zNTks MTcgKzM0NSw2IEBAIHN0YXRpYyBpbnQgcGtleV9yc2FfdmVyaWZ5KEVWUF9QS0VZX0NUWAorICAg ICB9CisgI2VuZGlmCisgICAgIGlmIChyY3R4LT5tZCkgeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMK Ky0gICAgICAgIGlmIChydiA+IDApIHsKKy0gICAgICAgICAgICByZXR1cm4gRklQU19yc2FfdmVy aWZ5X2RpZ2VzdChyc2EsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGJzLCB0YnNsZW4sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmN0eC0+bWQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmN0eC0+cGFkX21vZGUsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmN0eC0+c2FsdGxlbiwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByY3R4LT5tZ2YxbWQsIHNpZywgc2lnbGVuKTsKKy0KKy0gICAgICAgIH0KKy0jZW5kaWYK KyAgICAgICAgIGlmIChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykKKyAgICAg ICAgICAgICByZXR1cm4gUlNBX3ZlcmlmeShFVlBfTURfdHlwZShyY3R4LT5tZCksIHRicywgdGJz bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZywgc2lnbGVuLCByc2EpOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jLmZpcHMgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCistLS0gb3BlbnNzbC0xLjAuMmUvY3J5cHRv L3JzYS9yc2Ffc2lnbi5jLmZpcHMJMjAxNS0xMi0wMyAxNTowNDoyMy4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vcnNhL3JzYV9zaWduLmMJMjAxNS0xMi0wNCAxMzo1 NTo1MS45NzI1NjI3NjIgKzAxMDAKK0BAIC0xMzIsNyArMTMyLDEwIEBAIGludCBSU0Ffc2lnbihp bnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKKyAgICAgICAgIGkyZF9YNTA5X1NJRygmc2lnLCAm cCk7CisgICAgICAgICBzID0gdG1wczsKKyAgICAgfQorLSAgICBpID0gUlNBX3ByaXZhdGVfZW5j cnlwdChpLCBzLCBzaWdyZXQsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOworKyAgICAvKiBOQjog Y2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICov CisrICAgIGkgPSByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZf ZW5jKGksIHMsIHNpZ3JldCwgcnNhLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUEtDUzFfUEFERElORykgOgorKyAgICAgICAg MDsKKyAgICAgaWYgKGkgPD0gMCkKKyAgICAgICAgIHJldCA9IDA7CisgICAgIGVsc2UKK0BAIC0x ODgsOCArMTkxLDEwIEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kK KyAgICAgfQorIAorICAgICBpZiAoKGR0eXBlID09IE5JRF9tZDVfc2hhMSkgJiYgcm0pIHsKKy0g ICAgICAgIGkgPSBSU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sCistICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpZ2J1Ziwgcm0sIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwor KyAgICAgICAgaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJf ZGVjKChpbnQpc2lnbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpZ2J1Ziwgcm0sIHJzYSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUEtDUzFfUEFE RElORykKKysgICAgICAgICAgICA6IDA7CisgICAgICAgICBpZiAoaSA8PSAwKQorICAgICAgICAg ICAgIHJldHVybiAwOworICAgICAgICAgKnBybV9sZW4gPSBpOworQEAgLTIwNSw3ICsyMTAsMTEg QEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQorICAgICAgICAgUlNB ZXJyKFJTQV9GX0lOVF9SU0FfVkVSSUZZLCBSU0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsK KyAgICAgICAgIGdvdG8gZXJyOworICAgICB9CistICAgIGkgPSBSU0FfcHVibGljX2RlY3J5cHQo KGludClzaWdsZW4sIHNpZ2J1ZiwgcywgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7CisrICAgIC8q IE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tp bmcgKi8KKysgICAgaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJzYV9w dWJfZGVjKChpbnQpc2lnbGVuLCBzaWdidWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLCByc2EsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUEtDUzFfUEFERElORykg OgorKyAgICAgICAgMDsKKyAKKyAgICAgaWYgKGkgPD0gMCkKKyAgICAgICAgIGdvdG8gZXJyOwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wtMS4w LjJlL2NyeXB0by9zaGEvc2hhLmgKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vc2hhL3NoYS5o LmZpcHMJMjAxNS0xMi0wNCAxMzo1NTo1MS42NTE1NTUyNzYgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vc2hhL3NoYS5oCTIwMTUtMTItMDQgMTM6NTU6NTEuOTcyNTYyNzYyICswMTAw CitAQCAtMTA1LDkgKzEwNSw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQXN0YXRlX3N0IHsKKyB9IFNI QV9DVFg7CisgCisgIyBpZm5kZWYgT1BFTlNTTF9OT19TSEEwCistIyAgaWZkZWYgT1BFTlNTTF9G SVBTCistaW50IHByaXZhdGVfU0hBX0luaXQoU0hBX0NUWCAqYyk7CistIyAgZW5kaWYKKyBpbnQg U0hBX0luaXQoU0hBX0NUWCAqYyk7CisgaW50IFNIQV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qg dm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IFNIQV9GaW5hbCh1bnNpZ25lZCBjaGFyICpt ZCwgU0hBX0NUWCAqYyk7CitAQCAtMTE1LDkgKzExMiw2IEBAIHVuc2lnbmVkIGNoYXIgKlNIQShj b25zdCB1bnNpZ25lZCBjaGFyICoKKyB2b2lkIFNIQV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywgY29u c3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisgIyBlbmRpZgorICMgaWZuZGVmIE9QRU5TU0xfTk9f U0hBMQorLSMgIGlmZGVmIE9QRU5TU0xfRklQUworLWludCBwcml2YXRlX1NIQTFfSW5pdChTSEFf Q1RYICpjKTsKKy0jICBlbmRpZgorIGludCBTSEExX0luaXQoU0hBX0NUWCAqYyk7CisgaW50IFNI QTFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGlu dCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKK0BAIC0xMzksMTAg KzEzMyw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTI1NnN0YXRlX3N0IHsKKyB9IFNIQTI1Nl9DVFg7 CisgCisgIyBpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKKy0jICBpZmRlZiBPUEVOU1NMX0ZJUFMK Ky1pbnQgcHJpdmF0ZV9TSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKKy1pbnQgcHJpdmF0ZV9T SEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjKTsKKy0jICBlbmRpZgorIGludCBTSEEyMjRfSW5pdChT SEEyNTZfQ1RYICpjKTsKKyBpbnQgU0hBMjI0X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25zdCB2 b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgU0hBMjI0X0ZpbmFsKHVuc2lnbmVkIGNoYXIg Km1kLCBTSEEyNTZfQ1RYICpjKTsKK0BAIC0xOTIsMTAgKzE4Miw2IEBAIHR5cGVkZWYgc3RydWN0 IFNIQTUxMnN0YXRlX3N0IHsKKyAjIGVuZGlmCisgCisgIyBpZm5kZWYgT1BFTlNTTF9OT19TSEE1 MTIKKy0jICBpZmRlZiBPUEVOU1NMX0ZJUFMKKy1pbnQgcHJpdmF0ZV9TSEEzODRfSW5pdChTSEE1 MTJfQ1RYICpjKTsKKy1pbnQgcHJpdmF0ZV9TSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsKKy0j ICBlbmRpZgorIGludCBTSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKKyBpbnQgU0hBMzg0X1Vw ZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQg U0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjJlL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9zaGEvc2hhX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9zaGEvc2hh X2xvY2wuaC5maXBzCTIwMTUtMTItMDQgMTM6NTU6NTEuNjUzNTU1MzIyICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMmUvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIwMTUtMTItMDQgMTM6NTU6NTEuOTcy NTYyNzYyICswMTAwCitAQCAtMTIzLDExICsxMjMsMTQgQEAgdm9pZCBzaGExX2Jsb2NrX2RhdGFf b3JkZXIoU0hBX0NUWCAqYywgYworICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAor IAorICNpZmRlZiBTSEFfMAorLWZpcHNfbWRfaW5pdChTSEEpCisrbm9uZmlwc19tZF9pbml0KFNI QSkKKyAjZWxzZQorIGZpcHNfbWRfaW5pdF9jdHgoU0hBMSwgU0hBKQorICNlbmRpZgorIHsKKysj aWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrICAgIEZJUFNfc2Vs ZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAgICAgbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOwor ICAgICBjLT5oMCA9IElOSVRfREFUQV9oMDsKKyAgICAgYy0+aDEgPSBJTklUX0RBVEFfaDE7Citk aWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMgb3BlbnNzbC0x LjAuMmUvY3J5cHRvL3NoYS9zaGEyNTYuYworLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9zaGEv c2hhMjU2LmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjJlL2NyeXB0by9zaGEvc2hhMjU2LmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NzI1 NjI3NjIgKzAxMDAKK0BAIC0xMiwxMiArMTIsMTkgQEAKKyAKKyAjIGluY2x1ZGUgPG9wZW5zc2wv Y3J5cHRvLmg+CisgIyBpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKyMgaWZkZWYgT1BFTlNTTF9G SVBTCisrIyAgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrIyBlbmRpZgorKworICMgaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorIAorIGNvbnN0IGNoYXIgU0hBMjU2X3ZlcnNpb25bXSA9 ICJTSEEtMjU2IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCisgZmlwc19tZF9pbml0X2N0eChT SEEyMjQsIFNIQTI1NikKKyB7CisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgRklQU19zZWxm dGVzdF9jaGVjaygpOworKyMgZW5kaWYKKyAgICAgbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOwor ICAgICBjLT5oWzBdID0gMHhjMTA1OWVkOFVMOworICAgICBjLT5oWzFdID0gMHgzNjdjZDUwN1VM OworQEAgLTMzLDYgKzQwLDkgQEAgZmlwc19tZF9pbml0X2N0eChTSEEyMjQsIFNIQTI1NikKKyAK KyBmaXBzX21kX2luaXQoU0hBMjU2KQorIHsKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrIyBlbmRpZgorICAgICBtZW1zZXQoYywgMCwgc2l6ZW9m KCpjKSk7CisgICAgIGMtPmhbMF0gPSAweDZhMDllNjY3VUw7CisgICAgIGMtPmhbMV0gPSAweGJi NjdhZTg1VUw7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vc2hhL3NoYTUxMi5jLmZp cHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3NoYS9zaGE1MTIuYworLS0tIG9wZW5zc2wtMS4wLjJl L2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9zaGEvc2hhNTEyLmMJMjAxNS0xMi0wNCAx Mzo1NTo1MS45NzI1NjI3NjIgKzAxMDAKK0BAIC01LDYgKzUsMTAgQEAKKyAgKiA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorICAqLworICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2lmICFk ZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTUxMikKKyAv Ki0KKyAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUy4KK0BAIC02Miw2ICs2Niw5IEBAIGNvbnN0IGNo YXIgU0hBNTEyX3ZlcnNpb25bXSA9ICJTSEEtNTEyIgorIAorIGZpcHNfbWRfaW5pdF9jdHgoU0hB Mzg0LCBTSEE1MTIpCisgeworKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIEZJUFNfc2VsZnRl c3RfY2hlY2soKTsKKysjIGVuZGlmCisgICAgIGMtPmhbMF0gPSBVNjQoMHhjYmJiOWQ1ZGMxMDU5 ZWQ4KTsKKyAgICAgYy0+aFsxXSA9IFU2NCgweDYyOWEyOTJhMzY3Y2Q1MDcpOworICAgICBjLT5o WzJdID0gVTY0KDB4OTE1OTAxNWEzMDcwZGQxNyk7CitAQCAtODAsNiArODcsOSBAQCBmaXBzX21k X2luaXRfY3R4KFNIQTM4NCwgU0hBNTEyKQorIAorIGZpcHNfbWRfaW5pdChTSEE1MTIpCisgewor KyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjIGVu ZGlmCisgICAgIGMtPmhbMF0gPSBVNjQoMHg2YTA5ZTY2N2YzYmNjOTA4KTsKKyAgICAgYy0+aFsx XSA9IFU2NCgweGJiNjdhZTg1ODRjYWE3M2IpOworICAgICBjLT5oWzJdID0gVTY0KDB4M2M2ZWYz NzJmZTk0ZjgyYik7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vd2hybHBvb2wvd3Bf ZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYworLS0t IG9wZW5zc2wtMS4wLjJlL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcwkyMDE1LTEyLTAz IDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by93aHJs cG9vbC93cF9kZ3N0LmMJMjAxNS0xMi0wNCAxMzo1NTo1MS45NzM1NjI3ODUgKzAxMDAKK0BAIC01 NSw3ICs1NSw3IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPHN0 cmluZy5oPgorIAorLWZpcHNfbWRfaW5pdChXSElSTFBPT0wpCisrbm9uZmlwc19tZF9pbml0KFdI SVJMUE9PTCkKKyB7CisgICAgIG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKyAgICAgcmV0dXJu ICgxKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL01ha2VmaWxlLm9yZy5maXBzIG9wZW5zc2wt MS4wLjJlL01ha2VmaWxlLm9yZworLS0tIG9wZW5zc2wtMS4wLjJlL01ha2VmaWxlLm9yZy5maXBz CTIwMTUtMTItMDQgMTM6NTU6NTEuOTQzNTYyMDg1ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUv TWFrZWZpbGUub3JnCTIwMTUtMTItMDQgMTM6NTU6NTEuOTczNTYyNzg1ICswMTAwCitAQCAtMTM3 LDYgKzEzNyw5IEBAIEZJUFNDQU5MSUI9CisgCisgQkFTRUFERFI9CisgCisrIyBOb24tZW1wdHkg aWYgRklQUyBlbmFibGVkCisrRklQUz0KKysKKyBESVJTPSAgIGNyeXB0byBzc2wgZW5naW5lcyBh cHBzIHRlc3QgdG9vbHMKKyBFTkdESVJTPSBjY2dvc3QKKyBTSExJQkRJUlM9IGNyeXB0byBzc2wK K0BAIC0xNDksNyArMTUyLDcgQEAgU0RJUlM9ICBcCisgCWJuIGVjIHJzYSBkc2EgZWNkc2EgZGgg ZWNkaCBkc28gZW5naW5lIFwKKyAJYnVmZmVyIGJpbyBzdGFjayBsaGFzaCByYW5kIGVyciBcCisg CWV2cCBhc24xIHBlbSB4NTA5IHg1MDl2MyBjb25mIHR4dF9kYiBwa2NzNyBwa2NzMTIgY29tcCBv Y3NwIHVpIGtyYjUgXAorLQljbXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFjCisrCWNt cyBwcXVldWUgdHMganBha2Ugc3JwIHN0b3JlIGNtYWMgZmlwcworICMga2VlcCBpbiBtaW5kIHRo YXQgdGhlIGFib3ZlIGxpc3QgaXMgYWRqdXN0ZWQgYnkgLi9Db25maWd1cmUKKyAjIGFjY29yZGlu ZyB0byBuby14eHggYXJndW1lbnRzLi4uCisgCitAQCAtMjQwLDYgKzI0Myw3IEBAIEJVSUxERU5W PQlMQ19BTEw9QyBQTEFURk9STT0nJChQTEFURk9STSkKKyAJCUZJUFNMSUJESVI9JyR7RklQU0xJ QkRJUn0nCQkJXAorIAkJRklQU0RJUj0nJHtGSVBTRElSfScJCQkJXAorIAkJRklQU0NBTkxJQj0i JCR7RklQU0NBTkxJQjotJChGSVBTQ0FOTElCKX0iCVwKKysJCUZJUFM9IiQke0ZJUFM6LSQoRklQ Uyl9IglcCisgCQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZFUlJJ REVTPQorICMgTUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlzaCBh bmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAorICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVzIGFt YmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmUvc3NsL3NzbF9hbGdzLmMuZmlwcyBvcGVuc3NsLTEuMC4yZS9zc2wvc3NsX2FsZ3Mu YworLS0tIG9wZW5zc2wtMS4wLjJlL3NzbC9zc2xfYWxncy5jLmZpcHMJMjAxNS0xMi0wMyAxNTow NDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9zc2wvc3NsX2FsZ3MuYwky MDE1LTEyLTA0IDEzOjU1OjUxLjk3MzU2Mjc4NSArMDEwMAorQEAgLTY0LDYgKzY0LDExIEBACisg aW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKKyB7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyAgICBPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKyAgICBpZiAoIUZJUFNfbW9kZSgpKSB7Cisr I2VuZGlmCisrCisgI2lmbmRlZiBPUEVOU1NMX05PX0RFUworICAgICBFVlBfYWRkX2NpcGhlcihF VlBfZGVzX2NiYygpKTsKKyAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsK K0BAIC0xNDIsNiArMTQ3LDQ4IEBAIGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCisgICAgIEVW UF9hZGRfZGlnZXN0KEVWUF9zaGEoKSk7CisgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9kc3MoKSk7 CisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICB9IGVsc2UgeworKyMgaWZuZGVm IE9QRU5TU0xfTk9fREVTCisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2Jj KCkpOworKyMgZW5kaWYKKysjIGlmbmRlZiBPUEVOU1NMX05PX0FFUworKyAgICAgICAgRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQ X2Flc18xOTJfY2JjKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2Jj KCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOworKyAgICAg ICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOworKyMgZW5kaWYKKysjIGlmbmRl ZiBPUEVOU1NMX05PX01ENQorKyAgICAgICAgLyogbmVlZGVkIGV2ZW4gaW4gdGhlIEZJUFMgbW9k ZSBmb3IgVExTIE1BQyAqLworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX21kNSgpKTsKKysg ICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwgInNzbDItbWQ1Iik7CisrICAgICAg ICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsICJzc2wzLW1kNSIpOworKyMgZW5kaWYKKysj IGlmbmRlZiBPUEVOU1NMX05PX1NIQQorKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEo KSk7IC8qIFJTQSB3aXRoIHNoYTEgKi8KKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNO X3NoYTEsICJzc2wzLXNoYTEiKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3No YTFXaXRoUlNBRW5jcnlwdGlvbiwgU05fc2hhMVdpdGhSU0EpOworKyMgZW5kaWYKKysjIGlmbmRl ZiBPUEVOU1NMX05PX1NIQTI1NgorKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgp KTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7CisrIyBlbmRpZgorKyMg aWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hh Mzg0KCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKKysjIGVuZGlm CisrIyBpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19E U0EpCisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsgLyogRFNBIHdpdGggc2hh MSAqLworKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIFNOX2Rz YVdpdGhTSEExXzIpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNI QTEsICJEU1MxIik7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hB MSwgImRzczEiKTsKKysjIGVuZGlmCisrIyBpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorKyAgICAg ICAgRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRp ZgorICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCisgICAgIC8qCisgICAgICAqIFRoaXMgd2lsbCBp bml0aWFsaXNlIHRoZSBidWlsdC1pbiBjb21wcmVzc2lvbiBhbGdvcml0aG1zLiBUaGUgdmFsdWUK CmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4yZS1ycG1idWlsZC5wYXRjaCBiL29wZW5zc2wtMS4w LjJlLXJwbWJ1aWxkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRi MTQ2MGMKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4yZS1ycG1idWlsZC5wYXRjaApA QCAtMCwwICsxLDExNSBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvQ29uZmlndXJlLnJwbWJ1 aWxkIG9wZW5zc2wtMS4wLjJlL0NvbmZpZ3VyZQorLS0tIG9wZW5zc2wtMS4wLjJlL0NvbmZpZ3Vy ZS5ycG1idWlsZAkyMDE1LTEyLTAzIDE1OjA0OjIzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjJlL0NvbmZpZ3VyZQkyMDE1LTEyLTA0IDEzOjIwOjIyLjk5NjgzNTYwNCArMDEwMAor QEAgLTM2NSw4ICszNjUsOCBAQCBteSAldGFibGU9KAorICMjIyMKKyAjICotZ2VuZXJpYyogaXMg ZW5kaWFuLW5ldXRyYWwgdGFyZ2V0LCBidXQgLi9jb25maWcgaXMgZnJlZSB0bworICMgdGhyb3cg aW4gLURbQkxdX0VORElBTiwgd2hpY2hldmVyIGFwcHJvcHJpYXRlLi4uCistImxpbnV4LWdlbmVy aWMzMiIsImdjYzotTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGw6Oi1EX1JFRU5UUkFOVDo6 LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BU Ujoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1Ip LlwkKFNITElCX01JTk9SKSIsCistImxpbnV4LXBwYyIsCSJnY2M6LURCX0VORElBTiAtTzMgLVdh bGw6Oi1EX1JFRU5UUkFOVDo6LWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1JJ U0MxIERFU19VTlJPTEw6JHtwcGMzMl9hc219OmxpbnV4MzI6ZGxmY246bGludXgtc2hhcmVkOi1m UElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxpbnV4LWdlbmVy aWMzMiIsImdjYzotV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotV2wsLXos cmVscm8gLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xM IEJGX1BUUjoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxB R1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKysibGludXgtcHBjIiwJImdjYzotREJfRU5E SUFOIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1XbCwteixyZWxybyAt bGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDoke3Bw YzMyX2FzbX06bGludXgzMjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFH Uyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAorIAorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIyBOb3Rl IHRoYXQgLW1hcmNoIGlzIG5vdCBhbW9uZyBjb21waWxlciBvcHRpb25zIGluIGJlbG93IGxpbnV4 LWFybXY0CitAQCAtMzk1LDMxICszOTUsMzEgQEAgbXkgJXRhYmxlPSgKKyAjCisgIyAgICAgICAu L0NvbmZpZ3VyZSBsaW51eC1hcm12NCAtbWFyY2g9YXJtdjYgLURfX0FSTV9NQVhfQVJDSF9fPTgK KyAjCistImxpbnV4LWFybXY0IiwJImdjYzogLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6 Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHth cm12NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5c JChTSExJQl9NSU5PUikiLAorLSJsaW51eC1hYXJjaDY0IiwiZ2NjOiAtTzMgLVdhbGw6Oi1EX1JF RU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNf SU5UIERFU19VTlJPTEwgQkZfUFRSOiR7YWFyY2g2NF9hc219OmxpbnV4NjQ6ZGxmY246bGludXgt c2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCisrImxp bnV4LWFybXY0IiwJImdjYzotV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjot V2wsLXoscmVscm8gLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNf VU5ST0xMIEJGX1BUUjoke2FybXY0X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOlwkKFJQ TV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKysibGludXgtYWFyY2g2NCIs ImdjYzotRExfRU5ESUFOIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1X bCwteixyZWxybyAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERF U19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHthYXJjaDY0X2FzbX06bGludXg2NDpkbGZjbjpsaW51 eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUik6 Ojo2NCIsCisgIyBDb25maWd1cmUgc2NyaXB0IGFkZHMgbWluaW1hbGx5IHJlcXVpcmVkIC1tYXJj aCBmb3IgYXNzZW1ibHkgc3VwcG9ydCwKKyAjIGlmIG5vIC1tYXJjaCB3YXMgc3BlY2lmaWVkIGF0 IGNvbW1hbmQgbGluZS4gbWlwczMyIGFuZCBtaXBzNjQgYmVsb3cKKyAjIHJlZmVyIHRvIGNvbnRl bXBvcmFyeSBNSVBTIEFyY2hpdGVjdHVyZSBzcGVjaWZpY2F0aW9ucywgTUlQUzMyIGFuZAorICMg TUlQUzY0LCByYXRoZXIgdGhhbiB0byBrZXJuZWwgYml0bmVzcy4KKy0ibGludXgtbWlwczMyIiwJ ImdjYzotbWFiaT0zMiAtTzMgLVdhbGwgLURCTl9ESVYzVzo6LURfUkVFTlRSQU5UOjotbGRsOkJO X0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bWlw czMyX2FzbX06bzMyOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9S KS5cJChTSExJQl9NSU5PUikiLAorLSJsaW51eC1taXBzNjQiLCAgICJnY2M6LW1hYmk9bjMyIC1P MyAtV2FsbCAtREJOX0RJVjNXOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVQgUkM0 X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHttaXBzNjRfYXNtfTpu MzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tYWJpPW4zMjouc28uXCQoU0hMSUJfTUFKT1Ip LlwkKFNITElCX01JTk9SKTo6OjMyIiwKKy0ibGludXg2NC1taXBzNjQiLCAgICJnY2M6LW1hYmk9 NjQgLU8zIC1XYWxsIC1EQk5fRElWM1c6Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJ VF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bWlw czY0X2FzbX06NjQ6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tYWJpPTY0Oi5zby5cJChTSExJ Ql9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAorKyJsaW51eC1taXBzMzIiLAkiZ2NjOi1t YWJpPTMyIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpIC1EQk5fRElWM1c6Oi1EX1JFRU5UUkFOVDo6 LVdsLC16LHJlbHJvIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVT X1VOUk9MTCBCRl9QVFI6JHttaXBzMzJfYXNtfTpvMzI6ZGxmY246bGludXgtc2hhcmVkOi1mUElD OlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKysibGludXgtbWlw czY0IiwgICAiZ2NjOi1tYWJpPW4zMiAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKSAtREJOX0RJVjNX OjotRF9SRUVOVFJBTlQ6Oi1XbCwteixyZWxybyAtbGRsOlNJWFRZX0ZPVVJfQklUIFJDNF9DSEFS IFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEwgQkZfUFRSOiR7bWlwczY0X2FzbX06bjMyOmRs ZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbWFiaT1uMzIgXCQoUlBNX09QVF9GTEFHUyk6LnNvLlwk KFNITElCX1NPTkFNRVZFUik6OjozMiIsCisrImxpbnV4NjQtbWlwczY0IiwgICAiZ2NjOi1tYWJp PTY0IC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpIC1EQk5fRElWM1c6Oi1EX1JFRU5UUkFOVDo6LVds LC16LHJlbHJvIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVT X0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke21pcHM2NF9hc219OjY0OmRsZmNuOmxpbnV4LXNoYXJl ZDotZlBJQzotbWFiaT02NCBcJChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVS KTo6OjY0IiwKKyAjIyMjIElBLTMyIHRhcmdldHMuLi4KKyAibGludXgtaWEzMi1pY2MiLAkiaWNj Oi1ETF9FTkRJQU4gLU8yOjotRF9SRUVOVFJBTlQ6Oi1sZGwgLW5vX2NwcHJ0OkJOX0xMT05HICR7 eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1z aGFyZWQ6LUtQSUM6Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKy0ibGlu dXgtZWxmIiwJImdjYzotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbDo6 LURfUkVFTlRSQU5UOjotbGRsOkJOX0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRz fToke3g4Nl9lbGZfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6Oi5zby5cJChTSExJQl9N QUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtZWxmIiwJImdjYzotRExfRU5ESUFOIC1X YWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1XbCwteixyZWxybyAtbGRsOkJO X0xMT05HICR7eDg2X2djY19kZXN9ICR7eDg2X2djY19vcHRzfToke3g4Nl9lbGZfYXNtfTpkbGZj bjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09QVF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFN RVZFUikiLAorICJsaW51eC1hb3V0IiwJImdjYzotRExfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUt cG9pbnRlciAtbWFyY2g9aTQ4NiAtV2FsbDo6KHVua25vd24pOjo6Qk5fTExPTkcgJHt4ODZfZ2Nj X2Rlc30gJHt4ODZfZ2NjX29wdHN9OiR7eDg2X2FzbX06YS5vdXQiLAorICMjIyMKKy0ibGludXgt Z2VuZXJpYzY0IiwiZ2NjOi1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJf QklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9QVFI6JHtu b19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChT SExJQl9NSU5PUikiLAorLSJsaW51eC1wcGM2NCIsCSJnY2M6LW02NCAtREJfRU5ESUFOIC1PMyAt V2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0 X0NIVU5LIERFU19SSVNDMSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxp bnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1Ip Ojo6NjQiLAorLSJsaW51eC1wcGM2NGxlIiwiZ2NjOi1tNjQgLURMX0VORElBTiAtTzMgLVdhbGw6 Oi1EX1JFRU5UUkFOVDo6LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVO SyBERVNfUklTQzEgREVTX1VOUk9MTDokcHBjNjRfYXNtOmxpbnV4NjRsZTpkbGZjbjpsaW51eC1z aGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OiIs CistImxpbnV4LWlhNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8gLU8zIC1XYWxsOjotRF9S RUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX1VOUk9MTCBE RVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElC X01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1nZW5lcmljNjQiLCJnY2M6LVdhbGwg XCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LVdsLC16LHJlbHJvIC1sZGw6U0lYVFlf Rk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BU Ujoke25vX2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5z by5cJChTSExJQl9TT05BTUVWRVIpOjo6NjQiLAorKyJsaW51eC1wcGM2NCIsCSJnY2M6LW02NCAt REJfRU5ESUFOIC1XYWxsIFwkKFJQTV9PUFRfRkxBR1MpOjotRF9SRUVOVFJBTlQ6Oi1XbCwteixy ZWxybyAtbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19SSVND MSBERVNfVU5ST0xMOiR7cHBjNjRfYXNtfTpsaW51eDY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ QzotbTY0IFwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpOjo6NjQiLAor KyJsaW51eC1wcGM2NGxlIiwiZ2NjOi1tNjQgLURMX0VORElBTiAtV2FsbCBcJChSUE1fT1BUX0ZM QUdTKTo6LURfUkVFTlRSQU5UOjotV2wsLXoscmVscm8gLWxkbDpTSVhUWV9GT1VSX0JJVF9MT05H IFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VOUk9MTDokcHBjNjRfYXNtOmxpbnV4 NjRsZTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NCBcJChSUE1fT1BUX0ZMQUdTKTouc28u XCQoU0hMSUJfU09OQU1FVkVSKTo6OjY0IiwKKysibGludXgtaWE2NCIsCSJnY2M6LURMX0VORElB TiAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotV2wsLXoscmVscm8gLWxk bDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfVU5ST0xMIERFU19JTlQ6JHtpYTY0 X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOlwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChT SExJQl9TT05BTUVWRVIpIiwKKyAibGludXgtaWE2NC1pY2MiLCJpY2M6LURMX0VORElBTiAtTzIg LVdhbGw6Oi1EX1JFRU5UUkFOVDo6LWxkbCAtbm9fY3BwcnQ6U0lYVFlfRk9VUl9CSVRfTE9ORyBS QzRfQ0hVTksgREVTX1JJU0MxIERFU19JTlQ6JHtpYTY0X2FzbX06ZGxmY246bGludXgtc2hhcmVk Oi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKSIsCistImxpbnV4LXg4 Nl82NCIsCSJnY2M6LW02NCAtRExfRU5ESUFOIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRs OlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3g4Nl82 NF9hc219OmVsZjpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NDouc28uXCQoU0hMSUJfTUFK T1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKKysibGludXgteDg2XzY0IiwJImdjYzotbTY0IC1E TF9FTkRJQU4gLVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LVdsLC16LHJl bHJvIC1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xM OiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0IFwkKFJQTV9P UFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpOjo6NjQiLAorICJsaW51eC14ODZfNjQt Y2xhbmciLAkiY2xhbmc6IC1tNjQgLURMX0VORElBTiAtTzMgLVdhbGwgLVdleHRyYSAkY2xhbmdf ZGlzYWJsZWRfd2FybmluZ3MgLVF1bnVzZWQtYXJndW1lbnRzOjotRF9SRUVOVFJBTlQ6Oi1sZGw6 U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0 X2FzbX06ZWxmOmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpP UikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAorICJkZWJ1Zy1saW51eC14ODZfNjQtY2xhbmciLAki Y2xhbmc6IC1EQk5fREVCVUcgLURSRUZfQ0hFQ0sgLURDT05GX0RFQlVHIC1EQ1JZUFRPX01ERUJV RyAtbTY0IC1ETF9FTkRJQU4gLWcgLVdhbGwgLVdleHRyYSAkY2xhbmdfZGlzYWJsZWRfd2Fybmlu Z3MgLVF1bnVzZWQtYXJndW1lbnRzOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRf TE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiR7eDg2XzY0X2FzbX06ZWxmOmRsZmNu OmxpbnV4LXNoYXJlZDotZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlO T1IpOjo6NjQiLAorICJsaW51eC14ODZfNjQtaWNjIiwgImljYzotRExfRU5ESUFOIC1PMjo6LURf UkVFTlRSQU5UOjotbGRsIC1ub19jcHBydDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBE RVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRfYXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1m UElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKTo6OjY0IiwKKyAibGludXgt eDMyIiwJImdjYzotbXgzMiAtRExfRU5ESUFOIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRs OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIERFU19VTlJPTEw6JHt4ODZfNjRf YXNtfTplbGY6ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1teDMyOi5zby5cJChTSExJQl9NQUpP UikuXCQoU0hMSUJfTUlOT1IpOjo6eDMyIiwKKy0ibGludXg2NC1zMzkweCIsCSJnY2M6LW02NCAt REJfRU5ESUFOIC1PMyAtV2FsbDo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xP TkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoke3MzOTB4X2FzbX06NjQ6 ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJ Ql9NSU5PUik6Ojo2NCIsCisrImxpbnV4NjQtczM5MHgiLAkiZ2NjOi1tNjQgLURCX0VORElBTiAt V2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotV2wsLXoscmVscm8gLWxkbDpT SVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6 JHtzMzkweF9hc219OjY0OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTY0IFwkKFJQTV9PUFRf RkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpOjo6NjQiLAorICMjIyMgU28gY2FsbGVkICJo aWdoZ3BycyIgdGFyZ2V0IGZvciB6L0FyY2hpdGVjdHVyZSBDUFVzCisgIyAiSGlnaGdwcnMiIGlz IGtlcm5lbCBmZWF0dXJlIGZpcnN0IGltcGxlbWVudGVkIGluIExpbnV4IDIuNi4zMiwgc2VlCisg IyAvcHJvYy9jcHVpbmZvLiBUaGUgaWRlYSBpcyB0byBwcmVzZXJ2ZSBtb3N0IHNpZ25pZmljYW50 IGJpdHMgb2YKK0BAIC00MzcsMTIgKzQzNywxMiBAQCBteSAldGFibGU9KAorICMjIyMgU1BBUkMg TGludXggc2V0dXBzCisgIyBSYXkgTWlsbGVyIDxyYXkubWlsbGVyQGNvbXB1dGluZy1zZXJ2aWNl cy5veGZvcmQuYWMudWs+IGhhcyBwYXRpZW50bHkKKyAjIGFzc2lzdGVkIHdpdGggZGVidWdnaW5n IG9mIGZvbGxvd2luZyB0d28gY29uZmlncy4KKy0ibGludXgtc3BhcmN2OCIsImdjYzotbWNwdT12 OCAtREJfRU5ESUFOIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtV2FsbCAtREJOX0RJVjJXOjot RF9SRUVOVFJBTlQ6Oi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwg QkZfUFRSOiR7c3BhcmN2OF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNI TElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAorKyJsaW51eC1zcGFyY3Y4IiwiZ2NjOi1tY3B1 PXY4IC1EQl9FTkRJQU4gLVdhbGwgXCQoUlBNX09QVF9GTEFHUykgLURCTl9ESVYyVzo6LURfUkVF TlRSQU5UOjotV2wsLXoscmVscm8gLWxkbDpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVT X1VOUk9MTCBCRl9QVFI6JHtzcGFyY3Y4X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOlwk KFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKyAjIGl0J3MgYSByZWFs IG1lc3Mgd2l0aCAtbWNwdT11bHRyYXNwYXJjIG9wdGlvbiB1bmRlciBMaW51eCwgYnV0CisgIyAt V2EsLUF2OHBsdXMgc2hvdWxkIGRvIHRoZSB0cmljayBubyBtYXR0ZXIgd2hhdC4KKy0ibGludXgt c3BhcmN2OSIsImdjYzotbTMyIC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtTzMgLWZvbWl0 LWZyYW1lLXBvaW50ZXIgLVdhbGwgLVdhLC1BdjhwbHVzIC1EQk5fRElWMlc6Oi1EX1JFRU5UUkFO VDpVTFRSQVNQQVJDOi1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwg QkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyOi5zby5c JChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpIiwKKysibGludXgtc3BhcmN2OSIsImdjYzot bTMyIC1tY3B1PXVsdHJhc3BhcmMgLURCX0VORElBTiAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKSAt V2EsLUF2OHBsdXMgLURCTl9ESVYyVzo6LURfUkVFTlRSQU5UOlVMVFJBU1BBUkM6LVdsLC16LHJl bHJvIC1sZGw6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7 c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzotbTMyIFwkKFJQTV9PUFRfRkxB R1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpIiwKKyAjIEdDQyAzLjEgaXMgYSByZXF1aXJlbWVu dAorLSJsaW51eDY0LXNwYXJjdjkiLCJnY2M6LW02NCAtbWNwdT11bHRyYXNwYXJjIC1EQl9FTkRJ QU4gLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsOjotRF9SRUVOVFJBTlQ6VUxUUkFTUEFS QzotbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJ U0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDot ZlBJQzotbTY0Oi5zby5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpOjo6NjQiLAorKyJs aW51eDY0LXNwYXJjdjkiLCJnY2M6LW02NCAtbWNwdT11bHRyYXNwYXJjIC1EQl9FTkRJQU4gLVdh bGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDpVTFRSQVNQQVJDOi1XbCwteixyZWxy byAtbGRsOkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19QVFIgREVTX1JJ U0MxIERFU19VTlJPTEwgQkZfUFRSOiR7c3BhcmN2OV9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDot ZlBJQzotbTY0IFwkKFJQTV9PUFRfRkxBR1MpOi5zby5cJChTSExJQl9TT05BTUVWRVIpOjo6NjQi LAorICMjIyMgQWxwaGEgTGludXggd2l0aCBHTlUgQyBhbmQgQ29tcGFxIEMgc2V0dXBzCisgIyBT cGVjaWFsIG5vdGVzOgorICMgLSBsaW51eC1hbHBoYStid3gtZ2NjIGlzIG1lbnQgdG8gYmUgdXNl ZCBmcm9tIC4vY29uZmlnIG9ubHkuIElmIHlvdQorQEAgLTE3NjcsNyArMTc2Nyw3IEBAIHdoaWxl ICg8SU4+KQorIAllbHNpZiAoJHNoYXJlZF9leHRlbnNpb24gbmUgIiIgJiYgJHNoYXJlZF9leHRl bnNpb24gPX4gL15cLnMoW29sXSlcLlteXC5dKlwuW15cLl0qJC8pCisgCQl7CisgCQlteSAkc290 bXAgPSAkMTsKKy0JCXMvXlNIQVJFRF9MSUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5L X0VYVFM9LnMkc290bXAuXCQoU0hMSUJfTUFKT1IpIC5zJHNvdG1wLzsKKysJCXMvXlNIQVJFRF9M SUJTX0xJTktfRVhUUz0uKi9TSEFSRURfTElCU19MSU5LX0VYVFM9LnMkc290bXAuXCQoU0hMSUJf U09OQU1FVkVSKSAucyRzb3RtcC87CisgCQl9CisgCWVsc2lmICgkc2hhcmVkX2V4dGVuc2lvbiBu ZSAiIiAmJiAkc2hhcmVkX2V4dGVuc2lvbiA9fiAvXlwuW15cLl0qXC5bXlwuXSpcLmR5bGliJC8p CisgCQl7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9NYWtlZmlsZS5vcmcucnBtYnVpbGQgb3Bl bnNzbC0xLjAuMmUvTWFrZWZpbGUub3JnCistLS0gb3BlbnNzbC0xLjAuMmUvTWFrZWZpbGUub3Jn LnJwbWJ1aWxkCTIwMTUtMTItMDMgMTU6MDQ6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMmUvTWFrZWZpbGUub3JnCTIwMTUtMTItMDQgMTM6MTg6NDQuOTEzNTM4NjE2ICswMTAw CitAQCAtMTAsNiArMTAsNyBAQCBTSExJQl9WRVJTSU9OX0hJU1RPUlk9CisgU0hMSUJfTUFKT1I9 CisgU0hMSUJfTUlOT1I9CisgU0hMSUJfRVhUPQorK1NITElCX1NPTkFNRVZFUj0xMAorIFBMQVRG T1JNPWRpc3QKKyBPUFRJT05TPQorIENPTkZJR1VSRV9BUkdTPQorQEAgLTM0MSwxMCArMzQyLDkg QEAgY2xlYW4tc2hhcmVkOgorIGxpbmstc2hhcmVkOgorIAlAIHNldCAtZTsgZm9yIGkgaW4gJChT SExJQkRJUlMpOyBkbyBcCisgCQkkKE1BS0UpIC1mICQoSEVSRSkvTWFrZWZpbGUuc2hhcmVkIC1l ICQoQlVJTERFTlYpIFwKKy0JCQlMSUJOQU1FPSQkaSBMSUJWRVJTSU9OPSQoU0hMSUJfTUFKT1Ip LiQoU0hMSUJfTUlOT1IpIFwKKysJCQlMSUJOQU1FPSQkaSBMSUJWRVJTSU9OPSQoU0hMSUJfU09O QU1FVkVSKSBcCisgCQkJTElCQ09NUEFUVkVSU0lPTlM9IjskKFNITElCX1ZFUlNJT05fSElTVE9S WSkiIFwKKyAJCQlzeW1saW5rLiQoU0hMSUJfVEFSR0VUKTsgXAorLQkJbGlicz0iJCRsaWJzIC1s JCRpIjsgXAorIAlkb25lCisgCisgYnVpbGQtc2hhcmVkOiBkb18kKFNITElCX1RBUkdFVCkgbGlu ay1zaGFyZWQKK0BAIC0zNTUsNyArMzU1LDcgQEAgZG9fJChTSExJQl9UQVJHRVQpOgorIAkJCWxp YnM9IiQoTElCS1JCNSkgJCRsaWJzIjsgXAorIAkJZmk7IFwKKyAJCSQoQ0xFQVJFTlYpICYmICQo TUFLRSkgLWYgTWFrZWZpbGUuc2hhcmVkIC1lICQoQlVJTERFTlYpIFwKKy0JCQlMSUJOQU1FPSQk aSBMSUJWRVJTSU9OPSQoU0hMSUJfTUFKT1IpLiQoU0hMSUJfTUlOT1IpIFwKKysJCQlMSUJOQU1F PSQkaSBMSUJWRVJTSU9OPSQoU0hMSUJfU09OQU1FVkVSKSBcCisgCQkJTElCQ09NUEFUVkVSU0lP TlM9IjskKFNITElCX1ZFUlNJT05fSElTVE9SWSkiIFwKKyAJCQlMSUJERVBTPSIkJGxpYnMgJChF WF9MSUJTKSIgXAorIAkJCWxpbmtfYS4kKFNITElCX1RBUkdFVCk7IFwKCmRpZmYgLS1naXQgYS9v cGVuc3NsLTEuMC4yZS13cmFwLXBhZC5wYXRjaCBiL29wZW5zc2wtMS4wLjJlLXdyYXAtcGFkLnBh dGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZDA0M2MKLS0tIC9kZXYv bnVsbAorKysgYi9vcGVuc3NsLTEuMC4yZS13cmFwLXBhZC5wYXRjaApAQCAtMCwwICsxLDU0MSBA QAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9jX2FsbGMuYy53cmFwIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9ldnAvY19hbGxjLmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8v ZXZwL2NfYWxsYy5jLndyYXAJMjAxNS0xMi0wNCAxMzozMzo0Mi4xMTg1NTAwMzYgKzAxMDAKKysr KyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2NfYWxsYy5jCTIwMTUtMTItMDQgMTM6MzM6NDIu MTkwNTUxNzIyICswMTAwCitAQCAtMTc5LDYgKzE3OSw3IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxs X2NpcGhlcnModm9pZCkKKyAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfeHRzKCkpOwor ICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jY20oKSk7CisgICAgIEVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMTI4X3dyYXAoKSk7CisrICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4 X3dyYXBfcGFkKCkpOworICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywg IkFFUzEyOCIpOworICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywgImFl czEyOCIpOworICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7CitAQCAtMTkx LDYgKzE5Miw3IEBAIHZvaWQgT3BlblNTTF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAgICAgRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfZ2NtKCkpOworICAgICBFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzE5Ml9jY20oKSk7CisgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX3dyYXAoKSk7 CisrICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX3dyYXBfcGFkKCkpOworICAgICBFVlBf YWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywgIkFFUzE5MiIpOworICAgICBFVlBfYWRk X2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywgImFlczE5MiIpOworICAgICBFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzI1Nl9lY2IoKSk7CitAQCAtMjA0LDYgKzIwNiw3IEBAIHZvaWQgT3BlblNT TF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZf eHRzKCkpOworICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jY20oKSk7CisgICAgIEVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X3dyYXAoKSk7CisrICAgIEVWUF9hZGRfY2lwaGVyKEVW UF9hZXNfMjU2X3dyYXBfcGFkKCkpOworICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNf MjU2X2NiYywgIkFFUzI1NiIpOworICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2 X2NiYywgImFlczI1NiIpOworICMgaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZp bmVkKE9QRU5TU0xfTk9fU0hBMSkKK0BAIC0yNTgsNiArMjYxLDcgQEAgdm9pZCBPcGVuU1NMX2Fk ZF9hbGxfY2lwaGVycyh2b2lkKQorIAorICAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19l ZGUoKSk7CisgICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTMoKSk7CisrICAgICAg ICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfd3JhcCgpKTsKKyAjIGVuZGlmCisgCisgIyBp Zm5kZWYgT1BFTlNTTF9OT19BRVMKK0BAIC0yNzIsNiArMjc2LDcgQEAgdm9pZCBPcGVuU1NMX2Fk ZF9hbGxfY2lwaGVycyh2b2lkKQorICAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhf eHRzKCkpOworICAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2NtKCkpOworICAg ICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfd3JhcCgpKTsKKysgICAgICAgIEVWUF9h ZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3dyYXBfcGFkKCkpOworICAgICAgICAgRVZQX2FkZF9jaXBo ZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsICJBRVMxMjgiKTsKKyAgICAgICAgIEVWUF9hZGRfY2lw aGVyX2FsaWFzKFNOX2Flc18xMjhfY2JjLCAiYWVzMTI4Iik7CisgICAgICAgICBFVlBfYWRkX2Np cGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7CitAQCAtMjg0LDYgKzI4OSw3IEBAIHZvaWQgT3BlblNT TF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNf MTkyX2djbSgpKTsKKyAgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NjbSgpKTsK KyAgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX3dyYXAoKSk7CisrICAgICAgICBF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml93cmFwX3BhZCgpKTsKKyAgICAgICAgIEVWUF9hZGRf Y2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCAiQUVTMTkyIik7CisgICAgICAgICBFVlBfYWRk X2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywgImFlczE5MiIpOworICAgICAgICAgRVZQX2Fk ZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNiKCkpOworQEAgLTI5Nyw2ICszMDMsNyBAQCB2b2lkIE9w ZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCisgICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBf YWVzXzI1Nl94dHMoKSk7CisgICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jY20o KSk7CisgICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl93cmFwKCkpOworKyAgICAg ICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfd3JhcF9wYWQoKSk7CisgICAgICAgICBFVlBf YWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywgIkFFUzI1NiIpOworICAgICAgICAgRVZQ X2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzI1Nl9jYmMsICJhZXMyNTYiKTsKKyAjIGVuZGlmCitk aWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2VfYWVzLmMud3JhcCBvcGVuc3NsLTEu MC4yZS9jcnlwdG8vZXZwL2VfYWVzLmMKKy0tLSBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2Vf YWVzLmMud3JhcAkyMDE1LTEyLTA0IDEzOjMzOjQyLjExOTU1MDA1OSArMDEwMAorKysrIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9ldnAvZV9hZXMuYwkyMDE1LTEyLTA0IDEzOjMzOjQyLjE5MDU1MTcy MiArMDEwMAorQEAgLTEsNSArMSw1IEBACisgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0gKiBDb3B5cmlnaHQg KGMpIDIwMDEtMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K KysgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxNCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAgKgorICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworQEAgLTE5 NTMsNyArMTk1Myw3IEBAIHN0YXRpYyBpbnQgYWVzX3dyYXBfaW5pdF9rZXkoRVZQX0NJUEhFUl8K KyAgICAgICAgICAgICB3Y3R4LT5pdiA9IE5VTEw7CisgICAgIH0KKyAgICAgaWYgKGl2KSB7Cist ICAgICAgICBtZW1jcHkoY3R4LT5pdiwgaXYsIDgpOworKyAgICAgICAgbWVtY3B5KGN0eC0+aXYs IGl2LCBFVlBfQ0lQSEVSX0NUWF9pdl9sZW5ndGgoY3R4KSk7CisgICAgICAgICB3Y3R4LT5pdiA9 IGN0eC0+aXY7CisgICAgIH0KKyAgICAgcmV0dXJuIDE7CitAQCAtMTk2NCwzMCArMTk2NCw1NyBA QCBzdGF0aWMgaW50IGFlc193cmFwX2NpcGhlcihFVlBfQ0lQSEVSX0NUCisgeworICAgICBFVlBf QUVTX1dSQVBfQ1RYICp3Y3R4ID0gY3R4LT5jaXBoZXJfZGF0YTsKKyAgICAgc2l6ZV90IHJ2Owor KyAgICAvKiBBRVMgd3JhcCB3aXRoIHBhZGRpbmcgaGFzIElWIGxlbmd0aCBvZiA0LCB3aXRob3V0 IHBhZGRpbmcgOCAqLworKyAgICBpbnQgcGFkID0gRVZQX0NJUEhFUl9DVFhfaXZfbGVuZ3RoKGN0 eCkgPT0gNDsKKysgICAgLyogTm8gZmluYWwgb3BlcmF0aW9uIHNvIGFsd2F5cyByZXR1cm4gemVy byBsZW5ndGggKi8KKyAgICAgaWYgKCFpbikKKyAgICAgICAgIHJldHVybiAwOworLSAgICBpZiAo aW5sZW4gJSA4KQorKyAgICAvKiBJbnB1dCBsZW5ndGggbXVzdCBhbHdheXMgYmUgbm9uLXplcm8g Ki8KKysgICAgaWYgKCFpbmxlbikKKyAgICAgICAgIHJldHVybiAtMTsKKy0gICAgaWYgKGN0eC0+ ZW5jcnlwdCAmJiBpbmxlbiA8IDgpCisrICAgIC8qIElmIGRlY3J5cHRpbmcgbmVlZCBhdCBsZWFz dCAxNiBieXRlcyBhbmQgbXVsdGlwbGUgb2YgOCAqLworKyAgICBpZiAoIWN0eC0+ZW5jcnlwdCAm JiAoaW5sZW4gPCAxNiB8fCBpbmxlbiAmIDB4NykpCisgICAgICAgICByZXR1cm4gLTE7CistICAg IGlmICghY3R4LT5lbmNyeXB0ICYmIGlubGVuIDwgMTYpCisrICAgIC8qIElmIG5vdCBwYWRkaW5n IGlucHV0IG11c3QgYmUgbXVsdGlwbGUgb2YgOCAqLworKyAgICBpZiAoIXBhZCAmJiBpbmxlbiAm IDB4NykKKyAgICAgICAgIHJldHVybiAtMTsKKyAgICAgaWYgKCFvdXQpIHsKKy0gICAgICAgIGlm IChjdHgtPmVuY3J5cHQpCisrICAgICAgICBpZiAoY3R4LT5lbmNyeXB0KSB7CisrICAgICAgICAg ICAgLyogSWYgcGFkZGluZyByb3VuZCB1cCB0byBtdWx0aXBsZSBvZiA4ICovCisrICAgICAgICAg ICAgaWYgKHBhZCkKKysgICAgICAgICAgICAgICAgaW5sZW4gPSAoaW5sZW4gKyA3KSAvIDggKiA4 OworKyAgICAgICAgICAgIC8qIDggYnl0ZSBwcmVmaXggKi8KKyAgICAgICAgICAgICByZXR1cm4g aW5sZW4gKyA4OworLSAgICAgICAgZWxzZQorKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAg ICAvKiBJZiBub3QgcGFkZGluZyBvdXRwdXQgd2lsbCBiZSBleGFjdGx5IDggYnl0ZXMKKysgICAg ICAgICAgICAgKiBzbWFsbGVyIHRoYW4gaW5wdXQuIElmIHBhZGRpbmcgaXQgd2lsbCBiZSBhdAor KyAgICAgICAgICAgICAqIGxlYXN0IDggYnl0ZXMgc21hbGxlciBidXQgd2UgZG9uJ3Qga25vdyBo b3cKKysgICAgICAgICAgICAgKiBtdWNoLgorKyAgICAgICAgICAgICAqLworICAgICAgICAgICAg IHJldHVybiBpbmxlbiAtIDg7CisgICAgIH0KKysgICAgfQorKyAgICBpZiAocGFkKSB7CisgICAg IGlmIChjdHgtPmVuY3J5cHQpCistICAgICAgICBydiA9IENSWVBUT18xMjhfd3JhcCgmd2N0eC0+ a3Mua3MsIHdjdHgtPml2LCBvdXQsIGluLCBpbmxlbiwKKysgICAgICAgICAgICBydiA9IENSWVBU T18xMjhfd3JhcF9wYWQoJndjdHgtPmtzLmtzLCB3Y3R4LT5pdiwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3V0LCBpbiwgaW5sZW4sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoYmxvY2sxMjhfZikgQUVTX2VuY3J5cHQpOworICAgICBlbHNlCistICAgICAg ICBydiA9IENSWVBUT18xMjhfdW53cmFwKCZ3Y3R4LT5rcy5rcywgd2N0eC0+aXYsIG91dCwgaW4s IGlubGVuLAorKyAgICAgICAgICAgIHJ2ID0gQ1JZUFRPXzEyOF91bndyYXBfcGFkKCZ3Y3R4LT5r cy5rcywgd2N0eC0+aXYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b3V0LCBpbiwgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibG9jazEy OF9mKSBBRVNfZGVjcnlwdCk7CisrICAgIH0gZWxzZSB7CisrICAgICAgICBpZiAoY3R4LT5lbmNy eXB0KQorKyAgICAgICAgICAgIHJ2ID0gQ1JZUFRPXzEyOF93cmFwKCZ3Y3R4LT5rcy5rcywgd2N0 eC0+aXYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBpbiwgaW5sZW4s IChibG9jazEyOF9mKSBBRVNfZW5jcnlwdCk7CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAg cnYgPSBDUllQVE9fMTI4X3Vud3JhcCgmd2N0eC0+a3Mua3MsIHdjdHgtPml2LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBpbiwgaW5sZW4sIChibG9jazEyOF9mKSBB RVNfZGVjcnlwdCk7CisrICAgIH0KKyAgICAgcmV0dXJuIHJ2ID8gKGludClydiA6IC0xOworIH0K KyAKKy0jZGVmaW5lIFdSQVBfRkxBR1MgICAgICAoRVZQX0NJUEhfV1JBUF9NT0RFIFwKKysjIGRl ZmluZSBXUkFQX0ZMQUdTICAgICAgKEVWUF9DSVBIX1dSQVBfTU9ERSB8IEVWUF9DSVBIX0ZMQUdf RklQUyBcCisgICAgICAgICAgICAgICAgIHwgRVZQX0NJUEhfQ1VTVE9NX0lWIHwgRVZQX0NJUEhf RkxBR19DVVNUT01fQ0lQSEVSIFwKKyAgICAgICAgICAgICAgICAgfCBFVlBfQ0lQSF9BTFdBWVNf Q0FMTF9JTklUIHwgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCisgCitAQCAtMjAzMiwzICsy MDU5LDQ1IEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X3dyYXAodm9pZCkKKyB7Cisg ICAgIHJldHVybiAmYWVzXzI1Nl93cmFwOworIH0KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJUEhF UiBhZXNfMTI4X3dyYXBfcGFkID0geworKyAgICBOSURfaWRfYWVzMTI4X3dyYXBfcGFkLAorKyAg ICA4LCAxNiwgNCwgV1JBUF9GTEFHUywKKysgICAgYWVzX3dyYXBfaW5pdF9rZXksIGFlc193cmFw X2NpcGhlciwKKysgICAgTlVMTCwKKysgICAgc2l6ZW9mKEVWUF9BRVNfV1JBUF9DVFgpLAorKyAg ICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisrfTsKKysKKytjb25zdCBFVlBfQ0lQSEVSICpFVlBf YWVzXzEyOF93cmFwX3BhZCh2b2lkKQorK3sKKysgICAgcmV0dXJuICZhZXNfMTI4X3dyYXBfcGFk OworK30KKysKKytzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBhZXNfMTkyX3dyYXBfcGFkID0gewor KyAgICBOSURfaWRfYWVzMTkyX3dyYXBfcGFkLAorKyAgICA4LCAyNCwgNCwgV1JBUF9GTEFHUywK KysgICAgYWVzX3dyYXBfaW5pdF9rZXksIGFlc193cmFwX2NpcGhlciwKKysgICAgTlVMTCwKKysg ICAgc2l6ZW9mKEVWUF9BRVNfV1JBUF9DVFgpLAorKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxM CisrfTsKKysKKytjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml93cmFwX3BhZCh2b2lkKQor K3sKKysgICAgcmV0dXJuICZhZXNfMTkyX3dyYXBfcGFkOworK30KKysKKytzdGF0aWMgY29uc3Qg RVZQX0NJUEhFUiBhZXNfMjU2X3dyYXBfcGFkID0geworKyAgICBOSURfaWRfYWVzMjU2X3dyYXBf cGFkLAorKyAgICA4LCAzMiwgNCwgV1JBUF9GTEFHUywKKysgICAgYWVzX3dyYXBfaW5pdF9rZXks IGFlc193cmFwX2NpcGhlciwKKysgICAgTlVMTCwKKysgICAgc2l6ZW9mKEVWUF9BRVNfV1JBUF9D VFgpLAorKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisrfTsKKysKKytjb25zdCBFVlBfQ0lQ SEVSICpFVlBfYWVzXzI1Nl93cmFwX3BhZCh2b2lkKQorK3sKKysgICAgcmV0dXJuICZhZXNfMjU2 X3dyYXBfcGFkOworK30KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZV9kZXMz LmMud3JhcCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2VfZGVzMy5jCistLS0gb3BlbnNzbC0x LjAuMmUvY3J5cHRvL2V2cC9lX2RlczMuYy53cmFwCTIwMTUtMTItMDQgMTM6MzM6NDIuMTE5NTUw MDU5ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDE1LTEy LTA0IDEzOjMzOjQyLjE5MTU1MTc0NSArMDEwMAorQEAgLTQ3NCw3ICs0NzQsNyBAQCBzdGF0aWMg Y29uc3QgRVZQX0NJUEhFUiBkZXMzX3dyYXAgPSB7CisgICAgIE5JRF9pZF9zbWltZV9hbGdfQ01T M0RFU3dyYXAsCisgICAgIDgsIDI0LCAwLAorICAgICBFVlBfQ0lQSF9XUkFQX01PREUgfCBFVlBf Q0lQSF9DVVNUT01fSVYgfCBFVlBfQ0lQSF9GTEFHX0NVU1RPTV9DSVBIRVIKKy0gICAgICAgIHwg RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrICAgICAgICB8IEVWUF9DSVBIX0ZMQUdfREVG QVVMVF9BU04xIHwgRVZQX0NJUEhfRkxBR19GSVBTLAorICAgICBkZXNfZWRlM19pbml0X2tleSwg ZGVzX2VkZTNfd3JhcF9jaXBoZXIsCisgICAgIE5VTEwsCisgICAgIHNpemVvZihERVNfRURFX0tF WSksCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2V2cC5oLndyYXAgb3BlbnNz bC0xLjAuMmUvY3J5cHRvL2V2cC9ldnAuaAorLS0tIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAv ZXZwLmgud3JhcAkyMDE1LTEyLTA0IDEzOjMzOjQyLjEyMDU1MDA4MyArMDEwMAorKysrIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9ldnAvZXZwLmgJMjAxNS0xMi0wNCAxMzozMzo0Mi4xOTE1NTE3NDUg KzAxMDAKK0BAIC04MzQsNiArODM0LDcgQEAgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhf Y2NtKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTI4X2djbSh2b2lkKTsKKyBj b25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEyOF94dHModm9pZCk7CisgY29uc3QgRVZQX0NJUEhF UiAqRVZQX2Flc18xMjhfd3JhcCh2b2lkKTsKKytjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzEy OF93cmFwX3BhZCh2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzE5Ml9lY2Iodm9p ZCk7CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfY2JjKHZvaWQpOworIGNvbnN0IEVW UF9DSVBIRVIgKkVWUF9hZXNfMTkyX2NmYjEodm9pZCk7CitAQCAtODQ1LDYgKzg0Niw3IEBAIGNv bnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX2N0cih2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVS ICpFVlBfYWVzXzE5Ml9jY20odm9pZCk7CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJf Z2NtKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMTkyX3dyYXAodm9pZCk7Cisr Y29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xOTJfd3JhcF9wYWQodm9pZCk7CisgY29uc3QgRVZQ X0NJUEhFUiAqRVZQX2Flc18yNTZfZWNiKHZvaWQpOworIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF9h ZXNfMjU2X2NiYyh2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jZmIxKHZv aWQpOworQEAgLTg1Nyw2ICs4NTksNyBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9j Y20odm9pZCk7CisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18yNTZfZ2NtKHZvaWQpOworIGNv bnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2X3h0cyh2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVS ICpFVlBfYWVzXzI1Nl93cmFwKHZvaWQpOworK2NvbnN0IEVWUF9DSVBIRVIgKkVWUF9hZXNfMjU2 X3dyYXBfcGFkKHZvaWQpOworICMgIGlmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVm aW5lZChPUEVOU1NMX05PX1NIQTEpCisgY29uc3QgRVZQX0NJUEhFUiAqRVZQX2Flc18xMjhfY2Jj X2htYWNfc2hhMSh2b2lkKTsKKyBjb25zdCBFVlBfQ0lQSEVSICpFVlBfYWVzXzI1Nl9jYmNfaG1h Y19zaGExKHZvaWQpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL2V2cC9ldnB0ZXN0 cy50eHQud3JhcCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2V2cHRlc3RzLnR4dAorLS0tIG9w ZW5zc2wtMS4wLjJlL2NyeXB0by9ldnAvZXZwdGVzdHMudHh0LndyYXAJMjAxNS0xMi0wMyAxNTow NDoyMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vZXZwL2V2cHRl c3RzLnR4dAkyMDE1LTEyLTA0IDEzOjMzOjQyLjE5MTU1MTc0NSArMDEwMAorQEAgLTM5OSwzICsz OTksNyBAQCBpZC1hZXMyNTYtd3JhcDowMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwCisgaWQtYWVz MTkyLXdyYXA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3 OjowMDExMjIzMzQ0NTU2Njc3ODg5OUFBQkJDQ0RERUVGRjAwMDEwMjAzMDQwNTA2MDc6MDMxRDMz MjY0RTE1RDMzMjY4RjI0RUMyNjA3NDNFRENFMUM2QzdEREVFNzI1QTkzNkJBODE0OTE1QzY3NjJE MgorIGlkLWFlczI1Ni13cmFwOjAwMDEwMjAzMDQwNTA2MDcwODA5MEEwQjBDMEQwRTBGMTAxMTEy MTMxNDE1MTYxNzE4MTkxQTFCMUMxRDFFMUY6OjAwMTEyMjMzNDQ1NTY2Nzc4ODk5QUFCQkNDRERF RUZGMDAwMTAyMDMwNDA1MDYwNzpBOEY5QkMxNjEyQzY4QjNGRjZFNkY0RkJFMzBFNzFFNDc2OUM4 QjgwQTMyQ0I4OTU4Q0Q1RDE3RDZCMjU0REExCisgaWQtYWVzMjU2LXdyYXA6MDAwMTAyMDMwNDA1 MDYwNzA4MDkwQTBCMEMwRDBFMEYxMDExMTIxMzE0MTUxNjE3MTgxOTFBMUIxQzFEMUUxRjo6MDAx MTIyMzM0NDU1NjY3Nzg4OTlBQUJCQ0NEREVFRkYwMDAxMDIwMzA0MDUwNjA3MDgwOTBBMEIwQzBE MEUwRjoyOEM5RjQwNEM0QjgxMEY0Q0JDQ0IzNUNGQjg3RjgyNjNGNTc4NkUyRDgwRUQzMjZDQkM3 RjBFNzFBOTlGNDNCRkI5ODhCOUI3QTAyREQyMQorKyMgQUVTIHdyYXAgdGVzdHMgZnJvbSBSRkM1 NjQ5CisraWQtYWVzMTkyLXdyYXAtcGFkOjU4NDBkZjZlMjliMDJhZjFhYjQ5M2I3MDViZjE2ZWEx YWU4MzM4ZjRkY2MxNzZhODo6YzM3YjdlNjQ5MjU4NDM0MGJlZDEyMjA3ODA4OTQxMTU1MDY4Zjcz ODoxMzhiZGVhYTliOGZhN2ZjNjFmOTc3NDJlNzIyNDhlZTVhZTZhZTUzNjBkMWFlNmE1ZjU0ZjM3 M2ZhNTQzYjZhCisraWQtYWVzMTkyLXdyYXAtcGFkOjU4NDBkZjZlMjliMDJhZjFhYjQ5M2I3MDVi ZjE2ZWExYWU4MzM4ZjRkY2MxNzZhODo6NDY2ZjcyNTA2MTczNjk6YWZiZWIwZjA3ZGZiZjU0MTky MDBmMmNjYjUwYmIyNGYKKysKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tb2Rlcy9t b2Rlcy5oLndyYXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL21vZGVzL21vZGVzLmgKKy0tLSBvcGVu c3NsLTEuMC4yZS9jcnlwdG8vbW9kZXMvbW9kZXMuaC53cmFwCTIwMTUtMTItMDQgMTM6MzM6NDEu NzcwNTQxODg2ICswMTAwCisrKysgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL21vZGVzL21vZGVzLmgJ MjAxNS0xMi0wNCAxMzozMzo0Mi4xOTE1NTE3NDUgKzAxMDAKK0BAIC0xNTcsNiArMTU3LDEyIEBA IHNpemVfdCBDUllQVE9fMTI4X3Vud3JhcCh2b2lkICprZXksIGNvbnMKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBibG9jazEyOF9mIGJsb2NrKTsKKytzaXplX3QgQ1JZUFRPXzEyOF93cmFwX3Bh ZCh2b2lkICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmljdiwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmxlbiwgYmxvY2sxMjhfZiBibG9j ayk7Cisrc2l6ZV90IENSWVBUT18xMjhfdW53cmFwX3BhZCh2b2lkICprZXksIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmljdiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo YXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgaW5sZW4sIGJsb2NrMTI4X2YgYmxvY2spOworIAorICNpZmRlZiAgX19j cGx1c3BsdXMKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yZS9jcnlwdG8vbW9kZXMvd3JhcDEy OC5jLndyYXAgb3BlbnNzbC0xLjAuMmUvY3J5cHRvL21vZGVzL3dyYXAxMjguYworLS0tIG9wZW5z c2wtMS4wLjJlL2NyeXB0by9tb2Rlcy93cmFwMTI4LmMud3JhcAkyMDE1LTEyLTAzIDE1OjA0OjIz LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjJlL2NyeXB0by9tb2Rlcy93cmFwMTI4 LmMJMjAxNS0xMi0wNCAxMzozNzo1MS40ODYzNjY5ODQgKzAxMDAKK0BAIC0yLDYgKzIsNyBAQAor IC8qCisgICogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9y ZykgZm9yIHRoZSBPcGVuU1NMCisgICogcHJvamVjdC4KKysgKiBNb2RlIHdpdGggcGFkZGluZyBj b250cmlidXRlZCBieSBQZXRyIFNwYWNlayAocHNwYWNla0ByZWRoYXQuY29tKS4KKyAgKi8KKyAv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQorICAqIENvcHlyaWdodCAoYykgMjAxMyBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0BAIC01MiwxOSArNTMsNDQgQEAKKyAgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorICAqLworIAorKy8qKiAgQmV3YXJlIQorKyAqCisrICogIEZvbGxvd2luZyB3cmFwcGlu ZyBtb2RlcyB3ZXJlIGRlc2lnbmVkIGZvciBBRVMgYnV0IHRoaXMgaW1wbGVtZW50YXRpb24KKysg KiAgYWxsb3dzIHlvdSB0byB1c2UgdGhlbSBmb3IgYW55IDEyOCBiaXQgYmxvY2sgY2lwaGVyLgor KyAqLworKworICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNpbmNsdWRlIDxvcGVuc3NsL21vZGVz Lmg+CisgCisrLyoqIFJGQyAzMzk0IHNlY3Rpb24gMi4yLjMuMSBEZWZhdWx0IEluaXRpYWwgVmFs dWUgKi8KKyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkZWZhdWx0X2l2W10gPSB7CisgICAg IDB4QTYsIDB4QTYsIDB4QTYsIDB4QTYsIDB4QTYsIDB4QTYsIDB4QTYsIDB4QTYsCisgfTsKKyAK Ky0vKgorLSAqIElucHV0IHNpemUgbGltaXQ6IGxvd2VyIHRoYW4gbWF4aW11bSBvZiBzdGFuZGFy ZHMgYnV0IGZhciBsYXJnZXIgdGhhbgorKy8qKiBSRkMgNTY0OSBzZWN0aW9uIDMgQWx0ZXJuYXRp dmUgSW5pdGlhbCBWYWx1ZSAzMi1iaXQgY29uc3RhbnQgKi8KKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBkZWZhdWx0X2FpdltdID0geworKyAgICAweEE2LCAweDU5LCAweDU5LCAweEE2Cisr fTsKKysKKysvKiogSW5wdXQgc2l6ZSBsaW1pdDogbG93ZXIgdGhhbiBtYXhpbXVtIG9mIHN0YW5k YXJkcyBidXQgZmFyIGxhcmdlciB0aGFuCisgICogYW55dGhpbmcgdGhhdCB3aWxsIGJlIHVzZWQg aW4gcHJhY3RpY2UuCisgICovCisgI2RlZmluZSBDUllQVE8xMjhfV1JBUF9NQVggKDFVTCA8PCAz MSkKKyAKKysvKiogV3JhcHBpbmcgYWNjb3JkaW5nIHRvIFJGQyAzMzk0IHNlY3Rpb24gMi4yLjEu CisrICoKKysgKiAgQHBhcmFtW2luXSAga2V5ICAgIEtleSB2YWx1ZS4gCisrICogIEBwYXJhbVtp bl0gIGl2ICAgICBJViB2YWx1ZS4gTGVuZ3RoID0gOCBieXRlcy4gTlVMTCA9IHVzZSBkZWZhdWx0 X2l2LgorKyAqICBAcGFyYW1baW5dICBpbiAgICAgUGxhaW4gdGV4dCBhcyBuIDY0LWJpdCBibG9j a3MsIG4gPj0gMi4KKysgKiAgQHBhcmFtW2luXSAgaW5sZW4gIExlbmd0aCBvZiBpbi4KKysgKiAg QHBhcmFtW291dF0gb3V0ICAgIENpcGhlciB0ZXh0LiBNaW5pbWFsIGJ1ZmZlciBsZW5ndGggPSAo aW5sZW4gKyA4KSBieXRlcy4KKysgKiAgICAgICAgICAgICAgICAgICAgIElucHV0IGFuZCBvdXRw dXQgYnVmZmVycyBjYW4gb3ZlcmxhcCBpZiBibG9jayBmdW5jdGlvbgorKyAqICAgICAgICAgICAg ICAgICAgICAgc3VwcG9ydHMgdGhhdC4KKysgKiAgQHBhcmFtW2luXSAgYmxvY2sgIEJsb2NrIHBy b2Nlc3NpbmcgZnVuY3Rpb24uCisrICogIEByZXR1cm4gICAgICAgICAgICAwIGlmIGlubGVuIGRv ZXMgbm90IGNvbnNpc3Qgb2YgbiA2NC1iaXQgYmxvY2tzLCBuID49IDIuCisrICogICAgICAgICAg ICAgICAgICAgICBvciBpZiBpbmxlbiA+IENSWVBUTzEyOF9XUkFQX01BWC4KKysgKiAgICAgICAg ICAgICAgICAgICAgIE91dHB1dCBsZW5ndGggaWYgd3JhcHBpbmcgc3VjY2VlZGVkLgorKyAqLwor IHNpemVfdCBDUllQVE9fMTI4X3dyYXAodm9pZCAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpp diwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4sCitA QCAtNzIsNyArOTgsNyBAQCBzaXplX3QgQ1JZUFRPXzEyOF93cmFwKHZvaWQgKmtleSwgY29uc3QK KyB7CisgICAgIHVuc2lnbmVkIGNoYXIgKkEsIEJbMTZdLCAqUjsKKyAgICAgc2l6ZV90IGksIGos IHQ7CistICAgIGlmICgoaW5sZW4gJiAweDcpIHx8IChpbmxlbiA8IDgpIHx8IChpbmxlbiA+IENS WVBUTzEyOF9XUkFQX01BWCkpCisrICAgIGlmICgoaW5sZW4gJiAweDcpIHx8IChpbmxlbiA8IDE2 KSB8fCAoaW5sZW4gPiBDUllQVE8xMjhfV1JBUF9NQVgpKQorICAgICAgICAgcmV0dXJuIDA7Cisg ICAgIEEgPSBCOworICAgICB0ID0gMTsKK0BAIC0xMDAsNyArMTI2LDIzIEBAIHNpemVfdCBDUllQ VE9fMTI4X3dyYXAodm9pZCAqa2V5LCBjb25zdAorICAgICByZXR1cm4gaW5sZW4gKyA4OworIH0K KyAKKy1zaXplX3QgQ1JZUFRPXzEyOF91bndyYXAodm9pZCAqa2V5LCBjb25zdCB1bnNpZ25lZCBj aGFyICppdiwKKysvKiogVW53cmFwcGluZyBhY2NvcmRpbmcgdG8gUkZDIDMzOTQgc2VjdGlvbiAy LjIuMiBzdGVwcyAxLTIuCisrICogIElWIGNoZWNrIChzdGVwIDMpIGlzIHJlc3BvbnNpYmlsaXR5 IG9mIHRoZSBjYWxsZXIuCisrICoKKysgKiAgQHBhcmFtW2luXSAga2V5ICAgIEtleSB2YWx1ZS4g CisrICogIEBwYXJhbVtvdXRdIGl2ICAgICBVbmNoZWNrZWQgSVYgdmFsdWUuIE1pbmltYWwgYnVm ZmVyIGxlbmd0aCA9IDggYnl0ZXMuCisrICogIEBwYXJhbVtvdXRdIG91dCAgICBQbGFpbiB0ZXh0 IHdpdGhvdXQgSVYuCisrICogICAgICAgICAgICAgICAgICAgICBNaW5pbWFsIGJ1ZmZlciBsZW5n dGggPSAoaW5sZW4gLSA4KSBieXRlcy4KKysgKiAgICAgICAgICAgICAgICAgICAgIElucHV0IGFu ZCBvdXRwdXQgYnVmZmVycyBjYW4gb3ZlcmxhcCBpZiBibG9jayBmdW5jdGlvbgorKyAqICAgICAg ICAgICAgICAgICAgICAgc3VwcG9ydHMgdGhhdC4KKysgKiAgQHBhcmFtW2luXSAgaW4gICAgIENp cGhlcnRleHQgdGV4dCBhcyBuIDY0LWJpdCBibG9ja3MKKysgKiAgQHBhcmFtW2luXSAgaW5sZW4g IExlbmd0aCBvZiBpbi4KKysgKiAgQHBhcmFtW2luXSAgYmxvY2sgIEJsb2NrIHByb2Nlc3Npbmcg ZnVuY3Rpb24uCisrICogIEByZXR1cm4gICAgICAgICAgICAwIGlmIGlubGVuIGlzIG91dCBvZiBy YW5nZSBbMjQsIENSWVBUTzEyOF9XUkFQX01BWF0KKysgKiAgICAgICAgICAgICAgICAgICAgIG9y IGlmIGlubGVuIGlzIG5vdCBtdWx0aXBseSBvZiA4LgorKyAqICAgICAgICAgICAgICAgICAgICAg T3V0cHV0IGxlbmd0aCBvdGhlcndpc2UuCisrICovCisrc3RhdGljIHNpemVfdCBjcnlwdG9fMTI4 X3Vud3JhcF9yYXcodm9pZCAqa2V5LCB1bnNpZ25lZCBjaGFyICppdiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuLAorICAgICAgICAgICAgICAg ICAgICAgICAgICBibG9jazEyOF9mIGJsb2NrKQorQEAgLTEyOCwxMSArMTcwLDE5MCBAQCBzaXpl X3QgQ1JZUFRPXzEyOF91bndyYXAodm9pZCAqa2V5LCBjb25zCisgICAgICAgICAgICAgbWVtY3B5 KFIsIEIgKyA4LCA4KTsKKyAgICAgICAgIH0KKyAgICAgfQorKyAgICBtZW1jcHkoaXYsIEEsIDgp OworKyAgICByZXR1cm4gaW5sZW47CisrfQorKworKy8qKiBVbndyYXBwaW5nIGFjY29yZGluZyB0 byBSRkMgMzM5NCBzZWN0aW9uIDIuMi4yIGluY2x1ZGluZyBJViBjaGVjay4KKysgKiAgRmlyc3Qg YmxvY2sgb2YgcGxhaW4gdGV4dCBoYXZlIHRvIG1hdGNoIHN1cHBsaWVkIElWIG90aGVyd2lzZSBh biBlcnJvciBpcworKyAqICByZXR1cm5lZC4KKysgKgorKyAqICBAcGFyYW1baW5dICBrZXkgICAg S2V5IHZhbHVlLiAKKysgKiAgQHBhcmFtW291dF0gaXYgICAgIFVuY2hlY2tlZCBJViB2YWx1ZS4g TWluaW1hbCBidWZmZXIgbGVuZ3RoID0gOCBieXRlcy4KKysgKiAgQHBhcmFtW291dF0gb3V0ICAg IFBsYWluIHRleHQgd2l0aG91dCBJVi4KKysgKiAgICAgICAgICAgICAgICAgICAgIE1pbmltYWwg YnVmZmVyIGxlbmd0aCA9IChpbmxlbiAtIDgpIGJ5dGVzLgorKyAqICAgICAgICAgICAgICAgICAg ICAgSW5wdXQgYW5kIG91dHB1dCBidWZmZXJzIGNhbiBvdmVybGFwIGlmIGJsb2NrIGZ1bmN0aW9u CisrICogICAgICAgICAgICAgICAgICAgICBzdXBwb3J0cyB0aGF0LgorKyAqICBAcGFyYW1baW5d ICBpbiAgICAgQ2lwaGVydGV4dCB0ZXh0IGFzIG4gNjQtYml0IGJsb2NrcworKyAqICBAcGFyYW1b aW5dICBpbmxlbiAgTGVuZ3RoIG9mIGluLgorKyAqICBAcGFyYW1baW5dICBibG9jayAgQmxvY2sg cHJvY2Vzc2luZyBmdW5jdGlvbi4KKysgKiAgQHJldHVybiAgICAgICAgICAgIDAgaWYgaW5sZW4g aXMgb3V0IG9mIHJhbmdlIFsyNCwgQ1JZUFRPMTI4X1dSQVBfTUFYXQorKyAqICAgICAgICAgICAg ICAgICAgICAgb3IgaWYgaW5sZW4gaXMgbm90IG11bHRpcGx5IG9mIDgKKysgKiAgICAgICAgICAg ICAgICAgICAgIG9yIGlmIElWIGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQgdmFsdWUuCisrICogICAg ICAgICAgICAgICAgICAgICBPdXRwdXQgbGVuZ3RoIG90aGVyd2lzZS4KKysgKi8KKytzaXplX3Qg Q1JZUFRPXzEyOF91bndyYXAodm9pZCAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCB1bnNpZ25l ZCBjaGFyICppbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlubGVuLCBibG9j azEyOF9mIGJsb2NrKQorK3sKKysgICAgc2l6ZV90IHJldDsKKysgICAgdW5zaWduZWQgY2hhciBn b3RfaXZbOF07CisrCisrICAgIHJldCA9IGNyeXB0b18xMjhfdW53cmFwX3JhdyhrZXksIGdvdF9p diwgb3V0LCBpbiwgaW5sZW4sIGJsb2NrKTsKKysgICAgaWYgKHJldCA9PSAwKQorKyAgICAgICAg cmV0dXJuIDA7CisrCisgICAgIGlmICghaXYpCisgICAgICAgICBpdiA9IGRlZmF1bHRfaXY7Cist ICAgIGlmIChtZW1jbXAoQSwgaXYsIDgpKSB7CisrICAgIGlmIChDUllQVE9fbWVtY21wKGdvdF9p diwgaXYsIDgpKSB7CisrICAgICAgICBPUEVOU1NMX2NsZWFuc2Uob3V0LCByZXQpOworKyAgICAg ICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrLyoqIFdyYXBw aW5nIGFjY29yZGluZyB0byBSRkMgNTY0OSBzZWN0aW9uIDQuMS4KKysgKgorKyAqICBAcGFyYW1b aW5dICBrZXkgICAgS2V5IHZhbHVlLiAKKysgKiAgQHBhcmFtW2luXSAgaWN2ICAgIChOb24tc3Rh bmRhcmQpIElWLCA0IGJ5dGVzLiBOVUxMID0gdXNlIGRlZmF1bHRfYWl2LgorKyAqICBAcGFyYW1b b3V0XSBvdXQgICAgQ2lwaGVyIHRleHQuIE1pbmltYWwgYnVmZmVyIGxlbmd0aCA9IChpbmxlbiAr IDE1KSBieXRlcy4KKysgKiAgICAgICAgICAgICAgICAgICAgIElucHV0IGFuZCBvdXRwdXQgYnVm ZmVycyBjYW4gb3ZlcmxhcCBpZiBibG9jayBmdW5jdGlvbgorKyAqICAgICAgICAgICAgICAgICAg ICAgc3VwcG9ydHMgdGhhdC4KKysgKiAgQHBhcmFtW2luXSAgaW4gICAgIFBsYWluIHRleHQgYXMg biA2NC1iaXQgYmxvY2tzLCBuID49IDIuCisrICogIEBwYXJhbVtpbl0gIGlubGVuICBMZW5ndGgg b2YgaW4uCisrICogIEBwYXJhbVtpbl0gIGJsb2NrICBCbG9jayBwcm9jZXNzaW5nIGZ1bmN0aW9u LgorKyAqICBAcmV0dXJuICAgICAgICAgICAgMCBpZiBpbmxlbiBpcyBvdXQgb2YgcmFuZ2UgWzEs IENSWVBUTzEyOF9XUkFQX01BWF0uCisrICogICAgICAgICAgICAgICAgICAgICBPdXRwdXQgbGVu Z3RoIGlmIHdyYXBwaW5nIHN1Y2NlZWRlZC4KKysgKi8KKytzaXplX3QgQ1JZUFRPXzEyOF93cmFw X3BhZCh2b2lkICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmljdiwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmxlbiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICBibG9jazEyOF9mIGJsb2NrKQorK3sKKysgICAgLyogbjogbnVtYmVy IG9mIDY0LWJpdCBibG9ja3MgaW4gdGhlIHBhZGRlZCBrZXkgZGF0YSAqLworKyAgICBjb25zdCBz aXplX3QgYmxvY2tzX3BhZGRlZCA9IChpbmxlbiArIDcpIC8gODsKKysgICAgY29uc3Qgc2l6ZV90 IHBhZGRlZF9sZW4gPSBibG9ja3NfcGFkZGVkICogODsKKysgICAgY29uc3Qgc2l6ZV90IHBhZGRp bmdfbGVuID0gcGFkZGVkX2xlbiAtIGlubGVuOworKyAgICAvKiBSRkMgNTY0OSBzZWN0aW9uIDM6 IEFsdGVybmF0aXZlIEluaXRpYWwgVmFsdWUgKi8KKysgICAgdW5zaWduZWQgY2hhciBhaXZbOF07 CisrICAgIGludCByZXQ7CisrCisrICAgIC8qIFNlY3Rpb24gMTogdXNlIDMyLWJpdCBmaXhlZCBm aWVsZCBmb3IgcGxhaW50ZXh0IG9jdGV0IGxlbmd0aCAqLworKyAgICBpZiAoaW5sZW4gPT0gMCB8 fCBpbmxlbiA+PSBDUllQVE8xMjhfV1JBUF9NQVgpCisrICAgICAgICByZXR1cm4gMDsKKysKKysg ICAgLyogU2VjdGlvbiAzOiBBbHRlcm5hdGl2ZSBJbml0aWFsIFZhbHVlICovCisrICAgIGlmICgh aWN2KQorKyAgICAgICAgbWVtY3B5KGFpdiwgZGVmYXVsdF9haXYsIDQpOworKyAgICBlbHNlCisr ICAgICAgICBtZW1jcHkoYWl2LCBpY3YsIDQpOyAgICAvKiBTdGFuZGFyZCBkb2Vzbid0IG1lbnRp b24gdGhpcy4gKi8KKysKKysgICAgYWl2WzRdID0gKGlubGVuID4+IDI0KSAmIDB4RkY7CisrICAg IGFpdls1XSA9IChpbmxlbiA+PiAxNikgJiAweEZGOworKyAgICBhaXZbNl0gPSAoaW5sZW4gPj4g OCkgJiAweEZGOworKyAgICBhaXZbN10gPSBpbmxlbiAmIDB4RkY7CisrCisrICAgIGlmIChwYWRk ZWRfbGVuID09IDgpIHsKKysgICAgICAgIC8qIFNlY3Rpb24gNC4xIC0gc3BlY2lhbCBjYXNlIGlu IHN0ZXAgMjoKKysgICAgICAgICAqIElmIHRoZSBwYWRkZWQgcGxhaW50ZXh0IGNvbnRhaW5zIGV4 YWN0bHkgZWlnaHQgb2N0ZXRzLCB0aGVuCisrICAgICAgICAgKiBwcmVwZW5kIHRoZSBBSVYgYW5k IGVuY3J5cHQgdGhlIHJlc3VsdGluZyAxMjgtYml0IGJsb2NrCisrICAgICAgICAgKiB1c2luZyBB RVMgaW4gRUNCIG1vZGUuICovCisrICAgICAgICBtZW1tb3ZlKG91dCArIDgsIGluLCBpbmxlbik7 CisrICAgICAgICBtZW1jcHkob3V0LCBhaXYsIDgpOworKyAgICAgICAgbWVtc2V0KG91dCArIDgg KyBpbmxlbiwgMCwgcGFkZGluZ19sZW4pOworKyAgICAgICAgYmxvY2sob3V0LCBvdXQsIGtleSk7 CisrICAgICAgICByZXQgPSAxNjsgICAgICAgICAgICAgICAvKiBBSVYgKyBwYWRkZWQgaW5wdXQg Ki8KKysgICAgfSBlbHNlIHsKKysgICAgICAgIG1lbW1vdmUob3V0LCBpbiwgaW5sZW4pOworKyAg ICAgICAgbWVtc2V0KG91dCArIGlubGVuLCAwLCBwYWRkaW5nX2xlbik7IC8qIFNlY3Rpb24gNC4x IHN0ZXAgMSAqLworKyAgICAgICAgcmV0ID0gQ1JZUFRPXzEyOF93cmFwKGtleSwgYWl2LCBvdXQs IG91dCwgcGFkZGVkX2xlbiwgYmxvY2spOworKyAgICB9CisrCisrICAgIHJldHVybiByZXQ7Cisr fQorKworKy8qKiBVbndyYXBwaW5nIGFjY29yZGluZyB0byBSRkMgNTY0OSBzZWN0aW9uIDQuMi4K KysgKgorKyAqICBAcGFyYW1baW5dICBrZXkgICAgS2V5IHZhbHVlLiAKKysgKiAgQHBhcmFtW2lu XSAgaWN2ICAgIChOb24tc3RhbmRhcmQpIElWLCA0IGJ5dGVzLiBOVUxMID0gdXNlIGRlZmF1bHRf YWl2LgorKyAqICBAcGFyYW1bb3V0XSBvdXQgICAgUGxhaW4gdGV4dC4gTWluaW1hbCBidWZmZXIg bGVuZ3RoID0gaW5sZW4gYnl0ZXMuCisrICogICAgICAgICAgICAgICAgICAgICBJbnB1dCBhbmQg b3V0cHV0IGJ1ZmZlcnMgY2FuIG92ZXJsYXAgaWYgYmxvY2sgZnVuY3Rpb24KKysgKiAgICAgICAg ICAgICAgICAgICAgIHN1cHBvcnRzIHRoYXQuCisrICogIEBwYXJhbVtpbl0gIGluICAgICBDaXBo ZXJ0ZXh0IHRleHQgYXMgbiA2NC1iaXQgYmxvY2tzCisrICogIEBwYXJhbVtpbl0gIGlubGVuICBM ZW5ndGggb2YgaW4uCisrICogIEBwYXJhbVtpbl0gIGJsb2NrICBCbG9jayBwcm9jZXNzaW5nIGZ1 bmN0aW9uLgorKyAqICBAcmV0dXJuICAgICAgICAgICAgMCBpZiBpbmxlbiBpcyBvdXQgb2YgcmFu Z2UgWzE2LCBDUllQVE8xMjhfV1JBUF9NQVhdLAorKyAqICAgICAgICAgICAgICAgICAgICAgb3Ig aWYgaW5sZW4gaXMgbm90IG11bHRpcGx5IG9mIDgKKysgKiAgICAgICAgICAgICAgICAgICAgIG9y IGlmIElWIGFuZCBtZXNzYWdlIGxlbmd0aCBpbmRpY2F0b3IgZG9lc24ndCBtYXRjaC4KKysgKiAg ICAgICAgICAgICAgICAgICAgIE91dHB1dCBsZW5ndGggaWYgdW53cmFwcGluZyBzdWNjZWVkZWQg YW5kIElWIG1hdGNoZXMuCisrICovCisrc2l6ZV90IENSWVBUT18xMjhfdW53cmFwX3BhZCh2b2lk ICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmljdiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4sCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBibG9jazEyOF9mIGJsb2NrKQorK3sKKysgICAgLyogbjogbnVtYmVyIG9m IDY0LWJpdCBibG9ja3MgaW4gdGhlIHBhZGRlZCBrZXkgZGF0YSAqLworKyAgICBzaXplX3QgbiA9 IGlubGVuIC8gOCAtIDE7CisrICAgIHNpemVfdCBwYWRkZWRfbGVuOworKyAgICBzaXplX3QgcGFk ZGluZ19sZW47CisrICAgIHNpemVfdCBwdGV4dF9sZW47CisrICAgIC8qIFJGQyA1NjQ5IHNlY3Rp b24gMzogQWx0ZXJuYXRpdmUgSW5pdGlhbCBWYWx1ZSAqLworKyAgICB1bnNpZ25lZCBjaGFyIGFp dls4XTsKKysgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgemVyb3NbOF0gPSB7IDB4MCB9OworKyAg ICBzaXplX3QgcmV0OworKworKyAgICAvKiBTZWN0aW9uIDQuMjogQ2lwaGVyIHRleHQgbGVuZ3Ro IGhhcyB0byBiZSAobisxKSA2NC1iaXQgYmxvY2tzLiAqLworKyAgICBpZiAoKGlubGVuICYgMHg3 KSAhPSAwIHx8IGlubGVuIDwgMTYgfHwgaW5sZW4gPj0gQ1JZUFRPMTI4X1dSQVBfTUFYKQorKyAg ICAgICAgcmV0dXJuIDA7CisrCisrICAgIG1lbW1vdmUob3V0LCBpbiwgaW5sZW4pOworKyAgICBp ZiAoaW5sZW4gPT0gMTYpIHsKKysgICAgICAgIC8qIFNlY3Rpb24gNC4yIC0gc3BlY2lhbCBjYXNl IGluIHN0ZXAgMToKKysgICAgICAgICAqIFdoZW4gbj0xLCB0aGUgY2lwaGVydGV4dCBjb250YWlu cyBleGFjdGx5IHR3byA2NC1iaXQKKysgICAgICAgICAqIGJsb2NrcyBhbmQgdGhleSBhcmUgZGVj cnlwdGVkIGFzIGEgc2luZ2xlIEFFUworKyAgICAgICAgICogYmxvY2sgdXNpbmcgQUVTIGluIEVD QiBtb2RlOgorKyAgICAgICAgICogQUlWIHwgUFsxXSA9IERFQyhLLCBDWzBdIHwgQ1sxXSkKKysg ICAgICAgICAqLworKyAgICAgICAgYmxvY2sob3V0LCBvdXQsIGtleSk7CisrICAgICAgICBtZW1j cHkoYWl2LCBvdXQsIDgpOworKyAgICAgICAgLyogUmVtb3ZlIEFJViAqLworKyAgICAgICAgbWVt bW92ZShvdXQsIG91dCArIDgsIDgpOworKyAgICAgICAgcGFkZGVkX2xlbiA9IDg7CisrICAgIH0g ZWxzZSB7CisrICAgICAgICBwYWRkZWRfbGVuID0gaW5sZW4gLSA4OworKyAgICAgICAgcmV0ID0g Y3J5cHRvXzEyOF91bndyYXBfcmF3KGtleSwgYWl2LCBvdXQsIG91dCwgaW5sZW4sIGJsb2NrKTsK KysgICAgICAgIGlmIChwYWRkZWRfbGVuICE9IHJldCkgeworICAgICAgICAgT1BFTlNTTF9jbGVh bnNlKG91dCwgaW5sZW4pOworICAgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKy0gICAgcmV0dXJu IGlubGVuOworKyAgICB9CisrCisrICAgIC8qIFNlY3Rpb24gMzogQUlWIGNoZWNrczogQ2hlY2sg dGhhdCBNU0IoMzIsQSkgPSBBNjU5NTlBNi4KKysgICAgICogT3B0aW9uYWxseSBhIHVzZXItc3Vw cGxpZWQgdmFsdWUgY2FuIGJlIHVzZWQKKysgICAgICogKGV2ZW4gaWYgc3RhbmRhcmQgZG9lc24n dCBtZW50aW9uIHRoaXMpLiAqLworKyAgICBpZiAoKCFpY3YgJiYgQ1JZUFRPX21lbWNtcChhaXYs IGRlZmF1bHRfYWl2LCA0KSkKKysgICAgICAgIHx8IChpY3YgJiYgQ1JZUFRPX21lbWNtcChhaXYs IGljdiwgNCkpKSB7CisrICAgICAgICBPUEVOU1NMX2NsZWFuc2Uob3V0LCBpbmxlbik7CisrICAg ICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICAvKiBDaGVjayB0aGF0IDgqKG4tMSkgPCBM U0IoMzIsQUlWKSA8PSA4Km4uCisrICAgICAqIElmIHNvLCBsZXQgcHRleHRfbGVuID0gTFNCKDMy LEFJVikuICovCisrCisrICAgIHB0ZXh0X2xlbiA9IChhaXZbNF0gPDwgMjQpIHwgKGFpdls1XSA8 PCAxNikgfCAoYWl2WzZdIDw8IDgpIHwgYWl2WzddOworKyAgICBpZiAoOCAqIChuIC0gMSkgPj0g cHRleHRfbGVuIHx8IHB0ZXh0X2xlbiA+IDggKiBuKSB7CisrICAgICAgICBPUEVOU1NMX2NsZWFu c2Uob3V0LCBpbmxlbik7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICAvKiBD aGVjayB0aGF0IHRoZSByaWdodG1vc3QgcGFkZGluZ19sZW4gb2N0ZXRzIG9mIHRoZSBvdXRwdXQg ZGF0YQorKyAgICAgKiBhcmUgemVyby4gKi8KKysgICAgcGFkZGluZ19sZW4gPSBwYWRkZWRfbGVu IC0gcHRleHRfbGVuOworKyAgICBpZiAoQ1JZUFRPX21lbWNtcChvdXQgKyBwdGV4dF9sZW4sIHpl cm9zLCBwYWRkaW5nX2xlbikgIT0gMCkgeworKyAgICAgICAgT1BFTlNTTF9jbGVhbnNlKG91dCwg aW5sZW4pOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgLyogU2VjdGlvbiA0 LjIgc3RlcCAzOiBSZW1vdmUgcGFkZGluZyAqLworKyAgICByZXR1cm4gcHRleHRfbGVuOworIH0K CmRpZmYgLS1naXQgYS9vcGVuc3NsLnNwZWMgYi9vcGVuc3NsLnNwZWMKaW5kZXggNjQ3MjMzOS4u ZmExODc2OSAxMDA2NDQKLS0tIGEvb3BlbnNzbC5zcGVjCisrKyBiL29wZW5zc2wuc3BlYwpAQCAt MjIsOCArMjIsOCBAQAogCiBTdW1tYXJ5OiBVdGlsaXRpZXMgZnJvbSB0aGUgZ2VuZXJhbCBwdXJw b3NlIGNyeXB0b2dyYXBoeSBsaWJyYXJ5IHdpdGggVExTIGltcGxlbWVudGF0aW9uCiBOYW1lOiBv cGVuc3NsCi1WZXJzaW9uOiAxLjAuMmQKLVJlbGVhc2U6IDMlez9kaXN0fQorVmVyc2lvbjogMS4w LjJlCitSZWxlYXNlOiAxJXs/ZGlzdH0KIEVwb2NoOiAxCiAjIFdlIGhhdmUgdG8gcmVtb3ZlIGNl cnRhaW4gcGF0ZW50ZWQgYWxnb3JpdGhtcyBmcm9tIHRoZSBvcGVuc3NsIHNvdXJjZQogIyB0YXJi YWxsIHdpdGggdGhlIGhvYmJsZS1vcGVuc3NsIHNjcmlwdCB3aGljaCBpcyBpbmNsdWRlZCBiZWxv dy4KQEAgLTQwLDcgKzQwLDcgQEAgU291cmNlMTE6IFJFQURNRS5GSVBTCiBTb3VyY2UxMjogZWNf Y3VydmUuYwogU291cmNlMTM6IGVjdGVzdC5jCiAjIEJ1aWxkIGNoYW5nZXMKLVBhdGNoMTogb3Bl bnNzbC0xLjAuMmMtcnBtYnVpbGQucGF0Y2gKK1BhdGNoMTogb3BlbnNzbC0xLjAuMmUtcnBtYnVp bGQucGF0Y2gKIFBhdGNoMjogb3BlbnNzbC0xLjAuMmEtZGVmYXVsdHMucGF0Y2gKIFBhdGNoNDog b3BlbnNzbC0xLjAuMmEtZW5naW5lc2Rpci5wYXRjaAogUGF0Y2g1OiBvcGVuc3NsLTEuMC4yYS1u by1ycGF0aC5wYXRjaApAQCAtNTYsNyArNTYsNyBAQCBQYXRjaDMzOiBvcGVuc3NsLTEuMC4wLWJl dGE0LWNhLWRpci5wYXRjaAogUGF0Y2gzNDogb3BlbnNzbC0xLjAuMmEteDUwOS5wYXRjaAogUGF0 Y2gzNTogb3BlbnNzbC0xLjAuMmEtdmVyc2lvbi1hZGQtZW5naW5lcy5wYXRjaAogUGF0Y2gzOTog b3BlbnNzbC0xLjAuMmEtaXB2Ni1hcHBzLnBhdGNoCi1QYXRjaDQwOiBvcGVuc3NsLTEuMC4yYy1m aXBzLnBhdGNoCitQYXRjaDQwOiBvcGVuc3NsLTEuMC4yZS1maXBzLnBhdGNoCiBQYXRjaDQ1OiBv cGVuc3NsLTEuMC4yYS1lbnYtemxpYi5wYXRjaAogUGF0Y2g0Nzogb3BlbnNzbC0xLjAuMmEtcmVh ZG1lLXdhcm5pbmcucGF0Y2gKIFBhdGNoNDk6IG9wZW5zc2wtMS4wLjFpLWFsZ28tZG9jLnBhdGNo CkBAIC04MywxMCArODMsOSBAQCBQYXRjaDkyOiBvcGVuc3NsLTEuMC4yYS1zeXN0ZW0tY2lwaGVy bGlzdC5wYXRjaAogUGF0Y2g5Mzogb3BlbnNzbC0xLjAuMmEtZGlzYWJsZS1zc2x2MnYzLnBhdGNo CiBQYXRjaDk0OiBvcGVuc3NsLTEuMC4yZC1zZWNwMjU2azEucGF0Y2gKICMgQmFja3BvcnRlZCBm aXhlcyBpbmNsdWRpbmcgc2VjdXJpdHkgZml4ZXMKLVBhdGNoODA6IG9wZW5zc2wtMS4wLjJhLXdy YXAtcGFkLnBhdGNoCitQYXRjaDgwOiBvcGVuc3NsLTEuMC4yZS13cmFwLXBhZC5wYXRjaAogUGF0 Y2g4MTogb3BlbnNzbC0xLjAuMmEtcGFkbG9jazY0LnBhdGNoCiBQYXRjaDgyOiBvcGVuc3NsLTEu MC4yYy10cnVzdGVkLWZpcnN0LWRvYy5wYXRjaAotUGF0Y2g4Mzogb3BlbnNzbC0xLjAuMmQtYW1k LXNpZ2lsbC5wYXRjaAogCiBMaWNlbnNlOiBPcGVuU1NMCiBHcm91cDogU3lzdGVtIEVudmlyb25t ZW50L0xpYnJhcmllcwpAQCAtMjA4LDcgKzIwNyw2IEBAIGNwICV7U09VUkNFMTJ9ICV7U09VUkNF MTN9IGNyeXB0by9lYy8KICVwYXRjaDgwIC1wMSAtYiAud3JhcAogJXBhdGNoODEgLXAxIC1iIC5w YWRsb2NrNjQKICVwYXRjaDgyIC1wMSAtYiAudHJ1c3RlZC1maXJzdAotJXBhdGNoODMgLXAxIC1i IC5zaWdpbGwKIAogc2VkIC1pICdzL1NITElCX1ZFUlNJT05fTlVNQkVSICIxLjAuMCIvU0hMSUJf VkVSU0lPTl9OVU1CRVIgIiV7dmVyc2lvbn0iLycgY3J5cHRvL29wZW5zc2x2LmgKIApAQCAtMjcw LDcgKzI2OCw4IEBAIHNzbGFyY2g9ImxpbnV4LXBwYzY0bGUiCiAJLS1wcmVmaXg9JXtfcHJlZml4 fSAtLW9wZW5zc2xkaXI9JXtfc3lzY29uZmRpcn0vcGtpL3RscyAke3NzbGZsYWdzfSBcCiAJLS1z eXN0ZW0tY2lwaGVycy1maWxlPSV7X3N5c2NvbmZkaXJ9L2NyeXB0by1wb2xpY2llcy9iYWNrLWVu ZHMvb3BlbnNzbC5jb25maWcgXAogCXpsaWIgZW5hYmxlLWNhbWVsbGlhIGVuYWJsZS1zZWVkIGVu YWJsZS10bHNleHQgZW5hYmxlLXJmYzM3NzkgXAotCWVuYWJsZS1jbXMgZW5hYmxlLW1kMiBuby1t ZGMyIG5vLXJjNSBuby1lYzJtIG5vLWdvc3Qgbm8tc3JwIFwKKwllbmFibGUtY21zIGVuYWJsZS1t ZDIgZW5hYmxlLWVjX25pc3RwXzY0X2djY18xMjggXAorCW5vLW1kYzIgbm8tcmM1IG5vLWVjMm0g bm8tZ29zdCBuby1zcnAgXAogCS0td2l0aC1rcmI1LWZsYXZvcj1NSVQgLS1lbmdpbmVzZGlyPSV7 X2xpYmRpcn0vb3BlbnNzbC9lbmdpbmVzIFwKIAktLXdpdGgta3JiNS1kaXI9L3VzciBzaGFyZWQg ICR7c3NsYXJjaH0gJXs/IW5vZmlwczpmaXBzfQogCkBAIC0yODgsNiArMjg3LDExIEBAIG1ha2Ug cmVoYXNoCiAjIE92ZXJ3cml0ZSBGSVBTIFJFQURNRQogY3AgLWYgJXtTT1VSQ0UxMX0gLgogCisj IENsZWFuIHVwIHRoZSAucGMgZmlsZXMKK2ZvciBpIGluIGxpYmNyeXB0by5wYyBsaWJzc2wucGMg b3BlbnNzbC5wYyA7IGRvCisgIHNlZCAtaSAnL15MaWJzLnByaXZhdGU6L3tzLy1MW14gXSogLy87 cy8tV2xbXiBdKiAvL30nICRpCitkb25lCisKICVjaGVjawogIyBWZXJpZnkgdGhhdCB3aGF0IHdh cyBjb21waWxlZCBhY3R1YWxseSB3b3Jrcy4KIApAQCAtNDc5LDYgKzQ4MywxMiBAQCBybSAtcmYg JFJQTV9CVUlMRF9ST09ULyV7X2xpYmRpcn0vZmlwc2NhbmlzdGVyLioKICVwb3N0dW4gbGlicyAt cCAvc2Jpbi9sZGNvbmZpZwogCiAlY2hhbmdlbG9nCisqIEZyaSBEZWMgIDQgMjAxNSBUb23DocWh IE1yw6F6IDx0bXJhekByZWRoYXQuY29tPiAxLjAuMmUtMQorLSBtaW5vciB1cHN0cmVhbSByZWxl YXNlIDEuMC4yZSBmaXhpbmcgbW9kZXJhdGUgc2V2ZXJpdHkgc2VjdXJpdHkgaXNzdWVzCistIGVu YWJsZSBmYXN0IGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbiBmb3IgTklTVCBQLTI1NiBhbmQgUC01 MjEKKyAgZWxsaXB0aWMgY3VydmVzICgjMTE2NDIxMCkKKy0gZmlsdGVyIG91dCB1bndhbnRlZCBs aW5rIG9wdGlvbnMgZnJvbSB0aGUgLnBjIGZpbGVzICgjMTI1NzgzNikKKwogKiBNb24gTm92IDE2 IDIwMTUgVG9tw6HFoSBNcsOheiA8dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjJkLTMKIC0gZml4IHNp Z2lsbCBvbiBzb21lIEFNRCBDUFVzICgjMTI3ODE5NCkKIAoKZGlmZiAtLWdpdCBhL3NvdXJjZXMg Yi9zb3VyY2VzCmluZGV4IDE3MmRiYTcuLjBkODExNjEgMTAwNjQ0Ci0tLSBhL3NvdXJjZXMKKysr IGIvc291cmNlcwpAQCAtMSArMSBAQAotZTc3N2MzM2NhNTI5Yjk2M2Q1NDU3YTIxY2IxMWQ2YzMg IG9wZW5zc2wtMS4wLjJkLWhvYmJsZWQudGFyLnh6Cis4ODJmNGFjODkzNTU0YjhmZTI4MTcwODVk ZTZmOTJkOSAgb3BlbnNzbC0xLjAuMmUtaG9iYmxlZC50YXIueHoK