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: =?utf-8?b?VG9tw6HFoSBNcsOheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+?= To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: - update to final 1.0.0 upstream release Date: Tue, 09 Jun 2026 12:42:08 GMT Message-ID: <178100892803.1.6390514658967965219.rpms-openssl-b825afeee686@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: b825afeee6863006d7325a6226aafd4fc7d5ac99 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IGI4MjVhZmVlZTY4NjMwMDZkNzMyNWE2MjI2YWFm ZDRmYzdkNWFjOTkKQXV0aG9yIDogVG9tw6HFoSBNcsOheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5v cmc+CkRhdGUgICA6IDIwMTAtMDMtMzBUMTE6NDg6MzArMDA6MDAKU3RhdHMgIDogKzE1MjI1Ly0x MzQxMSBpbiAyMyBmaWxlKHMpClVSTCAgICA6IGh0dHBzOi8vc3JjLmZlZG9yYXByb2plY3Qub3Jn L3JwbXMvb3BlbnNzbC9jL2I4MjVhZmVlZTY4NjMwMDZkNzMyNWE2MjI2YWFmZDRmYzdkNWFjOTk/ YnJhbmNoPXJlYmFzZV80MGJldGEKCkxvZzoKLSB1cGRhdGUgdG8gZmluYWwgMS4wLjAgdXBzdHJl YW0gcmVsZWFzZQoKLS0tCmRpZmYgLS1naXQgYS8uY3ZzaWdub3JlIGIvLmN2c2lnbm9yZQppbmRl eCAzODE5NjQ3Li4zOTMwYTlkIDEwMDY0NAotLS0gYS8uY3ZzaWdub3JlCisrKyBiLy5jdnNpZ25v cmUKQEAgLTEgKzEgQEAKLW9wZW5zc2wtMS4wLjAtYmV0YTQtdXNhLnRhci5iejIKK29wZW5zc2wt MS4wLjAtdXNhLnRhci5iejIKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTAuOS44ai1yZWFkbWUtd2Fy bmluZy5wYXRjaCBiL29wZW5zc2wtMC45LjhqLXJlYWRtZS13YXJuaW5nLnBhdGNoCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTFlNmJkLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMC45 LjhqLXJlYWRtZS13YXJuaW5nLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAot ZGlmZiAtdXAgb3BlbnNzbC0wLjkuOGovUkVBRE1FLndhcm5pbmcgb3BlbnNzbC0wLjkuOGovUkVB RE1FCi0tLS0gb3BlbnNzbC0wLjkuOGovUkVBRE1FLndhcm5pbmcJMjAwOS0wMS0wNyAxMTo1MDo1 My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTAuOS44ai9SRUFETUUJMjAwOS0wMS0xNCAx Nzo0MzowMi4wMDAwMDAwMDAgKzAxMDAKLUBAIC01LDYgKzUsMzEgQEAKLSAgQ29weXJpZ2h0IChj KSAxOTk1LTE5OTggRXJpYyBBLiBZb3VuZywgVGltIEouIEh1ZHNvbgotICBBbGwgcmlnaHRzIHJl c2VydmVkLgotIAotKyBXQVJOSU5HCi0rIC0tLS0tLS0KLSsKLSsgVGhpcyB2ZXJzaW9uIG9mIE9w ZW5TU0wgaXMgYnVpbHQgaW4gYSB3YXkgdGhhdCBzdXBwb3J0cyBvcGVyYXRpb24gaW4KLSsgdGhl IHNvIGNhbGxlZCBGSVBTIG1vZGUuIE5vdGUgdGhvdWdoIHRoYXQgdGhlIGxpYnJhcnkgYXMgd2Ug YnVpbGQgaXQKLSsgaXMgbm90IEZJUFMgdmFsaWRhdGVkIGFuZCB0aGUgRklQUyBtb2RlIGlzIHBy ZXNlbnQgZm9yIHRlc3RpbmcgcHVycG9zZXMKLSsgb25seS4KLSsgCi0rIFRoaXMgdmVyc2lvbiBh bHNvIGNvbnRhaW5zIGEgZmV3IGRpZmZlcmVuY2VzIGZyb20gdGhlIHVwc3RyZWFtIGNvZGUKLSsg c29tZSBvZiB3aGljaCBhcmU6Ci0rICAgKiBUaGUgRklQUyBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9u IGNoZWNrIGlzIGltcGxlbWVudGVkIGRpZmZlcmVudGx5Ci0rICAgICBmcm9tIHRoZSB1cHN0cmVh bSBGSVBTIHZhbGlkYXRlZCBPcGVuU1NMIG1vZHVsZS4gSXQgdmVyaWZpZXMKLSsgICAgIEhNQUMt U0hBMjU2IGNoZWNrc3VtIG9mIHRoZSB3aG9sZSBsaWJjcnlwdG8gc2hhcmVkIGxpYnJhcnkuCi0r ICAgKiBUaGUgbW9kdWxlIHJlc3BlY3RzIHRoZSBrZXJuZWwgRklQUyBmbGFnIC9wcm9jL3N5cy9j cnlwdG8vZmlwcyBhbmQKLSsgICAgIHRyaWVzIHRvIGluaXRpYWxpemUgdGhlIEZJUFMgbW9kZSBp ZiBpdCBpcyBzZXQgdG8gMSBhYm9ydGluZyBpZiB0aGUKLSsgICAgIEZJUFMgbW9kZSBjb3VsZCBu b3QgYmUgaW5pdGlhbGl6ZWQuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZm9yY2UgdGhlCi0rICAg ICBPcGVuU1NMIGxpYnJhcnkgdG8gRklQUyBtb2RlIGVzcGVjaWFsbHkgZm9yIGRlYnVnZ2luZyBw dXJwb3NlcyBieQotKyAgICAgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgT1BFTlNT TF9GT1JDRV9GSVBTX01PREUuCi0rICAgKiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgT1BF TlNTTF9OT19ERUZBVUxUX1pMSUIgaXMgc2V0IHRoZSBtb2R1bGUKLSsgICAgIHdpbGwgbm90IGF1 dG9tYXRpY2FsbHkgbG9hZCB0aGUgYnVpbHQgaW4gY29tcHJlc3Npb24gbWV0aG9kIFpMSUIKLSsg ICAgIHdoZW4gaW5pdGlhbGl6ZWQuIEFwcGxpY2F0aW9ucyBjYW4gc3RpbGwgZXhwbGljaXRlbHkg YXNrIGZvciBaTElCCi0rICAgICBjb21wcmVzc2lvbiBtZXRob2QuCi0rICAgKiBUaGVyZSBpcyBh ZGRlZCBhIHN1cHBvcnQgZm9yIEVBUC1GQVNUIHRocm91Z2ggVExTIGV4dGVuc2lvbi4gVGhpcyBj b2RlCi0rICAgICBpcyBiYWNrcG9ydGVkIGZyb20gT3BlblNTTCB1cHN0cmVhbSBkZXZlbG9wbWVu dCBicmFuY2guCi0rCi0gIERFU0NSSVBUSU9OCi0gIC0tLS0tLS0tLS0tCi0gCgpkaWZmIC0tZ2l0 IGEvb3BlbnNzbC0xLjAuMC1iZXRhMy1jaXBoZXItY2hhbmdlLnBhdGNoIGIvb3BlbnNzbC0xLjAu MC1iZXRhMy1jaXBoZXItY2hhbmdlLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA4ZmU3YWRhLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTMtY2lwaGVyLWNoYW5n ZS5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTMvc3NsL3NzbC5oLmNpcGhlci1jaGFuZ2Ugb3BlbnNzbC0xLjAuMC1iZXRhMy9z c2wvc3NsLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL3NzbC9zc2wuaC5jaXBoZXItY2hhbmdl CTIwMDktMDgtMDUgMTg6MjI6NDUuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhMy9zc2wvc3NsLmgJMjAwOS0wOC0wNSAxODoyNzozMi4wMDAwMDAwMDAgKzAyMDAKLUBAIC01 MTEsNyArNTExLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qgc3NsX3Nlc3Npb25fc3QKLSAKLSAjZGVmaW5l IFNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUcJCQkweDAwMDAwMDAxTAotICNkZWZpbmUgU1NM X09QX05FVFNDQVBFX0NIQUxMRU5HRV9CVUcJCQkweDAwMDAwMDAyTAotLSNkZWZpbmUgU1NMX09Q X05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHCQkweDAwMDAwMDA4TAotKyNkZWZpbmUg U1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHCQkweDAwMDAwMDA4TCAvKiBj YW4gYnJlYWsgc29tZSBzZWN1cml0eSBleHBlY3RhdGlvbnMgKi8KLSAjZGVmaW5lIFNTTF9PUF9T U0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUcJCTB4MDAwMDAwMTBMCi0gI2RlZmluZSBTU0xfT1Bf TUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIJCTB4MDAwMDAwMjBMCi0gI2RlZmluZSBTU0xfT1Bf TVNJRV9TU0xWMl9SU0FfUEFERElORwkJCTB4MDAwMDAwNDBMIC8qIG5vIGVmZmVjdCBzaW5jZSAw LjkuN2ggYW5kIDAuOS44YiAqLwotQEAgLTUyOCw3ICs1MjgsNyBAQCB0eXBlZGVmIHN0cnVjdCBz c2xfc2Vzc2lvbl9zdAotIAotIC8qIFNTTF9PUF9BTEw6IHZhcmlvdXMgYnVnIHdvcmthcm91bmRz IHRoYXQgc2hvdWxkIGJlIHJhdGhlciBoYXJtbGVzcy4KLSAgKiAgICAgICAgICAgICBUaGlzIHVz ZWQgdG8gYmUgMHgwMDBGRkZGRkwgYmVmb3JlIDAuOS43LiAqLwotLSNkZWZpbmUgU1NMX09QX0FM TAkJCQkJMHg4MDAwMEZGRkwKLSsjZGVmaW5lIFNTTF9PUF9BTEwJCQkJCTB4ODAwMDBGRjdMCi0g Ci0gLyogRFRMUyBvcHRpb25zICovCi0gI2RlZmluZSBTU0xfT1BfTk9fUVVFUllfTVRVICAgICAg ICAgICAgICAgICAweDAwMDAxMDAwTAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTMt aXB2Ni1hcHBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhMy1pcHY2LWFwcHMucGF0Y2gKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5MGJjOTguLjAwMDAwMDAKLS0tIGEvb3BlbnNz bC0xLjAuMC1iZXRhMy1pcHY2LWFwcHMucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MDYgKzAs MCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9hcHBzL3NfYXBwcy5oLmlwdjYtYXBw cyBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvc19hcHBzLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGEzL2FwcHMvc19hcHBzLmguaXB2Ni1hcHBzCTIwMDktMDgtMDUgMjE6Mjk6NTguMDAwMDAwMDAw ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9hcHBzL3NfYXBwcy5oCTIwMDktMDgtMDUg MjE6Mjk6NTguMDAwMDAwMDAwICswMjAwCi1AQCAtMTQ4LDcgKzE0OCw3IEBAIHR5cGVkZWYgZmRf bWFzayBmZF9zZXQ7Ci0gI2RlZmluZSBQT1JUX1NUUiAgICAgICAgIjQ0MzMiCi0gI2RlZmluZSBQ Uk9UT0NPTCAgICAgICAgInRjcCIKLSAKLS1pbnQgZG9fc2VydmVyKGludCBwb3J0LCBpbnQgdHlw ZSwgaW50ICpyZXQsIGludCAoKmNiKSAoY2hhciAqaG9zdG5hbWUsIGludCBzLCB1bnNpZ25lZCBj aGFyICpjb250ZXh0KSwgdW5zaWduZWQgY2hhciAqY29udGV4dCk7Ci0raW50IGRvX3NlcnZlcihj aGFyICpwb3J0LCBpbnQgdHlwZSwgaW50ICpyZXQsIGludCAoKmNiKSAoY2hhciAqaG9zdG5hbWUs IGludCBzLCB1bnNpZ25lZCBjaGFyICpjb250ZXh0KSwgdW5zaWduZWQgY2hhciAqY29udGV4dCk7 Ci0gI2lmZGVmIEhFQURFUl9YNTA5X0gKLSBpbnQgTVNfQ0FMTEJBQ0sgdmVyaWZ5X2NhbGxiYWNr KGludCBvaywgWDUwOV9TVE9SRV9DVFggKmN0eCk7Ci0gI2VuZGlmCi1AQCAtMTU2LDEwICsxNTYs OSBAQCBpbnQgTVNfQ0FMTEJBQ0sgdmVyaWZ5X2NhbGxiYWNrKGludCBvaywgCi0gaW50IHNldF9j ZXJ0X3N0dWZmKFNTTF9DVFggKmN0eCwgY2hhciAqY2VydF9maWxlLCBjaGFyICprZXlfZmlsZSk7 Ci0gaW50IHNldF9jZXJ0X2tleV9zdHVmZihTU0xfQ1RYICpjdHgsIFg1MDkgKmNlcnQsIEVWUF9Q S0VZICprZXkpOwotICNlbmRpZgotLWludCBpbml0X2NsaWVudChpbnQgKnNvY2ssIGNoYXIgKnNl cnZlciwgaW50IHBvcnQsIGludCB0eXBlKTsKLStpbnQgaW5pdF9jbGllbnQoaW50ICpzb2NrLCBj aGFyICpzZXJ2ZXIsIGNoYXIgKnBvcnQsIGludCB0eXBlKTsKLSBpbnQgc2hvdWxkX3JldHJ5KGlu dCBpKTsKLS1pbnQgZXh0cmFjdF9wb3J0KGNoYXIgKnN0ciwgc2hvcnQgKnBvcnRfcHRyKTsKLS1p bnQgZXh0cmFjdF9ob3N0X3BvcnQoY2hhciAqc3RyLGNoYXIgKipob3N0X3B0cix1bnNpZ25lZCBj aGFyICppcCxzaG9ydCAqcCk7Ci0raW50IGV4dHJhY3RfaG9zdF9wb3J0KGNoYXIgKnN0cixjaGFy ICoqaG9zdF9wdHIsY2hhciAqKnBvcnRfcHRyKTsKLSAKLSBsb25nIE1TX0NBTExCQUNLIGJpb19k dW1wX2NhbGxiYWNrKEJJTyAqYmlvLCBpbnQgY21kLCBjb25zdCBjaGFyICphcmdwLAotIAkJCQkg ICBpbnQgYXJnaSwgbG9uZyBhcmdsLCBsb25nIHJldCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGEzL2FwcHMvc19jbGllbnQuYy5pcHY2LWFwcHMgb3BlbnNzbC0xLjAuMC1iZXRhMy9hcHBz L3NfY2xpZW50LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGEzL2FwcHMvc19jbGllbnQuYy5pcHY2 LWFwcHMJMjAwOS0wOC0wNSAyMToyOTo1OC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEu MC4wLWJldGEzL2FwcHMvc19jbGllbnQuYwkyMDA5LTA4LTA1IDIyOjMzOjQ0LjAwMDAwMDAwMCAr MDIwMAotQEAgLTM4OCw3ICszODgsNyBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp Ci0gCWludCBjYnVmX2xlbixjYnVmX29mZjsKLSAJaW50IHNidWZfbGVuLHNidWZfb2ZmOwotIAlm ZF9zZXQgcmVhZGZkcyx3cml0ZWZkczsKLS0Jc2hvcnQgcG9ydD1QT1JUOwotKwljaGFyICpwb3J0 X3N0ciA9IFBPUlRfU1RSOwotIAlpbnQgZnVsbF9sb2c9MTsKLSAJY2hhciAqaG9zdD1TU0xfSE9T VF9OQU1FOwotIAljaGFyICpjZXJ0X2ZpbGU9TlVMTCwqa2V5X2ZpbGU9TlVMTDsKLUBAIC00ODYs MTMgKzQ4NiwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0gCQllbHNlIGlm CShzdHJjbXAoKmFyZ3YsIi1wb3J0IikgPT0gMCkKLSAJCQl7Ci0gCQkJaWYgKC0tYXJnYyA8IDEp IGdvdG8gYmFkOwotLQkJCXBvcnQ9YXRvaSgqKCsrYXJndikpOwotLQkJCWlmIChwb3J0ID09IDAp IGdvdG8gYmFkOwotKwkJCXBvcnRfc3RyPSAqKCsrYXJndik7Ci0gCQkJfQotIAkJZWxzZSBpZiAo c3RyY21wKCphcmd2LCItY29ubmVjdCIpID09IDApCi0gCQkJewotIAkJCWlmICgtLWFyZ2MgPCAx KSBnb3RvIGJhZDsKLS0JCQlpZiAoIWV4dHJhY3RfaG9zdF9wb3J0KCooKythcmd2KSwmaG9zdCxO VUxMLCZwb3J0KSkKLSsJCQlpZiAoIWV4dHJhY3RfaG9zdF9wb3J0KCooKythcmd2KSwmaG9zdCwm cG9ydF9zdHIpKQotIAkJCQlnb3RvIGJhZDsKLSAJCQl9Ci0gCQllbHNlIGlmCShzdHJjbXAoKmFy Z3YsIi12ZXJpZnkiKSA9PSAwKQotQEAgLTk1Niw3ICs5NTUsNyBAQCBiYWQ6Ci0gCi0gcmVfc3Rh cnQ6Ci0gCi0tCWlmIChpbml0X2NsaWVudCgmcyxob3N0LHBvcnQsc29ja2V0X3R5cGUpID09IDAp Ci0rCWlmIChpbml0X2NsaWVudCgmcyxob3N0LHBvcnRfc3RyLHNvY2tldF90eXBlKSA9PSAwKQot IAkJewotIAkJQklPX3ByaW50ZihiaW9fZXJyLCJjb25uZWN0OmVycm5vPSVkXG4iLGdldF9sYXN0 X3NvY2tldF9lcnJvcigpKTsKLSAJCVNIVVRET1dOKHMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhMy9hcHBzL3Nfc2VydmVyLmMuaXB2Ni1hcHBzIG9wZW5zc2wtMS4wLjAtYmV0YTMvYXBw cy9zX3NlcnZlci5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9hcHBzL3Nfc2VydmVyLmMuaXB2 Ni1hcHBzCTIwMDktMDgtMDUgMjE6Mjk6NTguMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhMy9hcHBzL3Nfc2VydmVyLmMJMjAwOS0wOC0wNSAyMToyOTo1OC4wMDAwMDAwMDAg KzAyMDAKLUBAIC04MzcsNyArODM3LDcgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKLSAJewotIAlYNTA5X1ZFUklGWV9QQVJBTSAqdnBtID0gTlVMTDsKLSAJaW50IGJhZGFyZyA9 IDA7Ci0tCXNob3J0IHBvcnQ9UE9SVDsKLSsJY2hhciAqcG9ydF9zdHIgPSBQT1JUX1NUUjsKLSAJ Y2hhciAqQ0FwYXRoPU5VTEwsKkNBZmlsZT1OVUxMOwotIAl1bnNpZ25lZCBjaGFyICpjb250ZXh0 ID0gTlVMTDsKLSAJY2hhciAqZGhmaWxlID0gTlVMTDsKLUBAIC05MDcsOCArOTA3LDcgQEAgaW50 IE1BSU4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSAJCQkgKHN0cmNtcCgqYXJndiwiLWFjY2Vw dCIpID09IDApKQotIAkJCXsKLSAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7Ci0tCQkJaWYg KCFleHRyYWN0X3BvcnQoKigrK2FyZ3YpLCZwb3J0KSkKLS0JCQkJZ290byBiYWQ7Ci0rCQkJcG9y dF9zdHI9ICooKythcmd2KTsKLSAJCQl9Ci0gCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi12ZXJp ZnkiKSA9PSAwKQotIAkJCXsKLUBAIC0xNjg1LDkgKzE2ODQsOSBAQCBiYWQ6Ci0gCUJJT19wcmlu dGYoYmlvX3Nfb3V0LCJBQ0NFUFRcbiIpOwotIAkodm9pZClCSU9fZmx1c2goYmlvX3Nfb3V0KTsK LSAJaWYgKHd3dykKLS0JCWRvX3NlcnZlcihwb3J0LHNvY2tldF90eXBlLCZhY2NlcHRfc29ja2V0 LHd3d19ib2R5LCBjb250ZXh0KTsKLSsJCWRvX3NlcnZlcihwb3J0X3N0cixzb2NrZXRfdHlwZSwm YWNjZXB0X3NvY2tldCx3d3dfYm9keSwgY29udGV4dCk7Ci0gCWVsc2UKLS0JCWRvX3NlcnZlcihw b3J0LHNvY2tldF90eXBlLCZhY2NlcHRfc29ja2V0LHN2X2JvZHksIGNvbnRleHQpOwotKwkJZG9f c2VydmVyKHBvcnRfc3RyLHNvY2tldF90eXBlLCZhY2NlcHRfc29ja2V0LHN2X2JvZHksIGNvbnRl eHQpOwotIAlwcmludF9zdGF0cyhiaW9fc19vdXQsY3R4KTsKLSAJcmV0PTA7Ci0gZW5kOgotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhMy9hcHBzL3Nfc29ja2V0LmMuaXB2Ni1hcHBzIG9wZW5z c2wtMS4wLjAtYmV0YTMvYXBwcy9zX3NvY2tldC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhMy9h cHBzL3Nfc29ja2V0LmMuaXB2Ni1hcHBzCTIwMDgtMTEtMTIgMDQ6NTc6NDcuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhMy9hcHBzL3Nfc29ja2V0LmMJMjAwOS0wOC0wNSAy MToyOTo1OC4wMDAwMDAwMDAgKzAyMDAKLUBAIC05Niw5ICs5Niw3IEBAIHN0YXRpYyBzdHJ1Y3Qg aG9zdGVudCAqR2V0SG9zdEJ5TmFtZShjaGEKLSBzdGF0aWMgdm9pZCBzc2xfc29ja19jbGVhbnVw KHZvaWQpOwotICNlbmRpZgotIHN0YXRpYyBpbnQgc3NsX3NvY2tfaW5pdCh2b2lkKTsKLS1zdGF0 aWMgaW50IGluaXRfY2xpZW50X2lwKGludCAqc29jayx1bnNpZ25lZCBjaGFyIGlwWzRdLCBpbnQg cG9ydCwgaW50IHR5cGUpOwotLXN0YXRpYyBpbnQgaW5pdF9zZXJ2ZXIoaW50ICpzb2NrLCBpbnQg cG9ydCwgaW50IHR5cGUpOwotLXN0YXRpYyBpbnQgaW5pdF9zZXJ2ZXJfbG9uZyhpbnQgKnNvY2ss IGludCBwb3J0LGNoYXIgKmlwLCBpbnQgdHlwZSk7Ci0rc3RhdGljIGludCBpbml0X3NlcnZlcihp bnQgKnNvY2ssIGNoYXIgKnBvcnQsIGludCB0eXBlKTsKLSBzdGF0aWMgaW50IGRvX2FjY2VwdChp bnQgYWNjX3NvY2ssIGludCAqc29jaywgY2hhciAqKmhvc3QpOwotIHN0YXRpYyBpbnQgaG9zdF9p cChjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgaXBbNF0pOwotIAotQEAgLTIyOCw1OCArMjI2LDcw IEBAIHN0YXRpYyBpbnQgc3NsX3NvY2tfaW5pdCh2b2lkKQotIAlyZXR1cm4oMSk7Ci0gCX0KLSAK LS1pbnQgaW5pdF9jbGllbnQoaW50ICpzb2NrLCBjaGFyICpob3N0LCBpbnQgcG9ydCwgaW50IHR5 cGUpCi0raW50IGluaXRfY2xpZW50KGludCAqc29jaywgY2hhciAqaG9zdCwgY2hhciAqcG9ydCwg aW50IHR5cGUpCi0gCXsKLS0JdW5zaWduZWQgY2hhciBpcFs0XTsKLS0KLS0JaWYgKCFob3N0X2lw KGhvc3QsJihpcFswXSkpKQotLQkJewotLQkJcmV0dXJuKDApOwotLQkJfQotLQlyZXR1cm4oaW5p dF9jbGllbnRfaXAoc29jayxpcCxwb3J0LHR5cGUpKTsKLS0JfQotLQotLXN0YXRpYyBpbnQgaW5p dF9jbGllbnRfaXAoaW50ICpzb2NrLCB1bnNpZ25lZCBjaGFyIGlwWzRdLCBpbnQgcG9ydCwgaW50 IHR5cGUpCi0tCXsKLS0JdW5zaWduZWQgbG9uZyBhZGRyOwotLQlzdHJ1Y3Qgc29ja2FkZHJfaW4g dGhlbTsKLS0JaW50IHMsaTsKLSsJc3RydWN0IGFkZHJpbmZvICpyZXMsICpyZXMwLCBoaW50czsK LSsJY2hhciAqIGZhaWxlZF9jYWxsID0gTlVMTDsKLSsJaW50IHM7Ci0rCWludCBlOwotIAotIAlp ZiAoIXNzbF9zb2NrX2luaXQoKSkgcmV0dXJuKDApOwotIAotLQltZW1zZXQoKGNoYXIgKikmdGhl bSwwLHNpemVvZih0aGVtKSk7Ci0tCXRoZW0uc2luX2ZhbWlseT1BRl9JTkVUOwotLQl0aGVtLnNp bl9wb3J0PWh0b25zKCh1bnNpZ25lZCBzaG9ydClwb3J0KTsKLS0JYWRkcj0odW5zaWduZWQgbG9u ZykKLS0JCSgodW5zaWduZWQgbG9uZylpcFswXTw8MjRMKXwKLS0JCSgodW5zaWduZWQgbG9uZylp cFsxXTw8MTZMKXwKLS0JCSgodW5zaWduZWQgbG9uZylpcFsyXTw8IDhMKXwKLS0JCSgodW5zaWdu ZWQgbG9uZylpcFszXSk7Ci0tCXRoZW0uc2luX2FkZHIuc19hZGRyPWh0b25sKGFkZHIpOwotLQot LQlpZiAodHlwZSA9PSBTT0NLX1NUUkVBTSkKLS0JCXM9c29ja2V0KEFGX0lORVQsU09DS19TVFJF QU0sU09DS0VUX1BST1RPQ09MKTsKLS0JZWxzZSAvKiAoIHR5cGUgPT0gU09DS19ER1JBTSkgKi8K LS0JCXM9c29ja2V0KEFGX0lORVQsU09DS19ER1JBTSxJUFBST1RPX1VEUCk7Ci0tCQkJCi0tCWlm IChzID09IElOVkFMSURfU09DS0VUKSB7IHBlcnJvcigic29ja2V0Iik7IHJldHVybigwKTsgfQot KwltZW1zZXQoJmhpbnRzLCAnXDAnLCBzaXplb2YoaGludHMpKTsKLSsJaGludHMuYWlfc29ja3R5 cGUgPSB0eXBlOwotKwloaW50cy5haV9mbGFncyA9IEFJX0FERFJDT05GSUc7Ci0rCi0rCWUgPSBn ZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAmaGludHMsICZyZXMpOwotKwlpZiAoZSkKLSsJewotKwkJ ZnByaW50ZihzdGRlcnIsICJnZXRhZGRyaW5mbzogJXNcbiIsIGdhaV9zdHJlcnJvcihlKSk7Ci0r CQlpZiAoZSA9PSBFQUlfU1lTVEVNKQotKwkJCXBlcnJvcigiZ2V0YWRkcmluZm8iKTsKLSsJCXJl dHVybiAoMCk7Ci0rCQl9Ci0gCi0rCXJlczAgPSByZXM7Ci0rCXdoaWxlIChyZXMpCi0rCQl7Ci0r CQlzID0gc29ja2V0KHJlcy0+YWlfZmFtaWx5LCByZXMtPmFpX3NvY2t0eXBlLCByZXMtPmFpX3By b3RvY29sKTsKLSsJCWlmIChzID09IElOVkFMSURfU09DS0VUKQotKwkJCXsKLSsJCQlmYWlsZWRf Y2FsbCA9ICJzb2NrZXQiOwotKwkJCWdvdG8gbmV4dHJlczsKLSsJCQl9Ci0gI2lmIGRlZmluZWQo U09fS0VFUEFMSVZFKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19NUEUpCi0gCWlmICh0eXBlID09 IFNPQ0tfU1RSRUFNKQotIAkJewotLQkJaT0wOwotLQkJaT1zZXRzb2Nrb3B0KHMsU09MX1NPQ0tF VCxTT19LRUVQQUxJVkUsKGNoYXIgKikmaSxzaXplb2YoaSkpOwotLQkJaWYgKGkgPCAwKSB7IHBl cnJvcigia2VlcGFsaXZlIik7IHJldHVybigwKTsgfQotKwkJCWludCBpPTA7Ci0rCQkJaT1zZXRz b2Nrb3B0KHMsU09MX1NPQ0tFVCxTT19LRUVQQUxJVkUsCi0rCQkJCShjaGFyICopJmksc2l6ZW9m KGkpKTsKLSsJCQlpZiAoaSA8IDApIHsKLSsJCQkJZmFpbGVkX2NhbGwgPSAia2VlcGFsaXZlIjsK LSsJCQkJZ290byBuZXh0cmVzOwotKwkJCQl9Ci0gCQl9Ci0gI2VuZGlmCi0tCi0tCWlmIChjb25u ZWN0KHMsKHN0cnVjdCBzb2NrYWRkciAqKSZ0aGVtLHNpemVvZih0aGVtKSkgPT0gLTEpCi0tCQl7 IGNsb3Nlc29ja2V0KHMpOyBwZXJyb3IoImNvbm5lY3QiKTsgcmV0dXJuKDApOyB9Ci0rCQlpZiAo Y29ubmVjdChzLChzdHJ1Y3Qgc29ja2FkZHIgKilyZXMtPmFpX2FkZHIsCi0rCQkJcmVzLT5haV9h ZGRybGVuKSA9PSAwKQotKwkJCXsKLSsJCQlmcmVlYWRkcmluZm8ocmVzMCk7Ci0gCSpzb2NrPXM7 Ci0gCXJldHVybigxKTsKLSAJfQotIAotLWludCBkb19zZXJ2ZXIoaW50IHBvcnQsIGludCB0eXBl LCBpbnQgKnJldCwgaW50ICgqY2IpKGNoYXIgKmhvc3RuYW1lLCBpbnQgcywgdW5zaWduZWQgY2hh ciAqY29udGV4dCksIHVuc2lnbmVkIGNoYXIgKmNvbnRleHQpCi0rCQlmYWlsZWRfY2FsbCA9ICJz b2NrZXQiOwotK25leHRyZXM6Ci0rCQlpZiAocyAhPSBJTlZBTElEX1NPQ0tFVCkKLSsJCQljbG9z ZShzKTsKLSsJCXJlcyA9IHJlcy0+YWlfbmV4dDsKLSsJCX0KLSsJZnJlZWFkZHJpbmZvKHJlczAp OwotKwotKwlwZXJyb3IoZmFpbGVkX2NhbGwpOwotKwlyZXR1cm4oMCk7Ci0rCX0KLSsKLStpbnQg ZG9fc2VydmVyKGNoYXIgKnBvcnQsIGludCB0eXBlLCBpbnQgKnJldCwgaW50ICgqY2IpKGNoYXIg Kmhvc3RuYW1lLCBpbnQgcywgdW5zaWduZWQgY2hhciAqY29udGV4dCksIHVuc2lnbmVkIGNoYXIg KmNvbnRleHQpCi0gCXsKLSAJaW50IHNvY2s7Ci0gCWNoYXIgKm5hbWUgPSBOVUxMOwotQEAgLTMx NywzMyArMzI3LDM4IEBAIGludCBkb19zZXJ2ZXIoaW50IHBvcnQsIGludCB0eXBlLCBpbnQgKnIK LSAJCX0KLSAJfQotIAotLXN0YXRpYyBpbnQgaW5pdF9zZXJ2ZXJfbG9uZyhpbnQgKnNvY2ssIGlu dCBwb3J0LCBjaGFyICppcCwgaW50IHR5cGUpCi0rc3RhdGljIGludCBpbml0X3NlcnZlcihpbnQg KnNvY2ssIGNoYXIgKnBvcnQsIGludCB0eXBlKQotIAl7Ci0tCWludCByZXQ9MDsKLS0Jc3RydWN0 IHNvY2thZGRyX2luIHNlcnZlcjsKLS0JaW50IHM9IC0xLGk7Ci0rCXN0cnVjdCBhZGRyaW5mbyAq cmVzLCAqcmVzMCwgaGludHM7Ci0rCWNoYXIgKiBmYWlsZWRfY2FsbCA9IE5VTEw7Ci0rCWNoYXIg cG9ydF9uYW1lWzhdOwotKwlpbnQgczsKLSsJaW50IGU7Ci0gCi0gCWlmICghc3NsX3NvY2tfaW5p dCgpKSByZXR1cm4oMCk7Ci0gCi0tCW1lbXNldCgoY2hhciAqKSZzZXJ2ZXIsMCxzaXplb2Yoc2Vy dmVyKSk7Ci0tCXNlcnZlci5zaW5fZmFtaWx5PUFGX0lORVQ7Ci0tCXNlcnZlci5zaW5fcG9ydD1o dG9ucygodW5zaWduZWQgc2hvcnQpcG9ydCk7Ci0tCWlmIChpcCA9PSBOVUxMKQotLQkJc2VydmVy LnNpbl9hZGRyLnNfYWRkcj1JTkFERFJfQU5ZOwotLQllbHNlCi0tLyogQWRkZWQgZm9yIFQzRSwg YWRkcmVzcy1vZiBmYWlscyBvbiBiaXQgZmllbGQgKGJlY2ttYW5AYWNsLmxhbmwuZ292KSAqLwot LSNpZm5kZWYgQklUX0ZJRUxEX0xJTUlUUwotLQkJbWVtY3B5KCZzZXJ2ZXIuc2luX2FkZHIuc19h ZGRyLGlwLDQpOwotLSNlbHNlCi0tCQltZW1jcHkoJnNlcnZlci5zaW5fYWRkcixpcCw0KTsKLS0j ZW5kaWYKLSsJbWVtc2V0KCZoaW50cywgJ1wwJywgc2l6ZW9mKGhpbnRzKSk7Ci0rCWhpbnRzLmFp X3NvY2t0eXBlID0gdHlwZTsKLSsJaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlfQURE UkNPTkZJRzsKLSAJCi0tCQlpZiAodHlwZSA9PSBTT0NLX1NUUkVBTSkKLS0JCQlzPXNvY2tldChB Rl9JTkVULFNPQ0tfU1RSRUFNLFNPQ0tFVF9QUk9UT0NPTCk7Ci0tCQllbHNlIC8qIHR5cGUgPT0g U09DS19ER1JBTSAqLwotLQkJCXM9c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sSVBQUk9UT19V RFApOwotKwllID0gZ2V0YWRkcmluZm8oTlVMTCwgcG9ydCwgJmhpbnRzLCAmcmVzKTsKLSsJaWYg KGUpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgImdldGFkZHJpbmZvOiAlc1xuIiwgZ2FpX3N0 cmVycm9yKGUpKTsKLSsJCWlmIChlID09IEVBSV9TWVNURU0pCi0rCQkJcGVycm9yKCJnZXRhZGRy aW5mbyIpOwotKwkJcmV0dXJuICgwKTsKLSsJCX0KLSAKLS0JaWYgKHMgPT0gSU5WQUxJRF9TT0NL RVQpIGdvdG8gZXJyOwotKwlyZXMwID0gcmVzOwotKwl3aGlsZSAocmVzKQotKwkJewotKwkJcyA9 IHNvY2tldChyZXMtPmFpX2ZhbWlseSwgcmVzLT5haV9zb2NrdHlwZSwgcmVzLT5haV9wcm90b2Nv bCk7Ci0rCQlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkKLSsJCQl7Ci0rCQkJZmFpbGVkX2NhbGwg PSAic29ja2V0IjsKLSsJCQlnb3RvIG5leHRyZXM7Ci0rCQkJfQotICNpZiBkZWZpbmVkIFNPTF9T T0NLRVQgJiYgZGVmaW5lZCBTT19SRVVTRUFERFIKLSAJCXsKLSAJCWludCBqID0gMTsKLUBAIC0z NTEsMzYgKzM2NiwzOSBAQCBzdGF0aWMgaW50IGluaXRfc2VydmVyX2xvbmcoaW50ICpzb2NrLCBp Ci0gCQkJICAgKHZvaWQgKikgJmosIHNpemVvZiBqKTsKLSAJCX0KLSAjZW5kaWYKLS0JaWYgKGJp bmQocywoc3RydWN0IHNvY2thZGRyICopJnNlcnZlcixzaXplb2Yoc2VydmVyKSkgPT0gLTEpCi0r Ci0rCQlpZiAoYmluZChzLChzdHJ1Y3Qgc29ja2FkZHIgKilyZXMtPmFpX2FkZHIsIHJlcy0+YWlf YWRkcmxlbikgPT0gLTEpCi0gCQl7Ci0tI2lmbmRlZiBPUEVOU1NMX1NZU19XSU5ET1dTCi0tCQlw ZXJyb3IoImJpbmQiKTsKLS0jZW5kaWYKLS0JCWdvdG8gZXJyOwotKwkJCWZhaWxlZF9jYWxsID0g ImJpbmQiOwotKwkJCWdvdG8gbmV4dHJlczsKLSAJCX0KLS0JLyogTWFrZSBpdCAxMjggZm9yIGxp bnV4ICovCi0tCWlmICh0eXBlPT1TT0NLX1NUUkVBTSAmJiBsaXN0ZW4ocywxMjgpID09IC0xKSBn b3RvIGVycjsKLS0JaT0wOwotLQkqc29jaz1zOwotLQlyZXQ9MTsKLS1lcnI6Ci0tCWlmICgocmV0 ID09IDApICYmIChzICE9IC0xKSkKLSsJCWlmICh0eXBlPT1TT0NLX1NUUkVBTSAmJiBsaXN0ZW4o cywxMjgpID09IC0xKQotIAkJewotLQkJU0hVVERPV04ocyk7Ci0rCQkJZmFpbGVkX2NhbGwgPSAi bGlzdGVuIjsKLSsJCQlnb3RvIG5leHRyZXM7Ci0gCQl9Ci0tCXJldHVybihyZXQpOwotKwotKwkJ KnNvY2s9czsKLSsJCXJldHVybigxKTsKLSsKLStuZXh0cmVzOgotKwkJaWYgKHMgIT0gSU5WQUxJ RF9TT0NLRVQpCi0rCQkJY2xvc2Uocyk7Ci0rCQlyZXMgPSByZXMtPmFpX25leHQ7Ci0gCX0KLSsJ ZnJlZWFkZHJpbmZvKHJlczApOwotIAotLXN0YXRpYyBpbnQgaW5pdF9zZXJ2ZXIoaW50ICpzb2Nr LCBpbnQgcG9ydCwgaW50IHR5cGUpCi0tCXsKLS0JcmV0dXJuKGluaXRfc2VydmVyX2xvbmcoc29j aywgcG9ydCwgTlVMTCwgdHlwZSkpOwotKwlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkgeyBwZXJy b3IoInNvY2tldCIpOyByZXR1cm4oMCk7IH0KLSsKLSsJcGVycm9yKGZhaWxlZF9jYWxsKTsKLSsJ cmV0dXJuKDApOwotIAl9Ci0gCi0gc3RhdGljIGludCBkb19hY2NlcHQoaW50IGFjY19zb2NrLCBp bnQgKnNvY2ssIGNoYXIgKipob3N0KQotIAl7Ci0tCWludCByZXQsaTsKLS0Jc3RydWN0IGhvc3Rl bnQgKmgxLCpoMjsKLS0Jc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBmcm9tOwotKwlzdGF0aWMg c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZnJvbTsKLSsJY2hhciBidWZmZXJbTklfTUFYSE9TVF07 Ci0rCWludCByZXQ7Ci0gCWludCBsZW47Ci0gLyoJc3RydWN0IGxpbmdlciBsaW5nOyAqLwotIAot QEAgLTQyNSwxMzcgKzQ0Myw2MiBAQCByZWRvaXQ6Ci0gCWlmIChpIDwgMCkgeyBwZXJyb3IoImtl ZXBhbGl2ZSIpOyByZXR1cm4oMCk7IH0KLSAqLwotIAotLQlpZiAoaG9zdCA9PSBOVUxMKSBnb3Rv IGVuZDsKLS0jaWZuZGVmIEJJVF9GSUVMRF9MSU1JVFMKLS0JLyogSSBzaG91bGQgdXNlIFdTQUFz eW5jR2V0SG9zdEJ5TmFtZSgpIHVuZGVyIHdpbmRvd3MgKi8KLS0JaDE9Z2V0aG9zdGJ5YWRkcigo Y2hhciAqKSZmcm9tLnNpbl9hZGRyLnNfYWRkciwKLS0JCXNpemVvZihmcm9tLnNpbl9hZGRyLnNf YWRkciksQUZfSU5FVCk7Ci0tI2Vsc2UKLS0JaDE9Z2V0aG9zdGJ5YWRkcigoY2hhciAqKSZmcm9t LnNpbl9hZGRyLAotLQkJc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSxBRl9JTkVUKTsKLS0jZW5kaWYK LS0JaWYgKGgxID09IE5VTEwpCi0rCWlmIChob3N0ID09IE5VTEwpCi0gCQl7Ci0tCQlCSU9fcHJp bnRmKGJpb19lcnIsImJhZCBnZXRob3N0YnlhZGRyXG4iKTsKLS0JCSpob3N0PU5VTEw7Ci0tCQkv KiByZXR1cm4oMCk7ICovCi0tCQl9Ci0tCWVsc2UKLS0JCXsKLS0JCWlmICgoKmhvc3Q9KGNoYXIg KilPUEVOU1NMX21hbGxvYyhzdHJsZW4oaDEtPmhfbmFtZSkrMSkpID09IE5VTEwpCi0tCQkJewot LQkJCXBlcnJvcigiT1BFTlNTTF9tYWxsb2MiKTsKLSsJCSpzb2NrPXJldDsKLSAJCQlyZXR1cm4o MCk7Ci0gCQkJfQotLQkJQlVGX3N0cmxjcHkoKmhvc3QsaDEtPmhfbmFtZSxzdHJsZW4oaDEtPmhf bmFtZSkrMSk7Ci0gCi0tCQloMj1HZXRIb3N0QnlOYW1lKCpob3N0KTsKLS0JCWlmIChoMiA9PSBO VUxMKQotKwlpZiAoZ2V0bmFtZWluZm8oKHN0cnVjdCBzb2NrYWRkciAqKSZmcm9tLCBzaXplb2Yo ZnJvbSksCi0rCQlidWZmZXIsIHNpemVvZihidWZmZXIpLAotKwkJTlVMTCwgMCwgMCkpCi0gCQkJ ewotLQkJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0aG9zdGJ5bmFtZSBmYWlsdXJlXG4iKTsKLSsJ CUJJT19wcmludGYoYmlvX2VyciwiZ2V0bmFtZWluZm8gZmFpbGVkXG4iKTsKLSsJCSpob3N0PU5V TEw7Ci0gCQkJcmV0dXJuKDApOwotIAkJCX0KLS0JCWk9MDsKLS0JCWlmIChoMi0+aF9hZGRydHlw ZSAhPSBBRl9JTkVUKQotKwllbHNlCi0gCQkJewotLQkJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0 aG9zdGJ5bmFtZSBhZGRyIGlzIG5vdCBBRl9JTkVUXG4iKTsKLSsJCWlmICgoKmhvc3Q9KGNoYXIg KilPUEVOU1NMX21hbGxvYyhzdHJsZW4oYnVmZmVyKSsxKSkgPT0gTlVMTCkKLSsJCQl7Ci0rCQkJ cGVycm9yKCJPUEVOU1NMX21hbGxvYyIpOwotIAkJCXJldHVybigwKTsKLSAJCQl9Ci0tCQl9Ci0t ZW5kOgotKwkJc3RyY3B5KCpob3N0LCBidWZmZXIpOwotIAkqc29jaz1yZXQ7Ci0gCXJldHVybigx KTsKLSAJfQotKwl9Ci0gCi0taW50IGV4dHJhY3RfaG9zdF9wb3J0KGNoYXIgKnN0ciwgY2hhciAq Kmhvc3RfcHRyLCB1bnNpZ25lZCBjaGFyICppcCwKLS0JICAgICBzaG9ydCAqcG9ydF9wdHIpCi0r aW50IGV4dHJhY3RfaG9zdF9wb3J0KGNoYXIgKnN0ciwgY2hhciAqKmhvc3RfcHRyLCAKLSsJICAg ICBjaGFyICoqcG9ydF9wdHIpCi0gCXsKLS0JY2hhciAqaCwqcDsKLSsJY2hhciAqaCwqcCwqeDsK LSAKLS0JaD1zdHI7Ci0tCXA9c3RyY2hyKHN0ciwnOicpOwotKwl4PWg9c3RyOwotKwlpZiAoKmgg PT0gJ1snKQotKwkJewotKwkJaCsrOwotKwkJcD1zdHJjaHIoaCwnXScpOwotIAlpZiAocCA9PSBO VUxMKQotIAkJewotLQkJQklPX3ByaW50ZihiaW9fZXJyLCJubyBwb3J0IGRlZmluZWRcbiIpOwot KwkJCUJJT19wcmludGYoYmlvX2Vyciwibm8gZW5kaW5nIGJyYWNrZXQgZm9yIElQdjYgYWRkcmVz c1xuIik7Ci0gCQlyZXR1cm4oMCk7Ci0gCQl9Ci0gCSoocCsrKT0nXDAnOwotLQotLQlpZiAoKGlw ICE9IE5VTEwpICYmICFob3N0X2lwKHN0cixpcCkpCi0tCQlnb3RvIGVycjsKLS0JaWYgKGhvc3Rf cHRyICE9IE5VTEwpICpob3N0X3B0cj1oOwotLQotLQlpZiAoIWV4dHJhY3RfcG9ydChwLHBvcnRf cHRyKSkKLS0JCWdvdG8gZXJyOwotLQlyZXR1cm4oMSk7Ci0tZXJyOgotLQlyZXR1cm4oMCk7Ci0r CQl4ID0gcDsKLSAJfQotLQotLXN0YXRpYyBpbnQgaG9zdF9pcChjaGFyICpzdHIsIHVuc2lnbmVk IGNoYXIgaXBbNF0pCi0tCXsKLS0JdW5zaWduZWQgaW50IGluWzRdOyAKLS0JaW50IGk7Ci0tCi0t CWlmIChzc2NhbmYoc3RyLCIldS4ldS4ldS4ldSIsJihpblswXSksJihpblsxXSksJihpblsyXSks JihpblszXSkpID09IDQpCi0tCQl7Ci0tCQlmb3IgKGk9MDsgaTw0OyBpKyspCi0tCQkJaWYgKGlu W2ldID4gMjU1KQotLQkJCQl7Ci0tCQkJCUJJT19wcmludGYoYmlvX2VyciwiaW52YWxpZCBJUCBh ZGRyZXNzXG4iKTsKLS0JCQkJZ290byBlcnI7Ci0tCQkJCX0KLS0JCWlwWzBdPWluWzBdOwotLQkJ aXBbMV09aW5bMV07Ci0tCQlpcFsyXT1pblsyXTsKLS0JCWlwWzNdPWluWzNdOwotLQkJfQotLQll bHNlCi0tCQl7IC8qIGRvIGEgZ2V0aG9zdGJ5bmFtZSAqLwotLQkJc3RydWN0IGhvc3RlbnQgKmhl OwotLQotLQkJaWYgKCFzc2xfc29ja19pbml0KCkpIHJldHVybigwKTsKLS0KLS0JCWhlPUdldEhv c3RCeU5hbWUoc3RyKTsKLS0JCWlmIChoZSA9PSBOVUxMKQotLQkJCXsKLS0JCQlCSU9fcHJpbnRm KGJpb19lcnIsImdldGhvc3RieW5hbWUgZmFpbHVyZVxuIik7Ci0tCQkJZ290byBlcnI7Ci0tCQkJ fQotLQkJLyogY2FzdCB0byBzaG9ydCBiZWNhdXNlIG9mIHdpbjE2IHdpbnNvY2sgZGVmaW5pdGlv biAqLwotLQkJaWYgKChzaG9ydCloZS0+aF9hZGRydHlwZSAhPSBBRl9JTkVUKQotKwlwPXN0cmNo cih4LCc6Jyk7Ci0rCWlmIChwID09IE5VTEwpCi0gCQkJewotLQkJCUJJT19wcmludGYoYmlvX2Vy ciwiZ2V0aG9zdGJ5bmFtZSBhZGRyIGlzIG5vdCBBRl9JTkVUXG4iKTsKLS0JCQlyZXR1cm4oMCk7 Ci0tCQkJfQotLQkJaXBbMF09aGUtPmhfYWRkcl9saXN0WzBdWzBdOwotLQkJaXBbMV09aGUtPmhf YWRkcl9saXN0WzBdWzFdOwotLQkJaXBbMl09aGUtPmhfYWRkcl9saXN0WzBdWzJdOwotLQkJaXBb M109aGUtPmhfYWRkcl9saXN0WzBdWzNdOwotLQkJfQotLQlyZXR1cm4oMSk7Ci0tZXJyOgotKwkJ QklPX3ByaW50ZihiaW9fZXJyLCJubyBwb3J0IGRlZmluZWRcbiIpOwotIAlyZXR1cm4oMCk7Ci0g CX0KLSsJKihwKyspPSdcMCc7Ci0gCi0taW50IGV4dHJhY3RfcG9ydChjaGFyICpzdHIsIHNob3J0 ICpwb3J0X3B0cikKLS0JewotLQlpbnQgaTsKLS0Jc3RydWN0IHNlcnZlbnQgKnM7Ci0rCWlmICho b3N0X3B0ciAhPSBOVUxMKSAqaG9zdF9wdHI9aDsKLSsJaWYgKHBvcnRfcHRyICE9IE5VTEwpICpw b3J0X3B0cj1wOwotIAotLQlpPWF0b2koc3RyKTsKLS0JaWYgKGkgIT0gMCkKLS0JCSpwb3J0X3B0 cj0odW5zaWduZWQgc2hvcnQpaTsKLS0JZWxzZQotLQkJewotLQkJcz1nZXRzZXJ2YnluYW1lKHN0 ciwidGNwIik7Ci0tCQlpZiAocyA9PSBOVUxMKQotLQkJCXsKLS0JCQlCSU9fcHJpbnRmKGJpb19l cnIsImdldHNlcnZieW5hbWUgZmFpbHVyZSBmb3IgJXNcbiIsc3RyKTsKLS0JCQlyZXR1cm4oMCk7 Ci0tCQkJfQotLQkJKnBvcnRfcHRyPW50b2hzKCh1bnNpZ25lZCBzaG9ydClzLT5zX3BvcnQpOwot LQkJfQotIAlyZXR1cm4oMSk7Ci0gCX0KLSAKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJl dGE0LWFlc25pLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1hZXNuaS5wYXRjaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTc5MThiCi0tLSAvZGV2L251bGwKKysrIGIv b3BlbnNzbC0xLjAuMC1iZXRhNC1hZXNuaS5wYXRjaApAQCAtMCwwICsxLDIzODggQEAKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvQ29uZmlndXJlLmFlc25pIG9wZW5zc2wtMS4wLjAtYmV0 YTQvQ29uZmlndXJlCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9Db25maWd1cmUuYWVzbmkJMjAx MC0wMS0wNyAyMzozODozMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L0NvbmZpZ3VyZQkyMDEwLTAxLTEyIDIyOjE4OjA2LjAwMDAwMDAwMCArMDEwMAorQEAgLTEyMywx MSArMTIzLDExIEBAIG15ICR0bGliPSItbG5zbCAtbHNvY2tldCI7CisgbXkgJGJpdHMxPSJUSElS VFlfVFdPX0JJVCAiOworIG15ICRiaXRzMj0iU0lYVFlfRk9VUl9CSVQgIjsKKyAKKy1teSAkeDg2 X2FzbT0ieDg2Y3B1aWQubzpibi01ODYubyBjby01ODYubyB4ODYtbW9udC5vOmRlcy01ODYubyBj cnlwdDU4Ni5vOmFlcy01ODYubzpiZi01ODYubzptZDUtNTg2Lm86c2hhMS01ODYubyBzaGEyNTYt NTg2Lm8gc2hhNTEyLTU4Ni5vOmNhc3QtNTg2Lm86cmM0LTU4Ni5vOnJtZC01ODYubzpyYzUtNTg2 Lm86d3BfYmxvY2subyB3cC1tbXgubzpjbWxsLXg4Ni5vIjsKKytteSAkeDg2X2FzbT0ieDg2Y3B1 aWQubzpibi01ODYubyBjby01ODYubyB4ODYtbW9udC5vOmRlcy01ODYubyBjcnlwdDU4Ni5vOmFl cy01ODYubyBhZXNuaS14ODYubzpiZi01ODYubzptZDUtNTg2Lm86c2hhMS01ODYubyBzaGEyNTYt NTg2Lm8gc2hhNTEyLTU4Ni5vOmNhc3QtNTg2Lm86cmM0LTU4Ni5vOnJtZC01ODYubzpyYzUtNTg2 Lm86d3BfYmxvY2subyB3cC1tbXgubzpjbWxsLXg4Ni5vIjsKKyAKKyBteSAkeDg2X2VsZl9hc209 IiR4ODZfYXNtOmVsZiI7CisgCistbXkgJHg4Nl82NF9hc209Ing4Nl82NGNwdWlkLm86eDg2XzY0 LWdjYy5vIHg4Nl82NC1tb250Lm86OmFlcy14ODZfNjQubzo6bWQ1LXg4Nl82NC5vOnNoYTEteDg2 XzY0Lm8gc2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14ODZfNjQubzo6cmM0LXg4Nl82NC5vOjo6d3At eDg2XzY0Lm86Y21sbC14ODZfNjQubyBjbWxsX21pc2MubyI7CisrbXkgJHg4Nl82NF9hc209Ing4 Nl82NGNwdWlkLm86eDg2XzY0LWdjYy5vIHg4Nl82NC1tb250Lm86OmFlcy14ODZfNjQubyBhZXNu aS14ODZfNjQubzo6bWQ1LXg4Nl82NC5vOnNoYTEteDg2XzY0Lm8gc2hhMjU2LXg4Nl82NC5vIHNo YTUxMi14ODZfNjQubzo6cmM0LXg4Nl82NC5vOjo6d3AteDg2XzY0Lm86Y21sbC14ODZfNjQubyBj bWxsX21pc2MubyI7CisgbXkgJGlhNjRfYXNtPSJpYTY0Y3B1aWQubzpibi1pYTY0Lm86OmFlc19j b3JlLm8gYWVzX2NiYy5vIGFlcy1pYTY0Lm86Om1kNS1pYTY0Lm86c2hhMS1pYTY0Lm8gc2hhMjU2 LWlhNjQubyBzaGE1MTItaWE2NC5vOjpyYzQtaWE2NC5vIHJjNF9za2V5Lm86Ojo6OnZvaWQiOwor IG15ICRzcGFyY3Y5X2FzbT0ic3BhcmN2OWNhcC5vIHNwYXJjY3B1aWQubzpibi1zcGFyY3Y5Lm8g c3BhcmN2OS1tb250Lm8gc3BhcmN2OWEtbW9udC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5v OmFlc19jb3JlLm8gYWVzX2NiYy5vIGFlcy1zcGFyY3Y5Lm86OjpzaGExLXNwYXJjdjkubyBzaGEy NTYtc3BhcmN2OS5vIHNoYTUxMi1zcGFyY3Y5Lm86Ojo6Ojo6dm9pZCI7CisgbXkgJHNwYXJjdjhf YXNtPSI6c3BhcmN2OC5vOmRlc19lbmMtc3BhcmMubyBmY3J5cHRfYi5vOjo6Ojo6Ojo6Ojp2b2lk IjsKK0BAIC00OTEsNyArNDkxLDcgQEAgbXkgJXRhYmxlPSgKKyAjCisgIyBXaW42NCB0YXJnZXRz LCBXSU42NEkgZGVub3RlcyBJQS02NCBhbmQgV0lONjRBIC0gQU1ENjQKKyAiVkMtV0lONjRJIiwi Y2w6LVczIC1HczAgLUd5IC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9M RUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURVTklDT0RFIC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VS RV9OT19ERVBSRUNBVEU6OjpXSU42NEk6OlNJWFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNf SU5UIEVYUE9SVF9WQVJfQVNfRk46aWE2NGNwdWlkLm86aWE2NC5vOjphZXNfY29yZS5vIGFlc19j YmMubyBhZXMtaWE2NC5vOjptZDUtaWE2NC5vOnNoYTEtaWE2NC5vIHNoYTI1Ni1pYTY0Lm8gc2hh NTEyLWlhNjQubzo6Ojo6OjppYXM6d2luMzIiLAorLSJWQy1XSU42NEEiLCJjbDotVzMgLUdzMCAt R3kgLW5vbG9nbyAtRE9QRU5TU0xfU1lTTkFNRV9XSU4zMiAtRFdJTjMyX0xFQU5fQU5EX01FQU4g LURMX0VORElBTiAtRFVOSUNPREUgLURfVU5JQ09ERSAtRF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FU RTo6OldJTjY0QTo6U0lYVFlfRk9VUl9CSVQgUkM0X0NIVU5LX0xMIERFU19JTlQgRVhQT1JUX1ZB Ul9BU19GTjp4ODZfNjRjcHVpZC5vOmJuX2FzbS5vIHg4Nl82NC1tb250Lm86OmFlcy14ODZfNjQu bzo6bWQ1LXg4Nl82NC5vOnNoYTEteDg2XzY0Lm8gc2hhMjU2LXg4Nl82NC5vIHNoYTUxMi14ODZf NjQubzo6cmM0LXg4Nl82NC5vOjo6d3AteDg2XzY0Lm86Y21sbC14ODZfNjQubyBjbWxsX21pc2Mu bzphdXRvOndpbjMyIiwKKysiVkMtV0lONjRBIiwiY2w6LVczIC1HczAgLUd5IC1ub2xvZ28gLURP UEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9MRUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURV TklDT0RFIC1EX1VOSUNPREUgLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU42NEE6OlNJ WFRZX0ZPVVJfQklUIFJDNF9DSFVOS19MTCBERVNfSU5UIEVYUE9SVF9WQVJfQVNfRk46eDg2XzY0 Y3B1aWQubzpibl9hc20ubyB4ODZfNjQtbW9udC5vOjphZXMteDg2XzY0Lm8gYWVzbmkteDg2XzY0 Lm86Om1kNS14ODZfNjQubzpzaGExLXg4Nl82NC5vIHNoYTI1Ni14ODZfNjQubyBzaGE1MTIteDg2 XzY0Lm86OnJjNC14ODZfNjQubzo6OndwLXg4Nl82NC5vOmNtbGwteDg2XzY0Lm8gY21sbF9taXNj Lm86YXV0bzp3aW4zMiIsCisgIyB4ODYgV2luMzIgdGFyZ2V0IGRlZmF1bHRzIHRvIEFOU0kgQVBJ LCBpZiB5b3Ugd2FudCBVTklDT0RFLCBjb21wbGVtZW50CisgIyAncGVybCBDb25maWd1cmUgVkMt V0lOMzInIHdpdGggJy1EVU5JQ09ERSAtRF9VTklDT0RFJworICJWQy1XSU4zMiIsImNsOi1XMyAt V1ggLUdzMCAtR0YgLUd5IC1ub2xvZ28gLURPUEVOU1NMX1NZU05BTUVfV0lOMzIgLURXSU4zMl9M RUFOX0FORF9NRUFOIC1ETF9FTkRJQU4gLURfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU6OjpXSU4z Mjo6Qk5fTExPTkcgUkM0X0lOREVYIEVYUE9SVF9WQVJfQVNfRk4gJHt4ODZfZ2NjX29wdHN9OiR7 eDg2X2FzbX06d2luMzJuOndpbjMyIiwKK0BAIC0xNDEwLDYgKzE0MTAsNyBAQCBpZiAoJHJtZDE2 MF9vYmogPX4gL1wubyQvKQorIGlmICgkYWVzX29iaiA9fiAvXC5vJC8pCisgCXsKKyAJJGNmbGFn cy49IiAtREFFU19BU00iOworKwkkYWVzX29iaiA9fiBzL1xzKmFlc25pXC14ODZcLm8vLyBpZiAo JG5vX3NzZTIpOworIAl9CisgZWxzZQl7CisgCSRhZXNfb2JqPSRhZXNfZW5jOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYWVzL2FzbS9hZXNuaS14ODYucGwuYWVzbmkgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYWVzL2FzbS9hZXNuaS14ODYucGwKKy0tLSBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9hZXMvYXNtL2Flc25pLXg4Ni5wbC5hZXNuaQkyMDEwLTAxLTEy IDIyOjE4OjA2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2Flcy9hc20vYWVzbmkteDg2LnBsCTIwMTAtMDEtMTIgMjI6MTg6MDYuMDAwMDAwMDAwICswMTAw CitAQCAtMCwwICsxLDc2NSBAQAorKyMhL3Vzci9iaW4vZW52IHBlcmwKKysKKysjID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CisrIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBm b3IgdGhlIE9wZW5TU0wKKysjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwg bGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKKysjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5k aW5nIG9uIHdoZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisrIyBkZXRhaWxzIHNlZSBo dHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKysjID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrIworKyMgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBJbnRlbCBBRVMtTkkg ZXh0ZW5zaW9uLiBJbgorKyMgT3BlblNTTCBjb250ZXh0IGl0J3MgdXNlZCB3aXRoIEludGVsIGVu Z2luZSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYXMKKysjIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9y IGNyeXB0by9hZXMvYXNtL2Flcy01ODYucGwgW3NlZSBiZWxvdyBmb3IKKysjIGRldGFpbHNdLgor KworKyRQUkVGSVg9ImFlc25pIjsJIyBpZiAkUFJFRklYIGlzIHNldCB0byAiQUVTIiwgdGhlIHNj cmlwdAorKwkJCSMgZ2VuZXJhdGVzIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yCisrCQkJIyBjcnlw dG8vYWVzL2FzbS9hZXMtNTg2LnBsOi0pCisrCisrJDAgPX4gbS8oLipbXC9cXF0pW15cL1xcXSsk LzsgJGRpcj0kMTsKKytwdXNoKEBJTkMsIiR7ZGlyfSIsIiR7ZGlyfS4uLy4uL3Blcmxhc20iKTsK KytyZXF1aXJlICJ4ODZhc20ucGwiOworKworKyZhc21faW5pdCgkQVJHVlswXSwkMCk7CisrCisr JG1vdmVrZXkgPSBldmFsKCRSUkVGSVggZXEgImFzZW5pIiA/ICIqbW92YXBzIiA6ICIqbW92dXBz Iik7CisrCisrJGxlbj0iZWF4IjsKKyskcm91bmRzPSJlY3giOworKyRrZXk9ImVkeCI7CisrJGlu cD0iZXNpIjsKKyskb3V0PSJlZGkiOworKyRyb3VuZHNfPSJlYngiOwkjIGJhY2t1cCBjb3B5IGZv ciAkcm91bmRzCisrJGtleV89ImVicCI7CSMgYmFja3VwIGNvcHkgZm9yICRrZXkKKysKKyskaW5v dXQwPSJ4bW0wIjsKKyskaW5vdXQxPSJ4bW0xIjsKKyskaW5vdXQyPSJ4bW0yIjsKKyskcm5ka2V5 MD0ieG1tMyI7CisrJHJuZGtleTE9InhtbTQiOworKyRpdmVjPSJ4bW01IjsKKyskaW4wPSJ4bW02 IjsKKyskaW4xPSJ4bW03IjsJJGlub3V0Mz0ieG1tNyI7CisrCisrIyBJbmxpbmUgdmVyc2lvbiBv ZiBpbnRlcm5hbCBhZXNuaV9bZW58ZGVdY3J5cHQxCisrc3ViIGFlc25pX2lubGluZV9nZW5lcmF0 ZTEKKyt7IG15ICRwPXNoaWZ0OworKworKyAgICAmJG1vdmVrZXkJCSgkcm5ka2V5MCwmUVdQKDAs JGtleSkpOworKyAgICAmJG1vdmVrZXkJCSgkcm5ka2V5MSwmUVdQKDE2LCRrZXkpKTsKKysgICAg JmxlYQkJKCRrZXksJkRXUCgzMiwka2V5KSk7CisrICAgICZweG9yCQkoJGlub3V0MCwkcm5ka2V5 MCk7CisrICAgICZzZXRfbGFiZWwoIiR7cH0xX2xvb3AiKTsKKysJZXZhbCImYWVzJHtwfQkoJGlu b3V0MCwkcm5ka2V5MSkiOworKwkmZGVjCQkoJHJvdW5kcyk7CisrCSYkbW92ZWtleQkoJHJuZGtl eTEsJlFXUCgwLCRrZXkpKTsKKysJJmxlYQkJKCRrZXksJkRXUCgxNiwka2V5KSk7CisrICAgICZq bnoJCSgmbGFiZWwoIiR7cH0xX2xvb3AiKSk7CisrICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5v dXQwLCRybmRrZXkxKSI7CisrfQorKworK3N1YiBhZXNuaV9nZW5lcmF0ZTEJIyBmdWxseSB1bnJv bGxlZCBsb29wCisreyBteSAkcD1zaGlmdDsKKysKKysgICAgJmZ1bmN0aW9uX2JlZ2luX0IoIl9h ZXNuaV8ke3B9cnlwdDEiKTsKKysJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDAsJGtleSkpOwor KwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMHgxMCwka2V5KSk7CisrCSZjbXAJCSgkcm91bmRz LDExKTsKKysJJnB4b3IJCSgkaW5vdXQwLCRybmRrZXkwKTsKKysJJiRtb3Zla2V5CSgkcm5ka2V5 MCwmUVdQKDB4MjAsJGtleSkpOworKwkmbGVhCQkoJGtleSwmRFdQKDB4MzAsJGtleSkpOworKwkm amIJCSgmbGFiZWwoIiR7cH0xMjgiKSk7CisrCSZsZWEJCSgka2V5LCZEV1AoMHgyMCwka2V5KSk7 CisrCSZqZQkJKCZsYWJlbCgiJHtwfTE5MiIpKTsKKysJJmxlYQkJKCRrZXksJkRXUCgweDIwLCRr ZXkpKTsKKysJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MSkiOworKwkmJG1vdmVrZXkJ KCRybmRrZXkxLCZRV1AoLTB4NDAsJGtleSkpOworKwlldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRy bmRrZXkwKSI7CisrCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgtMHgzMCwka2V5KSk7CisrICAg ICZzZXRfbGFiZWwoIiR7cH0xOTIiKTsKKysJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5 MSkiOworKwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoLTB4MjAsJGtleSkpOworKwlldmFsIiZh ZXMke3B9CSgkaW5vdXQwLCRybmRrZXkwKSI7CisrCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgt MHgxMCwka2V5KSk7CisrICAgICZzZXRfbGFiZWwoIiR7cH0xMjgiKTsKKysJZXZhbCImYWVzJHtw fQkoJGlub3V0MCwkcm5ka2V5MSkiOworKwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMCwka2V5 KSk7CisrCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTApIjsKKysJJiRtb3Zla2V5CSgk cm5ka2V5MCwmUVdQKDB4MTAsJGtleSkpOworKwlldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRybmRr ZXkxKSI7CisrCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgweDIwLCRrZXkpKTsKKysJZXZhbCIm YWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MCkiOworKwkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1Ao MHgzMCwka2V5KSk7CisrCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTEpIjsKKysJJiRt b3Zla2V5CSgkcm5ka2V5MSwmUVdQKDB4NDAsJGtleSkpOworKwlldmFsIiZhZXMke3B9CSgkaW5v dXQwLCRybmRrZXkwKSI7CisrCSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgweDUwLCRrZXkpKTsK KysJZXZhbCImYWVzJHtwfQkoJGlub3V0MCwkcm5ka2V5MSkiOworKwkmJG1vdmVrZXkJKCRybmRr ZXkxLCZRV1AoMHg2MCwka2V5KSk7CisrCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtleTAp IjsKKysJJiRtb3Zla2V5CSgkcm5ka2V5MCwmUVdQKDB4NzAsJGtleSkpOworKwlldmFsIiZhZXMk e3B9CSgkaW5vdXQwLCRybmRrZXkxKSI7CisrICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQw LCRybmRrZXkwKSI7CisrICAgICZyZXQoKTsKKysgICAgJmZ1bmN0aW9uX2VuZF9CKCJfYWVzbmlf JHtwfXJ5cHQxIik7CisrfQorKworKyMgdm9pZCAkUFJFRklYX2VuY3J5cHQgKGNvbnN0IHZvaWQg KmlucCx2b2lkICpvdXQsY29uc3QgQUVTX0tFWSAqa2V5KTsKKysjICZhZXNuaV9nZW5lcmF0ZTEo ImRlYyIpOworKyZmdW5jdGlvbl9iZWdpbl9CKCIke1BSRUZJWH1fZW5jcnlwdCIpOworKwkmbW92 CSgiZWF4Iiwmd3BhcmFtKDApKTsKKysJJm1vdgkoJGtleSwmd3BhcmFtKDIpKTsKKysJJm1vdnVw cwkoJGlub3V0MCwmUVdQKDAsImVheCIpKTsKKysJJm1vdgkoJHJvdW5kcywmRFdQKDI0MCwka2V5 KSk7CisrCSZtb3YJKCJlYXgiLCZ3cGFyYW0oMSkpOworKwkmYWVzbmlfaW5saW5lX2dlbmVyYXRl MSgiZW5jIik7CSMgJmNhbGwJKCJfYWVzbmlfZW5jcnlwdDEiKTsKKysJJm1vdnVwcwkoJlFXUCgw LCJlYXgiKSwkaW5vdXQwKTsKKysJJnJldAkoKTsKKysmZnVuY3Rpb25fZW5kX0IoIiR7UFJFRklY fV9lbmNyeXB0Iik7CisrCisrIyB2b2lkICRQUkVGSVhfZGVjcnlwdCAoY29uc3Qgdm9pZCAqaW5w LHZvaWQgKm91dCxjb25zdCBBRVNfS0VZICprZXkpOworKyMgJmFlc25pX2dlbmVyYXRlMSgiZGVj Iik7CisrJmZ1bmN0aW9uX2JlZ2luX0IoIiR7UFJFRklYfV9kZWNyeXB0Iik7CisrCSZtb3YJKCJl YXgiLCZ3cGFyYW0oMCkpOworKwkmbW92CSgka2V5LCZ3cGFyYW0oMikpOworKwkmbW92dXBzCSgk aW5vdXQwLCZRV1AoMCwiZWF4IikpOworKwkmbW92CSgkcm91bmRzLCZEV1AoMjQwLCRrZXkpKTsK KysJJm1vdgkoImVheCIsJndwYXJhbSgxKSk7CisrCSZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJk ZWMiKTsJIyAmY2FsbAkoIl9hZXNuaV9kZWNyeXB0MSIpOworKwkmbW92dXBzCSgmUVdQKDAsImVh eCIpLCRpbm91dDApOworKwkmcmV0CSgpOworKyZmdW5jdGlvbl9lbmRfQigiJHtQUkVGSVh9X2Rl Y3J5cHQiKTsKKysMCisrIyBfYWVzbmlfW2VufGRlXWNyeXB0WzM0XSBhcmUgcHJpdmF0ZSBpbnRl cmZhY2VzLCBOIGRlbm90ZXMgaW50ZXJsZWF2ZQorKyMgZmFjdG9yLiBXaHkgM3ggc3Vicm91dGlu ZSBpcyB1c2VkIGluIGxvb3BzPyBFdmVuIHRob3VnaCBhZXNbZW5jfGRlY10KKysjIGxhdGVuY3kg aXMgNiwgaXQgdHVybmVkIG91dCB0aGF0IGl0IGNhbiBiZSBzY2hlZHVsZWQgb25seSBldmVyeQor KyMgKnNlY29uZCogY3ljbGUuIFRodXMgM3ggaW50ZXJsZWF2ZSBpcyB0aGUgb25lIHByb3ZpZGlu ZyBvcHRpbWFsCisrIyB1dGlsaXphdGlvbiwgaS5lLiB3aGVuIHN1YnJvdXRpbmUncyB0aHJvdWdo cHV0IGlzIHZpcnR1YWxseSBzYW1lIGFzCisrIyBvZiBub24taW50ZXJsZWF2ZWQgc3Vicm91dGlu ZSBbZm9yIG51bWJlciBvZiBpbnB1dCBibG9ja3MgdXAgdG8gM10uCisrIyBUaGlzIGlzIHdoeSBp dCBtYWtlcyBubyBzZW5zZSB0byBpbXBsZW1lbnQgMnggc3Vicm91dGluZS4gQXMgc29vbgorKyMg YXMvaWYgSW50ZWwgaW1wcm92ZXMgdGhyb3VnaHB1dCBieSBtYWtpbmcgaXQgcG9zc2libGUgdG8g c2NoZWR1bGUKKysjIHRoZSBpbnN0cnVjdGlvbnMgaW4gcXVlc3Rpb24gKmV2ZXJ5KiBjeWNsZXMg SSB3b3VsZCBoYXZlIHRvCisrIyBpbXBsZW1lbnQgNnggaW50ZXJsZWF2ZSBhbmQgdXNlIGl0IGlu IGxvb3AuLi4KKytzdWIgYWVzbmlfZ2VuZXJhdGUzCisreyBteSAkcD1zaGlmdDsKKysKKysgICAg JmZ1bmN0aW9uX2JlZ2luX0IoIl9hZXNuaV8ke3B9cnlwdDMiKTsKKysJJiRtb3Zla2V5CSgkcm5k a2V5MCwmUVdQKDAsJGtleSkpOworKwkmc2hyCQkoJHJvdW5kcywxKTsKKysJJiRtb3Zla2V5CSgk cm5ka2V5MSwmUVdQKDE2LCRrZXkpKTsKKysJJmxlYQkJKCRrZXksJkRXUCgzMiwka2V5KSk7Cisr CSZweG9yCQkoJGlub3V0MCwkcm5ka2V5MCk7CisrCSZweG9yCQkoJGlub3V0MSwkcm5ka2V5MCk7 CisrCSZweG9yCQkoJGlub3V0Miwkcm5ka2V5MCk7CisrCSZqbXAJCSgmbGFiZWwoIiR7cH0zX2xv b3AiKSk7CisrICAgICZzZXRfbGFiZWwoIiR7cH0zX2xvb3AiLDE2KTsKKysJZXZhbCImYWVzJHtw fQkoJGlub3V0MCwkcm5ka2V5MSkiOworKwkmJG1vdmVrZXkJKCRybmRrZXkwLCZRV1AoMCwka2V5 KSk7CisrCWV2YWwiJmFlcyR7cH0JKCRpbm91dDEsJHJuZGtleTEpIjsKKysJJmRlYwkJKCRyb3Vu ZHMpOworKwlldmFsIiZhZXMke3B9CSgkaW5vdXQyLCRybmRrZXkxKSI7CisrCSYkbW92ZWtleQko JHJuZGtleTEsJlFXUCgxNiwka2V5KSk7CisrCWV2YWwiJmFlcyR7cH0JKCRpbm91dDAsJHJuZGtl eTApIjsKKysJJmxlYQkJKCRrZXksJkRXUCgzMiwka2V5KSk7CisrCWV2YWwiJmFlcyR7cH0JKCRp bm91dDEsJHJuZGtleTApIjsKKysJZXZhbCImYWVzJHtwfQkoJGlub3V0Miwkcm5ka2V5MCkiOwor Kwkmam56CQkoJmxhYmVsKCIke3B9M19sb29wIikpOworKyAgICBldmFsIiZhZXMke3B9CSgkaW5v dXQwLCRybmRrZXkxKSI7CisrICAgICYkbW92ZWtleQkJKCRybmRrZXkwLCZRV1AoMCwka2V5KSk7 CisrICAgIGV2YWwiJmFlcyR7cH0JKCRpbm91dDEsJHJuZGtleTEpIjsKKysgICAgZXZhbCImYWVz JHtwfQkoJGlub3V0Miwkcm5ka2V5MSkiOworKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0 MCwkcm5ka2V5MCkiOworKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0MSwkcm5ka2V5MCki OworKyAgICBldmFsIiZhZXMke3B9bGFzdAkoJGlub3V0Miwkcm5ka2V5MCkiOworKyAgICAmcmV0 KCk7CisrICAgICZmdW5jdGlvbl9lbmRfQigiX2Flc25pXyR7cH1yeXB0MyIpOworK30KKysKKysj IDR4IGludGVybGVhdmUgaXMgaW1wbGVtZW50ZWQgdG8gaW1wcm92ZSBzbWFsbCBibG9jayBwZXJm b3JtYW5jZSwKKysjIG1vc3Qgbm90YWJseSBbYW5kIG5hdHVyYWxseV0gNCBibG9jayBieSB+MzAl LiBPbmUgY2FuIGFyZ3VlIHRoYXQgb25lCisrIyBzaG91bGQgaGF2ZSBpbXBsZW1lbnRlZCA1eCBh cyB3ZWxsLCBidXQgaW1wcm92ZW1lbnQgIHdvdWxkIGJlIDwyMCUsCisrIyBzbyBpdCdzIG5vdCB3 b3J0aCBpdC4uLgorK3N1YiBhZXNuaV9nZW5lcmF0ZTQKKyt7IG15ICRwPXNoaWZ0OworKworKyAg ICAmZnVuY3Rpb25fYmVnaW5fQigiX2Flc25pXyR7cH1yeXB0NCIpOworKwkmJG1vdmVrZXkJKCRy bmRrZXkwLCZRV1AoMCwka2V5KSk7CisrCSYkbW92ZWtleQkoJHJuZGtleTEsJlFXUCgxNiwka2V5 KSk7CisrCSZzaHIJCSgkcm91bmRzLDEpOworKwkmbGVhCQkoJGtleSwmRFdQKDMyLCRrZXkpKTsK KysJJnB4b3IJCSgkaW5vdXQwLCRybmRrZXkwKTsKKysJJnB4b3IJCSgkaW5vdXQxLCRybmRrZXkw KTsKKysJJnB4b3IJCSgkaW5vdXQyLCRybmRrZXkwKTsKKysJJnB4b3IJCSgkaW5vdXQzLCRybmRr ZXkwKTsKKysJJmptcAkJKCZsYWJlbCgiJHtwfTNfbG9vcCIpKTsKKysgICAgJnNldF9sYWJlbCgi JHtwfTNfbG9vcCIsMTYpOworKwlldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRybmRrZXkxKSI7Cisr CSYkbW92ZWtleQkoJHJuZGtleTAsJlFXUCgwLCRrZXkpKTsKKysJZXZhbCImYWVzJHtwfQkoJGlu b3V0MSwkcm5ka2V5MSkiOworKwkmZGVjCQkoJHJvdW5kcyk7CisrCWV2YWwiJmFlcyR7cH0JKCRp bm91dDIsJHJuZGtleTEpIjsKKysJZXZhbCImYWVzJHtwfQkoJGlub3V0Mywkcm5ka2V5MSkiOwor KwkmJG1vdmVrZXkJKCRybmRrZXkxLCZRV1AoMTYsJGtleSkpOworKwlldmFsIiZhZXMke3B9CSgk aW5vdXQwLCRybmRrZXkwKSI7CisrCSZsZWEJCSgka2V5LCZEV1AoMzIsJGtleSkpOworKwlldmFs IiZhZXMke3B9CSgkaW5vdXQxLCRybmRrZXkwKSI7CisrCWV2YWwiJmFlcyR7cH0JKCRpbm91dDIs JHJuZGtleTApIjsKKysJZXZhbCImYWVzJHtwfQkoJGlub3V0Mywkcm5ka2V5MCkiOworKwkmam56 CQkoJmxhYmVsKCIke3B9M19sb29wIikpOworKyAgICBldmFsIiZhZXMke3B9CSgkaW5vdXQwLCRy bmRrZXkxKSI7CisrICAgICYkbW92ZWtleQkJKCRybmRrZXkwLCZRV1AoMCwka2V5KSk7CisrICAg IGV2YWwiJmFlcyR7cH0JKCRpbm91dDEsJHJuZGtleTEpIjsKKysgICAgZXZhbCImYWVzJHtwfQko JGlub3V0Miwkcm5ka2V5MSkiOworKyAgICBldmFsIiZhZXMke3B9CSgkaW5vdXQzLCRybmRrZXkx KSI7CisrICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQwLCRybmRrZXkwKSI7CisrICAgIGV2 YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQxLCRybmRrZXkwKSI7CisrICAgIGV2YWwiJmFlcyR7cH1s YXN0CSgkaW5vdXQyLCRybmRrZXkwKSI7CisrICAgIGV2YWwiJmFlcyR7cH1sYXN0CSgkaW5vdXQz LCRybmRrZXkwKSI7CisrICAgICZyZXQoKTsKKysgICAgJmZ1bmN0aW9uX2VuZF9CKCJfYWVzbmlf JHtwfXJ5cHQ0Iik7CisrfQorKyZhZXNuaV9nZW5lcmF0ZTMoImVuYyIpIGlmICgkUFJFRklYIGVx ICJhZXNuaSIpOworKyZhZXNuaV9nZW5lcmF0ZTMoImRlYyIpOworKyZhZXNuaV9nZW5lcmF0ZTQo ImVuYyIpIGlmICgkUFJFRklYIGVxICJhZXNuaSIpOworKyZhZXNuaV9nZW5lcmF0ZTQoImRlYyIp OworKworK2lmICgkUFJFRklYIGVxICJhZXNuaSIpIHsKKysjIHZvaWQgYWVzbmlfZWNiX2VuY3J5 cHQgKGNvbnN0IHZvaWQgKmluLCB2b2lkICpvdXQsCisrIyAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisrIyAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgZW5jKTsKKysmZnVuY3Rpb25fYmVnaW4oImFlc25pX2VjYl9lbmNyeXB0Iik7 CisrCSZtb3YJKCRpbnAsJndwYXJhbSgwKSk7CisrCSZtb3YJKCRvdXQsJndwYXJhbSgxKSk7Cisr CSZtb3YJKCRsZW4sJndwYXJhbSgyKSk7CisrCSZtb3YJKCRrZXksJndwYXJhbSgzKSk7CisrCSZt b3YJKCRyb3VuZHMsJndwYXJhbSg0KSk7CisrCSZjbXAJKCRsZW4sMTYpOworKwkmamIJKCZsYWJl bCgiZWNiX3JldCIpKTsKKysJJmFuZAkoJGxlbiwtMTYpOworKwkmdGVzdAkoJHJvdW5kcywkcm91 bmRzKQorKwkmbW92CSgkcm91bmRzLCZEV1AoMjQwLCRrZXkpKTsKKysJJm1vdgkoJGtleV8sJGtl eSk7CQkjIGJhY2t1cCAka2V5CisrCSZtb3YJKCRyb3VuZHNfLCRyb3VuZHMpOwkjIGJhY2t1cCAk cm91bmRzCisrCSZqegkoJmxhYmVsKCJlY2JfZGVjcnlwdCIpKTsKKysKKysJJnN1YgkoJGxlbiww eDQwKTsKKysJJmpiZQkoJmxhYmVsKCJlY2JfZW5jX3RhaWwiKSk7CisrCSZqbXAJKCZsYWJlbCgi ZWNiX2VuY19sb29wMyIpKTsKKysKKysmc2V0X2xhYmVsKCJlY2JfZW5jX2xvb3AzIiwxNik7Cisr CSZtb3Z1cHMJKCRpbm91dDAsJlFXUCgwLCRpbnApKTsKKysJJm1vdnVwcwkoJGlub3V0MSwmUVdQ KDB4MTAsJGlucCkpOworKwkmbW92dXBzCSgkaW5vdXQyLCZRV1AoMHgyMCwkaW5wKSk7CisrCSZj YWxsCSgiX2Flc25pX2VuY3J5cHQzIik7CisrCSZzdWIJKCRsZW4sMHgzMCk7CisrCSZsZWEJKCRp bnAsJkRXUCgweDMwLCRpbnApKTsKKysJJmxlYQkoJG91dCwmRFdQKDB4MzAsJG91dCkpOworKwkm bW92dXBzCSgmUVdQKC0weDMwLCRvdXQpLCRpbm91dDApOworKwkmbW92CSgka2V5LCRrZXlfKTsJ CSMgcmVzdG9yZSAka2V5CisrCSZtb3Z1cHMJKCZRV1AoLTB4MjAsJG91dCksJGlub3V0MSk7Cisr CSZtb3YJKCRyb3VuZHMsJHJvdW5kc18pOwkjIHJlc3RvcmUgJHJvdW5kcworKwkmbW92dXBzCSgm UVdQKC0weDEwLCRvdXQpLCRpbm91dDIpOworKwkmamEJKCZsYWJlbCgiZWNiX2VuY19sb29wMyIp KTsKKysKKysmc2V0X2xhYmVsKCJlY2JfZW5jX3RhaWwiKTsKKysJJmFkZAkoJGxlbiwweDQwKTsK KysJJmp6CSgmbGFiZWwoImVjYl9yZXQiKSk7CisrCisrCSZjbXAJKCRsZW4sMHgxMCk7CisrCSZt b3Z1cHMJKCRpbm91dDAsJlFXUCgwLCRpbnApKTsKKysJJmplCSgmbGFiZWwoImVjYl9lbmNfb25l IikpOworKwkmY21wCSgkbGVuLDB4MjApOworKwkmbW92dXBzCSgkaW5vdXQxLCZRV1AoMHgxMCwk aW5wKSk7CisrCSZqZQkoJmxhYmVsKCJlY2JfZW5jX3R3byIpKTsKKysJJmNtcAkoJGxlbiwweDMw KTsKKysJJm1vdnVwcwkoJGlub3V0MiwmUVdQKDB4MjAsJGlucCkpOworKwkmamUJKCZsYWJlbCgi ZWNiX2VuY190aHJlZSIpKTsKKysJJm1vdnVwcwkoJGlub3V0MywmUVdQKDB4MzAsJGlucCkpOwor KwkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0NCIpOworKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlu b3V0MCk7CisrCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKKysJJm1vdnVwcwko JlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOworKwkmbW92dXBzCSgmUVdQKDB4MzAsJG91dCksJGlu b3V0Myk7CisrCWptcAkoJmxhYmVsKCJlY2JfcmV0IikpOworKworKyZzZXRfbGFiZWwoImVjYl9l bmNfb25lIiwxNik7CisrCSZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJlbmMiKTsJIyAmY2FsbAko Il9hZXNuaV9lbmNyeXB0MSIpOworKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7Cisr CSZqbXAJKCZsYWJlbCgiZWNiX3JldCIpKTsKKysKKysmc2V0X2xhYmVsKCJlY2JfZW5jX3R3byIs MTYpOworKwkmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MyIpOworKwkmbW92dXBzCSgmUVdQKDAsJG91 dCksJGlub3V0MCk7CisrCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKKysJJmpt cAkoJmxhYmVsKCJlY2JfcmV0IikpOworKworKyZzZXRfbGFiZWwoImVjYl9lbmNfdGhyZWUiLDE2 KTsKKysJJmNhbGwJKCJfYWVzbmlfZW5jcnlwdDMiKTsKKysJJm1vdnVwcwkoJlFXUCgwLCRvdXQp LCRpbm91dDApOworKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7CisrCSZtb3Z1 cHMJKCZRV1AoMHgyMCwkb3V0KSwkaW5vdXQyKTsKKysJJmptcAkoJmxhYmVsKCJlY2JfcmV0Iikp OworKworKyZzZXRfbGFiZWwoImVjYl9kZWNyeXB0IiwxNik7CisrCSZzdWIJKCRsZW4sMHg0MCk7 CisrCSZqYmUJKCZsYWJlbCgiZWNiX2RlY190YWlsIikpOworKwkmam1wCSgmbGFiZWwoImVjYl9k ZWNfbG9vcDMiKSk7CisrCisrJnNldF9sYWJlbCgiZWNiX2RlY19sb29wMyIsMTYpOworKwkmbW92 dXBzCSgkaW5vdXQwLCZRV1AoMCwkaW5wKSk7CisrCSZtb3Z1cHMJKCRpbm91dDEsJlFXUCgweDEw LCRpbnApKTsKKysJJm1vdnVwcwkoJGlub3V0MiwmUVdQKDB4MjAsJGlucCkpOworKwkmY2FsbAko Il9hZXNuaV9kZWNyeXB0MyIpOworKwkmc3ViCSgkbGVuLDB4MzApOworKwkmbGVhCSgkaW5wLCZE V1AoMHgzMCwkaW5wKSk7CisrCSZsZWEJKCRvdXQsJkRXUCgweDMwLCRvdXQpKTsKKysJJm1vdnVw cwkoJlFXUCgtMHgzMCwkb3V0KSwkaW5vdXQwKTsKKysJJm1vdgkoJGtleSwka2V5Xyk7CQkjIHJl c3RvcmUgJGtleQorKwkmbW92dXBzCSgmUVdQKC0weDIwLCRvdXQpLCRpbm91dDEpOworKwkmbW92 CSgkcm91bmRzLCRyb3VuZHNfKTsJIyByZXN0b3JlICRyb3VuZHMKKysJJm1vdnVwcwkoJlFXUCgt MHgxMCwkb3V0KSwkaW5vdXQyKTsKKysJJmphCSgmbGFiZWwoImVjYl9kZWNfbG9vcDMiKSk7Cisr CisrJnNldF9sYWJlbCgiZWNiX2RlY190YWlsIik7CisrCSZhZGQJKCRsZW4sMHg0MCk7CisrCSZq egkoJmxhYmVsKCJlY2JfcmV0IikpOworKworKwkmY21wCSgkbGVuLDB4MTApOworKwkmbW92dXBz CSgkaW5vdXQwLCZRV1AoMCwkaW5wKSk7CisrCSZqZQkoJmxhYmVsKCJlY2JfZGVjX29uZSIpKTsK KysJJmNtcAkoJGxlbiwweDIwKTsKKysJJm1vdnVwcwkoJGlub3V0MSwmUVdQKDB4MTAsJGlucCkp OworKwkmamUJKCZsYWJlbCgiZWNiX2RlY190d28iKSk7CisrCSZjbXAJKCRsZW4sMHgzMCk7Cisr CSZtb3Z1cHMJKCRpbm91dDIsJlFXUCgweDIwLCRpbnApKTsKKysJJmplCSgmbGFiZWwoImVjYl9k ZWNfdGhyZWUiKSk7CisrCSZtb3Z1cHMJKCRpbm91dDMsJlFXUCgweDMwLCRpbnApKTsKKysJJmNh bGwJKCJfYWVzbmlfZGVjcnlwdDQiKTsKKysJJm1vdnVwcwkoJlFXUCgwLCRvdXQpLCRpbm91dDAp OworKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7CisrCSZtb3Z1cHMJKCZRV1Ao MHgyMCwkb3V0KSwkaW5vdXQyKTsKKysJJm1vdnVwcwkoJlFXUCgweDMwLCRvdXQpLCRpbm91dDMp OworKwkmam1wCSgmbGFiZWwoImVjYl9yZXQiKSk7CisrCisrJnNldF9sYWJlbCgiZWNiX2RlY19v bmUiLDE2KTsKKysJJmFlc25pX2lubGluZV9nZW5lcmF0ZTEoImRlYyIpOwkjICZjYWxsCSgiX2Fl c25pX2RlY3J5cHQzIik7CisrCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKKysJJmpt cAkoJmxhYmVsKCJlY2JfcmV0IikpOworKworKyZzZXRfbGFiZWwoImVjYl9kZWNfdHdvIiwxNik7 CisrCSZjYWxsCSgiX2Flc25pX2RlY3J5cHQzIik7CisrCSZtb3Z1cHMJKCZRV1AoMCwkb3V0KSwk aW5vdXQwKTsKKysJJm1vdnVwcwkoJlFXUCgweDEwLCRvdXQpLCRpbm91dDEpOworKwkmam1wCSgm bGFiZWwoImVjYl9yZXQiKSk7CisrCisrJnNldF9sYWJlbCgiZWNiX2RlY190aHJlZSIsMTYpOwor KwkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0MyIpOworKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlu b3V0MCk7CisrCSZtb3Z1cHMJKCZRV1AoMHgxMCwkb3V0KSwkaW5vdXQxKTsKKysJJm1vdnVwcwko JlFXUCgweDIwLCRvdXQpLCRpbm91dDIpOworKworKyZzZXRfbGFiZWwoImVjYl9yZXQiKTsKKysm ZnVuY3Rpb25fZW5kKCJhZXNuaV9lY2JfZW5jcnlwdCIpOworK30KKysKKysjIHZvaWQgJFBSRUZJ WF9jYmNfZW5jcnlwdCAoY29uc3Qgdm9pZCAqaW5wLCB2b2lkICpvdXQsCisrIyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKysjICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqaXZwLGNvbnN0IGludCBlbmMp OworKyZmdW5jdGlvbl9iZWdpbigiJHtQUkVGSVh9X2NiY19lbmNyeXB0Iik7CisrCSZtb3YJKCRp bnAsJndwYXJhbSgwKSk7CisrCSZtb3YJKCRvdXQsJndwYXJhbSgxKSk7CisrCSZtb3YJKCRsZW4s JndwYXJhbSgyKSk7CisrCSZtb3YJKCRrZXksJndwYXJhbSgzKSk7CisrCSZ0ZXN0CSgkbGVuLCRs ZW4pOworKwkmbW92CSgka2V5Xywmd3BhcmFtKDQpKTsKKysJJmp6CSgmbGFiZWwoImNiY19yZXQi KSk7CisrCisrCSZjbXAJKCZ3cGFyYW0oNSksMCk7CisrCSZtb3Z1cHMJKCRpdmVjLCZRV1AoMCwk a2V5XykpOwkjIGxvYWQgSVYKKysJJm1vdgkoJHJvdW5kcywmRFdQKDI0MCwka2V5KSk7CisrCSZt b3YJKCRrZXlfLCRrZXkpOwkJIyBiYWNrdXAgJGtleQorKwkmbW92CSgkcm91bmRzXywkcm91bmRz KTsJIyBiYWNrdXAgJHJvdW5kcworKwkmamUJKCZsYWJlbCgiY2JjX2RlY3J5cHQiKSk7CisrCisr CSZtb3ZhcHMJKCRpbm91dDAsJGl2ZWMpOworKwkmY21wCSgkbGVuLDE2KTsKKysJJmpiCSgmbGFi ZWwoImNiY19lbmNfdGFpbCIpKTsKKysJJnN1YgkoJGxlbiwxNik7CisrCSZqbXAJKCZsYWJlbCgi Y2JjX2VuY19sb29wIikpOworKworKyZzZXRfbGFiZWwoImNiY19lbmNfbG9vcCIsMTYpOworKwkm bW92dXBzCSgkaXZlYywmUVdQKDAsJGlucCkpOworKwkmbGVhCSgkaW5wLCZEV1AoMTYsJGlucCkp OworKwkmcHhvcgkoJGlub3V0MCwkaXZlYyk7CisrCSZhZXNuaV9pbmxpbmVfZ2VuZXJhdGUxKCJl bmMiKTsJIyAmY2FsbAkoIl9hZXNuaV9lbmNyeXB0MyIpOworKwkmc3ViCSgkbGVuLDE2KTsKKysJ JmxlYQkoJG91dCwmRFdQKDE2LCRvdXQpKTsKKysJJm1vdgkoJHJvdW5kcywkcm91bmRzXyk7CSMg cmVzdG9yZSAkcm91bmRzCisrCSZtb3YJKCRrZXksJGtleV8pOwkJIyByZXN0b3JlICRrZXkKKysJ Jm1vdnVwcwkoJlFXUCgtMTYsJG91dCksJGlub3V0MCk7CisrCSZqbmMJKCZsYWJlbCgiY2JjX2Vu Y19sb29wIikpOworKwkmYWRkCSgkbGVuLDE2KTsKKysJJmpuegkoJmxhYmVsKCJjYmNfZW5jX3Rh aWwiKSk7CisrCSZtb3ZhcHMJKCRpdmVjLCRpbm91dDApOworKwkmam1wCSgmbGFiZWwoImNiY19y ZXQiKSk7CisrCisrJnNldF9sYWJlbCgiY2JjX2VuY190YWlsIik7CisrCSZtb3YJKCJlY3giLCRs ZW4pOwkJIyB6YXBzICRyb3VuZHMKKysJJmRhdGFfd29yZCgweEE0RjNGNjg5KTsJCSMgcmVwIG1v dnNiCisrCSZtb3YJKCJlY3giLDE2KTsJCSMgemVybyB0YWlsCisrCSZzdWIJKCJlY3giLCRsZW4p OworKwkmeG9yCSgiZWF4IiwiZWF4Iik7CQkjIHphcHMgJGxlbgorKwkmZGF0YV93b3JkKDB4QUFG M0Y2ODkpOwkJIyByZXAgc3Rvc2IKKysJJmxlYQkoJG91dCwmRFdQKC0xNiwkb3V0KSk7CSMgcmV3 aW5kICRvdXQgYnkgMSBibG9jaworKwkmbW92CSgkcm91bmRzLCRyb3VuZHNfKTsJIyByZXN0b3Jl ICRyb3VuZHMKKysJJm1vdgkoJGlucCwkb3V0KTsJCSMgJGlucCBhbmQgJG91dCBhcmUgdGhlIHNh bWUKKysJJm1vdgkoJGtleSwka2V5Xyk7CQkjIHJlc3RvcmUgJGtleQorKwkmam1wCSgmbGFiZWwo ImNiY19lbmNfbG9vcCIpKTsKKysKKysmc2V0X2xhYmVsKCJjYmNfZGVjcnlwdCIsMTYpOworKwkm c3ViCSgkbGVuLDB4NDApOworKwkmamJlCSgmbGFiZWwoImNiY19kZWNfdGFpbCIpKTsKKysJJmpt cAkoJmxhYmVsKCJjYmNfZGVjX2xvb3AzIikpOworKworKyZzZXRfbGFiZWwoImNiY19kZWNfbG9v cDMiLDE2KTsKKysJJm1vdnVwcwkoJGlub3V0MCwmUVdQKDAsJGlucCkpOworKwkmbW92dXBzCSgk aW5vdXQxLCZRV1AoMHgxMCwkaW5wKSk7CisrCSZtb3Z1cHMJKCRpbm91dDIsJlFXUCgweDIwLCRp bnApKTsKKysJJm1vdmFwcwkoJGluMCwkaW5vdXQwKTsKKysJJm1vdmFwcwkoJGluMSwkaW5vdXQx KTsKKysJJmNhbGwJKCJfYWVzbmlfZGVjcnlwdDMiKTsKKysJJnN1YgkoJGxlbiwweDMwKTsKKysJ JmxlYQkoJGlucCwmRFdQKDB4MzAsJGlucCkpOworKwkmbGVhCSgkb3V0LCZEV1AoMHgzMCwkb3V0 KSk7CisrCSZweG9yCSgkaW5vdXQwLCRpdmVjKTsKKysJJnB4b3IJKCRpbm91dDEsJGluMCk7Cisr CSZtb3Z1cHMJKCRpdmVjLCZRV1AoLTB4MTAsJGlucCkpOworKwkmcHhvcgkoJGlub3V0MiwkaW4x KTsKKysJJm1vdnVwcwkoJlFXUCgtMHgzMCwkb3V0KSwkaW5vdXQwKTsKKysJJm1vdgkoJHJvdW5k cywkcm91bmRzXykJIyByZXN0b3JlICRyb3VuZHMKKysJJm1vdnVwcwkoJlFXUCgtMHgyMCwkb3V0 KSwkaW5vdXQxKTsKKysJJm1vdgkoJGtleSwka2V5Xyk7CQkjIHJlc3RvcmUgJGtleQorKwkmbW92 dXBzCSgmUVdQKC0weDEwLCRvdXQpLCRpbm91dDIpOworKwkmamEJKCZsYWJlbCgiY2JjX2RlY19s b29wMyIpKTsKKysKKysmc2V0X2xhYmVsKCJjYmNfZGVjX3RhaWwiKTsKKysJJmFkZAkoJGxlbiww eDQwKTsKKysJJmp6CSgmbGFiZWwoImNiY19yZXQiKSk7CisrCisrCSZtb3Z1cHMJKCRpbm91dDAs JlFXUCgwLCRpbnApKTsKKysJJmNtcAkoJGxlbiwweDEwKTsKKysJJm1vdmFwcwkoJGluMCwkaW5v dXQwKTsKKysJJmpiZQkoJmxhYmVsKCJjYmNfZGVjX29uZSIpKTsKKysJJm1vdnVwcwkoJGlub3V0 MSwmUVdQKDB4MTAsJGlucCkpOworKwkmY21wCSgkbGVuLDB4MjApOworKwkmbW92YXBzCSgkaW4x LCRpbm91dDEpOworKwkmamJlCSgmbGFiZWwoImNiY19kZWNfdHdvIikpOworKwkmbW92dXBzCSgk aW5vdXQyLCZRV1AoMHgyMCwkaW5wKSk7CisrCSZjbXAJKCRsZW4sMHgzMCk7CisrCSZqYmUJKCZs YWJlbCgiY2JjX2RlY190aHJlZSIpKTsKKysJJm1vdnVwcwkoJGlub3V0MywmUVdQKDB4MzAsJGlu cCkpOworKwkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0NCIpOworKwkmbW92dXBzCSgkcm5ka2V5MCwm UVdQKDB4MTAsJGlucCkpOworKwkmbW92dXBzCSgkcm5ka2V5MSwmUVdQKDB4MjAsJGlucCkpOwor KwkmcHhvcgkoJGlub3V0MCwkaXZlYyk7CisrCSZweG9yCSgkaW5vdXQxLCRpbjApOworKwkmbW92 dXBzCSgkaXZlYywmUVdQKDB4MzAsJGlucCkpOworKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlu b3V0MCk7CisrCSZweG9yCSgkaW5vdXQyLCRybmRrZXkwKTsKKysJJnB4b3IJKCRpbm91dDMsJHJu ZGtleTEpOworKwkmbW92dXBzCSgmUVdQKDB4MTAsJG91dCksJGlub3V0MSk7CisrCSZtb3Z1cHMJ KCZRV1AoMHgyMCwkb3V0KSwkaW5vdXQyKTsKKysJJm1vdmFwcwkoJGlub3V0MCwkaW5vdXQzKTsK KysJJmxlYQkoJG91dCwmRFdQKDB4MzAsJG91dCkpOworKwkmam1wCSgmbGFiZWwoImNiY19kZWNf dGFpbF9jb2xsZWN0ZWQiKSk7CisrCisrJnNldF9sYWJlbCgiY2JjX2RlY19vbmUiKTsKKysJJmFl c25pX2lubGluZV9nZW5lcmF0ZTEoImRlYyIpOwkjICZjYWxsCSgiX2Flc25pX2RlY3J5cHQzIik7 CisrCSZweG9yCSgkaW5vdXQwLCRpdmVjKTsKKysJJm1vdmFwcwkoJGl2ZWMsJGluMCk7CisrCSZq bXAJKCZsYWJlbCgiY2JjX2RlY190YWlsX2NvbGxlY3RlZCIpKTsKKysKKysmc2V0X2xhYmVsKCJj YmNfZGVjX3R3byIpOworKwkmY2FsbAkoIl9hZXNuaV9kZWNyeXB0MyIpOworKwkmcHhvcgkoJGlu b3V0MCwkaXZlYyk7CisrCSZweG9yCSgkaW5vdXQxLCRpbjApOworKwkmbW92dXBzCSgmUVdQKDAs JG91dCksJGlub3V0MCk7CisrCSZtb3ZhcHMJKCRpbm91dDAsJGlub3V0MSk7CisrCSZtb3ZhcHMJ KCRpdmVjLCRpbjEpOworKwkmbGVhCSgkb3V0LCZEV1AoMHgxMCwkb3V0KSk7CisrCSZqbXAJKCZs YWJlbCgiY2JjX2RlY190YWlsX2NvbGxlY3RlZCIpKTsKKysKKysmc2V0X2xhYmVsKCJjYmNfZGVj X3RocmVlIik7CisrCSZjYWxsCSgiX2Flc25pX2RlY3J5cHQzIik7CisrCSZweG9yCSgkaW5vdXQw LCRpdmVjKTsKKysJJnB4b3IJKCRpbm91dDEsJGluMCk7CisrCSZweG9yCSgkaW5vdXQyLCRpbjEp OworKwkmbW92dXBzCSgmUVdQKDAsJG91dCksJGlub3V0MCk7CisrCSZtb3Z1cHMJKCZRV1AoMHgx MCwkb3V0KSwkaW5vdXQxKTsKKysJJm1vdmFwcwkoJGlub3V0MCwkaW5vdXQyKTsKKysJJm1vdnVw cwkoJGl2ZWMsJlFXUCgweDIwLCRpbnApKTsKKysJJmxlYQkoJG91dCwmRFdQKDB4MjAsJG91dCkp OworKworKyZzZXRfbGFiZWwoImNiY19kZWNfdGFpbF9jb2xsZWN0ZWQiKTsKKysJJmFuZAkoJGxl biwxNSk7CisrCSZqbnoJKCZsYWJlbCgiY2JjX2RlY190YWlsX3BhcnRpYWwiKSk7CisrCSZtb3Z1 cHMJKCZRV1AoMCwkb3V0KSwkaW5vdXQwKTsKKysJJmptcAkoJmxhYmVsKCJjYmNfcmV0IikpOwor KworKyZzZXRfbGFiZWwoImNiY19kZWNfdGFpbF9wYXJ0aWFsIik7CisrCSZtb3YJKCRrZXlfLCJl c3AiKTsKKysJJnN1YgkoImVzcCIsMTYpOworKwkmYW5kCSgiZXNwIiwtMTYpOworKwkmbW92YXBz CSgmUVdQKDAsImVzcCIpLCRpbm91dDApOworKwkmbW92CSgkaW5wLCJlc3AiKTsKKysJJm1vdgko ImVjeCIsJGxlbik7CisrCSZkYXRhX3dvcmQoMHhBNEYzRjY4OSk7CQkjIHJlcCBtb3ZzYgorKwkm bW92CSgiZXNwIiwka2V5Xyk7CisrCisrJnNldF9sYWJlbCgiY2JjX3JldCIpOworKwkmbW92CSgk a2V5Xywmd3BhcmFtKDQpKTsKKysJJm1vdnVwcwkoJlFXUCgwLCRrZXlfKSwkaXZlYyk7CSMgb3V0 cHV0IElWCisrJmZ1bmN0aW9uX2VuZCgiJHtQUkVGSVh9X2NiY19lbmNyeXB0Iik7CisrCisrIyBN ZWNoYW5pY2FsIHBvcnQgZnJvbSBhZXNuaS14ODZfNjQucGwuCisrIworKyMgX2Flc25pX3NldF9l bmNyeXB0X2tleSBpcyBwcml2YXRlIGludGVyZmFjZSwKKysjIGlucHV0OgorKyMJImVheCIJY29u c3QgdW5zaWduZWQgY2hhciAqdXNlcktleQorKyMJJHJvdW5kcwlpbnQgYml0cworKyMJJGtleQlB RVNfS0VZICprZXkKKysjIG91dHB1dDoKKysjCSJlYXgiCXJldHVybiBjb2RlCisrIwkkcm91bmQJ cm91bmRzCisrCisrJmZ1bmN0aW9uX2JlZ2luX0IoIl9hZXNuaV9zZXRfZW5jcnlwdF9rZXkiKTsK KysJJnRlc3QJKCJlYXgiLCJlYXgiKTsKKysJJmp6CSgmbGFiZWwoImJhZF9wb2ludGVyIikpOwor KwkmdGVzdAkoJGtleSwka2V5KTsKKysJJmp6CSgmbGFiZWwoImJhZF9wb2ludGVyIikpOworKwor KwkmbW92dXBzCSgieG1tMCIsJlFXUCgwLCJlYXgiKSk7CSMgcHVsbCBmaXJzdCAxMjggYml0cyBv ZiAqdXNlcktleQorKwkmcHhvcgkoInhtbTQiLCJ4bW00Iik7CSMgbG93IGR3b3JkIG9mIHhtbTQg aXMgYXNzdW1lZCAwCisrCSZsZWEJKCRrZXksJkRXUCgxNiwka2V5KSk7CisrCSZjbXAJKCRyb3Vu ZHMsMjU2KTsKKysJJmplCSgmbGFiZWwoIjE0cm91bmRzIikpOworKwkmY21wCSgkcm91bmRzLDE5 Mik7CisrCSZqZQkoJmxhYmVsKCIxMnJvdW5kcyIpKTsKKysJJmNtcAkoJHJvdW5kcywxMjgpOwor Kwkmam5lCSgmbGFiZWwoImJhZF9rZXliaXRzIikpOworKworKyZzZXRfbGFiZWwoIjEwcm91bmRz IiwxNik7CisrCSZtb3YJCSgkcm91bmRzLDkpOworKwkmJG1vdmVrZXkJKCZRV1AoLTE2LCRrZXkp LCJ4bW0wIik7CSMgcm91bmQgMAorKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMCIsMHgw MSk7CQkjIHJvdW5kIDEKKysJJmNhbGwJCSgmbGFiZWwoImtleV8xMjhfY29sZCIpKTsKKysJJmFl c2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTAiLDB4Mik7CQkjIHJvdW5kIDIKKysJJmNhbGwJCSgm bGFiZWwoImtleV8xMjgiKSk7CisrCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDA0 KTsJCSMgcm91bmQgMworKwkmY2FsbAkJKCZsYWJlbCgia2V5XzEyOCIpKTsKKysJJmFlc2tleWdl bmFzc2lzdCgieG1tMSIsInhtbTAiLDB4MDgpOwkJIyByb3VuZCA0CisrCSZjYWxsCQkoJmxhYmVs KCJrZXlfMTI4IikpOworKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMCIsMHgxMCk7CQkj IHJvdW5kIDUKKysJJmNhbGwJCSgmbGFiZWwoImtleV8xMjgiKSk7CisrCSZhZXNrZXlnZW5hc3Np c3QoInhtbTEiLCJ4bW0wIiwweDIwKTsJCSMgcm91bmQgNgorKwkmY2FsbAkJKCZsYWJlbCgia2V5 XzEyOCIpKTsKKysJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTAiLDB4NDApOwkJIyByb3Vu ZCA3CisrCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTI4IikpOworKwkmYWVza2V5Z2VuYXNzaXN0KCJ4 bW0xIiwieG1tMCIsMHg4MCk7CQkjIHJvdW5kIDgKKysJJmNhbGwJCSgmbGFiZWwoImtleV8xMjgi KSk7CisrCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0wIiwweDFiKTsJCSMgcm91bmQgOQor KwkmY2FsbAkJKCZsYWJlbCgia2V5XzEyOCIpKTsKKysJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIs InhtbTAiLDB4MzYpOwkJIyByb3VuZCAxMAorKwkmY2FsbAkJKCZsYWJlbCgia2V5XzEyOCIpKTsK KysJJiRtb3Zla2V5CSgmUVdQKDAsJGtleSksInhtbTAiKTsKKysJJm1vdgkJKCZEV1AoODAsJGtl eSksJHJvdW5kcyk7CisrCSZ4b3IJCSgiZWF4IiwiZWF4Iik7CisrCSZyZXQoKTsKKysKKysmc2V0 X2xhYmVsKCJrZXlfMTI4IiwxNik7CisrCSYkbW92ZWtleQkoJlFXUCgwLCRrZXkpLCJ4bW0wIik7 CisrCSZsZWEJCSgka2V5LCZEV1AoMTYsJGtleSkpOworKyZzZXRfbGFiZWwoImtleV8xMjhfY29s ZCIpOworKwkmc2h1ZnBzCQkoInhtbTQiLCJ4bW0wIiwwYjAwMDEwMDAwKTsKKysJJnB4b3IJCSgi eG1tMCIsInhtbTQiKTsKKysJJnNodWZwcwkJKCJ4bW00IiwieG1tMCIsMGIxMDAwMTEwMCwpOwor KwkmcHhvcgkJKCJ4bW0wIiwieG1tNCIpOworKwkmcHNodWZkCQkoInhtbTEiLCJ4bW0xIiwwYjEx MTExMTExKTsJIyBjcml0aWNhbCBwYXRoCisrCSZweG9yCQkoInhtbTAiLCJ4bW0xIik7CisrCSZy ZXQoKTsKKysKKysmc2V0X2xhYmVsKCIxMnJvdW5kcyIsMTYpOworKwkmbW92cQkJKCJ4bW0yIiwm UVdQKDE2LCJlYXgiKSk7CSMgcmVtYWluaW5nIDEvMyBvZiAqdXNlcktleQorKwkmbW92CQkoJHJv dW5kcywxMSk7CisrCSYkbW92ZWtleQkoJlFXUCgtMTYsJGtleSksInhtbTAiKQkJIyByb3VuZCAw CisrCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDAxKTsJCSMgcm91bmQgMSwyCisr CSZjYWxsCQkoJmxhYmVsKCJrZXlfMTkyYV9jb2xkIikpOworKwkmYWVza2V5Z2VuYXNzaXN0KCJ4 bW0xIiwieG1tMiIsMHgwMik7CQkjIHJvdW5kIDIsMworKwkmY2FsbAkJKCZsYWJlbCgia2V5XzE5 MmIiKSk7CisrCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDA0KTsJCSMgcm91bmQg NCw1CisrCSZjYWxsCQkoJmxhYmVsKCJrZXlfMTkyYSIpKTsKKysJJmFlc2tleWdlbmFzc2lzdCgi eG1tMSIsInhtbTIiLDB4MDgpOwkJIyByb3VuZCA1LDYKKysJJmNhbGwJCSgmbGFiZWwoImtleV8x OTJiIikpOworKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMiIsMHgxMCk7CQkjIHJvdW5k IDcsOAorKwkmY2FsbAkJKCZsYWJlbCgia2V5XzE5MmEiKSk7CisrCSZhZXNrZXlnZW5hc3Npc3Qo InhtbTEiLCJ4bW0yIiwweDIwKTsJCSMgcm91bmQgOCw5CisrCSZjYWxsCQkoJmxhYmVsKCJrZXlf MTkyYiIpKTsKKysJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTIiLDB4NDApOwkJIyByb3Vu ZCAxMCwxMQorKwkmY2FsbAkJKCZsYWJlbCgia2V5XzE5MmEiKSk7CisrCSZhZXNrZXlnZW5hc3Np c3QoInhtbTEiLCJ4bW0yIiwweDgwKTsJCSMgcm91bmQgMTEsMTIKKysJJmNhbGwJCSgmbGFiZWwo ImtleV8xOTJiIikpOworKwkmJG1vdmVrZXkJKCZRV1AoMCwka2V5KSwieG1tMCIpOworKwkmbW92 CQkoJkRXUCg0OCwka2V5KSwkcm91bmRzKTsKKysJJnhvcgkJKCJlYXgiLCJlYXgiKTsKKysJJnJl dCgpOworKworKyZzZXRfbGFiZWwoImtleV8xOTJhIiwxNik7CisrCSYkbW92ZWtleQkoJlFXUCgw LCRrZXkpLCJ4bW0wIik7CisrCSZsZWEJCSgka2V5LCZEV1AoMTYsJGtleSkpOworKyZzZXRfbGFi ZWwoImtleV8xOTJhX2NvbGQiLDE2KTsKKysJJm1vdmFwcwkJKCJ4bW01IiwieG1tMiIpOworKyZz ZXRfbGFiZWwoImtleV8xOTJiX3dhcm0iKTsKKysJJnNodWZwcwkJKCJ4bW00IiwieG1tMCIsMGIw MDAxMDAwMCk7CisrCSZtb3ZhcHMJCSgieG1tMyIsInhtbTIiKTsKKysJJnB4b3IJCSgieG1tMCIs InhtbTQiKTsKKysJJnNodWZwcwkJKCJ4bW00IiwieG1tMCIsMGIxMDAwMTEwMCk7CisrCSZwc2xs ZHEJCSgieG1tMyIsNCk7CisrCSZweG9yCQkoInhtbTAiLCJ4bW00Iik7CisrCSZwc2h1ZmQJCSgi eG1tMSIsInhtbTEiLDBiMDEwMTAxMDEpOwkjIGNyaXRpY2FsIHBhdGgKKysJJnB4b3IJCSgieG1t MiIsInhtbTMiKTsKKysJJnB4b3IJCSgieG1tMCIsInhtbTEiKTsKKysJJnBzaHVmZAkJKCJ4bW0z IiwieG1tMCIsMGIxMTExMTExMSk7CisrCSZweG9yCQkoInhtbTIiLCJ4bW0zIik7CisrCSZyZXQo KTsKKysKKysmc2V0X2xhYmVsKCJrZXlfMTkyYiIsMTYpOworKwkmbW92YXBzCQkoInhtbTMiLCJ4 bW0wIik7CisrCSZzaHVmcHMJCSgieG1tNSIsInhtbTAiLDBiMDEwMDAxMDApOworKwkmJG1vdmVr ZXkJKCZRV1AoMCwka2V5KSwieG1tNSIpOworKwkmc2h1ZnBzCQkoInhtbTMiLCJ4bW0yIiwwYjAx MDAxMTEwKTsKKysJJiRtb3Zla2V5CSgmUVdQKDE2LCRrZXkpLCJ4bW0zIik7CisrCSZsZWEJCSgk a2V5LCZEV1AoMzIsJGtleSkpOworKwkmam1wCQkoJmxhYmVsKCJrZXlfMTkyYl93YXJtIikpOwor KworKyZzZXRfbGFiZWwoIjE0cm91bmRzIiwxNik7CisrCSZtb3Z1cHMJCSgieG1tMiIsJlFXUCgx NiwiZWF4IikpOwkjIHJlbWFpbmluZyBoYWxmIG9mICp1c2VyS2V5CisrCSZtb3YJCSgkcm91bmRz LDEzKTsKKysJJmxlYQkJKCRrZXksJkRXUCgxNiwka2V5KSk7CisrCSYkbW92ZWtleQkoJlFXUCgt MzIsJGtleSksInhtbTAiKTsJIyByb3VuZCAwCisrCSYkbW92ZWtleQkoJlFXUCgtMTYsJGtleSks InhtbTIiKTsJIyByb3VuZCAxCisrCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDAx KTsJCSMgcm91bmQgMgorKwkmY2FsbAkJKCZsYWJlbCgia2V5XzI1NmFfY29sZCIpKTsKKysJJmFl c2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTAiLDB4MDEpOwkJIyByb3VuZCAzCisrCSZjYWxsCQko JmxhYmVsKCJrZXlfMjU2YiIpKTsKKysJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTIiLDB4 MDIpOwkJIyByb3VuZCA0CisrCSZjYWxsCQkoJmxhYmVsKCJrZXlfMjU2YSIpKTsKKysJJmFlc2tl eWdlbmFzc2lzdCgieG1tMSIsInhtbTAiLDB4MDIpOwkJIyByb3VuZCA1CisrCSZjYWxsCQkoJmxh YmVsKCJrZXlfMjU2YiIpKTsKKysJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTIiLDB4MDQp OwkJIyByb3VuZCA2CisrCSZjYWxsCQkoJmxhYmVsKCJrZXlfMjU2YSIpKTsKKysJJmFlc2tleWdl bmFzc2lzdCgieG1tMSIsInhtbTAiLDB4MDQpOwkJIyByb3VuZCA3CisrCSZjYWxsCQkoJmxhYmVs KCJrZXlfMjU2YiIpKTsKKysJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTIiLDB4MDgpOwkJ IyByb3VuZCA4CisrCSZjYWxsCQkoJmxhYmVsKCJrZXlfMjU2YSIpKTsKKysJJmFlc2tleWdlbmFz c2lzdCgieG1tMSIsInhtbTAiLDB4MDgpOwkJIyByb3VuZCA5CisrCSZjYWxsCQkoJmxhYmVsKCJr ZXlfMjU2YiIpKTsKKysJJmFlc2tleWdlbmFzc2lzdCgieG1tMSIsInhtbTIiLDB4MTApOwkJIyBy b3VuZCAxMAorKwkmY2FsbAkJKCZsYWJlbCgia2V5XzI1NmEiKSk7CisrCSZhZXNrZXlnZW5hc3Np c3QoInhtbTEiLCJ4bW0wIiwweDEwKTsJCSMgcm91bmQgMTEKKysJJmNhbGwJCSgmbGFiZWwoImtl eV8yNTZiIikpOworKwkmYWVza2V5Z2VuYXNzaXN0KCJ4bW0xIiwieG1tMiIsMHgyMCk7CQkjIHJv dW5kIDEyCisrCSZjYWxsCQkoJmxhYmVsKCJrZXlfMjU2YSIpKTsKKysJJmFlc2tleWdlbmFzc2lz dCgieG1tMSIsInhtbTAiLDB4MjApOwkJIyByb3VuZCAxMworKwkmY2FsbAkJKCZsYWJlbCgia2V5 XzI1NmIiKSk7CisrCSZhZXNrZXlnZW5hc3Npc3QoInhtbTEiLCJ4bW0yIiwweDQwKTsJCSMgcm91 bmQgMTQKKysJJmNhbGwJCSgmbGFiZWwoImtleV8yNTZhIikpOworKwkmJG1vdmVrZXkJKCZRV1Ao MCwka2V5KSwieG1tMCIpOworKwkmbW92CQkoJkRXUCgxNiwka2V5KSwkcm91bmRzKTsKKysJJnhv cgkJKCJlYXgiLCJlYXgiKTsKKysJJnJldCgpOworKworKyZzZXRfbGFiZWwoImtleV8yNTZhIiwx Nik7CisrCSYkbW92ZWtleQkoJlFXUCgwLCRrZXkpLCJ4bW0yIik7CisrCSZsZWEJCSgka2V5LCZE V1AoMTYsJGtleSkpOworKyZzZXRfbGFiZWwoImtleV8yNTZhX2NvbGQiKTsKKysJJnNodWZwcwkJ KCJ4bW00IiwieG1tMCIsMGIwMDAxMDAwMCk7CisrCSZweG9yCQkoInhtbTAiLCJ4bW00Iik7Cisr CSZzaHVmcHMJCSgieG1tNCIsInhtbTAiLDBiMTAwMDExMDApOworKwkmcHhvcgkJKCJ4bW0wIiwi eG1tNCIpOworKwkmcHNodWZkCQkoInhtbTEiLCJ4bW0xIiwwYjExMTExMTExKTsJIyBjcml0aWNh bCBwYXRoCisrCSZweG9yCQkoInhtbTAiLCJ4bW0xIik7CisrCSZyZXQoKTsKKysKKysmc2V0X2xh YmVsKCJrZXlfMjU2YiIsMTYpOworKwkmJG1vdmVrZXkJKCZRV1AoMCwka2V5KSwieG1tMCIpOwor KwkmbGVhCQkoJGtleSwmRFdQKDE2LCRrZXkpKTsKKysKKysJJnNodWZwcwkJKCJ4bW00IiwieG1t MiIsMGIwMDAxMDAwMCk7CisrCSZweG9yCQkoInhtbTIiLCJ4bW00Iik7CisrCSZzaHVmcHMJCSgi eG1tNCIsInhtbTIiLDBiMTAwMDExMDApOworKwkmcHhvcgkJKCJ4bW0yIiwieG1tNCIpOworKwkm cHNodWZkCQkoInhtbTEiLCJ4bW0xIiwwYjEwMTAxMDEwKTsJIyBjcml0aWNhbCBwYXRoCisrCSZw eG9yCQkoInhtbTIiLCJ4bW0xIik7CisrCSZyZXQoKTsKKysKKysmc2V0X2xhYmVsKCJiYWRfcG9p bnRlciIsNCk7CisrCSZtb3YJKCJlYXgiLC0xKTsKKysJJnJldAkoKTsKKysmc2V0X2xhYmVsKCJi YWRfa2V5Yml0cyIsNCk7CisrCSZtb3YJKCJlYXgiLC0yKTsKKysJJnJldAkoKTsKKysmZnVuY3Rp b25fZW5kX0IoIl9hZXNuaV9zZXRfZW5jcnlwdF9rZXkiKTsKKysKKysjIGludCAkUFJFRklYX3Nl dF9lbmNyeXB0X2tleSAoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgaW50IGJpdHMsCisr IyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFFU19LRVkgKmtleSkKKysmZnVuY3Rpb25f YmVnaW5fQigiJHtQUkVGSVh9X3NldF9lbmNyeXB0X2tleSIpOworKwkmbW92CSgiZWF4Iiwmd3Bh cmFtKDApKTsKKysJJm1vdgkoJHJvdW5kcywmd3BhcmFtKDEpKTsKKysJJm1vdgkoJGtleSwmd3Bh cmFtKDIpKTsKKysJJmNhbGwJKCJfYWVzbmlfc2V0X2VuY3J5cHRfa2V5Iik7CisrCSZyZXQJKCk7 CisrJmZ1bmN0aW9uX2VuZF9CKCIke1BSRUZJWH1fc2V0X2VuY3J5cHRfa2V5Iik7CisrCisrIyBp bnQgJFBSRUZJWF9zZXRfZGVjcnlwdF9rZXkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXks IGludCBiaXRzLAorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRVNfS0VZICprZXkp CisrJmZ1bmN0aW9uX2JlZ2luX0IoIiR7UFJFRklYfV9zZXRfZGVjcnlwdF9rZXkiKTsKKysJJm1v dgkoImVheCIsJndwYXJhbSgwKSk7CisrCSZtb3YJKCRyb3VuZHMsJndwYXJhbSgxKSk7CisrCSZt b3YJKCRrZXksJndwYXJhbSgyKSk7CisrCSZjYWxsCSgiX2Flc25pX3NldF9lbmNyeXB0X2tleSIp OworKwkmbW92CSgka2V5LCZ3cGFyYW0oMikpOworKwkmc2hsCSgkcm91bmRzLDQpCSMgcm91bmRz LTEgYWZ0ZXIgX2Flc25pX3NldF9lbmNyeXB0X2tleQorKwkmdGVzdAkoImVheCIsImVheCIpOwor Kwkmam56CSgmbGFiZWwoImRlY19rZXlfcmV0IikpOworKwkmbGVhCSgiZWF4IiwmRFdQKDE2LCRr ZXksJHJvdW5kcykpOwkjIGVuZCBvZiBrZXkgc2NoZWR1bGUKKysKKysJJiRtb3Zla2V5CSgieG1t MCIsJlFXUCgwLCRrZXkpKTsJIyBqdXN0IHN3YXAKKysJJiRtb3Zla2V5CSgieG1tMSIsJlFXUCgw LCJlYXgiKSk7CisrCSYkbW92ZWtleQkoJlFXUCgwLCJlYXgiKSwieG1tMCIpOworKwkmJG1vdmVr ZXkJKCZRV1AoMCwka2V5KSwieG1tMSIpOworKwkmbGVhCQkoJGtleSwmRFdQKDE2LCRrZXkpKTsK KysJJmxlYQkJKCJlYXgiLCZEV1AoLTE2LCJlYXgiKSk7CisrCisrJnNldF9sYWJlbCgiZGVjX2tl eV9pbnZlcnNlIik7CisrCSYkbW92ZWtleQkoInhtbTAiLCZRV1AoMCwka2V5KSk7CSMgc3dhcCBh bmQgaW52ZXJzZQorKwkmJG1vdmVrZXkJKCJ4bW0xIiwmUVdQKDAsImVheCIpKTsKKysJJmFlc2lt YwkJKCJ4bW0wIiwieG1tMCIpOworKwkmYWVzaW1jCQkoInhtbTEiLCJ4bW0xIik7CisrCSZsZWEJ CSgka2V5LCZEV1AoMTYsJGtleSkpOworKwkmbGVhCQkoImVheCIsJkRXUCgtMTYsImVheCIpKTsK KysJJmNtcAkJKCJlYXgiLCRrZXkpOworKwkmJG1vdmVrZXkJKCZRV1AoMTYsImVheCIpLCJ4bW0w Iik7CisrCSYkbW92ZWtleQkoJlFXUCgtMTYsJGtleSksInhtbTEiKTsKKysJJmphCQkoJmxhYmVs KCJkZWNfa2V5X2ludmVyc2UiKSk7CisrCisrCSYkbW92ZWtleQkoInhtbTAiLCZRV1AoMCwka2V5 KSk7CSMgaW52ZXJzZSBtaWRkbGUKKysJJmFlc2ltYwkJKCJ4bW0wIiwieG1tMCIpOworKwkmJG1v dmVrZXkJKCZRV1AoMCwka2V5KSwieG1tMCIpOworKworKwkmeG9yCQkoImVheCIsImVheCIpOwkJ IyByZXR1cm4gc3VjY2VzcworKyZzZXRfbGFiZWwoImRlY19rZXlfcmV0Iik7CisrCSZyZXQJKCk7 CisrJmZ1bmN0aW9uX2VuZF9CKCIke1BSRUZJWH1fc2V0X2RlY3J5cHRfa2V5Iik7CisrJmFzY2l6 KCJBRVMgZm9yIEludGVsIEFFUy1OSSwgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3Jn PiIpOworKworKyZhc21fZmluaXNoKCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9hZXMvYXNtL2Flc25pLXg4Nl82NC5wbC5hZXNuaSBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9hZXMvYXNtL2Flc25pLXg4Nl82NC5wbAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2Flcy9hc20vYWVzbmkteDg2XzY0LnBsLmFlc25pCTIwMTAtMDEtMTIgMjI6MTg6MDYuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYWVzL2FzbS9hZXNu aS14ODZfNjQucGwJMjAxMC0wMS0xMiAyMjoxODowNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAg KzEsOTkxIEBACisrIyEvdXNyL2Jpbi9lbnYgcGVybAorKyMKKysjID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrIyBX cml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9w ZW5TU0wKKysjIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQg dW5kZXIgT3BlblNTTCBhbmQKKysjIENSWVBUT0dBTVMgbGljZW5zZXMgZGVwZW5kaW5nIG9uIHdo ZXJlIHlvdSBvYnRhaW4gaXQuIEZvciBmdXJ0aGVyCisrIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3 Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KKysjID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrIworKyMg VGhpcyBtb2R1bGUgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBJbnRlbCBBRVMtTkkgZXh0ZW5zaW9u LiBJbgorKyMgT3BlblNTTCBjb250ZXh0IGl0J3MgdXNlZCB3aXRoIEludGVsIGVuZ2luZSwgYnV0 IGNhbiBhbHNvIGJlIHVzZWQgYXMKKysjIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIGNyeXB0by9h ZXMvYXNtL2Flcy14ODZfNjQucGwgW3NlZSBiZWxvdyBmb3IKKysjIGRldGFpbHNdLgorKworKyRQ UkVGSVg9ImFlc25pIjsJIyBpZiAkUFJFRklYIGlzIHNldCB0byAiQUVTIiwgdGhlIHNjcmlwdAor KwkJCSMgZ2VuZXJhdGVzIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yCisrCQkJIyBjcnlwdG8vYWVz L2FzbS9hZXMteDg2XzY0LnBsOi0pCisrCisrJGZsYXZvdXIgPSBzaGlmdDsKKyskb3V0cHV0ICA9 IHNoaWZ0OworK2lmICgkZmxhdm91ciA9fiAvXC4vKSB7ICRvdXRwdXQgPSAkZmxhdm91cjsgdW5k ZWYgJGZsYXZvdXI7IH0KKysKKyskd2luNjQ9MDsgJHdpbjY0PTEgaWYgKCRmbGF2b3VyID1+IC9b bm1dYXNtfG1pbmd3NjQvIHx8ICRvdXRwdXQgPX4gL1wuYXNtJC8pOworKworKyQwID1+IG0vKC4q W1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CisrKCAkeGxhdGU9IiR7ZGlyfXg4Nl82NC14bGF0 ZS5wbCIgYW5kIC1mICR4bGF0ZSApIG9yCisrKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20v eDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgorK2RpZSAiY2FuJ3QgbG9jYXRlIHg4 Nl82NC14bGF0ZS5wbCI7CisrCisrb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkZmxhdm91ciAk b3V0cHV0IjsKKysKKyskbW92a2V5ID0gJFBSRUZJWCBlcSAiYWVzbmkiID8gIm1vdmFwcyIgOiAi bW92dXBzIjsKKytAXzRhcmdzPSR3aW42ND8JKCIlcmN4IiwiJXJkeCIsIiVyOCIsICIlcjkiKSA6 CSMgV2luNjQgb3JkZXIKKysJCSgiJXJkaSIsIiVyc2kiLCIlcmR4IiwiJXJjeCIpOwkjIFVuaXgg b3JkZXIKKysKKyskY29kZT0iLnRleHRcbiI7CisrCisrJHJvdW5kcz0iJWVheCI7CSMgaW5wdXQg dG8gYW5kIGNoYW5nZWQgYnkgYWVzbmlfW2VufGRlXWNyeXB0TiAhISEKKysjIHRoaXMgaXMgbmF0 dXJhbCBVbml4IGFyZ3VtZW50IG9yZGVyIGZvciBwdWJsaWMgJFBSRUZJWF9bZWNifGNiY11fZW5j cnlwdCAuLi4KKyskaW5wPSIlcmRpIjsKKyskb3V0PSIlcnNpIjsKKyskbGVuPSIlcmR4IjsKKysk a2V5PSIlcmN4IjsJIyBpbnB1dCB0byBhbmQgY2hhbmdlZCBieSBhZXNuaV9bZW58ZGVdY3J5cHRO ICEhIQorKyRpdnA9IiVyOCI7CSMgY2JjCisrCisrJHJuZHNfPSIlcjEwZCI7CSMgYmFja3VwIGNv cHkgZm9yICRyb3VuZHMKKyska2V5Xz0iJXIxMSI7CSMgYmFja3VwIGNvcHkgZm9yICRrZXkKKysK KysjICV4bW0gcmVnaXN0ZXIgbGF5b3V0CisrJGlub3V0MD0iJXhtbTAiOwkkaW5vdXQxPSIleG1t MSI7CisrJGlub3V0Mj0iJXhtbTIiOwkkaW5vdXQzPSIleG1tMyI7CisrJHJuZGtleTA9IiV4bW00 IjsJJHJuZGtleTE9IiV4bW01IjsKKysKKyskaXY9IiV4bW02IjsJCSRpbjA9IiV4bW03IjsJIyB1 c2VkIGluIENCQyBkZWNyeXB0CisrJGluMT0iJXhtbTgiOwkJJGluMj0iJXhtbTkiOworKwwKKysj IElubGluZSB2ZXJzaW9uIG9mIGludGVybmFsIGFlc25pX1tlbnxkZV1jcnlwdDEuCisrIworKyMg V2h5IGZvbGRlZCBsb29wPyBCZWNhdXNlIGFlc1tlbmN8ZGVjXSBpcyBzbG93IGVub3VnaCB0byBh Y2NvbW1vZGF0ZQorKyMgY3ljbGVzIHdoaWNoIHRha2UgY2FyZSBvZiBsb29wIHZhcmlhYmxlcy4u LgorK3sgbXkgJHNuOworK3N1YiBhZXNuaV9nZW5lcmF0ZTEgeworK215ICgkcCwka2V5LCRyb3Vu ZHMpPUBfOworKysrJHNuOworKyRjb2RlLj08PF9fXzsKKysJJG1vdmtleQkoJGtleSksJHJuZGtl eTAKKysJJG1vdmtleQkxNigka2V5KSwkcm5ka2V5MQorKwlsZWEJMzIoJGtleSksJGtleQorKwlw eG9yCSRybmRrZXkwLCRpbm91dDAKKysuTG9vcF8ke3B9MV8kc246CisrCWFlcyR7cH0JJHJuZGtl eTEsJGlub3V0MAorKwlkZWMJJHJvdW5kcworKwkkbW92a2V5CSgka2V5KSwkcm5ka2V5MQorKwls ZWEJMTYoJGtleSksJGtleQorKwlqbnoJLkxvb3BfJHtwfTFfJHNuCSMgbG9vcCBib2R5IGlzIDE2 IGJ5dGVzCisrCWFlcyR7cH1sYXN0CSRybmRrZXkxLCRpbm91dDAKKytfX18KKyt9fQorKyMgdm9p ZCAkUFJFRklYX1tlbnxkZV1jcnlwdCAoY29uc3Qgdm9pZCAqaW5wLHZvaWQgKm91dCxjb25zdCBB RVNfS0VZICprZXkpOworKyMKKyt7IG15ICgkaW5wLCRvdXQsJGtleSkgPSBAXzRhcmdzOworKwor KyRjb2RlLj08PF9fXzsKKysuZ2xvYmwJJHtQUkVGSVh9X2VuY3J5cHQKKysudHlwZQkke1BSRUZJ WH1fZW5jcnlwdCxcQGFiaS1vbW5pcG90ZW50CisrLmFsaWduCTE2CisrJHtQUkVGSVh9X2VuY3J5 cHQ6CisrCW1vdnVwcwkoJGlucCksJGlub3V0MAkJIyBsb2FkIGlucHV0CisrCW1vdgkyNDAoJGtl eSksJHJvdW5kcwkjIHB1bGwgJHJvdW5kcworK19fXworKwkmYWVzbmlfZ2VuZXJhdGUxKCJlbmMi LCRrZXksJHJvdW5kcyk7CisrJGNvZGUuPTw8X19fOworKwltb3Z1cHMJJGlub3V0MCwoJG91dCkJ CSMgb3V0cHV0CisrCXJldAorKy5zaXplCSR7UFJFRklYfV9lbmNyeXB0LC4tJHtQUkVGSVh9X2Vu Y3J5cHQKKysKKysuZ2xvYmwJJHtQUkVGSVh9X2RlY3J5cHQKKysudHlwZQkke1BSRUZJWH1fZGVj cnlwdCxcQGFiaS1vbW5pcG90ZW50CisrLmFsaWduCTE2CisrJHtQUkVGSVh9X2RlY3J5cHQ6Cisr CW1vdnVwcwkoJGlucCksJGlub3V0MAkJIyBsb2FkIGlucHV0CisrCW1vdgkyNDAoJGtleSksJHJv dW5kcwkjIHB1bGwgJHJvdW5kcworK19fXworKwkmYWVzbmlfZ2VuZXJhdGUxKCJkZWMiLCRrZXks JHJvdW5kcyk7CisrJGNvZGUuPTw8X19fOworKwltb3Z1cHMJJGlub3V0MCwoJG91dCkJCSMgb3V0 cHV0CisrCXJldAorKy5zaXplCSR7UFJFRklYfV9kZWNyeXB0LCAuLSR7UFJFRklYfV9kZWNyeXB0 CisrX19fCisrfQorKwwKKysjIF9hZXNuaV9bZW58ZGVdY3J5cHRbMzRdIGFyZSBwcml2YXRlIGlu dGVyZmFjZXMsIE4gZGVub3RlcyBpbnRlcmxlYXZlCisrIyBmYWN0b3IuIFdoeSAzeCBzdWJyb3V0 aW5lIGlzIHVzZWQgaW4gbG9vcHM/IEV2ZW4gdGhvdWdoIGFlc1tlbmN8ZGVjXQorKyMgbGF0ZW5j eSBpcyA2LCBpdCB0dXJuZWQgb3V0IHRoYXQgaXQgY2FuIGJlIHNjaGVkdWxlZCBvbmx5IGV2ZXJ5 CisrIyAqc2Vjb25kKiBjeWNsZS4gVGh1cyAzeCBpbnRlcmxlYXZlIGlzIHRoZSBvbmUgcHJvdmlk aW5nIG9wdGltYWwKKysjIHV0aWxpemF0aW9uLCBpLmUuIHdoZW4gc3Vicm91dGluZSdzIHRocm91 Z2hwdXQgaXMgdmlydHVhbGx5IHNhbWUgYXMKKysjIG9mIG5vbi1pbnRlcmxlYXZlZCBzdWJyb3V0 aW5lIFtmb3IgbnVtYmVyIG9mIGlucHV0IGJsb2NrcyB1cCB0byAzXS4KKysjIFRoaXMgaXMgd2h5 IGl0IG1ha2VzIG5vIHNlbnNlIHRvIGltcGxlbWVudCAyeCBzdWJyb3V0aW5lLiBBcyBzb29uCisr IyBhcy9pZiBJbnRlbCBpbXByb3ZlcyB0aHJvdWdocHV0IGJ5IG1ha2luZyBpdCBwb3NzaWJsZSB0 byBzY2hlZHVsZQorKyMgdGhlIGluc3RydWN0aW9ucyBpbiBxdWVzdGlvbiAqZXZlcnkqIGN5Y2xl cyBJIHdvdWxkIGhhdmUgdG8KKysjIGltcGxlbWVudCA2eCBpbnRlcmxlYXZlIGFuZCB1c2UgaXQg aW4gbG9vcC4uLgorK3N1YiBhZXNuaV9nZW5lcmF0ZTMgeworK215ICRkaXI9c2hpZnQ7CisrIyBB cyBhbHJlYWR5IG1lbnRpb25lZCBpdCB0YWtlcyBpbiAka2V5IGFuZCAkcm91bmRzLCB3aGljaCBh cmUgKm5vdCoKKysjIHByZXNlcnZlZC4gJGlub3V0WzAtMl0gaXMgY2lwaGVyL2NsZWFyIHRleHQu Li4KKyskY29kZS49PDxfX187CisrLnR5cGUJX2Flc25pXyR7ZGlyfXJ5cHQzLFxAYWJpLW9tbmlw b3RlbnQKKysuYWxpZ24JMTYKKytfYWVzbmlfJHtkaXJ9cnlwdDM6CisrCSRtb3ZrZXkJKCRrZXkp LCRybmRrZXkwCisrCXNocglcJDEsJHJvdW5kcworKwkkbW92a2V5CTE2KCRrZXkpLCRybmRrZXkx CisrCWxlYQkzMigka2V5KSwka2V5CisrCXB4b3IJJHJuZGtleTAsJGlub3V0MAorKwlweG9yCSRy bmRrZXkwLCRpbm91dDEKKysJcHhvcgkkcm5ka2V5MCwkaW5vdXQyCisrCisrLkwke2Rpcn1fbG9v cDM6CisrCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCisrCSRtb3ZrZXkJCSgka2V5KSwkcm5k a2V5MAorKwlhZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MQorKwlkZWMJCSRyb3VuZHMKKysJYWVz JHtkaXJ9CSRybmRrZXkxLCRpbm91dDIKKysJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDAKKysJ JG1vdmtleQkJMTYoJGtleSksJHJuZGtleTEKKysJYWVzJHtkaXJ9CSRybmRrZXkwLCRpbm91dDEK KysJbGVhCQkzMigka2V5KSwka2V5CisrCWFlcyR7ZGlyfQkkcm5ka2V5MCwkaW5vdXQyCisrCWpu egkJLkwke2Rpcn1fbG9vcDMKKysKKysJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDAKKysJJG1v dmtleQkJKCRrZXkpLCRybmRrZXkwCisrCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQxCisrCWFl cyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQyCisrCWFlcyR7ZGlyfWxhc3QJJHJuZGtleTAsJGlub3V0 MAorKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91dDEKKysJYWVzJHtkaXJ9bGFzdAkkcm5k a2V5MCwkaW5vdXQyCisrCXJldAorKy5zaXplCV9hZXNuaV8ke2Rpcn1yeXB0MywuLV9hZXNuaV8k e2Rpcn1yeXB0MworK19fXworK30KKysjIDR4IGludGVybGVhdmUgaXMgaW1wbGVtZW50ZWQgdG8g aW1wcm92ZSBzbWFsbCBibG9jayBwZXJmb3JtYW5jZSwKKysjIG1vc3Qgbm90YWJseSBbYW5kIG5h dHVyYWxseV0gNCBibG9jayBieSB+MzAlLiBPbmUgY2FuIGFyZ3VlIHRoYXQgb25lCisrIyBzaG91 bGQgaGF2ZSBpbXBsZW1lbnRlZCA1eCBhcyB3ZWxsLCBidXQgaW1wcm92ZW1lbnQgd291bGQgYmUg PDIwJSwKKysjIHNvIGl0J3Mgbm90IHdvcnRoIGl0Li4uCisrc3ViIGFlc25pX2dlbmVyYXRlNCB7 CisrbXkgJGRpcj1zaGlmdDsKKysjIEFzIGFscmVhZHkgbWVudGlvbmVkIGl0IHRha2VzIGluICRr ZXkgYW5kICRyb3VuZHMsIHdoaWNoIGFyZSAqbm90KgorKyMgcHJlc2VydmVkLiAkaW5vdXRbMC0z XSBpcyBjaXBoZXIvY2xlYXIgdGV4dC4uLgorKyRjb2RlLj08PF9fXzsKKysudHlwZQlfYWVzbmlf JHtkaXJ9cnlwdDQsXEBhYmktb21uaXBvdGVudAorKy5hbGlnbgkxNgorK19hZXNuaV8ke2Rpcn1y eXB0NDoKKysJJG1vdmtleQkoJGtleSksJHJuZGtleTAKKysJc2hyCVwkMSwkcm91bmRzCisrCSRt b3ZrZXkJMTYoJGtleSksJHJuZGtleTEKKysJbGVhCTMyKCRrZXkpLCRrZXkKKysJcHhvcgkkcm5k a2V5MCwkaW5vdXQwCisrCXB4b3IJJHJuZGtleTAsJGlub3V0MQorKwlweG9yCSRybmRrZXkwLCRp bm91dDIKKysJcHhvcgkkcm5ka2V5MCwkaW5vdXQzCisrCisrLkwke2Rpcn1fbG9vcDQ6CisrCWFl cyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQwCisrCSRtb3ZrZXkJCSgka2V5KSwkcm5ka2V5MAorKwlh ZXMke2Rpcn0JJHJuZGtleTEsJGlub3V0MQorKwlkZWMJCSRyb3VuZHMKKysJYWVzJHtkaXJ9CSRy bmRrZXkxLCRpbm91dDIKKysJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDMKKysJYWVzJHtkaXJ9 CSRybmRrZXkwLCRpbm91dDAKKysJJG1vdmtleQkJMTYoJGtleSksJHJuZGtleTEKKysJYWVzJHtk aXJ9CSRybmRrZXkwLCRpbm91dDEKKysJbGVhCQkzMigka2V5KSwka2V5CisrCWFlcyR7ZGlyfQkk cm5ka2V5MCwkaW5vdXQyCisrCWFlcyR7ZGlyfQkkcm5ka2V5MCwkaW5vdXQzCisrCWpuegkJLkwk e2Rpcn1fbG9vcDQKKysKKysJYWVzJHtkaXJ9CSRybmRrZXkxLCRpbm91dDAKKysJJG1vdmtleQkJ KCRrZXkpLCRybmRrZXkwCisrCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQxCisrCWFlcyR7ZGly fQkkcm5ka2V5MSwkaW5vdXQyCisrCWFlcyR7ZGlyfQkkcm5ka2V5MSwkaW5vdXQzCisrCWFlcyR7 ZGlyfWxhc3QJJHJuZGtleTAsJGlub3V0MAorKwlhZXMke2Rpcn1sYXN0CSRybmRrZXkwLCRpbm91 dDEKKysJYWVzJHtkaXJ9bGFzdAkkcm5ka2V5MCwkaW5vdXQyCisrCWFlcyR7ZGlyfWxhc3QJJHJu ZGtleTAsJGlub3V0MworKwlyZXQKKysuc2l6ZQlfYWVzbmlfJHtkaXJ9cnlwdDQsLi1fYWVzbmlf JHtkaXJ9cnlwdDQKKytfX18KKyt9CisrJmFlc25pX2dlbmVyYXRlMygiZW5jIikgaWYgKCRQUkVG SVggZXEgImFlc25pIik7CisrJmFlc25pX2dlbmVyYXRlMygiZGVjIik7CisrJmFlc25pX2dlbmVy YXRlNCgiZW5jIikgaWYgKCRQUkVGSVggZXEgImFlc25pIik7CisrJmFlc25pX2dlbmVyYXRlNCgi ZGVjIik7CisrDAorK2lmICgkUFJFRklYIGVxICJhZXNuaSIpIHsKKysjIHZvaWQgYWVzbmlfZWNi X2VuY3J5cHQgKGNvbnN0IHZvaWQgKmluLCB2b2lkICpvdXQsCisrIwkJCSAgc2l6ZV90IGxlbmd0 aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorKyMJCQkgIGludCBlbmMpOworKyRjb2RlLj08PF9fXzsK KysuZ2xvYmwJYWVzbmlfZWNiX2VuY3J5cHQKKysudHlwZQlhZXNuaV9lY2JfZW5jcnlwdCxcQGZ1 bmN0aW9uLDUKKysuYWxpZ24JMTYKKythZXNuaV9lY2JfZW5jcnlwdDoKKysJY21wCVwkMTYsJGxl bgkJIyBjaGVjayBsZW5ndGgKKysJamIJLkxlY2JfcmV0CisrCisrCW1vdgkyNDAoJGtleSksJHJv dW5kcwkjIHB1bGwgJHJvdW5kcworKwlhbmQJXCQtMTYsJGxlbgorKwltb3YJJGtleSwka2V5XwkJ IyBiYWNrdXAgJGtleQorKwl0ZXN0CSVyOGQsJXI4ZAkJIyA1dGggYXJndW1lbnQKKysJbW92CSRy b3VuZHMsJHJuZHNfCQkjIGJhY2t1cCAkcm91bmRzCisrCWp6CS5MZWNiX2RlY3J5cHQKKysjLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVDQiBFTkNSWVBUIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSMKKysJc3ViCVwkMHg0MCwkbGVuCisrCWpiZQkuTGVjYl9lbmNfdGFpbAorKwlq bXAJLkxlY2JfZW5jX2xvb3AzCisrLmFsaWduIDE2CisrLkxlY2JfZW5jX2xvb3AzOgorKwltb3Z1 cHMJKCRpbnApLCRpbm91dDAKKysJbW92dXBzCTB4MTAoJGlucCksJGlub3V0MQorKwltb3Z1cHMJ MHgyMCgkaW5wKSwkaW5vdXQyCisrCWNhbGwJX2Flc25pX2VuY3J5cHQzCisrCXN1YglcJDB4MzAs JGxlbgorKwlsZWEJMHgzMCgkaW5wKSwkaW5wCisrCWxlYQkweDMwKCRvdXQpLCRvdXQKKysJbW92 dXBzCSRpbm91dDAsLTB4MzAoJG91dCkKKysJbW92CSRybmRzXywkcm91bmRzCQkjIHJlc3RvcmUg JHJvdW5kcworKwltb3Z1cHMJJGlub3V0MSwtMHgyMCgkb3V0KQorKwltb3YJJGtleV8sJGtleQkJ IyByZXN0b3JlICRrZXkKKysJbW92dXBzCSRpbm91dDIsLTB4MTAoJG91dCkKKysJamEJLkxlY2Jf ZW5jX2xvb3AzCisrCisrLkxlY2JfZW5jX3RhaWw6CisrCWFkZAlcJDB4NDAsJGxlbgorKwlqegku TGVjYl9yZXQKKysKKysJY21wCVwkMHgxMCwkbGVuCisrCW1vdnVwcwkoJGlucCksJGlub3V0MAor KwlqZQkuTGVjYl9lbmNfb25lCisrCWNtcAlcJDB4MjAsJGxlbgorKwltb3Z1cHMJMHgxMCgkaW5w KSwkaW5vdXQxCisrCWplCS5MZWNiX2VuY190d28KKysJY21wCVwkMHgzMCwkbGVuCisrCW1vdnVw cwkweDIwKCRpbnApLCRpbm91dDIKKysJamUJLkxlY2JfZW5jX3RocmVlCisrCW1vdnVwcwkweDMw KCRpbnApLCRpbm91dDMKKysJY2FsbAlfYWVzbmlfZW5jcnlwdDQKKysJbW92dXBzCSRpbm91dDAs KCRvdXQpCisrCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkKKysJbW92dXBzCSRpbm91dDIsMHgy MCgkb3V0KQorKwltb3Z1cHMJJGlub3V0MywweDMwKCRvdXQpCisrCWptcAkuTGVjYl9yZXQKKysu YWxpZ24JMTYKKysuTGVjYl9lbmNfb25lOgorK19fXworKwkmYWVzbmlfZ2VuZXJhdGUxKCJlbmMi LCRrZXksJHJvdW5kcyk7CisrJGNvZGUuPTw8X19fOworKwltb3Z1cHMJJGlub3V0MCwoJG91dCkK KysJam1wCS5MZWNiX3JldAorKy5hbGlnbgkxNgorKy5MZWNiX2VuY190d286CisrCWNhbGwJX2Fl c25pX2VuY3J5cHQzCisrCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorKwltb3Z1cHMJJGlub3V0MSww eDEwKCRvdXQpCisrCWptcAkuTGVjYl9yZXQKKysuYWxpZ24JMTYKKysuTGVjYl9lbmNfdGhyZWU6 CisrCWNhbGwJX2Flc25pX2VuY3J5cHQzCisrCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorKwltb3Z1 cHMJJGlub3V0MSwweDEwKCRvdXQpCisrCW1vdnVwcwkkaW5vdXQyLDB4MjAoJG91dCkKKysJam1w CS5MZWNiX3JldAorKwwjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVDQiBERUNSWVBUIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKKysuYWxpZ24JMTYKKysuTGVjYl9kZWNyeXB0 OgorKwlzdWIJXCQweDQwLCRsZW4KKysJamJlCS5MZWNiX2RlY190YWlsCisrCWptcAkuTGVjYl9k ZWNfbG9vcDMKKysuYWxpZ24gMTYKKysuTGVjYl9kZWNfbG9vcDM6CisrCW1vdnVwcwkoJGlucCks JGlub3V0MAorKwltb3Z1cHMJMHgxMCgkaW5wKSwkaW5vdXQxCisrCW1vdnVwcwkweDIwKCRpbnAp LCRpbm91dDIKKysJY2FsbAlfYWVzbmlfZGVjcnlwdDMKKysJc3ViCVwkMHgzMCwkbGVuCisrCWxl YQkweDMwKCRpbnApLCRpbnAKKysJbGVhCTB4MzAoJG91dCksJG91dAorKwltb3Z1cHMJJGlub3V0 MCwtMHgzMCgkb3V0KQorKwltb3YJJHJuZHNfLCRyb3VuZHMJCSMgcmVzdG9yZSAkcm91bmRzCisr CW1vdnVwcwkkaW5vdXQxLC0weDIwKCRvdXQpCisrCW1vdgkka2V5Xywka2V5CQkjIHJlc3RvcmUg JGtleQorKwltb3Z1cHMJJGlub3V0MiwtMHgxMCgkb3V0KQorKwlqYQkuTGVjYl9kZWNfbG9vcDMK KysKKysuTGVjYl9kZWNfdGFpbDoKKysJYWRkCVwkMHg0MCwkbGVuCisrCWp6CS5MZWNiX3JldAor KworKwljbXAJXCQweDEwLCRsZW4KKysJbW92dXBzCSgkaW5wKSwkaW5vdXQwCisrCWplCS5MZWNi X2RlY19vbmUKKysJY21wCVwkMHgyMCwkbGVuCisrCW1vdnVwcwkweDEwKCRpbnApLCRpbm91dDEK KysJamUJLkxlY2JfZGVjX3R3bworKwljbXAJXCQweDMwLCRsZW4KKysJbW92dXBzCTB4MjAoJGlu cCksJGlub3V0MgorKwlqZQkuTGVjYl9kZWNfdGhyZWUKKysJbW92dXBzCTB4MzAoJGlucCksJGlu b3V0MworKwljYWxsCV9hZXNuaV9kZWNyeXB0NAorKwltb3Z1cHMJJGlub3V0MCwoJG91dCkKKysJ bW92dXBzCSRpbm91dDEsMHgxMCgkb3V0KQorKwltb3Z1cHMJJGlub3V0MiwweDIwKCRvdXQpCisr CW1vdnVwcwkkaW5vdXQzLDB4MzAoJG91dCkKKysJam1wCS5MZWNiX3JldAorKy5hbGlnbgkxNgor Ky5MZWNiX2RlY19vbmU6CisrX19fCisrCSZhZXNuaV9nZW5lcmF0ZTEoImRlYyIsJGtleSwkcm91 bmRzKTsKKyskY29kZS49PDxfX187CisrCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorKwlqbXAJLkxl Y2JfcmV0CisrLmFsaWduCTE2CisrLkxlY2JfZGVjX3R3bzoKKysJY2FsbAlfYWVzbmlfZGVjcnlw dDMKKysJbW92dXBzCSRpbm91dDAsKCRvdXQpCisrCW1vdnVwcwkkaW5vdXQxLDB4MTAoJG91dCkK KysJam1wCS5MZWNiX3JldAorKy5hbGlnbgkxNgorKy5MZWNiX2RlY190aHJlZToKKysJY2FsbAlf YWVzbmlfZGVjcnlwdDMKKysJbW92dXBzCSRpbm91dDAsKCRvdXQpCisrCW1vdnVwcwkkaW5vdXQx LDB4MTAoJG91dCkKKysJbW92dXBzCSRpbm91dDIsMHgyMCgkb3V0KQorKworKy5MZWNiX3JldDoK KysJcmV0CisrLnNpemUJYWVzbmlfZWNiX2VuY3J5cHQsLi1hZXNuaV9lY2JfZW5jcnlwdAorK19f XworK30KKysMCisrIyB2b2lkICRQUkVGSVhfY2JjX2VuY3J5cHQgKGNvbnN0IHZvaWQgKmlucCwg dm9pZCAqb3V0LAorKyMJCQkgICAgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAor KyMJCQkgICAgdW5zaWduZWQgY2hhciAqaXZwLGNvbnN0IGludCBlbmMpOworKyRyZXNlcnZlZCA9 ICR3aW42ND8weDQwOi0weDE4OwkjIHVzZWQgaW4gZGVjcnlwdAorKyRjb2RlLj08PF9fXzsKKysu Z2xvYmwJJHtQUkVGSVh9X2NiY19lbmNyeXB0CisrLnR5cGUJJHtQUkVGSVh9X2NiY19lbmNyeXB0 LFxAZnVuY3Rpb24sNgorKy5hbGlnbgkxNgorKyR7UFJFRklYfV9jYmNfZW5jcnlwdDoKKysJdGVz dAkkbGVuLCRsZW4JCSMgY2hlY2sgbGVuZ3RoCisrCWp6CS5MY2JjX3JldAorKworKwltb3YJMjQw KCRrZXkpLCRybmRzXwkjIHB1bGwgJHJvdW5kcworKwltb3YJJGtleSwka2V5XwkJIyBiYWNrdXAg JGtleQorKwl0ZXN0CSVyOWQsJXI5ZAkJIyA2dGggYXJndW1lbnQKKysJanoJLkxjYmNfZGVjcnlw dAorKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0JDIEVOQ1JZUFQgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tIworKwltb3Z1cHMJKCRpdnApLCRpbm91dDAJCSMgbG9hZCBpdiBh cyBpbml0aWFsIHN0YXRlCisrCWNtcAlcJDE2LCRsZW4KKysJbW92CSRybmRzXywkcm91bmRzCisr CWpiCS5MY2JjX2VuY190YWlsCisrCXN1YglcJDE2LCRsZW4KKysJam1wCS5MY2JjX2VuY19sb29w CisrLmFsaWduIDE2CisrLkxjYmNfZW5jX2xvb3A6CisrCW1vdnVwcwkoJGlucCksJGlub3V0MQkJ IyBsb2FkIGlucHV0CisrCWxlYQkxNigkaW5wKSwkaW5wCisrCXB4b3IJJGlub3V0MSwkaW5vdXQw CisrX19fCisrCSZhZXNuaV9nZW5lcmF0ZTEoImVuYyIsJGtleSwkcm91bmRzKTsKKyskY29kZS49 PDxfX187CisrCXN1YglcJDE2LCRsZW4KKysJbGVhCTE2KCRvdXQpLCRvdXQKKysJbW92CSRybmRz Xywkcm91bmRzCQkjIHJlc3RvcmUgJHJvdW5kcworKwltb3YJJGtleV8sJGtleQkJIyByZXN0b3Jl ICRrZXkKKysJbW92dXBzCSRpbm91dDAsLTE2KCRvdXQpCSMgc3RvcmUgb3V0cHV0CisrCWpuYwku TGNiY19lbmNfbG9vcAorKwlhZGQJXCQxNiwkbGVuCisrCWpuegkuTGNiY19lbmNfdGFpbAorKwlt b3Z1cHMJJGlub3V0MCwoJGl2cCkKKysJam1wCS5MY2JjX3JldAorKworKy5MY2JjX2VuY190YWls OgorKwltb3YJJGxlbiwlcmN4CSMgemFwcyAka2V5CisrCXhjaGcJJGlucCwkb3V0CSMgJGlucCBp cyAlcnNpIGFuZCAkb3V0IGlzICVyZGkgbm93CisrCS5sb25nCTB4OTA2NkE0RjMJIyByZXAgbW92 c2IKKysJbW92CVwkMTYsJWVjeAkjIHplcm8gdGFpbAorKwlzdWIJJGxlbiwlcmN4CisrCXhvcgkl ZWF4LCVlYXgKKysJLmxvbmcJMHg5MDY2QUFGMwkjIHJlcCBzdG9zYgorKwlsZWEJLTE2KCVyZGkp LCVyZGkJIyByZXdpbmQgJG91dCBieSAxIGJsb2NrCisrCW1vdgkkcm5kc18sJHJvdW5kcwkjIHJl c3RvcmUgJHJvdW5kcworKwltb3YJJXJkaSwlcnNpCSMgJGlucCBhbmQgJG91dCBhcmUgdGhlIHNh bWUKKysJbW92CSRrZXlfLCRrZXkJIyByZXN0b3JlICRrZXkKKysJeG9yCSRsZW4sJGxlbgkjIGxl bj0xNgorKwlqbXAJLkxjYmNfZW5jX2xvb3AJIyBvbmUgbW9yZSBzcGluCisrDCMtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gQ0JDIERFQ1JZUFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tIworKy5hbGlnbgkxNgorKy5MY2JjX2RlY3J5cHQ6CisrX19fCisrJGNvZGUuPTw8X19fIGlm ICgkd2luNjQpOworKwlsZWEJLTB4NTgoJXJzcCksJXJzcAorKwltb3ZhcHMJJXhtbTYsKCVyc3Ap CisrCW1vdmFwcwkleG1tNywweDEwKCVyc3ApCisrCW1vdmFwcwkleG1tOCwweDIwKCVyc3ApCisr CW1vdmFwcwkleG1tOSwweDMwKCVyc3ApCisrLkxjYmNfZGVjcnlwdF9ib2R5OgorK19fXworKyRj b2RlLj08PF9fXzsKKysJbW92dXBzCSgkaXZwKSwkaXYKKysJc3ViCVwkMHg0MCwkbGVuCisrCW1v dgkkcm5kc18sJHJvdW5kcworKwlqYmUJLkxjYmNfZGVjX3RhaWwKKysJam1wCS5MY2JjX2RlY19s b29wMworKy5hbGlnbiAxNgorKy5MY2JjX2RlY19sb29wMzoKKysJbW92dXBzCSgkaW5wKSwkaW5v dXQwCisrCW1vdnVwcwkweDEwKCRpbnApLCRpbm91dDEKKysJbW92dXBzCTB4MjAoJGlucCksJGlu b3V0MgorKwltb3ZhcHMJJGlub3V0MCwkaW4wCisrCW1vdmFwcwkkaW5vdXQxLCRpbjEKKysJbW92 YXBzCSRpbm91dDIsJGluMgorKwljYWxsCV9hZXNuaV9kZWNyeXB0MworKwlzdWIJXCQweDMwLCRs ZW4KKysJbGVhCTB4MzAoJGlucCksJGlucAorKwlsZWEJMHgzMCgkb3V0KSwkb3V0CisrCXB4b3IJ JGl2LCRpbm91dDAKKysJcHhvcgkkaW4wLCRpbm91dDEKKysJbW92YXBzCSRpbjIsJGl2CisrCXB4 b3IJJGluMSwkaW5vdXQyCisrCW1vdnVwcwkkaW5vdXQwLC0weDMwKCRvdXQpCisrCW1vdgkkcm5k c18sJHJvdW5kcwkjIHJlc3RvcmUgJHJvdW5kcworKwltb3Z1cHMJJGlub3V0MSwtMHgyMCgkb3V0 KQorKwltb3YJJGtleV8sJGtleQkjIHJlc3RvcmUgJGtleQorKwltb3Z1cHMJJGlub3V0MiwtMHgx MCgkb3V0KQorKwlqYQkuTGNiY19kZWNfbG9vcDMKKysKKysuTGNiY19kZWNfdGFpbDoKKysJYWRk CVwkMHg0MCwkbGVuCisrCW1vdnVwcwkkaXYsKCRpdnApCisrCWp6CS5MY2JjX2RlY19yZXQKKysK KysJbW92dXBzCSgkaW5wKSwkaW5vdXQwCisrCWNtcAlcJDB4MTAsJGxlbgorKwltb3ZhcHMJJGlu b3V0MCwkaW4wCisrCWpiZQkuTGNiY19kZWNfb25lCisrCW1vdnVwcwkweDEwKCRpbnApLCRpbm91 dDEKKysJY21wCVwkMHgyMCwkbGVuCisrCW1vdmFwcwkkaW5vdXQxLCRpbjEKKysJamJlCS5MY2Jj X2RlY190d28KKysJbW92dXBzCTB4MjAoJGlucCksJGlub3V0MgorKwljbXAJXCQweDMwLCRsZW4K KysJbW92YXBzCSRpbm91dDIsJGluMgorKwlqYmUJLkxjYmNfZGVjX3RocmVlCisrCW1vdnVwcwkw eDMwKCRpbnApLCRpbm91dDMKKysJY2FsbAlfYWVzbmlfZGVjcnlwdDQKKysJcHhvcgkkaXYsJGlu b3V0MAorKwltb3Z1cHMJMHgzMCgkaW5wKSwkaXYKKysJcHhvcgkkaW4wLCRpbm91dDEKKysJbW92 dXBzCSRpbm91dDAsKCRvdXQpCisrCXB4b3IJJGluMSwkaW5vdXQyCisrCW1vdnVwcwkkaW5vdXQx LDB4MTAoJG91dCkKKysJcHhvcgkkaW4yLCRpbm91dDMKKysJbW92dXBzCSRpbm91dDIsMHgyMCgk b3V0KQorKwltb3ZhcHMJJGlub3V0MywkaW5vdXQwCisrCWxlYQkweDMwKCRvdXQpLCRvdXQKKysJ am1wCS5MY2JjX2RlY190YWlsX2NvbGxlY3RlZAorKy5hbGlnbgkxNgorKy5MY2JjX2RlY19vbmU6 CisrX19fCisrCSZhZXNuaV9nZW5lcmF0ZTEoImRlYyIsJGtleSwkcm91bmRzKTsKKyskY29kZS49 PDxfX187CisrCXB4b3IJJGl2LCRpbm91dDAKKysJbW92YXBzCSRpbjAsJGl2CisrCWptcAkuTGNi Y19kZWNfdGFpbF9jb2xsZWN0ZWQKKysuYWxpZ24JMTYKKysuTGNiY19kZWNfdHdvOgorKwljYWxs CV9hZXNuaV9kZWNyeXB0MworKwlweG9yCSRpdiwkaW5vdXQwCisrCXB4b3IJJGluMCwkaW5vdXQx CisrCW1vdnVwcwkkaW5vdXQwLCgkb3V0KQorKwltb3ZhcHMJJGluMSwkaXYKKysJbW92YXBzCSRp bm91dDEsJGlub3V0MAorKwlsZWEJMHgxMCgkb3V0KSwkb3V0CisrCWptcAkuTGNiY19kZWNfdGFp bF9jb2xsZWN0ZWQKKysuYWxpZ24JMTYKKysuTGNiY19kZWNfdGhyZWU6CisrCWNhbGwJX2Flc25p X2RlY3J5cHQzCisrCXB4b3IJJGl2LCRpbm91dDAKKysJcHhvcgkkaW4wLCRpbm91dDEKKysJbW92 dXBzCSRpbm91dDAsKCRvdXQpCisrCXB4b3IJJGluMSwkaW5vdXQyCisrCW1vdnVwcwkkaW5vdXQx LDB4MTAoJG91dCkKKysJbW92YXBzCSRpbjIsJGl2CisrCW1vdmFwcwkkaW5vdXQyLCRpbm91dDAK KysJbGVhCTB4MjAoJG91dCksJG91dAorKwlqbXAJLkxjYmNfZGVjX3RhaWxfY29sbGVjdGVkCisr LmFsaWduCTE2CisrLkxjYmNfZGVjX3RhaWxfY29sbGVjdGVkOgorKwlhbmQJXCQxNSwkbGVuCisr CW1vdnVwcwkkaXYsKCRpdnApCisrCWpuegkuTGNiY19kZWNfdGFpbF9wYXJ0aWFsCisrCW1vdnVw cwkkaW5vdXQwLCgkb3V0KQorKwlqbXAJLkxjYmNfZGVjX3JldAorKy5MY2JjX2RlY190YWlsX3Bh cnRpYWw6CisrCW1vdmFwcwkkaW5vdXQwLCRyZXNlcnZlZCglcnNwKQorKwltb3YJJG91dCwlcmRp CisrCW1vdgkkbGVuLCVyY3gKKysJbGVhCSRyZXNlcnZlZCglcnNwKSwlcnNpCisrCS5sb25nCTB4 OTA2NkE0RjMJIyByZXAgbW92c2IKKysKKysuTGNiY19kZWNfcmV0OgorK19fXworKyRjb2RlLj08 PF9fXyBpZiAoJHdpbjY0KTsKKysJbW92YXBzCSglcnNwKSwleG1tNgorKwltb3ZhcHMJMHgxMCgl cnNwKSwleG1tNworKwltb3ZhcHMJMHgyMCglcnNwKSwleG1tOAorKwltb3ZhcHMJMHgzMCglcnNw KSwleG1tOQorKwlsZWEJMHg1OCglcnNwKSwlcnNwCisrX19fCisrJGNvZGUuPTw8X19fOworKy5M Y2JjX3JldDoKKysJcmV0CisrLnNpemUJJHtQUkVGSVh9X2NiY19lbmNyeXB0LC4tJHtQUkVGSVh9 X2NiY19lbmNyeXB0CisrX19fCisrDAorKyMgaW50ICRQUkVGSVhfc2V0X1tlbnxkZV1jcnlwdF9r ZXkgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksCisrIwkJCQlpbnQgYml0cywgQUVTX0tF WSAqa2V5KQorK3sgbXkgKCRpbnAsJGJpdHMsJGtleSkgPSBAXzRhcmdzOworKyAgJGJpdHMgPX4g cy8lci8lZS87CisrCisrJGNvZGUuPTw8X19fOworKy5nbG9ibAkke1BSRUZJWH1fc2V0X2RlY3J5 cHRfa2V5CisrLnR5cGUJJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleSxcQGFiaS1vbW5pcG90ZW50 CisrLmFsaWduCTE2CisrJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleToKKysJLmJ5dGUJMHg0OCww eDgzLDB4RUMsMHgwOAkjIHN1YiByc3AsOAorKwljYWxsCV9hZXNuaV9zZXRfZW5jcnlwdF9rZXkK KysJc2hsCVwkNCwkYml0cwkJIyByb3VuZHMtMSBhZnRlciBfYWVzbmlfc2V0X2VuY3J5cHRfa2V5 CisrCXRlc3QJJWVheCwlZWF4CisrCWpuegkuTGRlY19rZXlfcmV0CisrCWxlYQkxNigka2V5LCRi aXRzKSwkaW5wCSMgcG9pbnRzIGF0IHRoZSBlbmQgb2Yga2V5IHNjaGVkdWxlCisrCisrCSRtb3Zr ZXkJKCRrZXkpLCV4bW0wCQkjIGp1c3Qgc3dhcAorKwkkbW92a2V5CSgkaW5wKSwleG1tMQorKwkk bW92a2V5CSV4bW0wLCgkaW5wKQorKwkkbW92a2V5CSV4bW0xLCgka2V5KQorKwlsZWEJMTYoJGtl eSksJGtleQorKwlsZWEJLTE2KCRpbnApLCRpbnAKKysKKysuTGRlY19rZXlfaW52ZXJzZToKKysJ JG1vdmtleQkoJGtleSksJXhtbTAJCSMgc3dhcCBhbmQgaW52ZXJzZQorKwkkbW92a2V5CSgkaW5w KSwleG1tMQorKwlhZXNpbWMJJXhtbTAsJXhtbTAKKysJYWVzaW1jCSV4bW0xLCV4bW0xCisrCWxl YQkxNigka2V5KSwka2V5CisrCWxlYQktMTYoJGlucCksJGlucAorKwljbXAJJGtleSwkaW5wCisr CSRtb3ZrZXkJJXhtbTAsMTYoJGlucCkKKysJJG1vdmtleQkleG1tMSwtMTYoJGtleSkKKysJamEJ LkxkZWNfa2V5X2ludmVyc2UKKysKKysJJG1vdmtleQkoJGtleSksJXhtbTAJCSMgaW52ZXJzZSBt aWRkbGUKKysJYWVzaW1jCSV4bW0wLCV4bW0wCisrCSRtb3ZrZXkJJXhtbTAsKCRpbnApCisrLkxk ZWNfa2V5X3JldDoKKysJYWRkCVwkOCwlcnNwCisrCXJldAorKy5MU0VIX2VuZF9zZXRfZGVjcnlw dF9rZXk6CisrLnNpemUJJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleSwuLSR7UFJFRklYfV9zZXRf ZGVjcnlwdF9rZXkKKytfX18KKysMCisrIyBUaGlzIGlzIGJhc2VkIG9uIHN1Ym1pc3Npb24gYnkK KysjCisrIwlIdWFuZyBZaW5nIDx5aW5nLmh1YW5nQGludGVsLmNvbT4KKysjCVZpbm9kaCBHb3Bh bCA8dmlub2RoLmdvcGFsQGludGVsLmNvbT4KKysjCUthaHJhbWFuIEFrZGVtaXIKKysjCisrIyBB Z3Jlc3NpdmVseSBvcHRpbWl6ZWQgaW4gcmVzcGVjdCB0byBhZXNrZXlnZW5hc3Npc3QncyBjcml0 aWNhbCBwYXRoCisrIyBhbmQgaXMgY29udGFpbmVkIGluICV4bW0wLTUgdG8gbWVldCBXaW42NCBB QkkgcmVxdWlyZW1lbnQuCisrIworKyRjb2RlLj08PF9fXzsKKysuZ2xvYmwJJHtQUkVGSVh9X3Nl dF9lbmNyeXB0X2tleQorKy50eXBlCSR7UFJFRklYfV9zZXRfZW5jcnlwdF9rZXksXEBhYmktb21u aXBvdGVudAorKy5hbGlnbgkxNgorKyR7UFJFRklYfV9zZXRfZW5jcnlwdF9rZXk6CisrX2Flc25p X3NldF9lbmNyeXB0X2tleToKKysJLmJ5dGUJMHg0OCwweDgzLDB4RUMsMHgwOAkjIHN1YiByc3As OAorKwl0ZXN0CSRpbnAsJGlucAorKwltb3YJXCQtMSwlcmF4CisrCWp6CS5MZW5jX2tleV9yZXQK KysJdGVzdAkka2V5LCRrZXkKKysJanoJLkxlbmNfa2V5X3JldAorKworKwltb3Z1cHMJKCRpbnAp LCV4bW0wCQkjIHB1bGwgZmlyc3QgMTI4IGJpdHMgb2YgKnVzZXJLZXkKKysJcHhvcgkleG1tNCwl eG1tNAkJIyBsb3cgZHdvcmQgb2YgeG1tNCBpcyBhc3N1bWVkIDAKKysJbGVhCTE2KCRrZXkpLCVy YXgKKysJY21wCVwkMjU2LCRiaXRzCisrCWplCS5MMTRyb3VuZHMKKysJY21wCVwkMTkyLCRiaXRz CisrCWplCS5MMTJyb3VuZHMKKysJY21wCVwkMTI4LCRiaXRzCisrCWpuZQkuTGJhZF9rZXliaXRz CisrCisrLkwxMHJvdW5kczoKKysJbW92CVwkOSwkYml0cwkJCSMgMTAgcm91bmRzIGZvciAxMjgt Yml0IGtleQorKwkkbW92a2V5CSV4bW0wLCgka2V5KQkJCSMgcm91bmQgMAorKwlhZXNrZXlnZW5h c3Npc3QJXCQweDEsJXhtbTAsJXhtbTEJIyByb3VuZCAxCisrCWNhbGwJCS5Ma2V5X2V4cGFuc2lv bl8xMjhfY29sZAorKwlhZXNrZXlnZW5hc3Npc3QJXCQweDIsJXhtbTAsJXhtbTEJIyByb3VuZCAy CisrCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xMjgKKysJYWVza2V5Z2VuYXNzaXN0CVwkMHg0LCV4 bW0wLCV4bW0xCSMgcm91bmQgMworKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTI4CisrCWFlc2tl eWdlbmFzc2lzdAlcJDB4OCwleG1tMCwleG1tMQkjIHJvdW5kIDQKKysJY2FsbAkJLkxrZXlfZXhw YW5zaW9uXzEyOAorKwlhZXNrZXlnZW5hc3Npc3QJXCQweDEwLCV4bW0wLCV4bW0xCSMgcm91bmQg NQorKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTI4CisrCWFlc2tleWdlbmFzc2lzdAlcJDB4MjAs JXhtbTAsJXhtbTEJIyByb3VuZCA2CisrCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xMjgKKysJYWVz a2V5Z2VuYXNzaXN0CVwkMHg0MCwleG1tMCwleG1tMQkjIHJvdW5kIDcKKysJY2FsbAkJLkxrZXlf ZXhwYW5zaW9uXzEyOAorKwlhZXNrZXlnZW5hc3Npc3QJXCQweDgwLCV4bW0wLCV4bW0xCSMgcm91 bmQgOAorKwljYWxsCQkuTGtleV9leHBhbnNpb25fMTI4CisrCWFlc2tleWdlbmFzc2lzdAlcJDB4 MWIsJXhtbTAsJXhtbTEJIyByb3VuZCA5CisrCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xMjgKKysJ YWVza2V5Z2VuYXNzaXN0CVwkMHgzNiwleG1tMCwleG1tMQkjIHJvdW5kIDEwCisrCWNhbGwJCS5M a2V5X2V4cGFuc2lvbl8xMjgKKysJJG1vdmtleQkleG1tMCwoJXJheCkKKysJbW92CSRiaXRzLDgw KCVyYXgpCSMgMjQwKCVyZHgpCisrCXhvcgklZWF4LCVlYXgKKysJam1wCS5MZW5jX2tleV9yZXQK KysKKysuYWxpZ24JMTYKKysuTDEycm91bmRzOgorKwltb3ZxCTE2KCRpbnApLCV4bW0yCQkJIyBy ZW1haW5pbmcgMS8zIG9mICp1c2VyS2V5CisrCW1vdglcJDExLCRiaXRzCQkJIyAxMiByb3VuZHMg Zm9yIDE5MgorKwkkbW92a2V5CSV4bW0wLCgka2V5KQkJCSMgcm91bmQgMAorKwlhZXNrZXlnZW5h c3Npc3QJXCQweDEsJXhtbTIsJXhtbTEJIyByb3VuZCAxLDIKKysJY2FsbAkJLkxrZXlfZXhwYW5z aW9uXzE5MmFfY29sZAorKwlhZXNrZXlnZW5hc3Npc3QJXCQweDIsJXhtbTIsJXhtbTEJIyByb3Vu ZCAyLDMKKysJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzE5MmIKKysJYWVza2V5Z2VuYXNzaXN0CVwk MHg0LCV4bW0yLCV4bW0xCSMgcm91bmQgNCw1CisrCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xOTJh CisrCWFlc2tleWdlbmFzc2lzdAlcJDB4OCwleG1tMiwleG1tMQkjIHJvdW5kIDUsNgorKwljYWxs CQkuTGtleV9leHBhbnNpb25fMTkyYgorKwlhZXNrZXlnZW5hc3Npc3QJXCQweDEwLCV4bW0yLCV4 bW0xCSMgcm91bmQgNyw4CisrCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xOTJhCisrCWFlc2tleWdl bmFzc2lzdAlcJDB4MjAsJXhtbTIsJXhtbTEJIyByb3VuZCA4LDkKKysJY2FsbAkJLkxrZXlfZXhw YW5zaW9uXzE5MmIKKysJYWVza2V5Z2VuYXNzaXN0CVwkMHg0MCwleG1tMiwleG1tMQkjIHJvdW5k IDEwLDExCisrCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8xOTJhCisrCWFlc2tleWdlbmFzc2lzdAlc JDB4ODAsJXhtbTIsJXhtbTEJIyByb3VuZCAxMSwxMgorKwljYWxsCQkuTGtleV9leHBhbnNpb25f MTkyYgorKwkkbW92a2V5CSV4bW0wLCglcmF4KQorKwltb3YJJGJpdHMsNDgoJXJheCkJIyAyNDAo JXJkeCkKKysJeG9yCSVyYXgsICVyYXgKKysJam1wCS5MZW5jX2tleV9yZXQKKysKKysuYWxpZ24J MTYKKysuTDE0cm91bmRzOgorKwltb3Z1cHMJMTYoJGlucCksJXhtbTIJCQkjIHJlbWFuaW5nIGhh bGYgb2YgKnVzZXJLZXkKKysJbW92CVwkMTMsJGJpdHMJCQkjIDE0IHJvdW5kcyBmb3IgMjU2Cisr CWxlYQkxNiglcmF4KSwlcmF4CisrCSRtb3ZrZXkJJXhtbTAsKCRrZXkpCQkJIyByb3VuZCAwCisr CSRtb3ZrZXkJJXhtbTIsMTYoJGtleSkJCQkjIHJvdW5kIDEKKysJYWVza2V5Z2VuYXNzaXN0CVwk MHgxLCV4bW0yLCV4bW0xCSMgcm91bmQgMgorKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YV9j b2xkCisrCWFlc2tleWdlbmFzc2lzdAlcJDB4MSwleG1tMCwleG1tMQkjIHJvdW5kIDMKKysJY2Fs bAkJLkxrZXlfZXhwYW5zaW9uXzI1NmIKKysJYWVza2V5Z2VuYXNzaXN0CVwkMHgyLCV4bW0yLCV4 bW0xCSMgcm91bmQgNAorKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YQorKwlhZXNrZXlnZW5h c3Npc3QJXCQweDIsJXhtbTAsJXhtbTEJIyByb3VuZCA1CisrCWNhbGwJCS5Ma2V5X2V4cGFuc2lv bl8yNTZiCisrCWFlc2tleWdlbmFzc2lzdAlcJDB4NCwleG1tMiwleG1tMQkjIHJvdW5kIDYKKysJ Y2FsbAkJLkxrZXlfZXhwYW5zaW9uXzI1NmEKKysJYWVza2V5Z2VuYXNzaXN0CVwkMHg0LCV4bW0w LCV4bW0xCSMgcm91bmQgNworKwljYWxsCQkuTGtleV9leHBhbnNpb25fMjU2YgorKwlhZXNrZXln ZW5hc3Npc3QJXCQweDgsJXhtbTIsJXhtbTEJIyByb3VuZCA4CisrCWNhbGwJCS5Ma2V5X2V4cGFu c2lvbl8yNTZhCisrCWFlc2tleWdlbmFzc2lzdAlcJDB4OCwleG1tMCwleG1tMQkjIHJvdW5kIDkK KysJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzI1NmIKKysJYWVza2V5Z2VuYXNzaXN0CVwkMHgxMCwl eG1tMiwleG1tMQkjIHJvdW5kIDEwCisrCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8yNTZhCisrCWFl c2tleWdlbmFzc2lzdAlcJDB4MTAsJXhtbTAsJXhtbTEJIyByb3VuZCAxMQorKwljYWxsCQkuTGtl eV9leHBhbnNpb25fMjU2YgorKwlhZXNrZXlnZW5hc3Npc3QJXCQweDIwLCV4bW0yLCV4bW0xCSMg cm91bmQgMTIKKysJY2FsbAkJLkxrZXlfZXhwYW5zaW9uXzI1NmEKKysJYWVza2V5Z2VuYXNzaXN0 CVwkMHgyMCwleG1tMCwleG1tMQkjIHJvdW5kIDEzCisrCWNhbGwJCS5Ma2V5X2V4cGFuc2lvbl8y NTZiCisrCWFlc2tleWdlbmFzc2lzdAlcJDB4NDAsJXhtbTIsJXhtbTEJIyByb3VuZCAxNAorKwlj YWxsCQkuTGtleV9leHBhbnNpb25fMjU2YQorKwkkbW92a2V5CSV4bW0wLCglcmF4KQorKwltb3YJ JGJpdHMsMTYoJXJheCkJIyAyNDAoJXJkeCkKKysJeG9yCSVyYXgsJXJheAorKwlqbXAJLkxlbmNf a2V5X3JldAorKworKy5hbGlnbgkxNgorKy5MYmFkX2tleWJpdHM6CisrCW1vdglcJC0yLCVyYXgK KysuTGVuY19rZXlfcmV0OgorKwlhZGQJXCQ4LCVyc3AKKysJcmV0CisrLkxTRUhfZW5kX3NldF9l bmNyeXB0X2tleToKKysMCisrLmFsaWduCTE2CisrLkxrZXlfZXhwYW5zaW9uXzEyODoKKysJJG1v dmtleQkleG1tMCwoJXJheCkKKysJbGVhCTE2KCVyYXgpLCVyYXgKKysuTGtleV9leHBhbnNpb25f MTI4X2NvbGQ6CisrCXNodWZwcwlcJDBiMDAwMTAwMDAsJXhtbTAsJXhtbTQKKysJcHhvcgkleG1t NCwgJXhtbTAKKysJc2h1ZnBzCVwkMGIxMDAwMTEwMCwleG1tMCwleG1tNAorKwlweG9yCSV4bW00 LCAleG1tMAorKwlwc2h1ZmQJXCQwYjExMTExMTExLCV4bW0xLCV4bW0xCSMgY3JpdGljYWwgcGF0 aAorKwlweG9yCSV4bW0xLCV4bW0wCisrCXJldAorKworKy5hbGlnbiAxNgorKy5Ma2V5X2V4cGFu c2lvbl8xOTJhOgorKwkkbW92a2V5CSV4bW0wLCglcmF4KQorKwlsZWEJMTYoJXJheCksJXJheAor Ky5Ma2V5X2V4cGFuc2lvbl8xOTJhX2NvbGQ6CisrCW1vdmFwcwkleG1tMiwgJXhtbTUKKysuTGtl eV9leHBhbnNpb25fMTkyYl93YXJtOgorKwlzaHVmcHMJXCQwYjAwMDEwMDAwLCV4bW0wLCV4bW00 CisrCW1vdmFwcwkleG1tMiwleG1tMworKwlweG9yCSV4bW00LCV4bW0wCisrCXNodWZwcwlcJDBi MTAwMDExMDAsJXhtbTAsJXhtbTQKKysJcHNsbGRxCVwkNCwleG1tMworKwlweG9yCSV4bW00LCV4 bW0wCisrCXBzaHVmZAlcJDBiMDEwMTAxMDEsJXhtbTEsJXhtbTEJIyBjcml0aWNhbCBwYXRoCisr CXB4b3IJJXhtbTMsJXhtbTIKKysJcHhvcgkleG1tMSwleG1tMAorKwlwc2h1ZmQJXCQwYjExMTEx MTExLCV4bW0wLCV4bW0zCisrCXB4b3IJJXhtbTMsJXhtbTIKKysJcmV0CisrCisrLmFsaWduIDE2 CisrLkxrZXlfZXhwYW5zaW9uXzE5MmI6CisrCW1vdmFwcwkleG1tMCwleG1tMworKwlzaHVmcHMJ XCQwYjAxMDAwMTAwLCV4bW0wLCV4bW01CisrCSRtb3ZrZXkJJXhtbTUsKCVyYXgpCisrCXNodWZw cwlcJDBiMDEwMDExMTAsJXhtbTIsJXhtbTMKKysJJG1vdmtleQkleG1tMywxNiglcmF4KQorKwls ZWEJMzIoJXJheCksJXJheAorKwlqbXAJLkxrZXlfZXhwYW5zaW9uXzE5MmJfd2FybQorKworKy5h bGlnbgkxNgorKy5Ma2V5X2V4cGFuc2lvbl8yNTZhOgorKwkkbW92a2V5CSV4bW0yLCglcmF4KQor KwlsZWEJMTYoJXJheCksJXJheAorKy5Ma2V5X2V4cGFuc2lvbl8yNTZhX2NvbGQ6CisrCXNodWZw cwlcJDBiMDAwMTAwMDAsJXhtbTAsJXhtbTQKKysJcHhvcgkleG1tNCwleG1tMAorKwlzaHVmcHMJ XCQwYjEwMDAxMTAwLCV4bW0wLCV4bW00CisrCXB4b3IJJXhtbTQsJXhtbTAKKysJcHNodWZkCVwk MGIxMTExMTExMSwleG1tMSwleG1tMQkjIGNyaXRpY2FsIHBhdGgKKysJcHhvcgkleG1tMSwleG1t MAorKwlyZXQKKysKKysuYWxpZ24gMTYKKysuTGtleV9leHBhbnNpb25fMjU2YjoKKysJJG1vdmtl eQkleG1tMCwoJXJheCkKKysJbGVhCTE2KCVyYXgpLCVyYXgKKysKKysJc2h1ZnBzCVwkMGIwMDAx MDAwMCwleG1tMiwleG1tNAorKwlweG9yCSV4bW00LCV4bW0yCisrCXNodWZwcwlcJDBiMTAwMDEx MDAsJXhtbTIsJXhtbTQKKysJcHhvcgkleG1tNCwleG1tMgorKwlwc2h1ZmQJXCQwYjEwMTAxMDEw LCV4bW0xLCV4bW0xCSMgY3JpdGljYWwgcGF0aAorKwlweG9yCSV4bW0xLCV4bW0yCisrCXJldAor Ky5zaXplCSR7UFJFRklYfV9zZXRfZW5jcnlwdF9rZXksLi0ke1BSRUZJWH1fc2V0X2VuY3J5cHRf a2V5CisrX19fCisrfQorKwwKKyskY29kZS49PDxfX187CisrLmFzY2l6ICAiQUVTIGZvciBJbnRl bCBBRVMtTkksIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCisrLmFsaWduCTY0 CisrX19fCisrCisrIyBFWENFUFRJT05fRElTUE9TSVRJT04gaGFuZGxlciAoRVhDRVBUSU9OX1JF Q09SRCAqcmVjLFVMT05HNjQgZnJhbWUsCisrIwkJQ09OVEVYVCAqY29udGV4dCxESVNQQVRDSEVS X0NPTlRFWFQgKmRpc3ApCisraWYgKCR3aW42NCkgeworKyRyZWM9IiVyY3giOworKyRmcmFtZT0i JXJkeCI7CisrJGNvbnRleHQ9IiVyOCI7CisrJGRpc3A9IiVyOSI7CisrCisrJGNvZGUuPTw8X19f OworKy5leHRlcm4JX19pbXBfUnRsVmlydHVhbFVud2luZAorKy50eXBlCWNiY19zZV9oYW5kbGVy LFxAYWJpLW9tbmlwb3RlbnQKKysuYWxpZ24JMTYKKytjYmNfc2VfaGFuZGxlcjoKKysJcHVzaAkl cnNpCisrCXB1c2gJJXJkaQorKwlwdXNoCSVyYngKKysJcHVzaAklcmJwCisrCXB1c2gJJXIxMgor KwlwdXNoCSVyMTMKKysJcHVzaAklcjE0CisrCXB1c2gJJXIxNQorKwlwdXNoZnEKKysJc3ViCVwk NjQsJXJzcAorKworKwltb3YJMTUyKCRjb250ZXh0KSwlcmF4CSMgcHVsbCBjb250ZXh0LT5Sc3AK KysJbW92CTI0OCgkY29udGV4dCksJXJieAkjIHB1bGwgY29udGV4dC0+UmlwCisrCisrCWxlYQku TGNiY19kZWNyeXB0KCVyaXApLCVyMTAKKysJY21wCSVyMTAsJXJieAkJIyBjb250ZXh0LT5SaXA8 InByb2xvZ3VlIiBsYWJlbAorKwlqYgkuTGluX3Byb2xvZ3VlCisrCisrCWxlYQkuTGNiY19kZWNy eXB0X2JvZHkoJXJpcCksJXIxMAorKwljbXAJJXIxMCwlcmJ4CQkjIGNvbnRleHQtPlJpcDxjYmNf ZGVjcnlwdF9ib2R5CisrCWpiCS5McmVzdG9yZV9yYXgKKysKKysJbGVhCS5MY2JjX3JldCglcmlw KSwlcjEwCisrCWNtcAklcjEwLCVyYngJCSMgY29udGV4dC0+UmlwPj0iZXBpbG9ndWUiIGxhYmVs CisrCWphZQkuTGluX3Byb2xvZ3VlCisrCisrCWxlYQkwKCVyYXgpLCVyc2kJCSMgdG9wIG9mIHN0 YWNrCisrCWxlYQk1MTIoJGNvbnRleHQpLCVyZGkJIyAmY29udGV4dC5YbW02CisrCW1vdglcJDgs JWVjeAkJIyA0KnNpemVvZigleG1tMCkvc2l6ZW9mKCVyYXgpCisrCS5sb25nCTB4YTU0OGYzZmMJ CSMgY2xkOyByZXAgbW92c3EKKysJbGVhCTB4NTgoJXJheCksJXJheAkJIyBhZGp1c3Qgc3RhY2sg cG9pbnRlcgorKwlqbXAJLkxpbl9wcm9sb2d1ZQorKworKy5McmVzdG9yZV9yYXg6CisrCW1vdgkx MjAoJGNvbnRleHQpLCVyYXgKKysuTGluX3Byb2xvZ3VlOgorKwltb3YJOCglcmF4KSwlcmRpCisr CW1vdgkxNiglcmF4KSwlcnNpCisrCW1vdgklcmF4LDE1MigkY29udGV4dCkJIyByZXN0b3JlIGNv bnRleHQtPlJzcAorKwltb3YJJXJzaSwxNjgoJGNvbnRleHQpCSMgcmVzdG9yZSBjb250ZXh0LT5S c2kKKysJbW92CSVyZGksMTc2KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4dC0+UmRpCisrCisr CWptcAkuTGNvbW1vbl9zZWhfZXhpdAorKy5zaXplCWNiY19zZV9oYW5kbGVyLC4tY2JjX3NlX2hh bmRsZXIKKysKKysudHlwZQllY2Jfc2VfaGFuZGxlcixcQGFiaS1vbW5pcG90ZW50CisrLmFsaWdu CTE2CisrZWNiX3NlX2hhbmRsZXI6CisrCXB1c2gJJXJzaQorKwlwdXNoCSVyZGkKKysJcHVzaAkl cmJ4CisrCXB1c2gJJXJicAorKwlwdXNoCSVyMTIKKysJcHVzaAklcjEzCisrCXB1c2gJJXIxNAor KwlwdXNoCSVyMTUKKysJcHVzaGZxCisrCXN1YglcJDY0LCVyc3AKKysKKysJbW92CTE1MigkY29u dGV4dCksJXJheAkjIHB1bGwgY29udGV4dC0+UnNwCisrCW1vdgk4KCVyYXgpLCVyZGkKKysJbW92 CTE2KCVyYXgpLCVyc2kKKysJbW92CSVyc2ksMTY4KCRjb250ZXh0KQkjIHJlc3RvcmUgY29udGV4 dC0+UnNpCisrCW1vdgklcmRpLDE3NigkY29udGV4dCkJIyByZXN0b3JlIGNvbnRleHQtPlJkaQor KworKy5MY29tbW9uX3NlaF9leGl0OgorKworKwltb3YJNDAoJGRpc3ApLCVyZGkJCSMgZGlzcC0+ Q29udGV4dFJlY29yZAorKwltb3YJJGNvbnRleHQsJXJzaQkJIyBjb250ZXh0CisrCW1vdglcJDE1 NCwlZWN4CQkjIHNpemVvZihDT05URVhUKQorKwkubG9uZwkweGE1NDhmM2ZjCQkjIGNsZDsgcmVw IG1vdnNxCisrCisrCW1vdgkkZGlzcCwlcnNpCisrCXhvcgklcmN4LCVyY3gJCSMgYXJnMSwgVU5X X0ZMQUdfTkhBTkRMRVIKKysJbW92CTgoJXJzaSksJXJkeAkJIyBhcmcyLCBkaXNwLT5JbWFnZUJh c2UKKysJbW92CTAoJXJzaSksJXI4CQkjIGFyZzMsIGRpc3AtPkNvbnRyb2xQYworKwltb3YJMTYo JXJzaSksJXI5CQkjIGFyZzQsIGRpc3AtPkZ1bmN0aW9uRW50cnkKKysJbW92CTQwKCVyc2kpLCVy MTAJCSMgZGlzcC0+Q29udGV4dFJlY29yZAorKwlsZWEJNTYoJXJzaSksJXIxMQkJIyAmZGlzcC0+ SGFuZGxlckRhdGEKKysJbGVhCTI0KCVyc2kpLCVyMTIJCSMgJmRpc3AtPkVzdGFibGlzaGVyRnJh bWUKKysJbW92CSVyMTAsMzIoJXJzcCkJCSMgYXJnNQorKwltb3YJJXIxMSw0MCglcnNwKQkJIyBh cmc2CisrCW1vdgklcjEyLDQ4KCVyc3ApCQkjIGFyZzcKKysJbW92CSVyY3gsNTYoJXJzcCkJCSMg YXJnOCwgKE5VTEwpCisrCWNhbGwJKl9faW1wX1J0bFZpcnR1YWxVbndpbmQoJXJpcCkKKysKKysJ bW92CVwkMSwlZWF4CQkjIEV4Y2VwdGlvbkNvbnRpbnVlU2VhcmNoCisrCWFkZAlcJDY0LCVyc3AK KysJcG9wZnEKKysJcG9wCSVyMTUKKysJcG9wCSVyMTQKKysJcG9wCSVyMTMKKysJcG9wCSVyMTIK KysJcG9wCSVyYnAKKysJcG9wCSVyYngKKysJcG9wCSVyZGkKKysJcG9wCSVyc2kKKysJcmV0Cisr LnNpemUJY2JjX3NlX2hhbmRsZXIsLi1jYmNfc2VfaGFuZGxlcgorKworKy5zZWN0aW9uCS5wZGF0 YQorKy5hbGlnbgk0CisrCS5ydmEJLkxTRUhfYmVnaW5fJHtQUkVGSVh9X2VjYl9lbmNyeXB0Cisr CS5ydmEJLkxTRUhfZW5kXyR7UFJFRklYfV9lY2JfZW5jcnlwdAorKwkucnZhCS5MU0VIX2luZm9f ZWNiCisrCisrCS5ydmEJLkxTRUhfYmVnaW5fJHtQUkVGSVh9X2NiY19lbmNyeXB0CisrCS5ydmEJ LkxTRUhfZW5kXyR7UFJFRklYfV9jYmNfZW5jcnlwdAorKwkucnZhCS5MU0VIX2luZm9fY2JjCisr CisrCS5ydmEJJHtQUkVGSVh9X3NldF9kZWNyeXB0X2tleQorKwkucnZhCS5MU0VIX2VuZF9zZXRf ZGVjcnlwdF9rZXkKKysJLnJ2YQkuTFNFSF9pbmZvX2tleQorKworKwkucnZhCSR7UFJFRklYfV9z ZXRfZW5jcnlwdF9rZXkKKysJLnJ2YQkuTFNFSF9lbmRfc2V0X2VuY3J5cHRfa2V5CisrCS5ydmEJ LkxTRUhfaW5mb19rZXkKKysuc2VjdGlvbgkueGRhdGEKKysuYWxpZ24JOAorKy5MU0VIX2luZm9f ZWNiOgorKwkuYnl0ZQk5LDAsMCwwCisrCS5ydmEJZWNiX3NlX2hhbmRsZXIKKysuTFNFSF9pbmZv X2NiYzoKKysJLmJ5dGUJOSwwLDAsMAorKwkucnZhCWNiY19zZV9oYW5kbGVyCisrLkxTRUhfaW5m b19rZXk6CisrCS5ieXRlCTB4MDEsMHgwNCwweDAxLDB4MDAKKysJLmJ5dGUJMHgwNCwweDAyLDB4 MDAsMHgwMAorK19fXworK30KKysKKytzdWIgcmV4IHsKKysgbG9jYWwgKm9wY29kZT1zaGlmdDsK KysgbXkgKCRkc3QsJHNyYyk9QF87CisrCisrICAgaWYgKCRkc3Q+PTggfHwgJHNyYz49OCkgewor KwkkcmV4PTB4NDA7CisrCSRyZXh8PTB4MDQgaWYoJGRzdD49OCk7CisrCSRyZXh8PTB4MDEgaWYo JHNyYz49OCk7CisrCXB1c2ggQG9wY29kZSwkcmV4OworKyAgIH0KKyt9CisrCisrc3ViIGFlc25p IHsKKysgIG15ICRsaW5lPXNoaWZ0OworKyAgbXkgQG9wY29kZT0oMHg2Nik7CisrCisrICAgIGlm ICgkbGluZT1+LyhhZXNrZXlnZW5hc3Npc3QpXHMrXCQoW3gwLTlhLWZdKyksXHMqJXhtbShbMC05 XSspLFxzKiV4bW0oWzAtOV0rKS8pIHsKKysJcmV4KFxAb3Bjb2RlLCQ0LCQzKTsKKysJcHVzaCBA b3Bjb2RlLDB4MGYsMHgzYSwweGRmOworKwlwdXNoIEBvcGNvZGUsMHhjMHwoJDMmNyl8KCgkNCY3 KTw8Myk7CSMgTW9kUi9NCisrCW15ICRjPSQyOworKwlwdXNoIEBvcGNvZGUsJGM9fi9eMC8/b2N0 KCRjKTokYzsKKysJcmV0dXJuICIuYnl0ZVx0Ii5qb2luKCcsJyxAb3Bjb2RlKTsKKysgICAgfQor KyAgICBlbHNpZiAoJGxpbmU9fi8oYWVzW2Etel0rKVxzKyV4bW0oWzAtOV0rKSxccyoleG1tKFsw LTldKykvKSB7CisrCW15ICVvcGNvZGVsZXQgPSAoCisrCQkiYWVzaW1jIiA9PiAweGRiLAorKwkJ ImFlc2VuYyIgPT4gMHhkYywJImFlc2VuY2xhc3QiID0+IDB4ZGQsCisrCQkiYWVzZGVjIiA9PiAw eGRlLAkiYWVzZGVjbGFzdCIgPT4gMHhkZgorKwkpOworKwlyZXR1cm4gdW5kZWYgaWYgKCFkZWZp bmVkKCRvcGNvZGVsZXR7JDF9KSk7CisrCXJleChcQG9wY29kZSwkMywkMik7CisrCXB1c2ggQG9w Y29kZSwweDBmLDB4MzgsJG9wY29kZWxldHskMX07CisrCXB1c2ggQG9wY29kZSwweGMwfCgkMiY3 KXwoKCQzJjcpPDwzKTsJIyBNb2RSL00KKysJcmV0dXJuICIuYnl0ZVx0Ii5qb2luKCcsJyxAb3Bj b2RlKTsKKysgICAgfQorKyAgICByZXR1cm4gJGxpbmU7CisrfQorKworKyRjb2RlID1+IHMvXGAo W15cYF0qKVxgL2V2YWwoJDEpL2dlbTsKKyskY29kZSA9fiBzL1xiKGFlcy4qJXhtbVswLTldKyku KiQvYWVzbmkoJDEpL2dlbTsKKysKKytwcmludCAkY29kZTsKKysKKytjbG9zZSBTVERPVVQ7Citk aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9hZXMvTWFrZWZpbGUuYWVzbmkgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYWVzL01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vYWVzL01ha2VmaWxlLmFlc25pCTIwMDgtMTItMjMgMTI6MzM6MDAuMDAwMDAw MDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYWVzL01ha2VmaWxlCTIw MTAtMDEtMTIgMjI6MTg6MDYuMDAwMDAwMDAwICswMTAwCitAQCAtNTAsOSArNTAsMTMgQEAgYWVz LWlhNjQuczogYXNtL2Flcy1pYTY0LlMKKyAKKyBhZXMtNTg2LnM6CWFzbS9hZXMtNTg2LnBsIC4u L3Blcmxhc20veDg2YXNtLnBsCisgCSQoUEVSTCkgYXNtL2Flcy01ODYucGwgJChQRVJMQVNNX1ND SEVNRSkgJChDRkxBR1MpICQoUFJPQ0VTU09SKSA+ICRACisrYWVzbmkteDg2LnM6CWFzbS9hZXNu aS14ODYucGwgLi4vcGVybGFzbS94ODZhc20ucGwKKysJJChQRVJMKSBhc20vYWVzbmkteDg2LnBs ICQoUEVSTEFTTV9TQ0hFTUUpICQoQ0ZMQUdTKSAkKFBST0NFU1NPUikgPiAkQAorIAorIGFlcy14 ODZfNjQuczogYXNtL2Flcy14ODZfNjQucGwKKyAJJChQRVJMKSBhc20vYWVzLXg4Nl82NC5wbCAk KFBFUkxBU01fU0NIRU1FKSA+ICRACisrYWVzbmkteDg2XzY0LnM6IGFzbS9hZXNuaS14ODZfNjQu cGwKKysJJChQRVJMKSBhc20vYWVzbmkteDg2XzY0LnBsICQoUEVSTEFTTV9TQ0hFTUUpID4gJEAK KyAKKyBhZXMtc3BhcmN2OS5zOiBhc20vYWVzLXNwYXJjdjkucGwKKyAJJChQRVJMKSBhc20vYWVz LXNwYXJjdjkucGwgJChDRkxBR1MpID4gJEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQv Y3J5cHRvL2VuZ2luZS9lbmdfYWVzbmkuYy5hZXNuaSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9lbmdpbmUvZW5nX2Flc25pLmMKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9lbmdp bmUvZW5nX2Flc25pLmMuYWVzbmkJMjAxMC0wMS0xMiAyMjoxODowNi4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9lbmdpbmUvZW5nX2Flc25pLmMJMjAxMC0w MS0xMiAyMjoxODowNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0wLDAgKzEsNDEzIEBACisrLyoKKysg KiBTdXBwb3J0IGZvciBJbnRlbCBBRVMtTkkgaW50cnVjdGlvbiBzZXQKKysgKiAgIEF1dGhvcjog SHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CisrICoKKysgKiBJbnRlbCBBRVMtTkkg aXMgYSBuZXcgc2V0IG9mIFNpbmdsZSBJbnN0cnVjdGlvbiBNdWx0aXBsZSBEYXRhCisrICogKFNJ TUQpIGluc3RydWN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZSBpbnRyb2R1Y2VkIGluIHRoZSBu ZXh0CisrICogZ2VuZXJhdGlvbiBvZiBJbnRlbCBwcm9jZXNzb3IsIGFzIG9mIDIwMDkuIFRoZXNl IGluc3RydWN0aW9ucworKyAqIGVuYWJsZSBmYXN0IGFuZCBzZWN1cmUgZGF0YSBlbmNyeXB0aW9u IGFuZCBkZWNyeXB0aW9uLCB1c2luZyB0aGUKKysgKiBBZHZhbmNlZCBFbmNyeXB0aW9uIFN0YW5k YXJkIChBRVMpLCBkZWZpbmVkIGJ5IEZJUFMgUHVibGljYXRpb24KKysgKiBudW1iZXIgMTk3LiAg VGhlIGFyY2hpdGVjdHVyZSBpbnRyb2R1Y2VzIHNpeCBpbnN0cnVjdGlvbnMgdGhhdAorKyAqIG9m ZmVyIGZ1bGwgaGFyZHdhcmUgc3VwcG9ydCBmb3IgQUVTLiBGb3VyIG9mIHRoZW0gc3VwcG9ydCBo aWdoCisrICogcGVyZm9ybWFuY2UgZGF0YSBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLCBhbmQg dGhlIG90aGVyIHR3bworKyAqIGluc3RydWN0aW9ucyBzdXBwb3J0IHRoZSBBRVMga2V5IGV4cGFu c2lvbiBwcm9jZWR1cmUuCisrICoKKysgKiBUaGUgd2hpdGUgcGFwZXIgY2FuIGJlIGRvd25sb2Fk ZWQgZnJvbToKKysgKiAgIGh0dHA6Ly9zb2Z0d2FyZWNvbW11bml0eS5pbnRlbC5jb20vaXNuL2Rv d25sb2Fkcy9pbnRlbGF2eC9BRVMtSW5zdHJ1Y3Rpb25zLVNldF9XUC5wZGYKKysgKgorKyAqIFRo aXMgZmlsZSBpcyBiYXNlZCBvbiBlbmdpbmVzL2VfcGFkbG9jay5jCisrICovCisrCisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlv bi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBs aWNlbnNpbmdAT3BlblNTTC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisr ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysg KgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK KysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KKysgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqCisrICogVGhpcyBwcm9kdWN0IGluY2x1ZGVz IGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisrICogKGVheUBj cnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IFRpbQorKyAqIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqCisrICovCisrCisrCisr I2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KKysKKysjaWYgIWRlZmluZWQoT1BFTlNT TF9OT19IVykgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19IV19BRVNfTkkpICYmICFkZWZpbmVkKE9Q RU5TU0xfTk9fQUVTKQorKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlICJjcnlwdGxp Yi5oIgorKyNpbmNsdWRlIDxvcGVuc3NsL2Rzby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2VuZ2lu ZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL21vZGVzLmg+ CisrCisrLyogQUVTLU5JIGlzIGF2YWlsYWJsZSAqT05MWSogb24gc29tZSB4ODYgQ1BVcy4gIE5v dCBvbmx5IHRoYXQgaXQKKysgICBkb2Vzbid0IGV4aXN0IGVsc2V3aGVyZSwgYnV0IGl0IGV2ZW4g Y2FuJ3QgYmUgY29tcGlsZWQgb24gb3RoZXIKKysgICBwbGF0Zm9ybXMhICovCisrI3VuZGVmIENP TVBJTEVfSFdfQUVTTkkKKysjaWYgKGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZf NjRfXykgfHwgXAorKyAgICAgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9YNjQpIHx8 IFwKKysgICAgIGRlZmluZWQoT1BFTlNTTF9JQTMyX1NTRTIpKSAmJiAhZGVmaW5lZChPUEVOU1NM X05PX0FTTSkKKysjZGVmaW5lIENPTVBJTEVfSFdfQUVTTkkKKytzdGF0aWMgRU5HSU5FICpFTkdJ TkVfYWVzbmkgKHZvaWQpOworKyNlbmRpZgorKworK3ZvaWQgRU5HSU5FX2xvYWRfYWVzbmkgKHZv aWQpCisreworKy8qIE9uIG5vbi14ODYgQ1BVcyBpdCBqdXN0IHJldHVybnMuICovCisrI2lmZGVm IENPTVBJTEVfSFdfQUVTTkkKKysJRU5HSU5FICp0b2FkZCA9IEVOR0lORV9hZXNuaSgpOworKwlp ZiAoIXRvYWRkKQorKwkJcmV0dXJuOworKwlFTkdJTkVfYWRkICh0b2FkZCk7CisrCUVOR0lORV9y ZWdpc3Rlcl9jb21wbGV0ZSAodG9hZGQpOworKwlFTkdJTkVfZnJlZSAodG9hZGQpOworKwlFUlJf Y2xlYXJfZXJyb3IgKCk7CisrI2VuZGlmCisrfQorKworKyNpZmRlZiBDT01QSUxFX0hXX0FFU05J CisraW50IGFlc25pX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5 LCBpbnQgYml0cywKKysJCQkgICAgICBBRVNfS0VZICprZXkpOworK2ludCBhZXNuaV9zZXRfZGVj cnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgaW50IGJpdHMsCisrCQkJICAg ICAgQUVTX0tFWSAqa2V5KTsKKysKKyt2b2lkIGFlc25pX2VuY3J5cHQoY29uc3QgdW5zaWduZWQg Y2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCSAgICAgICBjb25zdCBBRVNfS0VZICpr ZXkpOworK3ZvaWQgYWVzbmlfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWdu ZWQgY2hhciAqb3V0LAorKwkJICAgICAgIGNvbnN0IEFFU19LRVkgKmtleSk7CisrCisrdm9pZCBh ZXNuaV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKysJCQkgICB1bnNpZ25l ZCBjaGFyICpvdXQsCisrCQkJICAgc2l6ZV90IGxlbmd0aCwKKysJCQkgICBjb25zdCBBRVNfS0VZ ICprZXksCisrCQkJICAgaW50IGVuYyk7Cisrdm9pZCBhZXNuaV9jYmNfZW5jcnlwdChjb25zdCB1 bnNpZ25lZCBjaGFyICppbiwKKysJCQkgICB1bnNpZ25lZCBjaGFyICpvdXQsCisrCQkJICAgc2l6 ZV90IGxlbmd0aCwKKysJCQkgICBjb25zdCBBRVNfS0VZICprZXksCisrCQkJICAgdW5zaWduZWQg Y2hhciAqaXZlYywgaW50IGVuYyk7CisrCisrLyogRnVuY3Rpb24gZm9yIEVOR0lORSBkZXRlY3Rp b24gYW5kIGNvbnRyb2wgKi8KKytzdGF0aWMgaW50IGFlc25pX2luaXQoRU5HSU5FICplKTsKKysK KysvKiBDaXBoZXIgU3R1ZmYgKi8KKytzdGF0aWMgaW50IGFlc25pX2NpcGhlcnMoRU5HSU5FICpl LCBjb25zdCBFVlBfQ0lQSEVSICoqY2lwaGVyLAorKwkJCQljb25zdCBpbnQgKipuaWRzLCBpbnQg bmlkKTsKKysKKysjZGVmaW5lIEFFU05JX01JTl9BTElHTgkxNgorKyNkZWZpbmUgQUVTTklfQUxJ R04oeCkgXAorKwkoKHZvaWQgKikoKCh1bnNpZ25lZCBsb25nKSh4KStBRVNOSV9NSU5fQUxJR04t MSkmfihBRVNOSV9NSU5fQUxJR04tMSkpKQorKworKy8qIEVuZ2luZSBuYW1lcyAqLworK3N0YXRp YyBjb25zdCBjaGFyICAgYWVzbmlfaWRbXSA9ICJhZXNuaSIsCisrCQkgICAgYWVzbmlfbmFtZVtd ID0gIkludGVsIEFFUy1OSSBlbmdpbmUiLAorKwkJICAgIG5vX2Flc25pX25hbWVbXSA9ICJJbnRl bCBBRVMtTkkgZW5naW5lIChuby1hZXNuaSkiOworKworKy8qID09PT09IEVuZ2luZSAibWFuYWdl bWVudCIgZnVuY3Rpb25zID09PT09ICovCisrCisrI2lmIGRlZmluZWQoX1dJTjMyKQorK3R5cGVk ZWYgdW5zaWduZWQgX19pbnQ2NCBJQTMyQ0FQOworKyNlbHNlCisrdHlwZWRlZiB1bnNpZ25lZCBs b25nIGxvbmcgSUEzMkNBUDsKKysjZW5kaWYKKysKKysvKiBQcmVwYXJlIHRoZSBFTkdJTkUgc3Ry dWN0dXJlIGZvciByZWdpc3RyYXRpb24gKi8KKytzdGF0aWMgaW50CisrYWVzbmlfYmluZF9oZWxw ZXIoRU5HSU5FICplKQorK3sKKysJaW50IGVuZ2FnZTsKKysJaWYgKHNpemVvZihPUEVOU1NMX2lh MzJjYXBfUCkgPiA0KSB7CisrCQllbmdhZ2UgPSAoT1BFTlNTTF9pYTMyY2FwX1AgPj4gNTcpICYg MTsKKysJfSBlbHNlIHsKKysJCUlBMzJDQVAgT1BFTlNTTF9pYTMyX2NwdWlkKHZvaWQpOworKwkJ ZW5nYWdlID0gKE9QRU5TU0xfaWEzMl9jcHVpZCgpID4+IDU3KSAmIDE7CisrCX0KKysKKysJLyog UmVnaXN0ZXIgZXZlcnl0aGluZyBvciByZXR1cm4gd2l0aCBhbiBlcnJvciAqLworKwlpZiAoIUVO R0lORV9zZXRfaWQoZSwgYWVzbmlfaWQpIHx8CisrCSAgICAhRU5HSU5FX3NldF9uYW1lKGUsIGVu Z2FnZSA/IGFlc25pX25hbWUgOiBub19hZXNuaV9uYW1lKSB8fAorKworKwkgICAgIUVOR0lORV9z ZXRfaW5pdF9mdW5jdGlvbihlLCBhZXNuaV9pbml0KSB8fAorKwkgICAgKGVuZ2FnZSAmJiAhRU5H SU5FX3NldF9jaXBoZXJzIChlLCBhZXNuaV9jaXBoZXJzKSkKKysJICAgICkKKysJCXJldHVybiAw OworKworKwkvKiBFdmVyeXRoaW5nIGxvb2tzIGdvb2QgKi8KKysJcmV0dXJuIDE7CisrfQorKwor Ky8qIENvbnN0cnVjdG9yICovCisrc3RhdGljIEVOR0lORSAqCisrRU5HSU5FX2Flc25pKHZvaWQp CisreworKwlFTkdJTkUgKmVuZyA9IEVOR0lORV9uZXcoKTsKKysKKysJaWYgKCFlbmcpIHsKKysJ CXJldHVybiBOVUxMOworKwl9CisrCisrCWlmICghYWVzbmlfYmluZF9oZWxwZXIoZW5nKSkgewor KwkJRU5HSU5FX2ZyZWUoZW5nKTsKKysJCXJldHVybiBOVUxMOworKwl9CisrCisrCXJldHVybiBl bmc7CisrfQorKworKy8qIENoZWNrIGF2YWlsYWJpbGl0eSBvZiB0aGUgZW5naW5lICovCisrc3Rh dGljIGludAorK2Flc25pX2luaXQoRU5HSU5FICplKQorK3sKKysJcmV0dXJuIDE7CisrfQorKwor KyNpZiBkZWZpbmVkKE5JRF9hZXNfMTI4X2NmYjEyOCkgJiYgISBkZWZpbmVkIChOSURfYWVzXzEy OF9jZmIpCisrI2RlZmluZSBOSURfYWVzXzEyOF9jZmIJTklEX2Flc18xMjhfY2ZiMTI4CisrI2Vu ZGlmCisrCisrI2lmIGRlZmluZWQoTklEX2Flc18xMjhfb2ZiMTI4KSAmJiAhIGRlZmluZWQgKE5J RF9hZXNfMTI4X29mYikKKysjZGVmaW5lIE5JRF9hZXNfMTI4X29mYglOSURfYWVzXzEyOF9vZmIx MjgKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChOSURfYWVzXzE5Ml9jZmIxMjgpICYmICEgZGVm aW5lZCAoTklEX2Flc18xOTJfY2ZiKQorKyNkZWZpbmUgTklEX2Flc18xOTJfY2ZiCU5JRF9hZXNf MTkyX2NmYjEyOAorKyNlbmRpZgorKworKyNpZiBkZWZpbmVkKE5JRF9hZXNfMTkyX29mYjEyOCkg JiYgISBkZWZpbmVkIChOSURfYWVzXzE5Ml9vZmIpCisrI2RlZmluZSBOSURfYWVzXzE5Ml9vZmIJ TklEX2Flc18xOTJfb2ZiMTI4CisrI2VuZGlmCisrCisrI2lmIGRlZmluZWQoTklEX2Flc18yNTZf Y2ZiMTI4KSAmJiAhIGRlZmluZWQgKE5JRF9hZXNfMjU2X2NmYikKKysjZGVmaW5lIE5JRF9hZXNf MjU2X2NmYglOSURfYWVzXzI1Nl9jZmIxMjgKKysjZW5kaWYKKysKKysjaWYgZGVmaW5lZChOSURf YWVzXzI1Nl9vZmIxMjgpICYmICEgZGVmaW5lZCAoTklEX2Flc18yNTZfb2ZiKQorKyNkZWZpbmUg TklEX2Flc18yNTZfb2ZiCU5JRF9hZXNfMjU2X29mYjEyOAorKyNlbmRpZgorKworKy8qIExpc3Qg b2Ygc3VwcG9ydGVkIGNpcGhlcnMuICovCisrc3RhdGljIGludCBhZXNuaV9jaXBoZXJfbmlkc1td ID0geworKwlOSURfYWVzXzEyOF9lY2IsCisrCU5JRF9hZXNfMTI4X2NiYywKKysJTklEX2Flc18x MjhfY2ZiLAorKwlOSURfYWVzXzEyOF9vZmIsCisrCisrCU5JRF9hZXNfMTkyX2VjYiwKKysJTklE X2Flc18xOTJfY2JjLAorKwlOSURfYWVzXzE5Ml9jZmIsCisrCU5JRF9hZXNfMTkyX29mYiwKKysK KysJTklEX2Flc18yNTZfZWNiLAorKwlOSURfYWVzXzI1Nl9jYmMsCisrCU5JRF9hZXNfMjU2X2Nm YiwKKysJTklEX2Flc18yNTZfb2ZiLAorK307Cisrc3RhdGljIGludCBhZXNuaV9jaXBoZXJfbmlk c19udW0gPQorKwkoc2l6ZW9mKGFlc25pX2NpcGhlcl9uaWRzKS9zaXplb2YoYWVzbmlfY2lwaGVy X25pZHNbMF0pKTsKKysKKyt0eXBlZGVmIHN0cnVjdAorK3sKKysJQUVTX0tFWSBrczsKKysJdW5z aWduZWQgaW50IF9wYWQxWzNdOworK30gQUVTTklfS0VZOworKworK3N0YXRpYyBpbnQKKythZXNu aV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICp1c2Vy X2tleSwKKysJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKKyt7CisrCWlu dCByZXQ7CisrCUFFU19LRVkgKmtleSA9IEFFU05JX0FMSUdOKGN0eC0+Y2lwaGVyX2RhdGEpOwor KworKwlpZiAoKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX01PREUpID09IEVWUF9DSVBI X0NGQl9NT0RFCisrCSAgICB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfTU9ERSkg PT0gRVZQX0NJUEhfT0ZCX01PREUKKysJICAgIHx8IGVuYykKKysJCXJldD1hZXNuaV9zZXRfZW5j cnlwdF9rZXkodXNlcl9rZXksIGN0eC0+a2V5X2xlbiAqIDgsIGtleSk7CisrCWVsc2UKKysJCXJl dD1hZXNuaV9zZXRfZGVjcnlwdF9rZXkodXNlcl9rZXksIGN0eC0+a2V5X2xlbiAqIDgsIGtleSk7 CisrCisrCWlmKHJldCA8IDApIHsKKysJCUVWUGVycihFVlBfRl9BRVNOSV9JTklUX0tFWSxFVlBf Ul9BRVNfS0VZX1NFVFVQX0ZBSUxFRCk7CisrCQlyZXR1cm4gMDsKKysJfQorKworKwlyZXR1cm4g MTsKKyt9CisrCisrc3RhdGljIGludCBhZXNuaV9jaXBoZXJfZWNiKEVWUF9DSVBIRVJfQ1RYICpj dHgsIHVuc2lnbmVkIGNoYXIgKm91dCwKKysJCSBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6 ZV90IGlubCkKKyt7CUFFU19LRVkgKmtleSA9IEFFU05JX0FMSUdOKGN0eC0+Y2lwaGVyX2RhdGEp OworKwlhZXNuaV9lY2JfZW5jcnlwdChpbiwgb3V0LCBpbmwsIGtleSwgY3R4LT5lbmNyeXB0KTsK KysJcmV0dXJuIDE7CisrfQorK3N0YXRpYyBpbnQgYWVzbmlfY2lwaGVyX2NiYyhFVlBfQ0lQSEVS X0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsCisrCQkgY29uc3QgdW5zaWduZWQgY2hhciAq aW4sIHNpemVfdCBpbmwpCisrewlBRVNfS0VZICprZXkgPSBBRVNOSV9BTElHTihjdHgtPmNpcGhl cl9kYXRhKTsKKysJYWVzbmlfY2JjX2VuY3J5cHQoaW4sIG91dCwgaW5sLCBrZXksCisrCQkJICAg ICAgY3R4LT5pdiwgY3R4LT5lbmNyeXB0KTsKKysJcmV0dXJuIDE7CisrfQorK3N0YXRpYyBpbnQg YWVzbmlfY2lwaGVyX2NmYihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQs CisrCQkgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHNpemVfdCBpbmwpCisrewlBRVNfS0VZICpr ZXkgPSBBRVNOSV9BTElHTihjdHgtPmNpcGhlcl9kYXRhKTsKKysJQ1JZUFRPX2NmYjEyOF9lbmNy eXB0KGluLCBvdXQsIGlubCwga2V5LCBjdHgtPml2LAorKwkJCQkmY3R4LT5udW0sIGN0eC0+ZW5j cnlwdCwKKysJCQkJKGJsb2NrMTI4X2YpYWVzbmlfZW5jcnlwdCk7CisrCXJldHVybiAxOworK30K KytzdGF0aWMgaW50IGFlc25pX2NpcGhlcl9vZmIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWdu ZWQgY2hhciAqb3V0LAorKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sKQor K3sJQUVTX0tFWSAqa2V5ID0gQUVTTklfQUxJR04oY3R4LT5jaXBoZXJfZGF0YSk7CisrCUNSWVBU T19vZmIxMjhfZW5jcnlwdChpbiwgb3V0LCBpbmwsIGtleSwgY3R4LT5pdiwKKysJCQkJJmN0eC0+ bnVtLCAoYmxvY2sxMjhfZilhZXNuaV9lbmNyeXB0KTsKKysJcmV0dXJuIDE7CisrfQorKworKyNk ZWZpbmUgQUVTX0JMT0NLX1NJWkUJCTE2CisrCisrI2RlZmluZSBFVlBfQ0lQSEVSX2Jsb2NrX3Np emVfRUNCCUFFU19CTE9DS19TSVpFCisrI2RlZmluZSBFVlBfQ0lQSEVSX2Jsb2NrX3NpemVfQ0JD CUFFU19CTE9DS19TSVpFCisrI2RlZmluZSBFVlBfQ0lQSEVSX2Jsb2NrX3NpemVfT0ZCCTEKKysj ZGVmaW5lIEVWUF9DSVBIRVJfYmxvY2tfc2l6ZV9DRkIJMQorKworKy8qIERlY2xhcmluZyBzbyBt YW55IGNpcGhlcnMgYnkgaGFuZCB3b3VsZCBiZSBhIHBhaW4uCisrICAgSW5zdGVhZCBpbnRyb2R1 Y2UgYSBiaXQgb2YgcHJlcHJvY2Vzc29yIG1hZ2ljIDotKSAqLworKyNkZWZpbmUJREVDTEFSRV9B RVNfRVZQKGtzaXplLGxtb2RlLHVtb2RlKQlcCisrc3RhdGljIGNvbnN0IEVWUF9DSVBIRVIgYWVz bmlfIyNrc2l6ZSMjXyMjbG1vZGUgPSB7CVwKKysJTklEX2Flc18jI2tzaXplIyNfIyNsbW9kZSwJ CQlcCisrCUVWUF9DSVBIRVJfYmxvY2tfc2l6ZV8jI3Vtb2RlLAkJCVwKKysJa3NpemUgLyA4LAkJ CQkJXAorKwlBRVNfQkxPQ0tfU0laRSwJCQkJCVwKKysJMCB8IEVWUF9DSVBIXyMjdW1vZGUjI19N T0RFLAkJCVwKKysJYWVzbmlfaW5pdF9rZXksCQkJCVwKKysJYWVzbmlfY2lwaGVyXyMjbG1vZGUs CQkJCVwKKysJTlVMTCwJCQkJCQlcCisrCXNpemVvZihBRVNOSV9LRVkpLAkJCQlcCisrCUVWUF9D SVBIRVJfc2V0X2FzbjFfaXYsCQkJCVwKKysJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwJCQkJXAor KwlOVUxMLAkJCQkJCVwKKysJTlVMTAkJCQkJCVwKKyt9CisrCisrREVDTEFSRV9BRVNfRVZQKDEy OCxlY2IsRUNCKTsKKytERUNMQVJFX0FFU19FVlAoMTI4LGNiYyxDQkMpOworK0RFQ0xBUkVfQUVT X0VWUCgxMjgsY2ZiLENGQik7CisrREVDTEFSRV9BRVNfRVZQKDEyOCxvZmIsT0ZCKTsKKysKKytE RUNMQVJFX0FFU19FVlAoMTkyLGVjYixFQ0IpOworK0RFQ0xBUkVfQUVTX0VWUCgxOTIsY2JjLENC Qyk7CisrREVDTEFSRV9BRVNfRVZQKDE5MixjZmIsQ0ZCKTsKKytERUNMQVJFX0FFU19FVlAoMTky LG9mYixPRkIpOworKworK0RFQ0xBUkVfQUVTX0VWUCgyNTYsZWNiLEVDQik7CisrREVDTEFSRV9B RVNfRVZQKDI1NixjYmMsQ0JDKTsKKytERUNMQVJFX0FFU19FVlAoMjU2LGNmYixDRkIpOworK0RF Q0xBUkVfQUVTX0VWUCgyNTYsb2ZiLE9GQik7CisrCisrc3RhdGljIGludAorK2Flc25pX2NpcGhl cnMgKEVOR0lORSAqZSwgY29uc3QgRVZQX0NJUEhFUiAqKmNpcGhlciwKKysJCSAgICAgIGNvbnN0 IGludCAqKm5pZHMsIGludCBuaWQpCisreworKwkvKiBObyBzcGVjaWZpYyBjaXBoZXIgPT4gcmV0 dXJuIGEgbGlzdCBvZiBzdXBwb3J0ZWQgbmlkcyAuLi4gKi8KKysJaWYgKCFjaXBoZXIpIHsKKysJ CSpuaWRzID0gYWVzbmlfY2lwaGVyX25pZHM7CisrCQlyZXR1cm4gYWVzbmlfY2lwaGVyX25pZHNf bnVtOworKwl9CisrCisrCS8qIC4uLiBvciB0aGUgcmVxdWVzdGVkICJjaXBoZXIiIG90aGVyd2lz ZSAqLworKwlzd2l0Y2ggKG5pZCkgeworKwljYXNlIE5JRF9hZXNfMTI4X2VjYjoKKysJCSpjaXBo ZXIgPSAmYWVzbmlfMTI4X2VjYjsKKysJCWJyZWFrOworKwljYXNlIE5JRF9hZXNfMTI4X2NiYzoK KysJCSpjaXBoZXIgPSAmYWVzbmlfMTI4X2NiYzsKKysJCWJyZWFrOworKwljYXNlIE5JRF9hZXNf MTI4X2NmYjoKKysJCSpjaXBoZXIgPSAmYWVzbmlfMTI4X2NmYjsKKysJCWJyZWFrOworKwljYXNl IE5JRF9hZXNfMTI4X29mYjoKKysJCSpjaXBoZXIgPSAmYWVzbmlfMTI4X29mYjsKKysJCWJyZWFr OworKworKwljYXNlIE5JRF9hZXNfMTkyX2VjYjoKKysJCSpjaXBoZXIgPSAmYWVzbmlfMTkyX2Vj YjsKKysJCWJyZWFrOworKwljYXNlIE5JRF9hZXNfMTkyX2NiYzoKKysJCSpjaXBoZXIgPSAmYWVz bmlfMTkyX2NiYzsKKysJCWJyZWFrOworKwljYXNlIE5JRF9hZXNfMTkyX2NmYjoKKysJCSpjaXBo ZXIgPSAmYWVzbmlfMTkyX2NmYjsKKysJCWJyZWFrOworKwljYXNlIE5JRF9hZXNfMTkyX29mYjoK KysJCSpjaXBoZXIgPSAmYWVzbmlfMTkyX29mYjsKKysJCWJyZWFrOworKworKwljYXNlIE5JRF9h ZXNfMjU2X2VjYjoKKysJCSpjaXBoZXIgPSAmYWVzbmlfMjU2X2VjYjsKKysJCWJyZWFrOworKwlj YXNlIE5JRF9hZXNfMjU2X2NiYzoKKysJCSpjaXBoZXIgPSAmYWVzbmlfMjU2X2NiYzsKKysJCWJy ZWFrOworKwljYXNlIE5JRF9hZXNfMjU2X2NmYjoKKysJCSpjaXBoZXIgPSAmYWVzbmlfMjU2X2Nm YjsKKysJCWJyZWFrOworKwljYXNlIE5JRF9hZXNfMjU2X29mYjoKKysJCSpjaXBoZXIgPSAmYWVz bmlfMjU2X29mYjsKKysJCWJyZWFrOworKworKwlkZWZhdWx0OgorKwkJLyogU29ycnksIHdlIGRv bid0IHN1cHBvcnQgdGhpcyBOSUQgKi8KKysJCSpjaXBoZXIgPSBOVUxMOworKwkJcmV0dXJuIDA7 CisrCX0KKysKKysJcmV0dXJuIDE7CisrfQorKworKyNlbmRpZiAvKiBDT01QSUxFX0hXX0FFU05J ICovCisrI2VuZGlmIC8qICFkZWZpbmVkKE9QRU5TU0xfTk9fSFcpICYmICFkZWZpbmVkKE9QRU5T U0xfTk9fSFdfQUVTTkkpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fQUVTKSAqLworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5hZXNuaSBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jCistLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5hZXNuaQkyMDEwLTAxLTA3IDIzOjM4OjMxLjAw MDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2VuZ2luZS9lbmdf YWxsLmMJMjAxMC0wMS0xMiAyMjoxODowNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC04NSw2ICs4NSw5 IEBAIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdpbmVzKHZvaWQpCisgI2lmICFkZWZpbmVk KE9QRU5TU0xfTk9fSFcpICYmIChkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fRnJl ZUJTRF9fKSB8fCBkZWZpbmVkKEhBVkVfQ1JZUFRPREVWKSkKKyAJRU5HSU5FX2xvYWRfY3J5cHRv ZGV2KCk7CisgI2VuZGlmCisrI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fSFcpICYmICFkZWZpbmVk KE9QRU5TU0xfTk9fSFdfQUVTTkkpCisrCUVOR0lORV9sb2FkX2Flc25pKCk7CisrI2VuZGlmCisg CUVOR0lORV9sb2FkX2R5bmFtaWMoKTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU1RBVElDX0VOR0lO RQorICNpZm5kZWYgT1BFTlNTTF9OT19IVworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZW5naW5lL2VuZ2luZS5oLmFlc25pIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Vu Z2luZS9lbmdpbmUuaAorLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2VuZ2luZS9lbmdp bmUuaC5hZXNuaQkyMDEwLTAxLTA3IDIzOjM4OjMwLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2VuZ2luZS9lbmdpbmUuaAkyMDEwLTAxLTEyIDIyOjE4OjA2 LjAwMDAwMDAwMCArMDEwMAorQEAgLTM0Miw2ICszNDIsNyBAQCB2b2lkIEVOR0lORV9sb2FkX2dv c3Qodm9pZCk7CisgI2VuZGlmCisgI2VuZGlmCisgdm9pZCBFTkdJTkVfbG9hZF9jcnlwdG9kZXYo dm9pZCk7Cisrdm9pZCBFTkdJTkVfbG9hZF9hZXNuaSh2b2lkKTsKKyB2b2lkIEVOR0lORV9sb2Fk X2J1aWx0aW5fZW5naW5lcyh2b2lkKTsKKyAKKyAvKiBHZXQgYW5kIHNldCBnbG9iYWwgZmxhZ3Mg KEVOR0lORV9UQUJMRV9GTEFHXyoqKikgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZW5naW5lL01ha2VmaWxlLmFlc25pIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2VuZ2luZS9NYWtlZmlsZQorLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2VuZ2luZS9NYWtlZmlsZS5hZXNuaQkyMDA4LTA2LTA0IDEzOjAxOjI5LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2VuZ2luZS9NYWtlZmls ZQkyMDEwLTAxLTEyIDIyOjE4OjA2LjAwMDAwMDAwMCArMDEwMAorQEAgLTIxLDEyICsyMSwxNCBA QCBMSUJTUkM9IGVuZ19lcnIuYyBlbmdfbGliLmMgZW5nX2xpc3QuYyBlCisgCWVuZ190YWJsZS5j IGVuZ19wa2V5LmMgZW5nX2ZhdC5jIGVuZ19hbGwuYyBcCisgCXRiX3JzYS5jIHRiX2RzYS5jIHRi X2VjZHNhLmMgdGJfZGguYyB0Yl9lY2RoLmMgdGJfcmFuZC5jIHRiX3N0b3JlLmMgXAorIAl0Yl9j aXBoZXIuYyB0Yl9kaWdlc3QuYyB0Yl9wa21ldGguYyB0Yl9hc25tdGguYyBcCistCWVuZ19vcGVu c3NsLmMgZW5nX2NuZi5jIGVuZ19keW4uYyBlbmdfY3J5cHRvZGV2LmMKKysJZW5nX29wZW5zc2wu YyBlbmdfY25mLmMgZW5nX2R5bi5jIGVuZ19jcnlwdG9kZXYuYyBcCisrCWVuZ19hZXNuaS5jCisg TElCT0JKPSBlbmdfZXJyLm8gZW5nX2xpYi5vIGVuZ19saXN0Lm8gZW5nX2luaXQubyBlbmdfY3Ry bC5vIFwKKyAJZW5nX3RhYmxlLm8gZW5nX3BrZXkubyBlbmdfZmF0Lm8gZW5nX2FsbC5vIFwKKyAJ dGJfcnNhLm8gdGJfZHNhLm8gdGJfZWNkc2EubyB0Yl9kaC5vIHRiX2VjZGgubyB0Yl9yYW5kLm8g dGJfc3RvcmUubyBcCisgCXRiX2NpcGhlci5vIHRiX2RpZ2VzdC5vIHRiX3BrbWV0aC5vIHRiX2Fz bm10aC5vIFwKKy0JZW5nX29wZW5zc2wubyBlbmdfY25mLm8gZW5nX2R5bi5vIGVuZ19jcnlwdG9k ZXYubworKwllbmdfb3BlbnNzbC5vIGVuZ19jbmYubyBlbmdfZHluLm8gZW5nX2NyeXB0b2Rldi5v IFwKKysJZW5nX2Flc25pLm8KKyAKKyBTUkM9ICQoTElCU1JDKQorIAorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9lcnIuYy5hZXNuaSBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9ldnAvZXZwX2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v ZXZwL2V2cF9lcnIuYy5hZXNuaQkyMDEwLTAxLTA3IDIzOjM4OjMxLjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfZXJyLmMJMjAxMC0wMS0xMiAy MjoxODowNi4wMDAwMDAwMDAgKzAxMDAKK0BAIC0xLDYgKzEsNiBAQAorIC8qIGNyeXB0by9ldnAv ZXZwX2Vyci5jICovCisgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0gKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAw OCBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKiBDb3B5cmln aHQgKGMpIDE5OTktMjAwOSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKyAgKgorICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworQEAgLTcwLDYgKzcwLDcgQEAK KyAKKyBzdGF0aWMgRVJSX1NUUklOR19EQVRBIEVWUF9zdHJfZnVuY3RzW109CisgCXsKKyt7RVJS X0ZVTkMoRVZQX0ZfQUVTTklfSU5JVF9LRVkpLAkiQUVTTklfSU5JVF9LRVkifSwKKyB7RVJSX0ZV TkMoRVZQX0ZfQUVTX0lOSVRfS0VZKSwJIkFFU19JTklUX0tFWSJ9LAorIHtFUlJfRlVOQyhFVlBf Rl9DQU1FTExJQV9JTklUX0tFWSksCSJDQU1FTExJQV9JTklUX0tFWSJ9LAorIHtFUlJfRlVOQyhF VlBfRl9EMklfUEtFWSksCSJEMklfUEtFWSJ9LAorQEAgLTg1LDcgKzg2LDcgQEAgc3RhdGljIEVS Ul9TVFJJTkdfREFUQSBFVlBfc3RyX2Z1bmN0c1tdPQorIHtFUlJfRlVOQyhFVlBfRl9FVlBfRElH RVNUSU5JVF9FWCksCSJFVlBfRGlnZXN0SW5pdF9leCJ9LAorIHtFUlJfRlVOQyhFVlBfRl9FVlBf RU5DUllQVEZJTkFMX0VYKSwJIkVWUF9FbmNyeXB0RmluYWxfZXgifSwKKyB7RVJSX0ZVTkMoRVZQ X0ZfRVZQX01EX0NUWF9DT1BZX0VYKSwJIkVWUF9NRF9DVFhfY29weV9leCJ9LAorLXtFUlJfRlVO QyhFVlBfRl9FVlBfTURfU0laRSksCSJFVlBfTURfU0laRSJ9LAorK3tFUlJfRlVOQyhFVlBfRl9F VlBfTURfU0laRSksCSJFVlBfTURfc2l6ZSJ9LAorIHtFUlJfRlVOQyhFVlBfRl9FVlBfT1BFTklO SVQpLAkiRVZQX09wZW5Jbml0In0sCisge0VSUl9GVU5DKEVWUF9GX0VWUF9QQkVfQUxHX0FERCks CSJFVlBfUEJFX2FsZ19hZGQifSwKKyB7RVJSX0ZVTkMoRVZQX0ZfRVZQX1BCRV9BTEdfQUREX1RZ UEUpLAkiRVZQX1BCRV9hbGdfYWRkX3R5cGUifSwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2V2cC9ldnAuaC5hZXNuaSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAv ZXZwLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwLmguYWVzbmkJMjAx MC0wMS0wNyAyMzozODozMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9ldnAvZXZwLmgJMjAxMC0wMS0xMiAyMjoxODowNi4wMDAwMDAwMDAgKzAxMDAKK0BA IC0xMTYyLDYgKzExNjIsNyBAQCB2b2lkIEVSUl9sb2FkX0VWUF9zdHJpbmdzKHZvaWQpOworIC8q IEVycm9yIGNvZGVzIGZvciB0aGUgRVZQIGZ1bmN0aW9ucy4gKi8KKyAKKyAvKiBGdW5jdGlvbiBj b2Rlcy4gKi8KKysjZGVmaW5lIEVWUF9GX0FFU05JX0lOSVRfS0VZCQkJCSAxNjMKKyAjZGVmaW5l IEVWUF9GX0FFU19JTklUX0tFWQkJCQkgMTMzCisgI2RlZmluZSBFVlBfRl9DQU1FTExJQV9JTklU X0tFWQkJCQkgMTU5CisgI2RlZmluZSBFVlBfRl9EMklfUEtFWQkJCQkJIDEwMAorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhNC90ZXN0L3Rlc3RfYWVzbmkuYWVzbmkgb3BlbnNzbC0xLjAuMC1i ZXRhNC90ZXN0L3Rlc3RfYWVzbmkKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3Rlc3QvdGVzdF9h ZXNuaS5hZXNuaQkyMDEwLTAxLTEyIDIyOjE4OjA2LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjAtYmV0YTQvdGVzdC90ZXN0X2Flc25pCTIwMTAtMDEtMTIgMjI6MTg6MDYuMDAwMDAw MDAwICswMTAwCitAQCAtMCwwICsxLDY5IEBACisrIyEvYmluL3NoCisrCisrUFJPRz0kMQorKwor K2lmIFsgLXggJFBST0cgXTsgdGhlbgorKyAgICBpZiBleHByICJ4YCRQUk9HIHZlcnNpb25gIiA6 ICJ4T3BlblNTTCIgPiAvZGV2L251bGw7IHRoZW4KKysJOgorKyAgICBlbHNlCisrCWVjaG8gIiRQ Uk9HIGlzIG5vdCBPcGVuU1NMIGV4ZWN1dGFibGUiCisrCWV4aXQgMQorKyAgICBmaQorK2Vsc2UK KysgICAgZWNobyAiJFBST0cgaXMgbm90IGV4ZWN1dGFibGUiCisrICAgIGV4aXQgMTsKKytmaQor KworK2lmICRQUk9HIGVuZ2luZSBhZXNuaSB8IGdyZXAgLXYgbm8tYWVzbmk7IHRoZW4KKysKKysg ICAgSEFTSD1gY2F0ICRQUk9HIHwgJFBST0cgZGdzdCAtaGV4YAorKworKyAgICBBRVNfQUxHUz0i CWFlcy0xMjgtZWNiIGFlcy0xOTItZWNiIGFlcy0yNTYtZWNiIFwKKysJCWFlcy0xMjgtY2JjIGFl cy0xOTItY2JjIGFlcy0yNTYtY2JjIFwKKysJCWFlcy0xMjgtY2ZiIGFlcy0xOTItY2ZiIGFlcy0y NTYtY2ZiIFwKKysJCWFlcy0xMjgtb2ZiIGFlcy0xOTItb2ZiIGFlcy0yNTYtb2ZiIgorKyAgICBC VUZTSVpFPSIxNiAzMiA0OCA2NCA4MCA5NiAxMjggMTQ0IDk5OSIKKysKKysgICAgbmVycj0wCisr CisrICAgIGZvciBhbGcgaW4gJEFFU19BTEdTOyBkbworKwllY2hvICRhbGcKKysJZm9yIGJ1ZnNp emUgaW4gJEJVRlNJWkU7IGRvCisrCSAgICBURVNUPWAoCWNhdCAkUFJPRyB8IFwKKysJCSRQUk9H IGVuYyAtZSAtayAiJEhBU0giIC0kYWxnIC1idWZzaXplICRidWZzaXplIC1lbmdpbmUgYWVzbmkg fCBcCisrCQkkUFJPRyBlbmMgLWQgLWsgIiRIQVNIIiAtJGFsZyB8IFwKKysJCSRQUk9HIGRnc3Qg LWhleCApIDI+L2Rldi9udWxsYAorKwkgICAgaWYgWyAiJFRFU1QiICE9ICIkSEFTSCIgXTsgdGhl bgorKwkJZWNobyAiLSRhbGcvJGJ1ZnNpemUgZW5jcnlwdCB0ZXN0IGZhaWxlZCIKKysJCW5lcnI9 YGV4cHIgJG5lcnIgKyAxYAorKwkgICAgZmkKKysJZG9uZQorKwlmb3IgYnVmc2l6ZSBpbiAkQlVG U0laRTsgZG8gCisrCSAgICBURVNUPWAoCWNhdCAkUFJPRyB8IFwKKysJCSRQUk9HIGVuYyAtZSAt ayAiJEhBU0giIC0kYWxnIHwgXAorKwkJJFBST0cgZW5jIC1kIC1rICIkSEFTSCIgLSRhbGcgLWJ1 ZnNpemUgJGJ1ZnNpemUgLWVuZ2luZSBhZXNuaSB8IFwKKysJCSRQUk9HIGRnc3QgLWhleCApIDI+ L2Rldi9udWxsYAorKwkgICAgaWYgWyAiJFRFU1QiICE9ICIkSEFTSCIgXTsgdGhlbgorKwkJZWNo byAiLSRhbGcvJGJ1ZnNpemUgZGVjcnlwdCB0ZXN0IGZhaWxlZCIKKysJCW5lcnI9YGV4cHIgJG5l cnIgKyAxYAorKwkgICAgZmkKKysJZG9uZQorKwlURVNUPWAoCWNhdCAkUFJPRyB8IFwKKysJCSRQ Uk9HIGVuYyAtZSAtayAiJEhBU0giIC0kYWxnIC1lbmdpbmUgYWVzbmkgfCBcCisrCQkkUFJPRyBl bmMgLWQgLWsgIiRIQVNIIiAtJGFsZyAtZW5naW5lIGFlc25pIHwgXAorKwkJJFBST0cgZGdzdCAt aGV4ICkgMj4vZGV2L251bGxgCisrCWlmIFsgIiRURVNUIiAhPSAiJEhBU0giIF07IHRoZW4KKysJ CWVjaG8gIi0kYWxnIGVuL2RlY3J5cHQgdGVzdCBmYWlsZWQiCisrCQluZXJyPWBleHByICRuZXJy ICsgMWAKKysJZmkKKysgICAgZG9uZQorKworKyAgICBpZiBbICRuZXJyIC1ndCAwIF07IHRoZW4K KysJZWNobyAiQUVTTkkgZW5naW5lIHRlc3QgZmFpbGVkLiIKKysJZXhpdCAxOworKyAgICBmaQor K2Vsc2UKKysgICAgZWNobyAiQUVTTkkgZW5naW5lIGlzIG5vdCBhdmFpbGFibGUiCisrZmkKKysK KytleGl0IDAKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE0LWJhY2twb3J0cy5wYXRj aCBiL29wZW5zc2wtMS4wLjAtYmV0YTQtYmFja3BvcnRzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCBhZDRjN2U0Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTQt YmFja3BvcnRzLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYXNuMS9kMmlfcHUuYy5iYWNrcG9ydHMgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vYXNuMS9kMmlfcHUuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2FzbjEvZDJpX3B1LmMuYmFja3BvcnRzCTIwMDgtMTEtMTIgMDQ6NTc6NDkuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYXNuMS9kMmlfcHUu YwkyMDA5LTExLTE4IDE0OjExOjE0LjAwMDAwMDAwMCArMDEwMAotQEAgLTg3LDkgKzg3LDEzIEBA IEVWUF9QS0VZICpkMmlfUHVibGljS2V5KGludCB0eXBlLCBFVlBfUEsKLSAJCX0KLSAJZWxzZQly ZXQ9ICphOwotIAotLQlyZXQtPnNhdmVfdHlwZT10eXBlOwotLQlyZXQtPnR5cGU9RVZQX1BLRVlf dHlwZSh0eXBlKTsKLS0Jc3dpdGNoIChyZXQtPnR5cGUpCi0rCWlmICghRVZQX1BLRVlfc2V0X3R5 cGUocmV0LCB0eXBlKSkKLSsJCXsKLSsJCUFTTjFlcnIoQVNOMV9GX0QySV9QVUJMSUNLRVksRVJS X1JfRVZQX0xJQik7Ci0rCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJc3dpdGNoIChFVlBfUEtFWV9p ZChyZXQpKQotIAkJewotICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKLSAJY2FzZSBFVlBfUEtFWV9S U0E6Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvcF9saWIuYy5iYWNr cG9ydHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL3BfbGliLmMKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9ldnAvcF9saWIuYy5iYWNrcG9ydHMJMjAwNi0wNy0wNCAyMjoy Nzo0NC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAv cF9saWIuYwkyMDA5LTExLTE4IDE0OjExOjI2LjAwMDAwMDAwMCArMDEwMAotQEAgLTIyMCw3ICsy MjAsMTAgQEAgc3RhdGljIGludCBwa2V5X3NldF90eXBlKEVWUF9QS0VZICpwa2V5LAotICNpZm5k ZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAJCS8qIElmIHdlIGhhdmUgYW4gRU5HSU5FIHJlbGVhc2Ug aXQgKi8KLSAJCWlmIChwa2V5LT5lbmdpbmUpCi0rCQkJewotIAkJCUVOR0lORV9maW5pc2gocGtl eS0+ZW5naW5lKTsKLSsJCQlwa2V5LT5lbmdpbmUgPSBOVUxMOwotKwkJCX0KLSAjZW5kaWYKLSAJ CX0KLSAJaWYgKHN0cikKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3g1MDkv eDUwOV92ZnkuYy5iYWNrcG9ydHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8veDUwOS94NTA5 X3ZmeS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8veDUwOS94NTA5X3ZmeS5jLmJh Y2twb3J0cwkyMDA5LTEwLTMxIDIwOjIxOjQ3LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL3g1MDkveDUwOV92ZnkuYwkyMDA5LTExLTE4IDE0OjExOjMxLjAw MDAwMDAwMCArMDEwMAotQEAgLTE3MjcsNiArMTcyNyw3IEBAIGludCBYNTA5X2NtcF90aW1lKGNv bnN0IEFTTjFfVElNRSAqY3RtLCAKLSAJCQlvZmZzZXQ9IC1vZmZzZXQ7Ci0gCQl9Ci0gCWF0bS50 eXBlPWN0bS0+dHlwZTsKLSsJYXRtLmZsYWdzID0gMDsKLSAJYXRtLmxlbmd0aD1zaXplb2YoYnVm ZjIpOwotIAlhdG0uZGF0YT0odW5zaWduZWQgY2hhciAqKWJ1ZmYyOwotIAoKZGlmZiAtLWdpdCBh L29wZW5zc2wtMS4wLjAtYmV0YTQtYmludXRpbHMucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0 LWJpbnV0aWxzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzliMmU2Li4w MDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTQtYmludXRpbHMucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSw1NiArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9tZDUvYXNtL21kNS14ODZfNjQucGwuYmludXRpbHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vbWQ1L2FzbS9tZDUteDg2XzY0LnBsCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v bWQ1L2FzbS9tZDUteDg2XzY0LnBsLmJpbnV0aWxzCTIwMDktMTEtMTIgMTU6MTc6MjkuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ1L2FzbS9tZDUteDg2 XzY0LnBsCTIwMDktMTEtMTIgMTc6MjY6MDguMDAwMDAwMDAwICswMTAwCi1AQCAtMTksNiArMTks NyBAQCBteSAkY29kZTsKLSBzdWIgcm91bmQxX3N0ZXAKLSB7Ci0gICAgIG15ICgkcG9zLCAkZHN0 LCAkeCwgJHksICR6LCAka19uZXh0LCAkVF9pLCAkcykgPSBAXzsKLSsgICAgJFRfaSA9IHVucGFj aygibCIscGFjaygibCIsIGhleCgkVF9pKSkpOyAjIGNvbnZlcnQgdG8gMzItYml0IHNpZ25lZCBk ZWNpbWFsCi0gICAgICRjb2RlIC49ICIgbW92CTAqNCglcnNpKSwJJXIxMGQJCS8qIChORVhUIFNU RVApIFhbMF0gKi9cbiIgaWYgKCRwb3MgPT0gLTEpOwotICAgICAkY29kZSAuPSAiIG1vdgklZWR4 LAkJJXIxMWQJCS8qIChORVhUIFNURVApIHonID0gJWVkeCAqL1xuIiBpZiAoJHBvcyA9PSAtMSk7 Ci0gICAgICRjb2RlIC49IDw8RU9GOwotQEAgLTQzLDYgKzQ0LDcgQEAgRU9GCi0gc3ViIHJvdW5k Ml9zdGVwCi0gewotICAgICBteSAoJHBvcywgJGRzdCwgJHgsICR5LCAkeiwgJGtfbmV4dCwgJFRf aSwgJHMpID0gQF87Ci0rICAgICRUX2kgPSB1bnBhY2soImwiLHBhY2soImwiLCBoZXgoJFRfaSkp KTsgIyBjb252ZXJ0IHRvIDMyLWJpdCBzaWduZWQgZGVjaW1hbAotICAgICAkY29kZSAuPSAiIG1v dgkxKjQoJXJzaSksCSVyMTBkCQkvKiAoTkVYVCBTVEVQKSBYWzFdICovXG4iIGlmICgkcG9zID09 IC0xKTsKLSAgICAgJGNvZGUgLj0gIiBtb3YJJWVkeCwJCSVyMTFkCQkvKiAoTkVYVCBTVEVQKSB6 JyA9ICVlZHggKi9cbiIgaWYgKCRwb3MgPT0gLTEpOwotICAgICAkY29kZSAuPSAiIG1vdgklZWR4 LAkJJXIxMmQJCS8qIChORVhUIFNURVApIHonID0gJWVkeCAqL1xuIiBpZiAoJHBvcyA9PSAtMSk7 Ci1AQCAtNjksNiArNzEsNyBAQCBFT0YKLSBzdWIgcm91bmQzX3N0ZXAKLSB7Ci0gICAgIG15ICgk cG9zLCAkZHN0LCAkeCwgJHksICR6LCAka19uZXh0LCAkVF9pLCAkcykgPSBAXzsKLSsgICAgJFRf aSA9IHVucGFjaygibCIscGFjaygibCIsIGhleCgkVF9pKSkpOyAjIGNvbnZlcnQgdG8gMzItYml0 IHNpZ25lZCBkZWNpbWFsCi0gICAgICRjb2RlIC49ICIgbW92CTUqNCglcnNpKSwJJXIxMGQJCS8q IChORVhUIFNURVApIFhbNV0gKi9cbiIgaWYgKCRwb3MgPT0gLTEpOwotICAgICAkY29kZSAuPSAi IG1vdgklZWN4LAkJJXIxMWQJCS8qIChORVhUIFNURVApIHknID0gJWVjeCAqL1xuIiBpZiAoJHBv cyA9PSAtMSk7Ci0gICAgICRjb2RlIC49IDw8RU9GOwotQEAgLTkxLDYgKzk0LDcgQEAgRU9GCi0g c3ViIHJvdW5kNF9zdGVwCi0gewotICAgICBteSAoJHBvcywgJGRzdCwgJHgsICR5LCAkeiwgJGtf bmV4dCwgJFRfaSwgJHMpID0gQF87Ci0rICAgICRUX2kgPSB1bnBhY2soImwiLHBhY2soImwiLCBo ZXgoJFRfaSkpKTsgIyBjb252ZXJ0IHRvIDMyLWJpdCBzaWduZWQgZGVjaW1hbAotICAgICAkY29k ZSAuPSAiIG1vdgkwKjQoJXJzaSksCSVyMTBkCQkvKiAoTkVYVCBTVEVQKSBYWzBdICovXG4iIGlm ICgkcG9zID09IC0xKTsKLSAgICAgJGNvZGUgLj0gIiBtb3YJXCQweGZmZmZmZmZmLAklcjExZFxu IiBpZiAoJHBvcyA9PSAtMSk7Ci0gICAgICRjb2RlIC49ICIgeG9yCSVlZHgsCQklcjExZAkJLyog KE5FWFQgU1RFUCkgbm90IHonID0gbm90ICVlZHgqL1xuIgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vc2hhL2FzbS9zaGExLXg4Nl82NC5wbC5iaW51dGlscyBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9zaGEvYXNtL3NoYTEteDg2XzY0LnBsCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vc2hhL2FzbS9zaGExLXg4Nl82NC5wbC5iaW51dGlscwkyMDA5LTExLTEy IDE1OjE3OjI5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L3NoYS9hc20vc2hhMS14ODZfNjQucGwJMjAwOS0xMS0xMiAxNzoyNDoxOC4wMDAwMDAwMDAgKzAx MDAKLUBAIC0xNTAsNyArMTUwLDcgQEAgX19fCi0gc3ViIEJPRFlfMjBfMzkgewotIG15ICgkaSwk YSwkYiwkYywkZCwkZSwkZik9QF87Ci0gbXkgJGo9JGkrMTsKLS1teSAkSz0oJGk8NDApPzB4NmVk OWViYTE6MHhjYTYyYzFkNjsKLStteSAkSz0oJGk8NDApPzB4NmVkOWViYTE6LTB4MzU5ZDNlMmE7 Ci0gJGNvZGUuPTw8X19fIGlmICgkaTw3OSk7Ci0gCWxlYQkkSygkeGksJGUpLCRmCi0gCW1vdglg NCooJGolMTYpYCglcnNwKSwkeGkKLUBAIC0xODcsNyArMTg3LDcgQEAgc3ViIEJPRFlfNDBfNTkg ewotIG15ICgkaSwkYSwkYiwkYywkZCwkZSwkZik9QF87Ci0gbXkgJGo9JGkrMTsKLSAkY29kZS49 PDxfX187Ci0tCWxlYQkweDhmMWJiY2RjKCR4aSwkZSksJGYKLSsJbGVhCS0weDcwZTQ0MzI0KCR4 aSwkZSksJGYKLSAJbW92CWA0KigkaiUxNilgKCVyc3ApLCR4aQotIAltb3YJJGIsJHQwCi0gCW1v dgkkYiwkdDEKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE0LWNsaWVudC1yZW5lZy5w YXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTQtY2xpZW50LXJlbmVnLnBhdGNoCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAxMWI5YWI3Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAt YmV0YTQtY2xpZW50LXJlbmVnLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAot RG8gbm90IGVuZm9yY2UgdGhlIHJlbmVnb3RpYXRpb24gZXh0ZW5zaW9uIG9uIHRoZSBjbGllbnQg LSB0b28gbWFueSBicm9rZW4gc2VydmVycyByZW1haW4uCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L3NzbC90MV9saWIuYy5jbGllbnQtcmVuZWcgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wv dDFfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC90MV9saWIuYy5jbGllbnQtcmVu ZWcJMjAwOS0xMS0xMiAxNToxNzoyOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE0L3NzbC90MV9saWIuYwkyMDA5LTExLTE4IDE0OjA0OjE5LjAwMDAwMDAwMCArMDEwMAot QEAgLTk4NSw2ICs5ODUsNyBAQCBpbnQgc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wg KnMsCi0gCi0gCWlmIChkYXRhID49IChkK24tMikpCi0gCQl7Ci0rI2lmIDAKLSAJCS8qIEJlY2F1 c2UgdGhlIGNsaWVudCBkb2VzIG5vdCBzZWUgYW55IHJlbmVnb3RpYXRpb24gZHVyaW5nIGFuCi0g CQkgICBhdHRhY2ssIHdlIG11c3QgZW5mb3JjZSB0aGlzIG9uIGFsbCBzZXJ2ZXIgaGVsbG9zLCBl dmVuIHRoZQotIAkJICAgZmlyc3QgKi8KLUBAIC05OTQsNiArOTk1LDcgQEAgaW50IHNzbF9wYXJz ZV9zZXJ2ZXJoZWxsb190bHNleHQoU1NMICpzLAotIAkJCSphbCA9IFNTTF9BRF9JTExFR0FMX1BB UkFNRVRFUjsgLyogaXMgdGhpcyB0aGUgcmlnaHQgYWxlcnQ/ICovCi0gCQkJcmV0dXJuIDA7Ci0g CQkJfQotKyNlbmRpZgotIAkJcmV0dXJuIDE7Ci0gCQl9Ci0gCi1AQCAtMTEyNiwxMiArMTEyOCwx NCBAQCBpbnQgc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQlyZXR1cm4g MDsKLSAJCX0KLSAKLSsjaWYgMAotIAlpZiAoIXJlbmVnb3RpYXRlX3NlZW4KLSAJCSYmICEocy0+ Y3R4LT5vcHRpb25zICYgU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTikp Ci0gCQl7Ci0gCQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhl IHJpZ2h0IGFsZXJ0PyAqLwotIAkJcmV0dXJuIDA7Ci0gCQl9Ci0rI2VuZGlmCi0gCi0gCWlmICgh cy0+aGl0ICYmIHRsc2V4dF9zZXJ2ZXJuYW1lID09IDEpCi0gCQl7CgpkaWZmIC0tZ2l0IGEvb3Bl bnNzbC0xLjAuMC1iZXRhNC1kdGxzLWlwdjYucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE0LWR0 bHMtaXB2Ni5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE3M2YxYS4uMDAw MDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWJldGE0LWR0bHMtaXB2Ni5wYXRjaAorKysgL2Rldi9u dWxsCkBAIC0xLDIxOSArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9iaW8vYl9zb2NrLmMuZHRscy1pcHY2IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Jpby9i X3NvY2suYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Jpby9iX3NvY2suYy5kdGxz LWlwdjYJMjAwOS0xMS0wOSAxNTowOTo1My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9iaW8vYl9zb2NrLmMJMjAwOS0xMS0yMyAwODo1MDo0NS4wMDAwMDAw MDAgKzAxMDAKLUBAIC04MjIsNyArODIyLDggQEAgaW50IEJJT19hY2NlcHQoaW50IHNvY2ssIGNo YXIgKiphZGRyKQotIAlpZiAoc2l6ZW9mKHNhLmxlbi5pKSE9c2l6ZW9mKHNhLmxlbi5zKSAmJiBz YS5sZW4uaT09MCkKLSAJCXsKLSAJCU9QRU5TU0xfYXNzZXJ0KHNhLmxlbi5zPD1zaXplb2Yoc2Eu ZnJvbSkpOwotLQkJc2EubGVuLmkgPSAodW5zaWduZWQgaW50KXNhLmxlbi5zOwotKwkJc2EubGVu LmkgPSAoaW50KXNhLmxlbi5zOwotKwkJLyogdXNlIHNhLmxlbi5pIGZyb20gdGhpcyBwb2ludCAq LwotIAkJfQotIAlpZiAocmV0ID09IElOVkFMSURfU09DS0VUKQotIAkJewotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYmlvL2Jzc19kZ3JhbS5jLmR0bHMtaXB2NiBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9iaW8vYnNzX2RncmFtLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9iaW8vYnNzX2RncmFtLmMuZHRscy1pcHY2CTIwMDktMTAtMTUgMTk6NDE6NDQu MDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYmlvL2Jzc19k Z3JhbS5jCTIwMDktMTEtMjMgMDg6NTA6NDUuMDAwMDAwMDAwICswMTAwCi1AQCAtMTA4LDExICsx MDgsMTMgQEAgc3RhdGljIEJJT19NRVRIT0QgbWV0aG9kc19kZ3JhbXA9Ci0gCi0gdHlwZWRlZiBz dHJ1Y3QgYmlvX2RncmFtX2RhdGFfc3QKLSAJewotKwl1bmlvbiB7Ci0rCQlzdHJ1Y3Qgc29ja2Fk ZHIgc2E7Ci0rCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FfaW47Ci0gI2lmIE9QRU5TU0xfVVNFX0lQ VjYKLS0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgcGVlcjsKLS0jZWxzZQotLQlzdHJ1Y3Qgc29j a2FkZHJfaW4gcGVlcjsKLSsJCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2FfaW42OwotICNlbmRpZgot Kwl9IHBlZXI7Ci0gCXVuc2lnbmVkIGludCBjb25uZWN0ZWQ7Ci0gCXVuc2lnbmVkIGludCBfZXJy bm87Ci0gCXVuc2lnbmVkIGludCBtdHU7Ci1AQCAtMjc4LDI4ICsyODAsMzggQEAgc3RhdGljIGlu dCBkZ3JhbV9yZWFkKEJJTyAqYiwgY2hhciAqb3V0LAotIAlpbnQgcmV0PTA7Ci0gCWJpb19kZ3Jh bV9kYXRhICpkYXRhID0gKGJpb19kZ3JhbV9kYXRhICopYi0+cHRyOwotIAotKwlzdHJ1Y3QJewot KwkvKgotKwkgKiBTZWUgY29tbWVudGFyeSBpbiBiX3NvY2suYy4gPGFwcHJvPgotKwkgKi8KLSsJ dW5pb24JeyBzaXplX3QgczsgaW50IGk7IH0gbGVuOwotKwl1bmlvbgl7Ci0rCQlzdHJ1Y3Qgc29j a2FkZHIgc2E7Ci0rCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FfaW47Ci0gI2lmIE9QRU5TU0xfVVNF X0lQVjYKLS0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgcGVlcjsKLS0jZWxzZQotLQlzdHJ1Y3Qg c29ja2FkZHJfaW4gcGVlcjsKLSsJCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2FfaW42OwotICNlbmRp ZgotLQlpbnQgcGVlcmxlbiA9IHNpemVvZihwZWVyKTsKLSsJCX0gcGVlcjsKLSsJfSBzYTsKLSsK LSsJc2EubGVuLnM9MDsKLSsJc2EubGVuLmk9c2l6ZW9mKHNhLnBlZXIpOwotIAotIAlpZiAob3V0 ICE9IE5VTEwpCi0gCQl7Ci0gCQljbGVhcl9zb2NrZXRfZXJyb3IoKTsKLS0JCW1lbXNldCgmcGVl ciwgMHgwMCwgcGVlcmxlbik7Ci0tCQkvKiBMYXN0IGFyZyBpbiByZWN2ZnJvbSBpcyBzaWduZWQg b24gc29tZSBwbGF0Zm9ybXMgYW5kCi0tCQkgKiB1bnNpZ25lZCBvbiBvdGhlcnMuIEl0IGlzIG9m IHR5cGUgc29ja2xlbl90IG9uIHNvbWUKLS0JCSAqIGJ1dCB0aGlzIGlzIG5vdCB1bml2ZXJzYWwu IENhc3QgdG8gKHZvaWQgKikgdG8gYXZvaWQKLS0JCSAqIGNvbXBpbGVyIHdhcm5pbmdzLgotLQkJ ICovCi0rCQltZW1zZXQoJnNhLnBlZXIsIDB4MDAsIHNpemVvZihzYS5wZWVyKSk7Ci0gCQlkZ3Jh bV9hZGp1c3RfcmN2X3RpbWVvdXQoYik7Ci0tCQlyZXQ9cmVjdmZyb20oYi0+bnVtLG91dCxvdXRs LDAsKHN0cnVjdCBzb2NrYWRkciAqKSZwZWVyLCh2b2lkICopJnBlZXJsZW4pOwotKwkJcmV0PXJl Y3Zmcm9tKGItPm51bSxvdXQsb3V0bCwwLCZzYS5wZWVyLnNhLCh2b2lkICopJnNhLmxlbik7Ci0r CQlpZiAoc2l6ZW9mKHNhLmxlbi5pKSE9c2l6ZW9mKHNhLmxlbi5zKSAmJiBzYS5sZW4uaT09MCkK LSsJCQl7Ci0rCQkJT1BFTlNTTF9hc3NlcnQoc2EubGVuLnM8PXNpemVvZihzYS5wZWVyKSk7Ci0r CQkJc2EubGVuLmkgPSAoaW50KXNhLmxlbi5zOwotKwkJCX0KLSAJCWRncmFtX3Jlc2V0X3Jjdl90 aW1lb3V0KGIpOwotIAotIAkJaWYgKCAhIGRhdGEtPmNvbm5lY3RlZCAgJiYgcmV0ID49IDApCi0t CQkJQklPX2N0cmwoYiwgQklPX0NUUkxfREdSQU1fU0VUX1BFRVIsIDAsICZwZWVyKTsKLSsJCQlC SU9fY3RybChiLCBCSU9fQ1RSTF9ER1JBTV9TRVRfUEVFUiwgMCwgJnNhLnBlZXIpOwotIAotIAkJ QklPX2NsZWFyX3JldHJ5X2ZsYWdzKGIpOwotIAkJaWYgKHJldCA8IDApCi1AQCAtMzIzLDI1ICsz MzUsMTAgQEAgc3RhdGljIGludCBkZ3JhbV93cml0ZShCSU8gKmIsIGNvbnN0IGNoYQotIAlpZiAo IGRhdGEtPmNvbm5lY3RlZCApCi0gCQlyZXQ9d3JpdGVzb2NrZXQoYi0+bnVtLGluLGlubCk7Ci0g CWVsc2UKLS0jaWYgT1BFTlNTTF9VU0VfSVBWNgotLQkJaWYgKGRhdGEtPnBlZXIuc3NfZmFtaWx5 ID09IEFGX0lORVQpCi0gI2lmIGRlZmluZWQoTkVUV0FSRV9DTElCKSAmJiBkZWZpbmVkKE5FVFdB UkVfQlNEU09DSykKLS0JCQlyZXQ9c2VuZHRvKGItPm51bSwgKGNoYXIgKilpbiwgaW5sLCAwLCAo Y29uc3Qgc3RydWN0IHNvY2thZGRyICopJmRhdGEtPnBlZXIsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk ZHJfaW4pKTsKLSsJCXJldD1zZW5kdG8oYi0+bnVtLCAoY2hhciAqKWluLCBpbmwsIDAsICZkYXRh LT5wZWVyLnNhLCBzaXplb2YoZGF0YS0+cGVlcikpOwotICNlbHNlCi0tCQkJcmV0PXNlbmR0byhi LT5udW0sIGluLCBpbmwsIDAsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmZGF0YS0+cGVlciwg c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotLSNlbmRpZgotLQkJZWxzZQotLSNpZiBkZWZp bmVkKE5FVFdBUkVfQ0xJQikgJiYgZGVmaW5lZChORVRXQVJFX0JTRFNPQ0spCi0tCQkJcmV0PXNl bmR0byhiLT5udW0sIChjaGFyICopaW4sIGlubCwgMCwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAq KSZkYXRhLT5wZWVyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotLSNlbHNlCi0tCQkJ cmV0PXNlbmR0byhiLT5udW0sIGluLCBpbmwsIDAsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikm ZGF0YS0+cGVlciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLS0jZW5kaWYKLS0jZWxz ZQotLSNpZiBkZWZpbmVkKE5FVFdBUkVfQ0xJQikgJiYgZGVmaW5lZChORVRXQVJFX0JTRFNPQ0sp Ci0tCQlyZXQ9c2VuZHRvKGItPm51bSwgKGNoYXIgKilpbiwgaW5sLCAwLCAoY29uc3Qgc3RydWN0 IHNvY2thZGRyICopJmRhdGEtPnBlZXIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLS0j ZWxzZQotLQkJcmV0PXNlbmR0byhiLT5udW0sIGluLCBpbmwsIDAsIChjb25zdCBzdHJ1Y3Qgc29j a2FkZHIgKikmZGF0YS0+cGVlciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotLSNlbmRp ZgotKwkJcmV0PXNlbmR0byhiLT5udW0sIGluLCBpbmwsIDAsICZkYXRhLT5wZWVyLnNhLCBzaXpl b2YoZGF0YS0+cGVlcikpOwotICNlbmRpZgotIAotIAlCSU9fY2xlYXJfcmV0cnlfZmxhZ3MoYik7 Ci1AQCAtNDI4LDExICs0MjUsMjAgQEAgc3RhdGljIGxvbmcgZGdyYW1fY3RybChCSU8gKmIsIGlu dCBjbWQsIAotIAkJZWxzZQotIAkJCXsKLSAjZW5kaWYKLSsJCQlzd2l0Y2ggKHRvLT5zYV9mYW1p bHkpCi0rCQkJCXsKLSsJCQkJY2FzZSBBRl9JTkVUOgotKwkJCQkJbWVtY3B5KCZkYXRhLT5wZWVy LHRvLHNpemVvZihkYXRhLT5wZWVyLnNhX2luKSk7Ci0rCQkJCQlicmVhazsKLSAjaWYgT1BFTlNT TF9VU0VfSVBWNgotLQkJCW1lbWNweSgmKGRhdGEtPnBlZXIpLHRvLCBzaXplb2Yoc3RydWN0IHNv Y2thZGRyX3N0b3JhZ2UpKTsKLS0jZWxzZQotLQkJCW1lbWNweSgmKGRhdGEtPnBlZXIpLHRvLCBz aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0tI2VuZGlmCi0rCQkJCWNhc2UgQUZfSU5FVDY6 Ci0rCQkJCQltZW1jcHkoJmRhdGEtPnBlZXIsdG8sc2l6ZW9mKGRhdGEtPnBlZXIuc2FfaW42KSk7 Ci0rCQkJCQlicmVhazsKLSsjZW5kaWYKLSsJCQkJZGVmYXVsdDoKLSsJCQkJCW1lbWNweSgmZGF0 YS0+cGVlcix0byxzaXplb2YoZGF0YS0+cGVlci5zYSkpOwotKwkJCQkJYnJlYWs7Ci0rCQkJCX0K LSAjaWYgMAotIAkJCX0KLSAjZW5kaWYKLUBAIC01MzcsNDEgKzU0Myw2MCBAQCBzdGF0aWMgbG9u ZyBkZ3JhbV9jdHJsKEJJTyAqYiwgaW50IGNtZCwgCi0gCQlpZiAoIHRvICE9IE5VTEwpCi0gCQkJ ewotIAkJCWRhdGEtPmNvbm5lY3RlZCA9IDE7Ci0rCQkJc3dpdGNoICh0by0+c2FfZmFtaWx5KQot KwkJCQl7Ci0rCQkJCWNhc2UgQUZfSU5FVDoKLSsJCQkJCW1lbWNweSgmZGF0YS0+cGVlcix0byxz aXplb2YoZGF0YS0+cGVlci5zYV9pbikpOwotKwkJCQkJYnJlYWs7Ci0gI2lmIE9QRU5TU0xfVVNF X0lQVjYKLS0JCQltZW1jcHkoJihkYXRhLT5wZWVyKSx0bywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk cl9zdG9yYWdlKSk7Ci0tI2Vsc2UKLS0JCQltZW1jcHkoJihkYXRhLT5wZWVyKSx0bywgc2l6ZW9m KHN0cnVjdCBzb2NrYWRkcl9pbikpOwotLSNlbmRpZgotKwkJCQljYXNlIEFGX0lORVQ2OgotKwkJ CQkJbWVtY3B5KCZkYXRhLT5wZWVyLHRvLHNpemVvZihkYXRhLT5wZWVyLnNhX2luNikpOwotKwkJ CQkJYnJlYWs7Ci0rI2VuZGlmCi0rCQkJCWRlZmF1bHQ6Ci0rCQkJCQltZW1jcHkoJmRhdGEtPnBl ZXIsdG8sc2l6ZW9mKGRhdGEtPnBlZXIuc2EpKTsKLSsJCQkJCWJyZWFrOwotKwkJCQl9Ci0gCQkJ fQotIAkJZWxzZQotIAkJCXsKLSAJCQlkYXRhLT5jb25uZWN0ZWQgPSAwOwotLSNpZiBPUEVOU1NM X1VTRV9JUFY2Ci0tCQkJbWVtc2V0KCYoZGF0YS0+cGVlciksIDB4MDAsIHNpemVvZihzdHJ1Y3Qg c29ja2FkZHJfc3RvcmFnZSkpOwotLSNlbHNlCi0tCQkJbWVtc2V0KCYoZGF0YS0+cGVlciksIDB4 MDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLS0jZW5kaWYKLSsJCQltZW1zZXQoJihk YXRhLT5wZWVyKSwgMHgwMCwgc2l6ZW9mKGRhdGEtPnBlZXIpKTsKLSAJCQl9Ci0gCQlicmVhazsK LSAJY2FzZSBCSU9fQ1RSTF9ER1JBTV9HRVRfUEVFUjoKLSAJCXRvID0gKHN0cnVjdCBzb2NrYWRk ciAqKSBwdHI7Ci0tCi0rCQlzd2l0Y2ggKHRvLT5zYV9mYW1pbHkpCi0rCQkJewotKwkJCWNhc2Ug QUZfSU5FVDoKLSsJCQkJbWVtY3B5KHRvLCZkYXRhLT5wZWVyLChyZXQ9c2l6ZW9mKGRhdGEtPnBl ZXIuc2FfaW4pKSk7Ci0rCQkJCWJyZWFrOwotICNpZiBPUEVOU1NMX1VTRV9JUFY2Ci0tCQltZW1j cHkodG8sICYoZGF0YS0+cGVlciksIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkpOwot LQkJcmV0ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKLS0jZWxzZQotLQkJbWVt Y3B5KHRvLCAmKGRhdGEtPnBlZXIpLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0tCQly ZXQgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLS0jZW5kaWYKLSsJCQljYXNlIEFGX0lO RVQ2OgotKwkJCQltZW1jcHkodG8sJmRhdGEtPnBlZXIsKHJldD1zaXplb2YoZGF0YS0+cGVlci5z YV9pbjYpKSk7Ci0rCQkJCWJyZWFrOwotKyNlbmRpZgotKwkJCWRlZmF1bHQ6Ci0rCQkJCW1lbWNw eSh0bywmZGF0YS0+cGVlciwocmV0PXNpemVvZihkYXRhLT5wZWVyLnNhKSkpOwotKwkJCQlicmVh azsKLSsJCQl9Ci0gCQlicmVhazsKLSAJY2FzZSBCSU9fQ1RSTF9ER1JBTV9TRVRfUEVFUjoKLSAJ CXRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSBwdHI7Ci0tCi0rCQlzd2l0Y2ggKHRvLT5zYV9mYW1p bHkpCi0rCQkJewotKwkJCWNhc2UgQUZfSU5FVDoKLSsJCQkJbWVtY3B5KCZkYXRhLT5wZWVyLHRv LHNpemVvZihkYXRhLT5wZWVyLnNhX2luKSk7Ci0rCQkJCWJyZWFrOwotICNpZiBPUEVOU1NMX1VT RV9JUFY2Ci0tCQltZW1jcHkoJihkYXRhLT5wZWVyKSwgdG8sIHNpemVvZihzdHJ1Y3Qgc29ja2Fk ZHJfc3RvcmFnZSkpOwotLSNlbHNlCi0tCQltZW1jcHkoJihkYXRhLT5wZWVyKSwgdG8sIHNpemVv ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLS0jZW5kaWYKLSsJCQljYXNlIEFGX0lORVQ2OgotKwkJ CQltZW1jcHkoJmRhdGEtPnBlZXIsdG8sc2l6ZW9mKGRhdGEtPnBlZXIuc2FfaW42KSk7Ci0rCQkJ CWJyZWFrOwotKyNlbmRpZgotKwkJCWRlZmF1bHQ6Ci0rCQkJCW1lbWNweSgmZGF0YS0+cGVlcix0 byxzaXplb2YoZGF0YS0+cGVlci5zYSkpOwotKwkJCQlicmVhazsKLSsJCQl9Ci0gCQlicmVhazsK LSAJY2FzZSBCSU9fQ1RSTF9ER1JBTV9TRVRfTkVYVF9USU1FT1VUOgotIAkJbWVtY3B5KCYoZGF0 YS0+bmV4dF90aW1lb3V0KSwgcHRyLCBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKCmRpZmYgLS1n aXQgYS9vcGVuc3NsLTEuMC4wLWJldGE0LWVuZ2luZXNkaXIucGF0Y2ggYi9vcGVuc3NsLTEuMC4w LWJldGE0LWVuZ2luZXNkaXIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBh MzA0Y2UuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRhNC1lbmdpbmVzZGlyLnBhdGNo CisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNC9Db25maWd1cmUuZW5naW5lc2RpciBvcGVuc3NsLTEuMC4wLWJldGE0L0NvbmZpZ3VyZQot LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvQ29uZmlndXJlLmVuZ2luZXNkaXIJMjAwOS0xMS0xMiAx MjoxNzo1OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L0NvbmZpZ3Vy ZQkyMDA5LTExLTEyIDEyOjE5OjQ1LjAwMDAwMDAwMCArMDEwMAotQEAgLTYyMiw2ICs2MjIsNyBA QCBteSAkaWR4X211bHRpbGliID0gJGlkeCsrOwotIG15ICRwcmVmaXg9IiI7Ci0gbXkgJGxpYmRp cj0iIjsKLSBteSAkb3BlbnNzbGRpcj0iIjsKLStteSAkZW5naW5lc2Rpcj0iIjsKLSBteSAkZXhl X2V4dD0iIjsKLSBteSAkaW5zdGFsbF9wcmVmaXg9ICIkRU5WeydJTlNUQUxMX1BSRUZJWCd9IjsK LSBteSAkY3Jvc3NfY29tcGlsZV9wcmVmaXg9IiI7Ci1AQCAtODMzLDYgKzgzNCwxMCBAQCBQUk9D RVNTX0FSR1M6Ci0gCQkJCXsKLSAJCQkJJG9wZW5zc2xkaXI9JDE7Ci0gCQkJCX0KLSsJCQllbHNp ZiAoL14tLWVuZ2luZXNkaXI9KC4qKSQvKQotKwkJCQl7Ci0rCQkJCSRlbmdpbmVzZGlyPSQxOwot KwkJCQl9Ci0gCQkJZWxzaWYgKC9eLS1pbnN0YWxsLnByZWZpeD0oLiopJC8pCi0gCQkJCXsKLSAJ CQkJJGluc3RhbGxfcHJlZml4PSQxOwotQEAgLTEwNTUsNyArMTA2MCw3IEBAIGNob3AgJHByZWZp eCBpZiAkcHJlZml4ID1+IC8uXC8kLzsKLSAKLSAkb3BlbnNzbGRpcj0kcHJlZml4IC4gIi9zc2wi IGlmICRvcGVuc3NsZGlyIGVxICIiOwotICRvcGVuc3NsZGlyPSRwcmVmaXggLiAiLyIgLiAkb3Bl bnNzbGRpciBpZiAkb3BlbnNzbGRpciAhfiAvKF5cL3xeW2EtekEtWl06W1xcXC9dKS87Ci0tCi0r JGVuZ2luZXNkaXI9IiRwcmVmaXgvbGliL2VuZ2luZXMiIGlmICRlbmdpbmVzZGlyIGVxICIiOwot IAotIHByaW50ICJJc01LMU1GPSRJc01LMU1GXG4iOwotIAotQEAgLTE2NzYsNyArMTY4MSw3IEBA IHdoaWxlICg8SU4+KQotIAkJIyAkZm9vIGlzIHRvIGJlY29tZSAiJHByZWZpeC9saWIkbXVsdGls aWIvZW5naW5lcyI7Ci0gCQkjIGFzIE1ha2VmaWxlLm9yZyBhbmQgZW5naW5lcy9NYWtlZmlsZSBh cmUgYWRhcHRlZCBmb3IKLSAJCSMgJG11bHRpbGliIHN1ZmZpeC4KLS0JCW15ICRmb28gPSAiJHBy ZWZpeC9saWIvZW5naW5lcyI7Ci0rCQlteSAkZm9vID0gIiRlbmdpbmVzZGlyIjsKLSAJCSRmb28g PX4gcy9cXC9cXFxcL2c7Ci0gCQlwcmludCBPVVQgIiNkZWZpbmUgRU5HSU5FU0RJUiBcIiRmb29c IlxuIjsKLSAJCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvZW5naW5lcy9NYWtlZmls ZS5lbmdpbmVzZGlyIG9wZW5zc2wtMS4wLjAtYmV0YTQvZW5naW5lcy9NYWtlZmlsZQotLS0tIG9w ZW5zc2wtMS4wLjAtYmV0YTQvZW5naW5lcy9NYWtlZmlsZS5lbmdpbmVzZGlyCTIwMDktMTEtMTAg MDI6NTI6NTIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9lbmdpbmVz L01ha2VmaWxlCTIwMDktMTEtMTIgMTI6MjM6MDYuMDAwMDAwMDAwICswMTAwCi1AQCAtMTI0LDcg KzEyNCw3IEBAIGluc3RhbGw6Ci0gCQkJCXNmeD0iLnNvIjsgXAotIAkJCQljcCBjeWckJGwuZGxs ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQk bCQkc2Z4Lm5ldzsgXAotIAkJCSAgZmk7IFwKLS0JCQkgIGNobW9kIDU1NSAkKElOU1RBTExfUFJF RklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwK LSsJCQkgIGNobW9kIDc1NSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIp L2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKLSAJCQkgIG12IC1mICQoSU5TVEFMTF9QUkVG SVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldyAkKElO U1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNm eCApOyBcCi0gCQlkb25lOyBcCi0gCWZpCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1iZXRh NC1maXBzLnBhdGNoIGIvb3BlbnNzbC0xLjAuMC1iZXRhNC1maXBzLnBhdGNoCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBiYzgxZDcxLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAt YmV0YTQtZmlwcy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMDU5ICswLDAgQEAKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvQ29uZmlndXJlLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NC9Db25maWd1cmUKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L0NvbmZpZ3VyZS5maXBzCTIwMDkt MTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9D b25maWd1cmUJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02NjAsNiAr NjYwLDcgQEAgbXkgJGNtbGxfZW5jPSJjYW1lbGxpYS5vIGNtbGxfbWlzYy5vIGNtbAotIG15ICRw cm9jZXNzb3I9IiI7Ci0gbXkgJGRlZmF1bHRfcmFubGliOwotIG15ICRwZXJsOwotK215ICRmaXBz PTA7Ci0gCi0gCi0gIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0 IChSQzUgd2FzIGVuYWJsZWQgYmVmb3JlIDAuOS44KToKLUBAIC04MDYsNiArODA3LDEwIEBAIFBS T0NFU1NfQVJHUzoKLSAJCQl9Ci0gCQllbHNpZiAoL14zODYkLykKLSAJCQl7ICRwcm9jZXNzb3I9 Mzg2OyB9Ci0rCQllbHNpZiAoL15maXBzJC8pCi0rCQkJewotKwkJCSRmaXBzPTE7Ci0rCQkgICAg ICAgIH0KLSAJCWVsc2lmICgvXnJzYXJlZiQvKQotIAkJCXsKLSAJCQkjIE5vIFJTQXJlZiBzdXBw b3J0IGFueSBtb3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KLUBAIC0xMzY4LDYgKzEzNzMsMTEg QEAgJGNmbGFncy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIiBpZiAoISRubwotIAotICRjZmxhZ3Mu PSIgLURPUEVOU1NMX0JOX0FTTV9NT05UIiBpZiAoJGJuX29iaiA9fiAvLW1vbnQvKTsKLSAKLStp ZiAoJGZpcHMpCi0rCXsKLSsJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNT TF9GSVBTXG4iOwotKwl9Ci0rCi0gJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVp ZF9vYmogPX4gL1wubyQvKTsKLSAkZGVzX29iaj0kZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+ IC9cLm8kLyk7Ci0gJGJmX29iaj0kYmZfZW5jCQl1bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsK LUBAIC0xNTM1LDYgKzE1NDUsMTAgQEAgd2hpbGUgKDxJTj4pCi0gCXMvXkxJQktSQjU9LiovTElC S1JCNT0kd2l0aGFyZ3N7ImtyYjUtbGliIn0vOwotIAlzL15MSUJaTElCPS4qL0xJQlpMSUI9JHdp dGhhcmdzeyJ6bGliLWxpYiJ9LzsKLSAJcy9eWkxJQl9JTkNMVURFPS4qL1pMSUJfSU5DTFVERT0k d2l0aGFyZ3N7InpsaWItaW5jbHVkZSJ9LzsKLSsJaWYgKCRmaXBzKQotKwkJewotKwkJcy9eRklQ Uz0uKi9GSVBTPXllcy87Ci0rCQl9Ci0gCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9 JHNoYXJlZF90YXJnZXQvOwotIAlzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9t YXJrLzsKLSAJcy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykg XCQoU0hBUkVEX1NTTCkvIGlmICghJG5vX3NoYXJlZCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9iZi9iZl9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9iZi9iZl9za2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9iZi9iZl9za2V5 LmMuZmlwcwkyMDA4LTExLTEyIDA0OjU3OjUyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2JmL2JmX3NrZXkuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAw MDAwMCArMDEwMAotQEAgLTU5LDEwICs1OSwxNSBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNp bmNsdWRlIDxzdHJpbmcuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9ibG93ZmlzaC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgImJmX2xvY2wuaCIKLSAjaW5j bHVkZSAiYmZfcGkuaCIKLSAKLS12b2lkIEJGX3NldF9rZXkoQkZfS0VZICprZXksIGludCBsZW4s IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0rRklQU19OT05fRklQU19WQ0lQSEVSX0luaXQo QkYpCi0gCXsKLSAJaW50IGk7Ci0gCUJGX0xPTkcgKnAscmksaW5bMl07Ci1kaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9iZi9ibG93ZmlzaC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vYmYvYmxvd2Zpc2guaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2JmL2Jsb3dmaXNoLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JmL2Jsb3dmaXNoLmgJMjAwOS0xMS0xMiAx MjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMDQsNyArMTA0LDkgQEAgdHlwZWRlZiBzdHJ1 Y3QgYmZfa2V5X3N0Ci0gCUJGX0xPTkcgU1s0KjI1Nl07Ci0gCX0gQkZfS0VZOwotIAotLSAKLSsj aWZkZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQgcHJpdmF0ZV9CRl9zZXRfa2V5KEJGX0tFWSAqa2V5 LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSsjZW5kaWYKLSB2b2lkIEJG X3NldF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEp OwotIAotIHZvaWQgQkZfZW5jcnlwdChCRl9MT05HICpkYXRhLGNvbnN0IEJGX0tFWSAqa2V5KTsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2JuL2JuLmguZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9ibi9ibi5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vYm4vYm4uaC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYm4vYm4uaAkyMDA5LTExLTEyIDEyOjM2OjUwLjAw MDAwMDAwMCArMDEwMAotQEAgLTU0MCw2ICs1NDAsMTcgQEAgaW50CUJOX2lzX3ByaW1lX2V4KGNv bnN0IEJJR05VTSAqcCxpbnQgbgotIGludAlCTl9pc19wcmltZV9mYXN0dGVzdF9leChjb25zdCBC SUdOVU0gKnAsaW50IG5jaGVja3MsIEJOX0NUWCAqY3R4LAotIAkJaW50IGRvX3RyaWFsX2Rpdmlz aW9uLCBCTl9HRU5DQiAqY2IpOwotIAotK2ludCBCTl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0g KlhwLCBCSUdOVU0gKlhxLCBpbnQgbmJpdHMsIEJOX0NUWCAqY3R4KTsKLSsKLStpbnQgQk5fWDkz MV9kZXJpdmVfcHJpbWVfZXgoQklHTlVNICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAotKwkJ CWNvbnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwK LSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LCBCTl9HRU5DQiAqY2IpOwotK2ludCBC Tl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpw MiwKLSsJCQlCSUdOVU0gKlhwMSwgQklHTlVNICpYcDIsCi0rCQkJY29uc3QgQklHTlVNICpYcCwK LSsJCQljb25zdCBCSUdOVU0gKmUsIEJOX0NUWCAqY3R4LAotKwkJCUJOX0dFTkNCICpjYik7Ci0r Ci0gQk5fTU9OVF9DVFggKkJOX01PTlRfQ1RYX25ldyh2b2lkICk7Ci0gdm9pZCBCTl9NT05UX0NU WF9pbml0KEJOX01PTlRfQ1RYICpjdHgpOwotIGludCBCTl9tb2RfbXVsX21vbnRnb21lcnkoQklH TlVNICpyLGNvbnN0IEJJR05VTSAqYSxjb25zdCBCSUdOVU0gKmIsCi1kaWZmIC11cCAvZGV2L251 bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYm4vYm5feDkzMXAuYwotLS0tIC9kZXYvbnVs bAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2JuL2JuX3g5MzFwLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAg KzAxMDAKLUBAIC0wLDAgKzEsMjcyIEBACi0rLyogYm5feDkzMXAuYyAqLwotKy8qIFdyaXR0ZW4g YnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNT TAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdo dCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsg 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 LSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlw dHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2JuLmg+Ci0rCi0rLyogWDkuMzEgcm91dGluZXMgZm9yIHByaW1lIGRlcml2YXRp b24gKi8KLSsKLSsvKiBYOS4zMSBwcmltZSBkZXJpdmF0aW9uLiBUaGlzIGlzIHVzZWQgdG8gZ2Vu ZXJhdGUgdGhlIHByaW1lcyBwaQotKyAqIChwMSwgcDIsIHExLCBxMikgZnJvbSBhIHBhcmFtZXRl ciBYcGkgYnkgY2hlY2tpbmcgc3VjY2Vzc2l2ZSBvZGQKLSsgKiBpbnRlZ2Vycy4KLSsgKi8KLSsK LStzdGF0aWMgaW50IGJuX3g5MzFfZGVyaXZlX3BpKEJJR05VTSAqcGksIGNvbnN0IEJJR05VTSAq WHBpLCBCTl9DVFggKmN0eCwKLSsJCQlCTl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IGkgPSAwOwot KwlpZiAoIUJOX2NvcHkocGksIFhwaSkpCi0rCQlyZXR1cm4gMDsKLSsJaWYgKCFCTl9pc19vZGQo cGkpICYmICFCTl9hZGRfd29yZChwaSwgMSkpCi0rCQlyZXR1cm4gMDsKLSsJZm9yKDs7KQotKwkJ ewotKwkJaSsrOwotKwkJQk5fR0VOQ0JfY2FsbChjYiwgMCwgaSk7Ci0rCQkvKiBOQiAyNyBNUiBp cyBzcGVjaWZpY2VkIGluIFg5LjMxICovCi0rCQlpZiAoQk5faXNfcHJpbWVfZmFzdHRlc3RfZXgo cGksIDI3LCBjdHgsIDEsIGNiKSkKLSsJCQlicmVhazsKLSsJCWlmICghQk5fYWRkX3dvcmQocGks IDIpKQotKwkJCXJldHVybiAwOwotKwkJfQotKwlCTl9HRU5DQl9jYWxsKGNiLCAyLCBpKTsKLSsJ cmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBUaGlzIGlzIHRoZSBtYWluIFg5LjMxIHByaW1lIGRlcml2 YXRpb24gZnVuY3Rpb24uIEZyb20gcGFyYW1ldGVycwotKyAqIFhwMSwgWHAyIGFuZCBYcCBkZXJp dmUgdGhlIHByaW1lIHAuIElmIHRoZSBwYXJhbWV0ZXJzIHAxIG9yIHAyIGFyZQotKyAqIG5vdCBO VUxMIHRoZXkgd2lsbCBiZSByZXR1cm5lZCB0b286IHRoaXMgaXMgbmVlZGVkIGZvciB0ZXN0aW5n LgotKyAqLwotKwotK2ludCBCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05V TSAqcDEsIEJJR05VTSAqcDIsCi0rCQkJY29uc3QgQklHTlVNICpYcCwgY29uc3QgQklHTlVNICpY cDEsIGNvbnN0IEJJR05VTSAqWHAyLAotKwkJCWNvbnN0IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgs IEJOX0dFTkNCICpjYikKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJQklHTlVNICp0LCAqcDFw MiwgKnBtMTsKLSsKLSsJLyogT25seSBldmVuIGUgc3VwcG9ydGVkICovCi0rCWlmICghQk5faXNf b2RkKGUpKQotKwkJcmV0dXJuIDA7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwotKwlpZiAoIXAx KQotKwkJcDEgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0rCWlmICghcDIpCi0rCQlwMiA9IEJOX0NU WF9nZXQoY3R4KTsKLSsKLSsJdCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSsJcDFwMiA9IEJOX0NU WF9nZXQoY3R4KTsKLSsKLSsJcG0xID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlpZiAoIWJuX3g5 MzFfZGVyaXZlX3BpKHAxLCBYcDEsIGN0eCwgY2IpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICgh Ym5feDkzMV9kZXJpdmVfcGkocDIsIFhwMiwgY3R4LCBjYikpCi0rCQlnb3RvIGVycjsKLSsKLSsJ aWYgKCFCTl9tdWwocDFwMiwgcDEsIHAyLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIEZp cnN0IHNldCBwIHRvIHZhbHVlIG9mIFJwICovCi0rCi0rCWlmICghQk5fbW9kX2ludmVyc2UocCwg cDIsIHAxLCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fbXVsKHAsIHAsIHAyLCBj dHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fbW9kX2ludmVyc2UodCwgcDEsIHAyLCBj dHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fbXVsKHQsIHQsIHAxLCBjdHgpKQotKwkJ Z290byBlcnI7Ci0rCi0rCWlmICghQk5fc3ViKHAsIHAsIHQpKQotKwkJZ290byBlcnI7Ci0rCi0r CWlmIChwLT5uZWcgJiYgIUJOX2FkZChwLCBwLCBwMXAyKSkKLSsJCWdvdG8gZXJyOwotKwotKwkv KiBwIG5vdyBlcXVhbHMgUnAgKi8KLSsKLSsJaWYgKCFCTl9tb2Rfc3ViKHAsIHAsIFhwLCBwMXAy LCBjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCWlmICghQk5fYWRkKHAsIHAsIFhwKSkKLSsJCWdv dG8gZXJyOwotKwotKwkvKiBwIG5vdyBlcXVhbHMgWXAwICovCi0rCi0rCWZvciAoOzspCi0rCQl7 Ci0rCQlpbnQgaSA9IDE7Ci0rCQlCTl9HRU5DQl9jYWxsKGNiLCAwLCBpKyspOwotKwkJaWYgKCFC Tl9jb3B5KHBtMSwgcCkpCi0rCQkJZ290byBlcnI7Ci0rCQlpZiAoIUJOX3N1Yl93b3JkKHBtMSwg MSkpCi0rCQkJZ290byBlcnI7Ci0rCQlpZiAoIUJOX2djZCh0LCBwbTEsIGUsIGN0eCkpCi0rCQkJ Z290byBlcnI7Ci0rCQlpZiAoQk5faXNfb25lKHQpCi0rCQkvKiBYOS4zMSBzcGVjaWZpZXMgOCBN UiBhbmQgMSBMdWNhcyB0ZXN0IG9yIGFueSBwcmltZSB0ZXN0Ci0rCQkgKiBvZmZlcmluZyBzaW1p bGFyIG9yIGJldHRlciBndWFyYW50ZWVzIDUwIE1SIGlzIGNvbnNpZGVyYWJseSAKLSsJCSAqIGJl dHRlci4KLSsJCSAqLwotKwkJCSYmIEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHAsIDUwLCBjdHgs IDEsIGNiKSkKLSsJCQlicmVhazsKLSsJCWlmICghQk5fYWRkKHAsIHAsIHAxcDIpKQotKwkJCWdv dG8gZXJyOwotKwkJfQotKwotKwlCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKTsKLSsKLSsJcmV0ID0g MTsKLSsKLSsJZXJyOgotKwotKwlCTl9DVFhfZW5kKGN0eCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0r CX0KLSsKLSsvKiBHZW5lcmF0ZSBwYWlyIG9mIHBhcmFtdGVycyBYcCwgWHEgZm9yIFg5LjMxIHBy aW1lIGdlbmVyYXRpb24uCi0rICogTm90ZTogbmJpdHMgcGFyYW10ZXIgaXMgc3VtIG9mIG51bWJl ciBvZiBiaXRzIGluIGJvdGguCi0rICovCi0rCi0raW50IEJOX1g5MzFfZ2VuZXJhdGVfWHBxKEJJ R05VTSAqWHAsIEJJR05VTSAqWHEsIGludCBuYml0cywgQk5fQ1RYICpjdHgpCi0rCXsKLSsJQklH TlVNICp0OwotKwlpbnQgaTsKLSsJLyogTnVtYmVyIG9mIGJpdHMgZm9yIGVhY2ggcHJpbWUgaXMg b2YgdGhlIGZvcm0KLSsJICogNTEyKzEyOHMgZm9yIHMgPSAwLCAxLCAuLi4KLSsJICovCi0rCWlm ICgobmJpdHMgPCAxMDI0KSB8fCAobmJpdHMgJiAweGZmKSkKLSsJCXJldHVybiAwOwotKwluYml0 cyA+Pj0gMTsKLSsJLyogVGhlIHJhbmRvbSB2YWx1ZSBYcCBtdXN0IGJlIGJldHdlZW4gc3FydCgy KSAqIDJeKG5iaXRzLTEpIGFuZAotKwkgKiAyXm5iaXRzIC0gMS4gQnkgc2V0dGluZyB0aGUgdG9w IHR3byBiaXRzIHdlIGVuc3VyZSB0aGF0IHRoZSBsb3dlcgotKwkgKiBib3VuZCBpcyBleGNlZWRl ZC4KLSsJICovCi0rCWlmICghQk5fcmFuZChYcCwgbmJpdHMsIDEsIDApKQotKwkJcmV0dXJuIDA7 Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwotKwl0ID0gQk5fQ1RYX2dldChjdHgpOwotKwotKwlm b3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQotKwkJewotKwkJaWYgKCFCTl9yYW5kKFhxLCBuYml0 cywgMSwgMCkpCi0rCQkJcmV0dXJuIDA7Ci0rCQkvKiBDaGVjayB0aGF0IHxYcCAtIFhxfCA+IDJe KG5iaXRzIC0gMTAwKSAqLwotKwkJQk5fc3ViKHQsIFhwLCBYcSk7Ci0rCQlpZiAoQk5fbnVtX2Jp dHModCkgPiAobmJpdHMgLSAxMDApKQotKwkJCWJyZWFrOwotKwkJfQotKwotKwlCTl9DVFhfZW5k KGN0eCk7Ci0rCi0rCWlmIChpIDwgMTAwMCkKLSsJCXJldHVybiAxOwotKwotKwlyZXR1cm4gMDsK LSsKLSsJfQotKwotKy8qIEdlbmVyYXRlIHByaW1lcyB1c2luZyBYOS4zMSBhbGdvcml0aG0uIE9m IHRoZSB2YWx1ZXMgcCwgcDEsIHAyLCBYcDEKLSsgKiBhbmQgWHAyIG9ubHkgJ3AnIG5lZWRzIHRv IGJlIG5vbi1OVUxMLiBJZiBhbnkgb2YgdGhlIG90aGVycyBhcmUgbm90IE5VTEwKLSsgKiB0aGUg cmVsZXZhbnQgcGFyYW1ldGVyIHdpbGwgYmUgc3RvcmVkIGluIGl0LgotKyAqCi0rICogRHVlIHRv IHRoZSBmYWN0IHRoYXQgfFhwIC0gWHF8ID4gMl4obmJpdHMgLSAxMDApIG11c3QgYmUgc2F0aXNm aWVkIFhwIGFuZCBYcQotKyAqIGFyZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIHByZXZpb3VzIGZ1bmN0 aW9uIGFuZCBzdXBwbGllZCBhcyBpbnB1dC4KLSsgKi8KLSsKLStpbnQgQk5fWDkzMV9nZW5lcmF0 ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCi0rCQkJQklHTlVN ICpYcDEsIEJJR05VTSAqWHAyLAotKwkJCWNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklH TlVNICplLCBCTl9DVFggKmN0eCwKLSsJCQlCTl9HRU5DQiAqY2IpCi0rCXsKLSsJaW50IHJldCA9 IDA7Ci0rCi0rCUJOX0NUWF9zdGFydChjdHgpOwotKwlpZiAoIVhwMSkKLSsJCVhwMSA9IEJOX0NU WF9nZXQoY3R4KTsKLSsJaWYgKCFYcDIpCi0rCQlYcDIgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0r CWlmICghQk5fcmFuZChYcDEsIDEwMSwgMCwgMCkpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUJO X3JhbmQoWHAyLCAxMDEsIDAsIDApKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFCTl9YOTMxX2Rl cml2ZV9wcmltZV9leChwLCBwMSwgcDIsIFhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikpCi0rCQln b3RvIGVycm9yOwotKwotKwlyZXQgPSAxOwotKwotKwllcnJvcjoKLSsJQk5fQ1RYX2VuZChjdHgp OwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9ibi9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Ju L01ha2VmaWxlCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vYm4vTWFrZWZpbGUuZmlw cwkyMDA4LTExLTEyIDA5OjE5OjAyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2JuL01ha2VmaWxlCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICsw MTAwCi1AQCAtMjYsMTMgKzI2LDEzIEBAIExJQlNSQz0JYm5fYWRkLmMgYm5fZGl2LmMgYm5fZXhw LmMgYm5fbGkKLSAJYm5fcHJpbnQuYyBibl9yYW5kLmMgYm5fc2hpZnQuYyBibl93b3JkLmMgYm5f YmxpbmQuYyBcCi0gCWJuX2tyb24uYyBibl9zcXJ0LmMgYm5fZ2NkLmMgYm5fcHJpbWUuYyBibl9l cnIuYyBibl9zcXIuYyBibl9hc20uYyBcCi0gCWJuX3JlY3AuYyBibl9tb250LmMgYm5fbXBpLmMg Ym5fZXhwMi5jIGJuX2dmMm0uYyBibl9uaXN0LmMgXAotLQlibl9kZXByLmMgYm5fY29uc3QuYwot Kwlibl9kZXByLmMgYm5fY29uc3QuYyBibl94OTMxcC5jCi0gCi0gTElCT0JKPQlibl9hZGQubyBi bl9kaXYubyBibl9leHAubyBibl9saWIubyBibl9jdHgubyBibl9tdWwubyBibl9tb2QubyBcCi0g CWJuX3ByaW50Lm8gYm5fcmFuZC5vIGJuX3NoaWZ0Lm8gYm5fd29yZC5vIGJuX2JsaW5kLm8gXAot IAlibl9rcm9uLm8gYm5fc3FydC5vIGJuX2djZC5vIGJuX3ByaW1lLm8gYm5fZXJyLm8gYm5fc3Fy Lm8gJChCTl9BU00pIFwKLSAJYm5fcmVjcC5vIGJuX21vbnQubyBibl9tcGkubyBibl9leHAyLm8g Ym5fZ2YybS5vIGJuX25pc3QubyBcCi0tCWJuX2RlcHIubyBibl9jb25zdC5vCi0rCWJuX2RlcHIu byBibl9jb25zdC5vIGJuX3g5MzFwLm8KLSAKLSBTUkM9ICQoTElCU1JDKQotIAotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwteDg2LnBsLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwteDg2LnBsCi0tLS0g b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwteDg2LnBsLmZpcHMJ MjAwOS0wNC0wNiAxNjoyNTowMi4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9jYW1lbGxpYS9hc20vY21sbC14ODYucGwJMjAwOS0xMS0xMiAxMjozNjo1MC4w MDAwMDAwMDAgKzAxMDAKLUBAIC03MjIsMTIgKzcyMiwxNSBAQCBteSAkYmlhcz1pbnQoQFRbMF0p P3NoaWZ0KEBUKTowOwotIH0KLSAmZnVuY3Rpb25fZW5kKCJDYW1lbGxpYV9Fa2V5Z2VuIik7Ci0g Ci0rJHNldGtleWZ1bmMgPSAiQ2FtZWxsaWFfc2V0X2tleSI7Ci0rJHNldGtleWZ1bmMgPSAicHJp dmF0ZV9DYW1lbGxpYV9zZXRfa2V5IiBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0rCi0gaWYgKCRP UEVOU1NMKSB7Ci0gIyBpbnQgQ2FtZWxsaWFfc2V0X2tleSAoCi0gIwkJY29uc3QgdW5zaWduZWQg Y2hhciAqdXNlcktleSwKLSAjCQlpbnQgYml0cywKLSAjCQlDQU1FTExJQV9LRVkgKmtleSkKLS0m ZnVuY3Rpb25fYmVnaW5fQigiQ2FtZWxsaWFfc2V0X2tleSIpOwotKyZmdW5jdGlvbl9iZWdpbl9C KCRzZXRrZXlmdW5jKTsKLSAJJnB1c2gJKCJlYngiKTsKLSAJJm1vdgkoImVjeCIsJndwYXJhbSgw KSk7CSMgcHVsbCBhcmd1bWVudHMKLSAJJm1vdgkoImVieCIsJndwYXJhbSgxKSk7Ci1AQCAtNzYw LDcgKzc2Myw3IEBAIGlmICgkT1BFTlNTTCkgewotICZzZXRfbGFiZWwoImRvbmUiLDQpOwotIAkm cG9wCSgiZWJ4Iik7Ci0gCSZyZXQJKCk7Ci0tJmZ1bmN0aW9uX2VuZF9CKCJDYW1lbGxpYV9zZXRf a2V5Iik7Ci0rJmZ1bmN0aW9uX2VuZF9CKCRzZXRrZXlmdW5jKTsKLSB9Ci0gCi0gQFNCT1g9KAot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaC5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2NhbWVsbGlhLmgKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oLmZpcHMJMjAwOS0x MS0xMiAxMjozNjo0OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICsw MTAwCi1AQCAtODgsNiArODgsMTEgQEAgc3RydWN0IGNhbWVsbGlhX2tleV9zdCAKLSAJfTsKLSB0 eXBlZGVmIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3QgQ0FNRUxMSUFfS0VZOwotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KGNvbnN0IHVuc2lnbmVk IGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAotKwlDQU1FTExJQV9LRVkgKmtleSk7Ci0r I2VuZGlmCi0rCi0gaW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNl cktleSwgY29uc3QgaW50IGJpdHMsCi0gCUNBTUVMTElBX0tFWSAqa2V5KTsKLSAKLWRpZmYgLXVw IC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsu YwotLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJsay5jCTIwMDktMTEt MTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDY4IEBACi0rLyogY3J5cHRv L2NhbWVsbGlhL2NhbWVsbGlhX21pc2MuYyAtKi0gbW9kZTpDOyBjLWZpbGUtc3R5bGU6ICJlYXki IC0qLSAqLwotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA2IFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAg IGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK LSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgot KyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqCi0rICovCi0rIAot KyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY2FtZWxs aWEuaD4KLSsjaW5jbHVkZSAiY21sbF9sb2NsLmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRv Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsj ZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IENhbWVsbGlhX3NldF9rZXkoY29u c3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0rCUNBTUVMTElBX0tF WSAqa2V5KQotKwl7Ci0rCWlmIChGSVBTX21vZGUoKSkKLSsJCUZJUFNfQkFEX0FCT1JUKENBTUVM TElBKQotKwlyZXR1cm4gcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KHVzZXJLZXksIGJpdHMsIGtl eSk7Ci0rCX0KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Nh bWVsbGlhL2NtbGxfbWlzYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxs aWEvY21sbF9taXNjLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9j bWxsX21pc2MuYy5maXBzCTIwMDgtMTAtMjggMTM6MTM6NTIuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMJMjAwOS0xMS0x MiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC01MiwxMSArNTIsMjAgQEAKLSAjaW5jbHVk ZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2NhbWVsbGlhLmg+Ci0g I2luY2x1ZGUgImNtbGxfbG9jbC5oIgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0g Ci0gY29uc3QgY2hhciBDQU1FTExJQV92ZXJzaW9uW109IkNBTUVMTElBIiBPUEVOU1NMX1ZFUlNJ T05fUFRFWFQ7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK2ludCBwcml2YXRlX0NhbWVsbGlh X3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0r CUNBTUVMTElBX0tFWSAqa2V5KQotKyNlbHNlCi0gaW50IENhbWVsbGlhX3NldF9rZXkoY29uc3Qg dW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCi0gCUNBTUVMTElBX0tFWSAq a2V5KQotKyNlbmRpZgotIAl7Ci0gCWlmKCF1c2VyS2V5IHx8ICFrZXkpCi0gCQlyZXR1cm4gLTE7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYW1lbGxpYS9NYWtlZmlsZS5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlCi0tLS0gb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FtZWxsaWEvTWFrZWZpbGUuZmlwcwkyMDA4LTEyLTIz IDEyOjMzOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2NhbWVsbGlhL01ha2VmaWxlCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1A QCAtMjMsOSArMjMsOSBAQCBBUFBTPQotIAotIExJQj0kKFRPUCkvbGliY3J5cHRvLmEKLSBMSUJT UkM9Y2FtZWxsaWEuYyBjbWxsX21pc2MuYyBjbWxsX2VjYi5jIGNtbGxfY2JjLmMgY21sbF9vZmIu YyBcCi0tCSAgIGNtbGxfY2ZiLmMgY21sbF9jdHIuYyAKLSsJICAgY21sbF9jZmIuYyBjbWxsX2N0 ci5jIGNtbGxfZmJsay5jCi0gCi0tTElCT0JKPSBjbWxsX2VjYi5vIGNtbGxfb2ZiLm8gY21sbF9j ZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMpCi0rTElCT0JKPSBjbWxsX2VjYi5vIGNtbGxfb2Zi Lm8gY21sbF9jZmIubyBjbWxsX2N0ci5vICQoQ01MTF9FTkMpIGNtbGxfZmJsay5vCi0gCi0gU1JD PSAkKExJQlNSQykKLSAKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Nhc3Qv Y2FzdC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FzdC9jYXN0LmgKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYXN0L2Nhc3QuaC5maXBzCTIwMDktMTEtMTIgMTI6 MzY6NDkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2Fz dC9jYXN0LmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC04Myw3ICs4 Myw5IEBAIHR5cGVkZWYgc3RydWN0IGNhc3Rfa2V5X3N0Ci0gCWludCBzaG9ydF9rZXk7CS8qIFVz ZSByZWR1Y2VkIHJvdW5kcyBmb3Igc2hvcnQga2V5ICovCi0gCX0gQ0FTVF9LRVk7Ci0gCi0tIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMgCi0rdm9pZCBwcml2YXRlX0NBU1Rfc2V0X2tleShDQVNUX0tF WSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSsjZW5kaWYKLSB2 b2lkIENBU1Rfc2V0X2tleShDQVNUX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBj aGFyICpkYXRhKTsKLSB2b2lkIENBU1RfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAq aW4sdW5zaWduZWQgY2hhciAqb3V0LENBU1RfS0VZICprZXksCi0gCQkgICAgICBpbnQgZW5jKTsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Nhc3QvY19za2V5LmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jYXN0L2Nfc2tleS5jCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vY2FzdC9jX3NrZXkuYy5maXBzCTIwMDAtMDYtMDMgMTY6MTM6MzUuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vY2FzdC9jX3NrZXku YwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTU3LDYgKzU3LDExIEBA Ci0gICovCi0gCi0gI2luY2x1ZGUgPG9wZW5zc2wvY2FzdC5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgImNhc3RfbGNsLmgiCi0gI2luY2x1ZGUgImNhc3Rf cy5oIgotIAotQEAgLTcyLDcgKzc3LDcgQEAKLSAjZGVmaW5lIFM2IENBU1RfU190YWJsZTYKLSAj ZGVmaW5lIFM3IENBU1RfU190YWJsZTcKLSAKLS12b2lkIENBU1Rfc2V0X2tleShDQVNUX0tFWSAq a2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQotK0ZJUFNfTk9OX0ZJUFNf VkNJUEhFUl9Jbml0KENBU1QpCi0gCXsKLSAJQ0FTVF9MT05HIHhbMTZdOwotIAlDQVNUX0xPTkcg elsxNl07Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9jcnlwdG8uaC5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NyeXB0by5oCi0tLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vY3J5cHRvLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2NyeXB0by5oCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtNTQ2LDEyICs1NDYsNjkgQEAgdm9pZCBPcGVu U1NMRGllKGNvbnN0IGNoYXIgKmZpbGUsaW50IGxpbgotIHVuc2lnbmVkIGxvbmcgKk9QRU5TU0xf aWEzMmNhcF9sb2Modm9pZCk7Ci0gI2RlZmluZSBPUEVOU1NMX2lhMzJjYXAgKCooT1BFTlNTTF9p YTMyY2FwX2xvYygpKSkKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2RlZmluZSBGSVBTX0VS Uk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotKwkJYWxn ICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3JpdGhtIGVycm9yIGlnbm9yZWQiKTsKLSsK LSsjZGVmaW5lIEZJUFNfQkFEX0FCT1JUKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5F X18sIFwKLSsJCSNhbGcgIiBBbGdvcml0aG0gZm9yYmlkZGVuIGluIEZJUFMgbW9kZSIpOwotKwot KyNpZmRlZiBPUEVOU1NMX0ZJUFNfU1RSSUNUCi0rI2RlZmluZSBGSVBTX0JBRF9BTEdPUklUSE0o YWxnKSBGSVBTX0JBRF9BQk9SVChhbGcpCi0rI2Vsc2UKLSsjZGVmaW5lIEZJUFNfQkFEX0FMR09S SVRITShhbGcpIFwKLSsJeyBcCi0rCUZJUFNlcnIoRklQU19GX0hBU0hfRklOQUwsRklQU19SX05P Tl9GSVBTX01FVEhPRCk7IFwKLSsJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJBbGdvcml0aG09Iiwg I2FsZyk7IFwKLSsJcmV0dXJuIDA7IFwKLSsJfQotKyNlbmRpZgotKwotKy8qIExvdyBsZXZlbCBk aWdlc3QgQVBJIGJsb2NraW5nIG1hY3JvICovCi0rCi0rI2RlZmluZSBGSVBTX05PTl9GSVBTX01E X0luaXQoYWxnKSBcCi0rCWludCBhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykgXAotKwkJeyBcCi0r CQlpZiAoRklQU19tb2RlKCkpIFwKLSsJCQlGSVBTX0JBRF9BTEdPUklUSE0oYWxnKSBcCi0rCQly ZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKLSsJCX0gXAotKwlpbnQgcHJpdmF0ZV8j I2FsZyMjX0luaXQoYWxnIyNfQ1RYICpjKQotKwotKy8qIEZvciBjaXBoZXJzIHRoZSBBUEkgb2Z0 ZW4gdmFyaWVzIGZyb20gY2lwaGVyIHRvIGNpcGhlciBhbmQgZWFjaCBuZWVkcyB0bwotKyAqIGJl IHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNhc2UuIFZhcmlhYmxlIGtleSBsZW5ndGggY2lwaGVycyAo Qmxvd2Zpc2gsIFJDNCwKLSsgKiBDQVNUKSBob3dldmVyIGFyZSB2ZXJ5IHNpbWlsYXIgYW5kIGNh biB1c2UgYSBibG9ja2luZyBtYWNyby4KLSsgKi8KLSsKLSsjZGVmaW5lIEZJUFNfTk9OX0ZJUFNf VkNJUEhFUl9Jbml0KGFsZykgXAotKwl2b2lkIGFsZyMjX3NldF9rZXkoYWxnIyNfS0VZICprZXks IGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpIFwKLSsJCXsgXAotKwkJaWYgKEZJ UFNfbW9kZSgpKSBcCi0rCQkJRklQU19CQURfQUJPUlQoYWxnKSBcCi0rCQlwcml2YXRlXyMjYWxn IyNfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7IFwKLSsJCX0gXAotKwl2b2lkIHByaXZhdGVfIyNh bGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVuLCBcCi0rCQkJCQljb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhKQotKwotKyNlbHNlCi0rCi0rI2RlZmluZSBGSVBTX05PTl9GSVBTX1ZD SVBIRVJfSW5pdChhbGcpIFwKLSsJdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBp bnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQotKwotKyNkZWZpbmUgRklQU19OT05f RklQU19NRF9Jbml0KGFsZykgXAotKwlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMpIAotKwot KyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICovCi0rCi0gLyogQkVHSU4gRVJST1IgQ09ERVMg Ki8KLSAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0aGUgc2Ny aXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwotICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2ludCBtYXkg YmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgotICAqLwotIHZvaWQg RVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3Modm9pZCk7Ci0gCi0rI2RlZmluZSBPUEVOU1NMX0hBVkVf SU5JVAkxCi0rdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKTsKLSsKLSAvKiBFcnJvciBj b2RlcyBmb3IgdGhlIENSWVBUTyBmdW5jdGlvbnMuICovCi0gCi0gLyogRnVuY3Rpb24gY29kZXMu ICovCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9lcnIuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZGgvZGhfZXJyLmMuZmlwcwkyMDA2LTExLTIxIDIyOjI5OjM3LjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoX2Vyci5jCTIw MDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtNzMsNiArNzMsOCBAQCBzdGF0 aWMgRVJSX1NUUklOR19EQVRBIERIX3N0cl9mdW5jdHNbXT0KLSB7RVJSX0ZVTkMoREhfRl9DT01Q VVRFX0tFWSksCSJDT01QVVRFX0tFWSJ9LAotIHtFUlJfRlVOQyhESF9GX0RIUEFSQU1TX1BSSU5U X0ZQKSwJIkRIcGFyYW1zX3ByaW50X2ZwIn0sCi0ge0VSUl9GVU5DKERIX0ZfREhfQlVJTFRJTl9H RU5QQVJBTVMpLAkiREhfQlVJTFRJTl9HRU5QQVJBTVMifSwKLSt7RVJSX0ZVTkMoREhfRl9ESF9D T01QVVRFX0tFWSksCSJESF9jb21wdXRlX2tleSJ9LAotK3tFUlJfRlVOQyhESF9GX0RIX0dFTkVS QVRFX0tFWSksCSJESF9nZW5lcmF0ZV9rZXkifSwKLSB7RVJSX0ZVTkMoREhfRl9ESF9ORVdfTUVU SE9EKSwJIkRIX25ld19tZXRob2QifSwKLSB7RVJSX0ZVTkMoREhfRl9ESF9QQVJBTV9ERUNPREUp LAkiREhfUEFSQU1fREVDT0RFIn0sCi0ge0VSUl9GVU5DKERIX0ZfREhfUFJJVl9ERUNPREUpLAki REhfUFJJVl9ERUNPREUifSwKLUBAIC05NCw2ICs5Niw3IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RB VEEgREhfc3RyX3JlYXNvbnNbXT0KLSB7RVJSX1JFQVNPTihESF9SX0JOX0VSUk9SKSAgICAgICAg ICAgICAgICwiYm4gZXJyb3IifSwKLSB7RVJSX1JFQVNPTihESF9SX0RFQ09ERV9FUlJPUikgICAg ICAgICAgICwiZGVjb2RlIGVycm9yIn0sCi0ge0VSUl9SRUFTT04oREhfUl9JTlZBTElEX1BVQktF WSkgICAgICAgICAsImludmFsaWQgcHVibGljIGtleSJ9LAotK3tFUlJfUkVBU09OKERIX1JfS0VZ X1NJWkVfVE9PX1NNQUxMKSAgICAgLCJrZXkgc2l6ZSB0b28gc21hbGwifSwKLSB7RVJSX1JFQVNP TihESF9SX0tFWVNfTk9UX1NFVCkgICAgICAgICAgICwia2V5cyBub3Qgc2V0In0sCi0ge0VSUl9S RUFTT04oREhfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0s Ci0ge0VSUl9SRUFTT04oREhfUl9OT19QQVJBTUVURVJTX1NFVCkgICAgICAsIm5vIHBhcmFtZXRl cnMgc2V0In0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9nZW4u Yy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoX2dlbi5jCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlwcwkyMDA1LTA0LTI2IDIwOjUzOjE1 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoX2dl bi5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtNjUsNiArNjUsMTAg QEAKLSAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotICNp bmNsdWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBz dGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsIGludCBwcmltZV9sZW4sIGlu dCBnZW5lcmF0b3IsIEJOX0dFTkNCICpjYik7Ci0gCi1AQCAtMTA2LDYgKzExMCwyMCBAQCBzdGF0 aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsCi0gCWludCBnLG9rPSAtMTsKLSAJ Qk5fQ1RYICpjdHg9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBB UkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0r Ci0rCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVfbGVuIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9N T0RVTFVTX0JJVFMpKQotKwkJewotKwkJREhlcnIoREhfRl9ESF9CVUlMVElOX0dFTlBBUkFNUywg REhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0r Ci0gCWN0eD1CTl9DVFhfbmV3KCk7Ci0gCWlmIChjdHggPT0gTlVMTCkgZ290byBlcnI7Ci0gCUJO X0NUWF9zdGFydChjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZGgv ZGguaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoLmgKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaC5oLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo0OS4wMDAw MDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaC5oCTIwMDkt MTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtNzcsNiArNzcsOCBAQAotICMgZGVm aW5lIE9QRU5TU0xfREhfTUFYX01PRFVMVVNfQklUUwkxMDAwMAotICNlbmRpZgotIAotKyNkZWZp bmUgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAotKwotICNkZWZpbmUgREhf RkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKLSAjZGVmaW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNU VElNRSAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERICi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBj b25zdGFudCB0aW1lCi1AQCAtMjQxLDYgKzI0Myw4IEBAIHZvaWQgRVJSX2xvYWRfREhfc3RyaW5n cyh2b2lkKTsKLSAjZGVmaW5lIERIX0ZfR0VORVJBVEVfUEFSQU1FVEVSUwkJCSAxMDQKLSAjZGVm aW5lIERIX0ZfUEtFWV9ESF9ERVJJVkUJCQkJIDExMgotICNkZWZpbmUgREhfRl9QS0VZX0RIX0tF WUdFTgkJCQkgMTEzCi0rI2RlZmluZSBESF9GX0RIX0NPTVBVVEVfS0VZCQkJCSAxMTQKLSsjZGVm aW5lIERIX0ZfREhfR0VORVJBVEVfS0VZCQkJIDExNQotIAotIC8qIFJlYXNvbiBjb2Rlcy4gKi8K LSAjZGVmaW5lIERIX1JfQkFEX0dFTkVSQVRPUgkJCQkgMTAxCi1AQCAtMjUzLDYgKzI1Nyw3IEBA IHZvaWQgRVJSX2xvYWRfREhfc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIERIX1JfTk9fUEFSQU1F VEVSU19TRVQJCQkJIDEwNwotICNkZWZpbmUgREhfUl9OT19QUklWQVRFX1ZBTFVFCQkJCSAxMDAK LSAjZGVmaW5lIERIX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEwNQotKyNkZWZpbmUg REhfUl9LRVlfU0laRV9UT09fU01BTEwJCQkJIDExMAotIAotICNpZmRlZiAgX19jcGx1c3BsdXMK LSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kaC9kaF9rZXkuYy5maXBz IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZGgvZGhfa2V5LmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjIzLjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RoL2RoX2tleS5jCTIw MDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtNjEsNiArNjEsOSBAQAotICNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNs dWRlIDxvcGVuc3NsL2RoLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSAKLSBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgp OwotIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCBCSUdO VU0gKnB1Yl9rZXksIERIICpkaCk7Ci1AQCAtMTA3LDYgKzExMCwxNCBAQCBzdGF0aWMgaW50IGdl bmVyYXRlX2tleShESCAqZGgpCi0gCUJOX01PTlRfQ1RYICptb250PU5VTEw7Ci0gCUJJR05VTSAq cHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ aWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNf TUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlESGVycihESF9GX0dFTkVSQVRFX0tFWSwgREhf Ul9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0g CWN0eCA9IEJOX0NUWF9uZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLSAKLUBA IC0xODQsNiArMTk1LDEzIEBAIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAq a2UKLSAJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksREhfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci0g CQlnb3RvIGVycjsKLSAJCX0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUo KSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJ VFMpKQotKwkJewotKwkJREhlcnIoREhfRl9DT01QVVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09f U01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCi0gCWN0eCA9IEJOX0NUWF9u ZXcoKTsKLSAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVycjsKLUBAIC0yNTEsNiArMjY5LDkgQEAg c3RhdGljIGludCBkaF9ibl9tb2RfZXhwKGNvbnN0IERIICpkaCwgQgotIAotIHN0YXRpYyBpbnQg ZGhfaW5pdChESCAqZGgpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRl c3RfY2hlY2soKTsKLSsjZW5kaWYKLSAJZGgtPmZsYWdzIHw9IERIX0ZMQUdfQ0FDSEVfTU9OVF9Q OwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2RzYS9kc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX2dl bi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9nZW4uYy5maXBzCTIw MDgtMTItMjYgMTg6MTc6MjEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZHNhL2RzYV9nZW4uYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEw MAotQEAgLTc3LDggKzc3LDEyIEBACi0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9kc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gI2luY2x1ZGUgPG9wZW5z c2wvc2hhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KLSsjZW5kaWYKLSAjaW5jbHVkZSAiZHNhX2xvY2wuaCIKLSAKLSBpbnQgRFNBX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRzLAotQEAgLTEyNiw2ICsxMzAsMjEgQEAg aW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotIAlCTl9DVFggKmN0eD1O VUxMOwotIAl1bnNpZ25lZCBpbnQgaD0yOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0RT QV9CVUlMVElOX1BBUkFNR0VOLAotKwkJICAgIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7 Ci0rCSAgICBnb3RvIGVycjsKLSsJICAgIH0KLSsKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChiaXRz IDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURTQWVycihE U0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJ CWdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAocXNpemUgIT0gU0hBX0RJR0VTVF9M RU5HVEggJiYgcXNpemUgIT0gU0hBMjI0X0RJR0VTVF9MRU5HVEggJiYKLSAJICAgIHFzaXplICE9 IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKQotIAkJLyogaW52YWxpZCBxIHNpemUgKi8KLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RzYS9kc2EuaC5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2RzYS9kc2EuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Rz YS9kc2EuaC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYS5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAw MDAwMDAwICswMTAwCi1AQCAtODgsNiArODgsOCBAQAotICMgZGVmaW5lIE9QRU5TU0xfRFNBX01B WF9NT0RVTFVTX0JJVFMJMTAwMDAKLSAjZW5kaWYKLSAKLSsjZGVmaW5lIE9QRU5TU0xfRFNBX0ZJ UFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0rCi0gI2RlZmluZSBEU0FfRkxBR19DQUNIRV9NT05U X1AJMHgwMQotICNkZWZpbmUgRFNBX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAgICAgICAweDAyIC8q IG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERTQQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqIGltcGxlbWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0 YW50IHRpbWUKLUBAIC05Nyw2ICs5OSwyMSBAQAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqIGJlIHVzZWQgZm9yIGFsbCBleHBvbmVudHMuCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gCi0rLyogSWYgdGhp cyBmbGFnIGlzIHNldCB0aGUgRFNBIG1ldGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJl IHVzZWQKLSsgKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9k dWxlIG1ldGhvZC4gSWYgYW4KLSsgKiBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMg b3duIG1ldGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJpbGl0eQotKyAqIHRvIGVuc3VyZSB0aGUgcmVz dWx0IGlzIGNvbXBsaWFudC4KLSsgKi8KLSsKLSsjZGVmaW5lIERTQV9GTEFHX0ZJUFNfTUVUSE9E CQkJMHgwNDAwCi0rCi0rLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3Jt YWxseSBkaXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCi0rICogcGVybWl0dGVkIGl0IGlzIHRoZW4g dGhlIGFwcGxpY2F0aW9ucyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUKLSsgKiB1 c2FnZSBpcyBjb21wbGlhbnQuCi0rICovCi0rCi0rI2RlZmluZSBEU0FfRkxBR19OT05fRklQU19B TExPVwkJCTB4MDQwMAotKwotICNpZmRlZiAgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKLSAj ZW5kaWYKLUBAIC0yNzAsOCArMjg3LDExIEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9p ZCk7Ci0gI2RlZmluZSBEU0FfRl9ET19EU0FfUFJJTlQJCQkJIDEwNAotICNkZWZpbmUgRFNBX0Zf RFNBUEFSQU1TX1BSSU5UCQkJCSAxMDAKLSAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVF9G UAkJCSAxMDEKLSsjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTgkJCSAxMjQKLSsjZGVm aW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEyMwotICNkZWZpbmUgRFNBX0ZfRFNB X0RPX1NJR04JCQkJIDExMgotICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTEzCi0r I2RlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUwkJCSAxMjUKLSAjZGVmaW5lIERT QV9GX0RTQV9ORVdfTUVUSE9ECQkJCSAxMDMKLSAjZGVmaW5lIERTQV9GX0RTQV9QQVJBTV9ERUNP REUJCQkJIDExOQotICNkZWZpbmUgRFNBX0ZfRFNBX1BSSU5UX0ZQCQkJCSAxMDUKLUBAIC0yOTYs OSArMzE2LDEyIEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7Ci0gI2RlZmluZSBE U0FfUl9EQVRBX1RPT19MQVJHRV9GT1JfS0VZX1NJWkUJCSAxMDAKLSAjZGVmaW5lIERTQV9SX0RF Q09ERV9FUlJPUgkJCQkgMTA0Ci0gI2RlZmluZSBEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFCQkJ IDEwNgotKyNkZWZpbmUgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMCQkJIDExMAotICNkZWZpbmUg RFNBX1JfTUlTU0lOR19QQVJBTUVURVJTCQkJIDEwMQotICNkZWZpbmUgRFNBX1JfTU9EVUxVU19U T09fTEFSR0UJCQkJIDEwMwotKyNkZWZpbmUgRFNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMTEK LSAjZGVmaW5lIERTQV9SX05PX1BBUkFNRVRFUlNfU0VUCQkJCSAxMDcKLSsjZGVmaW5lIERTQV9S X09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDExMgotICNkZWZpbmUgRFNBX1Jf UEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEwNQotIAotICNpZmRlZiAgX19jcGx1c3BsdXMK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzCTIwMDctMDMtMjggMDI6MTU6MjUuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9rZXku YwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTYzLDkgKzYzLDUzIEBA Ci0gI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNs dWRlICJmaXBzX2xvY2wuaCIKLSAKLSBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0Eg KmRzYSk7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBpbnQgZmlwc19kc2Ff cGFpcndpc2VfZmFpbCA9IDA7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfZHNhX2tleWdlbih2b2lk KQotKwl7Ci0rCWZpcHNfZHNhX3BhaXJ3aXNlX2ZhaWwgPSAxOwotKwl9Ci0rCi0raW50IGZpcHNf Y2hlY2tfZHNhKERTQSAqZHNhKQotKwl7Ci0rCUVWUF9QS0VZICpwazsKLSsJdW5zaWduZWQgY2hh ciB0YnNbXSA9ICJEU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7Ci0rCWludCByZXQgPSAwOwotKwot KyAgICAJaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwot KwlFVlBfUEtFWV9zZXQxX0RTQShwaywgZHNhKTsKLSsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIHRicywgLTEsCi0rCQkJCQlOVUxMLCAwLCBFVlBfc2hhMSgpLCAwLCBOVUxM KSkKLSsJCWdvdG8gZXJyOwotKwotKwlyZXQgPSAxOwotKwotK2VycjoKLSsJaWYgKHJldCA9PSAw KQotKwkJewotKwkJZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOwotKwkJRklQU2VycihGSVBTX0Zf RklQU19DSEVDS19EU0EsRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJTEVEKTsKLSsJCX0KLSsKLSsJ aWYgKHBrKQotKwkJRVZQX1BLRVlfZnJlZShwayk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsj ZW5kaWYKLSsKLSBpbnQgRFNBX2dlbmVyYXRlX2tleShEU0EgKmRzYSkKLSAJewotIAlpZihkc2Et Pm1ldGgtPmRzYV9rZXlnZW4pCi1AQCAtNzksNiArMTIzLDE0IEBAIHN0YXRpYyBpbnQgZHNhX2J1 aWx0aW5fa2V5Z2VuKERTQSAqZHNhKQotIAlCTl9DVFggKmN0eD1OVUxMOwotIAlCSUdOVU0gKnB1 Yl9rZXk9TlVMTCwqcHJpdl9rZXk9TlVMTDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlm IChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykpCi0rCQl7Ci0rCQlEU0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fS0VZ R0VOLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJZ290byBlcnI7Ci0rCQl9Ci0rI2Vu ZGlmCi0rCi0gCWlmICgoY3R4PUJOX0NUWF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7Ci0gCi0g CWlmIChkc2EtPnByaXZfa2V5ID09IE5VTEwpCi1AQCAtMTE3LDYgKzE2OSwxNSBAQCBzdGF0aWMg aW50IGRzYV9idWlsdGluX2tleWdlbihEU0EgKmRzYSkKLSAKLSAJZHNhLT5wcml2X2tleT1wcml2 X2tleTsKLSAJZHNhLT5wdWJfa2V5PXB1Yl9rZXk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoZmlwc19kc2FfcGFpcndpc2VfZmFpbCkKLSsJ CQlCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOwotKwkJaWYoIWZpcHNfY2hlY2tfZHNhKGRz YSkpCi0rCQkgICAgZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0gCW9rPTE7Ci0gCi0gZXJyOgot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX29zc2wuYwotLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMJMjAwNy0wMy0yOCAwMjoxNToyNi4w MDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9kc2EvZHNhX29z c2wuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTY1LDYgKzY1LDkg QEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+ Ci0gI2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0gCi0gc3RhdGljIERTQV9TSUcgKmRzYV9k b19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRnc3QsIGludCBkbGVuLCBEU0EgKmRzYSk7Ci0g c3RhdGljIGludCBkc2Ffc2lnbl9zZXR1cChEU0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05V TSAqKmtpbnZwLCBCSUdOVU0gKipycCk7Ci1AQCAtODIsNyArODUsNyBAQCBOVUxMLCAvKiBkc2Ff bW9kX2V4cCwgKi8KLSBOVUxMLCAvKiBkc2FfYm5fbW9kX2V4cCwgKi8KLSBkc2FfaW5pdCwKLSBk c2FfZmluaXNoLAotLTAsCi0rRFNBX0ZMQUdfRklQU19NRVRIT0QsCi0gTlVMTCwKLSBOVUxMLAot IE5VTEwKLUBAIC0xMzcsNiArMTQwLDIwIEBAIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihj b25zdCB1bnNpZ24KLSAJaW50IHJlYXNvbj1FUlJfUl9CTl9MSUI7Ci0gCURTQV9TSUcgKnJldD1O VUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQo KSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19TSUdOLEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICByZXR1cm4gTlVMTDsKLSsJICAgIH0KLSsKLSsJaWYg KEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19N SU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNB X1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCXJldHVybiBOVUxMOwotKwkJfQotKyNlbmRpZgot KwotIAlCTl9pbml0KCZtKTsKLSAJQk5faW5pdCgmeHIpOwotIAotQEAgLTMxMiw2ICszMjksMjAg QEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkIAotIAkJcmV0dXJuIC0x OwotIAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19zZWxmdGVzdF9mYWls ZWQoKSkKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19WRVJJRlksRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsKLSsJ aWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQ U19NSU5fTU9EVUxVU19CSVRTKSkKLSsJCXsKLSsJCURTQWVycihEU0FfRl9EU0FfRE9fVkVSSUZZ LCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJcmV0dXJuIC0xOwotKwkJfQotKyNlbmRp ZgotKwotIAlpID0gQk5fbnVtX2JpdHMoZHNhLT5xKTsKLSAJLyogZmlwcyAxODYtMyBhbGxvd3Mg b25seSBkaWZmZXJlbnQgc2l6ZXMgZm9yIHEgKi8KLSAJaWYgKGkgIT0gMTYwICYmIGkgIT0gMjI0 ICYmIGkgIT0gMjU2KQotQEAgLTQwMyw2ICs0MzQsOSBAQCBzdGF0aWMgaW50IGRzYV9kb192ZXJp ZnkoY29uc3QgdW5zaWduZWQgCi0gCi0gc3RhdGljIGludCBkc2FfaW5pdChEU0EgKmRzYSkKLSB7 Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlm Ci0gCWRzYS0+ZmxhZ3N8PURTQV9GTEFHX0NBQ0hFX01PTlRfUDsKLSAJcmV0dXJuKDEpOwotIH0K LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Vyci9lcnJfYWxsLmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9lcnIvZXJyX2FsbC5jCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZXJyL2Vycl9hbGwuYy5maXBzCTIwMDktMDgtMDkgMTY6NTg6MDUuMDAw MDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXJyL2Vycl9hbGwu YwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTk2LDYgKzk2LDkgQEAK LSAjaW5jbHVkZSA8b3BlbnNzbC9vY3NwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0g I2luY2x1ZGUgPG9wZW5zc2wvdHMuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DTVMKLSAjaW5j bHVkZSA8b3BlbnNzbC9jbXMuaD4KLSAjZW5kaWYKLUBAIC0xNDksNiArMTUyLDkgQEAgdm9pZCBF UlJfbG9hZF9jcnlwdG9fc3RyaW5ncyh2b2lkKQotICNlbmRpZgotIAlFUlJfbG9hZF9PQ1NQX3N0 cmluZ3MoKTsKLSAJRVJSX2xvYWRfVUlfc3RyaW5ncygpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJRVJSX2xvYWRfRklQU19zdHJpbmdzKCk7Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05P X0NNUwotIAlFUlJfbG9hZF9DTVNfc3RyaW5ncygpOwotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2RpZ2VzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZXZwL2RpZ2VzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L2RpZ2VzdC5jLmZpcHMJMjAwOC0xMS0wNCAxMzowNjowOS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZGlnZXN0LmMJMjAwOS0xMS0xMiAxMjozNjo1 MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMTYsNiArMTE2LDcgQEAKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fRU5HSU5FCi0gI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+Ci0gI2VuZGlmCi0rI2luY2x1 ZGUgImV2cF9sb2NsLmgiCi0gCi0gdm9pZCBFVlBfTURfQ1RYX2luaXQoRVZQX01EX0NUWCAqY3R4 KQotIAl7Ci1AQCAtMTM3LDkgKzEzOCw1MCBAQCBpbnQgRVZQX0RpZ2VzdEluaXQoRVZQX01EX0NU WCAqY3R4LCBjb25zCi0gCXJldHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgsIHR5cGUsIE5VTEwp OwotIAl9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKy8qIFRoZSBwdXJwb3NlIG9mIHRo ZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQUwotKyAq IGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KLSsgKi8KLSsK LStzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9NRF9DVFggKmN0eCkKLSsJeyBGSVBTX0VSUk9SX0lH Tk9SRUQoIkRpZ2VzdCBpbml0Iik7IHJldHVybiAwO30KLSsKLStzdGF0aWMgaW50IGJhZF91cGRh dGUoRVZQX01EX0NUWCAqY3R4LGNvbnN0IHZvaWQgKmRhdGEsc2l6ZV90IGNvdW50KQotKwl7IEZJ UFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IHVwZGF0ZSIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGlj IGludCBiYWRfZmluYWwoRVZQX01EX0NUWCAqY3R4LHVuc2lnbmVkIGNoYXIgKm1kKQotKwl7IEZJ UFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IEZpbmFsIik7IHJldHVybiAwO30KLSsKLStzdGF0aWMg Y29uc3QgRVZQX01EIGJhZF9tZCA9Ci0rCXsKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJYmFk X2luaXQsCi0rCWJhZF91cGRhdGUsCi0rCWJhZF9maW5hbCwKLSsJTlVMTCwKLSsJTlVMTCwKLSsJ TlVMTCwKLSsJMCwKLSsJezAsMCwwLDB9LAotKwl9OwotKwotKyNlbmRpZgotKwotIGludCBFVlBf RGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGNvbnN0IEVWUF9NRCAqdHlwZSwgRU5HSU5F ICppbXBsKQotIAl7Ci0gCUVWUF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LEVWUF9NRF9DVFhfRkxB R19DTEVBTkVEKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFp bGVkKCkpCi0rCQl7Ci0rCQlGSVBTZXJyKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCxGSVBTX1Jf RklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJY3R4LT5kaWdlc3QgPSAmYmFkX21kOwotKwkJcmV0 dXJuIDA7Ci0rCQl9Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQotIAkvKiBX aGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVzZWQgb24gIkZpbmFsIidk IGNvbnRleHRzCi0gCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFkeSBoYXZlIGFuIEVOR0lO RSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZwotQEAgLTE5NSw2ICsyMzcsMTggQEAgaW50IEVWUF9E aWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0eCwgYwotICNlbmRpZgotIAlpZiAoY3R4LT5kaWdl c3QgIT0gdHlwZSkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoRklQU19tb2Rl KCkpCi0rCQkJewotKwkJCWlmICghKHR5cGUtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykgCi0r CQkJICYmICEoY3R4LT5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykpCi0r CQkJCXsKLSsJCQkJRVZQZXJyKEVWUF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxF RF9GT1JfRklQUyk7Ci0rCQkJCWN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLSsJCQkJcmV0dXJuIDA7 Ci0rCQkJCX0KLSsJCQl9Ci0rI2VuZGlmCi0gCQlpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdl c3QtPmN0eF9zaXplKQotIAkJCU9QRU5TU0xfZnJlZShjdHgtPm1kX2RhdGEpOwotIAkJY3R4LT5k aWdlc3Q9dHlwZTsKLUBAIC0yMjIsNiArMjc2LDkgQEAgc2tpcF90b19pbml0OgotIAotIGludCBF VlBfRGlnZXN0VXBkYXRlKEVWUF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90 IGNvdW50KQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNr KCk7Ci0rI2VuZGlmCi0gCXJldHVybiBjdHgtPnVwZGF0ZShjdHgsZGF0YSxjb3VudCk7Ci0gCX0K LSAKLUBAIC0yMzgsNiArMjk1LDkgQEAgaW50IEVWUF9EaWdlc3RGaW5hbChFVlBfTURfQ1RYICpj dHgsIHVucwotIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LCB1bnNpZ25l ZCBjaGFyICptZCwgdW5zaWduZWQgaW50ICpzaXplKQotIAl7Ci0gCWludCByZXQ7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gCi0gCU9Q RU5TU0xfYXNzZXJ0KGN0eC0+ZGlnZXN0LT5tZF9zaXplIDw9IEVWUF9NQVhfTURfU0laRSk7Ci0g CXJldD1jdHgtPmRpZ2VzdC0+ZmluYWwoY3R4LG1kKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2V2cC9lX2Flcy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v ZXZwL2VfYWVzLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZV9hZXMuYy5m aXBzCTIwMDQtMDEtMjggMjA6MDU6MzMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vZXZwL2VfYWVzLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAg KzAxMDAKLUBAIC02OSwzMiArNjksMjkgQEAgdHlwZWRlZiBzdHJ1Y3QKLSAKLSBJTVBMRU1FTlRf QkxPQ0tfQ0lQSEVSKGFlc18xMjgsIGtzLCBBRVMsIEVWUF9BRVNfS0VZLAotIAkJICAgICAgIE5J RF9hZXNfMTI4LCAxNiwgMTYsIDE2LCAxMjgsCi0tCQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBO VUxMLCAKLS0JCSAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICAgIEVWUF9D SVBIRVJfZ2V0X2FzbjFfaXYsCi0tCQkgICAgICAgTlVMTCkKLSsJCSAgICAgICBFVlBfQ0lQSF9G TEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCi0rCQkgICAgICAgYWVzX2luaXRf a2V5LAotKwkJICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpCi0gSU1QTEVNRU5UX0JMT0NL X0NJUEhFUihhZXNfMTkyLCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKLSAJCSAgICAgICBOSURfYWVz XzE5MiwgMTYsIDI0LCAxNiwgMTI4LAotLQkJICAgICAgIDAsIGFlc19pbml0X2tleSwgTlVMTCwg Ci0tCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKLS0JCSAgICAgICBFVlBfQ0lQSEVS X2dldF9hc24xX2l2LAotLQkJICAgICAgIE5VTEwpCi0rCQkgICAgICAgRVZQX0NJUEhfRkxBR19G SVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICAgIGFlc19pbml0X2tleSwK LSsJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQotIElNUExFTUVOVF9CTE9DS19DSVBI RVIoYWVzXzI1Niwga3MsIEFFUywgRVZQX0FFU19LRVksCi0gCQkgICAgICAgTklEX2Flc18yNTYs IDE2LCAzMiwgMTYsIDEyOCwKLS0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEwsIAotLQkJ ICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkgICAgICAgRVZQX0NJUEhFUl9nZXRf YXNuMV9pdiwKLS0JCSAgICAgICBOVUxMKQotLQotLSNkZWZpbmUgSU1QTEVNRU5UX0FFU19DRkJS KGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihhZXMsQUVTLEVWUF9BRVNfS0VZLGtzLGtzaXpl LGNiaXRzLDE2KQotLQotLUlNUExFTUVOVF9BRVNfQ0ZCUigxMjgsMSkKLS1JTVBMRU1FTlRfQUVT X0NGQlIoMTkyLDEpCi0tSU1QTEVNRU5UX0FFU19DRkJSKDI1NiwxKQotLQotLUlNUExFTUVOVF9B RVNfQ0ZCUigxMjgsOCkKLS1JTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDgpCi0tSU1QTEVNRU5UX0FF U19DRkJSKDI1Niw4KQotKwkJICAgICAgIEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFH X0RFRkFVTFRfQVNOMSwKLSsJCSAgICAgICBhZXNfaW5pdF9rZXksCi0rCQkgICAgICAgTlVMTCwg TlVMTCwgTlVMTCwgTlVMTCkKLSsKLSsjZGVmaW5lIElNUExFTUVOVF9BRVNfQ0ZCUihrc2l6ZSxj Yml0cyxmbGFncykJSU1QTEVNRU5UX0NGQlIoYWVzLEFFUyxFVlBfQUVTX0tFWSxrcyxrc2l6ZSxj Yml0cywxNixmbGFncykKLSsKLStJTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDEsRVZQX0NJUEhfRkxB R19GSVBTKQotK0lNUExFTUVOVF9BRVNfQ0ZCUigxOTIsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0r SU1QTEVNRU5UX0FFU19DRkJSKDI1NiwxLEVWUF9DSVBIX0ZMQUdfRklQUykKLSsKLStJTVBMRU1F TlRfQUVTX0NGQlIoMTI4LDgsRVZQX0NJUEhfRkxBR19GSVBTKQotK0lNUExFTUVOVF9BRVNfQ0ZC UigxOTIsOCxFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rSU1QTEVNRU5UX0FFU19DRkJSKDI1Niw4LEVW UF9DSVBIX0ZMQUdfRklQUykKLSAKLSBzdGF0aWMgaW50IGFlc19pbml0X2tleShFVlBfQ0lQSEVS X0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0gCQkgICBjb25zdCB1bnNpZ25l ZCBjaGFyICppdiwgaW50IGVuYykKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2V2cC9lX2NhbWVsbGlhLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZV9j YW1lbGxpYS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfY2FtZWxsaWEu Yy5maXBzCTIwMDYtMDgtMzEgMjI6NTY6MjAuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAw MDAwMDAwMCArMDEwMAotQEAgLTkzLDcgKzkzLDcgQEAgSU1QTEVNRU5UX0JMT0NLX0NJUEhFUihj YW1lbGxpYV8yNTYsIGtzLAotIAlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotIAlOVUxMKQotIAot LSNkZWZpbmUgSU1QTEVNRU5UX0NBTUVMTElBX0NGQlIoa3NpemUsY2JpdHMpCUlNUExFTUVOVF9D RkJSKGNhbWVsbGlhLENhbWVsbGlhLEVWUF9DQU1FTExJQV9LRVksa3Msa3NpemUsY2JpdHMsMTYp Ci0rI2RlZmluZSBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUihrc2l6ZSxjYml0cykJSU1QTEVNRU5U X0NGQlIoY2FtZWxsaWEsQ2FtZWxsaWEsRVZQX0NBTUVMTElBX0tFWSxrcyxrc2l6ZSxjYml0cywx NiwwKQotIAotIElNUExFTUVOVF9DQU1FTExJQV9DRkJSKDEyOCwxKQotIElNUExFTUVOVF9DQU1F TExJQV9DRkJSKDE5MiwxKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L2VfZGVzMy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfZGVzMy5jCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2VfZGVzMy5jLmZpcHMJMjAwOC0xMi0y OSAxMzozNTo0Ny4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9ldnAvZV9kZXMzLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0y MDYsOSArMjA2LDkgQEAgc3RhdGljIGludCBkZXNfZWRlM19jZmI4X2NpcGhlcihFVlBfQ0lQSAot ICAgICB9Ci0gCi0gQkxPQ0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIE5JRF9k ZXNfZWRlLCA4LCAxNiwgOCwgNjQsCi0tCQkJRVZQX0NJUEhfUkFORF9LRVksIGRlc19lZGVfaW5p dF9rZXksIE5VTEwsIAotLQkJCUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCi0tCQkJRVZQX0NJUEhF Ul9nZXRfYXNuMV9pdiwKLSsJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xF VlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKLSsJCQlkZXNfZWRlX2luaXRfa2V5LAotKwkJCU5V TEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJsKQotIAotICNkZWZpbmUgZGVzX2VkZTNfY2Zi NjRfY2lwaGVyIGRlc19lZGVfY2ZiNjRfY2lwaGVyCi1AQCAtMjE3LDIxICsyMTcsMjEgQEAgQkxP Q0tfQ0lQSEVSX2RlZnMoZGVzX2VkZSwgREVTX0VERV9LRVksIAotICNkZWZpbmUgZGVzX2VkZTNf ZWNiX2NpcGhlciBkZXNfZWRlX2VjYl9jaXBoZXIKLSAKLSBCTE9DS19DSVBIRVJfZGVmcyhkZXNf ZWRlMywgREVTX0VERV9LRVksIE5JRF9kZXNfZWRlMywgOCwgMjQsIDgsIDY0LAotLQkJCUVWUF9D SVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSwgTlVMTCwgCi0tCQkJRVZQX0NJUEhFUl9z ZXRfYXNuMV9pdiwKLS0JCQlFVlBfQ0lQSEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFO RF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJ CWRlc19lZGUzX2luaXRfa2V5LAotKwkJCU5VTEwsIE5VTEwsIE5VTEwsCi0gCQkJZGVzM19jdHJs KQotIAotIEJMT0NLX0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNf ZWRlMywyNCw4LDEsCi0tCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tl eSxOVUxMLAotLQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQ SEVSX2dldF9hc24xX2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBT fEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwK LSsJCSAgICAgTlVMTCwgTlVMTCwgTlVMTCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIEJMT0NL X0NJUEhFUl9kZWZfY2ZiKGRlc19lZGUzLERFU19FREVfS0VZLE5JRF9kZXNfZWRlMywyNCw4LDgs Ci0tCQkgICAgIEVWUF9DSVBIX1JBTkRfS0VZLCBkZXNfZWRlM19pbml0X2tleSxOVUxMLAotLQkJ ICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAotLQkJICAgICBFVlBfQ0lQSEVSX2dldF9hc24x X2l2LAotKwkJRVZQX0NJUEhfUkFORF9LRVl8RVZQX0NJUEhfRkxBR19GSVBTfEVWUF9DSVBIX0ZM QUdfREVGQVVMVF9BU04xLAotKwkJICAgICBkZXNfZWRlM19pbml0X2tleSwKLSsJCSAgICAgTlVM TCwgTlVMTCwgTlVMTCwKLSAJCSAgICAgZGVzM19jdHJsKQotIAotIHN0YXRpYyBpbnQgZGVzX2Vk ZV9pbml0X2tleShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXks Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZV9udWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcwkyMDA4LTEwLTMxIDIwOjQ4OjI0LjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9lX251bGwuYwky MDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTY5LDcgKzY5LDcgQEAgc3Rh dGljIGNvbnN0IEVWUF9DSVBIRVIgbl9jaXBoZXI9Ci0gCXsKLSAJTklEX3VuZGVmLAotIAkxLDAs MCwKLS0JMCwKLSsJRVZQX0NJUEhfRkxBR19GSVBTLAotIAludWxsX2luaXRfa2V5LAotIAludWxs X2NpcGhlciwKLSAJTlVMTCwKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2 cC9ldnBfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2VuYy5j Ci0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzCTIwMDgt MTEtMTIgMDQ6NTg6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vZXZwL2V2cF9lbmMuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAot QEAgLTY4LDggKzY4LDUzIEBACi0gCi0gY29uc3QgY2hhciBFVlBfdmVyc2lvbltdPSJFVlAiIE9Q RU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyogVGhl IHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9ncmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNl IG5vbiBGSVBTCi0rICogYWxnb3JpdGhtcyBpbiBGSVBTIG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJy b3JzLgotKyAqLwotKwotK3N0YXRpYyBpbnQgYmFkX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCwg Y29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAotKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2 LCBpbnQgZW5jKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGluaXQiKTsgcmV0dXJu IDA7fQotKwotK3N0YXRpYyBpbnQgYmFkX2RvX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1 bnNpZ25lZCBjaGFyICpvdXQsCi0rCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25l ZCBpbnQgaW5sKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHVwZGF0ZSIpOyByZXR1 cm4gMDt9Ci0rCi0rLyogTkI6IG5vIGNsZWFudXAgYmVjYXVzZSBpdCBpcyBhbGxvd2VkIGFmdGVy IGZhaWxlZCBpbml0ICovCi0rCi0rc3RhdGljIGludCBiYWRfc2V0X2FzbjEoRVZQX0NJUEhFUl9D VFggKmN0eCwgQVNOMV9UWVBFICp0eXApCi0rCXsgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIg c2V0X2FzbjEiKTsgcmV0dXJuIDA7fQotK3N0YXRpYyBpbnQgYmFkX2dldF9hc24xKEVWUF9DSVBI RVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQotKwl7IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lw aGVyIGdldF9hc24xIik7IHJldHVybiAwO30KLStzdGF0aWMgaW50IGJhZF9jdHJsKEVWUF9DSVBI RVJfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIpCi0rCXsgRklQU19FUlJP Ul9JR05PUkVEKCJDaXBoZXIgY3RybCIpOyByZXR1cm4gMDt9Ci0rCi0rc3RhdGljIGNvbnN0IEVW UF9DSVBIRVIgYmFkX2NpcGhlciA9Ci0rCXsKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwKLSsJMCwK LSsJYmFkX2luaXQsCi0rCWJhZF9kb19jaXBoZXIsCi0rCU5VTEwsCi0rCTAsCi0rCWJhZF9zZXRf YXNuMSwKLSsJYmFkX2dldF9hc24xLAotKwliYWRfY3RybCwKLSsJTlVMTAotKwl9OwotKwotKyNl bmRpZgotKwotIHZvaWQgRVZQX0NJUEhFUl9DVFhfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4KQot IAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2Vu ZGlmCi0gCW1lbXNldChjdHgsMCxzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsKLSAJLyogY3R4LT5j aXBoZXI9TlVMTDsgKi8KLSAJfQotQEAgLTEwMSw2ICsxNDYsMTQgQEAgaW50IEVWUF9DaXBoZXJJ bml0X2V4KEVWUF9DSVBIRVJfQ1RYICpjdAotIAkJCWVuYyA9IDE7Ci0gCQljdHgtPmVuY3J5cHQg PSBlbmM7Ci0gCQl9Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX3NlbGZ0ZXN0X2Zh aWxlZCgpKQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgsRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCWN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0r CQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0g CS8qIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmlu YWwiJ2QgY29udGV4dHMKLSAJICogc28gdGhpcyBjb250ZXh0IG1heSBhbHJlYWR5IGhhdmUgYW4g RU5HSU5FISBUcnkgdG8gYXZvaWQgcmVsZWFzaW5nCi1AQCAtMjE5LDYgKzI3MiwyMiBAQCBza2lw X3RvX2luaXQ6Ci0gCQl9Ci0gCX0KLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCS8qIEFmdGVy ICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFtZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlzc2li bGUuCi0rCSAqIFNvIG9ubHkgY2hlY2sgZm9yIG5vbiBGSVBTIGVuYWJsaW5nIGF0IHRoaXMgcG9p bnQuCi0rCSAqLwotKwlpZiAoa2V5ICYmIEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYgKCEoY3R4 LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19GSVBTKQotKwkJCSYgIShjdHgtPmZsYWdz ICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykpCi0rCQkJewotKwkJCUVWUGVycihFVlBf Rl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotKwkJCWN0eC0+ Y2lwaGVyID0gJmJhZF9jaXBoZXI7Ci0rCQkJcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKyNlbmRp ZgotKwotIAlpZihrZXkgfHwgKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0FMV0FZU19D QUxMX0lOSVQpKSB7Ci0gCQlpZighY3R4LT5jaXBoZXItPmluaXQoY3R4LGtleSxpdixlbmMpKSBy ZXR1cm4gMDsKLSAJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2 cF9lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfZXJyLmMKLS0t LSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwX2Vyci5jLmZpcHMJMjAwOC0xMi0y OSAxNzoxMTo1NC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9ldnAvZXZwX2Vyci5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAt MTU0LDYgKzE1NCw3IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRVZQX3N0cl9yZWFzb25zW10K LSB7RVJSX1JFQVNPTihFVlBfUl9ERUNPREVfRVJST1IpICAgICAgICAgICwiZGVjb2RlIGVycm9y In0sCi0ge0VSUl9SRUFTT04oRVZQX1JfRElGRkVSRU5UX0tFWV9UWVBFUykgICAsImRpZmZlcmVu dCBrZXkgdHlwZXMifSwKLSB7RVJSX1JFQVNPTihFVlBfUl9ESUZGRVJFTlRfUEFSQU1FVEVSUykg ICwiZGlmZmVyZW50IHBhcmFtZXRlcnMifSwKLSt7RVJSX1JFQVNPTihFVlBfUl9ESVNBQkxFRF9G T1JfRklQUykgICAgICwiZGlzYWJsZWQgZm9yIGZpcHMifSwKLSB7RVJSX1JFQVNPTihFVlBfUl9F TkNPREVfRVJST1IpICAgICAgICAgICwiZW5jb2RlIGVycm9yIn0sCi0ge0VSUl9SRUFTT04oRVZQ X1JfRVZQX1BCRV9DSVBIRVJJTklUX0VSUk9SKSwiZXZwIHBiZSBjaXBoZXJpbml0IGVycm9yIn0s Ci0ge0VSUl9SRUFTT04oRVZQX1JfRVhQRUNUSU5HX0FOX1JTQV9LRVkpICAsImV4cGVjdGluZyBh biByc2Ega2V5In0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZw LmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwLmgKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9ldnAvZXZwLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnAuaAky MDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTc1LDYgKzc1LDEwIEBACi0g I2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0gI2VuZGlmCi0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAvKgotICNkZWZpbmUg RVZQX1JDMl9LRVlfU0laRQkJMTYKLSAjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJCTE2Ci1AQCAt MTk3LDYgKzIwMSw4IEBAIHR5cGVkZWYgaW50IGV2cF92ZXJpZnlfbWV0aG9kKGludCB0eXBlLGMK LSAKLSAjZGVmaW5lIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRQkweDAwMDQKLSAK LSsjZGVmaW5lIEVWUF9NRF9GTEFHX0ZJUFMJMHgwNDAwIC8qIE5vdGUgaWYgc3VpdGFibGUgZm9y IHVzZSBpbiBGSVBTIG1vZGUgKi8KLSsKLSAvKiBEaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyIGZs YWdzLi4uICovCi0gCi0gI2RlZmluZSBFVlBfTURfRkxBR19ESUdBTEdJRF9NQVNLCQkweDAwMTgK LUBAIC0yNjksMTAgKzI3NSw2IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0Ci0gCQkJCQkJKiBjbGVh bmVkICovCi0gI2RlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUkVVU0UJCTB4MDAwNCAvKiBEb24ndCBm cmVlIHVwIGN0eC0+bWRfZGF0YQotIAkJCQkJCSogaW4gRVZQX01EX0NUWF9jbGVhbnVwICovCi0t LyogRklQUyBhbmQgcGFkIG9wdGlvbnMgYXJlIGlnbm9yZWQgaW4gMS4wLjAsIGRlZmluaXRpb25z IGFyZSBoZXJlCi0tICogc28gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHJldXNlIHRoZSB2YWx1ZXMg Zm9yIG90aGVyIHB1cnBvc2VzLgotLSAqLwotLQotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05P Tl9GSVBTX0FMTE9XCTB4MDAwOAkvKiBBbGxvdyB1c2Ugb2Ygbm9uIEZJUFMgZGlnZXN0Ci0gCQkJ CQkJICogaW4gRklQUyBtb2RlICovCi0gCi1AQCAtMjg0LDYgKzI4NiwxMCBAQCBzdHJ1Y3QgZW52 X21kX2N0eF9zdAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMQkweDAwCS8qIFBL Q1MjMSB2MS41IG1vZGUgKi8KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMQkweDEw CS8qIFg5LjMxIG1vZGUgKi8KLSAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTCQkweDIw CS8qIFBTUyBtb2RlICovCi0rI2RlZmluZSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgp IFwKLSsJCSgoY3R4LT5mbGFncz4+MTYpICYweEZGRkYpIC8qIHNlZWQgbGVuZ3RoICovCi0rI2Rl ZmluZSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01ETEVOCTB4RkZGRgkvKiBzYWx0IGxlbiBzYW1lIGFz IGRpZ2VzdCAqLwotKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDCTB4RkZGRQkvKiBz YWx0IG1heCBvciBhdXRvIHJlY292ZXJlZCAqLwotIAotICNkZWZpbmUgRVZQX01EX0NUWF9GTEFH X05PX0lOSVQJCTB4MDEwMCAvKiBEb24ndCBpbml0aWFsaXplIG1kX2RhdGEgKi8KLSAKLUBAIC0z MzAsNiArMzM2LDE0IEBAIHN0cnVjdCBldnBfY2lwaGVyX3N0Ci0gI2RlZmluZSAJRVZQX0NJUEhf Tk9fUEFERElORwkJMHgxMDAKLSAvKiBjaXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRp b24gKi8KLSAjZGVmaW5lIAlFVlBfQ0lQSF9SQU5EX0tFWQkJMHgyMDAKLSsvKiBOb3RlIGlmIHN1 aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCi0rI2RlZmluZQkJRVZQX0NJUEhfRkxBR19G SVBTCQkweDQwMAotKy8qIEFsbG93IG5vbiBGSVBTIGNpcGhlciBpbiBGSVBTIG1vZGUgKi8KLSsj ZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwCi0rLyogQWxsb3cgdXNl IGRlZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCi0rI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZB VUxUX0FTTjEJMHgxMDAwCi0rLyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZC MSBtb2RlIG9ubHkgKi8KLSsjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAw MAotIAotIC8qIGN0cmwoKSB2YWx1ZXMgKi8KLSAKLUBAIC01MDcsNiArNTIxLDEwIEBAIGludAlF VlBfQnl0ZXNUb0tleShjb25zdCBFVlBfQ0lQSEVSICp0eXAKLSAJCWNvbnN0IHVuc2lnbmVkIGNo YXIgKnNhbHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCi0gCQlpbnQgZGF0YWwsIGludCBj b3VudCwgdW5zaWduZWQgY2hhciAqa2V5LHVuc2lnbmVkIGNoYXIgKml2KTsKLSAKLSt2b2lkCUVW UF9DSVBIRVJfQ1RYX3NldF9mbGFncyhFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgZmxhZ3MpOwot K3ZvaWQJRVZQX0NJUEhFUl9DVFhfY2xlYXJfZmxhZ3MoRVZQX0NJUEhFUl9DVFggKmN0eCwgaW50 IGZsYWdzKTsKLStpbnQgCUVWUF9DSVBIRVJfQ1RYX3Rlc3RfZmxhZ3MoY29uc3QgRVZQX0NJUEhF Ul9DVFggKmN0eCxpbnQgZmxhZ3MpOwotKwotIGludAlFVlBfRW5jcnlwdEluaXQoRVZQX0NJUEhF Ul9DVFggKmN0eCxjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsCi0gCQljb25zdCB1bnNpZ25lZCBj aGFyICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2KTsKLSBpbnQJRVZQX0VuY3J5cHRJbml0 X2V4KEVWUF9DSVBIRVJfQ1RYICpjdHgsY29uc3QgRVZQX0NJUEhFUiAqY2lwaGVyLCBFTkdJTkUg KmltcGwsCi1AQCAtMTIyNSw2ICsxMjQzLDcgQEAgdm9pZCBFUlJfbG9hZF9FVlBfc3RyaW5ncyh2 b2lkKTsKLSAjZGVmaW5lIEVWUF9SX0RFQ09ERV9FUlJPUgkJCQkgMTE0Ci0gI2RlZmluZSBFVlBf Ul9ESUZGRVJFTlRfS0VZX1RZUEVTCQkJIDEwMQotICNkZWZpbmUgRVZQX1JfRElGRkVSRU5UX1BB UkFNRVRFUlMJCQkgMTUzCi0rI2RlZmluZSBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUwkJCQkgMTYw Ci0gI2RlZmluZSBFVlBfUl9FTkNPREVfRVJST1IJCQkJIDExNQotICNkZWZpbmUgRVZQX1JfRVZQ X1BCRV9DSVBIRVJJTklUX0VSUk9SCQkJIDExOQotICNkZWZpbmUgRVZQX1JfRVhQRUNUSU5HX0FO X1JTQV9LRVkJCQkgMTI3Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAv ZXZwX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9saWIuYwot LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcwkyMDA5LTA0 LTEwIDEyOjMwOjI3LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2V2cC9ldnBfbGliLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBA IC02Nyw2ICs2Nyw4IEBAIGludCBFVlBfQ0lQSEVSX3BhcmFtX3RvX2FzbjEoRVZQX0NJUEhFUl8K LSAKLSAJaWYgKGMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxMKQotIAkJcmV0 PWMtPmNpcGhlci0+c2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNlIGlmIChjLT5j aXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQlyZXQ9RVZQX0NJ UEhFUl9zZXRfYXNuMV9pdihjLCB0eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwotIAlyZXR1cm4o cmV0KTsKLUBAIC03OCw2ICs4MCw4IEBAIGludCBFVlBfQ0lQSEVSX2FzbjFfdG9fcGFyYW0oRVZQ X0NJUEhFUl8KLSAKLSAJaWYgKGMtPmNpcGhlci0+Z2V0X2FzbjFfcGFyYW1ldGVycyAhPSBOVUxM KQotIAkJcmV0PWMtPmNpcGhlci0+Z2V0X2FzbjFfcGFyYW1ldGVycyhjLHR5cGUpOwotKwllbHNl IGlmIChjLT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEpCi0rCQly ZXQ9RVZQX0NJUEhFUl9nZXRfYXNuMV9pdihjLCB0eXBlKTsKLSAJZWxzZQotIAkJcmV0PS0xOwot IAlyZXR1cm4ocmV0KTsKLUBAIC0xODAsNiArMTg0LDkgQEAgaW50IEVWUF9DSVBIRVJfQ1RYX2Js b2NrX3NpemUoY29uc3QgRVZQXwotIAotIGludCBFVlBfQ2lwaGVyKEVWUF9DSVBIRVJfQ1RYICpj dHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVk IGludCBpbmwpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hl Y2soKTsKLSsjZW5kaWYKLSAJcmV0dXJuIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LG91dCxp bixpbmwpOwotIAl9Ci0gCi1AQCAtMjg5LDMgKzI5NiwxOCBAQCBpbnQgRVZQX01EX0NUWF90ZXN0 X2ZsYWdzKGNvbnN0IEVWUF9NRF9DCi0gCXsKLSAJcmV0dXJuIChjdHgtPmZsYWdzICYgZmxhZ3Mp OwotIAl9Ci0rCi0rdm9pZCBFVlBfQ0lQSEVSX0NUWF9zZXRfZmxhZ3MoRVZQX0NJUEhFUl9DVFgg KmN0eCwgaW50IGZsYWdzKQotKwl7Ci0rCWN0eC0+ZmxhZ3MgfD0gZmxhZ3M7Ci0rCX0KLSsKLSt2 b2lkIEVWUF9DSVBIRVJfQ1RYX2NsZWFyX2ZsYWdzKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCBm bGFncykKLSsJewotKwljdHgtPmZsYWdzICY9IH5mbGFnczsKLSsJfQotKwotK2ludCBFVlBfQ0lQ SEVSX0NUWF90ZXN0X2ZsYWdzKGNvbnN0IEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCBmbGFncykK LSsJewotKwlyZXR1cm4gKGN0eC0+ZmxhZ3MgJiBmbGFncyk7Ci0rCX0KLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vZXZwL2V2cF9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9ldnAvZXZwX2xvY2wuaC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL2V2cF9sb2NsLmgJMjAwOS0xMS0x MiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xMTEsMTEgKzExMSwxMSBAQCBzdGF0aWMg aW50IGNuYW1lIyNfY2JjX2NpcGhlcihFVlBfQ0lQSEVSCi0gc3RhdGljIGludCBjbmFtZSMjX2Nm YiMjY2JpdHMjI19jaXBoZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0 LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubCkgXAotIHtcCi0gCXNpemVfdCBj aHVuaz1FVlBfTUFYQ0hVTks7XAotLQlpZiAoY2JpdHM9PTEpICBjaHVuaz4+PTM7XAotKwlpZiAo Y2JpdHM9PTEgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUykpICBj aHVuaz4+PTM7XAotIAlpZiAoaW5sPGNodW5rKSBjaHVuaz1pbmw7XAotIAl3aGlsZShpbmwgJiYg aW5sPj1jaHVuaylcCi0gCSAgICB7XAotLQkgICAgY3ByZWZpeCMjX2NmYiMjY2JpdHMjI19lbmNy eXB0KGluLCBvdXQsIChsb25nKShjYml0cz09MT9jaHVuayo4OmNodW5rKSwgJigoa3N0cnVjdCAq KWN0eC0+Y2lwaGVyX2RhdGEpLT5rc2NoZWQsIGN0eC0+aXYsICZjdHgtPm51bSwgY3R4LT5lbmNy eXB0KTtcCi0rCSAgICBjcHJlZml4IyNfY2ZiIyNjYml0cyMjX2VuY3J5cHQoaW4sIG91dCwgKGxv bmcpKGNiaXRzPT0xICYmICEoY3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMp P2NodW5rKjg6Y2h1bmspLCAmKChrc3RydWN0ICopY3R4LT5jaXBoZXJfZGF0YSktPmtzY2hlZCwg Y3R4LT5pdiwgJmN0eC0+bnVtLCBjdHgtPmVuY3J5cHQpO1wKLSAJICAgIGlubC09Y2h1bms7XAot IAkgICAgaW4gKz1jaHVuaztcCi0gCSAgICBvdXQrPWNodW5rO1wKLUBAIC0yNTQsMTQgKzI1NCwy OSBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfIyNjbmFtZSMjX2VjYih2b2lkCi0gCi0gI2RlZmlu ZSBFVlBfQ19EQVRBKGtzdHJ1Y3QsIGN0eCkJKChrc3RydWN0ICopKGN0eCktPmNpcGhlcl9kYXRh KQotIAotLSNkZWZpbmUgSU1QTEVNRU5UX0NGQlIoY2lwaGVyLGNwcmVmaXgsa3N0cnVjdCxrc2No ZWQsa2V5c2l6ZSxjYml0cyxpdl9sZW4pIFwKLSsjZGVmaW5lIElNUExFTUVOVF9DRkJSKGNpcGhl cixjcHJlZml4LGtzdHJ1Y3Qsa3NjaGVkLGtleXNpemUsY2JpdHMsaXZfbGVuLGZsKSBcCi0gCUJM T0NLX0NJUEhFUl9mdW5jX2NmYihjaXBoZXIjI18jI2tleXNpemUsY3ByZWZpeCxjYml0cyxrc3Ry dWN0LGtzY2hlZCkgXAotIAlCTE9DS19DSVBIRVJfZGVmX2NmYihjaXBoZXIjI18jI2tleXNpemUs a3N0cnVjdCwgXAotIAkJCSAgICAgTklEXyMjY2lwaGVyIyNfIyNrZXlzaXplLCBrZXlzaXplLzgs IGl2X2xlbiwgY2JpdHMsIFwKLS0JCQkgICAgIDAsIGNpcGhlciMjX2luaXRfa2V5LCBOVUxMLCBc Ci0tCQkJICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LCBcCi0tCQkJICAgICBFVlBfQ0lQSEVS X2dldF9hc24xX2l2LCBcCi0tCQkJICAgICBOVUxMKQotKwkJCSAgICAgKGZsKXxFVlBfQ0lQSF9G TEFHX0RFRkFVTFRfQVNOMSwgXAotKwkJCSAgICAgY2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIE5V TEwsIE5VTEwsIE5VTEwpCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNkZWZpbmUgUkMyX3Nl dF9rZXkJcHJpdmF0ZV9SQzJfc2V0X2tleQotKyNkZWZpbmUgUkM0X3NldF9rZXkJcHJpdmF0ZV9S QzRfc2V0X2tleQotKyNkZWZpbmUgQ0FTVF9zZXRfa2V5CXByaXZhdGVfQ0FTVF9zZXRfa2V5Ci0r I2RlZmluZSBSQzVfMzJfc2V0X2tleQlwcml2YXRlX1JDNV8zMl9zZXRfa2V5Ci0rI2RlZmluZSBC Rl9zZXRfa2V5CXByaXZhdGVfQkZfc2V0X2tleQotKyNkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSBw cml2YXRlX0NhbWVsbGlhX3NldF9rZXkKLSsjZGVmaW5lIGlkZWFfc2V0X2VuY3J5cHRfa2V5IHBy aXZhdGVfaWRlYV9zZXRfZW5jcnlwdF9rZXkKLSsKLSsjZGVmaW5lIE1ENV9Jbml0CXByaXZhdGVf TUQ1X0luaXQKLSsjZGVmaW5lIE1ENF9Jbml0CXByaXZhdGVfTUQ0X0luaXQKLSsjZGVmaW5lIE1E Ml9Jbml0CXByaXZhdGVfTUQyX0luaXQKLSsjZGVmaW5lIE1EQzJfSW5pdAlwcml2YXRlX01EQzJf SW5pdAotKyNkZWZpbmUgU0hBX0luaXQJcHJpdmF0ZV9TSEFfSW5pdAotKwotKyNlbmRpZgotIAot IHN0cnVjdCBldnBfcGtleV9jdHhfc3QKLSAJewotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZXZwL21fZHNzLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAv bV9kc3MuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJ MjAwNi0wNC0xOSAxOTowNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9ldnAvbV9kc3MuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEw MAotQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBkc2FfbWQ9Ci0gCU5JRF9k c2FXaXRoU0hBLAotIAlOSURfZHNhV2l0aFNIQSwKLSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVW UF9NRF9GTEFHX1BLRVlfRElHRVNULAotKwlFVlBfTURfRkxBR19QS0VZX0RJR0VTVHxFVlBfTURf RkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZXZwL21fZHNzMS5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZw L21fZHNzMS5jLmZpcHMJMjAwNi0wNC0xOSAxOTowNTo1Ny4wMDAwMDAwMDAgKzAyMDAKLSsrKyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbV9kc3MxLmMJMjAwOS0xMS0xMiAxMjozNjo1 MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQg ZHNzMV9tZD0KLSAJTklEX2RzYSwKLSAJTklEX2RzYVdpdGhTSEExLAotIAlTSEFfRElHRVNUX0xF TkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QsCi0rCUVWUF9NRF9GTEFHX1BLRVlfRElH RVNUfEVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQsCi0gCXVwZGF0ZSwKLSAJZmluYWwsCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbV9zaGExLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcwkyMDA4LTAzLTEyIDIyOjE0OjI0LjAwMDAwMDAwMCAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9tX3NoYTEuYwkyMDA5LTEx LTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTgyLDcgKzgyLDggQEAgc3RhdGljIGNv bnN0IEVWUF9NRCBzaGExX21kPQotIAlOSURfc2hhMSwKLSAJTklEX3NoYTFXaXRoUlNBRW5jcnlw dGlvbiwKLSAJU0hBX0RJR0VTVF9MRU5HVEgsCi0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJ R05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURf RkxBR19GSVBTLAotIAlpbml0LAotIAl1cGRhdGUsCi0gCWZpbmFsLAotQEAgLTExOSw3ICsxMjAs OCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTIyNF9tZD0KLSAJTklEX3NoYTIyNCwKLSAJTklE X3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLAotIAlTSEEyMjRfRElHRVNUX0xFTkdUSCwKLS0JRVZQ X01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VO VCwKLSsJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FM R0lEX0FCU0VOVHwKLSsJCUVWUF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQyMjQsCi0gCXVwZGF0ZTI1 NiwKLSAJZmluYWwyNTYsCi1AQCAtMTM4LDcgKzE0MCw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQg c2hhMjU2X21kPQotIAlOSURfc2hhMjU2LAotIAlOSURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24s Ci0gCVNIQTI1Nl9ESUdFU1RfTEVOR1RILAotLQlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdO QVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAotKwlFVlBfTURfRkxBR19QS0VZX01F VEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UfAotKwkJRVZQX01EX0ZM QUdfRklQUywKLSAJaW5pdDI1NiwKLSAJdXBkYXRlMjU2LAotIAlmaW5hbDI1NiwKLUBAIC0xNjks NyArMTcyLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEzODRfbWQ9Ci0gCU5JRF9zaGEzODQs Ci0gCU5JRF9zaGEzODRXaXRoUlNBRW5jcnlwdGlvbiwKLSAJU0hBMzg0X0RJR0VTVF9MRU5HVEgs Ci0tCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJ RF9BQlNFTlQsCi0rCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxB R19ESUdBTEdJRF9BQlNFTlR8Ci0rCQlFVlBfTURfRkxBR19GSVBTLAotIAlpbml0Mzg0LAotIAl1 cGRhdGU1MTIsCi0gCWZpbmFsNTEyLAotQEAgLTE4OCw3ICsxOTIsOCBAQCBzdGF0aWMgY29uc3Qg RVZQX01EIHNoYTUxMl9tZD0KLSAJTklEX3NoYTUxMiwKLSAJTklEX3NoYTUxMldpdGhSU0FFbmNy eXB0aW9uLAotIAlTSEE1MTJfRElHRVNUX0xFTkdUSCwKLS0JRVZQX01EX0ZMQUdfUEtFWV9NRVRI T0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsJRVZQX01EX0ZMQUdf UEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKLSsJCUVW UF9NRF9GTEFHX0ZJUFMsCi0gCWluaXQ1MTIsCi0gCXVwZGF0ZTUxMiwKLSAJZmluYWw1MTIsCi1k aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9ldnAvbmFtZXMuYy5maXBzIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9uYW1lcy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZXZwL25hbWVzLmMuZmlwcwkyMDA5LTA0LTEwIDEyOjMwOjI3LjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9uYW1lcy5jCTIwMDktMTEt MTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtNjYsNiArNjYsMTAgQEAgaW50IEVWUF9h ZGRfY2lwaGVyKGNvbnN0IEVWUF9DSVBIRVIgKmMpCi0gCXsKLSAJaW50IHI7Ci0gCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKyNlbmRpZgotKwotIAly PU9CSl9OQU1FX2FkZChPQkpfbmlkMnNuKGMtPm5pZCksT0JKX05BTUVfVFlQRV9DSVBIRVJfTUVU SCwoY29uc3QgY2hhciAqKWMpOwotIAlpZiAociA9PSAwKSByZXR1cm4oMCk7Ci0gCWNoZWNrX2Rl ZmVyKGMtPm5pZCk7Ci1AQCAtNzksNiArODMsMTAgQEAgaW50IEVWUF9hZGRfZGlnZXN0KGNvbnN0 IEVWUF9NRCAqbWQpCi0gCWludCByOwotIAljb25zdCBjaGFyICpuYW1lOwotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsJT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKLSsjZW5kaWYKLSsKLSAJbmFt ZT1PQkpfbmlkMnNuKG1kLT50eXBlKTsKLSAJcj1PQkpfTkFNRV9hZGQobmFtZSxPQkpfTkFNRV9U WVBFX01EX01FVEgsKGNvbnN0IGNoYXIgKiltZCk7Ci0gCWlmIChyID09IDApIHJldHVybigwKTsK LWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzIG9w ZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9wX3NpZ24uYwotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzCTIwMDYtMDUtMjQgMTU6Mjk6MzAuMDAwMDAw MDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZXZwL3Bfc2lnbi5jCTIw MDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtNjEsNiArNjEsNyBAQAotICNp bmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSAj aW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gCi0g I2lmZGVmIHVuZGVmCi0gdm9pZCBFVlBfU2lnbkluaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfTUQg KnR5cGUpCi1AQCAtMTAxLDYgKzEwMiwyMiBAQCBpbnQgRVZQX1NpZ25GaW5hbChFVlBfTURfQ1RY ICpjdHgsIHVuc2lnCi0gCQkJZ290byBlcnI7Ci0gCQlpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWdu YXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQotIAkJCWdvdG8gZXJyOwotKwkJaWYg KGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCi0rCQkJaWYgKEVWUF9QS0VZ X0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCi0rCQkJ CWdvdG8gZXJyOwotKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykK LSsJCQl7Ci0rCQkJaW50IHNhbHRsZW47Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bh ZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0gMCkKLSsJCQkJZ290byBlcnI7 Ci0rCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19TQUxUKGN0eCk7Ci0rCQkJaWYg KHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikKLSsJCQkJc2FsdGxlbiA9IC0x OwotKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NUkVDKQotKwkJ CQlzYWx0bGVuID0gLTI7Ci0rCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3Bzc19zYWx0bGVu KHBrY3R4LCBzYWx0bGVuKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCQl9Ci0gCQlpZiAoRVZQ X1BLRVlfc2lnbihwa2N0eCwgc2lncmV0LCAmc2x0bXAsIG0sIG1fbGVuKSA8PSAwKQotIAkJCWdv dG8gZXJyOwotIAkJKnNpZ2xlbiA9IHNsdG1wOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9l dnAvcF92ZXJpZnkuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2V2cC9wX3Zlcmlm eS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1ODowMS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9ldnAvcF92ZXJpZnkuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAw MDAwMDAwMCArMDEwMAotQEAgLTYxLDYgKzYxLDcgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9ldnAu aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wveDUw OS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotIAotIGludCBFVlBfVmVyaWZ5RmluYWwo RVZQX01EX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYsCi0gCSAgICAgdW5z aWduZWQgaW50IHNpZ2xlbiwgRVZQX1BLRVkgKnBrZXkpCi1AQCAtODYsNiArODcsMjIgQEAgaW50 IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbgotIAkJCWdvdG8gZXJyOwotIAkJ aWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0g MCkKLSAJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BB RF9YOTMxKQotKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0Ff WDkzMV9QQURESU5HKSA8PSAwKQotKwkJCQlnb3RvIGVycjsKLSsJCWlmIChjdHgtPmZsYWdzICYg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpCi0rCQkJewotKwkJCWludCBzYWx0bGVuOwotKwkJCWlm IChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJ TkcpIDw9IDApCi0rCQkJCWdvdG8gZXJyOwotKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxB R19QU1NfU0FMVChjdHgpOwotKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1Nf TURMRU4pCi0rCQkJCXNhbHRsZW4gPSAtMTsKLSsJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9N RF9DVFhfRkxBR19QU1NfTVJFQykKLSsJCQkJc2FsdGxlbiA9IC0yOwotKwkJCWlmIChFVlBfUEtF WV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKLSsJCQkJZ290 byBlcnI7Ci0rCQkJfQotIAkJaSA9IEVWUF9QS0VZX3ZlcmlmeShwa2N0eCwgc2lnYnVmLCBzaWds ZW4sIG0sIG1fbGVuKTsKLSAJCWVycjoKLSAJCUVWUF9QS0VZX0NUWF9mcmVlKHBrY3R4KTsKLWRp ZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlw c19hZXNhdnMuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2 cy5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDkzOSBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA0IFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0r ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK LSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rICBOSVNUIEFFUyBBbGdvcml0aG0gVmFsaWRhdGlvbiBT dWl0ZQotKyAgVGVzdCBQcm9ncmFtCi0rCi0rICBEb25hdGVkIHRvIE9wZW5TU0wgYnk6Ci0rICBW LU9ORSBDb3Jwb3JhdGlvbgotKyAgMjAyNTAgQ2VudHVyeSBCbHZkLCBTdWl0ZSAzMDAKLSsgIEdl cm1hbnRvd24sIE1EIDIwODc0Ci0rICBVLlMuQS4KLSsgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNs dWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGVycm5vLmg+ Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Flcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+Ci0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgImVfb3Mu aCIKLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgQUVTIHN1cHBvcnRcbiIpOwotKyAg ICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYK LSsKLSsjZGVmaW5lIFZFUkJPU0UgMAotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotK2ludCBBRVNUZXN0KEVWUF9DSVBIRVJfQ1RYICpj dHgsCi0rCSAgICBjaGFyICphbW9kZSwgaW50IGFrZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSwg Ci0rCSAgICB1bnNpZ25lZCBjaGFyICppVmVjLCAKLSsJICAgIGludCBkaXIsICAvKiAwID0gZGVj cnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJICAgIHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwgdW5z aWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxlbikKLSsgICAgewotKyAgICBjb25zdCBFVlBf Q0lQSEVSICpjaXBoZXIgPSBOVUxMOwotKwotKyAgICBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkNC QyIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJ CWNpcGhlciA9IEVWUF9hZXNfMTI4X2NiYygpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoK LSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NiYygpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1 NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NiYygpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0r CX0KLSsgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCXsKLSsJ c3dpdGNoIChha2V5c3opCi0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNf MTI4X2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9h ZXNfMTkyX2VjYigpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVW UF9hZXNfMjU2X2VjYigpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZSBpZiAoc3Ry Y2FzZWNtcChhbW9kZSwgIkNGQjEyOCIpID09IDApCi0rCXsKLSsJc3dpdGNoIChha2V5c3opCi0r CQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjEyOCgpOwotKwkJ YnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2NmYjEyOCgp OwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDI1NjoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2Nm YjEyOCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCi0rCX0KLSsgICAgZWxzZSBpZiAoc3RybmNhc2Vj bXAoYW1vZGUsICJPRkIiLCAzKSA9PSAwKQotKwl7Ci0rCXN3aXRjaCAoYWtleXN6KQotKwkJewot KwkJY2FzZSAxMjg6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzEyOF9vZmIoKTsKLSsJCWJyZWFrOwot KwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9vZmIoKTsKLSsJCWJyZWFr OwotKwotKwkJY2FzZSAyNTY6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzI1Nl9vZmIoKTsKLSsJCWJy ZWFrOwotKwkJfQotKwl9Ci0rICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjEiKSkK LSsJewotKwlzd2l0Y2ggKGFrZXlzeikKLSsJCXsKLSsJCWNhc2UgMTI4OgotKwkJY2lwaGVyID0g RVZQX2Flc18xMjhfY2ZiMSgpOwotKwkJYnJlYWs7Ci0rCi0rCQljYXNlIDE5MjoKLSsJCWNpcGhl ciA9IEVWUF9hZXNfMTkyX2NmYjEoKTsKLSsJCWJyZWFrOwotKwotKwkJY2FzZSAyNTY6Ci0rCQlj aXBoZXIgPSBFVlBfYWVzXzI1Nl9jZmIxKCk7Ci0rCQlicmVhazsKLSsJCX0KLSsJfQotKyAgICBl bHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkI4IikpCi0rCXsKLSsJc3dpdGNoIChha2V5c3op Ci0rCQl7Ci0rCQljYXNlIDEyODoKLSsJCWNpcGhlciA9IEVWUF9hZXNfMTI4X2NmYjgoKTsKLSsJ CWJyZWFrOwotKwotKwkJY2FzZSAxOTI6Ci0rCQljaXBoZXIgPSBFVlBfYWVzXzE5Ml9jZmI4KCk7 Ci0rCQlicmVhazsKLSsKLSsJCWNhc2UgMjU2OgotKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2Zi OCgpOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCX0KLSsgICAgZWxzZQotKwl7Ci0rCXByaW50ZigiVW5r bm93biBtb2RlOiAlc1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gMDsKLSsJfQotKyAgICBpZiAoIWNp cGhlcikKLSsJewotKwlwcmludGYoIkludmFsaWQga2V5IHNpemU6ICVkXG4iLCBha2V5c3opOwot KwlyZXR1cm4gMDsgCi0rCX0KLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVy LCBOVUxMLCBhS2V5LCBpVmVjLCBkaXIpIDw9IDApCi0rCXJldHVybiAwOwotKyAgICBpZighc3Ry Y2FzZWNtcChhbW9kZSwiQ0ZCMSIpKQotKwlNX0VWUF9DSVBIRVJfQ1RYX3NldF9mbGFncyhjdHgs IEVWUF9DSVBIX0ZMQUdfTEVOR1RIX0JJVFMpOwotKyAgICBpZiAoZGlyKQotKwkJRVZQX0NpcGhl cihjdHgsIGNpcGhlcnRleHQsIHBsYWludGV4dCwgbGVuKTsKLSsJZWxzZQotKwkJRVZQX0NpcGhl cihjdHgsIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsgICAgcmV0dXJuIDE7Ci0rICAg IH0KLSsKLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KLStjaGFyICp0X3RhZ1syXSA9IHsiUExBSU5URVhUIiwgIkNJUEhFUlRFWFQifTsKLStjaGFy ICp0X21vZGVbNl0gPSB7IkNCQyIsIkVDQiIsIk9GQiIsIkNGQjEiLCJDRkI4IiwiQ0ZCMTI4In07 Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBDRkIxMjh9OwotK2VudW0g WENyeXB0IHtYREVDUllQVCwgWEVOQ1JZUFR9OwotKwotKy8qPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0qLwotKy8qICBNb250ZSBDYXJsbyBUZXN0cyAgICAgICAgICAqLwotKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotKwotKy8qI2RlZmluZSBnYihhLGIpICgoKGEpWyhi KS84XSA+PiAoKGIpJTgpKSYxKSovCi0rLyojZGVmaW5lIHNiKGEsYix2KSAoKGEpWyhiKS84XT0o KGEpWyhiKS84XSZ+KDEgPDwgKChiKSU4KSkpfCghISh2KSA8PCAoKGIpJTgpKSkqLwotKwotKyNk ZWZpbmUgZ2IoYSxiKSAoKChhKVsoYikvOF0gPj4gKDctKGIpJTgpKSYxKQotKyNkZWZpbmUgc2Io YSxiLHYpICgoYSlbKGIpLzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoNy0oYiklOCkpKXwoISEodikg PDwgKDctKGIpJTgpKSkKLSsKLStpbnQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKLSsJICAgaW50IGFr ZXlzeiwgdW5zaWduZWQgY2hhciAqYUtleSx1bnNpZ25lZCBjaGFyICppVmVjLAotKwkgICBpbnQg ZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAotKwkgICBGSUxFICpyZnApCi0rICAg IHsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5WzEwMV1bMzJdOwot KyAgICB1bnNpZ25lZCBjaGFyIGl2WzEwMV1bQUVTX0JMT0NLX1NJWkVdOwotKyAgICB1bnNpZ25l ZCBjaGFyIHB0ZXh0WzEwMDFdWzMyXTsKLSsgICAgdW5zaWduZWQgY2hhciBjdGV4dFsxMDAxXVsz Ml07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs2NCs0XTsKLSsgICAgaW50IGksIGos IG4sIG4xLCBuMjsKLSsgICAgaW50IGltb2RlID0gMCwgbmtleXN6ID0gYWtleXN6Lzg7Ci0rICAg IEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsK LSsgICAgaWYgKGxlbiA+IDMyKQotKwl7Ci0rCXByaW50ZigiXG4+Pj4+IExlbmd0aCBleGNlZWRz IDMyIGZvciAlcyAlZCA8PDw8XG5cbiIsIAotKwkgICAgICAgYW1vZGUsIGFrZXlzeik7Ci0rCXJl dHVybiAtMTsKLSsJfQotKyAgICBmb3IgKGltb2RlID0gMDsgaW1vZGUgPCA2OyArK2ltb2RlKQot KwlpZiAoc3RyY21wKGFtb2RlLCB0X21vZGVbaW1vZGVdKSA9PSAwKQotKwkgICAgYnJlYWs7Ci0r ICAgIGlmIChpbW9kZSA9PSA2KQotKwl7IAotKwlwcmludGYoIlVucmVjb2duaXplZCBtb2RlOiAl c1xuIiwgYW1vZGUpOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsKLSsgICAgbWVtY3B5KGtleVswXSwg YUtleSwgbmtleXN6KTsKLSsgICAgaWYgKGlWZWMpCi0rCW1lbWNweShpdlswXSwgaVZlYywgQUVT X0JMT0NLX1NJWkUpOwotKyAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwltZW1jcHkocHRleHRb MF0sIHRleHQsIGxlbik7Ci0rICAgIGVsc2UKLSsJbWVtY3B5KGN0ZXh0WzBdLCB0ZXh0LCBsZW4p OwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpCi0rCXsKLSsJLyogcHJpbnRmKCJJdGVy YXRpb24gJWRcbiIsIGkpOyAqLwotKwlpZiAoaSA+IDApCi0rCSAgICB7Ci0rCSAgICBmcHJpbnRm KHJmcCwiQ09VTlQgPSAlZFxuIixpKTsKLSsJICAgIE91dHB1dFZhbHVlKCJLRVkiLGtleVtpXSxu a2V5c3oscmZwLDApOwotKwkgICAgaWYgKGltb2RlICE9IEVDQikgIC8qIEVDQiAqLwotKwkJT3V0 cHV0VmFsdWUoIklWIixpdltpXSxBRVNfQkxPQ0tfU0laRSxyZnAsMCk7Ci0rCSAgICAvKiBPdXRw dXQgQ2lwaGVydGV4dCB8IFBsYWludGV4dCAqLwotKwkgICAgT3V0cHV0VmFsdWUodF90YWdbZGly XjFdLGRpciA/IHB0ZXh0WzBdIDogY3RleHRbMF0sbGVuLHJmcCwKLSsJCQlpbW9kZSA9PSBDRkIx KTsKLSsJICAgIH0KLSsJZm9yIChqID0gMDsgaiA8IDEwMDA7ICsraikKLSsJICAgIHsKLSsJICAg IHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBjYXNlIEVDQjoKLSsJCWlmIChqID09IDApCi0r CQkgICAgeyAvKiBzZXQgdXAgZW5jcnlwdGlvbiAqLwotKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0 eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBOVUxMLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVj cnlwdCwgMSA9IGVuY3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0r CQkgICAgaWYgKGRpciA9PSBYRU5DUllQVCkKLSsJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRb al0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwg bGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAgewotKwkJICAgIGlmIChkaXIgPT0gWEVO Q1JZUFQpCi0rCQkJewotKwkJCUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBs ZW4pOwotKwkJCW1lbWNweShwdGV4dFtqKzFdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCQl9Ci0rCQkg ICAgZWxzZQotKwkJCXsKLSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwg bGVuKTsKLSsJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbal0sIGxlbik7Ci0rCQkJfQotKwkJ ICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjogIAot KwkgICAgY2FzZSBDRkIxMjg6Ci0rCQlpZiAoaiA9PSAwKQotKwkJICAgIHsKLSsJCSAgICByZXQg PSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAotKwkJCQkgIGRp ciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHB0ZXh0W2pdLCBjdGV4 dFtqXSwgbGVuKTsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCW1lbWNweShwdGV4 dFtqKzFdLCBpdltpXSwgbGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0s IGl2W2ldLCBsZW4pOwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgaWYgKGRp ciA9PSBYRU5DUllQVCkKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRl eHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMV0sIGxlbik7Ci0r CQkJfQotKwkJICAgIGVsc2UKLSsJCQl7Ci0rCQkJRVZQX0NpcGhlcigmY3R4LCBwdGV4dFtqXSwg Y3RleHRbal0sIGxlbik7Ci0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMV0sIGxlbik7 Ci0rCQkJfQotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDRkI4OgotKwkJaWYg KGogPT0gMCkKLSsJCSAgICB7Ci0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LCBhbW9kZSwgYWtl eXN6LCBrZXlbaV0sIGl2W2ldLCAKLSsJCQkJICBkaXIsICAvKiAwID0gZGVjcnlwdCwgMSA9IGVu Y3J5cHQgKi8KLSsJCQkJICBwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkgICAgfQotKwkJ ZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJCUVWUF9DaXBo ZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UKLSsJCQlFVlBf Q2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsJCSAgICB9Ci0rCQlpZiAo ZGlyID09IFhFTkNSWVBUKQotKwkJICAgIHsKLSsJCSAgICBpZiAoaiA8IDE2KQotKwkJCW1lbWNw eShwdGV4dFtqKzFdLCAmaXZbaV1bal0sIGxlbik7Ci0rCQkgICAgZWxzZQotKwkJCW1lbWNweShw dGV4dFtqKzFdLCBjdGV4dFtqLTE2XSwgbGVuKTsKLSsJCSAgICB9Ci0rCQllbHNlCi0rCQkgICAg ewotKwkJICAgIGlmIChqIDwgMTYpCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sICZpdltpXVtqXSwg bGVuKTsKLSsJCSAgICBlbHNlCi0rCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0W2otMTZdLCBs ZW4pOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwotKwkgICAgY2FzZSBDRkIxOgotKwkJaWYoaiA9 PSAwKQotKwkJICAgIHsKLSsjaWYgMAotKwkJICAgIC8qIGNvbXBlbnNhdGUgZm9yIHdyb25nIGVu ZGlhbm5lc3Mgb2YgaW5wdXQgZmlsZSAqLwotKwkJICAgIGlmKGkgPT0gMCkKLSsJCQlwdGV4dFsw XVswXTw8PTc7Ci0rI2VuZGlmCi0rCQkgICAgcmV0ID0gQUVTVGVzdCgmY3R4LGFtb2RlLGFrZXlz eixrZXlbaV0saXZbaV0sZGlyLAotKwkJCQlwdGV4dFtqXSwgY3RleHRbal0sIGxlbik7Ci0rCQkg ICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQotKwkJ CUVWUF9DaXBoZXIoJmN0eCwgY3RleHRbal0sIHB0ZXh0W2pdLCBsZW4pOwotKwkJICAgIGVsc2UK LSsJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKLSsKLSsJCSAg ICB9Ci0rCQlpZihkaXIgPT0gWEVOQ1JZUFQpCi0rCQkgICAgewotKwkJICAgIGlmKGogPCAxMjgp Ci0rCQkJc2IocHRleHRbaisxXSwwLGdiKGl2W2ldLGopKTsKLSsJCSAgICBlbHNlCi0rCQkJc2Io cHRleHRbaisxXSwwLGdiKGN0ZXh0W2otMTI4XSwwKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJ ICAgIHsKLSsJCSAgICBpZihqIDwgMTI4KQotKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihpdltpXSxq KSk7Ci0rCQkgICAgZWxzZQotKwkJCXNiKGN0ZXh0W2orMV0sMCxnYihwdGV4dFtqLTEyOF0sMCkp OwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAgfQotKwktLWo7IC8qIHJlc2V0IHRv IGxhc3Qgb2YgcmFuZ2UgKi8KLSsJLyogT3V0cHV0IENpcGhlcnRleHQgfCBQbGFpbnRleHQgKi8K LSsJT3V0cHV0VmFsdWUodF90YWdbZGlyXSxkaXIgPyBjdGV4dFtqXSA6IHB0ZXh0W2pdLGxlbixy ZnAsCi0rCQkgICAgaW1vZGUgPT0gQ0ZCMSk7Ci0rCWZwcmludGYocmZwLCAiXG4iKTsgIC8qIGFk ZCBzZXBhcmF0b3IgKi8KLSsKLSsJLyogQ29tcHV0ZSBuZXh0IEtFWSAqLwotKwlpZiAoZGlyID09 IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgaWYgKGltb2RlID09IENGQjgpCi0rCQl7IC8qIGN0 ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8IENUW2pdICovCi0rCQlmb3IgKG4xID0g MCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsrbjEsIC0tbjIpCi0rCQkgICAgY2lwaGVy dGV4dFtuMV0gPSBjdGV4dFtqLW4yXVswXTsKLSsJCX0KLSsJICAgIGVsc2UgaWYoaW1vZGUgPT0g Q0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlzei0xIDsgbjEgPCBha2V5c3ogOyArK24x LC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxnYihjdGV4dFtqLW4yXSwwKSk7Ci0rCQl9 Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikKLSsJCSAgICB7Ci0rCQljYXNlIDEyODoK LSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbal0sIDE2KTsKLSsJCSAgICBicmVhazsK LSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqLTFdKzgsIDgp OwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIGN0ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJl YWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgY3RleHRbai0xXSwg MTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2LCBjdGV4dFtqXSwgMTYpOwotKwkJICAg IGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJZWxzZQotKwkgICAgewotKwkgICAgaWYgKGlt b2RlID09IENGQjgpCi0rCQl7IC8qIGN0ID0gQ1Rbai0xNV0gfHwgQ1Rbai0xNF0gfHwgLi4uIHx8 IENUW2pdICovCi0rCQlmb3IgKG4xID0gMCwgbjIgPSBua2V5c3otMTsgbjEgPCBua2V5c3o7ICsr bjEsIC0tbjIpCi0rCQkgICAgY2lwaGVydGV4dFtuMV0gPSBwdGV4dFtqLW4yXVswXTsKLSsJCX0K LSsJICAgIGVsc2UgaWYoaW1vZGUgPT0gQ0ZCMSkKLSsJCXsKLSsJCWZvcihuMT0wLG4yPWFrZXlz ei0xIDsgbjEgPCBha2V5c3ogOyArK24xLC0tbjIpCi0rCQkgICAgc2IoY2lwaGVydGV4dCxuMSxn YihwdGV4dFtqLW4yXSwwKSk7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQlzd2l0Y2ggKGFrZXlzeikK LSsJCSAgICB7Ci0rCQljYXNlIDEyODoKLSsJCSAgICBtZW1jcHkoY2lwaGVydGV4dCwgcHRleHRb al0sIDE2KTsKLSsJCSAgICBicmVhazsKLSsJCWNhc2UgMTkyOgotKwkJICAgIG1lbWNweShjaXBo ZXJ0ZXh0LCBwdGV4dFtqLTFdKzgsIDgpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzgsIHB0 ZXh0W2pdLCAxNik7Ci0rCQkgICAgYnJlYWs7Ci0rCQljYXNlIDI1NjoKLSsJCSAgICBtZW1jcHko Y2lwaGVydGV4dCwgcHRleHRbai0xXSwgMTYpOwotKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0KzE2 LCBwdGV4dFtqXSwgMTYpOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJICAgIH0KLSsJLyog Q29tcHV0ZSBuZXh0IGtleTogS2V5W2krMV0gPSBLZXlbaV0geG9yIGN0ICovCi0rCWZvciAobiA9 IDA7IG4gPCBua2V5c3o7ICsrbikKLSsJICAgIGtleVtpKzFdW25dID0ga2V5W2ldW25dIF4gY2lw aGVydGV4dFtuXTsKLSsJCi0rCS8qIENvbXB1dGUgbmV4dCBJViBhbmQgdGV4dCAqLwotKwlpZiAo ZGlyID09IFhFTkNSWVBUKQotKwkgICAgewotKwkgICAgc3dpdGNoIChpbW9kZSkKLSsJCXsKLSsJ ICAgIGNhc2UgRUNCOgotKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqXSwgQUVTX0JMT0NLX1NJ WkUpOwotKwkJYnJlYWs7Ci0rCSAgICBjYXNlIENCQzoKLSsJICAgIGNhc2UgT0ZCOgotKwkgICAg Y2FzZSBDRkIxMjg6Ci0rCQltZW1jcHkoaXZbaSsxXSwgY3RleHRbal0sIEFFU19CTE9DS19TSVpF KTsKLSsJCW1lbWNweShwdGV4dFswXSwgY3RleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOwotKwkJ YnJlYWs7Ci0rCSAgICBjYXNlIENGQjg6Ci0rCQkvKiBJVltpKzFdID0gY3QgKi8KLSsJCWZvciAo bjEgPSAwLCBuMiA9IDE1OyBuMSA8IDE2OyArK24xLCAtLW4yKQotKwkJICAgIGl2W2krMV1bbjFd ID0gY3RleHRbai1uMl1bMF07Ci0rCQlwdGV4dFswXVswXSA9IGN0ZXh0W2otMTZdWzBdOwotKwkJ YnJlYWs7Ci0rCSAgICBjYXNlIENGQjE6Ci0rCQlmb3IobjE9MCxuMj0xMjcgOyBuMSA8IDEyOCA7 ICsrbjEsLS1uMikKLSsJCSAgICBzYihpdltpKzFdLG4xLGdiKGN0ZXh0W2otbjJdLDApKTsKLSsJ CXB0ZXh0WzBdWzBdPWN0ZXh0W2otMTI4XVswXSYweDgwOwotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAg ICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN3aXRjaCAoaW1vZGUpCi0rCQl7Ci0rCSAgICBj YXNlIEVDQjoKLSsJCW1lbWNweShjdGV4dFswXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpFKTsK LSsJCWJyZWFrOwotKwkgICAgY2FzZSBDQkM6Ci0rCSAgICBjYXNlIE9GQjoKLSsJICAgIGNhc2Ug Q0ZCMTI4OgotKwkJbWVtY3B5KGl2W2krMV0sIHB0ZXh0W2pdLCBBRVNfQkxPQ0tfU0laRSk7Ci0r CQltZW1jcHkoY3RleHRbMF0sIHB0ZXh0W2otMV0sIEFFU19CTE9DS19TSVpFKTsKLSsJCWJyZWFr OwotKwkgICAgY2FzZSBDRkI4OgotKwkJZm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsr bjEsIC0tbjIpCi0rCQkgICAgaXZbaSsxXVtuMV0gPSBwdGV4dFtqLW4yXVswXTsKLSsJCWN0ZXh0 WzBdWzBdID0gcHRleHRbai0xNl1bMF07Ci0rCQlicmVhazsKLSsJICAgIGNhc2UgQ0ZCMToKLSsJ CWZvcihuMT0wLG4yPTEyNyA7IG4xIDwgMTI4IDsgKytuMSwtLW4yKQotKwkJICAgIHNiKGl2W2kr MV0sbjEsZ2IocHRleHRbai1uMl0sMCkpOwotKwkJY3RleHRbMF1bMF09cHRleHRbai0xMjhdWzBd JjB4ODA7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIH0KLSsJfQotKyAgICAKLSsgICAgcmV0dXJu IHJldDsKLSsgICAgfQotKwotKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ki8KLSsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgICMgQ29u ZmlnIGluZm8gZm9yIHYtb25lCi0rICAjIEFFU1ZTIE1NVCB0ZXN0IGRhdGEgZm9yIEVDQgotKyAg IyBTdGF0ZSA6IEVuY3J5cHQgYW5kIERlY3J5cHQKLSsgICMgS2V5IExlbmd0aCA6IDI1NgotKyAg IyBGcmkgQXVnIDMwIDA0OjA3OjIyIFBNCi0rICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KLSsKLStpbnQgcHJvY19maWxlKGNoYXIgKnJxZmlsZSwgY2hhciAqcnNwZmlsZSkKLSsgICAg ewotKyAgICBjaGFyIGFmblsyNTZdLCByZm5bMjU2XTsKLSsgICAgRklMRSAqYWZwID0gTlVMTCwg KnJmcCA9IE5VTEw7Ci0rICAgIGNoYXIgaWJ1ZlsyMDQ4XTsKLSsgICAgY2hhciB0YnVmWzIwNDhd OwotKyAgICBpbnQgaWxlbiwgbGVuLCByZXQgPSAwOwotKyAgICBjaGFyIGFsZ29bOF0gPSAiIjsK LSsgICAgY2hhciBhbW9kZVs4XSA9ICIiOwotKyAgICBjaGFyIGF0ZXN0WzhdID0gIiI7Ci0rICAg IGludCBha2V5c3ogPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIGlWZWNbMjBdLCBhS2V5WzQwXTsK LSsgICAgaW50IGRpciA9IC0xLCBlcnIgPSAwLCBzdGVwID0gMDsKLSsgICAgdW5zaWduZWQgY2hh ciBwbGFpbnRleHRbMjA0OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsyMDQ4XTsK LSsgICAgY2hhciAqcnA7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQX0NJUEhF Ul9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKCFycWZpbGUgfHwgISgqcnFmaWxlKSkKLSsJ ewotKwlwcmludGYoIk5vIHJlcSBmaWxlXG4iKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIHN0 cmNweShhZm4sIHJxZmlsZSk7Ci0rCi0rICAgIGlmICgoYWZwID0gZm9wZW4oYWZuLCAiciIpKSA9 PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMsICVzXG4iLCAKLSsJ ICAgICAgIGFmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJcmV0dXJuIC0xOwotKwl9Ci0rICAgIGlm ICghcnNwZmlsZSkKLSsJewotKwlzdHJjcHkocmZuLGFmbik7Ci0rCXJwPXN0cnN0cihyZm4sInJl cS8iKTsKLSsjaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsJaWYgKCFycCkKLSsJICAgIHJwPXN0 cnN0cihyZm4sInJlcVxcIik7Ci0rI2VuZGlmCi0rCWFzc2VydChycCk7Ci0rCW1lbWNweShycCwi cnNwIiwzKTsKLSsJcnAgPSBzdHJzdHIocmZuLCAiLnJlcSIpOwotKwltZW1jcHkocnAsICIucnNw IiwgNCk7Ci0rCXJzcGZpbGUgPSByZm47Ci0rCX0KLSsgICAgaWYgKChyZnAgPSBmb3Blbihyc3Bm aWxlLCAidyIpKSA9PSBOVUxMKQotKwl7Ci0rCXByaW50ZigiQ2Fubm90IG9wZW4gZmlsZTogJXMs ICVzXG4iLCAKLSsJICAgICAgIHJmbiwgc3RyZXJyb3IoZXJybm8pKTsKLSsJZmNsb3NlKGFmcCk7 Ci0rCWFmcCA9IE5VTEw7Ci0rCXJldHVybiAtMTsKLSsJfQotKyAgICB3aGlsZSAoIWVyciAmJiAo ZmdldHMoaWJ1Ziwgc2l6ZW9mKGlidWYpLCBhZnApKSAhPSBOVUxMKQotKwl7Ci0rCXRpZHlfbGlu ZSh0YnVmLCBpYnVmKTsKLSsJaWxlbiA9IHN0cmxlbihpYnVmKTsKLSsJLyogICAgICBwcmludGYo InN0ZXA9JWQgaWJ1Zj0lcyIsc3RlcCxpYnVmKTsgKi8KLSsJc3dpdGNoIChzdGVwKQotKwkgICAg ewotKwljYXNlIDA6ICAvKiByZWFkIHByZWFtYmxlICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAn XG4nKQotKwkJeyAvKiBlbmQgb2YgcHJlYW1ibGUgKi8KLSsJCWlmICgoKmFsZ28gPT0gJ1wwJykg fHwKLSsJCSAgICAoKmFtb2RlID09ICdcMCcpIHx8Ci0rCQkgICAgKGFrZXlzeiA9PSAwKSkKLSsJ CSAgICB7Ci0rCQkgICAgcHJpbnRmKCJNaXNzaW5nIEFsZ29yaXRobSwgTW9kZSBvciBLZXlTaXpl ICglcy8lcy8lZClcbiIsCi0rCQkJICAgYWxnbyxhbW9kZSxha2V5c3opOwotKwkJICAgIGVyciA9 IDE7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnAp OwotKwkJICAgICsrIHN0ZXA7Ci0rCQkgICAgfQotKwkJfQotKwkgICAgZWxzZSBpZiAoaWJ1Zlsw XSAhPSAnIycpCi0rCQl7Ci0rCQlwcmludGYoIkludmFsaWQgcHJlYW1ibGUgaXRlbTogJXNcbiIs IGlidWYpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsgLyogcHJvY2VzcyBw cmVhbWJsZSAqLwotKwkJY2hhciAqeHAsICpwcCA9IGlidWYrMjsKLSsJCWludCBuOwotKwkJaWYg KGFrZXlzeikKLSsJCSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCi0rCQkg ICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOwotKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0 aW1lKCZydGltKSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhp YnVmLCByZnApOwotKwkJICAgIGlmIChzdHJuY21wKHBwLCAiQUVTVlMgIiwgNikgPT0gMCkKLSsJ CQl7Ci0rCQkJc3RyY3B5KGFsZ28sICJBRVMiKTsKLSsJCQkvKiBnZXQgdGVzdCB0eXBlICovCi0r CQkJcHAgKz0gNjsKLSsJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKLSsJCQluID0geHAtcHA7Ci0r CQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJCWF0ZXN0W25dID0gJ1wwJzsKLSsJCQkvKiBn ZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCi0r CQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEsIG4pOwotKwkJ CWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCi0rCQkJaWYgKFZF UkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdCA9ICVzLCBNb2RlID0gJXNcbiIsIGF0ZXN0LCBhbW9k ZSk7Ci0rCQkJfQotKwkJICAgIGVsc2UgaWYgKHN0cm5jYXNlY21wKHBwLCAiS2V5IExlbmd0aCA6 ICIsIDEzKSA9PSAwKQotKwkJCXsKLSsJCQlha2V5c3ogPSBhdG9pKHBwKzEzKTsKLSsJCQlpZiAo VkVSQk9TRSkKLSsJCQkJcHJpbnRmKCJLZXkgc2l6ZSA9ICVkXG4iLCBha2V5c3opOwotKwkJCX0K LSsJCSAgICB9Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAxOiAgLyogW0VOQ1JZUFRd IHwgW0RFQ1JZUFRdICovCi0rCSAgICBpZiAoaWJ1ZlswXSA9PSAnWycpCi0rCQl7Ci0rCQlmcHV0 cyhpYnVmLCByZnApOwotKwkJKytzdGVwOwotKwkJaWYgKHN0cm5jYXNlY21wKGlidWYsICJbRU5D UllQVF0iLCA5KSA9PSAwKQotKwkJICAgIGRpciA9IDE7Ci0rCQllbHNlIGlmIChzdHJuY2FzZWNt cChpYnVmLCAiW0RFQ1JZUFRdIiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAwOwotKwkJZWxzZQot KwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQga2V5d29yZDogJXNcbiIsIGlidWYpOwot KwkJICAgIGVyciA9IDE7Ci0rCQkgICAgfQotKwkJYnJlYWs7Ci0rCQl9Ci0rCSAgICBlbHNlIGlm IChkaXIgPT0gLTEpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIEVOQ1JZ UFQvREVDUllQVCBrZXl3b3JkXG4iKTsKLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSAKLSsJ CXN0ZXAgPSAyOwotKwotKwljYXNlIDI6IC8qIEtFWSA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGli dWYsIHJmcCk7Ci0rCSAgICBpZigqaWJ1ZiA9PSAnXG4nKQotKwkJYnJlYWs7Ci0rCSAgICBpZigh c3RybmNhc2VjbXAoaWJ1ZiwiQ09VTlQgPSAiLDgpKQotKwkJYnJlYWs7Ci0rCi0rCSAgICBpZiAo c3RybmNhc2VjbXAoaWJ1ZiwgIktFWSA9ICIsIDYpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1p c3NpbmcgS0VZXG4iKTsKLSsJCWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQls ZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzYsIGFLZXkpOwotKwkJaWYgKGxlbiA8IDApCi0rCQkg ICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVyciA9MTsKLSsJ CSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4pOwot KwkJaWYgKHN0cmNtcChhbW9kZSwgIkVDQiIpID09IDApCi0rCQkgICAgewotKwkJICAgIG1lbXNl dChpVmVjLCAwLCBzaXplb2YoaVZlYykpOwotKwkJICAgIHN0ZXAgPSAoZGlyKT8gNDogNTsgIC8q IG5vIGl2ZWMgZm9yIEVDQiAqLwotKwkJICAgIH0KLSsJCWVsc2UKLSsJCSAgICArK3N0ZXA7Ci0r CQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSAzOiAvKiBJViA9IHh4eHggKi8KLSsJICAgIGZw dXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIklWID0gIiwgNSkg IT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBJVlxuIik7Ci0rCQllcnIgPSAxOwotKwkJ fQotKwkgICAgZWxzZQotKwkJewotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis1LCBpVmVj KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgSVZc biIpOwotKwkJICAgIGVyciA9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZh bHVlKCJJViIsIGlWZWMsIGxlbik7Ci0rCQlzdGVwID0gKGRpcik/IDQ6IDU7Ci0rCQl9Ci0rCSAg ICBicmVhazsKLSsKLSsJY2FzZSA0OiAvKiBQTEFJTlRFWFQgPSB4eHh4ICovCi0rCSAgICBmcHV0 cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJQTEFJTlRFWFQgPSAi LCAxMikgIT0gMCkKLSsJCXsKLSsJCXByaW50ZigiTWlzc2luZyBQTEFJTlRFWFRcbiIpOwotKwkJ ZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJCXsKLSsJCWludCBubiA9IHN0cmxlbihpYnVm KzEyKTsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4o aWJ1ZisxMixubi0xLHBsYWludGV4dCk7Ci0rCQllbHNlCi0rCQkgICAgbGVuPWhleDJiaW4oaWJ1 ZisxMiwgcGxhaW50ZXh0KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmlu dGYoIkludmFsaWQgUExBSU5URVhUOiAlcyIsIGlidWYrMTIpOwotKwkJICAgIGVyciA9MTsKLSsJ CSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlpZiAobGVuID49IHNpemVvZihwbGFpbnRleHQpKQot KwkJICAgIHsKLSsJCSAgICBwcmludGYoIkJ1ZmZlciBvdmVyZmxvd1xuIik7Ci0rCQkgICAgfQot KwkJUHJpbnRWYWx1ZSgiUExBSU5URVhUIiwgKHVuc2lnbmVkIGNoYXIqKXBsYWludGV4dCwgbGVu KTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVz dCAqLwotKwkJICAgIHsKLSsJCSAgICBpZihkb19tY3QoYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZl YywgCi0rCQkJICAgICAgZGlyLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0LCBsZW4sIAotKwkJ CSAgICAgIHJmcCkgPCAwKQotKwkJCUVYSVQoMSk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAg IHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2RlLCBha2V5c3osIGFLZXksIGlWZWMs IAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLwotKwkJCQkgIHBs YWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBPdXRwdXRWYWx1ZSgiQ0lQSEVSVEVY VCIsY2lwaGVydGV4dCxsZW4scmZwLAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJ ICAgIH0KLSsJCXN0ZXAgPSA2OwotKwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNTogLyog Q0lQSEVSVEVYVCA9IHh4eHggKi8KLSsJICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCSAgICBpZiAo c3RybmNhc2VjbXAoaWJ1ZiwgIkNJUEhFUlRFWFQgPSAiLCAxMykgIT0gMCkKLSsJCXsKLSsJCXBy aW50ZigiTWlzc2luZyBLRVlcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0KLSsJICAgIGVsc2UKLSsJ CXsKLSsJCWlmKCFzdHJjbXAoYW1vZGUsIkNGQjEiKSkKLSsJCSAgICBsZW49YmludDJiaW4oaWJ1 ZisxMyxzdHJsZW4oaWJ1ZisxMyktMSxjaXBoZXJ0ZXh0KTsKLSsJCWVsc2UKLSsJCSAgICBsZW4g PSBoZXgyYmluKGlidWYrMTMsY2lwaGVydGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7 Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIENJUEhFUlRFWFRcbiIpOwotKwkJICAgIGVyciA9MTsK LSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCi0rCQlQcmludFZhbHVlKCJDSVBIRVJURVhUIiwg Y2lwaGVydGV4dCwgbGVuKTsKLSsJCWlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSA9PSAwKSAgLyog TW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlz eiwgYUtleSwgaVZlYywgCi0rCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7Ci0rCQkg ICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2Rl LCBha2V5c3osIGFLZXksIGlWZWMsIAotKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAxID0g ZW5jcnlwdCAqLwotKwkJCQkgIHBsYWludGV4dCwgY2lwaGVydGV4dCwgbGVuKTsKLSsJCSAgICBP dXRwdXRWYWx1ZSgiUExBSU5URVhUIiwodW5zaWduZWQgY2hhciAqKXBsYWludGV4dCxsZW4scmZw LAotKwkJCQkhc3RyY21wKGFtb2RlLCJDRkIxIikpOwotKwkJICAgIH0KLSsJCXN0ZXAgPSA2Owot KwkJfQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgNjoKLSsJICAgIGlmIChpYnVmWzBdICE9ICdc bicpCi0rCQl7Ci0rCQllcnIgPSAxOwotKwkJcHJpbnRmKCJNaXNzaW5nIHRlcm1pbmF0b3JcbiIp OwotKwkJfQotKwkgICAgZWxzZSBpZiAoc3RyY21wKGF0ZXN0LCAiTUNUIikgIT0gMCkKLSsJCXsg LyogTUNUIGFscmVhZHkgYWRkZWQgdGVybWluYXRpbmcgbmwgKi8KLSsJCWZwdXRzKGlidWYsIHJm cCk7Ci0rCQl9Ci0rCSAgICBzdGVwID0gMTsKLSsJICAgIGJyZWFrOwotKwkgICAgfQotKwl9Ci0r ICAgIGlmIChyZnApCi0rCWZjbG9zZShyZnApOwotKyAgICBpZiAoYWZwKQotKwlmY2xvc2UoYWZw KTsKLSsgICAgcmV0dXJuIGVycjsKLSsgICAgfQotKwotKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgIFByb2Nlc3NlcyBlaXRoZXIgYSBzaW5n bGUgZmlsZSBvciAKLSsgIGEgc2V0IG9mIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBwYXNzZWQgaW4g YSBmaWxlLgotKyAgQSBzaW5nbGUgZmlsZSBpcyBzcGVjaWZpZWQgYXM6Ci0rICAgIGFlc190ZXN0 IC1mIHh4eC5yZXEKLSsgIEEgc2V0IG9mIGZpbGVzIGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVz X3Rlc3QgLWQgeHh4eHgueHh4Ci0rICBUaGUgZGVmYXVsdCBpczogLWQgcmVxLnR4dAotKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLStpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgY2hhciAqcnFsaXN0ID0gInJl cS50eHQiLCAqcnNwZmlsZSA9IE5VTEw7Ci0rICAgIEZJTEUgKmZwID0gTlVMTDsKLSsgICAgY2hh ciBmblsyNTBdID0gIiIsIHJmblsyNTZdID0gIiI7Ci0rICAgIGludCBmX29wdCA9IDAsIGRfb3B0 ID0gMTsKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmKCFGSVBTX21vZGVfc2V0KDEp KQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlFWElUKDEpOwotKwl9Ci0rI2VuZGlmCi0r ICAgIGlmIChhcmdjID4gMSkKLSsJewotKwlpZiAoc3RyY2FzZWNtcChhcmd2WzFdLCAiLWQiKSA9 PSAwKQotKwkgICAgewotKwkgICAgZF9vcHQgPSAxOwotKwkgICAgfQotKwllbHNlIGlmIChzdHJj YXNlY21wKGFyZ3ZbMV0sICItZiIpID09IDApCi0rCSAgICB7Ci0rCSAgICBmX29wdCA9IDE7Ci0r CSAgICBkX29wdCA9IDA7Ci0rCSAgICB9Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHByaW50Zigi SW52YWxpZCBwYXJhbWV0ZXI6ICVzXG4iLCBhcmd2WzFdKTsKLSsJICAgIHJldHVybiAwOwotKwkg ICAgfQotKwlpZiAoYXJnYyA8IDMpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIk1pc3NpbmcgcGFy YW1ldGVyXG4iKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwlpZiAoZF9vcHQpCi0rCSAg ICBycWxpc3QgPSBhcmd2WzJdOwotKwllbHNlCi0rCSAgICB7Ci0rCSAgICBzdHJjcHkoZm4sIGFy Z3ZbMl0pOwotKwkgICAgcnNwZmlsZSA9IGFyZ3ZbM107Ci0rCSAgICB9Ci0rCX0KLSsgICAgaWYg KGRfb3B0KQotKwl7IC8qIGxpc3Qgb2YgZmlsZXMgKGRpcmVjdG9yeSkgKi8KLSsJaWYgKCEoZnAg PSBmb3BlbihycWxpc3QsICJyIikpKQotKwkgICAgewotKwkgICAgcHJpbnRmKCJDYW5ub3Qgb3Bl biByZXEgbGlzdCBmaWxlXG4iKTsKLSsJICAgIHJldHVybiAtMTsKLSsJICAgIH0KLSsJd2hpbGUg KGZnZXRzKGZuLCBzaXplb2YoZm4pLCBmcCkpCi0rCSAgICB7Ci0rCSAgICBzdHJ0b2soZm4sICJc clxuIik7Ci0rCSAgICBzdHJjcHkocmZuLCBmbik7Ci0rCSAgICBpZiAoVkVSQk9TRSkKLSsJCXBy aW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7Ci0rCSAgICBpZiAocHJvY19maWxlKHJmbiwg cnNwZmlsZSkpCi0rCQl7Ci0rCQlwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVz IDw8PFxuIiwgcmZuKTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWZjbG9zZShmcCk7 Ci0rCX0KLSsgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwotKwl7Ci0rCWlmIChWRVJCT1NFKQot KwkgICAgcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOwotKwlpZiAocHJvY19maWxlKGZu LCByc3BmaWxlKSkKLSsJICAgIHsKLSsJICAgIHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVk IGZvcjogJXMgPDw8XG4iLCBmbik7Ci0rCSAgICB9Ci0rCX0KLSsgICAgRVhJVCgwKTsKLSsgICAg cmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMKLS0tLSAvZGV2L251 bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMJMjAwOS0xMS0xMiAxMjozNjo1 MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsNzAyIEBACi0rLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsg KiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz 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 Ci0rICovCi0rLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSsgIE5JU1QgREVTIE1vZGVzIG9mIE9wZXJhdGlvbiBWYWxpZGF0aW9uIFN5c3RlbQotKyAgVGVz dCBQcm9ncmFtCi0rCi0rICBCYXNlZCBvbiB0aGUgQUVTIFZhbGlkYXRpb24gU3VpdGUsIHdoaWNo IHdhczoKLSsgIERvbmF0ZWQgdG8gT3BlblNTTCBieToKLSsgIFYtT05FIENvcnBvcmF0aW9uCi0r ICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAotKyAgR2VybWFudG93biwgTUQgMjA4NzQK LSsgIFUuUy5BLgotKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8ZXJybm8uaD4KLSsjaW5jbHVkZSA8YXNzZXJ0 Lmg+Ci0rI2luY2x1ZGUgPGN0eXBlLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKyNpZm5kZWYgT1BF TlNTTF9GSVBTCi0rCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAg IHByaW50ZigiTm8gRklQUyBERVMgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0r Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNf dXRsLmgiCi0rCi0rI2RlZmluZSBERVNfQkxPQ0tfU0laRSA4Ci0rCi0rI2RlZmluZSBWRVJCT1NF IDAKLSsKLStpbnQgREVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4LAotKwkgICAgY2hhciAqYW1v ZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAotKwkgICAgdW5zaWduZWQgY2hh ciAqaVZlYywgCi0rCSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICov Ci0rCSAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbGVuKQot KyAgICB7Ci0rICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7Ci0rCi0rICAgIGlm IChha2V5c3ogIT0gMTkyKQotKwl7Ci0rCXByaW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIs IGFrZXlzeik7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsKLSsgICAgaWYgKHN0cmNhc2VjbXAoYW1vZGUs ICJDQkMiKSA9PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2JjKCk7Ci0rICAgIGVsc2Ug aWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQotKwljaXBoZXIgPSBFVlBfZGVzX2Vk ZTNfZWNiKCk7Ci0rICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJDRkI2NCIpID09IDAp Ci0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI2NCgpOwotKyAgICBlbHNlIGlmIChzdHJuY2Fz ZWNtcChhbW9kZSwgIk9GQiIsIDMpID09IDApCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19vZmIo KTsKLSsgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZCOCIpKQotKwljaXBoZXIgPSBF VlBfZGVzX2VkZTNfY2ZiOCgpOwotKyAgICBlbHNlIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIx IikpCi0rCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmIxKCk7Ci0rICAgIGVsc2UKLSsJewotKwlw cmludGYoIlVua25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJRVhJVCgxKTsKLSsJfQotKwot KyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGFLZXksIGlWZWMs IGRpcikgPD0gMCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmKCFzdHJjYXNlY21wKGFtb2RlLCJDRkIx IikpCi0rCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwgRVZQX0NJUEhfRkxBR19MRU5H VEhfQklUUyk7Ci0rICAgIEVWUF9DaXBoZXIoY3R4LCBvdXQsIGluLCBsZW4pOwotKwotKyAgICBy ZXR1cm4gMTsKLSsgICAgfQotKwotK3ZvaWQgRGVidWdWYWx1ZShjaGFyICp0YWcsIHVuc2lnbmVk IGNoYXIgKnZhbCwgaW50IGxlbikKLSsgICAgewotKyAgICBjaGFyIG9idWZbMjA0OF07Ci0rICAg IGludCBvbGVuOwotKyAgICBvbGVuID0gYmluMmhleCh2YWwsIGxlbiwgb2J1Zik7Ci0rICAgIHBy aW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwotKyAgICB9Ci0rCi0rdm9pZCBz aGlmdGluKHVuc2lnbmVkIGNoYXIgKmRzdCx1bnNpZ25lZCBjaGFyICpzcmMsaW50IG5iaXRzKQot KyAgICB7Ci0rICAgIGludCBuOwotKwotKyAgICAvKiBtb3ZlIHRoZSBieXRlcy4uLiAqLwotKyAg ICBtZW1tb3ZlKGRzdCxkc3QrbmJpdHMvOCwzKjgtbmJpdHMvOCk7Ci0rICAgIC8qIGFwcGVuZCBu ZXcgZGF0YSAqLwotKyAgICBtZW1jcHkoZHN0KzMqOC1uYml0cy84LHNyYywobmJpdHMrNykvOCk7 Ci0rICAgIC8qIGxlZnQgc2hpZnQgdGhlIGJpdHMgKi8KLSsgICAgaWYobmJpdHMlOCkKLSsJZm9y KG49MCA7IG4gPCAzKjggOyArK24pCi0rCSAgICBkc3Rbbl09KGRzdFtuXSA8PCAobmJpdHMlOCkp fChkc3RbbisxXSA+PiAoOC1uYml0cyU4KSk7Ci0rICAgIH0JCi0rCi0rLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0rY2hhciAqdF90YWdbMl0gPSB7 IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07Ci0rY2hhciAqdF9tb2RlWzZdID0geyJDQkMiLCJF Q0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjY0In07Ci0rZW51bSBNb2RlIHtDQkMsIEVDQiwg T0ZCLCBDRkIxLCBDRkI4LCBDRkI2NH07Ci0raW50IFNpemVzWzZdPXs2NCw2NCw2NCwxLDgsNjR9 OwotKwotK3ZvaWQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKLSsJICAgIGludCBha2V5c3osIGludCBu dW1rZXlzLCB1bnNpZ25lZCBjaGFyICpha2V5LHVuc2lnbmVkIGNoYXIgKml2ZWMsCi0rCSAgICBp bnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAotKwkgICAgRklMRSAqcmZwKQot KyAgICB7Ci0rICAgIGludCBpLGltb2RlOwotKyAgICB1bnNpZ25lZCBjaGFyIG5rWzQqOF07IC8q IGxvbmdlc3Qga2V5KzggKi8KLSsgICAgdW5zaWduZWQgY2hhciB0ZXh0MFs4XTsKLSsKLSsgICAg Zm9yIChpbW9kZT0wIDsgaW1vZGUgPCA2IDsgKytpbW9kZSkKLSsJaWYoIXN0cmNtcChhbW9kZSx0 X21vZGVbaW1vZGVdKSkKLSsJICAgIGJyZWFrOwotKyAgICBpZiAoaW1vZGUgPT0gNikKLSsJeyAK LSsJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFtb2RlKTsKLSsJRVhJVCgxKTsK LSsJfQotKwotKyAgICBmb3IoaT0wIDsgaSA8IDQwMCA7ICsraSkKLSsJewotKwlpbnQgajsKLSsJ aW50IG47Ci0rCWludCBrcD1ha2V5c3ovNjQ7Ci0rCXVuc2lnbmVkIGNoYXIgb2xkX2l2WzhdOwot KwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0r CWZwcmludGYocmZwLCJcbkNPVU5UID0gJWRcbiIsaSk7Ci0rCWlmKGtwID09IDEpCi0rCSAgICBP dXRwdXRWYWx1ZSgiS0VZIixha2V5LDgscmZwLDApOwotKwllbHNlCi0rCSAgICBmb3Iobj0wIDsg biA8IGtwIDsgKytuKQotKwkJewotKwkJZnByaW50ZihyZnAsIktFWSVkIixuKzEpOwotKwkJT3V0 cHV0VmFsdWUoIiIsYWtleStuKjgsOCxyZnAsMCk7Ci0rCQl9Ci0rCi0rCWlmKGltb2RlICE9IEVD QikKLSsJICAgIE91dHB1dFZhbHVlKCJJViIsaXZlYyw4LHJmcCwwKTsKLSsJT3V0cHV0VmFsdWUo dF90YWdbZGlyXjFdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIxKTsKLSsjaWYgMAotKwkvKiBj b21wZW5zYXRlIGZvciBlbmRpYW5uZXNzICovCi0rCWlmKGltb2RlID09IENGQjEpCi0rCSAgICB0 ZXh0WzBdPDw9NzsKLSsjZW5kaWYKLSsJbWVtY3B5KHRleHQwLHRleHQsOCk7Ci0rCi0rCWZvcihq PTAgOyBqIDwgMTAwMDAgOyArK2opCi0rCSAgICB7Ci0rCSAgICB1bnNpZ25lZCBjaGFyIG9sZF90 ZXh0WzhdOwotKwotKwkgICAgbWVtY3B5KG9sZF90ZXh0LHRleHQsOCk7Ci0rCSAgICBpZihqID09 IDApCi0rCQl7Ci0rCQltZW1jcHkob2xkX2l2LGl2ZWMsOCk7Ci0rCQlERVNUZXN0KCZjdHgsYW1v ZGUsYWtleXN6LGFrZXksaXZlYyxkaXIsdGV4dCx0ZXh0LGxlbik7Ci0rCQl9Ci0rCSAgICBlbHNl Ci0rCQl7Ci0rCQltZW1jcHkob2xkX2l2LGN0eC5pdiw4KTsKLSsJCUVWUF9DaXBoZXIoJmN0eCx0 ZXh0LHRleHQsbGVuKTsKLSsJCX0KLSsJICAgIGlmKGogPT0gOTk5OSkKLSsJCXsKLSsJCU91dHB1 dFZhbHVlKHRfdGFnW2Rpcl0sdGV4dCxsZW4scmZwLGltb2RlID09IENGQjEpOwotKwkJLyoJCW1l bWNweShpdmVjLHRleHQsOCk7ICovCi0rCQl9Ci0rCSAgICAvKgkgICAgRGVidWdWYWx1ZSgiaXYi LGN0eC5pdiw4KTsgKi8KLSsJICAgIC8qIGFjY3VtdWxhdGUgbWF0ZXJpYWwgZm9yIHRoZSBuZXh0 IGtleSAqLwotKwkgICAgc2hpZnRpbihuayx0ZXh0LFNpemVzW2ltb2RlXSk7Ci0rCSAgICAvKgkg ICAgRGVidWdWYWx1ZSgibmsiLG5rLDI0KTsqLwotKwkgICAgaWYoKGRpciAmJiAoaW1vZGUgPT0g Q0ZCMSB8fCBpbW9kZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0Ci0rCQkJfHwgaW1vZGUgPT0g Q0JDKSkgfHwgaW1vZGUgPT0gT0ZCKQotKwkJbWVtY3B5KHRleHQsb2xkX2l2LDgpOwotKwotKwkg ICAgaWYoIWRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9kZSA9PSBDRkI4IHx8IGltb2RlID09 IENGQjY0KSkKLSsJCXsKLSsJCS8qIHRoZSB0ZXN0IHNwZWNpZmllcyB1c2luZyB0aGUgb3V0cHV0 IG9mIHRoZSByYXcgREVTIG9wZXJhdGlvbgotKwkJICAgd2hpY2ggd2UgZG9uJ3QgaGF2ZSwgc28g cmVjb25zdHJ1Y3QgaXQuLi4gKi8KLSsJCWZvcihuPTAgOyBuIDwgOCA7ICsrbikKLSsJCSAgICB0 ZXh0W25dXj1vbGRfdGV4dFtuXTsKLSsJCX0KLSsJICAgIH0KLSsJZm9yKG49MCA7IG4gPCA4IDsg KytuKQotKwkgICAgYWtleVtuXV49bmtbMTYrbl07Ci0rCWZvcihuPTAgOyBuIDwgOCA7ICsrbikK LSsJICAgIGFrZXlbOCtuXV49bmtbOCtuXTsKLSsJZm9yKG49MCA7IG4gPCA4IDsgKytuKQotKwkg ICAgYWtleVsxNituXV49bmtbbl07Ci0rCWlmKG51bWtleXMgPCAzKQotKwkgICAgbWVtY3B5KCZh a2V5WzIqOF0sYWtleSw4KTsKLSsJaWYobnVta2V5cyA8IDIpCi0rCSAgICBtZW1jcHkoJmFrZXlb OF0sYWtleSw4KTsKLSsJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopYWtleSk7Ci0r CURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5KzgpKTsKLSsJREVTX3NldF9v ZGRfcGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkrMTYpKTsKLSsJbWVtY3B5KGl2ZWMsY3R4Lml2 LDgpOwotKwotKwkvKiBwb2ludGxlc3MgZXhlcmNpc2UgLSB0aGUgZmluYWwgdGV4dCBkb2Vzbid0 IGRlcGVuZCBvbiB0aGUKLSsJICAgaW5pdGlhbCB0ZXh0IGluIE9GQiBtb2RlLCBzbyB3aG8gY2Fy ZXMgd2hhdCBpdCBpcz8gKFdobwotKwkgICBkZXNpZ25lZCB0aGVzZSB0ZXN0cz8pICovCi0rCWlm KGltb2RlID09IE9GQikKLSsJICAgIGZvcihuPTAgOyBuIDwgOCA7ICsrbikKLSsJCXRleHRbbl09 dGV4dDBbbl1eb2xkX2l2W25dOwotKwl9Ci0rICAgIH0KLSsgICAgCi0raW50IHByb2NfZmlsZShj aGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCi0rICAgIHsKLSsgICAgY2hhciBhZm5bMjU2XSwg cmZuWzI1Nl07Ci0rICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAgPSBOVUxMOwotKyAgICBjaGFy IGlidWZbMjA0OF0sIHRidWZbMjA0OF07Ci0rICAgIGludCBpbGVuLCBsZW4sIHJldCA9IDA7Ci0r ICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKLSsgICAgY2hhciBhdGVzdFsxMDBdID0gIiI7Ci0rICAg IGludCBha2V5c3o9MDsKLSsgICAgdW5zaWduZWQgY2hhciBpVmVjWzIwXSwgYUtleVs0MF07Ci0r ICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIg cGxhaW50ZXh0WzIwNDhdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMjA0OF07Ci0r ICAgIGNoYXIgKnJwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIGludCBudW1rZXlz PTE7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rCi0rICAgIGlmICghcnFmaWxl IHx8ICEoKnJxZmlsZSkpCi0rCXsKLSsJcHJpbnRmKCJObyByZXEgZmlsZVxuIik7Ci0rCXJldHVy biAtMTsKLSsJfQotKyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOwotKwotKyAgICBpZiAoKGFmcCA9 IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNhbm5vdCBvcGVuIGZp bGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICBhZm4sIHN0cmVycm9yKGVycm5vKSk7Ci0rCXJldHVy biAtMTsKLSsJfQotKyAgICBpZiAoIXJzcGZpbGUpCi0rCXsKLSsJc3RyY3B5KHJmbixhZm4pOwot KwlycD1zdHJzdHIocmZuLCJyZXEvIik7Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCWlm ICghcnApCi0rCSAgICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOwotKyNlbmRpZgotKwlhc3NlcnQo cnApOwotKwltZW1jcHkocnAsInJzcCIsMyk7Ci0rCXJwID0gc3Ryc3RyKHJmbiwgIi5yZXEiKTsK LSsJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOwotKwlyc3BmaWxlID0gcmZuOwotKwl9Ci0rICAgIGlm ICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkKLSsJewotKwlwcmludGYoIkNh bm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCi0rCSAgICAgICByZm4sIHN0cmVycm9yKGVycm5v KSk7Ci0rCWZjbG9zZShhZnApOwotKwlhZnAgPSBOVUxMOwotKwlyZXR1cm4gLTE7Ci0rCX0KLSsg ICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihpYnVmKSwgYWZwKSkgIT0gTlVM TCkKLSsJewotKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7Ci0rCWlsZW4gPSBzdHJsZW4oaWJ1Zik7 Ci0rCS8qCXByaW50Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyovCi0rCWlmKHN0ZXAg PT0gMyAmJiAhc3RyY21wKGFtb2RlLCJFQ0IiKSkKLSsJICAgIHsKLSsJICAgIG1lbXNldChpVmVj LCAwLCBzaXplb2YoaVZlYykpOwotKwkgICAgc3RlcCA9IChkaXIpPyA0OiA1OyAgLyogbm8gaXZl YyBmb3IgRUNCICovCi0rCSAgICB9Ci0rCXN3aXRjaCAoc3RlcCkKLSsJICAgIHsKLSsJY2FzZSAw OiAgLyogcmVhZCBwcmVhbWJsZSAqLwotKwkgICAgaWYgKGlidWZbMF0gPT0gJ1xuJykKLSsJCXsg LyogZW5kIG9mIHByZWFtYmxlICovCi0rCQlpZiAoKmFtb2RlID09ICdcMCcpCi0rCQkgICAgewot KwkJICAgIHByaW50ZigiTWlzc2luZyBNb2RlXG4iKTsKLSsJCSAgICBlcnIgPSAxOwotKwkJICAg IH0KLSsJCWVsc2UKLSsJCSAgICB7Ci0rCQkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKLSsJCSAgICAr KyBzdGVwOwotKwkJICAgIH0KLSsJCX0KLSsJICAgIGVsc2UgaWYgKGlidWZbMF0gIT0gJyMnKQot KwkJewotKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06ICVzXG4iLCBpYnVmKTsKLSsJ CWVyciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7IC8qIHByb2Nlc3MgcHJlYW1ibGUgKi8K LSsJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7Ci0rCQlpbnQgbjsKLSsJCWlmKCphbW9kZSkKLSsJ CSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICovCi0rCQkgICAgdGltZV90IHJ0 aW0gPSB0aW1lKDApOwotKwkJICAgIGZwcmludGYocmZwLCAiIyAlcyIsIGN0aW1lKCZydGltKSk7 Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsKLSsJCSAgICBmcHV0cyhpYnVmLCByZnApOwot KwkJICAgIGlmKCFzdHJuY21wKHBwLCJJTlZFUlNFICIsOCkgfHwgIXN0cm5jbXAocHAsIkRFUyAi LDQpCi0rCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlRERVMgIiw1KQotKwkJICAgICAgIHx8ICFz dHJuY21wKHBwLCJQRVJNVVRBVElPTiAiLDEyKQotKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJT VUJTVElUVVRJT04gIiwxMykKLSsJCSAgICAgICB8fCAhc3RybmNtcChwcCwiVkFSSUFCTEUgIiw5 KSkKLSsJCQl7Ci0rCQkJLyogZ2V0IHRlc3QgdHlwZSAqLwotKwkJCWlmKCFzdHJuY21wKHBwLCJE RVMgIiw0KSkKLSsJCQkgICAgcHArPTQ7Ci0rCQkJZWxzZSBpZighc3RybmNtcChwcCwiVERFUyAi LDUpKQotKwkJCSAgICBwcCs9NTsKLSsJCQl4cCA9IHN0cmNocihwcCwgJyAnKTsKLSsJCQluID0g eHAtcHA7Ci0rCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOwotKwkJCWF0ZXN0W25dID0gJ1wwJzsK LSsJCQkvKiBnZXQgbW9kZSAqLwotKwkJCXhwID0gc3RycmNocihwcCwgJyAnKTsgLyogZ2V0IG1v ZGUiICovCi0rCQkJbiA9IHN0cmxlbih4cCsxKS0xOwotKwkJCXN0cm5jcHkoYW1vZGUsIHhwKzEs IG4pOwotKwkJCWFtb2RlW25dID0gJ1wwJzsKLSsJCQkvKiBhbW9kZVszXSA9ICdcMCc7ICovCi0r CQkJaWYgKFZFUkJPU0UpCi0rCQkJCXByaW50ZigiVGVzdD0lcywgTW9kZT0lc1xuIixhdGVzdCxh bW9kZSk7Ci0rCQkJfQotKwkJICAgIH0KLSsJCX0KLSsJICAgIGJyZWFrOwotKwotKwljYXNlIDE6 ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8KLSsJICAgIGlmKGlidWZbMF0gPT0gJ1xuJykK LSsJCWJyZWFrOwotKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQotKwkJewotKwkJZnB1dHMoaWJ1 ZiwgcmZwKTsKLSsJCSsrc3RlcDsKLSsJCWlmIChzdHJuY2FzZWNtcChpYnVmLCAiW0VOQ1JZUFRd IiwgOSkgPT0gMCkKLSsJCSAgICBkaXIgPSAxOwotKwkJZWxzZSBpZiAoc3RybmNhc2VjbXAoaWJ1 ZiwgIltERUNSWVBUXSIsIDkpID09IDApCi0rCQkgICAgZGlyID0gMDsKLSsJCWVsc2UKLSsJCSAg ICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVzXG4iLCBpYnVmKTsKLSsJCSAg ICBlcnIgPSAxOwotKwkJICAgIH0KLSsJCWJyZWFrOwotKwkJfQotKwkgICAgZWxzZSBpZiAoZGly ID09IC0xKQotKwkJewotKwkJZXJyID0gMTsKLSsJCXByaW50ZigiTWlzc2luZyBFTkNSWVBUL0RF Q1JZUFQga2V5d29yZFxuIik7Ci0rCQlicmVhazsKLSsJCX0KLSsJICAgIGVsc2UgCi0rCQlzdGVw ID0gMjsKLSsKLSsJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCi0rCSAgICBpZigqaWJ1ZiA9PSAn XG4nKQotKwkJewotKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAg ICAgICAgICAgICAgfQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIkNPVU5UID0gIiw4KSkK LSsJCXsKLSsJICAgICAgICBmcHV0cyhpYnVmLCByZnApOwotKwkJYnJlYWs7Ci0rICAgICAgICAg ICAgICAgIH0KLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVD0iLDYpKQotKwkJewot KwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7Ci0rCQlicmVhazsKLSsgICAgICAgICAgICAgICAg fQotKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIk51bUtleXMgPSAiLDEwKSkKLSsJCXsKLSsJ CW51bWtleXM9YXRvaShpYnVmKzEwKTsKLSsJCWJyZWFrOwotKwkJfQotKwkgIAotKwkgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKLSsJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJLRVkgPSAiLDYpKQot KwkJewotKwkJYWtleXN6PTY0OwotKwkJbGVuID0gaGV4MmJpbigoY2hhciopaWJ1Zis2LCBhS2V5 KTsKLSsJCWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgS0VZ XG4iKTsKLSsJCSAgICBlcnI9MTsKLSsJCSAgICBicmVhazsKLSsJCSAgICB9Ci0rCQlQcmludFZh bHVlKCJLRVkiLCBhS2V5LCBsZW4pOwotKwkJKytzdGVwOwotKwkJfQotKwkgICAgZWxzZSBpZigh c3RybmNhc2VjbXAoaWJ1ZiwiS0VZcyA9ICIsNykpCi0rCQl7Ci0rCQlha2V5c3o9NjQqMzsKLSsJ CWxlbj1oZXgyYmluKGlidWYrNyxhS2V5KTsKLSsJCWlmKGxlbiAhPSA4KQotKwkJICAgIHsKLSsJ CSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKLSsJCSAgICBlcnI9MTsKLSsJCSAgICBicmVh azsKLSsJCSAgICB9Ci0rCQltZW1jcHkoYUtleSs4LGFLZXksOCk7Ci0rCQltZW1jcHkoYUtleSsx NixhS2V5LDgpOwotKwkJaWJ1Zls0XT0nXDAnOwotKwkJUHJpbnRWYWx1ZSgiS0VZcyIsYUtleSxs ZW4pOwotKwkJKytzdGVwOwotKwkJfQotKwkgICAgZWxzZSBpZighc3RybmNhc2VjbXAoaWJ1Ziwi S0VZIiwzKSkKLSsJCXsKLSsJCWludCBuPWlidWZbM10tJzEnOwotKwotKwkJYWtleXN6PTY0KjM7 Ci0rCQlsZW49aGV4MmJpbihpYnVmKzcsYUtleStuKjgpOwotKwkJaWYobGVuICE9IDgpCi0rCQkg ICAgewotKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwotKwkJICAgIGVycj0xOwotKwkJ ICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCWlidWZbNF09J1wwJzsKLSsJCVByaW50VmFsdWUoaWJ1 ZixhS2V5LGxlbik7Ci0rCQlpZihuID09IDIpCi0rCQkgICAgKytzdGVwOwotKwkJfQotKwkgICAg ZWxzZQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAxOwotKwkJ fQotKwkgICAgYnJlYWs7Ci0rCi0rCWNhc2UgMzogLyogSVYgPSB4eHh4ICovCi0rCSAgICBmcHV0 cyhpYnVmLCByZnApOwotKwkgICAgaWYgKHN0cm5jYXNlY21wKGlidWYsICJJViA9ICIsIDUpICE9 IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOwotKwkJZXJyID0gMTsKLSsJCX0K LSsJICAgIGVsc2UKLSsJCXsKLSsJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNSwgaVZlYyk7 Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRmKCJJbnZhbGlkIElWXG4i KTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkgICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJUHJpbnRWYWx1 ZSgiSVYiLCBpVmVjLCBsZW4pOwotKwkJc3RlcCA9IChkaXIpPyA0OiA1OwotKwkJfQotKwkgICAg YnJlYWs7Ci0rCi0rCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMo aWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiUExBSU5URVhUID0gIiwg MTIpICE9IDApCi0rCQl7Ci0rCQlwcmludGYoIk1pc3NpbmcgUExBSU5URVhUXG4iKTsKLSsJCWVy ciA9IDE7Ci0rCQl9Ci0rCSAgICBlbHNlCi0rCQl7Ci0rCQlpbnQgbm4gPSBzdHJsZW4oaWJ1Zisx Mik7Ci0rCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCi0rCQkgICAgbGVuPWJpbnQyYmluKGli dWYrMTIsbm4tMSxwbGFpbnRleHQpOwotKwkJZWxzZQotKwkJICAgIGxlbj1oZXgyYmluKGlidWYr MTIsIHBsYWludGV4dCk7Ci0rCQlpZiAobGVuIDwgMCkKLSsJCSAgICB7Ci0rCQkgICAgcHJpbnRm KCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKLSsJCSAgICBlcnIgPTE7Ci0rCQkg ICAgYnJlYWs7Ci0rCQkgICAgfQotKwkJaWYgKGxlbiA+PSBzaXplb2YocGxhaW50ZXh0KSkKLSsJ CSAgICB7Ci0rCQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dcbiIpOwotKwkJICAgIH0KLSsJ CVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbik7 Ci0rCQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVz dCAqLwotKwkJICAgIHsKLSsJCSAgICBkb19tY3QoYW1vZGUsYWtleXN6LG51bWtleXMsYUtleSxp VmVjLGRpcixwbGFpbnRleHQsbGVuLHJmcCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIHsK LSsJCSAgICBhc3NlcnQoZGlyID09IDEpOwotKwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwgYW1v ZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEg PSBlbmNyeXB0ICovCi0rCQkJCSAgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBsZW4pOwotKwkJICAg IE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAsCi0rCQkJCSFzdHJj bXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9IDY7Ci0rCQl9Ci0rCSAgICBi cmVhazsKLSsKLSsJY2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLwotKwkgICAgZnB1dHMo aWJ1ZiwgcmZwKTsKLSsJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIs IDEzKSAhPSAwKQotKwkJewotKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7Ci0rCQllcnIgPSAx OwotKwkJfQotKwkgICAgZWxzZQotKwkJewotKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQot KwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQp OwotKwkJZWxzZQotKwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKLSsJ CWlmIChsZW4gPCAwKQotKwkJICAgIHsKLSsJCSAgICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVY VFxuIik7Ci0rCQkgICAgZXJyID0xOwotKwkJICAgIGJyZWFrOwotKwkJICAgIH0KLSsJCQotKwkJ UHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxlbik7Ci0rCQlpZiAoc3RyY21w KGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8gVGVzdCAqLwotKwkJICAgIHsK LSsJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlzeiwgbnVta2V5cywgYUtleSwgaVZlYywgCi0rCQkJ ICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAg IHsKLSsJCSAgICBhc3NlcnQoZGlyID09IDApOwotKwkJICAgIHJldCA9IERFU1Rlc3QoJmN0eCwg YW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCi0rCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQs IDEgPSBlbmNyeXB0ICovCi0rCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOwotKwkJ ICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxl bixyZnAsCi0rCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Ci0rCQkgICAgfQotKwkJc3RlcCA9 IDY7Ci0rCQl9Ci0rCSAgICBicmVhazsKLSsKLSsJY2FzZSA2OgotKwkgICAgaWYgKGlidWZbMF0g IT0gJ1xuJykKLSsJCXsKLSsJCWVyciA9IDE7Ci0rCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRv clxuIik7Ci0rCQl9Ci0rCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQot KwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAqLwotKwkJZnB1dHMoaWJ1 ZiwgcmZwKTsKLSsJCX0KLSsJICAgIHN0ZXAgPSAxOwotKwkgICAgYnJlYWs7Ci0rCSAgICB9Ci0r CX0KLSsgICAgaWYgKHJmcCkKLSsJZmNsb3NlKHJmcCk7Ci0rICAgIGlmIChhZnApCi0rCWZjbG9z ZShhZnApOwotKyAgICByZXR1cm4gZXJyOwotKyAgICB9Ci0rCi0rLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyAgUHJvY2Vzc2VzIGVpdGhlciBh IHNpbmdsZSBmaWxlIG9yIAotKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3Nl ZCBpbiBhIGZpbGUuCi0rICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKLSsgICAgYWVz X3Rlc3QgLWYgeHh4LnJlcQotKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgotKyAg ICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKLSsgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0Ci0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLSsgICAgewotKyAgICBjaGFyICpycWxpc3Qg PSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVMTDsKLSsgICAgRklMRSAqZnAgPSBOVUxMOwotKyAg ICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKLSsgICAgaW50IGZfb3B0ID0gMCwg ZF9vcHQgPSAxOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYoIUZJUFNfbW9kZV9z ZXQoMSkpCi0rCXsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCUVYSVQoMSk7Ci0rCX0KLSsjZW5k aWYKLSsgICAgaWYgKGFyZ2MgPiAxKQotKwl7Ci0rCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICIt ZCIpID09IDApCi0rCSAgICB7Ci0rCSAgICBkX29wdCA9IDE7Ci0rCSAgICB9Ci0rCWVsc2UgaWYg KHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikgPT0gMCkKLSsJICAgIHsKLSsJICAgIGZfb3B0ID0g MTsKLSsJICAgIGRfb3B0ID0gMDsKLSsJICAgIH0KLSsJZWxzZQotKwkgICAgewotKwkgICAgcHJp bnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOwotKwkgICAgcmV0dXJuIDA7 Ci0rCSAgICB9Ci0rCWlmIChhcmdjIDwgMykKLSsJICAgIHsKLSsJICAgIHByaW50ZigiTWlzc2lu ZyBwYXJhbWV0ZXJcbiIpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rCWlmIChkX29wdCkK LSsJICAgIHJxbGlzdCA9IGFyZ3ZbMl07Ci0rCWVsc2UKLSsJICAgIHsKLSsJICAgIHN0cmNweShm biwgYXJndlsyXSk7Ci0rCSAgICByc3BmaWxlID0gYXJndlszXTsKLSsJICAgIH0KLSsJfQotKyAg ICBpZiAoZF9vcHQpCi0rCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLwotKwlpZiAo IShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkpCi0rCSAgICB7Ci0rCSAgICBwcmludGYoIkNhbm5v dCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOwotKwkgICAgcmV0dXJuIC0xOwotKwkgICAgfQotKwl3 aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiksIGZwKSkKLSsJICAgIHsKLSsJICAgIHN0cnRvayhm biwgIlxyXG4iKTsKLSsJICAgIHN0cmNweShyZm4sIGZuKTsKLSsJICAgIHByaW50ZigiUHJvY2Vz c2luZzogJXNcbiIsIHJmbik7Ci0rCSAgICBpZiAocHJvY19maWxlKHJmbiwgcnNwZmlsZSkpCi0r CQl7Ci0rCQlwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBmb3I6ICVzIDw8PFxuIiwgcmZu KTsKLSsJCUVYSVQoMSk7Ci0rCQl9Ci0rCSAgICB9Ci0rCWZjbG9zZShmcCk7Ci0rCX0KLSsgICAg ZWxzZSAvKiBzaW5nbGUgZmlsZSAqLwotKwl7Ci0rCWlmIChWRVJCT1NFKQotKwkJcHJpbnRmKCJQ cm9jZXNzaW5nOiAlc1xuIiwgZm4pOwotKwlpZiAocHJvY19maWxlKGZuLCByc3BmaWxlKSkKLSsJ ICAgIHsKLSsJICAgIHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZvcjogJXMgPDw8XG4i LCBmbik7Ci0rCSAgICB9Ci0rCX0KLSsgICAgRVhJVCgwKTsKLSsgICAgcmV0dXJuIDA7Ci0rICAg IH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9maXBzL2NhdnMvZmlwc19kc3N2cy5jCi0tLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6 MDA6NTguODAxMDAyMjc2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfZHNzdnMuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAot QEAgLTAsMCArMSw1MzcgQEAKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKwot KyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rCi0raW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIERTQSBzdXBw b3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsjZWxzZQotKwotKyNpbmNsdWRlIDxvcGVu c3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsKLSsjaW5j bHVkZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgdm9pZCBwYm4oY29uc3QgY2hhciAqbmFtZSwg QklHTlVNICpibikKLSsJewotKwlpbnQgbGVuLCBpOwotKwl1bnNpZ25lZCBjaGFyICp0bXA7Ci0r CWxlbiA9IEJOX251bV9ieXRlcyhibik7Ci0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7Ci0r CWlmICghdG1wKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBl cnJvclxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCUJOX2JuMmJpbihibiwgdG1wKTsKLSsJcHJp bnRmKCIlcyA9ICIsIG5hbWUpOwotKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0rCQlwcmlu dGYoIiUwMlgiLCB0bXBbaV0pOwotKwlmcHV0cygiXG4iLCBzdGRvdXQpOwotKwlPUEVOU1NMX2Zy ZWUodG1wKTsKLSsJcmV0dXJuOwotKwl9Ci0rCi0rdm9pZCBwcmltZXMoKQotKyAgICB7Ci0rICAg IGNoYXIgYnVmWzEwMjQwXTsKLSsgICAgY2hhciBsYnVmWzEwMjQwXTsKLSsgICAgY2hhciAqa2V5 d29yZCwgKnZhbHVlOwotKwotKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikg IT0gTlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rkb3V0KTsKLSsJaWYgKCFwYXJzZV9saW5lKCZr ZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNtcChr ZXl3b3JkLCJQcmltZSIpKQotKwkgICAgewotKwkgICAgQklHTlVNICpwcDsKLSsKLSsJICAgIHBw PUJOX25ldygpOwotKwkgICAgZG9faGV4MmJuKCZwcCx2YWx1ZSk7Ci0rCSAgICBwcmludGYoInJl c3VsdD0gJWNcbiIsCi0rCQkgICBCTl9pc19wcmltZV9leChwcCwyMCxOVUxMLE5VTEwpID8gJ1An IDogJ0YnKTsKLSsJICAgIH0JICAgIAotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIHBxZygpCi0rICAg IHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hh ciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wOwotKwotKyAgICB3aGlsZShmZ2V0 cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlpZiAoIXBhcnNlX2xpbmUo JmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkKLSsJCXsKLSsJCWZwdXRzKGJ1ZixzdGRvdXQp OwotKwkJY29udGludWU7Ci0rCQl9Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiW21vZCIpKQotKwkg ICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk4iKSkKLSsJ ICAgIHsKLSsJICAgIGludCBuPWF0b2kodmFsdWUpOwotKwotKwkgICAgcHJpbnRmKCJbbW9kID0g JWRdXG5cbiIsbm1vZCk7Ci0rCi0rCSAgICB3aGlsZShuLS0pCi0rCQl7Ci0rCQl1bnNpZ25lZCBj aGFyIHNlZWRbMjBdOwotKwkJRFNBICpkc2E7Ci0rCQlpbnQgY291bnRlcjsKLSsJCXVuc2lnbmVk IGxvbmcgaDsKLSsJCWRzYSA9IEZJUFNfZHNhX25ldygpOwotKwotKwkJaWYgKCFEU0FfZ2VuZXJh dGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2VlZCwwLCZjb3VudGVyLCZoLE5VTEwpKQotKwkJ CXsKLSsJCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsJCXBibigi UCIsZHNhLT5wKTsKLSsJCXBibigiUSIsZHNhLT5xKTsKLSsJCXBibigiRyIsZHNhLT5nKTsKLSsJ CXB2KCJTZWVkIixzZWVkLDIwKTsKLSsJCXByaW50ZigiYyA9ICVkXG4iLGNvdW50ZXIpOwotKwkJ cHJpbnRmKCJIID0gJWx4XG4iLGgpOwotKwkJcHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0rCSAg ICB9Ci0rCWVsc2UKLSsJICAgIGZwdXRzKGJ1ZixzdGRvdXQpOwotKwl9Ci0rICAgIH0KLSsKLSt2 b2lkIHBxZ3ZlcigpCi0rICAgIHsKLSsgICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1 ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBCSUdOVU0gKnAgPSBO VUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTDsKLSsgICAgaW50IGNvdW50ZXIsIGNvdW50ZXIyOwot KyAgICB1bnNpZ25lZCBsb25nIGgsIGgyOwotKyAgICBEU0EgKmRzYT1OVUxMOwotKyAgICBpbnQg bm1vZD0wOwotKyAgICB1bnNpZ25lZCBjaGFyIHNlZWRbMTAyNF07Ci0rCi0rICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91 dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJZnB1dHMoYnVmLCBzdGRvdXQpOwotKwlpZighc3Ry Y21wKGtleXdvcmQsIlttb2QiKSkKLSsJICAgIG5tb2Q9YXRvaSh2YWx1ZSk7Ci0rCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJQIikpCi0rCSAgICBwPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJRIikpCi0rCSAgICBxPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJHIikpCi0rCSAgICBnPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYo IXN0cmNtcChrZXl3b3JkLCJTZWVkIikpCi0rCSAgICB7Ci0rCSAgICBpbnQgc2xlbiA9IGhleDJi aW4odmFsdWUsIHNlZWQpOwotKwkgICAgaWYgKHNsZW4gIT0gMjApCi0rCQl7Ci0rCQlmcHJpbnRm KHN0ZGVyciwgIlNlZWQgcGFyc2UgbGVuZ3RoIGVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJ fQotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiYyIpKQotKwkgICAgY291bnRl ciA9YXRvaShidWYrNCk7Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJIIikpCi0rCSAgICB7 Ci0rCSAgICBoID0gYXRvaSh2YWx1ZSk7Ci0rCSAgICBpZiAoIXAgfHwgIXEgfHwgIWcpCi0rCQl7 Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVycm9yXG4iKTsKLSsJCWV4aXQgKDEpOwotKwkJ fQotKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDIwICwmY291bnRlcjIsJmgyLE5VTEwpKQotKwkJ CXsKLSsJCQlkb19wcmludF9lcnJvcnMoKTsKLSsJCQlleGl0KDEpOwotKwkJCX0KLSsgICAgICAg ICAgICBpZiAoQk5fY21wKGRzYS0+cCwgcCkgfHwgQk5fY21wKGRzYS0+cSwgcSkgfHwgQk5fY21w KGRzYS0+ZywgZykKLSsJCXx8IChjb3VudGVyICE9IGNvdW50ZXIyKSB8fCAoaCAhPSBoMikpCi0r CSAgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsKLSsJICAgIGVsc2UKLSsJICAgIAlwcmludGYo IlJlc3VsdCA9IFBcbiIpOwotKwkgICAgQk5fZnJlZShwKTsKLSsJICAgIEJOX2ZyZWUocSk7Ci0r CSAgICBCTl9mcmVlKGcpOwotKwkgICAgcCA9IE5VTEw7Ci0rCSAgICBxID0gTlVMTDsKLSsJICAg IGcgPSBOVUxMOwotKwkgICAgRklQU19kc2FfZnJlZShkc2EpOwotKwkgICAgZHNhID0gTlVMTDsK LSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0rLyogS2V5cGFpciB2ZXJpZmljYXRpb24gcm91dGlu ZS4gTkI6IHRoaXMgaXNuJ3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgRklQUzE0MC0yCi0rICogYWxn b3JpdGhtIHRlc3RzLiBJdCBpcyBhbiBhZGRpdGlvbmFsIHRlc3QgdG8gcGVyZm9ybSBzYW5pdHkg Y2hlY2tzIG9uIHRoZQotKyAqIG91dHB1dCBvZiB0aGUgS2V5UGFpciB0ZXN0LgotKyAqLwotKwot K3N0YXRpYyBpbnQgZHNzX3BhcmFtY2hlY2soaW50IG5tb2QsIEJJR05VTSAqcCwgQklHTlVNICpx LCBCSUdOVU0gKmcsCi0rCQkJCQkJCUJOX0NUWCAqY3R4KQotKyAgICB7Ci0rICAgIEJJR05VTSAq cmVtID0gTlVMTDsKLSsgICAgaWYgKEJOX251bV9iaXRzKHApICE9IG5tb2QpCi0rCXJldHVybiAw OwotKyAgICBpZiAoQk5fbnVtX2JpdHMocSkgIT0gMTYwKQotKwlyZXR1cm4gMDsKLSsgICAgaWYg KEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQotKwly ZXR1cm4gMDsKLSsgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHEsIEJOX3ByaW1lX2NoZWNrcywgY3R4 LCBOVUxMKSAhPSAxKQotKwlyZXR1cm4gMDsKLSsgICAgcmVtID0gQk5fbmV3KCk7Ci0rICAgIGlm ICghQk5fbW9kKHJlbSwgcCwgcSwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkKLSsgICAgCXx8IChC Tl9jbXAoZywgQk5fdmFsdWVfb25lKCkpIDw9IDApCi0rCXx8ICFCTl9tb2RfZXhwKHJlbSwgZywg cSwgcCwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkpCi0rCXsKLSsJQk5fZnJlZShyZW0pOwotKwly ZXR1cm4gMDsKLSsJfQotKyAgICAvKiBUb2RvOiBjaGVjayBnICovCi0rICAgIEJOX2ZyZWUocmVt KTsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSt2b2lkIGtleXZlcigpCi0rICAgIHsKLSsg ICAgY2hhciBidWZbMTAyNF07Ci0rICAgIGNoYXIgbGJ1ZlsxMDI0XTsKLSsgICAgY2hhciAqa2V5 d29yZCwgKnZhbHVlOwotKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVM TCwgKlggPSBOVUxMLCAqWSA9IE5VTEw7Ci0rICAgIEJJR05VTSAqWTI7Ci0rICAgIEJOX0NUWCAq Y3R4ID0gTlVMTDsKLSsgICAgaW50IG5tb2Q9MCwgcGFyYW1jaGVjayA9IDA7Ci0rCi0rICAgIGN0 eCA9IEJOX0NUWF9uZXcoKTsKLSsgICAgWTIgPSBCTl9uZXcoKTsKLSsKLSsgICAgd2hpbGUoZmdl dHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5VTEwpCi0rCXsKLSsJaWYgKCFwYXJzZV9saW5l KCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQl7Ci0rCQlmcHV0cyhidWYsc3Rkb3V0 KTsKLSsJCWNvbnRpbnVlOwotKwkJfQotKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKLSsJ ICAgIHsKLSsJICAgIGlmIChwKQotKwkJQk5fZnJlZShwKTsKLSsJICAgIHAgPSBOVUxMOwotKwkg ICAgaWYgKHEpCi0rCQlCTl9mcmVlKHEpOwotKwkgICAgcSA9IE5VTEw7Ci0rCSAgICBpZiAoZykK LSsJCUJOX2ZyZWUoZyk7Ci0rCSAgICBnID0gTlVMTDsKLSsJICAgIHBhcmFtY2hlY2sgPSAwOwot KwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIlAiKSkKLSsJICAgIHA9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIlEiKSkKLSsJICAgIHE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIkciKSkKLSsJICAgIGc9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIlgiKSkKLSsJICAgIFg9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIlkiKSkKLSsJICAgIHsKLSsJICAgIFk9aGV4MmJuKHZhbHVlKTsKLSsJICAgIGlmICghcCB8 fCAhcSB8fCAhZyB8fCAhWCB8fCAhWSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiUGFyc2Ug RXJyb3JcbiIpOwotKwkJZXhpdCAoMSk7Ci0rCQl9Ci0rCSAgICBwYm4oIlAiLHApOwotKwkgICAg cGJuKCJRIixxKTsKLSsJICAgIHBibigiRyIsZyk7Ci0rCSAgICBwYm4oIlgiLFgpOwotKwkgICAg cGJuKCJZIixZKTsKLSsJICAgIGlmICghcGFyYW1jaGVjaykKLSsJCXsKLSsJCWlmIChkc3NfcGFy YW1jaGVjayhubW9kLCBwLCBxLCBnLCBjdHgpKQotKwkJCXBhcmFtY2hlY2sgPSAxOwotKwkJZWxz ZQotKwkJCXBhcmFtY2hlY2sgPSAtMTsKLSsJCX0KLSsJICAgIGlmIChwYXJhbWNoZWNrICE9IDEp Ci0rCSAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIpOwotKwkgICAgZWxzZQotKwkJewotKwkJaWYg KCFCTl9tb2RfZXhwKFkyLCBnLCBYLCBwLCBjdHgpIHx8IEJOX2NtcChZMiwgWSkpCi0rCSAgICAJ CXByaW50ZigiUmVzdWx0ID0gRlxuIik7Ci0rCSAgICAgICAgZWxzZQotKwkgICAgCQlwcmludGYo IlJlc3VsdCA9IFBcbiIpOwotKwkJfQotKwkgICAgQk5fZnJlZShYKTsKLSsJICAgIEJOX2ZyZWUo WSk7Ci0rCSAgICBYID0gTlVMTDsKLSsJICAgIFkgPSBOVUxMOwotKwkgICAgfQotKwl9Ci0rCWlm IChwKQotKwkgICAgQk5fZnJlZShwKTsKLSsJaWYgKHEpCi0rCSAgICBCTl9mcmVlKHEpOwotKwlp ZiAoZykKLSsJICAgIEJOX2ZyZWUoZyk7Ci0rCWlmIChZMikKLSsJICAgIEJOX2ZyZWUoWTIpOwot KyAgICB9Ci0rCi0rdm9pZCBrZXlwYWlyKCkKLSsgICAgewotKyAgICBjaGFyIGJ1ZlsxMDI0XTsK LSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rICAg IGludCBubW9kPTA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAh PSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBi dWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJ aWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwll bHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQotKwkgICAgewotKwkgICAgRFNBICpkc2E7Ci0r CSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKLSsKLSsJICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4i LG5tb2QpOwotKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5l cmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJ ewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQ Iixkc2EtPnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcp OwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCi0rCSAgICB3aGlsZShuLS0pCi0rCQl7Ci0r CQlpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsJCQl7Ci0rCQkJZG9fcHJpbnRfZXJyb3Jz KCk7Ci0rCQkJZXhpdCgxKTsKLSsJCQl9Ci0rCi0rCQlwYm4oIlgiLGRzYS0+cHJpdl9rZXkpOwot KwkJcGJuKCJZIixkc2EtPnB1Yl9rZXkpOwotKwkJcHV0YygnXG4nLHN0ZG91dCk7Ci0rCQl9Ci0r CSAgICB9Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQgc2lnZ2VuKCkKLSsgICAgewotKyAgICBjaGFy IGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICBjaGFyICprZXl3b3JkLCAq dmFsdWU7Ci0rICAgIGludCBubW9kPTA7Ci0rICAgIERTQSAqZHNhPU5VTEw7Ci0rCi0rICAgIHdo aWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFy c2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVm LHN0ZG91dCk7Ci0rCQljb250aW51ZTsKLSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9k IikpCi0rCSAgICB7Ci0rCSAgICBubW9kPWF0b2kodmFsdWUpOwotKwkgICAgcHJpbnRmKCJbbW9k ID0gJWRdXG5cbiIsbm1vZCk7Ci0rCSAgICBpZiAoZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2Ep OwotKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7Ci0rCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9w YXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwkJewotKwkJ ZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlleGl0KDEpOwotKwkJfQotKwkgICAgcGJuKCJQIixkc2Et PnApOwotKwkgICAgcGJuKCJRIixkc2EtPnEpOwotKwkgICAgcGJuKCJHIixkc2EtPmcpOwotKwkg ICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3Jk LCJNc2ciKSkKLSsJICAgIHsKLSsJICAgIHVuc2lnbmVkIGNoYXIgbXNnWzEwMjRdOwotKwkgICAg dW5zaWduZWQgY2hhciBzYnVmWzYwXTsKLSsJICAgIHVuc2lnbmVkIGludCBzbGVuOwotKwkgICAg aW50IG47Ci0rCSAgICBFVlBfUEtFWSBwazsKLSsJICAgIEVWUF9NRF9DVFggbWN0eDsKLSsJICAg IERTQV9TSUcgKnNpZzsKLSsJICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCi0rCSAgICBu PWhleDJiaW4odmFsdWUsbXNnKTsKLSsJICAgIHB2KCJNc2ciLG1zZyxuKTsKLSsKLSsJICAgIGlm ICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0r CQlleGl0KDEpOwotKwkJfQotKwkgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsJICAgIHBr LnBrZXkuZHNhID0gZHNhOwotKwkgICAgcGJuKCJZIixkc2EtPnB1Yl9rZXkpOwotKwotKwkgICAg RVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9TaWdu VXBkYXRlKCZtY3R4LCBtc2csIG4pOwotKwkgICAgRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2J1Ziwg JnNsZW4sICZwayk7Ci0rCi0rCSAgICBzaWcgPSBEU0FfU0lHX25ldygpOwotKwkgICAgRklQU19k c2Ffc2lnX2RlY29kZShzaWcsIHNidWYsIHNsZW4pOwotKwotKwkgICAgcGJuKCJSIixzaWctPnIp OwotKwkgICAgcGJuKCJTIixzaWctPnMpOwotKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Ci0rCSAg ICBEU0FfU0lHX2ZyZWUoc2lnKTsKLSsJICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0r CSAgICB9Ci0rCX0KLSsJaWYgKGRzYSkKLSsJCUZJUFNfZHNhX2ZyZWUoZHNhKTsKLSsgICAgfQot KwotK3ZvaWQgc2lndmVyKCkKLSsgICAgewotKyAgICBEU0EgKmRzYT1OVUxMOwotKyAgICBjaGFy IGJ1ZlsxMDI0XTsKLSsgICAgY2hhciBsYnVmWzEwMjRdOwotKyAgICB1bnNpZ25lZCBjaGFyIG1z Z1sxMDI0XTsKLSsgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKyAgICBpbnQgbm1vZD0wLCBu PTA7Ci0rICAgIERTQV9TSUcgc2csICpzaWcgPSAmc2c7Ci0rCi0rICAgIHNpZy0+ciA9IE5VTEw7 Ci0rICAgIHNpZy0+cyA9IE5VTEw7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVm LHN0ZGluKSAhPSBOVUxMKQotKwl7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVl LCBsYnVmLCBidWYpKQotKwkJewotKwkJZnB1dHMoYnVmLHN0ZG91dCk7Ci0rCQljb250aW51ZTsK LSsJCX0KLSsJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCi0rCSAgICB7Ci0rCSAgICBubW9k PWF0b2kodmFsdWUpOwotKwkgICAgaWYoZHNhKQotKwkJRklQU19kc2FfZnJlZShkc2EpOwotKwkg ICAgZHNhPUZJUFNfZHNhX25ldygpOwotKwkgICAgfQotKwllbHNlIGlmKCFzdHJjbXAoa2V5d29y ZCwiUCIpKQotKwkgICAgZHNhLT5wPWhleDJibih2YWx1ZSk7Ci0rCWVsc2UgaWYoIXN0cmNtcChr ZXl3b3JkLCJRIikpCi0rCSAgICBkc2EtPnE9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3Ry Y21wKGtleXdvcmQsIkciKSkKLSsJICAgIHsKLSsJICAgIGRzYS0+Zz1oZXgyYm4odmFsdWUpOwot KwotKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7Ci0rCSAgICBwYm4oIlAiLGRz YS0+cCk7Ci0rCSAgICBwYm4oIlEiLGRzYS0+cSk7Ci0rCSAgICBwYm4oIkciLGRzYS0+Zyk7Ci0r CSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJICAgIH0KLSsJZWxzZSBpZighc3RyY21wKGtleXdv cmQsIk1zZyIpKQotKwkgICAgewotKwkgICAgbj1oZXgyYmluKHZhbHVlLG1zZyk7Ci0rCSAgICBw digiTXNnIixtc2csbik7Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikp Ci0rCSAgICBkc2EtPnB1Yl9rZXk9aGV4MmJuKHZhbHVlKTsKLSsJZWxzZSBpZighc3RyY21wKGtl eXdvcmQsIlIiKSkKLSsJICAgIHNpZy0+cj1oZXgyYm4odmFsdWUpOwotKwllbHNlIGlmKCFzdHJj bXAoa2V5d29yZCwiUyIpKQotKwkgICAgewotKwkgICAgRVZQX01EX0NUWCBtY3R4OwotKwkgICAg RVZQX1BLRVkgcGs7Ci0rCSAgICB1bnNpZ25lZCBjaGFyIHNpZ2J1Zls2MF07Ci0rCSAgICB1bnNp Z25lZCBpbnQgc2xlbjsKLSsJICAgIGludCByOwotKwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4 KTsKLSsJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9EU0E7Ci0rCSAgICBway5wa2V5LmRzYSA9IGRz YTsKLSsJICAgIHNpZy0+cz1oZXgyYm4odmFsdWUpOwotKwkKLSsJICAgIHBibigiWSIsZHNhLT5w dWJfa2V5KTsKLSsJICAgIHBibigiUiIsc2lnLT5yKTsKLSsJICAgIHBibigiUyIsc2lnLT5zKTsK LSsKLSsJICAgIHNsZW4gPSBGSVBTX2RzYV9zaWdfZW5jb2RlKHNpZ2J1Ziwgc2lnKTsKLSsJICAg IEVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKTsKLSsJICAgIEVWUF9W ZXJpZnlVcGRhdGUoJm1jdHgsIG1zZywgbik7Ci0rCSAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZt Y3R4LCBzaWdidWYsIHNsZW4sICZwayk7Ci0rCSAgICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgp OwotKwkKLSsJICAgIHByaW50ZigiUmVzdWx0ID0gJWNcbiIsIHIgPT0gMSA/ICdQJyA6ICdGJyk7 Ci0rCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKLSsJICAgIH0KLSsJfQotKyAgICB9Ci0rCi0raW50 IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsgICAgaWYoYXJnYyAhPSAyKQot Kwl7Ci0rCWZwcmludGYoc3RkZXJyLCIlcyBbcHJpbWV8cHFnfHBxZ3ZlcnxrZXlwYWlyfHNpZ2dl bnxzaWd2ZXJdXG4iLGFyZ3ZbMF0pOwotKwlleGl0KDEpOwotKwl9Ci0rICAgIGlmKCFGSVBTX21v ZGVfc2V0KDEpKQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKwlleGl0KDEpOwotKwl9Ci0r ICAgIGlmKCFzdHJjbXAoYXJndlsxXSwicHJpbWUiKSkKLSsJcHJpbWVzKCk7Ci0rICAgIGVsc2Ug aWYoIXN0cmNtcChhcmd2WzFdLCJwcWciKSkKLSsJcHFnKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNt cChhcmd2WzFdLCJwcWd2ZXIiKSkKLSsJcHFndmVyKCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChh cmd2WzFdLCJrZXlwYWlyIikpCi0rCWtleXBhaXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFy Z3ZbMV0sImtleXZlciIpKQotKwlrZXl2ZXIoKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3Zb MV0sInNpZ2dlbiIpKQotKwlzaWdnZW4oKTsKLSsgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0s InNpZ3ZlciIpKQotKwlzaWd2ZXIoKTsKLSsgICAgZWxzZQotKwl7Ci0rCWZwcmludGYoc3RkZXJy LCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJndlsxXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsK LSsgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCi0tLS0gL2Rl di9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYwkyMDA5LTExLTEyIDEyOjM2 OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwyMzAgQEAKLSsvKgotKyAqIENydWRlIHRl c3QgZHJpdmVyIGZvciBwcm9jZXNzaW5nIHRoZSBWU1QgYW5kIE1DVCB0ZXN0dmVjdG9yIGZpbGVz Ci0rICogZ2VuZXJhdGVkIGJ5IHRoZSBDTVZQIFJOR1ZTIHByb2R1Y3QuCi0rICoKLSsgKiBOb3Rl IHRoZSBpbnB1dCBmaWxlcyBhcmUgYXNzdW1lZCB0byBoYXZlIGEgX3ZlcnlfIHNwZWNpZmljIGZv cm1hdAotKyAqIGFzIGRlc2NyaWJlZCBpbiB0aGUgTklTVCBkb2N1bWVudCAiVGhlIFJhbmRvbSBO dW1iZXIgR2VuZXJhdG9yCi0rICogVmFsaWRhdGlvbiBTeXN0ZW0gKFJOR1ZTKSIsIE1heSAyNSwg MjAwNC4KLSsgKgotKyAqLwotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0r I2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsKLStpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMgUk5HIHN1cHBv cnRcbiIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNz bC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv eDUwOXYzLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKwot KyNpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotK3ZvaWQgdnN0KCkKLSsgICAgewotKyAgICB1bnNp Z25lZCBjaGFyICprZXkgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKLSsg ICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOwotKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07 Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFyIGxidWZbMTAyNF07Ci0rICAgIGNoYXIg KmtleXdvcmQsICp2YWx1ZTsKLSsgICAgbG9uZyBpLCBrZXlsZW47Ci0rCi0rICAgIGtleWxlbiA9 IDA7Ci0rCi0rICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQot Kwl7Ci0rCWZwdXRzKGJ1ZixzdGRvdXQpOwotKwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtl eV0iLCAxMykpCi0rCQlrZXlsZW4gPSAxNjsKLSsJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMg MTkyLUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAyNDsKLSsJZWxzZSBpZighc3RybmNtcChidWYs IltBRVMgMjU2LUtleV0iLCAxMykpCi0rCQlrZXlsZW4gPSAzMjsKLSsJaWYgKCFwYXJzZV9saW5l KCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCi0rCQljb250aW51ZTsKLSsJaWYoIXN0cmNt cChrZXl3b3JkLCJLZXkiKSkKLSsJICAgIHsKLSsJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkp OwotKwkgICAgaWYgKGkgIT0ga2V5bGVuKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJJbnZh bGlkIGtleSBsZW5ndGgsIGV4cGVjdGluZyAlbGRcbiIsIGtleWxlbik7Ci0rCQlyZXR1cm47Ci0r CQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJEVCIpKQotKwkgICAgewot KwkgICAgZHQ9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IDE2KQotKwkJewot KwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIERUIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0r CQl9Ci0rCSAgICB9Ci0rCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJWIikpCi0rCSAgICB7Ci0r CSAgICB2PWhleDJiaW5fbSh2YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJ CWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBWIGxlbmd0aFxuIik7Ci0rCQlyZXR1cm47Ci0rCQl9 Ci0rCi0rCSAgICBpZiAoIWtleSB8fCAhZHQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIk1p c3Npbmcga2V5IG9yIERUXG4iKTsKLSsJCXJldHVybjsKLSsJCX0KLSsKLSsJICAgIEZJUFNfcmFu ZF9zZXRfa2V5KGtleSwga2V5bGVuKTsKLSsJICAgIEZJUFNfcmFuZF9zZWVkKHYsMTYpOwotKwkg ICAgRklQU19yYW5kX3NldF9kdChkdCk7Ci0rCSAgICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwx NikgPD0gMCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZh bHVlXG4iKTsKLSsJICAgICAgICByZXR1cm47Ci0rCSAgICAgICAgfQotKwotKwkgICAgcHYoIlIi LHJldCwxNik7Ci0rCSAgICBPUEVOU1NMX2ZyZWUoa2V5KTsKLSsJICAgIGtleSA9IE5VTEw7Ci0r CSAgICBPUEVOU1NMX2ZyZWUoZHQpOwotKwkgICAgZHQgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9m cmVlKHYpOwotKwkgICAgdiA9IE5VTEw7Ci0rCSAgICB9Ci0rCX0KLSsgICAgfQotKwotK3ZvaWQg bWN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOwotKyAgICB1bnNp Z25lZCBjaGFyICp2ID0gTlVMTDsKLSsgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOwotKyAg ICB1bnNpZ25lZCBjaGFyIHJldFsxNl07Ci0rICAgIGNoYXIgYnVmWzEwMjRdOwotKyAgICBjaGFy IGxidWZbMTAyNF07Ci0rICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKLSsgICAgbG9uZyBpLCBr ZXlsZW47Ci0rICAgIGludCBqOwotKwotKyAgICBrZXlsZW4gPSAwOwotKwotKyAgICB3aGlsZShm Z2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKLSsJewotKwlmcHV0cyhidWYsc3Rk b3V0KTsKLSsJaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDEyOC1LZXldIiwgMTMpKQotKwkJa2V5bGVu ID0gMTY7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQotKwkJ a2V5bGVuID0gMjQ7Ci0rCWVsc2UgaWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMp KQotKwkJa2V5bGVuID0gMzI7Ci0rCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBs YnVmLCBidWYpKQotKwkJY29udGludWU7Ci0rCWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCi0r CSAgICB7Ci0rCSAgICBrZXk9aGV4MmJpbl9tKHZhbHVlLCZpKTsKLSsJICAgIGlmIChpICE9IGtl eWxlbikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBl Y3RpbmcgJWxkXG4iLCBrZXlsZW4pOwotKwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiRFQiKSkKLSsJICAgIHsKLSsJICAgIGR0PWhleDJiaW5fbSh2 YWx1ZSwmaSk7Ci0rCSAgICBpZiAoaSAhPSAxNikKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAi SW52YWxpZCBEVCBsZW5ndGhcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwkgICAgfQotKwllbHNl IGlmKCFzdHJjbXAoa2V5d29yZCwiViIpKQotKwkgICAgewotKwkgICAgdj1oZXgyYmluX20odmFs dWUsJmkpOwotKwkgICAgaWYgKGkgIT0gMTYpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIklu dmFsaWQgViBsZW5ndGhcbiIpOwotKwkJcmV0dXJuOwotKwkJfQotKwotKwkgICAgaWYgKCFrZXkg fHwgIWR0KQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7 Ci0rCQlyZXR1cm47Ci0rCQl9Ci0rCi0rCSAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxl bik7Ci0rCSAgICBGSVBTX3JhbmRfc2VlZCh2LDE2KTsKLSsJICAgIGZvciAoaSA9IDA7IGkgPCAx MDAwMDsgaSsrKQotKwkJewotKwkJICAgIEZJUFNfcmFuZF9zZXRfZHQoZHQpOwotKwkJICAgIGlm IChGSVBTX3JhbmRfYnl0ZXMocmV0LDE2KSA8PSAwKQotKwkJCXsKLSsJCQlmcHJpbnRmKHN0ZGVy ciwgIkVycm9yIGdldHRpbmcgUFJORyB2YWx1ZVxuIik7Ci0rCQkgICAgICAgIHJldHVybjsKLSsJ CSAgICAgICAgfQotKwkJICAgIC8qIEluY3JlbWVudCBEVCAqLwotKwkJICAgIGZvciAoaiA9IDE1 OyBqID49IDA7IGotLSkKLSsJCQl7Ci0rCQkJZHRbal0rKzsKLSsJCQlpZiAoZHRbal0pCi0rCQkJ CWJyZWFrOwotKwkJCX0KLSsJCX0KLSsKLSsJICAgIHB2KCJSIixyZXQsMTYpOwotKwkgICAgT1BF TlNTTF9mcmVlKGtleSk7Ci0rCSAgICBrZXkgPSBOVUxMOwotKwkgICAgT1BFTlNTTF9mcmVlKGR0 KTsKLSsJICAgIGR0ID0gTlVMTDsKLSsJICAgIE9QRU5TU0xfZnJlZSh2KTsKLSsJICAgIHYgPSBO VUxMOwotKwkgICAgfQotKwl9Ci0rICAgIH0KLSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoq YXJndikKLSsgICAgewotKyAgICBpZihhcmdjICE9IDIpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIs IiVzIFttY3R8dnN0XVxuIixhcmd2WzBdKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBpZighRklQ U19tb2RlX3NldCgxKSkKLSsJewotKwlkb19wcmludF9lcnJvcnMoKTsKLSsJZXhpdCgxKTsKLSsJ fQotKyAgICBGSVBTX3JhbmRfcmVzZXQoKTsKLSsgICAgaWYgKCFGSVBTX3JhbmRfdGVzdF9tb2Rl KCkpCi0rCXsKLSsJZnByaW50ZihzdGRlcnIsICJFcnJvciBzZXR0aW5nIFBSTkcgdGVzdCBtb2Rl XG4iKTsKLSsJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsgICAgaWYoIXN0 cmNtcChhcmd2WzFdLCJtY3QiKSkKLSsJbWN0KCk7Ci0rICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2 WzFdLCJ2c3QiKSkKLSsJdnN0KCk7Ci0rICAgIGVsc2UKLSsJewotKwlmcHJpbnRmKHN0ZGVyciwi RG9uJ3Qga25vdyBob3cgdG8gJXMuXG4iLGFyZ3ZbMV0pOwotKwlleGl0KDEpOwotKwl9Ci0rCi0r ICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rlc3QuYwotLS0tIC9kZXYv bnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMJMjAwOS0xMS0xMiAxMjoz Njo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMzkwIEBACi0rLyogZmlwc19yc2FndGVz dC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3Ns Lm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdCAyMDA1LgotKyAqLwotKy8qID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK LSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9u LgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxp Y2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAq Ci0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAot KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICoKLSsgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMg Y3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKLSsgKiAoZWF5QGNy eXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkg VGltCi0rICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICoKLSsgKi8KLSsKLSsjaW5j bHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNp bmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsKLStpbnQg bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIFJT QSBzdXBwb3J0XG4iKTsKLSsgICAgcmV0dXJuKDApOwotK30KLSsKLSsjZWxzZQotKwotKyNpbmNs dWRlICJmaXBzX3V0bC5oIgotKwotK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsK LStzdGF0aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKLSsJCUJJR05V TSAqWHAxLCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKLSsJCUJJR05VTSAqZSk7Ci0rc3RhdGlj IGludCByc2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCi0rCQlCSUdOVU0gKlhxMSwg QklHTlVNICpYcTIsIEJJR05VTSAqWHEpOwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikKLSsJewotKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOwotKwotKwlpbnQgcmV0 ID0gMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0rCQlkb19wcmludF9lcnJv cnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQotKwkJaW4gPSBz dGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwotKwlpZiAoYXJn YyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVuKGFyZ3ZbMl0s ICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlu cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlp ZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxp emF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoIXJzYV90ZXN0 KG91dCwgaW4pKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FHVEVTVCBmaWxl IHByb2Nlc3NpbmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJl dCA9IDA7Ci0rCi0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwot KwotKwlpZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQg JiYgKG91dCAhPSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0r Ci0rCX0KLSsKLSsjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAKLSsKLStpbnQgcnNh X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVi dWYsICpwLCAqcTsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7 Ci0rCUJJR05VTSAqWHAxID0gTlVMTCwgKlhwMiA9IE5VTEwsICpYcCA9IE5VTEw7Ci0rCUJJR05V TSAqWHExID0gTlVMTCwgKlhxMiA9IE5VTEwsICpYcSA9IE5VTEw7Ci0rCUJJR05VTSAqZSA9IE5V TEw7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgbG51bSA9IDA7Ci0rCi0rCW9saW5lYnVmID0gT1BF TlNTTF9tYWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7Ci0rCWxpbmVidWYgPSBPUEVOU1NMX21h bGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKLSsKLSsJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1 ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1Rf TUFYTElORUxFTiwgaW4pKQotKwkJewotKwkJbG51bSsrOwotKwkJc3RyY3B5KGxpbmVidWYsIG9s aW5lYnVmKTsKLSsJCWtleXdvcmQgPSBsaW5lYnVmOwotKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNl ICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCi0rCQkJa2V5 d29yZCsrOwotKwotKwkJLyogTG9vayBmb3IgPSBzaWduICovCi0rCQlwID0gc3RyY2hyKGxpbmVi dWYsICc9Jyk7Ci0rCi0rCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0g YmFyXSBsaW5lKSBqdXN0IGNvcHkgKi8KLSsJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQotKwkJ CXsKLSsJCQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQotKwkJCQlnb3RvIGVycm9yOwot KwkJCWNvbnRpbnVlOwotKwkJCX0KLSsKLSsJCXEgPSBwIC0gMTsKLSsKLSsJCS8qIFJlbW92ZSB0 cmFpbGluZyBzcGFjZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQot KwkJCSpxLS0gPSAwOwotKwotKwkJKnAgPSAwOwotKwkJdmFsdWUgPSBwICsgMTsKLSsKLSsJCS8q IFJlbW92ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1 bnNpZ25lZCBjaGFyKSp2YWx1ZSkpCi0rCQkJdmFsdWUrKzsKLSsKLSsJCS8qIFJlbW92ZSB0cmFp bGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0g MTsKLSsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnAp KQotKwkJCSpwLS0gPSAwOwotKwotKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMSIpKQotKwkJ CXsKLSsJCQlpZiAoWHAxIHx8ICFkb19oZXgyYm4oJlhwMSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHAyIikpCi0r CQkJewotKwkJCWlmIChYcDIgfHwgIWRvX2hleDJibigmWHAyLHZhbHVlKSkKLSsJCQkJZ290byBw YXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcCIpKQot KwkJCXsKLSsJCQlpZiAoWHAgfHwgIWRvX2hleDJibigmWHAsdmFsdWUpKQotKwkJCQlnb3RvIHBh cnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMSIpKQot KwkJCXsKLSsJCQlpZiAoWHExIHx8ICFkb19oZXgyYm4oJlhxMSx2YWx1ZSkpCi0rCQkJCWdvdG8g cGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHEyIikp Ci0rCQkJewotKwkJCWlmIChYcTIgfHwgIWRvX2hleDJibigmWHEyLHZhbHVlKSkKLSsJCQkJZ290 byBwYXJzZV9lcnJvcjsKLSsJCQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcSIp KQotKwkJCXsKLSsJCQlpZiAoWHEgfHwgIWRvX2hleDJibigmWHEsdmFsdWUpKQotKwkJCQlnb3Rv IHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkK LSsJCQl7Ci0rCQkJaWYgKGUgfHwgIWRvX2hleDJibigmZSx2YWx1ZSkpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicDEiKSkKLSsJ CQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAyIikpCi0rCQkJY29u dGludWU7Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwIikpCi0rCQkJY29udGludWU7 Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMSIpKQotKwkJCWNvbnRpbnVlOwotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicTIiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2Ug aWYgKCFzdHJjbXAoa2V5d29yZCwgInEiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgIm4iKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgImQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vy cm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlpZiAoZSAmJiBYcDEgJiYg WHAyICYmIFhwKQotKwkJCXsKLSsJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJz YSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlpZiAoIXJzYV9wcmludGtleTEob3V0LCByc2EsIFhw MSwgWHAyLCBYcCwgZSkpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJQk5fZnJlZShYcDEpOwotKwkJ CVhwMSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcDIpOwotKwkJCVhwMiA9IE5VTEw7Ci0rCQkJQk5f ZnJlZShYcCk7Ci0rCQkJWHAgPSBOVUxMOwotKwkJCUJOX2ZyZWUoZSk7Ci0rCQkJZSA9IE5VTEw7 Ci0rCQkJfQotKwotKwkJaWYgKHJzYSAmJiBYcTEgJiYgWHEyICYmIFhxKQotKwkJCXsKLSsJCQlp ZiAoIXJzYV9wcmludGtleTIob3V0LCByc2EsIFhxMSwgWHEyLCBYcSkpCi0rCQkJCWdvdG8gZXJy b3I7Ci0rCQkJQk5fZnJlZShYcTEpOwotKwkJCVhxMSA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcTIp OwotKwkJCVhxMiA9IE5VTEw7Ci0rCQkJQk5fZnJlZShYcSk7Ci0rCQkJWHEgPSBOVUxMOwotKwkJ CUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJCQlyc2EgPSBOVUxMOwotKwkJCX0KLSsJCX0KLSsKLSsJ cmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0rCWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJl ZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwot KwotKwlpZiAoWHAxKQotKwkJQk5fZnJlZShYcDEpOwotKwlpZiAoWHAyKQotKwkJQk5fZnJlZShY cDIpOwotKwlpZiAoWHApCi0rCQlCTl9mcmVlKFhwKTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUo WHExKTsKLSsJaWYgKFhxMSkKLSsJCUJOX2ZyZWUoWHExKTsKLSsJaWYgKFhxMikKLSsJCUJOX2Zy ZWUoWHEyKTsKLSsJaWYgKFhxKQotKwkJQk5fZnJlZShYcSk7Ci0rCWlmIChlKQotKwkJQk5fZnJl ZShlKTsKLSsJaWYgKHJzYSkKLSsJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsKLSsJcmV0dXJuIHJl dDsKLSsKLSsJcGFyc2VfZXJyb3I6Ci0rCi0rCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2Ug ZXJyb3IgcHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKLSsKLSsJZ290byBlcnJvcjsKLSsK LSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAot KwkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhwLAotKwkJQklHTlVNICplKQot Kwl7Ci0rCWludCByZXQgPSAwOwotKwlCSUdOVU0gKnAxID0gTlVMTCwgKnAyID0gTlVMTDsKLSsJ cDEgPSBCTl9uZXcoKTsKLSsJcDIgPSBCTl9uZXcoKTsKLSsJaWYgKCFwMSB8fCAhcDIpCi0rCQln b3RvIGVycm9yOwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIHAxLCBwMiwgTlVM TCwgTlVMTCwgWHAxLCBYcDIsIFhwLAotKwkJCQkJCU5VTEwsIE5VTEwsIE5VTEwsIGUsIE5VTEwp KQotKwkJZ290byBlcnJvcjsKLSsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMSIsIHAxKTsK LSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMiIsIHAyKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShv dXQsICJwIiwgcnNhLT5wKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChwMSkK LSsJCUJOX2ZyZWUocDEpOwotKwlpZiAocDIpCi0rCQlCTl9mcmVlKHAyKTsKLSsKLSsJcmV0dXJu IHJldDsKLSsJfQotKwotK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAq cnNhLAotKwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhxKQotKwl7Ci0rCWlu dCByZXQgPSAwOwotKwlCSUdOVU0gKnExID0gTlVMTCwgKnEyID0gTlVMTDsKLSsJcTEgPSBCTl9u ZXcoKTsKLSsJcTIgPSBCTl9uZXcoKTsKLSsJaWYgKCFxMSB8fCAhcTIpCi0rCQlnb3RvIGVycm9y OwotKwotKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIHExLCBxMiwg TlVMTCwgTlVMTCwgTlVMTCwKLSsJCQkJCQlYcTEsIFhxMiwgWHEsIE5VTEwsIE5VTEwpKQotKwkJ Z290byBlcnJvcjsKLSsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMSIsIHExKTsKLSsJZG9f Ym5fcHJpbnRfbmFtZShvdXQsICJxMiIsIHEyKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJx IiwgcnNhLT5xKTsKLSsJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJuIiwgcnNhLT5uKTsKLSsJZG9f Ym5fcHJpbnRfbmFtZShvdXQsICJkIiwgcnNhLT5kKTsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJy b3I6Ci0rCWlmIChxMSkKLSsJCUJOX2ZyZWUocTEpOwotKwlpZiAocTIpCi0rCQlCTl9mcmVlKHEy KTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxs IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMKLS0t LSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5jCTIwMDktMTEt MTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDM3MCBAQAotKy8qIGZpcHNf cnNhc3Rlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVA b3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsv KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg bGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRl cyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlA Y3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBi eSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNp bmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC94NTA5djMuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKwotK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBwcmludGYoIk5vIEZJUFMg UlNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwotKyNlbHNlCi0rCi0rI2lu Y2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rc3RhdGljIGludCByc2Ffc3Rlc3QoRklMRSAqb3V0LCBG SUxFICppbiwgaW50IFNhbHRsZW4pOwotK3N0YXRpYyBpbnQgcnNhX3ByaW50c2lnKEZJTEUgKm91 dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywg bG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJl dCA9IDEsIFNhbHRsZW4gPSAtMTsKLSsKLSsJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCi0rCQl7Ci0r CQlkb19wcmludF9lcnJvcnMoKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAoKGFyZ2Mg PiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9 IGF0b2koYXJndlsyXSk7Ci0rCQlpZiAoU2FsdGxlbiA8IDApCi0rCQkJewotKwkJCWZwcmludGYo c3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOwotKwkJCWdvdG8gZW5kOwot KwkJCX0KLSsJCWFyZ2MgLT0gMjsKLSsJCWFyZ3YgKz0gMjsKLSsJCX0KLSsJZWxzZSBpZiAoKGFy Z2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQotKwkJewotKwkJU2FsdGxlbiA9 IC0yOwotKwkJYXJnYy0tOwotKwkJYXJndisrOwotKwkJfQotKwotKwlpZiAoYXJnYyA9PSAxKQot KwkJaW4gPSBzdGRpbjsKLSsJZWxzZQotKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOwotKwot KwlpZiAoYXJnYyA8IDIpCi0rCQlvdXQgPSBzdGRvdXQ7Ci0rCWVsc2UKLSsJCW91dCA9IGZvcGVu KGFyZ3ZbMl0sICJ3Iik7Ci0rCi0rCWlmICghaW4pCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwg IkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJ fQotKwotKwlpZiAoIW91dCkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0 IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwotKwkJfQotKwotKwlpZiAo IXJzYV9zdGVzdChvdXQsIGluLCBTYWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAi RkFUQUwgUlNBU1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdvdG8gZW5kOwot KwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChyZXQpCi0rCQlk b19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikpCi0rCQlmY2xv c2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9zZShvdXQpOwot KwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVO CTEwMjQwCi0rCi0raW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQgU2FsdGxl bikKLSsJewotKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKLSsJY2hhciAqa2V5 d29yZCwgKnZhbHVlOwotKwlSU0EgKnJzYSA9IE5VTEw7Ci0rCWNvbnN0IEVWUF9NRCAqZGdzdCA9 IE5VTEw7Ci0rCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEw7Ci0rCWxvbmcgTXNnbGVuID0gLTE7 Ci0rCWludCBrZXlsZW4gPSAtMSwgY3VycmVudF9rZXlsZW4gPSAtMTsKLSsJaW50IHJldCA9IDA7 Ci0rCWludCBsbnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVT VF9NQVhMSU5FTEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJ TkVMRU4pOwotKwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsK LSsKLSsJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0r CQl7Ci0rCQlsbnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29y ZCA9IGxpbmVidWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBM b29rIGZvciA9IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8q IElmIG5vID0ganVzdCBjb3B5ICovCi0rCQlpZiAoIXApCi0rCQkJewotKwkJCWlmIChmcHV0cyhv bGluZWJ1Ziwgb3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJ fQotKwotKwkJcSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0r CQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0r CQkqcCA9IDA7Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3Bh Y2UgZnJvbSB2YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVl KSkKLSsJCQl2YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFs dWUgKi8KLSsJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpw ID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0r Ci0rCQkvKiBMb29rIGZvciBbbW9kID0gWFhYXSBmb3Iga2V5IGxlbmd0aCAqLwotKwotKwkJaWYg KCFzdHJjbXAoa2V5d29yZCwgIlttb2QiKSkKLSsJCQl7Ci0rCQkJcCA9IHZhbHVlICsgc3RybGVu KHZhbHVlKSAtIDE7Ci0rCQkJaWYgKCpwICE9ICddJykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsK LSsJCQkqcCA9IDA7Ci0rCQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJaWYgKGtleWxlbiA8 IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiU0hBQWxnIikpCi0rCQkJewotKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIp KQotKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAi U0hBMjI0IikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNt cCh2YWx1ZSwgIlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOwotKwkJCWVsc2Ug aWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsK LSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCi0rCQkJCWRnc3QgPSBFVlBf c2hhNTEyKCk7Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJ IkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAotKwkJCQkJCQkJdmFsdWUp OwotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0 cmNtcChrZXl3b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0g JzAnOwotKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cp Ci0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwotKwkJZnB1dHMob2xpbmVidWYsIG91 dCk7Ci0rCi0rCQkvKiBJZiBrZXkgbGVuZ3RoIGhhcyBjaGFuZ2VkLCBnZW5lcmF0ZSBhbmQgb3V0 cHV0IHB1YmxpYwotKwkJICoga2V5IGNvbXBvbmVudHMgb2YgbmV3IFJTQSBwcml2YXRlIGtleS4K LSsJCSAqLwotKwotKwkJaWYgKGtleWxlbiAhPSBjdXJyZW50X2tleWxlbikKLSsJCQl7Ci0rCQkJ QklHTlVNICpibl9lOwotKwkJCWlmIChyc2EpCi0rCQkJCUZJUFNfcnNhX2ZyZWUocnNhKTsKLSsJ CQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKLSsJCQlpZiAoIXJzYSkKLSsJCQkJZ290byBlcnJvcjsK LSsJCQlibl9lID0gQk5fbmV3KCk7Ci0rCQkJaWYgKCFibl9lIHx8ICFCTl9zZXRfd29yZChibl9l LCAweDEwMDEpKQotKwkJCQlnb3RvIGVycm9yOwotKwkJCWlmICghUlNBX1g5MzFfZ2VuZXJhdGVf a2V5X2V4KHJzYSwga2V5bGVuLCBibl9lLCBOVUxMKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlC Tl9mcmVlKGJuX2UpOwotKwkJCWZwdXRzKCJuID0gIiwgb3V0KTsKLSsJCQlkb19ibl9wcmludChv dXQsIHJzYS0+bik7Ci0rCQkJZnB1dHMoIlxuZSA9ICIsIG91dCk7Ci0rCQkJZG9fYm5fcHJpbnQo b3V0LCByc2EtPmUpOwotKwkJCWZwdXRzKCJcbiIsIG91dCk7Ci0rCQkJY3VycmVudF9rZXlsZW4g PSBrZXlsZW47Ci0rCQkJfQotKwotKwkJaWYgKE1zZyAmJiBkZ3N0KQotKwkJCXsKLSsJCQlpZiAo IXJzYV9wcmludHNpZyhvdXQsIHJzYSwgZGdzdCwgTXNnLCBNc2dsZW4sCi0rCQkJCQkJCQlTYWx0 bGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJCQlNc2cg PSBOVUxMOwotKwkJCX0KLSsKLSsJCX0KLSsKLSsJcmV0ID0gMTsKLSsKLSsJZXJyb3I6Ci0rCi0r CWlmIChvbGluZWJ1ZikKLSsJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7Ci0rCWlmIChsaW5lYnVm KQotKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOwotKwlpZiAocnNhKQotKwkJRklQU19yc2FfZnJl ZShyc2EpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwlwYXJzZV9lcnJvcjoKLSsKLSsJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0p OwotKwotKwlnb3RvIGVycm9yOwotKwotKwl9Ci0rCi0rc3RhdGljIGludCByc2FfcHJpbnRzaWco RklMRSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAotKwkJdW5zaWduZWQgY2hh ciAqTXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRsZW4pCi0rCXsKLSsJaW50IHJldCA9IDA7Ci0r CXVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiA9IE5VTEw7Ci0rCWludCBpLCBzaWdsZW47Ci0rCS8qIEVW UF9QS0VZIHN0cnVjdHVyZSAqLwotKwlFVlBfUEtFWSBwazsKLSsJRVZQX01EX0NUWCBjdHg7Ci0r CXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNhID0gcnNhOwotKwotKwlzaWds ZW4gPSBSU0Ffc2l6ZShyc2EpOwotKwlzaWdidWYgPSBPUEVOU1NMX21hbGxvYyhzaWdsZW4pOwot KwlpZiAoIXNpZ2J1ZikKLSsJCWdvdG8gZXJyb3I7Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4 KTsKLSsKLSsJaWYgKFNhbHRsZW4gPj0gMCkKLSsJCXsKLSsJCU1fRVZQX01EX0NUWF9zZXRfZmxh Z3MoJmN0eCwKLSsJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVuIDw8IDE2KSk7 Ci0rCQl9Ci0rCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCi0rCQlNX0VWUF9NRF9DVFhfc2V0X2Zs YWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7Ci0rCWlmICghRVZQX1NpZ25Jbml0 X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQotKwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVw ZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9yOwotKwlpZiAoIUVWUF9TaWdu RmluYWwoJmN0eCwgc2lnYnVmLCAodW5zaWduZWQgaW50ICopJnNpZ2xlbiwgJnBrKSkKLSsJCWdv dG8gZXJyb3I7Ci0rCi0rCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJZnB1dHMoIlMg PSAiLCBvdXQpOwotKwotKwlmb3IgKGkgPSAwOyBpIDwgc2lnbGVuOyBpKyspCi0rCQlmcHJpbnRm KG91dCwgIiUwMlgiLCBzaWdidWZbaV0pOwotKwotKwlmcHV0cygiXG4iLCBvdXQpOwotKwotKwly ZXQgPSAxOwotKwotKwllcnJvcjoKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgotZGlm ZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBz X3JzYXZ0ZXN0LmMKLS0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2 dGVzdC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDM3 NyBAQAotKy8qIGZpcHNfcnNhdnRlc3QuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBO IEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3Qg MjAwNS4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJp YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs b3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBk b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsg KiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0r ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NM Lm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3Bl blNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9t b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBj b250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi Ci0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K LSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK LSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZ b3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsg KgotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNp bmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsKLSsjaWZuZGVmIE9QRU5T U0xfRklQUwotKwotK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi0rewotKyAgICBw cmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4oMCk7Ci0rfQotKwot KyNlbHNlCi0rCi0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0raW50IHJzYV90ZXN0KEZJTEUg Km91dCwgRklMRSAqaW4sIGludCBzYWx0bGVuKTsKLStzdGF0aWMgaW50IHJzYV9wcmludHZlcihG SUxFICpvdXQsCi0rCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKLSsJCWNvbnN0IEVWUF9NRCAqZGdz dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCi0rCQl1bnNpZ25lZCBjaGFy ICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpCi0rCXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50 IHJldCA9IDE7Ci0rCWludCBTYWx0bGVuID0gLTE7Ci0rCi0rCWlmKCFGSVBTX21vZGVfc2V0KDEp KQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJ aWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRsZW4iLCBhcmd2WzFdKSkKLSsJCXsKLSsJ CVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOwotKwkJaWYgKFNhbHRsZW4gPCAwKQotKwkJCXsKLSsJ CQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlkIHNhbHQgbGVuZ3RoXG4iKTsKLSsJCQln b3RvIGVuZDsKLSsJCQl9Ci0rCQlhcmdjIC09IDI7Ci0rCQlhcmd2ICs9IDI7Ci0rCQl9Ci0rCWVs c2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5MzEiLCBhcmd2WzFdKSkKLSsJCXsKLSsJ CVNhbHRsZW4gPSAtMjsKLSsJCWFyZ2MtLTsKLSsJCWFyZ3YrKzsKLSsJCX0KLSsKLSsJaWYgKGFy Z2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0rCWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwg InIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQotKwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlv dXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwotKwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3Rv IGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZB VEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0K LSsKLSsJaWYgKCFyc2FfdGVzdChvdXQsIGluLCBTYWx0bGVuKSkKLSsJCXsKLSsJCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKLSsJCWdv dG8gZW5kOwotKwkJfQotKwllbHNlCi0rCQlyZXQgPSAwOwotKwotKwllbmQ6Ci0rCi0rCWlmIChy ZXQpCi0rCQlkb19wcmludF9lcnJvcnMoKTsKLSsKLSsJaWYgKGluICYmIChpbiAhPSBzdGRpbikp Ci0rCQlmY2xvc2UoaW4pOwotKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKLSsJCWZjbG9z ZShvdXQpOwotKwotKwlyZXR1cm4gcmV0OwotKwotKwl9Ci0rCi0rI2RlZmluZSBSU0FfVEVTVF9N QVhMSU5FTEVOCTEwMjQwCi0rCi0raW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGlu dCBTYWx0bGVuKQotKwl7Ci0rCWNoYXIgKmxpbmVidWYsICpvbGluZWJ1ZiwgKnAsICpxOwotKwlj aGFyICprZXl3b3JkLCAqdmFsdWU7Ci0rCWNvbnN0IEVWUF9NRCAqZGdzdCA9IE5VTEw7Ci0rCUJJ R05VTSAqbiA9IE5VTEwsICplID0gTlVMTDsKLSsJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwg KlMgPSBOVUxMOwotKwlsb25nIE1zZ2xlbiwgU2xlbjsKLSsJaW50IHJldCA9IDA7Ci0rCWludCBs bnVtID0gMDsKLSsKLSsJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhSU0FfVEVTVF9NQVhMSU5F TEVOKTsKLSsJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9URVNUX01BWExJTkVMRU4pOwot KwotKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQotKwkJZ290byBlcnJvcjsKLSsKLSsJd2hp bGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVOLCBpbikpCi0rCQl7Ci0rCQls bnVtKys7Ci0rCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwotKwkJa2V5d29yZCA9IGxpbmVi dWY7Ci0rCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNp Z25lZCBjaGFyKSprZXl3b3JkKSkKLSsJCQlrZXl3b3JkKys7Ci0rCi0rCQkvKiBMb29rIGZvciA9 IHNpZ24gKi8KLSsJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKLSsKLSsJCS8qIElmIG5vID0g b3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJdIGxpbmUpIGp1c3QgY29weSAqLwotKwkJ aWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCi0rCQkJewotKwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwg b3V0KSA8IDApCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJY29udGludWU7Ci0rCQkJfQotKwotKwkJ cSA9IHAgLSAxOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCi0rCQl3aGlsZSAo aXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCi0rCQkJKnEtLSA9IDA7Ci0rCi0rCQkqcCA9IDA7 Ci0rCQl2YWx1ZSA9IHAgKyAxOwotKwotKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2 YWx1ZSAqLwotKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKLSsJCQl2 YWx1ZSsrOwotKwotKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJ CXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwotKwotKwkJd2hpbGUgKCpwID09ICdcbicg fHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCi0rCQkJKnAtLSA9IDA7Ci0rCi0rCQlpZiAo IXN0cmNtcChrZXl3b3JkLCAibiIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmbix2YWx1 ZSkpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChr ZXl3b3JkLCAiZSIpKQotKwkJCXsKLSsJCQlpZiAoIWRvX2hleDJibigmZSx2YWx1ZSkpCi0rCQkJ CWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAi U0hBQWxnIikpCi0rCQkJewotKwkJCWlmICghc3RyY21wKHZhbHVlLCAiU0hBMSIpKQotKwkJCQlk Z3N0ID0gRVZQX3NoYTEoKTsKLSsJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBMjI0Iikp Ci0rCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7Ci0rCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwg IlNIQTI1NiIpKQotKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOwotKwkJCWVsc2UgaWYgKCFzdHJj bXAodmFsdWUsICJTSEEzODQiKSkKLSsJCQkJZGdzdCA9IEVWUF9zaGEzODQoKTsKLSsJCQllbHNl IGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCi0rCQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7 Ci0rCQkJZWxzZQotKwkJCQl7Ci0rCQkJCWZwcmludGYoc3RkZXJyLAotKwkJCQkJIkZBVEFMOiB1 bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAotKwkJCQkJCQkJdmFsdWUpOwotKwkJCQln b3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3 b3JkLCAiTXNnIikpCi0rCQkJewotKwkJCWlmIChNc2cpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7 Ci0rCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJ CU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7Ci0rCQkJaWYgKCFNc2cpCi0rCQkJCWdv dG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiUyIp KQotKwkJCXsKLSsJCQlpZiAoUykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlpZiAoc3Ry bGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJUyA9IGhleDJiaW5f bSh2YWx1ZSwgJlNsZW4pOwotKwkJCWlmICghUykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJ CQl9Ci0rCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJSZXN1bHQiKSkKLSsJCQljb250aW51 ZTsKLSsJCWVsc2UKLSsJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYs IG91dCk7Ci0rCi0rCQlpZiAobiAmJiBlICYmIE1zZyAmJiBTICYmIGRnc3QpCi0rCQkJewotKwkJ CWlmICghcnNhX3ByaW50dmVyKG91dCwgbiwgZSwgZGdzdCwKLSsJCQkJCU1zZywgTXNnbGVuLCBT LCBTbGVuLCBTYWx0bGVuKSkKLSsJCQkJZ290byBlcnJvcjsKLSsJCQlPUEVOU1NMX2ZyZWUoTXNn KTsKLSsJCQlNc2cgPSBOVUxMOwotKwkJCU9QRU5TU0xfZnJlZShTKTsKLSsJCQlTID0gTlVMTDsK LSsJCQl9Ci0rCi0rCQl9Ci0rCi0rCi0rCXJldCA9IDE7Ci0rCi0rCi0rCWVycm9yOgotKwotKwlp ZiAob2xpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUob2xpbmVidWYpOwotKwlpZiAobGluZWJ1ZikK LSsJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKLSsJaWYgKG4pCi0rCQlCTl9mcmVlKG4pOwotKwlp ZiAoZSkKLSsJCUJOX2ZyZWUoZSk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9y OgotKwotKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGlu ZSAlZFxuIiwgbG51bSk7Ci0rCi0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50 IHJzYV9wcmludHZlcihGSUxFICpvdXQsCi0rCQlCSUdOVU0gKm4sIEJJR05VTSAqZSwKLSsJCWNv bnN0IEVWUF9NRCAqZGdzdCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBNc2dsZW4sCi0r CQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKQotKwl7Ci0rCWludCBy ZXQgPSAwLCByOwotKwkvKiBTZXR1cCBSU0EgYW5kIEVWUF9QS0VZIHN0cnVjdHVyZXMgKi8KLSsJ UlNBICpyc2FfcHVia2V5ID0gTlVMTDsKLSsJRVZQX1BLRVkgcGs7Ci0rCUVWUF9NRF9DVFggY3R4 OwotKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwotKwlyc2FfcHVia2V5ID0gRklQU19yc2Ff bmV3KCk7Ci0rCWlmICghcnNhX3B1YmtleSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXJzYV9wdWJrZXkt Pm4gPSBCTl9kdXAobik7Ci0rCXJzYV9wdWJrZXktPmUgPSBCTl9kdXAoZSk7Ci0rCWlmICghcnNh X3B1YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ZSkKLSsJCWdvdG8gZXJyb3I7Ci0rCXBrLnR5cGUg PSBFVlBfUEtFWV9SU0E7Ci0rCXBrLnBrZXkucnNhID0gcnNhX3B1YmtleTsKLSsKLSsJRVZQX01E X0NUWF9pbml0KCZjdHgpOwotKwotKwlpZiAoU2FsdGxlbiA+PSAwKQotKwkJewotKwkJTV9FVlBf TURfQ1RYX3NldF9mbGFncygmY3R4LAotKwkJCUVWUF9NRF9DVFhfRkxBR19QQURfUFNTIHwgKFNh bHRsZW4gPDwgMTYpKTsKLSsJCX0KLSsJZWxzZSBpZiAoU2FsdGxlbiA9PSAtMikKLSsJCU1fRVZQ X01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKTsKLSsJaWYg KCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBkZ3N0LCBOVUxMKSkKLSsJCWdvdG8gZXJyb3I7Ci0r CWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikpCi0rCQlnb3RvIGVycm9y OwotKwotKwlyID0gRVZQX1ZlcmlmeUZpbmFsKCZjdHgsIFMsIFNsZW4sICZwayk7Ci0rCi0rCi0r CUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKLSsKLSsJaWYgKHIgPCAwKQotKwkJZ290byBlcnJv cjsKLSsJRVJSX2NsZWFyX2Vycm9yKCk7Ci0rCi0rCWlmIChyID09IDApCi0rCQlmcHV0cygiUmVz dWx0ID0gRlxuIiwgb3V0KTsKLSsJZWxzZQotKwkJZnB1dHMoIlJlc3VsdCA9IFBcbiIsIG91dCk7 Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCWVycm9yOgotKwlpZiAocnNhX3B1YmtleSkKLSsJCUZJUFNf cnNhX2ZyZWUocnNhX3B1YmtleSk7Ci0rCWlmIChidWYpCi0rCQlPUEVOU1NMX2ZyZWUoYnVmKTsK LSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYwotLS0tIC9kZXYv bnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3NoYXRlc3QuYwkyMDA5LTExLTEyIDEyOjM2 OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwzODggQEAKLSsvKiBmaXBzX3NoYXRlc3Qu YyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5v cmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QgMjAwNS4KLSsgKi8KLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFy ZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoK LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5n QE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNT TCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBl cm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0 aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsg KiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycn IEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsg KiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO Q0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH RVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQg T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RS SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF KQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu Ci0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9n cmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0 LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsg KiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxz dGRpby5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9iaW8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL3g1MDl2My5oPgotKwotKyNpZm5kZWYgT1BFTlNTTF9GSVBTCi0rCi0raW50IG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHByaW50ZigiTm8gRklQUyBTSEFYWFgg c3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsKLSsjaW5jbHVk ZSAiZmlwc191dGwuaCIKLSsKLStzdGF0aWMgaW50IGRnc3RfdGVzdChGSUxFICpvdXQsIEZJTEUg KmluKTsKLStzdGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0 LAotKwkJdW5zaWduZWQgY2hhciAqTXNnLCBpbnQgTXNnbGVuKTsKLStzdGF0aWMgaW50IHByaW50 X21vbnRlKGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKlNl ZWQsIGludCBTZWVkTGVuKTsKLSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0r CXsKLSsJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKLSsKLSsJaW50IHJldCA9IDE7Ci0r Ci0rCWlmKCFGSVBTX21vZGVfc2V0KDEpKQotKwkJewotKwkJZG9fcHJpbnRfZXJyb3JzKCk7Ci0r CQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKGFyZ2MgPT0gMSkKLSsJCWluID0gc3RkaW47Ci0r CWVsc2UKLSsJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLSsKLSsJaWYgKGFyZ2MgPCAyKQot KwkJb3V0ID0gc3Rkb3V0OwotKwllbHNlCi0rCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOwot KwotKwlpZiAoIWluKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0 aWFsaXphdGlvbiBlcnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFvdXQp Ci0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBl cnJvclxuIik7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsKLSsJaWYgKCFkZ3N0X3Rlc3Qob3V0LCBp bikpCi0rCQl7Ci0rCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGRpZ2VzdCBmaWxlIHByb2Nlc3Np bmcgZXJyb3JcbiIpOwotKwkJZ290byBlbmQ7Ci0rCQl9Ci0rCWVsc2UKLSsJCXJldCA9IDA7Ci0r Ci0rCWVuZDoKLSsKLSsJaWYgKHJldCkKLSsJCWRvX3ByaW50X2Vycm9ycygpOwotKwotKwlpZiAo aW4gJiYgKGluICE9IHN0ZGluKSkKLSsJCWZjbG9zZShpbik7Ci0rCWlmIChvdXQgJiYgKG91dCAh PSBzdGRvdXQpKQotKwkJZmNsb3NlKG91dCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCX0KLSsK LSsjZGVmaW5lIFNIQV9URVNUX01BWF9CSVRTCTEwMjQwMAotKyNkZWZpbmUgU0hBX1RFU1RfTUFY TElORUxFTgkoKChTSEFfVEVTVF9NQVhfQklUUyA+PiAzKSAqIDIpICsgMTAwKQotKwotK2ludCBk Z3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbikKLSsJewotKwljb25zdCBFVlBfTUQgKm1kID0g TlVMTDsKLSsJY2hhciAqbGluZWJ1ZiwgKm9saW5lYnVmLCAqcCwgKnE7Ci0rCWNoYXIgKmtleXdv cmQsICp2YWx1ZTsKLSsJdW5zaWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlNlZWQgPSBOVUxMOwot Kwlsb25nIE1zZ0xlbiA9IC0xLCBMZW4gPSAtMSwgU2VlZExlbiA9IC0xOwotKwlpbnQgcmV0ID0g MDsKLSsJaW50IGxudW0gPSAwOwotKwotKwlvbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9U RVNUX01BWExJTkVMRU4pOwotKwlsaW5lYnVmID0gT1BFTlNTTF9tYWxsb2MoU0hBX1RFU1RfTUFY TElORUxFTik7Ci0rCi0rCWlmICghbGluZWJ1ZiB8fCAhb2xpbmVidWYpCi0rCQlnb3RvIGVycm9y OwotKwotKwotKwl3aGlsZSAoZmdldHMob2xpbmVidWYsIFNIQV9URVNUX01BWExJTkVMRU4sIGlu KSkKLSsJCXsKLSsJCWxudW0rKzsKLSsJCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7Ci0rCQlr ZXl3b3JkID0gbGluZWJ1ZjsKLSsJCS8qIFNraXAgbGVhZGluZyBzcGFjZSAqLwotKwkJd2hpbGUg KGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJCWtleXdvcmQrKzsKLSsKLSsJ CS8qIExvb2sgZm9yID0gc2lnbiAqLwotKwkJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwot KwkJLyogSWYgbm8gPSBvciBzdGFydHMgd2l0aCBbIChmb3IgW0w9MjBdIGxpbmUpIGp1c3QgY29w eSAqLwotKwkJaWYgKCFwKQotKwkJCXsKLSsJCQlmcHV0cyhvbGluZWJ1Ziwgb3V0KTsKLSsJCQlj b250aW51ZTsKLSsJCQl9Ci0rCi0rCQlxID0gcCAtIDE7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxp bmcgc3BhY2UgKi8KLSsJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpxKSkKLSsJCQkq cS0tID0gMDsKLSsKLSsJCSpwID0gMDsKLSsJCXZhbHVlID0gcCArIDE7Ci0rCi0rCQkvKiBSZW1v dmUgbGVhZGluZyBzcGFjZSBmcm9tIHZhbHVlICovCi0rCQl3aGlsZSAoaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqdmFsdWUpKQotKwkJCXZhbHVlKys7Ci0rCi0rCQkvKiBSZW1vdmUgdHJhaWxpbmcg c3BhY2UgZnJvbSB2YWx1ZSAqLwotKwkJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7Ci0r CQl3aGlsZSAoKnAgPT0gJ1xuJyB8fCBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwKSkKLSsJCQkq cC0tID0gMDsKLSsKLSsJCWlmICghc3RyY21wKGtleXdvcmQsIltMIikgJiYgKnA9PSddJykKLSsJ CQl7Ci0rCQkJc3dpdGNoIChhdG9pKHZhbHVlKSkKLSsJCQkJewotKwkJCQljYXNlIDIwOiBtZD1F VlBfc2hhMSgpOyAgIGJyZWFrOwotKwkJCQljYXNlIDI4OiBtZD1FVlBfc2hhMjI0KCk7IGJyZWFr OwotKwkJCQljYXNlIDMyOiBtZD1FVlBfc2hhMjU2KCk7IGJyZWFrOwotKwkJCQljYXNlIDQ4OiBt ZD1FVlBfc2hhMzg0KCk7IGJyZWFrOwotKwkJCQljYXNlIDY0OiBtZD1FVlBfc2hhNTEyKCk7IGJy ZWFrOwotKwkJCQlkZWZhdWx0OiBnb3RvIHBhcnNlX2Vycm9yOwotKwkJCQl9Ci0rCQkJfQotKwkJ ZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTGVuIikpCi0rCQkJewotKwkJCWlmIChMZW4gIT0g LTEpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJTGVuID0gYXRvaSh2YWx1ZSk7Ci0rCQkJ aWYgKExlbiA8IDApCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJLyogT25seSBoYW5kbGUg bXVsdGlwbGVzIG9mIDggYml0cyAqLwotKwkJCWlmIChMZW4gJiAweDcpCi0rCQkJCWdvdG8gcGFy c2VfZXJyb3I7Ci0rCQkJaWYgKExlbiA+IFNIQV9URVNUX01BWF9CSVRTKQotKwkJCQlnb3RvIHBh cnNlX2Vycm9yOwotKwkJCU1zZ0xlbiA9IExlbiA+PiAzOwotKwkJCX0KLSsKLSsJCWVsc2UgaWYg KCFzdHJjbXAoa2V5d29yZCwgIk1zZyIpKQotKwkJCXsKLSsJCQlsb25nIHRtcGxlbjsKLSsJCQlp ZiAoc3RybGVuKHZhbHVlKSAmIDEpCi0rCQkJCSooLS12YWx1ZSkgPSAnMCc7Ci0rCQkJaWYgKE1z ZykKLSsJCQkJZ290byBwYXJzZV9lcnJvcjsKLSsJCQlNc2cgPSBoZXgyYmluX20odmFsdWUsICZ0 bXBsZW4pOwotKwkJCWlmICghTXNnKQotKwkJCQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCX0KLSsJ CWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgIlNlZWQiKSkKLSsJCQl7Ci0rCQkJaWYgKHN0cmxl bih2YWx1ZSkgJiAxKQotKwkJCQkqKC0tdmFsdWUpID0gJzAnOwotKwkJCWlmIChTZWVkKQotKwkJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwkJCVNlZWQgPSBoZXgyYmluX20odmFsdWUsICZTZWVkTGVu KTsKLSsJCQlpZiAoIVNlZWQpCi0rCQkJCWdvdG8gcGFyc2VfZXJyb3I7Ci0rCQkJfQotKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTUQiKSkKLSsJCQljb250aW51ZTsKLSsJCWVsc2UKLSsJ CQlnb3RvIHBhcnNlX2Vycm9yOwotKwotKwkJZnB1dHMob2xpbmVidWYsIG91dCk7Ci0rCi0rCQlp ZiAobWQgJiYgTXNnICYmIChNc2dMZW4gPj0gMCkpCi0rCQkJewotKwkJCWlmICghcHJpbnRfZGdz dChtZCwgb3V0LCBNc2csIE1zZ0xlbikpCi0rCQkJCWdvdG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9m cmVlKE1zZyk7Ci0rCQkJTXNnID0gTlVMTDsKLSsJCQlNc2dMZW4gPSAtMTsKLSsJCQlMZW4gPSAt MTsKLSsJCQl9Ci0rCQllbHNlIGlmIChtZCAmJiBTZWVkICYmIChTZWVkTGVuID4gMCkpCi0rCQkJ ewotKwkJCWlmICghcHJpbnRfbW9udGUobWQsIG91dCwgU2VlZCwgU2VlZExlbikpCi0rCQkJCWdv dG8gZXJyb3I7Ci0rCQkJT1BFTlNTTF9mcmVlKFNlZWQpOwotKwkJCVNlZWQgPSBOVUxMOwotKwkJ CVNlZWRMZW4gPSAtMTsKLSsJCQl9Ci0rCQotKwotKwkJfQotKwotKwotKwlyZXQgPSAxOwotKwot KwotKwllcnJvcjoKLSsKLSsJaWYgKG9saW5lYnVmKQotKwkJT1BFTlNTTF9mcmVlKG9saW5lYnVm KTsKLSsJaWYgKGxpbmVidWYpCi0rCQlPUEVOU1NMX2ZyZWUobGluZWJ1Zik7Ci0rCWlmIChNc2cp Ci0rCQlPUEVOU1NMX2ZyZWUoTXNnKTsKLSsJaWYgKFNlZWQpCi0rCQlPUEVOU1NMX2ZyZWUoU2Vl ZCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCi0rCXBhcnNlX2Vycm9yOgotKwotKwlmcHJpbnRmKHN0 ZGVyciwgIkZBVEFMIHBhcnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7Ci0r Ci0rCWdvdG8gZXJyb3I7Ci0rCi0rCX0KLSsKLStzdGF0aWMgaW50IHByaW50X2Rnc3QoY29uc3Qg RVZQX01EICplbWQsIEZJTEUgKm91dCwKLSsJCXVuc2lnbmVkIGNoYXIgKk1zZywgaW50IE1zZ2xl bikKLSsJewotKwlpbnQgaSwgbWRsZW47Ci0rCXVuc2lnbmVkIGNoYXIgbWRbRVZQX01BWF9NRF9T SVpFXTsKLSsJaWYgKCFFVlBfRGlnZXN0KE1zZywgTXNnbGVuLCBtZCwgKHVuc2lnbmVkIGludCAq KSZtZGxlbiwgZW1kLCBOVUxMKSkKLSsJCXsKLSsJCWZwdXRzKCJFcnJvciBjYWxjdWxhdGluZyBI QVNIXG4iLCBzdGRlcnIpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCWZwdXRzKCJNRCA9ICIsIG91 dCk7Ci0rCWZvciAoaSA9IDA7IGkgPCBtZGxlbjsgaSsrKQotKwkJZnByaW50ZihvdXQsICIlMDJ4 IiwgbWRbaV0pOwotKwlmcHV0cygiXG4iLCBvdXQpOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK3N0 YXRpYyBpbnQgcHJpbnRfbW9udGUoY29uc3QgRVZQX01EICptZCwgRklMRSAqb3V0LAotKwkJdW5z aWduZWQgY2hhciAqU2VlZCwgaW50IFNlZWRMZW4pCi0rCXsKLSsJdW5zaWduZWQgaW50IGksIGos IGs7Ci0rCWludCByZXQgPSAwOwotKwlFVlBfTURfQ1RYIGN0eDsKLSsJdW5zaWduZWQgY2hhciAq bTEsICptMiwgKm0zLCAqcDsKLSsJdW5zaWduZWQgaW50IG1sZW4sIG0xbGVuLCBtMmxlbiwgbTNs ZW47Ci0rCi0rCUVWUF9NRF9DVFhfaW5pdCgmY3R4KTsKLSsKLSsJaWYgKFNlZWRMZW4gPiBFVlBf TUFYX01EX1NJWkUpCi0rCQltbGVuID0gU2VlZExlbjsKLSsJZWxzZQotKwkJbWxlbiA9IEVWUF9N QVhfTURfU0laRTsKLSsKLSsJbTEgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsJbTIgPSBPUEVO U1NMX21hbGxvYyhtbGVuKTsKLSsJbTMgPSBPUEVOU1NMX21hbGxvYyhtbGVuKTsKLSsKLSsJaWYg KCFtMSB8fCAhbTIgfHwgIW0zKQotKwkJZ290byBtY19lcnJvcjsKLSsKLSsJbTFsZW4gPSBtMmxl biA9IG0zbGVuID0gU2VlZExlbjsKLSsJbWVtY3B5KG0xLCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVt Y3B5KG0yLCBTZWVkLCBTZWVkTGVuKTsKLSsJbWVtY3B5KG0zLCBTZWVkLCBTZWVkTGVuKTsKLSsK LSsJZnB1dHMoIlxuIiwgb3V0KTsKLSsKLSsJZm9yIChqID0gMDsgaiA8IDEwMDsgaisrKQotKwkJ ewotKwkJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykKLSsJCQl7Ci0rCQkJRVZQX0RpZ2VzdElu aXRfZXgoJmN0eCwgbWQsIE5VTEwpOwotKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTEsIG0x bGVuKTsKLSsJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0yLCBtMmxlbik7Ci0rCQkJRVZQX0Rp Z2VzdFVwZGF0ZSgmY3R4LCBtMywgbTNsZW4pOwotKwkJCXAgPSBtMTsKLSsJCQltMSA9IG0yOwot KwkJCW0xbGVuID0gbTJsZW47Ci0rCQkJbTIgPSBtMzsKLSsJCQltMmxlbiA9IG0zbGVuOwotKwkJ CW0zID0gcDsKLSsJCQlFVlBfRGlnZXN0RmluYWxfZXgoJmN0eCwgbTMsICZtM2xlbik7Ci0rCQkJ fQotKwkJZnByaW50ZihvdXQsICJDT1VOVCA9ICVkXG4iLCBqKTsKLSsJCWZwdXRzKCJNRCA9ICIs IG91dCk7Ci0rCQlmb3IgKGsgPSAwOyBrIDwgbTNsZW47IGsrKykKLSsJCQlmcHJpbnRmKG91dCwg IiUwMngiLCBtM1trXSk7Ci0rCQlmcHV0cygiXG5cbiIsIG91dCk7Ci0rCQltZW1jcHkobTEsIG0z LCBtM2xlbik7Ci0rCQltZW1jcHkobTIsIG0zLCBtM2xlbik7Ci0rCQltMWxlbiA9IG0ybGVuID0g bTNsZW47Ci0rCQl9Ci0rCi0rCXJldCA9IDE7Ci0rCi0rCW1jX2Vycm9yOgotKwlpZiAobTEpCi0r CQlPUEVOU1NMX2ZyZWUobTEpOwotKwlpZiAobTIpCi0rCQlPUEVOU1NMX2ZyZWUobTIpOwotKwlp ZiAobTMpCi0rCQlPUEVOU1NMX2ZyZWUobTMpOwotKwotKwlFVlBfTURfQ1RYX2NsZWFudXAoJmN0 eCk7Ci0rCi0rCXJldHVybiByZXQ7Ci0rCX0KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVs bCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2NhdnMvZmlwc191dGwuaAotLS0tIC9k ZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oCTIwMDktMTEtMTIgMTI6MzY6 NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDM0MyBAQAotKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0r ICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoK LSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0r ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3Bl bnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAg IGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0r ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsg KgotKyAqLwotKwotK3ZvaWQgZG9fcHJpbnRfZXJyb3JzKHZvaWQpCi0rCXsKLSsJY29uc3QgY2hh ciAqZmlsZSwgKmRhdGE7Ci0rCWludCBsaW5lLCBmbGFnczsKLSsJdW5zaWduZWQgbG9uZyBsOwot Kwl3aGlsZSAoKGwgPSBFUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRh LCAmZmxhZ3MpKSkKLSsJCXsKLSsJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxm dW5jPSVkLHJlYXNvbj0lZCIKLSsJCQkJIjpmaWxlPSVzOmxpbmU9JWQ6JXNcbiIsCi0rCQkJbCwg RVJSX0dFVF9MSUIobCksIEVSUl9HRVRfRlVOQyhsKSwgRVJSX0dFVF9SRUFTT04obCksCi0rCQkJ ZmlsZSwgbGluZSwgZmxhZ3MgJiBFUlJfVFhUX1NUUklORyA/IGRhdGEgOiAiIik7Ci0rCQl9Ci0r CX0KLSsKLStpbnQgaGV4MmJpbihjb25zdCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQot KyAgICB7Ci0rICAgIGludCBuMSwgbjI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2g7Ci0rCi0rICAg IGZvciAobjE9MCxuMj0wIDsgaW5bbjFdICYmIGluW24xXSAhPSAnXG4nIDsgKQotKwl7IC8qIGZp cnN0IGJ5dGUgKi8KLSsJaWYgKChpbltuMV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCi0r CSAgICBjaCA9IGluW24xKytdIC0gJzAnOwotKwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYg KGluW24xXSA8PSAnRicpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICdBJyArIDEwOwotKwllbHNl IGlmICgoaW5bbjFdID49ICdhJykgJiYgKGluW24xXSA8PSAnZicpKQotKwkgICAgY2ggPSBpbltu MSsrXSAtICdhJyArIDEwOwotKwllbHNlCi0rCSAgICByZXR1cm4gLTE7Ci0rCWlmKCFpbltuMV0p Ci0rCSAgICB7Ci0rCSAgICBvdXRbbjIrK109Y2g7Ci0rCSAgICBicmVhazsKLSsJICAgIH0KLSsJ b3V0W24yXSA9IGNoIDw8IDQ7Ci0rCS8qIHNlY29uZCBieXRlICovCi0rCWlmICgoaW5bbjFdID49 ICcwJykgJiYgKGluW24xXSA8PSAnOScpKQotKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKLSsJ ZWxzZSBpZiAoKGluW24xXSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKLSsJICAgIGNoID0g aW5bbjErK10gLSAnQScgKyAxMDsKLSsJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltu MV0gPD0gJ2YnKSkKLSsJICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKLSsJZWxzZQotKwkg ICAgcmV0dXJuIC0xOwotKwlvdXRbbjIrK10gfD0gY2g7Ci0rCX0KLSsgICAgcmV0dXJuIG4yOwot KyAgICB9Ci0rCi0rdW5zaWduZWQgY2hhciAqaGV4MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25n ICpwbGVuKQotKwl7Ci0rCXVuc2lnbmVkIGNoYXIgKnA7Ci0rCXAgPSBPUEVOU1NMX21hbGxvYygo c3RybGVuKGluKSArIDEpLzIpOwotKwkqcGxlbiA9IGhleDJiaW4oaW4sIHApOwotKwlyZXR1cm4g cDsKLSsJfQotKwotK2ludCBkb19oZXgyYm4oQklHTlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQot Kwl7Ci0rCXVuc2lnbmVkIGNoYXIgKnA7Ci0rCWxvbmcgcGxlbjsKLSsJaW50IHIgPSAwOwotKwlw ID0gaGV4MmJpbl9tKGluLCAmcGxlbik7Ci0rCWlmICghcCkKLSsJCXJldHVybiAwOwotKwlpZiAo ISpwcikKLSsJCSpwciA9IEJOX25ldygpOwotKwlpZiAoISpwcikKLSsJCXJldHVybiAwOwotKwlp ZiAoQk5fYmluMmJuKHAsIHBsZW4sICpwcikpCi0rCQlyID0gMTsKLSsJT1BFTlNTTF9mcmVlKHAp OwotKwlyZXR1cm4gcjsKLSsJfQotKwotK2ludCBkb19ibl9wcmludChGSUxFICpvdXQsIEJJR05V TSAqYm4pCi0rCXsKLSsJaW50IGxlbiwgaTsKLSsJdW5zaWduZWQgY2hhciAqdG1wOwotKwlsZW4g PSBCTl9udW1fYnl0ZXMoYm4pOwotKwlpZiAobGVuID09IDApCi0rCQl7Ci0rCQlmcHV0cygiMDAi LCBvdXQpOwotKwkJcmV0dXJuIDE7Ci0rCQl9Ci0rCi0rCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxl bik7Ci0rCWlmICghdG1wKQotKwkJewotKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2Nh dGlvbiBlcnJvclxuIik7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJQk5fYm4yYmluKGJuLCB0bXAp OwotKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0rCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0 bXBbaV0pOwotKwlPUEVOU1NMX2ZyZWUodG1wKTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQg ZG9fYm5fcHJpbnRfbmFtZShGSUxFICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4p Ci0rCXsKLSsJaW50IHI7Ci0rCWZwcmludGYob3V0LCAiJXMgPSAiLCBuYW1lKTsKLSsJciA9IGRv X2JuX3ByaW50KG91dCwgYm4pOwotKwlpZiAoIXIpCi0rCQlyZXR1cm4gMDsKLSsJZnB1dHMoIlxu Iiwgb3V0KTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3 LCBjaGFyICoqcHZhbCwgY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCi0rCXsKLSsJY2hh ciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7 Ci0rCWtleXdvcmQgPSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KLSsJd2hp bGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQotKwkJa2V5d29yZCsrOwotKwot KwkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOwotKwot KwkvKiBJZiBubyAnPScgZXhpdCAqLwotKwlpZiAoIXApCi0rCQlyZXR1cm4gMDsKLSsKLSsJcSA9 IHAgLSAxOwotKwotKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3Bh Y2UoKHVuc2lnbmVkIGNoYXIpKnEpKQotKwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFs dWUgPSBwICsgMTsKLSsKLSsJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwot Kwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsK LSsJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsg c3RybGVuKHZhbHVlKSAtIDE7Ci0rCi0rCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKnApKQotKwkJKnAtLSA9IDA7Ci0rCi0rCSpwa3cgPSBrZXl3b3JkOwotKwkq cHZhbCA9IHZhbHVlOwotKwlyZXR1cm4gMTsKLSsJfQotKwotK0JJR05VTSAqaGV4MmJuKGNvbnN0 IGNoYXIgKmluKQotKyAgICB7Ci0rICAgIEJJR05VTSAqcD1OVUxMOwotKwotKyAgICBpZiAoIWRv X2hleDJibigmcCwgaW4pKQotKwlyZXR1cm4gTlVMTDsKLSsKLSsgICAgcmV0dXJuIHA7Ci0rICAg IH0KLSsKLStpbnQgYmluMmhleChjb25zdCB1bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIg Km91dCkKLSsgICAgewotKyAgICBpbnQgbjEsIG4yOwotKyAgICB1bnNpZ25lZCBjaGFyIGNoOwot KwotKyAgICBmb3IgKG4xPTAsbjI9MCA7IG4xIDwgbGVuIDsgKytuMSkKLSsJewotKwljaD1pbltu MV0gPj4gNDsKLSsJaWYgKGNoIDw9IDB4MDkpCi0rCSAgICBvdXRbbjIrK109Y2grJzAnOwotKwll bHNlCi0rCSAgICBvdXRbbjIrK109Y2gtMTArJ2EnOwotKwljaD1pbltuMV0gJiAweDBmOwotKwlp ZihjaCA8PSAweDA5KQotKwkgICAgb3V0W24yKytdPWNoKycwJzsKLSsJZWxzZQotKwkgICAgb3V0 W24yKytdPWNoLTEwKydhJzsKLSsJfQotKyAgICBvdXRbbjJdPSdcMCc7Ci0rICAgIHJldHVybiBu MjsKLSsgICAgfQotKwotK3ZvaWQgcHYoY29uc3QgY2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNo YXIgKnZhbCxpbnQgbGVuKQotKyAgICB7Ci0rICAgIGNoYXIgb2J1ZlsyMDQ4XTsKLSsKLSsgICAg YmluMmhleCh2YWwsbGVuLG9idWYpOwotKyAgICBwcmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYp OwotKyAgICB9Ci0rCi0rLyogVG8gYXZvaWQgZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9n cmFtIGF0IHRoaXMgc3RhZ2UganVzdCBjb252ZXJ0Ci0rICogdGhlIGlucHV0IGxpbmUgaW50byBh biBhY2NlcHRhYmxlIGZvcm0uIEtleXdvcmQgbGluZXMgY29udmVydGVkIHRvIGZvcm0KLSsgKiAi a2V5d29yZCA9IHZhbHVlXG4iIG5vIG1hdHRlciB3aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFs bCBvdGhlciBsaW5lcwotKyAqIGp1c3QgaGF2ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSBy ZW1vdmVkLgotKyAqLwotKwotK2ludCB0aWR5X2xpbmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xp bmVidWYpCi0rCXsKLSsJY2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7Ci0rCXN0cmNweShs aW5lYnVmLCBvbGluZWJ1Zik7Ci0rCWtleXdvcmQgPSBsaW5lYnVmOwotKwkvKiBTa2lwIGxlYWRp bmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQot KwkJa2V5d29yZCsrOwotKwkvKiBMb29rIGZvciA9IHNpZ24gKi8KLSsJcCA9IHN0cmNocihsaW5l YnVmLCAnPScpOwotKwotKwkvKiBJZiBubyAnPScganVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5n IHdzICovCi0rCWlmICghcCkKLSsJCXsKLSsJCXAgPSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQp IC0gMTsKLSsJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnAp KQotKwkJCSpwLS0gPSAwOwotKwkJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKLSsJCXN0cmNh dChvbGluZWJ1ZiwgIlxuIik7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsKLSsJcSA9IHAgLSAxOwot KwotKwkvKiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KLSsJd2hpbGUgKGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKnEpKQotKwkJKnEtLSA9IDA7Ci0rCi0rCSpwID0gMDsKLSsJdmFsdWUgPSBwICsg MTsKLSsKLSsJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLwotKwl3aGlsZSAo aXNzcGFjZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQotKwkJdmFsdWUrKzsKLSsKLSsJLyogUmVt b3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KLSsJcCA9IHZhbHVlICsgc3RybGVuKHZh bHVlKSAtIDE7Ci0rCi0rCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnApKQotKwkJKnAtLSA9IDA7Ci0rCi0rCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7Ci0r CXN0cmNhdChvbGluZWJ1ZiwgIiA9ICIpOwotKwlzdHJjYXQob2xpbmVidWYsIHZhbHVlKTsKLSsJ c3RyY2F0KG9saW5lYnVmLCAiXG4iKTsKLSsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLSsvKiBOQjog dGhpcyByZXR1cm4gdGhlIG51bWJlciBvZiBfYml0c18gcmVhZCAqLwotK2ludCBiaW50MmJpbihj b25zdCBjaGFyICppbiwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqb3V0KQotKyAgICB7Ci0rICAg IGludCBuOwotKwotKyAgICBtZW1zZXQob3V0LDAsbGVuKTsKLSsgICAgZm9yKG49MCA7IG4gPCBs ZW4gOyArK24pCi0rCWlmKGluW25dID09ICcxJykKLSsJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAo biU4KSk7Ci0rICAgIHJldHVybiBsZW47Ci0rICAgIH0KLSsKLStpbnQgYmluMmJpbnQoY29uc3Qg dW5zaWduZWQgY2hhciAqaW4saW50IGxlbixjaGFyICpvdXQpCi0rICAgIHsKLSsgICAgaW50IG47 Ci0rCi0rICAgIGZvcihuPTAgOyBuIDwgbGVuIDsgKytuKQotKwlvdXRbbl09KGluW24vOF0mKDB4 ODAgPj4gKG4lOCkpKSA/ICcxJyA6ICcwJzsKLSsgICAgcmV0dXJuIG47Ci0rICAgIH0KLSsKLSsv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSsKLSt2 b2lkIFByaW50VmFsdWUoY2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCi0r ewotKyNpZiBWRVJCT1NFCi0rICBjaGFyIG9idWZbMjA0OF07Ci0rICBpbnQgb2xlbjsKLSsgIG9s ZW4gPSBiaW4yaGV4KHZhbCwgbGVuLCBvYnVmKTsKLSsgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0 YWcsIG9sZW4sIG9idWYpOwotKyNlbmRpZgotK30KLSsKLSt2b2lkIE91dHB1dFZhbHVlKGNoYXIg KnRhZywgdW5zaWduZWQgY2hhciAqdmFsLCBpbnQgbGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUp Ci0rICAgIHsKLSsgICAgY2hhciBvYnVmWzIwNDhdOwotKyAgICBpbnQgb2xlbjsKLSsKLSsgICAg aWYoYml0bW9kZSkKLSsJb2xlbj1iaW4yYmludCh2YWwsbGVuLG9idWYpOwotKyAgICBlbHNlCi0r CW9sZW49YmluMmhleCh2YWwsbGVuLG9idWYpOwotKwotKyAgICBmcHJpbnRmKHJmcCwgIiVzID0g JS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsjaWYgVkVSQk9TRQotKyAgICBwcmludGYoIiVz ID0gJS4qc1xuIiwgdGFnLCBvbGVuLCBvYnVmKTsKLSsjZW5kaWYKLSsgICAgfQotKwotZGlmZiAt dXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHNfZXJyLmMKLS0tLSAv ZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9maXBzX2Vyci5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAw MDAwICswMTAwCi1AQCAtMCwwICsxLDcgQEAKLSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29u Zi5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1ZGUgImZpcHNfZXJyLmgiCi0r I2Vsc2UKLStzdGF0aWMgdm9pZCAqZHVtbXk9JmR1bW15OwotKyNlbmRpZgotZGlmZiAtdXAgL2Rl di9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHNfZXJyLmgKLS0tLSAvZGV2L251 bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9maXBzX2Vyci5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICsw MTAwCi1AQCAtMCwwICsxLDEzNyBAQAotKy8qIGNyeXB0by9maXBzX2Vyci5oICovCi0rLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBUaGUgT3BlblNTTCBQcm9qZWN0 LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsg KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRp b24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVh dHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZv bGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0r ICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBt dXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBl cm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAg b3BlbnNzbC1jb3JlQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki Ci0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNs dWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChl YXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRl biBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwot Ky8qIE5PVEU6IHRoaXMgZmlsZSB3YXMgYXV0byBnZW5lcmF0ZWQgYnkgdGhlIG1rZXJyLnBsIHNj cmlwdDogYW55IGNoYW5nZXMKLSsgKiBtYWRlIHRvIGl0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2hl biB0aGUgc2NyaXB0IG5leHQgdXBkYXRlcyB0aGlzIGZpbGUsCi0rICogb25seSByZWFzb24gc3Ry aW5ncyB3aWxsIGJlIHByZXNlcnZlZC4KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rCi0r LyogQkVHSU4gRVJST1IgQ09ERVMgKi8KLSsjaWZuZGVmIE9QRU5TU0xfTk9fRVJSCi0rCi0rI2Rl ZmluZSBFUlJfRlVOQyhmdW5jKSBFUlJfUEFDSyhFUlJfTElCX0ZJUFMsZnVuYywwKQotKyNkZWZp bmUgRVJSX1JFQVNPTihyZWFzb24pIEVSUl9QQUNLKEVSUl9MSUJfRklQUywwLHJlYXNvbikKLSsK LStzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJUFNfc3RyX2Z1bmN0c1tdPQotKwl7Ci0re0VSUl9G VU5DKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyksCSJESF9CVUlMVElOX0dFTlBBUkFNUyJ9 LAotK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4pLAkiRFNBX0JVSUxUSU5f UEFSQU1HRU4ifSwKLSt7RVJSX0ZVTkMoRklQU19GX0RTQV9ET19TSUdOKSwJIkRTQV9kb19zaWdu In0sCi0re0VSUl9GVU5DKEZJUFNfRl9EU0FfRE9fVkVSSUZZKSwJIkRTQV9kb192ZXJpZnkifSwK LSt7RVJSX0ZVTkMoRklQU19GX0VWUF9DSVBIRVJJTklUX0VYKSwJIkVWUF9DaXBoZXJJbml0X2V4 In0sCi0re0VSUl9GVU5DKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCksCSJFVlBfRGlnZXN0SW5p dF9leCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19DSEVDS19EU0EpLAkiRklQU19DSEVDS19E U0EifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UKSwJ IkZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UIn0sCi0re0VSUl9GVU5DKEZJUFNfRl9GSVBT X0NIRUNLX1JTQSksCSJGSVBTX0NIRUNLX1JTQSJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19E U0FfQ0hFQ0spLAkiRklQU19EU0FfQ0hFQ0sifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfTU9E RV9TRVQpLAkiRklQU19tb2RlX3NldCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19QS0VZX1NJ R05BVFVSRV9URVNUKSwJImZpcHNfcGtleV9zaWduYXR1cmVfdGVzdCJ9LAotK3tFUlJfRlVOQyhG SVBTX0ZfRklQU19TRUxGVEVTVF9BRVMpLAkiRklQU19zZWxmdGVzdF9hZXMifSwKLSt7RVJSX0ZV TkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTKSwJIkZJUFNfc2VsZnRlc3RfZGVzIn0sCi0re0VS Ul9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQSksCSJGSVBTX3NlbGZ0ZXN0X2RzYSJ9LAot K3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDKSwJIkZJUFNfc2VsZnRlc3RfaG1h YyJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcpLAkiRklQU19zZWxmdGVz dF9ybmcifSwKLSt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSksCSJGSVBTX3Nl bGZ0ZXN0X3NoYTEifSwKLSt7RVJSX0ZVTkMoRklQU19GX0hBU0hfRklOQUwpLAkiSEFTSF9GSU5B TCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOKSwJIlJTQV9CVUlMVElO X0tFWUdFTiJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQpLAki UlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQifSwKLSt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFJJ VkFURV9FTkNSWVBUKSwJIlJTQV9FQVlfUFJJVkFURV9FTkNSWVBUIn0sCi0re0VSUl9GVU5DKEZJ UFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUKSwJIlJTQV9FQVlfUFVCTElDX0RFQ1JZUFQifSwK LSt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQpLAkiUlNBX0VBWV9QVUJM SUNfRU5DUllQVCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VY KSwJIlJTQV9YOTMxX2dlbmVyYXRlX2tleV9leCJ9LAotK3tFUlJfRlVOQyhGSVBTX0ZfU1NMRUFZ X1JBTkRfQllURVMpLAkiU1NMRUFZX1JBTkRfQllURVMifSwKLSt7MCxOVUxMfQotKwl9OwotKwot K3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRklQU19zdHJfcmVhc29uc1tdPQotKwl7Ci0re0VSUl9S RUFTT04oRklQU19SX0NBTk5PVF9SRUFEX0VYRSkgICAgICAsImNhbm5vdCByZWFkIGV4ZSJ9LAot K3tFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNUKSwiY2Fubm90IHJlYWQg ZXhlIGRpZ2VzdCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9DT05UUkFESUNUSU5HX0VWSURFTkNF KSwiY29udHJhZGljdGluZyBldmlkZW5jZSJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9FWEVfRElH RVNUX0RPRVNfTk9UX01BVENIKSwiZXhlIGRpZ2VzdCBkb2VzIG5vdCBtYXRjaCJ9LAotK3tFUlJf UkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCksImZpbmdlcnByaW50IGRv ZXMgbm90IG1hdGNoIn0sCi0re0VSUl9SRUFTT04oRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9U X01BVENIX05PTlBJQ19SRUxPQ0FURUQpLCJmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCBub25w aWMgcmVsb2NhdGVkIn0sCi0re0VSUl9SRUFTT04oRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9U X01BVENIX1NFR01FTlRfQUxJQVNJTkcpLCJmaW5nZXJwcmludCBkb2VzIG5vdCBtYXRjaCBzZWdt ZW50IGFsaWFzaW5nIn0sCi0re0VSUl9SRUFTT04oRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NF VCksImZpcHMgbW9kZSBhbHJlYWR5IHNldCJ9LAotK3tFUlJfUkVBU09OKEZJUFNfUl9GSVBTX1NF TEZURVNUX0ZBSUxFRCkgLCJmaXBzIHNlbGZ0ZXN0IGZhaWxlZCJ9LAotK3tFUlJfUkVBU09OKEZJ UFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpICAgLCJpbnZhbGlkIGtleSBsZW5ndGgifSwKLSt7RVJS X1JFQVNPTihGSVBTX1JfS0VZX1RPT19TSE9SVCkgICAgICAgICwia2V5IHRvbyBzaG9ydCJ9LAot K3tFUlJfUkVBU09OKEZJUFNfUl9OT05fRklQU19NRVRIT0QpICAgICAgLCJub24gZmlwcyBtZXRo b2QifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpICwicGFpcndp c2UgdGVzdCBmYWlsZWQifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1Ip ICAgICwicnNhIGRlY3J5cHQgZXJyb3IifSwKLSt7RVJSX1JFQVNPTihGSVBTX1JfUlNBX0VOQ1JZ UFRfRVJST1IpICAgICwicnNhIGVuY3J5cHQgZXJyb3IifSwKLSt7RVJSX1JFQVNPTihGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKSAgICAgICwic2VsZnRlc3QgZmFpbGVkIn0sCi0re0VSUl9SRUFTT04o RklQU19SX1RFU1RfRkFJTFVSRSkgICAgICAgICAsInRlc3QgZmFpbHVyZSJ9LAotK3tFUlJfUkVB U09OKEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STSkgLCJ1bnN1cHBvcnRlZCBwbGF0Zm9ybSJ9 LAotK3swLE5VTEx9Ci0rCX07Ci0rCi0rI2VuZGlmCi0rCi0rdm9pZCBFUlJfbG9hZF9GSVBTX3N0 cmluZ3Modm9pZCkKLSsJewotKyNpZm5kZWYgT1BFTlNTTF9OT19FUlIKLSsKLSsJaWYgKEVSUl9m dW5jX2Vycm9yX3N0cmluZyhGSVBTX3N0cl9mdW5jdHNbMF0uZXJyb3IpID09IE5VTEwpCi0rCQl7 Ci0rCQlFUlJfbG9hZF9zdHJpbmdzKDAsRklQU19zdHJfZnVuY3RzKTsKLSsJCUVSUl9sb2FkX3N0 cmluZ3MoMCxGSVBTX3N0cl9yZWFzb25zKTsKLSsJCX0KLSsjZW5kaWYKLSsJfQotZGlmZiAtdXAg L2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRl c3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAot KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYwky MDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSwxMDEgQEAKLSsv 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 U1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStzdGF0aWMgc3RydWN0 Ci0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOwotKyAgICB1bnNpZ25lZCBjaGFy IHBsYWludGV4dFsxNl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFsxNl07Ci0rICAg IH0gdGVzdHNbXT0KLSsJewotKwl7Ci0rCXsgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUs MHgwNiwweDA3LAotKwkgIDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELDB4MEUsMHgwRiB9 LAotKwl7IDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywKLSsJICAweDg4 LDB4OTksMHhBQSwweEJCLDB4Q0MsMHhERCwweEVFLDB4RkYgfSwKLSsJeyAweDY5LDB4QzQsMHhF MCwweEQ4LDB4NkEsMHg3QiwweDA0LDB4MzAsCi0rCSAgMHhEOCwweENELDB4QjcsMHg4MCwweDcw LDB4QjQsMHhDNSwweDVBIH0sCi0rCX0sCi0rCX07Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVz KCkKLSsgICAgewotKyAgICB0ZXN0c1swXS5rZXlbMF0rKzsKLSsgICAgfQotKwotK2ludCBGSVBT X3NlbGZ0ZXN0X2FlcygpCi0rICAgIHsKLSsgICAgaW50IG47Ci0rICAgIGludCByZXQgPSAwOwot KyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7 Ci0rCi0rICAgIGZvcihuPTAgOyBuIDwgMSA7ICsrbikKLSsJewotKwlpZiAoZmlwc19jaXBoZXJf dGVzdCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwKLSsJCQkJdGVzdHNbbl0ua2V5LCBOVUxMLAot KwkJCQl0ZXN0c1tuXS5wbGFpbnRleHQsCi0rCQkJCXRlc3RzW25dLmNpcGhlcnRleHQsCi0rCQkJ CTE2KSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCX0KLSsgICAgcmV0ID0gMTsKLSsgICAgZXJyOgot KyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwotKyAgICBpZiAocmV0ID09IDApCi0r CSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUyxGSVBTX1JfU0VMRlRFU1RfRkFJ TEVEKTsKLSsgICAgcmV0dXJuIHJldDsKLSsgICAgfQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9u dWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwcy5jCi0tLS0gL2Rldi9udWxs CTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vZmlwcy9maXBzLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAx MDAKLUBAIC0wLDAgKzEsNDE5IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMp IDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgot KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6 Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAot KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0r ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rCi0r I2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsj aW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPGxpbWl0cy5oPgotKyNpbmNsdWRlICJmaXBz X2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKwotKyNpZm5kZWYgUEFUSF9NQVgKLSsjZGVmaW5lIFBBVEhfTUFYIDEwMjQKLSsj ZW5kaWYKLSsKLStzdGF0aWMgaW50IGZpcHNfc2VsZnRlc3RfZmFpbDsKLStzdGF0aWMgaW50IGZp cHNfbW9kZTsKLStzdGF0aWMgY29uc3Qgdm9pZCAqZmlwc19yYW5kX2NoZWNrOwotKwotK3N0YXRp YyB2b2lkIGZpcHNfc2V0X21vZGUoaW50IG9ub2ZmKQotKwl7Ci0rCWludCBvd25pbmdfdGhyZWFk ID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkK LSsJCXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X2xvY2soKTsKLSsJCWZpcHNfbW9k ZSA9IG9ub2ZmOwotKwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3dfdW5sb2NrKCk7Ci0rCQl9 Ci0rCX0KLSsKLStzdGF0aWMgdm9pZCBmaXBzX3NldF9yYW5kX2NoZWNrKGNvbnN0IHZvaWQgKnJh bmRfY2hlY2spCi0rCXsKLSsJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJl YWQoKTsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJewotKwkJaWYgKCFvd25pbmdf dGhyZWFkKSBmaXBzX3dfbG9jaygpOwotKwkJZmlwc19yYW5kX2NoZWNrID0gcmFuZF9jaGVjazsK LSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X3VubG9jaygpOwotKwkJfQotKwl9Ci0rCi0r aW50IEZJUFNfbW9kZSh2b2lkKQotKwl7Ci0rCWludCByZXQgPSAwOwotKwlpbnQgb3duaW5nX3Ro cmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwotKwlpZiAoZmlwc19pc19zdGFydGVk KCkpCi0rCQl7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7Ci0rCQlyZXQg PSBmaXBzX21vZGU7Ci0rCQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKLSsJ CX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2NvbnN0IHZvaWQgKkZJUFNfcmFuZF9jaGVjayh2 b2lkKQotKwl7Ci0rCWNvbnN0IHZvaWQgKnJldCA9IDA7Ci0rCWludCBvd25pbmdfdGhyZWFkID0g Zmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJ CXsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX2xvY2soKTsKLSsJCXJldCA9IGZpcHNf cmFuZF9jaGVjazsKLSsJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOwotKwkJ fQotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQp Ci0rICAgIHsKLSsgICAgaW50IHJldCA9IDA7Ci0rICAgIGlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkK LSsJewotKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5nX3RocmVhZCgpOwotKwot KwlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7Ci0rCXJldCA9IGZpcHNfc2VsZnRl c3RfZmFpbDsKLSsJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7Ci0rCX0KLSsg ICAgcmV0dXJuIHJldDsKLSsgICAgfQotKwotKy8qIFNlbGZ0ZXN0IGZhaWx1cmUgZmF0YWwgZXhp dCByb3V0aW5lLiBUaGlzIHdpbGwgYmUgY2FsbGVkCi0rICogZHVyaW5nICphbnkqIGNyeXB0b2dy YXBoaWMgb3BlcmF0aW9uLiBJdCBoYXMgdGhlIG1pbmltdW0KLSsgKiBvdmVyaGVhZCBwb3NzaWJs ZSB0byBhdm9pZCB0b28gYmlnIGEgcGVyZm9ybWFuY2UgaGl0LgotKyAqLwotKwotK3ZvaWQgRklQ U19zZWxmdGVzdF9jaGVjayh2b2lkKQotKyAgICB7Ci0rICAgIGlmIChmaXBzX3NlbGZ0ZXN0X2Zh aWwpCi0rCXsKLSsJT3BlblNTTERpZShfX0ZJTEVfXyxfX0xJTkVfXywgIkZBVEFMIEZJUFMgU0VM RlRFU1QgRkFJTFVSRSIpOwotKwl9Ci0rICAgIH0KLSsKLSt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0 X2ZhaWwodm9pZCkKLSsgICAgewotKyAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKyAgICB9 Ci0rCi0raW50IEZJUFNfc2VsZnRlc3QoKQotKyAgICB7Ci0rCi0rICAgIHJldHVybiBGSVBTX3Nl bGZ0ZXN0X3NoYTEoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X2htYWMoKQotKwkmJiBGSVBTX3NlbGZ0 ZXN0X2FlcygpCi0rCSYmIEZJUFNfc2VsZnRlc3RfZGVzKCkKLSsJJiYgRklQU19zZWxmdGVzdF9y c2EoKQotKwkmJiBGSVBTX3NlbGZ0ZXN0X2RzYSgpOwotKyAgICB9Ci0rCi0raW50IEZJUFNfbW9k ZV9zZXQoaW50IG9ub2ZmKQotKyAgICB7Ci0rICAgIGludCBmaXBzX3NldF9vd25pbmdfdGhyZWFk KCk7Ci0rICAgIGludCBmaXBzX2NsZWFyX293bmluZ190aHJlYWQoKTsKLSsgICAgaW50IHJldCA9 IDA7Ci0rCi0rICAgIGZpcHNfd19sb2NrKCk7Ci0rICAgIGZpcHNfc2V0X3N0YXJ0ZWQoKTsKLSsg ICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOwotKwotKyAgICBpZihvbm9mZikKLSsJewotKwl1 bnNpZ25lZCBjaGFyIGJ1Zls0OF07Ci0rCi0rCWZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7Ci0rCi0r CS8qIERvbid0IGdvIGludG8gRklQUyBtb2RlIHR3aWNlLCBqdXN0IHNvIHdlIGNhbiBkbyBhdXRv bWFnaWMKLSsJICAgc2VlZGluZyAqLwotKwlpZihGSVBTX21vZGUoKSkKLSsJICAgIHsKLSsJICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfTU9ERV9TRVQsRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NF VCk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0gMDsKLSsJICAg IGdvdG8gZW5kOwotKwkgICAgfQotKwotKyNpZmRlZiBPUEVOU1NMX0lBMzJfU1NFMgotKwlpZiAo KE9QRU5TU0xfaWEzMmNhcCAmICgxPDwyNXwxPDwyNikpICE9ICgxPDwyNXwxPDwyNikpCi0rCSAg ICB7Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULEZJUFNfUl9VTlNVUFBPUlRF RF9QTEFURk9STSk7Ci0rCSAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKwkgICAgcmV0ID0g MDsKLSsJICAgIGdvdG8gZW5kOwotKwkgICAgfQotKyNlbmRpZgotKwotKwkvKiBQZXJmb3JtIFJO RyBLQVQgYmVmb3JlIHNlZWRpbmcgKi8KLSsJaWYgKCFGSVBTX3NlbGZ0ZXN0X3JuZygpKQotKwkg ICAgewotKwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAg ICBnb3RvIGVuZDsKLSsJICAgIH0KLSsKLSsJLyogYXV0b21hZ2ljYWxseSBzZWVkIFBSTkcgaWYg bm90IGFscmVhZHkgc2VlZGVkICovCi0rCWlmKCFGSVBTX3JhbmRfc3RhdHVzKCkpCi0rCSAgICB7 Ci0rCSAgICBpZihSQU5EX2J5dGVzKGJ1ZixzaXplb2YgYnVmKSA8PSAwKQotKwkJewotKwkJZmlw c19zZWxmdGVzdF9mYWlsID0gMTsKLSsJCXJldCA9IDA7Ci0rCQlnb3RvIGVuZDsKLSsJCX0KLSsJ ICAgIEZJUFNfcmFuZF9zZXRfa2V5KGJ1ZiwzMik7Ci0rCSAgICBGSVBTX3JhbmRfc2VlZChidWYr MzIsMTYpOwotKwkgICAgfQotKwotKwkvKiBub3cgc3dpdGNoIGludG8gRklQUyBtb2RlICovCi0r CWZpcHNfc2V0X3JhbmRfY2hlY2soRklQU19yYW5kX21ldGhvZCgpKTsKLSsJUkFORF9zZXRfcmFu ZF9tZXRob2QoRklQU19yYW5kX21ldGhvZCgpKTsKLSsJaWYoRklQU19zZWxmdGVzdCgpKQotKwkg ICAgZmlwc19zZXRfbW9kZSgxKTsKLSsJZWxzZQotKwkgICAgewotKwkgICAgZmlwc19zZWxmdGVz dF9mYWlsID0gMTsKLSsJICAgIHJldCA9IDA7Ci0rCSAgICBnb3RvIGVuZDsKLSsJICAgIH0KLSsJ cmV0ID0gMTsKLSsJZ290byBlbmQ7Ci0rCX0KLSsgICAgZmlwc19zZXRfbW9kZSgwKTsKLSsgICAg Zmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsgICAgcmV0ID0gMTsKLStlbmQ6Ci0rICAgIGZpcHNf Y2xlYXJfb3duaW5nX3RocmVhZCgpOwotKyAgICBmaXBzX3dfdW5sb2NrKCk7Ci0rICAgIHJldHVy biByZXQ7Ci0rICAgIH0KLSsKLSt2b2lkIGZpcHNfd19sb2NrKHZvaWQpCQl7IENSWVBUT193X2xv Y2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0KLSt2b2lkIGZpcHNfd191bmxvY2sodm9pZCkJeyBDUllQ VE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0KLSt2b2lkIGZpcHNfcl9sb2NrKHZvaWQp CQl7IENSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0KLSt2b2lkIGZpcHNfcl91bmxv Y2sodm9pZCkJeyBDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUyk7IH0KLSsKLStzdGF0 aWMgaW50IGZpcHNfc3RhcnRlZCA9IDA7Ci0rc3RhdGljIHVuc2lnbmVkIGxvbmcgZmlwc190aHJl YWQgPSAwOwotKwotK3ZvaWQgZmlwc19zZXRfc3RhcnRlZCh2b2lkKQotKwl7Ci0rCWZpcHNfc3Rh cnRlZCA9IDE7Ci0rCX0KLSsKLStpbnQgZmlwc19pc19zdGFydGVkKHZvaWQpCi0rCXsKLSsJcmV0 dXJuIGZpcHNfc3RhcnRlZDsKLSsJfQotKwotK2ludCBmaXBzX2lzX293bmluZ190aHJlYWQodm9p ZCkKLSsJewotKwlpbnQgcmV0ID0gMDsKLSsKLSsJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQotKwkJ ewotKwkJQ1JZUFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQlpZiAoZmlwc190aHJl YWQgIT0gMCAmJiBmaXBzX3RocmVhZCA9PSBDUllQVE9fdGhyZWFkX2lkKCkpCi0rCQkJcmV0ID0g MTsKLSsJCUNSWVBUT19yX3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQl9Ci0rCXJldHVy biByZXQ7Ci0rCX0KLSsKLStpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKQotKwl7Ci0r CWludCByZXQgPSAwOwotKwotKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCi0rCQl7Ci0rCQlDUllQ VE9fd19sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKLSsJCWlmIChmaXBzX3RocmVhZCA9PSAwKQot KwkJCXsKLSsJCQlmaXBzX3RocmVhZCA9IENSWVBUT190aHJlYWRfaWQoKTsKLSsJCQlyZXQgPSAx OwotKwkJCX0KLSsJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rCQl9Ci0r CXJldHVybiByZXQ7Ci0rCX0KLSsKLStpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQp Ci0rCXsKLSsJaW50IHJldCA9IDA7Ci0rCi0rCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKLSsJCXsK LSsJCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKwkJaWYgKGZpcHNfdGhyZWFk ID09IENSWVBUT190aHJlYWRfaWQoKSkKLSsJCQl7Ci0rCQkJZmlwc190aHJlYWQgPSAwOwotKwkJ CXJldCA9IDE7Ci0rCQkJfQotKwkJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsK LSsJCX0KLSsJcmV0dXJuIHJldDsKLSsJfQotKwotKy8qIEdlbmVyYWxpemVkIHB1YmxpYyBrZXkg dGVzdCByb3V0aW5lLiBTaWducyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKLSsgKiBzdXBwbGllZCBp biB0YnMgdXNpbmcgbWVzYWdlIGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24gZGlnZXN0Ci0r ICogZmxhZ3MgbWRfZmxhZ3MuIElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQg d2lsbAotKyAqIGFkZGl0aW9uYWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEg a25vd24gYW5zd2VyIHRlc3QKLSsgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMgdXNlZCBmb3Ig aWRlbnRpZmljYXRpb24gcHVycG9zZXMgaW4gY2FzZQotKyAqIG9mIGZhaWx1cmUuCi0rICovCi0r Ci0raW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChFVlBfUEtFWSAqcGtleSwKLSsJCQljb25z dCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCi0rCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqa2F0LCB1bnNpZ25lZCBpbnQga2F0bGVuLAotKwkJCWNvbnN0IEVWUF9NRCAqZGlnZXN0LCB1 bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCi0rCQkJY29uc3QgY2hhciAqZmFpbF9zdHIpCi0rCXsJCi0r CWludCByZXQgPSAwOwotKwl1bnNpZ25lZCBjaGFyIHNpZ3RtcFsyNTZdLCAqc2lnID0gc2lndG1w OwotKwl1bnNpZ25lZCBpbnQgc2lnbGVuOwotKwlFVlBfTURfQ1RYIG1jdHg7Ci0rCUVWUF9NRF9D VFhfaW5pdCgmbWN0eCk7Ci0rCi0rCWlmICgocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCi0r CQkmJiAoUlNBX3NpemUocGtleS0+cGtleS5yc2EpID4gc2l6ZW9mKHNpZ3RtcCkpKQotKwkJewot KwkJc2lnID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocGtleS0+cGtleS5yc2EpKTsKLSsJCWlm ICghc2lnKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RF U1QsRVJSX1JfTUFMTE9DX0ZBSUxVUkUpOwotKwkJCXJldHVybiAwOwotKwkJCX0KLSsJCX0KLSsK LSsJaWYgKHRic2xlbiA9PSAtMSkKLSsJCXRic2xlbiA9IHN0cmxlbigoY2hhciAqKXRicyk7Ci0r Ci0rCWlmIChtZF9mbGFncykKLSsJCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtY3R4LCBtZF9mbGFn cyk7Ci0rCi0rCWlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQotKwkJ Z290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQot KwkJZ290byBlcnJvcjsKLSsJaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBzaWcsICZzaWdsZW4s IHBrZXkpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJaWYgKGthdCAmJiAoKHNpZ2xlbiAhPSBrYXRs ZW4pIHx8IG1lbWNtcChrYXQsIHNpZywga2F0bGVuKSkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlp ZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBkaWdlc3QsIE5VTEwpKQotKwkJZ290byBlcnJv cjsKLSsJaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCi0rCQlnb3Rv IGVycm9yOwotKwlyZXQgPSBFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIHNpZywgc2lnbGVuLCBwa2V5 KTsKLSsKLSsJZXJyb3I6Ci0rCWlmIChzaWcgIT0gc2lndG1wKQotKwkJT1BFTlNTTF9mcmVlKHNp Zyk7Ci0rCUVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rCWlmIChyZXQgIT0gMSkKLSsJCXsK LSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCxGSVBTX1JfVEVTVF9G QUlMVVJFKTsKLSsJCWlmIChmYWlsX3N0cikKLSsJCQlFUlJfYWRkX2Vycm9yX2RhdGEoMiwgIlR5 cGU9IiwgZmFpbF9zdHIpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0r Ci0rLyogR2VuZXJhbGl6ZWQgc3ltbWV0cmljIGNpcGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5cHQg ZGF0YSwgdmVyaWZ5IHJlc3VsdAotKyAqIGFnYWluc3Qga25vd24gYW5zd2VyLCBkZWNyeXB0IGFu ZCBjb21wYXJlIHdpdGggb3JpZ2luYWwgcGxhaW50ZXh0LgotKyAqLwotKwotK2ludCBmaXBzX2Np cGhlcl90ZXN0KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwK LSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAq aXYsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAotKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKmNpcGhlcnRleHQsCi0rCQkJaW50IGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFy IHBsdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwotKwl1bnNpZ25lZCBjaGFyIGNpdG1w W0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwotKwlPUEVOU1NMX2Fzc2VydChsZW4gPD0gRklQ U19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNp cGhlciwgTlVMTCwga2V5LCBpdiwgMSkgPD0gMCkKLSsJCXJldHVybiAwOwotKwlFVlBfQ2lwaGVy KGN0eCwgY2l0bXAsIHBsYWludGV4dCwgbGVuKTsKLSsJaWYgKG1lbWNtcChjaXRtcCwgY2lwaGVy dGV4dCwgbGVuKSkKLSsJCXJldHVybiAwOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBj aXBoZXIsIE5VTEwsIGtleSwgaXYsIDApIDw9IDApCi0rCQlyZXR1cm4gMDsKLSsJRVZQX0NpcGhl cihjdHgsIHBsdG1wLCBjaXRtcCwgbGVuKTsKLSsJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0 LCBsZW4pKQotKwkJcmV0dXJuIDA7Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rI2lmIDAKLSsvKiBU aGUgcHVycG9zZSBvZiB0aGlzIGlzIHRvIGVuc3VyZSB0aGUgZXJyb3IgY29kZSBleGlzdHMgYW5k IHRoZSBmdW5jdGlvbgotKyAqIG5hbWUgaXMgdG8ga2VlcCB0aGUgZXJyb3IgY2hlY2tpbmcgc2Ny aXB0IHF1aWV0Ci0rICovCi0rdm9pZCBoYXNoX2ZpbmFsKHZvaWQpCi0rCXsKLSsJRklQU2VycihG SVBTX0ZfSEFTSF9GSU5BTCxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsJfQotKyNlbmRpZgot KwotKwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEy OjAwOjU4LjgwMTAwMjI3NiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2Zp cHMvZmlwc19kZXNfc2VsZnRlc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEw MAotQEAgLTAsMCArMSwxMzcgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo dAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAq ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcg bWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0 d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3 dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQi IGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3Jz ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQK LSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24s IHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0r ICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxs ZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5h bWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5T U0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0 c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoK LSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUg T3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0ICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ REVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNT RUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW RU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJF IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0r ICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS VklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5Z IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsg KiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyBz dHJ1Y3QKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl07Ci0rICAgIHVuc2lnbmVk IGNoYXIgcGxhaW50ZXh0WzhdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07Ci0r ICAgIH0gdGVzdHMyW109Ci0rCXsKLSsJewotKwl7IDB4N2MsMHg0ZiwweDZlLDB4ZjcsMHhhMiww eDA0LDB4MTYsMHhlYywKLSsJICAweDBiLDB4NmIsMHg3YywweDllLDB4NWUsMHgxOSwweGE3LDB4 YzQgfSwKLSsJeyAweDA2LDB4YTcsMHhkOCwweDc5LDB4YWEsMHhjZSwweDY5LDB4ZWYgfSwKLSsJ eyAweDRjLDB4MTEsMHgxNywweDU1LDB4YmYsMHhjNCwweDRlLDB4ZmQgfQotKwl9LAotKwl7Ci0r CXsgMHg1ZCwweDllLDB4MDEsMHhkMywweDI1LDB4YzcsMHgzZSwweDM0LAotKwkgIDB4MDEsMHgx NiwweDdjLDB4ODUsMHgyMywweGRmLDB4ZTAsMHg2OCB9LAotKwl7IDB4OWMsMHg1MCwweDA5LDB4 MGYsMHg1ZSwweDdkLDB4NjksMHg3ZSB9LAotKwl7IDB4ZDIsMHgwYiwweDE4LDB4ZGYsMHhkOSww eDBkLDB4OWUsMHhmZiB9LAotKwl9Ci0rCX07Ci0rCi0rc3RhdGljIHN0cnVjdAotKyAgICB7Ci0r ICAgIHVuc2lnbmVkIGNoYXIga2V5WzI0XTsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRb OF07Ci0rICAgIHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKLSsgICAgfSB0ZXN0czNbXT0K LSsJewotKwl7Ci0rCXsgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAot KwkgIDB4RkUsMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LDB4MzIsMHgxMCwKLSsJICAweDEyLDB4 MzQsMHg1NiwweDc4LDB4OWEsMHhiYywweGRlLDB4ZjAgfSwKLSsJeyAweDhmLDB4OGYsMHhiZiww eDliLDB4NWQsMHg0OCwweGI0LDB4MWMgfSwKLSsJeyAweDU5LDB4OGMsMHhlNSwweGQzLDB4NmMs MHhhMiwweGVhLDB4MWIgfSwKLSsJfSwKLSsJewotKwl7IDB4REMsMHhCQSwweDk4LDB4NzYsMHg1 NCwweDMyLDB4MTAsMHhGRSwKLSsJICAweDAxLDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENE LDB4RUYsCi0rCSAgMHhFRCwweDM5LDB4RDksMHg1MCwweEZBLDB4NzQsMHhCQywweEM0IH0sCi0r CXsgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGIH0sCi0rCXsgMHgxMSww eDI1LDB4YjAsMHgzNSwweGJlLDB4YTAsMHg4MiwweDg2IH0sCi0rCX0sCi0rCX07Ci0rCi0rdm9p ZCBGSVBTX2NvcnJ1cHRfZGVzKCkKLSsgICAgewotKyAgICB0ZXN0czJbMF0ucGxhaW50ZXh0WzBd Kys7Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9kZXMoKQotKyAgICB7Ci0rICAgIGlu dCBuLCByZXQgPSAwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJf Q1RYX2luaXQoJmN0eCk7Ci0rICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMg YW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLwotKyAgICBmb3Iobj0wIDsgbiA8IDIgOyAr K24pCi0rCXsKLSsJaWYgKCFmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9kZXNfZWRlX2VjYigp LAotKwkJCQl0ZXN0czJbbl0ua2V5LCBOVUxMLAotKwkJCQl0ZXN0czJbbl0ucGxhaW50ZXh0LCB0 ZXN0czJbbl0uY2lwaGVydGV4dCwgOCkpCi0rCQlnb3RvIGVycjsKLSsJfQotKwotKyAgICAvKiBF bmNyeXB0L2RlY3J5cHQgd2l0aCAzREVTIGFuZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8K LSsgICAgZm9yKG49MCA7IG4gPCAyIDsgKytuKQotKwl7Ci0rCWlmICghZmlwc19jaXBoZXJfdGVz dCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksCi0rCQkJCXRlc3RzM1tuXS5rZXksIE5VTEwsCi0r CQkJCXRlc3RzM1tuXS5wbGFpbnRleHQsIHRlc3RzM1tuXS5jaXBoZXJ0ZXh0LCA4KSkKLSsJCWdv dG8gZXJyOwotKwl9Ci0rICAgIHJldCA9IDE7Ci0rICAgIGVycjoKLSsgICAgRVZQX0NJUEhFUl9D VFhfY2xlYW51cCgmY3R4KTsKLSsgICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQU2VycihGSVBT X0ZfRklQU19TRUxGVEVTVF9ERVMsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCi0rICAgIHJl dHVybiByZXQ7Ci0rICAgIH0KLSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMKLS0tLSAvZGV2L251bGwJ MjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4w MDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMTg0IEBACi0rLyogY3J5cHRvL2RzYS9kc2F0ZXN0 LmMgKi8KLSsvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRz b2Z0LmNvbSkKLSsgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogVGhpcyBwYWNrYWdl IGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCi0rICogYnkgRXJpYyBZb3VuZyAoZWF5 QGNyeXB0c29mdC5jb20pLgotKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBh cyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KLSsgKiAKLSsgKiBUaGlzIGxpYnJhcnkg aXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMK LSsgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3Ry aWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAotKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7 IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgotKyAqIGluY2x1 ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmln aHQgdGVybXMKLSsgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBj cnlwdHNvZnQuY29tKS4KLSsgKiAKLSsgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3Ms IGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgotKyAqIHRoZSBjb2RlIGFyZSBu b3QgdG8gYmUgcmVtb3ZlZC4KLSsgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1 Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCi0rICogYXMgdGhlIGF1 dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KLSsgKiBUaGlzIGNhbiBiZSBp biB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKLSsg KiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUg cGFja2FnZS4KLSsgKiAKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0 OgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo ZQotKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0rICogICAgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5Ci0rICogICAgIEVy aWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKLSsgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3Jh cGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKLSsg KiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KLSsgKiA0 LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRp dmUgdGhlcmVvZikgZnJvbSAKLSsgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9u IGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgotKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5 cHRzb2Z0LmNvbSkiCi0rICogCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklD IFlPVU5HIGBgQVMgSVMnJyBBTkQKLSsgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRQotKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBP UiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0rICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSsgKiBEQU1B R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUwotKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0rICog TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS SVNJTkcgSU4gQU5ZIFdBWQotKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSsgKiBTVUNIIERBTUFHRS4KLSsg KiAKLSsgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGlj YWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgotKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNh bm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQotKyAqIGNv cGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKLSsgKiBbaW5j bHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJp bmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9k c2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K LSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rLyogc2VlZCwgb3V0X3AsIG91dF9xLCBvdXRf ZyBhcmUgdGFrZW4gdGhlIE5JU1QgdGVzdCB2ZWN0b3JzICovCi0rCi0rc3RhdGljIHVuc2lnbmVk IGNoYXIgc2VlZFsyMF0gPSB7Ci0rCTB4NzcsIDB4OGYsIDB4NDAsIDB4NzQsIDB4NmYsIDB4NjYs IDB4YmUsIDB4MzMsIDB4Y2UsIDB4YmUsIDB4OTksIDB4MzQsCi0rCTB4NGMsIDB4ZmMsIDB4ZjMs IDB4MjgsIDB4YWEsIDB4NzAsIDB4MmQsIDB4M2EKLSsgIAl9OwotKwotK3N0YXRpYyB1bnNpZ25l ZCBjaGFyIG91dF9wW10gPSB7Ci0rCTB4ZjcsIDB4N2MsIDB4MWIsIDB4ODMsIDB4ZDgsIDB4ZTgs IDB4NWMsIDB4N2YsIDB4ODUsIDB4MzAsIDB4MTcsIDB4NTcsCi0rCTB4MjEsIDB4OTUsIDB4ZmUs IDB4MjYsIDB4MDQsIDB4ZWIsIDB4NDcsIDB4NGMsIDB4M2EsIDB4NGEsIDB4ODEsIDB4NGIsCi0r CTB4NzEsIDB4MmUsIDB4ZWQsIDB4NmUsIDB4NGYsIDB4M2QsIDB4MTEsIDB4MGYsIDB4N2MsIDB4 ZmUsIDB4MzYsIDB4NDMsCi0rCTB4NTEsIDB4ZDksIDB4ODEsIDB4MzksIDB4MTcsIDB4ZGYsIDB4 NjIsIDB4ZjYsIDB4OWMsIDB4MDEsIDB4YTgsIDB4NjksCi0rCTB4NzEsIDB4ZGQsIDB4MjksIDB4 N2YsIDB4NDcsIDB4ZTYsIDB4NjUsIDB4YTYsIDB4MjIsIDB4ZTgsIDB4NmEsIDB4MTIsCi0rCTB4 MmIsIDB4YzIsIDB4ODEsIDB4ZmYsIDB4MzIsIDB4NzAsIDB4MmYsIDB4OWUsIDB4Y2EsIDB4NTMs IDB4MjYsIDB4NDcsCi0rCTB4MGYsIDB4NTksIDB4ZDcsIDB4OWUsIDB4MmMsIDB4YTUsIDB4MDcs IDB4YzQsIDB4NDksIDB4NTIsIDB4YTMsIDB4ZTQsCi0rCTB4NmIsIDB4MDQsIDB4MDAsIDB4MjUs IDB4NDksIDB4ZTIsIDB4ZTYsIDB4N2YsIDB4MjgsIDB4NzgsIDB4OTcsIDB4YjgsCi0rCTB4M2Es IDB4MzIsIDB4MTQsIDB4MzgsIDB4YTIsIDB4NTEsIDB4MzMsIDB4MjIsIDB4NDQsIDB4N2UsIDB4 ZDcsIDB4ZWYsCi0rCTB4NDUsIDB4ZGIsIDB4MDYsIDB4NGEsIDB4ZDIsIDB4ODIsIDB4NGEsIDB4 ODIsIDB4MmMsIDB4YjEsIDB4ZDcsIDB4ZDgsCi0rCTB4YjYsIDB4NzMsIDB4MDAsIDB4NGQsIDB4 OTQsIDB4NzcsIDB4OTQsIDB4ZWYKLSsJfTsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRf cVtdID0gewotKwkweGQ0LCAweDBhLCAweGFjLCAweDlmLCAweGJkLCAweDhjLCAweDgwLCAweGMy LCAweDM4LCAweDdlLCAweDJlLCAweDBjLAotKwkweDUyLCAweDVjLCAweGVhLCAweDM0LCAweGEx LCAweDgzLCAweDMyLCAweGYzCi0rCX07Ci0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X2db XSA9IHsKLSsJMHgzNCwgMHg3MywgMHg4YiwgMHg1NywgMHg4NCwgMHg4ZSwgMHg1NSwgMHhiZiwg MHg1NywgMHhjYywgMHg0MSwgMHhiYiwKLSsJMHg1ZSwgMHgyYiwgMHhkNSwgMHg0MiwgMHhkZCwg MHgyNCwgMHgyMiwgMHgyYSwgMHgwOSwgMHhlYSwgMHgyNiwgMHgxZSwKLSsJMHgxNywgMHg2NSwg MHhjYiwgMHgxYSwgMHhiMywgMHgxMiwgMHg0NCwgMHhhMywgMHg5ZSwgMHg5OSwgMHhlOSwgMHg2 MywKLSsJMHhlYiwgMHgzMCwgMHhiMSwgMHg3OCwgMHg3YiwgMHgwOSwgMHg0MCwgMHgzMCwgMHhm YSwgMHg4MywgMHhjMiwgMHgzNSwKLSsJMHhlMSwgMHhjNCwgMHgyZCwgMHg3NCwgMHgxYSwgMHhi MSwgMHg4MywgMHg1NCwgMHhkOCwgMHgyOSwgMHhmNCwgMHhjZiwKLSsJMHg3ZiwgMHg2ZiwgMHg2 NywgMHgxYywgMHgzNiwgMHg0OSwgMHhlZSwgMHg2YywgMHhhMiwgMHgzYywgMHgyZCwgMHg2YSwK LSsJMHhlOSwgMHhkMywgMHg5YSwgMHhmNiwgMHg1NywgMHg3OCwgMHg2ZiwgMHhmZCwgMHgzMywg MHhjZCwgMHgzYywgMHhlZCwKLSsJMHhmZCwgMHhkNCwgMHg0MSwgMHhlNiwgMHg1YywgMHg4Yiwg MHhlMCwgMHg2OCwgMHgzMSwgMHg0NywgMHg0NywgMHhhZiwKLSsJMHgxMiwgMHhhNywgMHhmOSwg MHgzMiwgMHgwZCwgMHg5NCwgMHgxNSwgMHg0OCwgMHhkMCwgMHg1NCwgMHg4NSwgMHhiMiwKLSsJ MHgwNCwgMHhiNSwgMHg0ZCwgMHhkNCwgMHg5ZCwgMHgwNSwgMHgyMiwgMHgyNSwgMHhkOSwgMHhm ZCwgMHg2YywgMHgzNiwKLSsJMHhlZiwgMHhiZSwgMHg2OSwgMHg2YywgMHg1NSwgMHhmNCwgMHhl ZSwgMHhlYwotKwl9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHN0cjFbXT0iMTIz NDU2Nzg5MDEyMzQ1Njc4OTAiOwotKwotK3ZvaWQgRklQU19jb3JydXB0X2RzYSgpCi0rICAgIHsK LSsgICAgKytzZWVkWzBdOwotKyAgICB9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZHNhKCkKLSsg ICAgewotKyAgICBEU0EgKmRzYTsKLSsgICAgaW50IGNvdW50ZXIsaSxqLCByZXQgPSAwOwotKyAg ICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKLSsgICAg dW5zaWduZWQgbG9uZyBoOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rICAgIEVWUF9QS0VZICpw ayA9IE5VTEw7Ci0rCi0rICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0rCi0rICAgIGRzYSA9 IERTQV9uZXcoKTsKLSsKLSsgICAgaWYoZHNhID09IE5VTEwpCi0rCWdvdG8gZXJyOwotKyAgICBp ZighRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LHNlZWQsMjAsJmNvdW50ZXIs JmgsTlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAoY291bnRlciAhPSAzNzgpIAotKwlnb3Rv IGVycjsKLSsgICAgaWYgKGggIT0gMikKLSsJZ290byBlcnI7Ci0rICAgIGk9Qk5fYm4yYmluKGRz YS0+cSxidWYpOwotKyAgICBqPXNpemVvZihvdXRfcSk7Ci0rICAgIGlmIChpICE9IGogfHwgbWVt Y21wKGJ1ZixvdXRfcSxpKSAhPSAwKQotKwlnb3RvIGVycjsKLSsKLSsgICAgaT1CTl9ibjJiaW4o ZHNhLT5wLGJ1Zik7Ci0rICAgIGo9c2l6ZW9mKG91dF9wKTsKLSsgICAgaWYgKGkgIT0gaiB8fCBt ZW1jbXAoYnVmLG91dF9wLGkpICE9IDApCi0rCWdvdG8gZXJyOwotKwotKyAgICBpPUJOX2JuMmJp bihkc2EtPmcsYnVmKTsKLSsgICAgaj1zaXplb2Yob3V0X2cpOwotKyAgICBpZiAoaSAhPSBqIHx8 IG1lbWNtcChidWYsb3V0X2csaSkgIT0gMCkKLSsJZ290byBlcnI7Ci0rICAgIERTQV9nZW5lcmF0 ZV9rZXkoZHNhKTsKLSsKLSsgICAgaWYgKChwaz1FVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsJ Z290byBlcnI7Ci0rICAgIEVWUF9QS0VZX2Fzc2lnbl9EU0EocGssIGRzYSk7Ci0rCi0rICAgIGlm ICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlcnI7 Ci0rICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHN0cjEsIDIwKSkKLSsJZ290byBlcnI7 Ci0rICAgIGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgcGspKQotKwlnb3Rv IGVycjsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwg TlVMTCkpCi0rCWdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIHN0 cjEsIDIwKSkKLSsJZ290byBlcnI7Ci0rICAgIGlmIChFVlBfVmVyaWZ5RmluYWwoJm1jdHgsIGJ1 Ziwgc2xlbiwgcGspICE9IDEpCi0rCWdvdG8gZXJyOwotKwotKyAgICByZXQgPSAxOwotKwotKyAg ICBlcnI6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rICAgIGlmIChwaykKLSsJ RVZQX1BLRVlfZnJlZShwayk7Ci0rICAgIGVsc2UgaWYgKGRzYSkKLSsJRFNBX2ZyZWUoZHNhKTsK LSsgICAgaWYgKHJldCA9PSAwKQotKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9E U0EsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rICAgIH0KLSsj ZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBz L2ZpcHMuaAotLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEw MAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwcy5oCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDE2MyBAQAotKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmln aHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJl IG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgot KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUg bmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJl IHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g Rm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNv cmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVu U1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAg cGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmli dXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwot KyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElT JycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFS RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgot KyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg SU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN QUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBT VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ U0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB UkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH RS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0r I2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSsjZXJyb3IgRklQUyBpcyBkaXNhYmxlZC4KLSsjZW5kaWYK LSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rI2lmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVy biAiQyIgewotKyNlbmRpZgotKwotK3N0cnVjdCBkc2Ffc3Q7Ci0rc3RydWN0IGV2cF9wa2V5X3N0 OwotK3N0cnVjdCBlbnZfbWRfc3Q7Ci0rc3RydWN0IGV2cF9jaXBoZXJfc3Q7Ci0rc3RydWN0IGV2 cF9jaXBoZXJfY3R4X3N0OwotKwotK2ludCBGSVBTX21vZGVfc2V0KGludCBvbm9mZik7Ci0raW50 IEZJUFNfbW9kZSh2b2lkKTsKLStjb25zdCB2b2lkICpGSVBTX3JhbmRfY2hlY2sodm9pZCk7Ci0r aW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKHZvaWQpOwotK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVj ayh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9zaGExKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0 ZXN0X3NoYTEodm9pZCk7Ci0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKHZvaWQpOwotK2ludCBGSVBT X3NlbGZ0ZXN0X2Flcyh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9kZXModm9pZCk7Ci0raW50 IEZJUFNfc2VsZnRlc3RfZGVzKHZvaWQpOwotK3ZvaWQgRklQU19jb3JydXB0X3JzYSh2b2lkKTsK LSt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0 X3JzYSh2b2lkKTsKLSt2b2lkIEZJUFNfY29ycnVwdF9kc2Eodm9pZCk7Ci0rdm9pZCBGSVBTX2Nv cnJ1cHRfZHNhX2tleWdlbih2b2lkKTsKLStpbnQgRklQU19zZWxmdGVzdF9kc2Eodm9pZCk7Ci0r dm9pZCBGSVBTX2NvcnJ1cHRfcm5nKHZvaWQpOwotK3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCk7 Ci0raW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQpOwotK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWMo dm9pZCk7Ci0rCi0raW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChzdHJ1Y3QgZXZwX3BrZXlf c3QgKnBrZXksCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAotKwkJ CWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWduZWQgaW50IGthdGxlbiwKLSsJCQljb25z dCBzdHJ1Y3QgZW52X21kX3N0ICpkaWdlc3QsIHVuc2lnbmVkIGludCBtZF9mbGFncywKLSsJCQlj b25zdCBjaGFyICpmYWlsX3N0cik7Ci0rCi0raW50IGZpcHNfY2lwaGVyX3Rlc3Qoc3RydWN0IGV2 cF9jaXBoZXJfY3R4X3N0ICpjdHgsCi0rCQkJY29uc3Qgc3RydWN0IGV2cF9jaXBoZXJfc3QgKmNp cGhlciwKLSsJCQljb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rCQkJY29uc3QgdW5zaWduZWQg Y2hhciAqaXYsCi0rCQkJY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAotKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCi0rCQkJaW50IGxlbik7Ci0rCi0rLyogQkVHSU4g RVJST1IgQ09ERVMgKi8KLSsvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRl ZCBieSB0aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcwotKyAqIG1hZGUgYWZ0ZXIgdGhp cyBwb2ludCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgot KyAqLwotK3ZvaWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpOwotKwotKy8qIEVycm9yIGNv ZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICovCi0rCi0rLyogRnVuY3Rpb24gY29kZXMuICov Ci0rI2RlZmluZSBGSVBTX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMJCQkgMTAwCi0rI2RlZmluZSBG SVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4JCQkgMTAxCi0rI2RlZmluZSBGSVBTX0ZfRFNBX0RP X1NJR04JCQkJIDEwMgotKyNkZWZpbmUgRklQU19GX0RTQV9ET19WRVJJRlkJCQkJIDEwMwotKyNk ZWZpbmUgRklQU19GX0VWUF9DSVBIRVJJTklUX0VYCQkJIDEyNAotKyNkZWZpbmUgRklQU19GX0VW UF9ESUdFU1RJTklUX0VYCQkJIDEyNQotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRFNBCQkJ CSAxMDQKLSsjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0lOQ09SRV9GSU5HRVJQUklOVAkJIDEw NQotKyNkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBCQkJCSAxMDYKLSsjZGVmaW5lIEZJUFNf Rl9GSVBTX0RTQV9DSEVDSwkJCQkgMTA3Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19NT0RFX1NFVAkJ CQkgMTA4Ci0rI2RlZmluZSBGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNUCQkJIDEwOQot KyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTCQkJIDExMAotKyNkZWZpbmUgRklQU19G X0ZJUFNfU0VMRlRFU1RfREVTCQkJIDExMQotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf RFNBCQkJIDExMgotKyNkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQwkJCSAxMTMKLSsj ZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORwkJCSAxMTQKLSsjZGVmaW5lIEZJUFNfRl9G SVBTX1NFTEZURVNUX1NIQTEJCQkgMTE1Ci0rI2RlZmluZSBGSVBTX0ZfSEFTSF9GSU5BTAkJCQkg MTIzCi0rI2RlZmluZSBGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOCQkJIDExNgotKyNkZWZpbmUg RklQU19GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBUCQkJIDExNwotKyNkZWZpbmUgRklQU19GX1JT QV9FQVlfUFJJVkFURV9FTkNSWVBUCQkJIDExOAotKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVC TElDX0RFQ1JZUFQJCQkgMTE5Ci0rI2RlZmluZSBGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQ VAkJCSAxMjAKLSsjZGVmaW5lIEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgJCQkgMTIx Ci0rI2RlZmluZSBGSVBTX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkgMTIyCi0rCi0rLyogUmVhc29u IGNvZGVzLiAqLwotKyNkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRQkJCQkgMTAzCi0rI2Rl ZmluZSBGSVBTX1JfQ0FOTk9UX1JFQURfRVhFX0RJR0VTVAkJCSAxMDQKLSsjZGVmaW5lIEZJUFNf Ul9DT05UUkFESUNUSU5HX0VWSURFTkNFCQkJIDExNAotKyNkZWZpbmUgRklQU19SX0VYRV9ESUdF U1RfRE9FU19OT1RfTUFUQ0gJCSAxMDUKLSsjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VT X05PVF9NQVRDSAkJIDExMAotKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01B VENIX05PTlBJQ19SRUxPQ0FURUQgMTExCi0rI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRfRE9F U19OT1RfTUFUQ0hfU0VHTUVOVF9BTElBU0lORyAxMTIKLSsjZGVmaW5lIEZJUFNfUl9GSVBTX01P REVfQUxSRUFEWV9TRVQJCQkgMTAyCi0rI2RlZmluZSBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlM RUQJCQkgMTA2Ci0rI2RlZmluZSBGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RICQkJIDEwOQotKyNk ZWZpbmUgRklQU19SX0tFWV9UT09fU0hPUlQJCQkJIDEwOAotKyNkZWZpbmUgRklQU19SX05PTl9G SVBTX01FVEhPRAkJCQkgMTAwCi0rI2RlZmluZSBGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQJ CQkgMTA3Ci0rI2RlZmluZSBGSVBTX1JfUlNBX0RFQ1JZUFRfRVJST1IJCQkgMTE1Ci0rI2RlZmlu ZSBGSVBTX1JfUlNBX0VOQ1JZUFRfRVJST1IJCQkgMTE2Ci0rI2RlZmluZSBGSVBTX1JfU0VMRlRF U1RfRkFJTEVECQkJCSAxMDEKLSsjZGVmaW5lIEZJUFNfUl9URVNUX0ZBSUxVUkUJCQkJIDExNwot KyNkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JNCQkJIDExMwotKwotKyNpZmRlZiAg X19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYwotLS0tIC9k ZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMJMjAwOS0xMS0xMiAx MjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMTM1IEBACi0rLyogPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUg bWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0r ICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz ZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBu YW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUg dXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBG b3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29y ZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0r ICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0r ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9o bWFjLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3R5cGVkZWYgc3RydWN0IHsKLSsJY29u c3QgRVZQX01EICooKmFsZykodm9pZCk7Ci0rCWNvbnN0IGNoYXIgKmtleSwgKml2OwotKwl1bnNp Z25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV07Ci0rfSBITUFDX0tBVDsKLSsKLStzdGF0 aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7Ci0rICAgIHsJRVZQX3NoYTEsCi0rCS8qIGZy b20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5OC9maXBzLTE5 OGEucGRmICovCi0rCSIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rCSJTYW1wbGUgIzIiLAotKwl7 IDB4MDksMHgyMiwweGQzLDB4NDAsMHg1ZiwweGFhLDB4M2QsMHgxOSwKLSsJICAweDRmLDB4ODIs MHhhNCwweDU4LDB4MzAsMHg3MywweDdkLDB4NWMsCi0rCSAgMHhjNiwweGM3LDB4NWQsMHgyNCB9 Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTIyNCwKLSsJLyoganVzdCBrZWVwIGV4dGVuZGluZyB0 aGUgYWJvdmUuLi4gKi8KLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIs Ci0rCXsgMHhkZCwweGVmLDB4MGEsMHg0MCwweGNiLDB4N2QsMHg1MCwweGZiLAotKwkgIDB4NmUs MHhlNiwweGNlLDB4YTEsMHgyMCwweGJhLDB4MjYsMHhhYSwKLSsJICAweDA4LDB4ZjMsMHgwNyww eDc1LDB4ODcsMHhiOCwweGFkLDB4MWIsCi0rCSAgMHg4YywweDhkLDB4MTIsMHhjNyB9Ci0rICAg IH0sCi0rICAgIHsJRVZQX3NoYTI1NiwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNh bXBsZSAjMiIsCi0rCXsgMHhiOCwweGYyLDB4MGQsMHhiNSwweDQxLDB4ZWEsMHg0MywweDA5LAot KwkgIDB4Y2EsMHg0ZSwweGE5LDB4MzgsMHgwYywweGQwLDB4ZTgsMHgzNCwKLSsJICAweGY3LDB4 MWYsMHhiZSwweDkxLDB4NzQsMHhhMiwweDYxLDB4MzgsCi0rCSAgMHgwZCwweGMxLDB4N2UsMHhh ZSwweDZhLDB4MzQsMHg1MSwweGQ5IH0KLSsgICAgfSwKLSsgICAgewlFVlBfc2hhMzg0LAotKwki MDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKwkiU2FtcGxlICMyIiwKLSsJeyAweDA4LDB4YmMsMHhi MCwweGRhLDB4NDksMHgxZSwweDg3LDB4YWQsCi0rCSAgMHg5YSwweDFkLDB4NmEsMHhjZSwweDIz LDB4YzUsMHgwYiwweGY2LAotKwkgIDB4YjcsMHgxOCwweDA2LDB4YTUsMHg3NywweGNkLDB4NDks MHgwNCwKLSsJICAweDg5LDB4ZjEsMHhlNiwweDIzLDB4NDQsMHg1MSwweDUxLDB4OWYsCi0rCSAg MHg4NSwweDU2LDB4ODAsMHg3OSwweDBjLDB4YmQsMHg0ZCwweDUwLAotKwkgIDB4YTQsMHg1Ziww eDI5LDB4ZTMsMHg5MywweGYwLDB4ZTgsMHg3ZiB9Ci0rICAgIH0sCi0rICAgIHsJRVZQX3NoYTUx MiwKLSsJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsJIlNhbXBsZSAjMiIsCi0rCXsgMHg4MCww eDlkLDB4NDQsMHgwNSwweDdjLDB4NWIsMHg5NSwweDQxLAotKwkgIDB4MDUsMHhiZCwweDA0LDB4 MTMsMHgxNiwweGRiLDB4MGYsMHhhYywKLSsJICAweDQ0LDB4ZDUsMHhhNCwweGQ1LDB4ZDAsMHg4 OSwweDJiLDB4ZDAsCi0rCSAgMHg0ZSwweDg2LDB4NjQsMHgxMiwweGMwLDB4OTAsMHg3NywweDY4 LAotKwkgIDB4ZjEsMHg4NywweGI3LDB4N2MsMHg0ZiwweGFlLDB4MmMsMHgyZiwKLSsJICAweDIx LDB4YTUsMHhiNSwweDY1LDB4OWEsMHg0ZiwweDRiLDB4YTcsCi0rCSAgMHg0NywweDAyLDB4YTMs MHhkZSwweDliLDB4NTEsMHhmMSwweDQ1LAotKwkgIDB4YmQsMHg0ZiwweDI1LDB4MjcsMHg0Miww eDk4LDB4OTksMHgwNSB9Ci0rICAgIH0sCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9obWFj KCkKLSsgICAgewotKyAgICBpbnQgbjsKLSsgICAgdW5zaWduZWQgaW50ICAgIG91dGxlbjsKLSsg ICAgdW5zaWduZWQgY2hhciAgIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICBjb25zdCBFVlBf TUQgICAqbWQ7Ci0rICAgIGNvbnN0IEhNQUNfS0FUICp0OwotKwotKyAgICBmb3Iobj0wLHQ9dmVj dG9yOyBuPHNpemVvZih2ZWN0b3IpL3NpemVvZih2ZWN0b3JbMF0pOyBuKyssdCsrKQotKwl7Ci0r CW1kID0gKCp0LT5hbGcpKCk7Ci0rCUhNQUMobWQsdC0+a2V5LHN0cmxlbih0LT5rZXkpLAotKwkJ KGNvbnN0IHVuc2lnbmVkIGNoYXIgKil0LT5pdixzdHJsZW4odC0+aXYpLAotKwkJb3V0LCZvdXRs ZW4pOwotKwotKwlpZihtZW1jbXAob3V0LHQtPmthdmFsLG91dGxlbikpCi0rCSAgICB7Ci0rCSAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMsRklQU19SX1NFTEZURVNUX0ZBSUxF RCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsJfQotKyAgICByZXR1cm4gMTsKLSsgICAg fQotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L2ZpcHMvZmlwc19yYW5kLmMKLS0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEw MDIyNzYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfcmFu ZC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDQxMCBA QAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFBy b2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9k aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k aXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsg KgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3Ry aWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmlu ZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0 aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2pl Y3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0 ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsg KiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAg ICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3 cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0r ICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4g dGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wg UFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK LSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5T U0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywg UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9G IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH RU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElU WSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKy8qCi0rICogVGhpcyBpcyBhIEZJUFMg YXBwcm92ZWQgQUVTIFBSTkcgYmFzZWQgb24gQU5TSSBYOS4zMSBBLjIuNC4KLSsgKi8KLSsKLSsj aW5jbHVkZSAiZV9vcy5oIgotKwotKy8qIElmIHdlIGRvbid0IGRlZmluZSBfWE9QRU5fU09VUkNF X0VYVEVOREVELCBzdHJ1Y3QgdGltZXZhbCB3b24ndAotKyAgIGJlIGRlZmluZWQgYW5kIGdldHRp bWVvZmRheSgpIHdvbid0IGJlIGRlY2xhcmVkIHdpdGggc3RyaWN0IGNvbXBpbGVycwotKyAgIGxp a2UgREVDIEMgaW4gQU5TSSBDIG1vZGUuICAqLwotKyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRF TkRFRAotKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxCi0rI2VuZGlmCi0rCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Flcy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNp Zm5kZWYgT1BFTlNTTF9TWVNfV0lOMzIKLSsjaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSsjZW5kaWYK LSsjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2lmbmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKyMgaWZk ZWYgT1BFTlNTTF9VTklTVEQKLSsjICBpbmNsdWRlIE9QRU5TU0xfVU5JU1RECi0rIyBlbHNlCi0r IyAgaW5jbHVkZSA8dW5pc3RkLmg+Ci0rIyBlbmRpZgotKyNlbmRpZgotKyNpbmNsdWRlIDxzdHJp bmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5o IgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSt2b2lkICpPUEVOU1NMX3N0ZGVycih2b2lk KTsKLSsKLSsjZGVmaW5lIEFFU19CTE9DS19MRU5HVEgJMTYKLSsKLSsKLSsvKiBBRVMgRklQUyBQ Uk5HIGltcGxlbWVudGF0aW9uICovCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgCi0rCXsKLSsJaW50IHNl ZWRlZDsKLSsJaW50IGtleWVkOwotKwlpbnQgdGVzdF9tb2RlOwotKwlpbnQgc2Vjb25kOwotKwlp bnQgZXJyb3I7Ci0rCXVuc2lnbmVkIGxvbmcgY291bnRlcjsKLSsJQUVTX0tFWSBrczsKLSsJaW50 IHZwb3M7Ci0rCS8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBrZXkgaWYgaXQgZXF1YWxzIHNlZWQg bGVuZ3RoICovCi0rCXVuc2lnbmVkIGNoYXIgdG1wX2tleVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsJ dW5zaWduZWQgY2hhciBWW0FFU19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIERUW0FF U19CTE9DS19MRU5HVEhdOwotKwl1bnNpZ25lZCBjaGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07 Ci0rCX0gRklQU19QUk5HX0NUWDsKLSsKLStzdGF0aWMgRklQU19QUk5HX0NUWCBzY3R4OwotKwot K3N0YXRpYyBpbnQgZmlwc19wcm5nX2ZhaWwgPSAwOwotKwotK3ZvaWQgRklQU19ybmdfc3RpY2so dm9pZCkKLSsJewotKwlmaXBzX3BybmdfZmFpbCA9IDE7Ci0rCX0KLSsKLSt2b2lkIGZpcHNfcmFu ZF9wcm5nX3Jlc2V0KEZJUFNfUFJOR19DVFggKmN0eCkKLSsJewotKwljdHgtPnNlZWRlZCA9IDA7 Ci0rCWN0eC0+a2V5ZWQgPSAwOwotKwljdHgtPnRlc3RfbW9kZSA9IDA7Ci0rCWN0eC0+Y291bnRl ciA9IDA7Ci0rCWN0eC0+c2Vjb25kID0gMDsKLSsJY3R4LT5lcnJvciA9IDA7Ci0rCWN0eC0+dnBv cyA9IDA7Ci0rCU9QRU5TU0xfY2xlYW5zZShjdHgtPlYsIEFFU19CTE9DS19MRU5HVEgpOwotKwlP UEVOU1NMX2NsZWFuc2UoJmN0eC0+a3MsIHNpemVvZihBRVNfS0VZKSk7Ci0rCX0KLSsJCi0rCi0r c3RhdGljIGludCBmaXBzX3NldF9wcm5nX2tleShGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJY29u c3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbikKLSsJewotKwlG SVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rCWlmIChrZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0 ICYmIGtleWxlbiAhPSAzMikKLSsJCXsKLSsJCS8qIGVycm9yOiBpbnZhbGlkIGtleSBzaXplICov Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8 PCAzLCAmY3R4LT5rcyk7Ci0rCWlmIChrZXlsZW4gPT0gMTYpCi0rCQl7Ci0rCQltZW1jcHkoY3R4 LT50bXBfa2V5LCBrZXksIDE2KTsKLSsJCWN0eC0+a2V5ZWQgPSAyOwotKwkJfQotKwllbHNlCi0r CQljdHgtPmtleWVkID0gMTsKLSsJY3R4LT5zZWVkZWQgPSAwOwotKwljdHgtPnNlY29uZCA9IDA7 Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0rc3RhdGljIGludCBmaXBzX3NldF9wcm5nX3NlZWQoRklQ U19QUk5HX0NUWCAqY3R4LAotKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsIEZJUFNfUkFO RF9TSVpFX1Qgc2VlZGxlbikKLSsJewotKwlpbnQgaTsKLSsJaWYgKCFjdHgtPmtleWVkKQotKwkJ cmV0dXJuIDA7Ci0rCS8qIEluIHRlc3QgbW9kZSBzZWVkIGlzIGp1c3Qgc3VwcGxpZWQgZGF0YSAq LwotKwlpZiAoY3R4LT50ZXN0X21vZGUpCi0rCQl7Ci0rCQlpZiAoc2VlZGxlbiAhPSBBRVNfQkxP Q0tfTEVOR1RIKQotKwkJCXJldHVybiAwOwotKwkJbWVtY3B5KGN0eC0+Viwgc2VlZCwgQUVTX0JM T0NLX0xFTkdUSCk7Ci0rCQljdHgtPnNlZWRlZCA9IDE7Ci0rCQlyZXR1cm4gMTsKLSsJCX0KLSsJ LyogT3V0c2lkZSB0ZXN0IG1vZGUgWE9SIHN1cHBsaWVkIGRhdGEgd2l0aCBleGlzdGluZyBzZWVk ICovCi0rCWZvciAoaSA9IDA7IGkgPCBzZWVkbGVuOyBpKyspCi0rCQl7Ci0rCQljdHgtPlZbY3R4 LT52cG9zKytdIF49IHNlZWRbaV07Ci0rCQlpZiAoY3R4LT52cG9zID09IEFFU19CTE9DS19MRU5H VEgpCi0rCQkJewotKwkJCWN0eC0+dnBvcyA9IDA7Ci0rCQkJLyogU3BlY2lhbCBjYXNlIGlmIGZp cnN0IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxzCi0rIAkJCSAqIGJsb2NrIHNpemUgY2hlY2sg a2V5IGFuZCBzZWVkIGRvIG5vdCBtYXRjaC4KLSsgCQkJICovIAotKwkJCWlmIChjdHgtPmtleWVk ID09IDIpCi0rCQkJCXsKLSsJCQkJaWYgKCFtZW1jbXAoY3R4LT50bXBfa2V5LCBjdHgtPlYsIDE2 KSkKLSsJCQkJCXsKLSsJCQkJCVJBTkRlcnIoUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRCwKLSsJ CQkJCQlSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSk7Ci0rCQkJCQlyZXR1cm4g MDsKLSsJCQkJCX0KLSsJCQkJT1BFTlNTTF9jbGVhbnNlKGN0eC0+dG1wX2tleSwgMTYpOwotKwkJ CQljdHgtPmtleWVkID0gMTsKLSsJCQkJfQotKwkJCWN0eC0+c2VlZGVkID0gMTsKLSsJCQl9Ci0r CQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCi0raW50IGZpcHNfc2V0X3Rlc3RfbW9kZShGSVBTX1BS TkdfQ1RYICpjdHgpCi0rCXsKLSsJaWYgKGN0eC0+a2V5ZWQpCi0rCQl7Ci0rCQlSQU5EZXJyKFJB TkRfRl9GSVBTX1NFVF9URVNUX01PREUsUkFORF9SX1BSTkdfS0VZRUQpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCWN0eC0+dGVzdF9tb2RlID0gMTsKLSsJcmV0dXJuIDE7Ci0rCX0KLSsKLStpbnQg RklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKQotKwl7Ci0rCXJldHVybiBmaXBzX3NldF90ZXN0X21v ZGUoJnNjdHgpOwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAq ZHQpCi0rCXsKLSsJaWYgKCFzY3R4LnRlc3RfbW9kZSkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9G X0ZJUFNfUkFORF9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNUX01PREUpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCXJldHVy biAxOwotKwl9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19nZXRfZHQoRklQU19QUk5HX0NUWCAqY3R4 KQotKyAgICB7Ci0rI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rCUZJTEVUSU1FIGZ0OwotKyNl bHNlCi0rCXN0cnVjdCB0aW1ldmFsIHR2OwotKyNlbmRpZgotKwl1bnNpZ25lZCBjaGFyICpidWYg PSBjdHgtPkRUOwotKwotKyNpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCi0rCXVuc2lnbmVk IGxvbmcgcGlkOwotKyNlbmRpZgotKwotKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgotKwlHZXRT eXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOwotKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKGZ0 LmR3SGlnaERhdGVUaW1lICYgMHhmZik7Ci0rCWJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0 LmR3SGlnaERhdGVUaW1lID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFy KSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbM10gPSAodW5zaWdu ZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKLSsJYnVmWzRdID0g KHVuc2lnbmVkIGNoYXIpIChmdC5kd0xvd0RhdGVUaW1lICYgMHhmZik7Ci0rCWJ1Zls1XSA9ICh1 bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzZd ID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAxNikgJiAweGZmKTsKLSsJ YnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGltZSA+PiAyNCkgJiAweGZm KTsKLSsjZWxzZQotKwlnZXR0aW1lb2ZkYXkoJnR2LE5VTEwpOwotKwlidWZbMF0gPSAodW5zaWdu ZWQgY2hhcikgKHR2LnR2X3NlYyAmIDB4ZmYpOwotKwlidWZbMV0gPSAodW5zaWduZWQgY2hhcikg KCh0di50dl9zZWMgPj4gOCkgJiAweGZmKTsKLSsJYnVmWzJdID0gKHVuc2lnbmVkIGNoYXIpICgo dHYudHZfc2VjID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKCh0 di50dl9zZWMgPj4gMjQpICYgMHhmZik7Ci0rCWJ1Zls0XSA9ICh1bnNpZ25lZCBjaGFyKSAodHYu dHZfdXNlYyAmIDB4ZmYpOwotKwlidWZbNV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl91c2Vj ID4+IDgpICYgMHhmZik7Ci0rCWJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMg Pj4gMTYpICYgMHhmZik7Ci0rCWJ1Zls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHR2LnR2X3VzZWMg Pj4gMjQpICYgMHhmZik7Ci0rI2VuZGlmCi0rCWJ1Zls4XSA9ICh1bnNpZ25lZCBjaGFyKSAoY3R4 LT5jb3VudGVyICYgMHhmZik7Ci0rCWJ1Zls5XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGN0eC0+Y291 bnRlciA+PiA4KSAmIDB4ZmYpOwotKwlidWZbMTBdID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4LT5j b3VudGVyID4+IDE2KSAmIDB4ZmYpOwotKwlidWZbMTFdID0gKHVuc2lnbmVkIGNoYXIpICgoY3R4 LT5jb3VudGVyID4+IDI0KSAmIDB4ZmYpOwotKwotKwljdHgtPmNvdW50ZXIrKzsKLSsKLSsKLSsj aWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUwotKwlwaWQ9KHVuc2lnbmVkIGxvbmcpZ2V0cGlk KCk7Ci0rCWJ1ZlsxMl0gPSAodW5zaWduZWQgY2hhcikgKHBpZCAmIDB4ZmYpOwotKwlidWZbMTNd ID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDgpICYgMHhmZik7Ci0rCWJ1ZlsxNF0gPSAodW5z aWduZWQgY2hhcikgKChwaWQgPj4gMTYpICYgMHhmZik7Ci0rCWJ1ZlsxNV0gPSAodW5zaWduZWQg Y2hhcikgKChwaWQgPj4gMjQpICYgMHhmZik7Ci0rI2VuZGlmCi0rICAgIH0KLSsKLStzdGF0aWMg aW50IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICpjdHgsCi0rCQkJdW5zaWduZWQgY2hhciAqb3V0 LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbikKLSsJewotKwl1bnNpZ25lZCBjaGFyIFJbQUVTX0JM T0NLX0xFTkdUSF0sIElbQUVTX0JMT0NLX0xFTkdUSF07Ci0rCXVuc2lnbmVkIGNoYXIgdG1wW0FF U19CTE9DS19MRU5HVEhdOwotKwlpbnQgaTsKLSsJaWYgKGN0eC0+ZXJyb3IpCi0rCQl7Ci0rCQlS QU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdfRVJST1IpOwotKwkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCWlmICghY3R4LT5rZXllZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNf UkFORCxSQU5EX1JfTk9fS0VZX1NFVCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFjdHgt PnNlZWRlZCkKLSsJCXsKLSsJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfUFJOR19O T1RfU0VFREVEKTsKLSsJCXJldHVybiAwOwotKwkJfQotKwlmb3IgKDs7KQotKwkJewotKwkJaWYg KCFjdHgtPnRlc3RfbW9kZSkKLSsJCQlmaXBzX2dldF9kdChjdHgpOwotKwkJQUVTX2VuY3J5cHQo Y3R4LT5EVCwgSSwgJmN0eC0+a3MpOwotKwkJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5H VEg7IGkrKykKLSsJCQl0bXBbaV0gPSBJW2ldIF4gY3R4LT5WW2ldOwotKwkJQUVTX2VuY3J5cHQo dG1wLCBSLCAmY3R4LT5rcyk7Ci0rCQlmb3IgKGkgPSAwOyBpIDwgQUVTX0JMT0NLX0xFTkdUSDsg aSsrKQotKwkJCXRtcFtpXSA9IFJbaV0gXiBJW2ldOwotKwkJQUVTX2VuY3J5cHQodG1wLCBjdHgt PlYsICZjdHgtPmtzKTsKLSsJCS8qIENvbnRpbnVvdXMgUFJORyB0ZXN0ICovCi0rCQlpZiAoY3R4 LT5zZWNvbmQpCi0rCQkJewotKwkJCWlmIChmaXBzX3BybmdfZmFpbCkKLSsJCQkJbWVtY3B5KGN0 eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQkJaWYgKCFtZW1jbXAoUiwgY3R4LT5s YXN0LCBBRVNfQkxPQ0tfTEVOR1RIKSkKLSsJCQkJewotKwkgICAgCQkJUkFORGVycihSQU5EX0Zf RklQU19SQU5ELFJBTkRfUl9QUk5HX1NUVUNLKTsKLSsJCQkJY3R4LT5lcnJvciA9IDE7Ci0rCQkJ CWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsJCQkJcmV0dXJuIDA7Ci0rCQkJCX0KLSsJCQl9 Ci0rCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsJCWlmICghY3R4 LT5zZWNvbmQpCi0rCQkJewotKwkJCWN0eC0+c2Vjb25kID0gMTsKLSsJCQlpZiAoIWN0eC0+dGVz dF9tb2RlKQotKwkJCQljb250aW51ZTsKLSsJCQl9Ci0rCi0rCQlpZiAob3V0bGVuIDw9IEFFU19C TE9DS19MRU5HVEgpCi0rCQkJewotKwkJCW1lbWNweShvdXQsIFIsIG91dGxlbik7Ci0rCQkJYnJl YWs7Ci0rCQkJfQotKwotKwkJbWVtY3B5KG91dCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7Ci0rCQlv dXQgKz0gQUVTX0JMT0NLX0xFTkdUSDsKLSsJCW91dGxlbiAtPSBBRVNfQkxPQ0tfTEVOR1RIOwot KwkJfQotKwlyZXR1cm4gMTsKLSsJfQotKwotKwotK2ludCBGSVBTX3JhbmRfc2V0X2tleShjb25z dCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpFX1Qga2V5bGVuKQotKwl7Ci0rCWlu dCByZXQ7Ci0rCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rCXJldCA9IGZpcHNf c2V0X3Bybmdfa2V5KCZzY3R4LCBrZXksIGtleWxlbik7Ci0rCUNSWVBUT193X3VubG9jayhDUllQ VE9fTE9DS19SQU5EKTsKLSsJcmV0dXJuIHJldDsKLSsJfQotKwotK2ludCBGSVBTX3JhbmRfc2Vl ZChjb25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRfU0laRV9UIHNlZWRsZW4pCi0rCXsKLSsJaW50 IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0gZmlwc19z ZXRfcHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBzZWVkbGVuKTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENS WVBUT19MT0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rCi0raW50IEZJUFNfcmFu ZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNfUkFORF9TSVpFX1QgY291bnQpCi0rCXsK LSsJaW50IHJldDsKLSsJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJcmV0ID0g Zmlwc19yYW5kKCZzY3R4LCBvdXQsIGNvdW50KTsKLSsJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19M T0NLX1JBTkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0raW50IEZJUFNfcmFuZF9zdGF0dXMo dm9pZCkKLSsJewotKwlpbnQgcmV0OwotKwlDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQp OwotKwlyZXQgPSBzY3R4LnNlZWRlZDsKLSsJQ1JZUFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX1JB TkQpOwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCkK LSsJewotKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKwlmaXBzX3JhbmRfcHJu Z19yZXNldCgmc2N0eCk7Ci0rCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsJ fQotKwotK3N0YXRpYyB2b2lkIGZpcHNfZG9fcmFuZF9zZWVkKGNvbnN0IHZvaWQgKnNlZWQsIEZJ UFNfUkFORF9TSVpFX1Qgc2VlZGxlbikKLSsJewotKwlGSVBTX3JhbmRfc2VlZChzZWVkLCBzZWVk bGVuKTsKLSsJfQotKwotK3N0YXRpYyB2b2lkIGZpcHNfZG9fcmFuZF9hZGQoY29uc3Qgdm9pZCAq c2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVuLAotKwkJCQkJZG91YmxlIGFkZF9lbnRyb3B5 KQotKwl7Ci0rCUZJUFNfcmFuZF9zZWVkKHNlZWQsIHNlZWRsZW4pOwotKwl9Ci0rCi0rc3RhdGlj IGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfZmlwc19tZXRoPQotKyAgICB7Ci0rICAgIGZpcHNfZG9f cmFuZF9zZWVkLAotKyAgICBGSVBTX3JhbmRfYnl0ZXMsCi0rICAgIEZJUFNfcmFuZF9yZXNldCwK LSsgICAgZmlwc19kb19yYW5kX2FkZCwKLSsgICAgRklQU19yYW5kX2J5dGVzLAotKyAgICBGSVBT X3JhbmRfc3RhdHVzCi0rICAgIH07Ci0rCi0rY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9t ZXRob2Qodm9pZCkKLSt7Ci0rICByZXR1cm4gJnJhbmRfZmlwc19tZXRoOwotK30KLSsKLSsjZW5k aWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2Zp cHNfcmFuZC5oCi0tLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaAkyMDA5 LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw3NyBAQAotKy8qID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBB bGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9u LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0r ICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4K LSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93 aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0 LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qg bm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlz c2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVu c3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0r ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK LSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpZm5kZWYgSEVBREVSX0ZJUFNfUkFORF9ICi0rI2Rl ZmluZSBIRUFERVJfRklQU19SQU5EX0gKLSsKLSsjaW5jbHVkZSAiZGVzLmgiCi0rCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsj ZW5kaWYKLSsKLStpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5 LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbik7Ci0raW50IEZJUFNfcmFuZF9zZWVkKGNvbnN0IHZv aWQgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pOwotK2ludCBGSVBTX3JhbmRfYnl0ZXModW5z aWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7Ci0rCi0raW50IEZJUFNf cmFuZF90ZXN0X21vZGUodm9pZCk7Ci0rdm9pZCBGSVBTX3JhbmRfcmVzZXQodm9pZCk7Ci0raW50 IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOwotKwotK2ludCBGSVBTX3JhbmRf c3RhdHVzKHZvaWQpOwotKwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfbWV0aG9kKHZv aWQpOwotKwotKyNpZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlmCi0rI2VuZGlmCi0rI2Vu ZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9m aXBzX3JhbmRfc2VsZnRlc3QuYwotLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4Ljgw MTAwMjI3NiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19y YW5kX3NlbGZ0ZXN0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0w LDAgKzEsMzcxIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhl 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 IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0 cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Zp cHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlw c19yYW5kLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKwotKwotK3R5cGVkZWYgc3Ry dWN0Ci0rCXsKLSsJdW5zaWduZWQgY2hhciBEVFsxNl07Ci0rCXVuc2lnbmVkIGNoYXIgVlsxNl07 Ci0rCXVuc2lnbmVkIGNoYXIgUlsxNl07Ci0rCX0gQUVTX1BSTkdfVFY7Ci0rCi0rLyogVGhlIGZv bGxvd2luZyB0ZXN0IHZlY3RvcnMgYXJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIFJHTlZTIHNw ZWMgKi8KLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTI4X2tleVsxNl0gPQotKwkJezB4 ZjMsMHhiMSwweDY2LDB4NmQsMHgxMywweDYwLDB4NzIsMHg0MiwKLSsJCSAweGVkLDB4MDYsMHgx YywweGFiLDB4YjgsMHhkNCwweDYyLDB4MDJ9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNf MTI4X3R2W10gPSB7Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4 LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTks MHgyMiwweGY5fSwKLSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg1OSwweDUzLDB4MWUsMHhkMSwweDNiLDB4YjAsMHhj MCwweDU1LAotKwkJIDB4ODQsMHg3OSwweDY2LDB4ODUsMHhjMSwweDJmLDB4NzYsMHg0MX0KLSsJ fSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIz LDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmF9 LAotKwkJCQkvKiBWICovCi0rCQl7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJ CS8qIFIgKi8KLSsJCXsweDdjLDB4MjIsMHgyYywweGY0LDB4Y2EsMHg4ZiwweGEyLDB4NGMsCi0r CQkgMHgxYywweDljLDB4YjYsMHg0MSwweGE5LDB4ZjMsMHgyMiwweDBkfQotKwl9LAotKwl7Ci0r CQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYy LAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmYn0sCi0rCQkJCS8q IFYgKi8KLSsJCXsweGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkg MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwot KwkJezB4OGEsMHhhYSwweDAwLDB4MzksMHg2NiwweDY3LDB4NWIsMHhlNSwKLSsJCSAweDI5LDB4 MTQsMHgyOCwweDgxLDB4YTksMHg0ZCwweDRlLDB4Yzd9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQg Ki8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhk NywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZjfSwKLSsJCQkJLyogViAqLwotKwkJ ezB4ZjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg4OCww eGRkLDB4YTQsMHg1NiwweDMwLDB4MjQsMHgyMywweGU1LAotKwkJIDB4ZjYsMHg5ZCwweGE1LDB4 N2UsMHg3YiwweDk1LDB4YzcsMHgzYX0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4 ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKLSsJCSAweGQ3LDB4MWQsMHg0 YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmR9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmOCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDA1LDB4MjUsMHg5Miww eDQ2LDB4NjEsMHg3OSwweGQyLDB4Y2IsCi0rCQkgMHg3OCwweGM0LDB4MGIsMHgxNCwweDBhLDB4 NWEsMHg5YSwweGM4fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhlNiwweGIzLDB4 YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAotKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhi MCwweGU5LDB4MjMsMHg3N30sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZiwweGZlfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MGQsMHhkNSwweGEwLDB4MzYsMHg3YSww eDU5LDB4MjYsMHhiYywKLSsJCSAweDQ4LDB4ZDksMHgzOCwweGJmLDB4ZjAsMHg4NSwweDhmLDB4 ZWF9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4 MmEsMHgyMywweGZhLDB4NjIsCi0rCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgy MywweDc4fSwKLSsJCQkJLyogViAqLwotKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwKLSsJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9 LAotKwkJCQkvKiBSICovCi0rCQl7MHhhZSwweDUzLDB4ODcsMHhlZSwweDhjLDB4ZDksMHgxMiww eGY1LAotKwkJIDB4NzMsMHg1MywweGFlLDB4MDMsMHhmOSwweGQ1LDB4MTMsMHgzM30KLSsJfSwK LSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5WzI0XSA9Ci0rCQl7MHgx NSwweGQ4LDB4NzgsMHgwZCwweDYyLDB4ZDMsMHgyNSwweDZlLAotKwkJIDB4NDQsMHg2NCwweDEw LDB4MTMsMHg2MCwweDJiLDB4YTksMHhiYywKLSsJCSAweDRhLDB4ZmIsMHhjYSwweGViLDB4NGMs MHg4YiwweDk5LDB4M2J9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMTkyX3R2W10gPSB7 Ci0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSww eDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRifSwK LSsJCQkJLyogViAqLwotKwkJezB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkv KiBSICovCi0rCQl7MHgxNywweDA3LDB4ZDUsMHgyOCwweDE5LDB4NzksMHgxZSwweGVmLAotKwkJ IDB4YTUsMHgwYywweGJmLDB4MjUsMHhlNSwweDU2LDB4YjQsMHg5M30KLSsJfSwKLSsJewotKwkJ CQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwK LSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGN9LAotKwkJCQkvKiBW ICovCi0rCQl7MHhjMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJ CXsweDkyLDB4OGQsMHhiZSwweDA3LDB4ZGQsMHhjNywweDU4LDB4YzAsCi0rCQkgMHg2ZiwweDM1 LDB4NDEsMHg5YiwweDE3LDB4YzksMHhiZCwweDlifQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICov Ci0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYs MHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0ZH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsw eGUwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4ZDUsMHhk ZSwweGY0LDB4NTAsMHhmMywweGI3LDB4MTAsMHg0ZSwKLSsJCSAweGI4LDB4YzYsMHhmOCwweGNm LDB4ZTIsMHhiMSwweGNhLDB4YTJ9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNm LDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2Qs MHhhNCwweDI0LDB4NzgsMHhmMywweDRlfSwKLSsJCQkJLyogViAqLwotKwkJezB4ZjAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHhjZSwweDI5LDB4MDgsMHg0 MywweGZjLDB4MzQsMHg0MSwweGU3LAotKwkJIDB4NDcsMHg4ZiwweGIzLDB4NjYsMHgyYiwweDQ2 LDB4YjEsMHhiYn0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4M2YsMHhkOCwweGZm LDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKLSsJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQs MHg3OCwweGYzLDB4NGZ9LAotKwkJCQkvKiBWICovCi0rCQl7MHhmOCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweGIzLDB4MjYsMHgwZiwweGY1LDB4ZDYsMHhj YSwweGE4LDB4YmYsCi0rCQkgMHg4OSwweGI4LDB4NWUsMHgyZiwweDIyLDB4NTYsMHg5MiwweDJm fQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgw LDB4NjksMHg4YiwweGMxLAotKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMs MHhjOX0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiww eGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZlfSwK LSsJCQkJLyogUiAqLwotKwkJezB4MDUsMHhlYiwweDE4LDB4NTIsMHgzNCwweDQzLDB4MDAsMHg0 MywKLSsJCSAweDZlLDB4NWEsMHhhNSwweGZlLDB4N2IsMHgzMiwweGM0LDB4MmR9Ci0rCX0sCi0r CXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhi LDB4YzEsCi0rCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweGNhfSwKLSsJ CQkJLyogViAqLwotKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwK LSsJCSAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9LAotKwkJCQkvKiBS ICovCi0rCQl7MHgxNSwweDNjLDB4ZTgsMHhkMSwweDA0LDB4YzcsMHhhZCwweDUwLAotKwkJIDB4 MGIsMHhmMCwweDA3LDB4MTYsMHhlNywweDU2LDB4N2EsMHhlYX0KLSsJfSwKLSt9OwotKwotK3N0 YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18yNTZfa2V5WzMyXSA9Ci0rCQl7MHg2ZCwweDE0LDB4MDYs MHg2YywweGI2LDB4ZDgsMHgyMSwweDJkLAotKwkJIDB4ODIsMHg4ZCwweGZhLDB4ZjIsMHg3YSww eDAzLDB4YjcsMHg5ZiwKLSsJCSAweDBjLDB4YzcsMHgzZSwweGNkLDB4NzYsMHhlYiwweGVlLDB4 YjUsCi0rCQkgMHgyMSwweDA1LDB4OGMsMHg0ZiwweDMxLDB4N2EsMHg4MCwweGJifTsKLSsKLStz dGF0aWMgQUVTX1BSTkdfVFYgYWVzXzI1Nl90dltdID0gewotKwl7Ci0rCQkJCS8qIERUICovCi0r CQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhh OSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4OH0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweDgw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJCQkJLyogUiAqLwotKwkJezB4MzUsMHhjNyww eGVmLDB4YTcsMHg3OCwweDRkLDB4MjksMHhiYywKLSsJCSAweDgyLDB4NzksMHg5OSwweGZiLDB4 ZDAsMHhiMywweDNiLDB4NzJ9Ci0rCX0sCi0rCXsKLSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4 M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgz NCwweDc0LDB4OGUsMHg5ZSwweDg5fSwKLSsJCQkJLyogViAqLwotKwkJezB4YzAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICovCi0rCQl7MHg2YywweGY0LDB4NDIsMHg1ZCww eGM3LDB4MDQsMHgxYSwweDQxLAotKwkJIDB4MjgsMHgyYSwweDc4LDB4YTksMHhiMCwweDEyLDB4 YzQsMHg5NX0KLSsJfSwKLSsJewotKwkJCQkvKiBEVCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4 ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4 ZSwweDllLDB4OGF9LAotKwkJCQkvKiBWICovCi0rCQl7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLAotKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMH0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDE2LDB4OTAsMHhhNCwweGZmLDB4N2IsMHg3ZSww eGI5LDB4MzAsCi0rCQkgMHhkYiwweDY3LDB4NGIsMHhhYywweDJkLDB4ZTEsMHhkMSwweDc1fQot Kwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4 YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4 Yn0sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsCi0rCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLSsJ CQkJLyogUiAqLwotKwkJezB4MTQsMHg2ZiwweGY1LDB4OTUsMHhhMSwweDQ2LDB4NjUsMHgzMCwK LSsJCSAweGJjLDB4NTcsMHhlMiwweDRhLDB4ZjcsMHg0NSwweDYyLDB4MDV9Ci0rCX0sCi0rCXsK LSsJCQkJLyogRFQgKi8KLSsJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4 ZDUsCi0rCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZSwweDhjfSwKLSsJCQkJ LyogViAqLwotKwkJezB4ZjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLSsJ CSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotKwkJCQkvKiBSICov Ci0rCQl7MHg5NiwweGUyLDB4YjQsMHgxZSwweDY2LDB4NWUsMHgwZiwweGE0LAotKwkJIDB4YzUs MHhjZCwweGEyLDB4MDcsMHhjYywweGI3LDB4OTQsMHg0MH0KLSsJfSwKLSsJewotKwkJCQkvKiBE VCAqLwotKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKLSsJCSAw eGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDlmLDB4MDZ9LAotKwkJCQkvKiBWICovCi0r CQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAotKwkJIDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZX0sCi0rCQkJCS8qIFIgKi8KLSsJCXsweDYx LDB4Y2UsMHgxZCwweDZhLDB4NDgsMHg3NSwweDk3LDB4MjgsCi0rCQkgMHg0YiwweDQxLDB4ZGUs MHgxOCwweDQ0LDB4NGYsMHg1NiwweGVjfQotKwl9LAotKwl7Ci0rCQkJCS8qIERUICovCi0rCQl7 MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAotKwkJIDB4ZjIsMHhhOSww eDRlLDB4MzQsMHg3NCwweDhlLDB4OWYsMHgwN30sCi0rCQkJCS8qIFYgKi8KLSsJCXsweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCi0rCQkgMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZiwweGZmfSwKLSsJCQkJLyogUiAqLwotKwkJezB4NTIsMHg4OSwweDU5 LDB4NzksMHgyZCwweGFhLDB4MjgsMHhiMywKLSsJCSAweGIwLDB4OGEsMHgzZSwweDcwLDB4ZmEs MHg3MSwweDU5LDB4ODR9Ci0rCX0sCi0rfTsKLSsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9ybmco KQotKyAgICB7Ci0rICAgIGFlc18xOTJfdHZbMF0uVlswXSsrOwotKyAgICB9Ci0rCi0rI2RlZmlu ZSBmaXBzX3JhbmRfdGVzdChrZXksIHR2KSBcCi0rCWRvX3JhbmRfdGVzdChrZXksIHNpemVvZiBr ZXksIHR2LCBzaXplb2YodHYpL3NpemVvZihBRVNfUFJOR19UVikpCi0rCi0rc3RhdGljIGludCBk b19yYW5kX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLAotKwkJCUFFU19QUk5H X1RWICp0diwgaW50IG50dikKLSsJewotKwl1bnNpZ25lZCBjaGFyIFJbMTZdOwotKwlpbnQgaTsK LSsJaWYgKCFGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbikpCi0rCQlyZXR1cm4gMDsKLSsJ Zm9yIChpID0gMDsgaSA8IG50djsgaSsrKQotKwkJewotKwkJRklQU19yYW5kX3NlZWQodHZbaV0u ViwgMTYpOwotKwkJRklQU19yYW5kX3NldF9kdCh0dltpXS5EVCk7Ci0rCQlGSVBTX3JhbmRfYnl0 ZXMoUiwgMTYpOwotKwkJaWYgKG1lbWNtcChSLCB0dltpXS5SLCAxNikpCi0rCQkJcmV0dXJuIDA7 Ci0rCQl9Ci0rCXJldHVybiAxOwotKwl9Ci0rCQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZygp Ci0rCXsKLSsJRklQU19yYW5kX3Jlc2V0KCk7Ci0rCWlmICghRklQU19yYW5kX3Rlc3RfbW9kZSgp KQotKwkJewotKwkJRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcsRklQU19SX1NFTEZU RVNUX0ZBSUxFRCk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsJaWYgKCFmaXBzX3JhbmRfdGVzdChh ZXNfMTI4X2tleSxhZXNfMTI4X3R2KQotKwkJfHwgIWZpcHNfcmFuZF90ZXN0KGFlc18xOTJfa2V5 LCBhZXNfMTkyX3R2KQotKwkJfHwgIWZpcHNfcmFuZF90ZXN0KGFlc18yNTZfa2V5LCBhZXNfMjU2 X3R2KSkKLSsJCXsKLSsJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HLEZJUFNfUl9T RUxGVEVTVF9GQUlMRUQpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rCUZJUFNfcmFuZF9yZXNldCgp OwotKwlyZXR1cm4gMTsKLSsJfQotKwotKyNlbmRpZgotZGlmZiAtdXAgL2Rldi9udWxsIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCi0tLS0gL2Rldi9udWxs CTIwMDktMTEtMDQgMTI6MDA6NTguODAxMDAyMjc2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAw MDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMjQ4IEBACi0rLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5 OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRl bgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KLSsgKiBUaGUgaW1wbGVt ZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wu Ci0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1j b21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy ZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXBwbHkgdG8gYWxs IGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKLSsg KiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NM IGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNv dmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICogZXhjZXB0IHRoYXQgdGhlIGhv bGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCi0rICogCi0rICogQ29weXJp Z2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGlj ZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCi0rICogSWYgdGhpcyBw YWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBh dHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5 IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2Ug YXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRl eHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICogCi0rICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0r ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSsgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdl bWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCi0r ICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91 aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dy YXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3Bl Y2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCi0rICogICAgdGhlIGFw cHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25v d2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgotKyAqIAotKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECi0rICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsgKiBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSsgKiBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1 dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKLSsgKiBk ZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2Rl IGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3Ry aWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0K LSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g Ci0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBk aXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4K LSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxj dHlwZS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9m aXBzX3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9ibi5oPgotKwotKyNpbmNsdWRlICJlX29zLmgiCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMK LStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBG SVBTIFJBTkQgc3VwcG9ydFxuIik7Ci0rICAgIHJldHVybigwKTsKLSt9Ci0rCi0rI2Vsc2UKLSsK LSsjaW5jbHVkZSAiZmlwc191dGwuaCIKLSsKLSt0eXBlZGVmIHN0cnVjdAotKwl7Ci0rCXVuc2ln bmVkIGNoYXIgRFRbMTZdOwotKwl1bnNpZ25lZCBjaGFyIFZbMTZdOwotKwl1bnNpZ25lZCBjaGFy IFJbMTZdOwotKwl9IEFFU19QUk5HX01DVDsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNf MTI4X21jdF9rZXlbMTZdID0KLSsJezB4OWYsMHg1YiwweDUxLDB4MjAsMHgwYiwweGYzLDB4MzQs MHhiNSwKLSsJIDB4ZDgsMHgyYiwweGU4LDB4YzMsMHg3MiwweDU1LDB4YzgsMHg0OH07Ci0rCi0r c3RhdGljIEFFU19QUk5HX01DVCBhZXNfMTI4X21jdF90diA9IHsKLSsJCQkvKiBEVCAqLwotKwl7 MHg2MywweDc2LDB4YmIsMHhlNSwweDI5LDB4MDIsMHhiYSwweDNiLAotKwkgMHg2NywweGM5LDB4 MjUsMHhmYSwweDcwLDB4MWYsMHgxMSwweGFjfSwKLSsJCQkvKiBWICovCi0rCXsweDU3LDB4MmMs MHg4ZSwweDc2LDB4ODcsMHgyNiwweDQ3LDB4OTcsCi0rCSAweDdlLDB4NzQsMHhmYiwweGRkLDB4 YzQsMHg5NSwweDAxLDB4ZDF9LAotKwkJCS8qIFIgKi8KLSsJezB4NDgsMHhlOSwweGJkLDB4MGQs MHgwNiwweGVlLDB4MTgsMHhmYiwKLSsJIDB4ZTQsMHg1NywweDkwLDB4ZDUsMHhjMywweGZjLDB4 OWIsMHg3M30KLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbWN0X2tleVsy NF0gPQotKwl7MHhiNywweDZjLDB4MzQsMHhkMSwweDA5LDB4NjcsMHhhYiwweDczLAotKwkgMHg0 ZCwweDVhLDB4ZDUsMHgzNCwweDk4LDB4MTYsMHgwYiwweDkxLAotKwkgMHhiYywweDM1LDB4NTEs MHgxNiwweDZiLDB4YWUsMHg5MywweDhhfTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfTUNUIGFlc18x OTJfbWN0X3R2ID0gewotKwkJCS8qIERUICovCi0rCXsweDg0LDB4Y2UsMHgyMiwweDdkLDB4OTEs MHg1YSwweGEzLDB4YzksCi0rCSAweDg0LDB4M2MsMHgwYSwweGIzLDB4YTksMHg2MywweDE1LDB4 NTJ9LAotKwkJCS8qIFYgKi8KLSsJezB4YjYsMHhhZiwweGU2LDB4OGYsMHg5OSwweDllLDB4OTAs MHg2NCwKLSsJIDB4ZGQsMHhjNywweDdhLDB4YzEsMHhiYiwweDkwLDB4M2EsMHg2ZH0sCi0rCQkJ LyogUiAqLwotKwl7MHhmYywweDg1LDB4NjAsMHg5YSwweDI5LDB4NmYsMHhlZiwweDIxLAotKwkg MHhkZCwweDg2LDB4MjAsMHgzMiwweDhhLDB4MjksMHg2ZiwweDQ3fQotK307Ci0rCi0rc3RhdGlj IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5WzMyXSA9Ci0rCXsweDliLDB4MDUsMHhjOCww eDY4LDB4ZmYsMHg0NywweGY4LDB4M2EsCi0rCSAweGE2LDB4M2EsMHhhOCwweGNiLDB4NGUsMHg3 MSwweGIyLDB4ZTAsCi0rCSAweGI4LDB4N2UsMHhmMSwweDM3LDB4YjYsMHhiNCwweGY2LDB4NmQs Ci0rCSAweDg2LDB4MzIsMHhmYywweDFmLDB4NWUsMHgxZCwweDFlLDB4NTB9OwotKwotK3N0YXRp YyBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7Ci0rCQkJLyogRFQgKi8KLSsJezB4MzEs MHg2ZSwweDM1LDB4OWEsMHhiMSwweDQ0LDB4ZjAsMHhlZSwKLSsJIDB4NjIsMHg2ZCwweDA0LDB4 NDYsMHhlMCwweGEzLDB4OTIsMHg0Y30sCi0rCQkJLyogViAqLwotKwl7MHg0ZiwweGNkLDB4YzEs MHg4NywweDgyLDB4MWYsMHg0ZCwweGExLAotKwkgMHgzZSwweDBlLDB4NTYsMHg0NCwweDU5LDB4 ZTgsMHg4MywweGNhfSwKLSsJCQkvKiBSICovCi0rCXsweGM4LDB4ODcsMHhjMiwweDYxLDB4NWIs MHhkMCwweGI5LDB4ZTEsCi0rCSAweGU3LDB4ZjMsMHg4YiwweGQ3LDB4NWIsMHhkNSwweGYxLDB4 OGR9Ci0rfTsKLSsKLStzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsaW50 IG4pCi0rICAgIHsKLSsgICAgd2hpbGUobi0tID4gMCkKLSsJewotKwlwcmludGYoIiAlMDJ4Iiwq YisrKTsKLSsJfQotKyAgICB9Ci0rCi0rc3RhdGljIHZvaWQgY29tcGFyZShjb25zdCB1bnNpZ25l ZCBjaGFyICpyZXN1bHQsY29uc3QgdW5zaWduZWQgY2hhciAqZXhwZWN0ZWQsCi0rCQkgICAgaW50 IG4pCi0rICAgIHsKLSsgICAgaW50IGk7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgbiA7ICsraSkK LSsJaWYocmVzdWx0W2ldICE9IGV4cGVjdGVkW2ldKQotKwkgICAgewotKwkgICAgcHV0cygiUmFu ZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7Ci0rCSAgICBkdW1wKHJlc3VsdCxuKTsKLSsJICAgIHB1 dHMoIlxuICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Iik7Ci0rCSAgICBkdW1wKGV4cGVjdGVkLG4p OwotKwkgICAgcHV0Y2hhcignXG4nKTsKLSsJICAgIEVYSVQoMSk7Ci0rCSAgICB9Ci0rICAgIH0K LSsKLSsKLStzdGF0aWMgdm9pZCBydW5fdGVzdCh1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXls ZW4sIEFFU19QUk5HX01DVCAqdHYpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMTZd LCBkdFsxNl07Ci0rICAgIGludCBpLCBqOwotKyAgICBGSVBTX3JhbmRfcmVzZXQoKTsKLSsgICAg RklQU19yYW5kX3Rlc3RfbW9kZSgpOwotKyAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxl bik7Ci0rICAgIEZJUFNfcmFuZF9zZWVkKHR2LT5WLCAxNik7Ci0rICAgIG1lbWNweShkdCwgdHYt PkRULCAxNik7Ci0rICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQotKwl7Ci0rICAgIAlG SVBTX3JhbmRfc2V0X2R0KGR0KTsKLSsJRklQU19yYW5kX2J5dGVzKGJ1ZiwgMTYpOwotKwkvKiBJ bmNyZW1lbnQgRFQgKi8KLSsJZm9yIChqID0gMTU7IGogPj0gMDsgai0tKQotKwkJewotKwkJZHRb al0rKzsKLSsJCWlmIChkdFtqXSkKLSsJCQlicmVhazsKLSsJCX0KLSsJfQotKwotKyAgICBjb21w YXJlKGJ1Zix0di0+UiwgMTYpOwotKyAgICB9Ci0rCi0raW50IG1haW4oKQotKwl7Ci0rCXJ1bl90 ZXN0KGFlc18xMjhfbWN0X2tleSwgMTYsICZhZXNfMTI4X21jdF90dik7Ci0rCXByaW50ZigiRklQ UyBQUk5HIHRlc3QgMSBkb25lXG4iKTsKLSsJcnVuX3Rlc3QoYWVzXzE5Ml9tY3Rfa2V5LCAyNCwg JmFlc18xOTJfbWN0X3R2KTsKLSsJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAyIGRvbmVcbiIpOwot KwlydW5fdGVzdChhZXNfMjU2X21jdF9rZXksIDMyLCAmYWVzXzI1Nl9tY3RfdHYpOwotKwlwcmlu dGYoIkZJUFMgUFJORyB0ZXN0IDMgZG9uZVxuIik7Ci0rCXJldHVybiAwOwotKwl9Ci0rCi0rI2Vu ZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9m aXBzX3JzYV9zZWxmdGVzdC5jCi0tLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTguODAx MDAyMjc2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBzX3Jz YV9zZWxmdGVzdC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCww ICsxLDQzOSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcg VGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRp c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0 aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl Ci0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUg bXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQg Ik9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3Ig cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICog ICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVh c2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUu IFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJP cGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3 aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFBy b2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZl ciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC WSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT OwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkg T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUg PHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5z c2xjb25mLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3N0YXRpYyB1bnNpZ25lZCBj aGFyIG5bXSA9Ci0rIlx4MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4 XHhBQ1x4MkJceDlEXHhBOFx4NzEiCi0rIlx4RjdceDM2XHg4RFx4MDdceEVFXHhENFx4MTBceDQz XHhBNFx4NDBceEQ2XHhCNlx4RjBceDc0XHg1NFx4RjUiCi0rIlx4MUZceEI4XHhERlx4QkFceEFG XHgwM1x4NUNceDAyXHhBQlx4NjFceEVBXHg0OFx4Q0VceEVCXHg2Rlx4Q0QiCi0rIlx4NDhceDc2 XHhFRFx4NTJceDBEXHg2MFx4RTFceEVDXHg0Nlx4MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAi Ci0rIlx4N0ZceEFGXHhCOFx4RTBceEEzXHhERlx4QzdceDM3XHg3Mlx4M0VceEU2XHhCNFx4Qjdc eEQ5XHgzQVx4MjUiCi0rIlx4ODRceEVFXHg2QVx4NjRceDlEXHgwNlx4MDlceDUzXHg3NFx4ODhc eDM0XHhCMlx4NDVceDQ1XHg5OFx4MzkiCi0rIlx4NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFc eEE1XHgxRlx4NTJceDdBXHg5QVx4NDFceEY2XHhDMVx4NjgiCi0rIlx4N0ZceEUyXHg1M1x4NzJc eDk4XHhDQVx4MkFceDhGXHg1OVx4NDZceEY4XHhFNVx4RkRceDA5XHgxRFx4QkQiCi0rIlx4Q0Ii OwotKwotKwotK3N0YXRpYyBpbnQgc2V0cnNha2V5KFJTQSAqa2V5KQotKyAgICB7Ci0rICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKLSsKLSsgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KLSsiXHgwMFx4QTVceERBXHhGQ1x4NTNceDQxXHhGQVx4 RjJceDg5XHhDNFx4QjlceDg4XHhEQlx4MzBceEMxXHhDRCIKLSsiXHhGOFx4M0ZceDMxXHgyNVx4 MUVceDA2XHg2OFx4QjRceDI3XHg4NFx4ODFceDM4XHgwMVx4NTdceDk2XHg0MSIKLSsiXHhCMlx4 OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2 OSIKLSsiXHhENlx4ODdceDBEXHhBMlx4QzBceDgyXHhBOVx4MzlceEUzXHg3Rlx4RENceEI4XHgy RVx4QzlceDNFXHhEQSIKLSsiXHhDOVx4N0ZceEYzXHhBRFx4NTlceDUwXHhBQ1x4Q0ZceEJDXHgx MVx4MUNceDc2XHhGMVx4QTlceDUyXHg5NCIKLSsiXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2 Q1x4MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKLSsiXHg5M1x4OTlceDI2XHhF RFx4NEZceDc0XHhBMVx4M0VceEREXHhGQlx4RTFceEExXHhDRVx4Q0NceDQ4XHg5NCIKLSsiXHhB Rlx4OTRceDI4XHhDMlx4QjdceEI4XHg4OFx4M0ZceEU0XHg0Nlx4M0FceDRCXHhDOFx4NUJceDFD XHhCMyIKLSsiXHhDMSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9 Ci0rIlx4MDBceEVFXHhDRlx4QUVceDgxXHhCMVx4QjlceEIzXHhDOVx4MDhceDgxXHgwQlx4MTBc eEExXHhCNVx4NjAiCi0rIlx4MDFceDk5XHhFQlx4OUZceDQ0XHhBRVx4RjRceEZEXHhBNFx4OTNc eEI4XHgxQVx4OUVceDNEXHg4NFx4RjYiCi0rIlx4MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURc eDFFXHgzQlx4N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCi0rIlx4MkRceDVCXHgyNVx4MjFc eDc2XHg0NVx4OURceDFGXHgzOVx4NzVceDQxXHhCQVx4MkFceDU4XHhGQlx4NjUiCi0rIlx4OTki OwotKwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBxW10gPQotKyJceDAwXHhDOVx4 N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5Igot KyJceDM1XHgzRlx4NkNceDQyXHhEMFx4ODhceDY2XHhCMVx4RDBceDVBXHgwRlx4MjBceDM1XHgw Mlx4OEJceDlEIgotKyJceDg2XHg5OFx4NDBceEI0XHgxNlx4NjZceEI0XHgyRVx4OTJceEVBXHgw RFx4QTNceEI0XHgzMlx4MDRceEI1IgotKyJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgx Nlx4QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1IgotKyJceDAzIjsKLSsKLSsgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZG1wMVtdID0KLSsiXHg1NFx4NDlceDRDXHhBNlx4M0Vc eEJBXHgwM1x4MzdceEU0XHhFMlx4NDBceDIzXHhGQ1x4RDZceDlBXHg1QSIKLSsiXHhFQlx4MDdc eEREXHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIK LSsiXHhEOVx4NDlceDA5XHg3NVx4RUFceEI3XHg3NFx4MTRceEZGXHg1OVx4QzFceEY3XHg2OVx4 MkVceDlBXHgyRSIKLSsiXHgyMFx4MkJceDM4XHhGQ1x4OTFceDBBXHg0N1x4NDFceDc0XHhBRFx4 QzlceDNDXHgxRlx4NjdceEM5XHg4MSI7Ci0rCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGRtcTFbXSA9Ci0rIlx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFc eEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCi0rIlx4NjFceEFEXHhCRFx4M0FceDhBXHg3RVx4OTlc eDFDXHg1Q1x4MDVceDU2XHhBOVx4NENceDMxXHg0Nlx4QTciCi0rIlx4RjlceDgwXHgzRlx4OEZc eDZGXHg4QVx4RTNceDQyXHhFOVx4MzFceEZEXHg4QVx4RTRceDdBXHgyMlx4MEQiCi0rIlx4MUJc eDk5XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4 M0QiOwotKyAgICAKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXFtcFtdID0KLSsi XHgwMFx4QjBceDZDXHg0Rlx4REFceEJCXHg2M1x4MDFceDE5XHg4RFx4MjZceDVCXHhEQlx4QUVc eDk0XHgyMyIKLSsiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdc eDdGXHhDRFx4MzlceEUyXHgxMSIKLSsiXHg5Rlx4QzlceDg2XHgzMlx4MTVceDRGXHg1OFx4ODNc eEIxXHg2N1x4QTlceDY3XHhCRlx4NDBceDJCXHg0RSIKLSsiXHg5RVx4MkVceDBGXHg5Nlx4NTZc eEU2XHg5OFx4RUFceDM2XHg2Nlx4RURceEZCXHgyNVx4NzlceDgwXHgzOSIKLSsiXHhGNyI7Ci0r Ci0rICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBzaXplb2YobiktMSwga2V5LT5uKTsKLSsgICAg a2V5LT5lID0gQk5fYmluMmJuKGUsIHNpemVvZihlKS0xLCBrZXktPmUpOwotKyAgICBrZXktPmQg PSBCTl9iaW4yYm4oZCwgc2l6ZW9mKGQpLTEsIGtleS0+ZCk7Ci0rICAgIGtleS0+cCA9IEJOX2Jp bjJibihwLCBzaXplb2YocCktMSwga2V5LT5wKTsKLSsgICAga2V5LT5xID0gQk5fYmluMmJuKHEs IHNpemVvZihxKS0xLCBrZXktPnEpOwotKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwg c2l6ZW9mKGRtcDEpLTEsIGtleS0+ZG1wMSk7Ci0rICAgIGtleS0+ZG1xMSA9IEJOX2JpbjJibihk bXExLCBzaXplb2YoZG1xMSktMSwga2V5LT5kbXExKTsKLSsgICAga2V5LT5pcW1wID0gQk5fYmlu MmJuKGlxbXAsIHNpemVvZihpcW1wKS0xLCBrZXktPmlxbXApOwotKyAgICByZXR1cm4gMTsKLSsg ICAgfQotKwotK3ZvaWQgRklQU19jb3JydXB0X3JzYSgpCi0rICAgIHsKLSsgICAgblswXSsrOwot KyAgICB9Ci0rCi0rLyogS25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3Zl IFJTQSBwcml2YXRlIGtleSBzaWduaW5nCi0rICoga2F0X3Ricy4KLSsgKi8KLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBrYXRfdGJzW10gPSAiT3BlblNTTCBGSVBTIDE0MC0yIFB1Ymxp YyBLZXkgUlNBIEtBVCI7Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9Q U1NfU0hBMVtdID0gewotKyAgMHgyRCwgMHhBRiwgMHg2RSwgMHhDMiwgMHg5OCwgMHhGQiwgMHg4 QSwgMHhBMSwgMHhCOSwgMHg0NiwgMHhEQSwgMHgwRiwKLSsgIDB4MDEsIDB4MUUsIDB4MzcsIDB4 OTMsIDB4QzIsIDB4NTUsIDB4MjcsIDB4RTQsIDB4MUQsIDB4RDIsIDB4OTAsIDB4QkIsCi0rICAw eEY0LCAweEJGLCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3 LCAweEY4LCAweEQzLAotKyAgMHhEMSwgMHhERiwgMHhFNywgMHhCRSwgMHg4MCwgMHgwNSwgMHhD MywgMHhCNSwgMHhDNywgMHg4MywgMHhENSwgMHg0QywKLSsgIDB4N0YsIDB4NDksIDB4RkIsIDB4 M0YsIDB4MjksIDB4OUIsIDB4RTEsIDB4MTIsIDB4NTEsIDB4NjAsIDB4RDAsIDB4QTcsCi0rICAw eDBELCAweEE5LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNG LCAweDlCLCAweEY1LAotKyAgMHhCNiwgMHhGMywgMHhGMiwgMHg1RSwgMHg3NCwgMHhDOSwgMHg4 MywgMHg4MSwgMHg0NywgMHhGMCwgMHhDNSwgMHg0NSwKLSsgIDB4MEEsIDB4RTksIDB4OEUsIDB4 MzgsIDB4RDcsIDB4MTgsIDB4QzYsIDB4MkEsIDB4MEYsIDB4RjgsIDB4QjcsIDB4MzEsCi0rICAw eEQ2LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlG LCAweEJBLCAweEU4LAotKyAgMHgyMywgMHhCNSwgMHg3RiwgMHhEQywgMHgwOCwgMHhFQSwgMHhE NSwgMHgyNiwgMHgxRSwgMHgyMCwgMHgyNSwgMHg4NCwKLSsgIDB4MjYsIDB4QzYsIDB4NzksIDB4 QzksIDB4OUIsIDB4M0QsIDB4N0UsIDB4QTkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGthdF9SU0FfUFNTX1NIQTIyNFtdID0gewotKyAgMHgzOSwgMHg0QSwgMHg2QSwgMHgy MCwgMHhCQywgMHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhDNSwgMHg1OCwgMHhBNywKLSsgIDB4 RkUsIDB4ODEsIDB4QzQsIDB4MzYsIDB4NTAsIDB4OUEsIDB4MkMsIDB4ODIsIDB4OTgsIDB4MDgs IDB4OTUsIDB4RkEsCi0rICAweEIxLCAweDlFLCAweEQyLCAweDU1LCAweDYxLCAweDg3LCAweDIx LCAweDU5LCAweDg3LCAweDdCLCAweDFGLCAweDU3LAotKyAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0 QSwgMHgwNiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1NSwgMHg1NCwgMHgxQywgMHg4OSwKLSsgIDB4 ODMsIDB4NzUsIDB4NTksIDB4NjUsIDB4NjQsIDB4OTAsIDB4MkUsIDB4MTYsIDB4Q0MsIDB4ODYs IDB4MDUsIDB4RUUsCi0rICAweEIxLCAweEU2LCAweDdCLCAweEJBLCAweDE2LCAweDc1LCAweDBE LCAweDBDLCAweDY0LCAweDBCLCAweEFCLCAweDIyLAotKyAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2 RiwgMHhBNCwgMHhGQiwgMHg3NywgMHg0MCwgMHg2NCwgMHg2MiwgMHhEMSwgMHhCNSwKLSsgIDB4 MzcsIDB4MUUsIDB4RTAsIDB4M0QsIDB4QTgsIDB4RjksIDB4RDIsIDB4QkQsIDB4QUEsIDB4Mzgs IDB4MjQsIDB4NDksCi0rICAweDU4LCAweEQyLCAweDc0LCAweDg1LCAweEY0LCAweEI1LCAweDkz LCAweDhFLCAweEY1LCAweDAzLCAweEVBLCAweDJELAotKyAgMHhDOCwgMHg1MiwgMHhGQSwgMHhD RiwgMHg3RSwgMHgzNSwgMHhCMCwgMHg2QSwgMHhBRiwgMHg5NSwgMHhDMCwgMHgwMCwKLSsgIDB4 NTQsIDB4NzYsIDB4M0QsIDB4MEMsIDB4OUMsIDB4QjIsIDB4RUUsIDB4QzAKLSt9OwotKwotK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTI1NltdID0gewotKyAgMHg2 RCwgMHgzRCwgMHhCRSwgMHg4RiwgMHg2MCwgMHg2RCwgMHgyNSwgMHgxNCwgMHhGMCwgMHgzMSwg MHhFMywgMHg4OSwKLSsgIDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUs IDB4MTAsIDB4MjUsIDB4OUEsIDB4RjMsIDB4OEYsCi0rICAweDdCLCAweEM1LCAweEE4LCAweDRB LCAweDc0LCAweDUxLCAweDM2LCAweEUyLCAweDhELCAweDdELCAweDczLCAweDI4LAotKyAgMHhD MSwgMHg3NywgMHhDNiwgMHgyNywgMHg5NywgMHgwMCwgMHg4QiwgMHgwMCwgMHhBMywgMHg5Niwg MHg3MywgMHg0RSwKLSsgIDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUs IDB4REYsIDB4OUQsIDB4NDksIDB4NDcsIDB4MDUsCi0rICAweEFCLCAweEY1LCAweDAxLCAweEQ2 LCAweDgxLCAweDQ3LCAweDcwLCAweEY1LCAweDFELCAweDZELCAweDI2LCAweEJBLAotKyAgMHgy RiwgMHg3QSwgMHg1NCwgMHg1MywgMHg0RSwgMHhFRCwgMHg3MSwgMHhEOSwgMHg1QSwgMHhGMywg MHhEQSwgMHhCNiwKLSsgIDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4Qzgs IDB4RDksIDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYsCi0rICAweDIxLCAweEI3LCAweDdFLCAweEFE LCAweDdDLCAweDJGLCAweDc1LCAweDUwLCAweDQ3LCAweDEyLCAweEU0LCAweDZELAotKyAgMHg1 RiwgMHhCNywgMHgwMSwgMHhERiwgMHhDMywgMHgxMSwgMHg2QywgMHhBOSwgMHg5RSwgMHg0OSwg MHhCOSwgMHhGNiwKLSsgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4MkQs IDB4MUMKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NI QTM4NFtdID0gewotKyAgMHg0MCwgMHhGQiwgMHhBMSwgMHgyMSwgMHhGNCwgMHhCMiwgMHg0MCwg MHg5QSwgMHhCNCwgMHgzMSwgMHhBOCwgMHhGMiwKLSsgIDB4RUMsIDB4MUMsIDB4QzQsIDB4Qzgs IDB4N0MsIDB4MjIsIDB4NjUsIDB4OUMsIDB4NTcsIDB4NDUsIDB4Q0QsIDB4NUUsCi0rICAweDg2 LCAweDAwLCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAw eDlBLCAweENELAotKyAgMHhBQSwgMHgyNSwgMHhGNCwgMHhCMiwgMHhGQywgMHhGMCwgMHg3NSwg MHhEOSwgMHgyRiwgMHg3OCwgMHgyMywgMHg3RiwKLSsgIDB4NkYsIDB4MDIsIDB4RUYsIDB4QzEs IDB4QUYsIDB4QTYsIDB4MjgsIDB4MTYsIDB4MzEsIDB4REMsIDB4NDIsIDB4NkMsCi0rICAweEIy LCAweDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAw eDRGLCAweEZCLAotKyAgMHg5MSwgMHhDQSwgMHhGNSwgMHg3MCwgMHhFRiwgMHg2QiwgMHg5RCwg MHhBNCwgMHhFRiwgMHhEOSwgMHgzRCwgMHgyRiwKLSsgIDB4M0EsIDB4QkUsIDB4ODksIDB4Mzgs IDB4NTksIDB4MDEsIDB4QkEsIDB4REEsIDB4MzIsIDB4QUQsIDB4NDIsIDB4ODksCi0rICAweDk4 LCAweDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAweDFGLCAw eENBLCAweDZGLAotKyAgMHg0OCwgMHhGNiwgMHhBRSwgMHhENywgMHg0NSwgMHhFRSwgMHhBRSwg MHg4OCwgMHgwRSwgMHg2MCwgMHhGNCwgMHg1NSwKLSsgIDB4NDgsIDB4NDQsIDB4RUUsIDB4MUYs IDB4OTAsIDB4MTgsIDB4NEIsIDB4RjEKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfUFNTX1NIQTUxMltdID0gewotKyAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwg MHgwNSwgMHhFOCwgMHhFNiwgMHhFNiwgMHg1NywgMHhBRSwgMHg2MywgMHg4QywKLSsgIDB4QzYs IDB4ODMsIDB4QjcsIDB4QTAsIDB4NTksIDB4QkIsIDB4RjIsIDB4QzYsIDB4OEYsIDB4MTIsIDB4 NTMsIDB4OUEsCi0rICAweDlCLCAweDU0LCAweDlFLCAweEIzLCAweEMxLCAweDFELCAweDIzLCAw eDRELCAweDUxLCAweEVELCAweDlFLCAweERELAotKyAgMHg0QiwgMHhGMywgMHg0NiwgMHg5Qiwg MHg2QiwgMHhGNiwgMHg3QywgMHgyNCwgMHg2MCwgMHg3OSwgMHgyMywgMHgzOSwKLSsgIDB4MDEs IDB4MUMsIDB4NTEsIDB4Q0IsIDB4RDgsIDB4RTksIDB4OUEsIDB4MDEsIDB4NjcsIDB4NUYsIDB4 RkUsIDB4RDcsCi0rICAweDdDLCAweEUzLCAweDdGLCAweEVELCAweERCLCAweDg3LCAweEJCLCAw eEYwLCAweDNELCAweDc4LCAweDU1LCAweDYxLAotKyAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywg MHhEMiwgMHg5RCwgMHgwQywgMHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwgMHgxMywKLSsgIDB4QzUs IDB4NDcsIDB4MzQsIDB4MEQsIDB4MzIsIDB4MTUsIDB4QzgsIDB4QUUsIDB4OUEsIDB4NkEsIDB4 MzksIDB4NjMsCi0rICAweDJELCAweDYwLCAweEY1LCAweDRDLCAweERGLCAweDhBLCAweDQ4LCAw eDRCLCAweEJGLCAweEY0LCAweEE4LCAweEZFLAotKyAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwg MHg5QywgMHg3QywgMHhDQSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwgMHg4OCwKLSsgIDB4NUMs IDB4OTcsIDB4NzAsIDB4QjQsIDB4MjYsIDB4QzksIDB4MTQsIDB4OEIKLSt9OwotKwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMVtdID0gewotKyAgMHg3MSwgMHhFRSwg MHgxQSwgMHhDMCwgMHhGRSwgMHgwMSwgMHg5MywgMHg1NCwgMHg3OSwgMHg1QywgMHhGMiwgMHg0 QywKLSsgIDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4 NjEsIDB4MzMsIDB4OEQsIDB4OUIsCi0rICAweEU3LCAweEZELCAweDYwLCAweEEzLCAweDgzLCAw eEI1LCAweEEzLCAweDUxLCAweDU1LCAweDc3LCAweDkwLCAweENGLAotKyAgMHhEQywgMHgyMiwg MHgzNywgMHg4RSwgMHhEMCwgMHhFMSwgMHhBRSwgMHgwOSwgMHhFMywgMHgzRCwgMHgxRSwgMHhG OCwKLSsgIDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4 ODgsIDB4OEIsIDB4OEIsIDB4QTEsCi0rICAweDIwLCAweDIyLCAweEJFLCAweDU5LCAweDVCLCAw eEUwLCAweDIzLCAweDI0LCAweEExLCAweDQ5LCAweDMwLCAweEJBLAotKyAgMHhBOSwgMHg5RSwg MHhFOCwgMHhCMSwgMHg4QSwgMHg2MiwgMHgxNiwgMHhCRiwgMHg0RSwgMHhDQSwgMHgyRSwgMHg0 RSwKLSsgIDB4QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYsIDB4MUQsIDB4 MDQsIDB4NDQsIDB4RTUsIDB4NUYsCi0rICAweDM1LCAweDA3LCAweDExLCAweEJDLCAweEVELCAw eDE5LCAweDM3LCAweDIxLCAweENGLCAweDIzLCAweDQ4LCAweDFGLAotKyAgMHg3MiwgMHgwNSwg MHhERSwgMHhFNiwgMHhFOCwgMHg3RiwgMHgzMywgMHg4QSwgMHg3NiwgMHg0QiwgMHgyRiwgMHg5 NSwKLSsgIDB4REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDksIDB4NDYsIDB4QjQKLSt9 OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjI0W10gPSB7Ci0r ICAweDYyLCAweEFBLCAweDc5LCAweEE5LCAweDE4LCAweDBFLCAweDVGLCAweDhDLCAweEJCLCAw eEI3LCAweDE1LCAweEY5LAotKyAgMHgyNSwgMHhCQiwgMHhGQSwgMHhENCwgMHgzQSwgMHgzNCwg MHhFRCwgMHg5RSwgMHhBMCwgMHhBOSwgMHgxOCwgMHg4RCwKLSsgIDB4NUIsIDB4NTUsIDB4OUEs IDB4N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEsIDB4QzUsIDB4ODksCi0r ICAweDA4LCAweEUyLCAweDFCLCAweEJELCAweDYyLCAweDUwLCAweDE3LCAweDc2LCAweDMwLCAw eDJDLCAweDlFLCAweENELAotKyAgMHhBNCwgMHgwMiwgMHhBRCwgMHhCMSwgMHg2RCwgMHg0NCwg MHg2RCwgMHhENSwgMHhDNiwgMHg0NSwgMHg0MSwgMHhFNSwKLSsgIDB4RUUsIDB4MUYsIDB4OEQs IDB4N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCi0r ICAweERCLCAweDU5LCAweDU1LCAweDg3LCAweDA5LCAweDI1LCAweDcwLCAweDg2LCAweDg0LCAw eDAyLCAweEM2LCAweDNCLAotKyAgMHgwQiwgMHg0NCwgMHg0QywgMHg0NiwgMHg5NSwgMHhGNCwg MHhGOCwgMHg1QSwgMHg5MSwgMHgyOCwgMHgzRSwgMHhCMiwKLSsgIDB4NTgsIDB4MkUsIDB4MDYs IDB4NDUsIDB4NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCi0r ICAweEQ5LCAweDc5LCAweDdGLCAweDE3LCAweDVFLCAweDAyLCAweDczLCAweDA0LCAweDc3LCAw eDgyLCAweEU2LCAweERDLAotKyAgMHg0MCwgMHgyMSwgMHg4OSwgMHg4QiwgMHgzNywgMHgzRSwg MHgxRSwgMHg4RAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9T SEEyNTZbXSA9IHsKLSsgIDB4MEQsIDB4NTUsIDB4RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUs IDB4ODIsIDB4MDUsIDB4MTcsIDB4QTUsIDB4MjMsCi0rICAweEU3LCAweDNCLCAweDFELCAweEFG LCAweEZCLCAweDhDLCAweEQwLCAweDgxLCAweDIwLCAweDdCLCAweEFBLCAweDIzLAotKyAgMHg5 MiwgMHg4NywgMHg4QywgMHhEMSwgMHg1MywgMHg4NSwgMHgxNiwgMHhEQywgMHhCRSwgMHhBRCwg MHg2RiwgMHgzNSwKLSsgIDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEs IDB4MDEsIDB4MTcsIDB4NTgsIDB4QjIsIDB4NkUsCi0rICAweDJDLCAweDQ0LCAweDlCLCAweDkw LCAweEYxLCAweEZCLCAweDUxLCAweEU4LCAweDZBLCAweDkwLCAweDJELCAweDE4LAotKyAgMHgw RSwgMHhDMCwgMHg5MCwgMHgxMCwgMHgyNCwgMHhBOSwgMHgxRCwgMHhCMywgMHg1OCwgMHg3QSwg MHg5MSwgMHgzMCwKLSsgIDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDks IDB4NUQsIDB4QkYsIDB4RTIsIDB4ODAsIDB4M0EsCi0rICAweDdDLCAweDg1LCAweEI0LCAweEJD LCAweEQxLCAweEU5LCAweEYwLCAweDVDLCAweERFLCAweDgxLCAweEE2LCAweDM4LAotKyAgMHhC OCwgMHg0MiwgMHhCQiwgMHg4NiwgMHhDNSwgMHg5RCwgMHhDRSwgMHg3QywgMHgyQywgMHhFRSwg MHhEMSwgMHhEQSwKLSsgIDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4Rjcs IDB4ODAsIDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAsCi0rICAweEJELCAweDQ0LCAweDk3LCAweDYw LCAweENELCAweDU3LCAweEMwLCAweDdBCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBrYXRfUlNBX1NIQTM4NFtdID0gewotKyAgMHgxRCwgMHhFMywgMHg2QSwgMHhERCwgMHgy NywgMHg0QywgMHhDMCwgMHhBNSwgMHgyNywgMHhFRiwgMHhFNiwgMHgxRiwKLSsgIDB4RDIsIDB4 OTEsIDB4NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4NDcs IDB4QzcsCi0rICAweDZGLCAweDIyLCAweDE2LCAweDQ4LCAweEQwLCAweEY5LCAweDE4LCAweEE5 LCAweENBLCAweEZBLCAweDVELCAweDVDLAotKyAgMHhBNywgMHg2NSwgMHg1MiwgMHg4QSwgMHhD OCwgMHg0NCwgMHg3RSwgMHg4NiwgMHg1RCwgMHhBOSwgMHhBNiwgMHg1NSwKLSsgIDB4NjUsIDB4 M0UsIDB4RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4MjgsIDB4N0YsIDB4QjYs IDB4Q0YsCi0rICAweDgyLCAweERELCAweDdFLCAweDU1LCAweEUxLCAweEIxLCAweEJDLCAweEUy LCAweDE5LCAweDJCLCAweDMwLCAweEMyLAotKyAgMHgxQiwgMHgyQiwgMHhCMCwgMHg4MiwgMHg0 NiwgMHhBQywgMHg0QiwgMHhEMSwgMHhFMiwgMHg3RCwgMHhFQiwgMHg4QywKLSsgIDB4RkYsIDB4 OTUsIDB4RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4OEYsIDB4OEIsIDB4OUMs IDB4Q0QsCi0rICAweEVBLCAweDg1LCAweEVFLCAweDAwLCAweERDLCAweDFDLCAweEE3LCAweEVC LCAweEQwLCAweDhGLCAweDk5LCAweEYxLAotKyAgMHgxNiwgMHgyOCwgMHgyNCwgMHg2NCwgMHgw NCwgMHgzOSwgMHgyRCwgMHg1OCwgMHgxRSwgMHgzNywgMHhEQywgMHgwNCwKLSsgIDB4QkQsIDB4 MzEsIDB4QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYsIDB4QkYKLSt9OwotKwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10gPSB7Ci0rICAweDY5LCAweDUyLCAw eDFCLCAweDUxLCAweDVFLCAweDA2LCAweENBLCAweDlCLCAweDE2LCAweDUxLCAweDVELCAweENG LAotKyAgMHg0OSwgMHgyNSwgMHg0QSwgMHhBMSwgMHg2QSwgMHg3NywgMHg0QywgMHgzNiwgMHg0 MCwgMHhGOCwgMHhCMiwgMHg5QSwKLSsgIDB4MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4 ODIsIDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCi0rICAweDA0LCAweEMxLCAw eDVBLCAweDFBLCAweEVELCAweDFFLCAweDlBLCAweEI2LCAweDRDLCAweDU0LCAweDlGLCAweEQ4 LAotKyAgMHg4RCwgMHhDQywgMHhBQywgMHg4QSwgMHhCQiwgMHg5QywgMHg4MiwgMHgzRiwgMHhB NiwgMHg1MywgMHg2MiwgMHhCNSwKLSsgIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4 MkIsIDB4RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIsCi0rICAweEFGLCAweDYyLCAw eDdDLCAweDUyLCAweEYwLCAweEVFLCAweDMzLCAweERGLCAweDFCLCAweDFELCAweDQ3LCAweEU2 LAotKyAgMHg1OSwgMHg1NiwgMHhBNSwgMHhCOSwgMHg1QywgMHhFNiwgMHg3NywgMHg3OCwgMHgx NiwgMHg2MywgMHg4NCwgMHgwNSwKLSsgIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4 RjcsIDB4N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCi0rICAweDNFLCAweDYyLCAw eENFLCAweEI1LCAweDNGLCAweDg4LCAweERGLCAweDJELCAweEFCLCAweDk4LCAweDY1LCAweDkx LAotKyAgMHhERiwgMHg3MCwgMHgxNCwgMHhBNSwgMHgzRiwgMHgzNiwgMHhBQiwgMHg4NAotK307 Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTFbXSA9IHsK LSsgIDB4ODYsIDB4QjQsIDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIs IDB4NDUsIDB4NEQsIDB4REYsCi0rICAweEU5LCAweDJELCAweEUxLCAweDgzLCAweDVGLCAweEI1 LCAweDJGLCAweEM5LCAweENELCAweEM0LCAweEIyLCAweDc1LAotKyAgMHg4MCwgMHhBNCwgMHhG MSwgMHg0QSwgMHhFNywgMHg4MywgMHgxMiwgMHgxRSwgMHgxRSwgMHgxNCwgMHhCOCwgMHhBQywK LSsgIDB4MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQs IDB4RUUsIDB4QTksIDB4OTcsCi0rICAweDcwLCAweEZCLCAweDVFLCAweEU3LCAweEI3LCAweEUz LCAweDYyLCAweDIzLCAweDRCLCAweDM4LCAweEJFLCAweEQ2LAotKyAgMHg1MywgMHgxNSwgMHhG NywgMHhERiwgMHg4NywgMHhCNCwgMHgwRSwgMHhDQywgMHhCMSwgMHgxQSwgMHgxMSwgMHgxOSwK LSsgIDB4RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMs IDB4MEMsIDB4NTksIDB4RDcsCi0rICAweDZGLCAweDRDLCAweDNDLCAweDM3LCAweDVCLCAweDM3 LCAweDAzLCAweDYxLCAweDdELCAweDI0LCAweDFDLCAweDk5LAotKyAgMHg0OCwgMHhBRiwgMHg4 MiwgMHhGRSwgMHgzMiwgMHg0MSwgMHg5QiwgMHhCMiwgMHhEQiwgMHhFQSwgMHhFRCwgMHg3NiwK LSsgIDB4OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4MzAsIDB4ODQs IDB4MUMsIDB4QjMsIDB4NjcsCi0rICAweEEzLCAweDI5LCAweDgwLCAweDcwLCAweDU0LCAweDY4 LCAweDdELCAweDQ5Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNB X1g5MzFfU0hBMjU2W10gPSB7Ci0rICAweDdFLCAweEEyLCAweDc3LCAweEZFLCAweEI4LCAweDU0 LCAweDhBLCAweEM3LCAweDdGLCAweDY0LCAweDU0LCAweDg5LAotKyAgMHhFNSwgMHg1MiwgMHgx NSwgMHg4RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5MiwgMHgxQywgMHhERCwK LSsgIDB4RUEsIDB4QTIsIDB4MkQsIDB4NUMsIDB4RDEsIDB4NjIsIDB4MDAsIDB4NDksIDB4MDUs IDB4OTUsIDB4NzMsIDB4Q0YsCi0rICAweDE2LCAweDc2LCAweDY4LCAweEY2LCAweEM2LCAweDVF LCAweDgwLCAweEI4LCAweEI4LCAweDdCLCAweEM4LCAweDlCLAotKyAgMHhDNiwgMHg1MywgMHg4 OCwgMHgyNiwgMHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgxMywgMHhCOCwgMHhGMCwgMHg0QiwK LSsgIDB4MDAsIDB4ODUsIDB4RjMsIDB4REQsIDB4MDcsIDB4NTAsIDB4RUIsIDB4MjAsIDB4QzQs IDB4MzgsIDB4MEUsIDB4OTgsCi0rICAweEFELCAweDRFLCAweDQ5LCAweDJDLCAweEQ3LCAweDY1 LCAweEE1LCAweDE5LCAweDBFLCAweDU5LCAweDAxLCAweEVDLAotKyAgMHg3RSwgMHg3NSwgMHg4 OSwgMHg2OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4NSwgMHg0NiwgMHg4RCwgMHhBMCwgMHg4QywK LSsgIDB4MzMsIDB4MUQsIDB4ODIsIDB4OEMsIDB4MDMsIDB4RUEsIDB4NjksIDB4ODgsIDB4MzUs IDB4QTEsIDB4NDIsIDB4QkQsCi0rICAweDIxLCAweEVELCAweDhELCAweEJDLCAweEJDLCAweERC LCAweDMwLCAweEZGLCAweDg2LCAweEYwLCAweDVCLCAweERDLAotKyAgMHhFMywgMHhFMiwgMHhF OCwgMHgwQSwgMHgwQSwgMHgyOSwgMHg5NCwgMHg4MAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0gewotKyAgMHg1QywgMHg3RCwgMHg5 NiwgMHgzNSwgMHhFQywgMHg3RSwgMHgxMSwgMHgzOCwgMHhCQiwgMHg3QiwgMHhFQywgMHg3QiwK LSsgIDB4RjIsIDB4ODIsIDB4OEUsIDB4OTksIDB4QkQsIDB4RUYsIDB4RDgsIDB4QUUsIDB4RDcs IDB4MzksIDB4MzcsIDB4Q0IsCi0rICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0 LCAweDJFLCAweDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUzLAotKyAgMHhFRiwgMHg3OCwgMHg4 MywgMHgxOCwgMHg0NCwgMHgzNSwgMHg5QywgMHg4RSwgMHhENywgMHg0QSwgMHg2MywgMHhGNiwK LSsgIDB4NTcsIDB4QzIsIDB4QjAsIDB4MDgsIDB4NTEsIDB4NzMsIDB4Q0YsIDB4Q0EsIDB4OTks IDB4NjYsIDB4RUUsIDB4MzEsCi0rICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3 LCAweDdCLCAweDQxLCAweDFFLCAweDZELCAweDhELCAweEYxLAotKyAgMHgzRSwgMHg5QywgMHgz NSwgMHg5NSwgMHg1OCwgMHhERCwgMHgyQiwgMHhENSwgMHhBMCwgMHg2MCwgMHg0MSwgMHg3OSwK LSsgIDB4MjQsIDB4MjIsIDB4RTQsIDB4QjcsIDB4QkYsIDB4NDcsIDB4NTMsIDB4RjYsIDB4MzQs IDB4RDUsIDB4N0MsIDB4RkYsCi0rICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3 LCAweEI5LCAweERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAotKyAgMHhFRiwgMHgwMSwgMHhF NiwgMHg1RSwgMHgzOSwgMHgzMSwgMHgyRCwgMHg3MSwgMHhBNSwgMHhEQywgMHhDNiwgMHg2RCwK LSsgIDB4RTIsIDB4Q0QsIDB4ODUsIDB4REIsIDB4NzMsIDB4ODIsIDB4NjUsIDB4MjgKLSt9Owot KwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEE1MTJbXSA9IHsK LSsgIDB4QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQs IDB4M0EsIDB4QzEsIDB4NjMsCi0rICAweEZDLCAweEExLCAweEFBLCAweENCLCAweDlCLCAweDc5 LCAweERELCAweDRCLCAweEUxLCAweEQ5LCAweERBLCAweEFDLAotKyAgMHhFNywgMHg0NywgMHgw OSwgMHhCMiwgMHgxMSwgMHg0QiwgMHg4QSwgMHhBQSwgMHgwNSwgMHg5RSwgMHg3NywgMHhENywK LSsgIDB4M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4NUUs IDB4RjksIDB4MTQsIDB4MjgsCi0rICAweEEwLCAweDk5LCAweDc0LCAweDY0LCAweDcwLCAweDRF LCAweEYyLCAweEUzLCAweEZBLCAweEM3LCAweEY4LCAweEM1LAotKyAgMHg2RSwgMHgyQiwgMHg3 OSwgMHg5NiwgMHgwRCwgMHgwQywgMHhDOCwgMHgxMCwgMHgzNCwgMHg1MywgMHhEMiwgMHhBRiwK LSsgIDB4MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQsIDB4NzIsIDB4MTAs IDB4RTAsIDB4RjYsIDB4RDAsCi0rICAweENFLCAweDhBLCAweDZGLCAweEExLCAweDk1LCAweDg5 LCAweEJGLCAweDU4LCAweDhGLCAweDQ2LCAweDVGLCAweDA5LAotKyAgMHg5RiwgMHgwOSwgMHhD QSwgMHg4NCwgMHgxNSwgMHg4NSwgMHhFMCwgMHhFRCwgMHgwNCwgMHgyRCwgMHhGQiwgMHg3QywK LSsgIDB4MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4OTIsIDB4NDIsIDB4MTEs IDB4MzAsIDB4NzEsIDB4MUIsCi0rICAweDYwLCAweDgzLCAweDE4LCAweDg4LCAweEEzLCAweEY1 LCAweDU5LCAweEMzCi0rfTsKLSsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9yc2EoKQotKwl7Ci0r CWludCByZXQgPSAwOwotKwlSU0EgKmtleTsKLSsJRVZQX1BLRVkgKnBrID0gTlVMTDsKLSsKLSsJ aWYgKChrZXk9UlNBX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCXNldHJzYWtleShr ZXkpOwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7Ci0r Ci0rCUVWUF9QS0VZX2Fzc2lnbl9SU0EocGssIGtleSk7Ci0rCi0rCWlmICghZmlwc19wa2V5X3Np Z25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRf UlNBX1NIQTEsIHNpemVvZihrYXRfUlNBX1NIQTEpLAotKwkJCQlFVlBfc2hhMSgpLCBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTEgUEtDUyMxIikpCi0rCQlnb3RvIGVy cjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihr YXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9TSEEyMjQp LAotKwkJCQlFVlBfc2hhMjI0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJS U0EgU0hBMjI0IFBLQ1MjMSIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNB X1NIQTI1Niwgc2l6ZW9mKGthdF9SU0FfU0hBMjU2KSwKLSsJCQkJRVZQX3NoYTI1NigpLCBFVlBf TURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAotKwkJCQkiUlNBIFNIQTI1NiBQS0NTIzEiKSkKLSsJCWdv dG8gZXJyOwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKLSsJCQkJa2F0X1JTQV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1NI QTM4NCksCi0rCQkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsJ CQkJIlJTQSBTSEEzODQgUEtDUyMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWth dF9SU0FfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9TSEE1MTIpLAotKwkJCQlFVlBfc2hhNTEyKCks IEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rCQkJCSJSU0EgU0hBNTEyIFBLQ1MjMSIpKQot KwkJZ290byBlcnI7Ci0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEExLCBzaXplb2Yo a2F0X1JTQV9QU1NfU0hBMSksCi0rCQkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURf UFNTLAotKwkJCQkiUlNBIFNIQTEgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJ CWthdF9SU0FfUFNTX1NIQTIyNCwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTIyNCksCi0rCQkJCUVW UF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBMjI0IFBT UyIpKQotKwkJZ290byBlcnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBr YXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCQlrYXRfUlNBX1BTU19TSEEyNTYsIHNp emVvZihrYXRfUlNBX1BTU19TSEEyNTYpLAotKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhf RkxBR19QQURfUFNTLAotKwkJCQkiUlNBIFNIQTI1NiBQU1MiKSkKLSsJCWdvdG8gZXJyOwotKwlp ZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMp IC0gMSwKLSsJCQkJa2F0X1JTQV9QU1NfU0hBMzg0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMzg0 KSwKLSsJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKLSsJCQkJIlJT QSBTSEEzODQgUFNTIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJCWthdF9SU0FfUFNT X1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTUxMiksCi0rCQkJCUVWUF9zaGE1MTIoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rCQkJCSJSU0EgU0hBNTEyIFBTUyIpKQotKwkJZ290 byBlcnI7Ci0rCi0rCi0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJz LCBzaXplb2Yoa2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEExLCBzaXplb2Yoa2F0 X1JTQV9YOTMxX1NIQTEpLAotKwkJCUVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkz MSwKLSsJCQkiUlNBIFNIQTEgWDkzMSIpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5COiBTSEEyMjQg bm90IHN1cHBvcnRlZCBpbiBYOS4zMSAqLwotKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsJCQlrYXRfUlNBX1g5MzFfU0hB MjU2LCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksCi0rCQkJRVZQX3NoYTI1NigpLCBFVlBf TURfQ1RYX0ZMQUdfUEFEX1g5MzEsCi0rCQkJIlJTQSBTSEEyNTYgWDkzMSIpKQotKwkJZ290byBl cnI7Ci0rCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yo a2F0X3RicykgLSAxLAotKwkJCWthdF9SU0FfWDkzMV9TSEEzODQsIHNpemVvZihrYXRfUlNBX1g5 MzFfU0hBMzg0KSwKLSsJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwK LSsJCQkiUlNBIFNIQTM4NCBYOTMxIikpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFmaXBzX3BrZXlf c2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rCQkJa2F0 X1JTQV9YOTMxX1NIQTUxMiwgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLAotKwkJCUVWUF9z aGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAotKwkJCSJSU0EgU0hBNTEyIFg5MzEi KSkKLSsJCWdvdG8gZXJyOwotKwotKwotKwlyZXQgPSAxOwotKwotKwllcnI6Ci0rCWlmIChwaykK LSsJCUVWUF9QS0VZX2ZyZWUocGspOwotKwllbHNlIGlmIChrZXkpCi0rCQlSU0FfZnJlZShrZXkp OwotKwlyZXR1cm4gcmV0OwotKwl9Ci0rCi0rI2VuZGlmIC8qIGRlZiBPUEVOU1NMX0ZJUFMgKi8K LWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNf cnNhX3g5MzFnLmMKLS0tLSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFn LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0wLDAgKzEsMjgxIEBA 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 UwotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLStleHRlcm4gaW50IGZpcHNfY2hlY2tf cnNhKFJTQSAqcnNhKTsKLSsjZW5kaWYKLSsKLSsvKiBYOS4zMSBSU0Ega2V5IGRlcml2YXRpb24g YW5kIGdlbmVyYXRpb24gKi8KLSsKLStpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBC SUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAotKwkJCWNvbnN0 IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKLSsJCQlj b25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCi0r CQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCi0rCXsKLSsJQklHTlVNICpyMD1OVUxM LCpyMT1OVUxMLCpyMj1OVUxMLCpyMz1OVUxMOwotKwlCTl9DVFggKmN0eD1OVUxMLCpjdHgyPU5V TEw7Ci0rCi0rCWlmICghcnNhKSAKLSsJCWdvdG8gZXJyOwotKwotKwljdHggPSBCTl9DVFhfbmV3 KCk7Ci0rCWlmICghY3R4KSAKLSsJCWdvdG8gZXJyOwotKwlCTl9DVFhfc3RhcnQoY3R4KTsKLSsK LSsJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCXIxID0gQk5fQ1RYX2dldChjdHgpOwotKwlyMiA9 IEJOX0NUWF9nZXQoY3R4KTsKLSsJcjMgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rCi0rCWlmIChyMyA9 PSBOVUxMKQotKwkJZ290byBlcnI7Ci0rCWlmICghcnNhLT5lKQotKwkJewotKwkJcnNhLT5lID0g Qk5fZHVwKGUpOwotKwkJaWYgKCFyc2EtPmUpCi0rCQkJZ290byBlcnI7Ci0rCQl9Ci0rCWVsc2UK LSsJCWUgPSByc2EtPmU7Ci0rCi0rCS8qIElmIG5vdCBhbGwgcGFyYW1ldGVycyBwcmVzZW50IG9u bHkgY2FsY3VsYXRlIHdoYXQgd2UgY2FuLgotKwkgKiBUaGlzIGFsbG93cyB0ZXN0IHByb2dyYW1z IHRvIG91dHB1dCBzZWxlY3RpdmUgcGFyYW1ldGVycy4KLSsJICovCi0rCi0rCWlmIChYcCAmJiAh cnNhLT5wKQotKwkJewotKwkJcnNhLT5wID0gQk5fbmV3KCk7Ci0rCQlpZiAoIXJzYS0+cCkKLSsJ CQlnb3RvIGVycjsKLSsKLSsJCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNhLT5wLCBw MSwgcDIsCi0rCQkJCQlYcCwgWHAxLCBYcDIsIGUsIGN0eCwgY2IpKQotKwkJCWdvdG8gZXJyOwot KwkJfQotKwotKwlpZiAoWHEgJiYgIXJzYS0+cSkKLSsJCXsKLSsJCXJzYS0+cSA9IEJOX25ldygp OwotKwkJaWYgKCFyc2EtPnEpCi0rCQkJZ290byBlcnI7Ci0rCQlpZiAoIUJOX1g5MzFfZGVyaXZl X3ByaW1lX2V4KHJzYS0+cSwgcTEsIHEyLAotKwkJCQkJWHEsIFhxMSwgWHEyLCBlLCBjdHgsIGNi KSkKLSsJCQlnb3RvIGVycjsKLSsJCX0KLSsKLSsJaWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkKLSsJ CXsKLSsJCUJOX0NUWF9lbmQoY3R4KTsKLSsJCUJOX0NUWF9mcmVlKGN0eCk7Ci0rCQlyZXR1cm4g MjsKLSsJCX0KLSsKLSsJLyogU2luY2UgYm90aCBwcmltZXMgYXJlIHNldCB3ZSBjYW4gbm93IGNh bGN1bGF0ZSBhbGwgcmVtYWluaW5nIAotKwkgKiBjb21wb25lbnRzLgotKwkgKi8KLSsKLSsJLyog Y2FsY3VsYXRlIG4gKi8KLSsJcnNhLT5uPUJOX25ldygpOwotKwlpZiAocnNhLT5uID09IE5VTEwp Ci0rCQlnb3RvIGVycjsKLSsJaWYgKCFCTl9tdWwocnNhLT5uLHJzYS0+cCxyc2EtPnEsY3R4KSkK LSsJCWdvdG8gZXJyOwotKwotKwkvKiBjYWxjdWxhdGUgZCAqLwotKwlpZiAoIUJOX3N1YihyMSxy c2EtPnAsQk5fdmFsdWVfb25lKCkpKQotKwkJZ290byBlcnI7CS8qIHAtMSAqLwotKwlpZiAoIUJO X3N1YihyMixyc2EtPnEsQk5fdmFsdWVfb25lKCkpKQotKwkJZ290byBlcnI7CS8qIHEtMSAqLwot KwlpZiAoIUJOX211bChyMCxyMSxyMixjdHgpKQotKwkJZ290byBlcnI7CS8qIChwLTEpKHEtMSkg Ki8KLSsKLSsJaWYgKCFCTl9nY2QocjMsIHIxLCByMiwgY3R4KSkKLSsJCWdvdG8gZXJyOwotKwot KwlpZiAoIUJOX2RpdihyMCwgTlVMTCwgcjAsIHIzLCBjdHgpKQotKwkJZ290byBlcnI7CS8qIExD TSgocC0xKShxLTEpKSAqLwotKwotKwljdHgyID0gQk5fQ1RYX25ldygpOwotKwlpZiAoIWN0eDIp Ci0rCQlnb3RvIGVycjsKLSsKLSsJcnNhLT5kPUJOX21vZF9pbnZlcnNlKE5VTEwscnNhLT5lLHIw LGN0eDIpOwkvKiBkICovCi0rCWlmIChyc2EtPmQgPT0gTlVMTCkKLSsJCWdvdG8gZXJyOwotKwot KwkvKiBjYWxjdWxhdGUgZCBtb2QgKHAtMSkgKi8KLSsJcnNhLT5kbXAxPUJOX25ldygpOwotKwlp ZiAocnNhLT5kbXAxID09IE5VTEwpCi0rCQlnb3RvIGVycjsKLSsJaWYgKCFCTl9tb2QocnNhLT5k bXAxLHJzYS0+ZCxyMSxjdHgpKQotKwkJZ290byBlcnI7Ci0rCi0rCS8qIGNhbGN1bGF0ZSBkIG1v ZCAocS0xKSAqLwotKwlyc2EtPmRtcTE9Qk5fbmV3KCk7Ci0rCWlmIChyc2EtPmRtcTEgPT0gTlVM TCkKLSsJCWdvdG8gZXJyOwotKwlpZiAoIUJOX21vZChyc2EtPmRtcTEscnNhLT5kLHIyLGN0eCkp Ci0rCQlnb3RvIGVycjsKLSsKLSsJLyogY2FsY3VsYXRlIGludmVyc2Ugb2YgcSBtb2QgcCAqLwot Kwlyc2EtPmlxbXA9Qk5fbW9kX2ludmVyc2UoTlVMTCxyc2EtPnEscnNhLT5wLGN0eDIpOwotKwot KwllcnI6Ci0rCWlmIChjdHgpCi0rCQl7Ci0rCQlCTl9DVFhfZW5kKGN0eCk7Ci0rCQlCTl9DVFhf ZnJlZShjdHgpOwotKwkJfQotKwlpZiAoY3R4MikKLSsJCUJOX0NUWF9mcmVlKGN0eDIpOwotKwkv KiBJZiB0aGlzIGlzIHNldCBhbGwgY2FsbHMgc3VjY2Vzc2Z1bCAqLwotKwlpZiAocnNhICYmIHJz YS0+aXFtcCAhPSBOVUxMKQotKwkJcmV0dXJuIDE7Ci0rCi0rCXJldHVybiAwOwotKwotKwl9Ci0r Ci0raW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0 IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQotKwl7Ci0rCWludCBvayA9IDA7Ci0rCUJJR05VTSAq WHAgPSBOVUxMLCAqWHEgPSBOVUxMOwotKwlCTl9DVFggKmN0eCA9IE5VTEw7Ci0rCi0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwlpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNf QklUUykKLSsJICAgIHsKLSsJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tF WV9FWCxGSVBTX1JfS0VZX1RPT19TSE9SVCk7Ci0rCSAgICByZXR1cm4gMDsKLSsJICAgIH0KLSsK LSsJaWYgKGJpdHMgJiAweGZmKQotKwkgICAgewotKwkgICAgRklQU2VycihGSVBTX0ZfUlNBX1g5 MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpOwotKwkgICAgcmV0 dXJuIDA7Ci0rCSAgICB9Ci0rCi0rCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCi0rCSAgICB7 Ci0rCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQU19SX0ZJ UFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKyNlbmRpZgot KwotKwljdHggPSBCTl9DVFhfbmV3KCk7Ci0rCWlmICghY3R4KQotKwkJZ290byBlcnJvcjsKLSsK LSsJQk5fQ1RYX3N0YXJ0KGN0eCk7Ci0rCVhwID0gQk5fQ1RYX2dldChjdHgpOwotKwlYcSA9IEJO X0NUWF9nZXQoY3R4KTsKLSsJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX1hwcShYcCwgWHEsIGJpdHMs IGN0eCkpCi0rCQlnb3RvIGVycm9yOwotKwotKwlyc2EtPnAgPSBCTl9uZXcoKTsKLSsJcnNhLT5x ID0gQk5fbmV3KCk7Ci0rCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCi0rCQlnb3RvIGVycm9yOwot KwotKwkvKiBHZW5lcmF0ZSB0d28gcHJpbWVzIGZyb20gWHAsIFhxICovCi0rCi0rCWlmICghQk5f WDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIFhw LAotKwkJCQkJZSwgY3R4LCBjYikpCi0rCQlnb3RvIGVycm9yOwotKwotKwlpZiAoIUJOX1g5MzFf Z2VuZXJhdGVfcHJpbWVfZXgocnNhLT5xLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBYcSwKLSsJ CQkJCWUsIGN0eCwgY2IpKQotKwkJZ290byBlcnJvcjsKLSsKLSsJLyogU2luY2UgcnNhLT5wIGFu ZCByc2EtPnEgYXJlIHZhbGlkIHRoaXMgY2FsbCB3aWxsIGp1c3QgZGVyaXZlCi0rCSAqIHJlbWFp bmluZyBSU0EgY29tcG9uZW50cy4KLSsJICovCi0rCi0rCWlmICghUlNBX1g5MzFfZGVyaXZlX2V4 KHJzYSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSsJCQkJTlVMTCwgTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgZSwgY2IpKQotKwkJZ290byBlcnJvcjsKLSsKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rCWlmKCFmaXBzX2NoZWNrX3JzYShyc2EpKQotKwkgICAgZ290byBlcnJvcjsKLSsj ZW5kaWYKLSsKLSsJb2sgPSAxOwotKwotKwllcnJvcjoKLSsJaWYgKGN0eCkKLSsJCXsKLSsJCUJO X0NUWF9lbmQoY3R4KTsKLSsJCUJOX0NUWF9mcmVlKGN0eCk7Ci0rCQl9Ci0rCi0rCWlmIChvaykK LSsJCXJldHVybiAxOwotKwotKwlyZXR1cm4gMDsKLSsKLSsJfQotZGlmZiAtdXAgL2Rldi9udWxs IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMKLS0t LSAvZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9maXBzL2ZpcHNfc2hhMV9zZWxmdGVzdC5jCTIwMDktMTEt MTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDk3IEBACi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBh cmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAq Ci0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n Ci0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S Ci0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rc3RhdGljIGNoYXIgdGVzdFtdWzYwXT0KLSsgICAgewotKyAgICAiIiwKLSsgICAgImFi YyIsCi0rICAgICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxt bm9tbm9wbm9wcSIKLSsgICAgfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXRb XVtTSEFfRElHRVNUX0xFTkdUSF09Ci0rICAgIHsKLSsgICAgeyAweGRhLDB4MzksMHhhMywweGVl LDB4NWUsMHg2YiwweDRiLDB4MGQsMHgzMiwweDU1LAotKyAgICAgIDB4YmYsMHhlZiwweDk1LDB4 NjAsMHgxOCwweDkwLDB4YWYsMHhkOCwweDA3LDB4MDkgfSwKLSsgICAgeyAweGE5LDB4OTksMHgz ZSwweDM2LDB4NDcsMHgwNiwweDgxLDB4NmEsMHhiYSwweDNlLAotKyAgICAgIDB4MjUsMHg3MSww eDc4LDB4NTAsMHhjMiwweDZjLDB4OWMsMHhkMCwweGQ4LDB4OWQgfSwKLSsgICAgeyAweDg0LDB4 OTgsMHgzZSwweDQ0LDB4MWMsMHgzYiwweGQyLDB4NmUsMHhiYSwweGFlLAotKyAgICAgIDB4NGEs MHhhMSwweGY5LDB4NTEsMHgyOSwweGU1LDB4ZTUsMHg0NiwweDcwLDB4ZjEgfSwKLSsgICAgfTsK LSsKLSt2b2lkIEZJUFNfY29ycnVwdF9zaGExKCkKLSsgICAgewotKyAgICB0ZXN0WzJdWzBdKys7 Ci0rICAgIH0KLSsKLStpbnQgRklQU19zZWxmdGVzdF9zaGExKCkKLSsgICAgewotKyAgICBpbnQg bjsKLSsKLSsgICAgZm9yKG49MCA7IG48c2l6ZW9mKHRlc3QpL3NpemVvZih0ZXN0WzBdKSA7ICsr bikKLSsJewotKwl1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RIXTsKLSsKLSsJRVZQ X0RpZ2VzdCh0ZXN0W25dLHN0cmxlbih0ZXN0W25dKSxtZCwgTlVMTCwgRVZQX3NoYTEoKSwgTlVM TCk7Ci0rCWlmKG1lbWNtcChtZCxyZXRbbl0sc2l6ZW9mIG1kKSkKLSsJICAgIHsKLSsJICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hBMSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsK LSsJICAgIHJldHVybiAwOwotKwkgICAgfQotKwl9Ci0rICAgIHJldHVybiAxOwotKyAgICB9Ci0r Ci0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v Zmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jCi0tLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6 MDA6NTguODAxMDAyMjc2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlw cy9maXBzX3N0YW5kYWxvbmVfc2hhMS5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICsw MTAwCi1AQCAtMCwwICsxLDE3MyBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChj KSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0r ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0r ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoK LSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK LSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAot KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNp bmNsdWRlIDxzdGRpby5oPgotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5jbHVkZSA8c3RyaW5n Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9zaGEuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rCi0rI2lmbmRlZiBGSVBTQ0FO SVNURVJfTwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpIHsgcmV0dXJuIDA7IH0KLSt2b2lk IEZJUFNfc2VsZnRlc3RfY2hlY2soKSB7fQotK3ZvaWQgT1BFTlNTTF9jbGVhbnNlKHZvaWQgKnAs c2l6ZV90IGxlbikge30KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3Rh dGljIHZvaWQgaG1hY19pbml0KFNIQV9DVFggKm1kX2N0eCxTSEFfQ1RYICpvX2N0eCwKLSsJCSAg ICAgIGNvbnN0IGNoYXIgKmtleSkKLSsgICAgewotKyAgICBzaXplX3QgbGVuPXN0cmxlbihrZXkp OwotKyAgICBpbnQgaTsKLSsgICAgdW5zaWduZWQgY2hhciBrZXltZFtITUFDX01BWF9NRF9DQkxP Q0tdOwotKyAgICB1bnNpZ25lZCBjaGFyIHBhZFtITUFDX01BWF9NRF9DQkxPQ0tdOwotKwotKyAg ICBpZiAobGVuID4gU0hBX0NCTE9DSykKLSsJewotKwlTSEExX0luaXQobWRfY3R4KTsKLSsJU0hB MV9VcGRhdGUobWRfY3R4LGtleSxsZW4pOwotKwlTSEExX0ZpbmFsKGtleW1kLG1kX2N0eCk7Ci0r CWxlbj0yMDsKLSsJfQotKyAgICBlbHNlCi0rCW1lbWNweShrZXltZCxrZXksbGVuKTsKLSsgICAg bWVtc2V0KCZrZXltZFtsZW5dLCdcMCcsSE1BQ19NQVhfTURfQ0JMT0NLLWxlbik7Ci0rCi0rICAg IGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JMT0NLIDsgaSsrKQotKwlwYWRbaV09MHgzNl5r ZXltZFtpXTsKLSsgICAgU0hBMV9Jbml0KG1kX2N0eCk7Ci0rICAgIFNIQTFfVXBkYXRlKG1kX2N0 eCxwYWQsU0hBX0NCTE9DSyk7Ci0rCi0rICAgIGZvcihpPTAgOyBpIDwgSE1BQ19NQVhfTURfQ0JM T0NLIDsgaSsrKQotKwlwYWRbaV09MHg1Y15rZXltZFtpXTsKLSsgICAgU0hBMV9Jbml0KG9fY3R4 KTsKLSsgICAgU0hBMV9VcGRhdGUob19jdHgscGFkLFNIQV9DQkxPQ0spOwotKyAgICB9Ci0rCi0r c3RhdGljIHZvaWQgaG1hY19maW5hbCh1bnNpZ25lZCBjaGFyICptZCxTSEFfQ1RYICptZF9jdHgs U0hBX0NUWCAqb19jdHgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBidWZbMjBdOwotKwot KyAgICBTSEExX0ZpbmFsKGJ1ZixtZF9jdHgpOwotKyAgICBTSEExX1VwZGF0ZShvX2N0eCxidWYs c2l6ZW9mIGJ1Zik7Ci0rICAgIFNIQTFfRmluYWwobWQsb19jdHgpOwotKyAgICB9Ci0rCi0rI2Vu ZGlmCi0rCi0raW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCi0rICAgIHsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rICAgIHN0YXRpYyBjaGFyIGtleVtdPSJldGFvbnJpc2hkbGN1cGZtIjsK LSsgICAgaW50IG4sYmluYXJ5PTA7Ci0rCi0rICAgIGlmKGFyZ2MgPCAyKQotKwl7Ci0rCWZwcmlu dGYoc3RkZXJyLCIlcyBbPGZpbGU+XStcbiIsYXJndlswXSk7Ci0rCWV4aXQoMSk7Ci0rCX0KLSsK LSsgICAgbj0xOwotKyAgICBpZiAoIXN0cmNtcChhcmd2W25dLCItYmluYXJ5IikpCi0rCXsKLSsJ bisrOwotKwliaW5hcnk9MTsJLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQuLi4gKi8KLSsJfQot KwotKyAgICBmb3IoOyBuIDwgYXJnYyA7ICsrbikKLSsJewotKwlGSUxFICpmPWZvcGVuKGFyZ3Zb bl0sInJiIik7Ci0rCVNIQV9DVFggbWRfY3R4LG9fY3R4OwotKwl1bnNpZ25lZCBjaGFyIG1kWzIw XTsKLSsJaW50IGk7Ci0rCi0rCWlmKCFmKQotKwkgICAgewotKwkgICAgcGVycm9yKGFyZ3Zbbl0p OwotKwkgICAgZXhpdCgyKTsKLSsJICAgIH0KLSsKLSsJaG1hY19pbml0KCZtZF9jdHgsJm9fY3R4 LGtleSk7Ci0rCWZvciggOyA7ICkKLSsJICAgIHsKLSsJICAgIGNoYXIgYnVmWzEwMjRdOwotKwkg ICAgc2l6ZV90IGw9ZnJlYWQoYnVmLDEsc2l6ZW9mIGJ1ZixmKTsKLSsKLSsJICAgIGlmKGwgPT0g MCkKLSsJCXsKLSsJCWlmKGZlcnJvcihmKSkKLSsJCSAgICB7Ci0rCQkgICAgcGVycm9yKGFyZ3Zb bl0pOwotKwkJICAgIGV4aXQoMyk7Ci0rCQkgICAgfQotKwkJZWxzZQotKwkJICAgIGJyZWFrOwot KwkJfQotKwkgICAgU0hBMV9VcGRhdGUoJm1kX2N0eCxidWYsbCk7Ci0rCSAgICB9Ci0rCWhtYWNf ZmluYWwobWQsJm1kX2N0eCwmb19jdHgpOwotKwotKwlpZiAoYmluYXJ5KQotKwkgICAgewotKwkg ICAgZndyaXRlKG1kLDIwLDEsc3Rkb3V0KTsKLSsJICAgIGJyZWFrOwkvKiAuLi4gZm9yIHNpbmds ZSghKSBmaWxlICovCi0rCSAgICB9Ci0rCi0rCXByaW50ZigiSE1BQy1TSEExKCVzKT0gIixhcmd2 W25dKTsKLSsJZm9yKGk9MCA7IGkgPCAyMCA7ICsraSkKLSsJICAgIHByaW50ZigiJTAyeCIsbWRb aV0pOwotKwlwcmludGYoIlxuIik7Ci0rCX0KLSsjZW5kaWYKLSsgICAgcmV0dXJuIDA7Ci0rICAg IH0KLSsKLSsKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9m aXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCi0tLS0gL2Rldi9udWxsCTIwMDktMTEtMDQgMTI6MDA6NTgu ODAxMDAyMjc2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9maXBz X3Rlc3Rfc3VpdGUuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAs MCArMSw1ODggQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUg T3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqCi0rICogVGhp cyBjb21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBGSVBTLTE0MCB0 ZXN0aW5nCi0rICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFsaWRhdGlvbi4gIEl0IGRlbW9u c3RyYXRlcyB0aGUgdXNlIG9mIHRoZQotKyAqIE9wZW5TU0wgbGlicmFyeSBpdG8gcGVyZm9ybSBh IHZhcmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKLSsgKiBmdW5jdGlvbnMuICBBIHBvd2Vy LXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJlcmF0ZWx5Ci0rICogcG9pbnRp bmcgdG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhhc2gKLSsgKgotKyAqIENvbnRyaWJ1dGVkIGJ5 IFN0ZXZlIE1hcnF1ZXNzLgotKyAqCi0rICovCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1 ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4K LSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZGVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaW5jbHVkZSA8b3Bl bnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rCi0rI2luY2x1ZGUgPG9w ZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvc2hhLmg+Ci0rCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQotKyAgICB7Ci0rICAgIHByaW50ZigiTm8gRklQUyBzdXBwb3J0XG4i KTsKLSsgICAgcmV0dXJuKDApOwotKyAgICB9Ci0rI2Vsc2UKLSsKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2luY2x1ZGUgImZpcHNfdXRsLmgiCi0rCi0rLyogQUVTOiBlbmNyeXB0IGFu ZCBkZWNyeXB0IGtub3duIHBsYWludGV4dCwgdmVyaWZ5IHJlc3VsdCBtYXRjaGVzIG9yaWdpbmFs IHBsYWludGV4dAotKyovCi0rc3RhdGljIGludCBGSVBTX2Flc190ZXN0KHZvaWQpCi0rCXsKLSsJ aW50IHJldCA9IDA7Ci0rCXVuc2lnbmVkIGNoYXIgcGx0bXBbMTZdOwotKwl1bnNpZ25lZCBjaGFy IGNpdG1wWzE2XTsKLSsJdW5zaWduZWQgY2hhciBrZXlbMTZdID0geyAxLDIsMyw0LDUsNiw3LDgs OSwxMCwxMSwxMiwxMywxNCwxNSwxNn07Ci0rCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzE2XSA9 ICJldGFvbnJpc2hkbGN1IjsKLSsJRVZQX0NJUEhFUl9DVFggY3R4OwotKwlFVlBfQ0lQSEVSX0NU WF9pbml0KCZjdHgpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xMjhf ZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9DaXBo ZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYpOwotKwlpZiAoRVZQX0NpcGhlckluaXRfZXgo JmN0eCwgRVZQX2Flc18xMjhfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJZ290 byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCAxNik7Ci0rCWlmIChtZW1j bXAocGx0bXAsIHBsYWludGV4dCwgMTYpKQotKwkJZ290byBlcnI7Ci0rCXJldCA9IDE7Ci0rCWVy cjoKLSsJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsJcmV0dXJuIHJldDsKLSsJfQot KwotK3N0YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qodm9pZCkKLSsJewotKwlpbnQgcmV0ID0gMDsK LSsJdW5zaWduZWQgY2hhciBwbHRtcFs4XTsKLSsJdW5zaWduZWQgY2hhciBjaXRtcFs4XTsKLSsg ICAgCXVuc2lnbmVkIGNoYXIga2V5W10gPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEz LDE0LDE1LDE2LDE3LDE4LAotKwkJICAgICAgICAgICAgICAxOSwyMCwyMSwyMiwyMywyNH07Ci0r ICAgIAl1bnNpZ25lZCBjaGFyIHBsYWludGV4dFtdID0geyAnZScsICd0JywgJ2EnLCAnbycsICdu JywgJ3InLCAnaScsICdzJyB9OwotKwlFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rCUVWUF9DSVBIRVJf Q1RYX2luaXQoJmN0eCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfZGVzX2Vk ZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKwkJZ290byBlcnI7Ci0rCUVWUF9D aXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgOCk7Ci0rCWlmIChFVlBfQ2lwaGVySW5pdF9l eCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCksTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKwkJ Z290byBlcnI7Ci0rCUVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCA4KTsKLSsJaWYgKG1l bWNtcChwbHRtcCwgcGxhaW50ZXh0LCA4KSkKLSsJCWdvdG8gZXJyOwotKwlyZXQgPSAxOwotKwll cnI6Ci0rCUVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rCXJldHVybiByZXQ7Ci0rCX0K LSsKLSsvKgotKyAqIERTQTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBs YWludGV4dC4KLSsgKi8KLStzdGF0aWMgaW50IEZJUFNfZHNhX3Rlc3QoaW50IGJhZCkKLSsgICAg ewotKyAgICBEU0EgKmRzYSA9IE5VTEw7Ci0rICAgIEVWUF9QS0VZIHBrOwotKyAgICB1bnNpZ25l ZCBjaGFyIGRnc3RbXSA9ICJldGFvbnJpc2hkbGMiOwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2 MF07Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAgICBpbnQgciA9IDA7Ci0rICAgIEVWUF9N RF9DVFggbWN0eDsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIEVWUF9NRF9DVFhf aW5pdCgmbWN0eCk7Ci0rICAgIGRzYSA9IERTQV9uZXcoKTsKLSsgICAgaWYgKCFkc2EpCi0rCWdv dG8gZW5kOwotKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgMTAyNCxO VUxMLDAsTlVMTCxOVUxMLE5VTEwpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYgKCFEU0FfZ2VuZXJh dGVfa2V5KGRzYSkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoYmFkKQotKwkgICAgQk5fYWRkX3dv cmQoZHNhLT5wdWJfa2V5LCAxKTsKLSsKLSsgICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsg ICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCi0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4 LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsJZ290byBlbmQ7Ci0rICAgIGlmICghRVZQX1NpZ25VcGRh dGUoJm1jdHgsIGRnc3QsIHNpemVvZihkZ3N0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgaWYg KCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAmcGspKQotKwlnb3RvIGVuZDsKLSsK LSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0r CWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGRnc3QsIHNpemVv ZihkZ3N0KSAtIDEpKQotKwlnb3RvIGVuZDsKLSsgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0 eCwgYnVmLCBzbGVuLCAmcGspOwotKyAgICBlbmQ6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgm bWN0eCk7Ci0rICAgIGlmIChkc2EpCi0rICAJICBEU0FfZnJlZShkc2EpOwotKyAgICBpZiAociAh PSAxKQotKwlyZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKgotKyAqIFJT QTogZ2VuZXJhdGUga2V5cyBhbmQgc2lnbiwgdmVyaWZ5IGlucHV0IHBsYWludGV4dC4KLSsgKi8K LStzdGF0aWMgaW50IEZJUFNfcnNhX3Rlc3QoaW50IGJhZCkKLSsgICAgewotKyAgICBSU0EgKmtl eTsKLSsgICAgdW5zaWduZWQgY2hhciBpbnB1dF9wdGV4dFtdID0gImV0YW9ucmlzaGRsYyI7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07Ci0rICAgIHVuc2lnbmVkIGludCBzbGVuOwotKyAg ICBCSUdOVU0gKmJuOwotKyAgICBFVlBfTURfQ1RYIG1jdHg7Ci0rICAgIEVWUF9QS0VZIHBrOwot KyAgICBpbnQgciA9IDA7Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURf Q1RYX2luaXQoJm1jdHgpOwotKyAgICBrZXkgPSBSU0FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3 KCk7Ci0rICAgIGlmICgha2V5IHx8ICFibikKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX3NldF93b3Jk KGJuLCA2NTUzNyk7Ci0rICAgIGlmICghUlNBX2dlbmVyYXRlX2tleV9leChrZXksIDEwMjQsYm4s TlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBCTl9mcmVlKGJuKTsKLSsgICAgaWYgKGJhZCkKLSsJ ICAgIEJOX2FkZF93b3JkKGtleS0+biwgMSk7Ci0rCi0rICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9S U0E7Ci0rICAgIHBrLnBrZXkucnNhID0ga2V5OwotKwotKyAgICBpZiAoIUVWUF9TaWduSW5pdF9l eCgmbWN0eCwgRVZQX3NoYTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9T aWduVXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQot Kwlnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZzbGVuLCAm cGspKQotKwlnb3RvIGVuZDsKLSsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwg RVZQX3NoYTEoKSwgTlVMTCkpCi0rCWdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRh dGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCi0rCWdvdG8g ZW5kOwotKyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0r ICAgIGVuZDoKLSsgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsgICAgaWYgKGtleSkK LSsgIAkgICAgUlNBX2ZyZWUoa2V5KTsKLSsgICAgaWYgKHIgIT0gMSkKLSsJcmV0dXJuIDA7Ci0r ICAgIHJldHVybiAxOwotKyAgICB9Ci0rCi0rLyogU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93 biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3Jy ZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19zaGExX3Rlc3QoKQotKyAgICB7Ci0rICAg IHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQV9ESUdFU1RfTEVOR1RIXSA9Ci0rICAgICAgICB7IDB4 MTEsIDB4ZjEsIDB4OWEsIDB4M2EsIDB4ZWMsIDB4MWEsIDB4MWUsIDB4OGUsIDB4NjUsIDB4ZDQs IDB4OWEsIDB4MzgsIDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUsIDB4 MTggfTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKLSsKLSsgICAg dW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIEVSUl9jbGVhcl9l cnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNpemVvZihzdHIpIC0gMSxtZCwgTlVM TCwgRVZQX3NoYTEoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2Vz dCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAg fQotKwotKy8qIFNIQTI1NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5k IGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0 YXRpYyBpbnQgRklQU19zaGEyNTZfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBk aWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0KLSsJezB4ZjUsIDB4NTMsIDB4Y2QsIDB4Yjgs IDB4Y2YsIDB4MSwgMHhlZSwgMHgxNywgMHg5YiwgMHg5MywgMHhjOSwgMHg2OCwgMHhjMCwgMHhl YSwgMHg0MCwgMHg5MSwKLSsJIDB4NiwgMHhlYywgMHg4ZSwgMHgxMSwgMHg5NiwgMHhjOCwgMHg1 ZCwgMHgxYywgMHhhZiwgMHg2NCwgMHgyMiwgMHhlNiwgMHg1MCwgMHg0ZiwgMHg0NywgMHg1N307 Ci0rICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7Ci0rCi0rICAgIHVuc2ln bmVkIGNoYXIgbWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBFUlJfY2xlYXJfZXJy b3IoKTsKLSsgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEws IEVWUF9zaGEyNTYoKSwgTlVMTCkpIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKG1kLGRpZ2Vz dCxzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSsgICAg fQotKwotKy8qIFNIQTUxMjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5k IGNvbXBhcmUgdG8ga25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0 YXRpYyBpbnQgRklQU19zaGE1MTJfdGVzdCgpCi0rICAgIHsKLSsgICAgdW5zaWduZWQgY2hhciBk aWdlc3RbU0hBNTEyX0RJR0VTVF9MRU5HVEhdID0KLSsJezB4OTksIDB4YzksIDB4ZTksIDB4NWIs IDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4NWYsIDB4OTQsIDB4NzEsIDB4 NjQsIDB4MjgsIDB4Y2EsCi0rCSAweDE2LCAweDFmLCAweDNkLCAweGY0LCAweDFmLCAweGYzLCAw eDBmLCAweGM1LCAweDAzLCAweDk5LCAweGIyLCAweGQwLCAweGU3LCAweDBiLCAweDk0LCAweDRh LAotKwkgMHg0NSwgMHhkMiwgMHg2YywgMHg0ZiwgMHgyMCwgMHgwNiwgMHhlZiwgMHg3MSwgMHhh OSwgMHgyNSwgMHg3ZiwgMHgyNCwgMHhiMSwgMHhkOSwgMHg0MCwgMHgyMiwKLSsJIDB4NDksIDB4 NTQsIDB4MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYs IDB4ZWIsIDB4MmQsIDB4NDIsIDB4MWQsIDB4YTN9OwotKyAgICB1bnNpZ25lZCBjaGFyIHN0cltd ID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1Rf TEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghRVZQX0RpZ2Vz dChzdHIsc2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhNTEyKCksIE5VTEwpKSByZXR1 cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCxkaWdlc3Qsc2l6ZW9mKG1kKSkpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTE6IGdlbmVy YXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAg cHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEx X3Rlc3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7 Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVk IGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweDczLCAweGY3LCAweGEwLCAweDQ4 LCAweGY4LCAweDk0LCAweGVkLCAweGRkLCAweDBhLCAweGVhLCAweGVhLCAweDU2LCAweDFiLCAw eDYxLCAweDJlLCAweDcwLAotKwkgMHhiMiwgMHhmYiwgMHhlYywgMHhjNn07Ci0rCi0rICAgIHVu c2lnbmVkIGNoYXIgb3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRs ZW47Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTEo KSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2YoaXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4g MDsKLSsgICAgaWYgKG1lbWNtcChvdXQsa2F2YWwsb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAw OwotKyAgICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIEhNQUMtU0hBMjI0OiBnZW5lcmF0ZSBo YXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNv bXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX2htYWNfc2hhMjI0X3Rl c3QoKQotKyAgICB7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNo YXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rCXsweDc1LCAweDU4LCAweGQ1LCAweGJkLCAw eDU1LCAweDZkLCAweDg3LCAweDBmLCAweDc1LCAweGZmLCAweGJlLCAweDFjLCAweGIyLCAweGYw LCAweDIwLCAweDM1LAotKwkgMHhlNSwgMHg2MiwgMHg0OSwgMHhiNiwgMHg5NCwgMHhiOSwgMHhm YywgMHg2NSwgMHgzNCwgMHgzMywgMHgzYSwgMHgxOX07Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIg b3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAg IEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTIyNCgpLGtleSxzaXpl b2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBp ZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJl dHVybiAxOwotKyAgICB9Ci0rCi0rLyogSE1BQy1TSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25v d24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29y cmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpCi0rICAg IHsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKLSsgICAgdW5zaWdu ZWQgY2hhciBpdltdID0gIlNhbXBsZSB0ZXh0IjsKLSsgICAgdW5zaWduZWQgY2hhciBrYXZhbFtF VlBfTUFYX01EX1NJWkVdID0KLSsJezB4ZTksIDB4MTcsIDB4YzEsIDB4N2IsIDB4NGMsIDB4NmIs IDB4NzcsIDB4ZGEsIDB4ZDIsIDB4MzAsIDB4MzYsIDB4MDIsIDB4ZjUsIDB4NzIsIDB4MzMsIDB4 ODcsCi0rCSAweDlmLCAweGM2LCAweDZlLCAweDdiLCAweDdlLCAweGE4LCAweGVhLCAweGFhLCAw eDlmLCAweGJhLCAweGVlLCAweDUxLCAweGZmLCAweGRhLCAweDI0LCAweGY0fTsKLSsKLSsgICAg dW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91 dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hh MjU2KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0 dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1 cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTM4NDogZ2VuZXJh dGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBw cmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTM4 NF90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQi OwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25l ZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhiMiwgMHg5ZCwgMHg0MCwgMHg1 OCwgMHgzMiwgMHhjNCwgMHhlMywgMHgzMSwgMHhiNiwgMHg2MywgMHgwOCwgMHgyNiwgMHg5OSwg MHhlZiwgMHgzYiwgMHgxMCwKLSsJIDB4ZTIsIDB4ZGYsIDB4ZjgsIDB4ZmYsIDB4YzYsIDB4ZTEs IDB4MDMsIDB4MjksIDB4ODEsIDB4MmEsIDB4MWIsIDB4YWMsIDB4YjAsIDB4MDcsIDB4MzksIDB4 MDgsCi0rCSAweGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2LCAweGQ2LCAweDRjLCAweDIwLCAw eGZiLCAweDRkLCAweGMzLCAweGYzLCAweGI4LCAweDliLCAweDg4LCAweDFjfTsKLSsKLSsgICAg dW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91 dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQyhFVlBfc2hh Mzg0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0bGVuKSkgcmV0 dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCi0rICAgICAgICByZXR1 cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsKLSsvKiBITUFDLVNIQTUxMjogZ2VuZXJh dGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KLSsgICBw cmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTUx Ml90ZXN0KCkKLSsgICAgewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQi OwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25l ZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKwl7MHhjZCwgMHgzZSwgMHhiOSwgMHg1 MSwgMHhiOCwgMHhiYywgMHg3ZiwgMHg5YSwgMHgyMywgMHhhZiwgMHhmMywgMHg3NywgMHg1OSwg MHg4NSwgMHhhOSwgMHhlNiwKLSsJIDB4ZjcsIDB4ZDEsIDB4NTEsIDB4OTYsIDB4MTcsIDB4ZTAs IDB4OTIsIDB4ZDgsIDB4YTYsIDB4M2IsIDB4YzEsIDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2EsIDB4 YjEsCi0rCSAweGQ3LCAweDc5LCAweDBhLCAweGE1LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAw eDBiLCAweGE2LCAweDUyLCAweDZiLCAweDYxLCAweDdmLCAweGViLCAweDljLAotKwkgMHg0Nywg MHg4NiwgMHg1ZCwgMHg3NCwgMHgyYiwgMHg4OCwgMHhkZiwgMHhlZSwgMHg0NiwgMHg2OSwgMHg5 NiwgMHgzZCwgMHhhNiwgMHhkOSwgMHgyYSwgMHg1M307Ci0rCi0rICAgIHVuc2lnbmVkIGNoYXIg b3V0W0VWUF9NQVhfTURfU0laRV07Ci0rICAgIHVuc2lnbmVkIGludCBvdXRsZW47Ci0rCi0rICAg IEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBpZiAoIUhNQUMoRVZQX3NoYTUxMigpLGtleSxzaXpl b2Yoa2V5KS0xLGl2LHNpemVvZihpdiktMSxvdXQsJm91dGxlbikpIHJldHVybiAwOwotKyAgICBp ZiAobWVtY21wKG91dCxrYXZhbCxvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJl dHVybiAxOwotKyAgICB9Ci0rCi0rCi0rLyogREg6IGdlbmVyYXRlIHNoYXJlZCBwYXJhbWV0ZXJz Ci0rKi8KLStzdGF0aWMgaW50IGRoX3Rlc3QoKQotKyAgICB7Ci0rICAgIERIICpkaDsKLSsgICAg RVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGRoID0gRklQU19kaF9uZXcoKTsKLSsgICAgaWYgKCFk aCkKLSsJcmV0dXJuIDA7Ci0rICAgIGlmICghREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkaCwg MTAyNCwgMiwgTlVMTCkpCi0rCXJldHVybiAwOwotKyAgICBGSVBTX2RoX2ZyZWUoZGgpOwotKyAg ICByZXR1cm4gMTsKLSsgICAgfQotKwotKy8qIFplcm9pemUKLSsqLwotK3N0YXRpYyBpbnQgWmVy b2l6ZSgpCi0rICAgIHsKLSsgICAgUlNBICprZXk7Ci0rICAgIEJJR05VTSAqYm47Ci0rICAgIHVu c2lnbmVkIGNoYXIgdXNlcmtleVsxNl0gPSAKLSsJeyAweDQ4LCAweDUwLCAweGYwLCAweGEzLCAw eDNhLCAweGVkLCAweGQzLCAweGFmLCAweDZlLCAweDQ3LCAweDdmLCAweDgzLCAweDAyLCAweGIx LCAweDA5LCAweDY4IH07Ci0rICAgIGludCBpLCBuOwotKwotKyAgICBrZXkgPSBGSVBTX3JzYV9u ZXcoKTsKLSsgICAgYm4gPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFrZXkgfHwgIWJuKQotKwlyZXR1 cm4gMDsKLSsgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKLSsgICAgaWYgKCFSU0FfZ2VuZXJh dGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKLSsJcmV0dXJuIDA7Ci0rICAgIEJOX2ZyZWUo Ym4pOwotKyAgICAKLSsgICAgbiA9IEJOX251bV9ieXRlcyhrZXktPmQpOwotKyAgICBwcmludGYo IiBHZW5lcmF0ZWQgJWQgYnl0ZSBSU0EgcHJpdmF0ZSBrZXlcbiIsIG4pOwotKyAgICBwcmludGYo Ilx0Qk4ga2V5IGJlZm9yZSBvdmVyd3JpdGluZzpcbiIpOwotKyAgICBkb19ibl9wcmludChzdGRv dXQsIGtleS0+ZCk7Ci0rICAgIEJOX3JhbmQoa2V5LT5kLG4qOCwtMSwwKTsKLSsgICAgcHJpbnRm KCJcdEJOIGtleSBhZnRlciBvdmVyd3JpdGluZzpcbiIpOwotKyAgICBkb19ibl9wcmludChzdGRv dXQsIGtleS0+ZCk7Ci0rCi0rICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3JlIG92 ZXJ3cml0aW5nOiBcblx0XHQiKTsKLSsgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkp OyBpKyspIHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOwotKyAgICAgICAgcHJpbnRmKCJcbiIp OwotKyAgICBSQU5EX2J5dGVzKHVzZXJrZXksIHNpemVvZiB1c2Vya2V5KTsKLSsgICAgcHJpbnRm KCJcdGNoYXIgYnVmZmVyIGtleSBhZnRlciBvdmVyd3JpdGluZzogXG5cdFx0Iik7Ci0rICAgIGZv cihpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKSBwcmludGYoIiUwMngiLCB1c2Vya2V5 W2ldKTsKLSsgICAgICAgIHByaW50ZigiXG4iKTsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rICAgIH0K LSsKLStzdGF0aWMgaW50IEVycm9yOwotK2NvbnN0IGNoYXIgKiBGYWlsKGNvbnN0IGNoYXIgKm1z ZykKLSsgICAgewotKyAgICBkb19wcmludF9lcnJvcnMoKTsKLSsgICAgRXJyb3IrKzsKLSsgICAg cmV0dXJuIG1zZzsgCi0rICAgIH0KLSsKLStpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikK LSsgICAgewotKwotKyAgICBpbnQgZG9fY29ycnVwdF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29ycnVw dF9kc2Ffa2V5Z2VuID0gMDsKLSsgICAgaW50IGJhZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsKLSsg ICAgaW50IGRvX3JuZ19zdGljayA9IDA7Ci0rICAgIGludCBub19leGl0ID0gMDsKLSsKLSsgICAg cHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxpY2F0aW9uXG5cbiIpOwotKwotKyAgICAvKiBM b2FkIGVudHJvcHkgZnJvbSBleHRlcm5hbCBmaWxlLCBpZiBhbnkgKi8KLSsgICAgUkFORF9sb2Fk X2ZpbGUoIi5ybmQiLCAxMDI0KTsKLSsKLSsgICAgaWYgKGFyZ3ZbMV0pIHsKLSsgICAgICAgIC8q IENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8KLSsgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJh ZXMiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9hZXMoKTsKLSsgICAgICAgICAgICBw cmludGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4i KTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZGVzIikpIHsKLSsgICAg ICAgICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJERVMzLUVD QiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAg ICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNhIikpIHsKLSsgICAgICAgICAgICBG SVBTX2NvcnJ1cHRfZHNhKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRp b24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Ci0r ICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYSIpKSB7Ci0rICAgICAgICAg ICAgRklQU19jb3JydXB0X3JzYSgpOwotKyAgICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5l cmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIp OwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXkiKSkgewotKyAg ICAgICAgICAgIHByaW50ZigiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRh dGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOwotKwkgICAgYmFkX3JzYSA9IDE7Ci0rCSAg ICBub19leGl0ID0gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicnNh a2V5Z2VuIikpIHsKLSsJICAgIGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDE7Ci0rCSAgICBub19l eGl0ID0gMTsKLSsgICAgICAgICAgICBwcmludGYoIlJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2ln bmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKLSsgICAgICAg IH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5IikpIHsKLSsgICAgICAgICAgICBw cmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBj b3JydXB0ZWQga2V5Li4uXG4iKTsKLSsJICAgIGJhZF9kc2EgPSAxOwotKwkgICAgbm9fZXhpdCA9 IDE7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImRzYWtleWdlbiIpKSB7 Ci0rCSAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0r ICAgICAgICAgICAgcHJpbnRmKCJEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxp ZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleWdlbi4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYg KCFzdHJjbXAoYXJndlsxXSwgInNoYTEiKSkgewotKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9z aGExKCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJTSEEtMSBoYXNoIHdpdGggY29ycnVwdGVkIEtB VC4uLlxuIik7Ci0rCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nIikpIHsKLSsJICAg IEZJUFNfY29ycnVwdF9ybmcoKTsKLSsJfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJybmdz dGljayIpKSB7Ci0rCSAgICBkb19ybmdfc3RpY2sgPSAxOwotKwkgICAgbm9fZXhpdCA9IDE7Ci0r CSAgICBwcmludGYoIlJORyB0ZXN0IHdpdGggc3R1Y2sgY29udGludW91cyB0ZXN0Li4uXG4iKTsK LSsgICAgICAgIH0gZWxzZSB7Ci0rICAgICAgICAgICAgcHJpbnRmKCJCYWQgYXJndW1lbnQgXCIl c1wiXG4iLCBhcmd2WzFdKTsKLSsgICAgICAgICAgICBleGl0KDEpOwotKyAgICAgICAgfQotKwlp ZiAoIW5vX2V4aXQpIHsKLSsgICAgICAgIAlpZiAoIUZJUFNfbW9kZV9zZXQoMSkpIHsKLSsgCQkg ICAgZG9fcHJpbnRfZXJyb3JzKCk7Ci0rICAgICAgICAJICAgIHByaW50ZigiUG93ZXItdXAgc2Vs ZiB0ZXN0IGZhaWxlZFxuIik7Ci0rCQkgICAgZXhpdCgxKTsKLSsJCX0KLSsgICAgICAgIAlwcmlu dGYoIlBvd2VyLXVwIHNlbGYgdGVzdCBzdWNjZXNzZnVsXG4iKTsKLSsgICAgICAgIAlleGl0KDAp OwotKwl9Ci0rICAgIH0KLSsKLSsgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3Bl cmF0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiMS4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBo aWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIpOwotKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxn b3JpdGhtIChELUgpLi4uIik7Ci0rICAgIHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWxc biIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogUG93ZXItdXAgc2VsZiB0ZXN0 Ci0rICAgICovCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBwcmludGYoIjIuIEF1dG9t YXRpYyBwb3dlci11cCBzZWxmIHRlc3QuLi4iKTsKLSsgICAgaWYgKCFGSVBTX21vZGVfc2V0KDEp KQotKwl7Ci0rCWRvX3ByaW50X2Vycm9ycygpOwotKyAgICAgICAgcHJpbnRmKEZhaWwoIkZBSUxF RCFcbiIpKTsKLSsJZXhpdCgxKTsKLSsJfQotKyAgICBwcmludGYoInN1Y2Nlc3NmdWxcbiIpOwot KyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2VuKQotKyAgICAgICAgICAgIEZJUFNfY29ycnVw dF9kc2Ffa2V5Z2VuKCk7Ci0rICAgIGlmIChkb19jb3JydXB0X3JzYV9rZXlnZW4pCi0rICAgICAg ICAgICAgRklQU19jb3JydXB0X3JzYV9rZXlnZW4oKTsKLSsgICAgaWYgKGRvX3JuZ19zdGljaykK LSsgICAgICAgICAgICBGSVBTX3JuZ19zdGljaygpOwotKwotKyAgICAvKiBBRVMgZW5jcnlwdGlv bi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiMy4gQUVTIGVuY3J5cHRpb24vZGVj cnlwdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfYWVzX3Rlc3QoKSA/ICJzdWNjZXNzZnVs XG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIFJTQSBrZXkgZ2VuZXJhdGlv biBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNC4gUlNB IGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJp bnRmKCBGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKLSsKLSsgICAgLyogREVTLUNCQyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KLSsg ICAgKi8KLSsgICAgcHJpbnRmKCI1LiBERVMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbi4uLiIp OwotKyAgICBwcmludGYoIEZJUFNfZGVzM190ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWls KCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25h dHVyZSB2YWxpZGF0aW9uCi0rICAgICovCi0rICAgIHByaW50ZigiNi4gRFNBIGtleSBnZW5lcmF0 aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbi4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfZHNh X3Rlc3QoYmFkX2RzYSkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwot KwotKyAgICAvKiBTSEEtMSBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2EuIFNIQS0xIGhh c2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIg OiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogU0hBLTI1NiBoYXNoCi0rICAgICov Ci0rICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNf c2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0r Ci0rICAgIC8qIFNIQS01MTIgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdjLiBTSEEtNTEy IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX3NoYTUxMl90ZXN0KCkgPyAic3VjY2Vzc2Z1 bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAvKiBITUFDLVNIQS0xIGhhc2gK LSsgICAgKi8KLSsgICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEtMSBoYXNoLi4uIik7Ci0rICAgIHBy aW50ZiggRklQU19obWFjX3NoYTFfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJ TEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEtMjI0IGhhc2gKLSsgICAgKi8KLSsgICAg cHJpbnRmKCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKCBGSVBTX2ht YWNfc2hhMjI0X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7 Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTI1NiBoYXNoCi0rICAgICovCi0rICAgIHByaW50ZigiN2Yu IEhNQUMtU0hBLTI1NiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZiggRklQU19obWFjX3NoYTI1Nl90 ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOwotKwotKyAgICAv KiBITUFDLVNIQS0zODQgaGFzaAotKyAgICAqLwotKyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0z ODQgaGFzaC4uLiIpOwotKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEzODRfdGVzdCgpID8gInN1 Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKLSsKLSsgICAgLyogSE1BQy1TSEEt NTEyIGhhc2gKLSsgICAgKi8KLSsgICAgcHJpbnRmKCI3aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4i KTsKLSsgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4i IDogIEZhaWwoIkZBSUxFRCFcbiIpICk7Ci0rCi0rICAgIC8qIE5vbi1BcHByb3ZlZCBjcnlwdG9n cmFwaGljIG9wZXJhdGlvbgotKyAgICAqLwotKyAgICBwcmludGYoIjguIE5vbi1BcHByb3ZlZCBj cnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKLSsgICAgcHJpbnRmKCJcdGEuIElu Y2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOwotKyAgICBwcmludGYoIGRoX3Rlc3QoKSA/ICJz dWNjZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6IEZhaWwoImZhaWxlZCBJTkNPUlJFQ1RM WSFcbiIpICk7Ci0rCi0rICAgIC8qIFplcm9pemF0aW9uCi0rICAgICovCi0rICAgIHByaW50Zigi OS4gWmVyby1pemF0aW9uLi4uXG4iKTsKLSsgICAgcHJpbnRmKCBaZXJvaXplKCkgPyAiXHRzdWNj ZXNzZnVsIGFzIGV4cGVjdGVkXG4iCi0rCSAgICA6IEZhaWwoIlx0ZmFpbGVkIElOQ09SUkVDVExZ IVxuIikgKTsKLSsKLSsgICAgcHJpbnRmKCJcbkFsbCB0ZXN0cyBjb21wbGV0ZWQgd2l0aCAlZCBl cnJvcnNcbiIsIEVycm9yKTsKLSsgICAgcmV0dXJuIEVycm9yID8gMSA6IDA7Ci0rICAgIH0KLSsK LSsjZW5kaWYKLWRpZmYgLXVwIC9kZXYvbnVsbCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9m aXBzX2xvY2wuaAotLS0tIC9kZXYvbnVsbAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL2ZpcHNfbG9jbC5oCTIwMDktMTEt MTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMCwwICsxLDcyIEBACi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBh cmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAq Ci0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n Ci0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0r ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S Ci0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgotKyAqCi0rICovCi0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKyNpZmRlZiAgX19j cGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjZW5kaWYKLSsKLSt2b2lkIGZpcHNfd19sb2NrKHZv aWQpOwotK3ZvaWQgZmlwc193X3VubG9jayh2b2lkKTsKLSt2b2lkIGZpcHNfcl9sb2NrKHZvaWQp OwotK3ZvaWQgZmlwc19yX3VubG9jayh2b2lkKTsKLStpbnQgZmlwc19pc19zdGFydGVkKHZvaWQp OwotK3ZvaWQgZmlwc19zZXRfc3RhcnRlZCh2b2lkKTsKLStpbnQgZmlwc19pc19vd25pbmdfdGhy ZWFkKHZvaWQpOwotK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpOwotK3ZvaWQgZmlw c19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKLStpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFk KHZvaWQpOwotKwotKyNkZWZpbmUgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRQkxNgotKwotKyNp ZmRlZiAgX19jcGx1c3BsdXMKLSt9Ci0rI2VuZGlmCi0rI2VuZGlmCi1kaWZmIC11cCAvZGV2L251 bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vZmlwcy9NYWtlZmlsZQotLS0tIC9kZXYvbnVs bAkyMDA5LTExLTA0IDEyOjAwOjU4LjgwMTAwMjI3NiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAg KzAxMDAKLUBAIC0wLDAgKzEsODEgQEAKLSsjCi0rIyBPcGVuU1NML2NyeXB0by9maXBzL01ha2Vm aWxlCi0rIwotKwotK0RJUj0JZmlwcwotK1RPUD0JLi4vLi4KLStDQz0JY2MKLStJTkNMVURFUz0K LStDRkxBRz0tZwotK01BS0VGSUxFPQlNYWtlZmlsZQotK0FSPQkJYXIgcgotKwotK0NGTEFHUz0g JChJTkNMVURFUykgJChDRkxBRykKLSsKLStHRU5FUkFMPU1ha2VmaWxlCi0rVEVTVD1maXBzX3Rl c3Rfc3VpdGUuYyBmaXBzX3JhbmR0ZXN0LmMKLStBUFBTPQotKwotK0xJQj0kKFRPUCkvbGliY3J5 cHRvLmEKLStMSUJTUkM9Zmlwc19hZXNfc2VsZnRlc3QuYyBmaXBzX2Rlc19zZWxmdGVzdC5jIGZp cHNfaG1hY19zZWxmdGVzdC5jIGZpcHNfcmFuZF9zZWxmdGVzdC5jIFwKLSsgICAgZmlwc19yc2Ff c2VsZnRlc3QuYyBmaXBzX3NoYTFfc2VsZnRlc3QuYyBmaXBzLmMgZmlwc19kc2Ffc2VsZnRlc3Qu YyAgZmlwc19yYW5kLmMgXAotKyAgICBmaXBzX3JzYV94OTMxZy5jCi0rCi0rTElCT0JKPWZpcHNf YWVzX3NlbGZ0ZXN0Lm8gZmlwc19kZXNfc2VsZnRlc3QubyBmaXBzX2htYWNfc2VsZnRlc3QubyBm aXBzX3JhbmRfc2VsZnRlc3QubyBcCi0rICAgIGZpcHNfcnNhX3NlbGZ0ZXN0Lm8gZmlwc19zaGEx X3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3NlbGZ0ZXN0Lm8gIGZpcHNfcmFuZC5vIFwKLSsg ICAgZmlwc19yc2FfeDkzMWcubwotKwotK1NSQz0gJChMSUJTUkMpIGZpcHNfc3RhbmRhbG9uZV9z aGExLmMKLSsKLStFWEhFQURFUj0gZmlwcy5oIGZpcHNfcmFuZC5oCi0rSEVBREVSPQkkKEVYSEVB REVSKQotKwotK0FMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0rCi0rdG9wOgot KwkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwpCi0r Ci0rYWxsOglsaWIKLSsKLStsaWI6CSQoTElCT0JKKQotKwkkKEFSKSAkKExJQikgJChMSUJPQkop Ci0rCSQoUkFOTElCKSAkKExJQikgfHwgZWNobyBOZXZlciBtaW5kLgotKwlAdG91Y2ggbGliCi0r Ci0rZmlsZXM6Ci0rCSQoUEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChU T1ApL01JTkZPCi0rCi0rbGlua3M6Ci0rCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAu Li8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikKLSsJQCQoUEVSTCkgJChUT1ApL3V0aWwv bWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQotKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xp bmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCi0rCi0raW5zdGFsbDoKLSsJQFsgLW4gIiQoSU5TVEFM TFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotKwlAaGVhZGVybGlz dD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0rCWRvICBcCi0rCShj cCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7 IFwKLSsJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29w ZW5zc2wvJCRpICk7IFwKLSsJZG9uZTsKLSsKLSt0YWdzOgotKwljdGFncyAkKFNSQykKLSsKLSt0 ZXN0czoKLSsKLStsaW50OgotKwlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYK LSsKLStkZXBlbmQ6Ci0rCUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBi eSB1cHBlciBNYWtlZmlsZS4uLgotKwkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVE RVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJTUkMpCi0rCi0rZGNsZWFuOgotKwkkKFBF UkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgw KTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Ci0rCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1B S0VGSUxFKQotKwotK2NsZWFuOgotKwlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVy ZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgotKwotKyMgRE8gTk9UIERFTEVURSBUSElTIExJTkUg LS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL2htYWMvaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v aG1hYy9obWFjLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9obWFjL2htYWMuYy5m aXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDIuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MC1iZXRhNC9jcnlwdG8vaG1hYy9obWFjLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAg KzAxMDAKLUBAIC03Nyw2ICs3NywxMyBAQCBpbnQgSE1BQ19Jbml0X2V4KEhNQUNfQ1RYICpjdHgs IGNvbnN0IHZvCi0gCi0gCWlmIChrZXkgIT0gTlVMTCkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0rCQlpZiAoRklQU19tb2RlKCkgJiYgIShtZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBT KQotKwkJJiYgKCEoY3R4LT5tZF9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpCi0rCQkgfHwgIShjdHgtPmlfY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9G SVBTX0FMTE9XKQotKwkJIHx8ICEoY3R4LT5vX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19O T05fRklQU19BTExPVykpKQotKwkJCWdvdG8gZXJyOwotKyNlbmRpZgotIAkJcmVzZXQ9MTsKLSAJ CWo9RVZQX01EX2Jsb2NrX3NpemUobWQpOwotIAkJT1BFTlNTTF9hc3NlcnQoaiA8PSAoaW50KXNp emVvZihjdHgtPmtleSkpOwotQEAgLTIwOSwzICsyMTYsMTAgQEAgdW5zaWduZWQgY2hhciAqSE1B Qyhjb25zdCBFVlBfTUQgKmV2cF9tZAotIAlyZXR1cm4gTlVMTDsKLSAJfQotIAotK3ZvaWQgSE1B Q19DVFhfc2V0X2ZsYWdzKEhNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi0rCXsK LSsJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eC0+aV9jdHgsIGZsYWdzKTsKLSsJRVZQX01EX0NU WF9zZXRfZmxhZ3MoJmN0eC0+b19jdHgsIGZsYWdzKTsKLSsJRVZQX01EX0NUWF9zZXRfZmxhZ3Mo JmN0eC0+bWRfY3R4LCBmbGFncyk7Ci0rCX0KLSsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL2htYWMvaG1hYy5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vaG1h Yy9obWFjLmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9obWFjL2htYWMuaC5maXBz CTIwMDktMTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vaG1hYy9obWFjLmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAx MDAKLUBAIC0xMDEsNiArMTAxLDcgQEAgdW5zaWduZWQgY2hhciAqSE1BQyhjb25zdCBFVlBfTUQg KmV2cF9tZAotIAkJICAgIHVuc2lnbmVkIGludCAqbWRfbGVuKTsKLSBpbnQgSE1BQ19DVFhfY29w eShITUFDX0NUWCAqZGN0eCwgSE1BQ19DVFggKnNjdHgpOwotIAotK3ZvaWQgSE1BQ19DVFhfc2V0 X2ZsYWdzKEhNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotIAotICNpZmRlZiAg X19jcGx1c3BsdXMKLSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9NYWtl ZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL01ha2VmaWxlCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vTWFrZWZpbGUuZmlwcwkyMDA5LTA0LTA2IDE2OjMxOjM1LjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL01ha2VmaWxlCTIw MDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMzQsMTQgKzM0LDE0IEBAIEdF TkVSQUw9TWFrZWZpbGUgUkVBRE1FIGNyeXB0by1saWIuY29tIGkKLSAKLSBMSUI9ICQoVE9QKS9s aWJjcnlwdG8uYQotIFNIQVJFRF9MSUI9IGxpYmNyeXB0byQoU0hMSUJfRVhUKQotLUxJQlNSQz0J Y3J5cHRsaWIuYyBtZW0uYyBtZW1fY2xyLmMgbWVtX2RiZy5jIGN2ZXJzaW9uLmMgZXhfZGF0YS5j IGNwdF9lcnIuYyBlYmNkaWMuYyB1aWQuYyBvX3RpbWUuYyBvX3N0ci5jIG9fZGlyLmMKLS1MSUJP Qko9IGNyeXB0bGliLm8gbWVtLm8gbWVtX2RiZy5vIGN2ZXJzaW9uLm8gZXhfZGF0YS5vIGNwdF9l cnIubyBlYmNkaWMubyB1aWQubyBvX3RpbWUubyBvX3N0ci5vIG9fZGlyLm8gJChDUFVJRF9PQkop Ci0rTElCU1JDPQljcnlwdGxpYi5jIG1lbS5jIG1lbV9jbHIuYyBtZW1fZGJnLmMgY3ZlcnNpb24u YyBleF9kYXRhLmMgY3B0X2Vyci5jIGViY2RpYy5jIHVpZC5jIG9fdGltZS5jIG9fc3RyLmMgb19k aXIuYyBvX2luaXQuYyBmaXBzX2Vyci5jCi0rTElCT0JKPSBjcnlwdGxpYi5vIG1lbS5vIG1lbV9k YmcubyBjdmVyc2lvbi5vIGV4X2RhdGEubyBjcHRfZXJyLm8gZWJjZGljLm8gdWlkLm8gb190aW1l Lm8gb19zdHIubyBvX2Rpci5vIG9faW5pdC5vIGZpcHNfZXJyLm8gJChDUFVJRF9PQkopCi0gCi0g U1JDPSAkKExJQlNSQykKLSAKLSBFWEhFQURFUj0gY3J5cHRvLmggb3BlbnNzbHYuaCBvcGVuc3Ns Y29uZi5oIGViY2RpYy5oIHN5bWhhY2tzLmggXAotIAlvc3NsX3R5cC5oCi0tSEVBREVSPQljcnlw dGxpYi5oIGJ1aWxkaW5mLmggbWQzMl9jb21tb24uaCBvX3RpbWUuaCBvX3N0ci5oIG9fZGlyLmgg JChFWEhFQURFUikKLStIRUFERVI9CWNyeXB0bGliLmggYnVpbGRpbmYuaCBmaXBzX2xvY2wuaCBt ZDMyX2NvbW1vbi5oIG9fdGltZS5oIG9fc3RyLmggb19kaXIuaCAkKEVYSEVBREVSKQotIAotIEFM TD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCi0gCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9tZGMyL21kYzJkZ3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9t ZGMyL21kYzJkZ3N0LmMuZmlwcwkyMDA0LTA3LTI1IDIxOjEwOjQxLjAwMDAwMDAwMCArMDIwMAot KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwkyMDA5LTExLTEy IDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTYxLDYgKzYxLDExIEBACi0gI2luY2x1ZGUg PHN0cmluZy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotICNpbmNsdWRlIDxvcGVuc3Ns L21kYzIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotICN1bmRlZiBjMmwK LSAjZGVmaW5lIGMybChjLGwpCShsID0oKERFU19MT05HKSgqKChjKSsrKSkpICAgICwgXAotQEAg LTc1LDcgKzgwLDcgQEAKLSAJCQkqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYw eGZmKSkKLSAKLSBzdGF0aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKLS1pbnQgTURDMl9Jbml0KE1EQzJfQ1RYICpjKQot K0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNREMyKQotIAl7Ci0gCWMtPm51bT0wOwotIAljLT5wYWRf dHlwZT0xOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWRjMi9tZGMyLmgu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZGMyL21kYzIuaAotLS0tIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL21kYzIvbWRjMi5oLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo1MC4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZGMyL21kYzIu aAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTgwLDcgKzgwLDkgQEAg dHlwZWRlZiBzdHJ1Y3QgbWRjMl9jdHhfc3QKLSAJaW50IHBhZF90eXBlOyAvKiBlaXRoZXIgMSBv ciAyLCBkZWZhdWx0IDEgKi8KLSAJfSBNREMyX0NUWDsKLSAKLS0KLSsjaWZkZWYgT1BFTlNTTF9G SVBTCi0raW50IHByaXZhdGVfTURDMl9Jbml0KE1EQzJfQ1RYICpjKTsKLSsjZW5kaWYKLSBpbnQg TURDMl9Jbml0KE1EQzJfQ1RYICpjKTsKLSBpbnQgTURDMl9VcGRhdGUoTURDMl9DVFggKmMsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHNpemVfdCBsZW4pOwotIGludCBNREMyX0ZpbmFsKHVu c2lnbmVkIGNoYXIgKm1kLCBNREMyX0NUWCAqYyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L21kMi9tZDJfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQyL21kMl9k Z3N0LmMuZmlwcwkyMDA3LTA4LTMxIDEyOjEyOjM1LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kMi9tZDJfZGdzdC5jCTIwMDktMTEtMTIgMTI6MzY6NTAu MDAwMDAwMDAwICswMTAwCi1AQCAtNjIsNiArNjIsMTEgQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9t ZDIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotICNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2VuZGlmCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gCi0gY29uc3QgY2hh ciBNRDJfdmVyc2lvbltdPSJNRDIiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLUBAIC0xMTYs NyArMTIxLDcgQEAgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9pZCkKLSAJCXJldHVybigibWQy KGludCkiKTsKLSAJfQotIAotLWludCBNRDJfSW5pdChNRDJfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJ UFNfTURfSW5pdChNRDIpCi0gCXsKLSAJYy0+bnVtPTA7Ci0gCW1lbXNldChjLT5zdGF0ZSwwLHNp emVvZiBjLT5zdGF0ZSk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDIv bWQyLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDIvbWQyLmgKLS0tLSBvcGVu c3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDIvbWQyLmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5 LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kMi9tZDIu aAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTgxLDYgKzgxLDkgQEAg dHlwZWRlZiBzdHJ1Y3QgTUQyc3RhdGVfc3QKLSAJfSBNRDJfQ1RYOwotIAotIGNvbnN0IGNoYXIg Kk1EMl9vcHRpb25zKHZvaWQpOwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgcHJpdmF0ZV9N RDJfSW5pdChNRDJfQ1RYICpjKTsKLSsjZW5kaWYKLSBpbnQgTUQyX0luaXQoTUQyX0NUWCAqYyk7 Ci0gaW50IE1EMl9VcGRhdGUoTUQyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwg c2l6ZV90IGxlbik7Ci0gaW50IE1EMl9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQyX0NUWCAq Yyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNC9tZDRfZGdzdC5jCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ0L21kNF9kZ3N0LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3 OjExLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNC9t ZDRfZGdzdC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtNTksNiAr NTksMTEgQEAKLSAjaW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSAibWQ0X2xvY2wuaCIKLSAj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlm Ci0rCi0gCi0gY29uc3QgY2hhciBNRDRfdmVyc2lvbltdPSJNRDQiIE9QRU5TU0xfVkVSU0lPTl9Q VEVYVDsKLSAKLUBAIC03MCw3ICs3NSw3IEBAIGNvbnN0IGNoYXIgTUQ0X3ZlcnNpb25bXT0iTUQ0 IiBPUEVOU1NMX1YKLSAjZGVmaW5lIElOSVRfREFUQV9DICh1bnNpZ25lZCBsb25nKTB4OThiYWRj ZmVMCi0gI2RlZmluZSBJTklUX0RBVEFfRCAodW5zaWduZWQgbG9uZykweDEwMzI1NDc2TAotIAot LWludCBNRDRfSW5pdChNRDRfQ1RYICpjKQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChNRDQpCi0g CXsKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPkE9SU5JVF9EQVRBX0E7Ci1kaWZm IC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDQvbWQ0LmguZmlwcyBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9tZDQvbWQ0LmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9tZDQvbWQ0LmguZmlwcwkyMDA5LTExLTEyIDEyOjM2OjQ5LjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNC9tZDQuaAkyMDA5LTExLTEyIDEyOjM2OjUw LjAwMDAwMDAwMCArMDEwMAotQEAgLTEwNSw2ICsxMDUsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDRz dGF0ZV9zdAotIAl1bnNpZ25lZCBpbnQgbnVtOwotIAl9IE1ENF9DVFg7Ci0gCi0rI2lmZGVmIE9Q RU5TU0xfRklQUwotK2ludCBwcml2YXRlX01ENF9Jbml0KE1ENF9DVFggKmMpOwotKyNlbmRpZgot IGludCBNRDRfSW5pdChNRDRfQ1RYICpjKTsKLSBpbnQgTUQ0X1VwZGF0ZShNRDRfQ1RYICpjLCBj b25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgTUQ0X0ZpbmFsKHVuc2lnbmVkIGNo YXIgKm1kLCBNRDRfQ1RYICpjKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRv L21kNS9tZDVfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ1L21kNV9k Z3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBz CTIwMDctMDEtMjEgMTQ6MDc6MTEuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAg KzAxMDAKLUBAIC01OSw2ICs1OSwxMSBAQAotICNpbmNsdWRlIDxzdGRpby5oPgotICNpbmNsdWRl ICJtZDVfbG9jbC5oIgotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW109Ik1ENSIg T1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTcwLDcgKzc1LDcgQEAgY29uc3QgY2hhciBN RDVfdmVyc2lvbltdPSJNRDUiIE9QRU5TU0xfVgotICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2ln bmVkIGxvbmcpMHg5OGJhZGNmZUwKLSAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25n KTB4MTAzMjU0NzZMCi0gCi0taW50IE1ENV9Jbml0KE1ENV9DVFggKmMpCi0rRklQU19OT05fRklQ U19NRF9Jbml0KE1ENSkKLSAJewotIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+QT1J TklUX0RBVEFfQTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNS9tZDUu aC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21kNS9tZDUuaAotLS0tIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL21kNS9tZDUuaC5maXBzCTIwMDktMTEtMTIgMTI6MzY6NDkuMDAw MDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vbWQ1L21kNS5oCTIw MDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTA1LDYgKzEwNSw5IEBAIHR5 cGVkZWYgc3RydWN0IE1ENXN0YXRlX3N0Ci0gCXVuc2lnbmVkIGludCBudW07Ci0gCX0gTUQ1X0NU WDsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfTUQ1X0luaXQoTUQ1X0NU WCAqYyk7Ci0rI2VuZGlmCi0gaW50IE1ENV9Jbml0KE1ENV9DVFggKmMpOwotIGludCBNRDVfVXBk YXRlKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwotIGludCBNRDVf RmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENV9DVFggKmMpOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vbWVtLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9t ZW0uYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL21lbS5jLmZpcHMJMjAwOC0xMS0x MiAwNDo1Nzo0Ny4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9tZW0uYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTEwMSw3ICsx MDEsNyBAQCBzdGF0aWMgdm9pZCAoKmZyZWVfbG9ja2VkX2Z1bmMpKHZvaWQgKikgCi0gCi0gLyog bWF5IGJlIGNoYW5nZWQgYXMgbG9uZyBhcyAnYWxsb3dfY3VzdG9taXplX2RlYnVnJyBpcyBzZXQg Ki8KLSAvKiBYWFggdXNlIGNvcnJlY3QgZnVuY3Rpb24gcG9pbnRlciB0eXBlcyAqLwotLSNpZmRl ZiBDUllQVE9fTURFQlVHCi0rI2lmIGRlZmluZWQoQ1JZUFRPX01ERUJVRykgJiYgIWRlZmluZWQo T1BFTlNTTF9GSVBTKQotIC8qIHVzZSBkZWZhdWx0IGZ1bmN0aW9ucyBmcm9tIG1lbV9kYmcuYyAq LwotIHN0YXRpYyB2b2lkICgqbWFsbG9jX2RlYnVnX2Z1bmMpKHZvaWQgKixpbnQsY29uc3QgY2hh ciAqLGludCxpbnQpCi0gCT0gQ1JZUFRPX2RiZ19tYWxsb2M7Ci1kaWZmIC11cCAvZGV2L251bGwg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vb19pbml0LmMKLS0tLSAvZGV2L251bGwJMjAwOS0x MS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9vX2luaXQuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTAs MCArMSw4MCBAQAotKy8qIG9faW5pdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4g SGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4K LSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwNyBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g Ci0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBk aXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0r ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsg KgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKgotKyAqIFRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3Vu ZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KLSsgKgot KyAqLwotKwotKyNpbmNsdWRlIDxlX29zLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0r Ci0rLyogUGVyZm9ybSBhbnkgZXNzZW50aWFsIE9wZW5TU0wgaW5pdGlhbGl6YXRpb24gb3BlcmF0 aW9ucy4KLSsgKiBDdXJyZW50bHkgb25seSBzZXRzIEZJUFMgY2FsbGJhY2tzCi0rICovCi0rCi0r dm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKQotKwl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwlzdGF0aWMgaW50IGRvbmUgPSAwOwotKwlpZiAoIWRvbmUpCi0rCQl7Ci0rI2lmZGVmIENS WVBUT19NREVCVUcKLSsJCUNSWVBUT19tYWxsb2NfZGVidWdfaW5pdCgpOwotKyNlbmRpZgotKwkJ ZG9uZSA9IDE7Ci0rCQl9Ci0rI2VuZGlmCi0rCX0KLSsJCQotKwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL29wZW5zc2xjb25mLmguaW4KLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9vcGVuc3NsY29uZi5oLmluLmZpcHMJMjAwNS0xMi0xNiAxMTozNzoyMy4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9vcGVuc3NsY29uZi5oLmluCTIwMDkt MTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMSw1ICsxLDIwIEBACi0gLyogY3J5 cHRvL29wZW5zc2xjb25mLmguaW4gKi8KLSAKLSsjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQ RU5ECi0rCi0rLyogSW5jbHVkZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBs aWNpdGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJlCi0rICogdGhhdCBzaG91bGQgYmUgdmlzaWJs ZSB0byBtYWtlZGVwZW5kLgotKyAqCi0rICogW091ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0 dWFsbHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRpbmdzCi0rICogaW5z dGVhZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdp dGggZGlzYWJsZWQgYWxnb3JpdGhtcy5dCi0rICovCi0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMK LSsjZGVmaW5lIE9QRU5TU0xfRklQUwotKyNlbmRpZgotKwotKyNlbmRpZgotKwotIC8qIEdlbmVy YXRlIDgwMzg2IGNvZGU/ICovCi0gI3VuZGVmIEkzODZfT05MWQotIAotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBzIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3BrY3MxMi9wMTJfY3J0LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9wa2NzMTIvcDEyX2NydC5jLmZpcHMJMjAwOS0wMy0wOSAxNDowODowNC4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCTIw MDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtNTksNiArNTksMTAgQEAKLSAj aW5jbHVkZSA8c3RkaW8uaD4KLSAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAjaW5jbHVkZSA8b3Bl bnNzbC9wa2NzMTIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNlbmRpZgotKwotIAotIAotIHN0YXRpYyBpbnQgcGtjczEyX2FkZF9iYWcoU1RB Q0tfT0YoUEtDUzEyX1NBRkVCQUcpICoqcGJhZ3MsIFBLQ1MxMl9TQUZFQkFHICpiYWcpOwotQEAg LTkwLDcgKzk0LDE0IEBAIFBLQ1MxMiAqUEtDUzEyX2NyZWF0ZShjaGFyICpwYXNzLCBjaGFyICoK LSAKLSAJLyogU2V0IGRlZmF1bHRzICovCi0gCWlmICghbmlkX2NlcnQpCi0rCQl7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKwkJaWYgKEZJUFNfbW9kZSgpKQotKwkJCW5pZF9jZXJ0ID0gTklEX3Bi ZV9XaXRoU0hBMUFuZDNfS2V5X1RyaXBsZURFU19DQkM7Ci0rCQllbHNlCi0rI2VuZGlmCi0gCQlu aWRfY2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQ0MEJpdFJDMl9DQkM7Ci0rCQl9Ci0gCWlmICgh bmlkX2tleSkKLSAJCW5pZF9rZXkgPSBOSURfcGJlX1dpdGhTSEExQW5kM19LZXlfVHJpcGxlREVT X0NCQzsKLSAJaWYgKCFpdGVyKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8v cmFuZC9tZF9yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5kL21kX3Jh bmQuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMJ MjAwOS0wMS0wMyAxMDoyNTozMi4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJl dGE0L2NyeXB0by9yYW5kL21kX3JhbmQuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCAr MDEwMAotQEAgLTEyNiw2ICsxMjYsMTAgQEAKLSAKLSAjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotICNpZmRlZiBCTl9ERUJVRwot ICMgZGVmaW5lIFBSRURJQ1QKLUBAIC0zNDIsNiArMzQ2LDE0IEBAIHN0YXRpYyBpbnQgc3NsZWF5 X3JhbmRfYnl0ZXModW5zaWduZWQgY2gKLSAjZW5kaWYKLSAJaW50IGRvX3N0aXJfcG9vbCA9IDA7 Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX21vZGUoKSkKLSsJICAgIHsKLSsJ ICAgIEZJUFNlcnIoRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTLEZJUFNfUl9OT05fRklQU19NRVRI T0QpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rI2VuZGlmCi0rCi0gI2lmZGVmIFBSRURJ Q1QKLSAJaWYgKHJhbmRfcHJlZGljdGFibGUpCi0gCQl7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9yYW5kL3JhbmRfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9yYW5kL3JhbmRfZXJyLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5k L3JhbmRfZXJyLmMuZmlwcwkyMDA2LTExLTIxIDIyOjI5OjQxLjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JhbmQvcmFuZF9lcnIuYwkyMDA5LTExLTEyIDEy OjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTcwLDYgKzcwLDEzIEBACi0gCi0gc3RhdGljIEVS Ul9TVFJJTkdfREFUQSBSQU5EX3N0cl9mdW5jdHNbXT0KLSAJewotK3tFUlJfRlVOQyhSQU5EX0Zf RU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9EKSwJIkVOR19SQU5EX0dFVF9SQU5EX01FVEhPRCJ9LAot K3tFUlJfRlVOQyhSQU5EX0ZfRklQU19SQU5EKSwJIkZJUFNfUkFORCJ9LAotK3tFUlJfRlVOQyhS QU5EX0ZfRklQU19SQU5EX0JZVEVTKSwJIkZJUFNfUkFORF9CWVRFUyJ9LAotK3tFUlJfRlVOQyhS QU5EX0ZfRklQU19SQU5EX1NFVF9EVCksCSJGSVBTX1JBTkRfU0VUX0RUIn0sCi0re0VSUl9GVU5D KFJBTkRfRl9GSVBTX1NFVF9EVCksCSJGSVBTX1NFVF9EVCJ9LAotK3tFUlJfRlVOQyhSQU5EX0Zf RklQU19TRVRfUFJOR19TRUVEKSwJIkZJUFNfU0VUX1BSTkdfU0VFRCJ9LAotK3tFUlJfRlVOQyhS QU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFKSwJIkZJUFNfU0VUX1RFU1RfTU9ERSJ9LAotIHtFUlJf RlVOQyhSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QpLAkiUkFORF9nZXRfcmFuZF9tZXRob2Qi fSwKLSB7RVJSX0ZVTkMoUkFORF9GX1NTTEVBWV9SQU5EX0JZVEVTKSwJIlNTTEVBWV9SQU5EX0JZ VEVTIn0sCi0gezAsTlVMTH0KLUBAIC03Nyw3ICs4NCwxNyBAQCBzdGF0aWMgRVJSX1NUUklOR19E QVRBIFJBTkRfc3RyX2Z1bmN0c1tdCi0gCi0gc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0 cl9yZWFzb25zW109Ci0gCXsKLSt7RVJSX1JFQVNPTihSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKSAg ICAgICwibm9uIGZpcHMgbWV0aG9kIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX05PVF9JTl9URVNU X01PREUpICAgICAsIm5vdCBpbiB0ZXN0IG1vZGUifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfTk9f S0VZX1NFVCkgICAgICAgICAgICwibm8ga2V5IHNldCJ9LAotK3tFUlJfUkVBU09OKFJBTkRfUl9Q Uk5HX0FTS0lOR19GT1JfVE9PX01VQ0gpLCJwcm5nIGFza2luZyBmb3IgdG9vIG11Y2gifSwKLSt7 RVJSX1JFQVNPTihSQU5EX1JfUFJOR19FUlJPUikgICAgICAgICAgICwicHJuZyBlcnJvciJ9LAot K3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX0tFWUVEKSAgICAgICAgICAgLCJwcm5nIGtleWVkIn0s Ci0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfTk9UX1JFS0VZRUQpICAgICAsInBybmcgbm90IHJl a2V5ZWQifSwKLSt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQpICAgICwicHJu ZyBub3QgcmVzZWVkZWQifSwKLSB7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19OT1RfU0VFREVEKSAg ICAgICwiUFJORyBub3Qgc2VlZGVkIn0sCi0re0VSUl9SRUFTT04oUkFORF9SX1BSTkdfU0VFRF9N VVNUX05PVF9NQVRDSF9LRVkpLCJwcm5nIHNlZWQgbXVzdCBub3QgbWF0Y2gga2V5In0sCi0re0VS Ul9SRUFTT04oUkFORF9SX1BSTkdfU1RVQ0spICAgICAgICAgICAsInBybmcgc3R1Y2sifSwKLSB7 MCxOVUxMfQotIAl9OwotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFu ZC9yYW5kLmguZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYW5kL3JhbmQuaAotLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMJMjAwOS0xMS0xMiAx MjozNjo0OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y YW5kL3JhbmQuaAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTEyOCwx MSArMTI4LDI4IEBAIHZvaWQgRVJSX2xvYWRfUkFORF9zdHJpbmdzKHZvaWQpOwotIC8qIEVycm9y IGNvZGVzIGZvciB0aGUgUkFORCBmdW5jdGlvbnMuICovCi0gCi0gLyogRnVuY3Rpb24gY29kZXMu ICovCi0rI2RlZmluZSBSQU5EX0ZfRU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9ECQkJIDEwOAotKyNk ZWZpbmUgUkFORF9GX0ZJUFNfUkFORAkJCQkgMTAzCi0rI2RlZmluZSBSQU5EX0ZfRklQU19SQU5E X0JZVEVTCQkJCSAxMDIKLSsjZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RUCQkJCSAxMDYK LSsjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9EVAkJCQkgMTA0Ci0rI2RlZmluZSBSQU5EX0ZfRklQ U19TRVRfUFJOR19TRUVECQkJIDEwNwotKyNkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9E RQkJCSAxMDUKLSAjZGVmaW5lIFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDEKLSAj ZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUwkJCSAxMDAKLSAKLSAvKiBSZWFzb24gY29k ZXMuICovCi0rI2RlZmluZSBSQU5EX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMDUKLSsjZGVmaW5l IFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFCQkJCSAxMDYKLSsjZGVmaW5lIFJBTkRfUl9OT19LRVlf U0VUCQkJCSAxMDcKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX0FTS0lOR19GT1JfVE9PX01VQ0gJCQkg MTAxCi0rI2RlZmluZSBSQU5EX1JfUFJOR19FUlJPUgkJCQkgMTA4Ci0rI2RlZmluZSBSQU5EX1Jf UFJOR19LRVlFRAkJCQkgMTA5Ci0rI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVLRVlFRAkJCQkg MTAyCi0rI2RlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVTRUVERUQJCQkgMTAzCi0gI2RlZmluZSBS QU5EX1JfUFJOR19OT1RfU0VFREVECQkJCSAxMDAKLSsjZGVmaW5lIFJBTkRfUl9QUk5HX1NFRURf TVVTVF9OT1RfTUFUQ0hfS0VZCQkgMTEwCi0rI2RlZmluZSBSQU5EX1JfUFJOR19TVFVDSwkJCQkg MTA0Ci0gCi0gI2lmZGVmICBfX2NwbHVzcGx1cwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3JhbmQvcmFuZF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5 cHRvL3JhbmQvcmFuZF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JhbmQv cmFuZF9saWIuYy5maXBzCTIwMDgtMTEtMTIgMDQ6NTg6MDQuMDAwMDAwMDAwICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmFuZC9yYW5kX2xpYi5jCTIwMDktMTEtMTIgMTI6 MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtNjAsNiArNjAsMTIgQEAKLSAjaW5jbHVkZSA8dGlt ZS5oPgotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4K LSsjaW5jbHVkZSAicmFuZF9sY2wuaCIKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNlbmRp ZgotKwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAjaW5jbHVkZSA8b3BlbnNzbC9lbmdp bmUuaD4KLSAjZW5kaWYKLUBAIC0xMDIsOCArMTA4LDE5IEBAIGNvbnN0IFJBTkRfTUVUSE9EICpS QU5EX2dldF9yYW5kX21ldGhvZCgKLSAJCQlmdW5jdF9yZWYgPSBlOwotIAkJZWxzZQotICNlbmRp ZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJCQlkZWZhdWx0X1JBTkRfbWV0aCA9IEZJUFNfbW9k ZSgpID8gRklQU19yYW5kX21ldGhvZCgpIDogUkFORF9TU0xlYXkoKTsKLSsJCX0KLSsJaWYgKEZJ UFNfbW9kZSgpCi0rCQkmJiBkZWZhdWx0X1JBTkRfbWV0aCAhPSBGSVBTX3JhbmRfY2hlY2soKSkK LSsJICAgIHsKLSsJICAgIFJBTkRlcnIoUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9ELFJBTkRf Ul9OT05fRklQU19NRVRIT0QpOwotKwkgICAgcmV0dXJuIDA7Ci0rCSAgICB9Ci0rI2Vsc2UKLSAJ CQlkZWZhdWx0X1JBTkRfbWV0aCA9IFJBTkRfU1NMZWF5KCk7Ci0gCQl9Ci0rI2VuZGlmCi0gCXJl dHVybiBkZWZhdWx0X1JBTkRfbWV0aDsKLSAJfQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vcmMyL3JjMi5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmMy L3JjMi5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmMyL3JjMi5oLmZpcHMJMjAw OS0xMS0xMiAxMjozNjo0OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0 L2NyeXB0by9yYzIvcmMyLmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBA IC03OSw3ICs3OSw5IEBAIHR5cGVkZWYgc3RydWN0IHJjMl9rZXlfc3QKLSAJUkMyX0lOVCBkYXRh WzY0XTsKLSAJfSBSQzJfS0VZOwotIAotLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTIAotK3ZvaWQg cHJpdmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmRhdGEsaW50IGJpdHMpOwotKyNlbmRpZgotIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tF WSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLGludCBiaXRzKTsKLSB2 b2lkIFJDMl9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFy ICpvdXQsUkMyX0tFWSAqa2V5LAotIAkJICAgICBpbnQgZW5jKTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL3JjMi9yYzJfc2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vcmMyL3JjMl9za2V5LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y YzIvcmMyX3NrZXkuYy5maXBzCTIwMDctMDktMTggMjM6MTA6MzIuMDAwMDAwMDAwICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmMyL3JjMl9za2V5LmMJMjAwOS0xMS0xMiAx MjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC01Nyw2ICs1NywxMSBAQAotICAqLwotIAotICNp bmNsdWRlIDxvcGVuc3NsL3JjMi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0r Ci0gI2luY2x1ZGUgInJjMl9sb2NsLmgiCi0gCi0gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2V5X3RhYmxlWzI1Nl09ewotQEAgLTk0LDggKzk5LDIwIEBAIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGtleV90YWJsZVsyNTYKLSAgKiBCU0FGRSB1c2VzIHRoZSAncmV0YXJkZWQnIHZlcnNp b24uICBXaGF0IEkgcHJldmlvdXNseSBzaGlwcGVkIGlzCi0gICogdGhlIHNhbWUgYXMgc3BlY2lm eWluZyAxMDI0IGZvciB0aGUgJ2JpdHMnIHBhcmFtZXRlci4gIEJzYWZlIHVzZXMKLSAgKiBhIHZl cnNpb24gd2hlcmUgdGhlIGJpdHMgcGFyYW1ldGVyIGlzIHRoZSBzYW1lIGFzIGxlbio4ICovCi0r Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotIHZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBp bnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgYml0cykKLSAJewotKwlpZiAo RklQU19tb2RlKCkpCi0rCQlGSVBTX0JBRF9BQk9SVChSQzIpCi0rCXByaXZhdGVfUkMyX3NldF9r ZXkoa2V5LCBsZW4sIGRhdGEsIGJpdHMpOwotKwl9Ci0rdm9pZCBwcml2YXRlX1JDMl9zZXRfa2V5 KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKLSsJCQkJ CQkJCWludCBiaXRzKQotKyNlbHNlCi0rdm9pZCBSQzJfc2V0X2tleShSQzJfS0VZICprZXksIGlu dCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBiaXRzKQotKyNlbmRpZgotKwl7 Ci0gCWludCBpLGo7Ci0gCXVuc2lnbmVkIGNoYXIgKms7Ci0gCVJDMl9JTlQgKmtpOwotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwuZmlwcyBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvYXNtL3JjNC1zMzkweC5wbAotLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsLmZpcHMJMjAwOS0wMi0x MiAxNTo0ODo0OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9yYzQvYXNtL3JjNC1zMzkweC5wbAkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEw MAotQEAgLTIwMiw0ICsyMDIsNiBAQCBSQzRfb3B0aW9uczoKLSAuc3RyaW5nCSJyYzQoOHgsY2hh cikiCi0gX19fCi0gCi0rJGNvZGUgPX4gcy9SQzRfc2V0X2tleS9wcml2YXRlX1JDNF9zZXRfa2V5 L2cgaWYgKCRFTlZ7RklQU30gbmUgIiIpOwotKwotIHByaW50ICRjb2RlOwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0LnBsLmZpcHMgb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0LnBsCi0tLS0gb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQteDg2XzY0LnBsLmZpcHMJMjAwOS0wNC0yNyAy MTozMTowNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y YzQvYXNtL3JjNC14ODZfNjQucGwJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAK LUBAIC00OTksNiArNDk5LDggQEAgX19fCi0gCi0gJGNvZGUgPX4gcy8jKFtid2RdKS8kMS9nbTsK LSAKLSskY29kZSA9fiBzL1JDNF9zZXRfa2V5L3ByaXZhdGVfUkM0X3NldF9rZXkvZyBpZiAoJEVO VntGSVBTfSBuZSAiIik7Ci0rCi0gcHJpbnQgJGNvZGU7Ci0gCi0gY2xvc2UgU1RET1VUOwotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsLmZpcHMg b3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsLmZpcHMJMjAwNy0xMi0wMiAy MjozMjowMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y YzQvYXNtL3JjNC01ODYucGwJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBA IC0xNjYsOCArMTY2LDEyIEBAICRpZHg9ImVkeCI7Ci0gCi0gJmV4dGVybmFsX2xhYmVsKCJPUEVO U1NMX2lhMzJjYXBfUCIpOwotIAotKyRzZXRrZXlmdW5jID0gIlJDNF9zZXRfa2V5IjsKLSskc2V0 a2V5ZnVuYyA9ICJwcml2YXRlX1JDNF9zZXRfa2V5IiBpZiAoJEVOVntGSVBTfSBuZSAiIik7Ci0r Ci0rCi0gIyB2b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSxpbnQgbGVuLGNvbnN0IHVuc2ln bmVkIGNoYXIgKmRhdGEpOwotLSZmdW5jdGlvbl9iZWdpbigiUkM0X3NldF9rZXkiKTsKLSsmZnVu Y3Rpb25fYmVnaW4oJHNldGtleWZ1bmMpOwotIAkmbW92CSgkb3V0LCZ3cGFyYW0oMCkpOwkJIyBs b2FkIGtleQotIAkmbW92CSgkaWRpLCZ3cGFyYW0oMSkpOwkJIyBsb2FkIGxlbgotIAkmbW92CSgk aW5wLCZ3cGFyYW0oMikpOwkJIyBsb2FkIGRhdGEKLUBAIC0yNDUsNyArMjQ5LDcgQEAgJGlkeD0i ZWR4IjsKLSAJJnhvcgkoImVheCIsImVheCIpOwotIAkmbW92CSgmRFdQKC04LCRvdXQpLCJlYXgi KTsJCSMga2V5LT54PTA7Ci0gCSZtb3YJKCZEV1AoLTQsJG91dCksImVheCIpOwkJIyBrZXktPnk9 MDsKLS0mZnVuY3Rpb25fZW5kKCJSQzRfc2V0X2tleSIpOwotKyZmdW5jdGlvbl9lbmQoJHNldGtl eWZ1bmMpOwotIAotICMgY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCk7Ci0gJmZ1bmN0aW9u X2JlZ2luX0IoIlJDNF9vcHRpb25zIik7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9yYzQvTWFrZWZpbGUuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvTWFr ZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvTWFrZWZpbGUuZmlwcwky MDA5LTAyLTExIDExOjAxOjM2LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0 YTQvY3J5cHRvL3JjNC9NYWtlZmlsZQkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEw MAotQEAgLTIxLDggKzIxLDggQEAgVEVTVD1yYzR0ZXN0LmMKLSBBUFBTPQotIAotIExJQj0kKFRP UCkvbGliY3J5cHRvLmEKLS1MSUJTUkM9cmM0X3NrZXkuYyByYzRfZW5jLmMKLS1MSUJPQko9JChS QzRfRU5DKQotK0xJQlNSQz1yYzRfc2tleS5jIHJjNF9lbmMuYyByYzRfZmJsay5jCi0rTElCT0JK PSQoUkM0X0VOQykgcmM0X2ZibGsubwotIAotIFNSQz0gJChMSUJTUkMpCi0gCi1kaWZmIC11cCAv ZGV2L251bGwgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L3JjNF9mYmxrLmMKLS0tLSAv ZGV2L251bGwJMjAwOS0xMS0wNCAxMjowMDo1OC44MDEwMDIyNzYgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9yYzQvcmM0X2ZibGsuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAw MDAwMDAwMCArMDEwMAotQEAgLTAsMCArMSw3NSBAQAotKy8qIGNyeXB0by9yYzQvcmM0X2ZibGsu YyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5v cmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0 OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2luZ0BPcGVu U1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAq ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICovCi0rCi0rCi0rI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+Ci0rI2lu Y2x1ZGUgInJjNF9sb2NsLmgiCi0rI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotKy8qIEZJUFMgbW9kZSBibG9ja2luZyBmb3Ig UkM0IGhhcyB0byBiZSBkb25lIHNlcGFyYXRlbHkgc2luY2UgUkM0X3NldF9rZXkKLSsgKiBtYXkg YmUgaW1wbGVtZW50ZWQgaW4gYW4gYXNzZW1ibHkgbGFuZ3VhZ2UgZmlsZS4KLSsgKi8KLSsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBs ZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCi0rCXsKLSsJaWYgKEZJUFNfbW9kZSgpKQot KwkJRklQU19CQURfQUJPUlQoUkM0KQotKwlwcml2YXRlX1JDNF9zZXRfa2V5KGtleSwgbGVuLCBk YXRhKTsKLSsJfQotKyNlbmRpZgotKwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vcmM0L3JjNC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L3JjNC5oCi0t LS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L3JjNC5oLmZpcHMJMjAwOS0xMS0xMiAx MjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9y YzQvcmM0LmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC03OCw2ICs3 OCw5IEBAIHR5cGVkZWYgc3RydWN0IHJjNF9rZXlfc3QKLSAKLSAgCi0gY29uc3QgY2hhciAqUkM0 X29wdGlvbnModm9pZCk7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotK3ZvaWQgcHJpdmF0ZV9SQzRf c2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEp OwotKyNlbmRpZgotIHZvaWQgUkM0X3NldF9rZXkoUkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25z dCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKLSB2b2lkIFJDNChSQzRfS0VZICprZXksIHNpemVfdCBs ZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGF0YSwKLSAJCXVuc2lnbmVkIGNoYXIgKm91dGRh dGEpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmM0L3JjNF9za2V5LmMu ZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQvcmM0X3NrZXkuYwotLS0tIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JjNC9yYzRfc2tleS5jLmZpcHMJMjAwNy0wMS0yMSAxNDow NzoxMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yYzQv cmM0X3NrZXkuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTU5LDYg KzU5LDExIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+Ci0gI2luY2x1ZGUgInJjNF9sb2Ns LmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9j cnlwdG8uaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgotKyNlbmRpZgotKwotIAotIGNvbnN0IGNoYXIgUkM0X3ZlcnNpb25bXT0iUkM0IiBPUEVOU1NM X1ZFUlNJT05fUFRFWFQ7Ci0gCi1AQCAtODUsNyArOTAsMTEgQEAgY29uc3QgY2hhciAqUkM0X29w dGlvbnModm9pZCkKLSAgKiBEYXRlOiBXZWQsIDE0IFNlcCAxOTk0IDA2OjM1OjMxIEdNVAotICAq LwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt2b2lkIHByaXZhdGVfUkM0X3NldF9rZXkoUkM0 X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQotKyNlbHNlCi0g dm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmRhdGEpCi0rI2VuZGlmCi0gCXsKLSAgICAgICAgIHJlZ2lzdGVyIFJDNF9JTlQgdG1wOwot ICAgICAgICAgcmVnaXN0ZXIgaW50IGlkMSxpZDI7Ci1AQCAtMTI2LDcgKzEzNSwxMiBAQCB2b2lk IFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgCi0gCQkgKiBtb2R1bGUuLi4KLSAJ CSAqCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KLSAJCSAqLwotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJCXVuc2lnbmVkIGxvbmcgKmlhMzJjYXBfcHRyID0gT1BFTlNTTF9pYTMyY2FwX2xvYygp OwotKwkJaWYgKGlhMzJjYXBfcHRyICYmICgqaWEzMmNhcF9wdHIgJiAoMTw8MjgpKSkgewotKyNl bHNlCi0gCQlpZiAoT1BFTlNTTF9pYTMyY2FwX1AgJiAoMTw8MjgpKSB7Ci0rI2VuZGlmCi0gCQkJ dW5zaWduZWQgY2hhciAqY3A9KHVuc2lnbmVkIGNoYXIgKilkOwotIAotIAkJCWZvciAoaT0wO2k8 MjU2O2krKykgY3BbaV09aTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3Jp cGVtZC9yaXBlbWQuaC5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JpcGVtZC9yaXBl bWQuaAotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaC5maXBz CTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhNC9jcnlwdG8vcmlwZW1kL3JpcGVtZC5oCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAw ICswMTAwCi1AQCAtOTEsNiArOTEsOSBAQCB0eXBlZGVmIHN0cnVjdCBSSVBFTUQxNjBzdGF0ZV9z dAotIAl1bnNpZ25lZCBpbnQgICBudW07Ci0gCX0gUklQRU1EMTYwX0NUWDsKLSAKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0raW50IHByaXZhdGVfUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAq Yyk7Ci0rI2VuZGlmCi0gaW50IFJJUEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpOwotIGlu dCBSSVBFTUQxNjBfVXBkYXRlKFJJUEVNRDE2MF9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNp emVfdCBsZW4pOwotIGludCBSSVBFTUQxNjBfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFJJUEVN RDE2MF9DVFggKmMpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcmlwZW1k L3JtZF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yaXBlbWQvcm1kX2Rn c3QuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JpcGVtZC9ybWRfZGdzdC5jLmZp cHMJMjAwNy0wMS0yMSAxNDowNzoxMy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAw MDAwMCArMDEwMAotQEAgLTU5LDYgKzU5LDExIEBACi0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2lu Y2x1ZGUgInJtZF9sb2NsLmgiCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotIAotIGNvbnN0IGNoYXIgUk1EMTYwX3ZlcnNpb25b XT0iUklQRS1NRDE2MCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAotQEAgLTY5LDcgKzc0LDcg QEAgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIgotICAgICAgdm9pZCBy aXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NUWCAqYywgdW5zaWduZWQgbG9uZyAqcCxzaXplX3Qg bnVtKTsKLSAjICBlbmRpZgotIAotLWludCBSSVBFTUQxNjBfSW5pdChSSVBFTUQxNjBfQ1RYICpj KQotK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChSSVBFTUQxNjApCi0gCXsKLSAJbWVtc2V0IChjLDAs c2l6ZW9mKCpjKSk7Ci0gCWMtPkE9UklQRU1EMTYwX0E7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vcnNhL3JzYV9lYXkuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2Ff ZWF5LmMuZmlwcwkyMDA4LTA5LTE0IDE1OjUxOjQ0LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5z c2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfZWF5LmMJMjAwOS0xMS0xMiAxMjozNjo1MC4w MDAwMDAwMDAgKzAxMDAKLUBAIC0xMTQsNiArMTE0LDggQEAKLSAjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ Ci0gCi0gI2lmbmRlZiBSU0FfTlVMTAotIAotQEAgLTEzOCw3ICsxNDAsNyBAQCBzdGF0aWMgUlNB X01FVEhPRCByc2FfcGtjczFfZWF5X21ldGg9ewotIAlCTl9tb2RfZXhwX21vbnQsIC8qIFhYWCBw cm9iYWJseSB3ZSBzaG91bGQgbm90IHVzZSBNb250Z29tZXJ5IGlmICBlID09IDMgKi8KLSAJUlNB X2VheV9pbml0LAotIAlSU0FfZWF5X2ZpbmlzaCwKLS0JMCwgLyogZmxhZ3MgKi8KLSsJUlNBX0ZM QUdfRklQU19NRVRIT0QsIC8qIGZsYWdzICovCi0gCU5VTEwsCi0gCTAsIC8qIHJzYV9zaWduICov Ci0gCTAsIC8qIHJzYV92ZXJpZnkgKi8KLUBAIC0xNTAsNiArMTUyLDE2IEBAIGNvbnN0IFJTQV9N RVRIT0QgKlJTQV9QS0NTMV9TU0xlYXkodm9pZCkKLSAJcmV0dXJuKCZyc2FfcGtjczFfZWF5X21l dGgpOwotIAl9Ci0gCi0rLyogVXNhZ2UgZXhhbXBsZTsKLSsgKiAgICBNT05UX0hFTFBFUihyc2Es IGJuX2N0eCwgcCwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEUsIGdvdG8gZXJy KTsKLSsgKi8KLSsjZGVmaW5lIE1PTlRfSEVMUEVSKHJzYSwgY3R4LCBtLCBwcmVfY29uZCwgZXJy X2luc3RyKSBcCi0rCWlmKChwcmVfY29uZCkgJiYgKChyc2EpLT5fbWV0aG9kX21vZF8jI20gPT0g TlVMTCkgJiYgXAotKwkJCSFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCYoKHJzYSktPl9tZXRob2Rf bW9kXyMjbSksIFwKLSsJCQkJQ1JZUFRPX0xPQ0tfUlNBLCBcCi0rCQkJCShyc2EpLT5tLCAoY3R4 KSkpIFwKLSsJCWVycl9pbnN0cgotKwotIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlw dChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwKLSAJICAgICB1bnNpZ25lZCBj aGFyICp0bywgUlNBICpyc2EsIGludCBwYWRkaW5nKQotIAl7Ci1AQCAtMTU4LDYgKzE3MCwyMyBA QCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCi0gCXVuc2lnbmVkIGNo YXIgKmJ1Zj1OVUxMOwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKLSsJaWYoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQo KSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCxGSVBT X1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlm IChCTl9udW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRT KQotKwkJCXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNBX1Jf S0VZX1NJWkVfVE9PX1NNQUxMKTsKLSsJCQlyZXR1cm4gLTE7Ci0rCQkJfQotKwkJfQotKyNlbmRp ZgotKwotIAlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVT X0JJVFMpCi0gCQl7Ci0gCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwgUlNB X1JfTU9EVUxVU19UT09fTEFSR0UpOwotQEAgLTIyMyw5ICsyNTIsNyBAQCBzdGF0aWMgaW50IFJT QV9lYXlfcHVibGljX2VuY3J5cHQoaW50IGZsCi0gCQlnb3RvIGVycjsKLSAJCX0KLSAKLS0JaWYg KHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCi0tCQlpZiAoIUJOX01PTlRfQ1RY X3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4s IGN0eCkpCi0tCQkJZ290byBlcnI7Ci0rCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZs YWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0gCi0gCWlmICghcnNhLT5t ZXRoLT5ibl9tb2RfZXhwKHJldCxmLHJzYS0+ZSxyc2EtPm4sY3R4LAotIAkJcnNhLT5fbWV0aG9k X21vZF9uKSkgZ290byBlcnI7Ci1AQCAtMzU1LDYgKzM4MiwyMyBAQCBzdGF0aWMgaW50IFJTQV9l YXlfcHJpdmF0ZV9lbmNyeXB0KGludCBmCi0gCWludCBsb2NhbF9ibGluZGluZyA9IDA7Ci0gCUJO X0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlp ZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0rCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJ CXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVCxGSVBTX1JfRklQ U19TRUxGVEVTVF9GQUlMRUQpOwotKwkJCWdvdG8gZXJyOwotKwkJCX0KLSsKLSsJCWlmIChCTl9u dW1fYml0cyhyc2EtPm4pIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQotKwkJ CXsKLSsJCQlSU0FlcnIoUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQsIFJTQV9SX0tFWV9T SVpFX1RPT19TTUFMTCk7Ci0rCQkJcmV0dXJuIC0xOwotKwkJCX0KLSsJCX0KLSsjZW5kaWYKLSsK LSAJaWYgKChjdHg9Qk5fQ1RYX25ldygpKSA9PSBOVUxMKSBnb3RvIGVycjsKLSAJQk5fQ1RYX3N0 YXJ0KGN0eCk7Ci0gCWYgICA9IEJOX0NUWF9nZXQoY3R4KTsKLUBAIC00MzIsOSArNDc2LDcgQEAg c3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZW5jcnlwdChpbnQgZgotIAkJZWxzZQotIAkJCWQ9 IHJzYS0+ZDsKLSAKLS0JCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQot LQkJCWlmKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBU T19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQotLQkJCQlnb3RvIGVycjsKLSsJCU1PTlRfSEVMUEVS KHJzYSwgY3R4LCBuLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVy cik7Ci0gCi0gCQlpZiAoIXJzYS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQsZixkLHJzYS0+bixjdHgs Ci0gCQkJCXJzYS0+X21ldGhvZF9tb2RfbikpIGdvdG8gZXJyOwotQEAgLTQ4OCw2ICs1MzAsMjMg QEAgc3RhdGljIGludCBSU0FfZWF5X3ByaXZhdGVfZGVjcnlwdChpbnQgZgotIAlpbnQgbG9jYWxf YmxpbmRpbmcgPSAwOwotIAlCTl9CTElORElORyAqYmxpbmRpbmcgPSBOVUxMOwotIAotKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYoRklQU19zZWxm dGVzdF9mYWlsZWQoKSkKLSsJCQl7Ci0rCQkJRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QUklWQVRF X0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJ CQl9Ci0rCi0rCQlpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlO X01PRFVMVVNfQklUUykKLSsJCQl7Ci0rCQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9E RUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9 Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpIGdv dG8gZXJyOwotIAlCTl9DVFhfc3RhcnQoY3R4KTsKLSAJZiAgID0gQk5fQ1RYX2dldChjdHgpOwot QEAgLTU1NSw5ICs2MTQsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0KGlu dCBmCi0gCQllbHNlCi0gCQkJZCA9IHJzYS0+ZDsKLSAKLS0JCWlmIChyc2EtPmZsYWdzICYgUlNB X0ZMQUdfQ0FDSEVfUFVCTElDKQotLQkJCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNh LT5fbWV0aG9kX21vZF9uLCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKLS0JCQkJZ290 byBlcnI7Ci0rCQlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9GTEFH X0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOwotIAkJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAo cmV0LGYsZCxyc2EtPm4sY3R4LAotIAkJCQlyc2EtPl9tZXRob2RfbW9kX24pKQotIAkJICBnb3Rv IGVycjsKLUBAIC02MTcsNiArNjc0LDIzIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZGVj cnlwdChpbnQgZmwKLSAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7Ci0gCUJOX0NUWCAqY3R4PU5V TEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZiAoRklQU19tb2RlKCkpCi0rCQl7Ci0r CQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQotKwkJCXsKLSsJCQlGSVBTZXJyKEZJUFNfRl9S U0FfRUFZX1BVQkxJQ19ERUNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCQkJ Z290byBlcnI7Ci0rCQkJfQotKwotKwkJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NM X1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCi0rCQkJewotKwkJCVJTQWVycihSU0FfRl9SU0Ff RUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKwkJCXJldHVy biAtMTsKLSsJCQl9Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChCTl9udW1fYml0cyhyc2EtPm4p ID4gT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKLSAJCXsKLSAJCVJTQWVycihSU0FfRl9S U0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci1AQCAtNjY3 LDkgKzc0MSw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZGVjcnlwdChpbnQgZmwKLSAJ CWdvdG8gZXJyOwotIAkJfQotIAotLQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BV QkxJQykKLS0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9u LCBDUllQVE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKLS0JCQlnb3RvIGVycjsKLSsJTU9OVF9I RUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdv dG8gZXJyKTsKLSAKLSAJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAocmV0LGYscnNhLT5lLHJz YS0+bixjdHgsCi0gCQlyc2EtPl9tZXRob2RfbW9kX24pKSBnb3RvIGVycjsKLUBAIC03MTcsNiAr Nzg5LDcgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAoQklHTlVNICpyMCwgYwotIAlCSUdO VU0gKnIxLCptMSwqdnJmeTsKLSAJQklHTlVNIGxvY2FsX2RtcDEsbG9jYWxfZG1xMSxsb2NhbF9j LGxvY2FsX3IxOwotIAlCSUdOVU0gKmRtcDEsKmRtcTEsKmMsKnByMTsKLSsJaW50IGJuX2ZsYWdz OwotIAlpbnQgcmV0PTA7Ci0gCi0gCUJOX0NUWF9zdGFydChjdHgpOwotQEAgLTcyNCw0MSArNzk3 LDMxIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAqcjAsIGMKLSAJbTEgPSBC Tl9DVFhfZ2V0KGN0eCk7Ci0gCXZyZnkgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0gCi0tCXsKLS0JCUJJ R05VTSBsb2NhbF9wLCBsb2NhbF9xOwotLQkJQklHTlVNICpwID0gTlVMTCwgKnEgPSBOVUxMOwot LQotLQkJLyogTWFrZSBzdXJlIEJOX21vZF9pbnZlcnNlIGluIE1vbnRnb21lcnkgaW50aWFsaXph dGlvbiB1c2VzIHRoZQotLQkJICogQk5fRkxHX0NPTlNUVElNRSBmbGFnICh1bmxlc3MgUlNBX0ZM QUdfTk9fQ09OU1RUSU1FIGlzIHNldCkKLS0JCSAqLwotLQkJaWYgKCEocnNhLT5mbGFncyAmIFJT QV9GTEFHX05PX0NPTlNUVElNRSkpCi0tCQkJewotLQkJCUJOX2luaXQoJmxvY2FsX3ApOwotLQkJ CXAgPSAmbG9jYWxfcDsKLS0JCQlCTl93aXRoX2ZsYWdzKHAsIHJzYS0+cCwgQk5fRkxHX0NPTlNU VElNRSk7Ci0tCi0tCQkJQk5faW5pdCgmbG9jYWxfcSk7Ci0tCQkJcSA9ICZsb2NhbF9xOwotLQkJ CUJOX3dpdGhfZmxhZ3MocSwgcnNhLT5xLCBCTl9GTEdfQ09OU1RUSU1FKTsKLS0JCQl9Ci0tCQll bHNlCi0tCQkJewotLQkJCXAgPSByc2EtPnA7Ci0tCQkJcSA9IHJzYS0+cTsKLS0JCQl9Ci0rCS8q IE1ha2Ugc3VyZSBtb2RfaW52ZXJzZSBpbiBtb250Z29tZXJleSBpbnRpYWxpemF0aW9uIHVzZSBj b3JyZWN0IAotKwkgKiBCTl9GTEdfQ09OU1RUSU1FIGZsYWcuCi0rCSAqLwotKwlibl9mbGFncyA9 IHJzYS0+cC0+ZmxhZ3M7Ci0rCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT19DT05TVFRJ TUUpKQotKwkJewotKwkJcnNhLT5wLT5mbGFncyB8PSBCTl9GTEdfQ09OU1RUSU1FOwotKwkJfQot KwlNT05UX0hFTFBFUihyc2EsIGN0eCwgcCwgcnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BS SVZBVEUsIGdvdG8gZXJyKTsKLSsJLyogV2UgcmVzdG9yZSBibl9mbGFncyBiYWNrICovCi0rCXJz YS0+cC0+ZmxhZ3MgPSBibl9mbGFnczsKLSAKLS0JCWlmIChyc2EtPmZsYWdzICYgUlNBX0ZMQUdf Q0FDSEVfUFJJVkFURSkKLS0JCQl7Ci0tCQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZy c2EtPl9tZXRob2RfbW9kX3AsIENSWVBUT19MT0NLX1JTQSwgcCwgY3R4KSkKLS0JCQkJZ290byBl cnI7Ci0tCQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX3Es IENSWVBUT19MT0NLX1JTQSwgcSwgY3R4KSkKLS0JCQkJZ290byBlcnI7Ci0tCQkJfQotLQl9Ci0r ICAgICAgICAvKiBNYWtlIHN1cmUgbW9kX2ludmVyc2UgaW4gbW9udGdvbWVyZXkgaW50aWFsaXph dGlvbiB1c2UgY29ycmVjdAotKyAgICAgICAgICogQk5fRkxHX0NPTlNUVElNRSBmbGFnLgotKyAg ICAgICAgICovCi0rCWJuX2ZsYWdzID0gcnNhLT5xLT5mbGFnczsKLSsJaWYgKCEocnNhLT5mbGFn cyAmIFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCi0rCQl7Ci0rCQlyc2EtPnEtPmZsYWdzIHw9IEJO X0ZMR19DT05TVFRJTUU7Ci0rCQl9Ci0rCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBxLCByc2EtPmZs YWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwgZ290byBlcnIpOwotKwkvKiBXZSByZXN0b3Jl IGJuX2ZsYWdzIGJhY2sgKi8KLSsJcnNhLT5xLT5mbGFncyA9IGJuX2ZsYWdzOwkKLSAKLS0JaWYg KHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCi0tCQlpZiAoIUJOX01PTlRfQ1RY X3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4s IGN0eCkpCi0tCQkJZ290byBlcnI7Ci0rCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCByc2EtPmZs YWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7Ci0gCi0gCS8qIGNvbXB1dGUg SSBtb2QgcSAqLwotIAlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkK LUBAIC04NzUsNiArOTM4LDkgQEAgZXJyOgotIAotIHN0YXRpYyBpbnQgUlNBX2VheV9pbml0KFJT QSAqcnNhKQotIAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlGSVBTX3NlbGZ0ZXN0X2NoZWNr KCk7Ci0rI2VuZGlmCi0gCXJzYS0+ZmxhZ3N8PVJTQV9GTEFHX0NBQ0hFX1BVQkxJQ3xSU0FfRkxB R19DQUNIRV9QUklWQVRFOwotIAlyZXR1cm4oMSk7Ci0gCX0KLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9yc2EvcnNhX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3Jz YV9lcnIuYy5maXBzCTIwMDgtMTItMjkgMTc6MTE6NTYuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9lcnIuYwkyMDA5LTExLTEyIDEyOjM2OjUw LjAwMDAwMDAwMCArMDEwMAotQEAgLTExMSw4ICsxMTEsMTIgQEAgc3RhdGljIEVSUl9TVFJJTkdf REFUQSBSU0Ffc3RyX2Z1bmN0c1tdPQotIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFJJTlRfRlApLAki UlNBX3ByaW50X2ZwIn0sCi0ge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklWX0RFQ09ERSksCSJSU0Ff UFJJVl9ERUNPREUifSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSVZfRU5DT0RFKSwJIlJTQV9Q UklWX0VOQ09ERSJ9LAotK3tFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUKSwJIlJT QV9wcml2YXRlX2VuY3J5cHQifSwKLSB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQl9ERUNPREUpLAki UlNBX1BVQl9ERUNPREUifSwKLSt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUKSwJ IlJTQV9wdWJsaWNfZGVjcnlwdCJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUVVBfQkxJTkRJ TkcpLAkiUlNBX3NldHVwX2JsaW5kaW5nIn0sCi0re0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRfREVG QVVMVF9NRVRIT0QpLAkiUlNBX3NldF9kZWZhdWx0X21ldGhvZCJ9LAotK3tFUlJfRlVOQyhSU0Ff Rl9SU0FfU0VUX01FVEhPRCksCSJSU0Ffc2V0X21ldGhvZCJ9LAotIHtFUlJfRlVOQyhSU0FfRl9S U0FfU0lHTiksCSJSU0Ffc2lnbiJ9LAotIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0lHTl9BU04xX09D VEVUX1NUUklORyksCSJSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORyJ9LAotIHtFUlJfRlVOQyhS U0FfRl9SU0FfVkVSSUZZKSwJIlJTQV92ZXJpZnkifSwKLUBAIC0xNTUsMTAgKzE1OSwxMiBAQCBz dGF0aWMgRVJSX1NUUklOR19EQVRBIFJTQV9zdHJfcmVhc29uc1tdCi0ge0VSUl9SRUFTT04oUlNB X1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAgICAsImtleSBzaXplIHRvbyBzbWFsbCJ9LAotIHtFUlJf UkVBU09OKFJTQV9SX0xBU1RfT0NURVRfSU5WQUxJRCkgICAgLCJsYXN0IG9jdGV0IGludmFsaWQi fSwKLSB7RVJSX1JFQVNPTihSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSkgICAgICwibW9kdWx1cyB0 b28gbGFyZ2UifSwKLSt7RVJSX1JFQVNPTihSU0FfUl9OT05fRklQU19NRVRIT0QpICAgICAgICwi bm9uIGZpcHMgbWV0aG9kIn0sCi0ge0VSUl9SRUFTT04oUlNBX1JfTk9fUFVCTElDX0VYUE9ORU5U KSAgICAsIm5vIHB1YmxpYyBleHBvbmVudCJ9LAotIHtFUlJfUkVBU09OKFJTQV9SX05VTExfQkVG T1JFX0JMT0NLX01JU1NJTkcpLCJudWxsIGJlZm9yZSBibG9jayBtaXNzaW5nIn0sCi0ge0VSUl9S RUFTT04oUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EpICAsIm4gZG9lcyBub3QgZXF1YWwgcCBx In0sCi0ge0VSUl9SRUFTT04oUlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUikgICAsIm9hZXAgZGVj b2RpbmcgZXJyb3IifSwKLSt7RVJSX1JFQVNPTihSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURf SU5fRklQU19NT0RFKSwib3BlcmF0aW9uIG5vdCBhbGxvd2VkIGluIGZpcHMgbW9kZSJ9LAotIHtF UlJfUkVBU09OKFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUp LCJvcGVyYXRpb24gbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBrZXl0eXBlIn0sCi0ge0VSUl9SRUFT T04oUlNBX1JfUEFERElOR19DSEVDS19GQUlMRUQpICAsInBhZGRpbmcgY2hlY2sgZmFpbGVkIn0s Ci0ge0VSUl9SRUFTT04oUlNBX1JfUF9OT1RfUFJJTUUpICAgICAgICAgICAsInAgbm90IHByaW1l In0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2dlbi5jLmZp cHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9nZW4uYwotLS0tIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjI3 LjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2Ff Z2VuLmMJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02Nyw2ICs2Nyw4 MiBAQAotICNpbmNsdWRlICJjcnlwdGxpYi5oIgotICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0g I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rc3RhdGljIGludCBm aXBzX3JzYV9wYWlyd2lzZV9mYWlsID0gMDsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9yc2Ffa2V5 Z2VuKHZvaWQpCi0rCXsKLSsJZmlwc19yc2FfcGFpcndpc2VfZmFpbCA9IDE7Ci0rCX0KLSsKLStp bnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCi0rCXsKLSsJY29uc3QgdW5zaWduZWQgY2hhciB0 YnNbXSA9ICJSU0EgUGFpcndpc2UgQ2hlY2sgRGF0YSI7Ci0rCXVuc2lnbmVkIGNoYXIgKmN0YnVm ID0gTlVMTCwgKnB0YnVmID0gTlVMTDsKLSsJaW50IGxlbiwgcmV0ID0gMDsKLSsJRVZQX1BLRVkg KnBrOwotKwotKwlpZiAoKHBrPUVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQotKwkJZ290byBlcnI7 Ci0rCi0rCUVWUF9QS0VZX3NldDFfUlNBKHBrLCByc2EpOwotKwotKwkvKiBQZXJmb3JtIHBhaXJ3 aXNlIGNvbnNpc3RlbmN5IHNpZ25hdHVyZSB0ZXN0ICovCi0rCWlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCB0YnMsIC0xLAotKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9D VFhfRkxBR19QQURfUEtDUzEsIE5VTEwpCi0rCQl8fCAhZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0 KHBrLCB0YnMsIC0xLAotKwkJCU5VTEwsIDAsIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19Q QURfWDkzMSwgTlVMTCkKLSsJCXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywg LTEsCi0rCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsIE5V TEwpKQotKwkJZ290byBlcnI7Ci0rCS8qIE5vdyBwZXJmb3JtIHBhaXJ3aXNlIGNvbnNpc3RlbmN5 IGVuY3J5cHQvZGVjcnlwdCB0ZXN0ICovCi0rCWN0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3Np emUocnNhKSk7Ci0rCWlmICghY3RidWYpCi0rCQlnb3RvIGVycjsKLSsKLSsJbGVuID0gUlNBX3B1 YmxpY19lbmNyeXB0KHNpemVvZih0YnMpIC0gMSwgdGJzLCBjdGJ1ZiwgcnNhLCBSU0FfUEtDUzFf UEFERElORyk7Ci0rCWlmIChsZW4gPD0gMCkKLSsJCWdvdG8gZXJyOwotKwkvKiBDaGVjayBjaXBo ZXJ0ZXh0IGRvZXNuJ3QgbWF0Y2ggcGxhaW50ZXh0ICovCi0rCWlmICgobGVuID09IChzaXplb2Yo dGJzKSAtIDEpKSAmJiAhbWVtY21wKHRicywgY3RidWYsIGxlbikpCi0rCQlnb3RvIGVycjsKLSsJ cHRidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKLSsKLSsJaWYgKCFwdGJ1ZikK LSsJCWdvdG8gZXJyOwotKwlsZW4gPSBSU0FfcHJpdmF0ZV9kZWNyeXB0KGxlbiwgY3RidWYsIHB0 YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKLSsJaWYgKGxlbiAhPSAoc2l6ZW9mKHRicykg LSAxKSkKLSsJCWdvdG8gZXJyOwotKwlpZiAobWVtY21wKHB0YnVmLCB0YnMsIGxlbikpCi0rCQln b3RvIGVycjsKLSsKLSsJcmV0ID0gMTsKLSsKLSsJaWYgKCFwdGJ1ZikKLSsJCWdvdG8gZXJyOwot KwkKLSsJZXJyOgotKwlpZiAocmV0ID09IDApCi0rCQl7Ci0rCQlmaXBzX3NldF9zZWxmdGVzdF9m YWlsKCk7Ci0rCQlGSVBTZXJyKEZJUFNfRl9GSVBTX0NIRUNLX1JTQSxGSVBTX1JfUEFJUldJU0Vf VEVTVF9GQUlMRUQpOwotKwkJfQotKwotKwlpZiAoY3RidWYpCi0rCQlPUEVOU1NMX2ZyZWUoY3Ri dWYpOwotKwlpZiAocHRidWYpCi0rCQlPUEVOU1NMX2ZyZWUocHRidWYpOwotKwlpZiAocGspCi0r CQlFVlBfUEtFWV9mcmVlKHBrKTsKLSsKLSsJcmV0dXJuIHJldDsKLSsJfQotKyNlbmRpZgotIAot IHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLCBpbnQgYml0cywgQklHTlVN ICplX3ZhbHVlLCBCTl9HRU5DQiAqY2IpOwotIAotQEAgLTkwLDYgKzE2NiwyMyBAQCBzdGF0aWMg aW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwgCi0gCWludCBiaXRzcCxiaXRzcSxvaz0g LTEsbj0wOwotIAlCTl9DVFggKmN0eD1OVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJ aWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkKLSsJ ICAgIAl7Ci0rCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOLEZJUFNfUl9G SVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rCSAgICAJcmV0dXJuIDA7Ci0rCSAgICAJfQotKwotKwkJ aWYgKGJpdHMgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpCi0rCQkgICAgewot KwkJICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTixGSVBTX1JfS0VZX1RPT19T SE9SVCk7Ci0rCQkgICAgcmV0dXJuIDA7Ci0rCQkJfQotKwkJfQotKyNlbmRpZgotKwotIAljdHg9 Qk5fQ1RYX25ldygpOwotIAlpZiAoY3R4ID09IE5VTEwpIGdvdG8gZXJyOwotIAlCTl9DVFhfc3Rh cnQoY3R4KTsKLUBAIC0yMDEsNiArMjk0LDE3IEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5 Z2VuKFJTQSAqcnNhLCAKLSAJCXAgPSByc2EtPnA7Ci0gCWlmICghQk5fbW9kX2ludmVyc2UocnNh LT5pcW1wLHJzYS0+cSxwLGN0eCkpIGdvdG8gZXJyOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsJaWYgKEZJUFNfbW9kZSgpKQotKwkJewotKwkJaWYgKGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwp Ci0rCQkJQk5fYWRkX3dvcmQocnNhLT5uLCAxKTsKLSsKLSsJCWlmKCFmaXBzX2NoZWNrX3JzYShy c2EpKQotKwkJICAgIGdvdG8gZXJyOwotKwkJfQotKyNlbmRpZgotKwotIAlvaz0xOwotIGVycjoK LSAJaWYgKG9rID09IC0xKQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNh L3JzYS5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYS5oCi0tLS0gb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYS5oLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo0 OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNh LmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC03NCw2ICs3NCwyMSBA QAotICNlcnJvciBSU0EgaXMgZGlzYWJsZWQuCi0gI2VuZGlmCi0gCi0rLyogSWYgdGhpcyBmbGFn IGlzIHNldCB0aGUgUlNBIG1ldGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQK LSsgKiBpbiBGSVBTIG1vZGUuIFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1l dGhvZC4gSWYgYW4KLSsgKiBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1l dGhvZHMgaXQgaXMgaXRzIHJlcG9zaWJpbGl0eQotKyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlz IGNvbXBsaWFudC4KLSsgKi8KLSsKLSsjZGVmaW5lIFJTQV9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgw NDAwCi0rCi0rLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBk aXNhYmxlZCBpbiBGSVBTIG1vZGUgYXJlCi0rICogcGVybWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFw cGxpY2F0aW9ucyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUKLSsgKiB1c2FnZSBp cyBjb21wbGlhbnQuCi0rICovCi0rCi0rI2RlZmluZSBSU0FfRkxBR19OT05fRklQU19BTExPVwkJ CTB4MDQwMAotKwotICNpZmRlZiAgX19jcGx1c3BsdXMKLSBleHRlcm4gIkMiIHsKLSAjZW5kaWYK LUBAIC0xNjQsNiArMTc5LDggQEAgc3RydWN0IHJzYV9zdAotICMgZGVmaW5lIE9QRU5TU0xfUlNB X01BWF9NT0RVTFVTX0JJVFMJMTYzODQKLSAjZW5kaWYKLSAKLSsjZGVmaW5lIE9QRU5TU0xfUlNB X0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0Ci0rCi0gI2lmbmRlZiBPUEVOU1NMX1JTQV9TTUFM TF9NT0RVTFVTX0JJVFMKLSAjIGRlZmluZSBPUEVOU1NMX1JTQV9TTUFMTF9NT0RVTFVTX0JJVFMJ MzA3MgotICNlbmRpZgotQEAgLTI2Nyw2ICsyODQsMTEgQEAgUlNBICoJUlNBX2dlbmVyYXRlX2tl eShpbnQgYml0cywgdW5zaWduZQotIAotIC8qIE5ldyB2ZXJzaW9uICovCi0gaW50CVJTQV9nZW5l cmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7 Ci0raW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpw MiwgQklHTlVNICpxMSwgQklHTlVNICpxMiwKLSsJCQljb25zdCBCSUdOVU0gKlhwMSwgY29uc3Qg QklHTlVNICpYcDIsIGNvbnN0IEJJR05VTSAqWHAsCi0rCQkJY29uc3QgQklHTlVNICpYcTEsIGNv bnN0IEJJR05VTSAqWHEyLCBjb25zdCBCSUdOVU0gKlhxLAotKwkJCWNvbnN0IEJJR05VTSAqZSwg Qk5fR0VOQ0IgKmNiKTsKLStpbnQgUlNBX1g5MzFfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBp bnQgYml0cywgY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpOwotIAotIGludAlSU0FfY2hl Y2tfa2V5KGNvbnN0IFJTQSAqKTsKLSAJLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLwot QEAgLTQzOCw4ICs0NjAsMTIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKLSAj ZGVmaW5lIFJTQV9GX1JTQV9QUklOVF9GUAkJCQkgMTE2Ci0gI2RlZmluZSBSU0FfRl9SU0FfUFJJ Vl9ERUNPREUJCQkJIDEzNwotICNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RFCQkJCSAxMzgK LSsjZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQJCQkgMTQ4Ci0gI2RlZmluZSBSU0Ff Rl9SU0FfUFVCX0RFQ09ERQkJCQkgMTM5Ci0rI2RlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZ UFQJCQkgMTQ5Ci0gI2RlZmluZSBSU0FfRl9SU0FfU0VUVVBfQkxJTkRJTkcJCQkgMTM2Ci0rI2Rl ZmluZSBSU0FfRl9SU0FfU0VUX0RFRkFVTFRfTUVUSE9ECQkJIDE1MAotKyNkZWZpbmUgUlNBX0Zf UlNBX1NFVF9NRVRIT0QJCQkJIDE1MQotICNkZWZpbmUgUlNBX0ZfUlNBX1NJR04JCQkJCSAxMTcK LSAjZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HCQkgMTE4Ci0gI2RlZmlu ZSBSU0FfRl9SU0FfVkVSSUZZCQkJCSAxMTkKLUBAIC00NzksMTAgKzUwNSwxMiBAQCB2b2lkIEVS Ul9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgUlNBX1JfS0VZX1NJWkVfVE9PX1NN QUxMCQkJIDEyMAotICNkZWZpbmUgUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElECQkJIDEzNAotICNk ZWZpbmUgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwNQotKyNkZWZpbmUgUlNBX1JfTk9O X0ZJUFNfTUVUSE9ECQkJCSAxNDkKLSAjZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVAkJ CSAxNDAKLSAjZGVmaW5lIFJTQV9SX05VTExfQkVGT1JFX0JMT0NLX01JU1NJTkcJCQkgMTEzCi0g I2RlZmluZSBSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUQkJCSAxMjcKLSAjZGVmaW5lIFJTQV9S X09BRVBfREVDT0RJTkdfRVJST1IJCQkgMTIxCi0rI2RlZmluZSBSU0FfUl9PUEVSQVRJT05fTk9U X0FMTE9XRURfSU5fRklQU19NT0RFCSAxNTAKLSAjZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1Rf U1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUJIDE0OAotICNkZWZpbmUgUlNBX1JfUEFERElOR19D SEVDS19GQUlMRUQJCQkgMTE0Ci0gI2RlZmluZSBSU0FfUl9QX05PVF9QUklNRQkJCQkgMTI4Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vcnNhL3JzYV9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcwkyMDA5LTA4LTA1IDE3OjA0OjE2LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2FfbGliLmMJ MjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC04MCw2ICs4MCwxMyBAQCBS U0EgKlJTQV9uZXcodm9pZCkKLSAKLSB2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3Qg UlNBX01FVEhPRCAqbWV0aCkKLSAJewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNf bW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkpCi0rCQl7Ci0r CQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVU SE9EKTsKLSsJCXJldHVybjsKLSsJCX0KLSsjZW5kaWYKLSAJZGVmYXVsdF9SU0FfbWV0aCA9IG1l dGg7Ci0gCX0KLSAKLUBAIC0xMTEsNiArMTE4LDEzIEBAIGludCBSU0Ffc2V0X21ldGhvZChSU0Eg KnJzYSwgY29uc3QgUlNBX00KLSAJLyogTkI6IFRoZSBjYWxsZXIgaXMgc3BlY2lmaWNhbGx5IHNl dHRpbmcgYSBtZXRob2QsIHNvIGl0J3Mgbm90IHVwIHRvIHVzCi0gCSAqIHRvIGRlYWwgd2l0aCB3 aGljaCBFTkdJTkUgaXQgY29tZXMgZnJvbS4gKi8KLSAJY29uc3QgUlNBX01FVEhPRCAqbXRtcDsK LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmIChGSVBTX21vZGUoKSAmJiAhKG1ldGgtPmZsYWdz ICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpKQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9TRVRf TUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOwotKwkJcmV0dXJuIDA7Ci0rCQl9Ci0rI2Vu ZGlmCi0gCW10bXAgPSByc2EtPm1ldGg7Ci0gCWlmIChtdG1wLT5maW5pc2gpIG10bXAtPmZpbmlz aChyc2EpOwotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLUBAIC0xNjMsNiArMTc3LDE4IEBA IFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCi0gCQkJfQotIAkJfQotICNlbmRp ZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRo LT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKLSsJCXsKLSsJCVJTQWVycihSU0FfRl9S U0FfTkVXX01FVEhPRCwgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsjaWZuZGVmIE9QRU5TU0xf Tk9fRU5HSU5FCi0rCQlpZiAocmV0LT5lbmdpbmUpCi0rCQkJRU5HSU5FX2ZpbmlzaChyZXQtPmVu Z2luZSk7Ci0rI2VuZGlmCi0rCQlPUEVOU1NMX2ZyZWUocmV0KTsKLSsJCXJldHVybiBOVUxMOwot KwkJfQotKyNlbmRpZgotIAotIAlyZXQtPnBhZD0wOwotIAlyZXQtPnZlcnNpb249MDsKLUBAIC0y ODUsNiArMzExLDEzIEBAIGludCBSU0FfcHVibGljX2VuY3J5cHQoaW50IGZsZW4sIGNvbnN0IHUK LSBpbnQgUlNBX3ByaXZhdGVfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAq ZnJvbSwgdW5zaWduZWQgY2hhciAqdG8sCi0gCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQot IAl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+Zmxh Z3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpCi0rCQl7Ci0rCQlSU0FlcnIoUlNBX0ZfUlNB X1BSSVZBVEVfRU5DUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9E RSk7Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAJcmV0dXJuKHJzYS0+bWV0aC0+cnNh X3ByaXZfZW5jKGZsZW4sIGZyb20sIHRvLCByc2EsIHBhZGRpbmcpKTsKLSAJfQotIAotQEAgLTI5 Nyw2ICszMzAsMTMgQEAgaW50IFJTQV9wcml2YXRlX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IAot IGludCBSU0FfcHVibGljX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZy b20sIHVuc2lnbmVkIGNoYXIgKnRvLAotIAkgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGluZykKLSAJ ewotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdz ICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQotKwkJewotKwkJUlNBZXJyKFJTQV9GX1JTQV9Q VUJMSUNfREVDUllQVCwgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSk7 Ci0rCQlyZXR1cm4gMDsKLSsJCX0KLSsjZW5kaWYKLSAJcmV0dXJuKHJzYS0+bWV0aC0+cnNhX3B1 Yl9kZWMoZmxlbiwgZnJvbSwgdG8sIHJzYSwgcGFkZGluZykpOwotIAl9Ci0gCi1kaWZmIC11cCBv cGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9j cnlwdG8vcnNhL3JzYV9zaWduLmMuZmlwcwkyMDA3LTA0LTI0IDAzOjA1OjQyLjAwMDAwMDAwMCAr MDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCTIwMDkt MTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTMwLDcgKzEzMCw4IEBAIGludCBS U0Ffc2lnbihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKLSAJCWkyZF9YNTA5X1NJRygmc2ln LCZwKTsKLSAJCXM9dG1wczsKLSAJfQotLQlpPVJTQV9wcml2YXRlX2VuY3J5cHQoaSxzLHNpZ3Jl dCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotKwkvKiBOQjogY2FsbCB1bmRlcmx5aW5nIG1ldGhv ZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCi0rCWkgPSByc2EtPm1ldGgtPnJz YV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGkscyxzaWdyZXQscnNhLFJTQV9Q S0NTMV9QQURESU5HKSA6IDA7Ci0gCWlmIChpIDw9IDApCi0gCQlyZXQ9MDsKLSAJZWxzZQotQEAg LTE2MSw4ICsxNjIsOCBAQCBpbnQgaW50X3JzYV92ZXJpZnkoaW50IGR0eXBlLCBjb25zdCB1bnNp Ci0gCi0gCWlmKChkdHlwZSA9PSBOSURfbWQ1X3NoYTEpICYmIHJtKQotIAkJewotLQkJaSA9IFJT QV9wdWJsaWNfZGVjcnlwdCgoaW50KXNpZ2xlbiwKLS0JCQkJCXNpZ2J1ZixybSxyc2EsUlNBX1BL Q1MxX1BBRERJTkcpOwotKwkJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgt PnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLAotKwkJCQkJc2lnYnVmLHJtLHJzYSxSU0FfUEtDUzFf UEFERElORykgOiAwOwotIAkJaWYgKGkgPD0gMCkKLSAJCQlyZXR1cm4gMDsKLSAJCSpwcm1fbGVu ID0gaTsKLUBAIC0xNzksNyArMTgwLDggQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwg Y29uc3QgdW5zaQotIAkJCVJTQWVycihSU0FfRl9JTlRfUlNBX1ZFUklGWSxSU0FfUl9JTlZBTElE X01FU1NBR0VfTEVOR1RIKTsKLSAJCQlnb3RvIGVycjsKLSAJfQotLQlpPVJTQV9wdWJsaWNfZGVj cnlwdCgoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpOwotKwkvKiBO QjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5n ICovCi0rCWkgPSByc2EtPm1ldGgtPnJzYV9wdWJfZGVjID8gcnNhLT5tZXRoLT5yc2FfcHViX2Rl YygoaW50KXNpZ2xlbixzaWdidWYscyxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKLSAKLSAJ aWYgKGkgPD0gMCkgZ290byBlcnI7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2Ny eXB0by9zaGEvc2hhX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9z aGFfZGdzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMu ZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4w LjAtYmV0YTQvY3J5cHRvL3NoYS9zaGFfZGdzdC5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAw MDAwICswMTAwCi1AQCAtNTcsNiArNTcsMTIgQEAKLSAgKi8KLSAKLSAjaW5jbHVkZSA8b3BlbnNz bC9vcGVuc3NsY29uZi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0gI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMCkgJiYg IWRlZmluZWQoT1BFTlNTTF9OT19TSEEpCi0gCi0gI3VuZGVmICBTSEFfMQotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYS5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vc2hhL3NoYS5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3No YS5oLmZpcHMJMjAwOS0xMS0xMiAxMjozNjo0OS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhLmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAw MDAgKzAxMDAKLUBAIC0xMDYsNiArMTA2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgU0hBc3RhdGVfc3QK LSAJfSBTSEFfQ1RYOwotIAotICNpZm5kZWYgT1BFTlNTTF9OT19TSEEwCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotK2ludCBwcml2YXRlX1NIQV9Jbml0KFNIQV9DVFggKmMpOwotKyNlbmRpZgotIGlu dCBTSEFfSW5pdChTSEFfQ1RYICpjKTsKLSBpbnQgU0hBX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25z dCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgU0hBX0ZpbmFsKHVuc2lnbmVkIGNoYXIg Km1kLCBTSEFfQ1RYICpjKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3No YS9zaGFfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vc2hhL3NoYV9sb2Ns LmgKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzCTIw MDktMTEtMTIgMTI6MzY6NDkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRh NC9jcnlwdG8vc2hhL3NoYV9sb2NsLmgJMjAwOS0xMS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAx MDAKLUBAIC0xMjIsOCArMTIyLDE1IEBAIHZvaWQgc2hhMV9ibG9ja19kYXRhX29yZGVyIChTSEFf Q1RYICpjLCAKLSAjZGVmaW5lIElOSVRfREFUQV9oMyAweDEwMzI1NDc2VUwKLSAjZGVmaW5lIElO SVRfREFUQV9oNCAweGMzZDJlMWYwVUwKLSAKLSsjaWYgZGVmaW5lZChTSEFfMCkgJiYgZGVmaW5l ZChPUEVOU1NMX0ZJUFMpCi0rRklQU19OT05fRklQU19NRF9Jbml0KFNIQSkKLSsjZWxzZQotIGlu dCBIQVNIX0lOSVQgKFNIQV9DVFggKmMpCi0rI2VuZGlmCi0gCXsKLSsjaWYgZGVmaW5lZChTSEFf MSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsj ZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPmgwPUlOSVRfREFUQV9oMDsK LSAJYy0+aDE9SU5JVF9EQVRBX2gxOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlw dG8vc2hhL3NoYTFkZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hh MWRnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGExZGdzdC5jLmZp cHMJMjAwNy0wMS0yMSAxNDowNzoxNC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9zaGEvc2hhMWRnc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAw MCArMDEwMAotQEAgLTYzLDYgKzYzLDEwIEBACi0gI2RlZmluZSBTSEFfMQotIAotICNpbmNsdWRl IDxvcGVuc3NsL29wZW5zc2x2Lmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyNpbmNsdWRlIDxv cGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsKLSAKLSBjb25zdCBjaGFyIFNIQTFfdmVyc2lvbltd PSJTSEExIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9zaGEvc2hhMjU2LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhMjU2 LmMuZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGEyNTYuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAw MDAwMCArMDEwMAotQEAgLTEyLDEyICsxMiwxOSBAQAotIAotICNpbmNsdWRlIDxvcGVuc3NsL2Ny eXB0by5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMK LSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbHYuaD4KLSAKLSBjb25zdCBjaGFyIFNIQTI1Nl92ZXJzaW9uW109IlNIQS0yNTYi IE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKLSAKLSBpbnQgU0hBMjI0X0luaXQgKFNIQTI1Nl9DVFgg KmMpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsK LSsjZW5kaWYKLSAJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7Ci0gCWMtPmhbMF09MHhjMTA1OWVk OFVMOwljLT5oWzFdPTB4MzY3Y2Q1MDdVTDsKLSAJYy0+aFsyXT0weDMwNzBkZDE3VUw7CWMtPmhb M109MHhmNzBlNTkzOVVMOwotQEAgLTI5LDYgKzM2LDkgQEAgaW50IFNIQTIyNF9Jbml0IChTSEEy NTZfQ1RYICpjKQotIAotIGludCBTSEEyNTZfSW5pdCAoU0hBMjU2X0NUWCAqYykKLSAJewotKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKLSsJRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyNlbmRpZgotIAlt ZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKLSAJYy0+aFswXT0weDZhMDllNjY3VUw7CWMtPmhbMV09 MHhiYjY3YWU4NVVMOwotIAljLT5oWzJdPTB4M2M2ZWYzNzJVTDsJYy0+aFszXT0weGE1NGZmNTNh VUw7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhNTEyLmMuZmlw cyBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0by9zaGEvc2hhNTEyLmMKLS0tLSBvcGVuc3NsLTEu MC4wLWJldGE0L2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDA4LTEyLTI5IDEzOjM1OjQ4LjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvY3J5cHRvL3NoYS9zaGE1MTIu YwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTUsNiArNSwxMCBAQAot ICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0gICovCi0gI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4K LSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRp ZgotKwotICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9O T19TSEE1MTIpCi0gLyoKLSAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUy4KLUBAIC02MSw2ICs2NSw5 IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3ZlcnNpb25bXT0iU0hBLTUxMiIgT1AKLSAKLSBpbnQgU0hB Mzg0X0luaXQgKFNIQTUxMl9DVFggKmMpCi0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJ UFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAjaWYgZGVmaW5lZChTSEE1MTJfQVNNKSAm JiAoZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9fYXJtKSkKLSAJLyogbWFpbnRhaW4gZHdv cmQgb3JkZXIgcmVxdWlyZWQgYnkgYXNzZW1ibGVyIG1vZHVsZSAqLwotIAl1bnNpZ25lZCBpbnQg KmggPSAodW5zaWduZWQgaW50ICopYy0+aDsKLUBAIC05MCw2ICs5Nyw5IEBAIGludCBTSEEzODRf SW5pdCAoU0hBNTEyX0NUWCAqYykKLSAKLSBpbnQgU0hBNTEyX0luaXQgKFNIQTUxMl9DVFggKmMp Ci0gCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsj ZW5kaWYKLSAjaWYgZGVmaW5lZChTSEE1MTJfQVNNKSAmJiAoZGVmaW5lZChfX2FybV9fKSB8fCBk ZWZpbmVkKF9fYXJtKSkKLSAJLyogbWFpbnRhaW4gZHdvcmQgb3JkZXIgcmVxdWlyZWQgYnkgYXNz ZW1ibGVyIG1vZHVsZSAqLwotIAl1bnNpZ25lZCBpbnQgKmggPSAodW5zaWduZWQgaW50ICopYy0+ aDsKLUBAIC0zODAsNyArMzkwLDcgQEAgc3RhdGljIGNvbnN0IFNIQV9MT05HNjQgSzUxMls4MF0g PSB7Ci0gCQkJCSgoU0hBX0xPTkc2NCloaSk8PDMyfGxvOwl9KQotICMgICBlbmRpZgotICMgIGVs aWYgKGRlZmluZWQoX0FSQ0hfUFBDKSAmJiBkZWZpbmVkKF9fNjRCSVRfXykpIHx8IGRlZmluZWQo X0FSQ0hfUFBDNjQpCi0tIyAgIGRlZmluZSBST1RSKGEsbikJKHsgdW5zaWduZWQgbG9uZyByZXQ7 CQlcCi0rIyAgIGRlZmluZSBST1RSKGEsbikJKHsgU0hBX0xPTkc2NCByZXQ7CQlcCi0gCQkJCWFz bSAoInJvdHJkaSAlMCwlMSwlMiIJXAotIAkJCQk6ICI9ciIocmV0KQkJXAotIAkJCQk6ICJyIihh KSwiSyIobikpOyByZXQ7CX0pCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L01ha2VmaWxl Lm9yZy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvTWFrZWZpbGUub3JnCi0tLS0gb3BlbnNzbC0x LjAuMC1iZXRhNC9NYWtlZmlsZS5vcmcuZmlwcwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvTWFrZWZpbGUub3JnCTIwMDktMTEtMTIg MTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTEwLDYgKzExMCw5IEBAIExJQktSQjU9Ci0g WkxJQl9JTkNMVURFPQotIExJQlpMSUI9Ci0gCi0rIyBOb24tZW1wdHkgaWYgRklQUyBlbmFibGVk Ci0rRklQUz0KLSsKLSBESVJTPSAgIGNyeXB0byBzc2wgZW5naW5lcyBhcHBzIHRlc3QgdG9vbHMK LSBFTkdESVJTPSBjY2dvc3QKLSBTSExJQkRJUlM9IGNyeXB0byBzc2wKLUBAIC0xMjIsNyArMTI1 LDcgQEAgU0RJUlM9ICBcCi0gCWJuIGVjIHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28gZW5naW5l IFwKLSAJYnVmZmVyIGJpbyBzdGFjayBsaGFzaCByYW5kIGVyciBcCi0gCWV2cCBhc24xIHBlbSB4 NTA5IHg1MDl2MyBjb25mIHR4dF9kYiBwa2NzNyBwa2NzMTIgY29tcCBvY3NwIHVpIGtyYjUgXAot LQljbXMgcHF1ZXVlIHRzIGpwYWtlIHN0b3JlCi0rCWNtcyBwcXVldWUgdHMganBha2Ugc3RvcmUg ZmlwcwotICMga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGFib3ZlIGxpc3QgaXMgYWRqdXN0ZWQgYnkg Li9Db25maWd1cmUKLSAjIGFjY29yZGluZyB0byBuby14eHggYXJndW1lbnRzLi4uCi0gCi1AQCAt MjA2LDYgKzIwOSw3IEBAIEJVSUxERU5WPQlQTEFURk9STT0nJChQTEFURk9STSknIFBST0NFU1MK LSAJCVJNRDE2MF9BU01fT0JKPSckKFJNRDE2MF9BU01fT0JKKScJCVwKLSAJCVdQX0FTTV9PQko9 JyQoV1BfQVNNX09CSiknCQkJXAotIAkJUEVSTEFTTV9TQ0hFTUU9JyQoUEVSTEFTTV9TQ0hFTUUp JwkJXAotKwkJRklQUz0iJCR7RklQUzotJChGSVBTKX0iCVwKLSAJCVRISVM9JCR7VEhJUzotJEB9 IE1BS0VGSUxFPU1ha2VmaWxlIE1BS0VPVkVSUklERVM9Ci0gIyBNQUtFT1ZFUlJJREVTPSBlZmZl Y3RpdmVseSAiZXF1YWxpemVzIiBHTlUtaXNoIGFuZCBTeXNWLWlzaCBtYWtlIGZsYXZvcnMsCi0g IyB3aGljaCBpbiB0dXJuIGVsaW1pbmF0ZXMgYW1iaWd1aXRpZXMgaW4gdmFyaWFibGUgdHJlYXRt ZW50IHdpdGggLWUuCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2xfY2lwaC5j LmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsX2NpcGguYwotLS0tIG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL3NzbF9jaXBoLmMuZmlwcwkyMDA5LTA5LTEzIDAxOjE4OjA5LjAwMDAwMDAw MCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3NzbF9jaXBoLmMJMjAwOS0xMS0x MiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC03MjcsNiArNzI3LDkgQEAgc3RhdGljIHZv aWQgc3NsX2NpcGhlcl9jb2xsZWN0X2NpcGhlcnMoYwotIAkJICAgICEoYy0+YWxnb3JpdGhtX2F1 dGggJiBkaXNhYmxlZF9hdXRoKSAmJgotIAkJICAgICEoYy0+YWxnb3JpdGhtX2VuYyAmIGRpc2Fi bGVkX2VuYykgJiYKLSAJCSAgICAhKGMtPmFsZ29yaXRobV9tYWMgJiBkaXNhYmxlZF9tYWMpICYm Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJCSghRklQU19tb2RlKCkgfHwgKGMtPmFsZ29fc3Ry ZW5ndGggJiBTU0xfRklQUykpICYmCi0rI2VuZGlmCi0gCQkgICAgIShjLT5hbGdvcml0aG1fc3Ns ICYgZGlzYWJsZWRfc3NsKSkKLSAJCQl7Ci0gCQkJY29fbGlzdFtjb19saXN0X251bV0uY2lwaGVy ID0gYzsKLUBAIC0xNDIzLDcgKzE0MjYsMTEgQEAgU1RBQ0tfT0YoU1NMX0NJUEhFUikgKnNzbF9j cmVhdGVfY2lwaGVyXwotIAkgKi8KLSAJZm9yIChjdXJyID0gaGVhZDsgY3VyciAhPSBOVUxMOyBj dXJyID0gY3Vyci0+bmV4dCkKLSAJCXsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQlpZiAoY3Vy ci0+YWN0aXZlICYmICghRklQU19tb2RlKCkgfHwgY3Vyci0+Y2lwaGVyLT5hbGdvX3N0cmVuZ3Ro ICYgU1NMX0ZJUFMpKQotKyNlbHNlCi0gCQlpZiAoY3Vyci0+YWN0aXZlKQotKyNlbmRpZgotIAkJ CXsKLSAJCQlza19TU0xfQ0lQSEVSX3B1c2goY2lwaGVyc3RhY2ssIGN1cnItPmNpcGhlcik7Ci0g I2lmZGVmIENJUEhFUl9ERUJVRwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3Ns X2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsX2xpYi5jCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9zc2wvc3NsX2xpYi5jLmZpcHMJMjAwOS0xMC0xNiAxNTo0MTo1Mi4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2xfbGliLmMJMjAwOS0x MS0xMiAxMjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xNDcxLDYgKzE0NzEsMTQgQEAgU1NM X0NUWCAqU1NMX0NUWF9uZXcoY29uc3QgU1NMX01FVEhPRCAqbQotIAkJcmV0dXJuKE5VTEwpOwot IAkJfQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChtZXRo LT52ZXJzaW9uIDwgVExTMV9WRVJTSU9OKSkJCi0rCQl7Ci0rCQlTU0xlcnIoU1NMX0ZfU1NMX0NU WF9ORVcsIFNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKLSsJCXJldHVybiBO VUxMOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAoU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVf Q1RYX2lkeCgpIDwgMCkKLSAJCXsKLSAJCVNTTGVycihTU0xfRl9TU0xfQ1RYX05FVyxTU0xfUl9Y NTA5X1ZFUklGSUNBVElPTl9TRVRVUF9QUk9CTEVNUyk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4w LWJldGE0L3NzbC9zc2x0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2x0ZXN0 LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zc2x0ZXN0LmMuZmlwcwkyMDA5LTExLTEy IDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3Nz bHRlc3QuYwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTI2NSw2ICsy NjUsOSBAQCBzdGF0aWMgdm9pZCBzdl91c2FnZSh2b2lkKQotIAl7Ci0gCWZwcmludGYoc3RkZXJy LCJ1c2FnZTogc3NsdGVzdCBbYXJncyAuLi5dXG4iKTsKLSAJZnByaW50ZihzdGRlcnIsIlxuIik7 Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwlmcHJpbnRmKHN0ZGVyciwiLUYgICAgICAgICAgICAg LSBydW4gdGVzdCBpbiBGSVBTIG1vZGVcbiIpOwotKyNlbmRpZgotIAlmcHJpbnRmKHN0ZGVyciwi IC1zZXJ2ZXJfYXV0aCAgLSBjaGVjayBzZXJ2ZXIgY2VydGlmaWNhdGVcbiIpOwotIAlmcHJpbnRm KHN0ZGVyciwiIC1jbGllbnRfYXV0aCAgLSBkbyBjbGllbnQgYXV0aGVudGljYXRpb25cbiIpOwot IAlmcHJpbnRmKHN0ZGVyciwiIC1wcm94eSAgICAgICAgLSBhbGxvdyBwcm94eSBjZXJ0aWZpY2F0 ZXNcbiIpOwotQEAgLTQ4NCw2ICs0ODcsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQotICNlbmRpZgotIAlTVEFDS19PRihTU0xfQ09NUCkgKnNzbF9jb21wX21ldGhvZHMgPSBO VUxMOwotIAlpbnQgdGVzdF9jaXBoZXJsaXN0ID0gMDsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r CWludCBmaXBzX21vZGU9MDsKLSsjZW5kaWYKLSAKLSAJdmVyYm9zZSA9IDA7Ci0gCWRlYnVnID0g MDsKLUBAIC01MTUsNyArNTIxLDE2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p Ci0gCi0gCXdoaWxlIChhcmdjID49IDEpCi0gCQl7Ci0tCQlpZgkoc3RyY21wKCphcmd2LCItc2Vy dmVyX2F1dGgiKSA9PSAwKQotKwkJaWYoIXN0cmNtcCgqYXJndiwiLUYiKSkKLSsJCQl7Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKwkJCWZpcHNfbW9kZT0xOwotKyNlbHNlCi0rCQkJZnByaW50Zihz dGRlcnIsIm5vdCBjb21waWxlZCB3aXRoIEZJUFMgc3VwcG9ydCwgc28gZXhpdHRpbmcgd2l0aG91 dCBydW5uaW5nLlxuIik7Ci0rCQkJRVhJVCgwKTsKLSsjZW5kaWYKLSsJCQl9Ci0rCQllbHNlIGlm CShzdHJjbXAoKmFyZ3YsIi1zZXJ2ZXJfYXV0aCIpID09IDApCi0gCQkJc2VydmVyX2F1dGg9MTsK LSAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwiLWNsaWVudF9hdXRoIikgPT0gMCkKLSAJCQljbGll bnRfYXV0aD0xOwotQEAgLTcxMSw2ICs3MjYsMjAgQEAgYmFkOgotIAkJRVhJVCgxKTsKLSAJCX0K LSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCWlmKGZpcHNfbW9kZSkKLSsJCXsKLSsJCWlmKCFG SVBTX21vZGVfc2V0KDEpKQotKwkJCXsKLSsJCQlFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOwot KwkJCUVSUl9wcmludF9lcnJvcnMoQklPX25ld19mcChzdGRlcnIsQklPX05PQ0xPU0UpKTsKLSsJ CQlFWElUKDEpOwotKwkJCX0KLSsJCWVsc2UKLSsJCQlmcHJpbnRmKHN0ZGVyciwiKioqIElOIEZJ UFMgTU9ERSAqKipcbiIpOwotKwkJfQotKyNlbmRpZgotKwotIAlpZiAocHJpbnRfdGltZSkKLSAJ CXsKLSAJCWlmICghYmlvX3BhaXIpCi1AQCAtMjE1MywxMiArMjE4MiwxMiBAQCBzdGF0aWMgaW50 IE1TX0NBTExCQUNLIGFwcF92ZXJpZnlfY2FsbGJhCi0gCQl9Ci0gCi0gI2lmbmRlZiBPUEVOU1NM X05PX1g1MDlfVkVSSUZZCi0tIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGlmIDAKLSAJaWYocy0+ dmVyc2lvbiA9PSBUTFMxX1ZFUlNJT04pCi0gCQlGSVBTX2FsbG93X21kNSgxKTsKLSAjIGVuZGlm Ci0gCW9rID0gWDUwOV92ZXJpZnlfY2VydChjdHgpOwotLSMgaWZkZWYgT1BFTlNTTF9GSVBTCi0r IyBpZiAwCi0gCWlmKHMtPnZlcnNpb24gPT0gVExTMV9WRVJTSU9OKQotIAkJRklQU19hbGxvd19t ZDUoMCk7Ci0gIyBlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczIzX2Ns bnQuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MyM19jbG50LmMKLS0tLSBvcGVuc3Ns LTEuMC4wLWJldGE0L3NzbC9zMjNfY2xudC5jLmZpcHMJMjAwOS0wOC0wNSAxNzoyOToxNC4wMDAw MDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zMjNfY2xudC5jCTIwMDkt MTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMzM1LDYgKzMzNSwxNCBAQCBzdGF0 aWMgaW50IHNzbDIzX2NsaWVudF9oZWxsbyhTU0wgKnMpCi0gCQkJdmVyc2lvbl9tYWpvciA9IFRM UzFfVkVSU0lPTl9NQUpPUjsKLSAJCQl2ZXJzaW9uX21pbm9yID0gVExTMV9WRVJTSU9OX01JTk9S OwotIAkJCX0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCQllbHNlIGlmKEZJUFNfbW9kZSgpKQot KwkJCXsKLSsJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfQ0xJRU5UX0hFTExPLAotKwkJCQkJU1NMX1Jf T05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotKwkJCXJldHVybiAtMTsKLSsJCQl9Ci0r I2VuZGlmCi0gCQllbHNlIGlmICh2ZXJzaW9uID09IFNTTDNfVkVSU0lPTikKLSAJCQl7Ci0gCQkJ dmVyc2lvbl9tYWpvciA9IFNTTDNfVkVSU0lPTl9NQUpPUjsKLUBAIC02MTgsNiArNjI2LDE0IEBA IHN0YXRpYyBpbnQgc3NsMjNfZ2V0X3NlcnZlcl9oZWxsbyhTU0wgKnMKLSAJCWlmICgocFsyXSA9 PSBTU0wzX1ZFUlNJT05fTUlOT1IpICYmCi0gCQkJIShzLT5vcHRpb25zICYgU1NMX09QX05PX1NT THYzKSkKLSAJCQl7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwkJCWlmKEZJUFNfbW9kZSgpKQot KwkJCQl7Ci0rCQkJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfU0VSVkVSX0hFTExPLAotKwkJCQkJ U1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotKwkJCQlnb3RvIGVycjsKLSsJ CQkJfQotKyNlbmRpZgotIAkJCXMtPnZlcnNpb249U1NMM19WRVJTSU9OOwotIAkJCXMtPm1ldGhv ZD1TU0x2M19jbGllbnRfbWV0aG9kKCk7Ci0gCQkJfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNC9zc2wvczIzX3NydnIuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MyM19zcnZy LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zMjNfc3J2ci5jLmZpcHMJMjAwOC0wNi0w MyAwNDo0ODozNC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9z MjNfc3J2ci5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMzg2LDYg KzM4NiwxNSBAQCBpbnQgc3NsMjNfZ2V0X2NsaWVudF9oZWxsbyhTU0wgKnMpCi0gCQkJfQotIAkJ fQotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsJaWYgKEZJUFNfbW9kZSgpICYmIChzLT52ZXJz aW9uIDwgVExTMV9WRVJTSU9OKSkKLSsJCXsKLSsJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfQ0xJ RU5UX0hFTExPLAotKwkJCQkJU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOwot KwkJZ290byBlcnI7Ci0rCQl9Ci0rI2VuZGlmCi0rCi0gCWlmIChzLT5zdGF0ZSA9PSBTU0wyM19T VF9TUl9DTE5UX0hFTExPX0IpCi0gCQl7Ci0gCQkvKiB3ZSBoYXZlIFNTTHYzL1RMU3YxIGluIGFu IFNTTHYyIGhlYWRlcgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfY2xudC5j LmZpcHMgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfY2xudC5jCi0tLS0gb3BlbnNzbC0xLjAu MC1iZXRhNC9zc2wvczNfY2xudC5jLmZpcHMJMjAwOS0xMC0zMCAxNTowNjoxOC4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19jbG50LmMJMjAwOS0xMS0xMiAx MjozNjo1MC4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xNTYsNiArMTU2LDEwIEBACi0gI2luY2x1ZGUg PG9wZW5zc2wvb2JqZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotICNpbmNsdWRl IDxvcGVuc3NsL21kNS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2lmbmRlZiBPUEVOU1NMX05PX0RICi0gI2luY2x1ZGUg PG9wZW5zc2wvZGguaD4KLSAjZW5kaWYKLUBAIC0xNTMwLDYgKzE1MzQsOCBAQCBpbnQgc3NsM19n ZXRfa2V5X2V4Y2hhbmdlKFNTTCAqcykKLSAJCQlxPW1kX2J1ZjsKLSAJCQlmb3IgKG51bT0yOyBu dW0gPiAwOyBudW0tLSkKLSAJCQkJewotKwkJCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWRfY3R4 LAotKwkJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJCQkJRVZQX0RpZ2Vz dEluaXRfZXgoJm1kX2N0eCwobnVtID09IDIpCi0gCQkJCQk/cy0+Y3R4LT5tZDU6cy0+Y3R4LT5z aGExLCBOVUxMKTsKLSAJCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmbWRfY3R4LCYocy0+czMtPmNsaWVu dF9yYW5kb21bMF0pLFNTTDNfUkFORE9NX1NJWkUpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1i ZXRhNC9zc2wvczNfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19lbmMuYwot LS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX2VuYy5jLmZpcHMJMjAwOS0wNC0xNiAxOToy Mjo1MC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zM19lbmMu YwkyMDA5LTExLTEyIDEyOjM2OjUwLjAwMDAwMDAwMCArMDEwMAotQEAgLTE3MCw2ICsxNzAsNyBA QCBzdGF0aWMgaW50IHNzbDNfZ2VuZXJhdGVfa2V5X2Jsb2NrKFNTTCAqCi0gI2VuZGlmCi0gCWs9 MDsKLSAJRVZQX01EX0NUWF9pbml0KCZtNSk7Ci0rCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtNSwg RVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKLSAJRVZQX01EX0NUWF9pbml0KCZzMSk7 Ci0gCWZvciAoaT0wOyAoaW50KWk8bnVtOyBpKz1NRDVfRElHRVNUX0xFTkdUSCkKLSAJCXsKLUBA IC02MTQsNiArNjE1LDggQEAgaW50IHNzbDNfZGlnZXN0X2NhY2hlZF9yZWNvcmRzKFNTTCAqcykK LSAJCWlmICgobWFzayAmIHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMikgJiYgbWQp IAotIAkJCXsKLSAJCQlzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV09RVZQX01EX0NUWF9jcmVhdGUo KTsKLSsJCQlFVlBfTURfQ1RYX3NldF9mbGFncyhzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0sCi0r CQkJCUVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7Ci0gCQkJRVZQX0RpZ2VzdEluaXRf ZXgocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldLG1kLE5VTEwpOwotIAkJCUVWUF9EaWdlc3RVcGRh dGUocy0+czMtPmhhbmRzaGFrZV9kZ3N0W2ldLGhkYXRhLGhkYXRhbGVuKTsKLSAJCQl9IAotQEAg LTY3MCw2ICs2NzMsNyBAQCBzdGF0aWMgaW50IHNzbDNfaGFuZHNoYWtlX21hYyhTU0wgKnMsIGlu Ci0gCQlyZXR1cm4gMDsKLSAJfQkKLSAJRVZQX01EX0NUWF9pbml0KCZjdHgpOwotKwlFVlBfTURf Q1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotIAlF VlBfTURfQ1RYX2NvcHlfZXgoJmN0eCxkKTsKLSAJbj1FVlBfTURfQ1RYX3NpemUoJmN0eCk7Ci0g CWlmIChuIDwgMCkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX3NydnIuYy5m aXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MzX3NydnIuYwotLS0tIG9wZW5zc2wtMS4wLjAt YmV0YTQvc3NsL3MzX3NydnIuYy5maXBzCTIwMDktMTAtMzAgMTQ6MjI6NDQuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvczNfc3J2ci5jCTIwMDktMTEtMTIgMTI6 MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTY3OSw2ICsxNjc5LDggQEAgaW50IHNzbDNfc2Vu ZF9zZXJ2ZXJfa2V5X2V4Y2hhbmdlKFNTTCAqcwotIAkJCQlqPTA7Ci0gCQkJCWZvciAobnVtPTI7 IG51bSA+IDA7IG51bS0tKQotIAkJCQkJewotKwkJCQkJRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1k X2N0eCwKLSsJCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotIAkJCQkJRVZQ X0RpZ2VzdEluaXRfZXgoJm1kX2N0eCwobnVtID09IDIpCi0gCQkJCQkJP3MtPmN0eC0+bWQ1OnMt PmN0eC0+c2hhMSwgTlVMTCk7Ci0gCQkJCQlFVlBfRGlnZXN0VXBkYXRlKCZtZF9jdHgsJihzLT5z My0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19SQU5ET01fU0laRSk7Ci1kaWZmIC11cCBvcGVuc3Ns LTEuMC4wLWJldGE0L3NzbC90MV9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3Qx X2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfZW5jLmMuZmlwcwkyMDA5LTA0 LTE5IDIwOjAzOjEzLjAwMDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3Ns L3QxX2VuYy5jCTIwMDktMTEtMTIgMTI6MzY6NTAuMDAwMDAwMDAwICswMTAwCi1AQCAtMTY5LDYg KzE2OSw4IEBAIHN0YXRpYyB2b2lkIHRsczFfUF9oYXNoKGNvbnN0IEVWUF9NRCAqbWQKLSAKLSAJ SE1BQ19DVFhfaW5pdCgmY3R4KTsKLSAJSE1BQ19DVFhfaW5pdCgmY3R4X3RtcCk7Ci0rCUhNQUNf Q1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOwotKwlI TUFDX0NUWF9zZXRfZmxhZ3MoJmN0eF90bXAsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExP Vyk7Ci0gCUhNQUNfSW5pdF9leCgmY3R4LHNlYyxzZWNfbGVuLG1kLCBOVUxMKTsKLSAJSE1BQ19J bml0X2V4KCZjdHhfdG1wLHNlYyxzZWNfbGVuLG1kLCBOVUxMKTsKLSAJaWYgKHNlZWQxICE9IE5V TEwpIEhNQUNfVXBkYXRlKCZjdHgsc2VlZDEsc2VlZDFfbGVuKTsKCmRpZmYgLS1naXQgYS9vcGVu c3NsLTEuMC4wLWJldGE0LXJlZGhhdC5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTQtcmVkaGF0 LnBhdGNoCmluZGV4IGFkNjFiZjguLjQzNTZlNDEgMTAwNjQ0Ci0tLSBhL29wZW5zc2wtMS4wLjAt YmV0YTQtcmVkaGF0LnBhdGNoCisrKyBiL29wZW5zc2wtMS4wLjAtYmV0YTQtcmVkaGF0LnBhdGNo CkBAIC0yMiw3ICsyMiw3IEBAIGRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvQ29uZmlndXJl LnJlZGhhdCBvcGVuc3NsLTEuMC4wLWJldGE0L0NvbmZpZ3VyZQogLSJsaW51eC1nZW5lcmljNjQi LCJnY2M6LURURVJNSU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9C SVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMIEJGX1BUUjoke25v X2FzbX06ZGxmY246bGludXgtc2hhcmVkOi1mUElDOjouc28uXCQoU0hMSUJfTUFKT1IpLlwkKFNI TElCX01JTk9SKSIsCiAtImxpbnV4LXBwYzY0IiwJImdjYzotbTY0IC1EQl9FTkRJQU4gLURURVJN SU8gLU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRf Q0hBUiBSQzRfQ0hVTksgREVTX1JJU0MxIERFU19VTlJPTEw6JHtwcGM2NF9hc219OmxpbnV4NjQ6 ZGxmY246bGludXgtc2hhcmVkOi1mUElDOi1tNjQ6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJ Ql9NSU5PUik6Ojo2NCIsCiAtImxpbnV4LWlhNjQiLAkiZ2NjOi1ETF9FTkRJQU4gLURURVJNSU8g LU8zIC1XYWxsOjotRF9SRUVOVFJBTlQ6Oi1sZGw6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hV TksgREVTX1VOUk9MTCBERVNfSU5UOiR7aWE2NF9hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJ Qzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikiLAotKyJsaW51eC1nZW5lcmlj NjQiLCJnY2M6LURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6 LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfSU5UIERFU19V TlJPTEwgQkZfUFRSOiR7bm9fYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09Q VF9GTEFHUyk6XCQoU0hMSUJfU09OQU1FVkVSKSIsCisrImxpbnV4LWdlbmVyaWM2NCIsImdjYzot RFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZ X0ZPVVJfQklUX0xPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTCBCRl9Q VFI6JHtub19hc219OmRsZmNuOmxpbnV4LXNoYXJlZDotZlBJQzpcJChSUE1fT1BUX0ZMQUdTKTou c28uXCQoU0hMSUJfU09OQU1FVkVSKSIsCiArImxpbnV4LXBwYzY0IiwJImdjYzotbTY0IC1EQl9F TkRJQU4gLURURVJNSU8gLVdhbGwgXCQoUlBNX09QVF9GTEFHUyk6Oi1EX1JFRU5UUkFOVDo6LWxk bDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfUklTQzEgREVTX1VO Uk9MTDoke3BwYzY0X2FzbX06bGludXg2NDpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6LW02NCBc JChSUE1fT1BUX0ZMQUdTKTouc28uXCQoU0hMSUJfU09OQU1FVkVSKTo6OjY0IiwKICsibGludXgt aWE2NCIsCSJnY2M6LURMX0VORElBTiAtRFRFUk1JTyAtV2FsbCBcJChSUE1fT1BUX0ZMQUdTKTo6 LURfUkVFTlRSQU5UOjotbGRsOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19VTlJP TEwgREVTX0lOVDoke2lhNjRfYXNtfTpkbGZjbjpsaW51eC1zaGFyZWQ6LWZQSUM6XCQoUlBNX09Q VF9GTEFHUyk6LnNvLlwkKFNITElCX1NPTkFNRVZFUikiLAogICJsaW51eC1pYTY0LWVjYyIsImVj YzotRExfRU5ESUFOIC1EVEVSTUlPIC1PMiAtV2FsbCAtbm9fY3BwcnQ6Oi1EX1JFRU5UUkFOVDo6 LWxkbDpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UOiR7aWE2NF9hc219OmRs ZmNuOmxpbnV4LXNoYXJlZDotZlBJQzo6LnNvLlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5P UikiLAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTQtcmVuZWctZXJyLnBhdGNoIGIv b3BlbnNzbC0xLjAuMC1iZXRhNC1yZW5lZy1lcnIucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDI3MWRiZTcuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAuMC1iZXRhNC1yZW5l Zy1lcnIucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi1CZXR0ZXIgZXJyb3Ig cmVwb3J0aW5nIGZvciB1bnNhZmUgcmVuZWdvdGlhdGlvbi4KLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTQvc3NsL3NzbF9lcnIuYy5yZW5lZy1lcnIgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wv c3NsX2Vyci5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsX2Vyci5jLnJlbmVnLWVy cgkyMDA5LTExLTA5IDE5OjQ1OjQyLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvc3NsL3NzbF9lcnIuYwkyMDA5LTExLTIwIDE3OjU2OjU3LjAwMDAwMDAwMCArMDEwMAot QEAgLTIyNiw3ICsyMjYsOSBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIFNTTF9zdHJfZnVuY3Rz W109Ci0ge0VSUl9GVU5DKFNTTF9GX1NTTF9MT0FEX0NMSUVOVF9DQV9GSUxFKSwJIlNTTF9sb2Fk X2NsaWVudF9DQV9maWxlIn0sCi0ge0VSUl9GVU5DKFNTTF9GX1NTTF9ORVcpLAkiU1NMX25ldyJ9 LAotIHtFUlJfRlVOQyhTU0xfRl9TU0xfUEFSU0VfQ0xJRU5USEVMTE9fUkVORUdPVElBVEVfRVhU KSwJIlNTTF9QQVJTRV9DTElFTlRIRUxMT19SRU5FR09USUFURV9FWFQifSwKLSt7RVJSX0ZVTkMo U1NMX0ZfU1NMX1BBUlNFX0NMSUVOVEhFTExPX1RMU0VYVCksCSJTU0xfUEFSU0VfQ0xJRU5USEVM TE9fVExTRVhUIn0sCi0ge0VSUl9GVU5DKFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19SRU5F R09USUFURV9FWFQpLAkiU1NMX1BBUlNFX1NFUlZFUkhFTExPX1JFTkVHT1RJQVRFX0VYVCJ9LAot K3tFUlJfRlVOQyhTU0xfRl9TU0xfUEFSU0VfU0VSVkVSSEVMTE9fVExTRVhUKSwJIlNTTF9QQVJT RV9TRVJWRVJIRUxMT19UTFNFWFQifSwKLSB7RVJSX0ZVTkMoU1NMX0ZfU1NMX1BFRUspLAkiU1NM X3BlZWsifSwKLSB7RVJSX0ZVTkMoU1NMX0ZfU1NMX1BSRVBBUkVfQ0xJRU5USEVMTE9fVExTRVhU KSwJIlNTTF9QUkVQQVJFX0NMSUVOVEhFTExPX1RMU0VYVCJ9LAotIHtFUlJfRlVOQyhTU0xfRl9T U0xfUFJFUEFSRV9TRVJWRVJIRUxMT19UTFNFWFQpLAkiU1NMX1BSRVBBUkVfU0VSVkVSSEVMTE9f VExTRVhUIn0sCi1AQCAtNTI2LDYgKzUyOCw3IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgU1NM X3N0cl9yZWFzb25zW10KLSB7RVJSX1JFQVNPTihTU0xfUl9VTktOT1dOX1JFTU9URV9FUlJPUl9U WVBFKSwidW5rbm93biByZW1vdGUgZXJyb3IgdHlwZSJ9LAotIHtFUlJfUkVBU09OKFNTTF9SX1VO S05PV05fU1NMX1ZFUlNJT04pICAgLCJ1bmtub3duIHNzbCB2ZXJzaW9uIn0sCi0ge0VSUl9SRUFT T04oU1NMX1JfVU5LTk9XTl9TVEFURSkgICAgICAgICAsInVua25vd24gc3RhdGUifSwKLSt7RVJS X1JFQVNPTihTU0xfUl9VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT05fRElTQUJMRUQpLCJ1bnNh ZmUgbGVnYWN5IHJlbmVnb3RpYXRpb24gZGlzYWJsZWQifSwKLSB7RVJSX1JFQVNPTihTU0xfUl9V TlNVUFBPUlRFRF9DSVBIRVIpICAgICwidW5zdXBwb3J0ZWQgY2lwaGVyIn0sCi0ge0VSUl9SRUFT T04oU1NMX1JfVU5TVVBQT1JURURfQ09NUFJFU1NJT05fQUxHT1JJVEhNKSwidW5zdXBwb3J0ZWQg Y29tcHJlc3Npb24gYWxnb3JpdGhtIn0sCi0ge0VSUl9SRUFTT04oU1NMX1JfVU5TVVBQT1JURURf RElHRVNUX1RZUEUpLCJ1bnN1cHBvcnRlZCBkaWdlc3QgdHlwZSJ9LAotZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC1iZXRhNC9zc2wvc3NsLmgucmVuZWctZXJyIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3Ns L3NzbC5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvc3NsLmgucmVuZWctZXJyCTIwMDkt MTEtMTIgMTU6MTc6MjkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9z c2wvc3NsLmgJMjAwOS0xMS0yMCAxNzo1Njo1Ny4wMDAwMDAwMDAgKzAxMDAKLUBAIC0xOTM0LDcg KzE5MzQsOSBAQCB2b2lkIEVSUl9sb2FkX1NTTF9zdHJpbmdzKHZvaWQpOwotICNkZWZpbmUgU1NM X0ZfU1NMX0xPQURfQ0xJRU5UX0NBX0ZJTEUJCQkgMTg1Ci0gI2RlZmluZSBTU0xfRl9TU0xfTkVX CQkJCQkgMTg2Ci0gI2RlZmluZSBTU0xfRl9TU0xfUEFSU0VfQ0xJRU5USEVMTE9fUkVORUdPVElB VEVfRVhUCSAzMDAKLSsjZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9DTElFTlRIRUxMT19UTFNFWFQJ CSAzMDIKLSAjZGVmaW5lIFNTTF9GX1NTTF9QQVJTRV9TRVJWRVJIRUxMT19SRU5FR09USUFURV9F WFQJIDMwMQotKyNkZWZpbmUgU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1RMU0VYVAkJIDMw MwotICNkZWZpbmUgU1NMX0ZfU1NMX1BFRUsJCQkJCSAyNzAKLSAjZGVmaW5lIFNTTF9GX1NTTF9Q UkVQQVJFX0NMSUVOVEhFTExPX1RMU0VYVAkJIDI4MQotICNkZWZpbmUgU1NMX0ZfU1NMX1BSRVBB UkVfU0VSVkVSSEVMTE9fVExTRVhUCQkgMjgyCi1AQCAtMjIzMSw2ICsyMjMzLDcgQEAgdm9pZCBF UlJfbG9hZF9TU0xfc3RyaW5ncyh2b2lkKTsKLSAjZGVmaW5lIFNTTF9SX1VOS05PV05fUkVNT1RF X0VSUk9SX1RZUEUJCQkgMjUzCi0gI2RlZmluZSBTU0xfUl9VTktOT1dOX1NTTF9WRVJTSU9OCQkJ IDI1NAotICNkZWZpbmUgU1NMX1JfVU5LTk9XTl9TVEFURQkJCQkgMjU1Ci0rI2RlZmluZSBTU0xf Ul9VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT05fRElTQUJMRUQJIDMzOAotICNkZWZpbmUgU1NM X1JfVU5TVVBQT1JURURfQ0lQSEVSCQkJIDI1NgotICNkZWZpbmUgU1NMX1JfVU5TVVBQT1JURURf Q09NUFJFU1NJT05fQUxHT1JJVEhNCQkgMjU3Ci0gI2RlZmluZSBTU0xfUl9VTlNVUFBPUlRFRF9E SUdFU1RfVFlQRQkJCSAzMjYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MyM19z cnZyLmMucmVuZWctZXJyIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MyM19zcnZyLmMKLS0tLSBv cGVuc3NsLTEuMC4wLWJldGE0L3NzbC9zMjNfc3J2ci5jLnJlbmVnLWVycgkyMDA5LTExLTEyIDE1 OjE3OjI5LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3MyM19z cnZyLmMJMjAwOS0xMS0yMCAxNzo1NzoyMy4wMDAwMDAwMDAgKzAxMDAKLUBAIC00OTcsNiArNDk3 LDExIEBAIGludCBzc2wyM19nZXRfY2xpZW50X2hlbGxvKFNTTCAqcykKLSAJCVNTTGVycihTU0xf Rl9TU0wyM19HRVRfQ0xJRU5UX0hFTExPLFNTTF9SX1VOU1VQUE9SVEVEX1BST1RPQ09MKTsKLSAJ CWdvdG8gZXJyOwotICNlbHNlCi0rCQlpZiAoIShzLT5jdHgtPm9wdGlvbnMgJiBTU0xfT1BfQUxM T1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OKSkKLSsJCQl7Ci0rCQkJU1NMZXJyKFNTTF9G X1NTTDIzX0dFVF9DTElFTlRfSEVMTE8sU1NMX1JfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9O X0RJU0FCTEVEKTsKLSsJCQlnb3RvIGVycjsKLSsJCQl9Ci0gCQkvKiB3ZSBhcmUgdGFsa2luZyBz c2x2MiAqLwotIAkJLyogd2UgbmVlZCB0byBjbGVhbiB1cCB0aGUgU1NMdjMvVExTdjEgc2V0dXAg YW5kIHB1dCBpbiB0aGUKLSAJCSAqIHNzbHYyIHN0dWZmLiAqLwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNC9zc2wvdDFfbGliLmMucmVuZWctZXJyIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3Ns L3QxX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfbGliLmMucmVuZWctZXJy CTIwMDktMTEtMTggMTQ6MDQ6MTkuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1i ZXRhNC9zc2wvdDFfbGliLmMJMjAwOS0xMS0yMCAxNzo1Njo1Ny4wMDAwMDAwMDAgKzAxMDAKLUBA IC02MzYsNiArNjM2LDcgQEAgaW50IHNzbF9wYXJzZV9jbGllbnRoZWxsb190bHNleHQoU1NMICpz LAotIAkJCXsKLSAJCQkvKiBXZSBzaG91bGQgYWx3YXlzIHNlZSBvbmUgZXh0ZW5zaW9uOiB0aGUg cmVuZWdvdGlhdGUgZXh0ZW5zaW9uICovCi0gCQkJKmFsID0gU1NMX0FEX0lMTEVHQUxfUEFSQU1F VEVSOyAvKiBpcyB0aGlzIHRoZSByaWdodCBhbGVydD8gKi8KLSsJCQlTU0xlcnIoU1NMX0ZfU1NM X1BBUlNFX0NMSUVOVEhFTExPX1RMU0VYVCwgU1NMX1JfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFU SU9OX0RJU0FCTEVEKTsKLSAJCQlyZXR1cm4gMDsKLSAJCQl9Ci0gCQlyZXR1cm4gMTsKLUBAIC05 NjUsNiArOTY2LDcgQEAgaW50IHNzbF9wYXJzZV9jbGllbnRoZWxsb190bHNleHQoU1NMICpzLAot ICAJaWYgKHMtPm5ld19zZXNzaW9uICYmICFyZW5lZ290aWF0ZV9zZWVuCi0gIAkJJiYgIShzLT5j dHgtPm9wdGlvbnMgJiBTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OKSkK LSAgCQl7Ci0rCQlTU0xlcnIoU1NMX0ZfU1NMX1BBUlNFX0NMSUVOVEhFTExPX1RMU0VYVCwgU1NM X1JfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OX0RJU0FCTEVEKTsKLSAgCQkqYWwgPSBTU0xf QURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhlIHJpZ2h0IGFsZXJ0PyAqLwotICAJ CXJldHVybiAwOwotICAJCX0KLUBAIC05OTMsNiArOTk1LDcgQEAgaW50IHNzbF9wYXJzZV9zZXJ2 ZXJoZWxsb190bHNleHQoU1NMICpzLAotIAkJCXsKLSAJCQkvKiBXZSBzaG91bGQgYWx3YXlzIHNl ZSBvbmUgZXh0ZW5zaW9uOiB0aGUgcmVuZWdvdGlhdGUgZXh0ZW5zaW9uICovCi0gCQkJKmFsID0g U1NMX0FEX0lMTEVHQUxfUEFSQU1FVEVSOyAvKiBpcyB0aGlzIHRoZSByaWdodCBhbGVydD8gKi8K LSsJCQlTU0xlcnIoU1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1RMU0VYVCwgU1NMX1JfVU5T QUZFX0xFR0FDWV9SRU5FR09USUFUSU9OX0RJU0FCTEVEKTsKLSAJCQlyZXR1cm4gMDsKLSAJCQl9 Ci0gI2VuZGlmCi1AQCAtMTEzMyw2ICsxMTM2LDcgQEAgaW50IHNzbF9wYXJzZV9zZXJ2ZXJoZWxs b190bHNleHQoU1NMICpzLAotIAkJJiYgIShzLT5jdHgtPm9wdGlvbnMgJiBTU0xfT1BfQUxMT1df VU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OKSkKLSAJCXsKLSAJCSphbCA9IFNTTF9BRF9JTExF R0FMX1BBUkFNRVRFUjsgLyogaXMgdGhpcyB0aGUgcmlnaHQgYWxlcnQ/ICovCi0rCQlTU0xlcnIo U1NMX0ZfU1NMX1BBUlNFX1NFUlZFUkhFTExPX1RMU0VYVCwgU1NMX1JfVU5TQUZFX0xFR0FDWV9S RU5FR09USUFUSU9OX0RJU0FCTEVEKTsKLSAJCXJldHVybiAwOwotIAkJfQotICNlbmRpZgoKZGlm ZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTQtcmVuZWcucGF0Y2ggYi9vcGVuc3NsLTEuMC4w LWJldGE0LXJlbmVnLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmUyMDZk Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjAtYmV0YTQtcmVuZWcucGF0Y2gKKysrIC9kZXYv bnVsbApAQCAtMSwyMzcgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBz L3NfY2IuYy5yZW5lZyBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19jYi5jCi0tLS0gb3BlbnNz bC0xLjAuMC1iZXRhNC9hcHBzL3NfY2IuYy5yZW5lZwkyMDA5LTEwLTE1IDIwOjQ4OjQ3LjAwMDAw MDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX2NiLmMJMjAwOS0xMS0x MiAxNTowMjozMC4wMDAwMDAwMDAgKzAxMDAKLUBAIC02NjksNiArNjY5LDEwIEBAIHZvaWQgTVNf Q0FMTEJBQ0sgdGxzZXh0X2NiKFNTTCAqcywgaW50IGMKLSAJCWV4dG5hbWUgPSAic2VydmVyIHRp Y2tldCI7Ci0gCQlicmVhazsKLSAKLSsJCWNhc2UgVExTRVhUX1RZUEVfcmVuZWdvdGlhdGU6Ci0r CQlleHRuYW1lID0gInJlbmVnb3RpYXRlIjsKLSsJCWJyZWFrOwotKwotICNpZmRlZiBUTFNFWFRf VFlQRV9vcGFxdWVfcHJmX2lucHV0Ci0gCQljYXNlIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZfaW5w dXQ6Ci0gCQlleHRuYW1lID0gIm9wYXF1ZSBQUkYgaW5wdXQiOwotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC1iZXRhNC9hcHBzL3NfY2xpZW50LmMucmVuZWcgb3BlbnNzbC0xLjAuMC1iZXRhNC9hcHBz L3NfY2xpZW50LmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19jbGllbnQuYy5yZW5l ZwkyMDA5LTExLTEyIDE0OjU3OjQ4LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjAt YmV0YTQvYXBwcy9zX2NsaWVudC5jCTIwMDktMTEtMTIgMTU6MDE6NDguMDAwMDAwMDAwICswMTAw Ci1AQCAtMzQzLDYgKzM0Myw3IEBAIHN0YXRpYyB2b2lkIHNjX3VzYWdlKHZvaWQpCi0gCUJJT19w cmludGYoYmlvX2VyciwiIC1zdGF0dXMgICAgICAgICAgIC0gcmVxdWVzdCBjZXJ0aWZpY2F0ZSBz dGF0dXMgZnJvbSBzZXJ2ZXJcbiIpOwotIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtbm9fdGlja2V0 ICAgICAgICAtIGRpc2FibGUgdXNlIG9mIFJGQzQ1MDdiaXMgc2Vzc2lvbiB0aWNrZXRzXG4iKTsK LSAjZW5kaWYKLSsJQklPX3ByaW50ZihiaW9fZXJyLCIgLWxlZ2FjeV9yZW5lZ290aWF0aW9uIC0g ZW5hYmxlIHVzZSBvZiBsZWdhY3kgcmVuZWdvdGlhdGlvbiAoZGFuZ2Vyb3VzKVxuIik7Ci0gCX0K LSAKLSAjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCi1AQCAtNjU3LDYgKzY1OCw4IEBAIGludCBN QUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAjZW5kaWYKLSAJCWVsc2UgaWYgKHN0cmNtcCgq YXJndiwiLXNlcnZlcnByZWYiKSA9PSAwKQotIAkJCW9mZnw9U1NMX09QX0NJUEhFUl9TRVJWRVJf UFJFRkVSRU5DRTsKLSsJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWxlZ2FjeV9yZW5lZ290aWF0 aW9uIikgPT0gMCkKLSsJCQlvZmZ8PVNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJ QVRJT047Ci0gCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jaXBoZXIiKSA9PSAwKQotIAkJCXsK LSAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4wLWJl dGE0L2FwcHMvc19zZXJ2ZXIuYy5yZW5lZyBvcGVuc3NsLTEuMC4wLWJldGE0L2FwcHMvc19zZXJ2 ZXIuYwotLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTQvYXBwcy9zX3NlcnZlci5jLnJlbmVnCTIwMDkt MTEtMTIgMTQ6NTc6NDguMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9h cHBzL3Nfc2VydmVyLmMJMjAwOS0xMS0xMiAxNTowMTo0OC4wMDAwMDAwMDAgKzAxMDAKLUBAIC00 OTEsNiArNDkxLDcgQEAgc3RhdGljIHZvaWQgc3ZfdXNhZ2Uodm9pZCkKLSAJQklPX3ByaW50Zihi aW9fZXJyLCIgICAgICAgICAgICAgICAgIG5vdCBzcGVjaWZpZWQgKGRlZmF1bHQgaXMgJXMpXG4i LFRFU1RfQ0VSVDIpOwotIAlCSU9fcHJpbnRmKGJpb19lcnIsIiAtdGxzZXh0ZGVidWcgIC0gaGV4 IGR1bXAgb2YgYWxsIFRMUyBleHRlbnNpb25zIHJlY2VpdmVkXG4iKTsKLSAJQklPX3ByaW50Zihi aW9fZXJyLCIgLW5vX3RpY2tldCAgICAtIGRpc2FibGUgdXNlIG9mIFJGQzQ1MDdiaXMgc2Vzc2lv biB0aWNrZXRzXG4iKTsKLSsJQklPX3ByaW50ZihiaW9fZXJyLCIgLWxlZ2FjeV9yZW5lZ290aWF0 aW9uIC0gZW5hYmxlIHVzZSBvZiBsZWdhY3kgcmVuZWdvdGlhdGlvbiAoZGFuZ2Vyb3VzKVxuIik7 Ci0gI2VuZGlmCi0gCX0KLSAKLUBAIC0xMDEzLDYgKzEwMTQsOCBAQCBpbnQgTUFJTihpbnQgYXJn YywgY2hhciAqYXJndltdKQotIAkJCXZlcmlmeV9yZXR1cm5fZXJyb3IgPSAxOwotIAkJZWxzZSBp Zgkoc3RyY21wKCphcmd2LCItc2VydmVycHJlZiIpID09IDApCi0gCQkJeyBvZmZ8PVNTTF9PUF9D SVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0U7IH0KLSsJCWVsc2UgaWYgKHN0cmNtcCgqYXJndiwiLWxl Z2FjeV9yZW5lZ290aWF0aW9uIikgPT0gMCkKLSsJCQlvZmZ8PVNTTF9PUF9BTExPV19VTlNBRkVf TEVHQUNZX1JFTkVHT1RJQVRJT047Ci0gCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1jaXBoZXIi KSA9PSAwKQotIAkJCXsKLSAJCQlpZiAoLS1hcmdjIDwgMSkgZ290byBiYWQ7Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4wLWJldGE0L3NzbC90bHMxLmgucmVuZWcgb3BlbnNzbC0xLjAuMC1iZXRhNC9z c2wvdGxzMS5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdGxzMS5oLnJlbmVnCTIwMDkt MTEtMTIgMTQ6NTc6NDcuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMC1iZXRhNC9z c2wvdGxzMS5oCTIwMDktMTEtMTIgMTU6MDI6MzAuMDAwMDAwMDAwICswMTAwCi1AQCAtMjAxLDYg KzIwMSw5IEBAIGV4dGVybiAiQyIgewotICMgZGVmaW5lIFRMU0VYVF9UWVBFX29wYXF1ZV9wcmZf aW5wdXQJCT8/ICovCi0gI2VuZGlmCi0gCi0rLyogVGVtcG9yYXJ5IGV4dGVuc2lvbiB0eXBlICov Ci0rI2RlZmluZSBUTFNFWFRfVFlQRV9yZW5lZ290aWF0ZSAgICAgICAgICAgICAgICAgMHhmZjAx Ci0rCi0gLyogTmFtZVR5cGUgdmFsdWUgZnJvbSBSRkMgMzU0NiAqLwotICNkZWZpbmUgVExTRVhU X05BTUVUWVBFX2hvc3RfbmFtZSAwCi0gLyogc3RhdHVzIHJlcXVlc3QgdmFsdWUgZnJvbSBSRkMg MzU0NiAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfbGliLmMucmVuZWcg b3BlbnNzbC0xLjAuMC1iZXRhNC9zc2wvdDFfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4wLWJldGE0 L3NzbC90MV9saWIuYy5yZW5lZwkyMDA5LTExLTA4IDE1OjM2OjMyLjAwMDAwMDAwMCArMDEwMAot KysrIG9wZW5zc2wtMS4wLjAtYmV0YTQvc3NsL3QxX2xpYi5jCTIwMDktMTEtMTIgMTU6MDI6MzAu MDAwMDAwMDAwICswMTAwCi1AQCAtMzE1LDYgKzMxNSwzMCBAQCB1bnNpZ25lZCBjaGFyICpzc2xf YWRkX2NsaWVudGhlbGxvX3Rsc2V4Ci0gCQlyZXQrPXNpemVfc3RyOwotIAkJfQotIAotKyAgICAg ICAgLyogQWRkIHRoZSByZW5lZ290aWF0aW9uIG9wdGlvbjogVE9ET0VLUiBzd2l0Y2ggKi8KLSsg ICAgICAgIHsKLSsgICAgICAgICAgaW50IGVsOwotKyAgICAgICAgICAKLSsgICAgICAgICAgaWYo IXNzbF9hZGRfY2xpZW50aGVsbG9fcmVuZWdvdGlhdGVfZXh0KHMsIDAsICZlbCwgMCkpCi0rICAg ICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICBTU0xlcnIoU1NMX0ZfU1NMX0FERF9DTElFTlRI RUxMT19UTFNFWFQsIEVSUl9SX0lOVEVSTkFMX0VSUk9SKTsKLSsgICAgICAgICAgICAgIHJldHVy biBOVUxMOwotKyAgICAgICAgICAgICAgfQotKwotKyAgICAgICAgICBpZigobGltaXQgLSBwIC0g NCAtIGVsKSA8IDApIHJldHVybiBOVUxMOwotKyAgICAgICAgICAKLSsgICAgICAgICAgczJuKFRM U0VYVF9UWVBFX3JlbmVnb3RpYXRlLHJldCk7Ci0rICAgICAgICAgIHMybihlbCxyZXQpOwotKwot KyAgICAgICAgICBpZighc3NsX2FkZF9jbGllbnRoZWxsb19yZW5lZ290aWF0ZV9leHQocywgcmV0 LCAmZWwsIGVsKSkKLSsgICAgICAgICAgICAgIHsKLSsgICAgICAgICAgICAgIFNTTGVycihTU0xf Rl9TU0xfQUREX0NMSUVOVEhFTExPX1RMU0VYVCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwotKyAg ICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgICAgICAgICAgICB9Ci0rCi0rICAgICAgICAg IHJldCArPSBlbDsKLSsgICAgICAgIH0KLSsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRUMKLSAJaWYg KHMtPnRsc2V4dF9lY3BvaW50Zm9ybWF0bGlzdCAhPSBOVUxMKQotIAkJewotQEAgLTQ5MCw2ICs1 MTQsMzEgQEAgdW5zaWduZWQgY2hhciAqc3NsX2FkZF9zZXJ2ZXJoZWxsb190bHNleAotIAkJczJu KFRMU0VYVF9UWVBFX3NlcnZlcl9uYW1lLHJldCk7Ci0gCQlzMm4oMCxyZXQpOwotIAkJfQotKwot KyAgICAgICAgaWYocy0+czMtPnNlbmRfY29ubmVjdGlvbl9iaW5kaW5nKQotKyAgICAgICAgewot KyAgICAgICAgICBpbnQgZWw7Ci0rICAgICAgICAgIAotKyAgICAgICAgICBpZighc3NsX2FkZF9z ZXJ2ZXJoZWxsb19yZW5lZ290aWF0ZV9leHQocywgMCwgJmVsLCAwKSkKLSsgICAgICAgICAgICAg IHsKLSsgICAgICAgICAgICAgIFNTTGVycihTU0xfRl9TU0xfQUREX1NFUlZFUkhFTExPX1RMU0VY VCwgRVJSX1JfSU5URVJOQUxfRVJST1IpOwotKyAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0r ICAgICAgICAgICAgICB9Ci0rCi0rICAgICAgICAgIGlmKChsaW1pdCAtIHAgLSA0IC0gZWwpIDwg MCkgcmV0dXJuIE5VTEw7Ci0rICAgICAgICAgIAotKyAgICAgICAgICBzMm4oVExTRVhUX1RZUEVf cmVuZWdvdGlhdGUscmV0KTsKLSsgICAgICAgICAgczJuKGVsLHJldCk7Ci0rCi0rICAgICAgICAg IGlmKCFzc2xfYWRkX3NlcnZlcmhlbGxvX3JlbmVnb3RpYXRlX2V4dChzLCByZXQsICZlbCwgZWwp KQotKyAgICAgICAgICAgICAgewotKyAgICAgICAgICAgICAgU1NMZXJyKFNTTF9GX1NTTF9BRERf U0VSVkVSSEVMTE9fVExTRVhULCBFUlJfUl9JTlRFUk5BTF9FUlJPUik7Ci0rICAgICAgICAgICAg ICByZXR1cm4gTlVMTDsKLSsgICAgICAgICAgICAgIH0KLSsKLSsgICAgICAgICAgcmV0ICs9IGVs OwotKyAgICAgICAgfQotKwotICNpZm5kZWYgT1BFTlNTTF9OT19FQwotIAlpZiAocy0+dGxzZXh0 X2VjcG9pbnRmb3JtYXRsaXN0ICE9IE5VTEwpCi0gCQl7Ci1AQCAtNTc0LDExICs2MjMsMjMgQEAg aW50IHNzbF9wYXJzZV9jbGllbnRoZWxsb190bHNleHQoU1NMICpzLAotIAl1bnNpZ25lZCBzaG9y dCBzaXplOwotIAl1bnNpZ25lZCBzaG9ydCBsZW47Ci0gCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSAq cDsKLSsJaW50IHJlbmVnb3RpYXRlX3NlZW4gPSAwOwotKwotIAlzLT5zZXJ2ZXJuYW1lX2RvbmUg PSAwOwotIAlzLT50bHNleHRfc3RhdHVzX3R5cGUgPSAtMTsKLSsJcy0+czMtPnNlbmRfY29ubmVj dGlvbl9iaW5kaW5nID0gMDsKLSAKLSAJaWYgKGRhdGEgPj0gKGQrbi0yKSkKLSsJCXsKLSsJCWlm IChzLT5uZXdfc2Vzc2lvbgotKwkJCSYmICEocy0+Y3R4LT5vcHRpb25zICYgU1NMX09QX0FMTE9X X1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTikpCi0rCQkJewotKwkJCS8qIFdlIHNob3VsZCBh bHdheXMgc2VlIG9uZSBleHRlbnNpb246IHRoZSByZW5lZ290aWF0ZSBleHRlbnNpb24gKi8KLSsJ CQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhlIHJpZ2h0IGFs ZXJ0PyAqLwotKwkJCXJldHVybiAwOwotKwkJCX0KLSAJCXJldHVybiAxOwotKwkJfQotIAluMnMo ZGF0YSxsZW4pOwotIAotIAlpZiAoZGF0YSA+IChkK24tbGVuKSkgCi1AQCAtNzkwLDYgKzg1MSwx MiBAQCBpbnQgc3NsX3BhcnNlX2NsaWVudGhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQkJCXJldHVy biAwOwotIAkJCQl9Ci0gCQkJfQotKwkJZWxzZSBpZiAodHlwZSA9PSBUTFNFWFRfVFlQRV9yZW5l Z290aWF0ZSkKLSsJCQl7Ci0rCQkJaWYoIXNzbF9wYXJzZV9jbGllbnRoZWxsb19yZW5lZ290aWF0 ZV9leHQocywgZGF0YSwgc2l6ZSwgYWwpKQotKwkJCQlyZXR1cm4gMDsKLSsJCQlyZW5lZ290aWF0 ZV9zZWVuID0gMTsKLSsJCQl9Ci0gCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3N0YXR1 c19yZXF1ZXN0Ci0gCQkJCQkJJiYgcy0+Y3R4LT50bHNleHRfc3RhdHVzX2NiKQotIAkJCXsKLUBA IC04OTQsNiArOTYxLDE0IEBAIGludCBzc2xfcGFyc2VfY2xpZW50aGVsbG9fdGxzZXh0KFNTTCAq cywKLSAJCS8qIHNlc3Npb24gdGlja2V0IHByb2Nlc3NlZCBlYXJsaWVyICovCi0gCQlkYXRhKz1z aXplOwotIAkJfQotKyAgCi0rIAlpZiAocy0+bmV3X3Nlc3Npb24gJiYgIXJlbmVnb3RpYXRlX3Nl ZW4KLSsgCQkmJiAhKHMtPmN0eC0+b3B0aW9ucyAmIFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZ X1JFTkVHT1RJQVRJT04pKQotKyAJCXsKLSsgCQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVU RVI7IC8qIGlzIHRoaXMgdGhlIHJpZ2h0IGFsZXJ0PyAqLwotKyAJCXJldHVybiAwOwotKyAJCX0K LSsgCi0gCQkJCQotIAkqcCA9IGRhdGE7Ci0gCXJldHVybiAxOwotQEAgLTkwNSwxMSArOTgwLDIy IEBAIGludCBzc2xfcGFyc2Vfc2VydmVyaGVsbG9fdGxzZXh0KFNTTCAqcywKLSAJdW5zaWduZWQg c2hvcnQgc2l6ZTsKLSAJdW5zaWduZWQgc2hvcnQgbGVuOyAgCi0gCXVuc2lnbmVkIGNoYXIgKmRh dGEgPSAqcDsKLS0KLSAJaW50IHRsc2V4dF9zZXJ2ZXJuYW1lID0gMDsKLSsJaW50IHJlbmVnb3Rp YXRlX3NlZW4gPSAwOwotIAotIAlpZiAoZGF0YSA+PSAoZCtuLTIpKQotKwkJewotKwkJLyogQmVj YXVzZSB0aGUgY2xpZW50IGRvZXMgbm90IHNlZSBhbnkgcmVuZWdvdGlhdGlvbiBkdXJpbmcgYW4K LSsJCSAgIGF0dGFjaywgd2UgbXVzdCBlbmZvcmNlIHRoaXMgb24gYWxsIHNlcnZlciBoZWxsb3Ms IGV2ZW4gdGhlCi0rCQkgICBmaXJzdCAqLwotKwkJaWYgKCEocy0+Y3R4LT5vcHRpb25zICYgU1NM X09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTikpCi0rCQkJewotKwkJCS8qIFdl IHNob3VsZCBhbHdheXMgc2VlIG9uZSBleHRlbnNpb246IHRoZSByZW5lZ290aWF0ZSBleHRlbnNp b24gKi8KLSsJCQkqYWwgPSBTU0xfQURfSUxMRUdBTF9QQVJBTUVURVI7IC8qIGlzIHRoaXMgdGhl IHJpZ2h0IGFsZXJ0PyAqLwotKwkJCXJldHVybiAwOwotKwkJCX0KLSAJCXJldHVybiAxOwotKwkJ fQotIAotIAluMnMoZGF0YSxsZW4pOwotIAotQEAgLTEwMjUsNyArMTExMSwxMiBAQCBpbnQgc3Ns X3BhcnNlX3NlcnZlcmhlbGxvX3Rsc2V4dChTU0wgKnMsCi0gCQkJLyogU2V0IGZsYWcgdG8gZXhw ZWN0IENlcnRpZmljYXRlU3RhdHVzIG1lc3NhZ2UgKi8KLSAJCQlzLT50bHNleHRfc3RhdHVzX2V4 cGVjdGVkID0gMTsKLSAJCQl9Ci0tCi0rCQllbHNlIGlmICh0eXBlID09IFRMU0VYVF9UWVBFX3Jl bmVnb3RpYXRlKQotKwkJCXsKLSsJCQlpZighc3NsX3BhcnNlX3NlcnZlcmhlbGxvX3JlbmVnb3Rp YXRlX2V4dChzLCBkYXRhLCBzaXplLCBhbCkpCi0rCQkJCXJldHVybiAwOwotKwkJCXJlbmVnb3Rp YXRlX3NlZW4gPSAxOwotKwkJCX0KLSAJCWRhdGErPXNpemU7CQkKLSAJCX0KLSAKLUBAIC0xMDM1 LDYgKzExMjYsMTMgQEAgaW50IHNzbF9wYXJzZV9zZXJ2ZXJoZWxsb190bHNleHQoU1NMICpzLAot IAkJcmV0dXJuIDA7Ci0gCQl9Ci0gCi0rCWlmICghcmVuZWdvdGlhdGVfc2VlbgotKwkJJiYgIShz LT5jdHgtPm9wdGlvbnMgJiBTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9O KSkKLSsJCXsKLSsJCSphbCA9IFNTTF9BRF9JTExFR0FMX1BBUkFNRVRFUjsgLyogaXMgdGhpcyB0 aGUgcmlnaHQgYWxlcnQ/ICovCi0rCQlyZXR1cm4gMDsKLSsJCX0KLSsKLSAJaWYgKCFzLT5oaXQg JiYgdGxzZXh0X3NlcnZlcm5hbWUgPT0gMSkKLSAJCXsKLSAgCQlpZiAocy0+dGxzZXh0X2hvc3Ru YW1lKQoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTQtdmVyc2lvbi5wYXRjaCBiL29w ZW5zc2wtMS4wLjAtYmV0YTQtdmVyc2lvbi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggYWIxMmJlMC4uMDAwMDAwMAotLS0gYS9vcGVuc3NsLTEuMC4wLWJldGE0LXZlcnNpb24u cGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1XZSBoYXZlIHRvIGtlZXAgdGhl IGJldGEgc3RhdHVzIG9uIDMgYXMgc29tZSBhcHBsaWNhdGlvbnMgKE9wZW5TU0gpIGluY29ycmVj dGx5IGluc2lzdAotb24gaGF2aW5nIHRoZSBzYW1lIGJldGEgc3RhdHVzIG9mIE9wZW5TU0wgbGli cmFyeSBhcyB0aGV5IHdlcmUgYnVpbHQgYWdhaW5zdC4KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjAt YmV0YTQvY3J5cHRvL29wZW5zc2x2LmgudmVyc2lvbiBvcGVuc3NsLTEuMC4wLWJldGE0L2NyeXB0 by9vcGVuc3Nsdi5oCi0tLS0gb3BlbnNzbC0xLjAuMC1iZXRhNC9jcnlwdG8vb3BlbnNzbHYuaC52 ZXJzaW9uCTIwMDktMTEtMTIgMTU6MTc6MjguMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMC1iZXRhNC9jcnlwdG8vb3BlbnNzbHYuaAkyMDA5LTExLTEzIDEyOjM5OjA4LjAwMDAwMDAw MCArMDEwMAotQEAgLTI1LDcgKzI1LDcgQEAKLSAgKiAoUHJpb3IgdG8gMC45LjVhIGJldGExLCBh IGRpZmZlcmVudCBzY2hlbWUgd2FzIHVzZWQ6IE1NTk5GRlJCQiBmb3IKLSAgKiAgbWFqb3IgbWlu b3IgZml4IGZpbmFsIHBhdGNoL2JldGEpCi0gICovCi0tI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05f TlVNQkVSCTB4MTAwMDAwMDRMCi0rI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSCTB4MTAw MDAwMDNMCi0gI2lmZGVmIE9QRU5TU0xfRklQUwotICNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX1RF WFQJIk9wZW5TU0wgMS4wLjAtZmlwcy1iZXRhNCAxMCBOb3YgMjAwOSIKLSAjZWxzZQoKZGlmZiAt LWdpdCBhL29wZW5zc2wtMS4wLjAtYmV0YTUtY2lwaGVyLWNoYW5nZS5wYXRjaCBiL29wZW5zc2wt MS4wLjAtYmV0YTUtY2lwaGVyLWNoYW5nZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi4yZTgzNDNiCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRh NS1jaXBoZXItY2hhbmdlLnBhdGNoCkBAIC0wLDAgKzEsMjEgQEAKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAtYmV0YTUvc3NsL3NzbC5oLmNpcGhlci1jaGFuZ2Ugb3BlbnNzbC0xLjAuMC1iZXRhNS9z c2wvc3NsLmgKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1L3NzbC9zc2wuaC5jaXBoZXItY2hhbmdl CTIwMTAtMDEtMjAgMTg6MTI6MDcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1i ZXRhNS9zc2wvc3NsLmgJMjAxMC0wMS0yMCAxODoxMzowNC4wMDAwMDAwMDAgKzAxMDAKK0BAIC01 MTMsNyArNTEzLDcgQEAgdHlwZWRlZiBzdHJ1Y3Qgc3NsX3Nlc3Npb25fc3QKKyAjZGVmaW5lIFNT TF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVHCQkJMHgwMDAwMDAwMkwKKyAvKiBBbGxvdyBpbml0 aWFsIGNvbm5lY3Rpb24gdG8gc2VydmVycyB0aGF0IGRvbid0IHN1cHBvcnQgUkkgKi8KKyAjZGVm aW5lIFNTTF9PUF9MRUdBQ1lfU0VSVkVSX0NPTk5FQ1QJCQkweDAwMDAwMDA0TAorLSNkZWZpbmUg U1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHCQkweDAwMDAwMDA4TAorKyNk ZWZpbmUgU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHCQkweDAwMDAwMDA4 TCAvKiBjYW4gYnJlYWsgc29tZSBzZWN1cml0eSBleHBlY3RhdGlvbnMgKi8KKyAjZGVmaW5lIFNT TF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUcJCTB4MDAwMDAwMTBMCisgI2RlZmluZSBT U0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIJCTB4MDAwMDAwMjBMCisgI2RlZmluZSBT U0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFERElORwkJCTB4MDAwMDAwNDBMIC8qIG5vIGVmZmVjdCBz aW5jZSAwLjkuN2ggYW5kIDAuOS44YiAqLworQEAgLTUzMCw3ICs1MzAsNyBAQCB0eXBlZGVmIHN0 cnVjdCBzc2xfc2Vzc2lvbl9zdAorIAorIC8qIFNTTF9PUF9BTEw6IHZhcmlvdXMgYnVnIHdvcmth cm91bmRzIHRoYXQgc2hvdWxkIGJlIHJhdGhlciBoYXJtbGVzcy4KKyAgKiAgICAgICAgICAgICBU aGlzIHVzZWQgdG8gYmUgMHgwMDBGRkZGRkwgYmVmb3JlIDAuOS43LiAqLworLSNkZWZpbmUgU1NM X09QX0FMTAkJCQkJMHg4MDAwMEZGRkwKKysjZGVmaW5lIFNTTF9PUF9BTEwJCQkJCTB4ODAwMDBG RjdMCisgCisgLyogRFRMUyBvcHRpb25zICovCisgI2RlZmluZSBTU0xfT1BfTk9fUVVFUllfTVRV ICAgICAgICAgICAgICAgICAweDAwMDAxMDAwTAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAt YmV0YTUtZW5naW5lc2Rpci5wYXRjaCBiL29wZW5zc2wtMS4wLjAtYmV0YTUtZW5naW5lc2Rpci5w YXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTQyZDZlCi0tLSAvZGV2 L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNS1lbmdpbmVzZGlyLnBhdGNoCkBAIC0wLDAg KzEsNTIgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvQ29uZmlndXJlLmVuZ2luZXNk aXIgb3BlbnNzbC0xLjAuMC1iZXRhNS9Db25maWd1cmUKKy0tLSBvcGVuc3NsLTEuMC4wLWJldGE1 L0NvbmZpZ3VyZS5lbmdpbmVzZGlyCTIwMTAtMDEtMjAgMTg6MDc6MDUuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9Db25maWd1cmUJMjAxMC0wMS0yMCAxODoxMDo0OC4w MDAwMDAwMDAgKzAxMDAKK0BAIC02MjIsNiArNjIyLDcgQEAgbXkgJGlkeF9tdWx0aWxpYiA9ICRp ZHgrKzsKKyBteSAkcHJlZml4PSIiOworIG15ICRsaWJkaXI9IiI7CisgbXkgJG9wZW5zc2xkaXI9 IiI7CisrbXkgJGVuZ2luZXNkaXI9IiI7CisgbXkgJGV4ZV9leHQ9IiI7CisgbXkgJGluc3RhbGxf cHJlZml4PSAiJEVOVnsnSU5TVEFMTF9QUkVGSVgnfSI7CisgbXkgJGNyb3NzX2NvbXBpbGVfcHJl Zml4PSIiOworQEAgLTgzMyw2ICs4MzQsMTAgQEAgUFJPQ0VTU19BUkdTOgorIAkJCQl7CisgCQkJ CSRvcGVuc3NsZGlyPSQxOworIAkJCQl9CisrCQkJZWxzaWYgKC9eLS1lbmdpbmVzZGlyPSguKikk LykKKysJCQkJeworKwkJCQkkZW5naW5lc2Rpcj0kMTsKKysJCQkJfQorIAkJCWVsc2lmICgvXi0t aW5zdGFsbC5wcmVmaXg9KC4qKSQvKQorIAkJCQl7CisgCQkJCSRpbnN0YWxsX3ByZWZpeD0kMTsK K0BAIC0xMDUzLDcgKzEwNTgsNyBAQCBjaG9wICRwcmVmaXggaWYgJHByZWZpeCA9fiAvLlwvJC87 CisgCisgJG9wZW5zc2xkaXI9JHByZWZpeCAuICIvc3NsIiBpZiAkb3BlbnNzbGRpciBlcSAiIjsK KyAkb3BlbnNzbGRpcj0kcHJlZml4IC4gIi8iIC4gJG9wZW5zc2xkaXIgaWYgJG9wZW5zc2xkaXIg IX4gLyheXC98XlthLXpBLVpdOltcXFwvXSkvOworLQorKyRlbmdpbmVzZGlyPSIkcHJlZml4L2xp Yi9lbmdpbmVzIiBpZiAkZW5naW5lc2RpciBlcSAiIjsKKyAKKyBwcmludCAiSXNNSzFNRj0kSXNN SzFNRlxuIjsKKyAKK0BAIC0xNjczLDcgKzE2NzgsNyBAQCB3aGlsZSAoPElOPikKKyAJCX0KKyAJ ZWxzaWYJKC9eI2RlZmluZVxzK0VOR0lORVNESVIvKQorIAkJeworLQkJbXkgJGZvbyA9ICIkcHJl Zml4LyRsaWJkaXIvZW5naW5lcyI7CisrCQlteSAkZm9vID0gIiRlbmdpbmVzZGlyIjsKKyAJCSRm b28gPX4gcy9cXC9cXFxcL2c7CisgCQlwcmludCBPVVQgIiNkZWZpbmUgRU5HSU5FU0RJUiBcIiRm b29cIlxuIjsKKyAJCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvZW5naW5lcy9NYWtl ZmlsZS5lbmdpbmVzZGlyIG9wZW5zc2wtMS4wLjAtYmV0YTUvZW5naW5lcy9NYWtlZmlsZQorLS0t IG9wZW5zc2wtMS4wLjAtYmV0YTUvZW5naW5lcy9NYWtlZmlsZS5lbmdpbmVzZGlyCTIwMTAtMDEt MTYgMjE6MDY6MDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC1iZXRhNS9lbmdp bmVzL01ha2VmaWxlCTIwMTAtMDEtMjAgMTg6MDc6MDUuMDAwMDAwMDAwICswMTAwCitAQCAtMTI0 LDcgKzEyNCw3IEBAIGluc3RhbGw6CisgCQkJCXNmeD0iLnNvIjsgXAorIAkJCQljcCBjeWckJGwu ZGxsICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBm eCQkbCQkc2Z4Lm5ldzsgXAorIAkJCSAgZmk7IFwKKy0JCQkgIGNobW9kIDU1NSAkKElOU1RBTExf UFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7 IFwKKysJCQkgIGNobW9kIDc1NSAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJE SVIpL2VuZ2luZXMvJCRwZngkJGwkJHNmeC5uZXc7IFwKKyAJCQkgIG12IC1mICQoSU5TVEFMTF9Q UkVGSVgpJChJTlNUQUxMVE9QKS8kKExJQkRJUikvZW5naW5lcy8kJHBmeCQkbCQkc2Z4Lm5ldyAk KElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvJChMSUJESVIpL2VuZ2luZXMvJCRwZngkJGwk JHNmeCApOyBcCisgCQlkb25lOyBcCisgCWZpCgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMC1i ZXRhNS1pcHY2LWFwcHMucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLWJldGE1LWlwdjYtYXBwcy5wYXRj aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzA0YzAxCi0tLSAvZGV2L251 bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1iZXRhNS1pcHY2LWFwcHMucGF0Y2gKQEAgLTAsMCArMSw0 OTkgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvYXBwcy9zX2FwcHMuaC5pcHY2LWFw cHMgb3BlbnNzbC0xLjAuMC1iZXRhNS9hcHBzL3NfYXBwcy5oCistLS0gb3BlbnNzbC0xLjAuMC1i ZXRhNS9hcHBzL3NfYXBwcy5oLmlwdjYtYXBwcwkyMDEwLTAyLTAzIDA5OjQzOjQ5LjAwMDAwMDAw MCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvYXBwcy9zX2FwcHMuaAkyMDEwLTAyLTAz IDA5OjQzOjQ5LjAwMDAwMDAwMCArMDEwMAorQEAgLTE0OCw3ICsxNDgsNyBAQCB0eXBlZGVmIGZk X21hc2sgZmRfc2V0OworICNkZWZpbmUgUE9SVF9TVFIgICAgICAgICI0NDMzIgorICNkZWZpbmUg UFJPVE9DT0wgICAgICAgICJ0Y3AiCisgCistaW50IGRvX3NlcnZlcihpbnQgcG9ydCwgaW50IHR5 cGUsIGludCAqcmV0LCBpbnQgKCpjYikgKGNoYXIgKmhvc3RuYW1lLCBpbnQgcywgdW5zaWduZWQg Y2hhciAqY29udGV4dCksIHVuc2lnbmVkIGNoYXIgKmNvbnRleHQpOworK2ludCBkb19zZXJ2ZXIo Y2hhciAqcG9ydCwgaW50IHR5cGUsIGludCAqcmV0LCBpbnQgKCpjYikgKGNoYXIgKmhvc3RuYW1l LCBpbnQgcywgdW5zaWduZWQgY2hhciAqY29udGV4dCksIHVuc2lnbmVkIGNoYXIgKmNvbnRleHQp OworICNpZmRlZiBIRUFERVJfWDUwOV9ICisgaW50IE1TX0NBTExCQUNLIHZlcmlmeV9jYWxsYmFj ayhpbnQgb2ssIFg1MDlfU1RPUkVfQ1RYICpjdHgpOworICNlbmRpZgorQEAgLTE1NiwxMCArMTU2 LDkgQEAgaW50IE1TX0NBTExCQUNLIHZlcmlmeV9jYWxsYmFjayhpbnQgb2ssIAorIGludCBzZXRf Y2VydF9zdHVmZihTU0xfQ1RYICpjdHgsIGNoYXIgKmNlcnRfZmlsZSwgY2hhciAqa2V5X2ZpbGUp OworIGludCBzZXRfY2VydF9rZXlfc3R1ZmYoU1NMX0NUWCAqY3R4LCBYNTA5ICpjZXJ0LCBFVlBf UEtFWSAqa2V5KTsKKyAjZW5kaWYKKy1pbnQgaW5pdF9jbGllbnQoaW50ICpzb2NrLCBjaGFyICpz ZXJ2ZXIsIGludCBwb3J0LCBpbnQgdHlwZSk7CisraW50IGluaXRfY2xpZW50KGludCAqc29jaywg Y2hhciAqc2VydmVyLCBjaGFyICpwb3J0LCBpbnQgdHlwZSk7CisgaW50IHNob3VsZF9yZXRyeShp bnQgaSk7CistaW50IGV4dHJhY3RfcG9ydChjaGFyICpzdHIsIHNob3J0ICpwb3J0X3B0cik7Cist aW50IGV4dHJhY3RfaG9zdF9wb3J0KGNoYXIgKnN0cixjaGFyICoqaG9zdF9wdHIsdW5zaWduZWQg Y2hhciAqaXAsc2hvcnQgKnApOworK2ludCBleHRyYWN0X2hvc3RfcG9ydChjaGFyICpzdHIsY2hh ciAqKmhvc3RfcHRyLGNoYXIgKipwb3J0X3B0cik7CisgCisgbG9uZyBNU19DQUxMQkFDSyBiaW9f ZHVtcF9jYWxsYmFjayhCSU8gKmJpbywgaW50IGNtZCwgY29uc3QgY2hhciAqYXJncCwKKyAJCQkJ ICAgaW50IGFyZ2ksIGxvbmcgYXJnbCwgbG9uZyByZXQpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC1iZXRhNS9hcHBzL3NfY2xpZW50LmMuaXB2Ni1hcHBzIG9wZW5zc2wtMS4wLjAtYmV0YTUvYXBw cy9zX2NsaWVudC5jCistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9hcHBzL3NfY2xpZW50LmMuaXB2 Ni1hcHBzCTIwMTAtMDItMDMgMDk6NDM6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMC1iZXRhNS9hcHBzL3NfY2xpZW50LmMJMjAxMC0wMi0wMyAwOTo0Mzo0OS4wMDAwMDAwMDAg KzAxMDAKK0BAIC0zODksNyArMzg5LDcgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQorIAlpbnQgY2J1Zl9sZW4sY2J1Zl9vZmY7CisgCWludCBzYnVmX2xlbixzYnVmX29mZjsKKyAJ ZmRfc2V0IHJlYWRmZHMsd3JpdGVmZHM7CistCXNob3J0IHBvcnQ9UE9SVDsKKysJY2hhciAqcG9y dF9zdHIgPSBQT1JUX1NUUjsKKyAJaW50IGZ1bGxfbG9nPTE7CisgCWNoYXIgKmhvc3Q9U1NMX0hP U1RfTkFNRTsKKyAJY2hhciAqY2VydF9maWxlPU5VTEwsKmtleV9maWxlPU5VTEw7CitAQCAtNDg4 LDEzICs0ODgsMTIgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAkJZWxzZSBp Zgkoc3RyY21wKCphcmd2LCItcG9ydCIpID09IDApCisgCQkJeworIAkJCWlmICgtLWFyZ2MgPCAx KSBnb3RvIGJhZDsKKy0JCQlwb3J0PWF0b2koKigrK2FyZ3YpKTsKKy0JCQlpZiAocG9ydCA9PSAw KSBnb3RvIGJhZDsKKysJCQlwb3J0X3N0cj0gKigrK2FyZ3YpOworIAkJCX0KKyAJCWVsc2UgaWYg KHN0cmNtcCgqYXJndiwiLWNvbm5lY3QiKSA9PSAwKQorIAkJCXsKKyAJCQlpZiAoLS1hcmdjIDwg MSkgZ290byBiYWQ7CistCQkJaWYgKCFleHRyYWN0X2hvc3RfcG9ydCgqKCsrYXJndiksJmhvc3Qs TlVMTCwmcG9ydCkpCisrCQkJaWYgKCFleHRyYWN0X2hvc3RfcG9ydCgqKCsrYXJndiksJmhvc3Qs JnBvcnRfc3RyKSkKKyAJCQkJZ290byBiYWQ7CisgCQkJfQorIAkJZWxzZSBpZgkoc3RyY21wKCph cmd2LCItdmVyaWZ5IikgPT0gMCkKK0BAIC05NjcsNyArOTY2LDcgQEAgYmFkOgorIAorIHJlX3N0 YXJ0OgorIAorLQlpZiAoaW5pdF9jbGllbnQoJnMsaG9zdCxwb3J0LHNvY2tldF90eXBlKSA9PSAw KQorKwlpZiAoaW5pdF9jbGllbnQoJnMsaG9zdCxwb3J0X3N0cixzb2NrZXRfdHlwZSkgPT0gMCkK KyAJCXsKKyAJCUJJT19wcmludGYoYmlvX2VyciwiY29ubmVjdDplcnJubz0lZFxuIixnZXRfbGFz dF9zb2NrZXRfZXJyb3IoKSk7CisgCQlTSFVURE9XTihzKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjAtYmV0YTUvYXBwcy9zX3NlcnZlci5jLmlwdjYtYXBwcyBvcGVuc3NsLTEuMC4wLWJldGE1L2Fw cHMvc19zZXJ2ZXIuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUvYXBwcy9zX3NlcnZlci5jLmlw djYtYXBwcwkyMDEwLTAyLTAzIDA5OjQzOjQ5LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wt MS4wLjAtYmV0YTUvYXBwcy9zX3NlcnZlci5jCTIwMTAtMDItMDMgMDk6NDM6NDkuMDAwMDAwMDAw ICswMTAwCitAQCAtODM4LDcgKzgzOCw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICphcmd2 W10pCisgCXsKKyAJWDUwOV9WRVJJRllfUEFSQU0gKnZwbSA9IE5VTEw7CisgCWludCBiYWRhcmcg PSAwOworLQlzaG9ydCBwb3J0PVBPUlQ7CisrCWNoYXIgKnBvcnRfc3RyID0gUE9SVF9TVFI7Cisg CWNoYXIgKkNBcGF0aD1OVUxMLCpDQWZpbGU9TlVMTDsKKyAJdW5zaWduZWQgY2hhciAqY29udGV4 dCA9IE5VTEw7CisgCWNoYXIgKmRoZmlsZSA9IE5VTEw7CitAQCAtOTA5LDggKzkwOSw3IEBAIGlu dCBNQUlOKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCQkJIChzdHJjbXAoKmFyZ3YsIi1hY2Nl cHQiKSA9PSAwKSkKKyAJCQl7CisgCQkJaWYgKC0tYXJnYyA8IDEpIGdvdG8gYmFkOworLQkJCWlm ICghZXh0cmFjdF9wb3J0KCooKythcmd2KSwmcG9ydCkpCistCQkJCWdvdG8gYmFkOworKwkJCXBv cnRfc3RyPSAqKCsrYXJndik7CisgCQkJfQorIAkJZWxzZSBpZgkoc3RyY21wKCphcmd2LCItdmVy aWZ5IikgPT0gMCkKKyAJCQl7CitAQCAtMTcwMCw5ICsxNjk5LDkgQEAgYmFkOgorIAlCSU9fcHJp bnRmKGJpb19zX291dCwiQUNDRVBUXG4iKTsKKyAJKHZvaWQpQklPX2ZsdXNoKGJpb19zX291dCk7 CisgCWlmICh3d3cpCistCQlkb19zZXJ2ZXIocG9ydCxzb2NrZXRfdHlwZSwmYWNjZXB0X3NvY2tl dCx3d3dfYm9keSwgY29udGV4dCk7CisrCQlkb19zZXJ2ZXIocG9ydF9zdHIsc29ja2V0X3R5cGUs JmFjY2VwdF9zb2NrZXQsd3d3X2JvZHksIGNvbnRleHQpOworIAllbHNlCistCQlkb19zZXJ2ZXIo cG9ydCxzb2NrZXRfdHlwZSwmYWNjZXB0X3NvY2tldCxzdl9ib2R5LCBjb250ZXh0KTsKKysJCWRv X3NlcnZlcihwb3J0X3N0cixzb2NrZXRfdHlwZSwmYWNjZXB0X3NvY2tldCxzdl9ib2R5LCBjb250 ZXh0KTsKKyAJcHJpbnRfc3RhdHMoYmlvX3Nfb3V0LGN0eCk7CisgCXJldD0wOworIGVuZDoKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjAtYmV0YTUvYXBwcy9zX3NvY2tldC5jLmlwdjYtYXBwcyBvcGVu c3NsLTEuMC4wLWJldGE1L2FwcHMvc19zb2NrZXQuYworLS0tIG9wZW5zc2wtMS4wLjAtYmV0YTUv YXBwcy9zX3NvY2tldC5jLmlwdjYtYXBwcwkyMDA5LTA4LTI2IDEzOjIxOjUwLjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvYXBwcy9zX3NvY2tldC5jCTIwMTAtMDItMDMg MTA6MDA6MzAuMDAwMDAwMDAwICswMTAwCitAQCAtMTAyLDkgKzEwMiw3IEBAIHN0YXRpYyBzdHJ1 Y3QgaG9zdGVudCAqR2V0SG9zdEJ5TmFtZShjaGEKKyBzdGF0aWMgdm9pZCBzc2xfc29ja19jbGVh bnVwKHZvaWQpOworICNlbmRpZgorIHN0YXRpYyBpbnQgc3NsX3NvY2tfaW5pdCh2b2lkKTsKKy1z dGF0aWMgaW50IGluaXRfY2xpZW50X2lwKGludCAqc29jayx1bnNpZ25lZCBjaGFyIGlwWzRdLCBp bnQgcG9ydCwgaW50IHR5cGUpOworLXN0YXRpYyBpbnQgaW5pdF9zZXJ2ZXIoaW50ICpzb2NrLCBp bnQgcG9ydCwgaW50IHR5cGUpOworLXN0YXRpYyBpbnQgaW5pdF9zZXJ2ZXJfbG9uZyhpbnQgKnNv Y2ssIGludCBwb3J0LGNoYXIgKmlwLCBpbnQgdHlwZSk7Cisrc3RhdGljIGludCBpbml0X3NlcnZl cihpbnQgKnNvY2ssIGNoYXIgKnBvcnQsIGludCB0eXBlKTsKKyBzdGF0aWMgaW50IGRvX2FjY2Vw dChpbnQgYWNjX3NvY2ssIGludCAqc29jaywgY2hhciAqKmhvc3QpOworIHN0YXRpYyBpbnQgaG9z dF9pcChjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgaXBbNF0pOworIAorQEAgLTIzNCw1OCArMjMy LDcwIEBAIHN0YXRpYyBpbnQgc3NsX3NvY2tfaW5pdCh2b2lkKQorIAlyZXR1cm4oMSk7CisgCX0K KyAKKy1pbnQgaW5pdF9jbGllbnQoaW50ICpzb2NrLCBjaGFyICpob3N0LCBpbnQgcG9ydCwgaW50 IHR5cGUpCisraW50IGluaXRfY2xpZW50KGludCAqc29jaywgY2hhciAqaG9zdCwgY2hhciAqcG9y dCwgaW50IHR5cGUpCisgCXsKKy0JdW5zaWduZWQgY2hhciBpcFs0XTsKKy0KKy0JaWYgKCFob3N0 X2lwKGhvc3QsJihpcFswXSkpKQorLQkJeworLQkJcmV0dXJuKDApOworLQkJfQorLQlyZXR1cm4o aW5pdF9jbGllbnRfaXAoc29jayxpcCxwb3J0LHR5cGUpKTsKKy0JfQorLQorLXN0YXRpYyBpbnQg aW5pdF9jbGllbnRfaXAoaW50ICpzb2NrLCB1bnNpZ25lZCBjaGFyIGlwWzRdLCBpbnQgcG9ydCwg aW50IHR5cGUpCistCXsKKy0JdW5zaWduZWQgbG9uZyBhZGRyOworLQlzdHJ1Y3Qgc29ja2FkZHJf aW4gdGhlbTsKKy0JaW50IHMsaTsKKysJc3RydWN0IGFkZHJpbmZvICpyZXMsICpyZXMwLCBoaW50 czsKKysJY2hhciAqIGZhaWxlZF9jYWxsID0gTlVMTDsKKysJaW50IHM7CisrCWludCBlOworIAor IAlpZiAoIXNzbF9zb2NrX2luaXQoKSkgcmV0dXJuKDApOworIAorLQltZW1zZXQoKGNoYXIgKikm dGhlbSwwLHNpemVvZih0aGVtKSk7CistCXRoZW0uc2luX2ZhbWlseT1BRl9JTkVUOworLQl0aGVt LnNpbl9wb3J0PWh0b25zKCh1bnNpZ25lZCBzaG9ydClwb3J0KTsKKy0JYWRkcj0odW5zaWduZWQg bG9uZykKKy0JCSgodW5zaWduZWQgbG9uZylpcFswXTw8MjRMKXwKKy0JCSgodW5zaWduZWQgbG9u ZylpcFsxXTw8MTZMKXwKKy0JCSgodW5zaWduZWQgbG9uZylpcFsyXTw8IDhMKXwKKy0JCSgodW5z aWduZWQgbG9uZylpcFszXSk7CistCXRoZW0uc2luX2FkZHIuc19hZGRyPWh0b25sKGFkZHIpOwor LQorLQlpZiAodHlwZSA9PSBTT0NLX1NUUkVBTSkKKy0JCXM9c29ja2V0KEFGX0lORVQsU09DS19T VFJFQU0sU09DS0VUX1BST1RPQ09MKTsKKy0JZWxzZSAvKiAoIHR5cGUgPT0gU09DS19ER1JBTSkg Ki8KKy0JCXM9c29ja2V0KEFGX0lORVQsU09DS19ER1JBTSxJUFBST1RPX1VEUCk7CistCQkJCist CWlmIChzID09IElOVkFMSURfU09DS0VUKSB7IHBlcnJvcigic29ja2V0Iik7IHJldHVybigwKTsg fQorKwltZW1zZXQoJmhpbnRzLCAnXDAnLCBzaXplb2YoaGludHMpKTsKKysJaGludHMuYWlfc29j a3R5cGUgPSB0eXBlOworKwloaW50cy5haV9mbGFncyA9IEFJX0FERFJDT05GSUc7CisrCisrCWUg PSBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAmaGludHMsICZyZXMpOworKwlpZiAoZSkKKysJewor KwkJZnByaW50ZihzdGRlcnIsICJnZXRhZGRyaW5mbzogJXNcbiIsIGdhaV9zdHJlcnJvcihlKSk7 CisrCQlpZiAoZSA9PSBFQUlfU1lTVEVNKQorKwkJCXBlcnJvcigiZ2V0YWRkcmluZm8iKTsKKysJ CXJldHVybiAoMCk7CisrCQl9CisgCisrCXJlczAgPSByZXM7CisrCXdoaWxlIChyZXMpCisrCQl7 CisrCQlzID0gc29ja2V0KHJlcy0+YWlfZmFtaWx5LCByZXMtPmFpX3NvY2t0eXBlLCByZXMtPmFp X3Byb3RvY29sKTsKKysJCWlmIChzID09IElOVkFMSURfU09DS0VUKQorKwkJCXsKKysJCQlmYWls ZWRfY2FsbCA9ICJzb2NrZXQiOworKwkJCWdvdG8gbmV4dHJlczsKKysJCQl9CisgI2lmIGRlZmlu ZWQoU09fS0VFUEFMSVZFKSAmJiAhZGVmaW5lZChPUEVOU1NMX1NZU19NUEUpCisgCWlmICh0eXBl ID09IFNPQ0tfU1RSRUFNKQorIAkJeworLQkJaT0wOworLQkJaT1zZXRzb2Nrb3B0KHMsU09MX1NP Q0tFVCxTT19LRUVQQUxJVkUsKGNoYXIgKikmaSxzaXplb2YoaSkpOworLQkJaWYgKGkgPCAwKSB7 IHBlcnJvcigia2VlcGFsaXZlIik7IHJldHVybigwKTsgfQorKwkJCWludCBpPTA7CisrCQkJaT1z ZXRzb2Nrb3B0KHMsU09MX1NPQ0tFVCxTT19LRUVQQUxJVkUsCisrCQkJCShjaGFyICopJmksc2l6 ZW9mKGkpKTsKKysJCQlpZiAoaSA8IDApIHsKKysJCQkJZmFpbGVkX2NhbGwgPSAia2VlcGFsaXZl IjsKKysJCQkJZ290byBuZXh0cmVzOworKwkJCQl9CisgCQl9CisgI2VuZGlmCistCistCWlmIChj b25uZWN0KHMsKHN0cnVjdCBzb2NrYWRkciAqKSZ0aGVtLHNpemVvZih0aGVtKSkgPT0gLTEpCist CQl7IGNsb3Nlc29ja2V0KHMpOyBwZXJyb3IoImNvbm5lY3QiKTsgcmV0dXJuKDApOyB9CisrCQlp ZiAoY29ubmVjdChzLChzdHJ1Y3Qgc29ja2FkZHIgKilyZXMtPmFpX2FkZHIsCisrCQkJcmVzLT5h aV9hZGRybGVuKSA9PSAwKQorKwkJCXsKKysJCQlmcmVlYWRkcmluZm8ocmVzMCk7CisgCSpzb2Nr PXM7CisgCXJldHVybigxKTsKKyAJfQorIAorLWludCBkb19zZXJ2ZXIoaW50IHBvcnQsIGludCB0 eXBlLCBpbnQgKnJldCwgaW50ICgqY2IpKGNoYXIgKmhvc3RuYW1lLCBpbnQgcywgdW5zaWduZWQg Y2hhciAqY29udGV4dCksIHVuc2lnbmVkIGNoYXIgKmNvbnRleHQpCisrCQlmYWlsZWRfY2FsbCA9 ICJzb2NrZXQiOworK25leHRyZXM6CisrCQlpZiAocyAhPSBJTlZBTElEX1NPQ0tFVCkKKysJCQlj bG9zZShzKTsKKysJCXJlcyA9IHJlcy0+YWlfbmV4dDsKKysJCX0KKysJZnJlZWFkZHJpbmZvKHJl czApOworKworKwlwZXJyb3IoZmFpbGVkX2NhbGwpOworKwlyZXR1cm4oMCk7CisrCX0KKysKKytp bnQgZG9fc2VydmVyKGNoYXIgKnBvcnQsIGludCB0eXBlLCBpbnQgKnJldCwgaW50ICgqY2IpKGNo YXIgKmhvc3RuYW1lLCBpbnQgcywgdW5zaWduZWQgY2hhciAqY29udGV4dCksIHVuc2lnbmVkIGNo YXIgKmNvbnRleHQpCisgCXsKKyAJaW50IHNvY2s7CisgCWNoYXIgKm5hbWUgPSBOVUxMOworQEAg LTMyMywzMyArMzMzLDM4IEBAIGludCBkb19zZXJ2ZXIoaW50IHBvcnQsIGludCB0eXBlLCBpbnQg KnIKKyAJCX0KKyAJfQorIAorLXN0YXRpYyBpbnQgaW5pdF9zZXJ2ZXJfbG9uZyhpbnQgKnNvY2ss IGludCBwb3J0LCBjaGFyICppcCwgaW50IHR5cGUpCisrc3RhdGljIGludCBpbml0X3NlcnZlcihp bnQgKnNvY2ssIGNoYXIgKnBvcnQsIGludCB0eXBlKQorIAl7CistCWludCByZXQ9MDsKKy0Jc3Ry dWN0IHNvY2thZGRyX2luIHNlcnZlcjsKKy0JaW50IHM9IC0xLGk7CisrCXN0cnVjdCBhZGRyaW5m byAqcmVzLCAqcmVzMCwgaGludHM7CisrCWNoYXIgKiBmYWlsZWRfY2FsbCA9IE5VTEw7CisrCWNo YXIgcG9ydF9uYW1lWzhdOworKwlpbnQgczsKKysJaW50IGU7CisgCisgCWlmICghc3NsX3NvY2tf aW5pdCgpKSByZXR1cm4oMCk7CisgCistCW1lbXNldCgoY2hhciAqKSZzZXJ2ZXIsMCxzaXplb2Yo c2VydmVyKSk7CistCXNlcnZlci5zaW5fZmFtaWx5PUFGX0lORVQ7CistCXNlcnZlci5zaW5fcG9y dD1odG9ucygodW5zaWduZWQgc2hvcnQpcG9ydCk7CistCWlmIChpcCA9PSBOVUxMKQorLQkJc2Vy dmVyLnNpbl9hZGRyLnNfYWRkcj1JTkFERFJfQU5ZOworLQllbHNlCistLyogQWRkZWQgZm9yIFQz RSwgYWRkcmVzcy1vZiBmYWlscyBvbiBiaXQgZmllbGQgKGJlY2ttYW5AYWNsLmxhbmwuZ292KSAq LworLSNpZm5kZWYgQklUX0ZJRUxEX0xJTUlUUworLQkJbWVtY3B5KCZzZXJ2ZXIuc2luX2FkZHIu c19hZGRyLGlwLDQpOworLSNlbHNlCistCQltZW1jcHkoJnNlcnZlci5zaW5fYWRkcixpcCw0KTsK Ky0jZW5kaWYKKysJbWVtc2V0KCZoaW50cywgJ1wwJywgc2l6ZW9mKGhpbnRzKSk7CisrCWhpbnRz LmFpX3NvY2t0eXBlID0gdHlwZTsKKysJaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFIHwgQUlf QUREUkNPTkZJRzsKKyAJCistCQlpZiAodHlwZSA9PSBTT0NLX1NUUkVBTSkKKy0JCQlzPXNvY2tl dChBRl9JTkVULFNPQ0tfU1RSRUFNLFNPQ0tFVF9QUk9UT0NPTCk7CistCQllbHNlIC8qIHR5cGUg PT0gU09DS19ER1JBTSAqLworLQkJCXM9c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sSVBQUk9U T19VRFApOworKwllID0gZ2V0YWRkcmluZm8oTlVMTCwgcG9ydCwgJmhpbnRzLCAmcmVzKTsKKysJ aWYgKGUpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgImdldGFkZHJpbmZvOiAlc1xuIiwgZ2Fp X3N0cmVycm9yKGUpKTsKKysJCWlmIChlID09IEVBSV9TWVNURU0pCisrCQkJcGVycm9yKCJnZXRh ZGRyaW5mbyIpOworKwkJcmV0dXJuICgwKTsKKysJCX0KKyAKKy0JaWYgKHMgPT0gSU5WQUxJRF9T T0NLRVQpIGdvdG8gZXJyOworKwlyZXMwID0gcmVzOworKwl3aGlsZSAocmVzKQorKwkJeworKwkJ cyA9IHNvY2tldChyZXMtPmFpX2ZhbWlseSwgcmVzLT5haV9zb2NrdHlwZSwgcmVzLT5haV9wcm90 b2NvbCk7CisrCQlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkKKysJCQl7CisrCQkJZmFpbGVkX2Nh bGwgPSAic29ja2V0IjsKKysJCQlnb3RvIG5leHRyZXM7CisrCQkJfQorICNpZiBkZWZpbmVkIFNP TF9TT0NLRVQgJiYgZGVmaW5lZCBTT19SRVVTRUFERFIKKyAJCXsKKyAJCWludCBqID0gMTsKK0BA IC0zNTcsMzYgKzM3MiwzOSBAQCBzdGF0aWMgaW50IGluaXRfc2VydmVyX2xvbmcoaW50ICpzb2Nr LCBpCisgCQkJICAgKHZvaWQgKikgJmosIHNpemVvZiBqKTsKKyAJCX0KKyAjZW5kaWYKKy0JaWYg KGJpbmQocywoc3RydWN0IHNvY2thZGRyICopJnNlcnZlcixzaXplb2Yoc2VydmVyKSkgPT0gLTEp CisrCisrCQlpZiAoYmluZChzLChzdHJ1Y3Qgc29ja2FkZHIgKilyZXMtPmFpX2FkZHIsIHJlcy0+ YWlfYWRkcmxlbikgPT0gLTEpCisgCQl7CistI2lmbmRlZiBPUEVOU1NMX1NZU19XSU5ET1dTCist CQlwZXJyb3IoImJpbmQiKTsKKy0jZW5kaWYKKy0JCWdvdG8gZXJyOworKwkJCWZhaWxlZF9jYWxs ID0gImJpbmQiOworKwkJCWdvdG8gbmV4dHJlczsKKyAJCX0KKy0JLyogTWFrZSBpdCAxMjggZm9y IGxpbnV4ICovCistCWlmICh0eXBlPT1TT0NLX1NUUkVBTSAmJiBsaXN0ZW4ocywxMjgpID09IC0x KSBnb3RvIGVycjsKKy0JaT0wOworLQkqc29jaz1zOworLQlyZXQ9MTsKKy1lcnI6CistCWlmICgo cmV0ID09IDApICYmIChzICE9IC0xKSkKKysJCWlmICh0eXBlPT1TT0NLX1NUUkVBTSAmJiBsaXN0 ZW4ocywxMjgpID09IC0xKQorIAkJeworLQkJU0hVVERPV04ocyk7CisrCQkJZmFpbGVkX2NhbGwg PSAibGlzdGVuIjsKKysJCQlnb3RvIG5leHRyZXM7CisgCQl9CistCXJldHVybihyZXQpOworKwor KwkJKnNvY2s9czsKKysJCXJldHVybigxKTsKKysKKytuZXh0cmVzOgorKwkJaWYgKHMgIT0gSU5W QUxJRF9TT0NLRVQpCisrCQkJY2xvc2Uocyk7CisrCQlyZXMgPSByZXMtPmFpX25leHQ7CisgCX0K KysJZnJlZWFkZHJpbmZvKHJlczApOworIAorLXN0YXRpYyBpbnQgaW5pdF9zZXJ2ZXIoaW50ICpz b2NrLCBpbnQgcG9ydCwgaW50IHR5cGUpCistCXsKKy0JcmV0dXJuKGluaXRfc2VydmVyX2xvbmco c29jaywgcG9ydCwgTlVMTCwgdHlwZSkpOworKwlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkgeyBw ZXJyb3IoInNvY2tldCIpOyByZXR1cm4oMCk7IH0KKysKKysJcGVycm9yKGZhaWxlZF9jYWxsKTsK KysJcmV0dXJuKDApOworIAl9CisgCisgc3RhdGljIGludCBkb19hY2NlcHQoaW50IGFjY19zb2Nr LCBpbnQgKnNvY2ssIGNoYXIgKipob3N0KQorIAl7CistCWludCByZXQsaTsKKy0Jc3RydWN0IGhv c3RlbnQgKmgxLCpoMjsKKy0Jc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBmcm9tOworKwlzdGF0 aWMgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgZnJvbTsKKysJY2hhciBidWZmZXJbTklfTUFYSE9T VF07CisrCWludCByZXQ7CisgCWludCBsZW47CisgLyoJc3RydWN0IGxpbmdlciBsaW5nOyAqLwor IAorQEAgLTQzMiwxMzYgKzQ1MCw1OCBAQCByZWRvaXQ6CisgKi8KKyAKKyAJaWYgKGhvc3QgPT0g TlVMTCkgZ290byBlbmQ7CistI2lmbmRlZiBCSVRfRklFTERfTElNSVRTCistCS8qIEkgc2hvdWxk IHVzZSBXU0FBc3luY0dldEhvc3RCeU5hbWUoKSB1bmRlciB3aW5kb3dzICovCistCWgxPWdldGhv c3RieWFkZHIoKGNoYXIgKikmZnJvbS5zaW5fYWRkci5zX2FkZHIsCistCQlzaXplb2YoZnJvbS5z aW5fYWRkci5zX2FkZHIpLEFGX0lORVQpOworLSNlbHNlCistCWgxPWdldGhvc3RieWFkZHIoKGNo YXIgKikmZnJvbS5zaW5fYWRkciwKKy0JCXNpemVvZihzdHJ1Y3QgaW5fYWRkciksQUZfSU5FVCk7 CistI2VuZGlmCistCWlmIChoMSA9PSBOVUxMKQorKworKwlpZiAoZ2V0bmFtZWluZm8oKHN0cnVj dCBzb2NrYWRkciAqKSZmcm9tLCBzaXplb2YoZnJvbSksCisrCQlidWZmZXIsIHNpemVvZihidWZm ZXIpLAorKwkJTlVMTCwgMCwgMCkpCisgCQl7CistCQlCSU9fcHJpbnRmKGJpb19lcnIsImJhZCBn ZXRob3N0YnlhZGRyXG4iKTsKKysJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0bmFtZWluZm8gZmFp bGVkXG4iKTsKKyAJCSpob3N0PU5VTEw7CisgCQkvKiByZXR1cm4oMCk7ICovCisgCQl9CisgCWVs c2UKKyAJCXsKKy0JCWlmICgoKmhvc3Q9KGNoYXIgKilPUEVOU1NMX21hbGxvYyhzdHJsZW4oaDEt PmhfbmFtZSkrMSkpID09IE5VTEwpCisrCQlpZiAoKCpob3N0PShjaGFyICopT1BFTlNTTF9tYWxs b2Moc3RybGVuKGJ1ZmZlcikrMSkpID09IE5VTEwpCisgCQkJeworIAkJCXBlcnJvcigiT1BFTlNT TF9tYWxsb2MiKTsKKyAJCQlyZXR1cm4oMCk7CisgCQkJfQorLQkJQlVGX3N0cmxjcHkoKmhvc3Qs aDEtPmhfbmFtZSxzdHJsZW4oaDEtPmhfbmFtZSkrMSk7CistCistCQloMj1HZXRIb3N0QnlOYW1l KCpob3N0KTsKKy0JCWlmIChoMiA9PSBOVUxMKQorLQkJCXsKKy0JCQlCSU9fcHJpbnRmKGJpb19l cnIsImdldGhvc3RieW5hbWUgZmFpbHVyZVxuIik7CistCQkJcmV0dXJuKDApOworLQkJCX0KKy0J CWk9MDsKKy0JCWlmIChoMi0+aF9hZGRydHlwZSAhPSBBRl9JTkVUKQorLQkJCXsKKy0JCQlCSU9f cHJpbnRmKGJpb19lcnIsImdldGhvc3RieW5hbWUgYWRkciBpcyBub3QgQUZfSU5FVFxuIik7Cist CQkJcmV0dXJuKDApOworLQkJCX0KKysJCXN0cmNweSgqaG9zdCwgYnVmZmVyKTsKKyAJCX0KKyBl bmQ6CisgCSpzb2NrPXJldDsKKyAJcmV0dXJuKDEpOworIAl9CisgCistaW50IGV4dHJhY3RfaG9z dF9wb3J0KGNoYXIgKnN0ciwgY2hhciAqKmhvc3RfcHRyLCB1bnNpZ25lZCBjaGFyICppcCwKKy0J ICAgICBzaG9ydCAqcG9ydF9wdHIpCisraW50IGV4dHJhY3RfaG9zdF9wb3J0KGNoYXIgKnN0ciwg Y2hhciAqKmhvc3RfcHRyLCAKKysJICAgICBjaGFyICoqcG9ydF9wdHIpCisgCXsKKy0JY2hhciAq aCwqcDsKKysJY2hhciAqaCwqcCwqeDsKKyAKKy0JaD1zdHI7CistCXA9c3RyY2hyKHN0ciwnOicp OworKwl4PWg9c3RyOworKwlpZiAoKmggPT0gJ1snKQorKwkJeworKwkJaCsrOworKwkJcD1zdHJj aHIoaCwnXScpOworIAlpZiAocCA9PSBOVUxMKQorIAkJeworLQkJQklPX3ByaW50ZihiaW9fZXJy LCJubyBwb3J0IGRlZmluZWRcbiIpOworKwkJCUJJT19wcmludGYoYmlvX2Vyciwibm8gZW5kaW5n IGJyYWNrZXQgZm9yIElQdjYgYWRkcmVzc1xuIik7CisgCQlyZXR1cm4oMCk7CisgCQl9CisgCSoo cCsrKT0nXDAnOworLQorLQlpZiAoKGlwICE9IE5VTEwpICYmICFob3N0X2lwKHN0cixpcCkpCist CQlnb3RvIGVycjsKKy0JaWYgKGhvc3RfcHRyICE9IE5VTEwpICpob3N0X3B0cj1oOworLQorLQlp ZiAoIWV4dHJhY3RfcG9ydChwLHBvcnRfcHRyKSkKKy0JCWdvdG8gZXJyOworLQlyZXR1cm4oMSk7 CistZXJyOgorLQlyZXR1cm4oMCk7CisrCQl4ID0gcDsKKyAJfQorLQorLXN0YXRpYyBpbnQgaG9z dF9pcChjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgaXBbNF0pCistCXsKKy0JdW5zaWduZWQgaW50 IGluWzRdOyAKKy0JaW50IGk7CistCistCWlmIChzc2NhbmYoc3RyLCIldS4ldS4ldS4ldSIsJihp blswXSksJihpblsxXSksJihpblsyXSksJihpblszXSkpID09IDQpCistCQl7CistCQlmb3IgKGk9 MDsgaTw0OyBpKyspCistCQkJaWYgKGluW2ldID4gMjU1KQorLQkJCQl7CistCQkJCUJJT19wcmlu dGYoYmlvX2VyciwiaW52YWxpZCBJUCBhZGRyZXNzXG4iKTsKKy0JCQkJZ290byBlcnI7CistCQkJ CX0KKy0JCWlwWzBdPWluWzBdOworLQkJaXBbMV09aW5bMV07CistCQlpcFsyXT1pblsyXTsKKy0J CWlwWzNdPWluWzNdOworLQkJfQorLQllbHNlCistCQl7IC8qIGRvIGEgZ2V0aG9zdGJ5bmFtZSAq LworLQkJc3RydWN0IGhvc3RlbnQgKmhlOworLQorLQkJaWYgKCFzc2xfc29ja19pbml0KCkpIHJl dHVybigwKTsKKy0KKy0JCWhlPUdldEhvc3RCeU5hbWUoc3RyKTsKKy0JCWlmIChoZSA9PSBOVUxM KQorLQkJCXsKKy0JCQlCSU9fcHJpbnRmKGJpb19lcnIsImdldGhvc3RieW5hbWUgZmFpbHVyZVxu Iik7CistCQkJZ290byBlcnI7CistCQkJfQorLQkJLyogY2FzdCB0byBzaG9ydCBiZWNhdXNlIG9m IHdpbjE2IHdpbnNvY2sgZGVmaW5pdGlvbiAqLworLQkJaWYgKChzaG9ydCloZS0+aF9hZGRydHlw ZSAhPSBBRl9JTkVUKQorKwlwPXN0cmNocih4LCc6Jyk7CisrCWlmIChwID09IE5VTEwpCisgCQkJ eworLQkJCUJJT19wcmludGYoYmlvX2VyciwiZ2V0aG9zdGJ5bmFtZSBhZGRyIGlzIG5vdCBBRl9J TkVUXG4iKTsKKy0JCQlyZXR1cm4oMCk7CistCQkJfQorLQkJaXBbMF09aGUtPmhfYWRkcl9saXN0 WzBdWzBdOworLQkJaXBbMV09aGUtPmhfYWRkcl9saXN0WzBdWzFdOworLQkJaXBbMl09aGUtPmhf YWRkcl9saXN0WzBdWzJdOworLQkJaXBbM109aGUtPmhfYWRkcl9saXN0WzBdWzNdOworLQkJfQor LQlyZXR1cm4oMSk7CistZXJyOgorKwkJQklPX3ByaW50ZihiaW9fZXJyLCJubyBwb3J0IGRlZmlu ZWRcbiIpOworIAlyZXR1cm4oMCk7CisgCX0KKysJKihwKyspPSdcMCc7CisgCistaW50IGV4dHJh Y3RfcG9ydChjaGFyICpzdHIsIHNob3J0ICpwb3J0X3B0cikKKy0JeworLQlpbnQgaTsKKy0Jc3Ry dWN0IHNlcnZlbnQgKnM7CisrCWlmIChob3N0X3B0ciAhPSBOVUxMKSAqaG9zdF9wdHI9aDsKKysJ aWYgKHBvcnRfcHRyICE9IE5VTEwpICpwb3J0X3B0cj1wOworIAorLQlpPWF0b2koc3RyKTsKKy0J aWYgKGkgIT0gMCkKKy0JCSpwb3J0X3B0cj0odW5zaWduZWQgc2hvcnQpaTsKKy0JZWxzZQorLQkJ eworLQkJcz1nZXRzZXJ2YnluYW1lKHN0ciwidGNwIik7CistCQlpZiAocyA9PSBOVUxMKQorLQkJ CXsKKy0JCQlCSU9fcHJpbnRmKGJpb19lcnIsImdldHNlcnZieW5hbWUgZmFpbHVyZSBmb3IgJXNc biIsc3RyKTsKKy0JCQlyZXR1cm4oMCk7CistCQkJfQorLQkJKnBvcnRfcHRyPW50b2hzKCh1bnNp Z25lZCBzaG9ydClzLT5zX3BvcnQpOworLQkJfQorIAlyZXR1cm4oMSk7CisgCX0KKyAKCmRpZmYg LS1naXQgYS9vcGVuc3NsLTEuMC4wLWJldGE1LXJlYWRtZS13YXJuaW5nLnBhdGNoIGIvb3BlbnNz bC0xLjAuMC1iZXRhNS1yZWFkbWUtd2FybmluZy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4wZDg5NzIwCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1i ZXRhNS1yZWFkbWUtd2FybmluZy5wYXRjaApAQCAtMCwwICsxLDM5IEBACitkaWZmIC11cCBvcGVu c3NsLTEuMC4wLWJldGE1L1JFQURNRS53YXJuaW5nIG9wZW5zc2wtMS4wLjAtYmV0YTUvUkVBRE1F CistLS0gb3BlbnNzbC0xLjAuMC1iZXRhNS9SRUFETUUud2FybmluZwkyMDEwLTAxLTIwIDE2OjAw OjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAtYmV0YTUvUkVBRE1FCTIwMTAt MDEtMjEgMDk6MDY6MTEuMDAwMDAwMDAwICswMTAwCitAQCAtNSw2ICs1LDM1IEBACisgIENvcHly aWdodCAoYykgMTk5NS0xOTk4IEVyaWMgQS4gWW91bmcsIFRpbSBKLiBIdWRzb24KKyAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAKKysgV0FSTklORworKyAtLS0tLS0tCisrCisrIFRoaXMgdmVyc2lv biBvZiBPcGVuU1NMIGlzIGJ1aWx0IGluIGEgd2F5IHRoYXQgc3VwcG9ydHMgb3BlcmF0aW9uIGlu CisrIHRoZSBzbyBjYWxsZWQgRklQUyBtb2RlLiBOb3RlIHRob3VnaCB0aGF0IHRoZSBsaWJyYXJ5 IGFzIHdlIGJ1aWxkIGl0CisrIGlzIG5vdCBGSVBTIHZhbGlkYXRlZCBhbmQgdGhlIEZJUFMgbW9k ZSBpcyBwcmVzZW50IGZvciB0ZXN0aW5nIHB1cnBvc2VzCisrIG9ubHkuCisrIAorKyBUaGlzIHZl cnNpb24gYWxzbyBjb250YWlucyBhIGZldyBkaWZmZXJlbmNlcyBmcm9tIHRoZSB1cHN0cmVhbSBj b2RlCisrIHNvbWUgb2Ygd2hpY2ggYXJlOgorKyAgICogVGhlcmUgYXJlIGFkZGVkIGNoYW5nZXMg Zm9yd2FyZCBwb3J0ZWQgZnJvbSB0aGUgdXBzdHJlYW0gT3BlblNTTAorKyAgICAgMC45LjggRklQ UyBicmFuY2ggaG93ZXZlciB0aGUgRklQUyBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uIGNoZWNrCisr ICAgICBpcyBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseSBmcm9tIHRoZSB1cHN0cmVhbSBGSVBTIHZh bGlkYXRlZCBPcGVuU1NMCisrICAgICBtb2R1bGUuIEl0IHZlcmlmaWVzIEhNQUMtU0hBMjU2IGNo ZWNrc3VtIG9mIHRoZSB3aG9sZSBzaGFyZWQKKysgICAgIGxpYnJhcmllcy4gRm9yIHRoaXMgcmVh c29uIHRoZSBjaGFuZ2VzIGFyZSBwb3J0ZWQgdG8gZmlsZXMgaW4gdGhlCisrICAgICBjcnlwdG8g ZGlyZWN0b3J5IGFuZCBub3QgaW4gYSBzZXBhcmF0ZSBmaXBzIHN1YmRpcmVjdG9yeS4gQWxzbwor KyAgICAgbm90ZSB0aGF0IHRoZSBGSVBTIGludGVncml0eSB2ZXJpZmljYXRpb24gY2hlY2sgcmVx dWlyZXMgdW5tb2RpZmllZAorKyAgICAgbGliY3J5cHRvIGFuZCBsaWJzc2wgc2hhcmVkIGxpYnJh cnkgZmlsZXMgd2hpY2ggbWVhbnMgdGhhdCBpdCB3aWxsCisrICAgICBmYWlsIGlmIHRoZXNlIGZp bGVzIGFyZSBtb2RpZmllZCBmb3IgZXhhbXBsZSBieSBwcmVsaW5rLgorKyAgICogVGhlIG1vZHVs ZSByZXNwZWN0cyB0aGUga2VybmVsIEZJUFMgZmxhZyAvcHJvYy9zeXMvY3J5cHRvL2ZpcHMgYW5k CisrICAgICB0cmllcyB0byBpbml0aWFsaXplIHRoZSBGSVBTIG1vZGUgaWYgaXQgaXMgc2V0IHRv IDEgYWJvcnRpbmcgaWYgdGhlCisrICAgICBGSVBTIG1vZGUgY291bGQgbm90IGJlIGluaXRpYWxp emVkLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGZvcmNlIHRoZQorKyAgICAgT3BlblNTTCBsaWJy YXJ5IHRvIEZJUFMgbW9kZSBlc3BlY2lhbGx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgYnkKKysg ICAgIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE9QRU5TU0xfRk9SQ0VfRklQU19N T0RFLgorKyAgICogSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE9QRU5TU0xfTk9fREVGQVVM VF9aTElCIGlzIHNldCB0aGUgbW9kdWxlCisrICAgICB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGxv YWQgdGhlIGJ1aWx0IGluIGNvbXByZXNzaW9uIG1ldGhvZCBaTElCCisrICAgICB3aGVuIGluaXRp YWxpemVkLiBBcHBsaWNhdGlvbnMgY2FuIHN0aWxsIGV4cGxpY2l0ZWx5IGFzayBmb3IgWkxJQgor KyAgICAgY29tcHJlc3Npb24gbWV0aG9kLgorKworICBERVNDUklQVElPTgorICAtLS0tLS0tLS0t LQorIAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjAtZmlwcy5wYXRjaCBiL29wZW5zc2wtMS4w LjAtZmlwcy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWI2ZGU3 Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbnNzbC0xLjAuMC1maXBzLnBhdGNoCkBAIC0wLDAgKzEs MTIxNjQgQEAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvQ29uZmlndXJlLmZpcHMgb3BlbnNzbC0x LjAuMC9Db25maWd1cmUKKy0tLSBvcGVuc3NsLTEuMC4wL0NvbmZpZ3VyZS5maXBzCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9Db25maWd1cmUJ MjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC02NjAsNiArNjYwLDcgQEAg bXkgJGNtbGxfZW5jPSJjYW1lbGxpYS5vIGNtbGxfbWlzYy5vIGNtbAorIG15ICRwcm9jZXNzb3I9 IiI7CisgbXkgJGRlZmF1bHRfcmFubGliOworIG15ICRwZXJsOworK215ICRmaXBzPTA7CisgCisg CisgIyBBbGwgb2YgdGhlIGZvbGxvd2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IChSQzUgd2Fz IGVuYWJsZWQgYmVmb3JlIDAuOS44KToKK0BAIC04MDYsNiArODA3LDEwIEBAIFBST0NFU1NfQVJH UzoKKyAJCQl9CisgCQllbHNpZiAoL14zODYkLykKKyAJCQl7ICRwcm9jZXNzb3I9Mzg2OyB9Cisr CQllbHNpZiAoL15maXBzJC8pCisrCQkJeworKwkJCSRmaXBzPTE7CisrCQkgICAgICAgIH0KKyAJ CWVsc2lmICgvXnJzYXJlZiQvKQorIAkJCXsKKyAJCQkjIE5vIFJTQXJlZiBzdXBwb3J0IGFueSBt b3JlIHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KK0BAIC0xMzY4LDYgKzEzNzMsMTEgQEAgJGNmbGFn cy49IiAtRE9QRU5TU0xfSUEzMl9TU0UyIiBpZiAoISRubworIAorICRjZmxhZ3MuPSIgLURPUEVO U1NMX0JOX0FTTV9NT05UIiBpZiAoJGJuX29iaiA9fiAvLW1vbnQvKTsKKyAKKytpZiAoJGZpcHMp CisrCXsKKysJJG9wZW5zc2xfb3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTXG4i OworKwl9CisrCisgJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9vYmogPX4g L1wubyQvKTsKKyAkZGVzX29iaj0kZGVzX2VuYwl1bmxlc3MgKCRkZXNfb2JqID1+IC9cLm8kLyk7 CisgJGJmX29iaj0kYmZfZW5jCQl1bmxlc3MgKCRiZl9vYmogPX4gL1wubyQvKTsKK0BAIC0xNTM1 LDYgKzE1NDUsMTAgQEAgd2hpbGUgKDxJTj4pCisgCXMvXkxJQktSQjU9LiovTElCS1JCNT0kd2l0 aGFyZ3N7ImtyYjUtbGliIn0vOworIAlzL15MSUJaTElCPS4qL0xJQlpMSUI9JHdpdGhhcmdzeyJ6 bGliLWxpYiJ9LzsKKyAJcy9eWkxJQl9JTkNMVURFPS4qL1pMSUJfSU5DTFVERT0kd2l0aGFyZ3N7 InpsaWItaW5jbHVkZSJ9LzsKKysJaWYgKCRmaXBzKQorKwkJeworKwkJcy9eRklQUz0uKi9GSVBT PXllcy87CisrCQl9CisgCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNoYXJlZF90 YXJnZXQvOworIAlzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJrLzsKKyAJ cy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykgXCQoU0hBUkVE X1NTTCkvIGlmICghJG5vX3NoYXJlZCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9i Zi9iZl9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9iZi9iZl9za2V5LmMKKy0tLSBv cGVuc3NsLTEuMC4wL2NyeXB0by9iZi9iZl9za2V5LmMuZmlwcwkyMDA4LTExLTEyIDA0OjU3OjUy LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JmL2JmX3NrZXkuYwky MDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTU5LDEwICs1OSwxNSBAQAor ICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8b3Bl bnNzbC9ibG93ZmlzaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2lu Y2x1ZGUgImJmX2xvY2wuaCIKKyAjaW5jbHVkZSAiYmZfcGkuaCIKKyAKKy12b2lkIEJGX3NldF9r ZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCisrRklQ U19OT05fRklQU19WQ0lQSEVSX0luaXQoQkYpCisgCXsKKyAJaW50IGk7CisgCUJGX0xPTkcgKnAs cmksaW5bMl07CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9iZi9ibG93ZmlzaC5oLmZp cHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYmYvYmxvd2Zpc2guaAorLS0tIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2JmL2Jsb3dmaXNoLmguZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JmL2Jsb3dmaXNoLmgJMjAxMC0wMy0zMCAx MDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDQsNyArMTA0LDkgQEAgdHlwZWRlZiBzdHJ1 Y3QgYmZfa2V5X3N0CisgCUJGX0xPTkcgU1s0KjI1Nl07CisgCX0gQkZfS0VZOworIAorLSAKKysj aWZkZWYgT1BFTlNTTF9GSVBTIAorK3ZvaWQgcHJpdmF0ZV9CRl9zZXRfa2V5KEJGX0tFWSAqa2V5 LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKysjZW5kaWYKKyB2b2lkIEJG X3NldF9rZXkoQkZfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEp OworIAorIHZvaWQgQkZfZW5jcnlwdChCRl9MT05HICpkYXRhLGNvbnN0IEJGX0tFWSAqa2V5KTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JuL2JuLmguZmlwcyBvcGVuc3NsLTEuMC4w L2NyeXB0by9ibi9ibi5oCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vYm4vYm4uaC5maXBzCTIw MTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlw dG8vYm4vYm4uaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTU0MCw2 ICs1NDAsMTcgQEAgaW50CUJOX2lzX3ByaW1lX2V4KGNvbnN0IEJJR05VTSAqcCxpbnQgbgorIGlu dAlCTl9pc19wcmltZV9mYXN0dGVzdF9leChjb25zdCBCSUdOVU0gKnAsaW50IG5jaGVja3MsIEJO X0NUWCAqY3R4LAorIAkJaW50IGRvX3RyaWFsX2RpdmlzaW9uLCBCTl9HRU5DQiAqY2IpOworIAor K2ludCBCTl9YOTMxX2dlbmVyYXRlX1hwcShCSUdOVU0gKlhwLCBCSUdOVU0gKlhxLCBpbnQgbmJp dHMsIEJOX0NUWCAqY3R4KTsKKysKKytpbnQgQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgoQklHTlVN ICpwLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAsIGNvbnN0 IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwKKysJCQljb25zdCBCSUdOVU0gKmUsIEJO X0NUWCAqY3R4LCBCTl9HRU5DQiAqY2IpOworK2ludCBCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4 KEJJR05VTSAqcCwgQklHTlVNICpwMSwgQklHTlVNICpwMiwKKysJCQlCSUdOVU0gKlhwMSwgQklH TlVNICpYcDIsCisrCQkJY29uc3QgQklHTlVNICpYcCwKKysJCQljb25zdCBCSUdOVU0gKmUsIEJO X0NUWCAqY3R4LAorKwkJCUJOX0dFTkNCICpjYik7CisrCisgQk5fTU9OVF9DVFggKkJOX01PTlRf Q1RYX25ldyh2b2lkICk7Cisgdm9pZCBCTl9NT05UX0NUWF9pbml0KEJOX01PTlRfQ1RYICpjdHgp OworIGludCBCTl9tb2RfbXVsX21vbnRnb21lcnkoQklHTlVNICpyLGNvbnN0IEJJR05VTSAqYSxj b25zdCBCSUdOVU0gKmIsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ibi9ibl94OTMx cC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vYm4vYm5feDkzMXAuYworLS0tIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2JuL2JuX3g5MzFwLmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2JuL2JuX3g5MzFwLmMJMjAxMC0w My0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMjcyIEBACisrLyogYm5f eDkzMXAuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3Bl bnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor KyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24u CisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGlj ZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAi T3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAq ICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlz dHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dp bmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoK KysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBB UyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9T RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1Qg T1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM IERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEs IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisr ICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE QU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBj cnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5 cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBU aW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNs dWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrCisrLyogWDkuMzEgcm91 dGluZXMgZm9yIHByaW1lIGRlcml2YXRpb24gKi8KKysKKysvKiBYOS4zMSBwcmltZSBkZXJpdmF0 aW9uLiBUaGlzIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHByaW1lcyBwaQorKyAqIChwMSwgcDIs IHExLCBxMikgZnJvbSBhIHBhcmFtZXRlciBYcGkgYnkgY2hlY2tpbmcgc3VjY2Vzc2l2ZSBvZGQK KysgKiBpbnRlZ2Vycy4KKysgKi8KKysKKytzdGF0aWMgaW50IGJuX3g5MzFfZGVyaXZlX3BpKEJJ R05VTSAqcGksIGNvbnN0IEJJR05VTSAqWHBpLCBCTl9DVFggKmN0eCwKKysJCQlCTl9HRU5DQiAq Y2IpCisrCXsKKysJaW50IGkgPSAwOworKwlpZiAoIUJOX2NvcHkocGksIFhwaSkpCisrCQlyZXR1 cm4gMDsKKysJaWYgKCFCTl9pc19vZGQocGkpICYmICFCTl9hZGRfd29yZChwaSwgMSkpCisrCQly ZXR1cm4gMDsKKysJZm9yKDs7KQorKwkJeworKwkJaSsrOworKwkJQk5fR0VOQ0JfY2FsbChjYiwg MCwgaSk7CisrCQkvKiBOQiAyNyBNUiBpcyBzcGVjaWZpY2VkIGluIFg5LjMxICovCisrCQlpZiAo Qk5faXNfcHJpbWVfZmFzdHRlc3RfZXgocGksIDI3LCBjdHgsIDEsIGNiKSkKKysJCQlicmVhazsK KysJCWlmICghQk5fYWRkX3dvcmQocGksIDIpKQorKwkJCXJldHVybiAwOworKwkJfQorKwlCTl9H RU5DQl9jYWxsKGNiLCAyLCBpKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBUaGlzIGlzIHRo ZSBtYWluIFg5LjMxIHByaW1lIGRlcml2YXRpb24gZnVuY3Rpb24uIEZyb20gcGFyYW1ldGVycwor KyAqIFhwMSwgWHAyIGFuZCBYcCBkZXJpdmUgdGhlIHByaW1lIHAuIElmIHRoZSBwYXJhbWV0ZXJz IHAxIG9yIHAyIGFyZQorKyAqIG5vdCBOVUxMIHRoZXkgd2lsbCBiZSByZXR1cm5lZCB0b286IHRo aXMgaXMgbmVlZGVkIGZvciB0ZXN0aW5nLgorKyAqLworKworK2ludCBCTl9YOTMxX2Rlcml2ZV9w cmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsCisrCQkJY29uc3QgQklH TlVNICpYcCwgY29uc3QgQklHTlVNICpYcDEsIGNvbnN0IEJJR05VTSAqWHAyLAorKwkJCWNvbnN0 IEJJR05VTSAqZSwgQk5fQ1RYICpjdHgsIEJOX0dFTkNCICpjYikKKysJeworKwlpbnQgcmV0ID0g MDsKKysKKysJQklHTlVNICp0LCAqcDFwMiwgKnBtMTsKKysKKysJLyogT25seSBldmVuIGUgc3Vw cG9ydGVkICovCisrCWlmICghQk5faXNfb2RkKGUpKQorKwkJcmV0dXJuIDA7CisrCisrCUJOX0NU WF9zdGFydChjdHgpOworKwlpZiAoIXAxKQorKwkJcDEgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisr CWlmICghcDIpCisrCQlwMiA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJdCA9IEJOX0NUWF9nZXQo Y3R4KTsKKysKKysJcDFwMiA9IEJOX0NUWF9nZXQoY3R4KTsKKysKKysJcG0xID0gQk5fQ1RYX2dl dChjdHgpOworKworKwlpZiAoIWJuX3g5MzFfZGVyaXZlX3BpKHAxLCBYcDEsIGN0eCwgY2IpKQor KwkJZ290byBlcnI7CisrCisrCWlmICghYm5feDkzMV9kZXJpdmVfcGkocDIsIFhwMiwgY3R4LCBj YikpCisrCQlnb3RvIGVycjsKKysKKysJaWYgKCFCTl9tdWwocDFwMiwgcDEsIHAyLCBjdHgpKQor KwkJZ290byBlcnI7CisrCisrCS8qIEZpcnN0IHNldCBwIHRvIHZhbHVlIG9mIFJwICovCisrCisr CWlmICghQk5fbW9kX2ludmVyc2UocCwgcDIsIHAxLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisr CWlmICghQk5fbXVsKHAsIHAsIHAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5f bW9kX2ludmVyc2UodCwgcDEsIHAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5f bXVsKHQsIHQsIHAxLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICghQk5fc3ViKHAsIHAs IHQpKQorKwkJZ290byBlcnI7CisrCisrCWlmIChwLT5uZWcgJiYgIUJOX2FkZChwLCBwLCBwMXAy KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBwIG5vdyBlcXVhbHMgUnAgKi8KKysKKysJaWYgKCFC Tl9tb2Rfc3ViKHAsIHAsIFhwLCBwMXAyLCBjdHgpKQorKwkJZ290byBlcnI7CisrCisrCWlmICgh Qk5fYWRkKHAsIHAsIFhwKSkKKysJCWdvdG8gZXJyOworKworKwkvKiBwIG5vdyBlcXVhbHMgWXAw ICovCisrCisrCWZvciAoOzspCisrCQl7CisrCQlpbnQgaSA9IDE7CisrCQlCTl9HRU5DQl9jYWxs KGNiLCAwLCBpKyspOworKwkJaWYgKCFCTl9jb3B5KHBtMSwgcCkpCisrCQkJZ290byBlcnI7Cisr CQlpZiAoIUJOX3N1Yl93b3JkKHBtMSwgMSkpCisrCQkJZ290byBlcnI7CisrCQlpZiAoIUJOX2dj ZCh0LCBwbTEsIGUsIGN0eCkpCisrCQkJZ290byBlcnI7CisrCQlpZiAoQk5faXNfb25lKHQpCisr CQkvKiBYOS4zMSBzcGVjaWZpZXMgOCBNUiBhbmQgMSBMdWNhcyB0ZXN0IG9yIGFueSBwcmltZSB0 ZXN0CisrCQkgKiBvZmZlcmluZyBzaW1pbGFyIG9yIGJldHRlciBndWFyYW50ZWVzIDUwIE1SIGlz IGNvbnNpZGVyYWJseSAKKysJCSAqIGJldHRlci4KKysJCSAqLworKwkJCSYmIEJOX2lzX3ByaW1l X2Zhc3R0ZXN0X2V4KHAsIDUwLCBjdHgsIDEsIGNiKSkKKysJCQlicmVhazsKKysJCWlmICghQk5f YWRkKHAsIHAsIHAxcDIpKQorKwkJCWdvdG8gZXJyOworKwkJfQorKworKwlCTl9HRU5DQl9jYWxs KGNiLCAzLCAwKTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyOgorKworKwlCTl9DVFhfZW5kKGN0 eCk7CisrCisrCXJldHVybiByZXQ7CisrCX0KKysKKysvKiBHZW5lcmF0ZSBwYWlyIG9mIHBhcmFt dGVycyBYcCwgWHEgZm9yIFg5LjMxIHByaW1lIGdlbmVyYXRpb24uCisrICogTm90ZTogbmJpdHMg cGFyYW10ZXIgaXMgc3VtIG9mIG51bWJlciBvZiBiaXRzIGluIGJvdGguCisrICovCisrCisraW50 IEJOX1g5MzFfZ2VuZXJhdGVfWHBxKEJJR05VTSAqWHAsIEJJR05VTSAqWHEsIGludCBuYml0cywg Qk5fQ1RYICpjdHgpCisrCXsKKysJQklHTlVNICp0OworKwlpbnQgaTsKKysJLyogTnVtYmVyIG9m IGJpdHMgZm9yIGVhY2ggcHJpbWUgaXMgb2YgdGhlIGZvcm0KKysJICogNTEyKzEyOHMgZm9yIHMg PSAwLCAxLCAuLi4KKysJICovCisrCWlmICgobmJpdHMgPCAxMDI0KSB8fCAobmJpdHMgJiAweGZm KSkKKysJCXJldHVybiAwOworKwluYml0cyA+Pj0gMTsKKysJLyogVGhlIHJhbmRvbSB2YWx1ZSBY cCBtdXN0IGJlIGJldHdlZW4gc3FydCgyKSAqIDJeKG5iaXRzLTEpIGFuZAorKwkgKiAyXm5iaXRz IC0gMS4gQnkgc2V0dGluZyB0aGUgdG9wIHR3byBiaXRzIHdlIGVuc3VyZSB0aGF0IHRoZSBsb3dl cgorKwkgKiBib3VuZCBpcyBleGNlZWRlZC4KKysJICovCisrCWlmICghQk5fcmFuZChYcCwgbmJp dHMsIDEsIDApKQorKwkJcmV0dXJuIDA7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwl0ID0g Qk5fQ1RYX2dldChjdHgpOworKworKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorKwkJewor KwkJaWYgKCFCTl9yYW5kKFhxLCBuYml0cywgMSwgMCkpCisrCQkJcmV0dXJuIDA7CisrCQkvKiBD aGVjayB0aGF0IHxYcCAtIFhxfCA+IDJeKG5iaXRzIC0gMTAwKSAqLworKwkJQk5fc3ViKHQsIFhw LCBYcSk7CisrCQlpZiAoQk5fbnVtX2JpdHModCkgPiAobmJpdHMgLSAxMDApKQorKwkJCWJyZWFr OworKwkJfQorKworKwlCTl9DVFhfZW5kKGN0eCk7CisrCisrCWlmIChpIDwgMTAwMCkKKysJCXJl dHVybiAxOworKworKwlyZXR1cm4gMDsKKysKKysJfQorKworKy8qIEdlbmVyYXRlIHByaW1lcyB1 c2luZyBYOS4zMSBhbGdvcml0aG0uIE9mIHRoZSB2YWx1ZXMgcCwgcDEsIHAyLCBYcDEKKysgKiBh bmQgWHAyIG9ubHkgJ3AnIG5lZWRzIHRvIGJlIG5vbi1OVUxMLiBJZiBhbnkgb2YgdGhlIG90aGVy cyBhcmUgbm90IE5VTEwKKysgKiB0aGUgcmVsZXZhbnQgcGFyYW1ldGVyIHdpbGwgYmUgc3RvcmVk IGluIGl0LgorKyAqCisrICogRHVlIHRvIHRoZSBmYWN0IHRoYXQgfFhwIC0gWHF8ID4gMl4obmJp dHMgLSAxMDApIG11c3QgYmUgc2F0aXNmaWVkIFhwIGFuZCBYcQorKyAqIGFyZSBnZW5lcmF0ZWQg dXNpbmcgdGhlIHByZXZpb3VzIGZ1bmN0aW9uIGFuZCBzdXBwbGllZCBhcyBpbnB1dC4KKysgKi8K KysKKytpbnQgQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChCSUdOVU0gKnAsIEJJR05VTSAqcDEs IEJJR05VTSAqcDIsCisrCQkJQklHTlVNICpYcDEsIEJJR05VTSAqWHAyLAorKwkJCWNvbnN0IEJJ R05VTSAqWHAsCisrCQkJY29uc3QgQklHTlVNICplLCBCTl9DVFggKmN0eCwKKysJCQlCTl9HRU5D QiAqY2IpCisrCXsKKysJaW50IHJldCA9IDA7CisrCisrCUJOX0NUWF9zdGFydChjdHgpOworKwlp ZiAoIVhwMSkKKysJCVhwMSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJaWYgKCFYcDIpCisrCQlYcDIg PSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCWlmICghQk5fcmFuZChYcDEsIDEwMSwgMCwgMCkpCisr CQlnb3RvIGVycm9yOworKwlpZiAoIUJOX3JhbmQoWHAyLCAxMDEsIDAsIDApKQorKwkJZ290byBl cnJvcjsKKysJaWYgKCFCTl9YOTMxX2Rlcml2ZV9wcmltZV9leChwLCBwMSwgcDIsIFhwLCBYcDEs IFhwMiwgZSwgY3R4LCBjYikpCisrCQlnb3RvIGVycm9yOworKworKwlyZXQgPSAxOworKworKwll cnJvcjoKKysJQk5fQ1RYX2VuZChjdHgpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCitk aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ibi9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2JuL01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vYm4vTWFrZWZp bGUuZmlwcwkyMDA4LTExLTEyIDA5OjE5OjAyLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2JuL01ha2VmaWxlCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICsw MjAwCitAQCAtMjYsMTMgKzI2LDEzIEBAIExJQlNSQz0JYm5fYWRkLmMgYm5fZGl2LmMgYm5fZXhw LmMgYm5fbGkKKyAJYm5fcHJpbnQuYyBibl9yYW5kLmMgYm5fc2hpZnQuYyBibl93b3JkLmMgYm5f YmxpbmQuYyBcCisgCWJuX2tyb24uYyBibl9zcXJ0LmMgYm5fZ2NkLmMgYm5fcHJpbWUuYyBibl9l cnIuYyBibl9zcXIuYyBibl9hc20uYyBcCisgCWJuX3JlY3AuYyBibl9tb250LmMgYm5fbXBpLmMg Ym5fZXhwMi5jIGJuX2dmMm0uYyBibl9uaXN0LmMgXAorLQlibl9kZXByLmMgYm5fY29uc3QuYwor Kwlibl9kZXByLmMgYm5fY29uc3QuYyBibl94OTMxcC5jCisgCisgTElCT0JKPQlibl9hZGQubyBi bl9kaXYubyBibl9leHAubyBibl9saWIubyBibl9jdHgubyBibl9tdWwubyBibl9tb2QubyBcCisg CWJuX3ByaW50Lm8gYm5fcmFuZC5vIGJuX3NoaWZ0Lm8gYm5fd29yZC5vIGJuX2JsaW5kLm8gXAor IAlibl9rcm9uLm8gYm5fc3FydC5vIGJuX2djZC5vIGJuX3ByaW1lLm8gYm5fZXJyLm8gYm5fc3Fy Lm8gJChCTl9BU00pIFwKKyAJYm5fcmVjcC5vIGJuX21vbnQubyBibl9tcGkubyBibl9leHAyLm8g Ym5fZ2YybS5vIGJuX25pc3QubyBcCistCWJuX2RlcHIubyBibl9jb25zdC5vCisrCWJuX2RlcHIu byBibl9jb25zdC5vIGJuX3g5MzFwLm8KKyAKKyBTUkM9ICQoTElCU1JDKQorIAorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwteDg2LnBsLmZpcHMgb3BlbnNz bC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwteDg2LnBsCistLS0gb3BlbnNzbC0xLjAu MC9jcnlwdG8vY2FtZWxsaWEvYXNtL2NtbGwteDg2LnBsLmZpcHMJMjAwOS0wNC0wNiAxNjoyNTow Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9hc20v Y21sbC14ODYucGwJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MjIs MTIgKzcyMiwxNSBAQCBteSAkYmlhcz1pbnQoQFRbMF0pP3NoaWZ0KEBUKTowOworIH0KKyAmZnVu Y3Rpb25fZW5kKCJDYW1lbGxpYV9Fa2V5Z2VuIik7CisgCisrJHNldGtleWZ1bmMgPSAiQ2FtZWxs aWFfc2V0X2tleSI7CisrJHNldGtleWZ1bmMgPSAicHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5IiBp ZiAoJEVOVntGSVBTfSBuZSAiIik7CisrCisgaWYgKCRPUEVOU1NMKSB7CisgIyBpbnQgQ2FtZWxs aWFfc2V0X2tleSAoCisgIwkJY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwKKyAjCQlpbnQg Yml0cywKKyAjCQlDQU1FTExJQV9LRVkgKmtleSkKKy0mZnVuY3Rpb25fYmVnaW5fQigiQ2FtZWxs aWFfc2V0X2tleSIpOworKyZmdW5jdGlvbl9iZWdpbl9CKCRzZXRrZXlmdW5jKTsKKyAJJnB1c2gJ KCJlYngiKTsKKyAJJm1vdgkoImVjeCIsJndwYXJhbSgwKSk7CSMgcHVsbCBhcmd1bWVudHMKKyAJ Jm1vdgkoImVieCIsJndwYXJhbSgxKSk7CitAQCAtNzYwLDcgKzc2Myw3IEBAIGlmICgkT1BFTlNT TCkgeworICZzZXRfbGFiZWwoImRvbmUiLDQpOworIAkmcG9wCSgiZWJ4Iik7CisgCSZyZXQJKCk7 CistJmZ1bmN0aW9uX2VuZF9CKCJDYW1lbGxpYV9zZXRfa2V5Iik7CisrJmZ1bmN0aW9uX2VuZF9C KCRzZXRrZXlmdW5jKTsKKyB9CisgCisgQFNCT1g9KAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9j cnlwdG8vY2FtZWxsaWEvY2FtZWxsaWEuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVs bGlhL2NhbWVsbGlhLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxp YS5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9jYW1lbGxpYS9jYW1lbGxpYS5oCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAw MDAwMDAwICswMjAwCitAQCAtODgsNiArODgsMTEgQEAgc3RydWN0IGNhbWVsbGlhX2tleV9zdCAK KyAJfTsKKyB0eXBlZGVmIHN0cnVjdCBjYW1lbGxpYV9rZXlfc3QgQ0FNRUxMSUFfS0VZOworIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5KGNvbnN0 IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorKwlDQU1FTExJQV9LRVkg KmtleSk7CisrI2VuZGlmCisrCisgaW50IENhbWVsbGlhX3NldF9rZXkoY29uc3QgdW5zaWduZWQg Y2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisgCUNBTUVMTElBX0tFWSAqa2V5KTsKKyAK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2NtbGxfZmJsay5jLmZpcHMg b3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvY21sbF9mYmxrLmMKKy0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9jYW1lbGxpYS9jbWxsX2ZibGsuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvY21sbF9m YmxrLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNjgg QEAKKysvKiBjcnlwdG8vY2FtZWxsaWEvY2FtZWxsaWFfbWlzYy5jIC0qLSBtb2RlOkM7IGMtZmls ZS1zdHlsZTogImVheSIgLSotICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMDYgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICoKKysgKi8KKysgCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9jYW1lbGxpYS5oPgorKyNpbmNsdWRlICJjbWxsX2xvY2wuaCIKKysjaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNlbmRpZgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgQ2FtZWxs aWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywK KysJQ0FNRUxMSUFfS0VZICprZXkpCisrCXsKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJRklQU19C QURfQUJPUlQoQ0FNRUxMSUEpCisrCXJldHVybiBwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkodXNl cktleSwgYml0cywga2V5KTsKKysJfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9j cnlwdG8vY2FtZWxsaWEvY21sbF9taXNjLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1l bGxpYS9jbWxsX21pc2MuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL2NtbGxf bWlzYy5jLmZpcHMJMjAwOC0xMC0yOCAxMzoxMzo1Mi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4wL2NyeXB0by9jYW1lbGxpYS9jbWxsX21pc2MuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2 LjAwMDAwMDAwMCArMDIwMAorQEAgLTUyLDExICs1MiwyMCBAQAorICNpbmNsdWRlIDxvcGVuc3Ns L29wZW5zc2x2Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvY2FtZWxsaWEuaD4KKyAjaW5jbHVkZSAi Y21sbF9sb2NsLmgiCisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyBjb25zdCBj aGFyIENBTUVMTElBX3ZlcnNpb25bXT0iQ0FNRUxMSUEiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsK KyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHByaXZhdGVfQ2FtZWxsaWFfc2V0X2tleShj b25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKysJQ0FNRUxMSUFf S0VZICprZXkpCisrI2Vsc2UKKyBpbnQgQ2FtZWxsaWFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBj aGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKyAJQ0FNRUxMSUFfS0VZICprZXkpCisrI2Vu ZGlmCisgCXsKKyAJaWYoIXVzZXJLZXkgfHwgIWtleSkKKyAJCXJldHVybiAtMTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NhbWVsbGlhL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAu MC9jcnlwdG8vY2FtZWxsaWEvTWFrZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYW1l bGxpYS9NYWtlZmlsZS5maXBzCTIwMDgtMTItMjMgMTI6MzM6MDAuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FtZWxsaWEvTWFrZWZpbGUJMjAxMC0wMy0zMCAxMDoz Mzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMyw5ICsyMyw5IEBAIEFQUFM9CisgCisgTElCPSQo VE9QKS9saWJjcnlwdG8uYQorIExJQlNSQz1jYW1lbGxpYS5jIGNtbGxfbWlzYy5jIGNtbGxfZWNi LmMgY21sbF9jYmMuYyBjbWxsX29mYi5jIFwKKy0JICAgY21sbF9jZmIuYyBjbWxsX2N0ci5jIAor KwkgICBjbWxsX2NmYi5jIGNtbGxfY3RyLmMgY21sbF9mYmxrLmMKKyAKKy1MSUJPQko9IGNtbGxf ZWNiLm8gY21sbF9vZmIubyBjbWxsX2NmYi5vIGNtbGxfY3RyLm8gJChDTUxMX0VOQykKKytMSUJP Qko9IGNtbGxfZWNiLm8gY21sbF9vZmIubyBjbWxsX2NmYi5vIGNtbGxfY3RyLm8gJChDTUxMX0VO QykgY21sbF9mYmxrLm8KKyAKKyBTUkM9ICQoTElCU1JDKQorIAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC9jcnlwdG8vY2FzdC9jYXN0LmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYXN0L2Nh c3QuaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Nhc3QvY2FzdC5oLmZpcHMJMjAxMC0wMy0z MCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYXN0 L2Nhc3QuaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTgzLDcgKzgz LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgY2FzdF9rZXlfc3QKKyAJaW50IHNob3J0X2tleTsJLyogVXNl IHJlZHVjZWQgcm91bmRzIGZvciBzaG9ydCBrZXkgKi8KKyAJfSBDQVNUX0tFWTsKKyAKKy0gCisr I2lmZGVmIE9QRU5TU0xfRklQUyAKKyt2b2lkIHByaXZhdGVfQ0FTVF9zZXRfa2V5KENBU1RfS0VZ ICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworKyNlbmRpZgorIHZv aWQgQ0FTVF9zZXRfa2V5KENBU1RfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmRhdGEpOworIHZvaWQgQ0FTVF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpp biwgdW5zaWduZWQgY2hhciAqb3V0LCBjb25zdCBDQVNUX0tFWSAqa2V5LAorIAkJICAgICAgaW50 IGVuYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9jYXN0L2Nfc2tleS5jLmZpcHMg b3BlbnNzbC0xLjAuMC9jcnlwdG8vY2FzdC9jX3NrZXkuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2Nhc3QvY19za2V5LmMuZmlwcwkyMDAwLTA2LTAzIDE2OjEzOjM1LjAwMDAwMDAwMCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Nhc3QvY19za2V5LmMJMjAxMC0wMy0zMCAxMDoz Mzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC01Nyw2ICs1NywxMSBAQAorICAqLworIAorICNpbmNs dWRlIDxvcGVuc3NsL2Nhc3QuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKwor ICNpbmNsdWRlICJjYXN0X2xjbC5oIgorICNpbmNsdWRlICJjYXN0X3MuaCIKKyAKK0BAIC03Miw3 ICs3Nyw3IEBACisgI2RlZmluZSBTNiBDQVNUX1NfdGFibGU2CisgI2RlZmluZSBTNyBDQVNUX1Nf dGFibGU3CisgCistdm9pZCBDQVNUX3NldF9rZXkoQ0FTVF9LRVkgKmtleSwgaW50IGxlbiwgY29u c3QgdW5zaWduZWQgY2hhciAqZGF0YSkKKytGSVBTX05PTl9GSVBTX1ZDSVBIRVJfSW5pdChDQVNU KQorIAl7CisgCUNBU1RfTE9ORyB4WzE2XTsKKyAJQ0FTVF9MT05HIHpbMTZdOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9j cnlwdG8uaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2NyeXB0by5oLmZpcHMJMjAxMC0wMy0z MCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9jcnlw dG8uaAkyMDEwLTAzLTMwIDEwOjM2OjA2LjAwMDAwMDAwMCArMDIwMAorQEAgLTU0NywxMiArNTQ3 LDcwIEBAIHVuc2lnbmVkIGxvbmcgKk9QRU5TU0xfaWEzMmNhcF9sb2Modm9pZCkKKyAjZGVmaW5l IE9QRU5TU0xfaWEzMmNhcCAoKihPUEVOU1NMX2lhMzJjYXBfbG9jKCkpKQorIGludCBPUEVOU1NM X2lzc2VydmljZSh2b2lkKTsKKyAKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2RlZmluZSBG SVBTX0VSUk9SX0lHTk9SRUQoYWxnKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAor KwkJYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3JpdGhtIGVycm9yIGlnbm9yZWQi KTsKKysKKysjZGVmaW5lIEZJUFNfQkFEX0FCT1JUKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywg X19MSU5FX18sIFwKKysJCSNhbGcgIiBBbGdvcml0aG0gZm9yYmlkZGVuIGluIEZJUFMgbW9kZSIp OworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFNfU1RSSUNUCisrI2RlZmluZSBGSVBTX0JBRF9BTEdP UklUSE0oYWxnKSBGSVBTX0JBRF9BQk9SVChhbGcpCisrI2Vsc2UKKysjZGVmaW5lIEZJUFNfQkFE X0FMR09SSVRITShhbGcpIFwKKysJeyBcCisrCUZJUFNlcnIoRklQU19GX0hBU0hfRklOQUwsRklQ U19SX05PTl9GSVBTX01FVEhPRCk7IFwKKysJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJBbGdvcml0 aG09IiwgI2FsZyk7IFwKKysJcmV0dXJuIDA7IFwKKysJfQorKyNlbmRpZgorKworKy8qIExvdyBs ZXZlbCBkaWdlc3QgQVBJIGJsb2NraW5nIG1hY3JvICovCisrCisrI2RlZmluZSBGSVBTX05PTl9G SVBTX01EX0luaXQoYWxnKSBcCisrCWludCBhbGcjI19Jbml0KGFsZyMjX0NUWCAqYykgXAorKwkJ eyBcCisrCQlpZiAoRklQU19tb2RlKCkpIFwKKysJCQlGSVBTX0JBRF9BTEdPUklUSE0oYWxnKSBc CisrCQlyZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKKysJCX0gXAorKwlpbnQgcHJp dmF0ZV8jI2FsZyMjX0luaXQoYWxnIyNfQ1RYICpjKQorKworKy8qIEZvciBjaXBoZXJzIHRoZSBB UEkgb2Z0ZW4gdmFyaWVzIGZyb20gY2lwaGVyIHRvIGNpcGhlciBhbmQgZWFjaCBuZWVkcyB0bwor KyAqIGJlIHRyZWF0ZWQgYXMgYSBzcGVjaWFsIGNhc2UuIFZhcmlhYmxlIGtleSBsZW5ndGggY2lw aGVycyAoQmxvd2Zpc2gsIFJDNCwKKysgKiBDQVNUKSBob3dldmVyIGFyZSB2ZXJ5IHNpbWlsYXIg YW5kIGNhbiB1c2UgYSBibG9ja2luZyBtYWNyby4KKysgKi8KKysKKysjZGVmaW5lIEZJUFNfTk9O X0ZJUFNfVkNJUEhFUl9Jbml0KGFsZykgXAorKwl2b2lkIGFsZyMjX3NldF9rZXkoYWxnIyNfS0VZ ICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpIFwKKysJCXsgXAorKwkJ aWYgKEZJUFNfbW9kZSgpKSBcCisrCQkJRklQU19CQURfQUJPUlQoYWxnKSBcCisrCQlwcml2YXRl XyMjYWxnIyNfc2V0X2tleShrZXksIGxlbiwgZGF0YSk7IFwKKysJCX0gXAorKwl2b2lkIHByaXZh dGVfIyNhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAqa2V5LCBpbnQgbGVuLCBcCisrCQkJCQljb25z dCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKworKyNlbHNlCisrCisrI2RlZmluZSBGSVBTX05PTl9G SVBTX1ZDSVBIRVJfSW5pdChhbGcpIFwKKysJdm9pZCBhbGcjI19zZXRfa2V5KGFsZyMjX0tFWSAq a2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKworKyNkZWZpbmUgRklQ U19OT05fRklQU19NRF9Jbml0KGFsZykgXAorKwlpbnQgYWxnIyNfSW5pdChhbGcjI19DVFggKmMp IAorKworKyNlbmRpZiAvKiBkZWYgT1BFTlNTTF9GSVBTICovCisrCisgLyogQkVHSU4gRVJST1Ig Q09ERVMgKi8KKyAvKiBUaGUgZm9sbG93aW5nIGxpbmVzIGFyZSBhdXRvIGdlbmVyYXRlZCBieSB0 aGUgc2NyaXB0IG1rZXJyLnBsLiBBbnkgY2hhbmdlcworICAqIG1hZGUgYWZ0ZXIgdGhpcyBwb2lu dCBtYXkgYmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IGlzIG5leHQgcnVuLgorICAqLwor IHZvaWQgRVJSX2xvYWRfQ1JZUFRPX3N0cmluZ3Modm9pZCk7CisgCisrI2RlZmluZSBPUEVOU1NM X0hBVkVfSU5JVAkxCisrdm9pZCBPUEVOU1NMX2luaXRfbGlicmFyeSh2b2lkKTsKKysKKyAvKiBF cnJvciBjb2RlcyBmb3IgdGhlIENSWVBUTyBmdW5jdGlvbnMuICovCisgCisgLyogRnVuY3Rpb24g Y29kZXMuICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9kaC9kaF9lcnIuYy5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RoL2RoX2Vyci5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlw dG8vZGgvZGhfZXJyLmMuZmlwcwkyMDA2LTExLTIxIDIyOjI5OjM3LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RoL2RoX2Vyci5jCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCitAQCAtNzMsNiArNzMsOCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRB IERIX3N0cl9mdW5jdHNbXT0KKyB7RVJSX0ZVTkMoREhfRl9DT01QVVRFX0tFWSksCSJDT01QVVRF X0tFWSJ9LAorIHtFUlJfRlVOQyhESF9GX0RIUEFSQU1TX1BSSU5UX0ZQKSwJIkRIcGFyYW1zX3By aW50X2ZwIn0sCisge0VSUl9GVU5DKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMpLAkiREhfQlVJ TFRJTl9HRU5QQVJBTVMifSwKKyt7RVJSX0ZVTkMoREhfRl9ESF9DT01QVVRFX0tFWSksCSJESF9j b21wdXRlX2tleSJ9LAorK3tFUlJfRlVOQyhESF9GX0RIX0dFTkVSQVRFX0tFWSksCSJESF9nZW5l cmF0ZV9rZXkifSwKKyB7RVJSX0ZVTkMoREhfRl9ESF9ORVdfTUVUSE9EKSwJIkRIX25ld19tZXRo b2QifSwKKyB7RVJSX0ZVTkMoREhfRl9ESF9QQVJBTV9ERUNPREUpLAkiREhfUEFSQU1fREVDT0RF In0sCisge0VSUl9GVU5DKERIX0ZfREhfUFJJVl9ERUNPREUpLAkiREhfUFJJVl9ERUNPREUifSwK K0BAIC05NCw2ICs5Niw3IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgREhfc3RyX3JlYXNvbnNb XT0KKyB7RVJSX1JFQVNPTihESF9SX0JOX0VSUk9SKSAgICAgICAgICAgICAgICwiYm4gZXJyb3Ii fSwKKyB7RVJSX1JFQVNPTihESF9SX0RFQ09ERV9FUlJPUikgICAgICAgICAgICwiZGVjb2RlIGVy cm9yIn0sCisge0VSUl9SRUFTT04oREhfUl9JTlZBTElEX1BVQktFWSkgICAgICAgICAsImludmFs aWQgcHVibGljIGtleSJ9LAorK3tFUlJfUkVBU09OKERIX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSAg ICAgLCJrZXkgc2l6ZSB0b28gc21hbGwifSwKKyB7RVJSX1JFQVNPTihESF9SX0tFWVNfTk9UX1NF VCkgICAgICAgICAgICwia2V5cyBub3Qgc2V0In0sCisge0VSUl9SRUFTT04oREhfUl9NT0RVTFVT X1RPT19MQVJHRSkgICAgICAsIm1vZHVsdXMgdG9vIGxhcmdlIn0sCisge0VSUl9SRUFTT04oREhf Ul9OT19QQVJBTUVURVJTX1NFVCkgICAgICAsIm5vIHBhcmFtZXRlcnMgc2V0In0sCitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2RoL2RoX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfZ2VuLmMuZmlw cwkyMDA1LTA0LTI2IDIwOjUzOjE1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2RoL2RoX2dlbi5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitA QCAtNjUsNiArNjUsMTAgQEAKKyAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKKyAjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KysjZW5kaWYKKyAKKyBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsIGlu dCBwcmltZV9sZW4sIGludCBnZW5lcmF0b3IsIEJOX0dFTkNCICpjYik7CisgCitAQCAtMTA2LDYg KzExMCwyMCBAQCBzdGF0aWMgaW50IGRoX2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsCisgCWlu dCBnLG9rPSAtMTsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9E SF9CVUlMVElOX0dFTlBBUkFNUyxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0 dXJuIDA7CisrCQl9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAocHJpbWVfbGVuIDwgT1BFTlNT TF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIoREhfRl9ESF9CVUlM VElOX0dFTlBBUkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJZ290byBlcnI7Cisr CQl9CisrI2VuZGlmCisrCisgCWN0eD1CTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0gTlVMTCkg Z290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9j cnlwdG8vZGgvZGguaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RoL2RoLmgKKy0tLSBvcGVu c3NsLTEuMC4wL2NyeXB0by9kaC9kaC5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9kaC9kaC5oCTIwMTAtMDMtMzAgMTA6 MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNzcsNiArNzcsOCBAQAorICMgZGVmaW5lIE9QRU5T U0xfREhfTUFYX01PRFVMVVNfQklUUwkxMDAwMAorICNlbmRpZgorIAorKyNkZWZpbmUgT1BFTlNT TF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMgMTAyNAorKworICNkZWZpbmUgREhfRkxBR19DQUNI RV9NT05UX1AgICAgIDB4MDEKKyAjZGVmaW5lIERIX0ZMQUdfTk9fRVhQX0NPTlNUVElNRSAweDAy IC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERICisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBpbXBsZW1lbnRhdGlvbiBub3cgdXNlcyBjb25zdGFudCB0 aW1lCitAQCAtMjQxLDYgKzI0Myw4IEBAIHZvaWQgRVJSX2xvYWRfREhfc3RyaW5ncyh2b2lkKTsK KyAjZGVmaW5lIERIX0ZfR0VORVJBVEVfUEFSQU1FVEVSUwkJCSAxMDQKKyAjZGVmaW5lIERIX0Zf UEtFWV9ESF9ERVJJVkUJCQkJIDExMgorICNkZWZpbmUgREhfRl9QS0VZX0RIX0tFWUdFTgkJCQkg MTEzCisrI2RlZmluZSBESF9GX0RIX0NPTVBVVEVfS0VZCQkJCSAxMTQKKysjZGVmaW5lIERIX0Zf REhfR0VORVJBVEVfS0VZCQkJIDExNQorIAorIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKyAjZGVmaW5l IERIX1JfQkFEX0dFTkVSQVRPUgkJCQkgMTAxCitAQCAtMjUzLDYgKzI1Nyw3IEBAIHZvaWQgRVJS X2xvYWRfREhfc3RyaW5ncyh2b2lkKTsKKyAjZGVmaW5lIERIX1JfTk9fUEFSQU1FVEVSU19TRVQJ CQkJIDEwNworICNkZWZpbmUgREhfUl9OT19QUklWQVRFX1ZBTFVFCQkJCSAxMDAKKyAjZGVmaW5l IERIX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SCQkJIDEwNQorKyNkZWZpbmUgREhfUl9LRVlf U0laRV9UT09fU01BTEwJCQkJIDExMAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9kaC9kaF9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2RoL2RoX2tleS5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZGgvZGhfa2V5LmMu ZmlwcwkyMDA3LTAzLTI4IDAyOjE1OjIzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2RoL2RoX2tleS5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAw CitAQCAtNjEsNiArNjEsOSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUg PG9wZW5zc2wvcmFuZC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2RoLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyBzdGF0aWMg aW50IGdlbmVyYXRlX2tleShESCAqZGgpOworIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWdu ZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCk7CitAQCAtMTA3LDYg KzExMCwxNCBAQCBzdGF0aWMgaW50IGdlbmVyYXRlX2tleShESCAqZGgpCisgCUJOX01PTlRfQ1RY ICptb250PU5VTEw7CisgCUJJR05VTSAqcHViX2tleT1OVUxMLCpwcml2X2tleT1OVUxMOworIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChCTl9udW1fYml0cyhk aC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlESGVy cihESF9GX0dFTkVSQVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJcmV0dXJu IDA7CisrCQl9CisrI2VuZGlmCisrCisgCWN0eCA9IEJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9 PSBOVUxMKSBnb3RvIGVycjsKKyAKK0BAIC0xODQsNiArMTk1LDEzIEBAIHN0YXRpYyBpbnQgY29t cHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2UKKyAJCURIZXJyKERIX0ZfQ09NUFVURV9LRVksREhf Ul9NT0RVTFVTX1RPT19MQVJHRSk7CisgCQlnb3RvIGVycjsKKyAJCX0KKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNT TF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKQorKwkJeworKwkJREhlcnIoREhfRl9DT01QVVRF X0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJZ290byBlcnI7CisrCQl9CisrI2Vu ZGlmCisgCisgCWN0eCA9IEJOX0NUWF9uZXcoKTsKKyAJaWYgKGN0eCA9PSBOVUxMKSBnb3RvIGVy cjsKK0BAIC0yNTEsNiArMjY5LDkgQEAgc3RhdGljIGludCBkaF9ibl9tb2RfZXhwKGNvbnN0IERI ICpkaCwgQgorIAorIHN0YXRpYyBpbnQgZGhfaW5pdChESCAqZGgpCisgCXsKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJZGgtPmZsYWdz IHw9IERIX0ZMQUdfQ0FDSEVfTU9OVF9QOworIAlyZXR1cm4oMSk7CisgCX0KK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9kc2EvZHNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNhL2RzYV9nZW4uYy5m aXBzCTIwMDgtMTItMjYgMTg6MTc6MjEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZHNhL2RzYV9nZW4uYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIw MAorQEAgLTc3LDggKzc3LDEyIEBACisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9kc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvc2hhLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMu aD4KKysjZW5kaWYKKyAjaW5jbHVkZSAiZHNhX2xvY2wuaCIKKyAKKyBpbnQgRFNBX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRzLAorQEAgLTEyNiw2ICsxMzAsMjEgQEAg aW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworIAlCTl9DVFggKmN0eD1O VUxMOworIAl1bnNpZ25lZCBpbnQgaD0yOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYo RklQU19zZWxmdGVzdF9mYWlsZWQoKSkKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX0RT QV9CVUlMVElOX1BBUkFNR0VOLAorKwkJICAgIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7 CisrCSAgICBnb3RvIGVycjsKKysJICAgIH0KKysKKysJaWYgKEZJUFNfbW9kZSgpICYmIChiaXRz IDwgT1BFTlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkKKysJCXsKKysJCURTQWVycihE U0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJ CWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAlpZiAocXNpemUgIT0gU0hBX0RJR0VTVF9M RU5HVEggJiYgcXNpemUgIT0gU0hBMjI0X0RJR0VTVF9MRU5HVEggJiYKKyAJICAgIHFzaXplICE9 IFNIQTI1Nl9ESUdFU1RfTEVOR1RIKQorIAkJLyogaW52YWxpZCBxIHNpemUgKi8KK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9kc2EuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2RzYS9kc2EuaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2RzYS9kc2EuaC5maXBzCTIwMTAt MDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8v ZHNhL2RzYS5oCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtODgsNiAr ODgsOCBAQAorICMgZGVmaW5lIE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJVFMJMTAwMDAKKyAj ZW5kaWYKKyAKKysjZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0 CisrCisgI2RlZmluZSBEU0FfRkxBR19DQUNIRV9NT05UX1AJMHgwMQorICNkZWZpbmUgRFNBX0ZM QUdfTk9fRVhQX0NPTlNUVElNRSAgICAgICAweDAyIC8qIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1 aWx0LWluIERTQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqIGltcGxlbWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRpbWUKK0BAIC05Nyw2ICs5OSwy MSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJl IHVzZWQgZm9yIGFsbCBleHBvbmVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCisgCisrLyogSWYgdGhpcyBmbGFnIGlzIHNldCB0aGUgRFNBIG1l dGhvZCBpcyBGSVBTIGNvbXBsaWFudCBhbmQgY2FuIGJlIHVzZWQKKysgKiBpbiBGSVBTIG1vZGUu IFRoaXMgaXMgc2V0IGluIHRoZSB2YWxpZGF0ZWQgbW9kdWxlIG1ldGhvZC4gSWYgYW4KKysgKiBh cHBsaWNhdGlvbiBzZXRzIHRoaXMgZmxhZyBpbiBpdHMgb3duIG1ldGhvZHMgaXQgaXMgaXRzIHJl cG9zaWJpbGl0eQorKyAqIHRvIGVuc3VyZSB0aGUgcmVzdWx0IGlzIGNvbXBsaWFudC4KKysgKi8K KysKKysjZGVmaW5lIERTQV9GTEFHX0ZJUFNfTUVUSE9ECQkJMHgwNDAwCisrCisrLyogSWYgdGhp cyBmbGFnIGlzIHNldCB0aGUgb3BlcmF0aW9ucyBub3JtYWxseSBkaXNhYmxlZCBpbiBGSVBTIG1v ZGUgYXJlCisrICogcGVybWl0dGVkIGl0IGlzIHRoZW4gdGhlIGFwcGxpY2F0aW9ucyByZXNwb25z aWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUKKysgKiB1c2FnZSBpcyBjb21wbGlhbnQuCisrICov CisrCisrI2RlZmluZSBEU0FfRkxBR19OT05fRklQU19BTExPVwkJCTB4MDQwMAorKworICNpZmRl ZiAgX19jcGx1c3BsdXMKKyBleHRlcm4gIkMiIHsKKyAjZW5kaWYKK0BAIC0yNzAsOCArMjg3LDEx IEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBEU0FfRl9ET19E U0FfUFJJTlQJCQkJIDEwNAorICNkZWZpbmUgRFNBX0ZfRFNBUEFSQU1TX1BSSU5UCQkJCSAxMDAK KyAjZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVF9GUAkJCSAxMDEKKysjZGVmaW5lIERTQV9G X0RTQV9CVUlMVElOX0tFWUdFTgkJCSAxMjQKKysjZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BB UkFNR0VOCQkJIDEyMworICNkZWZpbmUgRFNBX0ZfRFNBX0RPX1NJR04JCQkJIDExMgorICNkZWZp bmUgRFNBX0ZfRFNBX0RPX1ZFUklGWQkJCQkgMTEzCisrI2RlZmluZSBEU0FfRl9EU0FfR0VORVJB VEVfUEFSQU1FVEVSUwkJCSAxMjUKKyAjZGVmaW5lIERTQV9GX0RTQV9ORVdfTUVUSE9ECQkJCSAx MDMKKyAjZGVmaW5lIERTQV9GX0RTQV9QQVJBTV9ERUNPREUJCQkJIDExOQorICNkZWZpbmUgRFNB X0ZfRFNBX1BSSU5UX0ZQCQkJCSAxMDUKK0BAIC0yOTYsOSArMzE2LDEyIEBAIHZvaWQgRVJSX2xv YWRfRFNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBEU0FfUl9EQVRBX1RPT19MQVJHRV9GT1Jf S0VZX1NJWkUJCSAxMDAKKyAjZGVmaW5lIERTQV9SX0RFQ09ERV9FUlJPUgkJCQkgMTA0CisgI2Rl ZmluZSBEU0FfUl9JTlZBTElEX0RJR0VTVF9UWVBFCQkJIDEwNgorKyNkZWZpbmUgRFNBX1JfS0VZ X1NJWkVfVE9PX1NNQUxMCQkJIDExMAorICNkZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJBTUVURVJT CQkJIDEwMQorICNkZWZpbmUgRFNBX1JfTU9EVUxVU19UT09fTEFSR0UJCQkJIDEwMworKyNkZWZp bmUgRFNBX1JfTk9OX0ZJUFNfTUVUSE9ECQkJCSAxMTEKKyAjZGVmaW5lIERTQV9SX05PX1BBUkFN RVRFUlNfU0VUCQkJCSAxMDcKKysjZGVmaW5lIERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9J Tl9GSVBTX01PREUJIDExMgorICNkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9S CQkJIDEwNQorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2RzYS9kc2Ffa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhX2tl eS5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzCTIwMDctMDMt MjggMDI6MTU6MjUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNh L2RzYV9rZXkuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTYzLDkg KzYzLDU1IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9k c2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNp bmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSAiZmlwc19sb2NsLmgi CisgCisgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysKKytzdGF0aWMgaW50IGZpcHNfZHNhX3BhaXJ3aXNlX2ZhaWwgPSAw OworKworK3ZvaWQgRklQU19jb3JydXB0X2RzYV9rZXlnZW4odm9pZCkKKysJeworKwlmaXBzX2Rz YV9wYWlyd2lzZV9mYWlsID0gMTsKKysJfQorKworK2ludCBmaXBzX2NoZWNrX2RzYShEU0EgKmRz YSkKKysJeworKwlFVlBfUEtFWSAqcGs7CisrCXVuc2lnbmVkIGNoYXIgdGJzW10gPSAiRFNBIFBh aXJ3aXNlIENoZWNrIERhdGEiOworKwlpbnQgcmV0ID0gMDsKKysKKysgICAgCWlmICgocGs9RVZQ X1BLRVlfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlfc2V0MV9E U0EocGssIGRzYSk7CisrCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCB0YnMs IC0xLAorKwkJCQkJTlVMTCwgMCwgRVZQX3NoYTEoKSwgMCwgTlVMTCkpCisrCQlnb3RvIGVycjsK KysKKysJcmV0ID0gMTsKKysKKytlcnI6CisrCWlmIChyZXQgPT0gMCkKKysJCXsKKysJCWZpcHNf c2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfQ0hFQ0tfRFNBLEZJ UFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7CisrCQl9CisrCisrCWlmIChwaykKKysJCUVWUF9Q S0VZX2ZyZWUocGspOworKworKwlyZXR1cm4gcmV0OworKwl9CisrI2VuZGlmCisrCisgaW50IERT QV9nZW5lcmF0ZV9rZXkoRFNBICpkc2EpCisgCXsKKyAJaWYoZHNhLT5tZXRoLT5kc2Ffa2V5Z2Vu KQorQEAgLTc5LDYgKzEyNSwxNCBAQCBzdGF0aWMgaW50IGRzYV9idWlsdGluX2tleWdlbihEU0Eg KmRzYSkKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAJQklHTlVNICpwdWJfa2V5PU5VTEwsKnByaXZf a2V5PU5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYg KEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMp KQorKwkJeworKwkJRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJ WkVfVE9PX1NNQUxMKTsKKysJCWdvdG8gZXJyOworKwkJfQorKyNlbmRpZgorKworIAlpZiAoKGN0 eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpIGdvdG8gZXJyOworIAorIAlpZiAoZHNhLT5wcml2X2tl eSA9PSBOVUxMKQorQEAgLTExNyw2ICsxNzEsMTUgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9r ZXlnZW4oRFNBICpkc2EpCisgCisgCWRzYS0+cHJpdl9rZXk9cHJpdl9rZXk7CisgCWRzYS0+cHVi X2tleT1wdWJfa2V5OworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpKQor KwkJeworKwkJaWYgKGZpcHNfZHNhX3BhaXJ3aXNlX2ZhaWwpCisrCQkJQk5fYWRkX3dvcmQoZHNh LT5wdWJfa2V5LCAxKTsKKysJCWlmKCFmaXBzX2NoZWNrX2RzYShkc2EpKQorKwkJICAgIGdvdG8g ZXJyOworKwkJfQorKyNlbmRpZgorIAlvaz0xOworIAorIGVycjoKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZHNh L2RzYV9vc3NsLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBz CTIwMDctMDMtMjggMDI6MTU6MjYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9j cnlwdG8vZHNhL2RzYV9vc3NsLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAK K0BAIC02NSw2ICs2NSw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisgI2luY2x1ZGUg PG9wZW5zc2wvcmFuZC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2FzbjEuaD4KKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorIAorIHN0YXRp YyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxl biwgRFNBICpkc2EpOworIHN0YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NU WCAqY3R4X2luLCBCSUdOVU0gKipraW52cCwgQklHTlVNICoqcnApOworQEAgLTgyLDcgKzg1LDcg QEAgTlVMTCwgLyogZHNhX21vZF9leHAsICovCisgTlVMTCwgLyogZHNhX2JuX21vZF9leHAsICov CisgZHNhX2luaXQsCisgZHNhX2ZpbmlzaCwKKy0wLAorK0RTQV9GTEFHX0ZJUFNfTUVUSE9ELAor IE5VTEwsCisgTlVMTCwKKyBOVUxMCitAQCAtMTM3LDYgKzE0MCwyMCBAQCBzdGF0aWMgRFNBX1NJ RyAqZHNhX2RvX3NpZ24oY29uc3QgdW5zaWduCisgCWludCByZWFzb249RVJSX1JfQk5fTElCOwor IAlEU0FfU0lHICpyZXQ9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJUFNf c2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9f U0lHTixGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOworKwkgICAgcmV0dXJuIE5VTEw7Cisr CSAgICB9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9Q RU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIoRFNBX0Zf RFNBX0RPX1NJR04sIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrCQlyZXR1cm4gTlVMTDsK KysJCX0KKysjZW5kaWYKKysKKyAJQk5faW5pdCgmbSk7CisgCUJOX2luaXQoJnhyKTsKKyAKK0BA IC0zMTIsNiArMzI5LDIwIEBAIHN0YXRpYyBpbnQgZHNhX2RvX3ZlcmlmeShjb25zdCB1bnNpZ25l ZCAKKyAJCXJldHVybiAtMTsKKyAJCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmKEZJ UFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9EU0Ff RE9fVkVSSUZZLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAgICByZXR1cm4gLTE7 CisrCSAgICB9CisrCisrCWlmIChGSVBTX21vZGUoKSAmJiAoQk5fbnVtX2JpdHMoZHNhLT5wKSA8 IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpCisrCQl7CisrCQlEU0FlcnIoRFNB X0ZfRFNBX0RPX1ZFUklGWSwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCXJldHVybiAt MTsKKysJCX0KKysjZW5kaWYKKysKKyAJaSA9IEJOX251bV9iaXRzKGRzYS0+cSk7CisgCS8qIGZp cHMgMTg2LTMgYWxsb3dzIG9ubHkgZGlmZmVyZW50IHNpemVzIGZvciBxICovCisgCWlmIChpICE9 IDE2MCAmJiBpICE9IDIyNCAmJiBpICE9IDI1NikKK0BAIC00MDMsNiArNDM0LDkgQEAgc3RhdGlj IGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkIAorIAorIHN0YXRpYyBpbnQgZHNhX2lu aXQoRFNBICpkc2EpCisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9j aGVjaygpOworKyNlbmRpZgorIAlkc2EtPmZsYWdzfD1EU0FfRkxBR19DQUNIRV9NT05UX1A7Cisg CXJldHVybigxKTsKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9lcnIvZXJyX2Fs bC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXJyL2Vycl9hbGwuYworLS0tIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2Vyci9lcnJfYWxsLmMuZmlwcwkyMDA5LTA4LTA5IDE2OjU4OjA1LjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Vyci9lcnJfYWxsLmMJMjAxMC0w My0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC05Niw2ICs5Niw5IEBACisgI2luY2x1 ZGUgPG9wZW5zc2wvb2NzcC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpbmNsdWRl IDxvcGVuc3NsL3RzLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fQ01TCisgI2luY2x1ZGUgPG9w ZW5zc2wvY21zLmg+CisgI2VuZGlmCitAQCAtMTQ5LDYgKzE1Miw5IEBAIHZvaWQgRVJSX2xvYWRf Y3J5cHRvX3N0cmluZ3Modm9pZCkKKyAjZW5kaWYKKyAJRVJSX2xvYWRfT0NTUF9zdHJpbmdzKCk7 CisgCUVSUl9sb2FkX1VJX3N0cmluZ3MoKTsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCUVSUl9s b2FkX0ZJUFNfc3RyaW5ncygpOworKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19DTVMKKyAJ RVJSX2xvYWRfQ01TX3N0cmluZ3MoKTsKKyAjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9kaWdlc3Qu YworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzCTIwMTAtMDMtMDUg MTQ6MzM6NDMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2Rp Z2VzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMTE2LDYgKzEx Niw3IEBACisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorICNpbmNsdWRlIDxvcGVuc3NsL2Vu Z2luZS5oPgorICNlbmRpZgorKyNpbmNsdWRlICJldnBfbG9jbC5oIgorIAorIHZvaWQgRVZQX01E X0NUWF9pbml0KEVWUF9NRF9DVFggKmN0eCkKKyAJeworQEAgLTEzOCw5ICsxMzksNTAgQEAgaW50 IEVWUF9EaWdlc3RJbml0KEVWUF9NRF9DVFggKmN0eCwgY29ucworIAlyZXR1cm4gRVZQX0RpZ2Vz dEluaXRfZXgoY3R4LCB0eXBlLCBOVUxMKTsKKyAJfQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysKKysvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQgYXR0 ZW1wdCB0byB1c2Ugbm9uIEZJUFMKKysgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQgaWdu b3JlIHRoZSBlcnJvcnMuCisrICovCisrCisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfTURfQ1RY ICpjdHgpCisrCXsgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgaW5pdCIpOyByZXR1cm4gMDt9 CisrCisrc3RhdGljIGludCBiYWRfdXBkYXRlKEVWUF9NRF9DVFggKmN0eCxjb25zdCB2b2lkICpk YXRhLHNpemVfdCBjb3VudCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCB1cGRhdGUi KTsgcmV0dXJuIDA7fQorKworK3N0YXRpYyBpbnQgYmFkX2ZpbmFsKEVWUF9NRF9DVFggKmN0eCx1 bnNpZ25lZCBjaGFyICptZCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkRpZ2VzdCBGaW5hbCIp OyByZXR1cm4gMDt9CisrCisrc3RhdGljIGNvbnN0IEVWUF9NRCBiYWRfbWQgPQorKwl7CisrCTAs CisrCTAsCisrCTAsCisrCTAsCisrCWJhZF9pbml0LAorKwliYWRfdXBkYXRlLAorKwliYWRfZmlu YWwsCisrCU5VTEwsCisrCU5VTEwsCisrCU5VTEwsCisrCTAsCisrCXswLDAsMCwwfSwKKysJfTsK KysKKysjZW5kaWYKKysKKyBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBj b25zdCBFVlBfTUQgKnR5cGUsIEVOR0lORSAqaW1wbCkKKyAJeworIAlFVlBfTURfQ1RYX2NsZWFy X2ZsYWdzKGN0eCxFVlBfTURfQ1RYX0ZMQUdfQ0xFQU5FRCk7CisrI2lmZGVmIE9QRU5TU0xfRklQ UworKwlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJeworKwkJRklQU2VycihGSVBTX0Zf RVZQX0RJR0VTVElOSVRfRVgsRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJCWN0eC0+ ZGlnZXN0ID0gJmJhZF9tZDsKKysJCXJldHVybiAwOworKwkJfQorKyNlbmRpZgorICNpZm5kZWYg T1BFTlNTTF9OT19FTkdJTkUKKyAJLyogV2hldGhlciBpdCdzIG5pY2Ugb3Igbm90LCAiSW5pdHMi IGNhbiBiZSB1c2VkIG9uICJGaW5hbCInZCBjb250ZXh0cworIAkgKiBzbyB0aGlzIGNvbnRleHQg bWF5IGFscmVhZHkgaGF2ZSBhbiBFTkdJTkUhIFRyeSB0byBhdm9pZCByZWxlYXNpbmcKK0BAIC0x OTcsNiArMjM5LDE4IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RYICpjdHgsIGMK KyAjZW5kaWYKKyAJaWYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUpCisgCQl7CisrI2lmZGVmIE9QRU5T U0xfRklQUworKwkJaWYgKEZJUFNfbW9kZSgpKQorKwkJCXsKKysJCQlpZiAoISh0eXBlLT5mbGFn cyAmIEVWUF9NRF9GTEFHX0ZJUFMpIAorKwkJCSAmJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RY X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwkJCQl7CisrCQkJCUVWUGVycihFVlBfRl9FVlBfRElH RVNUSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOworKwkJCQljdHgtPmRpZ2VzdCA9 ICZiYWRfbWQ7CisrCQkJCXJldHVybiAwOworKwkJCQl9CisrCQkJfQorKyNlbmRpZgorIAkJaWYg KGN0eC0+ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKKyAJCQlPUEVOU1NMX2ZyZWUo Y3R4LT5tZF9kYXRhKTsKKyAJCWN0eC0+ZGlnZXN0PXR5cGU7CitAQCAtMjMwLDYgKzI4NCw5IEBA IHNraXBfdG9faW5pdDoKKyAKKyBpbnQgRVZQX0RpZ2VzdFVwZGF0ZShFVlBfTURfQ1RYICpjdHgs IGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBjb3VudCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAlyZXR1cm4gY3R4LT51cGRh dGUoY3R4LGRhdGEsY291bnQpOworIAl9CisgCitAQCAtMjQ2LDYgKzMwMyw5IEBAIGludCBFVlBf RGlnZXN0RmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnMKKyBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4 KEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQsIHVuc2lnbmVkIGludCAqc2l6ZSkK KyAJeworIAlpbnQgcmV0OworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9j aGVjaygpOworKyNlbmRpZgorIAorIAlPUEVOU1NMX2Fzc2VydChjdHgtPmRpZ2VzdC0+bWRfc2l6 ZSA8PSBFVlBfTUFYX01EX1NJWkUpOworIAlyZXQ9Y3R4LT5kaWdlc3QtPmZpbmFsKGN0eCxtZCk7 CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2V2cC9lX2Flcy5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2Vf YWVzLmMuZmlwcwkyMDA0LTAxLTI4IDIwOjA1OjMzLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2V2cC9lX2Flcy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAw ICswMjAwCitAQCAtNjksMzIgKzY5LDI5IEBAIHR5cGVkZWYgc3RydWN0CisgCisgSU1QTEVNRU5U X0JMT0NLX0NJUEhFUihhZXNfMTI4LCBrcywgQUVTLCBFVlBfQUVTX0tFWSwKKyAJCSAgICAgICBO SURfYWVzXzEyOCwgMTYsIDE2LCAxNiwgMTI4LAorLQkJICAgICAgIDAsIGFlc19pbml0X2tleSwg TlVMTCwgCistCQkgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAgICBFVlBf Q0lQSEVSX2dldF9hc24xX2l2LAorLQkJICAgICAgIE5VTEwpCisrCQkgICAgICAgRVZQX0NJUEhf RkxBR19GSVBTfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLAorKwkJICAgICAgIGFlc19pbml0 X2tleSwKKysJCSAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorIElNUExFTUVOVF9CTE9D S19DSVBIRVIoYWVzXzE5Miwga3MsIEFFUywgRVZQX0FFU19LRVksCisgCQkgICAgICAgTklEX2Fl c18xOTIsIDE2LCAyNCwgMTYsIDEyOCwKKy0JCSAgICAgICAwLCBhZXNfaW5pdF9rZXksIE5VTEws IAorLQkJICAgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkgICAgICAgRVZQX0NJUEhF Ul9nZXRfYXNuMV9pdiwKKy0JCSAgICAgICBOVUxMKQorKwkJICAgICAgIEVWUF9DSVBIX0ZMQUdf RklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgICBhZXNfaW5pdF9rZXks CisrCQkgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKyBJTVBMRU1FTlRfQkxPQ0tfQ0lQ SEVSKGFlc18yNTYsIGtzLCBBRVMsIEVWUF9BRVNfS0VZLAorIAkJICAgICAgIE5JRF9hZXNfMjU2 LCAxNiwgMzIsIDE2LCAxMjgsCistCQkgICAgICAgMCwgYWVzX2luaXRfa2V5LCBOVUxMLCAKKy0J CSAgICAgICBFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJICAgICAgIEVWUF9DSVBIRVJfZ2V0 X2FzbjFfaXYsCistCQkgICAgICAgTlVMTCkKKy0KKy0jZGVmaW5lIElNUExFTUVOVF9BRVNfQ0ZC Uihrc2l6ZSxjYml0cykJSU1QTEVNRU5UX0NGQlIoYWVzLEFFUyxFVlBfQUVTX0tFWSxrcyxrc2l6 ZSxjYml0cywxNikKKy0KKy1JTVBMRU1FTlRfQUVTX0NGQlIoMTI4LDEpCistSU1QTEVNRU5UX0FF U19DRkJSKDE5MiwxKQorLUlNUExFTUVOVF9BRVNfQ0ZCUigyNTYsMSkKKy0KKy1JTVBMRU1FTlRf QUVTX0NGQlIoMTI4LDgpCistSU1QTEVNRU5UX0FFU19DRkJSKDE5Miw4KQorLUlNUExFTUVOVF9B RVNfQ0ZCUigyNTYsOCkKKysJCSAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFN8RVZQX0NJUEhfRkxB R19ERUZBVUxUX0FTTjEsCisrCQkgICAgICAgYWVzX2luaXRfa2V5LAorKwkJICAgICAgIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwpCisrCisrI2RlZmluZSBJTVBMRU1FTlRfQUVTX0NGQlIoa3NpemUs Y2JpdHMsZmxhZ3MpCUlNUExFTUVOVF9DRkJSKGFlcyxBRVMsRVZQX0FFU19LRVksa3Msa3NpemUs Y2JpdHMsMTYsZmxhZ3MpCisrCisrSU1QTEVNRU5UX0FFU19DRkJSKDEyOCwxLEVWUF9DSVBIX0ZM QUdfRklQUykKKytJTVBMRU1FTlRfQUVTX0NGQlIoMTkyLDEsRVZQX0NJUEhfRkxBR19GSVBTKQor K0lNUExFTUVOVF9BRVNfQ0ZCUigyNTYsMSxFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrCisrSU1QTEVN RU5UX0FFU19DRkJSKDEyOCw4LEVWUF9DSVBIX0ZMQUdfRklQUykKKytJTVBMRU1FTlRfQUVTX0NG QlIoMTkyLDgsRVZQX0NJUEhfRkxBR19GSVBTKQorK0lNUExFTUVOVF9BRVNfQ0ZCUigyNTYsOCxF VlBfQ0lQSF9GTEFHX0ZJUFMpCisgCisgc3RhdGljIGludCBhZXNfaW5pdF9rZXkoRVZQX0NJUEhF Ul9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorIAkJICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqaXYsIGludCBlbmMpCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAv ZV9jYW1lbGxpYS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfY2FtZWxsaWEuYwor LS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX2NhbWVsbGlhLmMuZmlwcwkyMDA2LTA4LTMx IDIyOjU2OjIwLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9l X2NhbWVsbGlhLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC05Myw3 ICs5Myw3IEBAIElNUExFTUVOVF9CTE9DS19DSVBIRVIoY2FtZWxsaWFfMjU2LCBrcywKKyAJRVZQ X0NJUEhFUl9nZXRfYXNuMV9pdiwKKyAJTlVMTCkKKyAKKy0jZGVmaW5lIElNUExFTUVOVF9DQU1F TExJQV9DRkJSKGtzaXplLGNiaXRzKQlJTVBMRU1FTlRfQ0ZCUihjYW1lbGxpYSxDYW1lbGxpYSxF VlBfQ0FNRUxMSUFfS0VZLGtzLGtzaXplLGNiaXRzLDE2KQorKyNkZWZpbmUgSU1QTEVNRU5UX0NB TUVMTElBX0NGQlIoa3NpemUsY2JpdHMpCUlNUExFTUVOVF9DRkJSKGNhbWVsbGlhLENhbWVsbGlh LEVWUF9DQU1FTExJQV9LRVksa3Msa3NpemUsY2JpdHMsMTYsMCkKKyAKKyBJTVBMRU1FTlRfQ0FN RUxMSUFfQ0ZCUigxMjgsMSkKKyBJTVBMRU1FTlRfQ0FNRUxMSUFfQ0ZCUigxOTIsMSkKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2V2cC9lX2RlczMuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX2RlczMu Yy5maXBzCTIwMDgtMTItMjkgMTM6MzU6NDcuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL2VfZGVzMy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICsw MjAwCitAQCAtMjA2LDkgKzIwNiw5IEBAIHN0YXRpYyBpbnQgZGVzX2VkZTNfY2ZiOF9jaXBoZXIo RVZQX0NJUEgKKyAgICAgfQorIAorIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVf S0VZLCBOSURfZGVzX2VkZSwgOCwgMTYsIDgsIDY0LAorLQkJCUVWUF9DSVBIX1JBTkRfS0VZLCBk ZXNfZWRlX2luaXRfa2V5LCBOVUxMLCAKKy0JCQlFVlBfQ0lQSEVSX3NldF9hc24xX2l2LAorLQkJ CUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsCisrCQlFVlBfQ0lQSF9SQU5EX0tFWXxFVlBfQ0lQSF9G TEFHX0ZJUFN8RVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEsCisrCQkJZGVzX2VkZV9pbml0X2tl eSwKKysJCQlOVUxMLCBOVUxMLCBOVUxMLAorIAkJCWRlczNfY3RybCkKKyAKKyAjZGVmaW5lIGRl c19lZGUzX2NmYjY0X2NpcGhlciBkZXNfZWRlX2NmYjY0X2NpcGhlcgorQEAgLTIxNywyMSArMjE3 LDIxIEBAIEJMT0NLX0NJUEhFUl9kZWZzKGRlc19lZGUsIERFU19FREVfS0VZLCAKKyAjZGVmaW5l IGRlc19lZGUzX2VjYl9jaXBoZXIgZGVzX2VkZV9lY2JfY2lwaGVyCisgCisgQkxPQ0tfQ0lQSEVS X2RlZnMoZGVzX2VkZTMsIERFU19FREVfS0VZLCBOSURfZGVzX2VkZTMsIDgsIDI0LCA4LCA2NCwK Ky0JCQlFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5pdF9rZXksIE5VTEwsIAorLQkJCUVW UF9DSVBIRVJfc2V0X2FzbjFfaXYsCistCQkJRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVW UF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRf QVNOMSwKKysJCQlkZXNfZWRlM19pbml0X2tleSwKKysJCQlOVUxMLCBOVUxMLCBOVUxMLAorIAkJ CWRlczNfY3RybCkKKyAKKyBCTE9DS19DSVBIRVJfZGVmX2NmYihkZXNfZWRlMyxERVNfRURFX0tF WSxOSURfZGVzX2VkZTMsMjQsOCwxLAorLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2Vk ZTNfaW5pdF9rZXksTlVMTCwKKy0JCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAg ICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBI X0ZMQUdfRklQU3xFVlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgZGVzX2VkZTNf aW5pdF9rZXksCisrCQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisgCQkgICAgIGRlczNfY3RybCkK KyAKKyBCTE9DS19DSVBIRVJfZGVmX2NmYihkZXNfZWRlMyxERVNfRURFX0tFWSxOSURfZGVzX2Vk ZTMsMjQsOCw4LAorLQkJICAgICBFVlBfQ0lQSF9SQU5EX0tFWSwgZGVzX2VkZTNfaW5pdF9rZXks TlVMTCwKKy0JCSAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwKKy0JCSAgICAgRVZQX0NJUEhF Ul9nZXRfYXNuMV9pdiwKKysJCUVWUF9DSVBIX1JBTkRfS0VZfEVWUF9DSVBIX0ZMQUdfRklQU3xF VlBfQ0lQSF9GTEFHX0RFRkFVTFRfQVNOMSwKKysJCSAgICAgZGVzX2VkZTNfaW5pdF9rZXksCisr CQkgICAgIE5VTEwsIE5VTEwsIE5VTEwsCisgCQkgICAgIGRlczNfY3RybCkKKyAKKyBzdGF0aWMg aW50IGRlc19lZGVfaW5pdF9rZXkoRVZQX0NJUEhFUl9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQg Y2hhciAqa2V5LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfbnVsbC5jLmZp cHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2VfbnVsbC5jCistLS0gb3BlbnNzbC0xLjAuMC9j cnlwdG8vZXZwL2VfbnVsbC5jLmZpcHMJMjAwOC0xMC0zMSAyMDo0ODoyNC4wMDAwMDAwMDAgKzAx MDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9udWxsLmMJMjAxMC0wMy0zMCAxMDoz Mzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBjb25zdCBFVlBf Q0lQSEVSIG5fY2lwaGVyPQorIAl7CisgCU5JRF91bmRlZiwKKyAJMSwwLDAsCistCTAsCisrCUVW UF9DSVBIX0ZMQUdfRklQUywKKyAJbnVsbF9pbml0X2tleSwKKyAJbnVsbF9jaXBoZXIsCisgCU5V TEwsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZV9yYzQuYy5maXBzIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2V2cC9lX3JjNC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZw L2VfcmM0LmMuZmlwcwkyMDA4LTEwLTMxIDIwOjQ4OjI0LjAwMDAwMDAwMCArMDEwMAorKysrIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9lX3JjNC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAw MDAwICswMjAwCitAQCAtNjQsNiArNjQsNyBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgor ICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYzQuaD4K KysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyAvKiBGSVhNRTogc3VyZWx5IHRoaXMgaXMgYXZh aWxhYmxlIGVsc2V3aGVyZT8gKi8KKyAjZGVmaW5lIEVWUF9SQzRfS0VZX1NJWkUJCTE2CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZXZwL2V2cF9lbmMuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBf ZW5jLmMuZmlwcwkyMDEwLTAzLTAxIDAyOjUyOjQ3LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfZW5jLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAw MDAgKzAyMDAKK0BAIC02OCw4ICs2OCw1MyBAQAorIAorIGNvbnN0IGNoYXIgRVZQX3ZlcnNpb25b XT0iRVZQIiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KworKy8qIFRoZSBwdXJwb3NlIG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRl bXB0IHRvIHVzZSBub24gRklQUworKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25v cmUgdGhlIGVycm9ycy4KKysgKi8KKysKKytzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9DSVBIRVJf Q1RYICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKKysJCSAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICppdiwgaW50IGVuYykKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBpbml0 Iik7IHJldHVybiAwO30KKysKKytzdGF0aWMgaW50IGJhZF9kb19jaXBoZXIoRVZQX0NJUEhFUl9D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpp biwgdW5zaWduZWQgaW50IGlubCkKKysJeyBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciB1cGRh dGUiKTsgcmV0dXJuIDA7fQorKworKy8qIE5COiBubyBjbGVhbnVwIGJlY2F1c2UgaXQgaXMgYWxs b3dlZCBhZnRlciBmYWlsZWQgaW5pdCAqLworKworK3N0YXRpYyBpbnQgYmFkX3NldF9hc24xKEVW UF9DSVBIRVJfQ1RYICpjdHgsIEFTTjFfVFlQRSAqdHlwKQorKwl7IEZJUFNfRVJST1JfSUdOT1JF RCgiQ2lwaGVyIHNldF9hc24xIik7IHJldHVybiAwO30KKytzdGF0aWMgaW50IGJhZF9nZXRfYXNu MShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKKysJeyBGSVBTX0VSUk9SX0lH Tk9SRUQoIkNpcGhlciBnZXRfYXNuMSIpOyByZXR1cm4gMDt9Cisrc3RhdGljIGludCBiYWRfY3Ry bChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBpbnQgdHlwZSwgaW50IGFyZywgdm9pZCAqcHRyKQorKwl7 IEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGN0cmwiKTsgcmV0dXJuIDA7fQorKworK3N0YXRp YyBjb25zdCBFVlBfQ0lQSEVSIGJhZF9jaXBoZXIgPQorKwl7CisrCTAsCisrCTAsCisrCTAsCisr CTAsCisrCTAsCisrCWJhZF9pbml0LAorKwliYWRfZG9fY2lwaGVyLAorKwlOVUxMLAorKwkwLAor KwliYWRfc2V0X2FzbjEsCisrCWJhZF9nZXRfYXNuMSwKKysJYmFkX2N0cmwsCisrCU5VTEwKKysJ fTsKKysKKysjZW5kaWYKKysKKyB2b2lkIEVWUF9DSVBIRVJfQ1RYX2luaXQoRVZQX0NJUEhFUl9D VFggKmN0eCkKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVj aygpOworKyNlbmRpZgorIAltZW1zZXQoY3R4LDAsc2l6ZW9mKEVWUF9DSVBIRVJfQ1RYKSk7Cisg CS8qIGN0eC0+Y2lwaGVyPU5VTEw7ICovCisgCX0KK0BAIC0xMDEsNiArMTQ2LDE0IEBAIGludCBF VlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAJCQllbmMgPSAxOworIAkJY3R4 LT5lbmNyeXB0ID0gZW5jOworIAkJfQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19z ZWxmdGVzdF9mYWlsZWQoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0VWUF9DSVBIRVJJTklU X0VYLEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQljdHgtPmNpcGhlciA9ICZiYWRf Y2lwaGVyOworKwkJcmV0dXJuIDA7CisrCQl9CisrI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05P X0VOR0lORQorIAkvKiBXaGV0aGVyIGl0J3MgbmljZSBvciBub3QsICJJbml0cyIgY2FuIGJlIHVz ZWQgb24gIkZpbmFsIidkIGNvbnRleHRzCisgCSAqIHNvIHRoaXMgY29udGV4dCBtYXkgYWxyZWFk eSBoYXZlIGFuIEVOR0lORSEgVHJ5IHRvIGF2b2lkIHJlbGVhc2luZworQEAgLTIxOSw2ICsyNzIs MjIgQEAgc2tpcF90b19pbml0OgorIAkJfQorIAl9CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwkvKiBBZnRlciAna2V5JyBpcyBzZXQgbm8gZnVydGhlciBwYXJhbWV0ZXJzIGNoYW5nZXMgYXJl IHBlcm1pc3NpYmxlLgorKwkgKiBTbyBvbmx5IGNoZWNrIGZvciBub24gRklQUyBlbmFibGluZyBh dCB0aGlzIHBvaW50LgorKwkgKi8KKysJaWYgKGtleSAmJiBGSVBTX21vZGUoKSkKKysJCXsKKysJ CWlmICghKGN0eC0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfRklQUykKKysJCQkmICEo Y3R4LT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKQorKwkJCXsKKysJCQlF VlBlcnIoRVZQX0ZfRVZQX0NJUEhFUklOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsK KysJCQljdHgtPmNpcGhlciA9ICZiYWRfY2lwaGVyOworKwkJCXJldHVybiAwOworKwkJCX0KKysJ CX0KKysjZW5kaWYKKysKKyAJaWYoa2V5IHx8IChjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQ SF9BTFdBWVNfQ0FMTF9JTklUKSkgeworIAkJaWYoIWN0eC0+Y2lwaGVyLT5pbml0KGN0eCxrZXks aXYsZW5jKSkgcmV0dXJuIDA7CisgCX0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2 cC9ldnBfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2Vyci5jCistLS0g b3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9lcnIuYy5maXBzCTIwMTAtMDItMDcgMTQ6NDE6 MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9lcnIu YwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTE1NSw2ICsxNTUsNyBA QCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIEVWUF9zdHJfcmVhc29uc1tdCisge0VSUl9SRUFTT04o RVZQX1JfREVDT0RFX0VSUk9SKSAgICAgICAgICAsImRlY29kZSBlcnJvciJ9LAorIHtFUlJfUkVB U09OKEVWUF9SX0RJRkZFUkVOVF9LRVlfVFlQRVMpICAgLCJkaWZmZXJlbnQga2V5IHR5cGVzIn0s Cisge0VSUl9SRUFTT04oRVZQX1JfRElGRkVSRU5UX1BBUkFNRVRFUlMpICAsImRpZmZlcmVudCBw YXJhbWV0ZXJzIn0sCisre0VSUl9SRUFTT04oRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpICAgICAs ImRpc2FibGVkIGZvciBmaXBzIn0sCisge0VSUl9SRUFTT04oRVZQX1JfRU5DT0RFX0VSUk9SKSAg ICAgICAgICAsImVuY29kZSBlcnJvciJ9LAorIHtFUlJfUkVBU09OKEVWUF9SX0VWUF9QQkVfQ0lQ SEVSSU5JVF9FUlJPUiksImV2cCBwYmUgY2lwaGVyaW5pdCBlcnJvciJ9LAorIHtFUlJfUkVBU09O KEVWUF9SX0VYUEVDVElOR19BTl9SU0FfS0VZKSAgLCJleHBlY3RpbmcgYW4gcnNhIGtleSJ9LAor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cC5oLmZpcHMgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZXZwL2V2cC5oCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cC5oLmZp cHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4w L2NyeXB0by9ldnAvZXZwLmgJMjAxMC0wMy0zMCAxMDo0MDoxMi4wMDAwMDAwMDAgKzAyMDAKK0BA IC03NSw2ICs3NSwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2Jpby5oPgorICNlbmRpZgorIAor KyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlm CisrCisgLyoKKyAjZGVmaW5lIEVWUF9SQzJfS0VZX1NJWkUJCTE2CisgI2RlZmluZSBFVlBfUkM0 X0tFWV9TSVpFCQkxNgorQEAgLTE5Nyw2ICsyMDEsOCBAQCB0eXBlZGVmIGludCBldnBfdmVyaWZ5 X21ldGhvZChpbnQgdHlwZSxjCisgCisgI2RlZmluZSBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9T SUdOQVRVUkUJMHgwMDA0CisgCisrI2RlZmluZSBFVlBfTURfRkxBR19GSVBTCTB4MDQwMCAvKiBO b3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCisrCisgLyogRGlnZXN0QWxn b3JpdGhtSWRlbnRpZmllciBmbGFncy4uLiAqLworIAorICNkZWZpbmUgRVZQX01EX0ZMQUdfRElH QUxHSURfTUFTSwkJMHgwMDE4CitAQCAtMjY5LDEwICsyNzUsNiBAQCBzdHJ1Y3QgZW52X21kX2N0 eF9zdAorIAkJCQkJCSogY2xlYW5lZCAqLworICNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1JFVVNF CQkweDAwMDQgLyogRG9uJ3QgZnJlZSB1cCBjdHgtPm1kX2RhdGEKKyAJCQkJCQkqIGluIEVWUF9N RF9DVFhfY2xlYW51cCAqLworLS8qIEZJUFMgYW5kIHBhZCBvcHRpb25zIGFyZSBpZ25vcmVkIGlu IDEuMC4wLCBkZWZpbml0aW9ucyBhcmUgaGVyZQorLSAqIHNvIHdlIGRvbid0IGFjY2lkZW50YWxs eSByZXVzZSB0aGUgdmFsdWVzIGZvciBvdGhlciBwdXJwb3Nlcy4KKy0gKi8KKy0KKyAjZGVmaW5l IEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVwkweDAwMDgJLyogQWxsb3cgdXNlIG9mIG5v biBGSVBTIGRpZ2VzdAorIAkJCQkJCSAqIGluIEZJUFMgbW9kZSAqLworIAorQEAgLTI4NCw2ICsy ODYsMTAgQEAgc3RydWN0IGVudl9tZF9jdHhfc3QKKyAjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19Q QURfUEtDUzEJMHgwMAkvKiBQS0NTIzEgdjEuNSBtb2RlICovCisgI2RlZmluZSBFVlBfTURfQ1RY X0ZMQUdfUEFEX1g5MzEJMHgxMAkvKiBYOS4zMSBtb2RlICovCisgI2RlZmluZSBFVlBfTURfQ1RY X0ZMQUdfUEFEX1BTUwkJMHgyMAkvKiBQU1MgbW9kZSAqLworKyNkZWZpbmUgTV9FVlBfTURfQ1RY X0ZMQUdfUFNTX1NBTFQoY3R4KSBcCisrCQkoKGN0eC0+ZmxhZ3M+PjE2KSAmMHhGRkZGKSAvKiBz ZWVkIGxlbmd0aCAqLworKyNkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTgkweEZGRkYJ Lyogc2FsdCBsZW4gc2FtZSBhcyBkaWdlc3QgKi8KKysjZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19Q U1NfTVJFQwkweEZGRkUJLyogc2FsdCBtYXggb3IgYXV0byByZWNvdmVyZWQgKi8KKyAKKyAjZGVm aW5lIEVWUF9NRF9DVFhfRkxBR19OT19JTklUCQkweDAxMDAgLyogRG9uJ3QgaW5pdGlhbGl6ZSBt ZF9kYXRhICovCisgCitAQCAtMzMwLDEyICszMzYsMTYgQEAgc3RydWN0IGV2cF9jaXBoZXJfc3QK KyAjZGVmaW5lIAlFVlBfQ0lQSF9OT19QQURESU5HCQkweDEwMAorIC8qIGNpcGhlciBoYW5kbGVz IHJhbmRvbSBrZXkgZ2VuZXJhdGlvbiAqLworICNkZWZpbmUgCUVWUF9DSVBIX1JBTkRfS0VZCQkw eDIwMAorLS8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMgKi8K Ky0jZGVmaW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAKKysvKiBOb3RlIGlmIHN1aXRh YmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCisrI2RlZmluZQkJRVZQX0NJUEhfRkxBR19GSVBT CQkweDQwMAorKy8qIEFsbG93IG5vbiBGSVBTIGNpcGhlciBpbiBGSVBTIG1vZGUgKi8KKysjZGVm aW5lCQlFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XCTB4ODAwCisgLyogQWxsb3cgdXNlIGRl ZmF1bHQgQVNOMSBnZXQvc2V0IGl2ICovCisgI2RlZmluZQkJRVZQX0NJUEhfRkxBR19ERUZBVUxU X0FTTjEJMHgxMDAwCisgLyogQnVmZmVyIGxlbmd0aCBpbiBiaXRzIG5vdCBieXRlczogQ0ZCMSBt b2RlIG9ubHkgKi8KKyAjZGVmaW5lCQlFVlBfQ0lQSF9GTEFHX0xFTkdUSF9CSVRTCTB4MjAwMAor Ky8qIGNpcGhlciBoYXMgaXRzIG93biBhZGRpdGlvbmFsIGNvcHlpbmcgbG9naWMgKi8KKysjZGVm aW5lIAlFVlBfQ0lQSF9DVVNUT01fQ09QWQkJMHg0MDAwCisgCisgLyogY3RybCgpIHZhbHVlcyAq LworIAorQEAgLTEyMzksNiArMTI0OSw3IEBAIHZvaWQgRVJSX2xvYWRfRVZQX3N0cmluZ3Modm9p ZCk7CisgI2RlZmluZSBFVlBfUl9ERUNPREVfRVJST1IJCQkJIDExNAorICNkZWZpbmUgRVZQX1Jf RElGRkVSRU5UX0tFWV9UWVBFUwkJCSAxMDEKKyAjZGVmaW5lIEVWUF9SX0RJRkZFUkVOVF9QQVJB TUVURVJTCQkJIDE1MworKyNkZWZpbmUgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMJCQkJIDE2MAor ICNkZWZpbmUgRVZQX1JfRU5DT0RFX0VSUk9SCQkJCSAxMTUKKyAjZGVmaW5lIEVWUF9SX0VWUF9Q QkVfQ0lQSEVSSU5JVF9FUlJPUgkJCSAxMTkKKyAjZGVmaW5lIEVWUF9SX0VYUEVDVElOR19BTl9S U0FfS0VZCQkJIDEyNworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9saWIu Yy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfbGliLmMKKy0tLSBvcGVuc3NsLTEu MC4wL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMJMjAxMC0wMS0yNiAxNTozMzo1MS4wMDAwMDAw MDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvZXZwX2xpYi5jCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNjcsNiArNjcsOCBAQCBpbnQgRVZQX0NJ UEhFUl9wYXJhbV90b19hc24xKEVWUF9DSVBIRVJfCisgCisgCWlmIChjLT5jaXBoZXItPnNldF9h c24xX3BhcmFtZXRlcnMgIT0gTlVMTCkKKyAJCXJldD1jLT5jaXBoZXItPnNldF9hc24xX3BhcmFt ZXRlcnMoYyx0eXBlKTsKKysJZWxzZSBpZiAoYy0+Y2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZM QUdfREVGQVVMVF9BU04xKQorKwkJcmV0PUVWUF9DSVBIRVJfc2V0X2FzbjFfaXYoYywgdHlwZSk7 CisgCWVsc2UKKyAJCXJldD0tMTsKKyAJcmV0dXJuKHJldCk7CitAQCAtNzgsNiArODAsOCBAQCBp bnQgRVZQX0NJUEhFUl9hc24xX3RvX3BhcmFtKEVWUF9DSVBIRVJfCisgCisgCWlmIChjLT5jaXBo ZXItPmdldF9hc24xX3BhcmFtZXRlcnMgIT0gTlVMTCkKKyAJCXJldD1jLT5jaXBoZXItPmdldF9h c24xX3BhcmFtZXRlcnMoYyx0eXBlKTsKKysJZWxzZSBpZiAoYy0+Y2lwaGVyLT5mbGFncyAmIEVW UF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xKQorKwkJcmV0PUVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYo YywgdHlwZSk7CisgCWVsc2UKKyAJCXJldD0tMTsKKyAJcmV0dXJuKHJldCk7CitAQCAtMTg2LDYg KzE5MCw5IEBAIGludCBFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplKGNvbnN0IEVWUF8KKyAKKyBp bnQgRVZQX0NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpvdXQsIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorIAl7CisrI2lmZGVmIE9Q RU5TU0xfRklQUworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCXJldHVybiBj dHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCxvdXQsaW4saW5sKTsKKyAJfQorIAorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL2V2cF9sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9ldnAvZXZwX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9ldnBfbG9j bC5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9ldnAvZXZwX2xvY2wuaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAw MCArMDIwMAorQEAgLTI1NCwxNCArMjU0LDMyIEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF8jI2Nu YW1lIyNfZWNiKHZvaWQKKyAKKyAjZGVmaW5lIEVWUF9DX0RBVEEoa3N0cnVjdCwgY3R4KQkoKGtz dHJ1Y3QgKikoY3R4KS0+Y2lwaGVyX2RhdGEpCisgCistI2RlZmluZSBJTVBMRU1FTlRfQ0ZCUihj aXBoZXIsY3ByZWZpeCxrc3RydWN0LGtzY2hlZCxrZXlzaXplLGNiaXRzLGl2X2xlbikgXAorKyNk ZWZpbmUgSU1QTEVNRU5UX0NGQlIoY2lwaGVyLGNwcmVmaXgsa3N0cnVjdCxrc2NoZWQsa2V5c2l6 ZSxjYml0cyxpdl9sZW4sZmwpIFwKKyAJQkxPQ0tfQ0lQSEVSX2Z1bmNfY2ZiKGNpcGhlciMjXyMj a2V5c2l6ZSxjcHJlZml4LGNiaXRzLGtzdHJ1Y3Qsa3NjaGVkKSBcCisgCUJMT0NLX0NJUEhFUl9k ZWZfY2ZiKGNpcGhlciMjXyMja2V5c2l6ZSxrc3RydWN0LCBcCisgCQkJICAgICBOSURfIyNjaXBo ZXIjI18jI2tleXNpemUsIGtleXNpemUvOCwgaXZfbGVuLCBjYml0cywgXAorLQkJCSAgICAgMCwg Y2lwaGVyIyNfaW5pdF9rZXksIE5VTEwsIFwKKy0JCQkgICAgIEVWUF9DSVBIRVJfc2V0X2FzbjFf aXYsIFwKKy0JCQkgICAgIEVWUF9DSVBIRVJfZ2V0X2FzbjFfaXYsIFwKKy0JCQkgICAgIE5VTEwp CisrCQkJICAgICAoZmwpfEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLCBcCisrCQkJICAgICBj aXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKysKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrI2RlZmluZSBSQzJfc2V0X2tleQlwcml2YXRlX1JDMl9zZXRfa2V5CisrI2Rl ZmluZSBSQzRfc2V0X2tleQlwcml2YXRlX1JDNF9zZXRfa2V5CisrI2RlZmluZSBDQVNUX3NldF9r ZXkJcHJpdmF0ZV9DQVNUX3NldF9rZXkKKysjZGVmaW5lIFJDNV8zMl9zZXRfa2V5CXByaXZhdGVf UkM1XzMyX3NldF9rZXkKKysjZGVmaW5lIEJGX3NldF9rZXkJcHJpdmF0ZV9CRl9zZXRfa2V5Cisr I2RlZmluZSBTRUVEX3NldF9rZXkJcHJpdmF0ZV9TRUVEX3NldF9rZXkKKysjZGVmaW5lIENhbWVs bGlhX3NldF9rZXkgcHJpdmF0ZV9DYW1lbGxpYV9zZXRfa2V5CisrI2RlZmluZSBpZGVhX3NldF9l bmNyeXB0X2tleSBwcml2YXRlX2lkZWFfc2V0X2VuY3J5cHRfa2V5CisrCisrI2RlZmluZSBNRDVf SW5pdAlwcml2YXRlX01ENV9Jbml0CisrI2RlZmluZSBNRDRfSW5pdAlwcml2YXRlX01ENF9Jbml0 CisrI2RlZmluZSBNRDJfSW5pdAlwcml2YXRlX01EMl9Jbml0CisrI2RlZmluZSBNREMyX0luaXQJ cHJpdmF0ZV9NREMyX0luaXQKKysjZGVmaW5lIFNIQV9Jbml0CXByaXZhdGVfU0hBX0luaXQKKysj ZGVmaW5lIFJJUEVNRDE2MF9Jbml0CXByaXZhdGVfUklQRU1EMTYwX0luaXQKKysjZGVmaW5lIFdI SVJMUE9PTF9Jbml0CXByaXZhdGVfV0hJUkxQT09MX0luaXQKKysKKysjZW5kaWYKKyAKKyBzdHJ1 Y3QgZXZwX3BrZXlfY3R4X3N0CisgCXsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2 cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fZHNzLmMKKy0tLSBvcGVu c3NsLTEuMC4wL2NyeXB0by9ldnAvbV9kc3MuYy5maXBzCTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAw MDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fZHNzLmMJMjAxMC0w My0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBj b25zdCBFVlBfTUQgZHNhX21kPQorIAlOSURfZHNhV2l0aFNIQSwKKyAJTklEX2RzYVdpdGhTSEEs CisgCVNIQV9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURfRkxBR19QS0VZX0RJR0VTVCwKKysJRVZQ X01EX0ZMQUdfUEtFWV9ESUdFU1R8RVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdCwKKyAJdXBkYXRl LAorIAlmaW5hbCwKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX2RzczEuYy5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX2RzczEuYworLS0tIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2V2cC9tX2RzczEuYy5maXBzCTIwMDYtMDQtMTkgMTk6MDU6NTcuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fZHNzMS5jCTIwMTAtMDMtMzAgMTA6 MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgY29uc3QgRVZQ X01EIGRzczFfbWQ9CisgCU5JRF9kc2EsCisgCU5JRF9kc2FXaXRoU0hBMSwKKyAJU0hBX0RJR0VT VF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAorKwlFVlBfTURfRkxBR19QS0VZ X0RJR0VTVHxFVlBfTURfRkxBR19GSVBTLAorIAlpbml0LAorIAl1cGRhdGUsCisgCWZpbmFsLAor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fbWRjMi5jLmZpcHMgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL21fbWRjMi5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21f bWRjMi5jLmZpcHMJMjAxMC0wMi0wMiAxNDozNjowNS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVu c3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZGMyLmMJMjAxMC0wMy0zMCAxMDo1NzowMi4wMDAwMDAw MDAgKzAyMDAKK0BAIC02OCw2ICs2OCw3IEBACisgI2lmbmRlZiBPUEVOU1NMX05PX1JTQQorICNp bmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorICNlbmRpZgorKyNpbmNsdWRlICJldnBfbG9jbC5oIgor IAorIHN0YXRpYyBpbnQgaW5pdChFVlBfTURfQ1RYICpjdHgpCisgCXsgcmV0dXJuIE1EQzJfSW5p dChjdHgtPm1kX2RhdGEpOyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9t ZDIuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kMi5jCistLS0gb3BlbnNzbC0x LjAuMC9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcwkyMDA1LTA3LTE2IDE0OjM3OjMyLjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kMi5jCTIwMTAtMDMtMzAg MTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNjgsNiArNjgsNyBAQAorICNpZm5kZWYgT1BF TlNTTF9OT19SU0EKKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjZW5kaWYKKysjaW5jbHVk ZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7 IHJldHVybiBNRDJfSW5pdChjdHgtPm1kX2RhdGEpOyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4w L2NyeXB0by9ldnAvbV9tZDQuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21kNC5j CistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fbWQ0LmMuZmlwcwkyMDA1LTA3LTE2IDE0 OjM3OjMyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX21k NC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNjgsNiArNjgsNyBA QAorICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAj ZW5kaWYKKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01E X0NUWCAqY3R4KQorIAl7IHJldHVybiBNRDRfSW5pdChjdHgtPm1kX2RhdGEpOyB9CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9tZDUuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2V2cC9tX21kNS5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fbWQ1LmMuZmlw cwkyMDA1LTA3LTE2IDE0OjM3OjMyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2V2cC9tX21kNS5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitA QCAtNjgsNiArNjgsNyBAQAorICNpZm5kZWYgT1BFTlNTTF9OT19SU0EKKyAjaW5jbHVkZSA8b3Bl bnNzbC9yc2EuaD4KKyAjZW5kaWYKKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMg aW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBNRDVfSW5pdChjdHgtPm1kX2Rh dGEpOyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9yaXBlbWQuYy5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX3JpcGVtZC5jCistLS0gb3BlbnNzbC0xLjAuMC9j cnlwdG8vZXZwL21fcmlwZW1kLmMuZmlwcwkyMDA1LTA3LTE2IDE0OjM3OjMyLjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX3JpcGVtZC5jCTIwMTAtMDMtMzAg MTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNjgsNiArNjgsNyBAQAorICNpZm5kZWYgT1BF TlNTTF9OT19SU0EKKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjZW5kaWYKKysjaW5jbHVk ZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIAl7 IHJldHVybiBSSVBFTUQxNjBfSW5pdChjdHgtPm1kX2RhdGEpOyB9CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAv bV9zaGExLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcwkyMDA4 LTAzLTEyIDIyOjE0OjI0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2V2cC9tX3NoYTEuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTgy LDcgKzgyLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGExX21kPQorIAlOSURfc2hhMSwKKyAJ TklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwKKyAJU0hBX0RJR0VTVF9MRU5HVEgsCistCUVWUF9N RF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQs CisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJ RF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19GSVBTLAorIAlpbml0LAorIAl1cGRhdGUsCisgCWZp bmFsLAorQEAgLTExOSw3ICsxMjAsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTIyNF9tZD0K KyAJTklEX3NoYTIyNCwKKyAJTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEEyMjRf RElHRVNUX0xFTkdUSCwKKy0JRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9N RF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFU VVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisg CWluaXQyMjQsCisgCXVwZGF0ZTI1NiwKKyAJZmluYWwyNTYsCitAQCAtMTM4LDcgKzE0MCw4IEBA IHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjU2X21kPQorIAlOSURfc2hhMjU2LAorIAlOSURfc2hh MjU2V2l0aFJTQUVuY3J5cHRpb24sCisgCVNIQTI1Nl9ESUdFU1RfTEVOR1RILAorLQlFVlBfTURf RkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAor KwlFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkV8RVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5UfAorKwkJRVZQX01EX0ZMQUdfRklQUywKKyAJaW5pdDI1NiwKKyAJdXBkYXRlMjU2LAor IAlmaW5hbDI1NiwKK0BAIC0xNjksNyArMTcyLDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEz ODRfbWQ9CisgCU5JRF9zaGEzODQsCisgCU5JRF9zaGEzODRXaXRoUlNBRW5jcnlwdGlvbiwKKyAJ U0hBMzg0X0RJR0VTVF9MRU5HVEgsCistCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVS RXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrCUVWUF9NRF9GTEFHX1BLRVlfTUVUSE9E X1NJR05BVFVSRXxFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlR8CisrCQlFVlBfTURfRkxBR19G SVBTLAorIAlpbml0Mzg0LAorIAl1cGRhdGU1MTIsCisgCWZpbmFsNTEyLAorQEAgLTE4OCw3ICsx OTIsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTUxMl9tZD0KKyAJTklEX3NoYTUxMiwKKyAJ TklEX3NoYTUxMldpdGhSU0FFbmNyeXB0aW9uLAorIAlTSEE1MTJfRElHRVNUX0xFTkdUSCwKKy0J RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FC U0VOVCwKKysJRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFfEVWUF9NRF9GTEFHX0RJ R0FMR0lEX0FCU0VOVHwKKysJCUVWUF9NRF9GTEFHX0ZJUFMsCisgCWluaXQ1MTIsCisgCXVwZGF0 ZTUxMiwKKyAJZmluYWw1MTIsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbV93 cC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL21fd3AuYworLS0tIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2V2cC9tX3dwLmMuZmlwcwkyMDA1LTExLTMwIDIxOjU3OjIzLjAwMDAwMDAwMCAr MDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9tX3dwLmMJMjAxMC0wMy0zMCAxMDoz Mzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC05LDYgKzksNyBAQAorICNpbmNsdWRlIDxvcGVuc3Ns L29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvd2hybHBvb2wuaD4KKysjaW5jbHVkZSAiZXZwX2xvY2wuaCIKKyAKKyBzdGF0aWMgaW50IGlu aXQoRVZQX01EX0NUWCAqY3R4KQorIAl7IHJldHVybiBXSElSTFBPT0xfSW5pdChjdHgtPm1kX2Rh dGEpOyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9ldnAvbmFtZXMuYy5maXBzIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9uYW1lcy5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8v ZXZwL25hbWVzLmMuZmlwcwkyMDEwLTAzLTA2IDIxOjQ3OjQ1LjAwMDAwMDAwMCArMDEwMAorKysr IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9uYW1lcy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAw MDAwMDAwICswMjAwCitAQCAtNjYsNiArNjYsMTAgQEAgaW50IEVWUF9hZGRfY2lwaGVyKGNvbnN0 IEVWUF9DSVBIRVIgKmMpCisgCXsKKyAJaW50IHI7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KwlPUEVOU1NMX2luaXRfbGlicmFyeSgpOworKyNlbmRpZgorKworIAlyPU9CSl9OQU1FX2FkZChP QkpfbmlkMnNuKGMtPm5pZCksT0JKX05BTUVfVFlQRV9DSVBIRVJfTUVUSCwoY29uc3QgY2hhciAq KWMpOworIAlpZiAociA9PSAwKSByZXR1cm4oMCk7CisgCWNoZWNrX2RlZmVyKGMtPm5pZCk7CitA QCAtNzksNiArODMsMTAgQEAgaW50IEVWUF9hZGRfZGlnZXN0KGNvbnN0IEVWUF9NRCAqbWQpCisg CWludCByOworIAljb25zdCBjaGFyICpuYW1lOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJ T1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysjZW5kaWYKKysKKyAJbmFtZT1PQkpfbmlkMnNuKG1k LT50eXBlKTsKKyAJcj1PQkpfTkFNRV9hZGQobmFtZSxPQkpfTkFNRV9UWVBFX01EX01FVEgsKGNv bnN0IGNoYXIgKiltZCk7CisgCWlmIChyID09IDApIHJldHVybigwKTsKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2 cC9wX3NpZ24uYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzCTIw MDYtMDUtMjQgMTU6Mjk6MzAuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlw dG8vZXZwL3Bfc2lnbi5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAt NjEsNiArNjEsNyBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNpbmNsdWRlIDxvcGVu c3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvcnNhLmg+CisgCisgI2lmZGVmIHVuZGVmCisgdm9pZCBFVlBfU2lnbkluaXQoRVZQX01E X0NUWCAqY3R4LCBFVlBfTUQgKnR5cGUpCitAQCAtMTAxLDYgKzEwMiwyMiBAQCBpbnQgRVZQX1Np Z25GaW5hbChFVlBfTURfQ1RYICpjdHgsIHVuc2lnCisgCQkJZ290byBlcnI7CisgCQlpZiAoRVZQ X1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorIAkJ CWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEp CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BB RERJTkcpIDw9IDApCisrCQkJCWdvdG8gZXJyOworKwkJaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURf Q1RYX0ZMQUdfUEFEX1BTUykKKysJCQl7CisrCQkJaW50IHNhbHRsZW47CisrCQkJaWYgKEVWUF9Q S0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9QS0NTMV9QU1NfUEFERElORykgPD0g MCkKKysJCQkJZ290byBlcnI7CisrCQkJc2FsdGxlbiA9IE1fRVZQX01EX0NUWF9GTEFHX1BTU19T QUxUKGN0eCk7CisrCQkJaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTikK KysJCQkJc2FsdGxlbiA9IC0xOworKwkJCWVsc2UgaWYgKHNhbHRsZW4gPT0gRVZQX01EX0NUWF9G TEFHX1BTU19NUkVDKQorKwkJCQlzYWx0bGVuID0gLTI7CisrCQkJaWYgKEVWUF9QS0VZX0NUWF9z ZXRfcnNhX3Bzc19zYWx0bGVuKHBrY3R4LCBzYWx0bGVuKSA8PSAwKQorKwkJCQlnb3RvIGVycjsK KysJCQl9CisgCQlpZiAoRVZQX1BLRVlfc2lnbihwa2N0eCwgc2lncmV0LCAmc2x0bXAsIG0sIG1f bGVuKSA8PSAwKQorIAkJCWdvdG8gZXJyOworIAkJKnNpZ2xlbiA9IHNsdG1wOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9ldnAvcF92ZXJpZnkuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2V2cC9wX3Zlcmlm eS5jLmZpcHMJMjAwOC0xMS0xMiAwNDo1ODowMS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9ldnAvcF92ZXJpZnkuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAw MCArMDIwMAorQEAgLTYxLDYgKzYxLDcgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyAj aW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorIAorIGludCBFVlBfVmVyaWZ5RmluYWwoRVZQX01E X0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWdidWYsCisgCSAgICAgdW5zaWduZWQg aW50IHNpZ2xlbiwgRVZQX1BLRVkgKnBrZXkpCitAQCAtODYsNiArODcsMjIgQEAgaW50IEVWUF9W ZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbgorIAkJCWdvdG8gZXJyOworIAkJaWYgKEVW UF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKKyAJ CQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMx KQorKwkJCWlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9Q QURESU5HKSA8PSAwKQorKwkJCQlnb3RvIGVycjsKKysJCWlmIChjdHgtPmZsYWdzICYgRVZQX01E X0NUWF9GTEFHX1BBRF9QU1MpCisrCQkJeworKwkJCWludCBzYWx0bGVuOworKwkJCWlmIChFVlBf UEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9 IDApCisrCQkJCWdvdG8gZXJyOworKwkJCXNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxBR19QU1Nf U0FMVChjdHgpOworKwkJCWlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4p CisrCQkJCXNhbHRsZW4gPSAtMTsKKysJCQllbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhf RkxBR19QU1NfTVJFQykKKysJCQkJc2FsdGxlbiA9IC0yOworKwkJCWlmIChFVlBfUEtFWV9DVFhf c2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKKysJCQkJZ290byBlcnI7 CisrCQkJfQorIAkJaSA9IEVWUF9QS0VZX3ZlcmlmeShwa2N0eCwgc2lnYnVmLCBzaWdsZW4sIG0s IG1fbGVuKTsKKyAJCWVycjoKKyAJCUVWUF9QS0VZX0NUWF9mcmVlKHBrY3R4KTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Flc2F2cy5jLmZpcHMgb3BlbnNz bC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfYWVzYXZzLmMKKy0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by9maXBzL2NhdnMvZmlwc19hZXNhdnMuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNf YWVzYXZzLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEs OTM5IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5T 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 QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysgIE5JU1QgQUVTIEFsZ29yaXRobSBWYWxpZGF0 aW9uIFN1aXRlCisrICBUZXN0IFByb2dyYW0KKysKKysgIERvbmF0ZWQgdG8gT3BlblNTTCBieToK KysgIFYtT05FIENvcnBvcmF0aW9uCisrICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAor KyAgR2VybWFudG93biwgTUQgMjA4NzQKKysgIFUuUy5BLgorKyAgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+Cisr I2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZXJy bm8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvYm4uaD4KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSAi ZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBBRVMgc3VwcG9ydFxuIik7 CisrICAgIHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrI2RlZmluZSBBRVNfQkxPQ0tfU0la RSAxNgorKworKyNkZWZpbmUgVkVSQk9TRSAwCisrCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisraW50IEFFU1Rlc3QoRVZQX0NJUEhFUl9D VFggKmN0eCwKKysJICAgIGNoYXIgKmFtb2RlLCBpbnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICph S2V5LCAKKysJICAgIHVuc2lnbmVkIGNoYXIgKmlWZWMsIAorKwkgICAgaW50IGRpciwgIC8qIDAg PSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkgICAgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0 LCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LCBpbnQgbGVuKQorKyAgICB7CisrICAgIGNvbnN0 IEVWUF9DSVBIRVIgKmNpcGhlciA9IE5VTEw7CisrCisrICAgIGlmIChzdHJjYXNlY21wKGFtb2Rl LCAiQ0JDIikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4 OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2JjKCk7CisrCQlicmVhazsKKysKKysJCWNhc2Ug MTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2JjKCk7CisrCQlicmVhazsKKysKKysJCWNh c2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18yNTZfY2JjKCk7CisrCQlicmVhazsKKysJCX0K KysKKysJfQorKyAgICBlbHNlIGlmIChzdHJjYXNlY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJ eworKwlzd2l0Y2ggKGFrZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQ X2Flc18xMjhfZWNiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0g RVZQX2Flc18xOTJfZWNiKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVy ID0gRVZQX2Flc18yNTZfZWNiKCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlIGlm IChzdHJjYXNlY21wKGFtb2RlLCAiQ0ZCMTI4IikgPT0gMCkKKysJeworKwlzd2l0Y2ggKGFrZXlz eikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiMTI4KCk7 CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJY2lwaGVyID0gRVZQX2Flc18xOTJfY2Zi MTI4KCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMjU2OgorKwkJY2lwaGVyID0gRVZQX2Flc18y NTZfY2ZiMTI4KCk7CisrCQlicmVhazsKKysJCX0KKysKKysJfQorKyAgICBlbHNlIGlmIChzdHJu Y2FzZWNtcChhbW9kZSwgIk9GQiIsIDMpID09IDApCisrCXsKKysJc3dpdGNoIChha2V5c3opCisr CQl7CisrCQljYXNlIDEyODoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTI4X29mYigpOworKwkJYnJl YWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX29mYigpOworKwkJ YnJlYWs7CisrCisrCQljYXNlIDI1NjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X29mYigpOwor KwkJYnJlYWs7CisrCQl9CisrCX0KKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZC MSIpKQorKwl7CisrCXN3aXRjaCAoYWtleXN6KQorKwkJeworKwkJY2FzZSAxMjg6CisrCQljaXBo ZXIgPSBFVlBfYWVzXzEyOF9jZmIxKCk7CisrCQlicmVhazsKKysKKysJCWNhc2UgMTkyOgorKwkJ Y2lwaGVyID0gRVZQX2Flc18xOTJfY2ZiMSgpOworKwkJYnJlYWs7CisrCisrCQljYXNlIDI1NjoK KysJCWNpcGhlciA9IEVWUF9hZXNfMjU2X2NmYjEoKTsKKysJCWJyZWFrOworKwkJfQorKwl9Cisr ICAgIGVsc2UgaWYoIXN0cmNhc2VjbXAoYW1vZGUsIkNGQjgiKSkKKysJeworKwlzd2l0Y2ggKGFr ZXlzeikKKysJCXsKKysJCWNhc2UgMTI4OgorKwkJY2lwaGVyID0gRVZQX2Flc18xMjhfY2ZiOCgp OworKwkJYnJlYWs7CisrCisrCQljYXNlIDE5MjoKKysJCWNpcGhlciA9IEVWUF9hZXNfMTkyX2Nm YjgoKTsKKysJCWJyZWFrOworKworKwkJY2FzZSAyNTY6CisrCQljaXBoZXIgPSBFVlBfYWVzXzI1 Nl9jZmI4KCk7CisrCQlicmVhazsKKysJCX0KKysJfQorKyAgICBlbHNlCisrCXsKKysJcHJpbnRm KCJVbmtub3duIG1vZGU6ICVzXG4iLCBhbW9kZSk7CisrCXJldHVybiAwOworKwl9CisrICAgIGlm ICghY2lwaGVyKQorKwl7CisrCXByaW50ZigiSW52YWxpZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlz eik7CisrCXJldHVybiAwOyAKKysJfQorKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBj aXBoZXIsIE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0gMCkKKysJcmV0dXJuIDA7CisrICAgIGlm KCFzdHJjYXNlY21wKGFtb2RlLCJDRkIxIikpCisrCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdz KGN0eCwgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7CisrICAgIGlmIChkaXIpCisrCQlFVlBf Q2lwaGVyKGN0eCwgY2lwaGVydGV4dCwgcGxhaW50ZXh0LCBsZW4pOworKwllbHNlCisrCQlFVlBf Q2lwaGVyKGN0eCwgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKyAgICByZXR1cm4gMTsK KysgICAgfQorKworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLworK2NoYXIgKnRfdGFnWzJdID0geyJQTEFJTlRFWFQiLCAiQ0lQSEVSVEVYVCJ9Owor K2NoYXIgKnRfbW9kZVs2XSA9IHsiQ0JDIiwiRUNCIiwiT0ZCIiwiQ0ZCMSIsIkNGQjgiLCJDRkIx MjgifTsKKytlbnVtIE1vZGUge0NCQywgRUNCLCBPRkIsIENGQjEsIENGQjgsIENGQjEyOH07Cisr ZW51bSBYQ3J5cHQge1hERUNSWVBULCBYRU5DUllQVH07CisrCisrLyo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PSovCisrLyogIE1vbnRlIENhcmxvIFRlc3RzICAgICAgICAgICovCisrLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrLyojZGVmaW5lIGdiKGEsYikgKCgo YSlbKGIpLzhdID4+ICgoYiklOCkpJjEpKi8KKysvKiNkZWZpbmUgc2IoYSxiLHYpICgoYSlbKGIp LzhdPSgoYSlbKGIpLzhdJn4oMSA8PCAoKGIpJTgpKSl8KCEhKHYpIDw8ICgoYiklOCkpKSovCisr CisrI2RlZmluZSBnYihhLGIpICgoKGEpWyhiKS84XSA+PiAoNy0oYiklOCkpJjEpCisrI2RlZmlu ZSBzYihhLGIsdikgKChhKVsoYikvOF09KChhKVsoYikvOF0mfigxIDw8ICg3LShiKSU4KSkpfCgh ISh2KSA8PCAoNy0oYiklOCkpKQorKworK2ludCBkb19tY3QoY2hhciAqYW1vZGUsIAorKwkgICBp bnQgYWtleXN6LCB1bnNpZ25lZCBjaGFyICphS2V5LHVuc2lnbmVkIGNoYXIgKmlWZWMsCisrCSAg IGludCBkaXIsIHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCBsZW4sCisrCSAgIEZJTEUgKnJmcCkK KysgICAgeworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbMTAxXVsz Ml07CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbMTAxXVtBRVNfQkxPQ0tfU0laRV07CisrICAgIHVu c2lnbmVkIGNoYXIgcHRleHRbMTAwMV1bMzJdOworKyAgICB1bnNpZ25lZCBjaGFyIGN0ZXh0WzEw MDFdWzMyXTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzY0KzRdOworKyAgICBpbnQg aSwgaiwgbiwgbjEsIG4yOworKyAgICBpbnQgaW1vZGUgPSAwLCBua2V5c3ogPSBha2V5c3ovODsK KysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgp OworKworKyAgICBpZiAobGVuID4gMzIpCisrCXsKKysJcHJpbnRmKCJcbj4+Pj4gTGVuZ3RoIGV4 Y2VlZHMgMzIgZm9yICVzICVkIDw8PDxcblxuIiwgCisrCSAgICAgICBhbW9kZSwgYWtleXN6KTsK KysJcmV0dXJuIC0xOworKwl9CisrICAgIGZvciAoaW1vZGUgPSAwOyBpbW9kZSA8IDY7ICsraW1v ZGUpCisrCWlmIChzdHJjbXAoYW1vZGUsIHRfbW9kZVtpbW9kZV0pID09IDApCisrCSAgICBicmVh azsKKysgICAgaWYgKGltb2RlID09IDYpCisrCXsgCisrCXByaW50ZigiVW5yZWNvZ25pemVkIG1v ZGU6ICVzXG4iLCBhbW9kZSk7CisrCXJldHVybiAtMTsKKysJfQorKworKyAgICBtZW1jcHkoa2V5 WzBdLCBhS2V5LCBua2V5c3opOworKyAgICBpZiAoaVZlYykKKysJbWVtY3B5KGl2WzBdLCBpVmVj LCBBRVNfQkxPQ0tfU0laRSk7CisrICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCW1lbWNweShw dGV4dFswXSwgdGV4dCwgbGVuKTsKKysgICAgZWxzZQorKwltZW1jcHkoY3RleHRbMF0sIHRleHQs IGxlbik7CisrICAgIGZvciAoaSA9IDA7IGkgPCAxMDA7ICsraSkKKysJeworKwkvKiBwcmludGYo Ikl0ZXJhdGlvbiAlZFxuIiwgaSk7ICovCisrCWlmIChpID4gMCkKKysJICAgIHsKKysJICAgIGZw cmludGYocmZwLCJDT1VOVCA9ICVkXG4iLGkpOworKwkgICAgT3V0cHV0VmFsdWUoIktFWSIsa2V5 W2ldLG5rZXlzeixyZnAsMCk7CisrCSAgICBpZiAoaW1vZGUgIT0gRUNCKSAgLyogRUNCICovCisr CQlPdXRwdXRWYWx1ZSgiSVYiLGl2W2ldLEFFU19CTE9DS19TSVpFLHJmcCwwKTsKKysJICAgIC8q IE91dHB1dCBDaXBoZXJ0ZXh0IHwgUGxhaW50ZXh0ICovCisrCSAgICBPdXRwdXRWYWx1ZSh0X3Rh Z1tkaXJeMV0sZGlyID8gcHRleHRbMF0gOiBjdGV4dFswXSxsZW4scmZwLAorKwkJCWltb2RlID09 IENGQjEpOworKwkgICAgfQorKwlmb3IgKGogPSAwOyBqIDwgMTAwMDsgKytqKQorKwkgICAgewor KwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsKKysJICAgIGNhc2UgRUNCOgorKwkJaWYgKGogPT0g MCkKKysJCSAgICB7IC8qIHNldCB1cCBlbmNyeXB0aW9uICovCisrCQkgICAgcmV0ID0gQUVTVGVz dCgmY3R4LCBhbW9kZSwgYWtleXN6LCBrZXlbaV0sIE5VTEwsIAorKwkJCQkgIGRpciwgIC8qIDAg PSBkZWNyeXB0LCAxID0gZW5jcnlwdCAqLworKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVu KTsKKysJCSAgICBpZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCW1lbWNweShwdGV4dFtqKzFdLCBj dGV4dFtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVtY3B5KGN0ZXh0W2orMV0sIHB0ZXh0 W2pdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgaWYgKGRpciA9 PSBYRU5DUllQVCkKKysJCQl7CisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRb al0sIGxlbik7CisrCQkJbWVtY3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2pdLCBsZW4pOworKwkJCX0K KysJCSAgICBlbHNlCisrCQkJeworKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0 W2pdLCBsZW4pOworKwkJCW1lbWNweShjdGV4dFtqKzFdLCBwdGV4dFtqXSwgbGVuKTsKKysJCQl9 CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZC OiAgCisrCSAgICBjYXNlIENGQjEyODoKKysJCWlmIChqID09IDApCisrCQkgICAgeworKwkJICAg IHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwga2V5W2ldLCBpdltpXSwgCisrCQkJ CSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcHRleHRbal0s IGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJbWVtY3B5 KHB0ZXh0W2orMV0sIGl2W2ldLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRb aisxXSwgaXZbaV0sIGxlbik7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBp ZiAoZGlyID09IFhFTkNSWVBUKQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIGN0ZXh0W2pd LCBwdGV4dFtqXSwgbGVuKTsKKysJCQltZW1jcHkocHRleHRbaisxXSwgY3RleHRbai0xXSwgbGVu KTsKKysJCQl9CisrCQkgICAgZWxzZQorKwkJCXsKKysJCQlFVlBfQ2lwaGVyKCZjdHgsIHB0ZXh0 W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0xXSwg bGVuKTsKKysJCQl9CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENGQjg6Cisr CQlpZiAoaiA9PSAwKQorKwkJICAgIHsKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsIGFtb2Rl LCBha2V5c3osIGtleVtpXSwgaXZbaV0sIAorKwkJCQkgIGRpciwgIC8qIDAgPSBkZWNyeXB0LCAx ID0gZW5jcnlwdCAqLworKwkJCQkgIHB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsKKysJCSAgICB9 CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkJRVZQ X0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAgZWxzZQorKwkJ CUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwkJICAgIH0KKysJ CWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCQkgICAgeworKwkJICAgIGlmIChqIDwgMTYpCisrCQkJ bWVtY3B5KHB0ZXh0W2orMV0sICZpdltpXVtqXSwgbGVuKTsKKysJCSAgICBlbHNlCisrCQkJbWVt Y3B5KHB0ZXh0W2orMV0sIGN0ZXh0W2otMTZdLCBsZW4pOworKwkJICAgIH0KKysJCWVsc2UKKysJ CSAgICB7CisrCQkgICAgaWYgKGogPCAxNikKKysJCQltZW1jcHkoY3RleHRbaisxXSwgJml2W2ld W2pdLCBsZW4pOworKwkJICAgIGVsc2UKKysJCQltZW1jcHkoY3RleHRbaisxXSwgcHRleHRbai0x Nl0sIGxlbik7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCisrCSAgICBjYXNlIENGQjE6CisrCQlp ZihqID09IDApCisrCQkgICAgeworKyNpZiAwCisrCQkgICAgLyogY29tcGVuc2F0ZSBmb3Igd3Jv bmcgZW5kaWFubmVzcyBvZiBpbnB1dCBmaWxlICovCisrCQkgICAgaWYoaSA9PSAwKQorKwkJCXB0 ZXh0WzBdWzBdPDw9NzsKKysjZW5kaWYKKysJCSAgICByZXQgPSBBRVNUZXN0KCZjdHgsYW1vZGUs YWtleXN6LGtleVtpXSxpdltpXSxkaXIsCisrCQkJCXB0ZXh0W2pdLCBjdGV4dFtqXSwgbGVuKTsK KysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGlmIChkaXIgPT0gWEVOQ1JZUFQp CisrCQkJRVZQX0NpcGhlcigmY3R4LCBjdGV4dFtqXSwgcHRleHRbal0sIGxlbik7CisrCQkgICAg ZWxzZQorKwkJCUVWUF9DaXBoZXIoJmN0eCwgcHRleHRbal0sIGN0ZXh0W2pdLCBsZW4pOworKwor KwkJICAgIH0KKysJCWlmKGRpciA9PSBYRU5DUllQVCkKKysJCSAgICB7CisrCQkgICAgaWYoaiA8 IDEyOCkKKysJCQlzYihwdGV4dFtqKzFdLDAsZ2IoaXZbaV0saikpOworKwkJICAgIGVsc2UKKysJ CQlzYihwdGV4dFtqKzFdLDAsZ2IoY3RleHRbai0xMjhdLDApKTsKKysJCSAgICB9CisrCQllbHNl CisrCQkgICAgeworKwkJICAgIGlmKGogPCAxMjgpCisrCQkJc2IoY3RleHRbaisxXSwwLGdiKGl2 W2ldLGopKTsKKysJCSAgICBlbHNlCisrCQkJc2IoY3RleHRbaisxXSwwLGdiKHB0ZXh0W2otMTI4 XSwwKSk7CisrCQkgICAgfQorKwkJYnJlYWs7CisrCQl9CisrCSAgICB9CisrCS0tajsgLyogcmVz ZXQgdG8gbGFzdCBvZiByYW5nZSAqLworKwkvKiBPdXRwdXQgQ2lwaGVydGV4dCB8IFBsYWludGV4 dCAqLworKwlPdXRwdXRWYWx1ZSh0X3RhZ1tkaXJdLGRpciA/IGN0ZXh0W2pdIDogcHRleHRbal0s bGVuLHJmcCwKKysJCSAgICBpbW9kZSA9PSBDRkIxKTsKKysJZnByaW50ZihyZnAsICJcbiIpOyAg LyogYWRkIHNlcGFyYXRvciAqLworKworKwkvKiBDb21wdXRlIG5leHQgS0VZICovCisrCWlmIChk aXIgPT0gWEVOQ1JZUFQpCisrCSAgICB7CisrCSAgICBpZiAoaW1vZGUgPT0gQ0ZCOCkKKysJCXsg LyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAuLi4gfHwgQ1Rbal0gKi8KKysJCWZvciAo bjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlzejsgKytuMSwgLS1uMikKKysJCSAgICBj aXBoZXJ0ZXh0W24xXSA9IGN0ZXh0W2otbjJdWzBdOworKwkJfQorKwkgICAgZWxzZSBpZihpbW9k ZSA9PSBDRkIxKQorKwkJeworKwkJZm9yKG4xPTAsbjI9YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7 ICsrbjEsLS1uMikKKysJCSAgICBzYihjaXBoZXJ0ZXh0LG4xLGdiKGN0ZXh0W2otbjJdLDApKTsK KysJCX0KKysJICAgIGVsc2UKKysJCXN3aXRjaCAoYWtleXN6KQorKwkJICAgIHsKKysJCWNhc2Ug MTI4OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtqXSwgMTYpOworKwkJICAgIGJy ZWFrOworKwkJY2FzZSAxOTI6CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQsIGN0ZXh0W2otMV0r OCwgOCk7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrOCwgY3RleHRbal0sIDE2KTsKKysJCSAg ICBicmVhazsKKysJCWNhc2UgMjU2OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBjdGV4dFtq LTFdLCAxNik7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQrMTYsIGN0ZXh0W2pdLCAxNik7Cisr CQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkgICAgfQorKwllbHNlCisrCSAgICB7CisrCSAgICBp ZiAoaW1vZGUgPT0gQ0ZCOCkKKysJCXsgLyogY3QgPSBDVFtqLTE1XSB8fCBDVFtqLTE0XSB8fCAu Li4gfHwgQ1Rbal0gKi8KKysJCWZvciAobjEgPSAwLCBuMiA9IG5rZXlzei0xOyBuMSA8IG5rZXlz ejsgKytuMSwgLS1uMikKKysJCSAgICBjaXBoZXJ0ZXh0W24xXSA9IHB0ZXh0W2otbjJdWzBdOwor KwkJfQorKwkgICAgZWxzZSBpZihpbW9kZSA9PSBDRkIxKQorKwkJeworKwkJZm9yKG4xPTAsbjI9 YWtleXN6LTEgOyBuMSA8IGFrZXlzeiA7ICsrbjEsLS1uMikKKysJCSAgICBzYihjaXBoZXJ0ZXh0 LG4xLGdiKHB0ZXh0W2otbjJdLDApKTsKKysJCX0KKysJICAgIGVsc2UKKysJCXN3aXRjaCAoYWtl eXN6KQorKwkJICAgIHsKKysJCWNhc2UgMTI4OgorKwkJICAgIG1lbWNweShjaXBoZXJ0ZXh0LCBw dGV4dFtqXSwgMTYpOworKwkJICAgIGJyZWFrOworKwkJY2FzZSAxOTI6CisrCQkgICAgbWVtY3B5 KGNpcGhlcnRleHQsIHB0ZXh0W2otMV0rOCwgOCk7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRleHQr OCwgcHRleHRbal0sIDE2KTsKKysJCSAgICBicmVhazsKKysJCWNhc2UgMjU2OgorKwkJICAgIG1l bWNweShjaXBoZXJ0ZXh0LCBwdGV4dFtqLTFdLCAxNik7CisrCQkgICAgbWVtY3B5KGNpcGhlcnRl eHQrMTYsIHB0ZXh0W2pdLCAxNik7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkgICAgfQor KwkvKiBDb21wdXRlIG5leHQga2V5OiBLZXlbaSsxXSA9IEtleVtpXSB4b3IgY3QgKi8KKysJZm9y IChuID0gMDsgbiA8IG5rZXlzejsgKytuKQorKwkgICAga2V5W2krMV1bbl0gPSBrZXlbaV1bbl0g XiBjaXBoZXJ0ZXh0W25dOworKwkKKysJLyogQ29tcHV0ZSBuZXh0IElWIGFuZCB0ZXh0ICovCisr CWlmIChkaXIgPT0gWEVOQ1JZUFQpCisrCSAgICB7CisrCSAgICBzd2l0Y2ggKGltb2RlKQorKwkJ eworKwkgICAgY2FzZSBFQ0I6CisrCQltZW1jcHkocHRleHRbMF0sIGN0ZXh0W2pdLCBBRVNfQkxP Q0tfU0laRSk7CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0JDOgorKwkgICAgY2FzZSBPRkI6Cisr CSAgICBjYXNlIENGQjEyODoKKysJCW1lbWNweShpdltpKzFdLCBjdGV4dFtqXSwgQUVTX0JMT0NL X1NJWkUpOworKwkJbWVtY3B5KHB0ZXh0WzBdLCBjdGV4dFtqLTFdLCBBRVNfQkxPQ0tfU0laRSk7 CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCODoKKysJCS8qIElWW2krMV0gPSBjdCAqLworKwkJ Zm9yIChuMSA9IDAsIG4yID0gMTU7IG4xIDwgMTY7ICsrbjEsIC0tbjIpCisrCQkgICAgaXZbaSsx XVtuMV0gPSBjdGV4dFtqLW4yXVswXTsKKysJCXB0ZXh0WzBdWzBdID0gY3RleHRbai0xNl1bMF07 CisrCQlicmVhazsKKysJICAgIGNhc2UgQ0ZCMToKKysJCWZvcihuMT0wLG4yPTEyNyA7IG4xIDwg MTI4IDsgKytuMSwtLW4yKQorKwkJICAgIHNiKGl2W2krMV0sbjEsZ2IoY3RleHRbai1uMl0sMCkp OworKwkJcHRleHRbMF1bMF09Y3RleHRbai0xMjhdWzBdJjB4ODA7CisrCQlicmVhazsKKysJCX0K KysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAgc3dpdGNoIChpbW9kZSkKKysJCXsKKysJ ICAgIGNhc2UgRUNCOgorKwkJbWVtY3B5KGN0ZXh0WzBdLCBwdGV4dFtqXSwgQUVTX0JMT0NLX1NJ WkUpOworKwkJYnJlYWs7CisrCSAgICBjYXNlIENCQzoKKysJICAgIGNhc2UgT0ZCOgorKwkgICAg Y2FzZSBDRkIxMjg6CisrCQltZW1jcHkoaXZbaSsxXSwgcHRleHRbal0sIEFFU19CTE9DS19TSVpF KTsKKysJCW1lbWNweShjdGV4dFswXSwgcHRleHRbai0xXSwgQUVTX0JMT0NLX1NJWkUpOworKwkJ YnJlYWs7CisrCSAgICBjYXNlIENGQjg6CisrCQlmb3IgKG4xID0gMCwgbjIgPSAxNTsgbjEgPCAx NjsgKytuMSwgLS1uMikKKysJCSAgICBpdltpKzFdW24xXSA9IHB0ZXh0W2otbjJdWzBdOworKwkJ Y3RleHRbMF1bMF0gPSBwdGV4dFtqLTE2XVswXTsKKysJCWJyZWFrOworKwkgICAgY2FzZSBDRkIx OgorKwkJZm9yKG4xPTAsbjI9MTI3IDsgbjEgPCAxMjggOyArK24xLC0tbjIpCisrCQkgICAgc2Io aXZbaSsxXSxuMSxnYihwdGV4dFtqLW4yXSwwKSk7CisrCQljdGV4dFswXVswXT1wdGV4dFtqLTEy OF1bMF0mMHg4MDsKKysJCWJyZWFrOworKwkJfQorKwkgICAgfQorKwl9CisrICAgIAorKyAgICBy ZXR1cm4gcmV0OworKyAgICB9CisrCisrLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0qLworKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAg IyBDb25maWcgaW5mbyBmb3Igdi1vbmUKKysgICMgQUVTVlMgTU1UIHRlc3QgZGF0YSBmb3IgRUNC CisrICAjIFN0YXRlIDogRW5jcnlwdCBhbmQgRGVjcnlwdAorKyAgIyBLZXkgTGVuZ3RoIDogMjU2 CisrICAjIEZyaSBBdWcgMzAgMDQ6MDc6MjIgUE0KKysgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLworKworK2ludCBwcm9jX2ZpbGUoY2hhciAqcnFmaWxlLCBjaGFyICpyc3BmaWxlKQor KyAgICB7CisrICAgIGNoYXIgYWZuWzI1Nl0sIHJmblsyNTZdOworKyAgICBGSUxFICphZnAgPSBO VUxMLCAqcmZwID0gTlVMTDsKKysgICAgY2hhciBpYnVmWzIwNDhdOworKyAgICBjaGFyIHRidWZb MjA0OF07CisrICAgIGludCBpbGVuLCBsZW4sIHJldCA9IDA7CisrICAgIGNoYXIgYWxnb1s4XSA9 ICIiOworKyAgICBjaGFyIGFtb2RlWzhdID0gIiI7CisrICAgIGNoYXIgYXRlc3RbOF0gPSAiIjsK KysgICAgaW50IGFrZXlzeiA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgaVZlY1syMF0sIGFLZXlb NDBdOworKyAgICBpbnQgZGlyID0gLTEsIGVyciA9IDAsIHN0ZXAgPSAwOworKyAgICB1bnNpZ25l ZCBjaGFyIHBsYWludGV4dFsyMDQ4XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzIw NDhdOworKyAgICBjaGFyICpycDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBf Q0lQSEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBpZiAoIXJxZmlsZSB8fCAhKCpycWZpbGUp KQorKwl7CisrCXByaW50ZigiTm8gcmVxIGZpbGVcbiIpOworKwlyZXR1cm4gLTE7CisrCX0KKysg ICAgc3RyY3B5KGFmbiwgcnFmaWxlKTsKKysKKysgICAgaWYgKChhZnAgPSBmb3BlbihhZm4sICJy IikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxlOiAlcywgJXNcbiIs IAorKwkgICAgICAgYWZuLCBzdHJlcnJvcihlcnJubykpOworKwlyZXR1cm4gLTE7CisrCX0KKysg ICAgaWYgKCFyc3BmaWxlKQorKwl7CisrCXN0cmNweShyZm4sYWZuKTsKKysJcnA9c3Ryc3RyKHJm biwicmVxLyIpOworKyNpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKwlpZiAoIXJwKQorKwkgICAg cnA9c3Ryc3RyKHJmbiwicmVxXFwiKTsKKysjZW5kaWYKKysJYXNzZXJ0KHJwKTsKKysJbWVtY3B5 KHJwLCJyc3AiLDMpOworKwlycCA9IHN0cnN0cihyZm4sICIucmVxIik7CisrCW1lbWNweShycCwg Ii5yc3AiLCA0KTsKKysJcnNwZmlsZSA9IHJmbjsKKysJfQorKyAgICBpZiAoKHJmcCA9IGZvcGVu KHJzcGZpbGUsICJ3IikpID09IE5VTEwpCisrCXsKKysJcHJpbnRmKCJDYW5ub3Qgb3BlbiBmaWxl OiAlcywgJXNcbiIsIAorKwkgICAgICAgcmZuLCBzdHJlcnJvcihlcnJubykpOworKwlmY2xvc2Uo YWZwKTsKKysJYWZwID0gTlVMTDsKKysJcmV0dXJuIC0xOworKwl9CisrICAgIHdoaWxlICghZXJy ICYmIChmZ2V0cyhpYnVmLCBzaXplb2YoaWJ1ZiksIGFmcCkpICE9IE5VTEwpCisrCXsKKysJdGlk eV9saW5lKHRidWYsIGlidWYpOworKwlpbGVuID0gc3RybGVuKGlidWYpOworKwkvKiAgICAgIHBy aW50Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGlidWYpOyAqLworKwlzd2l0Y2ggKHN0ZXApCisr CSAgICB7CisrCWNhc2UgMDogIC8qIHJlYWQgcHJlYW1ibGUgKi8KKysJICAgIGlmIChpYnVmWzBd ID09ICdcbicpCisrCQl7IC8qIGVuZCBvZiBwcmVhbWJsZSAqLworKwkJaWYgKCgqYWxnbyA9PSAn XDAnKSB8fAorKwkJICAgICgqYW1vZGUgPT0gJ1wwJykgfHwKKysJCSAgICAoYWtleXN6ID09IDAp KQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIk1pc3NpbmcgQWxnb3JpdGhtLCBNb2RlIG9yIEtl eVNpemUgKCVzLyVzLyVkKVxuIiwKKysJCQkgICBhbGdvLGFtb2RlLGFrZXlzeik7CisrCQkgICAg ZXJyID0gMTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZwdXRzKGlidWYs IHJmcCk7CisrCQkgICAgKysgc3RlcDsKKysJCSAgICB9CisrCQl9CisrCSAgICBlbHNlIGlmIChp YnVmWzBdICE9ICcjJykKKysJCXsKKysJCXByaW50ZigiSW52YWxpZCBwcmVhbWJsZSBpdGVtOiAl c1xuIiwgaWJ1Zik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeyAvKiBwcm9j ZXNzIHByZWFtYmxlICovCisrCQljaGFyICp4cCwgKnBwID0gaWJ1ZisyOworKwkJaW50IG47Cisr CQlpZiAoYWtleXN6KQorKwkJICAgIHsgLyogaW5zZXJ0IGN1cnJlbnQgdGltZSAmIGRhdGUgKi8K KysJCSAgICB0aW1lX3QgcnRpbSA9IHRpbWUoMCk7CisrCQkgICAgZnByaW50ZihyZnAsICIjICVz IiwgY3RpbWUoJnJ0aW0pKTsKKysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIGZw dXRzKGlidWYsIHJmcCk7CisrCQkgICAgaWYgKHN0cm5jbXAocHAsICJBRVNWUyAiLCA2KSA9PSAw KQorKwkJCXsKKysJCQlzdHJjcHkoYWxnbywgIkFFUyIpOworKwkJCS8qIGdldCB0ZXN0IHR5cGUg Ki8KKysJCQlwcCArPSA2OworKwkJCXhwID0gc3RyY2hyKHBwLCAnICcpOworKwkJCW4gPSB4cC1w cDsKKysJCQlzdHJuY3B5KGF0ZXN0LCBwcCwgbik7CisrCQkJYXRlc3Rbbl0gPSAnXDAnOworKwkJ CS8qIGdldCBtb2RlICovCisrCQkJeHAgPSBzdHJyY2hyKHBwLCAnICcpOyAvKiBnZXQgbW9kZSIg Ki8KKysJCQluID0gc3RybGVuKHhwKzEpLTE7CisrCQkJc3RybmNweShhbW9kZSwgeHArMSwgbik7 CisrCQkJYW1vZGVbbl0gPSAnXDAnOworKwkJCS8qIGFtb2RlWzNdID0gJ1wwJzsgKi8KKysJCQlp ZiAoVkVSQk9TRSkKKysJCQkJcHJpbnRmKCJUZXN0ID0gJXMsIE1vZGUgPSAlc1xuIiwgYXRlc3Qs IGFtb2RlKTsKKysJCQl9CisrCQkgICAgZWxzZSBpZiAoc3RybmNhc2VjbXAocHAsICJLZXkgTGVu Z3RoIDogIiwgMTMpID09IDApCisrCQkJeworKwkJCWFrZXlzeiA9IGF0b2kocHArMTMpOworKwkJ CWlmIChWRVJCT1NFKQorKwkJCQlwcmludGYoIktleSBzaXplID0gJWRcbiIsIGFrZXlzeik7Cisr CQkJfQorKwkJICAgIH0KKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDE6ICAvKiBbRU5D UllQVF0gfCBbREVDUllQVF0gKi8KKysJICAgIGlmIChpYnVmWzBdID09ICdbJykKKysJCXsKKysJ CWZwdXRzKGlidWYsIHJmcCk7CisrCQkrK3N0ZXA7CisrCQlpZiAoc3RybmNhc2VjbXAoaWJ1Ziwg IltFTkNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0gMTsKKysJCWVsc2UgaWYgKHN0cm5j YXNlY21wKGlidWYsICJbREVDUllQVF0iLCA5KSA9PSAwKQorKwkJICAgIGRpciA9IDA7CisrCQll bHNlCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBrZXl3b3JkOiAlc1xuIiwgaWJ1 Zik7CisrCQkgICAgZXJyID0gMTsKKysJCSAgICB9CisrCQlicmVhazsKKysJCX0KKysJICAgIGVs c2UgaWYgKGRpciA9PSAtMSkKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3Npbmcg RU5DUllQVC9ERUNSWVBUIGtleXdvcmRcbiIpOworKwkJYnJlYWs7CisrCQl9CisrCSAgICBlbHNl IAorKwkJc3RlcCA9IDI7CisrCisrCWNhc2UgMjogLyogS0VZID0geHh4eCAqLworKwkgICAgZnB1 dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmKCppYnVmID09ICdcbicpCisrCQlicmVhazsKKysJICAg IGlmKCFzdHJuY2FzZWNtcChpYnVmLCJDT1VOVCA9ICIsOCkpCisrCQlicmVhazsKKysKKysJICAg IGlmIChzdHJuY2FzZWNtcChpYnVmLCAiS0VZID0gIiwgNikgIT0gMCkKKysJCXsKKysJCXByaW50 ZigiTWlzc2luZyBLRVlcbiIpOworKwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsK KysJCWxlbiA9IGhleDJiaW4oKGNoYXIqKWlidWYrNiwgYUtleSk7CisrCQlpZiAobGVuIDwgMCkK KysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIEtFWVxuIik7CisrCQkgICAgZXJyID0x OworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIktFWSIsIGFLZXksIGxl bik7CisrCQlpZiAoc3RyY21wKGFtb2RlLCAiRUNCIikgPT0gMCkKKysJCSAgICB7CisrCQkgICAg bWVtc2V0KGlWZWMsIDAsIHNpemVvZihpVmVjKSk7CisrCQkgICAgc3RlcCA9IChkaXIpPyA0OiA1 OyAgLyogbm8gaXZlYyBmb3IgRUNCICovCisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgICsrc3Rl cDsKKysJCX0KKysJICAgIGJyZWFrOworKworKwljYXNlIDM6IC8qIElWID0geHh4eCAqLworKwkg ICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVmLCAiSVYgPSAi LCA1KSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIElWXG4iKTsKKysJCWVyciA9IDE7 CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlsZW4gPSBoZXgyYmluKChjaGFyKilpYnVmKzUs IGlWZWMpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxp ZCBJVlxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCVBy aW50VmFsdWUoIklWIiwgaVZlYywgbGVuKTsKKysJCXN0ZXAgPSAoZGlyKT8gNDogNTsKKysJCX0K KysJICAgIGJyZWFrOworKworKwljYXNlIDQ6IC8qIFBMQUlOVEVYVCA9IHh4eHggKi8KKysJICAg IGZwdXRzKGlidWYsIHJmcCk7CisrCSAgICBpZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIlBMQUlOVEVY VCA9ICIsIDEyKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIFBMQUlOVEVYVFxuIik7 CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaW50IG5uID0gc3RybGVu KGlidWYrMTIpOworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50 MmJpbihpYnVmKzEyLG5uLTEscGxhaW50ZXh0KTsKKysJCWVsc2UKKysJCSAgICBsZW49aGV4MmJp bihpYnVmKzEyLCBwbGFpbnRleHQpOworKwkJaWYgKGxlbiA8IDApCisrCQkgICAgeworKwkJICAg IHByaW50ZigiSW52YWxpZCBQTEFJTlRFWFQ6ICVzIiwgaWJ1ZisxMik7CisrCQkgICAgZXJyID0x OworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCWlmIChsZW4gPj0gc2l6ZW9mKHBsYWludGV4 dCkpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiQnVmZmVyIG92ZXJmbG93XG4iKTsKKysJCSAg ICB9CisrCQlQcmludFZhbHVlKCJQTEFJTlRFWFQiLCAodW5zaWduZWQgY2hhciopcGxhaW50ZXh0 LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDApICAvKiBNb250ZSBDYXJs byBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGlmKGRvX21jdChhbW9kZSwgYWtleXN6LCBhS2V5 LCBpVmVjLCAKKysJCQkgICAgICBkaXIsICh1bnNpZ25lZCBjaGFyKilwbGFpbnRleHQsIGxlbiwg CisrCQkJICAgICAgcmZwKSA8IDApCisrCQkJRVhJVCgxKTsKKysJCSAgICB9CisrCQllbHNlCisr CQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwg aVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJ CSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJDSVBI RVJURVhUIixjaXBoZXJ0ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7 CisrCQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA1 OiAvKiBDSVBIRVJURVhUID0geHh4eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAg IGlmIChzdHJuY2FzZWNtcChpYnVmLCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQorKwkJewor KwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxz ZQorKwkJeworKwkJaWYoIXN0cmNtcChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJp bihpYnVmKzEzLHN0cmxlbihpYnVmKzEzKS0xLGNpcGhlcnRleHQpOworKwkJZWxzZQorKwkJICAg IGxlbiA9IGhleDJiaW4oaWJ1ZisxMyxjaXBoZXJ0ZXh0KTsKKysJCWlmIChsZW4gPCAwKQorKwkJ ICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgQ0lQSEVSVEVYVFxuIik7CisrCQkgICAgZXJy ID0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysKKysJCVByaW50VmFsdWUoIkNJUEhFUlRF WFQiLCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJaWYgKHN0cmNtcChhdGVzdCwgIk1DVCIpID09IDAp ICAvKiBNb250ZSBDYXJsbyBUZXN0ICovCisrCQkgICAgeworKwkJICAgIGRvX21jdChhbW9kZSwg YWtleXN6LCBhS2V5LCBpVmVjLCAKKysJCQkgICBkaXIsIGNpcGhlcnRleHQsIGxlbiwgcmZwKTsK KysJCSAgICB9CisrCQllbHNlCisrCQkgICAgeworKwkJICAgIHJldCA9IEFFU1Rlc3QoJmN0eCwg YW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAgLyogMCA9IGRlY3J5cHQs IDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcGxhaW50ZXh0LCBjaXBoZXJ0ZXh0LCBsZW4pOworKwkJ ICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBjaGFyICopcGxhaW50ZXh0LGxl bixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9 IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA2OgorKwkgICAgaWYgKGlidWZbMF0g IT0gJ1xuJykKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYoIk1pc3NpbmcgdGVybWluYXRv clxuIik7CisrCQl9CisrCSAgICBlbHNlIGlmIChzdHJjbXAoYXRlc3QsICJNQ1QiKSAhPSAwKQor KwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBubCAqLworKwkJZnB1dHMoaWJ1 ZiwgcmZwKTsKKysJCX0KKysJICAgIHN0ZXAgPSAxOworKwkgICAgYnJlYWs7CisrCSAgICB9Cisr CX0KKysgICAgaWYgKHJmcCkKKysJZmNsb3NlKHJmcCk7CisrICAgIGlmIChhZnApCisrCWZjbG9z ZShhZnApOworKyAgICByZXR1cm4gZXJyOworKyAgICB9CisrCisrLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAgUHJvY2Vzc2VzIGVpdGhlciBh IHNpbmdsZSBmaWxlIG9yIAorKyAgYSBzZXQgb2YgZmlsZXMgd2hvc2UgbmFtZXMgYXJlIHBhc3Nl ZCBpbiBhIGZpbGUuCisrICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNpZmllZCBhczoKKysgICAgYWVz X3Rlc3QgLWYgeHh4LnJlcQorKyAgQSBzZXQgb2YgZmlsZXMgaXMgc3BlY2lmaWVkIGFzOgorKyAg ICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKKysgIFRoZSBkZWZhdWx0IGlzOiAtZCByZXEudHh0Cisr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworK2lu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysgICAgeworKyAgICBjaGFyICpycWxpc3Qg PSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVMTDsKKysgICAgRklMRSAqZnAgPSBOVUxMOworKyAg ICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKKysgICAgaW50IGZfb3B0ID0gMCwg ZF9vcHQgPSAxOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYoIUZJUFNfbW9kZV9z ZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCUVYSVQoMSk7CisrCX0KKysjZW5k aWYKKysgICAgaWYgKGFyZ2MgPiAxKQorKwl7CisrCWlmIChzdHJjYXNlY21wKGFyZ3ZbMV0sICIt ZCIpID09IDApCisrCSAgICB7CisrCSAgICBkX29wdCA9IDE7CisrCSAgICB9CisrCWVsc2UgaWYg KHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikgPT0gMCkKKysJICAgIHsKKysJICAgIGZfb3B0ID0g MTsKKysJICAgIGRfb3B0ID0gMDsKKysJICAgIH0KKysJZWxzZQorKwkgICAgeworKwkgICAgcHJp bnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0pOworKwkgICAgcmV0dXJuIDA7 CisrCSAgICB9CisrCWlmIChhcmdjIDwgMykKKysJICAgIHsKKysJICAgIHByaW50ZigiTWlzc2lu ZyBwYXJhbWV0ZXJcbiIpOworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChkX29wdCkK KysJICAgIHJxbGlzdCA9IGFyZ3ZbMl07CisrCWVsc2UKKysJICAgIHsKKysJICAgIHN0cmNweShm biwgYXJndlsyXSk7CisrCSAgICByc3BmaWxlID0gYXJndlszXTsKKysJICAgIH0KKysJfQorKyAg ICBpZiAoZF9vcHQpCisrCXsgLyogbGlzdCBvZiBmaWxlcyAoZGlyZWN0b3J5KSAqLworKwlpZiAo IShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkpCisrCSAgICB7CisrCSAgICBwcmludGYoIkNhbm5v dCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOworKwkgICAgcmV0dXJuIC0xOworKwkgICAgfQorKwl3 aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiksIGZwKSkKKysJICAgIHsKKysJICAgIHN0cnRvayhm biwgIlxyXG4iKTsKKysJICAgIHN0cmNweShyZm4sIGZuKTsKKysJICAgIGlmIChWRVJCT1NFKQor KwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgcmZuKTsKKysJICAgIGlmIChwcm9jX2ZpbGUo cmZuLCByc3BmaWxlKSkKKysJCXsKKysJCXByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFpbGVkIGZv cjogJXMgPDw8XG4iLCByZm4pOworKwkJRVhJVCgxKTsKKysJCX0KKysJICAgIH0KKysJZmNsb3Nl KGZwKTsKKysJfQorKyAgICBlbHNlIC8qIHNpbmdsZSBmaWxlICovCisrCXsKKysJaWYgKFZFUkJP U0UpCisrCSAgICBwcmludGYoIlByb2Nlc3Npbmc6ICVzXG4iLCBmbik7CisrCWlmIChwcm9jX2Zp bGUoZm4sIHJzcGZpbGUpKQorKwkgICAgeworKwkgICAgcHJpbnRmKCI+Pj4gUHJvY2Vzc2luZyBm YWlsZWQgZm9yOiAlcyA8PDxcbiIsIGZuKTsKKysJICAgIH0KKysJfQorKyAgICBFWElUKDApOwor KyAgICByZXR1cm4gMDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlw dG8vZmlwcy9jYXZzL2ZpcHNfZGVzbW92cy5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfZGVzbW92cy5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19kZXNtb3ZzLmMJ MjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNzAyIEBACisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE9wZW5TU0wgUHJvamVj 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 IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKysgIE5JU1QgREVTIE1vZGVzIG9mIE9wZXJhdGlvbiBWYWxpZGF0 aW9uIFN5c3RlbQorKyAgVGVzdCBQcm9ncmFtCisrCisrICBCYXNlZCBvbiB0aGUgQUVTIFZhbGlk YXRpb24gU3VpdGUsIHdoaWNoIHdhczoKKysgIERvbmF0ZWQgdG8gT3BlblNTTCBieToKKysgIFYt T05FIENvcnBvcmF0aW9uCisrICAyMDI1MCBDZW50dXJ5IEJsdmQsIFN1aXRlIDMwMAorKyAgR2Vy bWFudG93biwgTUQgMjA4NzQKKysgIFUuUy5BLgorKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1 ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4K KysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wvZGVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvYm4uaD4KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSAiZV9vcy5o IgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBERVMgc3VwcG9ydFxuIik7CisrICAg IHJldHVybigwKTsKKyt9CisrCisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+ CisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrI2RlZmluZSBERVNfQkxPQ0tfU0laRSA4Cisr CisrI2RlZmluZSBWRVJCT1NFIDAKKysKKytpbnQgREVTVGVzdChFVlBfQ0lQSEVSX0NUWCAqY3R4 LAorKwkgICAgY2hhciAqYW1vZGUsIGludCBha2V5c3osIHVuc2lnbmVkIGNoYXIgKmFLZXksIAor KwkgICAgdW5zaWduZWQgY2hhciAqaVZlYywgCisrCSAgICBpbnQgZGlyLCAgLyogMCA9IGRlY3J5 cHQsIDEgPSBlbmNyeXB0ICovCisrCSAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNo YXIgKmluLCBpbnQgbGVuKQorKyAgICB7CisrICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciA9 IE5VTEw7CisrCisrICAgIGlmIChha2V5c3ogIT0gMTkyKQorKwl7CisrCXByaW50ZigiSW52YWxp ZCBrZXkgc2l6ZTogJWRcbiIsIGFrZXlzeik7CisrCUVYSVQoMSk7CisrCX0KKysKKysgICAgaWYg KHN0cmNhc2VjbXAoYW1vZGUsICJDQkMiKSA9PSAwKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNf Y2JjKCk7CisrICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1vZGUsICJFQ0IiKSA9PSAwKQorKwlj aXBoZXIgPSBFVlBfZGVzX2VkZTNfZWNiKCk7CisrICAgIGVsc2UgaWYgKHN0cmNhc2VjbXAoYW1v ZGUsICJDRkI2NCIpID09IDApCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmI2NCgpOworKyAg ICBlbHNlIGlmIChzdHJuY2FzZWNtcChhbW9kZSwgIk9GQiIsIDMpID09IDApCisrCWNpcGhlciA9 IEVWUF9kZXNfZWRlM19vZmIoKTsKKysgICAgZWxzZSBpZighc3RyY2FzZWNtcChhbW9kZSwiQ0ZC OCIpKQorKwljaXBoZXIgPSBFVlBfZGVzX2VkZTNfY2ZiOCgpOworKyAgICBlbHNlIGlmKCFzdHJj YXNlY21wKGFtb2RlLCJDRkIxIikpCisrCWNpcGhlciA9IEVWUF9kZXNfZWRlM19jZmIxKCk7Cisr ICAgIGVsc2UKKysJeworKwlwcmludGYoIlVua25vd24gbW9kZTogJXNcbiIsIGFtb2RlKTsKKysJ RVhJVCgxKTsKKysJfQorKworKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIs IE5VTEwsIGFLZXksIGlWZWMsIGRpcikgPD0gMCkKKysJcmV0dXJuIDA7CisrICAgIGlmKCFzdHJj YXNlY21wKGFtb2RlLCJDRkIxIikpCisrCU1fRVZQX0NJUEhFUl9DVFhfc2V0X2ZsYWdzKGN0eCwg RVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyk7CisrICAgIEVWUF9DaXBoZXIoY3R4LCBvdXQsIGlu LCBsZW4pOworKworKyAgICByZXR1cm4gMTsKKysgICAgfQorKworK3ZvaWQgRGVidWdWYWx1ZShj aGFyICp0YWcsIHVuc2lnbmVkIGNoYXIgKnZhbCwgaW50IGxlbikKKysgICAgeworKyAgICBjaGFy IG9idWZbMjA0OF07CisrICAgIGludCBvbGVuOworKyAgICBvbGVuID0gYmluMmhleCh2YWwsIGxl biwgb2J1Zik7CisrICAgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYpOwor KyAgICB9CisrCisrdm9pZCBzaGlmdGluKHVuc2lnbmVkIGNoYXIgKmRzdCx1bnNpZ25lZCBjaGFy ICpzcmMsaW50IG5iaXRzKQorKyAgICB7CisrICAgIGludCBuOworKworKyAgICAvKiBtb3ZlIHRo ZSBieXRlcy4uLiAqLworKyAgICBtZW1tb3ZlKGRzdCxkc3QrbmJpdHMvOCwzKjgtbmJpdHMvOCk7 CisrICAgIC8qIGFwcGVuZCBuZXcgZGF0YSAqLworKyAgICBtZW1jcHkoZHN0KzMqOC1uYml0cy84 LHNyYywobmJpdHMrNykvOCk7CisrICAgIC8qIGxlZnQgc2hpZnQgdGhlIGJpdHMgKi8KKysgICAg aWYobmJpdHMlOCkKKysJZm9yKG49MCA7IG4gPCAzKjggOyArK24pCisrCSAgICBkc3Rbbl09KGRz dFtuXSA8PCAobmJpdHMlOCkpfChkc3RbbisxXSA+PiAoOC1uYml0cyU4KSk7CisrICAgIH0JCisr CisrLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisr Y2hhciAqdF90YWdbMl0gPSB7IlBMQUlOVEVYVCIsICJDSVBIRVJURVhUIn07CisrY2hhciAqdF9t b2RlWzZdID0geyJDQkMiLCJFQ0IiLCJPRkIiLCJDRkIxIiwiQ0ZCOCIsIkNGQjY0In07CisrZW51 bSBNb2RlIHtDQkMsIEVDQiwgT0ZCLCBDRkIxLCBDRkI4LCBDRkI2NH07CisraW50IFNpemVzWzZd PXs2NCw2NCw2NCwxLDgsNjR9OworKworK3ZvaWQgZG9fbWN0KGNoYXIgKmFtb2RlLCAKKysJICAg IGludCBha2V5c3osIGludCBudW1rZXlzLCB1bnNpZ25lZCBjaGFyICpha2V5LHVuc2lnbmVkIGNo YXIgKml2ZWMsCisrCSAgICBpbnQgZGlyLCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgbGVuLAor KwkgICAgRklMRSAqcmZwKQorKyAgICB7CisrICAgIGludCBpLGltb2RlOworKyAgICB1bnNpZ25l ZCBjaGFyIG5rWzQqOF07IC8qIGxvbmdlc3Qga2V5KzggKi8KKysgICAgdW5zaWduZWQgY2hhciB0 ZXh0MFs4XTsKKysKKysgICAgZm9yIChpbW9kZT0wIDsgaW1vZGUgPCA2IDsgKytpbW9kZSkKKysJ aWYoIXN0cmNtcChhbW9kZSx0X21vZGVbaW1vZGVdKSkKKysJICAgIGJyZWFrOworKyAgICBpZiAo aW1vZGUgPT0gNikKKysJeyAKKysJcHJpbnRmKCJVbnJlY29nbml6ZWQgbW9kZTogJXNcbiIsIGFt b2RlKTsKKysJRVhJVCgxKTsKKysJfQorKworKyAgICBmb3IoaT0wIDsgaSA8IDQwMCA7ICsraSkK KysJeworKwlpbnQgajsKKysJaW50IG47CisrCWludCBrcD1ha2V5c3ovNjQ7CisrCXVuc2lnbmVk IGNoYXIgb2xkX2l2WzhdOworKwlFVlBfQ0lQSEVSX0NUWCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RY X2luaXQoJmN0eCk7CisrCisrCWZwcmludGYocmZwLCJcbkNPVU5UID0gJWRcbiIsaSk7CisrCWlm KGtwID09IDEpCisrCSAgICBPdXRwdXRWYWx1ZSgiS0VZIixha2V5LDgscmZwLDApOworKwllbHNl CisrCSAgICBmb3Iobj0wIDsgbiA8IGtwIDsgKytuKQorKwkJeworKwkJZnByaW50ZihyZnAsIktF WSVkIixuKzEpOworKwkJT3V0cHV0VmFsdWUoIiIsYWtleStuKjgsOCxyZnAsMCk7CisrCQl9Cisr CisrCWlmKGltb2RlICE9IEVDQikKKysJICAgIE91dHB1dFZhbHVlKCJJViIsaXZlYyw4LHJmcCww KTsKKysJT3V0cHV0VmFsdWUodF90YWdbZGlyXjFdLHRleHQsbGVuLHJmcCxpbW9kZSA9PSBDRkIx KTsKKysjaWYgMAorKwkvKiBjb21wZW5zYXRlIGZvciBlbmRpYW5uZXNzICovCisrCWlmKGltb2Rl ID09IENGQjEpCisrCSAgICB0ZXh0WzBdPDw9NzsKKysjZW5kaWYKKysJbWVtY3B5KHRleHQwLHRl eHQsOCk7CisrCisrCWZvcihqPTAgOyBqIDwgMTAwMDAgOyArK2opCisrCSAgICB7CisrCSAgICB1 bnNpZ25lZCBjaGFyIG9sZF90ZXh0WzhdOworKworKwkgICAgbWVtY3B5KG9sZF90ZXh0LHRleHQs OCk7CisrCSAgICBpZihqID09IDApCisrCQl7CisrCQltZW1jcHkob2xkX2l2LGl2ZWMsOCk7Cisr CQlERVNUZXN0KCZjdHgsYW1vZGUsYWtleXN6LGFrZXksaXZlYyxkaXIsdGV4dCx0ZXh0LGxlbik7 CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQltZW1jcHkob2xkX2l2LGN0eC5pdiw4KTsKKysJ CUVWUF9DaXBoZXIoJmN0eCx0ZXh0LHRleHQsbGVuKTsKKysJCX0KKysJICAgIGlmKGogPT0gOTk5 OSkKKysJCXsKKysJCU91dHB1dFZhbHVlKHRfdGFnW2Rpcl0sdGV4dCxsZW4scmZwLGltb2RlID09 IENGQjEpOworKwkJLyoJCW1lbWNweShpdmVjLHRleHQsOCk7ICovCisrCQl9CisrCSAgICAvKgkg ICAgRGVidWdWYWx1ZSgiaXYiLGN0eC5pdiw4KTsgKi8KKysJICAgIC8qIGFjY3VtdWxhdGUgbWF0 ZXJpYWwgZm9yIHRoZSBuZXh0IGtleSAqLworKwkgICAgc2hpZnRpbihuayx0ZXh0LFNpemVzW2lt b2RlXSk7CisrCSAgICAvKgkgICAgRGVidWdWYWx1ZSgibmsiLG5rLDI0KTsqLworKwkgICAgaWYo KGRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9kZSA9PSBDRkI4IHx8IGltb2RlID09IENGQjY0 CisrCQkJfHwgaW1vZGUgPT0gQ0JDKSkgfHwgaW1vZGUgPT0gT0ZCKQorKwkJbWVtY3B5KHRleHQs b2xkX2l2LDgpOworKworKwkgICAgaWYoIWRpciAmJiAoaW1vZGUgPT0gQ0ZCMSB8fCBpbW9kZSA9 PSBDRkI4IHx8IGltb2RlID09IENGQjY0KSkKKysJCXsKKysJCS8qIHRoZSB0ZXN0IHNwZWNpZmll cyB1c2luZyB0aGUgb3V0cHV0IG9mIHRoZSByYXcgREVTIG9wZXJhdGlvbgorKwkJICAgd2hpY2gg d2UgZG9uJ3QgaGF2ZSwgc28gcmVjb25zdHJ1Y3QgaXQuLi4gKi8KKysJCWZvcihuPTAgOyBuIDwg OCA7ICsrbikKKysJCSAgICB0ZXh0W25dXj1vbGRfdGV4dFtuXTsKKysJCX0KKysJICAgIH0KKysJ Zm9yKG49MCA7IG4gPCA4IDsgKytuKQorKwkgICAgYWtleVtuXV49bmtbMTYrbl07CisrCWZvcihu PTAgOyBuIDwgOCA7ICsrbikKKysJICAgIGFrZXlbOCtuXV49bmtbOCtuXTsKKysJZm9yKG49MCA7 IG4gPCA4IDsgKytuKQorKwkgICAgYWtleVsxNituXV49bmtbbl07CisrCWlmKG51bWtleXMgPCAz KQorKwkgICAgbWVtY3B5KCZha2V5WzIqOF0sYWtleSw4KTsKKysJaWYobnVta2V5cyA8IDIpCisr CSAgICBtZW1jcHkoJmFrZXlbOF0sYWtleSw4KTsKKysJREVTX3NldF9vZGRfcGFyaXR5KChERVNf Y2Jsb2NrICopYWtleSk7CisrCURFU19zZXRfb2RkX3Bhcml0eSgoREVTX2NibG9jayAqKShha2V5 KzgpKTsKKysJREVTX3NldF9vZGRfcGFyaXR5KChERVNfY2Jsb2NrICopKGFrZXkrMTYpKTsKKysJ bWVtY3B5KGl2ZWMsY3R4Lml2LDgpOworKworKwkvKiBwb2ludGxlc3MgZXhlcmNpc2UgLSB0aGUg ZmluYWwgdGV4dCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUKKysJICAgaW5pdGlhbCB0ZXh0IGluIE9G QiBtb2RlLCBzbyB3aG8gY2FyZXMgd2hhdCBpdCBpcz8gKFdobworKwkgICBkZXNpZ25lZCB0aGVz ZSB0ZXN0cz8pICovCisrCWlmKGltb2RlID09IE9GQikKKysJICAgIGZvcihuPTAgOyBuIDwgOCA7 ICsrbikKKysJCXRleHRbbl09dGV4dDBbbl1eb2xkX2l2W25dOworKwl9CisrICAgIH0KKysgICAg CisraW50IHByb2NfZmlsZShjaGFyICpycWZpbGUsIGNoYXIgKnJzcGZpbGUpCisrICAgIHsKKysg ICAgY2hhciBhZm5bMjU2XSwgcmZuWzI1Nl07CisrICAgIEZJTEUgKmFmcCA9IE5VTEwsICpyZnAg PSBOVUxMOworKyAgICBjaGFyIGlidWZbMjA0OF0sIHRidWZbMjA0OF07CisrICAgIGludCBpbGVu LCBsZW4sIHJldCA9IDA7CisrICAgIGNoYXIgYW1vZGVbOF0gPSAiIjsKKysgICAgY2hhciBhdGVz dFsxMDBdID0gIiI7CisrICAgIGludCBha2V5c3o9MDsKKysgICAgdW5zaWduZWQgY2hhciBpVmVj WzIwXSwgYUtleVs0MF07CisrICAgIGludCBkaXIgPSAtMSwgZXJyID0gMCwgc3RlcCA9IDA7Cisr ICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzIwNDhdOworKyAgICB1bnNpZ25lZCBjaGFyIGNp cGhlcnRleHRbMjA0OF07CisrICAgIGNoYXIgKnJwOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7 CisrICAgIGludCBudW1rZXlzPTE7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Cisr CisrICAgIGlmICghcnFmaWxlIHx8ICEoKnJxZmlsZSkpCisrCXsKKysJcHJpbnRmKCJObyByZXEg ZmlsZVxuIik7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBzdHJjcHkoYWZuLCBycWZpbGUpOwor KworKyAgICBpZiAoKGFmcCA9IGZvcGVuKGFmbiwgInIiKSkgPT0gTlVMTCkKKysJeworKwlwcmlu dGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisrCSAgICAgICBhZm4sIHN0cmVycm9y KGVycm5vKSk7CisrCXJldHVybiAtMTsKKysJfQorKyAgICBpZiAoIXJzcGZpbGUpCisrCXsKKysJ c3RyY3B5KHJmbixhZm4pOworKwlycD1zdHJzdHIocmZuLCJyZXEvIik7CisrI2lmZGVmIE9QRU5T U0xfU1lTX1dJTjMyCisrCWlmICghcnApCisrCSAgICBycD1zdHJzdHIocmZuLCJyZXFcXCIpOwor KyNlbmRpZgorKwlhc3NlcnQocnApOworKwltZW1jcHkocnAsInJzcCIsMyk7CisrCXJwID0gc3Ry c3RyKHJmbiwgIi5yZXEiKTsKKysJbWVtY3B5KHJwLCAiLnJzcCIsIDQpOworKwlyc3BmaWxlID0g cmZuOworKwl9CisrICAgIGlmICgocmZwID0gZm9wZW4ocnNwZmlsZSwgInciKSkgPT0gTlVMTCkK KysJeworKwlwcmludGYoIkNhbm5vdCBvcGVuIGZpbGU6ICVzLCAlc1xuIiwgCisrCSAgICAgICBy Zm4sIHN0cmVycm9yKGVycm5vKSk7CisrCWZjbG9zZShhZnApOworKwlhZnAgPSBOVUxMOworKwly ZXR1cm4gLTE7CisrCX0KKysgICAgd2hpbGUgKCFlcnIgJiYgKGZnZXRzKGlidWYsIHNpemVvZihp YnVmKSwgYWZwKSkgIT0gTlVMTCkKKysJeworKwl0aWR5X2xpbmUodGJ1ZiwgaWJ1Zik7CisrCWls ZW4gPSBzdHJsZW4oaWJ1Zik7CisrCS8qCXByaW50Zigic3RlcD0lZCBpYnVmPSVzIixzdGVwLGli dWYpOyovCisrCWlmKHN0ZXAgPT0gMyAmJiAhc3RyY21wKGFtb2RlLCJFQ0IiKSkKKysJICAgIHsK KysJICAgIG1lbXNldChpVmVjLCAwLCBzaXplb2YoaVZlYykpOworKwkgICAgc3RlcCA9IChkaXIp PyA0OiA1OyAgLyogbm8gaXZlYyBmb3IgRUNCICovCisrCSAgICB9CisrCXN3aXRjaCAoc3RlcCkK KysJICAgIHsKKysJY2FzZSAwOiAgLyogcmVhZCBwcmVhbWJsZSAqLworKwkgICAgaWYgKGlidWZb MF0gPT0gJ1xuJykKKysJCXsgLyogZW5kIG9mIHByZWFtYmxlICovCisrCQlpZiAoKmFtb2RlID09 ICdcMCcpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiTWlzc2luZyBNb2RlXG4iKTsKKysJCSAg ICBlcnIgPSAxOworKwkJICAgIH0KKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgZnB1dHMoaWJ1 ZiwgcmZwKTsKKysJCSAgICArKyBzdGVwOworKwkJICAgIH0KKysJCX0KKysJICAgIGVsc2UgaWYg KGlidWZbMF0gIT0gJyMnKQorKwkJeworKwkJcHJpbnRmKCJJbnZhbGlkIHByZWFtYmxlIGl0ZW06 ICVzXG4iLCBpYnVmKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7IC8qIHBy b2Nlc3MgcHJlYW1ibGUgKi8KKysJCWNoYXIgKnhwLCAqcHAgPSBpYnVmKzI7CisrCQlpbnQgbjsK KysJCWlmKCphbW9kZSkKKysJCSAgICB7IC8qIGluc2VydCBjdXJyZW50IHRpbWUgJiBkYXRlICov CisrCQkgICAgdGltZV90IHJ0aW0gPSB0aW1lKDApOworKwkJICAgIGZwcmludGYocmZwLCAiIyAl cyIsIGN0aW1lKCZydGltKSk7CisrCQkgICAgfQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBm cHV0cyhpYnVmLCByZnApOworKwkJICAgIGlmKCFzdHJuY21wKHBwLCJJTlZFUlNFICIsOCkgfHwg IXN0cm5jbXAocHAsIkRFUyAiLDQpCisrCQkgICAgICAgfHwgIXN0cm5jbXAocHAsIlRERVMgIiw1 KQorKwkJICAgICAgIHx8ICFzdHJuY21wKHBwLCJQRVJNVVRBVElPTiAiLDEyKQorKwkJICAgICAg IHx8ICFzdHJuY21wKHBwLCJTVUJTVElUVVRJT04gIiwxMykKKysJCSAgICAgICB8fCAhc3RybmNt cChwcCwiVkFSSUFCTEUgIiw5KSkKKysJCQl7CisrCQkJLyogZ2V0IHRlc3QgdHlwZSAqLworKwkJ CWlmKCFzdHJuY21wKHBwLCJERVMgIiw0KSkKKysJCQkgICAgcHArPTQ7CisrCQkJZWxzZSBpZigh c3RybmNtcChwcCwiVERFUyAiLDUpKQorKwkJCSAgICBwcCs9NTsKKysJCQl4cCA9IHN0cmNocihw cCwgJyAnKTsKKysJCQluID0geHAtcHA7CisrCQkJc3RybmNweShhdGVzdCwgcHAsIG4pOworKwkJ CWF0ZXN0W25dID0gJ1wwJzsKKysJCQkvKiBnZXQgbW9kZSAqLworKwkJCXhwID0gc3RycmNocihw cCwgJyAnKTsgLyogZ2V0IG1vZGUiICovCisrCQkJbiA9IHN0cmxlbih4cCsxKS0xOworKwkJCXN0 cm5jcHkoYW1vZGUsIHhwKzEsIG4pOworKwkJCWFtb2RlW25dID0gJ1wwJzsKKysJCQkvKiBhbW9k ZVszXSA9ICdcMCc7ICovCisrCQkJaWYgKFZFUkJPU0UpCisrCQkJCXByaW50ZigiVGVzdD0lcywg TW9kZT0lc1xuIixhdGVzdCxhbW9kZSk7CisrCQkJfQorKwkJICAgIH0KKysJCX0KKysJICAgIGJy ZWFrOworKworKwljYXNlIDE6ICAvKiBbRU5DUllQVF0gfCBbREVDUllQVF0gKi8KKysJICAgIGlm KGlidWZbMF0gPT0gJ1xuJykKKysJCWJyZWFrOworKwkgICAgaWYgKGlidWZbMF0gPT0gJ1snKQor KwkJeworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCSsrc3RlcDsKKysJCWlmIChzdHJuY2FzZWNt cChpYnVmLCAiW0VOQ1JZUFRdIiwgOSkgPT0gMCkKKysJCSAgICBkaXIgPSAxOworKwkJZWxzZSBp ZiAoc3RybmNhc2VjbXAoaWJ1ZiwgIltERUNSWVBUXSIsIDkpID09IDApCisrCQkgICAgZGlyID0g MDsKKysJCWVsc2UKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIGtleXdvcmQ6ICVz XG4iLCBpYnVmKTsKKysJCSAgICBlcnIgPSAxOworKwkJICAgIH0KKysJCWJyZWFrOworKwkJfQor KwkgICAgZWxzZSBpZiAoZGlyID09IC0xKQorKwkJeworKwkJZXJyID0gMTsKKysJCXByaW50Zigi TWlzc2luZyBFTkNSWVBUL0RFQ1JZUFQga2V5d29yZFxuIik7CisrCQlicmVhazsKKysJCX0KKysJ ICAgIGVsc2UgCisrCQlzdGVwID0gMjsKKysKKysJY2FzZSAyOiAvKiBLRVkgPSB4eHh4ICovCisr CSAgICBpZigqaWJ1ZiA9PSAnXG4nKQorKwkJeworKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7 CisrCQlicmVhazsKKysgICAgICAgICAgICAgICAgfQorKwkgICAgaWYoIXN0cm5jYXNlY21wKGli dWYsIkNPVU5UID0gIiw4KSkKKysJCXsKKysJICAgICAgICBmcHV0cyhpYnVmLCByZnApOworKwkJ YnJlYWs7CisrICAgICAgICAgICAgICAgIH0KKysJICAgIGlmKCFzdHJuY2FzZWNtcChpYnVmLCJD T1VOVD0iLDYpKQorKwkJeworKwkgICAgICAgIGZwdXRzKGlidWYsIHJmcCk7CisrCQlicmVhazsK KysgICAgICAgICAgICAgICAgfQorKwkgICAgaWYoIXN0cm5jYXNlY21wKGlidWYsIk51bUtleXMg PSAiLDEwKSkKKysJCXsKKysJCW51bWtleXM9YXRvaShpYnVmKzEwKTsKKysJCWJyZWFrOworKwkJ fQorKwkgIAorKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmKCFzdHJuY2FzZWNtcChp YnVmLCJLRVkgPSAiLDYpKQorKwkJeworKwkJYWtleXN6PTY0OworKwkJbGVuID0gaGV4MmJpbigo Y2hhciopaWJ1Zis2LCBhS2V5KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBw cmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBlcnI9MTsKKysJCSAgICBicmVhazsKKysJ CSAgICB9CisrCQlQcmludFZhbHVlKCJLRVkiLCBhS2V5LCBsZW4pOworKwkJKytzdGVwOworKwkJ fQorKwkgICAgZWxzZSBpZighc3RybmNhc2VjbXAoaWJ1ZiwiS0VZcyA9ICIsNykpCisrCQl7Cisr CQlha2V5c3o9NjQqMzsKKysJCWxlbj1oZXgyYmluKGlidWYrNyxhS2V5KTsKKysJCWlmKGxlbiAh PSA4KQorKwkJICAgIHsKKysJCSAgICBwcmludGYoIkludmFsaWQgS0VZXG4iKTsKKysJCSAgICBl cnI9MTsKKysJCSAgICBicmVhazsKKysJCSAgICB9CisrCQltZW1jcHkoYUtleSs4LGFLZXksOCk7 CisrCQltZW1jcHkoYUtleSsxNixhS2V5LDgpOworKwkJaWJ1Zls0XT0nXDAnOworKwkJUHJpbnRW YWx1ZSgiS0VZcyIsYUtleSxsZW4pOworKwkJKytzdGVwOworKwkJfQorKwkgICAgZWxzZSBpZigh c3RybmNhc2VjbXAoaWJ1ZiwiS0VZIiwzKSkKKysJCXsKKysJCWludCBuPWlidWZbM10tJzEnOwor KworKwkJYWtleXN6PTY0KjM7CisrCQlsZW49aGV4MmJpbihpYnVmKzcsYUtleStuKjgpOworKwkJ aWYobGVuICE9IDgpCisrCQkgICAgeworKwkJICAgIHByaW50ZigiSW52YWxpZCBLRVlcbiIpOwor KwkJICAgIGVycj0xOworKwkJICAgIGJyZWFrOworKwkJICAgIH0KKysJCWlidWZbNF09J1wwJzsK KysJCVByaW50VmFsdWUoaWJ1ZixhS2V5LGxlbik7CisrCQlpZihuID09IDIpCisrCQkgICAgKytz dGVwOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtFWVxuIik7 CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgMzogLyogSVYgPSB4 eHh4ICovCisrCSAgICBmcHV0cyhpYnVmLCByZnApOworKwkgICAgaWYgKHN0cm5jYXNlY21wKGli dWYsICJJViA9ICIsIDUpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgSVZcbiIpOwor KwkJZXJyID0gMTsKKysJCX0KKysJICAgIGVsc2UKKysJCXsKKysJCWxlbiA9IGhleDJiaW4oKGNo YXIqKWlidWYrNSwgaVZlYyk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAgICB7CisrCQkgICAgcHJp bnRmKCJJbnZhbGlkIElWXG4iKTsKKysJCSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkg ICAgfQorKwkJUHJpbnRWYWx1ZSgiSVYiLCBpVmVjLCBsZW4pOworKwkJc3RlcCA9IChkaXIpPyA0 OiA1OworKwkJfQorKwkgICAgYnJlYWs7CisrCisrCWNhc2UgNDogLyogUExBSU5URVhUID0geHh4 eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVm LCAiUExBSU5URVhUID0gIiwgMTIpICE9IDApCisrCQl7CisrCQlwcmludGYoIk1pc3NpbmcgUExB SU5URVhUXG4iKTsKKysJCWVyciA9IDE7CisrCQl9CisrCSAgICBlbHNlCisrCQl7CisrCQlpbnQg bm4gPSBzdHJsZW4oaWJ1ZisxMik7CisrCQlpZighc3RyY21wKGFtb2RlLCJDRkIxIikpCisrCQkg ICAgbGVuPWJpbnQyYmluKGlidWYrMTIsbm4tMSxwbGFpbnRleHQpOworKwkJZWxzZQorKwkJICAg IGxlbj1oZXgyYmluKGlidWYrMTIsIHBsYWludGV4dCk7CisrCQlpZiAobGVuIDwgMCkKKysJCSAg ICB7CisrCQkgICAgcHJpbnRmKCJJbnZhbGlkIFBMQUlOVEVYVDogJXMiLCBpYnVmKzEyKTsKKysJ CSAgICBlcnIgPTE7CisrCQkgICAgYnJlYWs7CisrCQkgICAgfQorKwkJaWYgKGxlbiA+PSBzaXpl b2YocGxhaW50ZXh0KSkKKysJCSAgICB7CisrCQkgICAgcHJpbnRmKCJCdWZmZXIgb3ZlcmZsb3dc biIpOworKwkJICAgIH0KKysJCVByaW50VmFsdWUoIlBMQUlOVEVYVCIsICh1bnNpZ25lZCBjaGFy KilwbGFpbnRleHQsIGxlbik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAg LyogTW9udGUgQ2FybG8gVGVzdCAqLworKwkJICAgIHsKKysJCSAgICBkb19tY3QoYW1vZGUsYWtl eXN6LG51bWtleXMsYUtleSxpVmVjLGRpcixwbGFpbnRleHQsbGVuLHJmcCk7CisrCQkgICAgfQor KwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBhc3NlcnQoZGlyID09IDEpOworKwkJICAgIHJldCA9 IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGlyLCAg LyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgY2lwaGVydGV4dCwgcGxhaW50 ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJDSVBIRVJURVhUIixjaXBoZXJ0ZXh0LGxl bixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7CisrCQkgICAgfQorKwkJc3RlcCA9 IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA1OiAvKiBDSVBIRVJURVhUID0geHh4 eCAqLworKwkgICAgZnB1dHMoaWJ1ZiwgcmZwKTsKKysJICAgIGlmIChzdHJuY2FzZWNtcChpYnVm LCAiQ0lQSEVSVEVYVCA9ICIsIDEzKSAhPSAwKQorKwkJeworKwkJcHJpbnRmKCJNaXNzaW5nIEtF WVxuIik7CisrCQllcnIgPSAxOworKwkJfQorKwkgICAgZWxzZQorKwkJeworKwkJaWYoIXN0cmNt cChhbW9kZSwiQ0ZCMSIpKQorKwkJICAgIGxlbj1iaW50MmJpbihpYnVmKzEzLHN0cmxlbihpYnVm KzEzKS0xLGNpcGhlcnRleHQpOworKwkJZWxzZQorKwkJICAgIGxlbiA9IGhleDJiaW4oaWJ1Zisx MyxjaXBoZXJ0ZXh0KTsKKysJCWlmIChsZW4gPCAwKQorKwkJICAgIHsKKysJCSAgICBwcmludGYo IkludmFsaWQgQ0lQSEVSVEVYVFxuIik7CisrCQkgICAgZXJyID0xOworKwkJICAgIGJyZWFrOwor KwkJICAgIH0KKysJCQorKwkJUHJpbnRWYWx1ZSgiQ0lQSEVSVEVYVCIsIGNpcGhlcnRleHQsIGxl bik7CisrCQlpZiAoc3RyY21wKGF0ZXN0LCAiTW9udGUiKSA9PSAwKSAgLyogTW9udGUgQ2FybG8g VGVzdCAqLworKwkJICAgIHsKKysJCSAgICBkb19tY3QoYW1vZGUsIGFrZXlzeiwgbnVta2V5cywg YUtleSwgaVZlYywgCisrCQkJICAgZGlyLCBjaXBoZXJ0ZXh0LCBsZW4sIHJmcCk7CisrCQkgICAg fQorKwkJZWxzZQorKwkJICAgIHsKKysJCSAgICBhc3NlcnQoZGlyID09IDApOworKwkJICAgIHJl dCA9IERFU1Rlc3QoJmN0eCwgYW1vZGUsIGFrZXlzeiwgYUtleSwgaVZlYywgCisrCQkJCSAgZGly LCAgLyogMCA9IGRlY3J5cHQsIDEgPSBlbmNyeXB0ICovCisrCQkJCSAgcGxhaW50ZXh0LCBjaXBo ZXJ0ZXh0LCBsZW4pOworKwkJICAgIE91dHB1dFZhbHVlKCJQTEFJTlRFWFQiLCh1bnNpZ25lZCBj aGFyICopcGxhaW50ZXh0LGxlbixyZnAsCisrCQkJCSFzdHJjbXAoYW1vZGUsIkNGQjEiKSk7Cisr CQkgICAgfQorKwkJc3RlcCA9IDY7CisrCQl9CisrCSAgICBicmVhazsKKysKKysJY2FzZSA2Ogor KwkgICAgaWYgKGlidWZbMF0gIT0gJ1xuJykKKysJCXsKKysJCWVyciA9IDE7CisrCQlwcmludGYo Ik1pc3NpbmcgdGVybWluYXRvclxuIik7CisrCQl9CisrCSAgICBlbHNlIGlmIChzdHJjbXAoYXRl c3QsICJNQ1QiKSAhPSAwKQorKwkJeyAvKiBNQ1QgYWxyZWFkeSBhZGRlZCB0ZXJtaW5hdGluZyBu bCAqLworKwkJZnB1dHMoaWJ1ZiwgcmZwKTsKKysJCX0KKysJICAgIHN0ZXAgPSAxOworKwkgICAg YnJlYWs7CisrCSAgICB9CisrCX0KKysgICAgaWYgKHJmcCkKKysJZmNsb3NlKHJmcCk7CisrICAg IGlmIChhZnApCisrCWZjbG9zZShhZnApOworKyAgICByZXR1cm4gZXJyOworKyAgICB9CisrCisr LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyAg UHJvY2Vzc2VzIGVpdGhlciBhIHNpbmdsZSBmaWxlIG9yIAorKyAgYSBzZXQgb2YgZmlsZXMgd2hv c2UgbmFtZXMgYXJlIHBhc3NlZCBpbiBhIGZpbGUuCisrICBBIHNpbmdsZSBmaWxlIGlzIHNwZWNp ZmllZCBhczoKKysgICAgYWVzX3Rlc3QgLWYgeHh4LnJlcQorKyAgQSBzZXQgb2YgZmlsZXMgaXMg c3BlY2lmaWVkIGFzOgorKyAgICBhZXNfdGVzdCAtZCB4eHh4eC54eHgKKysgIFRoZSBkZWZhdWx0 IGlzOiAtZCByZXEudHh0CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0qLworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKysgICAgewor KyAgICBjaGFyICpycWxpc3QgPSAicmVxLnR4dCIsICpyc3BmaWxlID0gTlVMTDsKKysgICAgRklM RSAqZnAgPSBOVUxMOworKyAgICBjaGFyIGZuWzI1MF0gPSAiIiwgcmZuWzI1Nl0gPSAiIjsKKysg ICAgaW50IGZfb3B0ID0gMCwgZF9vcHQgPSAxOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysg ICAgaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrCUVY SVQoMSk7CisrCX0KKysjZW5kaWYKKysgICAgaWYgKGFyZ2MgPiAxKQorKwl7CisrCWlmIChzdHJj YXNlY21wKGFyZ3ZbMV0sICItZCIpID09IDApCisrCSAgICB7CisrCSAgICBkX29wdCA9IDE7Cisr CSAgICB9CisrCWVsc2UgaWYgKHN0cmNhc2VjbXAoYXJndlsxXSwgIi1mIikgPT0gMCkKKysJICAg IHsKKysJICAgIGZfb3B0ID0gMTsKKysJICAgIGRfb3B0ID0gMDsKKysJICAgIH0KKysJZWxzZQor KwkgICAgeworKwkgICAgcHJpbnRmKCJJbnZhbGlkIHBhcmFtZXRlcjogJXNcbiIsIGFyZ3ZbMV0p OworKwkgICAgcmV0dXJuIDA7CisrCSAgICB9CisrCWlmIChhcmdjIDwgMykKKysJICAgIHsKKysJ ICAgIHByaW50ZigiTWlzc2luZyBwYXJhbWV0ZXJcbiIpOworKwkgICAgcmV0dXJuIDA7CisrCSAg ICB9CisrCWlmIChkX29wdCkKKysJICAgIHJxbGlzdCA9IGFyZ3ZbMl07CisrCWVsc2UKKysJICAg IHsKKysJICAgIHN0cmNweShmbiwgYXJndlsyXSk7CisrCSAgICByc3BmaWxlID0gYXJndlszXTsK KysJICAgIH0KKysJfQorKyAgICBpZiAoZF9vcHQpCisrCXsgLyogbGlzdCBvZiBmaWxlcyAoZGly ZWN0b3J5KSAqLworKwlpZiAoIShmcCA9IGZvcGVuKHJxbGlzdCwgInIiKSkpCisrCSAgICB7Cisr CSAgICBwcmludGYoIkNhbm5vdCBvcGVuIHJlcSBsaXN0IGZpbGVcbiIpOworKwkgICAgcmV0dXJu IC0xOworKwkgICAgfQorKwl3aGlsZSAoZmdldHMoZm4sIHNpemVvZihmbiksIGZwKSkKKysJICAg IHsKKysJICAgIHN0cnRvayhmbiwgIlxyXG4iKTsKKysJICAgIHN0cmNweShyZm4sIGZuKTsKKysJ ICAgIHByaW50ZigiUHJvY2Vzc2luZzogJXNcbiIsIHJmbik7CisrCSAgICBpZiAocHJvY19maWxl KHJmbiwgcnNwZmlsZSkpCisrCQl7CisrCQlwcmludGYoIj4+PiBQcm9jZXNzaW5nIGZhaWxlZCBm b3I6ICVzIDw8PFxuIiwgcmZuKTsKKysJCUVYSVQoMSk7CisrCQl9CisrCSAgICB9CisrCWZjbG9z ZShmcCk7CisrCX0KKysgICAgZWxzZSAvKiBzaW5nbGUgZmlsZSAqLworKwl7CisrCWlmIChWRVJC T1NFKQorKwkJcHJpbnRmKCJQcm9jZXNzaW5nOiAlc1xuIiwgZm4pOworKwlpZiAocHJvY19maWxl KGZuLCByc3BmaWxlKSkKKysJICAgIHsKKysJICAgIHByaW50ZigiPj4+IFByb2Nlc3NpbmcgZmFp bGVkIGZvcjogJXMgPDw8XG4iLCBmbik7CisrCSAgICB9CisrCX0KKysgICAgRVhJVCgwKTsKKysg ICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2ZpcHMvY2F2cy9maXBzX2Rzc3ZzLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9m aXBzL2NhdnMvZmlwc19kc3N2cy5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZz L2ZpcHNfZHNzdnMuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfZHNzdnMuYwkyMDEwLTAzLTMw IDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw1MzcgQEAKKysjaW5jbHVkZSA8 b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1 ZGUgPHN0ZGlvLmg+CisrCisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorK3sKKysg ICAgcHJpbnRmKCJObyBGSVBTIERTQSBzdXBwb3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30K KysjZWxzZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysj aW5jbHVkZSA8Y3R5cGUuaD4KKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKytzdGF0aWMg dm9pZCBwYm4oY29uc3QgY2hhciAqbmFtZSwgQklHTlVNICpibikKKysJeworKwlpbnQgbGVuLCBp OworKwl1bnNpZ25lZCBjaGFyICp0bXA7CisrCWxlbiA9IEJOX251bV9ieXRlcyhibik7CisrCXRt cCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7CisrCWlmICghdG1wKQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7CisrCQlyZXR1cm47CisrCQl9Cisr CUJOX2JuMmJpbihibiwgdG1wKTsKKysJcHJpbnRmKCIlcyA9ICIsIG5hbWUpOworKwlmb3IgKGkg PSAwOyBpIDwgbGVuOyBpKyspCisrCQlwcmludGYoIiUwMlgiLCB0bXBbaV0pOworKwlmcHV0cygi XG4iLCBzdGRvdXQpOworKwlPUEVOU1NMX2ZyZWUodG1wKTsKKysJcmV0dXJuOworKwl9CisrCisr dm9pZCBwcmltZXMoKQorKyAgICB7CisrICAgIGNoYXIgYnVmWzEwMjQwXTsKKysgICAgY2hhciBs YnVmWzEwMjQwXTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKworKyAgICB3aGlsZShm Z2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVMTCkKKysJeworKwlmcHV0cyhidWYsc3Rk b3V0KTsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1ZikpCisr CQljb250aW51ZTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJQcmltZSIpKQorKwkgICAgeworKwkg ICAgQklHTlVNICpwcDsKKysKKysJICAgIHBwPUJOX25ldygpOworKwkgICAgZG9faGV4MmJuKCZw cCx2YWx1ZSk7CisrCSAgICBwcmludGYoInJlc3VsdD0gJWNcbiIsCisrCQkgICBCTl9pc19wcmlt ZV9leChwcCwyMCxOVUxMLE5VTEwpID8gJ1AnIDogJ0YnKTsKKysJICAgIH0JICAgIAorKwl9Cisr ICAgIH0KKysKKyt2b2lkIHBxZygpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAg IGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBpbnQg bm1vZD0wOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1ZixzdGRpbikgIT0gTlVM TCkKKysJeworKwlpZiAoIXBhcnNlX2xpbmUoJmtleXdvcmQsICZ2YWx1ZSwgbGJ1ZiwgYnVmKSkK KysJCXsKKysJCWZwdXRzKGJ1ZixzdGRvdXQpOworKwkJY29udGludWU7CisrCQl9CisrCWlmKCFz dHJjbXAoa2V5d29yZCwiW21vZCIpKQorKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJZWxzZSBp Zighc3RyY21wKGtleXdvcmQsIk4iKSkKKysJICAgIHsKKysJICAgIGludCBuPWF0b2kodmFsdWUp OworKworKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCisrCSAgICB3aGls ZShuLS0pCisrCQl7CisrCQl1bnNpZ25lZCBjaGFyIHNlZWRbMjBdOworKwkJRFNBICpkc2E7Cisr CQlpbnQgY291bnRlcjsKKysJCXVuc2lnbmVkIGxvbmcgaDsKKysJCWRzYSA9IEZJUFNfZHNhX25l dygpOworKworKwkJaWYgKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIG5tb2Qsc2Vl ZCwwLCZjb3VudGVyLCZoLE5VTEwpKQorKwkJCXsKKysJCQlkb19wcmludF9lcnJvcnMoKTsKKysJ CQlleGl0KDEpOworKwkJCX0KKysJCXBibigiUCIsZHNhLT5wKTsKKysJCXBibigiUSIsZHNhLT5x KTsKKysJCXBibigiRyIsZHNhLT5nKTsKKysJCXB2KCJTZWVkIixzZWVkLDIwKTsKKysJCXByaW50 ZigiYyA9ICVkXG4iLGNvdW50ZXIpOworKwkJcHJpbnRmKCJIID0gJWx4XG4iLGgpOworKwkJcHV0 YygnXG4nLHN0ZG91dCk7CisrCQl9CisrCSAgICB9CisrCWVsc2UKKysJICAgIGZwdXRzKGJ1Zixz dGRvdXQpOworKwl9CisrICAgIH0KKysKKyt2b2lkIHBxZ3ZlcigpCisrICAgIHsKKysgICAgY2hh ciBidWZbMTAyNF07CisrICAgIGNoYXIgbGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOworKyAgICBCSUdOVU0gKnAgPSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTDsKKysg ICAgaW50IGNvdW50ZXIsIGNvdW50ZXIyOworKyAgICB1bnNpZ25lZCBsb25nIGgsIGgyOworKyAg ICBEU0EgKmRzYT1OVUxMOworKyAgICBpbnQgbm1vZD0wOworKyAgICB1bnNpZ25lZCBjaGFyIHNl ZWRbMTAyNF07CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBO VUxMKQorKwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYp KQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJZnB1 dHMoYnVmLCBzdGRvdXQpOworKwlpZighc3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIG5t b2Q9YXRvaSh2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJQIikpCisrCSAgICBw PWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBx PWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJHIikpCisrCSAgICBn PWhleDJibih2YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJTZWVkIikpCisrCSAg ICB7CisrCSAgICBpbnQgc2xlbiA9IGhleDJiaW4odmFsdWUsIHNlZWQpOworKwkgICAgaWYgKHNs ZW4gIT0gMjApCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIlNlZWQgcGFyc2UgbGVuZ3RoIGVy cm9yXG4iKTsKKysJCWV4aXQgKDEpOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAo a2V5d29yZCwiYyIpKQorKwkgICAgY291bnRlciA9YXRvaShidWYrNCk7CisrCWVsc2UgaWYoIXN0 cmNtcChrZXl3b3JkLCJIIikpCisrCSAgICB7CisrCSAgICBoID0gYXRvaSh2YWx1ZSk7CisrCSAg ICBpZiAoIXAgfHwgIXEgfHwgIWcpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIlBhcnNlIEVy cm9yXG4iKTsKKysJCWV4aXQgKDEpOworKwkJfQorKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7 CisrCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxzZWVkLDIw ICwmY291bnRlcjIsJmgyLE5VTEwpKQorKwkJCXsKKysJCQlkb19wcmludF9lcnJvcnMoKTsKKysJ CQlleGl0KDEpOworKwkJCX0KKysgICAgICAgICAgICBpZiAoQk5fY21wKGRzYS0+cCwgcCkgfHwg Qk5fY21wKGRzYS0+cSwgcSkgfHwgQk5fY21wKGRzYS0+ZywgZykKKysJCXx8IChjb3VudGVyICE9 IGNvdW50ZXIyKSB8fCAoaCAhPSBoMikpCisrCSAgICAJcHJpbnRmKCJSZXN1bHQgPSBGXG4iKTsK KysJICAgIGVsc2UKKysJICAgIAlwcmludGYoIlJlc3VsdCA9IFBcbiIpOworKwkgICAgQk5fZnJl ZShwKTsKKysJICAgIEJOX2ZyZWUocSk7CisrCSAgICBCTl9mcmVlKGcpOworKwkgICAgcCA9IE5V TEw7CisrCSAgICBxID0gTlVMTDsKKysJICAgIGcgPSBOVUxMOworKwkgICAgRklQU19kc2FfZnJl ZShkc2EpOworKwkgICAgZHNhID0gTlVMTDsKKysJICAgIH0KKysJfQorKyAgICB9CisrCisrLyog S2V5cGFpciB2ZXJpZmljYXRpb24gcm91dGluZS4gTkI6IHRoaXMgaXNuJ3QgcGFydCBvZiB0aGUg c3RhbmRhcmQgRklQUzE0MC0yCisrICogYWxnb3JpdGhtIHRlc3RzLiBJdCBpcyBhbiBhZGRpdGlv bmFsIHRlc3QgdG8gcGVyZm9ybSBzYW5pdHkgY2hlY2tzIG9uIHRoZQorKyAqIG91dHB1dCBvZiB0 aGUgS2V5UGFpciB0ZXN0LgorKyAqLworKworK3N0YXRpYyBpbnQgZHNzX3BhcmFtY2hlY2soaW50 IG5tb2QsIEJJR05VTSAqcCwgQklHTlVNICpxLCBCSUdOVU0gKmcsCisrCQkJCQkJCUJOX0NUWCAq Y3R4KQorKyAgICB7CisrICAgIEJJR05VTSAqcmVtID0gTlVMTDsKKysgICAgaWYgKEJOX251bV9i aXRzKHApICE9IG5tb2QpCisrCXJldHVybiAwOworKyAgICBpZiAoQk5fbnVtX2JpdHMocSkgIT0g MTYwKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKEJOX2lzX3ByaW1lX2V4KHAsIEJOX3ByaW1lX2No ZWNrcywgY3R4LCBOVUxMKSAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKEJOX2lzX3ByaW1l X2V4KHEsIEJOX3ByaW1lX2NoZWNrcywgY3R4LCBOVUxMKSAhPSAxKQorKwlyZXR1cm4gMDsKKysg ICAgcmVtID0gQk5fbmV3KCk7CisrICAgIGlmICghQk5fbW9kKHJlbSwgcCwgcSwgY3R4KSB8fCAh Qk5faXNfb25lKHJlbSkKKysgICAgCXx8IChCTl9jbXAoZywgQk5fdmFsdWVfb25lKCkpIDw9IDAp CisrCXx8ICFCTl9tb2RfZXhwKHJlbSwgZywgcSwgcCwgY3R4KSB8fCAhQk5faXNfb25lKHJlbSkp CisrCXsKKysJQk5fZnJlZShyZW0pOworKwlyZXR1cm4gMDsKKysJfQorKyAgICAvKiBUb2RvOiBj aGVjayBnICovCisrICAgIEJOX2ZyZWUocmVtKTsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysK Kyt2b2lkIGtleXZlcigpCisrICAgIHsKKysgICAgY2hhciBidWZbMTAyNF07CisrICAgIGNoYXIg bGJ1ZlsxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwgKnZhbHVlOworKyAgICBCSUdOVU0gKnAg PSBOVUxMLCAqcSA9IE5VTEwsICpnID0gTlVMTCwgKlggPSBOVUxMLCAqWSA9IE5VTEw7CisrICAg IEJJR05VTSAqWTI7CisrICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKKysgICAgaW50IG5tb2Q9MCwg cGFyYW1jaGVjayA9IDA7CisrCisrICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKKysgICAgWTIgPSBC Tl9uZXcoKTsKKysKKysgICAgd2hpbGUoZmdldHMoYnVmLHNpemVvZiBidWYsc3RkaW4pICE9IE5V TEwpCisrCXsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxidWYsIGJ1Zikp CisrCQl7CisrCQlmcHV0cyhidWYsc3Rkb3V0KTsKKysJCWNvbnRpbnVlOworKwkJfQorKwlpZigh c3RyY21wKGtleXdvcmQsIlttb2QiKSkKKysJICAgIHsKKysJICAgIGlmIChwKQorKwkJQk5fZnJl ZShwKTsKKysJICAgIHAgPSBOVUxMOworKwkgICAgaWYgKHEpCisrCQlCTl9mcmVlKHEpOworKwkg ICAgcSA9IE5VTEw7CisrCSAgICBpZiAoZykKKysJCUJOX2ZyZWUoZyk7CisrCSAgICBnID0gTlVM TDsKKysJICAgIHBhcmFtY2hlY2sgPSAwOworKwkgICAgbm1vZD1hdG9pKHZhbHVlKTsKKysJICAg IH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlAiKSkKKysJICAgIHA9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlEiKSkKKysJICAgIHE9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIGc9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlgiKSkKKysJICAgIFg9aGV4MmJuKHZhbHVl KTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlkiKSkKKysJICAgIHsKKysJICAgIFk9aGV4 MmJuKHZhbHVlKTsKKysJICAgIGlmICghcCB8fCAhcSB8fCAhZyB8fCAhWCB8fCAhWSkKKysJCXsK KysJCWZwcmludGYoc3RkZXJyLCAiUGFyc2UgRXJyb3JcbiIpOworKwkJZXhpdCAoMSk7CisrCQl9 CisrCSAgICBwYm4oIlAiLHApOworKwkgICAgcGJuKCJRIixxKTsKKysJICAgIHBibigiRyIsZyk7 CisrCSAgICBwYm4oIlgiLFgpOworKwkgICAgcGJuKCJZIixZKTsKKysJICAgIGlmICghcGFyYW1j aGVjaykKKysJCXsKKysJCWlmIChkc3NfcGFyYW1jaGVjayhubW9kLCBwLCBxLCBnLCBjdHgpKQor KwkJCXBhcmFtY2hlY2sgPSAxOworKwkJZWxzZQorKwkJCXBhcmFtY2hlY2sgPSAtMTsKKysJCX0K KysJICAgIGlmIChwYXJhbWNoZWNrICE9IDEpCisrCSAgIAlwcmludGYoIlJlc3VsdCA9IEZcbiIp OworKwkgICAgZWxzZQorKwkJeworKwkJaWYgKCFCTl9tb2RfZXhwKFkyLCBnLCBYLCBwLCBjdHgp IHx8IEJOX2NtcChZMiwgWSkpCisrCSAgICAJCXByaW50ZigiUmVzdWx0ID0gRlxuIik7CisrCSAg ICAgICAgZWxzZQorKwkgICAgCQlwcmludGYoIlJlc3VsdCA9IFBcbiIpOworKwkJfQorKwkgICAg Qk5fZnJlZShYKTsKKysJICAgIEJOX2ZyZWUoWSk7CisrCSAgICBYID0gTlVMTDsKKysJICAgIFkg PSBOVUxMOworKwkgICAgfQorKwl9CisrCWlmIChwKQorKwkgICAgQk5fZnJlZShwKTsKKysJaWYg KHEpCisrCSAgICBCTl9mcmVlKHEpOworKwlpZiAoZykKKysJICAgIEJOX2ZyZWUoZyk7CisrCWlm IChZMikKKysJICAgIEJOX2ZyZWUoWTIpOworKyAgICB9CisrCisrdm9pZCBrZXlwYWlyKCkKKysg ICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEwMjRdOworKyAgICBj aGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7CisrCisrICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGlu ZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91 dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisr CSAgICBubW9kPWF0b2kodmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiTiIpKQor KwkgICAgeworKwkgICAgRFNBICpkc2E7CisrCSAgICBpbnQgbj1hdG9pKHZhbHVlKTsKKysKKysJ ICAgIHByaW50ZigiW21vZCA9ICVkXVxuXG4iLG5tb2QpOworKwkgICAgZHNhID0gRklQU19kc2Ff bmV3KCk7CisrCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxO VUxMLDAsTlVMTCxOVUxMLE5VTEwpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQll eGl0KDEpOworKwkJfQorKwkgICAgcGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2Et PnEpOworKwkgICAgcGJuKCJHIixkc2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7Cisr CisrCSAgICB3aGlsZShuLS0pCisrCQl7CisrCQlpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkK KysJCQl7CisrCQkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQkJZXhpdCgxKTsKKysJCQl9CisrCisr CQlwYm4oIlgiLGRzYS0+cHJpdl9rZXkpOworKwkJcGJuKCJZIixkc2EtPnB1Yl9rZXkpOworKwkJ cHV0YygnXG4nLHN0ZG91dCk7CisrCQl9CisrCSAgICB9CisrCX0KKysgICAgfQorKworK3ZvaWQg c2lnZ2VuKCkKKysgICAgeworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEw MjRdOworKyAgICBjaGFyICprZXl3b3JkLCAqdmFsdWU7CisrICAgIGludCBubW9kPTA7CisrICAg IERTQSAqZHNhPU5VTEw7CisrCisrICAgIHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGlu KSAhPSBOVUxMKQorKwl7CisrCWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVm LCBidWYpKQorKwkJeworKwkJZnB1dHMoYnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0K KysJaWYoIXN0cmNtcChrZXl3b3JkLCJbbW9kIikpCisrCSAgICB7CisrCSAgICBubW9kPWF0b2ko dmFsdWUpOworKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5cbiIsbm1vZCk7CisrCSAgICBpZiAo ZHNhKQorKwkJRklQU19kc2FfZnJlZShkc2EpOworKwkgICAgZHNhID0gRklQU19kc2FfbmV3KCk7 CisrCSAgICBpZiAoIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgbm1vZCxOVUxMLDAs TlVMTCxOVUxMLE5VTEwpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlleGl0KDEp OworKwkJfQorKwkgICAgcGJuKCJQIixkc2EtPnApOworKwkgICAgcGJuKCJRIixkc2EtPnEpOwor KwkgICAgcGJuKCJHIixkc2EtPmcpOworKwkgICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICB9 CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJNc2ciKSkKKysJICAgIHsKKysJICAgIHVuc2ln bmVkIGNoYXIgbXNnWzEwMjRdOworKwkgICAgdW5zaWduZWQgY2hhciBzYnVmWzYwXTsKKysJICAg IHVuc2lnbmVkIGludCBzbGVuOworKwkgICAgaW50IG47CisrCSAgICBFVlBfUEtFWSBwazsKKysJ ICAgIEVWUF9NRF9DVFggbWN0eDsKKysJICAgIERTQV9TSUcgKnNpZzsKKysJICAgIEVWUF9NRF9D VFhfaW5pdCgmbWN0eCk7CisrCisrCSAgICBuPWhleDJiaW4odmFsdWUsbXNnKTsKKysJICAgIHB2 KCJNc2ciLG1zZyxuKTsKKysKKysJICAgIGlmICghRFNBX2dlbmVyYXRlX2tleShkc2EpKQorKwkJ eworKwkJZG9fcHJpbnRfZXJyb3JzKCk7CisrCQlleGl0KDEpOworKwkJfQorKwkgICAgcGsudHlw ZSA9IEVWUF9QS0VZX0RTQTsKKysJICAgIHBrLnBrZXkuZHNhID0gZHNhOworKwkgICAgcGJuKCJZ Iixkc2EtPnB1Yl9rZXkpOworKworKwkgICAgRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNz MSgpLCBOVUxMKTsKKysJICAgIEVWUF9TaWduVXBkYXRlKCZtY3R4LCBtc2csIG4pOworKwkgICAg RVZQX1NpZ25GaW5hbCgmbWN0eCwgc2J1ZiwgJnNsZW4sICZwayk7CisrCisrCSAgICBzaWcgPSBE U0FfU0lHX25ldygpOworKwkgICAgRklQU19kc2Ffc2lnX2RlY29kZShzaWcsIHNidWYsIHNsZW4p OworKworKwkgICAgcGJuKCJSIixzaWctPnIpOworKwkgICAgcGJuKCJTIixzaWctPnMpOworKwkg ICAgcHV0YygnXG4nLHN0ZG91dCk7CisrCSAgICBEU0FfU0lHX2ZyZWUoc2lnKTsKKysJICAgIEVW UF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrCSAgICB9CisrCX0KKysJaWYgKGRzYSkKKysJCUZJ UFNfZHNhX2ZyZWUoZHNhKTsKKysgICAgfQorKworK3ZvaWQgc2lndmVyKCkKKysgICAgeworKyAg ICBEU0EgKmRzYT1OVUxMOworKyAgICBjaGFyIGJ1ZlsxMDI0XTsKKysgICAgY2hhciBsYnVmWzEw MjRdOworKyAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMDI0XTsKKysgICAgY2hhciAqa2V5d29yZCwg KnZhbHVlOworKyAgICBpbnQgbm1vZD0wLCBuPTA7CisrICAgIERTQV9TSUcgc2csICpzaWcgPSAm c2c7CisrCisrICAgIHNpZy0+ciA9IE5VTEw7CisrICAgIHNpZy0+cyA9IE5VTEw7CisrCisrICAg IHdoaWxlKGZnZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWlmICgh cGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJeworKwkJZnB1dHMo YnVmLHN0ZG91dCk7CisrCQljb250aW51ZTsKKysJCX0KKysJaWYoIXN0cmNtcChrZXl3b3JkLCJb bW9kIikpCisrCSAgICB7CisrCSAgICBubW9kPWF0b2kodmFsdWUpOworKwkgICAgaWYoZHNhKQor KwkJRklQU19kc2FfZnJlZShkc2EpOworKwkgICAgZHNhPUZJUFNfZHNhX25ldygpOworKwkgICAg fQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUCIpKQorKwkgICAgZHNhLT5wPWhleDJibih2 YWx1ZSk7CisrCWVsc2UgaWYoIXN0cmNtcChrZXl3b3JkLCJRIikpCisrCSAgICBkc2EtPnE9aGV4 MmJuKHZhbHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIkciKSkKKysJICAgIHsKKysJ ICAgIGRzYS0+Zz1oZXgyYm4odmFsdWUpOworKworKwkgICAgcHJpbnRmKCJbbW9kID0gJWRdXG5c biIsbm1vZCk7CisrCSAgICBwYm4oIlAiLGRzYS0+cCk7CisrCSAgICBwYm4oIlEiLGRzYS0+cSk7 CisrCSAgICBwYm4oIkciLGRzYS0+Zyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJICAg IH0KKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIk1zZyIpKQorKwkgICAgeworKwkgICAgbj1o ZXgyYmluKHZhbHVlLG1zZyk7CisrCSAgICBwdigiTXNnIixtc2csbik7CisrCSAgICB9CisrCWVs c2UgaWYoIXN0cmNtcChrZXl3b3JkLCJZIikpCisrCSAgICBkc2EtPnB1Yl9rZXk9aGV4MmJuKHZh bHVlKTsKKysJZWxzZSBpZighc3RyY21wKGtleXdvcmQsIlIiKSkKKysJICAgIHNpZy0+cj1oZXgy Ym4odmFsdWUpOworKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwiUyIpKQorKwkgICAgeworKwkg ICAgRVZQX01EX0NUWCBtY3R4OworKwkgICAgRVZQX1BLRVkgcGs7CisrCSAgICB1bnNpZ25lZCBj aGFyIHNpZ2J1Zls2MF07CisrCSAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysJICAgIGludCByOwor KwkgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysJICAgIHBrLnR5cGUgPSBFVlBfUEtFWV9E U0E7CisrCSAgICBway5wa2V5LmRzYSA9IGRzYTsKKysJICAgIHNpZy0+cz1oZXgyYm4odmFsdWUp OworKwkKKysJICAgIHBibigiWSIsZHNhLT5wdWJfa2V5KTsKKysJICAgIHBibigiUiIsc2lnLT5y KTsKKysJICAgIHBibigiUyIsc2lnLT5zKTsKKysKKysJICAgIHNsZW4gPSBGSVBTX2RzYV9zaWdf ZW5jb2RlKHNpZ2J1Ziwgc2lnKTsKKysJICAgIEVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBf ZHNzMSgpLCBOVUxMKTsKKysJICAgIEVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIG1zZywgbik7Cisr CSAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWdidWYsIHNsZW4sICZwayk7CisrCSAg ICBFVlBfTURfQ1RYX2NsZWFudXAoJm1jdHgpOworKwkKKysJICAgIHByaW50ZigiUmVzdWx0ID0g JWNcbiIsIHIgPT0gMSA/ICdQJyA6ICdGJyk7CisrCSAgICBwdXRjKCdcbicsc3Rkb3V0KTsKKysJ ICAgIH0KKysJfQorKyAgICB9CisrCisraW50IG1haW4oaW50IGFyZ2MsY2hhciAqKmFyZ3YpCisr ICAgIHsKKysgICAgaWYoYXJnYyAhPSAyKQorKwl7CisrCWZwcmludGYoc3RkZXJyLCIlcyBbcHJp bWV8cHFnfHBxZ3ZlcnxrZXlwYWlyfHNpZ2dlbnxzaWd2ZXJdXG4iLGFyZ3ZbMF0pOworKwlleGl0 KDEpOworKwl9CisrICAgIGlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwl7CisrCWRvX3ByaW50X2Vy cm9ycygpOworKwlleGl0KDEpOworKwl9CisrICAgIGlmKCFzdHJjbXAoYXJndlsxXSwicHJpbWUi KSkKKysJcHJpbWVzKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWciKSkKKysJ cHFnKCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJwcWd2ZXIiKSkKKysJcHFndmVy KCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJrZXlwYWlyIikpCisrCWtleXBhaXIo KTsKKysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sImtleXZlciIpKQorKwlrZXl2ZXIoKTsK KysgICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ2dlbiIpKQorKwlzaWdnZW4oKTsKKysg ICAgZWxzZSBpZighc3RyY21wKGFyZ3ZbMV0sInNpZ3ZlciIpKQorKwlzaWd2ZXIoKTsKKysgICAg ZWxzZQorKwl7CisrCWZwcmludGYoc3RkZXJyLCJEb24ndCBrbm93IGhvdyB0byAlcy5cbiIsYXJn dlsxXSk7CisrCWV4aXQoMSk7CisrCX0KKysKKysgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JuZ3Zz LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19ybmd2cy5jCistLS0g b3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcm5ndnMuYy5maXBzCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9jYXZzL2ZpcHNfcm5ndnMuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAor QEAgLTAsMCArMSwyMzAgQEAKKysvKgorKyAqIENydWRlIHRlc3QgZHJpdmVyIGZvciBwcm9jZXNz aW5nIHRoZSBWU1QgYW5kIE1DVCB0ZXN0dmVjdG9yIGZpbGVzCisrICogZ2VuZXJhdGVkIGJ5IHRo ZSBDTVZQIFJOR1ZTIHByb2R1Y3QuCisrICoKKysgKiBOb3RlIHRoZSBpbnB1dCBmaWxlcyBhcmUg YXNzdW1lZCB0byBoYXZlIGEgX3ZlcnlfIHNwZWNpZmljIGZvcm1hdAorKyAqIGFzIGRlc2NyaWJl ZCBpbiB0aGUgTklTVCBkb2N1bWVudCAiVGhlIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yCisrICog VmFsaWRhdGlvbiBTeXN0ZW0gKFJOR1ZTKSIsIE1heSAyNSwgMjAwNC4KKysgKgorKyAqLworKyNp bmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMK KysjaW5jbHVkZSA8c3RkaW8uaD4KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp CisreworKyAgICBwcmludGYoIk5vIEZJUFMgUk5HIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4g MDsKKyt9CisrI2Vsc2UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisrI2luY2x1ZGUg PHN0cmluZy5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKworKyNpbmNsdWRlICJmaXBzX3V0bC5o IgorKworK3ZvaWQgdnN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyICprZXkgPSBOVUxM OworKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsKKysgICAgdW5zaWduZWQgY2hhciAqZHQg PSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyIHJldFsxNl07CisrICAgIGNoYXIgYnVmWzEwMjRd OworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNoYXIgKmtleXdvcmQsICp2YWx1ZTsKKysg ICAgbG9uZyBpLCBrZXlsZW47CisrCisrICAgIGtleWxlbiA9IDA7CisrCisrICAgIHdoaWxlKGZn ZXRzKGJ1ZixzaXplb2YgYnVmLHN0ZGluKSAhPSBOVUxMKQorKwl7CisrCWZwdXRzKGJ1ZixzdGRv dXQpOworKwlpZighc3RybmNtcChidWYsIltBRVMgMTI4LUtleV0iLCAxMykpCisrCQlrZXlsZW4g PSAxNjsKKysJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMTkyLUtleV0iLCAxMykpCisrCQlr ZXlsZW4gPSAyNDsKKysJZWxzZSBpZighc3RybmNtcChidWYsIltBRVMgMjU2LUtleV0iLCAxMykp CisrCQlrZXlsZW4gPSAzMjsKKysJaWYgKCFwYXJzZV9saW5lKCZrZXl3b3JkLCAmdmFsdWUsIGxi dWYsIGJ1ZikpCisrCQljb250aW51ZTsKKysJaWYoIXN0cmNtcChrZXl3b3JkLCJLZXkiKSkKKysJ ICAgIHsKKysJICAgIGtleT1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkgIT0ga2V5 bGVuKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGtleSBsZW5ndGgsIGV4cGVj dGluZyAlbGRcbiIsIGtleWxlbik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2Ug aWYoIXN0cmNtcChrZXl3b3JkLCJEVCIpKQorKwkgICAgeworKwkgICAgZHQ9aGV4MmJpbl9tKHZh bHVlLCZpKTsKKysJICAgIGlmIChpICE9IDE2KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJJ bnZhbGlkIERUIGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCSAgICB9CisrCWVsc2Ug aWYoIXN0cmNtcChrZXl3b3JkLCJWIikpCisrCSAgICB7CisrCSAgICB2PWhleDJiaW5fbSh2YWx1 ZSwmaSk7CisrCSAgICBpZiAoaSAhPSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52 YWxpZCBWIGxlbmd0aFxuIik7CisrCQlyZXR1cm47CisrCQl9CisrCisrCSAgICBpZiAoIWtleSB8 fCAhZHQpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIk1pc3Npbmcga2V5IG9yIERUXG4iKTsK KysJCXJldHVybjsKKysJCX0KKysKKysJICAgIEZJUFNfcmFuZF9zZXRfa2V5KGtleSwga2V5bGVu KTsKKysJICAgIEZJUFNfcmFuZF9zZWVkKHYsMTYpOworKwkgICAgRklQU19yYW5kX3NldF9kdChk dCk7CisrCSAgICBpZiAoRklQU19yYW5kX2J5dGVzKHJldCwxNikgPD0gMCkKKysJCXsKKysJCWZw cmludGYoc3RkZXJyLCAiRXJyb3IgZ2V0dGluZyBQUk5HIHZhbHVlXG4iKTsKKysJICAgICAgICBy ZXR1cm47CisrCSAgICAgICAgfQorKworKwkgICAgcHYoIlIiLHJldCwxNik7CisrCSAgICBPUEVO U1NMX2ZyZWUoa2V5KTsKKysJICAgIGtleSA9IE5VTEw7CisrCSAgICBPUEVOU1NMX2ZyZWUoZHQp OworKwkgICAgZHQgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVlKHYpOworKwkgICAgdiA9IE5V TEw7CisrCSAgICB9CisrCX0KKysgICAgfQorKworK3ZvaWQgbWN0KCkKKysgICAgeworKyAgICB1 bnNpZ25lZCBjaGFyICprZXkgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyICp2ID0gTlVMTDsK KysgICAgdW5zaWduZWQgY2hhciAqZHQgPSBOVUxMOworKyAgICB1bnNpZ25lZCBjaGFyIHJldFsx Nl07CisrICAgIGNoYXIgYnVmWzEwMjRdOworKyAgICBjaGFyIGxidWZbMTAyNF07CisrICAgIGNo YXIgKmtleXdvcmQsICp2YWx1ZTsKKysgICAgbG9uZyBpLCBrZXlsZW47CisrICAgIGludCBqOwor KworKyAgICBrZXlsZW4gPSAwOworKworKyAgICB3aGlsZShmZ2V0cyhidWYsc2l6ZW9mIGJ1Zixz dGRpbikgIT0gTlVMTCkKKysJeworKwlmcHV0cyhidWYsc3Rkb3V0KTsKKysJaWYoIXN0cm5jbXAo YnVmLCJbQUVTIDEyOC1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMTY7CisrCWVsc2UgaWYoIXN0 cm5jbXAoYnVmLCJbQUVTIDE5Mi1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMjQ7CisrCWVsc2Ug aWYoIXN0cm5jbXAoYnVmLCJbQUVTIDI1Ni1LZXldIiwgMTMpKQorKwkJa2V5bGVuID0gMzI7Cisr CWlmICghcGFyc2VfbGluZSgma2V5d29yZCwgJnZhbHVlLCBsYnVmLCBidWYpKQorKwkJY29udGlu dWU7CisrCWlmKCFzdHJjbXAoa2V5d29yZCwiS2V5IikpCisrCSAgICB7CisrCSAgICBrZXk9aGV4 MmJpbl9tKHZhbHVlLCZpKTsKKysJICAgIGlmIChpICE9IGtleWxlbikKKysJCXsKKysJCWZwcmlu dGYoc3RkZXJyLCAiSW52YWxpZCBrZXkgbGVuZ3RoLCBleHBlY3RpbmcgJWxkXG4iLCBrZXlsZW4p OworKwkJcmV0dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwi RFQiKSkKKysJICAgIHsKKysJICAgIGR0PWhleDJiaW5fbSh2YWx1ZSwmaSk7CisrCSAgICBpZiAo aSAhPSAxNikKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBEVCBsZW5ndGhcbiIp OworKwkJcmV0dXJuOworKwkJfQorKwkgICAgfQorKwllbHNlIGlmKCFzdHJjbXAoa2V5d29yZCwi ViIpKQorKwkgICAgeworKwkgICAgdj1oZXgyYmluX20odmFsdWUsJmkpOworKwkgICAgaWYgKGkg IT0gMTYpCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgViBsZW5ndGhcbiIpOwor KwkJcmV0dXJuOworKwkJfQorKworKwkgICAgaWYgKCFrZXkgfHwgIWR0KQorKwkJeworKwkJZnBy aW50ZihzdGRlcnIsICJNaXNzaW5nIGtleSBvciBEVFxuIik7CisrCQlyZXR1cm47CisrCQl9Cisr CisrCSAgICBGSVBTX3JhbmRfc2V0X2tleShrZXksIGtleWxlbik7CisrCSAgICBGSVBTX3JhbmRf c2VlZCh2LDE2KTsKKysJICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQorKwkJeworKwkJ ICAgIEZJUFNfcmFuZF9zZXRfZHQoZHQpOworKwkJICAgIGlmIChGSVBTX3JhbmRfYnl0ZXMocmV0 LDE2KSA8PSAwKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGdldHRpbmcgUFJO RyB2YWx1ZVxuIik7CisrCQkgICAgICAgIHJldHVybjsKKysJCSAgICAgICAgfQorKwkJICAgIC8q IEluY3JlbWVudCBEVCAqLworKwkJICAgIGZvciAoaiA9IDE1OyBqID49IDA7IGotLSkKKysJCQl7 CisrCQkJZHRbal0rKzsKKysJCQlpZiAoZHRbal0pCisrCQkJCWJyZWFrOworKwkJCX0KKysJCX0K KysKKysJICAgIHB2KCJSIixyZXQsMTYpOworKwkgICAgT1BFTlNTTF9mcmVlKGtleSk7CisrCSAg ICBrZXkgPSBOVUxMOworKwkgICAgT1BFTlNTTF9mcmVlKGR0KTsKKysJICAgIGR0ID0gTlVMTDsK KysJICAgIE9QRU5TU0xfZnJlZSh2KTsKKysJICAgIHYgPSBOVUxMOworKwkgICAgfQorKwl9Cisr ICAgIH0KKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysgICAgeworKyAgICBp ZihhcmdjICE9IDIpCisrCXsKKysJZnByaW50ZihzdGRlcnIsIiVzIFttY3R8dnN0XVxuIixhcmd2 WzBdKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBpZighRklQU19tb2RlX3NldCgxKSkKKysJewor Kwlkb19wcmludF9lcnJvcnMoKTsKKysJZXhpdCgxKTsKKysJfQorKyAgICBGSVBTX3JhbmRfcmVz ZXQoKTsKKysgICAgaWYgKCFGSVBTX3JhbmRfdGVzdF9tb2RlKCkpCisrCXsKKysJZnByaW50Zihz dGRlcnIsICJFcnJvciBzZXR0aW5nIFBSTkcgdGVzdCBtb2RlXG4iKTsKKysJZG9fcHJpbnRfZXJy b3JzKCk7CisrCWV4aXQoMSk7CisrCX0KKysgICAgaWYoIXN0cmNtcChhcmd2WzFdLCJtY3QiKSkK KysJbWN0KCk7CisrICAgIGVsc2UgaWYoIXN0cmNtcChhcmd2WzFdLCJ2c3QiKSkKKysJdnN0KCk7 CisrICAgIGVsc2UKKysJeworKwlmcHJpbnRmKHN0ZGVyciwiRG9uJ3Qga25vdyBob3cgdG8gJXMu XG4iLGFyZ3ZbMV0pOworKwlleGl0KDEpOworKwl9CisrCisrICAgIHJldHVybiAwOworKyAgICB9 CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19y c2FndGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhZ3Rl c3QuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMu ZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYWd0ZXN0LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4w MDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMzkwIEBACisrLyogZmlwc19yc2FndGVzdC5jICov CisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykg Zm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdCAyMDA1LgorKyAqLworKy8qID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICogQ29weXJpZ2h0IChjKSAyMDA1LDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAq CisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2lu Z0BPcGVuU1NMLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisr ICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisr ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRv Z3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29m dC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisr ICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8 c3RkaW8uaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lu Y2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9w ZW5zc2wveDUwOXYzLmg+CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysKKytpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIFJTQSBzdXBw b3J0XG4iKTsKKysgICAgcmV0dXJuKDApOworK30KKysKKysjZWxzZQorKworKyNpbmNsdWRlICJm aXBzX3V0bC5oIgorKworK2ludCByc2FfdGVzdChGSUxFICpvdXQsIEZJTEUgKmluKTsKKytzdGF0 aWMgaW50IHJzYV9wcmludGtleTEoRklMRSAqb3V0LCBSU0EgKnJzYSwKKysJCUJJR05VTSAqWHAx LCBCSUdOVU0gKlhwMiwgQklHTlVNICpYcCwKKysJCUJJR05VTSAqZSk7Cisrc3RhdGljIGludCBy c2FfcHJpbnRrZXkyKEZJTEUgKm91dCwgUlNBICpyc2EsCisrCQlCSUdOVU0gKlhxMSwgQklHTlVN ICpYcTIsIEJJR05VTSAqWHEpOworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikK KysJeworKwlGSUxFICppbiA9IE5VTEwsICpvdXQgPSBOVUxMOworKworKwlpbnQgcmV0ID0gMTsK KysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkpCisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsK KysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoYXJnYyA9PSAxKQorKwkJaW4gPSBzdGRpbjsK KysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAiciIpOworKworKwlpZiAoYXJnYyA8IDIp CisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7 CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIGlucHV0IGlu aXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIW91 dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgb3V0cHV0IGluaXRpYWxpemF0aW9u IGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlpZiAoIXJzYV90ZXN0KG91dCwg aW4pKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBSU0FHVEVTVCBmaWxlIHByb2Nl c3NpbmcgZXJyb3JcbiIpOworKwkJZ290byBlbmQ7CisrCQl9CisrCWVsc2UKKysJCXJldCA9IDA7 CisrCisrCWVuZDoKKysKKysJaWYgKHJldCkKKysJCWRvX3ByaW50X2Vycm9ycygpOworKworKwlp ZiAoaW4gJiYgKGluICE9IHN0ZGluKSkKKysJCWZjbG9zZShpbik7CisrCWlmIChvdXQgJiYgKG91 dCAhPSBzdGRvdXQpKQorKwkJZmNsb3NlKG91dCk7CisrCisrCXJldHVybiByZXQ7CisrCisrCX0K KysKKysjZGVmaW5lIFJTQV9URVNUX01BWExJTkVMRU4JMTAyNDAKKysKKytpbnQgcnNhX3Rlc3Qo RklMRSAqb3V0LCBGSUxFICppbikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpw LCAqcTsKKysJY2hhciAqa2V5d29yZCwgKnZhbHVlOworKwlSU0EgKnJzYSA9IE5VTEw7CisrCUJJ R05VTSAqWHAxID0gTlVMTCwgKlhwMiA9IE5VTEwsICpYcCA9IE5VTEw7CisrCUJJR05VTSAqWHEx ID0gTlVMTCwgKlhxMiA9IE5VTEwsICpYcSA9IE5VTEw7CisrCUJJR05VTSAqZSA9IE5VTEw7Cisr CWludCByZXQgPSAwOworKwlpbnQgbG51bSA9IDA7CisrCisrCW9saW5lYnVmID0gT1BFTlNTTF9t YWxsb2MoUlNBX1RFU1RfTUFYTElORUxFTik7CisrCWxpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhS U0FfVEVTVF9NQVhMSU5FTEVOKTsKKysKKysJaWYgKCFsaW5lYnVmIHx8ICFvbGluZWJ1ZikKKysJ CWdvdG8gZXJyb3I7CisrCisrCXdoaWxlIChmZ2V0cyhvbGluZWJ1ZiwgUlNBX1RFU1RfTUFYTElO RUxFTiwgaW4pKQorKwkJeworKwkJbG51bSsrOworKwkJc3RyY3B5KGxpbmVidWYsIG9saW5lYnVm KTsKKysJCWtleXdvcmQgPSBsaW5lYnVmOworKwkJLyogU2tpcCBsZWFkaW5nIHNwYWNlICovCisr CQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqa2V5d29yZCkpCisrCQkJa2V5d29yZCsr OworKworKwkJLyogTG9vayBmb3IgPSBzaWduICovCisrCQlwID0gc3RyY2hyKGxpbmVidWYsICc9 Jyk7CisrCisrCQkvKiBJZiBubyA9IG9yIHN0YXJ0cyB3aXRoIFsgKGZvciBbZm9vID0gYmFyXSBs aW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCB8fCAqa2V5d29yZD09J1snKQorKwkJCXsKKysJ CQlpZiAoZnB1dHMob2xpbmVidWYsIG91dCkgPCAwKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWNv bnRpbnVlOworKwkJCX0KKysKKysJCXEgPSBwIC0gMTsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGlu ZyBzcGFjZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQorKwkJCSpx LS0gPSAwOworKworKwkJKnAgPSAwOworKwkJdmFsdWUgPSBwICsgMTsKKysKKysJCS8qIFJlbW92 ZSBsZWFkaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25l ZCBjaGFyKSp2YWx1ZSkpCisrCQkJdmFsdWUrKzsKKysKKysJCS8qIFJlbW92ZSB0cmFpbGluZyBz cGFjZSBmcm9tIHZhbHVlICovCisrCQlwID0gdmFsdWUgKyBzdHJsZW4odmFsdWUpIC0gMTsKKysK KysJCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJ CSpwLS0gPSAwOworKworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgInhwMSIpKQorKwkJCXsKKysJ CQlpZiAoWHAxIHx8ICFkb19oZXgyYm4oJlhwMSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHAyIikpCisrCQkJewor KwkJCWlmIChYcDIgfHwgIWRvX2hleDJibigmWHAyLHZhbHVlKSkKKysJCQkJZ290byBwYXJzZV9l cnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcCIpKQorKwkJCXsK KysJCQlpZiAoWHAgfHwgIWRvX2hleDJibigmWHAsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNlX2Vy cm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInhxMSIpKQorKwkJCXsK KysJCQlpZiAoWHExIHx8ICFkb19oZXgyYm4oJlhxMSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAieHEyIikpCisrCQkJ eworKwkJCWlmIChYcTIgfHwgIWRvX2hleDJibigmWHEyLHZhbHVlKSkKKysJCQkJZ290byBwYXJz ZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJYcSIpKQorKwkJ CXsKKysJCQlpZiAoWHEgfHwgIWRvX2hleDJibigmWHEsdmFsdWUpKQorKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgImUiKSkKKysJCQl7 CisrCQkJaWYgKGUgfHwgIWRvX2hleDJibigmZSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJy b3I7CisrCQkJfQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAicDEiKSkKKysJCQljb250 aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29yZCwgInAyIikpCisrCQkJY29udGludWU7 CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJwIikpCisrCQkJY29udGludWU7CisrCQll bHNlIGlmICghc3RyY21wKGtleXdvcmQsICJxMSIpKQorKwkJCWNvbnRpbnVlOworKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAicTIiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFz dHJjbXAoa2V5d29yZCwgInEiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAo a2V5d29yZCwgIm4iKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgImQiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9yOwor KworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAoZSAmJiBYcDEgJiYgWHAyICYm IFhwKQorKwkJCXsKKysJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKKysJCQlpZiAoIXJzYSkKKysJ CQkJZ290byBlcnJvcjsKKysJCQlpZiAoIXJzYV9wcmludGtleTEob3V0LCByc2EsIFhwMSwgWHAy LCBYcCwgZSkpCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJQk5fZnJlZShYcDEpOworKwkJCVhwMSA9 IE5VTEw7CisrCQkJQk5fZnJlZShYcDIpOworKwkJCVhwMiA9IE5VTEw7CisrCQkJQk5fZnJlZShY cCk7CisrCQkJWHAgPSBOVUxMOworKwkJCUJOX2ZyZWUoZSk7CisrCQkJZSA9IE5VTEw7CisrCQkJ fQorKworKwkJaWYgKHJzYSAmJiBYcTEgJiYgWHEyICYmIFhxKQorKwkJCXsKKysJCQlpZiAoIXJz YV9wcmludGtleTIob3V0LCByc2EsIFhxMSwgWHEyLCBYcSkpCisrCQkJCWdvdG8gZXJyb3I7Cisr CQkJQk5fZnJlZShYcTEpOworKwkJCVhxMSA9IE5VTEw7CisrCQkJQk5fZnJlZShYcTIpOworKwkJ CVhxMiA9IE5VTEw7CisrCQkJQk5fZnJlZShYcSk7CisrCQkJWHEgPSBOVUxMOworKwkJCUZJUFNf cnNhX2ZyZWUocnNhKTsKKysJCQlyc2EgPSBOVUxMOworKwkJCX0KKysJCX0KKysKKysJcmV0ID0g MTsKKysKKysJZXJyb3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGlu ZWJ1Zik7CisrCWlmIChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOworKworKwlp ZiAoWHAxKQorKwkJQk5fZnJlZShYcDEpOworKwlpZiAoWHAyKQorKwkJQk5fZnJlZShYcDIpOwor KwlpZiAoWHApCisrCQlCTl9mcmVlKFhwKTsKKysJaWYgKFhxMSkKKysJCUJOX2ZyZWUoWHExKTsK KysJaWYgKFhxMSkKKysJCUJOX2ZyZWUoWHExKTsKKysJaWYgKFhxMikKKysJCUJOX2ZyZWUoWHEy KTsKKysJaWYgKFhxKQorKwkJQk5fZnJlZShYcSk7CisrCWlmIChlKQorKwkJQk5fZnJlZShlKTsK KysJaWYgKHJzYSkKKysJCUZJUFNfcnNhX2ZyZWUocnNhKTsKKysKKysJcmV0dXJuIHJldDsKKysK KysJcGFyc2VfZXJyb3I6CisrCisrCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgcGFyc2UgZXJyb3Ig cHJvY2Vzc2luZyBsaW5lICVkXG4iLCBsbnVtKTsKKysKKysJZ290byBlcnJvcjsKKysKKysJfQor KworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MShGSUxFICpvdXQsIFJTQSAqcnNhLAorKwkJQklH TlVNICpYcDEsIEJJR05VTSAqWHAyLCBCSUdOVU0gKlhwLAorKwkJQklHTlVNICplKQorKwl7Cisr CWludCByZXQgPSAwOworKwlCSUdOVU0gKnAxID0gTlVMTCwgKnAyID0gTlVMTDsKKysJcDEgPSBC Tl9uZXcoKTsKKysJcDIgPSBCTl9uZXcoKTsKKysJaWYgKCFwMSB8fCAhcDIpCisrCQlnb3RvIGVy cm9yOworKworKwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIHAxLCBwMiwgTlVMTCwgTlVM TCwgWHAxLCBYcDIsIFhwLAorKwkJCQkJCU5VTEwsIE5VTEwsIE5VTEwsIGUsIE5VTEwpKQorKwkJ Z290byBlcnJvcjsKKysKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJwMSIsIHAxKTsKKysJZG9f Ym5fcHJpbnRfbmFtZShvdXQsICJwMiIsIHAyKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJw IiwgcnNhLT5wKTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6CisrCWlmIChwMSkKKysJCUJO X2ZyZWUocDEpOworKwlpZiAocDIpCisrCQlCTl9mcmVlKHAyKTsKKysKKysJcmV0dXJuIHJldDsK KysJfQorKworK3N0YXRpYyBpbnQgcnNhX3ByaW50a2V5MihGSUxFICpvdXQsIFJTQSAqcnNhLAor KwkJQklHTlVNICpYcTEsIEJJR05VTSAqWHEyLCBCSUdOVU0gKlhxKQorKwl7CisrCWludCByZXQg PSAwOworKwlCSUdOVU0gKnExID0gTlVMTCwgKnEyID0gTlVMTDsKKysJcTEgPSBCTl9uZXcoKTsK KysJcTIgPSBCTl9uZXcoKTsKKysJaWYgKCFxMSB8fCAhcTIpCisrCQlnb3RvIGVycm9yOworKwor KwlpZiAoIVJTQV9YOTMxX2Rlcml2ZV9leChyc2EsIE5VTEwsIE5VTEwsIHExLCBxMiwgTlVMTCwg TlVMTCwgTlVMTCwKKysJCQkJCQlYcTEsIFhxMiwgWHEsIE5VTEwsIE5VTEwpKQorKwkJZ290byBl cnJvcjsKKysKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxMSIsIHExKTsKKysJZG9fYm5fcHJp bnRfbmFtZShvdXQsICJxMiIsIHEyKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJxIiwgcnNh LT5xKTsKKysJZG9fYm5fcHJpbnRfbmFtZShvdXQsICJuIiwgcnNhLT5uKTsKKysJZG9fYm5fcHJp bnRfbmFtZShvdXQsICJkIiwgcnNhLT5kKTsKKysKKysJcmV0ID0gMTsKKysKKysJZXJyb3I6Cisr CWlmIChxMSkKKysJCUJOX2ZyZWUocTEpOworKwlpZiAocTIpCisrCQlCTl9mcmVlKHEyKTsKKysK KysJcmV0dXJuIHJldDsKKysJfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9j cnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhc3Rlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRv L2ZpcHMvY2F2cy9maXBzX3JzYXN0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBz L2NhdnMvZmlwc19yc2FzdGVzdC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2FzdGVzdC5j CTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDM3MCBAQAor Ky8qIGZpcHNfcnNhc3Rlc3QuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNv biAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4K KysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICog ICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Ig d3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgor KyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWlu IHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9k dWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Cisr ICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wu b3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NM IFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS CisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVu U1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8s IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBI T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g Q09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ R0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVj dCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZwor KyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg d3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAq LworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRl IDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4u aD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQ UworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisreworKyAgICBwcmludGYo Ik5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNl CisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisrc3RhdGljIGludCByc2Ffc3Rlc3QoRklM RSAqb3V0LCBGSUxFICppbiwgaW50IFNhbHRsZW4pOworK3N0YXRpYyBpbnQgcnNhX3ByaW50c2ln KEZJTEUgKm91dCwgUlNBICpyc2EsIGNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNo YXIgKk1zZywgbG9uZyBNc2dsZW4sIGludCBTYWx0bGVuKTsKKysKKytpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxMLCAqb3V0ID0gTlVMTDsKKysK KysJaW50IHJldCA9IDEsIFNhbHRsZW4gPSAtMTsKKysKKysJaWYoIUZJUFNfbW9kZV9zZXQoMSkp CisrCQl7CisrCQlkb19wcmludF9lcnJvcnMoKTsKKysJCWdvdG8gZW5kOworKwkJfQorKworKwlp ZiAoKGFyZ2MgPiAyKSAmJiAhc3RyY21wKCItc2FsdGxlbiIsIGFyZ3ZbMV0pKQorKwkJeworKwkJ U2FsdGxlbiA9IGF0b2koYXJndlsyXSk7CisrCQlpZiAoU2FsdGxlbiA8IDApCisrCQkJeworKwkJ CWZwcmludGYoc3RkZXJyLCAiRkFUQUw6IEludmFsaWQgc2FsdCBsZW5ndGhcbiIpOworKwkJCWdv dG8gZW5kOworKwkJCX0KKysJCWFyZ2MgLT0gMjsKKysJCWFyZ3YgKz0gMjsKKysJCX0KKysJZWxz ZSBpZiAoKGFyZ2MgPiAxKSAmJiAhc3RyY21wKCIteDkzMSIsIGFyZ3ZbMV0pKQorKwkJeworKwkJ U2FsdGxlbiA9IC0yOworKwkJYXJnYy0tOworKwkJYXJndisrOworKwkJfQorKworKwlpZiAoYXJn YyA9PSAxKQorKwkJaW4gPSBzdGRpbjsKKysJZWxzZQorKwkJaW4gPSBmb3Blbihhcmd2WzFdLCAi ciIpOworKworKwlpZiAoYXJnYyA8IDIpCisrCQlvdXQgPSBzdGRvdXQ7CisrCWVsc2UKKysJCW91 dCA9IGZvcGVuKGFyZ3ZbMl0sICJ3Iik7CisrCisrCWlmICghaW4pCisrCQl7CisrCQlmcHJpbnRm KHN0ZGVyciwgIkZBVEFMIGlucHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8g ZW5kOworKwkJfQorKworKwlpZiAoIW91dCkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFU QUwgb3V0cHV0IGluaXRpYWxpemF0aW9uIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQor KworKwlpZiAoIXJzYV9zdGVzdChvdXQsIGluLCBTYWx0bGVuKSkKKysJCXsKKysJCWZwcmludGYo c3RkZXJyLCAiRkFUQUwgUlNBU1RFU1QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdv dG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChy ZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikp CisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9z ZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBSU0FfVEVTVF9N QVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJzYV9zdGVzdChGSUxFICpvdXQsIEZJTEUgKmluLCBp bnQgU2FsdGxlbikKKysJeworKwljaGFyICpsaW5lYnVmLCAqb2xpbmVidWYsICpwLCAqcTsKKysJ Y2hhciAqa2V5d29yZCwgKnZhbHVlOworKwlSU0EgKnJzYSA9IE5VTEw7CisrCWNvbnN0IEVWUF9N RCAqZGdzdCA9IE5VTEw7CisrCXVuc2lnbmVkIGNoYXIgKk1zZyA9IE5VTEw7CisrCWxvbmcgTXNn bGVuID0gLTE7CisrCWludCBrZXlsZW4gPSAtMSwgY3VycmVudF9rZXlsZW4gPSAtMTsKKysJaW50 IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxv YyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9U RVNUX01BWExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290 byBlcnJvcjsKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhMSU5FTEVO LCBpbikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOwor KwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdo aWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7Cisr CisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsK KysKKysJCS8qIElmIG5vID0ganVzdCBjb3B5ICovCisrCQlpZiAoIXApCisrCQkJeworKwkJCWlm IChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJY29udGlu dWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNw YWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9 IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxl YWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNl IGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKworKwkJ d2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAt LSA9IDA7CisrCisrCQkvKiBMb29rIGZvciBbbW9kID0gWFhYXSBmb3Iga2V5IGxlbmd0aCAqLwor KworKwkJaWYgKCFzdHJjbXAoa2V5d29yZCwgIlttb2QiKSkKKysJCQl7CisrCQkJcCA9IHZhbHVl ICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCQkJaWYgKCpwICE9ICddJykKKysJCQkJZ290byBwYXJz ZV9lcnJvcjsKKysJCQkqcCA9IDA7CisrCQkJa2V5bGVuID0gYXRvaSh2YWx1ZSk7CisrCQkJaWYg KGtleWxlbiA8IDApCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBpZiAo IXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCisrCQkJeworKwkJCWlmICghc3RyY21wKHZhbHVl LCAiU0hBMSIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKKysJCQllbHNlIGlmICghc3RyY21w KHZhbHVlLCAiU0hBMjI0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7CisrCQkJZWxzZSBp ZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTI1NigpOwor KwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKKysJCQkJZGdzdCA9IEVWUF9z aGEzODQoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCisrCQkJCWRn c3QgPSBFVlBfc2hhNTEyKCk7CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYoc3RkZXJy LAorKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAorKwkJCQkJ CQkJdmFsdWUpOworKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCQl9CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWlmIChNc2cpCisrCQkJ CWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJCQkqKC0t dmFsdWUpID0gJzAnOworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7CisrCQkJ aWYgKCFNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKworKwkJZnB1dHMob2xp bmVidWYsIG91dCk7CisrCisrCQkvKiBJZiBrZXkgbGVuZ3RoIGhhcyBjaGFuZ2VkLCBnZW5lcmF0 ZSBhbmQgb3V0cHV0IHB1YmxpYworKwkJICoga2V5IGNvbXBvbmVudHMgb2YgbmV3IFJTQSBwcml2 YXRlIGtleS4KKysJCSAqLworKworKwkJaWYgKGtleWxlbiAhPSBjdXJyZW50X2tleWxlbikKKysJ CQl7CisrCQkJQklHTlVNICpibl9lOworKwkJCWlmIChyc2EpCisrCQkJCUZJUFNfcnNhX2ZyZWUo cnNhKTsKKysJCQlyc2EgPSBGSVBTX3JzYV9uZXcoKTsKKysJCQlpZiAoIXJzYSkKKysJCQkJZ290 byBlcnJvcjsKKysJCQlibl9lID0gQk5fbmV3KCk7CisrCQkJaWYgKCFibl9lIHx8ICFCTl9zZXRf d29yZChibl9lLCAweDEwMDEpKQorKwkJCQlnb3RvIGVycm9yOworKwkJCWlmICghUlNBX1g5MzFf Z2VuZXJhdGVfa2V5X2V4KHJzYSwga2V5bGVuLCBibl9lLCBOVUxMKSkKKysJCQkJZ290byBlcnJv cjsKKysJCQlCTl9mcmVlKGJuX2UpOworKwkJCWZwdXRzKCJuID0gIiwgb3V0KTsKKysJCQlkb19i bl9wcmludChvdXQsIHJzYS0+bik7CisrCQkJZnB1dHMoIlxuZSA9ICIsIG91dCk7CisrCQkJZG9f Ym5fcHJpbnQob3V0LCByc2EtPmUpOworKwkJCWZwdXRzKCJcbiIsIG91dCk7CisrCQkJY3VycmVu dF9rZXlsZW4gPSBrZXlsZW47CisrCQkJfQorKworKwkJaWYgKE1zZyAmJiBkZ3N0KQorKwkJCXsK KysJCQlpZiAoIXJzYV9wcmludHNpZyhvdXQsIHJzYSwgZGdzdCwgTXNnLCBNc2dsZW4sCisrCQkJ CQkJCQlTYWx0bGVuKSkKKysJCQkJZ290byBlcnJvcjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsK KysJCQlNc2cgPSBOVUxMOworKwkJCX0KKysKKysJCX0KKysKKysJcmV0ID0gMTsKKysKKysJZXJy b3I6CisrCisrCWlmIChvbGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlm IChsaW5lYnVmKQorKwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOworKwlpZiAocnNhKQorKwkJRklQ U19yc2FfZnJlZShyc2EpOworKworKwlyZXR1cm4gcmV0OworKworKwlwYXJzZV9lcnJvcjoKKysK KysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBlcnJvciBwcm9jZXNzaW5nIGxpbmUgJWRc biIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKworKwl9CisrCisrc3RhdGljIGludCByc2Ff cHJpbnRzaWcoRklMRSAqb3V0LCBSU0EgKnJzYSwgY29uc3QgRVZQX01EICpkZ3N0LAorKwkJdW5z aWduZWQgY2hhciAqTXNnLCBsb25nIE1zZ2xlbiwgaW50IFNhbHRsZW4pCisrCXsKKysJaW50IHJl dCA9IDA7CisrCXVuc2lnbmVkIGNoYXIgKnNpZ2J1ZiA9IE5VTEw7CisrCWludCBpLCBzaWdsZW47 CisrCS8qIEVWUF9QS0VZIHN0cnVjdHVyZSAqLworKwlFVlBfUEtFWSBwazsKKysJRVZQX01EX0NU WCBjdHg7CisrCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7CisrCXBrLnBrZXkucnNhID0gcnNhOwor KworKwlzaWdsZW4gPSBSU0Ffc2l6ZShyc2EpOworKwlzaWdidWYgPSBPUEVOU1NMX21hbGxvYyhz aWdsZW4pOworKwlpZiAoIXNpZ2J1ZikKKysJCWdvdG8gZXJyb3I7CisrCisrCUVWUF9NRF9DVFhf aW5pdCgmY3R4KTsKKysKKysJaWYgKFNhbHRsZW4gPj0gMCkKKysJCXsKKysJCU1fRVZQX01EX0NU WF9zZXRfZmxhZ3MoJmN0eCwKKysJCQlFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUyB8IChTYWx0bGVu IDw8IDE2KSk7CisrCQl9CisrCWVsc2UgaWYgKFNhbHRsZW4gPT0gLTIpCisrCQlNX0VWUF9NRF9D VFhfc2V0X2ZsYWdzKCZjdHgsIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSk7CisrCWlmICghRVZQ X1NpZ25Jbml0X2V4KCZjdHgsIGRnc3QsIE5VTEwpKQorKwkJZ290byBlcnJvcjsKKysJaWYgKCFF VlBfU2lnblVwZGF0ZSgmY3R4LCBNc2csIE1zZ2xlbikpCisrCQlnb3RvIGVycm9yOworKwlpZiAo IUVWUF9TaWduRmluYWwoJmN0eCwgc2lnYnVmLCAodW5zaWduZWQgaW50ICopJnNpZ2xlbiwgJnBr KSkKKysJCWdvdG8gZXJyb3I7CisrCisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJ ZnB1dHMoIlMgPSAiLCBvdXQpOworKworKwlmb3IgKGkgPSAwOyBpIDwgc2lnbGVuOyBpKyspCisr CQlmcHJpbnRmKG91dCwgIiUwMlgiLCBzaWdidWZbaV0pOworKworKwlmcHV0cygiXG4iLCBvdXQp OworKworKwlyZXQgPSAxOworKworKwllcnJvcjoKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNl bmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfcnNhdnRl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3JzYXZ0ZXN0LmMK Ky0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jLmZpcHMJ MjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9maXBzL2NhdnMvZmlwc19yc2F2dGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAw MDAwICswMjAwCitAQCAtMCwwICsxLDM3NyBAQAorKy8qIGZpcHNfcnNhdnRlc3QuYyAqLworKy8q IFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0 aGUgT3BlblNTTAorKyAqIHByb2plY3QgMjAwNS4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAwNSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6Cisr ICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlv bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBB bGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRo aXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJP cGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRv CisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0 dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wu b3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK KysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws CisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24g KHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgor KyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv eDUwOXYzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9y c2EuaD4KKysKKysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgUlNBIHN1cHBvcnRcbiIpOwor KyAgICByZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgi CisrCisraW50IHJzYV90ZXN0KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBzYWx0bGVuKTsKKytz dGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCisrCQlCSUdOVU0gKm4sIEJJR05VTSAq ZSwKKysJCWNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNoYXIgKk1zZywgbG9uZyBN c2dsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGludCBTYWx0bGVuKTsKKysK KytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisrCXsKKysJRklMRSAqaW4gPSBOVUxM LCAqb3V0ID0gTlVMTDsKKysKKysJaW50IHJldCA9IDE7CisrCWludCBTYWx0bGVuID0gLTE7Cisr CisrCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJeworKwkJZG9fcHJpbnRfZXJyb3JzKCk7Cisr CQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKChhcmdjID4gMikgJiYgIXN0cmNtcCgiLXNhbHRs ZW4iLCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSBhdG9pKGFyZ3ZbMl0pOworKwkJaWYg KFNhbHRsZW4gPCAwKQorKwkJCXsKKysJCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBJbnZhbGlk IHNhbHQgbGVuZ3RoXG4iKTsKKysJCQlnb3RvIGVuZDsKKysJCQl9CisrCQlhcmdjIC09IDI7Cisr CQlhcmd2ICs9IDI7CisrCQl9CisrCWVsc2UgaWYgKChhcmdjID4gMSkgJiYgIXN0cmNtcCgiLXg5 MzEiLCBhcmd2WzFdKSkKKysJCXsKKysJCVNhbHRsZW4gPSAtMjsKKysJCWFyZ2MtLTsKKysJCWFy Z3YrKzsKKysJCX0KKysKKysJaWYgKGFyZ2MgPT0gMSkKKysJCWluID0gc3RkaW47CisrCWVsc2UK KysJCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKysKKysJaWYgKGFyZ2MgPCAyKQorKwkJb3V0 ID0gc3Rkb3V0OworKwllbHNlCisrCQlvdXQgPSBmb3Blbihhcmd2WzJdLCAidyIpOworKworKwlp ZiAoIWluKQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJGQVRBTCBpbnB1dCBpbml0aWFsaXph dGlvbiBlcnJvclxuIik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFvdXQpCisrCQl7 CisrCQlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIG91dHB1dCBpbml0aWFsaXphdGlvbiBlcnJvclxu Iik7CisrCQlnb3RvIGVuZDsKKysJCX0KKysKKysJaWYgKCFyc2FfdGVzdChvdXQsIGluLCBTYWx0 bGVuKSkKKysJCXsKKysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgUlNBVlRFU1QgZmlsZSBwcm9j ZXNzaW5nIGVycm9yXG4iKTsKKysJCWdvdG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAw OworKworKwllbmQ6CisrCisrCWlmIChyZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJ aWYgKGluICYmIChpbiAhPSBzdGRpbikpCisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChv dXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9zZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9 CisrCisrI2RlZmluZSBSU0FfVEVTVF9NQVhMSU5FTEVOCTEwMjQwCisrCisraW50IHJzYV90ZXN0 KEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBTYWx0bGVuKQorKwl7CisrCWNoYXIgKmxpbmVidWYs ICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCWNvbnN0IEVW UF9NRCAqZGdzdCA9IE5VTEw7CisrCUJJR05VTSAqbiA9IE5VTEwsICplID0gTlVMTDsKKysJdW5z aWduZWQgY2hhciAqTXNnID0gTlVMTCwgKlMgPSBOVUxMOworKwlsb25nIE1zZ2xlbiwgU2xlbjsK KysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsKKysKKysJb2xpbmVidWYgPSBPUEVOU1NM X21hbGxvYyhSU0FfVEVTVF9NQVhMSU5FTEVOKTsKKysJbGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9j KFJTQV9URVNUX01BWExJTkVMRU4pOworKworKwlpZiAoIWxpbmVidWYgfHwgIW9saW5lYnVmKQor KwkJZ290byBlcnJvcjsKKysKKysJd2hpbGUgKGZnZXRzKG9saW5lYnVmLCBSU0FfVEVTVF9NQVhM SU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVi dWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7CisrCQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8K KysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3Jk Kys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJCXAgPSBzdHJjaHIobGluZWJ1Ziwg Jz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3RhcnRzIHdpdGggWyAoZm9yIFtmb28gPSBiYXJd IGxpbmUpIGp1c3QgY29weSAqLworKwkJaWYgKCFwIHx8ICprZXl3b3JkPT0nWycpCisrCQkJewor KwkJCWlmIChmcHV0cyhvbGluZWJ1Ziwgb3V0KSA8IDApCisrCQkJCWdvdG8gZXJyb3I7CisrCQkJ Y29udGludWU7CisrCQkJfQorKworKwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWls aW5nIHNwYWNlICovCisrCQl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJ KnEtLSA9IDA7CisrCisrCQkqcCA9IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVt b3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2ln bmVkIGNoYXIpKnZhbHVlKSkKKysJCQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5n IHNwYWNlIGZyb20gdmFsdWUgKi8KKysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOwor KworKwkJd2hpbGUgKCpwID09ICdcbicgfHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisr CQkJKnAtLSA9IDA7CisrCisrCQlpZiAoIXN0cmNtcChrZXl3b3JkLCAibiIpKQorKwkJCXsKKysJ CQlpZiAoIWRvX2hleDJibigmbix2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJ fQorKwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiZSIpKQorKwkJCXsKKysJCQlpZiAoIWRv X2hleDJibigmZSx2YWx1ZSkpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxz ZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiU0hBQWxnIikpCisrCQkJeworKwkJCWlmICghc3RyY21w KHZhbHVlLCAiU0hBMSIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTEoKTsKKysJCQllbHNlIGlmICgh c3RyY21wKHZhbHVlLCAiU0hBMjI0IikpCisrCQkJCWRnc3QgPSBFVlBfc2hhMjI0KCk7CisrCQkJ ZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIlNIQTI1NiIpKQorKwkJCQlkZ3N0ID0gRVZQX3NoYTI1 NigpOworKwkJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJTSEEzODQiKSkKKysJCQkJZGdzdCA9 IEVWUF9zaGEzODQoKTsKKysJCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiU0hBNTEyIikpCisr CQkJCWRnc3QgPSBFVlBfc2hhNTEyKCk7CisrCQkJZWxzZQorKwkJCQl7CisrCQkJCWZwcmludGYo c3RkZXJyLAorKwkJCQkJIkZBVEFMOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gXCIlc1wiXG4iLAor KwkJCQkJCQkJdmFsdWUpOworKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCQl9CisrCQkJfQor KwkJZWxzZSBpZiAoIXN0cmNtcChrZXl3b3JkLCAiTXNnIikpCisrCQkJeworKwkJCWlmIChNc2cp CisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAxKQorKwkJ CQkqKC0tdmFsdWUpID0gJzAnOworKwkJCU1zZyA9IGhleDJiaW5fbSh2YWx1ZSwgJk1zZ2xlbik7 CisrCQkJaWYgKCFNc2cpCisrCQkJCWdvdG8gcGFyc2VfZXJyb3I7CisrCQkJfQorKwkJZWxzZSBp ZiAoIXN0cmNtcChrZXl3b3JkLCAiUyIpKQorKwkJCXsKKysJCQlpZiAoUykKKysJCQkJZ290byBw YXJzZV9lcnJvcjsKKysJCQlpZiAoc3RybGVuKHZhbHVlKSAmIDEpCisrCQkJCSooLS12YWx1ZSkg PSAnMCc7CisrCQkJUyA9IGhleDJiaW5fbSh2YWx1ZSwgJlNsZW4pOworKwkJCWlmICghUykKKysJ CQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQs ICJSZXN1bHQiKSkKKysJCQljb250aW51ZTsKKysJCWVsc2UKKysJCQlnb3RvIHBhcnNlX2Vycm9y OworKworKwkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCisrCQlpZiAobiAmJiBlICYmIE1zZyAm JiBTICYmIGRnc3QpCisrCQkJeworKwkJCWlmICghcnNhX3ByaW50dmVyKG91dCwgbiwgZSwgZGdz dCwKKysJCQkJCU1zZywgTXNnbGVuLCBTLCBTbGVuLCBTYWx0bGVuKSkKKysJCQkJZ290byBlcnJv cjsKKysJCQlPUEVOU1NMX2ZyZWUoTXNnKTsKKysJCQlNc2cgPSBOVUxMOworKwkJCU9QRU5TU0xf ZnJlZShTKTsKKysJCQlTID0gTlVMTDsKKysJCQl9CisrCisrCQl9CisrCisrCisrCXJldCA9IDE7 CisrCisrCisrCWVycm9yOgorKworKwlpZiAob2xpbmVidWYpCisrCQlPUEVOU1NMX2ZyZWUob2xp bmVidWYpOworKwlpZiAobGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShsaW5lYnVmKTsKKysJaWYg KG4pCisrCQlCTl9mcmVlKG4pOworKwlpZiAoZSkKKysJCUJOX2ZyZWUoZSk7CisrCisrCXJldHVy biByZXQ7CisrCisrCXBhcnNlX2Vycm9yOgorKworKwlmcHJpbnRmKHN0ZGVyciwgIkZBVEFMIHBh cnNlIGVycm9yIHByb2Nlc3NpbmcgbGluZSAlZFxuIiwgbG51bSk7CisrCisrCWdvdG8gZXJyb3I7 CisrCisrCX0KKysKKytzdGF0aWMgaW50IHJzYV9wcmludHZlcihGSUxFICpvdXQsCisrCQlCSUdO VU0gKm4sIEJJR05VTSAqZSwKKysJCWNvbnN0IEVWUF9NRCAqZGdzdCwKKysJCXVuc2lnbmVkIGNo YXIgKk1zZywgbG9uZyBNc2dsZW4sCisrCQl1bnNpZ25lZCBjaGFyICpTLCBsb25nIFNsZW4sIGlu dCBTYWx0bGVuKQorKwl7CisrCWludCByZXQgPSAwLCByOworKwkvKiBTZXR1cCBSU0EgYW5kIEVW UF9QS0VZIHN0cnVjdHVyZXMgKi8KKysJUlNBICpyc2FfcHVia2V5ID0gTlVMTDsKKysJRVZQX1BL RVkgcGs7CisrCUVWUF9NRF9DVFggY3R4OworKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOwor Kwlyc2FfcHVia2V5ID0gRklQU19yc2FfbmV3KCk7CisrCWlmICghcnNhX3B1YmtleSkKKysJCWdv dG8gZXJyb3I7CisrCXJzYV9wdWJrZXktPm4gPSBCTl9kdXAobik7CisrCXJzYV9wdWJrZXktPmUg PSBCTl9kdXAoZSk7CisrCWlmICghcnNhX3B1YmtleS0+biB8fCAhcnNhX3B1YmtleS0+ZSkKKysJ CWdvdG8gZXJyb3I7CisrCXBrLnR5cGUgPSBFVlBfUEtFWV9SU0E7CisrCXBrLnBrZXkucnNhID0g cnNhX3B1YmtleTsKKysKKysJRVZQX01EX0NUWF9pbml0KCZjdHgpOworKworKwlpZiAoU2FsdGxl biA+PSAwKQorKwkJeworKwkJTV9FVlBfTURfQ1RYX3NldF9mbGFncygmY3R4LAorKwkJCUVWUF9N RF9DVFhfRkxBR19QQURfUFNTIHwgKFNhbHRsZW4gPDwgMTYpKTsKKysJCX0KKysJZWxzZSBpZiAo U2FsdGxlbiA9PSAtMikKKysJCU1fRVZQX01EX0NUWF9zZXRfZmxhZ3MoJmN0eCwgRVZQX01EX0NU WF9GTEFHX1BBRF9YOTMxKTsKKysJaWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmY3R4LCBkZ3N0LCBO VUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmY3R4LCBNc2cs IE1zZ2xlbikpCisrCQlnb3RvIGVycm9yOworKworKwlyID0gRVZQX1ZlcmlmeUZpbmFsKCZjdHgs IFMsIFNsZW4sICZwayk7CisrCisrCisrCUVWUF9NRF9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysJ aWYgKHIgPCAwKQorKwkJZ290byBlcnJvcjsKKysJRVJSX2NsZWFyX2Vycm9yKCk7CisrCisrCWlm IChyID09IDApCisrCQlmcHV0cygiUmVzdWx0ID0gRlxuIiwgb3V0KTsKKysJZWxzZQorKwkJZnB1 dHMoIlJlc3VsdCA9IFBcbiIsIG91dCk7CisrCisrCXJldCA9IDE7CisrCisrCWVycm9yOgorKwlp ZiAocnNhX3B1YmtleSkKKysJCUZJUFNfcnNhX2ZyZWUocnNhX3B1YmtleSk7CisrCWlmIChidWYp CisrCQlPUEVOU1NMX2ZyZWUoYnVmKTsKKysKKysJcmV0dXJuIHJldDsKKysJfQorKyNlbmRpZgor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZp cHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jCistLS0gb3Bl bnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfc2hhdGVzdC5jLmZpcHMJMjAxMC0wMy0z MCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBz L2NhdnMvZmlwc19zaGF0ZXN0LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAK K0BAIC0wLDAgKzEsMzg4IEBACisrLyogZmlwc19zaGF0ZXN0LmMgKi8KKysvKiBXcml0dGVuIGJ5 IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wK KysgKiBwcm9qZWN0IDIwMDUuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQg KGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK KysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4g UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K KysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlz aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAg c29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5T U0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6 Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29s a2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVu ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo b3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNz aW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICoKKysgKiBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0 dGVuIGJ5IEVyaWMgWW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRz b2Z0LmNvbSkuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8 Y3R5cGUuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC94NTA5djMuaD4KKysK KysjaWZuZGVmIE9QRU5TU0xfRklQUworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2 W10pCisreworKyAgICBwcmludGYoIk5vIEZJUFMgU0hBWFhYIHN1cHBvcnRcbiIpOworKyAgICBy ZXR1cm4oMCk7CisrfQorKworKyNlbHNlCisrCisrI2luY2x1ZGUgImZpcHNfdXRsLmgiCisrCisr c3RhdGljIGludCBkZ3N0X3Rlc3QoRklMRSAqb3V0LCBGSUxFICppbik7Cisrc3RhdGljIGludCBw cmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIg Kk1zZywgaW50IE1zZ2xlbik7Cisrc3RhdGljIGludCBwcmludF9tb250ZShjb25zdCBFVlBfTUQg Km1kLCBGSUxFICpvdXQsCisrCQl1bnNpZ25lZCBjaGFyICpTZWVkLCBpbnQgU2VlZExlbik7Cisr CisraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorKwl7CisrCUZJTEUgKmluID0gTlVM TCwgKm91dCA9IE5VTEw7CisrCisrCWludCByZXQgPSAxOworKworKwlpZighRklQU19tb2RlX3Nl dCgxKSkKKysJCXsKKysJCWRvX3ByaW50X2Vycm9ycygpOworKwkJZ290byBlbmQ7CisrCQl9Cisr CisrCWlmIChhcmdjID09IDEpCisrCQlpbiA9IHN0ZGluOworKwllbHNlCisrCQlpbiA9IGZvcGVu KGFyZ3ZbMV0sICJyIik7CisrCisrCWlmIChhcmdjIDwgMikKKysJCW91dCA9IHN0ZG91dDsKKysJ ZWxzZQorKwkJb3V0ID0gZm9wZW4oYXJndlsyXSwgInciKTsKKysKKysJaWYgKCFpbikKKysJCXsK KysJCWZwcmludGYoc3RkZXJyLCAiRkFUQUwgaW5wdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIp OworKwkJZ290byBlbmQ7CisrCQl9CisrCisrCWlmICghb3V0KQorKwkJeworKwkJZnByaW50Zihz dGRlcnIsICJGQVRBTCBvdXRwdXQgaW5pdGlhbGl6YXRpb24gZXJyb3JcbiIpOworKwkJZ290byBl bmQ7CisrCQl9CisrCisrCWlmICghZGdzdF90ZXN0KG91dCwgaW4pKQorKwkJeworKwkJZnByaW50 ZihzdGRlcnIsICJGQVRBTCBkaWdlc3QgZmlsZSBwcm9jZXNzaW5nIGVycm9yXG4iKTsKKysJCWdv dG8gZW5kOworKwkJfQorKwllbHNlCisrCQlyZXQgPSAwOworKworKwllbmQ6CisrCisrCWlmIChy ZXQpCisrCQlkb19wcmludF9lcnJvcnMoKTsKKysKKysJaWYgKGluICYmIChpbiAhPSBzdGRpbikp CisrCQlmY2xvc2UoaW4pOworKwlpZiAob3V0ICYmIChvdXQgIT0gc3Rkb3V0KSkKKysJCWZjbG9z ZShvdXQpOworKworKwlyZXR1cm4gcmV0OworKworKwl9CisrCisrI2RlZmluZSBTSEFfVEVTVF9N QVhfQklUUwkxMDI0MDAKKysjZGVmaW5lIFNIQV9URVNUX01BWExJTkVMRU4JKCgoU0hBX1RFU1Rf TUFYX0JJVFMgPj4gMykgKiAyKSArIDEwMCkKKysKKytpbnQgZGdzdF90ZXN0KEZJTEUgKm91dCwg RklMRSAqaW4pCisrCXsKKysJY29uc3QgRVZQX01EICptZCA9IE5VTEw7CisrCWNoYXIgKmxpbmVi dWYsICpvbGluZWJ1ZiwgKnAsICpxOworKwljaGFyICprZXl3b3JkLCAqdmFsdWU7CisrCXVuc2ln bmVkIGNoYXIgKk1zZyA9IE5VTEwsICpTZWVkID0gTlVMTDsKKysJbG9uZyBNc2dMZW4gPSAtMSwg TGVuID0gLTEsIFNlZWRMZW4gPSAtMTsKKysJaW50IHJldCA9IDA7CisrCWludCBsbnVtID0gMDsK KysKKysJb2xpbmVidWYgPSBPUEVOU1NMX21hbGxvYyhTSEFfVEVTVF9NQVhMSU5FTEVOKTsKKysJ bGluZWJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFNIQV9URVNUX01BWExJTkVMRU4pOworKworKwlpZiAo IWxpbmVidWYgfHwgIW9saW5lYnVmKQorKwkJZ290byBlcnJvcjsKKysKKysKKysJd2hpbGUgKGZn ZXRzKG9saW5lYnVmLCBTSEFfVEVTVF9NQVhMSU5FTEVOLCBpbikpCisrCQl7CisrCQlsbnVtKys7 CisrCQlzdHJjcHkobGluZWJ1Ziwgb2xpbmVidWYpOworKwkJa2V5d29yZCA9IGxpbmVidWY7Cisr CQkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBj aGFyKSprZXl3b3JkKSkKKysJCQlrZXl3b3JkKys7CisrCisrCQkvKiBMb29rIGZvciA9IHNpZ24g Ki8KKysJCXAgPSBzdHJjaHIobGluZWJ1ZiwgJz0nKTsKKysKKysJCS8qIElmIG5vID0gb3Igc3Rh cnRzIHdpdGggWyAoZm9yIFtMPTIwXSBsaW5lKSBqdXN0IGNvcHkgKi8KKysJCWlmICghcCkKKysJ CQl7CisrCQkJZnB1dHMob2xpbmVidWYsIG91dCk7CisrCQkJY29udGludWU7CisrCQkJfQorKwor KwkJcSA9IHAgLSAxOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlICovCisrCQl3aGls ZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcSkpCisrCQkJKnEtLSA9IDA7CisrCisrCQkqcCA9 IDA7CisrCQl2YWx1ZSA9IHAgKyAxOworKworKwkJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJv bSB2YWx1ZSAqLworKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnZhbHVlKSkKKysJ CQl2YWx1ZSsrOworKworKwkJLyogUmVtb3ZlIHRyYWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8K KysJCXAgPSB2YWx1ZSArIHN0cmxlbih2YWx1ZSkgLSAxOworKwkJd2hpbGUgKCpwID09ICdcbicg fHwgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpCisrCQkJKnAtLSA9IDA7CisrCisrCQlpZiAo IXN0cmNtcChrZXl3b3JkLCJbTCIpICYmICpwPT0nXScpCisrCQkJeworKwkJCXN3aXRjaCAoYXRv aSh2YWx1ZSkpCisrCQkJCXsKKysJCQkJY2FzZSAyMDogbWQ9RVZQX3NoYTEoKTsgICBicmVhazsK KysJCQkJY2FzZSAyODogbWQ9RVZQX3NoYTIyNCgpOyBicmVhazsKKysJCQkJY2FzZSAzMjogbWQ9 RVZQX3NoYTI1NigpOyBicmVhazsKKysJCQkJY2FzZSA0ODogbWQ9RVZQX3NoYTM4NCgpOyBicmVh azsKKysJCQkJY2FzZSA2NDogbWQ9RVZQX3NoYTUxMigpOyBicmVhazsKKysJCQkJZGVmYXVsdDog Z290byBwYXJzZV9lcnJvcjsKKysJCQkJfQorKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5 d29yZCwgIkxlbiIpKQorKwkJCXsKKysJCQlpZiAoTGVuICE9IC0xKQorKwkJCQlnb3RvIHBhcnNl X2Vycm9yOworKwkJCUxlbiA9IGF0b2kodmFsdWUpOworKwkJCWlmIChMZW4gPCAwKQorKwkJCQln b3RvIHBhcnNlX2Vycm9yOworKwkJCS8qIE9ubHkgaGFuZGxlIG11bHRpcGxlcyBvZiA4IGJpdHMg Ki8KKysJCQlpZiAoTGVuICYgMHg3KQorKwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCWlmIChM ZW4gPiBTSEFfVEVTVF9NQVhfQklUUykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQlNc2dM ZW4gPSBMZW4gPj4gMzsKKysJCQl9CisrCisrCQllbHNlIGlmICghc3RyY21wKGtleXdvcmQsICJN c2ciKSkKKysJCQl7CisrCQkJbG9uZyB0bXBsZW47CisrCQkJaWYgKHN0cmxlbih2YWx1ZSkgJiAx KQorKwkJCQkqKC0tdmFsdWUpID0gJzAnOworKwkJCWlmIChNc2cpCisrCQkJCWdvdG8gcGFyc2Vf ZXJyb3I7CisrCQkJTXNnID0gaGV4MmJpbl9tKHZhbHVlLCAmdG1wbGVuKTsKKysJCQlpZiAoIU1z ZykKKysJCQkJZ290byBwYXJzZV9lcnJvcjsKKysJCQl9CisrCQllbHNlIGlmICghc3RyY21wKGtl eXdvcmQsICJTZWVkIikpCisrCQkJeworKwkJCWlmIChzdHJsZW4odmFsdWUpICYgMSkKKysJCQkJ KigtLXZhbHVlKSA9ICcwJzsKKysJCQlpZiAoU2VlZCkKKysJCQkJZ290byBwYXJzZV9lcnJvcjsK KysJCQlTZWVkID0gaGV4MmJpbl9tKHZhbHVlLCAmU2VlZExlbik7CisrCQkJaWYgKCFTZWVkKQor KwkJCQlnb3RvIHBhcnNlX2Vycm9yOworKwkJCX0KKysJCWVsc2UgaWYgKCFzdHJjbXAoa2V5d29y ZCwgIk1EIikpCisrCQkJY29udGludWU7CisrCQllbHNlCisrCQkJZ290byBwYXJzZV9lcnJvcjsK KysKKysJCWZwdXRzKG9saW5lYnVmLCBvdXQpOworKworKwkJaWYgKG1kICYmIE1zZyAmJiAoTXNn TGVuID49IDApKQorKwkJCXsKKysJCQlpZiAoIXByaW50X2Rnc3QobWQsIG91dCwgTXNnLCBNc2dM ZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5TU0xfZnJlZShNc2cpOworKwkJCU1zZyA9 IE5VTEw7CisrCQkJTXNnTGVuID0gLTE7CisrCQkJTGVuID0gLTE7CisrCQkJfQorKwkJZWxzZSBp ZiAobWQgJiYgU2VlZCAmJiAoU2VlZExlbiA+IDApKQorKwkJCXsKKysJCQlpZiAoIXByaW50X21v bnRlKG1kLCBvdXQsIFNlZWQsIFNlZWRMZW4pKQorKwkJCQlnb3RvIGVycm9yOworKwkJCU9QRU5T U0xfZnJlZShTZWVkKTsKKysJCQlTZWVkID0gTlVMTDsKKysJCQlTZWVkTGVuID0gLTE7CisrCQkJ fQorKwkKKysKKysJCX0KKysKKysKKysJcmV0ID0gMTsKKysKKysKKysJZXJyb3I6CisrCisrCWlm IChvbGluZWJ1ZikKKysJCU9QRU5TU0xfZnJlZShvbGluZWJ1Zik7CisrCWlmIChsaW5lYnVmKQor KwkJT1BFTlNTTF9mcmVlKGxpbmVidWYpOworKwlpZiAoTXNnKQorKwkJT1BFTlNTTF9mcmVlKE1z Zyk7CisrCWlmIChTZWVkKQorKwkJT1BFTlNTTF9mcmVlKFNlZWQpOworKworKwlyZXR1cm4gcmV0 OworKworKwlwYXJzZV9lcnJvcjoKKysKKysJZnByaW50ZihzdGRlcnIsICJGQVRBTCBwYXJzZSBl cnJvciBwcm9jZXNzaW5nIGxpbmUgJWRcbiIsIGxudW0pOworKworKwlnb3RvIGVycm9yOworKwor Kwl9CisrCisrc3RhdGljIGludCBwcmludF9kZ3N0KGNvbnN0IEVWUF9NRCAqZW1kLCBGSUxFICpv dXQsCisrCQl1bnNpZ25lZCBjaGFyICpNc2csIGludCBNc2dsZW4pCisrCXsKKysJaW50IGksIG1k bGVuOworKwl1bnNpZ25lZCBjaGFyIG1kW0VWUF9NQVhfTURfU0laRV07CisrCWlmICghRVZQX0Rp Z2VzdChNc2csIE1zZ2xlbiwgbWQsICh1bnNpZ25lZCBpbnQgKikmbWRsZW4sIGVtZCwgTlVMTCkp CisrCQl7CisrCQlmcHV0cygiRXJyb3IgY2FsY3VsYXRpbmcgSEFTSFxuIiwgc3RkZXJyKTsKKysJ CXJldHVybiAwOworKwkJfQorKwlmcHV0cygiTUQgPSAiLCBvdXQpOworKwlmb3IgKGkgPSAwOyBp IDwgbWRsZW47IGkrKykKKysJCWZwcmludGYob3V0LCAiJTAyeCIsIG1kW2ldKTsKKysJZnB1dHMo IlxuIiwgb3V0KTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytzdGF0aWMgaW50IHByaW50X21vbnRl KGNvbnN0IEVWUF9NRCAqbWQsIEZJTEUgKm91dCwKKysJCXVuc2lnbmVkIGNoYXIgKlNlZWQsIGlu dCBTZWVkTGVuKQorKwl7CisrCXVuc2lnbmVkIGludCBpLCBqLCBrOworKwlpbnQgcmV0ID0gMDsK KysJRVZQX01EX0NUWCBjdHg7CisrCXVuc2lnbmVkIGNoYXIgKm0xLCAqbTIsICptMywgKnA7Cisr CXVuc2lnbmVkIGludCBtbGVuLCBtMWxlbiwgbTJsZW4sIG0zbGVuOworKworKwlFVlBfTURfQ1RY X2luaXQoJmN0eCk7CisrCisrCWlmIChTZWVkTGVuID4gRVZQX01BWF9NRF9TSVpFKQorKwkJbWxl biA9IFNlZWRMZW47CisrCWVsc2UKKysJCW1sZW4gPSBFVlBfTUFYX01EX1NJWkU7CisrCisrCW0x ID0gT1BFTlNTTF9tYWxsb2MobWxlbik7CisrCW0yID0gT1BFTlNTTF9tYWxsb2MobWxlbik7Cisr CW0zID0gT1BFTlNTTF9tYWxsb2MobWxlbik7CisrCisrCWlmICghbTEgfHwgIW0yIHx8ICFtMykK KysJCWdvdG8gbWNfZXJyb3I7CisrCisrCW0xbGVuID0gbTJsZW4gPSBtM2xlbiA9IFNlZWRMZW47 CisrCW1lbWNweShtMSwgU2VlZCwgU2VlZExlbik7CisrCW1lbWNweShtMiwgU2VlZCwgU2VlZExl bik7CisrCW1lbWNweShtMywgU2VlZCwgU2VlZExlbik7CisrCisrCWZwdXRzKCJcbiIsIG91dCk7 CisrCisrCWZvciAoaiA9IDA7IGogPCAxMDA7IGorKykKKysJCXsKKysJCWZvciAoaSA9IDA7IGkg PCAxMDAwOyBpKyspCisrCQkJeworKwkJCUVWUF9EaWdlc3RJbml0X2V4KCZjdHgsIG1kLCBOVUxM KTsKKysJCQlFVlBfRGlnZXN0VXBkYXRlKCZjdHgsIG0xLCBtMWxlbik7CisrCQkJRVZQX0RpZ2Vz dFVwZGF0ZSgmY3R4LCBtMiwgbTJsZW4pOworKwkJCUVWUF9EaWdlc3RVcGRhdGUoJmN0eCwgbTMs IG0zbGVuKTsKKysJCQlwID0gbTE7CisrCQkJbTEgPSBtMjsKKysJCQltMWxlbiA9IG0ybGVuOwor KwkJCW0yID0gbTM7CisrCQkJbTJsZW4gPSBtM2xlbjsKKysJCQltMyA9IHA7CisrCQkJRVZQX0Rp Z2VzdEZpbmFsX2V4KCZjdHgsIG0zLCAmbTNsZW4pOworKwkJCX0KKysJCWZwcmludGYob3V0LCAi Q09VTlQgPSAlZFxuIiwgaik7CisrCQlmcHV0cygiTUQgPSAiLCBvdXQpOworKwkJZm9yIChrID0g MDsgayA8IG0zbGVuOyBrKyspCisrCQkJZnByaW50ZihvdXQsICIlMDJ4IiwgbTNba10pOworKwkJ ZnB1dHMoIlxuXG4iLCBvdXQpOworKwkJbWVtY3B5KG0xLCBtMywgbTNsZW4pOworKwkJbWVtY3B5 KG0yLCBtMywgbTNsZW4pOworKwkJbTFsZW4gPSBtMmxlbiA9IG0zbGVuOworKwkJfQorKworKwly ZXQgPSAxOworKworKwltY19lcnJvcjoKKysJaWYgKG0xKQorKwkJT1BFTlNTTF9mcmVlKG0xKTsK KysJaWYgKG0yKQorKwkJT1BFTlNTTF9mcmVlKG0yKTsKKysJaWYgKG0zKQorKwkJT1BFTlNTTF9m cmVlKG0zKTsKKysKKysJRVZQX01EX0NUWF9jbGVhbnVwKCZjdHgpOworKworKwlyZXR1cm4gcmV0 OworKwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2Nh dnMvZmlwc191dGwuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvY2F2cy9maXBzX3V0 bC5oCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9jYXZzL2ZpcHNfdXRsLmguZmlwcwky MDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL2ZpcHMvY2F2cy9maXBzX3V0bC5oCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICsw MjAwCitAQCAtMCwwICsxLDM0MyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChj KSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisr ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJl ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp Z2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisr ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2lu ZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNv ZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8v d3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtp dCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRv cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lv biwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoK KysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNh bGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIg bmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3Bl blNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdo YXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQg KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP VklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJF U1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMg QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVD SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQK KysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBU T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBB TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAor KyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworK3Zv aWQgZG9fcHJpbnRfZXJyb3JzKHZvaWQpCisrCXsKKysJY29uc3QgY2hhciAqZmlsZSwgKmRhdGE7 CisrCWludCBsaW5lLCBmbGFnczsKKysJdW5zaWduZWQgbG9uZyBsOworKwl3aGlsZSAoKGwgPSBF UlJfZ2V0X2Vycm9yX2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSkKKysJ CXsKKysJCWZwcmludGYoc3RkZXJyLCAiRVJST1I6JWx4OmxpYj0lZCxmdW5jPSVkLHJlYXNvbj0l ZCIKKysJCQkJIjpmaWxlPSVzOmxpbmU9JWQ6JXNcbiIsCisrCQkJbCwgRVJSX0dFVF9MSUIobCks IEVSUl9HRVRfRlVOQyhsKSwgRVJSX0dFVF9SRUFTT04obCksCisrCQkJZmlsZSwgbGluZSwgZmxh Z3MgJiBFUlJfVFhUX1NUUklORyA/IGRhdGEgOiAiIik7CisrCQl9CisrCX0KKysKKytpbnQgaGV4 MmJpbihjb25zdCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQorKyAgICB7CisrICAgIGlu dCBuMSwgbjI7CisrICAgIHVuc2lnbmVkIGNoYXIgY2g7CisrCisrICAgIGZvciAobjE9MCxuMj0w IDsgaW5bbjFdICYmIGluW24xXSAhPSAnXG4nIDsgKQorKwl7IC8qIGZpcnN0IGJ5dGUgKi8KKysJ aWYgKChpbltuMV0gPj0gJzAnKSAmJiAoaW5bbjFdIDw9ICc5JykpCisrCSAgICBjaCA9IGluW24x KytdIC0gJzAnOworKwllbHNlIGlmICgoaW5bbjFdID49ICdBJykgJiYgKGluW24xXSA8PSAnRicp KQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdBJyArIDEwOworKwllbHNlIGlmICgoaW5bbjFdID49 ICdhJykgJiYgKGluW24xXSA8PSAnZicpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICdhJyArIDEw OworKwllbHNlCisrCSAgICByZXR1cm4gLTE7CisrCWlmKCFpbltuMV0pCisrCSAgICB7CisrCSAg ICBvdXRbbjIrK109Y2g7CisrCSAgICBicmVhazsKKysJICAgIH0KKysJb3V0W24yXSA9IGNoIDw8 IDQ7CisrCS8qIHNlY29uZCBieXRlICovCisrCWlmICgoaW5bbjFdID49ICcwJykgJiYgKGluW24x XSA8PSAnOScpKQorKwkgICAgY2ggPSBpbltuMSsrXSAtICcwJzsKKysJZWxzZSBpZiAoKGluW24x XSA+PSAnQScpICYmIChpbltuMV0gPD0gJ0YnKSkKKysJICAgIGNoID0gaW5bbjErK10gLSAnQScg KyAxMDsKKysJZWxzZSBpZiAoKGluW24xXSA+PSAnYScpICYmIChpbltuMV0gPD0gJ2YnKSkKKysJ ICAgIGNoID0gaW5bbjErK10gLSAnYScgKyAxMDsKKysJZWxzZQorKwkgICAgcmV0dXJuIC0xOwor KwlvdXRbbjIrK10gfD0gY2g7CisrCX0KKysgICAgcmV0dXJuIG4yOworKyAgICB9CisrCisrdW5z aWduZWQgY2hhciAqaGV4MmJpbl9tKGNvbnN0IGNoYXIgKmluLCBsb25nICpwbGVuKQorKwl7Cisr CXVuc2lnbmVkIGNoYXIgKnA7CisrCXAgPSBPUEVOU1NMX21hbGxvYygoc3RybGVuKGluKSArIDEp LzIpOworKwkqcGxlbiA9IGhleDJiaW4oaW4sIHApOworKwlyZXR1cm4gcDsKKysJfQorKworK2lu dCBkb19oZXgyYm4oQklHTlVNICoqcHIsIGNvbnN0IGNoYXIgKmluKQorKwl7CisrCXVuc2lnbmVk IGNoYXIgKnA7CisrCWxvbmcgcGxlbjsKKysJaW50IHIgPSAwOworKwlwID0gaGV4MmJpbl9tKGlu LCAmcGxlbik7CisrCWlmICghcCkKKysJCXJldHVybiAwOworKwlpZiAoISpwcikKKysJCSpwciA9 IEJOX25ldygpOworKwlpZiAoISpwcikKKysJCXJldHVybiAwOworKwlpZiAoQk5fYmluMmJuKHAs IHBsZW4sICpwcikpCisrCQlyID0gMTsKKysJT1BFTlNTTF9mcmVlKHApOworKwlyZXR1cm4gcjsK KysJfQorKworK2ludCBkb19ibl9wcmludChGSUxFICpvdXQsIEJJR05VTSAqYm4pCisrCXsKKysJ aW50IGxlbiwgaTsKKysJdW5zaWduZWQgY2hhciAqdG1wOworKwlsZW4gPSBCTl9udW1fYnl0ZXMo Ym4pOworKwlpZiAobGVuID09IDApCisrCQl7CisrCQlmcHV0cygiMDAiLCBvdXQpOworKwkJcmV0 dXJuIDE7CisrCQl9CisrCisrCXRtcCA9IE9QRU5TU0xfbWFsbG9jKGxlbik7CisrCWlmICghdG1w KQorKwkJeworKwkJZnByaW50ZihzdGRlcnIsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvclxuIik7 CisrCQlyZXR1cm4gMDsKKysJCX0KKysJQk5fYm4yYmluKGJuLCB0bXApOworKwlmb3IgKGkgPSAw OyBpIDwgbGVuOyBpKyspCisrCQlmcHJpbnRmKG91dCwgIiUwMngiLCB0bXBbaV0pOworKwlPUEVO U1NMX2ZyZWUodG1wKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKytpbnQgZG9fYm5fcHJpbnRfbmFt ZShGSUxFICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUsIEJJR05VTSAqYm4pCisrCXsKKysJaW50IHI7 CisrCWZwcmludGYob3V0LCAiJXMgPSAiLCBuYW1lKTsKKysJciA9IGRvX2JuX3ByaW50KG91dCwg Ym4pOworKwlpZiAoIXIpCisrCQlyZXR1cm4gMDsKKysJZnB1dHMoIlxuIiwgb3V0KTsKKysJcmV0 dXJuIDE7CisrCX0KKysKKytpbnQgcGFyc2VfbGluZShjaGFyICoqcGt3LCBjaGFyICoqcHZhbCwg Y2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCisrCXsKKysJY2hhciAqa2V5d29yZCwgKnZh bHVlLCAqcCwgKnE7CisrCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1Zik7CisrCWtleXdvcmQgPSBs aW5lYnVmOworKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVu c2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJa2V5d29yZCsrOworKworKwkvKiBMb29rIGZvciA9 IHNpZ24gKi8KKysJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKworKwkvKiBJZiBubyAnPScg ZXhpdCAqLworKwlpZiAoIXApCisrCQlyZXR1cm4gMDsKKysKKysJcSA9IHAgLSAxOworKworKwkv KiBSZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpKnEpKQorKwkJKnEtLSA9IDA7CisrCisrCSpwID0gMDsKKysJdmFsdWUgPSBwICsgMTsKKysK KysJLyogUmVtb3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwl3aGlsZSAoaXNzcGFj ZSgodW5zaWduZWQgY2hhcikqdmFsdWUpKQorKwkJdmFsdWUrKzsKKysKKysJLyogUmVtb3ZlIHRy YWlsaW5nIHNwYWNlIGZyb20gdmFsdWUgKi8KKysJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAt IDE7CisrCisrCXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnAp KQorKwkJKnAtLSA9IDA7CisrCisrCSpwa3cgPSBrZXl3b3JkOworKwkqcHZhbCA9IHZhbHVlOwor KwlyZXR1cm4gMTsKKysJfQorKworK0JJR05VTSAqaGV4MmJuKGNvbnN0IGNoYXIgKmluKQorKyAg ICB7CisrICAgIEJJR05VTSAqcD1OVUxMOworKworKyAgICBpZiAoIWRvX2hleDJibigmcCwgaW4p KQorKwlyZXR1cm4gTlVMTDsKKysKKysgICAgcmV0dXJuIHA7CisrICAgIH0KKysKKytpbnQgYmlu MmhleChjb25zdCB1bnNpZ25lZCBjaGFyICppbixpbnQgbGVuLGNoYXIgKm91dCkKKysgICAgewor KyAgICBpbnQgbjEsIG4yOworKyAgICB1bnNpZ25lZCBjaGFyIGNoOworKworKyAgICBmb3IgKG4x PTAsbjI9MCA7IG4xIDwgbGVuIDsgKytuMSkKKysJeworKwljaD1pbltuMV0gPj4gNDsKKysJaWYg KGNoIDw9IDB4MDkpCisrCSAgICBvdXRbbjIrK109Y2grJzAnOworKwllbHNlCisrCSAgICBvdXRb bjIrK109Y2gtMTArJ2EnOworKwljaD1pbltuMV0gJiAweDBmOworKwlpZihjaCA8PSAweDA5KQor KwkgICAgb3V0W24yKytdPWNoKycwJzsKKysJZWxzZQorKwkgICAgb3V0W24yKytdPWNoLTEwKydh JzsKKysJfQorKyAgICBvdXRbbjJdPSdcMCc7CisrICAgIHJldHVybiBuMjsKKysgICAgfQorKwor K3ZvaWQgcHYoY29uc3QgY2hhciAqdGFnLGNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbCxpbnQgbGVu KQorKyAgICB7CisrICAgIGNoYXIgb2J1ZlsyMDQ4XTsKKysKKysgICAgYmluMmhleCh2YWwsbGVu LG9idWYpOworKyAgICBwcmludGYoIiVzID0gJXNcbiIsdGFnLG9idWYpOworKyAgICB9CisrCisr LyogVG8gYXZvaWQgZXh0ZW5zaXZlIGNoYW5nZXMgdG8gdGVzdCBwcm9ncmFtIGF0IHRoaXMgc3Rh Z2UganVzdCBjb252ZXJ0CisrICogdGhlIGlucHV0IGxpbmUgaW50byBhbiBhY2NlcHRhYmxlIGZv cm0uIEtleXdvcmQgbGluZXMgY29udmVydGVkIHRvIGZvcm0KKysgKiAia2V5d29yZCA9IHZhbHVl XG4iIG5vIG1hdHRlciB3aGF0IHdoaXRlIHNwYWNlIHByZXNlbnQsIGFsbCBvdGhlciBsaW5lcwor KyAqIGp1c3QgaGF2ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZSByZW1vdmVkLgorKyAqLwor KworK2ludCB0aWR5X2xpbmUoY2hhciAqbGluZWJ1ZiwgY2hhciAqb2xpbmVidWYpCisrCXsKKysJ Y2hhciAqa2V5d29yZCwgKnZhbHVlLCAqcCwgKnE7CisrCXN0cmNweShsaW5lYnVmLCBvbGluZWJ1 Zik7CisrCWtleXdvcmQgPSBsaW5lYnVmOworKwkvKiBTa2lwIGxlYWRpbmcgc3BhY2UgKi8KKysJ d2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmtleXdvcmQpKQorKwkJa2V5d29yZCsrOwor KwkvKiBMb29rIGZvciA9IHNpZ24gKi8KKysJcCA9IHN0cmNocihsaW5lYnVmLCAnPScpOworKwor KwkvKiBJZiBubyAnPScganVzdCBjaG9wIGxlYWRpbmcsIHRyYWlsaW5nIHdzICovCisrCWlmICgh cCkKKysJCXsKKysJCXAgPSBrZXl3b3JkICsgc3RybGVuKGtleXdvcmQpIC0gMTsKKysJCXdoaWxl ICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJCSpwLS0gPSAw OworKwkJc3RyY3B5KG9saW5lYnVmLCBrZXl3b3JkKTsKKysJCXN0cmNhdChvbGluZWJ1ZiwgIlxu Iik7CisrCQlyZXR1cm4gMTsKKysJCX0KKysKKysJcSA9IHAgLSAxOworKworKwkvKiBSZW1vdmUg dHJhaWxpbmcgc3BhY2UgKi8KKysJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnEpKQor KwkJKnEtLSA9IDA7CisrCisrCSpwID0gMDsKKysJdmFsdWUgPSBwICsgMTsKKysKKysJLyogUmVt b3ZlIGxlYWRpbmcgc3BhY2UgZnJvbSB2YWx1ZSAqLworKwl3aGlsZSAoaXNzcGFjZSgodW5zaWdu ZWQgY2hhcikqdmFsdWUpKQorKwkJdmFsdWUrKzsKKysKKysJLyogUmVtb3ZlIHRyYWlsaW5nIHNw YWNlIGZyb20gdmFsdWUgKi8KKysJcCA9IHZhbHVlICsgc3RybGVuKHZhbHVlKSAtIDE7CisrCisr CXdoaWxlICgqcCA9PSAnXG4nIHx8IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnApKQorKwkJKnAt LSA9IDA7CisrCisrCXN0cmNweShvbGluZWJ1Ziwga2V5d29yZCk7CisrCXN0cmNhdChvbGluZWJ1 ZiwgIiA9ICIpOworKwlzdHJjYXQob2xpbmVidWYsIHZhbHVlKTsKKysJc3RyY2F0KG9saW5lYnVm LCAiXG4iKTsKKysKKysJcmV0dXJuIDE7CisrCX0KKysKKysvKiBOQjogdGhpcyByZXR1cm4gdGhl IG51bWJlciBvZiBfYml0c18gcmVhZCAqLworK2ludCBiaW50MmJpbihjb25zdCBjaGFyICppbiwg aW50IGxlbiwgdW5zaWduZWQgY2hhciAqb3V0KQorKyAgICB7CisrICAgIGludCBuOworKworKyAg ICBtZW1zZXQob3V0LDAsbGVuKTsKKysgICAgZm9yKG49MCA7IG4gPCBsZW4gOyArK24pCisrCWlm KGluW25dID09ICcxJykKKysJICAgIG91dFtuLzhdfD0oMHg4MCA+PiAobiU4KSk7CisrICAgIHJl dHVybiBsZW47CisrICAgIH0KKysKKytpbnQgYmluMmJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAq aW4saW50IGxlbixjaGFyICpvdXQpCisrICAgIHsKKysgICAgaW50IG47CisrCisrICAgIGZvcihu PTAgOyBuIDwgbGVuIDsgKytuKQorKwlvdXRbbl09KGluW24vOF0mKDB4ODAgPj4gKG4lOCkpKSA/ ICcxJyA6ICcwJzsKKysgICAgcmV0dXJuIG47CisrICAgIH0KKysKKysvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKysKKyt2b2lkIFByaW50VmFsdWUo Y2hhciAqdGFnLCB1bnNpZ25lZCBjaGFyICp2YWwsIGludCBsZW4pCisreworKyNpZiBWRVJCT1NF CisrICBjaGFyIG9idWZbMjA0OF07CisrICBpbnQgb2xlbjsKKysgIG9sZW4gPSBiaW4yaGV4KHZh bCwgbGVuLCBvYnVmKTsKKysgIHByaW50ZigiJXMgPSAlLipzXG4iLCB0YWcsIG9sZW4sIG9idWYp OworKyNlbmRpZgorK30KKysKKyt2b2lkIE91dHB1dFZhbHVlKGNoYXIgKnRhZywgdW5zaWduZWQg Y2hhciAqdmFsLCBpbnQgbGVuLCBGSUxFICpyZnAsaW50IGJpdG1vZGUpCisrICAgIHsKKysgICAg Y2hhciBvYnVmWzIwNDhdOworKyAgICBpbnQgb2xlbjsKKysKKysgICAgaWYoYml0bW9kZSkKKysJ b2xlbj1iaW4yYmludCh2YWwsbGVuLG9idWYpOworKyAgICBlbHNlCisrCW9sZW49YmluMmhleCh2 YWwsbGVuLG9idWYpOworKworKyAgICBmcHJpbnRmKHJmcCwgIiVzID0gJS4qc1xuIiwgdGFnLCBv bGVuLCBvYnVmKTsKKysjaWYgVkVSQk9TRQorKyAgICBwcmludGYoIiVzID0gJS4qc1xuIiwgdGFn LCBvbGVuLCBvYnVmKTsKKysjZW5kaWYKKysgICAgfQorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAu MC9jcnlwdG8vZmlwc19lcnIuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHNfZXJyLmMK Ky0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2Vyci5jLmZpcHMJMjAxMC0wMy0zMCAxMDoz Mzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2Vyci5j CTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDcgQEAKKysj aW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysjIGluY2x1ZGUgImZpcHNfZXJyLmgiCisrI2Vsc2UKKytzdGF0aWMgdm9pZCAqZHVtbXk9JmR1 bW15OworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwc19lcnIuaC5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHNfZXJyLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2Ny eXB0by9maXBzX2Vyci5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2Vyci5oCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEzNyBAQAorKy8qIGNyeXB0by9maXBzX2Vyci5o ICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNyBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAg ICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9y Zy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0CisrICogICAgb3BlbnNzbC1jb3JlQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi CisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K KysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9w ZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK KysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMg cHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZ b3VuZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysg KgorKyAqLworKworKy8qIE5PVEU6IHRoaXMgZmlsZSB3YXMgYXV0byBnZW5lcmF0ZWQgYnkgdGhl IG1rZXJyLnBsIHNjcmlwdDogYW55IGNoYW5nZXMKKysgKiBtYWRlIHRvIGl0IHdpbGwgYmUgb3Zl cndyaXR0ZW4gd2hlbiB0aGUgc2NyaXB0IG5leHQgdXBkYXRlcyB0aGlzIGZpbGUsCisrICogb25s eSByZWFzb24gc3RyaW5ncyB3aWxsIGJlIHByZXNlcnZlZC4KKysgKi8KKysKKysjaW5jbHVkZSA8 c3RkaW8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrCisrLyogQkVHSU4gRVJST1IgQ09ERVMgKi8KKysjaWZuZGVmIE9QRU5TU0xfTk9f RVJSCisrCisrI2RlZmluZSBFUlJfRlVOQyhmdW5jKSBFUlJfUEFDSyhFUlJfTElCX0ZJUFMsZnVu YywwKQorKyNkZWZpbmUgRVJSX1JFQVNPTihyZWFzb24pIEVSUl9QQUNLKEVSUl9MSUJfRklQUyww LHJlYXNvbikKKysKKytzdGF0aWMgRVJSX1NUUklOR19EQVRBIEZJUFNfc3RyX2Z1bmN0c1tdPQor Kwl7Cisre0VSUl9GVU5DKEZJUFNfRl9ESF9CVUlMVElOX0dFTlBBUkFNUyksCSJESF9CVUlMVElO X0dFTlBBUkFNUyJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4pLAki RFNBX0JVSUxUSU5fUEFSQU1HRU4ifSwKKyt7RVJSX0ZVTkMoRklQU19GX0RTQV9ET19TSUdOKSwJ IkRTQV9kb19zaWduIn0sCisre0VSUl9GVU5DKEZJUFNfRl9EU0FfRE9fVkVSSUZZKSwJIkRTQV9k b192ZXJpZnkifSwKKyt7RVJSX0ZVTkMoRklQU19GX0VWUF9DSVBIRVJJTklUX0VYKSwJIkVWUF9D aXBoZXJJbml0X2V4In0sCisre0VSUl9GVU5DKEZJUFNfRl9FVlBfRElHRVNUSU5JVF9FWCksCSJF VlBfRGlnZXN0SW5pdF9leCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19DSEVDS19EU0EpLAki RklQU19DSEVDS19EU0EifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfQ0hFQ0tfSU5DT1JFX0ZJ TkdFUlBSSU5UKSwJIkZJUFNfQ0hFQ0tfSU5DT1JFX0ZJTkdFUlBSSU5UIn0sCisre0VSUl9GVU5D KEZJUFNfRl9GSVBTX0NIRUNLX1JTQSksCSJGSVBTX0NIRUNLX1JTQSJ9LAorK3tFUlJfRlVOQyhG SVBTX0ZfRklQU19EU0FfQ0hFQ0spLAkiRklQU19EU0FfQ0hFQ0sifSwKKyt7RVJSX0ZVTkMoRklQ U19GX0ZJUFNfTU9ERV9TRVQpLAkiRklQU19tb2RlX3NldCJ9LAorK3tFUlJfRlVOQyhGSVBTX0Zf RklQU19QS0VZX1NJR05BVFVSRV9URVNUKSwJImZpcHNfcGtleV9zaWduYXR1cmVfdGVzdCJ9LAor K3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVMpLAkiRklQU19zZWxmdGVzdF9hZXMi fSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfREVTKSwJIkZJUFNfc2VsZnRlc3Rf ZGVzIn0sCisre0VSUl9GVU5DKEZJUFNfRl9GSVBTX1NFTEZURVNUX0RTQSksCSJGSVBTX3NlbGZ0 ZXN0X2RzYSJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDKSwJIkZJUFNf c2VsZnRlc3RfaG1hYyJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcpLAki RklQU19zZWxmdGVzdF9ybmcifSwKKyt7RVJSX0ZVTkMoRklQU19GX0ZJUFNfU0VMRlRFU1RfU0hB MSksCSJGSVBTX3NlbGZ0ZXN0X3NoYTEifSwKKyt7RVJSX0ZVTkMoRklQU19GX0hBU0hfRklOQUwp LAkiSEFTSF9GSU5BTCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOKSwJ IlJTQV9CVUlMVElOX0tFWUdFTiJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX0VBWV9QUklWQVRF X0RFQ1JZUFQpLAkiUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQifSwKKyt7RVJSX0ZVTkMoRklQU19G X1JTQV9FQVlfUFJJVkFURV9FTkNSWVBUKSwJIlJTQV9FQVlfUFJJVkFURV9FTkNSWVBUIn0sCisr e0VSUl9GVU5DKEZJUFNfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUKSwJIlJTQV9FQVlfUFVCTElD X0RFQ1JZUFQifSwKKyt7RVJSX0ZVTkMoRklQU19GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQpLAki UlNBX0VBWV9QVUJMSUNfRU5DUllQVCJ9LAorK3tFUlJfRlVOQyhGSVBTX0ZfUlNBX1g5MzFfR0VO RVJBVEVfS0VZX0VYKSwJIlJTQV9YOTMxX2dlbmVyYXRlX2tleV9leCJ9LAorK3tFUlJfRlVOQyhG SVBTX0ZfU1NMRUFZX1JBTkRfQllURVMpLAkiU1NMRUFZX1JBTkRfQllURVMifSwKKyt7MCxOVUxM fQorKwl9OworKworK3N0YXRpYyBFUlJfU1RSSU5HX0RBVEEgRklQU19zdHJfcmVhc29uc1tdPQor Kwl7Cisre0VSUl9SRUFTT04oRklQU19SX0NBTk5PVF9SRUFEX0VYRSkgICAgICAsImNhbm5vdCBy ZWFkIGV4ZSJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNUKSwi Y2Fubm90IHJlYWQgZXhlIGRpZ2VzdCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9DT05UUkFESUNU SU5HX0VWSURFTkNFKSwiY29udHJhZGljdGluZyBldmlkZW5jZSJ9LAorK3tFUlJfUkVBU09OKEZJ UFNfUl9FWEVfRElHRVNUX0RPRVNfTk9UX01BVENIKSwiZXhlIGRpZ2VzdCBkb2VzIG5vdCBtYXRj aCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05PVF9NQVRDSCksImZp bmdlcnByaW50IGRvZXMgbm90IG1hdGNoIn0sCisre0VSUl9SRUFTT04oRklQU19SX0ZJTkdFUlBS SU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQpLCJmaW5nZXJwcmludCBkb2VzIG5v dCBtYXRjaCBub25waWMgcmVsb2NhdGVkIn0sCisre0VSUl9SRUFTT04oRklQU19SX0ZJTkdFUlBS SU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcpLCJmaW5nZXJwcmludCBkb2VzIG5v dCBtYXRjaCBzZWdtZW50IGFsaWFzaW5nIn0sCisre0VSUl9SRUFTT04oRklQU19SX0ZJUFNfTU9E RV9BTFJFQURZX1NFVCksImZpcHMgbW9kZSBhbHJlYWR5IHNldCJ9LAorK3tFUlJfUkVBU09OKEZJ UFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCkgLCJmaXBzIHNlbGZ0ZXN0IGZhaWxlZCJ9LAorK3tF UlJfUkVBU09OKEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpICAgLCJpbnZhbGlkIGtleSBsZW5n dGgifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfS0VZX1RPT19TSE9SVCkgICAgICAgICwia2V5IHRv byBzaG9ydCJ9LAorK3tFUlJfUkVBU09OKEZJUFNfUl9OT05fRklQU19NRVRIT0QpICAgICAgLCJu b24gZmlwcyBtZXRob2QifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlM RUQpICwicGFpcndpc2UgdGVzdCBmYWlsZWQifSwKKyt7RVJSX1JFQVNPTihGSVBTX1JfUlNBX0RF Q1JZUFRfRVJST1IpICAgICwicnNhIGRlY3J5cHQgZXJyb3IifSwKKyt7RVJSX1JFQVNPTihGSVBT X1JfUlNBX0VOQ1JZUFRfRVJST1IpICAgICwicnNhIGVuY3J5cHQgZXJyb3IifSwKKyt7RVJSX1JF QVNPTihGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKSAgICAgICwic2VsZnRlc3QgZmFpbGVkIn0sCisr e0VSUl9SRUFTT04oRklQU19SX1RFU1RfRkFJTFVSRSkgICAgICAgICAsInRlc3QgZmFpbHVyZSJ9 LAorK3tFUlJfUkVBU09OKEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STSkgLCJ1bnN1cHBvcnRl ZCBwbGF0Zm9ybSJ9LAorK3swLE5VTEx9CisrCX07CisrCisrI2VuZGlmCisrCisrdm9pZCBFUlJf bG9hZF9GSVBTX3N0cmluZ3Modm9pZCkKKysJeworKyNpZm5kZWYgT1BFTlNTTF9OT19FUlIKKysK KysJaWYgKEVSUl9mdW5jX2Vycm9yX3N0cmluZyhGSVBTX3N0cl9mdW5jdHNbMF0uZXJyb3IpID09 IE5VTEwpCisrCQl7CisrCQlFUlJfbG9hZF9zdHJpbmdzKDAsRklQU19zdHJfZnVuY3RzKTsKKysJ CUVSUl9sb2FkX3N0cmluZ3MoMCxGSVBTX3N0cl9yZWFzb25zKTsKKysJCX0KKysjZW5kaWYKKysJ fQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5j LmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCistLS0g b3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZpcHMJMjAxMC0w My0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9m aXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0LmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAy MDAKK0BAIC0wLDAgKzEsMTAzIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMp IDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysg KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp dGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29m dHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAg IlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wg UHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0 IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0 CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9u LCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgor KyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2Fs bGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBu YW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVu U1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hh dHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAo aHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W SURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVT U0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJ QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAor KyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF UlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFO WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisr ICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2lu Y2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworK3N0YXRpYyBzdHJ1Y3QK KysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl07CisrICAgIHVuc2lnbmVkIGNoYXIg cGxhaW50ZXh0WzE2XTsKKysgICAgdW5zaWduZWQgY2hhciBjaXBoZXJ0ZXh0WzE2XTsKKysgICAg fSB0ZXN0c1tdPQorKwl7CisrCXsKKysJeyAweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSww eDA2LDB4MDcsCisrCSAgMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSwweDBGIH0s CisrCXsgMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDc3LAorKwkgIDB4ODgs MHg5OSwweEFBLDB4QkIsMHhDQywweERELDB4RUUsMHhGRiB9LAorKwl7IDB4NjksMHhDNCwweEUw LDB4RDgsMHg2QSwweDdCLDB4MDQsMHgzMCwKKysJICAweEQ4LDB4Q0QsMHhCNywweDgwLDB4NzAs MHhCNCwweEM1LDB4NUEgfSwKKysJfSwKKysJfTsKKysKKyt2b2lkIEZJUFNfY29ycnVwdF9hZXMo KQorKyAgICB7CisrICAgIHRlc3RzWzBdLmtleVswXSsrOworKyAgICB9CisrCisraW50IEZJUFNf c2VsZnRlc3RfYWVzKCkKKysgICAgeworKyAgICBpbnQgbjsKKysgICAgaW50IHJldCA9IDA7Cisr ICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsK KysKKysgICAgZm9yKG49MCA7IG4gPCAxIDsgKytuKQorKwl7CisrCWlmIChmaXBzX2NpcGhlcl90 ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLAorKwkJCQl0ZXN0c1tuXS5rZXksIE5VTEwsCisr CQkJCXRlc3RzW25dLnBsYWludGV4dCwKKysJCQkJdGVzdHNbbl0uY2lwaGVydGV4dCwKKysJCQkJ MTYpIDw9IDApCisrCQlnb3RvIGVycjsKKysJfQorKyAgICByZXQgPSAxOworKyAgICBlcnI6Cisr ICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIGlmIChyZXQgPT0gMCkKKysJ ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTLEZJUFNfUl9TRUxGVEVTVF9GQUlM RUQpOworKyAgICByZXR1cm4gcmV0OworKyAgICB9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3Ns LTEuMC4wL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMv Zmlwcy5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzLmMuZmlwcwkyMDEwLTAz LTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Zp cHMvZmlwcy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsx LDQxOSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVu U1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAg IGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVu dGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlz cGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3Jn LykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NM IFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9y IHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRh Y3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIK KysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBw cmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0Lgor KyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCBy ZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlz IHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2pl Y3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3Bl bnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9w ZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBM SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhF IE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRF RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF UiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NT SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKworKyNpbmNsdWRlIDxvcGVu c3NsL3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9iaW8uaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPHN0cmlu Zy5oPgorKyNpbmNsdWRlIDxsaW1pdHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisr I2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKysj aWZuZGVmIFBBVEhfTUFYCisrI2RlZmluZSBQQVRIX01BWCAxMDI0CisrI2VuZGlmCisrCisrc3Rh dGljIGludCBmaXBzX3NlbGZ0ZXN0X2ZhaWw7Cisrc3RhdGljIGludCBmaXBzX21vZGU7Cisrc3Rh dGljIGNvbnN0IHZvaWQgKmZpcHNfcmFuZF9jaGVjazsKKysKKytzdGF0aWMgdm9pZCBmaXBzX3Nl dF9tb2RlKGludCBvbm9mZikKKysJeworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3du aW5nX3RocmVhZCgpOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCQl7CisrCQlpZiAo IW93bmluZ190aHJlYWQpIGZpcHNfd19sb2NrKCk7CisrCQlmaXBzX21vZGUgPSBvbm9mZjsKKysJ CWlmICghb3duaW5nX3RocmVhZCkgZmlwc193X3VubG9jaygpOworKwkJfQorKwl9CisrCisrc3Rh dGljIHZvaWQgZmlwc19zZXRfcmFuZF9jaGVjayhjb25zdCB2b2lkICpyYW5kX2NoZWNrKQorKwl7 CisrCWludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7CisrCisrCWlm IChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCWlmICghb3duaW5nX3RocmVhZCkgZmlwc193 X2xvY2soKTsKKysJCWZpcHNfcmFuZF9jaGVjayA9IHJhbmRfY2hlY2s7CisrCQlpZiAoIW93bmlu Z190aHJlYWQpIGZpcHNfd191bmxvY2soKTsKKysJCX0KKysJfQorKworK2ludCBGSVBTX21vZGUo dm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lz X293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJ aWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfbG9jaygpOworKwkJcmV0ID0gZmlwc19tb2RlOwor KwkJaWYgKCFvd25pbmdfdGhyZWFkKSBmaXBzX3JfdW5sb2NrKCk7CisrCQl9CisrCXJldHVybiBy ZXQ7CisrCX0KKysKKytjb25zdCB2b2lkICpGSVBTX3JhbmRfY2hlY2sodm9pZCkKKysJeworKwlj b25zdCB2b2lkICpyZXQgPSAwOworKwlpbnQgb3duaW5nX3RocmVhZCA9IGZpcHNfaXNfb3duaW5n X3RocmVhZCgpOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCQl7CisrCQlpZiAoIW93 bmluZ190aHJlYWQpIGZpcHNfcl9sb2NrKCk7CisrCQlyZXQgPSBmaXBzX3JhbmRfY2hlY2s7Cisr CQlpZiAoIW93bmluZ190aHJlYWQpIGZpcHNfcl91bmxvY2soKTsKKysJCX0KKysJcmV0dXJuIHJl dDsKKysJfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKQorKyAgICB7CisrICAg IGludCByZXQgPSAwOworKyAgICBpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCXsKKysJaW50IG93 bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKKysKKysJaWYgKCFvd25pbmdf dGhyZWFkKSBmaXBzX3JfbG9jaygpOworKwlyZXQgPSBmaXBzX3NlbGZ0ZXN0X2ZhaWw7CisrCWlm ICghb3duaW5nX3RocmVhZCkgZmlwc19yX3VubG9jaygpOworKwl9CisrICAgIHJldHVybiByZXQ7 CisrICAgIH0KKysKKysvKiBTZWxmdGVzdCBmYWlsdXJlIGZhdGFsIGV4aXQgcm91dGluZS4gVGhp cyB3aWxsIGJlIGNhbGxlZAorKyAqIGR1cmluZyAqYW55KiBjcnlwdG9ncmFwaGljIG9wZXJhdGlv bi4gSXQgaGFzIHRoZSBtaW5pbXVtCisrICogb3ZlcmhlYWQgcG9zc2libGUgdG8gYXZvaWQgdG9v IGJpZyBhIHBlcmZvcm1hbmNlIGhpdC4KKysgKi8KKysKKyt2b2lkIEZJUFNfc2VsZnRlc3RfY2hl Y2sodm9pZCkKKysgICAgeworKyAgICBpZiAoZmlwc19zZWxmdGVzdF9mYWlsKQorKwl7CisrCU9w ZW5TU0xEaWUoX19GSUxFX18sX19MSU5FX18sICJGQVRBTCBGSVBTIFNFTEZURVNUIEZBSUxVUkUi KTsKKysJfQorKyAgICB9CisrCisrdm9pZCBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKHZvaWQpCisr ICAgIHsKKysgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysgICAgfQorKworK2ludCBGSVBT X3NlbGZ0ZXN0KCkKKysgICAgeworKworKyAgICByZXR1cm4gRklQU19zZWxmdGVzdF9zaGExKCkK KysJJiYgRklQU19zZWxmdGVzdF9obWFjKCkKKysJJiYgRklQU19zZWxmdGVzdF9hZXMoKQorKwkm JiBGSVBTX3NlbGZ0ZXN0X2RlcygpCisrCSYmIEZJUFNfc2VsZnRlc3RfcnNhKCkKKysJJiYgRklQ U19zZWxmdGVzdF9kc2EoKTsKKysgICAgfQorKworK2ludCBGSVBTX21vZGVfc2V0KGludCBvbm9m ZikKKysgICAgeworKyAgICBpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOworKyAgICBpbnQg Zmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKCk7CisrICAgIGludCByZXQgPSAwOworKworKyAgICBm aXBzX3dfbG9jaygpOworKyAgICBmaXBzX3NldF9zdGFydGVkKCk7CisrICAgIGZpcHNfc2V0X293 bmluZ190aHJlYWQoKTsKKysKKysgICAgaWYob25vZmYpCisrCXsKKysJdW5zaWduZWQgY2hhciBi dWZbNDhdOworKworKwlmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAwOworKworKwkvKiBEb24ndCBnbyBp bnRvIEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8gYXV0b21hZ2ljCisrCSAgIHNl ZWRpbmcgKi8KKysJaWYoRklQU19tb2RlKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX01PREVfU0VULEZJUFNfUl9GSVBTX01PREVfQUxSRUFEWV9TRVQpOworKwkgICAgZmlw c19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3RvIGVuZDsKKysJ ICAgIH0KKysKKysjaWZkZWYgT1BFTlNTTF9JQTMyX1NTRTIKKysJaWYgKChPUEVOU1NMX2lhMzJj YXAgJiAoMTw8MjV8MTw8MjYpKSAhPSAoMTw8MjV8MTw8MjYpKQorKwkgICAgeworKwkgICAgRklQ U2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCxGSVBTX1JfVU5TVVBQT1JURURfUExBVEZPUk0pOwor KwkgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysJICAgIHJldCA9IDA7CisrCSAgICBnb3Rv IGVuZDsKKysJICAgIH0KKysjZW5kaWYKKysKKysJLyogUGVyZm9ybSBSTkcgS0FUIGJlZm9yZSBz ZWVkaW5nICovCisrCWlmICghRklQU19zZWxmdGVzdF9ybmcoKSkKKysJICAgIHsKKysJICAgIGZp cHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrCSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7Cisr CSAgICB9CisrCisrCS8qIGF1dG9tYWdpY2FsbHkgc2VlZCBQUk5HIGlmIG5vdCBhbHJlYWR5IHNl ZWRlZCAqLworKwlpZighRklQU19yYW5kX3N0YXR1cygpKQorKwkgICAgeworKwkgICAgaWYoUkFO RF9ieXRlcyhidWYsc2l6ZW9mIGJ1ZikgPD0gMCkKKysJCXsKKysJCWZpcHNfc2VsZnRlc3RfZmFp bCA9IDE7CisrCQlyZXQgPSAwOworKwkJZ290byBlbmQ7CisrCQl9CisrCSAgICBGSVBTX3JhbmRf c2V0X2tleShidWYsMzIpOworKwkgICAgRklQU19yYW5kX3NlZWQoYnVmKzMyLDE2KTsKKysJICAg IH0KKysKKysJLyogbm93IHN3aXRjaCBpbnRvIEZJUFMgbW9kZSAqLworKwlmaXBzX3NldF9yYW5k X2NoZWNrKEZJUFNfcmFuZF9tZXRob2QoKSk7CisrCVJBTkRfc2V0X3JhbmRfbWV0aG9kKEZJUFNf cmFuZF9tZXRob2QoKSk7CisrCWlmKEZJUFNfc2VsZnRlc3QoKSkKKysJICAgIGZpcHNfc2V0X21v ZGUoMSk7CisrCWVsc2UKKysJICAgIHsKKysJICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Cisr CSAgICByZXQgPSAwOworKwkgICAgZ290byBlbmQ7CisrCSAgICB9CisrCXJldCA9IDE7CisrCWdv dG8gZW5kOworKwl9CisrICAgIGZpcHNfc2V0X21vZGUoMCk7CisrICAgIGZpcHNfc2VsZnRlc3Rf ZmFpbCA9IDA7CisrICAgIHJldCA9IDE7CisrZW5kOgorKyAgICBmaXBzX2NsZWFyX293bmluZ190 aHJlYWQoKTsKKysgICAgZmlwc193X3VubG9jaygpOworKyAgICByZXR1cm4gcmV0OworKyAgICB9 CisrCisrdm9pZCBmaXBzX3dfbG9jayh2b2lkKQkJeyBDUllQVE9fd19sb2NrKENSWVBUT19MT0NL X0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3dfdW5sb2NrKHZvaWQpCXsgQ1JZUFRPX3dfdW5sb2NrKENS WVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3JfbG9jayh2b2lkKQkJeyBDUllQVE9fcl9s b2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9Cisrdm9pZCBmaXBzX3JfdW5sb2NrKHZvaWQpCXsgQ1JZ UFRPX3JfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMpOyB9CisrCisrc3RhdGljIGludCBmaXBzX3N0 YXJ0ZWQgPSAwOworK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpcHNfdGhyZWFkID0gMDsKKysKKyt2 b2lkIGZpcHNfc2V0X3N0YXJ0ZWQodm9pZCkKKysJeworKwlmaXBzX3N0YXJ0ZWQgPSAxOworKwl9 CisrCisraW50IGZpcHNfaXNfc3RhcnRlZCh2b2lkKQorKwl7CisrCXJldHVybiBmaXBzX3N0YXJ0 ZWQ7CisrCX0KKysKKytpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpCisrCXsKKysJaW50 IHJldCA9IDA7CisrCisrCWlmIChmaXBzX2lzX3N0YXJ0ZWQoKSkKKysJCXsKKysJCUNSWVBUT19y X2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJaWYgKGZpcHNfdGhyZWFkICE9IDAgJiYgZmlw c190aHJlYWQgPT0gQ1JZUFRPX3RocmVhZF9pZCgpKQorKwkJCXJldCA9IDE7CisrCQlDUllQVE9f cl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4gcmV0OworKwl9Cisr CisraW50IGZpcHNfc2V0X293bmluZ190aHJlYWQodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsK KysKKysJaWYgKGZpcHNfaXNfc3RhcnRlZCgpKQorKwkJeworKwkJQ1JZUFRPX3dfbG9jayhDUllQ VE9fTE9DS19GSVBTMik7CisrCQlpZiAoZmlwc190aHJlYWQgPT0gMCkKKysJCQl7CisrCQkJZmlw c190aHJlYWQgPSBDUllQVE9fdGhyZWFkX2lkKCk7CisrCQkJcmV0ID0gMTsKKysJCQl9CisrCQlD UllQVE9fd191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKwkJfQorKwlyZXR1cm4gcmV0Owor Kwl9CisrCisraW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKQorKwl7CisrCWludCBy ZXQgPSAwOworKworKwlpZiAoZmlwc19pc19zdGFydGVkKCkpCisrCQl7CisrCQlDUllQVE9fd19s b2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysJCWlmIChmaXBzX3RocmVhZCA9PSBDUllQVE9fdGhy ZWFkX2lkKCkpCisrCQkJeworKwkJCWZpcHNfdGhyZWFkID0gMDsKKysJCQlyZXQgPSAxOworKwkJ CX0KKysJCUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrCQl9CisrCXJldHVy biByZXQ7CisrCX0KKysKKysvKiBHZW5lcmFsaXplZCBwdWJsaWMga2V5IHRlc3Qgcm91dGluZS4g U2lnbnMgYW5kIHZlcmlmaWVzIHRoZSBkYXRhCisrICogc3VwcGxpZWQgaW4gdGJzIHVzaW5nIG1l c2FnZSBkaWdlc3QgbWQgYW5kIHNldHRpbmcgb3B0aW9uIGRpZ2VzdAorKyAqIGZsYWdzIG1kX2Zs YWdzLiBJZiB0aGUgJ2thdCcgcGFyYW1ldGVyIGlzIG5vdCBOVUxMIGl0IHdpbGwKKysgKiBhZGRp dGlvbmFsbHkgY2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIGl0OiBhIGtub3duIGFuc3dlciB0 ZXN0CisrICogVGhlIHN0cmluZyAiZmFpbF9zdHIiIGlzIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9u IHB1cnBvc2VzIGluIGNhc2UKKysgKiBvZiBmYWlsdXJlLgorKyAqLworKworK2ludCBmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCisrCQkJY29uc3QgdW5zaWduZWQgY2hh ciAqdGJzLCBpbnQgdGJzbGVuLAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwgdW5zaWdu ZWQgaW50IGthdGxlbiwKKysJCQljb25zdCBFVlBfTUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1k X2ZsYWdzLAorKwkJCWNvbnN0IGNoYXIgKmZhaWxfc3RyKQorKwl7CQorKwlpbnQgcmV0ID0gMDsK KysJdW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNpZ3RtcDsKKysJdW5zaWduZWQg aW50IHNpZ2xlbjsKKysJRVZQX01EX0NUWCBtY3R4OworKwlFVlBfTURfQ1RYX2luaXQoJm1jdHgp OworKworKwlpZiAoKHBrZXktPnR5cGUgPT0gRVZQX1BLRVlfUlNBKQorKwkJJiYgKFJTQV9zaXpl KHBrZXktPnBrZXkucnNhKSA+IHNpemVvZihzaWd0bXApKSkKKysJCXsKKysJCXNpZyA9IE9QRU5T U0xfbWFsbG9jKFJTQV9zaXplKHBrZXktPnBrZXkucnNhKSk7CisrCQlpZiAoIXNpZykKKysJCQl7 CisrCQkJRklQU2VycihGSVBTX0ZfRklQU19QS0VZX1NJR05BVFVSRV9URVNULEVSUl9SX01BTExP Q19GQUlMVVJFKTsKKysJCQlyZXR1cm4gMDsKKysJCQl9CisrCQl9CisrCisrCWlmICh0YnNsZW4g PT0gLTEpCisrCQl0YnNsZW4gPSBzdHJsZW4oKGNoYXIgKil0YnMpOworKworKwlpZiAobWRfZmxh Z3MpCisrCQlFVlBfTURfQ1RYX3NldF9mbGFncygmbWN0eCwgbWRfZmxhZ3MpOworKworKwlpZiAo IUVWUF9TaWduSW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7Cisr CWlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKKysJCWdvdG8gZXJyb3I7 CisrCWlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgc2lnLCAmc2lnbGVuLCBwa2V5KSkKKysJCWdv dG8gZXJyb3I7CisrCisrCWlmIChrYXQgJiYgKChzaWdsZW4gIT0ga2F0bGVuKSB8fCBtZW1jbXAo a2F0LCBzaWcsIGthdGxlbikpKQorKwkJZ290byBlcnJvcjsKKysKKysJaWYgKCFFVlBfVmVyaWZ5 SW5pdF9leCgmbWN0eCwgZGlnZXN0LCBOVUxMKSkKKysJCWdvdG8gZXJyb3I7CisrCWlmICghRVZQ X1ZlcmlmeVVwZGF0ZSgmbWN0eCwgdGJzLCB0YnNsZW4pKQorKwkJZ290byBlcnJvcjsKKysJcmV0 ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBzaWcsIHNpZ2xlbiwgcGtleSk7CisrCisrCWVycm9y OgorKwlpZiAoc2lnICE9IHNpZ3RtcCkKKysJCU9QRU5TU0xfZnJlZShzaWcpOworKwlFVlBfTURf Q1RYX2NsZWFudXAoJm1jdHgpOworKwlpZiAocmV0ICE9IDEpCisrCQl7CisrCQlGSVBTZXJyKEZJ UFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsRklQU19SX1RFU1RfRkFJTFVSRSk7CisrCQlp ZiAoZmFpbF9zdHIpCisrCQkJRVJSX2FkZF9lcnJvcl9kYXRhKDIsICJUeXBlPSIsIGZhaWxfc3Ry KTsKKysJCXJldHVybiAwOworKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworKy8qIEdlbmVyYWxp emVkIHN5bW1ldHJpYyBjaXBoZXIgdGVzdCByb3V0aW5lLiBFbmNyeXB0IGRhdGEsIHZlcmlmeSBy ZXN1bHQKKysgKiBhZ2FpbnN0IGtub3duIGFuc3dlciwgZGVjcnlwdCBhbmQgY29tcGFyZSB3aXRo IG9yaWdpbmFsIHBsYWludGV4dC4KKysgKi8KKysKKytpbnQgZmlwc19jaXBoZXJfdGVzdChFVlBf Q0lQSEVSX0NUWCAqY3R4LCBjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIsCisrCQkJY29uc3QgdW5z aWduZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorKwkJCWNvbnN0 IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysJCQljb25zdCB1bnNpZ25lZCBjaGFyICpjaXBo ZXJ0ZXh0LAorKwkJCWludCBsZW4pCisrCXsKKysJdW5zaWduZWQgY2hhciBwbHRtcFtGSVBTX01B WF9DSVBIRVJfVEVTVF9TSVpFXTsKKysJdW5zaWduZWQgY2hhciBjaXRtcFtGSVBTX01BWF9DSVBI RVJfVEVTVF9TSVpFXTsKKysJT1BFTlNTTF9hc3NlcnQobGVuIDw9IEZJUFNfTUFYX0NJUEhFUl9U RVNUX1NJWkUpOworKwlpZiAoRVZQX0NpcGhlckluaXRfZXgoY3R4LCBjaXBoZXIsIE5VTEwsIGtl eSwgaXYsIDEpIDw9IDApCisrCQlyZXR1cm4gMDsKKysJRVZQX0NpcGhlcihjdHgsIGNpdG1wLCBw bGFpbnRleHQsIGxlbik7CisrCWlmIChtZW1jbXAoY2l0bXAsIGNpcGhlcnRleHQsIGxlbikpCisr CQlyZXR1cm4gMDsKKysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KGN0eCwgY2lwaGVyLCBOVUxMLCBr ZXksIGl2LCAwKSA8PSAwKQorKwkJcmV0dXJuIDA7CisrCUVWUF9DaXBoZXIoY3R4LCBwbHRtcCwg Y2l0bXAsIGxlbik7CisrCWlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgbGVuKSkKKysJCXJl dHVybiAwOworKwlyZXR1cm4gMTsKKysJfQorKworKyNpZiAwCisrLyogVGhlIHB1cnBvc2Ugb2Yg dGhpcyBpcyB0byBlbnN1cmUgdGhlIGVycm9yIGNvZGUgZXhpc3RzIGFuZCB0aGUgZnVuY3Rpb24K KysgKiBuYW1lIGlzIHRvIGtlZXAgdGhlIGVycm9yIGNoZWNraW5nIHNjcmlwdCBxdWlldAorKyAq LworK3ZvaWQgaGFzaF9maW5hbCh2b2lkKQorKwl7CisrCUZJUFNlcnIoRklQU19GX0hBU0hfRklO QUwsRklQU19SX05PTl9GSVBTX01FVEhPRCk7CisrCX0KKysjZW5kaWYKKysKKysKKysjZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYworLS0tIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYy5maXBzCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9maXBzX2Rlc19zZWxmdGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAw CitAQCAtMCwwICsxLDEzOSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAy MDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlz dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICog ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo IHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBt YXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3 YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3 Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIg YW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNl IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAor KyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwg cGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysg KiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxl ZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFt ZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNT TCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRz b2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50Ogor KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NF RCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF TlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUg TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysg KiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW SUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkg V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAq IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNs dWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKworK3N0YXRpYyBzdHJ1Y3QKKysgICAgeworKyAgICB1bnNpZ25l ZCBjaGFyIGtleVsxNl07CisrICAgIHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKyAgICB1 bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07CisrICAgIH0gdGVzdHMyW109CisrCXsKKysJewor Kwl7IDB4N2MsMHg0ZiwweDZlLDB4ZjcsMHhhMiwweDA0LDB4MTYsMHhlYywKKysJICAweDBiLDB4 NmIsMHg3YywweDllLDB4NWUsMHgxOSwweGE3LDB4YzQgfSwKKysJeyAweDA2LDB4YTcsMHhkOCww eDc5LDB4YWEsMHhjZSwweDY5LDB4ZWYgfSwKKysJeyAweDRjLDB4MTEsMHgxNywweDU1LDB4YmYs MHhjNCwweDRlLDB4ZmQgfQorKwl9LAorKwl7CisrCXsgMHg1ZCwweDllLDB4MDEsMHhkMywweDI1 LDB4YzcsMHgzZSwweDM0LAorKwkgIDB4MDEsMHgxNiwweDdjLDB4ODUsMHgyMywweGRmLDB4ZTAs MHg2OCB9LAorKwl7IDB4OWMsMHg1MCwweDA5LDB4MGYsMHg1ZSwweDdkLDB4NjksMHg3ZSB9LAor Kwl7IDB4ZDIsMHgwYiwweDE4LDB4ZGYsMHhkOSwweDBkLDB4OWUsMHhmZiB9LAorKwl9CisrCX07 CisrCisrc3RhdGljIHN0cnVjdAorKyAgICB7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5WzI0XTsK KysgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07CisrICAgIHVuc2lnbmVkIGNoYXIgY2lw aGVydGV4dFs4XTsKKysgICAgfSB0ZXN0czNbXT0KKysJeworKwl7CisrCXsgMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkgIDB4RkUsMHhEQywweEJBLDB4OTgsMHg3 NiwweDU0LDB4MzIsMHgxMCwKKysJICAweDEyLDB4MzQsMHg1NiwweDc4LDB4OWEsMHhiYywweGRl LDB4ZjAgfSwKKysJeyAweDhmLDB4OGYsMHhiZiwweDliLDB4NWQsMHg0OCwweGI0LDB4MWMgfSwK KysJeyAweDU5LDB4OGMsMHhlNSwweGQzLDB4NmMsMHhhMiwweGVhLDB4MWIgfSwKKysJfSwKKysJ eworKwl7IDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwweDMyLDB4MTAsMHhGRSwKKysJICAweDAx LDB4MjMsMHg0NSwweDY3LDB4ODksMHhBQiwweENELDB4RUYsCisrCSAgMHhFRCwweDM5LDB4RDks MHg1MCwweEZBLDB4NzQsMHhCQywweEM0IH0sCisrCXsgMHgwMSwweDIzLDB4NDUsMHg2NywweDg5 LDB4QUIsMHhDRCwweEVGIH0sCisrCXsgMHgxMSwweDI1LDB4YjAsMHgzNSwweGJlLDB4YTAsMHg4 MiwweDg2IH0sCisrCX0sCisrCX07CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKCkKKysgICAg eworKyAgICB0ZXN0czJbMF0ucGxhaW50ZXh0WzBdKys7CisrICAgIH0KKysKKytpbnQgRklQU19z ZWxmdGVzdF9kZXMoKQorKyAgICB7CisrICAgIGludCBuLCByZXQgPSAwOworKyAgICBFVlBfQ0lQ SEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrICAgIC8qIEVu Y3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2Vy cyAqLworKyAgICBmb3Iobj0wIDsgbiA8IDIgOyArK24pCisrCXsKKysJaWYgKCFmaXBzX2NpcGhl cl90ZXN0KCZjdHgsIEVWUF9kZXNfZWRlX2VjYigpLAorKwkJCQl0ZXN0czJbbl0ua2V5LCBOVUxM LAorKwkJCQl0ZXN0czJbbl0ucGxhaW50ZXh0LCB0ZXN0czJbbl0uY2lwaGVydGV4dCwgOCkpCisr CQlnb3RvIGVycjsKKysJfQorKworKyAgICAvKiBFbmNyeXB0L2RlY3J5cHQgd2l0aCAzREVTIGFu ZCBjb21wYXJlIHRvIGtub3duIGFuc3dlcnMgKi8KKysgICAgZm9yKG49MCA7IG4gPCAyIDsgKytu KQorKwl7CisrCWlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZTNfZWNiKCks CisrCQkJCXRlc3RzM1tuXS5rZXksIE5VTEwsCisrCQkJCXRlc3RzM1tuXS5wbGFpbnRleHQsIHRl c3RzM1tuXS5jaXBoZXJ0ZXh0LCA4KSkKKysJCWdvdG8gZXJyOworKwl9CisrICAgIHJldCA9IDE7 CisrICAgIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysgICAgaWYg KHJldCA9PSAwKQorKwkgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMsRklQU19S X1NFTEZURVNUX0ZBSUxFRCk7CisrCisrICAgIHJldHVybiByZXQ7CisrICAgIH0KKysjZW5kaWYK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYworLS0tIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYy5maXBzCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9maXBzX2RzYV9zZWxmdGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAw CitAQCAtMCwwICsxLDE4NiBAQAorKy8qIGNyeXB0by9kc2EvZHNhdGVzdC5jICovCisrLyogQ29w eXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICog QWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1w bGVtZW50YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KS4KKysgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3 aXRoIE5ldHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNv bW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxv d2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisrICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0 IHRoZSBSQzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUg U1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMg ZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICog ZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSku CisrICogCisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBh bnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92 ZWQuCisrICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5n IHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBh cnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2Yg YSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRh dGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICog CisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp YnV0aW9uLgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNy eXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlA Y3J5cHRzb2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBs ZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNl ZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1 ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZy b20gCisrICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVz dCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgor KyAqIAorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElT JycgQU5ECisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysg KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKKysgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxp Y2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxl IHZlcnNpb24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdl ZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1 bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05V IFB1YmxpYyBMaWNlbmNlLl0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+CisrI2lmZGVm IE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9ibi5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysvKiBzZWVkLCBv dXRfcCwgb3V0X3EsIG91dF9nIGFyZSB0YWtlbiB0aGUgTklTVCB0ZXN0IHZlY3RvcnMgKi8KKysK KytzdGF0aWMgdW5zaWduZWQgY2hhciBzZWVkWzIwXSA9IHsKKysJMHg3NywgMHg4ZiwgMHg0MCwg MHg3NCwgMHg2ZiwgMHg2NiwgMHhiZSwgMHgzMywgMHhjZSwgMHhiZSwgMHg5OSwgMHgzNCwKKysJ MHg0YywgMHhmYywgMHhmMywgMHgyOCwgMHhhYSwgMHg3MCwgMHgyZCwgMHgzYQorKyAgCX07Cisr Cisrc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3BbXSA9IHsKKysJMHhmNywgMHg3YywgMHgxYiwg MHg4MywgMHhkOCwgMHhlOCwgMHg1YywgMHg3ZiwgMHg4NSwgMHgzMCwgMHgxNywgMHg1NywKKysJ MHgyMSwgMHg5NSwgMHhmZSwgMHgyNiwgMHgwNCwgMHhlYiwgMHg0NywgMHg0YywgMHgzYSwgMHg0 YSwgMHg4MSwgMHg0YiwKKysJMHg3MSwgMHgyZSwgMHhlZCwgMHg2ZSwgMHg0ZiwgMHgzZCwgMHgx MSwgMHgwZiwgMHg3YywgMHhmZSwgMHgzNiwgMHg0MywKKysJMHg1MSwgMHhkOSwgMHg4MSwgMHgz OSwgMHgxNywgMHhkZiwgMHg2MiwgMHhmNiwgMHg5YywgMHgwMSwgMHhhOCwgMHg2OSwKKysJMHg3 MSwgMHhkZCwgMHgyOSwgMHg3ZiwgMHg0NywgMHhlNiwgMHg2NSwgMHhhNiwgMHgyMiwgMHhlOCwg MHg2YSwgMHgxMiwKKysJMHgyYiwgMHhjMiwgMHg4MSwgMHhmZiwgMHgzMiwgMHg3MCwgMHgyZiwg MHg5ZSwgMHhjYSwgMHg1MywgMHgyNiwgMHg0NywKKysJMHgwZiwgMHg1OSwgMHhkNywgMHg5ZSwg MHgyYywgMHhhNSwgMHgwNywgMHhjNCwgMHg0OSwgMHg1MiwgMHhhMywgMHhlNCwKKysJMHg2Yiwg MHgwNCwgMHgwMCwgMHgyNSwgMHg0OSwgMHhlMiwgMHhlNiwgMHg3ZiwgMHgyOCwgMHg3OCwgMHg5 NywgMHhiOCwKKysJMHgzYSwgMHgzMiwgMHgxNCwgMHgzOCwgMHhhMiwgMHg1MSwgMHgzMywgMHgy MiwgMHg0NCwgMHg3ZSwgMHhkNywgMHhlZiwKKysJMHg0NSwgMHhkYiwgMHgwNiwgMHg0YSwgMHhk MiwgMHg4MiwgMHg0YSwgMHg4MiwgMHgyYywgMHhiMSwgMHhkNywgMHhkOCwKKysJMHhiNiwgMHg3 MywgMHgwMCwgMHg0ZCwgMHg5NCwgMHg3NywgMHg5NCwgMHhlZgorKwl9OworKworK3N0YXRpYyB1 bnNpZ25lZCBjaGFyIG91dF9xW10gPSB7CisrCTB4ZDQsIDB4MGEsIDB4YWMsIDB4OWYsIDB4YmQs IDB4OGMsIDB4ODAsIDB4YzIsIDB4MzgsIDB4N2UsIDB4MmUsIDB4MGMsCisrCTB4NTIsIDB4NWMs IDB4ZWEsIDB4MzQsIDB4YTEsIDB4ODMsIDB4MzIsIDB4ZjMKKysJfTsKKysKKytzdGF0aWMgdW5z aWduZWQgY2hhciBvdXRfZ1tdID0geworKwkweDM0LCAweDczLCAweDhiLCAweDU3LCAweDg0LCAw eDhlLCAweDU1LCAweGJmLCAweDU3LCAweGNjLCAweDQxLCAweGJiLAorKwkweDVlLCAweDJiLCAw eGQ1LCAweDQyLCAweGRkLCAweDI0LCAweDIyLCAweDJhLCAweDA5LCAweGVhLCAweDI2LCAweDFl LAorKwkweDE3LCAweDY1LCAweGNiLCAweDFhLCAweGIzLCAweDEyLCAweDQ0LCAweGEzLCAweDll LCAweDk5LCAweGU5LCAweDYzLAorKwkweGViLCAweDMwLCAweGIxLCAweDc4LCAweDdiLCAweDA5 LCAweDQwLCAweDMwLCAweGZhLCAweDgzLCAweGMyLCAweDM1LAorKwkweGUxLCAweGM0LCAweDJk LCAweDc0LCAweDFhLCAweGIxLCAweDgzLCAweDU0LCAweGQ4LCAweDI5LCAweGY0LCAweGNmLAor KwkweDdmLCAweDZmLCAweDY3LCAweDFjLCAweDM2LCAweDQ5LCAweGVlLCAweDZjLCAweGEyLCAw eDNjLCAweDJkLCAweDZhLAorKwkweGU5LCAweGQzLCAweDlhLCAweGY2LCAweDU3LCAweDc4LCAw eDZmLCAweGZkLCAweDMzLCAweGNkLCAweDNjLCAweGVkLAorKwkweGZkLCAweGQ0LCAweDQxLCAw eGU2LCAweDVjLCAweDhiLCAweGUwLCAweDY4LCAweDMxLCAweDQ3LCAweDQ3LCAweGFmLAorKwkw eDEyLCAweGE3LCAweGY5LCAweDMyLCAweDBkLCAweDk0LCAweDE1LCAweDQ4LCAweGQwLCAweDU0 LCAweDg1LCAweGIyLAorKwkweDA0LCAweGI1LCAweDRkLCAweGQ0LCAweDlkLCAweDA1LCAweDIy LCAweDI1LCAweGQ5LCAweGZkLCAweDZjLCAweDM2LAorKwkweGVmLCAweGJlLCAweDY5LCAweDZj LCAweDU1LCAweGY0LCAweGVlLCAweGVjCisrCX07CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc3RyMVtdPSIxMjM0NTY3ODkwMTIzNDU2Nzg5MCI7CisrCisrdm9pZCBGSVBTX2NvcnJ1 cHRfZHNhKCkKKysgICAgeworKyAgICArK3NlZWRbMF07CisrICAgIH0KKysKKytpbnQgRklQU19z ZWxmdGVzdF9kc2EoKQorKyAgICB7CisrICAgIERTQSAqZHNhOworKyAgICBpbnQgY291bnRlcixp LGosIHJldCA9IDA7CisrICAgIHVuc2lnbmVkIGludCBzbGVuOworKyAgICB1bnNpZ25lZCBjaGFy IGJ1ZlsyNTZdOworKyAgICB1bnNpZ25lZCBsb25nIGg7CisrICAgIEVWUF9NRF9DVFggbWN0eDsK KysgICAgRVZQX1BLRVkgKnBrID0gTlVMTDsKKysKKysgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4 KTsKKysKKysgICAgZHNhID0gRFNBX25ldygpOworKworKyAgICBpZihkc2EgPT0gTlVMTCkKKysJ Z290byBlcnI7CisrICAgIGlmKCFEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkc2EsIDEwMjQs c2VlZCwyMCwmY291bnRlciwmaCxOVUxMKSkKKysJZ290byBlcnI7CisrICAgIGlmIChjb3VudGVy ICE9IDM3OCkgCisrCWdvdG8gZXJyOworKyAgICBpZiAoaCAhPSAyKQorKwlnb3RvIGVycjsKKysg ICAgaT1CTl9ibjJiaW4oZHNhLT5xLGJ1Zik7CisrICAgIGo9c2l6ZW9mKG91dF9xKTsKKysgICAg aWYgKGkgIT0gaiB8fCBtZW1jbXAoYnVmLG91dF9xLGkpICE9IDApCisrCWdvdG8gZXJyOworKwor KyAgICBpPUJOX2JuMmJpbihkc2EtPnAsYnVmKTsKKysgICAgaj1zaXplb2Yob3V0X3ApOworKyAg ICBpZiAoaSAhPSBqIHx8IG1lbWNtcChidWYsb3V0X3AsaSkgIT0gMCkKKysJZ290byBlcnI7Cisr CisrICAgIGk9Qk5fYm4yYmluKGRzYS0+ZyxidWYpOworKyAgICBqPXNpemVvZihvdXRfZyk7Cisr ICAgIGlmIChpICE9IGogfHwgbWVtY21wKGJ1ZixvdXRfZyxpKSAhPSAwKQorKwlnb3RvIGVycjsK KysgICAgRFNBX2dlbmVyYXRlX2tleShkc2EpOworKworKyAgICBpZiAoKHBrPUVWUF9QS0VZX25l dygpKSA9PSBOVUxMKQorKwlnb3RvIGVycjsKKysgICAgRVZQX1BLRVlfYXNzaWduX0RTQShwaywg ZHNhKTsKKysKKysgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5V TEwpKQorKwlnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgc3RyMSwg MjApKQorKwlnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfU2lnbkZpbmFsKCZtY3R4LCBidWYsICZz bGVuLCBwaykpCisrCWdvdG8gZXJyOworKworKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZt Y3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKKysJZ290byBlcnI7CisrICAgIGlmICghRVZQX1Zlcmlm eVVwZGF0ZSgmbWN0eCwgc3RyMSwgMjApKQorKwlnb3RvIGVycjsKKysgICAgaWYgKEVWUF9WZXJp ZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCBwaykgIT0gMSkKKysJZ290byBlcnI7CisrCisrICAg IHJldCA9IDE7CisrCisrICAgIGVycjoKKysgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsK KysgICAgaWYgKHBrKQorKwlFVlBfUEtFWV9mcmVlKHBrKTsKKysgICAgZWxzZSBpZiAoZHNhKQor KwlEU0FfZnJlZShkc2EpOworKyAgICBpZiAocmV0ID09IDApCisrCSAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX1NFTEZURVNUX0RTQSxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgcmV0dXJu IHJldDsKKysgICAgfQorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9maXBzLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHMuaAorLS0tIG9wZW5z c2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwcy5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHMuaAkyMDEwLTAz LTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSwxNjMgQEAKKysvKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxs 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 QU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgor KworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2Vycm9yIEZJUFMgaXMgZGlzYWJsZWQuCisrI2Vu ZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKytl eHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKytzdHJ1Y3QgZHNhX3N0OworK3N0cnVjdCBldnBfcGtl eV9zdDsKKytzdHJ1Y3QgZW52X21kX3N0OworK3N0cnVjdCBldnBfY2lwaGVyX3N0OworK3N0cnVj dCBldnBfY2lwaGVyX2N0eF9zdDsKKysKKytpbnQgRklQU19tb2RlX3NldChpbnQgb25vZmYpOwor K2ludCBGSVBTX21vZGUodm9pZCk7CisrY29uc3Qgdm9pZCAqRklQU19yYW5kX2NoZWNrKHZvaWQp OworK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKKyt2b2lkIEZJUFNfc2VsZnRlc3Rf Y2hlY2sodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSh2b2lkKTsKKytpbnQgRklQU19z ZWxmdGVzdF9zaGExKHZvaWQpOworK3ZvaWQgRklQU19jb3JydXB0X2Flcyh2b2lkKTsKKytpbnQg RklQU19zZWxmdGVzdF9hZXModm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKHZvaWQpOwor K2ludCBGSVBTX3NlbGZ0ZXN0X2Rlcyh2b2lkKTsKKyt2b2lkIEZJUFNfY29ycnVwdF9yc2Eodm9p ZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbih2b2lkKTsKKytpbnQgRklQU19zZWxm dGVzdF9yc2Eodm9pZCk7Cisrdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOworK3ZvaWQgRklQ U19jb3JydXB0X2RzYV9rZXlnZW4odm9pZCk7CisraW50IEZJUFNfc2VsZnRlc3RfZHNhKHZvaWQp OworK3ZvaWQgRklQU19jb3JydXB0X3JuZyh2b2lkKTsKKyt2b2lkIEZJUFNfcm5nX3N0aWNrKHZv aWQpOworK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKTsKKytpbnQgRklQU19zZWxmdGVzdF9o bWFjKHZvaWQpOworKworK2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3Qoc3RydWN0IGV2cF9w a2V5X3N0ICpwa2V5LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRicywgaW50IHRic2xlbiwK KysJCQljb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRsZW4sCisrCQkJ Y29uc3Qgc3RydWN0IGVudl9tZF9zdCAqZGlnZXN0LCB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsCisr CQkJY29uc3QgY2hhciAqZmFpbF9zdHIpOworKworK2ludCBmaXBzX2NpcGhlcl90ZXN0KHN0cnVj dCBldnBfY2lwaGVyX2N0eF9zdCAqY3R4LAorKwkJCWNvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0 ICpjaXBoZXIsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorKwkJCWNvbnN0IHVuc2ln bmVkIGNoYXIgKml2LAorKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKKysJCQlj b25zdCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorKwkJCWludCBsZW4pOworKworKy8qIEJF R0lOIEVSUk9SIENPREVTICovCisrLyogVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgYXV0byBnZW5l cmF0ZWQgYnkgdGhlIHNjcmlwdCBta2Vyci5wbC4gQW55IGNoYW5nZXMKKysgKiBtYWRlIGFmdGVy IHRoaXMgcG9pbnQgbWF5IGJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlIHNjcmlwdCBpcyBuZXh0IHJ1 bi4KKysgKi8KKyt2b2lkIEVSUl9sb2FkX0ZJUFNfc3RyaW5ncyh2b2lkKTsKKysKKysvKiBFcnJv ciBjb2RlcyBmb3IgdGhlIEZJUFMgZnVuY3Rpb25zLiAqLworKworKy8qIEZ1bmN0aW9uIGNvZGVz LiAqLworKyNkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TCQkJIDEwMAorKyNkZWZp bmUgRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOCQkJIDEwMQorKyNkZWZpbmUgRklQU19GX0RT QV9ET19TSUdOCQkJCSAxMDIKKysjZGVmaW5lIEZJUFNfRl9EU0FfRE9fVkVSSUZZCQkJCSAxMDMK KysjZGVmaW5lIEZJUFNfRl9FVlBfQ0lQSEVSSU5JVF9FWAkJCSAxMjQKKysjZGVmaW5lIEZJUFNf Rl9FVlBfRElHRVNUSU5JVF9FWAkJCSAxMjUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0RT QQkJCQkgMTA0CisrI2RlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQJ CSAxMDUKKysjZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQQkJCQkgMTA2CisrI2RlZmluZSBG SVBTX0ZfRklQU19EU0FfQ0hFQ0sJCQkJIDEwNworKyNkZWZpbmUgRklQU19GX0ZJUFNfTU9ERV9T RVQJCQkJIDEwOAorKyNkZWZpbmUgRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVAkJCSAx MDkKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUwkJCSAxMTAKKysjZGVmaW5lIEZJ UFNfRl9GSVBTX1NFTEZURVNUX0RFUwkJCSAxMTEKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZU RVNUX0RTQQkJCSAxMTIKKysjZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMJCQkgMTEz CisrI2RlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9STkcJCQkgMTE0CisrI2RlZmluZSBGSVBT X0ZfRklQU19TRUxGVEVTVF9TSEExCQkJIDExNQorKyNkZWZpbmUgRklQU19GX0hBU0hfRklOQUwJ CQkJIDEyMworKyNkZWZpbmUgRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTgkJCSAxMTYKKysjZGVm aW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVAkJCSAxMTcKKysjZGVmaW5lIEZJUFNf Rl9SU0FfRUFZX1BSSVZBVEVfRU5DUllQVAkJCSAxMTgKKysjZGVmaW5lIEZJUFNfRl9SU0FfRUFZ X1BVQkxJQ19ERUNSWVBUCQkJIDExOQorKyNkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0VO Q1JZUFQJCQkgMTIwCisrI2RlZmluZSBGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYCQkJ IDEyMQorKyNkZWZpbmUgRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTCQkJIDEyMgorKworKy8qIFJl YXNvbiBjb2Rlcy4gKi8KKysjZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEUJCQkJIDEwMwor KyNkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRV9ESUdFU1QJCQkgMTA0CisrI2RlZmluZSBG SVBTX1JfQ09OVFJBRElDVElOR19FVklERU5DRQkJCSAxMTQKKysjZGVmaW5lIEZJUFNfUl9FWEVf RElHRVNUX0RPRVNfTk9UX01BVENICQkgMTA1CisrI2RlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRf RE9FU19OT1RfTUFUQ0gJCSAxMTAKKysjZGVmaW5lIEZJUFNfUl9GSU5HRVJQUklOVF9ET0VTX05P VF9NQVRDSF9OT05QSUNfUkVMT0NBVEVEIDExMQorKyNkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5U X0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcgMTEyCisrI2RlZmluZSBGSVBTX1JfRklQ U19NT0RFX0FMUkVBRFlfU0VUCQkJIDEwMgorKyNkZWZpbmUgRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVECQkJIDEwNgorKyNkZWZpbmUgRklQU19SX0lOVkFMSURfS0VZX0xFTkdUSAkJCSAxMDkK KysjZGVmaW5lIEZJUFNfUl9LRVlfVE9PX1NIT1JUCQkJCSAxMDgKKysjZGVmaW5lIEZJUFNfUl9O T05fRklQU19NRVRIT0QJCQkJIDEwMAorKyNkZWZpbmUgRklQU19SX1BBSVJXSVNFX1RFU1RfRkFJ TEVECQkJIDEwNworKyNkZWZpbmUgRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SCQkJIDExNQorKyNk ZWZpbmUgRklQU19SX1JTQV9FTkNSWVBUX0VSUk9SCQkJIDExNgorKyNkZWZpbmUgRklQU19SX1NF TEZURVNUX0ZBSUxFRAkJCQkgMTAxCisrI2RlZmluZSBGSVBTX1JfVEVTVF9GQUlMVVJFCQkJCSAx MTcKKysjZGVmaW5lIEZJUFNfUl9VTlNVUFBPUlRFRF9QTEFURk9STQkJCSAxMTMKKysKKysjaWZk ZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC9jcnlwdG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0 by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxm dGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDEz NyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBPcGVuU1NM IFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK KysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRp c3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlv bmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxh eSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyki CisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFBy b2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdy aXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QK KysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysg KiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlv ciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAq CisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRh aW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNz bC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5T U0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9w ZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4K KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrdHlwZWRlZiBzdHJ1Y3QgeworKwljb25zdCBFVlBf TUQgKigqYWxnKSh2b2lkKTsKKysJY29uc3QgY2hhciAqa2V5LCAqaXY7CisrCXVuc2lnbmVkIGNo YXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXTsKKyt9IEhNQUNfS0FUOworKworK3N0YXRpYyBjb25z dCBITUFDX0tBVCB2ZWN0b3JbXSA9IHsKKysgICAgewlFVlBfc2hhMSwKKysJLyogZnJvbSBodHRw Oi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTk4L2ZpcHMtMTk4YS5wZGYg Ki8KKysJIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysJIlNhbXBsZSAjMiIsCisrCXsgMHgwOSww eDIyLDB4ZDMsMHg0MCwweDVmLDB4YWEsMHgzZCwweDE5LAorKwkgIDB4NGYsMHg4MiwweGE0LDB4 NTgsMHgzMCwweDczLDB4N2QsMHg1YywKKysJICAweGM2LDB4YzcsMHg1ZCwweDI0IH0KKysgICAg fSwKKysgICAgewlFVlBfc2hhMjI0LAorKwkvKiBqdXN0IGtlZXAgZXh0ZW5kaW5nIHRoZSBhYm92 ZS4uLiAqLworKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAw eGRkLDB4ZWYsMHgwYSwweDQwLDB4Y2IsMHg3ZCwweDUwLDB4ZmIsCisrCSAgMHg2ZSwweGU2LDB4 Y2UsMHhhMSwweDIwLDB4YmEsMHgyNiwweGFhLAorKwkgIDB4MDgsMHhmMywweDA3LDB4NzUsMHg4 NywweGI4LDB4YWQsMHgxYiwKKysJICAweDhjLDB4OGQsMHgxMiwweGM3IH0KKysgICAgfSwKKysg ICAgewlFVlBfc2hhMjU2LAorKwkiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMy IiwKKysJeyAweGI4LDB4ZjIsMHgwZCwweGI1LDB4NDEsMHhlYSwweDQzLDB4MDksCisrCSAgMHhj YSwweDRlLDB4YTksMHgzOCwweDBjLDB4ZDAsMHhlOCwweDM0LAorKwkgIDB4ZjcsMHgxZiwweGJl LDB4OTEsMHg3NCwweGEyLDB4NjEsMHgzOCwKKysJICAweDBkLDB4YzEsMHg3ZSwweGFlLDB4NmEs MHgzNCwweDUxLDB4ZDkgfQorKyAgICB9LAorKyAgICB7CUVWUF9zaGEzODQsCisrCSIwMTIzNDU2 Nzg5Ojs8PT4/QEFCQyIsCisrCSJTYW1wbGUgIzIiLAorKwl7IDB4MDgsMHhiYywweGIwLDB4ZGEs MHg0OSwweDFlLDB4ODcsMHhhZCwKKysJICAweDlhLDB4MWQsMHg2YSwweGNlLDB4MjMsMHhjNSww eDBiLDB4ZjYsCisrCSAgMHhiNywweDE4LDB4MDYsMHhhNSwweDc3LDB4Y2QsMHg0OSwweDA0LAor KwkgIDB4ODksMHhmMSwweGU2LDB4MjMsMHg0NCwweDUxLDB4NTEsMHg5ZiwKKysJICAweDg1LDB4 NTYsMHg4MCwweDc5LDB4MGMsMHhiZCwweDRkLDB4NTAsCisrCSAgMHhhNCwweDVmLDB4MjksMHhl MywweDkzLDB4ZjAsMHhlOCwweDdmIH0KKysgICAgfSwKKysgICAgewlFVlBfc2hhNTEyLAorKwki MDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKwkiU2FtcGxlICMyIiwKKysJeyAweDgwLDB4OWQsMHg0 NCwweDA1LDB4N2MsMHg1YiwweDk1LDB4NDEsCisrCSAgMHgwNSwweGJkLDB4MDQsMHgxMywweDE2 LDB4ZGIsMHgwZiwweGFjLAorKwkgIDB4NDQsMHhkNSwweGE0LDB4ZDUsMHhkMCwweDg5LDB4MmIs MHhkMCwKKysJICAweDRlLDB4ODYsMHg2NCwweDEyLDB4YzAsMHg5MCwweDc3LDB4NjgsCisrCSAg MHhmMSwweDg3LDB4YjcsMHg3YywweDRmLDB4YWUsMHgyYywweDJmLAorKwkgIDB4MjEsMHhhNSww eGI1LDB4NjUsMHg5YSwweDRmLDB4NGIsMHhhNywKKysJICAweDQ3LDB4MDIsMHhhMywweGRlLDB4 OWIsMHg1MSwweGYxLDB4NDUsCisrCSAgMHhiZCwweDRmLDB4MjUsMHgyNywweDQyLDB4OTgsMHg5 OSwweDA1IH0KKysgICAgfSwKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2htYWMoKQorKyAg ICB7CisrICAgIGludCBuOworKyAgICB1bnNpZ25lZCBpbnQgICAgb3V0bGVuOworKyAgICB1bnNp Z25lZCBjaGFyICAgb3V0W0VWUF9NQVhfTURfU0laRV07CisrICAgIGNvbnN0IEVWUF9NRCAgICpt ZDsKKysgICAgY29uc3QgSE1BQ19LQVQgKnQ7CisrCisrICAgIGZvcihuPTAsdD12ZWN0b3I7IG48 c2l6ZW9mKHZlY3Rvcikvc2l6ZW9mKHZlY3RvclswXSk7IG4rKyx0KyspCisrCXsKKysJbWQgPSAo KnQtPmFsZykoKTsKKysJSE1BQyhtZCx0LT5rZXksc3RybGVuKHQtPmtleSksCisrCQkoY29uc3Qg dW5zaWduZWQgY2hhciAqKXQtPml2LHN0cmxlbih0LT5pdiksCisrCQlvdXQsJm91dGxlbik7Cisr CisrCWlmKG1lbWNtcChvdXQsdC0+a2F2YWwsb3V0bGVuKSkKKysJICAgIHsKKysJICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfSE1BQyxGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJ ICAgIHJldHVybiAwOworKwkgICAgfQorKwl9CisrICAgIHJldHVybiAxOworKyAgICB9CisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jLmZpcHMg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYworLS0tIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAw MCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMJMjAxMC0w My0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsNDEyIEBACisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysg KiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgor KyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAq CisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAor KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgorKyAqCisrICovCisrCisrLyoKKysgKiBUaGlzIGlzIGEgRklQUyBhcHByb3ZlZCBB RVMgUFJORyBiYXNlZCBvbiBBTlNJIFg5LjMxIEEuMi40LgorKyAqLworKworKyNpbmNsdWRlICJl X29zLmgiCisrCisrLyogSWYgd2UgZG9uJ3QgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQs IHN0cnVjdCB0aW1ldmFsIHdvbid0CisrICAgYmUgZGVmaW5lZCBhbmQgZ2V0dGltZW9mZGF5KCkg d29uJ3QgYmUgZGVjbGFyZWQgd2l0aCBzdHJpY3QgY29tcGlsZXJzCisrICAgbGlrZSBERUMgQyBp biBBTlNJIEMgbW9kZS4gICovCisrI2lmbmRlZiBfWE9QRU5fU09VUkNFX0VYVEVOREVECisrI2Rl ZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEKKysjZW5kaWYKKysKKysjaW5jbHVkZSA8b3Bl bnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2lmbmRlZiBPUEVO U1NMX1NZU19XSU4zMgorKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorKyNlbmRpZgorKyNpbmNsdWRl IDxhc3NlcnQuaD4KKysjaWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrIyBpZmRlZiBPUEVOU1NM X1VOSVNURAorKyMgIGluY2x1ZGUgT1BFTlNTTF9VTklTVEQKKysjIGVsc2UKKysjICBpbmNsdWRl IDx1bmlzdGQuaD4KKysjIGVuZGlmCisrI2VuZGlmCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisr I2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKyt2b2lk ICpPUEVOU1NMX3N0ZGVycih2b2lkKTsKKysKKysjZGVmaW5lIEFFU19CTE9DS19MRU5HVEgJMTYK KysKKysKKysvKiBBRVMgRklQUyBQUk5HIGltcGxlbWVudGF0aW9uICovCisrCisrdHlwZWRlZiBz dHJ1Y3QgCisrCXsKKysJaW50IHNlZWRlZDsKKysJaW50IGtleWVkOworKwlpbnQgdGVzdF9tb2Rl OworKwlpbnQgc2Vjb25kOworKwlpbnQgZXJyb3I7CisrCXVuc2lnbmVkIGxvbmcgY291bnRlcjsK KysJQUVTX0tFWSBrczsKKysJaW50IHZwb3M7CisrCS8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBr ZXkgaWYgaXQgZXF1YWxzIHNlZWQgbGVuZ3RoICovCisrCXVuc2lnbmVkIGNoYXIgdG1wX2tleVtB RVNfQkxPQ0tfTEVOR1RIXTsKKysJdW5zaWduZWQgY2hhciBWW0FFU19CTE9DS19MRU5HVEhdOwor Kwl1bnNpZ25lZCBjaGFyIERUW0FFU19CTE9DS19MRU5HVEhdOworKwl1bnNpZ25lZCBjaGFyIGxh c3RbQUVTX0JMT0NLX0xFTkdUSF07CisrCX0gRklQU19QUk5HX0NUWDsKKysKKytzdGF0aWMgRklQ U19QUk5HX0NUWCBzY3R4OworKworK3N0YXRpYyBpbnQgZmlwc19wcm5nX2ZhaWwgPSAwOworKwor K3ZvaWQgRklQU19ybmdfc3RpY2sodm9pZCkKKysJeworKwlmaXBzX3BybmdfZmFpbCA9IDE7Cisr CX0KKysKKyt2b2lkIGZpcHNfcmFuZF9wcm5nX3Jlc2V0KEZJUFNfUFJOR19DVFggKmN0eCkKKysJ eworKwljdHgtPnNlZWRlZCA9IDA7CisrCWN0eC0+a2V5ZWQgPSAwOworKwljdHgtPnRlc3RfbW9k ZSA9IDA7CisrCWN0eC0+Y291bnRlciA9IDA7CisrCWN0eC0+c2Vjb25kID0gMDsKKysJY3R4LT5l cnJvciA9IDA7CisrCWN0eC0+dnBvcyA9IDA7CisrCU9QRU5TU0xfY2xlYW5zZShjdHgtPlYsIEFF U19CTE9DS19MRU5HVEgpOworKwlPUEVOU1NMX2NsZWFuc2UoJmN0eC0+a3MsIHNpemVvZihBRVNf S0VZKSk7CisrCX0KKysJCisrCisrc3RhdGljIGludCBmaXBzX3NldF9wcm5nX2tleShGSVBTX1BS TkdfQ1RYICpjdHgsCisrCQkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0la RV9UIGtleWxlbikKKysJeworKwlGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrCWlmIChrZXlsZW4g IT0gMTYgJiYga2V5bGVuICE9IDI0ICYmIGtleWxlbiAhPSAzMikKKysJCXsKKysJCS8qIGVycm9y OiBpbnZhbGlkIGtleSBzaXplICovCisrCQlyZXR1cm4gMDsKKysJCX0KKysJQUVTX3NldF9lbmNy eXB0X2tleShrZXksIGtleWxlbiA8PCAzLCAmY3R4LT5rcyk7CisrCWlmIChrZXlsZW4gPT0gMTYp CisrCQl7CisrCQltZW1jcHkoY3R4LT50bXBfa2V5LCBrZXksIDE2KTsKKysJCWN0eC0+a2V5ZWQg PSAyOworKwkJfQorKwllbHNlCisrCQljdHgtPmtleWVkID0gMTsKKysJY3R4LT5zZWVkZWQgPSAw OworKwljdHgtPnNlY29uZCA9IDA7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIGludCBm aXBzX3NldF9wcm5nX3NlZWQoRklQU19QUk5HX0NUWCAqY3R4LAorKwkJCWNvbnN0IHVuc2lnbmVk IGNoYXIgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbikKKysJeworKwlpbnQgaTsKKysJ aWYgKCFjdHgtPmtleWVkKQorKwkJcmV0dXJuIDA7CisrCS8qIEluIHRlc3QgbW9kZSBzZWVkIGlz IGp1c3Qgc3VwcGxpZWQgZGF0YSAqLworKwlpZiAoY3R4LT50ZXN0X21vZGUpCisrCQl7CisrCQlp ZiAoc2VlZGxlbiAhPSBBRVNfQkxPQ0tfTEVOR1RIKQorKwkJCXJldHVybiAwOworKwkJbWVtY3B5 KGN0eC0+Viwgc2VlZCwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCQljdHgtPnNlZWRlZCA9IDE7Cisr CQlyZXR1cm4gMTsKKysJCX0KKysJLyogT3V0c2lkZSB0ZXN0IG1vZGUgWE9SIHN1cHBsaWVkIGRh dGEgd2l0aCBleGlzdGluZyBzZWVkICovCisrCWZvciAoaSA9IDA7IGkgPCBzZWVkbGVuOyBpKysp CisrCQl7CisrCQljdHgtPlZbY3R4LT52cG9zKytdIF49IHNlZWRbaV07CisrCQlpZiAoY3R4LT52 cG9zID09IEFFU19CTE9DS19MRU5HVEgpCisrCQkJeworKwkJCWN0eC0+dnBvcyA9IDA7CisrCQkJ LyogU3BlY2lhbCBjYXNlIGlmIGZpcnN0IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxzCisrIAkJ CSAqIGJsb2NrIHNpemUgY2hlY2sga2V5IGFuZCBzZWVkIGRvIG5vdCBtYXRjaC4KKysgCQkJICov IAorKwkJCWlmIChjdHgtPmtleWVkID09IDIpCisrCQkJCXsKKysJCQkJaWYgKCFtZW1jbXAoY3R4 LT50bXBfa2V5LCBjdHgtPlYsIDE2KSkKKysJCQkJCXsKKysJCQkJCVJBTkRlcnIoUkFORF9GX0ZJ UFNfU0VUX1BSTkdfU0VFRCwKKysJCQkJCQlSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENI X0tFWSk7CisrCQkJCQlyZXR1cm4gMDsKKysJCQkJCX0KKysJCQkJT1BFTlNTTF9jbGVhbnNlKGN0 eC0+dG1wX2tleSwgMTYpOworKwkJCQljdHgtPmtleWVkID0gMTsKKysJCQkJfQorKwkJCWN0eC0+ c2VlZGVkID0gMTsKKysJCQl9CisrCQl9CisrCXJldHVybiAxOworKwl9CisrCisraW50IGZpcHNf c2V0X3Rlc3RfbW9kZShGSVBTX1BSTkdfQ1RYICpjdHgpCisrCXsKKysJaWYgKGN0eC0+a2V5ZWQp CisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUsUkFORF9SX1BSTkdf S0VZRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWN0eC0+dGVzdF9tb2RlID0gMTsKKysJcmV0 dXJuIDE7CisrCX0KKysKKytpbnQgRklQU19yYW5kX3Rlc3RfbW9kZSh2b2lkKQorKwl7CisrCXJl dHVybiBmaXBzX3NldF90ZXN0X21vZGUoJnNjdHgpOworKwl9CisrCisraW50IEZJUFNfcmFuZF9z ZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCisrCXsKKysJaWYgKCFzY3R4LnRlc3RfbW9kZSkKKysJ CXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQsUkFORF9SX05PVF9JTl9URVNU X01PREUpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCW1lbWNweShzY3R4LkRULCBkdCwgQUVTX0JM T0NLX0xFTkdUSCk7CisrCXJldHVybiAxOworKwl9CisrCisrc3RhdGljIHZvaWQgZmlwc19nZXRf ZHQoRklQU19QUk5HX0NUWCAqY3R4KQorKyAgICB7CisrI2lmZGVmIE9QRU5TU0xfU1lTX1dJTjMy CisrCUZJTEVUSU1FIGZ0OworKyNlbHNlCisrCXN0cnVjdCB0aW1ldmFsIHR2OworKyNlbmRpZgor Kwl1bnNpZ25lZCBjaGFyICpidWYgPSBjdHgtPkRUOworKworKyNpZm5kZWYgR0VUUElEX0lTX01F QU5JTkdMRVNTCisrCXVuc2lnbmVkIGxvbmcgcGlkOworKyNlbmRpZgorKworKyNpZmRlZiBPUEVO U1NMX1NZU19XSU4zMgorKwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOworKwlidWZbMF0g PSAodW5zaWduZWQgY2hhcikgKGZ0LmR3SGlnaERhdGVUaW1lICYgMHhmZik7CisrCWJ1ZlsxXSA9 ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDgpICYgMHhmZik7CisrCWJ1 ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3SGlnaERhdGVUaW1lID4+IDE2KSAmIDB4ZmYp OworKwlidWZbM10gPSAodW5zaWduZWQgY2hhcikgKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkg JiAweGZmKTsKKysJYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpIChmdC5kd0xvd0RhdGVUaW1lICYg MHhmZik7CisrCWJ1Zls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKGZ0LmR3TG93RGF0ZVRpbWUgPj4g OCkgJiAweGZmKTsKKysJYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dEYXRlVGlt ZSA+PiAxNikgJiAweGZmKTsKKysJYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpICgoZnQuZHdMb3dE YXRlVGltZSA+PiAyNCkgJiAweGZmKTsKKysjZWxzZQorKwlnZXR0aW1lb2ZkYXkoJnR2LE5VTEwp OworKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcikgKHR2LnR2X3NlYyAmIDB4ZmYpOworKwlidWZb MV0gPSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gOCkgJiAweGZmKTsKKysJYnVmWzJd ID0gKHVuc2lnbmVkIGNoYXIpICgodHYudHZfc2VjID4+IDE2KSAmIDB4ZmYpOworKwlidWZbM10g PSAodW5zaWduZWQgY2hhcikgKCh0di50dl9zZWMgPj4gMjQpICYgMHhmZik7CisrCWJ1Zls0XSA9 ICh1bnNpZ25lZCBjaGFyKSAodHYudHZfdXNlYyAmIDB4ZmYpOworKwlidWZbNV0gPSAodW5zaWdu ZWQgY2hhcikgKCh0di50dl91c2VjID4+IDgpICYgMHhmZik7CisrCWJ1Zls2XSA9ICh1bnNpZ25l ZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMTYpICYgMHhmZik7CisrCWJ1Zls3XSA9ICh1bnNpZ25l ZCBjaGFyKSAoKHR2LnR2X3VzZWMgPj4gMjQpICYgMHhmZik7CisrI2VuZGlmCisrCWJ1Zls4XSA9 ICh1bnNpZ25lZCBjaGFyKSAoY3R4LT5jb3VudGVyICYgMHhmZik7CisrCWJ1Zls5XSA9ICh1bnNp Z25lZCBjaGFyKSAoKGN0eC0+Y291bnRlciA+PiA4KSAmIDB4ZmYpOworKwlidWZbMTBdID0gKHVu c2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVyID4+IDE2KSAmIDB4ZmYpOworKwlidWZbMTFdID0g KHVuc2lnbmVkIGNoYXIpICgoY3R4LT5jb3VudGVyID4+IDI0KSAmIDB4ZmYpOworKworKwljdHgt PmNvdW50ZXIrKzsKKysKKysKKysjaWZuZGVmIEdFVFBJRF9JU19NRUFOSU5HTEVTUworKwlwaWQ9 KHVuc2lnbmVkIGxvbmcpZ2V0cGlkKCk7CisrCWJ1ZlsxMl0gPSAodW5zaWduZWQgY2hhcikgKHBp ZCAmIDB4ZmYpOworKwlidWZbMTNdID0gKHVuc2lnbmVkIGNoYXIpICgocGlkID4+IDgpICYgMHhm Zik7CisrCWJ1ZlsxNF0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMTYpICYgMHhmZik7Cisr CWJ1ZlsxNV0gPSAodW5zaWduZWQgY2hhcikgKChwaWQgPj4gMjQpICYgMHhmZik7CisrI2VuZGlm CisrICAgIH0KKysKKytzdGF0aWMgaW50IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICpjdHgsCisr CQkJdW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbikKKysJeworKwl1 bnNpZ25lZCBjaGFyIFJbQUVTX0JMT0NLX0xFTkdUSF0sIElbQUVTX0JMT0NLX0xFTkdUSF07Cisr CXVuc2lnbmVkIGNoYXIgdG1wW0FFU19CTE9DS19MRU5HVEhdOworKwlpbnQgaTsKKysJaWYgKGN0 eC0+ZXJyb3IpCisrCQl7CisrCQlSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkQsUkFORF9SX1BSTkdf RVJST1IpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmICghY3R4LT5rZXllZCkKKysJCXsKKysJ CVJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCxSQU5EX1JfTk9fS0VZX1NFVCk7CisrCQlyZXR1cm4g MDsKKysJCX0KKysJaWYgKCFjdHgtPnNlZWRlZCkKKysJCXsKKysJCVJBTkRlcnIoUkFORF9GX0ZJ UFNfUkFORCxSQU5EX1JfUFJOR19OT1RfU0VFREVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwlm b3IgKDs7KQorKwkJeworKwkJaWYgKCFjdHgtPnRlc3RfbW9kZSkKKysJCQlmaXBzX2dldF9kdChj dHgpOworKwkJQUVTX2VuY3J5cHQoY3R4LT5EVCwgSSwgJmN0eC0+a3MpOworKwkJZm9yIChpID0g MDsgaSA8IEFFU19CTE9DS19MRU5HVEg7IGkrKykKKysJCQl0bXBbaV0gPSBJW2ldIF4gY3R4LT5W W2ldOworKwkJQUVTX2VuY3J5cHQodG1wLCBSLCAmY3R4LT5rcyk7CisrCQlmb3IgKGkgPSAwOyBp IDwgQUVTX0JMT0NLX0xFTkdUSDsgaSsrKQorKwkJCXRtcFtpXSA9IFJbaV0gXiBJW2ldOworKwkJ QUVTX2VuY3J5cHQodG1wLCBjdHgtPlYsICZjdHgtPmtzKTsKKysJCS8qIENvbnRpbnVvdXMgUFJO RyB0ZXN0ICovCisrCQlpZiAoY3R4LT5zZWNvbmQpCisrCQkJeworKwkJCWlmIChmaXBzX3Bybmdf ZmFpbCkKKysJCQkJbWVtY3B5KGN0eC0+bGFzdCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7CisrCQkJ aWYgKCFtZW1jbXAoUiwgY3R4LT5sYXN0LCBBRVNfQkxPQ0tfTEVOR1RIKSkKKysJCQkJeworKwkg ICAgCQkJUkFORGVycihSQU5EX0ZfRklQU19SQU5ELFJBTkRfUl9QUk5HX1NUVUNLKTsKKysJCQkJ Y3R4LT5lcnJvciA9IDE7CisrCQkJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCQkJcmV0 dXJuIDA7CisrCQkJCX0KKysJCQl9CisrCQltZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tf TEVOR1RIKTsKKysJCWlmICghY3R4LT5zZWNvbmQpCisrCQkJeworKwkJCWN0eC0+c2Vjb25kID0g MTsKKysJCQlpZiAoIWN0eC0+dGVzdF9tb2RlKQorKwkJCQljb250aW51ZTsKKysJCQl9CisrCisr CQlpZiAob3V0bGVuIDw9IEFFU19CTE9DS19MRU5HVEgpCisrCQkJeworKwkJCW1lbWNweShvdXQs IFIsIG91dGxlbik7CisrCQkJYnJlYWs7CisrCQkJfQorKworKwkJbWVtY3B5KG91dCwgUiwgQUVT X0JMT0NLX0xFTkdUSCk7CisrCQlvdXQgKz0gQUVTX0JMT0NLX0xFTkdUSDsKKysJCW91dGxlbiAt PSBBRVNfQkxPQ0tfTEVOR1RIOworKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKworKworK2ludCBG SVBTX3JhbmRfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIEZJUFNfUkFORF9TSVpF X1Qga2V5bGVuKQorKwl7CisrCWludCByZXQ7CisrCUNSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tf UkFORCk7CisrCXJldCA9IGZpcHNfc2V0X3Bybmdfa2V5KCZzY3R4LCBrZXksIGtleWxlbik7Cisr CUNSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysJcmV0dXJuIHJldDsKKysJfQor KworK2ludCBGSVBTX3JhbmRfc2VlZChjb25zdCB2b2lkICpzZWVkLCBGSVBTX1JBTkRfU0laRV9U IHNlZWRsZW4pCisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19S QU5EKTsKKysJcmV0ID0gZmlwc19zZXRfcHJuZ19zZWVkKCZzY3R4LCBzZWVkLCBzZWVkbGVuKTsK KysJQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9 CisrCisrCisraW50IEZJUFNfcmFuZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIEZJUFNfUkFO RF9TSVpFX1QgY291bnQpCisrCXsKKysJaW50IHJldDsKKysJQ1JZUFRPX3dfbG9jayhDUllQVE9f TE9DS19SQU5EKTsKKysJcmV0ID0gZmlwc19yYW5kKCZzY3R4LCBvdXQsIGNvdW50KTsKKysJQ1JZ UFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisr aW50IEZJUFNfcmFuZF9zdGF0dXModm9pZCkKKysJeworKwlpbnQgcmV0OworKwlDUllQVE9fcl9s b2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXQgPSBzY3R4LnNlZWRlZDsKKysJQ1JZUFRPX3Jf dW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKwlyZXR1cm4gcmV0OworKwl9CisrCisrdm9pZCBG SVBTX3JhbmRfcmVzZXQodm9pZCkKKysJeworKwlDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JB TkQpOworKwlmaXBzX3JhbmRfcHJuZ19yZXNldCgmc2N0eCk7CisrCUNSWVBUT193X3VubG9jayhD UllQVE9fTE9DS19SQU5EKTsKKysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfZG9fcmFuZF9zZWVk KGNvbnN0IHZvaWQgKnNlZWQsIEZJUFNfUkFORF9TSVpFX1Qgc2VlZGxlbikKKysJeworKwlGSVBT X3JhbmRfc2VlZChzZWVkLCBzZWVkbGVuKTsKKysJfQorKworK3N0YXRpYyB2b2lkIGZpcHNfZG9f cmFuZF9hZGQoY29uc3Qgdm9pZCAqc2VlZCwgRklQU19SQU5EX1NJWkVfVCBzZWVkbGVuLAorKwkJ CQkJZG91YmxlIGFkZF9lbnRyb3B5KQorKwl7CisrCUZJUFNfcmFuZF9zZWVkKHNlZWQsIHNlZWRs ZW4pOworKwl9CisrCisrc3RhdGljIGNvbnN0IFJBTkRfTUVUSE9EIHJhbmRfZmlwc19tZXRoPQor KyAgICB7CisrICAgIGZpcHNfZG9fcmFuZF9zZWVkLAorKyAgICBGSVBTX3JhbmRfYnl0ZXMsCisr ICAgIEZJUFNfcmFuZF9yZXNldCwKKysgICAgZmlwc19kb19yYW5kX2FkZCwKKysgICAgRklQU19y YW5kX2J5dGVzLAorKyAgICBGSVBTX3JhbmRfc3RhdHVzCisrICAgIH07CisrCisrY29uc3QgUkFO RF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9pZCkKKyt7CisrICByZXR1cm4gJnJhbmRfZmlw c19tZXRoOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2Zp cHMvZmlwc19yYW5kLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5o CistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzCTIwMTAtMDMt MzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9maXBzX3JhbmQuaAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAs MCArMSw3NyBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBP cGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmli dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0 CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv d2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRv Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAq ICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMg bWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3Qg ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysg KiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wu b3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVu U1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHBy aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNv bnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNT TCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91 dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0 LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVz dCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJU aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFBy b2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBM SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJ TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg VEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysg KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQ T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpZm5kZWYgSEVBREVS X0ZJUFNfUkFORF9ICisrI2RlZmluZSBIRUFERVJfRklQU19SQU5EX0gKKysKKysjaW5jbHVkZSAi ZGVzLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKyNpZmRlZiAgX19jcGx1c3BsdXMK KytleHRlcm4gIkMiIHsKKysjZW5kaWYKKysKKytpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3Qg dW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbik7CisraW50IEZJUFNf cmFuZF9zZWVkKGNvbnN0IHZvaWQgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pOworK2ludCBG SVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxl bik7CisrCisraW50IEZJUFNfcmFuZF90ZXN0X21vZGUodm9pZCk7Cisrdm9pZCBGSVBTX3JhbmRf cmVzZXQodm9pZCk7CisraW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOwor KworK2ludCBGSVBTX3JhbmRfc3RhdHVzKHZvaWQpOworKworK2NvbnN0IFJBTkRfTUVUSE9EICpG SVBTX3JhbmRfbWV0aG9kKHZvaWQpOworKworKyNpZmRlZiAgX19jcGx1c3BsdXMKKyt9CisrI2Vu ZGlmCisrI2VuZGlmCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBz L2ZpcHNfcmFuZF9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBz X3JhbmRfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5k X3NlbGZ0ZXN0LmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0LmMJMjAxMC0wMy0z MCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMzczIEBACisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy 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 c3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHNfcmFuZC5oPgorKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysKKysKKyt0eXBl ZGVmIHN0cnVjdAorKwl7CisrCXVuc2lnbmVkIGNoYXIgRFRbMTZdOworKwl1bnNpZ25lZCBjaGFy IFZbMTZdOworKwl1bnNpZ25lZCBjaGFyIFJbMTZdOworKwl9IEFFU19QUk5HX1RWOworKworKy8q IFRoZSBmb2xsb3dpbmcgdGVzdCB2ZWN0b3JzIGFyZSB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSBS R05WUyBzcGVjICovCisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9rZXlbMTZdID0K KysJCXsweGYzLDB4YjEsMHg2NiwweDZkLDB4MTMsMHg2MCwweDcyLDB4NDIsCisrCQkgMHhlZCww eDA2LDB4MWMsMHhhYiwweGI4LDB4ZDQsMHg2MiwweDAyfTsKKysKKytzdGF0aWMgQUVTX1BSTkdf VFYgYWVzXzEyOF90dltdID0geworKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIzLDB4 YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhi MCwweGU5LDB4MjIsMHhmOX0sCisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4NTksMHg1MywweDFlLDB4ZDEsMHgzYiww eGIwLDB4YzAsMHg1NSwKKysJCSAweDg0LDB4NzksMHg2NiwweDg1LDB4YzEsMHgyZiwweDc2LDB4 NDF9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4 MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNywweDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgy MiwweGZhfSwKKysJCQkJLyogViAqLworKwkJezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9 LAorKwkJCQkvKiBSICovCisrCQl7MHg3YywweDIyLDB4MmMsMHhmNCwweGNhLDB4OGYsMHhhMiww eDRjLAorKwkJIDB4MWMsMHg5YywweGI2LDB4NDEsMHhhOSwweGYzLDB4MjIsMHgwZH0KKysJfSwK KysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYsMHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4 ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSwweGZiLDB4YjAsMHhlOSwweDIyLDB4ZmJ9LAor KwkJCQkvKiBWICovCisrCQl7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAw LAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8q IFIgKi8KKysJCXsweDhhLDB4YWEsMHgwMCwweDM5LDB4NjYsMHg2NywweDViLDB4ZTUsCisrCQkg MHgyOSwweDE0LDB4MjgsMHg4MSwweGE5LDB4NGQsMHg0ZSwweGM3fQorKwl9LAorKwl7CisrCQkJ CS8qIERUICovCisrCQl7MHhlNiwweGIzLDB4YmUsMHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAor KwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCwweGU5LDB4MjIsMHhmY30sCisrCQkJCS8qIFYg Ki8KKysJCXsweGYwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJ ezB4ODgsMHhkZCwweGE0LDB4NTYsMHgzMCwweDI0LDB4MjMsMHhlNSwKKysJCSAweGY2LDB4OWQs MHhhNSwweDdlLDB4N2IsMHg5NSwweGM3LDB4M2F9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8K KysJCXsweGU2LDB4YjMsMHhiZSwweDc4LDB4MmEsMHgyMywweGZhLDB4NjIsCisrCQkgMHhkNyww eDFkLDB4NGEsMHhmYiwweGIwLDB4ZTksMHgyMiwweGZkfSwKKysJCQkJLyogViAqLworKwkJezB4 ZjgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgwNSwweDI1 LDB4OTIsMHg0NiwweDYxLDB4NzksMHhkMiwweGNiLAorKwkJIDB4NzgsMHhjNCwweDBiLDB4MTQs MHgwYSwweDVhLDB4OWEsMHhjOH0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZTYs MHhiMywweGJlLDB4NzgsMHgyYSwweDIzLDB4ZmEsMHg2MiwKKysJCSAweGQ3LDB4MWQsMHg0YSww eGZiLDB4YjAsMHhlOSwweDIzLDB4Nzd9LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmLDB4ZmYsMHhmZX0sCisrCQkJCS8qIFIgKi8KKysJCXsweDBkLDB4ZDUsMHhhMCwweDM2 LDB4N2EsMHg1OSwweDI2LDB4YmMsCisrCQkgMHg0OCwweGQ5LDB4MzgsMHhiZiwweGYwLDB4ODUs MHg4ZiwweGVhfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhlNiwweGIzLDB4YmUs MHg3OCwweDJhLDB4MjMsMHhmYSwweDYyLAorKwkJIDB4ZDcsMHgxZCwweDRhLDB4ZmIsMHhiMCww eGU5LDB4MjMsMHg3OH0sCisrCQkJCS8qIFYgKi8KKysJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4 ZmYsMHhmZiwweGZmLDB4ZmYsCisrCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhm ZiwweGZmfSwKKysJCQkJLyogUiAqLworKwkJezB4YWUsMHg1MywweDg3LDB4ZWUsMHg4YywweGQ5 LDB4MTIsMHhmNSwKKysJCSAweDczLDB4NTMsMHhhZSwweDAzLDB4ZjksMHhkNSwweDEzLDB4MzN9 CisrCX0sCisrfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMTkyX2tleVsyNF0gPQor KwkJezB4MTUsMHhkOCwweDc4LDB4MGQsMHg2MiwweGQzLDB4MjUsMHg2ZSwKKysJCSAweDQ0LDB4 NjQsMHgxMCwweDEzLDB4NjAsMHgyYiwweGE5LDB4YmMsCisrCQkgMHg0YSwweGZiLDB4Y2EsMHhl YiwweDRjLDB4OGIsMHg5OSwweDNifTsKKysKKytzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzE5Ml90 dltdID0geworKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgw LDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMs MHg0Yn0sCisrCQkJCS8qIFYgKi8KKysJCXsweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCww eDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwK KysJCQkJLyogUiAqLworKwkJezB4MTcsMHgwNywweGQ1LDB4MjgsMHgxOSwweDc5LDB4MWUsMHhl ZiwKKysJCSAweGE1LDB4MGMsMHhiZiwweDI1LDB4ZTUsMHg1NiwweGI0LDB4OTN9CisrCX0sCisr CXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhi LDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhhNCwweDI0LDB4NzgsMHhmMywweDRjfSwKKysJ CQkJLyogViAqLworKwkJezB4YzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwK KysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBS ICovCisrCQl7MHg5MiwweDhkLDB4YmUsMHgwNywweGRkLDB4YzcsMHg1OCwweGMwLAorKwkJIDB4 NmYsMHgzNSwweDQxLDB4OWIsMHgxNywweGM5LDB4YmQsMHg5Yn0KKysJfSwKKysJeworKwkJCQkv KiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKKysJ CSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3OCwweGYzLDB4NGR9LAorKwkJCQkvKiBWICov CisrCQl7MHhlMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsw eGQ1LDB4ZGUsMHhmNCwweDUwLDB4ZjMsMHhiNywweDEwLDB4NGUsCisrCQkgMHhiOCwweGM2LDB4 ZjgsMHhjZiwweGUyLDB4YjEsMHhjYSwweGEyfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisr CQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5 OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHg0ZX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGYw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4Y2UsMHgyOSww eDA4LDB4NDMsMHhmYywweDM0LDB4NDEsMHhlNywKKysJCSAweDQ3LDB4OGYsMHhiMywweDY2LDB4 MmIsMHg0NiwweGIxLDB4YmJ9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweDNmLDB4 ZDgsMHhmZiwweGU4LDB4ODAsMHg2OSwweDhiLDB4YzEsCisrCQkgMHhiZiwweDk5LDB4N2QsMHhh NCwweDI0LDB4NzgsMHhmMywweDRmfSwKKysJCQkJLyogViAqLworKwkJezB4ZjgsMHgwMCwweDAw LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAs MHgwMCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHhiMywweDI2LDB4MGYsMHhmNSww eGQ2LDB4Y2EsMHhhOCwweGJmLAorKwkJIDB4ODksMHhiOCwweDVlLDB4MmYsMHgyMiwweDU2LDB4 OTIsMHgyZn0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4M2YsMHhkOCwweGZmLDB4 ZTgsMHg4MCwweDY5LDB4OGIsMHhjMSwKKysJCSAweGJmLDB4OTksMHg3ZCwweGE0LDB4MjQsMHg3 OCwweGYzLDB4Yzl9LAorKwkJCQkvKiBWICovCisrCQl7MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYs MHhmZX0sCisrCQkJCS8qIFIgKi8KKysJCXsweDA1LDB4ZWIsMHgxOCwweDUyLDB4MzQsMHg0Myww eDAwLDB4NDMsCisrCQkgMHg2ZSwweDVhLDB4YTUsMHhmZSwweDdiLDB4MzIsMHhjNCwweDJkfQor Kwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHgzZiwweGQ4LDB4ZmYsMHhlOCwweDgwLDB4 NjksMHg4YiwweGMxLAorKwkJIDB4YmYsMHg5OSwweDdkLDB4YTQsMHgyNCwweDc4LDB4ZjMsMHhj YX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZm LDB4ZmYsCisrCQkgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmfSwKKysJ CQkJLyogUiAqLworKwkJezB4MTUsMHgzYywweGU4LDB4ZDEsMHgwNCwweGM3LDB4YWQsMHg1MCwK KysJCSAweDBiLDB4ZjAsMHgwNywweDE2LDB4ZTcsMHg1NiwweDdhLDB4ZWF9CisrCX0sCisrfTsK KysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2X2tleVszMl0gPQorKwkJezB4NmQsMHgx NCwweDA2LDB4NmMsMHhiNiwweGQ4LDB4MjEsMHgyZCwKKysJCSAweDgyLDB4OGQsMHhmYSwweGYy LDB4N2EsMHgwMywweGI3LDB4OWYsCisrCQkgMHgwYywweGM3LDB4M2UsMHhjZCwweDc2LDB4ZWIs MHhlZSwweGI1LAorKwkJIDB4MjEsMHgwNSwweDhjLDB4NGYsMHgzMSwweDdhLDB4ODAsMHhiYn07 CisrCisrc3RhdGljIEFFU19QUk5HX1RWIGFlc18yNTZfdHZbXSA9IHsKKysJeworKwkJCQkvKiBE VCAqLworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAw eGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDllLDB4ODh9LAorKwkJCQkvKiBWICovCisr CQl7MHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDM1 LDB4YzcsMHhlZiwweGE3LDB4NzgsMHg0ZCwweDI5LDB4YmMsCisrCQkgMHg4MiwweDc5LDB4OTks MHhmYiwweGQwLDB4YjMsMHgzYiwweDcyfQorKwl9LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7 MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMsMHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSww eDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4OX0sCisrCQkJCS8qIFYgKi8KKysJCXsweGMwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJLyogUiAqLworKwkJezB4NmMsMHhmNCwweDQy LDB4NWQsMHhjNywweDA0LDB4MWEsMHg0MSwKKysJCSAweDI4LDB4MmEsMHg3OCwweGE5LDB4YjAs MHgxMiwweGM0LDB4OTV9CisrCX0sCisrCXsKKysJCQkJLyogRFQgKi8KKysJCXsweGRhLDB4M2Es MHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUsCisrCQkgMHhmMiwweGE5LDB4NGUsMHgzNCww eDc0LDB4OGUsMHg5ZSwweDhhfSwKKysJCQkJLyogViAqLworKwkJezB4ZTAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKysJCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MCwweDAwLDB4MDB9LAorKwkJCQkvKiBSICovCisrCQl7MHgxNiwweDkwLDB4YTQsMHhmZiwweDdi LDB4N2UsMHhiOSwweDMwLAorKwkJIDB4ZGIsMHg2NywweDRiLDB4YWMsMHgyZCwweGUxLDB4ZDEs MHg3NX0KKysJfSwKKysJeworKwkJCQkvKiBEVCAqLworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMs MHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYyLDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSww eDllLDB4OGJ9LAorKwkJCQkvKiBWICovCisrCQl7MHhmMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsMHgwMCwweDAwLAorKwkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgw MH0sCisrCQkJCS8qIFIgKi8KKysJCXsweDE0LDB4NmYsMHhmNSwweDk1LDB4YTEsMHg0NiwweDY1 LDB4MzAsCisrCQkgMHhiYywweDU3LDB4ZTIsMHg0YSwweGY3LDB4NDUsMHg2MiwweDA1fQorKwl9 LAorKwl7CisrCQkJCS8qIERUICovCisrCQl7MHhkYSwweDNhLDB4NDEsMHhlYywweDFkLDB4YTMs MHhiMCwweGQ1LAorKwkJIDB4ZjIsMHhhOSwweDRlLDB4MzQsMHg3NCwweDhlLDB4OWUsMHg4Y30s CisrCQkJCS8qIFYgKi8KKysJCXsweGY4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4 MDAsCisrCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKysJCQkJ LyogUiAqLworKwkJezB4OTYsMHhlMiwweGI0LDB4MWUsMHg2NiwweDVlLDB4MGYsMHhhNCwKKysJ CSAweGM1LDB4Y2QsMHhhMiwweDA3LDB4Y2MsMHhiNywweDk0LDB4NDB9CisrCX0sCisrCXsKKysJ CQkJLyogRFQgKi8KKysJCXsweGRhLDB4M2EsMHg0MSwweGVjLDB4MWQsMHhhMywweGIwLDB4ZDUs CisrCQkgMHhmMiwweGE5LDB4NGUsMHgzNCwweDc0LDB4OGUsMHg5ZiwweDA2fSwKKysJCQkJLyog ViAqLworKwkJezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwKKysJCSAw eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmV9LAorKwkJCQkvKiBSICovCisr CQl7MHg2MSwweGNlLDB4MWQsMHg2YSwweDQ4LDB4NzUsMHg5NywweDI4LAorKwkJIDB4NGIsMHg0 MSwweGRlLDB4MTgsMHg0NCwweDRmLDB4NTYsMHhlY30KKysJfSwKKysJeworKwkJCQkvKiBEVCAq LworKwkJezB4ZGEsMHgzYSwweDQxLDB4ZWMsMHgxZCwweGEzLDB4YjAsMHhkNSwKKysJCSAweGYy LDB4YTksMHg0ZSwweDM0LDB4NzQsMHg4ZSwweDlmLDB4MDd9LAorKwkJCQkvKiBWICovCisrCQl7 MHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLAorKwkJIDB4ZmYsMHhmZiww eGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn0sCisrCQkJCS8qIFIgKi8KKysJCXsweDUyLDB4 ODksMHg1OSwweDc5LDB4MmQsMHhhYSwweDI4LDB4YjMsCisrCQkgMHhiMCwweDhhLDB4M2UsMHg3 MCwweGZhLDB4NzEsMHg1OSwweDg0fQorKwl9LAorK307CisrCisrCisrdm9pZCBGSVBTX2NvcnJ1 cHRfcm5nKCkKKysgICAgeworKyAgICBhZXNfMTkyX3R2WzBdLlZbMF0rKzsKKysgICAgfQorKwor KyNkZWZpbmUgZmlwc19yYW5kX3Rlc3Qoa2V5LCB0dikgXAorKwlkb19yYW5kX3Rlc3Qoa2V5LCBz aXplb2Yga2V5LCB0diwgc2l6ZW9mKHR2KS9zaXplb2YoQUVTX1BSTkdfVFYpKQorKworK3N0YXRp YyBpbnQgZG9fcmFuZF90ZXN0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKKysJCQlB RVNfUFJOR19UViAqdHYsIGludCBudHYpCisrCXsKKysJdW5zaWduZWQgY2hhciBSWzE2XTsKKysJ aW50IGk7CisrCWlmICghRklQU19yYW5kX3NldF9rZXkoa2V5LCBrZXlsZW4pKQorKwkJcmV0dXJu IDA7CisrCWZvciAoaSA9IDA7IGkgPCBudHY7IGkrKykKKysJCXsKKysJCUZJUFNfcmFuZF9zZWVk KHR2W2ldLlYsIDE2KTsKKysJCUZJUFNfcmFuZF9zZXRfZHQodHZbaV0uRFQpOworKwkJRklQU19y YW5kX2J5dGVzKFIsIDE2KTsKKysJCWlmIChtZW1jbXAoUiwgdHZbaV0uUiwgMTYpKQorKwkJCXJl dHVybiAwOworKwkJfQorKwlyZXR1cm4gMTsKKysJfQorKwkKKysKKytpbnQgRklQU19zZWxmdGVz dF9ybmcoKQorKwl7CisrCUZJUFNfcmFuZF9yZXNldCgpOworKwlpZiAoIUZJUFNfcmFuZF90ZXN0 X21vZGUoKSkKKysJCXsKKysJCUZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HLEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOworKwkJcmV0dXJuIDA7CisrCQl9CisrCWlmICghZmlwc19yYW5k X3Rlc3QoYWVzXzEyOF9rZXksYWVzXzEyOF90dikKKysJCXx8ICFmaXBzX3JhbmRfdGVzdChhZXNf MTkyX2tleSwgYWVzXzE5Ml90dikKKysJCXx8ICFmaXBzX3JhbmRfdGVzdChhZXNfMjU2X2tleSwg YWVzXzI1Nl90dikpCisrCQl7CisrCQlGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1JORyxG SVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysJCXJldHVybiAwOworKwkJfQorKwlGSVBTX3JhbmRf cmVzZXQoKTsKKysJcmV0dXJuIDE7CisrCX0KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlw dG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2Zp cHNfcmFuZHRlc3QuYy5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JhbmR0ZXN0LmMJMjAxMC0wMy0zMCAx MDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMjQ4IEBACisrLyogQ29weXJpZ2h0 IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJp Z2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50 YXRpb24gd3JpdHRlbgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysg KiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5l dHNjYXBlcyBTU0wuCisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNp YWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBj b25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICog YXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBS QzQsIFJTQSwKKysgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNv ZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJp YnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0 IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICog CisrICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29w eXJpZ2h0IG5vdGljZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisr ICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3Vs ZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9m IHRoZSBsaWJyYXJ5IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0 dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAo b25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u LgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBv ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5n IGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dy YXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRz b2Z0LmNvbSkiCisrICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91 dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUg bm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55 IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisr ICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNs dWRlIGFuIGFja25vd2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAor KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5E CisrICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRQorKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysg KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF IFBPU1NJQklMSVRZIE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2Ug YW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNp b24gb3IKKysgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGku ZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBh bm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1Ymxp YyBMaWNlbmNlLl0KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAw MyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICog NS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQg Ik9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVz IHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wg UHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29l dmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRw Oi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQg T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF CisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICog Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD RVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBP RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysKKysjaW5jbHVk ZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgor KyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5j bHVkZSA8b3BlbnNzbC9ibi5oPgorKworKyNpbmNsdWRlICJlX29zLmgiCisrCisrI2lmbmRlZiBP UEVOU1NMX0ZJUFMKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorK3sKKysgICAg cHJpbnRmKCJObyBGSVBTIFJBTkQgc3VwcG9ydFxuIik7CisrICAgIHJldHVybigwKTsKKyt9Cisr CisrI2Vsc2UKKysKKysjaW5jbHVkZSAiZmlwc191dGwuaCIKKysKKyt0eXBlZGVmIHN0cnVjdAor Kwl7CisrCXVuc2lnbmVkIGNoYXIgRFRbMTZdOworKwl1bnNpZ25lZCBjaGFyIFZbMTZdOworKwl1 bnNpZ25lZCBjaGFyIFJbMTZdOworKwl9IEFFU19QUk5HX01DVDsKKysKKytzdGF0aWMgdW5zaWdu ZWQgY2hhciBhZXNfMTI4X21jdF9rZXlbMTZdID0KKysJezB4OWYsMHg1YiwweDUxLDB4MjAsMHgw YiwweGYzLDB4MzQsMHhiNSwKKysJIDB4ZDgsMHgyYiwweGU4LDB4YzMsMHg3MiwweDU1LDB4Yzgs MHg0OH07CisrCisrc3RhdGljIEFFU19QUk5HX01DVCBhZXNfMTI4X21jdF90diA9IHsKKysJCQkv KiBEVCAqLworKwl7MHg2MywweDc2LDB4YmIsMHhlNSwweDI5LDB4MDIsMHhiYSwweDNiLAorKwkg MHg2NywweGM5LDB4MjUsMHhmYSwweDcwLDB4MWYsMHgxMSwweGFjfSwKKysJCQkvKiBWICovCisr CXsweDU3LDB4MmMsMHg4ZSwweDc2LDB4ODcsMHgyNiwweDQ3LDB4OTcsCisrCSAweDdlLDB4NzQs MHhmYiwweGRkLDB4YzQsMHg5NSwweDAxLDB4ZDF9LAorKwkJCS8qIFIgKi8KKysJezB4NDgsMHhl OSwweGJkLDB4MGQsMHgwNiwweGVlLDB4MTgsMHhmYiwKKysJIDB4ZTQsMHg1NywweDkwLDB4ZDUs MHhjMywweGZjLDB4OWIsMHg3M30KKyt9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18x OTJfbWN0X2tleVsyNF0gPQorKwl7MHhiNywweDZjLDB4MzQsMHhkMSwweDA5LDB4NjcsMHhhYiww eDczLAorKwkgMHg0ZCwweDVhLDB4ZDUsMHgzNCwweDk4LDB4MTYsMHgwYiwweDkxLAorKwkgMHhi YywweDM1LDB4NTEsMHgxNiwweDZiLDB4YWUsMHg5MywweDhhfTsKKysKKytzdGF0aWMgQUVTX1BS TkdfTUNUIGFlc18xOTJfbWN0X3R2ID0geworKwkJCS8qIERUICovCisrCXsweDg0LDB4Y2UsMHgy MiwweDdkLDB4OTEsMHg1YSwweGEzLDB4YzksCisrCSAweDg0LDB4M2MsMHgwYSwweGIzLDB4YTks MHg2MywweDE1LDB4NTJ9LAorKwkJCS8qIFYgKi8KKysJezB4YjYsMHhhZiwweGU2LDB4OGYsMHg5 OSwweDllLDB4OTAsMHg2NCwKKysJIDB4ZGQsMHhjNywweDdhLDB4YzEsMHhiYiwweDkwLDB4M2Es MHg2ZH0sCisrCQkJLyogUiAqLworKwl7MHhmYywweDg1LDB4NjAsMHg5YSwweDI5LDB4NmYsMHhl ZiwweDIxLAorKwkgMHhkZCwweDg2LDB4MjAsMHgzMiwweDhhLDB4MjksMHg2ZiwweDQ3fQorK307 CisrCisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9tY3Rfa2V5WzMyXSA9CisrCXsweDli LDB4MDUsMHhjOCwweDY4LDB4ZmYsMHg0NywweGY4LDB4M2EsCisrCSAweGE2LDB4M2EsMHhhOCww eGNiLDB4NGUsMHg3MSwweGIyLDB4ZTAsCisrCSAweGI4LDB4N2UsMHhmMSwweDM3LDB4YjYsMHhi NCwweGY2LDB4NmQsCisrCSAweDg2LDB4MzIsMHhmYywweDFmLDB4NWUsMHgxZCwweDFlLDB4NTB9 OworKworK3N0YXRpYyBBRVNfUFJOR19NQ1QgYWVzXzI1Nl9tY3RfdHYgPSB7CisrCQkJLyogRFQg Ki8KKysJezB4MzEsMHg2ZSwweDM1LDB4OWEsMHhiMSwweDQ0LDB4ZjAsMHhlZSwKKysJIDB4NjIs MHg2ZCwweDA0LDB4NDYsMHhlMCwweGEzLDB4OTIsMHg0Y30sCisrCQkJLyogViAqLworKwl7MHg0 ZiwweGNkLDB4YzEsMHg4NywweDgyLDB4MWYsMHg0ZCwweGExLAorKwkgMHgzZSwweDBlLDB4NTYs MHg0NCwweDU5LDB4ZTgsMHg4MywweGNhfSwKKysJCQkvKiBSICovCisrCXsweGM4LDB4ODcsMHhj MiwweDYxLDB4NWIsMHhkMCwweGI5LDB4ZTEsCisrCSAweGU3LDB4ZjMsMHg4YiwweGQ3LDB4NWIs MHhkNSwweGYxLDB4OGR9CisrfTsKKysKKytzdGF0aWMgdm9pZCBkdW1wKGNvbnN0IHVuc2lnbmVk IGNoYXIgKmIsaW50IG4pCisrICAgIHsKKysgICAgd2hpbGUobi0tID4gMCkKKysJeworKwlwcmlu dGYoIiAlMDJ4IiwqYisrKTsKKysJfQorKyAgICB9CisrCisrc3RhdGljIHZvaWQgY29tcGFyZShj b25zdCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsY29uc3QgdW5zaWduZWQgY2hhciAqZXhwZWN0ZWQs CisrCQkgICAgaW50IG4pCisrICAgIHsKKysgICAgaW50IGk7CisrCisrICAgIGZvcihpPTAgOyBp IDwgbiA7ICsraSkKKysJaWYocmVzdWx0W2ldICE9IGV4cGVjdGVkW2ldKQorKwkgICAgeworKwkg ICAgcHV0cygiUmFuZG9tIHRlc3QgZmFpbGVkLCBnb3Q6Iik7CisrCSAgICBkdW1wKHJlc3VsdCxu KTsKKysJICAgIHB1dHMoIlxuICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Iik7CisrCSAgICBkdW1w KGV4cGVjdGVkLG4pOworKwkgICAgcHV0Y2hhcignXG4nKTsKKysJICAgIEVYSVQoMSk7CisrCSAg ICB9CisrICAgIH0KKysKKysKKytzdGF0aWMgdm9pZCBydW5fdGVzdCh1bnNpZ25lZCBjaGFyICpr ZXksIGludCBrZXlsZW4sIEFFU19QUk5HX01DVCAqdHYpCisrICAgIHsKKysgICAgdW5zaWduZWQg Y2hhciBidWZbMTZdLCBkdFsxNl07CisrICAgIGludCBpLCBqOworKyAgICBGSVBTX3JhbmRfcmVz ZXQoKTsKKysgICAgRklQU19yYW5kX3Rlc3RfbW9kZSgpOworKyAgICBGSVBTX3JhbmRfc2V0X2tl eShrZXksIGtleWxlbik7CisrICAgIEZJUFNfcmFuZF9zZWVkKHR2LT5WLCAxNik7CisrICAgIG1l bWNweShkdCwgdHYtPkRULCAxNik7CisrICAgIGZvciAoaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQor Kwl7CisrICAgIAlGSVBTX3JhbmRfc2V0X2R0KGR0KTsKKysJRklQU19yYW5kX2J5dGVzKGJ1Ziwg MTYpOworKwkvKiBJbmNyZW1lbnQgRFQgKi8KKysJZm9yIChqID0gMTU7IGogPj0gMDsgai0tKQor KwkJeworKwkJZHRbal0rKzsKKysJCWlmIChkdFtqXSkKKysJCQlicmVhazsKKysJCX0KKysJfQor KworKyAgICBjb21wYXJlKGJ1Zix0di0+UiwgMTYpOworKyAgICB9CisrCisraW50IG1haW4oKQor Kwl7CisrCXJ1bl90ZXN0KGFlc18xMjhfbWN0X2tleSwgMTYsICZhZXNfMTI4X21jdF90dik7Cisr CXByaW50ZigiRklQUyBQUk5HIHRlc3QgMSBkb25lXG4iKTsKKysJcnVuX3Rlc3QoYWVzXzE5Ml9t Y3Rfa2V5LCAyNCwgJmFlc18xOTJfbWN0X3R2KTsKKysJcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAy IGRvbmVcbiIpOworKwlydW5fdGVzdChhZXNfMjU2X21jdF9rZXksIDMyLCAmYWVzXzI1Nl9tY3Rf dHYpOworKwlwcmludGYoIkZJUFMgUFJORyB0ZXN0IDMgZG9uZVxuIik7CisrCXJldHVybiAwOwor Kwl9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNf cnNhX3NlbGZ0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcnNhX3Nl bGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0 LmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3QuYwkyMDEwLTAzLTMwIDEwOjMzOjQ2 LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw0NDEgQEAKKysvKiA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAq IENvcHlyaWdodCAoYykgMjAwMy0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRz IHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1l dDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp biB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJp YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0 CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu ZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAq IDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug b2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFt ZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVz ZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo aXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9y IHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVA b3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NM IiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVy bWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRp b25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAq ICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRo ZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRI SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycg QU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBE SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAq IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJ Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up CisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs IEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K KysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bGNvbmYuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIHVuc2lnbmVkIGNo YXIgbltdID0KKysiXHgwMFx4QkJceEY4XHgyRlx4MDlceDA2XHg4Mlx4Q0VceDlDXHgyM1x4Mzhc eEFDXHgyQlx4OURceEE4XHg3MSIKKysiXHhGN1x4MzZceDhEXHgwN1x4RUVceEQ0XHgxMFx4NDNc eEE0XHg0MFx4RDZceEI2XHhGMFx4NzRceDU0XHhGNSIKKysiXHgxRlx4QjhceERGXHhCQVx4QUZc eDAzXHg1Q1x4MDJceEFCXHg2MVx4RUFceDQ4XHhDRVx4RUJceDZGXHhDRCIKKysiXHg0OFx4NzZc eEVEXHg1Mlx4MERceDYwXHhFMVx4RUNceDQ2XHgxOVx4NzFceDlEXHg4QVx4NUJceDhCXHg4MCIK KysiXHg3Rlx4QUZceEI4XHhFMFx4QTNceERGXHhDN1x4MzdceDcyXHgzRVx4RTZceEI0XHhCN1x4 RDlceDNBXHgyNSIKKysiXHg4NFx4RUVceDZBXHg2NFx4OURceDA2XHgwOVx4NTNceDc0XHg4OFx4 MzRceEIyXHg0NVx4NDVceDk4XHgzOSIKKysiXHg0RVx4RTBceEFBXHhCMVx4MkRceDdCXHg2MVx4 QTVceDFGXHg1Mlx4N0FceDlBXHg0MVx4RjZceEMxXHg2OCIKKysiXHg3Rlx4RTJceDUzXHg3Mlx4 OThceENBXHgyQVx4OEZceDU5XHg0Nlx4RjhceEU1XHhGRFx4MDlceDFEXHhCRCIKKysiXHhDQiI7 CisrCisrCisrc3RhdGljIGludCBzZXRyc2FrZXkoUlNBICprZXkpCisrICAgIHsKKysgICAgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZVtdID0gIlx4MTEiOworKworKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBkW10gPQorKyJceDAwXHhBNVx4REFceEZDXHg1M1x4NDFceEZBXHhG Mlx4ODlceEM0XHhCOVx4ODhceERCXHgzMFx4QzFceENEIgorKyJceEY4XHgzRlx4MzFceDI1XHgx RVx4MDZceDY4XHhCNFx4MjdceDg0XHg4MVx4MzhceDAxXHg1N1x4OTZceDQxIgorKyJceEIyXHg5 NFx4MTBceEIzXHhDN1x4OTlceDhEXHg2Qlx4QzRceDY1XHg3NFx4NUVceDVDXHgzOVx4MjZceDY5 IgorKyJceEQ2XHg4N1x4MERceEEyXHhDMFx4ODJceEE5XHgzOVx4RTNceDdGXHhEQ1x4QjhceDJF XHhDOVx4M0VceERBIgorKyJceEM5XHg3Rlx4RjNceEFEXHg1OVx4NTBceEFDXHhDRlx4QkNceDEx XHgxQ1x4NzZceEYxXHhBOVx4NTJceDk0IgorKyJceDQ0XHhFNVx4NkFceEFGXHg2OFx4QzVceDZD XHgwOVx4MkNceEQzXHg4RFx4QzNceEJFXHhGNVx4RDJceDBBIgorKyJceDkzXHg5OVx4MjZceEVE XHg0Rlx4NzRceEExXHgzRVx4RERceEZCXHhFMVx4QTFceENFXHhDQ1x4NDhceDk0IgorKyJceEFG XHg5NFx4MjhceEMyXHhCN1x4QjhceDg4XHgzRlx4RTRceDQ2XHgzQVx4NEJceEM4XHg1Qlx4MUNc eEIzIgorKyJceEMxIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcFtdID0K KysiXHgwMFx4RUVceENGXHhBRVx4ODFceEIxXHhCOVx4QjNceEM5XHgwOFx4ODFceDBCXHgxMFx4 QTFceEI1XHg2MCIKKysiXHgwMVx4OTlceEVCXHg5Rlx4NDRceEFFXHhGNFx4RkRceEE0XHg5M1x4 QjhceDFBXHg5RVx4M0RceDg0XHhGNiIKKysiXHgzMlx4MTJceDRFXHhGMFx4MjNceDZFXHg1RFx4 MUVceDNCXHg3RVx4MjhceEZBXHhFN1x4QUFceDA0XHgwQSIKKysiXHgyRFx4NUJceDI1XHgyMVx4 NzZceDQ1XHg5RFx4MUZceDM5XHg3NVx4NDFceEJBXHgyQVx4NThceEZCXHg2NSIKKysiXHg5OSI7 CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHFbXSA9CisrIlx4MDBceEM5XHg3 Rlx4QjFceEYwXHgyN1x4RjRceDUzXHhGNlx4MzRceDEyXHgzM1x4RUFceEFBXHhEMVx4RDkiCisr Ilx4MzVceDNGXHg2Q1x4NDJceEQwXHg4OFx4NjZceEIxXHhEMFx4NUFceDBGXHgyMFx4MzVceDAy XHg4Qlx4OUQiCisrIlx4ODZceDk4XHg0MFx4QjRceDE2XHg2Nlx4QjRceDJFXHg5Mlx4RUFceDBE XHhBM1x4QjRceDMyXHgwNFx4QjUiCisrIlx4Q0ZceENFXHgzM1x4NTJceDUyXHg0RFx4MDRceDE2 XHhBNVx4QTRceDQxXHhFN1x4MDBceEFGXHg0Nlx4MTUiCisrIlx4MDMiOworKworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXAxW10gPQorKyJceDU0XHg0OVx4NENceEE2XHgzRVx4 QkFceDAzXHgzN1x4RTRceEUyXHg0MFx4MjNceEZDXHhENlx4OUFceDVBIgorKyJceEVCXHgwN1x4 RERceERDXHgwMVx4ODNceEE0XHhEMFx4QUNceDlCXHg1NFx4QjBceDUxXHhGMlx4QjFceDNFIgor KyJceEQ5XHg0OVx4MDlceDc1XHhFQVx4QjdceDc0XHgxNFx4RkZceDU5XHhDMVx4RjdceDY5XHgy RVx4OUFceDJFIgorKyJceDIwXHgyQlx4MzhceEZDXHg5MVx4MEFceDQ3XHg0MVx4NzRceEFEXHhD OVx4M0NceDFGXHg2N1x4QzlceDgxIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZG1xMVtdID0KKysiXHg0N1x4MUVceDAyXHg5MFx4RkZceDBBXHhGMFx4NzVceDAzXHg1MVx4 QjdceEY4XHg3OFx4ODZceDRDXHhBOSIKKysiXHg2MVx4QURceEJEXHgzQVx4OEFceDdFXHg5OVx4 MUNceDVDXHgwNVx4NTZceEE5XHg0Q1x4MzFceDQ2XHhBNyIKKysiXHhGOVx4ODBceDNGXHg4Rlx4 NkZceDhBXHhFM1x4NDJceEU5XHgzMVx4RkRceDhBXHhFNFx4N0FceDIyXHgwRCIKKysiXHgxQlx4 OTlceEE0XHg5NVx4ODRceDk4XHgwN1x4RkVceDM5XHhGOVx4MjRceDVBXHg5OFx4MzZceERBXHgz RCI7CisrICAgIAorKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10gPQorKyJc eDAwXHhCMFx4NkNceDRGXHhEQVx4QkJceDYzXHgwMVx4MTlceDhEXHgyNlx4NUJceERCXHhBRVx4 OTRceDIzIgorKyJceEIzXHg4MFx4RjJceDcxXHhGN1x4MzRceDUzXHg4OFx4NTBceDkzXHgwN1x4 N0ZceENEXHgzOVx4RTJceDExIgorKyJceDlGXHhDOVx4ODZceDMyXHgxNVx4NEZceDU4XHg4M1x4 QjFceDY3XHhBOVx4NjdceEJGXHg0MFx4MkJceDRFIgorKyJceDlFXHgyRVx4MEZceDk2XHg1Nlx4 RTZceDk4XHhFQVx4MzZceDY2XHhFRFx4RkJceDI1XHg3OVx4ODBceDM5IgorKyJceEY3IjsKKysK KysgICAga2V5LT5uID0gQk5fYmluMmJuKG4sIHNpemVvZihuKS0xLCBrZXktPm4pOworKyAgICBr ZXktPmUgPSBCTl9iaW4yYm4oZSwgc2l6ZW9mKGUpLTEsIGtleS0+ZSk7CisrICAgIGtleS0+ZCA9 IEJOX2JpbjJibihkLCBzaXplb2YoZCktMSwga2V5LT5kKTsKKysgICAga2V5LT5wID0gQk5fYmlu MmJuKHAsIHNpemVvZihwKS0xLCBrZXktPnApOworKyAgICBrZXktPnEgPSBCTl9iaW4yYm4ocSwg c2l6ZW9mKHEpLTEsIGtleS0+cSk7CisrICAgIGtleS0+ZG1wMSA9IEJOX2JpbjJibihkbXAxLCBz aXplb2YoZG1wMSktMSwga2V5LT5kbXAxKTsKKysgICAga2V5LT5kbXExID0gQk5fYmluMmJuKGRt cTEsIHNpemVvZihkbXExKS0xLCBrZXktPmRtcTEpOworKyAgICBrZXktPmlxbXAgPSBCTl9iaW4y Ym4oaXFtcCwgc2l6ZW9mKGlxbXApLTEsIGtleS0+aXFtcCk7CisrICAgIHJldHVybiAxOworKyAg ICB9CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcnNhKCkKKysgICAgeworKyAgICBuWzBdKys7Cisr ICAgIH0KKysKKysvKiBLbm93biBBbnN3ZXIgVGVzdCAoS0FUKSBkYXRhIGZvciB0aGUgYWJvdmUg UlNBIHByaXZhdGUga2V5IHNpZ25pbmcKKysgKiBrYXRfdGJzLgorKyAqLworKworK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGthdF90YnNbXSA9ICJPcGVuU1NMIEZJUFMgMTQwLTIgUHVibGlj IEtleSBSU0EgS0FUIjsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BT U19TSEExW10gPSB7CisrICAweDJELCAweEFGLCAweDZFLCAweEMyLCAweDk4LCAweEZCLCAweDhB LCAweEExLCAweEI5LCAweDQ2LCAweERBLCAweDBGLAorKyAgMHgwMSwgMHgxRSwgMHgzNywgMHg5 MywgMHhDMiwgMHg1NSwgMHgyNywgMHhFNCwgMHgxRCwgMHhEMiwgMHg5MCwgMHhCQiwKKysgIDB4 RjQsIDB4QkYsIDB4NEEsIDB4NzQsIDB4MzksIDB4NTEsIDB4QkIsIDB4RTgsIDB4MEMsIDB4Qjcs IDB4RjgsIDB4RDMsCisrICAweEQxLCAweERGLCAweEU3LCAweEJFLCAweDgwLCAweDA1LCAweEMz LCAweEI1LCAweEM3LCAweDgzLCAweEQ1LCAweDRDLAorKyAgMHg3RiwgMHg0OSwgMHhGQiwgMHgz RiwgMHgyOSwgMHg5QiwgMHhFMSwgMHgxMiwgMHg1MSwgMHg2MCwgMHhEMCwgMHhBNywKKysgIDB4 MEQsIDB4QTksIDB4MjgsIDB4NTYsIDB4NzMsIDB4RDksIDB4MDcsIDB4RTMsIDB4NUUsIDB4M0Ys IDB4OUIsIDB4RjUsCisrICAweEI2LCAweEYzLCAweEYyLCAweDVFLCAweDc0LCAweEM5LCAweDgz LCAweDgxLCAweDQ3LCAweEYwLCAweEM1LCAweDQ1LAorKyAgMHgwQSwgMHhFOSwgMHg4RSwgMHgz OCwgMHhENywgMHgxOCwgMHhDNiwgMHgyQSwgMHgwRiwgMHhGOCwgMHhCNywgMHgzMSwKKysgIDB4 RDYsIDB4NTUsIDB4RTQsIDB4NjYsIDB4NzgsIDB4ODEsIDB4RDQsIDB4RTYsIDB4REIsIDB4OUYs IDB4QkEsIDB4RTgsCisrICAweDIzLCAweEI1LCAweDdGLCAweERDLCAweDA4LCAweEVBLCAweEQ1 LCAweDI2LCAweDFFLCAweDIwLCAweDI1LCAweDg0LAorKyAgMHgyNiwgMHhDNiwgMHg3OSwgMHhD OSwgMHg5QiwgMHgzRCwgMHg3RSwgMHhBOQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIga2F0X1JTQV9QU1NfU0hBMjI0W10gPSB7CisrICAweDM5LCAweDRBLCAweDZBLCAweDIw LCAweEJDLCAweEU5LCAweDMzLCAweEVELCAweEVGLCAweEM1LCAweDU4LCAweEE3LAorKyAgMHhG RSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5QSwgMHgyQywgMHg4MiwgMHg5OCwgMHgwOCwg MHg5NSwgMHhGQSwKKysgIDB4QjEsIDB4OUUsIDB4RDIsIDB4NTUsIDB4NjEsIDB4ODcsIDB4MjEs IDB4NTksIDB4ODcsIDB4N0IsIDB4MUYsIDB4NTcsCisrICAweDMwLCAweDlELCAweDBELCAweDRB LCAweDA2LCAweEVCLCAweDUyLCAweDM3LCAweDU1LCAweDU0LCAweDFDLCAweDg5LAorKyAgMHg4 MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2NCwgMHg5MCwgMHgyRSwgMHgxNiwgMHhDQywgMHg4Niwg MHgwNSwgMHhFRSwKKysgIDB4QjEsIDB4RTYsIDB4N0IsIDB4QkEsIDB4MTYsIDB4NzUsIDB4MEQs IDB4MEMsIDB4NjQsIDB4MEIsIDB4QUIsIDB4MjIsCisrICAweDE1LCAweDc4LCAweDZCLCAweDZG LCAweEE0LCAweEZCLCAweDc3LCAweDQwLCAweDY0LCAweDYyLCAweEQxLCAweEI1LAorKyAgMHgz NywgMHgxRSwgMHhFMCwgMHgzRCwgMHhBOCwgMHhGOSwgMHhEMiwgMHhCRCwgMHhBQSwgMHgzOCwg MHgyNCwgMHg0OSwKKysgIDB4NTgsIDB4RDIsIDB4NzQsIDB4ODUsIDB4RjQsIDB4QjUsIDB4OTMs IDB4OEUsIDB4RjUsIDB4MDMsIDB4RUEsIDB4MkQsCisrICAweEM4LCAweDUyLCAweEZBLCAweENG LCAweDdFLCAweDM1LCAweEIwLCAweDZBLCAweEFGLCAweDk1LCAweEMwLCAweDAwLAorKyAgMHg1 NCwgMHg3NiwgMHgzRCwgMHgwQywgMHg5QywgMHhCMiwgMHhFRSwgMHhDMAorK307CisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjU2W10gPSB7CisrICAweDZE LCAweDNELCAweEJFLCAweDhGLCAweDYwLCAweDZELCAweDI1LCAweDE0LCAweEYwLCAweDMxLCAw eEUzLCAweDg5LAorKyAgMHgwMCwgMHg5NywgMHhGQSwgMHg5OSwgMHg3MSwgMHgyOCwgMHhFNSwg MHgxMCwgMHgyNSwgMHg5QSwgMHhGMywgMHg4RiwKKysgIDB4N0IsIDB4QzUsIDB4QTgsIDB4NEEs IDB4NzQsIDB4NTEsIDB4MzYsIDB4RTIsIDB4OEQsIDB4N0QsIDB4NzMsIDB4MjgsCisrICAweEMx LCAweDc3LCAweEM2LCAweDI3LCAweDk3LCAweDAwLCAweDhCLCAweDAwLCAweEEzLCAweDk2LCAw eDczLCAweDRFLAorKyAgMHg3RCwgMHgyRSwgMHgyQywgMHgzNCwgMHg2OCwgMHg4QywgMHg4RSwg MHhERiwgMHg5RCwgMHg0OSwgMHg0NywgMHgwNSwKKysgIDB4QUIsIDB4RjUsIDB4MDEsIDB4RDYs IDB4ODEsIDB4NDcsIDB4NzAsIDB4RjUsIDB4MUQsIDB4NkQsIDB4MjYsIDB4QkEsCisrICAweDJG LCAweDdBLCAweDU0LCAweDUzLCAweDRFLCAweEVELCAweDcxLCAweEQ5LCAweDVBLCAweEYzLCAw eERBLCAweEI2LAorKyAgMHgwQiwgMHg0NywgMHgzNCwgMHhBRiwgMHg5MCwgMHhEQywgMHhDOCwg MHhEOSwgMHg2RiwgMHg1NiwgMHhDRCwgMHg5RiwKKysgIDB4MjEsIDB4QjcsIDB4N0UsIDB4QUQs IDB4N0MsIDB4MkYsIDB4NzUsIDB4NTAsIDB4NDcsIDB4MTIsIDB4RTQsIDB4NkQsCisrICAweDVG LCAweEI3LCAweDAxLCAweERGLCAweEMzLCAweDExLCAweDZDLCAweEE5LCAweDlFLCAweDQ5LCAw eEI5LCAweEY2LAorKyAgMHg3MiwgMHhGNCwgMHhGNiwgMHhFRiwgMHg4OCwgMHgxRSwgMHgyRCwg MHgxQworK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hB Mzg0W10gPSB7CisrICAweDQwLCAweEZCLCAweEExLCAweDIxLCAweEY0LCAweEIyLCAweDQwLCAw eDlBLCAweEI0LCAweDMxLCAweEE4LCAweEYyLAorKyAgMHhFQywgMHgxQywgMHhDNCwgMHhDOCwg MHg3QywgMHgyMiwgMHg2NSwgMHg5QywgMHg1NywgMHg0NSwgMHhDRCwgMHg1RSwKKysgIDB4ODYs IDB4MDAsIDB4RjcsIDB4MjUsIDB4NzgsIDB4REUsIDB4REMsIDB4N0EsIDB4NzEsIDB4NDQsIDB4 OUEsIDB4Q0QsCisrICAweEFBLCAweDI1LCAweEY0LCAweEIyLCAweEZDLCAweEYwLCAweDc1LCAw eEQ5LCAweDJGLCAweDc4LCAweDIzLCAweDdGLAorKyAgMHg2RiwgMHgwMiwgMHhFRiwgMHhDMSwg MHhBRiwgMHhBNiwgMHgyOCwgMHgxNiwgMHgzMSwgMHhEQywgMHg0MiwgMHg2QywKKysgIDB4QjIs IDB4NDQsIDB4RTUsIDB4NEQsIDB4NjYsIDB4QTIsIDB4RTYsIDB4NzEsIDB4RjMsIDB4QUMsIDB4 NEYsIDB4RkIsCisrICAweDkxLCAweENBLCAweEY1LCAweDcwLCAweEVGLCAweDZCLCAweDlELCAw eEE0LCAweEVGLCAweEQ5LCAweDNELCAweDJGLAorKyAgMHgzQSwgMHhCRSwgMHg4OSwgMHgzOCwg MHg1OSwgMHgwMSwgMHhCQSwgMHhEQSwgMHgzMiwgMHhBRCwgMHg0MiwgMHg4OSwKKysgIDB4OTgs IDB4OEIsIDB4MzksIDB4NDQsIDB4RjAsIDB4RkMsIDB4MzgsIDB4QUMsIDB4ODcsIDB4MUYsIDB4 Q0EsIDB4NkYsCisrICAweDQ4LCAweEY2LCAweEFFLCAweEQ3LCAweDQ1LCAweEVFLCAweEFFLCAw eDg4LCAweDBFLCAweDYwLCAweEY0LCAweDU1LAorKyAgMHg0OCwgMHg0NCwgMHhFRSwgMHgxRiwg MHg5MCwgMHgxOCwgMHg0QiwgMHhGMQorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIga2F0X1JTQV9QU1NfU0hBNTEyW10gPSB7CisrICAweDA3LCAweDFFLCAweEQ4LCAweEQ1LCAw eDA1LCAweEU4LCAweEU2LCAweEU2LCAweDU3LCAweEFFLCAweDYzLCAweDhDLAorKyAgMHhDNiwg MHg4MywgMHhCNywgMHhBMCwgMHg1OSwgMHhCQiwgMHhGMiwgMHhDNiwgMHg4RiwgMHgxMiwgMHg1 MywgMHg5QSwKKysgIDB4OUIsIDB4NTQsIDB4OUUsIDB4QjMsIDB4QzEsIDB4MUQsIDB4MjMsIDB4 NEQsIDB4NTEsIDB4RUQsIDB4OUUsIDB4REQsCisrICAweDRCLCAweEYzLCAweDQ2LCAweDlCLCAw eDZCLCAweEY2LCAweDdDLCAweDI0LCAweDYwLCAweDc5LCAweDIzLCAweDM5LAorKyAgMHgwMSwg MHgxQywgMHg1MSwgMHhDQiwgMHhEOCwgMHhFOSwgMHg5QSwgMHgwMSwgMHg2NywgMHg1RiwgMHhG RSwgMHhENywKKysgIDB4N0MsIDB4RTMsIDB4N0YsIDB4RUQsIDB4REIsIDB4ODcsIDB4QkIsIDB4 RjAsIDB4M0QsIDB4NzgsIDB4NTUsIDB4NjEsCisrICAweDU3LCAweEUzLCAweDBGLCAweEUzLCAw eEQyLCAweDlELCAweDBDLCAweDJBLCAweDIwLCAweEIwLCAweDg1LCAweDEzLAorKyAgMHhDNSwg MHg0NywgMHgzNCwgMHgwRCwgMHgzMiwgMHgxNSwgMHhDOCwgMHhBRSwgMHg5QSwgMHg2QSwgMHgz OSwgMHg2MywKKysgIDB4MkQsIDB4NjAsIDB4RjUsIDB4NEMsIDB4REYsIDB4OEEsIDB4NDgsIDB4 NEIsIDB4QkYsIDB4RjQsIDB4QTgsIDB4RkUsCisrICAweDc2LCAweEYyLCAweDMyLCAweDFCLCAw eDlDLCAweDdDLCAweENBLCAweEZFLCAweDdGLCAweDgwLCAweEMyLCAweDg4LAorKyAgMHg1Qywg MHg5NywgMHg3MCwgMHhCNCwgMHgyNiwgMHhDOSwgMHgxNCwgMHg4QgorK307CisrCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEExW10gPSB7CisrICAweDcxLCAweEVFLCAw eDFBLCAweEMwLCAweEZFLCAweDAxLCAweDkzLCAweDU0LCAweDc5LCAweDVDLCAweEYyLCAweDRD LAorKyAgMHg0QSwgMHhGRCwgMHgxQSwgMHgwNSwgMHg4RiwgMHg2NCwgMHhCMSwgMHg2RCwgMHg2 MSwgMHgzMywgMHg4RCwgMHg5QiwKKysgIDB4RTcsIDB4RkQsIDB4NjAsIDB4QTMsIDB4ODMsIDB4 QjUsIDB4QTMsIDB4NTEsIDB4NTUsIDB4NzcsIDB4OTAsIDB4Q0YsCisrICAweERDLCAweDIyLCAw eDM3LCAweDhFLCAweEQwLCAweEUxLCAweEFFLCAweDA5LCAweEUzLCAweDNELCAweDFFLCAweEY4 LAorKyAgMHg4MCwgMHhEMSwgMHg4QiwgMHhDMiwgMHhFQywgMHgwQSwgMHhENywgMHg2QiwgMHg4 OCwgMHg4QiwgMHg4QiwgMHhBMSwKKysgIDB4MjAsIDB4MjIsIDB4QkUsIDB4NTksIDB4NUIsIDB4 RTAsIDB4MjMsIDB4MjQsIDB4QTEsIDB4NDksIDB4MzAsIDB4QkEsCisrICAweEE5LCAweDlFLCAw eEU4LCAweEIxLCAweDhBLCAweDYyLCAweDE2LCAweEJGLCAweDRFLCAweENBLCAweDJFLCAweDRF LAorKyAgMHhCQywgMHgyOSwgMHhBOCwgMHg2NywgMHgxMywgMHhCNywgMHg5RiwgMHgxRCwgMHgw NCwgMHg0NCwgMHhFNSwgMHg1RiwKKysgIDB4MzUsIDB4MDcsIDB4MTEsIDB4QkMsIDB4RUQsIDB4 MTksIDB4MzcsIDB4MjEsIDB4Q0YsIDB4MjMsIDB4NDgsIDB4MUYsCisrICAweDcyLCAweDA1LCAw eERFLCAweEU2LCAweEU4LCAweDdGLCAweDMzLCAweDhBLCAweDc2LCAweDRCLCAweDJGLCAweDk1 LAorKyAgMHhERiwgMHhGMSwgMHg1RiwgMHg4NCwgMHg4MCwgMHhEOSwgMHg0NiwgMHhCNAorK307 CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEEyMjRbXSA9IHsKKysg IDB4NjIsIDB4QUEsIDB4NzksIDB4QTksIDB4MTgsIDB4MEUsIDB4NUYsIDB4OEMsIDB4QkIsIDB4 QjcsIDB4MTUsIDB4RjksCisrICAweDI1LCAweEJCLCAweEZBLCAweEQ0LCAweDNBLCAweDM0LCAw eEVELCAweDlFLCAweEEwLCAweEE5LCAweDE4LCAweDhELAorKyAgMHg1QiwgMHg1NSwgMHg5QSwg MHg3RSwgMHgxRSwgMHgwOCwgMHgwOCwgMHg2MCwgMHhDNSwgMHgxQSwgMHhDNSwgMHg4OSwKKysg IDB4MDgsIDB4RTIsIDB4MUIsIDB4QkQsIDB4NjIsIDB4NTAsIDB4MTcsIDB4NzYsIDB4MzAsIDB4 MkMsIDB4OUUsIDB4Q0QsCisrICAweEE0LCAweDAyLCAweEFELCAweEIxLCAweDZELCAweDQ0LCAw eDZELCAweEQ1LCAweEM2LCAweDQ1LCAweDQxLCAweEU1LAorKyAgMHhFRSwgMHgxRiwgMHg4RCwg MHg3RSwgMHgwOCwgMHgxNiwgMHhBNiwgMHhFMSwgMHg1RSwgMHgwQiwgMHhBOSwgMHhDQywKKysg IDB4REIsIDB4NTksIDB4NTUsIDB4ODcsIDB4MDksIDB4MjUsIDB4NzAsIDB4ODYsIDB4ODQsIDB4 MDIsIDB4QzYsIDB4M0IsCisrICAweDBCLCAweDQ0LCAweDRDLCAweDQ2LCAweDk1LCAweEY0LCAw eEY4LCAweDVBLCAweDkxLCAweDI4LCAweDNFLCAweEIyLAorKyAgMHg1OCwgMHgyRSwgMHgwNiwg MHg0NSwgMHg0OSwgMHhFMCwgMHg5MiwgMHhFMiwgMHhDMCwgMHg2NiwgMHhFNiwgMHgzNSwKKysg IDB4RDksIDB4NzksIDB4N0YsIDB4MTcsIDB4NUUsIDB4MDIsIDB4NzMsIDB4MDQsIDB4NzcsIDB4 ODIsIDB4RTYsIDB4REMsCisrICAweDQwLCAweDIxLCAweDg5LCAweDhCLCAweDM3LCAweDNFLCAw eDFFLCAweDhECisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1NI QTI1NltdID0geworKyAgMHgwRCwgMHg1NSwgMHhFMiwgMHhBQSwgMHg4MSwgMHhEQiwgMHg4RSwg MHg4MiwgMHgwNSwgMHgxNywgMHhBNSwgMHgyMywKKysgIDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYs IDB4RkIsIDB4OEMsIDB4RDAsIDB4ODEsIDB4MjAsIDB4N0IsIDB4QUEsIDB4MjMsCisrICAweDky LCAweDg3LCAweDhDLCAweEQxLCAweDUzLCAweDg1LCAweDE2LCAweERDLCAweEJFLCAweEFELCAw eDZGLCAweDM1LAorKyAgMHg5OCwgMHgyRCwgMHg2OSwgMHg4NCwgMHhCRiwgMHhEOSwgMHg4QSwg MHgwMSwgMHgxNywgMHg1OCwgMHhCMiwgMHg2RSwKKysgIDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAs IDB4RjEsIDB4RkIsIDB4NTEsIDB4RTgsIDB4NkEsIDB4OTAsIDB4MkQsIDB4MTgsCisrICAweDBF LCAweEMwLCAweDkwLCAweDEwLCAweDI0LCAweEE5LCAweDFELCAweEIzLCAweDU4LCAweDdBLCAw eDkxLCAweDMwLAorKyAgMHhCRSwgMHgyMiwgMHhDNywgMHhEMywgMHhFQywgMHhDMywgMHgwOSwg MHg1RCwgMHhCRiwgMHhFMiwgMHg4MCwgMHgzQSwKKysgIDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMs IDB4RDEsIDB4RTksIDB4RjAsIDB4NUMsIDB4REUsIDB4ODEsIDB4QTYsIDB4MzgsCisrICAweEI4 LCAweDQyLCAweEJCLCAweDg2LCAweEM1LCAweDlELCAweENFLCAweDdDLCAweDJDLCAweEVFLCAw eEQxLCAweERBLAorKyAgMHgyNywgMHg0OCwgMHgyQiwgMHhGNSwgMHhBQiwgMHhCOSwgMHhGNywg MHg4MCwgMHhEMSwgMHg5MCwgMHgyNywgMHg5MCwKKysgIDB4QkQsIDB4NDQsIDB4OTcsIDB4NjAs IDB4Q0QsIDB4NTcsIDB4QzAsIDB4N0EKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfU0hBMzg0W10gPSB7CisrICAweDFELCAweEUzLCAweDZBLCAweERELCAweDI3 LCAweDRDLCAweEMwLCAweEE1LCAweDI3LCAweEVGLCAweEU2LCAweDFGLAorKyAgMHhEMiwgMHg5 MSwgMHg2OCwgMHg1OSwgMHgwNCwgMHhBRSwgMHhCRCwgMHg5OSwgMHg2MywgMHg1NiwgMHg0Nywg MHhDNywKKysgIDB4NkYsIDB4MjIsIDB4MTYsIDB4NDgsIDB4RDAsIDB4RjksIDB4MTgsIDB4QTks IDB4Q0EsIDB4RkEsIDB4NUQsIDB4NUMsCisrICAweEE3LCAweDY1LCAweDUyLCAweDhBLCAweEM4 LCAweDQ0LCAweDdFLCAweDg2LCAweDVELCAweEE5LCAweEE2LCAweDU1LAorKyAgMHg2NSwgMHgz RSwgMHhEOSwgMHgyRCwgMHgwMiwgMHgzOCwgMHhBOCwgMHg3OSwgMHgyOCwgMHg3RiwgMHhCNiwg MHhDRiwKKysgIDB4ODIsIDB4REQsIDB4N0UsIDB4NTUsIDB4RTEsIDB4QjEsIDB4QkMsIDB4RTIs IDB4MTksIDB4MkIsIDB4MzAsIDB4QzIsCisrICAweDFCLCAweDJCLCAweEIwLCAweDgyLCAweDQ2 LCAweEFDLCAweDRCLCAweEQxLCAweEUyLCAweDdELCAweEVCLCAweDhDLAorKyAgMHhGRiwgMHg5 NSwgMHhFOSwgMHg2QSwgMHgxQywgMHgzRCwgMHg0RCwgMHhCRiwgMHg4RiwgMHg4QiwgMHg5Qywg MHhDRCwKKysgIDB4RUEsIDB4ODUsIDB4RUUsIDB4MDAsIDB4REMsIDB4MUMsIDB4QTcsIDB4RUIs IDB4RDAsIDB4OEYsIDB4OTksIDB4RjEsCisrICAweDE2LCAweDI4LCAweDI0LCAweDY0LCAweDA0 LCAweDM5LCAweDJELCAweDU4LCAweDFFLCAweDM3LCAweERDLCAweDA0LAorKyAgMHhCRCwgMHgz MSwgMHhBMiwgMHgyRiwgMHhCMywgMHgzNSwgMHg1NiwgMHhCRgorK307CisrCisrc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEE1MTJbXSA9IHsKKysgIDB4NjksIDB4NTIsIDB4 MUIsIDB4NTEsIDB4NUUsIDB4MDYsIDB4Q0EsIDB4OUIsIDB4MTYsIDB4NTEsIDB4NUQsIDB4Q0Ys CisrICAweDQ5LCAweDI1LCAweDRBLCAweEExLCAweDZBLCAweDc3LCAweDRDLCAweDM2LCAweDQw LCAweEY4LCAweEIyLCAweDlBLAorKyAgMHgxNSwgMHhFQSwgMHg1QywgMHhFNSwgMHhFNiwgMHg4 MiwgMHhFMCwgMHg4NiwgMHg4MiwgMHg2QiwgMHgzMiwgMHhGMSwKKysgIDB4MDQsIDB4QzEsIDB4 NUEsIDB4MUEsIDB4RUQsIDB4MUUsIDB4OUEsIDB4QjYsIDB4NEMsIDB4NTQsIDB4OUYsIDB4RDgs CisrICAweDhELCAweENDLCAweEFDLCAweDhBLCAweEJCLCAweDlDLCAweDgyLCAweDNGLCAweEE2 LCAweDUzLCAweDYyLCAweEI1LAorKyAgMHg4MCwgMHhFMiwgMHhCQywgMHhERCwgMHg2NywgMHgy QiwgMHhEOSwgMHgzRiwgMHhFNCwgMHg3NSwgMHg5MiwgMHg2QiwKKysgIDB4QUYsIDB4NjIsIDB4 N0MsIDB4NTIsIDB4RjAsIDB4RUUsIDB4MzMsIDB4REYsIDB4MUIsIDB4MUQsIDB4NDcsIDB4RTYs CisrICAweDU5LCAweDU2LCAweEE1LCAweEI5LCAweDVDLCAweEU2LCAweDc3LCAweDc4LCAweDE2 LCAweDYzLCAweDg0LCAweDA1LAorKyAgMHg2RiwgMHgwRSwgMHgyQiwgMHgzMSwgMHg5RCwgMHhG NywgMHg3RiwgMHhCMiwgMHg2NCwgMHg3MSwgMHhFMCwgMHgyRCwKKysgIDB4M0UsIDB4NjIsIDB4 Q0UsIDB4QjUsIDB4M0YsIDB4ODgsIDB4REYsIDB4MkQsIDB4QUIsIDB4OTgsIDB4NjUsIDB4OTEs CisrICAweERGLCAweDcwLCAweDE0LCAweEE1LCAweDNGLCAweDM2LCAweEFCLCAweDg0CisrfTsK KysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMVtdID0gewor KyAgMHg4NiwgMHhCNCwgMHgxOCwgMHhCQSwgMHhEMSwgMHg4MCwgMHhCNiwgMHg3QywgMHg0Miwg MHg0NSwgMHg0RCwgMHhERiwKKysgIDB4RTksIDB4MkQsIDB4RTEsIDB4ODMsIDB4NUYsIDB4QjUs IDB4MkYsIDB4QzksIDB4Q0QsIDB4QzQsIDB4QjIsIDB4NzUsCisrICAweDgwLCAweEE0LCAweEYx LCAweDRBLCAweEU3LCAweDgzLCAweDEyLCAweDFFLCAweDFFLCAweDE0LCAweEI4LCAweEFDLAor KyAgMHgzNSwgMHhFMiwgMHhBQSwgMHgwQiwgMHg1QywgMHhGOCwgMHgzOCwgMHg0RCwgMHgwNCwg MHhFRSwgMHhBOSwgMHg5NywKKysgIDB4NzAsIDB4RkIsIDB4NUUsIDB4RTcsIDB4QjcsIDB4RTMs IDB4NjIsIDB4MjMsIDB4NEIsIDB4MzgsIDB4QkUsIDB4RDYsCisrICAweDUzLCAweDE1LCAweEY3 LCAweERGLCAweDg3LCAweEI0LCAweDBFLCAweENDLCAweEIxLCAweDFBLCAweDExLCAweDE5LAor KyAgMHhFRSwgMHg1MSwgMHhDQywgMHg5MiwgMHhERCwgMHhCQywgMHg2MywgMHgyOSwgMHg2Mywg MHgwQywgMHg1OSwgMHhENywKKysgIDB4NkYsIDB4NEMsIDB4M0MsIDB4MzcsIDB4NUIsIDB4Mzcs IDB4MDMsIDB4NjEsIDB4N0QsIDB4MjQsIDB4MUMsIDB4OTksCisrICAweDQ4LCAweEFGLCAweDgy LCAweEZFLCAweDMyLCAweDQxLCAweDlCLCAweEIyLCAweERCLCAweEVBLCAweEVELCAweDc2LAor KyAgMHg4RSwgMHg2RSwgMHhDQSwgMHg3RSwgMHg0RSwgMHgxNCwgMHhCQSwgMHgzMCwgMHg4NCwg MHgxQywgMHhCMywgMHg2NywKKysgIDB4QTMsIDB4MjksIDB4ODAsIDB4NzAsIDB4NTQsIDB4Njgs IDB4N0QsIDB4NDkKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff WDkzMV9TSEEyNTZbXSA9IHsKKysgIDB4N0UsIDB4QTIsIDB4NzcsIDB4RkUsIDB4QjgsIDB4NTQs IDB4OEEsIDB4QzcsIDB4N0YsIDB4NjQsIDB4NTQsIDB4ODksCisrICAweEU1LCAweDUyLCAweDE1 LCAweDhFLCAweDUyLCAweDk2LCAweDRFLCAweEE2LCAweDU4LCAweDkyLCAweDFDLCAweERELAor KyAgMHhFQSwgMHhBMiwgMHgyRCwgMHg1QywgMHhEMSwgMHg2MiwgMHgwMCwgMHg0OSwgMHgwNSwg MHg5NSwgMHg3MywgMHhDRiwKKysgIDB4MTYsIDB4NzYsIDB4NjgsIDB4RjYsIDB4QzYsIDB4NUUs IDB4ODAsIDB4QjgsIDB4QjgsIDB4N0IsIDB4QzgsIDB4OUIsCisrICAweEM2LCAweDUzLCAweDg4 LCAweDI2LCAweDIwLCAweDg4LCAweDczLCAweEI2LCAweDEzLCAweEI4LCAweEYwLCAweDRCLAor KyAgMHgwMCwgMHg4NSwgMHhGMywgMHhERCwgMHgwNywgMHg1MCwgMHhFQiwgMHgyMCwgMHhDNCwg MHgzOCwgMHgwRSwgMHg5OCwKKysgIDB4QUQsIDB4NEUsIDB4NDksIDB4MkMsIDB4RDcsIDB4NjUs IDB4QTUsIDB4MTksIDB4MEUsIDB4NTksIDB4MDEsIDB4RUMsCisrICAweDdFLCAweDc1LCAweDg5 LCAweDY5LCAweDJFLCAweDYzLCAweDc2LCAweDg1LCAweDQ2LCAweDhELCAweEEwLCAweDhDLAor KyAgMHgzMywgMHgxRCwgMHg4MiwgMHg4QywgMHgwMywgMHhFQSwgMHg2OSwgMHg4OCwgMHgzNSwg MHhBMSwgMHg0MiwgMHhCRCwKKysgIDB4MjEsIDB4RUQsIDB4OEQsIDB4QkMsIDB4QkMsIDB4REIs IDB4MzAsIDB4RkYsIDB4ODYsIDB4RjAsIDB4NUIsIDB4REMsCisrICAweEUzLCAweEUyLCAweEU4 LCAweDBBLCAweDBBLCAweDI5LCAweDk0LCAweDgwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBMzg0W10gPSB7CisrICAweDVDLCAweDdELCAweDk2 LCAweDM1LCAweEVDLCAweDdFLCAweDExLCAweDM4LCAweEJCLCAweDdCLCAweEVDLCAweDdCLAor KyAgMHhGMiwgMHg4MiwgMHg4RSwgMHg5OSwgMHhCRCwgMHhFRiwgMHhEOCwgMHhBRSwgMHhENywg MHgzOSwgMHgzNywgMHhDQiwKKysgIDB4RTYsIDB4NEYsIDB4NUUsIDB4MEEsIDB4MTMsIDB4RTQs IDB4MkUsIDB4NDAsIDB4QjksIDB4QkUsIDB4MkUsIDB4RTMsCisrICAweEVGLCAweDc4LCAweDgz LCAweDE4LCAweDQ0LCAweDM1LCAweDlDLCAweDhFLCAweEQ3LCAweDRBLCAweDYzLCAweEY2LAor KyAgMHg1NywgMHhDMiwgMHhCMCwgMHgwOCwgMHg1MSwgMHg3MywgMHhDRiwgMHhDQSwgMHg5OSwg MHg2NiwgMHhFRSwgMHgzMSwKKysgIDB4RDgsIDB4NjksIDB4RTksIDB4QUIsIDB4MTMsIDB4Mjcs IDB4N0IsIDB4NDEsIDB4MUUsIDB4NkQsIDB4OEQsIDB4RjEsCisrICAweDNFLCAweDlDLCAweDM1 LCAweDk1LCAweDU4LCAweERELCAweDJCLCAweEQ1LCAweEEwLCAweDYwLCAweDQxLCAweDc5LAor KyAgMHgyNCwgMHgyMiwgMHhFNCwgMHhCNywgMHhCRiwgMHg0NywgMHg1MywgMHhGNiwgMHgzNCwg MHhENSwgMHg3QywgMHhGRiwKKysgIDB4MEUsIDB4MDksIDB4RUUsIDB4MkUsIDB4RTIsIDB4Mzcs IDB4QjksIDB4REUsIDB4QzUsIDB4MTIsIDB4NDQsIDB4MzUsCisrICAweEVGLCAweDAxLCAweEU2 LCAweDVFLCAweDM5LCAweDMxLCAweDJELCAweDcxLCAweEE1LCAweERDLCAweEM2LCAweDZELAor KyAgMHhFMiwgMHhDRCwgMHg4NSwgMHhEQiwgMHg3MywgMHg4MiwgMHg2NSwgMHgyOAorK307Cisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTUxMltdID0gewor KyAgMHhBNiwgMHg2NSwgMHhBMiwgMHg3NywgMHg0RiwgMHhCMywgMHg4NiwgMHhDQiwgMHg2NCwg MHgzQSwgMHhDMSwgMHg2MywKKysgIDB4RkMsIDB4QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4Nzks IDB4REQsIDB4NEIsIDB4RTEsIDB4RDksIDB4REEsIDB4QUMsCisrICAweEU3LCAweDQ3LCAweDA5 LCAweEIyLCAweDExLCAweDRCLCAweDhBLCAweEFBLCAweDA1LCAweDlFLCAweDc3LCAweEQ3LAor KyAgMHgzQSwgMHhCRCwgMHg1RSwgMHg1MywgMHgwOSwgMHg0QSwgMHhFNiwgMHgwRiwgMHg1RSwg MHhGOSwgMHgxNCwgMHgyOCwKKysgIDB4QTAsIDB4OTksIDB4NzQsIDB4NjQsIDB4NzAsIDB4NEUs IDB4RjIsIDB4RTMsIDB4RkEsIDB4QzcsIDB4RjgsIDB4QzUsCisrICAweDZFLCAweDJCLCAweDc5 LCAweDk2LCAweDBELCAweDBDLCAweEM4LCAweDEwLCAweDM0LCAweDUzLCAweEQyLCAweEFGLAor KyAgMHgxNywgMHgwRSwgMHhFMCwgMHhCRiwgMHg3OSwgMHhGNiwgMHgwNCwgMHg3MiwgMHgxMCwg MHhFMCwgMHhGNiwgMHhEMCwKKysgIDB4Q0UsIDB4OEEsIDB4NkYsIDB4QTEsIDB4OTUsIDB4ODks IDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYsIDB4MDksCisrICAweDlGLCAweDA5LCAweENB LCAweDg0LCAweDE1LCAweDg1LCAweEUwLCAweEVELCAweDA0LCAweDJELCAweEZCLCAweDdDLAor KyAgMHgzNiwgMHgzNSwgMHgyMSwgMHgzMSwgMHhDMywgMHhGRCwgMHg5MiwgMHg0MiwgMHgxMSwg MHgzMCwgMHg3MSwgMHgxQiwKKysgIDB4NjAsIDB4ODMsIDB4MTgsIDB4ODgsIDB4QTMsIDB4RjUs IDB4NTksIDB4QzMKKyt9OworKworKworK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSgpCisrCXsKKysJ aW50IHJldCA9IDA7CisrCVJTQSAqa2V5OworKwlFVlBfUEtFWSAqcGsgPSBOVUxMOworKworKwlp ZiAoKGtleT1SU0FfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJc2V0cnNha2V5KGtl eSk7CisrCWlmICgocGs9RVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysK KysJRVZQX1BLRVlfYXNzaWduX1JTQShwaywga2V5KTsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9S U0FfU0hBMSwgc2l6ZW9mKGthdF9SU0FfU0hBMSksCisrCQkJCUVWUF9zaGExKCksIEVWUF9NRF9D VFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMSBQS0NTIzEiKSkKKysJCWdvdG8gZXJy OworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGth dF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9TSEEyMjQsIHNpemVvZihrYXRfUlNBX1NIQTIyNCks CisrCQkJCUVWUF9zaGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJT QSBTSEEyMjQgUEtDUyMxIikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0 dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0Ff U0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9TSEEyNTYpLAorKwkJCQlFVlBfc2hhMjU2KCksIEVWUF9N RF9DVFhfRkxBR19QQURfUEtDUzEsCisrCQkJCSJSU0EgU0hBMjU2IFBLQ1MjMSIpKQorKwkJZ290 byBlcnI7CisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXpl b2Yoa2F0X3RicykgLSAxLAorKwkJCQlrYXRfUlNBX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfU0hB Mzg0KSwKKysJCQkJRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKwkJ CQkiUlNBIFNIQTM4NCBQS0NTIzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0 X1JTQV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1NIQTUxMiksCisrCQkJCUVWUF9zaGE1MTIoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKKysJCQkJIlJTQSBTSEE1MTIgUEtDUyMxIikpCisr CQlnb3RvIGVycjsKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90 YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTEsIHNpemVvZihr YXRfUlNBX1BTU19TSEExKSwKKysJCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9Q U1MsCisrCQkJCSJSU0EgU0hBMSBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJ a2F0X1JTQV9QU1NfU0hBMjI0LCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBMjI0KSwKKysJCQkJRVZQ X3NoYTIyNCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEEyMjQgUFNT IikpCisrCQlnb3RvIGVycjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGth dF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJCWthdF9SU0FfUFNTX1NIQTI1Niwgc2l6 ZW9mKGthdF9SU0FfUFNTX1NIQTI1NiksCisrCQkJCUVWUF9zaGEyNTYoKSwgRVZQX01EX0NUWF9G TEFHX1BBRF9QU1MsCisrCQkJCSJSU0EgU0hBMjU2IFBTUyIpKQorKwkJZ290byBlcnI7CisrCWlm ICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3Ricykg LSAxLAorKwkJCQlrYXRfUlNBX1BTU19TSEEzODQsIHNpemVvZihrYXRfUlNBX1BTU19TSEEzODQp LAorKwkJCQlFVlBfc2hhMzg0KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLAorKwkJCQkiUlNB IFNIQTM4NCBQU1MiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVf dGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQkJa2F0X1JTQV9QU1Nf U0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9QU1NfU0hBNTEyKSwKKysJCQkJRVZQX3NoYTUxMigpLCBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywKKysJCQkJIlJTQSBTSEE1MTIgUFNTIikpCisrCQlnb3Rv IGVycjsKKysKKysKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMs IHNpemVvZihrYXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTEsIHNpemVvZihrYXRf UlNBX1g5MzFfU0hBMSksCisrCQkJRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMx LAorKwkJCSJSU0EgU0hBMSBYOTMxIikpCisrCQlnb3RvIGVycjsKKysJLyogTkI6IFNIQTIyNCBu b3Qgc3VwcG9ydGVkIGluIFg5LjMxICovCisrCWlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0 KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKwkJCWthdF9SU0FfWDkzMV9TSEEy NTYsIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMjU2KSwKKysJCQlFVlBfc2hhMjU2KCksIEVWUF9N RF9DVFhfRkxBR19QQURfWDkzMSwKKysJCQkiUlNBIFNIQTI1NiBYOTMxIikpCisrCQlnb3RvIGVy cjsKKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihr YXRfdGJzKSAtIDEsCisrCQkJa2F0X1JTQV9YOTMxX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfWDkz MV9TSEEzODQpLAorKwkJCUVWUF9zaGEzODQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAor KwkJCSJSU0EgU0hBMzg0IFg5MzEiKSkKKysJCWdvdG8gZXJyOworKwlpZiAoIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysJCQlrYXRf UlNBX1g5MzFfU0hBNTEyLCBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTUxMiksCisrCQkJRVZQX3No YTUxMigpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisrCQkJIlJTQSBTSEE1MTIgWDkzMSIp KQorKwkJZ290byBlcnI7CisrCisrCisrCXJldCA9IDE7CisrCisrCWVycjoKKysJaWYgKHBrKQor KwkJRVZQX1BLRVlfZnJlZShwayk7CisrCWVsc2UgaWYgKGtleSkKKysJCVJTQV9mcmVlKGtleSk7 CisrCXJldHVybiByZXQ7CisrCX0KKysKKysjZW5kaWYgLyogZGVmIE9QRU5TU0xfRklQUyAqLwor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMg b3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jCistLS0gb3BlbnNzbC0x LjAuMC9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0 Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfcnNh X3g5MzFnLmMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEs MjgxIEBACisrLyogY3J5cHRvL3JzYS9yc2FfZ2VuLmMgKi8KKysvKiBDb3B5cmlnaHQgKEMpIDE5 OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKysgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgorKyAqCisrICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3 cml0dGVuCisrICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorKyAqIFRoZSBp bXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVz IFNTTC4KKysgKiAKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQg bm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKysgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcHBseSB0 byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNB LAorKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRo ZSBTU0wgZG9jdW1lbnRhdGlvbgorKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24g aXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKysgKiBleGNlcHQgdGhhdCB0 aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKiAKKysgKiBD b3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQg bm90aWNlcyBpbgorKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKysgKiBJZiB0 aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdp dmVuIGF0dHJpYnV0aW9uCisrICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxp YnJhcnkgdXNlZC4KKysgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVz c2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKysgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUg b3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKysgKiAKKysgKiBSZWRpc3Ry aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv dXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0 aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKyAqICAgIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzIHNvZnR3YXJlCisrICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBz b2Z0d2FyZSB3cml0dGVuIGJ5CisrICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KSIKKysgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRo ZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKysgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5 cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKysgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93 cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKysgKiAgICB0 aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4g YWNrbm93bGVkZ2VtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg d3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisrICogCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKysgKiBB TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorKyAqIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisr ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB UlksIE9SIENPTlNFUVVFTlRJQUwKKysgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworKyAqIE9SIFNFUlZJQ0VT OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisrICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorKyAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKKysgKiBTVUNIIERBTUFHRS4KKysgKiAKKysgKiBUaGUgbGljZW5jZSBhbmQgZGlz dHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgor KyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlz IGNvZGUgY2Fubm90IHNpbXBseSBiZQorKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIg ZGlzdHJpYnV0aW9uIGxpY2VuY2UKKysgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2Vu Y2UuXQorKyAqLworKworKyNpbmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4K KysjaW5jbHVkZSA8dGltZS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2lmZGVmIE9QRU5T U0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKytleHRlcm4gaW50IGZpcHNf Y2hlY2tfcnNhKFJTQSAqcnNhKTsKKysjZW5kaWYKKysKKysvKiBYOS4zMSBSU0Ega2V5IGRlcml2 YXRpb24gYW5kIGdlbmVyYXRpb24gKi8KKysKKytpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAq cnNhLCBCSUdOVU0gKnAxLCBCSUdOVU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAorKwkJ CWNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwK KysJCQljb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAq WHEsCisrCQkJY29uc3QgQklHTlVNICplLCBCTl9HRU5DQiAqY2IpCisrCXsKKysJQklHTlVNICpy MD1OVUxMLCpyMT1OVUxMLCpyMj1OVUxMLCpyMz1OVUxMOworKwlCTl9DVFggKmN0eD1OVUxMLCpj dHgyPU5VTEw7CisrCisrCWlmICghcnNhKSAKKysJCWdvdG8gZXJyOworKworKwljdHggPSBCTl9D VFhfbmV3KCk7CisrCWlmICghY3R4KSAKKysJCWdvdG8gZXJyOworKwlCTl9DVFhfc3RhcnQoY3R4 KTsKKysKKysJcjAgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCXIxID0gQk5fQ1RYX2dldChjdHgpOwor KwlyMiA9IEJOX0NUWF9nZXQoY3R4KTsKKysJcjMgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrCWlm IChyMyA9PSBOVUxMKQorKwkJZ290byBlcnI7CisrCWlmICghcnNhLT5lKQorKwkJeworKwkJcnNh LT5lID0gQk5fZHVwKGUpOworKwkJaWYgKCFyc2EtPmUpCisrCQkJZ290byBlcnI7CisrCQl9Cisr CWVsc2UKKysJCWUgPSByc2EtPmU7CisrCisrCS8qIElmIG5vdCBhbGwgcGFyYW1ldGVycyBwcmVz ZW50IG9ubHkgY2FsY3VsYXRlIHdoYXQgd2UgY2FuLgorKwkgKiBUaGlzIGFsbG93cyB0ZXN0IHBy b2dyYW1zIHRvIG91dHB1dCBzZWxlY3RpdmUgcGFyYW1ldGVycy4KKysJICovCisrCisrCWlmIChY cCAmJiAhcnNhLT5wKQorKwkJeworKwkJcnNhLT5wID0gQk5fbmV3KCk7CisrCQlpZiAoIXJzYS0+ cCkKKysJCQlnb3RvIGVycjsKKysKKysJCWlmICghQk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNh LT5wLCBwMSwgcDIsCisrCQkJCQlYcCwgWHAxLCBYcDIsIGUsIGN0eCwgY2IpKQorKwkJCWdvdG8g ZXJyOworKwkJfQorKworKwlpZiAoWHEgJiYgIXJzYS0+cSkKKysJCXsKKysJCXJzYS0+cSA9IEJO X25ldygpOworKwkJaWYgKCFyc2EtPnEpCisrCQkJZ290byBlcnI7CisrCQlpZiAoIUJOX1g5MzFf ZGVyaXZlX3ByaW1lX2V4KHJzYS0+cSwgcTEsIHEyLAorKwkJCQkJWHEsIFhxMSwgWHEyLCBlLCBj dHgsIGNiKSkKKysJCQlnb3RvIGVycjsKKysJCX0KKysKKysJaWYgKCFyc2EtPnAgfHwgIXJzYS0+ cSkKKysJCXsKKysJCUJOX0NUWF9lbmQoY3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0eCk7CisrCQly ZXR1cm4gMjsKKysJCX0KKysKKysJLyogU2luY2UgYm90aCBwcmltZXMgYXJlIHNldCB3ZSBjYW4g bm93IGNhbGN1bGF0ZSBhbGwgcmVtYWluaW5nIAorKwkgKiBjb21wb25lbnRzLgorKwkgKi8KKysK KysJLyogY2FsY3VsYXRlIG4gKi8KKysJcnNhLT5uPUJOX25ldygpOworKwlpZiAocnNhLT5uID09 IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tdWwocnNhLT5uLHJzYS0+cCxyc2EtPnEs Y3R4KSkKKysJCWdvdG8gZXJyOworKworKwkvKiBjYWxjdWxhdGUgZCAqLworKwlpZiAoIUJOX3N1 YihyMSxyc2EtPnAsQk5fdmFsdWVfb25lKCkpKQorKwkJZ290byBlcnI7CS8qIHAtMSAqLworKwlp ZiAoIUJOX3N1YihyMixyc2EtPnEsQk5fdmFsdWVfb25lKCkpKQorKwkJZ290byBlcnI7CS8qIHEt MSAqLworKwlpZiAoIUJOX211bChyMCxyMSxyMixjdHgpKQorKwkJZ290byBlcnI7CS8qIChwLTEp KHEtMSkgKi8KKysKKysJaWYgKCFCTl9nY2QocjMsIHIxLCByMiwgY3R4KSkKKysJCWdvdG8gZXJy OworKworKwlpZiAoIUJOX2RpdihyMCwgTlVMTCwgcjAsIHIzLCBjdHgpKQorKwkJZ290byBlcnI7 CS8qIExDTSgocC0xKShxLTEpKSAqLworKworKwljdHgyID0gQk5fQ1RYX25ldygpOworKwlpZiAo IWN0eDIpCisrCQlnb3RvIGVycjsKKysKKysJcnNhLT5kPUJOX21vZF9pbnZlcnNlKE5VTEwscnNh LT5lLHIwLGN0eDIpOwkvKiBkICovCisrCWlmIChyc2EtPmQgPT0gTlVMTCkKKysJCWdvdG8gZXJy OworKworKwkvKiBjYWxjdWxhdGUgZCBtb2QgKHAtMSkgKi8KKysJcnNhLT5kbXAxPUJOX25ldygp OworKwlpZiAocnNhLT5kbXAxID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysJaWYgKCFCTl9tb2Qo cnNhLT5kbXAxLHJzYS0+ZCxyMSxjdHgpKQorKwkJZ290byBlcnI7CisrCisrCS8qIGNhbGN1bGF0 ZSBkIG1vZCAocS0xKSAqLworKwlyc2EtPmRtcTE9Qk5fbmV3KCk7CisrCWlmIChyc2EtPmRtcTEg PT0gTlVMTCkKKysJCWdvdG8gZXJyOworKwlpZiAoIUJOX21vZChyc2EtPmRtcTEscnNhLT5kLHIy LGN0eCkpCisrCQlnb3RvIGVycjsKKysKKysJLyogY2FsY3VsYXRlIGludmVyc2Ugb2YgcSBtb2Qg cCAqLworKwlyc2EtPmlxbXA9Qk5fbW9kX2ludmVyc2UoTlVMTCxyc2EtPnEscnNhLT5wLGN0eDIp OworKworKwllcnI6CisrCWlmIChjdHgpCisrCQl7CisrCQlCTl9DVFhfZW5kKGN0eCk7CisrCQlC Tl9DVFhfZnJlZShjdHgpOworKwkJfQorKwlpZiAoY3R4MikKKysJCUJOX0NUWF9mcmVlKGN0eDIp OworKwkvKiBJZiB0aGlzIGlzIHNldCBhbGwgY2FsbHMgc3VjY2Vzc2Z1bCAqLworKwlpZiAocnNh ICYmIHJzYS0+aXFtcCAhPSBOVUxMKQorKwkJcmV0dXJuIDE7CisrCisrCXJldHVybiAwOworKwor Kwl9CisrCisraW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMs IGNvbnN0IEJJR05VTSAqZSwgQk5fR0VOQ0IgKmNiKQorKwl7CisrCWludCBvayA9IDA7CisrCUJJ R05VTSAqWHAgPSBOVUxMLCAqWHEgPSBOVUxMOworKwlCTl9DVFggKmN0eCA9IE5VTEw7CisrCisr I2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01P RFVMVVNfQklUUykKKysJICAgIHsKKysJICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVS QVRFX0tFWV9FWCxGSVBTX1JfS0VZX1RPT19TSE9SVCk7CisrCSAgICByZXR1cm4gMDsKKysJICAg IH0KKysKKysJaWYgKGJpdHMgJiAweGZmKQorKwkgICAgeworKwkgICAgRklQU2VycihGSVBTX0Zf UlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYLEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpOworKwkg ICAgcmV0dXJuIDA7CisrCSAgICB9CisrCisrCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisr CSAgICB7CisrCSAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAgIHJldHVybiAwOworKwkgICAgfQorKyNl bmRpZgorKworKwljdHggPSBCTl9DVFhfbmV3KCk7CisrCWlmICghY3R4KQorKwkJZ290byBlcnJv cjsKKysKKysJQk5fQ1RYX3N0YXJ0KGN0eCk7CisrCVhwID0gQk5fQ1RYX2dldChjdHgpOworKwlY cSA9IEJOX0NUWF9nZXQoY3R4KTsKKysJaWYgKCFCTl9YOTMxX2dlbmVyYXRlX1hwcShYcCwgWHEs IGJpdHMsIGN0eCkpCisrCQlnb3RvIGVycm9yOworKworKwlyc2EtPnAgPSBCTl9uZXcoKTsKKysJ cnNhLT5xID0gQk5fbmV3KCk7CisrCWlmICghcnNhLT5wIHx8ICFyc2EtPnEpCisrCQlnb3RvIGVy cm9yOworKworKwkvKiBHZW5lcmF0ZSB0d28gcHJpbWVzIGZyb20gWHAsIFhxICovCisrCisrCWlm ICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnAsIE5VTEwsIE5VTEwsIE5VTEwsIE5V TEwsIFhwLAorKwkJCQkJZSwgY3R4LCBjYikpCisrCQlnb3RvIGVycm9yOworKworKwlpZiAoIUJO X1g5MzFfZ2VuZXJhdGVfcHJpbWVfZXgocnNhLT5xLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBY cSwKKysJCQkJCWUsIGN0eCwgY2IpKQorKwkJZ290byBlcnJvcjsKKysKKysJLyogU2luY2UgcnNh LT5wIGFuZCByc2EtPnEgYXJlIHZhbGlkIHRoaXMgY2FsbCB3aWxsIGp1c3QgZGVyaXZlCisrCSAq IHJlbWFpbmluZyBSU0EgY29tcG9uZW50cy4KKysJICovCisrCisrCWlmICghUlNBX1g5MzFfZGVy aXZlX2V4KHJzYSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKysJCQkJTlVMTCwgTlVMTCwgTlVM TCwgTlVMTCwgTlVMTCwgTlVMTCwgZSwgY2IpKQorKwkJZ290byBlcnJvcjsKKysKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCWlmKCFmaXBzX2NoZWNrX3JzYShyc2EpKQorKwkgICAgZ290byBlcnJv cjsKKysjZW5kaWYKKysKKysJb2sgPSAxOworKworKwllcnJvcjoKKysJaWYgKGN0eCkKKysJCXsK KysJCUJOX0NUWF9lbmQoY3R4KTsKKysJCUJOX0NUWF9mcmVlKGN0eCk7CisrCQl9CisrCisrCWlm IChvaykKKysJCXJldHVybiAxOworKworKwlyZXR1cm4gMDsKKysKKysJfQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3NoYTFfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjAvY3J5cHRvL2ZpcHMvZmlwc19zaGExX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4w L2NyeXB0by9maXBzL2ZpcHNfc2hhMV9zZWxmdGVzdC5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0 Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfc2hh MV9zZWxmdGVzdC5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtMCww ICsxLDk5IEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9w 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 Zy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrI2luY2x1ZGUgPG9wZW5zc2wvZXZw Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUwor K3N0YXRpYyBjaGFyIHRlc3RbXVs2MF09CisrICAgIHsKKysgICAgIiIsCisrICAgICJhYmMiLAor KyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5v cG5vcHEiCisrICAgIH07CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmV0W11bU0hB X0RJR0VTVF9MRU5HVEhdPQorKyAgICB7CisrICAgIHsgMHhkYSwweDM5LDB4YTMsMHhlZSwweDVl LDB4NmIsMHg0YiwweDBkLDB4MzIsMHg1NSwKKysgICAgICAweGJmLDB4ZWYsMHg5NSwweDYwLDB4 MTgsMHg5MCwweGFmLDB4ZDgsMHgwNywweDA5IH0sCisrICAgIHsgMHhhOSwweDk5LDB4M2UsMHgz NiwweDQ3LDB4MDYsMHg4MSwweDZhLDB4YmEsMHgzZSwKKysgICAgICAweDI1LDB4NzEsMHg3OCww eDUwLDB4YzIsMHg2YywweDljLDB4ZDAsMHhkOCwweDlkIH0sCisrICAgIHsgMHg4NCwweDk4LDB4 M2UsMHg0NCwweDFjLDB4M2IsMHhkMiwweDZlLDB4YmEsMHhhZSwKKysgICAgICAweDRhLDB4YTEs MHhmOSwweDUxLDB4MjksMHhlNSwweGU1LDB4NDYsMHg3MCwweGYxIH0sCisrICAgIH07CisrCisr dm9pZCBGSVBTX2NvcnJ1cHRfc2hhMSgpCisrICAgIHsKKysgICAgdGVzdFsyXVswXSsrOworKyAg ICB9CisrCisraW50IEZJUFNfc2VsZnRlc3Rfc2hhMSgpCisrICAgIHsKKysgICAgaW50IG47Cisr CisrICAgIGZvcihuPTAgOyBuPHNpemVvZih0ZXN0KS9zaXplb2YodGVzdFswXSkgOyArK24pCisr CXsKKysJdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07CisrCisrCUVWUF9EaWdl c3QodGVzdFtuXSxzdHJsZW4odGVzdFtuXSksbWQsIE5VTEwsIEVWUF9zaGExKCksIE5VTEwpOwor KwlpZihtZW1jbXAobWQscmV0W25dLHNpemVvZiBtZCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEsRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCSAg ICByZXR1cm4gMDsKKysJICAgIH0KKysJfQorKyAgICByZXR1cm4gMTsKKysgICAgfQorKworKyNl bmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVf c2hhMS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hh MS5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfc2hhMS5j LmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4wL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9zaGExLmMJMjAxMC0wMy0zMCAxMDozMzo0 Ni4wMDAwMDAwMDAgKzAyMDAKK0BAIC0wLDAgKzEsMTczIEBACisrLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0Ogor KyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVu c3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl IG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFw cGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNz aW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMg b2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQg QU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRT IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBM SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysg KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF TiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAq CisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNp bmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysKKysj aWZuZGVmIEZJUFNDQU5JU1RFUl9PCisraW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkgeyByZXR1 cm4gMDsgfQorK3ZvaWQgRklQU19zZWxmdGVzdF9jaGVjaygpIHt9Cisrdm9pZCBPUEVOU1NMX2Ns ZWFuc2Uodm9pZCAqcCxzaXplX3QgbGVuKSB7fQorKyNlbmRpZgorKworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysKKytzdGF0aWMgdm9pZCBobWFjX2luaXQoU0hBX0NUWCAqbWRfY3R4LFNIQV9DVFgg Km9fY3R4LAorKwkJICAgICAgY29uc3QgY2hhciAqa2V5KQorKyAgICB7CisrICAgIHNpemVfdCBs ZW49c3RybGVuKGtleSk7CisrICAgIGludCBpOworKyAgICB1bnNpZ25lZCBjaGFyIGtleW1kW0hN QUNfTUFYX01EX0NCTE9DS107CisrICAgIHVuc2lnbmVkIGNoYXIgcGFkW0hNQUNfTUFYX01EX0NC TE9DS107CisrCisrICAgIGlmIChsZW4gPiBTSEFfQ0JMT0NLKQorKwl7CisrCVNIQTFfSW5pdCht ZF9jdHgpOworKwlTSEExX1VwZGF0ZShtZF9jdHgsa2V5LGxlbik7CisrCVNIQTFfRmluYWwoa2V5 bWQsbWRfY3R4KTsKKysJbGVuPTIwOworKwl9CisrICAgIGVsc2UKKysJbWVtY3B5KGtleW1kLGtl eSxsZW4pOworKyAgICBtZW1zZXQoJmtleW1kW2xlbl0sJ1wwJyxITUFDX01BWF9NRF9DQkxPQ0st bGVuKTsKKysKKysgICAgZm9yKGk9MCA7IGkgPCBITUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCisr CXBhZFtpXT0weDM2XmtleW1kW2ldOworKyAgICBTSEExX0luaXQobWRfY3R4KTsKKysgICAgU0hB MV9VcGRhdGUobWRfY3R4LHBhZCxTSEFfQ0JMT0NLKTsKKysKKysgICAgZm9yKGk9MCA7IGkgPCBI TUFDX01BWF9NRF9DQkxPQ0sgOyBpKyspCisrCXBhZFtpXT0weDVjXmtleW1kW2ldOworKyAgICBT SEExX0luaXQob19jdHgpOworKyAgICBTSEExX1VwZGF0ZShvX2N0eCxwYWQsU0hBX0NCTE9DSyk7 CisrICAgIH0KKysKKytzdGF0aWMgdm9pZCBobWFjX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLFNI QV9DVFggKm1kX2N0eCxTSEFfQ1RYICpvX2N0eCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFy IGJ1ZlsyMF07CisrCisrICAgIFNIQTFfRmluYWwoYnVmLG1kX2N0eCk7CisrICAgIFNIQTFfVXBk YXRlKG9fY3R4LGJ1ZixzaXplb2YgYnVmKTsKKysgICAgU0hBMV9GaW5hbChtZCxvX2N0eCk7Cisr ICAgIH0KKysKKysjZW5kaWYKKysKKytpbnQgbWFpbihpbnQgYXJnYyxjaGFyICoqYXJndikKKysg ICAgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgc3RhdGljIGNoYXIga2V5W109ImV0YW9u cmlzaGRsY3VwZm0iOworKyAgICBpbnQgbixiaW5hcnk9MDsKKysKKysgICAgaWYoYXJnYyA8IDIp CisrCXsKKysJZnByaW50ZihzdGRlcnIsIiVzIFs8ZmlsZT5dK1xuIixhcmd2WzBdKTsKKysJZXhp dCgxKTsKKysJfQorKworKyAgICBuPTE7CisrICAgIGlmICghc3RyY21wKGFyZ3Zbbl0sIi1iaW5h cnkiKSkKKysJeworKwluKys7CisrCWJpbmFyeT0xOwkvKiBlbWl0IGJpbmFyeSBmaW5nZXJwcmlu dC4uLiAqLworKwl9CisrCisrICAgIGZvcig7IG4gPCBhcmdjIDsgKytuKQorKwl7CisrCUZJTEUg KmY9Zm9wZW4oYXJndltuXSwicmIiKTsKKysJU0hBX0NUWCBtZF9jdHgsb19jdHg7CisrCXVuc2ln bmVkIGNoYXIgbWRbMjBdOworKwlpbnQgaTsKKysKKysJaWYoIWYpCisrCSAgICB7CisrCSAgICBw ZXJyb3IoYXJndltuXSk7CisrCSAgICBleGl0KDIpOworKwkgICAgfQorKworKwlobWFjX2luaXQo Jm1kX2N0eCwmb19jdHgsa2V5KTsKKysJZm9yKCA7IDsgKQorKwkgICAgeworKwkgICAgY2hhciBi dWZbMTAyNF07CisrCSAgICBzaXplX3QgbD1mcmVhZChidWYsMSxzaXplb2YgYnVmLGYpOworKwor KwkgICAgaWYobCA9PSAwKQorKwkJeworKwkJaWYoZmVycm9yKGYpKQorKwkJICAgIHsKKysJCSAg ICBwZXJyb3IoYXJndltuXSk7CisrCQkgICAgZXhpdCgzKTsKKysJCSAgICB9CisrCQllbHNlCisr CQkgICAgYnJlYWs7CisrCQl9CisrCSAgICBTSEExX1VwZGF0ZSgmbWRfY3R4LGJ1ZixsKTsKKysJ ICAgIH0KKysJaG1hY19maW5hbChtZCwmbWRfY3R4LCZvX2N0eCk7CisrCisrCWlmIChiaW5hcnkp CisrCSAgICB7CisrCSAgICBmd3JpdGUobWQsMjAsMSxzdGRvdXQpOworKwkgICAgYnJlYWs7CS8q IC4uLiBmb3Igc2luZ2xlKCEpIGZpbGUgKi8KKysJICAgIH0KKysKKysJcHJpbnRmKCJITUFDLVNI QTEoJXMpPSAiLGFyZ3Zbbl0pOworKwlmb3IoaT0wIDsgaSA8IDIwIDsgKytpKQorKwkgICAgcHJp bnRmKCIlMDJ4IixtZFtpXSk7CisrCXByaW50ZigiXG4iKTsKKysJfQorKyNlbmRpZgorKyAgICBy ZXR1cm4gMDsKKysgICAgfQorKworKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlw cy9maXBzX3Rlc3Rfc3VpdGUuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHMvZmlwc190 ZXN0X3N1aXRlLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0 ZS5jLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jCTIwMTAtMDMtMzAgMTA6MzM6NDYu MDAwMDAwMDAwICswMjAwCitAQCAtMCwwICsxLDU4OCBAQAorKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICog Q29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICoKKysgKiBUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgYXMgYSB0ZXN0IGRy aXZlciBmb3IgdGhlIEZJUFMtMTQwIHRlc3RpbmcKKysgKiBsYWIgcGVyZm9ybWluZyBGSVBTLTE0 MCB2YWxpZGF0aW9uLiAgSXQgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlCisrICogT3BlblNT TCBsaWJyYXJ5IGl0byBwZXJmb3JtIGEgdmFyaWV0eSBvZiBjb21tb24gY3J5cHRvZ3JhcGhpYwor KyAqIGZ1bmN0aW9ucy4gIEEgcG93ZXItdXAgc2VsZiB0ZXN0IGlzIGRlbW9uc3RyYXRlZCBieSBk ZWxpYmVyYXRlbHkKKysgKiBwb2ludGluZyB0byBhbiBpbnZhbGlkIGV4ZWN1dGFibGUgaGFzaAor KyAqCisrICogQ29udHJpYnV0ZWQgYnkgU3RldmUgTWFycXVlc3MuCisrICoKKysgKi8KKysjaW5j bHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1ZGUgPGN0eXBlLmg+ CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kZXMuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9yc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9kaC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l cnIuaD4KKysKKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysKKysKKysjaWZuZGVmIE9QRU5TU0xf RklQUworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisrICAgIHsKKysgICAgcHJp bnRmKCJObyBGSVBTIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4oMCk7CisrICAgIH0KKysjZWxz ZQorKworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc191dGwuaCIK KysKKysvKiBBRVM6IGVuY3J5cHQgYW5kIGRlY3J5cHQga25vd24gcGxhaW50ZXh0LCB2ZXJpZnkg cmVzdWx0IG1hdGNoZXMgb3JpZ2luYWwgcGxhaW50ZXh0CisrKi8KKytzdGF0aWMgaW50IEZJUFNf YWVzX3Rlc3Qodm9pZCkKKysJeworKwlpbnQgcmV0ID0gMDsKKysJdW5zaWduZWQgY2hhciBwbHRt cFsxNl07CisrCXVuc2lnbmVkIGNoYXIgY2l0bXBbMTZdOworKwl1bnNpZ25lZCBjaGFyIGtleVsx Nl0gPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2fTsKKysJdW5zaWdu ZWQgY2hhciBwbGFpbnRleHRbMTZdID0gImV0YW9ucmlzaGRsY3UiOworKwlFVlBfQ0lQSEVSX0NU WCBjdHg7CisrCUVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrCWlmIChFVlBfQ2lwaGVySW5p dF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCisr CQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCAxNik7Cisr CWlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSxOVUxMLCBrZXks IE5VTEwsIDApIDw9IDApCisrCQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBwbHRtcCwg Y2l0bXAsIDE2KTsKKysJaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCAxNikpCisrCQlnb3Rv IGVycjsKKysJcmV0ID0gMTsKKysJZXJyOgorKwlFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgp OworKwlyZXR1cm4gcmV0OworKwl9CisrCisrc3RhdGljIGludCBGSVBTX2RlczNfdGVzdCh2b2lk KQorKwl7CisrCWludCByZXQgPSAwOworKwl1bnNpZ25lZCBjaGFyIHBsdG1wWzhdOworKwl1bnNp Z25lZCBjaGFyIGNpdG1wWzhdOworKyAgICAJdW5zaWduZWQgY2hhciBrZXlbXSA9IHsgMSwyLDMs NCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsCisrCQkgICAgICAgICAgICAg IDE5LDIwLDIxLDIyLDIzLDI0fTsKKysgICAgCXVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0W10gPSB7 ICdlJywgJ3QnLCAnYScsICdvJywgJ24nLCAncicsICdpJywgJ3MnIH07CisrCUVWUF9DSVBIRVJf Q1RYIGN0eDsKKysJRVZQX0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKKysJaWYgKEVWUF9DaXBoZXJJ bml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDAp CisrCQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCA4KTsK KysJaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSxOVUxMLCBr ZXksIE5VTEwsIDApIDw9IDApCisrCQlnb3RvIGVycjsKKysJRVZQX0NpcGhlcigmY3R4LCBwbHRt cCwgY2l0bXAsIDgpOworKwlpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDgpKQorKwkJZ290 byBlcnI7CisrCXJldCA9IDE7CisrCWVycjoKKysJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4 KTsKKysJcmV0dXJuIHJldDsKKysJfQorKworKy8qCisrICogRFNBOiBnZW5lcmF0ZSBrZXlzIGFu ZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgorKyAqLworK3N0YXRpYyBpbnQgRklQU19k c2FfdGVzdChpbnQgYmFkKQorKyAgICB7CisrICAgIERTQSAqZHNhID0gTlVMTDsKKysgICAgRVZQ X1BLRVkgcGs7CisrICAgIHVuc2lnbmVkIGNoYXIgZGdzdFtdID0gImV0YW9ucmlzaGRsYyI7Cisr ICAgIHVuc2lnbmVkIGNoYXIgYnVmWzYwXTsKKysgICAgdW5zaWduZWQgaW50IHNsZW47CisrICAg IGludCByID0gMDsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKworKyAgICBFUlJfY2xlYXJfZXJy b3IoKTsKKysgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsKKysgICAgZHNhID0gRFNBX25ldygp OworKyAgICBpZiAoIWRzYSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRFNBX2dlbmVyYXRlX3Bh cmFtZXRlcnNfZXgoZHNhLCAxMDI0LE5VTEwsMCxOVUxMLE5VTEwsTlVMTCkpCisrCWdvdG8gZW5k OworKyAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKKysJZ290byBlbmQ7CisrICAgIGlm IChiYWQpCisrCSAgICBCTl9hZGRfd29yZChkc2EtPnB1Yl9rZXksIDEpOworKworKyAgICBway50 eXBlID0gRVZQX1BLRVlfRFNBOworKyAgICBway5wa2V5LmRzYSA9IGRzYTsKKysKKysgICAgaWYg KCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIEVWUF9kc3MxKCksIE5VTEwpKQorKwlnb3RvIGVuZDsK KysgICAgaWYgKCFFVlBfU2lnblVwZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkp CisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNsZW4s ICZwaykpCisrCWdvdG8gZW5kOworKworKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4 LCBFVlBfZHNzMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7CisrICAgIGlmICghRVZQX1ZlcmlmeVVw ZGF0ZSgmbWN0eCwgZGdzdCwgc2l6ZW9mKGRnc3QpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICBy ID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7CisrICAgIGVuZDoKKysg ICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysgICAgaWYgKGRzYSkKKysgIAkgIERTQV9m cmVlKGRzYSk7CisrICAgIGlmIChyICE9IDEpCisrCXJldHVybiAwOworKyAgICByZXR1cm4gMTsK KysgICAgfQorKworKy8qCisrICogUlNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkg aW5wdXQgcGxhaW50ZXh0LgorKyAqLworK3N0YXRpYyBpbnQgRklQU19yc2FfdGVzdChpbnQgYmFk KQorKyAgICB7CisrICAgIFJTQSAqa2V5OworKyAgICB1bnNpZ25lZCBjaGFyIGlucHV0X3B0ZXh0 W10gPSAiZXRhb25yaXNoZGxjIjsKKysgICAgdW5zaWduZWQgY2hhciBidWZbMjU2XTsKKysgICAg dW5zaWduZWQgaW50IHNsZW47CisrICAgIEJJR05VTSAqYm47CisrICAgIEVWUF9NRF9DVFggbWN0 eDsKKysgICAgRVZQX1BLRVkgcGs7CisrICAgIGludCByID0gMDsKKysKKysgICAgRVJSX2NsZWFy X2Vycm9yKCk7CisrICAgIEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7CisrICAgIGtleSA9IFJTQV9u ZXcoKTsKKysgICAgYm4gPSBCTl9uZXcoKTsKKysgICAgaWYgKCFrZXkgfHwgIWJuKQorKwlyZXR1 cm4gMDsKKysgICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKKysgICAgaWYgKCFSU0FfZ2VuZXJh dGVfa2V5X2V4KGtleSwgMTAyNCxibixOVUxMKSkKKysJcmV0dXJuIDA7CisrICAgIEJOX2ZyZWUo Ym4pOworKyAgICBpZiAoYmFkKQorKwkgICAgQk5fYWRkX3dvcmQoa2V5LT5uLCAxKTsKKysKKysg ICAgcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKKysgICAgcGsucGtleS5yc2EgPSBrZXk7CisrCisr ICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKKysJZ290 byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25VcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0LCBzaXpl b2YoaW5wdXRfcHRleHQpIC0gMSkpCisrCWdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduRmlu YWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCisrCWdvdG8gZW5kOworKworKyAgICBpZiAoIUVW UF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKKysJZ290byBlbmQ7Cisr ICAgIGlmICghRVZQX1ZlcmlmeVVwZGF0ZSgmbWN0eCwgaW5wdXRfcHRleHQsIHNpemVvZihpbnB1 dF9wdGV4dCkgLSAxKSkKKysJZ290byBlbmQ7CisrICAgIHIgPSBFVlBfVmVyaWZ5RmluYWwoJm1j dHgsIGJ1Ziwgc2xlbiwgJnBrKTsKKysgICAgZW5kOgorKyAgICBFVlBfTURfQ1RYX2NsZWFudXAo Jm1jdHgpOworKyAgICBpZiAoa2V5KQorKyAgCSAgICBSU0FfZnJlZShrZXkpOworKyAgICBpZiAo ciAhPSAxKQorKwlyZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBTSEEx OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93 bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3No YTFfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hBX0RJR0VTVF9M RU5HVEhdID0KKysgICAgICAgIHsgMHgxMSwgMHhmMSwgMHg5YSwgMHgzYSwgMHhlYywgMHgxYSwg MHgxZSwgMHg4ZSwgMHg2NSwgMHhkNCwgMHg5YSwgMHgzOCwgMHgwYywgMHg4YiwgMHgxZSwgMHgy YywgMHhlOCwgMHhiMywgMHhjNSwgMHgxOCB9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0g ImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQV9ESUdFU1RfTEVOR1RI XTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChzdHIs c2l6ZW9mKHN0cikgLSAxLG1kLCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkgcmV0dXJuIDA7Cisr ICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7 CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogU0hBMjU2OiBnZW5lcmF0ZSBoYXNoIG9m IGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVk IGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTI1Nl90ZXN0KCkKKysgICAg eworKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEyNTZfRElHRVNUX0xFTkdUSF0gPQorKwl7 MHhmNSwgMHg1MywgMHhjZCwgMHhiOCwgMHhjZiwgMHgxLCAweGVlLCAweDE3LCAweDliLCAweDkz LCAweGM5LCAweDY4LCAweGMwLCAweGVhLCAweDQwLCAweDkxLAorKwkgMHg2LCAweGVjLCAweDhl LCAweDExLCAweDk2LCAweGM4LCAweDVkLCAweDFjLCAweGFmLCAweDY0LCAweDIyLCAweGU2LCAw eDUwLCAweDRmLCAweDQ3LCAweDU3fTsKKysgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFv bnJpc2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07 CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLHNp emVvZihzdHIpIC0gMSxtZCwgTlVMTCwgRVZQX3NoYTI1NigpLCBOVUxMKSkgcmV0dXJuIDA7Cisr ICAgIGlmIChtZW1jbXAobWQsZGlnZXN0LHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7 CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9m IGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVk IGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTUxMl90ZXN0KCkKKysgICAg eworKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEE1MTJfRElHRVNUX0xFTkdUSF0gPQorKwl7 MHg5OSwgMHhjOSwgMHhlOSwgMHg1YiwgMHg4OCwgMHhkNCwgMHg3OCwgMHg4OCwgMHhkZiwgMHg4 OCwgMHg1ZiwgMHg5NCwgMHg3MSwgMHg2NCwgMHgyOCwgMHhjYSwKKysJIDB4MTYsIDB4MWYsIDB4 M2QsIDB4ZjQsIDB4MWYsIDB4ZjMsIDB4MGYsIDB4YzUsIDB4MDMsIDB4OTksIDB4YjIsIDB4ZDAs IDB4ZTcsIDB4MGIsIDB4OTQsIDB4NGEsCisrCSAweDQ1LCAweGQyLCAweDZjLCAweDRmLCAweDIw LCAweDA2LCAweGVmLCAweDcxLCAweGE5LCAweDI1LCAweDdmLCAweDI0LCAweGIxLCAweGQ5LCAw eDQwLCAweDIyLAorKwkgMHg0OSwgMHg1NCwgMHgxMCwgMHhjMiwgMHgyMiwgMHg5ZCwgMHgyNywg MHhmZSwgMHhiZCwgMHhkNiwgMHhkNiwgMHhlYiwgMHgyZCwgMHg0MiwgMHgxZCwgMHhhM307Cisr ICAgIHVuc2lnbmVkIGNoYXIgc3RyW10gPSAiZXRhb25yaXNoZCI7CisrCisrICAgIHVuc2lnbmVk IGNoYXIgbWRbU0hBNTEyX0RJR0VTVF9MRU5HVEhdOworKworKyAgICBFUlJfY2xlYXJfZXJyb3Io KTsKKysgICAgaWYgKCFFVlBfRGlnZXN0KHN0cixzaXplb2Yoc3RyKSAtIDEsbWQsIE5VTEwsIEVW UF9zaGE1MTIoKSwgTlVMTCkpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG1kLGRpZ2VzdCxz aXplb2YobWQpKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQor KworKy8qIEhNQUMtU0hBMTogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5k IGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0 YXRpYyBpbnQgRklQU19obWFjX3NoYTFfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hh ciBrZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBs ZSB0ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJ ezB4NzMsIDB4ZjcsIDB4YTAsIDB4NDgsIDB4ZjgsIDB4OTQsIDB4ZWQsIDB4ZGQsIDB4MGEsIDB4 ZWEsIDB4ZWEsIDB4NTYsIDB4MWIsIDB4NjEsIDB4MmUsIDB4NzAsCisrCSAweGIyLCAweGZiLCAw eGVjLCAweGM2fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsK KysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7Cisr ICAgIGlmICghSE1BQyhFVlBfc2hhMSgpLGtleSxzaXplb2Yoa2V5KS0xLGl2LHNpemVvZihpdikt MSxvdXQsJm91dGxlbikpIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG91dCxrYXZhbCxvdXRs ZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyog SE1BQy1TSEEyMjQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21w YXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMg aW50IEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpCisrICAgIHsKKysgICAgdW5zaWduZWQgY2hhciBr ZXlbXSA9ICJldGFvbnJpc2hkIjsKKysgICAgdW5zaWduZWQgY2hhciBpdltdID0gIlNhbXBsZSB0 ZXh0IjsKKysgICAgdW5zaWduZWQgY2hhciBrYXZhbFtFVlBfTUFYX01EX1NJWkVdID0KKysJezB4 NzUsIDB4NTgsIDB4ZDUsIDB4YmQsIDB4NTUsIDB4NmQsIDB4ODcsIDB4MGYsIDB4NzUsIDB4ZmYs IDB4YmUsIDB4MWMsIDB4YjIsIDB4ZjAsIDB4MjAsIDB4MzUsCisrCSAweGU1LCAweDYyLCAweDQ5 LCAweGI2LCAweDk0LCAweGI5LCAweGZjLCAweDY1LCAweDM0LCAweDMzLCAweDNhLCAweDE5fTsK KysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWdu ZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1B QyhFVlBfc2hhMjI0KCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0 bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAg ICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysvKiBITUFDLVNIQTI1 NjogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25v d24KKysgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19o bWFjX3NoYTI1Nl90ZXN0KCkKKysgICAgeworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0 YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAg ICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKwl7MHhlOSwgMHgxNywg MHhjMSwgMHg3YiwgMHg0YywgMHg2YiwgMHg3NywgMHhkYSwgMHhkMiwgMHgzMCwgMHgzNiwgMHgw MiwgMHhmNSwgMHg3MiwgMHgzMywgMHg4NywKKysJIDB4OWYsIDB4YzYsIDB4NmUsIDB4N2IsIDB4 N2UsIDB4YTgsIDB4ZWEsIDB4YWEsIDB4OWYsIDB4YmEsIDB4ZWUsIDB4NTEsIDB4ZmYsIDB4ZGEs IDB4MjQsIDB4ZjR9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVd OworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK KysgICAgaWYgKCFITUFDKEVWUF9zaGEyNTYoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2Yo aXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWws b3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKwor Ky8qIEhNQUMtU0hBMzg0OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQg Y29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3Rh dGljIGludCBGSVBTX2htYWNfc2hhMzg0X3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNo YXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1w bGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Cisr CXsweGIyLCAweDlkLCAweDQwLCAweDU4LCAweDMyLCAweGM0LCAweGUzLCAweDMxLCAweGI2LCAw eDYzLCAweDA4LCAweDI2LCAweDk5LCAweGVmLCAweDNiLCAweDEwLAorKwkgMHhlMiwgMHhkZiwg MHhmOCwgMHhmZiwgMHhjNiwgMHhlMSwgMHgwMywgMHgyOSwgMHg4MSwgMHgyYSwgMHgxYiwgMHhh YywgMHhiMCwgMHgwNywgMHgzOSwgMHgwOCwKKysJIDB4ZjMsIDB4OTEsIDB4MzUsIDB4MTEsIDB4 NzYsIDB4ZDYsIDB4NGMsIDB4MjAsIDB4ZmIsIDB4NGQsIDB4YzMsIDB4ZjMsIDB4YjgsIDB4OWIs IDB4ODgsIDB4MWN9OworKworKyAgICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVd OworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsK KysgICAgaWYgKCFITUFDKEVWUF9zaGEzODQoKSxrZXksc2l6ZW9mKGtleSktMSxpdixzaXplb2Yo aXYpLTEsb3V0LCZvdXRsZW4pKSByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChvdXQsa2F2YWws b3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKysgICAgfQorKwor Ky8qIEhNQUMtU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQg Y29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3Rh dGljIGludCBGSVBTX2htYWNfc2hhNTEyX3Rlc3QoKQorKyAgICB7CisrICAgIHVuc2lnbmVkIGNo YXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1w bGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Cisr CXsweGNkLCAweDNlLCAweGI5LCAweDUxLCAweGI4LCAweGJjLCAweDdmLCAweDlhLCAweDIzLCAw eGFmLCAweGYzLCAweDc3LCAweDU5LCAweDg1LCAweGE5LCAweGU2LAorKwkgMHhmNywgMHhkMSwg MHg1MSwgMHg5NiwgMHgxNywgMHhlMCwgMHg5MiwgMHhkOCwgMHhhNiwgMHgzYiwgMHhjMSwgMHhh ZCwgMHg3ZSwgMHgyNCwgMHhjYSwgMHhiMSwKKysJIDB4ZDcsIDB4NzksIDB4MGEsIDB4YTUsIDB4 ZWEsIDB4MmMsIDB4MDIsIDB4NTgsIDB4MGIsIDB4YTYsIDB4NTIsIDB4NmIsIDB4NjEsIDB4N2Ys IDB4ZWIsIDB4OWMsCisrCSAweDQ3LCAweDg2LCAweDVkLCAweDc0LCAweDJiLCAweDg4LCAweGRm LCAweGVlLCAweDQ2LCAweDY5LCAweDk2LCAweDNkLCAweGE2LCAweGQ5LCAweDJhLCAweDUzfTsK KysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWdu ZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1B QyhFVlBfc2hhNTEyKCksa2V5LHNpemVvZihrZXkpLTEsaXYsc2l6ZW9mKGl2KS0xLG91dCwmb3V0 bGVuKSkgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LGthdmFsLG91dGxlbikpCisrICAg ICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrICAgIH0KKysKKysKKysvKiBESDogZ2Vu ZXJhdGUgc2hhcmVkIHBhcmFtZXRlcnMKKysqLworK3N0YXRpYyBpbnQgZGhfdGVzdCgpCisrICAg IHsKKysgICAgREggKmRoOworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgZGggPSBGSVBT X2RoX25ldygpOworKyAgICBpZiAoIWRoKQorKwlyZXR1cm4gMDsKKysgICAgaWYgKCFESF9nZW5l cmF0ZV9wYXJhbWV0ZXJzX2V4KGRoLCAxMDI0LCAyLCBOVUxMKSkKKysJcmV0dXJuIDA7CisrICAg IEZJUFNfZGhfZnJlZShkaCk7CisrICAgIHJldHVybiAxOworKyAgICB9CisrCisrLyogWmVyb2l6 ZQorKyovCisrc3RhdGljIGludCBaZXJvaXplKCkKKysgICAgeworKyAgICBSU0EgKmtleTsKKysg ICAgQklHTlVNICpibjsKKysgICAgdW5zaWduZWQgY2hhciB1c2Vya2V5WzE2XSA9IAorKwl7IDB4 NDgsIDB4NTAsIDB4ZjAsIDB4YTMsIDB4M2EsIDB4ZWQsIDB4ZDMsIDB4YWYsIDB4NmUsIDB4NDcs IDB4N2YsIDB4ODMsIDB4MDIsIDB4YjEsIDB4MDksIDB4NjggfTsKKysgICAgaW50IGksIG47Cisr CisrICAgIGtleSA9IEZJUFNfcnNhX25ldygpOworKyAgICBibiA9IEJOX25ldygpOworKyAgICBp ZiAoIWtleSB8fCAhYm4pCisrCXJldHVybiAwOworKyAgICBCTl9zZXRfd29yZChibiwgNjU1Mzcp OworKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LGJuLE5VTEwpKQorKwly ZXR1cm4gMDsKKysgICAgQk5fZnJlZShibik7CisrICAgIAorKyAgICBuID0gQk5fbnVtX2J5dGVz KGtleS0+ZCk7CisrICAgIHByaW50ZigiIEdlbmVyYXRlZCAlZCBieXRlIFJTQSBwcml2YXRlIGtl eVxuIiwgbik7CisrICAgIHByaW50ZigiXHRCTiBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOlxuIik7 CisrICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKKysgICAgQk5fcmFuZChrZXktPmQs bio4LC0xLDApOworKyAgICBwcmludGYoIlx0Qk4ga2V5IGFmdGVyIG92ZXJ3cml0aW5nOlxuIik7 CisrICAgIGRvX2JuX3ByaW50KHN0ZG91dCwga2V5LT5kKTsKKysKKysgICAgcHJpbnRmKCJcdGNo YXIgYnVmZmVyIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOworKyAgICBmb3IoaSA9 IDA7IGkgPCBzaXplb2YodXNlcmtleSk7IGkrKykgcHJpbnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7 CisrICAgICAgICBwcmludGYoIlxuIik7CisrICAgIFJBTkRfYnl0ZXModXNlcmtleSwgc2l6ZW9m IHVzZXJrZXkpOworKyAgICBwcmludGYoIlx0Y2hhciBidWZmZXIga2V5IGFmdGVyIG92ZXJ3cml0 aW5nOiBcblx0XHQiKTsKKysgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBpKysp IHByaW50ZigiJTAyeCIsIHVzZXJrZXlbaV0pOworKyAgICAgICAgcHJpbnRmKCJcbiIpOworKwor KyAgICByZXR1cm4gMTsKKysgICAgfQorKworK3N0YXRpYyBpbnQgRXJyb3I7CisrY29uc3QgY2hh ciAqIEZhaWwoY29uc3QgY2hhciAqbXNnKQorKyAgICB7CisrICAgIGRvX3ByaW50X2Vycm9ycygp OworKyAgICBFcnJvcisrOworKyAgICByZXR1cm4gbXNnOyAKKysgICAgfQorKworK2ludCBtYWlu KGludCBhcmdjLGNoYXIgKiphcmd2KQorKyAgICB7CisrCisrICAgIGludCBkb19jb3JydXB0X3Jz YV9rZXlnZW4gPSAwLCBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAwOworKyAgICBpbnQgYmFkX3Jz YSA9IDAsIGJhZF9kc2EgPSAwOworKyAgICBpbnQgZG9fcm5nX3N0aWNrID0gMDsKKysgICAgaW50 IG5vX2V4aXQgPSAwOworKworKyAgICBwcmludGYoIlx0RklQUy1tb2RlIHRlc3QgYXBwbGljYXRp b25cblxuIik7CisrCisrICAgIC8qIExvYWQgZW50cm9weSBmcm9tIGV4dGVybmFsIGZpbGUsIGlm IGFueSAqLworKyAgICBSQU5EX2xvYWRfZmlsZSgiLnJuZCIsIDEwMjQpOworKworKyAgICBpZiAo YXJndlsxXSkgeworKyAgICAgICAgLyogQ29ycnVwdGVkIEtBVCB0ZXN0cyAqLworKyAgICAgICAg aWYgKCFzdHJjbXAoYXJndlsxXSwgImFlcyIpKSB7CisrICAgICAgICAgICAgRklQU19jb3JydXB0 X2FlcygpOworKyAgICAgICAgICAgIHByaW50ZigiQUVTIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3 aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFy Z3ZbMV0sICJkZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kZXMoKTsKKysgICAg ICAgICAgICBwcmludGYoIkRFUzMtRUNCIGVuY3J5cHRpb24vZGVjcnlwdGlvbiB3aXRoIGNvcnJ1 cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJk c2EiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9kc2EoKTsKKysgICAgICAgICAgICBw cmludGYoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBj b3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFd LCAicnNhIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhKCk7CisrICAgICAgICAg ICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdp dGggY29ycnVwdGVkIEtBVC4uLlxuIik7CisrICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJn dlsxXSwgInJzYWtleSIpKSB7CisrICAgICAgICAgICAgcHJpbnRmKCJSU0Ega2V5IGdlbmVyYXRp b24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIGtleS4uLlxuIik7Cisr CSAgICBiYWRfcnNhID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgfSBlbHNlIGlm ICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXlnZW4iKSkgeworKwkgICAgZG9fY29ycnVwdF9yc2Ff a2V5Z2VuID0gMTsKKysJICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgICAgIHByaW50ZigiUlNB IGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBr ZXlnZW4uLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2Fr ZXkiKSkgeworKyAgICAgICAgICAgIHByaW50ZigiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWdu YXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOworKwkgICAgYmFkX2Rz YSA9IDE7CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChh cmd2WzFdLCAiZHNha2V5Z2VuIikpIHsKKysJICAgIGRvX2NvcnJ1cHRfZHNhX2tleWdlbiA9IDE7 CisrCSAgICBub19leGl0ID0gMTsKKysgICAgICAgICAgICBwcmludGYoIkRTQSBrZXkgZ2VuZXJh dGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4i KTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hhMSIpKSB7CisrICAg ICAgICAgICAgRklQU19jb3JydXB0X3NoYTEoKTsKKysgICAgICAgICAgICBwcmludGYoIlNIQS0x IGhhc2ggd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysJfSBlbHNlIGlmICghc3RyY21wKGFy Z3ZbMV0sICJybmciKSkgeworKwkgICAgRklQU19jb3JydXB0X3JuZygpOworKwl9IGVsc2UgaWYg KCFzdHJjbXAoYXJndlsxXSwgInJuZ3N0aWNrIikpIHsKKysJICAgIGRvX3JuZ19zdGljayA9IDE7 CisrCSAgICBub19leGl0ID0gMTsKKysJICAgIHByaW50ZigiUk5HIHRlc3Qgd2l0aCBzdHVjayBj b250aW51b3VzIHRlc3QuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBw cmludGYoIkJhZCBhcmd1bWVudCBcIiVzXCJcbiIsIGFyZ3ZbMV0pOworKyAgICAgICAgICAgIGV4 aXQoMSk7CisrICAgICAgICB9CisrCWlmICghbm9fZXhpdCkgeworKyAgICAgICAgCWlmICghRklQ U19tb2RlX3NldCgxKSkgeworKyAJCSAgICBkb19wcmludF9lcnJvcnMoKTsKKysgICAgICAgIAkg ICAgcHJpbnRmKCJQb3dlci11cCBzZWxmIHRlc3QgZmFpbGVkXG4iKTsKKysJCSAgICBleGl0KDEp OworKwkJfQorKyAgICAgICAgCXByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IHN1Y2Nlc3NmdWxc biIpOworKyAgICAgICAgCWV4aXQoMCk7CisrCX0KKysgICAgfQorKworKyAgICAvKiBOb24tQXBw cm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24KKysgICAgKi8KKysgICAgcHJpbnRmKCIxLiBO b24tQXBwcm92ZWQgY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24gdGVzdC4uLlxuIik7CisrICAgIHBy aW50ZigiXHRhLiBJbmNsdWRlZCBhbGdvcml0aG0gKEQtSCkuLi4iKTsKKysgICAgcHJpbnRmKCBk aF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAg ICAvKiBQb3dlci11cCBzZWxmIHRlc3QKKysgICAgKi8KKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7 CisrICAgIHByaW50ZigiMi4gQXV0b21hdGljIHBvd2VyLXVwIHNlbGYgdGVzdC4uLiIpOworKyAg ICBpZiAoIUZJUFNfbW9kZV9zZXQoMSkpCisrCXsKKysJZG9fcHJpbnRfZXJyb3JzKCk7CisrICAg ICAgICBwcmludGYoRmFpbCgiRkFJTEVEIVxuIikpOworKwlleGl0KDEpOworKwl9CisrICAgIHBy aW50Zigic3VjY2Vzc2Z1bFxuIik7CisrICAgIGlmIChkb19jb3JydXB0X2RzYV9rZXlnZW4pCisr ICAgICAgICAgICAgRklQU19jb3JydXB0X2RzYV9rZXlnZW4oKTsKKysgICAgaWYgKGRvX2NvcnJ1 cHRfcnNhX2tleWdlbikKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcnNhX2tleWdlbigpOwor KyAgICBpZiAoZG9fcm5nX3N0aWNrKQorKyAgICAgICAgICAgIEZJUFNfcm5nX3N0aWNrKCk7Cisr CisrICAgIC8qIEFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAgKi8KKysgICAgcHJpbnRm KCIzLiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19h ZXNfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysg ICAgLyogUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBlbmNyeXB0aW9uL2RlY3J5cHRpb24KKysgICAg Ki8KKysgICAgcHJpbnRmKCI0LiBSU0Ega2V5IGdlbmVyYXRpb24gYW5kIGVuY3J5cHRpb24vZGVj cnlwdGlvbi4uLiIpOworKyAgICBwcmludGYoIEZJUFNfcnNhX3Rlc3QoYmFkX3JzYSkgPyAic3Vj Y2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBERVMtQ0JDIGVu Y3J5cHRpb24vZGVjcnlwdGlvbgorKyAgICAqLworKyAgICBwcmludGYoIjUuIERFUy1FQ0IgZW5j cnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZiggRklQU19kZXMzX3Rlc3QoKSA/ ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIERTQSBr ZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24KKysgICAgKi8KKysgICAgcHJp bnRmKCI2LiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uLi4uIik7 CisrICAgIHByaW50ZiggRklQU19kc2FfdGVzdChiYWRfZHNhKSA/ICJzdWNjZXNzZnVsXG4iIDog IEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisrICAgIC8qIFNIQS0xIGhhc2gKKysgICAgKi8KKysg ICAgcHJpbnRmKCI3YS4gU0hBLTEgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfc2hhMV90 ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAv KiBTSEEtMjU2IGhhc2gKKysgICAgKi8KKysgICAgcHJpbnRmKCI3Yi4gU0hBLTI1NiBoYXNoLi4u Iik7CisrICAgIHByaW50ZiggRklQU19zaGEyNTZfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAg RmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogU0hBLTUxMiBoYXNoCisrICAgICovCisr ICAgIHByaW50ZigiN2MuIFNIQS01MTIgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfc2hh NTEyX3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZBSUxFRCFcbiIpICk7CisrCisr ICAgIC8qIEhNQUMtU0hBLTEgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdkLiBITUFDLVNI QS0xIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKCBGSVBTX2htYWNfc2hhMV90ZXN0KCkgPyAic3Vj Y2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSApOworKworKyAgICAvKiBITUFDLVNIQS0y MjQgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdlLiBITUFDLVNIQS0yMjQgaGFzaC4uLiIp OworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIg OiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAgLyogSE1BQy1TSEEtMjU2IGhhc2gKKysg ICAgKi8KKysgICAgcHJpbnRmKCI3Zi4gSE1BQy1TSEEtMjU2IGhhc2guLi4iKTsKKysgICAgcHJp bnRmKCBGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKSA/ICJzdWNjZXNzZnVsXG4iIDogIEZhaWwoIkZB SUxFRCFcbiIpICk7CisrCisrICAgIC8qIEhNQUMtU0hBLTM4NCBoYXNoCisrICAgICovCisrICAg IHByaW50ZigiN2cuIEhNQUMtU0hBLTM4NCBoYXNoLi4uIik7CisrICAgIHByaW50ZiggRklQU19o bWFjX3NoYTM4NF90ZXN0KCkgPyAic3VjY2Vzc2Z1bFxuIiA6ICBGYWlsKCJGQUlMRUQhXG4iKSAp OworKworKyAgICAvKiBITUFDLVNIQS01MTIgaGFzaAorKyAgICAqLworKyAgICBwcmludGYoIjdo LiBITUFDLVNIQS01MTIgaGFzaC4uLiIpOworKyAgICBwcmludGYoIEZJUFNfaG1hY19zaGE1MTJf dGVzdCgpID8gInN1Y2Nlc3NmdWxcbiIgOiAgRmFpbCgiRkFJTEVEIVxuIikgKTsKKysKKysgICAg LyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCisrICAgICovCisrICAgIHBy aW50ZigiOC4gTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uIHRlc3QuLi5cbiIp OworKyAgICBwcmludGYoIlx0YS4gSW5jbHVkZWQgYWxnb3JpdGhtIChELUgpLi4uIik7CisrICAg IHByaW50ZiggZGhfdGVzdCgpID8gInN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKKysJICAgIDog RmFpbCgiZmFpbGVkIElOQ09SUkVDVExZIVxuIikgKTsKKysKKysgICAgLyogWmVyb2l6YXRpb24K KysgICAgKi8KKysgICAgcHJpbnRmKCI5LiBaZXJvLWl6YXRpb24uLi5cbiIpOworKyAgICBwcmlu dGYoIFplcm9pemUoKSA/ICJcdHN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKKysJICAgIDogRmFp bCgiXHRmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSApOworKworKyAgICBwcmludGYoIlxuQWxsIHRl c3RzIGNvbXBsZXRlZCB3aXRoICVkIGVycm9yc1xuIiwgRXJyb3IpOworKyAgICByZXR1cm4gRXJy b3IgPyAxIDogMDsKKysgICAgfQorKworKyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9j cnlwdG8vZmlwc19sb2NsLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2xvY2wuaAor LS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2ZpcHNfbG9jbC5oLmZpcHMJMjAxMC0wMy0zMCAxMDoz Mzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzX2xvY2wu aAkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIwMAorQEAgLTAsMCArMSw3MiBAQAor Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgor KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1 dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoK KysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAg ICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysKKysj aWZkZWYgIF9fY3BsdXNwbHVzCisrZXh0ZXJuICJDIiB7CisrI2VuZGlmCisrCisrdm9pZCBmaXBz X3dfbG9jayh2b2lkKTsKKyt2b2lkIGZpcHNfd191bmxvY2sodm9pZCk7Cisrdm9pZCBmaXBzX3Jf bG9jayh2b2lkKTsKKyt2b2lkIGZpcHNfcl91bmxvY2sodm9pZCk7CisraW50IGZpcHNfaXNfc3Rh cnRlZCh2b2lkKTsKKyt2b2lkIGZpcHNfc2V0X3N0YXJ0ZWQodm9pZCk7CisraW50IGZpcHNfaXNf b3duaW5nX3RocmVhZCh2b2lkKTsKKytpbnQgZmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKTsK Kyt2b2lkIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwodm9pZCk7CisraW50IGZpcHNfY2xlYXJfb3du aW5nX3RocmVhZCh2b2lkKTsKKysKKysjZGVmaW5lIEZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkUJ MTYKKysKKysjaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyNlbmRpZgorKyNlbmRpZgorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vZmlwcy9NYWtlZmlsZS5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL2ZpcHMvTWFrZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9maXBzL01ha2Vm aWxlLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9maXBzL01ha2VmaWxlCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAw ICswMjAwCitAQCAtMCwwICsxLDgxIEBACisrIworKyMgT3BlblNTTC9jcnlwdG8vZmlwcy9NYWtl ZmlsZQorKyMKKysKKytESVI9CWZpcHMKKytUT1A9CS4uLy4uCisrQ0M9CWNjCisrSU5DTFVERVM9 CisrQ0ZMQUc9LWcKKytNQUtFRklMRT0JTWFrZWZpbGUKKytBUj0JCWFyIHIKKysKKytDRkxBR1M9 ICQoSU5DTFVERVMpICQoQ0ZMQUcpCisrCisrR0VORVJBTD1NYWtlZmlsZQorK1RFU1Q9Zmlwc190 ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5jCisrQVBQUz0KKysKKytMSUI9JChUT1ApL2xpYmNy eXB0by5hCisrTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlwc19kZXNfc2VsZnRlc3QuYyBm aXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3JhbmRfc2VsZnRlc3QuYyBcCisrICAgIGZpcHNfcnNh X3NlbGZ0ZXN0LmMgZmlwc19zaGExX3NlbGZ0ZXN0LmMgZmlwcy5jIGZpcHNfZHNhX3NlbGZ0ZXN0 LmMgIGZpcHNfcmFuZC5jIFwKKysgICAgZmlwc19yc2FfeDkzMWcuYworKworK0xJQk9CSj1maXBz X2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3NlbGZ0ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0Lm8g Zmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAorKyAgICBmaXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNfc2hh MV9zZWxmdGVzdC5vIGZpcHMubyBmaXBzX2RzYV9zZWxmdGVzdC5vICBmaXBzX3JhbmQubyBcCisr ICAgIGZpcHNfcnNhX3g5MzFnLm8KKysKKytTUkM9ICQoTElCU1JDKSBmaXBzX3N0YW5kYWxvbmVf c2hhMS5jCisrCisrRVhIRUFERVI9IGZpcHMuaCBmaXBzX3JhbmQuaAorK0hFQURFUj0JJChFWEhF QURFUikKKysKKytBTEw9ICAgICQoR0VORVJBTCkgJChTUkMpICQoSEVBREVSKQorKworK3RvcDoK KysJKGNkIC4uLy4uOyAkKE1BS0UpIERJUlM9Y3J5cHRvIFNESVJTPSQoRElSKSBzdWJfYWxsKQor KworK2FsbDoJbGliCisrCisrbGliOgkkKExJQk9CSikKKysJJChBUikgJChMSUIpICQoTElCT0JK KQorKwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KKysJQHRvdWNoIGxpYgor KworK2ZpbGVzOgorKwkkKFBFUkwpICQoVE9QKS91dGlsL2ZpbGVzLnBsIE1ha2VmaWxlID4+ICQo VE9QKS9NSU5GTworKworK2xpbmtzOgorKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwg Li4vLi4vaW5jbHVkZS9vcGVuc3NsICQoRVhIRUFERVIpCisrCUAkKFBFUkwpICQoVE9QKS91dGls L21rbGluay5wbCAuLi8uLi90ZXN0ICQoVEVTVCkKKysJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWts aW5rLnBsIC4uLy4uL2FwcHMgJChBUFBTKQorKworK2luc3RhbGw6CisrCUBbIC1uICIkKElOU1RB TExUT1ApIiBdICMgc2hvdWxkIGJlIHNldCBieSB0b3AgTWFrZWZpbGUuLi4KKysJQGhlYWRlcmxp c3Q9IiQoRVhIRUFERVIpIjsgZm9yIGkgaW4gJCRoZWFkZXJsaXN0IDsgXAorKwlkbyAgXAorKwko Y3AgJCRpICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRp OyBcCisrCWNobW9kIDY0NCAkKElOU1RBTExfUFJFRklYKSQoSU5TVEFMTFRPUCkvaW5jbHVkZS9v cGVuc3NsLyQkaSApOyBcCisrCWRvbmU7CisrCisrdGFnczoKKysJY3RhZ3MgJChTUkMpCisrCisr dGVzdHM6CisrCisrbGludDoKKysJbGludCAtRExJTlQgJChJTkNMVURFUykgJChTUkMpPmZsdWZm CisrCisrZGVwZW5kOgorKwlAWyAtbiAiJChNQUtFREVQRU5EKSIgXSAjIHNob3VsZCBiZSBzZXQg YnkgdXBwZXIgTWFrZWZpbGUuLi4KKysJJChNQUtFREVQRU5EKSAtLSAkKENGTEFHKSAkKElOQ0xV REVTKSAkKERFUEZMQUcpIC0tICQoUFJPR1MpICQoTElCU1JDKQorKworK2RjbGVhbjoKKysJJChQ RVJMKSAtcGUgJ2lmICgvXiMgRE8gTk9UIERFTEVURSBUSElTIExJTkUvKSB7cHJpbnQ7IGV4aXQo MCk7fScgJChNQUtFRklMRSkgPk1ha2VmaWxlLm5ldworKwltdiAtZiBNYWtlZmlsZS5uZXcgJChN QUtFRklMRSkKKysKKytjbGVhbjoKKysJcm0gLWYgKi5vICoub2JqIGxpYiB0YWdzIGNvcmUgLnB1 cmUgLm5mcyogKi5vbGQgKi5iYWsgZmx1ZmYKKysKKysjIERPIE5PVCBERUxFVEUgVEhJUyBMSU5F IC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCisrCitkaWZmIC11cCBvcGVuc3NsLTEuMC4w L2NyeXB0by9obWFjL2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2htYWMvaG1hYy5j CistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vaG1hYy9obWFjLmMuZmlwcwkyMDEwLTAxLTI2IDE1 OjMzOjUyLjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL2htYWMvaG1h Yy5jCTIwMTAtMDMtMzAgMTA6MzM6NDYuMDAwMDAwMDAwICswMjAwCitAQCAtNzcsNiArNzcsMTMg QEAgaW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bworIAorIAlpZiAoa2V5 ICE9IE5VTEwpCisgCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJaWYgKEZJUFNfbW9kZSgp ICYmICEobWQtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykKKysJCSYmICghKGN0eC0+bWRfY3R4 LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKwkJIHx8ICEoY3R4LT5p X2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExPVykKKysJCSB8fCAhKGN0 eC0+b19jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSkKKysJCQln b3RvIGVycjsKKysjZW5kaWYKKyAJCXJlc2V0PTE7CisgCQlqPUVWUF9NRF9ibG9ja19zaXplKG1k KTsKKyAJCU9QRU5TU0xfYXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5rZXkpKTsKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlw dG8vTWFrZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9NYWtlZmlsZS5maXBzCTIwMDkt MDQtMDYgMTY6MzE6MzUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8v TWFrZWZpbGUJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNCwxNCAr MzQsMTQgQEAgR0VORVJBTD1NYWtlZmlsZSBSRUFETUUgY3J5cHRvLWxpYi5jb20gaQorIAorIExJ Qj0gJChUT1ApL2xpYmNyeXB0by5hCisgU0hBUkVEX0xJQj0gbGliY3J5cHRvJChTSExJQl9FWFQp CistTElCU1JDPQljcnlwdGxpYi5jIG1lbS5jIG1lbV9jbHIuYyBtZW1fZGJnLmMgY3ZlcnNpb24u YyBleF9kYXRhLmMgY3B0X2Vyci5jIGViY2RpYy5jIHVpZC5jIG9fdGltZS5jIG9fc3RyLmMgb19k aXIuYworLUxJQk9CSj0gY3J5cHRsaWIubyBtZW0ubyBtZW1fZGJnLm8gY3ZlcnNpb24ubyBleF9k YXRhLm8gY3B0X2Vyci5vIGViY2RpYy5vIHVpZC5vIG9fdGltZS5vIG9fc3RyLm8gb19kaXIubyAk KENQVUlEX09CSikKKytMSUJTUkM9CWNyeXB0bGliLmMgbWVtLmMgbWVtX2Nsci5jIG1lbV9kYmcu YyBjdmVyc2lvbi5jIGV4X2RhdGEuYyBjcHRfZXJyLmMgZWJjZGljLmMgdWlkLmMgb190aW1lLmMg b19zdHIuYyBvX2Rpci5jIG9faW5pdC5jIGZpcHNfZXJyLmMKKytMSUJPQko9IGNyeXB0bGliLm8g bWVtLm8gbWVtX2RiZy5vIGN2ZXJzaW9uLm8gZXhfZGF0YS5vIGNwdF9lcnIubyBlYmNkaWMubyB1 aWQubyBvX3RpbWUubyBvX3N0ci5vIG9fZGlyLm8gb19pbml0Lm8gZmlwc19lcnIubyAkKENQVUlE X09CSikKKyAKKyBTUkM9ICQoTElCU1JDKQorIAorIEVYSEVBREVSPSBjcnlwdG8uaCBvcGVuc3Ns di5oIG9wZW5zc2xjb25mLmggZWJjZGljLmggc3ltaGFja3MuaCBcCisgCW9zc2xfdHlwLmgKKy1I RUFERVI9CWNyeXB0bGliLmggYnVpbGRpbmYuaCBtZDMyX2NvbW1vbi5oIG9fdGltZS5oIG9fc3Ry Lmggb19kaXIuaCAkKEVYSEVBREVSKQorK0hFQURFUj0JY3J5cHRsaWIuaCBidWlsZGluZi5oIGZp cHNfbG9jbC5oIG1kMzJfY29tbW9uLmggb190aW1lLmggb19zdHIuaCBvX2Rpci5oICQoRVhIRUFE RVIpCisgCisgQUxMPSAgICAkKEdFTkVSQUwpICQoU1JDKSAkKEhFQURFUikKKyAKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL21kYzIvbWRjMmRnc3QuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kYzIvbWRj MmRnc3QuYy5maXBzCTIwMDQtMDctMjUgMjE6MTA6NDEuMDAwMDAwMDAwICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAw MDAwMDAwICswMjAwCitAQCAtNjEsNiArNjEsMTEgQEAKKyAjaW5jbHVkZSA8c3RyaW5nLmg+Cisg I2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvbWRjMi5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8 b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgCisgI3VuZGVmIGMybAorICNkZWZpbmUgYzJs KGMsbCkJKGwgPSgoREVTX0xPTkcpKCooKGMpKyspKSkgICAgLCBcCitAQCAtNzUsNyArODAsNyBA QAorIAkJCSooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4ZmYpKQorIAorIHN0 YXRpYyB2b2lkIG1kYzJfYm9keShNREMyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4s IHNpemVfdCBsZW4pOworLWludCBNREMyX0luaXQoTURDMl9DVFggKmMpCisrRklQU19OT05fRklQ U19NRF9Jbml0KE1EQzIpCisgCXsKKyAJYy0+bnVtPTA7CisgCWMtPnBhZF90eXBlPTE7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZGMyL21kYzIuaC5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL21kYzIvbWRjMi5oCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWRjMi9tZGMyLmgu ZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL21kYzIvbWRjMi5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAw CitAQCAtODAsNyArODAsOSBAQCB0eXBlZGVmIHN0cnVjdCBtZGMyX2N0eF9zdAorIAlpbnQgcGFk X3R5cGU7IC8qIGVpdGhlciAxIG9yIDIsIGRlZmF1bHQgMSAqLworIAl9IE1EQzJfQ1RYOworIAor LQorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9NREMyX0luaXQoTURDMl9DVFgg KmMpOworKyNlbmRpZgorIGludCBNREMyX0luaXQoTURDMl9DVFggKmMpOworIGludCBNREMyX1Vw ZGF0ZShNREMyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgc2l6ZV90IGxlbik7 CisgaW50IE1EQzJfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1EQzJfQ1RYICpjKTsKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kMi9tZDJfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAu MC9jcnlwdG8vbWQyL21kMl9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDIvbWQy X2Rnc3QuYy5maXBzCTIwMDctMDgtMzEgMTI6MTI6MzUuMDAwMDAwMDAwICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vbWQyL21kMl9kZ3N0LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAw MDAwMDAgKzAyMDAKK0BAIC02Miw2ICs2MiwxMSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL21kMi5o PgorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5 cHRvLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KysjZW5kaWYKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAKKyBjb25zdCBjaGFyIE1E Ml92ZXJzaW9uW109Ik1EMiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorQEAgLTExNiw3ICsx MjEsNyBAQCBjb25zdCBjaGFyICpNRDJfb3B0aW9ucyh2b2lkKQorIAkJcmV0dXJuKCJtZDIoaW50 KSIpOworIAl9CisgCistaW50IE1EMl9Jbml0KE1EMl9DVFggKmMpCisrRklQU19OT05fRklQU19N RF9Jbml0KE1EMikKKyAJeworIAljLT5udW09MDsKKyAJbWVtc2V0KGMtPnN0YXRlLDAsc2l6ZW9m IGMtPnN0YXRlKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kMi9tZDIuaC5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kMi9tZDIuaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRv L21kMi9tZDIuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQyL21kMi5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAw MDAwICswMjAwCitAQCAtODEsNiArODEsOSBAQCB0eXBlZGVmIHN0cnVjdCBNRDJzdGF0ZV9zdAor IAl9IE1EMl9DVFg7CisgCisgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9pZCk7CisrI2lmZGVm IE9QRU5TU0xfRklQUworK2ludCBwcml2YXRlX01EMl9Jbml0KE1EMl9DVFggKmMpOworKyNlbmRp ZgorIGludCBNRDJfSW5pdChNRDJfQ1RYICpjKTsKKyBpbnQgTUQyX1VwZGF0ZShNRDJfQ1RYICpj LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgTUQyX0ZpbmFs KHVuc2lnbmVkIGNoYXIgKm1kLCBNRDJfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL21kNC9tZDRfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ0L21kNF9k Z3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzCTIwMDct MDEtMjEgMTQ6MDc6MTEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8v bWQ0L21kNF9kZ3N0LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01 OSw2ICs1OSwxMSBAQAorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlICJtZDRfbG9jbC5o IgorICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2x2Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJy Lmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysj ZW5kaWYKKysKKyAKKyBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW109Ik1ENCIgT1BFTlNTTF9WRVJT SU9OX1BURVhUOworIAorQEAgLTcwLDcgKzc1LDcgQEAgY29uc3QgY2hhciBNRDRfdmVyc2lvbltd PSJNRDQiIE9QRU5TU0xfVgorICNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5 OGJhZGNmZUwKKyAjZGVmaW5lIElOSVRfREFUQV9EICh1bnNpZ25lZCBsb25nKTB4MTAzMjU0NzZM CisgCistaW50IE1ENF9Jbml0KE1ENF9DVFggKmMpCisrRklQU19OT05fRklQU19NRF9Jbml0KE1E NCkKKyAJeworIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJYy0+QT1JTklUX0RBVEFfQTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNC9tZDQuaC5maXBzIG9wZW5zc2wtMS4w LjAvY3J5cHRvL21kNC9tZDQuaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21kNC9tZDQuaC5m aXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vbWQ0L21kNC5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitA QCAtMTA1LDYgKzEwNSw5IEBAIHR5cGVkZWYgc3RydWN0IE1ENHN0YXRlX3N0CisgCXVuc2lnbmVk IGludCBudW07CisgCX0gTUQ0X0NUWDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHBy aXZhdGVfTUQ0X0luaXQoTUQ0X0NUWCAqYyk7CisrI2VuZGlmCisgaW50IE1ENF9Jbml0KE1ENF9D VFggKmMpOworIGludCBNRDRfVXBkYXRlKE1ENF9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNp emVfdCBsZW4pOworIGludCBNRDRfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENF9DVFggKmMp OworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ1L21kNV9kZ3N0LmMuZmlwcyBvcGVu c3NsLTEuMC4wL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRv L21kNS9tZDVfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMS4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYwkyMDEwLTAzLTMwIDEwOjM0 OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTU5LDYgKzU5LDExIEBACisgI2luY2x1ZGUgPHN0ZGlv Lmg+CisgI2luY2x1ZGUgIm1kNV9sb2NsLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorIGNvbnN0IGNoYXIgTUQ1X3Zl cnNpb25bXT0iTUQ1IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtNzAsNyArNzUsNyBA QCBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW109Ik1ENSIgT1BFTlNTTF9WCisgI2RlZmluZSBJTklU X0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAorICNkZWZpbmUgSU5JVF9EQVRBX0Qg KHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1pbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYykK KytGSVBTX05PTl9GSVBTX01EX0luaXQoTUQ1KQorIAl7CisgCW1lbXNldCAoYywwLHNpemVvZigq YykpOworIAljLT5BPUlOSVRfREFUQV9BOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8v bWQ1L21kNS5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vbWQ1L21kNS5oCistLS0gb3BlbnNz bC0xLjAuMC9jcnlwdG8vbWQ1L21kNS5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9tZDUvbWQ1LmgJMjAxMC0wMy0zMCAx MDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMDUsNiArMTA1LDkgQEAgdHlwZWRlZiBzdHJ1 Y3QgTUQ1c3RhdGVfc3QKKyAJdW5zaWduZWQgaW50IG51bTsKKyAJfSBNRDVfQ1RYOworIAorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgcHJpdmF0ZV9NRDVfSW5pdChNRDVfQ1RYICpjKTsKKysj ZW5kaWYKKyBpbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYyk7CisgaW50IE1ENV9VcGRhdGUoTUQ1X0NU WCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CisgaW50IE1ENV9GaW5hbCh1bnNp Z25lZCBjaGFyICptZCwgTUQ1X0NUWCAqYyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0 by9tZW0uYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21lbS5jCistLS0gb3BlbnNzbC0xLjAu MC9jcnlwdG8vbWVtLmMuZmlwcwkyMDA4LTExLTEyIDA0OjU3OjQ3LjAwMDAwMDAwMCArMDEwMAor KysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL21lbS5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAw MDAwICswMjAwCitAQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyB2b2lkICgqZnJlZV9sb2NrZWRf ZnVuYykodm9pZCAqKSAKKyAKKyAvKiBtYXkgYmUgY2hhbmdlZCBhcyBsb25nIGFzICdhbGxvd19j dXN0b21pemVfZGVidWcnIGlzIHNldCAqLworIC8qIFhYWCB1c2UgY29ycmVjdCBmdW5jdGlvbiBw b2ludGVyIHR5cGVzICovCistI2lmZGVmIENSWVBUT19NREVCVUcKKysjaWYgZGVmaW5lZChDUllQ VE9fTURFQlVHKSAmJiAhZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisgLyogdXNlIGRlZmF1bHQgZnVu Y3Rpb25zIGZyb20gbWVtX2RiZy5jICovCisgc3RhdGljIHZvaWQgKCptYWxsb2NfZGVidWdfZnVu Yykodm9pZCAqLGludCxjb25zdCBjaGFyICosaW50LGludCkKKyAJPSBDUllQVE9fZGJnX21hbGxv YzsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL29faW5pdC5jLmZpcHMgb3BlbnNzbC0x LjAuMC9jcnlwdG8vb19pbml0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9vX2luaXQuYy5m aXBzCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MC9jcnlwdG8vb19pbml0LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BA IC0wLDAgKzEsODAgQEAKKysvKiBvX2luaXQuYyAqLworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhl biBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAorKyAqIHByb2pl Y3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDcgVGhlIE9w 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 U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICoKKysgKiBUaGlz IHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5IEVyaWMg WW91bmcKKysgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisrICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisr ICoKKysgKi8KKysKKysjaW5jbHVkZSA8ZV9vcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKworKy8qIFBlcmZvcm0gYW55IGVzc2VudGlhbCBPcGVuU1NMIGluaXRpYWxpemF0aW9uIG9w ZXJhdGlvbnMuCisrICogQ3VycmVudGx5IG9ubHkgc2V0cyBGSVBTIGNhbGxiYWNrcworKyAqLwor KworK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCkKKysJeworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJc3RhdGljIGludCBkb25lID0gMDsKKysJaWYgKCFkb25lKQorKwkJeworKyNpZmRl ZiBDUllQVE9fTURFQlVHCisrCQlDUllQVE9fbWFsbG9jX2RlYnVnX2luaXQoKTsKKysjZW5kaWYK KysJCWRvbmUgPSAxOworKwkJfQorKyNlbmRpZgorKwl9CisrCQkKKysKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjAvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0 by9vcGVuc3NsY29uZi5oLmluCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vb3BlbnNzbGNvbmYu aC5pbi5maXBzCTIwMDUtMTItMTYgMTE6Mzc6MjMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNz bC0xLjAuMC9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbgkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAw MDAwMCArMDIwMAorQEAgLTEsNSArMSwyMCBAQAorIC8qIGNyeXB0by9vcGVuc3NsY29uZi5oLmlu ICovCisgCisrI2lmZGVmIE9QRU5TU0xfRE9JTkdfTUFLRURFUEVORAorKworKy8qIEluY2x1ZGUg YW55IHN5bWJvbHMgaGVyZSB0aGF0IGhhdmUgdG8gYmUgZXhwbGljaXRseSBzZXQgdG8gZW5hYmxl IGEgZmVhdHVyZQorKyAqIHRoYXQgc2hvdWxkIGJlIHZpc2libGUgdG8gbWFrZWRlcGVuZC4KKysg KgorKyAqIFtPdXIgIm1ha2UgZGVwZW5kIiBkb2Vzbid0IGFjdHVhbGx5IGxvb2sgYXQgdGhpcywg d2UgdXNlIGFjdHVhbCBidWlsZCBzZXR0aW5ncworKyAqIGluc3RlYWQ7IHdlIHdhbnQgdG8gbWFr ZSBpdCBlYXN5IHRvIHJlbW92ZSBzdWJkaXJlY3RvcmllcyB3aXRoIGRpc2FibGVkIGFsZ29yaXRo bXMuXQorKyAqLworKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisrI2RlZmluZSBPUEVOU1NMX0ZJ UFMKKysjZW5kaWYKKysKKysjZW5kaWYKKysKKyAvKiBHZW5lcmF0ZSA4MDM4NiBjb2RlPyAqLwor ICN1bmRlZiBJMzg2X09OTFkKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3BrY3Mx Mi9wMTJfY3J0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9wa2NzMTIvcDEyX2NydC5jCist LS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcGtjczEyL3AxMl9jcnQuYy5maXBzCTIwMDktMDMtMDkg MTQ6MDg6MDQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcGtjczEy L3AxMl9jcnQuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTU5LDYg KzU5LDEwIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisg I2luY2x1ZGUgPG9wZW5zc2wvcGtjczEyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyAKKyBzdGF0aWMgaW50IHBrY3Mx Ml9hZGRfYmFnKFNUQUNLX09GKFBLQ1MxMl9TQUZFQkFHKSAqKnBiYWdzLCBQS0NTMTJfU0FGRUJB RyAqYmFnKTsKK0BAIC05MCw3ICs5NCwxNCBAQCBQS0NTMTIgKlBLQ1MxMl9jcmVhdGUoY2hhciAq cGFzcywgY2hhciAqCisgCisgCS8qIFNldCBkZWZhdWx0cyAqLworIAlpZiAoIW5pZF9jZXJ0KQor KwkJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJCWlmIChGSVBTX21vZGUoKSkKKysJCQluaWRf Y2VydCA9IE5JRF9wYmVfV2l0aFNIQTFBbmQzX0tleV9UcmlwbGVERVNfQ0JDOworKwkJZWxzZQor KyNlbmRpZgorIAkJbmlkX2NlcnQgPSBOSURfcGJlX1dpdGhTSEExQW5kNDBCaXRSQzJfQ0JDOwor KwkJfQorIAlpZiAoIW5pZF9rZXkpCisgCQluaWRfa2V5ID0gTklEX3BiZV9XaXRoU0hBMUFuZDNf S2V5X1RyaXBsZURFU19DQkM7CisgCWlmICghaXRlcikKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9tZF9y YW5kLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYW5kL21kX3JhbmQuYy5maXBzCTIwMDkt MDEtMDMgMTA6MjU6MzIuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8v cmFuZC9tZF9yYW5kLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0x MjYsNiArMTI2LDEwIEBACisgCisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjZW5kaWYKKysKKyAKKyAjaWZkZWYgQk5fREVCVUcKKyAjIGRlZmluZSBQ UkVESUNUCitAQCAtMzQyLDYgKzM0NiwxNCBAQCBzdGF0aWMgaW50IHNzbGVheV9yYW5kX2J5dGVz KHVuc2lnbmVkIGNoCisgI2VuZGlmCisgCWludCBkb19zdGlyX3Bvb2wgPSAwOworIAorKyNpZmRl ZiBPUEVOU1NMX0ZJUFMKKysJaWYoRklQU19tb2RlKCkpCisrCSAgICB7CisrCSAgICBGSVBTZXJy KEZJUFNfRl9TU0xFQVlfUkFORF9CWVRFUyxGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJICAg IHJldHVybiAwOworKwkgICAgfQorKyNlbmRpZgorKworICNpZmRlZiBQUkVESUNUCisgCWlmIChy YW5kX3ByZWRpY3RhYmxlKQorIAkJeworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFu ZC9yYW5kX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jCist LS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9yYW5kX2Vyci5jLmZpcHMJMjAwNi0xMS0yMSAy MjoyOTo0MS4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYW5kL3Jh bmRfZXJyLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC03MCw2ICs3 MCwxMyBAQAorIAorIHN0YXRpYyBFUlJfU1RSSU5HX0RBVEEgUkFORF9zdHJfZnVuY3RzW109Cisg CXsKKyt7RVJSX0ZVTkMoUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRCksCSJFTkdfUkFO RF9HRVRfUkFORF9NRVRIT0QifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfUkFORCksCSJGSVBT X1JBTkQifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfUkFORF9CWVRFUyksCSJGSVBTX1JBTkRf QllURVMifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfUkFORF9TRVRfRFQpLAkiRklQU19SQU5E X1NFVF9EVCJ9LAorK3tFUlJfRlVOQyhSQU5EX0ZfRklQU19TRVRfRFQpLAkiRklQU19TRVRfRFQi fSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfU0VUX1BSTkdfU0VFRCksCSJGSVBTX1NFVF9QUk5H X1NFRUQifSwKKyt7RVJSX0ZVTkMoUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSksCSJGSVBTX1NF VF9URVNUX01PREUifSwKKyB7RVJSX0ZVTkMoUkFORF9GX1JBTkRfR0VUX1JBTkRfTUVUSE9EKSwJ IlJBTkRfZ2V0X3JhbmRfbWV0aG9kIn0sCisge0VSUl9GVU5DKFJBTkRfRl9TU0xFQVlfUkFORF9C WVRFUyksCSJTU0xFQVlfUkFORF9CWVRFUyJ9LAorIHswLE5VTEx9CitAQCAtNzcsNyArODQsMTcg QEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSQU5EX3N0cl9mdW5jdHNbXQorIAorIHN0YXRpYyBF UlJfU1RSSU5HX0RBVEEgUkFORF9zdHJfcmVhc29uc1tdPQorIAl7Cisre0VSUl9SRUFTT04oUkFO RF9SX05PTl9GSVBTX01FVEhPRCkgICAgICAsIm5vbiBmaXBzIG1ldGhvZCJ9LAorK3tFUlJfUkVB U09OKFJBTkRfUl9OT1RfSU5fVEVTVF9NT0RFKSAgICAgLCJub3QgaW4gdGVzdCBtb2RlIn0sCisr e0VSUl9SRUFTT04oUkFORF9SX05PX0tFWV9TRVQpICAgICAgICAgICAsIm5vIGtleSBzZXQifSwK Kyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNIKSwicHJuZyBhc2tp bmcgZm9yIHRvbyBtdWNoIn0sCisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdfRVJST1IpICAgICAg ICAgICAsInBybmcgZXJyb3IifSwKKyt7RVJSX1JFQVNPTihSQU5EX1JfUFJOR19LRVlFRCkgICAg ICAgICAgICwicHJuZyBrZXllZCJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX05PVF9SRUtF WUVEKSAgICAgLCJwcm5nIG5vdCByZWtleWVkIn0sCisre0VSUl9SRUFTT04oUkFORF9SX1BSTkdf Tk9UX1JFU0VFREVEKSAgICAsInBybmcgbm90IHJlc2VlZGVkIn0sCisge0VSUl9SRUFTT04oUkFO RF9SX1BSTkdfTk9UX1NFRURFRCkgICAgICAsIlBSTkcgbm90IHNlZWRlZCJ9LAorK3tFUlJfUkVB U09OKFJBTkRfUl9QUk5HX1NFRURfTVVTVF9OT1RfTUFUQ0hfS0VZKSwicHJuZyBzZWVkIG11c3Qg bm90IG1hdGNoIGtleSJ9LAorK3tFUlJfUkVBU09OKFJBTkRfUl9QUk5HX1NUVUNLKSAgICAgICAg ICAgLCJwcm5nIHN0dWNrIn0sCisgezAsTlVMTH0KKyAJfTsKKyAKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAvY3J5cHRvL3JhbmQvcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFuZC9y YW5kLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYW5kL3JhbmQuaC5maXBzCTIwMTAtMDMt MzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmFu ZC9yYW5kLmgJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMjgsMTEg KzEyOCwyOCBAQCB2b2lkIEVSUl9sb2FkX1JBTkRfc3RyaW5ncyh2b2lkKTsKKyAvKiBFcnJvciBj b2RlcyBmb3IgdGhlIFJBTkQgZnVuY3Rpb25zLiAqLworIAorIC8qIEZ1bmN0aW9uIGNvZGVzLiAq LworKyNkZWZpbmUgUkFORF9GX0VOR19SQU5EX0dFVF9SQU5EX01FVEhPRAkJCSAxMDgKKysjZGVm aW5lIFJBTkRfRl9GSVBTX1JBTkQJCQkJIDEwMworKyNkZWZpbmUgUkFORF9GX0ZJUFNfUkFORF9C WVRFUwkJCQkgMTAyCisrI2RlZmluZSBSQU5EX0ZfRklQU19SQU5EX1NFVF9EVAkJCQkgMTA2Cisr I2RlZmluZSBSQU5EX0ZfRklQU19TRVRfRFQJCQkJIDEwNAorKyNkZWZpbmUgUkFORF9GX0ZJUFNf U0VUX1BSTkdfU0VFRAkJCSAxMDcKKysjZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9URVNUX01PREUJ CQkgMTA1CisgI2RlZmluZSBSQU5EX0ZfUkFORF9HRVRfUkFORF9NRVRIT0QJCQkgMTAxCisgI2Rl ZmluZSBSQU5EX0ZfU1NMRUFZX1JBTkRfQllURVMJCQkgMTAwCisgCisgLyogUmVhc29uIGNvZGVz LiAqLworKyNkZWZpbmUgUkFORF9SX05PTl9GSVBTX01FVEhPRAkJCQkgMTA1CisrI2RlZmluZSBS QU5EX1JfTk9UX0lOX1RFU1RfTU9ERQkJCQkgMTA2CisrI2RlZmluZSBSQU5EX1JfTk9fS0VZX1NF VAkJCQkgMTA3CisrI2RlZmluZSBSQU5EX1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNICQkJIDEw MQorKyNkZWZpbmUgUkFORF9SX1BSTkdfRVJST1IJCQkJIDEwOAorKyNkZWZpbmUgUkFORF9SX1BS TkdfS0VZRUQJCQkJIDEwOQorKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFS0VZRUQJCQkJIDEw MgorKyNkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFU0VFREVECQkJIDEwMworICNkZWZpbmUgUkFO RF9SX1BSTkdfTk9UX1NFRURFRAkJCQkgMTAwCisrI2RlZmluZSBSQU5EX1JfUFJOR19TRUVEX01V U1RfTk9UX01BVENIX0tFWQkJIDExMAorKyNkZWZpbmUgUkFORF9SX1BSTkdfU1RVQ0sJCQkJIDEw NAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL2Ny eXB0by9yYW5kL3JhbmRfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYW5kL3JhbmRf bGliLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYW5kL3JhbmRfbGliLmMuZmlwcwkyMDA4 LTExLTEyIDA0OjU4OjA0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRv L3JhbmQvcmFuZF9saWIuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAg LTYwLDYgKzYwLDEyIEBACisgI2luY2x1ZGUgPHRpbWUuaD4KKyAjaW5jbHVkZSAiY3J5cHRsaWIu aCIKKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgInJhbmRfbGNsLmgiCisr I2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjZW5kaWYKKysKKyAjaWZuZGVmIE9QRU5TU0xfTk9f RU5HSU5FCisgI2luY2x1ZGUgPG9wZW5zc2wvZW5naW5lLmg+CisgI2VuZGlmCitAQCAtMTAyLDgg KzEwOCwxOSBAQCBjb25zdCBSQU5EX01FVEhPRCAqUkFORF9nZXRfcmFuZF9tZXRob2QoCisgCQkJ ZnVuY3RfcmVmID0gZTsKKyAJCWVsc2UKKyAjZW5kaWYKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CQkJZGVmYXVsdF9SQU5EX21ldGggPSBGSVBTX21vZGUoKSA/IEZJUFNfcmFuZF9tZXRob2QoKSA6 IFJBTkRfU1NMZWF5KCk7CisrCQl9CisrCWlmIChGSVBTX21vZGUoKQorKwkJJiYgZGVmYXVsdF9S QU5EX21ldGggIT0gRklQU19yYW5kX2NoZWNrKCkpCisrCSAgICB7CisrCSAgICBSQU5EZXJyKFJB TkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCxSQU5EX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysJICAg IHJldHVybiAwOworKwkgICAgfQorKyNlbHNlCisgCQkJZGVmYXVsdF9SQU5EX21ldGggPSBSQU5E X1NTTGVheSgpOworIAkJfQorKyNlbmRpZgorIAlyZXR1cm4gZGVmYXVsdF9SQU5EX21ldGg7Cisg CX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjMi9yYzIuaC5maXBzIG9wZW5z c2wtMS4wLjAvY3J5cHRvL3JjMi9yYzIuaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjMi9y YzIuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMC9jcnlwdG8vcmMyL3JjMi5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICsw MjAwCitAQCAtNzksNyArNzksOSBAQCB0eXBlZGVmIHN0cnVjdCByYzJfa2V5X3N0CisgCVJDMl9J TlQgZGF0YVs2NF07CisgCX0gUkMyX0tFWTsKKyAKKy0gCisrI2lmZGVmIE9QRU5TU0xfRklQUyAK Kyt2b2lkIHByaXZhdGVfUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1 bnNpZ25lZCBjaGFyICpkYXRhLGludCBiaXRzKTsKKysjZW5kaWYKKyB2b2lkIFJDMl9zZXRfa2V5 KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSxpbnQgYml0 cyk7Cisgdm9pZCBSQzJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWdu ZWQgY2hhciAqb3V0LFJDMl9LRVkgKmtleSwKKyAJCSAgICAgaW50IGVuYyk7CitkaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9yYzIvcmMyX3NrZXkuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL3JjMi9yYzJfc2tleS5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmMyL3JjMl9za2V5 LmMuZmlwcwkyMDA3LTA5LTE4IDIzOjEwOjMyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjAvY3J5cHRvL3JjMi9yYzJfc2tleS5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAw ICswMjAwCitAQCAtNTcsNiArNTcsMTEgQEAKKyAgKi8KKyAKKyAjaW5jbHVkZSA8b3BlbnNzbC9y YzIuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBT CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworICNpbmNsdWRlICJyYzJf bG9jbC5oIgorIAorIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGtleV90YWJsZVsyNTZdPXsK K0BAIC05NCw4ICs5OSwyMCBAQCBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlfdGFibGVb MjU2CisgICogQlNBRkUgdXNlcyB0aGUgJ3JldGFyZGVkJyB2ZXJzaW9uLiAgV2hhdCBJIHByZXZp b3VzbHkgc2hpcHBlZCBpcworICAqIHRoZSBzYW1lIGFzIHNwZWNpZnlpbmcgMTAyNCBmb3IgdGhl ICdiaXRzJyBwYXJhbWV0ZXIuICBCc2FmZSB1c2VzCisgICogYSB2ZXJzaW9uIHdoZXJlIHRoZSBi aXRzIHBhcmFtZXRlciBpcyB0aGUgc2FtZSBhcyBsZW4qOCAqLworKworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKyB2b2lkIFJDMl9zZXRfa2V5KFJDMl9LRVkgKmtleSwgaW50IGxlbiwgY29uc3QgdW5z aWduZWQgY2hhciAqZGF0YSwgaW50IGJpdHMpCisgCXsKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJ RklQU19CQURfQUJPUlQoUkMyKQorKwlwcml2YXRlX1JDMl9zZXRfa2V5KGtleSwgbGVuLCBkYXRh LCBiaXRzKTsKKysJfQorK3ZvaWQgcHJpdmF0ZV9SQzJfc2V0X2tleShSQzJfS0VZICprZXksIGlu dCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisrCQkJCQkJCQlpbnQgYml0cykKKysj ZWxzZQorK3ZvaWQgUkMyX3NldF9rZXkoUkMyX0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNp Z25lZCBjaGFyICpkYXRhLCBpbnQgYml0cykKKysjZW5kaWYKKysJeworIAlpbnQgaSxqOworIAl1 bnNpZ25lZCBjaGFyICprOworIAlSQzJfSU5UICpraTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL3JjNC9hc20vcmM0LXMzOTB4LnBsLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0 L2FzbS9yYzQtczM5MHgucGwKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvYXNtL3JjNC1z MzkweC5wbC5maXBzCTIwMDktMDItMTIgMTU6NDg6NDkuMDAwMDAwMDAwICswMTAwCisrKysgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vcmM0L2FzbS9yYzQtczM5MHgucGwJMjAxMC0wMy0zMCAxMDozNDo0 MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0yMDIsNCArMjAyLDYgQEAgUkM0X29wdGlvbnM6CisgLnN0 cmluZwkicmM0KDh4LGNoYXIpIgorIF9fXworIAorKyRjb2RlID1+IHMvUkM0X3NldF9rZXkvcHJp dmF0ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJUFN9IG5lICIiKTsKKysKKyBwcmludCAkY29k ZTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbC5m aXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbAorLS0tIG9wZW5z c2wtMS4wLjAvY3J5cHRvL3JjNC9hc20vcmM0LXg4Nl82NC5wbC5maXBzCTIwMDktMDQtMjcgMjE6 MzE6MDQuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L2FzbS9y YzQteDg2XzY0LnBsCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtNDk5 LDYgKzQ5OSw4IEBAIF9fXworIAorICRjb2RlID1+IHMvIyhbYndkXSkvJDEvZ207CisgCisrJGNv ZGUgPX4gcy9SQzRfc2V0X2tleS9wcml2YXRlX1JDNF9zZXRfa2V5L2cgaWYgKCRFTlZ7RklQU30g bmUgIiIpOworKworIHByaW50ICRjb2RlOworIAorIGNsb3NlIFNURE9VVDsKK2RpZmYgLXVwIG9w ZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbC5maXBzIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL3JjNC9hc20vcmM0LTU4Ni5wbAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9h c20vcmM0LTU4Ni5wbC5maXBzCTIwMDctMTItMDIgMjI6MzI6MDMuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L2FzbS9yYzQtNTg2LnBsCTIwMTAtMDMtMzAgMTA6 MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTY2LDggKzE2NiwxMiBAQCAkaWR4PSJlZHgiOwor IAorICZleHRlcm5hbF9sYWJlbCgiT1BFTlNTTF9pYTMyY2FwX1AiKTsKKyAKKyskc2V0a2V5ZnVu YyA9ICJSQzRfc2V0X2tleSI7CisrJHNldGtleWZ1bmMgPSAicHJpdmF0ZV9SQzRfc2V0X2tleSIg aWYgKCRFTlZ7RklQU30gbmUgIiIpOworKworKworICMgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZ ICprZXksaW50IGxlbixjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKy0mZnVuY3Rpb25fYmVn aW4oIlJDNF9zZXRfa2V5Iik7CisrJmZ1bmN0aW9uX2JlZ2luKCRzZXRrZXlmdW5jKTsKKyAJJm1v dgkoJG91dCwmd3BhcmFtKDApKTsJCSMgbG9hZCBrZXkKKyAJJm1vdgkoJGlkaSwmd3BhcmFtKDEp KTsJCSMgbG9hZCBsZW4KKyAJJm1vdgkoJGlucCwmd3BhcmFtKDIpKTsJCSMgbG9hZCBkYXRhCitA QCAtMjQ1LDcgKzI0OSw3IEBAICRpZHg9ImVkeCI7CisgCSZ4b3IJKCJlYXgiLCJlYXgiKTsKKyAJ Jm1vdgkoJkRXUCgtOCwkb3V0KSwiZWF4Iik7CQkjIGtleS0+eD0wOworIAkmbW92CSgmRFdQKC00 LCRvdXQpLCJlYXgiKTsJCSMga2V5LT55PTA7CistJmZ1bmN0aW9uX2VuZCgiUkM0X3NldF9rZXki KTsKKysmZnVuY3Rpb25fZW5kKCRzZXRrZXlmdW5jKTsKKyAKKyAjIGNvbnN0IGNoYXIgKlJDNF9v cHRpb25zKHZvaWQpOworICZmdW5jdGlvbl9iZWdpbl9CKCJSQzRfb3B0aW9ucyIpOworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMC9j cnlwdG8vcmM0L01ha2VmaWxlCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L01ha2VmaWxl LmZpcHMJMjAwOS0wMi0xMSAxMTowMTozNi4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEu MC4wL2NyeXB0by9yYzQvTWFrZWZpbGUJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAy MDAKK0BAIC0yMSw4ICsyMSw4IEBAIFRFU1Q9cmM0dGVzdC5jCisgQVBQUz0KKyAKKyBMSUI9JChU T1ApL2xpYmNyeXB0by5hCistTElCU1JDPXJjNF9za2V5LmMgcmM0X2VuYy5jCistTElCT0JKPSQo UkM0X0VOQykKKytMSUJTUkM9cmM0X3NrZXkuYyByYzRfZW5jLmMgcmM0X2ZibGsuYworK0xJQk9C Sj0kKFJDNF9FTkMpIHJjNF9mYmxrLm8KKyAKKyBTUkM9ICQoTElCU1JDKQorIAorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L3JjNF9mYmxrLmMuZmlwcyBvcGVuc3NsLTEuMC4wL2Ny eXB0by9yYzQvcmM0X2ZibGsuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9yYzRfZmJs ay5jLmZpcHMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9yYzQvcmM0X2ZibGsuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAw MCArMDIwMAorQEAgLTAsMCArMSw3NSBAQAorKy8qIGNyeXB0by9yYzQvcmM0X2ZibGsuYyAqLwor Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMDggVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5 IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAq CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz IHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxs IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlz CisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3Bl blNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwor KyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0 d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRl biBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CisrICovCisrCisrCisrI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+CisrI2luY2x1ZGUg InJjNF9sb2NsLmgiCisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNlbmRpZgorKworKy8qIEZJUFMgbW9kZSBibG9ja2luZyBmb3IgUkM0IGhh cyB0byBiZSBkb25lIHNlcGFyYXRlbHkgc2luY2UgUkM0X3NldF9rZXkKKysgKiBtYXkgYmUgaW1w bGVtZW50ZWQgaW4gYW4gYXNzZW1ibHkgbGFuZ3VhZ2UgZmlsZS4KKysgKi8KKysKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCisrCXsKKysJaWYgKEZJUFNfbW9kZSgpKQorKwkJRklQ U19CQURfQUJPUlQoUkM0KQorKwlwcml2YXRlX1JDNF9zZXRfa2V5KGtleSwgbGVuLCBkYXRhKTsK KysJfQorKyNlbmRpZgorKworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L3JjNC5o LmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmM0L3JjNC5oCistLS0gb3BlbnNzbC0xLjAuMC9j cnlwdG8vcmM0L3JjNC5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0Ni4wMDAwMDAwMDAgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvcmM0LmgJMjAxMC0wMy0zMCAxMDozNDo0MS4w MDAwMDAwMDAgKzAyMDAKK0BAIC03OCw2ICs3OCw5IEBAIHR5cGVkZWYgc3RydWN0IHJjNF9rZXlf c3QKKyAKKyAgCisgY29uc3QgY2hhciAqUkM0X29wdGlvbnModm9pZCk7CisrI2lmZGVmIE9QRU5T U0xfRklQUworK3ZvaWQgcHJpdmF0ZV9SQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4s IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworKyNlbmRpZgorIHZvaWQgUkM0X3NldF9rZXko UkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyB2b2lk IFJDNChSQzRfS0VZICprZXksIHNpemVfdCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGF0 YSwKKyAJCXVuc2lnbmVkIGNoYXIgKm91dGRhdGEpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9j cnlwdG8vcmM0L3JjNF9za2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yYzQvcmM0X3Nr ZXkuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JjNC9yYzRfc2tleS5jLmZpcHMJMjAwNy0w MS0yMSAxNDowNzoxMy4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9y YzQvcmM0X3NrZXkuYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTU5 LDYgKzU5LDExIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvcmM0Lmg+CisgI2luY2x1ZGUgInJjNF9s b2NsLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbHYuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9jcnlwdG8uaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNlbmRpZgorKworIAorIGNvbnN0IGNoYXIgUkM0X3ZlcnNpb25bXT0iUkM0IiBPUEVO U1NMX1ZFUlNJT05fUFRFWFQ7CisgCitAQCAtODUsNyArOTAsMTEgQEAgY29uc3QgY2hhciAqUkM0 X29wdGlvbnModm9pZCkKKyAgKiBEYXRlOiBXZWQsIDE0IFNlcCAxOTk0IDA2OjM1OjMxIEdNVAor ICAqLworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKyt2b2lkIHByaXZhdGVfUkM0X3NldF9rZXko UkM0X0tFWSAqa2V5LCBpbnQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQorKyNlbHNl Cisgdm9pZCBSQzRfc2V0X2tleShSQzRfS0VZICprZXksIGludCBsZW4sIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmRhdGEpCisrI2VuZGlmCisgCXsKKyAgICAgICAgIHJlZ2lzdGVyIFJDNF9JTlQgdG1w OworICAgICAgICAgcmVnaXN0ZXIgaW50IGlkMSxpZDI7CitAQCAtMTI2LDcgKzEzNSwxMiBAQCB2 b2lkIFJDNF9zZXRfa2V5KFJDNF9LRVkgKmtleSwgaW50IGxlbiwgCisgCQkgKiBtb2R1bGUuLi4K KyAJCSAqCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAJCSAqLworKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysJCXVuc2lnbmVkIGxvbmcgKmlhMzJjYXBfcHRyID0gT1BFTlNTTF9pYTMyY2FwX2xv YygpOworKwkJaWYgKGlhMzJjYXBfcHRyICYmICgqaWEzMmNhcF9wdHIgJiAoMTw8MjgpKSkgewor KyNlbHNlCisgCQlpZiAoT1BFTlNTTF9pYTMyY2FwX1AgJiAoMTw8MjgpKSB7CisrI2VuZGlmCisg CQkJdW5zaWduZWQgY2hhciAqY3A9KHVuc2lnbmVkIGNoYXIgKilkOworIAorIAkJCWZvciAoaT0w O2k8MjU2O2krKykgY3BbaV09aTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JpcGVt ZC9yaXBlbWQuaC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaAorLS0t IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JpcGVtZC9yaXBlbWQuaC5maXBzCTIwMTAtMDMtMzAgMTA6 MzM6NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmlwZW1kL3Jp cGVtZC5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtOTEsNiArOTEs OSBAQCB0eXBlZGVmIHN0cnVjdCBSSVBFTUQxNjBzdGF0ZV9zdAorIAl1bnNpZ25lZCBpbnQgICBu dW07CisgCX0gUklQRU1EMTYwX0NUWDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50IHBy aXZhdGVfUklQRU1EMTYwX0luaXQoUklQRU1EMTYwX0NUWCAqYyk7CisrI2VuZGlmCisgaW50IFJJ UEVNRDE2MF9Jbml0KFJJUEVNRDE2MF9DVFggKmMpOworIGludCBSSVBFTUQxNjBfVXBkYXRlKFJJ UEVNRDE2MF9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBSSVBF TUQxNjBfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFJJUEVNRDE2MF9DVFggKmMpOworZGlmZiAt dXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEu MC4wL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3Jp cGVtZC9ybWRfZGdzdC5jLmZpcHMJMjAwNy0wMS0yMSAxNDowNzoxMy4wMDAwMDAwMDAgKzAxMDAK KysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwkyMDEwLTAzLTMwIDEw OjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTU5LDYgKzU5LDExIEBACisgI2luY2x1ZGUgPHN0 ZGlvLmg+CisgI2luY2x1ZGUgInJtZF9sb2NsLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNz bHYuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorIGNvbnN0IGNoYXIgUk1E MTYwX3ZlcnNpb25bXT0iUklQRS1NRDE2MCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorQEAg LTY5LDcgKzc0LDcgQEAgY29uc3QgY2hhciBSTUQxNjBfdmVyc2lvbltdPSJSSVBFLU1EMTYwIgor ICAgICAgdm9pZCByaXBlbWQxNjBfYmxvY2soUklQRU1EMTYwX0NUWCAqYywgdW5zaWduZWQgbG9u ZyAqcCxzaXplX3QgbnVtKTsKKyAjICBlbmRpZgorIAorLWludCBSSVBFTUQxNjBfSW5pdChSSVBF TUQxNjBfQ1RYICpjKQorK0ZJUFNfTk9OX0ZJUFNfTURfSW5pdChSSVBFTUQxNjApCisgCXsKKyAJ bWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisgCWMtPkE9UklQRU1EMTYwX0E7CitkaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2VheS5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlw dG8vcnNhL3JzYV9lYXkuYworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfZWF5LmMu ZmlwcwkyMDA4LTA5LTE0IDE1OjUxOjQ0LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL3JzYS9yc2FfZWF5LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAy MDAKK0BAIC0xMTQsNiArMTE0LDEwIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5j bHVkZSA8b3BlbnNzbC9yc2EuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyAjaWZuZGVmIFJTQV9OVUxMCisgCitAQCAtMTM4LDcg KzE0Miw3IEBAIHN0YXRpYyBSU0FfTUVUSE9EIHJzYV9wa2NzMV9lYXlfbWV0aD17CisgCUJOX21v ZF9leHBfbW9udCwgLyogWFhYIHByb2JhYmx5IHdlIHNob3VsZCBub3QgdXNlIE1vbnRnb21lcnkg aWYgIGUgPT0gMyAqLworIAlSU0FfZWF5X2luaXQsCisgCVJTQV9lYXlfZmluaXNoLAorLQkwLCAv KiBmbGFncyAqLworKwlSU0FfRkxBR19GSVBTX01FVEhPRCwgLyogZmxhZ3MgKi8KKyAJTlVMTCwK KyAJMCwgLyogcnNhX3NpZ24gKi8KKyAJMCwgLyogcnNhX3ZlcmlmeSAqLworQEAgLTE1MCw2ICsx NTQsMTYgQEAgY29uc3QgUlNBX01FVEhPRCAqUlNBX1BLQ1MxX1NTTGVheSh2b2lkKQorIAlyZXR1 cm4oJnJzYV9wa2NzMV9lYXlfbWV0aCk7CisgCX0KKyAKKysvKiBVc2FnZSBleGFtcGxlOworKyAq ICAgIE1PTlRfSEVMUEVSKHJzYSwgYm5fY3R4LCBwLCByc2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FD SEVfUFJJVkFURSwgZ290byBlcnIpOworKyAqLworKyNkZWZpbmUgTU9OVF9IRUxQRVIocnNhLCBj dHgsIG0sIHByZV9jb25kLCBlcnJfaW5zdHIpIFwKKysJaWYoKHByZV9jb25kKSAmJiAoKHJzYSkt Pl9tZXRob2RfbW9kXyMjbSA9PSBOVUxMKSAmJiBcCisrCQkJIUJOX01PTlRfQ1RYX3NldF9sb2Nr ZWQoJigocnNhKS0+X21ldGhvZF9tb2RfIyNtKSwgXAorKwkJCQlDUllQVE9fTE9DS19SU0EsIFwK KysJCQkJKHJzYSktPm0sIChjdHgpKSkgXAorKwkJZXJyX2luc3RyCisrCisgc3RhdGljIGludCBS U0FfZWF5X3B1YmxpY19lbmNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9t LAorIAkgICAgIHVuc2lnbmVkIGNoYXIgKnRvLCBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCisgCXsK K0BAIC0xNTgsNiArMTcyLDIzIEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChp bnQgZmwKKyAJdW5zaWduZWQgY2hhciAqYnVmPU5VTEw7CisgCUJOX0NUWCAqY3R4PU5VTEw7Cisg CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZihGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmIChG SVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJUFNfRl9SU0FfRUFZ X1BVQkxJQ19FTkNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJZ290byBl cnI7CisrCQkJfQorKworKwkJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9G SVBTX01JTl9NT0RVTFVTX0JJVFMpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BV QkxJQ19FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKwkJCXJldHVybiAtMTsK KysJCQl9CisrCQl9CisrI2VuZGlmCisrCisgCWlmIChCTl9udW1fYml0cyhyc2EtPm4pID4gT1BF TlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUykKKyAJCXsKKyAJCVJTQWVycihSU0FfRl9SU0FfRUFZ X1BVQkxJQ19FTkNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7CitAQCAtMjIzLDkgKzI1 NCw3IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wdWJsaWNfZW5jcnlwdChpbnQgZmwKKyAJCWdvdG8g ZXJyOworIAkJfQorIAorLQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykK Ky0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQ VE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKKy0JCQlnb3RvIGVycjsKKysJTU9OVF9IRUxQRVIo cnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdvdG8gZXJy KTsKKyAKKyAJaWYgKCFyc2EtPm1ldGgtPmJuX21vZF9leHAocmV0LGYscnNhLT5lLHJzYS0+bixj dHgsCisgCQlyc2EtPl9tZXRob2RfbW9kX24pKSBnb3RvIGVycjsKK0BAIC0zNTUsNiArMzg0LDIz IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9wcml2YXRlX2VuY3J5cHQoaW50IGYKKyAJaW50IGxvY2Fs X2JsaW5kaW5nID0gMDsKKyAJQk5fQkxJTkRJTkcgKmJsaW5kaW5nID0gTlVMTDsKKyAKKysjaWZk ZWYgT1BFTlNTTF9GSVBTCisrCWlmIChGSVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkpCisrCQkJeworKwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFU RV9FTkNSWVBULEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrCQkJZ290byBlcnI7Cisr CQkJfQorKworKwkJaWYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01J Tl9NT0RVTFVTX0JJVFMpCisrCQkJeworKwkJCVJTQWVycihSU0FfRl9SU0FfRUFZX1BSSVZBVEVf RU5DUllQVCwgUlNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysJCQlyZXR1cm4gLTE7CisrCQkJ fQorKwkJfQorKyNlbmRpZgorKworIAlpZiAoKGN0eD1CTl9DVFhfbmV3KCkpID09IE5VTEwpIGdv dG8gZXJyOworIAlCTl9DVFhfc3RhcnQoY3R4KTsKKyAJZiAgID0gQk5fQ1RYX2dldChjdHgpOwor QEAgLTQzMiw5ICs0NzgsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGlu dCBmCisgCQllbHNlCisgCQkJZD0gcnNhLT5kOworIAorLQkJaWYgKHJzYS0+ZmxhZ3MgJiBSU0Ff RkxBR19DQUNIRV9QVUJMSUMpCistCQkJaWYoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+ X21ldGhvZF9tb2RfbiwgQ1JZUFRPX0xPQ0tfUlNBLCByc2EtPm4sIGN0eCkpCistCQkJCWdvdG8g ZXJyOworKwkJTU9OVF9IRUxQRVIocnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19D QUNIRV9QVUJMSUMsIGdvdG8gZXJyKTsKKyAKKyAJCWlmICghcnNhLT5tZXRoLT5ibl9tb2RfZXhw KHJldCxmLGQscnNhLT5uLGN0eCwKKyAJCQkJcnNhLT5fbWV0aG9kX21vZF9uKSkgZ290byBlcnI7 CitAQCAtNDg4LDYgKzUzMiwyMyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0 KGludCBmCisgCWludCBsb2NhbF9ibGluZGluZyA9IDA7CisgCUJOX0JMSU5ESU5HICpibGluZGlu ZyA9IE5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisr CQl7CisrCQlpZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkJCXsKKysJCQlGSVBTZXJyKEZJ UFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCxGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQp OworKwkJCWdvdG8gZXJyOworKwkJCX0KKysKKysJCWlmIChCTl9udW1fYml0cyhyc2EtPm4pIDwg T1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKQorKwkJCXsKKysJCQlSU0FlcnIoUlNB X0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7Cisr CQkJcmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYoKGN0eCA9IEJOX0NU WF9uZXcoKSkgPT0gTlVMTCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworIAlmICAg PSBCTl9DVFhfZ2V0KGN0eCk7CitAQCAtNTU1LDkgKzYxNiw3IEBAIHN0YXRpYyBpbnQgUlNBX2Vh eV9wcml2YXRlX2RlY3J5cHQoaW50IGYKKyAJCWVsc2UKKyAJCQlkID0gcnNhLT5kOworIAorLQkJ aWYgKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMpCistCQkJaWYgKCFCTl9NT05U X0NUWF9zZXRfbG9ja2VkKCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNh LT5uLCBjdHgpKQorLQkJCQlnb3RvIGVycjsKKysJCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBuLCBy c2EtPmZsYWdzICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDLCBnb3RvIGVycik7CisgCQlpZiAoIXJz YS0+bWV0aC0+Ym5fbW9kX2V4cChyZXQsZixkLHJzYS0+bixjdHgsCisgCQkJCXJzYS0+X21ldGhv ZF9tb2RfbikpCisgCQkgIGdvdG8gZXJyOworQEAgLTYxNyw2ICs2NzYsMjMgQEAgc3RhdGljIGlu dCBSU0FfZWF5X3B1YmxpY19kZWNyeXB0KGludCBmbAorIAl1bnNpZ25lZCBjaGFyICpidWY9TlVM TDsKKyAJQk5fQ1RYICpjdHg9TlVMTDsKKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWlmIChG SVBTX21vZGUoKSkKKysJCXsKKysJCWlmKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpCisrCQkJewor KwkJCUZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsRklQU19SX0ZJUFNfU0VM RlRFU1RfRkFJTEVEKTsKKysJCQlnb3RvIGVycjsKKysJCQl9CisrCisrCQlpZiAoQk5fbnVtX2Jp dHMocnNhLT5uKSA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykKKysJCQl7Cisr CQkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RP T19TTUFMTCk7CisrCQkJcmV0dXJuIC0xOworKwkJCX0KKysJCX0KKysjZW5kaWYKKysKKyAJaWYg KEJOX251bV9iaXRzKHJzYS0+bikgPiBPUEVOU1NMX1JTQV9NQVhfTU9EVUxVU19CSVRTKQorIAkJ eworIAkJUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX01PRFVMVVNf VE9PX0xBUkdFKTsKK0BAIC02NjcsOSArNzQzLDcgQEAgc3RhdGljIGludCBSU0FfZWF5X3B1Ymxp Y19kZWNyeXB0KGludCBmbAorIAkJZ290byBlcnI7CisgCQl9CisgCistCWlmIChyc2EtPmZsYWdz ICYgUlNBX0ZMQUdfQ0FDSEVfUFVCTElDKQorLQkJaWYgKCFCTl9NT05UX0NUWF9zZXRfbG9ja2Vk KCZyc2EtPl9tZXRob2RfbW9kX24sIENSWVBUT19MT0NLX1JTQSwgcnNhLT5uLCBjdHgpKQorLQkJ CWdvdG8gZXJyOworKwlNT05UX0hFTFBFUihyc2EsIGN0eCwgbiwgcnNhLT5mbGFncyAmIFJTQV9G TEFHX0NBQ0hFX1BVQkxJQywgZ290byBlcnIpOworIAorIAlpZiAoIXJzYS0+bWV0aC0+Ym5fbW9k X2V4cChyZXQsZixyc2EtPmUscnNhLT5uLGN0eCwKKyAJCXJzYS0+X21ldGhvZF9tb2RfbikpIGdv dG8gZXJyOworQEAgLTcxNyw2ICs3OTEsNyBAQCBzdGF0aWMgaW50IFJTQV9lYXlfbW9kX2V4cChC SUdOVU0gKnIwLCBjCisgCUJJR05VTSAqcjEsKm0xLCp2cmZ5OworIAlCSUdOVU0gbG9jYWxfZG1w MSxsb2NhbF9kbXExLGxvY2FsX2MsbG9jYWxfcjE7CisgCUJJR05VTSAqZG1wMSwqZG1xMSwqYywq cHIxOworKwlpbnQgYm5fZmxhZ3M7CisgCWludCByZXQ9MDsKKyAKKyAJQk5fQ1RYX3N0YXJ0KGN0 eCk7CitAQCAtNzI0LDQxICs3OTksMzEgQEAgc3RhdGljIGludCBSU0FfZWF5X21vZF9leHAoQklH TlVNICpyMCwgYworIAltMSA9IEJOX0NUWF9nZXQoY3R4KTsKKyAJdnJmeSA9IEJOX0NUWF9nZXQo Y3R4KTsKKyAKKy0JeworLQkJQklHTlVNIGxvY2FsX3AsIGxvY2FsX3E7CistCQlCSUdOVU0gKnAg PSBOVUxMLCAqcSA9IE5VTEw7CistCistCQkvKiBNYWtlIHN1cmUgQk5fbW9kX2ludmVyc2UgaW4g TW9udGdvbWVyeSBpbnRpYWxpemF0aW9uIHVzZXMgdGhlCistCQkgKiBCTl9GTEdfQ09OU1RUSU1F IGZsYWcgKHVubGVzcyBSU0FfRkxBR19OT19DT05TVFRJTUUgaXMgc2V0KQorLQkJICovCistCQlp ZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKKy0JCQl7CistCQkJQk5f aW5pdCgmbG9jYWxfcCk7CistCQkJcCA9ICZsb2NhbF9wOworLQkJCUJOX3dpdGhfZmxhZ3MocCwg cnNhLT5wLCBCTl9GTEdfQ09OU1RUSU1FKTsKKy0KKy0JCQlCTl9pbml0KCZsb2NhbF9xKTsKKy0J CQlxID0gJmxvY2FsX3E7CistCQkJQk5fd2l0aF9mbGFncyhxLCByc2EtPnEsIEJOX0ZMR19DT05T VFRJTUUpOworLQkJCX0KKy0JCWVsc2UKKy0JCQl7CistCQkJcCA9IHJzYS0+cDsKKy0JCQlxID0g cnNhLT5xOworLQkJCX0KKysJLyogTWFrZSBzdXJlIG1vZF9pbnZlcnNlIGluIG1vbnRnb21lcmV5 IGludGlhbGl6YXRpb24gdXNlIGNvcnJlY3QgCisrCSAqIEJOX0ZMR19DT05TVFRJTUUgZmxhZy4K KysJICovCisrCWJuX2ZsYWdzID0gcnNhLT5wLT5mbGFnczsKKysJaWYgKCEocnNhLT5mbGFncyAm IFJTQV9GTEFHX05PX0NPTlNUVElNRSkpCisrCQl7CisrCQlyc2EtPnAtPmZsYWdzIHw9IEJOX0ZM R19DT05TVFRJTUU7CisrCQl9CisrCU1PTlRfSEVMUEVSKHJzYSwgY3R4LCBwLCByc2EtPmZsYWdz ICYgUlNBX0ZMQUdfQ0FDSEVfUFJJVkFURSwgZ290byBlcnIpOworKwkvKiBXZSByZXN0b3JlIGJu X2ZsYWdzIGJhY2sgKi8KKysJcnNhLT5wLT5mbGFncyA9IGJuX2ZsYWdzOworIAorLQkJaWYgKHJz YS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFKQorLQkJCXsKKy0JCQlpZiAoIUJOX01P TlRfQ1RYX3NldF9sb2NrZWQoJnJzYS0+X21ldGhvZF9tb2RfcCwgQ1JZUFRPX0xPQ0tfUlNBLCBw LCBjdHgpKQorLQkJCQlnb3RvIGVycjsKKy0JCQlpZiAoIUJOX01PTlRfQ1RYX3NldF9sb2NrZWQo JnJzYS0+X21ldGhvZF9tb2RfcSwgQ1JZUFRPX0xPQ0tfUlNBLCBxLCBjdHgpKQorLQkJCQlnb3Rv IGVycjsKKy0JCQl9CistCX0KKysgICAgICAgIC8qIE1ha2Ugc3VyZSBtb2RfaW52ZXJzZSBpbiBt b250Z29tZXJleSBpbnRpYWxpemF0aW9uIHVzZSBjb3JyZWN0CisrICAgICAgICAgKiBCTl9GTEdf Q09OU1RUSU1FIGZsYWcuCisrICAgICAgICAgKi8KKysJYm5fZmxhZ3MgPSByc2EtPnEtPmZsYWdz OworKwlpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9fQ09OU1RUSU1FKSkKKysJCXsKKysJ CXJzYS0+cS0+ZmxhZ3MgfD0gQk5fRkxHX0NPTlNUVElNRTsKKysJCX0KKysJTU9OVF9IRUxQRVIo cnNhLCBjdHgsIHEsIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QUklWQVRFLCBnb3RvIGVy cik7CisrCS8qIFdlIHJlc3RvcmUgYm5fZmxhZ3MgYmFjayAqLworKwlyc2EtPnEtPmZsYWdzID0g Ym5fZmxhZ3M7CQorIAorLQlpZiAocnNhLT5mbGFncyAmIFJTQV9GTEFHX0NBQ0hFX1BVQkxJQykK Ky0JCWlmICghQk5fTU9OVF9DVFhfc2V0X2xvY2tlZCgmcnNhLT5fbWV0aG9kX21vZF9uLCBDUllQ VE9fTE9DS19SU0EsIHJzYS0+biwgY3R4KSkKKy0JCQlnb3RvIGVycjsKKysJTU9OVF9IRUxQRVIo cnNhLCBjdHgsIG4sIHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19DQUNIRV9QVUJMSUMsIGdvdG8gZXJy KTsKKyAKKyAJLyogY29tcHV0ZSBJIG1vZCBxICovCisgCWlmICghKHJzYS0+ZmxhZ3MgJiBSU0Ff RkxBR19OT19DT05TVFRJTUUpKQorQEAgLTg3NSw2ICs5NDAsOSBAQCBlcnI6CisgCisgc3RhdGlj IGludCBSU0FfZWF5X2luaXQoUlNBICpyc2EpCisgCXsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CUZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAJcnNhLT5mbGFnc3w9UlNBX0ZMQUdf Q0FDSEVfUFVCTElDfFJTQV9GTEFHX0NBQ0hFX1BSSVZBVEU7CisgCXJldHVybigxKTsKKyAJfQor ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzIG9wZW5zc2wt MS4wLjAvY3J5cHRvL3JzYS9yc2FfZXJyLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2Ev cnNhX2Vyci5jLmZpcHMJMjAwOC0xMi0yOSAxNzoxMTo1Ni4wMDAwMDAwMDAgKzAxMDAKKysrKyBv cGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2Vyci5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAw MDAwMDAwICswMjAwCitAQCAtMTExLDggKzExMSwxMiBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRB IFJTQV9zdHJfZnVuY3RzW109Cisge0VSUl9GVU5DKFJTQV9GX1JTQV9QUklOVF9GUCksCSJSU0Ff cHJpbnRfZnAifSwKKyB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1BSSVZfREVDT0RFKSwJIlJTQV9QUklW X0RFQ09ERSJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFJJVl9FTkNPREUpLAkiUlNBX1BSSVZf RU5DT0RFIn0sCisre0VSUl9GVU5DKFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQpLAkiUlNBX3By aXZhdGVfZW5jcnlwdCJ9LAorIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFVCX0RFQ09ERSksCSJSU0Ff UFVCX0RFQ09ERSJ9LAorK3tFUlJfRlVOQyhSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQpLAkiUlNB X3B1YmxpY19kZWNyeXB0In0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9TRVRVUF9CTElORElORyks CSJSU0Ffc2V0dXBfYmxpbmRpbmcifSwKKyt7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxU X01FVEhPRCksCSJSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kIn0sCisre0VSUl9GVU5DKFJTQV9GX1JT QV9TRVRfTUVUSE9EKSwJIlJTQV9zZXRfbWV0aG9kIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9T SUdOKSwJIlJTQV9zaWduIn0sCisge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRf U1RSSU5HKSwJIlJTQV9zaWduX0FTTjFfT0NURVRfU1RSSU5HIn0sCisge0VSUl9GVU5DKFJTQV9G X1JTQV9WRVJJRlkpLAkiUlNBX3ZlcmlmeSJ9LAorQEAgLTE1NSwxMCArMTU5LDEyIEBAIHN0YXRp YyBFUlJfU1RSSU5HX0RBVEEgUlNBX3N0cl9yZWFzb25zW10KKyB7RVJSX1JFQVNPTihSU0FfUl9L RVlfU0laRV9UT09fU01BTEwpICAgICwia2V5IHNpemUgdG9vIHNtYWxsIn0sCisge0VSUl9SRUFT T04oUlNBX1JfTEFTVF9PQ1RFVF9JTlZBTElEKSAgICAsImxhc3Qgb2N0ZXQgaW52YWxpZCJ9LAor IHtFUlJfUkVBU09OKFJTQV9SX01PRFVMVVNfVE9PX0xBUkdFKSAgICAgLCJtb2R1bHVzIHRvbyBs YXJnZSJ9LAorK3tFUlJfUkVBU09OKFJTQV9SX05PTl9GSVBTX01FVEhPRCkgICAgICAgLCJub24g ZmlwcyBtZXRob2QifSwKKyB7RVJSX1JFQVNPTihSU0FfUl9OT19QVUJMSUNfRVhQT05FTlQpICAg ICwibm8gcHVibGljIGV4cG9uZW50In0sCisge0VSUl9SRUFTT04oUlNBX1JfTlVMTF9CRUZPUkVf QkxPQ0tfTUlTU0lORyksIm51bGwgYmVmb3JlIGJsb2NrIG1pc3NpbmcifSwKKyB7RVJSX1JFQVNP TihSU0FfUl9OX0RPRVNfTk9UX0VRVUFMX1BfUSkgICwibiBkb2VzIG5vdCBlcXVhbCBwIHEifSwK KyB7RVJSX1JFQVNPTihSU0FfUl9PQUVQX0RFQ09ESU5HX0VSUk9SKSAgICwib2FlcCBkZWNvZGlu ZyBlcnJvciJ9LAorK3tFUlJfUkVBU09OKFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9G SVBTX01PREUpLCJvcGVyYXRpb24gbm90IGFsbG93ZWQgaW4gZmlwcyBtb2RlIn0sCisge0VSUl9S RUFTT04oUlNBX1JfT1BFUkFUSU9OX05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRSksIm9w ZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGtleXR5cGUifSwKKyB7RVJSX1JFQVNPTihS U0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRCkgICwicGFkZGluZyBjaGVjayBmYWlsZWQifSwKKyB7 RVJSX1JFQVNPTihSU0FfUl9QX05PVF9QUklNRSkgICAgICAgICAgICwicCBub3QgcHJpbWUifSwK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3Ns LTEuMC4wL2NyeXB0by9yc2EvcnNhX2dlbi5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNh L3JzYV9nZW4uYy5maXBzCTIwMDctMDMtMjggMDI6MTU6MjcuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9nZW4uYwkyMDEwLTAzLTMwIDEwOjM0OjQxLjAw MDAwMDAwMCArMDIwMAorQEAgLTY3LDYgKzY3LDgyIEBACisgI2luY2x1ZGUgImNyeXB0bGliLmgi CisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUg PG9wZW5zc2wvZXZwLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlICJm aXBzX2xvY2wuaCIKKysKKytzdGF0aWMgaW50IGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAwOwor KworK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCkKKysJeworKwlmaXBzX3JzYV9w YWlyd2lzZV9mYWlsID0gMTsKKysJfQorKworK2ludCBmaXBzX2NoZWNrX3JzYShSU0EgKnJzYSkK KysJeworKwljb25zdCB1bnNpZ25lZCBjaGFyIHRic1tdID0gIlJTQSBQYWlyd2lzZSBDaGVjayBE YXRhIjsKKysJdW5zaWduZWQgY2hhciAqY3RidWYgPSBOVUxMLCAqcHRidWYgPSBOVUxMOworKwlp bnQgbGVuLCByZXQgPSAwOworKwlFVlBfUEtFWSAqcGs7CisrCisrCWlmICgocGs9RVZQX1BLRVlf bmV3KCkpID09IE5VTEwpCisrCQlnb3RvIGVycjsKKysKKysJRVZQX1BLRVlfc2V0MV9SU0EocGss IHJzYSk7CisrCisrCS8qIFBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgc2lnbmF0dXJlIHRl c3QgKi8KKysJaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCisrCQkJ TlVMTCwgMCwgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwgTlVMTCkKKysJ CXx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsCisrCQkJTlVMTCwgMCwg RVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLCBOVUxMKQorKwkJfHwgIWZpcHNf cGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKKysJCQlOVUxMLCAwLCBFVlBfc2hhMSgp LCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgTlVMTCkpCisrCQlnb3RvIGVycjsKKysJLyogTm93 IHBlcmZvcm0gcGFpcndpc2UgY29uc2lzdGVuY3kgZW5jcnlwdC9kZWNyeXB0IHRlc3QgKi8KKysJ Y3RidWYgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShyc2EpKTsKKysJaWYgKCFjdGJ1ZikKKysJ CWdvdG8gZXJyOworKworKwlsZW4gPSBSU0FfcHVibGljX2VuY3J5cHQoc2l6ZW9mKHRicykgLSAx LCB0YnMsIGN0YnVmLCByc2EsIFJTQV9QS0NTMV9QQURESU5HKTsKKysJaWYgKGxlbiA8PSAwKQor KwkJZ290byBlcnI7CisrCS8qIENoZWNrIGNpcGhlcnRleHQgZG9lc24ndCBtYXRjaCBwbGFpbnRl eHQgKi8KKysJaWYgKChsZW4gPT0gKHNpemVvZih0YnMpIC0gMSkpICYmICFtZW1jbXAodGJzLCBj dGJ1ZiwgbGVuKSkKKysJCWdvdG8gZXJyOworKwlwdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9z aXplKHJzYSkpOworKworKwlpZiAoIXB0YnVmKQorKwkJZ290byBlcnI7CisrCWxlbiA9IFJTQV9w cml2YXRlX2RlY3J5cHQobGVuLCBjdGJ1ZiwgcHRidWYsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcp OworKwlpZiAobGVuICE9IChzaXplb2YodGJzKSAtIDEpKQorKwkJZ290byBlcnI7CisrCWlmICht ZW1jbXAocHRidWYsIHRicywgbGVuKSkKKysJCWdvdG8gZXJyOworKworKwlyZXQgPSAxOworKwor KwlpZiAoIXB0YnVmKQorKwkJZ290byBlcnI7CisrCQorKwllcnI6CisrCWlmIChyZXQgPT0gMCkK KysJCXsKKysJCWZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysJCUZJUFNlcnIoRklQU19GX0ZJ UFNfQ0hFQ0tfUlNBLEZJUFNfUl9QQUlSV0lTRV9URVNUX0ZBSUxFRCk7CisrCQl9CisrCisrCWlm IChjdGJ1ZikKKysJCU9QRU5TU0xfZnJlZShjdGJ1Zik7CisrCWlmIChwdGJ1ZikKKysJCU9QRU5T U0xfZnJlZShwdGJ1Zik7CisrCWlmIChwaykKKysJCUVWUF9QS0VZX2ZyZWUocGspOworKworKwly ZXR1cm4gcmV0OworKwl9CisrI2VuZGlmCisgCisgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXln ZW4oUlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmVfdmFsdWUsIEJOX0dFTkNCICpjYik7Cisg CitAQCAtOTAsNiArMTY2LDIzIEBAIHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAq cnNhLCAKKyAJaW50IGJpdHNwLGJpdHNxLG9rPSAtMSxuPTA7CisgCUJOX0NUWCAqY3R4PU5VTEw7 CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7CisrCQlp ZihGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKQorKwkgICAgCXsKKysJCSAgICBGSVBTZXJyKEZJUFNf Rl9SU0FfQlVJTFRJTl9LRVlHRU4sRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysJICAg IAlyZXR1cm4gMDsKKysJICAgIAl9CisrCisrCQlpZiAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNf TUlOX01PRFVMVVNfQklUUykKKysJCSAgICB7CisrCQkgICAgRklQU2VycihGSVBTX0ZfUlNBX0JV SUxUSU5fS0VZR0VOLEZJUFNfUl9LRVlfVE9PX1NIT1JUKTsKKysJCSAgICByZXR1cm4gMDsKKysJ CQl9CisrCQl9CisrI2VuZGlmCisrCisgCWN0eD1CTl9DVFhfbmV3KCk7CisgCWlmIChjdHggPT0g TlVMTCkgZ290byBlcnI7CisgCUJOX0NUWF9zdGFydChjdHgpOworQEAgLTIwMSw2ICsyOTQsMTcg QEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsIAorIAkJcCA9IHJzYS0+ cDsKKyAJaWYgKCFCTl9tb2RfaW52ZXJzZShyc2EtPmlxbXAscnNhLT5xLHAsY3R4KSkgZ290byBl cnI7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkpCisrCQl7Cisr CQlpZiAoZmlwc19yc2FfcGFpcndpc2VfZmFpbCkKKysJCQlCTl9hZGRfd29yZChyc2EtPm4sIDEp OworKworKwkJaWYoIWZpcHNfY2hlY2tfcnNhKHJzYSkpCisrCQkgICAgZ290byBlcnI7CisrCQl9 CisrI2VuZGlmCisrCisgCW9rPTE7CisgZXJyOgorIAlpZiAob2sgPT0gLTEpCitkaWZmIC11cCBv cGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhLmguZmlwcyBvcGVuc3NsLTEuMC4wL2NyeXB0by9y c2EvcnNhLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhLmguZmlwcwkyMDEwLTAz LTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3Jz YS9yc2EuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTc0LDYgKzc0 LDIxIEBACisgI2Vycm9yIFJTQSBpcyBkaXNhYmxlZC4KKyAjZW5kaWYKKyAKKysvKiBJZiB0aGlz IGZsYWcgaXMgc2V0IHRoZSBSU0EgbWV0aG9kIGlzIEZJUFMgY29tcGxpYW50IGFuZCBjYW4gYmUg dXNlZAorKyAqIGluIEZJUFMgbW9kZS4gVGhpcyBpcyBzZXQgaW4gdGhlIHZhbGlkYXRlZCBtb2R1 bGUgbWV0aG9kLiBJZiBhbgorKyAqIGFwcGxpY2F0aW9uIHNldHMgdGhpcyBmbGFnIGluIGl0cyBv d24gbWV0aG9kcyBpdCBpcyBpdHMgcmVwb3NpYmlsaXR5CisrICogdG8gZW5zdXJlIHRoZSByZXN1 bHQgaXMgY29tcGxpYW50LgorKyAqLworKworKyNkZWZpbmUgUlNBX0ZMQUdfRklQU19NRVRIT0QJ CQkweDA0MDAKKysKKysvKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRoZSBvcGVyYXRpb25zIG5vcm1h bGx5IGRpc2FibGVkIGluIEZJUFMgbW9kZSBhcmUKKysgKiBwZXJtaXR0ZWQgaXQgaXMgdGhlbiB0 aGUgYXBwbGljYXRpb25zIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZQorKyAqIHVz YWdlIGlzIGNvbXBsaWFudC4KKysgKi8KKysKKysjZGVmaW5lIFJTQV9GTEFHX05PTl9GSVBTX0FM TE9XCQkJMHgwNDAwCisrCisgI2lmZGVmICBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworICNl bmRpZgorQEAgLTE2NCw2ICsxNzksOCBAQCBzdHJ1Y3QgcnNhX3N0CisgIyBkZWZpbmUgT1BFTlNT TF9SU0FfTUFYX01PRFVMVVNfQklUUwkxNjM4NAorICNlbmRpZgorIAorKyNkZWZpbmUgT1BFTlNT TF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTIDEwMjQKKysKKyAjaWZuZGVmIE9QRU5TU0xfUlNB X1NNQUxMX01PRFVMVVNfQklUUworICMgZGVmaW5lIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNf QklUUwkzMDcyCisgI2VuZGlmCitAQCAtMjY3LDYgKzI4NCwxMSBAQCBSU0EgKglSU0FfZ2VuZXJh dGVfa2V5KGludCBiaXRzLCB1bnNpZ25lCisgCisgLyogTmV3IHZlcnNpb24gKi8KKyBpbnQJUlNB X2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZSwgQk5fR0VOQ0Ig KmNiKTsKKytpbnQgUlNBX1g5MzFfZGVyaXZlX2V4KFJTQSAqcnNhLCBCSUdOVU0gKnAxLCBCSUdO VU0gKnAyLCBCSUdOVU0gKnExLCBCSUdOVU0gKnEyLAorKwkJCWNvbnN0IEJJR05VTSAqWHAxLCBj b25zdCBCSUdOVU0gKlhwMiwgY29uc3QgQklHTlVNICpYcCwKKysJCQljb25zdCBCSUdOVU0gKlhx MSwgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCisrCQkJY29uc3QgQklHTlVN ICplLCBCTl9HRU5DQiAqY2IpOworK2ludCBSU0FfWDkzMV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpy c2EsIGludCBiaXRzLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CisgCisgaW50CVJT QV9jaGVja19rZXkoY29uc3QgUlNBICopOworIAkvKiBuZXh0IDQgcmV0dXJuIC0xIG9uIGVycm9y ICovCitAQCAtNDM4LDggKzQ2MCwxMiBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQp OworICNkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQCQkJCSAxMTYKKyAjZGVmaW5lIFJTQV9GX1JT QV9QUklWX0RFQ09ERQkJCQkgMTM3CisgI2RlZmluZSBSU0FfRl9SU0FfUFJJVl9FTkNPREUJCQkJ IDEzOAorKyNkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVAkJCSAxNDgKKyAjZGVmaW5l IFJTQV9GX1JTQV9QVUJfREVDT0RFCQkJCSAxMzkKKysjZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNf REVDUllQVAkJCSAxNDkKKyAjZGVmaW5lIFJTQV9GX1JTQV9TRVRVUF9CTElORElORwkJCSAxMzYK KysjZGVmaW5lIFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QJCQkgMTUwCisrI2RlZmluZSBS U0FfRl9SU0FfU0VUX01FVEhPRAkJCQkgMTUxCisgI2RlZmluZSBSU0FfRl9SU0FfU0lHTgkJCQkJ IDExNworICNkZWZpbmUgUlNBX0ZfUlNBX1NJR05fQVNOMV9PQ1RFVF9TVFJJTkcJCSAxMTgKKyAj ZGVmaW5lIFJTQV9GX1JTQV9WRVJJRlkJCQkJIDExOQorQEAgLTQ3OSwxMCArNTA1LDEyIEBAIHZv aWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgI2RlZmluZSBSU0FfUl9LRVlfU0laRV9U T09fU01BTEwJCQkgMTIwCisgI2RlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFMSUQJCQkgMTM0 CisgI2RlZmluZSBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRQkJCQkgMTA1CisrI2RlZmluZSBSU0Ff Ul9OT05fRklQU19NRVRIT0QJCQkJIDE0OQorICNkZWZpbmUgUlNBX1JfTk9fUFVCTElDX0VYUE9O RU5UCQkJIDE0MAorICNkZWZpbmUgUlNBX1JfTlVMTF9CRUZPUkVfQkxPQ0tfTUlTU0lORwkJCSAx MTMKKyAjZGVmaW5lIFJTQV9SX05fRE9FU19OT1RfRVFVQUxfUF9RCQkJIDEyNworICNkZWZpbmUg UlNBX1JfT0FFUF9ERUNPRElOR19FUlJPUgkJCSAxMjEKKysjZGVmaW5lIFJTQV9SX09QRVJBVElP Tl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUJIDE1MAorICNkZWZpbmUgUlNBX1JfT1BFUkFUSU9O X05PVF9TVVBQT1JURURfRk9SX1RISVNfS0VZVFlQRQkgMTQ4CisgI2RlZmluZSBSU0FfUl9QQURE SU5HX0NIRUNLX0ZBSUxFRAkJCSAxMTQKKyAjZGVmaW5lIFJTQV9SX1BfTk9UX1BSSU1FCQkJCSAx MjgKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlwcyBvcGVu c3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8v cnNhL3JzYV9saWIuYy5maXBzCTIwMDktMTItMDkgMTQ6Mzg6MjAuMDAwMDAwMDAwICswMTAwCisr Kysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9saWIuYwkyMDEwLTAzLTMwIDEwOjM0OjQx LjAwMDAwMDAwMCArMDIwMAorQEAgLTgwLDYgKzgwLDEzIEBAIFJTQSAqUlNBX25ldyh2b2lkKQor IAorIHZvaWQgUlNBX3NldF9kZWZhdWx0X21ldGhvZChjb25zdCBSU0FfTUVUSE9EICptZXRoKQor IAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5m bGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0Ff U0VUX0RFRkFVTFRfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKwkJcmV0dXJuOwor KwkJfQorKyNlbmRpZgorIAlkZWZhdWx0X1JTQV9tZXRoID0gbWV0aDsKKyAJfQorIAorQEAgLTEx MSw2ICsxMTgsMTMgQEAgaW50IFJTQV9zZXRfbWV0aG9kKFJTQSAqcnNhLCBjb25zdCBSU0FfTQor IAkvKiBOQjogVGhlIGNhbGxlciBpcyBzcGVjaWZpY2FsbHkgc2V0dGluZyBhIG1ldGhvZCwgc28g aXQncyBub3QgdXAgdG8gdXMKKyAJICogdG8gZGVhbCB3aXRoIHdoaWNoIEVOR0lORSBpdCBjb21l cyBmcm9tLiAqLworIAljb25zdCBSU0FfTUVUSE9EICptdG1wOworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJaWYgKEZJUFNfbW9kZSgpICYmICEobWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01F VEhPRCkpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1NFVF9NRVRIT0QsIFJTQV9SX05PTl9G SVBTX01FVEhPRCk7CisrCQlyZXR1cm4gMDsKKysJCX0KKysjZW5kaWYKKyAJbXRtcCA9IHJzYS0+ bWV0aDsKKyAJaWYgKG10bXAtPmZpbmlzaCkgbXRtcC0+ZmluaXNoKHJzYSk7CisgI2lmbmRlZiBP UEVOU1NMX05PX0VOR0lORQorQEAgLTE2Myw2ICsxNzcsMTggQEAgUlNBICpSU0FfbmV3X21ldGhv ZChFTkdJTkUgKmVuZ2luZSkKKyAJCQl9CisgCQl9CisgI2VuZGlmCisrI2lmZGVmIE9QRU5TU0xf RklQUworKwlpZiAoRklQU19tb2RlKCkgJiYgIShyZXQtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdf RklQU19NRVRIT0QpKQorKwkJeworKwkJUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9ELCBSU0Ff Ul9OT05fRklQU19NRVRIT0QpOworKyNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKysJCWlmIChy ZXQtPmVuZ2luZSkKKysJCQlFTkdJTkVfZmluaXNoKHJldC0+ZW5naW5lKTsKKysjZW5kaWYKKysJ CU9QRU5TU0xfZnJlZShyZXQpOworKwkJcmV0dXJuIE5VTEw7CisrCQl9CisrI2VuZGlmCisgCisg CXJldC0+cGFkPTA7CisgCXJldC0+dmVyc2lvbj0wOworQEAgLTI5NCw2ICszMjAsMTMgQEAgaW50 IFJTQV9wdWJsaWNfZW5jcnlwdChpbnQgZmxlbiwgY29uc3QgdQorIGludCBSU0FfcHJpdmF0ZV9l bmNyeXB0KGludCBmbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLCB1bnNpZ25lZCBjaGFy ICp0bywKKyAJICAgICBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCisgCXsKKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrCWlmKEZJUFNfbW9kZSgpICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9G SVBTX0FMTE9XKSkKKysJCXsKKysJCVJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBULCBS U0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCXJldHVybiAwOwor KwkJfQorKyNlbmRpZgorIAlyZXR1cm4ocnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMoZmxlbiwgZnJv bSwgdG8sIHJzYSwgcGFkZGluZykpOworIAl9CisgCitAQCAtMzA2LDYgKzMzOSwxMyBAQCBpbnQg UlNBX3ByaXZhdGVfZGVjcnlwdChpbnQgZmxlbiwgY29uc3QgCisgaW50IFJTQV9wdWJsaWNfZGVj cnlwdChpbnQgZmxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwgdW5zaWduZWQgY2hhciAq dG8sCisgCSAgICAgUlNBICpyc2EsIGludCBwYWRkaW5nKQorIAl7CisrI2lmZGVmIE9QRU5TU0xf RklQUworKwlpZihGSVBTX21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQ U19BTExPVykpCisrCQl7CisrCQlSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULCBSU0Ff Ul9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCXJldHVybiAwOworKwkJ fQorKyNlbmRpZgorIAlyZXR1cm4ocnNhLT5tZXRoLT5yc2FfcHViX2RlYyhmbGVuLCBmcm9tLCB0 bywgcnNhLCBwYWRkaW5nKSk7CisgCX0KKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRv L3JzYS9yc2Ffc2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3JzYV9zaWduLmMK Ky0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9yc2EvcnNhX3NpZ24uYy5maXBzCTIwMDctMDQtMjQg MDM6MDU6NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vcnNhL3Jz YV9zaWduLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMzAsNyAr MTMwLDggQEAgaW50IFJTQV9zaWduKGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaAorIAkJaTJk X1g1MDlfU0lHKCZzaWcsJnApOworIAkJcz10bXBzOworIAl9CistCWk9UlNBX3ByaXZhdGVfZW5j cnlwdChpLHMsc2lncmV0LHJzYSxSU0FfUEtDUzFfUEFERElORyk7CisrCS8qIE5COiBjYWxsIHVu ZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcgKi8KKysJaSA9 IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jID8gcnNhLT5tZXRoLT5yc2FfcHJpdl9lbmMoaSxzLHNp Z3JldCxyc2EsUlNBX1BLQ1MxX1BBRERJTkcpIDogMDsKKyAJaWYgKGkgPD0gMCkKKyAJCXJldD0w OworIAllbHNlCitAQCAtMTYxLDggKzE2Miw4IEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5 cGUsIGNvbnN0IHVuc2kKKyAKKyAJaWYoKGR0eXBlID09IE5JRF9tZDVfc2hhMSkgJiYgcm0pCisg CQl7CistCQlpID0gUlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLAorLQkJCQkJc2lnYnVm LHJtLHJzYSxSU0FfUEtDUzFfUEFERElORyk7CisrCQlpID0gcnNhLT5tZXRoLT5yc2FfcHViX2Rl YyA/IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMoKGludClzaWdsZW4sCisrCQkJCQlzaWdidWYscm0s cnNhLFJTQV9QS0NTMV9QQURESU5HKSA6IDA7CisgCQlpZiAoaSA8PSAwKQorIAkJCXJldHVybiAw OworIAkJKnBybV9sZW4gPSBpOworQEAgLTE3OSw3ICsxODAsOCBAQCBpbnQgaW50X3JzYV92ZXJp ZnkoaW50IGR0eXBlLCBjb25zdCB1bnNpCisgCQkJUlNBZXJyKFJTQV9GX0lOVF9SU0FfVkVSSUZZ LFJTQV9SX0lOVkFMSURfTUVTU0FHRV9MRU5HVEgpOworIAkJCWdvdG8gZXJyOworIAl9CistCWk9 UlNBX3B1YmxpY19kZWNyeXB0KChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0FfUEtDUzFfUEFE RElORyk7CisrCS8qIE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lk IEZJUFMgYmxvY2tpbmcgKi8KKysJaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1l dGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVuLHNpZ2J1ZixzLHJzYSxSU0FfUEtDUzFfUEFERElO RykgOiAwOworIAorIAlpZiAoaSA8PSAwKSBnb3RvIGVycjsKKyAKK2RpZmYgLXVwIG9wZW5zc2wt MS4wLjAvY3J5cHRvL3NlZWQvc2VlZC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2VlZC9z ZWVkLmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9zZWVkL3NlZWQuYy5maXBzCTIwMDgtMTIt MTYgMDg6NDE6MjEuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2Vl ZC9zZWVkLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0zNCw2ICsz NCw5IEBACisgCisgI2luY2x1ZGUgPG9wZW5zc2wvc2VlZC5oPgorICNpbmNsdWRlICJzZWVkX2xv Y2wuaCIKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNlbmRpZgorIAorIHN0YXRpYyBjb25zdCBzZWVkX3dvcmQgU1NbNF1bMjU2XSA9IHsJeworIAkw eDI5ODlhMWE4LCAweDA1ODU4MTg0LCAweDE2YzZkMmQ0LCAweDEzYzNkM2QwLCAweDE0NDQ1MDU0 LCAweDFkMGQxMTFjLCAweDJjOGNhMGFjLCAweDI1MDUyMTI0LAorQEAgLTE5Myw3ICsxOTYsMTgg QEAgc3RhdGljIGNvbnN0IHNlZWRfd29yZCBLQ1tdID0geworIAlLQzgsCUtDOSwJS0MxMCwJS0Mx MSwJS0MxMiwJS0MxMywJS0MxNCwJS0MxNQl9OworICNlbmRpZgorIAorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKyB2b2lkIFNFRURfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJhd2tleVtTRUVE X0tFWV9MRU5HVEhdLCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpCisrICAgICAgICB7CisrICAgICAg ICBpZiAoRklQU19tb2RlKCkpCisrICAgICAgICAgICAgICAgIEZJUFNfQkFEX0FCT1JUKFNFRUQp CisrICAgICAgICBwcml2YXRlX1NFRURfc2V0X2tleShyYXdrZXksIGtzKTsKKysgICAgICAgIH0K KysKKyt2b2lkIHByaXZhdGVfU0VFRF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5 W1NFRURfS0VZX0xFTkdUSF0sIFNFRURfS0VZX1NDSEVEVUxFICprcykKKysjZWxzZQorK3ZvaWQg U0VFRF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgcmF3a2V5W1NFRURfS0VZX0xFTkdUSF0s IFNFRURfS0VZX1NDSEVEVUxFICprcykKKysjZW5kaWYKKyB7CisgCXNlZWRfd29yZCB4MSwgeDIs IHgzLCB4NDsKKyAJc2VlZF93b3JkIHQwLCB0MTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL3NlZWQvc2VlZC5oLmZpcHMgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2VlZC9zZWVkLmgKKy0t LSBvcGVuc3NsLTEuMC4wL2NyeXB0by9zZWVkL3NlZWQuaC5maXBzCTIwMTAtMDMtMzAgMTA6MzM6 NDUuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2VlZC9zZWVkLmgJ MjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xMTcsNiArMTE3LDkgQEAg dHlwZWRlZiBzdHJ1Y3Qgc2VlZF9rZXlfc3QgeworIH0gU0VFRF9LRVlfU0NIRURVTEU7CisgCisg CisrI2lmZGVmIE9QRU5TU0xfRklQUworK3ZvaWQgcHJpdmF0ZV9TRUVEX3NldF9rZXkoY29uc3Qg dW5zaWduZWQgY2hhciByYXdrZXlbU0VFRF9LRVlfTEVOR1RIXSwgU0VFRF9LRVlfU0NIRURVTEUg KmtzKTsKKysjZW5kaWYKKyB2b2lkIFNFRURfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyIHJh d2tleVtTRUVEX0tFWV9MRU5HVEhdLCBTRUVEX0tFWV9TQ0hFRFVMRSAqa3MpOworIAorIHZvaWQg U0VFRF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgc1tTRUVEX0JMT0NLX1NJWkVdLCB1bnNp Z25lZCBjaGFyIGRbU0VFRF9CTE9DS19TSVpFXSwgY29uc3QgU0VFRF9LRVlfU0NIRURVTEUgKmtz KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGFfZGdzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0 by9zaGEvc2hhX2Rnc3QuYy5maXBzCTIwMDctMDEtMjEgMTQ6MDc6MTQuMDAwMDAwMDAwICswMTAw CisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYV9kZ3N0LmMJMjAxMC0wMy0zMCAxMDoz NDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC01Nyw2ICs1NywxMiBAQAorICAqLworIAorICNpbmNs dWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+ CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5k aWYKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKyAjaWYgIWRlZmluZWQoT1BFTlNTTF9O T19TSEEwKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkKKyAKKyAjdW5kZWYgIFNIQV8xCitk aWZmIC11cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhLmguZmlwcyBvcGVuc3NsLTEuMC4w L2NyeXB0by9zaGEvc2hhLmgKKy0tLSBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhLmguZmlw cwkyMDEwLTAzLTMwIDEwOjMzOjQ1LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL3NoYS9zaGEuaAkyMDEwLTAzLTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAg LTEwNiw2ICsxMDYsOSBAQCB0eXBlZGVmIHN0cnVjdCBTSEFzdGF0ZV9zdAorIAl9IFNIQV9DVFg7 CisgCisgI2lmbmRlZiBPUEVOU1NMX05PX1NIQTAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisraW50 IHByaXZhdGVfU0hBX0luaXQoU0hBX0NUWCAqYyk7CisrI2VuZGlmCisgaW50IFNIQV9Jbml0KFNI QV9DVFggKmMpOworIGludCBTSEFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEs IHNpemVfdCBsZW4pOworIGludCBTSEFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFgg KmMpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYV9sb2NsLmguZmlwcyBv cGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL3NoYS9zaGFfbG9jbC5oLmZpcHMJMjAxMC0wMy0zMCAxMDozMzo0NS4wMDAwMDAwMDAgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhX2xvY2wuaAkyMDEwLTAzLTMwIDEw OjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTEyMiw4ICsxMjIsMTUgQEAgdm9pZCBzaGExX2Js b2NrX2RhdGFfb3JkZXIgKFNIQV9DVFggKmMsIAorICNkZWZpbmUgSU5JVF9EQVRBX2gzIDB4MTAz MjU0NzZVTAorICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAorIAorKyNpZiBkZWZp bmVkKFNIQV8wKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKKytGSVBTX05PTl9GSVBTX01EX0lu aXQoU0hBKQorKyNlbHNlCisgaW50IEhBU0hfSU5JVCAoU0hBX0NUWCAqYykKKysjZW5kaWYKKyAJ eworKyNpZiBkZWZpbmVkKFNIQV8xKSAmJiBkZWZpbmVkKE9QRU5TU0xfRklQUykKKysJRklQU19z ZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXplb2YoKmMpKTsKKyAJ Yy0+aDA9SU5JVF9EQVRBX2gwOworIAljLT5oMT1JTklUX0RBVEFfaDE7CitkaWZmIC11cCBvcGVu c3NsLTEuMC4wL2NyeXB0by9zaGEvc2hhMWRnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRv L3NoYS9zaGExZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYTFkZ3N0LmMu ZmlwcwkyMDA3LTAxLTIxIDE0OjA3OjE0LjAwMDAwMDAwMCArMDEwMAorKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL3NoYS9zaGExZGdzdC5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICsw MjAwCitAQCAtNjMsNiArNjMsMTAgQEAKKyAjZGVmaW5lIFNIQV8xCisgCisgI2luY2x1ZGUgPG9w ZW5zc2wvb3BlbnNzbHYuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNlbmRpZgorKworIAorIGNvbnN0IGNoYXIgU0hBMV92ZXJzaW9uW109IlNI QTEiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5 cHRvL3NoYS9zaGEyNTYuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGEyNTYuYwor LS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGEyNTYuYy5maXBzCTIwMDctMDEtMjEgMTQ6 MDc6MTQuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3NoYTI1 Ni5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTIsMTIgKzEyLDE5 IEBACisgCisgI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wv c2hhLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4K KysjZW5kaWYKKysKKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorIAorIGNvbnN0IGNo YXIgU0hBMjU2X3ZlcnNpb25bXT0iU0hBLTI1NiIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAor IGludCBTSEEyMjRfSW5pdCAoU0hBMjU2X0NUWCAqYykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorIAltZW1zZXQgKGMsMCxzaXpl b2YoKmMpKTsKKyAJYy0+aFswXT0weGMxMDU5ZWQ4VUw7CWMtPmhbMV09MHgzNjdjZDUwN1VMOwor IAljLT5oWzJdPTB4MzA3MGRkMTdVTDsJYy0+aFszXT0weGY3MGU1OTM5VUw7CitAQCAtMjksNiAr MzYsOSBAQCBpbnQgU0hBMjI0X0luaXQgKFNIQTI1Nl9DVFggKmMpCisgCisgaW50IFNIQTI1Nl9J bml0IChTSEEyNTZfQ1RYICpjKQorIAl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlGSVBTX3Nl bGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgCW1lbXNldCAoYywwLHNpemVvZigqYykpOworIAlj LT5oWzBdPTB4NmEwOWU2NjdVTDsJYy0+aFsxXT0weGJiNjdhZTg1VUw7CisgCWMtPmhbMl09MHgz YzZlZjM3MlVMOwljLT5oWzNdPTB4YTU0ZmY1M2FVTDsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAv Y3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGE1MTIu YworLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3NoYS9zaGE1MTIuYy5maXBzCTIwMDktMTItMzAg MTI6NTM6MzMuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vc2hhL3No YTUxMi5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtNSw2ICs1LDEw IEBACisgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KKyAgKi8KKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29u Zi5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Cisr I2VuZGlmCisrCisgI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVO U1NMX05PX1NIQTUxMikKKyAvKgorICAqIElNUExFTUVOVEFUSU9OIE5PVEVTLgorQEAgLTYxLDYg KzY1LDkgQEAgY29uc3QgY2hhciBTSEE1MTJfdmVyc2lvbltdPSJTSEEtNTEyIiBPUAorIAorIGlu dCBTSEEzODRfSW5pdCAoU0hBNTEyX0NUWCAqYykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMK KysJRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorICNpZiBkZWZpbmVkKFNIQTUxMl9B U00pICYmIChkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19hcm0pKQorIAkvKiBtYWludGFp biBkd29yZCBvcmRlciByZXF1aXJlZCBieSBhc3NlbWJsZXIgbW9kdWxlICovCisgCXVuc2lnbmVk IGludCAqaCA9ICh1bnNpZ25lZCBpbnQgKiljLT5oOworQEAgLTkwLDYgKzk3LDkgQEAgaW50IFNI QTM4NF9Jbml0IChTSEE1MTJfQ1RYICpjKQorIAorIGludCBTSEE1MTJfSW5pdCAoU0hBNTEyX0NU WCAqYykKKyAJeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJRklQU19zZWxmdGVzdF9jaGVjaygp OworKyNlbmRpZgorICNpZiBkZWZpbmVkKFNIQTUxMl9BU00pICYmIChkZWZpbmVkKF9fYXJtX18p IHx8IGRlZmluZWQoX19hcm0pKQorIAkvKiBtYWludGFpbiBkd29yZCBvcmRlciByZXF1aXJlZCBi eSBhc3NlbWJsZXIgbW9kdWxlICovCisgCXVuc2lnbmVkIGludCAqaCA9ICh1bnNpZ25lZCBpbnQg KiljLT5oOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMC9jcnlwdG8vd2hybHBvb2wvd2hybHBvb2wu aC5maXBzIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3docmxwb29sL3docmxwb29sLmgKKy0tLSBvcGVu c3NsLTEuMC4wL2NyeXB0by93aHJscG9vbC93aHJscG9vbC5oLmZpcHMJMjAxMC0wMy0zMCAxMDoz Mzo0NS4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL2NyeXB0by93aHJscG9vbC93 aHJscG9vbC5oCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMjQsNiAr MjQsOSBAQCB0eXBlZGVmIHN0cnVjdAl7CisgCX0gV0hJUkxQT09MX0NUWDsKKyAKKyAjaWZuZGVm IE9QRU5TU0xfTk9fV0hJUkxQT09MCisrI2lmZGVmIE9QRU5TU0xfRklQUworK2ludCBwcml2YXRl X1dISVJMUE9PTF9Jbml0KFdISVJMUE9PTF9DVFggKmMpOworKyNlbmRpZgorIGludCBXSElSTFBP T0xfSW5pdAkoV0hJUkxQT09MX0NUWCAqYyk7CisgaW50IFdISVJMUE9PTF9VcGRhdGUJKFdISVJM UE9PTF9DVFggKmMsY29uc3Qgdm9pZCAqaW5wLHNpemVfdCBieXRlcyk7Cisgdm9pZCBXSElSTFBP T0xfQml0VXBkYXRlKFdISVJMUE9PTF9DVFggKmMsY29uc3Qgdm9pZCAqaW5wLHNpemVfdCBiaXRz KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBz IG9wZW5zc2wtMS4wLjAvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4w LjAvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYy5maXBzCTIwMDgtMTItMjkgMTM6MzU6NDkuMDAw MDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5j CTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtNTMsOCArNTMsMTIgQEAK KyAKKyAjaW5jbHVkZSAid3BfbG9jbC5oIgorICNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrI2luY2x1ZGUgPG9wZW5z c2wvZmlwcy5oPgorKyNlbmRpZgorIAorLWludCBXSElSTFBPT0xfSW5pdAkoV0hJUkxQT09MX0NU WCAqYykKKytGSVBTX05PTl9GSVBTX01EX0luaXQoV0hJUkxQT09MKQorIAl7CisgCW1lbXNldCAo YywwLHNpemVvZigqYykpOworIAlyZXR1cm4oMSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL01h a2VmaWxlLm9yZy5maXBzIG9wZW5zc2wtMS4wLjAvTWFrZWZpbGUub3JnCistLS0gb3BlbnNzbC0x LjAuMC9NYWtlZmlsZS5vcmcuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCArMDIw MAorKysrIG9wZW5zc2wtMS4wLjAvTWFrZWZpbGUub3JnCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAw MDAwMDAwICswMjAwCitAQCAtMTEwLDYgKzExMCw5IEBAIExJQktSQjU9CisgWkxJQl9JTkNMVURF PQorIExJQlpMSUI9CisgCisrIyBOb24tZW1wdHkgaWYgRklQUyBlbmFibGVkCisrRklQUz0KKysK KyBESVJTPSAgIGNyeXB0byBzc2wgZW5naW5lcyBhcHBzIHRlc3QgdG9vbHMKKyBFTkdESVJTPSBj Y2dvc3QKKyBTSExJQkRJUlM9IGNyeXB0byBzc2wKK0BAIC0xMjIsNyArMTI1LDcgQEAgU0RJUlM9 ICBcCisgCWJuIGVjIHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28gZW5naW5lIFwKKyAJYnVmZmVy IGJpbyBzdGFjayBsaGFzaCByYW5kIGVyciBcCisgCWV2cCBhc24xIHBlbSB4NTA5IHg1MDl2MyBj b25mIHR4dF9kYiBwa2NzNyBwa2NzMTIgY29tcCBvY3NwIHVpIGtyYjUgXAorLQljbXMgcHF1ZXVl IHRzIGpwYWtlIHN0b3JlCisrCWNtcyBwcXVldWUgdHMganBha2Ugc3RvcmUgZmlwcworICMga2Vl cCBpbiBtaW5kIHRoYXQgdGhlIGFib3ZlIGxpc3QgaXMgYWRqdXN0ZWQgYnkgLi9Db25maWd1cmUK KyAjIGFjY29yZGluZyB0byBuby14eHggYXJndW1lbnRzLi4uCisgCitAQCAtMjA2LDYgKzIwOSw3 IEBAIEJVSUxERU5WPQlQTEFURk9STT0nJChQTEFURk9STSknIFBST0NFU1MKKyAJCVJNRDE2MF9B U01fT0JKPSckKFJNRDE2MF9BU01fT0JKKScJCVwKKyAJCVdQX0FTTV9PQko9JyQoV1BfQVNNX09C SiknCQkJXAorIAkJUEVSTEFTTV9TQ0hFTUU9JyQoUEVSTEFTTV9TQ0hFTUUpJwkJXAorKwkJRklQ Uz0iJCR7RklQUzotJChGSVBTKX0iCVwKKyAJCVRISVM9JCR7VEhJUzotJEB9IE1BS0VGSUxFPU1h a2VmaWxlIE1BS0VPVkVSUklERVM9CisgIyBNQUtFT1ZFUlJJREVTPSBlZmZlY3RpdmVseSAiZXF1 YWxpemVzIiBHTlUtaXNoIGFuZCBTeXNWLWlzaCBtYWtlIGZsYXZvcnMsCisgIyB3aGljaCBpbiB0 dXJuIGVsaW1pbmF0ZXMgYW1iaWd1aXRpZXMgaW4gdmFyaWFibGUgdHJlYXRtZW50IHdpdGggLWUu CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL3NzbC9zc2xfY2lwaC5jLmZpcHMgb3BlbnNzbC0xLjAu MC9zc2wvc3NsX2NpcGguYworLS0tIG9wZW5zc2wtMS4wLjAvc3NsL3NzbF9jaXBoLmMuZmlwcwky MDA5LTA5LTEzIDAxOjE4OjA5LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvc3Ns L3NzbF9jaXBoLmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC03Mjcs NiArNzI3LDkgQEAgc3RhdGljIHZvaWQgc3NsX2NpcGhlcl9jb2xsZWN0X2NpcGhlcnMoYworIAkJ ICAgICEoYy0+YWxnb3JpdGhtX2F1dGggJiBkaXNhYmxlZF9hdXRoKSAmJgorIAkJICAgICEoYy0+ YWxnb3JpdGhtX2VuYyAmIGRpc2FibGVkX2VuYykgJiYKKyAJCSAgICAhKGMtPmFsZ29yaXRobV9t YWMgJiBkaXNhYmxlZF9tYWMpICYmCisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJCSghRklQU19t b2RlKCkgfHwgKGMtPmFsZ29fc3RyZW5ndGggJiBTU0xfRklQUykpICYmCisrI2VuZGlmCisgCQkg ICAgIShjLT5hbGdvcml0aG1fc3NsICYgZGlzYWJsZWRfc3NsKSkKKyAJCQl7CisgCQkJY29fbGlz dFtjb19saXN0X251bV0uY2lwaGVyID0gYzsKK0BAIC0xNDIzLDcgKzE0MjYsMTEgQEAgU1RBQ0tf T0YoU1NMX0NJUEhFUikgKnNzbF9jcmVhdGVfY2lwaGVyXworIAkgKi8KKyAJZm9yIChjdXJyID0g aGVhZDsgY3VyciAhPSBOVUxMOyBjdXJyID0gY3Vyci0+bmV4dCkKKyAJCXsKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrCQlpZiAoY3Vyci0+YWN0aXZlICYmICghRklQU19tb2RlKCkgfHwgY3Vyci0+ Y2lwaGVyLT5hbGdvX3N0cmVuZ3RoICYgU1NMX0ZJUFMpKQorKyNlbHNlCisgCQlpZiAoY3Vyci0+ YWN0aXZlKQorKyNlbmRpZgorIAkJCXsKKyAJCQlza19TU0xfQ0lQSEVSX3B1c2goY2lwaGVyc3Rh Y2ssIGN1cnItPmNpcGhlcik7CisgI2lmZGVmIENJUEhFUl9ERUJVRworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMC9zc2wvc3NsX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMC9zc2wvc3NsX2xpYi5jCist LS0gb3BlbnNzbC0xLjAuMC9zc2wvc3NsX2xpYi5jLmZpcHMJMjAxMC0wMi0xNyAyMDo0Mzo0Ni4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wL3NzbC9zc2xfbGliLmMJMjAxMC0wMy0z MCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNTIxLDYgKzE1MjEsMTQgQEAgU1NMX0NU WCAqU1NMX0NUWF9uZXcoY29uc3QgU1NMX01FVEhPRCAqbQorIAkJcmV0dXJuKE5VTEwpOworIAkJ fQorIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChtZXRoLT52 ZXJzaW9uIDwgVExTMV9WRVJTSU9OKSkJCisrCQl7CisrCQlTU0xlcnIoU1NMX0ZfU1NMX0NUWF9O RVcsIFNTTF9SX09OTFlfVExTX0FMTE9XRURfSU5fRklQU19NT0RFKTsKKysJCXJldHVybiBOVUxM OworKwkJfQorKyNlbmRpZgorKworIAlpZiAoU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RY X2lkeCgpIDwgMCkKKyAJCXsKKyAJCVNTTGVycihTU0xfRl9TU0xfQ1RYX05FVyxTU0xfUl9YNTA5 X1ZFUklGSUNBVElPTl9TRVRVUF9QUk9CTEVNUyk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL3Nz bC9zc2x0ZXN0LmMuZmlwcyBvcGVuc3NsLTEuMC4wL3NzbC9zc2x0ZXN0LmMKKy0tLSBvcGVuc3Ns LTEuMC4wL3NzbC9zc2x0ZXN0LmMuZmlwcwkyMDEwLTAzLTMwIDEwOjMzOjQ2LjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjAvc3NsL3NzbHRlc3QuYwkyMDEwLTAzLTMwIDEwOjM0OjQx LjAwMDAwMDAwMCArMDIwMAorQEAgLTI2OCw2ICsyNjgsOSBAQCBzdGF0aWMgdm9pZCBzdl91c2Fn ZSh2b2lkKQorIAl7CisgCWZwcmludGYoc3RkZXJyLCJ1c2FnZTogc3NsdGVzdCBbYXJncyAuLi5d XG4iKTsKKyAJZnByaW50ZihzdGRlcnIsIlxuIik7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwlm cHJpbnRmKHN0ZGVyciwiLUYgICAgICAgICAgICAgLSBydW4gdGVzdCBpbiBGSVBTIG1vZGVcbiIp OworKyNlbmRpZgorIAlmcHJpbnRmKHN0ZGVyciwiIC1zZXJ2ZXJfYXV0aCAgLSBjaGVjayBzZXJ2 ZXIgY2VydGlmaWNhdGVcbiIpOworIAlmcHJpbnRmKHN0ZGVyciwiIC1jbGllbnRfYXV0aCAgLSBk byBjbGllbnQgYXV0aGVudGljYXRpb25cbiIpOworIAlmcHJpbnRmKHN0ZGVyciwiIC1wcm94eSAg ICAgICAgLSBhbGxvdyBwcm94eSBjZXJ0aWZpY2F0ZXNcbiIpOworQEAgLTQ4Nyw2ICs0OTAsOSBA QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorICNlbmRpZgorIAlTVEFDS19PRihT U0xfQ09NUCkgKnNzbF9jb21wX21ldGhvZHMgPSBOVUxMOworIAlpbnQgdGVzdF9jaXBoZXJsaXN0 ID0gMDsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCWludCBmaXBzX21vZGU9MDsKKysjZW5kaWYK KyAKKyAJdmVyYm9zZSA9IDA7CisgCWRlYnVnID0gMDsKK0BAIC01MTgsNyArNTI0LDE2IEBAIGlu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCisgCisgCXdoaWxlIChhcmdjID49IDEpCisg CQl7CistCQlpZgkoc3RyY21wKCphcmd2LCItc2VydmVyX2F1dGgiKSA9PSAwKQorKwkJaWYoIXN0 cmNtcCgqYXJndiwiLUYiKSkKKysJCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJCWZpcHNf bW9kZT0xOworKyNlbHNlCisrCQkJZnByaW50ZihzdGRlcnIsIm5vdCBjb21waWxlZCB3aXRoIEZJ UFMgc3VwcG9ydCwgc28gZXhpdHRpbmcgd2l0aG91dCBydW5uaW5nLlxuIik7CisrCQkJRVhJVCgw KTsKKysjZW5kaWYKKysJCQl9CisrCQllbHNlIGlmCShzdHJjbXAoKmFyZ3YsIi1zZXJ2ZXJfYXV0 aCIpID09IDApCisgCQkJc2VydmVyX2F1dGg9MTsKKyAJCWVsc2UgaWYJKHN0cmNtcCgqYXJndiwi LWNsaWVudF9hdXRoIikgPT0gMCkKKyAJCQljbGllbnRfYXV0aD0xOworQEAgLTcxNCw2ICs3Mjks MjAgQEAgYmFkOgorIAkJRVhJVCgxKTsKKyAJCX0KKyAKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr CWlmKGZpcHNfbW9kZSkKKysJCXsKKysJCWlmKCFGSVBTX21vZGVfc2V0KDEpKQorKwkJCXsKKysJ CQlFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOworKwkJCUVSUl9wcmludF9lcnJvcnMoQklPX25l d19mcChzdGRlcnIsQklPX05PQ0xPU0UpKTsKKysJCQlFWElUKDEpOworKwkJCX0KKysJCWVsc2UK KysJCQlmcHJpbnRmKHN0ZGVyciwiKioqIElOIEZJUFMgTU9ERSAqKipcbiIpOworKwkJfQorKyNl bmRpZgorKworIAlpZiAocHJpbnRfdGltZSkKKyAJCXsKKyAJCWlmICghYmlvX3BhaXIpCitAQCAt MjE1NiwxMiArMjE4NSwxMiBAQCBzdGF0aWMgaW50IE1TX0NBTExCQUNLIGFwcF92ZXJpZnlfY2Fs bGJhCisgCQl9CisgCisgI2lmbmRlZiBPUEVOU1NMX05PX1g1MDlfVkVSSUZZCistIyBpZmRlZiBP UEVOU1NMX0ZJUFMKKysjIGlmIDAKKyAJaWYocy0+dmVyc2lvbiA9PSBUTFMxX1ZFUlNJT04pCisg CQlGSVBTX2FsbG93X21kNSgxKTsKKyAjIGVuZGlmCisgCW9rID0gWDUwOV92ZXJpZnlfY2VydChj dHgpOworLSMgaWZkZWYgT1BFTlNTTF9GSVBTCisrIyBpZiAwCisgCWlmKHMtPnZlcnNpb24gPT0g VExTMV9WRVJTSU9OKQorIAkJRklQU19hbGxvd19tZDUoMCk7CisgIyBlbmRpZgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9zc2wvczIzX2NsbnQuYy5maXBzIG9wZW5zc2wtMS4wLjAvc3NsL3MyM19j bG50LmMKKy0tLSBvcGVuc3NsLTEuMC4wL3NzbC9zMjNfY2xudC5jLmZpcHMJMjAxMC0wMi0xNiAx NToyMDo0MC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wL3NzbC9zMjNfY2xudC5j CTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMzM0LDYgKzMzNCwxNCBA QCBzdGF0aWMgaW50IHNzbDIzX2NsaWVudF9oZWxsbyhTU0wgKnMpCisgCQkJdmVyc2lvbl9tYWpv ciA9IFRMUzFfVkVSU0lPTl9NQUpPUjsKKyAJCQl2ZXJzaW9uX21pbm9yID0gVExTMV9WRVJTSU9O X01JTk9SOworIAkJCX0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCQllbHNlIGlmKEZJUFNfbW9k ZSgpKQorKwkJCXsKKysJCQlTU0xlcnIoU1NMX0ZfU1NMMjNfQ0xJRU5UX0hFTExPLAorKwkJCQkJ U1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOworKwkJCXJldHVybiAtMTsKKysJ CQl9CisrI2VuZGlmCisgCQllbHNlIGlmICh2ZXJzaW9uID09IFNTTDNfVkVSU0lPTikKKyAJCQl7 CisgCQkJdmVyc2lvbl9tYWpvciA9IFNTTDNfVkVSU0lPTl9NQUpPUjsKK0BAIC02MTcsNiArNjI1 LDE0IEBAIHN0YXRpYyBpbnQgc3NsMjNfZ2V0X3NlcnZlcl9oZWxsbyhTU0wgKnMKKyAJCWlmICgo cFsyXSA9PSBTU0wzX1ZFUlNJT05fTUlOT1IpICYmCisgCQkJIShzLT5vcHRpb25zICYgU1NMX09Q X05PX1NTTHYzKSkKKyAJCQl7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKwkJCWlmKEZJUFNfbW9k ZSgpKQorKwkJCQl7CisrCQkJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfU0VSVkVSX0hFTExPLAor KwkJCQkJU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOworKwkJCQlnb3RvIGVy cjsKKysJCQkJfQorKyNlbmRpZgorIAkJCXMtPnZlcnNpb249U1NMM19WRVJTSU9OOworIAkJCXMt Pm1ldGhvZD1TU0x2M19jbGllbnRfbWV0aG9kKCk7CisgCQkJfQorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMC9zc2wvczIzX3NydnIuYy5maXBzIG9wZW5zc2wtMS4wLjAvc3NsL3MyM19zcnZyLmMKKy0t LSBvcGVuc3NsLTEuMC4wL3NzbC9zMjNfc3J2ci5jLmZpcHMJMjAxMC0wMi0xNiAxNToyMDo0MC4w MDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wL3NzbC9zMjNfc3J2ci5jCTIwMTAtMDMt MzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMzkzLDYgKzM5MywxNSBAQCBpbnQgc3Ns MjNfZ2V0X2NsaWVudF9oZWxsbyhTU0wgKnMpCisgCQkJfQorIAkJfQorIAorKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKysJaWYgKEZJUFNfbW9kZSgpICYmIChzLT52ZXJzaW9uIDwgVExTMV9WRVJTSU9O KSkKKysJCXsKKysJCVNTTGVycihTU0xfRl9TU0wyM19HRVRfQ0xJRU5UX0hFTExPLAorKwkJCQkJ U1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUpOworKwkJZ290byBlcnI7CisrCQl9 CisrI2VuZGlmCisrCisgCWlmIChzLT5zdGF0ZSA9PSBTU0wyM19TVF9TUl9DTE5UX0hFTExPX0Ip CisgCQl7CisgCQkvKiB3ZSBoYXZlIFNTTHYzL1RMU3YxIGluIGFuIFNTTHYyIGhlYWRlcgorZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMC9zc2wvczNfY2xudC5jLmZpcHMgb3BlbnNzbC0xLjAuMC9zc2wv czNfY2xudC5jCistLS0gb3BlbnNzbC0xLjAuMC9zc2wvczNfY2xudC5jLmZpcHMJMjAxMC0wMi0y OCAwMToyNDoyNC4wMDAwMDAwMDAgKzAxMDAKKysrKyBvcGVuc3NsLTEuMC4wL3NzbC9zM19jbG50 LmMJMjAxMC0wMy0zMCAxMDozNDo0MS4wMDAwMDAwMDAgKzAyMDAKK0BAIC0xNTYsNiArMTU2LDEw IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgorICNpbmNsdWRlIDxvcGVuc3NsL21kNS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysj aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2lmbmRlZiBPUEVOU1NMX05P X0RICisgI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKyAjZW5kaWYKK0BAIC0xNTQ2LDYgKzE1NTAs OCBAQCBpbnQgc3NsM19nZXRfa2V5X2V4Y2hhbmdlKFNTTCAqcykKKyAJCQlxPW1kX2J1ZjsKKyAJ CQlmb3IgKG51bT0yOyBudW0gPiAwOyBudW0tLSkKKyAJCQkJeworKwkJCQlFVlBfTURfQ1RYX3Nl dF9mbGFncygmbWRfY3R4LAorKwkJCQkJRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKTsK KyAJCQkJRVZQX0RpZ2VzdEluaXRfZXgoJm1kX2N0eCwobnVtID09IDIpCisgCQkJCQk/cy0+Y3R4 LT5tZDU6cy0+Y3R4LT5zaGExLCBOVUxMKTsKKyAJCQkJRVZQX0RpZ2VzdFVwZGF0ZSgmbWRfY3R4 LCYocy0+czMtPmNsaWVudF9yYW5kb21bMF0pLFNTTDNfUkFORE9NX1NJWkUpOworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMC9zc2wvczNfZW5jLmMuZmlwcyBvcGVuc3NsLTEuMC4wL3NzbC9zM19lbmMu YworLS0tIG9wZW5zc2wtMS4wLjAvc3NsL3MzX2VuYy5jLmZpcHMJMjAwOS0wNC0xNiAxOToyMjo1 MC4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4wL3NzbC9zM19lbmMuYwkyMDEwLTAz LTMwIDEwOjM0OjQxLjAwMDAwMDAwMCArMDIwMAorQEAgLTE3MCw2ICsxNzAsNyBAQCBzdGF0aWMg aW50IHNzbDNfZ2VuZXJhdGVfa2V5X2Jsb2NrKFNTTCAqCisgI2VuZGlmCisgCWs9MDsKKyAJRVZQ X01EX0NUWF9pbml0KCZtNSk7CisrCUVWUF9NRF9DVFhfc2V0X2ZsYWdzKCZtNSwgRVZQX01EX0NU WF9GTEFHX05PTl9GSVBTX0FMTE9XKTsKKyAJRVZQX01EX0NUWF9pbml0KCZzMSk7CisgCWZvciAo aT0wOyAoaW50KWk8bnVtOyBpKz1NRDVfRElHRVNUX0xFTkdUSCkKKyAJCXsKK0BAIC02MTQsNiAr NjE1LDggQEAgaW50IHNzbDNfZGlnZXN0X2NhY2hlZF9yZWNvcmRzKFNTTCAqcykKKyAJCWlmICgo bWFzayAmIHMtPnMzLT50bXAubmV3X2NpcGhlci0+YWxnb3JpdGhtMikgJiYgbWQpIAorIAkJCXsK KyAJCQlzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV09RVZQX01EX0NUWF9jcmVhdGUoKTsKKysJCQlF VlBfTURfQ1RYX3NldF9mbGFncyhzLT5zMy0+aGFuZHNoYWtlX2Rnc3RbaV0sCisrCQkJCUVWUF9N RF9DVFhfRkxBR19OT05fRklQU19BTExPVyk7CisgCQkJRVZQX0RpZ2VzdEluaXRfZXgocy0+czMt PmhhbmRzaGFrZV9kZ3N0W2ldLG1kLE5VTEwpOworIAkJCUVWUF9EaWdlc3RVcGRhdGUocy0+czMt PmhhbmRzaGFrZV9kZ3N0W2ldLGhkYXRhLGhkYXRhbGVuKTsKKyAJCQl9IAorQEAgLTY3MCw2ICs2 NzMsNyBAQCBzdGF0aWMgaW50IHNzbDNfaGFuZHNoYWtlX21hYyhTU0wgKnMsIGluCisgCQlyZXR1 cm4gMDsKKyAJfQkKKyAJRVZQX01EX0NUWF9pbml0KCZjdHgpOworKwlFVlBfTURfQ1RYX3NldF9m bGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworIAlFVlBfTURfQ1RY X2NvcHlfZXgoJmN0eCxkKTsKKyAJbj1FVlBfTURfQ1RYX3NpemUoJmN0eCk7CisgCWlmIChuIDwg MCkKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjAvc3NsL3MzX3NydnIuYy5maXBzIG9wZW5zc2wtMS4w LjAvc3NsL3MzX3NydnIuYworLS0tIG9wZW5zc2wtMS4wLjAvc3NsL3MzX3NydnIuYy5maXBzCTIw MTAtMDItMjggMDA6MDQ6MTAuMDAwMDAwMDAwICswMTAwCisrKysgb3BlbnNzbC0xLjAuMC9zc2wv czNfc3J2ci5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTc1Miw2 ICsxNzUyLDggQEAgaW50IHNzbDNfc2VuZF9zZXJ2ZXJfa2V5X2V4Y2hhbmdlKFNTTCAqcworIAkJ CQlqPTA7CisgCQkJCWZvciAobnVtPTI7IG51bSA+IDA7IG51bS0tKQorIAkJCQkJeworKwkJCQkJ RVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1kX2N0eCwKKysJCQkJCQlFVlBfTURfQ1RYX0ZMQUdfTk9O X0ZJUFNfQUxMT1cpOworIAkJCQkJRVZQX0RpZ2VzdEluaXRfZXgoJm1kX2N0eCwobnVtID09IDIp CisgCQkJCQkJP3MtPmN0eC0+bWQ1OnMtPmN0eC0+c2hhMSwgTlVMTCk7CisgCQkJCQlFVlBfRGln ZXN0VXBkYXRlKCZtZF9jdHgsJihzLT5zMy0+Y2xpZW50X3JhbmRvbVswXSksU1NMM19SQU5ET01f U0laRSk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4wL3NzbC90MV9lbmMuYy5maXBzIG9wZW5zc2wt MS4wLjAvc3NsL3QxX2VuYy5jCistLS0gb3BlbnNzbC0xLjAuMC9zc2wvdDFfZW5jLmMuZmlwcwky MDA5LTA0LTE5IDIwOjAzOjEzLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjAvc3Ns L3QxX2VuYy5jCTIwMTAtMDMtMzAgMTA6MzQ6NDEuMDAwMDAwMDAwICswMjAwCitAQCAtMTY5LDYg KzE2OSw4IEBAIHN0YXRpYyB2b2lkIHRsczFfUF9oYXNoKGNvbnN0IEVWUF9NRCAqbWQKKyAKKyAJ SE1BQ19DVFhfaW5pdCgmY3R4KTsKKyAJSE1BQ19DVFhfaW5pdCgmY3R4X3RtcCk7CisrCUhNQUNf Q1RYX3NldF9mbGFncygmY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworKwlI TUFDX0NUWF9zZXRfZmxhZ3MoJmN0eF90bXAsIEVWUF9NRF9DVFhfRkxBR19OT05fRklQU19BTExP Vyk7CisgCUhNQUNfSW5pdF9leCgmY3R4LHNlYyxzZWNfbGVuLG1kLCBOVUxMKTsKKyAJSE1BQ19J bml0X2V4KCZjdHhfdG1wLHNlYyxzZWNfbGVuLG1kLCBOVUxMKTsKKyAJaWYgKHNlZWQxICE9IE5V TEwpIEhNQUNfVXBkYXRlKCZjdHgsc2VlZDEsc2VlZDFfbGVuKTsKCmRpZmYgLS1naXQgYS9vcGVu c3NsLTEuMC4wLXZlcnNpb24ucGF0Y2ggYi9vcGVuc3NsLTEuMC4wLXZlcnNpb24ucGF0Y2gKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhZWE2YQotLS0gL2Rldi9udWxsCisr KyBiL29wZW5zc2wtMS4wLjAtdmVyc2lvbi5wYXRjaApAQCAtMCwwICsxLDEzIEBACitkaWZmIC11 cCBvcGVuc3NsLTEuMC4wL2NyeXB0by9vcGVuc3Nsdi5oLnZlcnNpb24gb3BlbnNzbC0xLjAuMC9j cnlwdG8vb3BlbnNzbHYuaAorLS0tIG9wZW5zc2wtMS4wLjAvY3J5cHRvL29wZW5zc2x2LmgudmVy c2lvbgkyMDEwLTAzLTMwIDEwOjU5OjI2LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjAvY3J5cHRvL29wZW5zc2x2LmgJMjAxMC0wMy0zMCAxMTowMDo1Mi4wMDAwMDAwMDAgKzAyMDAK K0BAIC0yNSw3ICsyNSw4IEBACisgICogKFByaW9yIHRvIDAuOS41YSBiZXRhMSwgYSBkaWZmZXJl bnQgc2NoZW1lIHdhcyB1c2VkOiBNTU5ORkZSQkIgZm9yCisgICogIG1ham9yIG1pbm9yIGZpeCBm aW5hbCBwYXRjaC9iZXRhKQorICAqLworLSNkZWZpbmUgT1BFTlNTTF9WRVJTSU9OX05VTUJFUgkw eDEwMDAwMDBmTAorKy8qIHdlIGhhdmUgdG8ga2VlcCB0aGUgdmVyc2lvbiBudW1iZXIgdG8gbm90 IGJyZWFrIHRoZSBhYmkgKi8KKysjZGVmaW5lIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIJMHgxMDAw MDAwM0wKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCisgI2RlZmluZSBPUEVOU1NMX1ZFUlNJT05fVEVY VAkiT3BlblNTTCAxLjAuMC1maXBzIDI5IE1hciAyMDEwIgorICNlbHNlCgpkaWZmIC0tZ2l0IGEv b3BlbnNzbC5zcGVjIGIvb3BlbnNzbC5zcGVjCmluZGV4IDI3MjllN2UuLmU5NDYxODAgMTAwNjQ0 Ci0tLSBhL29wZW5zc2wuc3BlYworKysgYi9vcGVuc3NsLnNwZWMKQEAgLTExLDggKzExLDYgQEAK ICMgMS4wLjAgc292ZXJzaW9uID0gMTAKICVkZWZpbmUgc292ZXJzaW9uIDEwCiAKLSVkZWZpbmUg YmV0YSBiZXRhNAotCiAjIE51bWJlciBvZiB0aHJlYWRzIHRvIHNwYXduIHdoZW4gdGVzdGluZyBz b21lIHRocmVhZGluZyBmaXhlcy4KICVkZWZpbmUgdGhyZWFkX3Rlc3RfdGhyZWFkcyAlez90aHJl YWRzOiV7dGhyZWFkc319JXshP3RocmVhZHM6MX0KIApAQCAtMjMsMTAgKzIxLDEwIEBACiBTdW1t YXJ5OiBBIGdlbmVyYWwgcHVycG9zZSBjcnlwdG9ncmFwaHkgbGlicmFyeSB3aXRoIFRMUyBpbXBs ZW1lbnRhdGlvbgogTmFtZTogb3BlbnNzbAogVmVyc2lvbjogMS4wLjAKLVJlbGVhc2U6IDAuMTYu JXtiZXRhfSV7P2Rpc3R9CitSZWxlYXNlOiAxJXs/ZGlzdH0KICMgV2UgcmVtb3ZlIGNlcnRhaW4g cGF0ZW50ZWQgYWxnb3JpdGhtcyBmcm9tIHRoZSBvcGVuc3NsIHNvdXJjZSB0YXJiYWxsCiAjIHdp dGggdGhlIGhvYmJsZS1vcGVuc3NsIHNjcmlwdCB3aGljaCBpcyBpbmNsdWRlZCBiZWxvdy4KLVNv dXJjZTogb3BlbnNzbC0le3ZlcnNpb259LSV7YmV0YX0tdXNhLnRhci5iejIKK1NvdXJjZTogb3Bl bnNzbC0le3ZlcnNpb259LXVzYS50YXIuYnoyCiBTb3VyY2UxOiBob2JibGUtb3BlbnNzbAogU291 cmNlMjogTWFrZWZpbGUuY2VydGlmaWNhdGUKIFNvdXJjZTY6IG1ha2UtZHVtbXktY2VydApAQCAt MzgsMzYgKzM2LDMwIEBAIFNvdXJjZTExOiBSRUFETUUuRklQUwogUGF0Y2gwOiBvcGVuc3NsLTEu MC4wLWJldGE0LXJlZGhhdC5wYXRjaAogUGF0Y2gxOiBvcGVuc3NsLTEuMC4wLWJldGEzLWRlZmF1 bHRzLnBhdGNoCiBQYXRjaDM6IG9wZW5zc2wtMS4wLjAtYmV0YTMtc292ZXJzaW9uLnBhdGNoCi1Q YXRjaDQ6IG9wZW5zc2wtMS4wLjAtYmV0YTQtZW5naW5lc2Rpci5wYXRjaAorUGF0Y2g0OiBvcGVu c3NsLTEuMC4wLWJldGE1LWVuZ2luZXNkaXIucGF0Y2gKIFBhdGNoNTogb3BlbnNzbC0wLjkuOGEt bm8tcnBhdGgucGF0Y2gKIFBhdGNoNjogb3BlbnNzbC0wLjkuOGItdGVzdC11c2UtbG9jYWxob3N0 LnBhdGNoCiAjIEJ1ZyBmaXhlcwogUGF0Y2gyMzogb3BlbnNzbC0xLjAuMC1iZXRhNC1kZWZhdWx0 LXBhdGhzLnBhdGNoCi1QYXRjaDI0OiBvcGVuc3NsLTEuMC4wLWJldGE0LWJpbnV0aWxzLnBhdGNo CitQYXRjaDI0OiBvcGVuc3NsLTAuOS44ai1iYWQtbWltZS5wYXRjaAogIyBGdW5jdGlvbmFsaXR5 IGNoYW5nZXMKIFBhdGNoMzI6IG9wZW5zc2wtMC45LjhnLWlhNjQucGF0Y2gKIFBhdGNoMzM6IG9w ZW5zc2wtMS4wLjAtYmV0YTQtY2EtZGlyLnBhdGNoCiBQYXRjaDM0OiBvcGVuc3NsLTAuOS42LXg1 MDkucGF0Y2gKIFBhdGNoMzU6IG9wZW5zc2wtMC45LjhqLXZlcnNpb24tYWRkLWVuZ2luZXMucGF0 Y2gKLVBhdGNoMzg6IG9wZW5zc2wtMS4wLjAtYmV0YTMtY2lwaGVyLWNoYW5nZS5wYXRjaAotUGF0 Y2gzOTogb3BlbnNzbC0xLjAuMC1iZXRhMy1pcHY2LWFwcHMucGF0Y2gKLVBhdGNoNDA6IG9wZW5z c2wtMS4wLjAtYmV0YTQtZmlwcy5wYXRjaAorUGF0Y2gzODogb3BlbnNzbC0xLjAuMC1iZXRhNS1j aXBoZXItY2hhbmdlLnBhdGNoCitQYXRjaDM5OiBvcGVuc3NsLTEuMC4wLWJldGE1LWlwdjYtYXBw cy5wYXRjaAorUGF0Y2g0MDogb3BlbnNzbC0xLjAuMC1maXBzLnBhdGNoCiBQYXRjaDQxOiBvcGVu c3NsLTEuMC4wLWJldGEzLWZpcHNjaGVjay5wYXRjaAogUGF0Y2g0Mzogb3BlbnNzbC0xLjAuMC1i ZXRhMy1maXBzbW9kZS5wYXRjaAogUGF0Y2g0NDogb3BlbnNzbC0xLjAuMC1iZXRhMy1maXBzcm5n LnBhdGNoCiBQYXRjaDQ1OiBvcGVuc3NsLTAuOS44ai1lbnYtbm96bGliLnBhdGNoCi1QYXRjaDQ3 OiBvcGVuc3NsLTAuOS44ai1yZWFkbWUtd2FybmluZy5wYXRjaAotUGF0Y2g0ODogb3BlbnNzbC0w LjkuOGotYmFkLW1pbWUucGF0Y2gKK1BhdGNoNDc6IG9wZW5zc2wtMS4wLjAtYmV0YTUtcmVhZG1l LXdhcm5pbmcucGF0Y2gKIFBhdGNoNDk6IG9wZW5zc2wtMS4wLjAtYmV0YTQtYWxnby1kb2MucGF0 Y2gKIFBhdGNoNTA6IG9wZW5zc2wtMS4wLjAtYmV0YTQtZHRsczEtYWJpLnBhdGNoCi1QYXRjaDUx OiBvcGVuc3NsLTEuMC4wLWJldGE0LXZlcnNpb24ucGF0Y2gKK1BhdGNoNTE6IG9wZW5zc2wtMS4w LjAtdmVyc2lvbi5wYXRjaAorUGF0Y2g1Mjogb3BlbnNzbC0xLjAuMC1iZXRhNC1hZXNuaS5wYXRj aAogIyBCYWNrcG9ydGVkIGZpeGVzIGluY2x1ZGluZyBzZWN1cml0eSBmaXhlcwotUGF0Y2g2MDog b3BlbnNzbC0xLjAuMC1iZXRhNC1yZW5lZy5wYXRjaAotIyBUaGlzIG9uZSBpcyBub3QgYmFja3Bv cnRlZCBidXQgaGFzIHRvIGJlIGFwcGxpZWQgYWZ0ZXIgcmVuZWcgcGF0Y2gKLVBhdGNoNjE6IG9w ZW5zc2wtMS4wLjAtYmV0YTQtY2xpZW50LXJlbmVnLnBhdGNoCi1QYXRjaDYyOiBvcGVuc3NsLTEu MC4wLWJldGE0LWJhY2twb3J0cy5wYXRjaAotUGF0Y2g2Mzogb3BlbnNzbC0xLjAuMC1iZXRhNC1y ZW5lZy1lcnIucGF0Y2gKLVBhdGNoNjQ6IG9wZW5zc2wtMS4wLjAtYmV0YTQtZHRscy1pcHY2LnBh dGNoCiAKIExpY2Vuc2U6IE9wZW5TU0wKIEdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFy aWVzCkBAIC0xMTcsNyArMTA5LDcgQEAgcGFja2FnZSBwcm92aWRlcyBQZXJsIHNjcmlwdHMgZm9y IGNvbnZlcnRpbmcgY2VydGlmaWNhdGVzIGFuZCBrZXlzCiBmcm9tIG90aGVyIGZvcm1hdHMgdG8g dGhlIGZvcm1hdHMgdXNlZCBieSB0aGUgT3BlblNTTCB0b29sa2l0LgogCiAlcHJlcAotJXNldHVw IC1xIC1uICV7bmFtZX0tJXt2ZXJzaW9ufS0le2JldGF9Cislc2V0dXAgLXEgLW4gJXtuYW1lfS0l e3ZlcnNpb259CiAKICV7U09VUkNFMX0gPiAvZGV2L251bGwKICVwYXRjaDAgLXAxIC1iIC5yZWRo YXQKQEAgLTEyOCw3ICsxMjAsNyBAQCBmcm9tIG90aGVyIGZvcm1hdHMgdG8gdGhlIGZvcm1hdHMg dXNlZCBieSB0aGUgT3BlblNTTCB0b29sa2l0LgogJXBhdGNoNiAtcDEgLWIgLnVzZS1sb2NhbGhv c3QKIAogJXBhdGNoMjMgLXAxIC1iIC5kZWZhdWx0LXBhdGhzCi0lcGF0Y2gyNCAtcDEgLWIgLmJp bnV0aWxzCislcGF0Y2gyNCAtcDEgLWIgLmJhZC1taW1lCiAKICVwYXRjaDMyIC1wMSAtYiAuaWE2 NAogJXBhdGNoMzMgLXAxIC1iIC5jYS1kaXIKQEAgLTE0MiwxNiArMTM0LDEwIEBAIGZyb20gb3Ro ZXIgZm9ybWF0cyB0byB0aGUgZm9ybWF0cyB1c2VkIGJ5IHRoZSBPcGVuU1NMIHRvb2xraXQuCiAl cGF0Y2g0NCAtcDEgLWIgLmZpcHNybmcKICVwYXRjaDQ1IC1wMSAtYiAuZW52LW5vemxpYgogJXBh dGNoNDcgLXAxIC1iIC53YXJuaW5nCi0lcGF0Y2g0OCAtcDEgLWIgLmJhZC1taW1lCiAlcGF0Y2g0 OSAtcDEgLWIgLmFsZ28tZG9jCiAlcGF0Y2g1MCAtcDEgLWIgLmR0bHMxLWFiaQogJXBhdGNoNTEg LXAxIC1iIC52ZXJzaW9uCi0KLSVwYXRjaDYwIC1wMSAtYiAucmVuZWcKLSVwYXRjaDYxIC1wMSAt YiAuY2xpZW50LXJlbmVnCi0lcGF0Y2g2MiAtcDEgLWIgLmJhY2twb3J0cwotJXBhdGNoNjMgLXAx IC1iIC5yZW5lZy1lcnIKLSVwYXRjaDY0IC1wMSAtYiAuZHRscy1pcHY2CislcGF0Y2g1MiAtcDEg LWIgLmFlc25pCiAKICMgTW9kaWZ5IHRoZSB2YXJpb3VzIHBlcmwgc2NyaXB0cyB0byByZWZlcmVu Y2UgcGVybCBpbiB0aGUgcmlnaHQgbG9jYXRpb24uCiBwZXJsIHV0aWwvcGVybHBhdGgucGwgYGRp cm5hbWUgJXtfX3Blcmx9YApAQCAtMTYwLDcgKzE0Niw3IEBAIHBlcmwgdXRpbC9wZXJscGF0aC5w bCBgZGlybmFtZSAle19fcGVybH1gCiB0b3VjaCBNYWtlZmlsZQogbWFrZSBUQUJMRSBQRVJMPSV7 X19wZXJsfQogCi0lYnVpbGQgCislYnVpbGQKICMgRmlndXJlIG91dCB3aGljaCBmbGFncyB3ZSB3 YW50IHRvIHVzZS4KICMgZGVmYXVsdAogc3NsYXJjaD0le19vc30tJXtfYXJjaH0KQEAgLTI1MCwx MiArMjM2LDkgQEAgbWFrZSAtQyB0ZXN0IGFwcHMgdGVzdHMKIGluc3RhbGwgLWQgJFJQTV9CVUlM RF9ST09UeyV7X2JpbmRpcn0sJXtfaW5jbHVkZWRpcn0sJXtfbGliZGlyfSwle19tYW5kaXJ9LCV7 X2xpYmRpcn0vb3BlbnNzbH0KIG1ha2UgSU5TVEFMTF9QUkVGSVg9JFJQTV9CVUlMRF9ST09UIGlu c3RhbGwKIG1ha2UgSU5TVEFMTF9QUkVGSVg9JFJQTV9CVUlMRF9ST09UIGluc3RhbGxfZG9jcwot IyBPcGVuU1NMIGluc3RhbGwgZG9lc24ndCB1c2UgY29ycmVjdCBfbGliZGlyIG9uIDY0IGJpdCBh cmNocwotWyAiJXtfbGliZGlyfSIgIT0gL3Vzci9saWIgXSAmJiBtdiAkUlBNX0JVSUxEX1JPT1Qv dXNyL2xpYi9saWIqLnNvLiV7c292ZXJzaW9ufSAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9Lwot bXYgJFJQTV9CVUlMRF9ST09UL3Vzci9saWIvZW5naW5lcyAkUlBNX0JVSUxEX1JPT1Qle19saWJk aXJ9L29wZW5zc2wKK212ICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vZW5naW5lcyAkUlBNX0JV SUxEX1JPT1Qle19saWJkaXJ9L29wZW5zc2wKIG12ICRSUE1fQlVJTERfUk9PVCV7X3N5c2NvbmZk aXJ9L3BraS90bHMvbWFuLyogJFJQTV9CVUlMRF9ST09UJXtfbWFuZGlyfS8KIHJtZGlyICRSUE1f QlVJTERfUk9PVCV7X3N5c2NvbmZkaXJ9L3BraS90bHMvbWFuCi1tdiAkUlBNX0JVSUxEX1JPT1Qv dXNyL2xpYi8qICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vIHx8IDoKIHJlbmFtZSBzby4le3Nv dmVyc2lvbn0gc28uJXt2ZXJzaW9ufSAkUlBNX0JVSUxEX1JPT1Qle19saWJkaXJ9Lyouc28uJXtz b3ZlcnNpb259CiBmb3IgbGliIGluICRSUE1fQlVJTERfUk9PVCV7X2xpYmRpcn0vKi5zby4le3Zl cnNpb259IDsgZG8KIAljaG1vZCA3NTUgJHtsaWJ9CkBAIC0zNDcsNyArMzMwLDcgQEAgcm0gLXJm ICRSUE1fQlVJTERfUk9PVC8le19saWJkaXJ9L2ZpcHNjYW5pc3Rlci4qCiAlY2xlYW4KIFsgIiRS UE1fQlVJTERfUk9PVCIgIT0gIi8iIF0gJiYgcm0gLXJmICRSUE1fQlVJTERfUk9PVAogCi0lZmls ZXMgCislZmlsZXMKICVkZWZhdHRyKC0scm9vdCxyb290KQogJWRvYyBGQVEgTElDRU5TRSBDSEFO R0VTIE5FV1MgSU5TVEFMTCBSRUFETUUKICVkb2MgZG9jL2MtaW5kZW50YXRpb24uZWwgZG9jL29w ZW5zc2wudHh0CkBAIC00MDAsNiArMzgzLDMzIEBAIHJtIC1yZiAkUlBNX0JVSUxEX1JPT1QvJXtf bGliZGlyfS9maXBzY2FuaXN0ZXIuKgogJXBvc3R1biAtcCAvc2Jpbi9sZGNvbmZpZwogCiAlY2hh bmdlbG9nCisqIFR1ZSBNYXIgMzAgMjAxMCBUb21hcyBNcmF6IDx0bXJhekByZWRoYXQuY29tPiAx LjAuMC0xCistIHVwZGF0ZSB0byBmaW5hbCAxLjAuMCB1cHN0cmVhbSByZWxlYXNlCisKKyogVHVl IEZlYiAxNiAyMDEwIFRvbWFzIE1yYXogPHRtcmF6QHJlZGhhdC5jb20+IDEuMC4wLTAuMjIuYmV0 YTUKKy0gbWFrZSBUTFMgd29yayBpbiB0aGUgRklQUyBtb2RlCisKKyogRnJpIEZlYiAxMiAyMDEw IFRvbWFzIE1yYXogPHRtcmF6QHJlZGhhdC5jb20+IDEuMC4wLTAuMjEuYmV0YTUKKy0gZ3JhY2Vm dWxseSBoYW5kbGUgemVybyBsZW5ndGggaW4gYXNzZW1ibGVyIGltcGxlbWVudGF0aW9ucyBvZgor ICBPUEVOU1NMX2NsZWFuc2UgKCM1NjQwMjkpCistIGRvIG5vdCBmYWlsIGluIHNfc2VydmVyIGlm IGNsaWVudCBob3N0bmFtZSBub3QgcmVzb2x2YWJsZSAoIzU2MTI2MCkKKworKiBXZWQgSmFuIDIw IDIwMTAgVG9tYXMgTXJheiA8dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjAtMC4yMC5iZXRhNQorLSBu ZXcgdXBzdHJlYW0gcmVsZWFzZQorCisqIFRodSBKYW4gMTQgMjAxMCBUb21hcyBNcmF6IDx0bXJh ekByZWRoYXQuY29tPiAxLjAuMC0wLjE5LmJldGE0CistIGZpeCBDVkUtMjAwOS00MzU1IC0gbGVh ayBpbiBhcHBsaWNhdGlvbnMgaW5jb3JyZWN0bHkgY2FsbGluZworICBDUllQVE9fZnJlZV9hbGxf ZXhfZGF0YSgpIGJlZm9yZSBhcHBsaWNhdGlvbiBleGl0ICgjNTQ2NzA3KQorLSB1cHN0cmVhbSBm aXggZm9yIGZ1dHVyZSBUTFMgcHJvdG9jb2wgdmVyc2lvbiBoYW5kbGluZworCisqIFdlZCBKYW4g MTMgMjAxMCBUb21hcyBNcmF6IDx0bXJhekByZWRoYXQuY29tPiAxLjAuMC0wLjE4LmJldGE0Cist IGFkZCBzdXBwb3J0IGZvciBJbnRlbCBBRVMtTkkKKworKiBUaHUgSmFuICA3IDIwMTAgVG9tYXMg TXJheiA8dG1yYXpAcmVkaGF0LmNvbT4gMS4wLjAtMC4xNy5iZXRhNAorLSB1cHN0cmVhbSBmaXgg Y29tcHJlc3Npb24gaGFuZGxpbmcgb24gc2Vzc2lvbiByZXN1bXB0aW9uCistIHZhcmlvdXMgbnVs bCBjaGVja3MgYW5kIG90aGVyIHNtYWxsIGZpeGVzIGZyb20gdXBzdHJlYW0KKy0gdXBzdHJlYW0g Y2hhbmdlcyBmb3IgdGhlIHJlbmVnb3RpYXRpb24gaW5mbyBhY2NvcmRpbmcgdG8gdGhlIGxhdGVz dCBkcmFmdAorCiAqIE1vbiBOb3YgMjMgMjAwOSBUb21hcyBNcmF6IDx0bXJhekByZWRoYXQuY29t PiAxLjAuMC0wLjE2LmJldGE0CiAtIGZpeCBub24tZmlwcyBtaW5ndyBidWlsZCAocGF0Y2ggYnkg S2FsZXYgTGVtYmVyKQogLSBhZGQgSVBWNiBmaXggZm9yIERUTFMKQEAgLTQxOSw3ICs0MjksNyBA QCBybSAtcmYgJFJQTV9CVUlMRF9ST09ULyV7X2xpYmRpcn0vZmlwc2NhbmlzdGVyLioKICAgb3Bl bnNzaCBhbmQgcG9zc2libHkgb3RoZXIgZGVwZW5kZW5jaWVzIHdpdGggdG9vIHN0cmljdCB2ZXJz aW9uIGNoZWNrCiAKICogVGh1IE5vdiAxMiAyMDA5IFRvbWFzIE1yYXogPHRtcmF6QHJlZGhhdC5j b20+IDEuMC4wLTAuMTEuYmV0YTQKLS0gdXBkYXRlIHRvIG5ldyB1cHN0cmVhbSB2ZXJzaW9uLCBu byBzb25hbWUgYnVtcCBuZWVkZWQgCistIHVwZGF0ZSB0byBuZXcgdXBzdHJlYW0gdmVyc2lvbiwg bm8gc29uYW1lIGJ1bXAgbmVlZGVkCiAtIGZpeCBDVkUtMjAwOS0zNTU1IC0gbm90ZSB0aGF0IHRo ZSBmaXggaXMgYnlwYXNzZWQgaWYgU1NMX09QX0FMTCBpcyB1c2VkCiAgIHNvIHRoZSBjb21wYXRp YmlsaXR5IHdpdGggdW5maXhlZCBjbGllbnRzIGlzIG5vdCBicm9rZW4uIFRoZQogICBwcm90b2Nv bCBleHRlbnNpb24gaXMgYWxzbyBub3QgZmluYWwuCkBAIC01MjUsNyArNTM1LDcgQEAgcm0gLXJm ICRSUE1fQlVJTERfUk9PVC8le19saWJkaXJ9L2ZpcHNjYW5pc3Rlci4qCiAtIHRlbXBvcmFyaWx5 IHByb3ZpZGUgc3ltbGluayB0byBvbGQgc29uYW1lIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gcmVi dWlsZAogICB0aGUgZGVwZW5kZW50IHBhY2thZ2VzIGluIHJhd2hpZGUKIC0gYWRkIGVhcC1mYXN0 IHN1cHBvcnQgKCM0MjgxODEpCi0tIGFkZCBwb3NzaWJpbGl0eSB0byBkaXNhYmxlIHpsaWIgYnkg c2V0dGluZyAKKy0gYWRkIHBvc3NpYmlsaXR5IHRvIGRpc2FibGUgemxpYiBieSBzZXR0aW5nCiAt IGFkZCBmaXBzIG1vZGUgc3VwcG9ydCBmb3IgdGVzdGluZyBwdXJwb3NlcwogLSBkbyBub3QgbnVs bCBkZXJlZmVyZW5jZSBvbiBzb21lIGludmFsaWQgc21pbWUgZmlsZXMKIC0gYWRkIGJ1aWxkcmVx dWlyZXMgcGtnY29uZmlnICgjNDc5NDkzKQpAQCAtNzMyLDcgKzc0Miw3IEBAIHJtIC1yZiAkUlBN X0JVSUxEX1JPT1QvJXtfbGliZGlyfS9maXBzY2FuaXN0ZXIuKgogLSB1cGdyYWRlIHRvIG5ldyB1 cHN0cmVhbSB2ZXJzaW9uIChubyBzb25hbWUgYnVtcCBuZWVkZWQpCiAtIGRpc2FibGUgdGhyZWFk IHRlc3QgLSBpdCB3YXMgdGVzdGluZyB0aGUgYmFja3BvcnQgb2YgdGhlCiAgIFJTQSBibGluZGlu ZyAtIG5vIGxvbmdlciBuZWVkZWQKLS0gYWRkZWQgc3VwcG9ydCBmb3IgY2hhbmdpbmcgc2VyaWFs IG51bWJlciB0byAKKy0gYWRkZWQgc3VwcG9ydCBmb3IgY2hhbmdpbmcgc2VyaWFsIG51bWJlciB0 bwogICBNYWtlZmlsZS5jZXJ0aWZpY2F0ZSAoIzE1MTE4OCkKIC0gbWFrZSBjYS1idW5kbGUuY3J0 IGEgY29uZmlnIGZpbGUgKCMxMTg5MDMpCiAKCmRpZmYgLS1naXQgYS9zb3VyY2VzIGIvc291cmNl cwppbmRleCA4YTJjNjQ4Li5kYWRhZTJjIDEwMDY0NAotLS0gYS9zb3VyY2VzCisrKyBiL3NvdXJj ZXMKQEAgLTEgKzEgQEAKLTFmYzBlNDFjMjMwZDA2OThmODM0NDEzZGZiYTg2NGFkICBvcGVuc3Ns LTEuMC4wLWJldGE0LXVzYS50YXIuYnoyCitmMWQwZDczMzI3ZDc0YjMwMmY1MDM3NjNiZGRmMWNm OCAgb3BlbnNzbC0xLjAuMC11c2EudGFyLmJ6Mgo=