From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Tomas Mraz To: git-commits@fedoraproject.org Subject: [rpms/openssl] rebase_40beta: minor upstream release 1.0.2h fixing security issues Date: Tue, 09 Jun 2026 12:43:46 GMT Message-ID: <178100902651.1.17654892148311435121.rpms-openssl-eeb6ac1a6587@fedoraproject.org> List-ID: X-Git-Repo: rpms/openssl X-Git-Branch: rebase_40beta X-Git-Rev: eeb6ac1a65877b1524cb6d847f4316b3da3944a1 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvb3BlbnNzbApCcmFu Y2ggOiByZWJhc2VfNDBiZXRhCkNvbW1pdCA6IGVlYjZhYzFhNjU4NzdiMTUyNGNiNmQ4NDdmNDMx NmIzZGEzOTQ0YTEKQXV0aG9yIDogVG9tYXMgTXJheiA8dG1yYXpAZmVkb3JhcHJvamVjdC5vcmc+ CkRhdGUgICA6IDIwMTYtMDUtMDNUMTg6MjM6MTgrMDI6MDAKU3RhdHMgIDogKzE0MDA3Ly0xNDA0 OCBpbiA5IGZpbGUocykKVVJMICAgIDogaHR0cHM6Ly9zcmMuZmVkb3JhcHJvamVjdC5vcmcvcnBt cy9vcGVuc3NsL2MvZWViNmFjMWE2NTg3N2IxNTI0Y2I2ZDg0N2Y0MzE2YjNkYTM5NDRhMT9icmFu Y2g9cmViYXNlXzQwYmV0YQoKTG9nOgptaW5vciB1cHN0cmVhbSByZWxlYXNlIDEuMC4yaCBmaXhp bmcgc2VjdXJpdHkgaXNzdWVzCgotLS0KZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdu b3JlCmluZGV4IDgyMWQzMDQuLjg5NjY4NTMgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIv LmdpdGlnbm9yZQpAQCAtMjgsMyArMjgsNCBAQCBvcGVuc3NsLTEuMC4wYS11c2EudGFyLmJ6Mgog L29wZW5zc2wtMS4wLjJlLWhvYmJsZWQudGFyLnh6CiAvb3BlbnNzbC0xLjAuMmYtaG9iYmxlZC50 YXIueHoKIC9vcGVuc3NsLTEuMC4yZy1ob2JibGVkLnRhci54egorL29wZW5zc2wtMS4wLjJoLWhv YmJsZWQudGFyLnh6CgpkaWZmIC0tZ2l0IGEvb3BlbnNzbC0xLjAuMmEtd2Vhay1jaXBoZXJzLnBh dGNoIGIvb3BlbnNzbC0xLjAuMmEtd2Vhay1jaXBoZXJzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCA3Y2I3MDhkLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjJhLXdlYWst Y2lwaGVycy5wYXRjaAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjJhL3NzbC9zc2wuaC53ZWFrLWNpcGhlcnMgb3BlbnNzbC0xLjAuMmEvc3NsL3Nz bC5oCi0tLS0gb3BlbnNzbC0xLjAuMmEvc3NsL3NzbC5oLndlYWstY2lwaGVycwkyMDE1LTA0LTIy IDE1OjExOjE0LjAyNjU3NDQxNCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJhL3NzbC9zc2wuaAky MDE1LTA0LTIyIDE1OjE0OjUxLjMwMjc0NDcxMyArMDIwMAotQEAgLTMzOCw3ICszMzgsNyBAQCBl eHRlcm4gIkMiIHsKLSAgKiBUaGUgZm9sbG93aW5nIGNpcGhlciBsaXN0IGlzIHVzZWQgYnkgZGVm YXVsdC4gSXQgYWxzbyBpcyBzdWJzdGl0dXRlZCB3aGVuCi0gICogYW4gYXBwbGljYXRpb24tZGVm aW5lZCBjaXBoZXIgbGlzdCBzdHJpbmcgc3RhcnRzIHdpdGggJ0RFRkFVTFQnLgotICAqLwotLSMg ZGVmaW5lIFNTTF9ERUZBVUxUX0NJUEhFUl9MSVNUICJBTEw6IUVYUE9SVDohYU5VTEw6IWVOVUxM OiFTU0x2MiIKLSsjIGRlZmluZSBTU0xfREVGQVVMVF9DSVBIRVJfTElTVCAiQUxMOiFFWFBPUlQ6 IWFOVUxMOiFlTlVMTDohU1NMdjI6IURFUyIKLSAvKgotICAqIEFzIG9mIE9wZW5TU0wgMS4wLjAs IHNzbF9jcmVhdGVfY2lwaGVyX2xpc3QoKSBpbiBzc2wvc3NsX2NpcGguYyBhbHdheXMKLSAgKiBz dGFydHMgd2l0aCBhIHJlYXNvbmFibGUgb3JkZXIsIGFuZCBhbGwgd2UgaGF2ZSB0byBkbyBmb3Ig REVGQVVMVCBpcwoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjJjLXRydXN0ZWQtZmlyc3QtZG9j LnBhdGNoIGIvb3BlbnNzbC0xLjAuMmMtdHJ1c3RlZC1maXJzdC1kb2MucGF0Y2gKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZTEwNzYuLjAwMDAwMDAKLS0tIGEvb3BlbnNzbC0xLjAu MmMtdHJ1c3RlZC1maXJzdC1kb2MucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyODggKzAsMCBA QAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvYXBwcy9jbXMuYy50cnVzdGVkLWZpcnN0IG9wZW5z c2wtMS4wLjJjL2FwcHMvY21zLmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9hcHBzL2Ntcy5jLnRydXN0 ZWQtZmlyc3QJMjAxNS0wNi0xNSAxNzo0NToxMy4xMTIyNzk3NjEgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4yYy9hcHBzL2Ntcy5jCTIwMTUtMDYtMTUgMTc6NDY6MTEuMDQ1NjExNTc1ICswMjAwCi1A QCAtNjQ2LDYgKzY0Niw4IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAg ICAgICAgICAgICAgICAgIi1DQXBhdGggZGlyICAgIHRydXN0ZWQgY2VydGlmaWNhdGVzIGRpcmVj dG9yeVxuIik7Ci0gICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsICItQ0FmaWxlIGZpbGUgICB0 cnVzdGVkIGNlcnRpZmljYXRlcyBmaWxlXG4iKTsKLSAgICAgICAgIEJJT19wcmludGYoYmlvX2Vy ciwKLSsgICAgICAgICAgICAgICAgICAgIi10cnVzdGVkX2ZpcnN0IHVzZSB0cnVzdGVkIGNlcnRp ZmljYXRlcyBmaXJzdCB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpblxuIik7Ci0rICAgICAg ICBCSU9fcHJpbnRmKGJpb19lcnIsCi0gICAgICAgICAgICAgICAgICAgICItbm9fYWx0X2NoYWlu cyBvbmx5IGV2ZXIgdXNlIHRoZSBmaXJzdCBjZXJ0aWZpY2F0ZSBjaGFpbiBmb3VuZFxuIik7Ci0g ICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsCi0gICAgICAgICAgICAgICAgICAgICItY3JsX2No ZWNrICAgICBjaGVjayByZXZvY2F0aW9uIHN0YXR1cyBvZiBzaWduZXIncyBjZXJ0aWZpY2F0ZSB1 c2luZyBDUkxzXG4iKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2FwcHMvb2NzcC5jLnRydXN0 ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMmMvYXBwcy9vY3NwLmMKLS0tLSBvcGVuc3NsLTEuMC4yYy9h cHBzL29jc3AuYy50cnVzdGVkLWZpcnN0CTIwMTUtMDYtMTUgMTc6NDU6MTMuMTEyMjc5NzYxICsw MjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvYXBwcy9vY3NwLmMJMjAxNS0wNi0xNSAxNzo0NjozMS44 OTgwOTA5NDggKzAyMDAKLUBAIC01MzYsNiArNTM2LDggQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNo YXIgKiphcmd2KQotICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLAotICAgICAgICAgICAgICAg ICAgICAiLUNBZmlsZSBmaWxlICAgICAgICAgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgZmlsZVxuIik7 Ci0gICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsCi0rICAgICAgICAgICAgICAgICAgICItdHJ1 c3RlZF9maXJzdCAgICAgICB1c2UgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgZmlyc3Qgd2hlbiBidWls ZGluZyB0aGUgdHJ1c3QgY2hhaW5cbiIpOwotKyAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLAot ICAgICAgICAgICAgICAgICAgICAiLW5vX2FsdF9jaGFpbnMgICAgICAgb25seSBldmVyIHVzZSB0 aGUgZmlyc3QgY2VydGlmaWNhdGUgY2hhaW4gZm91bmRcbiIpOwotICAgICAgICAgQklPX3ByaW50 ZihiaW9fZXJyLAotICAgICAgICAgICAgICAgICAgICAiLVZBZmlsZSBmaWxlICAgICAgICAgdmFs aWRhdG9yIGNlcnRpZmljYXRlcyBmaWxlXG4iKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2Fw cHMvc19jbGllbnQuYy50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjJjL2FwcHMvc19jbGllbnQu YwotLS0tIG9wZW5zc2wtMS4wLjJjL2FwcHMvc19jbGllbnQuYy50cnVzdGVkLWZpcnN0CTIwMTUt MDYtMTUgMTc6NDU6MTMuMTEzMjc5Nzg0ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvYXBwcy9z X2NsaWVudC5jCTIwMTUtMDYtMTUgMTc6NDc6MDUuNjQ1ODY2NzY3ICswMjAwCi1AQCAtMzMzLDYg KzMzMyw4IEBAIHN0YXRpYyB2b2lkIHNjX3VzYWdlKHZvaWQpCi0gICAgIEJJT19wcmludGYoYmlv X2VyciwgIiAtQ0FwYXRoIGFyZyAgIC0gUEVNIGZvcm1hdCBkaXJlY3Rvcnkgb2YgQ0Enc1xuIik7 Ci0gICAgIEJJT19wcmludGYoYmlvX2VyciwgIiAtQ0FmaWxlIGFyZyAgIC0gUEVNIGZvcm1hdCBm aWxlIG9mIENBJ3NcbiIpOwotICAgICBCSU9fcHJpbnRmKGJpb19lcnIsCi0rICAgICAgICAgICAg ICAgIiAtdHJ1c3RlZF9maXJzdCAtIFVzZSB0cnVzdGVkIENBJ3MgZmlyc3Qgd2hlbiBidWlsZGlu ZyB0aGUgdHJ1c3QgY2hhaW5cbiIpOwotKyAgICBCSU9fcHJpbnRmKGJpb19lcnIsCi0gICAgICAg ICAgICAgICAgIiAtbm9fYWx0X2NoYWlucyAtIG9ubHkgZXZlciB1c2UgdGhlIGZpcnN0IGNlcnRp ZmljYXRlIGNoYWluIGZvdW5kXG4iKTsKLSAgICAgQklPX3ByaW50ZihiaW9fZXJyLAotICAgICAg ICAgICAgICAgICIgLXJlY29ubmVjdCAgICAtIERyb3AgYW5kIHJlLW1ha2UgdGhlIGNvbm5lY3Rp b24gd2l0aCB0aGUgc2FtZSBTZXNzaW9uLUlEXG4iKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJj L2FwcHMvc21pbWUuYy50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjJjL2FwcHMvc21pbWUuYwot LS0tIG9wZW5zc2wtMS4wLjJjL2FwcHMvc21pbWUuYy50cnVzdGVkLWZpcnN0CTIwMTUtMDYtMTUg MTc6NDU6MTMuMTEzMjc5Nzg0ICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvYXBwcy9zbWltZS5j CTIwMTUtMDYtMTUgMTc6NDc6MzkuMDkwNjM1NjIxICswMjAwCi1AQCAtNDQyLDYgKzQ0Miw4IEBA IGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAgICAgICAgICAgICAgICAgIi1D QXBhdGggZGlyICAgIHRydXN0ZWQgY2VydGlmaWNhdGVzIGRpcmVjdG9yeVxuIik7Ci0gICAgICAg ICBCSU9fcHJpbnRmKGJpb19lcnIsICItQ0FmaWxlIGZpbGUgICB0cnVzdGVkIGNlcnRpZmljYXRl cyBmaWxlXG4iKTsKLSAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwKLSsgICAgICAgICAgICAg ICAgICAgIi10cnVzdGVkX2ZpcnN0IHVzZSB0cnVzdGVkIGNlcnRpZmljYXRlcyBmaXJzdCB3aGVu IGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpblxuIik7Ci0rICAgICAgICBCSU9fcHJpbnRmKGJpb19l cnIsCi0gICAgICAgICAgICAgICAgICAgICItbm9fYWx0X2NoYWlucyBvbmx5IGV2ZXIgdXNlIHRo ZSBmaXJzdCBjZXJ0aWZpY2F0ZSBjaGFpbiBmb3VuZFxuIik7Ci0gICAgICAgICBCSU9fcHJpbnRm KGJpb19lcnIsCi0gICAgICAgICAgICAgICAgICAgICItY3JsX2NoZWNrICAgICBjaGVjayByZXZv Y2F0aW9uIHN0YXR1cyBvZiBzaWduZXIncyBjZXJ0aWZpY2F0ZSB1c2luZyBDUkxzXG4iKTsKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2FwcHMvc19zZXJ2ZXIuYy50cnVzdGVkLWZpcnN0IG9wZW5z c2wtMS4wLjJjL2FwcHMvc19zZXJ2ZXIuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2FwcHMvc19zZXJ2 ZXIuYy50cnVzdGVkLWZpcnN0CTIwMTUtMDYtMTUgMTc6NDU6MTMuMTE0Mjc5ODA3ICswMjAwCi0r Kysgb3BlbnNzbC0xLjAuMmMvYXBwcy9zX3NlcnZlci5jCTIwMTUtMDYtMTUgMTc6NDc6MjQuODQx MzA4MDQ2ICswMjAwCi1AQCAtNTcyLDYgKzU3Miw4IEBAIHN0YXRpYyB2b2lkIHN2X3VzYWdlKHZv aWQpCi0gICAgIEJJT19wcmludGYoYmlvX2VyciwgIiAtQ0FwYXRoIGFyZyAgIC0gUEVNIGZvcm1h dCBkaXJlY3Rvcnkgb2YgQ0Enc1xuIik7Ci0gICAgIEJJT19wcmludGYoYmlvX2VyciwgIiAtQ0Fm aWxlIGFyZyAgIC0gUEVNIGZvcm1hdCBmaWxlIG9mIENBJ3NcbiIpOwotICAgICBCSU9fcHJpbnRm KGJpb19lcnIsCi0rICAgICAgICAgICAgICAgIiAtdHJ1c3RlZF9maXJzdCAtIFVzZSB0cnVzdGVk IENBJ3MgZmlyc3Qgd2hlbiBidWlsZGluZyB0aGUgdHJ1c3QgY2hhaW5cbiIpOwotKyAgICBCSU9f cHJpbnRmKGJpb19lcnIsCi0gICAgICAgICAgICAgICAgIiAtbm9fYWx0X2NoYWlucyAtIG9ubHkg ZXZlciB1c2UgdGhlIGZpcnN0IGNlcnRpZmljYXRlIGNoYWluIGZvdW5kXG4iKTsKLSAgICAgQklP X3ByaW50ZihiaW9fZXJyLAotICAgICAgICAgICAgICAgICIgLW5vY2VydCAgICAgICAtIERvbid0 IHVzZSBhbnkgY2VydGlmaWNhdGVzIChBbm9uLURIKVxuIik7Ci1kaWZmIC11cCBvcGVuc3NsLTEu MC4yYy9hcHBzL3NfdGltZS5jLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMmMvYXBwcy9zX3Rp bWUuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2FwcHMvc190aW1lLmMudHJ1c3RlZC1maXJzdAkyMDE1 LTA2LTE1IDE3OjQ1OjEzLjAxMDI3NzQxNiArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2FwcHMv c190aW1lLmMJMjAxNS0wNi0xNSAxNzo0NToxMy4xMTQyNzk4MDcgKzAyMDAKLUBAIC0xODIsNiAr MTgyLDcgQEAgc3RhdGljIHZvaWQgc190aW1lX3VzYWdlKHZvaWQpCi0gICAgICAgICAgICAgICAg IGZpbGUgaWYgbm90IHNwZWNpZmllZCBieSB0aGlzIG9wdGlvblxuXAotIC1DQXBhdGggYXJnICAg LSBQRU0gZm9ybWF0IGRpcmVjdG9yeSBvZiBDQSdzXG5cCi0gLUNBZmlsZSBhcmcgICAtIFBFTSBm b3JtYXQgZmlsZSBvZiBDQSdzXG5cCi0rLXRydXN0ZWRfZmlyc3QgLSBVc2UgdHJ1c3RlZCBDQSdz IGZpcnN0IHdoZW4gYnVpbGRpbmcgdGhlIHRydXN0IGNoYWluXG5cCi0gLWNpcGhlciAgICAgICAt IHByZWZlcnJlZCBjaXBoZXIgdG8gdXNlLCBwbGF5IHdpdGggJ29wZW5zc2wgY2lwaGVycydcblxu IjsKLSAKLSAgICAgcHJpbnRmKCJ1c2FnZTogc190aW1lIDxhcmdzPlxuXG4iKTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjJjL2FwcHMvdHMuYy50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjJjL2Fw cHMvdHMuYwotLS0tIG9wZW5zc2wtMS4wLjJjL2FwcHMvdHMuYy50cnVzdGVkLWZpcnN0CTIwMTUt MDYtMTUgMTc6NDU6MTMuMDY1Mjc4NjgxICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvYXBwcy90 cy5jCTIwMTUtMDYtMTUgMTc6NDU6MTMuMTE0Mjc5ODA3ICswMjAwCi1AQCAtMzUyLDcgKzM1Miw3 IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAgICAgICAgICAgICAidHMg LXZlcmlmeSBbLWRhdGEgZmlsZV90b19oYXNoXSBbLWRpZ2VzdCBkaWdlc3RfYnl0ZXNdICIKLSAg ICAgICAgICAgICAgICAiWy1xdWVyeWZpbGUgcmVxdWVzdC50c3FdICIKLSAgICAgICAgICAgICAg ICAiLWluIHJlc3BvbnNlLnRzciBbLXRva2VuX2luXSAiCi0tICAgICAgICAgICAgICAgIi1DQXBh dGggY2FfcGF0aCAtQ0FmaWxlIGNhX2ZpbGUucGVtICIKLSsgICAgICAgICAgICAgICAiLUNBcGF0 aCBjYV9wYXRoIC1DQWZpbGUgY2FfZmlsZS5wZW0gLXRydXN0ZWRfZmlyc3QiCi0gICAgICAgICAg ICAgICAgIi11bnRydXN0ZWQgY2VydF9maWxlLnBlbVxuIik7Ci0gIGNsZWFudXA6Ci0gICAgIC8q IENsZWFuIHVwLiAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmMvYXBwcy92ZXJpZnkuYy50cnVz dGVkLWZpcnN0IG9wZW5zc2wtMS4wLjJjL2FwcHMvdmVyaWZ5LmMKLS0tLSBvcGVuc3NsLTEuMC4y Yy9hcHBzL3ZlcmlmeS5jLnRydXN0ZWQtZmlyc3QJMjAxNS0wNi0xNSAxNzo0NToxMy4xMTQyNzk4 MDcgKzAyMDAKLSsrKyBvcGVuc3NsLTEuMC4yYy9hcHBzL3ZlcmlmeS5jCTIwMTUtMDYtMTUgMTc6 NDg6MDMuOTc5MjA3Nzc4ICswMjAwCi1AQCAtMjMxLDcgKzIzMSw3IEBAIGludCBNQUlOKGludCBh cmdjLCBjaGFyICoqYXJndikKLSAgZW5kOgotICAgICBpZiAocmV0ID09IDEpIHsKLSAgICAgICAg IEJJT19wcmludGYoYmlvX2VyciwKLS0gICAgICAgICAgICAgICAgICAgInVzYWdlOiB2ZXJpZnkg Wy12ZXJib3NlXSBbLUNBcGF0aCBwYXRoXSBbLUNBZmlsZSBmaWxlXSBbLXB1cnBvc2UgcHVycG9z ZV0gWy1jcmxfY2hlY2tdIik7Ci0rICAgICAgICAgICAgICAgICAgICJ1c2FnZTogdmVyaWZ5IFst dmVyYm9zZV0gWy1DQXBhdGggcGF0aF0gWy1DQWZpbGUgZmlsZV0gWy10cnVzdGVkX2ZpcnN0XSBb LXB1cnBvc2UgcHVycG9zZV0gWy1jcmxfY2hlY2tdIik7Ci0gICAgICAgICBCSU9fcHJpbnRmKGJp b19lcnIsICIgWy1ub19hbHRfY2hhaW5zXSBbLWF0dGltZSB0aW1lc3RhbXBdIik7Ci0gI2lmbmRl ZiBPUEVOU1NMX05PX0VOR0lORQotICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLCAiIFstZW5n aW5lIGVdIik7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9kb2MvYXBwcy9jbXMucG9kLnRydXN0 ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMmMvZG9jL2FwcHMvY21zLnBvZAotLS0tIG9wZW5zc2wtMS4w LjJjL2RvYy9hcHBzL2Ntcy5wb2QudHJ1c3RlZC1maXJzdAkyMDE1LTA2LTEyIDE2OjUxOjIxLjAw MDAwMDAwMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2RvYy9hcHBzL2Ntcy5wb2QJMjAxNS0w Ni0xNSAxNzo0ODo0My42MTUxMTg5NTggKzAyMDAKLUBAIC0zNSw2ICszNSw3IEBAIEI8b3BlbnNz bD4gQjxjbXM+Ci0gW0I8LXByaW50Pl0KLSBbQjwtQ0FmaWxlIGZpbGU+XQotIFtCPC1DQXBhdGgg ZGlyPl0KLStbQjwtdHJ1c3RlZF9maXJzdD5dCi0gW0I8LW5vX2FsdF9jaGFpbnM+XQotIFtCPC1t ZCBkaWdlc3Q+XQotIFtCPC1bY2lwaGVyXT5dCi1AQCAtMjQ1LDYgKzI0NiwxMiBAQCBCPC12ZXJp Znk+LiBUaGlzIGRpcmVjdG9yeSBtdXN0IGJlIGEgc3RhCi0gaXMgYSBoYXNoIG9mIGVhY2ggc3Vi amVjdCBuYW1lICh1c2luZyBCPHg1MDkgLWhhc2g+KSBzaG91bGQgYmUgbGlua2VkCi0gdG8gZWFj aCBjZXJ0aWZpY2F0ZS4KLSAKLSs9aXRlbSBCPC10cnVzdGVkX2ZpcnN0PgotKwotK1VzZSBjZXJ0 aWZpY2F0ZXMgaW4gQ0EgZmlsZSBvciBDQSBkaXJlY3RvcnkgYmVmb3JlIHVudHJ1c3RlZCBjZXJ0 aWZpY2F0ZXMKLStmcm9tIHRoZSBtZXNzYWdlIHdoZW4gYnVpbGRpbmcgdGhlIHRydXN0IGNoYWlu IHRvIHZlcmlmeSBjZXJ0aWZpY2F0ZXMuCi0rVGhpcyBpcyBtYWlubHkgdXNlZnVsIGluIGVudmly b25tZW50cyB3aXRoIEJyaWRnZSBDQSBvciBDcm9zcy1DZXJ0aWZpZWQgQ0FzLgotKwotID1pdGVt IEI8LW1kIGRpZ2VzdD4KLSAKLSBkaWdlc3QgYWxnb3JpdGhtIHRvIHVzZSB3aGVuIHNpZ25pbmcg b3IgcmVzaWduaW5nLiBJZiBub3QgcHJlc2VudCB0aGVuIHRoZQotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmMvZG9jL2FwcHMvb2NzcC5wb2QudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4yYy9kb2Mv YXBwcy9vY3NwLnBvZAotLS0tIG9wZW5zc2wtMS4wLjJjL2RvYy9hcHBzL29jc3AucG9kLnRydXN0 ZWQtZmlyc3QJMjAxNS0wNi0xNSAxNzo0NToxMy4xMTUyNzk4MzAgKzAyMDAKLSsrKyBvcGVuc3Ns LTEuMC4yYy9kb2MvYXBwcy9vY3NwLnBvZAkyMDE1LTA2LTE1IDE3OjQ5OjA2LjMzNzY0MTMyMCAr MDIwMAotQEAgLTI5LDcgKzI5LDggQEAgQjxvcGVuc3NsPiBCPG9jc3A+Ci0gW0I8LXBhdGg+XQot IFtCPC1DQXBhdGggZGlyPl0KLSBbQjwtQ0FmaWxlIGZpbGU+XQotLVtCPC1ub19hbHRfY2hhaW5z Pl1dCi0rW0I8LXRydXN0ZWRfZmlyc3Q+XQotK1tCPC1ub19hbHRfY2hhaW5zPl0KLSBbQjwtVkFm aWxlIGZpbGU+XQotIFtCPC12YWxpZGl0eV9wZXJpb2Qgbj5dCi0gW0I8LXN0YXR1c19hZ2Ugbj5d Ci1AQCAtMTQ0LDYgKzE0NSwxMyBAQCBjb25uZWN0aW9uIHRpbWVvdXQgdG8gdGhlIE9DU1AgcmVz cG9uZGVyCi0gZmlsZSBvciBwYXRobmFtZSBjb250YWluaW5nIHRydXN0ZWQgQ0EgY2VydGlmaWNh dGVzLiBUaGVzZSBhcmUgdXNlZCB0byB2ZXJpZnkKLSB0aGUgc2lnbmF0dXJlIG9uIHRoZSBPQ1NQ IHJlc3BvbnNlLgotIAotKz1pdGVtIEI8LXRydXN0ZWRfZmlyc3Q+Ci0rCi0rVXNlIGNlcnRpZmlj YXRlcyBpbiBDQSBmaWxlIG9yIENBIGRpcmVjdG9yeSBvdmVyIGNlcnRpZmljYXRlcyBwcm92aWRl ZAotK2luIHRoZSByZXNwb25zZSBvciByZXNpZGluZyBpbiBvdGhlciBjZXJ0aWZpY2F0ZXMgZmls ZSB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdAotK2NoYWluIHRvIHZlcmlmeSByZXNwb25kZXIgY2Vy dGlmaWNhdGUuCi0rVGhpcyBpcyBtYWlubHkgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aXRoIEJy aWRnZSBDQSBvciBDcm9zcy1DZXJ0aWZpZWQgQ0FzLgotKwotID1pdGVtIEI8LW5vX2FsdF9jaGFp bnM+Ci0gCi0gU2VlIEw8Qjx2ZXJpZnk+fHZlcmlmeSgxKT4gbWFudWFsIHBhZ2UgZm9yIGRldGFp bHMuCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9kb2MvYXBwcy9zX2NsaWVudC5wb2QudHJ1c3Rl ZC1maXJzdCBvcGVuc3NsLTEuMC4yYy9kb2MvYXBwcy9zX2NsaWVudC5wb2QKLS0tLSBvcGVuc3Ns LTEuMC4yYy9kb2MvYXBwcy9zX2NsaWVudC5wb2QudHJ1c3RlZC1maXJzdAkyMDE1LTA2LTE1IDE3 OjQ1OjEzLjExNTI3OTgzMCArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2RvYy9hcHBzL3NfY2xp ZW50LnBvZAkyMDE1LTA2LTE1IDE3OjQ5OjIzLjk4NDA0Njk4OSArMDIwMAotQEAgLTE5LDYgKzE5 LDcgQEAgQjxvcGVuc3NsPiBCPHNfY2xpZW50PgotIFtCPC1wYXNzIGFyZz5dCi0gW0I8LUNBcGF0 aCBkaXJlY3Rvcnk+XQotIFtCPC1DQWZpbGUgZmlsZW5hbWU+XQotK1tCPC10cnVzdGVkX2ZpcnN0 Pl0KLSBbQjwtbm9fYWx0X2NoYWlucz5dCi0gW0I8LXJlY29ubmVjdD5dCi0gW0I8LXBhdXNlPl0K LUBAIC0xMjQsNyArMTI1LDcgQEAgYWxzbyB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlIGNsaWVudCBj ZXJ0aQotIEEgZmlsZSBjb250YWluaW5nIHRydXN0ZWQgY2VydGlmaWNhdGVzIHRvIHVzZSBkdXJp bmcgc2VydmVyIGF1dGhlbnRpY2F0aW9uCi0gYW5kIHRvIHVzZSB3aGVuIGF0dGVtcHRpbmcgdG8g YnVpbGQgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBjaGFpbi4KLSAKLS09aXRlbSBCPC1wdXJwb3Nl LCAtaWdub3JlX2NyaXRpY2FsLCAtaXNzdWVyX2NoZWNrcywgLWNybF9jaGVjaywgLWNybF9jaGVj a19hbGwsIC1wb2xpY3lfY2hlY2ssIC1leHRlbmRlZF9jcmwsIC14NTA5X3N0cmljdCwgLXBvbGlj eSAtY2hlY2tfc3Nfc2lnIC1ub19hbHRfY2hhaW5zPgotKz1pdGVtIEI8LXB1cnBvc2UsIC1pZ25v cmVfY3JpdGljYWwsIC1pc3N1ZXJfY2hlY2tzLCAtY3JsX2NoZWNrLCAtY3JsX2NoZWNrX2FsbCwg LXBvbGljeV9jaGVjaywgLWV4dGVuZGVkX2NybCwgLXg1MDlfc3RyaWN0LCAtcG9saWN5IC1jaGVj a19zc19zaWcsIC10cnVzdGVkX2ZpcnN0IC1ub19hbHRfY2hhaW5zPgotIAotIFNldCB2YXJpb3Vz IGNlcnRpZmljYXRlIGNoYWluIHZhbGlhZGl0aW9uIG9wdGlvbi4gU2VlIHRoZQotIEw8Qjx2ZXJp Znk+fHZlcmlmeSgxKT4gbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4yYy9kb2MvYXBwcy9zbWltZS5wb2QudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4yYy9k b2MvYXBwcy9zbWltZS5wb2QKLS0tLSBvcGVuc3NsLTEuMC4yYy9kb2MvYXBwcy9zbWltZS5wb2Qu dHJ1c3RlZC1maXJzdAkyMDE1LTA2LTEyIDE2OjUxOjIxLjAwMDAwMDAwMCArMDIwMAotKysrIG9w ZW5zc2wtMS4wLjJjL2RvYy9hcHBzL3NtaW1lLnBvZAkyMDE1LTA2LTE1IDE3OjUwOjAwLjg1Njg5 NDY0OCArMDIwMAotQEAgLTE1LDYgKzE1LDkgQEAgQjxvcGVuc3NsPiBCPHNtaW1lPgotIFtCPC1w azdvdXQ+XQotIFtCPC1bY2lwaGVyXT5dCi0gW0I8LWluIGZpbGU+XQotK1tCPC1DQWZpbGUgZmls ZT5dCi0rW0I8LUNBcGF0aCBkaXI+XQotK1tCPC10cnVzdGVkX2ZpcnN0Pl0KLSBbQjwtbm9fYWx0 X2NoYWlucz5dCi0gW0I8LWNlcnRmaWxlIGZpbGU+XQotIFtCPC1zaWduZXIgZmlsZT5dCi1AQCAt MTQ3LDYgKzE1MCwxMiBAQCBCPC12ZXJpZnk+LiBUaGlzIGRpcmVjdG9yeSBtdXN0IGJlIGEgc3Rh Ci0gaXMgYSBoYXNoIG9mIGVhY2ggc3ViamVjdCBuYW1lICh1c2luZyBCPHg1MDkgLWhhc2g+KSBz aG91bGQgYmUgbGlua2VkCi0gdG8gZWFjaCBjZXJ0aWZpY2F0ZS4KLSAKLSs9aXRlbSBCPC10cnVz dGVkX2ZpcnN0PgotKwotK1VzZSBjZXJ0aWZpY2F0ZXMgaW4gQ0EgZmlsZSBvciBDQSBkaXJlY3Rv cnkgb3ZlciBjZXJ0aWZpY2F0ZXMgcHJvdmlkZWQKLStpbiB0aGUgbWVzc2FnZSB3aGVuIGJ1aWxk aW5nIHRoZSB0cnVzdCBjaGFpbiB0byB2ZXJpZnkgYSBjZXJ0aWZpY2F0ZS4KLStUaGlzIGlzIG1h aW5seSB1c2VmdWwgaW4gZW52aXJvbm1lbnRzIHdpdGggQnJpZGdlIENBIG9yIENyb3NzLUNlcnRp ZmllZCBDQXMuCi0rCi0gPWl0ZW0gQjwtbWQgZGlnZXN0PgotIAotIGRpZ2VzdCBhbGdvcml0aG0g dG8gdXNlIHdoZW4gc2lnbmluZyBvciByZXNpZ25pbmcuIElmIG5vdCBwcmVzZW50IHRoZW4gdGhl Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yYy9kb2MvYXBwcy9zX3NlcnZlci5wb2QudHJ1c3RlZC1m aXJzdCBvcGVuc3NsLTEuMC4yYy9kb2MvYXBwcy9zX3NlcnZlci5wb2QKLS0tLSBvcGVuc3NsLTEu MC4yYy9kb2MvYXBwcy9zX3NlcnZlci5wb2QudHJ1c3RlZC1maXJzdAkyMDE1LTA2LTE1IDE3OjQ1 OjEzLjExNjI3OTg1MyArMDIwMAotKysrIG9wZW5zc2wtMS4wLjJjL2RvYy9hcHBzL3Nfc2VydmVy LnBvZAkyMDE1LTA2LTE1IDE3OjQ5OjM3LjQyMDM1NTg3MyArMDIwMAotQEAgLTMzLDYgKzMzLDcg QEAgQjxvcGVuc3NsPiBCPHNfc2VydmVyPgotIFtCPC1zdGF0ZT5dCi0gW0I8LUNBcGF0aCBkaXJl Y3Rvcnk+XQotIFtCPC1DQWZpbGUgZmlsZW5hbWU+XQotK1tCPC10cnVzdGVkX2ZpcnN0Pl0KLSBb Qjwtbm9fYWx0X2NoYWlucz5dCi0gW0I8LW5vY2VydD5dCi0gW0I8LWNpcGhlciBjaXBoZXJsaXN0 Pl0KLUBAIC0xNzUsNiArMTc2LDEyIEBAIGFuZCB0byB1c2Ugd2hlbiBhdHRlbXB0aW5nIHRvIGJ1 aWxkIHRoZQotIGlzIGFsc28gdXNlZCBpbiB0aGUgbGlzdCBvZiBhY2NlcHRhYmxlIGNsaWVudCBD QXMgcGFzc2VkIHRvIHRoZSBjbGllbnQgd2hlbgotIGEgY2VydGlmaWNhdGUgaXMgcmVxdWVzdGVk LgotIAotKz1pdGVtIEI8LXRydXN0ZWRfZmlyc3Q+Ci0rCi0rVXNlIGNlcnRpZmljYXRlcyBpbiBD QSBmaWxlIG9yIENBIGRpcmVjdG9yeSBiZWZvcmUgb3RoZXIgY2VydGlmaWNhdGVzIAotK3doZW4g YnVpbGRpbmcgdGhlIHRydXN0IGNoYWluIHRvIHZlcmlmeSBjbGllbnQgY2VydGlmaWNhdGVzLgot K1RoaXMgaXMgbWFpbmx5IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2l0aCBCcmlkZ2UgQ0Egb3Ig Q3Jvc3MtQ2VydGlmaWVkIENBcy4KLSsKLSA9aXRlbSBCPC1ub19hbHRfY2hhaW5zPgotIAotIFNl ZSB0aGUgTDxCPHZlcmlmeT58dmVyaWZ5KDEpPiBtYW51YWwgcGFnZSBmb3IgZGV0YWlscy4KLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2RvYy9hcHBzL3NfdGltZS5wb2QudHJ1c3RlZC1maXJzdCBv cGVuc3NsLTEuMC4yYy9kb2MvYXBwcy9zX3RpbWUucG9kCi0tLS0gb3BlbnNzbC0xLjAuMmMvZG9j L2FwcHMvc190aW1lLnBvZC50cnVzdGVkLWZpcnN0CTIwMTUtMDYtMTIgMTY6NTE6MjEuMDAwMDAw MDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvZG9jL2FwcHMvc190aW1lLnBvZAkyMDE1LTA2 LTE1IDE3OjQ1OjEzLjExNjI3OTg1MyArMDIwMAotQEAgLTE0LDYgKzE0LDcgQEAgQjxvcGVuc3Ns PiBCPHNfdGltZT4KLSBbQjwta2V5IGZpbGVuYW1lPl0KLSBbQjwtQ0FwYXRoIGRpcmVjdG9yeT5d Ci0gW0I8LUNBZmlsZSBmaWxlbmFtZT5dCi0rW0I8LXRydXN0ZWRfZmlyc3Q+XQotIFtCPC1yZXVz ZT5dCi0gW0I8LW5ldz5dCi0gW0I8LXZlcmlmeSBkZXB0aD5dCi1AQCAtNzYsNiArNzcsMTIgQEAg YWxzbyB1c2VkIHdoZW4gYnVpbGRpbmcgdGhlIGNsaWVudCBjZXJ0aQotIEEgZmlsZSBjb250YWlu aW5nIHRydXN0ZWQgY2VydGlmaWNhdGVzIHRvIHVzZSBkdXJpbmcgc2VydmVyIGF1dGhlbnRpY2F0 aW9uCi0gYW5kIHRvIHVzZSB3aGVuIGF0dGVtcHRpbmcgdG8gYnVpbGQgdGhlIGNsaWVudCBjZXJ0 aWZpY2F0ZSBjaGFpbi4KLSAKLSs9aXRlbSBCPC10cnVzdGVkX2ZpcnN0PgotKwotK1VzZSBjZXJ0 aWZpY2F0ZXMgaW4gQ0EgZmlsZSBvciBDQSBkaXJlY3Rvcnkgb3ZlciB0aGUgY2VydGlmaWNhdGVz IHByb3ZpZGVkCi0rYnkgdGhlIHNlcnZlciB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpbiB0 byB2ZXJpZnkgc2VydmVyIGNlcnRpZmljYXRlLgotK1RoaXMgaXMgbWFpbmx5IHVzZWZ1bCBpbiBl bnZpcm9ubWVudHMgd2l0aCBCcmlkZ2UgQ0Egb3IgQ3Jvc3MtQ2VydGlmaWVkIENBcy4KLSsKLSA9 aXRlbSBCPC1uZXc+Ci0gCi0gcGVyZm9ybXMgdGhlIHRpbWluZyB0ZXN0IHVzaW5nIGEgbmV3IHNl c3Npb24gSUQgZm9yIGVhY2ggY29ubmVjdGlvbi4KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2Rv Yy9hcHBzL3RzLnBvZC50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjJjL2RvYy9hcHBzL3RzLnBv ZAotLS0tIG9wZW5zc2wtMS4wLjJjL2RvYy9hcHBzL3RzLnBvZC50cnVzdGVkLWZpcnN0CTIwMTUt MDYtMTIgMTY6NTE6MjEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvZG9jL2Fw cHMvdHMucG9kCTIwMTUtMDYtMTUgMTc6NDU6MTMuMTE2Mjc5ODUzICswMjAwCi1AQCAtNDYsNiAr NDYsNyBAQCBCPC12ZXJpZnk+Ci0gW0I8LXRva2VuX2luPl0KLSBbQjwtQ0FwYXRoPiB0cnVzdGVk X2NlcnRfcGF0aF0KLSBbQjwtQ0FmaWxlPiB0cnVzdGVkX2NlcnRzLnBlbV0KLStbQjwtdHJ1c3Rl ZF9maXJzdD5dCi0gW0I8LXVudHJ1c3RlZD4gY2VydF9maWxlLnBlbV0KLSAKLSA9aGVhZDEgREVT Q1JJUFRJT04KLUBAIC0zMjQsNiArMzI1LDEyIEBAIEw8dmVyaWZ5KDEpfHZlcmlmeSgxKT4gZm9y IGFkZGl0aW9uYWwgZGUKLSBvciBCPC1DQXBhdGg+IG11c3QgYmUgc3BlY2lmaWVkLgotIChPcHRp b25hbCkKLSAKLSs9aXRlbSBCPC10cnVzdGVkX2ZpcnN0PgotKwotK1VzZSBjZXJ0aWZpY2F0ZXMg aW4gQ0EgZmlsZSBvciBDQSBkaXJlY3RvcnkgYmVmb3JlIG90aGVyIGNlcnRpZmljYXRlcwotK3do ZW4gYnVpbGRpbmcgdGhlIHRydXN0IGNoYWluIHRvIHZlcmlmeSBjZXJ0aWZpY2F0ZXMuCi0rVGhp cyBpcyBtYWlubHkgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aXRoIEJyaWRnZSBDQSBvciBDcm9z cy1DZXJ0aWZpZWQgQ0FzLgotKwotID1pdGVtIEI8LXVudHJ1c3RlZD4gY2VydF9maWxlLnBlbQot IAotIFNldCBvZiBhZGRpdGlvbmFsIHVudHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgaW4gUEVNIGZvcm1h dCB3aGljaCBtYXkgYmUKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJjL2RvYy9hcHBzL3ZlcmlmeS5w b2QudHJ1c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4yYy9kb2MvYXBwcy92ZXJpZnkucG9kCi0tLS0g b3BlbnNzbC0xLjAuMmMvZG9jL2FwcHMvdmVyaWZ5LnBvZC50cnVzdGVkLWZpcnN0CTIwMTUtMDYt MTIgMTY6NTE6MjEuMDAwMDAwMDAwICswMjAwCi0rKysgb3BlbnNzbC0xLjAuMmMvZG9jL2FwcHMv dmVyaWZ5LnBvZAkyMDE1LTA2LTE1IDE3OjQ1OjEzLjExNjI3OTg1MyArMDIwMAotQEAgLTksNiAr OSw3IEBAIHZlcmlmeSAtIFV0aWxpdHkgdG8gdmVyaWZ5IGNlcnRpZmljYXRlcy4KLSBCPG9wZW5z c2w+IEI8dmVyaWZ5PgotIFtCPC1DQXBhdGggZGlyZWN0b3J5Pl0KLSBbQjwtQ0FmaWxlIGZpbGU+ XQotK1tCPC10cnVzdGVkX2ZpcnN0Pl0KLSBbQjwtcHVycG9zZSBwdXJwb3NlPl0KLSBbQjwtcG9s aWN5IGFyZz5dCi0gW0I8LWlnbm9yZV9jcml0aWNhbD5dCi1AQCAtNzksNiArODAsMTIgQEAgSWYg YSB2YWxpZCBDUkwgY2Fubm90IGJlIGZvdW5kIGFuIGVycm9yCi0gQSBmaWxlIG9mIHVudHJ1c3Rl ZCBjZXJ0aWZpY2F0ZXMuIFRoZSBmaWxlIHNob3VsZCBjb250YWluIG11bHRpcGxlIGNlcnRpZmlj YXRlcwotIGluIFBFTSBmb3JtYXQgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLgotIAotKz1pdGVtIEI8 LXRydXN0ZWRfZmlyc3Q+Ci0rCi0rVXNlIGNlcnRpZmljYXRlcyBpbiBDQSBmaWxlIG9yIENBIGRp cmVjdG9yeSBiZWZvcmUgdGhlIGNlcnRpZmljYXRlcyBpbiB0aGUgdW50cnVzdGVkCi0rZmlsZSB3 aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpbiB0byB2ZXJpZnkgY2VydGlmaWNhdGVzLgotK1Ro aXMgaXMgbWFpbmx5IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2l0aCBCcmlkZ2UgQ0Egb3IgQ3Jv c3MtQ2VydGlmaWVkIENBcy4KLSsKLSA9aXRlbSBCPC1wdXJwb3NlIHB1cnBvc2U+Ci0gCi0gVGhl IGludGVuZGVkIHVzZSBmb3IgdGhlIGNlcnRpZmljYXRlLiBJZiB0aGlzIG9wdGlvbiBpcyBub3Qg c3BlY2lmaWVkLAoKZGlmZiAtLWdpdCBhL29wZW5zc2wtMS4wLjJnLWZpcHMucGF0Y2ggYi9vcGVu c3NsLTEuMC4yZy1maXBzLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmY3 NmI5Li4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjJnLWZpcHMucGF0Y2gKKysrIC9kZXYvbnVs bApAQCAtMSwxMzcxMiArMCwwIEBACi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9hcHBzL3NwZWVk LmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9hcHBzL3NwZWVkLmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9h cHBzL3NwZWVkLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjUzLjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjJnL2FwcHMvc3BlZWQuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxMTkxNjQx MCArMDEwMAotQEAgLTE5Nyw3ICsxOTcsNiBAQAotICMgIGlmZGVmIE9QRU5TU0xfRE9JTkdfTUFL RURFUEVORAotICMgICB1bmRlZiBBRVNfc2V0X2VuY3J5cHRfa2V5Ci0gIyAgIHVuZGVmIEFFU19z ZXRfZGVjcnlwdF9rZXkKLS0jICAgdW5kZWYgREVTX3NldF9rZXlfdW5jaGVja2VkCi0gIyAgZW5k aWYKLSAjICBkZWZpbmUgQkZfc2V0X2tleSAgICAgIHByaXZhdGVfQkZfc2V0X2tleQotICMgIGRl ZmluZSBDQVNUX3NldF9rZXkgICAgcHJpdmF0ZV9DQVNUX3NldF9rZXkKLUBAIC0yMDUsNyArMjA0 LDYgQEAKLSAjICBkZWZpbmUgU0VFRF9zZXRfa2V5ICAgIHByaXZhdGVfU0VFRF9zZXRfa2V5Ci0g IyAgZGVmaW5lIFJDMl9zZXRfa2V5ICAgICBwcml2YXRlX1JDMl9zZXRfa2V5Ci0gIyAgZGVmaW5l IFJDNF9zZXRfa2V5ICAgICBwcml2YXRlX1JDNF9zZXRfa2V5Ci0tIyAgZGVmaW5lIERFU19zZXRf a2V5X3VuY2hlY2tlZCAgIHByaXZhdGVfREVTX3NldF9rZXlfdW5jaGVja2VkCi0gIyAgZGVmaW5l IEFFU19zZXRfZW5jcnlwdF9rZXkgICAgIHByaXZhdGVfQUVTX3NldF9lbmNyeXB0X2tleQotICMg IGRlZmluZSBBRVNfc2V0X2RlY3J5cHRfa2V5ICAgICBwcml2YXRlX0FFU19zZXRfZGVjcnlwdF9r ZXkKLSAjICBkZWZpbmUgQ2FtZWxsaWFfc2V0X2tleSAgICAgICAgcHJpdmF0ZV9DYW1lbGxpYV9z ZXRfa2V5Ci1AQCAtOTc0LDcgKzk3MiwxMiBAQCBpbnQgTUFJTihpbnQgYXJnYywgY2hhciAqKmFy Z3YpCi0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9fUlNBCi0gICAgICAgICBpZiAoc3Ry Y21wKCphcmd2LCAicnNhIikgPT0gMCkgewotLSAgICAgICAgICAgIHJzYV9kb2l0W1JfUlNBXzUx Ml0gPSAxOwotKyMgIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICAgICAgICAgIGlmICghRklQU19t b2RlKCkpCi0rIyAgZW5kaWYKLSsgICAgICAgICAgICB7Ci0rICAgICAgICAgICAgICAgIHJzYV9k b2l0W1JfUlNBXzUxMl0gPSAxOwotKyAgICAgICAgICAgIH0KLSAgICAgICAgICAgICByc2FfZG9p dFtSX1JTQV8xMDI0XSA9IDE7Ci0gICAgICAgICAgICAgcnNhX2RvaXRbUl9SU0FfMjA0OF0gPSAx OwotICAgICAgICAgICAgIHJzYV9kb2l0W1JfUlNBXzQwOTZdID0gMTsKLUBAIC05ODIsNyArOTg1 LDEyIEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAjIGVuZGlmCi0gIyBpZm5k ZWYgT1BFTlNTTF9OT19EU0EKLSAgICAgICAgIGlmIChzdHJjbXAoKmFyZ3YsICJkc2EiKSA9PSAw KSB7Ci0tICAgICAgICAgICAgZHNhX2RvaXRbUl9EU0FfNTEyXSA9IDE7Ci0rIyAgaWZkZWYgT1BF TlNTTF9GSVBTCi0rICAgICAgICAgICAgaWYgKCFGSVBTX21vZGUoKSkKLSsjICBlbmRpZgotKyAg ICAgICAgICAgIHsKLSsgICAgICAgICAgICAgICAgZHNhX2RvaXRbUl9EU0FfNTEyXSA9IDE7Ci0r ICAgICAgICAgICAgfQotICAgICAgICAgICAgIGRzYV9kb2l0W1JfRFNBXzEwMjRdID0gMTsKLSAg ICAgICAgICAgICBkc2FfZG9pdFtSX0RTQV8yMDQ4XSA9IDE7Ci0gICAgICAgICB9IGVsc2UKLUBA IC0xMjMzLDEzICsxMjQxLDE5IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKLSAK LSAgICAgaWYgKGogPT0gMCkgewotICAgICAgICAgZm9yIChpID0gMDsgaSA8IEFMR09SX05VTTsg aSsrKSB7Ci0tICAgICAgICAgICAgaWYgKGkgIT0gRF9FVlApCi0rICAgICAgICAgICAgaWYgKGkg IT0gRF9FVlAgJiYKLSsgICAgICAgICAgICAgICAgKCFGSVBTX21vZGUoKSB8fCAoaSAhPSBEX1dI SVJMUE9PTCAmJgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9IERfTUQy ICYmIGkgIT0gRF9NRDQgJiYKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSAh PSBEX01ENSAmJiBpICE9IERfTURDMiAmJgotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpICE9IERfUk1EMTYwKSkpCi0gICAgICAgICAgICAgICAgIGRvaXRbaV0gPSAxOwotICAg ICAgICAgfQotICAgICAgICAgZm9yIChpID0gMDsgaSA8IFJTQV9OVU07IGkrKykKLS0gICAgICAg ICAgICByc2FfZG9pdFtpXSA9IDE7Ci0rICAgICAgICAgICAgaWYgKCFGSVBTX21vZGUoKSB8fCBp ICE9IFJfUlNBXzUxMikKLSsgICAgICAgICAgICAgICAgcnNhX2RvaXRbaV0gPSAxOwotICAgICAg ICAgZm9yIChpID0gMDsgaSA8IERTQV9OVU07IGkrKykKLS0gICAgICAgICAgICBkc2FfZG9pdFtp XSA9IDE7Ci0rICAgICAgICAgICAgaWYgKCFGSVBTX21vZGUoKSB8fCBpICE9IFJfRFNBXzUxMikK LSsgICAgICAgICAgICAgICAgZHNhX2RvaXRbaV0gPSAxOwotICMgaWZuZGVmIE9QRU5TU0xfTk9f RUNEU0EKLSAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBFQ19OVU07IGkrKykKLSAgICAgICAgICAg ICBlY2RzYV9kb2l0W2ldID0gMTsKLUBAIC0xMjk5LDMwICsxMzEzLDQ2IEBAIGludCBNQUlOKGlu dCBhcmdjLCBjaGFyICoqYXJndikKLSAgICAgQUVTX3NldF9lbmNyeXB0X2tleShrZXkzMiwgMjU2 LCAmYWVzX2tzMyk7Ci0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9fQ0FNRUxMSUEKLS0g ICAgQ2FtZWxsaWFfc2V0X2tleShrZXkxNiwgMTI4LCAmY2FtZWxsaWFfa3MxKTsKLS0gICAgQ2Ft ZWxsaWFfc2V0X2tleShja2V5MjQsIDE5MiwgJmNhbWVsbGlhX2tzMik7Ci0tICAgIENhbWVsbGlh X3NldF9rZXkoY2tleTMyLCAyNTYsICZjYW1lbGxpYV9rczMpOwotKyAgICBpZiAoZG9pdFtEX0NC Q18xMjhfQ01MXSB8fCBkb2l0W0RfQ0JDXzE5Ml9DTUxdIHx8IGRvaXRbRF9DQkNfMjU2X0NNTF0p IHsKLSsgICAgICAgIENhbWVsbGlhX3NldF9rZXkoa2V5MTYsIDEyOCwgJmNhbWVsbGlhX2tzMSk7 Ci0rICAgICAgICBDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwgMTkyLCAmY2FtZWxsaWFfa3MyKTsK LSsgICAgICAgIENhbWVsbGlhX3NldF9rZXkoY2tleTMyLCAyNTYsICZjYW1lbGxpYV9rczMpOwot KyAgICB9Ci0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9fSURFQQotLSAgICBpZGVhX3Nl dF9lbmNyeXB0X2tleShrZXkxNiwgJmlkZWFfa3MpOwotKyAgICBpZiAoZG9pdFtEX0NCQ19JREVB XSkgewotKyAgICAgICAgaWRlYV9zZXRfZW5jcnlwdF9rZXkoa2V5MTYsICZpZGVhX2tzKTsKLSsg ICAgfQotICMgZW5kaWYKLSAjIGlmbmRlZiBPUEVOU1NMX05PX1NFRUQKLS0gICAgU0VFRF9zZXRf a2V5KGtleTE2LCAmc2VlZF9rcyk7Ci0rICAgIGlmIChkb2l0W0RfQ0JDX1NFRURdKSB7Ci0rICAg ICAgICBTRUVEX3NldF9rZXkoa2V5MTYsICZzZWVkX2tzKTsKLSsgICAgfQotICMgZW5kaWYKLSAj IGlmbmRlZiBPUEVOU1NMX05PX1JDNAotLSAgICBSQzRfc2V0X2tleSgmcmM0X2tzLCAxNiwga2V5 MTYpOwotKyAgICBpZiAoZG9pdFtEX1JDNF0pIHsKLSsgICAgICAgIFJDNF9zZXRfa2V5KCZyYzRf a3MsIDE2LCBrZXkxNik7Ci0rICAgIH0KLSAjIGVuZGlmCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19S QzIKLS0gICAgUkMyX3NldF9rZXkoJnJjMl9rcywgMTYsIGtleTE2LCAxMjgpOwotKyAgICBpZiAo ZG9pdFtEX0NCQ19SQzJdKSB7Ci0rICAgICAgICBSQzJfc2V0X2tleSgmcmMyX2tzLCAxNiwga2V5 MTYsIDEyOCk7Ci0rICAgIH0KLSAjIGVuZGlmCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19SQzUKLS0g ICAgUkM1XzMyX3NldF9rZXkoJnJjNV9rcywgMTYsIGtleTE2LCAxMik7Ci0rICAgIGlmIChkb2l0 W0RfQ0JDX1JDNV0pIHsKLSsgICAgICAgIFJDNV8zMl9zZXRfa2V5KCZyYzVfa3MsIDE2LCBrZXkx NiwgMTIpOwotKyAgICB9Ci0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xfTk9fQkYKLS0gICAg QkZfc2V0X2tleSgmYmZfa3MsIDE2LCBrZXkxNik7Ci0rICAgIGlmIChkb2l0W0RfQ0JDX0JGXSkg ewotKyAgICAgICAgQkZfc2V0X2tleSgmYmZfa3MsIDE2LCBrZXkxNik7Ci0rICAgIH0KLSAjIGVu ZGlmCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19DQVNUCi0tICAgIENBU1Rfc2V0X2tleSgmY2FzdF9r cywgMTYsIGtleTE2KTsKLSsgICAgaWYgKGRvaXRbRF9DQkNfQ0FTVF0pIHsKLSsgICAgICAgIENB U1Rfc2V0X2tleSgmY2FzdF9rcywgMTYsIGtleTE2KTsKLSsgICAgfQotICMgZW5kaWYKLSAjIGlm bmRlZiBPUEVOU1NMX05PX1JTQQotICAgICBtZW1zZXQocnNhX2MsIDAsIHNpemVvZihyc2FfYykp OwotQEAgLTE2MDUsNiArMTYzNSw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikK LSAgICAgICAgIEhNQUNfQ1RYIGhjdHg7Ci0gCi0gICAgICAgICBITUFDX0NUWF9pbml0KCZoY3R4 KTsKLSsgICAgICAgIEhNQUNfQ1RYX3NldF9mbGFncygmaGN0eCwgRVZQX01EX0NUWF9GTEFHX05P Tl9GSVBTX0FMTE9XKTsKLSAgICAgICAgIEhNQUNfSW5pdF9leCgmaGN0eCwgKHVuc2lnbmVkIGNo YXIgKikiVGhpcyBpcyBhIGtleS4uLiIsCi0gICAgICAgICAgICAgICAgICAgICAgMTYsIEVWUF9t ZDUoKSwgTlVMTCk7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9Db25maWd1cmUuZmlwcyBv cGVuc3NsLTEuMC4yZy9Db25maWd1cmUKLS0tLSBvcGVuc3NsLTEuMC4yZy9Db25maWd1cmUuZmlw cwkyMDE2LTAzLTAxIDE2OjMzOjA3LjU5NzkxNjA5MyArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJn L0NvbmZpZ3VyZQkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxMTkxNjQxMCArMDEwMAotQEAgLTEwNjcs MTEgKzEwNjcsNiBAQCBpZiAoZGVmaW5lZCgkZGlzYWJsZWR7Im1kNSJ9KSB8fCBkZWZpbmVkCi0g CSRkaXNhYmxlZHsic3NsMiJ9ID0gImZvcmNlZCI7Ci0gCX0KLSAKLS1pZiAoJGZpcHMgJiYgJGZp cHNsaWJkaXIgZXEgIiIpCi0tCXsKLS0JJGZpcHNsaWJkaXIgPSAkZmlwc2RpciAuICIvbGliLyI7 Ci0tCX0KLS0KLSAjIFJTQVggRU5HSU5FIHNldHMgZGVmYXVsdCBub24tRklQUyBSU0EgbWV0aG9k LgotIGlmICgkZmlwcykKLSAJewotQEAgLTE1NjAsNyArMTU1NSw2IEBAICRjZmxhZ3MuPSIgLURP UEVOU1NMX0JOX0FTTV9HRjJtIiBpZiAoJGIKLSBpZiAoJGZpcHMpCi0gCXsKLSAJJG9wZW5zc2xf b3RoZXJfZGVmaW5lcy49IiNkZWZpbmUgT1BFTlNTTF9GSVBTXG4iOwotLQkkY2ZsYWdzIC49ICIg LUlcJChGSVBTRElSKS9pbmNsdWRlIjsKLSAJfQotIAotICRjcHVpZF9vYmo9Im1lbV9jbHIubyIJ dW5sZXNzICgkY3B1aWRfb2JqID1+IC9cLm8kLyk7Ci1AQCAtMTc2Myw5ICsxNzU3LDEyIEBAIHdo aWxlICg8SU4+KQotIAotIAlzL15GSVBTRElSPS4qL0ZJUFNESVI9JGZpcHNkaXIvOwotIAlzL15G SVBTTElCRElSPS4qL0ZJUFNMSUJESVI9JGZpcHNsaWJkaXIvOwotLQlzL15GSVBTQ0FOTElCPS4q L0ZJUFNDQU5MSUI9bGliY3J5cHRvLyBpZiAkZmlwczsKLSAJcy9eQkFTRUFERFI9LiovQkFTRUFE RFI9JGJhc2VhZGRyLzsKLSAKLSsJaWYgKCRmaXBzKQotKwkJewotKwkJcy9eRklQUz0uKi9GSVBT PXllcy87Ci0rCQl9Ci0gCXMvXlNITElCX1RBUkdFVD0uKi9TSExJQl9UQVJHRVQ9JHNoYXJlZF90 YXJnZXQvOwotIAlzL15TSExJQl9NQVJLPS4qL1NITElCX01BUks9JHNoYXJlZF9tYXJrLzsKLSAJ cy9eU0hBUkVEX0xJQlM9LiovU0hBUkVEX0xJQlM9XCQoU0hBUkVEX0NSWVBUTykgXCQoU0hBUkVE X1NTTCkvIGlmICghJG5vX3NoYXJlZCk7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8v YWVzL2Flc19taXNjLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vYWVzL2Flc19taXNjLmMK LS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vYWVzL2Flc19taXNjLmMuZmlwcwkyMDE2LTAzLTAx IDE0OjM1OjA1LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9hZXMv YWVzX21pc2MuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxMTkxNjQxMCArMDEwMAotQEAgLTcwLDE3 ICs3MCwxMSBAQCBjb25zdCBjaGFyICpBRVNfb3B0aW9ucyh2b2lkKQotIGludCBBRVNfc2V0X2Vu Y3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAot ICAgICAgICAgICAgICAgICAgICAgICAgIEFFU19LRVkgKmtleSkKLSB7Ci0tI2lmZGVmIE9QRU5T U0xfRklQUwotLSAgICBmaXBzX2NpcGhlcl9hYm9ydChBRVMpOwotLSNlbmRpZgotICAgICByZXR1 cm4gcHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5KHVzZXJLZXksIGJpdHMsIGtleSk7Ci0gfQot IAotIGludCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXks IGNvbnN0IGludCBiaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIEFFU19LRVkgKmtleSkK LSB7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBmaXBzX2NpcGhlcl9hYm9ydChBRVMpOwot LSNlbmRpZgotICAgICByZXR1cm4gcHJpdmF0ZV9BRVNfc2V0X2RlY3J5cHRfa2V5KHVzZXJLZXks IGJpdHMsIGtleSk7Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2NtYWMvY21h Yy5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2NtYWMvY21hYy5jCi0tLS0gb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2NtYWMvY21hYy5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAwMDAw MDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vY21hYy9jbWFjLmMJMjAxNi0wMy0w MSAxNjozNjozNS42Mzc2MjQ0MTggKzAxMDAKLUBAIC0xMDUsMTIgKzEwNSw2IEBAIENNQUNfQ1RY ICpDTUFDX0NUWF9uZXcodm9pZCkKLSAKLSB2b2lkIENNQUNfQ1RYX2NsZWFudXAoQ01BQ19DVFgg KmN0eCkKLSB7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBpZiAoRklQU19tb2RlKCkgJiYg IWN0eC0+Y2N0eC5lbmdpbmUpIHsKLS0gICAgICAgIEZJUFNfY21hY19jdHhfY2xlYW51cChjdHgp OwotLSAgICAgICAgcmV0dXJuOwotLSAgICB9Ci0tI2VuZGlmCi0gICAgIEVWUF9DSVBIRVJfQ1RY X2NsZWFudXAoJmN0eC0+Y2N0eCk7Ci0gICAgIE9QRU5TU0xfY2xlYW5zZShjdHgtPnRibCwgRVZQ X01BWF9CTE9DS19MRU5HVEgpOwotICAgICBPUEVOU1NMX2NsZWFuc2UoY3R4LT5rMSwgRVZQX01B WF9CTE9DS19MRU5HVEgpOwotQEAgLTE2MCwyMCArMTU0LDYgQEAgaW50IENNQUNfSW5pdChDTUFD X0NUWCAqY3R4LCBjb25zdCB2b2lkCi0gICAgICAgICAgICAgRVZQZXJyKEVWUF9GX0NNQUNfSU5J VCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwotICAgICAgICAgICAgIHJldHVybiAwOwotICAg ICAgICAgfQotLQotLSAgICAgICAgLyogU3dpdGNoIHRvIEZJUFMgY2lwaGVyIGltcGxlbWVudGF0 aW9uIGlmIHBvc3NpYmxlICovCi0tICAgICAgICBpZiAoY2lwaGVyICE9IE5VTEwpIHsKLS0gICAg ICAgICAgICBjb25zdCBFVlBfQ0lQSEVSICpmY2lwaGVyOwotLSAgICAgICAgICAgIGZjaXBoZXIg PSBGSVBTX2dldF9jaXBoZXJieW5pZChFVlBfQ0lQSEVSX25pZChjaXBoZXIpKTsKLS0gICAgICAg ICAgICBpZiAoZmNpcGhlciAhPSBOVUxMKQotLSAgICAgICAgICAgICAgICBjaXBoZXIgPSBmY2lw aGVyOwotLSAgICAgICAgfQotLSAgICAgICAgLyoKLS0gICAgICAgICAqIE90aGVyIGFsZ29yaXRo bSBibG9ja2luZyB3aWxsIGJlIGRvbmUgaW4gRklQU19jbWFjX2luaXQsIHZpYQotLSAgICAgICAg ICogRklQU19jaXBoZXJpbml0KCkuCi0tICAgICAgICAgKi8KLS0gICAgICAgIGlmICghaW1wbCAm JiAhY3R4LT5jY3R4LmVuZ2luZSkKLS0gICAgICAgICAgICByZXR1cm4gRklQU19jbWFjX2luaXQo Y3R4LCBrZXksIGtleWxlbiwgY2lwaGVyLCBOVUxMKTsKLSAgICAgfQotICNlbmRpZgotICAgICAv KiBBbGwgemVyb3MgbWVhbnMgcmVzdGFydCAqLwotQEAgLTIxOSwxMCArMTk5LDYgQEAgaW50IENN QUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaQotIHsKLSAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqZGF0YSA9IGluOwotICAgICBzaXplX3QgYmw7Ci0tI2lmZGVmIE9QRU5TU0xfRklQ UwotLSAgICBpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdpbmUpCi0tICAgICAgICBy ZXR1cm4gRklQU19jbWFjX3VwZGF0ZShjdHgsIGluLCBkbGVuKTsKLS0jZW5kaWYKLSAgICAgaWYg KGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCi0gICAgICAgICByZXR1cm4gMDsKLSAgICAgaWYgKGRs ZW4gPT0gMCkKLUBAIC0yNjIsMTAgKzIzOCw2IEBAIGludCBDTUFDX1VwZGF0ZShDTUFDX0NUWCAq Y3R4LCBjb25zdCB2b2kKLSBpbnQgQ01BQ19GaW5hbChDTUFDX0NUWCAqY3R4LCB1bnNpZ25lZCBj aGFyICpvdXQsIHNpemVfdCAqcG91dGxlbikKLSB7Ci0gICAgIGludCBpLCBibCwgbGI7Ci0tI2lm ZGVmIE9QRU5TU0xfRklQUwotLSAgICBpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+Y2N0eC5lbmdp bmUpCi0tICAgICAgICByZXR1cm4gRklQU19jbWFjX2ZpbmFsKGN0eCwgb3V0LCBwb3V0bGVuKTsK LS0jZW5kaWYKLSAgICAgaWYgKGN0eC0+bmxhc3RfYmxvY2sgPT0gLTEpCi0gICAgICAgICByZXR1 cm4gMDsKLSAgICAgYmwgPSBFVlBfQ0lQSEVSX0NUWF9ibG9ja19zaXplKCZjdHgtPmNjdHgpOwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2NyeXB0by5oLmZpcHMgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2NyeXB0by5oCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2NyeXB0by5oLmZp cHMJMjAxNi0wMy0wMSAxNjozMzowNy40OTA5MTM2NzEgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4y Zy9jcnlwdG8vY3J5cHRvLmgJMjAxNi0wMy0wMSAxNjozMzowNy42MTI5MTY0MzIgKzAxMDAKLUBA IC02MDAsMjQgKzYwMCwyOSBAQCBpbnQgRklQU19tb2RlX3NldChpbnQgcik7Ci0gdm9pZCBPUEVO U1NMX2luaXQodm9pZCk7Ci0gCi0gIyBkZWZpbmUgZmlwc19tZF9pbml0KGFsZykgZmlwc19tZF9p bml0X2N0eChhbGcsIGFsZykKLSsjIGRlZmluZSBub25maXBzX21kX2luaXQoYWxnKSBub25maXBz X21kX2luaXRfY3R4KGFsZywgYWxnKQotKyMgZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBj eCkgXAotKyAgICAgICAgaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCi0gCi0gIyBpZmRlZiBP UEVOU1NMX0ZJUFMKLS0jICBkZWZpbmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCi0rIyAg ZGVmaW5lIG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgXAotICAgICAgICAgaW50IGFsZyMj X0luaXQoY3gjI19DVFggKmMpIFwKLSAgICAgICAgIHsgXAotICAgICAgICAgaWYgKEZJUFNfbW9k ZSgpKSBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgXAotLSAgICAgICAgICAgICAgICAi TG93IGxldmVsIEFQSSBjYWxsIHRvIGRpZ2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBt b2RlISIpOyBcCi0rICAgICAgICAgICAgICAgICJEaWdlc3QgIiAjYWxnICIgZm9yYmlkZGVuIGlu IEZJUFMgbW9kZSEiKTsgXAotICAgICAgICAgcmV0dXJuIHByaXZhdGVfIyNhbGcjI19Jbml0KGMp OyBcCi0gICAgICAgICB9IFwKLSAgICAgICAgIGludCBwcml2YXRlXyMjYWxnIyNfSW5pdChjeCMj X0NUWCAqYykKLSAKLSAjICBkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQoYWxnKSBcCi0gICAgICAg ICBpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18sIF9fTElORV9fLCBcCi0tICAg ICAgICAgICAgICAgICJMb3cgbGV2ZWwgQVBJIGNhbGwgdG8gY2lwaGVyICIgI2FsZyAiIGZvcmJp ZGRlbiBpbiBGSVBTIG1vZGUhIikKLSsgICAgICAgICAgICAgICAgIkNpcGhlciAiICNhbGcgIiBm b3JiaWRkZW4gaW4gRklQUyBtb2RlISIpCi0rCi0rLyogZGllIGlmIEZJUFMgc2VsZnRlc3QgZmFp bGVkICovCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpOwotIAotICMgZWxzZQotLSMg IGRlZmluZSBmaXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKLS0gICAgICAgIGludCBhbGcjI19J bml0KGN4IyNfQ1RYICpjKQotKyMgIGRlZmluZSBub25maXBzX21kX2luaXRfY3R4KGFsZywgY3gp IGZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkKLSAjICBkZWZpbmUgZmlwc19jaXBoZXJfYWJvcnQo YWxnKSB3aGlsZSgwKQotICMgZW5kaWYKLSAKLUBAIC02MzcsNiArNjQyLDkgQEAgaW50IENSWVBU T19tZW1jbXAoY29uc3Qgdm9sYXRpbGUgdm9pZCAqYQotICAqLwotIHZvaWQgRVJSX2xvYWRfQ1JZ UFRPX3N0cmluZ3Modm9pZCk7Ci0gCi0rIyBkZWZpbmUgT1BFTlNTTF9IQVZFX0lOSVQgICAgICAg MQotK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9pZCk7Ci0rCi0gLyogRXJyb3IgY29kZXMg Zm9yIHRoZSBDUllQVE8gZnVuY3Rpb25zLiAqLwotIAotIC8qIEZ1bmN0aW9uIGNvZGVzLiAqLwot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2Rlcy9kZXMuaC5maXBzIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9kZXMvZGVzLmgKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZGVzL2Rlcy5o LmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy41MjE5MTQzNzMgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vZGVzL2Rlcy5oCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjEyOTE2NDMyICswMTAw Ci1AQCAtMjMxLDEwICsyMzEsNiBAQCBpbnQgREVTX3NldF9rZXkoY29uc3RfREVTX2NibG9jayAq a2V5LCBECi0gaW50IERFU19rZXlfc2NoZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5 X3NjaGVkdWxlICpzY2hlZHVsZSk7Ci0gaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVT X2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Ci0gdm9pZCBERVNfc2V0 X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpz Y2hlZHVsZSk7Ci0tIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLS12b2lkIHByaXZhdGVfREVTX3NldF9r ZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKLS0jIGVuZGlmCi0g dm9pZCBERVNfc3RyaW5nX3RvX2tleShjb25zdCBjaGFyICpzdHIsIERFU19jYmxvY2sgKmtleSk7 Ci0gdm9pZCBERVNfc3RyaW5nX3RvXzJrZXlzKGNvbnN0IGNoYXIgKnN0ciwgREVTX2NibG9jayAq a2V5MSwgREVTX2NibG9jayAqa2V5Mik7Ci0gdm9pZCBERVNfY2ZiNjRfZW5jcnlwdChjb25zdCB1 bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2Rlcy9zZXRfa2V5LmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZGVz L3NldF9rZXkuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kZXMvc2V0X2tleS5jLmZpcHMJ MjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vZGVzL3NldF9rZXkuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxMjkxNjQzMiArMDEwMAot QEAgLTM1OSwxNSArMzU5LDYgQEAgaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2Ni bG9jawotIH0KLSAKLSB2b2lkIERFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNfY2Jsb2Nr ICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQotLSNpZmRlZiBPUEVOU1NMX0ZJUFMK LS17Ci0tICAgIGZpcHNfY2lwaGVyX2Fib3J0KERFUyk7Ci0tICAgIHByaXZhdGVfREVTX3NldF9r ZXlfdW5jaGVja2VkKGtleSwgc2NoZWR1bGUpOwotLX0KLS0KLS12b2lkIHByaXZhdGVfREVTX3Nl dF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwKLS0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQotLSNlbmRpZgot IHsKLSAgICAgc3RhdGljIGNvbnN0IGludCBzaGlmdHMyWzE2XSA9Ci0gICAgICAgICB7IDAsIDAs IDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAgfTsKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9kaC9kaF9nZW4uYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0 by9kaC9kaF9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kaC9kaF9nZW4uYy5maXBz CTIwMTYtMDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL2RoL2RoX2dlbi5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjEyOTE2NDMyICswMTAwCi1A QCAtODUsMTAgKzg1LDYgQEAgaW50IERIX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoREggKnJldCwg aQotICNlbmRpZgotICAgICBpZiAocmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMpCi0gICAgICAg ICByZXR1cm4gcmV0LT5tZXRoLT5nZW5lcmF0ZV9wYXJhbXMocmV0LCBwcmltZV9sZW4sIGdlbmVy YXRvciwgY2IpOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgaWYgKEZJUFNfbW9kZSgpKQot LSAgICAgICAgcmV0dXJuIEZJUFNfZGhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChyZXQsIHByaW1l X2xlbiwgZ2VuZXJhdG9yLCBjYik7Ci0tI2VuZGlmCi0gICAgIHJldHVybiBkaF9idWlsdGluX2dl bnBhcmFtcyhyZXQsIHByaW1lX2xlbiwgZ2VuZXJhdG9yLCBjYik7Ci0gfQotIAotQEAgLTEyNiw2 ICsxMjIsMTggQEAgc3RhdGljIGludCBkaF9idWlsdGluX2dlbnBhcmFtcyhESCAqcmV0LAotICAg ICBpbnQgZywgb2sgPSAtMTsKLSAgICAgQk5fQ1RYICpjdHggPSBOVUxMOwotIAotKyNpZmRlZiBP UEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAg IEZJUFNlcnIoRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TLCBGSVBTX1JfRklQU19TRUxGVEVT VF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgaWYgKEZJUFNf bW9kZSgpICYmIChwcmltZV9sZW4gPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUykp IHsKLSsgICAgICAgIERIZXJyKERIX0ZfREhfQlVJTFRJTl9HRU5QQVJBTVMsIERIX1JfS0VZX1NJ WkVfVE9PX1NNQUxMKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0g ICAgIGN0eCA9IEJOX0NUWF9uZXcoKTsKLSAgICAgaWYgKGN0eCA9PSBOVUxMKQotICAgICAgICAg Z290byBlcnI7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZGgvZGguaC5maXBzIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9kaC9kaC5oCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2Ro L2RoLmguZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjQ2MjkxMzAzNyArMDEwMAotKysrIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9kaC9kaC5oCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjEyOTE2NDMyICsw MTAwCi1AQCAtNzcsNiArNzcsOCBAQAotICMgIGRlZmluZSBPUEVOU1NMX0RIX01BWF9NT0RVTFVT X0JJVFMgICAgMTAwMDAKLSAjIGVuZGlmCi0gCi0rIyBkZWZpbmUgT1BFTlNTTF9ESF9GSVBTX01J Tl9NT0RVTFVTX0JJVFMgMTAyNAotKwotICMgZGVmaW5lIERIX0ZMQUdfQ0FDSEVfTU9OVF9QICAg ICAweDAxCi0gCi0gLyoKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kaC9kaF9rZXku Yy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kaC9kaF9rZXkuYwotLS0tIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9kaC9kaF9rZXkuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RoL2RoX2tleS5jCTIwMTYtMDMtMDEg MTY6MzM6MDcuNjEzOTE2NDU1ICswMTAwCi1AQCAtNjEsNiArNjEsOSBAQAotICNpbmNsdWRlIDxv cGVuc3NsL2JuLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgotICNpbmNsdWRlIDxvcGVu c3NsL2RoLmg+Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+Ci0rI2VuZGlmCi0gCi0gc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKTsKLSBzdGF0 aWMgaW50IGNvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJf a2V5LCBESCAqZGgpOwotQEAgLTk3LDcgKzEwMCw3IEBAIGludCBESF9jb21wdXRlX2tleSh1bnNp Z25lZCBjaGFyICprZXksIGMKLSBpbnQgREhfY29tcHV0ZV9rZXlfcGFkZGVkKHVuc2lnbmVkIGNo YXIgKmtleSwgY29uc3QgQklHTlVNICpwdWJfa2V5LCBESCAqZGgpCi0gewotICAgICBpbnQgcnYs IHBhZDsKLS0gICAgcnYgPSBkaC0+bWV0aC0+Y29tcHV0ZV9rZXkoa2V5LCBwdWJfa2V5LCBkaCk7 Ci0rICAgIHJ2ID0gREhfY29tcHV0ZV9rZXkoa2V5LCBwdWJfa2V5LCBkaCk7Ci0gICAgIGlmIChy diA8PSAwKQotICAgICAgICAgcmV0dXJuIHJ2OwotICAgICBwYWQgPSBCTl9udW1fYnl0ZXMoZGgt PnApIC0gcnY7Ci1AQCAtMTE1LDcgKzExOCw3IEBAIHN0YXRpYyBESF9NRVRIT0QgZGhfb3NzbCA9 IHsKLSAgICAgZGhfYm5fbW9kX2V4cCwKLSAgICAgZGhfaW5pdCwKLSAgICAgZGhfZmluaXNoLAot LSAgICAwLAotKyAgICBESF9GTEFHX0ZJUFNfTUVUSE9ELAotICAgICBOVUxMLAotICAgICBOVUxM Ci0gfTsKLUBAIC0xMzQsNiArMTM3LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXJhdGVfa2V5KERIICpk aCkKLSAgICAgQk5fTU9OVF9DVFggKm1vbnQgPSBOVUxMOwotICAgICBCSUdOVU0gKnB1Yl9rZXkg PSBOVUxMLCAqcHJpdl9rZXkgPSBOVUxMOwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAg aWYgKEZJUFNfbW9kZSgpCi0rICAgICAgICAmJiAoQk5fbnVtX2JpdHMoZGgtPnApIDwgT1BFTlNT TF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICBESGVycihESF9GX0dFTkVS QVRFX0tFWSwgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIH0KLSsjZW5kaWYKLSsKLSAgICAgY3R4ID0gQk5fQ1RYX25ldygpOwotICAgICBpZiAoY3R4 ID09IE5VTEwpCi0gICAgICAgICBnb3RvIGVycjsKLUBAIC0yMTcsNiArMjI4LDEzIEBAIHN0YXRp YyBpbnQgY29tcHV0ZV9rZXkodW5zaWduZWQgY2hhciAqa2UKLSAgICAgICAgIERIZXJyKERIX0Zf Q09NUFVURV9LRVksIERIX1JfTU9EVUxVU19UT09fTEFSR0UpOwotICAgICAgICAgZ290byBlcnI7 Ci0gICAgIH0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIGlmIChGSVBTX21vZGUoKQotKyAg ICAgICAgJiYgKEJOX251bV9iaXRzKGRoLT5wKSA8IE9QRU5TU0xfREhfRklQU19NSU5fTU9EVUxV U19CSVRTKSkgewotKyAgICAgICAgREhlcnIoREhfRl9DT01QVVRFX0tFWSwgREhfUl9LRVlfU0la RV9UT09fU01BTEwpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsjZW5kaWYKLSAKLSAg ICAgY3R4ID0gQk5fQ1RYX25ldygpOwotICAgICBpZiAoY3R4ID09IE5VTEwpCi1AQCAtMjc3LDYg KzI5NSw5IEBAIHN0YXRpYyBpbnQgZGhfYm5fbW9kX2V4cChjb25zdCBESCAqZGgsIEIKLSAKLSBz dGF0aWMgaW50IGRoX2luaXQoREggKmRoKQotIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAg IEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAgICAgZGgtPmZsYWdzIHw9IERIX0ZM QUdfQ0FDSEVfTU9OVF9QOwotICAgICByZXR1cm4gKDEpOwotIH0KLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9kaC9kaF9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kaC9k aF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kaC9kaF9saWIuYy5maXBzCTIwMTYt MDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L2RoL2RoX2xpYi5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjEzOTE2NDU1ICswMTAwCi1AQCAtODAs MTQgKzgwLDcgQEAgdm9pZCBESF9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgREhfTUVUSAotIGNv bnN0IERIX01FVEhPRCAqREhfZ2V0X2RlZmF1bHRfbWV0aG9kKHZvaWQpCi0gewotICAgICBpZiAo IWRlZmF1bHRfREhfbWV0aG9kKSB7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICAgICAgaWYg KEZJUFNfbW9kZSgpKQotLSAgICAgICAgICAgIHJldHVybiBGSVBTX2RoX29wZW5zc2woKTsKLS0g ICAgICAgIGVsc2UKLS0gICAgICAgICAgICByZXR1cm4gREhfT3BlblNTTCgpOwotLSNlbHNlCi0g ICAgICAgICBkZWZhdWx0X0RIX21ldGhvZCA9IERIX09wZW5TU0woKTsKLS0jZW5kaWYKLSAgICAg fQotICAgICByZXR1cm4gZGVmYXVsdF9ESF9tZXRob2Q7Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNh L2RzYV9lcnIuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX2Vyci5jLmZpcHMJ MjAxNi0wMy0wMSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vZHNhL2RzYV9lcnIuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxMzkxNjQ1NSArMDEwMAot QEAgLTc0LDYgKzc0LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBEU0Ffc3RyX2Z1bmN0c1td Ci0gICAgIHtFUlJfRlVOQyhEU0FfRl9ET19EU0FfUFJJTlQpLCAiRE9fRFNBX1BSSU5UIn0sCi0g ICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJTlQpLCAiRFNBcGFyYW1zX3ByaW50In0s Ci0gICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlApLCAiRFNBcGFyYW1zX3By aW50X2ZwIn0sCi0rICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4pLCAiZHNh X2J1aWx0aW5fa2V5Z2VuIn0sCi0rICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9QQVJB TUdFTiksICJkc2FfYnVpbHRpbl9wYXJhbWdlbiJ9LAotICAgICB7RVJSX0ZVTkMoRFNBX0ZfRFNB X0JVSUxUSU5fUEFSQU1HRU4yKSwgIkRTQV9CVUlMVElOX1BBUkFNR0VOMiJ9LAotICAgICB7RVJS X0ZVTkMoRFNBX0ZfRFNBX0RPX1NJR04pLCAiRFNBX2RvX3NpZ24ifSwKLSAgICAge0VSUl9GVU5D KERTQV9GX0RTQV9ET19WRVJJRlkpLCAiRFNBX2RvX3ZlcmlmeSJ9LAotQEAgLTEwOSw2ICsxMTEs OCBAQCBzdGF0aWMgRVJSX1NUUklOR19EQVRBIERTQV9zdHJfcmVhc29uc1tdCi0gICAgIHtFUlJf UkVBU09OKERTQV9SX0RFQ09ERV9FUlJPUiksICJkZWNvZGUgZXJyb3IifSwKLSAgICAge0VSUl9S RUFTT04oRFNBX1JfSU5WQUxJRF9ESUdFU1RfVFlQRSksICJpbnZhbGlkIGRpZ2VzdCB0eXBlIn0s Ci0gICAgIHtFUlJfUkVBU09OKERTQV9SX0lOVkFMSURfUEFSQU1FVEVSUyksICJpbnZhbGlkIHBh cmFtZXRlcnMifSwKLSsgICAge0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVfSU5WQUxJRCksICJr ZXkgc2l6ZSBpbnZhbGlkIn0sCi0rICAgIHtFUlJfUkVBU09OKERTQV9SX0tFWV9TSVpFX1RPT19T TUFMTCksICJrZXkgc2l6ZSB0b28gc21hbGwifSwKLSAgICAge0VSUl9SRUFTT04oRFNBX1JfTUlT U0lOR19QQVJBTUVURVJTKSwgIm1pc3NpbmcgcGFyYW1ldGVycyJ9LAotICAgICB7RVJSX1JFQVNP TihEU0FfUl9NT0RVTFVTX1RPT19MQVJHRSksICJtb2R1bHVzIHRvbyBsYXJnZSJ9LAotICAgICB7 RVJSX1JFQVNPTihEU0FfUl9ORUVEX05FV19TRVRVUF9WQUxVRVMpLCAibmVlZCBuZXcgc2V0dXAg dmFsdWVzIn0sCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYV9nZW4uYy5m aXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX2dlbi5jCi0tLS0gb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2RzYS9kc2FfZ2VuLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjUzLjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX2dlbi5jCTIwMTYtMDMt MDEgMTY6MzM6MDcuNjEzOTE2NDU1ICswMTAwCi1AQCAtOTEsNiArOTEsMTYgQEAKLSAjICBpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSAjIGVuZGlmCi0gCi0rIyBpZm5kZWYgT1BFTlNTTF9GSVBT Ci0rc3RhdGljIGludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFggKmN0eCwgc2l6ZV90IGJp dHMsIHNpemVfdCBxYml0cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEVWUF9NRCAqZXZwbWQsIHVuc2lnbmVkIGNoYXIgKnNlZWQsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgc2VlZF9sZW4sIEJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3Jl dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIEJO X0dFTkNCICpjYik7Ci0rc3RhdGljIGludCBGSVBTX2RzYV9nZW5lcmF0ZV9nKEJOX0NUWCAqY3R4 LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QklHTlVNICoqZ19yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCTl9HRU5DQiAqY2IpOwotKyMgZW5kaWYKLSsKLSBpbnQgRFNBX2dlbmVy YXRlX3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsIGludCBiaXRzLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLCBpbnQgc2VlZF9sZW4s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIHVuc2ln bmVkIGxvbmcgKmhfcmV0LAotQEAgLTEwNiw5NyArMTE2LDE2NSBAQCBpbnQgRFNBX2dlbmVyYXRl X3BhcmFtZXRlcnNfZXgoRFNBICpyZXQsCi0gICAgIGlmIChyZXQtPm1ldGgtPmRzYV9wYXJhbWdl bikKLSAgICAgICAgIHJldHVybiByZXQtPm1ldGgtPmRzYV9wYXJhbWdlbihyZXQsIGJpdHMsIHNl ZWRfaW4sIHNlZWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwotLSMgaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIGVs c2UgaWYgKEZJUFNfbW9kZSgpKSB7Ci0tICAgICAgICByZXR1cm4gRklQU19kc2FfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChyZXQsIGJpdHMsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZWVkX2luLCBzZWVkX2xlbiwKLS0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwotLSAg ICB9Ci0tIyBlbmRpZgotICAgICBlbHNlIHsKLSAgICAgICAgIGNvbnN0IEVWUF9NRCAqZXZwbWQg PSBiaXRzID49IDIwNDggPyBFVlBfc2hhMjU2KCkgOiBFVlBfc2hhMSgpOwotICAgICAgICAgc2l6 ZV90IHFiaXRzID0gRVZQX01EX3NpemUoZXZwbWQpICogODsKLSAKLSAgICAgICAgIHJldHVybiBk c2FfYnVpbHRpbl9wYXJhbWdlbihyZXQsIGJpdHMsIHFiaXRzLCBldnBtZCwKLS0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkX2luLCBzZWVkX2xlbiwgTlVMTCwgY291bnRl cl9yZXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZF9pbiwgc2Vl ZF9sZW4sIGNvdW50ZXJfcmV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhfcmV0LCBjYik7Ci0gICAgIH0KLSB9Ci0gCi0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQg RklQU19kc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBx Yml0cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1k LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNl ZWRfaW4sIHNpemVfdCBzZWVkX2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCTl9HRU5DQiAqY2IpCi0rewotKyAgICByZXR1cm4gZHNhX2J1aWx0aW5f cGFyYW1nZW4ocmV0LCBiaXRzLCBxYml0cywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGV2cG1kLCBzZWVkX2luLCBzZWVkX2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvdW50ZXJfcmV0LCBoX3JldCwgY2IpOwotK30KLSsjIGVuZGlmCi0rCi0gaW50IGRz YV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kLCBjb25zdCB1bnNp Z25lZCBjaGFyICpzZWVkX2luLAotLSAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2Vl ZF9sZW4sIHVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3Qgc2VlZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRl cl9yZXQsIHVuc2lnbmVkIGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCi0gewotICAgICBpbnQg b2sgPSAwOwotICAgICB1bnNpZ25lZCBjaGFyIHNlZWRbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwot KyAgICBCSUdOVU0gKmcgPSBOVUxMLCAqcSA9IE5VTEwsICpwID0gTlVMTDsKLSsgICAgc2l6ZV90 IHFzaXplID0gcWJpdHMgPj4gMzsKLSsgICAgQk5fQ1RYICpjdHggPSBOVUxMOwotKyAgICAKLSsj IGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewot KyAgICAgICAgRklQU2VycihGSVBTX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sIEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBp ZiAoRklQU19tb2R1bGVfbW9kZSgpICYmCi0rICAgICAgICAoYml0cyAhPSAxMDI0IHx8IHFiaXRz ICE9IDE2MCkgJiYKLSsgICAgICAgIChiaXRzICE9IDIwNDggfHwgcWJpdHMgIT0gMjI0KSAmJgot KyAgICAgICAgKGJpdHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyNTYpICYmIChiaXRzICE9IDMwNzIg fHwgcWJpdHMgIT0gMjU2KSkgewotKyAgICAgICAgRFNBZXJyKERTQV9GX0RTQV9CVUlMVElOX1BB UkFNR0VOLCBEU0FfUl9LRVlfU0laRV9JTlZBTElEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAg ICB9Ci0rIyBlbmRpZgotKyAgICBpZiAoc2VlZF9sZW4gJiYgKHNlZWRfbGVuIDwgKHNpemVfdClx c2l6ZSkpCi0rICAgICAgICBzZWVkX2luID0gTlVMTDsgICAgICAgICAvKiBzZWVkIGJ1ZmZlciB0 b28gc21hbGwgLS0gaWdub3JlICovCi0rICAgIGlmIChzZWVkX2xlbiA+IHNpemVvZihzZWVkKSkK LSsgICAgICAgIHNlZWRfbGVuID0gc2l6ZW9mKHNlZWQpOyAvKiBBcHAuIDIuMiBvZiBGSVBTIFBV QiAxODYgYWxsb3dzIGxhcmdlciBTRUVELAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqIGJ1dCBvdXIgaW50ZXJuYWwgYnVmZmVycyBhcmUgcmVzdHJpY3RlZCB0byAyNTYgYml0 cyovCi0rICAgIGlmIChzZWVkX2luICE9IE5VTEwpCi0rICAgICAgICBtZW1jcHkoc2VlZCwgc2Vl ZF9pbiwgc2VlZF9sZW4pOwotKyAgICBlbHNlCi0rICAgICAgICBzZWVkX2xlbiA9IDA7Ci0rICAg ICAgICAKLSsgICAgaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCi0rICAgICAgICBn b3RvIGVycjsKLSsgCi0rICAgIEJOX0NUWF9zdGFydChjdHgpOwotKyAKLSsgICAgaWYgKCFGSVBT X2RzYV9nZW5lcmF0ZV9wcShjdHgsIGJpdHMsIHFiaXRzLCBldnBtZCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZWVkLCBzZWVkX2xlbiwgJnAsICZxLCBjb3VudGVyX3JldCwgY2Ip KQotKyAgICAgICAgZ290byBlcnI7Ci0rIAotKyAgICBpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX2co Y3R4LCBwLCBxLCAmZywgaF9yZXQsIGNiKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAKLSsgICAg b2sgPSAxOwotKyBlcnI6Ci0rICAgIGlmIChvaykgewotKyAgICAgICAgaWYgKHJldC0+cCkgewot KyAgICAgICAgICAgIEJOX2ZyZWUocmV0LT5wKTsKLSsgICAgICAgICAgICByZXQtPnAgPSBOVUxM OwotKyAgICAgICAgfQotKyAgICAgICAgaWYgKHJldC0+cSkgewotKyAgICAgICAgICAgIEJOX2Zy ZWUocmV0LT5xKTsKLSsgICAgICAgICAgICByZXQtPnEgPSBOVUxMOwotKyAgICAgICAgfQotKyAg ICAgICAgaWYgKHJldC0+ZykgewotKyAgICAgICAgICAgIEJOX2ZyZWUocmV0LT5nKTsKLSsgICAg ICAgICAgICByZXQtPmcgPSBOVUxMOwotKyAgICAgICAgfQotKyAgICAgICAgcmV0LT5wID0gQk5f ZHVwKHApOwotKyAgICAgICAgcmV0LT5xID0gQk5fZHVwKHEpOwotKyAgICAgICAgcmV0LT5nID0g Qk5fZHVwKGcpOwotKyAgICAgICAgaWYgKHJldC0+cCA9PSBOVUxMIHx8IHJldC0+cSA9PSBOVUxM IHx8IHJldC0+ZyA9PSBOVUxMKQotKyAgICAgICAgICAgIG9rID0gMDsKLSsgICAgfQotKyAgICBp ZiAoY3R4KSB7Ci0rICAgICAgICBCTl9DVFhfZW5kKGN0eCk7Ci0rICAgICAgICBCTl9DVFhfZnJl ZShjdHgpOwotKyAgICB9Ci0rICAgIHJldHVybiBvazsKLSt9Ci0rCi0rIyBpZm5kZWYgT1BFTlNT TF9GSVBTCi0rc3RhdGljCi0rIyBlbmRpZgotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9D VFggKmN0eCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHNlZWRfbGVuLCBCSUdOVU0gKipwX3JldCwgQklHTlVNICoq cV9yZXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIEJOX0dF TkNCICpjYikKLSt7Ci0rICAgIGludCBvayA9IDA7Ci0gICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hB MjU2X0RJR0VTVF9MRU5HVEhdOwotLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZltTSEEyNTZfRElHRVNU X0xFTkdUSF0sIGJ1ZjJbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKyAgICB1bnNpZ25lZCBjaGFy IGJ1ZltTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0gICAgIEJJR05VTSAqcjAsICpXLCAqWCwgKmMs ICp0ZXN0OwotLSAgICBCSUdOVU0gKmcgPSBOVUxMLCAqcSA9IE5VTEwsICpwID0gTlVMTDsKLS0g ICAgQk5fTU9OVF9DVFggKm1vbnQgPSBOVUxMOwotLSAgICBpbnQgaSwgaywgbiA9IDAsIG0gPSAw LCBxc2l6ZSA9IHFiaXRzID4+IDM7Ci0rICAgIEJJR05VTSAqcSA9IE5VTEwsICpwID0gTlVMTDsK LSsgICAgaW50IGksIGssIGIsIG4gPSAwLCBtID0gMCwgcXNpemUgPSBxYml0cyA+PiAzOwotICAg ICBpbnQgY291bnRlciA9IDA7Ci0gICAgIGludCByID0gMDsKLS0gICAgQk5fQ1RYICpjdHggPSBO VUxMOwotLSAgICB1bnNpZ25lZCBpbnQgaCA9IDI7Ci0gCi0gICAgIGlmIChxc2l6ZSAhPSBTSEFf RElHRVNUX0xFTkdUSCAmJiBxc2l6ZSAhPSBTSEEyMjRfRElHRVNUX0xFTkdUSCAmJgotICAgICAg ICAgcXNpemUgIT0gU0hBMjU2X0RJR0VTVF9MRU5HVEgpCi0gICAgICAgICAvKiBpbnZhbGlkIHEg c2l6ZSAqLwotICAgICAgICAgcmV0dXJuIDA7Ci0gCi0tICAgIGlmIChldnBtZCA9PSBOVUxMKQot LSAgICAgICAgLyogdXNlIFNIQTEgYXMgZGVmYXVsdCAqLwotKyAgICBpZiAoZXZwbWQgPT0gTlVM TCkgewotKyAgICAgICAgaWYgKHFiaXRzIDw9IDE2MCkKLSAgICAgICAgIGV2cG1kID0gRVZQX3No YTEoKTsKLSsgICAgICAgIGVsc2UgaWYgKHFiaXRzIDw9IDIyNCkKLSsgICAgICAgICAgICBldnBt ZCA9IEVWUF9zaGEyMjQoKTsKLSsgICAgICAgIGVsc2UKLSsgICAgICAgICAgICBldnBtZCA9IEVW UF9zaGEyNTYoKTsKLSsgICAgfQotIAotICAgICBpZiAoYml0cyA8IDUxMikKLSAgICAgICAgIGJp dHMgPSA1MTI7Ci0gCi0gICAgIGJpdHMgPSAoYml0cyArIDYzKSAvIDY0ICogNjQ7Ci0gCi0tICAg IC8qCi0tICAgICAqIE5COiBzZWVkX2xlbiA9PSAwIGlzIHNwZWNpYWwgY2FzZTogY29weSBnZW5l cmF0ZWQgc2VlZCB0byBzZWVkX2luIGlmCi0tICAgICAqIGl0IGlzIG5vdCBOVUxMLgotLSAgICAg Ki8KLS0gICAgaWYgKHNlZWRfbGVuICYmIChzZWVkX2xlbiA8IChzaXplX3QpcXNpemUpKQotLSAg ICAgICAgc2VlZF9pbiA9IE5VTEw7ICAgICAgICAgLyogc2VlZCBidWZmZXIgdG9vIHNtYWxsIC0t IGlnbm9yZSAqLwotLSAgICBpZiAoc2VlZF9sZW4gPiAoc2l6ZV90KXFzaXplKQotLSAgICAgICAg c2VlZF9sZW4gPSBxc2l6ZTsgICAgICAgLyogQXBwLiAyLjIgb2YgRklQUyBQVUIgMTg2IGFsbG93 cyBsYXJnZXIKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFNFRUQsIGJ1dCBv dXIgaW50ZXJuYWwgYnVmZmVycyBhcmUKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqIHJlc3RyaWN0ZWQgdG8gMTYwIGJpdHMgKi8KLS0gICAgaWYgKHNlZWRfaW4gIT0gTlVMTCkK LS0gICAgICAgIG1lbWNweShzZWVkLCBzZWVkX2luLCBzZWVkX2xlbik7Ci0tCi0tICAgIGlmICgo bW9udCA9IEJOX01PTlRfQ1RYX25ldygpKSA9PSBOVUxMKQotLSAgICAgICAgZ290byBlcnI7Ci0t Ci0tICAgIGlmICgoY3R4ID0gQk5fQ1RYX25ldygpKSA9PSBOVUxMKQotLSAgICAgICAgZ290byBl cnI7Ci0tCi0tICAgIEJOX0NUWF9zdGFydChjdHgpOwotLQotICAgICByMCA9IEJOX0NUWF9nZXQo Y3R4KTsKLS0gICAgZyA9IEJOX0NUWF9nZXQoY3R4KTsKLSAgICAgVyA9IEJOX0NUWF9nZXQoY3R4 KTsKLS0gICAgcSA9IEJOX0NUWF9nZXQoY3R4KTsKLSsgICAgKnFfcmV0ID0gcSA9IEJOX0NUWF9n ZXQoY3R4KTsKLSAgICAgWCA9IEJOX0NUWF9nZXQoY3R4KTsKLSAgICAgYyA9IEJOX0NUWF9nZXQo Y3R4KTsKLS0gICAgcCA9IEJOX0NUWF9nZXQoY3R4KTsKLSsgICAgKnBfcmV0ID0gcCA9IEJOX0NU WF9nZXQoY3R4KTsKLSAgICAgdGVzdCA9IEJOX0NUWF9nZXQoY3R4KTsKLSAKLSAgICAgaWYgKCFC Tl9sc2hpZnQodGVzdCwgQk5fdmFsdWVfb25lKCksIGJpdHMgLSAxKSkKLSAgICAgICAgIGdvdG8g ZXJyOwotIAotKyAgICAvKiBzdGVwIDMgbiA9IFxsY2VpbCBiaXRzIC8gcWJpdHMgXHJjZWlsIC0g MSAqLwotKyAgICBuID0gKGJpdHMgKyBxYml0cyAtIDEpIC8gcWJpdHMgLSAxOwotKyAgICAvKiBz dGVwIDQgYiA9IGJpdHMgLSAxIC0gbiAqIHFiaXRzICovCi0rICAgIGIgPSBiaXRzIC0gMSAtIG4g KiBxYml0czsKLSsKLSAgICAgZm9yICg7OykgewotICAgICAgICAgZm9yICg7OykgeyAgICAgICAg ICAgICAgLyogZmluZCBxICovCi0gICAgICAgICAgICAgaW50IHNlZWRfaXNfcmFuZG9tOwotIAot LSAgICAgICAgICAgIC8qIHN0ZXAgMSAqLwotKyAgICAgICAgICAgIC8qIHN0ZXAgNSBnZW5lcmF0 ZSBzZWVkICovCi0gICAgICAgICAgICAgaWYgKCFCTl9HRU5DQl9jYWxsKGNiLCAwLCBtKyspKQot ICAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSAKLS0gICAgICAgICAgICBpZiAoIXNlZWRfbGVu IHx8ICFzZWVkX2luKSB7Ci0rICAgICAgICAgICAgaWYgKCFzZWVkX2xlbikgewotICAgICAgICAg ICAgICAgICBpZiAoUkFORF9wc2V1ZG9fYnl0ZXMoc2VlZCwgcXNpemUpIDwgMCkKLSAgICAgICAg ICAgICAgICAgICAgIGdvdG8gZXJyOwotICAgICAgICAgICAgICAgICBzZWVkX2lzX3JhbmRvbSA9 IDE7Ci1AQCAtMjA2LDI5ICsyODQsMTggQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAq cmV0LCBzaXplXwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmUgYmFkICov Ci0gICAgICAgICAgICAgfQotICAgICAgICAgICAgIG1lbWNweShidWYsIHNlZWQsIHFzaXplKTsK LS0gICAgICAgICAgICBtZW1jcHkoYnVmMiwgc2VlZCwgcXNpemUpOwotLSAgICAgICAgICAgIC8q IHByZWNvbXB1dGUgIlNFRUQgKyAxIiBmb3Igc3RlcCA3OiAqLwotLSAgICAgICAgICAgIGZvciAo aSA9IHFzaXplIC0gMTsgaSA+PSAwOyBpLS0pIHsKLS0gICAgICAgICAgICAgICAgYnVmW2ldKys7 Ci0tICAgICAgICAgICAgICAgIGlmIChidWZbaV0gIT0gMCkKLS0gICAgICAgICAgICAgICAgICAg IGJyZWFrOwotLSAgICAgICAgICAgIH0KLSAKLS0gICAgICAgICAgICAvKiBzdGVwIDIgKi8KLSsg ICAgICAgICAgICAvKiBzdGVwIDYgVSA9IGhhc2goc2VlZCkgKi8KLSAgICAgICAgICAgICBpZiAo IUVWUF9EaWdlc3Qoc2VlZCwgcXNpemUsIG1kLCBOVUxMLCBldnBtZCwgTlVMTCkpCi0gICAgICAg ICAgICAgICAgIGdvdG8gZXJyOwotLSAgICAgICAgICAgIGlmICghRVZQX0RpZ2VzdChidWYsIHFz aXplLCBidWYyLCBOVUxMLCBldnBtZCwgTlVMTCkpCi0tICAgICAgICAgICAgICAgIGdvdG8gZXJy OwotLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBxc2l6ZTsgaSsrKQotLSAgICAgICAgICAg ICAgICBtZFtpXSBePSBidWYyW2ldOwotIAotLSAgICAgICAgICAgIC8qIHN0ZXAgMyAqLwotKyAg ICAgICAgICAgIC8qIHN0ZXAgNyBxID0gMl4ocWJpdHMtMSkgKyBVICsgMSAtIChVIG1vZCAyKSAq LwotICAgICAgICAgICAgIG1kWzBdIHw9IDB4ODA7Ci0gICAgICAgICAgICAgbWRbcXNpemUgLSAx XSB8PSAweDAxOwotICAgICAgICAgICAgIGlmICghQk5fYmluMmJuKG1kLCBxc2l6ZSwgcSkpCi0g ICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotIAotLSAgICAgICAgICAgIC8qIHN0ZXAgNCAqLwot KyAgICAgICAgICAgIC8qIHN0ZXAgOCB0ZXN0IGZvciBwcmltZSAoNjQgcm91bmQgb2YgUmFiaW4t TWlsbGVyKSAqLwotICAgICAgICAgICAgIHIgPSBCTl9pc19wcmltZV9mYXN0dGVzdF9leChxLCBE U1NfcHJpbWVfY2hlY2tzLCBjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlZWRfaXNfcmFuZG9tLCBjYik7Ci0gICAgICAgICAgICAgaWYgKHIgPiAwKQotQEAg LTIzNiw4ICszMDMsNiBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVf Ci0gICAgICAgICAgICAgaWYgKHIgIT0gMCkKLSAgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0g Ci0tICAgICAgICAgICAgLyogZG8gYSBjYWxsYmFjayBjYWxsICovCi0tICAgICAgICAgICAgLyog c3RlcCA1ICovCi0gICAgICAgICB9Ci0gCi0gICAgICAgICBpZiAoIUJOX0dFTkNCX2NhbGwoY2Is IDIsIDApKQotQEAgLTI0NSwxOSArMzEwLDE2IEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihE U0EgKnJldCwgc2l6ZV8KLSAgICAgICAgIGlmICghQk5fR0VOQ0JfY2FsbChjYiwgMywgMCkpCi0g ICAgICAgICAgICAgZ290byBlcnI7Ci0gCi0tICAgICAgICAvKiBzdGVwIDYgKi8KLSsgICAgICAg IC8qIHN0ZXAgMTEgKi8KLSAgICAgICAgIGNvdW50ZXIgPSAwOwotLSAgICAgICAgLyogIm9mZnNl dCA9IDIiICovCi0tCi0tICAgICAgICBuID0gKGJpdHMgLSAxKSAvIDE2MDsKLSsgICAgICAgIC8q ICJvZmZzZXQgPSAxIiAqLwotIAotICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgIGlm ICgoY291bnRlciAhPSAwKSAmJiAhQk5fR0VOQ0JfY2FsbChjYiwgMCwgY291bnRlcikpCi0gICAg ICAgICAgICAgICAgIGdvdG8gZXJyOwotIAotLSAgICAgICAgICAgIC8qIHN0ZXAgNyAqLwotKyAg ICAgICAgICAgIC8qIHN0ZXAgMTEuMSwgMTEuMiBvYnRhaW4gVyAqLwotICAgICAgICAgICAgIEJO X3plcm8oVyk7Ci0tICAgICAgICAgICAgLyogbm93ICdidWYnIGNvbnRhaW5zICJTRUVEICsgb2Zm c2V0IC0gMSIgKi8KLSAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDw9IG47IGsrKykgewotICAg ICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgKiBvYnRhaW4gIlNFRUQgKyBvZmZz ZXQgKyBrIiBieSBpbmNyZW1lbnRpbmc6Ci1AQCAtMjcxLDM2ICszMzMsMzcgQEAgaW50IGRzYV9i dWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXwotICAgICAgICAgICAgICAgICBpZiAoIUVW UF9EaWdlc3QoYnVmLCBxc2l6ZSwgbWQsIE5VTEwsIGV2cG1kLCBOVUxMKSkKLSAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZXJyOwotIAotLSAgICAgICAgICAgICAgICAvKiBzdGVwIDggKi8KLSAg ICAgICAgICAgICAgICAgaWYgKCFCTl9iaW4yYm4obWQsIHFzaXplLCByMCkpCi0gICAgICAgICAg ICAgICAgICAgICBnb3RvIGVycjsKLS0gICAgICAgICAgICAgICAgaWYgKCFCTl9sc2hpZnQocjAs IHIwLCAocXNpemUgPDwgMykgKiBrKSkKLSsgICAgICAgICAgICAgICAgaWYgKGsgPT0gbikKLSsg ICAgICAgICAgICAgICAgICAgIEJOX21hc2tfYml0cyhyMCwgYik7Ci0rICAgICAgICAgICAgICAg IGlmICghQk5fbHNoaWZ0KHIwLCByMCwgcWJpdHMgKiBrKSkKLSAgICAgICAgICAgICAgICAgICAg IGdvdG8gZXJyOwotICAgICAgICAgICAgICAgICBpZiAoIUJOX2FkZChXLCBXLCByMCkpCi0gICAg ICAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSAgICAgICAgICAgICB9Ci0gCi0tICAgICAgICAg ICAgLyogbW9yZSBvZiBzdGVwIDggKi8KLS0gICAgICAgICAgICBpZiAoIUJOX21hc2tfYml0cyhX LCBiaXRzIC0gMSkpCi0tICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgICAgIC8q IHN0ZXAgMTEuMyBYID0gVyArIDJeKEwtMSkgKi8KLSAgICAgICAgICAgICBpZiAoIUJOX2NvcHko WCwgVykpCi0gICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotICAgICAgICAgICAgIGlmICghQk5f YWRkKFgsIFgsIHRlc3QpKQotICAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSAKLS0gICAgICAg ICAgICAvKiBzdGVwIDkgKi8KLSsgICAgICAgICAgICAvKiBzdGVwIDExLjQgYyA9IFggbW9kIDIq cSAqLwotICAgICAgICAgICAgIGlmICghQk5fbHNoaWZ0MShyMCwgcSkpCi0gICAgICAgICAgICAg ICAgIGdvdG8gZXJyOwotICAgICAgICAgICAgIGlmICghQk5fbW9kKGMsIFgsIHIwLCBjdHgpKQot ICAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgICAgICAgICAvKiBzdGVwIDExLjUg cCA9IFggLSAoYyAtIDEpICovCi0gICAgICAgICAgICAgaWYgKCFCTl9zdWIocjAsIGMsIEJOX3Zh bHVlX29uZSgpKSkKLSAgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0gICAgICAgICAgICAgaWYg KCFCTl9zdWIocCwgWCwgcjApKQotICAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSAKLS0gICAg ICAgICAgICAvKiBzdGVwIDEwICovCi0rICAgICAgICAgICAgLyogc3RlcCAxMS42ICovCi0gICAg ICAgICAgICAgaWYgKEJOX2NtcChwLCB0ZXN0KSA+PSAwKSB7Ci0tICAgICAgICAgICAgICAgIC8q IHN0ZXAgMTEgKi8KLSsgICAgICAgICAgICAgICAgLyogc3RlcCAxMS43ICovCi0gICAgICAgICAg ICAgICAgIHIgPSBCTl9pc19wcmltZV9mYXN0dGVzdF9leChwLCBEU1NfcHJpbWVfY2hlY2tzLCBj dHgsIDEsIGNiKTsKLSAgICAgICAgICAgICAgICAgaWYgKHIgPiAwKQotICAgICAgICAgICAgICAg ICAgICAgZ290byBlbmQ7ICAgLyogZm91bmQgaXQgKi8KLUBAIC0zMDgsMTIgKzM3MSwxMiBAQCBp bnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCi0gICAgICAgICAgICAgICAg ICAgICBnb3RvIGVycjsKLSAgICAgICAgICAgICB9Ci0gCi0tICAgICAgICAgICAgLyogc3RlcCAx MyAqLwotKyAgICAgICAgICAgIC8qIHN0ZXAgMTEuOSAqLwotICAgICAgICAgICAgIGNvdW50ZXIr KzsKLSAgICAgICAgICAgICAvKiAib2Zmc2V0ID0gb2Zmc2V0ICsgbiArIDEiICovCi0gCi0tICAg ICAgICAgICAgLyogc3RlcCAxNCAqLwotLSAgICAgICAgICAgIGlmIChjb3VudGVyID49IDQwOTYp Ci0rICAgICAgICAgICAgLyogc3RlcCAxMiAqLwotKyAgICAgICAgICAgIGlmIChjb3VudGVyID49 IDQgKiBiaXRzKQotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgIH0KLSAgICAgfQot QEAgLTMyMSw3ICszODQsMzMgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBz aXplXwotICAgICBpZiAoIUJOX0dFTkNCX2NhbGwoY2IsIDIsIDEpKQotICAgICAgICAgZ290byBl cnI7Ci0gCi0tICAgIC8qIFdlIG5vdyBuZWVkIHRvIGdlbmVyYXRlIGcgKi8KLSsgICAgb2sgPSAx OwotKyBlcnI6Ci0rICAgIGlmIChvaykgewotKyAgICAgICAgaWYgKGNvdW50ZXJfcmV0ICE9IE5V TEwpCi0rICAgICAgICAgICAgKmNvdW50ZXJfcmV0ID0gY291bnRlcjsKLSsgICAgfQotKyAgICBy ZXR1cm4gb2s7Ci0rfQotKwotKyMgaWZuZGVmIE9QRU5TU0xfRklQUwotK3N0YXRpYwotKyMgZW5k aWYKLStpbnQgRklQU19kc2FfZ2VuZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdO VU0gKnEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgQklHTlVNICoqZ19yZXQsIHVuc2lnbmVk IGxvbmcgKmhfcmV0LCBCTl9HRU5DQiAqY2IpCi0rewotKyAgICBpbnQgb2sgPSAwOwotKyAgICBC SUdOVU0gKnIwLCAqdGVzdCwgKmcgPSBOVUxMOwotKyAgICBCTl9NT05UX0NUWCAqbW9udDsKLSsg ICAgdW5zaWduZWQgaW50IGggPSAyOwotKwotKyAgICBpZiAoKG1vbnQgPSBCTl9NT05UX0NUWF9u ZXcoKSkgPT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICByMCA9IEJOX0NUWF9n ZXQoY3R4KTsKLSsgICAgKmdfcmV0ID0gZyA9IEJOX0NUWF9nZXQoY3R4KTsKLSsgICAgdGVzdCA9 IEJOX0NUWF9nZXQoY3R4KTsKLSsKLSAgICAgLyogU2V0IHIwPShwLTEpL3EgKi8KLSAgICAgaWYg KCFCTl9zdWIodGVzdCwgcCwgQk5fdmFsdWVfb25lKCkpKQotICAgICAgICAgZ290byBlcnI7Ci1A QCAtMzUwLDQ2ICs0MzksMTQgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBz aXplXwotICAgICBvayA9IDE7Ci0gIGVycjoKLSAgICAgaWYgKG9rKSB7Ci0tICAgICAgICBpZiAo cmV0LT5wKQotLSAgICAgICAgICAgIEJOX2ZyZWUocmV0LT5wKTsKLS0gICAgICAgIGlmIChyZXQt PnEpCi0tICAgICAgICAgICAgQk5fZnJlZShyZXQtPnEpOwotLSAgICAgICAgaWYgKHJldC0+ZykK LS0gICAgICAgICAgICBCTl9mcmVlKHJldC0+Zyk7Ci0tICAgICAgICByZXQtPnAgPSBCTl9kdXAo cCk7Ci0tICAgICAgICByZXQtPnEgPSBCTl9kdXAocSk7Ci0tICAgICAgICByZXQtPmcgPSBCTl9k dXAoZyk7Ci0tICAgICAgICBpZiAocmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwgfHwg cmV0LT5nID09IE5VTEwpIHsKLS0gICAgICAgICAgICBvayA9IDA7Ci0tICAgICAgICAgICAgZ290 byBlcnI7Ci0tICAgICAgICB9Ci0tICAgICAgICBpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkKLS0g ICAgICAgICAgICAqY291bnRlcl9yZXQgPSBjb3VudGVyOwotICAgICAgICAgaWYgKGhfcmV0ICE9 IE5VTEwpCi0gICAgICAgICAgICAgKmhfcmV0ID0gaDsKLS0gICAgICAgIGlmIChzZWVkX291dCkK LS0gICAgICAgICAgICBtZW1jcHkoc2VlZF9vdXQsIHNlZWQsIHFzaXplKTsKLS0gICAgfQotLSAg ICBpZiAoY3R4KSB7Ci0tICAgICAgICBCTl9DVFhfZW5kKGN0eCk7Ci0tICAgICAgICBCTl9DVFhf ZnJlZShjdHgpOwotICAgICB9Ci0gICAgIGlmIChtb250ICE9IE5VTEwpCi0gICAgICAgICBCTl9N T05UX0NUWF9mcmVlKG1vbnQpOwotICAgICByZXR1cm4gb2s7Ci0gfQotIAotLSMgaWZkZWYgT1BF TlNTTF9GSVBTCi0tIyAgdW5kZWYgZmlwc19kc2FfYnVpbHRpbl9wYXJhbWdlbjIKLS1leHRlcm4g aW50IGZpcHNfZHNhX2J1aWx0aW5fcGFyYW1nZW4yKERTQSAqcmV0LCBzaXplX3QgTCwgc2l6ZV90 IE4sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQg KmV2cG1kLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqc2VlZF9pbiwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBzZWVkX2xlbiwgaW50IGlkeCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNlZWRfb3V0LAotLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9y ZXQsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTl9HRU5DQiAqY2Ip OwotLSMgZW5kaWYKLS0KLSAvKgotICAqIFRoaXMgaXMgYSBwYXJhbWV0ZXIgZ2VuZXJhdGlvbiBh bGdvcml0aG0gZm9yIHRoZSBEU0EyIGFsZ29yaXRobSBhcwotICAqIGRlc2NyaWJlZCBpbiBGSVBT IDE4Ni0zLgotQEAgLTQxNSwxNCArNDcyLDYgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuMihE U0EgKnJldCwgc2l6ZQotICAgICBFVlBfTURfQ1RYIG1jdHg7Ci0gICAgIHVuc2lnbmVkIGludCBo ID0gMjsKLSAKLS0jIGlmZGVmIE9QRU5TU0xfRklQUwotLQotLSAgICBpZiAoRklQU19tb2RlKCkp Ci0tICAgICAgICByZXR1cm4gZmlwc19kc2FfYnVpbHRpbl9wYXJhbWdlbjIocmV0LCBMLCBOLCBl dnBtZCwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVkX2lu LCBzZWVkX2xlbiwgaWR4LAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNlZWRfb3V0LCBjb3VudGVyX3JldCwgaF9yZXQsIGNiKTsKLS0jIGVuZGlmCi0tCi0gICAg IEVWUF9NRF9DVFhfaW5pdCgmbWN0eCk7Ci0gCi0gICAgIGlmIChldnBtZCA9PSBOVUxMKSB7Ci1k aWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYS5oLmZpcHMgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2RzYS9kc2EuaAotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhLmgu ZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjM4MjkxMTIyNyArMDEwMAotKysrIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9kc2EvZHNhLmgJMjAxNi0wMy0wMSAxNjozMzowNy42MTM5MTY0NTUgKzAxMDAK LUBAIC04OCw2ICs4OCw4IEBACi0gIyAgZGVmaW5lIE9QRU5TU0xfRFNBX01BWF9NT0RVTFVTX0JJ VFMgICAxMDAwMAotICMgZW5kaWYKLSAKLSsjIGRlZmluZSBPUEVOU1NMX0RTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMgMTAyNAotKwotICMgZGVmaW5lIERTQV9GTEFHX0NBQ0hFX01PTlRfUCAgIDB4 MDEKLSAvKgotICAqIG5ldyB3aXRoIDAuOS43aDsgdGhlIGJ1aWx0LWluIERTQSBpbXBsZW1lbnRh dGlvbiBub3cgdXNlcyBjb25zdGFudCB0aW1lCi1AQCAtMjY1LDYgKzI2NywyMCBAQCBpbnQgRFNB X3ByaW50X2ZwKEZJTEUgKmJwLCBjb25zdCBEU0EgKngsCi0gREggKkRTQV9kdXBfREgoY29uc3Qg RFNBICpyKTsKLSAjIGVuZGlmCi0gCi0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgRklQU19k c2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRfbGVuLCBpbnQgKmNv dW50ZXJfcmV0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg KmhfcmV0LCBCTl9HRU5DQiAqY2IpOwotK2ludCBGSVBTX2RzYV9nZW5lcmF0ZV9wcShCTl9DVFgg KmN0eCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQgY2hhciAqc2VlZCwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHNlZWRfbGVuLCBCSUdOVU0gKipwX3JldCwgQklHTlVNICoqcV9y ZXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIEJOX0dFTkNC ICpjYik7Ci0raW50IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwg QklHTlVNICpxLCBCSUdOVU0gKipnX3JldCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7Ci0rIyBlbmRpZgotKwotICMgZGVm aW5lIEVWUF9QS0VZX0NUWF9zZXRfZHNhX3BhcmFtZ2VuX2JpdHMoY3R4LCBuYml0cykgXAotICAg ICAgICAgRVZQX1BLRVlfQ1RYX2N0cmwoY3R4LCBFVlBfUEtFWV9EU0EsIEVWUF9QS0VZX09QX1BB UkFNR0VOLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfUEtFWV9DVFJM X0RTQV9QQVJBTUdFTl9CSVRTLCBuYml0cywgTlVMTCkKLUBAIC0yODcsMTEgKzMwMywxNCBAQCB2 b2lkIEVSUl9sb2FkX0RTQV9zdHJpbmdzKHZvaWQpOwotICMgZGVmaW5lIERTQV9GX0RPX0RTQV9Q UklOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQKLSAjIGRlZmluZSBEU0FfRl9E U0FQQVJBTVNfUFJJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwCi0gIyBkZWZpbmUg RFNBX0ZfRFNBUEFSQU1TX1BSSU5UX0ZQICAgICAgICAgICAgICAgICAgICAgICAgIDEwMQotLSMg ZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOMiAgICAgICAgICAgICAgICAgICAgICAx MjYKLSsjIGRlZmluZSBEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4gICAgICAgICAgICAgICAgICAg ICAgICAgMTI0Ci0rIyBkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4gICAgICAgICAg ICAgICAgICAgICAgIDEyMwotKyMgZGVmaW5lIERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOMiAg ICAgICAgICAgICAgICAgICAgICAyMjYKLSAjIGRlZmluZSBEU0FfRl9EU0FfRE9fU0lHTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEyCi0gIyBkZWZpbmUgRFNBX0ZfRFNBX0RPX1ZF UklGWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMwotLSMgZGVmaW5lIERTQV9GX0RT QV9HRU5FUkFURV9LRVkgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjQKLS0jIGRlZmluZSBE U0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSU19FWCAgICAgICAgICAgICAgICAgMTIzCi0rIyBk ZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEy NgotKyMgZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVURVJTX0VYICAgICAgICAgICAg ICAgICAxMjcKLSsjIGRlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVfUEFSQU1FVEVSUyAgIC8qIHVu dXNlZCAqLyAgICAgMTI1Ci0gIyBkZWZpbmUgRFNBX0ZfRFNBX05FV19NRVRIT0QgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEwMwotICMgZGVmaW5lIERTQV9GX0RTQV9QQVJBTV9ERUNPREUg ICAgICAgICAgICAgICAgICAgICAgICAgICAxMTkKLSAjIGRlZmluZSBEU0FfRl9EU0FfUFJJTlRf RlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA1Ci1AQCAtMzE3LDEyICszMzYsMTYg QEAgdm9pZCBFUlJfbG9hZF9EU0Ffc3RyaW5ncyh2b2lkKTsKLSAjIGRlZmluZSBEU0FfUl9EQVRB X1RPT19MQVJHRV9GT1JfS0VZX1NJWkUgICAgICAgICAgICAgICAgMTAwCi0gIyBkZWZpbmUgRFNB X1JfREVDT0RFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNAotICMgZGVm aW5lIERTQV9SX0lOVkFMSURfRElHRVNUX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAxMDYK LS0jIGRlZmluZSBEU0FfUl9JTlZBTElEX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAg ICAgMTEyCi0rIyBkZWZpbmUgRFNBX1JfSU5WQUxJRF9QQVJBTUVURVJTICAgICAgICAgICAgICAg ICAgICAgICAgIDIxMgotKyMgZGVmaW5lIERTQV9SX0tFWV9TSVpFX0lOVkFMSUQgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMTMKLSsjIGRlZmluZSBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwg ICAgICAgICAgICAgICAgICAgICAgICAgMTEwCi0gIyBkZWZpbmUgRFNBX1JfTUlTU0lOR19QQVJB TUVURVJTICAgICAgICAgICAgICAgICAgICAgICAgIDEwMQotICMgZGVmaW5lIERTQV9SX01PRFVM VVNfVE9PX0xBUkdFICAgICAgICAgICAgICAgICAgICAgICAgICAxMDMKLS0jIGRlZmluZSBEU0Ff Ul9ORUVEX05FV19TRVRVUF9WQUxVRVMgICAgICAgICAgICAgICAgICAgICAgMTEwCi0rIyBkZWZp bmUgRFNBX1JfTkVFRF9ORVdfU0VUVVBfVkFMVUVTICAgICAgICAgICAgICAgICAgICAgIDExMgot ICMgZGVmaW5lIERTQV9SX05PTl9GSVBTX0RTQV9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAg ICAxMTEKLSsjIGRlZmluZSBEU0FfUl9OT05fRklQU19NRVRIT0QgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTExCi0gIyBkZWZpbmUgRFNBX1JfTk9fUEFSQU1FVEVSU19TRVQgICAgICAgICAg ICAgICAgICAgICAgICAgIDEwNwotKyMgZGVmaW5lIERTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dF RF9JTl9GSVBTX01PREUgLyogdW51c2VkICovIDExMgotICMgZGVmaW5lIERTQV9SX1BBUkFNRVRF Ul9FTkNPRElOR19FUlJPUiAgICAgICAgICAgICAgICAgICAxMDUKLSAjIGRlZmluZSBEU0FfUl9R X05PVF9QUklNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTEzCi0gCi1kaWZmIC11 cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9kc2EvZHNhX2tleS5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2Ff a2V5LmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjA1LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX2tleS5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE0OTE2 NDc4ICswMTAwCi1AQCAtNjYsNiArNjYsMzQgQEAKLSAKLSAjIGlmZGVmIE9QRU5TU0xfRklQUwot ICMgIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyMgIGluY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0rCi0rc3RhdGljIGludCBmaXBzX2NoZWNrX2RzYShEU0EgKmRzYSkKLSt7Ci0rICAgIEVWUF9Q S0VZICpwazsKLSsgICAgdW5zaWduZWQgY2hhciB0YnNbXSA9ICJEU0EgUGFpcndpc2UgQ2hlY2sg RGF0YSI7Ci0rICAgIGludCByZXQgPSAwOwotKwotKyAgICBpZiAoKHBrID0gRVZQX1BLRVlfbmV3 KCkpID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgRVZQX1BLRVlfc2V0MV9E U0EocGssIGRzYSk7Ci0rCi0rICAgIGlmIChmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRi cywgLTEsIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwpKQotKyAgICAgICAgcmV0ID0gMTsKLSsKLSsg ZXJyOgotKyAgICBpZiAocmV0ID09IDApIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf Q0hFQ0tfRFNBLCBGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQpOwotKyAgICAgICAgZmlwc19z ZXRfc2VsZnRlc3RfZmFpbCgpOwotKyAgICB9Ci0rCi0rICAgIGlmIChwaykKLSsgICAgICAgIEVW UF9QS0VZX2ZyZWUocGspOwotKwotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLSAjIGVuZGlmCi0g Ci0gc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpOwotQEAgLTgxLDEwICsx MDksNiBAQCBpbnQgRFNBX2dlbmVyYXRlX2tleShEU0EgKmRzYSkKLSAjIGVuZGlmCi0gICAgIGlm IChkc2EtPm1ldGgtPmRzYV9rZXlnZW4pCi0gICAgICAgICByZXR1cm4gZHNhLT5tZXRoLT5kc2Ff a2V5Z2VuKGRzYSk7Ci0tIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgaWYgKEZJUFNfbW9kZSgp KQotLSAgICAgICAgcmV0dXJuIEZJUFNfZHNhX2dlbmVyYXRlX2tleShkc2EpOwotLSMgZW5kaWYK LSAgICAgcmV0dXJuIGRzYV9idWlsdGluX2tleWdlbihkc2EpOwotIH0KLSAKLUBAIC05NCw2ICsx MTgsMTQgQEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCi0gICAgIEJO X0NUWCAqY3R4ID0gTlVMTDsKLSAgICAgQklHTlVNICpwdWJfa2V5ID0gTlVMTCwgKnByaXZfa2V5 ID0gTlVMTDsKLSAKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19tb2RlKCkg JiYgIShkc2EtPmZsYWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rICAgICAgICAmJiAo Qk5fbnVtX2JpdHMoZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykp IHsKLSsgICAgICAgIERTQWVycihEU0FfRl9EU0FfQlVJTFRJTl9LRVlHRU4sIERTQV9SX0tFWV9T SVpFX1RPT19TTUFMTCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKyMgZW5kaWYKLSsK LSAgICAgaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCi0gICAgICAgICBnb3RvIGVy cjsKLSAKLUBAIC0xMzEsNiArMTYzLDEzIEBAIHN0YXRpYyBpbnQgZHNhX2J1aWx0aW5fa2V5Z2Vu KERTQSAqZHNhKQotIAotICAgICBkc2EtPnByaXZfa2V5ID0gcHJpdl9rZXk7Ci0gICAgIGRzYS0+ cHViX2tleSA9IHB1Yl9rZXk7Ci0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNf bW9kZSgpICYmICFmaXBzX2NoZWNrX2RzYShkc2EpKSB7Ci0rICAgICAgICBkc2EtPnB1Yl9rZXkg PSBOVUxMOwotKyAgICAgICAgZHNhLT5wcml2X2tleSA9IE5VTEw7Ci0rICAgICAgICBnb3RvIGVy cjsKLSsgICAgfQotKyMgZW5kaWYKLSAgICAgb2sgPSAxOwotIAotICBlcnI6Ci1kaWZmIC11cCBv cGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYV9saWIuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2Ny eXB0by9kc2EvZHNhX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2FfbGli LmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjA1LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9kc2EvZHNhX2xpYi5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE0OTE2NDc4 ICswMTAwCi1AQCAtODYsMTQgKzg2LDcgQEAgdm9pZCBEU0Ffc2V0X2RlZmF1bHRfbWV0aG9kKGNv bnN0IERTQV9NRQotIGNvbnN0IERTQV9NRVRIT0QgKkRTQV9nZXRfZGVmYXVsdF9tZXRob2Qodm9p ZCkKLSB7Ci0gICAgIGlmICghZGVmYXVsdF9EU0FfbWV0aG9kKSB7Ci0tI2lmZGVmIE9QRU5TU0xf RklQUwotLSAgICAgICAgaWYgKEZJUFNfbW9kZSgpKQotLSAgICAgICAgICAgIHJldHVybiBGSVBT X2RzYV9vcGVuc3NsKCk7Ci0tICAgICAgICBlbHNlCi0tICAgICAgICAgICAgcmV0dXJuIERTQV9P cGVuU1NMKCk7Ci0tI2Vsc2UKLSAgICAgICAgIGRlZmF1bHRfRFNBX21ldGhvZCA9IERTQV9PcGVu U1NMKCk7Ci0tI2VuZGlmCi0gICAgIH0KLSAgICAgcmV0dXJuIGRlZmF1bHRfRFNBX21ldGhvZDsK LSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYV9sb2NsLmguZmlwcyBv cGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYV9sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vZHNhL2RzYV9sb2NsLmguZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjM4NDkxMTI3MiAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX2xvY2wuaAkyMDE2LTAzLTAx IDE2OjMzOjA3LjYxNDkxNjQ3OCArMDEwMAotQEAgLTU2LDcgKzU2LDcgQEAKLSAKLSBpbnQgZHNh X2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2ln bmVkIGNoYXIgKnNlZWRfaW4sCi0tICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZWVk X2xlbiwgdW5zaWduZWQgY2hhciAqc2VlZF9vdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBzZWVkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVy X3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEJO X0dFTkNCICpjYik7Ci0gCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYV9v c3NsLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYV9vc3NsLmMKLS0tLSBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYV9vc3NsLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjUz LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX29zc2wu YwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxNDkxNjQ3OCArMDEwMAotQEAgLTY1LDYgKzY1LDkgQEAK LSAjaW5jbHVkZSA8b3BlbnNzbC9kc2EuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0g I2luY2x1ZGUgPG9wZW5zc2wvYXNuMS5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHN0YXRpYyBEU0FfU0lHICpkc2FfZG9f c2lnbihjb25zdCB1bnNpZ25lZCBjaGFyICpkZ3N0LCBpbnQgZGxlbiwgRFNBICpkc2EpOwotIHN0 YXRpYyBpbnQgZHNhX3NpZ25fc2V0dXAoRFNBICpkc2EsIEJOX0NUWCAqY3R4X2luLCBCSUdOVU0g KipraW52cCwKLUBAIC04Myw3ICs4Niw3IEBAIHN0YXRpYyBEU0FfTUVUSE9EIG9wZW5zc2xfZHNh X21ldGggPSB7Ci0gICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAvKiBkc2FfYm5fbW9k X2V4cCwgKi8KLSAgICAgZHNhX2luaXQsCi0gICAgIGRzYV9maW5pc2gsCi0tICAgIDAsCi0rICAg IERTQV9GTEFHX0ZJUFNfTUVUSE9ELAotICAgICBOVUxMLAotICAgICBOVUxMLAotICAgICBOVUxM Ci1AQCAtMTQwLDYgKzE0MywxOSBAQCBzdGF0aWMgRFNBX1NJRyAqZHNhX2RvX3NpZ24oY29uc3Qg dW5zaWduCi0gICAgIERTQV9TSUcgKnJldCA9IE5VTEw7Ci0gICAgIGludCBub3JlZG8gPSAwOwot IAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkp IHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0RTQV9ET19TSUdOLCBGSVBTX1JfRklQU19TRUxG VEVTVF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsKLSsgICAgaWYg KEZJUFNfbW9kZSgpICYmICEoZHNhLT5mbGFncyAmIERTQV9GTEFHX05PTl9GSVBTX0FMTE9XKQot KyAgICAgICAgJiYgKEJOX251bV9iaXRzKGRzYS0+cCkgPCBPUEVOU1NMX0RTQV9GSVBTX01JTl9N T0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICBEU0FlcnIoRFNBX0ZfRFNBX0RPX1NJR04sIERTQV9S X0tFWV9TSVpFX1RPT19TTUFMTCk7Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgfQotKyNl bmRpZgotKwotICAgICBCTl9pbml0KCZtKTsKLSAgICAgQk5faW5pdCgmeHIpOwotIAotQEAgLTMz MCw2ICszNDYsMTggQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkCi0g ICAgICAgICBEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNBX1JfQkFEX1FfVkFMVUUpOwot ICAgICAgICAgcmV0dXJuIC0xOwotICAgICB9Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBp ZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRFNB X0RPX1ZFUklGWSwgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVy biAtMTsKLSsgICAgfQotKwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShkc2EtPmZsYWdzICYg RFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rICAgICAgICAmJiAoQk5fbnVtX2JpdHMoZHNhLT5w KSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKLSsgICAgICAgIERTQWVy cihEU0FfRl9EU0FfRE9fVkVSSUZZLCBEU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKyAgICAg ICAgcmV0dXJuIC0xOwotKyAgICB9Ci0rI2VuZGlmCi0gCi0gICAgIGlmIChCTl9udW1fYml0cyhk c2EtPnApID4gT1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUykgewotICAgICAgICAgRFNBZXJy KERTQV9GX0RTQV9ET19WRVJJRlksIERTQV9SX01PRFVMVVNfVE9PX0xBUkdFKTsKLUBAIC00MTAs NiArNDM4LDkgQEAgc3RhdGljIGludCBkc2FfZG9fdmVyaWZ5KGNvbnN0IHVuc2lnbmVkCi0gCi0g c3RhdGljIGludCBkc2FfaW5pdChEU0EgKmRzYSkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwot KyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rI2VuZGlmCi0gICAgIGRzYS0+ZmxhZ3MgfD0g RFNBX0ZMQUdfQ0FDSEVfTU9OVF9QOwotICAgICByZXR1cm4gKDEpOwotIH0KLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vZHNhL2RzYV9wbWV0aC5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2Ff cG1ldGguYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAwMDAwMDAwICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL2RzYS9kc2FfcG1ldGguYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYx NDkxNjQ3OCArMDEwMAotQEAgLTI1Myw3ICsyNTMsNyBAQCBzdGF0aWMgaW50IHBrZXlfZHNhX3Bh cmFtZ2VuKEVWUF9QS0VZX0NUCi0gICAgIGlmICghZHNhKQotICAgICAgICAgcmV0dXJuIDA7Ci0g ICAgIHJldCA9IGRzYV9idWlsdGluX3BhcmFtZ2VuKGRzYSwgZGN0eC0+bmJpdHMsIGRjdHgtPnFi aXRzLCBkY3R4LT5wbWQsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAs IE5VTEwsIE5VTEwsIE5VTEwsIHBjYik7Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsIDAsIE5VTEwsIE5VTEwsIHBjYik7Ci0gICAgIGlmIChyZXQpCi0gICAgICAgICBFVlBf UEtFWV9hc3NpZ25fRFNBKHBrZXksIGRzYSk7Ci0gICAgIGVsc2UKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9kc2EvZHNhdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2Rz YS9kc2F0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZHNhL2RzYXRlc3QuYy5maXBz CTIwMTYtMDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL2RzYS9kc2F0ZXN0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTQ5MTY0NzggKzAxMDAK LUBAIC0xMDAsMzYgKzEwMCw0MSBAQCBzdGF0aWMgaW50IE1TX0NBTExCQUNLIGRzYV9jYihpbnQg cCwgaW50Ci0gICogUFVCIDE4NiBhbmQgYWxzbyBhcHBlYXIgaW4gQXBwZW5kaXggNSB0byBGSVBT IFBJQiAxODYtMQotICAqLwotIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNlZWRbMjBdID0gewotLSAg ICAweGQ1LCAweDAxLCAweDRlLCAweDRiLCAweDYwLCAweGVmLCAweDJiLCAweGE4LCAweGI2LCAw eDIxLCAweDFiLCAweDQwLAotLSAgICAweDYyLCAweGJhLCAweDMyLCAweDI0LCAweGUwLCAweDQy LCAweDdkLCAweGQzLAotKyAgICAweDAyLCAweDQ3LCAweDExLCAweDkyLCAweDExLCAweDg4LCAw eEM4LCAweEZCLCAweEFGLCAweDQ4LCAweDRDLCAweDYyLAotKyAgICAweERGLCAweEE1LCAweEJF LCAweEEwLCAweEE0LCAweDNDLCAweDU2LCAweEUzLAotIH07Ci0gCi0gc3RhdGljIHVuc2lnbmVk IGNoYXIgb3V0X3BbXSA9IHsKLS0gICAgMHg4ZCwgMHhmMiwgMHhhNCwgMHg5NCwgMHg0OSwgMHgy MiwgMHg3NiwgMHhhYSwKLS0gICAgMHgzZCwgMHgyNSwgMHg3NSwgMHg5YiwgMHhiMCwgMHg2OCwg MHg2OSwgMHhjYiwKLS0gICAgMHhlYSwgMHhjMCwgMHhkOCwgMHgzYSwgMHhmYiwgMHg4ZCwgMHgw YywgMHhmNywKLS0gICAgMHhjYiwgMHhiOCwgMHgzMiwgMHg0ZiwgMHgwZCwgMHg3OCwgMHg4Miwg MHhlNSwKLS0gICAgMHhkMCwgMHg3NiwgMHgyZiwgMHhjNSwgMHhiNywgMHgyMSwgMHgwZSwgMHhh ZiwKLS0gICAgMHhjMiwgMHhlOSwgMHhhZCwgMHhhYywgMHgzMiwgMHhhYiwgMHg3YSwgMHhhYywK LS0gICAgMHg0OSwgMHg2OSwgMHgzZCwgMHhmYiwgMHhmOCwgMHgzNywgMHgyNCwgMHhjMiwKLS0g ICAgMHhlYywgMHgwNywgMHgzNiwgMHhlZSwgMHgzMSwgMHhjOCwgMHgwMiwgMHg5MSwKLSsgICAg MHhBQywgMHhDQiwgMHgxRSwgMHg2MywgMHg2MCwgMHg2OSwgMHgwQywgMHhGQiwgMHgwNiwgMHgx OSwgMHg2OCwgMHgzRSwKLSsgICAgMHhBNSwgMHgwMSwgMHg1QSwgMHhBMiwgMHgxNSwgMHg1Qywg MHhFMiwgMHg5OSwgMHgyRCwgMHhENSwgMHgzMCwgMHg5OSwKLSsgICAgMHg3RSwgMHg1RiwgMHg4 RCwgMHhFMiwgMHhGNywgMHhDNiwgMHgyRSwgMHg4RCwgMHhBMywgMHg5RiwgMHg1OCwgMHhBRCwK LSsgICAgMHhENiwgMHhBOSwgMHg3RCwgMHgwRSwgMHgwRCwgMHg5NSwgMHg1MywgMHhBNiwgMHg3 MSwgMHgzQSwgMHhERSwgMHhBQiwKLSsgICAgMHhBQywgMHhFOSwgMHhGNCwgMHgzNiwgMHg1NSwg MHg5RSwgMHhCOSwgMHhENiwgMHg5MywgMHhCRiwgMHhGMywgMHgxOCwKLSsgICAgMHgxQywgMHgx NCwgMHg3QiwgMHhBNSwgMHg0MiwgMHgyRSwgMHhDRCwgMHgwMCwgMHhFQiwgMHgzNSwgMHgzQiwg MHgxQiwKLSsgICAgMHhBOCwgMHg1MSwgMHhCQiwgMHhFMSwgMHg1OCwgMHg0MiwgMHg4NSwgMHg4 NCwgMHgyMiwgMHhBNywgMHg5NywgMHg1RSwKLSsgICAgMHg5OSwgMHg2RiwgMHgzOCwgMHgyMCwg MHhCRCwgMHg5RCwgMHhCNiwgMHhEOSwgMHgzMywgMHgzNywgMHgyQSwgMHhGRCwKLSsgICAgMHhC QiwgMHhENCwgMHhCQywgMHgwQywgMHgyQSwgMHg2NywgMHhDQiwgMHg5RiwgMHhCQiwgMHhERiwg MHhGOSwgMHg5MywKLSsgICAgMHhBQSwgMHhENiwgMHhGMCwgMHhENiwgMHg5NSwgMHgwQiwgMHg1 RCwgMHg2NSwgMHgxNCwgMHhEMCwgMHgxOCwgMHg5RCwKLSsgICAgMHhDNiwgMHhBRiwgMHhGMCwg MHhDNiwgMHgzNywgMHg3QywgMHhGMywgMHg1RiwKLSB9OwotIAotIHN0YXRpYyB1bnNpZ25lZCBj aGFyIG91dF9xW10gPSB7Ci0tICAgIDB4YzcsIDB4NzMsIDB4MjEsIDB4OGMsIDB4NzMsIDB4N2Us IDB4YzgsIDB4ZWUsCi0tICAgIDB4OTksIDB4M2IsIDB4NGYsIDB4MmQsIDB4ZWQsIDB4MzAsIDB4 ZjQsIDB4OGUsCi0tICAgIDB4ZGEsIDB4Y2UsIDB4OTEsIDB4NWYsCi0rICAgIDB4RTMsIDB4OEUs IDB4NUUsIDB4NkQsIDB4QkYsIDB4MkIsIDB4NzksIDB4RjgsIDB4QzUsIDB4NEIsIDB4ODksIDB4 OEIsCi0rICAgIDB4QkEsIDB4MkQsIDB4OTEsIDB4QzMsIDB4NkMsIDB4ODAsIDB4QUMsIDB4ODcs Ci0gfTsKLSAKLSBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfZ1tdID0gewotLSAgICAweDYyLCAw eDZkLCAweDAyLCAweDc4LCAweDM5LCAweGVhLCAweDBhLCAweDEzLAotLSAgICAweDQxLCAweDMx LCAweDYzLCAweGE1LCAweDViLCAweDRjLCAweGI1LCAweDAwLAotLSAgICAweDI5LCAweDlkLCAw eDU1LCAweDIyLCAweDk1LCAweDZjLCAweGVmLCAweGNiLAotLSAgICAweDNiLCAweGZmLCAweDEw LCAweGYzLCAweDk5LCAweGNlLCAweDJjLCAweDJlLAotLSAgICAweDcxLCAweGNiLCAweDlkLCAw eGU1LCAweGZhLCAweDI0LCAweGJhLCAweGJmLAotLSAgICAweDU4LCAweGU1LCAweGI3LCAweDk1 LCAweDIxLCAweDkyLCAweDVjLCAweDljLAotLSAgICAweGM0LCAweDJlLCAweDlmLCAweDZmLCAw eDQ2LCAweDRiLCAweDA4LCAweDhjLAotLSAgICAweGM1LCAweDcyLCAweGFmLCAweDUzLCAweGU2 LCAweGQ3LCAweDg4LCAweDAyLAotKyAgICAweDQyLCAweDRBLCAweDA0LCAweDRFLCAweDc5LCAw eEI0LCAweDk5LCAweDdGLCAweEZELCAweDU4LCAweDM2LCAweDJDLAotKyAgICAweDFCLCAweDVG LCAweDE4LCAweDdFLCAweDBELCAweENDLCAweEFCLCAweDgxLCAweEM5LCAweDVELCAweDEwLCAw eENFLAotKyAgICAweDRFLCAweDgwLCAweDdFLCAweDU4LCAweEI0LCAweDM0LCAweDNGLCAweEE3 LCAweDQ1LCAweEM3LCAweEFBLCAweDM2LAotKyAgICAweDI0LCAweDQyLCAweEE5LCAweDNCLCAw eEU4LCAweDBFLCAweDA0LCAweDAyLCAweDJELCAweEZCLCAweEE2LCAweDEzLAotKyAgICAweEI5 LCAweEI1LCAweDE1LCAweEE1LCAweDU2LCAweDA3LCAweDM1LCAweEU0LCAweDAzLCAweEI2LCAw eDc5LCAweDdDLAotKyAgICAweDYyLCAweERELCAweERGLCAweDNGLCAweDcxLCAweDNBLCAweDlE LCAweDhCLCAweEM0LCAweEY2LCAweEU3LCAweDFELAotKyAgICAweDUyLCAweEE4LCAweEE5LCAw eDQzLCAweDFELCAweDMzLCAweDUxLCAweDg4LCAweDM5LCAweEJELCAweDczLCAweEU5LAotKyAg ICAweDVGLCAweEJFLCAweDgyLCAweDQ5LCAweDI3LCAweEU2LCAweEI1LCAweDUzLCAweEMxLCAw eDM4LCAweEFDLCAweDJGLAotKyAgICAweDZELCAweDk3LCAweDZDLCAweEVCLCAweDY3LCAweEMx LCAweDVGLCAweDY3LCAweEY4LCAweDM1LCAweDA1LCAweDVFLAotKyAgICAweEQ1LCAweDY4LCAw eDgwLCAweEFBLCAweDk2LCAweENBLCAweDBCLCAweDhBLCAweEU2LCAweEYxLCAweEIxLCAweDQx LAotKyAgICAweEM2LCAweDc1LCAweDk0LCAweDBBLCAweDBBLCAweDJBLCAweEZBLCAweDI5LAot IH07Ci0gCi0gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3RyMVtdID0gIjEyMzQ1Njc4OTAx MjM0NTY3ODkwIjsKLUBAIC0xNjIsNyArMTY3LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQotICAgICBCSU9fcHJpbnRmKGJpb19lcnIsICJ0ZXN0IGdlbmVyYXRpb24gb2YgRFNB IHBhcmFtZXRlcnNcbiIpOwotIAotICAgICBCTl9HRU5DQl9zZXQoJmNiLCBkc2FfY2IsIGJpb19l cnIpOwotLSAgICBpZiAoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJh dGVfcGFyYW1ldGVyc19leChkc2EsIDUxMiwKLSsgICAgaWYgKCgoZHNhID0gRFNBX25ldygpKSA9 PSBOVUxMKSB8fCAhRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzZWVkLCAyMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50ZXIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoLCAmY2Ip KQotQEAgLTE3Niw4ICsxODEsOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0g ICAgIEJJT19wcmludGYoYmlvX2VyciwgIlxuY291bnRlcj0lZCBoPSVsZFxuIiwgY291bnRlciwg aCk7Ci0gCi0gICAgIERTQV9wcmludChiaW9fZXJyLCBkc2EsIDApOwotLSAgICBpZiAoY291bnRl ciAhPSAxMDUpIHsKLS0gICAgICAgIEJJT19wcmludGYoYmlvX2VyciwgImNvdW50ZXIgc2hvdWxk IGJlIDEwNVxuIik7Ci0rICAgIGlmIChjb3VudGVyICE9IDIzOSkgewotKyAgICAgICAgQklPX3By aW50ZihiaW9fZXJyLCAiY291bnRlciBzaG91bGQgYmUgMjM5XG4iKTsKLSAgICAgICAgIGdvdG8g ZW5kOwotICAgICB9Ci0gICAgIGlmIChoICE9IDIpIHsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2VuZ2lu ZS9lbmdfYWxsLmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYy5m aXBzCTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTQ5MTY0Nzgg KzAxMDAKLUBAIC01OSwxMSArNTksMjUgQEAKLSAKLSAjaW5jbHVkZSAiY3J5cHRsaWIuaCIKLSAj aW5jbHVkZSAiZW5nX2ludC5oIgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotIHZvaWQgRU5HSU5FX2xvYWRfYnVpbHRpbl9lbmdp bmVzKHZvaWQpCi0gewotICAgICAvKiBTb21lIEVOR0lORXMgbmVlZCB0aGlzICovCi0gICAgIE9Q RU5TU0xfY3B1aWRfc2V0dXAoKTsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIE9QRU5TU0xf aW5pdF9saWJyYXJ5KCk7Ci0rICAgIGlmIChGSVBTX21vZGUoKSkgewotKyAgICAgICAgLyogV2Ug YWxsb3cgbG9hZGluZyBkeW5hbWljIGVuZ2luZSBhcyBhIHRoaXJkIHBhcnR5Ci0rICAgICAgICAg ICBlbmdpbmUgbWlnaHQgYmUgRklQUyB2YWxpZGF0ZWQuCi0rICAgICAgICAgICBVc2VyIGlzIGRp c2FsbG93ZWQgdG8gbG9hZCBub24tdmFsaWRhdGVkIGVuZ2luZXMKLSsgICAgICAgICAgIGJ5IHNl Y3VyaXR5IHBvbGljeS4gKi8KLSsgICAgICAgIEVOR0lORV9sb2FkX2R5bmFtaWMoKTsKLSsgICAg ICAgIHJldHVybjsKLSsgICAgfQotKyNlbmRpZgotICNpZiAwCi0gICAgIC8qCi0gICAgICAqIFRo ZXJlJ3Mgbm8gbG9uZ2VyIGFueSBuZWVkIGZvciBhbiAib3BlbnNzbCIgRU5HSU5FIHVubGVzcywg b25lIGRheSwgaXQKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvY19hbGxjLmMu ZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2NfYWxsYy5jCi0tLS0gb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2V2cC9jX2FsbGMuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9jX2FsbGMuYwkyMDE2LTAzLTAx IDE2OjMzOjA3LjYxNTkxNjUwMCArMDEwMAotQEAgLTY1LDYgKzY1LDEwIEBACi0gdm9pZCBPcGVu U1NMX2FkZF9hbGxfY2lwaGVycyh2b2lkKQotIHsKLSAKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r ICAgIE9QRU5TU0xfaW5pdF9saWJyYXJ5KCk7Ci0rICAgIGlmICghRklQU19tb2RlKCkpIHsKLSsj ZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fREVTCi0gICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9k ZXNfY2ZiKCkpOwotICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NmYjEoKSk7Ci1AQCAtMjM4 LDQgKzI0Miw2NCBAQCB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQpCi0gICAgIEVW UF9hZGRfY2lwaGVyX2FsaWFzKFNOX2NhbWVsbGlhXzI1Nl9jYmMsICJDQU1FTExJQTI1NiIpOwot ICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9jYW1lbGxpYV8yNTZfY2JjLCAiY2FtZWxsaWEy NTYiKTsKLSAjZW5kaWYKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIH0gZWxzZSB7Ci0rIyBp Zm5kZWYgT1BFTlNTTF9OT19ERVMKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRl X2NmYigpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlM19jZmIoKSk7Ci0r Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9vZmIoKSk7Ci0rICAgICAgICBF VlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfb2ZiKCkpOwotKwotKyAgICAgICAgRVZQX2FkZF9j aXBoZXIoRVZQX2Rlc19lZGVfY2JjKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rl c19lZGUzX2NiYygpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUz X2NiYywgIkRFUzMiKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Rlc19lZGUz X2NiYywgImRlczMiKTsKLSsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRlKCkp OwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzKCkpOwotKyMgZW5kaWYKLSsK LSsjIGlmbmRlZiBPUEVOU1NMX05PX0FFUwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18xMjhfZWNiKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkp OwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiKCkpOwotKyAgICAgICAg RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiMSgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lw aGVyKEVWUF9hZXNfMTI4X2NmYjgoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVz XzEyOF9vZmIoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jdHIoKSk7 Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9nY20oKSk7Ci0rICAgICAgICBF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF94dHMoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzEyOF9jY20oKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEy OF93cmFwKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMs ICJBRVMxMjgiKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xMjhfY2Jj LCAiYWVzMTI4Iik7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9lY2IoKSk7 Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jYmMoKSk7Ci0rICAgICAgICBF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmIoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzE5Ml9jZmIxKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18x OTJfY2ZiOCgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX29mYigpKTsK LSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2N0cigpKTsKLSsgICAgICAgIEVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2djbSgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMTkyX2NjbSgpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTky X3dyYXAoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywg IkFFUzE5MiIpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzE5Ml9jYmMs ICJhZXMxOTIiKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2VjYigpKTsK LSsgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NiYygpKTsKLSsgICAgICAgIEVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYigpKTsKLSsgICAgICAgIEVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMjU2X2NmYjEoKSk7Ci0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1 Nl9jZmI4KCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfb2ZiKCkpOwot KyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY3RyKCkpOwotKyAgICAgICAgRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18yNTZfeHRzKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZf Y2NtKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfd3JhcCgpKTsKLSsg ICAgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18yNTZfY2JjLCAiQUVTMjU2Iik7Ci0r ICAgICAgICBFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMjU2X2NiYywgImFlczI1NiIpOwot KyMgZW5kaWYKLSsgICAgfQotKyNlbmRpZgotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2Ny eXB0by9ldnAvY19hbGxkLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2NfYWxsZC5j Ci0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9jX2FsbGQuYy5maXBzCTIwMTYtMDMtMDEg MTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9j X2FsbGQuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxNTkxNjUwMCArMDEwMAotQEAgLTY0LDUxICs2 NCw4MSBAQAotIAotIHZvaWQgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHModm9pZCkKLSB7Ci0rI2lm ZGVmIE9QRU5TU0xfRklQUwotKyAgICBPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKyAgICBpZiAo IUZJUFNfbW9kZSgpKSB7Ci0rI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX01ENAotLSAgICBF VlBfYWRkX2RpZ2VzdChFVlBfbWQ0KCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX21k NCgpKTsKLSAjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fTUQ1Ci0tICAgIEVWUF9hZGRfZGln ZXN0KEVWUF9tZDUoKSk7Ci0tICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwgInNzbDIt bWQ1Iik7Ci0tICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwgInNzbDMtbWQ1Iik7Ci0r ICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfbWQ1KCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdl c3RfYWxpYXMoU05fbWQ1LCAic3NsMi1tZDUiKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2Fs aWFzKFNOX21kNSwgInNzbDMtbWQ1Iik7Ci0gI2VuZGlmCi0gI2lmICFkZWZpbmVkKE9QRU5TU0xf Tk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTApCi0tICAgIEVWUF9hZGRfZGlnZXN0 KEVWUF9zaGEoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhKCkpOwotICMgaWZu ZGVmIE9QRU5TU0xfTk9fRFNBCi0tICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9kc3MoKSk7Ci0rICAg ICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfZHNzKCkpOwotICMgZW5kaWYKLSAjZW5kaWYKLSAjaWYg IWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMSkKLS0g ICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7Ci0tICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFz KFNOX3NoYTEsICJzc2wzLXNoYTEiKTsKLS0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hh MVdpdGhSU0FFbmNyeXB0aW9uLCBTTl9zaGExV2l0aFJTQSk7Ci0rICAgICAgICBFVlBfYWRkX2Rp Z2VzdChFVlBfc2hhMSgpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEs ICJzc2wzLXNoYTEiKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRo UlNBRW5jcnlwdGlvbiwgU05fc2hhMVdpdGhSU0EpOwotICMgaWZuZGVmIE9QRU5TU0xfTk9fRFNB Ci0tICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOwotLSAgICBFVlBfYWRkX2RpZ2VzdF9h bGlhcyhTTl9kc2FXaXRoU0hBMSwgU05fZHNhV2l0aFNIQTFfMik7Ci0tICAgIEVWUF9hZGRfZGln ZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCAiRFNTMSIpOwotLSAgICBFVlBfYWRkX2RpZ2VzdF9h bGlhcyhTTl9kc2FXaXRoU0hBMSwgImRzczEiKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVW UF9kc3MxKCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEs IFNOX2RzYVdpdGhTSEExXzIpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNh V2l0aFNIQTEsICJEU1MxIik7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FX aXRoU0hBMSwgImRzczEiKTsKLSAjIGVuZGlmCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQot LSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2Vz dChFVlBfZWNkc2EoKSk7Ci0gIyBlbmRpZgotICNlbmRpZgotICNpZiAhZGVmaW5lZChPUEVOU1NM X05PX01EQzIpICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fREVTKQotLSAgICBFVlBfYWRkX2RpZ2Vz dChFVlBfbWRjMigpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZGMyKCkpOwotICNl bmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19SSVBFTUQKLS0gICAgRVZQX2FkZF9kaWdlc3QoRVZQ X3JpcGVtZDE2MCgpKTsKLS0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fcmlwZW1kMTYwLCAi cmlwZW1kIik7Ci0tICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3JpcGVtZDE2MCwgInJtZDE2 MCIpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3JpcGVtZDE2MCgpKTsKLSsgICAgICAg IEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3JpcGVtZDE2MCwgInJpcGVtZCIpOwotKyAgICAgICAg RVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fcmlwZW1kMTYwLCAicm1kMTYwIik7Ci0gI2VuZGlmCi0g I2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgotLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0 KCkpOwotLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjU2KCkpOwotKyAgICAgICAgRVZQX2Fk ZF9kaWdlc3QoRVZQX3NoYTIyNCgpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEy NTYoKSk7Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgotLSAgICBFVlBfYWRk X2RpZ2VzdChFVlBfc2hhMzg0KCkpOwotLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhNTEyKCkp OwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKLSsgICAgICAgIEVWUF9h ZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7Ci0gI2VuZGlmCi0gI2lmbmRlZiBPUEVOU1NMX05PX1dI SVJMUE9PTAotLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxwb29sKCkpOwotKyAgICAgICAg RVZQX2FkZF9kaWdlc3QoRVZQX3doaXJscG9vbCgpKTsKLSsjZW5kaWYKLSsjaWZkZWYgT1BFTlNT TF9GSVBTCi0rICAgIH0gZWxzZSB7Ci0rIyBpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYg IWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3No YTEoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExLCAic3NsMy1zaGEx Iik7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVuY3J5cHRp b24sIFNOX3NoYTFXaXRoUlNBKTsKLSsjICBpZm5kZWYgT1BFTlNTTF9OT19EU0EKLSsgICAgICAg IEVWUF9hZGRfZGlnZXN0KEVWUF9kc3MxKCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxp YXMoU05fZHNhV2l0aFNIQTEsIFNOX2RzYVdpdGhTSEExXzIpOwotKyAgICAgICAgRVZQX2FkZF9k aWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsICJEU1MxIik7Ci0rICAgICAgICBFVlBfYWRkX2Rp Z2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwgImRzczEiKTsKLSsjICBlbmRpZgotKyMgIGlmbmRl ZiBPUEVOU1NMX05PX0VDRFNBCi0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfZWNkc2EoKSk7 Ci0rIyAgZW5kaWYKLSsjIGVuZGlmCi0rIyBpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKLSsgICAg ICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2Vz dChFVlBfc2hhMjU2KCkpOwotKyMgZW5kaWYKLSsjIGlmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgot KyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTM4NCgpKTsKLSsgICAgICAgIEVWUF9hZGRf ZGlnZXN0KEVWUF9zaGE1MTIoKSk7Ci0rIyBlbmRpZgotKyAgICB9Ci0gI2VuZGlmCi0gfQotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9kaWdlc3QuYy5maXBzIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9ldnAvZGlnZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2Rp Z2VzdC5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vZXZwL2RpZ2VzdC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE1OTE2 NTAwICswMTAwCi1AQCAtMTQzLDE4ICsxNDMsNTUgQEAgaW50IEVWUF9EaWdlc3RJbml0KEVWUF9N RF9DVFggKmN0eCwgY29ucwotICAgICByZXR1cm4gRVZQX0RpZ2VzdEluaXRfZXgoY3R4LCB0eXBl LCBOVUxMKTsKLSB9Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKwotKy8qIFRoZSBwdXJwb3Nl IG9mIHRoZXNlIGlzIHRvIHRyYXAgcHJvZ3JhbXMgdGhhdCBhdHRlbXB0IHRvIHVzZSBub24gRklQ UwotKyAqIGFsZ29yaXRobXMgaW4gRklQUyBtb2RlIGFuZCBpZ25vcmUgdGhlIGVycm9ycy4KLSsg Ki8KLSsKLStzdGF0aWMgaW50IGJhZF9pbml0KEVWUF9NRF9DVFggKmN0eCkKLSt7Ci0rICAgIEZJ UFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IGluaXQiKTsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKwot K3N0YXRpYyBpbnQgYmFkX3VwZGF0ZShFVlBfTURfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEs IHNpemVfdCBjb3VudCkKLSt7Ci0rICAgIEZJUFNfRVJST1JfSUdOT1JFRCgiRGlnZXN0IHVwZGF0 ZSIpOwotKyAgICByZXR1cm4gMDsKLSt9Ci0rCi0rc3RhdGljIGludCBiYWRfZmluYWwoRVZQX01E X0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICptZCkKLSt7Ci0rICAgIEZJUFNfRVJST1JfSUdOT1JF RCgiRGlnZXN0IEZpbmFsIik7Ci0rICAgIHJldHVybiAwOwotK30KLSsKLStzdGF0aWMgY29uc3Qg RVZQX01EIGJhZF9tZCA9IHsKLSsgICAgMCwKLSsgICAgMCwKLSsgICAgMCwKLSsgICAgMCwKLSsg ICAgYmFkX2luaXQsCi0rICAgIGJhZF91cGRhdGUsCi0rICAgIGJhZF9maW5hbCwKLSsgICAgTlVM TCwKLSsgICAgTlVMTCwKLSsgICAgTlVMTCwKLSsgICAgMCwKLSsgICAgezAsIDAsIDAsIDB9LAot K307Ci0rCi0rI2VuZGlmCi0rCi0gaW50IEVWUF9EaWdlc3RJbml0X2V4KEVWUF9NRF9DVFggKmN0 eCwgY29uc3QgRVZQX01EICp0eXBlLCBFTkdJTkUgKmltcGwpCi0gewotICAgICBFVlBfTURfQ1RY X2NsZWFyX2ZsYWdzKGN0eCwgRVZQX01EX0NUWF9GTEFHX0NMRUFORUQpOwotICNpZmRlZiBPUEVO U1NMX0ZJUFMKLS0gICAgLyogSWYgRklQUyBtb2RlIHN3aXRjaCB0byBhcHByb3ZlZCBpbXBsZW1l bnRhdGlvbiBpZiBwb3NzaWJsZSAqLwotLSAgICBpZiAoRklQU19tb2RlKCkpIHsKLS0gICAgICAg IGNvbnN0IEVWUF9NRCAqZmlwc21kOwotLSAgICAgICAgaWYgKHR5cGUpIHsKLS0gICAgICAgICAg ICBmaXBzbWQgPSBldnBfZ2V0X2ZpcHNfbWQodHlwZSk7Ci0tICAgICAgICAgICAgaWYgKGZpcHNt ZCkKLS0gICAgICAgICAgICAgICAgdHlwZSA9IGZpcHNtZDsKLS0gICAgICAgIH0KLSsgICAgaWYg KEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0VWUF9E SUdFU1RJTklUX0VYLCBGSVBTX1JfRklQU19TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgY3R4 LT5kaWdlc3QgPSAmYmFkX21kOwotKyAgICAgICAgcmV0dXJuIDA7Ci0gICAgIH0KLSAjZW5kaWYK LSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi1AQCAtMjEyLDYgKzI0OSwxNiBAQCBpbnQgRVZQ X0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCi0gICAgIH0KLSAjZW5kaWYKLSAgICAg aWYgKGN0eC0+ZGlnZXN0ICE9IHR5cGUpIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgICAg ICBpZiAoRklQU19tb2RlKCkpIHsKLSsgICAgICAgICAgICBpZiAoISh0eXBlLT5mbGFncyAmIEVW UF9NRF9GTEFHX0ZJUFMpCi0rICAgICAgICAgICAgICAgICYmICEoY3R4LT5mbGFncyAmIEVWUF9N RF9DVFhfRkxBR19OT05fRklQU19BTExPVykpIHsKLSsgICAgICAgICAgICAgICAgRVZQZXJyKEVW UF9GX0VWUF9ESUdFU1RJTklUX0VYLCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQUyk7Ci0rICAgICAg ICAgICAgICAgIGN0eC0+ZGlnZXN0ID0gJmJhZF9tZDsKLSsgICAgICAgICAgICAgICAgcmV0dXJu IDA7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotKyNlbmRpZgotICAgICAgICAgaWYgKGN0 eC0+ZGlnZXN0ICYmIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSkKLSAgICAgICAgICAgICBPUEVOU1NM X2ZyZWUoY3R4LT5tZF9kYXRhKTsKLSAgICAgICAgIGN0eC0+ZGlnZXN0ID0gdHlwZTsKLUBAIC0y MzYsMjUgKzI4MywxNSBAQCBpbnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBj Ci0gICAgIH0KLSAgICAgaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVCkK LSAgICAgICAgIHJldHVybiAxOwotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgaWYgKEZJUFNf bW9kZSgpKSB7Ci0tICAgICAgICBpZiAoRklQU19kaWdlc3Rpbml0KGN0eCwgdHlwZSkpCi0tICAg ICAgICAgICAgcmV0dXJuIDE7Ci0tICAgICAgICBPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsK LS0gICAgICAgIGN0eC0+bWRfZGF0YSA9IE5VTEw7Ci0tICAgICAgICByZXR1cm4gMDsKLS0gICAg fQotLSNlbmRpZgotICAgICByZXR1cm4gY3R4LT5kaWdlc3QtPmluaXQoY3R4KTsKLSB9Ci0gCi0g aW50IEVWUF9EaWdlc3RVcGRhdGUoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBz aXplX3QgY291bnQpCi0gewotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgcmV0dXJuIEZJUFNf ZGlnZXN0dXBkYXRlKGN0eCwgZGF0YSwgY291bnQpOwotLSNlbHNlCi0tICAgIHJldHVybiBjdHgt PnVwZGF0ZShjdHgsIGRhdGEsIGNvdW50KTsKLSsgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOwot ICNlbmRpZgotKyAgICByZXR1cm4gY3R4LT51cGRhdGUoY3R4LCBkYXRhLCBjb3VudCk7Ci0gfQot IAotIC8qIFRoZSBjYWxsZXIgY2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0 IGRhdGEgZnJvbSB0aGUgY29udGV4dCAqLwotQEAgLTI2OSwxMSArMzA2LDExIEBAIGludCBFVlBf RGlnZXN0RmluYWwoRVZQX01EX0NUWCAqY3R4LCB1bnMKLSAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1 bWUgdGhhdCB0aGlzIHJlbW92ZXMgYW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8K LSBpbnQgRVZQX0RpZ2VzdEZpbmFsX2V4KEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAq bWQsIHVuc2lnbmVkIGludCAqc2l6ZSkKLSB7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBy ZXR1cm4gRklQU19kaWdlc3RmaW5hbChjdHgsIG1kLCBzaXplKTsKLS0jZWxzZQotICAgICBpbnQg cmV0OwotIAotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgRklQU19zZWxmdGVzdF9jaGVjaygp OwotKyNlbmRpZgotICAgICBPUEVOU1NMX2Fzc2VydChjdHgtPmRpZ2VzdC0+bWRfc2l6ZSA8PSBF VlBfTUFYX01EX1NJWkUpOwotICAgICByZXQgPSBjdHgtPmRpZ2VzdC0+ZmluYWwoY3R4LCBtZCk7 Ci0gICAgIGlmIChzaXplICE9IE5VTEwpCi1AQCAtMjg0LDcgKzMyMSw2IEBAIGludCBFVlBfRGln ZXN0RmluYWxfZXgoRVZQX01EX0NUWCAqY3R4LAotICAgICB9Ci0gICAgIG1lbXNldChjdHgtPm1k X2RhdGEsIDAsIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7Ci0gICAgIHJldHVybiByZXQ7Ci0tI2Vu ZGlmCi0gfQotIAotIGludCBFVlBfTURfQ1RYX2NvcHkoRVZQX01EX0NUWCAqb3V0LCBjb25zdCBF VlBfTURfQ1RYICppbikKLUBAIC0zNzMsNyArNDA5LDYgQEAgdm9pZCBFVlBfTURfQ1RYX2Rlc3Ry b3koRVZQX01EX0NUWCAqY3R4KQotIC8qIFRoaXMgY2FsbCBmcmVlcyByZXNvdXJjZXMgYXNzb2Np YXRlZCB3aXRoIHRoZSBjb250ZXh0ICovCi0gaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURf Q1RYICpjdHgpCi0gewotLSNpZm5kZWYgT1BFTlNTTF9GSVBTCi0gICAgIC8qCi0gICAgICAqIERv bid0IGFzc3VtZSBjdHgtPm1kX2RhdGEgd2FzIGNsZWFuZWQgaW4gRVZQX0RpZ2VzdF9GaW5hbCwg YmVjYXVzZQotICAgICAgKiBzb21ldGltZXMgb25seSBjb3BpZXMgb2YgdGhlIGNvbnRleHQgYXJl IGV2ZXIgZmluYWxpc2VkLgotQEAgLTM4Niw3ICs0MjEsNiBAQCBpbnQgRVZQX01EX0NUWF9jbGVh bnVwKEVWUF9NRF9DVFggKmN0eCkKLSAgICAgICAgIE9QRU5TU0xfY2xlYW5zZShjdHgtPm1kX2Rh dGEsIGN0eC0+ZGlnZXN0LT5jdHhfc2l6ZSk7Ci0gICAgICAgICBPUEVOU1NMX2ZyZWUoY3R4LT5t ZF9kYXRhKTsKLSAgICAgfQotLSNlbmRpZgotICAgICBpZiAoY3R4LT5wY3R4KQotICAgICAgICAg RVZQX1BLRVlfQ1RYX2ZyZWUoY3R4LT5wY3R4KTsKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5F Ci1AQCAtMzk3LDkgKzQzMSw2IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAq Y3R4KQotICAgICAgICAgICovCi0gICAgICAgICBFTkdJTkVfZmluaXNoKGN0eC0+ZW5naW5lKTsK LSAjZW5kaWYKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIEZJUFNfbWRfY3R4X2NsZWFudXAo Y3R4KTsKLS0jZW5kaWYKLSAgICAgbWVtc2V0KGN0eCwgJ1wwJywgc2l6ZW9mICpjdHgpOwotIAot ICAgICByZXR1cm4gMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvZV9hZXMu Yy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvZV9hZXMuYwotLS0tIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAwMDAwMDAw ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9lX2Flcy5jCTIwMTYtMDMtMDEg MTY6MzM6MDcuNjE1OTE2NTAwICswMTAwCi1AQCAtNjAsOSArNjAsNiBAQAotICMgaW5jbHVkZSAi bW9kZXNfbGNsLmgiCi0gIyBpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSAKLS0jIHVuZGVmIEVW UF9DSVBIX0ZMQUdfRklQUwotLSMgZGVmaW5lIEVWUF9DSVBIX0ZMQUdfRklQUyAwCi0tCi0gdHlw ZWRlZiBzdHJ1Y3QgewotICAgICB1bmlvbiB7Ci0gICAgICAgICBkb3VibGUgYWxpZ247Ci1AQCAt MTE1OSw2ICsxMTU2LDExIEBAIHN0YXRpYyBpbnQgYWVzX2djbV9jdHJsKEVWUF9DSVBIRVJfQ1RY ICoKLSAgICAgY2FzZSBFVlBfQ1RSTF9HQ01fU0VUX0lWTEVOOgotICAgICAgICAgaWYgKGFyZyA8 PSAwKQotICAgICAgICAgICAgIHJldHVybiAwOwotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAg ICAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgpICYmICEoYy0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFH X05PTl9GSVBTX0FMTE9XKQotKyAgICAgICAgICAgICYmIGFyZyA8IDEyKQotKyAgICAgICAgICAg IHJldHVybiAwOwotKyMgZW5kaWYKLSAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgSVYg aWYgbmVlZGVkICovCi0gICAgICAgICBpZiAoKGFyZyA+IEVWUF9NQVhfSVZfTEVOR1RIKSAmJiAo YXJnID4gZ2N0eC0+aXZsZW4pKSB7Ci0gICAgICAgICAgICAgaWYgKGdjdHgtPml2ICE9IGMtPml2 KQotQEAgLTE3MjcsNiArMTcyOSwxNCBAQCBzdGF0aWMgaW50IGFlc194dHNfY2lwaGVyKEVWUF9D SVBIRVJfQ1RYCi0gICAgICAgICByZXR1cm4gMDsKLSAgICAgaWYgKCFvdXQgfHwgIWluIHx8IGxl biA8IEFFU19CTE9DS19TSVpFKQotICAgICAgICAgcmV0dXJuIDA7Ci0rIyBpZmRlZiBPUEVOU1NM X0ZJUFMKLSsgICAgLyogUmVxdWlyZW1lbnQgb2YgU1A4MDAtMzhFICovCi0rICAgIGlmIChGSVBT X21vZHVsZV9tb2RlKCkgJiYgIShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19B TExPVykgJiYKLSsgICAgICAgIChsZW4gPiAoMVVMIDw8IDIwKSAqIDE2KSkgewotKyAgICAgICAg RVZQZXJyKEVWUF9GX0FFU19YVFNfQ0lQSEVSLCBFVlBfUl9UT09fTEFSR0UpOwotKyAgICAgICAg cmV0dXJuIDA7Ci0rICAgIH0KLSsjIGVuZGlmCi0gICAgIGlmICh4Y3R4LT5zdHJlYW0pCi0gICAg ICAgICAoKnhjdHgtPnN0cmVhbSkgKGluLCBvdXQsIGxlbiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgeGN0eC0+eHRzLmtleTEsIHhjdHgtPnh0cy5rZXkyLCBjdHgtPml2KTsKLWRpZmYgLXVw IG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vZXZwL2VfZGVzMy5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9lX2RlczMu Yy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2V2cC9lX2RlczMuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxNTkxNjUwMCAr MDEwMAotQEAgLTY1LDEwICs2NSw2IEBACi0gIyBpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotICMg aW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0gCi0tLyogQmxvY2sgdXNlIG9mIGltcGxlbWVudGF0 aW9ucyBpbiBGSVBTIG1vZGUgKi8KLS0jIHVuZGVmIEVWUF9DSVBIX0ZMQUdfRklQUwotLSMgZGVm aW5lIEVWUF9DSVBIX0ZMQUdfRklQUyAgICAgIDAKLS0KLSB0eXBlZGVmIHN0cnVjdCB7Ci0gICAg IHVuaW9uIHsKLSAgICAgICAgIGRvdWJsZSBhbGlnbjsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9ldnAvZV9udWxsLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2VfbnVs bC5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIwMTYtMDMt MDEgMTQ6MzU6NTMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2 cC9lX251bGwuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxNjkxNjUyMyArMDEwMAotQEAgLTY4LDcg KzY4LDcgQEAgc3RhdGljIGludCBudWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqYwotIHN0YXRp YyBjb25zdCBFVlBfQ0lQSEVSIG5fY2lwaGVyID0gewotICAgICBOSURfdW5kZWYsCi0gICAgIDEs IDAsIDAsCi0tICAgIDAsCi0rICAgIEVWUF9DSVBIX0ZMQUdfRklQUywKLSAgICAgbnVsbF9pbml0 X2tleSwKLSAgICAgbnVsbF9jaXBoZXIsCi0gICAgIE5VTEwsCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vZXZwL2V2cF9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAv ZXZwX2VuYy5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcwky MDE2LTAzLTAxIDE0OjM1OjUzLjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2Ny eXB0by9ldnAvZXZwX2VuYy5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE2OTE2NTIzICswMTAwCi1A QCAtNjksMTYgKzY5LDczIEBACi0gI2VuZGlmCi0gI2luY2x1ZGUgImV2cF9sb2NsLmgiCi0gCi0t I2lmZGVmIE9QRU5TU0xfRklQUwotLSMgZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwg aW5sKSBGSVBTX2NpcGhlcihjdHgsIG91dCwgaW4sIGlubCkKLS0jZWxzZQotLSMgZGVmaW5lIE1f ZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCwg b3V0LCBpbiwgaW5sKQotLSNlbmRpZgotKyNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGlu LCBpbmwpIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpCi0gCi0gY29u c3QgY2hhciBFVlBfdmVyc2lvbltdID0gIkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOwotIAot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsKLSsvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0 cmFwIHByb2dyYW1zIHRoYXQgYXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKLSsgKiBhbGdvcml0aG1z IGluIEZJUFMgbW9kZSBhbmQgaWdub3JlIHRoZSBlcnJvcnMuCi0rICovCi0rCi0rc3RhdGljIGlu dCBiYWRfaW5pdChFVlBfQ0lQSEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXks Ci0rICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykK LSt7Ci0rICAgIEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGluaXQiKTsKLSsgICAgcmV0dXJu IDA7Ci0rfQotKwotK3N0YXRpYyBpbnQgYmFkX2RvX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4 LCB1bnNpZ25lZCBjaGFyICpvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQotK3sKLSsgICAgRklQU19FUlJPUl9J R05PUkVEKCJDaXBoZXIgdXBkYXRlIik7Ci0rICAgIHJldHVybiAwOwotK30KLSsKLSsvKiBOQjog bm8gY2xlYW51cCBiZWNhdXNlIGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KLSsK LStzdGF0aWMgaW50IGJhZF9zZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUg KnR5cCkKLSt7Ci0rICAgIEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHNldF9hc24xIik7Ci0r ICAgIHJldHVybiAwOwotK30KLSsKLStzdGF0aWMgaW50IGJhZF9nZXRfYXNuMShFVlBfQ0lQSEVS X0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKLSt7Ci0rICAgIEZJUFNfRVJST1JfSUdOT1JFRCgi Q2lwaGVyIGdldF9hc24xIik7Ci0rICAgIHJldHVybiAwOwotK30KLSsKLStzdGF0aWMgaW50IGJh ZF9jdHJsKEVWUF9DSVBIRVJfQ1RYICpjdHgsIGludCB0eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIp Ci0rewotKyAgICBGSVBTX0VSUk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7Ci0rICAgIHJldHVy biAwOwotK30KLSsKLStzdGF0aWMgY29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0gewotKyAg ICAwLAotKyAgICAwLAotKyAgICAwLAotKyAgICAwLAotKyAgICAwLAotKyAgICBiYWRfaW5pdCwK LSsgICAgYmFkX2RvX2NpcGhlciwKLSsgICAgTlVMTCwKLSsgICAgMCwKLSsgICAgYmFkX3NldF9h c24xLAotKyAgICBiYWRfZ2V0X2FzbjEsCi0rICAgIGJhZF9jdHJsLAotKyAgICBOVUxMCi0rfTsK LSsKLSsjZW5kaWYKLSsKLSB2b2lkIEVWUF9DSVBIRVJfQ1RYX2luaXQoRVZQX0NJUEhFUl9DVFgg KmN0eCkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNr KCk7Ci0rI2VuZGlmCi0gICAgIG1lbXNldChjdHgsIDAsIHNpemVvZihFVlBfQ0lQSEVSX0NUWCkp OwotICAgICAvKiBjdHgtPmNpcGhlcj1OVUxMOyAqLwotIH0KLUBAIC0xMTAsNiArMTY3LDEzIEBA IGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAgICAgICAgICAgICBl bmMgPSAxOwotICAgICAgICAgY3R4LT5lbmNyeXB0ID0gZW5jOwotICAgICB9Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAg RklQU2VycihGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVgsIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZB SUxFRCk7Ci0rICAgICAgICBjdHgtPmNpcGhlciA9ICZiYWRfY2lwaGVyOwotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIH0KLSsjZW5kaWYKLSAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCi0gICAg IC8qCi0gICAgICAqIFdoZXRoZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNl ZCBvbiAiRmluYWwiJ2QgY29udGV4dHMgc28KLUBAIC0xNjgsMTYgKzIzMiw2IEBAIGludCBFVlBf Q2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAgICAgICAgICAgICBjdHgtPmVuZ2lu ZSA9IE5VTEw7Ci0gI2VuZGlmCi0gCi0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICAgICAgaWYg KEZJUFNfbW9kZSgpKSB7Ci0tICAgICAgICAgICAgY29uc3QgRVZQX0NJUEhFUiAqZmNpcGhlcjsK LS0gICAgICAgICAgICBpZiAoY2lwaGVyKQotLSAgICAgICAgICAgICAgICBmY2lwaGVyID0gZXZw X2dldF9maXBzX2NpcGhlcihjaXBoZXIpOwotLSAgICAgICAgICAgIGlmIChmY2lwaGVyKQotLSAg ICAgICAgICAgICAgICBjaXBoZXIgPSBmY2lwaGVyOwotLSAgICAgICAgICAgIHJldHVybiBGSVBT X2NpcGhlcmluaXQoY3R4LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7Ci0tICAgICAgICB9Ci0tI2Vu ZGlmCi0gICAgICAgICBjdHgtPmNpcGhlciA9IGNpcGhlcjsKLSAgICAgICAgIGlmIChjdHgtPmNp cGhlci0+Y3R4X3NpemUpIHsKLSAgICAgICAgICAgICBjdHgtPmNpcGhlcl9kYXRhID0gT1BFTlNT TF9tYWxsb2MoY3R4LT5jaXBoZXItPmN0eF9zaXplKTsKLUBAIC0yMDQsMTAgKzI1OCw2IEBAIGlu dCBFVlBfQ2lwaGVySW5pdF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKLSAjaWZuZGVmIE9QRU5TU0xf Tk9fRU5HSU5FCi0gIHNraXBfdG9faW5pdDoKLSAjZW5kaWYKLS0jaWZkZWYgT1BFTlNTTF9GSVBT Ci0tICAgIGlmIChGSVBTX21vZGUoKSkKLS0gICAgICAgIHJldHVybiBGSVBTX2NpcGhlcmluaXQo Y3R4LCBjaXBoZXIsIGtleSwgaXYsIGVuYyk7Ci0tI2VuZGlmCi0gICAgIC8qIHdlIGFzc3VtZSBi bG9jayBzaXplIGlzIGEgcG93ZXIgb2YgMiBpbiAqY3J5cHRVcGRhdGUgKi8KLSAgICAgT1BFTlNT TF9hc3NlcnQoY3R4LT5jaXBoZXItPmJsb2NrX3NpemUgPT0gMQotICAgICAgICAgICAgICAgICAg ICB8fCBjdHgtPmNpcGhlci0+YmxvY2tfc2l6ZSA9PSA4Ci1AQCAtMjUzLDYgKzMwMywxOSBAQCBp bnQgRVZQX0NpcGhlckluaXRfZXgoRVZQX0NJUEhFUl9DVFggKmN0Ci0gICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICB9Ci0gICAgIH0KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIC8qIEFm dGVyICdrZXknIGlzIHNldCBubyBmdXJ0aGVyIHBhcmFtZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlz c2libGUuCi0rICAgICAqIFNvIG9ubHkgY2hlY2sgZm9yIG5vbiBGSVBTIGVuYWJsaW5nIGF0IHRo aXMgcG9pbnQuCi0rICAgICAqLwotKyAgICBpZiAoa2V5ICYmIEZJUFNfbW9kZSgpKSB7Ci0rICAg ICAgICBpZiAoIShjdHgtPmNpcGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCi0rICAg ICAgICAgICAgJiAhKGN0eC0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkg ewotKyAgICAgICAgICAgIEVWUGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElT QUJMRURfRk9SX0ZJUFMpOwotKyAgICAgICAgICAgIGN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7 Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsjZW5kaWYKLSAK LSAgICAgaWYgKGtleSB8fCAoY3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxXQVlTX0NB TExfSU5JVCkpIHsKLSAgICAgICAgIGlmICghY3R4LT5jaXBoZXItPmluaXQoY3R4LCBrZXksIGl2 LCBlbmMpKQotQEAgLTU1NCw3ICs2MTcsNiBAQCB2b2lkIEVWUF9DSVBIRVJfQ1RYX2ZyZWUoRVZQ X0NJUEhFUl9DVFgKLSAKLSBpbnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChFVlBfQ0lQSEVSX0NU WCAqYykKLSB7Ci0tI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLSAgICAgaWYgKGMtPmNpcGhlciAhPSBO VUxMKSB7Ci0gICAgICAgICBpZiAoYy0+Y2lwaGVyLT5jbGVhbnVwICYmICFjLT5jaXBoZXItPmNs ZWFudXAoYykpCi0gICAgICAgICAgICAgcmV0dXJuIDA7Ci1AQCAtNTY0LDcgKzYyNiw2IEBAIGlu dCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1QKLSAgICAgfQotICAgICBpZiAo Yy0+Y2lwaGVyX2RhdGEpCi0gICAgICAgICBPUEVOU1NMX2ZyZWUoYy0+Y2lwaGVyX2RhdGEpOwot LSNlbmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAgICAgaWYgKGMtPmVuZ2luZSkK LSAgICAgICAgIC8qCi1AQCAtNTczLDkgKzYzNCw2IEBAIGludCBFVlBfQ0lQSEVSX0NUWF9jbGVh bnVwKEVWUF9DSVBIRVJfQ1QKLSAgICAgICAgICAqLwotICAgICAgICAgRU5HSU5FX2ZpbmlzaChj LT5lbmdpbmUpOwotICNlbmRpZgotLSNpZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgRklQU19jaXBo ZXJfY3R4X2NsZWFudXAoYyk7Ci0tI2VuZGlmCi0gICAgIG1lbXNldChjLCAwLCBzaXplb2YoRVZQ X0NJUEhFUl9DVFgpKTsKLSAgICAgcmV0dXJuIDE7Ci0gfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2V2cC9ldnAuaC5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvZXZwLmgK LS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2V2cC5oLmZpcHMJMjAxNi0wMy0wMSAxNjoz MzowNy41MDM5MTM5NjUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2V2cC5o CTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE2OTE2NTIzICswMTAwCi1AQCAtMTIyLDYgKzEyMiwxMCBA QAotIGV4dGVybiAiQyIgewotICNlbmRpZgotIAotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyAg aW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rIyBlbmRpZgotKwotIC8qCi0gICogVHlwZSBuZWVk cyB0byBiZSBhIGJpdCBmaWVsZCBTdWItdHlwZSBuZWVkcyB0byBiZSBmb3IgdmFyaWF0aW9ucyBv biB0aGUKLSAgKiBtZXRob2QsIGFzIGluLCBjYW4gaXQgZG8gYXJiaXRyYXJ5IGVuY3J5cHRpb24u Li4uCi1AQCAtMjg1LDExICsyODksNiBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdCB7Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjbGVhbmVkICovCi0g IyBkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1JFVVNFICAgICAgICAgICAweDAwMDQvKiBEb24ndCBm cmVlIHVwIGN0eC0+bWRfZGF0YQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICogaW4gRVZQX01EX0NUWF9jbGVhbnVwICovCi0tLyoKLS0gKiBGSVBTIGFu ZCBwYWQgb3B0aW9ucyBhcmUgaWdub3JlZCBpbiAxLjAuMCwgZGVmaW5pdGlvbnMgYXJlIGhlcmUg c28gd2UKLS0gKiBkb24ndCBhY2NpZGVudGFsbHkgcmV1c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIg cHVycG9zZXMuCi0tICovCi0tCi0gIyBkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FM TE9XICAweDAwMDgvKiBBbGxvdyB1c2Ugb2Ygbm9uIEZJUFMKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGRpZ2VzdCBpbiBGSVBTIG1vZGUgKi8KLSAK LUBAIC0zMDIsNiArMzAxLDEwIEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0IHsKLSAjIGRlZmluZSBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxICAgICAgIDB4MDAvKiBQS0NTIzEgdjEuNSBtb2RlICov Ci0gIyBkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxICAgICAgICAweDEwLyogWDkuMzEg bW9kZSAqLwotICMgZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTICAgICAgICAgMHgyMC8q IFBTUyBtb2RlICovCi0rIyBkZWZpbmUgTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KSBc Ci0rICAgICAgICAgICAgICAgICgoY3R4LT5mbGFncz4+MTYpICYweEZGRkYpIC8qIHNlZWQgbGVu Z3RoICovCi0rIyBkZWZpbmUgRVZQX01EX0NUWF9GTEFHX1BTU19NRExFTiAgICAgICAweEZGRkYv KiBzYWx0IGxlbiBzYW1lIGFzIGRpZ2VzdCAqLwotKyMgZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19Q U1NfTVJFQyAgICAgICAgMHhGRkZFLyogc2FsdCBtYXggb3IgYXV0byByZWNvdmVyZWQgKi8KLSAK LSAjIGRlZmluZSBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVCAgICAgICAgIDB4MDEwMC8qIERvbid0 IGluaXRpYWxpemUgbWRfZGF0YSAqLwotIAotQEAgLTM2MywxNSArMzY2LDE1IEBAIHN0cnVjdCBl dnBfY2lwaGVyX3N0IHsKLSAvKiBjaXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRpb24g Ki8KLSAjIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX1JBTkRfS0VZICAgICAgICAgICAgICAgMHgy MDAKLSAvKiBjaXBoZXIgaGFzIGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICovCi0t IyBkZWZpbmUgICAgICAgICBFVlBfQ0lQSF9DVVNUT01fQ09QWSAgICAgICAgICAgIDB4NDAwCi0r IyBkZWZpbmUgICAgICAgICBFVlBfQ0lQSF9DVVNUT01fQ09QWSAgICAgICAgICAgIDB4NDAwMAot IC8qIEFsbG93IHVzZSBkZWZhdWx0IEFTTjEgZ2V0L3NldCBpdiAqLwotICMgZGVmaW5lICAgICAg ICAgRVZQX0NJUEhfRkxBR19ERUZBVUxUX0FTTjEgICAgICAweDEwMDAKLSAvKiBCdWZmZXIgbGVu Z3RoIGluIGJpdHMgbm90IGJ5dGVzOiBDRkIxIG1vZGUgb25seSAqLwotICMgZGVmaW5lICAgICAg ICAgRVZQX0NJUEhfRkxBR19MRU5HVEhfQklUUyAgICAgICAweDIwMDAKLSAvKiBOb3RlIGlmIHN1 aXRhYmxlIGZvciB1c2UgaW4gRklQUyBtb2RlICovCi0tIyBkZWZpbmUgICAgICAgICBFVlBfQ0lQ SF9GTEFHX0ZJUFMgICAgICAgICAgICAgIDB4NDAwMAotKyMgZGVmaW5lICAgICAgICAgRVZQX0NJ UEhfRkxBR19GSVBTICAgICAgICAgICAgICAweDQwMAotIC8qIEFsbG93IG5vbiBGSVBTIGNpcGhl ciBpbiBGSVBTIG1vZGUgKi8KLS0jIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cgICAgMHg4MDAwCi0rIyBkZWZpbmUgICAgICAgICBFVlBfQ0lQSF9GTEFHX05PTl9G SVBTX0FMTE9XICAgIDB4ODAwCi0gLyoKLSAgKiBDaXBoZXIgaGFuZGxlcyBhbnkgYW5kIGFsbCBw YWRkaW5nIGxvZ2ljIGFzIHdlbGwgYXMgZmluYWxpc2F0aW9uLgotICAqLwotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9ldnBfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlw dG8vZXZwL2V2cF9saWIuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvZXZwX2xpYi5j LmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vZXZwL2V2cF9saWIuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYxNjkxNjUyMyAr MDEwMAotQEAgLTYwLDEwICs2MCw2IEBACi0gI2luY2x1ZGUgImNyeXB0bGliLmgiCi0gI2luY2x1 ZGUgPG9wZW5zc2wvZXZwLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotLSNpZmRl ZiBPUEVOU1NMX0ZJUFMKLS0jIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotLSMgaW5jbHVkZSAi ZXZwX2xvY2wuaCIKLS0jZW5kaWYKLSAKLSBpbnQgRVZQX0NJUEhFUl9wYXJhbV90b19hc24xKEVW UF9DSVBIRVJfQ1RYICpjLCBBU04xX1RZUEUgKnR5cGUpCi0gewotQEAgLTIyNCw2ICsyMjAsOSBA QCBpbnQgRVZQX0NJUEhFUl9DVFhfYmxvY2tfc2l6ZShjb25zdCBFVlBfCi0gaW50IEVWUF9DaXBo ZXIoRVZQX0NJUEhFUl9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAotICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQotIHsKLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAg ICAgcmV0dXJuIGN0eC0+Y2lwaGVyLT5kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpOwotIH0K LSAKLUBAIC0yMzQsMjIgKzIzMywxMiBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfQ0lQSEVSX0NU WF9jaXBoZXIoCi0gCi0gdW5zaWduZWQgbG9uZyBFVlBfQ0lQSEVSX2ZsYWdzKGNvbnN0IEVWUF9D SVBIRVIgKmNpcGhlcikKLSB7Ci0tI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBjb25zdCBFVlBf Q0lQSEVSICpmY2lwaGVyOwotLSAgICBmY2lwaGVyID0gZXZwX2dldF9maXBzX2NpcGhlcihjaXBo ZXIpOwotLSAgICBpZiAoZmNpcGhlciAmJiBmY2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdf RklQUykKLS0gICAgICAgIHJldHVybiBjaXBoZXItPmZsYWdzIHwgRVZQX0NJUEhfRkxBR19GSVBT OwotLSNlbmRpZgotICAgICByZXR1cm4gY2lwaGVyLT5mbGFnczsKLSB9Ci0gCi0gdW5zaWduZWQg bG9uZyBFVlBfQ0lQSEVSX0NUWF9mbGFncyhjb25zdCBFVlBfQ0lQSEVSX0NUWCAqY3R4KQotIHsK LS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIHJldHVybiBFVlBfQ0lQSEVSX2ZsYWdzKGN0eC0+ Y2lwaGVyKTsKLS0jZWxzZQotICAgICByZXR1cm4gY3R4LT5jaXBoZXItPmZsYWdzOwotLSNlbmRp ZgotIH0KLSAKLSB2b2lkICpFVlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGEoY29uc3QgRVZQX0NJ UEhFUl9DVFggKmN0eCkKLUBAIC0zMTYsNDAgKzMwNSw4IEBAIGludCBFVlBfTURfc2l6ZShjb25z dCBFVlBfTUQgKm1kKQotICAgICByZXR1cm4gbWQtPm1kX3NpemU7Ci0gfQotIAotLSNpZmRlZiBP UEVOU1NMX0ZJUFMKLS0KLS1jb25zdCBFVlBfTUQgKmV2cF9nZXRfZmlwc19tZChjb25zdCBFVlBf TUQgKm1kKQotLXsKLS0gICAgaW50IG5pZCA9IEVWUF9NRF90eXBlKG1kKTsKLS0gICAgaWYgKG5p ZCA9PSBOSURfZHNhKQotLSAgICAgICAgcmV0dXJuIEZJUFNfZXZwX2RzczEoKTsKLS0gICAgZWxz ZSBpZiAobmlkID09IE5JRF9kc2FXaXRoU0hBKQotLSAgICAgICAgcmV0dXJuIEZJUFNfZXZwX2Rz cygpOwotLSAgICBlbHNlIGlmIChuaWQgPT0gTklEX2VjZHNhX3dpdGhfU0hBMSkKLS0gICAgICAg IHJldHVybiBGSVBTX2V2cF9lY2RzYSgpOwotLSAgICBlbHNlCi0tICAgICAgICByZXR1cm4gRklQ U19nZXRfZGlnZXN0YnluaWQobmlkKTsKLS19Ci0tCi0tY29uc3QgRVZQX0NJUEhFUiAqZXZwX2dl dF9maXBzX2NpcGhlcihjb25zdCBFVlBfQ0lQSEVSICpjaXBoZXIpCi0tewotLSAgICBpbnQgbmlk ID0gY2lwaGVyLT5uaWQ7Ci0tICAgIGlmIChuaWQgPT0gTklEX3VuZGVmKQotLSAgICAgICAgcmV0 dXJuIEZJUFNfZXZwX2VuY19udWxsKCk7Ci0tICAgIGVsc2UKLS0gICAgICAgIHJldHVybiBGSVBT X2dldF9jaXBoZXJieW5pZChuaWQpOwotLX0KLS0KLS0jZW5kaWYKLS0KLSB1bnNpZ25lZCBsb25n IEVWUF9NRF9mbGFncyhjb25zdCBFVlBfTUQgKm1kKQotIHsKLS0jaWZkZWYgT1BFTlNTTF9GSVBT Ci0tICAgIGNvbnN0IEVWUF9NRCAqZm1kOwotLSAgICBmbWQgPSBldnBfZ2V0X2ZpcHNfbWQobWQp OwotLSAgICBpZiAoZm1kICYmIGZtZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKQotLSAgICAg ICAgcmV0dXJuIG1kLT5mbGFncyB8IEVWUF9NRF9GTEFHX0ZJUFM7Ci0tI2VuZGlmCi0gICAgIHJl dHVybiBtZC0+ZmxhZ3M7Ci0gfQotIAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2 cC9ldnBfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCi0t LS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMJMjAxNi0wMy0wMSAx NjozMzowNy40OTk5MTM4NzUgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL2V2 cF9sb2NsLmgJMjAxNi0wMy0wMSAxNjozMzowNy42MTY5MTY1MjMgKzAxMDAKLUBAIC0yNTgsMTAg KzI1OCw4IEBAIGNvbnN0IEVWUF9DSVBIRVIgKkVWUF8jI2NuYW1lIyNfZWNiKHZvaWQKLSAgICAg ICAgIEJMT0NLX0NJUEhFUl9mdW5jX2NmYihjaXBoZXIjI18jI2tleXNpemUsY3ByZWZpeCxjYml0 cyxrc3RydWN0LGtzY2hlZCkgXAotICAgICAgICAgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVy IyNfIyNrZXlzaXplLGtzdHJ1Y3QsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5J RF8jI2NpcGhlciMjXyMja2V5c2l6ZSwga2V5c2l6ZS84LCBpdl9sZW4sIGNiaXRzLCBcCi0tICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgXAot LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAot LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwgXAot LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEVWUF9DSVBIX0ZMQUdfREVGQVVMVF9BU04xLCBcCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkK LSAKLSBzdHJ1Y3QgZXZwX3BrZXlfY3R4X3N0IHsKLSAgICAgLyogTWV0aG9kIGFzc29jaWF0ZWQg d2l0aCB0aGlzIG9wZXJhdGlvbiAqLwotQEAgLTM1NSwxMSArMzUzLDYgQEAgY29uc3QgRVZQX0NJ UEhFUiAqZXZwX2dldF9maXBzX2NpcGhlcihjbwotICMgZGVmaW5lIE1EMl9Jbml0ICAgICAgICBw cml2YXRlX01EMl9Jbml0Ci0gIyBkZWZpbmUgTURDMl9Jbml0ICAgICAgIHByaXZhdGVfTURDMl9J bml0Ci0gIyBkZWZpbmUgU0hBX0luaXQgICAgICAgIHByaXZhdGVfU0hBX0luaXQKLS0jIGRlZmlu ZSBTSEExX0luaXQgICAgICAgcHJpdmF0ZV9TSEExX0luaXQKLS0jIGRlZmluZSBTSEEyMjRfSW5p dCAgICAgcHJpdmF0ZV9TSEEyMjRfSW5pdAotLSMgZGVmaW5lIFNIQTI1Nl9Jbml0ICAgICBwcml2 YXRlX1NIQTI1Nl9Jbml0Ci0tIyBkZWZpbmUgU0hBMzg0X0luaXQgICAgIHByaXZhdGVfU0hBMzg0 X0luaXQKLS0jIGRlZmluZSBTSEE1MTJfSW5pdCAgICAgcHJpdmF0ZV9TSEE1MTJfSW5pdAotIAot ICMgZGVmaW5lIEJGX3NldF9rZXkgICAgICBwcml2YXRlX0JGX3NldF9rZXkKLSAjIGRlZmluZSBD QVNUX3NldF9rZXkgICAgcHJpdmF0ZV9DQVNUX3NldF9rZXkKLUBAIC0zNjcsNyArMzYwLDYgQEAg Y29uc3QgRVZQX0NJUEhFUiAqZXZwX2dldF9maXBzX2NpcGhlcihjbwotICMgZGVmaW5lIFNFRURf c2V0X2tleSAgICBwcml2YXRlX1NFRURfc2V0X2tleQotICMgZGVmaW5lIFJDMl9zZXRfa2V5ICAg ICBwcml2YXRlX1JDMl9zZXRfa2V5Ci0gIyBkZWZpbmUgUkM0X3NldF9rZXkgICAgIHByaXZhdGVf UkM0X3NldF9rZXkKLS0jIGRlZmluZSBERVNfc2V0X2tleV91bmNoZWNrZWQgICBwcml2YXRlX0RF U19zZXRfa2V5X3VuY2hlY2tlZAotICMgZGVmaW5lIENhbWVsbGlhX3NldF9rZXkgICAgICAgIHBy aXZhdGVfQ2FtZWxsaWFfc2V0X2tleQotIAotICNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9tX2Rz cy5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAxNi0wMy0w MSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZw L21fZHNzLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTY5MTY1MjMgKzAxMDAKLUBAIC04Niw3ICs4 Niw3IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgZHNhX21kID0gewotICAgICBOSURfZHNhV2l0aFNI QSwKLSAgICAgTklEX2RzYVdpdGhTSEEsCi0gICAgIFNIQV9ESUdFU1RfTEVOR1RILAotLSAgICBF VlBfTURfRkxBR19QS0VZX0RJR0VTVCwKLSsgICAgRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QgfCBF VlBfTURfRkxBR19GSVBTLAotICAgICBpbml0LAotICAgICB1cGRhdGUsCi0gICAgIGZpbmFsLAot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9ldnAvbV9kc3MxLmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZw L21fZHNzMS5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL21fZHNzMS5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE3 OTE2NTQ1ICswMTAwCi1AQCAtODcsNyArODcsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzczFf bWQgPSB7Ci0gICAgIE5JRF9kc2EsCi0gICAgIE5JRF9kc2FXaXRoU0hBMSwKLSAgICAgU0hBX0RJ R0VTVF9MRU5HVEgsCi0tICAgIEVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAotKyAgICBFVlBfTURf RkxBR19QS0VZX0RJR0VTVCB8IEVWUF9NRF9GTEFHX0ZJUFMsCi0gICAgIGluaXQsCi0gICAgIHVw ZGF0ZSwKLSAgICAgZmluYWwsCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL21f bWQyLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL21fbWQyLmMKLS0tLSBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjA1LjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvbV9tZDIuYwkyMDE2LTAz LTAxIDE2OjMzOjA3LjYxNzkxNjU0NSArMDEwMAotQEAgLTY4LDYgKzY4LDcgQEAKLSAjIGlmbmRl ZiBPUEVOU1NMX05PX1JTQQotICMgIGluY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gIyBlbmRpZgot KyMgaW5jbHVkZSAiZXZwX2xvY2wuaCIKLSAKLSBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAq Y3R4KQotIHsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvbV9zaGExLmMuZmlw cyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL21fc2hhMS5jCi0tLS0gb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL2V2cC9tX3NoYTEuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAwMDAwMDAwICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9tX3NoYTEuYwkyMDE2LTAzLTAxIDE2 OjMzOjA3LjYxNzkxNjU0NSArMDEwMAotQEAgLTg3LDcgKzg3LDggQEAgc3RhdGljIGNvbnN0IEVW UF9NRCBzaGExX21kID0gewotICAgICBOSURfc2hhMSwKLSAgICAgTklEX3NoYTFXaXRoUlNBRW5j cnlwdGlvbiwKLSAgICAgU0hBX0RJR0VTVF9MRU5HVEgsCi0tICAgIEVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsgICAgRVZQ X01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJT RU5UIHwKLSsgICAgICAgIEVWUF9NRF9GTEFHX0ZJUFMsCi0gICAgIGluaXQsCi0gICAgIHVwZGF0 ZSwKLSAgICAgZmluYWwsCi1AQCAtMTM0LDcgKzEzNSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQg c2hhMjI0X21kID0gewotICAgICBOSURfc2hhMjI0LAotICAgICBOSURfc2hhMjI0V2l0aFJTQUVu Y3J5cHRpb24sCi0gICAgIFNIQTIyNF9ESUdFU1RfTEVOR1RILAotLSAgICBFVlBfTURfRkxBR19Q S0VZX01FVEhPRF9TSUdOQVRVUkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rICAg IEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lE X0FCU0VOVCB8Ci0rICAgICAgICBFVlBfTURfRkxBR19GSVBTLAotICAgICBpbml0MjI0LAotICAg ICB1cGRhdGUyNTYsCi0gICAgIGZpbmFsMjU2LAotQEAgLTE1NCw3ICsxNTYsOCBAQCBzdGF0aWMg Y29uc3QgRVZQX01EIHNoYTI1Nl9tZCA9IHsKLSAgICAgTklEX3NoYTI1NiwKLSAgICAgTklEX3No YTI1NldpdGhSU0FFbmNyeXB0aW9uLAotICAgICBTSEEyNTZfRElHRVNUX0xFTkdUSCwKLS0gICAg RVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURf QUJTRU5ULAotKyAgICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUgfCBFVlBfTURf RkxBR19ESUdBTEdJRF9BQlNFTlQgfAotKyAgICAgICAgRVZQX01EX0ZMQUdfRklQUywKLSAgICAg aW5pdDI1NiwKLSAgICAgdXBkYXRlMjU2LAotICAgICBmaW5hbDI1NiwKLUBAIC0xOTcsNyArMjAw LDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGEzODRfbWQgPSB7Ci0gICAgIE5JRF9zaGEzODQs Ci0gICAgIE5JRF9zaGEzODRXaXRoUlNBRW5jcnlwdGlvbiwKLSAgICAgU0hBMzg0X0RJR0VTVF9M RU5HVEgsCi0tICAgIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9G TEFHX0RJR0FMR0lEX0FCU0VOVCwKLSsgICAgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFU VVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UIHwKLSsgICAgICAgIEVWUF9NRF9GTEFH X0ZJUFMsCi0gICAgIGluaXQzODQsCi0gICAgIHVwZGF0ZTUxMiwKLSAgICAgZmluYWw1MTIsCi1A QCAtMjE3LDcgKzIyMSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEyX21kID0gewotICAg ICBOSURfc2hhNTEyLAotICAgICBOSURfc2hhNTEyV2l0aFJTQUVuY3J5cHRpb24sCi0gICAgIFNI QTUxMl9ESUdFU1RfTEVOR1RILAotLSAgICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRV UkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCi0rICAgIEVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCB8Ci0rICAgICAg ICBFVlBfTURfRkxBR19GSVBTLAotICAgICBpbml0NTEyLAotICAgICB1cGRhdGU1MTIsCi0gICAg IGZpbmFsNTEyLAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9wX3NpZ24uYy5m aXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9ldnAvcF9zaWduLmMKLS0tLSBvcGVuc3NsLTEuMC4y Zy9jcnlwdG8vZXZwL3Bfc2lnbi5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAwMDAg KzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZXZwL3Bfc2lnbi5jCTIwMTYtMDMtMDEg MTY6MzM6MDcuNjE3OTE2NTQ1ICswMTAwCi1AQCAtNjEsNiArNjEsNyBAQAotICNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgotICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KLSAjaW5jbHVkZSA8 b3BlbnNzbC94NTA5Lmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gCi0gI2lmZGVmIHVu ZGVmCi0gdm9pZCBFVlBfU2lnbkluaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfTUQgKnR5cGUpCi1A QCAtMTAxLDYgKzEwMiwyMiBAQCBpbnQgRVZQX1NpZ25GaW5hbChFVlBfTURfQ1RYICpjdHgsIHVu c2lnCi0gICAgICAgICAgICAgZ290byBlcnI7Ci0gICAgICAgICBpZiAoRVZQX1BLRVlfQ1RYX3Nl dF9zaWduYXR1cmVfbWQocGtjdHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQotICAgICAgICAgICAgIGdv dG8gZXJyOwotKyAgICAgICAgaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5 MzEpCi0rICAgICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgs IFJTQV9YOTMxX1BBRERJTkcpIDw9IDApCi0rICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotKyAg ICAgICAgaWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykgewotKyAgICAg ICAgICAgIGludCBzYWx0bGVuOwotKyAgICAgICAgICAgIGlmIChFVlBfUEtFWV9DVFhfc2V0X3Jz YV9wYWRkaW5nKHBrY3R4LCBSU0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9Ci0rICAgICAgICAgICAg ICAgIDApCi0rICAgICAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgICAgIHNhbHRsZW4g PSBNX0VWUF9NRF9DVFhfRkxBR19QU1NfU0FMVChjdHgpOwotKyAgICAgICAgICAgIGlmIChzYWx0 bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTURMRU4pCi0rICAgICAgICAgICAgICAgIHNhbHRs ZW4gPSAtMTsKLSsgICAgICAgICAgICBlbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxB R19QU1NfTVJFQykKLSsgICAgICAgICAgICAgICAgc2FsdGxlbiA9IC0yOwotKyAgICAgICAgICAg IGlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0g MCkKLSsgICAgICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0gICAgICAgICBpZiAo RVZQX1BLRVlfc2lnbihwa2N0eCwgc2lncmV0LCAmc2x0bXAsIG0sIG1fbGVuKSA8PSAwKQotICAg ICAgICAgICAgIGdvdG8gZXJyOwotICAgICAgICAgKnNpZ2xlbiA9IHNsdG1wOwotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMgb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL2V2cC9wX3ZlcmlmeS5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2V2cC9wX3Zl cmlmeS5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vZXZwL3BfdmVyaWZ5LmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTc5 MTY1NDUgKzAxMDAKLUBAIC02MSw2ICs2MSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ Ci0gI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL3g1MDku aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KLSAKLSBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVW UF9NRF9DVFggKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLAotICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IHNpZ2xlbiwgRVZQX1BLRVkgKnBrZXkpCi1AQCAtODcsNiAr ODgsMjIgQEAgaW50IEVWUF9WZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbgotICAgICAg ICAgICAgIGdvdG8gZXJyOwotICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJl X21kKHBrY3R4LCBjdHgtPmRpZ2VzdCkgPD0gMCkKLSAgICAgICAgICAgICBnb3RvIGVycjsKLSsg ICAgICAgIGlmIChjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQotKyAgICAg ICAgICAgIGlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9Q QURESU5HKSA8PSAwKQotKyAgICAgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIGlmIChj dHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MpIHsKLSsgICAgICAgICAgICBpbnQg c2FsdGxlbjsKLSsgICAgICAgICAgICBpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhw a2N0eCwgUlNBX1BLQ1MxX1BTU19QQURESU5HKSA8PQotKyAgICAgICAgICAgICAgICAwKQotKyAg ICAgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgICAgICBzYWx0bGVuID0gTV9FVlBfTURf Q1RYX0ZMQUdfUFNTX1NBTFQoY3R4KTsKLSsgICAgICAgICAgICBpZiAoc2FsdGxlbiA9PSBFVlBf TURfQ1RYX0ZMQUdfUFNTX01ETEVOKQotKyAgICAgICAgICAgICAgICBzYWx0bGVuID0gLTE7Ci0r ICAgICAgICAgICAgZWxzZSBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMp Ci0rICAgICAgICAgICAgICAgIHNhbHRsZW4gPSAtMjsKLSsgICAgICAgICAgICBpZiAoRVZQX1BL RVlfQ1RYX3NldF9yc2FfcHNzX3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCi0rICAgICAg ICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgfQotICAgICAgICAgaSA9IEVWUF9QS0VZX3Zl cmlmeShwa2N0eCwgc2lnYnVmLCBzaWdsZW4sIG0sIG1fbGVuKTsKLSAgZXJyOgotICAgICAgICAg RVZQX1BLRVlfQ1RYX2ZyZWUocGtjdHgpOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L2ZpcHMvZmlwc19hZXNfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBz L2ZpcHNfYWVzX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBz X2Flc19zZWxmdGVzdC5jLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MTc5MTY1NDUgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCTIwMTYt MDMtMDEgMTY6MzM6MDcuNjE3OTE2NTQ1ICswMTAwCi1AQCAtMCwwICsxLDM2NSBAQAotKy8qID09 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 IERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8 b3BlbnNzbC9lcnIuaD4KLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KLSsjZW5kaWYKLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsKLSsjaWZkZWYg T1BFTlNTTF9GSVBTCi0rc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0rICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIga2V5WzE2XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOwot KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbMTZdOwotK30gdGVzdHNbXSA9IHsK LSsgICAgewotKyAgICAgICAgewotKyAgICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgw NCwgMHgwNSwgMHgwNiwgMHgwNywKLSsgICAgICAgICAgICAgICAgMHgwOCwgMHgwOSwgMHgwQSwg MHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRn0sIHsKLSsgICAgICAgIDB4MDAsIDB4MTEsIDB4 MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsCi0rICAgICAgICAgICAgICAgIDB4ODgs IDB4OTksIDB4QUEsIDB4QkIsIDB4Q0MsIDB4REQsIDB4RUUsIDB4RkZ9LCB7Ci0rMHg2OSwgMHhD NCwgMHhFMCwgMHhEOCwgMHg2QSwgMHg3QiwgMHgwNCwgMHgzMCwKLSsgICAgICAgICAgICAgICAg MHhEOCwgMHhDRCwgMHhCNywgMHg4MCwgMHg3MCwgMHhCNCwgMHhDNSwgMHg1QX0sfSx9OwotKwot K3N0YXRpYyBpbnQgY29ycnVwdF9hZXM7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKCkKLSt7 Ci0rICAgIGNvcnJ1cHRfYWVzID0gMTsKLSt9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfYWVzKCkK LSt7Ci0rICAgIGludCBuOwotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgRVZQX0NJUEhFUl9DVFgg Y3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKwotKyAgICBmb3IgKG4gPSAw OyBuIDwgMTsgKytuKSB7Ci0rICAgICAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl07Ci0rCi0rICAg ICAgICBtZW1jcHkoa2V5LCB0ZXN0c1tuXS5rZXksIHNpemVvZihrZXkpKTsKLSsgICAgICAgIGlm IChjb3JydXB0X2FlcykKLSsgICAgICAgICAgICBrZXlbMF0rKzsKLSsgICAgICAgIGlmIChmaXBz X2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMTI4X2VjYigpLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAga2V5LCBOVUxMLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVz dHNbbl0ucGxhaW50ZXh0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNbbl0u Y2lwaGVydGV4dCwgMTYpIDw9IDApCi0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsg ICAgcmV0ID0gMTsKLSsgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOwot KyAgICBpZiAocmV0ID09IDApCi0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNU X0FFUywgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwot Ky8qIEFFUy1DQ00gdGVzdCBkYXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCi0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2tleVtdID0gewotKyAgICAweGNlLCAw eGIwLCAweDA5LCAweGFlLCAweGE0LCAweDQ1LCAweDQ0LCAweDUxLCAweGZlLCAweGFkLCAweGYw LCAweGU2LAotKyAgICAweGIzLCAweDZmLCAweDQ1LCAweDU1LCAweDVkLCAweGQwLCAweDQ3LCAw eDIzLCAweGJhLCAweGE0LCAweDQ4LCAweGU4Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBjY21fbm9uY2VbXSA9IHsKLSsgICAgMHg3NiwgMHg0MCwgMHg0MywgMHhjNCwgMHg5 NCwgMHg2MCwgMHhiNwotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2Fk YXRhW10gPSB7Ci0rICAgIDB4NmUsIDB4ODAsIDB4ZGQsIDB4N2YsIDB4MWIsIDB4YWQsIDB4ZjMs IDB4YTEsIDB4YzksIDB4YWIsIDB4MjUsIDB4YzcsCi0rICAgIDB4NWYsIDB4MTAsIDB4YmQsIDB4 ZTcsIDB4OGMsIDB4MjMsIDB4ZmEsIDB4MGUsIDB4YjgsIDB4ZjksIDB4YWEsIDB4YTUsCi0rICAg IDB4M2EsIDB4ZGUsIDB4ZmIsIDB4ZjQsIDB4Y2IsIDB4ZjcsIDB4OGYsIDB4ZTQKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNjbV9wdFtdID0gewotKyAgICAweGM4LCAweGQy LCAweDc1LCAweGY5LCAweDE5LCAweGUxLCAweDdkLCAweDdmLCAweGU2LCAweDljLCAweDJhLCAw eDFmLAotKyAgICAweDU4LCAweDkzLCAweDlkLCAweGZlLCAweDRkLCAweDQwLCAweDM3LCAweDkx LCAweGI1LCAweGRmLCAweDEzLCAweDEwCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBjY21fY3RbXSA9IHsKLSsgICAgMHg4YSwgMHgwZiwgMHgzZCwgMHg4MiwgMHgyOSwgMHhl NCwgMHg4ZSwgMHg3NCwgMHg4NywgMHhmZCwgMHg5NSwgMHhhMiwKLSsgICAgMHg4YSwgMHhkMywg MHg5MiwgMHhjOCwgMHgwYiwgMHgzNiwgMHg4MSwgMHhkNCwgMHhmYiwgMHhjNywgMHhiYiwgMHhm ZAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3RhZ1tdID0gewotKyAg ICAweDJkLCAweGQ2LCAweGVmLCAweDFjLCAweDQ1LCAweGQ0LCAweGNjLCAweGI3LCAweDIzLCAw eGRjLCAweDA3LCAweDQ0LAotKyAgICAweDE0LCAweGRiLCAweDUwLCAweDZkCi0rfTsKLSsKLStp bnQgRklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpCi0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsg ICAgdW5zaWduZWQgY2hhciBvdXRbMTI4XSwgdGFnWzE2XTsKLSsgICAgRVZQX0NJUEhFUl9DVFgg Y3R4OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKyAgICBtZW1zZXQob3V0LCAw LCBzaXplb2Yob3V0KSk7Ci0rICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Fl c18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDEpKQotKyAgICAgICAgZ290byBlcnI7Ci0r ICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVO LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwp KQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4 LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZihjY21fdGFnKSwgTlVMTCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBf Q2lwaGVySW5pdF9leCgmY3R4LCBOVUxMLCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDEpKQot KyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEws IHNpemVvZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX3B0KSkKLSsgICAgICAgIGdvdG8gZXJyOwot KyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRh dGEpKSA8IDApCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwg b3V0LCBjY21fcHQsIHNpemVvZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX2N0KSkKLSsgICAgICAg IGdvdG8gZXJyOwotKwotKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NU UkxfQ0NNX0dFVF9UQUcsIDE2LCB0YWcpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICht ZW1jbXAodGFnLCBjY21fdGFnLCBzaXplb2YoY2NtX3RhZykpCi0rICAgICAgICB8fCBtZW1jbXAo b3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAg ICBtZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7Ci0rCi0rICAgIGlmICghRVZQX0NpcGhlcklu aXRfZXgoJmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDApKQotKyAg ICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBf Q1RSTF9DQ01fU0VUX0lWTEVOLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m KGNjbV9ub25jZSksIE5VTEwpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghRVZQX0NJ UEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgMTYsIHRhZykpCi0rICAg ICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBOVUxMLCBO VUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDApKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlm IChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2Yo Y2NtX2N0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBO VUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCi0rICAgICAgICBnb3RvIGVy cjsKLSsgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fY3QsIHNpemVvZihjY21fY3Qp KSAhPSBzaXplb2YoY2NtX3B0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAobWVt Y21wKG91dCwgY2NtX3B0LCBzaXplb2YoY2NtX3B0KSkpCi0rICAgICAgICBnb3RvIGVycjsKLSsK LSsgICAgcmV0ID0gMTsKLSsKLSsgZXJyOgotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZj dHgpOwotKwotKyAgICBpZiAocmV0ID09IDApIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfU0VMRlRFU1RfQUVTX0NDTSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgfSBlbHNlCi0rICAgICAgICByZXR1cm4gcmV0OwotKwotK30KLSsKLSsv KiBBRVMtR0NNIHRlc3QgZGF0YSBmcm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9rZXlbXSA9IHsKLSsgICAgMHhlZSwgMHhi YywgMHgxZiwgMHg1NywgMHg0OCwgMHg3ZiwgMHg1MSwgMHg5MiwgMHgxYywgMHgwNCwgMHg2NSwg MHg2NiwKLSsgICAgMHg1ZiwgMHg4YSwgMHhlNiwgMHhkMSwgMHg2NSwgMHg4YiwgMHhiMiwgMHg2 ZCwgMHhlNiwgMHhmOCwgMHhhMCwgMHg2OSwKLSsgICAgMHhhMywgMHg1MiwgMHgwMiwgMHg5Mywg MHhhNSwgMHg3MiwgMHgwNywgMHg4ZgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZ2NtX2l2W10gPSB7Ci0rICAgIDB4OTksIDB4YWEsIDB4M2UsIDB4NjgsIDB4ZWQsIDB4ODEs IDB4NzMsIDB4YTAsIDB4ZWUsIDB4ZDAsIDB4NjYsIDB4ODQKLSt9OwotKwotK3N0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGdjbV9wdFtdID0gewotKyAgICAweGY1LCAweDZlLCAweDg3LCAweDA1 LCAweDViLCAweGMzLCAweDJkLCAweDBlLCAweGViLCAweDMxLCAweGIyLCAweGVhLAotKyAgICAw eGNjLCAweDJiLCAweGYyLCAweGE1Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBnY21fYWFkW10gPSB7Ci0rICAgIDB4NGQsIDB4MjMsIDB4YzMsIDB4Y2UsIDB4YzMsIDB4MzQs IDB4YjQsIDB4OWIsIDB4ZGIsIDB4MzcsIDB4MGMsIDB4NDMsCi0rICAgIDB4N2YsIDB4ZWMsIDB4 NzgsIDB4ZGUKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9jdFtdID0g ewotKyAgICAweGY3LCAweDI2LCAweDQ0LCAweDEzLCAweGE4LCAweDRjLCAweDBlLCAweDdjLCAw eGQ1LCAweDM2LCAweDg2LCAweDdlLAotKyAgICAweGI5LCAweGYyLCAweDE3LCAweDM2Ci0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fdGFnW10gPSB7Ci0rICAgIDB4Njcs IDB4YmEsIDB4MDUsIDB4MTAsIDB4MjYsIDB4MmEsIDB4ZTQsIDB4ODcsIDB4ZDcsIDB4MzcsIDB4 ZWUsIDB4NjIsCi0rICAgIDB4OTgsIDB4ZjcsIDB4N2UsIDB4MGMKLSt9OwotKwotK2ludCBGSVBT X3NlbGZ0ZXN0X2Flc19nY20odm9pZCkKLSt7Ci0rICAgIGludCByZXQgPSAwOwotKyAgICB1bnNp Z25lZCBjaGFyIG91dFsxMjhdLCB0YWdbMTZdOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0r ICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7Ci0rICAgIG1lbXNldChvdXQsIDAsIHNpemVv ZihvdXQpKTsKLSsgICAgbWVtc2V0KHRhZywgMCwgc2l6ZW9mKHRhZykpOwotKyAgICBpZiAoIUVW UF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCBOVUxM LCAxKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwo JmN0eCwgRVZQX0NUUkxfR0NNX1NFVF9JVkxFTiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihnY21faXYpLCBOVUxMKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAo IUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIE5VTEwsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMSkp Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2Nt X2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYg KEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fcHQsIHNpemVvZihnY21fcHQpKSAhPSBzaXplb2Yo Z2NtX2N0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBO VUxMLCBOVUxMLCAwKSA8IDApCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKCFFVlBf Q0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLCAxNiwgdGFnKSkKLSsg ICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAobWVtY21wKHRhZywgZ2NtX3RhZywgMTYpIHx8 IG1lbWNtcChvdXQsIGdjbV9jdCwgMTYpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIG1l bXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKLSsKLSsgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9l eCgmY3R4LCBFVlBfYWVzXzI1Nl9nY20oKSwgTlVMTCwgTlVMTCwgTlVMTCwgMCkpCi0rICAgICAg ICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJM X0dDTV9TRVRfSVZMRU4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZ2Nt X2l2KSwgTlVMTCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFFVlBfQ0lQSEVSX0NU WF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfVEFHLCAxNiwgdGFnKSkKLSsgICAgICAgIGdv dG8gZXJyOwotKyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIE5VTEwsIE5VTEwsIGdj bV9rZXksIGdjbV9pdiwgMCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKEVWUF9DaXBo ZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCi0rICAgICAgICBn b3RvIGVycjsKLSsgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fY3QsIHNpemVvZihn Y21fY3QpKSAhPSBzaXplb2YoZ2NtX3B0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAo RVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDApCi0rICAgICAgICBnb3RvIGVycjsK LSsKLSsgICAgaWYgKG1lbWNtcChvdXQsIGdjbV9wdCwgMTYpKQotKyAgICAgICAgZ290byBlcnI7 Ci0rCi0rICAgIHJldCA9IDE7Ci0rCi0rIGVycjoKLSsgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51 cCgmY3R4KTsKLSsKLSsgICAgaWYgKHJldCA9PSAwKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX1NFTEZURVNUX0FFU19HQ00sIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAg ICAgcmV0dXJuIDA7Ci0rICAgIH0gZWxzZQotKyAgICAgICAgcmV0dXJuIHJldDsKLSsKLSt9Ci0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9rZXlbXSA9IHsKLSsgICAgMHhh MSwgMHhiOSwgMHgwYywgMHhiYSwgMHgzZiwgMHgwNiwgMHhhYywgMHgzNSwgMHgzYiwgMHgyYywg MHgzNCwgMHgzOCwKLSsgICAgMHg3NiwgMHgwOCwgMHgxNywgMHg2MiwgMHgwOSwgMHgwOSwgMHgy MywgMHgwMiwgMHg2ZSwgMHg5MSwgMHg3NywgMHgxOCwKLSsgICAgMHgxNSwgMHhmMiwgMHg5ZCwg MHhhYiwgMHgwMSwgMHg5MywgMHgyZiwgMHgyZgotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgWFRTXzEyOF9pW10gPSB7Ci0rICAgIDB4NGYsIDB4YWUsIDB4ZjcsIDB4MTEsIDB4 N2MsIDB4ZGEsIDB4NTksIDB4YzYsIDB4NmUsIDB4NGIsIDB4OTIsIDB4MDEsCi0rICAgIDB4M2Us IDB4NzYsIDB4OGEsIDB4ZDUKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhU U18xMjhfcHRbXSA9IHsKLSsgICAgMHhlYiwgMHhhYiwgMHhjZSwgMHg5NSwgMHhiMSwgMHg0ZCwg MHgzYywgMHg4ZCwgMHg2ZiwgMHhiMywgMHg1MCwgMHgzOSwKLSsgICAgMHgwNywgMHg5MCwgMHgz MSwgMHgxYwotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9jdFtd ID0gewotKyAgICAweDc3LCAweDhhLCAweGU4LCAweGI0LCAweDNjLCAweGI5LCAweDhkLCAweDVh LCAweDgyLCAweDUwLCAweDgxLCAweGQ1LAotKyAgICAweGJlLCAweDQ3LCAweDFjLCAweDYzCi0r fTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2tleVtdID0gewotKyAg ICAweDFlLCAweGE2LCAweDYxLCAweGM1LCAweDhkLCAweDk0LCAweDNhLCAweDBlLCAweDQ4LCAw eDAxLCAweGU0LCAweDJmLAotKyAgICAweDRiLCAweDA5LCAweDQ3LCAweDE0LCAweDllLCAweDdm LCAweDlmLCAweDhlLCAweDNlLCAweDY4LCAweGQwLCAweGM3LAotKyAgICAweDUwLCAweDUyLCAw eDEwLCAweGJkLCAweDMxLCAweDFhLCAweDBlLCAweDdjLCAweGQ2LCAweGUxLCAweDNmLCAweGZk LAotKyAgICAweGYyLCAweDQxLCAweDhkLCAweDhkLCAweDE5LCAweDExLCAweGMwLCAweDA0LCAw eGNkLCAweGE1LCAweDhkLCAweGEzLAotKyAgICAweGQ2LCAweDE5LCAweGI3LCAweGUyLCAweGI5 LCAweDE0LCAweDFlLCAweDU4LCAweDMxLCAweDhlLCAweGVhLCAweDM5LAotKyAgICAweDJjLCAw eGY0LCAweDFiLCAweDA4Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNf MjU2X2lbXSA9IHsKLSsgICAgMHhhZCwgMHhmOCwgMHhkOSwgMHgyNiwgMHgyNywgMHg0NiwgMHg0 YSwgMHhkMiwgMHhmMCwgMHg0MiwgMHg4ZSwgMHg4NCwKLSsgICAgMHhhOSwgMHhmOCwgMHg3NSwg MHg2NAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9wdFtdID0g ewotKyAgICAweDJlLCAweGVkLCAweGVhLCAweDUyLCAweGNkLCAweDgyLCAweDE1LCAweGUxLCAw eGFjLCAweGM2LCAweDQ3LCAweGU4LAotKyAgICAweDEwLCAweGJiLCAweGMzLCAweDY0LCAweDJl LCAweDg3LCAweDI4LCAweDdmLCAweDhkLCAweDJlLCAweDU3LCAweGUzLAotKyAgICAweDZjLCAw eDBhLCAweDI0LCAweGZiLCAweGMxLCAweDJhLCAweDIwLCAweDJlCi0rfTsKLSsKLStzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2N0W10gPSB7Ci0rICAgIDB4Y2IsIDB4YWEsIDB4 ZDAsIDB4ZTIsIDB4ZjYsIDB4Y2UsIDB4YTMsIDB4ZjUsIDB4MGIsIDB4MzcsIDB4ZjksIDB4MzQs Ci0rICAgIDB4ZDQsIDB4NmEsIDB4OWIsIDB4MTMsIDB4MGIsIDB4OWQsIDB4NTQsIDB4ZjAsIDB4 N2UsIDB4MzQsIDB4ZjMsIDB4NmEsCi0rICAgIDB4ZjcsIDB4OTMsIDB4ZTgsIDB4NmYsIDB4NzMs IDB4YzYsIDB4ZDcsIDB4ZGIKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc194dHMoKQot K3sKLSsgICAgaW50IHJldCA9IDE7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKLSsgICAgRVZQ X0NJUEhFUl9DVFhfaW5pdCgmY3R4KTsKLSsKLSsgICAgaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0 eCwgRVZQX2Flc18xMjhfeHRzKCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgIFhUU18xMjhf a2V5LCBYVFNfMTI4X2ksIFhUU18xMjhfcHQsIFhUU18xMjhfY3QsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVvZihYVFNfMTI4X3B0KSkgPD0gMCkKLSsgICAgICAgIHJldCA9IDA7Ci0r Ci0rICAgIGlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMjU2X3h0cygpLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICBYVFNfMjU2X2tleSwgWFRTXzI1Nl9pLCBYVFNfMjU2X3B0 LCBYVFNfMjU2X2N0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWFRTXzI1Nl9w dCkpIDw9IDApCi0rICAgICAgICByZXQgPSAwOwotKwotKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVh bnVwKCZjdHgpOwotKyAgICBpZiAocmV0ID09IDApCi0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX1NFTEZURVNUX0FFU19YVFMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKyAgICByZXR1 cm4gcmV0OwotK30KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9m aXBzL2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHMuYwotLS0tIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcu NjE4OTE2NTY4ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwcy5jCTIw MTYtMDMtMDEgMTY6MzM6MDcuNjE4OTE2NTY4ICswMTAwCi1AQCAtMCwwICsxLDQ4MyBAQAotKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlv bi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBv cGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3Ig bWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVu Ci0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4g UmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZv bGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5j bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBm b3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIK LSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVD VCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQ VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJP SkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ TkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwg REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIg Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD VCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP UiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT VUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNkZWZpbmUgX0dOVV9TT1VSQ0UKLSsKLSsjaW5j bHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNs dWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8bGltaXRzLmg+Ci0rI2luY2x1ZGUgPGRsZmNuLmg+ Ci0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlICJm aXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rIyBpbmNsdWRlIDxvcGVu c3NsL2ZpcHMuaD4KLSsKLSsjIGlmbmRlZiBQQVRIX01BWAotKyMgIGRlZmluZSBQQVRIX01BWCAx MDI0Ci0rIyBlbmRpZgotKwotK3N0YXRpYyBpbnQgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLStz dGF0aWMgaW50IGZpcHNfbW9kZSA9IDA7Ci0rc3RhdGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOwot KwotK3N0YXRpYyBpbnQgZmlwc19pc19vd25pbmdfdGhyZWFkKHZvaWQpOwotK3N0YXRpYyBpbnQg Zmlwc19zZXRfb3duaW5nX3RocmVhZCh2b2lkKTsKLStzdGF0aWMgaW50IGZpcHNfY2xlYXJfb3du aW5nX3RocmVhZCh2b2lkKTsKLSsKLSsjIGRlZmluZSBmaXBzX3dfbG9jaygpICAgQ1JZUFRPX3df bG9jayhDUllQVE9fTE9DS19GSVBTKQotKyMgZGVmaW5lIGZpcHNfd191bmxvY2soKSBDUllQVE9f d191bmxvY2soQ1JZUFRPX0xPQ0tfRklQUykKLSsjIGRlZmluZSBmaXBzX3JfbG9jaygpICAgQ1JZ UFRPX3JfbG9jayhDUllQVE9fTE9DS19GSVBTKQotKyMgZGVmaW5lIGZpcHNfcl91bmxvY2soKSBD UllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUykKLSsKLStzdGF0aWMgdm9pZCBmaXBzX3Nl dF9tb2RlKGludCBvbm9mZikKLSt7Ci0rICAgIGludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19v d25pbmdfdGhyZWFkKCk7Ci0rCi0rICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKLSsgICAgICAgIGlm ICghb3duaW5nX3RocmVhZCkKLSsgICAgICAgICAgICBmaXBzX3dfbG9jaygpOwotKyAgICAgICAg Zmlwc19tb2RlID0gb25vZmY7Ci0rICAgICAgICBpZiAoIW93bmluZ190aHJlYWQpCi0rICAgICAg ICAgICAgZmlwc193X3VubG9jaygpOwotKyAgICB9Ci0rfQotKwotK2ludCBGSVBTX21vZHVsZV9t b2RlKHZvaWQpCi0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgaW50IG93bmluZ190aHJlYWQg PSBmaXBzX2lzX293bmluZ190aHJlYWQoKTsKLSsKLSsgICAgaWYgKGZpcHNfc3RhcnRlZCkgewot KyAgICAgICAgaWYgKCFvd25pbmdfdGhyZWFkKQotKyAgICAgICAgICAgIGZpcHNfcl9sb2NrKCk7 Ci0rICAgICAgICByZXQgPSBmaXBzX21vZGU7Ci0rICAgICAgICBpZiAoIW93bmluZ190aHJlYWQp Ci0rICAgICAgICAgICAgZmlwc19yX3VubG9jaygpOwotKyAgICB9Ci0rICAgIHJldHVybiByZXQ7 Ci0rfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKQotK3sKLSsgICAgaW50IHJl dCA9IDA7Ci0rICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKLSsgICAgICAgIGludCBvd25pbmdfdGhy ZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Ci0rCi0rICAgICAgICBpZiAoIW93bmluZ190 aHJlYWQpCi0rICAgICAgICAgICAgZmlwc19yX2xvY2soKTsKLSsgICAgICAgIHJldCA9IGZpcHNf c2VsZnRlc3RfZmFpbDsKLSsgICAgICAgIGlmICghb3duaW5nX3RocmVhZCkKLSsgICAgICAgICAg ICBmaXBzX3JfdW5sb2NrKCk7Ci0rICAgIH0KLSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rCi0rLyog U2VsZnRlc3QgZmFpbHVyZSBmYXRhbCBleGl0IHJvdXRpbmUuIFRoaXMgd2lsbCBiZSBjYWxsZWQK LSsgKiBkdXJpbmcgKmFueSogY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24uIEl0IGhhcyB0aGUgbWlu aW11bQotKyAqIG92ZXJoZWFkIHBvc3NpYmxlIHRvIGF2b2lkIHRvbyBiaWcgYSBwZXJmb3JtYW5j ZSBoaXQuCi0rICovCi0rCi0rdm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpCi0rewotKyAg ICBpZiAoZmlwc19zZWxmdGVzdF9mYWlsKSB7Ci0rICAgICAgICBPcGVuU1NMRGllKF9fRklMRV9f LCBfX0xJTkVfXywgIkZBVEFMIEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIpOwotKyAgICB9Ci0rfQot KwotK3ZvaWQgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKQotK3sKLSsgICAgZmlwc19zZWxm dGVzdF9mYWlsID0gMTsKLSt9Ci0rCi0rLyogd2UgaW1wbGVtZW50IHdoYXQgbGliZmlwc2NoZWNr IGRvZXMgb3Vyc2VsdmVzICovCi0rCi0rc3RhdGljIGludAotK2dldF9saWJyYXJ5X3BhdGgoY29u c3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSwgY2hhciAqcGF0aCwKLSsg ICAgICAgICAgICAgICAgIHNpemVfdCBwYXRobGVuKQotK3sKLSsgICAgRGxfaW5mbyBpbmZvOwot KyAgICB2b2lkICpkbCwgKnN5bTsKLSsgICAgaW50IHJ2ID0gLTE7Ci0rCi0rICAgIGRsID0gZGxv cGVuKGxpYm5hbWUsIFJUTERfTEFaWSk7Ci0rICAgIGlmIChkbCA9PSBOVUxMKSB7Ci0rICAgICAg ICByZXR1cm4gLTE7Ci0rICAgIH0KLSsKLSsgICAgc3ltID0gZGxzeW0oZGwsIHN5bWJvbG5hbWUp OwotKwotKyAgICBpZiAoc3ltICE9IE5VTEwgJiYgZGxhZGRyKHN5bSwgJmluZm8pKSB7Ci0rICAg ICAgICBzdHJuY3B5KHBhdGgsIGluZm8uZGxpX2ZuYW1lLCBwYXRobGVuIC0gMSk7Ci0rICAgICAg ICBwYXRoW3BhdGhsZW4gLSAxXSA9ICdcMCc7Ci0rICAgICAgICBydiA9IDA7Ci0rICAgIH0KLSsK LSsgICAgZGxjbG9zZShkbCk7Ci0rCi0rICAgIHJldHVybiBydjsKLSt9Ci0rCi0rc3RhdGljIGNv bnN0IGNoYXIgY29udltdID0gIjAxMjM0NTY3ODlhYmNkZWYiOwotKwotK3N0YXRpYyBjaGFyICpi aW4yaGV4KHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKLSt7Ci0rICAgIGNoYXIgKmhleCwgKnA7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgKnNyYyA9IGJ1ZjsKLSsKLSsgICAgaGV4ID0gbWFsbG9jKGxlbiAq IDIgKyAxKTsKLSsgICAgaWYgKGhleCA9PSBOVUxMKQotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0r Ci0rICAgIHAgPSBoZXg7Ci0rCi0rICAgIHdoaWxlIChsZW4gPiAwKSB7Ci0rICAgICAgICB1bnNp Z25lZCBjOwotKwotKyAgICAgICAgYyA9ICpzcmM7Ci0rICAgICAgICBzcmMrKzsKLSsKLSsgICAg ICAgICpwID0gY29udltjID4+IDRdOwotKyAgICAgICAgKytwOwotKyAgICAgICAgKnAgPSBjb252 W2MgJiAweDBmXTsKLSsgICAgICAgICsrcDsKLSsgICAgICAgIC0tbGVuOwotKyAgICB9Ci0rICAg ICpwID0gJ1wwJzsKLSsgICAgcmV0dXJuIGhleDsKLSt9Ci0rCi0rIyBkZWZpbmUgSE1BQ19QUkVG SVggIi4iCi0rIyBkZWZpbmUgSE1BQ19TVUZGSVggIi5obWFjIgotKyMgZGVmaW5lIFJFQURfQlVG RkVSX0xFTkdUSCAxNjM4NAotKwotK3N0YXRpYyBjaGFyICptYWtlX2htYWNfcGF0aChjb25zdCBj aGFyICpvcmlncGF0aCkKLSt7Ci0rICAgIGNoYXIgKnBhdGgsICpwOwotKyAgICBjb25zdCBjaGFy ICpmbjsKLSsKLSsgICAgcGF0aCA9Ci0rICAgICAgICBtYWxsb2Moc2l6ZW9mKEhNQUNfUFJFRklY KSArIHNpemVvZihITUFDX1NVRkZJWCkgKyBzdHJsZW4ob3JpZ3BhdGgpKTsKLSsgICAgaWYgKHBh dGggPT0gTlVMTCkgewotKyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsKLSsgICAgZm4g PSBzdHJyY2hyKG9yaWdwYXRoLCAnLycpOwotKyAgICBpZiAoZm4gPT0gTlVMTCkgewotKyAgICAg ICAgZm4gPSBvcmlncGF0aDsKLSsgICAgfSBlbHNlIHsKLSsgICAgICAgICsrZm47Ci0rICAgIH0K LSsKLSsgICAgc3RybmNweShwYXRoLCBvcmlncGF0aCwgZm4gLSBvcmlncGF0aCk7Ci0rICAgIHAg PSBwYXRoICsgKGZuIC0gb3JpZ3BhdGgpOwotKyAgICBwID0gc3RwY3B5KHAsIEhNQUNfUFJFRklY KTsKLSsgICAgcCA9IHN0cGNweShwLCBmbik7Ci0rICAgIHAgPSBzdHBjcHkocCwgSE1BQ19TVUZG SVgpOwotKwotKyAgICByZXR1cm4gcGF0aDsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IGNoYXIgaG1h Y2tleVtdID0gIm9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKLSsKLStzdGF0aWMg aW50IGNvbXB1dGVfZmlsZV9obWFjKGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKipidWYsIHNpemVf dCAqaG1hY2xlbikKLSt7Ci0rICAgIEZJTEUgKmYgPSBOVUxMOwotKyAgICBpbnQgcnYgPSAtMTsK LSsgICAgdW5zaWduZWQgY2hhciByYnVmW1JFQURfQlVGRkVSX0xFTkdUSF07Ci0rICAgIHNpemVf dCBsZW47Ci0rICAgIHVuc2lnbmVkIGludCBobGVuOwotKyAgICBITUFDX0NUWCBjOwotKwotKyAg ICBITUFDX0NUWF9pbml0KCZjKTsKLSsKLSsgICAgZiA9IGZvcGVuKHBhdGgsICJyIik7Ci0rCi0r ICAgIGlmIChmID09IE5VTEwpIHsKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICB9Ci0rCi0rICAg IEhNQUNfSW5pdCgmYywgaG1hY2tleSwgc2l6ZW9mKGhtYWNrZXkpIC0gMSwgRVZQX3NoYTI1Nigp KTsKLSsKLSsgICAgd2hpbGUgKChsZW4gPSBmcmVhZChyYnVmLCAxLCBzaXplb2YocmJ1ZiksIGYp KSAhPSAwKSB7Ci0rICAgICAgICBITUFDX1VwZGF0ZSgmYywgcmJ1ZiwgbGVuKTsKLSsgICAgfQot KwotKyAgICBsZW4gPSBzaXplb2YocmJ1Zik7Ci0rICAgIC8qIHJldXNlIHJidWYgZm9yIGhtYWMg Ki8KLSsgICAgSE1BQ19GaW5hbCgmYywgcmJ1ZiwgJmhsZW4pOwotKwotKyAgICAqYnVmID0gbWFs bG9jKGhsZW4pOwotKyAgICBpZiAoKmJ1ZiA9PSBOVUxMKSB7Ci0rICAgICAgICBnb3RvIGVuZDsK LSsgICAgfQotKwotKyAgICAqaG1hY2xlbiA9IGhsZW47Ci0rCi0rICAgIG1lbWNweSgqYnVmLCBy YnVmLCBobGVuKTsKLSsKLSsgICAgcnYgPSAwOwotKyBlbmQ6Ci0rICAgIEhNQUNfQ1RYX2NsZWFu dXAoJmMpOwotKwotKyAgICBpZiAoZikKLSsgICAgICAgIGZjbG9zZShmKTsKLSsKLSsgICAgcmV0 dXJuIHJ2OwotK30KLSsKLStzdGF0aWMgaW50IEZJUFNDSEVDS192ZXJpZnkoY29uc3QgY2hhciAq bGlibmFtZSwgY29uc3QgY2hhciAqc3ltYm9sbmFtZSkKLSt7Ci0rICAgIGNoYXIgcGF0aFtQQVRI X01BWCArIDFdOwotKyAgICBpbnQgcnY7Ci0rICAgIEZJTEUgKmhmOwotKyAgICBjaGFyICpobWFj cGF0aCwgKnA7Ci0rICAgIGNoYXIgKmhtYWMgPSBOVUxMOwotKyAgICBzaXplX3QgbjsKLSsKLSsg ICAgcnYgPSBnZXRfbGlicmFyeV9wYXRoKGxpYm5hbWUsIHN5bWJvbG5hbWUsIHBhdGgsIHNpemVv ZihwYXRoKSk7Ci0rCi0rICAgIGlmIChydiA8IDApCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsg ICAgaG1hY3BhdGggPSBtYWtlX2htYWNfcGF0aChwYXRoKTsKLSsgICAgaWYgKGhtYWNwYXRoID09 IE5VTEwpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgaGYgPSBmb3BlbihobWFjcGF0aCwg InIiKTsKLSsgICAgaWYgKGhmID09IE5VTEwpIHsKLSsgICAgICAgIGZyZWUoaG1hY3BhdGgpOwot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgaWYgKGdldGxpbmUoJmhtYWMsICZu LCBoZikgPiAwKSB7Ci0rICAgICAgICB2b2lkICpidWY7Ci0rICAgICAgICBzaXplX3QgaG1hY2xl bjsKLSsgICAgICAgIGNoYXIgKmhleDsKLSsKLSsgICAgICAgIGlmICgocCA9IHN0cmNocihobWFj LCAnXG4nKSkgIT0gTlVMTCkKLSsgICAgICAgICAgICAqcCA9ICdcMCc7Ci0rCi0rICAgICAgICBp ZiAoY29tcHV0ZV9maWxlX2htYWMocGF0aCwgJmJ1ZiwgJmhtYWNsZW4pIDwgMCkgewotKyAgICAg ICAgICAgIHJ2ID0gLTQ7Ci0rICAgICAgICAgICAgZ290byBlbmQ7Ci0rICAgICAgICB9Ci0rCi0r ICAgICAgICBpZiAoKGhleCA9IGJpbjJoZXgoYnVmLCBobWFjbGVuKSkgPT0gTlVMTCkgewotKyAg ICAgICAgICAgIGZyZWUoYnVmKTsKLSsgICAgICAgICAgICBydiA9IC01OwotKyAgICAgICAgICAg IGdvdG8gZW5kOwotKyAgICAgICAgfQotKwotKyAgICAgICAgaWYgKHN0cmNtcChoZXgsIGhtYWMp ICE9IDApIHsKLSsgICAgICAgICAgICBydiA9IC0xOwotKyAgICAgICAgfQotKyAgICAgICAgZnJl ZShidWYpOwotKyAgICAgICAgZnJlZShoZXgpOwotKyAgICB9IGVsc2UgewotKyAgICAgICAgcnYg PSAtMTsKLSsgICAgfQotKwotKyBlbmQ6Ci0rICAgIGZyZWUoaG1hYyk7Ci0rICAgIGZyZWUoaG1h Y3BhdGgpOwotKyAgICBmY2xvc2UoaGYpOwotKwotKyAgICBpZiAocnYgPCAwKQotKyAgICAgICAg cmV0dXJuIDA7Ci0rCi0rICAgIC8qIGNoZWNrIHN1Y2Nlc3NmdWwgKi8KLSsgICAgcmV0dXJuIDE7 Ci0rfQotKwotK2ludCBGSVBTX21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNvbnN0IGNoYXIg KmF1dGgpCi0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsKLSsgICAgZmlwc193X2xvY2soKTsKLSsg ICAgZmlwc19zdGFydGVkID0gMTsKLSsgICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOwotKwot KyAgICBpZiAob25vZmYpIHsKLSsKLSsgICAgICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7Ci0r Ci0rICAgICAgICAvKiBEb24ndCBnbyBpbnRvIEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBj YW4gZG8gYXV0b21hZ2ljCi0rICAgICAgICAgICBzZWVkaW5nICovCi0rICAgICAgICBpZiAoRklQ U19tb2R1bGVfbW9kZSgpKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RV TEVfTU9ERV9TRVQsCi0rICAgICAgICAgICAgICAgICAgICBGSVBTX1JfRklQU19NT0RFX0FMUkVB RFlfU0VUKTsKLSsgICAgICAgICAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKyAgICAgICAg ICAgIHJldCA9IDA7Ci0rICAgICAgICAgICAgZ290byBlbmQ7Ci0rICAgICAgICB9Ci0rIyBpZmRl ZiBPUEVOU1NMX0lBMzJfU1NFMgotKyAgICAgICAgewotKyAgICAgICAgICAgIGV4dGVybiB1bnNp Z25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbMl07Ci0rICAgICAgICAgICAgaWYgKChPUEVOU1NM X2lhMzJjYXBfUFswXSAmICgxIDw8IDI1IHwgMSA8PCAyNikpICE9Ci0rICAgICAgICAgICAgICAg ICgxIDw8IDI1IHwgMSA8PCAyNikpIHsKLSsgICAgICAgICAgICAgICAgRklQU2VycihGSVBTX0Zf RklQU19NT0RVTEVfTU9ERV9TRVQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgRklQU19SX1VO U1VQUE9SVEVEX1BMQVRGT1JNKTsKLSsgICAgICAgICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWls ID0gMTsKLSsgICAgICAgICAgICAgICAgcmV0ID0gMDsKLSsgICAgICAgICAgICAgICAgZ290byBl bmQ7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAgIE9QRU5TU0xfaWEzMmNhcF9QWzBdIHw9 ICgxIDw8IDI4KTsgLyogc2V0ICJzaGFyZWQgY2FjaGUiICAgKi8KLSsgICAgICAgICAgICBPUEVO U1NMX2lhMzJjYXBfUFsxXSAmPSB+KDEgPDwgKDYwIC0gMzIpKTsgLyogY2xlYXIgQVZYICAgICAg ICAgICAgKi8KLSsgICAgICAgIH0KLSsjIGVuZGlmCi0rCi0rICAgICAgICBpZiAoIUZJUFNDSEVD S192ZXJpZnkKLSsgICAgICAgICAgICAoImxpYmNyeXB0by5zby4iIFNITElCX1ZFUlNJT05fTlVN QkVSLCAiRklQU19tb2RlX3NldCIpKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQ U19NT0RVTEVfTU9ERV9TRVQsCi0rICAgICAgICAgICAgICAgICAgICBGSVBTX1JfRklOR0VSUFJJ TlRfRE9FU19OT1RfTUFUQ0gpOwotKyAgICAgICAgICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7 Ci0rICAgICAgICAgICAgcmV0ID0gMDsKLSsgICAgICAgICAgICBnb3RvIGVuZDsKLSsgICAgICAg IH0KLSsKLSsgICAgICAgIGlmICghRklQU0NIRUNLX3ZlcmlmeQotKyAgICAgICAgICAgICgibGli c3NsLnNvLiIgU0hMSUJfVkVSU0lPTl9OVU1CRVIsICJTU0xfQ1RYX25ldyIpKSB7Ci0rICAgICAg ICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsCi0rICAgICAgICAgICAg ICAgICAgICBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpOwotKyAgICAgICAgICAg IGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7Ci0rICAgICAgICAgICAgcmV0ID0gMDsKLSsgICAgICAg ICAgICBnb3RvIGVuZDsKLSsgICAgICAgIH0KLSsKLSsgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0 KCkpCi0rICAgICAgICAgICAgZmlwc19zZXRfbW9kZShvbm9mZik7Ci0rICAgICAgICBlbHNlIHsK LSsgICAgICAgICAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOwotKyAgICAgICAgICAgIHJldCA9 IDA7Ci0rICAgICAgICAgICAgZ290byBlbmQ7Ci0rICAgICAgICB9Ci0rICAgICAgICByZXQgPSAx OwotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsgICAgZmlwc19zZXRfbW9kZSgwKTsKLSsg ICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKLSsgICAgcmV0ID0gMTsKLSsgZW5kOgotKyAgICBm aXBzX2NsZWFyX293bmluZ190aHJlYWQoKTsKLSsgICAgZmlwc193X3VubG9jaygpOwotKyAgICBy ZXR1cm4gcmV0OwotK30KLSsKLStzdGF0aWMgQ1JZUFRPX1RIUkVBRElEIGZpcHNfdGhyZWFkOwot K3N0YXRpYyBpbnQgZmlwc190aHJlYWRfc2V0ID0gMDsKLSsKLStzdGF0aWMgaW50IGZpcHNfaXNf b3duaW5nX3RocmVhZCh2b2lkKQotK3sKLSsgICAgaW50IHJldCA9IDA7Ci0rCi0rICAgIGlmIChm aXBzX3N0YXJ0ZWQpIHsKLSsgICAgICAgIENSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIp OwotKyAgICAgICAgaWYgKGZpcHNfdGhyZWFkX3NldCkgewotKyAgICAgICAgICAgIENSWVBUT19U SFJFQURJRCBjdXI7Ci0rICAgICAgICAgICAgQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmN1cik7 Ci0rICAgICAgICAgICAgaWYgKCFDUllQVE9fVEhSRUFESURfY21wKCZjdXIsICZmaXBzX3RocmVh ZCkpCi0rICAgICAgICAgICAgICAgIHJldCA9IDE7Ci0rICAgICAgICB9Ci0rICAgICAgICBDUllQ VE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOwotKyAgICB9Ci0rICAgIHJldHVybiByZXQ7 Ci0rfQotKwotK2ludCBmaXBzX3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCi0rewotKyAgICBpbnQg cmV0ID0gMDsKLSsKLSsgICAgaWYgKGZpcHNfc3RhcnRlZCkgewotKyAgICAgICAgQ1JZUFRPX3df bG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rICAgICAgICBpZiAoIWZpcHNfdGhyZWFkX3NldCkg ewotKyAgICAgICAgICAgIENSWVBUT19USFJFQURJRF9jdXJyZW50KCZmaXBzX3RocmVhZCk7Ci0r ICAgICAgICAgICAgcmV0ID0gMTsKLSsgICAgICAgICAgICBmaXBzX3RocmVhZF9zZXQgPSAxOwot KyAgICAgICAgfQotKyAgICAgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsK LSsgICAgfQotKyAgICByZXR1cm4gcmV0OwotK30KLSsKLStpbnQgZmlwc19jbGVhcl9vd25pbmdf dGhyZWFkKHZvaWQpCi0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsKLSsgICAgaWYgKGZpcHNfc3Rh cnRlZCkgewotKyAgICAgICAgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rICAg ICAgICBpZiAoZmlwc190aHJlYWRfc2V0KSB7Ci0rICAgICAgICAgICAgQ1JZUFRPX1RIUkVBRElE IGN1cjsKLSsgICAgICAgICAgICBDUllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKLSsgICAg ICAgICAgICBpZiAoIUNSWVBUT19USFJFQURJRF9jbXAoJmN1ciwgJmZpcHNfdGhyZWFkKSkKLSsg ICAgICAgICAgICAgICAgZmlwc190aHJlYWRfc2V0ID0gMDsKLSsgICAgICAgIH0KLSsgICAgICAg IENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19GSVBTMik7Ci0rICAgIH0KLSsgICAgcmV0dXJu IHJldDsKLSt9Ci0rCi0rIyBpZiAwCi0rLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1 cmUgdGhlIGVycm9yIGNvZGUgZXhpc3RzIGFuZCB0aGUgZnVuY3Rpb24KLSsgKiBuYW1lIGlzIHRv IGtlZXAgdGhlIGVycm9yIGNoZWNraW5nIHNjcmlwdCBxdWlldAotKyAqLwotK3ZvaWQgaGFzaF9m aW5hbCh2b2lkKQotK3sKLSsgICAgRklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCwgRklQU19SX05P Tl9GSVBTX01FVEhPRCk7Ci0rfQotKyMgZW5kaWYKLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4y Zy9jcnlwdG8vZmlwcy9maXBzX2NtYWNfc2VsZnRlc3QuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6 MDcuNjE4OTE2NTY4ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19j bWFjX3NlbGZ0ZXN0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTg5MTY1NjggKzAxMDAKLUBAIC0w LDAgKzEsMTU2IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhl 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 cHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jbWFjLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5o IgotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rICAgIGludCBu aWQ7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5W0VWUF9NQVhfS0VZX0xFTkdUSF07Ci0r ICAgIHNpemVfdCBrZXlzaXplOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ1s2NF07Ci0r ICAgIHNpemVfdCBtc2dzaXplOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIG1hY1szMl07Ci0r ICAgIHNpemVfdCBtYWNzaXplOwotK30gQ01BQ19LQVQ7Ci0rCi0rLyogZnJvbSBodHRwOi8vY3Ny Yy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvbmlzdHB1YnMvODAwLTM4Qi9TUF84MDAtMzhCLnBkZiAq LwotK3N0YXRpYyBjb25zdCBDTUFDX0tBVCB2ZWN0b3JbXSA9IHsKLSsgICAge05JRF9hZXNfMTI4 X2NiYywgICAgICAgICAgIC8qIENvdW50ID0gMzIgZnJvbSBDTUFDR2VuQUVTMTI4LnR4dCAqLwot KyAgICAgezB4NzcsIDB4YTcsIDB4N2YsIDB4YWYsIDB4MjksIDB4MGMsIDB4MWYsIDB4YTMsCi0r ICAgICAgMHgwYywgMHg2OCwgMHgzZCwgMHhmMSwgMHg2YiwgMHhhNywgMHhhNywgMHg3Yix9LCAx MjgsCi0rICAgICB7MHgwMiwgMHgwNiwgMHg4MywgMHhlMSwgMHhmMCwgMHgzOSwgMHgyZiwgMHg0 YywKLSsgICAgICAweGFjLCAweDU0LCAweDMxLCAweDhiLCAweDYwLCAweDI5LCAweDI1LCAweDll LAotKyAgICAgIDB4OWMsIDB4NTUsIDB4M2QsIDB4YmMsIDB4NGIsIDB4NmEsIDB4ZDksIDB4OTgs Ci0rICAgICAgMHhlNiwgMHg0ZCwgMHg1OCwgMHhlNCwgMHhlNywgMHhkYywgMHgyZSwgMHgxMyx9 LCAyNTYsCi0rICAgICB7MHhmYiwgMHhmZSwgMHhhNCwgMHgxYix9LCAzMn0sCi0rICAgIHtOSURf YWVzXzE5Ml9jYmMsICAgICAgICAgICAvKiBDb3VudCA9IDIzIGZyb20gQ01BQ0dlbkFFUzE5Mi50 eHQgKi8KLSsgICAgIHsweDdiLCAweDMyLCAweDM5LCAweDEzLCAweDY5LCAweGFhLCAweDRjLCAw eGE5LAotKyAgICAgIDB4NzUsIDB4NTgsIDB4MDksIDB4NWIsIDB4ZTMsIDB4YzMsIDB4ZWMsIDB4 ODYsCi0rICAgICAgMHgyYiwgMHhkMCwgMHg1NywgMHhjZSwgMHhmMSwgMHhlMywgMHgyZCwgMHg2 Mix9LCAxOTIsCi0rICAgICB7MHgwfSwgMCwKLSsgICAgIHsweGU0LCAweGQ5LCAweDM0LCAweDBi LCAweDAzLCAweGU2LCAweDdkLCAweGVmLAotKyAgICAgIDB4ZDQsIDB4OTYsIDB4OWMsIDB4YzEs IDB4ZWQsIDB4MzcsIDB4MzUsIDB4ZTYsfSwgMTI4LAotKyAgICAgfSwKLSsgICAge05JRF9hZXNf MjU2X2NiYywgICAgICAgICAgIC8qIENvdW50ID0gMzMgZnJvbSBDTUFDR2VuQUVTMjU2LnR4dCAq LwotKyAgICAgezB4MGIsIDB4MTIsIDB4MmEsIDB4YzgsIDB4ZjMsIDB4NGUsIDB4ZDEsIDB4ZmUs Ci0rICAgICAgMHgwOCwgMHgyYSwgMHgzNiwgMHgyNSwgMHhkMSwgMHg1NywgMHg1NiwgMHgxNCwK LSsgICAgICAweDU0LCAweDE2LCAweDdhLCAweGMxLCAweDQ1LCAweGExLCAweDBiLCAweGJmLAot KyAgICAgIDB4NzcsIDB4YzYsIDB4YTcsIDB4MDUsIDB4OTYsIDB4ZDUsIDB4NzQsIDB4ZjEsfSwg MjU2LAotKyAgICAgezB4NDksIDB4OGIsIDB4NTMsIDB4ZmQsIDB4ZWMsIDB4ODcsIDB4ZWQsIDB4 Y2IsCi0rICAgICAgMHhmMCwgMHg3MCwgMHg5NywgMHhkYywgMHhjZCwgMHhlOSwgMHgzYSwgMHgw OCwKLSsgICAgICAweDRiLCAweGFkLCAweDc1LCAweDAxLCAweGEyLCAweDI0LCAweGUzLCAweDg4 LAotKyAgICAgIDB4ZGYsIDB4MzQsIDB4OWMsIDB4ZTEsIDB4ODksIDB4NTksIDB4ZmUsIDB4ODQs Ci0rICAgICAgMHg4NSwgMHhmOCwgMHhhZCwgMHgxNSwgMHgzNywgMHhmMCwgMHhkOCwgMHg5NiwK LSsgICAgICAweGVhLCAweDczLCAweGJlLCAweGRjLCAweDcyLCAweDE0LCAweDcxLCAweDNmLH0s IDM4NCwKLSsgICAgIHsweGY2LCAweDJjLCAweDQ2LCAweDMyLCAweDliLH0sIDQwLAotKyAgICAg fSwKLSsgICAge05JRF9kZXNfZWRlM19jYmMsICAgICAgICAgIC8qIENvdW50ID0gNDEgZnJvbSBD TUFDR2VuVERFUzMucmVxICovCi0rICAgICB7MHg4OSwgMHhiYywgMHhkOSwgMHg1MiwgMHhhOCwg MHhjOCwgMHhhYiwgMHgzNywKLSsgICAgICAweDFhLCAweGY0LCAweDhhLCAweGM3LCAweGQwLCAw eDcwLCAweDg1LCAweGQ1LAotKyAgICAgIDB4ZWYsIDB4ZjcsIDB4MDIsIDB4ZTYsIDB4ZDYsIDB4 MmMsIDB4ZGMsIDB4MjMsfSwgMTkyLAotKyAgICAgezB4ZmEsIDB4NjIsIDB4MGMsIDB4MWIsIDB4 YmUsIDB4OTcsIDB4MzEsIDB4OWUsCi0rICAgICAgMHg5YSwgMHgwYywgMHhmMCwgMHg0OSwgMHgy MSwgMHgyMSwgMHhmNywgMHhhMiwKLSsgICAgICAweDBlLCAweGIwLCAweDhhLCAweDZhLCAweDcw LCAweDlkLCAweGNiLCAweGQwLAotKyAgICAgIDB4MGEsIDB4YWYsIDB4MzgsIDB4ZTQsIDB4Zjks IDB4OWUsIDB4NzUsIDB4NGUsfSwgMjU2LAotKyAgICAgezB4OGYsIDB4NDksIDB4YTEsIDB4Yjcs IDB4ZDYsIDB4YWEsIDB4MjIsIDB4NTgsfSwgNjQsCi0rICAgICB9LAotK307Ci0rCi0raW50IEZJ UFNfc2VsZnRlc3RfY21hYygpCi0rewotKyAgICBzaXplX3Qgbiwgb3V0bGVuOwotKyAgICB1bnNp Z25lZCBjaGFyIG91dFszMl07Ci0rICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcjsKLSsgICAg Q01BQ19DVFggKmN0eCA9IENNQUNfQ1RYX25ldygpOwotKyAgICBjb25zdCBDTUFDX0tBVCAqdDsK LSsgICAgaW50IHJ2ID0gMTsKLSsKLSsgICAgZm9yIChuID0gMCwgdCA9IHZlY3RvcjsgbiA8IHNp emVvZih2ZWN0b3IpIC8gc2l6ZW9mKHZlY3RvclswXSk7IG4rKywgdCsrKSB7Ci0rICAgICAgICBj aXBoZXIgPSBGSVBTX2dldF9jaXBoZXJieW5pZCh0LT5uaWQpOwotKyAgICAgICAgaWYgKCFjaXBo ZXIpIHsKLSsgICAgICAgICAgICBydiA9IC0xOwotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAg ICAgICAgfQotKyAgICAgICAgaWYgKCFDTUFDX0luaXQoY3R4LCB0LT5rZXksIHQtPmtleXNpemUg LyA4LCBjaXBoZXIsIDApKSB7Ci0rICAgICAgICAgICAgcnYgPSAtMTsKLSsgICAgICAgICAgICBn b3RvIGVycjsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmICghQ01BQ19VcGRhdGUoY3R4LCB0LT5t c2csIHQtPm1zZ3NpemUgLyA4KSkgewotKyAgICAgICAgICAgIHJ2ID0gLTE7Ci0rICAgICAgICAg ICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpZiAoIUNNQUNfRmluYWwoY3R4 LCBvdXQsICZvdXRsZW4pKSB7Ci0rICAgICAgICAgICAgcnYgPSAtMTsKLSsgICAgICAgICAgICBn b3RvIGVycjsKLSsgICAgICAgIH0KLSsgICAgICAgIENNQUNfQ1RYX2NsZWFudXAoY3R4KTsKLSsK LSsgICAgICAgIGlmIChvdXRsZW4gPCB0LT5tYWNzaXplIC8gOCB8fCBtZW1jbXAob3V0LCB0LT5t YWMsIHQtPm1hY3NpemUgLyA4KSkgewotKyAgICAgICAgICAgIHJ2ID0gMDsKLSsgICAgICAgIH0K LSsgICAgfQotKwotKyBlcnI6Ci0rICAgIENNQUNfQ1RYX2ZyZWUoY3R4KTsKLSsKLSsgICAgaWYg KHJ2ID09IC0xKSB7Ci0rICAgICAgICBydiA9IDA7Ci0rICAgIH0KLSsgICAgaWYgKCFydikKLSsg ICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQ01BQywgRklQU19SX1NFTEZURVNU X0ZBSUxFRCk7Ci0rCi0rICAgIHJldHVybiBydjsKLSt9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVu c3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kZXNfc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3 LjYxODkxNjU2OCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfZGVz X3NlbGZ0ZXN0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42MTg5MTY1NjggKzAxMDAKLUBAIC0wLDAg KzEsMTM4IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9w ZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1 dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK LSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93 aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9j dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICog ICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBt ZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBk aXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5v cmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5T U0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJp b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29u dGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1 Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NM IgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0 IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3Qu Ci0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0 IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5v cGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg T3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU SEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1J VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAq IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p Ci0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBP U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmlu Zy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsj IGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2 cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rCi0rI2lmZGVmIE9QRU5T U0xfRklQUwotKwotK3N0YXRpYyBjb25zdCBzdHJ1Y3QgewotKyAgICBjb25zdCB1bnNpZ25lZCBj aGFyIGtleVsxNl07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOwotKyAg ICBjb25zdCB1bnNpZ25lZCBjaGFyIGNpcGhlcnRleHRbOF07Ci0rfSB0ZXN0czJbXSA9IHsKLSsg ICAgewotKyAgICAgICAgewotKyAgICAgICAgMHg3YywgMHg0ZiwgMHg2ZSwgMHhmNywgMHhhMiwg MHgwNCwgMHgxNiwgMHhlYywKLSsgICAgICAgICAgICAgICAgMHgwYiwgMHg2YiwgMHg3YywgMHg5 ZSwgMHg1ZSwgMHgxOSwgMHhhNywgMHhjNH0sIHsKLSsgICAgICAgIDB4MDYsIDB4YTcsIDB4ZDgs IDB4NzksIDB4YWEsIDB4Y2UsIDB4NjksIDB4ZWZ9LCB7Ci0rICAgICAgICAweDRjLCAweDExLCAw eDE3LCAweDU1LCAweGJmLCAweGM0LCAweDRlLCAweGZkfQotKyAgICB9LCB7Ci0rICAgICAgICB7 Ci0rICAgICAgICAweDVkLCAweDllLCAweDAxLCAweGQzLCAweDI1LCAweGM3LCAweDNlLCAweDM0 LAotKyAgICAgICAgICAgICAgICAweDAxLCAweDE2LCAweDdjLCAweDg1LCAweDIzLCAweGRmLCAw eGUwLCAweDY4fSwgewotKyAgICAgICAgMHg5YywgMHg1MCwgMHgwOSwgMHgwZiwgMHg1ZSwgMHg3 ZCwgMHg2OSwgMHg3ZX0sIHsKLSsgICAgMHhkMiwgMHgwYiwgMHgxOCwgMHhkZiwgMHhkOSwgMHgw ZCwgMHg5ZSwgMHhmZn0sfQotK307Ci0rCi0rc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0rICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIga2V5WzI0XTsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFp bnRleHRbOF07Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKLSt9IHRl c3RzM1tdID0gewotKyAgICB7Ci0rICAgICAgICB7Ci0rICAgICAgICAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotKyAgICAgICAgICAgICAgICAweEZFLCAw eERDLCAweEJBLCAweDk4LCAweDc2LCAweDU0LCAweDMyLCAweDEwLAotKyAgICAgICAgICAgICAg ICAweDEyLCAweDM0LCAweDU2LCAweDc4LCAweDlhLCAweGJjLCAweGRlLCAweGYwfSwgewotKyAg ICAgICAgMHg4ZiwgMHg4ZiwgMHhiZiwgMHg5YiwgMHg1ZCwgMHg0OCwgMHhiNCwgMHgxY30sIHsK LSsgICAgMHg1OSwgMHg4YywgMHhlNSwgMHhkMywgMHg2YywgMHhhMiwgMHhlYSwgMHgxYn0sfSwg ewotKyAgICAgICAgewotKyAgICAgICAgMHhEQywgMHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgz MiwgMHgxMCwgMHhGRSwKLSsgICAgICAgICAgICAgICAgMHgwMSwgMHgyMywgMHg0NSwgMHg2Nywg MHg4OSwgMHhBQiwgMHhDRCwgMHhFRiwKLSsgICAgICAgICAgICAgICAgMHhFRCwgMHgzOSwgMHhE OSwgMHg1MCwgMHhGQSwgMHg3NCwgMHhCQywgMHhDNH0sIHsKLSsgICAgICAgIDB4MDEsIDB4MjMs IDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUZ9LCB7Ci0rMHgxMSwgMHgyNSwgMHhi MCwgMHgzNSwgMHhiZSwgMHhhMCwgMHg4MiwgMHg4Nn0sfSx9OwotKwotK3N0YXRpYyBpbnQgY29y cnVwdF9kZXM7Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfZGVzKCkKLSt7Ci0rICAgIGNvcnJ1cHRf ZGVzID0gMTsKLSt9Ci0rCi0raW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKLSt7Ci0rICAgIGludCBu LCByZXQgPSAwOwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RY X2luaXQoJmN0eCk7Ci0rICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5k IGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLwotKyAgICBmb3IgKG4gPSAwOyBuIDwgMjsgKytu KSB7Ci0rICAgICAgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs4XTsKLSsKLSsgICAgICAgIG1l bWNweShwbGFpbnRleHQsIHRlc3RzMltuXS5wbGFpbnRleHQsIHNpemVvZihwbGFpbnRleHQpKTsK LSsgICAgICAgIGlmIChjb3JydXB0X2RlcykKLSsgICAgICAgICAgICBwbGFpbnRleHRbMF0rKzsK LSsgICAgICAgIGlmICghZmlwc19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9lY2IoKSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0czJbbl0ua2V5LCBOVUxMLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWludGV4dCwgdGVzdHMyW25dLmNpcGhlcnRl eHQsIDgpKQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIC8qIEVuY3J5 cHQvZGVjcnlwdCB3aXRoIDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLwotKyAg ICBmb3IgKG4gPSAwOyBuIDwgMjsgKytuKSB7Ci0rICAgICAgICBpZiAoIWZpcHNfY2lwaGVyX3Rl c3QoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRlc3RzM1tuXS5rZXksIE5VTEwsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGVzdHMzW25dLnBsYWludGV4dCwgdGVzdHMzW25dLmNpcGhlcnRleHQsIDgpKQotKyAgICAgICAg ICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rICAgIHJldCA9IDE7Ci0rIGVycjoKLSsgICAgRVZQX0NJ UEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLSsgICAgaWYgKHJldCA9PSAwKQotKyAgICAgICAgRklQ U2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwot KwotKyAgICByZXR1cm4gcmV0OwotK30KLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19jdHIuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19jdHIuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE4OTE2NTY4ICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCTIwMTYtMDMtMDEgMTY6 MzM6MDcuNjE4OTE2NTY4ICswMTAwCi1AQCAtMCwwICsxLDQxNSBAQAotKy8qIGZpcHMvcmFuZC9m aXBzX2RyYmdfY3RyLmMgKi8KLSsvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0 ZXZlQG9wZW5zc2wub3JnKSBmb3IgdGhlIE9wZW5TU0wKLSsgKiBwcm9qZWN0LgotKyAqLwotKy8q ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3Qu ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAq IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlv bi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29m dHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGlu IHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsg KiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11 c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBs aWNlbnNpbmdAT3BlblNTTC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20g dGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5 ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0r ICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVk aXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxv d2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVk ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3Ig dXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsg KgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBg YEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQ T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVD VCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ UkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwK LSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP VEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI IERBTUFHRS4KLSsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqLwotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4K LSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgot KyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rCi0rc3RhdGljIHZvaWQgaW5jXzEyOChEUkJH X0NUUl9DVFggKiBjY3R4KQotK3sKLSsgICAgaW50IGk7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYzsK LSsgICAgdW5zaWduZWQgY2hhciAqcCA9IGNjdHgtPlYgKyAxNTsKLSsgICAgZm9yIChpID0gMDsg aSA8IDE2OyBpKyspIHsKLSsgICAgICAgIGMgPSAqcDsKLSsgICAgICAgIGMrKzsKLSsgICAgICAg ICpwID0gYzsKLSsgICAgICAgIGlmIChjKQotKyAgICAgICAgICAgIHJldHVybjsKLSsgICAgICAg IHAtLTsKLSsgICAgfQotK30KLSsKLStzdGF0aWMgdm9pZCBjdHJfWE9SKERSQkdfQ1RSX0NUWCAq IGNjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAotKyAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IGlubGVuKQotK3sKLSsgICAgc2l6ZV90IGksIG47Ci0rICAgIC8qIEFueSB6ZXJvIHBhZGRp bmcgd2lsbCBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgcmVzdWx0IGFzIHdlCi0rICAgICAqIGFyZSBY T1JpbmcuIFNvIGp1c3QgcHJvY2VzcyBob3dldmVyIG11Y2ggaW5wdXQgd2UgaGF2ZS4KLSsgICAg ICovCi0rCi0rICAgIGlmICghaW4gfHwgIWlubGVuKQotKyAgICAgICAgcmV0dXJuOwotKwotKyAg ICBpZiAoaW5sZW4gPCBjY3R4LT5rZXlsZW4pCi0rICAgICAgICBuID0gaW5sZW47Ci0rICAgIGVs c2UKLSsgICAgICAgIG4gPSBjY3R4LT5rZXlsZW47Ci0rCi0rICAgIGZvciAoaSA9IDA7IGkgPCBu OyBpKyspCi0rICAgICAgICBjY3R4LT5LW2ldIF49IGluW2ldOwotKyAgICBpZiAoaW5sZW4gPD0g Y2N0eC0+a2V5bGVuKQotKyAgICAgICAgcmV0dXJuOwotKwotKyAgICBuID0gaW5sZW4gLSBjY3R4 LT5rZXlsZW47Ci0rICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KLSsgICAgaWYgKG4gPiAx NikKLSsgICAgICAgIG4gPSAxNjsKLSsgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCi0rICAg ICAgICBjY3R4LT5WW2ldIF49IGluW2kgKyBjY3R4LT5rZXlsZW5dOwotK30KLSsKLSsvKiBQcm9j ZXNzIGEgY29tcGxldGUgYmxvY2sgdXNpbmcgQkNDIGFsZ29yaXRobSBvZiBTUFAgODAwLTkwIDEw LjQuMyAqLwotKwotK3N0YXRpYyB2b2lkIGN0cl9CQ0NfYmxvY2soRFJCR19DVFJfQ1RYICogY2N0 eCwgdW5zaWduZWQgY2hhciAqb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg dW5zaWduZWQgY2hhciAqaW4pCi0rewotKyAgICBpbnQgaTsKLSsgICAgZm9yIChpID0gMDsgaSA8 IDE2OyBpKyspCi0rICAgICAgICBvdXRbaV0gXj0gaW5baV07Ci0rICAgIEFFU19lbmNyeXB0KG91 dCwgb3V0LCAmY2N0eC0+ZGZfa3MpOwotKyNpZiAwCi0rICAgIGZwcmludGYoc3RkZXJyLCAiQkND IGluK291dFxuIik7Ci0rICAgIEJJT19kdW1wX2ZwKHN0ZGVyciwgaW4sIDE2KTsKLSsgICAgQklP X2R1bXBfZnAoc3RkZXJyLCBvdXQsIDE2KTsKLSsjZW5kaWYKLSt9Ci0rCi0rLyogSGFuZGxlIHNl dmVyYWwgQkNDIG9wZXJhdGlvbnMgZm9yIGFzIG11Y2ggZGF0YSBhcyB3ZSBuZWVkIGZvciBLIGFu ZCBYICovCi0rc3RhdGljIHZvaWQgY3RyX0JDQ19ibG9ja3MoRFJCR19DVFJfQ1RYICogY2N0eCwg Y29uc3QgdW5zaWduZWQgY2hhciAqaW4pCi0rewotKyAgICBjdHJfQkNDX2Jsb2NrKGNjdHgsIGNj dHgtPktYLCBpbik7Ci0rICAgIGN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAxNiwgaW4p OwotKyAgICBpZiAoY2N0eC0+a2V5bGVuICE9IDE2KQotKyAgICAgICAgY3RyX0JDQ19ibG9jayhj Y3R4LCBjY3R4LT5LWCArIDMyLCBpbik7Ci0rfQotKwotKy8qIEluaXRpYWxpc2UgQkNDIGJsb2Nr czogdGhlc2UgaGF2ZSB0aGUgdmFsdWUgMCwxLDIgaW4gbGVmdG1vc3QgcG9zaXRpb25zOgotKyAq IHNlZSAxMC40LjIgc3RhZ2UgNy4KLSsgKi8KLStzdGF0aWMgdm9pZCBjdHJfQkNDX2luaXQoRFJC R19DVFJfQ1RYICogY2N0eCkKLSt7Ci0rICAgIG1lbXNldChjY3R4LT5LWCwgMCwgNDgpOwotKyAg ICBtZW1zZXQoY2N0eC0+Ymx0bXAsIDAsIDE2KTsKLSsgICAgY3RyX0JDQ19ibG9jayhjY3R4LCBj Y3R4LT5LWCwgY2N0eC0+Ymx0bXApOwotKyAgICBjY3R4LT5ibHRtcFszXSA9IDE7Ci0rICAgIGN0 cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAxNiwgY2N0eC0+Ymx0bXApOwotKyAgICBpZiAo Y2N0eC0+a2V5bGVuICE9IDE2KSB7Ci0rICAgICAgICBjY3R4LT5ibHRtcFszXSA9IDI7Ci0rICAg ICAgICBjdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYICsgMzIsIGNjdHgtPmJsdG1wKTsKLSsg ICAgfQotK30KLSsKLSsvKiBQcm9jZXNzIHNldmVyYWwgYmxvY2tzIGludG8gQkNDIGFsZ29yaXRo bSwgc29tZSBwb3NzaWJseSBwYXJ0aWFsICovCi0rc3RhdGljIHZvaWQgY3RyX0JDQ191cGRhdGUo RFJCR19DVFJfQ1RYICogY2N0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBjaGFyICppbiwgc2l6ZV90IGlubGVuKQotK3sKLSsgICAgaWYgKCFpbiB8fCAhaW5s ZW4pCi0rICAgICAgICByZXR1cm47Ci0rICAgIC8qIElmIHdlIGhhdmUgcGFydGlhbCBibG9jayBo YW5kbGUgaXQgZmlyc3QgKi8KLSsgICAgaWYgKGNjdHgtPmJsdG1wX3BvcykgewotKyAgICAgICAg c2l6ZV90IGxlZnQgPSAxNiAtIGNjdHgtPmJsdG1wX3BvczsKLSsgICAgICAgIC8qIElmIHdlIG5v dyBoYXZlIGEgY29tcGxldGUgYmxvY2sgcHJvY2VzcyBpdCAqLwotKyAgICAgICAgaWYgKGlubGVu ID49IGxlZnQpIHsKLSsgICAgICAgICAgICBtZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRt cF9wb3MsIGluLCBsZWZ0KTsKLSsgICAgICAgICAgICBjdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4 LT5ibHRtcCk7Ci0rICAgICAgICAgICAgY2N0eC0+Ymx0bXBfcG9zID0gMDsKLSsgICAgICAgICAg ICBpbmxlbiAtPSBsZWZ0OwotKyAgICAgICAgICAgIGluICs9IGxlZnQ7Ci0rICAgICAgICB9Ci0r ICAgIH0KLSsgICAgLyogUHJvY2VzcyB6ZXJvIG9yIG1vcmUgY29tcGxldGUgYmxvY2tzICovCi0r ICAgIHdoaWxlIChpbmxlbiA+PSAxNikgewotKyAgICAgICAgY3RyX0JDQ19ibG9ja3MoY2N0eCwg aW4pOwotKyAgICAgICAgaW4gKz0gMTY7Ci0rICAgICAgICBpbmxlbiAtPSAxNjsKLSsgICAgfQot KyAgICAvKiBDb3B5IGFueSByZW1haW5pbmcgcGFydGlhbCBibG9jayB0byB0aGUgdGVtcG9yYXJ5 IGJ1ZmZlciAqLwotKyAgICBpZiAoaW5sZW4gPiAwKSB7Ci0rICAgICAgICBtZW1jcHkoY2N0eC0+ Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIGluLCBpbmxlbik7Ci0rICAgICAgICBjY3R4LT5ibHRt cF9wb3MgKz0gaW5sZW47Ci0rICAgIH0KLSt9Ci0rCi0rc3RhdGljIHZvaWQgY3RyX0JDQ19maW5h bChEUkJHX0NUUl9DVFggKiBjY3R4KQotK3sKLSsgICAgaWYgKGNjdHgtPmJsdG1wX3Bvcykgewot KyAgICAgICAgbWVtc2V0KGNjdHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCAwLCAxNiAtIGNj dHgtPmJsdG1wX3Bvcyk7Ci0rICAgICAgICBjdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRt cCk7Ci0rICAgIH0KLSt9Ci0rCi0rc3RhdGljIHZvaWQgY3RyX2RmKERSQkdfQ1RSX0NUWCAqIGNj dHgsCi0rICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90 IGluMWxlbiwKLSsgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBz aXplX3QgaW4ybGVuLAotKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpp bjMsIHNpemVfdCBpbjNsZW4pCi0rewotKyAgICBzaXplX3QgaW5sZW47Ci0rICAgIHVuc2lnbmVk IGNoYXIgKnAgPSBjY3R4LT5ibHRtcDsKLSsgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYzgwID0g MHg4MDsKLSsKLSsgICAgY3RyX0JDQ19pbml0KGNjdHgpOwotKyAgICBpZiAoIWluMSkKLSsgICAg ICAgIGluMWxlbiA9IDA7Ci0rICAgIGlmICghaW4yKQotKyAgICAgICAgaW4ybGVuID0gMDsKLSsg ICAgaWYgKCFpbjMpCi0rICAgICAgICBpbjNsZW4gPSAwOwotKyAgICBpbmxlbiA9IGluMWxlbiAr IGluMmxlbiArIGluM2xlbjsKLSsgICAgLyogSW5pdGlhbGlzZSBMfHxOIGluIHRlbXBvcmFyeSBi bG9jayAqLwotKyAgICAqcCsrID0gKGlubGVuID4+IDI0KSAmIDB4ZmY7Ci0rICAgICpwKysgPSAo aW5sZW4gPj4gMTYpICYgMHhmZjsKLSsgICAgKnArKyA9IChpbmxlbiA+PiA4KSAmIDB4ZmY7Ci0r ICAgICpwKysgPSBpbmxlbiAmIDB4ZmY7Ci0rICAgIC8qIE5CIGtleWxlbiBpcyBhdCBtb3N0IDMy IGJ5dGVzICovCi0rICAgICpwKysgPSAwOwotKyAgICAqcCsrID0gMDsKLSsgICAgKnArKyA9IDA7 Ci0rICAgICpwID0gKHVuc2lnbmVkIGNoYXIpKChjY3R4LT5rZXlsZW4gKyAxNikgJiAweGZmKTsK LSsgICAgY2N0eC0+Ymx0bXBfcG9zID0gODsKLSsgICAgY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4x LCBpbjFsZW4pOwotKyAgICBjdHJfQkNDX3VwZGF0ZShjY3R4LCBpbjIsIGluMmxlbik7Ci0rICAg IGN0cl9CQ0NfdXBkYXRlKGNjdHgsIGluMywgaW4zbGVuKTsKLSsgICAgY3RyX0JDQ191cGRhdGUo Y2N0eCwgJmM4MCwgMSk7Ci0rICAgIGN0cl9CQ0NfZmluYWwoY2N0eCk7Ci0rICAgIC8qIFNldCB1 cCBrZXkgSyAqLwotKyAgICBBRVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgtPktYLCBjY3R4LT5rZXls ZW4gKiA4LCAmY2N0eC0+ZGZfa3hrcyk7Ci0rICAgIC8qIFggZm9sbG93cyBrZXkgSyAqLwotKyAg ICBBRVNfZW5jcnlwdChjY3R4LT5LWCArIGNjdHgtPmtleWxlbiwgY2N0eC0+S1gsICZjY3R4LT5k Zl9reGtzKTsKLSsgICAgQUVTX2VuY3J5cHQoY2N0eC0+S1gsIGNjdHgtPktYICsgMTYsICZjY3R4 LT5kZl9reGtzKTsKLSsgICAgaWYgKGNjdHgtPmtleWxlbiAhPSAxNikKLSsgICAgICAgIEFFU19l bmNyeXB0KGNjdHgtPktYICsgMTYsIGNjdHgtPktYICsgMzIsICZjY3R4LT5kZl9reGtzKTsKLSsj aWYgMAotKyAgICBmcHJpbnRmKHN0ZGVyciwgIk91dHB1dCBvZiBjdHJfZGY6XG4iKTsKLSsgICAg QklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICsgMTYpOwotKyNlbmRp ZgotK30KLSsKLSsvKiBOQiB0aGUgbm8tZGYgIFVwZGF0ZSBpbiBTUDgwMC05MCBzcGVjaWZpZXMg YSBjb25zdGFudCBpbnB1dCBsZW5ndGgKLSsgKiBvZiBzZWVkbGVuLCBob3dldmVyIG90aGVyIHVz ZXMgb2YgdGhpcyBhbGdvcml0aG0gcGFkIHRoZSBpbnB1dCB3aXRoCi0rICogemVyb2VzIGlmIG5l Y2Vzc2FyeSBhbmQgaGF2ZSB1cCB0byB0d28gcGFyYW1ldGVycyBYT1JlZCB0b2dldGhlciwKLSsg KiBoYW5kbGUgYm90aCBjYXNlcyBpbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQuCi0rICovCi0rCi0r c3RhdGljIHZvaWQgY3RyX1VwZGF0ZShEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKLSsgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwK LSsgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXpl X3Qgbm9uY2VsZW4pCi0rewotKyAgICBEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7 Ci0rICAgIC8qIGtzIGlzIGFscmVhZHkgc2V0dXAgZm9yIGNvcnJlY3Qga2V5ICovCi0rICAgIGlu Y18xMjgoY2N0eCk7Ci0rICAgIEFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5r cyk7Ci0rICAgIC8qIElmIGtleWxlbiBsb25nZXIgdGhhbiAxMjggYml0cyBuZWVkIGV4dHJhIGVu Y3J5cHQgKi8KLSsgICAgaWYgKGNjdHgtPmtleWxlbiAhPSAxNikgewotKyAgICAgICAgaW5jXzEy OChjY3R4KTsKLSsgICAgICAgIEFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPksgKyAxNiwgJmNj dHgtPmtzKTsKLSsgICAgfQotKyAgICBpbmNfMTI4KGNjdHgpOwotKyAgICBBRVNfZW5jcnlwdChj Y3R4LT5WLCBjY3R4LT5WLCAmY2N0eC0+a3MpOwotKyAgICAvKiBJZiAxOTIgYml0IGtleSBwYXJ0 IG9mIFYgaXMgb24gZW5kIG9mIEsgKi8KLSsgICAgaWYgKGNjdHgtPmtleWxlbiA9PSAyNCkgewot KyAgICAgICAgbWVtY3B5KGNjdHgtPlYgKyA4LCBjY3R4LT5WLCA4KTsKLSsgICAgICAgIG1lbWNw eShjY3R4LT5WLCBjY3R4LT5LICsgMjQsIDgpOwotKyAgICB9Ci0rCi0rICAgIGlmIChkY3R4LT54 ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikgewotKyAgICAgICAgLyogSWYgbm8gaW5wdXQg cmV1c2UgZXhpc3RpbmcgZGVyaXZlZCB2YWx1ZSAqLwotKyAgICAgICAgaWYgKGluMSB8fCBub25j ZSB8fCBpbjIpCi0rICAgICAgICAgICAgY3RyX2RmKGNjdHgsIGluMSwgaW4xbGVuLCBub25jZSwg bm9uY2VsZW4sIGluMiwgaW4ybGVuKTsKLSsgICAgICAgIC8qIElmIHRoaXMgYSByZXVzZSBpbnB1 dCBpbjFsZW4gIT0gMCAqLwotKyAgICAgICAgaWYgKGluMWxlbikKLSsgICAgICAgICAgICBjdHJf WE9SKGNjdHgsIGNjdHgtPktYLCBkY3R4LT5zZWVkbGVuKTsKLSsgICAgfSBlbHNlIHsKLSsgICAg ICAgIGN0cl9YT1IoY2N0eCwgaW4xLCBpbjFsZW4pOwotKyAgICAgICAgY3RyX1hPUihjY3R4LCBp bjIsIGluMmxlbik7Ci0rICAgIH0KLSsKLSsgICAgQUVTX3NldF9lbmNyeXB0X2tleShjY3R4LT5L LCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmtzKTsKLSsjaWYgMAotKyAgICBmcHJpbnRmKHN0ZGVy ciwgIksrViBhZnRlciB1cGRhdGUgaXM6XG4iKTsKLSsgICAgQklPX2R1bXBfZnAoc3RkZXJyLCBj Y3R4LT5LLCBjY3R4LT5rZXlsZW4pOwotKyAgICBCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPlYs IDE2KTsKLSsjZW5kaWYKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0cl9pbnN0YW50aWF0ZShE UkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudGxlbiwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4sCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJz LCBzaXplX3QgcGVyc2xlbikKLSt7Ci0rICAgIERSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5k LmN0cjsKLSsgICAgbWVtc2V0KGNjdHgtPkssIDAsIHNpemVvZihjY3R4LT5LKSk7Ci0rICAgIG1l bXNldChjY3R4LT5WLCAwLCBzaXplb2YoY2N0eC0+VikpOwotKyAgICBBRVNfc2V0X2VuY3J5cHRf a2V5KGNjdHgtPkssIGRjdHgtPnN0cmVuZ3RoLCAmY2N0eC0+a3MpOwotKyAgICBjdHJfVXBkYXRl KGRjdHgsIGVudCwgZW50bGVuLCBwZXJzLCBwZXJzbGVuLCBub25jZSwgbm9uY2VsZW4pOwotKyAg ICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX2N0cl9yZXNlZWQoRFJCR19DVFgg KmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq ZW50LCBzaXplX3QgZW50bGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKQotK3sKLSsgICAgY3RyX1VwZGF0ZShk Y3R4LCBlbnQsIGVudGxlbiwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCk7Ci0rICAgIHJldHVybiAx OwotK30KLSsKLStzdGF0aWMgaW50IGRyYmdfY3RyX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qg b3V0bGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pCi0rewotKyAgICBEUkJHX0NUUl9DVFggKmNjdHggPSAm ZGN0eC0+ZC5jdHI7Ci0rICAgIGlmIChhZGluICYmIGFkaW5sZW4pIHsKLSsgICAgICAgIGN0cl9V cGRhdGUoZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7Ci0rICAgICAgICAv KiBUaGlzIG1lYW5zIHdlIHJldXNlIGRlcml2ZWQgdmFsdWUgKi8KLSsgICAgICAgIGlmIChkY3R4 LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfQ1RSX1VTRV9ERikgewotKyAgICAgICAgICAgIGFkaW4gPSBO VUxMOwotKyAgICAgICAgICAgIGFkaW5sZW4gPSAxOwotKyAgICAgICAgfQotKyAgICB9IGVsc2UK LSsgICAgICAgIGFkaW5sZW4gPSAwOwotKwotKyAgICBmb3IgKDs7KSB7Ci0rICAgICAgICBpbmNf MTI4KGNjdHgpOwotKyAgICAgICAgaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1Qp ICYmICFkY3R4LT5sYl92YWxpZCkgewotKyAgICAgICAgICAgIEFFU19lbmNyeXB0KGNjdHgtPlYs IGRjdHgtPmxiLCAmY2N0eC0+a3MpOwotKyAgICAgICAgICAgIGRjdHgtPmxiX3ZhbGlkID0gMTsK LSsgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmIChvdXRsZW4g PCAxNikgewotKyAgICAgICAgICAgIC8qIFVzZSBLIGFzIHRlbXAgc3BhY2UgYXMgaXQgd2lsbCBi ZSB1cGRhdGVkICovCi0rICAgICAgICAgICAgQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+Sywg JmNjdHgtPmtzKTsKLSsgICAgICAgICAgICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgs IGNjdHgtPkspKQotKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICBtZW1j cHkob3V0LCBjY3R4LT5LLCBvdXRsZW4pOwotKyAgICAgICAgICAgIGJyZWFrOwotKyAgICAgICAg fQotKyAgICAgICAgQUVTX2VuY3J5cHQoY2N0eC0+Viwgb3V0LCAmY2N0eC0+a3MpOwotKyAgICAg ICAgaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBvdXQpKQotKyAgICAgICAgICAgIHJl dHVybiAwOwotKyAgICAgICAgb3V0ICs9IDE2OwotKyAgICAgICAgb3V0bGVuIC09IDE2OwotKyAg ICAgICAgaWYgKG91dGxlbiA9PSAwKQotKyAgICAgICAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0r ICAgIGN0cl9VcGRhdGUoZGN0eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7Ci0r Ci0rICAgIHJldHVybiAxOwotKwotK30KLSsKLStzdGF0aWMgaW50IGRyYmdfY3RyX3VuaW5zdGFu dGlhdGUoRFJCR19DVFggKmRjdHgpCi0rewotKyAgICBtZW1zZXQoJmRjdHgtPmQuY3RyLCAwLCBz aXplb2YoRFJCR19DVFJfQ1RYKSk7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLStpbnQgZmlwc19k cmJnX2N0cl9pbml0KERSQkdfQ1RYICpkY3R4KQotK3sKLSsgICAgRFJCR19DVFJfQ1RYICpjY3R4 ID0gJmRjdHgtPmQuY3RyOwotKwotKyAgICBzaXplX3Qga2V5bGVuOwotKwotKyAgICBzd2l0Y2gg KGRjdHgtPnR5cGUpIHsKLSsgICAgY2FzZSBOSURfYWVzXzEyOF9jdHI6Ci0rICAgICAgICBrZXls ZW4gPSAxNjsKLSsgICAgICAgIGJyZWFrOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTkyX2N0cjoK LSsgICAgICAgIGtleWxlbiA9IDI0OwotKyAgICAgICAgYnJlYWs7Ci0rCi0rICAgIGNhc2UgTklE X2Flc18yNTZfY3RyOgotKyAgICAgICAga2V5bGVuID0gMzI7Ci0rICAgICAgICBicmVhazsKLSsK LSsgICAgZGVmYXVsdDoKLSsgICAgICAgIHJldHVybiAtMjsKLSsgICAgfQotKwotKyAgICBkY3R4 LT5pbnN0YW50aWF0ZSA9IGRyYmdfY3RyX2luc3RhbnRpYXRlOwotKyAgICBkY3R4LT5yZXNlZWQg PSBkcmJnX2N0cl9yZXNlZWQ7Ci0rICAgIGRjdHgtPmdlbmVyYXRlID0gZHJiZ19jdHJfZ2VuZXJh dGU7Ci0rICAgIGRjdHgtPnVuaW5zdGFudGlhdGUgPSBkcmJnX2N0cl91bmluc3RhbnRpYXRlOwot KwotKyAgICBjY3R4LT5rZXlsZW4gPSBrZXlsZW47Ci0rICAgIGRjdHgtPnN0cmVuZ3RoID0ga2V5 bGVuICogODsKLSsgICAgZGN0eC0+YmxvY2tsZW5ndGggPSAxNjsKLSsgICAgZGN0eC0+c2VlZGxl biA9IGtleWxlbiArIDE2OwotKwotKyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NU Ul9VU0VfREYpIHsKLSsgICAgICAgIC8qIGRmIGluaXRpYWxpc2F0aW9uICovCi0rICAgICAgICBz dGF0aWMgdW5zaWduZWQgY2hhciBkZl9rZXlbMzJdID0gewotKyAgICAgICAgICAgIDB4MDAsIDB4 MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCi0rICAgICAgICAgICAgMHgw OCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKLSsgICAgICAgICAg ICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAotKyAgICAg ICAgICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYKLSsg ICAgICAgIH07Ci0rICAgICAgICAvKiBTZXQga2V5IHNjaGVkdWxlIGZvciBkZl9rZXkgKi8KLSsg ICAgICAgIEFFU19zZXRfZW5jcnlwdF9rZXkoZGZfa2V5LCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgt PmRmX2tzKTsKLSsKLSsgICAgICAgIGRjdHgtPm1pbl9lbnRyb3B5ID0gY2N0eC0+a2V5bGVuOwot KyAgICAgICAgZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7Ci0rICAgICAgICBk Y3R4LT5taW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7Ci0rICAgICAgICBkY3R4LT5t YXhfbm9uY2UgPSBEUkJHX01BWF9MRU5HVEg7Ci0rICAgICAgICBkY3R4LT5tYXhfcGVycyA9IERS QkdfTUFYX0xFTkdUSDsKLSsgICAgICAgIGRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RI OwotKyAgICB9IGVsc2UgewotKyAgICAgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zZWVk bGVuOwotKyAgICAgICAgZGN0eC0+bWF4X2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOwotKyAgICAg ICAgLyogTm9uY2Ugbm90IHVzZWQgKi8KLSsgICAgICAgIGRjdHgtPm1pbl9ub25jZSA9IDA7Ci0r ICAgICAgICBkY3R4LT5tYXhfbm9uY2UgPSAwOwotKyAgICAgICAgZGN0eC0+bWF4X3BlcnMgPSBk Y3R4LT5zZWVkbGVuOwotKyAgICAgICAgZGN0eC0+bWF4X2FkaW4gPSBkY3R4LT5zZWVkbGVuOwot KyAgICB9Ci0rCi0rICAgIGRjdHgtPm1heF9yZXF1ZXN0ID0gMSA8PCAxNjsKLSsgICAgZGN0eC0+ cmVzZWVkX2ludGVydmFsID0gMSA8PCAyNDsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rfQotZGlmZiAt dXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYy5maXBzIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19oYXNoLmMKLS0tLSBvcGVuc3NsLTEuMC4y Zy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42 MTg5MTY1NjggKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdf aGFzaC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE4OTE2NTY4ICswMTAwCi1AQCAtMCwwICsxLDM1 OCBAQAotKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfaGFzaC5jICovCi0rLyogV3JpdHRlbiBieSBE ciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0r ICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAx MSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAg IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0 ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2Fy ZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5P cGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFu ZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBv ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsg KiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBs ZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgotKyAqCi0rICogNS4g UHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9w ZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdp dGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJv amVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVy IG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8v d3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0r ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI QUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7 Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ VElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBU SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsK LSsjZGVmaW5lIE9QRU5TU0xfRklQU0FQSQotKwotKyNpbmNsdWRlIDxzdGRsaWIuaD4KLSsjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNs dWRlICJmaXBzX3JhbmRfbGNsLmgiCi0rCi0rLyogVGhpcyBpcyBIYXNoX2RmIGZyb20gU1AgODAw LTkwIDEwLjQuMSAqLwotKwotK3N0YXRpYyBpbnQgaGFzaF9kZihEUkJHX0NUWCAqZGN0eCwgdW5z aWduZWQgY2hhciAqb3V0LAotKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICppbjEsIHNpemVfdCBpbjFsZW4sCi0rICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKLSsgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuLAotKyAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICppbjQsIHNpemVfdCBpbjRsZW4pCi0rewotKyAgICBFVlBfTURfQ1RY ICptY3R4ID0gJmRjdHgtPmQuaGFzaC5tY3R4OwotKyAgICB1bnNpZ25lZCBjaGFyICp2dG1wID0g ZGN0eC0+ZC5oYXNoLnZ0bXA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgdG1wWzZdOwotKyAgICAvKiBT dGFuZGFyZCBvbmx5IGV2ZXIgbmVlZHMgc2VlZGxlbiBieXRlcyB3aGljaCBpcyBhbHdheXMgbGVz cyB0aGFuCi0rICAgICAqIG1heGltdW0gcGVybWl0dGVkIHNvIG5vIG5lZWQgdG8gY2hlY2sgbGVu Z3RoLgotKyAgICAgKi8KLSsgICAgc2l6ZV90IG91dGxlbiA9IGRjdHgtPnNlZWRsZW47Ci0rICAg IHRtcFswXSA9IDE7Ci0rICAgIHRtcFsxXSA9ICgob3V0bGVuICogOCkgPj4gMjQpICYgMHhmZjsK LSsgICAgdG1wWzJdID0gKChvdXRsZW4gKiA4KSA+PiAxNikgJiAweGZmOwotKyAgICB0bXBbM10g PSAoKG91dGxlbiAqIDgpID4+IDgpICYgMHhmZjsKLSsgICAgdG1wWzRdID0gKG91dGxlbiAqIDgp ICYgMHhmZjsKLSsgICAgaWYgKCFpbjEpIHsKLSsgICAgICAgIHRtcFs1XSA9ICh1bnNpZ25lZCBj aGFyKWluMWxlbjsKLSsgICAgICAgIGluMSA9IHRtcCArIDU7Ci0rICAgICAgICBpbjFsZW4gPSAx OwotKyAgICB9Ci0rICAgIGZvciAoOzspIHsKLSsgICAgICAgIGlmICghRklQU19kaWdlc3Rpbml0 KG1jdHgsIGRjdHgtPmQuaGFzaC5tZCkpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAg ICBpZiAoIUZJUFNfZGlnZXN0dXBkYXRlKG1jdHgsIHRtcCwgNSkpCi0rICAgICAgICAgICAgcmV0 dXJuIDA7Ci0rICAgICAgICBpZiAoaW4xICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjEs IGluMWxlbikpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBpZiAoaW4yICYmICFG SVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjIsIGluMmxlbikpCi0rICAgICAgICAgICAgcmV0dXJu IDA7Ci0rICAgICAgICBpZiAoaW4zICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjMsIGlu M2xlbikpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBpZiAoaW40ICYmICFGSVBT X2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjQsIGluNGxlbikpCi0rICAgICAgICAgICAgcmV0dXJuIDA7 Ci0rICAgICAgICBpZiAob3V0bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpIHsKLSsgICAgICAgICAg ICBpZiAoIUZJUFNfZGlnZXN0ZmluYWwobWN0eCwgdnRtcCwgTlVMTCkpCi0rICAgICAgICAgICAg ICAgIHJldHVybiAwOwotKyAgICAgICAgICAgIG1lbWNweShvdXQsIHZ0bXAsIG91dGxlbik7Ci0r ICAgICAgICAgICAgT1BFTlNTTF9jbGVhbnNlKHZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsg ICAgICAgICAgICByZXR1cm4gMTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIUZJUFNfZGlnZXN0Zmlu YWwobWN0eCwgb3V0LCBOVUxMKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgICAg IG91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsgICAgICAgIGlmIChvdXRsZW4gPT0gMCkK LSsgICAgICAgICAgICByZXR1cm4gMTsKLSsgICAgICAgIHRtcFswXSsrOwotKyAgICAgICAgb3V0 ICs9IGRjdHgtPmJsb2NrbGVuZ3RoOwotKyAgICB9Ci0rfQotKwotKy8qIEFkZCBhbiB1bnNpZ25l ZCBidWZmZXIgdG8gdGhlIGJ1ZiB2YWx1ZSwgc3RvcmluZyB0aGUgcmVzdWx0IGluIGJ1Zi4gRm9y Ci0rICogdGhpcyBhbGdvcml0aG0gdGhlIGxlbmd0aCBvZiBpbnB1dCBuZXZlciBleGNlZWRzIHRo ZSBzZWVkIGxlbmd0aC4KLSsgKi8KLSsKLStzdGF0aWMgdm9pZCBjdHhfYWRkX2J1ZihEUkJHX0NU WCAqZGN0eCwgdW5zaWduZWQgY2hhciAqYnVmLAotKyAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgKmluLCBzaXplX3QgaW5sZW4pCi0rewotKyAgICBzaXplX3QgaSA9IGlubGVu OwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxOwotKyAgICB1bnNpZ25lZCBjaGFyIGMsICpw OwotKyAgICBwID0gYnVmICsgZGN0eC0+c2VlZGxlbjsKLSsgICAgcSA9IGluICsgaW5sZW47Ci0r Ci0rICAgIE9QRU5TU0xfYXNzZXJ0KGkgPD0gZGN0eC0+c2VlZGxlbik7Ci0rCi0rICAgIC8qIFNw ZWNpYWwgY2FzZTogemVybyBsZW5ndGgsIGp1c3QgaW5jcmVtZW50IGJ1ZmZlciAqLwotKyAgICBp ZiAoaSkKLSsgICAgICAgIGMgPSAwOwotKyAgICBlbHNlCi0rICAgICAgICBjID0gMTsKLSsKLSsg ICAgd2hpbGUgKGkpIHsKLSsgICAgICAgIGludCByOwotKyAgICAgICAgcC0tOwotKyAgICAgICAg cS0tOwotKyAgICAgICAgciA9ICpwICsgKnEgKyBjOwotKyAgICAgICAgLyogQ2FycnkgKi8KLSsg ICAgICAgIGlmIChyID4gMHhmZikKLSsgICAgICAgICAgICBjID0gMTsKLSsgICAgICAgIGVsc2UK LSsgICAgICAgICAgICBjID0gMDsKLSsgICAgICAgICpwID0gciAmIDB4ZmY7Ci0rICAgICAgICBp LS07Ci0rICAgIH0KLSsKLSsgICAgaSA9IGRjdHgtPnNlZWRsZW4gLSBpbmxlbjsKLSsKLSsgICAg LyogSWYgbm90IGFkZGluZyB3aG9sZSBidWZmZXIgaGFuZGxlIGZpbmFsIGNhcnJpZXMgKi8KLSsg ICAgaWYgKGMgJiYgaSkgewotKyAgICAgICAgZG8gewotKyAgICAgICAgICAgIHAtLTsKLSsgICAg ICAgICAgICBjID0gKnA7Ci0rICAgICAgICAgICAgYysrOwotKyAgICAgICAgICAgICpwID0gYzsK LSsgICAgICAgICAgICBpZiAoYykKLSsgICAgICAgICAgICAgICAgcmV0dXJuOwotKyAgICAgICAg fSB3aGlsZSAoaS0tKTsKLSsgICAgfQotK30KLSsKLSsvKiBGaW5hbGlzZSBhbmQgYWRkIGhhc2gg dG8gViAqLwotKwotK3N0YXRpYyBpbnQgY3R4X2FkZF9tZChEUkJHX0NUWCAqZGN0eCkKLSt7Ci0r ICAgIGlmICghRklQU19kaWdlc3RmaW5hbCgmZGN0eC0+ZC5oYXNoLm1jdHgsIGRjdHgtPmQuaGFz aC52dG1wLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBjdHhfYWRkX2J1ZihkY3R4 LCBkY3R4LT5kLmhhc2guViwgZGN0eC0+ZC5oYXNoLnZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsK LSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgaGFzaF9nZW4oRFJCR19DVFggKmRj dHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbikKLSt7Ci0rICAgIERSQkdfSEFT SF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKyAgICBpZiAob3V0bGVuID09IDApCi0rICAg ICAgICByZXR1cm4gMTsKLSsgICAgbWVtY3B5KGhjdHgtPnZ0bXAsIGhjdHgtPlYsIGRjdHgtPnNl ZWRsZW4pOwotKyAgICBmb3IgKDs7KSB7Ci0rICAgICAgICBGSVBTX2RpZ2VzdGluaXQoJmhjdHgt Pm1jdHgsIGhjdHgtPm1kKTsKLSsgICAgICAgIEZJUFNfZGlnZXN0dXBkYXRlKCZoY3R4LT5tY3R4 LCBoY3R4LT52dG1wLCBkY3R4LT5zZWVkbGVuKTsKLSsgICAgICAgIGlmICghKGRjdHgtPnhmbGFn cyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpIHsKLSsgICAgICAgICAgICBG SVBTX2RpZ2VzdGZpbmFsKCZoY3R4LT5tY3R4LCBkY3R4LT5sYiwgTlVMTCk7Ci0rICAgICAgICAg ICAgZGN0eC0+bGJfdmFsaWQgPSAxOwotKyAgICAgICAgfSBlbHNlIGlmIChvdXRsZW4gPCBkY3R4 LT5ibG9ja2xlbmd0aCkgewotKyAgICAgICAgICAgIEZJUFNfZGlnZXN0ZmluYWwoJmhjdHgtPm1j dHgsIGhjdHgtPnZ0bXAsIE5VTEwpOwotKyAgICAgICAgICAgIGlmICghZmlwc19kcmJnX2Nwcm5n X3Rlc3QoZGN0eCwgaGN0eC0+dnRtcCkpCi0rICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAg ICAgICAgICAgIG1lbWNweShvdXQsIGhjdHgtPnZ0bXAsIG91dGxlbik7Ci0rICAgICAgICAgICAg cmV0dXJuIDE7Ci0rICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIEZJUFNfZGlnZXN0Zmlu YWwoJmhjdHgtPm1jdHgsIG91dCwgTlVMTCk7Ci0rICAgICAgICAgICAgaWYgKCFmaXBzX2RyYmdf Y3BybmdfdGVzdChkY3R4LCBvdXQpKQotKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAg ICAgICAgICBvdXRsZW4gLT0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rICAgICAgICAgICAgaWYgKG91 dGxlbiA9PSAwKQotKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSsgICAgICAgICAgICBvdXQg Kz0gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rICAgICAgICB9Ci0rICAgICAgICBjdHhfYWRkX2J1Zihk Y3R4LCBoY3R4LT52dG1wLCBOVUxMLCAwKTsKLSsgICAgfQotK30KLSsKLStzdGF0aWMgaW50IGRy YmdfaGFzaF9pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5v bmNlLCBzaXplX3Qgbm9uY2VfbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBzdHIsIHNpemVfdCBwc3RyX2xlbikKLSt7Ci0rICAgIERS QkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKyAgICBpZiAoIWhhc2hfZGYoZGN0 eCwgaGN0eC0+ViwKLSsgICAgICAgICAgICAgICAgIGVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNl X2xlbiwgcHN0ciwgcHN0cl9sZW4sIE5VTEwsIDApKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IGlmICghaGFzaF9kZihkY3R4LCBoY3R4LT5DLAotKyAgICAgICAgICAgICAgICAgTlVMTCwgMCwg aGN0eC0+ViwgZGN0eC0+c2VlZGxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCi0rICAgICAgICByZXR1 cm4gMDsKLSsKLSsjaWZkZWYgSEFTSF9EUkJHX1RSQUNFCi0rICAgIGZwcmludGYoc3RkZXJyLCAi VitDIGFmdGVyIGluc3RhbnRpYXRlOlxuIik7Ci0rICAgIGhleHByaW50KHN0ZGVyciwgaGN0eC0+ ViwgZGN0eC0+c2VlZGxlbik7Ci0rICAgIGhleHByaW50KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+ c2VlZGxlbik7Ci0rI2VuZGlmCi0rICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50IGRy YmdfaGFzaF9yZXNlZWQoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlu X2xlbikKLSt7Ci0rICAgIERSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOwotKyAg ICAvKiBWIGFib3V0IHRvIGJlIHVwZGF0ZWQgc28gdXNlIEMgYXMgb3V0cHV0IGluc3RlYWQgKi8K LSsgICAgaWYgKCFoYXNoX2RmKGRjdHgsIGhjdHgtPkMsCi0rICAgICAgICAgICAgICAgICBOVUxM LCAxLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuLAotKyAgICAgICAgICAgICAgICAgZW50LCBlbnRf bGVuLCBhZGluLCBhZGluX2xlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgbWVtY3B5KGhj dHgtPlYsIGhjdHgtPkMsIGRjdHgtPnNlZWRsZW4pOwotKyAgICBpZiAoIWhhc2hfZGYoZGN0eCwg aGN0eC0+QywgTlVMTCwgMCwKLSsgICAgICAgICAgICAgICAgIGhjdHgtPlYsIGRjdHgtPnNlZWRs ZW4sIE5VTEwsIDAsIE5VTEwsIDApKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rI2lmZGVmIEhBU0hf RFJCR19UUkFDRQotKyAgICBmcHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciByZXNlZWQ6XG4iKTsK LSsgICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKLSsgICAgaGV4 cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsKLSsjZW5kaWYKLSsgICAgcmV0 dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19oYXNoX2dlbmVyYXRlKERSQkdfQ1RYICpk Y3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwg c2l6ZV90IG91dGxlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCi0rewotKyAgICBEUkJHX0hBU0hfQ1RY ICpoY3R4ID0gJmRjdHgtPmQuaGFzaDsKLSsgICAgRVZQX01EX0NUWCAqbWN0eCA9ICZoY3R4LT5t Y3R4OwotKyAgICB1bnNpZ25lZCBjaGFyIHRtcFs0XTsKLSsgICAgaWYgKGFkaW4gJiYgYWRpbl9s ZW4pIHsKLSsgICAgICAgIHRtcFswXSA9IDI7Ci0rICAgICAgICBpZiAoIUZJUFNfZGlnZXN0aW5p dChtY3R4LCBoY3R4LT5tZCkpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBpZiAo IUVWUF9EaWdlc3RVcGRhdGUobWN0eCwgdG1wLCAxKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsK LSsgICAgICAgIGlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5WLCBkY3R4LT5zZWVk bGVuKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIGlmICghRVZQX0RpZ2VzdFVw ZGF0ZShtY3R4LCBhZGluLCBhZGluX2xlbikpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAg ICAgICBpZiAoIWN0eF9hZGRfbWQoZGN0eCkpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAg IH0KLSsgICAgaWYgKCFoYXNoX2dlbihkY3R4LCBvdXQsIG91dGxlbikpCi0rICAgICAgICByZXR1 cm4gMDsKLSsKLSsgICAgdG1wWzBdID0gMzsKLSsgICAgaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0 eCwgaGN0eC0+bWQpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmICghRVZQX0RpZ2VzdFVw ZGF0ZShtY3R4LCB0bXAsIDEpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmICghRVZQX0Rp Z2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKSkKLSsgICAgICAgIHJldHVy biAwOwotKwotKyAgICBpZiAoIWN0eF9hZGRfbWQoZGN0eCkpCi0rICAgICAgICByZXR1cm4gMDsK LSsKLSsgICAgY3R4X2FkZF9idWYoZGN0eCwgaGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxl bik7Ci0rCi0rICAgIHRtcFswXSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAyNCkgJiAweGZm OwotKyAgICB0bXBbMV0gPSAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gMTYpICYgMHhmZjsKLSsg ICAgdG1wWzJdID0gKGRjdHgtPnJlc2VlZF9jb3VudGVyID4+IDgpICYgMHhmZjsKLSsgICAgdG1w WzNdID0gZGN0eC0+cmVzZWVkX2NvdW50ZXIgJiAweGZmOwotKyAgICBjdHhfYWRkX2J1ZihkY3R4 LCBoY3R4LT5WLCB0bXAsIDQpOwotKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKLSsgICAgZnByaW50 ZihzdGRlcnIsICJWK0MgYWZ0ZXIgZ2VuZXJhdGU6XG4iKTsKLSsgICAgaGV4cHJpbnQoc3RkZXJy LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKLSsgICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5D LCBkY3R4LT5zZWVkbGVuKTsKLSsjZW5kaWYKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRp YyBpbnQgZHJiZ19oYXNoX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0rewotKyAgICBF VlBfTURfQ1RYX2NsZWFudXAoJmRjdHgtPmQuaGFzaC5tY3R4KTsKLSsgICAgT1BFTlNTTF9jbGVh bnNlKCZkY3R4LT5kLmhhc2gsIHNpemVvZihEUkJHX0hBU0hfQ1RYKSk7Ci0rICAgIHJldHVybiAx OwotK30KLSsKLStpbnQgZmlwc19kcmJnX2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0eCkKLSt7Ci0r ICAgIGNvbnN0IEVWUF9NRCAqbWQ7Ci0rICAgIERSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ ZC5oYXNoOwotKyAgICBtZCA9IEZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGRjdHgtPnR5cGUpOwotKyAg ICBpZiAoIW1kKQotKyAgICAgICAgcmV0dXJuIC0yOwotKyAgICBzd2l0Y2ggKGRjdHgtPnR5cGUp IHsKLSsgICAgY2FzZSBOSURfc2hhMToKLSsgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTI4Owot KyAgICAgICAgYnJlYWs7Ci0rCi0rICAgIGNhc2UgTklEX3NoYTIyNDoKLSsgICAgICAgIGRjdHgt PnN0cmVuZ3RoID0gMTkyOwotKyAgICAgICAgYnJlYWs7Ci0rCi0rICAgIGRlZmF1bHQ6Ci0rICAg ICAgICBkY3R4LT5zdHJlbmd0aCA9IDI1NjsKLSsgICAgICAgIGJyZWFrOwotKyAgICB9Ci0rCi0r ICAgIGRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19oYXNoX2luc3RhbnRpYXRlOwotKyAgICBkY3R4 LT5yZXNlZWQgPSBkcmJnX2hhc2hfcmVzZWVkOwotKyAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdf aGFzaF9nZW5lcmF0ZTsKLSsgICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaGFzaF91bmlu c3RhbnRpYXRlOwotKwotKyAgICBkY3R4LT5kLmhhc2gubWQgPSBtZDsKLSsgICAgRVZQX01EX0NU WF9pbml0KCZoY3R4LT5tY3R4KTsKLSsKLSsgICAgLyogVGhlc2UgYXJlIHRha2VuIGZyb20gU1Ag ODAwLTkwIDEwLjEgdGFibGUgMiAqLwotKwotKyAgICBkY3R4LT5ibG9ja2xlbmd0aCA9IE1fRVZQ X01EX3NpemUobWQpOwotKyAgICBpZiAoZGN0eC0+YmxvY2tsZW5ndGggPiAzMikKLSsgICAgICAg IGRjdHgtPnNlZWRsZW4gPSAxMTE7Ci0rICAgIGVsc2UKLSsgICAgICAgIGRjdHgtPnNlZWRsZW4g PSA1NTsKLSsKLSsgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7Ci0r ICAgIGRjdHgtPm1heF9lbnRyb3B5ID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICBkY3R4LT5t aW5fbm9uY2UgPSBkY3R4LT5taW5fZW50cm9weSAvIDI7Ci0rICAgIGRjdHgtPm1heF9ub25jZSA9 IERSQkdfTUFYX0xFTkdUSDsKLSsKLSsgICAgZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5H VEg7Ci0rICAgIGRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICBkY3R4 LT5tYXhfcmVxdWVzdCA9IDEgPDwgMTY7Ci0rICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDEg PDwgMjQ7Ci0rCi0rICAgIHJldHVybiAxOwotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2Ny eXB0by9maXBzL2ZpcHNfZHJiZ19obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlw cy9maXBzX2RyYmdfaG1hYy5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19k cmJnX2htYWMuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE5OTE2NTkxICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYwkyMDE2LTAzLTAxIDE2 OjMzOjA3LjYxOTkxNjU5MSArMDEwMAotQEAgLTAsMCArMSwyNzAgQEAKLSsvKiBmaXBzL3JhbmQv Zmlwc19kcmJnX2htYWMuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAo c3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0r LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0r ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0 aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgot KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAg IGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K LSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgot KyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGxpYi5o PgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvYWVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCi0r Ci0rc3RhdGljIGludCBkcmJnX2htYWNfdXBkYXRlKERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFs ZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu Miwgc2l6ZV90IGluMmxlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqaW4zLCBzaXplX3QgaW4zbGVuKQotK3sKLSsgICAgc3RhdGljIHVuc2lnbmVk IGNoYXIgYzAgPSAwLCBjMSA9IDE7Ci0rICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ ZC5obWFjOwotKyAgICBITUFDX0NUWCAqaGN0eCA9ICZobWFjLT5oY3R4OwotKwotKyAgICBpZiAo IUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQs IE5VTEwpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmICghSE1BQ19VcGRhdGUoaGN0eCwg aG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlm ICghSE1BQ19VcGRhdGUoaGN0eCwgJmMwLCAxKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBp ZiAoaW4xbGVuICYmICFITUFDX1VwZGF0ZShoY3R4LCBpbjEsIGluMWxlbikpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgaWYgKGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4yLCBpbjJs ZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChpbjNsZW4gJiYgIUhNQUNfVXBkYXRl KGhjdHgsIGluMywgaW4zbGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBpZiAoIUhN QUNfRmluYWwoaGN0eCwgaG1hYy0+SywgTlVMTCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsg ICAgaWYgKCFITUFDX0luaXRfZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGht YWMtPm1kLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoIUhNQUNfVXBkYXRl KGhjdHgsIGhtYWMtPlYsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKLSsgICAgICAgIHJldHVybiAwOwot KwotKyAgICBpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsKLSsgICAgaWYgKCFpbjFsZW4gJiYgIWluMmxlbiAmJiAhaW4zbGVuKQotKyAg ICAgICAgcmV0dXJuIDE7Ci0rCi0rICAgIGlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkss IGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rICAgICAgICByZXR1cm4gMDsK LSsgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkp Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCAmYzEsIDEp KQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChpbjFsZW4gJiYgIUhNQUNfVXBkYXRlKGhj dHgsIGluMSwgaW4xbGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoaW4ybGVuICYm ICFITUFDX1VwZGF0ZShoY3R4LCBpbjIsIGluMmxlbikpCi0rICAgICAgICByZXR1cm4gMDsKLSsg ICAgaWYgKGluM2xlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQotKyAgICAg ICAgcmV0dXJuIDA7Ci0rCi0rICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxM KSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBo bWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIGlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2ts ZW5ndGgpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIGlmICghSE1BQ19GaW5hbChoY3R4 LCBobWFjLT5WLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICByZXR1cm4gMTsK LSsKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX2htYWNfaW5zdGFudGlhdGUoRFJCR19DVFggKmRj dHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqZW50LCBzaXplX3QgZW50X2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xlbiwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwc3RyLCBzaXpl X3QgcHN0cl9sZW4pCi0rewotKyAgICBEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1h YzsKLSsgICAgbWVtc2V0KGhtYWMtPkssIDAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsgICAgbWVt c2V0KGhtYWMtPlYsIDEsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKLSsgICAgaWYgKCFkcmJnX2htYWNf dXBkYXRlKGRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICBlbnQsIGVudF9sZW4sIG5v bmNlLCBub25jZV9sZW4sIHBzdHIsIHBzdHJfbGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKwot KyNpZmRlZiBITUFDX0RSQkdfVFJBQ0UKLSsgICAgZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIg aW5zdGFudGlhdGU6XG4iKTsKLSsgICAgaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5LLCBobWFjLT5i bG9ja2xlbmd0aCk7Ci0rICAgIGhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2ts ZW5ndGgpOwotKyNlbmRpZgotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJn X2htYWNfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9s ZW4pCi0rewotKyAgICBpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgZW50LCBlbnRfbGVuLCBh ZGluLCBhZGluX2xlbiwgTlVMTCwgMCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsjaWZkZWYg SE1BQ19EUkJHX1RSQUNFCi0rICAgIHsKLSsgICAgICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAm ZGN0eC0+ZC5obWFjOwotKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgcmVzZWVk OlxuIik7Ci0rICAgICAgICBoZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJsb2NrbGVu Z3RoKTsKLSsgICAgICAgIGhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2tsZW5n dGgpOwotKyAgICB9Ci0rI2VuZGlmCi0rICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50 IGRyYmdfaG1hY19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFk aW5fbGVuKQotK3sKLSsgICAgRFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7Ci0r ICAgIEhNQUNfQ1RYICpoY3R4ID0gJmhtYWMtPmhjdHg7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKlZ0bXAgPSBobWFjLT5WOwotKyAgICBpZiAoYWRpbl9sZW4gJiYgIWRyYmdfaG1hY191cGRh dGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sIE5VTEwsIDAsIE5VTEwsIDApKQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIGZvciAoOzspIHsKLSsgICAgICAgIGlmICghSE1BQ19Jbml0X2V4KGhjdHgs IGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCi0rICAgICAgICAg ICAgcmV0dXJuIDA7Ci0rICAgICAgICBpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIFZ0bXAsIGRjdHgt PmJsb2NrbGVuZ3RoKSkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIGlmICghKGRj dHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpIHsKLSsgICAg ICAgICAgICBpZiAoIUhNQUNfRmluYWwoaGN0eCwgZGN0eC0+bGIsIE5VTEwpKQotKyAgICAgICAg ICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICBkY3R4LT5sYl92YWxpZCA9IDE7Ci0rICAg ICAgICAgICAgVnRtcCA9IGRjdHgtPmxiOwotKyAgICAgICAgICAgIGNvbnRpbnVlOwotKyAgICAg ICAgfSBlbHNlIGlmIChvdXRsZW4gPiBkY3R4LT5ibG9ja2xlbmd0aCkgewotKyAgICAgICAgICAg IGlmICghSE1BQ19GaW5hbChoY3R4LCBvdXQsIE5VTEwpKQotKyAgICAgICAgICAgICAgICByZXR1 cm4gMDsKLSsgICAgICAgICAgICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkp Ci0rICAgICAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgICAgIFZ0bXAgPSBvdXQ7Ci0r ICAgICAgICB9IGVsc2UgewotKyAgICAgICAgICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBobWFj LT5WLCBOVUxMKSkKLSsgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICAgICAgaWYg KCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBobWFjLT5WKSkKLSsgICAgICAgICAgICAgICAg cmV0dXJuIDA7Ci0rICAgICAgICAgICAgbWVtY3B5KG91dCwgaG1hYy0+Viwgb3V0bGVuKTsKLSsg ICAgICAgICAgICBicmVhazsKLSsgICAgICAgIH0KLSsgICAgICAgIG91dCArPSBkY3R4LT5ibG9j a2xlbmd0aDsKLSsgICAgICAgIG91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKLSsgICAgfQot KyAgICBpZiAoIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sIE5VTEwsIDAs IE5VTEwsIDApKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIHJldHVybiAxOwotK30KLSsK LStzdGF0aWMgaW50IGRyYmdfaG1hY191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQotK3sK LSsgICAgSE1BQ19DVFhfY2xlYW51cCgmZGN0eC0+ZC5obWFjLmhjdHgpOwotKyAgICBPUEVOU1NM X2NsZWFuc2UoJmRjdHgtPmQuaG1hYywgc2l6ZW9mKERSQkdfSE1BQ19DVFgpKTsKLSsgICAgcmV0 dXJuIDE7Ci0rfQotKwotK2ludCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KQot K3sKLSsgICAgY29uc3QgRVZQX01EICptZCA9IE5VTEw7Ci0rICAgIERSQkdfSE1BQ19DVFggKmhj dHggPSAmZGN0eC0+ZC5obWFjOwotKyAgICBkY3R4LT5zdHJlbmd0aCA9IDI1NjsKLSsgICAgc3dp dGNoIChkY3R4LT50eXBlKSB7Ci0rICAgIGNhc2UgTklEX2htYWNXaXRoU0hBMToKLSsgICAgICAg IG1kID0gRVZQX3NoYTEoKTsKLSsgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTI4OwotKyAgICAg ICAgYnJlYWs7Ci0rCi0rICAgIGNhc2UgTklEX2htYWNXaXRoU0hBMjI0OgotKyAgICAgICAgbWQg PSBFVlBfc2hhMjI0KCk7Ci0rICAgICAgICBkY3R4LT5zdHJlbmd0aCA9IDE5MjsKLSsgICAgICAg IGJyZWFrOwotKwotKyAgICBjYXNlIE5JRF9obWFjV2l0aFNIQTI1NjoKLSsgICAgICAgIG1kID0g RVZQX3NoYTI1NigpOwotKyAgICAgICAgYnJlYWs7Ci0rCi0rICAgIGNhc2UgTklEX2htYWNXaXRo U0hBMzg0OgotKyAgICAgICAgbWQgPSBFVlBfc2hhMzg0KCk7Ci0rICAgICAgICBicmVhazsKLSsK LSsgICAgY2FzZSBOSURfaG1hY1dpdGhTSEE1MTI6Ci0rICAgICAgICBtZCA9IEVWUF9zaGE1MTIo KTsKLSsgICAgICAgIGJyZWFrOwotKwotKyAgICBkZWZhdWx0OgotKyAgICAgICAgZGN0eC0+c3Ry ZW5ndGggPSAwOwotKyAgICAgICAgcmV0dXJuIC0yOwotKyAgICB9Ci0rICAgIGRjdHgtPmluc3Rh bnRpYXRlID0gZHJiZ19obWFjX2luc3RhbnRpYXRlOwotKyAgICBkY3R4LT5yZXNlZWQgPSBkcmJn X2htYWNfcmVzZWVkOwotKyAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaG1hY19nZW5lcmF0ZTsK LSsgICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaG1hY191bmluc3RhbnRpYXRlOwotKyAg ICBITUFDX0NUWF9pbml0KCZoY3R4LT5oY3R4KTsKLSsgICAgaGN0eC0+bWQgPSBtZDsKLSsgICAg ZGN0eC0+YmxvY2tsZW5ndGggPSBNX0VWUF9NRF9zaXplKG1kKTsKLSsgICAgZGN0eC0+c2VlZGxl biA9IE1fRVZQX01EX3NpemUobWQpOwotKwotKyAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgt PnN0cmVuZ3RoIC8gODsKLSsgICAgZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7 Ci0rCi0rICAgIGRjdHgtPm1pbl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKLSsgICAg ZGN0eC0+bWF4X25vbmNlID0gRFJCR19NQVhfTEVOR1RIOwotKwotKyAgICBkY3R4LT5tYXhfcGVy cyA9IERSQkdfTUFYX0xFTkdUSDsKLSsgICAgZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5H VEg7Ci0rCi0rICAgIGRjdHgtPm1heF9yZXF1ZXN0ID0gMSA8PCAxNjsKLSsgICAgZGN0eC0+cmVz ZWVkX2ludGVydmFsID0gMSA8PCAyNDsKLSsKLSsgICAgcmV0dXJuIDE7Ci0rfQotZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MTk5MTY1 OTEgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMJ MjAxNi0wMy0wMSAxNjozMzowNy42MTk5MTY1OTEgKzAxMDAKLUBAIC0wLDAgKzEsNTUzIEBACi0r LyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9y IHRoZSBPcGVuU1NMCi0rICogcHJvamVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENv cHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoK LSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK LSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0r ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgbGljZW5zaW5nQE9wZW5TU0wub3Jn LgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5v dCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGlu IHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2Yg dGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkg Zm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3ds ZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBU b29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsg KiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN SVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0r ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO RywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJ TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Y3J5cHRvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wv Zmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgImZpcHNfbG9jbC5oIgotKyNpbmNsdWRlICJmaXBzX3Jh bmRfbGNsLmgiCi0rCi0rLyogU3VwcG9ydCBmcmFtZXdvcmsgZm9yIFNQODAwLTkwIERSQkdzICov Ci0rCi0raW50IEZJUFNfZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBpbnQgdHlwZSwgdW5zaWdu ZWQgaW50IGZsYWdzKQotK3sKLSsgICAgaW50IHJ2OwotKyAgICBtZW1zZXQoZGN0eCwgMCwgc2l6 ZW9mKERSQkdfQ1RYKSk7Ci0rICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElB TElTRUQ7Ci0rICAgIGRjdHgtPnhmbGFncyA9IGZsYWdzOwotKyAgICBkY3R4LT50eXBlID0gdHlw ZTsKLSsKLSsgICAgZGN0eC0+aWZsYWdzID0gMDsKLSsgICAgZGN0eC0+ZW50cm9weV9ibG9ja2xl biA9IDA7Ci0rICAgIGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOwotKyAgICBkY3R4LT5oZWFs dGhfY2hlY2tfaW50ZXJ2YWwgPSBEUkJHX0hFQUxUSF9JTlRFUlZBTDsKLSsKLSsgICAgcnYgPSBm aXBzX2RyYmdfaGFzaF9pbml0KGRjdHgpOwotKwotKyAgICBpZiAocnYgPT0gLTIpCi0rICAgICAg ICBydiA9IGZpcHNfZHJiZ19jdHJfaW5pdChkY3R4KTsKLSsgICAgaWYgKHJ2ID09IC0yKQotKyAg ICAgICAgcnYgPSBmaXBzX2RyYmdfaG1hY19pbml0KGRjdHgpOwotKwotKyAgICBpZiAocnYgPD0g MCkgewotKyAgICAgICAgaWYgKHJ2ID09IC0yKQotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19JTklULCBGSVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFKTsKLSsgICAgICAg IGVsc2UKLSsgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19S X0VSUk9SX0lOSVRJQUxJU0lOR19EUkJHKTsKLSsgICAgfQotKwotKyAgICAvKiBJZiBub3QgaW4g dGVzdCBtb2RlIHJ1biBzZWxmdGVzdHMgb24gRFJCRyBvZiB0aGUgc2FtZSB0eXBlICovCi0rCi0r ICAgIGlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKSkgewotKyAgICAgICAgaWYg KCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKSB7Ci0rICAgICAgICAgICAgRklQU2VycihG SVBTX0ZfRklQU19EUkJHX0lOSVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsKLSsgICAgICAg ICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0KLSsgICAgfQotKwotKyAgICByZXR1cm4gcnY7Ci0r fQotKwotK0RSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxh Z3MpCi0rewotKyAgICBEUkJHX0NUWCAqZGN0eDsKLSsgICAgZGN0eCA9IE9QRU5TU0xfbWFsbG9j KHNpemVvZihEUkJHX0NUWCkpOwotKyAgICBpZiAoIWRjdHgpIHsKLSsgICAgICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19ORVcsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLSsgICAgICAgIHJl dHVybiBOVUxMOwotKyAgICB9Ci0rCi0rICAgIGlmICh0eXBlID09IDApIHsKLSsgICAgICAgIG1l bXNldChkY3R4LCAwLCBzaXplb2YoRFJCR19DVFgpKTsKLSsgICAgICAgIGRjdHgtPnR5cGUgPSAw OwotKyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKLSsg ICAgICAgIHJldHVybiBkY3R4OwotKyAgICB9Ci0rCi0rICAgIGlmIChGSVBTX2RyYmdfaW5pdChk Y3R4LCB0eXBlLCBmbGFncykgPD0gMCkgewotKyAgICAgICAgT1BFTlNTTF9mcmVlKGRjdHgpOwot KyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rICAgIH0KLSsKLSsgICAgcmV0dXJuIGRjdHg7Ci0rfQot KwotK3ZvaWQgRklQU19kcmJnX2ZyZWUoRFJCR19DVFggKmRjdHgpCi0rewotKyAgICBpZiAoZGN0 eC0+dW5pbnN0YW50aWF0ZSkKLSsgICAgICAgIGRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7Ci0r ICAgIC8qIERvbid0IGZyZWUgdXAgZGVmYXVsdCBEUkJHICovCi0rICAgIGlmIChkY3R4ID09IEZJ UFNfZ2V0X2RlZmF1bHRfZHJiZygpKSB7Ci0rICAgICAgICBtZW1zZXQoZGN0eCwgMCwgc2l6ZW9m KERSQkdfQ1RYKSk7Ci0rICAgICAgICBkY3R4LT50eXBlID0gMDsKLSsgICAgICAgIGRjdHgtPnN0 YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7Ci0rICAgIH0gZWxzZSB7Ci0rICAgICAg ICBPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQsIHNpemVvZihkY3R4LT5kKSk7Ci0rICAgICAgICBP UEVOU1NMX2ZyZWUoZGN0eCk7Ci0rICAgIH0KLSt9Ci0rCi0rc3RhdGljIHNpemVfdCBmaXBzX2dl dF9lbnRyb3B5KERSQkdfQ1RYICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXpl X3QgbWF4X2xlbikKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKnRvdXQsICpwOwotKyAgICBzaXpl X3QgYmwgPSBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuLCBydjsKLSsgICAgaWYgKCFkY3R4LT5nZXRf ZW50cm9weSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJC R19GTEFHX1RFU1QgfHwgIWJsKQotKyAgICAgICAgcmV0dXJuIGRjdHgtPmdldF9lbnRyb3B5KGRj dHgsIHBvdXQsIGVudHJvcHksIG1pbl9sZW4sIG1heF9sZW4pOwotKyAgICBydiA9IGRjdHgtPmdl dF9lbnRyb3B5KGRjdHgsICZ0b3V0LCBlbnRyb3B5ICsgYmwsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWluX2xlbiArIGJsLCBtYXhfbGVuICsgYmwpOwotKyAgICBpZiAodG91dCA9PSBO VUxMKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgICpwb3V0ID0gdG91dCArIGJsOwotKyAgICBp ZiAocnYgPCAobWluX2xlbiArIGJsKSB8fCAocnYgJSBibCkpCi0rICAgICAgICByZXR1cm4gMDsK LSsgICAgLyogQ29tcGFyZSBjb25zZWN1dGl2ZSBibG9ja3MgZm9yIGNvbnRpbnVvdXMgUFJORyB0 ZXN0ICovCi0rICAgIGZvciAocCA9IHRvdXQ7IHAgPCB0b3V0ICsgcnYgLSBibDsgcCArPSBibCkg ewotKyAgICAgICAgaWYgKCFtZW1jbXAocCwgcCArIGJsLCBibCkpIHsKLSsgICAgICAgICAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX0dFVF9FTlRST1BZLCBGSVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RV Q0spOwotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIHJ2 IC09IGJsOwotKyAgICBpZiAocnYgPiBtYXhfbGVuKQotKyAgICAgICAgcmV0dXJuIG1heF9sZW47 Ci0rICAgIHJldHVybiBydjsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19jbGVhbnVwX2VudHJv cHkoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbikKLSt7Ci0rICAgIHNpemVfdCBibDsKLSsgICAg aWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQotKyAgICAgICAgYmwgPSAwOwotKyAg ICBlbHNlCi0rICAgICAgICBibCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW47Ci0rICAgIC8qIENh bGwgY2xlYW51cCB3aXRoIG9yaWdpbmFsIGFyZ3VtZW50cyAqLwotKyAgICBkY3R4LT5jbGVhbnVw X2VudHJvcHkoZGN0eCwgb3V0IC0gYmwsIG9sZW4gKyBibCk7Ci0rfQotKwotK2ludCBGSVBTX2Ry YmdfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbikKLSt7Ci0rICAgIHNp emVfdCBlbnRsZW4gPSAwLCBub25jZWxlbiA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgKm5vbmNl ID0gTlVMTCwgKmVudHJvcHkgPSBOVUxMOwotKwotKyNpZiAwCi0rICAgIC8qIFB1dCBoZXJlIHNv IGVycm9yIHNjcmlwdCBwaWNrcyB0aGVtIHVwICovCi0rICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19JTlNUQU5USUFURSwKLSsgICAgICAgICAgICBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NU UklOR19UT09fTE9ORyk7Ci0rICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFU RSwgRklQU19SX0lOX0VSUk9SX1NUQVRFKTsKLSsgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0lOU1RBTlRJQVRFLCBGSVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQpOwotKyAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VO VFJPUFkpOwotKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNf Ul9FUlJPUl9SRVRSSUVWSU5HX05PTkNFKTsKLSsgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJH X0lOU1RBTlRJQVRFLCBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IpOwotKyAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRCk7 Ci0rI2VuZGlmCi0rCi0rICAgIGludCByID0gMDsKLSsKLSsgICAgaWYgKHBlcnNsZW4gPiBkY3R4 LT5tYXhfcGVycykgewotKyAgICAgICAgciA9IEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5H X1RPT19MT05HOwotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCFkY3R4 LT5pbnN0YW50aWF0ZSkgewotKyAgICAgICAgciA9IEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNF RDsKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICB9Ci0rCi0rICAgIGlmIChkY3R4LT5zdGF0dXMg IT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkgewotKyAgICAgICAgaWYgKGRjdHgtPnN0YXR1 cyA9PSBEUkJHX1NUQVRVU19FUlJPUikKLSsgICAgICAgICAgICByID0gRklQU19SX0lOX0VSUk9S X1NUQVRFOwotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAgIHIgPSBGSVBTX1JfQUxSRUFEWV9J TlNUQU5USUFURUQ7Ci0rICAgICAgICBnb3RvIGVuZDsKLSsgICAgfQotKwotKyAgICBkY3R4LT5z dGF0dXMgPSBEUkJHX1NUQVRVU19FUlJPUjsKLSsKLSsgICAgZW50bGVuID0gZmlwc19nZXRfZW50 cm9weShkY3R4LCAmZW50cm9weSwgZGN0eC0+c3RyZW5ndGgsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGN0eC0+bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsKLSsKLSsg ICAgaWYgKGVudGxlbiA8IGRjdHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9l bnRyb3B5KSB7Ci0rICAgICAgICByID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsK LSsgICAgICAgIGdvdG8gZW5kOwotKyAgICB9Ci0rCi0rICAgIGlmIChkY3R4LT5tYXhfbm9uY2Ug PiAwICYmIGRjdHgtPmdldF9ub25jZSkgewotKyAgICAgICAgbm9uY2VsZW4gPSBkY3R4LT5nZXRf bm9uY2UoZGN0eCwgJm5vbmNlLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGN0eC0+c3RyZW5ndGggLyAyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGN0eC0+bWluX25vbmNlLCBkY3R4LT5tYXhfbm9uY2UpOwotKwotKyAgICAgICAgaWYgKG5vbmNl bGVuIDwgZGN0eC0+bWluX25vbmNlIHx8IG5vbmNlbGVuID4gZGN0eC0+bWF4X25vbmNlKSB7Ci0r ICAgICAgICAgICAgciA9IEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFOwotKyAgICAgICAg ICAgIGdvdG8gZW5kOwotKyAgICAgICAgfQotKwotKyAgICB9Ci0rCi0rICAgIGlmICghZGN0eC0+ aW5zdGFudGlhdGUoZGN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyb3B5LCBl bnRsZW4sIG5vbmNlLCBub25jZWxlbiwgcGVycywgcGVyc2xlbikpIHsKLSsgICAgICAgIHIgPSBG SVBTX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHOwotKyAgICAgICAgZ290byBlbmQ7Ci0rICAg IH0KLSsKLSsgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVBRFk7Ci0rICAgIGlmICgh KGRjdHgtPmlmbGFncyAmIERSQkdfQ1VTVE9NX1JFU0VFRCkpCi0rICAgICAgICBkY3R4LT5yZXNl ZWRfY291bnRlciA9IDE7Ci0rCi0rIGVuZDoKLSsKLSsgICAgaWYgKGVudHJvcHkgJiYgZGN0eC0+ Y2xlYW51cF9lbnRyb3B5KQotKyAgICAgICAgZmlwc19jbGVhbnVwX2VudHJvcHkoZGN0eCwgZW50 cm9weSwgZW50bGVuKTsKLSsKLSsgICAgaWYgKG5vbmNlICYmIGRjdHgtPmNsZWFudXBfbm9uY2Up Ci0rICAgICAgICBkY3R4LT5jbGVhbnVwX25vbmNlKGRjdHgsIG5vbmNlLCBub25jZWxlbik7Ci0r Ci0rICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCi0rICAgICAgICBy ZXR1cm4gMTsKLSsKLSsgICAgaWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9F UlIpKQotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCByKTsK LSsKLSsgICAgcmV0dXJuIDA7Ci0rCi0rfQotKwotK3N0YXRpYyBpbnQgZHJiZ19yZXNlZWQoRFJC R19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy ICphZGluLCBzaXplX3QgYWRpbmxlbiwgaW50IGhjaGVjaykKLSt7Ci0rICAgIHVuc2lnbmVkIGNo YXIgKmVudHJvcHkgPSBOVUxMOwotKyAgICBzaXplX3QgZW50bGVuID0gMDsKLSsgICAgaW50IHIg PSAwOwotKwotKyNpZiAwCi0rICAgIEZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1Jf Tk9UX0lOU1RBTlRJQVRFRCk7Ci0rICAgIEZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBT X1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORyk7Ci0rI2VuZGlmCi0rICAgIGlmIChkY3R4LT5z dGF0dXMgIT0gRFJCR19TVEFUVVNfUkVBRFkKLSsgICAgICAgICYmIGRjdHgtPnN0YXR1cyAhPSBE UkJHX1NUQVRVU19SRVNFRUQpIHsKLSsgICAgICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19T VEFUVVNfRVJST1IpCi0rICAgICAgICAgICAgciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKLSsg ICAgICAgIGVsc2UgaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VE KQotKyAgICAgICAgICAgIHIgPSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRDsKLSsgICAgICAgIGdv dG8gZW5kOwotKyAgICB9Ci0rCi0rICAgIGlmICghYWRpbikKLSsgICAgICAgIGFkaW5sZW4gPSAw OwotKyAgICBlbHNlIGlmIChhZGlubGVuID4gZGN0eC0+bWF4X2FkaW4pIHsKLSsgICAgICAgIHIg PSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9UT09fTE9ORzsKLSsgICAgICAgIGdvdG8gZW5kOwot KyAgICB9Ci0rCi0rICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOwotKyAgICAv KiBQZWZvcm0gaGVhbHRoIGNoZWNrIG9uIGFsbCByZXNlZWQgb3BlcmF0aW9ucyBpZiBub3QgYSBw cmVkaWN0aW9uCi0rICAgICAqIHJlc2lzdGFuY2UgcmVxdWVzdCBhbmQgbm90IGluIHRlc3QgbW9k ZS4KLSsgICAgICovCi0rICAgIGlmIChoY2hlY2sgJiYgIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZM QUdfVEVTVCkpIHsKLSsgICAgICAgIGlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkg ewotKyAgICAgICAgICAgIHIgPSBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRTsKLSsgICAgICAgICAg ICBnb3RvIGVuZDsKLSsgICAgICAgIH0KLSsgICAgfQotKwotKyAgICBlbnRsZW4gPSBmaXBzX2dl dF9lbnRyb3B5KGRjdHgsICZlbnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkY3R4LT5taW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOwot KwotKyAgICBpZiAoZW50bGVuIDwgZGN0eC0+bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+ bWF4X2VudHJvcHkpIHsKLSsgICAgICAgIHIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRS T1BZOwotKyAgICAgICAgZ290byBlbmQ7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCFkY3R4LT5yZXNl ZWQoZGN0eCwgZW50cm9weSwgZW50bGVuLCBhZGluLCBhZGlubGVuKSkKLSsgICAgICAgIGdvdG8g ZW5kOwotKwotKyAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKLSsgICAgaWYg KCEoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKSkKLSsgICAgICAgIGRjdHgtPnJl c2VlZF9jb3VudGVyID0gMTsKLSsgZW5kOgotKwotKyAgICBpZiAoZW50cm9weSAmJiBkY3R4LT5j bGVhbnVwX2VudHJvcHkpCi0rICAgICAgICBmaXBzX2NsZWFudXBfZW50cm9weShkY3R4LCBlbnRy b3B5LCBlbnRsZW4pOwotKwotKyAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JF QURZKQotKyAgICAgICAgcmV0dXJuIDE7Ci0rCi0rICAgIGlmIChyICYmICEoZGN0eC0+aWZsYWdz ICYgRFJCR19GTEFHX05PRVJSKSkKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVE LCByKTsKLSsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKwotK2ludCBGSVBTX2RyYmdfcmVzZWVkKERS QkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmFkaW4sIHNpemVfdCBhZGlubGVuKQotK3sKLSsgICAgcmV0dXJuIGRyYmdfcmVzZWVkKGRjdHgs IGFkaW4sIGFkaW5sZW4sIDEpOwotK30KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19jaGVjayhE UkJHX0NUWCAqZGN0eCkKLSt7Ci0rICAgIGlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVT VCkKLSsgICAgICAgIHJldHVybiAxOwotKyAgICBkY3R4LT5oZWFsdGhfY2hlY2tfY250Kys7Ci0r ICAgIGlmIChkY3R4LT5oZWFsdGhfY2hlY2tfY250ID49IGRjdHgtPmhlYWx0aF9jaGVja19pbnRl cnZhbCkgewotKyAgICAgICAgaWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKSB7Ci0r ICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NIRUNLLCBGSVBTX1JfU0VMRlRF U1RfRkFJTFVSRSk7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICB9Ci0rICAgIH0K LSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK2ludCBGSVBTX2RyYmdfZ2VuZXJhdGUoRFJCR19DVFgg KmRjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKLSsgICAgICAgICAgICAg ICAgICAgICAgIGludCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UsCi0rICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKLSt7Ci0rICAg IGludCByID0gMDsKLSsKLSsgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAg ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSwgRklQU19SX1NFTEZURVNUX0ZB SUxFRCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAgICBpZiAoIWZpcHNfZHJi Z19jaGVjayhkY3R4KSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBpZiAoZGN0eC0+c3Rh dHVzICE9IERSQkdfU1RBVFVTX1JFQURZCi0rICAgICAgICAmJiBkY3R4LT5zdGF0dXMgIT0gRFJC R19TVEFUVVNfUkVTRUVEKSB7Ci0rICAgICAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RB VFVTX0VSUk9SKQotKyAgICAgICAgICAgIHIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7Ci0rICAg ICAgICBlbHNlIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkK LSsgICAgICAgICAgICByID0gRklQU19SX05PVF9JTlNUQU5USUFURUQ7Ci0rICAgICAgICBnb3Rv IGVuZDsKLSsgICAgfQotKwotKyAgICBpZiAob3V0bGVuID4gZGN0eC0+bWF4X3JlcXVlc3QpIHsK LSsgICAgICAgIHIgPSBGSVBTX1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkc7Ci0rICAgICAg ICByZXR1cm4gMDsKLSsgICAgfQotKwotKyAgICBpZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGlu KSB7Ci0rICAgICAgICByID0gRklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkc7Ci0rICAg ICAgICBnb3RvIGVuZDsKLSsgICAgfQotKwotKyAgICBpZiAoZGN0eC0+aWZsYWdzICYgRFJCR19D VVNUT01fUkVTRUVEKQotKyAgICAgICAgZGN0eC0+Z2VuZXJhdGUoZGN0eCwgTlVMTCwgb3V0bGVu LCBOVUxMLCAwKTsKLSsgICAgZWxzZSBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+ cmVzZWVkX2ludGVydmFsKQotKyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVT RUVEOwotKwotKyAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFU0VFRCB8fCBw cmVkaWN0aW9uX3Jlc2lzdGFuY2UpIHsKLSsgICAgICAgIC8qIElmIHByZWRpY3Rpb24gcmVzaXN0 YW5jZSByZXF1ZXN0IGRvbid0IGRvIGhlYWx0aCBjaGVjayAqLwotKyAgICAgICAgaW50IGhjaGVj ayA9IHByZWRpY3Rpb25fcmVzaXN0YW5jZSA/IDAgOiAxOwotKwotKyAgICAgICAgaWYgKCFkcmJn X3Jlc2VlZChkY3R4LCBhZGluLCBhZGlubGVuLCBoY2hlY2spKSB7Ci0rICAgICAgICAgICAgciA9 IEZJUFNfUl9SRVNFRURfRVJST1I7Ci0rICAgICAgICAgICAgZ290byBlbmQ7Ci0rICAgICAgICB9 Ci0rICAgICAgICBhZGluID0gTlVMTDsKLSsgICAgICAgIGFkaW5sZW4gPSAwOwotKyAgICB9Ci0r Ci0rICAgIGlmICghZGN0eC0+Z2VuZXJhdGUoZGN0eCwgb3V0LCBvdXRsZW4sIGFkaW4sIGFkaW5s ZW4pKSB7Ci0rICAgICAgICByID0gRklQU19SX0dFTkVSQVRFX0VSUk9SOwotKyAgICAgICAgZGN0 eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7Ci0rICAgICAgICBnb3RvIGVuZDsKLSsgICAg fQotKyAgICBpZiAoIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKSB7Ci0rICAg ICAgICBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQot KyAgICAgICAgICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKLSsgICAgICAg IGVsc2UKLSsgICAgICAgICAgICBkY3R4LT5yZXNlZWRfY291bnRlcisrOwotKyAgICB9Ci0rCi0r IGVuZDoKLSsgICAgaWYgKHIpIHsKLSsgICAgICAgIGlmICghKGRjdHgtPmlmbGFncyAmIERSQkdf RkxBR19OT0VSUikpCi0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0dFTkVS QVRFLCByKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rCi0rICAgIHJldHVybiAxOwot K30KLSsKLStpbnQgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCi0rewot KyAgICBpbnQgcnY7Ci0rICAgIGlmICghZGN0eC0+dW5pbnN0YW50aWF0ZSkKLSsgICAgICAgIHJ2 ID0gMTsKLSsgICAgZWxzZQotKyAgICAgICAgcnYgPSBkY3R4LT51bmluc3RhbnRpYXRlKGRjdHgp OwotKyAgICAvKiBBbHRob3VnaCB3ZSdkIGxpa2UgdG8gY2xlYW5zZSBoZXJlIHdlIGNhbid0IGJl Y2F1c2Ugd2UgaGF2ZSB0bwotKyAgICAgKiB0ZXN0IHRoZSB1bmluc3RhbnRpYXRlIHJlYWxseSB6 ZXJvZXMgdGhlIGRhdGEuCi0rICAgICAqLwotKyAgICBtZW1zZXQoJmRjdHgtPmQsIDAsIHNpemVv ZihkY3R4LT5kKSk7Ci0rICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElT RUQ7Ci0rICAgIC8qIElmIG1ldGhvZCBoYXMgcHJvYmxlbXMgdW5pbnN0YW50aWF0aW5nLCByZXR1 cm4gZXJyb3IgKi8KLSsgICAgcmV0dXJuIHJ2OwotK30KLSsKLStpbnQgRklQU19kcmJnX3NldF9j YWxsYmFja3MoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCAoKmdldF9lbnRyb3B5KSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50 cm9weSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgbWluX2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgbWF4X2xlbiksCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKCpjbGVhbnVwX2VudHJvcHkpIChEUkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAq b3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IG9sZW4pLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZW50 cm9weV9ibG9ja2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICgqZ2V0 X25vbmNlKSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWlu X2xlbiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IG1heF9sZW4pLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2xl YW51cF9ub25jZSkgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSkKLSt7 Ci0rICAgIGlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuID0gZW50cm9weV9i bG9ja2xlbjsKLSsgICAgZGN0eC0+Z2V0X2VudHJvcHkgPSBnZXRfZW50cm9weTsKLSsgICAgZGN0 eC0+Y2xlYW51cF9lbnRyb3B5ID0gY2xlYW51cF9lbnRyb3B5OwotKyAgICBkY3R4LT5nZXRfbm9u Y2UgPSBnZXRfbm9uY2U7Ci0rICAgIGRjdHgtPmNsZWFudXBfbm9uY2UgPSBjbGVhbnVwX25vbmNl OwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0raW50IEZJUFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFj a3MoRFJCR19DVFggKmRjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICgqZ2V0X2FkaW4pIChEUkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnBvdXQpLAotKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVwX2FkaW4pIChEUkJH X0NUWCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpyYW5kX3NlZWRfY2IpIChEUkJHX0NUWCAqY3R4 LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHZvaWQgKmJ1ZiwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgbnVtKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgKCpyYW5kX2FkZF9jYikgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsIGlu dCBudW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkb3VibGUgZW50cm9weSkpCi0rewotKyAgICBpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdf U1RBVFVTX1VOSU5JVElBTElTRUQpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgZGN0eC0+Z2V0 X2FkaW4gPSBnZXRfYWRpbjsKLSsgICAgZGN0eC0+Y2xlYW51cF9hZGluID0gY2xlYW51cF9hZGlu OwotKyAgICBkY3R4LT5yYW5kX3NlZWRfY2IgPSByYW5kX3NlZWRfY2I7Ci0rICAgIGRjdHgtPnJh bmRfYWRkX2NiID0gcmFuZF9hZGRfY2I7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSt2b2lkICpG SVBTX2RyYmdfZ2V0X2FwcF9kYXRhKERSQkdfQ1RYICpkY3R4KQotK3sKLSsgICAgcmV0dXJuIGRj dHgtPmFwcF9kYXRhOwotK30KLSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJCR19D VFggKmRjdHgsIHZvaWQgKmFwcF9kYXRhKQotK3sKLSsgICAgZGN0eC0+YXBwX2RhdGEgPSBhcHBf ZGF0YTsKLSt9Ci0rCi0rc2l6ZV90IEZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFgg KmRjdHgpCi0rewotKyAgICByZXR1cm4gZGN0eC0+YmxvY2tsZW5ndGg7Ci0rfQotKwotK2ludCBG SVBTX2RyYmdfZ2V0X3N0cmVuZ3RoKERSQkdfQ1RYICpkY3R4KQotK3sKLSsgICAgcmV0dXJuIGRj dHgtPnN0cmVuZ3RoOwotK30KLSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwo RFJCR19DVFggKmRjdHgsIGludCBpbnRlcnZhbCkKLSt7Ci0rICAgIGRjdHgtPmhlYWx0aF9jaGVj a19pbnRlcnZhbCA9IGludGVydmFsOwotK30KLSsKLSt2b2lkIEZJUFNfZHJiZ19zZXRfcmVzZWVk X2ludGVydmFsKERSQkdfQ1RYICpkY3R4LCBpbnQgaW50ZXJ2YWwpCi0rewotKyAgICBkY3R4LT5y ZXNlZWRfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSt9Ci0rCi0rc3RhdGljIGludCBkcmJnX3N0aWNr ID0gMDsKLSsKLSt2b2lkIEZJUFNfZHJiZ19zdGljayhpbnQgb25vZmYpCi0rewotKyAgICBkcmJn X3N0aWNrID0gb25vZmY7Ci0rfQotKwotKy8qIENvbnRpbnVvdXMgRFJCRyB1dGlsaXR5IGZ1bmN0 aW9uICovCi0raW50IGZpcHNfZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1 bnNpZ25lZCBjaGFyICpvdXQpCi0rewotKyAgICAvKiBObyBDUFJORyBpbiB0ZXN0IG1vZGUgKi8K LSsgICAgaWYgKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNUKQotKyAgICAgICAgcmV0dXJu IDE7Ci0rICAgIC8qIENoZWNrIGJsb2NrIGlzIHZhbGlkOiBzaG91bGQgbmV2ZXIgaGFwcGVuICov Ci0rICAgIGlmIChkY3R4LT5sYl92YWxpZCA9PSAwKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNf Rl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCwgRklQU19SX0lOVEVSTkFMX0VSUk9SKTsKLSsgICAgICAg IGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0r ICAgIGlmIChkcmJnX3N0aWNrKQotKyAgICAgICAgbWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgt PmJsb2NrbGVuZ3RoKTsKLSsgICAgLyogQ2hlY2sgYWdhaW5zdCBsYXN0IGJsb2NrOiBmYWlsIGlm IG1hdGNoICovCi0rICAgIGlmICghbWVtY21wKGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVu Z3RoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QsIEZJ UFNfUl9EUkJHX1NUVUNLKTsKLSsgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIC8qIFNhdmUgbGFzdCBibG9jayBmb3IgbmV4 dCBjb21wYXJpc29uICovCi0rICAgIG1lbWNweShkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xl bmd0aCk7Ci0rICAgIHJldHVybiAxOwotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0 by9maXBzL2ZpcHNfZHJiZ19yYW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9m aXBzX2RyYmdfcmFuZC5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kcmJn X3JhbmQuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE5OTE2NTkxICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYwkyMDE2LTAzLTAxIDE2OjMz OjA3LjYxOTkxNjU5MSArMDEwMAotQEAgLTAsMCArMSwxNjYgQEAKLSsvKiBmaXBzL3JhbmQvZmlw c19kcmJnX3JhbmQuYyAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3Rl dmVAb3BlbnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4g 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 PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQu aD4KLSsjaW5jbHVkZSAiZmlwc19yYW5kX2xjbC5oIgotKwotKy8qIE1hcHBpbmcgb2YgU1A4MDAt OTAgRFJCR3MgdG8gT3BlblNTTCBSQU5EX01FVEhPRCAqLwotKwotKy8qIFNpbmNlIHdlIG9ubHkg aGF2ZSBvbmUgZ2xvYmFsIFBSTkcgdXNlZCBhdCBhbnkgdGltZSBpbiBPcGVuU1NMIHVzZSBhIGds b2JhbAotKyAqIHZhcmlhYmxlIHRvIHN0b3JlIGNvbnRleHQuCi0rICovCi0rCi0rc3RhdGljIERS QkdfQ1RYIG9zc2xfZGN0eDsKLSsKLStEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZv aWQpCi0rewotKyAgICByZXR1cm4gJm9zc2xfZGN0eDsKLSt9Ci0rCi0rc3RhdGljIGludCBmaXBz X2RyYmdfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCi0rewotKyAgICBEUkJH X0NUWCAqZGN0eCA9ICZvc3NsX2RjdHg7Ci0rICAgIGludCBydiA9IDA7Ci0rICAgIHVuc2lnbmVk IGNoYXIgKmFkaW4gPSBOVUxMOwotKyAgICBzaXplX3QgYWRpbmxlbiA9IDA7Ci0rICAgIENSWVBU T193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rICAgIGRvIHsKLSsgICAgICAgIHNpemVfdCBy Y250OwotKyAgICAgICAgaWYgKGNvdW50ID4gKGludClkY3R4LT5tYXhfcmVxdWVzdCkKLSsgICAg ICAgICAgICByY250ID0gZGN0eC0+bWF4X3JlcXVlc3Q7Ci0rICAgICAgICBlbHNlCi0rICAgICAg ICAgICAgcmNudCA9IGNvdW50OwotKyAgICAgICAgaWYgKGRjdHgtPmdldF9hZGluKSB7Ci0rICAg ICAgICAgICAgYWRpbmxlbiA9IGRjdHgtPmdldF9hZGluKGRjdHgsICZhZGluKTsKLSsgICAgICAg ICAgICBpZiAoYWRpbmxlbiAmJiAhYWRpbikgewotKyAgICAgICAgICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfQllURVMsCi0rICAgICAgICAgICAgICAgICAgICAgICAgRklQU19SX0VS Uk9SX1JFVFJJRVZJTkdfQURESVRJT05BTF9JTlBVVCk7Ci0rICAgICAgICAgICAgICAgIGdvdG8g ZXJyOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgIH0KLSsgICAgICAgIHJ2ID0gRklQU19kcmJn X2dlbmVyYXRlKGRjdHgsIG91dCwgcmNudCwgMCwgYWRpbiwgYWRpbmxlbik7Ci0rICAgICAgICBp ZiAoYWRpbikgewotKyAgICAgICAgICAgIGlmIChkY3R4LT5jbGVhbnVwX2FkaW4pCi0rICAgICAg ICAgICAgICAgIGRjdHgtPmNsZWFudXBfYWRpbihkY3R4LCBhZGluLCBhZGlubGVuKTsKLSsgICAg ICAgICAgICBhZGluID0gTlVMTDsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmICghcnYpCi0rICAg ICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICBvdXQgKz0gcmNudDsKLSsgICAgICAgIGNvdW50 IC09IHJjbnQ7Ci0rICAgIH0KLSsgICAgd2hpbGUgKGNvdW50KTsKLSsgICAgcnYgPSAxOwotKyBl cnI6Ci0rICAgIENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSsgICAgcmV0dXJu IHJ2OwotK30KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19wc2V1ZG8odW5zaWduZWQgY2hhciAq b3V0LCBpbnQgY291bnQpCi0rewotKyAgICBpZiAoZmlwc19kcmJnX2J5dGVzKG91dCwgY291bnQp IDw9IDApCi0rICAgICAgICByZXR1cm4gLTE7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0 aWMgaW50IGZpcHNfZHJiZ19zdGF0dXModm9pZCkKLSt7Ci0rICAgIERSQkdfQ1RYICpkY3R4ID0g Jm9zc2xfZGN0eDsKLSsgICAgaW50IHJ2OwotKyAgICBDUllQVE9fcl9sb2NrKENSWVBUT19MT0NL X1JBTkQpOwotKyAgICBydiA9IGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSA/IDEg OiAwOwotKyAgICBDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rICAgIHJldHVy biBydjsKLSt9Ci0rCi0rc3RhdGljIHZvaWQgZmlwc19kcmJnX2NsZWFudXAodm9pZCkKLSt7Ci0r ICAgIERSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsgICAgQ1JZUFRPX3dfbG9jayhDUllQ VE9fTE9DS19SQU5EKTsKLSsgICAgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7Ci0rICAg IENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKLSt9Ci0rCi0rc3RhdGljIGludCBm aXBzX2RyYmdfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKLSt7Ci0rICAgIERS QkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsgICAgaWYgKGRjdHgtPnJhbmRfc2VlZF9jYikK LSsgICAgICAgIHJldHVybiBkY3R4LT5yYW5kX3NlZWRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbik7 Ci0rICAgIHJldHVybiAxOwotK30KLSsKLStzdGF0aWMgaW50IGZpcHNfZHJiZ19hZGQoY29uc3Qg dm9pZCAqc2VlZCwgaW50IHNlZWRsZW4sIGRvdWJsZSBhZGRfZW50cm9weSkKLSt7Ci0rICAgIERS QkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKLSsgICAgaWYgKGRjdHgtPnJhbmRfYWRkX2NiKQot KyAgICAgICAgcmV0dXJuIGRjdHgtPnJhbmRfYWRkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4sIGFk ZF9lbnRyb3B5KTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK3N0YXRpYyBjb25zdCBSQU5EX01F VEhPRCByYW5kX2RyYmdfbWV0aCA9IHsKLSsgICAgZmlwc19kcmJnX3NlZWQsCi0rICAgIGZpcHNf ZHJiZ19ieXRlcywKLSsgICAgZmlwc19kcmJnX2NsZWFudXAsCi0rICAgIGZpcHNfZHJiZ19hZGQs Ci0rICAgIGZpcHNfZHJiZ19wc2V1ZG8sCi0rICAgIGZpcHNfZHJiZ19zdGF0dXMKLSt9OwotKwot K2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpCi0rewotKyAgICByZXR1 cm4gJnJhbmRfZHJiZ19tZXRoOwotK30KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBz X2RyYmdfc2VsZnRlc3QuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjE5OTE2NTkxICswMTAw Ci0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMJMjAx Ni0wMy0wMSAxNjozMzowNy42MTk5MTY1OTEgKzAxMDAKLUBAIC0wLDAgKzEsODI3IEBACi0rLyog Zmlwcy9yYW5kL2ZpcHNfZHJiZ19zZWxmdGVzdC5jICovCi0rLyogV3JpdHRlbiBieSBEciBTdGVw aGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCi0rICogcHJv amVjdC4KLSsgKi8KLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUg 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 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKi8KLSsKLSsjaW5j bHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1 ZGUgImZpcHNfcmFuZF9sY2wuaCIKLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0rI2luY2x1 ZGUgImZpcHNfZHJiZ19zZWxmdGVzdC5oIgotKwotK3R5cGVkZWYgc3RydWN0IHsKLSsgICAgaW50 IHBvc3Q7Ci0rICAgIGludCBuaWQ7Ci0rICAgIHVuc2lnbmVkIGludCBmbGFnczsKLSsKLSsgICAg LyogS0FUIGRhdGEgZm9yIG5vIFBSICovCi0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudDsK LSsgICAgc2l6ZV90IGVudGxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2U7Ci0r ICAgIHNpemVfdCBub25jZWxlbjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGVyczsKLSsg ICAgc2l6ZV90IHBlcnNsZW47Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW47Ci0rICAg IHNpemVfdCBhZGlubGVuOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnRyZXNlZWQ7Ci0r ICAgIHNpemVfdCBlbnRyZXNlZWRsZW47Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5y ZXNlZWQ7Ci0rICAgIHNpemVfdCBhZGlucmVzZWVkbGVuOwotKyAgICBjb25zdCB1bnNpZ25lZCBj aGFyICphZGluMjsKLSsgICAgc2l6ZV90IGFkaW4ybGVuOwotKyAgICBjb25zdCB1bnNpZ25lZCBj aGFyICprYXQ7Ci0rICAgIHNpemVfdCBrYXRsZW47Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmthdDI7Ci0rICAgIHNpemVfdCBrYXQybGVuOwotKwotKyAgICAvKiBLQVQgZGF0YSBmb3IgUFIg Ki8KLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50X3ByOwotKyAgICBzaXplX3QgZW50bGVu X3ByOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZV9wcjsKLSsgICAgc2l6ZV90IG5v bmNlbGVuX3ByOwotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzX3ByOwotKyAgICBzaXpl X3QgcGVyc2xlbl9wcjsKLSsgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbl9wcjsKLSsgICAg c2l6ZV90IGFkaW5sZW5fcHI7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHByX3ByOwot KyAgICBzaXplX3QgZW50cHJsZW5fcHI7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5n X3ByOwotKyAgICBzaXplX3QgYWRpbmdsZW5fcHI7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KmVudGdfcHI7Ci0rICAgIHNpemVfdCBlbnRnbGVuX3ByOwotKyAgICBjb25zdCB1bnNpZ25lZCBj aGFyICprYXRfcHI7Ci0rICAgIHNpemVfdCBrYXRsZW5fcHI7Ci0rICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmthdDJfcHI7Ci0rICAgIHNpemVfdCBrYXQybGVuX3ByOwotKwotK30gRFJCR19TRUxG VEVTVF9EQVRBOwotKwotKyNkZWZpbmUgbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIGZsYWcsIHBy LCBwKSB7cCwgbmlkLCBmbGFnIHwgRFJCR19GTEFHX1RFU1QsIFwKLSsgICAgICAgIHByIyNfZW50 cm9weWlucHV0LCBzaXplb2YocHIjI19lbnRyb3B5aW5wdXQpLCBcCi0rICAgICAgICBwciMjX25v bmNlLCBzaXplb2YocHIjI19ub25jZSksIFwKLSsgICAgICAgIHByIyNfcGVyc29uYWxpemF0aW9u c3RyaW5nLCBzaXplb2YocHIjI19wZXJzb25hbGl6YXRpb25zdHJpbmcpLCBcCi0rICAgICAgICBw ciMjX2FkZGl0aW9uYWxpbnB1dCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0KSwgXAotKyAg ICAgICAgcHIjI19lbnRyb3B5aW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2VudHJvcHlpbnB1dHJl c2VlZCksIFwKLSsgICAgICAgIHByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkLCBzaXplb2YocHIj I19hZGRpdGlvbmFsaW5wdXRyZXNlZWQpLCBcCi0rICAgICAgICBwciMjX2FkZGl0aW9uYWxpbnB1 dDIsIHNpemVvZihwciMjX2FkZGl0aW9uYWxpbnB1dDIpLCBcCi0rICAgICAgICBwciMjX2ludF9y ZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX2ludF9yZXR1cm5lZGJpdHMpLCBcCi0rICAgICAgICBw ciMjX3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfcmV0dXJuZWRiaXRzKSwgXAotKyAgICAgICAg cHIjI19wcl9lbnRyb3B5aW5wdXQsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dCksIFwKLSsg ICAgICAgIHByIyNfcHJfbm9uY2UsIHNpemVvZihwciMjX3ByX25vbmNlKSwgXAotKyAgICAgICAg cHIjI19wcl9wZXJzb25hbGl6YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3ByX3BlcnNvbmFsaXph dGlvbnN0cmluZyksIFwKLSsgICAgICAgIHByIyNfcHJfYWRkaXRpb25hbGlucHV0LCBzaXplb2Yo cHIjI19wcl9hZGRpdGlvbmFsaW5wdXQpLCBcCi0rICAgICAgICBwciMjX3ByX2VudHJvcHlpbnB1 dHByLCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXRwciksIFwKLSsgICAgICAgIHByIyNfcHJf YWRkaXRpb25hbGlucHV0Miwgc2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0MiksIFwKLSsg ICAgICAgIHByIyNfcHJfZW50cm9weWlucHV0cHIyLCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5w dXRwcjIpLCBcCi0rICAgICAgICBwciMjX3ByX2ludF9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMj X3ByX2ludF9yZXR1cm5lZGJpdHMpLCBcCi0rICAgICAgICBwciMjX3ByX3JldHVybmVkYml0cywg c2l6ZW9mKHByIyNfcHJfcmV0dXJuZWRiaXRzKSwgXAotKyAgICAgICAgfQotKwotKyNkZWZpbmUg bWFrZV9kcmJnX3Rlc3RfZGF0YV9kZihuaWQsIHByLCBwKSBcCi0rICAgICAgICBtYWtlX2RyYmdf dGVzdF9kYXRhKG5pZCwgRFJCR19GTEFHX0NUUl9VU0VfREYsIHByLCBwKQotKwotKyNkZWZpbmUg bWFrZV9kcmJnX3Rlc3RfZGF0YV9lYyhjdXJ2ZSwgbWQsIHByLCBwKSBcCi0rICAgICAgICBtYWtl X2RyYmdfdGVzdF9kYXRhKChjdXJ2ZSA8PCAxNikgfCBtZCAsIDAsIHByLCBwKQotKwotK3N0YXRp YyBEUkJHX1NFTEZURVNUX0RBVEEgZHJiZ190ZXN0W10gPSB7Ci0rICAgIG1ha2VfZHJiZ190ZXN0 X2RhdGFfZGYoTklEX2Flc18xMjhfY3RyLCBhZXNfMTI4X3VzZV9kZiwgMCksCi0rICAgIG1ha2Vf ZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18xOTJfY3RyLCBhZXNfMTkyX3VzZV9kZiwgMCksCi0r ICAgIG1ha2VfZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18yNTZfY3RyLCBhZXNfMjU2X3VzZV9k ZiwgMSksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2Flc18xMjhfY3RyLCAwLCBhZXNf MTI4X25vX2RmLCAwKSwKLSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzE5Ml9jdHIs IDAsIGFlc18xOTJfbm9fZGYsIDApLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNf MjU2X2N0ciwgMCwgYWVzXzI1Nl9ub19kZiwgMSksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEo TklEX3NoYTEsIDAsIHNoYTEsIDApLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEy MjQsIDAsIHNoYTIyNCwgMCksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTI1Niwg MCwgc2hhMjU2LCAxKSwKLSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMzg0LCAwLCBz aGEzODQsIDApLAotKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGE1MTIsIDAsIHNoYTUx MiwgMCksCi0rICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMSwgMCwgaG1h Y19zaGExLCAwKSwKLSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEyMjQs IDAsIGhtYWNfc2hhMjI0LCAwKSwKLSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dp dGhTSEEyNTYsIDAsIGhtYWNfc2hhMjU2LCAxKSwKLSsgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShO SURfaG1hY1dpdGhTSEEzODQsIDAsIGhtYWNfc2hhMzg0LCAwKSwKLSsgICAgbWFrZV9kcmJnX3Rl c3RfZGF0YShOSURfaG1hY1dpdGhTSEE1MTIsIDAsIGhtYWNfc2hhNTEyLCAwKSwKLSsgICAgezAs IDAsIDB9Ci0rfTsKLSsKLSt0eXBlZGVmIHN0cnVjdCB7Ci0rICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKmVudDsKLSsgICAgc2l6ZV90IGVudGxlbjsKLSsgICAgaW50IGVudGNudDsKLSsgICAgY29u c3QgdW5zaWduZWQgY2hhciAqbm9uY2U7Ci0rICAgIHNpemVfdCBub25jZWxlbjsKLSsgICAgaW50 IG5vbmNlY250OwotK30gVEVTVF9FTlQ7Ci0rCi0rc3RhdGljIHNpemVfdCB0ZXN0X2VudHJvcHko RFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCi0r ewotKyAgICBURVNUX0VOVCAqdCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7Ci0rICAg ICpwb3V0ID0gKHVuc2lnbmVkIGNoYXIgKil0LT5lbnQ7Ci0rICAgIHQtPmVudGNudCsrOwotKyAg ICByZXR1cm4gdC0+ZW50bGVuOwotK30KLSsKLStzdGF0aWMgc2l6ZV90IHRlc3Rfbm9uY2UoRFJC R19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIgKipwb3V0LAotKyAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgZW50cm9weSwgc2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQotK3sKLSsg ICAgVEVTVF9FTlQgKnQgPSBGSVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOwotKyAgICAqcG91 dCA9ICh1bnNpZ25lZCBjaGFyICopdC0+bm9uY2U7Ci0rICAgIHQtPm5vbmNlY250Kys7Ci0rICAg IHJldHVybiB0LT5ub25jZWxlbjsKLSt9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfc2luZ2xl X2thdChEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICogdGQsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgcXVpY2spCi0rewotKyAgICBURVNUX0VOVCB0Owot KyAgICBpbnQgcnYgPSAwOwotKyAgICBzaXplX3QgYWRpbmxlbjsKLSsgICAgdW5zaWduZWQgY2hh ciByYW5kb3V0WzEwMjRdOwotKwotKyAgICAvKiBJbml0aWFsIHRlc3Qgd2l0aG91dCBQUiAqLwot KwotKyAgICAvKiBJbnN0YW50aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQg cGVyc29uYWxpc2F0aW9uCi0rICAgICAqIHN0cmluZy4KLSsgICAgICovCi0rCi0rICAgIGlmICgh RklQU19kcmJnX2luaXQoZGN0eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkKLSsgICAgICAgIHJldHVy biAwOwotKyAgICBpZiAoIUZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9w eSwgMCwgMCwgdGVzdF9ub25jZSwgMCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsKLSsgICAgRklQ U19kcmJnX3NldF9hcHBfZGF0YShkY3R4LCAmdCk7Ci0rCi0rICAgIHQuZW50ID0gdGQtPmVudDsK LSsgICAgdC5lbnRsZW4gPSB0ZC0+ZW50bGVuOwotKyAgICB0Lm5vbmNlID0gdGQtPm5vbmNlOwot KyAgICB0Lm5vbmNlbGVuID0gdGQtPm5vbmNlbGVuOwotKyAgICB0LmVudGNudCA9IDA7Ci0rICAg IHQubm9uY2VjbnQgPSAwOwotKwotKyAgICBpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4 LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIC8q IE5vdGUgZm9yIENUUiB3aXRob3V0IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKLSsg ICAgICogaWdub3JlIGJ5dGVzIGFmdGVyIHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVu Ci0rICAgICAqIHRvIGhhbGYgdG8gZW5zdXJlIGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCi0rICAg ICAqLwotKyAgICBpZiAoIWZpcHNfcG9zdF9jb3JydXB0KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50 eXBlLCAmZGN0eC0+aWZsYWdzKSkKLSsgICAgICAgIGFkaW5sZW4gPSB0ZC0+YWRpbmxlbiAvIDI7 Ci0rICAgIGVsc2UKLSsgICAgICAgIGFkaW5sZW4gPSB0ZC0+YWRpbmxlbjsKLSsKLSsgICAgLyog R2VuZXJhdGUgd2l0aCBubyBQUiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIGRh dGEgKi8KLSsgICAgaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmth dGxlbiwgMCwgdGQtPmFkaW4sIGFkaW5sZW4pKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAg IGlmIChtZW1jbXAocmFuZG91dCwgdGQtPmthdCwgdGQtPmthdGxlbikpIHsKLSsgICAgICAgIEZJ UFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfTk9QUl9URVNUMV9GQUlM VVJFKTsKLSsgICAgICAgIGdvdG8gZXJyMjsKLSsgICAgfQotKyAgICAvKiBJZiBhYmJyZXZpYXRl ZCBQT1NUIGVuZCBvZiB0ZXN0ICovCi0rICAgIGlmIChxdWljaykgewotKyAgICAgICAgcnYgPSAx OwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsgICAgLyogUmVzZWVkIERSQkcgd2l0aCB0 ZXN0IGVudHJvcHkgYW5kIGFkZGl0aW9uYWwgaW5wdXQgKi8KLSsgICAgdC5lbnQgPSB0ZC0+ZW50 cmVzZWVkOwotKyAgICB0LmVudGxlbiA9IHRkLT5lbnRyZXNlZWRsZW47Ci0rCi0rICAgIGlmICgh RklQU19kcmJnX3Jlc2VlZChkY3R4LCB0ZC0+YWRpbnJlc2VlZCwgdGQtPmFkaW5yZXNlZWRsZW4p KQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIC8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5k IHZlcmlmeSBvdXRwdXQgbWF0Y2hlcyBleHBlY3RlZCBkYXRhICovCi0rICAgIGlmICghRklQU19k cmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXQybGVuLCAwLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0ZC0+YWRpbjIsIHRkLT5hZGluMmxlbikpCi0rICAgICAgICBnb3Rv IGVycjsKLSsKLSsgICAgaWYgKG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0MiwgdGQtPmthdDJsZW4p KSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19S X05PUFJfVEVTVDJfRkFJTFVSRSk7Ci0rICAgICAgICBnb3RvIGVycjI7Ci0rICAgIH0KLSsKLSsg ICAgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7Ci0rCi0rICAgIC8qIE5vdyB0ZXN0IHdp dGggUFIgKi8KLSsKLSsgICAgLyogSW5zdGFudGlhdGUgRFJCRyB3aXRoIHRlc3QgZW50cm9weSwg bm9uY2UgYW5kIHBlcnNvbmFsaXNhdGlvbgotKyAgICAgKiBzdHJpbmcuCi0rICAgICAqLwotKyAg ICBpZiAoIUZJUFNfZHJiZ19pbml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCi0rICAgICAg ICByZXR1cm4gMDsKLSsgICAgaWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0 X2VudHJvcHksIDAsIDAsIHRlc3Rfbm9uY2UsIDApKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0r ICAgIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoZGN0eCwgJnQpOwotKwotKyAgICB0LmVudCA9IHRk LT5lbnRfcHI7Ci0rICAgIHQuZW50bGVuID0gdGQtPmVudGxlbl9wcjsKLSsgICAgdC5ub25jZSA9 IHRkLT5ub25jZV9wcjsKLSsgICAgdC5ub25jZWxlbiA9IHRkLT5ub25jZWxlbl9wcjsKLSsgICAg dC5lbnRjbnQgPSAwOwotKyAgICB0Lm5vbmNlY250ID0gMDsKLSsKLSsgICAgaWYgKCFGSVBTX2Ry YmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnNfcHIsIHRkLT5wZXJzbGVuX3ByKSkKLSsgICAg ICAgIGdvdG8gZXJyOwotKwotKyAgICAvKiBOb3cgZ2VuZXJhdGUgd2l0aCBQUjogd2UgbmVlZCB0 byBzdXBwbHkgZW50cm9weSBhcyB0aGlzIHdpbGwKLSsgICAgICogcGVyZm9ybSBhIHJlc2VlZCBv cGVyYXRpb24uIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlLgotKyAgICAgKi8K LSsKLSsgICAgdC5lbnQgPSB0ZC0+ZW50cHJfcHI7Ci0rICAgIHQuZW50bGVuID0gdGQtPmVudHBy bGVuX3ByOwotKwotKyAgICAvKiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFkZGl0aW9u YWwgaW5wdXQgdmFsdWVzCi0rICAgICAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVuZ3Ro OiBzbyByZWR1Y2UgYWRpbmxlbgotKyAgICAgKiB0byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRh dGEgaXMgZmVkIGluLgotKyAgICAgKi8KLSsgICAgaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBT X1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPmlmbGFncykpCi0rICAgICAgICBhZGlubGVu ID0gdGQtPmFkaW5sZW5fcHIgLyAyOwotKyAgICBlbHNlCi0rICAgICAgICBhZGlubGVuID0gdGQt PmFkaW5sZW5fcHI7Ci0rICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQs IHRkLT5rYXRsZW5fcHIsIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGlu X3ByLCBhZGlubGVuKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAobWVtY21wKHJh bmRvdXQsIHRkLT5rYXRfcHIsIHRkLT5rYXRsZW5fcHIpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX1BSX1RFU1QxX0ZBSUxVUkUpOwotKyAg ICAgICAgZ290byBlcnIyOwotKyAgICB9Ci0rCi0rICAgIC8qIE5vdyBnZW5lcmF0ZSBhZ2FpbiB3 aXRoIFBSOiBzdXBwbHkgbmV3IGVudHJvcHkgYWdhaW4uCi0rICAgICAqIENoZWNrIG91dHB1dCBt YXRjaGVzIGV4cGVjdGVkIHZhbHVlLgotKyAgICAgKi8KLSsKLSsgICAgdC5lbnQgPSB0ZC0+ZW50 Z19wcjsKLSsgICAgdC5lbnRsZW4gPSB0ZC0+ZW50Z2xlbl9wcjsKLSsKLSsgICAgaWYgKCFGSVBT X2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdDJsZW5fcHIsIDEsCi0rICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluZ19wciwgdGQtPmFkaW5nbGVuX3ByKSkKLSsg ICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyX3By LCB0ZC0+a2F0Mmxlbl9wcikpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19T SU5HTEVfS0FULCBGSVBTX1JfUFJfVEVTVDJfRkFJTFVSRSk7Ci0rICAgICAgICBnb3RvIGVycjI7 Ci0rICAgIH0KLSsgICAgLyogQWxsIE9LLCB0ZXN0IGNvbXBsZXRlICovCi0rICAgIHJ2ID0gMTsK LSsKLSsgZXJyOgotKyAgICBpZiAocnYgPT0gMCkKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJ UFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgZXJyMjoKLSsg ICAgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7Ci0rCi0rICAgIHJldHVybiBydjsKLSsK LSt9Ci0rCi0rLyogSW5pdGlhbGlzZSBhIERSQkcgYmFzZWQgb24gc2VsZnRlc3QgZGF0YSAqLwot KwotK3N0YXRpYyBpbnQgZG9fZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNU X0RBVEEgKiB0ZCwgVEVTVF9FTlQgKiB0KQotK3sKLSsKLSsgICAgaWYgKCFGSVBTX2RyYmdfaW5p dChkY3R4LCB0ZC0+bmlkLCB0ZC0+ZmxhZ3MpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAg IGlmICghRklQU19kcmJnX3NldF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0 ZXN0X25vbmNlLCAwKSkKLSsgICAgICAgIHJldHVybiAwOwotKwotKyAgICBGSVBTX2RyYmdfc2V0 X2FwcF9kYXRhKGRjdHgsIHQpOwotKwotKyAgICB0LT5lbnQgPSB0ZC0+ZW50OwotKyAgICB0LT5l bnRsZW4gPSB0ZC0+ZW50bGVuOwotKyAgICB0LT5ub25jZSA9IHRkLT5ub25jZTsKLSsgICAgdC0+ bm9uY2VsZW4gPSB0ZC0+bm9uY2VsZW47Ci0rICAgIHQtPmVudGNudCA9IDA7Ci0rICAgIHQtPm5v bmNlY250ID0gMDsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIEluaXRpYWxpc2UgYW5kIGlu c3RhbnRpYXRlIERSQkcgYmFzZWQgb24gc2VsZnRlc3QgZGF0YSAqLwotK3N0YXRpYyBpbnQgZG9f ZHJiZ19pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICogdGQs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfRU5UICogdCkKLSt7Ci0rICAg IGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCB0KSkKLSsgICAgICAgIHJldHVybiAwOwotKyAg ICBpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4p KQotKyAgICAgICAgcmV0dXJuIDA7Ci0rCi0rICAgIHJldHVybiAxOwotK30KLSsKLSsvKiBUaGlz IGZ1bmN0aW9uIHBlcmZvcm1zIGV4dGVuc2l2ZSBlcnJvciBjaGVja2luZyBhcyByZXF1aXJlZCBi eSBTUDgwMC05MC4KLSsgKiBJbmR1Y2Ugc2V2ZXJhbCBmYWlsdXJlIG1vZGVzIGFuZCBjaGVjayBh biBlcnJvciBjb25kaXRpb24gaXMgc2V0LgotKyAqIFRoaXMgZnVuY3Rpb24gYWxvbmcgd2l0aCBm aXBzX2RyYmdfc2luZ2xlX2thdCBwZWZvcm1zIHRoZSBoZWFsdGggY2hlY2tpbmcKLSsgKiBvcGVy YXRpb24uCi0rICovCi0rCi0rc3RhdGljIGludCBmaXBzX2RyYmdfZXJyb3JfY2hlY2soRFJCR19D VFggKmRjdHgsIERSQkdfU0VMRlRFU1RfREFUQSAqIHRkKQotK3sKLSsgICAgdW5zaWduZWQgY2hh ciByYW5kb3V0WzEwMjRdOwotKyAgICBURVNUX0VOVCB0OwotKyAgICBzaXplX3QgaTsKLSsgICAg dW5zaWduZWQgaW50IHJlc2VlZF9jb3VudGVyX3RtcDsKLSsgICAgdW5zaWduZWQgY2hhciAqcCA9 ICh1bnNpZ25lZCBjaGFyICopZGN0eDsKLSsKLSsgICAgLyogSW5pdGlhbGlzZSBEUkJHICovCi0r Ci0rICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rICAgICAgICBnb3RvIGVy cjsKLSsKLSsgICAgLyogRG9uJ3QgcmVwb3J0IGluZHVjZWQgZXJyb3JzICovCi0rICAgIGRjdHgt PmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rICAgIC8qIFBlcnNvbmFsaXNhdGlvbiBz dHJpbmcgdGVzdHMgKi8KLSsKLSsgICAgLyogVGVzdCBkZXRlY3Rpb24gb2YgdG9vIGxhcmdlIHBl cnNvbmxpc2F0aW9uIHN0cmluZyAqLwotKwotKyAgICBpZiAoRklQU19kcmJnX2luc3RhbnRpYXRl KGRjdHgsIHRkLT5wZXJzLCBkY3R4LT5tYXhfcGVycyArIDEpID4gMCkgewotKyAgICAgICAgRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICBGSVBT X1JfUEVSU09OQUxJU0FUSU9OX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAgZ290byBlcnI7 Ci0rICAgIH0KLSsKLSsgICAgLyogRW50cm9weSBzb3VyY2UgdGVzdHMgKi8KLSsKLSsgICAgLyog VGVzdCBlbnRyb3B5IHNvdXJjZSBmYWlsdXJlIGRldGVjaW9uOiBpLmUuIHJldHVybnMgbm8gZGF0 YSAqLwotKwotKyAgICB0LmVudGxlbiA9IDA7Ci0rCi0rICAgIGlmIChGSVBTX2RyYmdfaW5zdGFu dGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApIHsKLSsgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAgRklQU19S X0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQot KwotKyAgICAvKiBUcnkgdG8gZ2VuZXJhdGUgb3V0cHV0IGZyb20gdW5pbnN0YW50aWF0ZWQgRFJC RyAqLwotKyAgICBpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRs ZW4sIDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlubGVu KSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAg ICAgICAgICAgICAgICBGSVBTX1JfR0VORVJBVEVfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAg ICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19O T0VSUjsKLSsgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAg ICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5U SUFURV9FUlJPUik7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBpZiAoIWRv X2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGRj dHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rICAgIC8qIFRlc3QgaW5zdWZmaWNp ZW50IGVudHJvcHkgKi8KLSsKLSsgICAgdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7 Ci0rCi0rICAgIGlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5w ZXJzbGVuKSA+IDApIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywKLSsgICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7 Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRS QkdfRkxBR19OT0VSUjsKLSsgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkg ewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf VU5JTlNUQU5USUFURV9FUlJPUik7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAg ICAvKiBUZXN0IHRvbyBtdWNoIGVudHJvcHkgKi8KLSsKLSsgICAgaWYgKCFkb19kcmJnX2luaXQo ZGN0eCwgdGQsICZ0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBkY3R4LT5pZmxhZ3Mg fD0gRFJCR19GTEFHX05PRVJSOwotKwotKyAgICB0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5 ICsgMTsKLSsKLSsgICAgaWYgKEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywg dGQtPnBlcnNsZW4pID4gMCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VS Uk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVD VEVEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIGRjdHgtPmlmbGFncyAm PSB+RFJCR19GTEFHX05PRVJSOwotKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0r Ci0rICAgIC8qIE5vbmNlIHRlc3RzICovCi0rCi0rICAgIC8qIFRlc3QgdG9vIHNtYWxsIG5vbmNl ICovCi0rCi0rICAgIGlmIChkY3R4LT5taW5fbm9uY2UpIHsKLSsKLSsgICAgICAgIGlmICghZG9f ZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rICAgICAgICAgICAgZ290byBlcnI7Ci0rCi0rICAg ICAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOwotKwotKyAgICAgICAgdC5ub25j ZWxlbiA9IGRjdHgtPm1pbl9ub25jZSAtIDE7Ci0rCi0rICAgICAgICBpZiAoRklQU19kcmJnX2lu c3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKSB7Ci0rICAgICAgICAg ICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAg ICAgICAgRklQU19SX05PTkNFX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAgICAgIGdvdG8g ZXJyOwotKyAgICAgICAgfQotKwotKyAgICAgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdf Tk9FUlI7Ci0rICAgICAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7Ci0r ICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1Jf VU5JTlNUQU5USUFURV9FUlJPUik7Ci0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9 Ci0rCi0rICAgIH0KLSsKLSsgICAgLyogVGVzdCB0b28gbGFyZ2Ugbm9uY2UgKi8KLSsKLSsgICAg aWYgKGRjdHgtPm1heF9ub25jZSkgewotKwotKyAgICAgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0 eCwgdGQsICZ0KSkKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgICAgIGRjdHgtPmlm bGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rICAgICAgICB0Lm5vbmNlbGVuID0gZGN0eC0+ bWF4X25vbmNlICsgMTsKLSsKLSsgICAgICAgIGlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0 eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgICAgICBGSVBTX1Jf Tk9OQ0VfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAgICAgICAgZ290byBlcnI7Ci0rICAgICAg ICB9Ci0rCi0rICAgICAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsgICAg ICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKLSsgICAgICAgICAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRF X0VSUk9SKTsKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgICAgIH0KLSsKLSsgICAgfQot KwotKyAgICAvKiBJbnN0YW50aWF0ZSB3aXRoIHZhbGlkIGRhdGEuICovCi0rICAgIGlmICghZG9f ZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZCwgJnQpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0r ICAgIC8qIENoZWNrIGdlbmVyYXRpb24gaXMgbm93IE9LICovCi0rICAgIGlmICghRklQU19kcmJn X2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCi0rICAgICAgICBnb3RvIGVycjsK LSsKLSsgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsgICAgLyogUmVx dWVzdCB0b28gbXVjaCBkYXRhIGZvciBvbmUgcmVxdWVzdCAqLwotKyAgICBpZiAoRklQU19kcmJn X2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIGRjdHgtPm1heF9yZXF1ZXN0ICsgMSwgMCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKSB7Ci0rICAgICAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAg IEZJUFNfUl9SRVFVRVNUX0xFTkdUSF9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAgICAgIGdvdG8g ZXJyOwotKyAgICB9Ci0rCi0rICAgIC8qIFRyeSB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAq LwotKyAgICBpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4s IDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIGRjdHgtPm1heF9hZGlu ICsgMSkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywK LSsgICAgICAgICAgICAgICAgRklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RF RCk7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICAvKiBDaGVjayBwcmVkaWN0 aW9uIHJlc2lzdGFuY2UgcmVxdWVzdCBmYWlscyBpZiBlbnRyb3B5IHNvdXJjZQotKyAgICAgKiBm YWlsdXJlLgotKyAgICAgKi8KLSsKLSsgICAgdC5lbnRsZW4gPSAwOwotKwotKyAgICBpZiAoRklQ U19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDEsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkgewotKyAgICAgICAgRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAgICAgICAgICAgICBGSVBT X1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9 Ci0rCi0rICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKyAgICBpZiAoIUZJ UFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsgICAg ICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIC8qIEluc3RhbnRpYXRlIGFnYWluIHdpdGgg dmFsaWQgZGF0YSAqLwotKwotKyAgICBpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQs ICZ0KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICAvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdv cmtzICovCi0rICAgIC8qIFNhdmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAqLwotKyAgICByZXNl ZWRfY291bnRlcl90bXAgPSBkY3R4LT5yZXNlZWRfY291bnRlcjsKLSsgICAgLyogU2V0IHJlc2Vl ZCBjb3VudGVyIHRvIGJleW9uZCBpbnRlcnZhbCAqLwotKyAgICBkY3R4LT5yZXNlZWRfY291bnRl ciA9IGRjdHgtPnJlc2VlZF9pbnRlcnZhbDsKLSsKLSsgICAgLyogR2VuZXJhdGUgb3V0cHV0IGFu ZCBjaGVjayBlbnRyb3B5IGhhcyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCi0rICAgIHQu ZW50Y250ID0gMDsKLSsgICAgaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwg dGQtPmthdGxlbiwgMCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRk LT5hZGlubGVuKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAodC5lbnRjbnQgIT0gMSkg ewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAotKyAgICAg ICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOwotKyAg ICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsgICAgLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFz IGJlZW4gcmVzZXQgKi8KLSsgICAgaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9j b3VudGVyX3RtcCArIDEpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJP Ul9DSEVDSywgRklQU19SX1JFU0VFRF9DT1VOVEVSX0VSUk9SKTsKLSsgICAgICAgIGdvdG8gZXJy OwotKyAgICB9Ci0rCi0rICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOwotKyAg ICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7Ci0rICAgICAgICBGSVBTZXJy KEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9S KTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIC8qIENoZWNrIHByZWRpY3Rp b24gcmVzaXN0YW5jZSByZXF1ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCi0rICAgICAqIGZh aWx1cmUuCi0rICAgICAqLwotKwotKyAgICB0LmVudGxlbiA9IDA7Ci0rCi0rICAgIGRjdHgtPmlm bGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7Ci0rICAgIGlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0 eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICB0 ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VO REVURUNURUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgZGN0eC0+aWZs YWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7Ci0rCi0rICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFu dGlhdGUoZGN0eCkpIHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9D SEVDSywgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IpOwotKyAgICAgICAgZ290byBlcnI7Ci0r ICAgIH0KLSsKLSsgICAgaWYgKCFkb19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCi0r ICAgICAgICBnb3RvIGVycjsKLSsgICAgLyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLwot KyAgICAvKiBTYXZlIGluaXRpYWwgcmVzZWVkIGNvdW50ZXIgKi8KLSsgICAgcmVzZWVkX2NvdW50 ZXJfdG1wID0gZGN0eC0+cmVzZWVkX2NvdW50ZXI7Ci0rICAgIC8qIFNldCByZXNlZWQgY291bnRl ciB0byBiZXlvbmQgaW50ZXJ2YWwgKi8KLSsgICAgZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4 LT5yZXNlZWRfaW50ZXJ2YWw7Ci0rCi0rICAgIC8qIEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sg ZW50cm9weSBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9yIHJlc2VlZCAqLwotKyAgICB0LmVudGNudCA9 IDA7Ci0rICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRs ZW4sIDAsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxl bikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKHQuZW50Y250ICE9IDEpIHsKLSsgICAg ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAg ICAgRklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKLSsgICAgICAgIGdv dG8gZXJyOwotKyAgICB9Ci0rICAgIC8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJl c2V0ICovCi0rICAgIGlmIChkY3R4LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90 bXAgKyAxKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ss IEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUik7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAg fQotKwotKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKLSsgICAgaWYgKCFG SVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rICAg ICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICAvKiBFeHBsaWNpdCByZXNlZWQgdGVzdHMg Ki8KLSsKLSsgICAgLyogVGVzdCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbGFyZ2UgYWRkaXRp b25hbCBpbnB1dCAqLwotKyAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQotKyAg ICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7 Ci0rCi0rICAgIGlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCBkY3R4LT5tYXhf YWRpbiArIDEpID4gMCkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLLAotKyAgICAgICAgICAgICAgICBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9V TkRFVEVDVEVEKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rCi0rICAgIC8qIFRlc3Qg ZXhwbGljaXQgcmVzZWVkIHdpdGggZW50cm9weSBzb3VyY2UgZmFpbHVyZSAqLwotKwotKyAgICB0 LmVudGxlbiA9IDA7Ci0rCi0rICAgIGlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGlu LCB0ZC0+YWRpbmxlbikgPiAwKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVU RUNURUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgaWYgKCFGSVBTX2Ry YmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7Ci0rICAgICAgICBn b3RvIGVycjsKLSsgICAgfQotKwotKyAgICAvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRv byBtdWNoIGVudHJvcHkgKi8KLSsKLSsgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0 KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKwotKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFH X05PRVJSOwotKwotKyAgICB0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKLSsKLSsg ICAgaWYgKEZJUFNfZHJiZ19yZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDAp IHsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKLSsgICAg ICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7Ci0rICAgICAgICBn b3RvIGVycjsKLSsgICAgfQotKwotKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRj dHgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJ UFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0r Ci0rICAgIC8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdpdGggdG9vIGxpdHRsZSBlbnRyb3B5ICov Ci0rCi0rICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCi0rICAgICAgICBnb3Rv IGVycjsKLSsKLSsgICAgZGN0eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKLSsKLSsgICAg dC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7Ci0rCi0rICAgIGlmIChGSVBTX2RyYmdf cmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAwKSB7Ci0rICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCi0rICAgICAgICAgICAgICAgIEZJUFNf Ul9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOwotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIH0K LSsKLSsgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgewotKyAgICAgICAg RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFU RV9FUlJPUik7Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgfQotKwotKyAgICBwID0gKHVuc2ln bmVkIGNoYXIgKikmZGN0eC0+ZDsKLSsgICAgLyogU3RhbmRhcmQgc2F5cyB3ZSBoYXZlIHRvIGNo ZWNrIHVuaW5zdGFudGlhdGUgcmVhbGx5IHplcm9lcwotKyAgICAgKiB0aGUgZGF0YS4uLgotKyAg ICAgKi8KLSsgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihkY3R4LT5kKTsgaSsrKSB7Ci0rICAg ICAgICBpZiAoKnAgIT0gMCkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywKLSsgICAgICAgICAgICAgICAgICAgIEZJUFNfUl9VTklOU1RBTlRJQVRF X1pFUk9JU0VfRVJST1IpOwotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICAgICAgfQotKyAg ICAgICAgcCsrOwotKyAgICB9Ci0rCi0rICAgIHJldHVybiAxOwotKwotKyBlcnI6Ci0rICAgIC8q IEEgcmVhbCBlcnJvciBhcyBvcHBvc2VkIHRvIGFuIGluZHVjZWQgb25lOiB1bmRlcmx5aW5nIGZ1 bmN0aW9uIHdpbGwKLSsgICAgICogaW5kaWNhdGUgdGhlIGVycm9yLgotKyAgICAgKi8KLSsgICAg aWYgKCEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJSKSkKLSsgICAgICAgIEZJUFNlcnIo RklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX0ZVTkNUSU9OX0VSUk9SKTsKLSsg ICAgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7Ci0rICAgIHJldHVybiAwOwotKwotK30K LSsKLStpbnQgZmlwc19kcmJnX2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQg aW50IGZsYWdzKQotK3sKLSsgICAgRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKLSsgICAgZmxhZ3Mg fD0gRFJCR19GTEFHX1RFU1Q7Ci0rICAgIGZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0g MDsgdGQrKykgewotKyAgICAgICAgaWYgKHRkLT5uaWQgPT0gbmlkICYmIHRkLT5mbGFncyA9PSBm bGFncykgewotKyAgICAgICAgICAgIGlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQs IDApKQotKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICByZXR1cm4gZmlw c19kcmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKTsKLSsgICAgICAgIH0KLSsgICAgfQotKyAgICBy ZXR1cm4gMDsKLSt9Ci0rCi0raW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2soRFJCR19DVFggKmRj dHgpCi0rewotKyAgICBpbnQgcnY7Ci0rICAgIERSQkdfQ1RYICp0Y3R4ID0gTlVMTDsKLSsgICAg dGN0eCA9IEZJUFNfZHJiZ19uZXcoMCwgMCk7Ci0rICAgIGZpcHNfcG9zdF9zdGFydGVkKEZJUFNf VEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+eGZsYWdzKTsKLSsgICAgaWYgKCF0Y3R4KQot KyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJ2ID0gZmlwc19kcmJnX2thdCh0Y3R4LCBkY3R4LT50 eXBlLCBkY3R4LT54ZmxhZ3MpOwotKyAgICBpZiAodGN0eCkKLSsgICAgICAgIEZJUFNfZHJiZ19m cmVlKHRjdHgpOwotKyAgICBpZiAocnYpCi0rICAgICAgICBmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBT X1RFU1RfRFJCRywgZGN0eC0+dHlwZSwgJmRjdHgtPnhmbGFncyk7Ci0rICAgIGVsc2UKLSsgICAg ICAgIGZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54 ZmxhZ3MpOwotKyAgICBpZiAoIXJ2KQotKyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFU VVNfRVJST1I7Ci0rICAgIGVsc2UKLSsgICAgICAgIGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAw OwotKyAgICByZXR1cm4gcnY7Ci0rfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCkK LSt7Ci0rICAgIERSQkdfQ1RYICpkY3R4OwotKyAgICBEUkJHX1NFTEZURVNUX0RBVEEgKnRkOwot KyAgICBpbnQgcnYgPSAxOwotKyAgICBkY3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKLSsgICAg aWYgKCFkY3R4KQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGZvciAodGQgPSBkcmJnX3Rlc3Q7 IHRkLT5uaWQgIT0gMDsgdGQrKykgewotKyAgICAgICAgaWYgKHRkLT5wb3N0ICE9IDEpCi0rICAg ICAgICAgICAgY29udGludWU7Ci0rICAgICAgICBpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNf VEVTVF9EUkJHLCB0ZC0+bmlkLCAmdGQtPmZsYWdzKSkKLSsgICAgICAgICAgICByZXR1cm4gMTsK LSsgICAgICAgIGlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDEpKSB7Ci0rICAg ICAgICAgICAgZmlwc19wb3N0X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5m bGFncyk7Ci0rICAgICAgICAgICAgcnYgPSAwOwotKyAgICAgICAgICAgIGNvbnRpbnVlOwotKyAg ICAgICAgfQotKyAgICAgICAgaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywg dGQtPm5pZCwgJnRkLT5mbGFncykpCi0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsg ICAgRklQU19kcmJnX2ZyZWUoZGN0eCk7Ci0rICAgIHJldHVybiBydjsKLSt9Ci0rCi0raW50IEZJ UFNfc2VsZnRlc3RfZHJiZ19hbGwodm9pZCkKLSt7Ci0rICAgIERSQkdfQ1RYICpkY3R4OwotKyAg ICBEUkJHX1NFTEZURVNUX0RBVEEgKnRkOwotKyAgICBpbnQgcnYgPSAxOwotKyAgICBkY3R4ID0g RklQU19kcmJnX25ldygwLCAwKTsKLSsgICAgaWYgKCFkY3R4KQotKyAgICAgICAgcmV0dXJuIDA7 Ci0rICAgIGZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykgewotKyAgICAg ICAgaWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5m bGFncykpCi0rICAgICAgICAgICAgcmV0dXJuIDE7Ci0rICAgICAgICBpZiAoIWZpcHNfZHJiZ19z aW5nbGVfa2F0KGRjdHgsIHRkLCAwKSkgewotKyAgICAgICAgICAgIGZpcHNfcG9zdF9mYWlsZWQo RklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOwotKyAgICAgICAgICAgIHJ2ID0g MDsKLSsgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAgIH0KLSsgICAgICAgIGlmICghZmlw c19kcmJnX2Vycm9yX2NoZWNrKGRjdHgsIHRkKSkgewotKyAgICAgICAgICAgIGZpcHNfcG9zdF9m YWlsZWQoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOwotKyAgICAgICAgICAg IHJ2ID0gMDsKLSsgICAgICAgICAgICBjb250aW51ZTsKLSsgICAgICAgIH0KLSsgICAgICAgIGlm ICghZmlwc19wb3N0X3N1Y2Nlc3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3Mp KQotKyAgICAgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIEZJUFNfZHJiZ19mcmVlKGRj dHgpOwotKyAgICByZXR1cm4gcnY7Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmguZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlw cy9maXBzX2RyYmdfc2VsZnRlc3QuaAotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2Zp cHNfZHJiZ19zZWxmdGVzdC5oLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MjA5MTY2MTMgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaAky MDE2LTAzLTAxIDE2OjMzOjA3LjYyMDkxNjYxMyArMDEwMAotQEAgLTAsMCArMSwxNzkxIEBACi0r LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0r ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0 aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgot KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAg IG9wZW5zc2wtY29yZS5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJP cGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICog ICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0 cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2lu ZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgot KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFT IElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBP UgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD VCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwg T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VE IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsg KiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB TUFHRS4KLSsgKgotKyAqLwotKwotKy8qIFNlbGZ0ZXN0IGFuZCBoZWFsdGggY2hlY2sgZGF0YSBm b3IgdGhlIFNQODAwLTkwIERSQkcgKi8KLSsKLSsjZGVmaW5lIF9fZmlwc19jb25zdHNlZwotKwot Ky8qIEFFUy0xMjggdXNlIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAg MHg2MSwgMHg1MiwgMHg3YywgMHhlMywgMHgyMywgMHg3ZCwgMHgwYSwgMHgwNywgMHgxMCwgMHgw YywgMHg1MCwgMHgzMywKLSsgICAgMHhjOCwgMHhkYiwgMHhmZiwgMHgxMgotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3By X25vbmNlW10gPSB7Ci0rICAgIDB4NTEsIDB4MGQsIDB4ODUsIDB4NzcsIDB4ZWQsIDB4MjIsIDB4 OTcsIDB4MjgKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsK LSsgICAgMHg1OSwgMHg5ZiwgMHhiYiwgMHhjZCwgMHhkNSwgMHgyNSwgMHg2OSwgMHhiNSwgMHhj YiwgMHhiNSwgMHgwMywgMHhmZSwKLSsgICAgMHhkNywgMHhkNywgMHgwMSwgMHg2NwotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x MjhfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweGVmLCAweDg4LCAweDc2 LCAweDAxLCAweGFmLCAweDNjLCAweGZlLCAweDhiLCAweGFmLCAweDI2LCAweDA2LCAweDllLAot KyAgICAweDlhLCAweDQ3LCAweDA4LCAweDc2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlu cHV0cHJbXSA9IHsKLSsgICAgMHhlMiwgMHg3NiwgMHhmOSwgMHhmNiwgMHgzYSwgMHhiYSwgMHgx MCwgMHg5ZiwgMHhiZiwgMHg0NywgMHgwZSwgMHg1MSwKLSsgICAgMHgwOSwgMHhmYiwgMHhhMywg MHhiNgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhk NCwgMHg5OCwgMHg4YSwgMHg0NiwgMHg4MCwgMHg0YywgMHhkYiwgMHhhMywgMHg1OSwgMHgwMiwg MHg1NywgMHg1MiwKLSsgICAgMHg2NiwgMHgxYywgMHhlYSwgMHg1YgotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2Rm X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHg4OCwgMHg4YywgMHg5MSwgMHhkNiwg MHhiZSwgMHg1NiwgMHg2ZSwgMHgwOCwgMHg5YSwgMHg2MiwgMHgyYiwgMHgxMSwKLSsgICAgMHgz ZiwgMHg1ZSwgMHgzMSwgMHgwNgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltd ID0gewotKyAgICAweGMwLCAweDVjLCAweDZiLCAweDk4LCAweDAxLCAweDBkLCAweDU4LCAweDE4 LCAweDUxLCAweDE4LCAweDk2LCAweGFlLAotKyAgICAweGE3LCAweGUzLCAweGE4LCAweDY3Ci0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF91c2VfZGZfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4Y2YsIDB4MDEsIDB4YWMsIDB4 MjIsIDB4MzEsIDB4MDYsIDB4OGUsIDB4ZmMsIDB4Y2UsIDB4NTYsIDB4ZWEsIDB4MjQsCi0rICAg IDB4MGYsIDB4MzgsIDB4NDMsIDB4YzYKLSt9OwotKwotKy8qIEFFUy0xMjggdXNlIGRmIE5vIFBS ICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X3VzZV9kZl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHgxZiwgMHg4ZSwgMHgzNCwgMHg4Miwg MHgwYywgMHhiNywgMHhiZSwgMHhjNSwgMHgwMSwgMHgzZSwgMHhkMCwgMHhhMywKLSsgICAgMHg5 ZCwgMHg3ZCwgMHgxYywgMHg5YgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX25vbmNlW10gPSB7Ci0rICAgIDB4ZDUsIDB4 NGQsIDB4YmQsIDB4NGEsIDB4OTMsIDB4N2YsIDB4YjgsIDB4OTYKLSt9OwotKwotK19fZmlwc19j b25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHhhYiwgMHhkNiwgMHgzZiwgMHgwNCwg MHhmZSwgMHgyNywgMHg2YiwgMHgyZCwgMHhkNywgMHhjMywgMHgxYywgMHhmMywKLSsgICAgMHgz OCwgMHg2NiwgMHhiYSwgMHgxYgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAg ICAweGZlLCAweGY0LCAweDA5LCAweGE4LCAweGI3LCAweDczLCAweDI3LCAweDljLCAweDVmLCAw eGE3LCAweGVhLCAweDQ2LAotKyAgICAweGI1LCAweGUyLCAweGIyLCAweDQxCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZf aW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDQyLCAweGU0LCAweDRlLCAweDdiLCAweDI3 LCAweGRkLCAweGNiLCAweGJjLCAweDBhLCAweGNmLCAweGE2LCAweDY3LAotKyAgICAweGU3LCAw eDU3LCAweDExLCAweGI0Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7 Ci0rICAgIDB4MTQsIDB4MjYsIDB4NjksIDB4ZDksIDB4ZjMsIDB4NjUsIDB4MDMsIDB4ZDYsIDB4 NmIsIDB4YjksIDB4NDQsIDB4MGIsCi0rICAgIDB4YzcsIDB4YzQsIDB4OWUsIDB4MzkKLSt9Owot KwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg1NSwgMHgyZSwg MHg2MCwgMHg5YSwgMHgwNSwgMHg3MiwgMHg4YSwgMHhhOCwgMHhlZiwgMHgyMiwgMHg4MSwgMHg1 YSwKLSsgICAgMHhjOCwgMHg5MywgMHhmYSwgMHg4NAotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1 dDJbXSA9IHsKLSsgICAgMHgzYywgMHg0MCwgMHhjOCwgMHhjNCwgMHgxNiwgMHgwYywgMHgyMSwg MHhhNCwgMHgzNywgMHgyYywgMHg4ZiwgMHhhNSwKLSsgICAgMHgwNiwgMHgwYywgMHgxNSwgMHgy YwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfdXNlX2RmX3JldHVybmVkYml0c1tdID0gewotKyAgICAweGUxLCAweDNlLCAweDk5LCAw eDk4LCAweDg2LCAweDY3LCAweDBiLCAweDYzLCAweDdiLCAweGJlLCAweDNmLCAweDg4LAotKyAg ICAweDQ2LCAweDgxLCAweGM3LCAweDE5Ci0rfTsKLSsKLSsvKiBBRVMtMTkyIHVzZSBkZiBQUiAg Ki8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91 c2VfZGZfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4MmIsIDB4NGUsIDB4OGIsIDB4ZTEs IDB4ZjEsIDB4MzQsIDB4ODAsIDB4NTYsIDB4ODEsIDB4ZjksIDB4NzQsIDB4ZWMsCi0rICAgIDB4 MTcsIDB4NDQsIDB4MmEsIDB4ZjEsIDB4MTQsIDB4YjAsIDB4YmYsIDB4OTcsIDB4MzksIDB4Yjcs IDB4MDQsIDB4N2QKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9ub25jZVtdID0gewotKyAgICAweGQ2LCAweDlkLCAw eGViLCAweDE0LCAweDRlLCAweDZjLCAweDMwLCAweDFlLCAweDM5LCAweDU1LCAweDczLCAweGQw LAotKyAgICAweGQxLCAweDgwLCAweDc4LCAweGZhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcGVyc29u YWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4ZmMsIDB4NDMsIDB4NGEsIDB4ZjgsIDB4OWEs IDB4NTUsIDB4YjMsIDB4NTMsIDB4ODMsIDB4ZTIsIDB4MTgsIDB4MTYsCi0rICAgIDB4MGMsIDB4 ZGMsIDB4Y2QsIDB4NWUsIDB4NGYsIDB4YTAsIDB4MDMsIDB4MDEsIDB4MmIsIDB4OWYsIDB4ZTQs IDB4ZDUsCi0rICAgIDB4N2QsIDB4NDksIDB4ZjAsIDB4NDEsIDB4OWUsIDB4M2QsIDB4OTksIDB4 MDQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg1ZSwg MHg5ZiwgMHg0OSwgMHg2ZiwgMHgyMSwgMHg4YiwgMHgxZCwgMHgzMiwgMHhkNSwgMHg4NCwgMHg1 YywgMHhhYywKLSsgICAgMHhhZiwgMHhkZiwgMHhlNCwgMHg3OSwgMHg5ZSwgMHhhZiwgMHhhOSwg MHg4MiwgMHhkMCwgMHhmOCwgMHg0ZiwgMHhjYiwKLSsgICAgMHg2OSwgMHgxMCwgMHgwYSwgMHg3 ZSwgMHg4MSwgMHg1NywgMHhiNSwgMHgzNgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1 dHByW10gPSB7Ci0rICAgIDB4ZDQsIDB4ODEsIDB4MGMsIDB4ZDcsIDB4NjYsIDB4MzksIDB4ZWMs IDB4NDIsIDB4NTMsIDB4ODcsIDB4NDEsIDB4YTUsCi0rICAgIDB4MWUsIDB4N2QsIDB4ODAsIDB4 OTEsIDB4OGUsIDB4YmIsIDB4ZWQsIDB4YWMsIDB4MTQsIDB4MDIsIDB4MWEsIDB4ZDUKLSt9Owot KwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTkyX3VzZV9kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ZGYsIDB4MWQsIDB4 MzksIDB4NDUsIDB4N2MsIDB4OWIsIDB4YzYsIDB4MmIsIDB4N2QsIDB4OGMsIDB4OTMsIDB4ZTks Ci0rICAgIDB4MTksIDB4MzAsIDB4NmIsIDB4NjcKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwot KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlv bmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4MDAsIDB4NzEsIDB4MjcsIDB4NGUsIDB4ZDMsIDB4MTQs IDB4ZjEsIDB4MjAsIDB4N2YsIDB4NGEsIDB4NDEsIDB4MzIsCi0rICAgIDB4MmEsIDB4OTcsIDB4 MTEsIDB4NDMsIDB4OGYsIDB4NGEsIDB4MTUsIDB4N2IsIDB4OWIsIDB4NTEsIDB4NzksIDB4ZGEs Ci0rICAgIDB4NDksIDB4M2QsIDB4ZGUsIDB4ZTgsIDB4YmMsIDB4OTMsIDB4OTEsIDB4OTkKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHg5MCwgMHhlZSwg MHg3NiwgMHhhMSwgMHg0NSwgMHg4ZCwgMHhiNywgMHg0MCwgMHhiMCwgMHgxMSwgMHhiZiwgMHhk MCwKLSsgICAgMHg2NSwgMHhkNywgMHgzYywgMHg3YywgMHg0ZiwgMHgyMCwgMHgzZiwgMHg0ZSwg MHgxMSwgMHg5ZCwgMHhiMywgMHg1ZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0gewot KyAgICAweDI0LCAweDNiLCAweDIwLCAweGE0LCAweDM3LCAweDY2LCAweGJhLCAweDcyLCAweDM5 LCAweDNmLCAweGNmLCAweDNjLAotKyAgICAweDdlLCAweDFhLCAweDJiLCAweDgzCi0rfTsKLSsK LSsvKiBBRVMtMTkyIHVzZSBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfZW50cm9weWlucHV0W10gPSB7Ci0rICAg IDB4OGQsIDB4NzQsIDB4YTQsIDB4NTAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4MGMsIDB4MmEsIDB4 NjksIDB4YzQsIDB4ODIsCi0rICAgIDB4M2IsIDB4YmIsIDB4ZGEsIDB4MGUsIDB4N2YsIDB4Nzcs IDB4YTMsIDB4MTcsIDB4NzgsIDB4NTcsIDB4YjIsIDB4N2IKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9ub25jZVtdID0g ewotKyAgICAweDc1LCAweGQ1LCAweDFmLCAweGFjLCAweGE0LCAweDhkLCAweDQyLCAweDc4LCAw eGQ3LCAweDY5LCAweDg2LCAweDlkLAotKyAgICAweDc3LCAweGQ3LCAweDQxLCAweDBlCi0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzE5Ml91c2VfZGZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4NGUsIDB4MzMs IDB4NDEsIDB4M2MsIDB4OWMsIDB4YzIsIDB4ZDIsIDB4NTMsIDB4YWYsIDB4OTAsIDB4ZWEsIDB4 Y2YsCi0rICAgIDB4MTksIDB4NTAsIDB4MWUsIDB4ZTYsIDB4NmYsIDB4NjMsIDB4YzgsIDB4MzIs IDB4MjIsIDB4ZGMsIDB4MDcsIDB4NjUsCi0rICAgIDB4OWMsIDB4ZDMsIDB4ZjgsIDB4MzAsIDB4 OWUsIDB4ZWQsIDB4MzUsIDB4NzAKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsg ICAgMHg1ZCwgMHg4YiwgMHg4YywgMHhjMSwgMHhkZiwgMHgwZSwgMHgwMiwgMHg3OCwgMHhmYiwg MHgxOSwgMHhiOCwgMHg2OSwKLSsgICAgMHg3OCwgMHg0ZSwgMHg5YywgMHg1MiwgMHhiYywgMHhj NywgMHgyMCwgMHhjOSwgMHhlNiwgMHg1ZSwgMHg3NywgMHgyMiwKLSsgICAgMHgyOCwgMHgzZCwg MHgwYywgMHg5ZSwgMHg2OCwgMHhhOCwgMHg0NSwgMHhkNwotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2ludF9yZXR1cm5l ZGJpdHNbXSA9IHsKLSsgICAgMHhkNSwgMHhlNywgMHgwOCwgMHhjNSwgMHgxOSwgMHg5OSwgMHhk NSwgMHgzMSwgMHgwMywgMHgwYSwgMHg3NCwgMHhiNiwKLSsgICAgMHhiNywgMHhlZCwgMHhlOSwg MHhlYQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfdXNlX2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDlj LCAweDI2LCAweGRhLCAweGYxLCAweGFjLCAweGQ5LCAweDVhLCAweGQ2LCAweGE4LCAweDY1LCAw eGY1LCAweDAyLAotKyAgICAweDhmLCAweGRjLCAweGEyLCAweDA5LCAweDU0LCAweGE2LCAweGUy LCAweGE0LCAweGRlLCAweDMyLCAweGUwLCAweDAxCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcK LSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25h bGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4OWIsIDB4OTAsIDB4YjAsIDB4M2EsIDB4MGUsIDB4 M2EsIDB4ODAsIDB4MDcsIDB4NGEsIDB4ZjQsIDB4ZGEsIDB4NzYsCi0rICAgIDB4MjgsIDB4MzAs IDB4M2MsIDB4ZWUsIDB4NTQsIDB4MWIsIDB4OTQsIDB4NTksIDB4NTEsIDB4NDMsIDB4NTYsIDB4 NzcsCi0rICAgIDB4YWYsIDB4ODgsIDB4ZGQsIDB4NjMsIDB4ODksIDB4NDcsIDB4MDYsIDB4NjUK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4M2MsIDB4MTEsIDB4NjQs IDB4N2EsIDB4OTYsIDB4ZjUsIDB4ZDgsIDB4YjgsIDB4YWUsIDB4ZDYsIDB4NzAsIDB4NGUsCi0r ICAgIDB4MTYsIDB4OTYsIDB4ZGUsIDB4ZTksIDB4NjIsIDB4YmMsIDB4ZWUsIDB4MjgsIDB4MmYs IDB4MjYsIDB4YTYsIDB4ZjAsCi0rICAgIDB4NTYsIDB4ZWYsIDB4YTMsIDB4ZjEsIDB4NmIsIDB4 YTEsIDB4YjEsIDB4NzcKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgwYiwg MHhlMiwgMHg1NiwgMHgwMywgMHgxZSwgMHhkYiwgMHgyYywgMHg2ZCwgMHg3ZiwgMHgxYiwgMHgx NSwgMHg1OCwKLSsgICAgMHgxYSwgMHhmOSwgMHgxMywgMHgyOAotK307Ci0rCi0rLyogQUVTLTI1 NiB1c2UgZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfdXNlX2RmX3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDYxLCAweDY4 LCAweGZjLCAweDFhLCAweGYwLCAweGI1LCAweDk1LCAweDZiLCAweDg1LCAweDA5LCAweDliLCAw eDc0LAotKyAgICAweDNmLCAweDEzLCAweDc4LCAweDQ5LCAweDNiLCAweDg1LCAweGVjLCAweDkz LCAweDEzLCAweDNiLCAweGE5LCAweDRmLAotKyAgICAweDk2LCAweGFiLCAweDJjLCAweGU0LCAw eGM4LCAweDhmLCAweGRkLCAweDZhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHhh ZCwgMHhkMiwgMHhiYiwgMHhiYSwgMHhiNywgMHg2NSwgMHg4OSwgMHhjMywgMHgyMSwgMHg2Yywg MHg1NSwgMHgzMywKLSsgICAgMHgyYiwgMHgzNiwgMHhmZiwgMHhhNAotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2Rm X3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDZlLCAweGNhLCAweGU3LCAw eDIwLCAweDcyLCAweGQzLCAweDg0LCAweDVhLCAweDMyLCAweGQzLCAweDRiLCAweDI0LAotKyAg ICAweDcyLCAweGM0LCAweDYzLCAweDJiLCAweDlkLCAweDEyLCAweDI0LCAweDBjLCAweDIzLCAw eDI2LCAweDhlLCAweDgzLAotKyAgICAweDE2LCAweDM3LCAweDBiLCAweGQxLCAweDA2LCAweDRm LCAweDY4LCAweDZkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0r ICAgIDB4N2UsIDB4MDgsIDB4NGEsIDB4YmIsIDB4ZTMsIDB4MjEsIDB4N2MsIDB4YzksIDB4MjMs IDB4ZDIsIDB4ZjgsIDB4YjAsCi0rICAgIDB4NzMsIDB4OTgsIDB4YmEsIDB4ODQsIDB4NzQsIDB4 MjMsIDB4YWIsIDB4MDYsIDB4OGEsIDB4ZTIsIDB4MjIsIDB4ZDMsCi0rICAgIDB4N2IsIDB4Y2Us IDB4OWIsIDB4ZDIsIDB4NGEsIDB4NzYsIDB4YjgsIDB4ZGUKLSt9OwotKwotK19fZmlwc19jb25z dHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9l bnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweDBiLCAweDIzLCAweGFmLCAweGRmLCAweGYxLCAw eDYyLCAweGQ3LCAweGQzLCAweDQzLCAweDk3LCAweGY4LCAweDc3LAotKyAgICAweDA0LCAweGE4 LCAweDQyLCAweDIwLCAweGJkLCAweGY2LCAweDBmLCAweGMxLCAweDE3LCAweDJmLCAweDlmLCAw eDU0LAotKyAgICAweGJiLCAweDU2LCAweDE3LCAweDg2LCAweDY4LCAweDBlLCAweGJhLCAweGE5 Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgYWVzXzI1Nl91c2VfZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDMxLCAw eDhlLCAweGFkLCAweGFmLCAweDQwLCAweGViLCAweDZiLCAweDc0LCAweDMxLCAweDQ2LCAweDgw LCAweGM3LAotKyAgICAweDE3LCAweGFiLCAweDNjLCAweDdhCi0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJf YWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDk0LCAweDZiLCAweGM5LCAweDlmLCAweGFi LCAweDhkLCAweGM1LCAweGVjLCAweDcxLCAweDg4LCAweDFkLCAweDAwLAotKyAgICAweDhjLCAw eDg5LCAweDY4LCAweGU0LCAweGM4LCAweDA3LCAweDc3LCAweDM2LCAweDE3LCAweDZkLCAweDc5 LCAweDc4LAotKyAgICAweGM3LCAweDA2LCAweDRlLCAweDk5LCAweDA0LCAweDI4LCAweDI5LCAw eGMzCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4YmYs IDB4NmMsIDB4NTksIDB4MmEsIDB4MGQsIDB4NDQsIDB4MGYsIDB4YWUsIDB4OWEsIDB4NWUsIDB4 MDMsIDB4NzMsCi0rICAgIDB4ZDgsIDB4YTYsIDB4ZTEsIDB4Y2YsIDB4MjUsIDB4NjEsIDB4Mzgs IDB4MjQsIDB4ODYsIDB4OWUsIDB4NTMsIDB4ZTgsCi0rICAgIDB4YTQsIDB4ZGYsIDB4NTYsIDB4 ZjQsIDB4MDYsIDB4MDcsIDB4OWMsIDB4MGYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9 IHsKLSsgICAgMHgyMiwgMHg0YSwgMHhiNCwgMHhiOCwgMHhiNiwgMHhlZSwgMHg3ZCwgMHhiMSwg MHg5ZSwgMHhjOSwgMHhmOSwgMHhhMCwKLSsgICAgMHhkOSwgMHhlMiwgMHg5NywgMHgwMAotK307 Ci0rCi0rLyogQUVTLTI1NiB1c2UgZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0gewot KyAgICAweGE1LCAweDNlLCAweDM3LCAweDEwLCAweDE3LCAweDQzLCAweDkxLCAweDkzLCAweDU5 LCAweDFlLCAweDQ3LCAweDUwLAotKyAgICAweDg3LCAweGFhLCAweGRkLCAweGQ1LCAweGMxLCAw eGMzLCAweDg2LCAweGNkLCAweGNhLCAweDBkLCAweGRiLCAweDY4LAotKyAgICAweGUwLCAweDAy LCAweGQ4LCAweDBmLCAweGRjLCAweDQwLCAweDFhLCAweDQ3Ci0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfbm9uY2VbXSA9 IHsKLSsgICAgMHhhOSwgMHg0ZCwgMHhhNSwgMHg1YSwgMHhmZCwgMHhjNSwgMHgwYywgMHhlNSwg MHgxYywgMHg5YSwgMHgzYiwgMHg4YSwKLSsgICAgMHg0YywgMHg0NCwgMHg4NCwgMHg0MAotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfdXNlX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDhiLCAweDUy LCAweGEyLCAweDRhLCAweDkzLCAweGMzLCAweDRlLCAweGE3LCAweDFlLCAweDFjLCAweGE3LCAw eDA1LAotKyAgICAweGViLCAweDgyLCAweDliLCAweGE2LCAweDVkLCAweGU0LCAweGQ0LCAweGUw LCAweDdmLCAweGEzLCAweGQ4LCAweDZiLAotKyAgICAweDM3LCAweDg0LCAweDVmLCAweGYxLCAw eGM3LCAweGQ1LCAweGY2LCAweGQyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0r ICAgIDB4MjAsIDB4ZjQsIDB4MjIsIDB4ZWQsIDB4ZjgsIDB4NWMsIDB4YTEsIDB4NmEsIDB4MDEs IDB4Y2YsIDB4YmUsIDB4NWYsCi0rICAgIDB4OGQsIDB4NmMsIDB4OTQsIDB4N2YsIDB4YWUsIDB4 MTIsIDB4YTgsIDB4NTcsIDB4ZGIsIDB4MmEsIDB4YTksIDB4YmYsCi0rICAgIDB4YzcsIDB4YjMs IDB4NjUsIDB4ODEsIDB4ODAsIDB4OGQsIDB4MGQsIDB4NDYKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9pbnRfcmV0dXJu ZWRiaXRzW10gPSB7Ci0rICAgIDB4NGUsIDB4NDQsIDB4ZmQsIDB4ZjMsIDB4OWUsIDB4MjksIDB4 YTIsIDB4YjgsIDB4MGYsIDB4NWQsIDB4NmMsIDB4ZTEsCi0rICAgIDB4MjgsIDB4MGMsIDB4M2Is IDB4YzEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHhk ZCwgMHg0MCwgMHhlNSwgMHg5OCwgMHg3YiwgMHgyNywgMHgxNiwgMHg3MywgMHgxNSwgMHg2OCwg MHhkMiwgMHg3NiwKLSsgICAgMHhiZiwgMHgwYywgMHg2NywgMHgxNSwgMHg3NSwgMHg3OSwgMHgw MywgMHhkMywgMHhkZSwgMHhkZSwgMHg5MSwgMHg0NiwKLSsgICAgMHg0MiwgMHhkZCwgMHhkNCwg MHg2NywgMHhjOCwgMHg3OSwgMHhjOCwgMHgxZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0r ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxp bnB1dHJlc2VlZFtdID0gewotKyAgICAweDdmLCAweGQ4LCAweDFmLCAweGJkLCAweDJhLCAweGI1 LCAweDFjLCAweDExLCAweDVkLCAweDgzLCAweDRlLCAweDk5LAotKyAgICAweGY2LCAweDVjLCAw eGE1LCAweDQwLCAweDIwLCAweGVkLCAweDM4LCAweDhlLCAweGQ1LCAweDllLCAweGUwLCAweDc1 LAotKyAgICAweDkzLCAweGZlLCAweDEyLCAweDVlLCAweDVkLCAweDczLCAweGZiLCAweDc1Ci0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1 Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweGNkLCAweDJjLCAweGZmLCAw eDE0LCAweDY5LCAweDNlLCAweDRjLCAweDllLCAweGZkLCAweGZlLCAweDI2LCAweDBkLAotKyAg ICAweGU5LCAweDg2LCAweDAwLCAweDQ5LCAweDMwLCAweGJhLCAweGIxLCAweGM2LCAweDUwLCAw eDU3LCAweDc3LCAweDJhLAotKyAgICAweDYyLCAweDM5LCAweDJjLCAweDNiLCAweDc0LCAweGVi LCAweGM5LCAweDBkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4NGYsIDB4 NzgsIDB4YmUsIDB4YjksIDB4NGQsIDB4OTcsIDB4OGMsIDB4ZTksIDB4ZDAsIDB4OTcsIDB4ZmUs IDB4YWQsCi0rICAgIDB4ZmEsIDB4ZmQsIDB4MzUsIDB4NWUKLSt9OwotKwotKy8qIEFFUy0xMjgg bm8gZGYgUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4OWEsIDB4MjUsIDB4 NjUsIDB4MTAsIDB4NjcsIDB4ZDUsIDB4YjYsIDB4NmIsIDB4NzAsIDB4YTEsIDB4YjMsIDB4YTQs Ci0rICAgIDB4NDMsIDB4OTUsIDB4ODAsIDB4YzAsIDB4ODQsIDB4MGEsIDB4NzksIDB4YjAsIDB4 ODgsIDB4NzQsIDB4ZjIsIDB4YmYsCi0rICAgIDB4MzEsIDB4NmMsIDB4MzMsIDB4MzgsIDB4MGIs IDB4MDAsIDB4YjIsIDB4NWEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX25vbmNlW10gPSB7Ci0rICAgIDB4NzgsIDB4 NDcsIDB4NmIsIDB4ZjcsIDB4OTAsIDB4OGUsIDB4ODcsIDB4ZjEKLSt9OwotKwotK19fZmlwc19j b25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3By X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweGY3LCAweDIyLCAweDFkLCAweDNh LCAweGJlLCAweDFkLCAweGNhLCAweDMyLCAweDFiLCAweGJkLCAweDg3LCAweDBjLAotKyAgICAw eDUxLCAweDI0LCAweDE5LCAweGVlLCAweGEzLCAweDIzLCAweDA5LCAweDYzLCAweDMzLCAweDNk LCAweGE4LCAweDBjLAotKyAgICAweDFjLCAweGZhLCAweDQyLCAweDg5LCAweGNjLCAweDZmLCAw eGEwLCAweGE4Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAg MHhjOSwgMHhlMCwgMHg4MCwgMHhiZiwgMHg4YywgMHg0NSwgMHg1OCwgMHgzOSwgMHhmZiwgMHgw MCwgMHhhYiwgMHgwMiwKLSsgICAgMHg0YywgMHgzZSwgMHgzYSwgMHg5NSwgMHg5YiwgMHg4MCwg MHhhOCwgMHgyMSwgMHgyYSwgMHhlZSwgMHhiYSwgMHg3MywKLSsgICAgMHhiMSwgMHhkOSwgMHhj ZiwgMHgyOCwgMHhmNiwgMHg4ZiwgMHg5YiwgMHgxMgotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0 cHJbXSA9IHsKLSsgICAgMHg0YywgMHhhOCwgMHhjNSwgMHhmMCwgMHg1OSwgMHg5ZSwgMHhhNiwg MHg4ZCwgMHgyNiwgMHg1MywgMHhkNywgMHg4YSwKLSsgICAgMHhhOSwgMHhkOCwgMHhmNywgMHhl ZCwgMHhiMiwgMHhmOSwgMHgxMiwgMHg0MiwgMHhlMSwgMHhlNSwgMHhiZCwgMHhlNywKLSsgICAg MHhlNywgMHgxZCwgMHg3NCwgMHg5OSwgMHgwMCwgMHg5ZCwgMHgzMSwgMHgzZQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhf bm9fZGZfcHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGUyLCAweGFjLCAweDIwLCAw eGYwLCAweDgwLCAweGU3LCAweGJjLCAweDdlLCAweDljLCAweDdiLCAweDY1LCAweDcxLAotKyAg ICAweGFmLCAweDE5LCAweDMyLCAweDE2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5w dXQyW10gPSB7Ci0rICAgIDB4MzIsIDB4N2YsIDB4MzgsIDB4OGIsIDB4NzMsIDB4MGEsIDB4Nzgs IDB4ODMsIDB4ZGMsIDB4MzAsIDB4YmUsIDB4OWYsCi0rICAgIDB4MTAsIDB4MWYsIDB4ZjUsIDB4 MWYsIDB4Y2EsIDB4MDAsIDB4YjUsIDB4MGQsIDB4ZDYsIDB4OWQsIDB4NjAsIDB4ODMsCi0rICAg IDB4NTEsIDB4NTQsIDB4N2QsIDB4MzgsIDB4MjMsIDB4M2EsIDB4NTIsIDB4NTAKLSt9OwotKwot K19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X25vX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0gewotKyAgICAweDE4LCAweDYxLCAweDUzLCAw eDU2LCAweGVkLCAweGVkLCAweGQ3LCAweDIwLCAweGZiLCAweDcxLCAweDA0LCAweDdhLAotKyAg ICAweGIyLCAweGFjLCAweGMxLCAweDI4LCAweGNkLCAweGYyLCAweGMyLCAweGZjLCAweGFhLCAw eGIxLCAweDA2LCAweDA3LAotKyAgICAweGU5LCAweDQ2LCAweDk1LCAweDAyLCAweDQ4LCAweDAx LCAweDc4LCAweGY5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgyOSwg MHhjOCwgMHgxYiwgMHgxNSwgMHhiMSwgMHhkMSwgMHhjMiwgMHhmNiwgMHg3MSwgMHg4NiwgMHg2 OCwgMHgzMywKLSsgICAgMHg1NywgMHg4MiwgMHgzMywgMHhhZgotK307Ci0rCi0rLyogQUVTLTEy OCBubyBkZiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgYWVzXzEyOF9ub19kZl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHhjOSwgMHhjNSwg MHg3OSwgMHhiYywgMHhlOCwgMHhjNSwgMHgxOSwgMHhkOCwgMHhiYywgMHg2NiwgMHg3MywgMHg2 NywKLSsgICAgMHhmNiwgMHhkMywgMHg3MiwgMHhhYSwgMHhhNiwgMHgxNiwgMHhiOCwgMHg1MCwg MHhiNywgMHg0NywgMHgzYSwgMHg0MiwKLSsgICAgMHhhYiwgMHhmNCwgMHgxNiwgMHhiMiwgMHg5 NiwgMHhkMiwgMHhiNiwgMHg2MAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfbm9uY2VbXSA9IHsKLSsgICAgMHg1ZiwgMHhi ZiwgMHg5NywgMHgwYywgMHg0YiwgMHhhNCwgMHg4NywgMHgxMwotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcGVy c29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4Y2UsIDB4ZmIsIDB4N2IsIDB4M2YsIDB4 ZDQsIDB4NmIsIDB4MjksIDB4MGQsIDB4NjksIDB4MDYsIDB4ZmYsIDB4YmIsCi0rICAgIDB4ZjIs IDB4ZTUsIDB4YzYsIDB4NmMsIDB4MGEsIDB4MTAsIDB4YTAsIDB4Y2YsIDB4MWEsIDB4NDgsIDB4 YzcsIDB4OGIsCi0rICAgIDB4M2MsIDB4MTYsIDB4ODgsIDB4ZWQsIDB4NTAsIDB4MTMsIDB4ODEs IDB4Y2UKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTI4X25vX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDRiLCAweDIyLCAw eDQ2LCAweDE4LCAweDAyLCAweDdiLCAweGQyLCAweDFiLCAweDIyLCAweDQyLCAweDdjLCAweDM3 LAotKyAgICAweGQ5LCAweGY2LCAweGU4LCAweDliLCAweDEyLCAweDMwLCAweDVmLCAweGU5LCAw eDkwLCAweGU4LCAweDA4LCAweDI0LAotKyAgICAweDRmLCAweDA2LCAweDY2LCAweGRiLCAweDE5 LCAweDJiLCAweDEzLCAweDk1Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAg IDB4MmUsIDB4OTYsIDB4NzAsIDB4NjQsIDB4ZmEsIDB4ZGYsIDB4ZGYsIDB4NTcsIDB4YjUsIDB4 ODIsIDB4ZWUsIDB4ZDYsCi0rICAgIDB4ZWQsIDB4M2UsIDB4NjUsIDB4YzIKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25v X2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDI2LCAweGMwLCAweDcyLCAweDE2 LCAweDNhLCAweDRiLCAweGI3LCAweDk5LCAweGQ0LCAweDA3LCAweGFmLCAweDY2LAotKyAgICAw eDYyLCAweDM2LCAweDk2LCAweGE0LCAweDUxLCAweDE3LCAweGZhLCAweDA3LCAweDhiLCAweDE3 LCAweDVlLCAweGExLAotKyAgICAweDJmLCAweDNjLCAweDEwLCAweGU3LCAweDkwLCAweGQwLCAw eDQ2LCAweDAwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsg ICAgMHg4MywgMHgzOSwgMHgzNywgMHg3YiwgMHgwMiwgMHgwNiwgMHhkMiwgMHgxMiwgMHgxMywg MHg4ZCwgMHg4YiwgMHhmMiwKLSsgICAgMHhmMCwgMHhmNiwgMHgyNiwgMHhlYiwgMHhhNCwgMHgy MiwgMHg3YiwgMHhjMiwgMHhlNywgMHhiYSwgMHg3OSwgMHhlNCwKLSsgICAgMHgzYiwgMHg3Nywg MHg1ZCwgMHg0ZCwgMHg0NywgMHhiMiwgMHgyZCwgMHhiNAotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlu cHV0MltdID0gewotKyAgICAweDBiLCAweGI5LCAweDY3LCAweDM3LCAweGRiLCAweDgzLCAweGRm LCAweGNhLCAweDgxLCAweDhiLCAweGY5LCAweDNmLAotKyAgICAweGYxLCAweDExLCAweDFiLCAw eDJmLCAweGYwLCAweDYxLCAweGE2LCAweGRmLCAweGJhLCAweGEzLCAweGIxLCAweGFjLAotKyAg ICAweGQzLCAweGU2LCAweDA5LCAweGI4LCAweDJjLCAweDZhLCAweDY3LCAweGQ2Ci0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19k Zl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgxZSwgMHhhNywgMHhhNCwgMHhlNCwgMHhlMSwg MHhhNiwgMHg3YywgMHg2OSwgMHg5YSwgMHg0NCwgMHg2YywgMHgzNiwKLSsgICAgMHg4MSwgMHgz NywgMHgxOSwgMHhkNAotK307Ci0rCi0rLyogQUVTLTE5MiBubyBkZiBQUiAgKi8KLStfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRy b3B5aW5wdXRbXSA9IHsKLSsgICAgMHg5ZCwgMHgyYywgMHhkMiwgMHg1NSwgMHg2NiwgMHhlYSwg MHhlMCwgMHhiZSwgMHgxOCwgMHhiNywgMHg3NiwgMHhlNywKLSsgICAgMHg3MywgMHgzNSwgMHhk OCwgMHgxZiwgMHhhZCwgMHgzYSwgMHhlMywgMHg4MSwgMHgwZSwgMHg5MiwgMHhkMCwgMHg2MSwK LSsgICAgMHhjOSwgMHgxMiwgMHgyNiwgMHhmNiwgMHgxYywgMHhkZiwgMHhmZSwgMHg0NywgMHhh YSwgMHhmZSwgMHg3ZCwgMHg1YSwKLSsgICAgMHgxNywgMHgxZiwgMHg4ZCwgMHg5YQotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9f ZGZfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHg0NCwgMHg4MiwgMHhlZCwgMHhlOCwgMHg0YywgMHgy OCwgMHg1YSwgMHgxNCwgMHhmZiwgMHg4OCwgMHg4ZCwgMHgxOSwKLSsgICAgMHg2MSwgMHg1Yywg MHhlZSwgMHgwZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7 Ci0rICAgIDB4NDcsIDB4ZDcsIDB4OWIsIDB4OTksIDB4YWEsIDB4Y2IsIDB4ZTcsIDB4ZDIsIDB4 NTcsIDB4NjYsIDB4MmMsIDB4ZTEsCi0rICAgIDB4NzgsIDB4ZDYsIDB4MmMsIDB4ZWEsIDB4YTMs IDB4MjMsIDB4NWYsIDB4MmEsIDB4YzEsIDB4M2EsIDB4ZjAsIDB4YTQsCi0rICAgIDB4MjAsIDB4 M2IsIDB4ZmEsIDB4MDcsIDB4ZDUsIDB4MDUsIDB4MDIsIDB4ZTQsIDB4NTcsIDB4MDEsIDB4YjYs IDB4MTAsCi0rICAgIDB4NTcsIDB4MmUsIDB4ZTcsIDB4NTUKLSt9OwotKwotK19fZmlwc19jb25z dHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2Fk ZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDRiLCAweDc0LCAweDBiLCAweDQwLCAweGNlLCAw eDZiLCAweGMyLCAweDZhLCAweDI0LCAweGI0LCAweGYzLCAweGFkLAotKyAgICAweDdhLCAweGE1 LCAweDdhLCAweGEyLCAweDE1LCAweGUyLCAweGM4LCAweDYxLCAweDE1LCAweGM2LCAweGI3LCAw eDg1LAotKyAgICAweDY5LCAweDExLCAweGFkLCAweDdiLCAweDE0LCAweGQyLCAweGY2LCAweDEy LCAweGExLCAweDk1LCAweDVkLCAweDNmLAotKyAgICAweGUyLCAweGQwLCAweDBjLCAweDJmCi0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweDBjLCAweDljLCAweGFkLCAw eDA1LCAweGVlLCAweGFlLCAweDQ4LCAweDIzLCAweDg5LCAweDU5LCAweGExLCAweDk0LAotKyAg ICAweGQ3LCAweGQ4LCAweDc1LCAweGQ1LCAweDU0LCAweDkzLCAweGM3LCAweDRhLCAweGQ5LCAw eDI2LCAweGRlLCAweGViLAotKyAgICAweGJhLCAweGIwLCAweDdlLCAweDMwLCAweDFkLCAweDVm LCAweDY5LCAweDQwLCAweDljLCAweDNiLCAweDE3LCAweDU4LAotKyAgICAweDFkLCAweDMwLCAw eGIzLCAweDc4Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAg IDB4ZjcsIDB4OTMsIDB4YjAsIDB4NmQsIDB4NzcsIDB4ODMsIDB4ZDUsIDB4MzgsIDB4MDEsIDB4 ZTEsIDB4NTIsIDB4NDAsCi0rICAgIDB4N2UsIDB4M2UsIDB4MGMsIDB4MjYKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25v X2RmX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHhiYywgMHg0YiwgMHgzNywgMHg0 NCwgMHgxYywgMHhjNSwgMHg0NSwgMHg1ZiwgMHg4ZiwgMHg1MSwgMHg2MiwgMHg4YSwKLSsgICAg MHg4NSwgMHgzMCwgMHgxZCwgMHg3YywgMHhlNCwgMHhjZiwgMHhmNywgMHg0NCwgMHhjZSwgMHgz MiwgMHgzZSwgMHg1NywKLSsgICAgMHg5NSwgMHhhNCwgMHgyYSwgMHhkZiwgMHhmZCwgMHg5ZSwg MHgzOCwgMHg0MSwgMHhiMywgMHhmNiwgMHhjNSwgMHhlZSwKLSsgICAgMHgwYywgMHg0YiwgMHhl ZSwgMHg2ZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4 ZWMsIDB4YWYsIDB4ZjYsIDB4NGYsIDB4YjEsIDB4YTAsIDB4NTQsIDB4YjUsIDB4NWIsIDB4ZTMs IDB4NDYsIDB4YjAsCi0rICAgIDB4NzYsIDB4NWEsIDB4N2MsIDB4M2YsIDB4N2IsIDB4OTQsIDB4 NjksIDB4MjEsIDB4NTEsIDB4MDIsIDB4ZTUsIDB4OWYsCi0rICAgIDB4MDQsIDB4NTksIDB4MDIs IDB4OTgsIDB4YzYsIDB4NDMsIDB4MmMsIDB4Y2MsIDB4MjYsIDB4NGMsIDB4ODcsIDB4NmIsCi0r ICAgIDB4OGUsIDB4MGEsIDB4ODMsIDB4ZGYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX3JldHVybmVkYml0c1tdID0g ewotKyAgICAweDc0LCAweDQ1LCAweGZiLCAweDUzLCAweDg0LCAweDk2LCAweGJlLCAweGZmLCAw eDE1LCAweGNjLCAweDQxLCAweDkxLAotKyAgICAweGI5LCAweGExLCAweDIxLCAweDY4Ci0rfTsK LSsKLSsvKiBBRVMtMTkyIG5vIGRmIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dFtdID0gewotKyAg ICAweDNjLCAweDdkLCAweGI1LCAweGUwLCAweDU0LCAweGQ5LCAweDZlLCAweDhjLCAweGE5LCAw eDg2LCAweGNlLCAweDRlLAotKyAgICAweDZiLCAweGFmLCAweGViLCAweDJmLCAweGU3LCAweDc1 LCAweGUwLCAweDhiLCAweGE0LCAweDNiLCAweDA3LCAweGZlLAotKyAgICAweGJlLCAweDMzLCAw eDc1LCAweDkzLCAweDgwLCAweDI3LCAweGI1LCAweDI5LCAweDQ3LCAweDhiLCAweGM3LCAweDI4 LAotKyAgICAweDk0LCAweGMzLCAweDU5LCAweDYzCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9ub25jZVtdID0gewotKyAg ICAweDQzLCAweGYxLCAweDdkLCAweGI4LCAweGMzLCAweGZlLCAweGQwLCAweDIzLCAweDZiLCAw eGI0LCAweDkyLCAweGRiLAotKyAgICAweDI5LCAweGZkLCAweDQ1LCAweDcxCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9u b19kZl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg5ZiwgMHgyNCwgMHgyOSwg MHg5OSwgMHg5ZSwgMHgwMSwgMHhhYiwgMHhlOSwgMHgxOSwgMHhkOCwgMHgyMywgMHgwOCwKLSsg ICAgMHhiNywgMHhkNiwgMHg3ZSwgMHg4YywgMHhjMCwgMHg5ZSwgMHg3ZiwgMHg2ZSwgMHg1Yiwg MHgzMywgMHgyMCwgMHg5NiwKLSsgICAgMHgwYiwgMHgyMywgMHgyYywgMHhhNSwgMHg2YSwgMHhm OCwgMHgxYiwgMHgwNCwgMHgyNiwgMHhkYiwgMHgyZSwgMHgyYiwKLSsgICAgMHgzYiwgMHg4OCwg MHhjZSwgMHgzNQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGFlc18xOTJfbm9fZGZfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4OTQsIDB4 ZTksIDB4N2MsIDB4M2QsIDB4YTcsIDB4ZGIsIDB4NjAsIDB4ODMsIDB4MWYsIDB4OTgsIDB4M2Ys IDB4MGIsCi0rICAgIDB4ODgsIDB4NTksIDB4NTcsIDB4NTEsIDB4ODgsIDB4OWYsIDB4NzYsIDB4 NDksIDB4OWYsIDB4YTYsIDB4ZGEsIDB4NzEsCi0rICAgIDB4MWQsIDB4MGQsIDB4NDcsIDB4MTYs IDB4NjMsIDB4YzUsIDB4NjgsIDB4ZTQsIDB4NWQsIDB4MzksIDB4NjksIDB4YjMsCi0rICAgIDB4 M2UsIDB4YmUsIDB4ZDQsIDB4OGUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsg ICAgMHhmOSwgMHhkNywgMHhhZCwgMHg2OSwgMHhhYiwgMHg4ZiwgMHgyMywgMHg1NiwgMHg3MCwg MHgxNywgMHg0ZiwgMHgyYSwKLSsgICAgMHg0NSwgMHhlNywgMHg0YSwgMHhjNQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf bm9fZGZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4YTYsIDB4NzEsIDB4NmEsIDB4 M2QsIDB4YmEsIDB4ZDEsIDB4ZTgsIDB4NjYsIDB4YTYsIDB4ZWYsIDB4YjIsIDB4MGUsCi0rICAg IDB4YTgsIDB4OWMsIDB4YWEsIDB4NGUsIDB4YWYsIDB4MTcsIDB4ODksIDB4NTAsIDB4MDAsIDB4 ZGEsIDB4YTEsIDB4YjEsCi0rICAgIDB4MGIsIDB4YTQsIDB4ZDksIDB4MzUsIDB4ODksIDB4Yzgs IDB4ZTUsIDB4YjAsIDB4ZDksIDB4YjcsIDB4YzQsIDB4MzMsCi0rICAgIDB4OWIsIDB4Y2IsIDB4 N2UsIDB4NzUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMTkyX25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAg ICAweDI3LCAweDIxLCAweGZjLCAweGMyLCAweGJkLCAweGYzLCAweDNjLCAweGNlLCAweGMzLCAw eGNhLCAweGMxLCAweDAxLAotKyAgICAweGUwLCAweGZmLCAweDkzLCAweDEyLCAweDdkLCAweDU0 LCAweDQyLCAweGUzLCAweDlmLCAweDAzLCAweGRmLCAweDI3LAotKyAgICAweDA0LCAweDA3LCAw eDNjLCAweDUzLCAweDdmLCAweGE4LCAweDY2LCAweGM4LCAweDk3LCAweDRiLCAweDYxLCAweDQw LAotKyAgICAweDVkLCAweDdhLCAweDI1LCAweDc5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXQy W10gPSB7Ci0rICAgIDB4MmQsIDB4OGUsIDB4MTYsIDB4NWQsIDB4MGIsIDB4OWYsIDB4ZWIsIDB4 YWEsIDB4ZDYsIDB4ZWMsIDB4MjgsIDB4NzEsCi0rICAgIDB4N2MsIDB4MGIsIDB4YzEsIDB4MWQs IDB4ZDQsIDB4NDQsIDB4MTksIDB4NDcsIDB4ZmQsIDB4MWQsIDB4N2MsIDB4ZTUsCi0rICAgIDB4 ZjMsIDB4MjcsIDB4ZTEsIDB4YjYsIDB4NzIsIDB4MGEsIDB4ZTAsIDB4ZWMsIDB4MGUsIDB4Y2Qs IDB4ZWYsIDB4MWEsCi0rICAgIDB4OTEsIDB4NmEsIDB4ZTMsIDB4NWYKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3JldHVy bmVkYml0c1tdID0gewotKyAgICAweGU1LCAweGRhLCAweGI4LCAweGUwLCAweDYzLCAweDU5LCAw eDVhLCAweGNjLCAweDNkLCAweGRjLCAweDlmLCAweGU4LAotKyAgICAweDY2LCAweDY3LCAweDJj LCAweDkyCi0rfTsKLSsKLSsvKiBBRVMtMjU2IG5vIGRmIFBSICAqLwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1 dFtdID0gewotKyAgICAweDE1LCAweGM3LCAweDVkLCAweGNiLCAweDQxLCAweDRiLCAweDE2LCAw eDAxLCAweDNhLCAweGQxLCAweDQ0LCAweGU4LAotKyAgICAweDIyLCAweDMyLCAweGM2LCAweDlj LCAweDNmLCAweGU3LCAweDQzLCAweGY1LCAweDlhLCAweGQzLCAweGVhLCAweGYyLAotKyAgICAw eGQ3LCAweDRlLCAweDZlLCAweDZhLCAweDU1LCAweDczLCAweDQwLCAweGVmLCAweDg5LCAweGFk LCAweDBkLCAweDAzLAotKyAgICAweDk2LCAweDdlLCAweDc4LCAweDgxLCAweDJmLCAweDkxLCAw eDFiLCAweDQ0LCAweGIwLCAweDAyLCAweGJhLCAweDFjCi0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9ub25jZVtdID0g ewotKyAgICAweGRjLCAweGU0LCAweGQ0LCAweDI3LCAweDdhLCAweDkwLCAweGQ3LCAweDk5LCAw eDQzLCAweGExLCAweDNjLCAweDMwLAotKyAgICAweGNjLCAweDRiLCAweGVlLCAweDJlCi0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzI1Nl9ub19kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHhlMywgMHhl NiwgMHhiOSwgMHgxMSwgMHhlNCwgMHg3YSwgMHhhNCwgMHg0MCwgMHg2YiwgMHhmOCwgMHg3Mywg MHhmNywKLSsgICAgMHg3ZSwgMHhlYywgMHhjNywgMHhiOSwgMHg5NywgMHhiZiwgMHhmOCwgMHgy NSwgMHg3YiwgMHhiZSwgMHgxMSwgMHg5YiwKLSsgICAgMHg1YiwgMHg2YSwgMHgwYywgMHgyZSwg MHgyYiwgMHgwMSwgMHg1MSwgMHhjZCwgMHg0MSwgMHg0YiwgMHg2YiwgMHhhYywKLSsgICAgMHgz MSwgMHhhOCwgMHgwYiwgMHhmNywgMHhlNiwgMHg1OSwgMHg0MiwgMHhiOCwgMHgwMywgMHgwYywg MHhmOCwgMHgwNgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAg IDB4NmEsIDB4OWYsIDB4MDAsIDB4OTEsIDB4YWUsIDB4ZmUsIDB4Y2YsIDB4ODQsIDB4OTksIDB4 Y2UsIDB4YjEsIDB4NDAsCi0rICAgIDB4NmQsIDB4NWQsIDB4MzMsIDB4MjgsIDB4ODQsIDB4ZjQs IDB4OGMsIDB4NjMsIDB4NGMsIDB4N2UsIDB4YmQsIDB4MmMsCi0rICAgIDB4ODAsIDB4NzYsIDB4 ZWUsIDB4NWEsIDB4YWEsIDB4MTUsIDB4MDcsIDB4MzEsIDB4ZDgsIDB4YmIsIDB4OGMsIDB4Njks Ci0rICAgIDB4OWQsIDB4OWQsIDB4YmMsIDB4N2UsIDB4NDksIDB4YWUsIDB4ZWMsIDB4MzksIDB4 NmIsIDB4ZDEsIDB4MWYsIDB4N2UKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0r ICAgIDB4ZjMsIDB4YjksIDB4NzUsIDB4OWMsIDB4YmQsIDB4ODgsIDB4ZWEsIDB4YTIsIDB4NTAs IDB4YWQsIDB4ZDYsIDB4MTYsCi0rICAgIDB4MWEsIDB4MTIsIDB4M2MsIDB4ODYsIDB4NjgsIDB4 YWYsIDB4NmYsIDB4YmUsIDB4MTksIDB4ZjIsIDB4ZWUsIDB4Y2MsCi0rICAgIDB4YTUsIDB4NzAs IDB4ODQsIDB4NTMsIDB4NTAsIDB4Y2IsIDB4OWYsIDB4MTQsIDB4YTksIDB4ZTUsIDB4ZWUsIDB4 YjksCi0rICAgIDB4NDgsIDB4NDUsIDB4NDAsIDB4ZTIsIDB4YzcsIDB4YzksIDB4OWEsIDB4NzQs IDB4ZmYsIDB4OGMsIDB4OTksIDB4MWYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2ludF9yZXR1cm5lZGJp dHNbXSA9IHsKLSsgICAgMHgyZSwgMHhmMiwgMHg0NSwgMHg0YywgMHg2MiwgMHgyZSwgMHgwYSwg MHhiOSwgMHg2YiwgMHhhMiwgMHhmZCwgMHg1NiwKLSsgICAgMHg3OSwgMHg2MCwgMHg5MywgMHhj ZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweGFmLCAw eDY5LCAweDIwLCAweGU5LCAweDNiLCAweDM3LCAweDlkLCAweDNmLCAweGI0LCAweDgwLCAweDAy LCAweDdhLAotKyAgICAweDI1LCAweDdkLCAweGI4LCAweGRlLCAweDcxLCAweGM1LCAweDA2LCAw eDBjLCAweGI0LCAweGUyLCAweDhmLCAweDM1LAotKyAgICAweGQ4LCAweDE0LCAweDBkLCAweDdm LCAweDc2LCAweDYzLCAweDRlLCAweGI1LCAweGVlLCAweGU5LCAweDZmLCAweDM0LAotKyAgICAw eGM3LCAweDVmLCAweDU2LCAweDE0LCAweDRhLCAweGU4LCAweDczLCAweDk1LCAweDViLCAweDFj LCAweGI5LCAweGNiCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsg ICAgMHhlNSwgMHhiMCwgMHgyZSwgMHg3ZSwgMHg1MiwgMHgzMCwgMHhlMywgMHg2MywgMHg4Miwg MHhiNiwgMHg0NCwgMHhkMywKLSsgICAgMHgyNSwgMHgxOSwgMHgwNSwgMHgyNCwgMHg5YSwgMHg5 ZiwgMHg1ZiwgMHgyNywgMHg2YSwgMHgyOSwgMHhhYiwgMHhmYSwKLSsgICAgMHgwNywgMHhhMiwg MHg0MiwgMHgwZiwgMHhjNSwgMHhhOCwgMHg5NCwgMHg3YywgMHgxNywgMHg3YiwgMHg4NSwgMHg4 MywKLSsgICAgMHgwYywgMHgyNSwgMHgwZSwgMHg2MywgMHgwYiwgMHhlOSwgMHgxMiwgMHg2MCwg MHhjZCwgMHhlZiwgMHg4MCwgMHgwZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0r ICAgIDB4NWUsIDB4ZjIsIDB4MjYsIDB4ZWYsIDB4OWYsIDB4NTgsIDB4NWQsIDB4ZDUsIDB4NGEs IDB4MTAsIDB4ZmUsIDB4YTcsCi0rICAgIDB4MmQsIDB4NWYsIDB4NGEsIDB4NDYKLSt9OwotKwot Ky8qIEFFUy0yNTYgbm8gZGYgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4 ZmIsIDB4Y2YsIDB4MWIsIDB4NjEsIDB4MTYsIDB4ODksIDB4NzgsIDB4MjMsIDB4ZjUsIDB4ZDgs IDB4OTYsIDB4ZTMsCi0rICAgIDB4NGUsIDB4NjQsIDB4MGIsIDB4MjksIDB4OWEsIDB4M2YsIDB4 ZjgsIDB4YTUsIDB4ZWQsIDB4ZjIsIDB4ZmUsIDB4ZGIsCi0rICAgIDB4MTYsIDB4Y2EsIDB4N2Ys IDB4MTAsIDB4ZmEsIDB4NWUsIDB4MTgsIDB4NzYsIDB4MmMsIDB4NjMsIDB4NWUsIDB4OTYsCi0r ICAgIDB4Y2YsIDB4YjMsIDB4ZDYsIDB4ZmMsIDB4YWYsIDB4OTksIDB4MzksIDB4MjgsIDB4OWMs IDB4NjEsIDB4ZTgsIDB4YjMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX25vbmNlW10gPSB7Ci0rICAgIDB4MTIsIDB4OTYs IDB4ZjAsIDB4NTIsIDB4ZjMsIDB4OGQsIDB4ODEsIDB4Y2YsIDB4ZGUsIDB4ODYsIDB4ZjIsIDB4 OTksCi0rICAgIDB4NDMsIDB4OTYsIDB4YjksIDB4ZjAKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3BlcnNvbmFs aXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDYzLCAweDBkLCAweDc4LCAweGY1LCAweDkwLCAw eDhlLCAweDMyLCAweDQ3LCAweGIwLCAweDRkLCAweDM3LCAweDYwLAotKyAgICAweDA5LCAweDk2 LCAweGJjLCAweGJmLCAweDk3LCAweDdhLCAweDYyLCAweDE0LCAweDQ1LCAweGJkLCAweDhkLCAw eGNjLAotKyAgICAweDY5LCAweGZiLCAweDAzLCAweGUxLCAweDgwLCAweDFjLCAweGM3LCAweGUy LCAweDJhLCAweGY5LCAweDM3LCAweDNmLAotKyAgICAweDY2LCAweDRkLCAweDYyLCAweGQ5LCAw eDEwLCAweGUwLCAweGFkLCAweGM4LCAweDlhLCAweGYwLCAweGE4LCAweDZkCi0rfTsKLSsKLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9h ZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHgzNiwgMHhjNiwgMHgxMywgMHg2MCwgMHhiYiwg MHgxNCwgMHhhZCwgMHgyMiwgMHhiMCwgMHgzOCwgMHhhYywgMHhhNiwKLSsgICAgMHgxOCwgMHgx NiwgMHg5MywgMHgyNSwgMHg4NiwgMHhiNywgMHhkYywgMHhkYywgMHgzNiwgMHg5OCwgMHgyYiwg MHhmOSwKLSsgICAgMHg2OCwgMHgzMywgMHhkMywgMHhjNiwgMHhmZiwgMHhjZSwgMHg4ZCwgMHgx NSwgMHg1OSwgMHg4MiwgMHg3NiwgMHhlZCwKLSsgICAgMHg2ZiwgMHg4ZCwgMHg0OSwgMHg3NCwg MHgyZiwgMHhkYSwgMHhkYywgMHgxZiwgMHgxNywgMHhkMCwgMHhkZSwgMHgxNwotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZf aW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDE2LCAweDJmLCAweDhlLCAweDNmLCAweDIx LCAweDdhLCAweDFjLCAweDIwLCAweDU2LCAweGQxLCAweDkyLCAweGY2LAotKyAgICAweGQyLCAw eDI1LCAweDc1LCAweDBlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsK LSsgICAgMHg5MSwgMHg3OSwgMHg3NiwgMHhlZSwgMHhlMCwgMHhjZiwgMHg5ZSwgMHhjMiwgMHhk NSwgMHhkNCwgMHgyMywgMHg5YiwKLSsgICAgMHgxMiwgMHg4YywgMHg3ZSwgMHgwYSwgMHhiNywg MHhkMiwgMHg4YiwgMHhkNiwgMHg3YywgMHhhMywgMHhjNiwgMHhlNSwKLSsgICAgMHgwZSwgMHhh YSwgMHhjNywgMHg2YiwgMHhhZSwgMHgwZCwgMHhmYSwgMHg1MywgMHgwNiwgMHg3OSwgMHhhMSwg MHhlZCwKLSsgICAgMHg0ZCwgMHg2YSwgMHgwZSwgMHhkOCwgMHg5ZCwgMHhiZSwgMHgxYiwgMHgz MSwgMHg5MywgMHg3YiwgMHhlYywgMHhmYgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnCi0rICAg IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0 cmVzZWVkW10gPSB7Ci0rICAgIDB4ZDIsIDB4NDYsIDB4NTAsIDB4MjIsIDB4MTAsIDB4MTQsIDB4 NjMsIDB4ZjcsIDB4ZWEsIDB4MGYsIDB4YjksIDB4N2UsCi0rICAgIDB4MGQsIDB4ZTEsIDB4OTQs IDB4MDcsIDB4YWYsIDB4MDksIDB4NDQsIDB4MzEsIDB4ZWEsIDB4NjQsIDB4YTQsIDB4MTgsCi0r ICAgIDB4NWIsIDB4ZjksIDB4ZDgsIDB4YzIsIDB4ZmEsIDB4MDMsIDB4NDcsIDB4YzUsIDB4Mzks IDB4NDMsIDB4ZDUsIDB4M2IsCi0rICAgIDB4NjIsIDB4ODYsIDB4NjQsIDB4ZWEsIDB4MmMsIDB4 NzMsIDB4OGMsIDB4YWUsIDB4OWQsIDB4OTgsIDB4OTgsIDB4MjkKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9u YWxpbnB1dDJbXSA9IHsKLSsgICAgMHg4YywgMHhhYiwgMHgxOCwgMHhmOCwgMHhjMywgMHhlYywg MHgxOCwgMHg1YywgMHhiMywgMHgxZSwgMHg5ZCwgMHhiZSwKLSsgICAgMHgzZiwgMHgwMywgMHhi NCwgMHgwMCwgMHg5OCwgMHg5ZCwgMHhhZSwgMHhlYiwgMHhmNCwgMHg5NCwgMHhmOCwgMHg0MiwK LSsgICAgMHg4ZiwgMHhlMywgMHgzOSwgMHgwNywgMHhlMSwgMHhjOSwgMHhhZCwgMHgwYiwgMHgx ZiwgMHhlZCwgMHhjMCwgMHhiYSwKLSsgICAgMHhmNiwgMHhkMSwgMHhlYywgMHgyNywgMHg4Niwg MHg3YiwgMHhkNiwgMHg1NSwgMHg5YiwgMHg2MCwgMHhhNSwgMHhjNgotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcmV0dXJu ZWRiaXRzW10gPSB7Ci0rICAgIDB4ZWYsIDB4ZDIsIDB4ZDgsIDB4NWMsIDB4ZGMsIDB4NjIsIDB4 MjUsIDB4OWYsIDB4YWEsIDB4MWUsIDB4MmMsIDB4NjcsCi0rICAgIDB4ZjYsIDB4MDIsIDB4MzIs IDB4ZTIKLSt9OwotKwotKy8qIFNIQS0xIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweGQy LCAweDM2LCAweGE1LCAweDI3LCAweDMxLCAweDczLCAweGRkLCAweDExLCAweDRmLCAweDkzLCAw eGJkLCAweGUyLAotKyAgICAweDMxLCAweGE1LCAweDkxLCAweDEzCi0rfTsKLSsKLStfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9ub25jZVtdID0gewot KyAgICAweGI1LCAweGIzLCAweDYwLCAweGVmLCAweGY3LCAweDYzLCAweDMxLCAweGYzCi0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHhkNCwgMHhiYiwgMHgwMiwgMHgxMCwg MHhiMiwgMHg3MSwgMHhkYiwgMHg4MSwgMHhkNiwgMHhmMCwgMHg0MiwgMHg2MCwKLSsgICAgMHhk YSwgMHhlYSwgMHg3NywgMHg1MgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4NGQs IDB4ZDIsIDB4NmMsIDB4ODcsIDB4ZmIsIDB4MmMsIDB4NGYsIDB4YTYsIDB4OGQsIDB4MTYsIDB4 NjMsIDB4MjIsCi0rICAgIDB4NmEsIDB4NTEsIDB4ZTMsIDB4ZjgKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHBy W10gPSB7Ci0rICAgIDB4YzksIDB4ODMsIDB4OWUsIDB4MTYsIDB4ZjYsIDB4MWMsIDB4MGYsIDB4 YjIsIDB4ZWMsIDB4NjAsIDB4MzEsIDB4YTksCi0rICAgIDB4Y2IsIDB4YTksIDB4MzYsIDB4N2EK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEx X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhhOCwgMHgxMywgMHg0ZiwgMHhmNCwg MHgzMSwgMHgwMiwgMHg0NCwgMHhlMywgMHhkMywgMHgzZCwgMHg2MSwgMHg5ZSwKLSsgICAgMHhl NSwgMHhjNiwgMHgzZSwgMHg4OSwgMHhiNSwgMHg5YiwgMHgwZiwgMHgzNQotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfYWRkaXRpb25h bGlucHV0MltdID0gewotKyAgICAweGY5LCAweGU4LCAweGQyLCAweDcyLCAweDEzLCAweDM0LCAw eDk1LCAweDZmLCAweDE1LCAweDQ5LCAweDQ3LCAweDk5LAotKyAgICAweDE2LCAweDAzLCAweDE5 LCAweDQ3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHg0ZSwgMHg4YywgMHg0OSwg MHg5YiwgMHg0YSwgMHg1YywgMHg5YiwgMHg5YywgMHgzYSwgMHhlZSwgMHhmYiwgMHhkMiwKLSsg ICAgMHhhZSwgMHhjZCwgMHg4YywgMHhjNAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4 NTAsIDB4YjQsIDB4YjQsIDB4Y2QsIDB4NjgsIDB4NTcsIDB4ZmMsIDB4MmUsIDB4YzEsIDB4NTIs IDB4Y2MsIDB4ZjYsCi0rICAgIDB4NjgsIDB4YTQsIDB4ODEsIDB4ZWQsIDB4N2UsIDB4ZTQsIDB4 MWQsIDB4ODcKLSt9OwotKwotKy8qIFNIQS0xIE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAw eGE5LCAweDQ3LCAweDFiLCAweDI5LCAweDJkLCAweDFjLCAweDA1LCAweGRmLCAweDc2LCAweGQw LCAweDYyLCAweGY5LAotKyAgICAweGUyLCAweDdmLCAweDRjLCAweDdiCi0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9ub25jZVtdID0gewot KyAgICAweDUzLCAweDIzLCAweDI0LCAweGUzLCAweGVjLCAweDBjLCAweDU0LCAweDE0Ci0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wZXJz b25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHg3YSwgMHg4NywgMHhhMSwgMHhhYywgMHgx YywgMHhmZCwgMHhhYiwgMHhhZSwgMHhmNywgMHhkNiwgMHhmYiwgMHg3NiwKLSsgICAgMHgyOCwg MHhlYywgMHg2ZCwgMHhjYQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfYWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4ZmMsIDB4OTIs IDB4MzUsIDB4ZDYsIDB4N2UsIDB4YjcsIDB4MjQsIDB4NjUsIDB4ZmQsIDB4MTIsIDB4MjcsIDB4 MzUsCi0rICAgIDB4YzAsIDB4NzIsIDB4Y2EsIDB4MjgKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsK LSsgICAgMHg1NywgMHg4OCwgMHg4MiwgMHhlNSwgMHgyNSwgMHhhNSwgMHgyYywgMHg0YSwgMHgw NiwgMHgyMCwgMHg2YywgMHg3MiwKLSsgICAgMHg1NSwgMHg2MSwgMHhkZCwgMHg5MCwgMHg3MSwg MHg5ZiwgMHg5NSwgMHhlYQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTFfZW50cm9weWlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4NjksIDB4 YTUsIDB4NDAsIDB4NjIsIDB4OTgsIDB4NDcsIDB4NTYsIDB4NzMsIDB4NGEsIDB4OGYsIDB4NjAs IDB4OTYsCi0rICAgIDB4ZDYsIDB4OTksIDB4MjcsIDB4ZWQKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dHJlc2Vl ZFtdID0gewotKyAgICAweGU1LCAweDQwLCAweDRlLCAweGJkLCAweDUwLCAweDAwLCAweGY1LCAw eDE1LCAweGE2LCAweGVlLCAweDQ1LCAweGRhLAotKyAgICAweDg0LCAweDNkLCAweGQ0LCAweGMw Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MV9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4MTEsIDB4NTEsIDB4MTQsIDB4ZjAsIDB4 MDksIDB4MWIsIDB4NGUsIDB4NTYsIDB4MGQsIDB4ZTksIDB4ZjYsIDB4MWUsCi0rICAgIDB4NTIs IDB4NjUsIDB4Y2QsIDB4OTYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGExX3JldHVybmVkYml0c1tdID0gewotKyAgICAweGExLCAweDljLCAw eDk0LCAweDZlLCAweDI5LCAweGUxLCAweDMzLCAweDBkLCAweDMyLCAweGQ2LCAweGFhLCAweGNl LAotKyAgICAweDcxLCAweDNmLCAweDUyLCAweDcyLCAweDhiLCAweDQyLCAweGE4LCAweGQ3Ci0r fTsKLSsKLSsvKiBTSEEtMjI0IFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4MTIsIDB4 NjksIDB4MzIsIDB4NGYsIDB4ODMsIDB4YTYsIDB4ZjUsIDB4MTQsIDB4ZTMsIDB4NDksIDB4M2Us IDB4NzUsCi0rICAgIDB4M2UsIDB4ZGUsIDB4YWQsIDB4YTEsIDB4MjksIDB4YzMsIDB4ZjMsIDB4 MTksIDB4MjAsIDB4YjUsIDB4NGMsIDB4ZDkKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfbm9uY2VbXSA9IHsKLSsgICAgMHg2YSwg MHg3OCwgMHhkMCwgMHhlYiwgMHhiYiwgMHg1YSwgMHhmMCwgMHhlZSwgMHhlOCwgMHhjMywgMHhi YSwgMHg3MQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHhkNSwgMHhi OCwgMHhiNiwgMHhiYywgMHhjMSwgMHg1YiwgMHg2MCwgMHgzMSwgMHgzYywgMHhmNSwgMHhlNSwg MHhjMCwKLSsgICAgMHg4ZSwgMHg1MiwgMHg3YSwgMHhiZCwgMHhlYSwgMHg0NywgMHhhOSwgMHg1 ZiwgMHg4ZiwgMHhmOSwgMHg4YiwgMHhhZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsg ICAgMHgxZiwgMHg1NSwgMHhlYywgMHhhZSwgMHgxNiwgMHgxMiwgMHg4NCwgMHhiYSwgMHg4NCwg MHgxNiwgMHgxOSwgMHg4OCwKLSsgICAgMHg4ZSwgMHhiOCwgMHgzMywgMHgyNSwgMHg1NCwgMHhm ZiwgMHhjYSwgMHg3OSwgMHhhZiwgMHgwNywgMHgyNSwgMHg1MAotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRw cltdID0gewotKyAgICAweDkyLCAweGEzLCAweDMyLCAweGE4LCAweDlhLCAweDBhLCAweDU4LCAw eDdjLCAweDFkLCAweDVhLCAweDdlLCAweGUxLAotKyAgICAweGIyLCAweDczLCAweGFiLCAweDBl LCAweDE2LCAweDc5LCAweDIzLCAweGQzLCAweDI5LCAweDg5LCAweDgxLCAweGUxCi0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2lu dF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhmMywgMHgzOCwgMHg5MSwgMHg0MCwgMHgzNywg MHg3YSwgMHg1MSwgMHg3MiwgMHg0MiwgMHg3NCwgMHg3OCwgMHgwYSwKLSsgICAgMHg2OSwgMHhm ZCwgMHhhNiwgMHg0NCwgMHg0MywgMHg0NSwgMHg2YywgMHgwYywgMHg1YSwgMHgxOSwgMHhmZiwg MHhmMSwKLSsgICAgMHg1NCwgMHg2MCwgMHhlZSwgMHg2YQotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXQy W10gPSB7Ci0rICAgIDB4NzUsIDB4ZjMsIDB4MDQsIDB4MjUsIDB4ZGQsIDB4MzYsIDB4YTgsIDB4 MzcsIDB4NDYsIDB4YWUsIDB4MGMsIDB4NTIsCi0rICAgIDB4MDUsIDB4NzksIDB4NGMsIDB4MjYs IDB4ZGIsIDB4ZTksIDB4NzEsIDB4MTYsIDB4NGMsIDB4MGEsIDB4ZjIsIDB4NjAKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50 cm9weWlucHV0cHIyW10gPSB7Ci0rICAgIDB4ZWEsIDB4YzUsIDB4MDMsIDB4MGEsIDB4NGYsIDB4 YjAsIDB4MzgsIDB4OGQsIDB4MjMsIDB4ZDQsIDB4YzgsIDB4NzcsCi0rICAgIDB4ZTIsIDB4NmQs IDB4OWMsIDB4MGIsIDB4NDQsIDB4ZjcsIDB4MmQsIDB4NWIsIDB4YmYsIDB4NWQsIDB4MmEsIDB4 MTEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEyMjRfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4NjAsIDB4NTAsIDB4MmIsIDB4ZTcs IDB4ODYsIDB4ZDgsIDB4MjYsIDB4NzMsIDB4ZTMsIDB4MWQsIDB4OTUsIDB4MjAsCi0rICAgIDB4 YjMsIDB4MmMsIDB4MzIsIDB4MWMsIDB4ZjUsIDB4Y2UsIDB4NTcsIDB4YTYsIDB4NjcsIDB4MmIs IDB4ZGMsIDB4NGUsCi0rICAgIDB4ZGQsIDB4MTEsIDB4NGMsIDB4YzQKLSt9OwotKwotKy8qIFNI QS0yMjQgTm8gUFIgICovCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHhiMiwgMHgxYywgMHg3NywgMHg0 ZCwgMHhmNiwgMHhkMywgMHhiNiwgMHg0MCwgMHhiNywgMHgzMCwgMHgzZSwgMHgyOSwKLSsgICAg MHhiMCwgMHg4NSwgMHgxYywgMHhiZSwgMHg0YSwgMHhlYSwgMHg2YiwgMHg1YSwgMHhiNSwgMHg4 YSwgMHg5NywgMHhlYgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIHNoYTIyNF9ub25jZVtdID0gewotKyAgICAweDQyLCAweDAyLCAweDBhLCAweDFj LCAweDk4LCAweDlhLCAweDc3LCAweDllLCAweDlmLCAweDgwLCAweGJhLCAweGUwCi0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDk4LCAweGI4LCAweDA0LCAweDQxLCAweGZj LCAweGMxLCAweDVkLCAweGM1LCAweGU5LCAweGI5LCAweDA4LCAweGRhLAotKyAgICAweGY5LCAw eGZhLCAweDBkLCAweDkwLCAweGNlLCAweGRmLCAweDFkLCAweDEwLCAweGE5LCAweDhkLCAweDUw LCAweDBjCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjI0X2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDlhLCAweDhkLCAweDM5LCAw eDQ5LCAweDQyLCAweGQ1LCAweDBiLCAweGFlLCAweGUxLCAweGFmLCAweGI3LCAweDAwLAotKyAg ICAweDAyLCAweGZhLCAweDk2LCAweGIxLCAweGE1LCAweDFkLCAweDJkLCAweDI1LCAweDc4LCAw eGVlLCAweDgzLCAweDNmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjI0X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhlNCwgMHhm NSwgMHg1MywgMHg3OSwgMHg1YSwgMHg5NywgMHg1OCwgMHgwNiwgMHgwOCwgMHhiYSwgMHg3Yiwg MHhmYSwKLSsgICAgMHhmMCwgMHg4MywgMHgwNSwgMHg4YywgMHgyMiwgMHhjMCwgMHhjOSwgMHhk YiwgMHgxNSwgMHhlNywgMHhkZSwgMHgyMCwKLSsgICAgMHg1NSwgMHgyMiwgMHg5YSwgMHhhZAot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIy NF9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHg2NywgMHgwOSwgMHg0OCwgMHhhYSwg MHgwNywgMHgxNiwgMHg5OSwgMHg4OSwgMHg3ZiwgMHg2ZCwgMHhhMCwgMHhlNSwKLSsgICAgMHg4 ZiwgMHhkZiwgMHhiYywgMHhkYiwgMHhmZSwgMHhlNSwgMHg2YywgMHg3YSwgMHg5NSwgMHg0YSwg MHg2NiwgMHgxNwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHgwZiwgMHg0 YiwgMHgxYywgMHg2ZiwgMHhiNywgMHhlMywgMHg0NywgMHhlNSwgMHg1ZCwgMHg3ZCwgMHgzOCwg MHhkNiwKLSsgICAgMHgyOCwgMHg5YiwgMHhlYiwgMHg1NSwgMHg2MywgMHgwOSwgMHgzZSwgMHg3 YywgMHg1NiwgMHhlYSwgMHhmOCwgMHgxOQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAg IDB4MmQsIDB4MjYsIDB4N2MsIDB4MzcsIDB4ZTQsIDB4N2EsIDB4MjgsIDB4NWUsIDB4NWEsIDB4 M2MsIDB4YWYsIDB4M2QsCi0rICAgIDB4NWEsIDB4OGUsIDB4NTUsIDB4YTIsIDB4MWEsIDB4NmUs IDB4YzAsIDB4ZTUsIDB4ZjYsIDB4MjEsIDB4ZDMsIDB4ZjYKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcmV0dXJuZWRiaXRzW10gPSB7 Ci0rICAgIDB4NGQsIDB4ODMsIDB4MzUsIDB4ZGYsIDB4NjcsIDB4YTksIDB4ZmMsIDB4MTcsIDB4 ZGEsIDB4NzAsIDB4Y2MsIDB4OGIsCi0rICAgIDB4N2YsIDB4NzcsIDB4YWUsIDB4YTIsIDB4NWYs IDB4YjksIDB4N2UsIDB4NzQsIDB4NGMsIDB4MjYsIDB4YzEsIDB4N2EsCi0rICAgIDB4M2IsIDB4 YTcsIDB4NWMsIDB4OTMKLSt9OwotKwotKy8qIFNIQS0yNTYgUFIgICovCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRbXSA9 IHsKLSsgICAgMHhjZSwgMHg0OSwgMHgwMCwgMHg3YSwgMHg1NiwgMHhlMywgMHg2NywgMHg4Ziwg MHhlMSwgMHhiNiwgMHhhNywgMHhkNCwKLSsgICAgMHg0ZiwgMHgwOCwgMHg3YSwgMHgxYiwgMHgw MSwgMHhmNCwgMHhmYSwgMHg2YiwgMHhlZiwgMHhiNywgMHhlNSwgMHhlYiwKLSsgICAgMHgwNywg MHgzZCwgMHgxMSwgMHgwZCwgMHhjOCwgMHhlYSwgMHgyYiwgMHhmZQotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9ub25jZVtdID0g ewotKyAgICAweDczLCAweDQxLCAweGM4LCAweDkyLCAweDk0LCAweGUyLCAweGM1LCAweDVmLCAw eDkzLCAweGZkLCAweDM5LCAweDVkLAotKyAgICAweDJiLCAweDkxLCAweDRkLCAweDM4Ci0rfTsK LSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3By X3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweDUwLCAweDZkLCAweDAxLCAweDAx LCAweDA3LCAweDVhLCAweDgwLCAweDM1LCAweDdhLCAweDU2LCAweDFhLCAweDU2LAotKyAgICAw eDJmLCAweDlhLCAweDBiLCAweDM1LCAweGIyLCAweGIxLCAweGM5LCAweGU1LCAweGNhLCAweDY5 LCAweDYxLCAweDQ4LAotKyAgICAweGZmLCAweGZiLCAweDBmLCAweGQ5LCAweDRiLCAweDc5LCAw eDFkLCAweGJhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDIwLCAweGI4LCAw eGRmLCAweDQ0LCAweDc3LCAweDVhLCAweGI4LCAweGQzLCAweGJmLCAweGY2LCAweGNmLCAweGFj LAotKyAgICAweDVlLCAweGE2LCAweDk2LCAweDYyLCAweDczLCAweDQ0LCAweDQwLCAweDRhLCAw eDMwLCAweGZiLCAweDM4LCAweGE1LAotKyAgICAweDdiLCAweDBkLCAweGU0LCAweDBkLCAweGM2 LCAweGU0LCAweDlhLCAweDFmCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByW10gPSB7Ci0rICAgIDB4MDQs IDB4YzQsIDB4NjUsIDB4ZjQsIDB4ZDMsIDB4YmYsIDB4ODMsIDB4NGIsIDB4YWIsIDB4YzgsIDB4 NDEsIDB4YTgsCi0rICAgIDB4YzIsIDB4ZTAsIDB4NDQsIDB4NjMsIDB4NzcsIDB4NGMsIDB4NmYs IDB4NmMsIDB4NDksIDB4NDYsIDB4ZmYsIDB4OTQsCi0rICAgIDB4MTcsIDB4ZWEsIDB4ZTYsIDB4 MWEsIDB4OWQsIDB4NWUsIDB4NjYsIDB4NzgKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0gewot KyAgICAweDA3LCAweDRkLCAweGFjLCAweDliLCAweDg2LCAweGNhLCAweDRhLCAweGFhLCAweDZl LCAweDdhLCAweDAzLCAweGEyLAotKyAgICAweDVkLCAweDEwLCAweGVhLCAweDBiLCAweGY5LCAw eDgzLCAweGNjLCAweGQxLCAweGZjLCAweGUyLCAweDA3LCAweGM3LAotKyAgICAweDA2LCAweDM0 LCAweDYwLCAweDZmLCAweDgzLCAweDk0LCAweDk5LCAweDc2Ci0rfTsKLSsKLStfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1 dDJbXSA9IHsKLSsgICAgMHg4OSwgMHg0ZSwgMHg0NSwgMHg4YywgMHgxMSwgMHhmOSwgMHhiYywg MHg1YiwgMHhhYywgMHg3NCwgMHg4YiwgMHg0YiwKLSsgICAgMHg1ZiwgMHhmNywgMHgxOSwgMHhm MywgMHhmNSwgMHgyNCwgMHg1NCwgMHgxNCwgMHhkMSwgMHgxNSwgMHhiMSwgMHg0MywKLSsgICAg MHgxMiwgMHhhNCwgMHg1ZiwgMHhkNCwgMHhlYywgMHhmYywgMHhjZCwgMHgwOQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRy b3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHgwZSwgMHhlYiwgMHgxZiwgMHhkNywgMHhmYywgMHhk MSwgMHg5ZCwgMHhkNCwgMHgwNSwgMHgzNiwgMHg4YiwgMHhiMiwKLSsgICAgMHhmYiwgMHhlNCwg MHhmNCwgMHg1MSwgMHgwYywgMHg4NywgMHg5YiwgMHgwMiwgMHg0NCwgMHhkNSwgMHg5MiwgMHg0 ZCwKLSsgICAgMHg0NCwgMHhmZSwgMHgxYSwgMHgwMywgMHg0MywgMHg1NiwgMHhiZCwgMHg4Ngot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1 Nl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgwMiwgMHhhYSwgMHhiNiwgMHgxZCwgMHg3 ZSwgMHgyYSwgMHg0MCwgMHgwMywgMHg2OSwgMHgyZCwgMHg0OSwgMHhhMywKLSsgICAgMHg0MSwg MHhlNywgMHg0NCwgMHgwYiwgMHhhZiwgMHg3YiwgMHg4NSwgMHhlNCwgMHg1ZiwgMHg1MywgMHgz YiwgMHg2NCwKLSsgICAgMHhiYywgMHg4OSwgMHhjOCwgMHg4MiwgMHhkNCwgMHg3OCwgMHgzNywg MHhhMgotK307Ci0rCi0rLyogU0hBLTI1NiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2VudHJvcHlpbnB1dFtdID0gewotKyAgICAw eDViLCAweDFiLCAweGVjLCAweDRkLCAweGE5LCAweDM4LCAweDc0LCAweDVhLCAweDM0LCAweDBi LCAweDdiLCAweGM1LAotKyAgICAweGU1LCAweGQ3LCAweDY2LCAweDdjLCAweGJjLCAweDgyLCAw eGI5LCAweDBlLCAweDJkLCAweDFmLCAweDkyLCAweGQ3LAotKyAgICAweGMxLCAweGJjLCAweDY3 LCAweDY5LCAweGVjLCAweDZiLCAweDAzLCAweDNjCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X25vbmNlW10gPSB7Ci0rICAgIDB4YTQs IDB4MGMsIDB4ZDgsIDB4OWMsIDB4NjEsIDB4ZDgsIDB4YzMsIDB4NTQsIDB4ZmUsIDB4NTMsIDB4 YzksIDB4ZTUsCi0rICAgIDB4NWQsIDB4NmYsIDB4NmQsIDB4MzUKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcGVyc29uYWxpemF0aW9u c3RyaW5nW10gPSB7Ci0rICAgIDB4MjIsIDB4NWUsIDB4NjIsIDB4OTMsIDB4NDIsIDB4ODMsIDB4 NzgsIDB4MjQsIDB4ZDgsIDB4NDAsIDB4OGMsIDB4ZGUsCi0rICAgIDB4NmYsIDB4ZjksIDB4YTQs IDB4N2EsIDB4YzUsIDB4YTcsIDB4M2IsIDB4ODgsIDB4YTMsIDB4ZWUsIDB4NDIsIDB4MjAsCi0r ICAgIDB4ZmQsIDB4NjEsIDB4NTYsIDB4YzYsIDB4NGMsIDB4MTMsIDB4NDEsIDB4OWMKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRk aXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4YmYsIDB4NzQsIDB4NWIsIDB4ZjYsIDB4YzUsIDB4 NjQsIDB4NWUsIDB4OTksIDB4MzQsIDB4OGYsIDB4YmMsIDB4YTQsCi0rICAgIDB4ZTIsIDB4YmQs IDB4ZDgsIDB4ODUsIDB4MjYsIDB4MzcsIDB4ZWEsIDB4YmEsIDB4NGYsIDB4ZjIsIDB4OWEsIDB4 OWEsCi0rICAgIDB4NjYsIDB4ZmMsIDB4ZGYsIDB4NjMsIDB4MjYsIDB4MjYsIDB4MTksIDB4ODcK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy NTZfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGIzLCAweGM2LCAweDA3LCAweDA3LCAw eGQ2LCAweDc1LCAweGY2LCAweDJiLCAweGQ2LCAweDIxLCAweDk2LCAweGYxLAotKyAgICAweGFl LCAweGRiLCAweDJiLCAweGFjLCAweDI1LCAweDJhLCAweGFlLCAweGFlLCAweDQxLCAweDcyLCAw eDAzLCAweDVlLAotKyAgICAweGJmLCAweGQzLCAweDY0LCAweGJjLCAweDU5LCAweGY5LCAweGMw LCAweDc2Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMjU2X2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweGJmLCAweDIwLCAweDMz LCAweDU2LCAweDI5LCAweGE4LCAweDM3LCAweDA0LCAweDFmLCAweDc4LCAweDM0LCAweDNkLAot KyAgICAweDgxLCAweDJhLCAweGM5LCAweDg2LCAweGM2LCAweDdhLCAweDJmLCAweDg4LCAweDVl LCAweGQ1LCAweGJlLCAweDM0LAotKyAgICAweDQ2LCAweDIwLCAweGE0LCAweDM1LCAweGViLCAw eGM3LCAweGUyLCAweDlkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDli LCAweGFlLCAweDJkLCAweDJkLCAweDYxLCAweGE0LCAweDg5LCAweGViLCAweDQzLCAweDQ2LCAw eGE3LCAweGRhLAotKyAgICAweGVmLCAweDQwLCAweGNhLCAweDRhLCAweDk5LCAweDExLCAweDQx LCAweGRjLCAweDVjLCAweDk0LCAweGU5LCAweGFjLAotKyAgICAweGQ0LCAweGQwLCAweGU2LCAw eGJkLCAweGZiLCAweDAzLCAweDljLCAweGE4Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsg ICAgMHgyMywgMHhhYSwgMHgwYywgMHhiZCwgMHgyOCwgMHgzMywgMHhlMiwgMHg1MSwgMHhmYywg MHg3MSwgMHhkMiwgMHgxNSwKLSsgICAgMHgxZiwgMHg3NiwgMHhmZCwgMHgwZCwgMHhlMCwgMHhi NywgMHhiNSwgMHg4NCwgMHg3NSwgMHg1YiwgMHhiZSwgMHhmMywKLSsgICAgMHg1YywgMHhjYSwg MHhjNSwgMHgzMCwgMHhmMiwgMHg3NSwgMHgxZiwgMHhkYQotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9IHsK LSsgICAgMHg5MCwgMHgzYywgMHhjMSwgMHgxMCwgMHg4YywgMHgxMiwgMHgwMSwgMHhjNiwgMHhh NiwgMHgzYSwgMHgwZiwgMHg0ZCwKLSsgICAgMHhiNiwgMHgzYSwgMHg0ZiwgMHg0MSwgMHg5Yywg MHg2MSwgMHg3NSwgMHg4NCwgMHhlOSwgMHg3NCwgMHg3NSwgMHhmZCwKLSsgICAgMHhmZSwgMHhm MiwgMHgxZiwgMHg0MywgMHhkOCwgMHg1ZSwgMHgyNCwgMHhhMwotK307Ci0rCi0rLyogU0hBLTM4 NCBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh Mzg0X3ByX2VudHJvcHlpbnB1dFtdID0gewotKyAgICAweDcxLCAweDlkLCAweGIyLCAweDVhLCAw eDcxLCAweDZkLCAweDA0LCAweGU5LCAweDFlLCAweGM3LCAweDkyLCAweDI0LAotKyAgICAweDZl LCAweDEyLCAweDMzLCAweGE5LCAweDUyLCAweDY0LCAweDMxLCAweGVmLCAweDcxLCAweGViLCAw eDIyLCAweDU1LAotKyAgICAweDI4LCAweDk3LCAweDA2LCAweDZhLCAweGMwLCAweDBjLCAweGEw LCAweDdlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhMzg0X3ByX25vbmNlW10gPSB7Ci0rICAgIDB4ZjUsIDB4MGQsIDB4ZmEsIDB4YjAsIDB4 ZWMsIDB4NmEsIDB4N2MsIDB4ZDYsIDB4YmQsIDB4OWIsIDB4MDUsIDB4ZmQsCi0rICAgIDB4Mzgs IDB4M2UsIDB4MmUsIDB4NTYKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEzODRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAg IDB4NzQsIDB4YWMsIDB4N2UsIDB4NmQsIDB4YjEsIDB4YTQsIDB4ZTcsIDB4MjEsIDB4ZDEsIDB4 MWUsIDB4NmUsIDB4OTYsCi0rICAgIDB4NmQsIDB4NGQsIDB4NTMsIDB4NDYsIDB4ODIsIDB4OTYs IDB4NmUsIDB4Y2YsIDB4YWEsIDB4ODEsIDB4OGQsIDB4N2QsCi0rICAgIDB4OWUsIDB4ZTEsIDB4 MGYsIDB4MTUsIDB4ZWEsIDB4NDEsIDB4YmYsIDB4ZTMKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10g PSB7Ci0rICAgIDB4ZGEsIDB4OTUsIDB4ZDQsIDB4ZDAsIDB4YjgsIDB4MTEsIDB4ZDMsIDB4NDks IDB4MjcsIDB4NWQsIDB4YTksIDB4MzksCi0rICAgIDB4NjgsIDB4ZjMsIDB4YTgsIDB4ZTksIDB4 NWQsIDB4MTksIDB4OGEsIDB4MmIsIDB4NjYsIDB4ZTgsIDB4NjksIDB4MDYsCi0rICAgIDB4N2Ms IDB4OWUsIDB4MDMsIDB4YTEsIDB4OGIsIDB4MjYsIDB4MmQsIDB4NmUKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlu cHV0cHJbXSA9IHsKLSsgICAgMHg0OSwgMHhkZiwgMHg0NCwgMHgwMCwgMHhlNCwgMHgxYywgMHg3 NSwgMHgwYiwgMHgyNiwgMHg1YSwgMHg1OSwgMHg2NCwKLSsgICAgMHgxZiwgMHg0ZSwgMHhiMSwg MHhiMiwgMHgxMywgMHhmMSwgMHgyMiwgMHg0ZSwgMHhiNCwgMHg2ZCwgMHg5YSwgMHhjYywKLSsg ICAgMHhhMCwgMHg0OCwgMHhlNiwgMHhjZiwgMHgxZCwgMHhkMSwgMHg5MiwgMHgwZAotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9p bnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4YzgsIDB4NTIsIDB4YWUsIDB4YmYsIDB4MDQs IDB4M2MsIDB4MjcsIDB4YjcsIDB4NzgsIDB4MTgsIDB4YWEsIDB4OGYsCi0rICAgIDB4ZmYsIDB4 Y2YsIDB4YTQsIDB4ZjEsIDB4Y2MsIDB4ZTcsIDB4NjgsIDB4ZmEsIDB4MjIsIDB4YTIsIDB4MTMs IDB4NDUsCi0rICAgIDB4ZTgsIDB4ZGQsIDB4ODcsIDB4ZTYsIDB4ZjIsIDB4NmUsIDB4ZGQsIDB4 YzcsIDB4NTIsIDB4OTAsIDB4OWYsIDB4N2IsCi0rICAgIDB4ZmEsIDB4NjEsIDB4MmQsIDB4OWQs IDB4OWUsIDB4Y2YsIDB4OTgsIDB4YWMsIDB4NTIsIDB4NDAsIDB4Y2UsIDB4YWYKLSt9OwotKwot K19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfYWRk aXRpb25hbGlucHV0MltdID0gewotKyAgICAweDYxLCAweDdjLCAweDAzLCAweDlhLCAweDNlLCAw eDUwLCAweDU3LCAweDYwLCAweGM1LCAweDgzLCAweGM5LCAweGIyLAotKyAgICAweGQxLCAweDg3 LCAweDg1LCAweDY2LCAweDkyLCAweDVkLCAweDg0LCAweDBlLCAweDUzLCAweGZiLCAweDcwLCAw eDAzLAotKyAgICAweDcyLCAweGZkLCAweGJhLCAweGFlLCAweDljLCAweDhmLCAweGY4LCAweDE4 Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh Mzg0X3ByX2VudHJvcHlpbnB1dHByMltdID0gewotKyAgICAweGY4LCAweGViLCAweDg5LCAweGIx LCAweDhkLCAweDc4LCAweGJlLCAweDIxLCAweGUwLCAweGJiLCAweDlkLCAweGI3LAotKyAgICAw eDk1LCAweDBlLCAweGQ5LCAweDQ2LCAweDBjLCAweDhjLCAweGUyLCAweDYzLCAweGI3LCAweDlk LCAweDY3LCAweDkwLAotKyAgICAweGJkLCAweGM3LCAweDBiLCAweGE1LCAweGNlLCAweGIyLCAw eDY1LCAweDgxCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMzg0X3ByX3JldHVybmVkYml0c1tdID0gewotKyAgICAweGU2LCAweDlmLCAweGZl LCAweDY4LCAweGQ2LCAweGI1LCAweDc5LCAweGYxLCAweDA2LCAweDVmLCAweGEzLCAweGJiLAot KyAgICAweDIzLCAweDg1LCAweGQ4LCAweGYwLCAweDI5LCAweDVhLCAweDY4LCAweDllLCAweGY1 LCAweGY0LCAweGE2LCAweDEyLAotKyAgICAweGUwLCAweDlhLCAweGUyLCAweGFjLCAweDAwLCAw eDFkLCAweDk4LCAweDI2LCAweGZjLCAweDUzLCAweDk1LCAweDUzLAotKyAgICAweGU0LCAweDNl LCAweDE3LCAweGQ1LCAweDA4LCAweDBiLCAweDcwLCAweDNkLCAweDY3LCAweDk5LCAweGFjLCAw eDY2Ci0rfTsKLSsKLSsvKiBTSEEtMzg0IE5vIFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4 MDcsIDB4MTUsIDB4MjcsIDB4MmEsIDB4YWYsIDB4NzQsIDB4MjQsIDB4MzcsIDB4YmMsIDB4ZDUs IDB4MTQsIDB4NjksCi0rICAgIDB4Y2UsIDB4MTEsIDB4ZmYsIDB4YTIsIDB4NmIsIDB4YjgsIDB4 MDUsIDB4NjcsIDB4MzQsIDB4ZjgsIDB4YmQsIDB4NmQsCi0rICAgIDB4NmEsIDB4Y2MsIDB4Y2Qs IDB4NjAsIDB4YTMsIDB4NjgsIDB4Y2EsIDB4ZjQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfbm9uY2VbXSA9IHsKLSsgICAgMHg3MCwg MHgxNywgMHhjMiwgMHg1YiwgMHg1ZCwgMHgyMiwgMHgwYiwgMHgwNiwgMHgxNSwgMHg1NCwgMHg3 OCwgMHg3NywKLSsgICAgMHg0NCwgMHhhZiwgMHgyZiwgMHgwOQotK307Ci0rCi0rX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wZXJzb25hbGl6YXRpb25z dHJpbmdbXSA9IHsKLSsgICAgMHg4OSwgMHgzOSwgMHgyOCwgMHhiMCwgMHg2MCwgMHhlYiwgMHgz ZCwgMHhkYywgMHg1NSwgMHg3NSwgMHg4NiwgMHhlYiwKLSsgICAgMHhhZSwgMHhhMiwgMHg4Ziwg MHhiYywgMHgxYiwgMHg3NSwgMHhkNCwgMHhlMSwgMHgwZiwgMHhhYSwgMHgzOCwgMHhjYSwKLSsg ICAgMHg2MiwgMHg4YiwgMHhjYiwgMHgyYywgMHgyNiwgMHhmNiwgMHhiYywgMHhiMQotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRp dGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHgzMCwgMHgyYiwgMHg0MiwgMHgzNSwgMHhlZiwgMHhk YSwgMHg0MCwgMHg1NSwgMHgyOCwgMHhjNiwgMHg5NSwgMHhmYiwKLSsgICAgMHg1NCwgMHgwMSwg MHg2MiwgMHhkNywgMHg4NywgMHgxNCwgMHg0OCwgMHg2ZCwgMHg5MCwgMHg0YywgMHhhOSwgMHgw MiwKLSsgICAgMHg1NCwgMHg0MCwgMHgyMiwgMHhjOCwgMHg2NiwgMHhhNSwgMHg0OCwgMHg0OAot K307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4 NF9pbnRfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4ODIsIDB4YzQsIDB4YTEsIDB4OWMsIDB4 MjEsIDB4ZDIsIDB4ZTcsIDB4YTUsIDB4YTYsIDB4ZjYsIDB4NWYsIDB4MDQsCi0rICAgIDB4NWMs IDB4YzcsIDB4MzEsIDB4OWQsIDB4OGQsIDB4NTksIDB4NzQsIDB4NTAsIDB4MTksIDB4ODksIDB4 MmYsIDB4NjMsCi0rICAgIDB4ZDUsIDB4YjcsIDB4N2UsIDB4ZWIsIDB4MTUsIDB4ZTMsIDB4NzAs IDB4ODMsIDB4YTEsIDB4MjQsIDB4NTksIDB4ZmEsCi0rICAgIDB4MmMsIDB4NTYsIDB4ZjYsIDB4 ODgsIDB4M2EsIDB4OTIsIDB4OTMsIDB4YTEsIDB4ZmIsIDB4NzksIDB4YzEsIDB4N2EKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50 cm9weWlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4MzksIDB4YTYsIDB4ZTgsIDB4NWMsIDB4ODIs IDB4MTcsIDB4NzEsIDB4MjYsIDB4NTcsIDB4NGYsIDB4OWYsIDB4YzIsCi0rICAgIDB4NTUsIDB4 ZmYsIDB4NWMsIDB4OWIsIDB4NTMsIDB4MWEsIDB4ZDEsIDB4NWYsIDB4YmMsIDB4NjIsIDB4ZTQs IDB4MjcsCi0rICAgIDB4MmQsIDB4MzIsIDB4ZjAsIDB4ZTQsIDB4NTIsIDB4OGMsIDB4YzUsIDB4 MGMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBz aGEzODRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4OGQsIDB4Y2IsIDB4OGQs IDB4Y2UsIDB4MDgsIDB4ZWEsIDB4ODAsIDB4ZTgsIDB4OWIsIDB4NjEsIDB4YTgsIDB4MGYsCi0r ICAgIDB4YWYsIDB4NDksIDB4MjAsIDB4OWUsIDB4NzQsIDB4Y2IsIDB4NTcsIDB4ODAsIDB4NDIs IDB4YjAsIDB4ODQsIDB4NWUsCi0rICAgIDB4MzAsIDB4MmEsIDB4NjcsIDB4MDgsIDB4ZjQsIDB4 ZTMsIDB4NDAsIDB4MjIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlucHV0MltdID0gewotKyAgICAweDdjLCAweDhm LCAweGMyLCAweGFlLCAweDIyLCAweDRhLCAweGQ2LCAweGY2LCAweDA1LCAweGE0LCAweDdhLCAw eGVhLAotKyAgICAweGJiLCAweDI1LCAweGQwLCAweGI3LCAweDVhLCAweGQ2LCAweGNmLCAweDlk LCAweGYzLCAweDZjLCAweGUyLCAweGIyLAotKyAgICAweDRlLCAweGI0LCAweGJkLCAweGY0LCAw eGU1LCAweDQwLCAweDgwLCAweDk0Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3JldHVybmVkYml0c1tdID0gewotKyAgICAweDllLCAw eDdlLCAweGZiLCAweDU5LCAweGJiLCAweGFhLCAweDNjLCAweGY3LCAweGUxLCAweGY4LCAweDc2 LCAweGRkLAotKyAgICAweDYzLCAweDVmLCAweGFmLCAweDIzLCAweGQ2LCAweDY0LCAweDYxLCAw eGMwLCAweDlhLCAweDA5LCAweDQ3LCAweGM5LAotKyAgICAweDMzLCAweGRmLCAweDZkLCAweDU1 LCAweDkxLCAweDM0LCAweDc5LCAweDcwLCAweGM0LCAweDk5LCAweDZlLCAweDU0LAotKyAgICAw eDA5LCAweDY0LCAweDIxLCAweDFhLCAweGJkLCAweDFlLCAweDgwLCAweDQwLCAweDM0LCAweGFk LCAweGZhLCAweGQ3Ci0rfTsKLSsKLSsvKiBTSEEtNTEyIFBSICAqLwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0W10gPSB7 Ci0rICAgIDB4MTMsIDB4ZjcsIDB4NjEsIDB4NzUsIDB4NjUsIDB4MjgsIDB4YTIsIDB4NTksIDB4 MTMsIDB4NWEsIDB4NGEsIDB4NGYsCi0rICAgIDB4NTYsIDB4NjAsIDB4OGMsIDB4NTMsIDB4N2Qs IDB4YjAsIDB4YmQsIDB4MDYsIDB4NGYsIDB4ZWQsIDB4Y2MsIDB4ZDIsCi0rICAgIDB4YTIsIDB4 YjUsIDB4ZmQsIDB4NWIsIDB4M2EsIDB4YWIsIDB4ZWMsIDB4MjgKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfbm9uY2VbXSA9IHsK LSsgICAgMHhiZSwgMHhhMywgMHg5MSwgMHg5MywgMHgxZCwgMHhjMywgMHgzMSwgMHgzYSwgMHgy MywgMHgzMywgMHg1MCwgMHg2NywKLSsgICAgMHg4OCwgMHhjNywgMHhhMiwgMHhjNAotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9w ZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHgxZiwgMHg1OSwgMHg0ZCwgMHg3Yiwg MHhlNiwgMHg0NiwgMHg5MSwgMHg0OCwgMHhjMSwgMHgyNSwgMHhmYSwgMHhmZiwKLSsgICAgMHg4 OSwgMHgxMiwgMHg3NywgMHgzNSwgMHhkZiwgMHgzZSwgMHhmNCwgMHg4MCwgMHg1ZiwgMHhkOSwg MHhiMCwgMHgwNywKLSsgICAgMHgyMiwgMHg0MSwgMHhkZCwgMHg0OCwgMHg3OCwgMHg2YiwgMHg3 NywgMHgyYgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHgzMCwgMHhmZiwgMHg2 MywgMHg2ZiwgMHhhYywgMHhkOSwgMHg4NCwgMHgzOSwgMHg2ZiwgMHhlNCwgMHg5OSwgMHhjZSwK LSsgICAgMHg5MSwgMHg3ZCwgMHg3ZSwgMHhjOCwgMHg1OCwgMHhmMiwgMHgxMiwgMHhjMywgMHhi NiwgMHhhZCwgMHhkYSwgMHgyMiwKLSsgICAgMHgwNCwgMHhhMCwgMHhkMiwgMHgyMSwgMHhmZSwg MHhmMiwgMHg5NSwgMHgxZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9lbnRyb3B5aW5wdXRwcltdID0gewotKyAgICAweDY0LCAw eDU0LCAweDEzLCAweGVjLCAweDRmLCAweDc3LCAweGRhLCAweGIyLCAweDkyLCAweDJlLCAweDUy LCAweDgwLAotKyAgICAweDExLCAweDEwLCAweGMyLCAweGY4LCAweGU2LCAweGE3LCAweGNkLCAw eDRiLCAweGZjLCAweDMyLCAweDJlLCAweDllLAotKyAgICAweGViLCAweGJiLCAweGIxLCAweGJm LCAweDE1LCAweDVjLCAweDczLCAweDA4Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsg ICAgMHhlZiwgMHgxZSwgMHhkYywgMHgwYSwgMHhhNCwgMHgzNiwgMHg5MSwgMHg5YywgMHgzZCwg MHgyNywgMHg5NywgMHg1MCwKLSsgICAgMHg4ZCwgMHgzNiwgMHgyOSwgMHg4ZCwgMHhjZSwgMHg2 YSwgMHgwYywgMHhmNywgMHgyMSwgMHhjMCwgMHg5MSwgMHhhZSwKLSsgICAgMHgwYywgMHg5Niwg MHg3MiwgMHhiZCwgMHg1MiwgMHg4MSwgMHg1OCwgMHhmYywgMHg2ZCwgMHhlNSwgMHhmNywgMHhh NSwKLSsgICAgMHhmZCwgMHg1ZCwgMHhhNywgMHg1OCwgMHg2OCwgMHhjOCwgMHg5OSwgMHg1OCwg MHg4ZSwgMHhjOCwgMHhjZSwgMHg5NSwKLSsgICAgMHgwMSwgMHg3ZCwgMHhmZiwgMHhhNCwgMHhj OCwgMHhmNywgMHg2MywgMHhmZSwgMHg1ZiwgMHg2OSwgMHg4MywgMHg1MywKLSsgICAgMHhlMiwg MHhjNiwgMHg4YiwgMHhjMwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4ZTYs IDB4OWIsIDB4YzQsIDB4ODgsIDB4MzQsIDB4Y2EsIDB4ZWEsIDB4MjksIDB4MmYsIDB4OTgsIDB4 MDUsIDB4YTQsCi0rICAgIDB4ZDMsIDB4YzAsIDB4N2IsIDB4MTEsIDB4ZTgsIDB4YmIsIDB4NzUs IDB4ZjIsIDB4YmQsIDB4MjksIDB4YjcsIDB4NDAsCi0rICAgIDB4MjUsIDB4N2YsIDB4YzEsIDB4 YjcsIDB4YjEsIDB4ZjEsIDB4MjUsIDB4NjEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPSB7Ci0r ICAgIDB4MjMsIDB4NmQsIDB4ZmYsIDB4ZGUsIDB4ZmIsIDB4ZDEsIDB4YmEsIDB4MzMsIDB4MTgs IDB4ZTYsIDB4YmUsIDB4YjUsCi0rICAgIDB4NDgsIDB4NzcsIDB4NmQsIDB4N2YsIDB4YTcsIDB4 ZTEsIDB4NGQsIDB4NDgsIDB4MWUsIDB4M2MsIDB4YTcsIDB4MzQsCi0rICAgIDB4MWEsIDB4Yzgs IDB4NjAsIDB4ZGIsIDB4OGYsIDB4OTksIDB4MTUsIDB4OTkKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcmV0dXJuZWRiaXRzW10g PSB7Ci0rICAgIDB4NzAsIDB4MjcsIDB4MzEsIDB4ZGIsIDB4OTIsIDB4NzAsIDB4MjEsIDB4ZmUs IDB4MTYsIDB4YjYsIDB4YzgsIDB4NTEsCi0rICAgIDB4MzQsIDB4ODcsIDB4NjUsIDB4ZDAsIDB4 NGUsIDB4ZmQsIDB4ZmUsIDB4NjgsIDB4ZWMsIDB4YWMsIDB4ZGMsIDB4OTMsCi0rICAgIDB4NDEs IDB4MzgsIDB4OTIsIDB4OTAsIDB4YjQsIDB4OTQsIDB4ZjksIDB4MGQsIDB4YTQsIDB4ZjcsIDB4 NGUsIDB4ODAsCi0rICAgIDB4OTIsIDB4NjcsIDB4NDgsIDB4NDAsIDB4YTcsIDB4MDgsIDB4Yzcs IDB4YmMsIDB4NjYsIDB4MDAsIDB4ZmQsIDB4ZjcsCi0rICAgIDB4NGMsIDB4OGIsIDB4MTcsIDB4 NmUsIDB4ZDEsIDB4OGYsIDB4OWIsIDB4ZjMsIDB4NmYsIDB4ZjYsIDB4MzQsIDB4ZGQsCi0rICAg IDB4NjcsIDB4ZjcsIDB4NjgsIDB4ZGQKLSt9OwotKwotKy8qIFNIQS01MTIgTm8gUFIgICovCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRyb3B5 aW5wdXRbXSA9IHsKLSsgICAgMHhiNiwgMHgwYiwgMHhiNywgMHhiYywgMHg4NCwgMHg1NiwgMHhm NiwgMHgxMiwgMHhhZiwgMHg0NSwgMHg2NywgMHgxNywKLSsgICAgMHg3YywgMHhkMSwgMHhiMiwg MHg3OCwgMHgyYiwgMHhhMCwgMHhmMiwgMHhiZSwgMHhiNiwgMHg2ZCwgMHg4YiwgMHg1NiwKLSsg ICAgMHhjNiwgMHhiYywgMHg0ZCwgMHhlMSwgMHhmNywgMHhiZSwgMHhjZSwgMHhiZAotK307Ci0r Ci0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9ub25j ZVtdID0gewotKyAgICAweDlkLCAweGVkLCAweGMwLCAweGU1LCAweDVhLCAweDk4LCAweDZhLCAw eGNiLCAweDUxLCAweDdkLCAweDc2LCAweDMxLAotKyAgICAweDVhLCAweDY0LCAweGYwLCAweGY3 Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh NTEyX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0gewotKyAgICAweGMyLCAweDZkLCAweGEzLCAw eGMzLCAweDA2LCAweDc0LCAweGU1LCAweDAxLCAweDVjLCAweDEwLCAweDE3LCAweGM3LAotKyAg ICAweGFmLCAweDgzLCAweDlkLCAweDU5LCAweDhkLCAweDJkLCAweDI5LCAweDM4LCAweGM1LCAw eDU5LCAweDcwLCAweDhiLAotKyAgICAweDQ2LCAweDQ4LCAweDJkLCAweGNmLCAweDM2LCAweDdk LCAweDU5LCAweGMwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhNTEyX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweGVjLCAweDhjLCAw eGQ0LCAweGY3LCAweDYxLCAweDZlLCAweDBkLCAweDk1LCAweDc5LCAweGI3LCAweDI4LCAweGFk LAotKyAgICAweDVmLCAweDY5LCAweDc0LCAweDVmLCAweDJkLCAweDM2LCAweDA2LCAweDhhLCAw eDZiLCAweGFjLCAweDU0LCAweDk3LAotKyAgICAweGM0LCAweGExLCAweDEyLCAweDg1LCAweDBh LCAweGRmLCAweDRiLCAweDM0Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg4NCwg MHgyZiwgMHgxZiwgMHg2OCwgMHg2YSwgMHhhMywgMHhhZCwgMHgxZSwgMHhmYiwgMHhmNCwgMHgx NSwgMHhiZCwKLSsgICAgMHhkZSwgMHgzOCwgMHhkNCwgMHgzMCwgMHg4MCwgMHg1MSwgMHhlOSwg MHhkMywgMHhjNywgMHgyMCwgMHg4OCwgMHhlOSwKLSsgICAgMHhmNSwgMHhjYywgMHhkZiwgMHg1 NywgMHg1YywgMHg0NywgMHgyZiwgMHg1NywgMHgzYywgMHg1ZiwgMHgxMywgMHg1NiwKLSsgICAg MHhjYywgMHhjNSwgMHg0ZiwgMHg4NCwgMHhmOCwgMHgxMCwgMHg0MSwgMHhkNSwgMHg3ZSwgMHg1 OCwgMHg2ZSwgMHgxOSwKLSsgICAgMHgxOSwgMHg5ZSwgMHhhZiwgMHhjMiwgMHgyMiwgMHg1OCwg MHg0MSwgMHg1MCwgMHg3OSwgMHhjMiwgMHhkOCwgMHgwNCwKLSsgICAgMHgyOCwgMHhkNCwgMHgz OSwgMHg5YQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTUxMl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHhmYSwgMHg3ZiwgMHg0 NiwgMHg1MSwgMHg4MywgMHg2MiwgMHg5OCwgMHgxNiwgMHg5YSwgMHgxOSwgMHhhMiwgMHg0OSwK LSsgICAgMHhhOSwgMHhlNiwgMHg0YSwgMHhkOCwgMHg4NSwgMHhlNywgMHhkNCwgMHgzYiwgMHgy YywgMHg4MiwgMHhjNSwgMHg4MiwKLSsgICAgMHhiZiwgMHgxMSwgMHhmOSwgMHg5ZSwgMHhiYywg MHhkMCwgMHgwMSwgMHhlZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKLSsgICAgMHhi OSwgMHgxMiwgMHhlMCwgMHg0ZiwgMHhmNywgMHhhNywgMHhjNCwgMHhkOCwgMHhkMCwgMHg4ZSwg MHg5OSwgMHgyOSwKLSsgICAgMHg3YywgMHg5YSwgMHhlOSwgMHhjZiwgMHhjNCwgMHg2YywgMHhm OCwgMHhjMywgMHhhNywgMHg0MSwgMHg4MywgMHhkNiwKLSsgICAgMHgyZSwgMHhmYSwgMHhiOCwg MHg1ZSwgMHg4ZSwgMHg2YiwgMHg3OCwgMHgyMAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0r ICAgIDB4ZDcsIDB4MDcsIDB4NTIsIDB4YjksIDB4ODMsIDB4MmMsIDB4MDMsIDB4NzEsIDB4ZWUs IDB4YzksIDB4YzAsIDB4ODUsCi0rICAgIDB4ZTEsIDB4NTcsIDB4YjIsIDB4Y2QsIDB4M2EsIDB4 ZjAsIDB4YzksIDB4MzQsIDB4MjQsIDB4NDEsIDB4MWMsIDB4NDIsCi0rICAgIDB4OTksIDB4YjIs IDB4ODQsIDB4ZTksIDB4MTcsIDB4ZDIsIDB4NzYsIDB4OTIKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcmV0dXJuZWRiaXRzW10gPSB7 Ci0rICAgIDB4MzYsIDB4MTcsIDB4NWQsIDB4OTgsIDB4MmIsIDB4NjUsIDB4MjUsIDB4OGUsIDB4 YzgsIDB4MjksIDB4ZGYsIDB4MjcsCi0rICAgIDB4MDUsIDB4MzYsIDB4MjYsIDB4MTIsIDB4OGEs IDB4NjgsIDB4NzQsIDB4MjcsIDB4MzcsIDB4ZDQsIDB4N2YsIDB4MzIsCi0rICAgIDB4YjEsIDB4 MTIsIDB4ZDYsIDB4ODUsIDB4ODMsIDB4ZWIsIDB4MmUsIDB4YTAsIDB4ZWQsIDB4NGIsIDB4YjUs IDB4N2IsCi0rICAgIDB4NmYsIDB4MzksIDB4M2MsIDB4NzEsIDB4NzcsIDB4MDIsIDB4MTIsIDB4 Y2MsIDB4MmMsIDB4M2EsIDB4OGUsIDB4NjMsCi0rICAgIDB4ZGYsIDB4NGEsIDB4YmQsIDB4NmYs IDB4NmUsIDB4MmUsIDB4ZWQsIDB4MGEsIDB4ODUsIDB4YTUsIDB4MmYsIDB4YTIsCi0rICAgIDB4 NjgsIDB4ZGUsIDB4NDIsIDB4YjUKLSt9OwotKwotKy8qIEhNQUMgU0hBLTEgUFIgICovCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRy b3B5aW5wdXRbXSA9IHsKLSsgICAgMHgyNiwgMHg1ZiwgMHgzNiwgMHgxNCwgMHhmZiwgMHgzZCwg MHg4MywgMHhmYSwgMHg3MywgMHg1ZSwgMHg3NSwgMHhkYywKLSsgICAgMHgyYywgMHgxOCwgMHgx NywgMHgxYgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMV9wcl9ub25jZVtdID0gewotKyAgICAweGM4LCAweGUzLCAweDU3LCAweGE1 LCAweDdiLCAweDc0LCAweDg2LCAweDZlCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0gewotKyAgICAweDZlLCAweGRiLCAweDBkLCAweGZlLCAweDdkLCAweGFjLCAweDc5 LCAweGQwLCAweGE1LCAweDNhLCAweDQ4LCAweDg1LAotKyAgICAweDgwLCAweGUyLCAweDdmLCAw eDJhCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGExX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDMxLCAweGNkLCAweDVl LCAweDQzLCAweGRjLCAweGZiLCAweDdhLCAweDc5LCAweGNhLCAweDg4LCAweGRlLCAweDFmLAot KyAgICAweGQ3LCAweGJiLCAweDQyLCAweDA5Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByW10gPSB7 Ci0rICAgIDB4N2MsIDB4MjMsIDB4OTUsIDB4MzgsIDB4MDAsIDB4OTUsIDB4YzEsIDB4NzgsIDB4 MWYsIDB4OGYsIDB4ZDcsIDB4NjMsCi0rICAgIDB4MjMsIDB4ODcsIDB4MmEsIDB4ZWQKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFf cHJfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGJiLCAweDM0LCAweGU3LCAweDkzLCAw eGEzLCAweDAyLCAweDJjLCAweDRhLCAweGQwLCAweDg5LCAweGRhLCAweDdmLAotKyAgICAweGVk LCAweGY0LCAweDRjLCAweGRlLCAweDE3LCAweGVjLCAweGU1LCAweDZjCi0rfTsKLSsKLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2FkZGl0 aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHg0OSwgMHhiYywgMHgyZCwgMHgyYywgMHhiNywgMHgz MiwgMHhjYiwgMHgyMCwgMHhkZiwgMHhmNSwgMHg3NywgMHg1OCwKLSsgICAgMHhhMCwgMHg0Yiwg MHg5MywgMHg2ZQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKLSsgICAgMHgzYywgMHhh YSwgMHhiMCwgMHgyMSwgMHg0MiwgMHhiMCwgMHhkZCwgMHgzNCwgMHhmMCwgMHgxNiwgMHg3Ziwg MHgwYywKLSsgICAgMHgwZiwgMHhmZiwgMHgyZSwgMHhhZgotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9yZXR1cm5lZGJpdHNb XSA9IHsKLSsgICAgMHg4ZSwgMHhjYiwgMHhhMywgMHg2NCwgMHhiMiwgMHhiOCwgMHgzMywgMHg2 YywgMHg2NCwgMHgzYiwgMHg3OCwgMHgxNiwKLSsgICAgMHg5OSwgMHgzNSwgMHhjOCwgMHgzMCwg MHhjYiwgMHgzZSwgMHhhMCwgMHhkOAotK307Ci0rCi0rLyogSE1BQyBTSEEtMSBObyBQUiAgKi8K LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2Vu dHJvcHlpbnB1dFtdID0gewotKyAgICAweDMyLCAweDlhLCAweDJhLCAweDg3LCAweDdiLCAweDg5 LCAweDdjLCAweGY2LCAweGNiLCAweDk1LCAweGQ1LCAweDQwLAotKyAgICAweDE3LCAweGZlLCAw eDQ3LCAweDcwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX25vbmNlW10gPSB7Ci0rICAgIDB4MTYsIDB4ZDgsIDB4ZTAsIDB4Yzcs IDB4NTIsIDB4Y2YsIDB4NGEsIDB4MjUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7 Ci0rICAgIDB4MzUsIDB4MzUsIDB4YTksIDB4YTUsIDB4NDAsIDB4YmUsIDB4OWIsIDB4ZDEsIDB4 NTYsIDB4ZGQsIDB4NDQsIDB4MDAsCi0rICAgIDB4NzIsIDB4ZjcsIDB4ZDMsIDB4NWUKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFf YWRkaXRpb25hbGlucHV0W10gPSB7Ci0rICAgIDB4MWIsIDB4MmMsIDB4ODQsIDB4MmQsIDB4NGEs IDB4ODksIDB4OGYsIDB4NjksIDB4MTksIDB4ZjEsIDB4ZjMsIDB4ZGIsCi0rICAgIDB4YmIsIDB4 ZTMsIDB4YWEsIDB4ZWEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTFfaW50X3JldHVybmVkYml0c1tdID0gewotKyAgICAweGNmLCAw eGZhLCAweDdkLCAweDcyLCAweDBmLCAweGU2LCAweGM3LCAweDk2LCAweGEwLCAweDY5LCAweDMx LCAweDExLAotKyAgICAweDliLCAweDBiLCAweDFhLCAweDIwLCAweDFmLCAweDNmLCAweGFhLCAw eGQxCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGExX2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDkwLCAweDc1LCAweDE1 LCAweDA0LCAweDk1LCAweGYxLCAweGJhLCAweDgxLCAweDBjLCAweDM3LCAweDk0LCAweDZmLAot KyAgICAweDg2LCAweDUyLCAweDZkLCAweDljCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtd ID0gewotKyAgICAweDViLCAweDQwLCAweGJhLCAweDVmLCAweDE3LCAweDcwLCAweGYwLCAweDRi LCAweGRmLCAweGM5LCAweDk3LCAweDkyLAotKyAgICAweDc5LCAweGM1LCAweDgyLCAweDI4Ci0r fTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGExX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHg5NywgMHhjOCwgMHg4MCwgMHg5MCwg MHhiMywgMHhhYSwgMHg2ZSwgMHg2MCwgMHhlYSwgMHg4MywgMHg3YSwgMHhlMywKLSsgICAgMHg4 YSwgMHhjYSwgMHhhNCwgMHg3ZgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg5MCwg MHhiZCwgMHgwNSwgMHg1NiwgMHg2ZCwgMHhiNSwgMHgyMiwgMHhkNSwgMHhiOSwgMHg1YSwgMHgy OSwgMHgyZCwKLSsgICAgMHhlOSwgMHgwYiwgMHhlMSwgMHhhYywgMHhkZSwgMHgyNywgMHgwYiwg MHhiMAotK307Ci0rCi0rLyogSE1BQyBTSEEtMjI0IFBSICAqLwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9 IHsKLSsgICAgMHgxNywgMHgzMiwgMHgyYiwgMHgyZSwgMHg2ZiwgMHgxYiwgMHg5YywgMHg2ZCwg MHgzMSwgMHhlMCwgMHgzNCwgMHgwNywKLSsgICAgMHhjZiwgMHhlZCwgMHhmNiwgMHhiNiwgMHg1 YSwgMHg3NiwgMHg0YywgMHhiYywgMHg2MiwgMHg4NSwgMHgwMSwgMHg5MAotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX25v bmNlW10gPSB7Ci0rICAgIDB4MzgsIDB4YmYsIDB4NWYsIDB4MjAsIDB4YjMsIDB4NjgsIDB4MmYs IDB4NDMsIDB4NjEsIDB4MDUsIDB4OGYsIDB4MjMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwot KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHhjMCwgMHhjOSwgMHg0NSwgMHhhYywgMHg4ZCwgMHgy NywgMHg3NywgMHgwOCwgMHgwYiwgMHgxNywgMHg2ZCwgMHhlZCwKLSsgICAgMHhjMSwgMHg3ZCwg MHhkNSwgMHgwNywgMHg5ZCwgMHg2ZSwgMHhmOCwgMHgyMywgMHgyYSwgMHgyMiwgMHgxMywgMHhi ZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweGE0LCAweDNjLCAweGU3 LCAweDNiLCAweGVhLCAweDE5LCAweDQ1LCAweDMyLCAweGMyLCAweDgzLCAweDZkLCAweDIxLAot KyAgICAweDhhLCAweGMwLCAweGVlLCAweDY3LCAweDQ1LCAweGRlLCAweDEzLCAweDdkLCAweDlk LCAweDYxLCAweDAwLCAweDNiCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAg MHgxNSwgMHgwNSwgMHg3NCwgMHg0YSwgMHg3ZiwgMHg4ZCwgMHg1YywgMHg2MCwgMHgxNiwgMHhl NSwgMHg3YiwgMHhhZCwKLSsgICAgMHhmNSwgMHg0MSwgMHg4ZiwgMHg1NSwgMHg2MCwgMHhjNCwg MHgwOSwgMHhlZSwgMHgxZSwgMHgxMSwgMHg4MSwgMHhhYgotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2ludF9yZXR1cm5l ZGJpdHNbXSA9IHsKLSsgICAgMHg2ZiwgMHhmNSwgMHg5YSwgMHhlMiwgMHg1NCwgMHg1MywgMHgz MCwgMHgzZCwgMHg1YSwgMHgyNywgMHgyOSwgMHgzOCwKLSsgICAgMHgyNywgMHhmMiwgMHgwZCwg MHgwNSwgMHhlOSwgMHgyNiwgMHhjYiwgMHgxNiwgMHhjMywgMHg1MSwgMHg1ZiwgMHgxMywKLSsg ICAgMHg0MSwgMHhmZSwgMHg5OSwgMHhmMgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9 IHsKLSsgICAgMHg3MywgMHg4MSwgMHg4OCwgMHg4NCwgMHg4ZiwgMHhlZCwgMHg2ZiwgMHgxMCwg MHg5ZiwgMHg5MywgMHhiZiwgMHgxNywKLSsgICAgMHgzNSwgMHg3YywgMHhlZiwgMHhkNSwgMHg4 ZCwgMHgyNiwgMHhhNiwgMHg3YSwgMHhlOCwgMHgwOSwgMHgzNiwgMHg0ZgotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2Vu dHJvcHlpbnB1dHByMltdID0gewotKyAgICAweGU2LCAweGNmLCAweGNmLCAweDdlLCAweDEyLCAw eGU1LCAweDQzLCAweGQyLCAweDM4LCAweGQ4LCAweDI0LCAweDZmLAotKyAgICAweDVhLCAweDM3 LCAweDY4LCAweGJmLCAweDRmLCAweGEwLCAweGZmLCAweGQ1LCAweDYxLCAweDhhLCAweDkzLCAw eGUwCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEyMjRfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4YWYsIDB4ZjksIDB4ZDgs IDB4MTksIDB4OTEsIDB4MzAsIDB4ODIsIDB4NmYsIDB4YTksIDB4MWUsIDB4OWQsIDB4ZDcsCi0r ICAgIDB4ZjMsIDB4NTAsIDB4ZTAsIDB4YzcsIDB4ZDUsIDB4NjQsIDB4OTYsIDB4N2QsIDB4NGMs IDB4NGQsIDB4NzgsIDB4MDMsCi0rICAgIDB4NmQsIDB4ZDgsIDB4OWUsIDB4NzIKLSt9OwotKwot Ky8qIEhNQUMgU0hBLTIyNCBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4MTEs IDB4ODIsIDB4ZmQsIDB4ZDksIDB4NDIsIDB4ZjQsIDB4ZmEsIDB4YzgsIDB4ZjIsIDB4NDEsIDB4 ZTYsIDB4NTQsCi0rICAgIDB4MDEsIDB4YWUsIDB4MjIsIDB4NmUsIDB4YzYsIDB4YWYsIDB4YWYs IDB4ZDAsIDB4YTYsIDB4YjIsIDB4ZTIsIDB4NmQKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9ub25jZVtdID0gewotKyAgICAw eGE5LCAweDQ4LCAweGQ3LCAweDkyLCAweDM5LCAweDdlLCAweDJhLCAweGRjLCAweDMwLCAweDFm LCAweDBlLCAweDJiCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0r ICAgIDB4MTEsIDB4ZDUsIDB4ZjQsIDB4YmQsIDB4NjcsIDB4OGMsIDB4MzEsIDB4Y2YsIDB4YTMs IDB4M2YsIDB4MWUsIDB4NmIsCi0rICAgIDB4YTgsIDB4MDcsIDB4MDIsIDB4MGIsIDB4YzgsIDB4 MmUsIDB4NmMsIDB4NjQsIDB4NDEsIDB4NWIsIDB4YzgsIDB4MzcKLSt9OwotKwotK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFs aW5wdXRbXSA9IHsKLSsgICAgMHg2OCwgMHgxOCwgMHhjMiwgMHgwNiwgMHhlYiwgMHgzZSwgMHgw NCwgMHg5NSwgMHg0NCwgMHg1ZSwgMHhmYiwgMHhlNiwKLSsgICAgMHg0MSwgMHhjMSwgMHg1Yywg MHhjYywgMHg0MCwgMHgyZiwgMHhiNywgMHhkMiwgMHgwZiwgMHhmMywgMHg2YiwgMHhlNwotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjI0X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg3ZiwgMHg0NSwgMHhjNywgMHg1ZCwg MHgzMiwgMHhlNiwgMHgxNywgMHg2MCwgMHhiYSwgMHhkYywgMHhiOCwgMHg0MiwKLSsgICAgMHgx YiwgMHg5YywgMHhmMSwgMHhmYSwgMHgzYiwgMHg0ZCwgMHgyOSwgMHg1NCwgMHhjNiwgMHg5MCwg MHhmZiwgMHg1YywKLSsgICAgMHhjZCwgMHhkNiwgMHhhOSwgMHhjYwotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlp bnB1dHJlc2VlZFtdID0gewotKyAgICAweGM0LCAweDhlLCAweDM3LCAweDk1LCAweDY5LCAweDUz LCAweDI4LCAweGQ3LCAweDM3LCAweGJiLCAweDcwLCAweDk1LAotKyAgICAweDFjLCAweDA3LCAw eDFkLCAweGQ5LCAweGI3LCAweGU2LCAweDFiLCAweGJiLCAweGZlLCAweDQxLCAweGViLCAweGM5 Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEyMjRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4NTMsIDB4 MTcsIDB4YTEsIDB4NmEsIDB4ZmEsIDB4NzcsIDB4NDcsIDB4YjAsIDB4OTUsIDB4NTYsIDB4OWEs IDB4MjAsCi0rICAgIDB4NTcsIDB4ZGUsIDB4NWMsIDB4ODksIDB4OWYsIDB4N2YsIDB4ZTIsIDB4 ZGUsIDB4MTcsIDB4M2EsIDB4NTAsIDB4MjMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPSB7 Ci0rICAgIDB4M2EsIDB4MzIsIDB4ZjksIDB4ODUsIDB4MGMsIDB4YzEsIDB4ZWQsIDB4NzYsIDB4 MmQsIDB4ZGYsIDB4NDAsIDB4YzMsCi0rICAgIDB4MDYsIDB4MjIsIDB4NjYsIDB4ZDQsIDB4OWEs IDB4OWEsIDB4ZmYsIDB4NWEsIDB4N2UsIDB4N2EsIDB4ZjMsIDB4OTYKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9yZXR1cm5l ZGJpdHNbXSA9IHsKLSsgICAgMHg0MywgMHhiNCwgMHg1NywgMHg1YywgMHgzOCwgMHgyNSwgMHg5 ZCwgMHhhZSwgMHhlYywgMHg5NiwgMHhkMSwgMHg4NSwKLSsgICAgMHgzYSwgMHg4NCwgMHg4ZCwg MHhmZSwgMHg2OCwgMHhkNSwgMHgwZSwgMHg1YywgMHg4ZiwgMHg2NSwgMHhhNSwgMHg0ZSwKLSsg ICAgMHg0NSwgMHg4NCwgMHhhOCwgMHg5NAotK307Ci0rCi0rLyogSE1BQyBTSEEtMjU2IFBSICAq LwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1 Nl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHg0ZCwgMHhiMCwgMHg0MywgMHhkOCwgMHgz NCwgMHg0YiwgMHgxMCwgMHg3MCwgMHhiMSwgMHg4YiwgMHhlZCwgMHhlYSwKLSsgICAgMHgwNywg MHg5MiwgMHg5ZiwgMHg2YywgMHg3OSwgMHgzMSwgMHhhZiwgMHg4MSwgMHgyOSwgMHhlYiwgMHg2 ZSwgMHhjYSwKLSsgICAgMHgzMiwgMHg0OCwgMHgyOCwgMHhlNywgMHgwMiwgMHg1ZCwgMHhhNiwg MHhhNgotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMjU2X3ByX25vbmNlW10gPSB7Ci0rICAgIDB4M2EsIDB4YWUsIDB4MTUsIDB4YTks IDB4OTksIDB4ZGMsIDB4ZTQsIDB4NjcsIDB4MzQsIDB4M2IsIDB4NzAsIDB4MTUsCi0rICAgIDB4 YWEsIDB4ZDMsIDB4MzAsIDB4OWEKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9IHsKLSsgICAgMHgxMywgMHgxZCwgMHgyNCwgMHgwNCwgMHhiMCwgMHgxOCwgMHg4MSwg MHgxNSwgMHgyMSwgMHg1MSwgMHgyYSwgMHgyNCwKLSsgICAgMHg1MiwgMHg2MSwgMHhiZSwgMHg2 NCwgMHg4MiwgMHg2YiwgMHg1NSwgMHgyZiwgMHhlMiwgMHhmMSwgMHg0MCwgMHg3ZCwKLSsgICAg MHg3MSwgMHhkOCwgMHgwMSwgMHg4NiwgMHgxNSwgMHhiNywgMHg4YiwgMHhiNQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3By X2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDhmLCAweGE2LCAweDU0LCAweDVmLCAweGIx LCAweGQwLCAweGQ4LCAweGMzLCAweGU3LCAweDBjLCAweDE1LCAweGE5LAotKyAgICAweDIzLCAw eDZlLCAweGZlLCAweGZiLCAweDkzLCAweGY3LCAweDNhLCAweGJkLCAweDU5LCAweDAxLCAweGZh LCAweDE4LAotKyAgICAweDhlLCAweGU5LCAweDFhLCAweGE5LCAweDc4LCAweGZjLCAweDc5LCAw eDBiCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEyNTZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHhjZiwgMHgyNCwgMHhi OSwgMHhlYiwgMHhiMywgMHhkNCwgMHhjZCwgMHgxNywgMHgzNywgMHgzOCwgMHg3NSwgMHg3OSwK LSsgICAgMHgxNSwgMHhjYiwgMHgyZCwgMHg3NSwgMHg1MSwgMHhmMSwgMHhjYywgMHhhYSwgMHgz MiwgMHhhNCwgMHhhNywgMHgzNiwKLSsgICAgMHg3YywgMHg1YywgMHhlNCwgMHg0NywgMHhmMSwg MHgzZSwgMHgxZCwgMHhlNQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAg MHg1MiwgMHg0MiwgMHhmYSwgMHhlYiwgMHg4NSwgMHhlMCwgMHgzMCwgMHgyMiwgMHg3OSwgMHgw MCwgMHgxNiwgMHhiMiwKLSsgICAgMHg4OCwgMHgyZiwgMHgxNCwgMHg2YSwgMHhiNywgMHhmYywg MHhiNywgMHg1MywgMHhkYywgMHg0YSwgMHgxMiwgMHhlZiwKLSsgICAgMHg1NCwgMHhkNiwgMHgz MywgMHhlOSwgMHgyMCwgMHhkNiwgMHhmZCwgMHg1NgotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1 dDJbXSA9IHsKLSsgICAgMHhmNCwgMHhmNiwgMHg0OSwgMHhhMSwgMHgyZCwgMHg2NCwgMHgyYiwg MHgzMCwgMHg1OCwgMHhmOCwgMHhiZCwgMHhiOCwKLSsgICAgMHg3NSwgMHhlYiwgMHhiYiwgMHg1 ZSwgMHgxYywgMHg5YiwgMHg4MSwgMHg2YSwgMHhkYSwgMHgxNCwgMHg4NiwgMHg2ZSwKLSsgICAg MHhkMCwgMHhkYSwgMHgxOCwgMHhiNywgMHg4OCwgMHhmYiwgMHg1OSwgMHhmMwotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3By X2VudHJvcHlpbnB1dHByMltdID0gewotKyAgICAweDIxLCAweGNkLCAweDZlLCAweDQ2LCAweGFk LCAweDk5LCAweDA3LCAweDE3LCAweGI0LCAweDNkLCAweDc2LCAweDBhLAotKyAgICAweGZmLCAw eDViLCAweDUyLCAweDUwLCAweDc4LCAweGRmLCAweDFmLCAweDI0LCAweDA2LCAweDBkLCAweDNm LCAweDc0LAotKyAgICAweGE5LCAweGM5LCAweDM3LCAweGNmLCAweGQ4LCAweDI2LCAweDI1LCAw eDkxCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg aG1hY19zaGEyNTZfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4YTcsIDB4YWYsIDB4MmYs IDB4MjksIDB4ZTAsIDB4M2EsIDB4NzIsIDB4OTUsIDB4OTYsIDB4MWMsIDB4YTksIDB4ZjAsCi0r ICAgIDB4NGEsIDB4MTcsIDB4NGQsIDB4NjYsIDB4MDYsIDB4MTAsIDB4YmYsIDB4MzksIDB4ODks IDB4ODgsIDB4YjgsIDB4OTEsCi0rICAgIDB4MzcsIDB4MTgsIDB4OTksIDB4Y2YsIDB4OGMsIDB4 NTMsIDB4M2IsIDB4N2UKLSt9OwotKwotKy8qIEhNQUMgU0hBLTI1NiBObyBQUiAgKi8KLStfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9w eWlucHV0W10gPSB7Ci0rICAgIDB4OTYsIDB4YjcsIDB4NTMsIDB4MjIsIDB4MWUsIDB4NTIsIDB4 MmEsIDB4OTYsIDB4YjEsIDB4MTUsIDB4M2MsIDB4MzUsCi0rICAgIDB4NWEsIDB4OGIsIDB4ZDMs IDB4NGEsIDB4YTYsIDB4NmMsIDB4ODMsIDB4MGEsIDB4N2QsIDB4YTMsIDB4MjMsIDB4M2QsCi0r ICAgIDB4NDMsIDB4YTEsIDB4MDcsIDB4MmMsIDB4MmQsIDB4ZTMsIDB4ODEsIDB4Y2MKLSt9Owot KwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1 Nl9ub25jZVtdID0gewotKyAgICAweGYxLCAweGFjLCAweDk3LCAweGNiLCAweDVlLCAweDA2LCAw eDQ4LCAweGQyLCAweDk0LCAweGJlLCAweDE1LCAweDJlLAotKyAgICAweGM3LCAweGZjLCAweGMy LCAweDAxCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4 OTgsIDB4YzUsIDB4MWUsIDB4MzUsIDB4NWUsIDB4ODksIDB4MGQsIDB4Y2UsIDB4NjQsIDB4NmQs IDB4MTgsIDB4YTcsCi0rICAgIDB4NWEsIDB4YzYsIDB4ZjMsIDB4ZTcsIDB4ZDYsIDB4OWUsIDB4 YzAsIDB4ZWEsIDB4YjcsIDB4M2EsIDB4OGQsIDB4NjUsCi0rICAgIDB4YjgsIDB4ZWIsIDB4MTAs IDB4ZDcsIDB4NTcsIDB4MTgsIDB4YTAsIDB4MzIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRbXSA9 IHsKLSsgICAgMHgxYiwgMHgxMCwgMHhhZiwgMHhhYywgMHhkMCwgMHg2NSwgMHg5NSwgMHhhZCwg MHgwNCwgMHhhZCwgMHgwMywgMHgxYywKLSsgICAgMHhlMCwgMHg0MCwgMHhkNiwgMHgzZSwgMHgx YywgMHg0NiwgMHg1MywgMHgzOSwgMHg3YywgMHhlMiwgMHhiYywgMHhkYSwKLSsgICAgMHg4Yywg MHhhMiwgMHgzMywgMHhhNywgMHg5YSwgMHgyNiwgMHhkMywgMHgyNwotK307Ci0rCi0rX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2ludF9yZXR1 cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhiYSwgMHg2MSwgMHgwZSwgMHg1NSwgMHhmZSwgMHgxMSwg MHg4YSwgMHg5ZSwgMHgwZiwgMHg4MCwgMHhkZiwgMHgxZCwKLSsgICAgMHgwMywgMHgwYSwgMHhm ZSwgMHgxNSwgMHg5NCwgMHgyOCwgMHg0YiwgMHhiYSwgMHhmNCwgMHg5ZiwgMHg1MSwgMHgyNSwK LSsgICAgMHg4OCwgMHhlNSwgMHg0ZSwgMHhmYiwgMHhhZiwgMHhjZSwgMHg2OSwgMHg5MAotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh MjU2X2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDYyLCAweDdmLCAweDFlLCAweDZi LCAweGU4LCAweDhlLCAweGUxLCAweDM1LCAweDdkLCAweDliLCAweDRmLCAweGM3LAotKyAgICAw eGVjLCAweGM4LCAweGFjLCAweGVmLCAweDZiLCAweDEzLCAweDllLCAweDA1LCAweDU2LCAweGMx LCAweDA4LCAweGY5LAotKyAgICAweDJmLCAweDBmLCAweDI3LCAweDljLCAweGQ0LCAweDE1LCAw eGVkLCAweDJkCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAg IDB4YzcsIDB4NzYsIDB4NmUsIDB4YTksIDB4ZDIsIDB4YjIsIDB4NzYsIDB4NDAsIDB4ODIsIDB4 MjUsIDB4MmMsIDB4YjMsCi0rICAgIDB4NmYsIDB4YWMsIDB4ZTksIDB4NzQsIDB4ZWYsIDB4OGYs IDB4M2MsIDB4OGUsIDB4Y2QsIDB4ZjEsIDB4YmYsIDB4YjMsCi0rICAgIDB4NDksIDB4NzcsIDB4 MzQsIDB4ODgsIDB4NTIsIDB4MzYsIDB4ZTYsIDB4MmUKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXQy W10gPSB7Ci0rICAgIDB4OGQsIDB4YjgsIDB4MGMsIDB4ZDEsIDB4YmYsIDB4NzAsIDB4ZjYsIDB4 MTksIDB4YzMsIDB4NDEsIDB4ODAsIDB4OWYsCi0rICAgIDB4ZTEsIDB4YTUsIDB4YTQsIDB4MWYs IDB4MmMsIDB4MjYsIDB4YjEsIDB4ZTUsIDB4ZDgsIDB4ZWIsIDB4YmUsIDB4ZjgsCi0rICAgIDB4 ZGYsIDB4ODgsIDB4NmEsIDB4ODksIDB4ZDYsIDB4MDUsIDB4ZDgsIDB4OWQKLSt9OwotKwotK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9yZXR1 cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg0MywgMHgxMiwgMHgyYSwgMHgyYywgMHg0MCwgMHg1Mywg MHgyZSwgMHg3YywgMHg2NiwgMHgzNCwgMHhhYywgMHhjMywKLSsgICAgMHg0MywgMHhlMywgMHhl MCwgMHg2YSwgMHhmYywgMHhmYSwgMHhlYSwgMHg4NywgMHgyMSwgMHgxZiwgMHhlMiwgMHgyNiwK LSsgICAgMHhjNCwgMHhmOSwgMHgwOSwgMHg5YSwgMHgwZCwgMHg2ZSwgMHg3ZiwgMHhlMAotK307 Ci0rCi0rLyogSE1BQyBTSEEtMzg0IFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAg MHg2OSwgMHg4MSwgMHg5OCwgMHg4OCwgMHg0NCwgMHhmNSwgMHhkNiwgMHgyZSwgMHgwMCwgMHgw OCwgMHgzYiwgMHhjNSwKLSsgICAgMHhmYiwgMHhkNywgMHg4ZSwgMHg2ZiwgMHgyMywgMHhmOCwg MHg2ZCwgMHgwOSwgMHhkNiwgMHg4NSwgMHg0OSwgMHhkMSwKLSsgICAgMHhmOCwgMHg2ZCwgMHhh NCwgMHg1OCwgMHg1NCwgMHhmZCwgMHg4OCwgMHhhOQotK307Ci0rCi0rX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX25vbmNlW10gPSB7Ci0r ICAgIDB4NmUsIDB4MzgsIDB4ODEsIDB4Y2EsIDB4YjcsIDB4ZTgsIDB4NmUsIDB4NjYsIDB4NDks IDB4OGEsIDB4YjIsIDB4NTksCi0rICAgIDB4ZWUsIDB4MTYsIDB4YzksIDB4ZGUKLSt9OwotKwot K19fZmlwc19jb25zdHNlZwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTM4NF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKLSsgICAgMHhmZSwgMHg0YywgMHhk OSwgMHhmNCwgMHg3OCwgMHgzYiwgMHgwOCwgMHg0MSwgMHg4ZCwgMHg4ZiwgMHg1NSwgMHhjNCwK LSsgICAgMHg0MywgMHg1NiwgMHhiNiwgMHgxMiwgMHgzNiwgMHg2YiwgMHgzMCwgMHhiNywgMHg1 ZSwgMHhlMSwgMHhiOSwgMHg0NywKLSsgICAgMHgwNCwgMHhiMSwgMHg0ZSwgMHhhOSwgMHgwMCwg MHhhMSwgMHg1MiwgMHhhMQotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAw eDg5LCAweGU5LCAweGNjLCAweDhmLCAweDI3LCAweDNjLCAweDI2LCAweGQxLCAweDk1LCAweGM4 LCAweDdkLCAweDBmLAotKyAgICAweDViLCAweDFhLCAweGYwLCAweDc4LCAweDM5LCAweDU2LCAw eDZmLCAweGE0LCAweDIzLCAweGU3LCAweGQxLCAweGRhLAotKyAgICAweDdjLCAweDY2LCAweDMz LCAweGEwLCAweDkwLCAweGM5LCAweDkyLCAweDg4Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0cHJb XSA9IHsKLSsgICAgMHhiZSwgMHgzZCwgMHg3YywgMHgwZCwgMHhjYSwgMHhkYSwgMHg3YywgMHg0 OSwgMHhiOCwgMHgxMiwgMHgzNiwgMHhjMCwKLSsgICAgMHhkYiwgMHhhZCwgMHgzNSwgMHhhOCwg MHhjNywgMHgwYiwgMHgyYSwgMHgyYywgMHg2OSwgMHg2ZCwgMHgyNSwgMHg1NiwKLSsgICAgMHg2 MywgMHg4MiwgMHgxMSwgMHgzZSwgMHhhNywgMHgzMywgMHg3MCwgMHg3MgotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2lu dF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHg4MiwgMHgzZCwgMHhlNiwgMHg1NCwgMHg4MCwg MHg0MiwgMHhmOCwgMHhiYSwgMHg5MCwgMHg0ZiwgMHgwNiwgMHhhNiwKLSsgICAgMHhkMiwgMHg3 ZiwgMHhiZiwgMHg3OSwgMHg3YywgMHgxMiwgMHg3ZCwgMHhhNiwgMHhhMiwgMHg2NiwgMHhlOCwg MHhhNiwKLSsgICAgMHhjMCwgMHhkNiwgMHg0YSwgMHg1NSwgMHhiZiwgMHhkOCwgMHgwYSwgMHhj NSwgMHhmOCwgMHgwMywgMHg4OCwgMHhkZCwKLSsgICAgMHg4ZSwgMHg4NywgMHhkMSwgMHg1YSwg MHg0OCwgMHgyNiwgMHg3MiwgMHgyYSwgMHg4ZSwgMHhjZiwgMHhlZSwgMHhiYQotK307Ci0rCi0r X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3By X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsgICAgMHg4ZiwgMHhmZiwgMHhkOSwgMHg4NCwgMHhi YiwgMHg4NSwgMHgzYSwgMHg2NiwgMHhhMSwgMHgyMSwgMHhjZSwgMHhiMiwKLSsgICAgMHgzYSwg MHgzYSwgMHgxNywgMHgyMiwgMHgxOSwgMHhhZSwgMHhjNywgMHhiNiwgMHg2MywgMHg4MSwgMHhk NSwgMHhmZiwKLSsgICAgMHgwZCwgMHhjOCwgMHhlMSwgMHhhZiwgMHg1NywgMHhkMiwgMHhjYiwg MHg2MAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhMzg0X3ByX2VudHJvcHlpbnB1dHByMltdID0gewotKyAgICAweGQ3LCAweGZiLCAw eGM5LCAweGU4LCAweGUyLCAweGYyLCAweGFhLCAweDRjLCAweGI4LCAweDUxLCAweDJmLCAweGUx LAotKyAgICAweDIyLCAweGJhLCAweGYzLCAweGRhLCAweDBhLCAweDE5LCAweDc2LCAweDcxLCAw eDU3LCAweGIyLCAweDFkLCAweDk0LAotKyAgICAweDA5LCAweDY5LCAweDZjLCAweGQzLCAweDk3 LCAweDUxLCAweDgxLCAweDg3Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4 ZTYsIDB4MTksIDB4MjgsIDB4YTgsIDB4MjEsIDB4Y2UsIDB4NWUsIDB4ZGIsIDB4MjQsIDB4Nzks IDB4OGMsIDB4NzYsCi0rICAgIDB4NWQsIDB4NzMsIDB4YjIsIDB4ZGYsIDB4YWMsIDB4ZWYsIDB4 ODUsIDB4YTcsIDB4M2IsIDB4MTksIDB4MDksIDB4OGIsCi0rICAgIDB4N2YsIDB4OTgsIDB4Mjgs IDB4YTksIDB4OTMsIDB4ZDgsIDB4N2EsIDB4YWQsIDB4NTUsIDB4OGIsIDB4MjQsIDB4OWQsCi0r ICAgIDB4ZTYsIDB4OTgsIDB4ZmUsIDB4NDcsIDB4ZDUsIDB4NDgsIDB4YzEsIDB4MjMsIDB4ZDgs IDB4MWQsIDB4NjIsIDB4NzUKLSt9OwotKwotKy8qIEhNQUMgU0hBLTM4NCBObyBQUiAgKi8KLStf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfZW50 cm9weWlucHV0W10gPSB7Ci0rICAgIDB4YzMsIDB4NTYsIDB4MmIsIDB4MWQsIDB4YzIsIDB4YmIs IDB4YTgsIDB4ZjAsIDB4YWUsIDB4MWIsIDB4MGQsIDB4ZDMsCi0rICAgIDB4NWEsIDB4NmMsIDB4 ZGEsIDB4NTcsIDB4OGUsIDB4YTUsIDB4OGEsIDB4MGQsIDB4NmMsIDB4NGIsIDB4MTgsIDB4YjEs Ci0rICAgIDB4MDQsIDB4M2UsIDB4YjQsIDB4OTksIDB4MzUsIDB4YzQsIDB4YzAsIDB4NWYKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTM4NF9ub25jZVtdID0gewotKyAgICAweGM1LCAweDQ5LCAweDFlLCAweDY2LCAweDI3LCAweDky LCAweGJlLCAweGVjLCAweGI1LCAweDFlLCAweDRiLCAweGIxLAotKyAgICAweDM4LCAweGUzLCAw eGViLCAweDYyCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgaG1hY19zaGEzODRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7Ci0rICAg IDB4YmUsIDB4ZTcsIDB4NmIsIDB4NTcsIDB4ZGUsIDB4ODgsIDB4MTEsIDB4OTYsIDB4OWIsIDB4 NmUsIDB4ZWEsIDB4ZTUsCi0rICAgIDB4NjMsIDB4ODMsIDB4NGMsIDB4YjYsIDB4OGQsIDB4NjYs IDB4YWEsIDB4MWYsIDB4OGIsIDB4NTQsIDB4ZTcsIDB4NjIsCi0rICAgIDB4NmQsIDB4NWEsIDB4 ZmMsIDB4YmYsIDB4OTcsIDB4YmEsIDB4Y2QsIDB4NzcKLSt9OwotKwotK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXRb XSA9IHsKLSsgICAgMHhlNSwgMHgyOCwgMHg1ZiwgMHg0MywgMHhmNSwgMHg4MywgMHg2ZSwgMHgw YSwgMHg4MywgMHg1YywgMHhlMywgMHg4MSwKLSsgICAgMHgwMywgMHhmMiwgMHhmOCwgMHg3OCwg MHgwMCwgMHg3YywgMHg5NSwgMHg4NywgMHgxNiwgMHhkNiwgMHg2YywgMHg1OCwKLSsgICAgMHgz MywgMHg2YywgMHg1MywgMHgzNSwgMHgwZCwgMHg2NiwgMHhlMywgMHhjZQotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2ludF9y ZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhlMiwgMHgxZiwgMHhmMywgMHhkYSwgMHgwZCwgMHgx OSwgMHg5OSwgMHg4NywgMHhjNCwgMHg5MCwgMHhhMiwgMHgzMSwKLSsgICAgMHhjYSwgMHgyYSwg MHg4OSwgMHg1OCwgMHg0MywgMHg0NCwgMHhiOCwgMHhkZSwgMHhjZiwgMHhhNCwgMHhiZSwgMHgz YiwKLSsgICAgMHg1MywgMHgyNiwgMHgyMiwgMHgzMSwgMHg3NiwgMHg0MSwgMHgyMiwgMHhiNSwg MHhhOCwgMHg3MCwgMHgyZiwgMHg0YiwKLSsgICAgMHg2NCwgMHg5NSwgMHg0ZCwgMHg0OCwgMHg5 NiwgMHgzNSwgMHhlNiwgMHhiZCwgMHgzYywgMHgzNCwgMHhkYiwgMHgxYgotK307Ci0rCi0rX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJv cHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDc3LCAweDYxLCAweGJhLCAweGJjLCAweGYyLCAw eGMxLCAweGYzLCAweDRiLCAweDg2LCAweDY1LCAweGZkLCAweDQ4LAotKyAgICAweDBlLCAweDNj LCAweDAyLCAweDVlLCAweGEyLCAweDdhLCAweDZiLCAweDdjLCAweGVkLCAweDIxLCAweDVlLCAw eGY5LAotKyAgICAweGNkLCAweGNkLCAweDc3LCAweDA3LCAweDJiLCAweGJlLCAweGM1LCAweDVj Ci0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGEzODRfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7Ci0rICAgIDB4MTgsIDB4 MjQsIDB4NWYsIDB4YzYsIDB4ODQsIDB4ZDEsIDB4NjcsIDB4YzMsIDB4OWEsIDB4MTEsIDB4YTUs IDB4OGMsCi0rICAgIDB4MDcsIDB4MzksIDB4MjEsIDB4ODMsIDB4NGQsIDB4MDQsIDB4YzQsIDB4 NmEsIDB4MjgsIDB4MTksIDB4Y2YsIDB4OTIsCi0rICAgIDB4MjEsIDB4ZDksIDB4OWUsIDB4NDEs IDB4NzIsIDB4NmMsIDB4OWUsIDB4NjMKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Ci0r ICAgIDB4OTYsIDB4NjcsIDB4NDEsIDB4MjgsIDB4OWIsIDB4YjcsIDB4OTIsIDB4OGQsIDB4NjQs IDB4M2IsIDB4ZTQsIDB4Y2YsCi0rICAgIDB4N2UsIDB4YWEsIDB4MWUsIDB4YjEsIDB4NGIsIDB4 MWQsIDB4MDksIDB4NTYsIDB4NjcsIDB4OWMsIDB4YzYsIDB4NmQsCi0rICAgIDB4M2IsIDB4ZTgs IDB4OTEsIDB4OWQsIDB4ZTEsIDB4OGEsIDB4YjcsIDB4MzIKLSt9OwotKwotK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9yZXR1cm5lZGJpdHNb XSA9IHsKLSsgICAgMHhlMywgMHg1OSwgMHg2MSwgMHgzOCwgMHg5MiwgMHhlYywgMHhlMiwgMHgz YywgMHhmZiwgMHhiNywgMHhkYiwgMHgxOSwKLSsgICAgMHgwZiwgMHg1YiwgMHg5MywgMHg2OCwg MHgwZCwgMHhhNCwgMHg5NCwgMHg0MCwgMHg3MiwgMHgwYiwgMHhlMCwgMHhlZCwKLSsgICAgMHg0 ZCwgMHhjZCwgMHg2OCwgMHhhMCwgMHgxZSwgMHhmZSwgMHg2NywgMHhiMiwgMHhmYSwgMHgyMSwg MHg1NiwgMHg3NCwKLSsgICAgMHhhNCwgMHhhZCwgMHhjZiwgMHhiNywgMHg2MCwgMHg2NiwgMHgy ZSwgMHg0MCwgMHhkZSwgMHg4MiwgMHhjYSwgMHhmYgotK307Ci0rCi0rLyogSE1BQyBTSEEtNTEy IFBSICAqLwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTUxMl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKLSsgICAgMHhhYSwgMHg5ZSwgMHg0NSwgMHg2 NywgMHgwZSwgMHgwMCwgMHgyYSwgMHg2NywgMHg5OCwgMHhkNiwgMHhkYSwgMHgwYiwKLSsgICAg MHgwZiwgMHgxNywgMHg3ZSwgMHhhYywgMHhmZCwgMHgyNywgMHhjNCwgMHhjYSwgMHg4NCwgMHhk ZiwgMHhkZSwgMHhiYSwKLSsgICAgMHg4NSwgMHhkOSwgMHhiZSwgMHg4ZiwgMHhmMywgMHhmZiwg MHg5MSwgMHg0ZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhNTEyX3ByX25vbmNlW10gPSB7Ci0rICAgIDB4OGMsIDB4NDksIDB4MmYs IDB4NTgsIDB4MWUsIDB4N2EsIDB4ZGEsIDB4NGIsIDB4N2UsIDB4OGEsIDB4MzAsIDB4N2IsCi0r ICAgIDB4ODYsIDB4ZWEsIDB4YWYsIDB4YTIKLSt9OwotKwotK19fZmlwc19jb25zdHNlZwotKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9wZXJzb25hbGl6YXRp b25zdHJpbmdbXSA9IHsKLSsgICAgMHg3MSwgMHhlMSwgMHhiYiwgMHhhZCwgMHhhNywgMHg0Yiwg MHgyZSwgMHgzMSwgMHgzYiwgMHgwYiwgMHhlYywgMHgyNCwKLSsgICAgMHg5OSwgMHgzOCwgMHhi YywgMHhhYSwgMHgwNSwgMHg0YywgMHg0NiwgMHg0NCwgMHhmYSwgMHhhZCwgMHg4ZSwgMHgwMiwK LSsgICAgMHhjMSwgMHg3ZSwgMHhhZCwgMHhlYywgMHg1NCwgMHhhNiwgMHhkMCwgMHhhZAotK307 Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hh NTEyX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0gewotKyAgICAweDNkLCAweDZlLCAweGE2LCAweGE4 LCAweDI5LCAweDJhLCAweGIyLCAweGY1LCAweDk4LCAweDQyLCAweGU0LCAweDkyLAotKyAgICAw eDc4LCAweDIyLCAweDY3LCAweGZkLCAweDFiLCAweDE1LCAweDFlLCAweDI5LCAweGFhLCAweDcx LCAweDNjLCAweDNjLAotKyAgICAweGU3LCAweDA1LCAweDIwLCAweGE5LCAweDI5LCAweGM2LCAw eDc1LCAweDcxCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGE1MTJfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKLSsgICAgMHhhYiwgMHhi OSwgMHgxNiwgMHhkOCwgMHg1NSwgMHgzNSwgMHg1NCwgMHhiNywgMHg5NywgMHgzZiwgMHg5NCwg MHhiYywKLSsgICAgMHgyZiwgMHg3YywgMHg3MCwgMHhjNywgMHhkMCwgMHhlZCwgMHhiNywgMHg0 YiwgMHhmNywgMHhmNiwgMHg2YywgMHgwMywKLSsgICAgMHgwYywgMHhiMCwgMHgwMywgMHhkOCwg MHhiYiwgMHg3MSwgMHhkOSwgMHgxMAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsK LSsgICAgMHg4ZSwgMHhkMywgMHhmZCwgMHg1MiwgMHg5ZSwgMHg4MywgMHgwOCwgMHg0OSwgMHgx OCwgMHg2ZSwgMHgyMywgMHg1NiwKLSsgICAgMHg1YywgMHg0NSwgMHg5MywgMHgzNCwgMHgwNSwg MHhlMiwgMHg5OCwgMHg4ZiwgMHgwYywgMHhkNCwgMHgzMiwgMHgwYywKLSsgICAgMHhmZCwgMHhk YSwgMHg1ZiwgMHg5MiwgMHgzYSwgMHg4YywgMHg4MSwgMHhiZCwgMHhmNiwgMHg2YywgMHg1NSwg MHhmZCwKLSsgICAgMHhiOCwgMHgyMCwgMHhjZSwgMHg4ZCwgMHg5NywgMHgyNywgMHhlOCwgMHhl OCwgMHhlMCwgMHhiMywgMHg4NSwgMHg1MCwKLSsgICAgMHhhMiwgMHhjMiwgMHhiMiwgMHg5NSwg MHgxZCwgMHg0OCwgMHhkMywgMHg3YiwgMHg0YiwgMHg3OCwgMHgxMywgMHgzNSwKLSsgICAgMHgw NSwgMHgxNywgMHhiZSwgMHgwZAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKLSsg ICAgMHhjMywgMHhmYywgMHg5NSwgMHhhYSwgMHg2OSwgMHgwNiwgMHhhZSwgMHg1OSwgMHg0MSwg MHhjZSwgMHgyNiwgMHgwOCwKLSsgICAgMHgyOSwgMHg2ZCwgMHg0NSwgMHhkYSwgMHhlOCwgMHhi MywgMHg2YywgMHg5NSwgMHg2MCwgMHgwZiwgMHg3MCwgMHgyYywKLSsgICAgMHgxMCwgMHhiYSwg MHgzOCwgMHg4YywgMHhjZiwgMHgyOSwgMHg5OSwgMHhhYQotK307Ci0rCi0rX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1 dHByMltdID0gewotKyAgICAweDNiLCAweDlhLCAweDI1LCAweGNlLCAweGQ3LCAweGY5LCAweDVj LCAweGQxLCAweDNhLCAweDNlLCAweGFhLCAweDcxLAotKyAgICAweDE0LCAweDNlLCAweDE5LCAw eGU4LCAweGNlLCAweGU2LCAweGZlLCAweDUxLCAweDg0LCAweGU5LCAweDFiLCAweGZlLAotKyAg ICAweDNmLCAweGE3LCAweGYyLCAweGZkLCAweDc2LCAweDVmLCAweDZhLCAweGU3Ci0rfTsKLSsK LStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf cHJfcmV0dXJuZWRiaXRzW10gPSB7Ci0rICAgIDB4YjcsIDB4ODIsIDB4YTksIDB4NTcsIDB4ODEs IDB4NjcsIDB4NTMsIDB4YjUsIDB4YTEsIDB4ZTksIDB4M2QsIDB4MzUsCi0rICAgIDB4ZjksIDB4 ZTQsIDB4OTcsIDB4YmUsIDB4YTYsIDB4Y2EsIDB4ZjEsIDB4MDEsIDB4MTMsIDB4MDksIDB4ZTcs IDB4MjEsCi0rICAgIDB4YzAsIDB4ZWQsIDB4OTMsIDB4NWQsIDB4NGIsIDB4ZjQsIDB4ZWIsIDB4 OGQsIDB4NTMsIDB4MjUsIDB4OGEsIDB4YzQsCi0rICAgIDB4YjEsIDB4NmYsIDB4NmUsIDB4Mzcs IDB4Y2QsIDB4MmUsIDB4YWMsIDB4MzksIDB4YjIsIDB4YjYsIDB4OTksIDB4YTMsCi0rICAgIDB4 ODIsIDB4MDAsIDB4YjAsIDB4MjEsIDB4ZjAsIDB4YzcsIDB4MmYsIDB4NGMsIDB4NzMsIDB4OTIs IDB4ZmQsIDB4MDAsCi0rICAgIDB4YjYsIDB4YWYsIDB4YmMsIDB4ZDMKLSt9OwotKwotKy8qIEhN QUMgU0hBLTUxMiBObyBQUiAgKi8KLStfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGE1MTJfZW50cm9weWlucHV0W10gPSB7Ci0rICAgIDB4NmUsIDB4ODUs IDB4ZTYsIDB4MjUsIDB4OTYsIDB4MjksIDB4YTcsIDB4NTIsIDB4NWIsIDB4NjAsIDB4YmEsIDB4 YWEsCi0rICAgIDB4ZGUsIDB4ZGIsIDB4MzYsIDB4MGEsIDB4NTEsIDB4OWEsIDB4MTUsIDB4YWUs IDB4NmUsIDB4MTgsIDB4ZDMsIDB4ZmUsCi0rICAgIDB4MzksIDB4YjksIDB4NGEsIDB4OTYsIDB4 ZjgsIDB4NzcsIDB4Y2IsIDB4OTUKLSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9ub25jZVtdID0gewotKyAgICAweGUwLCAweGE2 LCAweDVkLCAweDA4LCAweGMzLCAweDdjLCAweGFlLCAweDI1LCAweDJlLCAweDgwLCAweGQxLCAw eDNlLAotKyAgICAweGQ5LCAweGFmLCAweDQzLCAweDNjCi0rfTsKLSsKLStfX2ZpcHNfY29uc3Rz ZWcKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcGVyc29uYWxp emF0aW9uc3RyaW5nW10gPSB7Ci0rICAgIDB4NTMsIDB4OTksIDB4NTIsIDB4NWYsIDB4MTEsIDB4 YTksIDB4NjQsIDB4NjYsIDB4MjAsIDB4NWUsIDB4MWIsIDB4NWYsCi0rICAgIDB4NDIsIDB4YjMs IDB4ZjQsIDB4ZGEsIDB4ZWQsIDB4YmIsIDB4NjMsIDB4YzEsIDB4MjMsIDB4YWYsIDB4ZDAsIDB4 MDEsCi0rICAgIDB4OTAsIDB4M2IsIDB4ZDAsIDB4NzgsIDB4ZTQsIDB4MGIsIDB4YTcsIDB4MjAK LSt9OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFj X3NoYTUxMl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKLSsgICAgMHg4NSwgMHg5MCwgMHg4MCwgMHhk MywgMHg5OCwgMHhmMSwgMHg1MywgMHg2ZCwgMHg2OCwgMHgxNSwgMHg4ZiwgMHhlNSwKLSsgICAg MHg2MCwgMHgzZiwgMHgxNywgMHgyOSwgMHg1NSwgMHg4ZCwgMHgzMywgMHhiMSwgMHg0NSwgMHg2 NCwgMHg2NCwgMHg4ZCwKLSsgICAgMHg1MCwgMHgyMSwgMHg4OSwgMHhhZSwgMHhmNiwgMHhmZCwg MHgzMiwgMHg3MwotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGhtYWNfc2hhNTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHgyOCwgMHg1 NiwgMHgzMCwgMHg2ZiwgMHhmNCwgMHhhMSwgMHg0OCwgMHhlMCwgMHhjOSwgMHhmNSwgMHg3NSwg MHg5MCwKLSsgICAgMHhjYywgMHhmYiwgMHhkZiwgMHhkZiwgMHg3MSwgMHgzZCwgMHgwYSwgMHg5 YSwgMHgwMywgMHg2NSwgMHgzYiwgMHgxOCwKLSsgICAgMHg2MSwgMHhlMywgMHhkMSwgMHhkYSwg MHhjYywgMHg0YSwgMHhmZSwgMHg1NSwgMHgzOCwgMHhmOCwgMHgyMSwgMHg2YiwKLSsgICAgMHhm YSwgMHgxOCwgMHgwMSwgMHg0MiwgMHgzOSwgMHgyZiwgMHg5OSwgMHg1MywgMHgzOCwgMHgxNSwg MHg4MiwgMHgzNCwKLSsgICAgMHhjNSwgMHg5MywgMHg5MiwgMHhiYywgMHg0ZCwgMHg3NSwgMHgx YSwgMHg1ZiwgMHgyMSwgMHgyNywgMHhjYywgMHhhMSwKLSsgICAgMHhiMSwgMHg1NywgMHg2OSwg MHhlOAotK307Ci0rCi0rX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewotKyAgICAweDhjLCAweDUyLCAw eDdlLCAweDc3LCAweDcyLCAweDNmLCAweGEzLCAweDA0LCAweDk3LCAweDEwLCAweDliLCAweDQx LAotKyAgICAweGJkLCAweGU4LCAweGZmLCAweDg5LCAweGVkLCAweDgwLCAweGUzLCAweGJkLCAw eGFhLCAweDEyLCAweDJkLCAweGNhLAotKyAgICAweDc1LCAweDgyLCAweDM2LCAweDc3LCAweDg4 LCAweGNkLCAweGE2LCAweDczCi0rfTsKLSsKLStfX2ZpcHNfY29uc3RzZWcKLSsgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10g PSB7Ci0rICAgIDB4N2UsIDB4MzIsIDB4ZTMsIDB4NjksIDB4NjksIDB4MDcsIDB4MzQsIDB4YTIs IDB4MTYsIDB4YTIsIDB4NWQsIDB4MWEsCi0rICAgIDB4MTAsIDB4OTEsIDB4ZDMsIDB4ZTIsIDB4 MjEsIDB4YTIsIDB4YTMsIDB4ZGQsIDB4Y2QsIDB4MGMsIDB4MDksIDB4ODYsCi0rICAgIDB4MTEs IDB4ZTEsIDB4NTAsIDB4ZmYsIDB4NWMsIDB4YjcsIDB4ZWIsIDB4NWMKLSt9OwotKwotK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlv bmFsaW5wdXQyW10gPSB7Ci0rICAgIDB4N2YsIDB4NzgsIDB4NjYsIDB4ZDgsIDB4ZmIsIDB4Njcs IDB4Y2YsIDB4OGQsIDB4OGMsIDB4MDgsIDB4MzAsIDB4YTUsCi0rICAgIDB4ZjgsIDB4N2QsIDB4 Y2YsIDB4NDQsIDB4NTksIDB4Y2UsIDB4ZjgsIDB4ZGYsIDB4NTgsIDB4ZDMsIDB4NjAsIDB4Y2Is Ci0rICAgIDB4YTgsIDB4NjAsIDB4YjksIDB4MDcsIDB4YzQsIDB4YjEsIDB4OTUsIDB4NDgKLSt9 OwotKwotK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTUxMl9yZXR1cm5lZGJpdHNbXSA9IHsKLSsgICAgMHhkZiwgMHhhNywgMHgzNiwgMHhkNCwgMHhk YywgMHg1ZCwgMHg0ZCwgMHgzMSwgMHhhZCwgMHg2OSwgMHg0NiwgMHg5ZiwKLSsgICAgMHhmMSwg MHg3YywgMHhkNywgMHgzYiwgMHg0ZiwgMHg1NSwgMHhmMiwgMHhkNywgMHhiOSwgMHg5ZCwgMHhh ZCwgMHg3YSwKLSsgICAgMHg3OSwgMHgwOCwgMHg1OSwgMHhhNSwgMHhkYywgMHg3NCwgMHhmNSwg MHg5YiwgMHg3MywgMHhkMiwgMHgxMywgMHgyNSwKLSsgICAgMHgwYiwgMHg4MSwgMHgwOCwgMHgw OCwgMHgyNSwgMHhmYiwgMHgzOSwgMHhmMiwgMHhmMCwgMHhhMywgMHhhNCwgMHg4ZCwKLSsgICAg MHhlZiwgMHgwNSwgMHg5ZSwgMHhiOCwgMHhjNywgMHg1MiwgMHhlNCwgMHgwZSwgMHg0MiwgMHhh YSwgMHg3YywgMHg3OSwKLSsgICAgMHhjMiwgMHhkNiwgMHhmZCwgMHhhNQotK307Ci1kaWZmIC11 cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYwotLS0tIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDE2LTAzLTAxIDE2 OjMzOjA3LjYyMDkxNjYxMyArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2Zp cHNfZHNhX3NlbGZ0ZXN0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjA5MTY2MTMgKzAxMDAKLUBA IC0wLDAgKzEsMTkyIEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEg 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 PHN0cmluZy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRlIDxvcGVu c3NsL2RzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSA8b3BlbnNz bC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9i bi5oPgotKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wW10gPSB7Ci0rICAg IDB4YTgsIDB4NTMsIDB4NzgsIDB4ZDgsIDB4ZmQsIDB4M2YsIDB4OGQsIDB4NzIsIDB4ZWMsIDB4 NzQsIDB4MTgsIDB4MDgsCi0rICAgIDB4MGQsIDB4YTIsIDB4MTMsIDB4MTcsIDB4ZTQsIDB4M2Us IDB4YzQsIDB4YjYsIDB4MmIsIDB4YTgsIDB4YzgsIDB4NjIsCi0rICAgIDB4M2IsIDB4N2UsIDB4 NGQsIDB4MDQsIDB4NDQsIDB4MWQsIDB4ZDEsIDB4YTAsIDB4NjUsIDB4ODYsIDB4NjIsIDB4NTks Ci0rICAgIDB4NjQsIDB4OTMsIDB4Y2EsIDB4OGUsIDB4OWUsIDB4OGYsIDB4YmIsIDB4N2UsIDB4 MzQsIDB4YWEsIDB4ZGQsIDB4YjYsCi0rICAgIDB4MmUsIDB4NWQsIDB4NjcsIDB4YjYsIDB4ZDAs IDB4OWEsIDB4NmUsIDB4NjEsIDB4YjcsIDB4NjksIDB4ZTcsIDB4YzMsCi0rICAgIDB4NTIsIDB4 YWEsIDB4MmIsIDB4MTAsIDB4ZTIsIDB4MGMsIDB4YTAsIDB4NjMsIDB4NjksIDB4NjMsIDB4YjUs IDB4NTIsCi0rICAgIDB4M2UsIDB4ODYsIDB4NDcsIDB4MGQsIDB4ZWMsIDB4YmIsIDB4ZWQsIDB4 YTAsIDB4MjcsIDB4ZTcsIDB4OTcsIDB4ZTcsCi0rICAgIDB4YjYsIDB4NzYsIDB4MzUsIDB4ZDQs IDB4ZDQsIDB4OWMsIDB4MzAsIDB4NzAsIDB4MGUsIDB4NzQsIDB4YWYsIDB4OGEsCi0rICAgIDB4 MGYsIDB4ZjEsIDB4NTYsIDB4YTgsIDB4MDEsIDB4YWYsIDB4NTcsIDB4YTIsIDB4NmUsIDB4NzAs IDB4NzgsIDB4ZjEsCi0rICAgIDB4ZDgsIDB4MmYsIDB4NzQsIDB4OTAsIDB4OGUsIDB4Y2IsIDB4 NmQsIDB4MDcsIDB4ZTcsIDB4MGIsIDB4MzUsIDB4MDMsCi0rICAgIDB4ZWUsIDB4ZDksIDB4NGYs IDB4YTMsIDB4MmMsIDB4ZjEsIDB4N2EsIDB4N2YsIDB4YzMsIDB4ZDYsIDB4Y2YsIDB4NDAsCi0r ICAgIDB4ZGMsIDB4N2IsIDB4MDAsIDB4ODMsIDB4MGUsIDB4NmEsIDB4MjUsIDB4NjYsIDB4ZGMs IDB4MDcsIDB4M2UsIDB4MzQsCi0rICAgIDB4MzMsIDB4MTIsIDB4NTEsIDB4N2MsIDB4NmEsIDB4 YTUsIDB4MTUsIDB4MmIsIDB4NGIsIDB4ZmUsIDB4Y2QsIDB4MmUsCi0rICAgIDB4NTUsIDB4MWYs IDB4ZWUsIDB4MzQsIDB4NjMsIDB4MTgsIDB4YTEsIDB4NTMsIDB4NDIsIDB4M2MsIDB4OTksIDB4 NmIsCi0rICAgIDB4MGQsIDB4NWQsIDB4Y2IsIDB4OTEsIDB4MDIsIDB4YWUsIDB4ZGQsIDB4Mzgs IDB4NzksIDB4ODYsIDB4MTYsIDB4ZjEsCi0rICAgIDB4ZjEsIDB4ZTAsIDB4ZDYsIDB4YzQsIDB4 MDMsIDB4NTIsIDB4NWIsIDB4MWYsIDB4OWIsIDB4M2QsIDB4NGQsIDB4YzcsCi0rICAgIDB4NjYs IDB4ZGUsIDB4MmQsIDB4ZmMsIDB4NGEsIDB4NTYsIDB4ZDcsIDB4YjgsIDB4YmEsIDB4NTksIDB4 NjMsIDB4ZDYsCi0rICAgIDB4MGYsIDB4M2UsIDB4MTYsIDB4MzEsIDB4ODgsIDB4NzAsIDB4YWQs IDB4NDMsIDB4NjksIDB4NTIsIDB4ZTUsIDB4NTcsCi0rICAgIDB4NjUsIDB4MzcsIDB4NGUsIDB4 YWIsIDB4ODUsIDB4ZTgsIDB4ZWMsIDB4MTcsIDB4ZDYsIDB4YjksIDB4YTQsIDB4NTQsCi0rICAg IDB4N2IsIDB4OWIsIDB4NWYsIDB4MjcsIDB4NTIsIDB4ZjMsIDB4MTAsIDB4NWIsIDB4ZTgsIDB4 MDksIDB4YjIsIDB4M2EsCi0rICAgIDB4MmMsIDB4OGQsIDB4NzQsIDB4NjksIDB4ZGIsIDB4MDIs IDB4ZTIsIDB4NGQsIDB4NTksIDB4MjMsIDB4OTQsIDB4YTcsCi0rICAgIDB4ZGIsIDB4YTAsIDB4 NjksIDB4ZTkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIw NDhfcVtdID0gewotKyAgICAweGQyLCAweDc3LCAweDA0LCAweDRlLCAweDUwLCAweGY1LCAweGE0 LCAweGUzLCAweGY1LCAweDEwLCAweGE1LCAweDBhLAotKyAgICAweDBiLCAweDg0LCAweGZkLCAw eGZmLCAweGJjLCAweGEwLCAweDQ3LCAweGVkLCAweDI3LCAweDYwLCAweDIwLCAweDU2LAotKyAg ICAweDc0LCAweDQxLCAweGEwLCAweGE1Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBkc2FfdGVzdF8yMDQ4X2dbXSA9IHsKLSsgICAgMHgxMywgMHhkNywgMHg1NCwgMHhlMiwg MHgxZiwgMHhkMiwgMHg0MSwgMHg2NSwgMHg1ZCwgMHhhOCwgMHg5MSwgMHhjNSwKLSsgICAgMHgy MiwgMHhhNiwgMHg1YSwgMHg3MiwgMHhhOCwgMHg5YiwgMHhkYywgMHg2NCwgMHhlYywgMHg5Yiwg MHg1NCwgMHhhOCwKLSsgICAgMHgyMSwgMHhlZCwgMHg0YSwgMHg4OSwgMHg4YiwgMHg0OSwgMHgw ZSwgMHgwYywgMHg0ZiwgMHhjYiwgMHg3MiwgMHgxOSwKLSsgICAgMHgyYSwgMHg0YSwgMHgyMCwg MHhmNSwgMHg0MSwgMHhmMywgMHhmMiwgMHg5MiwgMHg1MywgMHg5OSwgMHhmMCwgMHhiYSwKLSsg ICAgMHhlYywgMHhmOSwgMHgyOSwgMHhhYSwgMHhmYiwgMHhmNywgMHg5ZCwgMHhmZSwgMHg0Mywg MHgzMiwgMHgzOSwgMHgzYiwKLSsgICAgMHgzMiwgMHhjZCwgMHgyZSwgMHgyZiwgMHhjZiwgMHgy NywgMHgyZiwgMHgzMiwgMHhhNiwgMHgyNywgMHg0MywgMHg0YSwKLSsgICAgMHgwZCwgMHhmMiwg MHg0MiwgMHhiNywgMHg1YiwgMHg0MSwgMHg0ZCwgMHhmMywgMHg3MiwgMHgxMiwgMHgxZSwgMHg1 MywKLSsgICAgMHhhNSwgMHg1MywgMHhmMiwgMHgyMiwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMCwg MHhmMCwgMHgxNiwgMHg0OCwgMHg1YiwKLSsgICAgMHg2YiwgMHhkMCwgMHg4OSwgMHg4NCwgMHg1 MSwgMHg4MCwgMHgxZCwgMHhjZCwgMHg4ZCwgMHhlNiwgMHg0YywgMHhkNSwKLSsgICAgMHgzNiwg MHg1NiwgMHg5NiwgMHhmZiwgMHhjNSwgMHgzMiwgMHhkNSwgMHgyOCwgMHhjNSwgMHgwNiwgMHg2 MiwgMHgwYSwKLSsgICAgMHg5NCwgMHgyYSwgMHgwMywgMHgwNSwgMHgwNCwgMHg2ZCwgMHg4Ziwg MHgxOCwgMHg3NiwgMHgzNCwgMHgxZiwgMHgxZSwKLSsgICAgMHg1NywgMHgwYiwgMHhjMywgMHg5 NywgMHg0YiwgMHhhNiwgMHhiOSwgMHhhNCwgMHgzOCwgMHhlOSwgMHg3MCwgMHgyMywKLSsgICAg MHgwMiwgMHhhMiwgMHhlNiwgMHhlNiwgMHg3YiwgMHhmZCwgMHgwNiwgMHhkMywgMHgyYiwgMHhj NiwgMHg3OSwgMHg5NiwKLSsgICAgMHgyMiwgMHg3MSwgMHhkNywgMHhiNCwgMHgwYywgMHhkNywg MHgyZiwgMHgzOCwgMHg2ZSwgMHg2NCwgMHhlMCwgMHhkNywKLSsgICAgMHhlZiwgMHg4NiwgMHhj YSwgMHg4YywgMHhhNSwgMHhkMSwgMHg0MiwgMHgyOCwgMHhkYywgMHgyYSwgMHg0ZiwgMHgxNiwK LSsgICAgMHhlMywgMHgxOCwgMHg5OCwgMHg4NiwgMHhiNSwgMHg5OSwgMHgwNiwgMHg3NCwgMHhm NCwgMHgyMCwgMHgwZiwgMHgzYSwKLSsgICAgMHg0YywgMHhmNiwgMHg1YSwgMHgzZiwgMHgwZCwg MHhkYiwgMHhhMSwgMHhmYSwgMHg2NywgMHgyZCwgMHhmZiwgMHgyZiwKLSsgICAgMHg1ZSwgMHgx NCwgMHgzZCwgMHgxMCwgMHhlNCwgMHhlOSwgMHg3YSwgMHhlOCwgMHg0ZiwgMHg2ZCwgMHhhMCwg MHg5NSwKLSsgICAgMHgzNSwgMHhkNSwgMHhiOSwgMHhkZiwgMHgyNSwgMHg5MSwgMHg4MSwgMHhh NywgMHg5YiwgMHg2MywgMHhiMCwgMHg2OSwKLSsgICAgMHhlOSwgMHg0OSwgMHg5NywgMHgyYiwg MHgwMiwgMHhiYSwgMHgzNiwgMHhiMywgMHg1OCwgMHg2YSwgMHhhYiwgMHg3ZSwKLSsgICAgMHg0 NSwgMHhmMywgMHgyMiwgMHhmOCwgMHgyZSwgMHg0ZSwgMHg4NSwgMHhjYSwgMHgzYSwgMHhiOCwg MHg1NSwgMHg5MSwKLSsgICAgMHhiMywgMHhjMiwgMHhhOSwgMHg2NgotK307Ci0rCi0rc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wdWJfa2V5W10gPSB7Ci0rICAgIDB4 MjQsIDB4NTIsIDB4ZjMsIDB4Y2MsIDB4YmUsIDB4OWUsIDB4ZDUsIDB4Y2EsIDB4N2QsIDB4Yzcs IDB4NGMsIDB4NjAsCi0rICAgIDB4MmIsIDB4OTksIDB4MjIsIDB4NmUsIDB4OGYsIDB4MmYsIDB4 YWIsIDB4MzgsIDB4ZTcsIDB4ZDcsIDB4ZGQsIDB4ZmIsCi0rICAgIDB4NzUsIDB4NTMsIDB4OWIs IDB4MTcsIDB4MTUsIDB4NWUsIDB4OWYsIDB4Y2YsIDB4ZDEsIDB4YWIsIDB4YTUsIDB4NjQsCi0r ICAgIDB4ZWIsIDB4ODUsIDB4MzUsIDB4ZDgsIDB4MTIsIDB4YzksIDB4YzIsIDB4ZGMsIDB4Zjks IDB4NzIsIDB4ODQsIDB4NDQsCi0rICAgIDB4MWIsIDB4YzQsIDB4ODIsIDB4MjQsIDB4MzYsIDB4 MjQsIDB4YzcsIDB4ZjQsIDB4NTcsIDB4NTgsIDB4MGMsIDB4MWMsCi0rICAgIDB4MzgsIDB4YTUs IDB4N2MsIDB4NDYsIDB4YzQsIDB4NTcsIDB4MzksIDB4MjQsIDB4NzAsIDB4ZWQsIDB4YjUsIDB4 MmMsCi0rICAgIDB4YjUsIDB4YTYsIDB4ZTAsIDB4M2YsIDB4ZTYsIDB4MjgsIDB4N2IsIDB4YjYs IDB4ZjQsIDB4OWEsIDB4NDIsIDB4YTIsCi0rICAgIDB4MDYsIDB4NWEsIDB4MDUsIDB4NGYsIDB4 MDMsIDB4MDgsIDB4MzksIDB4ZGYsIDB4MWYsIDB4ZDMsIDB4MTQsIDB4OWMsCi0rICAgIDB4NGMs IDB4YTAsIDB4NTMsIDB4MWQsIDB4ZDgsIDB4Y2EsIDB4OGEsIDB4YWEsIDB4OWMsIDB4YzcsIDB4 MzMsIDB4NzEsCi0rICAgIDB4OTMsIDB4MzgsIDB4NzMsIDB4NDgsIDB4MzMsIDB4NjEsIDB4MTgs IDB4MjIsIDB4NDUsIDB4NDUsIDB4ZTgsIDB4OGMsCi0rICAgIDB4ODAsIDB4ZmYsIDB4ZDgsIDB4 NzYsIDB4NWQsIDB4NzQsIDB4MzYsIDB4MDMsIDB4MzMsIDB4Y2MsIDB4YWIsIDB4OTksCi0rICAg IDB4NzIsIDB4NzcsIDB4OWIsIDB4NjUsIDB4MjUsIDB4YTYsIDB4NWIsIDB4ZGQsIDB4MGQsIDB4 MTAsIDB4YzYsIDB4NzUsCi0rICAgIDB4YzEsIDB4MDksIDB4YmIsIDB4ZDMsIDB4ZTUsIDB4YmUs IDB4NGQsIDB4NzIsIDB4ZWYsIDB4NmUsIDB4YmEsIDB4NmUsCi0rICAgIDB4NDMsIDB4OGQsIDB4 NTIsIDB4MjYsIDB4MjMsIDB4N2QsIDB4YjgsIDB4ODgsIDB4MzcsIDB4OWMsIDB4NWYsIDB4Y2Ms Ci0rICAgIDB4NDcsIDB4YTMsIDB4ODQsIDB4N2YsIDB4ZjYsIDB4MzcsIDB4MTEsIDB4YmEsIDB4 ZWQsIDB4NmQsIDB4MDMsIDB4YWYsCi0rICAgIDB4ZTgsIDB4MWUsIDB4NjksIDB4NGEsIDB4NDEs IDB4M2IsIDB4NjgsIDB4MGIsIDB4ZDMsIDB4OGEsIDB4YjQsIDB4OTAsCi0rICAgIDB4M2YsIDB4 ODMsIDB4NzAsIDB4YTcsIDB4MDcsIDB4ZWYsIDB4NTUsIDB4MWQsIDB4NDksIDB4NDEsIDB4MDIs IDB4NmQsCi0rICAgIDB4OTUsIDB4NzksIDB4ZDYsIDB4OTEsIDB4ZGUsIDB4OGUsIDB4ZGEsIDB4 YTEsIDB4NjEsIDB4MDUsIDB4ZWIsIDB4OWQsCi0rICAgIDB4YmEsIDB4M2MsIDB4MmYsIDB4NGMs IDB4MWIsIDB4ZWMsIDB4NTAsIDB4ODIsIDB4NzUsIDB4YWEsIDB4MDIsIDB4MDcsCi0rICAgIDB4 ZTIsIDB4NTEsIDB4YjUsIDB4ZWMsIDB4Y2IsIDB4MjgsIDB4NmEsIDB4NGIsIDB4MDEsIDB4ZDQs IDB4NDksIDB4ZDMsCi0rICAgIDB4MGEsIDB4Y2IsIDB4NjcsIDB4MzcsIDB4MTcsIDB4YTAsIDB4 ZDIsIDB4ZmIsIDB4M2IsIDB4NTAsIDB4YzgsIDB4OTMsCi0rICAgIDB4ZjcsIDB4ZGEsIDB4YjEs IDB4NGYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhf cHJpdl9rZXlbXSA9IHsKLSsgICAgMHgwYywgMHg0YiwgMHgzMCwgMHg4OSwgMHhkMSwgMHhiOCwg MHg2MiwgMHhjYiwgMHgzYywgMHg0MywgMHg2NCwgMHg5MSwKLSsgICAgMHhmMCwgMHg5MSwgMHg1 NCwgMHg3MCwgMHhjNSwgMHgyNywgMHg5NiwgMHhlMywgMHhhYywgMHhiZSwgMHhlOCwgMHgwMCwK LSsgICAgMHhlYywgMHg1NSwgMHhmNiwgMHhjYwotK307Ci0rCi0rc3RhdGljIGludCBjb3JydXB0 X2RzYTsKLSsKLSt2b2lkIEZJUFNfY29ycnVwdF9kc2EoKQotK3sKLSsgICAgY29ycnVwdF9kc2Eg PSAxOwotK30KLSsKLStpbnQgRklQU19zZWxmdGVzdF9kc2EoKQotK3sKLSsgICAgRFNBICpkc2Eg PSBOVUxMOwotKyAgICBFVlBfUEtFWSAqcGsgPSBOVUxMOwotKyAgICBpbnQgcmV0ID0gMDsKLSsK LSsgICAgZHNhID0gRFNBX25ldygpOwotKwotKyAgICBpZiAoZHNhID09IE5VTEwpCi0rICAgICAg ICBnb3RvIGVycjsKLSsKLSsgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwLCBkc2Ff dGVzdF8yMDQ4KTsKLSsgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBxLCBkc2FfdGVz dF8yMDQ4KTsKLSsgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBnLCBkc2FfdGVzdF8y MDQ4KTsKLSsgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwdWJfa2V5LCBkc2FfdGVz dF8yMDQ4KTsKLSsgICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwcml2X2tleSwgZHNh X3Rlc3RfMjA0OCk7Ci0rCi0rICAgIGlmIChjb3JydXB0X2RzYSkKLSsgICAgICAgIEJOX3NldF9i aXQoZHNhLT5wdWJfa2V5LCAyMDQ3KTsKLSsKLSsgICAgaWYgKChwayA9IEVWUF9QS0VZX25ldygp KSA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIEVWUF9QS0VZX2Fzc2lnbl9E U0EocGssIGRzYSk7Ci0rCi0rICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBO VUxMLCAwLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBFVlBf c2hhMjU2KCksIDAsICJEU0EgU0hBMjU2IikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgcmV0 ID0gMTsKLSsKLSsgZXJyOgotKyAgICBpZiAocGspCi0rICAgICAgICBFVlBfUEtFWV9mcmVlKHBr KTsKLSsgICAgZWxzZSBpZiAoZHNhKQotKyAgICAgICAgRFNBX2ZyZWUoZHNhKTsKLSsgICAgcmV0 dXJuIHJldDsKLSt9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlw cy9maXBzX2VuYy5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYwot LS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMuZmlwcwkyMDE2LTAzLTAx IDE2OjMzOjA3LjYyMTkxNjYzNiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBz L2ZpcHNfZW5jLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjE5MTY2MzYgKzAxMDAKLUBAIC0wLDAg KzEsMTg5IEBACi0rLyogZmlwZS9ldnAvZmlwc19lbmMuYyAqLwotKy8qIENvcHlyaWdodCAoQykg MTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdodHMg cmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9u IHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICogVGhl IGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2Fw ZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFu ZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFwcGx5 IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBS U0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAg VGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlv biBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0aGF0 IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAotKyAq IENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdo dCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAqIElm IHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUg Z2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUg bGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBt ZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGlu ZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0r ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSsg KiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNl IG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tu b3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGlj IHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5j b20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYg dGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBj cnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5k b3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAqICAg IHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBh biBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsgKiBU SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAotKyAq IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK LSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICogT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFuZCBk aXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9y Ci0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRo aXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhl ciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGlj ZW5jZS5dCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLStjb25zdCBFVlBfQ0lQSEVSICpGSVBTX2dl dF9jaXBoZXJieW5pZChpbnQgbmlkKQotK3sKLSsgICAgc3dpdGNoIChuaWQpIHsKLSsgICAgY2Fz ZSBOSURfYWVzXzEyOF9jYmM6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY2JjKCk7Ci0r Ci0rICAgIGNhc2UgTklEX2Flc18xMjhfY2NtOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4 X2NjbSgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTI4X2NmYjE6Ci0rICAgICAgICByZXR1cm4g RVZQX2Flc18xMjhfY2ZiMSgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTI4X2NmYjEyODoKLSsg ICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9jZmIxMjgoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVz XzEyOF9jZmI4OgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2NmYjgoKTsKLSsKLSsgICAg Y2FzZSBOSURfYWVzXzEyOF9jdHI6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY3RyKCk7 Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xMjhfZWNiOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNf MTI4X2VjYigpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTI4X2djbToKLSsgICAgICAgIHJldHVy biBFVlBfYWVzXzEyOF9nY20oKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzEyOF9vZmIxMjg6Ci0r ICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfb2ZiKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18x MjhfeHRzOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X3h0cygpOwotKwotKyAgICBjYXNl IE5JRF9hZXNfMTkyX2NiYzoKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jYmMoKTsKLSsK LSsgICAgY2FzZSBOSURfYWVzXzE5Ml9jY206Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJf Y2NtKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJfY2ZiMToKLSsgICAgICAgIHJldHVybiBF VlBfYWVzXzE5Ml9jZmIxKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJfY2ZiMTI4OgotKyAg ICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2NmYjEyOCgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNf MTkyX2NmYjg6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfY2ZiOCgpOwotKwotKyAgICBj YXNlIE5JRF9hZXNfMTkyX2N0cjoKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jdHIoKTsK LSsKLSsgICAgY2FzZSBOSURfYWVzXzE5Ml9lY2I6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18x OTJfZWNiKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18xOTJfZ2NtOgotKyAgICAgICAgcmV0dXJu IEVWUF9hZXNfMTkyX2djbSgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMTkyX29mYjEyODoKLSsg ICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9vZmIoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzI1 Nl9jYmM6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY2JjKCk7Ci0rCi0rICAgIGNhc2Ug TklEX2Flc18yNTZfY2NtOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2NjbSgpOwotKwot KyAgICBjYXNlIE5JRF9hZXNfMjU2X2NmYjE6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZf Y2ZiMSgpOwotKwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X2NmYjEyODoKLSsgICAgICAgIHJldHVy biBFVlBfYWVzXzI1Nl9jZmIxMjgoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzI1Nl9jZmI4Ogot KyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2NmYjgoKTsKLSsKLSsgICAgY2FzZSBOSURfYWVz XzI1Nl9jdHI6Ci0rICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY3RyKCk7Ci0rCi0rICAgIGNh c2UgTklEX2Flc18yNTZfZWNiOgotKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2VjYigpOwot KwotKyAgICBjYXNlIE5JRF9hZXNfMjU2X2djbToKLSsgICAgICAgIHJldHVybiBFVlBfYWVzXzI1 Nl9nY20oKTsKLSsKLSsgICAgY2FzZSBOSURfYWVzXzI1Nl9vZmIxMjg6Ci0rICAgICAgICByZXR1 cm4gRVZQX2Flc18yNTZfb2ZiKCk7Ci0rCi0rICAgIGNhc2UgTklEX2Flc18yNTZfeHRzOgotKyAg ICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X3h0cygpOwotKwotKyAgICBjYXNlIE5JRF9kZXNfZWRl X2VjYjoKLSsgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZSgpOwotKwotKyAgICBjYXNlIE5JRF9k ZXNfZWRlM19lY2I6Ci0rICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGUzKCk7Ci0rCi0rICAgIGNh c2UgTklEX2Rlc19lZGUzX2NiYzoKLSsgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTNfY2JjKCk7 Ci0rCi0rICAgIGNhc2UgTklEX2Rlc19lZGUzX2NmYjE6Ci0rICAgICAgICByZXR1cm4gRVZQX2Rl c19lZGUzX2NmYjEoKTsKLSsKLSsgICAgY2FzZSBOSURfZGVzX2VkZTNfY2ZiNjQ6Ci0rICAgICAg ICByZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjY0KCk7Ci0rCi0rICAgIGNhc2UgTklEX2Rlc19lZGUz X2NmYjg6Ci0rICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjgoKTsKLSsKLSsgICAgY2Fz ZSBOSURfZGVzX2VkZTNfb2ZiNjQ6Ci0rICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGUzX29mYigp OwotKwotKyAgICBjYXNlIE5JRF9kZXNfZWRlX2NiYzoKLSsgICAgICAgIHJldHVybiBFVlBfZGVz X2VkZV9jYmMoKTsKLSsKLSsgICAgY2FzZSBOSURfZGVzX2VkZV9jZmI2NDoKLSsgICAgICAgIHJl dHVybiBFVlBfZGVzX2VkZV9jZmI2NCgpOwotKwotKyAgICBjYXNlIE5JRF9kZXNfZWRlX29mYjY0 OgotKyAgICAgICAgcmV0dXJuIEVWUF9kZXNfZWRlX29mYigpOwotKwotKyAgICBkZWZhdWx0Ogot KyAgICAgICAgcmV0dXJuIE5VTEw7Ci0rCi0rICAgIH0KLSt9Ci1kaWZmIC11cCBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vZmlwcy9maXBzLmguZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9m aXBzLmgKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzLmguZmlwcwkyMDE2LTAz LTAxIDE2OjMzOjA3LjYyMTkxNjYzNiArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9m aXBzL2ZpcHMuaAkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMTkxNjYzNiArMDEwMAotQEAgLTAsMCAr MSwyNzggQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3Bl blNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp bmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAg ICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1l bnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRp c3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICog ICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNT TCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3Rl IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlv ciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250 YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVj dHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wi Ci0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQg cHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4K LSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3Qg cmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhp cyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9q ZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9w ZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBP cGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElF RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1Q TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRI RSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZ LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlU RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICog TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK LSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9T U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8b3BlbnNz bC9vcGVuc3NsY29uZi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpbmNsdWRl IDxzdGRhcmcuaD4KLSsKLSsjaWZuZGVmIE9QRU5TU0xfRklQUwotKyMgZXJyb3IgRklQUyBpcyBk aXNhYmxlZC4KLSsjZW5kaWYKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rIyBpZmRlZiAg X19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjIGVuZGlmCi0rCi0rICAgIHN0cnVjdCBkc2Ff c3Q7Ci0rICAgIHN0cnVjdCByc2Ffc3Q7Ci0rICAgIHN0cnVjdCBldnBfcGtleV9zdDsKLSsgICAg c3RydWN0IGVudl9tZF9zdDsKLSsgICAgc3RydWN0IGVudl9tZF9jdHhfc3Q7Ci0rICAgIHN0cnVj dCBldnBfY2lwaGVyX3N0OwotKyAgICBzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3Q7Ci0rICAgIHN0 cnVjdCBkaF9tZXRob2Q7Ci0rICAgIHN0cnVjdCBDTUFDX0NUWF9zdDsKLSsgICAgc3RydWN0IGht YWNfY3R4X3N0OwotKwotKyAgICBpbnQgRklQU19tb2R1bGVfbW9kZV9zZXQoaW50IG9ub2ZmLCBj b25zdCBjaGFyICphdXRoKTsKLSsgICAgaW50IEZJUFNfbW9kdWxlX21vZGUodm9pZCk7Ci0rICAg IGNvbnN0IHZvaWQgKkZJUFNfcmFuZF9jaGVjayh2b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRl c3Qodm9pZCk7Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKLSsgICAgdm9p ZCBGSVBTX2NvcnJ1cHRfc2hhMSh2b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2 b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRlc3Rfc2hhMih2b2lkKTsKLSsgICAgdm9pZCBGSVBT X2NvcnJ1cHRfYWVzKHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQp OwotKyAgICBpbnQgRklQU19zZWxmdGVzdF9hZXNfZ2NtKHZvaWQpOwotKyAgICBpbnQgRklQU19z ZWxmdGVzdF9hZXNfeHRzKHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVzdF9hZXModm9pZCk7 Ci0rICAgIHZvaWQgRklQU19jb3JydXB0X2Rlcyh2b2lkKTsKLSsgICAgaW50IEZJUFNfc2VsZnRl c3RfZGVzKHZvaWQpOwotKyAgICB2b2lkIEZJUFNfY29ycnVwdF9yc2Eodm9pZCk7Ci0rICAgIHZv aWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCk7Ci0rICAgIGludCBGSVBTX3NlbGZ0ZXN0 X3JzYSh2b2lkKTsKLSsgICAgdm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOwotKyAgICB2b2lk IEZJUFNfY29ycnVwdF9kc2Ffa2V5Z2VuKHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVzdF9k c2Eodm9pZCk7Ci0rICAgIHZvaWQgRklQU19jb3JydXB0X3JuZyh2b2lkKTsKLSsgICAgdm9pZCBG SVBTX3JuZ19zdGljayh2b2lkKTsKLSsgICAgdm9pZCBGSVBTX3g5MzFfc3RpY2soaW50IG9ub2Zm KTsKLSsgICAgdm9pZCBGSVBTX2RyYmdfc3RpY2soaW50IG9ub2ZmKTsKLSsgICAgaW50IEZJUFNf c2VsZnRlc3Rfcm5nKHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVzdF94OTMxKHZvaWQpOwot KyAgICBpbnQgRklQU19zZWxmdGVzdF9obWFjKHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVz dF9kcmJnKHZvaWQpOwotKyAgICBpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKTsKLSsg ICAgaW50IEZJUFNfc2VsZnRlc3RfY21hYyh2b2lkKTsKLSsKLSsgICAgdm9pZCBGSVBTX2dldF90 aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cik7Ci0rCi0rIyBk ZWZpbmUgRklQU19FUlJPUl9JR05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5F X18sIFwKLSsgICAgICAgICAgICAgICAgYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxn b3JpdGhtIGVycm9yIGlnbm9yZWQiKTsKLSsKLSsgICAgaW50IGZpcHNfcGtleV9zaWduYXR1cmVf dGVzdChzdHJ1Y3QgZXZwX3BrZXlfc3QgKnBrZXksCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwKLSsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2F0bGVuLAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2Vz dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWRfZmxh Z3MsIGNvbnN0IGNoYXIgKmZhaWxfc3RyKTsKLSsKLSsgICAgaW50IGZpcHNfY2lwaGVyX3Rlc3Qo c3RydWN0IGV2cF9jaXBoZXJfY3R4X3N0ICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpjaXBoZXIsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnBsYWludGV4dCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqY2lwaGVydGV4dCwgaW50IGxlbik7Ci0rCi0rICAgIHZvaWQg Zmlwc19zZXRfc2VsZnRlc3RfZmFpbCh2b2lkKTsKLSsKLSsgICAgY29uc3Qgc3RydWN0IGVudl9t ZF9zdCAqRklQU19nZXRfZGlnZXN0YnluaWQoaW50IG5pZCk7Ci0rCi0rICAgIGNvbnN0IHN0cnVj dCBldnBfY2lwaGVyX3N0ICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKLSsKLSsvKiBC RUdJTiBFUlJPUiBDT0RFUyAqLwotKy8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2Vu ZXJhdGVkIGJ5IHRoZSBzY3JpcHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCi0rICogbWFkZSBhZnRl ciB0aGlzIHBvaW50IG1heSBiZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBy dW4uCi0rICovCi0rICAgIHZvaWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpOwotKwotKy8q IEVycm9yIGNvZGVzIGZvciB0aGUgRklQUyBmdW5jdGlvbnMuICovCi0rCi0rLyogRnVuY3Rpb24g Y29kZXMuICovCi0rIyBkZWZpbmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TICAgICAgICAg ICAgICAgICAgICAgIDEwMAotKyMgZGVmaW5lIEZJUFNfRl9ESF9JTklUICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxNDgKLSsjIGRlZmluZSBGSVBTX0ZfRFJCR19SRVNFRUQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYyCi0rIyBkZWZpbmUgRklQU19GX0RTQV9CVUlM VElOX1BBUkFNR0VOICAgICAgICAgICAgICAgICAgICAgIDEwMQotKyMgZGVmaW5lIEZJUFNfRl9E U0FfQlVJTFRJTl9QQVJBTUdFTjIgICAgICAgICAgICAgICAgICAgICAxMDcKLSsjIGRlZmluZSBG SVBTX0ZfRFNBX0RPX1NJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyCi0rIyBk ZWZpbmUgRklQU19GX0RTQV9ET19WRVJJRlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEw MwotKyMgZGVmaW5lIEZJUFNfRl9FQ0RIX0NPTVBVVEVfS0VZICAgICAgICAgICAgICAgICAgICAg ICAgICAxNjMKLSsjIGRlZmluZSBGSVBTX0ZfRUNEU0FfRE9fU0lHTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTY0Ci0rIyBkZWZpbmUgRklQU19GX0VDRFNBX0RPX1ZFUklGWSAgICAgICAg ICAgICAgICAgICAgICAgICAgIDE2NQotKyMgZGVmaW5lIEZJUFNfRl9FQ19LRVlfR0VORVJBVEVf S0VZICAgICAgICAgICAgICAgICAgICAgICAxNjYKLSsjIGRlZmluZSBGSVBTX0ZfRVZQX0NJUEhF UklOSVRfRVggICAgICAgICAgICAgICAgICAgICAgICAgMTI0Ci0rIyBkZWZpbmUgRklQU19GX0VW UF9ESUdFU1RJTklUX0VYICAgICAgICAgICAgICAgICAgICAgICAgIDEyNQotKyMgZGVmaW5lIEZJ UFNfRl9GSVBTX0NIRUNLX0RTQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQKLSsjIGRl ZmluZSBGSVBTX0ZfRklQU19DSEVDS19EU0FfUFJORyAgICAgICAgICAgICAgICAgICAgICAgMTUx Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfRUMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDE0MgotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0VDX1BSTkcgICAgICAgICAgICAg ICAgICAgICAgICAxNTIKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklOR0VS UFJJTlQgICAgICAgICAgICAgMTA1Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEwNgotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNL X1JTQV9QUk5HICAgICAgICAgICAgICAgICAgICAgICAxNTAKLSsjIGRlZmluZSBGSVBTX0ZfRklQ U19DSVBIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYwCi0rIyBkZWZpbmUgRklQ U19GX0ZJUFNfQ0lQSEVSSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MwotKyMgZGVm aW5lIEZJUFNfRl9GSVBTX0NJUEhFUl9DVFhfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAxNjEK LSsjIGRlZmluZSBGSVBTX0ZfRklQU19ESUdFU1RGSU5BTCAgICAgICAgICAgICAgICAgICAgICAg ICAgMTU4Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfRElHRVNUSU5JVCAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEyOAotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVFVQREFURSAgICAgICAg ICAgICAgICAgICAgICAgICAxNTkKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0JZVEVTICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTMxCi0rIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19D SEVDSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NgotKyMgZGVmaW5lIEZJUFNfRl9GSVBT X0RSQkdfQ1BSTkdfVEVTVCAgICAgICAgICAgICAgICAgICAgICAxMzIKLSsjIGRlZmluZSBGSVBT X0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLICAgICAgICAgICAgICAgICAgICAgMTM2Ci0rIyBkZWZp bmUgRklQU19GX0ZJUFNfRFJCR19HRU5FUkFURSAgICAgICAgICAgICAgICAgICAgICAgIDEzNAot KyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxMzUKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFICAgICAgICAgICAg ICAgICAgICAgMTM4Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19ORVcgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEzOQotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfUkVTRUVEICAg ICAgICAgICAgICAgICAgICAgICAgICAxNDAKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX1NJ TkdMRV9LQVQgICAgICAgICAgICAgICAgICAgICAgMTQxCi0rIyBkZWZpbmUgRklQU19GX0ZJUFNf RFNBX0NIRUNLICAgICAgICAgICAvKiB1bnVzZWQgKi8gICAgIDEwNwotKyMgZGVmaW5lIEZJUFNf Rl9GSVBTX0RTQV9TSUdOX0RJR0VTVCAgICAgICAgICAgICAgICAgICAgICAxNTQKLSsjIGRlZmlu ZSBGSVBTX0ZfRklQU19EU0FfVkVSSUZZX0RJR0VTVCAgICAgICAgICAgICAgICAgICAgMTU1Ci0r IyBkZWZpbmUgRklQU19GX0ZJUFNfR0VUX0VOVFJPUFkgICAgICAgICAgICAgICAgICAgICAgICAg IDE0NwotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX01PREVfU0VUICAgICAgICAgICAgLyogdW51c2Vk ICovICAgICAxMDgKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQgICAgICAg ICAgICAgICAgICAgICAgMTA4Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVf VEVTVCAgICAgICAgICAgICAgICAgIDEwOQotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfQURE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzcKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19S QU5EX0JZVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgMTIyCi0rIyBkZWZpbmUgRklQU19G X0ZJUFNfUkFORF9QU0VVRE9fQllURVMgICAgICAgICAgICAgICAgICAgIDE2NwotKyMgZGVmaW5l IEZJUFNfRl9GSVBTX1JBTkRfU0VFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjgKLSsj IGRlZmluZSBGSVBTX0ZfRklQU19SQU5EX1NFVF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAg MTI2Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9TVEFUVVMgICAgICAgICAgICAgICAgICAg ICAgICAgIDEyNwotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JTQV9TSUdOX0RJR0VTVCAgICAgICAg ICAgICAgICAgICAgICAxNTYKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19SU0FfVkVSSUZZX0RJR0VT VCAgICAgICAgICAgICAgICAgICAgMTU3Ci0rIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1Rf QUVTICAgICAgICAgICAgICAgICAgICAgICAgIDExMAotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NF TEZURVNUX0FFU19DQ00gICAgICAgICAgICAgICAgICAgICAxNDUKLSsjIGRlZmluZSBGSVBTX0Zf RklQU19TRUxGVEVTVF9BRVNfR0NNICAgICAgICAgICAgICAgICAgICAgMTI5Ci0rIyBkZWZpbmUg RklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX1hUUyAgICAgICAgICAgICAgICAgICAgIDE0NAotKyMg ZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0NNQUMgICAgICAgICAgICAgICAgICAgICAgICAx MzAKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ERVMgICAgICAgICAgICAgICAgICAg ICAgICAgMTExCi0rIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBICAgICAgICAgICAg ICAgICAgICAgICAgIDExMgotKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0VDRFNBICAg ICAgICAgICAgICAgICAgICAgICAxMzMKLSsjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9I TUFDICAgICAgICAgICAgICAgICAgICAgICAgMTEzCi0rIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VM RlRFU1RfUk5HICAgICAgICAvKiB1bnVzZWQgKi8gICAgIDExNAotKyMgZGVmaW5lIEZJUFNfRl9G SVBTX1NFTEZURVNUX1NIQTEgICAgICAgICAgICAgICAgICAgICAgICAxMTUKLSsjIGRlZmluZSBG SVBTX0ZfRklQU19TRUxGVEVTVF9YOTMxICAgICAgICAgICAgICAgICAgICAgICAgMTE0Ci0rIyBk ZWZpbmUgRklQU19GX0ZJUFNfU0VUX1BSTkdfS0VZICAgICAgICAgICAgICAgICAgICAgICAgIDE1 MwotKyMgZGVmaW5lIEZJUFNfRl9IQVNIX0ZJTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxMjMKLSsjIGRlZmluZSBGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOICAgICAgICAgICAg ICAgICAgICAgICAgMTE2Ci0rIyBkZWZpbmUgRklQU19GX1JTQV9FQVlfSU5JVCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDE0OQotKyMgZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVf REVDUllQVCAgICAgICAgICAgICAgICAgICAxMTcKLSsjIGRlZmluZSBGSVBTX0ZfUlNBX0VBWV9Q UklWQVRFX0VOQ1JZUFQgICAgICAgICAgICAgICAgICAgMTE4Ci0rIyBkZWZpbmUgRklQU19GX1JT QV9FQVlfUFVCTElDX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgIDExOQotKyMgZGVmaW5lIEZJ UFNfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBUICAgICAgICAgICAgICAgICAgICAxMjAKLSsjIGRl ZmluZSBGSVBTX0ZfUlNBX1g5MzFfR0VORVJBVEVfS0VZX0VYICAgICAgICAgICAgICAgICAgMTIx Ci0rIyBkZWZpbmUgRklQU19GX1NTTEVBWV9SQU5EX0JZVEVTICAgICAgICAvKiB1bnVzZWQgKi8g ICAgIDEyMgotKwotKy8qIFJlYXNvbiBjb2Rlcy4gKi8KLSsjIGRlZmluZSBGSVBTX1JfQURESVRJ T05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgMTUwCi0rIyBkZWZpbmUgRklQU19S X0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkcgICAgICAgICAgICAgICAgIDEyNQotKyMgZGVmaW5l IEZJUFNfUl9BTFJFQURZX0lOU1RBTlRJQVRFRCAgICAgICAgICAgICAgICAgICAgICAxMzQKLSsj IGRlZmluZSBGSVBTX1JfQVVUSEVOVElDQVRJT05fRkFJTFVSRSAgICAgICAgICAgICAgICAgICAg MTUxCi0rIyBkZWZpbmUgRklQU19SX0NBTk5PVF9SRUFEX0VYRSAgICAgICAgICAvKiB1bnVzZWQg Ki8gICAgIDEwMwotKyMgZGVmaW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNUICAgLyog dW51c2VkICovICAgICAxMDQKLSsjIGRlZmluZSBGSVBTX1JfQ09OVFJBRElDVElOR19FVklERU5D RSAgICAgICAgICAgICAgICAgICAgMTE0Ci0rIyBkZWZpbmUgRklQU19SX0RSQkdfTk9UX0lOSVRJ QUxJU0VEICAgICAgICAgICAgICAgICAgICAgIDE1MgotKyMgZGVmaW5lIEZJUFNfUl9EUkJHX1NU VUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDMKLSsjIGRlZmluZSBGSVBTX1Jf RU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgICAgICAgICAgMTA0Ci0rIyBkZWZpbmUg RklQU19SX0VOVFJPUFlfTk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEICAgICAgICAgIDEwNQotKyMg ZGVmaW5lIEZJUFNfUl9FTlRST1BZX1NPVVJDRV9TVFVDSyAgICAgICAgICAgICAgICAgICAgICAx NDIKLSsjIGRlZmluZSBGSVBTX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcgICAgICAgICAgICAg ICAgICAgMTE1Ci0rIyBkZWZpbmUgRklQU19SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRyAgICAg ICAgICAgICAgICAgIDEyNwotKyMgZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElU SU9OQUxfSU5QVVQgICAgICAgICAxMjQKLSsjIGRlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklO R19FTlRST1BZICAgICAgICAgICAgICAgICAgMTIyCi0rIyBkZWZpbmUgRklQU19SX0VSUk9SX1JF VFJJRVZJTkdfTk9OQ0UgICAgICAgICAgICAgICAgICAgIDE0MAotKyMgZGVmaW5lIEZJUFNfUl9F WEVfRElHRVNUX0RPRVNfTk9UX01BVENIICAgLyogdW51c2VkICovICAxMDUKLSsjIGRlZmluZSBG SVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0ggICAgICAgICAgICAgICAgMTEwCi0rIyBk ZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQg MTExCi0rIyBkZWZpbmUgRklQU19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRf QUxJQVNJTkcgMTEyCi0rIyBkZWZpbmUgRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCAgICAg ICAgICAgICAgICAgICAgIDEwMgotKyMgZGVmaW5lIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxF RCAgICAgICAgICAgICAgICAgICAgICAxMDYKLSsjIGRlZmluZSBGSVBTX1JfRlVOQ1RJT05fRVJS T1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE2Ci0rIyBkZWZpbmUgRklQU19SX0dFTkVS QVRFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNwotKyMgZGVmaW5lIEZJUFNf Ul9HRU5FUkFURV9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgICAgICAgICAxMTgKLSsjIGRlZmlu ZSBGSVBTX1JfSU5TVEFOVElBVEVfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgMTE5Ci0r IyBkZWZpbmUgRklQU19SX0lOU1VGRklDSUVOVF9TRUNVUklUWV9TVFJFTkdUSCAgICAgICAgICAg IDEyMAotKyMgZGVmaW5lIEZJUFNfUl9JTlRFUk5BTF9FUlJPUiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxMjEKLSsjIGRlZmluZSBGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIICAgICAgICAg ICAgICAgICAgICAgICAgMTA5Ci0rIyBkZWZpbmUgRklQU19SX0lOVkFMSURfUEFSQU1FVEVSUyAg ICAgICAgICAgICAgICAgICAgICAgIDE0NAotKyMgZGVmaW5lIEZJUFNfUl9JTl9FUlJPUl9TVEFU RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjMKLSsjIGRlZmluZSBGSVBTX1JfS0VZX1RP T19TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTA4Ci0rIyBkZWZpbmUgRklQU19S X05PTkNFX0VSUk9SX1VOREVURUNURUQgICAgICAgICAgICAgICAgICAgIDE0OQotKyMgZGVmaW5l IEZJUFNfUl9OT05fRklQU19NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKLSsj IGRlZmluZSBGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAg MTQ1Ci0rIyBkZWZpbmUgRklQU19SX05PUFJfVEVTVDJfRkFJTFVSRSAgICAgICAgICAgICAgICAg ICAgICAgIDE0NgotKyMgZGVmaW5lIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEICAgICAgICAgICAg ICAgICAgICAgICAgICAxMjYKLSsjIGRlZmluZSBGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQg ICAgICAgICAgICAgICAgICAgICAgMTA3Ci0rIyBkZWZpbmUgRklQU19SX1BFUlNPTkFMSVNBVElP Tl9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgIDEyOAotKyMgZGVmaW5lIEZJUFNfUl9QRVJTT05B TElTQVRJT05fU1RSSU5HX1RPT19MT05HICAgICAgICAgICAxMjkKLSsjIGRlZmluZSBGSVBTX1Jf UFJOR19TVFJFTkdUSF9UT09fTE9XICAgICAgICAgICAgICAgICAgICAgMTQzCi0rIyBkZWZpbmUg RklQU19SX1BSX1RFU1QxX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NwotKyMg ZGVmaW5lIEZJUFNfUl9QUl9URVNUMl9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAx NDgKLSsjIGRlZmluZSBGSVBTX1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCAgICAg ICAgICAgMTMwCi0rIyBkZWZpbmUgRklQU19SX1JFUVVFU1RfVE9PX0xBUkdFX0ZPUl9EUkJHICAg ICAgICAgICAgICAgIDEzMQotKyMgZGVmaW5lIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUiAg ICAgICAgICAgICAgICAgICAgICAxMzIKLSsjIGRlZmluZSBGSVBTX1JfUkVTRUVEX0VSUk9SICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMzCi0rIyBkZWZpbmUgRklQU19SX1JTQV9ERUNS WVBUX0VSUk9SICAgICAgICAvKiB1bnVzZWQgKi8gICAgIDExNQotKyMgZGVmaW5lIEZJUFNfUl9S U0FfRU5DUllQVF9FUlJPUiAgICAgICAgLyogdW51c2VkICovICAgICAxMTYKLSsjIGRlZmluZSBG SVBTX1JfU0VMRlRFU1RfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAxCi0rIyBk ZWZpbmUgRklQU19SX1NFTEZURVNUX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgIDEz NQotKyMgZGVmaW5lIEZJUFNfUl9TVFJFTkdUSF9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgICAg ICAgICAxMzYKLSsjIGRlZmluZSBGSVBTX1JfVEVTVF9GQUlMVVJFICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTE3Ci0rIyBkZWZpbmUgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IgICAg ICAgICAgICAgICAgICAgICAgIDE0MQotKyMgZGVmaW5lIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pF Uk9JU0VfRVJST1IgICAgICAgICAgICAgICAxMzgKLSsjIGRlZmluZSBGSVBTX1JfVU5TVVBQT1JU RURfRFJCR19UWVBFICAgICAgICAgICAgICAgICAgICAgMTM5Ci0rIyBkZWZpbmUgRklQU19SX1VO U1VQUE9SVEVEX1BMQVRGT1JNICAgICAgICAgICAgICAgICAgICAgIDExMwotKwotKyMgaWZkZWYg IF9fY3BsdXNwbHVzCi0rfQotKyMgZW5kaWYKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9maXBzL2ZpcHNfaG1hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlw dG8vZmlwcy9maXBzX2htYWNfc2VsZnRlc3QuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIx OTE2NjM2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3Nl bGZ0ZXN0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjE5MTY2MzYgKzAxMDAKLUBAIC0wLDAgKzEs MTM0IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5T U0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9m IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu IAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAg ZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50 aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNw bGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wg UHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBw cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFj dAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgot KyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHBy aW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0r ICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJl dGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMg cHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVj dAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVu c3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3Bl blNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg T3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExP U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0r ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS IElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJ QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGlu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMu aD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rdHlwZWRlZiBzdHJ1Y3QgewotKyAgICBjb25z dCBFVlBfTUQgKigqYWxnKSAodm9pZCk7Ci0rICAgIGNvbnN0IGNoYXIgKmtleSwgKml2OwotKyAg ICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV07Ci0rfSBITUFDX0tBVDsKLSsK LStzdGF0aWMgY29uc3QgSE1BQ19LQVQgdmVjdG9yW10gPSB7Ci0rICAgIHtFVlBfc2hhMSwKLSsg ICAgIC8qIGZyb20gaHR0cDovL2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5 OC9maXBzLTE5OGEucGRmICovCi0rICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKyAgICAg IlNhbXBsZSAjMiIsCi0rICAgICB7MHgwOSwgMHgyMiwgMHhkMywgMHg0MCwgMHg1ZiwgMHhhYSwg MHgzZCwgMHgxOSwKLSsgICAgICAweDRmLCAweDgyLCAweGE0LCAweDU4LCAweDMwLCAweDczLCAw eDdkLCAweDVjLAotKyAgICAgIDB4YzYsIDB4YzcsIDB4NWQsIDB4MjR9Ci0rICAgICB9LAotKyAg ICB7RVZQX3NoYTIyNCwKLSsgICAgIC8qIGp1c3Qga2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4u ICovCi0rICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAotKyAgICAgIlNhbXBsZSAjMiIsCi0r ICAgICB7MHhkZCwgMHhlZiwgMHgwYSwgMHg0MCwgMHhjYiwgMHg3ZCwgMHg1MCwgMHhmYiwKLSsg ICAgICAweDZlLCAweGU2LCAweGNlLCAweGExLCAweDIwLCAweGJhLCAweDI2LCAweGFhLAotKyAg ICAgIDB4MDgsIDB4ZjMsIDB4MDcsIDB4NzUsIDB4ODcsIDB4YjgsIDB4YWQsIDB4MWIsCi0rICAg ICAgMHg4YywgMHg4ZCwgMHgxMiwgMHhjN30KLSsgICAgIH0sCi0rICAgIHtFVlBfc2hhMjU2LAot KyAgICAgIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKLSsgICAgICJTYW1wbGUgIzIiLAotKyAgICAg ezB4YjgsIDB4ZjIsIDB4MGQsIDB4YjUsIDB4NDEsIDB4ZWEsIDB4NDMsIDB4MDksCi0rICAgICAg MHhjYSwgMHg0ZSwgMHhhOSwgMHgzOCwgMHgwYywgMHhkMCwgMHhlOCwgMHgzNCwKLSsgICAgICAw eGY3LCAweDFmLCAweGJlLCAweDkxLCAweDc0LCAweGEyLCAweDYxLCAweDM4LAotKyAgICAgIDB4 MGQsIDB4YzEsIDB4N2UsIDB4YWUsIDB4NmEsIDB4MzQsIDB4NTEsIDB4ZDl9Ci0rICAgICB9LAot KyAgICB7RVZQX3NoYTM4NCwKLSsgICAgICIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCi0rICAgICAi U2FtcGxlICMyIiwKLSsgICAgIHsweDA4LCAweGJjLCAweGIwLCAweGRhLCAweDQ5LCAweDFlLCAw eDg3LCAweGFkLAotKyAgICAgIDB4OWEsIDB4MWQsIDB4NmEsIDB4Y2UsIDB4MjMsIDB4YzUsIDB4 MGIsIDB4ZjYsCi0rICAgICAgMHhiNywgMHgxOCwgMHgwNiwgMHhhNSwgMHg3NywgMHhjZCwgMHg0 OSwgMHgwNCwKLSsgICAgICAweDg5LCAweGYxLCAweGU2LCAweDIzLCAweDQ0LCAweDUxLCAweDUx LCAweDlmLAotKyAgICAgIDB4ODUsIDB4NTYsIDB4ODAsIDB4NzksIDB4MGMsIDB4YmQsIDB4NGQs IDB4NTAsCi0rICAgICAgMHhhNCwgMHg1ZiwgMHgyOSwgMHhlMywgMHg5MywgMHhmMCwgMHhlOCwg MHg3Zn0KLSsgICAgIH0sCi0rICAgIHtFVlBfc2hhNTEyLAotKyAgICAgIjAxMjM0NTY3ODk6Ozw9 Pj9AQUJDIiwKLSsgICAgICJTYW1wbGUgIzIiLAotKyAgICAgezB4ODAsIDB4OWQsIDB4NDQsIDB4 MDUsIDB4N2MsIDB4NWIsIDB4OTUsIDB4NDEsCi0rICAgICAgMHgwNSwgMHhiZCwgMHgwNCwgMHgx MywgMHgxNiwgMHhkYiwgMHgwZiwgMHhhYywKLSsgICAgICAweDQ0LCAweGQ1LCAweGE0LCAweGQ1 LCAweGQwLCAweDg5LCAweDJiLCAweGQwLAotKyAgICAgIDB4NGUsIDB4ODYsIDB4NjQsIDB4MTIs IDB4YzAsIDB4OTAsIDB4NzcsIDB4NjgsCi0rICAgICAgMHhmMSwgMHg4NywgMHhiNywgMHg3Yywg MHg0ZiwgMHhhZSwgMHgyYywgMHgyZiwKLSsgICAgICAweDIxLCAweGE1LCAweGI1LCAweDY1LCAw eDlhLCAweDRmLCAweDRiLCAweGE3LAotKyAgICAgIDB4NDcsIDB4MDIsIDB4YTMsIDB4ZGUsIDB4 OWIsIDB4NTEsIDB4ZjEsIDB4NDUsCi0rICAgICAgMHhiZCwgMHg0ZiwgMHgyNSwgMHgyNywgMHg0 MiwgMHg5OCwgMHg5OSwgMHgwNX0KLSsgICAgIH0sCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVz dF9obWFjKCkKLSt7Ci0rICAgIGludCBuOwotKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOwotKyAg ICB1bnNpZ25lZCBjaGFyIG91dFtFVlBfTUFYX01EX1NJWkVdOwotKyAgICBjb25zdCBFVlBfTUQg Km1kOwotKyAgICBjb25zdCBITUFDX0tBVCAqdDsKLSsKLSsgICAgZm9yIChuID0gMCwgdCA9IHZl Y3RvcjsgbiA8IHNpemVvZih2ZWN0b3IpIC8gc2l6ZW9mKHZlY3RvclswXSk7IG4rKywgdCsrKSB7 Ci0rICAgICAgICBtZCA9ICgqdC0+YWxnKSAoKTsKLSsgICAgICAgIEhNQUMobWQsIHQtPmtleSwg c3RybGVuKHQtPmtleSksCi0rICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+ aXYsIHN0cmxlbih0LT5pdiksIG91dCwgJm91dGxlbik7Ci0rCi0rICAgICAgICBpZiAobWVtY21w KG91dCwgdC0+a2F2YWwsIG91dGxlbikpIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX1NFTEZURVNUX0hNQUMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgICAg IHJldHVybiAwOwotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIHJldHVybiAxOwotK30KLSsjZW5k aWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgKLS0tLSBvcGVuc3NsLTEuMC4y Zy9jcnlwdG8vZmlwcy9maXBzX2xvY2wuaC5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIxOTE2 NjM2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgJMjAx Ni0wMy0wMSAxNjozMzowNy42MjE5MTY2MzYgKzAxMDAKLUBAIC0wLDAgKzEsNzEgQEAKLSsvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlv biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot KyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAy LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl IGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24u Ci0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVy ZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv d2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3 YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0 aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICog NC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0 IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1p c3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3Bl bnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9t IHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1h eSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgot KyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJl ZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xs b3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9y IHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0r ICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1Qg YGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVT IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVS UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pF Q1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENB VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs Ci0rICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig T1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCi0rICoKLSsgKi8KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rIyBpZmRl ZiAgX19jcGx1c3BsdXMKLStleHRlcm4gIkMiIHsKLSsjIGVuZGlmCi0rCi0rIyBkZWZpbmUgRklQ U19NQVhfQ0lQSEVSX1RFU1RfU0laRSAgICAgICAzMgotKyMgZGVmaW5lIGZpcHNfbG9hZF9rZXlf Y29tcG9uZW50KGtleSwgY29tcCwgcHJlKSBcCi0rICAgICAgICBrZXktPmNvbXAgPSBCTl9iaW4y Ym4ocHJlIyNfIyNjb21wLCBzaXplb2YocHJlIyNfIyNjb21wKSwga2V5LT5jb21wKTsgXAotKyAg ICAgICAgaWYgKCFrZXktPmNvbXApIFwKLSsgICAgICAgICAgICAgICAgZ290byBlcnIKLSsKLSsj IGRlZmluZSBmaXBzX3Bvc3Rfc3RhcnRlZChpZCwgc3ViaWQsIGV4KSAxCi0rIyBkZWZpbmUgZmlw c19wb3N0X3N1Y2Nlc3MoaWQsIHN1YmlkLCBleCkgMQotKyMgZGVmaW5lIGZpcHNfcG9zdF9mYWls ZWQoaWQsIHN1YmlkLCBleCkgMQotKyMgZGVmaW5lIGZpcHNfcG9zdF9jb3JydXB0KGlkLCBzdWJp ZCwgZXgpIDEKLSsjIGRlZmluZSBmaXBzX3Bvc3Rfc3RhdHVzKCkgMQotKwotKyMgaWZkZWYgIF9f Y3BsdXNwbHVzCi0rfQotKyMgZW5kaWYKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2Zp cHNfbWQuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzCTIw MTYtMDMtMDEgMTY6MzM6MDcuNjIxOTE2NjM2ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL2ZpcHMvZmlwc19tZC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIxOTE2NjM2ICswMTAwCi1A QCAtMCwwICsxLDE0NCBAQAotKy8qIGZpcHMvZXZwL2ZpcHNfbWQuYyAqLwotKy8qIENvcHlyaWdo dCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVu dGF0aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0r ICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBO ZXRzY2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJj aWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAq IGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUg UkM0LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBj b2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3Ry aWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2Vw dCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAq IAotKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENv cHlyaWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgot KyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91 bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBv ZiB0aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4 dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24g KG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0 IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRh dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv bi4KLSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMg b3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9n cmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0 c29mdC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBv dXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJl IG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFu eSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAot KyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5j bHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAK LSsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFO RAotKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg Tk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1Ig U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0r ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNl IGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJz aW9uIG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBp LmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIg YW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJs aWMgTGljZW5jZS5dCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDE5 OTgtMjAwMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgot KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICoKLSsgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5 IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoKLSsgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKLSsgKiAgICBz b2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKLSsgKiAg ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNT TCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDov L3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xr aXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCi0rICogICAgZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv dXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Np b24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgotKyAq Ci0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBj YWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWly IG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9w ZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3 aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKLSsgKiAgICBhY2tub3dsZWRnbWVu dDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKLSsgKiBFWFBS RVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKLSsgKiBJVFMgQ09OVFJJQlVUT1JT IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0rICogU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU Ci0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig U0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICogU1RSSUNUIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotKyAqIEFSSVNJTkcgSU4g QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQK LSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0rICogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LSsgKgotKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkgRXJpYyBZb3VuZwotKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1 Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0KLSsgKiBIdWRzb24gKHRqaEBjcnlw dHNvZnQuY29tKS4KLSsgKgotKyAqLwotKwotKy8qIE1pbmltYWwgc3RhbmRhbG9uZSBGSVBTIHZl cnNpb25zIG9mIERpZ2VzdCBvcGVyYXRpb25zICovCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNB UEkKLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVkZSA8c3RyaW5nLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsKLStjb25z dCBFVlBfTUQgKkZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGludCBuaWQpCi0rewotKyAgICBzd2l0Y2gg KG5pZCkgewotKyAgICBjYXNlIE5JRF9zaGExOgotKyAgICAgICAgcmV0dXJuIEVWUF9zaGExKCk7 Ci0rCi0rICAgIGNhc2UgTklEX3NoYTIyNDoKLSsgICAgICAgIHJldHVybiBFVlBfc2hhMjI0KCk7 Ci0rCi0rICAgIGNhc2UgTklEX3NoYTI1NjoKLSsgICAgICAgIHJldHVybiBFVlBfc2hhMjU2KCk7 Ci0rCi0rICAgIGNhc2UgTklEX3NoYTM4NDoKLSsgICAgICAgIHJldHVybiBFVlBfc2hhMzg0KCk7 Ci0rCi0rICAgIGNhc2UgTklEX3NoYTUxMjoKLSsgICAgICAgIHJldHVybiBFVlBfc2hhNTEyKCk7 Ci0rCi0rICAgIGRlZmF1bHQ6Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgfQotK30KLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMgb3BlbnNz bC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlw dG8vZmlwcy9maXBzX3Bvc3QuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIxOTE2NjM2ICsw MTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMJMjAxNi0wMy0w MSAxNjozMzowNy42MjE5MTY2MzYgKzAxMDAKLUBAIC0wLDAgKzEsMjAxIEBACi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy 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 QUdFLgotKyAqCi0rICovCi0rCi0rI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKLSsKLSsjaW5jbHVk ZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2lu Y2x1ZGUgPG9wZW5zc2wvYmlvLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgotKyNpbmNs dWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgotKyNpbmNsdWRl IDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8bGltaXRzLmg+Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKwotKy8qIFBvd2VyIG9uIHNlbGYgdGVzdCAoUE9TVCkgc3VwcG9ydCBmdW5jdGlvbnMgKi8K LSsKLSsjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyMgaW5jbHVkZSAiZmlwc19sb2NsLmgi Ci0rCi0rLyogUnVuIGFsbCBzZWxmdGVzdHMgKi8KLStpbnQgRklQU19zZWxmdGVzdCh2b2lkKQot K3sKLSsgICAgaW50IHJ2ID0gMTsKLSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2RyYmcoKSkKLSsg ICAgICAgIHJ2ID0gMDsKLSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X3g5MzEoKSkKLSsgICAgICAg IHJ2ID0gMDsKLSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X3NoYTEoKSkKLSsgICAgICAgIHJ2ID0g MDsKLSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X3NoYTIoKSkKLSsgICAgICAgIHJ2ID0gMDsKLSsg ICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2htYWMoKSkKLSsgICAgICAgIHJ2ID0gMDsKLSsgICAgaWYg KCFGSVBTX3NlbGZ0ZXN0X2NtYWMoKSkKLSsgICAgICAgIHJ2ID0gMDsKLSsgICAgaWYgKCFGSVBT X3NlbGZ0ZXN0X2FlcygpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAoIUZJUFNfc2VsZnRl c3RfYWVzX2NjbSgpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAoIUZJUFNfc2VsZnRlc3Rf YWVzX2djbSgpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfYWVz X3h0cygpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfZGVzKCkp Ci0rICAgICAgICBydiA9IDA7Ci0rICAgIGlmICghRklQU19zZWxmdGVzdF9yc2EoKSkKLSsgICAg ICAgIHJ2ID0gMDsKLSsgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2RzYSgpKQotKyAgICAgICAgcnYg PSAwOwotKyAgICByZXR1cm4gcnY7Ci0rfQotKwotKy8qIEdlbmVyYWxpemVkIHB1YmxpYyBrZXkg dGVzdCByb3V0aW5lLiBTaWducyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKLSsgKiBzdXBwbGllZCBp biB0YnMgdXNpbmcgbWVzYWdlIGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24gZGlnZXN0Ci0r ICogZmxhZ3MgbWRfZmxhZ3MuIElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQg d2lsbAotKyAqIGFkZGl0aW9uYWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEg a25vd24gYW5zd2VyIHRlc3QKLSsgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMgdXNlZCBmb3Ig aWRlbnRpZmljYXRpb24gcHVycG9zZXMgaW4gY2FzZQotKyAqIG9mIGZhaWx1cmUuIElmICJwa2V5 IiBpcyBOVUxMIGp1c3QgcGVyZm9ybSBhIG1lc3NhZ2UgZGlnZXN0IGNoZWNrLgotKyAqLwotKwot K2ludCBmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4s Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXQs IHVuc2lnbmVkIGludCBrYXRsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBFVlBfTUQgKmRpZ2VzdCwgdW5zaWduZWQgaW50IG1kX2ZsYWdzLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmFpbF9zdHIpCi0rewotKyAgICBpbnQgcmV0ID0g MDsKLSsgICAgdW5zaWduZWQgY2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNpZ3RtcDsKLSsgICAg dW5zaWduZWQgaW50IHNpZ2xlbjsKLSsgICAgRVZQX01EX0NUWCBtY3R4OwotKyAgICBFVlBfTURf Q1RYX2luaXQoJm1jdHgpOwotKwotKyAgICBpZiAoZGlnZXN0ID09IE5VTEwpCi0rICAgICAgICBk aWdlc3QgPSBFVlBfc2hhMjU2KCk7Ci0rCi0rICAgIGlmICgocGtleS0+dHlwZSA9PSBFVlBfUEtF WV9SU0EpCi0rICAgICAgICAmJiAoUlNBX3NpemUocGtleS0+cGtleS5yc2EpID4gc2l6ZW9mKHNp Z3RtcCkpKSB7Ci0rICAgICAgICBzaWcgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShwa2V5LT5w a2V5LnJzYSkpOwotKyAgICAgICAgaWYgKCFzaWcpIHsKLSsgICAgICAgICAgICBGSVBTZXJyKEZJ UFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKLSsg ICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0KLSsgICAgfQotKwotKyAgICBpZiAodGJz bGVuID09IC0xKQotKyAgICAgICAgdGJzbGVuID0gc3RybGVuKChjaGFyICopdGJzKTsKLSsKLSsg ICAgaWYgKG1kX2ZsYWdzKQotKyAgICAgICAgRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1jdHgsIG1k X2ZsYWdzKTsKLSsKLSsgICAgaWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVM TCkpCi0rICAgICAgICBnb3RvIGVycm9yOwotKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4 LCB0YnMsIHRic2xlbikpCi0rICAgICAgICBnb3RvIGVycm9yOwotKyAgICBpZiAoIUVWUF9TaWdu RmluYWwoJm1jdHgsIHNpZywgJnNpZ2xlbiwgcGtleSkpCi0rICAgICAgICBnb3RvIGVycm9yOwot KwotKyAgICBpZiAoa2F0ICYmICgoc2lnbGVuICE9IGthdGxlbikgfHwgbWVtY21wKGthdCwgc2ln LCBrYXRsZW4pKSkKLSsgICAgICAgIGdvdG8gZXJyb3I7Ci0rCi0rICAgIGlmICghRVZQX1Zlcmlm eUluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCi0rICAgICAgICBnb3RvIGVycm9yOwotKyAg ICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKLSsgICAgICAgIGdv dG8gZXJyb3I7Ci0rICAgIHJldCA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnLCBzaWdsZW4s IHBrZXkpOwotKwotKyBlcnJvcjoKLSsgICAgaWYgKHNpZyAhPSBzaWd0bXApCi0rICAgICAgICBP UEVOU1NMX2ZyZWUoc2lnKTsKLSsgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKLSsgICAg aWYgKHJldCAhPSAxKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFU VVJFX1RFU1QsIEZJUFNfUl9URVNUX0ZBSUxVUkUpOwotKyAgICAgICAgaWYgKGZhaWxfc3RyKQot KyAgICAgICAgICAgIEVSUl9hZGRfZXJyb3JfZGF0YSgyLCAiVHlwZT0iLCBmYWlsX3N0cik7Ci0r ICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rLyogR2Vu ZXJhbGl6ZWQgc3ltbWV0cmljIGNpcGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5cHQgZGF0YSwgdmVy aWZ5IHJlc3VsdAotKyAqIGFnYWluc3Qga25vd24gYW5zd2VyLCBkZWNyeXB0IGFuZCBjb21wYXJl IHdpdGggb3JpZ2luYWwgcGxhaW50ZXh0LgotKyAqLwotKwotK2ludCBmaXBzX2NpcGhlcl90ZXN0 KEVWUF9DSVBIRVJfQ1RYICpjdHgsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwKLSsgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCi0rICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCi0rICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LAotKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsIGludCBsZW4pCi0rewotKyAgICB1bnNpZ25lZCBj aGFyIHBsdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwotKyAgICB1bnNpZ25lZCBjaGFy IGNpdG1wW0ZJUFNfTUFYX0NJUEhFUl9URVNUX1NJWkVdOwotKwotKyAgICBPUEVOU1NMX2Fzc2Vy dChsZW4gPD0gRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rICAgIG1lbXNldChwbHRtcCwg MCwgRklQU19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rICAgIG1lbXNldChjaXRtcCwgMCwgRklQ U19NQVhfQ0lQSEVSX1RFU1RfU0laRSk7Ci0rCi0rICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChj dHgsIGNpcGhlciwgTlVMTCwga2V5LCBpdiwgMSkgPD0gMCkKLSsgICAgICAgIHJldHVybiAwOwot KyAgICBpZiAoRVZQX0NpcGhlcihjdHgsIGNpdG1wLCBwbGFpbnRleHQsIGxlbikgPD0gMCkKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICBpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0ZXh0LCBsZW4p KQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNp cGhlciwgTlVMTCwga2V5LCBpdiwgMCkgPD0gMCkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBp ZiAoRVZQX0NpcGhlcihjdHgsIHBsdG1wLCBjaXRtcCwgbGVuKSA8PSAwKQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAocGx0bXAsIHBsYWludGV4dCwgbGVuKSkKLSsgICAgICAg IHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0 by9maXBzL2ZpcHNfcmFuZC5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19y YW5kLmMuZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMjkxNjY1OSArMDEwMAotKysrIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIy OTE2NjU5ICswMTAwCi1AQCAtMCwwICsxLDQyOCBAQAotKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29w eXJpZ2h0IChjKSAyMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgot KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwot KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25v d2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQot KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK LSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAq LwotKwotKy8qCi0rICogVGhpcyBpcyBhIEZJUFMgYXBwcm92ZWQgQUVTIFBSTkcgYmFzZWQgb24g QU5TSSBYOS4zMSBBLjIuNC4KLSsgKi8KLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsj aW5jbHVkZSAiZV9vcy5oIgotKwotKy8qIElmIHdlIGRvbid0IGRlZmluZSBfWE9QRU5fU09VUkNF X0VYVEVOREVELCBzdHJ1Y3QgdGltZXZhbCB3b24ndAotKyAgIGJlIGRlZmluZWQgYW5kIGdldHRp bWVvZmRheSgpIHdvbid0IGJlIGRlY2xhcmVkIHdpdGggc3RyaWN0IGNvbXBpbGVycwotKyAgIGxp a2UgREVDIEMgaW4gQU5TSSBDIG1vZGUuICAqLwotKyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRF TkRFRAotKyMgZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQotKyNlbmRpZgotKwotKyNp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KLSsj aWYgIShkZWZpbmVkKE9QRU5TU0xfU1lTX1dJTjMyKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZY V09SS1MpKQotKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSsjZW5kaWYKLSsjaWYgZGVmaW5lZChP UEVOU1NMX1NZU19WWFdPUktTKQotKyMgaW5jbHVkZSA8dGltZS5oPgotKyNlbmRpZgotKyNpbmNs dWRlIDxhc3NlcnQuaD4KLSsjaWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCi0rIyBpZmRlZiBPUEVO U1NMX1VOSVNURAotKyMgIGluY2x1ZGUgT1BFTlNTTF9VTklTVEQKLSsjIGVsc2UKLSsjICBpbmNs dWRlIDx1bmlzdGQuaD4KLSsjIGVuZGlmCi0rI2VuZGlmCi0rI2luY2x1ZGUgPHN0cmluZy5oPgot KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjaW5jbHVkZSAiZmlwc19sb2NsLmgiCi0rCi0r I2lmZGVmIE9QRU5TU0xfRklQUwotKwotK3ZvaWQgKk9QRU5TU0xfc3RkZXJyKHZvaWQpOwotKwot KyMgZGVmaW5lIEFFU19CTE9DS19MRU5HVEggICAgICAgIDE2Ci0rCi0rLyogQUVTIEZJUFMgUFJO RyBpbXBsZW1lbnRhdGlvbiAqLwotKwotK3R5cGVkZWYgc3RydWN0IHsKLSsgICAgaW50IHNlZWRl ZDsKLSsgICAgaW50IGtleWVkOwotKyAgICBpbnQgdGVzdF9tb2RlOwotKyAgICBpbnQgc2Vjb25k OwotKyAgICBpbnQgZXJyb3I7Ci0rICAgIHVuc2lnbmVkIGxvbmcgY291bnRlcjsKLSsgICAgQUVT X0tFWSBrczsKLSsgICAgaW50IHZwb3M7Ci0rICAgIC8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBr ZXkgaWYgaXQgZXF1YWxzIHNlZWQgbGVuZ3RoICovCi0rICAgIHVuc2lnbmVkIGNoYXIgdG1wX2tl eVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsgICAgdW5zaWduZWQgY2hhciBWW0FFU19CTE9DS19MRU5H VEhdOwotKyAgICB1bnNpZ25lZCBjaGFyIERUW0FFU19CTE9DS19MRU5HVEhdOwotKyAgICB1bnNp Z25lZCBjaGFyIGxhc3RbQUVTX0JMT0NLX0xFTkdUSF07Ci0rfSBGSVBTX1BSTkdfQ1RYOwotKwot K3N0YXRpYyBGSVBTX1BSTkdfQ1RYIHNjdHg7Ci0rCi0rc3RhdGljIGludCBmaXBzX3BybmdfZmFp bCA9IDA7Ci0rCi0rdm9pZCBGSVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKQotK3sKLSsgICAgZmlw c19wcm5nX2ZhaWwgPSBvbm9mZjsKLSt9Ci0rCi0rdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQot K3sKLSsgICAgRklQU194OTMxX3N0aWNrKDEpOwotK30KLSsKLStzdGF0aWMgdm9pZCBmaXBzX3Jh bmRfcHJuZ19yZXNldChGSVBTX1BSTkdfQ1RYICogY3R4KQotK3sKLSsgICAgY3R4LT5zZWVkZWQg PSAwOwotKyAgICBjdHgtPmtleWVkID0gMDsKLSsgICAgY3R4LT50ZXN0X21vZGUgPSAwOwotKyAg ICBjdHgtPmNvdW50ZXIgPSAwOwotKyAgICBjdHgtPnNlY29uZCA9IDA7Ci0rICAgIGN0eC0+ZXJy b3IgPSAwOwotKyAgICBjdHgtPnZwb3MgPSAwOwotKyAgICBPUEVOU1NMX2NsZWFuc2UoY3R4LT5W LCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsgICAgT1BFTlNTTF9jbGVhbnNlKCZjdHgtPmtzLCBzaXpl b2YoQUVTX0tFWSkpOwotK30KLSsKLStzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfa2V5KEZJUFNf UFJOR19DVFggKiBjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCi0rewotKyAgICBpZiAoRklQU19z ZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRVRfUFJO R19LRVksIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IH0KLSsgICAgaWYgKGtleWxlbiAhPSAxNiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMy KSB7Ci0rICAgICAgICAvKiBlcnJvcjogaW52YWxpZCBrZXkgc2l6ZSAqLwotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIH0KLSsgICAgQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAz LCAmY3R4LT5rcyk7Ci0rICAgIGlmIChrZXlsZW4gPT0gMTYpIHsKLSsgICAgICAgIG1lbWNweShj dHgtPnRtcF9rZXksIGtleSwgMTYpOwotKyAgICAgICAgY3R4LT5rZXllZCA9IDI7Ci0rICAgIH0g ZWxzZQotKyAgICAgICAgY3R4LT5rZXllZCA9IDE7Ci0rICAgIGN0eC0+c2VlZGVkID0gMDsKLSsg ICAgY3R4LT5zZWNvbmQgPSAwOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBm aXBzX3NldF9wcm5nX3NlZWQoRklQU19QUk5HX0NUWCAqIGN0eCwKLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkLCB1bnNpZ25lZCBpbnQgc2Vl ZGxlbikKLSt7Ci0rICAgIHVuc2lnbmVkIGludCBpOwotKyAgICBpZiAoIWN0eC0+a2V5ZWQpCi0r ICAgICAgICByZXR1cm4gMDsKLSsgICAgLyogSW4gdGVzdCBtb2RlIHNlZWQgaXMganVzdCBzdXBw bGllZCBkYXRhICovCi0rICAgIGlmIChjdHgtPnRlc3RfbW9kZSkgewotKyAgICAgICAgaWYgKHNl ZWRsZW4gIT0gQUVTX0JMT0NLX0xFTkdUSCkKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAg ICAgIG1lbWNweShjdHgtPlYsIHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOwotKyAgICAgICAgY3R4 LT5zZWVkZWQgPSAxOwotKyAgICAgICAgcmV0dXJuIDE7Ci0rICAgIH0KLSsgICAgLyogT3V0c2lk ZSB0ZXN0IG1vZGUgWE9SIHN1cHBsaWVkIGRhdGEgd2l0aCBleGlzdGluZyBzZWVkICovCi0rICAg IGZvciAoaSA9IDA7IGkgPCBzZWVkbGVuOyBpKyspIHsKLSsgICAgICAgIGN0eC0+VltjdHgtPnZw b3MrK10gXj0gc2VlZFtpXTsKLSsgICAgICAgIGlmIChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xF TkdUSCkgewotKyAgICAgICAgICAgIGN0eC0+dnBvcyA9IDA7Ci0rICAgICAgICAgICAgLyogU3Bl Y2lhbCBjYXNlIGlmIGZpcnN0IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxzCi0rICAgICAgICAg ICAgICogYmxvY2sgc2l6ZSBjaGVjayBrZXkgYW5kIHNlZWQgZG8gbm90IG1hdGNoLgotKyAgICAg ICAgICAgICAqLwotKyAgICAgICAgICAgIGlmIChjdHgtPmtleWVkID09IDIpIHsKLSsgICAgICAg ICAgICAgICAgaWYgKCFtZW1jbXAoY3R4LT50bXBfa2V5LCBjdHgtPlYsIDE2KSkgewotKyAgICAg ICAgICAgICAgICAgICAgUkFORGVycihSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAotKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tF WSk7Ci0rICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICAgICAgfQot KyAgICAgICAgICAgICAgICBPUEVOU1NMX2NsZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7Ci0rICAg ICAgICAgICAgICAgIGN0eC0+a2V5ZWQgPSAxOwotKyAgICAgICAgICAgIH0KLSsgICAgICAgICAg ICBjdHgtPnNlZWRlZCA9IDE7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsgICAgcmV0dXJuIDE7Ci0r fQotKwotK3N0YXRpYyBpbnQgZmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKiBjdHgp Ci0rewotKyAgICBpZiAoY3R4LT5rZXllZCkgewotKyAgICAgICAgUkFORGVycihSQU5EX0ZfRklQ U19TRVRfVEVTVF9NT0RFLCBSQU5EX1JfUFJOR19LRVlFRCk7Ci0rICAgICAgICByZXR1cm4gMDsK LSsgICAgfQotKyAgICBjdHgtPnRlc3RfbW9kZSA9IDE7Ci0rICAgIHJldHVybiAxOwotK30KLSsK LStpbnQgRklQU194OTMxX3Rlc3RfbW9kZSh2b2lkKQotK3sKLSsgICAgcmV0dXJuIGZpcHNfc2V0 X3Rlc3RfbW9kZSgmc2N0eCk7Ci0rfQotKwotK2ludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQp Ci0rewotKyAgICByZXR1cm4gZmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKLSt9Ci0rCi0raW50 IEZJUFNfeDkzMV9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCi0rewotKyAgICBpZiAoIXNjdHgu dGVzdF9tb2RlKSB7Ci0rICAgICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1g5MzFfU0VUX0RULCBS QU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAg ICBtZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOwotKyAgICByZXR1cm4gMTsK LSt9Ci0rCi0raW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCi0rewotKyAg ICBpZiAoIXNjdHgudGVzdF9tb2RlKSB7Ci0rICAgICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1JB TkRfU0VUX0RULCBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSk7Ci0rICAgICAgICByZXR1cm4gMDsK LSsgICAgfQotKyAgICBtZW1jcHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOwotKyAg ICByZXR1cm4gMTsKLSt9Ci0rCi0rdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIg KmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cikKLSt7Ci0rIyBpZmRlZiBPUEVOU1NMX1NZU19XSU4z MgotKyAgICBGSUxFVElNRSBmdDsKLSsjIGVsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktT KQotKyAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7Ci0rIyBlbHNlCi0rICAgIHN0cnVjdCB0aW1ldmFs IHR2OwotKyMgZW5kaWYKLSsKLSsjIGlmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKLSsgICAg dW5zaWduZWQgbG9uZyBwaWQ7Ci0rIyBlbmRpZgotKwotKyMgaWZkZWYgT1BFTlNTTF9TWVNfV0lO MzIKLSsgICAgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJmZ0KTsKLSsgICAgYnVmWzBdID0gKHVu c2lnbmVkIGNoYXIpKGZ0LmR3SGlnaERhdGVUaW1lICYgMHhmZik7Ci0rICAgIGJ1ZlsxXSA9ICh1 bnNpZ25lZCBjaGFyKSgoZnQuZHdIaWdoRGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKLSsgICAgYnVm WzJdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAxNikgJiAweGZmKTsK LSsgICAgYnVmWzNdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkg JiAweGZmKTsKLSsgICAgYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpKGZ0LmR3TG93RGF0ZVRpbWUg JiAweGZmKTsKLSsgICAgYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0xvd0RhdGVUaW1l ID4+IDgpICYgMHhmZik7Ci0rICAgIGJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSgoZnQuZHdMb3dE YXRlVGltZSA+PiAxNikgJiAweGZmKTsKLSsgICAgYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpKChm dC5kd0xvd0RhdGVUaW1lID4+IDI0KSAmIDB4ZmYpOwotKyMgZWxpZiBkZWZpbmVkKE9QRU5TU0xf U1lTX1ZYV09SS1MpCi0rICAgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cyk7Ci0r ICAgIGJ1ZlswXSA9ICh1bnNpZ25lZCBjaGFyKSh0cy50dl9zZWMgJiAweGZmKTsKLSsgICAgYnVm WzFdID0gKHVuc2lnbmVkIGNoYXIpKCh0cy50dl9zZWMgPj4gOCkgJiAweGZmKTsKLSsgICAgYnVm WzJdID0gKHVuc2lnbmVkIGNoYXIpKCh0cy50dl9zZWMgPj4gMTYpICYgMHhmZik7Ci0rICAgIGJ1 ZlszXSA9ICh1bnNpZ25lZCBjaGFyKSgodHMudHZfc2VjID4+IDI0KSAmIDB4ZmYpOwotKyAgICBi dWZbNF0gPSAodW5zaWduZWQgY2hhcikodHMudHZfbnNlYyAmIDB4ZmYpOwotKyAgICBidWZbNV0g PSAodW5zaWduZWQgY2hhcikoKHRzLnR2X25zZWMgPj4gOCkgJiAweGZmKTsKLSsgICAgYnVmWzZd ID0gKHVuc2lnbmVkIGNoYXIpKCh0cy50dl9uc2VjID4+IDE2KSAmIDB4ZmYpOwotKyAgICBidWZb N10gPSAodW5zaWduZWQgY2hhcikoKHRzLnR2X25zZWMgPj4gMjQpICYgMHhmZik7Ci0rIyBlbHNl Ci0rICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwotKyAgICBidWZbMF0gPSAodW5zaWduZWQg Y2hhcikodHYudHZfc2VjICYgMHhmZik7Ci0rICAgIGJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSgo dHYudHZfc2VjID4+IDgpICYgMHhmZik7Ci0rICAgIGJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSgo dHYudHZfc2VjID4+IDE2KSAmIDB4ZmYpOwotKyAgICBidWZbM10gPSAodW5zaWduZWQgY2hhciko KHR2LnR2X3NlYyA+PiAyNCkgJiAweGZmKTsKLSsgICAgYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIp KHR2LnR2X3VzZWMgJiAweGZmKTsKLSsgICAgYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpKCh0di50 dl91c2VjID4+IDgpICYgMHhmZik7Ci0rICAgIGJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSgodHYu dHZfdXNlYyA+PiAxNikgJiAweGZmKTsKLSsgICAgYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpKCh0 di50dl91c2VjID4+IDI0KSAmIDB4ZmYpOwotKyMgZW5kaWYKLSsgICAgYnVmWzhdID0gKHVuc2ln bmVkIGNoYXIpKCpwY3RyICYgMHhmZik7Ci0rICAgIGJ1Zls5XSA9ICh1bnNpZ25lZCBjaGFyKSgo KnBjdHIgPj4gOCkgJiAweGZmKTsKLSsgICAgYnVmWzEwXSA9ICh1bnNpZ25lZCBjaGFyKSgoKnBj dHIgPj4gMTYpICYgMHhmZik7Ci0rICAgIGJ1ZlsxMV0gPSAodW5zaWduZWQgY2hhcikoKCpwY3Ry ID4+IDI0KSAmIDB4ZmYpOwotKwotKyAgICAoKnBjdHIpKys7Ci0rCi0rIyBpZm5kZWYgR0VUUElE X0lTX01FQU5JTkdMRVNTCi0rICAgIHBpZCA9ICh1bnNpZ25lZCBsb25nKWdldHBpZCgpOwotKyAg ICBidWZbMTJdID0gKHVuc2lnbmVkIGNoYXIpKHBpZCAmIDB4ZmYpOwotKyAgICBidWZbMTNdID0g KHVuc2lnbmVkIGNoYXIpKChwaWQgPj4gOCkgJiAweGZmKTsKLSsgICAgYnVmWzE0XSA9ICh1bnNp Z25lZCBjaGFyKSgocGlkID4+IDE2KSAmIDB4ZmYpOwotKyAgICBidWZbMTVdID0gKHVuc2lnbmVk IGNoYXIpKChwaWQgPj4gMjQpICYgMHhmZik7Ci0rIyBlbmRpZgotK30KLSsKLStzdGF0aWMgaW50 IGZpcHNfcmFuZChGSVBTX1BSTkdfQ1RYICogY3R4LAotKyAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgaW50IG91dGxlbikKLSt7Ci0rICAgIHVuc2lnbmVk IGNoYXIgUltBRVNfQkxPQ0tfTEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RIXTsKLSsgICAgdW5z aWduZWQgY2hhciB0bXBbQUVTX0JMT0NLX0xFTkdUSF07Ci0rICAgIGludCBpOwotKyAgICBpZiAo Y3R4LT5lcnJvcikgewotKyAgICAgICAgUkFORGVycihSQU5EX0ZfRklQU19SQU5ELCBSQU5EX1Jf UFJOR19FUlJPUik7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBpZiAoIWN0eC0+ a2V5ZWQpIHsKLSsgICAgICAgIFJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCwgUkFORF9SX05PX0tF WV9TRVQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsgICAgaWYgKCFjdHgtPnNlZWRl ZCkgewotKyAgICAgICAgUkFORGVycihSQU5EX0ZfRklQU19SQU5ELCBSQU5EX1JfUFJOR19OT1Rf U0VFREVEKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGZvciAoOzspIHsKLSsg ICAgICAgIGlmICghY3R4LT50ZXN0X21vZGUpCi0rICAgICAgICAgICAgRklQU19nZXRfdGltZXZl YyhjdHgtPkRULCAmY3R4LT5jb3VudGVyKTsKLSsgICAgICAgIEFFU19lbmNyeXB0KGN0eC0+RFQs IEksICZjdHgtPmtzKTsKLSsgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RI OyBpKyspCi0rICAgICAgICAgICAgdG1wW2ldID0gSVtpXSBeIGN0eC0+VltpXTsKLSsgICAgICAg IEFFU19lbmNyeXB0KHRtcCwgUiwgJmN0eC0+a3MpOwotKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IEFFU19CTE9DS19MRU5HVEg7IGkrKykKLSsgICAgICAgICAgICB0bXBbaV0gPSBSW2ldIF4gSVtp XTsKLSsgICAgICAgIEFFU19lbmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7Ci0rICAgICAg ICAvKiBDb250aW51b3VzIFBSTkcgdGVzdCAqLwotKyAgICAgICAgaWYgKGN0eC0+c2Vjb25kKSB7 Ci0rICAgICAgICAgICAgaWYgKGZpcHNfcHJuZ19mYWlsKQotKyAgICAgICAgICAgICAgICBtZW1j cHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKLSsgICAgICAgICAgICBpZiAoIW1l bWNtcChSLCBjdHgtPmxhc3QsIEFFU19CTE9DS19MRU5HVEgpKSB7Ci0rICAgICAgICAgICAgICAg IFJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCwgUkFORF9SX1BSTkdfU1RVQ0spOwotKyAgICAgICAg ICAgICAgICBjdHgtPmVycm9yID0gMTsKLSsgICAgICAgICAgICAgICAgZmlwc19zZXRfc2VsZnRl c3RfZmFpbCgpOwotKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgICAgICB9Ci0r ICAgICAgICB9Ci0rICAgICAgICBtZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RI KTsKLSsgICAgICAgIGlmICghY3R4LT5zZWNvbmQpIHsKLSsgICAgICAgICAgICBjdHgtPnNlY29u ZCA9IDE7Ci0rICAgICAgICAgICAgaWYgKCFjdHgtPnRlc3RfbW9kZSkKLSsgICAgICAgICAgICAg ICAgY29udGludWU7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpZiAob3V0bGVuIDw9IEFFU19C TE9DS19MRU5HVEgpIHsKLSsgICAgICAgICAgICBtZW1jcHkob3V0LCBSLCBvdXRsZW4pOwotKyAg ICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgfQotKwotKyAgICAgICAgbWVtY3B5KG91dCwgUiwg QUVTX0JMT0NLX0xFTkdUSCk7Ci0rICAgICAgICBvdXQgKz0gQUVTX0JMT0NLX0xFTkdUSDsKLSsg ICAgICAgIG91dGxlbiAtPSBBRVNfQkxPQ0tfTEVOR1RIOwotKyAgICB9Ci0rICAgIHJldHVybiAx OwotK30KLSsKLStpbnQgRklQU194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5 LCBpbnQga2V5bGVuKQotK3sKLSsgICAgaW50IHJldDsKLSsgICAgQ1JZUFRPX3dfbG9jayhDUllQ VE9fTE9DS19SQU5EKTsKLSsgICAgcmV0ID0gZmlwc19zZXRfcHJuZ19rZXkoJnNjdHgsIGtleSwg a2V5bGVuKTsKLSsgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKyAgICBy ZXR1cm4gcmV0OwotK30KLSsKLStpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQg Y2hhciAqa2V5LCBGSVBTX1JBTkRfU0laRV9UIGtleWxlbikKLSt7Ci0rICAgIHJldHVybiBGSVBT X3g5MzFfc2V0X2tleShrZXksIGtleWxlbik7Ci0rfQotKwotK2ludCBGSVBTX3g5MzFfc2VlZChj b25zdCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKLSt7Ci0rICAgIGludCByZXQ7Ci0rICAgIENS WVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rICAgIHJldCA9IGZpcHNfc2V0X3Bybmdf c2VlZCgmc2N0eCwgc2VlZCwgc2VlZGxlbik7Ci0rICAgIENSWVBUT193X3VubG9jayhDUllQVE9f TE9DS19SQU5EKTsKLSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rCi0raW50IEZJUFNfeDkzMV9ieXRl cyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBjb3VudCkKLSt7Ci0rICAgIGludCByZXQ7Ci0rICAg IENSWVBUT193X2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7Ci0rICAgIHJldCA9IGZpcHNfcmFuZCgm c2N0eCwgb3V0LCBjb3VudCk7Ci0rICAgIENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5E KTsKLSsgICAgcmV0dXJuIHJldDsKLSt9Ci0rCi0raW50IEZJUFNfeDkzMV9zdGF0dXModm9pZCkK LSt7Ci0rICAgIGludCByZXQ7Ci0rICAgIENSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7 Ci0rICAgIHJldCA9IHNjdHguc2VlZGVkOwotKyAgICBDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xP Q0tfUkFORCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwotK3ZvaWQgRklQU194OTMxX3Jlc2V0 KHZvaWQpCi0rewotKyAgICBDUllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOwotKyAgICBm aXBzX3JhbmRfcHJuZ19yZXNldCgmc2N0eCk7Ci0rICAgIENSWVBUT193X3VubG9jayhDUllQVE9f TE9DS19SQU5EKTsKLSt9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RvX3JhbmRfc2VlZChjb25zdCB2 b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKLSt7Ci0rICAgIEZJUFNfeDkzMV9zZWVkKHNlZWQsIHNl ZWRsZW4pOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGludCBmaXBzX2RvX3JhbmRf YWRkKGNvbnN0IHZvaWQgKnNlZWQsIGludCBzZWVkbGVuLCBkb3VibGUgYWRkX2VudHJvcHkpCi0r ewotKyAgICBGSVBTX3g5MzFfc2VlZChzZWVkLCBzZWVkbGVuKTsKLSsgICAgcmV0dXJuIDE7Ci0r fQotKwotK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX3g5MzFfbWV0aCA9IHsKLSsgICAg Zmlwc19kb19yYW5kX3NlZWQsCi0rICAgIEZJUFNfeDkzMV9ieXRlcywKLSsgICAgRklQU194OTMx X3Jlc2V0LAotKyAgICBmaXBzX2RvX3JhbmRfYWRkLAotKyAgICBGSVBTX3g5MzFfYnl0ZXMsCi0r ICAgIEZJUFNfeDkzMV9zdGF0dXMKLSt9OwotKwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3g5 MzFfbWV0aG9kKHZvaWQpCi0rewotKyAgICByZXR1cm4gJnJhbmRfeDkzMV9tZXRoOwotK30KLSsK LSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5o LmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgKLS0tLSBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3JhbmQuaC5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcu NjIyOTE2NjU5ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19yYW5k LmgJMjAxNi0wMy0wMSAxNjozMzowNy42MjI5MTY2NTkgKzAxMDAKLUBAIC0wLDAgKzEsMTYzIEBA Ci0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAq Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJp YnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsg KgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2lmbmRlZiBIRUFERVJfRklQU19SQU5E X0gKLSsjIGRlZmluZSBIRUFERVJfRklQU19SQU5EX0gKLSsKLSsjIGluY2x1ZGUgPG9wZW5zc2wv YWVzLmg+Ci0rIyBpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgotKyMgaW5jbHVkZSA8b3BlbnNzbC9o bWFjLmg+Ci0rIyBpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KLSsKLSsjIGlmZGVmIE9QRU5TU0xf RklQUwotKwotKyMgIGlmZGVmICBfX2NwbHVzcGx1cwotK2V4dGVybiAiQyIgewotKyMgIGVuZGlm Ci0rCi0rICAgIGludCBGSVBTX3g5MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXks IGludCBrZXlsZW4pOwotKyAgICBpbnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBp bnQgbnVtKTsKLSsgICAgaW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGlu dCBvdXRsZW4pOwotKwotKyAgICBpbnQgRklQU194OTMxX3Rlc3RfbW9kZSh2b2lkKTsKLSsgICAg dm9pZCBGSVBTX3g5MzFfcmVzZXQodm9pZCk7Ci0rICAgIGludCBGSVBTX3g5MzFfc2V0X2R0KHVu c2lnbmVkIGNoYXIgKmR0KTsKLSsKLSsgICAgaW50IEZJUFNfeDkzMV9zdGF0dXModm9pZCk7Ci0r Ci0rICAgIGNvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpOwotKwotKyAg ICB0eXBlZGVmIHN0cnVjdCBkcmJnX2N0eF9zdCBEUkJHX0NUWDsKLSsvKiBEUkJHIGV4dGVybmFs IGZsYWdzICovCi0rLyogRmxhZyBmb3IgQ1RSIG1vZGUgb25seTogdXNlIGRlcml2YXRpb24gZnVu Y3Rpb24gY3RyX2RmICovCi0rIyAgZGVmaW5lIERSQkdfRkxBR19DVFJfVVNFX0RGICAgICAgICAg ICAgMHgxCi0rLyogUFJORyBpcyBpbiB0ZXN0IHN0YXRlICovCi0rIyAgZGVmaW5lIERSQkdfRkxB R19URVNUICAgICAgICAgICAgICAgICAgMHgyCi0rCi0rICAgIERSQkdfQ1RYICpGSVBTX2RyYmdf bmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotKyAgICBpbnQgRklQU19kcmJnX2lu aXQoRFJCR19DVFggKmRjdHgsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotKyAgICBp bnQgRklQU19kcmJnX2luc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVu KTsKLSsgICAgaW50IEZJUFNfZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmFkaW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhZGlubGVu KTsKLSsgICAgaW50IEZJUFNfZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQg Y2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBwcmVkaWN0aW9uX3Jlc2lzdGFuY2UsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5sZW4pOwotKwotKyAgICBpbnQgRklQ U19kcmJnX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpOwotKyAgICB2b2lkIEZJUFNfZHJi Z19mcmVlKERSQkdfQ1RYICpkY3R4KTsKLSsKLSsgICAgaW50IEZJUFNfZHJiZ19zZXRfY2FsbGJh Y2tzKERSQkdfQ1RYICpkY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICgqZ2V0X2VudHJvcHkpIChEUkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IGVudHJvcHksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBtaW5fbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWF4X2xlbiksCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2xlYW51cF9lbnRyb3B5KSAoRFJCR19DVFgg KmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfbm9uY2UpIChEUkJHX0NUWCAqY3R4 LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwKLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaW5fbGVuLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9s ZW4pLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNsZWFudXBfbm9u Y2UpIChEUkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSk7Ci0r Ci0rICAgIGludCBGSVBTX2RyYmdfc2V0X3JhbmRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfYWRpbikg KERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhcgotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqcG91dCksCi0rICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVwX2FkaW4pIChEUkJHX0NUWCAq Y3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpyYW5kX3NlZWRfY2IpIChEUkJHX0NU WCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0pLAotKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpyYW5kX2FkZF9jYikgKERSQkdfQ1RYICpjdHgs Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgdm9pZCAqYnVmLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBudW0sCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVudHJvcHkpKTsKLSsKLSsg ICAgdm9pZCAqRklQU19kcmJnX2dldF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4KTsKLSsgICAgdm9p ZCBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKERSQkdfQ1RYICpjdHgsIHZvaWQgKmFwcF9kYXRhKTsK LSsgICAgc2l6ZV90IEZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpOwot KyAgICBpbnQgRklQU19kcmJnX2dldF9zdHJlbmd0aChEUkJHX0NUWCAqZGN0eCk7Ci0rICAgIHZv aWQgRklQU19kcmJnX3NldF9jaGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVy dmFsKTsKLSsgICAgdm9pZCBGSVBTX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbChEUkJHX0NUWCAq ZGN0eCwgaW50IGludGVydmFsKTsKLSsKLSsgICAgaW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2so RFJCR19DVFggKmRjdHgpOwotKwotKyAgICBEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJn KHZvaWQpOwotKyAgICBjb25zdCBSQU5EX01FVEhPRCAqRklQU19kcmJnX21ldGhvZCh2b2lkKTsK LSsKLSsgICAgaW50IEZJUFNfcmFuZF9zZXRfbWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRo KTsKLSsgICAgY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZvaWQpOwot KwotKyAgICB2b2lkIEZJUFNfcmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpOwotKwotKyAgICBpbnQg RklQU19yYW5kX3N0cmVuZ3RoKHZvaWQpOwotKwotKy8qIDEuMC4wIGNvbXBhdCBmdW5jdGlvbnMg Ki8KLSsgICAgaW50IEZJUFNfcmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwg RklQU19SQU5EX1NJWkVfVCBrZXlsZW4pOwotKyAgICBpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qg dm9pZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSk7Ci0rICAgIGludCBGSVBTX3JhbmRfYnl0 ZXModW5zaWduZWQgY2hhciAqb3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7Ci0rICAgIGlu dCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpOwotKyAgICB2b2lkIEZJUFNfcmFuZF9yZXNldCh2 b2lkKTsKLSsgICAgaW50IEZJUFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOwotKyAg ICBpbnQgRklQU19yYW5kX3N0YXR1cyh2b2lkKTsKLSsgICAgY29uc3QgUkFORF9NRVRIT0QgKkZJ UFNfcmFuZF9tZXRob2Qodm9pZCk7Ci0rCi0rIyAgaWZkZWYgIF9fY3BsdXNwbHVzCi0rfQotKyMg IGVuZGlmCi0rIyBlbmRpZgotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlw c19yYW5kX2xjbC5oCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xj bC5oLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MjI5MTY2NTkgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGNsLmgJMjAxNi0wMy0wMSAxNjozMzowNy42 MjI5MTY2NTkgKzAxMDAKLUBAIC0wLDAgKzEsMjEzIEBACi0rLyogZmlwcy9yYW5kL2ZpcHNfcmFu ZF9sY2wuaCAqLwotKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3Bl bnNzbC5vcmcpIGZvciB0aGUgT3BlblNTTAotKyAqIHByb2plY3QuCi0rICovCi0rLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBh cmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAq Ci0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKLSsgKgotKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIGxpY2Vuc2lu Z0BPcGVuU1NMLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNv ZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5T U0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBw ZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1 dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0r ICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgotKyAqCi0rICog VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMn JyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0r ICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B R0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5E IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS RSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF LgotKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0rICovCi0rCi0rdHlwZWRlZiBzdHJ1Y3QgZHJiZ19oYXNoX2N0 eF9zdCBEUkJHX0hBU0hfQ1RYOwotK3R5cGVkZWYgc3RydWN0IGRyYmdfaG1hY19jdHhfc3QgRFJC R19ITUFDX0NUWDsKLSt0eXBlZGVmIHN0cnVjdCBkcmJnX2N0cl9jdHhfc3QgRFJCR19DVFJfQ1RY OwotKwotKy8qIDg4OCBiaXRzIGZyb20gMTAuMSB0YWJsZSAyICovCi0rI2RlZmluZSBIQVNIX1BS TkdfTUFYX1NFRURMRU4gICAxMTEKLSsKLStzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdCB7Ci0rICAg IGNvbnN0IEVWUF9NRCAqbWQ7Ci0rICAgIEVWUF9NRF9DVFggbWN0eDsKLSsgICAgdW5zaWduZWQg Y2hhciBWW0hBU0hfUFJOR19NQVhfU0VFRExFTl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgQ1tIQVNI X1BSTkdfTUFYX1NFRURMRU5dOwotKyAgICAvKiBUZW1wb3JhcnkgdmFsdWUgc3RvcmFnZTogc2hv dWxkIGFsd2F5cyBleGNlZWQgbWF4IGRpZ2VzdCBsZW5ndGggKi8KLSsgICAgdW5zaWduZWQgY2hh ciB2dG1wW0hBU0hfUFJOR19NQVhfU0VFRExFTl07Ci0rfTsKLSsKLStzdHJ1Y3QgZHJiZ19obWFj X2N0eF9zdCB7Ci0rICAgIGNvbnN0IEVWUF9NRCAqbWQ7Ci0rICAgIEhNQUNfQ1RYIGhjdHg7Ci0r ICAgIHVuc2lnbmVkIGNoYXIgS1tFVlBfTUFYX01EX1NJWkVdOwotKyAgICB1bnNpZ25lZCBjaGFy IFZbRVZQX01BWF9NRF9TSVpFXTsKLSt9OwotKwotK3N0cnVjdCBkcmJnX2N0cl9jdHhfc3Qgewot KyAgICBBRVNfS0VZIGtzOwotKyAgICBzaXplX3Qga2V5bGVuOwotKyAgICB1bnNpZ25lZCBjaGFy IEtbMzJdOwotKyAgICB1bnNpZ25lZCBjaGFyIFZbMTZdOwotKyAgICAvKiBUZW1wIHZhcmlhYmxl cyB1c2VkIGJ5IGRlcml2YXRpb24gZnVuY3Rpb24gKi8KLSsgICAgQUVTX0tFWSBkZl9rczsKLSsg ICAgQUVTX0tFWSBkZl9reGtzOwotKyAgICAvKiBUZW1wb3JhcnkgYmxvY2sgc3RvcmFnZSB1c2Vk IGJ5IGN0cl9kZiAqLwotKyAgICB1bnNpZ25lZCBjaGFyIGJsdG1wWzE2XTsKLSsgICAgc2l6ZV90 IGJsdG1wX3BvczsKLSsgICAgdW5zaWduZWQgY2hhciBLWFs0OF07Ci0rfTsKLSsKLSsvKiBEUkJH IGludGVybmFsIGZsYWdzICovCi0rCi0rLyogRnVuY3Rpb25zIHNob3VsZG4ndCBjYWxsIGVyciBs aWJyYXJ5ICovCi0rI2RlZmluZSBEUkJHX0ZMQUdfTk9FUlIgICAgICAgICAgICAgICAgIDB4MQot Ky8qIEN1c3RvbSByZXNlZWQgY2hlY2tpbmcgKi8KLSsjZGVmaW5lIERSQkdfQ1VTVE9NX1JFU0VF RCAgICAgICAgICAgICAgMHgyCi0rCi0rLyogRFJCRyBzdGF0dXMgdmFsdWVzICovCi0rLyogbm90 IGluaXRpYWxpc2VkICovCi0rI2RlZmluZSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEICAgICAg IDAKLSsvKiBvayBhbmQgcmVhZHkgdG8gZ2VuZXJhdGUgcmFuZG9tIGJpdHMgKi8KLSsjZGVmaW5l IERSQkdfU1RBVFVTX1JFQURZICAgICAgICAgICAgICAgMQotKy8qIHJlc2VlZCByZXF1aXJlZCAq LwotKyNkZWZpbmUgRFJCR19TVEFUVVNfUkVTRUVEICAgICAgICAgICAgICAyCi0rLyogZmF0YWwg ZXJyb3IgY29uZGl0aW9uICovCi0rI2RlZmluZSBEUkJHX1NUQVRVU19FUlJPUiAgICAgICAgICAg ICAgIDMKLSsKLSsvKiBBIGRlZmF1bHQgbWF4aW11bSBsZW5ndGg6IGxhcmdlciB0aGFuIGFueSBy ZWFzb25hYmxlIHZhbHVlIHVzZWQgaW4gcHJhdGljZSAqLwotKwotKyNkZWZpbmUgRFJCR19NQVhf TEVOR1RIICAgICAgICAgICAgICAgICAweDdmZmZmZmYwCi0rLyogTWF4aW11bSBEUkJHIGJsb2Nr IGxlbmd0aDogYWxsIG1kIHNpemVzIGFyZSBiaWdnZXIgdGhhbiBjaXBoZXIgYmxvY2tzIHNpemVz Ci0rICogc28gdXNlIG1heCBkaWdlc3QgbGVuZ3RoLgotKyAqLwotKyNkZWZpbmUgRFJCR19NQVhf QkxPQ0sgICAgICAgICAgICAgICAgICBFVlBfTUFYX01EX1NJWkUKLSsKLSsjZGVmaW5lIERSQkdf SEVBTFRIX0lOVEVSVkFMICAgICAgICAgICAgKDEgPDwgMjQpCi0rCi0rLyogRFJCRyBjb250ZXh0 IHN0cnVjdHVyZSAqLwotKwotK3N0cnVjdCBkcmJnX2N0eF9zdCB7Ci0rICAgIC8qIEZpcnN0IHR5 cGVzIGNvbW1vbiB0byBhbGwgaW1wbGVtZW50YXRpb25zICovCi0rICAgIC8qIERSQkcgdHlwZTog YSBOSUQgZm9yIHRoZSB1bmRlcmx5aW5nIGFsZ29yaXRobSAqLwotKyAgICBpbnQgdHlwZTsKLSsg ICAgLyogVmFyaW91cyBleHRlcm5hbCBmbGFncyAqLwotKyAgICB1bnNpZ25lZCBpbnQgeGZsYWdz OwotKyAgICAvKiBWYXJpb3VzIGludGVybmFsIHVzZSBvbmx5IGZsYWdzICovCi0rICAgIHVuc2ln bmVkIGludCBpZmxhZ3M7Ci0rICAgIC8qIFVzZWQgZm9yIHBlcmlvZGljIGhlYWx0aCBjaGVja3Mg Ki8KLSsgICAgaW50IGhlYWx0aF9jaGVja19jbnQsIGhlYWx0aF9jaGVja19pbnRlcnZhbDsKLSsK LSsgICAgLyogVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBzZXR1cCBieSBtZWNoYW5pc20g ZHJiZ19pbml0KCkgY2FsbCAqLwotKyAgICBpbnQgc3RyZW5ndGg7Ci0rICAgIHNpemVfdCBibG9j a2xlbmd0aDsKLSsgICAgc2l6ZV90IG1heF9yZXF1ZXN0OwotKwotKyAgICBzaXplX3QgbWluX2Vu dHJvcHksIG1heF9lbnRyb3B5OwotKyAgICBzaXplX3QgbWluX25vbmNlLCBtYXhfbm9uY2U7Ci0r ICAgIHNpemVfdCBtYXhfcGVycywgbWF4X2FkaW47Ci0rICAgIHVuc2lnbmVkIGludCByZXNlZWRf Y291bnRlcjsKLSsgICAgdW5zaWduZWQgaW50IHJlc2VlZF9pbnRlcnZhbDsKLSsgICAgc2l6ZV90 IHNlZWRsZW47Ci0rICAgIGludCBzdGF0dXM7Ci0rICAgIC8qIEFwcGxpY2F0aW9uIGRhdGE6IHR5 cGljYWxseSB1c2VkIGJ5IHRlc3QgZ2V0X2VudHJvcHkgKi8KLSsgICAgdm9pZCAqYXBwX2RhdGE7 Ci0rICAgIC8qIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIHN0cnVjdHVyZXMgKi8KLSsgICAgdW5p b24gewotKyAgICAgICAgRFJCR19IQVNIX0NUWCBoYXNoOwotKyAgICAgICAgRFJCR19ITUFDX0NU WCBobWFjOwotKyAgICAgICAgRFJCR19DVFJfQ1RYIGN0cjsKLSsgICAgfSBkOwotKyAgICAvKiBJ bml0aWFsaWFzZSBQUk5HIGFuZCBzZXR1cCBjYWxsYmFja3MgYmVsb3cgKi8KLSsgICAgaW50ICgq aW5pdCkgKERSQkdfQ1RYICpjdHgsIGludCBuaWQsIGludCBzZWN1cml0eSwgdW5zaWduZWQgaW50 IGZsYWdzKTsKLSsgICAgLyogSW50YW50aWF0ZSBQUk5HICovCi0rICAgIGludCAoKmluc3RhbnRp YXRlKSAoRFJCR19DVFggKmN0eCwKLSsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCi0rICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKLSsgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7 Ci0rICAgIC8qIHJlc2VlZCAqLwotKyAgICBpbnQgKCpyZXNlZWQpIChEUkJHX0NUWCAqY3R4LAot KyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRs ZW4sCi0rICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVf dCBhZGlubGVuKTsKLSsgICAgLyogZ2VuZXJhdCBvdXRwdXQgKi8KLSsgICAgaW50ICgqZ2VuZXJh dGUpIChEUkJHX0NUWCAqY3R4LAotKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg Km91dCwgc2l6ZV90IG91dGxlbiwKLSsgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbik7Ci0rICAgIC8qIHVuaW5zdGFudGlhdGUgKi8K LSsgICAgaW50ICgqdW5pbnN0YW50aWF0ZSkgKERSQkdfQ1RYICpjdHgpOwotKwotKyAgICAvKiBF bnRyb3B5IHNvdXJjZSBibG9jayBsZW5ndGggKi8KLSsgICAgc2l6ZV90IGVudHJvcHlfYmxvY2ts ZW47Ci0rCi0rICAgIC8qIGVudHJvcHkgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCi0rICAgIHNpemVf dCAoKmdldF9lbnRyb3B5KSAoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBz aXplX3QgbWF4X2xlbik7Ci0rICAgIC8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGgg ZW50cm9weSBidWZmZXIgKi8KLSsgICAgdm9pZCAoKmNsZWFudXBfZW50cm9weSkgKERSQkdfQ1RY ICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOwotKwotKyAgICAvKiBub25j ZSBnYXRoZXJpbmcgZnVuY3Rpb24gKi8KLSsgICAgc2l6ZV90ICgqZ2V0X25vbmNlKSAoRFJCR19D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCi0rICAgICAgICAgICAgICAgICAgICAgICAg IGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOwotKyAgICAvKiBJ bmRpY2F0ZXMgd2UgaGF2ZSBmaW5pc2hlZCB3aXRoIG5vbmNlIGJ1ZmZlciAqLwotKyAgICB2b2lk ICgqY2xlYW51cF9ub25jZSkgKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6 ZV90IG9sZW4pOwotKwotKyAgICAvKiBDb250aW51b3VzIHJhbmRvbSBudW1iZXIgdGVzdCB0ZW1w b3JhcnkgYXJlYSAqLwotKyAgICAvKiBMYXN0IGJsb2NrICovCi0rICAgIHVuc2lnbmVkIGNoYXIg bGJbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgLyogc2V0IGlmIGxiIGlzIHZhbGlkICovCi0rICAg IGludCBsYl92YWxpZDsKLSsKLSsgICAgLyogQ2FsbGJhY2tzIHVzZWQgd2hlbiBjYWxsZWQgdGhy b3VnaCBSQU5EIGludGVyZmFjZSAqLwotKyAgICAvKiBHZXQgYW55IGFkZGl0aW9uYWwgaW5wdXQg Zm9yIGdlbmVyYXRlICovCi0rICAgIHNpemVfdCAoKmdldF9hZGluKSAoRFJCR19DVFggKmN0eCwg dW5zaWduZWQgY2hhciAqKnBvdXQpOwotKyAgICB2b2lkICgqY2xlYW51cF9hZGluKSAoRFJCR19D VFggKmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb2xlbik7Ci0rICAgIC8qIENhbGxi YWNrIGZvciBSQU5EX3NlZWQoKSwgUkFORF9hZGQoKSAqLwotKyAgICBpbnQgKCpyYW5kX3NlZWRf Y2IpIChEUkJHX0NUWCAqY3R4LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pOwotKyAgICBpbnQg KCpyYW5kX2FkZF9jYikgKERSQkdfQ1RYICpjdHgsCi0rICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSk7Ci0rfTsKLSsKLStpbnQg Zmlwc19kcmJnX2N0cl9pbml0KERSQkdfQ1RYICpkY3R4KTsKLStpbnQgZmlwc19kcmJnX2hhc2hf aW5pdChEUkJHX0NUWCAqZGN0eCk7Ci0raW50IGZpcHNfZHJiZ19obWFjX2luaXQoRFJCR19DVFgg KmRjdHgpOwotK2ludCBmaXBzX2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNp Z25lZCBpbnQgZmxhZ3MpOwotK2ludCBmaXBzX2RyYmdfY3BybmdfdGVzdChEUkJHX0NUWCAqZGN0 eCwgY29uc3QgdW5zaWduZWQgY2hhciAqb3V0KTsKLSsKLStjb25zdCBzdHJ1Y3QgZW52X21kX3N0 ICpGSVBTX2dldF9kaWdlc3RieW5pZChpbnQgbmlkKTsKLSsKLStjb25zdCBzdHJ1Y3QgZXZwX2Np cGhlcl9zdCAqRklQU19nZXRfY2lwaGVyYnluaWQoaW50IG5pZCk7Ci0rCi0rI2RlZmluZSBGSVBT X2RpZ2VzdGluaXQgRVZQX0RpZ2VzdEluaXQKLSsjZGVmaW5lIEZJUFNfZGlnZXN0dXBkYXRlIEVW UF9EaWdlc3RVcGRhdGUKLSsjZGVmaW5lIEZJUFNfZGlnZXN0ZmluYWwgRVZQX0RpZ2VzdEZpbmFs Ci0rI2RlZmluZSBNX0VWUF9NRF9zaXplIEVWUF9NRF9zaXplCi1kaWZmIC11cCBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlw dG8vZmlwcy9maXBzX3JhbmRfbGliLmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9m aXBzX3JhbmRfbGliLmMuZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMjkxNjY1OSArMDEwMAot KysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYwkyMDE2LTAzLTAx IDE2OjMzOjA3LjYyMjkxNjY1OSArMDEwMAotQEAgLTAsMCArMSwxODEgQEAKLSsvKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJp Z2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJl IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFy ZSBtZXQ6Ci0rICoKLSsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0rICoKLSsgKiAyLiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly aWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbgotKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSsgKiAgICBkaXN0cmlidXRpb24uCi0rICoK LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMKLSsgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBpbiB0aGUgT3Bl blNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogNC4gVGhl IG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBi ZSB1c2VkIHRvCi0rICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKLSsgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u IEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0Ci0rICogICAgb3BlbnNzbC1j b3JlQG9wZW5zc2wub3JnLgotKyAqCi0rICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCi0rICogICAgbm9yIG1heSAiT3Bl blNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotKyAqICAg IHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KLSsgKgotKyAqIDYuIFJlZGlzdHJp YnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcK LSsgKiAgICBhY2tub3dsZWRnbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNv ZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0Ci0rICogICAgZm9yIHVzZSBp biB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJ UycnIEFORCBBTlkKLSsgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0rICogUFVSUE9TRSBB UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IK LSsgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsCi0rICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB TUFHRVMgKElOQ0xVRElORywgQlVUCi0rICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0rICogTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBB TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0rICog U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX SVNFKQotKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX QVJFLCBFVkVOIElGIEFEVklTRUQKLSsgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B R0UuCi0rICoKLSsgKi8KLSsKLSsjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KLSsjaW5jbHVk ZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwcy5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNpbmNs dWRlICJlX29zLmgiCi0rCi0rLyogRklQUyBBUEkgZm9yIFBSTkcgdXNlLiBTaW1pbGFyIHRvIFJB TkQgZnVuY3Rpb25hbGl0eSBidXQgd2l0aG91dAotKyAqIEVOR0lORSBhbmQgYWRkaXRpb25hbCBj aGVja2luZyBmb3Igbm9uLUZJUFMgcmFuZCBtZXRob2RzLgotKyAqLwotKwotK3N0YXRpYyBjb25z dCBSQU5EX01FVEhPRCAqZmlwc19yYW5kX21ldGggPSBOVUxMOwotK3N0YXRpYyBpbnQgZmlwc19h cHByb3ZlZF9yYW5kX21ldGggPSAwOwotK3N0YXRpYyBpbnQgZmlwc19yYW5kX2JpdHMgPSAwOwot KwotKy8qIEFsbG93cyBhcHBsaWNhdGlvbiB0byBvdmVycmlkZSBudW1iZXIgb2YgYml0cyBhbmQg dXNlcyBub24tRklQUyBtZXRob2RzICovCi0rdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50IG5i aXRzKQotK3sKLSsgICAgZmlwc19yYW5kX2JpdHMgPSBuYml0czsKLSt9Ci0rCi0raW50IEZJUFNf cmFuZF9zZXRfbWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRoKQotK3sKLSsgICAgaWYgKCFm aXBzX3JhbmRfYml0cykgewotKyAgICAgICAgaWYgKG1ldGggPT0gRklQU19kcmJnX21ldGhvZCgp KQotKyAgICAgICAgICAgIGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMTsKLSsgICAgICAgIGVs c2UgaWYgKG1ldGggPT0gRklQU194OTMxX21ldGhvZCgpKQotKyAgICAgICAgICAgIGZpcHNfYXBw cm92ZWRfcmFuZF9tZXRoID0gMjsKLSsgICAgICAgIGVsc2UgewotKyAgICAgICAgICAgIGZpcHNf YXBwcm92ZWRfcmFuZF9tZXRoID0gMDsKLSsgICAgICAgICAgICBpZiAoRklQU19tb2R1bGVfbW9k ZSgpKSB7Ci0rICAgICAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TRVRfTUVU SE9ELCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsgICAgICAgICAgICAgICAgcmV0dXJuIDA7 Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgfQotKyAgICB9Ci0rICAgIGZpcHNfcmFuZF9tZXRo ID0gbWV0aDsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBT X3JhbmRfZ2V0X21ldGhvZCh2b2lkKQotK3sKLSsgICAgcmV0dXJuIGZpcHNfcmFuZF9tZXRoOwot K30KLSsKLStjb25zdCBSQU5EX01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKQotK3sKLSsg ICAgcmV0dXJuIEZJUFNfcmFuZF9nZXRfbWV0aG9kKCk7Ci0rfQotKwotK3ZvaWQgRklQU19yYW5k X3Jlc2V0KHZvaWQpCi0rewotKyAgICBpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21l dGgtPmNsZWFudXApCi0rICAgICAgICBmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCgpOwotK30KLSsK LStpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51 bSkKLSt7Ci0rICAgIGlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVf bW9kZSgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU0VFRCwgRklQU19S X05PTl9GSVBTX01FVEhPRCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgfQotKyAgICBpZiAo Zmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPnNlZWQpCi0rICAgICAgICBmaXBzX3Jh bmRfbWV0aC0+c2VlZChidWYsIG51bSk7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSt2b2lkIEZJ UFNfcmFuZF9hZGQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkKLSt7 Ci0rICAgIGlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgp KSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfQURELCBGSVBTX1JfTk9OX0ZJ UFNfTUVUSE9EKTsKLSsgICAgICAgIHJldHVybjsKLSsgICAgfQotKyAgICBpZiAoZmlwc19yYW5k X21ldGggJiYgZmlwc19yYW5kX21ldGgtPmFkZCkKLSsgICAgICAgIGZpcHNfcmFuZF9tZXRoLT5h ZGQoYnVmLCBudW0sIGVudHJvcHkpOwotK30KLSsKLStpbnQgRklQU19yYW5kX2J5dGVzKHVuc2ln bmVkIGNoYXIgKmJ1ZiwgRklQU19SQU5EX1NJWkVfVCBudW0pCi0rewotKyAgICBpZiAoIWZpcHNf YXBwcm92ZWRfcmFuZF9tZXRoICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgewotKyAgICAgICAgRklQ U2VycihGSVBTX0ZfRklQU19SQU5EX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsg ICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBz X3JhbmRfbWV0aC0+Ynl0ZXMpCi0rICAgICAgICByZXR1cm4gZmlwc19yYW5kX21ldGgtPmJ5dGVz KGJ1ZiwgbnVtKTsKLSsgICAgcmV0dXJuIDA7Ci0rfQotKwotK2ludCBGSVBTX3JhbmRfcHNldWRv X2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IG51bSkKLSt7Ci0rICAgIGlmICghZmlwc19h cHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKSB7Ci0rICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX1JBTkRfUFNFVURPX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9E KTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rICAgIGlmIChmaXBzX3JhbmRfbWV0aCAm JiBmaXBzX3JhbmRfbWV0aC0+cHNldWRvcmFuZCkKLSsgICAgICAgIHJldHVybiBmaXBzX3JhbmRf bWV0aC0+cHNldWRvcmFuZChidWYsIG51bSk7Ci0rICAgIHJldHVybiAtMTsKLSt9Ci0rCi0raW50 IEZJUFNfcmFuZF9zdGF0dXModm9pZCkKLSt7Ci0rICAgIGlmICghZmlwc19hcHByb3ZlZF9yYW5k X21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX1JBTkRfU1RBVFVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKLSsgICAgICAgIHJldHVy biAwOwotKyAgICB9Ci0rICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+ c3RhdHVzKQotKyAgICAgICAgcmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5zdGF0dXMoKTsKLSsgICAg cmV0dXJuIDA7Ci0rfQotKwotKy8qIFJldHVybiBpbnN0YW50aWF0ZWQgc3RyZW5ndGggb2YgUFJO Ry4gRm9yIERSQkcgdGhpcyBpcyBhbiBpbnRlcm5hbAotKyAqIHBhcmFtZXRlci4gRm9yIFg5LjMx IFBSTkcgaXQgaXMgODAgYml0cyAoZnJvbSBTUDgwMC0xMzEpLiBBbnkgb3RoZXIKLSsgKiB0eXBl IG9mIFBSTkcgaXMgbm90IGFwcHJvdmVkIGFuZCByZXR1cm5zIDAgaW4gRklQUyBtb2RlIGFuZCBt YXhpbXVtCi0rICogMjU2IG91dHNpZGUgRklQUyBtb2RlLgotKyAqLwotKwotK2ludCBGSVBTX3Jh bmRfc3RyZW5ndGgodm9pZCkKLSt7Ci0rICAgIGlmIChmaXBzX3JhbmRfYml0cykKLSsgICAgICAg IHJldHVybiBmaXBzX3JhbmRfYml0czsKLSsgICAgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRo ID09IDEpCi0rICAgICAgICByZXR1cm4gRklQU19kcmJnX2dldF9zdHJlbmd0aChGSVBTX2dldF9k ZWZhdWx0X2RyYmcoKSk7Ci0rICAgIGVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09 IDIpCi0rICAgICAgICByZXR1cm4gODA7Ci0rICAgIGVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFu ZF9tZXRoID09IDApIHsKLSsgICAgICAgIGlmIChGSVBTX21vZHVsZV9tb2RlKCkpCi0rICAgICAg ICAgICAgcmV0dXJuIDA7Ci0rICAgICAgICBlbHNlCi0rICAgICAgICAgICAgcmV0dXJuIDI1NjsK LSsgICAgfQotKyAgICByZXR1cm4gMDsKLSt9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlw dG8vZmlwcy9maXBzX3JhbmRfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9m aXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMv Zmlwc19yYW5kX3NlbGZ0ZXN0LmMuZmlwcwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyMjkxNjY1OSAr MDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5j CTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIyOTE2NjU5ICswMTAwCi1AQCAtMCwwICsxLDE3NiBAQAot Ky8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2pl Y3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZp Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp b25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgot KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg YWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1 dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBm ZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUg Zm9sbG93aW5nIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMg c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNl IGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoK LSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3Qi IG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4g cGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAg ICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCi0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBu b3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0 dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICog Ni4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhl IGZvbGxvd2luZwotKyAqICAgIGFja25vd2xlZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3Qg aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAg ICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcv KSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJP SkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsg KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wg UFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJP Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VW RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U UkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBP RiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwotKwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvcmFuZC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgotKyNp bmNsdWRlICJmaXBzX2xvY2wuaCIKLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rdHlwZWRl ZiBzdHJ1Y3QgewotKyAgICB1bnNpZ25lZCBjaGFyIERUWzE2XTsKLSsgICAgdW5zaWduZWQgY2hh ciBWWzE2XTsKLSsgICAgdW5zaWduZWQgY2hhciBSWzE2XTsKLSt9IEFFU19QUk5HX1RWOwotKwot Ky8qIFRoZSBmb2xsb3dpbmcgdGVzdCB2ZWN0b3JzIGFyZSB0YWtlbiBkaXJlY3RseSBmcm9tIHRo ZSBSR05WUyBzcGVjICovCi0rCi0rc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9rZXlbMTZd ID0KLSsgICAgeyAweGYzLCAweGIxLCAweDY2LCAweDZkLCAweDEzLCAweDYwLCAweDcyLCAweDQy LAotKyAgICAweGVkLCAweDA2LCAweDFjLCAweGFiLCAweGI4LCAweGQ0LCAweDYyLCAweDAyCi0r fTsKLSsKLStzdGF0aWMgQUVTX1BSTkdfVFYgYWVzXzEyOF90diA9IHsKLSsgICAgLyogRFQgKi8K LSsgICAgezB4ZTYsIDB4YjMsIDB4YmUsIDB4NzgsIDB4MmEsIDB4MjMsIDB4ZmEsIDB4NjIsCi0r ICAgICAweGQ3LCAweDFkLCAweDRhLCAweGZiLCAweGIwLCAweGU5LCAweDIyLCAweGY5fSwKLSsg ICAgLyogViAqLwotKyAgICB7MHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwKLSsgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDB9LAotKyAgICAvKiBSICovCi0rICAgIHsweDU5LCAweDUzLCAweDFlLCAweGQxLCAweDNi LCAweGIwLCAweGMwLCAweDU1LAotKyAgICAgMHg4NCwgMHg3OSwgMHg2NiwgMHg4NSwgMHhjMSwg MHgyZiwgMHg3NiwgMHg0MX0KLSt9OwotKwotK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJf a2V5WzI0XSA9Ci0rICAgIHsgMHgxNSwgMHhkOCwgMHg3OCwgMHgwZCwgMHg2MiwgMHhkMywgMHgy NSwgMHg2ZSwKLSsgICAgMHg0NCwgMHg2NCwgMHgxMCwgMHgxMywgMHg2MCwgMHgyYiwgMHhhOSwg MHhiYywKLSsgICAgMHg0YSwgMHhmYiwgMHhjYSwgMHhlYiwgMHg0YywgMHg4YiwgMHg5OSwgMHgz YgotK307Ci0rCi0rc3RhdGljIEFFU19QUk5HX1RWIGFlc18xOTJfdHYgPSB7Ci0rICAgIC8qIERU ICovCi0rICAgIHsweDNmLCAweGQ4LCAweGZmLCAweGU4LCAweDgwLCAweDY5LCAweDhiLCAweGMx LAotKyAgICAgMHhiZiwgMHg5OSwgMHg3ZCwgMHhhNCwgMHgyNCwgMHg3OCwgMHhmMywgMHg0Yn0s Ci0rICAgIC8qIFYgKi8KLSsgICAgezB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsCi0rICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLCAweDAwfSwKLSsgICAgLyogUiAqLwotKyAgICB7MHgxNywgMHgwNywgMHhkNSwgMHgyOCwg MHgxOSwgMHg3OSwgMHgxZSwgMHhlZiwKLSsgICAgIDB4YTUsIDB4MGMsIDB4YmYsIDB4MjUsIDB4 ZTUsIDB4NTYsIDB4YjQsIDB4OTN9Ci0rfTsKLSsKLStzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNf MjU2X2tleVszMl0gPQotKyAgICB7IDB4NmQsIDB4MTQsIDB4MDYsIDB4NmMsIDB4YjYsIDB4ZDgs IDB4MjEsIDB4MmQsCi0rICAgIDB4ODIsIDB4OGQsIDB4ZmEsIDB4ZjIsIDB4N2EsIDB4MDMsIDB4 YjcsIDB4OWYsCi0rICAgIDB4MGMsIDB4YzcsIDB4M2UsIDB4Y2QsIDB4NzYsIDB4ZWIsIDB4ZWUs IDB4YjUsCi0rICAgIDB4MjEsIDB4MDUsIDB4OGMsIDB4NGYsIDB4MzEsIDB4N2EsIDB4ODAsIDB4 YmIKLSt9OwotKwotK3N0YXRpYyBBRVNfUFJOR19UViBhZXNfMjU2X3R2ID0gewotKyAgICAvKiBE VCAqLwotKyAgICB7MHhkYSwgMHgzYSwgMHg0MSwgMHhlYywgMHgxZCwgMHhhMywgMHhiMCwgMHhk NSwKLSsgICAgIDB4ZjIsIDB4YTksIDB4NGUsIDB4MzQsIDB4NzQsIDB4OGUsIDB4OWUsIDB4ODh9 LAotKyAgICAvKiBWICovCi0rICAgIHsweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLAotKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMH0sCi0rICAgIC8qIFIgKi8KLSsgICAgezB4MzUsIDB4YzcsIDB4ZWYsIDB4YTcs IDB4NzgsIDB4NGQsIDB4MjksIDB4YmMsCi0rICAgICAweDgyLCAweDc5LCAweDk5LCAweGZiLCAw eGQwLCAweGIzLCAweDNiLCAweDcyfQotK307Ci0rCi0rdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKCkK LSt7Ci0rICAgIGFlc18xOTJfdHYuVlswXSsrOwotK30KLSsKLSsjIGRlZmluZSBmaXBzX3g5MzFf dGVzdChrZXksIHR2KSBcCi0rICAgICAgICBkb194OTMxX3Rlc3Qoa2V5LCBzaXplb2Yga2V5LCAm dHYpCi0rCi0rc3RhdGljIGludCBkb194OTMxX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQg a2V5bGVuLCBBRVNfUFJOR19UViAqIHR2KQotK3sKLSsgICAgdW5zaWduZWQgY2hhciBSWzE2XSwg VlsxNl07Ci0rICAgIGludCBydiA9IDE7Ci0rICAgIG1lbWNweShWLCB0di0+Viwgc2l6ZW9mKFYp KTsKLSsgICAgaWYgKCFGSVBTX3g5MzFfc2V0X2tleShrZXksIGtleWxlbikpCi0rICAgICAgICBy ZXR1cm4gMDsKLSsgICAgaWYgKCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfWDkzMSwga2V5 bGVuLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAxOwotKyAgICBpZiAoIWZpcHNfcG9zdF9jb3Jy dXB0KEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpKQotKyAgICAgICAgVlswXSsrOwotKyAg ICBGSVBTX3g5MzFfc2VlZChWLCAxNik7Ci0rICAgIEZJUFNfeDkzMV9zZXRfZHQodHYtPkRUKTsK LSsgICAgRklQU194OTMxX2J5dGVzKFIsIDE2KTsKLSsgICAgaWYgKG1lbWNtcChSLCB0di0+Uiwg MTYpKSB7Ci0rICAgICAgICBmaXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4s IE5VTEwpOwotKyAgICAgICAgcnYgPSAwOwotKyAgICB9IGVsc2UgaWYgKCFmaXBzX3Bvc3Rfc3Vj Y2VzcyhGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwot KyAgICByZXR1cm4gcnY7Ci0rfQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3g5MzEoKQotK3sKLSsg ICAgaW50IHJ2ID0gMTsKLSsgICAgRklQU194OTMxX3Jlc2V0KCk7Ci0rICAgIGlmICghRklQU194 OTMxX3Rlc3RfbW9kZSgpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNU X1g5MzEsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IH0KLSsgICAgaWYgKCFmaXBzX3g5MzFfdGVzdChhZXNfMTI4X2tleSwgYWVzXzEyOF90dikpCi0r ICAgICAgICBydiA9IDA7Ci0rICAgIGlmICghZmlwc194OTMxX3Rlc3QoYWVzXzE5Ml9rZXksIGFl c18xOTJfdHYpKQotKyAgICAgICAgcnYgPSAwOwotKyAgICBpZiAoIWZpcHNfeDkzMV90ZXN0KGFl c18yNTZfa2V5LCBhZXNfMjU2X3R2KSkKLSsgICAgICAgIHJ2ID0gMDsKLSsgICAgRklQU194OTMx X3Jlc2V0KCk7Ci0rICAgIGlmICghcnYpCi0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NF TEZURVNUX1g5MzEsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOwotKyAgICByZXR1cm4gcnY7Ci0r fQotKwotK2ludCBGSVBTX3NlbGZ0ZXN0X3JuZyh2b2lkKQotK3sKLSsgICAgcmV0dXJuIEZJUFNf c2VsZnRlc3RfeDkzMSgpOwotK30KLSsKLSsjZW5kaWYKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9m aXBzL2ZpcHNfcmFuZHRlc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNf cmFuZHRlc3QuYy5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIzOTE2NjgxICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCTIwMTYtMDMtMDEgMTY6 MzM6MDcuNjIzOTE2NjgxICswMTAwCi1AQCAtMCwwICsxLDI0NyBAQAotKy8qIENvcHlyaWdodCAo QykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQotKyAqIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0 aW9uIHdyaXR0ZW4KLSsgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCi0rICog VGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRz Y2FwZXMgU1NMLgotKyAqIAotKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFs IGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcwotKyAqIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFw cGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0 LCBSU0EsCi0rICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2Rl LiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCi0rICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1 dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcwotKyAqIGV4Y2VwdCB0 aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgotKyAqIAot KyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHly aWdodCBub3RpY2VzIGluCi0rICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgotKyAq IElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQg YmUgZ2l2ZW4gYXR0cmlidXRpb24KLSsgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0 aGUgbGlicmFyeSB1c2VkLgotKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVh bCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgotKyAqIGluIGRvY3VtZW50YXRpb24gKG9u bGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgotKyAqIAotKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAotKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotKyAqIGFyZSBtZXQ6Ci0rICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKLSsgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu Ci0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0rICogICAgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K LSsgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMgc29mdHdhcmUKLSsgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBh Y2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFw aGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKLSsgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29m dC5jb20pIgotKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQg aWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQotKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5v dCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgotKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBX aW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAotKyAq ICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVk ZSBhbiBhY2tub3dsZWRnZW1lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKLSsgKiAKLSsg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAot KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0rICogQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKLSsgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0rICogT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSsgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0rICog T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRgotKyAqIFNVQ0ggREFNQUdFLgotKyAqIAotKyAqIFRoZSBsaWNlbmNlIGFu ZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9u IG9yCi0rICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUu IHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCi0rICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5v dGhlciBkaXN0cmlidXRpb24gbGljZW5jZQotKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMg TGljZW5jZS5dCi0rICovCi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIwMDMg 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 PHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsj aW5jbHVkZSA8Y3R5cGUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1ZGUg PG9wZW5zc2wvZmlwc19yYW5kLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvYm4uaD4KLSsKLSsjaW5jbHVkZSAiZV9vcy5oIgotKwotKyNpZm5kZWYgT1BF TlNTTF9GSVBTCi0raW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLSt7Ci0rICAgIHBy aW50ZigiTm8gRklQUyBSQU5EIHN1cHBvcnRcbiIpOwotKyAgICByZXR1cm4gKDApOwotK30KLSsK LSsjZWxzZQotKwotKyMgaW5jbHVkZSAiZmlwc191dGwuaCIKLSsjIGluY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKwotK3R5cGVkZWYgc3RydWN0IHsKLSsgICAgdW5zaWduZWQgY2hhciBEVFsxNl07 Ci0rICAgIHVuc2lnbmVkIGNoYXIgVlsxNl07Ci0rICAgIHVuc2lnbmVkIGNoYXIgUlsxNl07Ci0r fSBBRVNfUFJOR19NQ1Q7Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9t Y3Rfa2V5WzE2XSA9Ci0rICAgIHsgMHg5ZiwgMHg1YiwgMHg1MSwgMHgyMCwgMHgwYiwgMHhmMywg MHgzNCwgMHhiNSwKLSsgICAgMHhkOCwgMHgyYiwgMHhlOCwgMHhjMywgMHg3MiwgMHg1NSwgMHhj OCwgMHg0OAotK307Ci0rCi0rc3RhdGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMTI4X21jdF90 diA9IHsKLSsgICAgLyogRFQgKi8KLSsgICAgezB4NjMsIDB4NzYsIDB4YmIsIDB4ZTUsIDB4Mjks IDB4MDIsIDB4YmEsIDB4M2IsCi0rICAgICAweDY3LCAweGM5LCAweDI1LCAweGZhLCAweDcwLCAw eDFmLCAweDExLCAweGFjfSwKLSsgICAgLyogViAqLwotKyAgICB7MHg1NywgMHgyYywgMHg4ZSwg MHg3NiwgMHg4NywgMHgyNiwgMHg0NywgMHg5NywKLSsgICAgIDB4N2UsIDB4NzQsIDB4ZmIsIDB4 ZGQsIDB4YzQsIDB4OTUsIDB4MDEsIDB4ZDF9LAotKyAgICAvKiBSICovCi0rICAgIHsweDQ4LCAw eGU5LCAweGJkLCAweDBkLCAweDA2LCAweGVlLCAweDE4LCAweGZiLAotKyAgICAgMHhlNCwgMHg1 NywgMHg5MCwgMHhkNSwgMHhjMywgMHhmYywgMHg5YiwgMHg3M30KLSt9OwotKwotK3N0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbWN0X2tleVsyNF0gPQotKyAgICB7IDB4YjcsIDB4 NmMsIDB4MzQsIDB4ZDEsIDB4MDksIDB4NjcsIDB4YWIsIDB4NzMsCi0rICAgIDB4NGQsIDB4NWEs IDB4ZDUsIDB4MzQsIDB4OTgsIDB4MTYsIDB4MGIsIDB4OTEsCi0rICAgIDB4YmMsIDB4MzUsIDB4 NTEsIDB4MTYsIDB4NmIsIDB4YWUsIDB4OTMsIDB4OGEKLSt9OwotKwotK3N0YXRpYyBjb25zdCBB RVNfUFJOR19NQ1QgYWVzXzE5Ml9tY3RfdHYgPSB7Ci0rICAgIC8qIERUICovCi0rICAgIHsweDg0 LCAweGNlLCAweDIyLCAweDdkLCAweDkxLCAweDVhLCAweGEzLCAweGM5LAotKyAgICAgMHg4NCwg MHgzYywgMHgwYSwgMHhiMywgMHhhOSwgMHg2MywgMHgxNSwgMHg1Mn0sCi0rICAgIC8qIFYgKi8K LSsgICAgezB4YjYsIDB4YWYsIDB4ZTYsIDB4OGYsIDB4OTksIDB4OWUsIDB4OTAsIDB4NjQsCi0r ICAgICAweGRkLCAweGM3LCAweDdhLCAweGMxLCAweGJiLCAweDkwLCAweDNhLCAweDZkfSwKLSsg ICAgLyogUiAqLwotKyAgICB7MHhmYywgMHg4NSwgMHg2MCwgMHg5YSwgMHgyOSwgMHg2ZiwgMHhl ZiwgMHgyMSwKLSsgICAgIDB4ZGQsIDB4ODYsIDB4MjAsIDB4MzIsIDB4OGEsIDB4MjksIDB4NmYs IDB4NDd9Ci0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X21jdF9r ZXlbMzJdID0KLSsgICAgeyAweDliLCAweDA1LCAweGM4LCAweDY4LCAweGZmLCAweDQ3LCAweGY4 LCAweDNhLAotKyAgICAweGE2LCAweDNhLCAweGE4LCAweGNiLCAweDRlLCAweDcxLCAweGIyLCAw eGUwLAotKyAgICAweGI4LCAweDdlLCAweGYxLCAweDM3LCAweGI2LCAweGI0LCAweGY2LCAweDZk LAotKyAgICAweDg2LCAweDMyLCAweGZjLCAweDFmLCAweDVlLCAweDFkLCAweDFlLCAweDUwCi0r fTsKLSsKLStzdGF0aWMgY29uc3QgQUVTX1BSTkdfTUNUIGFlc18yNTZfbWN0X3R2ID0gewotKyAg ICAvKiBEVCAqLwotKyAgICB7MHgzMSwgMHg2ZSwgMHgzNSwgMHg5YSwgMHhiMSwgMHg0NCwgMHhm MCwgMHhlZSwKLSsgICAgIDB4NjIsIDB4NmQsIDB4MDQsIDB4NDYsIDB4ZTAsIDB4YTMsIDB4OTIs IDB4NGN9LAotKyAgICAvKiBWICovCi0rICAgIHsweDRmLCAweGNkLCAweGMxLCAweDg3LCAweDgy LCAweDFmLCAweDRkLCAweGExLAotKyAgICAgMHgzZSwgMHgwZSwgMHg1NiwgMHg0NCwgMHg1OSwg MHhlOCwgMHg4MywgMHhjYX0sCi0rICAgIC8qIFIgKi8KLSsgICAgezB4YzgsIDB4ODcsIDB4YzIs IDB4NjEsIDB4NWIsIDB4ZDAsIDB4YjksIDB4ZTEsCi0rICAgICAweGU3LCAweGYzLCAweDhiLCAw eGQ3LCAweDViLCAweGQ1LCAweGYxLCAweDhkfQotK307Ci0rCi0rc3RhdGljIHZvaWQgZHVtcChj b25zdCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgbikKLSt7Ci0rICAgIHdoaWxlIChuLS0gPiAwKSB7 Ci0rICAgICAgICBwcmludGYoIiAlMDJ4IiwgKmIrKyk7Ci0rICAgIH0KLSt9Ci0rCi0rc3RhdGlj IHZvaWQgY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsCi0rICAgICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHBlY3RlZCwgaW50IG4pCi0rewotKyAgICBp bnQgaTsKLSsKLSsgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKLSsgICAgICAgIGlmIChyZXN1 bHRbaV0gIT0gZXhwZWN0ZWRbaV0pIHsKLSsgICAgICAgICAgICBwdXRzKCJSYW5kb20gdGVzdCBm YWlsZWQsIGdvdDoiKTsKLSsgICAgICAgICAgICBkdW1wKHJlc3VsdCwgbik7Ci0rICAgICAgICAg ICAgcHV0cygiXG4gICAgICAgICAgICAgICBleHBlY3RlZDoiKTsKLSsgICAgICAgICAgICBkdW1w KGV4cGVjdGVkLCBuKTsKLSsgICAgICAgICAgICBwdXRjaGFyKCdcbicpOwotKyAgICAgICAgICAg IEVYSVQoMSk7Ci0rICAgICAgICB9Ci0rfQotKwotK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwKLSsgICAgICAgICAgICAgICAgICAgICBj b25zdCBBRVNfUFJOR19NQ1QgKiB0dikKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XSwg ZHRbMTZdOwotKyAgICBpbnQgaSwgajsKLSsgICAgRklQU194OTMxX3Jlc2V0KCk7Ci0rICAgIEZJ UFNfeDkzMV90ZXN0X21vZGUoKTsKLSsgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4p OwotKyAgICBGSVBTX3g5MzFfc2VlZCh0di0+ViwgMTYpOwotKyAgICBtZW1jcHkoZHQsIHR2LT5E VCwgMTYpOwotKyAgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewotKyAgICAgICAgRklQ U194OTMxX3NldF9kdChkdCk7Ci0rICAgICAgICBGSVBTX3g5MzFfYnl0ZXMoYnVmLCAxNik7Ci0r ICAgICAgICAvKiBJbmNyZW1lbnQgRFQgKi8KLSsgICAgICAgIGZvciAoaiA9IDE1OyBqID49IDA7 IGotLSkgewotKyAgICAgICAgICAgIGR0W2pdKys7Ci0rICAgICAgICAgICAgaWYgKGR0W2pdKQot KyAgICAgICAgICAgICAgICBicmVhazsKLSsgICAgICAgIH0KLSsgICAgfQotKwotKyAgICBjb21w YXJlKGJ1ZiwgdHYtPlIsIDE2KTsKLSt9Ci0rCi0raW50IG1haW4oKQotK3sKLSsgICAgcnVuX3Rl c3QoYWVzXzEyOF9tY3Rfa2V5LCAxNiwgJmFlc18xMjhfbWN0X3R2KTsKLSsgICAgcHJpbnRmKCJG SVBTIFBSTkcgdGVzdCAxIGRvbmVcbiIpOwotKyAgICBydW5fdGVzdChhZXNfMTkyX21jdF9rZXks IDI0LCAmYWVzXzE5Ml9tY3RfdHYpOwotKyAgICBwcmludGYoIkZJUFMgUFJORyB0ZXN0IDIgZG9u ZVxuIik7Ci0rICAgIHJ1bl90ZXN0KGFlc18yNTZfbWN0X2tleSwgMzIsICZhZXNfMjU2X21jdF90 dik7Ci0rICAgIHByaW50ZigiRklQUyBQUk5HIHRlc3QgMyBkb25lXG4iKTsKLSsgICAgcmV0dXJu IDA7Ci0rfQotKwotKyNlbmRpZgotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMv Zmlwc19yc2Ffc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNf cnNhX3NlbGZ0ZXN0LmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3JzYV9z ZWxmdGVzdC5jLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy42MjM5MTY2ODEgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCTIwMTYtMDMtMDEg MTY6MzM6MDcuNjIzOTE2NjgxICswMTAwCi1AQCAtMCwwICsxLDQ0NCBAQAotKy8qID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0rICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs bCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsg KiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgot KyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQu IFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBu b3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0rICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNz aW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5z c2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkg Ik9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsg KiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRp c3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93 aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAq Ci0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBg QVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBP U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNU IE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS RUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAot KyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg REFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1ZGUgPHN0cmluZy5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgotKyNlbmRpZgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgotKyNpbmNsdWRlIDxv cGVuc3NsL2V2cC5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Ci0rI2luY2x1ZGUgPG9wZW5z c2wvb3BlbnNzbGNvbmYuaD4KLSsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rCi0rc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgbltdID0KLSsgICAgIlx4MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4 ODJceENFXHg5Q1x4MjNceDM4XHhBQ1x4MkJceDlEXHhBOFx4NzEiCi0rICAgICJceEY3XHgzNlx4 OERceDA3XHhFRVx4RDRceDEwXHg0M1x4QTRceDQwXHhENlx4QjZceEYwXHg3NFx4NTRceEY1Igot KyAgICAiXHgxRlx4QjhceERGXHhCQVx4QUZceDAzXHg1Q1x4MDJceEFCXHg2MVx4RUFceDQ4XHhD RVx4RUJceDZGXHhDRCIKLSsgICAgIlx4NDhceDc2XHhFRFx4NTJceDBEXHg2MFx4RTFceEVDXHg0 Nlx4MTlceDcxXHg5RFx4OEFceDVCXHg4Qlx4ODAiCi0rICAgICJceDdGXHhBRlx4QjhceEUwXHhB M1x4REZceEM3XHgzN1x4NzJceDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1IgotKyAgICAiXHg4 NFx4RUVceDZBXHg2NFx4OURceDA2XHgwOVx4NTNceDc0XHg4OFx4MzRceEIyXHg0NVx4NDVceDk4 XHgzOSIKLSsgICAgIlx4NEVceEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4NTJceDdB XHg5QVx4NDFceEY2XHhDMVx4NjgiCi0rICAgICJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJB XHg4Rlx4NTlceDQ2XHhGOFx4RTVceEZEXHgwOVx4MURceEJEIiAiXHhDQiI7Ci0rCi0rc3RhdGlj IGludCBjb3JydXB0X3JzYTsKLSsKLStzdGF0aWMgaW50IHNldHJzYWtleShSU0EgKmtleSkKLSt7 Ci0rICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKLSsKLSsgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZFtdID0KLSsgICAgICAgICJceDAwXHhBNVx4REFc eEZDXHg1M1x4NDFceEZBXHhGMlx4ODlceEM0XHhCOVx4ODhceERCXHgzMFx4QzFceENEIgotKyAg ICAgICAgIlx4RjhceDNGXHgzMVx4MjVceDFFXHgwNlx4NjhceEI0XHgyN1x4ODRceDgxXHgzOFx4 MDFceDU3XHg5Nlx4NDEiCi0rICAgICAgICAiXHhCMlx4OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4 NkJceEM0XHg2NVx4NzRceDVFXHg1Q1x4MzlceDI2XHg2OSIKLSsgICAgICAgICJceEQ2XHg4N1x4 MERceEEyXHhDMFx4ODJceEE5XHgzOVx4RTNceDdGXHhEQ1x4QjhceDJFXHhDOVx4M0VceERBIgot KyAgICAgICAgIlx4QzlceDdGXHhGM1x4QURceDU5XHg1MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3 Nlx4RjFceEE5XHg1Mlx4OTQiCi0rICAgICAgICAiXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2 Q1x4MDlceDJDXHhEM1x4OERceEMzXHhCRVx4RjVceEQyXHgwQSIKLSsgICAgICAgICJceDkzXHg5 OVx4MjZceEVEXHg0Rlx4NzRceEExXHgzRVx4RERceEZCXHhFMVx4QTFceENFXHhDQ1x4NDhceDk0 IgotKyAgICAgICAgIlx4QUZceDk0XHgyOFx4QzJceEI3XHhCOFx4ODhceDNGXHhFNFx4NDZceDNB XHg0Qlx4QzhceDVCXHgxQ1x4QjMiCi0rICAgICAgICAiXHhDMSI7Ci0rCi0rICAgIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9Ci0rICAgICAgICAiXHgwMFx4RUVceENGXHhBRVx4ODFc eEIxXHhCOVx4QjNceEM5XHgwOFx4ODFceDBCXHgxMFx4QTFceEI1XHg2MCIKLSsgICAgICAgICJc eDAxXHg5OVx4RUJceDlGXHg0NFx4QUVceEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgzRFx4 ODRceEY2IgotKyAgICAgICAgIlx4MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFFXHgzQlx4 N0VceDI4XHhGQVx4RTdceEFBXHgwNFx4MEEiCi0rICAgICAgICAiXHgyRFx4NUJceDI1XHgyMVx4 NzZceDQ1XHg5RFx4MUZceDM5XHg3NVx4NDFceEJBXHgyQVx4NThceEZCXHg2NSIKLSsgICAgICAg ICJceDk5IjsKLSsKLSsgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcVtdID0KLSsgICAg ICAgICJceDAwXHhDOVx4N0ZceEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVB XHhBQVx4RDFceEQ5IgotKyAgICAgICAgIlx4MzVceDNGXHg2Q1x4NDJceEQwXHg4OFx4NjZceEIx XHhEMFx4NUFceDBGXHgyMFx4MzVceDAyXHg4Qlx4OUQiCi0rICAgICAgICAiXHg4Nlx4OThceDQw XHhCNFx4MTZceDY2XHhCNFx4MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJceDA0XHhCNSIKLSsg ICAgICAgICJceENGXHhDRVx4MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVceEE0XHg0MVx4RTdc eDAwXHhBRlx4NDZceDE1IgotKyAgICAgICAgIlx4MDMiOwotKwotKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBkbXAxW10gPQotKyAgICAgICAgIlx4NTRceDQ5XHg0Q1x4QTZceDNFXHhC QVx4MDNceDM3XHhFNFx4RTJceDQwXHgyM1x4RkNceEQ2XHg5QVx4NUEiCi0rICAgICAgICAiXHhF Qlx4MDdceEREXHhEQ1x4MDFceDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIx XHgzRSIKLSsgICAgICAgICJceEQ5XHg0OVx4MDlceDc1XHhFQVx4QjdceDc0XHgxNFx4RkZceDU5 XHhDMVx4RjdceDY5XHgyRVx4OUFceDJFIgotKyAgICAgICAgIlx4MjBceDJCXHgzOFx4RkNceDkx XHgwQVx4NDdceDQxXHg3NFx4QURceEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEiOwotKwotKyAgICBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXExW10gPQotKyAgICAgICAgIlx4NDdceDFFXHgw Mlx4OTBceEZGXHgwQVx4RjBceDc1XHgwM1x4NTFceEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCi0r ICAgICAgICAiXHg2MVx4QURceEJEXHgzQVx4OEFceDdFXHg5OVx4MUNceDVDXHgwNVx4NTZceEE5 XHg0Q1x4MzFceDQ2XHhBNyIKLSsgICAgICAgICJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUz XHg0Mlx4RTlceDMxXHhGRFx4OEFceEU0XHg3QVx4MjJceDBEIgotKyAgICAgICAgIlx4MUJceDk5 XHhBNFx4OTVceDg0XHg5OFx4MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0Qi OwotKwotKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10gPQotKyAgICAgICAg Ilx4MDBceEIwXHg2Q1x4NEZceERBXHhCQlx4NjNceDAxXHgxOVx4OERceDI2XHg1Qlx4REJceEFF XHg5NFx4MjMiCi0rICAgICAgICAiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUw XHg5M1x4MDdceDdGXHhDRFx4MzlceEUyXHgxMSIKLSsgICAgICAgICJceDlGXHhDOVx4ODZceDMy XHgxNVx4NEZceDU4XHg4M1x4QjFceDY3XHhBOVx4NjdceEJGXHg0MFx4MkJceDRFIgotKyAgICAg ICAgIlx4OUVceDJFXHgwRlx4OTZceDU2XHhFNlx4OThceEVBXHgzNlx4NjZceEVEXHhGQlx4MjVc eDc5XHg4MFx4MzkiCi0rICAgICAgICAiXHhGNyI7Ci0rCi0rICAgIGtleS0+biA9IEJOX2JpbjJi bihuLCBzaXplb2YobikgLSAxLCBrZXktPm4pOwotKyAgICBpZiAoY29ycnVwdF9yc2EpCi0rICAg ICAgICBCTl9zZXRfYml0KGtleS0+biwgMTAyNCk7Ci0rICAgIGtleS0+ZSA9IEJOX2JpbjJibihl LCBzaXplb2YoZSkgLSAxLCBrZXktPmUpOwotKyAgICBrZXktPmQgPSBCTl9iaW4yYm4oZCwgc2l6 ZW9mKGQpIC0gMSwga2V5LT5kKTsKLSsgICAga2V5LT5wID0gQk5fYmluMmJuKHAsIHNpemVvZihw KSAtIDEsIGtleS0+cCk7Ci0rICAgIGtleS0+cSA9IEJOX2JpbjJibihxLCBzaXplb2YocSkgLSAx LCBrZXktPnEpOwotKyAgICBrZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6ZW9mKGRtcDEp IC0gMSwga2V5LT5kbXAxKTsKLSsgICAga2V5LT5kbXExID0gQk5fYmluMmJuKGRtcTEsIHNpemVv ZihkbXExKSAtIDEsIGtleS0+ZG1xMSk7Ci0rICAgIGtleS0+aXFtcCA9IEJOX2JpbjJibihpcW1w LCBzaXplb2YoaXFtcCkgLSAxLCBrZXktPmlxbXApOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0r dm9pZCBGSVBTX2NvcnJ1cHRfcnNhKCkKLSt7Ci0rICAgIGNvcnJ1cHRfcnNhID0gMTsKLSt9Ci0r Ci0rLyogS25vd24gQW5zd2VyIFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3ZlIFJTQSBwcml2 YXRlIGtleSBzaWduaW5nCi0rICoga2F0X3Ricy4KLSsgKi8KLSsKLStzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBrYXRfdGJzW10gPQotKyAgICAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBL ZXkgUlNBIEtBVCI7Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1Nf U0hBMVtdID0gewotKyAgICAweDJELCAweEFGLCAweDZFLCAweEMyLCAweDk4LCAweEZCLCAweDhB LCAweEExLCAweEI5LCAweDQ2LCAweERBLCAweDBGLAotKyAgICAweDAxLCAweDFFLCAweDM3LCAw eDkzLCAweEMyLCAweDU1LCAweDI3LCAweEU0LCAweDFELCAweEQyLCAweDkwLCAweEJCLAotKyAg ICAweEY0LCAweEJGLCAweDRBLCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAw eEI3LCAweEY4LCAweEQzLAotKyAgICAweEQxLCAweERGLCAweEU3LCAweEJFLCAweDgwLCAweDA1 LCAweEMzLCAweEI1LCAweEM3LCAweDgzLCAweEQ1LCAweDRDLAotKyAgICAweDdGLCAweDQ5LCAw eEZCLCAweDNGLCAweDI5LCAweDlCLCAweEUxLCAweDEyLCAweDUxLCAweDYwLCAweEQwLCAweEE3 LAotKyAgICAweDBELCAweEE5LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAw eDVFLCAweDNGLCAweDlCLCAweEY1LAotKyAgICAweEI2LCAweEYzLCAweEYyLCAweDVFLCAweDc0 LCAweEM5LCAweDgzLCAweDgxLCAweDQ3LCAweEYwLCAweEM1LCAweDQ1LAotKyAgICAweDBBLCAw eEU5LCAweDhFLCAweDM4LCAweEQ3LCAweDE4LCAweEM2LCAweDJBLCAweDBGLCAweEY4LCAweEI3 LCAweDMxLAotKyAgICAweEQ2LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAw eEU2LCAweERCLCAweDlGLCAweEJBLCAweEU4LAotKyAgICAweDIzLCAweEI1LCAweDdGLCAweERD LCAweDA4LCAweEVBLCAweEQ1LCAweDI2LCAweDFFLCAweDIwLCAweDI1LCAweDg0LAotKyAgICAw eDI2LCAweEM2LCAweDc5LCAweEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5Ci0rfTsKLSsKLStz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9IHsKLSsgICAg MHgzOSwgMHg0QSwgMHg2QSwgMHgyMCwgMHhCQywgMHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhD NSwgMHg1OCwgMHhBNywKLSsgICAgMHhGRSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5QSwg MHgyQywgMHg4MiwgMHg5OCwgMHgwOCwgMHg5NSwgMHhGQSwKLSsgICAgMHhCMSwgMHg5RSwgMHhE MiwgMHg1NSwgMHg2MSwgMHg4NywgMHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1NywK LSsgICAgMHgzMCwgMHg5RCwgMHgwRCwgMHg0QSwgMHgwNiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1 NSwgMHg1NCwgMHgxQywgMHg4OSwKLSsgICAgMHg4MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2NCwg MHg5MCwgMHgyRSwgMHgxNiwgMHhDQywgMHg4NiwgMHgwNSwgMHhFRSwKLSsgICAgMHhCMSwgMHhF NiwgMHg3QiwgMHhCQSwgMHgxNiwgMHg3NSwgMHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwg MHgyMiwKLSsgICAgMHgxNSwgMHg3OCwgMHg2QiwgMHg2RiwgMHhBNCwgMHhGQiwgMHg3NywgMHg0 MCwgMHg2NCwgMHg2MiwgMHhEMSwgMHhCNSwKLSsgICAgMHgzNywgMHgxRSwgMHhFMCwgMHgzRCwg MHhBOCwgMHhGOSwgMHhEMiwgMHhCRCwgMHhBQSwgMHgzOCwgMHgyNCwgMHg0OSwKLSsgICAgMHg1 OCwgMHhEMiwgMHg3NCwgMHg4NSwgMHhGNCwgMHhCNSwgMHg5MywgMHg4RSwgMHhGNSwgMHgwMywg MHhFQSwgMHgyRCwKLSsgICAgMHhDOCwgMHg1MiwgMHhGQSwgMHhDRiwgMHg3RSwgMHgzNSwgMHhC MCwgMHg2QSwgMHhBRiwgMHg5NSwgMHhDMCwgMHgwMCwKLSsgICAgMHg1NCwgMHg3NiwgMHgzRCwg MHgwQywgMHg5QywgMHhCMiwgMHhFRSwgMHhDMAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMjU2W10gPSB7Ci0rICAgIDB4NkQsIDB4M0QsIDB4QkUs IDB4OEYsIDB4NjAsIDB4NkQsIDB4MjUsIDB4MTQsIDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCi0r ICAgIDB4MDAsIDB4OTcsIDB4RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUsIDB4MTAsIDB4MjUs IDB4OUEsIDB4RjMsIDB4OEYsCi0rICAgIDB4N0IsIDB4QzUsIDB4QTgsIDB4NEEsIDB4NzQsIDB4 NTEsIDB4MzYsIDB4RTIsIDB4OEQsIDB4N0QsIDB4NzMsIDB4MjgsCi0rICAgIDB4QzEsIDB4Nzcs IDB4QzYsIDB4MjcsIDB4OTcsIDB4MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4OTYsIDB4NzMsIDB4 NEUsCi0rICAgIDB4N0QsIDB4MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUsIDB4REYs IDB4OUQsIDB4NDksIDB4NDcsIDB4MDUsCi0rICAgIDB4QUIsIDB4RjUsIDB4MDEsIDB4RDYsIDB4 ODEsIDB4NDcsIDB4NzAsIDB4RjUsIDB4MUQsIDB4NkQsIDB4MjYsIDB4QkEsCi0rICAgIDB4MkYs IDB4N0EsIDB4NTQsIDB4NTMsIDB4NEUsIDB4RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4RjMsIDB4 REEsIDB4QjYsCi0rICAgIDB4MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4Qzgs IDB4RDksIDB4NkYsIDB4NTYsIDB4Q0QsIDB4OUYsCi0rICAgIDB4MjEsIDB4QjcsIDB4N0UsIDB4 QUQsIDB4N0MsIDB4MkYsIDB4NzUsIDB4NTAsIDB4NDcsIDB4MTIsIDB4RTQsIDB4NkQsCi0rICAg IDB4NUYsIDB4QjcsIDB4MDEsIDB4REYsIDB4QzMsIDB4MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4 NDksIDB4QjksIDB4RjYsCi0rICAgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUs IDB4MkQsIDB4MUMKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff UFNTX1NIQTM4NFtdID0gewotKyAgICAweDQwLCAweEZCLCAweEExLCAweDIxLCAweEY0LCAweEIy LCAweDQwLCAweDlBLCAweEI0LCAweDMxLCAweEE4LCAweEYyLAotKyAgICAweEVDLCAweDFDLCAw eEM0LCAweEM4LCAweDdDLCAweDIyLCAweDY1LCAweDlDLCAweDU3LCAweDQ1LCAweENELCAweDVF LAotKyAgICAweDg2LCAweDAwLCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAw eDcxLCAweDQ0LCAweDlBLCAweENELAotKyAgICAweEFBLCAweDI1LCAweEY0LCAweEIyLCAweEZD LCAweEYwLCAweDc1LCAweEQ5LCAweDJGLCAweDc4LCAweDIzLCAweDdGLAotKyAgICAweDZGLCAw eDAyLCAweEVGLCAweEMxLCAweEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMxLCAweERDLCAweDQy LCAweDZDLAotKyAgICAweEIyLCAweDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAw eDcxLCAweEYzLCAweEFDLCAweDRGLCAweEZCLAotKyAgICAweDkxLCAweENBLCAweEY1LCAweDcw LCAweEVGLCAweDZCLCAweDlELCAweEE0LCAweEVGLCAweEQ5LCAweDNELCAweDJGLAotKyAgICAw eDNBLCAweEJFLCAweDg5LCAweDM4LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMyLCAweEFE LCAweDQyLCAweDg5LAotKyAgICAweDk4LCAweDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAw eDM4LCAweEFDLCAweDg3LCAweDFGLCAweENBLCAweDZGLAotKyAgICAweDQ4LCAweEY2LCAweEFF LCAweEQ3LCAweDQ1LCAweEVFLCAweEFFLCAweDg4LCAweDBFLCAweDYwLCAweEY0LCAweDU1LAot KyAgICAweDQ4LCAweDQ0LCAweEVFLCAweDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYxCi0rfTsK LSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsK LSsgICAgMHgwNywgMHgxRSwgMHhEOCwgMHhENSwgMHgwNSwgMHhFOCwgMHhFNiwgMHhFNiwgMHg1 NywgMHhBRSwgMHg2MywgMHg4QywKLSsgICAgMHhDNiwgMHg4MywgMHhCNywgMHhBMCwgMHg1OSwg MHhCQiwgMHhGMiwgMHhDNiwgMHg4RiwgMHgxMiwgMHg1MywgMHg5QSwKLSsgICAgMHg5QiwgMHg1 NCwgMHg5RSwgMHhCMywgMHhDMSwgMHgxRCwgMHgyMywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwg MHhERCwKLSsgICAgMHg0QiwgMHhGMywgMHg0NiwgMHg5QiwgMHg2QiwgMHhGNiwgMHg3QywgMHgy NCwgMHg2MCwgMHg3OSwgMHgyMywgMHgzOSwKLSsgICAgMHgwMSwgMHgxQywgMHg1MSwgMHhDQiwg MHhEOCwgMHhFOSwgMHg5QSwgMHgwMSwgMHg2NywgMHg1RiwgMHhGRSwgMHhENywKLSsgICAgMHg3 QywgMHhFMywgMHg3RiwgMHhFRCwgMHhEQiwgMHg4NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3OCwg MHg1NSwgMHg2MSwKLSsgICAgMHg1NywgMHhFMywgMHgwRiwgMHhFMywgMHhEMiwgMHg5RCwgMHgw QywgMHgyQSwgMHgyMCwgMHhCMCwgMHg4NSwgMHgxMywKLSsgICAgMHhDNSwgMHg0NywgMHgzNCwg MHgwRCwgMHgzMiwgMHgxNSwgMHhDOCwgMHhBRSwgMHg5QSwgMHg2QSwgMHgzOSwgMHg2MywKLSsg ICAgMHgyRCwgMHg2MCwgMHhGNSwgMHg0QywgMHhERiwgMHg4QSwgMHg0OCwgMHg0QiwgMHhCRiwg MHhGNCwgMHhBOCwgMHhGRSwKLSsgICAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwgMHg5QywgMHg3 QywgMHhDQSwgMHhGRSwgMHg3RiwgMHg4MCwgMHhDMiwgMHg4OCwKLSsgICAgMHg1QywgMHg5Nywg MHg3MCwgMHhCNCwgMHgyNiwgMHhDOSwgMHgxNCwgMHg4QgotK307Ci0rCi0rc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9TSEExW10gPSB7Ci0rICAgIDB4NzEsIDB4RUUsIDB4MUEs IDB4QzAsIDB4RkUsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NzksIDB4NUMsIDB4RjIsIDB4NEMsCi0r ICAgIDB4NEEsIDB4RkQsIDB4MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4NjEs IDB4MzMsIDB4OEQsIDB4OUIsCi0rICAgIDB4RTcsIDB4RkQsIDB4NjAsIDB4QTMsIDB4ODMsIDB4 QjUsIDB4QTMsIDB4NTEsIDB4NTUsIDB4NzcsIDB4OTAsIDB4Q0YsCi0rICAgIDB4REMsIDB4MjIs IDB4MzcsIDB4OEUsIDB4RDAsIDB4RTEsIDB4QUUsIDB4MDksIDB4RTMsIDB4M0QsIDB4MUUsIDB4 RjgsCi0rICAgIDB4ODAsIDB4RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIs IDB4ODgsIDB4OEIsIDB4OEIsIDB4QTEsCi0rICAgIDB4MjAsIDB4MjIsIDB4QkUsIDB4NTksIDB4 NUIsIDB4RTAsIDB4MjMsIDB4MjQsIDB4QTEsIDB4NDksIDB4MzAsIDB4QkEsCi0rICAgIDB4QTks IDB4OUUsIDB4RTgsIDB4QjEsIDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUsIDB4Q0EsIDB4 MkUsIDB4NEUsCi0rICAgIDB4QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYs IDB4MUQsIDB4MDQsIDB4NDQsIDB4RTUsIDB4NUYsCi0rICAgIDB4MzUsIDB4MDcsIDB4MTEsIDB4 QkMsIDB4RUQsIDB4MTksIDB4MzcsIDB4MjEsIDB4Q0YsIDB4MjMsIDB4NDgsIDB4MUYsCi0rICAg IDB4NzIsIDB4MDUsIDB4REUsIDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYsIDB4 NEIsIDB4MkYsIDB4OTUsCi0rICAgIDB4REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDks IDB4NDYsIDB4QjQKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0Ff U0hBMjI0W10gPSB7Ci0rICAgIDB4NjIsIDB4QUEsIDB4NzksIDB4QTksIDB4MTgsIDB4MEUsIDB4 NUYsIDB4OEMsIDB4QkIsIDB4QjcsIDB4MTUsIDB4RjksCi0rICAgIDB4MjUsIDB4QkIsIDB4RkEs IDB4RDQsIDB4M0EsIDB4MzQsIDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgsIDB4OEQsCi0r ICAgIDB4NUIsIDB4NTUsIDB4OUEsIDB4N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUs IDB4MUEsIDB4QzUsIDB4ODksCi0rICAgIDB4MDgsIDB4RTIsIDB4MUIsIDB4QkQsIDB4NjIsIDB4 NTAsIDB4MTcsIDB4NzYsIDB4MzAsIDB4MkMsIDB4OUUsIDB4Q0QsCi0rICAgIDB4QTQsIDB4MDIs IDB4QUQsIDB4QjEsIDB4NkQsIDB4NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEsIDB4 RTUsCi0rICAgIDB4RUUsIDB4MUYsIDB4OEQsIDB4N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEs IDB4NUUsIDB4MEIsIDB4QTksIDB4Q0MsCi0rICAgIDB4REIsIDB4NTksIDB4NTUsIDB4ODcsIDB4 MDksIDB4MjUsIDB4NzAsIDB4ODYsIDB4ODQsIDB4MDIsIDB4QzYsIDB4M0IsCi0rICAgIDB4MEIs IDB4NDQsIDB4NEMsIDB4NDYsIDB4OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4 M0UsIDB4QjIsCi0rICAgIDB4NTgsIDB4MkUsIDB4MDYsIDB4NDUsIDB4NDksIDB4RTAsIDB4OTIs IDB4RTIsIDB4QzAsIDB4NjYsIDB4RTYsIDB4MzUsCi0rICAgIDB4RDksIDB4NzksIDB4N0YsIDB4 MTcsIDB4NUUsIDB4MDIsIDB4NzMsIDB4MDQsIDB4NzcsIDB4ODIsIDB4RTYsIDB4REMsCi0rICAg IDB4NDAsIDB4MjEsIDB4ODksIDB4OEIsIDB4MzcsIDB4M0UsIDB4MUUsIDB4OEQKLSt9OwotKwot K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjU2W10gPSB7Ci0rICAgIDB4 MEQsIDB4NTUsIDB4RTIsIDB4QUEsIDB4ODEsIDB4REIsIDB4OEUsIDB4ODIsIDB4MDUsIDB4MTcs IDB4QTUsIDB4MjMsCi0rICAgIDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4RkIsIDB4OEMsIDB4 RDAsIDB4ODEsIDB4MjAsIDB4N0IsIDB4QUEsIDB4MjMsCi0rICAgIDB4OTIsIDB4ODcsIDB4OEMs IDB4RDEsIDB4NTMsIDB4ODUsIDB4MTYsIDB4REMsIDB4QkUsIDB4QUQsIDB4NkYsIDB4MzUsCi0r ICAgIDB4OTgsIDB4MkQsIDB4NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEsIDB4MDEsIDB4MTcs IDB4NTgsIDB4QjIsIDB4NkUsCi0rICAgIDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4RjEsIDB4 RkIsIDB4NTEsIDB4RTgsIDB4NkEsIDB4OTAsIDB4MkQsIDB4MTgsCi0rICAgIDB4MEUsIDB4QzAs IDB4OTAsIDB4MTAsIDB4MjQsIDB4QTksIDB4MUQsIDB4QjMsIDB4NTgsIDB4N0EsIDB4OTEsIDB4 MzAsCi0rICAgIDB4QkUsIDB4MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDksIDB4NUQs IDB4QkYsIDB4RTIsIDB4ODAsIDB4M0EsCi0rICAgIDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4 RDEsIDB4RTksIDB4RjAsIDB4NUMsIDB4REUsIDB4ODEsIDB4QTYsIDB4MzgsCi0rICAgIDB4Qjgs IDB4NDIsIDB4QkIsIDB4ODYsIDB4QzUsIDB4OUQsIDB4Q0UsIDB4N0MsIDB4MkMsIDB4RUUsIDB4 RDEsIDB4REEsCi0rICAgIDB4MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4Rjcs IDB4ODAsIDB4RDEsIDB4OTAsIDB4MjcsIDB4OTAsCi0rICAgIDB4QkQsIDB4NDQsIDB4OTcsIDB4 NjAsIDB4Q0QsIDB4NTcsIDB4QzAsIDB4N0EKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIGthdF9SU0FfU0hBMzg0W10gPSB7Ci0rICAgIDB4MUQsIDB4RTMsIDB4NkEsIDB4REQs IDB4MjcsIDB4NEMsIDB4QzAsIDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYsIDB4MUYsCi0rICAgIDB4 RDIsIDB4OTEsIDB4NjgsIDB4NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYs IDB4NDcsIDB4QzcsCi0rICAgIDB4NkYsIDB4MjIsIDB4MTYsIDB4NDgsIDB4RDAsIDB4RjksIDB4 MTgsIDB4QTksIDB4Q0EsIDB4RkEsIDB4NUQsIDB4NUMsCi0rICAgIDB4QTcsIDB4NjUsIDB4NTIs IDB4OEEsIDB4QzgsIDB4NDQsIDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4QTYsIDB4NTUsCi0r ICAgIDB4NjUsIDB4M0UsIDB4RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4Mjgs IDB4N0YsIDB4QjYsIDB4Q0YsCi0rICAgIDB4ODIsIDB4REQsIDB4N0UsIDB4NTUsIDB4RTEsIDB4 QjEsIDB4QkMsIDB4RTIsIDB4MTksIDB4MkIsIDB4MzAsIDB4QzIsCi0rICAgIDB4MUIsIDB4MkIs IDB4QjAsIDB4ODIsIDB4NDYsIDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIsIDB4 OEMsCi0rICAgIDB4RkYsIDB4OTUsIDB4RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYs IDB4OEYsIDB4OEIsIDB4OUMsIDB4Q0QsCi0rICAgIDB4RUEsIDB4ODUsIDB4RUUsIDB4MDAsIDB4 REMsIDB4MUMsIDB4QTcsIDB4RUIsIDB4RDAsIDB4OEYsIDB4OTksIDB4RjEsCi0rICAgIDB4MTYs IDB4MjgsIDB4MjQsIDB4NjQsIDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4 REMsIDB4MDQsCi0rICAgIDB4QkQsIDB4MzEsIDB4QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYs IDB4QkYKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEy W10gPSB7Ci0rICAgIDB4NjksIDB4NTIsIDB4MUIsIDB4NTEsIDB4NUUsIDB4MDYsIDB4Q0EsIDB4 OUIsIDB4MTYsIDB4NTEsIDB4NUQsIDB4Q0YsCi0rICAgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEs IDB4NkEsIDB4NzcsIDB4NEMsIDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCi0rICAgIDB4 MTUsIDB4RUEsIDB4NUMsIDB4RTUsIDB4RTYsIDB4ODIsIDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIs IDB4MzIsIDB4RjEsCi0rICAgIDB4MDQsIDB4QzEsIDB4NUEsIDB4MUEsIDB4RUQsIDB4MUUsIDB4 OUEsIDB4QjYsIDB4NEMsIDB4NTQsIDB4OUYsIDB4RDgsCi0rICAgIDB4OEQsIDB4Q0MsIDB4QUMs IDB4OEEsIDB4QkIsIDB4OUMsIDB4ODIsIDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCi0r ICAgIDB4ODAsIDB4RTIsIDB4QkMsIDB4REQsIDB4NjcsIDB4MkIsIDB4RDksIDB4M0YsIDB4RTQs IDB4NzUsIDB4OTIsIDB4NkIsCi0rICAgIDB4QUYsIDB4NjIsIDB4N0MsIDB4NTIsIDB4RjAsIDB4 RUUsIDB4MzMsIDB4REYsIDB4MUIsIDB4MUQsIDB4NDcsIDB4RTYsCi0rICAgIDB4NTksIDB4NTYs IDB4QTUsIDB4QjksIDB4NUMsIDB4RTYsIDB4NzcsIDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQsIDB4 MDUsCi0rICAgIDB4NkYsIDB4MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4RjcsIDB4N0YsIDB4QjIs IDB4NjQsIDB4NzEsIDB4RTAsIDB4MkQsCi0rICAgIDB4M0UsIDB4NjIsIDB4Q0UsIDB4QjUsIDB4 M0YsIDB4ODgsIDB4REYsIDB4MkQsIDB4QUIsIDB4OTgsIDB4NjUsIDB4OTEsCi0rICAgIDB4REYs IDB4NzAsIDB4MTQsIDB4QTUsIDB4M0YsIDB4MzYsIDB4QUIsIDB4ODQKLSt9OwotKwotK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9TSEExW10gPSB7Ci0rICAgIDB4ODYs IDB4QjQsIDB4MTgsIDB4QkEsIDB4RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIsIDB4NDUsIDB4 NEQsIDB4REYsCi0rICAgIDB4RTksIDB4MkQsIDB4RTEsIDB4ODMsIDB4NUYsIDB4QjUsIDB4MkYs IDB4QzksIDB4Q0QsIDB4QzQsIDB4QjIsIDB4NzUsCi0rICAgIDB4ODAsIDB4QTQsIDB4RjEsIDB4 NEEsIDB4RTcsIDB4ODMsIDB4MTIsIDB4MUUsIDB4MUUsIDB4MTQsIDB4QjgsIDB4QUMsCi0rICAg IDB4MzUsIDB4RTIsIDB4QUEsIDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQsIDB4 RUUsIDB4QTksIDB4OTcsCi0rICAgIDB4NzAsIDB4RkIsIDB4NUUsIDB4RTcsIDB4QjcsIDB4RTMs IDB4NjIsIDB4MjMsIDB4NEIsIDB4MzgsIDB4QkUsIDB4RDYsCi0rICAgIDB4NTMsIDB4MTUsIDB4 RjcsIDB4REYsIDB4ODcsIDB4QjQsIDB4MEUsIDB4Q0MsIDB4QjEsIDB4MUEsIDB4MTEsIDB4MTks Ci0rICAgIDB4RUUsIDB4NTEsIDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4 NjMsIDB4MEMsIDB4NTksIDB4RDcsCi0rICAgIDB4NkYsIDB4NEMsIDB4M0MsIDB4MzcsIDB4NUIs IDB4MzcsIDB4MDMsIDB4NjEsIDB4N0QsIDB4MjQsIDB4MUMsIDB4OTksCi0rICAgIDB4NDgsIDB4 QUYsIDB4ODIsIDB4RkUsIDB4MzIsIDB4NDEsIDB4OUIsIDB4QjIsIDB4REIsIDB4RUEsIDB4RUQs IDB4NzYsCi0rICAgIDB4OEUsIDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4 MzAsIDB4ODQsIDB4MUMsIDB4QjMsIDB4NjcsCi0rICAgIDB4QTMsIDB4MjksIDB4ODAsIDB4NzAs IDB4NTQsIDB4NjgsIDB4N0QsIDB4NDkKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfWDkzMV9TSEEyNTZbXSA9IHsKLSsgICAgMHg3RSwgMHhBMiwgMHg3NywgMHhG RSwgMHhCOCwgMHg1NCwgMHg4QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKLSsgICAg MHhFNSwgMHg1MiwgMHgxNSwgMHg4RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5 MiwgMHgxQywgMHhERCwKLSsgICAgMHhFQSwgMHhBMiwgMHgyRCwgMHg1QywgMHhEMSwgMHg2Miwg MHgwMCwgMHg0OSwgMHgwNSwgMHg5NSwgMHg3MywgMHhDRiwKLSsgICAgMHgxNiwgMHg3NiwgMHg2 OCwgMHhGNiwgMHhDNiwgMHg1RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwK LSsgICAgMHhDNiwgMHg1MywgMHg4OCwgMHgyNiwgMHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgx MywgMHhCOCwgMHhGMCwgMHg0QiwKLSsgICAgMHgwMCwgMHg4NSwgMHhGMywgMHhERCwgMHgwNywg MHg1MCwgMHhFQiwgMHgyMCwgMHhDNCwgMHgzOCwgMHgwRSwgMHg5OCwKLSsgICAgMHhBRCwgMHg0 RSwgMHg0OSwgMHgyQywgMHhENywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwg MHhFQywKLSsgICAgMHg3RSwgMHg3NSwgMHg4OSwgMHg2OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4 NSwgMHg0NiwgMHg4RCwgMHhBMCwgMHg4QywKLSsgICAgMHgzMywgMHgxRCwgMHg4MiwgMHg4Qywg MHgwMywgMHhFQSwgMHg2OSwgMHg4OCwgMHgzNSwgMHhBMSwgMHg0MiwgMHhCRCwKLSsgICAgMHgy MSwgMHhFRCwgMHg4RCwgMHhCQywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwg MHg1QiwgMHhEQywKLSsgICAgMHhFMywgMHhFMiwgMHhFOCwgMHgwQSwgMHgwQSwgMHgyOSwgMHg5 NCwgMHg4MAotK307Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMx X1NIQTM4NFtdID0gewotKyAgICAweDVDLCAweDdELCAweDk2LCAweDM1LCAweEVDLCAweDdFLCAw eDExLCAweDM4LCAweEJCLCAweDdCLCAweEVDLCAweDdCLAotKyAgICAweEYyLCAweDgyLCAweDhF LCAweDk5LCAweEJELCAweEVGLCAweEQ4LCAweEFFLCAweEQ3LCAweDM5LCAweDM3LCAweENCLAot KyAgICAweEU2LCAweDRGLCAweDVFLCAweDBBLCAweDEzLCAweEU0LCAweDJFLCAweDQwLCAweEI5 LCAweEJFLCAweDJFLCAweEUzLAotKyAgICAweEVGLCAweDc4LCAweDgzLCAweDE4LCAweDQ0LCAw eDM1LCAweDlDLCAweDhFLCAweEQ3LCAweDRBLCAweDYzLCAweEY2LAotKyAgICAweDU3LCAweEMy LCAweEIwLCAweDA4LCAweDUxLCAweDczLCAweENGLCAweENBLCAweDk5LCAweDY2LCAweEVFLCAw eDMxLAotKyAgICAweEQ4LCAweDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAweDdCLCAweDQx LCAweDFFLCAweDZELCAweDhELCAweEYxLAotKyAgICAweDNFLCAweDlDLCAweDM1LCAweDk1LCAw eDU4LCAweERELCAweDJCLCAweEQ1LCAweEEwLCAweDYwLCAweDQxLCAweDc5LAotKyAgICAweDI0 LCAweDIyLCAweEU0LCAweEI3LCAweEJGLCAweDQ3LCAweDUzLCAweEY2LCAweDM0LCAweEQ1LCAw eDdDLCAweEZGLAotKyAgICAweDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAweEI5 LCAweERFLCAweEM1LCAweDEyLCAweDQ0LCAweDM1LAotKyAgICAweEVGLCAweDAxLCAweEU2LCAw eDVFLCAweDM5LCAweDMxLCAweDJELCAweDcxLCAweEE1LCAweERDLCAweEM2LCAweDZELAotKyAg ICAweEUyLCAweENELCAweDg1LCAweERCLCAweDczLCAweDgyLCAweDY1LCAweDI4Ci0rfTsKLSsK LStzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBNTEyW10gPSB7Ci0r ICAgIDB4QTYsIDB4NjUsIDB4QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQs IDB4M0EsIDB4QzEsIDB4NjMsCi0rICAgIDB4RkMsIDB4QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4 NzksIDB4REQsIDB4NEIsIDB4RTEsIDB4RDksIDB4REEsIDB4QUMsCi0rICAgIDB4RTcsIDB4NDcs IDB4MDksIDB4QjIsIDB4MTEsIDB4NEIsIDB4OEEsIDB4QUEsIDB4MDUsIDB4OUUsIDB4NzcsIDB4 RDcsCi0rICAgIDB4M0EsIDB4QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYs IDB4NUUsIDB4RjksIDB4MTQsIDB4MjgsCi0rICAgIDB4QTAsIDB4OTksIDB4NzQsIDB4NjQsIDB4 NzAsIDB4NEUsIDB4RjIsIDB4RTMsIDB4RkEsIDB4QzcsIDB4RjgsIDB4QzUsCi0rICAgIDB4NkUs IDB4MkIsIDB4NzksIDB4OTYsIDB4MEQsIDB4MEMsIDB4QzgsIDB4MTAsIDB4MzQsIDB4NTMsIDB4 RDIsIDB4QUYsCi0rICAgIDB4MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQs IDB4NzIsIDB4MTAsIDB4RTAsIDB4RjYsIDB4RDAsCi0rICAgIDB4Q0UsIDB4OEEsIDB4NkYsIDB4 QTEsIDB4OTUsIDB4ODksIDB4QkYsIDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYsIDB4MDksCi0rICAg IDB4OUYsIDB4MDksIDB4Q0EsIDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4RUQsIDB4MDQsIDB4 MkQsIDB4RkIsIDB4N0MsCi0rICAgIDB4MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQs IDB4OTIsIDB4NDIsIDB4MTEsIDB4MzAsIDB4NzEsIDB4MUIsCi0rICAgIDB4NjAsIDB4ODMsIDB4 MTgsIDB4ODgsIDB4QTMsIDB4RjUsIDB4NTksIDB4QzMKLSt9OwotKwotK2ludCBGSVBTX3NlbGZ0 ZXN0X3JzYSgpCi0rewotKyAgICBpbnQgcmV0ID0gMDsKLSsgICAgUlNBICprZXk7Ci0rICAgIEVW UF9QS0VZICpwayA9IE5VTEw7Ci0rCi0rICAgIGlmICgoa2V5ID0gUlNBX25ldygpKSA9PSBOVUxM KQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIHNldHJzYWtleShrZXkpOwotKyAgICBpZiAoKHBr ID0gRVZQX1BLRVlfbmV3KCkpID09IE5VTEwpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAg RVZQX1BLRVlfYXNzaWduX1JTQShwaywga2V5KTsKLSsKLSsgICAgaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfU0hBMSwgc2l6ZW9mKGthdF9SU0FfU0hB MSksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9zaGExKCksIEVWUF9N RF9DVFhfRkxBR19QQURfUEtDUzEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJSU0EgU0hBMSBQS0NTIzEiKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIWZpcHNf cGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9TSEEyMjQsIHNpemVvZihr YXRfUlNBX1NIQTIyNCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9z aGEyMjQoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlJTQSBTSEEyMjQgUEtDUyMxIikpCi0rICAgICAgICBnb3RvIGVycjsK LSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihr YXRfdGJzKSAtIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0Ff U0hBMjU2LCBzaXplb2Yoa2F0X1JTQV9TSEEyNTYpLAotKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBFVlBfc2hhMjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCi0rICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBMjU2IFBLQ1MjMSIpKQotKyAg ICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBr YXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBrYXRfUlNBX1NIQTM4NCwgc2l6ZW9mKGthdF9SU0FfU0hBMzg0KSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdf UEFEX1BLQ1MxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNBIFNIQTM4 NCBQS0NTIzEiKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWdu YXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1NI QTUxMiksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9zaGE1MTIoKSwg RVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIlJTQSBTSEE1MTIgUEtDUyMxIikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAg aWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJz KSAtIDEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NI QTEsIHNpemVvZihrYXRfUlNBX1BTU19TSEExKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRVZQX3NoYTEoKSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBMSBQU1MiKSkKLSsgICAgICAgIGdvdG8g ZXJyOwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0 X1JTQV9QU1NfU0hBMjI0LAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2Yoa2F0X1JTQV9QU1NfU0hBMjI0KSwgRVZQX3NoYTIyNCgpLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgIlJTQSBTSEEyMjQgUFNT IikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rl c3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NIQTI1NiwKLSsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKGthdF9SU0FfUFNTX1NIQTI1NiksIEVWUF9zaGEyNTYoKSwK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9Q U1MsICJSU0EgU0hBMjU2IFBTUyIpKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghZmlw c19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1BTU19TSEEzODQsCi0r ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrYXRfUlNBX1BTU19TSEEz ODQpLCBFVlBfc2hhMzg0KCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVW UF9NRF9DVFhfRkxBR19QQURfUFNTLCAiUlNBIFNIQTM4NCBQU1MiKSkKLSsgICAgICAgIGdvdG8g ZXJyOwotKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6 ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0 X1JTQV9QU1NfU0hBNTEyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2Yoa2F0X1JTQV9QU1NfU0hBNTEyKSwgRVZQX3NoYTUxMigpLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgIlJTQSBTSEE1MTIgUFNT IikpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGthdF9SU0FfWDkzMV9TSEExLAotKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTEpLCBFVlBfc2hhMSgpLAot KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5 MzEsICJSU0EgU0hBMSBYOTMxIikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgLyogTkI6IFNI QTIyNCBub3Qgc3VwcG9ydGVkIGluIFg5LjMxICovCi0rICAgIGlmICghZmlwc19wa2V5X3NpZ25h dHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1g5MzFfU0hBMjU2LAotKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksIEVWUF9z aGEyNTYoKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9G TEFHX1BBRF9YOTMxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNBIFNI QTI1NiBYOTMxIikpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfWDkzMV9TSEEzODQsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMzg0KSwgRVZQ X3NoYTM4NCgpLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RY X0ZMQUdfUEFEX1g5MzEsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0Eg U0hBMzg0IFg5MzEiKSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBpZiAoIWZpcHNfcGtleV9z aWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9YOTMxX1NIQTUxMiwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLCBF VlBfc2hhNTEyKCksCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9D VFhfRkxBR19QQURfWDkzMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJT QSBTSEE1MTIgWDkzMSIpKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIHJldCA9IDE7Ci0r Ci0rIGVycjoKLSsgICAgaWYgKHBrKQotKyAgICAgICAgRVZQX1BLRVlfZnJlZShwayk7Ci0rICAg IGVsc2UgaWYgKGtleSkKLSsgICAgICAgIFJTQV9mcmVlKGtleSk7Ci0rICAgIHJldHVybiByZXQ7 Ci0rfQotKwotKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmIE9QRU5TU0xf RklQUyAqLwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkz MWcuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMKLS0t LSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMJMjAxNi0w My0wMSAxNjozMzowNy42MjM5MTY2ODEgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8v Zmlwcy9maXBzX3JzYV94OTMxZy5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIzOTE2NjgxICswMTAw Ci1AQCAtMCwwICsxLDI3MyBAQAotKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCi0rLyogQ29w eXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCi0rICog QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1w bGVtZW50YXRpb24gd3JpdHRlbgotKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29t KS4KLSsgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3 aXRoIE5ldHNjYXBlcyBTU0wuCi0rICogCi0rICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNv bW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCi0rICogdGhlIGZvbGxv d2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ci0rICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0 IHRoZSBSQzQsIFJTQSwKLSsgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUg U1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KLSsgKiBpbmNsdWRlZCB3aXRoIHRoaXMg ZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCi0rICog ZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSku Ci0rICogCi0rICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBh bnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KLSsgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92 ZWQuCi0rICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5n IHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgotKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBh cnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCi0rICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2Yg YSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCi0rICogaW4gZG9jdW1lbnRh dGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCi0rICog Ci0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKiAxLiBSZWRp c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAotKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4KLSsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSsgKiAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp YnV0aW9uLgotKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0 dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9s bG93aW5nIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNy eXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQotKyAqICAgICBFcmljIFlvdW5nIChlYXlA Y3J5cHRzb2Z0LmNvbSkiCi0rICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBs ZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5Ci0rICogICAgYmVpbmcgdXNl ZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCi0rICogNC4gSWYgeW91IGluY2x1 ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZy b20gCi0rICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVz dCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKLSsgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1 ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgot KyAqIAotKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElT JycgQU5ECi0rICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0rICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSsgKiBBUkUg RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT IEJFIExJQUJMRQotKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0rICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSsg KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKLSsgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotKyAqIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKLSsgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCi0rICogU1VDSCBEQU1BR0UuCi0rICogCi0rICogVGhlIGxp Y2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxl IHZlcnNpb24gb3IKLSsgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdl ZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKLSsgKiBjb3BpZWQgYW5kIHB1dCB1 bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCi0rICogW2luY2x1ZGluZyB0aGUgR05V IFB1YmxpYyBMaWNlbmNlLl0KLSsgKi8KLSsKLSsjaW5jbHVkZSA8c3RkaW8uaD4KLSsjaW5jbHVk ZSA8c3RyaW5nLmg+Ci0rI2luY2x1ZGUgPHRpbWUuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgot KyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKwotK2V4 dGVybiBpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpOwotKyNlbmRpZgotKwotKy8qIFg5LjMx IFJTQSBrZXkgZGVyaXZhdGlvbiBhbmQgZ2VuZXJhdGlvbiAqLwotKwotK2ludCBSU0FfWDkzMV9k ZXJpdmVfZXgoUlNBICpyc2EsIEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsCi0r ICAgICAgICAgICAgICAgICAgICAgICBCSUdOVU0gKnEyLCBjb25zdCBCSUdOVU0gKlhwMSwgY29u c3QgQklHTlVNICpYcDIsCi0rICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCSUdOVU0gKlhw LCBjb25zdCBCSUdOVU0gKlhxMSwgY29uc3QgQklHTlVNICpYcTIsCi0rICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBCSUdOVU0gKlhxLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikK LSt7Ci0rICAgIEJJR05VTSAqcjAgPSBOVUxMLCAqcjEgPSBOVUxMLCAqcjIgPSBOVUxMLCAqcjMg PSBOVUxMOwotKyAgICBCTl9DVFggKmN0eCA9IE5VTEwsICpjdHgyID0gTlVMTDsKLSsKLSsgICAg aWYgKCFyc2EpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgY3R4ID0gQk5fQ1RYX25ldygp OwotKyAgICBpZiAoIWN0eCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBCTl9DVFhfc3RhcnQo Y3R4KTsKLSsKLSsgICAgcjAgPSBCTl9DVFhfZ2V0KGN0eCk7Ci0rICAgIHIxID0gQk5fQ1RYX2dl dChjdHgpOwotKyAgICByMiA9IEJOX0NUWF9nZXQoY3R4KTsKLSsgICAgcjMgPSBCTl9DVFhfZ2V0 KGN0eCk7Ci0rCi0rICAgIGlmIChyMyA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAg IGlmICghcnNhLT5lKSB7Ci0rICAgICAgICByc2EtPmUgPSBCTl9kdXAoZSk7Ci0rICAgICAgICBp ZiAoIXJzYS0+ZSkKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsgICAgfSBlbHNlCi0rICAgICAg ICBlID0gcnNhLT5lOwotKwotKyAgICAvKiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBv bmx5IGNhbGN1bGF0ZSB3aGF0IHdlIGNhbi4KLSsgICAgICogVGhpcyBhbGxvd3MgdGVzdCBwcm9n cmFtcyB0byBvdXRwdXQgc2VsZWN0aXZlIHBhcmFtZXRlcnMuCi0rICAgICAqLwotKwotKyAgICBp ZiAoWHAgJiYgIXJzYS0+cCkgewotKyAgICAgICAgcnNhLT5wID0gQk5fbmV3KCk7Ci0rICAgICAg ICBpZiAoIXJzYS0+cCkKLSsgICAgICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgICAgIGlmICgh Qk5fWDkzMV9kZXJpdmVfcHJpbWVfZXgocnNhLT5wLCBwMSwgcDIsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikpCi0rICAgICAg ICAgICAgZ290byBlcnI7Ci0rICAgIH0KLSsKLSsgICAgaWYgKFhxICYmICFyc2EtPnEpIHsKLSsg ICAgICAgIHJzYS0+cSA9IEJOX25ldygpOwotKyAgICAgICAgaWYgKCFyc2EtPnEpCi0rICAgICAg ICAgICAgZ290byBlcnI7Ci0rICAgICAgICBpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJz YS0+cSwgcTEsIHEyLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYcSwg WHExLCBYcTIsIGUsIGN0eCwgY2IpKQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0r Ci0rICAgIGlmICghcnNhLT5wIHx8ICFyc2EtPnEpIHsKLSsgICAgICAgIEJOX0NUWF9lbmQoY3R4 KTsKLSsgICAgICAgIEJOX0NUWF9mcmVlKGN0eCk7Ci0rICAgICAgICByZXR1cm4gMjsKLSsgICAg fQotKwotKyAgICAvKiBTaW5jZSBib3RoIHByaW1lcyBhcmUgc2V0IHdlIGNhbiBub3cgY2FsY3Vs YXRlIGFsbCByZW1haW5pbmcgCi0rICAgICAqIGNvbXBvbmVudHMuCi0rICAgICAqLwotKwotKyAg ICAvKiBjYWxjdWxhdGUgbiAqLwotKyAgICByc2EtPm4gPSBCTl9uZXcoKTsKLSsgICAgaWYgKHJz YS0+biA9PSBOVUxMKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIGlmICghQk5fbXVsKHJzYS0+ biwgcnNhLT5wLCByc2EtPnEsIGN0eCkpCi0rICAgICAgICBnb3RvIGVycjsKLSsKLSsgICAgLyog Y2FsY3VsYXRlIGQgKi8KLSsgICAgaWYgKCFCTl9zdWIocjEsIHJzYS0+cCwgQk5fdmFsdWVfb25l KCkpKQotKyAgICAgICAgZ290byBlcnI7ICAgICAgICAgICAgICAgLyogcC0xICovCi0rICAgIGlm ICghQk5fc3ViKHIyLCByc2EtPnEsIEJOX3ZhbHVlX29uZSgpKSkKLSsgICAgICAgIGdvdG8gZXJy OyAgICAgICAgICAgICAgIC8qIHEtMSAqLwotKyAgICBpZiAoIUJOX211bChyMCwgcjEsIHIyLCBj dHgpKQotKyAgICAgICAgZ290byBlcnI7ICAgICAgICAgICAgICAgLyogKHAtMSkocS0xKSAqLwot KwotKyAgICBpZiAoIUJOX2djZChyMywgcjEsIHIyLCBjdHgpKQotKyAgICAgICAgZ290byBlcnI7 Ci0rCi0rICAgIGlmICghQk5fZGl2KHIwLCBOVUxMLCByMCwgcjMsIGN0eCkpCi0rICAgICAgICBn b3RvIGVycjsgICAgICAgICAgICAgICAvKiBMQ00oKHAtMSkocS0xKSkgKi8KLSsKLSsgICAgY3R4 MiA9IEJOX0NUWF9uZXcoKTsKLSsgICAgaWYgKCFjdHgyKQotKyAgICAgICAgZ290byBlcnI7Ci0r Ci0rICAgIHJzYS0+ZCA9IEJOX21vZF9pbnZlcnNlKE5VTEwsIHJzYS0+ZSwgcjAsIGN0eDIpOyAv KiBkICovCi0rICAgIGlmIChyc2EtPmQgPT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwotKwot KyAgICAvKiBjYWxjdWxhdGUgZCBtb2QgKHAtMSkgKi8KLSsgICAgcnNhLT5kbXAxID0gQk5fbmV3 KCk7Ci0rICAgIGlmIChyc2EtPmRtcDEgPT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAg ICBpZiAoIUJOX21vZChyc2EtPmRtcDEsIHJzYS0+ZCwgcjEsIGN0eCkpCi0rICAgICAgICBnb3Rv IGVycjsKLSsKLSsgICAgLyogY2FsY3VsYXRlIGQgbW9kIChxLTEpICovCi0rICAgIHJzYS0+ZG1x MSA9IEJOX25ldygpOwotKyAgICBpZiAocnNhLT5kbXExID09IE5VTEwpCi0rICAgICAgICBnb3Rv IGVycjsKLSsgICAgaWYgKCFCTl9tb2QocnNhLT5kbXExLCByc2EtPmQsIHIyLCBjdHgpKQotKyAg ICAgICAgZ290byBlcnI7Ci0rCi0rICAgIC8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAg Ki8KLSsgICAgcnNhLT5pcW1wID0gQk5fbW9kX2ludmVyc2UoTlVMTCwgcnNhLT5xLCByc2EtPnAs IGN0eDIpOwotKwotKyBlcnI6Ci0rICAgIGlmIChjdHgpIHsKLSsgICAgICAgIEJOX0NUWF9lbmQo Y3R4KTsKLSsgICAgICAgIEJOX0NUWF9mcmVlKGN0eCk7Ci0rICAgIH0KLSsgICAgaWYgKGN0eDIp Ci0rICAgICAgICBCTl9DVFhfZnJlZShjdHgyKTsKLSsgICAgLyogSWYgdGhpcyBpcyBzZXQgYWxs IGNhbGxzIHN1Y2Nlc3NmdWwgKi8KLSsgICAgaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVMTCkK LSsgICAgICAgIHJldHVybiAxOwotKwotKyAgICByZXR1cm4gMDsKLSsKLSt9Ci0rCi0raW50IFJT QV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAq ZSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYikKLSt7Ci0rICAg IGludCBvayA9IDA7Ci0rICAgIEJJR05VTSAqWHAgPSBOVUxMLCAqWHEgPSBOVUxMOwotKyAgICBC Tl9DVFggKmN0eCA9IE5VTEw7Ci0rCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQ U19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmCi0r ICAgICAgICAoYml0cyA8IE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKLSsg ICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCwgRklQU19SX0tF WV9UT09fU0hPUlQpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0KLSsKLSsgICAgaWYgKGJp dHMgJiAweGZmKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9L RVlfRVgsIEZJUFNfUl9JTlZBTElEX0tFWV9MRU5HVEgpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0r ICAgIH0KLSsKLSsgICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKLSsgICAgICAgIEZJ UFNlcnIoRklQU19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCwgRklQU19SX0ZJUFNfU0VMRlRF U1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0rICAg IGN0eCA9IEJOX0NUWF9uZXcoKTsKLSsgICAgaWYgKCFjdHgpCi0rICAgICAgICBnb3RvIGVycm9y OwotKwotKyAgICBCTl9DVFhfc3RhcnQoY3R4KTsKLSsgICAgWHAgPSBCTl9DVFhfZ2V0KGN0eCk7 Ci0rICAgIFhxID0gQk5fQ1RYX2dldChjdHgpOwotKyAgICBpZiAoIUJOX1g5MzFfZ2VuZXJhdGVf WHBxKFhwLCBYcSwgYml0cywgY3R4KSkKLSsgICAgICAgIGdvdG8gZXJyb3I7Ci0rCi0rICAgIHJz YS0+cCA9IEJOX25ldygpOwotKyAgICByc2EtPnEgPSBCTl9uZXcoKTsKLSsgICAgaWYgKCFyc2Et PnAgfHwgIXJzYS0+cSkKLSsgICAgICAgIGdvdG8gZXJyb3I7Ci0rCi0rICAgIC8qIEdlbmVyYXRl IHR3byBwcmltZXMgZnJvbSBYcCwgWHEgKi8KLSsKLSsgICAgaWYgKCFCTl9YOTMxX2dlbmVyYXRl X3ByaW1lX2V4KHJzYS0+cCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHAsCi0rICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlLCBjdHgsIGNiKSkKLSsgICAgICAgIGdvdG8gZXJy b3I7Ci0rCi0rICAgIGlmICghQk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnEsIE5VTEws IE5VTEwsIE5VTEwsIE5VTEwsIFhxLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZSwgY3R4LCBjYikpCi0rICAgICAgICBnb3RvIGVycm9yOwotKwotKyAgICAvKiBTaW5jZSBy c2EtPnAgYW5kIHJzYS0+cSBhcmUgdmFsaWQgdGhpcyBjYWxsIHdpbGwganVzdCBkZXJpdmUKLSsg ICAgICogcmVtYWluaW5nIFJTQSBjb21wb25lbnRzLgotKyAgICAgKi8KLSsKLSsgICAgaWYgKCFS U0FfWDkzMV9kZXJpdmVfZXgocnNhLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBl LCBjYikpCi0rICAgICAgICBnb3RvIGVycm9yOwotKwotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsg ICAgaWYgKCFmaXBzX2NoZWNrX3JzYShyc2EpKQotKyAgICAgICAgZ290byBlcnJvcjsKLSsjZW5k aWYKLSsKLSsgICAgb2sgPSAxOwotKwotKyBlcnJvcjoKLSsgICAgaWYgKGN0eCkgewotKyAgICAg ICAgQk5fQ1RYX2VuZChjdHgpOwotKyAgICAgICAgQk5fQ1RYX2ZyZWUoY3R4KTsKLSsgICAgfQot KwotKyAgICBpZiAob2spCi0rICAgICAgICByZXR1cm4gMTsKLSsKLSsgICAgcmV0dXJuIDA7Ci0r Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRl c3QuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMK LS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jLmZpcHMJ MjAxNi0wMy0wMSAxNjozMzowNy42MjM5MTY2ODEgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9j cnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjIzOTE2 NjgxICswMTAwCi1AQCAtMCwwICsxLDE0NSBAQAotKy8qID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0rICogQ29weXJp Z2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot KyAqCi0rICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0Ci0rICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0rICogYXJlIG1ldDoKLSsgKgotKyAq IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg Y29weXJpZ2h0Ci0rICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSsgKgotKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0rICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluCi0rICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92 aWRlZCB3aXRoIHRoZQotKyAqICAgIGRpc3RyaWJ1dGlvbi4KLSsgKgotKyAqIDMuIEFsbCBhZHZl cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwotKyAq ICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50Ogot KyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBP cGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuICho dHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCi0rICoKLSsgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wg VG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KLSsgKiAg ICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUg d2l0aG91dAotKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVy bWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKLSsgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcu Ci0rICoKLSsgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKLSsgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCi0rICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgotKyAqCi0rICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZwotKyAqICAgIGFja25vd2xl ZGdtZW50OgotKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKLSsgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQotKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKLSsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSsgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgotKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSsg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKLSsgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKLSsgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQotKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKLSsgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0rICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAotKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSsgKgotKyAqLwot KwotKyNpbmNsdWRlIDxzdHJpbmcuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KLSsjaWZk ZWYgT1BFTlNTTF9GSVBTCi0rIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KLSsjZW5kaWYKLSsj aW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KLSsKLSsj aWZkZWYgT1BFTlNTTF9GSVBTCi0rc3RhdGljIGNvbnN0IGNoYXIgdGVzdFtdWzYwXSA9IHsKLSsg ICAgIiIsCi0rICAgICJhYmMiLAotKyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhp amtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciByZXRbXVtTSEFfRElHRVNUX0xFTkdUSF0gPSB7Ci0rICAgIHsweGRhLCAweDM5LCAw eGEzLCAweGVlLCAweDVlLCAweDZiLCAweDRiLCAweDBkLCAweDMyLCAweDU1LAotKyAgICAgMHhi ZiwgMHhlZiwgMHg5NSwgMHg2MCwgMHgxOCwgMHg5MCwgMHhhZiwgMHhkOCwgMHgwNywgMHgwOX0s Ci0rICAgIHsweGE5LCAweDk5LCAweDNlLCAweDM2LCAweDQ3LCAweDA2LCAweDgxLCAweDZhLCAw eGJhLCAweDNlLAotKyAgICAgMHgyNSwgMHg3MSwgMHg3OCwgMHg1MCwgMHhjMiwgMHg2YywgMHg5 YywgMHhkMCwgMHhkOCwgMHg5ZH0sCi0rICAgIHsweDg0LCAweDk4LCAweDNlLCAweDQ0LCAweDFj LCAweDNiLCAweGQyLCAweDZlLCAweGJhLCAweGFlLAotKyAgICAgMHg0YSwgMHhhMSwgMHhmOSwg MHg1MSwgMHgyOSwgMHhlNSwgMHhlNSwgMHg0NiwgMHg3MCwgMHhmMX0sCi0rfTsKLSsKLStzdGF0 aWMgaW50IGNvcnJ1cHRfc2hhOwotKwotK3ZvaWQgRklQU19jb3JydXB0X3NoYTEoKQotK3sKLSsg ICAgY29ycnVwdF9zaGEgPSAxOwotK30KLSsKLStpbnQgRklQU19zZWxmdGVzdF9zaGExKCkKLSt7 Ci0rICAgIGludCBuOwotKwotKyAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHRlc3QpIC8gc2l6 ZW9mKHRlc3RbMF0pOyArK24pIHsKLSsgICAgICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VT VF9MRU5HVEhdOwotKwotKyAgICAgICAgRVZQX0RpZ2VzdCh0ZXN0W25dLCBzdHJsZW4odGVzdFtu XSkgKyBjb3JydXB0X3NoYSwgbWQsIE5VTEwsCi0rICAgICAgICAgICAgICAgICAgIEVWUF9zaGEx KCksIE5VTEwpOwotKyAgICAgICAgaWYgKG1lbWNtcChtZCwgcmV0W25dLCBzaXplb2YgbWQpKSB7 Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExLCBGSVBTX1Jf U0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAgICAgIH0KLSsg ICAgfQotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg bXNnX3NoYTI1NltdID0KLSsgICAgeyAweGZhLCAweDQ4LCAweDU5LCAweDJhLCAweGUxLCAweGFl LCAweDFmLCAweDMwLAotKyAgICAweGZjCi0rfTsKLSsKLStzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBkaWdfc2hhMjU2W10gPQotKyAgICB7IDB4ZjcsIDB4MjYsIDB4ZDgsIDB4OTgsIDB4NDcs IDB4OTEsIDB4NjgsIDB4NWIsCi0rICAgIDB4OWUsIDB4MzksIDB4YjIsIDB4NTgsIDB4YmIsIDB4 NzUsIDB4YmYsIDB4MDEsCi0rICAgIDB4MTcsIDB4MGMsIDB4ODQsIDB4MDAsIDB4MDEsIDB4N2Es IDB4OTQsIDB4ODMsCi0rICAgIDB4ZjMsIDB4MGIsIDB4MTUsIDB4ODQsIDB4NGIsIDB4NjksIDB4 ODgsIDB4OGEKLSt9OwotKwotK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGE1MTJb XSA9Ci0rICAgIHsgMHgzNywgMHhkMSwgMHgzNSwgMHg5ZCwgMHgxOCwgMHg0MSwgMHhlOSwgMHhi NywKLSsgICAgMHg2ZCwgMHg5YSwgMHgxMywgMHhkYSwgMHg1ZiwgMHhmMywgMHhiZAotK307Ci0r Ci0rc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGlnX3NoYTUxMltdID0KLSsgICAgeyAweDEx LCAweDEzLCAweGM0LCAweDE5LCAweGVkLCAweDJiLCAweDFkLCAweDE2LAotKyAgICAweDExLCAw eGViLCAweDliLCAweGJlLCAweGYwLCAweDdmLCAweGNmLCAweDQ0LAotKyAgICAweDhiLCAweGQ3 LCAweDU3LCAweGJkLCAweDhkLCAweGE5LCAweDI1LCAweGIwLAotKyAgICAweDQ3LCAweDI1LCAw eGQ2LCAweDZjLCAweDlhLCAweDU0LCAweDdmLCAweDhmLAotKyAgICAweDBiLCAweDUzLCAweDFh LCAweDEwLCAweDY4LCAweDMyLCAweDAzLCAweDM4LAotKyAgICAweDgyLCAweGM0LCAweDg3LCAw eGM0LCAweGVhLCAweDBlLCAweGQxLCAweDA0LAotKyAgICAweGE5LCAweDk4LCAweGMxLCAweDA1 LCAweGEzLCAweGYzLCAweGY4LCAweGIxLAotKyAgICAweGFmLCAweGJjLCAweGQ5LCAweDc4LCAw eDdlLCAweGVlLCAweDNkLCAweDQzCi0rfTsKLSsKLStpbnQgRklQU19zZWxmdGVzdF9zaGEyKHZv aWQpCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKLSsK LSsgICAgRVZQX0RpZ2VzdChtc2dfc2hhMjU2LCBzaXplb2YobXNnX3NoYTI1NiksIG1kLCBOVUxM LCBFVlBfc2hhMjU2KCksIE5VTEwpOwotKyAgICBpZiAobWVtY21wKGRpZ19zaGEyNTYsIG1kLCBz aXplb2YoZGlnX3NoYTI1NikpKSB7Ci0rICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVf U0VULCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgIHJldHVybiAwOwotKyAgICB9 Ci0rCi0rICAgIEVWUF9EaWdlc3QobXNnX3NoYTUxMiwgc2l6ZW9mKG1zZ19zaGE1MTIpLCBtZCwg TlVMTCwgRVZQX3NoYTUxMigpLCBOVUxMKTsKLSsgICAgaWYgKG1lbWNtcChkaWdfc2hhNTEyLCBt ZCwgc2l6ZW9mKGRpZ19zaGE1MTIpKSkgewotKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19N T0RFX1NFVCwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAgICByZXR1cm4gMDsKLSsg ICAgfQotKwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rI2VuZGlmCi1kaWZmIC11cCBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL2ZpcHMvZmlwc19zdGFuZGFsb25lX2htYWMuYwotLS0tIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFjLmMuZmlwcwkyMDE2LTAzLTAxIDE2 OjMzOjA3LjYyMzkxNjY4MSArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2Zp cHNfc3RhbmRhbG9uZV9obWFjLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjM5MTY2ODEgKzAxMDAK LUBAIC0wLDAgKzEsMjY4IEBACi0rLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSsgKiBDb3B5cmlnaHQgKGMpIDIw MDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0rICoKLSsgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKLSsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSsgKiBhcmUgbWV0OgotKyAqCi0rICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK LSsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuIAotKyAqCi0rICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSsgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSsgKiAg ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlCi0rICogICAgZGlzdHJpYnV0aW9uLgotKyAqCi0rICogMy4gQWxsIGFkdmVydGlzaW5nIG1h dGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCi0rICogICAgc29mdHdh cmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Ci0rICogICAgIlRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJv amVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cu b3BlbnNzbC5vcmcvKSIKLSsgKgotKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBh bmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bwotKyAqICAgIGVuZG9yc2Ug b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0Ci0r ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBw bGVhc2UgY29udGFjdAotKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KLSsgKgotKyAq IDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVk ICJPcGVuU1NMIgotKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1l cyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSsgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NM IFByb2plY3QuCi0rICoKLSsgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNv ZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCi0rICogICAgYWNrbm93bGVkZ21lbnQ6Ci0r ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAotKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgotKyAqCi0rICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCi0rICogRVhQUkVTU0VE IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQotKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUgotKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCi0rICogSVRTIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKyAqIFNQRUNJQUws IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotKyAq IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ Q0VTOwotKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCi0rICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSsgKiBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECi0rICog T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKyAqCi0rICovCi0rCi0rI2luY2x1 ZGUgPHN0ZGlvLmg+Ci0rI2luY2x1ZGUgPHN0ZGxpYi5oPgotKyNpbmNsdWRlIDxzdHJpbmcuaD4K LSsjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3NsY29uZi5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL3No YS5oPgotKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KLSsKLSsjaWZuZGVmIEZJUFNDQU5JU1RF Ul9PCi0raW50IEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkKLSt7Ci0rICAgIHJldHVybiAwOwotK30K LSsKLSt2b2lkIEZJUFNfc2VsZnRlc3RfY2hlY2soKQotK3sKLSt9Ci0rI2VuZGlmCi0rCi0rI2lm ZGVmIE9QRU5TU0xfRklQUwotK2ludCBibl9tdWxfbW9udF9mcHU2NChCTl9VTE9ORyAqcnAsIGNv bnN0IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcgKmJwLAotKyAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBCTl9VTE9ORyAqbnAsIGNvbnN0IEJOX1VMT05HICpuMCwgaW50IG51bSkKLSt7 Ci0rICAgIHJldHVybiAwOwotK307Ci0rCi0raW50IGJuX211bF9tb250X2ludChCTl9VTE9ORyAq cnAsIGNvbnN0IEJOX1VMT05HICphcCwgY29uc3QgQk5fVUxPTkcgKmJwLAotKyAgICAgICAgICAg ICAgICAgICAgY29uc3QgQk5fVUxPTkcgKm5wLCBjb25zdCBCTl9VTE9ORyAqbjAsIGludCBudW0p Ci0rewotKyAgICByZXR1cm4gMDsKLSt9OwotKwotKyMgaWYgICAgIGRlZmluZWQoX19pMzg2KSAg IHx8IGRlZmluZWQoX19pMzg2X18pICAgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBcCi0rICAgICAg ICBkZWZpbmVkKF9fSU5URUxfXykgfHwgXAotKyAgICAgICAgZGVmaW5lZChfX3g4Nl82NCkgfHwg ZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBcCi0rICAgICAgICBkZWZpbmVkKF9NX0FNRDY0KSB8fCBk ZWZpbmVkKF9NX1g2NCkKLSsKLSt1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbNF07Ci0r dW5zaWduZWQgbG9uZyAqT1BFTlNTTF9pYTMyY2FwX2xvYyh2b2lkKQotK3sKLSsgICAgaWYgKHNp emVvZihsb25nKSA9PSA0KQotKyAgICAgICAgLyoKLSsgICAgICAgICAqIElmIDMyLWJpdCBhcHBs aWNhdGlvbiBwdWxscyBhZGRyZXNzIG9mIE9QRU5TU0xfaWEzMmNhcF9QWzBdCi0rICAgICAgICAg KiBjbGVhciBzZWNvbmQgZWxlbWVudCB0byBtYWludGFpbiB0aGUgaWxsdXNpb24gdGhhdCB2ZWN0 b3IKLSsgICAgICAgICAqIGlzIDMyLWJpdC4KLSsgICAgICAgICAqLwotKyAgICAgICAgT1BFTlNT TF9pYTMyY2FwX1BbMV0gPSAwOwotKwotKyAgICBPUEVOU1NMX2lhMzJjYXBfUFsyXSA9IDA7Ci0r Ci0rICAgIHJldHVybiAodW5zaWduZWQgbG9uZyAqKU9QRU5TU0xfaWEzMmNhcF9QOwotK30KLSsK LSsjICBpZiBkZWZpbmVkKE9QRU5TU0xfQ1BVSURfT0JKKSAmJiAhZGVmaW5lZChPUEVOU1NMX05P X0FTTSkgJiYgIWRlZmluZWQoSTM4Nl9PTkxZKQotKyMgICBkZWZpbmUgT1BFTlNTTF9DUFVJRF9T RVRVUAotKyMgICBpZiBkZWZpbmVkKF9XSU4zMikKLSt0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQg SUEzMkNBUDsKLSsjICAgZWxzZQotK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIElBMzJDQVA7 Ci0rIyAgIGVuZGlmCi0rdm9pZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpCi0rewotKyAgICBz dGF0aWMgaW50IHRyaWdnZXIgPSAwOwotKyAgICBJQTMyQ0FQIE9QRU5TU0xfaWEzMl9jcHVpZCh1 bnNpZ25lZCBpbnQgKik7Ci0rICAgIElBMzJDQVAgdmVjOwotKyAgICBjaGFyICplbnY7Ci0rCi0r ICAgIGlmICh0cmlnZ2VyKQotKyAgICAgICAgcmV0dXJuOwotKwotKyAgICB0cmlnZ2VyID0gMTsK LSsgICAgaWYgKChlbnYgPSBnZXRlbnYoIk9QRU5TU0xfaWEzMmNhcCIpKSkgewotKyAgICAgICAg aW50IG9mZiA9IChlbnZbMF0gPT0gJ34nKSA/IDEgOiAwOwotKyMgICBpZiBkZWZpbmVkKF9XSU4z MikKLSsgICAgICAgIGlmICghc3NjYW5mKGVudiArIG9mZiwgIiVJNjRpIiwgJnZlYykpCi0rICAg ICAgICAgICAgdmVjID0gc3RydG91bChlbnYgKyBvZmYsIE5VTEwsIDApOwotKyMgICBlbHNlCi0r ICAgICAgICBpZiAoIXNzY2FuZihlbnYgKyBvZmYsICIlbGxpIiwgKGxvbmcgbG9uZyAqKSZ2ZWMp KQotKyAgICAgICAgICAgIHZlYyA9IHN0cnRvdWwoZW52ICsgb2ZmLCBOVUxMLCAwKTsKLSsjICAg ZW5kaWYKLSsgICAgICAgIGlmIChvZmYpCi0rICAgICAgICAgICAgdmVjID0gT1BFTlNTTF9pYTMy X2NwdWlkKE9QRU5TU0xfaWEzMmNhcF9QKSAmIH52ZWM7Ci0rICAgICAgICBlbHNlIGlmIChlbnZb MF0gPT0gJzonKQotKyAgICAgICAgICAgIHZlYyA9IE9QRU5TU0xfaWEzMl9jcHVpZChPUEVOU1NM X2lhMzJjYXBfUCk7Ci0rCi0rICAgICAgICBPUEVOU1NMX2lhMzJjYXBfUFsyXSA9IDA7Ci0rICAg ICAgICBpZiAoKGVudiA9IHN0cmNocihlbnYsICc6JykpKSB7Ci0rICAgICAgICAgICAgdW5zaWdu ZWQgaW50IHZlY3g7Ci0rICAgICAgICAgICAgZW52Kys7Ci0rICAgICAgICAgICAgb2ZmID0gKGVu dlswXSA9PSAnficpID8gMSA6IDA7Ci0rICAgICAgICAgICAgdmVjeCA9IHN0cnRvdWwoZW52ICsg b2ZmLCBOVUxMLCAwKTsKLSsgICAgICAgICAgICBpZiAob2ZmKQotKyAgICAgICAgICAgICAgICBP UEVOU1NMX2lhMzJjYXBfUFsyXSAmPSB+dmVjeDsKLSsgICAgICAgICAgICBlbHNlCi0rICAgICAg ICAgICAgICAgIE9QRU5TU0xfaWEzMmNhcF9QWzJdID0gdmVjeDsKLSsgICAgICAgIH0KLSsgICAg fSBlbHNlCi0rICAgICAgICB2ZWMgPSBPUEVOU1NMX2lhMzJfY3B1aWQoT1BFTlNTTF9pYTMyY2Fw X1ApOwotKwotKyAgICAvKgotKyAgICAgKiB8KDE8PDEwKSBzZXRzIGEgcmVzZXJ2ZWQgYml0IHRv IHNpZ25hbCB0aGF0IHZhcmlhYmxlCi0rICAgICAqIHdhcyBpbml0aWFsaXplZCBhbHJlYWR5Li4u IFRoaXMgaXMgdG8gYXZvaWQgaW50ZXJmZXJlbmNlCi0rICAgICAqIHdpdGggY3B1aWQgc25pcHBl dHMgaW4gRUxGIC5pbml0IHNlZ21lbnQuCi0rICAgICAqLwotKyAgICBPUEVOU1NMX2lhMzJjYXBf UFswXSA9ICh1bnNpZ25lZCBpbnQpdmVjIHwgKDEgPDwgMTApOwotKyAgICBPUEVOU1NMX2lhMzJj YXBfUFsxXSA9ICh1bnNpZ25lZCBpbnQpKHZlYyA+PiAzMik7Ci0rfQotKyMgIGVsc2UKLSt1bnNp Z25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbNF07Ci0rIyAgZW5kaWYKLSsKLSsjIGVsc2UKLSt1 bnNpZ25lZCBsb25nICpPUEVOU1NMX2lhMzJjYXBfbG9jKHZvaWQpCi0rewotKyAgICByZXR1cm4g TlVMTDsKLSt9Ci0rIyBlbmRpZgotK2ludCBPUEVOU1NMX05PTlBJQ19yZWxvY2F0ZWQgPSAwOwot KyMgaWYgIWRlZmluZWQoT1BFTlNTTF9DUFVJRF9TRVRVUCkgJiYgIWRlZmluZWQoT1BFTlNTTF9D UFVJRF9PQkopCi0rdm9pZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpCi0rewotK30KLSsjIGVu ZGlmCi0rCi0rc3RhdGljIHZvaWQgaG1hY19pbml0KFNIQTI1Nl9DVFggKm1kX2N0eCwgU0hBMjU2 X0NUWCAqb19jdHgsIGNvbnN0IGNoYXIgKmtleSkKLSt7Ci0rICAgIHNpemVfdCBsZW4gPSBzdHJs ZW4oa2V5KTsKLSsgICAgaW50IGk7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5bWRbSE1BQ19NQVhf TURfQ0JMT0NLXTsKLSsgICAgdW5zaWduZWQgY2hhciBwYWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsK LSsKLSsgICAgaWYgKGxlbiA+IFNIQV9DQkxPQ0spIHsKLSsgICAgICAgIFNIQTI1Nl9Jbml0KG1k X2N0eCk7Ci0rICAgICAgICBTSEEyNTZfVXBkYXRlKG1kX2N0eCwga2V5LCBsZW4pOwotKyAgICAg ICAgU0hBMjU2X0ZpbmFsKGtleW1kLCBtZF9jdHgpOwotKyAgICAgICAgbGVuID0gU0hBMjU2X0RJ R0VTVF9MRU5HVEg7Ci0rICAgIH0gZWxzZQotKyAgICAgICAgbWVtY3B5KGtleW1kLCBrZXksIGxl bik7Ci0rICAgIG1lbXNldCgma2V5bWRbbGVuXSwgJ1wwJywgSE1BQ19NQVhfTURfQ0JMT0NLIC0g bGVuKTsKLSsKLSsgICAgZm9yIChpID0gMDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSzsgaSsrKQot KyAgICAgICAgcGFkW2ldID0gMHgzNiBeIGtleW1kW2ldOwotKyAgICBTSEEyNTZfSW5pdChtZF9j dHgpOwotKyAgICBTSEEyNTZfVXBkYXRlKG1kX2N0eCwgcGFkLCBTSEEyNTZfQ0JMT0NLKTsKLSsK LSsgICAgZm9yIChpID0gMDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSzsgaSsrKQotKyAgICAgICAg cGFkW2ldID0gMHg1YyBeIGtleW1kW2ldOwotKyAgICBTSEEyNTZfSW5pdChvX2N0eCk7Ci0rICAg IFNIQTI1Nl9VcGRhdGUob19jdHgsIHBhZCwgU0hBMjU2X0NCTE9DSyk7Ci0rfQotKwotK3N0YXRp YyB2b2lkIGhtYWNfZmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKm1kX2N0eCwK LSsgICAgICAgICAgICAgICAgICAgICAgIFNIQTI1Nl9DVFggKm9fY3R4KQotK3sKLSsgICAgdW5z aWduZWQgY2hhciBidWZbU0hBMjU2X0RJR0VTVF9MRU5HVEhdOwotKwotKyAgICBTSEEyNTZfRmlu YWwoYnVmLCBtZF9jdHgpOwotKyAgICBTSEEyNTZfVXBkYXRlKG9fY3R4LCBidWYsIHNpemVvZiBi dWYpOwotKyAgICBTSEEyNTZfRmluYWwobWQsIG9fY3R4KTsKLSt9Ci0rCi0rI2VuZGlmCi0rCi0r aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotK3sKLSsjaWZkZWYgT1BFTlNTTF9GSVBT Ci0rICAgIHN0YXRpYyBjaGFyIGtleVtdID0gIm9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2 YXJQIjsKLSsgICAgaW50IG4sIGJpbmFyeSA9IDA7Ci0rCi0rICAgIGlmIChhcmdjIDwgMikgewot KyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBbPGZpbGU+XStcbiIsIGFyZ3ZbMF0pOwotKyAg ICAgICAgZXhpdCgxKTsKLSsgICAgfQotKwotKyAgICBuID0gMTsKLSsgICAgaWYgKCFzdHJjbXAo YXJndltuXSwgIi1iaW5hcnkiKSkgewotKyAgICAgICAgbisrOwotKyAgICAgICAgYmluYXJ5ID0g MTsgICAgICAgICAgICAgLyogZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQuLi4gKi8KLSsgICAgfQot KwotKyAgICBmb3IgKDsgbiA8IGFyZ2M7ICsrbikgewotKyAgICAgICAgRklMRSAqZiA9IGZvcGVu KGFyZ3Zbbl0sICJyYiIpOwotKyAgICAgICAgU0hBMjU2X0NUWCBtZF9jdHgsIG9fY3R4OwotKyAg ICAgICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07Ci0rICAgICAgICBp bnQgaTsKLSsKLSsgICAgICAgIGlmICghZikgewotKyAgICAgICAgICAgIHBlcnJvcihhcmd2W25d KTsKLSsgICAgICAgICAgICBleGl0KDIpOwotKyAgICAgICAgfQotKwotKyAgICAgICAgaG1hY19p bml0KCZtZF9jdHgsICZvX2N0eCwga2V5KTsKLSsgICAgICAgIGZvciAoOzspIHsKLSsgICAgICAg ICAgICBjaGFyIGJ1ZlsxMDI0XTsKLSsgICAgICAgICAgICBzaXplX3QgbCA9IGZyZWFkKGJ1Ziwg MSwgc2l6ZW9mIGJ1ZiwgZik7Ci0rCi0rICAgICAgICAgICAgaWYgKGwgPT0gMCkgewotKyAgICAg ICAgICAgICAgICBpZiAoZmVycm9yKGYpKSB7Ci0rICAgICAgICAgICAgICAgICAgICBwZXJyb3Io YXJndltuXSk7Ci0rICAgICAgICAgICAgICAgICAgICBleGl0KDMpOwotKyAgICAgICAgICAgICAg ICB9IGVsc2UKLSsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotKyAgICAgICAgICAgIH0KLSsg ICAgICAgICAgICBTSEEyNTZfVXBkYXRlKCZtZF9jdHgsIGJ1ZiwgbCk7Ci0rICAgICAgICB9Ci0r ICAgICAgICBobWFjX2ZpbmFsKG1kLCAmbWRfY3R4LCAmb19jdHgpOwotKwotKyAgICAgICAgaWYg KGJpbmFyeSkgewotKyAgICAgICAgICAgIGZ3cml0ZShtZCwgU0hBMjU2X0RJR0VTVF9MRU5HVEgs IDEsIHN0ZG91dCk7Ci0rICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiAuLi4gZm9y IHNpbmdsZSghKSBmaWxlICovCi0rICAgICAgICB9Ci0rCi0rLyogICAgICBwcmludGYoIkhNQUMt U0hBMSglcyk9ICIsYXJndltuXSk7ICovCi0rICAgICAgICBmb3IgKGkgPSAwOyBpIDwgU0hBMjU2 X0RJR0VTVF9MRU5HVEg7ICsraSkKLSsgICAgICAgICAgICBwcmludGYoIiUwMngiLCBtZFtpXSk7 Ci0rICAgICAgICBwcmludGYoIlxuIik7Ci0rICAgIH0KLSsjZW5kaWYKLSsgICAgcmV0dXJuIDA7 Ci0rfQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRl LmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwotLS0t IG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMJMjAxNi0w My0wMSAxNjozMzowNy42MjQ5MTY3MDQgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8v Zmlwcy9maXBzX3Rlc3Rfc3VpdGUuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyNDkxNjcwNCArMDEw MAotQEAgLTAsMCArMSw2MzkgQEAKLSsvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKyAqIENvcHlyaWdodCAoYykg MjAwMyBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSsgKgotKyAq Ci0rICogVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBG SVBTLTE0MCB0ZXN0aW5nCi0rICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFsaWRhdGlvbi4g IEl0IGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZQotKyAqIE9wZW5TU0wgbGlicmFyeSBpdG8g cGVyZm9ybSBhIHZhcmlldHkgb2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKLSsgKiBmdW5jdGlvbnMu ICBBIHBvd2VyLXVwIHNlbGYgdGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJlcmF0ZWx5Ci0r ICogcG9pbnRpbmcgdG8gYW4gaW52YWxpZCBleGVjdXRhYmxlIGhhc2gKLSsgKgotKyAqIENvbnRy aWJ1dGVkIGJ5IFN0ZXZlIE1hcnF1ZXNzLgotKyAqCi0rICovCi0rI2luY2x1ZGUgPHN0ZGlvLmg+ Ci0rI2luY2x1ZGUgPGFzc2VydC5oPgotKyNpbmNsdWRlIDxjdHlwZS5oPgotKyNpbmNsdWRlIDxz dHJpbmcuaD4KLSsjaW5jbHVkZSA8c3RkbGliLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+ Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0r I2luY2x1ZGUgPG9wZW5zc2wvZHNhLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KLSsjaW5j bHVkZSA8b3BlbnNzbC9obWFjLmg+Ci0rI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Ci0rCi0rI2lu Y2x1ZGUgPG9wZW5zc2wvYm4uaD4KLSsjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0rI2luY2x1 ZGUgPG9wZW5zc2wvc2hhLmg+Ci0rCi0rI2lmbmRlZiBPUEVOU1NMX0ZJUFMKLStpbnQgbWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQotK3sKLSsgICAgcHJpbnRmKCJObyBGSVBTIHN1cHBvcnRc biIpOwotKyAgICByZXR1cm4gKDApOwotK30KLSsjZWxzZQotKwotKyMgaW5jbHVkZSA8b3BlbnNz bC9maXBzLmg+Ci0rIyBpbmNsdWRlICJmaXBzX3V0bC5oIgotKwotKy8qIEFFUzogZW5jcnlwdCBh bmQgZGVjcnlwdCBrbm93biBwbGFpbnRleHQsIHZlcmlmeSByZXN1bHQgbWF0Y2hlcyBvcmlnaW5h bCBwbGFpbnRleHQKLSsqLwotK3N0YXRpYyBpbnQgRklQU19hZXNfdGVzdCh2b2lkKQotK3sKLSsg ICAgaW50IHJldCA9IDA7Ci0rICAgIHVuc2lnbmVkIGNoYXIgcGx0bXBbMTZdOwotKyAgICB1bnNp Z25lZCBjaGFyIGNpdG1wWzE2XTsKLSsgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdID0KLSsgICAg ICAgIHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwg MTYgfTsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdID0gImV0YW9ucmlzaGRsY3Ui OwotKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0 eCk7Ci0rICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwg TlVMTCwga2V5LCBOVUxMLCAxKSA8PSAwKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAgIEVWUF9D aXBoZXIoJmN0eCwgY2l0bXAsIHBsYWludGV4dCwgMTYpOwotKyAgICBpZiAoRVZQX0NpcGhlcklu aXRfZXgoJmN0eCwgRVZQX2Flc18xMjhfZWNiKCksIE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkK LSsgICAgICAgIGdvdG8gZXJyOwotKyAgICBFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwg MTYpOwotKyAgICBpZiAobWVtY21wKHBsdG1wLCBwbGFpbnRleHQsIDE2KSkKLSsgICAgICAgIGdv dG8gZXJyOwotKyAgICByZXQgPSAxOwotKyBlcnI6Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFu dXAoJmN0eCk7Ci0rICAgIHJldHVybiByZXQ7Ci0rfQotKwotK3N0YXRpYyBpbnQgRklQU19kZXMz X3Rlc3Qodm9pZCkKLSt7Ci0rICAgIGludCByZXQgPSAwOwotKyAgICB1bnNpZ25lZCBjaGFyIHBs dG1wWzhdOwotKyAgICB1bnNpZ25lZCBjaGFyIGNpdG1wWzhdOwotKyAgICB1bnNpZ25lZCBjaGFy IGtleVtdID0KLSsgICAgICAgIHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAx MiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwKLSsgICAgICAgIDE5LCAyMCwgMjEsIDIyLCAyMywg MjQKLSsgICAgfTsKLSsgICAgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbXSA9IHsgJ2UnLCAndCcs ICdhJywgJ28nLCAnbicsICdyJywgJ2knLCAncycgfTsKLSsgICAgRVZQX0NJUEhFUl9DVFggY3R4 OwotKyAgICBFVlBfQ0lQSEVSX0NUWF9pbml0KCZjdHgpOwotKyAgICBpZiAoRVZQX0NpcGhlcklu aXRfZXgoJmN0eCwgRVZQX2Rlc19lZGUzX2VjYigpLCBOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDAp Ci0rICAgICAgICBnb3RvIGVycjsKLSsgICAgRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50 ZXh0LCA4KTsKLSsgICAgaWYgKEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19l Y2IoKSwgTlVMTCwga2V5LCBOVUxMLCAwKSA8PSAwKQotKyAgICAgICAgZ290byBlcnI7Ci0rICAg IEVWUF9DaXBoZXIoJmN0eCwgcGx0bXAsIGNpdG1wLCA4KTsKLSsgICAgaWYgKG1lbWNtcChwbHRt cCwgcGxhaW50ZXh0LCA4KSkKLSsgICAgICAgIGdvdG8gZXJyOwotKyAgICByZXQgPSAxOwotKyBl cnI6Ci0rICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7Ci0rICAgIHJldHVybiByZXQ7 Ci0rfQotKwotKy8qCi0rICogRFNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5w dXQgcGxhaW50ZXh0LgotKyAqLwotK3N0YXRpYyBpbnQgRklQU19kc2FfdGVzdChpbnQgYmFkKQot K3sKLSsgICAgRFNBICpkc2EgPSBOVUxMOwotKyAgICBFVlBfUEtFWSBwazsKLSsgICAgdW5zaWdu ZWQgY2hhciBkZ3N0W10gPSAiZXRhb25yaXNoZGxjIjsKLSsgICAgdW5zaWduZWQgY2hhciBidWZb NjBdOwotKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKLSsgICAgaW50IHIgPSAwOwotKyAgICBFVlBf TURfQ1RYIG1jdHg7Ci0rCi0rICAgIEVSUl9jbGVhcl9lcnJvcigpOwotKyAgICBFVlBfTURfQ1RY X2luaXQoJm1jdHgpOwotKyAgICBkc2EgPSBEU0FfbmV3KCk7Ci0rICAgIGlmICghZHNhKQotKyAg ICAgICAgZ290byBlbmQ7Ci0rICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNh LCAxMDI0LCBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMKSkKLSsgICAgICAgIGdvdG8gZW5kOwot KyAgICBpZiAoIURTQV9nZW5lcmF0ZV9rZXkoZHNhKSkKLSsgICAgICAgIGdvdG8gZW5kOwotKyAg ICBpZiAoYmFkKQotKyAgICAgICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKLSsKLSsg ICAgcGsudHlwZSA9IEVWUF9QS0VZX0RTQTsKLSsgICAgcGsucGtleS5kc2EgPSBkc2E7Ci0rCi0r ICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKLSsgICAg ICAgIGdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXpl b2YoZGdzdCkgLSAxKSkKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduRmlu YWwoJm1jdHgsIGJ1ZiwgJnNsZW4sICZwaykpCi0rICAgICAgICBnb3RvIGVuZDsKLSsKLSsgICAg aWYgKCFFVlBfVmVyaWZ5SW5pdF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCi0rICAgICAg ICBnb3RvIGVuZDsKLSsgICAgaWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXpl b2YoZGdzdCkgLSAxKSkKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICByID0gRVZQX1ZlcmlmeUZp bmFsKCZtY3R4LCBidWYsIHNsZW4sICZwayk7Ci0rIGVuZDoKLSsgICAgRVZQX01EX0NUWF9jbGVh bnVwKCZtY3R4KTsKLSsgICAgaWYgKGRzYSkKLSsgICAgICAgIERTQV9mcmVlKGRzYSk7Ci0rICAg IGlmIChyICE9IDEpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwot Ky8qCi0rICogUlNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50 ZXh0LgotKyAqLwotK3N0YXRpYyBpbnQgRklQU19yc2FfdGVzdChpbnQgYmFkKQotK3sKLSsgICAg UlNBICprZXk7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaW5wdXRfcHRleHRbXSA9ICJldGFvbnJpc2hk bGMiOwotKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOwotKyAgICB1bnNpZ25lZCBpbnQgc2xl bjsKLSsgICAgQklHTlVNICpibjsKLSsgICAgRVZQX01EX0NUWCBtY3R4OwotKyAgICBFVlBfUEtF WSBwazsKLSsgICAgaW50IHIgPSAwOwotKwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAg RVZQX01EX0NUWF9pbml0KCZtY3R4KTsKLSsgICAga2V5ID0gUlNBX25ldygpOwotKyAgICBibiA9 IEJOX25ldygpOwotKyAgICBpZiAoIWtleSB8fCAhYm4pCi0rICAgICAgICByZXR1cm4gMDsKLSsg ICAgQk5fc2V0X3dvcmQoYm4sIDY1NTM3KTsKLSsgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4 KGtleSwgMTAyNCwgYm4sIE5VTEwpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIEJOX2ZyZWUo Ym4pOwotKyAgICBpZiAoYmFkKQotKyAgICAgICAgQk5fYWRkX3dvcmQoa2V5LT5uLCAxKTsKLSsK LSsgICAgcGsudHlwZSA9IEVWUF9QS0VZX1JTQTsKLSsgICAgcGsucGtleS5yc2EgPSBrZXk7Ci0r Ci0rICAgIGlmICghRVZQX1NpZ25Jbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKLSsg ICAgICAgIGdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBpbnB1dF9w dGV4dCwgc2l6ZW9mKGlucHV0X3B0ZXh0KSAtIDEpKQotKyAgICAgICAgZ290byBlbmQ7Ci0rICAg IGlmICghRVZQX1NpZ25GaW5hbCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKLSsgICAgICAgIGdv dG8gZW5kOwotKwotKyAgICBpZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgp LCBOVUxMKSkKLSsgICAgICAgIGdvdG8gZW5kOwotKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUo Jm1jdHgsIGlucHV0X3B0ZXh0LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCi0rICAgICAgICBn b3RvIGVuZDsKLSsgICAgciA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGsp OwotKyBlbmQ6Ci0rICAgIEVWUF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7Ci0rICAgIGlmIChrZXkp Ci0rICAgICAgICBSU0FfZnJlZShrZXkpOwotKyAgICBpZiAociAhPSAxKQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsvKiBTSEExOiBnZW5lcmF0ZSBoYXNoIG9m IGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVk IGNvcnJlY3QgaGFzaAotKyovCi0rc3RhdGljIGludCBGSVBTX3NoYTFfdGVzdCgpCi0rewotKyAg ICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEFfRElHRVNUX0xFTkdUSF0gPQotKyAgICAgICAgeyAw eDExLCAweGYxLCAweDlhLCAweDNhLCAweGVjLCAweDFhLCAweDFlLCAweDhlLCAweDY1LCAweGQ0 LCAweDlhLAotKzB4MzgsIDB4MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUs IDB4MTggfTsKLSsgICAgdW5zaWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKLSsKLSsg ICAgdW5zaWduZWQgY2hhciBtZFtTSEFfRElHRVNUX0xFTkdUSF07Ci0rCi0rICAgIEVSUl9jbGVh cl9lcnJvcigpOwotKyAgICBpZiAoIUVWUF9EaWdlc3Qoc3RyLCBzaXplb2Yoc3RyKSAtIDEsIG1k LCBOVUxMLCBFVlBfc2hhMSgpLCBOVUxMKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBpZiAo bWVtY21wKG1kLCBkaWdlc3QsIHNpemVvZihtZCkpKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAg IHJldHVybiAxOwotK30KLSsKLSsvKiBTSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGln ZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBo YXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfc2hhMjU2X3Rlc3QoKQotK3sKLSsgICAgdW5zaWdu ZWQgY2hhciBkaWdlc3RbU0hBMjU2X0RJR0VTVF9MRU5HVEhdID0KLSsgICAgICAgIHsgMHhmNSwg MHg1MywgMHhjZCwgMHhiOCwgMHhjZiwgMHgxLCAweGVlLCAweDE3LCAweDliLCAweDkzLCAweGM5 LAotKzB4NjgsIDB4YzAsIDB4ZWEsIDB4NDAsIDB4OTEsCi0rICAgICAgICAweDYsIDB4ZWMsIDB4 OGUsIDB4MTEsIDB4OTYsIDB4YzgsIDB4NWQsIDB4MWMsIDB4YWYsIDB4NjQsIDB4MjIsIDB4ZTYs Ci0rICAgICAgICAgICAgMHg1MCwgMHg0ZiwgMHg0NywgMHg1NwotKyAgICB9OwotKyAgICB1bnNp Z25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1k W1NIQTI1Nl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAg IGlmICghRVZQX0RpZ2VzdChzdHIsIHNpemVvZihzdHIpIC0gMSwgbWQsIE5VTEwsIEVWUF9zaGEy NTYoKSwgTlVMTCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCwgZGln ZXN0LCBzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSt9 Ci0rCi0rLyogU0hBNTEyOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQg Y29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0rc3Rh dGljIGludCBGSVBTX3NoYTUxMl90ZXN0KCkKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0 W1NIQTUxMl9ESUdFU1RfTEVOR1RIXSA9Ci0rICAgICAgICB7IDB4OTksIDB4YzksIDB4ZTksIDB4 NWIsIDB4ODgsIDB4ZDQsIDB4NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4NWYsCi0rMHg5NCwgMHg3 MSwgMHg2NCwgMHgyOCwgMHhjYSwKLSsgICAgICAgIDB4MTYsIDB4MWYsIDB4M2QsIDB4ZjQsIDB4 MWYsIDB4ZjMsIDB4MGYsIDB4YzUsIDB4MDMsIDB4OTksIDB4YjIsCi0rICAgICAgICAgICAgMHhk MCwgMHhlNywgMHgwYiwgMHg5NCwgMHg0YSwKLSsgICAgICAgIDB4NDUsIDB4ZDIsIDB4NmMsIDB4 NGYsIDB4MjAsIDB4MDYsIDB4ZWYsIDB4NzEsIDB4YTksIDB4MjUsIDB4N2YsCi0rICAgICAgICAg ICAgMHgyNCwgMHhiMSwgMHhkOSwgMHg0MCwgMHgyMiwKLSsgICAgICAgIDB4NDksIDB4NTQsIDB4 MTAsIDB4YzIsIDB4MjIsIDB4OWQsIDB4MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYsCi0rICAg ICAgICAgICAgMHhlYiwgMHgyZCwgMHg0MiwgMHgxZCwgMHhhMwotKyAgICB9OwotKyAgICB1bnNp Z25lZCBjaGFyIHN0cltdID0gImV0YW9ucmlzaGQiOwotKwotKyAgICB1bnNpZ25lZCBjaGFyIG1k W1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAg IGlmICghRVZQX0RpZ2VzdChzdHIsIHNpemVvZihzdHIpIC0gMSwgbWQsIE5VTEwsIEVWUF9zaGE1 MTIoKSwgTlVMTCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChtZCwgZGln ZXN0LCBzaXplb2YobWQpKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSt9 Ci0rCi0rLyogSE1BQy1TSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBh bmQgY29tcGFyZSB0byBrbm93bgotKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAotKyovCi0r c3RhdGljIGludCBGSVBTX2htYWNfc2hhMV90ZXN0KCkKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIg a2V5W10gPSAiZXRhb25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUg dGV4dCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rICAg ICAgICB7IDB4NzMsIDB4ZjcsIDB4YTAsIDB4NDgsIDB4ZjgsIDB4OTQsIDB4ZWQsIDB4ZGQsIDB4 MGEsIDB4ZWEsIDB4ZWEsCi0rMHg1NiwgMHgxYiwgMHg2MSwgMHgyZSwgMHg3MCwKLSsgICAgICAg IDB4YjIsIDB4ZmIsIDB4ZWMsIDB4YzYKLSsgICAgfTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBv dXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAg RVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQwotKyAgICAgICAgKEVWUF9zaGExKCks IGtleSwgc2l6ZW9mKGtleSkgLSAxLCBpdiwgc2l6ZW9mKGl2KSAtIDEsIG91dCwgJm91dGxlbikp Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgaWYgKG1lbWNtcChvdXQsIGthdmFsLCBvdXRsZW4p KQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIHJldHVybiAxOwotK30KLSsKLSsvKiBITUFDLVNI QTIyNDogZ2VuZXJhdGUgaGFzaCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8g a25vd24KLSsgICBwcmVjb21wdXRlZCBjb3JyZWN0IGhhc2gKLSsqLwotK3N0YXRpYyBpbnQgRklQ U19obWFjX3NoYTIyNF90ZXN0KCkKLSt7Ci0rICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRh b25yaXNoZCI7Ci0rICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7Ci0rICAg IHVuc2lnbmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9Ci0rICAgICAgICB7IDB4NzUs IDB4NTgsIDB4ZDUsIDB4YmQsIDB4NTUsIDB4NmQsIDB4ODcsIDB4MGYsIDB4NzUsIDB4ZmYsIDB4 YmUsCi0rMHgxYywgMHhiMiwgMHhmMCwgMHgyMCwgMHgzNSwKLSsgICAgICAgIDB4ZTUsIDB4NjIs IDB4NDksIDB4YjYsIDB4OTQsIDB4YjksIDB4ZmMsIDB4NjUsIDB4MzQsIDB4MzMsIDB4M2EsIDB4 MTkKLSsgICAgfTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsK LSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0r ICAgIGlmICghSE1BQwotKyAgICAgICAgKEVWUF9zaGEyMjQoKSwga2V5LCBzaXplb2Yoa2V5KSAt IDEsIGl2LCBzaXplb2YoaXYpIC0gMSwgb3V0LAotKyAgICAgICAgICZvdXRsZW4pKQotKyAgICAg ICAgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LCBrYXZhbCwgb3V0bGVuKSkKLSsgICAg ICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rLyogSE1BQy1TSEEyNTY6IGdl bmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0r ICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19z aGEyNTZfdGVzdCgpCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQi OwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25l ZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKyAgICAgICAgeyAweGU5LCAweDE3LCAw eGMxLCAweDdiLCAweDRjLCAweDZiLCAweDc3LCAweGRhLCAweGQyLCAweDMwLCAweDM2LAotKzB4 MDIsIDB4ZjUsIDB4NzIsIDB4MzMsIDB4ODcsCi0rICAgICAgICAweDlmLCAweGM2LCAweDZlLCAw eDdiLCAweDdlLCAweGE4LCAweGVhLCAweGFhLCAweDlmLCAweGJhLCAweGVlLAotKyAgICAgICAg ICAgIDB4NTEsIDB4ZmYsIDB4ZGEsIDB4MjQsIDB4ZjQKLSsgICAgfTsKLSsKLSsgICAgdW5zaWdu ZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsK LSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlmICghSE1BQwotKyAgICAgICAgKEVW UF9zaGEyNTYoKSwga2V5LCBzaXplb2Yoa2V5KSAtIDEsIGl2LCBzaXplb2YoaXYpIC0gMSwgb3V0 LAotKyAgICAgICAgICZvdXRsZW4pKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1j bXAob3V0LCBrYXZhbCwgb3V0bGVuKSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4g MTsKLSt9Ci0rCi0rLyogSE1BQy1TSEEzODQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0 IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNo Ci0rKi8KLStzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEzODRfdGVzdCgpCi0rewotKyAgICB1bnNp Z25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10g PSAiU2FtcGxlIHRleHQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0la RV0gPQotKyAgICAgICAgeyAweGIyLCAweDlkLCAweDQwLCAweDU4LCAweDMyLCAweGM0LCAweGUz LCAweDMxLCAweGI2LCAweDYzLCAweDA4LAotKzB4MjYsIDB4OTksIDB4ZWYsIDB4M2IsIDB4MTAs Ci0rICAgICAgICAweGUyLCAweGRmLCAweGY4LCAweGZmLCAweGM2LCAweGUxLCAweDAzLCAweDI5 LCAweDgxLCAweDJhLCAweDFiLAotKyAgICAgICAgICAgIDB4YWMsIDB4YjAsIDB4MDcsIDB4Mzks IDB4MDgsCi0rICAgICAgICAweGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2LCAweGQ2LCAweDRj LCAweDIwLCAweGZiLCAweDRkLCAweGMzLAotKyAgICAgICAgICAgIDB4ZjMsIDB4YjgsIDB4OWIs IDB4ODgsIDB4MWMKLSsgICAgfTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9N RF9TSVpFXTsKLSsgICAgdW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vy cm9yKCk7Ci0rICAgIGlmICghSE1BQwotKyAgICAgICAgKEVWUF9zaGEzODQoKSwga2V5LCBzaXpl b2Yoa2V5KSAtIDEsIGl2LCBzaXplb2YoaXYpIC0gMSwgb3V0LAotKyAgICAgICAgICZvdXRsZW4p KQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LCBrYXZhbCwgb3V0bGVu KSkKLSsgICAgICAgIHJldHVybiAwOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rLyogSE1BQy1T SEE1MTI6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRv IGtub3duCi0rICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCi0rKi8KLStzdGF0aWMgaW50IEZJ UFNfaG1hY19zaGE1MTJfdGVzdCgpCi0rewotKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0 YW9ucmlzaGQiOwotKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwotKyAg ICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQotKyAgICAgICAgeyAweGNk LCAweDNlLCAweGI5LCAweDUxLCAweGI4LCAweGJjLCAweDdmLCAweDlhLCAweDIzLCAweGFmLCAw eGYzLAotKzB4NzcsIDB4NTksIDB4ODUsIDB4YTksIDB4ZTYsCi0rICAgICAgICAweGY3LCAweGQx LCAweDUxLCAweDk2LCAweDE3LCAweGUwLCAweDkyLCAweGQ4LCAweGE2LCAweDNiLCAweGMxLAot KyAgICAgICAgICAgIDB4YWQsIDB4N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCi0rICAgICAgICAweGQ3 LCAweDc5LCAweDBhLCAweGE1LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAw eDUyLAotKyAgICAgICAgICAgIDB4NmIsIDB4NjEsIDB4N2YsIDB4ZWIsIDB4OWMsCi0rICAgICAg ICAweDQ3LCAweDg2LCAweDVkLCAweDc0LCAweDJiLCAweDg4LCAweGRmLCAweGVlLCAweDQ2LCAw eDY5LCAweDk2LAotKyAgICAgICAgICAgIDB4M2QsIDB4YTYsIDB4ZDksIDB4MmEsIDB4NTMKLSsg ICAgfTsKLSsKLSsgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKLSsgICAg dW5zaWduZWQgaW50IG91dGxlbjsKLSsKLSsgICAgRVJSX2NsZWFyX2Vycm9yKCk7Ci0rICAgIGlm ICghSE1BQwotKyAgICAgICAgKEVWUF9zaGE1MTIoKSwga2V5LCBzaXplb2Yoa2V5KSAtIDEsIGl2 LCBzaXplb2YoaXYpIC0gMSwgb3V0LAotKyAgICAgICAgICZvdXRsZW4pKQotKyAgICAgICAgcmV0 dXJuIDA7Ci0rICAgIGlmIChtZW1jbXAob3V0LCBrYXZhbCwgb3V0bGVuKSkKLSsgICAgICAgIHJl dHVybiAwOwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rLyogREg6IGdlbmVyYXRlIHNoYXJlZCBw YXJhbWV0ZXJzCi0rKi8KLStzdGF0aWMgaW50IGRoX3Rlc3QoKQotK3sKLSsgICAgREggKmRoOwot KyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgZGggPSBGSVBTX2RoX25ldygpOwotKyAgICBp ZiAoIWRoKQotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIGlmICghREhfZ2VuZXJhdGVfcGFyYW1l dGVyc19leChkaCwgMTAyNCwgMiwgTlVMTCkpCi0rICAgICAgICByZXR1cm4gMDsKLSsgICAgRklQ U19kaF9mcmVlKGRoKTsKLSsgICAgcmV0dXJuIDE7Ci0rfQotKwotKy8qIFplcm9pemUKLSsqLwot K3N0YXRpYyBpbnQgWmVyb2l6ZSgpCi0rewotKyAgICBSU0EgKmtleTsKLSsgICAgQklHTlVNICpi bjsKLSsgICAgdW5zaWduZWQgY2hhciB1c2Vya2V5WzE2XSA9Ci0rICAgICAgICB7IDB4NDgsIDB4 NTAsIDB4ZjAsIDB4YTMsIDB4M2EsIDB4ZWQsIDB4ZDMsIDB4YWYsIDB4NmUsIDB4NDcsIDB4N2Ys Ci0rMHg4MywgMHgwMiwgMHhiMSwgMHgwOSwgMHg2OCB9OwotKyAgICBpbnQgaSwgbjsKLSsKLSsg ICAga2V5ID0gRklQU19yc2FfbmV3KCk7Ci0rICAgIGJuID0gQk5fbmV3KCk7Ci0rICAgIGlmICgh a2V5IHx8ICFibikKLSsgICAgICAgIHJldHVybiAwOwotKyAgICBCTl9zZXRfd29yZChibiwgNjU1 MzcpOwotKyAgICBpZiAoIVJTQV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LCBibiwgTlVMTCkp Ci0rICAgICAgICByZXR1cm4gMDsKLSsgICAgQk5fZnJlZShibik7Ci0rCi0rICAgIG4gPSBCTl9u dW1fYnl0ZXMoa2V5LT5kKTsKLSsgICAgcHJpbnRmKCIgR2VuZXJhdGVkICVkIGJ5dGUgUlNBIHBy aXZhdGUga2V5XG4iLCBuKTsKLSsgICAgcHJpbnRmKCJcdEJOIGtleSBiZWZvcmUgb3ZlcndyaXRp bmc6XG4iKTsKLSsgICAgZG9fYm5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOwotKyAgICBCTl9yYW5k KGtleS0+ZCwgbiAqIDgsIC0xLCAwKTsKLSsgICAgcHJpbnRmKCJcdEJOIGtleSBhZnRlciBvdmVy d3JpdGluZzpcbiIpOwotKyAgICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7Ci0rCi0rICAg IHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsK LSsgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKQotKyAgICAgICAgcHJp bnRmKCIlMDJ4IiwgdXNlcmtleVtpXSk7Ci0rICAgIHByaW50ZigiXG4iKTsKLSsgICAgUkFORF9i eXRlcyh1c2Vya2V5LCBzaXplb2YgdXNlcmtleSk7Ci0rICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZl ciBrZXkgYWZ0ZXIgb3ZlcndyaXRpbmc6IFxuXHRcdCIpOwotKyAgICBmb3IgKGkgPSAwOyBpIDwg c2l6ZW9mKHVzZXJrZXkpOyBpKyspCi0rICAgICAgICBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ld KTsKLSsgICAgcHJpbnRmKCJcbiIpOwotKwotKyAgICByZXR1cm4gMTsKLSt9Ci0rCi0rc3RhdGlj IGludCBFcnJvcjsKLStjb25zdCBjaGFyICpGYWlsKGNvbnN0IGNoYXIgKm1zZykKLSt7Ci0rICAg IGRvX3ByaW50X2Vycm9ycygpOwotKyAgICBFcnJvcisrOwotKyAgICByZXR1cm4gbXNnOwotK30K LSsKLStpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi0rewotKwotKyAgICBpbnQgZG9f Y29ycnVwdF9yc2Ffa2V5Z2VuID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMDsKLSsgICAg aW50IGJhZF9yc2EgPSAwLCBiYWRfZHNhID0gMDsKLSsgICAgaW50IGRvX3JuZ19zdGljayA9IDA7 Ci0rICAgIGludCBub19leGl0ID0gMDsKLSsKLSsgICAgcHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0 IGFwcGxpY2F0aW9uXG5cbiIpOwotKwotKyAgICAvKiBMb2FkIGVudHJvcHkgZnJvbSBleHRlcm5h bCBmaWxlLCBpZiBhbnkgKi8KLSsgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQiLCAxMDI0KTsKLSsK LSsgICAgaWYgKGFyZ3ZbMV0pIHsKLSsgICAgICAgIC8qIENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8K LSsgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJhZXMiKSkgewotKyAgICAgICAgICAgIEZJ UFNfY29ycnVwdF9hZXMoKTsKLSsgICAgICAgICAgICBwcmludGYoIkFFUyBlbmNyeXB0aW9uL2Rl Y3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAo IXN0cmNtcChhcmd2WzFdLCAiZGVzIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZGVz KCk7Ci0rICAgICAgICAgICAgcHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24g d2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChh cmd2WzFdLCAiZHNhIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhKCk7Ci0rICAg ICAgICAgICAgcHJpbnRmCi0rICAgICAgICAgICAgICAgICgiRFNBIGtleSBnZW5lcmF0aW9uIGFu ZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOwotKyAgICAg ICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2EiKSkgewotKyAgICAgICAgICAgIEZJ UFNfY29ycnVwdF9yc2EoKTsKLSsgICAgICAgICAgICBwcmludGYKLSsgICAgICAgICAgICAgICAg KCJSU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVw dGVkIEtBVC4uLlxuIik7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJz YWtleSIpKSB7Ci0rICAgICAgICAgICAgcHJpbnRmCi0rICAgICAgICAgICAgICAgICgiUlNBIGtl eSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXku Li5cbiIpOwotKyAgICAgICAgICAgIGJhZF9yc2EgPSAxOwotKyAgICAgICAgICAgIG5vX2V4aXQg PSAxOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXlnZW4iKSkg ewotKyAgICAgICAgICAgIGRvX2NvcnJ1cHRfcnNhX2tleWdlbiA9IDE7Ci0rICAgICAgICAgICAg bm9fZXhpdCA9IDE7Ci0rICAgICAgICAgICAgcHJpbnRmCi0rICAgICAgICAgICAgICAgICgiUlNB IGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBr ZXlnZW4uLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2Fr ZXkiKSkgewotKyAgICAgICAgICAgIHByaW50ZgotKyAgICAgICAgICAgICAgICAoIkRTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4u XG4iKTsKLSsgICAgICAgICAgICBiYWRfZHNhID0gMTsKLSsgICAgICAgICAgICBub19leGl0ID0g MTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5Z2VuIikpIHsK LSsgICAgICAgICAgICBkb19jb3JydXB0X2RzYV9rZXlnZW4gPSAxOwotKyAgICAgICAgICAgIG5v X2V4aXQgPSAxOwotKyAgICAgICAgICAgIHByaW50ZgotKyAgICAgICAgICAgICAgICAoIkRTQSBr ZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5 Z2VuLi4uXG4iKTsKLSsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hhMSIp KSB7Ci0rICAgICAgICAgICAgRklQU19jb3JydXB0X3NoYTEoKTsKLSsgICAgICAgICAgICBwcmlu dGYoIlNIQS0xIGhhc2ggd2l0aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKLSsgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAicm5nIikpIHsKLSsgICAgICAgICAgICBGSVBTX2NvcnJ1 cHRfcm5nKCk7Ci0rICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJuZ3N0aWNr IikpIHsKLSsgICAgICAgICAgICBkb19ybmdfc3RpY2sgPSAxOwotKyAgICAgICAgICAgIG5vX2V4 aXQgPSAxOwotKyAgICAgICAgICAgIHByaW50ZigiUk5HIHRlc3Qgd2l0aCBzdHVjayBjb250aW51 b3VzIHRlc3QuLi5cbiIpOwotKyAgICAgICAgfSBlbHNlIHsKLSsgICAgICAgICAgICBwcmludGYo IkJhZCBhcmd1bWVudCBcIiVzXCJcbiIsIGFyZ3ZbMV0pOwotKyAgICAgICAgICAgIGV4aXQoMSk7 Ci0rICAgICAgICB9Ci0rICAgICAgICBpZiAoIW5vX2V4aXQpIHsKLSsgICAgICAgICAgICBpZiAo IUZJUFNfbW9kZV9zZXQoMSkpIHsKLSsgICAgICAgICAgICAgICAgZG9fcHJpbnRfZXJyb3JzKCk7 Ci0rICAgICAgICAgICAgICAgIHByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxlZFxuIik7 Ci0rICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0rICAgICAgICAgICAgfQotKyAgICAgICAgICAg IHByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IHN1Y2Nlc3NmdWxcbiIpOwotKyAgICAgICAgICAg IGV4aXQoMCk7Ci0rICAgICAgICB9Ci0rICAgIH0KLSsKLSsgICAgLyogTm9uLUFwcHJvdmVkIGNy eXB0b2dyYXBoaWMgb3BlcmF0aW9uCi0rICAgICAqLwotKyAgICBwcmludGYoIjEuIE5vbi1BcHBy b3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKLSsgICAgcHJpbnRmKCJc dGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOwotKyAgICBwcmludGYoZGhfdGVzdCgp PyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKLSsKLSsgICAgLyogUG93ZXIt dXAgc2VsZiB0ZXN0Ci0rICAgICAqLwotKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSsgICAgcHJp bnRmKCIyLiBBdXRvbWF0aWMgcG93ZXItdXAgc2VsZiB0ZXN0Li4uIik7Ci0rICAgIGlmICghRklQ U19tb2RlX3NldCgxKSkgewotKyAgICAgICAgZG9fcHJpbnRfZXJyb3JzKCk7Ci0rICAgICAgICBw cmludGYoRmFpbCgiRkFJTEVEIVxuIikpOwotKyAgICAgICAgZXhpdCgxKTsKLSsgICAgfQotKyAg ICBwcmludGYoInN1Y2Nlc3NmdWxcbiIpOwotKyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2Vu KQotKyAgICAgICAgRklQU19jb3JydXB0X2RzYV9rZXlnZW4oKTsKLSsgICAgaWYgKGRvX2NvcnJ1 cHRfcnNhX2tleWdlbikKLSsgICAgICAgIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKCk7Ci0rICAg IGlmIChkb19ybmdfc3RpY2spCi0rICAgICAgICBGSVBTX3JuZ19zdGljaygpOwotKwotKyAgICAv KiBBRVMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICAqLwotKyAgICBwcmludGYoIjMuIEFF UyBlbmNyeXB0aW9uL2RlY3J5cHRpb24uLi4iKTsKLSsgICAgcHJpbnRmKEZJUFNfYWVzX3Rlc3Qo KT8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCi0rICAgIC8qIFJTQSBr ZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCi0rICAgICAqLwotKyAgICBw cmludGYoIjQuIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4u Iik7Ci0rICAgIHByaW50ZihGSVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3NmdWxcbiIg OiBGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCi0rICAgIC8qIERFUy1DQkMgZW5jcnlwdGlvbi9kZWNy eXB0aW9uCi0rICAgICAqLwotKyAgICBwcmludGYoIjUuIERFUy1FQ0IgZW5jcnlwdGlvbi9kZWNy eXB0aW9uLi4uIik7Ci0rICAgIHByaW50ZihGSVBTX2RlczNfdGVzdCgpPyAic3VjY2Vzc2Z1bFxu IiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKLSsKLSsgICAgLyogRFNBIGtleSBnZW5lcmF0aW9uIGFu ZCBzaWduYXR1cmUgdmFsaWRhdGlvbgotKyAgICAgKi8KLSsgICAgcHJpbnRmKCI2LiBEU0Ega2V5 IGdlbmVyYXRpb24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uLi4uIik7Ci0rICAgIHByaW50ZihG SVBTX2RzYV90ZXN0KGJhZF9kc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4i KSk7Ci0rCi0rICAgIC8qIFNIQS0xIGhhc2gKLSsgICAgICovCi0rICAgIHByaW50ZigiN2EuIFNI QS0xIGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKEZJUFNfc2hhMV90ZXN0KCk/ICJzdWNjZXNzZnVs XG4iIDogRmFpbCgiRkFJTEVEIVxuIikpOwotKwotKyAgICAvKiBTSEEtMjU2IGhhc2gKLSsgICAg ICovCi0rICAgIHByaW50ZigiN2IuIFNIQS0yNTYgaGFzaC4uLiIpOwotKyAgICBwcmludGYoRklQ U19zaGEyNTZfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKLSsK LSsgICAgLyogU0hBLTUxMiBoYXNoCi0rICAgICAqLwotKyAgICBwcmludGYoIjdjLiBTSEEtNTEy IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKEZJUFNfc2hhNTEyX3Rlc3QoKT8gInN1Y2Nlc3NmdWxc biIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTEgaGFzaAotKyAg ICAgKi8KLSsgICAgcHJpbnRmKCI3ZC4gSE1BQy1TSEEtMSBoYXNoLi4uIik7Ci0rICAgIHByaW50 ZihGSVBTX2htYWNfc2hhMV90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxu IikpOwotKwotKyAgICAvKiBITUFDLVNIQS0yMjQgaGFzaAotKyAgICAgKi8KLSsgICAgcHJpbnRm KCI3ZS4gSE1BQy1TSEEtMjI0IGhhc2guLi4iKTsKLSsgICAgcHJpbnRmKEZJUFNfaG1hY19zaGEy MjRfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKLSsKLSsgICAg LyogSE1BQy1TSEEtMjU2IGhhc2gKLSsgICAgICovCi0rICAgIHByaW50ZigiN2YuIEhNQUMtU0hB LTI1NiBoYXNoLi4uIik7Ci0rICAgIHByaW50ZihGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKT8gInN1 Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7Ci0rCi0rICAgIC8qIEhNQUMtU0hBLTM4 NCBoYXNoCi0rICAgICAqLwotKyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIp OwotKyAgICBwcmludGYoRklQU19obWFjX3NoYTM4NF90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDog RmFpbCgiRkFJTEVEIVxuIikpOwotKwotKyAgICAvKiBITUFDLVNIQS01MTIgaGFzaAotKyAgICAg Ki8KLSsgICAgcHJpbnRmKCI3aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4iKTsKLSsgICAgcHJpbnRm KEZJUFNfaG1hY19zaGE1MTJfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFc biIpKTsKLSsKLSsgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCi0r ICAgICAqLwotKyAgICBwcmludGYoIjguIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJh dGlvbiB0ZXN0Li4uXG4iKTsKLSsgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAo RC1IKS4uLiIpOwotKyAgICBwcmludGYoZGhfdGVzdCgpPyAic3VjY2Vzc2Z1bCBhcyBleHBlY3Rl ZFxuIgotKyAgICAgICAgICAgOiBGYWlsKCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSk7Ci0rCi0r ICAgIC8qIFplcm9pemF0aW9uCi0rICAgICAqLwotKyAgICBwcmludGYoIjkuIFplcm8taXphdGlv bi4uLlxuIik7Ci0rICAgIHByaW50ZihaZXJvaXplKCk/ICJcdHN1Y2Nlc3NmdWwgYXMgZXhwZWN0 ZWRcbiIKLSsgICAgICAgICAgIDogRmFpbCgiXHRmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSk7Ci0r Ci0rICAgIHByaW50ZigiXG5BbGwgdGVzdHMgY29tcGxldGVkIHdpdGggJWQgZXJyb3JzXG4iLCBF cnJvcik7Ci0rICAgIHJldHVybiBFcnJvciA/IDEgOiAwOwotK30KLSsKLSsjZW5kaWYKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL2ZpcHMvTWFrZWZpbGUKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vZmlwcy9N YWtlZmlsZS5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI0OTE2NzA0ICswMTAwCi0rKysgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL2ZpcHMvTWFrZWZpbGUJMjAxNi0wMy0wMSAxNjozMzowNy42MjQ5 MTY3MDQgKzAxMDAKLUBAIC0wLDAgKzEsMzQxIEBACi0rIwotKyMgT3BlblNTTC9jcnlwdG8vZmlw cy9NYWtlZmlsZQotKyMKLSsKLStESVI9CWZpcHMKLStUT1A9CS4uLy4uCi0rQ0M9CWNjCi0rSU5D TFVERVM9Ci0rQ0ZMQUc9LWcKLStNQUtFRklMRT0JTWFrZWZpbGUKLStBUj0JCWFyIHIKLSsKLStD RkxBR1M9ICQoSU5DTFVERVMpICQoQ0ZMQUcpCi0rCi0rR0VORVJBTD1NYWtlZmlsZQotK1RFU1Q9 Zmlwc190ZXN0X3N1aXRlLmMgZmlwc19yYW5kdGVzdC5jCi0rQVBQUz0KLSsKLStQUk9HUkFNPSBm aXBzX3N0YW5kYWxvbmVfaG1hYwotK0VYRT0gJChQUk9HUkFNKSQoRVhFX0VYVCkKLSsKLStMSUI9 JChUT1ApL2xpYmNyeXB0by5hCi0rTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlwc19kZXNf c2VsZnRlc3QuYyBmaXBzX2htYWNfc2VsZnRlc3QuYyBmaXBzX3JhbmRfc2VsZnRlc3QuYyBcCi0r ICAgIGZpcHNfcnNhX3NlbGZ0ZXN0LmMgZmlwc19zaGFfc2VsZnRlc3QuYyBmaXBzLmMgZmlwc19k c2Ffc2VsZnRlc3QuYyAgZmlwc19yYW5kLmMgXAotKyAgICBmaXBzX3JzYV94OTMxZy5jIGZpcHNf cG9zdC5jIGZpcHNfZHJiZ19jdHIuYyBmaXBzX2RyYmdfaGFzaC5jIGZpcHNfZHJiZ19obWFjLmMg XAotKyAgICBmaXBzX2RyYmdfbGliLmMgZmlwc19kcmJnX3JhbmQuYyBmaXBzX2RyYmdfc2VsZnRl c3QuYyBmaXBzX3JhbmRfbGliLmMgXAotKyAgICBmaXBzX2NtYWNfc2VsZnRlc3QuYyBmaXBzX2Vu Yy5jIGZpcHNfbWQuYwotKwotK0xJQk9CSj1maXBzX2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3Nl bGZ0ZXN0Lm8gZmlwc19obWFjX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAotKyAg ICBmaXBzX3JzYV9zZWxmdGVzdC5vIGZpcHNfc2hhX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNh X3NlbGZ0ZXN0Lm8gIGZpcHNfcmFuZC5vIFwKLSsgICAgZmlwc19yc2FfeDkzMWcubyBmaXBzX3Bv c3QubyBmaXBzX2RyYmdfY3RyLm8gZmlwc19kcmJnX2hhc2gubyBmaXBzX2RyYmdfaG1hYy5vIFwK LSsgICAgZmlwc19kcmJnX2xpYi5vIGZpcHNfZHJiZ19yYW5kLm8gZmlwc19kcmJnX3NlbGZ0ZXN0 Lm8gZmlwc19yYW5kX2xpYi5vIFwKLSsgICAgZmlwc19jbWFjX3NlbGZ0ZXN0Lm8gZmlwc19lbmMu byBmaXBzX21kLm8KLSsKLStMSUJDUllQVE89LUwuLiAtbGNyeXB0bwotKwotK1NSQz0gJChMSUJT UkMpIGZpcHNfc3RhbmRhbG9uZV9obWFjLmMKLSsKLStFWEhFQURFUj0gZmlwcy5oIGZpcHNfcmFu ZC5oCi0rSEVBREVSPQkkKEVYSEVBREVSKQotKwotK0FMTD0gICAgJChHRU5FUkFMKSAkKFNSQykg JChIRUFERVIpCi0rCi0rdG9wOgotKwkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJ UlM9JChESVIpIHN1Yl9hbGwpCi0rCi0rYWxsOglsaWIgZXhlCi0rCi0rbGliOgkkKExJQk9CSikK LSsJJChBUikgJChMSUIpICQoTElCT0JKKQotKwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2 ZXIgbWluZC4KLSsJQHRvdWNoIGxpYgotKwotK2V4ZToJJChFWEUpCi0rCi0rZmlsZXM6Ci0rCSQo UEVSTCkgJChUT1ApL3V0aWwvZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCi0rCi0r bGlua3M6Ci0rCUAkKFBFUkwpICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wgJChFWEhFQURFUikKLSsJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4u L3Rlc3QgJChURVNUKQotKwlAJChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBw cyAkKEFQUFMpCi0rCi0raW5zdGFsbDoKLSsJQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91 bGQgYmUgc2V0IGJ5IHRvcCBNYWtlZmlsZS4uLgotKwlAaGVhZGVybGlzdD0iJChFWEhFQURFUiki OyBmb3IgaSBpbiAkJGhlYWRlcmxpc3QgOyBcCi0rCWRvICBcCi0rCShjcCAkJGkgJChJTlNUQUxM X1BSRUZJWCkkKElOU1RBTExUT1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKLSsJY2htb2QgNjQ0 ICQoSU5TVEFMTF9QUkVGSVgpJChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwK LSsJZG9uZTsKLSsKLSt0YWdzOgotKwljdGFncyAkKFNSQykKLSsKLSt0ZXN0czoKLSsKLStsaW50 OgotKwlsaW50IC1ETElOVCAkKElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKLSsKLStkZXBlbmQ6Ci0r CUBbIC1uICIkKE1BS0VERVBFTkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmls ZS4uLgotKwkkKE1BS0VERVBFTkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykg LS0gJChQUk9HUykgJChMSUJTUkMpCi0rCi0rZGNsZWFuOgotKwkkKFBFUkwpIC1wZSAnaWYgKC9e IyBETyBOT1QgREVMRVRFIFRISVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxF KSA+TWFrZWZpbGUubmV3Ci0rCW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQotKwotK2Ns ZWFuOgotKwlybSAtZiAqLm8gKi5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAq LmJhayBmbHVmZgotKwotKyQoRVhFKTogJChQUk9HUkFNKS5vCi0rCUZJUFNfU0hBX0FTTT0iIjsg Zm9yIGkgaW4gJChTSEExX0FTTV9PQkopIHNoYTI1Ni5vOyBkbyBGSVBTX1NIQV9BU009IiQkRklQ U19TSEFfQVNNIC4uL3NoYS8kJGkiIDsgZG9uZTsgXAotKwlmb3IgaSBpbiAkKENQVUlEX09CSik7 IGRvIEZJUFNfU0hBX0FTTT0iJCRGSVBTX1NIQV9BU00gLi4vJCRpIiA7IGRvbmU7IFwKLSsJJChD QykgLW8gJEAgJChDRkxBR1MpICQoUFJPR1JBTSkubyAkJEZJUFNfU0hBX0FTTQotKwotKyMgRE8g Tk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLSsKLStm aXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YXNuMS5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwcy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAot K2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29ial9tYWMuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHMubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStm aXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3JzYS5oCi0rZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIGZpcHMuYyBmaXBzX2xvY2wuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlw c19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19h ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vyci5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2Flc19zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19hZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2Flc19zZWxmdGVzdC5jCi0rZmlwc19kZXNf c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvYmlvLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2Rlc19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAot K2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlw c19kZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNf ZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX2Rl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAotK2ZpcHNf ZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19k ZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX2Rl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2Rl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfZGVzX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZGVzX3NlbGZ0 ZXN0LmMKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19kcmJn X2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmgKLStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgK LStmaXBzX2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBz X2RyYmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19k cmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHJiZ19j dHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oCi0rZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2ZpcHNfZHJiZ19jdHIubzogZmlwc19k cmJnX2N0ci5jIGZpcHNfcmFuZF9sY2wuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJn X2hhc2gubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9jcnlwdG8uaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2RyYmdf aGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX2hhc2gu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdfaGFzaC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHJiZ19oYXNoLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5k LmgKLStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgK LStmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNf ZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19o YXNoLmMKLStmaXBzX2RyYmdfaGFzaC5vOiBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RyYmdfaG1h Yy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Fz bjEuaAotK2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX2Ry YmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19kcmJnX2htYWMu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19kcmJnX2htYWMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAot K2ZpcHNfZHJiZ19obWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0r Zmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBz X2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvcmFuZC5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKLStmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFj a3MuaCBmaXBzX2RyYmdfaG1hYy5jCi0rZmlwc19kcmJnX2htYWMubzogZmlwc19yYW5kX2xjbC5o Ci0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZHJiZ19saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vy ci5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHNfcmFuZC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLStmaXBzX2Ry YmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmpfbWFjLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmplY3RzLmgKLStmaXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Ns Y29uZi5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYu aAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAotK2ZpcHNfZHJi Z19saWIubzogZmlwc19kcmJnX2xpYi5jIGZpcHNfbG9jbC5oIGZpcHNfcmFuZF9sY2wuaAotK2Zp cHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYXNuMS5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfZHJiZ19yYW5kLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIu aAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfZHJiZ19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX3JhbmQubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAotK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBz X2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX2Ry YmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfZHJiZ19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19yYW5kLmMKLStm aXBzX2RyYmdfcmFuZC5vOiBmaXBzX3JhbmRfbGNsLmgKLStmaXBzX2RyYmdfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgK LStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlw c19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNf ZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXJyLmgKLStmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2RyYmdfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCi0rZmlwc19kcmJnX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKLStmaXBzX2RyYmdfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKLStmaXBzX2RyYmdfc2VsZnRlc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAotK2ZpcHNfZHJiZ19zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX2RyYmdfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19zZWxmdGVzdC5jCi0rZmlw c19kcmJnX3NlbGZ0ZXN0Lm86IGZpcHNfZHJiZ19zZWxmdGVzdC5oIGZpcHNfbG9jbC5oIGZpcHNf cmFuZF9sY2wuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19kc2Ffc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o Ci0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Vyci5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAotK2ZpcHNfZHNh X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2xoYXNoLmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29iamVjdHMuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v cGVuc3NsY29uZi5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKLStmaXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b3NzbF90eXAuaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z YWZlc3RhY2suaAotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z dGFjay5oCi0rZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhh Y2tzLmggZmlwc19kc2Ffc2VsZnRlc3QuYwotK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IGZpcHNfbG9j bC5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKLStmaXBz X2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9maXBzLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2htYWMuaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvbGhhc2guaAotK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv b2JqX21hYy5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9v YmplY3RzLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29zc2xfdHlwLmgKLStmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zdGFjay5oCi0rZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIGZpcHNfaG1hY19zZWxmdGVzdC5jCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCi0rZmlwc19wb3N0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5 cHRvLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX3Bvc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgK LStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2Jq X21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3Bvc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgK LStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvcnNhLmgKLStmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVz dGFjay5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19wb3N0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfbG9jbC5oIGZpcHNfcG9zdC5jCi0rZmlw c19yYW5kLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKLStmaXBz X3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvYmlvLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oCi0rZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX3JhbmQubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19y YW5kLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3JhbmQubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xf dHlwLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStmaXBzX3Jh bmQubzogZmlwc19sb2NsLmggZmlwc19yYW5kLmMKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2Vf b3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlw c19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Vfb3MyLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lcnIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKLStmaXBzX3JhbmRfbGliLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFu ZC5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCi0rZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbGNvbmYuaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2x2LmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKLStmaXBzX3JhbmRfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL3N0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKLStmaXBz X3JhbmRfbGliLm86IGZpcHNfcmFuZF9saWIuYwotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAotK2Zp cHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKLStmaXBzX3Jh bmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19yYW5k X3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lcnIuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAotK2ZpcHNfcmFuZF9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKLStmaXBzX3JhbmRfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCi0rZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKLStmaXBzX3JhbmRfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX3JhbmRfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKLStmaXBzX3JhbmRfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAotK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKLStmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19sb2NsLmgKLStmaXBzX3JhbmRfc2VsZnRl c3QubzogZmlwc19yYW5kX3NlbGZ0ZXN0LmMKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNf cnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfcnNhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Zmlwcy5oCi0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNo LmgKLStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o Ci0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAot K2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5o Ci0rZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgK LStmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAot K2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAotK2ZpcHNf cnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAotK2ZpcHNf cnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCi0rZmlwc19yc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19yc2Ffc2Vs ZnRlc3QuYwotK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCi0rZmlwc19y c2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vyci5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAotK2ZpcHNfcnNhX3g5MzFnLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCi0rZmlwc19yc2FfeDkzMWcubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKLStmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKLStm aXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKLStmaXBz X3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfcnNhX3g5 MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfcnNhX3g5MzFnLmMK LStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9iaW8uaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAotK2ZpcHNfc2hhX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZmlwcy5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xo YXNoLmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21h Yy5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMu aAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29u Zi5oCi0rZmlwc19zaGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmgKLStmaXBzX3NoYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAu aAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2su aAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAotK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfc2hhX3NlbGZ0ZXN0LmMKLWRpZmYgLXVwIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9obWFjL2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0 by9obWFjL2htYWMuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9obWFjL2htYWMuYy5maXBz CTIwMTYtMDMtMDEgMTQ6MzU6NTMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL2htYWMvaG1hYy5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI0OTE2NzA0ICswMTAwCi1A QCAtODksMTIgKzg5LDYgQEAgaW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2 bwotICAgICAgICAgICAgIEVWUGVycihFVlBfRl9ITUFDX0lOSVRfRVgsIEVWUF9SX0RJU0FCTEVE X0ZPUl9GSVBTKTsKLSAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgIH0KLS0gICAgICAg IC8qCi0tICAgICAgICAgKiBPdGhlciBhbGdvcml0aG0gYmxvY2tpbmcgd2lsbCBiZSBkb25lIGlu IEZJUFNfY21hY19pbml0LCB2aWEKLS0gICAgICAgICAqIEZJUFNfaG1hY19pbml0X2V4KCkuCi0t ICAgICAgICAgKi8KLS0gICAgICAgIGlmICghaW1wbCAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCi0t ICAgICAgICAgICAgcmV0dXJuIEZJUFNfaG1hY19pbml0X2V4KGN0eCwga2V5LCBsZW4sIG1kLCBO VUxMKTsKLSAgICAgfQotICNlbmRpZgotICAgICAvKiBJZiB3ZSBhcmUgY2hhbmdpbmcgTUQgdGhl biB3ZSBtdXN0IGhhdmUgYSBrZXkgKi8KLUBAIC0xMTEsNiArMTA1LDEzIEBAIGludCBITUFDX0lu aXRfZXgoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm8KLSAgICAgfQotIAotICAgICBpZiAoa2V5ICE9 IE5VTEwpIHsKLSsjaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgICAgICBpZiAoRklQU19tb2RlKCkg JiYgIShtZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKQotKyAgICAgICAgICAgICYmICghKGN0 eC0+bWRfY3R4LmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQotKyAgICAg ICAgICAgICAgICB8fCAhKGN0eC0+aV9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpCi0rICAgICAgICAgICAgICAgIHx8ICEoY3R4LT5vX2N0eC5mbGFncyAmIEVWUF9N RF9DVFhfRkxBR19OT05fRklQU19BTExPVykpKQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyNl bmRpZgotICAgICAgICAgcmVzZXQgPSAxOwotICAgICAgICAgaiA9IEVWUF9NRF9ibG9ja19zaXpl KG1kKTsKLSAgICAgICAgIE9QRU5TU0xfYXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5rZXkp KTsKLUBAIC0xNjQsMTAgKzE2NSw2IEBAIGludCBITUFDX0luaXQoSE1BQ19DVFggKmN0eCwgY29u c3Qgdm9pZAotIAotIGludCBITUFDX1VwZGF0ZShITUFDX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25l ZCBjaGFyICpkYXRhLCBzaXplX3QgbGVuKQotIHsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAg IGlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCi0tICAgICAgICByZXR1cm4g RklQU19obWFjX3VwZGF0ZShjdHgsIGRhdGEsIGxlbik7Ci0tI2VuZGlmCi0gICAgIGlmICghY3R4 LT5tZCkKLSAgICAgICAgIHJldHVybiAwOwotIAotQEAgLTE3OCwxMCArMTc1LDYgQEAgaW50IEhN QUNfRmluYWwoSE1BQ19DVFggKmN0eCwgdW5zaWduZWQgYwotIHsKLSAgICAgdW5zaWduZWQgaW50 IGk7Ci0gICAgIHVuc2lnbmVkIGNoYXIgYnVmW0VWUF9NQVhfTURfU0laRV07Ci0tI2lmZGVmIE9Q RU5TU0xfRklQUwotLSAgICBpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQot LSAgICAgICAgcmV0dXJuIEZJUFNfaG1hY19maW5hbChjdHgsIG1kLCBsZW4pOwotLSNlbmRpZgot IAotICAgICBpZiAoIWN0eC0+bWQpCi0gICAgICAgICBnb3RvIGVycjsKLUBAIC0yMjUsMTIgKzIx OCw2IEBAIGludCBITUFDX0NUWF9jb3B5KEhNQUNfQ1RYICpkY3R4LCBITUFDX0MKLSAKLSB2b2lk IEhNQUNfQ1RYX2NsZWFudXAoSE1BQ19DVFggKmN0eCkKLSB7Ci0tI2lmZGVmIE9QRU5TU0xfRklQ UwotLSAgICBpZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKSB7Ci0tICAgICAg ICBGSVBTX2htYWNfY3R4X2NsZWFudXAoY3R4KTsKLS0gICAgICAgIHJldHVybjsKLS0gICAgfQot LSNlbmRpZgotICAgICBFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+aV9jdHgpOwotICAgICBFVlBf TURfQ1RYX2NsZWFudXAoJmN0eC0+b19jdHgpOwotICAgICBFVlBfTURfQ1RYX2NsZWFudXAoJmN0 eC0+bWRfY3R4KTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9tZGMyL21kYzJkZ3N0 LmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCi0tLS0gb3BlbnNz bC0xLjAuMmcvY3J5cHRvL21kYzIvbWRjMmRnc3QuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6MDUu MDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL21kYzIvbWRjMmRnc3Qu YwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyNDkxNjcwNCArMDEwMAotQEAgLTc2LDcgKzc2LDcgQEAK LSAgICAgICAgICAgICAgICAgICAgICAgICAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+ MjRMKSYweGZmKSkKLSAKLSBzdGF0aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNvbnN0 IHVuc2lnbmVkIGNoYXIgKmluLCBzaXplX3QgbGVuKTsKLS1maXBzX21kX2luaXQoTURDMikKLStu b25maXBzX21kX2luaXQoTURDMikKLSB7Ci0gICAgIGMtPm51bSA9IDA7Ci0gICAgIGMtPnBhZF90 eXBlID0gMTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5m aXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9tZDIvbWQyX2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzCTIwMTYtMDMtMDEgMTQ6MzU6MDUuMDAwMDAw MDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL21kMi9tZDJfZGdzdC5jCTIwMTYt MDMtMDEgMTY6MzM6MDcuNjI0OTE2NzA0ICswMTAwCi1AQCAtNjIsNiArNjIsMTEgQEAKLSAjaW5j bHVkZSA8b3BlbnNzbC9tZDIuaD4KLSAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotICNp bmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1 ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotKwotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgotIAotIGNvbnN0IGNoYXIgTUQyX3ZlcnNpb25bXSA9ICJNRDIiIE9QRU5TU0xfVkVSU0lPTl9Q VEVYVDsKLSAKLUBAIC0xMTksNyArMTI0LDcgQEAgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9p ZCkKLSAgICAgICAgIHJldHVybiAoIm1kMihpbnQpIik7Ci0gfQotIAotLWZpcHNfbWRfaW5pdChN RDIpCi0rbm9uZmlwc19tZF9pbml0KE1EMikKLSB7Ci0gICAgIGMtPm51bSA9IDA7Ci0gICAgIG1l bXNldChjLT5zdGF0ZSwgMCwgc2l6ZW9mIGMtPnN0YXRlKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9tZDQv bWQ0X2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBz CTIwMTYtMDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL21kNC9tZDRfZGdzdC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI1OTE2NzI2ICswMTAw Ci1AQCAtNzIsNyArNzIsNyBAQCBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW10gPSAiTUQ0IiBPUEVO U1NMCi0gI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAotICNk ZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKLSAKLS1maXBzX21k X2luaXQoTUQ0KQotK25vbmZpcHNfbWRfaW5pdChNRDQpCi0gewotICAgICBtZW1zZXQoYywgMCwg c2l6ZW9mKCpjKSk7Ci0gICAgIGMtPkEgPSBJTklUX0RBVEFfQTsKLWRpZmYgLXVwIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9t ZDUvbWQ1X2Rnc3QuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5m aXBzCTIwMTYtMDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MmcvY3J5cHRvL21kNS9tZDVfZGdzdC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI1OTE2NzI2ICsw MTAwCi1AQCAtNzIsNyArNzIsNyBAQCBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW10gPSAiTUQ1IiBP UEVOU1NMCi0gI2RlZmluZSBJTklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAot ICNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKLSAKLS1maXBz X21kX2luaXQoTUQ1KQotK25vbmZpcHNfbWRfaW5pdChNRDUpCi0gewotICAgICBtZW1zZXQoYywg MCwgc2l6ZW9mKCpjKSk7Ci0gICAgIGMtPkEgPSBJTklUX0RBVEFfQTsKLWRpZmYgLXVwIG9wZW5z c2wtMS4wLjJnL2NyeXB0by9vX2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9vX2Zp cHMuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9vX2ZpcHMuYy5maXBzCTIwMTYtMDMtMDEg MTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL29fZmlw cy5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI1OTE2NzI2ICswMTAwCi1AQCAtODAsNiArODAsOCBA QCBpbnQgRklQU19tb2RlX3NldChpbnQgcikKLSAjIGlmbmRlZiBGSVBTX0FVVEhfVVNFUl9QQVNT Ci0gIyAgZGVmaW5lIEZJUFNfQVVUSF9VU0VSX1BBU1MgICAgICJEZWZhdWx0IEZJUFMgQ3J5cHRv IFVzZXIgUGFzc3dvcmQiCi0gIyBlbmRpZgotKyAgICBpZiAociAmJiBGSVBTX21vZHVsZV9tb2Rl KCkpIC8qIGNhbiBiZSBpbXBsaWNpdGx5IGluaXRpYWxpemVkIGJ5IE9QRU5TU0xfaW5pdCgpICov Ci0rICAgICAgICByZXR1cm4gMTsKLSAgICAgaWYgKCFGSVBTX21vZHVsZV9tb2RlX3NldChyLCBG SVBTX0FVVEhfVVNFUl9QQVNTKSkKLSAgICAgICAgIHJldHVybiAwOwotICAgICBpZiAocikKLWRp ZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9vX2luaXQuYy5maXBzIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9vX2luaXQuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9vX2luaXQuYy5maXBz CTIwMTYtMDMtMDEgMTQ6MzU6MDUuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcv Y3J5cHRvL29faW5pdC5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI1OTE2NzI2ICswMTAwCi1AQCAt NTYsOCArNTYsMzcgQEAKLSAjaW5jbHVkZSA8ZV9vcy5oPgotICNpbmNsdWRlIDxvcGVuc3NsL2Vy ci5oPgotICNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotKyMg aW5jbHVkZSA8c3lzL3N0YXQuaD4KLSsjIGluY2x1ZGUgPGZjbnRsLmg+Ci0rIyBpbmNsdWRlIDx1 bmlzdGQuaD4KLSsjIGluY2x1ZGUgPGVycm5vLmg+Ci0rIyBpbmNsdWRlIDxzdGRsaWIuaD4KLSAj IGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotICMgaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+Ci0r Ci0rIyBkZWZpbmUgRklQU19NT0RFX1NXSVRDSF9GSUxFICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNf ZW5hYmxlZCIKLSsKLStzdGF0aWMgdm9pZCBpbml0X2ZpcHNfbW9kZSh2b2lkKQotK3sKLSsgICAg Y2hhciBidWZbMl0gPSAiMCI7Ci0rICAgIGludCBmZDsKLSsKLSsgICAgaWYgKGdldGVudigiT1BF TlNTTF9GT1JDRV9GSVBTX01PREUiKSAhPSBOVUxMKSB7Ci0rICAgICAgICBidWZbMF0gPSAnMSc7 Ci0rICAgIH0gZWxzZSBpZiAoKGZkID0gb3BlbihGSVBTX01PREVfU1dJVENIX0ZJTEUsIE9fUkRP TkxZKSkgPj0gMCkgewotKyAgICAgICAgd2hpbGUgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1Zikp IDwgMCAmJiBlcnJubyA9PSBFSU5UUikgOwotKyAgICAgICAgY2xvc2UoZmQpOwotKyAgICB9Ci0r ICAgIC8qIEZhaWx1cmUgcmVhZGluZyB0aGUgZmlwcyBtb2RlIHN3aXRjaCBmaWxlIG1lYW5zIGp1 c3Qgbm90Ci0rICAgICAqIHN3aXRjaGluZyBpbnRvIEZJUFMgbW9kZS4gV2Ugd291bGQgYnJlYWsg dG9vIG1hbnkgdGhpbmdzCi0rICAgICAqIG90aGVyd2lzZS4uCi0rICAgICAqLwotKwotKyAgICBp ZiAoYnVmWzBdID09ICcxJykgewotKyAgICAgICAgRklQU19tb2RlX3NldCgxKTsKLSsgICAgfQot K30KLSAjZW5kaWYKLSAKLSAvKgotQEAgLTY1LDE5ICs5NCwyNiBAQAotICAqIHNldHMgRklQUyBj YWxsYmFja3MKLSAgKi8KLSAKLS12b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQotK3ZvaWQgT1BFTlNT TF9pbml0X2xpYnJhcnkodm9pZCkKLSB7Ci0gICAgIHN0YXRpYyBpbnQgZG9uZSA9IDA7Ci0gICAg IGlmIChkb25lKQotICAgICAgICAgcmV0dXJuOwotICAgICBkb25lID0gMTsKLSAjaWZkZWYgT1BF TlNTTF9GSVBTCi0tICAgIEZJUFNfc2V0X2xvY2tpbmdfY2FsbGJhY2tzKENSWVBUT19sb2NrLCBD UllQVE9fYWRkX2xvY2spOwotLSAgICBGSVBTX3NldF9lcnJvcl9jYWxsYmFja3MoRVJSX3B1dF9l cnJvciwgRVJSX2FkZF9lcnJvcl92ZGF0YSk7Ci0tICAgIEZJUFNfc2V0X21hbGxvY19jYWxsYmFj a3MoQ1JZUFRPX21hbGxvYywgQ1JZUFRPX2ZyZWUpOwotICAgICBSQU5EX2luaXRfZmlwcygpOwot KyAgICBpbml0X2ZpcHNfbW9kZSgpOwotKyAgICBpZiAoIUZJUFNfbW9kZSgpKSB7Ci0rICAgICAg ICAvKiBDbGVhbiB1cCBwcmVtYXR1cmVseSBzZXQgZGVmYXVsdCByYW5kIG1ldGhvZCAqLwotKyAg ICAgICAgUkFORF9zZXRfcmFuZF9tZXRob2QoTlVMTCk7Ci0rICAgIH0KLSAjZW5kaWYKLSAjaWYg MAotICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbGxlZCBPUEVOU1NMX2luaXRcbiIpOwotICNlbmRp ZgotIH0KLSsKLSt2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQotK3sKLSsgICAgT1BFTlNTTF9pbml0 X2xpYnJhcnkoKTsKLSt9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vb3BlbnNzbGNv bmYuaC5pbi5maXBzIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCi0tLS0g b3BlbnNzbC0xLjAuMmcvY3J5cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcwkyMDE2LTAzLTAxIDE0 OjM1OjA1LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9vcGVuc3Ns Y29uZi5oLmluCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI1OTE2NzI2ICswMTAwCi1AQCAtMSw1ICsx LDIwIEBACi0gLyogY3J5cHRvL29wZW5zc2xjb25mLmguaW4gKi8KLSAKLSsjaWZkZWYgT1BFTlNT TF9ET0lOR19NQUtFREVQRU5ECi0rCi0rLyogSW5jbHVkZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQg aGF2ZSB0byBiZSBleHBsaWNpdGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJlCi0rICogdGhhdCBz aG91bGQgYmUgdmlzaWJsZSB0byBtYWtlZGVwZW5kLgotKyAqCi0rICogW091ciAibWFrZSBkZXBl bmQiIGRvZXNuJ3QgYWN0dWFsbHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNl dHRpbmdzCi0rICogaW5zdGVhZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1 YmRpcmVjdG9yaWVzIHdpdGggZGlzYWJsZWQgYWxnb3JpdGhtcy5dCi0rICovCi0rCi0rI2lmbmRl ZiBPUEVOU1NMX0ZJUFMKLSsjZGVmaW5lIE9QRU5TU0xfRklQUwotKyNlbmRpZgotKwotKyNlbmRp ZgotKwotIC8qIEdlbmVyYXRlIDgwMzg2IGNvZGU/ICovCi0gI3VuZGVmIEkzODZfT05MWQotIAot ZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNz bC0xLjAuMmcvY3J5cHRvL3JhbmQvbWRfcmFuZC5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRv L3JhbmQvbWRfcmFuZC5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAK LSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcmFuZC9tZF9yYW5kLmMJMjAxNi0wMy0wMSAxNjoz MzowNy42MjU5MTY3MjYgKzAxMDAKLUBAIC0zOTEsNyArMzkxLDEwIEBAIGludCBzc2xlYXlfcmFu ZF9ieXRlcyh1bnNpZ25lZCBjaGFyICpidWYKLSAgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19M T0NLX1JBTkQyKTsKLSAgICAgY3J5cHRvX2xvY2tfcmFuZCA9IDE7Ci0gCi0tICAgIGlmICghaW5p dGlhbGl6ZWQpIHsKLSsgICAgLyogYWx3YXlzIHBvbGwgZm9yIGV4dGVybmFsIGVudHJvcHkgaW4g RklQUyBtb2RlLCBkcmJnIHByb3ZpZGVzIHRoZSAKLSsgICAgICogZXhwYW5zaW9uCi0rICAgICAq LwotKyAgICBpZiAoIWluaXRpYWxpemVkIHx8IEZJUFNfbW9kdWxlX21vZGUoKSkgewotICAgICAg ICAgUkFORF9wb2xsKCk7Ci0gICAgICAgICBpbml0aWFsaXplZCA9IDE7Ci0gICAgIH0KLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yYW5kL3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9yYW5kL3JhbmQuaAotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yYW5kL3JhbmQu aC5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuMzY5OTEwOTMzICswMTAwCi0rKysgb3BlbnNzbC0x LjAuMmcvY3J5cHRvL3JhbmQvcmFuZC5oCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI1OTE2NzI2ICsw MTAwCi1AQCAtMTMzLDE2ICsxMzMsMzQgQEAgdm9pZCBFUlJfbG9hZF9SQU5EX3N0cmluZ3Modm9p ZCk7Ci0gLyogRXJyb3IgY29kZXMgZm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8KLSAKLSAvKiBG dW5jdGlvbiBjb2Rlcy4gKi8KLSsjIGRlZmluZSBSQU5EX0ZfRU5HX1JBTkRfR0VUX1JBTkRfTUVU SE9EICAgICAgICAgICAgICAgICAgMTA4Ci0rIyBkZWZpbmUgUkFORF9GX0ZJUFNfUkFORCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMwotKyMgZGVmaW5lIFJBTkRfRl9GSVBTX1JB TkRfQllURVMgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDIKLSsjIGRlZmluZSBSQU5EX0Zf RklQU19SQU5EX1NFVF9EVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTA2Ci0rIyBkZWZpbmUg UkFORF9GX0ZJUFNfWDkzMV9TRVRfRFQgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNgotKyMg ZGVmaW5lIFJBTkRfRl9GSVBTX1NFVF9EVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx MDQKLSsjIGRlZmluZSBSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVEICAgICAgICAgICAgICAgICAg ICAgICAgMTA3Ci0rIyBkZWZpbmUgUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSAgICAgICAgICAg ICAgICAgICAgICAgIDEwNQotICMgZGVmaW5lIFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCAg ICAgICAgICAgICAgICAgICAgICAxMDEKLS0jIGRlZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyCi0rIyBkZWZpbmUgUkFORF9GX1JBTkRfSU5J VF9GSVBTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOQotICMgZGVmaW5lIFJBTkRfRl9T U0xFQVlfUkFORF9CWVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKLSAKLSAvKiBSZWFz b24gY29kZXMuICovCi0tIyBkZWZpbmUgUkFORF9SX0RVQUxfRUNfRFJCR19ESVNBQkxFRCAgICAg ICAgICAgICAgICAgICAgIDEwNAotLSMgZGVmaW5lIFJBTkRfUl9FUlJPUl9JTklUSUFMSVNJTkdf RFJCRyAgICAgICAgICAgICAgICAgICAxMDIKLS0jIGRlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFO VElBVElOR19EUkJHICAgICAgICAgICAgICAgICAgMTAzCi0tIyBkZWZpbmUgUkFORF9SX05PX0ZJ UFNfUkFORE9NX01FVEhPRF9TRVQgICAgICAgICAgICAgICAgIDEwMQotKyMgZGVmaW5lIFJBTkRf Ul9EVUFMX0VDX0RSQkdfRElTQUJMRUQgICAgICAgICAgICAgICAgICAgICAxMTQKLSsjIGRlZmlu ZSBSQU5EX1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcgICAgICAgICAgICAgICAgICAgMTEyCi0r IyBkZWZpbmUgUkFORF9SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRyAgICAgICAgICAgICAgICAg IDExMwotKyMgZGVmaW5lIFJBTkRfUl9OT05fRklQU19NRVRIT0QgICAgICAgICAgICAgICAgICAg ICAgICAgICAxMDUKLSsjIGRlZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSAgICAgICAgICAg ICAgICAgICAgICAgICAgMTA2Ci0rIyBkZWZpbmUgUkFORF9SX05PX0ZJUFNfUkFORE9NX01FVEhP RF9TRVQgICAgICAgICAgICAgICAgIDExMQotKyMgZGVmaW5lIFJBTkRfUl9OT19LRVlfU0VUICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDcKLSsjIGRlZmluZSBSQU5EX1JfUFJOR19B U0tJTkdfRk9SX1RPT19NVUNIICAgICAgICAgICAgICAgICAgMTAxCi0rIyBkZWZpbmUgUkFORF9S X1BSTkdfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOAotKyMgZGVmaW5l IFJBTkRfUl9QUk5HX0tFWUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDkKLSsj IGRlZmluZSBSQU5EX1JfUFJOR19OT1RfUkVLRVlFRCAgICAgICAgICAgICAgICAgICAgICAgICAg MTAyCi0rIyBkZWZpbmUgUkFORF9SX1BSTkdfTk9UX1JFU0VFREVEICAgICAgICAgICAgICAgICAg ICAgICAgIDEwMwotICMgZGVmaW5lIFJBTkRfUl9QUk5HX05PVF9TRUVERUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAxMDAKLSsjIGRlZmluZSBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01B VENIX0tFWSAgICAgICAgICAgICAgMTEwCi0rIyBkZWZpbmUgUkFORF9SX1BSTkdfU1RVQ0sgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNAotIAotICNpZmRlZiAgX19jcGx1c3BsdXMK LSB9Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlw cyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKLS0tLSBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjA1LjAw MDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3Qu YwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyNTkxNjcyNiArMDEwMAotQEAgLTcwLDcgKzcwLDcgQEAg dm9pZCByaXBlbWQxNjBfYmxvY2tfeDg2KFJJUEVNRDE2MF9DVFggKgotIHZvaWQgcmlwZW1kMTYw X2Jsb2NrKFJJUEVNRDE2MF9DVFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsIHNpemVfdCBudW0pOwot ICNlbmRpZgotIAotLWZpcHNfbWRfaW5pdChSSVBFTUQxNjApCi0rbm9uZmlwc19tZF9pbml0KFJJ UEVNRDE2MCkKLSB7Ci0gICAgIG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKLSAgICAgYy0+QSA9 IFJJUEVNRDE2MF9BOwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2FfY3Jw dC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2FfY3JwdC5jCi0tLS0gb3BlbnNz bC0xLjAuMmcvY3J5cHRvL3JzYS9yc2FfY3JwdC5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTowNS4w MDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9jcnB0LmMJ MjAxNi0wMy0wMSAxNjozMzowNy42MjY5MTY3NDkgKzAxMDAKLUBAIC04OSw5ICs4OSw5IEBAIGlu dCBSU0FfcHJpdmF0ZV9lbmNyeXB0KGludCBmbGVuLCBjb25zdAotICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGNoYXIgKnRvLCBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCi0gewotICNp ZmRlZiBPUEVOU1NMX0ZJUFMKLS0gICAgaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5m bGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKQotLSAgICAgICAgJiYgIShyc2EtPmZsYWdzICYg UlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSB7Ci0tICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX1BS SVZBVEVfRU5DUllQVCwgUlNBX1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7Ci0rICAgIGlmIChGSVBT X21vZGUoKSAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpIHsKLSsg ICAgICAgIFJTQWVycihSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBULAotKyAgICAgICAgICAgICAg IFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOwotICAgICAgICAgcmV0 dXJuIC0xOwotICAgICB9Ci0gI2VuZGlmCi1AQCAtMTE1LDkgKzExNSw5IEBAIGludCBSU0FfcHVi bGljX2RlY3J5cHQoaW50IGZsZW4sIGNvbnN0IHUKLSAgICAgICAgICAgICAgICAgICAgICAgIFJT QSAqcnNhLCBpbnQgcGFkZGluZykKLSB7Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotLSAgICBpZiAo RklQU19tb2RlKCkgJiYgIShyc2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0Qp Ci0tICAgICAgICAmJiAhKHJzYS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpIHsK LS0gICAgICAgIFJTQWVycihSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX05PTl9GSVBT X1JTQV9NRVRIT0QpOwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNB X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpKSB7Ci0rICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJ Q19ERUNSWVBULAotKyAgICAgICAgICAgICAgIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9J Tl9GSVBTX01PREUpOwotICAgICAgICAgcmV0dXJuIC0xOwotICAgICB9Ci0gI2VuZGlmCi1kaWZm IC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9yc2EvcnNhX2VheS5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9y c2FfZWF5LmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjA1LjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjJnL2NyeXB0by9yc2EvcnNhX2VheS5jCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI2 OTE2NzQ5ICswMTAwCi1AQCAtMTE0LDYgKzExNCwxMCBAQAotICNpbmNsdWRlIDxvcGVuc3NsL2Ju Lmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+Ci0gI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgotKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsjIGlu Y2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgotKyNlbmRpZgotIAotICNpZm5kZWYgUlNBX05VTEwKLSAK LUBAIC0xNDAsNyArMTQ0LDcgQEAgc3RhdGljIFJTQV9NRVRIT0QgcnNhX3BrY3MxX2VheV9tZXRo ID0gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWYgZSA9PSAzICovCi0g ICAgIFJTQV9lYXlfaW5pdCwKLSAgICAgUlNBX2VheV9maW5pc2gsCi0tICAgIDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAvKiBmbGFncyAqLwotKyAgICBSU0FfRkxBR19GSVBTX01FVEhPRCwg ICAgICAgLyogZmxhZ3MgKi8KLSAgICAgTlVMTCwKLSAgICAgMCwgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qIHJzYV9zaWduICovCi0gICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiByc2FfdmVyaWZ5ICovCi1AQCAtMTYwLDYgKzE2NCwyMiBAQCBzdGF0aWMgaW50IFJTQV9lYXlf cHVibGljX2VuY3J5cHQoaW50IGZsCi0gICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7Ci0g ICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSAKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICBp ZiAoRklQU19tb2RlKCkpIHsKLSsgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7 Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwKLSsg ICAgICAgICAgICAgICAgICAgIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAg ICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpZiAoIShyc2EtPmZsYWdz ICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rICAgICAgICAgICAgJiYgKEJOX251bV9iaXRz KHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAg ICAgICAgUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpF X1RPT19TTUFMTCk7Ci0rICAgICAgICAgICAgcmV0dXJuIC0xOwotKyAgICAgICAgfQotKyAgICB9 Ci0rIyBlbmRpZgotKwotICAgICBpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNB X01BWF9NT0RVTFVTX0JJVFMpIHsKLSAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJ Q19FTkNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci0gICAgICAgICByZXR1cm4gLTE7 Ci1AQCAtMzYxLDYgKzM4MSwyMiBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0 KGludCBmCi0gICAgIEJJR05VTSAqdW5ibGluZCA9IE5VTEw7Ci0gICAgIEJOX0JMSU5ESU5HICpi bGluZGluZyA9IE5VTEw7Ci0gCi0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNf bW9kZSgpKSB7Ci0rICAgICAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAg ICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULAotKyAgICAgICAg ICAgICAgICAgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgICAgICBy ZXR1cm4gLTE7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpZiAoIShyc2EtPmZsYWdzICYgUlNB X0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rICAgICAgICAgICAgJiYgKEJOX251bV9iaXRzKHJzYS0+ bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICAgICAg UlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09f U01BTEwpOwotKyAgICAgICAgICAgIHJldHVybiAtMTsKLSsgICAgICAgIH0KLSsgICAgfQotKyMg ZW5kaWYKLSsKLSAgICAgaWYgKChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCi0gICAgICAg ICBnb3RvIGVycjsKLSAgICAgQk5fQ1RYX3N0YXJ0KGN0eCk7Ci1AQCAtNDk3LDYgKzUzMywyMiBA QCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9kZWNyeXB0KGludCBmCi0gICAgIEJJR05VTSAq dW5ibGluZCA9IE5VTEw7Ci0gICAgIEJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7Ci0gCi0r IyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgpKSB7Ci0rICAgICAgICBp ZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19G X1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULAotKyAgICAgICAgICAgICAgICAgICAgRklQU19SX0ZJ UFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgICAgICByZXR1cm4gLTE7Ci0rICAgICAgICB9 Ci0rCi0rICAgICAgICBpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cp Ci0rICAgICAgICAgICAgJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBT X01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9FQVlf UFJJVkFURV9ERUNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOwotKyAgICAgICAgICAg IHJldHVybiAtMTsKLSsgICAgICAgIH0KLSsgICAgfQotKyMgZW5kaWYKLSsKLSAgICAgaWYgKChj dHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCi0gICAgICAgICBnb3RvIGVycjsKLSAgICAgQk5f Q1RYX3N0YXJ0KGN0eCk7Ci1AQCAtNjIzLDYgKzY3NSwyMiBAQCBzdGF0aWMgaW50IFJTQV9lYXlf cHVibGljX2RlY3J5cHQoaW50IGZsCi0gICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7Ci0g ICAgIEJOX0NUWCAqY3R4ID0gTlVMTDsKLSAKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAgICBp ZiAoRklQU19tb2RlKCkpIHsKLSsgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7 Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCwKLSsg ICAgICAgICAgICAgICAgICAgIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7Ci0rICAgICAg ICAgICAgZ290byBlcnI7Ci0rICAgICAgICB9Ci0rCi0rICAgICAgICBpZiAoIShyc2EtPmZsYWdz ICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCi0rICAgICAgICAgICAgJiYgKEJOX251bV9iaXRz KHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7Ci0rICAgICAg ICAgICAgUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpF X1RPT19TTUFMTCk7Ci0rICAgICAgICAgICAgcmV0dXJuIC0xOwotKyAgICAgICAgfQotKyAgICB9 Ci0rIyBlbmRpZgotKwotICAgICBpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNB X01BWF9NT0RVTFVTX0JJVFMpIHsKLSAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJ Q19ERUNSWVBULCBSU0FfUl9NT0RVTFVTX1RPT19MQVJHRSk7Ci0gICAgICAgICByZXR1cm4gLTE7 Ci1AQCAtODg2LDYgKzk1NCw5IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAq cjAsIGMKLSAKLSBzdGF0aWMgaW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKLSB7Ci0rIyBpZmRl ZiBPUEVOU1NMX0ZJUFMKLSsgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOwotKyMgZW5kaWYKLSAg ICAgcnNhLT5mbGFncyB8PSBSU0FfRkxBR19DQUNIRV9QVUJMSUMgfCBSU0FfRkxBR19DQUNIRV9Q UklWQVRFOwotICAgICByZXR1cm4gKDEpOwotIH0KLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2Ny eXB0by9yc2EvcnNhX2Vyci5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2FfZXJy LmMKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzCTIwMTYtMDMt MDEgMTQ6MzU6NTMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3Jz YS9yc2FfZXJyLmMJMjAxNi0wMy0wMSAxNjozMzowNy42MjY5MTY3NDkgKzAxMDAKLUBAIC0xMzYs NiArMTM2LDggQEAgc3RhdGljIEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdCi0gICAg IHtFUlJfRlVOQyhSU0FfRl9SU0FfUFVCTElDX0VOQ1JZUFQpLCAiUlNBX3B1YmxpY19lbmNyeXB0 In0sCi0gICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfUFVCX0RFQ09ERSksICJSU0FfUFVCX0RFQ09E RSJ9LAotICAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HKSwgIlJTQV9zZXR1 cF9ibGluZGluZyJ9LAotKyAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhP RCksICJSU0Ffc2V0X2RlZmF1bHRfbWV0aG9kIn0sCi0rICAgIHtFUlJfRlVOQyhSU0FfRl9SU0Ff U0VUX01FVEhPRCksICJSU0Ffc2V0X21ldGhvZCJ9LAotICAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNB X1NJR04pLCAiUlNBX3NpZ24ifSwKLSAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOX0FTTjFf T0NURVRfU1RSSU5HKSwKLSAgICAgICJSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORyJ9LAotZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEu MC4yZy9jcnlwdG8vcnNhL3JzYV9nZW4uYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yc2Ev cnNhX2dlbi5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTowNS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBv cGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9nZW4uYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYy NjkxNjc0OSArMDEwMAotQEAgLTY5LDggKzY5LDgwIEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvcnNh Lmg+Ci0gI2lmZGVmIE9QRU5TU0xfRklQUwotICMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0t ZXh0ZXJuIGludCBGSVBTX3JzYV94OTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJp dHMsIEJJR05VTSAqZSwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEJOX0dFTkNCICpjYik7Ci0rIyBpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgotKyMgaW5jbHVkZSA8 b3BlbnNzbC9ldnAuaD4KLSsKLStzdGF0aWMgaW50IGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAw OwotKwotK3ZvaWQgRklQU19jb3JydXB0X3JzYV9rZXlnZW4odm9pZCkKLSt7Ci0rICAgIGZpcHNf cnNhX3BhaXJ3aXNlX2ZhaWwgPSAxOwotK30KLSsKLStpbnQgZmlwc19jaGVja19yc2EoUlNBICpy c2EpCi0rewotKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHRic1tdID0gIlJTQSBQYWlyd2lzZSBD aGVjayBEYXRhIjsKLSsgICAgdW5zaWduZWQgY2hhciAqY3RidWYgPSBOVUxMLCAqcHRidWYgPSBO VUxMOwotKyAgICBpbnQgbGVuLCByZXQgPSAwOwotKyAgICBFVlBfUEtFWSAqcGs7Ci0rCi0rICAg IGlmICgocGsgPSBFVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKLSsgICAgICAgIGdvdG8gZXJyOwot KwotKyAgICBFVlBfUEtFWV9zZXQxX1JTQShwaywgcnNhKTsKLSsKLSsgICAgLyogUGVyZm9ybSBw YWlyd2lzZSBjb25zaXN0ZW5jeSBzaWduYXR1cmUgdGVzdCAqLwotKyAgICBpZiAoIWZpcHNfcGtl eV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgMCwgRVZQX3NoYTEoKSwKLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9QS0NTMSwgTlVMTCkKLSsgICAgICAgIHx8ICFm aXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsIE5VTEwsIDAsIEVWUF9zaGExKCks Ci0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19Q QURfWDkzMSwgTlVMTCkKLSsgICAgICAgIHx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGss IHRicywgLTEsIE5VTEwsIDAsIEVWUF9zaGExKCksCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURfUFNTLCBOVUxMKSkKLSsgICAgICAgIGdv dG8gZXJyOwotKyAgICAvKiBOb3cgcGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBlbmNyeXB0 L2RlY3J5cHQgdGVzdCAqLwotKyAgICBjdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJz YSkpOwotKyAgICBpZiAoIWN0YnVmKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0rICAgIGxlbiA9 Ci0rICAgICAgICBSU0FfcHVibGljX2VuY3J5cHQoc2l6ZW9mKHRicykgLSAxLCB0YnMsIGN0YnVm LCByc2EsCi0rICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNBX1BLQ1MxX1BBRERJTkcpOwot KyAgICBpZiAobGVuIDw9IDApCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgLyogQ2hlY2sgY2lw aGVydGV4dCBkb2Vzbid0IG1hdGNoIHBsYWludGV4dCAqLwotKyAgICBpZiAoKGxlbiA9PSAoc2l6 ZW9mKHRicykgLSAxKSkgJiYgIW1lbWNtcCh0YnMsIGN0YnVmLCBsZW4pKQotKyAgICAgICAgZ290 byBlcnI7Ci0rICAgIHB0YnVmID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7Ci0rCi0r ICAgIGlmICghcHRidWYpCi0rICAgICAgICBnb3RvIGVycjsKLSsgICAgbGVuID0gUlNBX3ByaXZh dGVfZGVjcnlwdChsZW4sIGN0YnVmLCBwdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7Ci0r ICAgIGlmIChsZW4gIT0gKHNpemVvZih0YnMpIC0gMSkpCi0rICAgICAgICBnb3RvIGVycjsKLSsg ICAgaWYgKG1lbWNtcChwdGJ1ZiwgdGJzLCBsZW4pKQotKyAgICAgICAgZ290byBlcnI7Ci0rCi0r ICAgIHJldCA9IDE7Ci0rCi0rICAgIGlmICghcHRidWYpCi0rICAgICAgICBnb3RvIGVycjsKLSsK LSsgZXJyOgotKyAgICBpZiAocmV0ID09IDApIHsKLSsgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0 X2ZhaWwoKTsKLSsgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfQ0hFQ0tfUlNBLCBGSVBTX1Jf UEFJUldJU0VfVEVTVF9GQUlMRUQpOwotKyAgICB9Ci0rCi0rICAgIGlmIChjdGJ1ZikKLSsgICAg ICAgIE9QRU5TU0xfZnJlZShjdGJ1Zik7Ci0rICAgIGlmIChwdGJ1ZikKLSsgICAgICAgIE9QRU5T U0xfZnJlZShwdGJ1Zik7Ci0rICAgIGlmIChwaykKLSsgICAgICAgIEVWUF9QS0VZX2ZyZWUocGsp OwotKwotKyAgICByZXR1cm4gcmV0OwotK30KLSAjZW5kaWYKLSAKLSBzdGF0aWMgaW50IHJzYV9i dWlsdGluX2tleWdlbihSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwKLUBAIC04 Niw3ICsxNTgsNyBAQCBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKLSBp bnQgUlNBX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1 ZSwgQk5fR0VOQ0IgKmNiKQotIHsKLSAjaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgIGlmIChGSVBT X21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKLSsg ICAgaWYgKEZJUFNfbW9kdWxlX21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxB R19GSVBTX01FVEhPRCkKLSAgICAgICAgICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9G SVBTX0FMTE9XKSkgewotICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9HRU5FUkFURV9LRVlfRVgs IFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOwotICAgICAgICAgcmV0dXJuIDA7Ci1AQCAtOTQs MTAgKzE2Niw2IEBAIGludCBSU0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYmkKLSAj ZW5kaWYKLSAgICAgaWYgKHJzYS0+bWV0aC0+cnNhX2tleWdlbikKLSAgICAgICAgIHJldHVybiBy c2EtPm1ldGgtPnJzYV9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7Ci0tI2lmZGVmIE9Q RU5TU0xfRklQUwotLSAgICBpZiAoRklQU19tb2RlKCkpCi0tICAgICAgICByZXR1cm4gRklQU19y c2FfeDkzMV9nZW5lcmF0ZV9rZXlfZXgocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7Ci0tI2VuZGlm Ci0gICAgIHJldHVybiByc2FfYnVpbHRpbl9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7 Ci0gfQotIAotQEAgLTExMCw2ICsxNzgsMjAgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXln ZW4oUlNBICpyc2EsCi0gICAgIGludCBiaXRzcCwgYml0c3EsIG9rID0gLTEsIG4gPSAwOwotICAg ICBCTl9DVFggKmN0eCA9IE5VTEw7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAo RklQU19tb2R1bGVfbW9kZSgpKSB7Ci0rICAgICAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQo KSkgewotKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiwgRklQ U19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKLSsgICAgICAgICAgICByZXR1cm4gMDsKLSsgICAg ICAgIH0KLSsKLSsgICAgICAgIGlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxV U19CSVRTKSB7Ci0rICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VO LCBGSVBTX1JfS0VZX1RPT19TSE9SVCk7Ci0rICAgICAgICAgICAgcmV0dXJuIDA7Ci0rICAgICAg ICB9Ci0rICAgIH0KLSsjZW5kaWYKLSsKLSAgICAgY3R4ID0gQk5fQ1RYX25ldygpOwotICAgICBp ZiAoY3R4ID09IE5VTEwpCi0gICAgICAgICBnb3RvIGVycjsKLUBAIC0yMzUsNiArMzE3LDE2IEBA IHN0YXRpYyBpbnQgcnNhX2J1aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAotICAgICBpZiAoIUJOX21v ZF9pbnZlcnNlKHJzYS0+aXFtcCwgcnNhLT5xLCBwLCBjdHgpKQotICAgICAgICAgZ290byBlcnI7 Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgpKSB7 Ci0rICAgICAgICBpZiAoZmlwc19yc2FfcGFpcndpc2VfZmFpbCkKLSsgICAgICAgICAgICBCTl9h ZGRfd29yZChyc2EtPm4sIDEpOwotKwotKyAgICAgICAgaWYgKCFmaXBzX2NoZWNrX3JzYShyc2Ep KQotKyAgICAgICAgICAgIGdvdG8gZXJyOwotKyAgICB9Ci0rI2VuZGlmCi0rCi0gICAgIG9rID0g MTsKLSAgZXJyOgotICAgICBpZiAob2sgPT0gLTEpIHsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJn L2NyeXB0by9yc2EvcnNhLmguZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYS5oCi0t LS0gb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMTYtMDMtMDEgMTY6MzM6 MDcuNTA4OTE0MDc5ICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2EuaAky MDE2LTAzLTAxIDE2OjMzOjA3LjYyNjkxNjc0OSArMDEwMAotQEAgLTE2OCw2ICsxNjgsOCBAQCBz dHJ1Y3QgcnNhX3N0IHsKLSAjICBkZWZpbmUgT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUyAg IDE2Mzg0Ci0gIyBlbmRpZgotIAotKyMgZGVmaW5lIE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVM VVNfQklUUyAxMDI0Ci0rCi0gIyBpZm5kZWYgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRT Ci0gIyAgZGVmaW5lIE9QRU5TU0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUyAzMDcyCi0gIyBlbmRp ZgotQEAgLTMyOSw2ICszMzEsMTMgQEAgUlNBICpSU0FfZ2VuZXJhdGVfa2V5KGludCBiaXRzLCB1 bnNpZ25lZAotIAotIC8qIE5ldyB2ZXJzaW9uICovCi0gaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgo UlNBICpyc2EsIGludCBiaXRzLCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7Ci0raW50IFJTQV9Y OTMxX2Rlcml2ZV9leChSU0EgKnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpx MSwKLSsgICAgICAgICAgICAgICAgICAgICAgIEJJR05VTSAqcTIsIGNvbnN0IEJJR05VTSAqWHAx LCBjb25zdCBCSUdOVU0gKlhwMiwKLSsgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJJR05V TSAqWHAsIGNvbnN0IEJJR05VTSAqWHExLAotKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg QklHTlVNICpYcTIsIGNvbnN0IEJJR05VTSAqWHEsCi0rICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7Ci0raW50IFJTQV9YOTMxX2dlbmVyYXRlX2tl eV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYik7Ci0gCi0gaW50IFJTQV9jaGVja19rZXkoY29u c3QgUlNBICopOwotICAgICAgICAgLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLwotQEAg LTUzOCw3ICs1NDcsNyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICMgZGVm aW5lIFJTQV9GX1JTQV9BTEdPUl9UT19NRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTcK LSAjIGRlZmluZSBSU0FfRl9SU0FfQlVJTFRJTl9LRVlHRU4gICAgICAgICAgICAgICAgICAgICAg ICAgMTI5Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX0NIRUNLX0tFWSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEyMwotLSMgZGVmaW5lIFJTQV9GX1JTQV9DTVNfREVDUllQVCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxNTgKLSsjIGRlZmluZSBSU0FfRl9SU0FfQ01TX0RFQ1JZUFQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMjU4Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX0VBWV9QUklW QVRFX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgIDEwMQotICMgZGVmaW5lIFJTQV9GX1JTQV9F QVlfUFJJVkFURV9FTkNSWVBUICAgICAgICAgICAgICAgICAgICAxMDIKLSAjIGRlZmluZSBSU0Ff Rl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBUICAgICAgICAgICAgICAgICAgICAgMTAzCi1AQCAtNTU5 LDcgKzU2OCw3IEBAIHZvaWQgRVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7Ci0gIyBkZWZpbmUg UlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX09BRVAgICAgICAgICAgICAgICAgIDEyMQotICMg ZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9PQUVQX01HRjEgICAgICAgICAgICAx NjAKLSAjIGRlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTICAgICAgICAgICAg ICAgICAgMTI1Ci0tIyBkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0Yx ICAgICAgICAgICAgIDE0OAotKyMgZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9Q U1NfTUdGMSAgICAgICAgICAgICAxNTgKLSAjIGRlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERf UEtDUzFfVFlQRV8xICAgICAgICAgICAgICAgMTA4Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1BBRERJ TkdfQUREX1BLQ1MxX1RZUEVfMiAgICAgICAgICAgICAgIDEwOQotICMgZGVmaW5lIFJTQV9GX1JT QV9QQURESU5HX0FERF9TU0xWMjMgICAgICAgICAgICAgICAgICAgICAxMTAKLUBAIC01NzMsMjEg KzU4MiwyMyBAQCB2b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOwotICMgZGVmaW5lIFJT QV9GX1JTQV9QQURESU5HX0NIRUNLX1g5MzEgICAgICAgICAgICAgICAgICAgICAxMjgKLSAjIGRl ZmluZSBSU0FfRl9SU0FfUFJJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE1 Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1BSSU5UX0ZQICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDExNgotLSMgZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZUFQgICAgICAgICAgICAg ICAgICAgICAgICAxNTAKLS0jIGRlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUICAgICAg ICAgICAgICAgICAgICAgICAgMTUxCi0rIyBkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQ VCAgICAgICAgICAgICAgICAgICAgICAgIDE1NwotKyMgZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRF X0VOQ1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAxNDgKLSAjIGRlZmluZSBSU0FfRl9SU0Ff UFJJVl9ERUNPREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTM3Ci0gIyBkZWZpbmUgUlNB X0ZfUlNBX1BSSVZfRU5DT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOAotICMgZGVm aW5lIFJTQV9GX1JTQV9QU1NfVE9fQ1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjIK LS0jIGRlZmluZSBSU0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgICAg ICAgMTUyCi0rIyBkZWZpbmUgUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUICAgICAgICAgICAgICAg ICAgICAgICAgIDE0OQotICMgZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfRU5DUllQVCAgICAgICAg ICAgICAgICAgICAgICAgICAxNTMKLSAjIGRlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMTM5Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JM SU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgIDEzNgotKyMgZGVmaW5lIFJTQV9GX1JTQV9T RVRfREVGQVVMVF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAxNTAKLSsjIGRlZmluZSBSU0Ff Rl9SU0FfU0VUX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUxCi0gIyBkZWZp bmUgUlNBX0ZfUlNBX1NJR04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNwot ICMgZGVmaW5lIFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HICAgICAgICAgICAgICAg ICAxMTgKLSAjIGRlZmluZSBSU0FfRl9SU0FfVkVSSUZZICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTE5Ci0gIyBkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9BU04xX09DVEVUX1NUUklO RyAgICAgICAgICAgICAgIDEyMAotICMgZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNT ICAgICAgICAgICAgICAgICAgICAgICAxMjYKLS0jIGRlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BL Q1MxX1BTU19NR0YxICAgICAgICAgICAgICAgICAgMTQ5Ci0rIyBkZWZpbmUgUlNBX0ZfUlNBX1ZF UklGWV9QS0NTMV9QU1NfTUdGMSAgICAgICAgICAgICAgICAgIDE1MgotIAotIC8qIFJlYXNvbiBj b2Rlcy4gKi8KLSAjIGRlZmluZSBSU0FfUl9BTEdPUklUSE1fTUlTTUFUQ0ggICAgICAgICAgICAg ICAgICAgICAgICAgMTAwCi1AQCAtNjIwLDIxICs2MzEsMjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ff c3RyaW5ncyh2b2lkKTsKLSAjIGRlZmluZSBSU0FfUl9JTlZBTElEX09BRVBfUEFSQU1FVEVSUyAg ICAgICAgICAgICAgICAgICAgMTYyCi0gIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEzOAotICMgZGVmaW5lIFJTQV9SX0lOVkFMSURfUEFE RElOR19NT0RFICAgICAgICAgICAgICAgICAgICAgICAxNDEKLS0jIGRlZmluZSBSU0FfUl9JTlZB TElEX1BTU19QQVJBTUVURVJTICAgICAgICAgICAgICAgICAgICAgMTQ5Ci0rIyBkZWZpbmUgUlNB X1JfSU5WQUxJRF9QU1NfUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAgICAgIDE1NwotICMgZGVm aW5lIFJTQV9SX0lOVkFMSURfUFNTX1NBTFRMRU4gICAgICAgICAgICAgICAgICAgICAgICAxNDYK LS0jIGRlZmluZSBSU0FfUl9JTlZBTElEX1NBTFRfTEVOR1RIICAgICAgICAgICAgICAgICAgICAg ICAgMTUwCi0rIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSCAgICAgICAgICAgICAg ICAgICAgICAgIDE1OAotICMgZGVmaW5lIFJTQV9SX0lOVkFMSURfVFJBSUxFUiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMzkKLSAjIGRlZmluZSBSU0FfUl9JTlZBTElEX1g5MzFfRElHRVNU ICAgICAgICAgICAgICAgICAgICAgICAgMTQyCi0gIyBkZWZpbmUgUlNBX1JfSVFNUF9OT1RfSU5W RVJTRV9PRl9RICAgICAgICAgICAgICAgICAgICAgIDEyNgotICMgZGVmaW5lIFJTQV9SX0tFWV9T SVpFX1RPT19TTUFMTCAgICAgICAgICAgICAgICAgICAgICAgICAxMjAKLSAjIGRlZmluZSBSU0Ff Ul9MQVNUX09DVEVUX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAgICAgMTM0Ci0gIyBkZWZp bmUgUlNBX1JfTU9EVUxVU19UT09fTEFSR0UgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNQot LSMgZGVmaW5lIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAg ICAxNTcKLSsjIGRlZmluZSBSU0FfUl9OT05fRklQU19SU0FfTUVUSE9EICAgICAgICAgICAgICAg ICAgICAgICAgMTQ5Ci0rIyBkZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDE0OQotICMgZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVCAg ICAgICAgICAgICAgICAgICAgICAgICAxNDAKLSAjIGRlZmluZSBSU0FfUl9OVUxMX0JFRk9SRV9C TE9DS19NSVNTSU5HICAgICAgICAgICAgICAgICAgMTEzCi0gIyBkZWZpbmUgUlNBX1JfTl9ET0VT X05PVF9FUVVBTF9QX1EgICAgICAgICAgICAgICAgICAgICAgIDEyNwotICMgZGVmaW5lIFJTQV9S X09BRVBfREVDT0RJTkdfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAxMjEKLS0jIGRlZmlu ZSBSU0FfUl9PUEVSQVRJT05fTk9UX0FMTE9XRURfSU5fRklQU19NT0RFICAgICAgICAgMTU4Ci0r IyBkZWZpbmUgUlNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSAgICAgICAg IDE1MAotICMgZGVmaW5lIFJTQV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tF WVRZUEUgICAxNDgKLSAjIGRlZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRCAgICAgICAg ICAgICAgICAgICAgICAgMTE0Ci0gIyBkZWZpbmUgUlNBX1JfUEtDU19ERUNPRElOR19FUlJPUiAg ICAgICAgICAgICAgICAgICAgICAgIDE1OQotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRv L3JzYS9yc2FfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9saWIuYwot LS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMJMjAxNi0wMy0wMSAx NDozNTowNS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3Jz YV9saWIuYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyNzkxNjc3MiArMDEwMAotQEAgLTg0LDIzICs4 NCwyMiBAQCBSU0EgKlJTQV9uZXcodm9pZCkKLSAKLSB2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRo b2QoY29uc3QgUlNBX01FVEhPRCAqbWV0aCkKLSB7Ci0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAg ICBpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9E KSkgewotKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9S X05PTl9GSVBTX01FVEhPRCk7Ci0rICAgICAgICByZXR1cm47Ci0rICAgIH0KLSsjZW5kaWYKLSAg ICAgZGVmYXVsdF9SU0FfbWV0aCA9IG1ldGg7Ci0gfQotIAotIGNvbnN0IFJTQV9NRVRIT0QgKlJT QV9nZXRfZGVmYXVsdF9tZXRob2Qodm9pZCkKLSB7Ci0gICAgIGlmIChkZWZhdWx0X1JTQV9tZXRo ID09IE5VTEwpIHsKLS0jaWZkZWYgT1BFTlNTTF9GSVBTCi0tICAgICAgICBpZiAoRklQU19tb2Rl KCkpCi0tICAgICAgICAgICAgcmV0dXJuIEZJUFNfcnNhX3BrY3MxX3NzbGVheSgpOwotLSAgICAg ICAgZWxzZQotLSAgICAgICAgICAgIHJldHVybiBSU0FfUEtDUzFfU1NMZWF5KCk7Ci0tI2Vsc2UK LS0jIGlmZGVmIFJTQV9OVUxMCi0rI2lmZGVmIFJTQV9OVUxMCi0gICAgICAgICBkZWZhdWx0X1JT QV9tZXRoID0gUlNBX251bGxfbWV0aG9kKCk7Ci0tIyBlbHNlCi0rI2Vsc2UKLSAgICAgICAgIGRl ZmF1bHRfUlNBX21ldGggPSBSU0FfUEtDUzFfU1NMZWF5KCk7Ci0tIyBlbmRpZgotICNlbmRpZgot ICAgICB9Ci0gCi1AQCAtMTE5LDYgKzExOCwxMiBAQCBpbnQgUlNBX3NldF9tZXRob2QoUlNBICpy c2EsIGNvbnN0IFJTQV9NCi0gICAgICAqIHRvIGRlYWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29t ZXMgZnJvbS4KLSAgICAgICovCi0gICAgIGNvbnN0IFJTQV9NRVRIT0QgKm10bXA7Ci0rI2lmZGVm IE9QRU5TU0xfRklQUwotKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJT QV9GTEFHX0ZJUFNfTUVUSE9EKSkgewotKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9TRVRfTUVU SE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOwotKyAgICAgICAgcmV0dXJuIDA7Ci0rICAgIH0K LSsjZW5kaWYKLSAgICAgbXRtcCA9IHJzYS0+bWV0aDsKLSAgICAgaWYgKG10bXAtPmZpbmlzaCkK LSAgICAgICAgIG10bXAtPmZpbmlzaChyc2EpOwotQEAgLTE2NSw2ICsxNzAsMTcgQEAgUlNBICpS U0FfbmV3X21ldGhvZChFTkdJTkUgKmVuZ2luZSkKLSAgICAgICAgIH0KLSAgICAgfQotICNlbmRp ZgotKyNpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5t ZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkgewotKyAgICAgICAgUlNBZXJyKFJT QV9GX1JTQV9ORVdfTUVUSE9ELCBSU0FfUl9OT05fRklQU19NRVRIT0QpOwotKyMgaWZuZGVmIE9Q RU5TU0xfTk9fRU5HSU5FCi0rICAgICAgICBpZiAocmV0LT5lbmdpbmUpCi0rICAgICAgICAgICAg RU5HSU5FX2ZpbmlzaChyZXQtPmVuZ2luZSk7Ci0rIyBlbmRpZgotKyAgICAgICAgT1BFTlNTTF9m cmVlKHJldCk7Ci0rICAgICAgICByZXR1cm4gTlVMTDsKLSsgICAgfQotKyNlbmRpZgotIAotICAg ICByZXQtPnBhZCA9IDA7Ci0gICAgIHJldC0+dmVyc2lvbiA9IDA7Ci1AQCAtMTgzLDcgKzE5OSw3 IEBAIFJTQSAqUlNBX25ld19tZXRob2QoRU5HSU5FICplbmdpbmUpCi0gICAgIHJldC0+YmxpbmRp bmcgPSBOVUxMOwotICAgICByZXQtPm10X2JsaW5kaW5nID0gTlVMTDsKLSAgICAgcmV0LT5iaWdu dW1fZGF0YSA9IE5VTEw7Ci0tICAgIHJldC0+ZmxhZ3MgPSByZXQtPm1ldGgtPmZsYWdzICYgflJT QV9GTEFHX05PTl9GSVBTX0FMTE9XOwotKyAgICByZXQtPmZsYWdzID0gcmV0LT5tZXRoLT5mbGFn czsKLSAgICAgaWYgKCFDUllQVE9fbmV3X2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1JTQSwgcmV0 LCAmcmV0LT5leF9kYXRhKSkgewotICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKLSAgICAgICAg IGlmIChyZXQtPmVuZ2luZSkKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9yc2EvcnNh X3BtZXRoLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jCi0tLS0g b3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2FfcG1ldGguYy5maXBzCTIwMTYtMDMtMDEgMTQ6 MzU6NTMuMDAwMDAwMDAwICswMTAwCi0rKysgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2Ff cG1ldGguYwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyNzkxNjc3MiArMDEwMAotQEAgLTIyOCwyMCAr MjI4LDYgQEAgc3RhdGljIGludCBwa2V5X3JzYV9zaWduKEVWUF9QS0VZX0NUWCAqYwotICAgICAg ICAgICAgIFJTQWVycihSU0FfRl9QS0VZX1JTQV9TSUdOLCBSU0FfUl9JTlZBTElEX0RJR0VTVF9M RU5HVEgpOwotICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgIH0KLS0jaWZkZWYgT1BF TlNTTF9GSVBTCi0tICAgICAgICBpZiAocmV0ID4gMCkgewotLSAgICAgICAgICAgIHVuc2lnbmVk IGludCBzbGVuOwotLSAgICAgICAgICAgIHJldCA9IEZJUFNfcnNhX3NpZ25fZGlnZXN0KHJzYSwg dGJzLCB0YnNsZW4sIHJjdHgtPm1kLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJjdHgtPnBhZF9tb2RlLAotLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJjdHgtPnNhbHRsZW4sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmN0eC0+bWdmMW1kLCBzaWcsICZzbGVuKTsKLS0gICAgICAgICAgICBpZiAocmV0ID4g MCkKLS0gICAgICAgICAgICAgICAgKnNpZ2xlbiA9IHNsZW47Ci0tICAgICAgICAgICAgZWxzZQot LSAgICAgICAgICAgICAgICAqc2lnbGVuID0gMDsKLS0gICAgICAgICAgICByZXR1cm4gcmV0Owot LSAgICAgICAgfQotLSNlbmRpZgotIAotICAgICAgICAgaWYgKEVWUF9NRF90eXBlKHJjdHgtPm1k KSA9PSBOSURfbWRjMikgewotICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzbHRtcDsKLUBAIC0z NTksMTcgKzM0NSw2IEBAIHN0YXRpYyBpbnQgcGtleV9yc2FfdmVyaWZ5KEVWUF9QS0VZX0NUWAot ICAgICB9Ci0gI2VuZGlmCi0gICAgIGlmIChyY3R4LT5tZCkgewotLSNpZmRlZiBPUEVOU1NMX0ZJ UFMKLS0gICAgICAgIGlmIChydiA+IDApIHsKLS0gICAgICAgICAgICByZXR1cm4gRklQU19yc2Ff dmVyaWZ5X2RpZ2VzdChyc2EsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGJzLCB0YnNsZW4sCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmN0eC0+bWQsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmN0eC0+cGFkX21vZGUsCi0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmN0eC0+c2FsdGxlbiwKLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByY3R4LT5tZ2YxbWQsIHNpZywgc2lnbGVuKTsKLS0KLS0gICAgICAgIH0KLS0jZW5k aWYKLSAgICAgICAgIGlmIChyY3R4LT5wYWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykKLSAg ICAgICAgICAgICByZXR1cm4gUlNBX3ZlcmlmeShFVlBfTURfdHlwZShyY3R4LT5tZCksIHRicywg dGJzbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZywgc2lnbGVuLCByc2Ep OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jLmZpcHMgb3Bl bnNzbC0xLjAuMmcvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvY3J5 cHRvL3JzYS9yc2Ffc2lnbi5jLmZpcHMJMjAxNi0wMy0wMSAxNDozNTo1My4wMDAwMDAwMDAgKzAx MDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vcnNhL3JzYV9zaWduLmMJMjAxNi0wMy0wMSAx NjozMzowNy42Mjc5MTY3NzIgKzAxMDAKLUBAIC0xMzIsNyArMTMyLDEwIEBAIGludCBSU0Ffc2ln bihpbnQgdHlwZSwgY29uc3QgdW5zaWduZWQgY2gKLSAgICAgICAgIGkyZF9YNTA5X1NJRygmc2ln LCAmcCk7Ci0gICAgICAgICBzID0gdG1wczsKLSAgICAgfQotLSAgICBpID0gUlNBX3ByaXZhdGVf ZW5jcnlwdChpLCBzLCBzaWdyZXQsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOwotKyAgICAvKiBO QjogY2FsbCB1bmRlcmx5aW5nIG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5n ICovCi0rICAgIGkgPSByc2EtPm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3By aXZfZW5jKGksIHMsIHNpZ3JldCwgcnNhLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUEtDUzFfUEFERElORykgOgotKyAgICAg ICAgMDsKLSAgICAgaWYgKGkgPD0gMCkKLSAgICAgICAgIHJldCA9IDA7Ci0gICAgIGVsc2UKLUBA IC0xODgsOCArMTkxLDEwIEBAIGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVu c2kKLSAgICAgfQotIAotICAgICBpZiAoKGR0eXBlID09IE5JRF9tZDVfc2hhMSkgJiYgcm0pIHsK LS0gICAgICAgIGkgPSBSU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sCi0tICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpZ2J1Ziwgcm0sIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcp OwotKyAgICAgICAgaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJzYV9w dWJfZGVjKChpbnQpc2lnbGVuLAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2J1Ziwgcm0sIHJzYSwKLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUEtDUzFf UEFERElORykKLSsgICAgICAgICAgICA6IDA7Ci0gICAgICAgICBpZiAoaSA8PSAwKQotICAgICAg ICAgICAgIHJldHVybiAwOwotICAgICAgICAgKnBybV9sZW4gPSBpOwotQEAgLTIwNSw3ICsyMTAs MTEgQEAgaW50IGludF9yc2FfdmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQotICAgICAgICAg UlNBZXJyKFJTQV9GX0lOVF9SU0FfVkVSSUZZLCBSU0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RI KTsKLSAgICAgICAgIGdvdG8gZXJyOwotICAgICB9Ci0tICAgIGkgPSBSU0FfcHVibGljX2RlY3J5 cHQoKGludClzaWdsZW4sIHNpZ2J1ZiwgcywgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7Ci0rICAg IC8qIE5COiBjYWxsIHVuZGVybHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxv Y2tpbmcgKi8KLSsgICAgaSA9IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJz YV9wdWJfZGVjKChpbnQpc2lnbGVuLCBzaWdidWYsCi0rICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLCByc2EsCi0rICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUEtDUzFfUEFERElO RykgOgotKyAgICAgICAgMDsKLSAKLSAgICAgaWYgKGkgPD0gMCkKLSAgICAgICAgIGdvdG8gZXJy OwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wt MS4wLjJnL2NyeXB0by9zaGEvc2hhLmgKLS0tLSBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vc2hhL3No YS5oLmZpcHMJMjAxNi0wMy0wMSAxNjozMzowNy4yODc5MDkwNzcgKzAxMDAKLSsrKyBvcGVuc3Ns LTEuMC4yZy9jcnlwdG8vc2hhL3NoYS5oCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI3OTE2NzcyICsw MTAwCi1AQCAtMTA1LDkgKzEwNSw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQXN0YXRlX3N0IHsKLSB9 IFNIQV9DVFg7Ci0gCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19TSEEwCi0tIyAgaWZkZWYgT1BFTlNT TF9GSVBTCi0taW50IHByaXZhdGVfU0hBX0luaXQoU0hBX0NUWCAqYyk7Ci0tIyAgZW5kaWYKLSBp bnQgU0hBX0luaXQoU0hBX0NUWCAqYyk7Ci0gaW50IFNIQV9VcGRhdGUoU0hBX0NUWCAqYywgY29u c3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7Ci0gaW50IFNIQV9GaW5hbCh1bnNpZ25lZCBjaGFy ICptZCwgU0hBX0NUWCAqYyk7Ci1AQCAtMTE1LDkgKzExMiw2IEBAIHVuc2lnbmVkIGNoYXIgKlNI QShjb25zdCB1bnNpZ25lZCBjaGFyICoKLSB2b2lkIFNIQV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywg Y29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci0gIyBlbmRpZgotICMgaWZuZGVmIE9QRU5TU0xf Tk9fU0hBMQotLSMgIGlmZGVmIE9QRU5TU0xfRklQUwotLWludCBwcml2YXRlX1NIQTFfSW5pdChT SEFfQ1RYICpjKTsKLS0jICBlbmRpZgotIGludCBTSEExX0luaXQoU0hBX0NUWCAqYyk7Ci0gaW50 IFNIQTFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwot IGludCBTSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKLUBAIC0xMzks MTAgKzEzMyw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTI1NnN0YXRlX3N0IHsKLSB9IFNIQTI1Nl9D VFg7Ci0gCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKLS0jICBpZmRlZiBPUEVOU1NMX0ZJ UFMKLS1pbnQgcHJpdmF0ZV9TSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKLS1pbnQgcHJpdmF0 ZV9TSEEyNTZfSW5pdChTSEEyNTZfQ1RYICpjKTsKLS0jICBlbmRpZgotIGludCBTSEEyMjRfSW5p dChTSEEyNTZfQ1RYICpjKTsKLSBpbnQgU0hBMjI0X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25z dCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBpbnQgU0hBMjI0X0ZpbmFsKHVuc2lnbmVkIGNo YXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKLUBAIC0xOTIsMTAgKzE4Miw2IEBAIHR5cGVkZWYgc3Ry dWN0IFNIQTUxMnN0YXRlX3N0IHsKLSAjIGVuZGlmCi0gCi0gIyBpZm5kZWYgT1BFTlNTTF9OT19T SEE1MTIKLS0jICBpZmRlZiBPUEVOU1NMX0ZJUFMKLS1pbnQgcHJpdmF0ZV9TSEEzODRfSW5pdChT SEE1MTJfQ1RYICpjKTsKLS1pbnQgcHJpdmF0ZV9TSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsK LS0jICBlbmRpZgotIGludCBTSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKLSBpbnQgU0hBMzg0 X1VwZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKLSBp bnQgU0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKLWRpZmYg LXVwIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9zaGEvc2hhX2xvY2wuaAotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9zaGEv c2hhX2xvY2wuaC5maXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuMjg5OTA5MTIyICswMTAwCi0rKysg b3BlbnNzbC0xLjAuMmcvY3J5cHRvL3NoYS9zaGFfbG9jbC5oCTIwMTYtMDMtMDEgMTY6MzM6MDcu NjI3OTE2NzcyICswMTAwCi1AQCAtMTIzLDExICsxMjMsMTQgQEAgdm9pZCBzaGExX2Jsb2NrX2Rh dGFfb3JkZXIoU0hBX0NUWCAqYywgYwotICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBV TAotIAotICNpZmRlZiBTSEFfMAotLWZpcHNfbWRfaW5pdChTSEEpCi0rbm9uZmlwc19tZF9pbml0 KFNIQSkKLSAjZWxzZQotIGZpcHNfbWRfaW5pdF9jdHgoU0hBMSwgU0hBKQotICNlbmRpZgotIHsK LSsjaWYgZGVmaW5lZChTSEFfMSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCi0rICAgIEZJUFNf c2VsZnRlc3RfY2hlY2soKTsKLSsjZW5kaWYKLSAgICAgbWVtc2V0KGMsIDAsIHNpemVvZigqYykp OwotICAgICBjLT5oMCA9IElOSVRfREFUQV9oMDsKLSAgICAgYy0+aDEgPSBJTklUX0RBVEFfaDE7 Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMgb3BlbnNz bC0xLjAuMmcvY3J5cHRvL3NoYS9zaGEyNTYuYwotLS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9z aGEvc2hhMjU2LmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjA1LjAwMDAwMDAwMCArMDEwMAotKysr IG9wZW5zc2wtMS4wLjJnL2NyeXB0by9zaGEvc2hhMjU2LmMJMjAxNi0wMy0wMSAxNjozMzowNy42 Mjc5MTY3NzIgKzAxMDAKLUBAIC0xMiwxMiArMTIsMTkgQEAKLSAKLSAjIGluY2x1ZGUgPG9wZW5z c2wvY3J5cHRvLmg+Ci0gIyBpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotKyMgaWZkZWYgT1BFTlNT TF9GSVBTCi0rIyAgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rIyBlbmRpZgotKwotICMgaW5j bHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgotIAotIGNvbnN0IGNoYXIgU0hBMjU2X3ZlcnNpb25b XSA9ICJTSEEtMjU2IiBPUEVOU1NMX1ZFUlNJT05fUFRFWFQ7Ci0gCi0gZmlwc19tZF9pbml0X2N0 eChTSEEyMjQsIFNIQTI1NikKLSB7Ci0rIyBpZmRlZiBPUEVOU1NMX0ZJUFMKLSsgICAgRklQU19z ZWxmdGVzdF9jaGVjaygpOwotKyMgZW5kaWYKLSAgICAgbWVtc2V0KGMsIDAsIHNpemVvZigqYykp OwotICAgICBjLT5oWzBdID0gMHhjMTA1OWVkOFVMOwotICAgICBjLT5oWzFdID0gMHgzNjdjZDUw N1VMOwotQEAgLTMzLDYgKzQwLDkgQEAgZmlwc19tZF9pbml0X2N0eChTSEEyMjQsIFNIQTI1NikK LSAKLSBmaXBzX21kX2luaXQoU0hBMjU2KQotIHsKLSsjIGlmZGVmIE9QRU5TU0xfRklQUwotKyAg ICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7Ci0rIyBlbmRpZgotICAgICBtZW1zZXQoYywgMCwgc2l6 ZW9mKCpjKSk7Ci0gICAgIGMtPmhbMF0gPSAweDZhMDllNjY3VUw7Ci0gICAgIGMtPmhbMV0gPSAw eGJiNjdhZTg1VUw7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vc2hhL3NoYTUxMi5j LmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3NoYS9zaGE1MTIuYwotLS0tIG9wZW5zc2wtMS4w LjJnL2NyeXB0by9zaGEvc2hhNTEyLmMuZmlwcwkyMDE2LTAzLTAxIDE0OjM1OjUzLjAwMDAwMDAw MCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by9zaGEvc2hhNTEyLmMJMjAxNi0wMy0w MSAxNjozMzowNy42Mjc5MTY3NzIgKzAxMDAKLUBAIC01LDYgKzUsMTAgQEAKLSAgKiA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotICAqLwotICNpbmNsdWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+Ci0rI2lmZGVmIE9Q RU5TU0xfRklQUwotKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+Ci0rI2VuZGlmCi0rCi0gI2lm ICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTUxMikK LSAvKi0KLSAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUy4KLUBAIC02Miw2ICs2Niw5IEBAIGNvbnN0 IGNoYXIgU0hBNTEyX3ZlcnNpb25bXSA9ICJTSEEtNTEyIgotIAotIGZpcHNfbWRfaW5pdF9jdHgo U0hBMzg0LCBTSEE1MTIpCi0gewotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIEZJUFNfc2Vs ZnRlc3RfY2hlY2soKTsKLSsjIGVuZGlmCi0gICAgIGMtPmhbMF0gPSBVNjQoMHhjYmJiOWQ1ZGMx MDU5ZWQ4KTsKLSAgICAgYy0+aFsxXSA9IFU2NCgweDYyOWEyOTJhMzY3Y2Q1MDcpOwotICAgICBj LT5oWzJdID0gVTY0KDB4OTE1OTAxNWEzMDcwZGQxNyk7Ci1AQCAtODAsNiArODcsOSBAQCBmaXBz X21kX2luaXRfY3R4KFNIQTM4NCwgU0hBNTEyKQotIAotIGZpcHNfbWRfaW5pdChTSEE1MTIpCi0g ewotKyMgaWZkZWYgT1BFTlNTTF9GSVBTCi0rICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKLSsj IGVuZGlmCi0gICAgIGMtPmhbMF0gPSBVNjQoMHg2YTA5ZTY2N2YzYmNjOTA4KTsKLSAgICAgYy0+ aFsxXSA9IFU2NCgweGJiNjdhZTg1ODRjYWE3M2IpOwotICAgICBjLT5oWzJdID0gVTY0KDB4M2M2 ZWYzNzJmZTk0ZjgyYik7Ci1kaWZmIC11cCBvcGVuc3NsLTEuMC4yZy9jcnlwdG8vd2hybHBvb2wv d3BfZGdzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmcvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYwot LS0tIG9wZW5zc2wtMS4wLjJnL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcwkyMDE2LTAz LTAxIDE0OjM1OjA1LjAwMDAwMDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL2NyeXB0by93 aHJscG9vbC93cF9kZ3N0LmMJMjAxNi0wMy0wMSAxNjozMzowNy42Mjg5MTY3OTQgKzAxMDAKLUBA IC01NSw3ICs1NSw3IEBACi0gI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+Ci0gI2luY2x1ZGUg PHN0cmluZy5oPgotIAotLWZpcHNfbWRfaW5pdChXSElSTFBPT0wpCi0rbm9uZmlwc19tZF9pbml0 KFdISVJMUE9PTCkKLSB7Ci0gICAgIG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKLSAgICAgcmV0 dXJuICgxKTsKLWRpZmYgLXVwIG9wZW5zc2wtMS4wLjJnL01ha2VmaWxlLm9yZy5maXBzIG9wZW5z c2wtMS4wLjJnL01ha2VmaWxlLm9yZwotLS0tIG9wZW5zc2wtMS4wLjJnL01ha2VmaWxlLm9yZy5m aXBzCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjAwOTE2MTYxICswMTAwCi0rKysgb3BlbnNzbC0xLjAu MmcvTWFrZWZpbGUub3JnCTIwMTYtMDMtMDEgMTY6MzM6MDcuNjI4OTE2Nzk0ICswMTAwCi1AQCAt MTM3LDYgKzEzNyw5IEBAIEZJUFNDQU5MSUI9Ci0gCi0gQkFTRUFERFI9Ci0gCi0rIyBOb24tZW1w dHkgaWYgRklQUyBlbmFibGVkCi0rRklQUz0KLSsKLSBESVJTPSAgIGNyeXB0byBzc2wgZW5naW5l cyBhcHBzIHRlc3QgdG9vbHMKLSBFTkdESVJTPSBjY2dvc3QKLSBTSExJQkRJUlM9IGNyeXB0byBz c2wKLUBAIC0xNDksNyArMTUyLDcgQEAgU0RJUlM9ICBcCi0gCWJuIGVjIHJzYSBkc2EgZWNkc2Eg ZGggZWNkaCBkc28gZW5naW5lIFwKLSAJYnVmZmVyIGJpbyBzdGFjayBsaGFzaCByYW5kIGVyciBc Ci0gCWV2cCBhc24xIHBlbSB4NTA5IHg1MDl2MyBjb25mIHR4dF9kYiBwa2NzNyBwa2NzMTIgY29t cCBvY3NwIHVpIGtyYjUgXAotLQljbXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFjCi0r CWNtcyBwcXVldWUgdHMganBha2Ugc3JwIHN0b3JlIGNtYWMgZmlwcwotICMga2VlcCBpbiBtaW5k IHRoYXQgdGhlIGFib3ZlIGxpc3QgaXMgYWRqdXN0ZWQgYnkgLi9Db25maWd1cmUKLSAjIGFjY29y ZGluZyB0byBuby14eHggYXJndW1lbnRzLi4uCi0gCi1AQCAtMjM5LDYgKzI0Miw3IEBAIEJVSUxE RU5WPQlMQ19BTEw9QyBQTEFURk9STT0nJChQTEFURk9STSkKLSAJCUZJUFNMSUJESVI9JyR7RklQ U0xJQkRJUn0nCQkJXAotIAkJRklQU0RJUj0nJHtGSVBTRElSfScJCQkJXAotIAkJRklQU0NBTkxJ Qj0iJCR7RklQU0NBTkxJQjotJChGSVBTQ0FOTElCKX0iCVwKLSsJCUZJUFM9IiQke0ZJUFM6LSQo RklQUyl9IglcCi0gCQlUSElTPSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZF UlJJREVTPQotICMgTUFLRU9WRVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlz aCBhbmQgU3lzVi1pc2ggbWFrZSBmbGF2b3JzLAotICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVz IGFtYmlndWl0aWVzIGluIHZhcmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgotZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmcvc3NsL3NzbF9hbGdzLmMuZmlwcyBvcGVuc3NsLTEuMC4yZy9zc2wvc3NsX2Fs Z3MuYwotLS0tIG9wZW5zc2wtMS4wLjJnL3NzbC9zc2xfYWxncy5jLmZpcHMJMjAxNi0wMy0wMSAx NDozNTo1My4wMDAwMDAwMDAgKzAxMDAKLSsrKyBvcGVuc3NsLTEuMC4yZy9zc2wvc3NsX2FsZ3Mu YwkyMDE2LTAzLTAxIDE2OjMzOjA3LjYyODkxNjc5NCArMDEwMAotQEAgLTY0LDYgKzY0LDExIEBA Ci0gaW50IFNTTF9saWJyYXJ5X2luaXQodm9pZCkKLSB7Ci0gCi0rI2lmZGVmIE9QRU5TU0xfRklQ UwotKyAgICBPUEVOU1NMX2luaXRfbGlicmFyeSgpOwotKyAgICBpZiAoIUZJUFNfbW9kZSgpKSB7 Ci0rI2VuZGlmCi0rCi0gI2lmbmRlZiBPUEVOU1NMX05PX0RFUwotICAgICBFVlBfYWRkX2NpcGhl cihFVlBfZGVzX2NiYygpKTsKLSAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygp KTsKLUBAIC0xNDIsNiArMTQ3LDQ4IEBAIGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCi0gICAg IEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEoKSk7Ci0gICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9kc3Mo KSk7Ci0gI2VuZGlmCi0rI2lmZGVmIE9QRU5TU0xfRklQUwotKyAgICB9IGVsc2UgewotKyMgaWZu ZGVmIE9QRU5TU0xfTk9fREVTCi0rICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNf Y2JjKCkpOwotKyMgZW5kaWYKLSsjIGlmbmRlZiBPUEVOU1NMX05PX0FFUwotKyAgICAgICAgRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2JjKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xOTJfY2JjKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZf Y2JjKCkpOwotKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOwotKyAg ICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZ2NtKCkpOwotKyMgZW5kaWYKLSsjIGlm bmRlZiBPUEVOU1NMX05PX01ENQotKyAgICAgICAgLyogbmVlZGVkIGV2ZW4gaW4gdGhlIEZJUFMg bW9kZSBmb3IgVExTIE1BQyAqLwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX21kNSgpKTsK LSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX21kNSwgInNzbDItbWQ1Iik7Ci0rICAg ICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsICJzc2wzLW1kNSIpOwotKyMgZW5kaWYK LSsjIGlmbmRlZiBPUEVOU1NMX05PX1NIQQotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3No YTEoKSk7IC8qIFJTQSB3aXRoIHNoYTEgKi8KLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFz KFNOX3NoYTEsICJzc2wzLXNoYTEiKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNO X3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwgU05fc2hhMVdpdGhSU0EpOwotKyMgZW5kaWYKLSsjIGlm bmRlZiBPUEVOU1NMX05PX1NIQTI1NgotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIy NCgpKTsKLSsgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7Ci0rIyBlbmRpZgot KyMgaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCi0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBf c2hhMzg0KCkpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKLSsjIGVu ZGlmCi0rIyBpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9O T19EU0EpCi0rICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsgLyogRFNBIHdpdGgg c2hhMSAqLwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIFNO X2RzYVdpdGhTSEExXzIpOwotKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0 aFNIQTEsICJEU1MxIik7Ci0rICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRo U0hBMSwgImRzczEiKTsKLSsjIGVuZGlmCi0rIyBpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQotKyAg ICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX2VjZHNhKCkpOwotKyMgZW5kaWYKLSsgICAgfQotKyNl bmRpZgotICNpZm5kZWYgT1BFTlNTTF9OT19DT01QCi0gICAgIC8qCi0gICAgICAqIFRoaXMgd2ls bCBpbml0aWFsaXNlIHRoZSBidWlsdC1pbiBjb21wcmVzc2lvbiBhbGdvcml0aG1zLiBUaGUgdmFs dWUKCmRpZmYgLS1naXQgYS9vcGVuc3NsLTEuMC4yZy1yZW1vdmUtc3NsMi5wYXRjaCBiL29wZW5z c2wtMS4wLjJnLXJlbW92ZS1zc2wyLnBhdGNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAxODEyY2RlLi4wMDAwMDAwCi0tLSBhL29wZW5zc2wtMS4wLjJnLXJlbW92ZS1zc2wyLnBhdGNo CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcv c3NsL3NzbC5oLnJlbW92ZS1zc2wyIG9wZW5zc2wtMS4wLjJnL3NzbC9zc2wuaAotLS0tIG9wZW5z c2wtMS4wLjJnL3NzbC9zc2wuaC5yZW1vdmUtc3NsMgkyMDE2LTAzLTAyIDA5OjI2OjI0LjAwMDAw MDAwMCArMDEwMAotKysrIG9wZW5zc2wtMS4wLjJnL3NzbC9zc2wuaAkyMDE2LTAzLTI5IDE1OjI0 OjAxLjQ3MTQyMjUyNSArMDIwMAotQEAgLTIyODMsNyArMjI4Myw3IEBAIGNvbnN0IGNoYXIgKlNT TF9nZXRfdmVyc2lvbihjb25zdCBTU0wgKnMKLSAvKiBUaGlzIHNldHMgdGhlICdkZWZhdWx0JyBT U0wgdmVyc2lvbiB0aGF0IFNTTF9uZXcoKSB3aWxsIGNyZWF0ZSAqLwotIGludCBTU0xfQ1RYX3Nl dF9zc2xfdmVyc2lvbihTU0xfQ1RYICpjdHgsIGNvbnN0IFNTTF9NRVRIT0QgKm1ldGgpOwotIAot LSMgaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgotKyMgaWZuZGVmIE9QRU5TU0xfTk9fU1NMMl9NRVRI T0QKLSBjb25zdCBTU0xfTUVUSE9EICpTU0x2Ml9tZXRob2Qodm9pZCk7IC8qIFNTTHYyICovCi0g Y29uc3QgU1NMX01FVEhPRCAqU1NMdjJfc2VydmVyX21ldGhvZCh2b2lkKTsgLyogU1NMdjIgKi8K LSBjb25zdCBTU0xfTUVUSE9EICpTU0x2Ml9jbGllbnRfbWV0aG9kKHZvaWQpOyAvKiBTU0x2MiAq LwotZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmcvc3NsL3MyX21ldGguYy5yZW1vdmUtc3NsMiBvcGVu c3NsLTEuMC4yZy9zc2wvczJfbWV0aC5jCi0tLS0gb3BlbnNzbC0xLjAuMmcvc3NsL3MyX21ldGgu Yy5yZW1vdmUtc3NsMgkyMDE2LTAxLTI4IDE0OjM4OjMxLjAwMDAwMDAwMCArMDEwMAotKysrIG9w ZW5zc2wtMS4wLjJnL3NzbC9zMl9tZXRoLmMJMjAxNi0wMy0yOSAxNToxOTo0OS4zMTk2NTQyMTYg KzAyMDAKLUBAIC03NCw4ICs3NCw4IEBAIElNUExFTUVOVF9zc2wyX21ldGhfZnVuYyhTU0x2Ml9t ZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNzbDJfYWNjZXB0LCBzc2wyX2Nvbm5l Y3QsIHNzbDJfZ2V0X21ldGhvZCkKLSAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q ICFPUEVOU1NMX05PX1NTTDIgKi8KLSAKLS0jIGlmIFBFREFOVElDCi0tc3RhdGljIHZvaWQgKmR1 bW15ID0gJmR1bW15OwotLSMgZW5kaWYKLStjb25zdCBTU0xfTUVUSE9EICpTU0x2Ml9tZXRob2Qo dm9pZCkgeyByZXR1cm4gTlVMTDsgfQotK2NvbnN0IFNTTF9NRVRIT0QgKlNTTHYyX2NsaWVudF9t ZXRob2Qodm9pZCkgeyByZXR1cm4gTlVMTDsgfQotK2NvbnN0IFNTTF9NRVRIT0QgKlNTTHYyX3Nl cnZlcl9tZXRob2Qodm9pZCkgeyByZXR1cm4gTlVMTDsgfQotIAotICNlbmRpZgoKZGlmZiAtLWdp dCBhL29wZW5zc2wtMS4wLjJoLWZpcHMucGF0Y2ggYi9vcGVuc3NsLTEuMC4yaC1maXBzLnBhdGNo Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOTFkZDkKLS0tIC9kZXYvbnVs bAorKysgYi9vcGVuc3NsLTEuMC4yaC1maXBzLnBhdGNoCkBAIC0wLDAgKzEsMTM3MTIgQEAKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2FwcHMvc3BlZWQuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2Fw cHMvc3BlZWQuYworLS0tIG9wZW5zc2wtMS4wLjJoL2FwcHMvc3BlZWQuYy5maXBzCTIwMTYtMDUt MDMgMTU6NDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvYXBwcy9zcGVl ZC5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODE5MzIwOTQ1ICswMjAwCitAQCAtMTk3LDcgKzE5Nyw2 IEBACisgIyAgaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5ECisgIyAgIHVuZGVmIEFFU19z ZXRfZW5jcnlwdF9rZXkKKyAjICAgdW5kZWYgQUVTX3NldF9kZWNyeXB0X2tleQorLSMgICB1bmRl ZiBERVNfc2V0X2tleV91bmNoZWNrZWQKKyAjICBlbmRpZgorICMgIGRlZmluZSBCRl9zZXRfa2V5 ICAgICAgcHJpdmF0ZV9CRl9zZXRfa2V5CisgIyAgZGVmaW5lIENBU1Rfc2V0X2tleSAgICBwcml2 YXRlX0NBU1Rfc2V0X2tleQorQEAgLTIwNSw3ICsyMDQsNiBAQAorICMgIGRlZmluZSBTRUVEX3Nl dF9rZXkgICAgcHJpdmF0ZV9TRUVEX3NldF9rZXkKKyAjICBkZWZpbmUgUkMyX3NldF9rZXkgICAg IHByaXZhdGVfUkMyX3NldF9rZXkKKyAjICBkZWZpbmUgUkM0X3NldF9rZXkgICAgIHByaXZhdGVf UkM0X3NldF9rZXkKKy0jICBkZWZpbmUgREVTX3NldF9rZXlfdW5jaGVja2VkICAgcHJpdmF0ZV9E RVNfc2V0X2tleV91bmNoZWNrZWQKKyAjICBkZWZpbmUgQUVTX3NldF9lbmNyeXB0X2tleSAgICAg cHJpdmF0ZV9BRVNfc2V0X2VuY3J5cHRfa2V5CisgIyAgZGVmaW5lIEFFU19zZXRfZGVjcnlwdF9r ZXkgICAgIHByaXZhdGVfQUVTX3NldF9kZWNyeXB0X2tleQorICMgIGRlZmluZSBDYW1lbGxpYV9z ZXRfa2V5ICAgICAgICBwcml2YXRlX0NhbWVsbGlhX3NldF9rZXkKK0BAIC05NzQsNyArOTcyLDEy IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAjIGVuZGlmCisgIyBpZm5kZWYg T1BFTlNTTF9OT19SU0EKKyAgICAgICAgIGlmIChzdHJjbXAoKmFyZ3YsICJyc2EiKSA9PSAwKSB7 CistICAgICAgICAgICAgcnNhX2RvaXRbUl9SU0FfNTEyXSA9IDE7CisrIyAgaWZkZWYgT1BFTlNT TF9GSVBTCisrICAgICAgICAgICAgaWYgKCFGSVBTX21vZGUoKSkKKysjICBlbmRpZgorKyAgICAg ICAgICAgIHsKKysgICAgICAgICAgICAgICAgcnNhX2RvaXRbUl9SU0FfNTEyXSA9IDE7CisrICAg ICAgICAgICAgfQorICAgICAgICAgICAgIHJzYV9kb2l0W1JfUlNBXzEwMjRdID0gMTsKKyAgICAg ICAgICAgICByc2FfZG9pdFtSX1JTQV8yMDQ4XSA9IDE7CisgICAgICAgICAgICAgcnNhX2RvaXRb Ul9SU0FfNDA5Nl0gPSAxOworQEAgLTk4Miw3ICs5ODUsMTIgQEAgaW50IE1BSU4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQorICMgZW5kaWYKKyAjIGlmbmRlZiBPUEVOU1NMX05PX0RTQQorICAgICAg ICAgaWYgKHN0cmNtcCgqYXJndiwgImRzYSIpID09IDApIHsKKy0gICAgICAgICAgICBkc2FfZG9p dFtSX0RTQV81MTJdID0gMTsKKysjICBpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgICAgICAgICBp ZiAoIUZJUFNfbW9kZSgpKQorKyMgIGVuZGlmCisrICAgICAgICAgICAgeworKyAgICAgICAgICAg ICAgICBkc2FfZG9pdFtSX0RTQV81MTJdID0gMTsKKysgICAgICAgICAgICB9CisgICAgICAgICAg ICAgZHNhX2RvaXRbUl9EU0FfMTAyNF0gPSAxOworICAgICAgICAgICAgIGRzYV9kb2l0W1JfRFNB XzIwNDhdID0gMTsKKyAgICAgICAgIH0gZWxzZQorQEAgLTEyMzMsMTMgKzEyNDEsMTkgQEAgaW50 IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIAorICAgICBpZiAoaiA9PSAwKSB7CisgICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgQUxHT1JfTlVNOyBpKyspIHsKKy0gICAgICAgICAgICBpZiAo aSAhPSBEX0VWUCkKKysgICAgICAgICAgICBpZiAoaSAhPSBEX0VWUCAmJgorKyAgICAgICAgICAg ICAgICAoIUZJUFNfbW9kZSgpIHx8IChpICE9IERfV0hJUkxQT09MICYmCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGkgIT0gRF9NRDIgJiYgaSAhPSBEX01ENCAmJgorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICE9IERfTUQ1ICYmIGkgIT0gRF9NREMyICYm CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgIT0gRF9STUQxNjApKSkKKyAg ICAgICAgICAgICAgICAgZG9pdFtpXSA9IDE7CisgICAgICAgICB9CisgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgUlNBX05VTTsgaSsrKQorLSAgICAgICAgICAgIHJzYV9kb2l0W2ldID0gMTsKKysg ICAgICAgICAgICBpZiAoIUZJUFNfbW9kZSgpIHx8IGkgIT0gUl9SU0FfNTEyKQorKyAgICAgICAg ICAgICAgICByc2FfZG9pdFtpXSA9IDE7CisgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRFNBX05V TTsgaSsrKQorLSAgICAgICAgICAgIGRzYV9kb2l0W2ldID0gMTsKKysgICAgICAgICAgICBpZiAo IUZJUFNfbW9kZSgpIHx8IGkgIT0gUl9EU0FfNTEyKQorKyAgICAgICAgICAgICAgICBkc2FfZG9p dFtpXSA9IDE7CisgIyBpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorICAgICAgICAgZm9yIChpID0g MDsgaSA8IEVDX05VTTsgaSsrKQorICAgICAgICAgICAgIGVjZHNhX2RvaXRbaV0gPSAxOworQEAg LTEyOTksMzAgKzEzMTMsNDYgQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAg ICBBRVNfc2V0X2VuY3J5cHRfa2V5KGtleTMyLCAyNTYsICZhZXNfa3MzKTsKKyAjIGVuZGlmCisg IyBpZm5kZWYgT1BFTlNTTF9OT19DQU1FTExJQQorLSAgICBDYW1lbGxpYV9zZXRfa2V5KGtleTE2 LCAxMjgsICZjYW1lbGxpYV9rczEpOworLSAgICBDYW1lbGxpYV9zZXRfa2V5KGNrZXkyNCwgMTky LCAmY2FtZWxsaWFfa3MyKTsKKy0gICAgQ2FtZWxsaWFfc2V0X2tleShja2V5MzIsIDI1NiwgJmNh bWVsbGlhX2tzMyk7CisrICAgIGlmIChkb2l0W0RfQ0JDXzEyOF9DTUxdIHx8IGRvaXRbRF9DQkNf MTkyX0NNTF0gfHwgZG9pdFtEX0NCQ18yNTZfQ01MXSkgeworKyAgICAgICAgQ2FtZWxsaWFfc2V0 X2tleShrZXkxNiwgMTI4LCAmY2FtZWxsaWFfa3MxKTsKKysgICAgICAgIENhbWVsbGlhX3NldF9r ZXkoY2tleTI0LCAxOTIsICZjYW1lbGxpYV9rczIpOworKyAgICAgICAgQ2FtZWxsaWFfc2V0X2tl eShja2V5MzIsIDI1NiwgJmNhbWVsbGlhX2tzMyk7CisrICAgIH0KKyAjIGVuZGlmCisgIyBpZm5k ZWYgT1BFTlNTTF9OT19JREVBCistICAgIGlkZWFfc2V0X2VuY3J5cHRfa2V5KGtleTE2LCAmaWRl YV9rcyk7CisrICAgIGlmIChkb2l0W0RfQ0JDX0lERUFdKSB7CisrICAgICAgICBpZGVhX3NldF9l bmNyeXB0X2tleShrZXkxNiwgJmlkZWFfa3MpOworKyAgICB9CisgIyBlbmRpZgorICMgaWZuZGVm IE9QRU5TU0xfTk9fU0VFRAorLSAgICBTRUVEX3NldF9rZXkoa2V5MTYsICZzZWVkX2tzKTsKKysg ICAgaWYgKGRvaXRbRF9DQkNfU0VFRF0pIHsKKysgICAgICAgIFNFRURfc2V0X2tleShrZXkxNiwg JnNlZWRfa3MpOworKyAgICB9CisgIyBlbmRpZgorICMgaWZuZGVmIE9QRU5TU0xfTk9fUkM0Cist ICAgIFJDNF9zZXRfa2V5KCZyYzRfa3MsIDE2LCBrZXkxNik7CisrICAgIGlmIChkb2l0W0RfUkM0 XSkgeworKyAgICAgICAgUkM0X3NldF9rZXkoJnJjNF9rcywgMTYsIGtleTE2KTsKKysgICAgfQor ICMgZW5kaWYKKyAjIGlmbmRlZiBPUEVOU1NMX05PX1JDMgorLSAgICBSQzJfc2V0X2tleSgmcmMy X2tzLCAxNiwga2V5MTYsIDEyOCk7CisrICAgIGlmIChkb2l0W0RfQ0JDX1JDMl0pIHsKKysgICAg ICAgIFJDMl9zZXRfa2V5KCZyYzJfa3MsIDE2LCBrZXkxNiwgMTI4KTsKKysgICAgfQorICMgZW5k aWYKKyAjIGlmbmRlZiBPUEVOU1NMX05PX1JDNQorLSAgICBSQzVfMzJfc2V0X2tleSgmcmM1X2tz LCAxNiwga2V5MTYsIDEyKTsKKysgICAgaWYgKGRvaXRbRF9DQkNfUkM1XSkgeworKyAgICAgICAg UkM1XzMyX3NldF9rZXkoJnJjNV9rcywgMTYsIGtleTE2LCAxMik7CisrICAgIH0KKyAjIGVuZGlm CisgIyBpZm5kZWYgT1BFTlNTTF9OT19CRgorLSAgICBCRl9zZXRfa2V5KCZiZl9rcywgMTYsIGtl eTE2KTsKKysgICAgaWYgKGRvaXRbRF9DQkNfQkZdKSB7CisrICAgICAgICBCRl9zZXRfa2V5KCZi Zl9rcywgMTYsIGtleTE2KTsKKysgICAgfQorICMgZW5kaWYKKyAjIGlmbmRlZiBPUEVOU1NMX05P X0NBU1QKKy0gICAgQ0FTVF9zZXRfa2V5KCZjYXN0X2tzLCAxNiwga2V5MTYpOworKyAgICBpZiAo ZG9pdFtEX0NCQ19DQVNUXSkgeworKyAgICAgICAgQ0FTVF9zZXRfa2V5KCZjYXN0X2tzLCAxNiwg a2V5MTYpOworKyAgICB9CisgIyBlbmRpZgorICMgaWZuZGVmIE9QRU5TU0xfTk9fUlNBCisgICAg IG1lbXNldChyc2FfYywgMCwgc2l6ZW9mKHJzYV9jKSk7CitAQCAtMTYwNSw2ICsxNjM1LDcgQEAg aW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgSE1BQ19DVFggaGN0eDsK KyAKKyAgICAgICAgIEhNQUNfQ1RYX2luaXQoJmhjdHgpOworKyAgICAgICAgSE1BQ19DVFhfc2V0 X2ZsYWdzKCZoY3R4LCBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpOworICAgICAgICAg SE1BQ19Jbml0X2V4KCZoY3R4LCAodW5zaWduZWQgY2hhciAqKSJUaGlzIGlzIGEga2V5Li4uIiwK KyAgICAgICAgICAgICAgICAgICAgICAxNiwgRVZQX21kNSgpLCBOVUxMKTsKKyAKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjJoL0NvbmZpZ3VyZS5maXBzIG9wZW5zc2wtMS4wLjJoL0NvbmZpZ3VyZQor LS0tIG9wZW5zc2wtMS4wLjJoL0NvbmZpZ3VyZS5maXBzCTIwMTYtMDUtMDMgMTY6NTc6NTguNzgz MzIwMDk1ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvQ29uZmlndXJlCTIwMTYtMDUtMDMgMTY6 NTc6NTguODE5MzIwOTQ1ICswMjAwCitAQCAtMTA2NywxMSArMTA2Nyw2IEBAIGlmIChkZWZpbmVk KCRkaXNhYmxlZHsibWQ1In0pIHx8IGRlZmluZWQKKyAJJGRpc2FibGVkeyJzc2wyIn0gPSAiZm9y Y2VkIjsKKyAJfQorIAorLWlmICgkZmlwcyAmJiAkZmlwc2xpYmRpciBlcSAiIikKKy0JeworLQkk Zmlwc2xpYmRpciA9ICRmaXBzZGlyIC4gIi9saWIvIjsKKy0JfQorLQorICMgUlNBWCBFTkdJTkUg c2V0cyBkZWZhdWx0IG5vbi1GSVBTIFJTQSBtZXRob2QuCisgaWYgKCRmaXBzKQorIAl7CitAQCAt MTU2MCw3ICsxNTU1LDYgQEAgJGNmbGFncy49IiAtRE9QRU5TU0xfQk5fQVNNX0dGMm0iIGlmICgk YgorIGlmICgkZmlwcykKKyAJeworIAkkb3BlbnNzbF9vdGhlcl9kZWZpbmVzLj0iI2RlZmluZSBP UEVOU1NMX0ZJUFNcbiI7CistCSRjZmxhZ3MgLj0gIiAtSVwkKEZJUFNESVIpL2luY2x1ZGUiOwor IAl9CisgCisgJGNwdWlkX29iaj0ibWVtX2Nsci5vIgl1bmxlc3MgKCRjcHVpZF9vYmogPX4gL1wu byQvKTsKK0BAIC0xNzYzLDkgKzE3NTcsMTIgQEAgd2hpbGUgKDxJTj4pCisgCisgCXMvXkZJUFNE SVI9LiovRklQU0RJUj0kZmlwc2Rpci87CisgCXMvXkZJUFNMSUJESVI9LiovRklQU0xJQkRJUj0k Zmlwc2xpYmRpci87CistCXMvXkZJUFNDQU5MSUI9LiovRklQU0NBTkxJQj1saWJjcnlwdG8vIGlm ICRmaXBzOworIAlzL15CQVNFQUREUj0uKi9CQVNFQUREUj0kYmFzZWFkZHIvOworIAorKwlpZiAo JGZpcHMpCisrCQl7CisrCQlzL15GSVBTPS4qL0ZJUFM9eWVzLzsKKysJCX0KKyAJcy9eU0hMSUJf VEFSR0VUPS4qL1NITElCX1RBUkdFVD0kc2hhcmVkX3RhcmdldC87CisgCXMvXlNITElCX01BUks9 LiovU0hMSUJfTUFSSz0kc2hhcmVkX21hcmsvOworIAlzL15TSEFSRURfTElCUz0uKi9TSEFSRURf TElCUz1cJChTSEFSRURfQ1JZUFRPKSBcJChTSEFSRURfU1NMKS8gaWYgKCEkbm9fc2hhcmVkKTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9hZXMvYWVzX21pc2MuYy5maXBzIG9wZW5z c2wtMS4wLjJoL2NyeXB0by9hZXMvYWVzX21pc2MuYworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0 by9hZXMvYWVzX21pc2MuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAwMDAwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2Flcy9hZXNfbWlzYy5jCTIwMTYtMDUtMDMgMTY6 NTc6NTguODE5MzIwOTQ1ICswMjAwCitAQCAtNzAsMTcgKzcwLDExIEBAIGNvbnN0IGNoYXIgKkFF U19vcHRpb25zKHZvaWQpCisgaW50IEFFU19zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQg Y2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg QUVTX0tFWSAqa2V5KQorIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGZpcHNfY2lwaGVy X2Fib3J0KEFFUyk7CistI2VuZGlmCisgICAgIHJldHVybiBwcml2YXRlX0FFU19zZXRfZW5jcnlw dF9rZXkodXNlcktleSwgYml0cywga2V5KTsKKyB9CisgCisgaW50IEFFU19zZXRfZGVjcnlwdF9r ZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgQUVTX0tFWSAqa2V5KQorIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBT CistICAgIGZpcHNfY2lwaGVyX2Fib3J0KEFFUyk7CistI2VuZGlmCisgICAgIHJldHVybiBwcml2 YXRlX0FFU19zZXRfZGVjcnlwdF9rZXkodXNlcktleSwgYml0cywga2V5KTsKKyB9CitkaWZmIC11 cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vY21hYy9jbWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9j cnlwdG8vY21hYy9jbWFjLmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vY21hYy9jbWFjLmMu ZmlwcwkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjJoL2NyeXB0by9jbWFjL2NtYWMuYwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgxOTMyMDk0NSArMDIw MAorQEAgLTEwNSwxMiArMTA1LDYgQEAgQ01BQ19DVFggKkNNQUNfQ1RYX25ldyh2b2lkKQorIAor IHZvaWQgQ01BQ19DVFhfY2xlYW51cChDTUFDX0NUWCAqY3R4KQorIHsKKy0jaWZkZWYgT1BFTlNT TF9GSVBTCistICAgIGlmIChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkgeworLSAg ICAgICAgRklQU19jbWFjX2N0eF9jbGVhbnVwKGN0eCk7CistICAgICAgICByZXR1cm47CistICAg IH0KKy0jZW5kaWYKKyAgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4LT5jY3R4KTsKKyAg ICAgT1BFTlNTTF9jbGVhbnNlKGN0eC0+dGJsLCBFVlBfTUFYX0JMT0NLX0xFTkdUSCk7CisgICAg IE9QRU5TU0xfY2xlYW5zZShjdHgtPmsxLCBFVlBfTUFYX0JMT0NLX0xFTkdUSCk7CitAQCAtMTYw LDIwICsxNTQsNiBAQCBpbnQgQ01BQ19Jbml0KENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaWQKKyAg ICAgICAgICAgICBFVlBlcnIoRVZQX0ZfQ01BQ19JTklULCBFVlBfUl9ESVNBQkxFRF9GT1JfRklQ Uyk7CisgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICB9CistCistICAgICAgICAvKiBT d2l0Y2ggdG8gRklQUyBjaXBoZXIgaW1wbGVtZW50YXRpb24gaWYgcG9zc2libGUgKi8KKy0gICAg ICAgIGlmIChjaXBoZXIgIT0gTlVMTCkgeworLSAgICAgICAgICAgIGNvbnN0IEVWUF9DSVBIRVIg KmZjaXBoZXI7CistICAgICAgICAgICAgZmNpcGhlciA9IEZJUFNfZ2V0X2NpcGhlcmJ5bmlkKEVW UF9DSVBIRVJfbmlkKGNpcGhlcikpOworLSAgICAgICAgICAgIGlmIChmY2lwaGVyICE9IE5VTEwp CistICAgICAgICAgICAgICAgIGNpcGhlciA9IGZjaXBoZXI7CistICAgICAgICB9CistICAgICAg ICAvKgorLSAgICAgICAgICogT3RoZXIgYWxnb3JpdGhtIGJsb2NraW5nIHdpbGwgYmUgZG9uZSBp biBGSVBTX2NtYWNfaW5pdCwgdmlhCistICAgICAgICAgKiBGSVBTX2NpcGhlcmluaXQoKS4KKy0g ICAgICAgICAqLworLSAgICAgICAgaWYgKCFpbXBsICYmICFjdHgtPmNjdHguZW5naW5lKQorLSAg ICAgICAgICAgIHJldHVybiBGSVBTX2NtYWNfaW5pdChjdHgsIGtleSwga2V5bGVuLCBjaXBoZXIs IE5VTEwpOworICAgICB9CisgI2VuZGlmCisgICAgIC8qIEFsbCB6ZXJvcyBtZWFucyByZXN0YXJ0 ICovCitAQCAtMjE5LDEwICsxOTksNiBAQCBpbnQgQ01BQ19VcGRhdGUoQ01BQ19DVFggKmN0eCwg Y29uc3Qgdm9pCisgeworICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gaW47CisgICAg IHNpemVfdCBibDsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGlmIChGSVBTX21vZGUoKSAm JiAhY3R4LT5jY3R4LmVuZ2luZSkKKy0gICAgICAgIHJldHVybiBGSVBTX2NtYWNfdXBkYXRlKGN0 eCwgaW4sIGRsZW4pOworLSNlbmRpZgorICAgICBpZiAoY3R4LT5ubGFzdF9ibG9jayA9PSAtMSkK KyAgICAgICAgIHJldHVybiAwOworICAgICBpZiAoZGxlbiA9PSAwKQorQEAgLTI2MiwxMCArMjM4 LDYgQEAgaW50IENNQUNfVXBkYXRlKENNQUNfQ1RYICpjdHgsIGNvbnN0IHZvaQorIGludCBDTUFD X0ZpbmFsKENNQUNfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90ICpwb3V0bGVu KQorIHsKKyAgICAgaW50IGksIGJsLCBsYjsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGlm IChGSVBTX21vZGUoKSAmJiAhY3R4LT5jY3R4LmVuZ2luZSkKKy0gICAgICAgIHJldHVybiBGSVBT X2NtYWNfZmluYWwoY3R4LCBvdXQsIHBvdXRsZW4pOworLSNlbmRpZgorICAgICBpZiAoY3R4LT5u bGFzdF9ibG9jayA9PSAtMSkKKyAgICAgICAgIHJldHVybiAwOworICAgICBibCA9IEVWUF9DSVBI RVJfQ1RYX2Jsb2NrX3NpemUoJmN0eC0+Y2N0eCk7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9j cnlwdG8vY3J5cHRvLmguZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vY3J5cHRvLmgKKy0tLSBv cGVuc3NsLTEuMC4yaC9jcnlwdG8vY3J5cHRvLmguZmlwcwkyMDE2LTA1LTAzIDE2OjU3OjU4LjY3 MzMxNzQ5NyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9jcnlwdG8uaAkyMDE2LTA1 LTAzIDE2OjU3OjU4LjgyMDMyMDk2OSArMDIwMAorQEAgLTYwMCwyNCArNjAwLDI5IEBAIGludCBG SVBTX21vZGVfc2V0KGludCByKTsKKyB2b2lkIE9QRU5TU0xfaW5pdCh2b2lkKTsKKyAKKyAjIGRl ZmluZSBmaXBzX21kX2luaXQoYWxnKSBmaXBzX21kX2luaXRfY3R4KGFsZywgYWxnKQorKyMgZGVm aW5lIG5vbmZpcHNfbWRfaW5pdChhbGcpIG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBhbGcpCisr IyBkZWZpbmUgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4KSBcCisrICAgICAgICBpbnQgYWxnIyNf SW5pdChjeCMjX0NUWCAqYykKKyAKKyAjIGlmZGVmIE9QRU5TU0xfRklQUworLSMgIGRlZmluZSBm aXBzX21kX2luaXRfY3R4KGFsZywgY3gpIFwKKysjICBkZWZpbmUgbm9uZmlwc19tZF9pbml0X2N0 eChhbGcsIGN4KSBcCisgICAgICAgICBpbnQgYWxnIyNfSW5pdChjeCMjX0NUWCAqYykgXAorICAg ICAgICAgeyBcCisgICAgICAgICBpZiAoRklQU19tb2RlKCkpIE9wZW5TU0xEaWUoX19GSUxFX18s IF9fTElORV9fLCBcCistICAgICAgICAgICAgICAgICJMb3cgbGV2ZWwgQVBJIGNhbGwgdG8gZGln ZXN0ICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIik7IFwKKysgICAgICAgICAgICAg ICAgIkRpZ2VzdCAiICNhbGcgIiBmb3JiaWRkZW4gaW4gRklQUyBtb2RlISIpOyBcCisgICAgICAg ICByZXR1cm4gcHJpdmF0ZV8jI2FsZyMjX0luaXQoYyk7IFwKKyAgICAgICAgIH0gXAorICAgICAg ICAgaW50IHByaXZhdGVfIyNhbGcjI19Jbml0KGN4IyNfQ1RYICpjKQorIAorICMgIGRlZmluZSBm aXBzX2NpcGhlcl9hYm9ydChhbGcpIFwKKyAgICAgICAgIGlmIChGSVBTX21vZGUoKSkgT3BlblNT TERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKy0gICAgICAgICAgICAgICAgIkxvdyBsZXZlbCBB UEkgY2FsbCB0byBjaXBoZXIgIiAjYWxnICIgZm9yYmlkZGVuIGluIEZJUFMgbW9kZSEiKQorKyAg ICAgICAgICAgICAgICAiQ2lwaGVyICIgI2FsZyAiIGZvcmJpZGRlbiBpbiBGSVBTIG1vZGUhIikK KysKKysvKiBkaWUgaWYgRklQUyBzZWxmdGVzdCBmYWlsZWQgKi8KKyt2b2lkIEZJUFNfc2VsZnRl c3RfY2hlY2sodm9pZCk7CisgCisgIyBlbHNlCistIyAgZGVmaW5lIGZpcHNfbWRfaW5pdF9jdHgo YWxnLCBjeCkgXAorLSAgICAgICAgaW50IGFsZyMjX0luaXQoY3gjI19DVFggKmMpCisrIyAgZGVm aW5lIG5vbmZpcHNfbWRfaW5pdF9jdHgoYWxnLCBjeCkgZmlwc19tZF9pbml0X2N0eChhbGcsIGN4 KQorICMgIGRlZmluZSBmaXBzX2NpcGhlcl9hYm9ydChhbGcpIHdoaWxlKDApCisgIyBlbmRpZgor IAorQEAgLTYzNyw2ICs2NDIsOSBAQCBpbnQgQ1JZUFRPX21lbWNtcChjb25zdCB2b2xhdGlsZSB2 b2lkICphCisgICovCisgdm9pZCBFUlJfbG9hZF9DUllQVE9fc3RyaW5ncyh2b2lkKTsKKyAKKysj IGRlZmluZSBPUEVOU1NMX0hBVkVfSU5JVCAgICAgICAxCisrdm9pZCBPUEVOU1NMX2luaXRfbGli cmFyeSh2b2lkKTsKKysKKyAvKiBFcnJvciBjb2RlcyBmb3IgdGhlIENSWVBUTyBmdW5jdGlvbnMu ICovCisgCisgLyogRnVuY3Rpb24gY29kZXMuICovCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9j cnlwdG8vZGVzL2Rlcy5oLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2Rlcy9kZXMuaAorLS0t IG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kZXMvZGVzLmguZmlwcwkyMDE2LTA1LTAzIDE2OjU3OjU4 LjcwOTMxODM0NyArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kZXMvZGVzLmgJMjAx Ni0wNS0wMyAxNjo1Nzo1OC44MjAzMjA5NjkgKzAyMDAKK0BAIC0yMzEsMTAgKzIzMSw2IEBAIGlu dCBERVNfc2V0X2tleShjb25zdF9ERVNfY2Jsb2NrICprZXksIEQKKyBpbnQgREVTX2tleV9zY2hl ZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKyBp bnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2No ZWR1bGUgKnNjaGVkdWxlKTsKKyB2b2lkIERFU19zZXRfa2V5X3VuY2hlY2tlZChjb25zdF9ERVNf Y2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKKy0jIGlmZGVmIE9QRU5T U0xfRklQUworLXZvaWQgcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVTX2Ni bG9jayAqa2V5LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVTX2tleV9z Y2hlZHVsZSAqc2NoZWR1bGUpOworLSMgZW5kaWYKKyB2b2lkIERFU19zdHJpbmdfdG9fa2V5KGNv bnN0IGNoYXIgKnN0ciwgREVTX2NibG9jayAqa2V5KTsKKyB2b2lkIERFU19zdHJpbmdfdG9fMmtl eXMoY29uc3QgY2hhciAqc3RyLCBERVNfY2Jsb2NrICprZXkxLCBERVNfY2Jsb2NrICprZXkyKTsK KyB2b2lkIERFU19jZmI2NF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25l ZCBjaGFyICpvdXQsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZGVzL3NldF9rZXku Yy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kZXMvc2V0X2tleS5jCistLS0gb3BlbnNzbC0x LjAuMmgvY3J5cHRvL2Rlcy9zZXRfa2V5LmMuZmlwcwkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kZXMvc2V0X2tleS5jCTIwMTYt MDUtMDMgMTY6NTc6NTguODIwMzIwOTY5ICswMjAwCitAQCAtMzU5LDE1ICszNTksNiBAQCBpbnQg REVTX3NldF9rZXlfY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrCisgfQorIAorIHZvaWQgREVTX3Nl dF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAq c2NoZWR1bGUpCistI2lmZGVmIE9QRU5TU0xfRklQUworLXsKKy0gICAgZmlwc19jaXBoZXJfYWJv cnQoREVTKTsKKy0gICAgcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoa2V5LCBzY2hlZHVs ZSk7CistfQorLQorLXZvaWQgcHJpdmF0ZV9ERVNfc2V0X2tleV91bmNoZWNrZWQoY29uc3RfREVT X2NibG9jayAqa2V5LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVTX2tl eV9zY2hlZHVsZSAqc2NoZWR1bGUpCistI2VuZGlmCisgeworICAgICBzdGF0aWMgY29uc3QgaW50 IHNoaWZ0czJbMTZdID0KKyAgICAgICAgIHsgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwg MSwgMSwgMSwgMSwgMSwgMCB9OworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RoL2Ro X2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RoL2RoX2dlbi5jCistLS0gb3BlbnNz bC0xLjAuMmgvY3J5cHRvL2RoL2RoX2dlbi5jLmZpcHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZGgvZGhfZ2VuLmMJMjAxNi0w NS0wMyAxNjo1Nzo1OC44MjAzMjA5NjkgKzAyMDAKK0BAIC04NSwxMCArODUsNiBAQCBpbnQgREhf Z2VuZXJhdGVfcGFyYW1ldGVyc19leChESCAqcmV0LCBpCisgI2VuZGlmCisgICAgIGlmIChyZXQt Pm1ldGgtPmdlbmVyYXRlX3BhcmFtcykKKyAgICAgICAgIHJldHVybiByZXQtPm1ldGgtPmdlbmVy YXRlX3BhcmFtcyhyZXQsIHByaW1lX2xlbiwgZ2VuZXJhdG9yLCBjYik7CistI2lmZGVmIE9QRU5T U0xfRklQUworLSAgICBpZiAoRklQU19tb2RlKCkpCistICAgICAgICByZXR1cm4gRklQU19kaF9n ZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KHJldCwgcHJpbWVfbGVuLCBnZW5lcmF0b3IsIGNiKTsKKy0j ZW5kaWYKKyAgICAgcmV0dXJuIGRoX2J1aWx0aW5fZ2VucGFyYW1zKHJldCwgcHJpbWVfbGVuLCBn ZW5lcmF0b3IsIGNiKTsKKyB9CisgCitAQCAtMTI2LDYgKzEyMiwxOCBAQCBzdGF0aWMgaW50IGRo X2J1aWx0aW5fZ2VucGFyYW1zKERIICpyZXQsCisgICAgIGludCBnLCBvayA9IC0xOworICAgICBC Tl9DVFggKmN0eCA9IE5VTEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQ U19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfREhfQlVJTFRJ Tl9HRU5QQVJBTVMsIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1 cm4gMDsKKysgICAgfQorKworKyAgICBpZiAoRklQU19tb2RlKCkgJiYgKHByaW1lX2xlbiA8IE9Q RU5TU0xfREhfRklQU19NSU5fTU9EVUxVU19CSVRTKSkgeworKyAgICAgICAgREhlcnIoREhfRl9E SF9CVUlMVElOX0dFTlBBUkFNUywgREhfUl9LRVlfU0laRV9UT09fU01BTEwpOworKyAgICAgICAg Z290byBlcnI7CisrICAgIH0KKysjZW5kaWYKKysKKyAgICAgY3R4ID0gQk5fQ1RYX25ldygpOwor ICAgICBpZiAoY3R4ID09IE5VTEwpCisgICAgICAgICBnb3RvIGVycjsKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjJoL2NyeXB0by9kaC9kaC5oLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RoL2Ro LmgKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZGgvZGguaC5maXBzCTIwMTYtMDUtMDMgMTY6 NTc6NTguNjIyMzE2MjkzICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RoL2RoLmgJ MjAxNi0wNS0wMyAxNjo1Nzo1OC44MjAzMjA5NjkgKzAyMDAKK0BAIC03Nyw2ICs3Nyw4IEBACisg IyAgZGVmaW5lIE9QRU5TU0xfREhfTUFYX01PRFVMVVNfQklUUyAgICAxMDAwMAorICMgZW5kaWYK KyAKKysjIGRlZmluZSBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisg IyBkZWZpbmUgREhfRkxBR19DQUNIRV9NT05UX1AgICAgIDB4MDEKKyAKKyAvKgorZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RoL2RoX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5 cHRvL2RoL2RoX2tleS5jCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RoL2RoX2tleS5jLmZp cHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4y aC9jcnlwdG8vZGgvZGhfa2V5LmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MjEzMjA5OTIgKzAyMDAK K0BAIC02MSw2ICs2MSw5IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyAjaW5jbHVkZSA8 b3BlbnNzbC9yYW5kLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaWZkZWYgT1BFTlNT TF9GSVBTCisrIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKyAKKyBzdGF0aWMg aW50IGdlbmVyYXRlX2tleShESCAqZGgpOworIHN0YXRpYyBpbnQgY29tcHV0ZV9rZXkodW5zaWdu ZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1Yl9rZXksIERIICpkaCk7CitAQCAtOTcsNyAr MTAwLDcgQEAgaW50IERIX2NvbXB1dGVfa2V5KHVuc2lnbmVkIGNoYXIgKmtleSwgYworIGludCBE SF9jb21wdXRlX2tleV9wYWRkZWQodW5zaWduZWQgY2hhciAqa2V5LCBjb25zdCBCSUdOVU0gKnB1 Yl9rZXksIERIICpkaCkKKyB7CisgICAgIGludCBydiwgcGFkOworLSAgICBydiA9IGRoLT5tZXRo LT5jb21wdXRlX2tleShrZXksIHB1Yl9rZXksIGRoKTsKKysgICAgcnYgPSBESF9jb21wdXRlX2tl eShrZXksIHB1Yl9rZXksIGRoKTsKKyAgICAgaWYgKHJ2IDw9IDApCisgICAgICAgICByZXR1cm4g cnY7CisgICAgIHBhZCA9IEJOX251bV9ieXRlcyhkaC0+cCkgLSBydjsKK0BAIC0xMTUsNyArMTE4 LDcgQEAgc3RhdGljIERIX01FVEhPRCBkaF9vc3NsID0geworICAgICBkaF9ibl9tb2RfZXhwLAor ICAgICBkaF9pbml0LAorICAgICBkaF9maW5pc2gsCistICAgIDAsCisrICAgIERIX0ZMQUdfRklQ U19NRVRIT0QsCisgICAgIE5VTEwsCisgICAgIE5VTEwKKyB9OworQEAgLTEzNCw2ICsxMzcsMTQg QEAgc3RhdGljIGludCBnZW5lcmF0ZV9rZXkoREggKmRoKQorICAgICBCTl9NT05UX0NUWCAqbW9u dCA9IE5VTEw7CisgICAgIEJJR05VTSAqcHViX2tleSA9IE5VTEwsICpwcml2X2tleSA9IE5VTEw7 CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2RlKCkKKysgICAgICAg ICYmIChCTl9udW1fYml0cyhkaC0+cCkgPCBPUEVOU1NMX0RIX0ZJUFNfTUlOX01PRFVMVVNfQklU UykpIHsKKysgICAgICAgIERIZXJyKERIX0ZfR0VORVJBVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RP T19TTUFMTCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyNlbmRpZgorKworICAgICBj dHggPSBCTl9DVFhfbmV3KCk7CisgICAgIGlmIChjdHggPT0gTlVMTCkKKyAgICAgICAgIGdvdG8g ZXJyOworQEAgLTIxNyw2ICsyMjgsMTMgQEAgc3RhdGljIGludCBjb21wdXRlX2tleSh1bnNpZ25l ZCBjaGFyICprZQorICAgICAgICAgREhlcnIoREhfRl9DT01QVVRFX0tFWSwgREhfUl9NT0RVTFVT X1RPT19MQVJHRSk7CisgICAgICAgICBnb3RvIGVycjsKKyAgICAgfQorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpCisrICAgICAgICAmJiAoQk5fbnVtX2JpdHMoZGgt PnApIDwgT1BFTlNTTF9ESF9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICBESGVy cihESF9GX0NPTVBVVEVfS0VZLCBESF9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrICAgICAgICBn b3RvIGVycjsKKysgICAgfQorKyNlbmRpZgorIAorICAgICBjdHggPSBCTl9DVFhfbmV3KCk7Cisg ICAgIGlmIChjdHggPT0gTlVMTCkKK0BAIC0yNzcsNiArMjk1LDkgQEAgc3RhdGljIGludCBkaF9i bl9tb2RfZXhwKGNvbnN0IERIICpkaCwgQgorIAorIHN0YXRpYyBpbnQgZGhfaW5pdChESCAqZGgp CisgeworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOwor KyNlbmRpZgorICAgICBkaC0+ZmxhZ3MgfD0gREhfRkxBR19DQUNIRV9NT05UX1A7CisgICAgIHJl dHVybiAoMSk7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RoL2RoX2xpYi5j LmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RoL2RoX2xpYi5jCistLS0gb3BlbnNzbC0xLjAu MmgvY3J5cHRvL2RoL2RoX2xpYi5jLmZpcHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZGgvZGhfbGliLmMJMjAxNi0wNS0wMyAx Njo1Nzo1OC44MjEzMjA5OTIgKzAyMDAKK0BAIC04MCwxNCArODAsNyBAQCB2b2lkIERIX3NldF9k ZWZhdWx0X21ldGhvZChjb25zdCBESF9NRVRICisgY29uc3QgREhfTUVUSE9EICpESF9nZXRfZGVm YXVsdF9tZXRob2Qodm9pZCkKKyB7CisgICAgIGlmICghZGVmYXVsdF9ESF9tZXRob2QpIHsKKy0j aWZkZWYgT1BFTlNTTF9GSVBTCistICAgICAgICBpZiAoRklQU19tb2RlKCkpCistICAgICAgICAg ICAgcmV0dXJuIEZJUFNfZGhfb3BlbnNzbCgpOworLSAgICAgICAgZWxzZQorLSAgICAgICAgICAg IHJldHVybiBESF9PcGVuU1NMKCk7CistI2Vsc2UKKyAgICAgICAgIGRlZmF1bHRfREhfbWV0aG9k ID0gREhfT3BlblNTTCgpOworLSNlbmRpZgorICAgICB9CisgICAgIHJldHVybiBkZWZhdWx0X0RI X21ldGhvZDsKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZHNhL2RzYV9lcnIu Yy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kc2EvZHNhX2Vyci5jCistLS0gb3BlbnNzbC0x LjAuMmgvY3J5cHRvL2RzYS9kc2FfZXJyLmMuZmlwcwkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kc2EvZHNhX2Vyci5jCTIwMTYt MDUtMDMgMTY6NTc6NTguODIxMzIwOTkyICswMjAwCitAQCAtNzQsNiArNzQsOCBAQCBzdGF0aWMg RVJSX1NUUklOR19EQVRBIERTQV9zdHJfZnVuY3RzW10KKyAgICAge0VSUl9GVU5DKERTQV9GX0RP X0RTQV9QUklOVCksICJET19EU0FfUFJJTlQifSwKKyAgICAge0VSUl9GVU5DKERTQV9GX0RTQVBB UkFNU19QUklOVCksICJEU0FwYXJhbXNfcHJpbnQifSwKKyAgICAge0VSUl9GVU5DKERTQV9GX0RT QVBBUkFNU19QUklOVF9GUCksICJEU0FwYXJhbXNfcHJpbnRfZnAifSwKKysgICAge0VSUl9GVU5D KERTQV9GX0RTQV9CVUlMVElOX0tFWUdFTiksICJkc2FfYnVpbHRpbl9rZXlnZW4ifSwKKysgICAg e0VSUl9GVU5DKERTQV9GX0RTQV9CVUlMVElOX1BBUkFNR0VOKSwgImRzYV9idWlsdGluX3BhcmFt Z2VuIn0sCisgICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfQlVJTFRJTl9QQVJBTUdFTjIpLCAiRFNB X0JVSUxUSU5fUEFSQU1HRU4yIn0sCisgICAgIHtFUlJfRlVOQyhEU0FfRl9EU0FfRE9fU0lHTiks ICJEU0FfZG9fc2lnbiJ9LAorICAgICB7RVJSX0ZVTkMoRFNBX0ZfRFNBX0RPX1ZFUklGWSksICJE U0FfZG9fdmVyaWZ5In0sCitAQCAtMTA5LDYgKzExMSw4IEBAIHN0YXRpYyBFUlJfU1RSSU5HX0RB VEEgRFNBX3N0cl9yZWFzb25zW10KKyAgICAge0VSUl9SRUFTT04oRFNBX1JfREVDT0RFX0VSUk9S KSwgImRlY29kZSBlcnJvciJ9LAorICAgICB7RVJSX1JFQVNPTihEU0FfUl9JTlZBTElEX0RJR0VT VF9UWVBFKSwgImludmFsaWQgZGlnZXN0IHR5cGUifSwKKyAgICAge0VSUl9SRUFTT04oRFNBX1Jf SU5WQUxJRF9QQVJBTUVURVJTKSwgImludmFsaWQgcGFyYW1ldGVycyJ9LAorKyAgICB7RVJSX1JF QVNPTihEU0FfUl9LRVlfU0laRV9JTlZBTElEKSwgImtleSBzaXplIGludmFsaWQifSwKKysgICAg e0VSUl9SRUFTT04oRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKSwgImtleSBzaXplIHRvbyBzbWFs bCJ9LAorICAgICB7RVJSX1JFQVNPTihEU0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMpLCAibWlzc2lu ZyBwYXJhbWV0ZXJzIn0sCisgICAgIHtFUlJfUkVBU09OKERTQV9SX01PRFVMVVNfVE9PX0xBUkdF KSwgIm1vZHVsdXMgdG9vIGxhcmdlIn0sCisgICAgIHtFUlJfUkVBU09OKERTQV9SX05FRURfTkVX X1NFVFVQX1ZBTFVFUyksICJuZWVkIG5ldyBzZXR1cCB2YWx1ZXMifSwKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjJoL2NyeXB0by9kc2EvZHNhX2dlbi5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRv L2RzYS9kc2FfZ2VuLmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZHNhL2RzYV9nZW4uYy5m aXBzCTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAu MmgvY3J5cHRvL2RzYS9kc2FfZ2VuLmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MjEzMjA5OTIgKzAy MDAKK0BAIC05MSw2ICs5MSwxNiBAQAorICMgIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorICMg ZW5kaWYKKyAKKysjIGlmbmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMgaW50IEZJUFNfZHNhX2dl bmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRVZQX01EICpldnBtZCwgdW5zaWduZWQg Y2hhciAqc2VlZCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZWVkX2xl biwgQklHTlVNICoqcF9yZXQsIEJJR05VTSAqKnFfcmV0LAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKKytzdGF0aWMgaW50 IEZJUFNfZHNhX2dlbmVyYXRlX2coQk5fQ1RYICpjdHgsIEJJR05VTSAqcCwgQklHTlVNICpxLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSUdOVU0gKipnX3JldCwgdW5zaWduZWQg bG9uZyAqaF9yZXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpj Yik7CisrIyBlbmRpZgorKworIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJl dCwgaW50IGJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKnNlZWRfaW4sIGludCBzZWVkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsCitAQCAtMTA2 LDk3ICsxMTYsMTY1IEBAIGludCBEU0FfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChEU0EgKnJldCwK KyAgICAgaWYgKHJldC0+bWV0aC0+ZHNhX3BhcmFtZ2VuKQorICAgICAgICAgcmV0dXJuIHJldC0+ bWV0aC0+ZHNhX3BhcmFtZ2VuKHJldCwgYml0cywgc2VlZF9pbiwgc2VlZF9sZW4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7 CistIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgZWxzZSBpZiAoRklQU19tb2RlKCkpIHsKKy0g ICAgICAgIHJldHVybiBGSVBTX2RzYV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KHJldCwgYml0cywK Ky0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRfaW4s IHNlZWRfbGVuLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY291bnRlcl9yZXQsIGhfcmV0LCBjYik7CistICAgIH0KKy0jIGVuZGlmCisgICAgIGVsc2Ug eworICAgICAgICAgY29uc3QgRVZQX01EICpldnBtZCA9IGJpdHMgPj0gMjA0OCA/IEVWUF9zaGEy NTYoKSA6IEVWUF9zaGExKCk7CisgICAgICAgICBzaXplX3QgcWJpdHMgPSBFVlBfTURfc2l6ZShl dnBtZCkgKiA4OworIAorICAgICAgICAgcmV0dXJuIGRzYV9idWlsdGluX3BhcmFtZ2VuKHJldCwg Yml0cywgcWJpdHMsIGV2cG1kLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNlZWRfaW4sIHNlZWRfbGVuLCBOVUxMLCBjb3VudGVyX3JldCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzZWVkX2luLCBzZWVkX2xlbiwgY291bnRlcl9yZXQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaF9yZXQsIGNiKTsKKyAgICAgfQorIH0K KyAKKysjIGlmZGVmIE9QRU5TU0xfRklQUworK2ludCBGSVBTX2RzYV9idWlsdGluX3BhcmFtZ2Vu KERTQSAqcmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAqZXZwbWQsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwgc2l6ZV90IHNlZWRfbGVuLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY291bnRlcl9yZXQsIHVuc2lnbmVk IGxvbmcgKmhfcmV0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpj YikKKyt7CisrICAgIHJldHVybiBkc2FfYnVpbHRpbl9wYXJhbWdlbihyZXQsIGJpdHMsIHFiaXRz LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZwbWQsIHNlZWRfaW4sIHNlZWRf bGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlcl9yZXQsIGhfcmV0 LCBjYik7CisrfQorKyMgZW5kaWYKKysKKyBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpy ZXQsIHNpemVfdCBiaXRzLCBzaXplX3QgcWJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IEVWUF9NRCAqZXZwbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWRfaW4sCistICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZWVkX2xlbiwgdW5zaWduZWQgY2hhciAqc2Vl ZF9vdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzZWVkX2xlbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICpjb3VudGVyX3JldCwgdW5zaWduZWQgbG9uZyAqaF9y ZXQsIEJOX0dFTkNCICpjYikKKyB7CisgICAgIGludCBvayA9IDA7CisgICAgIHVuc2lnbmVkIGNo YXIgc2VlZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrICAgIEJJR05VTSAqZyA9IE5VTEwsICpx ID0gTlVMTCwgKnAgPSBOVUxMOworKyAgICBzaXplX3QgcXNpemUgPSBxYml0cyA+PiAzOworKyAg ICBCTl9DVFggKmN0eCA9IE5VTEw7CisrICAgIAorKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAg IGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9E U0FfQlVJTFRJTl9QQVJBTUdFTiwgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAg ICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYK KysgICAgICAgIChiaXRzICE9IDEwMjQgfHwgcWJpdHMgIT0gMTYwKSAmJgorKyAgICAgICAgKGJp dHMgIT0gMjA0OCB8fCBxYml0cyAhPSAyMjQpICYmCisrICAgICAgICAoYml0cyAhPSAyMDQ4IHx8 IHFiaXRzICE9IDI1NikgJiYgKGJpdHMgIT0gMzA3MiB8fCBxYml0cyAhPSAyNTYpKSB7CisrICAg ICAgICBEU0FlcnIoRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4sIERTQV9SX0tFWV9TSVpFX0lO VkFMSUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysjIGVuZGlmCisrICAgIGlmIChz ZWVkX2xlbiAmJiAoc2VlZF9sZW4gPCAoc2l6ZV90KXFzaXplKSkKKysgICAgICAgIHNlZWRfaW4g PSBOVUxMOyAgICAgICAgIC8qIHNlZWQgYnVmZmVyIHRvbyBzbWFsbCAtLSBpZ25vcmUgKi8KKysg ICAgaWYgKHNlZWRfbGVuID4gc2l6ZW9mKHNlZWQpKQorKyAgICAgICAgc2VlZF9sZW4gPSBzaXpl b2Yoc2VlZCk7IC8qIEFwcC4gMi4yIG9mIEZJUFMgUFVCIDE4NiBhbGxvd3MgbGFyZ2VyIFNFRUQs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYnV0IG91ciBpbnRlcm5hbCBi dWZmZXJzIGFyZSByZXN0cmljdGVkIHRvIDI1NiBiaXRzKi8KKysgICAgaWYgKHNlZWRfaW4gIT0g TlVMTCkKKysgICAgICAgIG1lbWNweShzZWVkLCBzZWVkX2luLCBzZWVkX2xlbik7CisrICAgIGVs c2UKKysgICAgICAgIHNlZWRfbGVuID0gMDsKKysgICAgICAgIAorKyAgICBpZiAoKGN0eCA9IEJO X0NUWF9uZXcoKSkgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKyAKKysgICAgQk5fQ1RY X3N0YXJ0KGN0eCk7CisrIAorKyAgICBpZiAoIUZJUFNfZHNhX2dlbmVyYXRlX3BxKGN0eCwgYml0 cywgcWJpdHMsIGV2cG1kLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWQsIHNl ZWRfbGVuLCAmcCwgJnEsIGNvdW50ZXJfcmV0LCBjYikpCisrICAgICAgICBnb3RvIGVycjsKKysg CisrICAgIGlmICghRklQU19kc2FfZ2VuZXJhdGVfZyhjdHgsIHAsIHEsICZnLCBoX3JldCwgY2Ip KQorKyAgICAgICAgZ290byBlcnI7CisrIAorKyAgICBvayA9IDE7CisrIGVycjoKKysgICAgaWYg KG9rKSB7CisrICAgICAgICBpZiAocmV0LT5wKSB7CisrICAgICAgICAgICAgQk5fZnJlZShyZXQt PnApOworKyAgICAgICAgICAgIHJldC0+cCA9IE5VTEw7CisrICAgICAgICB9CisrICAgICAgICBp ZiAocmV0LT5xKSB7CisrICAgICAgICAgICAgQk5fZnJlZShyZXQtPnEpOworKyAgICAgICAgICAg IHJldC0+cSA9IE5VTEw7CisrICAgICAgICB9CisrICAgICAgICBpZiAocmV0LT5nKSB7CisrICAg ICAgICAgICAgQk5fZnJlZShyZXQtPmcpOworKyAgICAgICAgICAgIHJldC0+ZyA9IE5VTEw7Cisr ICAgICAgICB9CisrICAgICAgICByZXQtPnAgPSBCTl9kdXAocCk7CisrICAgICAgICByZXQtPnEg PSBCTl9kdXAocSk7CisrICAgICAgICByZXQtPmcgPSBCTl9kdXAoZyk7CisrICAgICAgICBpZiAo cmV0LT5wID09IE5VTEwgfHwgcmV0LT5xID09IE5VTEwgfHwgcmV0LT5nID09IE5VTEwpCisrICAg ICAgICAgICAgb2sgPSAwOworKyAgICB9CisrICAgIGlmIChjdHgpIHsKKysgICAgICAgIEJOX0NU WF9lbmQoY3R4KTsKKysgICAgICAgIEJOX0NUWF9mcmVlKGN0eCk7CisrICAgIH0KKysgICAgcmV0 dXJuIG9rOworK30KKysKKysjIGlmbmRlZiBPUEVOU1NMX0ZJUFMKKytzdGF0aWMKKysjIGVuZGlm CisraW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6 ZV90IHFiaXRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1k LCB1bnNpZ25lZCBjaGFyICpzZWVkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Vl ZF9sZW4sIEJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3JldCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKQorK3sKKysgICAgaW50IG9r ID0gMDsKKyAgICAgdW5zaWduZWQgY2hhciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CistICAg IHVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RIXSwgYnVmMltTSEEyNTZfRElH RVNUX0xFTkdUSF07CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmW1NIQTI1Nl9ESUdFU1RfTEVOR1RI XTsKKyAgICAgQklHTlVNICpyMCwgKlcsICpYLCAqYywgKnRlc3Q7CistICAgIEJJR05VTSAqZyA9 IE5VTEwsICpxID0gTlVMTCwgKnAgPSBOVUxMOworLSAgICBCTl9NT05UX0NUWCAqbW9udCA9IE5V TEw7CistICAgIGludCBpLCBrLCBuID0gMCwgbSA9IDAsIHFzaXplID0gcWJpdHMgPj4gMzsKKysg ICAgQklHTlVNICpxID0gTlVMTCwgKnAgPSBOVUxMOworKyAgICBpbnQgaSwgaywgYiwgbiA9IDAs IG0gPSAwLCBxc2l6ZSA9IHFiaXRzID4+IDM7CisgICAgIGludCBjb3VudGVyID0gMDsKKyAgICAg aW50IHIgPSAwOworLSAgICBCTl9DVFggKmN0eCA9IE5VTEw7CistICAgIHVuc2lnbmVkIGludCBo ID0gMjsKKyAKKyAgICAgaWYgKHFzaXplICE9IFNIQV9ESUdFU1RfTEVOR1RIICYmIHFzaXplICE9 IFNIQTIyNF9ESUdFU1RfTEVOR1RIICYmCisgICAgICAgICBxc2l6ZSAhPSBTSEEyNTZfRElHRVNU X0xFTkdUSCkKKyAgICAgICAgIC8qIGludmFsaWQgcSBzaXplICovCisgICAgICAgICByZXR1cm4g MDsKKyAKKy0gICAgaWYgKGV2cG1kID09IE5VTEwpCistICAgICAgICAvKiB1c2UgU0hBMSBhcyBk ZWZhdWx0ICovCisrICAgIGlmIChldnBtZCA9PSBOVUxMKSB7CisrICAgICAgICBpZiAocWJpdHMg PD0gMTYwKQorICAgICAgICAgZXZwbWQgPSBFVlBfc2hhMSgpOworKyAgICAgICAgZWxzZSBpZiAo cWJpdHMgPD0gMjI0KQorKyAgICAgICAgICAgIGV2cG1kID0gRVZQX3NoYTIyNCgpOworKyAgICAg ICAgZWxzZQorKyAgICAgICAgICAgIGV2cG1kID0gRVZQX3NoYTI1NigpOworKyAgICB9CisgCisg ICAgIGlmIChiaXRzIDwgNTEyKQorICAgICAgICAgYml0cyA9IDUxMjsKKyAKKyAgICAgYml0cyA9 IChiaXRzICsgNjMpIC8gNjQgKiA2NDsKKyAKKy0gICAgLyoKKy0gICAgICogTkI6IHNlZWRfbGVu ID09IDAgaXMgc3BlY2lhbCBjYXNlOiBjb3B5IGdlbmVyYXRlZCBzZWVkIHRvIHNlZWRfaW4gaWYK Ky0gICAgICogaXQgaXMgbm90IE5VTEwuCistICAgICAqLworLSAgICBpZiAoc2VlZF9sZW4gJiYg KHNlZWRfbGVuIDwgKHNpemVfdClxc2l6ZSkpCistICAgICAgICBzZWVkX2luID0gTlVMTDsgICAg ICAgICAvKiBzZWVkIGJ1ZmZlciB0b28gc21hbGwgLS0gaWdub3JlICovCistICAgIGlmIChzZWVk X2xlbiA+IChzaXplX3QpcXNpemUpCistICAgICAgICBzZWVkX2xlbiA9IHFzaXplOyAgICAgICAv KiBBcHAuIDIuMiBvZiBGSVBTIFBVQiAxODYgYWxsb3dzIGxhcmdlcgorLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICogU0VFRCwgYnV0IG91ciBpbnRlcm5hbCBidWZmZXJzIGFyZQor LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcmVzdHJpY3RlZCB0byAxNjAgYml0 cyAqLworLSAgICBpZiAoc2VlZF9pbiAhPSBOVUxMKQorLSAgICAgICAgbWVtY3B5KHNlZWQsIHNl ZWRfaW4sIHNlZWRfbGVuKTsKKy0KKy0gICAgaWYgKChtb250ID0gQk5fTU9OVF9DVFhfbmV3KCkp ID09IE5VTEwpCistICAgICAgICBnb3RvIGVycjsKKy0KKy0gICAgaWYgKChjdHggPSBCTl9DVFhf bmV3KCkpID09IE5VTEwpCistICAgICAgICBnb3RvIGVycjsKKy0KKy0gICAgQk5fQ1RYX3N0YXJ0 KGN0eCk7CistCisgICAgIHIwID0gQk5fQ1RYX2dldChjdHgpOworLSAgICBnID0gQk5fQ1RYX2dl dChjdHgpOworICAgICBXID0gQk5fQ1RYX2dldChjdHgpOworLSAgICBxID0gQk5fQ1RYX2dldChj dHgpOworKyAgICAqcV9yZXQgPSBxID0gQk5fQ1RYX2dldChjdHgpOworICAgICBYID0gQk5fQ1RY X2dldChjdHgpOworICAgICBjID0gQk5fQ1RYX2dldChjdHgpOworLSAgICBwID0gQk5fQ1RYX2dl dChjdHgpOworKyAgICAqcF9yZXQgPSBwID0gQk5fQ1RYX2dldChjdHgpOworICAgICB0ZXN0ID0g Qk5fQ1RYX2dldChjdHgpOworIAorICAgICBpZiAoIUJOX2xzaGlmdCh0ZXN0LCBCTl92YWx1ZV9v bmUoKSwgYml0cyAtIDEpKQorICAgICAgICAgZ290byBlcnI7CisgCisrICAgIC8qIHN0ZXAgMyBu ID0gXGxjZWlsIGJpdHMgLyBxYml0cyBccmNlaWwgLSAxICovCisrICAgIG4gPSAoYml0cyArIHFi aXRzIC0gMSkgLyBxYml0cyAtIDE7CisrICAgIC8qIHN0ZXAgNCBiID0gYml0cyAtIDEgLSBuICog cWJpdHMgKi8KKysgICAgYiA9IGJpdHMgLSAxIC0gbiAqIHFiaXRzOworKworICAgICBmb3IgKDs7 KSB7CisgICAgICAgICBmb3IgKDs7KSB7ICAgICAgICAgICAgICAvKiBmaW5kIHEgKi8KKyAgICAg ICAgICAgICBpbnQgc2VlZF9pc19yYW5kb207CisgCistICAgICAgICAgICAgLyogc3RlcCAxICov CisrICAgICAgICAgICAgLyogc3RlcCA1IGdlbmVyYXRlIHNlZWQgKi8KKyAgICAgICAgICAgICBp ZiAoIUJOX0dFTkNCX2NhbGwoY2IsIDAsIG0rKykpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJy OworIAorLSAgICAgICAgICAgIGlmICghc2VlZF9sZW4gfHwgIXNlZWRfaW4pIHsKKysgICAgICAg ICAgICBpZiAoIXNlZWRfbGVuKSB7CisgICAgICAgICAgICAgICAgIGlmIChSQU5EX3BzZXVkb19i eXRlcyhzZWVkLCBxc2l6ZSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7Cisg ICAgICAgICAgICAgICAgIHNlZWRfaXNfcmFuZG9tID0gMTsKK0BAIC0yMDYsMjkgKzI4NCwxOCBA QCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKiBiZSBiYWQgKi8KKyAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgbWVtY3B5KGJ1Ziwgc2VlZCwgcXNpemUpOworLSAgICAgICAgICAgIG1lbWNweShidWYy LCBzZWVkLCBxc2l6ZSk7CistICAgICAgICAgICAgLyogcHJlY29tcHV0ZSAiU0VFRCArIDEiIGZv ciBzdGVwIDc6ICovCistICAgICAgICAgICAgZm9yIChpID0gcXNpemUgLSAxOyBpID49IDA7IGkt LSkgeworLSAgICAgICAgICAgICAgICBidWZbaV0rKzsKKy0gICAgICAgICAgICAgICAgaWYgKGJ1 ZltpXSAhPSAwKQorLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CistICAgICAgICAgICAgfQor IAorLSAgICAgICAgICAgIC8qIHN0ZXAgMiAqLworKyAgICAgICAgICAgIC8qIHN0ZXAgNiBVID0g aGFzaChzZWVkKSAqLworICAgICAgICAgICAgIGlmICghRVZQX0RpZ2VzdChzZWVkLCBxc2l6ZSwg bWQsIE5VTEwsIGV2cG1kLCBOVUxMKSkKKyAgICAgICAgICAgICAgICAgZ290byBlcnI7CistICAg ICAgICAgICAgaWYgKCFFVlBfRGlnZXN0KGJ1ZiwgcXNpemUsIGJ1ZjIsIE5VTEwsIGV2cG1kLCBO VUxMKSkKKy0gICAgICAgICAgICAgICAgZ290byBlcnI7CistICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IHFzaXplOyBpKyspCistICAgICAgICAgICAgICAgIG1kW2ldIF49IGJ1ZjJbaV07Cisg CistICAgICAgICAgICAgLyogc3RlcCAzICovCisrICAgICAgICAgICAgLyogc3RlcCA3IHEgPSAy XihxYml0cy0xKSArIFUgKyAxIC0gKFUgbW9kIDIpICovCisgICAgICAgICAgICAgbWRbMF0gfD0g MHg4MDsKKyAgICAgICAgICAgICBtZFtxc2l6ZSAtIDFdIHw9IDB4MDE7CisgICAgICAgICAgICAg aWYgKCFCTl9iaW4yYm4obWQsIHFzaXplLCBxKSkKKyAgICAgICAgICAgICAgICAgZ290byBlcnI7 CisgCistICAgICAgICAgICAgLyogc3RlcCA0ICovCisrICAgICAgICAgICAgLyogc3RlcCA4IHRl c3QgZm9yIHByaW1lICg2NCByb3VuZCBvZiBSYWJpbi1NaWxsZXIpICovCisgICAgICAgICAgICAg ciA9IEJOX2lzX3ByaW1lX2Zhc3R0ZXN0X2V4KHEsIERTU19wcmltZV9jaGVja3MsIGN0eCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZF9pc19yYW5kb20sIGNi KTsKKyAgICAgICAgICAgICBpZiAociA+IDApCitAQCAtMjM2LDggKzMwMyw2IEBAIGludCBkc2Ff YnVpbHRpbl9wYXJhbWdlbihEU0EgKnJldCwgc2l6ZV8KKyAgICAgICAgICAgICBpZiAociAhPSAw KQorICAgICAgICAgICAgICAgICBnb3RvIGVycjsKKyAKKy0gICAgICAgICAgICAvKiBkbyBhIGNh bGxiYWNrIGNhbGwgKi8KKy0gICAgICAgICAgICAvKiBzdGVwIDUgKi8KKyAgICAgICAgIH0KKyAK KyAgICAgICAgIGlmICghQk5fR0VOQ0JfY2FsbChjYiwgMiwgMCkpCitAQCAtMjQ1LDE5ICszMTAs MTYgQEAgaW50IGRzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAqcmV0LCBzaXplXworICAgICAgICAg aWYgKCFCTl9HRU5DQl9jYWxsKGNiLCAzLCAwKSkKKyAgICAgICAgICAgICBnb3RvIGVycjsKKyAK Ky0gICAgICAgIC8qIHN0ZXAgNiAqLworKyAgICAgICAgLyogc3RlcCAxMSAqLworICAgICAgICAg Y291bnRlciA9IDA7CistICAgICAgICAvKiAib2Zmc2V0ID0gMiIgKi8KKy0KKy0gICAgICAgIG4g PSAoYml0cyAtIDEpIC8gMTYwOworKyAgICAgICAgLyogIm9mZnNldCA9IDEiICovCisgCisgICAg ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgaWYgKChjb3VudGVyICE9IDApICYmICFCTl9H RU5DQl9jYWxsKGNiLCAwLCBjb3VudGVyKSkKKyAgICAgICAgICAgICAgICAgZ290byBlcnI7Cisg CistICAgICAgICAgICAgLyogc3RlcCA3ICovCisrICAgICAgICAgICAgLyogc3RlcCAxMS4xLCAx MS4yIG9idGFpbiBXICovCisgICAgICAgICAgICAgQk5femVybyhXKTsKKy0gICAgICAgICAgICAv KiBub3cgJ2J1ZicgY29udGFpbnMgIlNFRUQgKyBvZmZzZXQgLSAxIiAqLworICAgICAgICAgICAg IGZvciAoayA9IDA7IGsgPD0gbjsgaysrKSB7CisgICAgICAgICAgICAgICAgIC8qCisgICAgICAg ICAgICAgICAgICAqIG9idGFpbiAiU0VFRCArIG9mZnNldCArIGsiIGJ5IGluY3JlbWVudGluZzoK K0BAIC0yNzEsMzYgKzMzMywzNyBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQs IHNpemVfCisgICAgICAgICAgICAgICAgIGlmICghRVZQX0RpZ2VzdChidWYsIHFzaXplLCBtZCwg TlVMTCwgZXZwbWQsIE5VTEwpKQorICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7CisgCist ICAgICAgICAgICAgICAgIC8qIHN0ZXAgOCAqLworICAgICAgICAgICAgICAgICBpZiAoIUJOX2Jp bjJibihtZCwgcXNpemUsIHIwKSkKKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyOworLSAg ICAgICAgICAgICAgICBpZiAoIUJOX2xzaGlmdChyMCwgcjAsIChxc2l6ZSA8PCAzKSAqIGspKQor KyAgICAgICAgICAgICAgICBpZiAoayA9PSBuKQorKyAgICAgICAgICAgICAgICAgICAgQk5fbWFz a19iaXRzKHIwLCBiKTsKKysgICAgICAgICAgICAgICAgaWYgKCFCTl9sc2hpZnQocjAsIHIwLCBx Yml0cyAqIGspKQorICAgICAgICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICAgICAg ICAgIGlmICghQk5fYWRkKFcsIFcsIHIwKSkKKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJy OworICAgICAgICAgICAgIH0KKyAKKy0gICAgICAgICAgICAvKiBtb3JlIG9mIHN0ZXAgOCAqLwor LSAgICAgICAgICAgIGlmICghQk5fbWFza19iaXRzKFcsIGJpdHMgLSAxKSkKKy0gICAgICAgICAg ICAgICAgZ290byBlcnI7CisrICAgICAgICAgICAgLyogc3RlcCAxMS4zIFggPSBXICsgMl4oTC0x KSAqLworICAgICAgICAgICAgIGlmICghQk5fY29weShYLCBXKSkKKyAgICAgICAgICAgICAgICAg Z290byBlcnI7CisgICAgICAgICAgICAgaWYgKCFCTl9hZGQoWCwgWCwgdGVzdCkpCisgICAgICAg ICAgICAgICAgIGdvdG8gZXJyOworIAorLSAgICAgICAgICAgIC8qIHN0ZXAgOSAqLworKyAgICAg ICAgICAgIC8qIHN0ZXAgMTEuNCBjID0gWCBtb2QgMipxICovCisgICAgICAgICAgICAgaWYgKCFC Tl9sc2hpZnQxKHIwLCBxKSkKKyAgICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICAg ICAgaWYgKCFCTl9tb2QoYywgWCwgcjAsIGN0eCkpCisgICAgICAgICAgICAgICAgIGdvdG8gZXJy OworKworKyAgICAgICAgICAgIC8qIHN0ZXAgMTEuNSBwID0gWCAtIChjIC0gMSkgKi8KKyAgICAg ICAgICAgICBpZiAoIUJOX3N1YihyMCwgYywgQk5fdmFsdWVfb25lKCkpKQorICAgICAgICAgICAg ICAgICBnb3RvIGVycjsKKyAgICAgICAgICAgICBpZiAoIUJOX3N1YihwLCBYLCByMCkpCisgICAg ICAgICAgICAgICAgIGdvdG8gZXJyOworIAorLSAgICAgICAgICAgIC8qIHN0ZXAgMTAgKi8KKysg ICAgICAgICAgICAvKiBzdGVwIDExLjYgKi8KKyAgICAgICAgICAgICBpZiAoQk5fY21wKHAsIHRl c3QpID49IDApIHsKKy0gICAgICAgICAgICAgICAgLyogc3RlcCAxMSAqLworKyAgICAgICAgICAg ICAgICAvKiBzdGVwIDExLjcgKi8KKyAgICAgICAgICAgICAgICAgciA9IEJOX2lzX3ByaW1lX2Zh c3R0ZXN0X2V4KHAsIERTU19wcmltZV9jaGVja3MsIGN0eCwgMSwgY2IpOworICAgICAgICAgICAg ICAgICBpZiAociA+IDApCisgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsgICAvKiBmb3Vu ZCBpdCAqLworQEAgLTMwOCwxMiArMzcxLDEyIEBAIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihE U0EgKnJldCwgc2l6ZV8KKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICAg ICAgIH0KKyAKKy0gICAgICAgICAgICAvKiBzdGVwIDEzICovCisrICAgICAgICAgICAgLyogc3Rl cCAxMS45ICovCisgICAgICAgICAgICAgY291bnRlcisrOworICAgICAgICAgICAgIC8qICJvZmZz ZXQgPSBvZmZzZXQgKyBuICsgMSIgKi8KKyAKKy0gICAgICAgICAgICAvKiBzdGVwIDE0ICovCist ICAgICAgICAgICAgaWYgKGNvdW50ZXIgPj0gNDA5NikKKysgICAgICAgICAgICAvKiBzdGVwIDEy ICovCisrICAgICAgICAgICAgaWYgKGNvdW50ZXIgPj0gNCAqIGJpdHMpCisgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgfQorICAgICB9CitAQCAtMzIxLDcgKzM4NCwzMyBAQCBpbnQg ZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgICAgIGlmICghQk5fR0VOQ0Jf Y2FsbChjYiwgMiwgMSkpCisgICAgICAgICBnb3RvIGVycjsKKyAKKy0gICAgLyogV2Ugbm93IG5l ZWQgdG8gZ2VuZXJhdGUgZyAqLworKyAgICBvayA9IDE7CisrIGVycjoKKysgICAgaWYgKG9rKSB7 CisrICAgICAgICBpZiAoY291bnRlcl9yZXQgIT0gTlVMTCkKKysgICAgICAgICAgICAqY291bnRl cl9yZXQgPSBjb3VudGVyOworKyAgICB9CisrICAgIHJldHVybiBvazsKKyt9CisrCisrIyBpZm5k ZWYgT1BFTlNTTF9GSVBTCisrc3RhdGljCisrIyBlbmRpZgorK2ludCBGSVBTX2RzYV9nZW5lcmF0 ZV9nKEJOX0NUWCAqY3R4LCBCSUdOVU0gKnAsIEJJR05VTSAqcSwKKysgICAgICAgICAgICAgICAg ICAgICAgICBCSUdOVU0gKipnX3JldCwgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpj YikKKyt7CisrICAgIGludCBvayA9IDA7CisrICAgIEJJR05VTSAqcjAsICp0ZXN0LCAqZyA9IE5V TEw7CisrICAgIEJOX01PTlRfQ1RYICptb250OworKyAgICB1bnNpZ25lZCBpbnQgaCA9IDI7Cisr CisrICAgIGlmICgobW9udCA9IEJOX01PTlRfQ1RYX25ldygpKSA9PSBOVUxMKQorKyAgICAgICAg Z290byBlcnI7CisrCisrICAgIHIwID0gQk5fQ1RYX2dldChjdHgpOworKyAgICAqZ19yZXQgPSBn ID0gQk5fQ1RYX2dldChjdHgpOworKyAgICB0ZXN0ID0gQk5fQ1RYX2dldChjdHgpOworKworICAg ICAvKiBTZXQgcjA9KHAtMSkvcSAqLworICAgICBpZiAoIUJOX3N1Yih0ZXN0LCBwLCBCTl92YWx1 ZV9vbmUoKSkpCisgICAgICAgICBnb3RvIGVycjsKK0BAIC0zNTAsNDYgKzQzOSwxNCBAQCBpbnQg ZHNhX2J1aWx0aW5fcGFyYW1nZW4oRFNBICpyZXQsIHNpemVfCisgICAgIG9rID0gMTsKKyAgZXJy OgorICAgICBpZiAob2spIHsKKy0gICAgICAgIGlmIChyZXQtPnApCistICAgICAgICAgICAgQk5f ZnJlZShyZXQtPnApOworLSAgICAgICAgaWYgKHJldC0+cSkKKy0gICAgICAgICAgICBCTl9mcmVl KHJldC0+cSk7CistICAgICAgICBpZiAocmV0LT5nKQorLSAgICAgICAgICAgIEJOX2ZyZWUocmV0 LT5nKTsKKy0gICAgICAgIHJldC0+cCA9IEJOX2R1cChwKTsKKy0gICAgICAgIHJldC0+cSA9IEJO X2R1cChxKTsKKy0gICAgICAgIHJldC0+ZyA9IEJOX2R1cChnKTsKKy0gICAgICAgIGlmIChyZXQt PnAgPT0gTlVMTCB8fCByZXQtPnEgPT0gTlVMTCB8fCByZXQtPmcgPT0gTlVMTCkgeworLSAgICAg ICAgICAgIG9rID0gMDsKKy0gICAgICAgICAgICBnb3RvIGVycjsKKy0gICAgICAgIH0KKy0gICAg ICAgIGlmIChjb3VudGVyX3JldCAhPSBOVUxMKQorLSAgICAgICAgICAgICpjb3VudGVyX3JldCA9 IGNvdW50ZXI7CisgICAgICAgICBpZiAoaF9yZXQgIT0gTlVMTCkKKyAgICAgICAgICAgICAqaF9y ZXQgPSBoOworLSAgICAgICAgaWYgKHNlZWRfb3V0KQorLSAgICAgICAgICAgIG1lbWNweShzZWVk X291dCwgc2VlZCwgcXNpemUpOworLSAgICB9CistICAgIGlmIChjdHgpIHsKKy0gICAgICAgIEJO X0NUWF9lbmQoY3R4KTsKKy0gICAgICAgIEJOX0NUWF9mcmVlKGN0eCk7CisgICAgIH0KKyAgICAg aWYgKG1vbnQgIT0gTlVMTCkKKyAgICAgICAgIEJOX01PTlRfQ1RYX2ZyZWUobW9udCk7CisgICAg IHJldHVybiBvazsKKyB9CisgCistIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKy0jICB1bmRlZiBmaXBz X2RzYV9idWlsdGluX3BhcmFtZ2VuMgorLWV4dGVybiBpbnQgZmlwc19kc2FfYnVpbHRpbl9wYXJh bWdlbjIoRFNBICpyZXQsIHNpemVfdCBMLCBzaXplX3QgTiwKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEVWUF9NRCAqZXZwbWQsCistICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZWVkX2luLAorLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRfbGVuLCBpbnQg aWR4LAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh ciAqc2VlZF9vdXQsCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg KmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3JldCwKKy0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYik7CistIyBlbmRpZgorLQorIC8qCisgICog VGhpcyBpcyBhIHBhcmFtZXRlciBnZW5lcmF0aW9uIGFsZ29yaXRobSBmb3IgdGhlIERTQTIgYWxn b3JpdGhtIGFzCisgICogZGVzY3JpYmVkIGluIEZJUFMgMTg2LTMuCitAQCAtNDE1LDE0ICs0NzIs NiBAQCBpbnQgZHNhX2J1aWx0aW5fcGFyYW1nZW4yKERTQSAqcmV0LCBzaXplCisgICAgIEVWUF9N RF9DVFggbWN0eDsKKyAgICAgdW5zaWduZWQgaW50IGggPSAyOworIAorLSMgaWZkZWYgT1BFTlNT TF9GSVBTCistCistICAgIGlmIChGSVBTX21vZGUoKSkKKy0gICAgICAgIHJldHVybiBmaXBzX2Rz YV9idWlsdGluX3BhcmFtZ2VuMihyZXQsIEwsIE4sIGV2cG1kLAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWRfaW4sIHNlZWRfbGVuLCBpZHgsCistICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlZF9vdXQsIGNvdW50ZXJfcmV0 LCBoX3JldCwgY2IpOworLSMgZW5kaWYKKy0KKyAgICAgRVZQX01EX0NUWF9pbml0KCZtY3R4KTsK KyAKKyAgICAgaWYgKGV2cG1kID09IE5VTEwpIHsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2Ny eXB0by9kc2EvZHNhLmguZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZHNhL2RzYS5oCistLS0g b3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RzYS9kc2EuaC5maXBzCTIwMTYtMDUtMDMgMTY6NTc6NTgu NTEzMzEzNzE5ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RzYS9kc2EuaAkyMDE2 LTA1LTAzIDE2OjU3OjU4LjgyMTMyMDk5MiArMDIwMAorQEAgLTg4LDYgKzg4LDggQEAKKyAjICBk ZWZpbmUgT1BFTlNTTF9EU0FfTUFYX01PRFVMVVNfQklUUyAgIDEwMDAwCisgIyBlbmRpZgorIAor KyMgZGVmaW5lIE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisgIyBk ZWZpbmUgRFNBX0ZMQUdfQ0FDSEVfTU9OVF9QICAgMHgwMQorIC8qCisgICogbmV3IHdpdGggMC45 LjdoOyB0aGUgYnVpbHQtaW4gRFNBIGltcGxlbWVudGF0aW9uIG5vdyB1c2VzIGNvbnN0YW50IHRp bWUKK0BAIC0yNjUsNiArMjY3LDIwIEBAIGludCBEU0FfcHJpbnRfZnAoRklMRSAqYnAsIGNvbnN0 IERTQSAqeCwKKyBESCAqRFNBX2R1cF9ESChjb25zdCBEU0EgKnIpOworICMgZW5kaWYKKyAKKysj IGlmZGVmIE9QRU5TU0xfRklQUworK2ludCBGSVBTX2RzYV9idWlsdGluX3BhcmFtZ2VuKERTQSAq cmV0LCBzaXplX3QgYml0cywgc2l6ZV90IHFiaXRzLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IEVWUF9NRCAqZXZwbWQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3Qgc2VlZF9sZW4sIGludCAqY291bnRlcl9yZXQsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqaF9yZXQsIEJOX0dFTkNCICpjYik7Cisr aW50IEZJUFNfZHNhX2dlbmVyYXRlX3BxKEJOX0NUWCAqY3R4LCBzaXplX3QgYml0cywgc2l6ZV90 IHFiaXRzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmV2cG1kLCB1 bnNpZ25lZCBjaGFyICpzZWVkLAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2VlZF9s ZW4sIEJJR05VTSAqKnBfcmV0LCBCSUdOVU0gKipxX3JldCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgaW50ICpjb3VudGVyX3JldCwgQk5fR0VOQ0IgKmNiKTsKKytpbnQgRklQU19kc2FfZ2Vu ZXJhdGVfZyhCTl9DVFggKmN0eCwgQklHTlVNICpwLCBCSUdOVU0gKnEsIEJJR05VTSAqKmdfcmV0 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpoX3JldCwgQk5f R0VOQ0IgKmNiKTsKKysjIGVuZGlmCisrCisgIyBkZWZpbmUgRVZQX1BLRVlfQ1RYX3NldF9kc2Ff cGFyYW1nZW5fYml0cyhjdHgsIG5iaXRzKSBcCisgICAgICAgICBFVlBfUEtFWV9DVFhfY3RybChj dHgsIEVWUF9QS0VZX0RTQSwgRVZQX1BLRVlfT1BfUEFSQU1HRU4sIFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEVWUF9QS0VZX0NUUkxfRFNBX1BBUkFNR0VOX0JJVFMsIG5iaXRz LCBOVUxMKQorQEAgLTI4NywxMSArMzAzLDE0IEBAIHZvaWQgRVJSX2xvYWRfRFNBX3N0cmluZ3Mo dm9pZCk7CisgIyBkZWZpbmUgRFNBX0ZfRE9fRFNBX1BSSU5UICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEwNAorICMgZGVmaW5lIERTQV9GX0RTQVBBUkFNU19QUklOVCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMDAKKyAjIGRlZmluZSBEU0FfRl9EU0FQQVJBTVNfUFJJTlRfRlAg ICAgICAgICAgICAgICAgICAgICAgICAgMTAxCistIyBkZWZpbmUgRFNBX0ZfRFNBX0JVSUxUSU5f UEFSQU1HRU4yICAgICAgICAgICAgICAgICAgICAgIDEyNgorKyMgZGVmaW5lIERTQV9GX0RTQV9C VUlMVElOX0tFWUdFTiAgICAgICAgICAgICAgICAgICAgICAgICAxMjQKKysjIGRlZmluZSBEU0Ff Rl9EU0FfQlVJTFRJTl9QQVJBTUdFTiAgICAgICAgICAgICAgICAgICAgICAgMTIzCisrIyBkZWZp bmUgRFNBX0ZfRFNBX0JVSUxUSU5fUEFSQU1HRU4yICAgICAgICAgICAgICAgICAgICAgIDIyNgor ICMgZGVmaW5lIERTQV9GX0RTQV9ET19TSUdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxMTIKKyAjIGRlZmluZSBEU0FfRl9EU0FfRE9fVkVSSUZZICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTEzCistIyBkZWZpbmUgRFNBX0ZfRFNBX0dFTkVSQVRFX0tFWSAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEyNAorLSMgZGVmaW5lIERTQV9GX0RTQV9HRU5FUkFURV9QQVJBTUVU RVJTX0VYICAgICAgICAgICAgICAgICAxMjMKKysjIGRlZmluZSBEU0FfRl9EU0FfR0VORVJBVEVf S0VZICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI2CisrIyBkZWZpbmUgRFNBX0ZfRFNBX0dF TkVSQVRFX1BBUkFNRVRFUlNfRVggICAgICAgICAgICAgICAgIDEyNworKyMgZGVmaW5lIERTQV9G X0RTQV9HRU5FUkFURV9QQVJBTUVURVJTICAgLyogdW51c2VkICovICAgICAxMjUKKyAjIGRlZmlu ZSBEU0FfRl9EU0FfTkVXX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAzCisg IyBkZWZpbmUgRFNBX0ZfRFNBX1BBUkFNX0RFQ09ERSAgICAgICAgICAgICAgICAgICAgICAgICAg IDExOQorICMgZGVmaW5lIERTQV9GX0RTQV9QUklOVF9GUCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxMDUKK0BAIC0zMTcsMTIgKzMzNiwxNiBAQCB2b2lkIEVSUl9sb2FkX0RTQV9zdHJp bmdzKHZvaWQpOworICMgZGVmaW5lIERTQV9SX0RBVEFfVE9PX0xBUkdFX0ZPUl9LRVlfU0laRSAg ICAgICAgICAgICAgICAxMDAKKyAjIGRlZmluZSBEU0FfUl9ERUNPREVfRVJST1IgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTA0CisgIyBkZWZpbmUgRFNBX1JfSU5WQUxJRF9ESUdFU1Rf VFlQRSAgICAgICAgICAgICAgICAgICAgICAgIDEwNgorLSMgZGVmaW5lIERTQV9SX0lOVkFMSURf UEFSQU1FVEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAxMTIKKysjIGRlZmluZSBEU0FfUl9J TlZBTElEX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAgICAgICAgMjEyCisrIyBkZWZpbmUg RFNBX1JfS0VZX1NJWkVfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDExMworKyMg ZGVmaW5lIERTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCAgICAgICAgICAgICAgICAgICAgICAgICAx MTAKKyAjIGRlZmluZSBEU0FfUl9NSVNTSU5HX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICAg ICAgICAgMTAxCisgIyBkZWZpbmUgRFNBX1JfTU9EVUxVU19UT09fTEFSR0UgICAgICAgICAgICAg ICAgICAgICAgICAgIDEwMworLSMgZGVmaW5lIERTQV9SX05FRURfTkVXX1NFVFVQX1ZBTFVFUyAg ICAgICAgICAgICAgICAgICAgICAxMTAKKysjIGRlZmluZSBEU0FfUl9ORUVEX05FV19TRVRVUF9W QUxVRVMgICAgICAgICAgICAgICAgICAgICAgMTEyCisgIyBkZWZpbmUgRFNBX1JfTk9OX0ZJUFNf RFNBX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgIDExMQorKyMgZGVmaW5lIERTQV9SX05P Tl9GSVBTX01FVEhPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMTEKKyAjIGRlZmluZSBE U0FfUl9OT19QQVJBTUVURVJTX1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgMTA3CisrIyBk ZWZpbmUgRFNBX1JfT1BFUkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSAvKiB1bnVzZWQg Ki8gMTEyCisgIyBkZWZpbmUgRFNBX1JfUEFSQU1FVEVSX0VOQ09ESU5HX0VSUk9SICAgICAgICAg ICAgICAgICAgIDEwNQorICMgZGVmaW5lIERTQV9SX1FfTk9UX1BSSU1FICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMTMKKyAKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9k c2EvZHNhX2tleS5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RzYS9kc2Ffa2V5LmMKKy0t LSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZHNhL2RzYV9rZXkuYy5maXBzCTIwMTYtMDUtMDMgMTU6 NDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RzYS9kc2Ff a2V5LmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MjIzMjEwMTYgKzAyMDAKK0BAIC02Niw2ICs2Niwz NCBAQAorIAorICMgaWZkZWYgT1BFTlNTTF9GSVBTCisgIyAgaW5jbHVkZSA8b3BlbnNzbC9maXBz Lmg+CisrIyAgaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKytzdGF0aWMgaW50IGZpcHNfY2hl Y2tfZHNhKERTQSAqZHNhKQorK3sKKysgICAgRVZQX1BLRVkgKnBrOworKyAgICB1bnNpZ25lZCBj aGFyIHRic1tdID0gIkRTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKKysgICAgaW50IHJldCA9IDA7 CisrCisrICAgIGlmICgocGsgPSBFVlBfUEtFWV9uZXcoKSkgPT0gTlVMTCkKKysgICAgICAgIGdv dG8gZXJyOworKworKyAgICBFVlBfUEtFWV9zZXQxX0RTQShwaywgZHNhKTsKKysKKysgICAgaWYg KGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywgdGJzLCAtMSwgTlVMTCwgMCwgTlVMTCwgMCwg TlVMTCkpCisrICAgICAgICByZXQgPSAxOworKworKyBlcnI6CisrICAgIGlmIChyZXQgPT0gMCkg eworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19DSEVDS19EU0EsIEZJUFNfUl9QQUlSV0lT RV9URVNUX0ZBSUxFRCk7CisrICAgICAgICBmaXBzX3NldF9zZWxmdGVzdF9mYWlsKCk7CisrICAg IH0KKysKKysgICAgaWYgKHBrKQorKyAgICAgICAgRVZQX1BLRVlfZnJlZShwayk7CisrCisrICAg IHJldHVybiByZXQ7CisrfQorKworICMgZW5kaWYKKyAKKyBzdGF0aWMgaW50IGRzYV9idWlsdGlu X2tleWdlbihEU0EgKmRzYSk7CitAQCAtODEsMTAgKzEwOSw2IEBAIGludCBEU0FfZ2VuZXJhdGVf a2V5KERTQSAqZHNhKQorICMgZW5kaWYKKyAgICAgaWYgKGRzYS0+bWV0aC0+ZHNhX2tleWdlbikK KyAgICAgICAgIHJldHVybiBkc2EtPm1ldGgtPmRzYV9rZXlnZW4oZHNhKTsKKy0jIGlmZGVmIE9Q RU5TU0xfRklQUworLSAgICBpZiAoRklQU19tb2RlKCkpCistICAgICAgICByZXR1cm4gRklQU19k c2FfZ2VuZXJhdGVfa2V5KGRzYSk7CistIyBlbmRpZgorICAgICByZXR1cm4gZHNhX2J1aWx0aW5f a2V5Z2VuKGRzYSk7CisgfQorIAorQEAgLTk0LDYgKzExOCwxNCBAQCBzdGF0aWMgaW50IGRzYV9i dWlsdGluX2tleWdlbihEU0EgKmRzYSkKKyAgICAgQk5fQ1RYICpjdHggPSBOVUxMOworICAgICBC SUdOVU0gKnB1Yl9rZXkgPSBOVUxMLCAqcHJpdl9rZXkgPSBOVUxMOworIAorKyMgaWZkZWYgT1BF TlNTTF9GSVBTCisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxB R19OT05fRklQU19BTExPVykKKysgICAgICAgICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BF TlNTTF9EU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSkgeworKyAgICAgICAgRFNBZXJyKERTQV9G X0RTQV9CVUlMVElOX0tFWUdFTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysgICAgICAg IGdvdG8gZXJyOworKyAgICB9CisrIyBlbmRpZgorKworICAgICBpZiAoKGN0eCA9IEJOX0NUWF9u ZXcoKSkgPT0gTlVMTCkKKyAgICAgICAgIGdvdG8gZXJyOworIAorQEAgLTEzMSw2ICsxNjMsMTMg QEAgc3RhdGljIGludCBkc2FfYnVpbHRpbl9rZXlnZW4oRFNBICpkc2EpCisgCisgICAgIGRzYS0+ cHJpdl9rZXkgPSBwcml2X2tleTsKKyAgICAgZHNhLT5wdWJfa2V5ID0gcHViX2tleTsKKysjIGlm ZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIWZpcHNfY2hlY2tfZHNh KGRzYSkpIHsKKysgICAgICAgIGRzYS0+cHViX2tleSA9IE5VTEw7CisrICAgICAgICBkc2EtPnBy aXZfa2V5ID0gTlVMTDsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrIyBlbmRpZgorICAg ICBvayA9IDE7CisgCisgIGVycjoKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kc2Ev ZHNhX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RzYS9kc2FfbGliLmMKKy0tLSBv cGVuc3NsLTEuMC4yaC9jcnlwdG8vZHNhL2RzYV9saWIuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6 NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RzYS9kc2FfbGli LmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MjIzMjEwMTYgKzAyMDAKK0BAIC04NiwxNCArODYsNyBA QCB2b2lkIERTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgRFNBX01FCisgY29uc3QgRFNBX01F VEhPRCAqRFNBX2dldF9kZWZhdWx0X21ldGhvZCh2b2lkKQorIHsKKyAgICAgaWYgKCFkZWZhdWx0 X0RTQV9tZXRob2QpIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgICAgICBpZiAoRklQU19t b2RlKCkpCistICAgICAgICAgICAgcmV0dXJuIEZJUFNfZHNhX29wZW5zc2woKTsKKy0gICAgICAg IGVsc2UKKy0gICAgICAgICAgICByZXR1cm4gRFNBX09wZW5TU0woKTsKKy0jZWxzZQorICAgICAg ICAgZGVmYXVsdF9EU0FfbWV0aG9kID0gRFNBX09wZW5TU0woKTsKKy0jZW5kaWYKKyAgICAgfQor ICAgICByZXR1cm4gZGVmYXVsdF9EU0FfbWV0aG9kOworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjJoL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kc2Ev ZHNhX2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kc2EvZHNhX2xvY2wuaC5maXBz CTIwMTYtMDUtMDMgMTY6NTc6NTguNTE1MzEzNzY3ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgv Y3J5cHRvL2RzYS9kc2FfbG9jbC5oCTIwMTYtMDUtMDMgMTY6NTc6NTguODIyMzIxMDE2ICswMjAw CitAQCAtNTYsNyArNTYsNyBAQAorIAorIGludCBkc2FfYnVpbHRpbl9wYXJhbWdlbihEU0EgKnJl dCwgc2l6ZV90IGJpdHMsIHNpemVfdCBxYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgRVZQX01EICpldnBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZF9pbiwKKy0gICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRfbGVuLCB1bnNpZ25lZCBjaGFyICpzZWVk X291dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNlZWRfbGVuLAorICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKmNvdW50ZXJfcmV0LCB1bnNpZ25lZCBsb25nICpoX3Jl dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgQk5fR0VOQ0IgKmNiKTsKKyAKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kc2EvZHNhX29zc2wuYy5maXBzIG9wZW5zc2wtMS4wLjJo L2NyeXB0by9kc2EvZHNhX29zc2wuYworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kc2EvZHNh X29zc2wuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMmgvY3J5cHRvL2RzYS9kc2Ffb3NzbC5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODIy MzIxMDE2ICswMjAwCitAQCAtNjUsNiArNjUsOSBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2RzYS5o PgorICNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9hc24xLmg+ CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2Vu ZGlmCisgCisgc3RhdGljIERTQV9TSUcgKmRzYV9kb19zaWduKGNvbnN0IHVuc2lnbmVkIGNoYXIg KmRnc3QsIGludCBkbGVuLCBEU0EgKmRzYSk7Cisgc3RhdGljIGludCBkc2Ffc2lnbl9zZXR1cChE U0EgKmRzYSwgQk5fQ1RYICpjdHhfaW4sIEJJR05VTSAqKmtpbnZwLAorQEAgLTgzLDcgKzg2LDcg QEAgc3RhdGljIERTQV9NRVRIT0Qgb3BlbnNzbF9kc2FfbWV0aCA9IHsKKyAgICAgTlVMTCwgICAg ICAgICAgICAgICAgICAgICAgIC8qIGRzYV9ibl9tb2RfZXhwLCAqLworICAgICBkc2FfaW5pdCwK KyAgICAgZHNhX2ZpbmlzaCwKKy0gICAgMCwKKysgICAgRFNBX0ZMQUdfRklQU19NRVRIT0QsCisg ICAgIE5VTEwsCisgICAgIE5VTEwsCisgICAgIE5VTEwKK0BAIC0xNDAsNiArMTQzLDE5IEBAIHN0 YXRpYyBEU0FfU0lHICpkc2FfZG9fc2lnbihjb25zdCB1bnNpZ24KKyAgICAgRFNBX1NJRyAqcmV0 ID0gTlVMTDsKKyAgICAgaW50IG5vcmVkbyA9IDA7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUwor KyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgRklQU2VycihGSVBT X0ZfRFNBX0RPX1NJR04sIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICBy ZXR1cm4gTlVMTDsKKysgICAgfQorKworKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShkc2EtPmZs YWdzICYgRFNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrICAgICAgICAmJiAoQk5fbnVtX2JpdHMo ZHNhLT5wKSA8IE9QRU5TU0xfRFNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKKysgICAgICAg IERTQWVycihEU0FfRl9EU0FfRE9fU0lHTiwgRFNBX1JfS0VZX1NJWkVfVE9PX1NNQUxMKTsKKysg ICAgICAgIHJldHVybiBOVUxMOworKyAgICB9CisrI2VuZGlmCisrCisgICAgIEJOX2luaXQoJm0p OworICAgICBCTl9pbml0KCZ4cik7CisgCitAQCAtMzMwLDYgKzM0NiwxOCBAQCBzdGF0aWMgaW50 IGRzYV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQKKyAgICAgICAgIERTQWVycihEU0FfRl9EU0Ff RE9fVkVSSUZZLCBEU0FfUl9CQURfUV9WQUxVRSk7CisgICAgICAgICByZXR1cm4gLTE7CisgICAg IH0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgp KSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9EU0FfRE9fVkVSSUZZLCBGSVBTX1JfRklQU19T RUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgcmV0dXJuIC0xOworKyAgICB9CisrCisrICAgIGlm IChGSVBTX21vZGUoKSAmJiAhKGRzYS0+ZmxhZ3MgJiBEU0FfRkxBR19OT05fRklQU19BTExPVykK KysgICAgICAgICYmIChCTl9udW1fYml0cyhkc2EtPnApIDwgT1BFTlNTTF9EU0FfRklQU19NSU5f TU9EVUxVU19CSVRTKSkgeworKyAgICAgICAgRFNBZXJyKERTQV9GX0RTQV9ET19WRVJJRlksIERT QV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrICAgICAgICByZXR1cm4gLTE7CisrICAgIH0KKysj ZW5kaWYKKyAKKyAgICAgaWYgKEJOX251bV9iaXRzKGRzYS0+cCkgPiBPUEVOU1NMX0RTQV9NQVhf TU9EVUxVU19CSVRTKSB7CisgICAgICAgICBEU0FlcnIoRFNBX0ZfRFNBX0RPX1ZFUklGWSwgRFNB X1JfTU9EVUxVU19UT09fTEFSR0UpOworQEAgLTQxMCw2ICs0MzgsOSBAQCBzdGF0aWMgaW50IGRz YV9kb192ZXJpZnkoY29uc3QgdW5zaWduZWQKKyAKKyBzdGF0aWMgaW50IGRzYV9pbml0KERTQSAq ZHNhKQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIEZJUFNfc2VsZnRlc3RfY2hlY2so KTsKKysjZW5kaWYKKyAgICAgZHNhLT5mbGFncyB8PSBEU0FfRkxBR19DQUNIRV9NT05UX1A7Cisg ICAgIHJldHVybiAoMSk7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RzYS9k c2FfcG1ldGguYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9kc2EvZHNhX3BtZXRoLmMKKy0t LSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZHNhL2RzYV9wbWV0aC5jLmZpcHMJMjAxNi0wNS0wMyAx NTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZHNhL2Rz YV9wbWV0aC5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODIyMzIxMDE2ICswMjAwCitAQCAtMjUzLDcg KzI1Myw3IEBAIHN0YXRpYyBpbnQgcGtleV9kc2FfcGFyYW1nZW4oRVZQX1BLRVlfQ1QKKyAgICAg aWYgKCFkc2EpCisgICAgICAgICByZXR1cm4gMDsKKyAgICAgcmV0ID0gZHNhX2J1aWx0aW5fcGFy YW1nZW4oZHNhLCBkY3R4LT5uYml0cywgZGN0eC0+cWJpdHMsIGRjdHgtPnBtZCwKKy0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgcGNiKTsK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgcGNi KTsKKyAgICAgaWYgKHJldCkKKyAgICAgICAgIEVWUF9QS0VZX2Fzc2lnbl9EU0EocGtleSwgZHNh KTsKKyAgICAgZWxzZQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2RzYS9kc2F0ZXN0 LmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZHNhL2RzYXRlc3QuYworLS0tIG9wZW5zc2wt MS4wLjJoL2NyeXB0by9kc2EvZHNhdGVzdC5jLmZpcHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAw MDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZHNhL2RzYXRlc3QuYwkyMDE2 LTA1LTAzIDE2OjU3OjU4LjgyMjMyMTAxNiArMDIwMAorQEAgLTEwMCwzNiArMTAwLDQxIEBAIHN0 YXRpYyBpbnQgTVNfQ0FMTEJBQ0sgZHNhX2NiKGludCBwLCBpbnQKKyAgKiBQVUIgMTg2IGFuZCBh bHNvIGFwcGVhciBpbiBBcHBlbmRpeCA1IHRvIEZJUFMgUElCIDE4Ni0xCisgICovCisgc3RhdGlj IHVuc2lnbmVkIGNoYXIgc2VlZFsyMF0gPSB7CistICAgIDB4ZDUsIDB4MDEsIDB4NGUsIDB4NGIs IDB4NjAsIDB4ZWYsIDB4MmIsIDB4YTgsIDB4YjYsIDB4MjEsIDB4MWIsIDB4NDAsCistICAgIDB4 NjIsIDB4YmEsIDB4MzIsIDB4MjQsIDB4ZTAsIDB4NDIsIDB4N2QsIDB4ZDMsCisrICAgIDB4MDIs IDB4NDcsIDB4MTEsIDB4OTIsIDB4MTEsIDB4ODgsIDB4QzgsIDB4RkIsIDB4QUYsIDB4NDgsIDB4 NEMsIDB4NjIsCisrICAgIDB4REYsIDB4QTUsIDB4QkUsIDB4QTAsIDB4QTQsIDB4M0MsIDB4NTYs IDB4RTMsCisgfTsKKyAKKyBzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRfcFtdID0geworLSAgICAw eDhkLCAweGYyLCAweGE0LCAweDk0LCAweDQ5LCAweDIyLCAweDc2LCAweGFhLAorLSAgICAweDNk LCAweDI1LCAweDc1LCAweDliLCAweGIwLCAweDY4LCAweDY5LCAweGNiLAorLSAgICAweGVhLCAw eGMwLCAweGQ4LCAweDNhLCAweGZiLCAweDhkLCAweDBjLCAweGY3LAorLSAgICAweGNiLCAweGI4 LCAweDMyLCAweDRmLCAweDBkLCAweDc4LCAweDgyLCAweGU1LAorLSAgICAweGQwLCAweDc2LCAw eDJmLCAweGM1LCAweGI3LCAweDIxLCAweDBlLCAweGFmLAorLSAgICAweGMyLCAweGU5LCAweGFk LCAweGFjLCAweDMyLCAweGFiLCAweDdhLCAweGFjLAorLSAgICAweDQ5LCAweDY5LCAweDNkLCAw eGZiLCAweGY4LCAweDM3LCAweDI0LCAweGMyLAorLSAgICAweGVjLCAweDA3LCAweDM2LCAweGVl LCAweDMxLCAweGM4LCAweDAyLCAweDkxLAorKyAgICAweEFDLCAweENCLCAweDFFLCAweDYzLCAw eDYwLCAweDY5LCAweDBDLCAweEZCLCAweDA2LCAweDE5LCAweDY4LCAweDNFLAorKyAgICAweEE1 LCAweDAxLCAweDVBLCAweEEyLCAweDE1LCAweDVDLCAweEUyLCAweDk5LCAweDJELCAweEQ1LCAw eDMwLCAweDk5LAorKyAgICAweDdFLCAweDVGLCAweDhELCAweEUyLCAweEY3LCAweEM2LCAweDJF LCAweDhELCAweEEzLCAweDlGLCAweDU4LCAweEFELAorKyAgICAweEQ2LCAweEE5LCAweDdELCAw eDBFLCAweDBELCAweDk1LCAweDUzLCAweEE2LCAweDcxLCAweDNBLCAweERFLCAweEFCLAorKyAg ICAweEFDLCAweEU5LCAweEY0LCAweDM2LCAweDU1LCAweDlFLCAweEI5LCAweEQ2LCAweDkzLCAw eEJGLCAweEYzLCAweDE4LAorKyAgICAweDFDLCAweDE0LCAweDdCLCAweEE1LCAweDQyLCAweDJF LCAweENELCAweDAwLCAweEVCLCAweDM1LCAweDNCLCAweDFCLAorKyAgICAweEE4LCAweDUxLCAw eEJCLCAweEUxLCAweDU4LCAweDQyLCAweDg1LCAweDg0LCAweDIyLCAweEE3LCAweDk3LCAweDVF LAorKyAgICAweDk5LCAweDZGLCAweDM4LCAweDIwLCAweEJELCAweDlELCAweEI2LCAweEQ5LCAw eDMzLCAweDM3LCAweDJBLCAweEZELAorKyAgICAweEJCLCAweEQ0LCAweEJDLCAweDBDLCAweDJB LCAweDY3LCAweENCLCAweDlGLCAweEJCLCAweERGLCAweEY5LCAweDkzLAorKyAgICAweEFBLCAw eEQ2LCAweEYwLCAweEQ2LCAweDk1LCAweDBCLCAweDVELCAweDY1LCAweDE0LCAweEQwLCAweDE4 LCAweDlELAorKyAgICAweEM2LCAweEFGLCAweEYwLCAweEM2LCAweDM3LCAweDdDLCAweEYzLCAw eDVGLAorIH07CisgCisgc3RhdGljIHVuc2lnbmVkIGNoYXIgb3V0X3FbXSA9IHsKKy0gICAgMHhj NywgMHg3MywgMHgyMSwgMHg4YywgMHg3MywgMHg3ZSwgMHhjOCwgMHhlZSwKKy0gICAgMHg5OSwg MHgzYiwgMHg0ZiwgMHgyZCwgMHhlZCwgMHgzMCwgMHhmNCwgMHg4ZSwKKy0gICAgMHhkYSwgMHhj ZSwgMHg5MSwgMHg1ZiwKKysgICAgMHhFMywgMHg4RSwgMHg1RSwgMHg2RCwgMHhCRiwgMHgyQiwg MHg3OSwgMHhGOCwgMHhDNSwgMHg0QiwgMHg4OSwgMHg4QiwKKysgICAgMHhCQSwgMHgyRCwgMHg5 MSwgMHhDMywgMHg2QywgMHg4MCwgMHhBQywgMHg4NywKKyB9OworIAorIHN0YXRpYyB1bnNpZ25l ZCBjaGFyIG91dF9nW10gPSB7CistICAgIDB4NjIsIDB4NmQsIDB4MDIsIDB4NzgsIDB4MzksIDB4 ZWEsIDB4MGEsIDB4MTMsCistICAgIDB4NDEsIDB4MzEsIDB4NjMsIDB4YTUsIDB4NWIsIDB4NGMs IDB4YjUsIDB4MDAsCistICAgIDB4MjksIDB4OWQsIDB4NTUsIDB4MjIsIDB4OTUsIDB4NmMsIDB4 ZWYsIDB4Y2IsCistICAgIDB4M2IsIDB4ZmYsIDB4MTAsIDB4ZjMsIDB4OTksIDB4Y2UsIDB4MmMs IDB4MmUsCistICAgIDB4NzEsIDB4Y2IsIDB4OWQsIDB4ZTUsIDB4ZmEsIDB4MjQsIDB4YmEsIDB4 YmYsCistICAgIDB4NTgsIDB4ZTUsIDB4YjcsIDB4OTUsIDB4MjEsIDB4OTIsIDB4NWMsIDB4OWMs CistICAgIDB4YzQsIDB4MmUsIDB4OWYsIDB4NmYsIDB4NDYsIDB4NGIsIDB4MDgsIDB4OGMsCist ICAgIDB4YzUsIDB4NzIsIDB4YWYsIDB4NTMsIDB4ZTYsIDB4ZDcsIDB4ODgsIDB4MDIsCisrICAg IDB4NDIsIDB4NEEsIDB4MDQsIDB4NEUsIDB4NzksIDB4QjQsIDB4OTksIDB4N0YsIDB4RkQsIDB4 NTgsIDB4MzYsIDB4MkMsCisrICAgIDB4MUIsIDB4NUYsIDB4MTgsIDB4N0UsIDB4MEQsIDB4Q0Ms IDB4QUIsIDB4ODEsIDB4QzksIDB4NUQsIDB4MTAsIDB4Q0UsCisrICAgIDB4NEUsIDB4ODAsIDB4 N0UsIDB4NTgsIDB4QjQsIDB4MzQsIDB4M0YsIDB4QTcsIDB4NDUsIDB4QzcsIDB4QUEsIDB4MzYs CisrICAgIDB4MjQsIDB4NDIsIDB4QTksIDB4M0IsIDB4RTgsIDB4MEUsIDB4MDQsIDB4MDIsIDB4 MkQsIDB4RkIsIDB4QTYsIDB4MTMsCisrICAgIDB4QjksIDB4QjUsIDB4MTUsIDB4QTUsIDB4NTYs IDB4MDcsIDB4MzUsIDB4RTQsIDB4MDMsIDB4QjYsIDB4NzksIDB4N0MsCisrICAgIDB4NjIsIDB4 REQsIDB4REYsIDB4M0YsIDB4NzEsIDB4M0EsIDB4OUQsIDB4OEIsIDB4QzQsIDB4RjYsIDB4RTcs IDB4MUQsCisrICAgIDB4NTIsIDB4QTgsIDB4QTksIDB4NDMsIDB4MUQsIDB4MzMsIDB4NTEsIDB4 ODgsIDB4MzksIDB4QkQsIDB4NzMsIDB4RTksCisrICAgIDB4NUYsIDB4QkUsIDB4ODIsIDB4NDks IDB4MjcsIDB4RTYsIDB4QjUsIDB4NTMsIDB4QzEsIDB4MzgsIDB4QUMsIDB4MkYsCisrICAgIDB4 NkQsIDB4OTcsIDB4NkMsIDB4RUIsIDB4NjcsIDB4QzEsIDB4NUYsIDB4NjcsIDB4RjgsIDB4MzUs IDB4MDUsIDB4NUUsCisrICAgIDB4RDUsIDB4NjgsIDB4ODAsIDB4QUEsIDB4OTYsIDB4Q0EsIDB4 MEIsIDB4OEEsIDB4RTYsIDB4RjEsIDB4QjEsIDB4NDEsCisrICAgIDB4QzYsIDB4NzUsIDB4OTQs IDB4MEEsIDB4MEEsIDB4MkEsIDB4RkEsIDB4MjksCisgfTsKKyAKKyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzdHIxW10gPSAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiOworQEAgLTE2Miw3ICsx NjcsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgICAgIEJJT19wcmludGYo YmlvX2VyciwgInRlc3QgZ2VuZXJhdGlvbiBvZiBEU0EgcGFyYW1ldGVyc1xuIik7CisgCisgICAg IEJOX0dFTkNCX3NldCgmY2IsIGRzYV9jYiwgYmlvX2Vycik7CistICAgIGlmICgoKGRzYSA9IERT QV9uZXcoKSkgPT0gTlVMTCkgfHwgIURTQV9nZW5lcmF0ZV9wYXJhbWV0ZXJzX2V4KGRzYSwgNTEy LAorKyAgICBpZiAoKChkc2EgPSBEU0FfbmV3KCkpID09IE5VTEwpIHx8ICFEU0FfZ2VuZXJhdGVf cGFyYW1ldGVyc19leChkc2EsIDEwMjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZWQsIDIwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmY291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmgsICZjYikpCitAQCAtMTc2LDggKzE4MSw4IEBAIGlu dCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgQklPX3ByaW50ZihiaW9fZXJyLCAi XG5jb3VudGVyPSVkIGg9JWxkXG4iLCBjb3VudGVyLCBoKTsKKyAKKyAgICAgRFNBX3ByaW50KGJp b19lcnIsIGRzYSwgMCk7CistICAgIGlmIChjb3VudGVyICE9IDEwNSkgeworLSAgICAgICAgQklP X3ByaW50ZihiaW9fZXJyLCAiY291bnRlciBzaG91bGQgYmUgMTA1XG4iKTsKKysgICAgaWYgKGNv dW50ZXIgIT0gMjM5KSB7CisrICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsICJjb3VudGVyIHNo b3VsZCBiZSAyMzlcbiIpOworICAgICAgICAgZ290byBlbmQ7CisgICAgIH0KKyAgICAgaWYgKGgg IT0gMikgeworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2VuZ2luZS9lbmdfYWxsLmMu ZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZW5naW5lL2VuZ19hbGwuYworLS0tIG9wZW5zc2wt MS4wLjJoL2NyeXB0by9lbmdpbmUvZW5nX2FsbC5jLmZpcHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZW5naW5lL2VuZ19hbGwu YwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgyMjMyMTAxNiArMDIwMAorQEAgLTU5LDExICs1OSwyNSBA QAorIAorICNpbmNsdWRlICJjcnlwdGxpYi5oIgorICNpbmNsdWRlICJlbmdfaW50LmgiCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisg Cisgdm9pZCBFTkdJTkVfbG9hZF9idWlsdGluX2VuZ2luZXModm9pZCkKKyB7CisgICAgIC8qIFNv bWUgRU5HSU5FcyBuZWVkIHRoaXMgKi8KKyAgICAgT1BFTlNTTF9jcHVpZF9zZXR1cCgpOworKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKysgICAgaWYg KEZJUFNfbW9kZSgpKSB7CisrICAgICAgICAvKiBXZSBhbGxvdyBsb2FkaW5nIGR5bmFtaWMgZW5n aW5lIGFzIGEgdGhpcmQgcGFydHkKKysgICAgICAgICAgIGVuZ2luZSBtaWdodCBiZSBGSVBTIHZh bGlkYXRlZC4KKysgICAgICAgICAgIFVzZXIgaXMgZGlzYWxsb3dlZCB0byBsb2FkIG5vbi12YWxp ZGF0ZWQgZW5naW5lcworKyAgICAgICAgICAgYnkgc2VjdXJpdHkgcG9saWN5LiAqLworKyAgICAg ICAgRU5HSU5FX2xvYWRfZHluYW1pYygpOworKyAgICAgICAgcmV0dXJuOworKyAgICB9CisrI2Vu ZGlmCisgI2lmIDAKKyAgICAgLyoKKyAgICAgICogVGhlcmUncyBubyBsb25nZXIgYW55IG5lZWQg Zm9yIGFuICJvcGVuc3NsIiBFTkdJTkUgdW5sZXNzLCBvbmUgZGF5LCBpdAorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9jX2FsbGMuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0 by9ldnAvY19hbGxjLmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL2NfYWxsYy5jLmZp cHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4y aC9jcnlwdG8vZXZwL2NfYWxsYy5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODIzMzIxMDM5ICswMjAw CitAQCAtNjUsNiArNjUsMTAgQEAKKyB2b2lkIE9wZW5TU0xfYWRkX2FsbF9jaXBoZXJzKHZvaWQp CisgeworIAorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgT1BFTlNTTF9pbml0X2xpYnJhcnko KTsKKysgICAgaWYgKCFGSVBTX21vZGUoKSkgeworKyNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9O T19ERVMKKyAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19jZmIoKSk7CisgICAgIEVWUF9hZGRf Y2lwaGVyKEVWUF9kZXNfY2ZiMSgpKTsKK0BAIC0yMzgsNCArMjQyLDY0IEBAIHZvaWQgT3BlblNT TF9hZGRfYWxsX2NpcGhlcnModm9pZCkKKyAgICAgRVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fY2Ft ZWxsaWFfMjU2X2NiYywgIkNBTUVMTElBMjU2Iik7CisgICAgIEVWUF9hZGRfY2lwaGVyX2FsaWFz KFNOX2NhbWVsbGlhXzI1Nl9jYmMsICJjYW1lbGxpYTI1NiIpOworICNlbmRpZgorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysgICAgfSBlbHNlIHsKKysjIGlmbmRlZiBPUEVOU1NMX05PX0RFUworKyAg ICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGVfY2ZiKCkpOworKyAgICAgICAgRVZQX2Fk ZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NmYigpKTsKKysKKysgICAgICAgIEVWUF9hZGRfY2lwaGVy KEVWUF9kZXNfZWRlX29mYigpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9kZXNfZWRl M19vZmIoKSk7CisrCisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZV9jYmMoKSk7 CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOworKyAgICAgICAg RVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNfY2JjLCAiREVTMyIpOworKyAgICAgICAg RVZQX2FkZF9jaXBoZXJfYWxpYXMoU05fZGVzX2VkZTNfY2JjLCAiZGVzMyIpOworKworKyAgICAg ICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhl cihFVlBfZGVzX2VkZTMoKSk7CisrIyBlbmRpZgorKworKyMgaWZuZGVmIE9QRU5TU0xfTk9fQUVT CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9lY2IoKSk7CisrICAgICAgICBF VlBfYWRkX2NpcGhlcihFVlBfYWVzXzEyOF9jYmMoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhl cihFVlBfYWVzXzEyOF9jZmIoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzEy OF9jZmIxKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfY2ZiOCgpKTsK KysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X29mYigpKTsKKysgICAgICAgIEVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2N0cigpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMTI4X2djbSgpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4 X3h0cygpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X2NjbSgpKTsKKysg ICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTI4X3dyYXAoKSk7CisrICAgICAgICBFVlBf YWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTI4X2NiYywgIkFFUzEyOCIpOworKyAgICAgICAgRVZQ X2FkZF9jaXBoZXJfYWxpYXMoU05fYWVzXzEyOF9jYmMsICJhZXMxMjgiKTsKKysgICAgICAgIEVW UF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2VjYigpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVy KEVWUF9hZXNfMTkyX2NiYygpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTky X2NmYigpKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMTkyX2NmYjEoKSk7Cisr ICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzE5Ml9jZmI4KCkpOworKyAgICAgICAgRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfb2ZiKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18xOTJfY3RyKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJf Z2NtKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2NtKCkpOworKyAg ICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfd3JhcCgpKTsKKysgICAgICAgIEVWUF9h ZGRfY2lwaGVyX2FsaWFzKFNOX2Flc18xOTJfY2JjLCAiQUVTMTkyIik7CisrICAgICAgICBFVlBf YWRkX2NpcGhlcl9hbGlhcyhTTl9hZXNfMTkyX2NiYywgImFlczE5MiIpOworKyAgICAgICAgRVZQ X2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfZWNiKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIo RVZQX2Flc18yNTZfY2JjKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZf Y2ZiKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2ZiMSgpKTsKKysg ICAgICAgIEVWUF9hZGRfY2lwaGVyKEVWUF9hZXNfMjU2X2NmYjgoKSk7CisrICAgICAgICBFVlBf YWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9vZmIoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihF VlBfYWVzXzI1Nl9jdHIoKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9n Y20oKSk7CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl94dHMoKSk7CisrICAg ICAgICBFVlBfYWRkX2NpcGhlcihFVlBfYWVzXzI1Nl9jY20oKSk7CisrICAgICAgICBFVlBfYWRk X2NpcGhlcihFVlBfYWVzXzI1Nl93cmFwKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXJfYWxp YXMoU05fYWVzXzI1Nl9jYmMsICJBRVMyNTYiKTsKKysgICAgICAgIEVWUF9hZGRfY2lwaGVyX2Fs aWFzKFNOX2Flc18yNTZfY2JjLCAiYWVzMjU2Iik7CisrIyBlbmRpZgorKyAgICB9CisrI2VuZGlm CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9jX2FsbGQuYy5maXBzIG9w ZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvY19hbGxkLmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlw dG8vZXZwL2NfYWxsZC5jLmZpcHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAK KysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL2NfYWxsZC5jCTIwMTYtMDUtMDMgMTY6NTc6 NTguODIzMzIxMDM5ICswMjAwCitAQCAtNjQsNTEgKzY0LDgxIEBACisgCisgdm9pZCBPcGVuU1NM X2FkZF9hbGxfZGlnZXN0cyh2b2lkKQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIE9Q RU5TU0xfaW5pdF9saWJyYXJ5KCk7CisrICAgIGlmICghRklQU19tb2RlKCkpIHsKKysjZW5kaWYK KyAjaWZuZGVmIE9QRU5TU0xfTk9fTUQ0CistICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZDQoKSk7 CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfbWQ0KCkpOworICNlbmRpZgorICNpZm5kZWYg T1BFTlNTTF9OT19NRDUKKy0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX21kNSgpKTsKKy0gICAgRVZQ X2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCAic3NsMi1tZDUiKTsKKy0gICAgRVZQX2FkZF9kaWdl c3RfYWxpYXMoU05fbWQ1LCAic3NsMy1tZDUiKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVW UF9tZDUoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9tZDUsICJzc2wyLW1k NSIpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fbWQ1LCAic3NsMy1tZDUiKTsK KyAjZW5kaWYKKyAjaWYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEEpICYmICFkZWZpbmVkKE9QRU5T U0xfTk9fU0hBMCkKKy0gICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYSgpKTsKKysgICAgICAgIEVW UF9hZGRfZGlnZXN0KEVWUF9zaGEoKSk7CisgIyBpZm5kZWYgT1BFTlNTTF9OT19EU0EKKy0gICAg RVZQX2FkZF9kaWdlc3QoRVZQX2RzcygpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9k c3MoKSk7CisgIyBlbmRpZgorICNlbmRpZgorICNpZiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkg JiYgIWRlZmluZWQoT1BFTlNTTF9OT19TSEExKQorLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hh MSgpKTsKKy0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwgInNzbDMtc2hhMSIpOwor LSAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9zaGExV2l0aFJTQUVuY3J5cHRpb24sIFNOX3No YTFXaXRoUlNBKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGExKCkpOworKyAgICAg ICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMSwgInNzbDMtc2hhMSIpOworKyAgICAgICAg RVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fc2hhMVdpdGhSU0FFbmNyeXB0aW9uLCBTTl9zaGExV2l0 aFJTQSk7CisgIyBpZm5kZWYgT1BFTlNTTF9OT19EU0EKKy0gICAgRVZQX2FkZF9kaWdlc3QoRVZQ X2RzczEoKSk7CistICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCBTTl9k c2FXaXRoU0hBMV8yKTsKKy0gICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEs ICJEU1MxIik7CistICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCAiZHNz MSIpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEoKSk7CisrICAgICAgICBFVlBf YWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwgU05fZHNhV2l0aFNIQTFfMik7CisrICAg ICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwgIkRTUzEiKTsKKysgICAg ICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEExLCAiZHNzMSIpOworICMgZW5k aWYKKyAjIGlmbmRlZiBPUEVOU1NMX05PX0VDRFNBCistICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9l Y2RzYSgpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsKKyAjIGVuZGlm CisgI2VuZGlmCisgI2lmICFkZWZpbmVkKE9QRU5TU0xfTk9fTURDMikgJiYgIWRlZmluZWQoT1BF TlNTTF9OT19ERVMpCistICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9tZGMyKCkpOworKyAgICAgICAg RVZQX2FkZF9kaWdlc3QoRVZQX21kYzIoKSk7CisgI2VuZGlmCisgI2lmbmRlZiBPUEVOU1NMX05P X1JJUEVNRAorLSAgICBFVlBfYWRkX2RpZ2VzdChFVlBfcmlwZW1kMTYwKCkpOworLSAgICBFVlBf YWRkX2RpZ2VzdF9hbGlhcyhTTl9yaXBlbWQxNjAsICJyaXBlbWQiKTsKKy0gICAgRVZQX2FkZF9k aWdlc3RfYWxpYXMoU05fcmlwZW1kMTYwLCAicm1kMTYwIik7CisrICAgICAgICBFVlBfYWRkX2Rp Z2VzdChFVlBfcmlwZW1kMTYwKCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05f cmlwZW1kMTYwLCAicmlwZW1kIik7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9y aXBlbWQxNjAsICJybWQxNjAiKTsKKyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fU0hBMjU2 CistICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyMjQoKSk7CistICAgIEVWUF9hZGRfZGlnZXN0 KEVWUF9zaGEyNTYoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMjI0KCkpOwor KyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTI1NigpKTsKKyAjZW5kaWYKKyAjaWZuZGVm IE9QRU5TU0xfTk9fU0hBNTEyCistICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEzODQoKSk7Cist ICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGE1MTIoKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2Vz dChFVlBfc2hhMzg0KCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsK KyAjZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fV0hJUkxQT09MCistICAgIEVWUF9hZGRfZGln ZXN0KEVWUF93aGlybHBvb2woKSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfd2hpcmxw b29sKCkpOworKyNlbmRpZgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgfSBlbHNlIHsKKysj IGlmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTEp CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMSgpKTsKKysgICAgICAgIEVWUF9hZGRf ZGlnZXN0X2FsaWFzKFNOX3NoYTEsICJzc2wzLXNoYTEiKTsKKysgICAgICAgIEVWUF9hZGRfZGln ZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwgU05fc2hhMVdpdGhSU0EpOworKyMg IGlmbmRlZiBPUEVOU1NMX05PX0RTQQorKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX2RzczEo KSk7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwgU05fZHNh V2l0aFNIQTFfMik7CisrICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hB MSwgIkRTUzEiKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX2RzYVdpdGhTSEEx LCAiZHNzMSIpOworKyMgIGVuZGlmCisrIyAgaWZuZGVmIE9QRU5TU0xfTk9fRUNEU0EKKysgICAg ICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9lY2RzYSgpKTsKKysjICBlbmRpZgorKyMgZW5kaWYKKysj IGlmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgorKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3No YTIyNCgpKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7CisrIyBlbmRp ZgorKyMgaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChF VlBfc2hhMzg0KCkpOworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKKysj IGVuZGlmCisrICAgIH0KKyAjZW5kaWYKKyB9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlw dG8vZXZwL2RpZ2VzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9kaWdlc3QuYwor LS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvZGlnZXN0LmMuZmlwcwkyMDE2LTA1LTAzIDE1 OjQ0OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvZGln ZXN0LmMJMjAxNi0wNS0wMyAxNjo1OTo1NC4wOTAwNDI3ODEgKzAyMDAKK0BAIC0xNDMsMTggKzE0 Myw1NSBAQCBpbnQgRVZQX0RpZ2VzdEluaXQoRVZQX01EX0NUWCAqY3R4LCBjb25zCisgICAgIHJl dHVybiBFVlBfRGlnZXN0SW5pdF9leChjdHgsIHR5cGUsIE5VTEwpOworIH0KKyAKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhlc2UgaXMgdG8gdHJhcCBwcm9n cmFtcyB0aGF0IGF0dGVtcHQgdG8gdXNlIG5vbiBGSVBTCisrICogYWxnb3JpdGhtcyBpbiBGSVBT IG1vZGUgYW5kIGlnbm9yZSB0aGUgZXJyb3JzLgorKyAqLworKworK3N0YXRpYyBpbnQgYmFkX2lu aXQoRVZQX01EX0NUWCAqY3R4KQorK3sKKysgICAgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3Qg aW5pdCIpOworKyAgICByZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBiYWRfdXBkYXRlKEVW UF9NRF9DVFggKmN0eCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQorK3sKKysgICAg RklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgdXBkYXRlIik7CisrICAgIHJldHVybiAwOworK30K KysKKytzdGF0aWMgaW50IGJhZF9maW5hbChFVlBfTURfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIg Km1kKQorK3sKKysgICAgRklQU19FUlJPUl9JR05PUkVEKCJEaWdlc3QgRmluYWwiKTsKKysgICAg cmV0dXJuIDA7CisrfQorKworK3N0YXRpYyBjb25zdCBFVlBfTUQgYmFkX21kID0geworKyAgICAw LAorKyAgICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICBiYWRfaW5pdCwKKysgICAgYmFkX3Vw ZGF0ZSwKKysgICAgYmFkX2ZpbmFsLAorKyAgICBOVUxMLAorKyAgICBOVUxMLAorKyAgICBOVUxM LAorKyAgICAwLAorKyAgICB7MCwgMCwgMCwgMH0sCisrfTsKKysKKysjZW5kaWYKKysKKyBpbnQg RVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjb25zdCBFVlBfTUQgKnR5cGUsIEVO R0lORSAqaW1wbCkKKyB7CisgICAgIEVWUF9NRF9DVFhfY2xlYXJfZmxhZ3MoY3R4LCBFVlBfTURf Q1RYX0ZMQUdfQ0xFQU5FRCk7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICAvKiBJZiBGSVBT IG1vZGUgc3dpdGNoIHRvIGFwcHJvdmVkIGltcGxlbWVudGF0aW9uIGlmIHBvc3NpYmxlICovCist ICAgIGlmIChGSVBTX21vZGUoKSkgeworLSAgICAgICAgY29uc3QgRVZQX01EICpmaXBzbWQ7Cist ICAgICAgICBpZiAodHlwZSkgeworLSAgICAgICAgICAgIGZpcHNtZCA9IGV2cF9nZXRfZmlwc19t ZCh0eXBlKTsKKy0gICAgICAgICAgICBpZiAoZmlwc21kKQorLSAgICAgICAgICAgICAgICB0eXBl ID0gZmlwc21kOworLSAgICAgICAgfQorKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkg eworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRVZQX0RJR0VTVElOSVRfRVgsIEZJUFNfUl9GSVBT X1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICBjdHgtPmRpZ2VzdCA9ICZiYWRfbWQ7CisrICAg ICAgICByZXR1cm4gMDsKKyAgICAgfQorICNlbmRpZgorICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJ TkUKK0BAIC0yMTIsNiArMjQ5LDE2IEBAIGludCBFVlBfRGlnZXN0SW5pdF9leChFVlBfTURfQ1RY ICpjdHgsIGMKKyAgICAgfQorICNlbmRpZgorICAgICBpZiAoY3R4LT5kaWdlc3QgIT0gdHlwZSkg eworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgICAgIGlmIChGSVBTX21vZGUoKSkgeworKyAg ICAgICAgICAgIGlmICghKHR5cGUtPmZsYWdzICYgRVZQX01EX0ZMQUdfRklQUykKKysgICAgICAg ICAgICAgICAgJiYgIShjdHgtPmZsYWdzICYgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9X KSkgeworKyAgICAgICAgICAgICAgICBFVlBlcnIoRVZQX0ZfRVZQX0RJR0VTVElOSVRfRVgsIEVW UF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKysgICAgICAgICAgICAgICAgY3R4LT5kaWdlc3QgPSAm YmFkX21kOworKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICB9CisrICAg ICAgICB9CisrI2VuZGlmCisgICAgICAgICBpZiAoY3R4LT5kaWdlc3QgJiYgY3R4LT5kaWdlc3Qt PmN0eF9zaXplKSB7CisgICAgICAgICAgICAgT1BFTlNTTF9mcmVlKGN0eC0+bWRfZGF0YSk7Cisg ICAgICAgICAgICAgY3R4LT5tZF9kYXRhID0gTlVMTDsKK0BAIC0yMzgsMjUgKzI4NSwxNSBAQCBp bnQgRVZQX0RpZ2VzdEluaXRfZXgoRVZQX01EX0NUWCAqY3R4LCBjCisgICAgIH0KKyAgICAgaWYg KGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9fSU5JVCkKKyAgICAgICAgIHJldHVybiAx OworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgaWYgKEZJUFNfbW9kZSgpKSB7CistICAgICAg ICBpZiAoRklQU19kaWdlc3Rpbml0KGN0eCwgdHlwZSkpCistICAgICAgICAgICAgcmV0dXJuIDE7 CistICAgICAgICBPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKy0gICAgICAgIGN0eC0+bWRf ZGF0YSA9IE5VTEw7CistICAgICAgICByZXR1cm4gMDsKKy0gICAgfQorLSNlbmRpZgorICAgICBy ZXR1cm4gY3R4LT5kaWdlc3QtPmluaXQoY3R4KTsKKyB9CisgCisgaW50IEVWUF9EaWdlc3RVcGRh dGUoRVZQX01EX0NUWCAqY3R4LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpCisgewor ICNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgcmV0dXJuIEZJUFNfZGlnZXN0dXBkYXRlKGN0eCwg ZGF0YSwgY291bnQpOworLSNlbHNlCistICAgIHJldHVybiBjdHgtPnVwZGF0ZShjdHgsIGRhdGEs IGNvdW50KTsKKysgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOworICNlbmRpZgorKyAgICByZXR1 cm4gY3R4LT51cGRhdGUoY3R4LCBkYXRhLCBjb3VudCk7CisgfQorIAorIC8qIFRoZSBjYWxsZXIg Y2FuIGFzc3VtZSB0aGF0IHRoaXMgcmVtb3ZlcyBhbnkgc2VjcmV0IGRhdGEgZnJvbSB0aGUgY29u dGV4dCAqLworQEAgLTI3MSwxMSArMzA4LDExIEBAIGludCBFVlBfRGlnZXN0RmluYWwoRVZQX01E X0NUWCAqY3R4LCB1bnMKKyAvKiBUaGUgY2FsbGVyIGNhbiBhc3N1bWUgdGhhdCB0aGlzIHJlbW92 ZXMgYW55IHNlY3JldCBkYXRhIGZyb20gdGhlIGNvbnRleHQgKi8KKyBpbnQgRVZQX0RpZ2VzdEZp bmFsX2V4KEVWUF9NRF9DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqbWQsIHVuc2lnbmVkIGludCAq c2l6ZSkKKyB7CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICByZXR1cm4gRklQU19kaWdlc3Rm aW5hbChjdHgsIG1kLCBzaXplKTsKKy0jZWxzZQorICAgICBpbnQgcmV0OworIAorKyNpZmRlZiBP UEVOU1NMX0ZJUFMKKysgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOworKyNlbmRpZgorICAgICBP UEVOU1NMX2Fzc2VydChjdHgtPmRpZ2VzdC0+bWRfc2l6ZSA8PSBFVlBfTUFYX01EX1NJWkUpOwor ICAgICByZXQgPSBjdHgtPmRpZ2VzdC0+ZmluYWwoY3R4LCBtZCk7CisgICAgIGlmIChzaXplICE9 IE5VTEwpCitAQCAtMjg2LDcgKzMyMyw2IEBAIGludCBFVlBfRGlnZXN0RmluYWxfZXgoRVZQX01E X0NUWCAqY3R4LAorICAgICB9CisgICAgIG1lbXNldChjdHgtPm1kX2RhdGEsIDAsIGN0eC0+ZGln ZXN0LT5jdHhfc2l6ZSk7CisgICAgIHJldHVybiByZXQ7CistI2VuZGlmCisgfQorIAorIGludCBF VlBfTURfQ1RYX2NvcHkoRVZQX01EX0NUWCAqb3V0LCBjb25zdCBFVlBfTURfQ1RYICppbikKK0BA IC0zNzUsNyArNDExLDYgQEAgdm9pZCBFVlBfTURfQ1RYX2Rlc3Ryb3koRVZQX01EX0NUWCAqY3R4 KQorIC8qIFRoaXMgY2FsbCBmcmVlcyByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250 ZXh0ICovCisgaW50IEVWUF9NRF9DVFhfY2xlYW51cChFVlBfTURfQ1RYICpjdHgpCisgeworLSNp Zm5kZWYgT1BFTlNTTF9GSVBTCisgICAgIC8qCisgICAgICAqIERvbid0IGFzc3VtZSBjdHgtPm1k X2RhdGEgd2FzIGNsZWFuZWQgaW4gRVZQX0RpZ2VzdF9GaW5hbCwgYmVjYXVzZQorICAgICAgKiBz b21ldGltZXMgb25seSBjb3BpZXMgb2YgdGhlIGNvbnRleHQgYXJlIGV2ZXIgZmluYWxpc2VkLgor QEAgLTM4OCw3ICs0MjMsNiBAQCBpbnQgRVZQX01EX0NUWF9jbGVhbnVwKEVWUF9NRF9DVFggKmN0 eCkKKyAgICAgICAgIE9QRU5TU0xfY2xlYW5zZShjdHgtPm1kX2RhdGEsIGN0eC0+ZGlnZXN0LT5j dHhfc2l6ZSk7CisgICAgICAgICBPUEVOU1NMX2ZyZWUoY3R4LT5tZF9kYXRhKTsKKyAgICAgfQor LSNlbmRpZgorICAgICBpZiAoY3R4LT5wY3R4KQorICAgICAgICAgRVZQX1BLRVlfQ1RYX2ZyZWUo Y3R4LT5wY3R4KTsKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCitAQCAtMzk5LDkgKzQzMyw2 IEBAIGludCBFVlBfTURfQ1RYX2NsZWFudXAoRVZQX01EX0NUWCAqY3R4KQorICAgICAgICAgICov CisgICAgICAgICBFTkdJTkVfZmluaXNoKGN0eC0+ZW5naW5lKTsKKyAjZW5kaWYKKy0jaWZkZWYg T1BFTlNTTF9GSVBTCistICAgIEZJUFNfbWRfY3R4X2NsZWFudXAoY3R4KTsKKy0jZW5kaWYKKyAg ICAgbWVtc2V0KGN0eCwgJ1wwJywgc2l6ZW9mICpjdHgpOworIAorICAgICByZXR1cm4gMTsKK2Rp ZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvZV9hZXMuYy5maXBzIG9wZW5zc2wtMS4w LjJoL2NyeXB0by9ldnAvZV9hZXMuYworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvZV9h ZXMuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNz bC0xLjAuMmgvY3J5cHRvL2V2cC9lX2Flcy5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODIzMzIxMDM5 ICswMjAwCitAQCAtNjAsOSArNjAsNiBAQAorICMgaW5jbHVkZSAibW9kZXNfbGNsLmgiCisgIyBp bmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKyAKKy0jIHVuZGVmIEVWUF9DSVBIX0ZMQUdfRklQUwor LSMgZGVmaW5lIEVWUF9DSVBIX0ZMQUdfRklQUyAwCistCisgdHlwZWRlZiBzdHJ1Y3QgeworICAg ICB1bmlvbiB7CisgICAgICAgICBkb3VibGUgYWxpZ247CitAQCAtMTE1OSw2ICsxMTU2LDExIEBA IHN0YXRpYyBpbnQgYWVzX2djbV9jdHJsKEVWUF9DSVBIRVJfQ1RYICoKKyAgICAgY2FzZSBFVlBf Q1RSTF9HQ01fU0VUX0lWTEVOOgorICAgICAgICAgaWYgKGFyZyA8PSAwKQorICAgICAgICAgICAg IHJldHVybiAwOworKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgICAgICBpZiAoRklQU19tb2R1 bGVfbW9kZSgpICYmICEoYy0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKQor KyAgICAgICAgICAgICYmIGFyZyA8IDEyKQorKyAgICAgICAgICAgIHJldHVybiAwOworKyMgZW5k aWYKKyAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgSVYgaWYgbmVlZGVkICovCisgICAg ICAgICBpZiAoKGFyZyA+IEVWUF9NQVhfSVZfTEVOR1RIKSAmJiAoYXJnID4gZ2N0eC0+aXZsZW4p KSB7CisgICAgICAgICAgICAgaWYgKGdjdHgtPml2ICE9IGMtPml2KQorQEAgLTE3MjcsNiArMTcy OSwxNCBAQCBzdGF0aWMgaW50IGFlc194dHNfY2lwaGVyKEVWUF9DSVBIRVJfQ1RYCisgICAgICAg ICByZXR1cm4gMDsKKyAgICAgaWYgKCFvdXQgfHwgIWluIHx8IGxlbiA8IEFFU19CTE9DS19TSVpF KQorICAgICAgICAgcmV0dXJuIDA7CisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgLyogUmVx dWlyZW1lbnQgb2YgU1A4MDAtMzhFICovCisrICAgIGlmIChGSVBTX21vZHVsZV9tb2RlKCkgJiYg IShjdHgtPmZsYWdzICYgRVZQX0NJUEhfRkxBR19OT05fRklQU19BTExPVykgJiYKKysgICAgICAg IChsZW4gPiAoMVVMIDw8IDIwKSAqIDE2KSkgeworKyAgICAgICAgRVZQZXJyKEVWUF9GX0FFU19Y VFNfQ0lQSEVSLCBFVlBfUl9UT09fTEFSR0UpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0K KysjIGVuZGlmCisgICAgIGlmICh4Y3R4LT5zdHJlYW0pCisgICAgICAgICAoKnhjdHgtPnN0cmVh bSkgKGluLCBvdXQsIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeGN0eC0+eHRzLmtl eTEsIHhjdHgtPnh0cy5rZXkyLCBjdHgtPml2KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2Ny eXB0by9ldnAvZV9kZXMzLmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL2VfZGVzMy5j CistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9lX2RlczMuYy5maXBzCTIwMTYtMDUtMDMg MTU6NDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9l X2RlczMuYwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgyMzMyMTAzOSArMDIwMAorQEAgLTY1LDEwICs2 NSw2IEBACisgIyBpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorICMgaW5jbHVkZSA8b3BlbnNzbC9y YW5kLmg+CisgCistLyogQmxvY2sgdXNlIG9mIGltcGxlbWVudGF0aW9ucyBpbiBGSVBTIG1vZGUg Ki8KKy0jIHVuZGVmIEVWUF9DSVBIX0ZMQUdfRklQUworLSMgZGVmaW5lIEVWUF9DSVBIX0ZMQUdf RklQUyAgICAgIDAKKy0KKyB0eXBlZGVmIHN0cnVjdCB7CisgICAgIHVuaW9uIHsKKyAgICAgICAg IGRvdWJsZSBhbGlnbjsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvZV9udWxs LmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL2VfbnVsbC5jCistLS0gb3BlbnNzbC0x LjAuMmgvY3J5cHRvL2V2cC9lX251bGwuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9lX251bGwuYwkyMDE2LTA1 LTAzIDE2OjU3OjU4LjgyNDMyMTA2MyArMDIwMAorQEAgLTY4LDcgKzY4LDcgQEAgc3RhdGljIGlu dCBudWxsX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqYworIHN0YXRpYyBjb25zdCBFVlBfQ0lQSEVS IG5fY2lwaGVyID0geworICAgICBOSURfdW5kZWYsCisgICAgIDEsIDAsIDAsCistICAgIDAsCisr ICAgIEVWUF9DSVBIX0ZMQUdfRklQUywKKyAgICAgbnVsbF9pbml0X2tleSwKKyAgICAgbnVsbF9j aXBoZXIsCisgICAgIE5VTEwsCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL2V2 cF9lbmMuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvZXZwX2VuYy5jCistLS0gb3Bl bnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9ldnBfZW5jLmMuZmlwcwkyMDE2LTA1LTAzIDE1OjQ0OjQy LjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvZXZwX2VuYy5j CTIwMTYtMDUtMDMgMTY6NTc6NTguODI0MzIxMDYzICswMjAwCitAQCAtNjksMTYgKzY5LDczIEBA CisgI2VuZGlmCisgI2luY2x1ZGUgImV2cF9sb2NsLmgiCisgCistI2lmZGVmIE9QRU5TU0xfRklQ UworLSMgZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKSBGSVBTX2NpcGhlcihj dHgsIG91dCwgaW4sIGlubCkKKy0jZWxzZQorLSMgZGVmaW5lIE1fZG9fY2lwaGVyKGN0eCwgb3V0 LCBpbiwgaW5sKSBjdHgtPmNpcGhlci0+ZG9fY2lwaGVyKGN0eCwgb3V0LCBpbiwgaW5sKQorLSNl bmRpZgorKyNkZWZpbmUgTV9kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpIGN0eC0+Y2lwaGVy LT5kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpCisgCisgY29uc3QgY2hhciBFVlBfdmVyc2lv bltdID0gIkVWUCIgT1BFTlNTTF9WRVJTSU9OX1BURVhUOworIAorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysKKysvKiBUaGUgcHVycG9zZSBvZiB0aGVzZSBpcyB0byB0cmFwIHByb2dyYW1zIHRoYXQg YXR0ZW1wdCB0byB1c2Ugbm9uIEZJUFMKKysgKiBhbGdvcml0aG1zIGluIEZJUFMgbW9kZSBhbmQg aWdub3JlIHRoZSBlcnJvcnMuCisrICovCisrCisrc3RhdGljIGludCBiYWRfaW5pdChFVlBfQ0lQ SEVSX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisrICAgICAgICAgICAgICAg ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppdiwgaW50IGVuYykKKyt7CisrICAgIEZJUFNfRVJS T1JfSUdOT1JFRCgiQ2lwaGVyIGluaXQiKTsKKysgICAgcmV0dXJuIDA7CisrfQorKworK3N0YXRp YyBpbnQgYmFkX2RvX2NpcGhlcihFVlBfQ0lQSEVSX0NUWCAqY3R4LCB1bnNpZ25lZCBjaGFyICpv dXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1 bnNpZ25lZCBpbnQgaW5sKQorK3sKKysgICAgRklQU19FUlJPUl9JR05PUkVEKCJDaXBoZXIgdXBk YXRlIik7CisrICAgIHJldHVybiAwOworK30KKysKKysvKiBOQjogbm8gY2xlYW51cCBiZWNhdXNl IGl0IGlzIGFsbG93ZWQgYWZ0ZXIgZmFpbGVkIGluaXQgKi8KKysKKytzdGF0aWMgaW50IGJhZF9z ZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZUEUgKnR5cCkKKyt7CisrICAgIEZJ UFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIHNldF9hc24xIik7CisrICAgIHJldHVybiAwOworK30K KysKKytzdGF0aWMgaW50IGJhZF9nZXRfYXNuMShFVlBfQ0lQSEVSX0NUWCAqY3R4LCBBU04xX1RZ UEUgKnR5cCkKKyt7CisrICAgIEZJUFNfRVJST1JfSUdOT1JFRCgiQ2lwaGVyIGdldF9hc24xIik7 CisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0aWMgaW50IGJhZF9jdHJsKEVWUF9DSVBIRVJf Q1RYICpjdHgsIGludCB0eXBlLCBpbnQgYXJnLCB2b2lkICpwdHIpCisreworKyAgICBGSVBTX0VS Uk9SX0lHTk9SRUQoIkNpcGhlciBjdHJsIik7CisrICAgIHJldHVybiAwOworK30KKysKKytzdGF0 aWMgY29uc3QgRVZQX0NJUEhFUiBiYWRfY2lwaGVyID0geworKyAgICAwLAorKyAgICAwLAorKyAg ICAwLAorKyAgICAwLAorKyAgICAwLAorKyAgICBiYWRfaW5pdCwKKysgICAgYmFkX2RvX2NpcGhl ciwKKysgICAgTlVMTCwKKysgICAgMCwKKysgICAgYmFkX3NldF9hc24xLAorKyAgICBiYWRfZ2V0 X2FzbjEsCisrICAgIGJhZF9jdHJsLAorKyAgICBOVUxMCisrfTsKKysKKysjZW5kaWYKKysKKyB2 b2lkIEVWUF9DSVBIRVJfQ1RYX2luaXQoRVZQX0NJUEhFUl9DVFggKmN0eCkKKyB7CisrI2lmZGVm IE9QRU5TU0xfRklQUworKyAgICBGSVBTX3NlbGZ0ZXN0X2NoZWNrKCk7CisrI2VuZGlmCisgICAg IG1lbXNldChjdHgsIDAsIHNpemVvZihFVlBfQ0lQSEVSX0NUWCkpOworICAgICAvKiBjdHgtPmNp cGhlcj1OVUxMOyAqLworIH0KK0BAIC0xMTAsNiArMTY3LDEzIEBAIGludCBFVlBfQ2lwaGVySW5p dF9leChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAgICAgICAgICAgICBlbmMgPSAxOworICAgICAgICAg Y3R4LT5lbmNyeXB0ID0gZW5jOworICAgICB9CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBp ZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRVZQ X0NJUEhFUklOSVRfRVgsIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICBj dHgtPmNpcGhlciA9ICZiYWRfY2lwaGVyOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysj ZW5kaWYKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgICAgIC8qCisgICAgICAqIFdoZXRo ZXIgaXQncyBuaWNlIG9yIG5vdCwgIkluaXRzIiBjYW4gYmUgdXNlZCBvbiAiRmluYWwiJ2QgY29u dGV4dHMgc28KK0BAIC0xNjgsMTYgKzIzMiw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9leChFVlBf Q0lQSEVSX0NUWCAqY3QKKyAgICAgICAgICAgICBjdHgtPmVuZ2luZSA9IE5VTEw7CisgI2VuZGlm CisgCistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICAgICAgaWYgKEZJUFNfbW9kZSgpKSB7Cist ICAgICAgICAgICAgY29uc3QgRVZQX0NJUEhFUiAqZmNpcGhlcjsKKy0gICAgICAgICAgICBpZiAo Y2lwaGVyKQorLSAgICAgICAgICAgICAgICBmY2lwaGVyID0gZXZwX2dldF9maXBzX2NpcGhlcihj aXBoZXIpOworLSAgICAgICAgICAgIGlmIChmY2lwaGVyKQorLSAgICAgICAgICAgICAgICBjaXBo ZXIgPSBmY2lwaGVyOworLSAgICAgICAgICAgIHJldHVybiBGSVBTX2NpcGhlcmluaXQoY3R4LCBj aXBoZXIsIGtleSwgaXYsIGVuYyk7CistICAgICAgICB9CistI2VuZGlmCisgICAgICAgICBjdHgt PmNpcGhlciA9IGNpcGhlcjsKKyAgICAgICAgIGlmIChjdHgtPmNpcGhlci0+Y3R4X3NpemUpIHsK KyAgICAgICAgICAgICBjdHgtPmNpcGhlcl9kYXRhID0gT1BFTlNTTF9tYWxsb2MoY3R4LT5jaXBo ZXItPmN0eF9zaXplKTsKK0BAIC0yMDQsMTAgKzI1OCw2IEBAIGludCBFVlBfQ2lwaGVySW5pdF9l eChFVlBfQ0lQSEVSX0NUWCAqY3QKKyAjaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisgIHNraXBf dG9faW5pdDoKKyAjZW5kaWYKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGlmIChGSVBTX21v ZGUoKSkKKy0gICAgICAgIHJldHVybiBGSVBTX2NpcGhlcmluaXQoY3R4LCBjaXBoZXIsIGtleSwg aXYsIGVuYyk7CistI2VuZGlmCisgICAgIC8qIHdlIGFzc3VtZSBibG9jayBzaXplIGlzIGEgcG93 ZXIgb2YgMiBpbiAqY3J5cHRVcGRhdGUgKi8KKyAgICAgT1BFTlNTTF9hc3NlcnQoY3R4LT5jaXBo ZXItPmJsb2NrX3NpemUgPT0gMQorICAgICAgICAgICAgICAgICAgICB8fCBjdHgtPmNpcGhlci0+ YmxvY2tfc2l6ZSA9PSA4CitAQCAtMjUzLDYgKzMwMywxOSBAQCBpbnQgRVZQX0NpcGhlckluaXRf ZXgoRVZQX0NJUEhFUl9DVFggKmN0CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9Cisg ICAgIH0KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIC8qIEFmdGVyICdrZXknIGlzIHNldCBu byBmdXJ0aGVyIHBhcmFtZXRlcnMgY2hhbmdlcyBhcmUgcGVybWlzc2libGUuCisrICAgICAqIFNv IG9ubHkgY2hlY2sgZm9yIG5vbiBGSVBTIGVuYWJsaW5nIGF0IHRoaXMgcG9pbnQuCisrICAgICAq LworKyAgICBpZiAoa2V5ICYmIEZJUFNfbW9kZSgpKSB7CisrICAgICAgICBpZiAoIShjdHgtPmNp cGhlci0+ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX0ZJUFMpCisrICAgICAgICAgICAgJiAhKGN0eC0+ ZmxhZ3MgJiBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XKSkgeworKyAgICAgICAgICAgIEVW UGVycihFVlBfRl9FVlBfQ0lQSEVSSU5JVF9FWCwgRVZQX1JfRElTQUJMRURfRk9SX0ZJUFMpOwor KyAgICAgICAgICAgIGN0eC0+Y2lwaGVyID0gJmJhZF9jaXBoZXI7CisrICAgICAgICAgICAgcmV0 dXJuIDA7CisrICAgICAgICB9CisrICAgIH0KKysjZW5kaWYKKyAKKyAgICAgaWYgKGtleSB8fCAo Y3R4LT5jaXBoZXItPmZsYWdzICYgRVZQX0NJUEhfQUxXQVlTX0NBTExfSU5JVCkpIHsKKyAgICAg ICAgIGlmICghY3R4LT5jaXBoZXItPmluaXQoY3R4LCBrZXksIGl2LCBlbmMpKQorQEAgLTU1NCw3 ICs2MTcsNiBAQCB2b2lkIEVWUF9DSVBIRVJfQ1RYX2ZyZWUoRVZQX0NJUEhFUl9DVFgKKyAKKyBp bnQgRVZQX0NJUEhFUl9DVFhfY2xlYW51cChFVlBfQ0lQSEVSX0NUWCAqYykKKyB7CistI2lmbmRl ZiBPUEVOU1NMX0ZJUFMKKyAgICAgaWYgKGMtPmNpcGhlciAhPSBOVUxMKSB7CisgICAgICAgICBp ZiAoYy0+Y2lwaGVyLT5jbGVhbnVwICYmICFjLT5jaXBoZXItPmNsZWFudXAoYykpCisgICAgICAg ICAgICAgcmV0dXJuIDA7CitAQCAtNTY0LDcgKzYyNiw2IEBAIGludCBFVlBfQ0lQSEVSX0NUWF9j bGVhbnVwKEVWUF9DSVBIRVJfQ1QKKyAgICAgfQorICAgICBpZiAoYy0+Y2lwaGVyX2RhdGEpCisg ICAgICAgICBPUEVOU1NMX2ZyZWUoYy0+Y2lwaGVyX2RhdGEpOworLSNlbmRpZgorICNpZm5kZWYg T1BFTlNTTF9OT19FTkdJTkUKKyAgICAgaWYgKGMtPmVuZ2luZSkKKyAgICAgICAgIC8qCitAQCAt NTczLDkgKzYzNCw2IEBAIGludCBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKEVWUF9DSVBIRVJfQ1QK KyAgICAgICAgICAqLworICAgICAgICAgRU5HSU5FX2ZpbmlzaChjLT5lbmdpbmUpOworICNlbmRp ZgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgRklQU19jaXBoZXJfY3R4X2NsZWFudXAoYyk7 CistI2VuZGlmCisgICAgIG1lbXNldChjLCAwLCBzaXplb2YoRVZQX0NJUEhFUl9DVFgpKTsKKyAg ICAgcmV0dXJuIDE7CisgfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9ldnAu aC5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvZXZwLmgKKy0tLSBvcGVuc3NsLTEuMC4y aC9jcnlwdG8vZXZwL2V2cC5oLmZpcHMJMjAxNi0wNS0wMyAxNjo1Nzo1OC42OTAzMTc4OTkgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL2V2cC5oCTIwMTYtMDUtMDMgMTY6NTc6 NTguODI0MzIxMDYzICswMjAwCitAQCAtMTIyLDYgKzEyMiwxMCBAQAorIGV4dGVybiAiQyIgewor ICNlbmRpZgorIAorKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrIyAgaW5jbHVkZSA8b3BlbnNzbC9m aXBzLmg+CisrIyBlbmRpZgorKworIC8qCisgICogVHlwZSBuZWVkcyB0byBiZSBhIGJpdCBmaWVs ZCBTdWItdHlwZSBuZWVkcyB0byBiZSBmb3IgdmFyaWF0aW9ucyBvbiB0aGUKKyAgKiBtZXRob2Qs IGFzIGluLCBjYW4gaXQgZG8gYXJiaXRyYXJ5IGVuY3J5cHRpb24uLi4uCitAQCAtMjg1LDExICsy ODksNiBAQCBzdHJ1Y3QgZW52X21kX2N0eF9zdCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKiBjbGVhbmVkICovCisgIyBkZWZpbmUgRVZQX01EX0NU WF9GTEFHX1JFVVNFICAgICAgICAgICAweDAwMDQvKiBEb24ndCBmcmVlIHVwIGN0eC0+bWRfZGF0 YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW4g RVZQX01EX0NUWF9jbGVhbnVwICovCistLyoKKy0gKiBGSVBTIGFuZCBwYWQgb3B0aW9ucyBhcmUg aWdub3JlZCBpbiAxLjAuMCwgZGVmaW5pdGlvbnMgYXJlIGhlcmUgc28gd2UKKy0gKiBkb24ndCBh Y2NpZGVudGFsbHkgcmV1c2UgdGhlIHZhbHVlcyBmb3Igb3RoZXIgcHVycG9zZXMuCistICovCist CisgIyBkZWZpbmUgRVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XICAweDAwMDgvKiBBbGxv dyB1c2Ugb2Ygbm9uIEZJUFMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqIGRpZ2VzdCBpbiBGSVBTIG1vZGUgKi8KKyAKK0BAIC0zMDIsNiArMzAxLDEw IEBAIHN0cnVjdCBlbnZfbWRfY3R4X3N0IHsKKyAjIGRlZmluZSBFVlBfTURfQ1RYX0ZMQUdfUEFE X1BLQ1MxICAgICAgIDB4MDAvKiBQS0NTIzEgdjEuNSBtb2RlICovCisgIyBkZWZpbmUgRVZQX01E X0NUWF9GTEFHX1BBRF9YOTMxICAgICAgICAweDEwLyogWDkuMzEgbW9kZSAqLworICMgZGVmaW5l IEVWUF9NRF9DVFhfRkxBR19QQURfUFNTICAgICAgICAgMHgyMC8qIFBTUyBtb2RlICovCisrIyBk ZWZpbmUgTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQoY3R4KSBcCisrICAgICAgICAgICAgICAg ICgoY3R4LT5mbGFncz4+MTYpICYweEZGRkYpIC8qIHNlZWQgbGVuZ3RoICovCisrIyBkZWZpbmUg RVZQX01EX0NUWF9GTEFHX1BTU19NRExFTiAgICAgICAweEZGRkYvKiBzYWx0IGxlbiBzYW1lIGFz IGRpZ2VzdCAqLworKyMgZGVmaW5lIEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQyAgICAgICAgMHhG RkZFLyogc2FsdCBtYXggb3IgYXV0byByZWNvdmVyZWQgKi8KKyAKKyAjIGRlZmluZSBFVlBfTURf Q1RYX0ZMQUdfTk9fSU5JVCAgICAgICAgIDB4MDEwMC8qIERvbid0IGluaXRpYWxpemUgbWRfZGF0 YSAqLworIAorQEAgLTM2MywxNSArMzY2LDE1IEBAIHN0cnVjdCBldnBfY2lwaGVyX3N0IHsKKyAv KiBjaXBoZXIgaGFuZGxlcyByYW5kb20ga2V5IGdlbmVyYXRpb24gKi8KKyAjIGRlZmluZSAgICAg ICAgIEVWUF9DSVBIX1JBTkRfS0VZICAgICAgICAgICAgICAgMHgyMDAKKyAvKiBjaXBoZXIgaGFz IGl0cyBvd24gYWRkaXRpb25hbCBjb3B5aW5nIGxvZ2ljICovCistIyBkZWZpbmUgICAgICAgICBF VlBfQ0lQSF9DVVNUT01fQ09QWSAgICAgICAgICAgIDB4NDAwCisrIyBkZWZpbmUgICAgICAgICBF VlBfQ0lQSF9DVVNUT01fQ09QWSAgICAgICAgICAgIDB4NDAwMAorIC8qIEFsbG93IHVzZSBkZWZh dWx0IEFTTjEgZ2V0L3NldCBpdiAqLworICMgZGVmaW5lICAgICAgICAgRVZQX0NJUEhfRkxBR19E RUZBVUxUX0FTTjEgICAgICAweDEwMDAKKyAvKiBCdWZmZXIgbGVuZ3RoIGluIGJpdHMgbm90IGJ5 dGVzOiBDRkIxIG1vZGUgb25seSAqLworICMgZGVmaW5lICAgICAgICAgRVZQX0NJUEhfRkxBR19M RU5HVEhfQklUUyAgICAgICAweDIwMDAKKyAvKiBOb3RlIGlmIHN1aXRhYmxlIGZvciB1c2UgaW4g RklQUyBtb2RlICovCistIyBkZWZpbmUgICAgICAgICBFVlBfQ0lQSF9GTEFHX0ZJUFMgICAgICAg ICAgICAgIDB4NDAwMAorKyMgZGVmaW5lICAgICAgICAgRVZQX0NJUEhfRkxBR19GSVBTICAgICAg ICAgICAgICAweDQwMAorIC8qIEFsbG93IG5vbiBGSVBTIGNpcGhlciBpbiBGSVBTIG1vZGUgKi8K Ky0jIGRlZmluZSAgICAgICAgIEVWUF9DSVBIX0ZMQUdfTk9OX0ZJUFNfQUxMT1cgICAgMHg4MDAw CisrIyBkZWZpbmUgICAgICAgICBFVlBfQ0lQSF9GTEFHX05PTl9GSVBTX0FMTE9XICAgIDB4ODAw CisgLyoKKyAgKiBDaXBoZXIgaGFuZGxlcyBhbnkgYW5kIGFsbCBwYWRkaW5nIGxvZ2ljIGFzIHdl bGwgYXMgZmluYWxpc2F0aW9uLgorICAqLworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRv L2V2cC9ldnBfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL2V2cF9saWIuYwor LS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvZXZwX2xpYi5jLmZpcHMJMjAxNi0wNS0wMyAx NTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL2V2 cF9saWIuYwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgyNDMyMTA2MyArMDIwMAorQEAgLTYwLDEwICs2 MCw2IEBACisgI2luY2x1ZGUgImNyeXB0bGliLmgiCisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+ CisgI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0j IGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorLSMgaW5jbHVkZSAiZXZwX2xvY2wuaCIKKy0jZW5k aWYKKyAKKyBpbnQgRVZQX0NJUEhFUl9wYXJhbV90b19hc24xKEVWUF9DSVBIRVJfQ1RYICpjLCBB U04xX1RZUEUgKnR5cGUpCisgeworQEAgLTIyNCw2ICsyMjAsOSBAQCBpbnQgRVZQX0NJUEhFUl9D VFhfYmxvY2tfc2l6ZShjb25zdCBFVlBfCisgaW50IEVWUF9DaXBoZXIoRVZQX0NJUEhFUl9DVFgg KmN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sKQorIHsKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr ICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjZW5kaWYKKyAgICAgcmV0dXJuIGN0eC0+Y2lw aGVyLT5kb19jaXBoZXIoY3R4LCBvdXQsIGluLCBpbmwpOworIH0KKyAKK0BAIC0yMzQsMjIgKzIz MywxMiBAQCBjb25zdCBFVlBfQ0lQSEVSICpFVlBfQ0lQSEVSX0NUWF9jaXBoZXIoCisgCisgdW5z aWduZWQgbG9uZyBFVlBfQ0lQSEVSX2ZsYWdzKGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcikKKyB7 CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBjb25zdCBFVlBfQ0lQSEVSICpmY2lwaGVyOwor LSAgICBmY2lwaGVyID0gZXZwX2dldF9maXBzX2NpcGhlcihjaXBoZXIpOworLSAgICBpZiAoZmNp cGhlciAmJiBmY2lwaGVyLT5mbGFncyAmIEVWUF9DSVBIX0ZMQUdfRklQUykKKy0gICAgICAgIHJl dHVybiBjaXBoZXItPmZsYWdzIHwgRVZQX0NJUEhfRkxBR19GSVBTOworLSNlbmRpZgorICAgICBy ZXR1cm4gY2lwaGVyLT5mbGFnczsKKyB9CisgCisgdW5zaWduZWQgbG9uZyBFVlBfQ0lQSEVSX0NU WF9mbGFncyhjb25zdCBFVlBfQ0lQSEVSX0NUWCAqY3R4KQorIHsKKy0jaWZkZWYgT1BFTlNTTF9G SVBTCistICAgIHJldHVybiBFVlBfQ0lQSEVSX2ZsYWdzKGN0eC0+Y2lwaGVyKTsKKy0jZWxzZQor ICAgICByZXR1cm4gY3R4LT5jaXBoZXItPmZsYWdzOworLSNlbmRpZgorIH0KKyAKKyB2b2lkICpF VlBfQ0lQSEVSX0NUWF9nZXRfYXBwX2RhdGEoY29uc3QgRVZQX0NJUEhFUl9DVFggKmN0eCkKK0BA IC0zMTYsNDAgKzMwNSw4IEBAIGludCBFVlBfTURfc2l6ZShjb25zdCBFVlBfTUQgKm1kKQorICAg ICByZXR1cm4gbWQtPm1kX3NpemU7CisgfQorIAorLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0KKy1j b25zdCBFVlBfTUQgKmV2cF9nZXRfZmlwc19tZChjb25zdCBFVlBfTUQgKm1kKQorLXsKKy0gICAg aW50IG5pZCA9IEVWUF9NRF90eXBlKG1kKTsKKy0gICAgaWYgKG5pZCA9PSBOSURfZHNhKQorLSAg ICAgICAgcmV0dXJuIEZJUFNfZXZwX2RzczEoKTsKKy0gICAgZWxzZSBpZiAobmlkID09IE5JRF9k c2FXaXRoU0hBKQorLSAgICAgICAgcmV0dXJuIEZJUFNfZXZwX2RzcygpOworLSAgICBlbHNlIGlm IChuaWQgPT0gTklEX2VjZHNhX3dpdGhfU0hBMSkKKy0gICAgICAgIHJldHVybiBGSVBTX2V2cF9l Y2RzYSgpOworLSAgICBlbHNlCistICAgICAgICByZXR1cm4gRklQU19nZXRfZGlnZXN0YnluaWQo bmlkKTsKKy19CistCistY29uc3QgRVZQX0NJUEhFUiAqZXZwX2dldF9maXBzX2NpcGhlcihjb25z dCBFVlBfQ0lQSEVSICpjaXBoZXIpCisteworLSAgICBpbnQgbmlkID0gY2lwaGVyLT5uaWQ7Cist ICAgIGlmIChuaWQgPT0gTklEX3VuZGVmKQorLSAgICAgICAgcmV0dXJuIEZJUFNfZXZwX2VuY19u dWxsKCk7CistICAgIGVsc2UKKy0gICAgICAgIHJldHVybiBGSVBTX2dldF9jaXBoZXJieW5pZChu aWQpOworLX0KKy0KKy0jZW5kaWYKKy0KKyB1bnNpZ25lZCBsb25nIEVWUF9NRF9mbGFncyhjb25z dCBFVlBfTUQgKm1kKQorIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGNvbnN0IEVWUF9N RCAqZm1kOworLSAgICBmbWQgPSBldnBfZ2V0X2ZpcHNfbWQobWQpOworLSAgICBpZiAoZm1kICYm IGZtZC0+ZmxhZ3MgJiBFVlBfTURfRkxBR19GSVBTKQorLSAgICAgICAgcmV0dXJuIG1kLT5mbGFn cyB8IEVWUF9NRF9GTEFHX0ZJUFM7CistI2VuZGlmCisgICAgIHJldHVybiBtZC0+ZmxhZ3M7Cisg fQorIAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMg b3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9ldnBfbG9jbC5oCistLS0gb3BlbnNzbC0xLjAuMmgv Y3J5cHRvL2V2cC9ldnBfbG9jbC5oLmZpcHMJMjAxNi0wNS0wMyAxNjo1Nzo1OC42ODQzMTc3NTcg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL2V2cF9sb2NsLmgJMjAxNi0wNS0w MyAxNjo1Nzo1OC44MjQzMjEwNjMgKzAyMDAKK0BAIC0yNTgsMTAgKzI1OCw4IEBAIGNvbnN0IEVW UF9DSVBIRVIgKkVWUF8jI2NuYW1lIyNfZWNiKHZvaWQKKyAgICAgICAgIEJMT0NLX0NJUEhFUl9m dW5jX2NmYihjaXBoZXIjI18jI2tleXNpemUsY3ByZWZpeCxjYml0cyxrc3RydWN0LGtzY2hlZCkg XAorICAgICAgICAgQkxPQ0tfQ0lQSEVSX2RlZl9jZmIoY2lwaGVyIyNfIyNrZXlzaXplLGtzdHJ1 Y3QsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JRF8jI2NpcGhlciMjXyMja2V5 c2l6ZSwga2V5c2l6ZS84LCBpdl9sZW4sIGNiaXRzLCBcCistICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwLCBjaXBoZXIjI19pbml0X2tleSwgTlVMTCwgXAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRVZQX0NJUEhFUl9zZXRfYXNuMV9pdiwgXAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRVZQX0NJUEhFUl9nZXRfYXNuMV9pdiwgXAorLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCkKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9DSVBI X0ZMQUdfREVGQVVMVF9BU04xLCBcCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBo ZXIjI19pbml0X2tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkKKyAKKyBzdHJ1Y3QgZXZwX3Br ZXlfY3R4X3N0IHsKKyAgICAgLyogTWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9wZXJhdGlv biAqLworQEAgLTM1NSwxMSArMzUzLDYgQEAgY29uc3QgRVZQX0NJUEhFUiAqZXZwX2dldF9maXBz X2NpcGhlcihjbworICMgZGVmaW5lIE1EMl9Jbml0ICAgICAgICBwcml2YXRlX01EMl9Jbml0Cisg IyBkZWZpbmUgTURDMl9Jbml0ICAgICAgIHByaXZhdGVfTURDMl9Jbml0CisgIyBkZWZpbmUgU0hB X0luaXQgICAgICAgIHByaXZhdGVfU0hBX0luaXQKKy0jIGRlZmluZSBTSEExX0luaXQgICAgICAg cHJpdmF0ZV9TSEExX0luaXQKKy0jIGRlZmluZSBTSEEyMjRfSW5pdCAgICAgcHJpdmF0ZV9TSEEy MjRfSW5pdAorLSMgZGVmaW5lIFNIQTI1Nl9Jbml0ICAgICBwcml2YXRlX1NIQTI1Nl9Jbml0Cist IyBkZWZpbmUgU0hBMzg0X0luaXQgICAgIHByaXZhdGVfU0hBMzg0X0luaXQKKy0jIGRlZmluZSBT SEE1MTJfSW5pdCAgICAgcHJpdmF0ZV9TSEE1MTJfSW5pdAorIAorICMgZGVmaW5lIEJGX3NldF9r ZXkgICAgICBwcml2YXRlX0JGX3NldF9rZXkKKyAjIGRlZmluZSBDQVNUX3NldF9rZXkgICAgcHJp dmF0ZV9DQVNUX3NldF9rZXkKK0BAIC0zNjcsNyArMzYwLDYgQEAgY29uc3QgRVZQX0NJUEhFUiAq ZXZwX2dldF9maXBzX2NpcGhlcihjbworICMgZGVmaW5lIFNFRURfc2V0X2tleSAgICBwcml2YXRl X1NFRURfc2V0X2tleQorICMgZGVmaW5lIFJDMl9zZXRfa2V5ICAgICBwcml2YXRlX1JDMl9zZXRf a2V5CisgIyBkZWZpbmUgUkM0X3NldF9rZXkgICAgIHByaXZhdGVfUkM0X3NldF9rZXkKKy0jIGRl ZmluZSBERVNfc2V0X2tleV91bmNoZWNrZWQgICBwcml2YXRlX0RFU19zZXRfa2V5X3VuY2hlY2tl ZAorICMgZGVmaW5lIENhbWVsbGlhX3NldF9rZXkgICAgICAgIHByaXZhdGVfQ2FtZWxsaWFfc2V0 X2tleQorIAorICNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9tX2Rz cy5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9tX2Rzcy5jCistLS0gb3BlbnNzbC0x LjAuMmgvY3J5cHRvL2V2cC9tX2Rzcy5jLmZpcHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAw MDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL21fZHNzLmMJMjAxNi0wNS0w MyAxNjo1Nzo1OC44MjUzMjEwODYgKzAyMDAKK0BAIC04Niw3ICs4Niw3IEBAIHN0YXRpYyBjb25z dCBFVlBfTUQgZHNhX21kID0geworICAgICBOSURfZHNhV2l0aFNIQSwKKyAgICAgTklEX2RzYVdp dGhTSEEsCisgICAgIFNIQV9ESUdFU1RfTEVOR1RILAorLSAgICBFVlBfTURfRkxBR19QS0VZX0RJ R0VTVCwKKysgICAgRVZQX01EX0ZMQUdfUEtFWV9ESUdFU1QgfCBFVlBfTURfRkxBR19GSVBTLAor ICAgICBpbml0LAorICAgICB1cGRhdGUsCisgICAgIGZpbmFsLAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmgvY3J5cHRvL2V2cC9tX2RzczEuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAv bV9kc3MxLmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL21fZHNzMS5jLmZpcHMJMjAx Ni0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlw dG8vZXZwL21fZHNzMS5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODI1MzIxMDg2ICswMjAwCitAQCAt ODcsNyArODcsNyBAQCBzdGF0aWMgY29uc3QgRVZQX01EIGRzczFfbWQgPSB7CisgICAgIE5JRF9k c2EsCisgICAgIE5JRF9kc2FXaXRoU0hBMSwKKyAgICAgU0hBX0RJR0VTVF9MRU5HVEgsCistICAg IEVWUF9NRF9GTEFHX1BLRVlfRElHRVNULAorKyAgICBFVlBfTURfRkxBR19QS0VZX0RJR0VTVCB8 IEVWUF9NRF9GTEFHX0ZJUFMsCisgICAgIGluaXQsCisgICAgIHVwZGF0ZSwKKyAgICAgZmluYWws CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL21fbWQyLmMuZmlwcyBvcGVuc3Ns LTEuMC4yaC9jcnlwdG8vZXZwL21fbWQyLmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZw L21fbWQyLmMuZmlwcwkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvbV9tZDIuYwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgyNTMy MTA4NiArMDIwMAorQEAgLTY4LDYgKzY4LDcgQEAKKyAjIGlmbmRlZiBPUEVOU1NMX05PX1JTQQor ICMgIGluY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgIyBlbmRpZgorKyMgaW5jbHVkZSAiZXZwX2xv Y2wuaCIKKyAKKyBzdGF0aWMgaW50IGluaXQoRVZQX01EX0NUWCAqY3R4KQorIHsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjJoL2NyeXB0by9ldnAvbV9zaGExLmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9j cnlwdG8vZXZwL21fc2hhMS5jCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9tX3NoYTEu Yy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0x LjAuMmgvY3J5cHRvL2V2cC9tX3NoYTEuYwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgyNTMyMTA4NiAr MDIwMAorQEAgLTg3LDcgKzg3LDggQEAgc3RhdGljIGNvbnN0IEVWUF9NRCBzaGExX21kID0gewor ICAgICBOSURfc2hhMSwKKyAgICAgTklEX3NoYTFXaXRoUlNBRW5jcnlwdGlvbiwKKyAgICAgU0hB X0RJR0VTVF9MRU5HVEgsCistICAgIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8 IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCwKKysgICAgRVZQX01EX0ZMQUdfUEtFWV9NRVRI T0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5UIHwKKysgICAgICAgIEVW UF9NRF9GTEFHX0ZJUFMsCisgICAgIGluaXQsCisgICAgIHVwZGF0ZSwKKyAgICAgZmluYWwsCitA QCAtMTM0LDcgKzEzNSw4IEBAIHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhMjI0X21kID0geworICAg ICBOSURfc2hhMjI0LAorICAgICBOSURfc2hhMjI0V2l0aFJTQUVuY3J5cHRpb24sCisgICAgIFNI QTIyNF9ESUdFU1RfTEVOR1RILAorLSAgICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRV UkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNFTlQsCisrICAgIEVWUF9NRF9GTEFHX1BLRVlf TUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCB8CisrICAgICAg ICBFVlBfTURfRkxBR19GSVBTLAorICAgICBpbml0MjI0LAorICAgICB1cGRhdGUyNTYsCisgICAg IGZpbmFsMjU2LAorQEAgLTE1NCw3ICsxNTYsOCBAQCBzdGF0aWMgY29uc3QgRVZQX01EIHNoYTI1 Nl9tZCA9IHsKKyAgICAgTklEX3NoYTI1NiwKKyAgICAgTklEX3NoYTI1NldpdGhSU0FFbmNyeXB0 aW9uLAorICAgICBTSEEyNTZfRElHRVNUX0xFTkdUSCwKKy0gICAgRVZQX01EX0ZMQUdfUEtFWV9N RVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdfRElHQUxHSURfQUJTRU5ULAorKyAgICBFVlBf TURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUgfCBFVlBfTURfRkxBR19ESUdBTEdJRF9BQlNF TlQgfAorKyAgICAgICAgRVZQX01EX0ZMQUdfRklQUywKKyAgICAgaW5pdDI1NiwKKyAgICAgdXBk YXRlMjU2LAorICAgICBmaW5hbDI1NiwKK0BAIC0xOTcsNyArMjAwLDggQEAgc3RhdGljIGNvbnN0 IEVWUF9NRCBzaGEzODRfbWQgPSB7CisgICAgIE5JRF9zaGEzODQsCisgICAgIE5JRF9zaGEzODRX aXRoUlNBRW5jcnlwdGlvbiwKKyAgICAgU0hBMzg0X0RJR0VTVF9MRU5HVEgsCistICAgIEVWUF9N RF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VO VCwKKysgICAgRVZQX01EX0ZMQUdfUEtFWV9NRVRIT0RfU0lHTkFUVVJFIHwgRVZQX01EX0ZMQUdf RElHQUxHSURfQUJTRU5UIHwKKysgICAgICAgIEVWUF9NRF9GTEFHX0ZJUFMsCisgICAgIGluaXQz ODQsCisgICAgIHVwZGF0ZTUxMiwKKyAgICAgZmluYWw1MTIsCitAQCAtMjE3LDcgKzIyMSw4IEBA IHN0YXRpYyBjb25zdCBFVlBfTUQgc2hhNTEyX21kID0geworICAgICBOSURfc2hhNTEyLAorICAg ICBOSURfc2hhNTEyV2l0aFJTQUVuY3J5cHRpb24sCisgICAgIFNIQTUxMl9ESUdFU1RfTEVOR1RI LAorLSAgICBFVlBfTURfRkxBR19QS0VZX01FVEhPRF9TSUdOQVRVUkUgfCBFVlBfTURfRkxBR19E SUdBTEdJRF9BQlNFTlQsCisrICAgIEVWUF9NRF9GTEFHX1BLRVlfTUVUSE9EX1NJR05BVFVSRSB8 IEVWUF9NRF9GTEFHX0RJR0FMR0lEX0FCU0VOVCB8CisrICAgICAgICBFVlBfTURfRkxBR19GSVBT LAorICAgICBpbml0NTEyLAorICAgICB1cGRhdGU1MTIsCisgICAgIGZpbmFsNTEyLAorZGlmZiAt dXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9wX3NpZ24uYy5maXBzIG9wZW5zc2wtMS4wLjJo L2NyeXB0by9ldnAvcF9zaWduLmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZXZwL3Bfc2ln bi5jLmZpcHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3Ns LTEuMC4yaC9jcnlwdG8vZXZwL3Bfc2lnbi5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODI1MzIxMDg2 ICswMjAwCitAQCAtNjEsNiArNjEsNyBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorICNp bmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyAjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgCisgI2lmZGVmIHVuZGVmCisgdm9pZCBFVlBfU2ln bkluaXQoRVZQX01EX0NUWCAqY3R4LCBFVlBfTUQgKnR5cGUpCitAQCAtMTAxLDYgKzEwMiwyMiBA QCBpbnQgRVZQX1NpZ25GaW5hbChFVlBfTURfQ1RYICpjdHgsIHVuc2lnCisgICAgICAgICAgICAg Z290byBlcnI7CisgICAgICAgICBpZiAoRVZQX1BLRVlfQ1RYX3NldF9zaWduYXR1cmVfbWQocGtj dHgsIGN0eC0+ZGlnZXN0KSA8PSAwKQorICAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAg aWYgKGN0eC0+ZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEpCisrICAgICAgICAgICAg aWYgKEVWUF9QS0VZX0NUWF9zZXRfcnNhX3BhZGRpbmcocGtjdHgsIFJTQV9YOTMxX1BBRERJTkcp IDw9IDApCisrICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgaWYgKGN0eC0+Zmxh Z3MgJiBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BTUykgeworKyAgICAgICAgICAgIGludCBzYWx0bGVu OworKyAgICAgICAgICAgIGlmIChFVlBfUEtFWV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBS U0FfUEtDUzFfUFNTX1BBRERJTkcpIDw9CisrICAgICAgICAgICAgICAgIDApCisrICAgICAgICAg ICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgICAgIHNhbHRsZW4gPSBNX0VWUF9NRF9DVFhfRkxB R19QU1NfU0FMVChjdHgpOworKyAgICAgICAgICAgIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhf RkxBR19QU1NfTURMRU4pCisrICAgICAgICAgICAgICAgIHNhbHRsZW4gPSAtMTsKKysgICAgICAg ICAgICBlbHNlIGlmIChzYWx0bGVuID09IEVWUF9NRF9DVFhfRkxBR19QU1NfTVJFQykKKysgICAg ICAgICAgICAgICAgc2FsdGxlbiA9IC0yOworKyAgICAgICAgICAgIGlmIChFVlBfUEtFWV9DVFhf c2V0X3JzYV9wc3Nfc2FsdGxlbihwa2N0eCwgc2FsdGxlbikgPD0gMCkKKysgICAgICAgICAgICAg ICAgZ290byBlcnI7CisrICAgICAgICB9CisgICAgICAgICBpZiAoRVZQX1BLRVlfc2lnbihwa2N0 eCwgc2lncmV0LCAmc2x0bXAsIG0sIG1fbGVuKSA8PSAwKQorICAgICAgICAgICAgIGdvdG8gZXJy OworICAgICAgICAgKnNpZ2xlbiA9IHNsdG1wOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5 cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9wX3Zlcmlm eS5jCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2V2cC9wX3ZlcmlmeS5jLmZpcHMJMjAxNi0w NS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8v ZXZwL3BfdmVyaWZ5LmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MjUzMjEwODYgKzAyMDAKK0BAIC02 MSw2ICs2MSw3IEBACisgI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisgI2luY2x1ZGUgPG9wZW5z c2wvb2JqZWN0cy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9yc2EuaD4KKyAKKyBpbnQgRVZQX1ZlcmlmeUZpbmFsKEVWUF9NRF9DVFggKmN0eCwgY29u c3QgdW5zaWduZWQgY2hhciAqc2lnYnVmLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IHNpZ2xlbiwgRVZQX1BLRVkgKnBrZXkpCitAQCAtODcsNiArODgsMjIgQEAgaW50IEVWUF9W ZXJpZnlGaW5hbChFVlBfTURfQ1RYICpjdHgsIGNvbgorICAgICAgICAgICAgIGdvdG8gZXJyOwor ICAgICAgICAgaWYgKEVWUF9QS0VZX0NUWF9zZXRfc2lnbmF0dXJlX21kKHBrY3R4LCBjdHgtPmRp Z2VzdCkgPD0gMCkKKyAgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIGlmIChjdHgtPmZs YWdzICYgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxKQorKyAgICAgICAgICAgIGlmIChFVlBfUEtF WV9DVFhfc2V0X3JzYV9wYWRkaW5nKHBrY3R4LCBSU0FfWDkzMV9QQURESU5HKSA8PSAwKQorKyAg ICAgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAgIGlmIChjdHgtPmZsYWdzICYgRVZQX01E X0NUWF9GTEFHX1BBRF9QU1MpIHsKKysgICAgICAgICAgICBpbnQgc2FsdGxlbjsKKysgICAgICAg ICAgICBpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcGFkZGluZyhwa2N0eCwgUlNBX1BLQ1MxX1BT U19QQURESU5HKSA8PQorKyAgICAgICAgICAgICAgICAwKQorKyAgICAgICAgICAgICAgICBnb3Rv IGVycjsKKysgICAgICAgICAgICBzYWx0bGVuID0gTV9FVlBfTURfQ1RYX0ZMQUdfUFNTX1NBTFQo Y3R4KTsKKysgICAgICAgICAgICBpZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01E TEVOKQorKyAgICAgICAgICAgICAgICBzYWx0bGVuID0gLTE7CisrICAgICAgICAgICAgZWxzZSBp ZiAoc2FsdGxlbiA9PSBFVlBfTURfQ1RYX0ZMQUdfUFNTX01SRUMpCisrICAgICAgICAgICAgICAg IHNhbHRsZW4gPSAtMjsKKysgICAgICAgICAgICBpZiAoRVZQX1BLRVlfQ1RYX3NldF9yc2FfcHNz X3NhbHRsZW4ocGtjdHgsIHNhbHRsZW4pIDw9IDApCisrICAgICAgICAgICAgICAgIGdvdG8gZXJy OworKyAgICAgICAgfQorICAgICAgICAgaSA9IEVWUF9QS0VZX3ZlcmlmeShwa2N0eCwgc2lnYnVm LCBzaWdsZW4sIG0sIG1fbGVuKTsKKyAgZXJyOgorICAgICAgICAgRVZQX1BLRVlfQ1RYX2ZyZWUo cGtjdHgpOworZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19hZXNfc2Vs ZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfYWVzX3NlbGZ0ZXN0 LmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jLmZp cHMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MjUzMjEwODYgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4y aC9jcnlwdG8vZmlwcy9maXBzX2Flc19zZWxmdGVzdC5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODI1 MzIxMDg2ICswMjAwCitAQCAtMCwwICsxLDM2NSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29w eXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVk LgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgor KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBh ZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcwor KyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50 OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRo ZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQu IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5T U0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysg KiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh cmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4g cGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5v cmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQor KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK KysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAq LworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYK KysjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrc3Rh dGljIGNvbnN0IHN0cnVjdCB7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKysg ICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbMTZdOworKyAgICBjb25zdCB1bnNpZ25l ZCBjaGFyIGNpcGhlcnRleHRbMTZdOworK30gdGVzdHNbXSA9IHsKKysgICAgeworKyAgICAgICAg eworKyAgICAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgw NywKKysgICAgICAgICAgICAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwg MHgwRSwgMHgwRn0sIHsKKysgICAgICAgIDB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4 NTUsIDB4NjYsIDB4NzcsCisrICAgICAgICAgICAgICAgIDB4ODgsIDB4OTksIDB4QUEsIDB4QkIs IDB4Q0MsIDB4REQsIDB4RUUsIDB4RkZ9LCB7CisrMHg2OSwgMHhDNCwgMHhFMCwgMHhEOCwgMHg2 QSwgMHg3QiwgMHgwNCwgMHgzMCwKKysgICAgICAgICAgICAgICAgMHhEOCwgMHhDRCwgMHhCNywg MHg4MCwgMHg3MCwgMHhCNCwgMHhDNSwgMHg1QX0sfSx9OworKworK3N0YXRpYyBpbnQgY29ycnVw dF9hZXM7CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKCkKKyt7CisrICAgIGNvcnJ1cHRfYWVz ID0gMTsKKyt9CisrCisraW50IEZJUFNfc2VsZnRlc3RfYWVzKCkKKyt7CisrICAgIGludCBuOwor KyAgICBpbnQgcmV0ID0gMDsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQ SEVSX0NUWF9pbml0KCZjdHgpOworKworKyAgICBmb3IgKG4gPSAwOyBuIDwgMTsgKytuKSB7Cisr ICAgICAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl07CisrCisrICAgICAgICBtZW1jcHkoa2V5LCB0 ZXN0c1tuXS5rZXksIHNpemVvZihrZXkpKTsKKysgICAgICAgIGlmIChjb3JydXB0X2FlcykKKysg ICAgICAgICAgICBrZXlbMF0rKzsKKysgICAgICAgIGlmIChmaXBzX2NpcGhlcl90ZXN0KCZjdHgs IEVWUF9hZXNfMTI4X2VjYigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCBO VUxMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNbbl0ucGxhaW50ZXh0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNbbl0uY2lwaGVydGV4dCwgMTYpIDw9 IDApCisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysgICAgcmV0ID0gMTsKKysgZXJy OgorKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKyAgICBpZiAocmV0ID09IDAp CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFUywgRklQU19SX1NFTEZU RVNUX0ZBSUxFRCk7CisrICAgIHJldHVybiByZXQ7CisrfQorKworKy8qIEFFUy1DQ00gdGVzdCBk YXRhIGZyb20gTklTVCBwdWJsaWMgdGVzdCB2ZWN0b3JzICovCisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgY2NtX2tleVtdID0geworKyAgICAweGNlLCAweGIwLCAweDA5LCAweGFlLCAw eGE0LCAweDQ1LCAweDQ0LCAweDUxLCAweGZlLCAweGFkLCAweGYwLCAweGU2LAorKyAgICAweGIz LCAweDZmLCAweDQ1LCAweDU1LCAweDVkLCAweGQwLCAweDQ3LCAweDIzLCAweGJhLCAweGE0LCAw eDQ4LCAweGU4CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fbm9uY2Vb XSA9IHsKKysgICAgMHg3NiwgMHg0MCwgMHg0MywgMHhjNCwgMHg5NCwgMHg2MCwgMHhiNworK307 CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX2FkYXRhW10gPSB7CisrICAgIDB4 NmUsIDB4ODAsIDB4ZGQsIDB4N2YsIDB4MWIsIDB4YWQsIDB4ZjMsIDB4YTEsIDB4YzksIDB4YWIs IDB4MjUsIDB4YzcsCisrICAgIDB4NWYsIDB4MTAsIDB4YmQsIDB4ZTcsIDB4OGMsIDB4MjMsIDB4 ZmEsIDB4MGUsIDB4YjgsIDB4ZjksIDB4YWEsIDB4YTUsCisrICAgIDB4M2EsIDB4ZGUsIDB4ZmIs IDB4ZjQsIDB4Y2IsIDB4ZjcsIDB4OGYsIDB4ZTQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGNjbV9wdFtdID0geworKyAgICAweGM4LCAweGQyLCAweDc1LCAweGY5LCAweDE5 LCAweGUxLCAweDdkLCAweDdmLCAweGU2LCAweDljLCAweDJhLCAweDFmLAorKyAgICAweDU4LCAw eDkzLCAweDlkLCAweGZlLCAweDRkLCAweDQwLCAweDM3LCAweDkxLCAweGI1LCAweGRmLCAweDEz LCAweDEwCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjY21fY3RbXSA9IHsK KysgICAgMHg4YSwgMHgwZiwgMHgzZCwgMHg4MiwgMHgyOSwgMHhlNCwgMHg4ZSwgMHg3NCwgMHg4 NywgMHhmZCwgMHg5NSwgMHhhMiwKKysgICAgMHg4YSwgMHhkMywgMHg5MiwgMHhjOCwgMHgwYiwg MHgzNiwgMHg4MSwgMHhkNCwgMHhmYiwgMHhjNywgMHhiYiwgMHhmZAorK307CisrCisrc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgY2NtX3RhZ1tdID0geworKyAgICAweDJkLCAweGQ2LCAweGVm LCAweDFjLCAweDQ1LCAweGQ0LCAweGNjLCAweGI3LCAweDIzLCAweGRjLCAweDA3LCAweDQ0LAor KyAgICAweDE0LCAweGRiLCAweDUwLCAweDZkCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9h ZXNfY2NtKHZvaWQpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgdW5zaWduZWQgY2hhciBv dXRbMTI4XSwgdGFnWzE2XTsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQ SEVSX0NUWF9pbml0KCZjdHgpOworKyAgICBtZW1zZXQob3V0LCAwLCBzaXplb2Yob3V0KSk7Cisr ICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Flc18xOTJfY2NtKCksIE5VTEws IE5VTEwsIE5VTEwsIDEpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghRVZQX0NJUEhF Ul9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVOLAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwpKQorKyAgICAgICAgZ290byBl cnI7CisrICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VU X1RBRywKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjY21fdGFnKSwgTlVM TCkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4 LCBOVUxMLCBOVUxMLCBjY21fa2V5LCBjY21fbm9uY2UsIDEpKQorKyAgICAgICAgZ290byBlcnI7 CisrICAgIGlmIChFVlBfQ2lwaGVyKCZjdHgsIE5VTEwsIE5VTEwsIHNpemVvZihjY21fcHQpKSAh PSBzaXplb2YoY2NtX3B0KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhl cigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNpemVvZihjY21fYWRhdGEpKSA8IDApCisrICAgICAg ICBnb3RvIGVycjsKKysgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBjY21fcHQsIHNpemVv ZihjY21fcHQpKSAhPSBzaXplb2YoY2NtX2N0KSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAg ICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfQ0NNX0dFVF9UQUcsIDE2 LCB0YWcpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmIChtZW1jbXAodGFnLCBjY21fdGFn LCBzaXplb2YoY2NtX3RhZykpCisrICAgICAgICB8fCBtZW1jbXAob3V0LCBjY21fY3QsIHNpemVv ZihjY21fY3QpKSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBtZW1zZXQob3V0LCAwLCBz aXplb2Yob3V0KSk7CisrCisrICAgIGlmICghRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Fl c18xOTJfY2NtKCksIE5VTEwsIE5VTEwsIE5VTEwsIDApKQorKyAgICAgICAgZ290byBlcnI7Cisr ICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4LCBFVlBfQ1RSTF9DQ01fU0VUX0lWTEVO LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNjbV9ub25jZSksIE5VTEwp KQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghRVZQX0NJUEhFUl9DVFhfY3RybCgmY3R4 LCBFVlBfQ1RSTF9DQ01fU0VUX1RBRywgMTYsIHRhZykpCisrICAgICAgICBnb3RvIGVycjsKKysg ICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBOVUxMLCBOVUxMLCBjY21fa2V5LCBjY21f bm9uY2UsIDApKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmIChFVlBfQ2lwaGVyKCZjdHgs IE5VTEwsIE5VTEwsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX2N0KSkKKysgICAgICAg IGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBjY21fYWRhdGEsIHNp emVvZihjY21fYWRhdGEpKSA8IDApCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKEVWUF9D aXBoZXIoJmN0eCwgb3V0LCBjY21fY3QsIHNpemVvZihjY21fY3QpKSAhPSBzaXplb2YoY2NtX3B0 KSkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBpZiAobWVtY21wKG91dCwgY2NtX3B0LCBz aXplb2YoY2NtX3B0KSkpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgcmV0ID0gMTsKKysK KysgZXJyOgorKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKworKyAgICBpZiAo cmV0ID09IDApIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTX0ND TSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfSBl bHNlCisrICAgICAgICByZXR1cm4gcmV0OworKworK30KKysKKysvKiBBRVMtR0NNIHRlc3QgZGF0 YSBmcm9tIE5JU1QgcHVibGljIHRlc3QgdmVjdG9ycyAqLworKworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGdjbV9rZXlbXSA9IHsKKysgICAgMHhlZSwgMHhiYywgMHgxZiwgMHg1NywgMHg0 OCwgMHg3ZiwgMHg1MSwgMHg5MiwgMHgxYywgMHgwNCwgMHg2NSwgMHg2NiwKKysgICAgMHg1Ziwg MHg4YSwgMHhlNiwgMHhkMSwgMHg2NSwgMHg4YiwgMHhiMiwgMHg2ZCwgMHhlNiwgMHhmOCwgMHhh MCwgMHg2OSwKKysgICAgMHhhMywgMHg1MiwgMHgwMiwgMHg5MywgMHhhNSwgMHg3MiwgMHgwNywg MHg4ZgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX2l2W10gPSB7Cisr ICAgIDB4OTksIDB4YWEsIDB4M2UsIDB4NjgsIDB4ZWQsIDB4ODEsIDB4NzMsIDB4YTAsIDB4ZWUs IDB4ZDAsIDB4NjYsIDB4ODQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdj bV9wdFtdID0geworKyAgICAweGY1LCAweDZlLCAweDg3LCAweDA1LCAweDViLCAweGMzLCAweDJk LCAweDBlLCAweGViLCAweDMxLCAweGIyLCAweGVhLAorKyAgICAweGNjLCAweDJiLCAweGYyLCAw eGE1CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBnY21fYWFkW10gPSB7Cisr ICAgIDB4NGQsIDB4MjMsIDB4YzMsIDB4Y2UsIDB4YzMsIDB4MzQsIDB4YjQsIDB4OWIsIDB4ZGIs IDB4MzcsIDB4MGMsIDB4NDMsCisrICAgIDB4N2YsIDB4ZWMsIDB4NzgsIDB4ZGUKKyt9OworKwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGdjbV9jdFtdID0geworKyAgICAweGY3LCAweDI2 LCAweDQ0LCAweDEzLCAweGE4LCAweDRjLCAweDBlLCAweDdjLCAweGQ1LCAweDM2LCAweDg2LCAw eDdlLAorKyAgICAweGI5LCAweGYyLCAweDE3LCAweDM2CisrfTsKKysKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBnY21fdGFnW10gPSB7CisrICAgIDB4NjcsIDB4YmEsIDB4MDUsIDB4MTAs IDB4MjYsIDB4MmEsIDB4ZTQsIDB4ODcsIDB4ZDcsIDB4MzcsIDB4ZWUsIDB4NjIsCisrICAgIDB4 OTgsIDB4ZjcsIDB4N2UsIDB4MGMKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc19nY20o dm9pZCkKKyt7CisrICAgIGludCByZXQgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIG91dFsxMjhd LCB0YWdbMTZdOworKyAgICBFVlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RY X2luaXQoJmN0eCk7CisrICAgIG1lbXNldChvdXQsIDAsIHNpemVvZihvdXQpKTsKKysgICAgbWVt c2V0KHRhZywgMCwgc2l6ZW9mKHRhZykpOworKyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4KCZj dHgsIEVWUF9hZXNfMjU2X2djbSgpLCBOVUxMLCBOVUxMLCBOVUxMLCAxKSkKKysgICAgICAgIGdv dG8gZXJyOworKyAgICBpZiAoIUVWUF9DSVBIRVJfQ1RYX2N0cmwoJmN0eCwgRVZQX0NUUkxfR0NN X1NFVF9JVkxFTiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihnY21faXYp LCBOVUxMKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIUVWUF9DaXBoZXJJbml0X2V4 KCZjdHgsIE5VTEwsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMSkpCisrICAgICAgICBnb3RvIGVy cjsKKysgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2NtX2FhZCwgc2l6ZW9mKGdjbV9h YWQpKSA8IDApCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwg b3V0LCBnY21fcHQsIHNpemVvZihnY21fcHQpKSAhPSBzaXplb2YoZ2NtX2N0KSkKKysgICAgICAg IGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBOVUxMLCBOVUxMLCAwKSA8IDAp CisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZj dHgsIEVWUF9DVFJMX0dDTV9HRVRfVEFHLCAxNiwgdGFnKSkKKysgICAgICAgIGdvdG8gZXJyOwor KworKyAgICBpZiAobWVtY21wKHRhZywgZ2NtX3RhZywgMTYpIHx8IG1lbWNtcChvdXQsIGdjbV9j dCwgMTYpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIG1lbXNldChvdXQsIDAsIHNpemVv ZihvdXQpKTsKKysKKysgICAgaWYgKCFFVlBfQ2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzI1 Nl9nY20oKSwgTlVMTCwgTlVMTCwgTlVMTCwgMCkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAg aWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9DVFJMX0dDTV9TRVRfSVZMRU4sCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZ2NtX2l2KSwgTlVMTCkpCisrICAg ICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFFVlBfQ0lQSEVSX0NUWF9jdHJsKCZjdHgsIEVWUF9D VFJMX0dDTV9TRVRfVEFHLCAxNiwgdGFnKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAo IUVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIE5VTEwsIE5VTEwsIGdjbV9rZXksIGdjbV9pdiwgMCkp CisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKEVWUF9DaXBoZXIoJmN0eCwgTlVMTCwgZ2Nt X2FhZCwgc2l6ZW9mKGdjbV9hYWQpKSA8IDApCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYg KEVWUF9DaXBoZXIoJmN0eCwgb3V0LCBnY21fY3QsIHNpemVvZihnY21fY3QpKSAhPSBzaXplb2Yo Z2NtX3B0KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoRVZQX0NpcGhlcigmY3R4LCBO VUxMLCBOVUxMLCAwKSA8IDApCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgaWYgKG1lbWNt cChvdXQsIGdjbV9wdCwgMTYpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIHJldCA9IDE7 CisrCisrIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKysKKysgICAg aWYgKHJldCA9PSAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FF U19HQ00sIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAg IH0gZWxzZQorKyAgICAgICAgcmV0dXJuIHJldDsKKysKKyt9CisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgWFRTXzEyOF9rZXlbXSA9IHsKKysgICAgMHhhMSwgMHhiOSwgMHgwYywgMHhi YSwgMHgzZiwgMHgwNiwgMHhhYywgMHgzNSwgMHgzYiwgMHgyYywgMHgzNCwgMHgzOCwKKysgICAg MHg3NiwgMHgwOCwgMHgxNywgMHg2MiwgMHgwOSwgMHgwOSwgMHgyMywgMHgwMiwgMHg2ZSwgMHg5 MSwgMHg3NywgMHgxOCwKKysgICAgMHgxNSwgMHhmMiwgMHg5ZCwgMHhhYiwgMHgwMSwgMHg5Mywg MHgyZiwgMHgyZgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9p W10gPSB7CisrICAgIDB4NGYsIDB4YWUsIDB4ZjcsIDB4MTEsIDB4N2MsIDB4ZGEsIDB4NTksIDB4 YzYsIDB4NmUsIDB4NGIsIDB4OTIsIDB4MDEsCisrICAgIDB4M2UsIDB4NzYsIDB4OGEsIDB4ZDUK Kyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFhUU18xMjhfcHRbXSA9IHsKKysg ICAgMHhlYiwgMHhhYiwgMHhjZSwgMHg5NSwgMHhiMSwgMHg0ZCwgMHgzYywgMHg4ZCwgMHg2Ziwg MHhiMywgMHg1MCwgMHgzOSwKKysgICAgMHgwNywgMHg5MCwgMHgzMSwgMHgxYworK307CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzEyOF9jdFtdID0geworKyAgICAweDc3LCAw eDhhLCAweGU4LCAweGI0LCAweDNjLCAweGI5LCAweDhkLCAweDVhLCAweDgyLCAweDUwLCAweDgx LCAweGQ1LAorKyAgICAweGJlLCAweDQ3LCAweDFjLCAweDYzCisrfTsKKysKKytzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2tleVtdID0geworKyAgICAweDFlLCAweGE2LCAweDYx LCAweGM1LCAweDhkLCAweDk0LCAweDNhLCAweDBlLCAweDQ4LCAweDAxLCAweGU0LCAweDJmLAor KyAgICAweDRiLCAweDA5LCAweDQ3LCAweDE0LCAweDllLCAweDdmLCAweDlmLCAweDhlLCAweDNl LCAweDY4LCAweGQwLCAweGM3LAorKyAgICAweDUwLCAweDUyLCAweDEwLCAweGJkLCAweDMxLCAw eDFhLCAweDBlLCAweDdjLCAweGQ2LCAweGUxLCAweDNmLCAweGZkLAorKyAgICAweGYyLCAweDQx LCAweDhkLCAweDhkLCAweDE5LCAweDExLCAweGMwLCAweDA0LCAweGNkLCAweGE1LCAweDhkLCAw eGEzLAorKyAgICAweGQ2LCAweDE5LCAweGI3LCAweGUyLCAweGI5LCAweDE0LCAweDFlLCAweDU4 LCAweDMxLCAweDhlLCAweGVhLCAweDM5LAorKyAgICAweDJjLCAweGY0LCAweDFiLCAweDA4Cisr fTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBYVFNfMjU2X2lbXSA9IHsKKysgICAg MHhhZCwgMHhmOCwgMHhkOSwgMHgyNiwgMHgyNywgMHg0NiwgMHg0YSwgMHhkMiwgMHhmMCwgMHg0 MiwgMHg4ZSwgMHg4NCwKKysgICAgMHhhOSwgMHhmOCwgMHg3NSwgMHg2NAorK307CisrCisrc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgWFRTXzI1Nl9wdFtdID0geworKyAgICAweDJlLCAweGVk LCAweGVhLCAweDUyLCAweGNkLCAweDgyLCAweDE1LCAweGUxLCAweGFjLCAweGM2LCAweDQ3LCAw eGU4LAorKyAgICAweDEwLCAweGJiLCAweGMzLCAweDY0LCAweDJlLCAweDg3LCAweDI4LCAweDdm LCAweDhkLCAweDJlLCAweDU3LCAweGUzLAorKyAgICAweDZjLCAweDBhLCAweDI0LCAweGZiLCAw eGMxLCAweDJhLCAweDIwLCAweDJlCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBYVFNfMjU2X2N0W10gPSB7CisrICAgIDB4Y2IsIDB4YWEsIDB4ZDAsIDB4ZTIsIDB4ZjYsIDB4 Y2UsIDB4YTMsIDB4ZjUsIDB4MGIsIDB4MzcsIDB4ZjksIDB4MzQsCisrICAgIDB4ZDQsIDB4NmEs IDB4OWIsIDB4MTMsIDB4MGIsIDB4OWQsIDB4NTQsIDB4ZjAsIDB4N2UsIDB4MzQsIDB4ZjMsIDB4 NmEsCisrICAgIDB4ZjcsIDB4OTMsIDB4ZTgsIDB4NmYsIDB4NzMsIDB4YzYsIDB4ZDcsIDB4ZGIK Kyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X2Flc194dHMoKQorK3sKKysgICAgaW50IHJldCA9 IDE7CisrICAgIEVWUF9DSVBIRVJfQ1RYIGN0eDsKKysgICAgRVZQX0NJUEhFUl9DVFhfaW5pdCgm Y3R4KTsKKysKKysgICAgaWYgKGZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Flc18xMjhfeHRz KCksCisrICAgICAgICAgICAgICAgICAgICAgICAgIFhUU18xMjhfa2V5LCBYVFNfMTI4X2ksIFhU U18xMjhfcHQsIFhUU18xMjhfY3QsCisrICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihY VFNfMTI4X3B0KSkgPD0gMCkKKysgICAgICAgIHJldCA9IDA7CisrCisrICAgIGlmIChmaXBzX2Np cGhlcl90ZXN0KCZjdHgsIEVWUF9hZXNfMjU2X3h0cygpLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICBYVFNfMjU2X2tleSwgWFRTXzI1Nl9pLCBYVFNfMjU2X3B0LCBYVFNfMjU2X2N0LAorKyAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoWFRTXzI1Nl9wdCkpIDw9IDApCisrICAgICAg ICByZXQgPSAwOworKworKyAgICBFVlBfQ0lQSEVSX0NUWF9jbGVhbnVwKCZjdHgpOworKyAgICBp ZiAocmV0ID09IDApCisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19Y VFMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICByZXR1cm4gcmV0OworK30KKysKKysj ZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHMuYy5maXBzIG9w ZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHMuYworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0 by9maXBzL2ZpcHMuYy5maXBzCTIwMTYtMDUtMDMgMTY6NTc6NTguODI2MzIxMTEwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwcy5jCTIwMTYtMDUtMDMgMTY6NTc6NTgu ODI2MzIxMTEwICswMjAwCitAQCAtMCwwICsxLDQ4MyBAQAorKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICog Q29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysg KgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K KysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNz bC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBt YXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBl YXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lv biBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9m IGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFj a25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVu U1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFO WQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P VCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJ TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBD T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D TFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICog QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgor KyAqLworKworKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5k Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1h Yy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysj aW5jbHVkZSA8bGltaXRzLmg+CisrI2luY2x1ZGUgPGRsZmNuLmg+CisrI2luY2x1ZGUgPHN0ZGlv Lmg+CisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wuaCIKKysKKysj aWZkZWYgT1BFTlNTTF9GSVBTCisrCisrIyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKysj IGlmbmRlZiBQQVRIX01BWAorKyMgIGRlZmluZSBQQVRIX01BWCAxMDI0CisrIyBlbmRpZgorKwor K3N0YXRpYyBpbnQgZmlwc19zZWxmdGVzdF9mYWlsID0gMDsKKytzdGF0aWMgaW50IGZpcHNfbW9k ZSA9IDA7Cisrc3RhdGljIGludCBmaXBzX3N0YXJ0ZWQgPSAwOworKworK3N0YXRpYyBpbnQgZmlw c19pc19vd25pbmdfdGhyZWFkKHZvaWQpOworK3N0YXRpYyBpbnQgZmlwc19zZXRfb3duaW5nX3Ro cmVhZCh2b2lkKTsKKytzdGF0aWMgaW50IGZpcHNfY2xlYXJfb3duaW5nX3RocmVhZCh2b2lkKTsK KysKKysjIGRlZmluZSBmaXBzX3dfbG9jaygpICAgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19G SVBTKQorKyMgZGVmaW5lIGZpcHNfd191bmxvY2soKSBDUllQVE9fd191bmxvY2soQ1JZUFRPX0xP Q0tfRklQUykKKysjIGRlZmluZSBmaXBzX3JfbG9jaygpICAgQ1JZUFRPX3JfbG9jayhDUllQVE9f TE9DS19GSVBTKQorKyMgZGVmaW5lIGZpcHNfcl91bmxvY2soKSBDUllQVE9fcl91bmxvY2soQ1JZ UFRPX0xPQ0tfRklQUykKKysKKytzdGF0aWMgdm9pZCBmaXBzX3NldF9tb2RlKGludCBvbm9mZikK Kyt7CisrICAgIGludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25pbmdfdGhyZWFkKCk7Cisr CisrICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKKysgICAgICAgIGlmICghb3duaW5nX3RocmVhZCkK KysgICAgICAgICAgICBmaXBzX3dfbG9jaygpOworKyAgICAgICAgZmlwc19tb2RlID0gb25vZmY7 CisrICAgICAgICBpZiAoIW93bmluZ190aHJlYWQpCisrICAgICAgICAgICAgZmlwc193X3VubG9j aygpOworKyAgICB9CisrfQorKworK2ludCBGSVBTX21vZHVsZV9tb2RlKHZvaWQpCisreworKyAg ICBpbnQgcmV0ID0gMDsKKysgICAgaW50IG93bmluZ190aHJlYWQgPSBmaXBzX2lzX293bmluZ190 aHJlYWQoKTsKKysKKysgICAgaWYgKGZpcHNfc3RhcnRlZCkgeworKyAgICAgICAgaWYgKCFvd25p bmdfdGhyZWFkKQorKyAgICAgICAgICAgIGZpcHNfcl9sb2NrKCk7CisrICAgICAgICByZXQgPSBm aXBzX21vZGU7CisrICAgICAgICBpZiAoIW93bmluZ190aHJlYWQpCisrICAgICAgICAgICAgZmlw c19yX3VubG9jaygpOworKyAgICB9CisrICAgIHJldHVybiByZXQ7CisrfQorKworK2ludCBGSVBT X3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKQorK3sKKysgICAgaW50IHJldCA9IDA7CisrICAgIGlmIChm aXBzX3N0YXJ0ZWQpIHsKKysgICAgICAgIGludCBvd25pbmdfdGhyZWFkID0gZmlwc19pc19vd25p bmdfdGhyZWFkKCk7CisrCisrICAgICAgICBpZiAoIW93bmluZ190aHJlYWQpCisrICAgICAgICAg ICAgZmlwc19yX2xvY2soKTsKKysgICAgICAgIHJldCA9IGZpcHNfc2VsZnRlc3RfZmFpbDsKKysg ICAgICAgIGlmICghb3duaW5nX3RocmVhZCkKKysgICAgICAgICAgICBmaXBzX3JfdW5sb2NrKCk7 CisrICAgIH0KKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrLyogU2VsZnRlc3QgZmFpbHVyZSBm YXRhbCBleGl0IHJvdXRpbmUuIFRoaXMgd2lsbCBiZSBjYWxsZWQKKysgKiBkdXJpbmcgKmFueSog Y3J5cHRvZ3JhcGhpYyBvcGVyYXRpb24uIEl0IGhhcyB0aGUgbWluaW11bQorKyAqIG92ZXJoZWFk IHBvc3NpYmxlIHRvIGF2b2lkIHRvbyBiaWcgYSBwZXJmb3JtYW5jZSBoaXQuCisrICovCisrCisr dm9pZCBGSVBTX3NlbGZ0ZXN0X2NoZWNrKHZvaWQpCisreworKyAgICBpZiAoZmlwc19zZWxmdGVz dF9mYWlsKSB7CisrICAgICAgICBPcGVuU1NMRGllKF9fRklMRV9fLCBfX0xJTkVfXywgIkZBVEFM IEZJUFMgU0VMRlRFU1QgRkFJTFVSRSIpOworKyAgICB9CisrfQorKworK3ZvaWQgZmlwc19zZXRf c2VsZnRlc3RfZmFpbCh2b2lkKQorK3sKKysgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKyt9 CisrCisrLyogd2UgaW1wbGVtZW50IHdoYXQgbGliZmlwc2NoZWNrIGRvZXMgb3Vyc2VsdmVzICov CisrCisrc3RhdGljIGludAorK2dldF9saWJyYXJ5X3BhdGgoY29uc3QgY2hhciAqbGlibmFtZSwg Y29uc3QgY2hhciAqc3ltYm9sbmFtZSwgY2hhciAqcGF0aCwKKysgICAgICAgICAgICAgICAgIHNp emVfdCBwYXRobGVuKQorK3sKKysgICAgRGxfaW5mbyBpbmZvOworKyAgICB2b2lkICpkbCwgKnN5 bTsKKysgICAgaW50IHJ2ID0gLTE7CisrCisrICAgIGRsID0gZGxvcGVuKGxpYm5hbWUsIFJUTERf TEFaWSk7CisrICAgIGlmIChkbCA9PSBOVUxMKSB7CisrICAgICAgICByZXR1cm4gLTE7CisrICAg IH0KKysKKysgICAgc3ltID0gZGxzeW0oZGwsIHN5bWJvbG5hbWUpOworKworKyAgICBpZiAoc3lt ICE9IE5VTEwgJiYgZGxhZGRyKHN5bSwgJmluZm8pKSB7CisrICAgICAgICBzdHJuY3B5KHBhdGgs IGluZm8uZGxpX2ZuYW1lLCBwYXRobGVuIC0gMSk7CisrICAgICAgICBwYXRoW3BhdGhsZW4gLSAx XSA9ICdcMCc7CisrICAgICAgICBydiA9IDA7CisrICAgIH0KKysKKysgICAgZGxjbG9zZShkbCk7 CisrCisrICAgIHJldHVybiBydjsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgY29udltdID0g IjAxMjM0NTY3ODlhYmNkZWYiOworKworK3N0YXRpYyBjaGFyICpiaW4yaGV4KHZvaWQgKmJ1Ziwg c2l6ZV90IGxlbikKKyt7CisrICAgIGNoYXIgKmhleCwgKnA7CisrICAgIHVuc2lnbmVkIGNoYXIg KnNyYyA9IGJ1ZjsKKysKKysgICAgaGV4ID0gbWFsbG9jKGxlbiAqIDIgKyAxKTsKKysgICAgaWYg KGhleCA9PSBOVUxMKQorKyAgICAgICAgcmV0dXJuIE5VTEw7CisrCisrICAgIHAgPSBoZXg7Cisr CisrICAgIHdoaWxlIChsZW4gPiAwKSB7CisrICAgICAgICB1bnNpZ25lZCBjOworKworKyAgICAg ICAgYyA9ICpzcmM7CisrICAgICAgICBzcmMrKzsKKysKKysgICAgICAgICpwID0gY29udltjID4+ IDRdOworKyAgICAgICAgKytwOworKyAgICAgICAgKnAgPSBjb252W2MgJiAweDBmXTsKKysgICAg ICAgICsrcDsKKysgICAgICAgIC0tbGVuOworKyAgICB9CisrICAgICpwID0gJ1wwJzsKKysgICAg cmV0dXJuIGhleDsKKyt9CisrCisrIyBkZWZpbmUgSE1BQ19QUkVGSVggIi4iCisrIyBkZWZpbmUg SE1BQ19TVUZGSVggIi5obWFjIgorKyMgZGVmaW5lIFJFQURfQlVGRkVSX0xFTkdUSCAxNjM4NAor KworK3N0YXRpYyBjaGFyICptYWtlX2htYWNfcGF0aChjb25zdCBjaGFyICpvcmlncGF0aCkKKyt7 CisrICAgIGNoYXIgKnBhdGgsICpwOworKyAgICBjb25zdCBjaGFyICpmbjsKKysKKysgICAgcGF0 aCA9CisrICAgICAgICBtYWxsb2Moc2l6ZW9mKEhNQUNfUFJFRklYKSArIHNpemVvZihITUFDX1NV RkZJWCkgKyBzdHJsZW4ob3JpZ3BhdGgpKTsKKysgICAgaWYgKHBhdGggPT0gTlVMTCkgeworKyAg ICAgICAgcmV0dXJuIE5VTEw7CisrICAgIH0KKysKKysgICAgZm4gPSBzdHJyY2hyKG9yaWdwYXRo LCAnLycpOworKyAgICBpZiAoZm4gPT0gTlVMTCkgeworKyAgICAgICAgZm4gPSBvcmlncGF0aDsK KysgICAgfSBlbHNlIHsKKysgICAgICAgICsrZm47CisrICAgIH0KKysKKysgICAgc3RybmNweShw YXRoLCBvcmlncGF0aCwgZm4gLSBvcmlncGF0aCk7CisrICAgIHAgPSBwYXRoICsgKGZuIC0gb3Jp Z3BhdGgpOworKyAgICBwID0gc3RwY3B5KHAsIEhNQUNfUFJFRklYKTsKKysgICAgcCA9IHN0cGNw eShwLCBmbik7CisrICAgIHAgPSBzdHBjcHkocCwgSE1BQ19TVUZGSVgpOworKworKyAgICByZXR1 cm4gcGF0aDsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgaG1hY2tleVtdID0gIm9yYm9EZUpJ VElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKKysKKytzdGF0aWMgaW50IGNvbXB1dGVfZmlsZV9o bWFjKGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKipidWYsIHNpemVfdCAqaG1hY2xlbikKKyt7Cisr ICAgIEZJTEUgKmYgPSBOVUxMOworKyAgICBpbnQgcnYgPSAtMTsKKysgICAgdW5zaWduZWQgY2hh ciByYnVmW1JFQURfQlVGRkVSX0xFTkdUSF07CisrICAgIHNpemVfdCBsZW47CisrICAgIHVuc2ln bmVkIGludCBobGVuOworKyAgICBITUFDX0NUWCBjOworKworKyAgICBITUFDX0NUWF9pbml0KCZj KTsKKysKKysgICAgZiA9IGZvcGVuKHBhdGgsICJyIik7CisrCisrICAgIGlmIChmID09IE5VTEwp IHsKKysgICAgICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIEhNQUNfSW5pdCgmYywgaG1h Y2tleSwgc2l6ZW9mKGhtYWNrZXkpIC0gMSwgRVZQX3NoYTI1NigpKTsKKysKKysgICAgd2hpbGUg KChsZW4gPSBmcmVhZChyYnVmLCAxLCBzaXplb2YocmJ1ZiksIGYpKSAhPSAwKSB7CisrICAgICAg ICBITUFDX1VwZGF0ZSgmYywgcmJ1ZiwgbGVuKTsKKysgICAgfQorKworKyAgICBsZW4gPSBzaXpl b2YocmJ1Zik7CisrICAgIC8qIHJldXNlIHJidWYgZm9yIGhtYWMgKi8KKysgICAgSE1BQ19GaW5h bCgmYywgcmJ1ZiwgJmhsZW4pOworKworKyAgICAqYnVmID0gbWFsbG9jKGhsZW4pOworKyAgICBp ZiAoKmJ1ZiA9PSBOVUxMKSB7CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgfQorKworKyAgICAq aG1hY2xlbiA9IGhsZW47CisrCisrICAgIG1lbWNweSgqYnVmLCByYnVmLCBobGVuKTsKKysKKysg ICAgcnYgPSAwOworKyBlbmQ6CisrICAgIEhNQUNfQ1RYX2NsZWFudXAoJmMpOworKworKyAgICBp ZiAoZikKKysgICAgICAgIGZjbG9zZShmKTsKKysKKysgICAgcmV0dXJuIHJ2OworK30KKysKKytz dGF0aWMgaW50IEZJUFNDSEVDS192ZXJpZnkoY29uc3QgY2hhciAqbGlibmFtZSwgY29uc3QgY2hh ciAqc3ltYm9sbmFtZSkKKyt7CisrICAgIGNoYXIgcGF0aFtQQVRIX01BWCArIDFdOworKyAgICBp bnQgcnY7CisrICAgIEZJTEUgKmhmOworKyAgICBjaGFyICpobWFjcGF0aCwgKnA7CisrICAgIGNo YXIgKmhtYWMgPSBOVUxMOworKyAgICBzaXplX3QgbjsKKysKKysgICAgcnYgPSBnZXRfbGlicmFy eV9wYXRoKGxpYm5hbWUsIHN5bWJvbG5hbWUsIHBhdGgsIHNpemVvZihwYXRoKSk7CisrCisrICAg IGlmIChydiA8IDApCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgaG1hY3BhdGggPSBtYWtl X2htYWNfcGF0aChwYXRoKTsKKysgICAgaWYgKGhtYWNwYXRoID09IE5VTEwpCisrICAgICAgICBy ZXR1cm4gMDsKKysKKysgICAgaGYgPSBmb3BlbihobWFjcGF0aCwgInIiKTsKKysgICAgaWYgKGhm ID09IE5VTEwpIHsKKysgICAgICAgIGZyZWUoaG1hY3BhdGgpOworKyAgICAgICAgcmV0dXJuIDA7 CisrICAgIH0KKysKKysgICAgaWYgKGdldGxpbmUoJmhtYWMsICZuLCBoZikgPiAwKSB7CisrICAg ICAgICB2b2lkICpidWY7CisrICAgICAgICBzaXplX3QgaG1hY2xlbjsKKysgICAgICAgIGNoYXIg KmhleDsKKysKKysgICAgICAgIGlmICgocCA9IHN0cmNocihobWFjLCAnXG4nKSkgIT0gTlVMTCkK KysgICAgICAgICAgICAqcCA9ICdcMCc7CisrCisrICAgICAgICBpZiAoY29tcHV0ZV9maWxlX2ht YWMocGF0aCwgJmJ1ZiwgJmhtYWNsZW4pIDwgMCkgeworKyAgICAgICAgICAgIHJ2ID0gLTQ7Cisr ICAgICAgICAgICAgZ290byBlbmQ7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAoKGhleCA9 IGJpbjJoZXgoYnVmLCBobWFjbGVuKSkgPT0gTlVMTCkgeworKyAgICAgICAgICAgIGZyZWUoYnVm KTsKKysgICAgICAgICAgICBydiA9IC01OworKyAgICAgICAgICAgIGdvdG8gZW5kOworKyAgICAg ICAgfQorKworKyAgICAgICAgaWYgKHN0cmNtcChoZXgsIGhtYWMpICE9IDApIHsKKysgICAgICAg ICAgICBydiA9IC0xOworKyAgICAgICAgfQorKyAgICAgICAgZnJlZShidWYpOworKyAgICAgICAg ZnJlZShoZXgpOworKyAgICB9IGVsc2UgeworKyAgICAgICAgcnYgPSAtMTsKKysgICAgfQorKwor KyBlbmQ6CisrICAgIGZyZWUoaG1hYyk7CisrICAgIGZyZWUoaG1hY3BhdGgpOworKyAgICBmY2xv c2UoaGYpOworKworKyAgICBpZiAocnYgPCAwKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAg IC8qIGNoZWNrIHN1Y2Nlc3NmdWwgKi8KKysgICAgcmV0dXJuIDE7CisrfQorKworK2ludCBGSVBT X21vZHVsZV9tb2RlX3NldChpbnQgb25vZmYsIGNvbnN0IGNoYXIgKmF1dGgpCisreworKyAgICBp bnQgcmV0ID0gMDsKKysKKysgICAgZmlwc193X2xvY2soKTsKKysgICAgZmlwc19zdGFydGVkID0g MTsKKysgICAgZmlwc19zZXRfb3duaW5nX3RocmVhZCgpOworKworKyAgICBpZiAob25vZmYpIHsK KysKKysgICAgICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDA7CisrCisrICAgICAgICAvKiBEb24n dCBnbyBpbnRvIEZJUFMgbW9kZSB0d2ljZSwganVzdCBzbyB3ZSBjYW4gZG8gYXV0b21hZ2ljCisr ICAgICAgICAgICBzZWVkaW5nICovCisrICAgICAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgpKSB7 CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsCisrICAg ICAgICAgICAgICAgICAgICBGSVBTX1JfRklQU19NT0RFX0FMUkVBRFlfU0VUKTsKKysgICAgICAg ICAgICBmaXBzX3NlbGZ0ZXN0X2ZhaWwgPSAxOworKyAgICAgICAgICAgIHJldCA9IDA7CisrICAg ICAgICAgICAgZ290byBlbmQ7CisrICAgICAgICB9CisrIyBpZmRlZiBPUEVOU1NMX0lBMzJfU1NF MgorKyAgICAgICAgeworKyAgICAgICAgICAgIGV4dGVybiB1bnNpZ25lZCBpbnQgT1BFTlNTTF9p YTMyY2FwX1BbMl07CisrICAgICAgICAgICAgaWYgKChPUEVOU1NMX2lhMzJjYXBfUFswXSAmICgx IDw8IDI1IHwgMSA8PCAyNikpICE9CisrICAgICAgICAgICAgICAgICgxIDw8IDI1IHwgMSA8PCAy NikpIHsKKysgICAgICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9T RVQsCisrICAgICAgICAgICAgICAgICAgICAgICAgRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JN KTsKKysgICAgICAgICAgICAgICAgZmlwc19zZWxmdGVzdF9mYWlsID0gMTsKKysgICAgICAgICAg ICAgICAgcmV0ID0gMDsKKysgICAgICAgICAgICAgICAgZ290byBlbmQ7CisrICAgICAgICAgICAg fQorKyAgICAgICAgICAgIE9QRU5TU0xfaWEzMmNhcF9QWzBdIHw9ICgxIDw8IDI4KTsgLyogc2V0 ICJzaGFyZWQgY2FjaGUiICAgKi8KKysgICAgICAgICAgICBPUEVOU1NMX2lhMzJjYXBfUFsxXSAm PSB+KDEgPDwgKDYwIC0gMzIpKTsgLyogY2xlYXIgQVZYICAgICAgICAgICAgKi8KKysgICAgICAg IH0KKysjIGVuZGlmCisrCisrICAgICAgICBpZiAoIUZJUFNDSEVDS192ZXJpZnkKKysgICAgICAg ICAgICAoImxpYmNyeXB0by5zby4iIFNITElCX1ZFUlNJT05fTlVNQkVSLCAiRklQU19tb2RlX3Nl dCIpKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQs CisrICAgICAgICAgICAgICAgICAgICBGSVBTX1JfRklOR0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gp OworKyAgICAgICAgICAgIGZpcHNfc2VsZnRlc3RfZmFpbCA9IDE7CisrICAgICAgICAgICAgcmV0 ID0gMDsKKysgICAgICAgICAgICBnb3RvIGVuZDsKKysgICAgICAgIH0KKysKKysgICAgICAgIGlm ICghRklQU0NIRUNLX3ZlcmlmeQorKyAgICAgICAgICAgICgibGlic3NsLnNvLiIgU0hMSUJfVkVS U0lPTl9OVU1CRVIsICJTU0xfQ1RYX25ldyIpKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBT X0ZfRklQU19NT0RVTEVfTU9ERV9TRVQsCisrICAgICAgICAgICAgICAgICAgICBGSVBTX1JfRklO R0VSUFJJTlRfRE9FU19OT1RfTUFUQ0gpOworKyAgICAgICAgICAgIGZpcHNfc2VsZnRlc3RfZmFp bCA9IDE7CisrICAgICAgICAgICAgcmV0ID0gMDsKKysgICAgICAgICAgICBnb3RvIGVuZDsKKysg ICAgICAgIH0KKysKKysgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0KCkpCisrICAgICAgICAgICAg Zmlwc19zZXRfbW9kZShvbm9mZik7CisrICAgICAgICBlbHNlIHsKKysgICAgICAgICAgICBmaXBz X3NlbGZ0ZXN0X2ZhaWwgPSAxOworKyAgICAgICAgICAgIHJldCA9IDA7CisrICAgICAgICAgICAg Z290byBlbmQ7CisrICAgICAgICB9CisrICAgICAgICByZXQgPSAxOworKyAgICAgICAgZ290byBl bmQ7CisrICAgIH0KKysgICAgZmlwc19zZXRfbW9kZSgwKTsKKysgICAgZmlwc19zZWxmdGVzdF9m YWlsID0gMDsKKysgICAgcmV0ID0gMTsKKysgZW5kOgorKyAgICBmaXBzX2NsZWFyX293bmluZ190 aHJlYWQoKTsKKysgICAgZmlwc193X3VubG9jaygpOworKyAgICByZXR1cm4gcmV0OworK30KKysK KytzdGF0aWMgQ1JZUFRPX1RIUkVBRElEIGZpcHNfdGhyZWFkOworK3N0YXRpYyBpbnQgZmlwc190 aHJlYWRfc2V0ID0gMDsKKysKKytzdGF0aWMgaW50IGZpcHNfaXNfb3duaW5nX3RocmVhZCh2b2lk KQorK3sKKysgICAgaW50IHJldCA9IDA7CisrCisrICAgIGlmIChmaXBzX3N0YXJ0ZWQpIHsKKysg ICAgICAgIENSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfRklQUzIpOworKyAgICAgICAgaWYgKGZp cHNfdGhyZWFkX3NldCkgeworKyAgICAgICAgICAgIENSWVBUT19USFJFQURJRCBjdXI7CisrICAg ICAgICAgICAgQ1JZUFRPX1RIUkVBRElEX2N1cnJlbnQoJmN1cik7CisrICAgICAgICAgICAgaWYg KCFDUllQVE9fVEhSRUFESURfY21wKCZjdXIsICZmaXBzX3RocmVhZCkpCisrICAgICAgICAgICAg ICAgIHJldCA9IDE7CisrICAgICAgICB9CisrICAgICAgICBDUllQVE9fcl91bmxvY2soQ1JZUFRP X0xPQ0tfRklQUzIpOworKyAgICB9CisrICAgIHJldHVybiByZXQ7CisrfQorKworK2ludCBmaXBz X3NldF9vd25pbmdfdGhyZWFkKHZvaWQpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAg aWYgKGZpcHNfc3RhcnRlZCkgeworKyAgICAgICAgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19G SVBTMik7CisrICAgICAgICBpZiAoIWZpcHNfdGhyZWFkX3NldCkgeworKyAgICAgICAgICAgIENS WVBUT19USFJFQURJRF9jdXJyZW50KCZmaXBzX3RocmVhZCk7CisrICAgICAgICAgICAgcmV0ID0g MTsKKysgICAgICAgICAgICBmaXBzX3RocmVhZF9zZXQgPSAxOworKyAgICAgICAgfQorKyAgICAg ICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX0ZJUFMyKTsKKysgICAgfQorKyAgICByZXR1 cm4gcmV0OworK30KKysKKytpbnQgZmlwc19jbGVhcl9vd25pbmdfdGhyZWFkKHZvaWQpCisrewor KyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAgaWYgKGZpcHNfc3RhcnRlZCkgeworKyAgICAgICAg Q1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19GSVBTMik7CisrICAgICAgICBpZiAoZmlwc190aHJl YWRfc2V0KSB7CisrICAgICAgICAgICAgQ1JZUFRPX1RIUkVBRElEIGN1cjsKKysgICAgICAgICAg ICBDUllQVE9fVEhSRUFESURfY3VycmVudCgmY3VyKTsKKysgICAgICAgICAgICBpZiAoIUNSWVBU T19USFJFQURJRF9jbXAoJmN1ciwgJmZpcHNfdGhyZWFkKSkKKysgICAgICAgICAgICAgICAgZmlw c190aHJlYWRfc2V0ID0gMDsKKysgICAgICAgIH0KKysgICAgICAgIENSWVBUT193X3VubG9jayhD UllQVE9fTE9DS19GSVBTMik7CisrICAgIH0KKysgICAgcmV0dXJuIHJldDsKKyt9CisrCisrIyBp ZiAwCisrLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBlbnN1cmUgdGhlIGVycm9yIGNvZGUg ZXhpc3RzIGFuZCB0aGUgZnVuY3Rpb24KKysgKiBuYW1lIGlzIHRvIGtlZXAgdGhlIGVycm9yIGNo ZWNraW5nIHNjcmlwdCBxdWlldAorKyAqLworK3ZvaWQgaGFzaF9maW5hbCh2b2lkKQorK3sKKysg ICAgRklQU2VycihGSVBTX0ZfSEFTSF9GSU5BTCwgRklQU19SX05PTl9GSVBTX01FVEhPRCk7Cisr fQorKyMgZW5kaWYKKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9m aXBzL2ZpcHNfY21hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMv Zmlwc19jbWFjX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBz X2NtYWNfc2VsZnRlc3QuYy5maXBzCTIwMTYtMDUtMDMgMTY6NTc6NTguODI2MzIxMTEwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19jbWFjX3NlbGZ0ZXN0LmMJMjAx Ni0wNS0wMyAxNjo1Nzo1OC44MjYzMjExMTAgKzAyMDAKK0BAIC0wLDAgKzEsMTU2IEBACisrLyog PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4g IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRp b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK KysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICog Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9u LgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1 cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xs b3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0 d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4g dGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAq IDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVz dCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp dmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9w ZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBt YXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4K KysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBS ZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9s bG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNs dWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZv ciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgor KyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNU IGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywg SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBV UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9K RUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV Q0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRl IDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8 b3BlbnNzbC9jbWFjLmg+CisrI2luY2x1ZGUgImZpcHNfbG9jbC5oIgorKworKyNpZmRlZiBPUEVO U1NMX0ZJUFMKKyt0eXBlZGVmIHN0cnVjdCB7CisrICAgIGludCBuaWQ7CisrICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIga2V5W0VWUF9NQVhfS0VZX0xFTkdUSF07CisrICAgIHNpemVfdCBrZXlzaXpl OworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ1s2NF07CisrICAgIHNpemVfdCBtc2dzaXpl OworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIG1hY1szMl07CisrICAgIHNpemVfdCBtYWNzaXpl OworK30gQ01BQ19LQVQ7CisrCisrLyogZnJvbSBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNh dGlvbnMvbmlzdHB1YnMvODAwLTM4Qi9TUF84MDAtMzhCLnBkZiAqLworK3N0YXRpYyBjb25zdCBD TUFDX0tBVCB2ZWN0b3JbXSA9IHsKKysgICAge05JRF9hZXNfMTI4X2NiYywgICAgICAgICAgIC8q IENvdW50ID0gMzIgZnJvbSBDTUFDR2VuQUVTMTI4LnR4dCAqLworKyAgICAgezB4NzcsIDB4YTcs IDB4N2YsIDB4YWYsIDB4MjksIDB4MGMsIDB4MWYsIDB4YTMsCisrICAgICAgMHgwYywgMHg2OCwg MHgzZCwgMHhmMSwgMHg2YiwgMHhhNywgMHhhNywgMHg3Yix9LCAxMjgsCisrICAgICB7MHgwMiwg MHgwNiwgMHg4MywgMHhlMSwgMHhmMCwgMHgzOSwgMHgyZiwgMHg0YywKKysgICAgICAweGFjLCAw eDU0LCAweDMxLCAweDhiLCAweDYwLCAweDI5LCAweDI1LCAweDllLAorKyAgICAgIDB4OWMsIDB4 NTUsIDB4M2QsIDB4YmMsIDB4NGIsIDB4NmEsIDB4ZDksIDB4OTgsCisrICAgICAgMHhlNiwgMHg0 ZCwgMHg1OCwgMHhlNCwgMHhlNywgMHhkYywgMHgyZSwgMHgxMyx9LCAyNTYsCisrICAgICB7MHhm YiwgMHhmZSwgMHhhNCwgMHgxYix9LCAzMn0sCisrICAgIHtOSURfYWVzXzE5Ml9jYmMsICAgICAg ICAgICAvKiBDb3VudCA9IDIzIGZyb20gQ01BQ0dlbkFFUzE5Mi50eHQgKi8KKysgICAgIHsweDdi LCAweDMyLCAweDM5LCAweDEzLCAweDY5LCAweGFhLCAweDRjLCAweGE5LAorKyAgICAgIDB4NzUs IDB4NTgsIDB4MDksIDB4NWIsIDB4ZTMsIDB4YzMsIDB4ZWMsIDB4ODYsCisrICAgICAgMHgyYiwg MHhkMCwgMHg1NywgMHhjZSwgMHhmMSwgMHhlMywgMHgyZCwgMHg2Mix9LCAxOTIsCisrICAgICB7 MHgwfSwgMCwKKysgICAgIHsweGU0LCAweGQ5LCAweDM0LCAweDBiLCAweDAzLCAweGU2LCAweDdk LCAweGVmLAorKyAgICAgIDB4ZDQsIDB4OTYsIDB4OWMsIDB4YzEsIDB4ZWQsIDB4MzcsIDB4MzUs IDB4ZTYsfSwgMTI4LAorKyAgICAgfSwKKysgICAge05JRF9hZXNfMjU2X2NiYywgICAgICAgICAg IC8qIENvdW50ID0gMzMgZnJvbSBDTUFDR2VuQUVTMjU2LnR4dCAqLworKyAgICAgezB4MGIsIDB4 MTIsIDB4MmEsIDB4YzgsIDB4ZjMsIDB4NGUsIDB4ZDEsIDB4ZmUsCisrICAgICAgMHgwOCwgMHgy YSwgMHgzNiwgMHgyNSwgMHhkMSwgMHg1NywgMHg1NiwgMHgxNCwKKysgICAgICAweDU0LCAweDE2 LCAweDdhLCAweGMxLCAweDQ1LCAweGExLCAweDBiLCAweGJmLAorKyAgICAgIDB4NzcsIDB4YzYs IDB4YTcsIDB4MDUsIDB4OTYsIDB4ZDUsIDB4NzQsIDB4ZjEsfSwgMjU2LAorKyAgICAgezB4NDks IDB4OGIsIDB4NTMsIDB4ZmQsIDB4ZWMsIDB4ODcsIDB4ZWQsIDB4Y2IsCisrICAgICAgMHhmMCwg MHg3MCwgMHg5NywgMHhkYywgMHhjZCwgMHhlOSwgMHgzYSwgMHgwOCwKKysgICAgICAweDRiLCAw eGFkLCAweDc1LCAweDAxLCAweGEyLCAweDI0LCAweGUzLCAweDg4LAorKyAgICAgIDB4ZGYsIDB4 MzQsIDB4OWMsIDB4ZTEsIDB4ODksIDB4NTksIDB4ZmUsIDB4ODQsCisrICAgICAgMHg4NSwgMHhm OCwgMHhhZCwgMHgxNSwgMHgzNywgMHhmMCwgMHhkOCwgMHg5NiwKKysgICAgICAweGVhLCAweDcz LCAweGJlLCAweGRjLCAweDcyLCAweDE0LCAweDcxLCAweDNmLH0sIDM4NCwKKysgICAgIHsweGY2 LCAweDJjLCAweDQ2LCAweDMyLCAweDliLH0sIDQwLAorKyAgICAgfSwKKysgICAge05JRF9kZXNf ZWRlM19jYmMsICAgICAgICAgIC8qIENvdW50ID0gNDEgZnJvbSBDTUFDR2VuVERFUzMucmVxICov CisrICAgICB7MHg4OSwgMHhiYywgMHhkOSwgMHg1MiwgMHhhOCwgMHhjOCwgMHhhYiwgMHgzNywK KysgICAgICAweDFhLCAweGY0LCAweDhhLCAweGM3LCAweGQwLCAweDcwLCAweDg1LCAweGQ1LAor KyAgICAgIDB4ZWYsIDB4ZjcsIDB4MDIsIDB4ZTYsIDB4ZDYsIDB4MmMsIDB4ZGMsIDB4MjMsfSwg MTkyLAorKyAgICAgezB4ZmEsIDB4NjIsIDB4MGMsIDB4MWIsIDB4YmUsIDB4OTcsIDB4MzEsIDB4 OWUsCisrICAgICAgMHg5YSwgMHgwYywgMHhmMCwgMHg0OSwgMHgyMSwgMHgyMSwgMHhmNywgMHhh MiwKKysgICAgICAweDBlLCAweGIwLCAweDhhLCAweDZhLCAweDcwLCAweDlkLCAweGNiLCAweGQw LAorKyAgICAgIDB4MGEsIDB4YWYsIDB4MzgsIDB4ZTQsIDB4ZjksIDB4OWUsIDB4NzUsIDB4NGUs fSwgMjU2LAorKyAgICAgezB4OGYsIDB4NDksIDB4YTEsIDB4YjcsIDB4ZDYsIDB4YWEsIDB4MjIs IDB4NTgsfSwgNjQsCisrICAgICB9LAorK307CisrCisraW50IEZJUFNfc2VsZnRlc3RfY21hYygp CisreworKyAgICBzaXplX3Qgbiwgb3V0bGVuOworKyAgICB1bnNpZ25lZCBjaGFyIG91dFszMl07 CisrICAgIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlcjsKKysgICAgQ01BQ19DVFggKmN0eCA9IENN QUNfQ1RYX25ldygpOworKyAgICBjb25zdCBDTUFDX0tBVCAqdDsKKysgICAgaW50IHJ2ID0gMTsK KysKKysgICAgZm9yIChuID0gMCwgdCA9IHZlY3RvcjsgbiA8IHNpemVvZih2ZWN0b3IpIC8gc2l6 ZW9mKHZlY3RvclswXSk7IG4rKywgdCsrKSB7CisrICAgICAgICBjaXBoZXIgPSBGSVBTX2dldF9j aXBoZXJieW5pZCh0LT5uaWQpOworKyAgICAgICAgaWYgKCFjaXBoZXIpIHsKKysgICAgICAgICAg ICBydiA9IC0xOworKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorKyAgICAgICAg aWYgKCFDTUFDX0luaXQoY3R4LCB0LT5rZXksIHQtPmtleXNpemUgLyA4LCBjaXBoZXIsIDApKSB7 CisrICAgICAgICAgICAgcnYgPSAtMTsKKysgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAg IH0KKysgICAgICAgIGlmICghQ01BQ19VcGRhdGUoY3R4LCB0LT5tc2csIHQtPm1zZ3NpemUgLyA4 KSkgeworKyAgICAgICAgICAgIHJ2ID0gLTE7CisrICAgICAgICAgICAgZ290byBlcnI7CisrICAg ICAgICB9CisrCisrICAgICAgICBpZiAoIUNNQUNfRmluYWwoY3R4LCBvdXQsICZvdXRsZW4pKSB7 CisrICAgICAgICAgICAgcnYgPSAtMTsKKysgICAgICAgICAgICBnb3RvIGVycjsKKysgICAgICAg IH0KKysgICAgICAgIENNQUNfQ1RYX2NsZWFudXAoY3R4KTsKKysKKysgICAgICAgIGlmIChvdXRs ZW4gPCB0LT5tYWNzaXplIC8gOCB8fCBtZW1jbXAob3V0LCB0LT5tYWMsIHQtPm1hY3NpemUgLyA4 KSkgeworKyAgICAgICAgICAgIHJ2ID0gMDsKKysgICAgICAgIH0KKysgICAgfQorKworKyBlcnI6 CisrICAgIENNQUNfQ1RYX2ZyZWUoY3R4KTsKKysKKysgICAgaWYgKHJ2ID09IC0xKSB7CisrICAg ICAgICBydiA9IDA7CisrICAgIH0KKysgICAgaWYgKCFydikKKysgICAgICAgIEZJUFNlcnIoRklQ U19GX0ZJUFNfU0VMRlRFU1RfQ01BQywgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrCisrICAg IHJldHVybiBydjsKKyt9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8v Zmlwcy9maXBzX2Rlc19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMv Zmlwc19kZXNfc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNf ZGVzX3NlbGZ0ZXN0LmMuZmlwcwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgyNjMyMTExMCArMDIwMAor KysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfZGVzX3NlbGZ0ZXN0LmMJMjAxNi0w NS0wMyAxNjo1Nzo1OC44MjYzMjExMTAgKzAyMDAKK0BAIC0wLDAgKzEsMTM4IEBACisrLyogPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFs 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 REFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL29wZW5zc2xjb25mLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworK3N0YXRp YyBjb25zdCBzdHJ1Y3QgeworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGtleVsxNl07CisrICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgcGxhaW50ZXh0WzhdOworKyAgICBjb25zdCB1bnNpZ25lZCBj aGFyIGNpcGhlcnRleHRbOF07CisrfSB0ZXN0czJbXSA9IHsKKysgICAgeworKyAgICAgICAgewor KyAgICAgICAgMHg3YywgMHg0ZiwgMHg2ZSwgMHhmNywgMHhhMiwgMHgwNCwgMHgxNiwgMHhlYywK KysgICAgICAgICAgICAgICAgMHgwYiwgMHg2YiwgMHg3YywgMHg5ZSwgMHg1ZSwgMHgxOSwgMHhh NywgMHhjNH0sIHsKKysgICAgICAgIDB4MDYsIDB4YTcsIDB4ZDgsIDB4NzksIDB4YWEsIDB4Y2Us IDB4NjksIDB4ZWZ9LCB7CisrICAgICAgICAweDRjLCAweDExLCAweDE3LCAweDU1LCAweGJmLCAw eGM0LCAweDRlLCAweGZkfQorKyAgICB9LCB7CisrICAgICAgICB7CisrICAgICAgICAweDVkLCAw eDllLCAweDAxLCAweGQzLCAweDI1LCAweGM3LCAweDNlLCAweDM0LAorKyAgICAgICAgICAgICAg ICAweDAxLCAweDE2LCAweDdjLCAweDg1LCAweDIzLCAweGRmLCAweGUwLCAweDY4fSwgeworKyAg ICAgICAgMHg5YywgMHg1MCwgMHgwOSwgMHgwZiwgMHg1ZSwgMHg3ZCwgMHg2OSwgMHg3ZX0sIHsK KysgICAgMHhkMiwgMHgwYiwgMHgxOCwgMHhkZiwgMHhkOSwgMHgwZCwgMHg5ZSwgMHhmZn0sfQor K307CisrCisrc3RhdGljIGNvbnN0IHN0cnVjdCB7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg a2V5WzI0XTsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciBwbGFpbnRleHRbOF07CisrICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgY2lwaGVydGV4dFs4XTsKKyt9IHRlc3RzM1tdID0geworKyAgICB7 CisrICAgICAgICB7CisrICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLAorKyAgICAgICAgICAgICAgICAweEZFLCAweERDLCAweEJBLCAweDk4LCAw eDc2LCAweDU0LCAweDMyLCAweDEwLAorKyAgICAgICAgICAgICAgICAweDEyLCAweDM0LCAweDU2 LCAweDc4LCAweDlhLCAweGJjLCAweGRlLCAweGYwfSwgeworKyAgICAgICAgMHg4ZiwgMHg4Ziwg MHhiZiwgMHg5YiwgMHg1ZCwgMHg0OCwgMHhiNCwgMHgxY30sIHsKKysgICAgMHg1OSwgMHg4Yywg MHhlNSwgMHhkMywgMHg2YywgMHhhMiwgMHhlYSwgMHgxYn0sfSwgeworKyAgICAgICAgeworKyAg ICAgICAgMHhEQywgMHhCQSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCwgMHhGRSwKKysg ICAgICAgICAgICAgICAgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhBQiwgMHhDRCwg MHhFRiwKKysgICAgICAgICAgICAgICAgMHhFRCwgMHgzOSwgMHhEOSwgMHg1MCwgMHhGQSwgMHg3 NCwgMHhCQywgMHhDNH0sIHsKKysgICAgICAgIDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODks IDB4QUIsIDB4Q0QsIDB4RUZ9LCB7CisrMHgxMSwgMHgyNSwgMHhiMCwgMHgzNSwgMHhiZSwgMHhh MCwgMHg4MiwgMHg4Nn0sfSx9OworKworK3N0YXRpYyBpbnQgY29ycnVwdF9kZXM7CisrCisrdm9p ZCBGSVBTX2NvcnJ1cHRfZGVzKCkKKyt7CisrICAgIGNvcnJ1cHRfZGVzID0gMTsKKyt9CisrCisr aW50IEZJUFNfc2VsZnRlc3RfZGVzKCkKKyt7CisrICAgIGludCBuLCByZXQgPSAwOworKyAgICBF VlBfQ0lQSEVSX0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrICAg IC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDIta2V5IDNERVMgYW5kIGNvbXBhcmUgdG8ga25vd24g YW5zd2VycyAqLworKyAgICBmb3IgKG4gPSAwOyBuIDwgMjsgKytuKSB7CisrICAgICAgICB1bnNp Z25lZCBjaGFyIHBsYWludGV4dFs4XTsKKysKKysgICAgICAgIG1lbWNweShwbGFpbnRleHQsIHRl c3RzMltuXS5wbGFpbnRleHQsIHNpemVvZihwbGFpbnRleHQpKTsKKysgICAgICAgIGlmIChjb3Jy dXB0X2RlcykKKysgICAgICAgICAgICBwbGFpbnRleHRbMF0rKzsKKysgICAgICAgIGlmICghZmlw c19jaXBoZXJfdGVzdCgmY3R4LCBFVlBfZGVzX2VkZV9lY2IoKSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZXN0czJbbl0ua2V5LCBOVUxMLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBsYWludGV4dCwgdGVzdHMyW25dLmNpcGhlcnRleHQsIDgpKQorKyAgICAgICAg ICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIEVuY3J5cHQvZGVjcnlwdCB3aXRoIDNE RVMgYW5kIGNvbXBhcmUgdG8ga25vd24gYW5zd2VycyAqLworKyAgICBmb3IgKG4gPSAwOyBuIDwg MjsgKytuKSB7CisrICAgICAgICBpZiAoIWZpcHNfY2lwaGVyX3Rlc3QoJmN0eCwgRVZQX2Rlc19l ZGUzX2VjYigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzM1tuXS5rZXks IE5VTEwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMzW25dLnBsYWludGV4 dCwgdGVzdHMzW25dLmNpcGhlcnRleHQsIDgpKQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAg ICB9CisrICAgIHJldCA9IDE7CisrIGVycjoKKysgICAgRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgm Y3R4KTsKKysgICAgaWYgKHJldCA9PSAwKQorKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19T RUxGVEVTVF9ERVMsIEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKworKyAgICByZXR1cm4gcmV0 OworK30KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNf ZHJiZ19jdHIuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIu YworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19jdHIuYy5maXBzCTIw MTYtMDUtMDMgMTY6NTc6NTguODI2MzIxMTEwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX2N0ci5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODI2MzIxMTEwICsw MjAwCitAQCAtMCwwICsxLDQxNSBAQAorKy8qIGZpcHMvcmFuZC9maXBzX2RyYmdfY3RyLmMgKi8K KysvKiBXcml0dGVuIGJ5IERyIFN0ZXBoZW4gTiBIZW5zb24gKHN0ZXZlQG9wZW5zc2wub3JnKSBm b3IgdGhlIE9wZW5TU0wKKysgKiBwcm9qZWN0LgorKyAqLworKy8qID09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICog Q29weXJpZ2h0IChjKSAyMDExIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysg KgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9u cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs cyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdt ZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5 IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xr aXQuIChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9w ZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8K KysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0 ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBsaWNlbnNpbmdAT3BlblNTTC5v cmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkg bm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIg aW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBv ZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFu eSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25v d2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxv cGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NM IFRvb2xraXQgKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQor KyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK KysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJ U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorKyAqLworKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5n Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3Jh bmRfbGNsLmgiCisrCisrc3RhdGljIHZvaWQgaW5jXzEyOChEUkJHX0NUUl9DVFggKiBjY3R4KQor K3sKKysgICAgaW50IGk7CisrICAgIHVuc2lnbmVkIGNoYXIgYzsKKysgICAgdW5zaWduZWQgY2hh ciAqcCA9IGNjdHgtPlYgKyAxNTsKKysgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKysg ICAgICAgIGMgPSAqcDsKKysgICAgICAgIGMrKzsKKysgICAgICAgICpwID0gYzsKKysgICAgICAg IGlmIChjKQorKyAgICAgICAgICAgIHJldHVybjsKKysgICAgICAgIHAtLTsKKysgICAgfQorK30K KysKKytzdGF0aWMgdm9pZCBjdHJfWE9SKERSQkdfQ1RSX0NUWCAqIGNjdHgsIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmluLAorKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlubGVuKQorK3sKKysg ICAgc2l6ZV90IGksIG47CisrICAgIC8qIEFueSB6ZXJvIHBhZGRpbmcgd2lsbCBoYXZlIG5vIGVm ZmVjdCBvbiB0aGUgcmVzdWx0IGFzIHdlCisrICAgICAqIGFyZSBYT1JpbmcuIFNvIGp1c3QgcHJv Y2VzcyBob3dldmVyIG11Y2ggaW5wdXQgd2UgaGF2ZS4KKysgICAgICovCisrCisrICAgIGlmICgh aW4gfHwgIWlubGVuKQorKyAgICAgICAgcmV0dXJuOworKworKyAgICBpZiAoaW5sZW4gPCBjY3R4 LT5rZXlsZW4pCisrICAgICAgICBuID0gaW5sZW47CisrICAgIGVsc2UKKysgICAgICAgIG4gPSBj Y3R4LT5rZXlsZW47CisrCisrICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisrICAgICAgICBj Y3R4LT5LW2ldIF49IGluW2ldOworKyAgICBpZiAoaW5sZW4gPD0gY2N0eC0+a2V5bGVuKQorKyAg ICAgICAgcmV0dXJuOworKworKyAgICBuID0gaW5sZW4gLSBjY3R4LT5rZXlsZW47CisrICAgIC8q IFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKysgICAgaWYgKG4gPiAxNikKKysgICAgICAgIG4gPSAx NjsKKysgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrICAgICAgICBjY3R4LT5WW2ldIF49 IGluW2kgKyBjY3R4LT5rZXlsZW5dOworK30KKysKKysvKiBQcm9jZXNzIGEgY29tcGxldGUgYmxv Y2sgdXNpbmcgQkNDIGFsZ29yaXRobSBvZiBTUFAgODAwLTkwIDEwLjQuMyAqLworKworK3N0YXRp YyB2b2lkIGN0cl9CQ0NfYmxvY2soRFJCR19DVFJfQ1RYICogY2N0eCwgdW5zaWduZWQgY2hhciAq b3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4p CisreworKyAgICBpbnQgaTsKKysgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisrICAgICAg ICBvdXRbaV0gXj0gaW5baV07CisrICAgIEFFU19lbmNyeXB0KG91dCwgb3V0LCAmY2N0eC0+ZGZf a3MpOworKyNpZiAwCisrICAgIGZwcmludGYoc3RkZXJyLCAiQkNDIGluK291dFxuIik7CisrICAg IEJJT19kdW1wX2ZwKHN0ZGVyciwgaW4sIDE2KTsKKysgICAgQklPX2R1bXBfZnAoc3RkZXJyLCBv dXQsIDE2KTsKKysjZW5kaWYKKyt9CisrCisrLyogSGFuZGxlIHNldmVyYWwgQkNDIG9wZXJhdGlv bnMgZm9yIGFzIG11Y2ggZGF0YSBhcyB3ZSBuZWVkIGZvciBLIGFuZCBYICovCisrc3RhdGljIHZv aWQgY3RyX0JDQ19ibG9ja3MoRFJCR19DVFJfQ1RYICogY2N0eCwgY29uc3QgdW5zaWduZWQgY2hh ciAqaW4pCisreworKyAgICBjdHJfQkNDX2Jsb2NrKGNjdHgsIGNjdHgtPktYLCBpbik7CisrICAg IGN0cl9CQ0NfYmxvY2soY2N0eCwgY2N0eC0+S1ggKyAxNiwgaW4pOworKyAgICBpZiAoY2N0eC0+ a2V5bGVuICE9IDE2KQorKyAgICAgICAgY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCArIDMy LCBpbik7CisrfQorKworKy8qIEluaXRpYWxpc2UgQkNDIGJsb2NrczogdGhlc2UgaGF2ZSB0aGUg dmFsdWUgMCwxLDIgaW4gbGVmdG1vc3QgcG9zaXRpb25zOgorKyAqIHNlZSAxMC40LjIgc3RhZ2Ug Ny4KKysgKi8KKytzdGF0aWMgdm9pZCBjdHJfQkNDX2luaXQoRFJCR19DVFJfQ1RYICogY2N0eCkK Kyt7CisrICAgIG1lbXNldChjY3R4LT5LWCwgMCwgNDgpOworKyAgICBtZW1zZXQoY2N0eC0+Ymx0 bXAsIDAsIDE2KTsKKysgICAgY3RyX0JDQ19ibG9jayhjY3R4LCBjY3R4LT5LWCwgY2N0eC0+Ymx0 bXApOworKyAgICBjY3R4LT5ibHRtcFszXSA9IDE7CisrICAgIGN0cl9CQ0NfYmxvY2soY2N0eCwg Y2N0eC0+S1ggKyAxNiwgY2N0eC0+Ymx0bXApOworKyAgICBpZiAoY2N0eC0+a2V5bGVuICE9IDE2 KSB7CisrICAgICAgICBjY3R4LT5ibHRtcFszXSA9IDI7CisrICAgICAgICBjdHJfQkNDX2Jsb2Nr KGNjdHgsIGNjdHgtPktYICsgMzIsIGNjdHgtPmJsdG1wKTsKKysgICAgfQorK30KKysKKysvKiBQ cm9jZXNzIHNldmVyYWwgYmxvY2tzIGludG8gQkNDIGFsZ29yaXRobSwgc29tZSBwb3NzaWJseSBw YXJ0aWFsICovCisrc3RhdGljIHZvaWQgY3RyX0JDQ191cGRhdGUoRFJCR19DVFJfQ1RYICogY2N0 eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwg c2l6ZV90IGlubGVuKQorK3sKKysgICAgaWYgKCFpbiB8fCAhaW5sZW4pCisrICAgICAgICByZXR1 cm47CisrICAgIC8qIElmIHdlIGhhdmUgcGFydGlhbCBibG9jayBoYW5kbGUgaXQgZmlyc3QgKi8K KysgICAgaWYgKGNjdHgtPmJsdG1wX3BvcykgeworKyAgICAgICAgc2l6ZV90IGxlZnQgPSAxNiAt IGNjdHgtPmJsdG1wX3BvczsKKysgICAgICAgIC8qIElmIHdlIG5vdyBoYXZlIGEgY29tcGxldGUg YmxvY2sgcHJvY2VzcyBpdCAqLworKyAgICAgICAgaWYgKGlubGVuID49IGxlZnQpIHsKKysgICAg ICAgICAgICBtZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRtcF9wb3MsIGluLCBsZWZ0KTsK KysgICAgICAgICAgICBjdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7CisrICAgICAg ICAgICAgY2N0eC0+Ymx0bXBfcG9zID0gMDsKKysgICAgICAgICAgICBpbmxlbiAtPSBsZWZ0Owor KyAgICAgICAgICAgIGluICs9IGxlZnQ7CisrICAgICAgICB9CisrICAgIH0KKysgICAgLyogUHJv Y2VzcyB6ZXJvIG9yIG1vcmUgY29tcGxldGUgYmxvY2tzICovCisrICAgIHdoaWxlIChpbmxlbiA+ PSAxNikgeworKyAgICAgICAgY3RyX0JDQ19ibG9ja3MoY2N0eCwgaW4pOworKyAgICAgICAgaW4g Kz0gMTY7CisrICAgICAgICBpbmxlbiAtPSAxNjsKKysgICAgfQorKyAgICAvKiBDb3B5IGFueSBy ZW1haW5pbmcgcGFydGlhbCBibG9jayB0byB0aGUgdGVtcG9yYXJ5IGJ1ZmZlciAqLworKyAgICBp ZiAoaW5sZW4gPiAwKSB7CisrICAgICAgICBtZW1jcHkoY2N0eC0+Ymx0bXAgKyBjY3R4LT5ibHRt cF9wb3MsIGluLCBpbmxlbik7CisrICAgICAgICBjY3R4LT5ibHRtcF9wb3MgKz0gaW5sZW47Cisr ICAgIH0KKyt9CisrCisrc3RhdGljIHZvaWQgY3RyX0JDQ19maW5hbChEUkJHX0NUUl9DVFggKiBj Y3R4KQorK3sKKysgICAgaWYgKGNjdHgtPmJsdG1wX3BvcykgeworKyAgICAgICAgbWVtc2V0KGNj dHgtPmJsdG1wICsgY2N0eC0+Ymx0bXBfcG9zLCAwLCAxNiAtIGNjdHgtPmJsdG1wX3Bvcyk7Cisr ICAgICAgICBjdHJfQkNDX2Jsb2NrcyhjY3R4LCBjY3R4LT5ibHRtcCk7CisrICAgIH0KKyt9Cisr Cisrc3RhdGljIHZvaWQgY3RyX2RmKERSQkdfQ1RSX0NUWCAqIGNjdHgsCisrICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysgICAgICAg ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4yLCBzaXplX3QgaW4ybGVuLAorKyAg ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjMsIHNpemVfdCBpbjNsZW4p CisreworKyAgICBzaXplX3QgaW5sZW47CisrICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBjY3R4LT5i bHRtcDsKKysgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYzgwID0gMHg4MDsKKysKKysgICAgY3Ry X0JDQ19pbml0KGNjdHgpOworKyAgICBpZiAoIWluMSkKKysgICAgICAgIGluMWxlbiA9IDA7Cisr ICAgIGlmICghaW4yKQorKyAgICAgICAgaW4ybGVuID0gMDsKKysgICAgaWYgKCFpbjMpCisrICAg ICAgICBpbjNsZW4gPSAwOworKyAgICBpbmxlbiA9IGluMWxlbiArIGluMmxlbiArIGluM2xlbjsK KysgICAgLyogSW5pdGlhbGlzZSBMfHxOIGluIHRlbXBvcmFyeSBibG9jayAqLworKyAgICAqcCsr ID0gKGlubGVuID4+IDI0KSAmIDB4ZmY7CisrICAgICpwKysgPSAoaW5sZW4gPj4gMTYpICYgMHhm ZjsKKysgICAgKnArKyA9IChpbmxlbiA+PiA4KSAmIDB4ZmY7CisrICAgICpwKysgPSBpbmxlbiAm IDB4ZmY7CisrICAgIC8qIE5CIGtleWxlbiBpcyBhdCBtb3N0IDMyIGJ5dGVzICovCisrICAgICpw KysgPSAwOworKyAgICAqcCsrID0gMDsKKysgICAgKnArKyA9IDA7CisrICAgICpwID0gKHVuc2ln bmVkIGNoYXIpKChjY3R4LT5rZXlsZW4gKyAxNikgJiAweGZmKTsKKysgICAgY2N0eC0+Ymx0bXBf cG9zID0gODsKKysgICAgY3RyX0JDQ191cGRhdGUoY2N0eCwgaW4xLCBpbjFsZW4pOworKyAgICBj dHJfQkNDX3VwZGF0ZShjY3R4LCBpbjIsIGluMmxlbik7CisrICAgIGN0cl9CQ0NfdXBkYXRlKGNj dHgsIGluMywgaW4zbGVuKTsKKysgICAgY3RyX0JDQ191cGRhdGUoY2N0eCwgJmM4MCwgMSk7Cisr ICAgIGN0cl9CQ0NfZmluYWwoY2N0eCk7CisrICAgIC8qIFNldCB1cCBrZXkgSyAqLworKyAgICBB RVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgtPktYLCBjY3R4LT5rZXlsZW4gKiA4LCAmY2N0eC0+ZGZf a3hrcyk7CisrICAgIC8qIFggZm9sbG93cyBrZXkgSyAqLworKyAgICBBRVNfZW5jcnlwdChjY3R4 LT5LWCArIGNjdHgtPmtleWxlbiwgY2N0eC0+S1gsICZjY3R4LT5kZl9reGtzKTsKKysgICAgQUVT X2VuY3J5cHQoY2N0eC0+S1gsIGNjdHgtPktYICsgMTYsICZjY3R4LT5kZl9reGtzKTsKKysgICAg aWYgKGNjdHgtPmtleWxlbiAhPSAxNikKKysgICAgICAgIEFFU19lbmNyeXB0KGNjdHgtPktYICsg MTYsIGNjdHgtPktYICsgMzIsICZjY3R4LT5kZl9reGtzKTsKKysjaWYgMAorKyAgICBmcHJpbnRm KHN0ZGVyciwgIk91dHB1dCBvZiBjdHJfZGY6XG4iKTsKKysgICAgQklPX2R1bXBfZnAoc3RkZXJy LCBjY3R4LT5LWCwgY2N0eC0+a2V5bGVuICsgMTYpOworKyNlbmRpZgorK30KKysKKysvKiBOQiB0 aGUgbm8tZGYgIFVwZGF0ZSBpbiBTUDgwMC05MCBzcGVjaWZpZXMgYSBjb25zdGFudCBpbnB1dCBs ZW5ndGgKKysgKiBvZiBzZWVkbGVuLCBob3dldmVyIG90aGVyIHVzZXMgb2YgdGhpcyBhbGdvcml0 aG0gcGFkIHRoZSBpbnB1dCB3aXRoCisrICogemVyb2VzIGlmIG5lY2Vzc2FyeSBhbmQgaGF2ZSB1 cCB0byB0d28gcGFyYW1ldGVycyBYT1JlZCB0b2dldGhlciwKKysgKiBoYW5kbGUgYm90aCBjYXNl cyBpbiB0aGlzIGZ1bmN0aW9uIGluc3RlYWQuCisrICovCisrCisrc3RhdGljIHZvaWQgY3RyX1Vw ZGF0ZShEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmluMSwgc2l6ZV90IGluMWxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwKKysgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4pCisrewor KyAgICBEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7CisrICAgIC8qIGtzIGlzIGFs cmVhZHkgc2V0dXAgZm9yIGNvcnJlY3Qga2V5ICovCisrICAgIGluY18xMjgoY2N0eCk7CisrICAg IEFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPkssICZjY3R4LT5rcyk7CisrICAgIC8qIElmIGtl eWxlbiBsb25nZXIgdGhhbiAxMjggYml0cyBuZWVkIGV4dHJhIGVuY3J5cHQgKi8KKysgICAgaWYg KGNjdHgtPmtleWxlbiAhPSAxNikgeworKyAgICAgICAgaW5jXzEyOChjY3R4KTsKKysgICAgICAg IEFFU19lbmNyeXB0KGNjdHgtPlYsIGNjdHgtPksgKyAxNiwgJmNjdHgtPmtzKTsKKysgICAgfQor KyAgICBpbmNfMTI4KGNjdHgpOworKyAgICBBRVNfZW5jcnlwdChjY3R4LT5WLCBjY3R4LT5WLCAm Y2N0eC0+a3MpOworKyAgICAvKiBJZiAxOTIgYml0IGtleSBwYXJ0IG9mIFYgaXMgb24gZW5kIG9m IEsgKi8KKysgICAgaWYgKGNjdHgtPmtleWxlbiA9PSAyNCkgeworKyAgICAgICAgbWVtY3B5KGNj dHgtPlYgKyA4LCBjY3R4LT5WLCA4KTsKKysgICAgICAgIG1lbWNweShjY3R4LT5WLCBjY3R4LT5L ICsgMjQsIDgpOworKyAgICB9CisrCisrICAgIGlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdf Q1RSX1VTRV9ERikgeworKyAgICAgICAgLyogSWYgbm8gaW5wdXQgcmV1c2UgZXhpc3RpbmcgZGVy aXZlZCB2YWx1ZSAqLworKyAgICAgICAgaWYgKGluMSB8fCBub25jZSB8fCBpbjIpCisrICAgICAg ICAgICAgY3RyX2RmKGNjdHgsIGluMSwgaW4xbGVuLCBub25jZSwgbm9uY2VsZW4sIGluMiwgaW4y bGVuKTsKKysgICAgICAgIC8qIElmIHRoaXMgYSByZXVzZSBpbnB1dCBpbjFsZW4gIT0gMCAqLwor KyAgICAgICAgaWYgKGluMWxlbikKKysgICAgICAgICAgICBjdHJfWE9SKGNjdHgsIGNjdHgtPktY LCBkY3R4LT5zZWVkbGVuKTsKKysgICAgfSBlbHNlIHsKKysgICAgICAgIGN0cl9YT1IoY2N0eCwg aW4xLCBpbjFsZW4pOworKyAgICAgICAgY3RyX1hPUihjY3R4LCBpbjIsIGluMmxlbik7CisrICAg IH0KKysKKysgICAgQUVTX3NldF9lbmNyeXB0X2tleShjY3R4LT5LLCBkY3R4LT5zdHJlbmd0aCwg JmNjdHgtPmtzKTsKKysjaWYgMAorKyAgICBmcHJpbnRmKHN0ZGVyciwgIksrViBhZnRlciB1cGRh dGUgaXM6XG4iKTsKKysgICAgQklPX2R1bXBfZnAoc3RkZXJyLCBjY3R4LT5LLCBjY3R4LT5rZXls ZW4pOworKyAgICBCSU9fZHVtcF9mcChzdGRlcnIsIGNjdHgtPlYsIDE2KTsKKysjZW5kaWYKKyt9 CisrCisrc3RhdGljIGludCBkcmJnX2N0cl9pbnN0YW50aWF0ZShEUkJHX0NUWCAqZGN0eCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudCwg c2l6ZV90IGVudGxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2VsZW4sCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbikK Kyt7CisrICAgIERSQkdfQ1RSX0NUWCAqY2N0eCA9ICZkY3R4LT5kLmN0cjsKKysgICAgbWVtc2V0 KGNjdHgtPkssIDAsIHNpemVvZihjY3R4LT5LKSk7CisrICAgIG1lbXNldChjY3R4LT5WLCAwLCBz aXplb2YoY2N0eC0+VikpOworKyAgICBBRVNfc2V0X2VuY3J5cHRfa2V5KGNjdHgtPkssIGRjdHgt PnN0cmVuZ3RoLCAmY2N0eC0+a3MpOworKyAgICBjdHJfVXBkYXRlKGRjdHgsIGVudCwgZW50bGVu LCBwZXJzLCBwZXJzbGVuLCBub25jZSwgbm9uY2VsZW4pOworKyAgICByZXR1cm4gMTsKKyt9Cisr Cisrc3RhdGljIGludCBkcmJnX2N0cl9yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50bGVu LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4s IHNpemVfdCBhZGlubGVuKQorK3sKKysgICAgY3RyX1VwZGF0ZShkY3R4LCBlbnQsIGVudGxlbiwg YWRpbiwgYWRpbmxlbiwgTlVMTCwgMCk7CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMg aW50IGRyYmdfY3RyX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qgb3V0bGVuLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFk aW5sZW4pCisreworKyAgICBEUkJHX0NUUl9DVFggKmNjdHggPSAmZGN0eC0+ZC5jdHI7CisrICAg IGlmIChhZGluICYmIGFkaW5sZW4pIHsKKysgICAgICAgIGN0cl9VcGRhdGUoZGN0eCwgYWRpbiwg YWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7CisrICAgICAgICAvKiBUaGlzIG1lYW5zIHdlIHJl dXNlIGRlcml2ZWQgdmFsdWUgKi8KKysgICAgICAgIGlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZM QUdfQ1RSX1VTRV9ERikgeworKyAgICAgICAgICAgIGFkaW4gPSBOVUxMOworKyAgICAgICAgICAg IGFkaW5sZW4gPSAxOworKyAgICAgICAgfQorKyAgICB9IGVsc2UKKysgICAgICAgIGFkaW5sZW4g PSAwOworKworKyAgICBmb3IgKDs7KSB7CisrICAgICAgICBpbmNfMTI4KGNjdHgpOworKyAgICAg ICAgaWYgKCEoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QpICYmICFkY3R4LT5sYl92YWxp ZCkgeworKyAgICAgICAgICAgIEFFU19lbmNyeXB0KGNjdHgtPlYsIGRjdHgtPmxiLCAmY2N0eC0+ a3MpOworKyAgICAgICAgICAgIGRjdHgtPmxiX3ZhbGlkID0gMTsKKysgICAgICAgICAgICBjb250 aW51ZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChvdXRsZW4gPCAxNikgeworKyAgICAgICAg ICAgIC8qIFVzZSBLIGFzIHRlbXAgc3BhY2UgYXMgaXQgd2lsbCBiZSB1cGRhdGVkICovCisrICAg ICAgICAgICAgQUVTX2VuY3J5cHQoY2N0eC0+ViwgY2N0eC0+SywgJmNjdHgtPmtzKTsKKysgICAg ICAgICAgICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIGNjdHgtPkspKQorKyAgICAg ICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICBtZW1jcHkob3V0LCBjY3R4LT5LLCBv dXRsZW4pOworKyAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgfQorKyAgICAgICAgQUVTX2Vu Y3J5cHQoY2N0eC0+Viwgb3V0LCAmY2N0eC0+a3MpOworKyAgICAgICAgaWYgKCFmaXBzX2RyYmdf Y3BybmdfdGVzdChkY3R4LCBvdXQpKQorKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAg b3V0ICs9IDE2OworKyAgICAgICAgb3V0bGVuIC09IDE2OworKyAgICAgICAgaWYgKG91dGxlbiA9 PSAwKQorKyAgICAgICAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIGN0cl9VcGRhdGUoZGN0 eCwgYWRpbiwgYWRpbmxlbiwgTlVMTCwgMCwgTlVMTCwgMCk7CisrCisrICAgIHJldHVybiAxOwor KworK30KKysKKytzdGF0aWMgaW50IGRyYmdfY3RyX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRj dHgpCisreworKyAgICBtZW1zZXQoJmRjdHgtPmQuY3RyLCAwLCBzaXplb2YoRFJCR19DVFJfQ1RY KSk7CisrICAgIHJldHVybiAxOworK30KKysKKytpbnQgZmlwc19kcmJnX2N0cl9pbml0KERSQkdf Q1RYICpkY3R4KQorK3sKKysgICAgRFJCR19DVFJfQ1RYICpjY3R4ID0gJmRjdHgtPmQuY3RyOwor KworKyAgICBzaXplX3Qga2V5bGVuOworKworKyAgICBzd2l0Y2ggKGRjdHgtPnR5cGUpIHsKKysg ICAgY2FzZSBOSURfYWVzXzEyOF9jdHI6CisrICAgICAgICBrZXlsZW4gPSAxNjsKKysgICAgICAg IGJyZWFrOworKworKyAgICBjYXNlIE5JRF9hZXNfMTkyX2N0cjoKKysgICAgICAgIGtleWxlbiA9 IDI0OworKyAgICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgTklEX2Flc18yNTZfY3RyOgorKyAg ICAgICAga2V5bGVuID0gMzI7CisrICAgICAgICBicmVhazsKKysKKysgICAgZGVmYXVsdDoKKysg ICAgICAgIHJldHVybiAtMjsKKysgICAgfQorKworKyAgICBkY3R4LT5pbnN0YW50aWF0ZSA9IGRy YmdfY3RyX2luc3RhbnRpYXRlOworKyAgICBkY3R4LT5yZXNlZWQgPSBkcmJnX2N0cl9yZXNlZWQ7 CisrICAgIGRjdHgtPmdlbmVyYXRlID0gZHJiZ19jdHJfZ2VuZXJhdGU7CisrICAgIGRjdHgtPnVu aW5zdGFudGlhdGUgPSBkcmJnX2N0cl91bmluc3RhbnRpYXRlOworKworKyAgICBjY3R4LT5rZXls ZW4gPSBrZXlsZW47CisrICAgIGRjdHgtPnN0cmVuZ3RoID0ga2V5bGVuICogODsKKysgICAgZGN0 eC0+YmxvY2tsZW5ndGggPSAxNjsKKysgICAgZGN0eC0+c2VlZGxlbiA9IGtleWxlbiArIDE2Owor KworKyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX0NUUl9VU0VfREYpIHsKKysgICAg ICAgIC8qIGRmIGluaXRpYWxpc2F0aW9uICovCisrICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hh ciBkZl9rZXlbMzJdID0geworKyAgICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4 MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisrICAgICAgICAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgw YiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKysgICAgICAgICAgICAweDEwLCAweDExLCAweDEy LCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorKyAgICAgICAgICAgIDB4MTgsIDB4MTks IDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYKKysgICAgICAgIH07CisrICAgICAg ICAvKiBTZXQga2V5IHNjaGVkdWxlIGZvciBkZl9rZXkgKi8KKysgICAgICAgIEFFU19zZXRfZW5j cnlwdF9rZXkoZGZfa2V5LCBkY3R4LT5zdHJlbmd0aCwgJmNjdHgtPmRmX2tzKTsKKysKKysgICAg ICAgIGRjdHgtPm1pbl9lbnRyb3B5ID0gY2N0eC0+a2V5bGVuOworKyAgICAgICAgZGN0eC0+bWF4 X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrICAgICAgICBkY3R4LT5taW5fbm9uY2UgPSBk Y3R4LT5taW5fZW50cm9weSAvIDI7CisrICAgICAgICBkY3R4LT5tYXhfbm9uY2UgPSBEUkJHX01B WF9MRU5HVEg7CisrICAgICAgICBkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdUSDsKKysg ICAgICAgIGRjdHgtPm1heF9hZGluID0gRFJCR19NQVhfTEVOR1RIOworKyAgICB9IGVsc2Ugewor KyAgICAgICAgZGN0eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOworKyAgICAgICAgZGN0 eC0+bWF4X2VudHJvcHkgPSBkY3R4LT5zZWVkbGVuOworKyAgICAgICAgLyogTm9uY2Ugbm90IHVz ZWQgKi8KKysgICAgICAgIGRjdHgtPm1pbl9ub25jZSA9IDA7CisrICAgICAgICBkY3R4LT5tYXhf bm9uY2UgPSAwOworKyAgICAgICAgZGN0eC0+bWF4X3BlcnMgPSBkY3R4LT5zZWVkbGVuOworKyAg ICAgICAgZGN0eC0+bWF4X2FkaW4gPSBkY3R4LT5zZWVkbGVuOworKyAgICB9CisrCisrICAgIGRj dHgtPm1heF9yZXF1ZXN0ID0gMSA8PCAxNjsKKysgICAgZGN0eC0+cmVzZWVkX2ludGVydmFsID0g MSA8PCAyNDsKKysKKysgICAgcmV0dXJuIDE7CisrfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgv Y3J5cHRvL2ZpcHMvZmlwc19kcmJnX2hhc2guYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9m aXBzL2ZpcHNfZHJiZ19oYXNoLmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBz X2RyYmdfaGFzaC5jLmZpcHMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MjYzMjExMTAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaGFzaC5jCTIwMTYtMDUtMDMg MTY6NTc6NTguODI2MzIxMTEwICswMjAwCitAQCAtMCwwICsxLDM1OCBAQAorKy8qIGZpcHMvcmFu ZC9maXBzX2RyYmdfaGFzaC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29u IChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8K KysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9q ZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoK KysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl IGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmli dXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhl IGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVz IHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVz ZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAq CisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0 IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVu IHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICog ICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9y IG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRl bgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYu IFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBm b2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lk9wZW5TU0wub3JnLyki CisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pF Q1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICog UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBS T0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NV UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0Us IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVS IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB Q1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg U1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjZGVmaW5lIE9QRU5TU0xf RklQU0FQSQorKworKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNs LmgiCisrCisrLyogVGhpcyBpcyBIYXNoX2RmIGZyb20gU1AgODAwLTkwIDEwLjQuMSAqLworKwor K3N0YXRpYyBpbnQgaGFzaF9kZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LAor KyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFs ZW4sCisrICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90 IGluMmxlbiwKKysgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBz aXplX3QgaW4zbGVuLAorKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpp bjQsIHNpemVfdCBpbjRsZW4pCisreworKyAgICBFVlBfTURfQ1RYICptY3R4ID0gJmRjdHgtPmQu aGFzaC5tY3R4OworKyAgICB1bnNpZ25lZCBjaGFyICp2dG1wID0gZGN0eC0+ZC5oYXNoLnZ0bXA7 CisrICAgIHVuc2lnbmVkIGNoYXIgdG1wWzZdOworKyAgICAvKiBTdGFuZGFyZCBvbmx5IGV2ZXIg bmVlZHMgc2VlZGxlbiBieXRlcyB3aGljaCBpcyBhbHdheXMgbGVzcyB0aGFuCisrICAgICAqIG1h eGltdW0gcGVybWl0dGVkIHNvIG5vIG5lZWQgdG8gY2hlY2sgbGVuZ3RoLgorKyAgICAgKi8KKysg ICAgc2l6ZV90IG91dGxlbiA9IGRjdHgtPnNlZWRsZW47CisrICAgIHRtcFswXSA9IDE7CisrICAg IHRtcFsxXSA9ICgob3V0bGVuICogOCkgPj4gMjQpICYgMHhmZjsKKysgICAgdG1wWzJdID0gKChv dXRsZW4gKiA4KSA+PiAxNikgJiAweGZmOworKyAgICB0bXBbM10gPSAoKG91dGxlbiAqIDgpID4+ IDgpICYgMHhmZjsKKysgICAgdG1wWzRdID0gKG91dGxlbiAqIDgpICYgMHhmZjsKKysgICAgaWYg KCFpbjEpIHsKKysgICAgICAgIHRtcFs1XSA9ICh1bnNpZ25lZCBjaGFyKWluMWxlbjsKKysgICAg ICAgIGluMSA9IHRtcCArIDU7CisrICAgICAgICBpbjFsZW4gPSAxOworKyAgICB9CisrICAgIGZv ciAoOzspIHsKKysgICAgICAgIGlmICghRklQU19kaWdlc3Rpbml0KG1jdHgsIGRjdHgtPmQuaGFz aC5tZCkpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoIUZJUFNfZGlnZXN0 dXBkYXRlKG1jdHgsIHRtcCwgNSkpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBp ZiAoaW4xICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjEsIGluMWxlbikpCisrICAgICAg ICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoaW4yICYmICFGSVBTX2RpZ2VzdHVwZGF0ZSht Y3R4LCBpbjIsIGluMmxlbikpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAo aW4zICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4LCBpbjMsIGluM2xlbikpCisrICAgICAgICAg ICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoaW40ICYmICFGSVBTX2RpZ2VzdHVwZGF0ZShtY3R4 LCBpbjQsIGluNGxlbikpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAob3V0 bGVuIDwgZGN0eC0+YmxvY2tsZW5ndGgpIHsKKysgICAgICAgICAgICBpZiAoIUZJUFNfZGlnZXN0 ZmluYWwobWN0eCwgdnRtcCwgTlVMTCkpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAg ICAgICAgICAgIG1lbWNweShvdXQsIHZ0bXAsIG91dGxlbik7CisrICAgICAgICAgICAgT1BFTlNT TF9jbGVhbnNlKHZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysgICAgICAgICAgICByZXR1cm4g MTsKKysgICAgICAgIH0gZWxzZSBpZiAoIUZJUFNfZGlnZXN0ZmluYWwobWN0eCwgb3V0LCBOVUxM KSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysKKysgICAgICAgIG91dGxlbiAtPSBkY3R4LT5i bG9ja2xlbmd0aDsKKysgICAgICAgIGlmIChvdXRsZW4gPT0gMCkKKysgICAgICAgICAgICByZXR1 cm4gMTsKKysgICAgICAgIHRtcFswXSsrOworKyAgICAgICAgb3V0ICs9IGRjdHgtPmJsb2NrbGVu Z3RoOworKyAgICB9CisrfQorKworKy8qIEFkZCBhbiB1bnNpZ25lZCBidWZmZXIgdG8gdGhlIGJ1 ZiB2YWx1ZSwgc3RvcmluZyB0aGUgcmVzdWx0IGluIGJ1Zi4gRm9yCisrICogdGhpcyBhbGdvcml0 aG0gdGhlIGxlbmd0aCBvZiBpbnB1dCBuZXZlciBleGNlZWRzIHRoZSBzZWVkIGxlbmd0aC4KKysg Ki8KKysKKytzdGF0aWMgdm9pZCBjdHhfYWRkX2J1ZihEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQg Y2hhciAqYnVmLAorKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmluLCBz aXplX3QgaW5sZW4pCisreworKyAgICBzaXplX3QgaSA9IGlubGVuOworKyAgICBjb25zdCB1bnNp Z25lZCBjaGFyICpxOworKyAgICB1bnNpZ25lZCBjaGFyIGMsICpwOworKyAgICBwID0gYnVmICsg ZGN0eC0+c2VlZGxlbjsKKysgICAgcSA9IGluICsgaW5sZW47CisrCisrICAgIE9QRU5TU0xfYXNz ZXJ0KGkgPD0gZGN0eC0+c2VlZGxlbik7CisrCisrICAgIC8qIFNwZWNpYWwgY2FzZTogemVybyBs ZW5ndGgsIGp1c3QgaW5jcmVtZW50IGJ1ZmZlciAqLworKyAgICBpZiAoaSkKKysgICAgICAgIGMg PSAwOworKyAgICBlbHNlCisrICAgICAgICBjID0gMTsKKysKKysgICAgd2hpbGUgKGkpIHsKKysg ICAgICAgIGludCByOworKyAgICAgICAgcC0tOworKyAgICAgICAgcS0tOworKyAgICAgICAgciA9 ICpwICsgKnEgKyBjOworKyAgICAgICAgLyogQ2FycnkgKi8KKysgICAgICAgIGlmIChyID4gMHhm ZikKKysgICAgICAgICAgICBjID0gMTsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAgICBjID0g MDsKKysgICAgICAgICpwID0gciAmIDB4ZmY7CisrICAgICAgICBpLS07CisrICAgIH0KKysKKysg ICAgaSA9IGRjdHgtPnNlZWRsZW4gLSBpbmxlbjsKKysKKysgICAgLyogSWYgbm90IGFkZGluZyB3 aG9sZSBidWZmZXIgaGFuZGxlIGZpbmFsIGNhcnJpZXMgKi8KKysgICAgaWYgKGMgJiYgaSkgewor KyAgICAgICAgZG8geworKyAgICAgICAgICAgIHAtLTsKKysgICAgICAgICAgICBjID0gKnA7Cisr ICAgICAgICAgICAgYysrOworKyAgICAgICAgICAgICpwID0gYzsKKysgICAgICAgICAgICBpZiAo YykKKysgICAgICAgICAgICAgICAgcmV0dXJuOworKyAgICAgICAgfSB3aGlsZSAoaS0tKTsKKysg ICAgfQorK30KKysKKysvKiBGaW5hbGlzZSBhbmQgYWRkIGhhc2ggdG8gViAqLworKworK3N0YXRp YyBpbnQgY3R4X2FkZF9tZChEUkJHX0NUWCAqZGN0eCkKKyt7CisrICAgIGlmICghRklQU19kaWdl c3RmaW5hbCgmZGN0eC0+ZC5oYXNoLm1jdHgsIGRjdHgtPmQuaGFzaC52dG1wLCBOVUxMKSkKKysg ICAgICAgIHJldHVybiAwOworKyAgICBjdHhfYWRkX2J1ZihkY3R4LCBkY3R4LT5kLmhhc2guViwg ZGN0eC0+ZC5oYXNoLnZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysgICAgcmV0dXJuIDE7Cisr fQorKworK3N0YXRpYyBpbnQgaGFzaF9nZW4oRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNoYXIg Km91dCwgc2l6ZV90IG91dGxlbikKKyt7CisrICAgIERSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0 eC0+ZC5oYXNoOworKyAgICBpZiAob3V0bGVuID09IDApCisrICAgICAgICByZXR1cm4gMTsKKysg ICAgbWVtY3B5KGhjdHgtPnZ0bXAsIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4pOworKyAgICBmb3Ig KDs7KSB7CisrICAgICAgICBGSVBTX2RpZ2VzdGluaXQoJmhjdHgtPm1jdHgsIGhjdHgtPm1kKTsK KysgICAgICAgIEZJUFNfZGlnZXN0dXBkYXRlKCZoY3R4LT5tY3R4LCBoY3R4LT52dG1wLCBkY3R4 LT5zZWVkbGVuKTsKKysgICAgICAgIGlmICghKGRjdHgtPnhmbGFncyAmIERSQkdfRkxBR19URVNU KSAmJiAhZGN0eC0+bGJfdmFsaWQpIHsKKysgICAgICAgICAgICBGSVBTX2RpZ2VzdGZpbmFsKCZo Y3R4LT5tY3R4LCBkY3R4LT5sYiwgTlVMTCk7CisrICAgICAgICAgICAgZGN0eC0+bGJfdmFsaWQg PSAxOworKyAgICAgICAgfSBlbHNlIGlmIChvdXRsZW4gPCBkY3R4LT5ibG9ja2xlbmd0aCkgewor KyAgICAgICAgICAgIEZJUFNfZGlnZXN0ZmluYWwoJmhjdHgtPm1jdHgsIGhjdHgtPnZ0bXAsIE5V TEwpOworKyAgICAgICAgICAgIGlmICghZmlwc19kcmJnX2Nwcm5nX3Rlc3QoZGN0eCwgaGN0eC0+ dnRtcCkpCisrICAgICAgICAgICAgICAgIHJldHVybiAwOworKyAgICAgICAgICAgIG1lbWNweShv dXQsIGhjdHgtPnZ0bXAsIG91dGxlbik7CisrICAgICAgICAgICAgcmV0dXJuIDE7CisrICAgICAg ICB9IGVsc2UgeworKyAgICAgICAgICAgIEZJUFNfZGlnZXN0ZmluYWwoJmhjdHgtPm1jdHgsIG91 dCwgTlVMTCk7CisrICAgICAgICAgICAgaWYgKCFmaXBzX2RyYmdfY3BybmdfdGVzdChkY3R4LCBv dXQpKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICBvdXRsZW4gLT0g ZGN0eC0+YmxvY2tsZW5ndGg7CisrICAgICAgICAgICAgaWYgKG91dGxlbiA9PSAwKQorKyAgICAg ICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgICAgICBvdXQgKz0gZGN0eC0+YmxvY2tsZW5n dGg7CisrICAgICAgICB9CisrICAgICAgICBjdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT52dG1wLCBO VUxMLCAwKTsKKysgICAgfQorK30KKysKKytzdGF0aWMgaW50IGRyYmdfaGFzaF9pbnN0YW50aWF0 ZShEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCBzaXplX3Qgbm9uY2Vf bGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXIgKnBzdHIsIHNpemVfdCBwc3RyX2xlbikKKyt7CisrICAgIERSQkdfSEFTSF9DVFggKmhjdHgg PSAmZGN0eC0+ZC5oYXNoOworKyAgICBpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+ViwKKysgICAg ICAgICAgICAgICAgIGVudCwgZW50X2xlbiwgbm9uY2UsIG5vbmNlX2xlbiwgcHN0ciwgcHN0cl9s ZW4sIE5VTEwsIDApKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICghaGFzaF9kZihkY3R4 LCBoY3R4LT5DLAorKyAgICAgICAgICAgICAgICAgTlVMTCwgMCwgaGN0eC0+ViwgZGN0eC0+c2Vl ZGxlbiwgTlVMTCwgMCwgTlVMTCwgMCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysjaWZkZWYg SEFTSF9EUkJHX1RSQUNFCisrICAgIGZwcmludGYoc3RkZXJyLCAiVitDIGFmdGVyIGluc3RhbnRp YXRlOlxuIik7CisrICAgIGhleHByaW50KHN0ZGVyciwgaGN0eC0+ViwgZGN0eC0+c2VlZGxlbik7 CisrICAgIGhleHByaW50KHN0ZGVyciwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7CisrI2VuZGlm CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGRyYmdfaGFzaF9yZXNlZWQoRFJC R19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmVudCwgc2l6ZV90IGVudF9sZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGluX2xlbikKKyt7CisrICAgIERS QkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKyAgICAvKiBWIGFib3V0IHRvIGJl IHVwZGF0ZWQgc28gdXNlIEMgYXMgb3V0cHV0IGluc3RlYWQgKi8KKysgICAgaWYgKCFoYXNoX2Rm KGRjdHgsIGhjdHgtPkMsCisrICAgICAgICAgICAgICAgICBOVUxMLCAxLCBoY3R4LT5WLCBkY3R4 LT5zZWVkbGVuLAorKyAgICAgICAgICAgICAgICAgZW50LCBlbnRfbGVuLCBhZGluLCBhZGluX2xl bikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgbWVtY3B5KGhjdHgtPlYsIGhjdHgtPkMsIGRj dHgtPnNlZWRsZW4pOworKyAgICBpZiAoIWhhc2hfZGYoZGN0eCwgaGN0eC0+QywgTlVMTCwgMCwK KysgICAgICAgICAgICAgICAgIGhjdHgtPlYsIGRjdHgtPnNlZWRsZW4sIE5VTEwsIDAsIE5VTEws IDApKQorKyAgICAgICAgcmV0dXJuIDA7CisrI2lmZGVmIEhBU0hfRFJCR19UUkFDRQorKyAgICBm cHJpbnRmKHN0ZGVyciwgIlYrQyBhZnRlciByZXNlZWQ6XG4iKTsKKysgICAgaGV4cHJpbnQoc3Rk ZXJyLCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4 LT5DLCBkY3R4LT5zZWVkbGVuKTsKKysjZW5kaWYKKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0 YXRpYyBpbnQgZHJiZ19oYXNoX2dlbmVyYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBz aXplX3QgYWRpbl9sZW4pCisreworKyAgICBEUkJHX0hBU0hfQ1RYICpoY3R4ID0gJmRjdHgtPmQu aGFzaDsKKysgICAgRVZQX01EX0NUWCAqbWN0eCA9ICZoY3R4LT5tY3R4OworKyAgICB1bnNpZ25l ZCBjaGFyIHRtcFs0XTsKKysgICAgaWYgKGFkaW4gJiYgYWRpbl9sZW4pIHsKKysgICAgICAgIHRt cFswXSA9IDI7CisrICAgICAgICBpZiAoIUZJUFNfZGlnZXN0aW5pdChtY3R4LCBoY3R4LT5tZCkp CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoIUVWUF9EaWdlc3RVcGRhdGUo bWN0eCwgdG1wLCAxKSkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGlmICghRVZQ X0RpZ2VzdFVwZGF0ZShtY3R4LCBoY3R4LT5WLCBkY3R4LT5zZWVkbGVuKSkKKysgICAgICAgICAg ICByZXR1cm4gMDsKKysgICAgICAgIGlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBhZGluLCBh ZGluX2xlbikpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICBpZiAoIWN0eF9hZGRf bWQoZGN0eCkpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgaWYgKCFoYXNo X2dlbihkY3R4LCBvdXQsIG91dGxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgdG1w WzBdID0gMzsKKysgICAgaWYgKCFGSVBTX2RpZ2VzdGluaXQobWN0eCwgaGN0eC0+bWQpKQorKyAg ICAgICAgcmV0dXJuIDA7CisrICAgIGlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCB0bXAsIDEp KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICghRVZQX0RpZ2VzdFVwZGF0ZShtY3R4LCBo Y3R4LT5WLCBkY3R4LT5zZWVkbGVuKSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICBpZiAo IWN0eF9hZGRfbWQoZGN0eCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgY3R4X2FkZF9i dWYoZGN0eCwgaGN0eC0+ViwgaGN0eC0+QywgZGN0eC0+c2VlZGxlbik7CisrCisrICAgIHRtcFsw XSA9IChkY3R4LT5yZXNlZWRfY291bnRlciA+PiAyNCkgJiAweGZmOworKyAgICB0bXBbMV0gPSAo ZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj4gMTYpICYgMHhmZjsKKysgICAgdG1wWzJdID0gKGRjdHgt PnJlc2VlZF9jb3VudGVyID4+IDgpICYgMHhmZjsKKysgICAgdG1wWzNdID0gZGN0eC0+cmVzZWVk X2NvdW50ZXIgJiAweGZmOworKyAgICBjdHhfYWRkX2J1ZihkY3R4LCBoY3R4LT5WLCB0bXAsIDQp OworKyNpZmRlZiBIQVNIX0RSQkdfVFJBQ0UKKysgICAgZnByaW50ZihzdGRlcnIsICJWK0MgYWZ0 ZXIgZ2VuZXJhdGU6XG4iKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5WLCBkY3R4LT5z ZWVkbGVuKTsKKysgICAgaGV4cHJpbnQoc3RkZXJyLCBoY3R4LT5DLCBkY3R4LT5zZWVkbGVuKTsK KysjZW5kaWYKKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQgZHJiZ19oYXNoX3Vu aW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisreworKyAgICBFVlBfTURfQ1RYX2NsZWFudXAo JmRjdHgtPmQuaGFzaC5tY3R4KTsKKysgICAgT1BFTlNTTF9jbGVhbnNlKCZkY3R4LT5kLmhhc2gs IHNpemVvZihEUkJHX0hBU0hfQ1RYKSk7CisrICAgIHJldHVybiAxOworK30KKysKKytpbnQgZmlw c19kcmJnX2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0eCkKKyt7CisrICAgIGNvbnN0IEVWUF9NRCAq bWQ7CisrICAgIERSQkdfSEFTSF9DVFggKmhjdHggPSAmZGN0eC0+ZC5oYXNoOworKyAgICBtZCA9 IEZJUFNfZ2V0X2RpZ2VzdGJ5bmlkKGRjdHgtPnR5cGUpOworKyAgICBpZiAoIW1kKQorKyAgICAg ICAgcmV0dXJuIC0yOworKyAgICBzd2l0Y2ggKGRjdHgtPnR5cGUpIHsKKysgICAgY2FzZSBOSURf c2hhMToKKysgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTI4OworKyAgICAgICAgYnJlYWs7Cisr CisrICAgIGNhc2UgTklEX3NoYTIyNDoKKysgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTkyOwor KyAgICAgICAgYnJlYWs7CisrCisrICAgIGRlZmF1bHQ6CisrICAgICAgICBkY3R4LT5zdHJlbmd0 aCA9IDI1NjsKKysgICAgICAgIGJyZWFrOworKyAgICB9CisrCisrICAgIGRjdHgtPmluc3RhbnRp YXRlID0gZHJiZ19oYXNoX2luc3RhbnRpYXRlOworKyAgICBkY3R4LT5yZXNlZWQgPSBkcmJnX2hh c2hfcmVzZWVkOworKyAgICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaGFzaF9nZW5lcmF0ZTsKKysg ICAgZGN0eC0+dW5pbnN0YW50aWF0ZSA9IGRyYmdfaGFzaF91bmluc3RhbnRpYXRlOworKworKyAg ICBkY3R4LT5kLmhhc2gubWQgPSBtZDsKKysgICAgRVZQX01EX0NUWF9pbml0KCZoY3R4LT5tY3R4 KTsKKysKKysgICAgLyogVGhlc2UgYXJlIHRha2VuIGZyb20gU1AgODAwLTkwIDEwLjEgdGFibGUg MiAqLworKworKyAgICBkY3R4LT5ibG9ja2xlbmd0aCA9IE1fRVZQX01EX3NpemUobWQpOworKyAg ICBpZiAoZGN0eC0+YmxvY2tsZW5ndGggPiAzMikKKysgICAgICAgIGRjdHgtPnNlZWRsZW4gPSAx MTE7CisrICAgIGVsc2UKKysgICAgICAgIGRjdHgtPnNlZWRsZW4gPSA1NTsKKysKKysgICAgZGN0 eC0+bWluX2VudHJvcHkgPSBkY3R4LT5zdHJlbmd0aCAvIDg7CisrICAgIGRjdHgtPm1heF9lbnRy b3B5ID0gRFJCR19NQVhfTEVOR1RIOworKworKyAgICBkY3R4LT5taW5fbm9uY2UgPSBkY3R4LT5t aW5fZW50cm9weSAvIDI7CisrICAgIGRjdHgtPm1heF9ub25jZSA9IERSQkdfTUFYX0xFTkdUSDsK KysKKysgICAgZGN0eC0+bWF4X3BlcnMgPSBEUkJHX01BWF9MRU5HVEg7CisrICAgIGRjdHgtPm1h eF9hZGluID0gRFJCR19NQVhfTEVOR1RIOworKworKyAgICBkY3R4LT5tYXhfcmVxdWVzdCA9IDEg PDwgMTY7CisrICAgIGRjdHgtPnJlc2VlZF9pbnRlcnZhbCA9IDEgPDwgMjQ7CisrCisrICAgIHJl dHVybiAxOworK30KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfZHJi Z19obWFjLmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfaG1hYy5j CistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYy5maXBzCTIw MTYtMDUtMDMgMTY6NTc6NTguODI3MzIxMTM0ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX2htYWMuYwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgyNzMyMTEzNCAr MDIwMAorQEAgLTAsMCArMSwyNzAgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX2htYWMuYyAq LworKy8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcp IGZvciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0Ogor KyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NM Lm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1h eSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVh ciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9u IG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2Yg YW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNr bm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl bG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5T U0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5Z CisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM VURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJp bmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVz Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNf cmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrc3RhdGljIGludCBkcmJn X2htYWNfdXBkYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICppbjEsIHNpemVfdCBpbjFsZW4sCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluMiwgc2l6ZV90IGluMmxlbiwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4zLCBz aXplX3QgaW4zbGVuKQorK3sKKysgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgYzAgPSAwLCBjMSA9 IDE7CisrICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOworKyAgICBITUFD X0NUWCAqaGN0eCA9ICZobWFjLT5oY3R4OworKworKyAgICBpZiAoIUhNQUNfSW5pdF9leChoY3R4 LCBobWFjLT5LLCBkY3R4LT5ibG9ja2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQorKyAgICAgICAg cmV0dXJuIDA7CisrICAgIGlmICghSE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+Ymxv Y2tsZW5ndGgpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICghSE1BQ19VcGRhdGUoaGN0 eCwgJmMwLCAxKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoaW4xbGVuICYmICFITUFD X1VwZGF0ZShoY3R4LCBpbjEsIGluMWxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYg KGluMmxlbiAmJiAhSE1BQ19VcGRhdGUoaGN0eCwgaW4yLCBpbjJsZW4pKQorKyAgICAgICAgcmV0 dXJuIDA7CisrICAgIGlmIChpbjNsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMywgaW4zbGVu KSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICBpZiAoIUhNQUNfRmluYWwoaGN0eCwgaG1h Yy0+SywgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgaWYgKCFITUFDX0luaXRf ZXgoaGN0eCwgaG1hYy0+SywgZGN0eC0+YmxvY2tsZW5ndGgsIGhtYWMtPm1kLCBOVUxMKSkKKysg ICAgICAgIHJldHVybiAwOworKyAgICBpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIGhtYWMtPlYsIGRj dHgtPmJsb2NrbGVuZ3RoKSkKKysgICAgICAgIHJldHVybiAwOworKworKyAgICBpZiAoIUhNQUNf RmluYWwoaGN0eCwgaG1hYy0+ViwgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAg aWYgKCFpbjFsZW4gJiYgIWluMmxlbiAmJiAhaW4zbGVuKQorKyAgICAgICAgcmV0dXJuIDE7Cisr CisrICAgIGlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJsb2NrbGVuZ3Ro LCBobWFjLT5tZCwgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKCFITUFDX1Vw ZGF0ZShoY3R4LCBobWFjLT5WLCBkY3R4LT5ibG9ja2xlbmd0aCkpCisrICAgICAgICByZXR1cm4g MDsKKysgICAgaWYgKCFITUFDX1VwZGF0ZShoY3R4LCAmYzEsIDEpKQorKyAgICAgICAgcmV0dXJu IDA7CisrICAgIGlmIChpbjFsZW4gJiYgIUhNQUNfVXBkYXRlKGhjdHgsIGluMSwgaW4xbGVuKSkK KysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoaW4ybGVuICYmICFITUFDX1VwZGF0ZShoY3R4 LCBpbjIsIGluMmxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYgKGluM2xlbiAmJiAh SE1BQ19VcGRhdGUoaGN0eCwgaW4zLCBpbjNsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisr ICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5LLCBOVUxMKSkKKysgICAgICAgIHJldHVy biAwOworKworKyAgICBpZiAoIUhNQUNfSW5pdF9leChoY3R4LCBobWFjLT5LLCBkY3R4LT5ibG9j a2xlbmd0aCwgaG1hYy0+bWQsIE5VTEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICgh SE1BQ19VcGRhdGUoaGN0eCwgaG1hYy0+ViwgZGN0eC0+YmxvY2tsZW5ndGgpKQorKyAgICAgICAg cmV0dXJuIDA7CisrCisrICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkK KysgICAgICAgIHJldHVybiAwOworKworKyAgICByZXR1cm4gMTsKKysKKyt9CisrCisrc3RhdGlj IGludCBkcmJnX2htYWNfaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZW50LCBzaXplX3QgZW50 X2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICpub25jZSwgc2l6ZV90IG5vbmNlX2xlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwc3RyLCBzaXplX3QgcHN0cl9sZW4pCisrewor KyAgICBEUkJHX0hNQUNfQ1RYICpobWFjID0gJmRjdHgtPmQuaG1hYzsKKysgICAgbWVtc2V0KGht YWMtPkssIDAsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysgICAgbWVtc2V0KGhtYWMtPlYsIDEsIGRj dHgtPmJsb2NrbGVuZ3RoKTsKKysgICAgaWYgKCFkcmJnX2htYWNfdXBkYXRlKGRjdHgsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICBlbnQsIGVudF9sZW4sIG5vbmNlLCBub25jZV9sZW4sIHBz dHIsIHBzdHJfbGVuKSkKKysgICAgICAgIHJldHVybiAwOworKworKyNpZmRlZiBITUFDX0RSQkdf VFJBQ0UKKysgICAgZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgaW5zdGFudGlhdGU6XG4iKTsK KysgICAgaGV4cHJpbnQoc3RkZXJyLCBobWFjLT5LLCBobWFjLT5ibG9ja2xlbmd0aCk7CisrICAg IGhleHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2tsZW5ndGgpOworKyNlbmRpZgor KyAgICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludCBkcmJnX2htYWNfcmVzZWVkKERSQkdf Q1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICplbnQsIHNpemVfdCBlbnRfbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRpbl9sZW4pCisreworKyAgICBpZiAo IWRyYmdfaG1hY191cGRhdGUoZGN0eCwgZW50LCBlbnRfbGVuLCBhZGluLCBhZGluX2xlbiwgTlVM TCwgMCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysjaWZkZWYgSE1BQ19EUkJHX1RSQUNFCisr ICAgIHsKKysgICAgICAgIERSQkdfSE1BQ19DVFggKmhtYWMgPSAmZGN0eC0+ZC5obWFjOworKyAg ICAgICAgZnByaW50ZihzdGRlcnIsICJLK1YgYWZ0ZXIgcmVzZWVkOlxuIik7CisrICAgICAgICBo ZXhwcmludChzdGRlcnIsIGhtYWMtPkssIGhtYWMtPmJsb2NrbGVuZ3RoKTsKKysgICAgICAgIGhl eHByaW50KHN0ZGVyciwgaG1hYy0+ViwgaG1hYy0+YmxvY2tsZW5ndGgpOworKyAgICB9CisrI2Vu ZGlmCisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGRyYmdfaG1hY19nZW5lcmF0 ZShEUkJHX0NUWCAqZGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBjaGFyICpvdXQsIHNpemVfdCBvdXRsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbiwgc2l6ZV90IGFkaW5fbGVuKQorK3sKKysgICAg RFJCR19ITUFDX0NUWCAqaG1hYyA9ICZkY3R4LT5kLmhtYWM7CisrICAgIEhNQUNfQ1RYICpoY3R4 ID0gJmhtYWMtPmhjdHg7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKlZ0bXAgPSBobWFjLT5W OworKyAgICBpZiAoYWRpbl9sZW4gJiYgIWRyYmdfaG1hY191cGRhdGUoZGN0eCwgYWRpbiwgYWRp bl9sZW4sIE5VTEwsIDAsIE5VTEwsIDApKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGZvciAo OzspIHsKKysgICAgICAgIGlmICghSE1BQ19Jbml0X2V4KGhjdHgsIGhtYWMtPkssIGRjdHgtPmJs b2NrbGVuZ3RoLCBobWFjLT5tZCwgTlVMTCkpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAg ICAgICBpZiAoIUhNQUNfVXBkYXRlKGhjdHgsIFZ0bXAsIGRjdHgtPmJsb2NrbGVuZ3RoKSkKKysg ICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIGlmICghKGRjdHgtPnhmbGFncyAmIERSQkdf RkxBR19URVNUKSAmJiAhZGN0eC0+bGJfdmFsaWQpIHsKKysgICAgICAgICAgICBpZiAoIUhNQUNf RmluYWwoaGN0eCwgZGN0eC0+bGIsIE5VTEwpKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK KysgICAgICAgICAgICBkY3R4LT5sYl92YWxpZCA9IDE7CisrICAgICAgICAgICAgVnRtcCA9IGRj dHgtPmxiOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfSBlbHNlIGlmIChvdXRs ZW4gPiBkY3R4LT5ibG9ja2xlbmd0aCkgeworKyAgICAgICAgICAgIGlmICghSE1BQ19GaW5hbCho Y3R4LCBvdXQsIE5VTEwpKQorKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAg ICBpZiAoIWZpcHNfZHJiZ19jcHJuZ190ZXN0KGRjdHgsIG91dCkpCisrICAgICAgICAgICAgICAg IHJldHVybiAwOworKyAgICAgICAgICAgIFZ0bXAgPSBvdXQ7CisrICAgICAgICB9IGVsc2Ugewor KyAgICAgICAgICAgIGlmICghSE1BQ19GaW5hbChoY3R4LCBobWFjLT5WLCBOVUxMKSkKKysgICAg ICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgaWYgKCFmaXBzX2RyYmdfY3Bybmdf dGVzdChkY3R4LCBobWFjLT5WKSkKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAg ICAgICAgbWVtY3B5KG91dCwgaG1hYy0+Viwgb3V0bGVuKTsKKysgICAgICAgICAgICBicmVhazsK KysgICAgICAgIH0KKysgICAgICAgIG91dCArPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysgICAgICAg IG91dGxlbiAtPSBkY3R4LT5ibG9ja2xlbmd0aDsKKysgICAgfQorKyAgICBpZiAoIWRyYmdfaG1h Y191cGRhdGUoZGN0eCwgYWRpbiwgYWRpbl9sZW4sIE5VTEwsIDAsIE5VTEwsIDApKQorKyAgICAg ICAgcmV0dXJuIDA7CisrCisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGRyYmdf aG1hY191bmluc3RhbnRpYXRlKERSQkdfQ1RYICpkY3R4KQorK3sKKysgICAgSE1BQ19DVFhfY2xl YW51cCgmZGN0eC0+ZC5obWFjLmhjdHgpOworKyAgICBPUEVOU1NMX2NsZWFuc2UoJmRjdHgtPmQu aG1hYywgc2l6ZW9mKERSQkdfSE1BQ19DVFgpKTsKKysgICAgcmV0dXJuIDE7CisrfQorKworK2lu dCBmaXBzX2RyYmdfaG1hY19pbml0KERSQkdfQ1RYICpkY3R4KQorK3sKKysgICAgY29uc3QgRVZQ X01EICptZCA9IE5VTEw7CisrICAgIERSQkdfSE1BQ19DVFggKmhjdHggPSAmZGN0eC0+ZC5obWFj OworKyAgICBkY3R4LT5zdHJlbmd0aCA9IDI1NjsKKysgICAgc3dpdGNoIChkY3R4LT50eXBlKSB7 CisrICAgIGNhc2UgTklEX2htYWNXaXRoU0hBMToKKysgICAgICAgIG1kID0gRVZQX3NoYTEoKTsK KysgICAgICAgIGRjdHgtPnN0cmVuZ3RoID0gMTI4OworKyAgICAgICAgYnJlYWs7CisrCisrICAg IGNhc2UgTklEX2htYWNXaXRoU0hBMjI0OgorKyAgICAgICAgbWQgPSBFVlBfc2hhMjI0KCk7Cisr ICAgICAgICBkY3R4LT5zdHJlbmd0aCA9IDE5MjsKKysgICAgICAgIGJyZWFrOworKworKyAgICBj YXNlIE5JRF9obWFjV2l0aFNIQTI1NjoKKysgICAgICAgIG1kID0gRVZQX3NoYTI1NigpOworKyAg ICAgICAgYnJlYWs7CisrCisrICAgIGNhc2UgTklEX2htYWNXaXRoU0hBMzg0OgorKyAgICAgICAg bWQgPSBFVlBfc2hhMzg0KCk7CisrICAgICAgICBicmVhazsKKysKKysgICAgY2FzZSBOSURfaG1h Y1dpdGhTSEE1MTI6CisrICAgICAgICBtZCA9IEVWUF9zaGE1MTIoKTsKKysgICAgICAgIGJyZWFr OworKworKyAgICBkZWZhdWx0OgorKyAgICAgICAgZGN0eC0+c3RyZW5ndGggPSAwOworKyAgICAg ICAgcmV0dXJuIC0yOworKyAgICB9CisrICAgIGRjdHgtPmluc3RhbnRpYXRlID0gZHJiZ19obWFj X2luc3RhbnRpYXRlOworKyAgICBkY3R4LT5yZXNlZWQgPSBkcmJnX2htYWNfcmVzZWVkOworKyAg ICBkY3R4LT5nZW5lcmF0ZSA9IGRyYmdfaG1hY19nZW5lcmF0ZTsKKysgICAgZGN0eC0+dW5pbnN0 YW50aWF0ZSA9IGRyYmdfaG1hY191bmluc3RhbnRpYXRlOworKyAgICBITUFDX0NUWF9pbml0KCZo Y3R4LT5oY3R4KTsKKysgICAgaGN0eC0+bWQgPSBtZDsKKysgICAgZGN0eC0+YmxvY2tsZW5ndGgg PSBNX0VWUF9NRF9zaXplKG1kKTsKKysgICAgZGN0eC0+c2VlZGxlbiA9IE1fRVZQX01EX3NpemUo bWQpOworKworKyAgICBkY3R4LT5taW5fZW50cm9weSA9IGRjdHgtPnN0cmVuZ3RoIC8gODsKKysg ICAgZGN0eC0+bWF4X2VudHJvcHkgPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAgIGRjdHgtPm1p bl9ub25jZSA9IGRjdHgtPm1pbl9lbnRyb3B5IC8gMjsKKysgICAgZGN0eC0+bWF4X25vbmNlID0g RFJCR19NQVhfTEVOR1RIOworKworKyAgICBkY3R4LT5tYXhfcGVycyA9IERSQkdfTUFYX0xFTkdU SDsKKysgICAgZGN0eC0+bWF4X2FkaW4gPSBEUkJHX01BWF9MRU5HVEg7CisrCisrICAgIGRjdHgt Pm1heF9yZXF1ZXN0ID0gMSA8PCAxNjsKKysgICAgZGN0eC0+cmVzZWVkX2ludGVydmFsID0gMSA8 PCAyNDsKKysKKysgICAgcmV0dXJuIDE7CisrfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5 cHRvL2ZpcHMvZmlwc19kcmJnX2xpYi5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMv Zmlwc19kcmJnX2xpYi5jCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19kcmJn X2xpYi5jLmZpcHMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MjczMjExMzQgKzAyMDAKKysrKyBvcGVu c3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfbGliLmMJMjAxNi0wNS0wMyAxNjo1Nzo1 OC44MjczMjExMzQgKzAyMDAKK0BAIC0wLDAgKzEsNTUzIEBACisrLyogV3JpdHRlbiBieSBEciBT dGVwaGVuIE4gSGVuc29uIChzdGV2ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICog cHJvamVjdC4KKysgKi8KKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBU aGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlz dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0 aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm b2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRo ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK KysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJp YWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBt dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVu U1NMLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAi T3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBw cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAg ICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFz ZSBjb250YWN0CisrICogICAgbGljZW5zaW5nQE9wZW5TU0wub3JnLgorKyAqCisrICogNS4gUHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5T U0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhv dXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVj dC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11 c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAi VGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQ cm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3 Lk9wZW5TU0wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI RSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1Q TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICog SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM IFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBM QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisr ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUg UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysj aW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1 ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2lu Y2x1ZGUgImZpcHNfbG9jbC5oIgorKyNpbmNsdWRlICJmaXBzX3JhbmRfbGNsLmgiCisrCisrLyog U3VwcG9ydCBmcmFtZXdvcmsgZm9yIFNQODAwLTkwIERSQkdzICovCisrCisraW50IEZJUFNfZHJi Z19pbml0KERSQkdfQ1RYICpkY3R4LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQorK3sK KysgICAgaW50IHJ2OworKyAgICBtZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7Cisr ICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7CisrICAgIGRjdHgt PnhmbGFncyA9IGZsYWdzOworKyAgICBkY3R4LT50eXBlID0gdHlwZTsKKysKKysgICAgZGN0eC0+ aWZsYWdzID0gMDsKKysgICAgZGN0eC0+ZW50cm9weV9ibG9ja2xlbiA9IDA7CisrICAgIGRjdHgt PmhlYWx0aF9jaGVja19jbnQgPSAwOworKyAgICBkY3R4LT5oZWFsdGhfY2hlY2tfaW50ZXJ2YWwg PSBEUkJHX0hFQUxUSF9JTlRFUlZBTDsKKysKKysgICAgcnYgPSBmaXBzX2RyYmdfaGFzaF9pbml0 KGRjdHgpOworKworKyAgICBpZiAocnYgPT0gLTIpCisrICAgICAgICBydiA9IGZpcHNfZHJiZ19j dHJfaW5pdChkY3R4KTsKKysgICAgaWYgKHJ2ID09IC0yKQorKyAgICAgICAgcnYgPSBmaXBzX2Ry YmdfaG1hY19pbml0KGRjdHgpOworKworKyAgICBpZiAocnYgPD0gMCkgeworKyAgICAgICAgaWYg KHJ2ID09IC0yKQorKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTklULCBG SVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFKTsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5JVCwgRklQU19SX0VSUk9SX0lOSVRJQUxJU0lO R19EUkJHKTsKKysgICAgfQorKworKyAgICAvKiBJZiBub3QgaW4gdGVzdCBtb2RlIHJ1biBzZWxm dGVzdHMgb24gRFJCRyBvZiB0aGUgc2FtZSB0eXBlICovCisrCisrICAgIGlmICghKGRjdHgtPnhm bGFncyAmIERSQkdfRkxBR19URVNUKSkgeworKyAgICAgICAgaWYgKCFGSVBTX2RyYmdfaGVhbHRo X2NoZWNrKGRjdHgpKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lO SVQsIEZJUFNfUl9TRUxGVEVTVF9GQUlMVVJFKTsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysg ICAgICAgIH0KKysgICAgfQorKworKyAgICByZXR1cm4gcnY7CisrfQorKworK0RSQkdfQ1RYICpG SVBTX2RyYmdfbmV3KGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCisreworKyAgICBEUkJH X0NUWCAqZGN0eDsKKysgICAgZGN0eCA9IE9QRU5TU0xfbWFsbG9jKHNpemVvZihEUkJHX0NUWCkp OworKyAgICBpZiAoIWRjdHgpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19O RVcsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKysgICAgICAgIHJldHVybiBOVUxMOworKyAgICB9 CisrCisrICAgIGlmICh0eXBlID09IDApIHsKKysgICAgICAgIG1lbXNldChkY3R4LCAwLCBzaXpl b2YoRFJCR19DVFgpKTsKKysgICAgICAgIGRjdHgtPnR5cGUgPSAwOworKyAgICAgICAgZGN0eC0+ c3RhdHVzID0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRDsKKysgICAgICAgIHJldHVybiBkY3R4 OworKyAgICB9CisrCisrICAgIGlmIChGSVBTX2RyYmdfaW5pdChkY3R4LCB0eXBlLCBmbGFncykg PD0gMCkgeworKyAgICAgICAgT1BFTlNTTF9mcmVlKGRjdHgpOworKyAgICAgICAgcmV0dXJuIE5V TEw7CisrICAgIH0KKysKKysgICAgcmV0dXJuIGRjdHg7CisrfQorKworK3ZvaWQgRklQU19kcmJn X2ZyZWUoRFJCR19DVFggKmRjdHgpCisreworKyAgICBpZiAoZGN0eC0+dW5pbnN0YW50aWF0ZSkK KysgICAgICAgIGRjdHgtPnVuaW5zdGFudGlhdGUoZGN0eCk7CisrICAgIC8qIERvbid0IGZyZWUg dXAgZGVmYXVsdCBEUkJHICovCisrICAgIGlmIChkY3R4ID09IEZJUFNfZ2V0X2RlZmF1bHRfZHJi ZygpKSB7CisrICAgICAgICBtZW1zZXQoZGN0eCwgMCwgc2l6ZW9mKERSQkdfQ1RYKSk7CisrICAg ICAgICBkY3R4LT50eXBlID0gMDsKKysgICAgICAgIGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVT X1VOSU5JVElBTElTRUQ7CisrICAgIH0gZWxzZSB7CisrICAgICAgICBPUEVOU1NMX2NsZWFuc2Uo JmRjdHgtPmQsIHNpemVvZihkY3R4LT5kKSk7CisrICAgICAgICBPUEVOU1NMX2ZyZWUoZGN0eCk7 CisrICAgIH0KKyt9CisrCisrc3RhdGljIHNpemVfdCBmaXBzX2dldF9lbnRyb3B5KERSQkdfQ1RY ICpkY3R4LCB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbikKKyt7Cisr ICAgIHVuc2lnbmVkIGNoYXIgKnRvdXQsICpwOworKyAgICBzaXplX3QgYmwgPSBkY3R4LT5lbnRy b3B5X2Jsb2NrbGVuLCBydjsKKysgICAgaWYgKCFkY3R4LT5nZXRfZW50cm9weSkKKysgICAgICAg IHJldHVybiAwOworKyAgICBpZiAoZGN0eC0+eGZsYWdzICYgRFJCR19GTEFHX1RFU1QgfHwgIWJs KQorKyAgICAgICAgcmV0dXJuIGRjdHgtPmdldF9lbnRyb3B5KGRjdHgsIHBvdXQsIGVudHJvcHks IG1pbl9sZW4sIG1heF9sZW4pOworKyAgICBydiA9IGRjdHgtPmdldF9lbnRyb3B5KGRjdHgsICZ0 b3V0LCBlbnRyb3B5ICsgYmwsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluX2xlbiAr IGJsLCBtYXhfbGVuICsgYmwpOworKyAgICBpZiAodG91dCA9PSBOVUxMKQorKyAgICAgICAgcmV0 dXJuIDA7CisrICAgICpwb3V0ID0gdG91dCArIGJsOworKyAgICBpZiAocnYgPCAobWluX2xlbiAr IGJsKSB8fCAocnYgJSBibCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgLyogQ29tcGFyZSBj b25zZWN1dGl2ZSBibG9ja3MgZm9yIGNvbnRpbnVvdXMgUFJORyB0ZXN0ICovCisrICAgIGZvciAo cCA9IHRvdXQ7IHAgPCB0b3V0ICsgcnYgLSBibDsgcCArPSBibCkgeworKyAgICAgICAgaWYgKCFt ZW1jbXAocCwgcCArIGJsLCBibCkpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X0dFVF9FTlRST1BZLCBGSVBTX1JfRU5UUk9QWV9TT1VSQ0VfU1RVQ0spOworKyAgICAgICAgICAg IHJldHVybiAwOworKyAgICAgICAgfQorKyAgICB9CisrICAgIHJ2IC09IGJsOworKyAgICBpZiAo cnYgPiBtYXhfbGVuKQorKyAgICAgICAgcmV0dXJuIG1heF9sZW47CisrICAgIHJldHVybiBydjsK Kyt9CisrCisrc3RhdGljIHZvaWQgZmlwc19jbGVhbnVwX2VudHJvcHkoRFJCR19DVFggKmRjdHgs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCBz aXplX3Qgb2xlbikKKyt7CisrICAgIHNpemVfdCBibDsKKysgICAgaWYgKGRjdHgtPnhmbGFncyAm IERSQkdfRkxBR19URVNUKQorKyAgICAgICAgYmwgPSAwOworKyAgICBlbHNlCisrICAgICAgICBi bCA9IGRjdHgtPmVudHJvcHlfYmxvY2tsZW47CisrICAgIC8qIENhbGwgY2xlYW51cCB3aXRoIG9y aWdpbmFsIGFyZ3VtZW50cyAqLworKyAgICBkY3R4LT5jbGVhbnVwX2VudHJvcHkoZGN0eCwgb3V0 IC0gYmwsIG9sZW4gKyBibCk7CisrfQorKworK2ludCBGSVBTX2RyYmdfaW5zdGFudGlhdGUoRFJC R19DVFggKmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj aGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbikKKyt7CisrICAgIHNpemVfdCBlbnRsZW4gPSAwLCBu b25jZWxlbiA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgKm5vbmNlID0gTlVMTCwgKmVudHJvcHkg PSBOVUxMOworKworKyNpZiAwCisrICAgIC8qIFB1dCBoZXJlIHNvIGVycm9yIHNjcmlwdCBwaWNr cyB0aGVtIHVwICovCisrICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwK KysgICAgICAgICAgICBGSVBTX1JfUEVSU09OQUxJU0FUSU9OX1NUUklOR19UT09fTE9ORyk7Cisr ICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19JTlNUQU5USUFURSwgRklQU19SX0lOX0VSUk9S X1NUQVRFKTsKKysgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBT X1JfQUxSRUFEWV9JTlNUQU5USUFURUQpOworKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf SU5TVEFOVElBVEUsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0VOVFJPUFkpOworKyAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5TVEFOVElBVEUsIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5H X05PTkNFKTsKKysgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCBGSVBT X1JfSU5TVEFOVElBVEVfRVJST1IpOworKyAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfSU5T VEFOVElBVEUsIEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRCk7CisrI2VuZGlmCisrCisrICAg IGludCByID0gMDsKKysKKysgICAgaWYgKHBlcnNsZW4gPiBkY3R4LT5tYXhfcGVycykgeworKyAg ICAgICAgciA9IEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RPT19MT05HOworKyAgICAg ICAgZ290byBlbmQ7CisrICAgIH0KKysKKysgICAgaWYgKCFkY3R4LT5pbnN0YW50aWF0ZSkgewor KyAgICAgICAgciA9IEZJUFNfUl9EUkJHX05PVF9JTklUSUFMSVNFRDsKKysgICAgICAgIGdvdG8g ZW5kOworKyAgICB9CisrCisrICAgIGlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfVU5J TklUSUFMSVNFRCkgeworKyAgICAgICAgaWYgKGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19F UlJPUikKKysgICAgICAgICAgICByID0gRklQU19SX0lOX0VSUk9SX1NUQVRFOworKyAgICAgICAg ZWxzZQorKyAgICAgICAgICAgIHIgPSBGSVBTX1JfQUxSRUFEWV9JTlNUQU5USUFURUQ7CisrICAg ICAgICBnb3RvIGVuZDsKKysgICAgfQorKworKyAgICBkY3R4LT5zdGF0dXMgPSBEUkJHX1NUQVRV U19FUlJPUjsKKysKKysgICAgZW50bGVuID0gZmlwc19nZXRfZW50cm9weShkY3R4LCAmZW50cm9w eSwgZGN0eC0+c3RyZW5ndGgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGN0eC0+ bWluX2VudHJvcHksIGRjdHgtPm1heF9lbnRyb3B5KTsKKysKKysgICAgaWYgKGVudGxlbiA8IGRj dHgtPm1pbl9lbnRyb3B5IHx8IGVudGxlbiA+IGRjdHgtPm1heF9lbnRyb3B5KSB7CisrICAgICAg ICByID0gRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfRU5UUk9QWTsKKysgICAgICAgIGdvdG8gZW5k OworKyAgICB9CisrCisrICAgIGlmIChkY3R4LT5tYXhfbm9uY2UgPiAwICYmIGRjdHgtPmdldF9u b25jZSkgeworKyAgICAgICAgbm9uY2VsZW4gPSBkY3R4LT5nZXRfbm9uY2UoZGN0eCwgJm5vbmNl LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGN0eC0+c3RyZW5ndGggLyAy LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGN0eC0+bWluX25vbmNlLCBk Y3R4LT5tYXhfbm9uY2UpOworKworKyAgICAgICAgaWYgKG5vbmNlbGVuIDwgZGN0eC0+bWluX25v bmNlIHx8IG5vbmNlbGVuID4gZGN0eC0+bWF4X25vbmNlKSB7CisrICAgICAgICAgICAgciA9IEZJ UFNfUl9FUlJPUl9SRVRSSUVWSU5HX05PTkNFOworKyAgICAgICAgICAgIGdvdG8gZW5kOworKyAg ICAgICAgfQorKworKyAgICB9CisrCisrICAgIGlmICghZGN0eC0+aW5zdGFudGlhdGUoZGN0eCwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyb3B5LCBlbnRsZW4sIG5vbmNlLCBub25j ZWxlbiwgcGVycywgcGVyc2xlbikpIHsKKysgICAgICAgIHIgPSBGSVBTX1JfRVJST1JfSU5TVEFO VElBVElOR19EUkJHOworKyAgICAgICAgZ290byBlbmQ7CisrICAgIH0KKysKKysgICAgZGN0eC0+ c3RhdHVzID0gRFJCR19TVEFUVVNfUkVBRFk7CisrICAgIGlmICghKGRjdHgtPmlmbGFncyAmIERS QkdfQ1VTVE9NX1JFU0VFRCkpCisrICAgICAgICBkY3R4LT5yZXNlZWRfY291bnRlciA9IDE7Cisr CisrIGVuZDoKKysKKysgICAgaWYgKGVudHJvcHkgJiYgZGN0eC0+Y2xlYW51cF9lbnRyb3B5KQor KyAgICAgICAgZmlwc19jbGVhbnVwX2VudHJvcHkoZGN0eCwgZW50cm9weSwgZW50bGVuKTsKKysK KysgICAgaWYgKG5vbmNlICYmIGRjdHgtPmNsZWFudXBfbm9uY2UpCisrICAgICAgICBkY3R4LT5j bGVhbnVwX25vbmNlKGRjdHgsIG5vbmNlLCBub25jZWxlbik7CisrCisrICAgIGlmIChkY3R4LT5z dGF0dXMgPT0gRFJCR19TVEFUVVNfUkVBRFkpCisrICAgICAgICByZXR1cm4gMTsKKysKKysgICAg aWYgKHIgJiYgIShkY3R4LT5pZmxhZ3MgJiBEUkJHX0ZMQUdfTk9FUlIpKQorKyAgICAgICAgRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFLCByKTsKKysKKysgICAgcmV0dXJuIDA7 CisrCisrfQorKworK3N0YXRpYyBpbnQgZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsCisrICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXplX3QgYWRp bmxlbiwgaW50IGhjaGVjaykKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIgKmVudHJvcHkgPSBOVUxM OworKyAgICBzaXplX3QgZW50bGVuID0gMDsKKysgICAgaW50IHIgPSAwOworKworKyNpZiAwCisr ICAgIEZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRCk7 CisrICAgIEZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCBGSVBTX1JfQURESVRJT05BTF9JTlBV VF9UT09fTE9ORyk7CisrI2VuZGlmCisrICAgIGlmIChkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFU VVNfUkVBRFkKKysgICAgICAgICYmIGRjdHgtPnN0YXR1cyAhPSBEUkJHX1NUQVRVU19SRVNFRUQp IHsKKysgICAgICAgIGlmIChkY3R4LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfRVJST1IpCisrICAg ICAgICAgICAgciA9IEZJUFNfUl9JTl9FUlJPUl9TVEFURTsKKysgICAgICAgIGVsc2UgaWYgKGRj dHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEKQorKyAgICAgICAgICAgIHIg PSBGSVBTX1JfTk9UX0lOU1RBTlRJQVRFRDsKKysgICAgICAgIGdvdG8gZW5kOworKyAgICB9Cisr CisrICAgIGlmICghYWRpbikKKysgICAgICAgIGFkaW5sZW4gPSAwOworKyAgICBlbHNlIGlmIChh ZGlubGVuID4gZGN0eC0+bWF4X2FkaW4pIHsKKysgICAgICAgIHIgPSBGSVBTX1JfQURESVRJT05B TF9JTlBVVF9UT09fTE9ORzsKKysgICAgICAgIGdvdG8gZW5kOworKyAgICB9CisrCisrICAgIGRj dHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX0VSUk9SOworKyAgICAvKiBQZWZvcm0gaGVhbHRoIGNo ZWNrIG9uIGFsbCByZXNlZWQgb3BlcmF0aW9ucyBpZiBub3QgYSBwcmVkaWN0aW9uCisrICAgICAq IHJlc2lzdGFuY2UgcmVxdWVzdCBhbmQgbm90IGluIHRlc3QgbW9kZS4KKysgICAgICovCisrICAg IGlmIChoY2hlY2sgJiYgIShkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkpIHsKKysgICAg ICAgIGlmICghRklQU19kcmJnX2hlYWx0aF9jaGVjayhkY3R4KSkgeworKyAgICAgICAgICAgIHIg PSBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRTsKKysgICAgICAgICAgICBnb3RvIGVuZDsKKysgICAg ICAgIH0KKysgICAgfQorKworKyAgICBlbnRsZW4gPSBmaXBzX2dldF9lbnRyb3B5KGRjdHgsICZl bnRyb3B5LCBkY3R4LT5zdHJlbmd0aCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk Y3R4LT5taW5fZW50cm9weSwgZGN0eC0+bWF4X2VudHJvcHkpOworKworKyAgICBpZiAoZW50bGVu IDwgZGN0eC0+bWluX2VudHJvcHkgfHwgZW50bGVuID4gZGN0eC0+bWF4X2VudHJvcHkpIHsKKysg ICAgICAgIHIgPSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZOworKyAgICAgICAgZ290 byBlbmQ7CisrICAgIH0KKysKKysgICAgaWYgKCFkY3R4LT5yZXNlZWQoZGN0eCwgZW50cm9weSwg ZW50bGVuLCBhZGluLCBhZGlubGVuKSkKKysgICAgICAgIGdvdG8gZW5kOworKworKyAgICBkY3R4 LT5zdGF0dXMgPSBEUkJHX1NUQVRVU19SRUFEWTsKKysgICAgaWYgKCEoZGN0eC0+aWZsYWdzICYg RFJCR19DVVNUT01fUkVTRUVEKSkKKysgICAgICAgIGRjdHgtPnJlc2VlZF9jb3VudGVyID0gMTsK KysgZW5kOgorKworKyAgICBpZiAoZW50cm9weSAmJiBkY3R4LT5jbGVhbnVwX2VudHJvcHkpCisr ICAgICAgICBmaXBzX2NsZWFudXBfZW50cm9weShkY3R4LCBlbnRyb3B5LCBlbnRsZW4pOworKwor KyAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFQURZKQorKyAgICAgICAgcmV0 dXJuIDE7CisrCisrICAgIGlmIChyICYmICEoZGN0eC0+aWZsYWdzICYgRFJCR19GTEFHX05PRVJS KSkKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0RSQkdfUkVTRUVELCByKTsKKysKKysgICAgcmV0 dXJuIDA7CisrfQorKworK2ludCBGSVBTX2RyYmdfcmVzZWVkKERSQkdfQ1RYICpkY3R4LAorKyAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlu bGVuKQorK3sKKysgICAgcmV0dXJuIGRyYmdfcmVzZWVkKGRjdHgsIGFkaW4sIGFkaW5sZW4sIDEp OworK30KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19jaGVjayhEUkJHX0NUWCAqZGN0eCkKKyt7 CisrICAgIGlmIChkY3R4LT54ZmxhZ3MgJiBEUkJHX0ZMQUdfVEVTVCkKKysgICAgICAgIHJldHVy biAxOworKyAgICBkY3R4LT5oZWFsdGhfY2hlY2tfY250Kys7CisrICAgIGlmIChkY3R4LT5oZWFs dGhfY2hlY2tfY250ID49IGRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCkgeworKyAgICAgICAg aWYgKCFGSVBTX2RyYmdfaGVhbHRoX2NoZWNrKGRjdHgpKSB7CisrICAgICAgICAgICAgRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0NIRUNLLCBGSVBTX1JfU0VMRlRFU1RfRkFJTFVSRSk7CisrICAg ICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIDE7Cisr fQorKworK2ludCBGSVBTX2RyYmdfZ2VuZXJhdGUoRFJCR19DVFggKmRjdHgsIHVuc2lnbmVkIGNo YXIgKm91dCwgc2l6ZV90IG91dGxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVk aWN0aW9uX3Jlc2lzdGFuY2UsCisrICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l ZCBjaGFyICphZGluLCBzaXplX3QgYWRpbmxlbikKKyt7CisrICAgIGludCByID0gMDsKKysKKysg ICAgaWYgKEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19HRU5FUkFURSwgRklQU19SX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICBy ZXR1cm4gMDsKKysgICAgfQorKworKyAgICBpZiAoIWZpcHNfZHJiZ19jaGVjayhkY3R4KSkKKysg ICAgICAgIHJldHVybiAwOworKworKyAgICBpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVT X1JFQURZCisrICAgICAgICAmJiBkY3R4LT5zdGF0dXMgIT0gRFJCR19TVEFUVVNfUkVTRUVEKSB7 CisrICAgICAgICBpZiAoZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX0VSUk9SKQorKyAgICAg ICAgICAgIHIgPSBGSVBTX1JfSU5fRVJST1JfU1RBVEU7CisrICAgICAgICBlbHNlIGlmIChkY3R4 LT5zdGF0dXMgPT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysgICAgICAgICAgICByID0g RklQU19SX05PVF9JTlNUQU5USUFURUQ7CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgfQorKwor KyAgICBpZiAob3V0bGVuID4gZGN0eC0+bWF4X3JlcXVlc3QpIHsKKysgICAgICAgIHIgPSBGSVBT X1JfUkVRVUVTVF9UT09fTEFSR0VfRk9SX0RSQkc7CisrICAgICAgICByZXR1cm4gMDsKKysgICAg fQorKworKyAgICBpZiAoYWRpbmxlbiA+IGRjdHgtPm1heF9hZGluKSB7CisrICAgICAgICByID0g RklQU19SX0FERElUSU9OQUxfSU5QVVRfVE9PX0xPTkc7CisrICAgICAgICBnb3RvIGVuZDsKKysg ICAgfQorKworKyAgICBpZiAoZGN0eC0+aWZsYWdzICYgRFJCR19DVVNUT01fUkVTRUVEKQorKyAg ICAgICAgZGN0eC0+Z2VuZXJhdGUoZGN0eCwgTlVMTCwgb3V0bGVuLCBOVUxMLCAwKTsKKysgICAg ZWxzZSBpZiAoZGN0eC0+cmVzZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQor KyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfUkVTRUVEOworKworKyAgICBpZiAo ZGN0eC0+c3RhdHVzID09IERSQkdfU1RBVFVTX1JFU0VFRCB8fCBwcmVkaWN0aW9uX3Jlc2lzdGFu Y2UpIHsKKysgICAgICAgIC8qIElmIHByZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1ZXN0IGRvbid0 IGRvIGhlYWx0aCBjaGVjayAqLworKyAgICAgICAgaW50IGhjaGVjayA9IHByZWRpY3Rpb25fcmVz aXN0YW5jZSA/IDAgOiAxOworKworKyAgICAgICAgaWYgKCFkcmJnX3Jlc2VlZChkY3R4LCBhZGlu LCBhZGlubGVuLCBoY2hlY2spKSB7CisrICAgICAgICAgICAgciA9IEZJUFNfUl9SRVNFRURfRVJS T1I7CisrICAgICAgICAgICAgZ290byBlbmQ7CisrICAgICAgICB9CisrICAgICAgICBhZGluID0g TlVMTDsKKysgICAgICAgIGFkaW5sZW4gPSAwOworKyAgICB9CisrCisrICAgIGlmICghZGN0eC0+ Z2VuZXJhdGUoZGN0eCwgb3V0LCBvdXRsZW4sIGFkaW4sIGFkaW5sZW4pKSB7CisrICAgICAgICBy ID0gRklQU19SX0dFTkVSQVRFX0VSUk9SOworKyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19T VEFUVVNfRVJST1I7CisrICAgICAgICBnb3RvIGVuZDsKKysgICAgfQorKyAgICBpZiAoIShkY3R4 LT5pZmxhZ3MgJiBEUkJHX0NVU1RPTV9SRVNFRUQpKSB7CisrICAgICAgICBpZiAoZGN0eC0+cmVz ZWVkX2NvdW50ZXIgPj0gZGN0eC0+cmVzZWVkX2ludGVydmFsKQorKyAgICAgICAgICAgIGRjdHgt PnN0YXR1cyA9IERSQkdfU1RBVFVTX1JFU0VFRDsKKysgICAgICAgIGVsc2UKKysgICAgICAgICAg ICBkY3R4LT5yZXNlZWRfY291bnRlcisrOworKyAgICB9CisrCisrIGVuZDoKKysgICAgaWYgKHIp IHsKKysgICAgICAgIGlmICghKGRjdHgtPmlmbGFncyAmIERSQkdfRkxBR19OT0VSUikpCisrICAg ICAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0dFTkVSQVRFLCByKTsKKysgICAgICAg IHJldHVybiAwOworKyAgICB9CisrCisrICAgIHJldHVybiAxOworK30KKysKKytpbnQgRklQU19k cmJnX3VuaW5zdGFudGlhdGUoRFJCR19DVFggKmRjdHgpCisreworKyAgICBpbnQgcnY7CisrICAg IGlmICghZGN0eC0+dW5pbnN0YW50aWF0ZSkKKysgICAgICAgIHJ2ID0gMTsKKysgICAgZWxzZQor KyAgICAgICAgcnYgPSBkY3R4LT51bmluc3RhbnRpYXRlKGRjdHgpOworKyAgICAvKiBBbHRob3Vn aCB3ZSdkIGxpa2UgdG8gY2xlYW5zZSBoZXJlIHdlIGNhbid0IGJlY2F1c2Ugd2UgaGF2ZSB0bwor KyAgICAgKiB0ZXN0IHRoZSB1bmluc3RhbnRpYXRlIHJlYWxseSB6ZXJvZXMgdGhlIGRhdGEuCisr ICAgICAqLworKyAgICBtZW1zZXQoJmRjdHgtPmQsIDAsIHNpemVvZihkY3R4LT5kKSk7CisrICAg IGRjdHgtPnN0YXR1cyA9IERSQkdfU1RBVFVTX1VOSU5JVElBTElTRUQ7CisrICAgIC8qIElmIG1l dGhvZCBoYXMgcHJvYmxlbXMgdW5pbnN0YW50aWF0aW5nLCByZXR1cm4gZXJyb3IgKi8KKysgICAg cmV0dXJuIHJ2OworK30KKysKKytpbnQgRklQU19kcmJnX3NldF9jYWxsYmFja3MoRFJCR19DVFgg KmRjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAoKmdldF9lbnRyb3B5 KSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWluX2xlbiwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgbWF4X2xlbiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVw X2VudHJvcHkpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZW50cm9weV9ibG9ja2xlbiwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICgqZ2V0X25vbmNlKSAoRFJCR19DVFgg KmN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXplX3QgbWluX2xlbiwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9sZW4pLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2xlYW51cF9ub25jZSkgKERSQkdf Q1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgY2hhciAqb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSkKKyt7CisrICAgIGlmIChkY3R4LT5z dGF0dXMgIT0gRFJCR19TVEFUVVNfVU5JTklUSUFMSVNFRCkKKysgICAgICAgIHJldHVybiAwOwor KyAgICBkY3R4LT5lbnRyb3B5X2Jsb2NrbGVuID0gZW50cm9weV9ibG9ja2xlbjsKKysgICAgZGN0 eC0+Z2V0X2VudHJvcHkgPSBnZXRfZW50cm9weTsKKysgICAgZGN0eC0+Y2xlYW51cF9lbnRyb3B5 ID0gY2xlYW51cF9lbnRyb3B5OworKyAgICBkY3R4LT5nZXRfbm9uY2UgPSBnZXRfbm9uY2U7Cisr ICAgIGRjdHgtPmNsZWFudXBfbm9uY2UgPSBjbGVhbnVwX25vbmNlOworKyAgICByZXR1cm4gMTsK Kyt9CisrCisraW50IEZJUFNfZHJiZ19zZXRfcmFuZF9jYWxsYmFja3MoRFJCR19DVFggKmRjdHgs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICgqZ2V0X2FkaW4pIChE UkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnBvdXQpLAorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKCpjbGVhbnVwX2FkaW4pIChEUkJHX0NUWCAqY3R4LAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBjaGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBvbGVuKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgKCpyYW5kX3NlZWRfY2IpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgbnVtKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpyYW5kX2Fk ZF9jYikgKERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsIGludCBudW0sCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZW50cm9w eSkpCisreworKyAgICBpZiAoZGN0eC0+c3RhdHVzICE9IERSQkdfU1RBVFVTX1VOSU5JVElBTElT RUQpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgZGN0eC0+Z2V0X2FkaW4gPSBnZXRfYWRpbjsK KysgICAgZGN0eC0+Y2xlYW51cF9hZGluID0gY2xlYW51cF9hZGluOworKyAgICBkY3R4LT5yYW5k X3NlZWRfY2IgPSByYW5kX3NlZWRfY2I7CisrICAgIGRjdHgtPnJhbmRfYWRkX2NiID0gcmFuZF9h ZGRfY2I7CisrICAgIHJldHVybiAxOworK30KKysKKyt2b2lkICpGSVBTX2RyYmdfZ2V0X2FwcF9k YXRhKERSQkdfQ1RYICpkY3R4KQorK3sKKysgICAgcmV0dXJuIGRjdHgtPmFwcF9kYXRhOworK30K KysKKyt2b2lkIEZJUFNfZHJiZ19zZXRfYXBwX2RhdGEoRFJCR19DVFggKmRjdHgsIHZvaWQgKmFw cF9kYXRhKQorK3sKKysgICAgZGN0eC0+YXBwX2RhdGEgPSBhcHBfZGF0YTsKKyt9CisrCisrc2l6 ZV90IEZJUFNfZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpCisreworKyAgICBy ZXR1cm4gZGN0eC0+YmxvY2tsZW5ndGg7CisrfQorKworK2ludCBGSVBTX2RyYmdfZ2V0X3N0cmVu Z3RoKERSQkdfQ1RYICpkY3R4KQorK3sKKysgICAgcmV0dXJuIGRjdHgtPnN0cmVuZ3RoOworK30K KysKKyt2b2lkIEZJUFNfZHJiZ19zZXRfY2hlY2tfaW50ZXJ2YWwoRFJCR19DVFggKmRjdHgsIGlu dCBpbnRlcnZhbCkKKyt7CisrICAgIGRjdHgtPmhlYWx0aF9jaGVja19pbnRlcnZhbCA9IGludGVy dmFsOworK30KKysKKyt2b2lkIEZJUFNfZHJiZ19zZXRfcmVzZWVkX2ludGVydmFsKERSQkdfQ1RY ICpkY3R4LCBpbnQgaW50ZXJ2YWwpCisreworKyAgICBkY3R4LT5yZXNlZWRfaW50ZXJ2YWwgPSBp bnRlcnZhbDsKKyt9CisrCisrc3RhdGljIGludCBkcmJnX3N0aWNrID0gMDsKKysKKyt2b2lkIEZJ UFNfZHJiZ19zdGljayhpbnQgb25vZmYpCisreworKyAgICBkcmJnX3N0aWNrID0gb25vZmY7Cisr fQorKworKy8qIENvbnRpbnVvdXMgRFJCRyB1dGlsaXR5IGZ1bmN0aW9uICovCisraW50IGZpcHNf ZHJiZ19jcHJuZ190ZXN0KERSQkdfQ1RYICpkY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvdXQp CisreworKyAgICAvKiBObyBDUFJORyBpbiB0ZXN0IG1vZGUgKi8KKysgICAgaWYgKGRjdHgtPnhm bGFncyAmIERSQkdfRkxBR19URVNUKQorKyAgICAgICAgcmV0dXJuIDE7CisrICAgIC8qIENoZWNr IGJsb2NrIGlzIHZhbGlkOiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisrICAgIGlmIChkY3R4LT5s Yl92YWxpZCA9PSAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdf VEVTVCwgRklQU19SX0lOVEVSTkFMX0VSUk9SKTsKKysgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0 X2ZhaWwoKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAgIGlmIChkcmJnX3N0aWNr KQorKyAgICAgICAgbWVtY3B5KGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKTsKKysg ICAgLyogQ2hlY2sgYWdhaW5zdCBsYXN0IGJsb2NrOiBmYWlsIGlmIG1hdGNoICovCisrICAgIGlm ICghbWVtY21wKGRjdHgtPmxiLCBvdXQsIGRjdHgtPmJsb2NrbGVuZ3RoKSkgeworKyAgICAgICAg RklQU2VycihGSVBTX0ZfRklQU19EUkJHX0NQUk5HX1RFU1QsIEZJUFNfUl9EUkJHX1NUVUNLKTsK KysgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysgICAgICAgIHJldHVybiAwOwor KyAgICB9CisrICAgIC8qIFNhdmUgbGFzdCBibG9jayBmb3IgbmV4dCBjb21wYXJpc29uICovCisr ICAgIG1lbWNweShkY3R4LT5sYiwgb3V0LCBkY3R4LT5ibG9ja2xlbmd0aCk7CisrICAgIHJldHVy biAxOworK30KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19y YW5kLmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfcmFuZC5jCist LS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3JhbmQuYy5maXBzCTIwMTYt MDUtMDMgMTY6NTc6NTguODI3MzIxMTM0ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRv L2ZpcHMvZmlwc19kcmJnX3JhbmQuYwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgyNzMyMTEzNCArMDIw MAorQEAgLTAsMCArMSwxNjYgQEAKKysvKiBmaXBzL3JhbmQvZmlwc19kcmJnX3JhbmQuYyAqLwor Ky8qIFdyaXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZv ciB0aGUgT3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBD b3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2 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 PT09PT09CisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L3JhbmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaW5jbHVkZSAiZmlw c19yYW5kX2xjbC5oIgorKworKy8qIE1hcHBpbmcgb2YgU1A4MDAtOTAgRFJCR3MgdG8gT3BlblNT TCBSQU5EX01FVEhPRCAqLworKworKy8qIFNpbmNlIHdlIG9ubHkgaGF2ZSBvbmUgZ2xvYmFsIFBS TkcgdXNlZCBhdCBhbnkgdGltZSBpbiBPcGVuU1NMIHVzZSBhIGdsb2JhbAorKyAqIHZhcmlhYmxl IHRvIHN0b3JlIGNvbnRleHQuCisrICovCisrCisrc3RhdGljIERSQkdfQ1RYIG9zc2xfZGN0eDsK KysKKytEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpCisreworKyAgICByZXR1 cm4gJm9zc2xfZGN0eDsKKyt9CisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfYnl0ZXModW5zaWdu ZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCisreworKyAgICBEUkJHX0NUWCAqZGN0eCA9ICZvc3Ns X2RjdHg7CisrICAgIGludCBydiA9IDA7CisrICAgIHVuc2lnbmVkIGNoYXIgKmFkaW4gPSBOVUxM OworKyAgICBzaXplX3QgYWRpbmxlbiA9IDA7CisrICAgIENSWVBUT193X2xvY2soQ1JZUFRPX0xP Q0tfUkFORCk7CisrICAgIGRvIHsKKysgICAgICAgIHNpemVfdCByY250OworKyAgICAgICAgaWYg KGNvdW50ID4gKGludClkY3R4LT5tYXhfcmVxdWVzdCkKKysgICAgICAgICAgICByY250ID0gZGN0 eC0+bWF4X3JlcXVlc3Q7CisrICAgICAgICBlbHNlCisrICAgICAgICAgICAgcmNudCA9IGNvdW50 OworKyAgICAgICAgaWYgKGRjdHgtPmdldF9hZGluKSB7CisrICAgICAgICAgICAgYWRpbmxlbiA9 IGRjdHgtPmdldF9hZGluKGRjdHgsICZhZGluKTsKKysgICAgICAgICAgICBpZiAoYWRpbmxlbiAm JiAhYWRpbikgeworKyAgICAgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfQllU RVMsCisrICAgICAgICAgICAgICAgICAgICAgICAgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfQURE SVRJT05BTF9JTlBVVCk7CisrICAgICAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgICAg IH0KKysgICAgICAgIH0KKysgICAgICAgIHJ2ID0gRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIG91 dCwgcmNudCwgMCwgYWRpbiwgYWRpbmxlbik7CisrICAgICAgICBpZiAoYWRpbikgeworKyAgICAg ICAgICAgIGlmIChkY3R4LT5jbGVhbnVwX2FkaW4pCisrICAgICAgICAgICAgICAgIGRjdHgtPmNs ZWFudXBfYWRpbihkY3R4LCBhZGluLCBhZGlubGVuKTsKKysgICAgICAgICAgICBhZGluID0gTlVM TDsKKysgICAgICAgIH0KKysgICAgICAgIGlmICghcnYpCisrICAgICAgICAgICAgZ290byBlcnI7 CisrICAgICAgICBvdXQgKz0gcmNudDsKKysgICAgICAgIGNvdW50IC09IHJjbnQ7CisrICAgIH0K KysgICAgd2hpbGUgKGNvdW50KTsKKysgICAgcnYgPSAxOworKyBlcnI6CisrICAgIENSWVBUT193 X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysgICAgcmV0dXJuIHJ2OworK30KKysKKytzdGF0 aWMgaW50IGZpcHNfZHJiZ19wc2V1ZG8odW5zaWduZWQgY2hhciAqb3V0LCBpbnQgY291bnQpCisr eworKyAgICBpZiAoZmlwc19kcmJnX2J5dGVzKG91dCwgY291bnQpIDw9IDApCisrICAgICAgICBy ZXR1cm4gLTE7CisrICAgIHJldHVybiAxOworK30KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19z dGF0dXModm9pZCkKKyt7CisrICAgIERSQkdfQ1RYICpkY3R4ID0gJm9zc2xfZGN0eDsKKysgICAg aW50IHJ2OworKyAgICBDUllQVE9fcl9sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKyAgICBydiA9 IGRjdHgtPnN0YXR1cyA9PSBEUkJHX1NUQVRVU19SRUFEWSA/IDEgOiAwOworKyAgICBDUllQVE9f cl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrICAgIHJldHVybiBydjsKKyt9CisrCisrc3Rh dGljIHZvaWQgZmlwc19kcmJnX2NsZWFudXAodm9pZCkKKyt7CisrICAgIERSQkdfQ1RYICpkY3R4 ID0gJm9zc2xfZGN0eDsKKysgICAgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysg ICAgRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCk7CisrICAgIENSWVBUT193X3VubG9jayhD UllQVE9fTE9DS19SQU5EKTsKKyt9CisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfc2VlZChjb25z dCB2b2lkICpzZWVkLCBpbnQgc2VlZGxlbikKKyt7CisrICAgIERSQkdfQ1RYICpkY3R4ID0gJm9z c2xfZGN0eDsKKysgICAgaWYgKGRjdHgtPnJhbmRfc2VlZF9jYikKKysgICAgICAgIHJldHVybiBk Y3R4LT5yYW5kX3NlZWRfY2IoZGN0eCwgc2VlZCwgc2VlZGxlbik7CisrICAgIHJldHVybiAxOwor K30KKysKKytzdGF0aWMgaW50IGZpcHNfZHJiZ19hZGQoY29uc3Qgdm9pZCAqc2VlZCwgaW50IHNl ZWRsZW4sIGRvdWJsZSBhZGRfZW50cm9weSkKKyt7CisrICAgIERSQkdfQ1RYICpkY3R4ID0gJm9z c2xfZGN0eDsKKysgICAgaWYgKGRjdHgtPnJhbmRfYWRkX2NiKQorKyAgICAgICAgcmV0dXJuIGRj dHgtPnJhbmRfYWRkX2NiKGRjdHgsIHNlZWQsIHNlZWRsZW4sIGFkZF9lbnRyb3B5KTsKKysgICAg cmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCByYW5kX2RyYmdfbWV0 aCA9IHsKKysgICAgZmlwc19kcmJnX3NlZWQsCisrICAgIGZpcHNfZHJiZ19ieXRlcywKKysgICAg Zmlwc19kcmJnX2NsZWFudXAsCisrICAgIGZpcHNfZHJiZ19hZGQsCisrICAgIGZpcHNfZHJiZ19w c2V1ZG8sCisrICAgIGZpcHNfZHJiZ19zdGF0dXMKKyt9OworKworK2NvbnN0IFJBTkRfTUVUSE9E ICpGSVBTX2RyYmdfbWV0aG9kKHZvaWQpCisreworKyAgICByZXR1cm4gJnJhbmRfZHJiZ19tZXRo OworK30KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxm dGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0 LmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuYy5m aXBzCTIwMTYtMDUtMDMgMTY6NTc6NTguODI3MzIxMTM0ICswMjAwCisrKysgb3BlbnNzbC0xLjAu MmgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3NlbGZ0ZXN0LmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44 MjczMjExMzQgKzAyMDAKK0BAIC0wLDAgKzEsODI3IEBACisrLyogZmlwcy9yYW5kL2ZpcHNfZHJi Z19zZWxmdGVzdC5jICovCisrLyogV3JpdHRlbiBieSBEciBTdGVwaGVuIE4gSGVuc29uIChzdGV2 ZUBvcGVuc3NsLm9yZykgZm9yIHRoZSBPcGVuU1NMCisrICogcHJvamVjdC4KKysgKi8KKysvKiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAg 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 PT09PT09PT09PT09PT09PT09PT09PT0KKysgKi8KKysKKysjaW5jbHVkZSA8c3RyaW5nLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+Cisr I2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5kLmg+CisrI2luY2x1ZGUgImZpcHNfcmFuZF9sY2wu aCIKKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2luY2x1ZGUgImZpcHNfZHJiZ19zZWxm dGVzdC5oIgorKworK3R5cGVkZWYgc3RydWN0IHsKKysgICAgaW50IHBvc3Q7CisrICAgIGludCBu aWQ7CisrICAgIHVuc2lnbmVkIGludCBmbGFnczsKKysKKysgICAgLyogS0FUIGRhdGEgZm9yIG5v IFBSICovCisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudDsKKysgICAgc2l6ZV90IGVudGxl bjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2U7CisrICAgIHNpemVfdCBub25jZWxl bjsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGVyczsKKysgICAgc2l6ZV90IHBlcnNsZW47 CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW47CisrICAgIHNpemVfdCBhZGlubGVuOwor KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnRyZXNlZWQ7CisrICAgIHNpemVfdCBlbnRyZXNl ZWRsZW47CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5yZXNlZWQ7CisrICAgIHNpemVf dCBhZGlucmVzZWVkbGVuOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluMjsKKysgICAg c2l6ZV90IGFkaW4ybGVuOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXQ7CisrICAgIHNp emVfdCBrYXRsZW47CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDI7CisrICAgIHNpemVf dCBrYXQybGVuOworKworKyAgICAvKiBLQVQgZGF0YSBmb3IgUFIgKi8KKysgICAgY29uc3QgdW5z aWduZWQgY2hhciAqZW50X3ByOworKyAgICBzaXplX3QgZW50bGVuX3ByOworKyAgICBjb25zdCB1 bnNpZ25lZCBjaGFyICpub25jZV9wcjsKKysgICAgc2l6ZV90IG5vbmNlbGVuX3ByOworKyAgICBj b25zdCB1bnNpZ25lZCBjaGFyICpwZXJzX3ByOworKyAgICBzaXplX3QgcGVyc2xlbl9wcjsKKysg ICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRpbl9wcjsKKysgICAgc2l6ZV90IGFkaW5sZW5fcHI7 CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudHByX3ByOworKyAgICBzaXplX3QgZW50cHJs ZW5fcHI7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW5nX3ByOworKyAgICBzaXplX3Qg YWRpbmdsZW5fcHI7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudGdfcHI7CisrICAgIHNp emVfdCBlbnRnbGVuX3ByOworKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXRfcHI7CisrICAg IHNpemVfdCBrYXRsZW5fcHI7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdDJfcHI7Cisr ICAgIHNpemVfdCBrYXQybGVuX3ByOworKworK30gRFJCR19TRUxGVEVTVF9EQVRBOworKworKyNk ZWZpbmUgbWFrZV9kcmJnX3Rlc3RfZGF0YShuaWQsIGZsYWcsIHByLCBwKSB7cCwgbmlkLCBmbGFn IHwgRFJCR19GTEFHX1RFU1QsIFwKKysgICAgICAgIHByIyNfZW50cm9weWlucHV0LCBzaXplb2Yo cHIjI19lbnRyb3B5aW5wdXQpLCBcCisrICAgICAgICBwciMjX25vbmNlLCBzaXplb2YocHIjI19u b25jZSksIFwKKysgICAgICAgIHByIyNfcGVyc29uYWxpemF0aW9uc3RyaW5nLCBzaXplb2YocHIj I19wZXJzb25hbGl6YXRpb25zdHJpbmcpLCBcCisrICAgICAgICBwciMjX2FkZGl0aW9uYWxpbnB1 dCwgc2l6ZW9mKHByIyNfYWRkaXRpb25hbGlucHV0KSwgXAorKyAgICAgICAgcHIjI19lbnRyb3B5 aW5wdXRyZXNlZWQsIHNpemVvZihwciMjX2VudHJvcHlpbnB1dHJlc2VlZCksIFwKKysgICAgICAg IHByIyNfYWRkaXRpb25hbGlucHV0cmVzZWVkLCBzaXplb2YocHIjI19hZGRpdGlvbmFsaW5wdXRy ZXNlZWQpLCBcCisrICAgICAgICBwciMjX2FkZGl0aW9uYWxpbnB1dDIsIHNpemVvZihwciMjX2Fk ZGl0aW9uYWxpbnB1dDIpLCBcCisrICAgICAgICBwciMjX2ludF9yZXR1cm5lZGJpdHMsIHNpemVv ZihwciMjX2ludF9yZXR1cm5lZGJpdHMpLCBcCisrICAgICAgICBwciMjX3JldHVybmVkYml0cywg c2l6ZW9mKHByIyNfcmV0dXJuZWRiaXRzKSwgXAorKyAgICAgICAgcHIjI19wcl9lbnRyb3B5aW5w dXQsIHNpemVvZihwciMjX3ByX2VudHJvcHlpbnB1dCksIFwKKysgICAgICAgIHByIyNfcHJfbm9u Y2UsIHNpemVvZihwciMjX3ByX25vbmNlKSwgXAorKyAgICAgICAgcHIjI19wcl9wZXJzb25hbGl6 YXRpb25zdHJpbmcsIHNpemVvZihwciMjX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZyksIFwKKysg ICAgICAgIHByIyNfcHJfYWRkaXRpb25hbGlucHV0LCBzaXplb2YocHIjI19wcl9hZGRpdGlvbmFs aW5wdXQpLCBcCisrICAgICAgICBwciMjX3ByX2VudHJvcHlpbnB1dHByLCBzaXplb2YocHIjI19w cl9lbnRyb3B5aW5wdXRwciksIFwKKysgICAgICAgIHByIyNfcHJfYWRkaXRpb25hbGlucHV0Miwg c2l6ZW9mKHByIyNfcHJfYWRkaXRpb25hbGlucHV0MiksIFwKKysgICAgICAgIHByIyNfcHJfZW50 cm9weWlucHV0cHIyLCBzaXplb2YocHIjI19wcl9lbnRyb3B5aW5wdXRwcjIpLCBcCisrICAgICAg ICBwciMjX3ByX2ludF9yZXR1cm5lZGJpdHMsIHNpemVvZihwciMjX3ByX2ludF9yZXR1cm5lZGJp dHMpLCBcCisrICAgICAgICBwciMjX3ByX3JldHVybmVkYml0cywgc2l6ZW9mKHByIyNfcHJfcmV0 dXJuZWRiaXRzKSwgXAorKyAgICAgICAgfQorKworKyNkZWZpbmUgbWFrZV9kcmJnX3Rlc3RfZGF0 YV9kZihuaWQsIHByLCBwKSBcCisrICAgICAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKG5pZCwgRFJC R19GTEFHX0NUUl9VU0VfREYsIHByLCBwKQorKworKyNkZWZpbmUgbWFrZV9kcmJnX3Rlc3RfZGF0 YV9lYyhjdXJ2ZSwgbWQsIHByLCBwKSBcCisrICAgICAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKChj dXJ2ZSA8PCAxNikgfCBtZCAsIDAsIHByLCBwKQorKworK3N0YXRpYyBEUkJHX1NFTEZURVNUX0RB VEEgZHJiZ190ZXN0W10gPSB7CisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGFfZGYoTklEX2Flc18x MjhfY3RyLCBhZXNfMTI4X3VzZV9kZiwgMCksCisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGFfZGYo TklEX2Flc18xOTJfY3RyLCBhZXNfMTkyX3VzZV9kZiwgMCksCisrICAgIG1ha2VfZHJiZ190ZXN0 X2RhdGFfZGYoTklEX2Flc18yNTZfY3RyLCBhZXNfMjU2X3VzZV9kZiwgMSksCisrICAgIG1ha2Vf ZHJiZ190ZXN0X2RhdGEoTklEX2Flc18xMjhfY3RyLCAwLCBhZXNfMTI4X25vX2RmLCAwKSwKKysg ICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfYWVzXzE5Ml9jdHIsIDAsIGFlc18xOTJfbm9fZGYs IDApLAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9hZXNfMjU2X2N0ciwgMCwgYWVzXzI1 Nl9ub19kZiwgMSksCisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTEsIDAsIHNoYTEs IDApLAorKyAgICBtYWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGEyMjQsIDAsIHNoYTIyNCwgMCks CisrICAgIG1ha2VfZHJiZ190ZXN0X2RhdGEoTklEX3NoYTI1NiwgMCwgc2hhMjU2LCAxKSwKKysg ICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfc2hhMzg0LCAwLCBzaGEzODQsIDApLAorKyAgICBt YWtlX2RyYmdfdGVzdF9kYXRhKE5JRF9zaGE1MTIsIDAsIHNoYTUxMiwgMCksCisrICAgIG1ha2Vf ZHJiZ190ZXN0X2RhdGEoTklEX2htYWNXaXRoU0hBMSwgMCwgaG1hY19zaGExLCAwKSwKKysgICAg bWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEyMjQsIDAsIGhtYWNfc2hhMjI0LCAw KSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEyNTYsIDAsIGhtYWNf c2hhMjU2LCAxKSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dpdGhTSEEzODQs IDAsIGhtYWNfc2hhMzg0LCAwKSwKKysgICAgbWFrZV9kcmJnX3Rlc3RfZGF0YShOSURfaG1hY1dp dGhTSEE1MTIsIDAsIGhtYWNfc2hhNTEyLCAwKSwKKysgICAgezAsIDAsIDB9CisrfTsKKysKKyt0 eXBlZGVmIHN0cnVjdCB7CisrICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVudDsKKysgICAgc2l6 ZV90IGVudGxlbjsKKysgICAgaW50IGVudGNudDsKKysgICAgY29uc3QgdW5zaWduZWQgY2hhciAq bm9uY2U7CisrICAgIHNpemVfdCBub25jZWxlbjsKKysgICAgaW50IG5vbmNlY250OworK30gVEVT VF9FTlQ7CisrCisrc3RhdGljIHNpemVfdCB0ZXN0X2VudHJvcHkoRFJCR19DVFggKmRjdHgsIHVu c2lnbmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRy b3B5LCBzaXplX3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pCisreworKyAgICBURVNUX0VOVCAq dCA9IEZJUFNfZHJiZ19nZXRfYXBwX2RhdGEoZGN0eCk7CisrICAgICpwb3V0ID0gKHVuc2lnbmVk IGNoYXIgKil0LT5lbnQ7CisrICAgIHQtPmVudGNudCsrOworKyAgICByZXR1cm4gdC0+ZW50bGVu OworK30KKysKKytzdGF0aWMgc2l6ZV90IHRlc3Rfbm9uY2UoRFJCR19DVFggKmRjdHgsIHVuc2ln bmVkIGNoYXIgKipwb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50cm9weSwg c2l6ZV90IG1pbl9sZW4sIHNpemVfdCBtYXhfbGVuKQorK3sKKysgICAgVEVTVF9FTlQgKnQgPSBG SVBTX2RyYmdfZ2V0X2FwcF9kYXRhKGRjdHgpOworKyAgICAqcG91dCA9ICh1bnNpZ25lZCBjaGFy ICopdC0+bm9uY2U7CisrICAgIHQtPm5vbmNlY250Kys7CisrICAgIHJldHVybiB0LT5ub25jZWxl bjsKKyt9CisrCisrc3RhdGljIGludCBmaXBzX2RyYmdfc2luZ2xlX2thdChEUkJHX0NUWCAqZGN0 eCwgRFJCR19TRUxGVEVTVF9EQVRBICogdGQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgcXVpY2spCisreworKyAgICBURVNUX0VOVCB0OworKyAgICBpbnQgcnYgPSAwOwor KyAgICBzaXplX3QgYWRpbmxlbjsKKysgICAgdW5zaWduZWQgY2hhciByYW5kb3V0WzEwMjRdOwor KworKyAgICAvKiBJbml0aWFsIHRlc3Qgd2l0aG91dCBQUiAqLworKworKyAgICAvKiBJbnN0YW50 aWF0ZSBEUkJHIHdpdGggdGVzdCBlbnRyb3B5LCBub25jZSBhbmQgcGVyc29uYWxpc2F0aW9uCisr ICAgICAqIHN0cmluZy4KKysgICAgICovCisrCisrICAgIGlmICghRklQU19kcmJnX2luaXQoZGN0 eCwgdGQtPm5pZCwgdGQtPmZsYWdzKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoIUZJ UFNfZHJiZ19zZXRfY2FsbGJhY2tzKGRjdHgsIHRlc3RfZW50cm9weSwgMCwgMCwgdGVzdF9ub25j ZSwgMCkpCisrICAgICAgICByZXR1cm4gMDsKKysKKysgICAgRklQU19kcmJnX3NldF9hcHBfZGF0 YShkY3R4LCAmdCk7CisrCisrICAgIHQuZW50ID0gdGQtPmVudDsKKysgICAgdC5lbnRsZW4gPSB0 ZC0+ZW50bGVuOworKyAgICB0Lm5vbmNlID0gdGQtPm5vbmNlOworKyAgICB0Lm5vbmNlbGVuID0g dGQtPm5vbmNlbGVuOworKyAgICB0LmVudGNudCA9IDA7CisrICAgIHQubm9uY2VjbnQgPSAwOwor KworKyAgICBpZiAoIUZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBl cnNsZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIC8qIE5vdGUgZm9yIENUUiB3aXRo b3V0IERGIHNvbWUgYWRkaXRpb25hbCBpbnB1dCB2YWx1ZXMKKysgICAgICogaWdub3JlIGJ5dGVz IGFmdGVyIHRoZSBrZXlsZW5ndGg6IHNvIHJlZHVjZSBhZGlubGVuCisrICAgICAqIHRvIGhhbGYg dG8gZW5zdXJlIGludmFsaWQgZGF0YSBpcyBmZWQgaW4uCisrICAgICAqLworKyAgICBpZiAoIWZp cHNfcG9zdF9jb3JydXB0KEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50eXBlLCAmZGN0eC0+aWZsYWdz KSkKKysgICAgICAgIGFkaW5sZW4gPSB0ZC0+YWRpbmxlbiAvIDI7CisrICAgIGVsc2UKKysgICAg ICAgIGFkaW5sZW4gPSB0ZC0+YWRpbmxlbjsKKysKKysgICAgLyogR2VuZXJhdGUgd2l0aCBubyBQ UiBhbmQgdmVyaWZ5IG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIGRhdGEgKi8KKysgICAgaWYgKCFG SVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwgdGQtPmFkaW4s IGFkaW5sZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGlmIChtZW1jbXAocmFuZG91 dCwgdGQtPmthdCwgdGQtPmthdGxlbikpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNf RFJCR19TSU5HTEVfS0FULCBGSVBTX1JfTk9QUl9URVNUMV9GQUlMVVJFKTsKKysgICAgICAgIGdv dG8gZXJyMjsKKysgICAgfQorKyAgICAvKiBJZiBhYmJyZXZpYXRlZCBQT1NUIGVuZCBvZiB0ZXN0 ICovCisrICAgIGlmIChxdWljaykgeworKyAgICAgICAgcnYgPSAxOworKyAgICAgICAgZ290byBl cnI7CisrICAgIH0KKysgICAgLyogUmVzZWVkIERSQkcgd2l0aCB0ZXN0IGVudHJvcHkgYW5kIGFk ZGl0aW9uYWwgaW5wdXQgKi8KKysgICAgdC5lbnQgPSB0ZC0+ZW50cmVzZWVkOworKyAgICB0LmVu dGxlbiA9IHRkLT5lbnRyZXNlZWRsZW47CisrCisrICAgIGlmICghRklQU19kcmJnX3Jlc2VlZChk Y3R4LCB0ZC0+YWRpbnJlc2VlZCwgdGQtPmFkaW5yZXNlZWRsZW4pKQorKyAgICAgICAgZ290byBl cnI7CisrCisrICAgIC8qIEdlbmVyYXRlIHdpdGggbm8gUFIgYW5kIHZlcmlmeSBvdXRwdXQgbWF0 Y2hlcyBleHBlY3RlZCBkYXRhICovCisrICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgs IHJhbmRvdXQsIHRkLT5rYXQybGVuLCAwLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 ZC0+YWRpbjIsIHRkLT5hZGluMmxlbikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgaWYg KG1lbWNtcChyYW5kb3V0LCB0ZC0+a2F0MiwgdGQtPmthdDJsZW4pKSB7CisrICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lOR0xFX0tBVCwgRklQU19SX05PUFJfVEVTVDJfRkFJTFVS RSk7CisrICAgICAgICBnb3RvIGVycjI7CisrICAgIH0KKysKKysgICAgRklQU19kcmJnX3VuaW5z dGFudGlhdGUoZGN0eCk7CisrCisrICAgIC8qIE5vdyB0ZXN0IHdpdGggUFIgKi8KKysKKysgICAg LyogSW5zdGFudGlhdGUgRFJCRyB3aXRoIHRlc3QgZW50cm9weSwgbm9uY2UgYW5kIHBlcnNvbmFs aXNhdGlvbgorKyAgICAgKiBzdHJpbmcuCisrICAgICAqLworKyAgICBpZiAoIUZJUFNfZHJiZ19p bml0KGRjdHgsIHRkLT5uaWQsIHRkLT5mbGFncykpCisrICAgICAgICByZXR1cm4gMDsKKysgICAg aWYgKCFGSVBTX2RyYmdfc2V0X2NhbGxiYWNrcyhkY3R4LCB0ZXN0X2VudHJvcHksIDAsIDAsIHRl c3Rfbm9uY2UsIDApKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIEZJUFNfZHJiZ19zZXRf YXBwX2RhdGEoZGN0eCwgJnQpOworKworKyAgICB0LmVudCA9IHRkLT5lbnRfcHI7CisrICAgIHQu ZW50bGVuID0gdGQtPmVudGxlbl9wcjsKKysgICAgdC5ub25jZSA9IHRkLT5ub25jZV9wcjsKKysg ICAgdC5ub25jZWxlbiA9IHRkLT5ub25jZWxlbl9wcjsKKysgICAgdC5lbnRjbnQgPSAwOworKyAg ICB0Lm5vbmNlY250ID0gMDsKKysKKysgICAgaWYgKCFGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0 eCwgdGQtPnBlcnNfcHIsIHRkLT5wZXJzbGVuX3ByKSkKKysgICAgICAgIGdvdG8gZXJyOworKwor KyAgICAvKiBOb3cgZ2VuZXJhdGUgd2l0aCBQUjogd2UgbmVlZCB0byBzdXBwbHkgZW50cm9weSBh cyB0aGlzIHdpbGwKKysgICAgICogcGVyZm9ybSBhIHJlc2VlZCBvcGVyYXRpb24uIENoZWNrIG91 dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlLgorKyAgICAgKi8KKysKKysgICAgdC5lbnQgPSB0 ZC0+ZW50cHJfcHI7CisrICAgIHQuZW50bGVuID0gdGQtPmVudHBybGVuX3ByOworKworKyAgICAv KiBOb3RlIGZvciBDVFIgd2l0aG91dCBERiBzb21lIGFkZGl0aW9uYWwgaW5wdXQgdmFsdWVzCisr ICAgICAqIGlnbm9yZSBieXRlcyBhZnRlciB0aGUga2V5bGVuZ3RoOiBzbyByZWR1Y2UgYWRpbmxl bgorKyAgICAgKiB0byBoYWxmIHRvIGVuc3VyZSBpbnZhbGlkIGRhdGEgaXMgZmVkIGluLgorKyAg ICAgKi8KKysgICAgaWYgKCFmaXBzX3Bvc3RfY29ycnVwdChGSVBTX1RFU1RfRFJCRywgZGN0eC0+ dHlwZSwgJmRjdHgtPmlmbGFncykpCisrICAgICAgICBhZGlubGVuID0gdGQtPmFkaW5sZW5fcHIg LyAyOworKyAgICBlbHNlCisrICAgICAgICBhZGlubGVuID0gdGQtPmFkaW5sZW5fcHI7CisrICAg IGlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW5fcHIsIDEs CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5hZGluX3ByLCBhZGlubGVuKSkKKysg ICAgICAgIGdvdG8gZXJyOworKworKyAgICBpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXRfcHIs IHRkLT5rYXRsZW5fcHIpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfU0lO R0xFX0tBVCwgRklQU19SX1BSX1RFU1QxX0ZBSUxVUkUpOworKyAgICAgICAgZ290byBlcnIyOwor KyAgICB9CisrCisrICAgIC8qIE5vdyBnZW5lcmF0ZSBhZ2FpbiB3aXRoIFBSOiBzdXBwbHkgbmV3 IGVudHJvcHkgYWdhaW4uCisrICAgICAqIENoZWNrIG91dHB1dCBtYXRjaGVzIGV4cGVjdGVkIHZh bHVlLgorKyAgICAgKi8KKysKKysgICAgdC5lbnQgPSB0ZC0+ZW50Z19wcjsKKysgICAgdC5lbnRs ZW4gPSB0ZC0+ZW50Z2xlbl9wcjsKKysKKysgICAgaWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0 eCwgcmFuZG91dCwgdGQtPmthdDJsZW5fcHIsIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRkLT5hZGluZ19wciwgdGQtPmFkaW5nbGVuX3ByKSkKKysgICAgICAgIGdvdG8gZXJyOwor KworKyAgICBpZiAobWVtY21wKHJhbmRvdXQsIHRkLT5rYXQyX3ByLCB0ZC0+a2F0Mmxlbl9wcikp IHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FULCBGSVBTX1Jf UFJfVEVTVDJfRkFJTFVSRSk7CisrICAgICAgICBnb3RvIGVycjI7CisrICAgIH0KKysgICAgLyog QWxsIE9LLCB0ZXN0IGNvbXBsZXRlICovCisrICAgIHJ2ID0gMTsKKysKKysgZXJyOgorKyAgICBp ZiAocnYgPT0gMCkKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19TSU5HTEVfS0FU LCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsKKysgZXJyMjoKKysgICAgRklQU19kcmJnX3VuaW5z dGFudGlhdGUoZGN0eCk7CisrCisrICAgIHJldHVybiBydjsKKysKKyt9CisrCisrLyogSW5pdGlh bGlzZSBhIERSQkcgYmFzZWQgb24gc2VsZnRlc3QgZGF0YSAqLworKworK3N0YXRpYyBpbnQgZG9f ZHJiZ19pbml0KERSQkdfQ1RYICpkY3R4LCBEUkJHX1NFTEZURVNUX0RBVEEgKiB0ZCwgVEVTVF9F TlQgKiB0KQorK3sKKysKKysgICAgaWYgKCFGSVBTX2RyYmdfaW5pdChkY3R4LCB0ZC0+bmlkLCB0 ZC0+ZmxhZ3MpKQorKyAgICAgICAgcmV0dXJuIDA7CisrCisrICAgIGlmICghRklQU19kcmJnX3Nl dF9jYWxsYmFja3MoZGN0eCwgdGVzdF9lbnRyb3B5LCAwLCAwLCB0ZXN0X25vbmNlLCAwKSkKKysg ICAgICAgIHJldHVybiAwOworKworKyAgICBGSVBTX2RyYmdfc2V0X2FwcF9kYXRhKGRjdHgsIHQp OworKworKyAgICB0LT5lbnQgPSB0ZC0+ZW50OworKyAgICB0LT5lbnRsZW4gPSB0ZC0+ZW50bGVu OworKyAgICB0LT5ub25jZSA9IHRkLT5ub25jZTsKKysgICAgdC0+bm9uY2VsZW4gPSB0ZC0+bm9u Y2VsZW47CisrICAgIHQtPmVudGNudCA9IDA7CisrICAgIHQtPm5vbmNlY250ID0gMDsKKysgICAg cmV0dXJuIDE7CisrfQorKworKy8qIEluaXRpYWxpc2UgYW5kIGluc3RhbnRpYXRlIERSQkcgYmFz ZWQgb24gc2VsZnRlc3QgZGF0YSAqLworK3N0YXRpYyBpbnQgZG9fZHJiZ19pbnN0YW50aWF0ZShE UkJHX0NUWCAqZGN0eCwgRFJCR19TRUxGVEVTVF9EQVRBICogdGQsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFRFU1RfRU5UICogdCkKKyt7CisrICAgIGlmICghZG9fZHJiZ19pbml0 KGRjdHgsIHRkLCB0KSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoIUZJUFNfZHJiZ19p bnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pKQorKyAgICAgICAgcmV0dXJu IDA7CisrCisrICAgIHJldHVybiAxOworK30KKysKKysvKiBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1z IGV4dGVuc2l2ZSBlcnJvciBjaGVja2luZyBhcyByZXF1aXJlZCBieSBTUDgwMC05MC4KKysgKiBJ bmR1Y2Ugc2V2ZXJhbCBmYWlsdXJlIG1vZGVzIGFuZCBjaGVjayBhbiBlcnJvciBjb25kaXRpb24g aXMgc2V0LgorKyAqIFRoaXMgZnVuY3Rpb24gYWxvbmcgd2l0aCBmaXBzX2RyYmdfc2luZ2xlX2th dCBwZWZvcm1zIHRoZSBoZWFsdGggY2hlY2tpbmcKKysgKiBvcGVyYXRpb24uCisrICovCisrCisr c3RhdGljIGludCBmaXBzX2RyYmdfZXJyb3JfY2hlY2soRFJCR19DVFggKmRjdHgsIERSQkdfU0VM RlRFU1RfREFUQSAqIHRkKQorK3sKKysgICAgdW5zaWduZWQgY2hhciByYW5kb3V0WzEwMjRdOwor KyAgICBURVNUX0VOVCB0OworKyAgICBzaXplX3QgaTsKKysgICAgdW5zaWduZWQgaW50IHJlc2Vl ZF9jb3VudGVyX3RtcDsKKysgICAgdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICop ZGN0eDsKKysKKysgICAgLyogSW5pdGlhbGlzZSBEUkJHICovCisrCisrICAgIGlmICghZG9fZHJi Z19pbml0KGRjdHgsIHRkLCAmdCkpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgLyogRG9u J3QgcmVwb3J0IGluZHVjZWQgZXJyb3JzICovCisrICAgIGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZM QUdfTk9FUlI7CisrCisrICAgIC8qIFBlcnNvbmFsaXNhdGlvbiBzdHJpbmcgdGVzdHMgKi8KKysK KysgICAgLyogVGVzdCBkZXRlY3Rpb24gb2YgdG9vIGxhcmdlIHBlcnNvbmxpc2F0aW9uIHN0cmlu ZyAqLworKworKyAgICBpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLT5wZXJzLCBk Y3R4LT5tYXhfcGVycyArIDEpID4gMCkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICBGSVBTX1JfUEVSU09OQUxJU0FUSU9O X0VSUk9SX1VOREVURUNURUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAg LyogRW50cm9weSBzb3VyY2UgdGVzdHMgKi8KKysKKysgICAgLyogVGVzdCBlbnRyb3B5IHNvdXJj ZSBmYWlsdXJlIGRldGVjaW9uOiBpLmUuIHJldHVybnMgbm8gZGF0YSAqLworKworKyAgICB0LmVu dGxlbiA9IDA7CisrCisrICAgIGlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBl cnMsIHRkLT5wZXJzbGVuKSA+IDApIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJC R19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5E RVRFQ1RFRCk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICAvKiBUcnkgdG8g Z2VuZXJhdGUgb3V0cHV0IGZyb20gdW5pbnN0YW50aWF0ZWQgRFJCRyAqLworKyAgICBpZiAoRklQ U19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkgeworKyAgICAgICAgRklQ U2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICBGSVBT X1JfR0VORVJBVEVfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAg fQorKworKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysgICAgaWYgKCFG SVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrICAg ICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0 ZCwgJnQpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGRjdHgtPmlmbGFncyB8PSBEUkJH X0ZMQUdfTk9FUlI7CisrCisrICAgIC8qIFRlc3QgaW5zdWZmaWNpZW50IGVudHJvcHkgKi8KKysK KysgICAgdC5lbnRsZW4gPSBkY3R4LT5taW5fZW50cm9weSAtIDE7CisrCisrICAgIGlmIChGSVBT X2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5wZXJzbGVuKSA+IDApIHsKKysg ICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAg ICAgICAgRklQU19SX0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3RvIGVy cjsKKysgICAgfQorKworKyAgICBkY3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysg ICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAgRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJP Uik7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICAvKiBUZXN0IHRvbyBtdWNo IGVudHJvcHkgKi8KKysKKysgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysg ICAgICAgIGdvdG8gZXJyOworKworKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJS OworKworKyAgICB0LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKKysKKysgICAgaWYg KEZJUFNfZHJiZ19pbnN0YW50aWF0ZShkY3R4LCB0ZC0+cGVycywgdGQtPnBlcnNsZW4pID4gMCkg eworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAg ICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRFVEVDVEVEKTsKKysgICAgICAgIGdv dG8gZXJyOworKyAgICB9CisrCisrICAgIGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJS OworKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7CisrICAgICAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRF X0VSUk9SKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIE5vbmNlIHRl c3RzICovCisrCisrICAgIC8qIFRlc3QgdG9vIHNtYWxsIG5vbmNlICovCisrCisrICAgIGlmIChk Y3R4LT5taW5fbm9uY2UpIHsKKysKKysgICAgICAgIGlmICghZG9fZHJiZ19pbml0KGRjdHgsIHRk LCAmdCkpCisrICAgICAgICAgICAgZ290byBlcnI7CisrCisrICAgICAgICBkY3R4LT5pZmxhZ3Mg fD0gRFJCR19GTEFHX05PRVJSOworKworKyAgICAgICAgdC5ub25jZWxlbiA9IGRjdHgtPm1pbl9u b25jZSAtIDE7CisrCisrICAgICAgICBpZiAoRklQU19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRk LT5wZXJzLCB0ZC0+cGVyc2xlbikgPiAwKSB7CisrICAgICAgICAgICAgRklQU2VycihGSVBTX0Zf RklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICAgICAgRklQU19SX05PTkNF X0VSUk9SX1VOREVURUNURUQpOworKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgfQor KworKyAgICAgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdfTk9FUlI7CisrICAgICAgICBp ZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7CisrICAgICAgICAgICAgRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJP Uik7CisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICB9CisrCisrICAgIH0KKysKKysg ICAgLyogVGVzdCB0b28gbGFyZ2Ugbm9uY2UgKi8KKysKKysgICAgaWYgKGRjdHgtPm1heF9ub25j ZSkgeworKworKyAgICAgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysgICAg ICAgICAgICBnb3RvIGVycjsKKysKKysgICAgICAgIGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdf Tk9FUlI7CisrCisrICAgICAgICB0Lm5vbmNlbGVuID0gZGN0eC0+bWF4X25vbmNlICsgMTsKKysK KysgICAgICAgIGlmIChGSVBTX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQtPnBlcnMsIHRkLT5w ZXJzbGVuKSA+IDApIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJS T1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgICAgICBGSVBTX1JfTk9OQ0VfRVJST1JfVU5ERVRF Q1RFRCk7CisrICAgICAgICAgICAgZ290byBlcnI7CisrICAgICAgICB9CisrCisrICAgICAgICBk Y3R4LT5pZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysgICAgICAgIGlmICghRklQU19kcmJn X3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBT X0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysgICAgICAg ICAgICBnb3RvIGVycjsKKysgICAgICAgIH0KKysKKysgICAgfQorKworKyAgICAvKiBJbnN0YW50 aWF0ZSB3aXRoIHZhbGlkIGRhdGEuICovCisrICAgIGlmICghZG9fZHJiZ19pbnN0YW50aWF0ZShk Y3R4LCB0ZCwgJnQpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIC8qIENoZWNrIGdlbmVy YXRpb24gaXMgbm93IE9LICovCisrICAgIGlmICghRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJh bmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkLT5h ZGluLCB0ZC0+YWRpbmxlbikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgZGN0eC0+aWZs YWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysgICAgLyogUmVxdWVzdCB0b28gbXVjaCBkYXRh IGZvciBvbmUgcmVxdWVzdCAqLworKyAgICBpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRjdHgsIHJh bmRvdXQsIGRjdHgtPm1heF9yZXF1ZXN0ICsgMSwgMCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICB0ZC0+YWRpbiwgdGQtPmFkaW5sZW4pKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9G SVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJUFNfUl9SRVFVRVNUX0xF TkdUSF9FUlJPUl9VTkRFVEVDVEVEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisr ICAgIC8qIFRyeSB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAqLworKyAgICBpZiAoRklQU19k cmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGQtPmFkaW4sIGRjdHgtPm1heF9hZGluICsgMSkpIHsKKysgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAg RklQU19SX0FERElUSU9OQUxfSU5QVVRfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3Rv IGVycjsKKysgICAgfQorKworKyAgICAvKiBDaGVjayBwcmVkaWN0aW9uIHJlc2lzdGFuY2UgcmVx dWVzdCBmYWlscyBpZiBlbnRyb3B5IHNvdXJjZQorKyAgICAgKiBmYWlsdXJlLgorKyAgICAgKi8K KysKKysgICAgdC5lbnRsZW4gPSAwOworKworKyAgICBpZiAoRklQU19kcmJnX2dlbmVyYXRlKGRj dHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg dGQtPmFkaW4sIHRkLT5hZGlubGVuKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19E UkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICBGSVBTX1JfRU5UUk9QWV9FUlJPUl9V TkRFVEVDVEVEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGRjdHgtPmlm bGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRp YXRlKGRjdHgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hF Q0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAg ICB9CisrCisrICAgIC8qIEluc3RhbnRpYXRlIGFnYWluIHdpdGggdmFsaWQgZGF0YSAqLworKwor KyAgICBpZiAoIWRvX2RyYmdfaW5zdGFudGlhdGUoZGN0eCwgdGQsICZ0KSkKKysgICAgICAgIGdv dG8gZXJyOworKyAgICAvKiBUZXN0IHJlc2VlZCBjb3VudGVyIHdvcmtzICovCisrICAgIC8qIFNh dmUgaW5pdGlhbCByZXNlZWQgY291bnRlciAqLworKyAgICByZXNlZWRfY291bnRlcl90bXAgPSBk Y3R4LT5yZXNlZWRfY291bnRlcjsKKysgICAgLyogU2V0IHJlc2VlZCBjb3VudGVyIHRvIGJleW9u ZCBpbnRlcnZhbCAqLworKyAgICBkY3R4LT5yZXNlZWRfY291bnRlciA9IGRjdHgtPnJlc2VlZF9p bnRlcnZhbDsKKysKKysgICAgLyogR2VuZXJhdGUgb3V0cHV0IGFuZCBjaGVjayBlbnRyb3B5IGhh cyBiZWVuIHJlcXVlc3RlZCBmb3IgcmVzZWVkICovCisrICAgIHQuZW50Y250ID0gMDsKKysgICAg aWYgKCFGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmthdGxlbiwgMCwKKysg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSkKKysgICAg ICAgIGdvdG8gZXJyOworKyAgICBpZiAodC5lbnRjbnQgIT0gMSkgeworKyAgICAgICAgRklQU2Vy cihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAgICAgICAgICBGSVBTX1Jf RU5UUk9QWV9OT1RfUkVRVUVTVEVEX0ZPUl9SRVNFRUQpOworKyAgICAgICAgZ290byBlcnI7Cisr ICAgIH0KKysgICAgLyogQ2hlY2sgcmVzZWVkIGNvdW50ZXIgaGFzIGJlZW4gcmVzZXQgKi8KKysg ICAgaWYgKGRjdHgtPnJlc2VlZF9jb3VudGVyICE9IHJlc2VlZF9jb3VudGVyX3RtcCArIDEpIHsK KysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1JF U0VFRF9DT1VOVEVSX0VSUk9SKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAg IGRjdHgtPmlmbGFncyAmPSB+RFJCR19GTEFHX05PRVJSOworKyAgICBpZiAoIUZJUFNfZHJiZ191 bmluc3RhbnRpYXRlKGRjdHgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdf RVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRFX0VSUk9SKTsKKysgICAgICAgIGdvdG8g ZXJyOworKyAgICB9CisrCisrICAgIC8qIENoZWNrIHByZWRpY3Rpb24gcmVzaXN0YW5jZSByZXF1 ZXN0IGZhaWxzIGlmIGVudHJvcHkgc291cmNlCisrICAgICAqIGZhaWx1cmUuCisrICAgICAqLwor KworKyAgICB0LmVudGxlbiA9IDA7CisrCisrICAgIGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdf Tk9FUlI7CisrICAgIGlmIChGSVBTX2RyYmdfZ2VuZXJhdGUoZGN0eCwgcmFuZG91dCwgdGQtPmth dGxlbiwgMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZC0+YWRpbiwgdGQtPmFkaW5s ZW4pKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisr ICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKyAgICAg ICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgZGN0eC0+aWZsYWdzICY9IH5EUkJHX0ZMQUdf Tk9FUlI7CisrCisrICAgIGlmICghRklQU19kcmJnX3VuaW5zdGFudGlhdGUoZGN0eCkpIHsKKysg ICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywgRklQU19SX1VOSU5T VEFOVElBVEVfRVJST1IpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgaWYg KCFkb19kcmJnX2luc3RhbnRpYXRlKGRjdHgsIHRkLCAmdCkpCisrICAgICAgICBnb3RvIGVycjsK KysgICAgLyogVGVzdCByZXNlZWQgY291bnRlciB3b3JrcyAqLworKyAgICAvKiBTYXZlIGluaXRp YWwgcmVzZWVkIGNvdW50ZXIgKi8KKysgICAgcmVzZWVkX2NvdW50ZXJfdG1wID0gZGN0eC0+cmVz ZWVkX2NvdW50ZXI7CisrICAgIC8qIFNldCByZXNlZWQgY291bnRlciB0byBiZXlvbmQgaW50ZXJ2 YWwgKi8KKysgICAgZGN0eC0+cmVzZWVkX2NvdW50ZXIgPSBkY3R4LT5yZXNlZWRfaW50ZXJ2YWw7 CisrCisrICAgIC8qIEdlbmVyYXRlIG91dHB1dCBhbmQgY2hlY2sgZW50cm9weSBoYXMgYmVlbiBy ZXF1ZXN0ZWQgZm9yIHJlc2VlZCAqLworKyAgICB0LmVudGNudCA9IDA7CisrICAgIGlmICghRklQ U19kcmJnX2dlbmVyYXRlKGRjdHgsIHJhbmRvdXQsIHRkLT5rYXRsZW4sIDAsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikpCisrICAgICAgICBnb3Rv IGVycjsKKysgICAgaWYgKHQuZW50Y250ICE9IDEpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19G X0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgRklQU19SX0VOVFJPUFlf Tk9UX1JFUVVFU1RFRF9GT1JfUkVTRUVEKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9Cisr ICAgIC8qIENoZWNrIHJlc2VlZCBjb3VudGVyIGhhcyBiZWVuIHJlc2V0ICovCisrICAgIGlmIChk Y3R4LT5yZXNlZWRfY291bnRlciAhPSByZXNlZWRfY291bnRlcl90bXAgKyAxKSB7CisrICAgICAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9SRVNFRURfQ09V TlRFUl9FUlJPUik7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBkY3R4LT5p ZmxhZ3MgJj0gfkRSQkdfRkxBR19OT0VSUjsKKysgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50 aWF0ZShkY3R4KSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NI RUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrICAgICAgICBnb3RvIGVycjsKKysg ICAgfQorKworKyAgICAvKiBFeHBsaWNpdCByZXNlZWQgdGVzdHMgKi8KKysKKysgICAgLyogVGVz dCBleHBsaWNpdCByZXNlZWQgd2l0aCB0b28gbGFyZ2UgYWRkaXRpb25hbCBpbnB1dCAqLworKyAg ICBpZiAoIWRvX2RyYmdfaW5pdChkY3R4LCB0ZCwgJnQpKQorKyAgICAgICAgZ290byBlcnI7Cisr CisrICAgIGRjdHgtPmlmbGFncyB8PSBEUkJHX0ZMQUdfTk9FUlI7CisrCisrICAgIGlmIChGSVBT X2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCBkY3R4LT5tYXhfYWRpbiArIDEpID4gMCkgewor KyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLAorKyAgICAgICAg ICAgICAgICBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9VTkRFVEVDVEVEKTsKKysgICAg ICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIFRlc3QgZXhwbGljaXQgcmVzZWVkIHdp dGggZW50cm9weSBzb3VyY2UgZmFpbHVyZSAqLworKworKyAgICB0LmVudGxlbiA9IDA7CisrCisr ICAgIGlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5hZGluLCB0ZC0+YWRpbmxlbikgPiAw KSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssCisrICAg ICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VOREVURUNURUQpOworKyAgICAgICAg Z290byBlcnI7CisrICAgIH0KKysKKysgICAgaWYgKCFGSVBTX2RyYmdfdW5pbnN0YW50aWF0ZShk Y3R4KSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19EUkJHX0VSUk9SX0NIRUNLLCBG SVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQor KworKyAgICAvKiBUZXN0IGV4cGxpY2l0IHJlc2VlZCB3aXRoIHRvbyBtdWNoIGVudHJvcHkgKi8K KysKKysgICAgaWYgKCFkb19kcmJnX2luaXQoZGN0eCwgdGQsICZ0KSkKKysgICAgICAgIGdvdG8g ZXJyOworKworKyAgICBkY3R4LT5pZmxhZ3MgfD0gRFJCR19GTEFHX05PRVJSOworKworKyAgICB0 LmVudGxlbiA9IGRjdHgtPm1heF9lbnRyb3B5ICsgMTsKKysKKysgICAgaWYgKEZJUFNfZHJiZ19y ZXNlZWQoZGN0eCwgdGQtPmFkaW4sIHRkLT5hZGlubGVuKSA+IDApIHsKKysgICAgICAgIEZJUFNl cnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysgICAgICAgICAgICAgICAgRklQU19S X0VOVFJPUFlfRVJST1JfVU5ERVRFQ1RFRCk7CisrICAgICAgICBnb3RvIGVycjsKKysgICAgfQor KworKyAgICBpZiAoIUZJUFNfZHJiZ191bmluc3RhbnRpYXRlKGRjdHgpKSB7CisrICAgICAgICBG SVBTZXJyKEZJUFNfRl9GSVBTX0RSQkdfRVJST1JfQ0hFQ0ssIEZJUFNfUl9VTklOU1RBTlRJQVRF X0VSUk9SKTsKKysgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIC8qIFRlc3QgZXhw bGljaXQgcmVzZWVkIHdpdGggdG9vIGxpdHRsZSBlbnRyb3B5ICovCisrCisrICAgIGlmICghZG9f ZHJiZ19pbml0KGRjdHgsIHRkLCAmdCkpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgZGN0 eC0+aWZsYWdzIHw9IERSQkdfRkxBR19OT0VSUjsKKysKKysgICAgdC5lbnRsZW4gPSBkY3R4LT5t aW5fZW50cm9weSAtIDE7CisrCisrICAgIGlmIChGSVBTX2RyYmdfcmVzZWVkKGRjdHgsIHRkLT5h ZGluLCB0ZC0+YWRpbmxlbikgPiAwKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX0RS QkdfRVJST1JfQ0hFQ0ssCisrICAgICAgICAgICAgICAgIEZJUFNfUl9FTlRST1BZX0VSUk9SX1VO REVURUNURUQpOworKyAgICAgICAgZ290byBlcnI7CisrICAgIH0KKysKKysgICAgaWYgKCFGSVBT X2RyYmdfdW5pbnN0YW50aWF0ZShkY3R4KSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQ U19EUkJHX0VSUk9SX0NIRUNLLCBGSVBTX1JfVU5JTlNUQU5USUFURV9FUlJPUik7CisrICAgICAg ICBnb3RvIGVycjsKKysgICAgfQorKworKyAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikmZGN0eC0+ ZDsKKysgICAgLyogU3RhbmRhcmQgc2F5cyB3ZSBoYXZlIHRvIGNoZWNrIHVuaW5zdGFudGlhdGUg cmVhbGx5IHplcm9lcworKyAgICAgKiB0aGUgZGF0YS4uLgorKyAgICAgKi8KKysgICAgZm9yIChp ID0gMDsgaSA8IHNpemVvZihkY3R4LT5kKTsgaSsrKSB7CisrICAgICAgICBpZiAoKnAgIT0gMCkg eworKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19FUlJPUl9DSEVDSywKKysg ICAgICAgICAgICAgICAgICAgIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1IpOwor KyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICAgICAgfQorKyAgICAgICAgcCsrOworKyAgICB9 CisrCisrICAgIHJldHVybiAxOworKworKyBlcnI6CisrICAgIC8qIEEgcmVhbCBlcnJvciBhcyBv cHBvc2VkIHRvIGFuIGluZHVjZWQgb25lOiB1bmRlcmx5aW5nIGZ1bmN0aW9uIHdpbGwKKysgICAg ICogaW5kaWNhdGUgdGhlIGVycm9yLgorKyAgICAgKi8KKysgICAgaWYgKCEoZGN0eC0+aWZsYWdz ICYgRFJCR19GTEFHX05PRVJSKSkKKysgICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfRFJCR19F UlJPUl9DSEVDSywgRklQU19SX0ZVTkNUSU9OX0VSUk9SKTsKKysgICAgRklQU19kcmJnX3VuaW5z dGFudGlhdGUoZGN0eCk7CisrICAgIHJldHVybiAwOworKworK30KKysKKytpbnQgZmlwc19kcmJn X2thdChEUkJHX0NUWCAqZGN0eCwgaW50IG5pZCwgdW5zaWduZWQgaW50IGZsYWdzKQorK3sKKysg ICAgRFJCR19TRUxGVEVTVF9EQVRBICp0ZDsKKysgICAgZmxhZ3MgfD0gRFJCR19GTEFHX1RFU1Q7 CisrICAgIGZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykgeworKyAgICAg ICAgaWYgKHRkLT5uaWQgPT0gbmlkICYmIHRkLT5mbGFncyA9PSBmbGFncykgeworKyAgICAgICAg ICAgIGlmICghZmlwc19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDApKQorKyAgICAgICAgICAg ICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICByZXR1cm4gZmlwc19kcmJnX2Vycm9yX2NoZWNr KGRjdHgsIHRkKTsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4gMDsKKyt9CisrCisr aW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2soRFJCR19DVFggKmRjdHgpCisreworKyAgICBpbnQg cnY7CisrICAgIERSQkdfQ1RYICp0Y3R4ID0gTlVMTDsKKysgICAgdGN0eCA9IEZJUFNfZHJiZ19u ZXcoMCwgMCk7CisrICAgIGZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCBkY3R4LT50 eXBlLCAmZGN0eC0+eGZsYWdzKTsKKysgICAgaWYgKCF0Y3R4KQorKyAgICAgICAgcmV0dXJuIDA7 CisrICAgIHJ2ID0gZmlwc19kcmJnX2thdCh0Y3R4LCBkY3R4LT50eXBlLCBkY3R4LT54ZmxhZ3Mp OworKyAgICBpZiAodGN0eCkKKysgICAgICAgIEZJUFNfZHJiZ19mcmVlKHRjdHgpOworKyAgICBp ZiAocnYpCisrICAgICAgICBmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgZGN0eC0+ dHlwZSwgJmRjdHgtPnhmbGFncyk7CisrICAgIGVsc2UKKysgICAgICAgIGZpcHNfcG9zdF9mYWls ZWQoRklQU19URVNUX0RSQkcsIGRjdHgtPnR5cGUsICZkY3R4LT54ZmxhZ3MpOworKyAgICBpZiAo IXJ2KQorKyAgICAgICAgZGN0eC0+c3RhdHVzID0gRFJCR19TVEFUVVNfRVJST1I7CisrICAgIGVs c2UKKysgICAgICAgIGRjdHgtPmhlYWx0aF9jaGVja19jbnQgPSAwOworKyAgICByZXR1cm4gcnY7 CisrfQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X2RyYmcodm9pZCkKKyt7CisrICAgIERSQkdfQ1RY ICpkY3R4OworKyAgICBEUkJHX1NFTEZURVNUX0RBVEEgKnRkOworKyAgICBpbnQgcnYgPSAxOwor KyAgICBkY3R4ID0gRklQU19kcmJnX25ldygwLCAwKTsKKysgICAgaWYgKCFkY3R4KQorKyAgICAg ICAgcmV0dXJuIDA7CisrICAgIGZvciAodGQgPSBkcmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQr KykgeworKyAgICAgICAgaWYgKHRkLT5wb3N0ICE9IDEpCisrICAgICAgICAgICAgY29udGludWU7 CisrICAgICAgICBpZiAoIWZpcHNfcG9zdF9zdGFydGVkKEZJUFNfVEVTVF9EUkJHLCB0ZC0+bmlk LCAmdGQtPmZsYWdzKSkKKysgICAgICAgICAgICByZXR1cm4gMTsKKysgICAgICAgIGlmICghZmlw c19kcmJnX3NpbmdsZV9rYXQoZGN0eCwgdGQsIDEpKSB7CisrICAgICAgICAgICAgZmlwc19wb3N0 X2ZhaWxlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncyk7CisrICAgICAgICAg ICAgcnYgPSAwOworKyAgICAgICAgICAgIGNvbnRpbnVlOworKyAgICAgICAgfQorKyAgICAgICAg aWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFn cykpCisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgRklQU19kcmJnX2ZyZWUo ZGN0eCk7CisrICAgIHJldHVybiBydjsKKyt9CisrCisraW50IEZJUFNfc2VsZnRlc3RfZHJiZ19h bGwodm9pZCkKKyt7CisrICAgIERSQkdfQ1RYICpkY3R4OworKyAgICBEUkJHX1NFTEZURVNUX0RB VEEgKnRkOworKyAgICBpbnQgcnYgPSAxOworKyAgICBkY3R4ID0gRklQU19kcmJnX25ldygwLCAw KTsKKysgICAgaWYgKCFkY3R4KQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGZvciAodGQgPSBk cmJnX3Rlc3Q7IHRkLT5uaWQgIT0gMDsgdGQrKykgeworKyAgICAgICAgaWYgKCFmaXBzX3Bvc3Rf c3RhcnRlZChGSVBTX1RFU1RfRFJCRywgdGQtPm5pZCwgJnRkLT5mbGFncykpCisrICAgICAgICAg ICAgcmV0dXJuIDE7CisrICAgICAgICBpZiAoIWZpcHNfZHJiZ19zaW5nbGVfa2F0KGRjdHgsIHRk LCAwKSkgeworKyAgICAgICAgICAgIGZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RSQkcsIHRk LT5uaWQsICZ0ZC0+ZmxhZ3MpOworKyAgICAgICAgICAgIHJ2ID0gMDsKKysgICAgICAgICAgICBj b250aW51ZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmICghZmlwc19kcmJnX2Vycm9yX2NoZWNr KGRjdHgsIHRkKSkgeworKyAgICAgICAgICAgIGZpcHNfcG9zdF9mYWlsZWQoRklQU19URVNUX0RS QkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpOworKyAgICAgICAgICAgIHJ2ID0gMDsKKysgICAgICAg ICAgICBjb250aW51ZTsKKysgICAgICAgIH0KKysgICAgICAgIGlmICghZmlwc19wb3N0X3N1Y2Nl c3MoRklQU19URVNUX0RSQkcsIHRkLT5uaWQsICZ0ZC0+ZmxhZ3MpKQorKyAgICAgICAgICAgIHJl dHVybiAwOworKyAgICB9CisrICAgIEZJUFNfZHJiZ19mcmVlKGRjdHgpOworKyAgICByZXR1cm4g cnY7CisrfQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19kcmJnX3Nl bGZ0ZXN0LmguZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRl c3QuaAorLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfZHJiZ19zZWxmdGVzdC5o LmZpcHMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MjgzMjExNTcgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4yaC9jcnlwdG8vZmlwcy9maXBzX2RyYmdfc2VsZnRlc3QuaAkyMDE2LTA1LTAzIDE2OjU3OjU4 LjgyODMyMTE1NyArMDIwMAorQEAgLTAsMCArMSwxNzkxIEBACisrLyogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysg KiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0Ogor KyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4g QWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0 aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAi T3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0 bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3Jp dHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZS5vcmcu CisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90 IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4g dGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0 aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBm b3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUg SVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAq IEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J VEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg SU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklC VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysg KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H LCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lO RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLwor KworKy8qIFNlbGZ0ZXN0IGFuZCBoZWFsdGggY2hlY2sgZGF0YSBmb3IgdGhlIFNQODAwLTkwIERS QkcgKi8KKysKKysjZGVmaW5lIF9fZmlwc19jb25zdHNlZworKworKy8qIEFFUy0xMjggdXNlIGRm IFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHg2MSwgMHg1MiwgMHg3Yywg MHhlMywgMHgyMywgMHg3ZCwgMHgwYSwgMHgwNywgMHgxMCwgMHgwYywgMHg1MCwgMHgzMywKKysg ICAgMHhjOCwgMHhkYiwgMHhmZiwgMHgxMgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX25vbmNlW10gPSB7CisrICAg IDB4NTEsIDB4MGQsIDB4ODUsIDB4NzcsIDB4ZWQsIDB4MjIsIDB4OTcsIDB4MjgKKyt9OworKwor K19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4 X3VzZV9kZl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHg1OSwgMHg5Ziwg MHhiYiwgMHhjZCwgMHhkNSwgMHgyNSwgMHg2OSwgMHhiNSwgMHhjYiwgMHhiNSwgMHgwMywgMHhm ZSwKKysgICAgMHhkNywgMHhkNywgMHgwMSwgMHg2NworK307CisrCisrX19maXBzX2NvbnN0c2Vn CisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2FkZGl0 aW9uYWxpbnB1dFtdID0geworKyAgICAweGVmLCAweDg4LCAweDc2LCAweDAxLCAweGFmLCAweDNj LCAweGZlLCAweDhiLCAweGFmLCAweDI2LCAweDA2LCAweDllLAorKyAgICAweDlhLCAweDQ3LCAw eDA4LCAweDc2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAg MHhlMiwgMHg3NiwgMHhmOSwgMHhmNiwgMHgzYSwgMHhiYSwgMHgxMCwgMHg5ZiwgMHhiZiwgMHg0 NywgMHgwZSwgMHg1MSwKKysgICAgMHgwOSwgMHhmYiwgMHhhMywgMHhiNgorK307CisrCisrX19m aXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNl X2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhkNCwgMHg5OCwgMHg4YSwgMHg0 NiwgMHg4MCwgMHg0YywgMHhkYiwgMHhhMywgMHg1OSwgMHgwMiwgMHg1NywgMHg1MiwKKysgICAg MHg2NiwgMHgxYywgMHhlYSwgMHg1YgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3ByX2FkZGl0aW9uYWxpbnB1 dDJbXSA9IHsKKysgICAgMHg4OCwgMHg4YywgMHg5MSwgMHhkNiwgMHhiZSwgMHg1NiwgMHg2ZSwg MHgwOCwgMHg5YSwgMHg2MiwgMHgyYiwgMHgxMSwKKysgICAgMHgzZiwgMHg1ZSwgMHgzMSwgMHgw NgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18xMjhfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAweGMwLCAw eDVjLCAweDZiLCAweDk4LCAweDAxLCAweDBkLCAweDU4LCAweDE4LCAweDUxLCAweDE4LCAweDk2 LCAweGFlLAorKyAgICAweGE3LCAweGUzLCAweGE4LCAweDY3CisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfcHJfcmV0dXJu ZWRiaXRzW10gPSB7CisrICAgIDB4Y2YsIDB4MDEsIDB4YWMsIDB4MjIsIDB4MzEsIDB4MDYsIDB4 OGUsIDB4ZmMsIDB4Y2UsIDB4NTYsIDB4ZWEsIDB4MjQsCisrICAgIDB4MGYsIDB4MzgsIDB4NDMs IDB4YzYKKyt9OworKworKy8qIEFFUy0xMjggdXNlIGRmIE5vIFBSICAqLworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9lbnRyb3B5aW5w dXRbXSA9IHsKKysgICAgMHgxZiwgMHg4ZSwgMHgzNCwgMHg4MiwgMHgwYywgMHhiNywgMHhiZSwg MHhjNSwgMHgwMSwgMHgzZSwgMHhkMCwgMHhhMywKKysgICAgMHg5ZCwgMHg3ZCwgMHgxYywgMHg5 YgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfdXNlX2RmX25vbmNlW10gPSB7CisrICAgIDB4ZDUsIDB4NGQsIDB4YmQsIDB4NGEsIDB4 OTMsIDB4N2YsIDB4YjgsIDB4OTYKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9IHsKKysgICAgMHhhYiwgMHhkNiwgMHgzZiwgMHgwNCwgMHhmZSwgMHgyNywgMHg2Yiwg MHgyZCwgMHhkNywgMHhjMywgMHgxYywgMHhmMywKKysgICAgMHgzOCwgMHg2NiwgMHhiYSwgMHgx YgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweGZlLCAweGY0LCAweDA5 LCAweGE4LCAweGI3LCAweDczLCAweDI3LCAweDljLCAweDVmLCAweGE3LCAweGVhLCAweDQ2LAor KyAgICAweGI1LCAweGUyLCAweGIyLCAweDQxCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF91c2VfZGZfaW50X3JldHVybmVkYml0c1td ID0geworKyAgICAweDQyLCAweGU0LCAweDRlLCAweDdiLCAweDI3LCAweGRkLCAweGNiLCAweGJj LCAweDBhLCAweGNmLCAweGE2LCAweDY3LAorKyAgICAweGU3LCAweDU3LCAweDExLCAweGI0Cisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzEyOF91c2VfZGZfZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4MTQsIDB4MjYs IDB4NjksIDB4ZDksIDB4ZjMsIDB4NjUsIDB4MDMsIDB4ZDYsIDB4NmIsIDB4YjksIDB4NDQsIDB4 MGIsCisrICAgIDB4YzcsIDB4YzQsIDB4OWUsIDB4MzkKKyt9OworKworK19fZmlwc19jb25zdHNl ZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X3VzZV9kZl9hZGRpdGlv bmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg1NSwgMHgyZSwgMHg2MCwgMHg5YSwgMHgwNSwg MHg3MiwgMHg4YSwgMHhhOCwgMHhlZiwgMHgyMiwgMHg4MSwgMHg1YSwKKysgICAgMHhjOCwgMHg5 MywgMHhmYSwgMHg4NAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHgz YywgMHg0MCwgMHhjOCwgMHhjNCwgMHgxNiwgMHgwYywgMHgyMSwgMHhhNCwgMHgzNywgMHgyYywg MHg4ZiwgMHhhNSwKKysgICAgMHgwNiwgMHgwYywgMHgxNSwgMHgyYworK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfdXNlX2RmX3JldHVy bmVkYml0c1tdID0geworKyAgICAweGUxLCAweDNlLCAweDk5LCAweDk4LCAweDg2LCAweDY3LCAw eDBiLCAweDYzLCAweDdiLCAweGJlLCAweDNmLCAweDg4LAorKyAgICAweDQ2LCAweDgxLCAweGM3 LCAweDE5CisrfTsKKysKKysvKiBBRVMtMTkyIHVzZSBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfZW50cm9weWlu cHV0W10gPSB7CisrICAgIDB4MmIsIDB4NGUsIDB4OGIsIDB4ZTEsIDB4ZjEsIDB4MzQsIDB4ODAs IDB4NTYsIDB4ODEsIDB4ZjksIDB4NzQsIDB4ZWMsCisrICAgIDB4MTcsIDB4NDQsIDB4MmEsIDB4 ZjEsIDB4MTQsIDB4YjAsIDB4YmYsIDB4OTcsIDB4MzksIDB4YjcsIDB4MDQsIDB4N2QKKyt9Owor KworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3Vz ZV9kZl9wcl9ub25jZVtdID0geworKyAgICAweGQ2LCAweDlkLCAweGViLCAweDE0LCAweDRlLCAw eDZjLCAweDMwLCAweDFlLCAweDM5LCAweDU1LCAweDczLCAweGQwLAorKyAgICAweGQxLCAweDgw LCAweDc4LCAweGZhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10g PSB7CisrICAgIDB4ZmMsIDB4NDMsIDB4NGEsIDB4ZjgsIDB4OWEsIDB4NTUsIDB4YjMsIDB4NTMs IDB4ODMsIDB4ZTIsIDB4MTgsIDB4MTYsCisrICAgIDB4MGMsIDB4ZGMsIDB4Y2QsIDB4NWUsIDB4 NGYsIDB4YTAsIDB4MDMsIDB4MDEsIDB4MmIsIDB4OWYsIDB4ZTQsIDB4ZDUsCisrICAgIDB4N2Qs IDB4NDksIDB4ZjAsIDB4NDEsIDB4OWUsIDB4M2QsIDB4OTksIDB4MDQKKyt9OworKworK19fZmlw c19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9k Zl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHg1ZSwgMHg5ZiwgMHg0OSwgMHg2Ziwg MHgyMSwgMHg4YiwgMHgxZCwgMHgzMiwgMHhkNSwgMHg4NCwgMHg1YywgMHhhYywKKysgICAgMHhh ZiwgMHhkZiwgMHhlNCwgMHg3OSwgMHg5ZSwgMHhhZiwgMHhhOSwgMHg4MiwgMHhkMCwgMHhmOCwg MHg0ZiwgMHhjYiwKKysgICAgMHg2OSwgMHgxMCwgMHgwYSwgMHg3ZSwgMHg4MSwgMHg1NywgMHhi NSwgMHgzNgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAgIDB4 ZDQsIDB4ODEsIDB4MGMsIDB4ZDcsIDB4NjYsIDB4MzksIDB4ZWMsIDB4NDIsIDB4NTMsIDB4ODcs IDB4NDEsIDB4YTUsCisrICAgIDB4MWUsIDB4N2QsIDB4ODAsIDB4OTEsIDB4OGUsIDB4YmIsIDB4 ZWQsIDB4YWMsIDB4MTQsIDB4MDIsIDB4MWEsIDB4ZDUKKyt9OworKworK19fZmlwc19jb25zdHNl ZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9pbnRf cmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZGYsIDB4MWQsIDB4MzksIDB4NDUsIDB4N2MsIDB4 OWIsIDB4YzYsIDB4MmIsIDB4N2QsIDB4OGMsIDB4OTMsIDB4ZTksCisrICAgIDB4MTksIDB4MzAs IDB4NmIsIDB4NjcKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Cisr ICAgIDB4MDAsIDB4NzEsIDB4MjcsIDB4NGUsIDB4ZDMsIDB4MTQsIDB4ZjEsIDB4MjAsIDB4N2Ys IDB4NGEsIDB4NDEsIDB4MzIsCisrICAgIDB4MmEsIDB4OTcsIDB4MTEsIDB4NDMsIDB4OGYsIDB4 NGEsIDB4MTUsIDB4N2IsIDB4OWIsIDB4NTEsIDB4NzksIDB4ZGEsCisrICAgIDB4NDksIDB4M2Qs IDB4ZGUsIDB4ZTgsIDB4YmMsIDB4OTMsIDB4OTEsIDB4OTkKKyt9OworKworK19fZmlwc19jb25z dHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9wcl9l bnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAgMHg5MCwgMHhlZSwgMHg3NiwgMHhhMSwgMHg0NSwg MHg4ZCwgMHhiNywgMHg0MCwgMHhiMCwgMHgxMSwgMHhiZiwgMHhkMCwKKysgICAgMHg2NSwgMHhk NywgMHgzYywgMHg3YywgMHg0ZiwgMHgyMCwgMHgzZiwgMHg0ZSwgMHgxMSwgMHg5ZCwgMHhiMywg MHg1ZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfdXNlX2RmX3ByX3JldHVybmVkYml0c1tdID0geworKyAgICAweDI0LCAweDNiLCAw eDIwLCAweGE0LCAweDM3LCAweDY2LCAweGJhLCAweDcyLCAweDM5LCAweDNmLCAweGNmLCAweDNj LAorKyAgICAweDdlLCAweDFhLCAweDJiLCAweDgzCisrfTsKKysKKysvKiBBRVMtMTkyIHVzZSBk ZiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzE5Ml91c2VfZGZfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4OGQsIDB4NzQsIDB4YTQs IDB4NTAsIDB4MWEsIDB4MDIsIDB4NjgsIDB4MGMsIDB4MmEsIDB4NjksIDB4YzQsIDB4ODIsCisr ICAgIDB4M2IsIDB4YmIsIDB4ZGEsIDB4MGUsIDB4N2YsIDB4NzcsIDB4YTMsIDB4MTcsIDB4Nzgs IDB4NTcsIDB4YjIsIDB4N2IKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9ub25jZVtdID0geworKyAgICAweDc1LCAweGQ1 LCAweDFmLCAweGFjLCAweGE0LCAweDhkLCAweDQyLCAweDc4LCAweGQ3LCAweDY5LCAweDg2LCAw eDlkLAorKyAgICAweDc3LCAweGQ3LCAweDQxLCAweDBlCisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfcGVyc29u YWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4NGUsIDB4MzMsIDB4NDEsIDB4M2MsIDB4OWMs IDB4YzIsIDB4ZDIsIDB4NTMsIDB4YWYsIDB4OTAsIDB4ZWEsIDB4Y2YsCisrICAgIDB4MTksIDB4 NTAsIDB4MWUsIDB4ZTYsIDB4NmYsIDB4NjMsIDB4YzgsIDB4MzIsIDB4MjIsIDB4ZGMsIDB4MDcs IDB4NjUsCisrICAgIDB4OWMsIDB4ZDMsIDB4ZjgsIDB4MzAsIDB4OWUsIDB4ZWQsIDB4MzUsIDB4 NzAKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX3VzZV9kZl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHg1ZCwgMHg4YiwgMHg4 YywgMHhjMSwgMHhkZiwgMHgwZSwgMHgwMiwgMHg3OCwgMHhmYiwgMHgxOSwgMHhiOCwgMHg2OSwK KysgICAgMHg3OCwgMHg0ZSwgMHg5YywgMHg1MiwgMHhiYywgMHhjNywgMHgyMCwgMHhjOSwgMHhl NiwgMHg1ZSwgMHg3NywgMHgyMiwKKysgICAgMHgyOCwgMHgzZCwgMHgwYywgMHg5ZSwgMHg2OCwg MHhhOCwgMHg0NSwgMHhkNworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNlX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAg MHhkNSwgMHhlNywgMHgwOCwgMHhjNSwgMHgxOSwgMHg5OSwgMHhkNSwgMHgzMSwgMHgwMywgMHgw YSwgMHg3NCwgMHhiNiwKKysgICAgMHhiNywgMHhlZCwgMHhlOSwgMHhlYQorK307CisrCisrX19m aXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfdXNl X2RmX2VudHJvcHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweDljLCAweDI2LCAweGRhLCAweGYx LCAweGFjLCAweGQ5LCAweDVhLCAweGQ2LCAweGE4LCAweDY1LCAweGY1LCAweDAyLAorKyAgICAw eDhmLCAweGRjLCAweGEyLCAweDA5LCAweDU0LCAweGE2LCAweGUyLCAweGE0LCAweGRlLCAweDMy LCAweGUwLCAweDAxCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml91c2VfZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7 CisrICAgIDB4OWIsIDB4OTAsIDB4YjAsIDB4M2EsIDB4MGUsIDB4M2EsIDB4ODAsIDB4MDcsIDB4 NGEsIDB4ZjQsIDB4ZGEsIDB4NzYsCisrICAgIDB4MjgsIDB4MzAsIDB4M2MsIDB4ZWUsIDB4NTQs IDB4MWIsIDB4OTQsIDB4NTksIDB4NTEsIDB4NDMsIDB4NTYsIDB4NzcsCisrICAgIDB4YWYsIDB4 ODgsIDB4ZGQsIDB4NjMsIDB4ODksIDB4NDcsIDB4MDYsIDB4NjUKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX3VzZV9kZl9hZGRpdGlv bmFsaW5wdXQyW10gPSB7CisrICAgIDB4M2MsIDB4MTEsIDB4NjQsIDB4N2EsIDB4OTYsIDB4ZjUs IDB4ZDgsIDB4YjgsIDB4YWUsIDB4ZDYsIDB4NzAsIDB4NGUsCisrICAgIDB4MTYsIDB4OTYsIDB4 ZGUsIDB4ZTksIDB4NjIsIDB4YmMsIDB4ZWUsIDB4MjgsIDB4MmYsIDB4MjYsIDB4YTYsIDB4ZjAs CisrICAgIDB4NTYsIDB4ZWYsIDB4YTMsIDB4ZjEsIDB4NmIsIDB4YTEsIDB4YjEsIDB4NzcKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X3VzZV9kZl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgwYiwgMHhlMiwgMHg1NiwgMHgwMywg MHgxZSwgMHhkYiwgMHgyYywgMHg2ZCwgMHg3ZiwgMHgxYiwgMHgxNSwgMHg1OCwKKysgICAgMHgx YSwgMHhmOSwgMHgxMywgMHgyOAorK307CisrCisrLyogQUVTLTI1NiB1c2UgZGYgUFIgICovCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2Rm X3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDYxLCAweDY4LCAweGZjLCAweDFhLCAweGYw LCAweGI1LCAweDk1LCAweDZiLCAweDg1LCAweDA5LCAweDliLCAweDc0LAorKyAgICAweDNmLCAw eDEzLCAweDc4LCAweDQ5LCAweDNiLCAweDg1LCAweGVjLCAweDkzLCAweDEzLCAweDNiLCAweGE5 LCAweDRmLAorKyAgICAweDk2LCAweGFiLCAweDJjLCAweGU0LCAweGM4LCAweDhmLCAweGRkLCAw eDZhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl91c2VfZGZfcHJfbm9uY2VbXSA9IHsKKysgICAgMHhhZCwgMHhkMiwgMHhiYiwgMHhi YSwgMHhiNywgMHg2NSwgMHg4OSwgMHhjMywgMHgyMSwgMHg2YywgMHg1NSwgMHgzMywKKysgICAg MHgyYiwgMHgzNiwgMHhmZiwgMHhhNAorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3ByX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0geworKyAgICAweDZlLCAweGNhLCAweGU3LCAweDIwLCAweDcyLCAweGQzLCAw eDg0LCAweDVhLCAweDMyLCAweGQzLCAweDRiLCAweDI0LAorKyAgICAweDcyLCAweGM0LCAweDYz LCAweDJiLCAweDlkLCAweDEyLCAweDI0LCAweDBjLCAweDIzLCAweDI2LCAweDhlLCAweDgzLAor KyAgICAweDE2LCAweDM3LCAweDBiLCAweGQxLCAweDA2LCAweDRmLCAweDY4LCAweDZkCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzI1Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4N2UsIDB4MDgsIDB4 NGEsIDB4YmIsIDB4ZTMsIDB4MjEsIDB4N2MsIDB4YzksIDB4MjMsIDB4ZDIsIDB4ZjgsIDB4YjAs CisrICAgIDB4NzMsIDB4OTgsIDB4YmEsIDB4ODQsIDB4NzQsIDB4MjMsIDB4YWIsIDB4MDYsIDB4 OGEsIDB4ZTIsIDB4MjIsIDB4ZDMsCisrICAgIDB4N2IsIDB4Y2UsIDB4OWIsIDB4ZDIsIDB4NGEs IDB4NzYsIDB4YjgsIDB4ZGUKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9wcl9lbnRyb3B5aW5wdXRwcltdID0g eworKyAgICAweDBiLCAweDIzLCAweGFmLCAweGRmLCAweGYxLCAweDYyLCAweGQ3LCAweGQzLCAw eDQzLCAweDk3LCAweGY4LCAweDc3LAorKyAgICAweDA0LCAweGE4LCAweDQyLCAweDIwLCAweGJk LCAweGY2LCAweDBmLCAweGMxLCAweDE3LCAweDJmLCAweDlmLCAweDU0LAorKyAgICAweGJiLCAw eDU2LCAweDE3LCAweDg2LCAweDY4LCAweDBlLCAweGJhLCAweGE5CisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZf cHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweDMxLCAweDhlLCAweGFkLCAweGFmLCAw eDQwLCAweGViLCAweDZiLCAweDc0LCAweDMxLCAweDQ2LCAweDgwLCAweGM3LAorKyAgICAweDE3 LCAweGFiLCAweDNjLCAweDdhCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfcHJfYWRkaXRpb25hbGlucHV0Mltd ID0geworKyAgICAweDk0LCAweDZiLCAweGM5LCAweDlmLCAweGFiLCAweDhkLCAweGM1LCAweGVj LCAweDcxLCAweDg4LCAweDFkLCAweDAwLAorKyAgICAweDhjLCAweDg5LCAweDY4LCAweGU0LCAw eGM4LCAweDA3LCAweDc3LCAweDM2LCAweDE3LCAweDZkLCAweDc5LCAweDc4LAorKyAgICAweGM3 LCAweDA2LCAweDRlLCAweDk5LCAweDA0LCAweDI4LCAweDI5LCAweGMzCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2Vf ZGZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4YmYsIDB4NmMsIDB4NTksIDB4MmEs IDB4MGQsIDB4NDQsIDB4MGYsIDB4YWUsIDB4OWEsIDB4NWUsIDB4MDMsIDB4NzMsCisrICAgIDB4 ZDgsIDB4YTYsIDB4ZTEsIDB4Y2YsIDB4MjUsIDB4NjEsIDB4MzgsIDB4MjQsIDB4ODYsIDB4OWUs IDB4NTMsIDB4ZTgsCisrICAgIDB4YTQsIDB4ZGYsIDB4NTYsIDB4ZjQsIDB4MDYsIDB4MDcsIDB4 OWMsIDB4MGYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMjU2X3VzZV9kZl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgyMiwgMHg0 YSwgMHhiNCwgMHhiOCwgMHhiNiwgMHhlZSwgMHg3ZCwgMHhiMSwgMHg5ZSwgMHhjOSwgMHhmOSwg MHhhMCwKKysgICAgMHhkOSwgMHhlMiwgMHg5NywgMHgwMAorK307CisrCisrLyogQUVTLTI1NiB1 c2UgZGYgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGFlc18yNTZfdXNlX2RmX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweGE1LCAweDNlLCAw eDM3LCAweDEwLCAweDE3LCAweDQzLCAweDkxLCAweDkzLCAweDU5LCAweDFlLCAweDQ3LCAweDUw LAorKyAgICAweDg3LCAweGFhLCAweGRkLCAweGQ1LCAweGMxLCAweGMzLCAweDg2LCAweGNkLCAw eGNhLCAweDBkLCAweGRiLCAweDY4LAorKyAgICAweGUwLCAweDAyLCAweGQ4LCAweDBmLCAweGRj LCAweDQwLCAweDFhLCAweDQ3CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfbm9uY2VbXSA9IHsKKysgICAgMHhhOSwgMHg0 ZCwgMHhhNSwgMHg1YSwgMHhmZCwgMHhjNSwgMHgwYywgMHhlNSwgMHgxYywgMHg5YSwgMHgzYiwg MHg4YSwKKysgICAgMHg0YywgMHg0NCwgMHg4NCwgMHg0MAorK307CisrCisrX19maXBzX2NvbnN0 c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX3BlcnNv bmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAweDhiLCAweDUyLCAweGEyLCAweDRhLCAweDkz LCAweGMzLCAweDRlLCAweGE3LCAweDFlLCAweDFjLCAweGE3LCAweDA1LAorKyAgICAweGViLCAw eDgyLCAweDliLCAweGE2LCAweDVkLCAweGU0LCAweGQ0LCAweGUwLCAweDdmLCAweGEzLCAweGQ4 LCAweDZiLAorKyAgICAweDM3LCAweDg0LCAweDVmLCAweGYxLCAweGM3LCAweGQ1LCAweGY2LCAw eGQyCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl91c2VfZGZfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4MjAsIDB4ZjQsIDB4 MjIsIDB4ZWQsIDB4ZjgsIDB4NWMsIDB4YTEsIDB4NmEsIDB4MDEsIDB4Y2YsIDB4YmUsIDB4NWYs CisrICAgIDB4OGQsIDB4NmMsIDB4OTQsIDB4N2YsIDB4YWUsIDB4MTIsIDB4YTgsIDB4NTcsIDB4 ZGIsIDB4MmEsIDB4YTksIDB4YmYsCisrICAgIDB4YzcsIDB4YjMsIDB4NjUsIDB4ODEsIDB4ODAs IDB4OGQsIDB4MGQsIDB4NDYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBhZXNfMjU2X3VzZV9kZl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAg IDB4NGUsIDB4NDQsIDB4ZmQsIDB4ZjMsIDB4OWUsIDB4MjksIDB4YTIsIDB4YjgsIDB4MGYsIDB4 NWQsIDB4NmMsIDB4ZTEsCisrICAgIDB4MjgsIDB4MGMsIDB4M2IsIDB4YzEKKyt9OworKworK19f Zmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X3Vz ZV9kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHhkZCwgMHg0MCwgMHhlNSwgMHg5 OCwgMHg3YiwgMHgyNywgMHgxNiwgMHg3MywgMHgxNSwgMHg2OCwgMHhkMiwgMHg3NiwKKysgICAg MHhiZiwgMHgwYywgMHg2NywgMHgxNSwgMHg3NSwgMHg3OSwgMHgwMywgMHhkMywgMHhkZSwgMHhk ZSwgMHg5MSwgMHg0NiwKKysgICAgMHg0MiwgMHhkZCwgMHhkNCwgMHg2NywgMHhjOCwgMHg3OSwg MHhjOCwgMHgxZQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18yNTZfdXNlX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0gewor KyAgICAweDdmLCAweGQ4LCAweDFmLCAweGJkLCAweDJhLCAweGI1LCAweDFjLCAweDExLCAweDVk LCAweDgzLCAweDRlLCAweDk5LAorKyAgICAweGY2LCAweDVjLCAweGE1LCAweDQwLCAweDIwLCAw eGVkLCAweDM4LCAweDhlLCAweGQ1LCAweDllLCAweGUwLCAweDc1LAorKyAgICAweDkzLCAweGZl LCAweDEyLCAweDVlLCAweDVkLCAweDczLCAweGZiLCAweDc1CisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91c2VfZGZfYWRkaXRpb25h bGlucHV0MltdID0geworKyAgICAweGNkLCAweDJjLCAweGZmLCAweDE0LCAweDY5LCAweDNlLCAw eDRjLCAweDllLCAweGZkLCAweGZlLCAweDI2LCAweDBkLAorKyAgICAweGU5LCAweDg2LCAweDAw LCAweDQ5LCAweDMwLCAweGJhLCAweGIxLCAweGM2LCAweDUwLCAweDU3LCAweDc3LCAweDJhLAor KyAgICAweDYyLCAweDM5LCAweDJjLCAweDNiLCAweDc0LCAweGViLCAweGM5LCAweDBkCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl91 c2VfZGZfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4NGYsIDB4NzgsIDB4YmUsIDB4YjksIDB4 NGQsIDB4OTcsIDB4OGMsIDB4ZTksIDB4ZDAsIDB4OTcsIDB4ZmUsIDB4YWQsCisrICAgIDB4ZmEs IDB4ZmQsIDB4MzUsIDB4NWUKKyt9OworKworKy8qIEFFUy0xMjggbm8gZGYgUFIgICovCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJf ZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4OWEsIDB4MjUsIDB4NjUsIDB4MTAsIDB4NjcsIDB4 ZDUsIDB4YjYsIDB4NmIsIDB4NzAsIDB4YTEsIDB4YjMsIDB4YTQsCisrICAgIDB4NDMsIDB4OTUs IDB4ODAsIDB4YzAsIDB4ODQsIDB4MGEsIDB4NzksIDB4YjAsIDB4ODgsIDB4NzQsIDB4ZjIsIDB4 YmYsCisrICAgIDB4MzEsIDB4NmMsIDB4MzMsIDB4MzgsIDB4MGIsIDB4MDAsIDB4YjIsIDB4NWEK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MTI4X25vX2RmX3ByX25vbmNlW10gPSB7CisrICAgIDB4NzgsIDB4NDcsIDB4NmIsIDB4ZjcsIDB4 OTAsIDB4OGUsIDB4ODcsIDB4ZjEKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0geworKyAgICAweGY3LCAweDIyLCAweDFkLCAweDNhLCAweGJlLCAweDFkLCAweGNh LCAweDMyLCAweDFiLCAweGJkLCAweDg3LCAweDBjLAorKyAgICAweDUxLCAweDI0LCAweDE5LCAw eGVlLCAweGEzLCAweDIzLCAweDA5LCAweDYzLCAweDMzLCAweDNkLCAweGE4LCAweDBjLAorKyAg ICAweDFjLCAweGZhLCAweDQyLCAweDg5LCAweGNjLCAweDZmLCAweGEwLCAweGE4CisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHhjOSwgMHhlMCwgMHg4MCwg MHhiZiwgMHg4YywgMHg0NSwgMHg1OCwgMHgzOSwgMHhmZiwgMHgwMCwgMHhhYiwgMHgwMiwKKysg ICAgMHg0YywgMHgzZSwgMHgzYSwgMHg5NSwgMHg5YiwgMHg4MCwgMHhhOCwgMHgyMSwgMHgyYSwg MHhlZSwgMHhiYSwgMHg3MywKKysgICAgMHhiMSwgMHhkOSwgMHhjZiwgMHgyOCwgMHhmNiwgMHg4 ZiwgMHg5YiwgMHgxMgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAgMHg0 YywgMHhhOCwgMHhjNSwgMHhmMCwgMHg1OSwgMHg5ZSwgMHhhNiwgMHg4ZCwgMHgyNiwgMHg1Mywg MHhkNywgMHg4YSwKKysgICAgMHhhOSwgMHhkOCwgMHhmNywgMHhlZCwgMHhiMiwgMHhmOSwgMHgx MiwgMHg0MiwgMHhlMSwgMHhlNSwgMHhiZCwgMHhlNywKKysgICAgMHhlNywgMHgxZCwgMHg3NCwg MHg5OSwgMHgwMCwgMHg5ZCwgMHgzMSwgMHgzZQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisr ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcHJfaW50X3JldHVy bmVkYml0c1tdID0geworKyAgICAweGUyLCAweGFjLCAweDIwLCAweGYwLCAweDgwLCAweGU3LCAw eGJjLCAweDdlLCAweDljLCAweDdiLCAweDY1LCAweDcxLAorKyAgICAweGFmLCAweDE5LCAweDMy LCAweDE2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzEyOF9ub19kZl9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4 MzIsIDB4N2YsIDB4MzgsIDB4OGIsIDB4NzMsIDB4MGEsIDB4NzgsIDB4ODMsIDB4ZGMsIDB4MzAs IDB4YmUsIDB4OWYsCisrICAgIDB4MTAsIDB4MWYsIDB4ZjUsIDB4MWYsIDB4Y2EsIDB4MDAsIDB4 YjUsIDB4MGQsIDB4ZDYsIDB4OWQsIDB4NjAsIDB4ODMsCisrICAgIDB4NTEsIDB4NTQsIDB4N2Qs IDB4MzgsIDB4MjMsIDB4M2EsIDB4NTIsIDB4NTAKKyt9OworKworK19fZmlwc19jb25zdHNlZwor KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX3ByX2VudHJvcHlp bnB1dHByMltdID0geworKyAgICAweDE4LCAweDYxLCAweDUzLCAweDU2LCAweGVkLCAweGVkLCAw eGQ3LCAweDIwLCAweGZiLCAweDcxLCAweDA0LCAweDdhLAorKyAgICAweGIyLCAweGFjLCAweGMx LCAweDI4LCAweGNkLCAweGYyLCAweGMyLCAweGZjLCAweGFhLCAweGIxLCAweDA2LCAweDA3LAor KyAgICAweGU5LCAweDQ2LCAweDk1LCAweDAyLCAweDQ4LCAweDAxLCAweDc4LCAweGY5CisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9u b19kZl9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgyOSwgMHhjOCwgMHgxYiwgMHgxNSwg MHhiMSwgMHhkMSwgMHhjMiwgMHhmNiwgMHg3MSwgMHg4NiwgMHg2OCwgMHgzMywKKysgICAgMHg1 NywgMHg4MiwgMHgzMywgMHhhZgorK307CisrCisrLyogQUVTLTEyOCBubyBkZiBObyBQUiAgKi8K KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19k Zl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHhjOSwgMHhjNSwgMHg3OSwgMHhiYywgMHhlOCwg MHhjNSwgMHgxOSwgMHhkOCwgMHhiYywgMHg2NiwgMHg3MywgMHg2NywKKysgICAgMHhmNiwgMHhk MywgMHg3MiwgMHhhYSwgMHhhNiwgMHgxNiwgMHhiOCwgMHg1MCwgMHhiNywgMHg0NywgMHgzYSwg MHg0MiwKKysgICAgMHhhYiwgMHhmNCwgMHgxNiwgMHhiMiwgMHg5NiwgMHhkMiwgMHhiNiwgMHg2 MAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18xMjhfbm9fZGZfbm9uY2VbXSA9IHsKKysgICAgMHg1ZiwgMHhiZiwgMHg5NywgMHgwYywgMHg0 YiwgMHhhNCwgMHg4NywgMHgxMworK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfcGVyc29uYWxpemF0aW9uc3RyaW5n W10gPSB7CisrICAgIDB4Y2UsIDB4ZmIsIDB4N2IsIDB4M2YsIDB4ZDQsIDB4NmIsIDB4MjksIDB4 MGQsIDB4NjksIDB4MDYsIDB4ZmYsIDB4YmIsCisrICAgIDB4ZjIsIDB4ZTUsIDB4YzYsIDB4NmMs IDB4MGEsIDB4MTAsIDB4YTAsIDB4Y2YsIDB4MWEsIDB4NDgsIDB4YzcsIDB4OGIsCisrICAgIDB4 M2MsIDB4MTYsIDB4ODgsIDB4ZWQsIDB4NTAsIDB4MTMsIDB4ODEsIDB4Y2UKKyt9OworKworK19f Zmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2Fk ZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDRiLCAweDIyLCAweDQ2LCAweDE4LCAweDAyLCAw eDdiLCAweGQyLCAweDFiLCAweDIyLCAweDQyLCAweDdjLCAweDM3LAorKyAgICAweGQ5LCAweGY2 LCAweGU4LCAweDliLCAweDEyLCAweDMwLCAweDVmLCAweGU5LCAweDkwLCAweGU4LCAweDA4LCAw eDI0LAorKyAgICAweDRmLCAweDA2LCAweDY2LCAweGRiLCAweDE5LCAweDJiLCAweDEzLCAweDk1 CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzEyOF9ub19kZl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4MmUsIDB4OTYsIDB4NzAs IDB4NjQsIDB4ZmEsIDB4ZGYsIDB4ZGYsIDB4NTcsIDB4YjUsIDB4ODIsIDB4ZWUsIDB4ZDYsCisr ICAgIDB4ZWQsIDB4M2UsIDB4NjUsIDB4YzIKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTI4X25vX2RmX2VudHJvcHlpbnB1dHJl c2VlZFtdID0geworKyAgICAweDI2LCAweGMwLCAweDcyLCAweDE2LCAweDNhLCAweDRiLCAweGI3 LCAweDk5LCAweGQ0LCAweDA3LCAweGFmLCAweDY2LAorKyAgICAweDYyLCAweDM2LCAweDk2LCAw eGE0LCAweDUxLCAweDE3LCAweGZhLCAweDA3LCAweDhiLCAweDE3LCAweDVlLCAweGExLAorKyAg ICAweDJmLCAweDNjLCAweDEwLCAweGU3LCAweDkwLCAweGQwLCAweDQ2LCAweDAwCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEy OF9ub19kZl9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg4MywgMHgzOSwgMHgz NywgMHg3YiwgMHgwMiwgMHgwNiwgMHhkMiwgMHgxMiwgMHgxMywgMHg4ZCwgMHg4YiwgMHhmMiwK KysgICAgMHhmMCwgMHhmNiwgMHgyNiwgMHhlYiwgMHhhNCwgMHgyMiwgMHg3YiwgMHhjMiwgMHhl NywgMHhiYSwgMHg3OSwgMHhlNCwKKysgICAgMHgzYiwgMHg3NywgMHg1ZCwgMHg0ZCwgMHg0Nywg MHhiMiwgMHgyZCwgMHhiNAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGFlc18xMjhfbm9fZGZfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAw eDBiLCAweGI5LCAweDY3LCAweDM3LCAweGRiLCAweDgzLCAweGRmLCAweGNhLCAweDgxLCAweDhi LCAweGY5LCAweDNmLAorKyAgICAweGYxLCAweDExLCAweDFiLCAweDJmLCAweGYwLCAweDYxLCAw eGE2LCAweGRmLCAweGJhLCAweGEzLCAweGIxLCAweGFjLAorKyAgICAweGQzLCAweGU2LCAweDA5 LCAweGI4LCAweDJjLCAweDZhLCAweDY3LCAweGQ2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9ub19kZl9yZXR1cm5lZGJpdHNbXSA9 IHsKKysgICAgMHgxZSwgMHhhNywgMHhhNCwgMHhlNCwgMHhlMSwgMHhhNiwgMHg3YywgMHg2OSwg MHg5YSwgMHg0NCwgMHg2YywgMHgzNiwKKysgICAgMHg4MSwgMHgzNywgMHgxOSwgMHhkNAorK307 CisrCisrLyogQUVTLTE5MiBubyBkZiBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysg ICAgMHg5ZCwgMHgyYywgMHhkMiwgMHg1NSwgMHg2NiwgMHhlYSwgMHhlMCwgMHhiZSwgMHgxOCwg MHhiNywgMHg3NiwgMHhlNywKKysgICAgMHg3MywgMHgzNSwgMHhkOCwgMHgxZiwgMHhhZCwgMHgz YSwgMHhlMywgMHg4MSwgMHgwZSwgMHg5MiwgMHhkMCwgMHg2MSwKKysgICAgMHhjOSwgMHgxMiwg MHgyNiwgMHhmNiwgMHgxYywgMHhkZiwgMHhmZSwgMHg0NywgMHhhYSwgMHhmZSwgMHg3ZCwgMHg1 YSwKKysgICAgMHgxNywgMHgxZiwgMHg4ZCwgMHg5YQorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfcHJfbm9uY2VbXSA9IHsK KysgICAgMHg0NCwgMHg4MiwgMHhlZCwgMHhlOCwgMHg0YywgMHgyOCwgMHg1YSwgMHgxNCwgMHhm ZiwgMHg4OCwgMHg4ZCwgMHgxOSwKKysgICAgMHg2MSwgMHg1YywgMHhlZSwgMHgwZgorK307Cisr CisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18x OTJfbm9fZGZfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4NDcsIDB4ZDcs IDB4OWIsIDB4OTksIDB4YWEsIDB4Y2IsIDB4ZTcsIDB4ZDIsIDB4NTcsIDB4NjYsIDB4MmMsIDB4 ZTEsCisrICAgIDB4NzgsIDB4ZDYsIDB4MmMsIDB4ZWEsIDB4YTMsIDB4MjMsIDB4NWYsIDB4MmEs IDB4YzEsIDB4M2EsIDB4ZjAsIDB4YTQsCisrICAgIDB4MjAsIDB4M2IsIDB4ZmEsIDB4MDcsIDB4 ZDUsIDB4MDUsIDB4MDIsIDB4ZTQsIDB4NTcsIDB4MDEsIDB4YjYsIDB4MTAsCisrICAgIDB4NTcs IDB4MmUsIDB4ZTcsIDB4NTUKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2FkZGl0aW9uYWxpbnB1dFtdID0g eworKyAgICAweDRiLCAweDc0LCAweDBiLCAweDQwLCAweGNlLCAweDZiLCAweGMyLCAweDZhLCAw eDI0LCAweGI0LCAweGYzLCAweGFkLAorKyAgICAweDdhLCAweGE1LCAweDdhLCAweGEyLCAweDE1 LCAweGUyLCAweGM4LCAweDYxLCAweDE1LCAweGM2LCAweGI3LCAweDg1LAorKyAgICAweDY5LCAw eDExLCAweGFkLCAweDdiLCAweDE0LCAweGQyLCAweGY2LCAweDEyLCAweGExLCAweDk1LCAweDVk LCAweDNmLAorKyAgICAweGUyLCAweGQwLCAweDBjLCAweDJmCisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wcl9lbnRyb3B5 aW5wdXRwcltdID0geworKyAgICAweDBjLCAweDljLCAweGFkLCAweDA1LCAweGVlLCAweGFlLCAw eDQ4LCAweDIzLCAweDg5LCAweDU5LCAweGExLCAweDk0LAorKyAgICAweGQ3LCAweGQ4LCAweDc1 LCAweGQ1LCAweDU0LCAweDkzLCAweGM3LCAweDRhLCAweGQ5LCAweDI2LCAweGRlLCAweGViLAor KyAgICAweGJhLCAweGIwLCAweDdlLCAweDMwLCAweDFkLCAweDVmLCAweDY5LCAweDQwLCAweDlj LCAweDNiLCAweDE3LCAweDU4LAorKyAgICAweDFkLCAweDMwLCAweGIzLCAweDc4CisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5 Ml9ub19kZl9wcl9pbnRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZjcsIDB4OTMsIDB4YjAs IDB4NmQsIDB4NzcsIDB4ODMsIDB4ZDUsIDB4MzgsIDB4MDEsIDB4ZTEsIDB4NTIsIDB4NDAsCisr ICAgIDB4N2UsIDB4M2UsIDB4MGMsIDB4MjYKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAg ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3ByX2FkZGl0aW9uYWxp bnB1dDJbXSA9IHsKKysgICAgMHhiYywgMHg0YiwgMHgzNywgMHg0NCwgMHgxYywgMHhjNSwgMHg0 NSwgMHg1ZiwgMHg4ZiwgMHg1MSwgMHg2MiwgMHg4YSwKKysgICAgMHg4NSwgMHgzMCwgMHgxZCwg MHg3YywgMHhlNCwgMHhjZiwgMHhmNywgMHg0NCwgMHhjZSwgMHgzMiwgMHgzZSwgMHg1NywKKysg ICAgMHg5NSwgMHhhNCwgMHgyYSwgMHhkZiwgMHhmZCwgMHg5ZSwgMHgzOCwgMHg0MSwgMHhiMywg MHhmNiwgMHhjNSwgMHhlZSwKKysgICAgMHgwYywgMHg0YiwgMHhlZSwgMHg2ZQorK307CisrCisr X19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJf bm9fZGZfcHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4ZWMsIDB4YWYsIDB4ZjYsIDB4 NGYsIDB4YjEsIDB4YTAsIDB4NTQsIDB4YjUsIDB4NWIsIDB4ZTMsIDB4NDYsIDB4YjAsCisrICAg IDB4NzYsIDB4NWEsIDB4N2MsIDB4M2YsIDB4N2IsIDB4OTQsIDB4NjksIDB4MjEsIDB4NTEsIDB4 MDIsIDB4ZTUsIDB4OWYsCisrICAgIDB4MDQsIDB4NTksIDB4MDIsIDB4OTgsIDB4YzYsIDB4NDMs IDB4MmMsIDB4Y2MsIDB4MjYsIDB4NGMsIDB4ODcsIDB4NmIsCisrICAgIDB4OGUsIDB4MGEsIDB4 ODMsIDB4ZGYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBhZXNfMTkyX25vX2RmX3ByX3JldHVybmVkYml0c1tdID0geworKyAgICAweDc0LCAweDQ1 LCAweGZiLCAweDUzLCAweDg0LCAweDk2LCAweGJlLCAweGZmLCAweDE1LCAweGNjLCAweDQxLCAw eDkxLAorKyAgICAweGI5LCAweGExLCAweDIxLCAweDY4CisrfTsKKysKKysvKiBBRVMtMTkyIG5v IGRmIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBhZXNfMTkyX25vX2RmX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDNjLCAweDdkLCAweGI1 LCAweGUwLCAweDU0LCAweGQ5LCAweDZlLCAweDhjLCAweGE5LCAweDg2LCAweGNlLCAweDRlLAor KyAgICAweDZiLCAweGFmLCAweGViLCAweDJmLCAweGU3LCAweDc1LCAweGUwLCAweDhiLCAweGE0 LCAweDNiLCAweDA3LCAweGZlLAorKyAgICAweGJlLCAweDMzLCAweDc1LCAweDkzLCAweDgwLCAw eDI3LCAweGI1LCAweDI5LCAweDQ3LCAweDhiLCAweGM3LCAweDI4LAorKyAgICAweDk0LCAweGMz LCAweDU5LCAweDYzCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9ub25jZVtdID0geworKyAgICAweDQzLCAweGYxLCAweDdk LCAweGI4LCAweGMzLCAweGZlLCAweGQwLCAweDIzLCAweDZiLCAweGI0LCAweDkyLCAweGRiLAor KyAgICAweDI5LCAweGZkLCAweDQ1LCAweDcxCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysg ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9wZXJzb25hbGl6YXRp b25zdHJpbmdbXSA9IHsKKysgICAgMHg5ZiwgMHgyNCwgMHgyOSwgMHg5OSwgMHg5ZSwgMHgwMSwg MHhhYiwgMHhlOSwgMHgxOSwgMHhkOCwgMHgyMywgMHgwOCwKKysgICAgMHhiNywgMHhkNiwgMHg3 ZSwgMHg4YywgMHhjMCwgMHg5ZSwgMHg3ZiwgMHg2ZSwgMHg1YiwgMHgzMywgMHgyMCwgMHg5NiwK KysgICAgMHgwYiwgMHgyMywgMHgyYywgMHhhNSwgMHg2YSwgMHhmOCwgMHgxYiwgMHgwNCwgMHgy NiwgMHhkYiwgMHgyZSwgMHgyYiwKKysgICAgMHgzYiwgMHg4OCwgMHhjZSwgMHgzNQorK307Cisr CisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9f ZGZfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4OTQsIDB4ZTksIDB4N2MsIDB4M2QsIDB4 YTcsIDB4ZGIsIDB4NjAsIDB4ODMsIDB4MWYsIDB4OTgsIDB4M2YsIDB4MGIsCisrICAgIDB4ODgs IDB4NTksIDB4NTcsIDB4NTEsIDB4ODgsIDB4OWYsIDB4NzYsIDB4NDksIDB4OWYsIDB4YTYsIDB4 ZGEsIDB4NzEsCisrICAgIDB4MWQsIDB4MGQsIDB4NDcsIDB4MTYsIDB4NjMsIDB4YzUsIDB4Njgs IDB4ZTQsIDB4NWQsIDB4MzksIDB4NjksIDB4YjMsCisrICAgIDB4M2UsIDB4YmUsIDB4ZDQsIDB4 OGUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMTkyX25vX2RmX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhmOSwgMHhkNywgMHhh ZCwgMHg2OSwgMHhhYiwgMHg4ZiwgMHgyMywgMHg1NiwgMHg3MCwgMHgxNywgMHg0ZiwgMHgyYSwK KysgICAgMHg0NSwgMHhlNywgMHg0YSwgMHhjNQorK307CisrCisrX19maXBzX2NvbnN0c2VnCisr ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18xOTJfbm9fZGZfZW50cm9weWlucHV0 cmVzZWVkW10gPSB7CisrICAgIDB4YTYsIDB4NzEsIDB4NmEsIDB4M2QsIDB4YmEsIDB4ZDEsIDB4 ZTgsIDB4NjYsIDB4YTYsIDB4ZWYsIDB4YjIsIDB4MGUsCisrICAgIDB4YTgsIDB4OWMsIDB4YWEs IDB4NGUsIDB4YWYsIDB4MTcsIDB4ODksIDB4NTAsIDB4MDAsIDB4ZGEsIDB4YTEsIDB4YjEsCisr ICAgIDB4MGIsIDB4YTQsIDB4ZDksIDB4MzUsIDB4ODksIDB4YzgsIDB4ZTUsIDB4YjAsIDB4ZDks IDB4YjcsIDB4YzQsIDB4MzMsCisrICAgIDB4OWIsIDB4Y2IsIDB4N2UsIDB4NzUKKyt9OworKwor K19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTky X25vX2RmX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAweDI3LCAweDIxLCAweGZj LCAweGMyLCAweGJkLCAweGYzLCAweDNjLCAweGNlLCAweGMzLCAweGNhLCAweGMxLCAweDAxLAor KyAgICAweGUwLCAweGZmLCAweDkzLCAweDEyLCAweDdkLCAweDU0LCAweDQyLCAweGUzLCAweDlm LCAweDAzLCAweGRmLCAweDI3LAorKyAgICAweDA0LCAweDA3LCAweDNjLCAweDUzLCAweDdmLCAw eGE4LCAweDY2LCAweGM4LCAweDk3LCAweDRiLCAweDYxLCAweDQwLAorKyAgICAweDVkLCAweDdh LCAweDI1LCAweDc5CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgYWVzXzE5Ml9ub19kZl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4MmQs IDB4OGUsIDB4MTYsIDB4NWQsIDB4MGIsIDB4OWYsIDB4ZWIsIDB4YWEsIDB4ZDYsIDB4ZWMsIDB4 MjgsIDB4NzEsCisrICAgIDB4N2MsIDB4MGIsIDB4YzEsIDB4MWQsIDB4ZDQsIDB4NDQsIDB4MTks IDB4NDcsIDB4ZmQsIDB4MWQsIDB4N2MsIDB4ZTUsCisrICAgIDB4ZjMsIDB4MjcsIDB4ZTEsIDB4 YjYsIDB4NzIsIDB4MGEsIDB4ZTAsIDB4ZWMsIDB4MGUsIDB4Y2QsIDB4ZWYsIDB4MWEsCisrICAg IDB4OTEsIDB4NmEsIDB4ZTMsIDB4NWYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBhZXNfMTkyX25vX2RmX3JldHVybmVkYml0c1tdID0geworKyAg ICAweGU1LCAweGRhLCAweGI4LCAweGUwLCAweDYzLCAweDU5LCAweDVhLCAweGNjLCAweDNkLCAw eGRjLCAweDlmLCAweGU4LAorKyAgICAweDY2LCAweDY3LCAweDJjLCAweDkyCisrfTsKKysKKysv KiBBRVMtMjU2IG5vIGRmIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDE1 LCAweGM3LCAweDVkLCAweGNiLCAweDQxLCAweDRiLCAweDE2LCAweDAxLCAweDNhLCAweGQxLCAw eDQ0LCAweGU4LAorKyAgICAweDIyLCAweDMyLCAweGM2LCAweDljLCAweDNmLCAweGU3LCAweDQz LCAweGY1LCAweDlhLCAweGQzLCAweGVhLCAweGYyLAorKyAgICAweGQ3LCAweDRlLCAweDZlLCAw eDZhLCAweDU1LCAweDczLCAweDQwLCAweGVmLCAweDg5LCAweGFkLCAweDBkLCAweDAzLAorKyAg ICAweDk2LCAweDdlLCAweDc4LCAweDgxLCAweDJmLCAweDkxLCAweDFiLCAweDQ0LCAweGIwLCAw eDAyLCAweGJhLCAweDFjCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9ub25jZVtdID0geworKyAgICAweGRjLCAweGU0 LCAweGQ0LCAweDI3LCAweDdhLCAweDkwLCAweGQ3LCAweDk5LCAweDQzLCAweGExLCAweDNjLCAw eDMwLAorKyAgICAweGNjLCAweDRiLCAweGVlLCAweDJlCisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9wcl9wZXJz b25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHhlMywgMHhlNiwgMHhiOSwgMHgxMSwgMHhl NCwgMHg3YSwgMHhhNCwgMHg0MCwgMHg2YiwgMHhmOCwgMHg3MywgMHhmNywKKysgICAgMHg3ZSwg MHhlYywgMHhjNywgMHhiOSwgMHg5NywgMHhiZiwgMHhmOCwgMHgyNSwgMHg3YiwgMHhiZSwgMHgx MSwgMHg5YiwKKysgICAgMHg1YiwgMHg2YSwgMHgwYywgMHgyZSwgMHgyYiwgMHgwMSwgMHg1MSwg MHhjZCwgMHg0MSwgMHg0YiwgMHg2YiwgMHhhYywKKysgICAgMHgzMSwgMHhhOCwgMHgwYiwgMHhm NywgMHhlNiwgMHg1OSwgMHg0MiwgMHhiOCwgMHgwMywgMHgwYywgMHhmOCwgMHgwNgorK307Cisr CisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18y NTZfbm9fZGZfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4NmEsIDB4OWYsIDB4MDAs IDB4OTEsIDB4YWUsIDB4ZmUsIDB4Y2YsIDB4ODQsIDB4OTksIDB4Y2UsIDB4YjEsIDB4NDAsCisr ICAgIDB4NmQsIDB4NWQsIDB4MzMsIDB4MjgsIDB4ODQsIDB4ZjQsIDB4OGMsIDB4NjMsIDB4NGMs IDB4N2UsIDB4YmQsIDB4MmMsCisrICAgIDB4ODAsIDB4NzYsIDB4ZWUsIDB4NWEsIDB4YWEsIDB4 MTUsIDB4MDcsIDB4MzEsIDB4ZDgsIDB4YmIsIDB4OGMsIDB4NjksCisrICAgIDB4OWQsIDB4OWQs IDB4YmMsIDB4N2UsIDB4NDksIDB4YWUsIDB4ZWMsIDB4MzksIDB4NmIsIDB4ZDEsIDB4MWYsIDB4 N2UKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBh ZXNfMjU2X25vX2RmX3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAgIDB4ZjMsIDB4YjksIDB4 NzUsIDB4OWMsIDB4YmQsIDB4ODgsIDB4ZWEsIDB4YTIsIDB4NTAsIDB4YWQsIDB4ZDYsIDB4MTYs CisrICAgIDB4MWEsIDB4MTIsIDB4M2MsIDB4ODYsIDB4NjgsIDB4YWYsIDB4NmYsIDB4YmUsIDB4 MTksIDB4ZjIsIDB4ZWUsIDB4Y2MsCisrICAgIDB4YTUsIDB4NzAsIDB4ODQsIDB4NTMsIDB4NTAs IDB4Y2IsIDB4OWYsIDB4MTQsIDB4YTksIDB4ZTUsIDB4ZWUsIDB4YjksCisrICAgIDB4NDgsIDB4 NDUsIDB4NDAsIDB4ZTIsIDB4YzcsIDB4YzksIDB4OWEsIDB4NzQsIDB4ZmYsIDB4OGMsIDB4OTks IDB4MWYKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBhZXNfMjU2X25vX2RmX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgy ZSwgMHhmMiwgMHg0NSwgMHg0YywgMHg2MiwgMHgyZSwgMHgwYSwgMHhiOSwgMHg2YiwgMHhhMiwg MHhmZCwgMHg1NiwKKysgICAgMHg3OSwgMHg2MCwgMHg5MywgMHhjZgorK307CisrCisrX19maXBz X2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZf cHJfYWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweGFmLCAweDY5LCAweDIwLCAweGU5LCAw eDNiLCAweDM3LCAweDlkLCAweDNmLCAweGI0LCAweDgwLCAweDAyLCAweDdhLAorKyAgICAweDI1 LCAweDdkLCAweGI4LCAweGRlLCAweDcxLCAweGM1LCAweDA2LCAweDBjLCAweGI0LCAweGUyLCAw eDhmLCAweDM1LAorKyAgICAweGQ4LCAweDE0LCAweDBkLCAweDdmLCAweDc2LCAweDYzLCAweDRl LCAweGI1LCAweGVlLCAweGU5LCAweDZmLCAweDM0LAorKyAgICAweGM3LCAweDVmLCAweDU2LCAw eDE0LCAweDRhLCAweGU4LCAweDczLCAweDk1LCAweDViLCAweDFjLCAweGI5LCAweGNiCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVz XzI1Nl9ub19kZl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAgMHhlNSwgMHhiMCwgMHgy ZSwgMHg3ZSwgMHg1MiwgMHgzMCwgMHhlMywgMHg2MywgMHg4MiwgMHhiNiwgMHg0NCwgMHhkMywK KysgICAgMHgyNSwgMHgxOSwgMHgwNSwgMHgyNCwgMHg5YSwgMHg5ZiwgMHg1ZiwgMHgyNywgMHg2 YSwgMHgyOSwgMHhhYiwgMHhmYSwKKysgICAgMHgwNywgMHhhMiwgMHg0MiwgMHgwZiwgMHhjNSwg MHhhOCwgMHg5NCwgMHg3YywgMHgxNywgMHg3YiwgMHg4NSwgMHg4MywKKysgICAgMHgwYywgMHgy NSwgMHgwZSwgMHg2MywgMHgwYiwgMHhlOSwgMHgxMiwgMHg2MCwgMHhjZCwgMHhlZiwgMHg4MCwg MHgwZgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18yNTZfbm9fZGZfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4NWUsIDB4ZjIsIDB4 MjYsIDB4ZWYsIDB4OWYsIDB4NTgsIDB4NWQsIDB4ZDUsIDB4NGEsIDB4MTAsIDB4ZmUsIDB4YTcs CisrICAgIDB4MmQsIDB4NWYsIDB4NGEsIDB4NDYKKyt9OworKworKy8qIEFFUy0yNTYgbm8gZGYg Tm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFl c18yNTZfbm9fZGZfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4ZmIsIDB4Y2YsIDB4MWIsIDB4 NjEsIDB4MTYsIDB4ODksIDB4NzgsIDB4MjMsIDB4ZjUsIDB4ZDgsIDB4OTYsIDB4ZTMsCisrICAg IDB4NGUsIDB4NjQsIDB4MGIsIDB4MjksIDB4OWEsIDB4M2YsIDB4ZjgsIDB4YTUsIDB4ZWQsIDB4 ZjIsIDB4ZmUsIDB4ZGIsCisrICAgIDB4MTYsIDB4Y2EsIDB4N2YsIDB4MTAsIDB4ZmEsIDB4NWUs IDB4MTgsIDB4NzYsIDB4MmMsIDB4NjMsIDB4NWUsIDB4OTYsCisrICAgIDB4Y2YsIDB4YjMsIDB4 ZDYsIDB4ZmMsIDB4YWYsIDB4OTksIDB4MzksIDB4MjgsIDB4OWMsIDB4NjEsIDB4ZTgsIDB4YjMK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNf MjU2X25vX2RmX25vbmNlW10gPSB7CisrICAgIDB4MTIsIDB4OTYsIDB4ZjAsIDB4NTIsIDB4ZjMs IDB4OGQsIDB4ODEsIDB4Y2YsIDB4ZGUsIDB4ODYsIDB4ZjIsIDB4OTksCisrICAgIDB4NDMsIDB4 OTYsIDB4YjksIDB4ZjAKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0g eworKyAgICAweDYzLCAweDBkLCAweDc4LCAweGY1LCAweDkwLCAweDhlLCAweDMyLCAweDQ3LCAw eGIwLCAweDRkLCAweDM3LCAweDYwLAorKyAgICAweDA5LCAweDk2LCAweGJjLCAweGJmLCAweDk3 LCAweDdhLCAweDYyLCAweDE0LCAweDQ1LCAweGJkLCAweDhkLCAweGNjLAorKyAgICAweDY5LCAw eGZiLCAweDAzLCAweGUxLCAweDgwLCAweDFjLCAweGM3LCAweGUyLCAweDJhLCAweGY5LCAweDM3 LCAweDNmLAorKyAgICAweDY2LCAweDRkLCAweDYyLCAweGQ5LCAweDEwLCAweGUwLCAweGFkLCAw eGM4LCAweDlhLCAweGYwLCAweGE4LCAweDZkCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzI1Nl9ub19kZl9hZGRpdGlvbmFsaW5wdXRbXSA9 IHsKKysgICAgMHgzNiwgMHhjNiwgMHgxMywgMHg2MCwgMHhiYiwgMHgxNCwgMHhhZCwgMHgyMiwg MHhiMCwgMHgzOCwgMHhhYywgMHhhNiwKKysgICAgMHgxOCwgMHgxNiwgMHg5MywgMHgyNSwgMHg4 NiwgMHhiNywgMHhkYywgMHhkYywgMHgzNiwgMHg5OCwgMHgyYiwgMHhmOSwKKysgICAgMHg2OCwg MHgzMywgMHhkMywgMHhjNiwgMHhmZiwgMHhjZSwgMHg4ZCwgMHgxNSwgMHg1OSwgMHg4MiwgMHg3 NiwgMHhlZCwKKysgICAgMHg2ZiwgMHg4ZCwgMHg0OSwgMHg3NCwgMHgyZiwgMHhkYSwgMHhkYywg MHgxZiwgMHgxNywgMHhkMCwgMHhkZSwgMHgxNworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfaW50X3JldHVybmVkYml0c1td ID0geworKyAgICAweDE2LCAweDJmLCAweDhlLCAweDNmLCAweDIxLCAweDdhLCAweDFjLCAweDIw LCAweDU2LCAweGQxLCAweDkyLCAweGY2LAorKyAgICAweGQyLCAweDI1LCAweDc1LCAweDBlCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg YWVzXzI1Nl9ub19kZl9lbnRyb3B5aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHg5MSwgMHg3OSwg MHg3NiwgMHhlZSwgMHhlMCwgMHhjZiwgMHg5ZSwgMHhjMiwgMHhkNSwgMHhkNCwgMHgyMywgMHg5 YiwKKysgICAgMHgxMiwgMHg4YywgMHg3ZSwgMHgwYSwgMHhiNywgMHhkMiwgMHg4YiwgMHhkNiwg MHg3YywgMHhhMywgMHhjNiwgMHhlNSwKKysgICAgMHgwZSwgMHhhYSwgMHhjNywgMHg2YiwgMHhh ZSwgMHgwZCwgMHhmYSwgMHg1MywgMHgwNiwgMHg3OSwgMHhhMSwgMHhlZCwKKysgICAgMHg0ZCwg MHg2YSwgMHgwZSwgMHhkOCwgMHg5ZCwgMHhiZSwgMHgxYiwgMHgzMSwgMHg5MywgMHg3YiwgMHhl YywgMHhmYgorK307CisrCisrX19maXBzX2NvbnN0c2VnCisrICAgIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGFlc18yNTZfbm9fZGZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAg IDB4ZDIsIDB4NDYsIDB4NTAsIDB4MjIsIDB4MTAsIDB4MTQsIDB4NjMsIDB4ZjcsIDB4ZWEsIDB4 MGYsIDB4YjksIDB4N2UsCisrICAgIDB4MGQsIDB4ZTEsIDB4OTQsIDB4MDcsIDB4YWYsIDB4MDks IDB4NDQsIDB4MzEsIDB4ZWEsIDB4NjQsIDB4YTQsIDB4MTgsCisrICAgIDB4NWIsIDB4ZjksIDB4 ZDgsIDB4YzIsIDB4ZmEsIDB4MDMsIDB4NDcsIDB4YzUsIDB4MzksIDB4NDMsIDB4ZDUsIDB4M2Is CisrICAgIDB4NjIsIDB4ODYsIDB4NjQsIDB4ZWEsIDB4MmMsIDB4NzMsIDB4OGMsIDB4YWUsIDB4 OWQsIDB4OTgsIDB4OTgsIDB4MjkKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X25vX2RmX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysg ICAgMHg4YywgMHhhYiwgMHgxOCwgMHhmOCwgMHhjMywgMHhlYywgMHgxOCwgMHg1YywgMHhiMywg MHgxZSwgMHg5ZCwgMHhiZSwKKysgICAgMHgzZiwgMHgwMywgMHhiNCwgMHgwMCwgMHg5OCwgMHg5 ZCwgMHhhZSwgMHhlYiwgMHhmNCwgMHg5NCwgMHhmOCwgMHg0MiwKKysgICAgMHg4ZiwgMHhlMywg MHgzOSwgMHgwNywgMHhlMSwgMHhjOSwgMHhhZCwgMHgwYiwgMHgxZiwgMHhlZCwgMHhjMCwgMHhi YSwKKysgICAgMHhmNiwgMHhkMSwgMHhlYywgMHgyNywgMHg4NiwgMHg3YiwgMHhkNiwgMHg1NSwg MHg5YiwgMHg2MCwgMHhhNSwgMHhjNgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGFlc18yNTZfbm9fZGZfcmV0dXJuZWRiaXRzW10gPSB7CisrICAg IDB4ZWYsIDB4ZDIsIDB4ZDgsIDB4NWMsIDB4ZGMsIDB4NjIsIDB4MjUsIDB4OWYsIDB4YWEsIDB4 MWUsIDB4MmMsIDB4NjcsCisrICAgIDB4ZjYsIDB4MDIsIDB4MzIsIDB4ZTIKKyt9OworKworKy8q IFNIQS0xIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBzaGExX3ByX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweGQyLCAweDM2LCAweGE1LCAweDI3 LCAweDMxLCAweDczLCAweGRkLCAweDExLCAweDRmLCAweDkzLCAweGJkLCAweGUyLAorKyAgICAw eDMxLCAweGE1LCAweDkxLCAweDEzCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9ub25jZVtdID0geworKyAgICAweGI1LCAweGIzLCAw eDYwLCAweGVmLCAweGY3LCAweDYzLCAweDMxLCAweGYzCisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9IHsKKysgICAgMHhkNCwgMHhiYiwgMHgwMiwgMHgxMCwgMHhiMiwgMHg3MSwgMHhkYiwg MHg4MSwgMHhkNiwgMHhmMCwgMHg0MiwgMHg2MCwKKysgICAgMHhkYSwgMHhlYSwgMHg3NywgMHg1 MgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNo YTFfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4NGQsIDB4ZDIsIDB4NmMsIDB4ODcs IDB4ZmIsIDB4MmMsIDB4NGYsIDB4YTYsIDB4OGQsIDB4MTYsIDB4NjMsIDB4MjIsCisrICAgIDB4 NmEsIDB4NTEsIDB4ZTMsIDB4ZjgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAgIDB4Yzks IDB4ODMsIDB4OWUsIDB4MTYsIDB4ZjYsIDB4MWMsIDB4MGYsIDB4YjIsIDB4ZWMsIDB4NjAsIDB4 MzEsIDB4YTksCisrICAgIDB4Y2IsIDB4YTksIDB4MzYsIDB4N2EKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGExX3ByX2ludF9yZXR1cm5lZGJp dHNbXSA9IHsKKysgICAgMHhhOCwgMHgxMywgMHg0ZiwgMHhmNCwgMHgzMSwgMHgwMiwgMHg0NCwg MHhlMywgMHhkMywgMHgzZCwgMHg2MSwgMHg5ZSwKKysgICAgMHhlNSwgMHhjNiwgMHgzZSwgMHg4 OSwgMHhiNSwgMHg5YiwgMHgwZiwgMHgzNQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFfcHJfYWRkaXRpb25hbGlucHV0MltdID0geworKyAg ICAweGY5LCAweGU4LCAweGQyLCAweDcyLCAweDEzLCAweDM0LCAweDk1LCAweDZmLCAweDE1LCAw eDQ5LCAweDQ3LCAweDk5LAorKyAgICAweDE2LCAweDAzLCAweDE5LCAweDQ3CisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wcl9lbnRyb3B5 aW5wdXRwcjJbXSA9IHsKKysgICAgMHg0ZSwgMHg4YywgMHg0OSwgMHg5YiwgMHg0YSwgMHg1Yywg MHg5YiwgMHg5YywgMHgzYSwgMHhlZSwgMHhmYiwgMHhkMiwKKysgICAgMHhhZSwgMHhjZCwgMHg4 YywgMHhjNAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTFfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4NTAsIDB4YjQsIDB4YjQsIDB4 Y2QsIDB4NjgsIDB4NTcsIDB4ZmMsIDB4MmUsIDB4YzEsIDB4NTIsIDB4Y2MsIDB4ZjYsCisrICAg IDB4NjgsIDB4YTQsIDB4ODEsIDB4ZWQsIDB4N2UsIDB4ZTQsIDB4MWQsIDB4ODcKKyt9OworKwor Ky8qIFNIQS0xIE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGExX2VudHJvcHlpbnB1dFtdID0geworKyAgICAweGE5LCAweDQ3LCAweDFiLCAw eDI5LCAweDJkLCAweDFjLCAweDA1LCAweGRmLCAweDc2LCAweGQwLCAweDYyLCAweGY5LAorKyAg ICAweGUyLCAweDdmLCAweDRjLCAweDdiCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9ub25jZVtdID0geworKyAgICAweDUzLCAweDIzLCAw eDI0LCAweGUzLCAweGVjLCAweDBjLCAweDU0LCAweDE0CisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9wZXJzb25hbGl6YXRpb25zdHJpbmdb XSA9IHsKKysgICAgMHg3YSwgMHg4NywgMHhhMSwgMHhhYywgMHgxYywgMHhmZCwgMHhhYiwgMHhh ZSwgMHhmNywgMHhkNiwgMHhmYiwgMHg3NiwKKysgICAgMHgyOCwgMHhlYywgMHg2ZCwgMHhjYQor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFf YWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4ZmMsIDB4OTIsIDB4MzUsIDB4ZDYsIDB4N2Us IDB4YjcsIDB4MjQsIDB4NjUsIDB4ZmQsIDB4MTIsIDB4MjcsIDB4MzUsCisrICAgIDB4YzAsIDB4 NzIsIDB4Y2EsIDB4MjgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGExX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg1NywgMHg4OCwg MHg4MiwgMHhlNSwgMHgyNSwgMHhhNSwgMHgyYywgMHg0YSwgMHgwNiwgMHgyMCwgMHg2YywgMHg3 MiwKKysgICAgMHg1NSwgMHg2MSwgMHhkZCwgMHg5MCwgMHg3MSwgMHg5ZiwgMHg5NSwgMHhlYQor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFf ZW50cm9weWlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4NjksIDB4YTUsIDB4NDAsIDB4NjIsIDB4 OTgsIDB4NDcsIDB4NTYsIDB4NzMsIDB4NGEsIDB4OGYsIDB4NjAsIDB4OTYsCisrICAgIDB4ZDYs IDB4OTksIDB4MjcsIDB4ZWQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGExX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAweGU1 LCAweDQwLCAweDRlLCAweGJkLCAweDUwLCAweDAwLCAweGY1LCAweDE1LCAweGE2LCAweGVlLCAw eDQ1LCAweGRhLAorKyAgICAweDg0LCAweDNkLCAweGQ0LCAweGMwCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMV9hZGRpdGlvbmFsaW5wdXQy W10gPSB7CisrICAgIDB4MTEsIDB4NTEsIDB4MTQsIDB4ZjAsIDB4MDksIDB4MWIsIDB4NGUsIDB4 NTYsIDB4MGQsIDB4ZTksIDB4ZjYsIDB4MWUsCisrICAgIDB4NTIsIDB4NjUsIDB4Y2QsIDB4OTYK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEx X3JldHVybmVkYml0c1tdID0geworKyAgICAweGExLCAweDljLCAweDk0LCAweDZlLCAweDI5LCAw eGUxLCAweDMzLCAweDBkLCAweDMyLCAweGQ2LCAweGFhLCAweGNlLAorKyAgICAweDcxLCAweDNm LCAweDUyLCAweDcyLCAweDhiLCAweDQyLCAweGE4LCAweGQ3CisrfTsKKysKKysvKiBTSEEtMjI0 IFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEy MjRfcHJfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4MTIsIDB4NjksIDB4MzIsIDB4NGYsIDB4 ODMsIDB4YTYsIDB4ZjUsIDB4MTQsIDB4ZTMsIDB4NDksIDB4M2UsIDB4NzUsCisrICAgIDB4M2Us IDB4ZGUsIDB4YWQsIDB4YTEsIDB4MjksIDB4YzMsIDB4ZjMsIDB4MTksIDB4MjAsIDB4YjUsIDB4 NGMsIDB4ZDkKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyMjRfcHJfbm9uY2VbXSA9IHsKKysgICAgMHg2YSwgMHg3OCwgMHhkMCwgMHhlYiwg MHhiYiwgMHg1YSwgMHhmMCwgMHhlZSwgMHhlOCwgMHhjMywgMHhiYSwgMHg3MQorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9wZXJz b25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHhkNSwgMHhiOCwgMHhiNiwgMHhiYywgMHhj MSwgMHg1YiwgMHg2MCwgMHgzMSwgMHgzYywgMHhmNSwgMHhlNSwgMHhjMCwKKysgICAgMHg4ZSwg MHg1MiwgMHg3YSwgMHhiZCwgMHhlYSwgMHg0NywgMHhhOSwgMHg1ZiwgMHg4ZiwgMHhmOSwgMHg4 YiwgMHhhZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHgxZiwgMHg1NSwgMHhl YywgMHhhZSwgMHgxNiwgMHgxMiwgMHg4NCwgMHhiYSwgMHg4NCwgMHgxNiwgMHgxOSwgMHg4OCwK KysgICAgMHg4ZSwgMHhiOCwgMHgzMywgMHgyNSwgMHg1NCwgMHhmZiwgMHhjYSwgMHg3OSwgMHhh ZiwgMHgwNywgMHgyNSwgMHg1MAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9lbnRyb3B5aW5wdXRwcltdID0geworKyAgICAweDky LCAweGEzLCAweDMyLCAweGE4LCAweDlhLCAweDBhLCAweDU4LCAweDdjLCAweDFkLCAweDVhLCAw eDdlLCAweGUxLAorKyAgICAweGIyLCAweDczLCAweGFiLCAweDBlLCAweDE2LCAweDc5LCAweDIz LCAweGQzLCAweDI5LCAweDg5LCAweDgxLCAweGUxCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 IHsKKysgICAgMHhmMywgMHgzOCwgMHg5MSwgMHg0MCwgMHgzNywgMHg3YSwgMHg1MSwgMHg3Miwg MHg0MiwgMHg3NCwgMHg3OCwgMHgwYSwKKysgICAgMHg2OSwgMHhmZCwgMHhhNiwgMHg0NCwgMHg0 MywgMHg0NSwgMHg2YywgMHgwYywgMHg1YSwgMHgxOSwgMHhmZiwgMHhmMSwKKysgICAgMHg1NCwg MHg2MCwgMHhlZSwgMHg2YQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTIyNF9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4NzUs IDB4ZjMsIDB4MDQsIDB4MjUsIDB4ZGQsIDB4MzYsIDB4YTgsIDB4MzcsIDB4NDYsIDB4YWUsIDB4 MGMsIDB4NTIsCisrICAgIDB4MDUsIDB4NzksIDB4NGMsIDB4MjYsIDB4ZGIsIDB4ZTksIDB4NzEs IDB4MTYsIDB4NGMsIDB4MGEsIDB4ZjIsIDB4NjAKKyt9OworKworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfZW50cm9weWlucHV0cHIyW10gPSB7 CisrICAgIDB4ZWEsIDB4YzUsIDB4MDMsIDB4MGEsIDB4NGYsIDB4YjAsIDB4MzgsIDB4OGQsIDB4 MjMsIDB4ZDQsIDB4YzgsIDB4NzcsCisrICAgIDB4ZTIsIDB4NmQsIDB4OWMsIDB4MGIsIDB4NDQs IDB4ZjcsIDB4MmQsIDB4NWIsIDB4YmYsIDB4NWQsIDB4MmEsIDB4MTEKKyt9OworKworK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyMjRfcHJfcmV0dXJuZWRi aXRzW10gPSB7CisrICAgIDB4NjAsIDB4NTAsIDB4MmIsIDB4ZTcsIDB4ODYsIDB4ZDgsIDB4MjYs IDB4NzMsIDB4ZTMsIDB4MWQsIDB4OTUsIDB4MjAsCisrICAgIDB4YjMsIDB4MmMsIDB4MzIsIDB4 MWMsIDB4ZjUsIDB4Y2UsIDB4NTcsIDB4YTYsIDB4NjcsIDB4MmIsIDB4ZGMsIDB4NGUsCisrICAg IDB4ZGQsIDB4MTEsIDB4NGMsIDB4YzQKKyt9OworKworKy8qIFNIQS0yMjQgTm8gUFIgICovCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9lbnRyb3B5 aW5wdXRbXSA9IHsKKysgICAgMHhiMiwgMHgxYywgMHg3NywgMHg0ZCwgMHhmNiwgMHhkMywgMHhi NiwgMHg0MCwgMHhiNywgMHgzMCwgMHgzZSwgMHgyOSwKKysgICAgMHhiMCwgMHg4NSwgMHgxYywg MHhiZSwgMHg0YSwgMHhlYSwgMHg2YiwgMHg1YSwgMHhiNSwgMHg4YSwgMHg5NywgMHhlYgorK307 CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9u b25jZVtdID0geworKyAgICAweDQyLCAweDAyLCAweDBhLCAweDFjLCAweDk4LCAweDlhLCAweDc3 LCAweDllLCAweDlmLCAweDgwLCAweGJhLCAweGUwCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X3BlcnNvbmFsaXphdGlvbnN0cmluZ1td ID0geworKyAgICAweDk4LCAweGI4LCAweDA0LCAweDQxLCAweGZjLCAweGMxLCAweDVkLCAweGM1 LCAweGU5LCAweGI5LCAweDA4LCAweGRhLAorKyAgICAweGY5LCAweGZhLCAweDBkLCAweDkwLCAw eGNlLCAweGRmLCAweDFkLCAweDEwLCAweGE5LCAweDhkLCAweDUwLCAweDBjCisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0X2FkZGl0aW9u YWxpbnB1dFtdID0geworKyAgICAweDlhLCAweDhkLCAweDM5LCAweDQ5LCAweDQyLCAweGQ1LCAw eDBiLCAweGFlLCAweGUxLCAweGFmLCAweGI3LCAweDAwLAorKyAgICAweDAyLCAweGZhLCAweDk2 LCAweGIxLCAweGE1LCAweDFkLCAweDJkLCAweDI1LCAweDc4LCAweGVlLCAweDgzLCAweDNmCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjI0 X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhlNCwgMHhmNSwgMHg1MywgMHg3OSwgMHg1 YSwgMHg5NywgMHg1OCwgMHgwNiwgMHgwOCwgMHhiYSwgMHg3YiwgMHhmYSwKKysgICAgMHhmMCwg MHg4MywgMHgwNSwgMHg4YywgMHgyMiwgMHhjMCwgMHhjOSwgMHhkYiwgMHgxNSwgMHhlNywgMHhk ZSwgMHgyMCwKKysgICAgMHg1NSwgMHgyMiwgMHg5YSwgMHhhZAorK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9lbnRyb3B5aW5wdXRyZXNl ZWRbXSA9IHsKKysgICAgMHg2NywgMHgwOSwgMHg0OCwgMHhhYSwgMHgwNywgMHgxNiwgMHg5OSwg MHg4OSwgMHg3ZiwgMHg2ZCwgMHhhMCwgMHhlNSwKKysgICAgMHg4ZiwgMHhkZiwgMHhiYywgMHhk YiwgMHhmZSwgMHhlNSwgMHg2YywgMHg3YSwgMHg5NSwgMHg0YSwgMHg2NiwgMHgxNworK307Cisr CisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTIyNF9hZGRp dGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHgwZiwgMHg0YiwgMHgxYywgMHg2ZiwgMHhi NywgMHhlMywgMHg0NywgMHhlNSwgMHg1ZCwgMHg3ZCwgMHgzOCwgMHhkNiwKKysgICAgMHgyOCwg MHg5YiwgMHhlYiwgMHg1NSwgMHg2MywgMHgwOSwgMHgzZSwgMHg3YywgMHg1NiwgMHhlYSwgMHhm OCwgMHgxOQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIHNoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4MmQsIDB4MjYsIDB4N2Ms IDB4MzcsIDB4ZTQsIDB4N2EsIDB4MjgsIDB4NWUsIDB4NWEsIDB4M2MsIDB4YWYsIDB4M2QsCisr ICAgIDB4NWEsIDB4OGUsIDB4NTUsIDB4YTIsIDB4MWEsIDB4NmUsIDB4YzAsIDB4ZTUsIDB4ZjYs IDB4MjEsIDB4ZDMsIDB4ZjYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGEyMjRfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4NGQsIDB4ODMs IDB4MzUsIDB4ZGYsIDB4NjcsIDB4YTksIDB4ZmMsIDB4MTcsIDB4ZGEsIDB4NzAsIDB4Y2MsIDB4 OGIsCisrICAgIDB4N2YsIDB4NzcsIDB4YWUsIDB4YTIsIDB4NWYsIDB4YjksIDB4N2UsIDB4NzQs IDB4NGMsIDB4MjYsIDB4YzEsIDB4N2EsCisrICAgIDB4M2IsIDB4YTcsIDB4NWMsIDB4OTMKKyt9 OworKworKy8qIFNIQS0yNTYgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHhjZSwgMHg0 OSwgMHgwMCwgMHg3YSwgMHg1NiwgMHhlMywgMHg2NywgMHg4ZiwgMHhlMSwgMHhiNiwgMHhhNywg MHhkNCwKKysgICAgMHg0ZiwgMHgwOCwgMHg3YSwgMHgxYiwgMHgwMSwgMHhmNCwgMHhmYSwgMHg2 YiwgMHhlZiwgMHhiNywgMHhlNSwgMHhlYiwKKysgICAgMHgwNywgMHgzZCwgMHgxMSwgMHgwZCwg MHhjOCwgMHhlYSwgMHgyYiwgMHhmZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9ub25jZVtdID0geworKyAgICAweDczLCAweDQx LCAweGM4LCAweDkyLCAweDk0LCAweGUyLCAweGM1LCAweDVmLCAweDkzLCAweGZkLCAweDM5LCAw eDVkLAorKyAgICAweDJiLCAweDkxLCAweDRkLCAweDM4CisrfTsKKysKKytfX2ZpcHNfY29uc3Rz ZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX3BlcnNvbmFsaXphdGlvbnN0 cmluZ1tdID0geworKyAgICAweDUwLCAweDZkLCAweDAxLCAweDAxLCAweDA3LCAweDVhLCAweDgw LCAweDM1LCAweDdhLCAweDU2LCAweDFhLCAweDU2LAorKyAgICAweDJmLCAweDlhLCAweDBiLCAw eDM1LCAweGIyLCAweGIxLCAweGM5LCAweGU1LCAweGNhLCAweDY5LCAweDYxLCAweDQ4LAorKyAg ICAweGZmLCAweGZiLCAweDBmLCAweGQ5LCAweDRiLCAweDc5LCAweDFkLCAweGJhCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2Fk ZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDIwLCAweGI4LCAweGRmLCAweDQ0LCAweDc3LCAw eDVhLCAweGI4LCAweGQzLCAweGJmLCAweGY2LCAweGNmLCAweGFjLAorKyAgICAweDVlLCAweGE2 LCAweDk2LCAweDYyLCAweDczLCAweDQ0LCAweDQwLCAweDRhLCAweDMwLCAweGZiLCAweDM4LCAw eGE1LAorKyAgICAweDdiLCAweDBkLCAweGU0LCAweDBkLCAweGM2LCAweGU0LCAweDlhLCAweDFm CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh MjU2X3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAgIDB4MDQsIDB4YzQsIDB4NjUsIDB4ZjQs IDB4ZDMsIDB4YmYsIDB4ODMsIDB4NGIsIDB4YWIsIDB4YzgsIDB4NDEsIDB4YTgsCisrICAgIDB4 YzIsIDB4ZTAsIDB4NDQsIDB4NjMsIDB4NzcsIDB4NGMsIDB4NmYsIDB4NmMsIDB4NDksIDB4NDYs IDB4ZmYsIDB4OTQsCisrICAgIDB4MTcsIDB4ZWEsIDB4ZTYsIDB4MWEsIDB4OWQsIDB4NWUsIDB4 NjYsIDB4NzgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEyNTZfcHJfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweDA3LCAweDRkLCAw eGFjLCAweDliLCAweDg2LCAweGNhLCAweDRhLCAweGFhLCAweDZlLCAweDdhLCAweDAzLCAweGEy LAorKyAgICAweDVkLCAweDEwLCAweGVhLCAweDBiLCAweGY5LCAweDgzLCAweGNjLCAweGQxLCAw eGZjLCAweGUyLCAweDA3LCAweGM3LAorKyAgICAweDA2LCAweDM0LCAweDYwLCAweDZmLCAweDgz LCAweDk0LCAweDk5LCAweDc2CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0 IHVuc2lnbmVkIGNoYXIgc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHg4 OSwgMHg0ZSwgMHg0NSwgMHg4YywgMHgxMSwgMHhmOSwgMHhiYywgMHg1YiwgMHhhYywgMHg3NCwg MHg4YiwgMHg0YiwKKysgICAgMHg1ZiwgMHhmNywgMHgxOSwgMHhmMywgMHhmNSwgMHgyNCwgMHg1 NCwgMHgxNCwgMHhkMSwgMHgxNSwgMHhiMSwgMHg0MywKKysgICAgMHgxMiwgMHhhNCwgMHg1Ziwg MHhkNCwgMHhlYywgMHhmYywgMHhjZCwgMHgwOQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsK KysgICAgMHgwZSwgMHhlYiwgMHgxZiwgMHhkNywgMHhmYywgMHhkMSwgMHg5ZCwgMHhkNCwgMHgw NSwgMHgzNiwgMHg4YiwgMHhiMiwKKysgICAgMHhmYiwgMHhlNCwgMHhmNCwgMHg1MSwgMHgwYywg MHg4NywgMHg5YiwgMHgwMiwgMHg0NCwgMHhkNSwgMHg5MiwgMHg0ZCwKKysgICAgMHg0NCwgMHhm ZSwgMHgxYSwgMHgwMywgMHg0MywgMHg1NiwgMHhiZCwgMHg4NgorK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTI1Nl9wcl9yZXR1cm5lZGJpdHNb XSA9IHsKKysgICAgMHgwMiwgMHhhYSwgMHhiNiwgMHgxZCwgMHg3ZSwgMHgyYSwgMHg0MCwgMHgw MywgMHg2OSwgMHgyZCwgMHg0OSwgMHhhMywKKysgICAgMHg0MSwgMHhlNywgMHg0NCwgMHgwYiwg MHhhZiwgMHg3YiwgMHg4NSwgMHhlNCwgMHg1ZiwgMHg1MywgMHgzYiwgMHg2NCwKKysgICAgMHhi YywgMHg4OSwgMHhjOCwgMHg4MiwgMHhkNCwgMHg3OCwgMHgzNywgMHhhMgorK307CisrCisrLyog U0hBLTI1NiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjU2X2VudHJvcHlpbnB1dFtdID0geworKyAgICAweDViLCAweDFiLCAweGVjLCAw eDRkLCAweGE5LCAweDM4LCAweDc0LCAweDVhLCAweDM0LCAweDBiLCAweDdiLCAweGM1LAorKyAg ICAweGU1LCAweGQ3LCAweDY2LCAweDdjLCAweGJjLCAweDgyLCAweGI5LCAweDBlLCAweDJkLCAw eDFmLCAweDkyLCAweGQ3LAorKyAgICAweGMxLCAweGJjLCAweDY3LCAweDY5LCAweGVjLCAweDZi LCAweDAzLCAweDNjCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgc2hhMjU2X25vbmNlW10gPSB7CisrICAgIDB4YTQsIDB4MGMsIDB4ZDgsIDB4OWMs IDB4NjEsIDB4ZDgsIDB4YzMsIDB4NTQsIDB4ZmUsIDB4NTMsIDB4YzksIDB4ZTUsCisrICAgIDB4 NWQsIDB4NmYsIDB4NmQsIDB4MzUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGEyNTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAg IDB4MjIsIDB4NWUsIDB4NjIsIDB4OTMsIDB4NDIsIDB4ODMsIDB4NzgsIDB4MjQsIDB4ZDgsIDB4 NDAsIDB4OGMsIDB4ZGUsCisrICAgIDB4NmYsIDB4ZjksIDB4YTQsIDB4N2EsIDB4YzUsIDB4YTcs IDB4M2IsIDB4ODgsIDB4YTMsIDB4ZWUsIDB4NDIsIDB4MjAsCisrICAgIDB4ZmQsIDB4NjEsIDB4 NTYsIDB4YzYsIDB4NGMsIDB4MTMsIDB4NDEsIDB4OWMKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfYWRkaXRpb25hbGlucHV0W10gPSB7 CisrICAgIDB4YmYsIDB4NzQsIDB4NWIsIDB4ZjYsIDB4YzUsIDB4NjQsIDB4NWUsIDB4OTksIDB4 MzQsIDB4OGYsIDB4YmMsIDB4YTQsCisrICAgIDB4ZTIsIDB4YmQsIDB4ZDgsIDB4ODUsIDB4MjYs IDB4MzcsIDB4ZWEsIDB4YmEsIDB4NGYsIDB4ZjIsIDB4OWEsIDB4OWEsCisrICAgIDB4NjYsIDB4 ZmMsIDB4ZGYsIDB4NjMsIDB4MjYsIDB4MjYsIDB4MTksIDB4ODcKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEyNTZfaW50X3JldHVybmVkYml0 c1tdID0geworKyAgICAweGIzLCAweGM2LCAweDA3LCAweDA3LCAweGQ2LCAweDc1LCAweGY2LCAw eDJiLCAweGQ2LCAweDIxLCAweDk2LCAweGYxLAorKyAgICAweGFlLCAweGRiLCAweDJiLCAweGFj LCAweDI1LCAweDJhLCAweGFlLCAweGFlLCAweDQxLCAweDcyLCAweDAzLCAweDVlLAorKyAgICAw eGJmLCAweGQzLCAweDY0LCAweGJjLCAweDU5LCAweGY5LCAweGMwLCAweDc2CisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2X2VudHJvcHlp bnB1dHJlc2VlZFtdID0geworKyAgICAweGJmLCAweDIwLCAweDMzLCAweDU2LCAweDI5LCAweGE4 LCAweDM3LCAweDA0LCAweDFmLCAweDc4LCAweDM0LCAweDNkLAorKyAgICAweDgxLCAweDJhLCAw eGM5LCAweDg2LCAweGM2LCAweDdhLCAweDJmLCAweDg4LCAweDVlLCAweGQ1LCAweGJlLCAweDM0 LAorKyAgICAweDQ2LCAweDIwLCAweGE0LCAweDM1LCAweGViLCAweGM3LCAweGUyLCAweDlkCisr fTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMjU2 X2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAweDliLCAweGFlLCAweDJkLCAweDJk LCAweDYxLCAweGE0LCAweDg5LCAweGViLCAweDQzLCAweDQ2LCAweGE3LCAweGRhLAorKyAgICAw eGVmLCAweDQwLCAweGNhLCAweDRhLCAweDk5LCAweDExLCAweDQxLCAweGRjLCAweDVjLCAweDk0 LCAweGU5LCAweGFjLAorKyAgICAweGQ0LCAweGQwLCAweGU2LCAweGJkLCAweGZiLCAweDAzLCAw eDljLCAweGE4CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgc2hhMjU2X2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHgyMywgMHhhYSwgMHgw YywgMHhiZCwgMHgyOCwgMHgzMywgMHhlMiwgMHg1MSwgMHhmYywgMHg3MSwgMHhkMiwgMHgxNSwK KysgICAgMHgxZiwgMHg3NiwgMHhmZCwgMHgwZCwgMHhlMCwgMHhiNywgMHhiNSwgMHg4NCwgMHg3 NSwgMHg1YiwgMHhiZSwgMHhmMywKKysgICAgMHg1YywgMHhjYSwgMHhjNSwgMHgzMCwgMHhmMiwg MHg3NSwgMHgxZiwgMHhkYQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIHNoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg5MCwgMHgzYywg MHhjMSwgMHgxMCwgMHg4YywgMHgxMiwgMHgwMSwgMHhjNiwgMHhhNiwgMHgzYSwgMHgwZiwgMHg0 ZCwKKysgICAgMHhiNiwgMHgzYSwgMHg0ZiwgMHg0MSwgMHg5YywgMHg2MSwgMHg3NSwgMHg4NCwg MHhlOSwgMHg3NCwgMHg3NSwgMHhmZCwKKysgICAgMHhmZSwgMHhmMiwgMHgxZiwgMHg0MywgMHhk OCwgMHg1ZSwgMHgyNCwgMHhhMworK307CisrCisrLyogU0hBLTM4NCBQUiAgKi8KKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1 dFtdID0geworKyAgICAweDcxLCAweDlkLCAweGIyLCAweDVhLCAweDcxLCAweDZkLCAweDA0LCAw eGU5LCAweDFlLCAweGM3LCAweDkyLCAweDI0LAorKyAgICAweDZlLCAweDEyLCAweDMzLCAweGE5 LCAweDUyLCAweDY0LCAweDMxLCAweGVmLCAweDcxLCAweGViLCAweDIyLCAweDU1LAorKyAgICAw eDI4LCAweDk3LCAweDA2LCAweDZhLCAweGMwLCAweDBjLCAweGEwLCAweDdlCisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX25vbmNl W10gPSB7CisrICAgIDB4ZjUsIDB4MGQsIDB4ZmEsIDB4YjAsIDB4ZWMsIDB4NmEsIDB4N2MsIDB4 ZDYsIDB4YmQsIDB4OWIsIDB4MDUsIDB4ZmQsCisrICAgIDB4MzgsIDB4M2UsIDB4MmUsIDB4NTYK Kyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEz ODRfcHJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4NzQsIDB4YWMsIDB4N2Us IDB4NmQsIDB4YjEsIDB4YTQsIDB4ZTcsIDB4MjEsIDB4ZDEsIDB4MWUsIDB4NmUsIDB4OTYsCisr ICAgIDB4NmQsIDB4NGQsIDB4NTMsIDB4NDYsIDB4ODIsIDB4OTYsIDB4NmUsIDB4Y2YsIDB4YWEs IDB4ODEsIDB4OGQsIDB4N2QsCisrICAgIDB4OWUsIDB4ZTEsIDB4MGYsIDB4MTUsIDB4ZWEsIDB4 NDEsIDB4YmYsIDB4ZTMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGEzODRfcHJfYWRkaXRpb25hbGlucHV0W10gPSB7CisrICAgIDB4ZGEsIDB4 OTUsIDB4ZDQsIDB4ZDAsIDB4YjgsIDB4MTEsIDB4ZDMsIDB4NDksIDB4MjcsIDB4NWQsIDB4YTks IDB4MzksCisrICAgIDB4NjgsIDB4ZjMsIDB4YTgsIDB4ZTksIDB4NWQsIDB4MTksIDB4OGEsIDB4 MmIsIDB4NjYsIDB4ZTgsIDB4NjksIDB4MDYsCisrICAgIDB4N2MsIDB4OWUsIDB4MDMsIDB4YTEs IDB4OGIsIDB4MjYsIDB4MmQsIDB4NmUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAg MHg0OSwgMHhkZiwgMHg0NCwgMHgwMCwgMHhlNCwgMHgxYywgMHg3NSwgMHgwYiwgMHgyNiwgMHg1 YSwgMHg1OSwgMHg2NCwKKysgICAgMHgxZiwgMHg0ZSwgMHhiMSwgMHhiMiwgMHgxMywgMHhmMSwg MHgyMiwgMHg0ZSwgMHhiNCwgMHg2ZCwgMHg5YSwgMHhjYywKKysgICAgMHhhMCwgMHg0OCwgMHhl NiwgMHhjZiwgMHgxZCwgMHhkMSwgMHg5MiwgMHgwZAorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wcl9pbnRfcmV0dXJuZWRiaXRzW10g PSB7CisrICAgIDB4YzgsIDB4NTIsIDB4YWUsIDB4YmYsIDB4MDQsIDB4M2MsIDB4MjcsIDB4Yjcs IDB4NzgsIDB4MTgsIDB4YWEsIDB4OGYsCisrICAgIDB4ZmYsIDB4Y2YsIDB4YTQsIDB4ZjEsIDB4 Y2MsIDB4ZTcsIDB4NjgsIDB4ZmEsIDB4MjIsIDB4YTIsIDB4MTMsIDB4NDUsCisrICAgIDB4ZTgs IDB4ZGQsIDB4ODcsIDB4ZTYsIDB4ZjIsIDB4NmUsIDB4ZGQsIDB4YzcsIDB4NTIsIDB4OTAsIDB4 OWYsIDB4N2IsCisrICAgIDB4ZmEsIDB4NjEsIDB4MmQsIDB4OWQsIDB4OWUsIDB4Y2YsIDB4OTgs IDB4YWMsIDB4NTIsIDB4NDAsIDB4Y2UsIDB4YWYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfcHJfYWRkaXRpb25hbGlucHV0MltdID0g eworKyAgICAweDYxLCAweDdjLCAweDAzLCAweDlhLCAweDNlLCAweDUwLCAweDU3LCAweDYwLCAw eGM1LCAweDgzLCAweGM5LCAweGIyLAorKyAgICAweGQxLCAweDg3LCAweDg1LCAweDY2LCAweDky LCAweDVkLCAweDg0LCAweDBlLCAweDUzLCAweGZiLCAweDcwLCAweDAzLAorKyAgICAweDcyLCAw eGZkLCAweGJhLCAweGFlLCAweDljLCAweDhmLCAweGY4LCAweDE4CisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX2VudHJvcHlpbnB1 dHByMltdID0geworKyAgICAweGY4LCAweGViLCAweDg5LCAweGIxLCAweDhkLCAweDc4LCAweGJl LCAweDIxLCAweGUwLCAweGJiLCAweDlkLCAweGI3LAorKyAgICAweDk1LCAweDBlLCAweGQ5LCAw eDQ2LCAweDBjLCAweDhjLCAweGUyLCAweDYzLCAweGI3LCAweDlkLCAweDY3LCAweDkwLAorKyAg ICAweGJkLCAweGM3LCAweDBiLCAweGE1LCAweGNlLCAweGIyLCAweDY1LCAweDgxCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMzg0X3ByX3Jl dHVybmVkYml0c1tdID0geworKyAgICAweGU2LCAweDlmLCAweGZlLCAweDY4LCAweGQ2LCAweGI1 LCAweDc5LCAweGYxLCAweDA2LCAweDVmLCAweGEzLCAweGJiLAorKyAgICAweDIzLCAweDg1LCAw eGQ4LCAweGYwLCAweDI5LCAweDVhLCAweDY4LCAweDllLCAweGY1LCAweGY0LCAweGE2LCAweDEy LAorKyAgICAweGUwLCAweDlhLCAweGUyLCAweGFjLCAweDAwLCAweDFkLCAweDk4LCAweDI2LCAw eGZjLCAweDUzLCAweDk1LCAweDUzLAorKyAgICAweGU0LCAweDNlLCAweDE3LCAweGQ1LCAweDA4 LCAweDBiLCAweDcwLCAweDNkLCAweDY3LCAweDk5LCAweGFjLCAweDY2CisrfTsKKysKKysvKiBT SEEtMzg0IE5vIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGEzODRfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4MDcsIDB4MTUsIDB4MjcsIDB4 MmEsIDB4YWYsIDB4NzQsIDB4MjQsIDB4MzcsIDB4YmMsIDB4ZDUsIDB4MTQsIDB4NjksCisrICAg IDB4Y2UsIDB4MTEsIDB4ZmYsIDB4YTIsIDB4NmIsIDB4YjgsIDB4MDUsIDB4NjcsIDB4MzQsIDB4 ZjgsIDB4YmQsIDB4NmQsCisrICAgIDB4NmEsIDB4Y2MsIDB4Y2QsIDB4NjAsIDB4YTMsIDB4Njgs IDB4Y2EsIDB4ZjQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBzaGEzODRfbm9uY2VbXSA9IHsKKysgICAgMHg3MCwgMHgxNywgMHhjMiwgMHg1Yiwg MHg1ZCwgMHgyMiwgMHgwYiwgMHgwNiwgMHgxNSwgMHg1NCwgMHg3OCwgMHg3NywKKysgICAgMHg0 NCwgMHhhZiwgMHgyZiwgMHgwOQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAg MHg4OSwgMHgzOSwgMHgyOCwgMHhiMCwgMHg2MCwgMHhlYiwgMHgzZCwgMHhkYywgMHg1NSwgMHg3 NSwgMHg4NiwgMHhlYiwKKysgICAgMHhhZSwgMHhhMiwgMHg4ZiwgMHhiYywgMHgxYiwgMHg3NSwg MHhkNCwgMHhlMSwgMHgwZiwgMHhhYSwgMHgzOCwgMHhjYSwKKysgICAgMHg2MiwgMHg4YiwgMHhj YiwgMHgyYywgMHgyNiwgMHhmNiwgMHhiYywgMHhiMQorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9hZGRpdGlvbmFsaW5wdXRbXSA9IHsK KysgICAgMHgzMCwgMHgyYiwgMHg0MiwgMHgzNSwgMHhlZiwgMHhkYSwgMHg0MCwgMHg1NSwgMHgy OCwgMHhjNiwgMHg5NSwgMHhmYiwKKysgICAgMHg1NCwgMHgwMSwgMHg2MiwgMHhkNywgMHg4Nywg MHgxNCwgMHg0OCwgMHg2ZCwgMHg5MCwgMHg0YywgMHhhOSwgMHgwMiwKKysgICAgMHg1NCwgMHg0 MCwgMHgyMiwgMHhjOCwgMHg2NiwgMHhhNSwgMHg0OCwgMHg0OAorK307CisrCisrX19maXBzX2Nv bnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTM4NF9pbnRfcmV0dXJuZWRiaXRz W10gPSB7CisrICAgIDB4ODIsIDB4YzQsIDB4YTEsIDB4OWMsIDB4MjEsIDB4ZDIsIDB4ZTcsIDB4 YTUsIDB4YTYsIDB4ZjYsIDB4NWYsIDB4MDQsCisrICAgIDB4NWMsIDB4YzcsIDB4MzEsIDB4OWQs IDB4OGQsIDB4NTksIDB4NzQsIDB4NTAsIDB4MTksIDB4ODksIDB4MmYsIDB4NjMsCisrICAgIDB4 ZDUsIDB4YjcsIDB4N2UsIDB4ZWIsIDB4MTUsIDB4ZTMsIDB4NzAsIDB4ODMsIDB4YTEsIDB4MjQs IDB4NTksIDB4ZmEsCisrICAgIDB4MmMsIDB4NTYsIDB4ZjYsIDB4ODgsIDB4M2EsIDB4OTIsIDB4 OTMsIDB4YTEsIDB4ZmIsIDB4NzksIDB4YzEsIDB4N2EKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfZW50cm9weWlucHV0cmVzZWVkW10g PSB7CisrICAgIDB4MzksIDB4YTYsIDB4ZTgsIDB4NWMsIDB4ODIsIDB4MTcsIDB4NzEsIDB4MjYs IDB4NTcsIDB4NGYsIDB4OWYsIDB4YzIsCisrICAgIDB4NTUsIDB4ZmYsIDB4NWMsIDB4OWIsIDB4 NTMsIDB4MWEsIDB4ZDEsIDB4NWYsIDB4YmMsIDB4NjIsIDB4ZTQsIDB4MjcsCisrICAgIDB4MmQs IDB4MzIsIDB4ZjAsIDB4ZTQsIDB4NTIsIDB4OGMsIDB4YzUsIDB4MGMKKyt9OworKworK19fZmlw c19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRfYWRkaXRpb25hbGlu cHV0cmVzZWVkW10gPSB7CisrICAgIDB4OGQsIDB4Y2IsIDB4OGQsIDB4Y2UsIDB4MDgsIDB4ZWEs IDB4ODAsIDB4ZTgsIDB4OWIsIDB4NjEsIDB4YTgsIDB4MGYsCisrICAgIDB4YWYsIDB4NDksIDB4 MjAsIDB4OWUsIDB4NzQsIDB4Y2IsIDB4NTcsIDB4ODAsIDB4NDIsIDB4YjAsIDB4ODQsIDB4NWUs CisrICAgIDB4MzAsIDB4MmEsIDB4NjcsIDB4MDgsIDB4ZjQsIDB4ZTMsIDB4NDAsIDB4MjIKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzaGEzODRf YWRkaXRpb25hbGlucHV0MltdID0geworKyAgICAweDdjLCAweDhmLCAweGMyLCAweGFlLCAweDIy LCAweDRhLCAweGQ2LCAweGY2LCAweDA1LCAweGE0LCAweDdhLCAweGVhLAorKyAgICAweGJiLCAw eDI1LCAweGQwLCAweGI3LCAweDVhLCAweGQ2LCAweGNmLCAweDlkLCAweGYzLCAweDZjLCAweGUy LCAweGIyLAorKyAgICAweDRlLCAweGI0LCAweGJkLCAweGY0LCAweGU1LCAweDQwLCAweDgwLCAw eDk0CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg c2hhMzg0X3JldHVybmVkYml0c1tdID0geworKyAgICAweDllLCAweDdlLCAweGZiLCAweDU5LCAw eGJiLCAweGFhLCAweDNjLCAweGY3LCAweGUxLCAweGY4LCAweDc2LCAweGRkLAorKyAgICAweDYz LCAweDVmLCAweGFmLCAweDIzLCAweGQ2LCAweDY0LCAweDYxLCAweGMwLCAweDlhLCAweDA5LCAw eDQ3LCAweGM5LAorKyAgICAweDMzLCAweGRmLCAweDZkLCAweDU1LCAweDkxLCAweDM0LCAweDc5 LCAweDcwLCAweGM0LCAweDk5LCAweDZlLCAweDU0LAorKyAgICAweDA5LCAweDY0LCAweDIxLCAw eDFhLCAweGJkLCAweDFlLCAweDgwLCAweDQwLCAweDM0LCAweGFkLCAweGZhLCAweGQ3CisrfTsK KysKKysvKiBTSEEtNTEyIFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4MTMsIDB4Zjcs IDB4NjEsIDB4NzUsIDB4NjUsIDB4MjgsIDB4YTIsIDB4NTksIDB4MTMsIDB4NWEsIDB4NGEsIDB4 NGYsCisrICAgIDB4NTYsIDB4NjAsIDB4OGMsIDB4NTMsIDB4N2QsIDB4YjAsIDB4YmQsIDB4MDYs IDB4NGYsIDB4ZWQsIDB4Y2MsIDB4ZDIsCisrICAgIDB4YTIsIDB4YjUsIDB4ZmQsIDB4NWIsIDB4 M2EsIDB4YWIsIDB4ZWMsIDB4MjgKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBzaGE1MTJfcHJfbm9uY2VbXSA9IHsKKysgICAgMHhiZSwgMHhhMywg MHg5MSwgMHg5MywgMHgxZCwgMHhjMywgMHgzMSwgMHgzYSwgMHgyMywgMHgzMywgMHg1MCwgMHg2 NywKKysgICAgMHg4OCwgMHhjNywgMHhhMiwgMHhjNAorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9wZXJzb25hbGl6YXRpb25zdHJp bmdbXSA9IHsKKysgICAgMHgxZiwgMHg1OSwgMHg0ZCwgMHg3YiwgMHhlNiwgMHg0NiwgMHg5MSwg MHg0OCwgMHhjMSwgMHgyNSwgMHhmYSwgMHhmZiwKKysgICAgMHg4OSwgMHgxMiwgMHg3NywgMHgz NSwgMHhkZiwgMHgzZSwgMHhmNCwgMHg4MCwgMHg1ZiwgMHhkOSwgMHhiMCwgMHgwNywKKysgICAg MHgyMiwgMHg0MSwgMHhkZCwgMHg0OCwgMHg3OCwgMHg2YiwgMHg3NywgMHgyYgorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9wcl9hZGRp dGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHgzMCwgMHhmZiwgMHg2MywgMHg2ZiwgMHhhYywgMHhk OSwgMHg4NCwgMHgzOSwgMHg2ZiwgMHhlNCwgMHg5OSwgMHhjZSwKKysgICAgMHg5MSwgMHg3ZCwg MHg3ZSwgMHhjOCwgMHg1OCwgMHhmMiwgMHgxMiwgMHhjMywgMHhiNiwgMHhhZCwgMHhkYSwgMHgy MiwKKysgICAgMHgwNCwgMHhhMCwgMHhkMiwgMHgyMSwgMHhmZSwgMHhmMiwgMHg5NSwgMHgxZAor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9wcl9lbnRyb3B5aW5wdXRwcltdID0geworKyAgICAweDY0LCAweDU0LCAweDEzLCAweGVjLCAw eDRmLCAweDc3LCAweGRhLCAweGIyLCAweDkyLCAweDJlLCAweDUyLCAweDgwLAorKyAgICAweDEx LCAweDEwLCAweGMyLCAweGY4LCAweGU2LCAweGE3LCAweGNkLCAweDRiLCAweGZjLCAweDMyLCAw eDJlLCAweDllLAorKyAgICAweGViLCAweGJiLCAweGIxLCAweGJmLCAweDE1LCAweDVjLCAweDcz LCAweDA4CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgc2hhNTEyX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhlZiwgMHgxZSwgMHhk YywgMHgwYSwgMHhhNCwgMHgzNiwgMHg5MSwgMHg5YywgMHgzZCwgMHgyNywgMHg5NywgMHg1MCwK KysgICAgMHg4ZCwgMHgzNiwgMHgyOSwgMHg4ZCwgMHhjZSwgMHg2YSwgMHgwYywgMHhmNywgMHgy MSwgMHhjMCwgMHg5MSwgMHhhZSwKKysgICAgMHgwYywgMHg5NiwgMHg3MiwgMHhiZCwgMHg1Miwg MHg4MSwgMHg1OCwgMHhmYywgMHg2ZCwgMHhlNSwgMHhmNywgMHhhNSwKKysgICAgMHhmZCwgMHg1 ZCwgMHhhNywgMHg1OCwgMHg2OCwgMHhjOCwgMHg5OSwgMHg1OCwgMHg4ZSwgMHhjOCwgMHhjZSwg MHg5NSwKKysgICAgMHgwMSwgMHg3ZCwgMHhmZiwgMHhhNCwgMHhjOCwgMHhmNywgMHg2MywgMHhm ZSwgMHg1ZiwgMHg2OSwgMHg4MywgMHg1MywKKysgICAgMHhlMiwgMHhjNiwgMHg4YiwgMHhjMwor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9wcl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4ZTYsIDB4OWIsIDB4YzQsIDB4ODgs IDB4MzQsIDB4Y2EsIDB4ZWEsIDB4MjksIDB4MmYsIDB4OTgsIDB4MDUsIDB4YTQsCisrICAgIDB4 ZDMsIDB4YzAsIDB4N2IsIDB4MTEsIDB4ZTgsIDB4YmIsIDB4NzUsIDB4ZjIsIDB4YmQsIDB4Mjks IDB4YjcsIDB4NDAsCisrICAgIDB4MjUsIDB4N2YsIDB4YzEsIDB4YjcsIDB4YjEsIDB4ZjEsIDB4 MjUsIDB4NjEKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBzaGE1MTJfcHJfZW50cm9weWlucHV0cHIyW10gPSB7CisrICAgIDB4MjMsIDB4NmQsIDB4 ZmYsIDB4ZGUsIDB4ZmIsIDB4ZDEsIDB4YmEsIDB4MzMsIDB4MTgsIDB4ZTYsIDB4YmUsIDB4YjUs CisrICAgIDB4NDgsIDB4NzcsIDB4NmQsIDB4N2YsIDB4YTcsIDB4ZTEsIDB4NGQsIDB4NDgsIDB4 MWUsIDB4M2MsIDB4YTcsIDB4MzQsCisrICAgIDB4MWEsIDB4YzgsIDB4NjAsIDB4ZGIsIDB4OGYs IDB4OTksIDB4MTUsIDB4OTkKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGE1MTJfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4NzAsIDB4 MjcsIDB4MzEsIDB4ZGIsIDB4OTIsIDB4NzAsIDB4MjEsIDB4ZmUsIDB4MTYsIDB4YjYsIDB4Yzgs IDB4NTEsCisrICAgIDB4MzQsIDB4ODcsIDB4NjUsIDB4ZDAsIDB4NGUsIDB4ZmQsIDB4ZmUsIDB4 NjgsIDB4ZWMsIDB4YWMsIDB4ZGMsIDB4OTMsCisrICAgIDB4NDEsIDB4MzgsIDB4OTIsIDB4OTAs IDB4YjQsIDB4OTQsIDB4ZjksIDB4MGQsIDB4YTQsIDB4ZjcsIDB4NGUsIDB4ODAsCisrICAgIDB4 OTIsIDB4NjcsIDB4NDgsIDB4NDAsIDB4YTcsIDB4MDgsIDB4YzcsIDB4YmMsIDB4NjYsIDB4MDAs IDB4ZmQsIDB4ZjcsCisrICAgIDB4NGMsIDB4OGIsIDB4MTcsIDB4NmUsIDB4ZDEsIDB4OGYsIDB4 OWIsIDB4ZjMsIDB4NmYsIDB4ZjYsIDB4MzQsIDB4ZGQsCisrICAgIDB4NjcsIDB4ZjcsIDB4Njgs IDB4ZGQKKyt9OworKworKy8qIFNIQS01MTIgTm8gUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAg MHhiNiwgMHgwYiwgMHhiNywgMHhiYywgMHg4NCwgMHg1NiwgMHhmNiwgMHgxMiwgMHhhZiwgMHg0 NSwgMHg2NywgMHgxNywKKysgICAgMHg3YywgMHhkMSwgMHhiMiwgMHg3OCwgMHgyYiwgMHhhMCwg MHhmMiwgMHhiZSwgMHhiNiwgMHg2ZCwgMHg4YiwgMHg1NiwKKysgICAgMHhjNiwgMHhiYywgMHg0 ZCwgMHhlMSwgMHhmNywgMHhiZSwgMHhjZSwgMHhiZAorK307CisrCisrX19maXBzX2NvbnN0c2Vn IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9ub25jZVtdID0geworKyAgICAweDlk LCAweGVkLCAweGMwLCAweGU1LCAweDVhLCAweDk4LCAweDZhLCAweGNiLCAweDUxLCAweDdkLCAw eDc2LCAweDMxLAorKyAgICAweDVhLCAweDY0LCAweGYwLCAweGY3CisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX3BlcnNvbmFsaXphdGlv bnN0cmluZ1tdID0geworKyAgICAweGMyLCAweDZkLCAweGEzLCAweGMzLCAweDA2LCAweDc0LCAw eGU1LCAweDAxLCAweDVjLCAweDEwLCAweDE3LCAweGM3LAorKyAgICAweGFmLCAweDgzLCAweDlk LCAweDU5LCAweDhkLCAweDJkLCAweDI5LCAweDM4LCAweGM1LCAweDU5LCAweDcwLCAweDhiLAor KyAgICAweDQ2LCAweDQ4LCAweDJkLCAweGNmLCAweDM2LCAweDdkLCAweDU5LCAweGMwCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhNTEyX2Fk ZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweGVjLCAweDhjLCAweGQ0LCAweGY3LCAweDYxLCAw eDZlLCAweDBkLCAweDk1LCAweDc5LCAweGI3LCAweDI4LCAweGFkLAorKyAgICAweDVmLCAweDY5 LCAweDc0LCAweDVmLCAweDJkLCAweDM2LCAweDA2LCAweDhhLCAweDZiLCAweGFjLCAweDU0LCAw eDk3LAorKyAgICAweGM0LCAweGExLCAweDEyLCAweDg1LCAweDBhLCAweGRmLCAweDRiLCAweDM0 CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hh NTEyX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg4NCwgMHgyZiwgMHgxZiwgMHg2OCwg MHg2YSwgMHhhMywgMHhhZCwgMHgxZSwgMHhmYiwgMHhmNCwgMHgxNSwgMHhiZCwKKysgICAgMHhk ZSwgMHgzOCwgMHhkNCwgMHgzMCwgMHg4MCwgMHg1MSwgMHhlOSwgMHhkMywgMHhjNywgMHgyMCwg MHg4OCwgMHhlOSwKKysgICAgMHhmNSwgMHhjYywgMHhkZiwgMHg1NywgMHg1YywgMHg0NywgMHgy ZiwgMHg1NywgMHgzYywgMHg1ZiwgMHgxMywgMHg1NiwKKysgICAgMHhjYywgMHhjNSwgMHg0Ziwg MHg4NCwgMHhmOCwgMHgxMCwgMHg0MSwgMHhkNSwgMHg3ZSwgMHg1OCwgMHg2ZSwgMHgxOSwKKysg ICAgMHgxOSwgMHg5ZSwgMHhhZiwgMHhjMiwgMHgyMiwgMHg1OCwgMHg0MSwgMHg1MCwgMHg3OSwg MHhjMiwgMHhkOCwgMHgwNCwKKysgICAgMHgyOCwgMHhkNCwgMHgzOSwgMHg5YQorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUxMl9lbnRyb3B5 aW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHhmYSwgMHg3ZiwgMHg0NiwgMHg1MSwgMHg4MywgMHg2 MiwgMHg5OCwgMHgxNiwgMHg5YSwgMHgxOSwgMHhhMiwgMHg0OSwKKysgICAgMHhhOSwgMHhlNiwg MHg0YSwgMHhkOCwgMHg4NSwgMHhlNywgMHhkNCwgMHgzYiwgMHgyYywgMHg4MiwgMHhjNSwgMHg4 MiwKKysgICAgMHhiZiwgMHgxMSwgMHhmOSwgMHg5ZSwgMHhiYywgMHhkMCwgMHgwMSwgMHhlZQor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTUx Ml9hZGRpdGlvbmFsaW5wdXRyZXNlZWRbXSA9IHsKKysgICAgMHhiOSwgMHgxMiwgMHhlMCwgMHg0 ZiwgMHhmNywgMHhhNywgMHhjNCwgMHhkOCwgMHhkMCwgMHg4ZSwgMHg5OSwgMHgyOSwKKysgICAg MHg3YywgMHg5YSwgMHhlOSwgMHhjZiwgMHhjNCwgMHg2YywgMHhmOCwgMHhjMywgMHhhNywgMHg0 MSwgMHg4MywgMHhkNiwKKysgICAgMHgyZSwgMHhmYSwgMHhiOCwgMHg1ZSwgMHg4ZSwgMHg2Yiwg MHg3OCwgMHgyMAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25l ZCBjaGFyIHNoYTUxMl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4ZDcsIDB4MDcsIDB4 NTIsIDB4YjksIDB4ODMsIDB4MmMsIDB4MDMsIDB4NzEsIDB4ZWUsIDB4YzksIDB4YzAsIDB4ODUs CisrICAgIDB4ZTEsIDB4NTcsIDB4YjIsIDB4Y2QsIDB4M2EsIDB4ZjAsIDB4YzksIDB4MzQsIDB4 MjQsIDB4NDEsIDB4MWMsIDB4NDIsCisrICAgIDB4OTksIDB4YjIsIDB4ODQsIDB4ZTksIDB4MTcs IDB4ZDIsIDB4NzYsIDB4OTIKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBzaGE1MTJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4MzYsIDB4MTcs IDB4NWQsIDB4OTgsIDB4MmIsIDB4NjUsIDB4MjUsIDB4OGUsIDB4YzgsIDB4MjksIDB4ZGYsIDB4 MjcsCisrICAgIDB4MDUsIDB4MzYsIDB4MjYsIDB4MTIsIDB4OGEsIDB4NjgsIDB4NzQsIDB4Mjcs IDB4MzcsIDB4ZDQsIDB4N2YsIDB4MzIsCisrICAgIDB4YjEsIDB4MTIsIDB4ZDYsIDB4ODUsIDB4 ODMsIDB4ZWIsIDB4MmUsIDB4YTAsIDB4ZWQsIDB4NGIsIDB4YjUsIDB4N2IsCisrICAgIDB4NmYs IDB4MzksIDB4M2MsIDB4NzEsIDB4NzcsIDB4MDIsIDB4MTIsIDB4Y2MsIDB4MmMsIDB4M2EsIDB4 OGUsIDB4NjMsCisrICAgIDB4ZGYsIDB4NGEsIDB4YmQsIDB4NmYsIDB4NmUsIDB4MmUsIDB4ZWQs IDB4MGEsIDB4ODUsIDB4YTUsIDB4MmYsIDB4YTIsCisrICAgIDB4NjgsIDB4ZGUsIDB4NDIsIDB4 YjUKKyt9OworKworKy8qIEhNQUMgU0hBLTEgUFIgICovCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysg ICAgMHgyNiwgMHg1ZiwgMHgzNiwgMHgxNCwgMHhmZiwgMHgzZCwgMHg4MywgMHhmYSwgMHg3Mywg MHg1ZSwgMHg3NSwgMHhkYywKKysgICAgMHgyYywgMHgxOCwgMHgxNywgMHgxYgorK307CisrCisr X19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9u b25jZVtdID0geworKyAgICAweGM4LCAweGUzLCAweDU3LCAweGE1LCAweDdiLCAweDc0LCAweDg2 LCAweDZlCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGExX3ByX3BlcnNvbmFsaXphdGlvbnN0cmluZ1tdID0geworKyAgICAw eDZlLCAweGRiLCAweDBkLCAweGZlLCAweDdkLCAweGFjLCAweDc5LCAweGQwLCAweGE1LCAweDNh LCAweDQ4LCAweDg1LAorKyAgICAweDgwLCAweGUyLCAweDdmLCAweDJhCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2FkZGl0 aW9uYWxpbnB1dFtdID0geworKyAgICAweDMxLCAweGNkLCAweDVlLCAweDQzLCAweGRjLCAweGZi LCAweDdhLCAweDc5LCAweGNhLCAweDg4LCAweGRlLCAweDFmLAorKyAgICAweGQ3LCAweGJiLCAw eDQyLCAweDA5CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX3ByX2VudHJvcHlpbnB1dHByW10gPSB7CisrICAgIDB4N2MsIDB4MjMs IDB4OTUsIDB4MzgsIDB4MDAsIDB4OTUsIDB4YzEsIDB4NzgsIDB4MWYsIDB4OGYsIDB4ZDcsIDB4 NjMsCisrICAgIDB4MjMsIDB4ODcsIDB4MmEsIDB4ZWQKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfcHJfaW50X3JldHVybmVkYml0 c1tdID0geworKyAgICAweGJiLCAweDM0LCAweGU3LCAweDkzLCAweGEzLCAweDAyLCAweDJjLCAw eDRhLCAweGQwLCAweDg5LCAweGRhLCAweDdmLAorKyAgICAweGVkLCAweGY0LCAweDRjLCAweGRl LCAweDE3LCAweGVjLCAweGU1LCAweDZjCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsK KysgICAgMHg0OSwgMHhiYywgMHgyZCwgMHgyYywgMHhiNywgMHgzMiwgMHhjYiwgMHgyMCwgMHhk ZiwgMHhmNSwgMHg3NywgMHg1OCwKKysgICAgMHhhMCwgMHg0YiwgMHg5MywgMHg2ZQorK307Cisr CisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9w cl9lbnRyb3B5aW5wdXRwcjJbXSA9IHsKKysgICAgMHgzYywgMHhhYSwgMHhiMCwgMHgyMSwgMHg0 MiwgMHhiMCwgMHhkZCwgMHgzNCwgMHhmMCwgMHgxNiwgMHg3ZiwgMHgwYywKKysgICAgMHgwZiwg MHhmZiwgMHgyZSwgMHhhZgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMV9wcl9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg4ZSwg MHhjYiwgMHhhMywgMHg2NCwgMHhiMiwgMHhiOCwgMHgzMywgMHg2YywgMHg2NCwgMHgzYiwgMHg3 OCwgMHgxNiwKKysgICAgMHg5OSwgMHgzNSwgMHhjOCwgMHgzMCwgMHhjYiwgMHgzZSwgMHhhMCwg MHhkOAorK307CisrCisrLyogSE1BQyBTSEEtMSBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlpbnB1dFtdID0gewor KyAgICAweDMyLCAweDlhLCAweDJhLCAweDg3LCAweDdiLCAweDg5LCAweDdjLCAweGY2LCAweGNi LCAweDk1LCAweGQ1LCAweDQwLAorKyAgICAweDE3LCAweGZlLCAweDQ3LCAweDcwCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX25v bmNlW10gPSB7CisrICAgIDB4MTYsIDB4ZDgsIDB4ZTAsIDB4YzcsIDB4NTIsIDB4Y2YsIDB4NGEs IDB4MjUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTFfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4MzUsIDB4MzUs IDB4YTksIDB4YTUsIDB4NDAsIDB4YmUsIDB4OWIsIDB4ZDEsIDB4NTYsIDB4ZGQsIDB4NDQsIDB4 MDAsCisrICAgIDB4NzIsIDB4ZjcsIDB4ZDMsIDB4NWUKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTFfYWRkaXRpb25hbGlucHV0W10g PSB7CisrICAgIDB4MWIsIDB4MmMsIDB4ODQsIDB4MmQsIDB4NGEsIDB4ODksIDB4OGYsIDB4Njks IDB4MTksIDB4ZjEsIDB4ZjMsIDB4ZGIsCisrICAgIDB4YmIsIDB4ZTMsIDB4YWEsIDB4ZWEKKyt9 OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3No YTFfaW50X3JldHVybmVkYml0c1tdID0geworKyAgICAweGNmLCAweGZhLCAweDdkLCAweDcyLCAw eDBmLCAweGU2LCAweGM3LCAweDk2LCAweGEwLCAweDY5LCAweDMxLCAweDExLAorKyAgICAweDli LCAweDBiLCAweDFhLCAweDIwLCAweDFmLCAweDNmLCAweGFhLCAweGQxCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2VudHJvcHlp bnB1dHJlc2VlZFtdID0geworKyAgICAweDkwLCAweDc1LCAweDE1LCAweDA0LCAweDk1LCAweGYx LCAweGJhLCAweDgxLCAweDBjLCAweDM3LCAweDk0LCAweDZmLAorKyAgICAweDg2LCAweDUyLCAw eDZkLCAweDljCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVk IGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1dHJlc2VlZFtdID0geworKyAgICAweDViLCAw eDQwLCAweGJhLCAweDVmLCAweDE3LCAweDcwLCAweGYwLCAweDRiLCAweGRmLCAweGM5LCAweDk3 LCAweDkyLAorKyAgICAweDc5LCAweGM1LCAweDgyLCAweDI4CisrfTsKKysKKytfX2ZpcHNfY29u c3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGExX2FkZGl0aW9uYWxpbnB1 dDJbXSA9IHsKKysgICAgMHg5NywgMHhjOCwgMHg4MCwgMHg5MCwgMHhiMywgMHhhYSwgMHg2ZSwg MHg2MCwgMHhlYSwgMHg4MywgMHg3YSwgMHhlMywKKysgICAgMHg4YSwgMHhjYSwgMHhhNCwgMHg3 ZgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhMV9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg5MCwgMHhiZCwgMHgwNSwgMHg1Niwg MHg2ZCwgMHhiNSwgMHgyMiwgMHhkNSwgMHhiOSwgMHg1YSwgMHgyOSwgMHgyZCwKKysgICAgMHhl OSwgMHgwYiwgMHhlMSwgMHhhYywgMHhkZSwgMHgyNywgMHgwYiwgMHhiMAorK307CisrCisrLyog SE1BQyBTSEEtMjI0IFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTIyNF9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHgxNywgMHgz MiwgMHgyYiwgMHgyZSwgMHg2ZiwgMHgxYiwgMHg5YywgMHg2ZCwgMHgzMSwgMHhlMCwgMHgzNCwg MHgwNywKKysgICAgMHhjZiwgMHhlZCwgMHhmNiwgMHhiNiwgMHg1YSwgMHg3NiwgMHg0YywgMHhi YywgMHg2MiwgMHg4NSwgMHgwMSwgMHg5MAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX25vbmNlW10gPSB7CisrICAgIDB4 MzgsIDB4YmYsIDB4NWYsIDB4MjAsIDB4YjMsIDB4NjgsIDB4MmYsIDB4NDMsIDB4NjEsIDB4MDUs IDB4OGYsIDB4MjMKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsK KysgICAgMHhjMCwgMHhjOSwgMHg0NSwgMHhhYywgMHg4ZCwgMHgyNywgMHg3NywgMHgwOCwgMHgw YiwgMHgxNywgMHg2ZCwgMHhlZCwKKysgICAgMHhjMSwgMHg3ZCwgMHhkNSwgMHgwNywgMHg5ZCwg MHg2ZSwgMHhmOCwgMHgyMywgMHgyYSwgMHgyMiwgMHgxMywgMHhiZAorK307CisrCisrX19maXBz X2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0 aW9uYWxpbnB1dFtdID0geworKyAgICAweGE0LCAweDNjLCAweGU3LCAweDNiLCAweGVhLCAweDE5 LCAweDQ1LCAweDMyLCAweGMyLCAweDgzLCAweDZkLCAweDIxLAorKyAgICAweDhhLCAweGMwLCAw eGVlLCAweDY3LCAweDQ1LCAweGRlLCAweDEzLCAweDdkLCAweDlkLCAweDYxLCAweDAwLCAweDNi CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyMjRfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAgMHgxNSwgMHgwNSwgMHg3NCwg MHg0YSwgMHg3ZiwgMHg4ZCwgMHg1YywgMHg2MCwgMHgxNiwgMHhlNSwgMHg3YiwgMHhhZCwKKysg ICAgMHhmNSwgMHg0MSwgMHg4ZiwgMHg1NSwgMHg2MCwgMHhjNCwgMHgwOSwgMHhlZSwgMHgxZSwg MHgxMSwgMHg4MSwgMHhhYgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAg MHg2ZiwgMHhmNSwgMHg5YSwgMHhlMiwgMHg1NCwgMHg1MywgMHgzMCwgMHgzZCwgMHg1YSwgMHgy NywgMHgyOSwgMHgzOCwKKysgICAgMHgyNywgMHhmMiwgMHgwZCwgMHgwNSwgMHhlOSwgMHgyNiwg MHhjYiwgMHgxNiwgMHhjMywgMHg1MSwgMHg1ZiwgMHgxMywKKysgICAgMHg0MSwgMHhmZSwgMHg5 OSwgMHhmMgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGhtYWNfc2hhMjI0X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHg3MywgMHg4 MSwgMHg4OCwgMHg4NCwgMHg4ZiwgMHhlZCwgMHg2ZiwgMHgxMCwgMHg5ZiwgMHg5MywgMHhiZiwg MHgxNywKKysgICAgMHgzNSwgMHg3YywgMHhlZiwgMHhkNSwgMHg4ZCwgMHgyNiwgMHhhNiwgMHg3 YSwgMHhlOCwgMHgwOSwgMHgzNiwgMHg0ZgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X3ByX2VudHJvcHlpbnB1dHByMltdID0g eworKyAgICAweGU2LCAweGNmLCAweGNmLCAweDdlLCAweDEyLCAweGU1LCAweDQzLCAweGQyLCAw eDM4LCAweGQ4LCAweDI0LCAweDZmLAorKyAgICAweDVhLCAweDM3LCAweDY4LCAweGJmLCAweDRm LCAweGEwLCAweGZmLCAweGQ1LCAweDYxLCAweDhhLCAweDkzLCAweGUwCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfcHJfcmV0 dXJuZWRiaXRzW10gPSB7CisrICAgIDB4YWYsIDB4ZjksIDB4ZDgsIDB4MTksIDB4OTEsIDB4MzAs IDB4ODIsIDB4NmYsIDB4YTksIDB4MWUsIDB4OWQsIDB4ZDcsCisrICAgIDB4ZjMsIDB4NTAsIDB4 ZTAsIDB4YzcsIDB4ZDUsIDB4NjQsIDB4OTYsIDB4N2QsIDB4NGMsIDB4NGQsIDB4NzgsIDB4MDMs CisrICAgIDB4NmQsIDB4ZDgsIDB4OWUsIDB4NzIKKyt9OworKworKy8qIEhNQUMgU0hBLTIyNCBO byBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyMjRfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4MTEsIDB4ODIsIDB4ZmQsIDB4ZDks IDB4NDIsIDB4ZjQsIDB4ZmEsIDB4YzgsIDB4ZjIsIDB4NDEsIDB4ZTYsIDB4NTQsCisrICAgIDB4 MDEsIDB4YWUsIDB4MjIsIDB4NmUsIDB4YzYsIDB4YWYsIDB4YWYsIDB4ZDAsIDB4YTYsIDB4YjIs IDB4ZTIsIDB4NmQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTIyNF9ub25jZVtdID0geworKyAgICAweGE5LCAweDQ4LCAweGQ3LCAw eDkyLCAweDM5LCAweDdlLCAweDJhLCAweGRjLCAweDMwLCAweDFmLCAweDBlLCAweDJiCisrfTsK KysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEyMjRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4MTEsIDB4ZDUsIDB4 ZjQsIDB4YmQsIDB4NjcsIDB4OGMsIDB4MzEsIDB4Y2YsIDB4YTMsIDB4M2YsIDB4MWUsIDB4NmIs CisrICAgIDB4YTgsIDB4MDcsIDB4MDIsIDB4MGIsIDB4YzgsIDB4MmUsIDB4NmMsIDB4NjQsIDB4 NDEsIDB4NWIsIDB4YzgsIDB4MzcKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29u c3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAg MHg2OCwgMHgxOCwgMHhjMiwgMHgwNiwgMHhlYiwgMHgzZSwgMHgwNCwgMHg5NSwgMHg0NCwgMHg1 ZSwgMHhmYiwgMHhlNiwKKysgICAgMHg0MSwgMHhjMSwgMHg1YywgMHhjYywgMHg0MCwgMHgyZiwg MHhiNywgMHhkMiwgMHgwZiwgMHhmMywgMHg2YiwgMHhlNworK307CisrCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2ludF9yZXR1cm5lZGJp dHNbXSA9IHsKKysgICAgMHg3ZiwgMHg0NSwgMHhjNywgMHg1ZCwgMHgzMiwgMHhlNiwgMHgxNywg MHg2MCwgMHhiYSwgMHhkYywgMHhiOCwgMHg0MiwKKysgICAgMHgxYiwgMHg5YywgMHhmMSwgMHhm YSwgMHgzYiwgMHg0ZCwgMHgyOSwgMHg1NCwgMHhjNiwgMHg5MCwgMHhmZiwgMHg1YywKKysgICAg MHhjZCwgMHhkNiwgMHhhOSwgMHhjYworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjI0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0gewor KyAgICAweGM0LCAweDhlLCAweDM3LCAweDk1LCAweDY5LCAweDUzLCAweDI4LCAweGQ3LCAweDM3 LCAweGJiLCAweDcwLCAweDk1LAorKyAgICAweDFjLCAweDA3LCAweDFkLCAweGQ5LCAweGI3LCAw eGU2LCAweDFiLCAweGJiLCAweGZlLCAweDQxLCAweGViLCAweGM5CisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyMjRfYWRk aXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4NTMsIDB4MTcsIDB4YTEsIDB4NmEsIDB4 ZmEsIDB4NzcsIDB4NDcsIDB4YjAsIDB4OTUsIDB4NTYsIDB4OWEsIDB4MjAsCisrICAgIDB4NTcs IDB4ZGUsIDB4NWMsIDB4ODksIDB4OWYsIDB4N2YsIDB4ZTIsIDB4ZGUsIDB4MTcsIDB4M2EsIDB4 NTAsIDB4MjMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTIyNF9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4M2EsIDB4MzIs IDB4ZjksIDB4ODUsIDB4MGMsIDB4YzEsIDB4ZWQsIDB4NzYsIDB4MmQsIDB4ZGYsIDB4NDAsIDB4 YzMsCisrICAgIDB4MDYsIDB4MjIsIDB4NjYsIDB4ZDQsIDB4OWEsIDB4OWEsIDB4ZmYsIDB4NWEs IDB4N2UsIDB4N2EsIDB4ZjMsIDB4OTYKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTIyNF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAg MHg0MywgMHhiNCwgMHg1NywgMHg1YywgMHgzOCwgMHgyNSwgMHg5ZCwgMHhhZSwgMHhlYywgMHg5 NiwgMHhkMSwgMHg4NSwKKysgICAgMHgzYSwgMHg4NCwgMHg4ZCwgMHhmZSwgMHg2OCwgMHhkNSwg MHgwZSwgMHg1YywgMHg4ZiwgMHg2NSwgMHhhNSwgMHg0ZSwKKysgICAgMHg0NSwgMHg4NCwgMHhh OCwgMHg5NAorK307CisrCisrLyogSE1BQyBTSEEtMjU2IFBSICAqLworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9wcl9lbnRyb3B5aW5wdXRb XSA9IHsKKysgICAgMHg0ZCwgMHhiMCwgMHg0MywgMHhkOCwgMHgzNCwgMHg0YiwgMHgxMCwgMHg3 MCwgMHhiMSwgMHg4YiwgMHhlZCwgMHhlYSwKKysgICAgMHgwNywgMHg5MiwgMHg5ZiwgMHg2Yywg MHg3OSwgMHgzMSwgMHhhZiwgMHg4MSwgMHgyOSwgMHhlYiwgMHg2ZSwgMHhjYSwKKysgICAgMHgz MiwgMHg0OCwgMHgyOCwgMHhlNywgMHgwMiwgMHg1ZCwgMHhhNiwgMHhhNgorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX25v bmNlW10gPSB7CisrICAgIDB4M2EsIDB4YWUsIDB4MTUsIDB4YTksIDB4OTksIDB4ZGMsIDB4ZTQs IDB4NjcsIDB4MzQsIDB4M2IsIDB4NzAsIDB4MTUsCisrICAgIDB4YWEsIDB4ZDMsIDB4MzAsIDB4 OWEKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg Y2hhciBobWFjX3NoYTI1Nl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHgx MywgMHgxZCwgMHgyNCwgMHgwNCwgMHhiMCwgMHgxOCwgMHg4MSwgMHgxNSwgMHgyMSwgMHg1MSwg MHgyYSwgMHgyNCwKKysgICAgMHg1MiwgMHg2MSwgMHhiZSwgMHg2NCwgMHg4MiwgMHg2YiwgMHg1 NSwgMHgyZiwgMHhlMiwgMHhmMSwgMHg0MCwgMHg3ZCwKKysgICAgMHg3MSwgMHhkOCwgMHgwMSwg MHg4NiwgMHgxNSwgMHhiNywgMHg4YiwgMHhiNQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dFtd ID0geworKyAgICAweDhmLCAweGE2LCAweDU0LCAweDVmLCAweGIxLCAweGQwLCAweGQ4LCAweGMz LCAweGU3LCAweDBjLCAweDE1LCAweGE5LAorKyAgICAweDIzLCAweDZlLCAweGZlLCAweGZiLCAw eDkzLCAweGY3LCAweDNhLCAweGJkLCAweDU5LCAweDAxLCAweGZhLCAweDE4LAorKyAgICAweDhl LCAweGU5LCAweDFhLCAweGE5LCAweDc4LCAweGZjLCAweDc5LCAweDBiCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfZW50 cm9weWlucHV0cHJbXSA9IHsKKysgICAgMHhjZiwgMHgyNCwgMHhiOSwgMHhlYiwgMHhiMywgMHhk NCwgMHhjZCwgMHgxNywgMHgzNywgMHgzOCwgMHg3NSwgMHg3OSwKKysgICAgMHgxNSwgMHhjYiwg MHgyZCwgMHg3NSwgMHg1MSwgMHhmMSwgMHhjYywgMHhhYSwgMHgzMiwgMHhhNCwgMHhhNywgMHgz NiwKKysgICAgMHg3YywgMHg1YywgMHhlNCwgMHg0NywgMHhmMSwgMHgzZSwgMHgxZCwgMHhlNQor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMjU2X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg1MiwgMHg0MiwgMHhmYSwg MHhlYiwgMHg4NSwgMHhlMCwgMHgzMCwgMHgyMiwgMHg3OSwgMHgwMCwgMHgxNiwgMHhiMiwKKysg ICAgMHg4OCwgMHgyZiwgMHgxNCwgMHg2YSwgMHhiNywgMHhmYywgMHhiNywgMHg1MywgMHhkYywg MHg0YSwgMHgxMiwgMHhlZiwKKysgICAgMHg1NCwgMHhkNiwgMHgzMywgMHhlOSwgMHgyMCwgMHhk NiwgMHhmZCwgMHg1NgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHhm NCwgMHhmNiwgMHg0OSwgMHhhMSwgMHgyZCwgMHg2NCwgMHgyYiwgMHgzMCwgMHg1OCwgMHhmOCwg MHhiZCwgMHhiOCwKKysgICAgMHg3NSwgMHhlYiwgMHhiYiwgMHg1ZSwgMHgxYywgMHg5YiwgMHg4 MSwgMHg2YSwgMHhkYSwgMHgxNCwgMHg4NiwgMHg2ZSwKKysgICAgMHhkMCwgMHhkYSwgMHgxOCwg MHhiNywgMHg4OCwgMHhmYiwgMHg1OSwgMHhmMworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X3ByX2VudHJvcHlpbnB1dHByMltd ID0geworKyAgICAweDIxLCAweGNkLCAweDZlLCAweDQ2LCAweGFkLCAweDk5LCAweDA3LCAweDE3 LCAweGI0LCAweDNkLCAweDc2LCAweDBhLAorKyAgICAweGZmLCAweDViLCAweDUyLCAweDUwLCAw eDc4LCAweGRmLCAweDFmLCAweDI0LCAweDA2LCAweDBkLCAweDNmLCAweDc0LAorKyAgICAweGE5 LCAweGM5LCAweDM3LCAweGNmLCAweGQ4LCAweDI2LCAweDI1LCAweDkxCisrfTsKKysKKytfX2Zp cHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfcHJfcmV0 dXJuZWRiaXRzW10gPSB7CisrICAgIDB4YTcsIDB4YWYsIDB4MmYsIDB4MjksIDB4ZTAsIDB4M2Es IDB4NzIsIDB4OTUsIDB4OTYsIDB4MWMsIDB4YTksIDB4ZjAsCisrICAgIDB4NGEsIDB4MTcsIDB4 NGQsIDB4NjYsIDB4MDYsIDB4MTAsIDB4YmYsIDB4MzksIDB4ODksIDB4ODgsIDB4YjgsIDB4OTEs CisrICAgIDB4MzcsIDB4MTgsIDB4OTksIDB4Y2YsIDB4OGMsIDB4NTMsIDB4M2IsIDB4N2UKKyt9 OworKworKy8qIEhNQUMgU0hBLTI1NiBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEyNTZfZW50cm9weWlucHV0W10gPSB7CisrICAg IDB4OTYsIDB4YjcsIDB4NTMsIDB4MjIsIDB4MWUsIDB4NTIsIDB4MmEsIDB4OTYsIDB4YjEsIDB4 MTUsIDB4M2MsIDB4MzUsCisrICAgIDB4NWEsIDB4OGIsIDB4ZDMsIDB4NGEsIDB4YTYsIDB4NmMs IDB4ODMsIDB4MGEsIDB4N2QsIDB4YTMsIDB4MjMsIDB4M2QsCisrICAgIDB4NDMsIDB4YTEsIDB4 MDcsIDB4MmMsIDB4MmQsIDB4ZTMsIDB4ODEsIDB4Y2MKKyt9OworKworK19fZmlwc19jb25zdHNl ZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9ub25jZVtdID0geworKyAg ICAweGYxLCAweGFjLCAweDk3LCAweGNiLCAweDVlLCAweDA2LCAweDQ4LCAweGQyLCAweDk0LCAw eGJlLCAweDE1LCAweDJlLAorKyAgICAweGM3LCAweGZjLCAweGMyLCAweDAxCisrfTsKKysKKytf X2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEy NTZfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4OTgsIDB4YzUsIDB4MWUsIDB4 MzUsIDB4NWUsIDB4ODksIDB4MGQsIDB4Y2UsIDB4NjQsIDB4NmQsIDB4MTgsIDB4YTcsCisrICAg IDB4NWEsIDB4YzYsIDB4ZjMsIDB4ZTcsIDB4ZDYsIDB4OWUsIDB4YzAsIDB4ZWEsIDB4YjcsIDB4 M2EsIDB4OGQsIDB4NjUsCisrICAgIDB4YjgsIDB4ZWIsIDB4MTAsIDB4ZDcsIDB4NTcsIDB4MTgs IDB4YTAsIDB4MzIKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHgxYiwgMHgx MCwgMHhhZiwgMHhhYywgMHhkMCwgMHg2NSwgMHg5NSwgMHhhZCwgMHgwNCwgMHhhZCwgMHgwMywg MHgxYywKKysgICAgMHhlMCwgMHg0MCwgMHhkNiwgMHgzZSwgMHgxYywgMHg0NiwgMHg1MywgMHgz OSwgMHg3YywgMHhlMiwgMHhiYywgMHhkYSwKKysgICAgMHg4YywgMHhhMiwgMHgzMywgMHhhNywg MHg5YSwgMHgyNiwgMHhkMywgMHgyNworK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBj b25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysg ICAgMHhiYSwgMHg2MSwgMHgwZSwgMHg1NSwgMHhmZSwgMHgxMSwgMHg4YSwgMHg5ZSwgMHgwZiwg MHg4MCwgMHhkZiwgMHgxZCwKKysgICAgMHgwMywgMHgwYSwgMHhmZSwgMHgxNSwgMHg5NCwgMHgy OCwgMHg0YiwgMHhiYSwgMHhmNCwgMHg5ZiwgMHg1MSwgMHgyNSwKKysgICAgMHg4OCwgMHhlNSwg MHg0ZSwgMHhmYiwgMHhhZiwgMHhjZSwgMHg2OSwgMHg5MAorK307CisrCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMjU2X2VudHJvcHlpbnB1dHJl c2VlZFtdID0geworKyAgICAweDYyLCAweDdmLCAweDFlLCAweDZiLCAweGU4LCAweDhlLCAweGUx LCAweDM1LCAweDdkLCAweDliLCAweDRmLCAweGM3LAorKyAgICAweGVjLCAweGM4LCAweGFjLCAw eGVmLCAweDZiLCAweDEzLCAweDllLCAweDA1LCAweDU2LCAweGMxLCAweDA4LCAweGY5LAorKyAg ICAweDJmLCAweDBmLCAweDI3LCAweDljLCAweGQ0LCAweDE1LCAweGVkLCAweDJkCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEyNTZfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4YzcsIDB4NzYsIDB4NmUs IDB4YTksIDB4ZDIsIDB4YjIsIDB4NzYsIDB4NDAsIDB4ODIsIDB4MjUsIDB4MmMsIDB4YjMsCisr ICAgIDB4NmYsIDB4YWMsIDB4ZTksIDB4NzQsIDB4ZWYsIDB4OGYsIDB4M2MsIDB4OGUsIDB4Y2Qs IDB4ZjEsIDB4YmYsIDB4YjMsCisrICAgIDB4NDksIDB4NzcsIDB4MzQsIDB4ODgsIDB4NTIsIDB4 MzYsIDB4ZTYsIDB4MmUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTI1Nl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4OGQs IDB4YjgsIDB4MGMsIDB4ZDEsIDB4YmYsIDB4NzAsIDB4ZjYsIDB4MTksIDB4YzMsIDB4NDEsIDB4 ODAsIDB4OWYsCisrICAgIDB4ZTEsIDB4YTUsIDB4YTQsIDB4MWYsIDB4MmMsIDB4MjYsIDB4YjEs IDB4ZTUsIDB4ZDgsIDB4ZWIsIDB4YmUsIDB4ZjgsCisrICAgIDB4ZGYsIDB4ODgsIDB4NmEsIDB4 ODksIDB4ZDYsIDB4MDUsIDB4ZDgsIDB4OWQKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0 aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTI1Nl9yZXR1cm5lZGJpdHNbXSA9IHsKKysg ICAgMHg0MywgMHgxMiwgMHgyYSwgMHgyYywgMHg0MCwgMHg1MywgMHgyZSwgMHg3YywgMHg2Niwg MHgzNCwgMHhhYywgMHhjMywKKysgICAgMHg0MywgMHhlMywgMHhlMCwgMHg2YSwgMHhmYywgMHhm YSwgMHhlYSwgMHg4NywgMHgyMSwgMHgxZiwgMHhlMiwgMHgyNiwKKysgICAgMHhjNCwgMHhmOSwg MHgwOSwgMHg5YSwgMHgwZCwgMHg2ZSwgMHg3ZiwgMHhlMAorK307CisrCisrLyogSE1BQyBTSEEt Mzg0IFBSICAqLworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTM4NF9wcl9lbnRyb3B5aW5wdXRbXSA9IHsKKysgICAgMHg2OSwgMHg4MSwgMHg5OCwg MHg4OCwgMHg0NCwgMHhmNSwgMHhkNiwgMHgyZSwgMHgwMCwgMHgwOCwgMHgzYiwgMHhjNSwKKysg ICAgMHhmYiwgMHhkNywgMHg4ZSwgMHg2ZiwgMHgyMywgMHhmOCwgMHg2ZCwgMHgwOSwgMHhkNiwg MHg4NSwgMHg0OSwgMHhkMSwKKysgICAgMHhmOCwgMHg2ZCwgMHhhNCwgMHg1OCwgMHg1NCwgMHhm ZCwgMHg4OCwgMHhhOQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX25vbmNlW10gPSB7CisrICAgIDB4NmUsIDB4MzgsIDB4 ODEsIDB4Y2EsIDB4YjcsIDB4ZTgsIDB4NmUsIDB4NjYsIDB4NDksIDB4OGEsIDB4YjIsIDB4NTks CisrICAgIDB4ZWUsIDB4MTYsIDB4YzksIDB4ZGUKKyt9OworKworK19fZmlwc19jb25zdHNlZwor KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9wcl9wZXJzb25hbGl6 YXRpb25zdHJpbmdbXSA9IHsKKysgICAgMHhmZSwgMHg0YywgMHhkOSwgMHhmNCwgMHg3OCwgMHgz YiwgMHgwOCwgMHg0MSwgMHg4ZCwgMHg4ZiwgMHg1NSwgMHhjNCwKKysgICAgMHg0MywgMHg1Niwg MHhiNiwgMHgxMiwgMHgzNiwgMHg2YiwgMHgzMCwgMHhiNywgMHg1ZSwgMHhlMSwgMHhiOSwgMHg0 NywKKysgICAgMHgwNCwgMHhiMSwgMHg0ZSwgMHhhOSwgMHgwMCwgMHhhMSwgMHg1MiwgMHhhMQor K307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNf c2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dFtdID0geworKyAgICAweDg5LCAweGU5LCAweGNjLCAw eDhmLCAweDI3LCAweDNjLCAweDI2LCAweGQxLCAweDk1LCAweGM4LCAweDdkLCAweDBmLAorKyAg ICAweDViLCAweDFhLCAweGYwLCAweDc4LCAweDM5LCAweDU2LCAweDZmLCAweGE0LCAweDIzLCAw eGU3LCAweGQxLCAweGRhLAorKyAgICAweDdjLCAweDY2LCAweDMzLCAweGEwLCAweDkwLCAweGM5 LCAweDkyLCAweDg4CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgaG1hY19zaGEzODRfcHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAgMHhiZSwg MHgzZCwgMHg3YywgMHgwZCwgMHhjYSwgMHhkYSwgMHg3YywgMHg0OSwgMHhiOCwgMHgxMiwgMHgz NiwgMHhjMCwKKysgICAgMHhkYiwgMHhhZCwgMHgzNSwgMHhhOCwgMHhjNywgMHgwYiwgMHgyYSwg MHgyYywgMHg2OSwgMHg2ZCwgMHgyNSwgMHg1NiwKKysgICAgMHg2MywgMHg4MiwgMHgxMSwgMHgz ZSwgMHhhNywgMHgzMywgMHg3MCwgMHg3MgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9 IHsKKysgICAgMHg4MiwgMHgzZCwgMHhlNiwgMHg1NCwgMHg4MCwgMHg0MiwgMHhmOCwgMHhiYSwg MHg5MCwgMHg0ZiwgMHgwNiwgMHhhNiwKKysgICAgMHhkMiwgMHg3ZiwgMHhiZiwgMHg3OSwgMHg3 YywgMHgxMiwgMHg3ZCwgMHhhNiwgMHhhMiwgMHg2NiwgMHhlOCwgMHhhNiwKKysgICAgMHhjMCwg MHhkNiwgMHg0YSwgMHg1NSwgMHhiZiwgMHhkOCwgMHgwYSwgMHhjNSwgMHhmOCwgMHgwMywgMHg4 OCwgMHhkZCwKKysgICAgMHg4ZSwgMHg4NywgMHhkMSwgMHg1YSwgMHg0OCwgMHgyNiwgMHg3Miwg MHgyYSwgMHg4ZSwgMHhjZiwgMHhlZSwgMHhiYQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2FkZGl0aW9uYWxpbnB1dDJb XSA9IHsKKysgICAgMHg4ZiwgMHhmZiwgMHhkOSwgMHg4NCwgMHhiYiwgMHg4NSwgMHgzYSwgMHg2 NiwgMHhhMSwgMHgyMSwgMHhjZSwgMHhiMiwKKysgICAgMHgzYSwgMHgzYSwgMHgxNywgMHgyMiwg MHgxOSwgMHhhZSwgMHhjNywgMHhiNiwgMHg2MywgMHg4MSwgMHhkNSwgMHhmZiwKKysgICAgMHgw ZCwgMHhjOCwgMHhlMSwgMHhhZiwgMHg1NywgMHhkMiwgMHhjYiwgMHg2MAorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X3ByX2Vu dHJvcHlpbnB1dHByMltdID0geworKyAgICAweGQ3LCAweGZiLCAweGM5LCAweGU4LCAweGUyLCAw eGYyLCAweGFhLCAweDRjLCAweGI4LCAweDUxLCAweDJmLCAweGUxLAorKyAgICAweDIyLCAweGJh LCAweGYzLCAweGRhLCAweDBhLCAweDE5LCAweDc2LCAweDcxLCAweDU3LCAweGIyLCAweDFkLCAw eDk0LAorKyAgICAweDA5LCAweDY5LCAweDZjLCAweGQzLCAweDk3LCAweDUxLCAweDgxLCAweDg3 CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1h Y19zaGEzODRfcHJfcmV0dXJuZWRiaXRzW10gPSB7CisrICAgIDB4ZTYsIDB4MTksIDB4MjgsIDB4 YTgsIDB4MjEsIDB4Y2UsIDB4NWUsIDB4ZGIsIDB4MjQsIDB4NzksIDB4OGMsIDB4NzYsCisrICAg IDB4NWQsIDB4NzMsIDB4YjIsIDB4ZGYsIDB4YWMsIDB4ZWYsIDB4ODUsIDB4YTcsIDB4M2IsIDB4 MTksIDB4MDksIDB4OGIsCisrICAgIDB4N2YsIDB4OTgsIDB4MjgsIDB4YTksIDB4OTMsIDB4ZDgs IDB4N2EsIDB4YWQsIDB4NTUsIDB4OGIsIDB4MjQsIDB4OWQsCisrICAgIDB4ZTYsIDB4OTgsIDB4 ZmUsIDB4NDcsIDB4ZDUsIDB4NDgsIDB4YzEsIDB4MjMsIDB4ZDgsIDB4MWQsIDB4NjIsIDB4NzUK Kyt9OworKworKy8qIEhNQUMgU0hBLTM4NCBObyBQUiAgKi8KKytfX2ZpcHNfY29uc3RzZWcgc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfZW50cm9weWlucHV0W10gPSB7Cisr ICAgIDB4YzMsIDB4NTYsIDB4MmIsIDB4MWQsIDB4YzIsIDB4YmIsIDB4YTgsIDB4ZjAsIDB4YWUs IDB4MWIsIDB4MGQsIDB4ZDMsCisrICAgIDB4NWEsIDB4NmMsIDB4ZGEsIDB4NTcsIDB4OGUsIDB4 YTUsIDB4OGEsIDB4MGQsIDB4NmMsIDB4NGIsIDB4MTgsIDB4YjEsCisrICAgIDB4MDQsIDB4M2Us IDB4YjQsIDB4OTksIDB4MzUsIDB4YzQsIDB4YzAsIDB4NWYKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9ub25jZVtdID0gewor KyAgICAweGM1LCAweDQ5LCAweDFlLCAweDY2LCAweDI3LCAweDkyLCAweGJlLCAweGVjLCAweGI1 LCAweDFlLCAweDRiLCAweGIxLAorKyAgICAweDM4LCAweGUzLCAweGViLCAweDYyCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19z aGEzODRfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7CisrICAgIDB4YmUsIDB4ZTcsIDB4NmIs IDB4NTcsIDB4ZGUsIDB4ODgsIDB4MTEsIDB4OTYsIDB4OWIsIDB4NmUsIDB4ZWEsIDB4ZTUsCisr ICAgIDB4NjMsIDB4ODMsIDB4NGMsIDB4YjYsIDB4OGQsIDB4NjYsIDB4YWEsIDB4MWYsIDB4OGIs IDB4NTQsIDB4ZTcsIDB4NjIsCisrICAgIDB4NmQsIDB4NWEsIDB4ZmMsIDB4YmYsIDB4OTcsIDB4 YmEsIDB4Y2QsIDB4NzcKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXRbXSA9IHsKKysgICAgMHhlNSwg MHgyOCwgMHg1ZiwgMHg0MywgMHhmNSwgMHg4MywgMHg2ZSwgMHgwYSwgMHg4MywgMHg1YywgMHhl MywgMHg4MSwKKysgICAgMHgwMywgMHhmMiwgMHhmOCwgMHg3OCwgMHgwMCwgMHg3YywgMHg5NSwg MHg4NywgMHgxNiwgMHhkNiwgMHg2YywgMHg1OCwKKysgICAgMHgzMywgMHg2YywgMHg1MywgMHgz NSwgMHgwZCwgMHg2NiwgMHhlMywgMHhjZQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsK KysgICAgMHhlMiwgMHgxZiwgMHhmMywgMHhkYSwgMHgwZCwgMHgxOSwgMHg5OSwgMHg4NywgMHhj NCwgMHg5MCwgMHhhMiwgMHgzMSwKKysgICAgMHhjYSwgMHgyYSwgMHg4OSwgMHg1OCwgMHg0Mywg MHg0NCwgMHhiOCwgMHhkZSwgMHhjZiwgMHhhNCwgMHhiZSwgMHgzYiwKKysgICAgMHg1MywgMHgy NiwgMHgyMiwgMHgzMSwgMHg3NiwgMHg0MSwgMHgyMiwgMHhiNSwgMHhhOCwgMHg3MCwgMHgyZiwg MHg0YiwKKysgICAgMHg2NCwgMHg5NSwgMHg0ZCwgMHg0OCwgMHg5NiwgMHgzNSwgMHhlNiwgMHhi ZCwgMHgzYywgMHgzNCwgMHhkYiwgMHgxYgorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhMzg0X2VudHJvcHlpbnB1dHJlc2VlZFtdID0g eworKyAgICAweDc3LCAweDYxLCAweGJhLCAweGJjLCAweGYyLCAweGMxLCAweGYzLCAweDRiLCAw eDg2LCAweDY1LCAweGZkLCAweDQ4LAorKyAgICAweDBlLCAweDNjLCAweDAyLCAweDVlLCAweGEy LCAweDdhLCAweDZiLCAweDdjLCAweGVkLCAweDIxLCAweDVlLCAweGY5LAorKyAgICAweGNkLCAw eGNkLCAweDc3LCAweDA3LCAweDJiLCAweGJlLCAweGM1LCAweDVjCisrfTsKKysKKytfX2ZpcHNf Y29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGEzODRfYWRk aXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4MTgsIDB4MjQsIDB4NWYsIDB4YzYsIDB4 ODQsIDB4ZDEsIDB4NjcsIDB4YzMsIDB4OWEsIDB4MTEsIDB4YTUsIDB4OGMsCisrICAgIDB4MDcs IDB4MzksIDB4MjEsIDB4ODMsIDB4NGQsIDB4MDQsIDB4YzQsIDB4NmEsIDB4MjgsIDB4MTksIDB4 Y2YsIDB4OTIsCisrICAgIDB4MjEsIDB4ZDksIDB4OWUsIDB4NDEsIDB4NzIsIDB4NmMsIDB4OWUs IDB4NjMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hh ciBobWFjX3NoYTM4NF9hZGRpdGlvbmFsaW5wdXQyW10gPSB7CisrICAgIDB4OTYsIDB4NjcsIDB4 NDEsIDB4MjgsIDB4OWIsIDB4YjcsIDB4OTIsIDB4OGQsIDB4NjQsIDB4M2IsIDB4ZTQsIDB4Y2Ys CisrICAgIDB4N2UsIDB4YWEsIDB4MWUsIDB4YjEsIDB4NGIsIDB4MWQsIDB4MDksIDB4NTYsIDB4 NjcsIDB4OWMsIDB4YzYsIDB4NmQsCisrICAgIDB4M2IsIDB4ZTgsIDB4OTEsIDB4OWQsIDB4ZTEs IDB4OGEsIDB4YjcsIDB4MzIKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBobWFjX3NoYTM4NF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHhlMywg MHg1OSwgMHg2MSwgMHgzOCwgMHg5MiwgMHhlYywgMHhlMiwgMHgzYywgMHhmZiwgMHhiNywgMHhk YiwgMHgxOSwKKysgICAgMHgwZiwgMHg1YiwgMHg5MywgMHg2OCwgMHgwZCwgMHhhNCwgMHg5NCwg MHg0MCwgMHg3MiwgMHgwYiwgMHhlMCwgMHhlZCwKKysgICAgMHg0ZCwgMHhjZCwgMHg2OCwgMHhh MCwgMHgxZSwgMHhmZSwgMHg2NywgMHhiMiwgMHhmYSwgMHgyMSwgMHg1NiwgMHg3NCwKKysgICAg MHhhNCwgMHhhZCwgMHhjZiwgMHhiNywgMHg2MCwgMHg2NiwgMHgyZSwgMHg0MCwgMHhkZSwgMHg4 MiwgMHhjYSwgMHhmYgorK307CisrCisrLyogSE1BQyBTSEEtNTEyIFBSICAqLworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9lbnRyb3B5 aW5wdXRbXSA9IHsKKysgICAgMHhhYSwgMHg5ZSwgMHg0NSwgMHg2NywgMHgwZSwgMHgwMCwgMHgy YSwgMHg2NywgMHg5OCwgMHhkNiwgMHhkYSwgMHgwYiwKKysgICAgMHgwZiwgMHgxNywgMHg3ZSwg MHhhYywgMHhmZCwgMHgyNywgMHhjNCwgMHhjYSwgMHg4NCwgMHhkZiwgMHhkZSwgMHhiYSwKKysg ICAgMHg4NSwgMHhkOSwgMHhiZSwgMHg4ZiwgMHhmMywgMHhmZiwgMHg5MSwgMHg0ZAorK307Cisr CisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEy X3ByX25vbmNlW10gPSB7CisrICAgIDB4OGMsIDB4NDksIDB4MmYsIDB4NTgsIDB4MWUsIDB4N2Es IDB4ZGEsIDB4NGIsIDB4N2UsIDB4OGEsIDB4MzAsIDB4N2IsCisrICAgIDB4ODYsIDB4ZWEsIDB4 YWYsIDB4YTIKKyt9OworKworK19fZmlwc19jb25zdHNlZworKyAgICBzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBobWFjX3NoYTUxMl9wcl9wZXJzb25hbGl6YXRpb25zdHJpbmdbXSA9IHsKKysg ICAgMHg3MSwgMHhlMSwgMHhiYiwgMHhhZCwgMHhhNywgMHg0YiwgMHgyZSwgMHgzMSwgMHgzYiwg MHgwYiwgMHhlYywgMHgyNCwKKysgICAgMHg5OSwgMHgzOCwgMHhiYywgMHhhYSwgMHgwNSwgMHg0 YywgMHg0NiwgMHg0NCwgMHhmYSwgMHhhZCwgMHg4ZSwgMHgwMiwKKysgICAgMHhjMSwgMHg3ZSwg MHhhZCwgMHhlYywgMHg1NCwgMHhhNiwgMHhkMCwgMHhhZAorK307CisrCisrX19maXBzX2NvbnN0 c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxp bnB1dFtdID0geworKyAgICAweDNkLCAweDZlLCAweGE2LCAweGE4LCAweDI5LCAweDJhLCAweGIy LCAweGY1LCAweDk4LCAweDQyLCAweGU0LCAweDkyLAorKyAgICAweDc4LCAweDIyLCAweDY3LCAw eGZkLCAweDFiLCAweDE1LCAweDFlLCAweDI5LCAweGFhLCAweDcxLCAweDNjLCAweDNjLAorKyAg ICAweGU3LCAweDA1LCAweDIwLCAweGE5LCAweDI5LCAweGM2LCAweDc1LCAweDcxCisrfTsKKysK KytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJf cHJfZW50cm9weWlucHV0cHJbXSA9IHsKKysgICAgMHhhYiwgMHhiOSwgMHgxNiwgMHhkOCwgMHg1 NSwgMHgzNSwgMHg1NCwgMHhiNywgMHg5NywgMHgzZiwgMHg5NCwgMHhiYywKKysgICAgMHgyZiwg MHg3YywgMHg3MCwgMHhjNywgMHhkMCwgMHhlZCwgMHhiNywgMHg0YiwgMHhmNywgMHhmNiwgMHg2 YywgMHgwMywKKysgICAgMHgwYywgMHhiMCwgMHgwMywgMHhkOCwgMHhiYiwgMHg3MSwgMHhkOSwg MHgxMAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGhtYWNfc2hhNTEyX3ByX2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHg4ZSwgMHhkMywg MHhmZCwgMHg1MiwgMHg5ZSwgMHg4MywgMHgwOCwgMHg0OSwgMHgxOCwgMHg2ZSwgMHgyMywgMHg1 NiwKKysgICAgMHg1YywgMHg0NSwgMHg5MywgMHgzNCwgMHgwNSwgMHhlMiwgMHg5OCwgMHg4Ziwg MHgwYywgMHhkNCwgMHgzMiwgMHgwYywKKysgICAgMHhmZCwgMHhkYSwgMHg1ZiwgMHg5MiwgMHgz YSwgMHg4YywgMHg4MSwgMHhiZCwgMHhmNiwgMHg2YywgMHg1NSwgMHhmZCwKKysgICAgMHhiOCwg MHgyMCwgMHhjZSwgMHg4ZCwgMHg5NywgMHgyNywgMHhlOCwgMHhlOCwgMHhlMCwgMHhiMywgMHg4 NSwgMHg1MCwKKysgICAgMHhhMiwgMHhjMiwgMHhiMiwgMHg5NSwgMHgxZCwgMHg0OCwgMHhkMywg MHg3YiwgMHg0YiwgMHg3OCwgMHgxMywgMHgzNSwKKysgICAgMHgwNSwgMHgxNywgMHhiZSwgMHgw ZAorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGht YWNfc2hhNTEyX3ByX2FkZGl0aW9uYWxpbnB1dDJbXSA9IHsKKysgICAgMHhjMywgMHhmYywgMHg5 NSwgMHhhYSwgMHg2OSwgMHgwNiwgMHhhZSwgMHg1OSwgMHg0MSwgMHhjZSwgMHgyNiwgMHgwOCwK KysgICAgMHgyOSwgMHg2ZCwgMHg0NSwgMHhkYSwgMHhlOCwgMHhiMywgMHg2YywgMHg5NSwgMHg2 MCwgMHgwZiwgMHg3MCwgMHgyYywKKysgICAgMHgxMCwgMHhiYSwgMHgzOCwgMHg4YywgMHhjZiwg MHgyOSwgMHg5OSwgMHhhYQorK307CisrCisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1 bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX3ByX2VudHJvcHlpbnB1dHByMltdID0geworKyAgICAw eDNiLCAweDlhLCAweDI1LCAweGNlLCAweGQ3LCAweGY5LCAweDVjLCAweGQxLCAweDNhLCAweDNl LCAweGFhLCAweDcxLAorKyAgICAweDE0LCAweDNlLCAweDE5LCAweGU4LCAweGNlLCAweGU2LCAw eGZlLCAweDUxLCAweDg0LCAweGU5LCAweDFiLCAweGZlLAorKyAgICAweDNmLCAweGE3LCAweGYy LCAweGZkLCAweDc2LCAweDVmLCAweDZhLCAweGU3CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcHJfcmV0dXJuZWRiaXRzW10g PSB7CisrICAgIDB4YjcsIDB4ODIsIDB4YTksIDB4NTcsIDB4ODEsIDB4NjcsIDB4NTMsIDB4YjUs IDB4YTEsIDB4ZTksIDB4M2QsIDB4MzUsCisrICAgIDB4ZjksIDB4ZTQsIDB4OTcsIDB4YmUsIDB4 YTYsIDB4Y2EsIDB4ZjEsIDB4MDEsIDB4MTMsIDB4MDksIDB4ZTcsIDB4MjEsCisrICAgIDB4YzAs IDB4ZWQsIDB4OTMsIDB4NWQsIDB4NGIsIDB4ZjQsIDB4ZWIsIDB4OGQsIDB4NTMsIDB4MjUsIDB4 OGEsIDB4YzQsCisrICAgIDB4YjEsIDB4NmYsIDB4NmUsIDB4MzcsIDB4Y2QsIDB4MmUsIDB4YWMs IDB4MzksIDB4YjIsIDB4YjYsIDB4OTksIDB4YTMsCisrICAgIDB4ODIsIDB4MDAsIDB4YjAsIDB4 MjEsIDB4ZjAsIDB4YzcsIDB4MmYsIDB4NGMsIDB4NzMsIDB4OTIsIDB4ZmQsIDB4MDAsCisrICAg IDB4YjYsIDB4YWYsIDB4YmMsIDB4ZDMKKyt9OworKworKy8qIEhNQUMgU0hBLTUxMiBObyBQUiAg Ki8KKytfX2ZpcHNfY29uc3RzZWcgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1 MTJfZW50cm9weWlucHV0W10gPSB7CisrICAgIDB4NmUsIDB4ODUsIDB4ZTYsIDB4MjUsIDB4OTYs IDB4MjksIDB4YTcsIDB4NTIsIDB4NWIsIDB4NjAsIDB4YmEsIDB4YWEsCisrICAgIDB4ZGUsIDB4 ZGIsIDB4MzYsIDB4MGEsIDB4NTEsIDB4OWEsIDB4MTUsIDB4YWUsIDB4NmUsIDB4MTgsIDB4ZDMs IDB4ZmUsCisrICAgIDB4MzksIDB4YjksIDB4NGEsIDB4OTYsIDB4ZjgsIDB4NzcsIDB4Y2IsIDB4 OTUKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBo bWFjX3NoYTUxMl9ub25jZVtdID0geworKyAgICAweGUwLCAweGE2LCAweDVkLCAweDA4LCAweGMz LCAweDdjLCAweGFlLCAweDI1LCAweDJlLCAweDgwLCAweGQxLCAweDNlLAorKyAgICAweGQ5LCAw eGFmLCAweDQzLCAweDNjCisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNv bnN0IHVuc2lnbmVkIGNoYXIgaG1hY19zaGE1MTJfcGVyc29uYWxpemF0aW9uc3RyaW5nW10gPSB7 CisrICAgIDB4NTMsIDB4OTksIDB4NTIsIDB4NWYsIDB4MTEsIDB4YTksIDB4NjQsIDB4NjYsIDB4 MjAsIDB4NWUsIDB4MWIsIDB4NWYsCisrICAgIDB4NDIsIDB4YjMsIDB4ZjQsIDB4ZGEsIDB4ZWQs IDB4YmIsIDB4NjMsIDB4YzEsIDB4MjMsIDB4YWYsIDB4ZDAsIDB4MDEsCisrICAgIDB4OTAsIDB4 M2IsIDB4ZDAsIDB4NzgsIDB4ZTQsIDB4MGIsIDB4YTcsIDB4MjAKKyt9OworKworK19fZmlwc19j b25zdHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFs aW5wdXRbXSA9IHsKKysgICAgMHg4NSwgMHg5MCwgMHg4MCwgMHhkMywgMHg5OCwgMHhmMSwgMHg1 MywgMHg2ZCwgMHg2OCwgMHgxNSwgMHg4ZiwgMHhlNSwKKysgICAgMHg2MCwgMHgzZiwgMHgxNywg MHgyOSwgMHg1NSwgMHg4ZCwgMHgzMywgMHhiMSwgMHg0NSwgMHg2NCwgMHg2NCwgMHg4ZCwKKysg ICAgMHg1MCwgMHgyMSwgMHg4OSwgMHhhZSwgMHhmNiwgMHhmZCwgMHgzMiwgMHg3MworK307Cisr CisrX19maXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEy X2ludF9yZXR1cm5lZGJpdHNbXSA9IHsKKysgICAgMHgyOCwgMHg1NiwgMHgzMCwgMHg2ZiwgMHhm NCwgMHhhMSwgMHg0OCwgMHhlMCwgMHhjOSwgMHhmNSwgMHg3NSwgMHg5MCwKKysgICAgMHhjYywg MHhmYiwgMHhkZiwgMHhkZiwgMHg3MSwgMHgzZCwgMHgwYSwgMHg5YSwgMHgwMywgMHg2NSwgMHgz YiwgMHgxOCwKKysgICAgMHg2MSwgMHhlMywgMHhkMSwgMHhkYSwgMHhjYywgMHg0YSwgMHhmZSwg MHg1NSwgMHgzOCwgMHhmOCwgMHgyMSwgMHg2YiwKKysgICAgMHhmYSwgMHgxOCwgMHgwMSwgMHg0 MiwgMHgzOSwgMHgyZiwgMHg5OSwgMHg1MywgMHgzOCwgMHgxNSwgMHg4MiwgMHgzNCwKKysgICAg MHhjNSwgMHg5MywgMHg5MiwgMHhiYywgMHg0ZCwgMHg3NSwgMHgxYSwgMHg1ZiwgMHgyMSwgMHgy NywgMHhjYywgMHhhMSwKKysgICAgMHhiMSwgMHg1NywgMHg2OSwgMHhlOAorK307CisrCisrX19m aXBzX2NvbnN0c2VnIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGhtYWNfc2hhNTEyX2VudHJv cHlpbnB1dHJlc2VlZFtdID0geworKyAgICAweDhjLCAweDUyLCAweDdlLCAweDc3LCAweDcyLCAw eDNmLCAweGEzLCAweDA0LCAweDk3LCAweDEwLCAweDliLCAweDQxLAorKyAgICAweGJkLCAweGU4 LCAweGZmLCAweDg5LCAweGVkLCAweDgwLCAweGUzLCAweGJkLCAweGFhLCAweDEyLCAweDJkLCAw eGNhLAorKyAgICAweDc1LCAweDgyLCAweDM2LCAweDc3LCAweDg4LCAweGNkLCAweGE2LCAweDcz CisrfTsKKysKKytfX2ZpcHNfY29uc3RzZWcKKysgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgaG1hY19zaGE1MTJfYWRkaXRpb25hbGlucHV0cmVzZWVkW10gPSB7CisrICAgIDB4N2UsIDB4 MzIsIDB4ZTMsIDB4NjksIDB4NjksIDB4MDcsIDB4MzQsIDB4YTIsIDB4MTYsIDB4YTIsIDB4NWQs IDB4MWEsCisrICAgIDB4MTAsIDB4OTEsIDB4ZDMsIDB4ZTIsIDB4MjEsIDB4YTIsIDB4YTMsIDB4 ZGQsIDB4Y2QsIDB4MGMsIDB4MDksIDB4ODYsCisrICAgIDB4MTEsIDB4ZTEsIDB4NTAsIDB4ZmYs IDB4NWMsIDB4YjcsIDB4ZWIsIDB4NWMKKyt9OworKworK19fZmlwc19jb25zdHNlZyBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9hZGRpdGlvbmFsaW5wdXQyW10gPSB7Cisr ICAgIDB4N2YsIDB4NzgsIDB4NjYsIDB4ZDgsIDB4ZmIsIDB4NjcsIDB4Y2YsIDB4OGQsIDB4OGMs IDB4MDgsIDB4MzAsIDB4YTUsCisrICAgIDB4ZjgsIDB4N2QsIDB4Y2YsIDB4NDQsIDB4NTksIDB4 Y2UsIDB4ZjgsIDB4ZGYsIDB4NTgsIDB4ZDMsIDB4NjAsIDB4Y2IsCisrICAgIDB4YTgsIDB4NjAs IDB4YjksIDB4MDcsIDB4YzQsIDB4YjEsIDB4OTUsIDB4NDgKKyt9OworKworK19fZmlwc19jb25z dHNlZyBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBobWFjX3NoYTUxMl9yZXR1cm5lZGJpdHNb XSA9IHsKKysgICAgMHhkZiwgMHhhNywgMHgzNiwgMHhkNCwgMHhkYywgMHg1ZCwgMHg0ZCwgMHgz MSwgMHhhZCwgMHg2OSwgMHg0NiwgMHg5ZiwKKysgICAgMHhmMSwgMHg3YywgMHhkNywgMHgzYiwg MHg0ZiwgMHg1NSwgMHhmMiwgMHhkNywgMHhiOSwgMHg5ZCwgMHhhZCwgMHg3YSwKKysgICAgMHg3 OSwgMHgwOCwgMHg1OSwgMHhhNSwgMHhkYywgMHg3NCwgMHhmNSwgMHg5YiwgMHg3MywgMHhkMiwg MHgxMywgMHgyNSwKKysgICAgMHgwYiwgMHg4MSwgMHgwOCwgMHgwOCwgMHgyNSwgMHhmYiwgMHgz OSwgMHhmMiwgMHhmMCwgMHhhMywgMHhhNCwgMHg4ZCwKKysgICAgMHhlZiwgMHgwNSwgMHg5ZSwg MHhiOCwgMHhjNywgMHg1MiwgMHhlNCwgMHgwZSwgMHg0MiwgMHhhYSwgMHg3YywgMHg3OSwKKysg ICAgMHhjMiwgMHhkNiwgMHhmZCwgMHhhNQorK307CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9j cnlwdG8vZmlwcy9maXBzX2RzYV9zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRv L2ZpcHMvZmlwc19kc2Ffc2VsZnRlc3QuYworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBz L2ZpcHNfZHNhX3NlbGZ0ZXN0LmMuZmlwcwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgyODMyMTE1NyAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfZHNhX3NlbGZ0ZXN0LmMJ MjAxNi0wNS0wMyAxNjo1Nzo1OC44MjgzMjExNTcgKzAyMDAKK0BAIC0wLDAgKzEsMTkyIEBACisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVj 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 IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNs dWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVk ZSA8b3BlbnNzbC9ldnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorKyNpbmNsdWRlICJm aXBzX2xvY2wuaCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgZHNhX3Rlc3RfMjA0OF9wW10gPSB7CisrICAgIDB4YTgsIDB4NTMsIDB4Nzgs IDB4ZDgsIDB4ZmQsIDB4M2YsIDB4OGQsIDB4NzIsIDB4ZWMsIDB4NzQsIDB4MTgsIDB4MDgsCisr ICAgIDB4MGQsIDB4YTIsIDB4MTMsIDB4MTcsIDB4ZTQsIDB4M2UsIDB4YzQsIDB4YjYsIDB4MmIs IDB4YTgsIDB4YzgsIDB4NjIsCisrICAgIDB4M2IsIDB4N2UsIDB4NGQsIDB4MDQsIDB4NDQsIDB4 MWQsIDB4ZDEsIDB4YTAsIDB4NjUsIDB4ODYsIDB4NjIsIDB4NTksCisrICAgIDB4NjQsIDB4OTMs IDB4Y2EsIDB4OGUsIDB4OWUsIDB4OGYsIDB4YmIsIDB4N2UsIDB4MzQsIDB4YWEsIDB4ZGQsIDB4 YjYsCisrICAgIDB4MmUsIDB4NWQsIDB4NjcsIDB4YjYsIDB4ZDAsIDB4OWEsIDB4NmUsIDB4NjEs IDB4YjcsIDB4NjksIDB4ZTcsIDB4YzMsCisrICAgIDB4NTIsIDB4YWEsIDB4MmIsIDB4MTAsIDB4 ZTIsIDB4MGMsIDB4YTAsIDB4NjMsIDB4NjksIDB4NjMsIDB4YjUsIDB4NTIsCisrICAgIDB4M2Us IDB4ODYsIDB4NDcsIDB4MGQsIDB4ZWMsIDB4YmIsIDB4ZWQsIDB4YTAsIDB4MjcsIDB4ZTcsIDB4 OTcsIDB4ZTcsCisrICAgIDB4YjYsIDB4NzYsIDB4MzUsIDB4ZDQsIDB4ZDQsIDB4OWMsIDB4MzAs IDB4NzAsIDB4MGUsIDB4NzQsIDB4YWYsIDB4OGEsCisrICAgIDB4MGYsIDB4ZjEsIDB4NTYsIDB4 YTgsIDB4MDEsIDB4YWYsIDB4NTcsIDB4YTIsIDB4NmUsIDB4NzAsIDB4NzgsIDB4ZjEsCisrICAg IDB4ZDgsIDB4MmYsIDB4NzQsIDB4OTAsIDB4OGUsIDB4Y2IsIDB4NmQsIDB4MDcsIDB4ZTcsIDB4 MGIsIDB4MzUsIDB4MDMsCisrICAgIDB4ZWUsIDB4ZDksIDB4NGYsIDB4YTMsIDB4MmMsIDB4ZjEs IDB4N2EsIDB4N2YsIDB4YzMsIDB4ZDYsIDB4Y2YsIDB4NDAsCisrICAgIDB4ZGMsIDB4N2IsIDB4 MDAsIDB4ODMsIDB4MGUsIDB4NmEsIDB4MjUsIDB4NjYsIDB4ZGMsIDB4MDcsIDB4M2UsIDB4MzQs CisrICAgIDB4MzMsIDB4MTIsIDB4NTEsIDB4N2MsIDB4NmEsIDB4YTUsIDB4MTUsIDB4MmIsIDB4 NGIsIDB4ZmUsIDB4Y2QsIDB4MmUsCisrICAgIDB4NTUsIDB4MWYsIDB4ZWUsIDB4MzQsIDB4NjMs IDB4MTgsIDB4YTEsIDB4NTMsIDB4NDIsIDB4M2MsIDB4OTksIDB4NmIsCisrICAgIDB4MGQsIDB4 NWQsIDB4Y2IsIDB4OTEsIDB4MDIsIDB4YWUsIDB4ZGQsIDB4MzgsIDB4NzksIDB4ODYsIDB4MTYs IDB4ZjEsCisrICAgIDB4ZjEsIDB4ZTAsIDB4ZDYsIDB4YzQsIDB4MDMsIDB4NTIsIDB4NWIsIDB4 MWYsIDB4OWIsIDB4M2QsIDB4NGQsIDB4YzcsCisrICAgIDB4NjYsIDB4ZGUsIDB4MmQsIDB4ZmMs IDB4NGEsIDB4NTYsIDB4ZDcsIDB4YjgsIDB4YmEsIDB4NTksIDB4NjMsIDB4ZDYsCisrICAgIDB4 MGYsIDB4M2UsIDB4MTYsIDB4MzEsIDB4ODgsIDB4NzAsIDB4YWQsIDB4NDMsIDB4NjksIDB4NTIs IDB4ZTUsIDB4NTcsCisrICAgIDB4NjUsIDB4MzcsIDB4NGUsIDB4YWIsIDB4ODUsIDB4ZTgsIDB4 ZWMsIDB4MTcsIDB4ZDYsIDB4YjksIDB4YTQsIDB4NTQsCisrICAgIDB4N2IsIDB4OWIsIDB4NWYs IDB4MjcsIDB4NTIsIDB4ZjMsIDB4MTAsIDB4NWIsIDB4ZTgsIDB4MDksIDB4YjIsIDB4M2EsCisr ICAgIDB4MmMsIDB4OGQsIDB4NzQsIDB4NjksIDB4ZGIsIDB4MDIsIDB4ZTIsIDB4NGQsIDB4NTks IDB4MjMsIDB4OTQsIDB4YTcsCisrICAgIDB4ZGIsIDB4YTAsIDB4NjksIDB4ZTkKKyt9OworKwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcVtdID0geworKyAgICAw eGQyLCAweDc3LCAweDA0LCAweDRlLCAweDUwLCAweGY1LCAweGE0LCAweGUzLCAweGY1LCAweDEw LCAweGE1LCAweDBhLAorKyAgICAweDBiLCAweDg0LCAweGZkLCAweGZmLCAweGJjLCAweGEwLCAw eDQ3LCAweGVkLCAweDI3LCAweDYwLCAweDIwLCAweDU2LAorKyAgICAweDc0LCAweDQxLCAweGEw LCAweGE1CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkc2FfdGVzdF8yMDQ4 X2dbXSA9IHsKKysgICAgMHgxMywgMHhkNywgMHg1NCwgMHhlMiwgMHgxZiwgMHhkMiwgMHg0MSwg MHg2NSwgMHg1ZCwgMHhhOCwgMHg5MSwgMHhjNSwKKysgICAgMHgyMiwgMHhhNiwgMHg1YSwgMHg3 MiwgMHhhOCwgMHg5YiwgMHhkYywgMHg2NCwgMHhlYywgMHg5YiwgMHg1NCwgMHhhOCwKKysgICAg MHgyMSwgMHhlZCwgMHg0YSwgMHg4OSwgMHg4YiwgMHg0OSwgMHgwZSwgMHgwYywgMHg0ZiwgMHhj YiwgMHg3MiwgMHgxOSwKKysgICAgMHgyYSwgMHg0YSwgMHgyMCwgMHhmNSwgMHg0MSwgMHhmMywg MHhmMiwgMHg5MiwgMHg1MywgMHg5OSwgMHhmMCwgMHhiYSwKKysgICAgMHhlYywgMHhmOSwgMHgy OSwgMHhhYSwgMHhmYiwgMHhmNywgMHg5ZCwgMHhmZSwgMHg0MywgMHgzMiwgMHgzOSwgMHgzYiwK KysgICAgMHgzMiwgMHhjZCwgMHgyZSwgMHgyZiwgMHhjZiwgMHgyNywgMHgyZiwgMHgzMiwgMHhh NiwgMHgyNywgMHg0MywgMHg0YSwKKysgICAgMHgwZCwgMHhmMiwgMHg0MiwgMHhiNywgMHg1Yiwg MHg0MSwgMHg0ZCwgMHhmMywgMHg3MiwgMHgxMiwgMHgxZSwgMHg1MywKKysgICAgMHhhNSwgMHg1 MywgMHhmMiwgMHgyMiwgMHhmOCwgMHgzNiwgMHhiMCwgMHgwMCwgMHhmMCwgMHgxNiwgMHg0OCwg MHg1YiwKKysgICAgMHg2YiwgMHhkMCwgMHg4OSwgMHg4NCwgMHg1MSwgMHg4MCwgMHgxZCwgMHhj ZCwgMHg4ZCwgMHhlNiwgMHg0YywgMHhkNSwKKysgICAgMHgzNiwgMHg1NiwgMHg5NiwgMHhmZiwg MHhjNSwgMHgzMiwgMHhkNSwgMHgyOCwgMHhjNSwgMHgwNiwgMHg2MiwgMHgwYSwKKysgICAgMHg5 NCwgMHgyYSwgMHgwMywgMHgwNSwgMHgwNCwgMHg2ZCwgMHg4ZiwgMHgxOCwgMHg3NiwgMHgzNCwg MHgxZiwgMHgxZSwKKysgICAgMHg1NywgMHgwYiwgMHhjMywgMHg5NywgMHg0YiwgMHhhNiwgMHhi OSwgMHhhNCwgMHgzOCwgMHhlOSwgMHg3MCwgMHgyMywKKysgICAgMHgwMiwgMHhhMiwgMHhlNiwg MHhlNiwgMHg3YiwgMHhmZCwgMHgwNiwgMHhkMywgMHgyYiwgMHhjNiwgMHg3OSwgMHg5NiwKKysg ICAgMHgyMiwgMHg3MSwgMHhkNywgMHhiNCwgMHgwYywgMHhkNywgMHgyZiwgMHgzOCwgMHg2ZSwg MHg2NCwgMHhlMCwgMHhkNywKKysgICAgMHhlZiwgMHg4NiwgMHhjYSwgMHg4YywgMHhhNSwgMHhk MSwgMHg0MiwgMHgyOCwgMHhkYywgMHgyYSwgMHg0ZiwgMHgxNiwKKysgICAgMHhlMywgMHgxOCwg MHg5OCwgMHg4NiwgMHhiNSwgMHg5OSwgMHgwNiwgMHg3NCwgMHhmNCwgMHgyMCwgMHgwZiwgMHgz YSwKKysgICAgMHg0YywgMHhmNiwgMHg1YSwgMHgzZiwgMHgwZCwgMHhkYiwgMHhhMSwgMHhmYSwg MHg2NywgMHgyZCwgMHhmZiwgMHgyZiwKKysgICAgMHg1ZSwgMHgxNCwgMHgzZCwgMHgxMCwgMHhl NCwgMHhlOSwgMHg3YSwgMHhlOCwgMHg0ZiwgMHg2ZCwgMHhhMCwgMHg5NSwKKysgICAgMHgzNSwg MHhkNSwgMHhiOSwgMHhkZiwgMHgyNSwgMHg5MSwgMHg4MSwgMHhhNywgMHg5YiwgMHg2MywgMHhi MCwgMHg2OSwKKysgICAgMHhlOSwgMHg0OSwgMHg5NywgMHgyYiwgMHgwMiwgMHhiYSwgMHgzNiwg MHhiMywgMHg1OCwgMHg2YSwgMHhhYiwgMHg3ZSwKKysgICAgMHg0NSwgMHhmMywgMHgyMiwgMHhm OCwgMHgyZSwgMHg0ZSwgMHg4NSwgMHhjYSwgMHgzYSwgMHhiOCwgMHg1NSwgMHg5MSwKKysgICAg MHhiMywgMHhjMiwgMHhhOSwgMHg2NgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo YXIgZHNhX3Rlc3RfMjA0OF9wdWJfa2V5W10gPSB7CisrICAgIDB4MjQsIDB4NTIsIDB4ZjMsIDB4 Y2MsIDB4YmUsIDB4OWUsIDB4ZDUsIDB4Y2EsIDB4N2QsIDB4YzcsIDB4NGMsIDB4NjAsCisrICAg IDB4MmIsIDB4OTksIDB4MjIsIDB4NmUsIDB4OGYsIDB4MmYsIDB4YWIsIDB4MzgsIDB4ZTcsIDB4 ZDcsIDB4ZGQsIDB4ZmIsCisrICAgIDB4NzUsIDB4NTMsIDB4OWIsIDB4MTcsIDB4MTUsIDB4NWUs IDB4OWYsIDB4Y2YsIDB4ZDEsIDB4YWIsIDB4YTUsIDB4NjQsCisrICAgIDB4ZWIsIDB4ODUsIDB4 MzUsIDB4ZDgsIDB4MTIsIDB4YzksIDB4YzIsIDB4ZGMsIDB4ZjksIDB4NzIsIDB4ODQsIDB4NDQs CisrICAgIDB4MWIsIDB4YzQsIDB4ODIsIDB4MjQsIDB4MzYsIDB4MjQsIDB4YzcsIDB4ZjQsIDB4 NTcsIDB4NTgsIDB4MGMsIDB4MWMsCisrICAgIDB4MzgsIDB4YTUsIDB4N2MsIDB4NDYsIDB4YzQs IDB4NTcsIDB4MzksIDB4MjQsIDB4NzAsIDB4ZWQsIDB4YjUsIDB4MmMsCisrICAgIDB4YjUsIDB4 YTYsIDB4ZTAsIDB4M2YsIDB4ZTYsIDB4MjgsIDB4N2IsIDB4YjYsIDB4ZjQsIDB4OWEsIDB4NDIs IDB4YTIsCisrICAgIDB4MDYsIDB4NWEsIDB4MDUsIDB4NGYsIDB4MDMsIDB4MDgsIDB4MzksIDB4 ZGYsIDB4MWYsIDB4ZDMsIDB4MTQsIDB4OWMsCisrICAgIDB4NGMsIDB4YTAsIDB4NTMsIDB4MWQs IDB4ZDgsIDB4Y2EsIDB4OGEsIDB4YWEsIDB4OWMsIDB4YzcsIDB4MzMsIDB4NzEsCisrICAgIDB4 OTMsIDB4MzgsIDB4NzMsIDB4NDgsIDB4MzMsIDB4NjEsIDB4MTgsIDB4MjIsIDB4NDUsIDB4NDUs IDB4ZTgsIDB4OGMsCisrICAgIDB4ODAsIDB4ZmYsIDB4ZDgsIDB4NzYsIDB4NWQsIDB4NzQsIDB4 MzYsIDB4MDMsIDB4MzMsIDB4Y2MsIDB4YWIsIDB4OTksCisrICAgIDB4NzIsIDB4NzcsIDB4OWIs IDB4NjUsIDB4MjUsIDB4YTYsIDB4NWIsIDB4ZGQsIDB4MGQsIDB4MTAsIDB4YzYsIDB4NzUsCisr ICAgIDB4YzEsIDB4MDksIDB4YmIsIDB4ZDMsIDB4ZTUsIDB4YmUsIDB4NGQsIDB4NzIsIDB4ZWYs IDB4NmUsIDB4YmEsIDB4NmUsCisrICAgIDB4NDMsIDB4OGQsIDB4NTIsIDB4MjYsIDB4MjMsIDB4 N2QsIDB4YjgsIDB4ODgsIDB4MzcsIDB4OWMsIDB4NWYsIDB4Y2MsCisrICAgIDB4NDcsIDB4YTMs IDB4ODQsIDB4N2YsIDB4ZjYsIDB4MzcsIDB4MTEsIDB4YmEsIDB4ZWQsIDB4NmQsIDB4MDMsIDB4 YWYsCisrICAgIDB4ZTgsIDB4MWUsIDB4NjksIDB4NGEsIDB4NDEsIDB4M2IsIDB4NjgsIDB4MGIs IDB4ZDMsIDB4OGEsIDB4YjQsIDB4OTAsCisrICAgIDB4M2YsIDB4ODMsIDB4NzAsIDB4YTcsIDB4 MDcsIDB4ZWYsIDB4NTUsIDB4MWQsIDB4NDksIDB4NDEsIDB4MDIsIDB4NmQsCisrICAgIDB4OTUs IDB4NzksIDB4ZDYsIDB4OTEsIDB4ZGUsIDB4OGUsIDB4ZGEsIDB4YTEsIDB4NjEsIDB4MDUsIDB4 ZWIsIDB4OWQsCisrICAgIDB4YmEsIDB4M2MsIDB4MmYsIDB4NGMsIDB4MWIsIDB4ZWMsIDB4NTAs IDB4ODIsIDB4NzUsIDB4YWEsIDB4MDIsIDB4MDcsCisrICAgIDB4ZTIsIDB4NTEsIDB4YjUsIDB4 ZWMsIDB4Y2IsIDB4MjgsIDB4NmEsIDB4NGIsIDB4MDEsIDB4ZDQsIDB4NDksIDB4ZDMsCisrICAg IDB4MGEsIDB4Y2IsIDB4NjcsIDB4MzcsIDB4MTcsIDB4YTAsIDB4ZDIsIDB4ZmIsIDB4M2IsIDB4 NTAsIDB4YzgsIDB4OTMsCisrICAgIDB4ZjcsIDB4ZGEsIDB4YjEsIDB4NGYKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRzYV90ZXN0XzIwNDhfcHJpdl9rZXlbXSA9IHsKKysg ICAgMHgwYywgMHg0YiwgMHgzMCwgMHg4OSwgMHhkMSwgMHhiOCwgMHg2MiwgMHhjYiwgMHgzYywg MHg0MywgMHg2NCwgMHg5MSwKKysgICAgMHhmMCwgMHg5MSwgMHg1NCwgMHg3MCwgMHhjNSwgMHgy NywgMHg5NiwgMHhlMywgMHhhYywgMHhiZSwgMHhlOCwgMHgwMCwKKysgICAgMHhlYywgMHg1NSwg MHhmNiwgMHhjYworK307CisrCisrc3RhdGljIGludCBjb3JydXB0X2RzYTsKKysKKyt2b2lkIEZJ UFNfY29ycnVwdF9kc2EoKQorK3sKKysgICAgY29ycnVwdF9kc2EgPSAxOworK30KKysKKytpbnQg RklQU19zZWxmdGVzdF9kc2EoKQorK3sKKysgICAgRFNBICpkc2EgPSBOVUxMOworKyAgICBFVlBf UEtFWSAqcGsgPSBOVUxMOworKyAgICBpbnQgcmV0ID0gMDsKKysKKysgICAgZHNhID0gRFNBX25l dygpOworKworKyAgICBpZiAoZHNhID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysg ICAgZmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwLCBkc2FfdGVzdF8yMDQ4KTsKKysgICAg Zmlwc19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBxLCBkc2FfdGVzdF8yMDQ4KTsKKysgICAgZmlw c19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBnLCBkc2FfdGVzdF8yMDQ4KTsKKysgICAgZmlwc19s b2FkX2tleV9jb21wb25lbnQoZHNhLCBwdWJfa2V5LCBkc2FfdGVzdF8yMDQ4KTsKKysgICAgZmlw c19sb2FkX2tleV9jb21wb25lbnQoZHNhLCBwcml2X2tleSwgZHNhX3Rlc3RfMjA0OCk7CisrCisr ICAgIGlmIChjb3JydXB0X2RzYSkKKysgICAgICAgIEJOX3NldF9iaXQoZHNhLT5wdWJfa2V5LCAy MDQ3KTsKKysKKysgICAgaWYgKChwayA9IEVWUF9QS0VZX25ldygpKSA9PSBOVUxMKQorKyAgICAg ICAgZ290byBlcnI7CisrCisrICAgIEVWUF9QS0VZX2Fzc2lnbl9EU0EocGssIGRzYSk7CisrCisr ICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBOVUxMLCAwLAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBFVlBfc2hhMjU2KCksIDAsICJEU0Eg U0hBMjU2IikpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgcmV0ID0gMTsKKysKKysgZXJyOgor KyAgICBpZiAocGspCisrICAgICAgICBFVlBfUEtFWV9mcmVlKHBrKTsKKysgICAgZWxzZSBpZiAo ZHNhKQorKyAgICAgICAgRFNBX2ZyZWUoZHNhKTsKKysgICAgcmV0dXJuIHJldDsKKyt9CisrI2Vu ZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX2VuYy5jLmZpcHMg b3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19lbmMuYworLS0tIG9wZW5zc2wtMS4wLjJo L2NyeXB0by9maXBzL2ZpcHNfZW5jLmMuZmlwcwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgyOTMyMTE4 MSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfZW5jLmMJMjAxNi0w NS0wMyAxNjo1Nzo1OC44MjkzMjExODEgKzAyMDAKK0BAIC0wLDAgKzEsMTg5IEBACisrLyogZmlw ZS9ldnAvZmlwc19lbmMuYyAqLworKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91 bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysg KiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysgKiBieSBF cmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0aW9uIHdh cyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAqIAorKyAq IFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1 c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0 by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5k IGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhhc2gsIERF UywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0 aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRo ZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGlt IEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAqIENvcHlyaWdodCByZW1haW5z IEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisrICog dGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1 c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24K KysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorKyAq IFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0g c3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92 aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNh dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u cworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11 c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmlidXRp b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUK KysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisrICog ICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4g YnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAgIFRoZSB3 b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0 aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0 ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUg KG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9y eSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBI dWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJFIElTIFBS T1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNTIE9SIElN UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAq IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBD QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU LCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKyAqIFNV Q0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMg Zm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2ZSBv ZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2lt cGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGlj ZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICovCisrCisr I2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysKKytjb25zdCBFVlBfQ0lQSEVSICpGSVBTX2dldF9jaXBoZXJieW5pZChpbnQg bmlkKQorK3sKKysgICAgc3dpdGNoIChuaWQpIHsKKysgICAgY2FzZSBOSURfYWVzXzEyOF9jYmM6 CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY2JjKCk7CisrCisrICAgIGNhc2UgTklEX2Fl c18xMjhfY2NtOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2NjbSgpOworKworKyAgICBj YXNlIE5JRF9hZXNfMTI4X2NmYjE6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY2ZiMSgp OworKworKyAgICBjYXNlIE5JRF9hZXNfMTI4X2NmYjEyODoKKysgICAgICAgIHJldHVybiBFVlBf YWVzXzEyOF9jZmIxMjgoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzEyOF9jZmI4OgorKyAgICAg ICAgcmV0dXJuIEVWUF9hZXNfMTI4X2NmYjgoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzEyOF9j dHI6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xMjhfY3RyKCk7CisrCisrICAgIGNhc2UgTklE X2Flc18xMjhfZWNiOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTI4X2VjYigpOworKworKyAg ICBjYXNlIE5JRF9hZXNfMTI4X2djbToKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzEyOF9nY20o KTsKKysKKysgICAgY2FzZSBOSURfYWVzXzEyOF9vZmIxMjg6CisrICAgICAgICByZXR1cm4gRVZQ X2Flc18xMjhfb2ZiKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18xMjhfeHRzOgorKyAgICAgICAg cmV0dXJuIEVWUF9hZXNfMTI4X3h0cygpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTkyX2NiYzoK KysgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jYmMoKTsKKysKKysgICAgY2FzZSBOSURfYWVz XzE5Ml9jY206CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfY2NtKCk7CisrCisrICAgIGNh c2UgTklEX2Flc18xOTJfY2ZiMToKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jZmIxKCk7 CisrCisrICAgIGNhc2UgTklEX2Flc18xOTJfY2ZiMTI4OgorKyAgICAgICAgcmV0dXJuIEVWUF9h ZXNfMTkyX2NmYjEyOCgpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTkyX2NmYjg6CisrICAgICAg ICByZXR1cm4gRVZQX2Flc18xOTJfY2ZiOCgpOworKworKyAgICBjYXNlIE5JRF9hZXNfMTkyX2N0 cjoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzE5Ml9jdHIoKTsKKysKKysgICAgY2FzZSBOSURf YWVzXzE5Ml9lY2I6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18xOTJfZWNiKCk7CisrCisrICAg IGNhc2UgTklEX2Flc18xOTJfZ2NtOgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMTkyX2djbSgp OworKworKyAgICBjYXNlIE5JRF9hZXNfMTkyX29mYjEyODoKKysgICAgICAgIHJldHVybiBFVlBf YWVzXzE5Ml9vZmIoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzI1Nl9jYmM6CisrICAgICAgICBy ZXR1cm4gRVZQX2Flc18yNTZfY2JjKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18yNTZfY2NtOgor KyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2NjbSgpOworKworKyAgICBjYXNlIE5JRF9hZXNf MjU2X2NmYjE6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfY2ZiMSgpOworKworKyAgICBj YXNlIE5JRF9hZXNfMjU2X2NmYjEyODoKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9jZmIx MjgoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzI1Nl9jZmI4OgorKyAgICAgICAgcmV0dXJuIEVW UF9hZXNfMjU2X2NmYjgoKTsKKysKKysgICAgY2FzZSBOSURfYWVzXzI1Nl9jdHI6CisrICAgICAg ICByZXR1cm4gRVZQX2Flc18yNTZfY3RyKCk7CisrCisrICAgIGNhc2UgTklEX2Flc18yNTZfZWNi OgorKyAgICAgICAgcmV0dXJuIEVWUF9hZXNfMjU2X2VjYigpOworKworKyAgICBjYXNlIE5JRF9h ZXNfMjU2X2djbToKKysgICAgICAgIHJldHVybiBFVlBfYWVzXzI1Nl9nY20oKTsKKysKKysgICAg Y2FzZSBOSURfYWVzXzI1Nl9vZmIxMjg6CisrICAgICAgICByZXR1cm4gRVZQX2Flc18yNTZfb2Zi KCk7CisrCisrICAgIGNhc2UgTklEX2Flc18yNTZfeHRzOgorKyAgICAgICAgcmV0dXJuIEVWUF9h ZXNfMjU2X3h0cygpOworKworKyAgICBjYXNlIE5JRF9kZXNfZWRlX2VjYjoKKysgICAgICAgIHJl dHVybiBFVlBfZGVzX2VkZSgpOworKworKyAgICBjYXNlIE5JRF9kZXNfZWRlM19lY2I6CisrICAg ICAgICByZXR1cm4gRVZQX2Rlc19lZGUzKCk7CisrCisrICAgIGNhc2UgTklEX2Rlc19lZGUzX2Ni YzoKKysgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZTNfY2JjKCk7CisrCisrICAgIGNhc2UgTklE X2Rlc19lZGUzX2NmYjE6CisrICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjEoKTsKKysK KysgICAgY2FzZSBOSURfZGVzX2VkZTNfY2ZiNjQ6CisrICAgICAgICByZXR1cm4gRVZQX2Rlc19l ZGUzX2NmYjY0KCk7CisrCisrICAgIGNhc2UgTklEX2Rlc19lZGUzX2NmYjg6CisrICAgICAgICBy ZXR1cm4gRVZQX2Rlc19lZGUzX2NmYjgoKTsKKysKKysgICAgY2FzZSBOSURfZGVzX2VkZTNfb2Zi NjQ6CisrICAgICAgICByZXR1cm4gRVZQX2Rlc19lZGUzX29mYigpOworKworKyAgICBjYXNlIE5J RF9kZXNfZWRlX2NiYzoKKysgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZV9jYmMoKTsKKysKKysg ICAgY2FzZSBOSURfZGVzX2VkZV9jZmI2NDoKKysgICAgICAgIHJldHVybiBFVlBfZGVzX2VkZV9j ZmI2NCgpOworKworKyAgICBjYXNlIE5JRF9kZXNfZWRlX29mYjY0OgorKyAgICAgICAgcmV0dXJu IEVWUF9kZXNfZWRlX29mYigpOworKworKyAgICBkZWZhdWx0OgorKyAgICAgICAgcmV0dXJuIE5V TEw7CisrCisrICAgIH0KKyt9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9m aXBzLmguZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzLmgKKy0tLSBvcGVuc3Ns LTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzLmguZmlwcwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgyOTMy MTE4MSArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHMuaAkyMDE2LTA1 LTAzIDE2OjU3OjU4LjgyOTMyMTE4MSArMDIwMAorQEAgLTAsMCArMSwyNzggQEAKKysvKiA9PT09 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 KyNpbmNsdWRlIDxvcGVuc3NsL2NyeXB0by5oPgorKyNpbmNsdWRlIDxzdGRhcmcuaD4KKysKKysj aWZuZGVmIE9QRU5TU0xfRklQUworKyMgZXJyb3IgRklQUyBpcyBkaXNhYmxlZC4KKysjZW5kaWYK KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrIyBpZmRlZiAgX19jcGx1c3BsdXMKKytleHRl cm4gIkMiIHsKKysjIGVuZGlmCisrCisrICAgIHN0cnVjdCBkc2Ffc3Q7CisrICAgIHN0cnVjdCBy c2Ffc3Q7CisrICAgIHN0cnVjdCBldnBfcGtleV9zdDsKKysgICAgc3RydWN0IGVudl9tZF9zdDsK KysgICAgc3RydWN0IGVudl9tZF9jdHhfc3Q7CisrICAgIHN0cnVjdCBldnBfY2lwaGVyX3N0Owor KyAgICBzdHJ1Y3QgZXZwX2NpcGhlcl9jdHhfc3Q7CisrICAgIHN0cnVjdCBkaF9tZXRob2Q7Cisr ICAgIHN0cnVjdCBDTUFDX0NUWF9zdDsKKysgICAgc3RydWN0IGhtYWNfY3R4X3N0OworKworKyAg ICBpbnQgRklQU19tb2R1bGVfbW9kZV9zZXQoaW50IG9ub2ZmLCBjb25zdCBjaGFyICphdXRoKTsK KysgICAgaW50IEZJUFNfbW9kdWxlX21vZGUodm9pZCk7CisrICAgIGNvbnN0IHZvaWQgKkZJUFNf cmFuZF9jaGVjayh2b2lkKTsKKysgICAgaW50IEZJUFNfc2VsZnRlc3Qodm9pZCk7CisrICAgIGlu dCBGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCh2b2lkKTsKKysgICAgdm9pZCBGSVBTX2NvcnJ1cHRfc2hh MSh2b2lkKTsKKysgICAgaW50IEZJUFNfc2VsZnRlc3Rfc2hhMSh2b2lkKTsKKysgICAgaW50IEZJ UFNfc2VsZnRlc3Rfc2hhMih2b2lkKTsKKysgICAgdm9pZCBGSVBTX2NvcnJ1cHRfYWVzKHZvaWQp OworKyAgICBpbnQgRklQU19zZWxmdGVzdF9hZXNfY2NtKHZvaWQpOworKyAgICBpbnQgRklQU19z ZWxmdGVzdF9hZXNfZ2NtKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF9hZXNfeHRzKHZv aWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF9hZXModm9pZCk7CisrICAgIHZvaWQgRklQU19j b3JydXB0X2Rlcyh2b2lkKTsKKysgICAgaW50IEZJUFNfc2VsZnRlc3RfZGVzKHZvaWQpOworKyAg ICB2b2lkIEZJUFNfY29ycnVwdF9yc2Eodm9pZCk7CisrICAgIHZvaWQgRklQU19jb3JydXB0X3Jz YV9rZXlnZW4odm9pZCk7CisrICAgIGludCBGSVBTX3NlbGZ0ZXN0X3JzYSh2b2lkKTsKKysgICAg dm9pZCBGSVBTX2NvcnJ1cHRfZHNhKHZvaWQpOworKyAgICB2b2lkIEZJUFNfY29ycnVwdF9kc2Ff a2V5Z2VuKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF9kc2Eodm9pZCk7CisrICAgIHZv aWQgRklQU19jb3JydXB0X3JuZyh2b2lkKTsKKysgICAgdm9pZCBGSVBTX3JuZ19zdGljayh2b2lk KTsKKysgICAgdm9pZCBGSVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKTsKKysgICAgdm9pZCBGSVBT X2RyYmdfc3RpY2soaW50IG9ub2ZmKTsKKysgICAgaW50IEZJUFNfc2VsZnRlc3Rfcm5nKHZvaWQp OworKyAgICBpbnQgRklQU19zZWxmdGVzdF94OTMxKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxm dGVzdF9obWFjKHZvaWQpOworKyAgICBpbnQgRklQU19zZWxmdGVzdF9kcmJnKHZvaWQpOworKyAg ICBpbnQgRklQU19zZWxmdGVzdF9kcmJnX2FsbCh2b2lkKTsKKysgICAgaW50IEZJUFNfc2VsZnRl c3RfY21hYyh2b2lkKTsKKysKKysgICAgdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2lnbmVkIGNo YXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqcGN0cik7CisrCisrIyBkZWZpbmUgRklQU19FUlJPUl9J R05PUkVEKGFsZykgT3BlblNTTERpZShfX0ZJTEVfXywgX19MSU5FX18sIFwKKysgICAgICAgICAg ICAgICAgYWxnICIgcHJldmlvdXMgRklQUyBmb3JiaWRkZW4gYWxnb3JpdGhtIGVycm9yIGlnbm9y ZWQiKTsKKysKKysgICAgaW50IGZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChzdHJ1Y3QgZXZwX3Br ZXlfc3QgKnBrZXksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciAqdGJzLCBpbnQgdGJzbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmthdCwKKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQga2F0bGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN0cnVjdCBlbnZfbWRfc3QgKmRpZ2VzdCwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWRfZmxhZ3MsIGNvbnN0IGNoYXIgKmZh aWxfc3RyKTsKKysKKysgICAgaW50IGZpcHNfY2lwaGVyX3Rlc3Qoc3RydWN0IGV2cF9jaXBoZXJf Y3R4X3N0ICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBldnBf Y2lwaGVyX3N0ICpjaXBoZXIsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln bmVkIGNoYXIgKmtleSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqaXYsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg KnBsYWludGV4dCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqY2lwaGVydGV4dCwgaW50IGxlbik7CisrCisrICAgIHZvaWQgZmlwc19zZXRfc2VsZnRlc3Rf ZmFpbCh2b2lkKTsKKysKKysgICAgY29uc3Qgc3RydWN0IGVudl9tZF9zdCAqRklQU19nZXRfZGln ZXN0YnluaWQoaW50IG5pZCk7CisrCisrICAgIGNvbnN0IHN0cnVjdCBldnBfY2lwaGVyX3N0ICpG SVBTX2dldF9jaXBoZXJieW5pZChpbnQgbmlkKTsKKysKKysvKiBCRUdJTiBFUlJPUiBDT0RFUyAq LworKy8qIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzY3Jp cHQgbWtlcnIucGwuIEFueSBjaGFuZ2VzCisrICogbWFkZSBhZnRlciB0aGlzIHBvaW50IG1heSBi ZSBvdmVyd3JpdHRlbiB3aGVuIHRoZSBzY3JpcHQgaXMgbmV4dCBydW4uCisrICovCisrICAgIHZv aWQgRVJSX2xvYWRfRklQU19zdHJpbmdzKHZvaWQpOworKworKy8qIEVycm9yIGNvZGVzIGZvciB0 aGUgRklQUyBmdW5jdGlvbnMuICovCisrCisrLyogRnVuY3Rpb24gY29kZXMuICovCisrIyBkZWZp bmUgRklQU19GX0RIX0JVSUxUSU5fR0VOUEFSQU1TICAgICAgICAgICAgICAgICAgICAgIDEwMAor KyMgZGVmaW5lIEZJUFNfRl9ESF9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxNDgKKysjIGRlZmluZSBGSVBTX0ZfRFJCR19SRVNFRUQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTYyCisrIyBkZWZpbmUgRklQU19GX0RTQV9CVUlMVElOX1BBUkFNR0VOICAgICAg ICAgICAgICAgICAgICAgIDEwMQorKyMgZGVmaW5lIEZJUFNfRl9EU0FfQlVJTFRJTl9QQVJBTUdF TjIgICAgICAgICAgICAgICAgICAgICAxMDcKKysjIGRlZmluZSBGSVBTX0ZfRFNBX0RPX1NJR04g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyCisrIyBkZWZpbmUgRklQU19GX0RTQV9E T19WRVJJRlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMworKyMgZGVmaW5lIEZJUFNf Rl9FQ0RIX0NPTVBVVEVfS0VZICAgICAgICAgICAgICAgICAgICAgICAgICAxNjMKKysjIGRlZmlu ZSBGSVBTX0ZfRUNEU0FfRE9fU0lHTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTY0Cisr IyBkZWZpbmUgRklQU19GX0VDRFNBX0RPX1ZFUklGWSAgICAgICAgICAgICAgICAgICAgICAgICAg IDE2NQorKyMgZGVmaW5lIEZJUFNfRl9FQ19LRVlfR0VORVJBVEVfS0VZICAgICAgICAgICAgICAg ICAgICAgICAxNjYKKysjIGRlZmluZSBGSVBTX0ZfRVZQX0NJUEhFUklOSVRfRVggICAgICAgICAg ICAgICAgICAgICAgICAgMTI0CisrIyBkZWZpbmUgRklQU19GX0VWUF9ESUdFU1RJTklUX0VYICAg ICAgICAgICAgICAgICAgICAgICAgIDEyNQorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX0RT QSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQKKysjIGRlZmluZSBGSVBTX0ZfRklQU19D SEVDS19EU0FfUFJORyAgICAgICAgICAgICAgICAgICAgICAgMTUxCisrIyBkZWZpbmUgRklQU19G X0ZJUFNfQ0hFQ0tfRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MgorKyMgZGVmaW5l IEZJUFNfRl9GSVBTX0NIRUNLX0VDX1BSTkcgICAgICAgICAgICAgICAgICAgICAgICAxNTIKKysj IGRlZmluZSBGSVBTX0ZfRklQU19DSEVDS19JTkNPUkVfRklOR0VSUFJJTlQgICAgICAgICAgICAg MTA1CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfQ0hFQ0tfUlNBICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDEwNgorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NIRUNLX1JTQV9QUk5HICAgICAgICAg ICAgICAgICAgICAgICAxNTAKKysjIGRlZmluZSBGSVBTX0ZfRklQU19DSVBIRVIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTYwCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfQ0lQSEVSSU5J VCAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0MworKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0NJ UEhFUl9DVFhfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAxNjEKKysjIGRlZmluZSBGSVBTX0Zf RklQU19ESUdFU1RGSU5BTCAgICAgICAgICAgICAgICAgICAgICAgICAgMTU4CisrIyBkZWZpbmUg RklQU19GX0ZJUFNfRElHRVNUSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyOAorKyMg ZGVmaW5lIEZJUFNfRl9GSVBTX0RJR0VTVFVQREFURSAgICAgICAgICAgICAgICAgICAgICAgICAx NTkKKysjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0JZVEVTICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTMxCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJCR19DSEVDSyAgICAgICAgICAgICAg ICAgICAgICAgICAgIDE0NgorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfQ1BSTkdfVEVTVCAg ICAgICAgICAgICAgICAgICAgICAxMzIKKysjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX0VSUk9S X0NIRUNLICAgICAgICAgICAgICAgICAgICAgMTM2CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRFJC R19HRU5FUkFURSAgICAgICAgICAgICAgICAgICAgICAgIDEzNAorKyMgZGVmaW5lIEZJUFNfRl9G SVBTX0RSQkdfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMzUKKysjIGRlZmluZSBG SVBTX0ZfRklQU19EUkJHX0lOU1RBTlRJQVRFICAgICAgICAgICAgICAgICAgICAgMTM4CisrIyBk ZWZpbmUgRklQU19GX0ZJUFNfRFJCR19ORVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEz OQorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RSQkdfUkVTRUVEICAgICAgICAgICAgICAgICAgICAg ICAgICAxNDAKKysjIGRlZmluZSBGSVBTX0ZfRklQU19EUkJHX1NJTkdMRV9LQVQgICAgICAgICAg ICAgICAgICAgICAgMTQxCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfRFNBX0NIRUNLICAgICAgICAg ICAvKiB1bnVzZWQgKi8gICAgIDEwNworKyMgZGVmaW5lIEZJUFNfRl9GSVBTX0RTQV9TSUdOX0RJ R0VTVCAgICAgICAgICAgICAgICAgICAgICAxNTQKKysjIGRlZmluZSBGSVBTX0ZfRklQU19EU0Ff VkVSSUZZX0RJR0VTVCAgICAgICAgICAgICAgICAgICAgMTU1CisrIyBkZWZpbmUgRklQU19GX0ZJ UFNfR0VUX0VOVFJPUFkgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NworKyMgZGVmaW5lIEZJ UFNfRl9GSVBTX01PREVfU0VUICAgICAgICAgICAgLyogdW51c2VkICovICAgICAxMDgKKysjIGRl ZmluZSBGSVBTX0ZfRklQU19NT0RVTEVfTU9ERV9TRVQgICAgICAgICAgICAgICAgICAgICAgMTA4 CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfUEtFWV9TSUdOQVRVUkVfVEVTVCAgICAgICAgICAgICAg ICAgIDEwOQorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRfQUREICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxMzcKKysjIGRlZmluZSBGSVBTX0ZfRklQU19SQU5EX0JZVEVTICAgICAgICAg ICAgICAgICAgICAgICAgICAgMTIyCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfUkFORF9QU0VVRE9f QllURVMgICAgICAgICAgICAgICAgICAgIDE2NworKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1JBTkRf U0VFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjgKKysjIGRlZmluZSBGSVBTX0ZfRklQ U19SQU5EX1NFVF9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgMTI2CisrIyBkZWZpbmUgRklQ U19GX0ZJUFNfUkFORF9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgIDEyNworKyMgZGVm aW5lIEZJUFNfRl9GSVBTX1JTQV9TSUdOX0RJR0VTVCAgICAgICAgICAgICAgICAgICAgICAxNTYK KysjIGRlZmluZSBGSVBTX0ZfRklQU19SU0FfVkVSSUZZX0RJR0VTVCAgICAgICAgICAgICAgICAg ICAgMTU3CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfQUVTICAgICAgICAgICAgICAg ICAgICAgICAgIDExMAorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0FFU19DQ00gICAg ICAgICAgICAgICAgICAgICAxNDUKKysjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9BRVNf R0NNICAgICAgICAgICAgICAgICAgICAgMTI5CisrIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRF U1RfQUVTX1hUUyAgICAgICAgICAgICAgICAgICAgIDE0NAorKyMgZGVmaW5lIEZJUFNfRl9GSVBT X1NFTEZURVNUX0NNQUMgICAgICAgICAgICAgICAgICAgICAgICAxMzAKKysjIGRlZmluZSBGSVBT X0ZfRklQU19TRUxGVEVTVF9ERVMgICAgICAgICAgICAgICAgICAgICAgICAgMTExCisrIyBkZWZp bmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfRFNBICAgICAgICAgICAgICAgICAgICAgICAgIDExMgor KyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX0VDRFNBICAgICAgICAgICAgICAgICAgICAg ICAxMzMKKysjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVTVF9ITUFDICAgICAgICAgICAgICAg ICAgICAgICAgMTEzCisrIyBkZWZpbmUgRklQU19GX0ZJUFNfU0VMRlRFU1RfUk5HICAgICAgICAv KiB1bnVzZWQgKi8gICAgIDExNAorKyMgZGVmaW5lIEZJUFNfRl9GSVBTX1NFTEZURVNUX1NIQTEg ICAgICAgICAgICAgICAgICAgICAgICAxMTUKKysjIGRlZmluZSBGSVBTX0ZfRklQU19TRUxGVEVT VF9YOTMxICAgICAgICAgICAgICAgICAgICAgICAgMTE0CisrIyBkZWZpbmUgRklQU19GX0ZJUFNf U0VUX1BSTkdfS0VZICAgICAgICAgICAgICAgICAgICAgICAgIDE1MworKyMgZGVmaW5lIEZJUFNf Rl9IQVNIX0ZJTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjMKKysjIGRlZmlu ZSBGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOICAgICAgICAgICAgICAgICAgICAgICAgMTE2Cisr IyBkZWZpbmUgRklQU19GX1JTQV9FQVlfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDE0OQorKyMgZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BSSVZBVEVfREVDUllQVCAgICAgICAgICAg ICAgICAgICAxMTcKKysjIGRlZmluZSBGSVBTX0ZfUlNBX0VBWV9QUklWQVRFX0VOQ1JZUFQgICAg ICAgICAgICAgICAgICAgMTE4CisrIyBkZWZpbmUgRklQU19GX1JTQV9FQVlfUFVCTElDX0RFQ1JZ UFQgICAgICAgICAgICAgICAgICAgIDExOQorKyMgZGVmaW5lIEZJUFNfRl9SU0FfRUFZX1BVQkxJ Q19FTkNSWVBUICAgICAgICAgICAgICAgICAgICAxMjAKKysjIGRlZmluZSBGSVBTX0ZfUlNBX1g5 MzFfR0VORVJBVEVfS0VZX0VYICAgICAgICAgICAgICAgICAgMTIxCisrIyBkZWZpbmUgRklQU19G X1NTTEVBWV9SQU5EX0JZVEVTICAgICAgICAvKiB1bnVzZWQgKi8gICAgIDEyMgorKworKy8qIFJl YXNvbiBjb2Rlcy4gKi8KKysjIGRlZmluZSBGSVBTX1JfQURESVRJT05BTF9JTlBVVF9FUlJPUl9V TkRFVEVDVEVEICAgICAgICAgMTUwCisrIyBkZWZpbmUgRklQU19SX0FERElUSU9OQUxfSU5QVVRf VE9PX0xPTkcgICAgICAgICAgICAgICAgIDEyNQorKyMgZGVmaW5lIEZJUFNfUl9BTFJFQURZX0lO U1RBTlRJQVRFRCAgICAgICAgICAgICAgICAgICAgICAxMzQKKysjIGRlZmluZSBGSVBTX1JfQVVU SEVOVElDQVRJT05fRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgMTUxCisrIyBkZWZpbmUgRklQ U19SX0NBTk5PVF9SRUFEX0VYRSAgICAgICAgICAvKiB1bnVzZWQgKi8gICAgIDEwMworKyMgZGVm aW5lIEZJUFNfUl9DQU5OT1RfUkVBRF9FWEVfRElHRVNUICAgLyogdW51c2VkICovICAgICAxMDQK KysjIGRlZmluZSBGSVBTX1JfQ09OVFJBRElDVElOR19FVklERU5DRSAgICAgICAgICAgICAgICAg ICAgMTE0CisrIyBkZWZpbmUgRklQU19SX0RSQkdfTk9UX0lOSVRJQUxJU0VEICAgICAgICAgICAg ICAgICAgICAgIDE1MgorKyMgZGVmaW5lIEZJUFNfUl9EUkJHX1NUVUNLICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMDMKKysjIGRlZmluZSBGSVBTX1JfRU5UUk9QWV9FUlJPUl9VTkRF VEVDVEVEICAgICAgICAgICAgICAgICAgMTA0CisrIyBkZWZpbmUgRklQU19SX0VOVFJPUFlfTk9U X1JFUVVFU1RFRF9GT1JfUkVTRUVEICAgICAgICAgIDEwNQorKyMgZGVmaW5lIEZJUFNfUl9FTlRS T1BZX1NPVVJDRV9TVFVDSyAgICAgICAgICAgICAgICAgICAgICAxNDIKKysjIGRlZmluZSBGSVBT X1JfRVJST1JfSU5JVElBTElTSU5HX0RSQkcgICAgICAgICAgICAgICAgICAgMTE1CisrIyBkZWZp bmUgRklQU19SX0VSUk9SX0lOU1RBTlRJQVRJTkdfRFJCRyAgICAgICAgICAgICAgICAgIDEyNwor KyMgZGVmaW5lIEZJUFNfUl9FUlJPUl9SRVRSSUVWSU5HX0FERElUSU9OQUxfSU5QVVQgICAgICAg ICAxMjQKKysjIGRlZmluZSBGSVBTX1JfRVJST1JfUkVUUklFVklOR19FTlRST1BZICAgICAgICAg ICAgICAgICAgMTIyCisrIyBkZWZpbmUgRklQU19SX0VSUk9SX1JFVFJJRVZJTkdfTk9OQ0UgICAg ICAgICAgICAgICAgICAgIDE0MAorKyMgZGVmaW5lIEZJUFNfUl9FWEVfRElHRVNUX0RPRVNfTk9U X01BVENIICAgLyogdW51c2VkICovICAxMDUKKysjIGRlZmluZSBGSVBTX1JfRklOR0VSUFJJTlRf RE9FU19OT1RfTUFUQ0ggICAgICAgICAgICAgICAgMTEwCisrIyBkZWZpbmUgRklQU19SX0ZJTkdF UlBSSU5UX0RPRVNfTk9UX01BVENIX05PTlBJQ19SRUxPQ0FURUQgMTExCisrIyBkZWZpbmUgRklQ U19SX0ZJTkdFUlBSSU5UX0RPRVNfTk9UX01BVENIX1NFR01FTlRfQUxJQVNJTkcgMTEyCisrIyBk ZWZpbmUgRklQU19SX0ZJUFNfTU9ERV9BTFJFQURZX1NFVCAgICAgICAgICAgICAgICAgICAgIDEw MgorKyMgZGVmaW5lIEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCAgICAgICAgICAgICAgICAg ICAgICAxMDYKKysjIGRlZmluZSBGSVBTX1JfRlVOQ1RJT05fRVJST1IgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMTE2CisrIyBkZWZpbmUgRklQU19SX0dFTkVSQVRFX0VSUk9SICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEzNworKyMgZGVmaW5lIEZJUFNfUl9HRU5FUkFURV9FUlJPUl9V TkRFVEVDVEVEICAgICAgICAgICAgICAgICAxMTgKKysjIGRlZmluZSBGSVBTX1JfSU5TVEFOVElB VEVfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgMTE5CisrIyBkZWZpbmUgRklQU19SX0lO U1VGRklDSUVOVF9TRUNVUklUWV9TVFJFTkdUSCAgICAgICAgICAgIDEyMAorKyMgZGVmaW5lIEZJ UFNfUl9JTlRFUk5BTF9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjEKKysjIGRl ZmluZSBGSVBTX1JfSU5WQUxJRF9LRVlfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgMTA5 CisrIyBkZWZpbmUgRklQU19SX0lOVkFMSURfUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAgICAg ICAgIDE0NAorKyMgZGVmaW5lIEZJUFNfUl9JTl9FUlJPUl9TVEFURSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxMjMKKysjIGRlZmluZSBGSVBTX1JfS0VZX1RPT19TSE9SVCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMTA4CisrIyBkZWZpbmUgRklQU19SX05PTkNFX0VSUk9SX1VOREVU RUNURUQgICAgICAgICAgICAgICAgICAgIDE0OQorKyMgZGVmaW5lIEZJUFNfUl9OT05fRklQU19N RVRIT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKKysjIGRlZmluZSBGSVBTX1JfTk9Q Ul9URVNUMV9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgMTQ1CisrIyBkZWZpbmUgRklQ U19SX05PUFJfVEVTVDJfRkFJTFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDE0NgorKyMgZGVm aW5lIEZJUFNfUl9OT1RfSU5TVEFOVElBVEVEICAgICAgICAgICAgICAgICAgICAgICAgICAxMjYK KysjIGRlZmluZSBGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlMRUQgICAgICAgICAgICAgICAgICAg ICAgMTA3CisrIyBkZWZpbmUgRklQU19SX1BFUlNPTkFMSVNBVElPTl9FUlJPUl9VTkRFVEVDVEVE ICAgICAgICAgIDEyOAorKyMgZGVmaW5lIEZJUFNfUl9QRVJTT05BTElTQVRJT05fU1RSSU5HX1RP T19MT05HICAgICAgICAgICAxMjkKKysjIGRlZmluZSBGSVBTX1JfUFJOR19TVFJFTkdUSF9UT09f TE9XICAgICAgICAgICAgICAgICAgICAgMTQzCisrIyBkZWZpbmUgRklQU19SX1BSX1RFU1QxX0ZB SUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NworKyMgZGVmaW5lIEZJUFNfUl9QUl9U RVNUMl9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAxNDgKKysjIGRlZmluZSBGSVBT X1JfUkVRVUVTVF9MRU5HVEhfRVJST1JfVU5ERVRFQ1RFRCAgICAgICAgICAgMTMwCisrIyBkZWZp bmUgRklQU19SX1JFUVVFU1RfVE9PX0xBUkdFX0ZPUl9EUkJHICAgICAgICAgICAgICAgIDEzMQor KyMgZGVmaW5lIEZJUFNfUl9SRVNFRURfQ09VTlRFUl9FUlJPUiAgICAgICAgICAgICAgICAgICAg ICAxMzIKKysjIGRlZmluZSBGSVBTX1JfUkVTRUVEX0VSUk9SICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTMzCisrIyBkZWZpbmUgRklQU19SX1JTQV9ERUNSWVBUX0VSUk9SICAgICAgICAv KiB1bnVzZWQgKi8gICAgIDExNQorKyMgZGVmaW5lIEZJUFNfUl9SU0FfRU5DUllQVF9FUlJPUiAg ICAgICAgLyogdW51c2VkICovICAgICAxMTYKKysjIGRlZmluZSBGSVBTX1JfU0VMRlRFU1RfRkFJ TEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAxCisrIyBkZWZpbmUgRklQU19SX1NFTEZU RVNUX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgICAgICAgIDEzNQorKyMgZGVmaW5lIEZJUFNf Ul9TVFJFTkdUSF9FUlJPUl9VTkRFVEVDVEVEICAgICAgICAgICAgICAgICAxMzYKKysjIGRlZmlu ZSBGSVBTX1JfVEVTVF9GQUlMVVJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE3Cisr IyBkZWZpbmUgRklQU19SX1VOSU5TVEFOVElBVEVfRVJST1IgICAgICAgICAgICAgICAgICAgICAg IDE0MQorKyMgZGVmaW5lIEZJUFNfUl9VTklOU1RBTlRJQVRFX1pFUk9JU0VfRVJST1IgICAgICAg ICAgICAgICAxMzgKKysjIGRlZmluZSBGSVBTX1JfVU5TVVBQT1JURURfRFJCR19UWVBFICAgICAg ICAgICAgICAgICAgICAgMTM5CisrIyBkZWZpbmUgRklQU19SX1VOU1VQUE9SVEVEX1BMQVRGT1JN ICAgICAgICAgICAgICAgICAgICAgIDExMworKworKyMgaWZkZWYgIF9fY3BsdXNwbHVzCisrfQor KyMgZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2Zp cHNfaG1hY19zZWxmdGVzdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19o bWFjX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX2htYWNf c2VsZnRlc3QuYy5maXBzCTIwMTYtMDUtMDMgMTY6NTc6NTguODI5MzIxMTgxICswMjAwCisrKysg b3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19obWFjX3NlbGZ0ZXN0LmMJMjAxNi0wNS0w MyAxNjo1Nzo1OC44MjkzMjExODEgKzAyMDAKK0BAIC0wLDAgKzEsMTM0IEBACisrLyogPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFy ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBh cmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAq CisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9y IHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcg YWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBk ZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9w ZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRo ZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3Qg YmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wt Y29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz IHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9w ZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAg ICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3Ry aWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5n CisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisr ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMg SVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0Ug QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9S CisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE QU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQg QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAq IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS V0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN QUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KKysKKysjaWZkZWYgT1BF TlNTTF9GSVBTCisrdHlwZWRlZiBzdHJ1Y3QgeworKyAgICBjb25zdCBFVlBfTUQgKigqYWxnKSAo dm9pZCk7CisrICAgIGNvbnN0IGNoYXIgKmtleSwgKml2OworKyAgICB1bnNpZ25lZCBjaGFyIGth dmFsW0VWUF9NQVhfTURfU0laRV07CisrfSBITUFDX0tBVDsKKysKKytzdGF0aWMgY29uc3QgSE1B Q19LQVQgdmVjdG9yW10gPSB7CisrICAgIHtFVlBfc2hhMSwKKysgICAgIC8qIGZyb20gaHR0cDov L2NzcmMubmlzdC5nb3YvcHVibGljYXRpb25zL2ZpcHMvZmlwczE5OC9maXBzLTE5OGEucGRmICov CisrICAgICAiMDEyMzQ1Njc4OTo7PD0+P0BBQkMiLAorKyAgICAgIlNhbXBsZSAjMiIsCisrICAg ICB7MHgwOSwgMHgyMiwgMHhkMywgMHg0MCwgMHg1ZiwgMHhhYSwgMHgzZCwgMHgxOSwKKysgICAg ICAweDRmLCAweDgyLCAweGE0LCAweDU4LCAweDMwLCAweDczLCAweDdkLCAweDVjLAorKyAgICAg IDB4YzYsIDB4YzcsIDB4NWQsIDB4MjR9CisrICAgICB9LAorKyAgICB7RVZQX3NoYTIyNCwKKysg ICAgIC8qIGp1c3Qga2VlcCBleHRlbmRpbmcgdGhlIGFib3ZlLi4uICovCisrICAgICAiMDEyMzQ1 Njc4OTo7PD0+P0BBQkMiLAorKyAgICAgIlNhbXBsZSAjMiIsCisrICAgICB7MHhkZCwgMHhlZiwg MHgwYSwgMHg0MCwgMHhjYiwgMHg3ZCwgMHg1MCwgMHhmYiwKKysgICAgICAweDZlLCAweGU2LCAw eGNlLCAweGExLCAweDIwLCAweGJhLCAweDI2LCAweGFhLAorKyAgICAgIDB4MDgsIDB4ZjMsIDB4 MDcsIDB4NzUsIDB4ODcsIDB4YjgsIDB4YWQsIDB4MWIsCisrICAgICAgMHg4YywgMHg4ZCwgMHgx MiwgMHhjN30KKysgICAgIH0sCisrICAgIHtFVlBfc2hhMjU2LAorKyAgICAgIjAxMjM0NTY3ODk6 Ozw9Pj9AQUJDIiwKKysgICAgICJTYW1wbGUgIzIiLAorKyAgICAgezB4YjgsIDB4ZjIsIDB4MGQs IDB4YjUsIDB4NDEsIDB4ZWEsIDB4NDMsIDB4MDksCisrICAgICAgMHhjYSwgMHg0ZSwgMHhhOSwg MHgzOCwgMHgwYywgMHhkMCwgMHhlOCwgMHgzNCwKKysgICAgICAweGY3LCAweDFmLCAweGJlLCAw eDkxLCAweDc0LCAweGEyLCAweDYxLCAweDM4LAorKyAgICAgIDB4MGQsIDB4YzEsIDB4N2UsIDB4 YWUsIDB4NmEsIDB4MzQsIDB4NTEsIDB4ZDl9CisrICAgICB9LAorKyAgICB7RVZQX3NoYTM4NCwK KysgICAgICIwMTIzNDU2Nzg5Ojs8PT4/QEFCQyIsCisrICAgICAiU2FtcGxlICMyIiwKKysgICAg IHsweDA4LCAweGJjLCAweGIwLCAweGRhLCAweDQ5LCAweDFlLCAweDg3LCAweGFkLAorKyAgICAg IDB4OWEsIDB4MWQsIDB4NmEsIDB4Y2UsIDB4MjMsIDB4YzUsIDB4MGIsIDB4ZjYsCisrICAgICAg MHhiNywgMHgxOCwgMHgwNiwgMHhhNSwgMHg3NywgMHhjZCwgMHg0OSwgMHgwNCwKKysgICAgICAw eDg5LCAweGYxLCAweGU2LCAweDIzLCAweDQ0LCAweDUxLCAweDUxLCAweDlmLAorKyAgICAgIDB4 ODUsIDB4NTYsIDB4ODAsIDB4NzksIDB4MGMsIDB4YmQsIDB4NGQsIDB4NTAsCisrICAgICAgMHhh NCwgMHg1ZiwgMHgyOSwgMHhlMywgMHg5MywgMHhmMCwgMHhlOCwgMHg3Zn0KKysgICAgIH0sCisr ICAgIHtFVlBfc2hhNTEyLAorKyAgICAgIjAxMjM0NTY3ODk6Ozw9Pj9AQUJDIiwKKysgICAgICJT YW1wbGUgIzIiLAorKyAgICAgezB4ODAsIDB4OWQsIDB4NDQsIDB4MDUsIDB4N2MsIDB4NWIsIDB4 OTUsIDB4NDEsCisrICAgICAgMHgwNSwgMHhiZCwgMHgwNCwgMHgxMywgMHgxNiwgMHhkYiwgMHgw ZiwgMHhhYywKKysgICAgICAweDQ0LCAweGQ1LCAweGE0LCAweGQ1LCAweGQwLCAweDg5LCAweDJi LCAweGQwLAorKyAgICAgIDB4NGUsIDB4ODYsIDB4NjQsIDB4MTIsIDB4YzAsIDB4OTAsIDB4Nzcs IDB4NjgsCisrICAgICAgMHhmMSwgMHg4NywgMHhiNywgMHg3YywgMHg0ZiwgMHhhZSwgMHgyYywg MHgyZiwKKysgICAgICAweDIxLCAweGE1LCAweGI1LCAweDY1LCAweDlhLCAweDRmLCAweDRiLCAw eGE3LAorKyAgICAgIDB4NDcsIDB4MDIsIDB4YTMsIDB4ZGUsIDB4OWIsIDB4NTEsIDB4ZjEsIDB4 NDUsCisrICAgICAgMHhiZCwgMHg0ZiwgMHgyNSwgMHgyNywgMHg0MiwgMHg5OCwgMHg5OSwgMHgw NX0KKysgICAgIH0sCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9obWFjKCkKKyt7CisrICAg IGludCBuOworKyAgICB1bnNpZ25lZCBpbnQgb3V0bGVuOworKyAgICB1bnNpZ25lZCBjaGFyIG91 dFtFVlBfTUFYX01EX1NJWkVdOworKyAgICBjb25zdCBFVlBfTUQgKm1kOworKyAgICBjb25zdCBI TUFDX0tBVCAqdDsKKysKKysgICAgZm9yIChuID0gMCwgdCA9IHZlY3RvcjsgbiA8IHNpemVvZih2 ZWN0b3IpIC8gc2l6ZW9mKHZlY3RvclswXSk7IG4rKywgdCsrKSB7CisrICAgICAgICBtZCA9ICgq dC0+YWxnKSAoKTsKKysgICAgICAgIEhNQUMobWQsIHQtPmtleSwgc3RybGVuKHQtPmtleSksCisr ICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFyICopdC0+aXYsIHN0cmxlbih0LT5pdiks IG91dCwgJm91dGxlbik7CisrCisrICAgICAgICBpZiAobWVtY21wKG91dCwgdC0+a2F2YWwsIG91 dGxlbikpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX0hNQUMs IEZJUFNfUl9TRUxGVEVTVF9GQUlMRUQpOworKyAgICAgICAgICAgIHJldHVybiAwOworKyAgICAg ICAgfQorKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfbG9jbC5oLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5 cHRvL2ZpcHMvZmlwc19sb2NsLmgKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBz X2xvY2wuaC5maXBzCTIwMTYtMDUtMDMgMTY6NTc6NTguODI5MzIxMTgxICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19sb2NsLmgJMjAxNi0wNS0wMyAxNjo1Nzo1OC44 MjkzMjExODEgKzAyMDAKK0BAIC0wLDAgKzEsNzEgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENv cHlyaWdodCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoK KysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg cHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwg YWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMK KysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVu dDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0 aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0 LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVu U1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisr ICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVu IHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wu b3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5 IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFy IGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24g b2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBh bnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tu b3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVs b3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNT TCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRX QVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkK KysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws CisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV RElORywgQlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMgT1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJ TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFS SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysg Ki8KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrIyBpZmRlZiAgX19jcGx1c3BsdXMKKytl eHRlcm4gIkMiIHsKKysjIGVuZGlmCisrCisrIyBkZWZpbmUgRklQU19NQVhfQ0lQSEVSX1RFU1Rf U0laRSAgICAgICAzMgorKyMgZGVmaW5lIGZpcHNfbG9hZF9rZXlfY29tcG9uZW50KGtleSwgY29t cCwgcHJlKSBcCisrICAgICAgICBrZXktPmNvbXAgPSBCTl9iaW4yYm4ocHJlIyNfIyNjb21wLCBz aXplb2YocHJlIyNfIyNjb21wKSwga2V5LT5jb21wKTsgXAorKyAgICAgICAgaWYgKCFrZXktPmNv bXApIFwKKysgICAgICAgICAgICAgICAgZ290byBlcnIKKysKKysjIGRlZmluZSBmaXBzX3Bvc3Rf c3RhcnRlZChpZCwgc3ViaWQsIGV4KSAxCisrIyBkZWZpbmUgZmlwc19wb3N0X3N1Y2Nlc3MoaWQs IHN1YmlkLCBleCkgMQorKyMgZGVmaW5lIGZpcHNfcG9zdF9mYWlsZWQoaWQsIHN1YmlkLCBleCkg MQorKyMgZGVmaW5lIGZpcHNfcG9zdF9jb3JydXB0KGlkLCBzdWJpZCwgZXgpIDEKKysjIGRlZmlu ZSBmaXBzX3Bvc3Rfc3RhdHVzKCkgMQorKworKyMgaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyMg ZW5kaWYKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNf bWQuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfbWQuYworLS0tIG9wZW5z c2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfbWQuYy5maXBzCTIwMTYtMDUtMDMgMTY6NTc6NTgu ODI5MzIxMTgxICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19tZC5j CTIwMTYtMDUtMDMgMTY6NTc6NTguODI5MzIxMTgxICswMjAwCitAQCAtMCwwICsxLDE0NCBAQAor Ky8qIGZpcHMvZXZwL2ZpcHNfbWQuYyAqLworKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVy aWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysg KiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0 aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAq IAorKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVy Y2lhbCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhl YXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2Rl IGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhh c2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1 bWVudGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVk IGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIg aXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAqIENvcHlyaWdodCBy ZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGlu CisrICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2Fn ZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmli dXRpb24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2Vk LgorKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHBy b2dyYW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFs KSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1v ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93 aW5nIGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2 ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29m dHdhcmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdy aXR0ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAg IFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMg ZnJvbSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGlj IHJlbGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmlj IGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRp cmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRn ZW1lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5 IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJF IElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7IExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor KyAqIFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24g dGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZh dGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5u b3Qgc2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRp b24gbGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICov CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBUaGUgT3BlblNT TCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g CisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1 Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorKyAqICAgIHRoZSBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKysgKiAgICBk aXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRp b25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3Bs YXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGlu Y2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAg Zm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQ cm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHBy b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKysgKiAgICBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0 CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorKyAqCisrICogNS4gUHJvZHVjdHMg ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisr ICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJp b3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKysg KgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0 YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRnbWVudDoKKysgKiAgICAiVGhpcyBw cm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0 CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVu U1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisrICogSU1QTElF RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBP cGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisrICogTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisrICogTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKysgKiBPRiBUSEUgUE9TU0lC SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKgorKyAqIFRoaXMgcHJv ZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3Vu ZworKyAqIChlYXlAY3J5cHRzb2Z0LmNvbSkuICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdh cmUgd3JpdHRlbiBieSBUaW0KKysgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKysgKgor KyAqLworKworKy8qIE1pbmltYWwgc3RhbmRhbG9uZSBGSVBTIHZlcnNpb25zIG9mIERpZ2VzdCBv cGVyYXRpb25zICovCisrCisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8 c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0 cy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysKKytjb25zdCBFVlBfTUQgKkZJUFNfZ2V0 X2RpZ2VzdGJ5bmlkKGludCBuaWQpCisreworKyAgICBzd2l0Y2ggKG5pZCkgeworKyAgICBjYXNl IE5JRF9zaGExOgorKyAgICAgICAgcmV0dXJuIEVWUF9zaGExKCk7CisrCisrICAgIGNhc2UgTklE X3NoYTIyNDoKKysgICAgICAgIHJldHVybiBFVlBfc2hhMjI0KCk7CisrCisrICAgIGNhc2UgTklE X3NoYTI1NjoKKysgICAgICAgIHJldHVybiBFVlBfc2hhMjU2KCk7CisrCisrICAgIGNhc2UgTklE X3NoYTM4NDoKKysgICAgICAgIHJldHVybiBFVlBfc2hhMzg0KCk7CisrCisrICAgIGNhc2UgTklE X3NoYTUxMjoKKysgICAgICAgIHJldHVybiBFVlBfc2hhNTEyKCk7CisrCisrICAgIGRlZmF1bHQ6 CisrICAgICAgICByZXR1cm4gTlVMTDsKKysgICAgfQorK30KK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjJoL2NyeXB0by9maXBzL2ZpcHNfcG9zdC5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2Zp cHMvZmlwc19wb3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX3Bvc3Qu Yy5maXBzCTIwMTYtMDUtMDMgMTY6NTc6NTguODI5MzIxMTgxICswMjAwCisrKysgb3BlbnNzbC0x LjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19wb3N0LmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MjkzMjEx ODEgKzAyMDAKK0BAIC0wLDAgKzEsMjAxIEBACisrLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmln aHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4K KysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3Qg YmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0 aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRo ZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZv cm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVk Z21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQg YnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9v bGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJ UyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICog RVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ TiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJV VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAq IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs IEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT IE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5H IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisr CisrI2RlZmluZSBPUEVOU1NMX0ZJUFNBUEkKKysKKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8u aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19y YW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYmlv Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2RzYS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5j bHVkZSA8bGltaXRzLmg+CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKworKy8qIFBvd2VyIG9u IHNlbGYgdGVzdCAoUE9TVCkgc3VwcG9ydCBmdW5jdGlvbnMgKi8KKysKKysjIGluY2x1ZGUgPG9w ZW5zc2wvZmlwcy5oPgorKyMgaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrLyogUnVuIGFsbCBz ZWxmdGVzdHMgKi8KKytpbnQgRklQU19zZWxmdGVzdCh2b2lkKQorK3sKKysgICAgaW50IHJ2ID0g MTsKKysgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2RyYmcoKSkKKysgICAgICAgIHJ2ID0gMDsKKysg ICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X3g5MzEoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYg KCFGSVBTX3NlbGZ0ZXN0X3NoYTEoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYgKCFGSVBT X3NlbGZ0ZXN0X3NoYTIoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYgKCFGSVBTX3NlbGZ0 ZXN0X2htYWMoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2Nt YWMoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgaWYgKCFGSVBTX3NlbGZ0ZXN0X2FlcygpKQor KyAgICAgICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX2NjbSgpKQorKyAg ICAgICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX2djbSgpKQorKyAgICAg ICAgcnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfYWVzX3h0cygpKQorKyAgICAgICAg cnYgPSAwOworKyAgICBpZiAoIUZJUFNfc2VsZnRlc3RfZGVzKCkpCisrICAgICAgICBydiA9IDA7 CisrICAgIGlmICghRklQU19zZWxmdGVzdF9yc2EoKSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAg aWYgKCFGSVBTX3NlbGZ0ZXN0X2RzYSgpKQorKyAgICAgICAgcnYgPSAwOworKyAgICByZXR1cm4g cnY7CisrfQorKworKy8qIEdlbmVyYWxpemVkIHB1YmxpYyBrZXkgdGVzdCByb3V0aW5lLiBTaWdu cyBhbmQgdmVyaWZpZXMgdGhlIGRhdGEKKysgKiBzdXBwbGllZCBpbiB0YnMgdXNpbmcgbWVzYWdl IGRpZ2VzdCBtZCBhbmQgc2V0dGluZyBvcHRpb24gZGlnZXN0CisrICogZmxhZ3MgbWRfZmxhZ3Mu IElmIHRoZSAna2F0JyBwYXJhbWV0ZXIgaXMgbm90IE5VTEwgaXQgd2lsbAorKyAqIGFkZGl0aW9u YWxseSBjaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgaXQ6IGEga25vd24gYW5zd2VyIHRlc3QK KysgKiBUaGUgc3RyaW5nICJmYWlsX3N0ciIgaXMgdXNlZCBmb3IgaWRlbnRpZmljYXRpb24gcHVy cG9zZXMgaW4gY2FzZQorKyAqIG9mIGZhaWx1cmUuIElmICJwa2V5IiBpcyBOVUxMIGp1c3QgcGVy Zm9ybSBhIG1lc3NhZ2UgZGlnZXN0IGNoZWNrLgorKyAqLworKworK2ludCBmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QoRVZQX1BLRVkgKnBrZXksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YnMsIGludCB0YnNsZW4sCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprYXQsIHVuc2lnbmVkIGludCBrYXRs ZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBFVlBfTUQgKmRpZ2VzdCwg dW5zaWduZWQgaW50IG1kX2ZsYWdzLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqZmFpbF9zdHIpCisreworKyAgICBpbnQgcmV0ID0gMDsKKysgICAgdW5zaWduZWQg Y2hhciBzaWd0bXBbMjU2XSwgKnNpZyA9IHNpZ3RtcDsKKysgICAgdW5zaWduZWQgaW50IHNpZ2xl bjsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOwor KworKyAgICBpZiAoZGlnZXN0ID09IE5VTEwpCisrICAgICAgICBkaWdlc3QgPSBFVlBfc2hhMjU2 KCk7CisrCisrICAgIGlmICgocGtleS0+dHlwZSA9PSBFVlBfUEtFWV9SU0EpCisrICAgICAgICAm JiAoUlNBX3NpemUocGtleS0+cGtleS5yc2EpID4gc2l6ZW9mKHNpZ3RtcCkpKSB7CisrICAgICAg ICBzaWcgPSBPUEVOU1NMX21hbGxvYyhSU0Ffc2l6ZShwa2V5LT5wa2V5LnJzYSkpOworKyAgICAg ICAgaWYgKCFzaWcpIHsKKysgICAgICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lH TkFUVVJFX1RFU1QsIEVSUl9SX01BTExPQ19GQUlMVVJFKTsKKysgICAgICAgICAgICByZXR1cm4g MDsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBpZiAodGJzbGVuID09IC0xKQorKyAgICAg ICAgdGJzbGVuID0gc3RybGVuKChjaGFyICopdGJzKTsKKysKKysgICAgaWYgKG1kX2ZsYWdzKQor KyAgICAgICAgRVZQX01EX0NUWF9zZXRfZmxhZ3MoJm1jdHgsIG1kX2ZsYWdzKTsKKysKKysgICAg aWYgKCFFVlBfU2lnbkluaXRfZXgoJm1jdHgsIGRpZ2VzdCwgTlVMTCkpCisrICAgICAgICBnb3Rv IGVycm9yOworKyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCB0YnMsIHRic2xlbikpCisr ICAgICAgICBnb3RvIGVycm9yOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIHNpZywg JnNpZ2xlbiwgcGtleSkpCisrICAgICAgICBnb3RvIGVycm9yOworKworKyAgICBpZiAoa2F0ICYm ICgoc2lnbGVuICE9IGthdGxlbikgfHwgbWVtY21wKGthdCwgc2lnLCBrYXRsZW4pKSkKKysgICAg ICAgIGdvdG8gZXJyb3I7CisrCisrICAgIGlmICghRVZQX1ZlcmlmeUluaXRfZXgoJm1jdHgsIGRp Z2VzdCwgTlVMTCkpCisrICAgICAgICBnb3RvIGVycm9yOworKyAgICBpZiAoIUVWUF9WZXJpZnlV cGRhdGUoJm1jdHgsIHRicywgdGJzbGVuKSkKKysgICAgICAgIGdvdG8gZXJyb3I7CisrICAgIHJl dCA9IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgc2lnLCBzaWdsZW4sIHBrZXkpOworKworKyBlcnJv cjoKKysgICAgaWYgKHNpZyAhPSBzaWd0bXApCisrICAgICAgICBPUEVOU1NMX2ZyZWUoc2lnKTsK KysgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysgICAgaWYgKHJldCAhPSAxKSB7Cisr ICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1BLRVlfU0lHTkFUVVJFX1RFU1QsIEZJUFNfUl9U RVNUX0ZBSUxVUkUpOworKyAgICAgICAgaWYgKGZhaWxfc3RyKQorKyAgICAgICAgICAgIEVSUl9h ZGRfZXJyb3JfZGF0YSgyLCAiVHlwZT0iLCBmYWlsX3N0cik7CisrICAgICAgICByZXR1cm4gMDsK KysgICAgfQorKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogR2VuZXJhbGl6ZWQgc3ltbWV0cmlj IGNpcGhlciB0ZXN0IHJvdXRpbmUuIEVuY3J5cHQgZGF0YSwgdmVyaWZ5IHJlc3VsdAorKyAqIGFn YWluc3Qga25vd24gYW5zd2VyLCBkZWNyeXB0IGFuZCBjb21wYXJlIHdpdGggb3JpZ2luYWwgcGxh aW50ZXh0LgorKyAqLworKworK2ludCBmaXBzX2NpcGhlcl90ZXN0KEVWUF9DSVBIRVJfQ1RYICpj dHgsIGNvbnN0IEVWUF9DSVBIRVIgKmNpcGhlciwKKysgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICprZXksCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqaXYsCisrICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq cGxhaW50ZXh0LAorKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNp cGhlcnRleHQsIGludCBsZW4pCisreworKyAgICB1bnNpZ25lZCBjaGFyIHBsdG1wW0ZJUFNfTUFY X0NJUEhFUl9URVNUX1NJWkVdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpdG1wW0ZJUFNfTUFYX0NJ UEhFUl9URVNUX1NJWkVdOworKworKyAgICBPUEVOU1NMX2Fzc2VydChsZW4gPD0gRklQU19NQVhf Q0lQSEVSX1RFU1RfU0laRSk7CisrICAgIG1lbXNldChwbHRtcCwgMCwgRklQU19NQVhfQ0lQSEVS X1RFU1RfU0laRSk7CisrICAgIG1lbXNldChjaXRtcCwgMCwgRklQU19NQVhfQ0lQSEVSX1RFU1Rf U0laRSk7CisrCisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwg a2V5LCBpdiwgMSkgPD0gMCkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoRVZQX0NpcGhl cihjdHgsIGNpdG1wLCBwbGFpbnRleHQsIGxlbikgPD0gMCkKKysgICAgICAgIHJldHVybiAwOwor KyAgICBpZiAobWVtY21wKGNpdG1wLCBjaXBoZXJ0ZXh0LCBsZW4pKQorKyAgICAgICAgcmV0dXJu IDA7CisrICAgIGlmIChFVlBfQ2lwaGVySW5pdF9leChjdHgsIGNpcGhlciwgTlVMTCwga2V5LCBp diwgMCkgPD0gMCkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAoRVZQX0NpcGhlcihjdHgs IHBsdG1wLCBjaXRtcCwgbGVuKSA8PSAwKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICht ZW1jbXAocGx0bXAsIHBsYWludGV4dCwgbGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBy ZXR1cm4gMTsKKyt9CisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlw cy9maXBzX3JhbmQuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5j CistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmMuZmlwcwkyMDE2LTA1 LTAzIDE2OjU3OjU4LjgzMDMyMTIwNCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9m aXBzL2ZpcHNfcmFuZC5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODMwMzIxMjA0ICswMjAwCitAQCAt MCwwICsxLDQyOCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0IChjKSAyMDA3IFRo ZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKyAqCisrICogUmVkaXN0 cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv bGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKgorKyAqIDEuIFJlZGlzdHJpYnV0 aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisrICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0 IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisrICogICAgdGhl IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor KyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlh bHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworKyAqICAgIHNvZnR3YXJlIG11 c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHBy b2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QK KysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5z c2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJP cGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKysgKiAgICBlbmRvcnNlIG9yIHBy b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorKyAqICAg IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNl IGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisrICoKKysgKiA1LiBQ cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3Bl blNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0 aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9q ZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIg bXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAgIGFja25vd2xlZGdtZW50OgorKyAqICAg ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NM IFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93 d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJ TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKysg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKysgKiBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKysgKiBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK KysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg V0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisrICogQVJJU0lORyBJTiBBTlkgV0FZIE9V VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorKyAqIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKy8qCisrICogVGhp cyBpcyBhIEZJUFMgYXBwcm92ZWQgQUVTIFBSTkcgYmFzZWQgb24gQU5TSSBYOS4zMSBBLjIuNC4K KysgKi8KKysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSAiZV9vcy5oIgor KworKy8qIElmIHdlIGRvbid0IGRlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVELCBzdHJ1Y3Qg dGltZXZhbCB3b24ndAorKyAgIGJlIGRlZmluZWQgYW5kIGdldHRpbWVvZmRheSgpIHdvbid0IGJl IGRlY2xhcmVkIHdpdGggc3RyaWN0IGNvbXBpbGVycworKyAgIGxpa2UgREVDIEMgaW4gQU5TSSBD IG1vZGUuICAqLworKyNpZm5kZWYgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRAorKyMgZGVmaW5lIF9Y T1BFTl9TT1VSQ0VfRVhURU5ERUQgMQorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL3Jh bmQuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9hZXMuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzX3JhbmQuaD4KKysjaWYgIShkZWZpbmVkKE9QRU5T U0xfU1lTX1dJTjMyKSB8fCBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpKQorKyMgaW5jbHVk ZSA8c3lzL3RpbWUuaD4KKysjZW5kaWYKKysjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktT KQorKyMgaW5jbHVkZSA8dGltZS5oPgorKyNlbmRpZgorKyNpbmNsdWRlIDxhc3NlcnQuaD4KKysj aWZuZGVmIE9QRU5TU0xfU1lTX1dJTjMyCisrIyBpZmRlZiBPUEVOU1NMX1VOSVNURAorKyMgIGlu Y2x1ZGUgT1BFTlNTTF9VTklTVEQKKysjIGVsc2UKKysjICBpbmNsdWRlIDx1bmlzdGQuaD4KKysj IGVuZGlmCisrI2VuZGlmCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3Ns L2ZpcHMuaD4KKysjaW5jbHVkZSAiZmlwc19sb2NsLmgiCisrCisrI2lmZGVmIE9QRU5TU0xfRklQ UworKworK3ZvaWQgKk9QRU5TU0xfc3RkZXJyKHZvaWQpOworKworKyMgZGVmaW5lIEFFU19CTE9D S19MRU5HVEggICAgICAgIDE2CisrCisrLyogQUVTIEZJUFMgUFJORyBpbXBsZW1lbnRhdGlvbiAq LworKworK3R5cGVkZWYgc3RydWN0IHsKKysgICAgaW50IHNlZWRlZDsKKysgICAgaW50IGtleWVk OworKyAgICBpbnQgdGVzdF9tb2RlOworKyAgICBpbnQgc2Vjb25kOworKyAgICBpbnQgZXJyb3I7 CisrICAgIHVuc2lnbmVkIGxvbmcgY291bnRlcjsKKysgICAgQUVTX0tFWSBrczsKKysgICAgaW50 IHZwb3M7CisrICAgIC8qIFRlbXBvcmFyeSBzdG9yYWdlIGZvciBrZXkgaWYgaXQgZXF1YWxzIHNl ZWQgbGVuZ3RoICovCisrICAgIHVuc2lnbmVkIGNoYXIgdG1wX2tleVtBRVNfQkxPQ0tfTEVOR1RI XTsKKysgICAgdW5zaWduZWQgY2hhciBWW0FFU19CTE9DS19MRU5HVEhdOworKyAgICB1bnNpZ25l ZCBjaGFyIERUW0FFU19CTE9DS19MRU5HVEhdOworKyAgICB1bnNpZ25lZCBjaGFyIGxhc3RbQUVT X0JMT0NLX0xFTkdUSF07CisrfSBGSVBTX1BSTkdfQ1RYOworKworK3N0YXRpYyBGSVBTX1BSTkdf Q1RYIHNjdHg7CisrCisrc3RhdGljIGludCBmaXBzX3BybmdfZmFpbCA9IDA7CisrCisrdm9pZCBG SVBTX3g5MzFfc3RpY2soaW50IG9ub2ZmKQorK3sKKysgICAgZmlwc19wcm5nX2ZhaWwgPSBvbm9m ZjsKKyt9CisrCisrdm9pZCBGSVBTX3JuZ19zdGljayh2b2lkKQorK3sKKysgICAgRklQU194OTMx X3N0aWNrKDEpOworK30KKysKKytzdGF0aWMgdm9pZCBmaXBzX3JhbmRfcHJuZ19yZXNldChGSVBT X1BSTkdfQ1RYICogY3R4KQorK3sKKysgICAgY3R4LT5zZWVkZWQgPSAwOworKyAgICBjdHgtPmtl eWVkID0gMDsKKysgICAgY3R4LT50ZXN0X21vZGUgPSAwOworKyAgICBjdHgtPmNvdW50ZXIgPSAw OworKyAgICBjdHgtPnNlY29uZCA9IDA7CisrICAgIGN0eC0+ZXJyb3IgPSAwOworKyAgICBjdHgt PnZwb3MgPSAwOworKyAgICBPUEVOU1NMX2NsZWFuc2UoY3R4LT5WLCBBRVNfQkxPQ0tfTEVOR1RI KTsKKysgICAgT1BFTlNTTF9jbGVhbnNlKCZjdHgtPmtzLCBzaXplb2YoQUVTX0tFWSkpOworK30K KysKKytzdGF0aWMgaW50IGZpcHNfc2V0X3Bybmdfa2V5KEZJUFNfUFJOR19DVFggKiBjdHgsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVu c2lnbmVkIGludCBrZXlsZW4pCisreworKyAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkg eworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19TRVRfUFJOR19LRVksIEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgaWYgKGtleWxl biAhPSAxNiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKSB7CisrICAgICAgICAvKiBl cnJvcjogaW52YWxpZCBrZXkgc2l6ZSAqLworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysg ICAgQUVTX3NldF9lbmNyeXB0X2tleShrZXksIGtleWxlbiA8PCAzLCAmY3R4LT5rcyk7CisrICAg IGlmIChrZXlsZW4gPT0gMTYpIHsKKysgICAgICAgIG1lbWNweShjdHgtPnRtcF9rZXksIGtleSwg MTYpOworKyAgICAgICAgY3R4LT5rZXllZCA9IDI7CisrICAgIH0gZWxzZQorKyAgICAgICAgY3R4 LT5rZXllZCA9IDE7CisrICAgIGN0eC0+c2VlZGVkID0gMDsKKysgICAgY3R4LT5zZWNvbmQgPSAw OworKyAgICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludCBmaXBzX3NldF9wcm5nX3NlZWQo RklQU19QUk5HX0NUWCAqIGN0eCwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICpzZWVkLCB1bnNpZ25lZCBpbnQgc2VlZGxlbikKKyt7CisrICAgIHVu c2lnbmVkIGludCBpOworKyAgICBpZiAoIWN0eC0+a2V5ZWQpCisrICAgICAgICByZXR1cm4gMDsK KysgICAgLyogSW4gdGVzdCBtb2RlIHNlZWQgaXMganVzdCBzdXBwbGllZCBkYXRhICovCisrICAg IGlmIChjdHgtPnRlc3RfbW9kZSkgeworKyAgICAgICAgaWYgKHNlZWRsZW4gIT0gQUVTX0JMT0NL X0xFTkdUSCkKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIG1lbWNweShjdHgtPlYs IHNlZWQsIEFFU19CTE9DS19MRU5HVEgpOworKyAgICAgICAgY3R4LT5zZWVkZWQgPSAxOworKyAg ICAgICAgcmV0dXJuIDE7CisrICAgIH0KKysgICAgLyogT3V0c2lkZSB0ZXN0IG1vZGUgWE9SIHN1 cHBsaWVkIGRhdGEgd2l0aCBleGlzdGluZyBzZWVkICovCisrICAgIGZvciAoaSA9IDA7IGkgPCBz ZWVkbGVuOyBpKyspIHsKKysgICAgICAgIGN0eC0+VltjdHgtPnZwb3MrK10gXj0gc2VlZFtpXTsK KysgICAgICAgIGlmIChjdHgtPnZwb3MgPT0gQUVTX0JMT0NLX0xFTkdUSCkgeworKyAgICAgICAg ICAgIGN0eC0+dnBvcyA9IDA7CisrICAgICAgICAgICAgLyogU3BlY2lhbCBjYXNlIGlmIGZpcnN0 IHNlZWQgYW5kIGtleSBsZW5ndGggZXF1YWxzCisrICAgICAgICAgICAgICogYmxvY2sgc2l6ZSBj aGVjayBrZXkgYW5kIHNlZWQgZG8gbm90IG1hdGNoLgorKyAgICAgICAgICAgICAqLworKyAgICAg ICAgICAgIGlmIChjdHgtPmtleWVkID09IDIpIHsKKysgICAgICAgICAgICAgICAgaWYgKCFtZW1j bXAoY3R4LT50bXBfa2V5LCBjdHgtPlYsIDE2KSkgeworKyAgICAgICAgICAgICAgICAgICAgUkFO RGVycihSQU5EX0ZfRklQU19TRVRfUFJOR19TRUVELAorKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSk7CisrICAgICAgICAgICAg ICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICAgICAgfQorKyAgICAgICAgICAgICAgICBP UEVOU1NMX2NsZWFuc2UoY3R4LT50bXBfa2V5LCAxNik7CisrICAgICAgICAgICAgICAgIGN0eC0+ a2V5ZWQgPSAxOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBjdHgtPnNlZWRlZCA9IDE7 CisrICAgICAgICB9CisrICAgIH0KKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBpbnQg Zmlwc19zZXRfdGVzdF9tb2RlKEZJUFNfUFJOR19DVFggKiBjdHgpCisreworKyAgICBpZiAoY3R4 LT5rZXllZCkgeworKyAgICAgICAgUkFORGVycihSQU5EX0ZfRklQU19TRVRfVEVTVF9NT0RFLCBS QU5EX1JfUFJOR19LRVlFRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICBjdHgt PnRlc3RfbW9kZSA9IDE7CisrICAgIHJldHVybiAxOworK30KKysKKytpbnQgRklQU194OTMxX3Rl c3RfbW9kZSh2b2lkKQorK3sKKysgICAgcmV0dXJuIGZpcHNfc2V0X3Rlc3RfbW9kZSgmc2N0eCk7 CisrfQorKworK2ludCBGSVBTX3JhbmRfdGVzdF9tb2RlKHZvaWQpCisreworKyAgICByZXR1cm4g Zmlwc19zZXRfdGVzdF9tb2RlKCZzY3R4KTsKKyt9CisrCisraW50IEZJUFNfeDkzMV9zZXRfZHQo dW5zaWduZWQgY2hhciAqZHQpCisreworKyAgICBpZiAoIXNjdHgudGVzdF9tb2RlKSB7CisrICAg ICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1g5MzFfU0VUX0RULCBSQU5EX1JfTk9UX0lOX1RFU1Rf TU9ERSk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICBtZW1jcHkoc2N0eC5EVCwg ZHQsIEFFU19CTE9DS19MRU5HVEgpOworKyAgICByZXR1cm4gMTsKKyt9CisrCisraW50IEZJUFNf cmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpCisreworKyAgICBpZiAoIXNjdHgudGVzdF9t b2RlKSB7CisrICAgICAgICBSQU5EZXJyKFJBTkRfRl9GSVBTX1JBTkRfU0VUX0RULCBSQU5EX1Jf Tk9UX0lOX1RFU1RfTU9ERSk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICBtZW1j cHkoc2N0eC5EVCwgZHQsIEFFU19CTE9DS19MRU5HVEgpOworKyAgICByZXR1cm4gMTsKKyt9Cisr Cisrdm9pZCBGSVBTX2dldF90aW1ldmVjKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9u ZyAqcGN0cikKKyt7CisrIyBpZmRlZiBPUEVOU1NMX1NZU19XSU4zMgorKyAgICBGSUxFVElNRSBm dDsKKysjIGVsaWYgZGVmaW5lZChPUEVOU1NMX1NZU19WWFdPUktTKQorKyAgICBzdHJ1Y3QgdGlt ZXNwZWMgdHM7CisrIyBlbHNlCisrICAgIHN0cnVjdCB0aW1ldmFsIHR2OworKyMgZW5kaWYKKysK KysjIGlmbmRlZiBHRVRQSURfSVNfTUVBTklOR0xFU1MKKysgICAgdW5zaWduZWQgbG9uZyBwaWQ7 CisrIyBlbmRpZgorKworKyMgaWZkZWYgT1BFTlNTTF9TWVNfV0lOMzIKKysgICAgR2V0U3lzdGVt VGltZUFzRmlsZVRpbWUoJmZ0KTsKKysgICAgYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpKGZ0LmR3 SGlnaERhdGVUaW1lICYgMHhmZik7CisrICAgIGJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoZnQu ZHdIaWdoRGF0ZVRpbWUgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzJdID0gKHVuc2lnbmVkIGNo YXIpKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAxNikgJiAweGZmKTsKKysgICAgYnVmWzNdID0gKHVu c2lnbmVkIGNoYXIpKChmdC5kd0hpZ2hEYXRlVGltZSA+PiAyNCkgJiAweGZmKTsKKysgICAgYnVm WzRdID0gKHVuc2lnbmVkIGNoYXIpKGZ0LmR3TG93RGF0ZVRpbWUgJiAweGZmKTsKKysgICAgYnVm WzVdID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0xvd0RhdGVUaW1lID4+IDgpICYgMHhmZik7Cisr ICAgIGJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSgoZnQuZHdMb3dEYXRlVGltZSA+PiAxNikgJiAw eGZmKTsKKysgICAgYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpKChmdC5kd0xvd0RhdGVUaW1lID4+ IDI0KSAmIDB4ZmYpOworKyMgZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX1ZYV09SS1MpCisrICAg IGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cyk7CisrICAgIGJ1ZlswXSA9ICh1bnNp Z25lZCBjaGFyKSh0cy50dl9zZWMgJiAweGZmKTsKKysgICAgYnVmWzFdID0gKHVuc2lnbmVkIGNo YXIpKCh0cy50dl9zZWMgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzJdID0gKHVuc2lnbmVkIGNo YXIpKCh0cy50dl9zZWMgPj4gMTYpICYgMHhmZik7CisrICAgIGJ1ZlszXSA9ICh1bnNpZ25lZCBj aGFyKSgodHMudHZfc2VjID4+IDI0KSAmIDB4ZmYpOworKyAgICBidWZbNF0gPSAodW5zaWduZWQg Y2hhcikodHMudHZfbnNlYyAmIDB4ZmYpOworKyAgICBidWZbNV0gPSAodW5zaWduZWQgY2hhciko KHRzLnR2X25zZWMgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzZdID0gKHVuc2lnbmVkIGNoYXIp KCh0cy50dl9uc2VjID4+IDE2KSAmIDB4ZmYpOworKyAgICBidWZbN10gPSAodW5zaWduZWQgY2hh cikoKHRzLnR2X25zZWMgPj4gMjQpICYgMHhmZik7CisrIyBlbHNlCisrICAgIGdldHRpbWVvZmRh eSgmdHYsIE5VTEwpOworKyAgICBidWZbMF0gPSAodW5zaWduZWQgY2hhcikodHYudHZfc2VjICYg MHhmZik7CisrICAgIGJ1ZlsxXSA9ICh1bnNpZ25lZCBjaGFyKSgodHYudHZfc2VjID4+IDgpICYg MHhmZik7CisrICAgIGJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKSgodHYudHZfc2VjID4+IDE2KSAm IDB4ZmYpOworKyAgICBidWZbM10gPSAodW5zaWduZWQgY2hhcikoKHR2LnR2X3NlYyA+PiAyNCkg JiAweGZmKTsKKysgICAgYnVmWzRdID0gKHVuc2lnbmVkIGNoYXIpKHR2LnR2X3VzZWMgJiAweGZm KTsKKysgICAgYnVmWzVdID0gKHVuc2lnbmVkIGNoYXIpKCh0di50dl91c2VjID4+IDgpICYgMHhm Zik7CisrICAgIGJ1Zls2XSA9ICh1bnNpZ25lZCBjaGFyKSgodHYudHZfdXNlYyA+PiAxNikgJiAw eGZmKTsKKysgICAgYnVmWzddID0gKHVuc2lnbmVkIGNoYXIpKCh0di50dl91c2VjID4+IDI0KSAm IDB4ZmYpOworKyMgZW5kaWYKKysgICAgYnVmWzhdID0gKHVuc2lnbmVkIGNoYXIpKCpwY3RyICYg MHhmZik7CisrICAgIGJ1Zls5XSA9ICh1bnNpZ25lZCBjaGFyKSgoKnBjdHIgPj4gOCkgJiAweGZm KTsKKysgICAgYnVmWzEwXSA9ICh1bnNpZ25lZCBjaGFyKSgoKnBjdHIgPj4gMTYpICYgMHhmZik7 CisrICAgIGJ1ZlsxMV0gPSAodW5zaWduZWQgY2hhcikoKCpwY3RyID4+IDI0KSAmIDB4ZmYpOwor KworKyAgICAoKnBjdHIpKys7CisrCisrIyBpZm5kZWYgR0VUUElEX0lTX01FQU5JTkdMRVNTCisr ICAgIHBpZCA9ICh1bnNpZ25lZCBsb25nKWdldHBpZCgpOworKyAgICBidWZbMTJdID0gKHVuc2ln bmVkIGNoYXIpKHBpZCAmIDB4ZmYpOworKyAgICBidWZbMTNdID0gKHVuc2lnbmVkIGNoYXIpKChw aWQgPj4gOCkgJiAweGZmKTsKKysgICAgYnVmWzE0XSA9ICh1bnNpZ25lZCBjaGFyKSgocGlkID4+ IDE2KSAmIDB4ZmYpOworKyAgICBidWZbMTVdID0gKHVuc2lnbmVkIGNoYXIpKChwaWQgPj4gMjQp ICYgMHhmZik7CisrIyBlbmRpZgorK30KKysKKytzdGF0aWMgaW50IGZpcHNfcmFuZChGSVBTX1BS TkdfQ1RYICogY3R4LAorKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwg dW5zaWduZWQgaW50IG91dGxlbikKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIgUltBRVNfQkxPQ0tf TEVOR1RIXSwgSVtBRVNfQkxPQ0tfTEVOR1RIXTsKKysgICAgdW5zaWduZWQgY2hhciB0bXBbQUVT X0JMT0NLX0xFTkdUSF07CisrICAgIGludCBpOworKyAgICBpZiAoY3R4LT5lcnJvcikgeworKyAg ICAgICAgUkFORGVycihSQU5EX0ZfRklQU19SQU5ELCBSQU5EX1JfUFJOR19FUlJPUik7CisrICAg ICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICBpZiAoIWN0eC0+a2V5ZWQpIHsKKysgICAgICAg IFJBTkRlcnIoUkFORF9GX0ZJUFNfUkFORCwgUkFORF9SX05PX0tFWV9TRVQpOworKyAgICAgICAg cmV0dXJuIDA7CisrICAgIH0KKysgICAgaWYgKCFjdHgtPnNlZWRlZCkgeworKyAgICAgICAgUkFO RGVycihSQU5EX0ZfRklQU19SQU5ELCBSQU5EX1JfUFJOR19OT1RfU0VFREVEKTsKKysgICAgICAg IHJldHVybiAwOworKyAgICB9CisrICAgIGZvciAoOzspIHsKKysgICAgICAgIGlmICghY3R4LT50 ZXN0X21vZGUpCisrICAgICAgICAgICAgRklQU19nZXRfdGltZXZlYyhjdHgtPkRULCAmY3R4LT5j b3VudGVyKTsKKysgICAgICAgIEFFU19lbmNyeXB0KGN0eC0+RFQsIEksICZjdHgtPmtzKTsKKysg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfTEVOR1RIOyBpKyspCisrICAgICAgICAg ICAgdG1wW2ldID0gSVtpXSBeIGN0eC0+VltpXTsKKysgICAgICAgIEFFU19lbmNyeXB0KHRtcCwg UiwgJmN0eC0+a3MpOworKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19MRU5HVEg7 IGkrKykKKysgICAgICAgICAgICB0bXBbaV0gPSBSW2ldIF4gSVtpXTsKKysgICAgICAgIEFFU19l bmNyeXB0KHRtcCwgY3R4LT5WLCAmY3R4LT5rcyk7CisrICAgICAgICAvKiBDb250aW51b3VzIFBS TkcgdGVzdCAqLworKyAgICAgICAgaWYgKGN0eC0+c2Vjb25kKSB7CisrICAgICAgICAgICAgaWYg KGZpcHNfcHJuZ19mYWlsKQorKyAgICAgICAgICAgICAgICBtZW1jcHkoY3R4LT5sYXN0LCBSLCBB RVNfQkxPQ0tfTEVOR1RIKTsKKysgICAgICAgICAgICBpZiAoIW1lbWNtcChSLCBjdHgtPmxhc3Qs IEFFU19CTE9DS19MRU5HVEgpKSB7CisrICAgICAgICAgICAgICAgIFJBTkRlcnIoUkFORF9GX0ZJ UFNfUkFORCwgUkFORF9SX1BSTkdfU1RVQ0spOworKyAgICAgICAgICAgICAgICBjdHgtPmVycm9y ID0gMTsKKysgICAgICAgICAgICAgICAgZmlwc19zZXRfc2VsZnRlc3RfZmFpbCgpOworKyAgICAg ICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgICAgICB9CisrICAgICAgICB9CisrICAgICAg ICBtZW1jcHkoY3R4LT5sYXN0LCBSLCBBRVNfQkxPQ0tfTEVOR1RIKTsKKysgICAgICAgIGlmICgh Y3R4LT5zZWNvbmQpIHsKKysgICAgICAgICAgICBjdHgtPnNlY29uZCA9IDE7CisrICAgICAgICAg ICAgaWYgKCFjdHgtPnRlc3RfbW9kZSkKKysgICAgICAgICAgICAgICAgY29udGludWU7CisrICAg ICAgICB9CisrCisrICAgICAgICBpZiAob3V0bGVuIDw9IEFFU19CTE9DS19MRU5HVEgpIHsKKysg ICAgICAgICAgICBtZW1jcHkob3V0LCBSLCBvdXRsZW4pOworKyAgICAgICAgICAgIGJyZWFrOwor KyAgICAgICAgfQorKworKyAgICAgICAgbWVtY3B5KG91dCwgUiwgQUVTX0JMT0NLX0xFTkdUSCk7 CisrICAgICAgICBvdXQgKz0gQUVTX0JMT0NLX0xFTkdUSDsKKysgICAgICAgIG91dGxlbiAtPSBB RVNfQkxPQ0tfTEVOR1RIOworKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysKKytpbnQgRklQ U194OTMxX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKQorK3sK KysgICAgaW50IHJldDsKKysgICAgQ1JZUFRPX3dfbG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysg ICAgcmV0ID0gZmlwc19zZXRfcHJuZ19rZXkoJnNjdHgsIGtleSwga2V5bGVuKTsKKysgICAgQ1JZ UFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKyAgICByZXR1cm4gcmV0OworK30KKysK KytpbnQgRklQU19yYW5kX3NldF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBGSVBTX1JB TkRfU0laRV9UIGtleWxlbikKKyt7CisrICAgIHJldHVybiBGSVBTX3g5MzFfc2V0X2tleShrZXks IGtleWxlbik7CisrfQorKworK2ludCBGSVBTX3g5MzFfc2VlZChjb25zdCB2b2lkICpzZWVkLCBp bnQgc2VlZGxlbikKKyt7CisrICAgIGludCByZXQ7CisrICAgIENSWVBUT193X2xvY2soQ1JZUFRP X0xPQ0tfUkFORCk7CisrICAgIHJldCA9IGZpcHNfc2V0X3Bybmdfc2VlZCgmc2N0eCwgc2VlZCwg c2VlZGxlbik7CisrICAgIENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysgICAg cmV0dXJuIHJldDsKKyt9CisrCisraW50IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpv dXQsIGludCBjb3VudCkKKyt7CisrICAgIGludCByZXQ7CisrICAgIENSWVBUT193X2xvY2soQ1JZ UFRPX0xPQ0tfUkFORCk7CisrICAgIHJldCA9IGZpcHNfcmFuZCgmc2N0eCwgb3V0LCBjb3VudCk7 CisrICAgIENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKysgICAgcmV0dXJuIHJl dDsKKyt9CisrCisraW50IEZJUFNfeDkzMV9zdGF0dXModm9pZCkKKyt7CisrICAgIGludCByZXQ7 CisrICAgIENSWVBUT19yX2xvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrICAgIHJldCA9IHNjdHgu c2VlZGVkOworKyAgICBDUllQVE9fcl91bmxvY2soQ1JZUFRPX0xPQ0tfUkFORCk7CisrICAgIHJl dHVybiByZXQ7CisrfQorKworK3ZvaWQgRklQU194OTMxX3Jlc2V0KHZvaWQpCisreworKyAgICBD UllQVE9fd19sb2NrKENSWVBUT19MT0NLX1JBTkQpOworKyAgICBmaXBzX3JhbmRfcHJuZ19yZXNl dCgmc2N0eCk7CisrICAgIENSWVBUT193X3VubG9jayhDUllQVE9fTE9DS19SQU5EKTsKKyt9Cisr Cisrc3RhdGljIGludCBmaXBzX2RvX3JhbmRfc2VlZChjb25zdCB2b2lkICpzZWVkLCBpbnQgc2Vl ZGxlbikKKyt7CisrICAgIEZJUFNfeDkzMV9zZWVkKHNlZWQsIHNlZWRsZW4pOworKyAgICByZXR1 cm4gMTsKKyt9CisrCisrc3RhdGljIGludCBmaXBzX2RvX3JhbmRfYWRkKGNvbnN0IHZvaWQgKnNl ZWQsIGludCBzZWVkbGVuLCBkb3VibGUgYWRkX2VudHJvcHkpCisreworKyAgICBGSVBTX3g5MzFf c2VlZChzZWVkLCBzZWVkbGVuKTsKKysgICAgcmV0dXJuIDE7CisrfQorKworK3N0YXRpYyBjb25z dCBSQU5EX01FVEhPRCByYW5kX3g5MzFfbWV0aCA9IHsKKysgICAgZmlwc19kb19yYW5kX3NlZWQs CisrICAgIEZJUFNfeDkzMV9ieXRlcywKKysgICAgRklQU194OTMxX3Jlc2V0LAorKyAgICBmaXBz X2RvX3JhbmRfYWRkLAorKyAgICBGSVBTX3g5MzFfYnl0ZXMsCisrICAgIEZJUFNfeDkzMV9zdGF0 dXMKKyt9OworKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpCisr eworKyAgICByZXR1cm4gJnJhbmRfeDkzMV9tZXRoOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfcmFuZC5oLmZpcHMgb3BlbnNzbC0xLjAu MmgvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlw cy9maXBzX3JhbmQuaC5maXBzCTIwMTYtMDUtMDMgMTY6NTc6NTguODMwMzIxMjA0ICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19yYW5kLmgJMjAxNi0wNS0wMyAxNjo1 Nzo1OC44MzAzMjEyMDQgKzAyMDAKK0BAIC0wLDAgKzEsMTYzIEBACisrLyogPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K KysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0 OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICog My4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv ZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1l cyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNl ZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Ig d3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBv cGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3 YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wi IGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJt aXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlv bnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICog ICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2Fy ZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhl IE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBB TkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICog SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT IChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklD VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK KysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg RVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor KyAqCisrICovCisrCisrI2lmbmRlZiBIRUFERVJfRklQU19SQU5EX0gKKysjIGRlZmluZSBIRUFE RVJfRklQU19SQU5EX0gKKysKKysjIGluY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrIyBpbmNsdWRl IDxvcGVuc3NsL2V2cC5oPgorKyMgaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CisrIyBpbmNsdWRl IDxvcGVuc3NsL3JhbmQuaD4KKysKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKworKyMgIGlmZGVm ICBfX2NwbHVzcGx1cworK2V4dGVybiAiQyIgeworKyMgIGVuZGlmCisrCisrICAgIGludCBGSVBT X3g5MzFfc2V0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pOworKyAg ICBpbnQgRklQU194OTMxX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnVtKTsKKysgICAgaW50 IEZJUFNfeDkzMV9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBvdXRsZW4pOworKworKyAg ICBpbnQgRklQU194OTMxX3Rlc3RfbW9kZSh2b2lkKTsKKysgICAgdm9pZCBGSVBTX3g5MzFfcmVz ZXQodm9pZCk7CisrICAgIGludCBGSVBTX3g5MzFfc2V0X2R0KHVuc2lnbmVkIGNoYXIgKmR0KTsK KysKKysgICAgaW50IEZJUFNfeDkzMV9zdGF0dXModm9pZCk7CisrCisrICAgIGNvbnN0IFJBTkRf TUVUSE9EICpGSVBTX3g5MzFfbWV0aG9kKHZvaWQpOworKworKyAgICB0eXBlZGVmIHN0cnVjdCBk cmJnX2N0eF9zdCBEUkJHX0NUWDsKKysvKiBEUkJHIGV4dGVybmFsIGZsYWdzICovCisrLyogRmxh ZyBmb3IgQ1RSIG1vZGUgb25seTogdXNlIGRlcml2YXRpb24gZnVuY3Rpb24gY3RyX2RmICovCisr IyAgZGVmaW5lIERSQkdfRkxBR19DVFJfVVNFX0RGICAgICAgICAgICAgMHgxCisrLyogUFJORyBp cyBpbiB0ZXN0IHN0YXRlICovCisrIyAgZGVmaW5lIERSQkdfRkxBR19URVNUICAgICAgICAgICAg ICAgICAgMHgyCisrCisrICAgIERSQkdfQ1RYICpGSVBTX2RyYmdfbmV3KGludCB0eXBlLCB1bnNp Z25lZCBpbnQgZmxhZ3MpOworKyAgICBpbnQgRklQU19kcmJnX2luaXQoRFJCR19DVFggKmRjdHgs IGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworKyAgICBpbnQgRklQU19kcmJnX2luc3Rh bnRpYXRlKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHVuc2lnbmVkIGNoYXIgKnBlcnMsIHNpemVfdCBwZXJzbGVuKTsKKysgICAgaW50IEZJUFNf ZHJiZ19yZXNlZWQoRFJCR19DVFggKmRjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sCisr ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhZGlubGVuKTsKKysgICAgaW50IEZJUFNf ZHJiZ19nZW5lcmF0ZShEUkJHX0NUWCAqZGN0eCwgdW5zaWduZWQgY2hhciAqb3V0LCBzaXplX3Qg b3V0bGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVkaWN0aW9uX3Jlc2lz dGFuY2UsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq YWRpbiwgc2l6ZV90IGFkaW5sZW4pOworKworKyAgICBpbnQgRklQU19kcmJnX3VuaW5zdGFudGlh dGUoRFJCR19DVFggKmRjdHgpOworKyAgICB2b2lkIEZJUFNfZHJiZ19mcmVlKERSQkdfQ1RYICpk Y3R4KTsKKysKKysgICAgaW50IEZJUFNfZHJiZ19zZXRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICgqZ2V0X2VudHJvcHkp IChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqcG91dCwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVudHJvcHksCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBtaW5fbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgbWF4X2xlbiksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICgqY2xlYW51cF9lbnRyb3B5KSAoRFJCR19DVFggKmN0eCwKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj aGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IG9sZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IGVudHJvcHlfYmxvY2tsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgKCpnZXRfbm9uY2UpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKnBv dXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgZW50cm9weSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBtaW5fbGVuLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heF9sZW4pLAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNsZWFudXBfbm9uY2UpIChEUkJHX0NUWCAqY3R4 LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBjaGFyICpvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvbGVuKSk7CisrCisrICAgIGludCBGSVBTX2Ry Ymdfc2V0X3JhbmRfY2FsbGJhY2tzKERSQkdfQ1RYICpkY3R4LAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKCpnZXRfYWRpbikgKERSQkdfQ1RYICpjdHgsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgY2hhcgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICoqcG91dCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZvaWQgKCpjbGVhbnVwX2FkaW4pIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg Y2hhciAqb3V0LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IG9sZW4pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgKCpyYW5kX3NlZWRfY2IpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2 b2lkICpidWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBudW0pLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgKCpyYW5kX2FkZF9jYikgKERSQkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVm LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBudW0sCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZG91YmxlIGVudHJvcHkpKTsKKysKKysgICAgdm9pZCAqRklQU19kcmJn X2dldF9hcHBfZGF0YShEUkJHX0NUWCAqY3R4KTsKKysgICAgdm9pZCBGSVBTX2RyYmdfc2V0X2Fw cF9kYXRhKERSQkdfQ1RYICpjdHgsIHZvaWQgKmFwcF9kYXRhKTsKKysgICAgc2l6ZV90IEZJUFNf ZHJiZ19nZXRfYmxvY2tsZW5ndGgoRFJCR19DVFggKmRjdHgpOworKyAgICBpbnQgRklQU19kcmJn X2dldF9zdHJlbmd0aChEUkJHX0NUWCAqZGN0eCk7CisrICAgIHZvaWQgRklQU19kcmJnX3NldF9j aGVja19pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFsKTsKKysgICAgdm9pZCBG SVBTX2RyYmdfc2V0X3Jlc2VlZF9pbnRlcnZhbChEUkJHX0NUWCAqZGN0eCwgaW50IGludGVydmFs KTsKKysKKysgICAgaW50IEZJUFNfZHJiZ19oZWFsdGhfY2hlY2soRFJCR19DVFggKmRjdHgpOwor KworKyAgICBEUkJHX0NUWCAqRklQU19nZXRfZGVmYXVsdF9kcmJnKHZvaWQpOworKyAgICBjb25z dCBSQU5EX01FVEhPRCAqRklQU19kcmJnX21ldGhvZCh2b2lkKTsKKysKKysgICAgaW50IEZJUFNf cmFuZF9zZXRfbWV0aG9kKGNvbnN0IFJBTkRfTUVUSE9EICptZXRoKTsKKysgICAgY29uc3QgUkFO RF9NRVRIT0QgKkZJUFNfcmFuZF9nZXRfbWV0aG9kKHZvaWQpOworKworKyAgICB2b2lkIEZJUFNf cmFuZF9zZXRfYml0cyhpbnQgbmJpdHMpOworKworKyAgICBpbnQgRklQU19yYW5kX3N0cmVuZ3Ro KHZvaWQpOworKworKy8qIDEuMC4wIGNvbXBhdCBmdW5jdGlvbnMgKi8KKysgICAgaW50IEZJUFNf cmFuZF9zZXRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgRklQU19SQU5EX1NJWkVfVCBr ZXlsZW4pOworKyAgICBpbnQgRklQU19yYW5kX3NlZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JB TkRfU0laRV9UIG51bSk7CisrICAgIGludCBGSVBTX3JhbmRfYnl0ZXModW5zaWduZWQgY2hhciAq b3V0LCBGSVBTX1JBTkRfU0laRV9UIG91dGxlbik7CisrICAgIGludCBGSVBTX3JhbmRfdGVzdF9t b2RlKHZvaWQpOworKyAgICB2b2lkIEZJUFNfcmFuZF9yZXNldCh2b2lkKTsKKysgICAgaW50IEZJ UFNfcmFuZF9zZXRfZHQodW5zaWduZWQgY2hhciAqZHQpOworKyAgICBpbnQgRklQU19yYW5kX3N0 YXR1cyh2b2lkKTsKKysgICAgY29uc3QgUkFORF9NRVRIT0QgKkZJUFNfcmFuZF9tZXRob2Qodm9p ZCk7CisrCisrIyAgaWZkZWYgIF9fY3BsdXNwbHVzCisrfQorKyMgIGVuZGlmCisrIyBlbmRpZgor KyNlbmRpZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xj bC5oLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oCistLS0g b3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX2xjbC5oLmZpcHMJMjAxNi0wNS0w MyAxNjo1Nzo1OC44MzAzMjEyMDQgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlw cy9maXBzX3JhbmRfbGNsLmgJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MzAzMjEyMDQgKzAyMDAKK0BA IC0wLDAgKzEsMjEzIEBACisrLyogZmlwcy9yYW5kL2ZpcHNfcmFuZF9sY2wuaCAqLworKy8qIFdy aXR0ZW4gYnkgRHIgU3RlcGhlbiBOIEhlbnNvbiAoc3RldmVAb3BlbnNzbC5vcmcpIGZvciB0aGUg T3BlblNTTAorKyAqIHByb2plY3QuCisrICovCisrLyogPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmln aHQgKGMpIDIwMTEgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisr ICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z LCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp ZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVy dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICog ICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9w ZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0 dHA6Ly93d3cuT3BlblNTTC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBU b29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAg IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3 aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJt aXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKysg KgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUg Y2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVp ciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBP cGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0g d2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkg dGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtp dCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQ UkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9S UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV VAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT UyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElO IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE CisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqID09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CisrICovCisrCisrdHlwZWRlZiBzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdCBEUkJHX0hBU0hfQ1RY OworK3R5cGVkZWYgc3RydWN0IGRyYmdfaG1hY19jdHhfc3QgRFJCR19ITUFDX0NUWDsKKyt0eXBl ZGVmIHN0cnVjdCBkcmJnX2N0cl9jdHhfc3QgRFJCR19DVFJfQ1RYOworKworKy8qIDg4OCBiaXRz IGZyb20gMTAuMSB0YWJsZSAyICovCisrI2RlZmluZSBIQVNIX1BSTkdfTUFYX1NFRURMRU4gICAx MTEKKysKKytzdHJ1Y3QgZHJiZ19oYXNoX2N0eF9zdCB7CisrICAgIGNvbnN0IEVWUF9NRCAqbWQ7 CisrICAgIEVWUF9NRF9DVFggbWN0eDsKKysgICAgdW5zaWduZWQgY2hhciBWW0hBU0hfUFJOR19N QVhfU0VFRExFTl07CisrICAgIHVuc2lnbmVkIGNoYXIgQ1tIQVNIX1BSTkdfTUFYX1NFRURMRU5d OworKyAgICAvKiBUZW1wb3JhcnkgdmFsdWUgc3RvcmFnZTogc2hvdWxkIGFsd2F5cyBleGNlZWQg bWF4IGRpZ2VzdCBsZW5ndGggKi8KKysgICAgdW5zaWduZWQgY2hhciB2dG1wW0hBU0hfUFJOR19N QVhfU0VFRExFTl07CisrfTsKKysKKytzdHJ1Y3QgZHJiZ19obWFjX2N0eF9zdCB7CisrICAgIGNv bnN0IEVWUF9NRCAqbWQ7CisrICAgIEhNQUNfQ1RYIGhjdHg7CisrICAgIHVuc2lnbmVkIGNoYXIg S1tFVlBfTUFYX01EX1NJWkVdOworKyAgICB1bnNpZ25lZCBjaGFyIFZbRVZQX01BWF9NRF9TSVpF XTsKKyt9OworKworK3N0cnVjdCBkcmJnX2N0cl9jdHhfc3QgeworKyAgICBBRVNfS0VZIGtzOwor KyAgICBzaXplX3Qga2V5bGVuOworKyAgICB1bnNpZ25lZCBjaGFyIEtbMzJdOworKyAgICB1bnNp Z25lZCBjaGFyIFZbMTZdOworKyAgICAvKiBUZW1wIHZhcmlhYmxlcyB1c2VkIGJ5IGRlcml2YXRp b24gZnVuY3Rpb24gKi8KKysgICAgQUVTX0tFWSBkZl9rczsKKysgICAgQUVTX0tFWSBkZl9reGtz OworKyAgICAvKiBUZW1wb3JhcnkgYmxvY2sgc3RvcmFnZSB1c2VkIGJ5IGN0cl9kZiAqLworKyAg ICB1bnNpZ25lZCBjaGFyIGJsdG1wWzE2XTsKKysgICAgc2l6ZV90IGJsdG1wX3BvczsKKysgICAg dW5zaWduZWQgY2hhciBLWFs0OF07CisrfTsKKysKKysvKiBEUkJHIGludGVybmFsIGZsYWdzICov CisrCisrLyogRnVuY3Rpb25zIHNob3VsZG4ndCBjYWxsIGVyciBsaWJyYXJ5ICovCisrI2RlZmlu ZSBEUkJHX0ZMQUdfTk9FUlIgICAgICAgICAgICAgICAgIDB4MQorKy8qIEN1c3RvbSByZXNlZWQg Y2hlY2tpbmcgKi8KKysjZGVmaW5lIERSQkdfQ1VTVE9NX1JFU0VFRCAgICAgICAgICAgICAgMHgy CisrCisrLyogRFJCRyBzdGF0dXMgdmFsdWVzICovCisrLyogbm90IGluaXRpYWxpc2VkICovCisr I2RlZmluZSBEUkJHX1NUQVRVU19VTklOSVRJQUxJU0VEICAgICAgIDAKKysvKiBvayBhbmQgcmVh ZHkgdG8gZ2VuZXJhdGUgcmFuZG9tIGJpdHMgKi8KKysjZGVmaW5lIERSQkdfU1RBVFVTX1JFQURZ ICAgICAgICAgICAgICAgMQorKy8qIHJlc2VlZCByZXF1aXJlZCAqLworKyNkZWZpbmUgRFJCR19T VEFUVVNfUkVTRUVEICAgICAgICAgICAgICAyCisrLyogZmF0YWwgZXJyb3IgY29uZGl0aW9uICov CisrI2RlZmluZSBEUkJHX1NUQVRVU19FUlJPUiAgICAgICAgICAgICAgIDMKKysKKysvKiBBIGRl ZmF1bHQgbWF4aW11bSBsZW5ndGg6IGxhcmdlciB0aGFuIGFueSByZWFzb25hYmxlIHZhbHVlIHVz ZWQgaW4gcHJhdGljZSAqLworKworKyNkZWZpbmUgRFJCR19NQVhfTEVOR1RIICAgICAgICAgICAg ICAgICAweDdmZmZmZmYwCisrLyogTWF4aW11bSBEUkJHIGJsb2NrIGxlbmd0aDogYWxsIG1kIHNp emVzIGFyZSBiaWdnZXIgdGhhbiBjaXBoZXIgYmxvY2tzIHNpemVzCisrICogc28gdXNlIG1heCBk aWdlc3QgbGVuZ3RoLgorKyAqLworKyNkZWZpbmUgRFJCR19NQVhfQkxPQ0sgICAgICAgICAgICAg ICAgICBFVlBfTUFYX01EX1NJWkUKKysKKysjZGVmaW5lIERSQkdfSEVBTFRIX0lOVEVSVkFMICAg ICAgICAgICAgKDEgPDwgMjQpCisrCisrLyogRFJCRyBjb250ZXh0IHN0cnVjdHVyZSAqLworKwor K3N0cnVjdCBkcmJnX2N0eF9zdCB7CisrICAgIC8qIEZpcnN0IHR5cGVzIGNvbW1vbiB0byBhbGwg aW1wbGVtZW50YXRpb25zICovCisrICAgIC8qIERSQkcgdHlwZTogYSBOSUQgZm9yIHRoZSB1bmRl cmx5aW5nIGFsZ29yaXRobSAqLworKyAgICBpbnQgdHlwZTsKKysgICAgLyogVmFyaW91cyBleHRl cm5hbCBmbGFncyAqLworKyAgICB1bnNpZ25lZCBpbnQgeGZsYWdzOworKyAgICAvKiBWYXJpb3Vz IGludGVybmFsIHVzZSBvbmx5IGZsYWdzICovCisrICAgIHVuc2lnbmVkIGludCBpZmxhZ3M7Cisr ICAgIC8qIFVzZWQgZm9yIHBlcmlvZGljIGhlYWx0aCBjaGVja3MgKi8KKysgICAgaW50IGhlYWx0 aF9jaGVja19jbnQsIGhlYWx0aF9jaGVja19pbnRlcnZhbDsKKysKKysgICAgLyogVGhlIGZvbGxv d2luZyBwYXJhbWV0ZXJzIGFyZSBzZXR1cCBieSBtZWNoYW5pc20gZHJiZ19pbml0KCkgY2FsbCAq LworKyAgICBpbnQgc3RyZW5ndGg7CisrICAgIHNpemVfdCBibG9ja2xlbmd0aDsKKysgICAgc2l6 ZV90IG1heF9yZXF1ZXN0OworKworKyAgICBzaXplX3QgbWluX2VudHJvcHksIG1heF9lbnRyb3B5 OworKyAgICBzaXplX3QgbWluX25vbmNlLCBtYXhfbm9uY2U7CisrICAgIHNpemVfdCBtYXhfcGVy cywgbWF4X2FkaW47CisrICAgIHVuc2lnbmVkIGludCByZXNlZWRfY291bnRlcjsKKysgICAgdW5z aWduZWQgaW50IHJlc2VlZF9pbnRlcnZhbDsKKysgICAgc2l6ZV90IHNlZWRsZW47CisrICAgIGlu dCBzdGF0dXM7CisrICAgIC8qIEFwcGxpY2F0aW9uIGRhdGE6IHR5cGljYWxseSB1c2VkIGJ5IHRl c3QgZ2V0X2VudHJvcHkgKi8KKysgICAgdm9pZCAqYXBwX2RhdGE7CisrICAgIC8qIEltcGxlbWVu dGF0aW9uIHNwZWNpZmljIHN0cnVjdHVyZXMgKi8KKysgICAgdW5pb24geworKyAgICAgICAgRFJC R19IQVNIX0NUWCBoYXNoOworKyAgICAgICAgRFJCR19ITUFDX0NUWCBobWFjOworKyAgICAgICAg RFJCR19DVFJfQ1RYIGN0cjsKKysgICAgfSBkOworKyAgICAvKiBJbml0aWFsaWFzZSBQUk5HIGFu ZCBzZXR1cCBjYWxsYmFja3MgYmVsb3cgKi8KKysgICAgaW50ICgqaW5pdCkgKERSQkdfQ1RYICpj dHgsIGludCBuaWQsIGludCBzZWN1cml0eSwgdW5zaWduZWQgaW50IGZsYWdzKTsKKysgICAgLyog SW50YW50aWF0ZSBQUk5HICovCisrICAgIGludCAoKmluc3RhbnRpYXRlKSAoRFJCR19DVFggKmN0 eCwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNp emVfdCBlbnRsZW4sCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciAqbm9uY2UsIHNpemVfdCBub25jZWxlbiwKKysgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1bnNpZ25lZCBjaGFyICpwZXJzLCBzaXplX3QgcGVyc2xlbik7CisrICAgIC8qIHJlc2VlZCAq LworKyAgICBpbnQgKCpyZXNlZWQpIChEUkJHX0NUWCAqY3R4LAorKyAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICplbnQsIHNpemVfdCBlbnRsZW4sCisrICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkaW4sIHNpemVfdCBhZGlubGVuKTsKKysgICAg LyogZ2VuZXJhdCBvdXRwdXQgKi8KKysgICAgaW50ICgqZ2VuZXJhdGUpIChEUkJHX0NUWCAqY3R4 LAorKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG91dGxl biwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGluLCBzaXpl X3QgYWRpbmxlbik7CisrICAgIC8qIHVuaW5zdGFudGlhdGUgKi8KKysgICAgaW50ICgqdW5pbnN0 YW50aWF0ZSkgKERSQkdfQ1RYICpjdHgpOworKworKyAgICAvKiBFbnRyb3B5IHNvdXJjZSBibG9j ayBsZW5ndGggKi8KKysgICAgc2l6ZV90IGVudHJvcHlfYmxvY2tsZW47CisrCisrICAgIC8qIGVu dHJvcHkgZ2F0aGVyaW5nIGZ1bmN0aW9uICovCisrICAgIHNpemVfdCAoKmdldF9lbnRyb3B5KSAo RFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBvdXQsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGVudHJvcHksIHNpemVfdCBtaW5fbGVuLCBzaXplX3QgbWF4X2xlbik7Cisr ICAgIC8qIEluZGljYXRlcyB3ZSBoYXZlIGZpbmlzaGVkIHdpdGggZW50cm9weSBidWZmZXIgKi8K KysgICAgdm9pZCAoKmNsZWFudXBfZW50cm9weSkgKERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNo YXIgKm91dCwgc2l6ZV90IG9sZW4pOworKworKyAgICAvKiBub25jZSBnYXRoZXJpbmcgZnVuY3Rp b24gKi8KKysgICAgc2l6ZV90ICgqZ2V0X25vbmNlKSAoRFJCR19DVFggKmN0eCwgdW5zaWduZWQg Y2hhciAqKnBvdXQsCisrICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyb3B5LCBzaXpl X3QgbWluX2xlbiwgc2l6ZV90IG1heF9sZW4pOworKyAgICAvKiBJbmRpY2F0ZXMgd2UgaGF2ZSBm aW5pc2hlZCB3aXRoIG5vbmNlIGJ1ZmZlciAqLworKyAgICB2b2lkICgqY2xlYW51cF9ub25jZSkg KERSQkdfQ1RYICpjdHgsIHVuc2lnbmVkIGNoYXIgKm91dCwgc2l6ZV90IG9sZW4pOworKworKyAg ICAvKiBDb250aW51b3VzIHJhbmRvbSBudW1iZXIgdGVzdCB0ZW1wb3JhcnkgYXJlYSAqLworKyAg ICAvKiBMYXN0IGJsb2NrICovCisrICAgIHVuc2lnbmVkIGNoYXIgbGJbRVZQX01BWF9NRF9TSVpF XTsKKysgICAgLyogc2V0IGlmIGxiIGlzIHZhbGlkICovCisrICAgIGludCBsYl92YWxpZDsKKysK KysgICAgLyogQ2FsbGJhY2tzIHVzZWQgd2hlbiBjYWxsZWQgdGhyb3VnaCBSQU5EIGludGVyZmFj ZSAqLworKyAgICAvKiBHZXQgYW55IGFkZGl0aW9uYWwgaW5wdXQgZm9yIGdlbmVyYXRlICovCisr ICAgIHNpemVfdCAoKmdldF9hZGluKSAoRFJCR19DVFggKmN0eCwgdW5zaWduZWQgY2hhciAqKnBv dXQpOworKyAgICB2b2lkICgqY2xlYW51cF9hZGluKSAoRFJCR19DVFggKmN0eCwgdW5zaWduZWQg Y2hhciAqb3V0LCBzaXplX3Qgb2xlbik7CisrICAgIC8qIENhbGxiYWNrIGZvciBSQU5EX3NlZWQo KSwgUkFORF9hZGQoKSAqLworKyAgICBpbnQgKCpyYW5kX3NlZWRfY2IpIChEUkJHX0NUWCAqY3R4 LCBjb25zdCB2b2lkICpidWYsIGludCBudW0pOworKyAgICBpbnQgKCpyYW5kX2FkZF9jYikgKERS QkdfQ1RYICpjdHgsCisrICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLCBp bnQgbnVtLCBkb3VibGUgZW50cm9weSk7CisrfTsKKysKKytpbnQgZmlwc19kcmJnX2N0cl9pbml0 KERSQkdfQ1RYICpkY3R4KTsKKytpbnQgZmlwc19kcmJnX2hhc2hfaW5pdChEUkJHX0NUWCAqZGN0 eCk7CisraW50IGZpcHNfZHJiZ19obWFjX2luaXQoRFJCR19DVFggKmRjdHgpOworK2ludCBmaXBz X2RyYmdfa2F0KERSQkdfQ1RYICpkY3R4LCBpbnQgbmlkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwor K2ludCBmaXBzX2RyYmdfY3BybmdfdGVzdChEUkJHX0NUWCAqZGN0eCwgY29uc3QgdW5zaWduZWQg Y2hhciAqb3V0KTsKKysKKytjb25zdCBzdHJ1Y3QgZW52X21kX3N0ICpGSVBTX2dldF9kaWdlc3Ri eW5pZChpbnQgbmlkKTsKKysKKytjb25zdCBzdHJ1Y3QgZXZwX2NpcGhlcl9zdCAqRklQU19nZXRf Y2lwaGVyYnluaWQoaW50IG5pZCk7CisrCisrI2RlZmluZSBGSVBTX2RpZ2VzdGluaXQgRVZQX0Rp Z2VzdEluaXQKKysjZGVmaW5lIEZJUFNfZGlnZXN0dXBkYXRlIEVWUF9EaWdlc3RVcGRhdGUKKysj ZGVmaW5lIEZJUFNfZGlnZXN0ZmluYWwgRVZQX0RpZ2VzdEZpbmFsCisrI2RlZmluZSBNX0VWUF9N RF9zaXplIEVWUF9NRF9zaXplCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9m aXBzX3JhbmRfbGliLmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX3JhbmRf bGliLmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX3JhbmRfbGliLmMuZmlw cwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgzMDMyMTIwNCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJo L2NyeXB0by9maXBzL2ZpcHNfcmFuZF9saWIuYwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgzMDMyMTIw NCArMDIwMAorQEAgLTAsMCArMSwxODEgQEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdo dCAoYykgMjAxMSBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysg KgorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFyZSBtZXQ6CisrICoKKysgKiAx LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4gCisrICoKKysgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp bgorKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUKKysgKiAgICBkaXN0cmlidXRpb24uCisrICoKKysgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKysgKiAg ICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKysg KiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3Bl blNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0 cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRv b2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisrICogICAg ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdp dGhvdXQKKysgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1p c3Npb24sIHBsZWFzZSBjb250YWN0CisrICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgor KyAqCisrICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBi ZSBjYWxsZWQgIk9wZW5TU0wiCisrICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRo ZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorKyAqICAgIHBlcm1pc3Npb24gb2YgdGhl IE9wZW5TU0wgUHJvamVjdC4KKysgKgorKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9y bSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKysgKiAgICBhY2tub3dsZWRn bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBi eSB0aGUgT3BlblNTTCBQcm9qZWN0CisrICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29s a2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKysgKiBF WFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF RCBUTywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisrICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO IE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKysgKiBJVFMgQ09OVFJJQlVU T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisrICog U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg QlVUCisrICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg T1IgU0VSVklDRVM7CisrICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKysgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisrICogU1RSSUNUIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorKyAqIEFSSVNJTkcg SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQKKysgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisrICoKKysgKi8KKysK KysjaW5jbHVkZSA8b3BlbnNzbC9jcnlwdG8uaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+ CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgor KyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJlX29zLmgiCisrCisr LyogRklQUyBBUEkgZm9yIFBSTkcgdXNlLiBTaW1pbGFyIHRvIFJBTkQgZnVuY3Rpb25hbGl0eSBi dXQgd2l0aG91dAorKyAqIEVOR0lORSBhbmQgYWRkaXRpb25hbCBjaGVja2luZyBmb3Igbm9uLUZJ UFMgcmFuZCBtZXRob2RzLgorKyAqLworKworK3N0YXRpYyBjb25zdCBSQU5EX01FVEhPRCAqZmlw c19yYW5kX21ldGggPSBOVUxMOworK3N0YXRpYyBpbnQgZmlwc19hcHByb3ZlZF9yYW5kX21ldGgg PSAwOworK3N0YXRpYyBpbnQgZmlwc19yYW5kX2JpdHMgPSAwOworKworKy8qIEFsbG93cyBhcHBs aWNhdGlvbiB0byBvdmVycmlkZSBudW1iZXIgb2YgYml0cyBhbmQgdXNlcyBub24tRklQUyBtZXRo b2RzICovCisrdm9pZCBGSVBTX3JhbmRfc2V0X2JpdHMoaW50IG5iaXRzKQorK3sKKysgICAgZmlw c19yYW5kX2JpdHMgPSBuYml0czsKKyt9CisrCisraW50IEZJUFNfcmFuZF9zZXRfbWV0aG9kKGNv bnN0IFJBTkRfTUVUSE9EICptZXRoKQorK3sKKysgICAgaWYgKCFmaXBzX3JhbmRfYml0cykgewor KyAgICAgICAgaWYgKG1ldGggPT0gRklQU19kcmJnX21ldGhvZCgpKQorKyAgICAgICAgICAgIGZp cHNfYXBwcm92ZWRfcmFuZF9tZXRoID0gMTsKKysgICAgICAgIGVsc2UgaWYgKG1ldGggPT0gRklQ U194OTMxX21ldGhvZCgpKQorKyAgICAgICAgICAgIGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID0g MjsKKysgICAgICAgIGVsc2UgeworKyAgICAgICAgICAgIGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRo ID0gMDsKKysgICAgICAgICAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgpKSB7CisrICAgICAgICAg ICAgICAgIEZJUFNlcnIoRklQU19GX0ZJUFNfUkFORF9TRVRfTUVUSE9ELCBGSVBTX1JfTk9OX0ZJ UFNfTUVUSE9EKTsKKysgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICAgICAgfQor KyAgICAgICAgfQorKyAgICB9CisrICAgIGZpcHNfcmFuZF9tZXRoID0gbWV0aDsKKysgICAgcmV0 dXJuIDE7CisrfQorKworK2NvbnN0IFJBTkRfTUVUSE9EICpGSVBTX3JhbmRfZ2V0X21ldGhvZCh2 b2lkKQorK3sKKysgICAgcmV0dXJuIGZpcHNfcmFuZF9tZXRoOworK30KKysKKytjb25zdCBSQU5E X01FVEhPRCAqRklQU19yYW5kX21ldGhvZCh2b2lkKQorK3sKKysgICAgcmV0dXJuIEZJUFNfcmFu ZF9nZXRfbWV0aG9kKCk7CisrfQorKworK3ZvaWQgRklQU19yYW5kX3Jlc2V0KHZvaWQpCisrewor KyAgICBpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5kX21ldGgtPmNsZWFudXApCisrICAg ICAgICBmaXBzX3JhbmRfbWV0aC0+Y2xlYW51cCgpOworK30KKysKKytpbnQgRklQU19yYW5kX3Nl ZWQoY29uc3Qgdm9pZCAqYnVmLCBGSVBTX1JBTkRfU0laRV9UIG51bSkKKyt7CisrICAgIGlmICgh Zmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKSB7CisrICAgICAg ICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU0VFRCwgRklQU19SX05PTl9GSVBTX01FVEhPRCk7 CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKyAgICBpZiAoZmlwc19yYW5kX21ldGggJiYg Zmlwc19yYW5kX21ldGgtPnNlZWQpCisrICAgICAgICBmaXBzX3JhbmRfbWV0aC0+c2VlZChidWYs IG51bSk7CisrICAgIHJldHVybiAxOworK30KKysKKyt2b2lkIEZJUFNfcmFuZF9hZGQoY29uc3Qg dm9pZCAqYnVmLCBpbnQgbnVtLCBkb3VibGUgZW50cm9weSkKKyt7CisrICAgIGlmICghZmlwc19h cHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1bGVfbW9kZSgpKSB7CisrICAgICAgICBGSVBT ZXJyKEZJUFNfRl9GSVBTX1JBTkRfQURELCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysgICAg ICAgIHJldHVybjsKKysgICAgfQorKyAgICBpZiAoZmlwc19yYW5kX21ldGggJiYgZmlwc19yYW5k X21ldGgtPmFkZCkKKysgICAgICAgIGZpcHNfcmFuZF9tZXRoLT5hZGQoYnVmLCBudW0sIGVudHJv cHkpOworK30KKysKKytpbnQgRklQU19yYW5kX2J5dGVzKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgRklQ U19SQU5EX1NJWkVfVCBudW0pCisreworKyAgICBpZiAoIWZpcHNfYXBwcm92ZWRfcmFuZF9tZXRo ICYmIEZJUFNfbW9kdWxlX21vZGUoKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19S QU5EX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysgICAgICAgIHJldHVybiAwOwor KyAgICB9CisrICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+Ynl0ZXMp CisrICAgICAgICByZXR1cm4gZmlwc19yYW5kX21ldGgtPmJ5dGVzKGJ1ZiwgbnVtKTsKKysgICAg cmV0dXJuIDA7CisrfQorKworK2ludCBGSVBTX3JhbmRfcHNldWRvX2J5dGVzKHVuc2lnbmVkIGNo YXIgKmJ1ZiwgaW50IG51bSkKKyt7CisrICAgIGlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGgg JiYgRklQU19tb2R1bGVfbW9kZSgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JB TkRfUFNFVURPX0JZVEVTLCBGSVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysgICAgICAgIHJldHVy biAwOworKyAgICB9CisrICAgIGlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+ cHNldWRvcmFuZCkKKysgICAgICAgIHJldHVybiBmaXBzX3JhbmRfbWV0aC0+cHNldWRvcmFuZChi dWYsIG51bSk7CisrICAgIHJldHVybiAtMTsKKyt9CisrCisraW50IEZJUFNfcmFuZF9zdGF0dXMo dm9pZCkKKyt7CisrICAgIGlmICghZmlwc19hcHByb3ZlZF9yYW5kX21ldGggJiYgRklQU19tb2R1 bGVfbW9kZSgpKSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1JBTkRfU1RBVFVTLCBG SVBTX1JfTk9OX0ZJUFNfTUVUSE9EKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrICAg IGlmIChmaXBzX3JhbmRfbWV0aCAmJiBmaXBzX3JhbmRfbWV0aC0+c3RhdHVzKQorKyAgICAgICAg cmV0dXJuIGZpcHNfcmFuZF9tZXRoLT5zdGF0dXMoKTsKKysgICAgcmV0dXJuIDA7CisrfQorKwor Ky8qIFJldHVybiBpbnN0YW50aWF0ZWQgc3RyZW5ndGggb2YgUFJORy4gRm9yIERSQkcgdGhpcyBp cyBhbiBpbnRlcm5hbAorKyAqIHBhcmFtZXRlci4gRm9yIFg5LjMxIFBSTkcgaXQgaXMgODAgYml0 cyAoZnJvbSBTUDgwMC0xMzEpLiBBbnkgb3RoZXIKKysgKiB0eXBlIG9mIFBSTkcgaXMgbm90IGFw cHJvdmVkIGFuZCByZXR1cm5zIDAgaW4gRklQUyBtb2RlIGFuZCBtYXhpbXVtCisrICogMjU2IG91 dHNpZGUgRklQUyBtb2RlLgorKyAqLworKworK2ludCBGSVBTX3JhbmRfc3RyZW5ndGgodm9pZCkK Kyt7CisrICAgIGlmIChmaXBzX3JhbmRfYml0cykKKysgICAgICAgIHJldHVybiBmaXBzX3JhbmRf Yml0czsKKysgICAgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDEpCisrICAgICAgICBy ZXR1cm4gRklQU19kcmJnX2dldF9zdHJlbmd0aChGSVBTX2dldF9kZWZhdWx0X2RyYmcoKSk7Cisr ICAgIGVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDIpCisrICAgICAgICByZXR1 cm4gODA7CisrICAgIGVsc2UgaWYgKGZpcHNfYXBwcm92ZWRfcmFuZF9tZXRoID09IDApIHsKKysg ICAgICAgIGlmIChGSVBTX21vZHVsZV9tb2RlKCkpCisrICAgICAgICAgICAgcmV0dXJuIDA7Cisr ICAgICAgICBlbHNlCisrICAgICAgICAgICAgcmV0dXJuIDI1NjsKKysgICAgfQorKyAgICByZXR1 cm4gMDsKKyt9CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX3JhbmRf c2VsZnRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxm dGVzdC5jCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19yYW5kX3NlbGZ0ZXN0 LmMuZmlwcwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgzMDMyMTIwNCArMDIwMAorKysrIG9wZW5zc2wt MS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfcmFuZF9zZWxmdGVzdC5jCTIwMTYtMDUtMDMgMTY6NTc6 NTguODMwMzIxMjA0ICswMjAwCitAQCAtMCwwICsxLDE3NiBAQAorKy8qID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cisr ICogQ29weXJpZ2h0IChjKSAyMDAzIFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJl c2VydmVkLgorKyAqCisrICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisrICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoK KysgKgorKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0CisrICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKysgKgorKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisr ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyIGluCisrICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZQorKyAqICAgIGRpc3RyaWJ1dGlvbi4KKysgKgorKyAqIDMu IEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg dGhpcworKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl ZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk IGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRv b2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisrICoKKysgKiA0LiBUaGUgbmFtZXMg Ik9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQg dG8KKysgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dAorKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdy aXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKysgKiAgICBvcGVuc3NsLWNvcmVAb3Bl bnNzbC5vcmcuCisrICoKKysgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKysgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBh cHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisrICogICAgcGVybWlz c2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorKyAqCisrICogNi4gUmVkaXN0cmlidXRpb25z IG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworKyAqICAg IGFja25vd2xlZGdtZW50OgorKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg ZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKysgKiAgICBmb3IgdXNlIGluIHRoZSBP cGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5E IEFOWQorKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKysgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKysgKiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorKyAqIElU UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwKKysgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo SU5DTFVESU5HLCBCVVQKKysgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKysgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKysgKiBTVFJJQ1Qg TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisr ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRAorKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysg KgorKyAqLworKworKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIu aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5o PgorKyNpbmNsdWRlIDxvcGVuc3NsL2ZpcHNfcmFuZC5oPgorKyNpbmNsdWRlICJmaXBzX2xvY2wu aCIKKysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrdHlwZWRlZiBzdHJ1Y3QgeworKyAgICB1 bnNpZ25lZCBjaGFyIERUWzE2XTsKKysgICAgdW5zaWduZWQgY2hhciBWWzE2XTsKKysgICAgdW5z aWduZWQgY2hhciBSWzE2XTsKKyt9IEFFU19QUk5HX1RWOworKworKy8qIFRoZSBmb2xsb3dpbmcg dGVzdCB2ZWN0b3JzIGFyZSB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSBSR05WUyBzcGVjICovCisr Cisrc3RhdGljIHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9rZXlbMTZdID0KKysgICAgeyAweGYzLCAw eGIxLCAweDY2LCAweDZkLCAweDEzLCAweDYwLCAweDcyLCAweDQyLAorKyAgICAweGVkLCAweDA2 LCAweDFjLCAweGFiLCAweGI4LCAweGQ0LCAweDYyLCAweDAyCisrfTsKKysKKytzdGF0aWMgQUVT X1BSTkdfVFYgYWVzXzEyOF90diA9IHsKKysgICAgLyogRFQgKi8KKysgICAgezB4ZTYsIDB4YjMs IDB4YmUsIDB4NzgsIDB4MmEsIDB4MjMsIDB4ZmEsIDB4NjIsCisrICAgICAweGQ3LCAweDFkLCAw eDRhLCAweGZiLCAweGIwLCAweGU5LCAweDIyLCAweGY5fSwKKysgICAgLyogViAqLworKyAgICB7 MHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKysgICAgIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorKyAgICAvKiBS ICovCisrICAgIHsweDU5LCAweDUzLCAweDFlLCAweGQxLCAweDNiLCAweGIwLCAweGMwLCAweDU1 LAorKyAgICAgMHg4NCwgMHg3OSwgMHg2NiwgMHg4NSwgMHhjMSwgMHgyZiwgMHg3NiwgMHg0MX0K Kyt9OworKworK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc18xOTJfa2V5WzI0XSA9CisrICAgIHsg MHgxNSwgMHhkOCwgMHg3OCwgMHgwZCwgMHg2MiwgMHhkMywgMHgyNSwgMHg2ZSwKKysgICAgMHg0 NCwgMHg2NCwgMHgxMCwgMHgxMywgMHg2MCwgMHgyYiwgMHhhOSwgMHhiYywKKysgICAgMHg0YSwg MHhmYiwgMHhjYSwgMHhlYiwgMHg0YywgMHg4YiwgMHg5OSwgMHgzYgorK307CisrCisrc3RhdGlj IEFFU19QUk5HX1RWIGFlc18xOTJfdHYgPSB7CisrICAgIC8qIERUICovCisrICAgIHsweDNmLCAw eGQ4LCAweGZmLCAweGU4LCAweDgwLCAweDY5LCAweDhiLCAweGMxLAorKyAgICAgMHhiZiwgMHg5 OSwgMHg3ZCwgMHhhNCwgMHgyNCwgMHg3OCwgMHhmMywgMHg0Yn0sCisrICAgIC8qIFYgKi8KKysg ICAgezB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisrICAg ICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKysgICAg LyogUiAqLworKyAgICB7MHgxNywgMHgwNywgMHhkNSwgMHgyOCwgMHgxOSwgMHg3OSwgMHgxZSwg MHhlZiwKKysgICAgIDB4YTUsIDB4MGMsIDB4YmYsIDB4MjUsIDB4ZTUsIDB4NTYsIDB4YjQsIDB4 OTN9CisrfTsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciBhZXNfMjU2X2tleVszMl0gPQorKyAg ICB7IDB4NmQsIDB4MTQsIDB4MDYsIDB4NmMsIDB4YjYsIDB4ZDgsIDB4MjEsIDB4MmQsCisrICAg IDB4ODIsIDB4OGQsIDB4ZmEsIDB4ZjIsIDB4N2EsIDB4MDMsIDB4YjcsIDB4OWYsCisrICAgIDB4 MGMsIDB4YzcsIDB4M2UsIDB4Y2QsIDB4NzYsIDB4ZWIsIDB4ZWUsIDB4YjUsCisrICAgIDB4MjEs IDB4MDUsIDB4OGMsIDB4NGYsIDB4MzEsIDB4N2EsIDB4ODAsIDB4YmIKKyt9OworKworK3N0YXRp YyBBRVNfUFJOR19UViBhZXNfMjU2X3R2ID0geworKyAgICAvKiBEVCAqLworKyAgICB7MHhkYSwg MHgzYSwgMHg0MSwgMHhlYywgMHgxZCwgMHhhMywgMHhiMCwgMHhkNSwKKysgICAgIDB4ZjIsIDB4 YTksIDB4NGUsIDB4MzQsIDB4NzQsIDB4OGUsIDB4OWUsIDB4ODh9LAorKyAgICAvKiBWICovCisr ICAgIHsweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorKyAg ICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH0sCisrICAg IC8qIFIgKi8KKysgICAgezB4MzUsIDB4YzcsIDB4ZWYsIDB4YTcsIDB4NzgsIDB4NGQsIDB4Mjks IDB4YmMsCisrICAgICAweDgyLCAweDc5LCAweDk5LCAweGZiLCAweGQwLCAweGIzLCAweDNiLCAw eDcyfQorK307CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRfcm5nKCkKKyt7CisrICAgIGFlc18xOTJf dHYuVlswXSsrOworK30KKysKKysjIGRlZmluZSBmaXBzX3g5MzFfdGVzdChrZXksIHR2KSBcCisr ICAgICAgICBkb194OTMxX3Rlc3Qoa2V5LCBzaXplb2Yga2V5LCAmdHYpCisrCisrc3RhdGljIGlu dCBkb194OTMxX3Rlc3QodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBBRVNfUFJOR19U ViAqIHR2KQorK3sKKysgICAgdW5zaWduZWQgY2hhciBSWzE2XSwgVlsxNl07CisrICAgIGludCBy diA9IDE7CisrICAgIG1lbWNweShWLCB0di0+Viwgc2l6ZW9mKFYpKTsKKysgICAgaWYgKCFGSVBT X3g5MzFfc2V0X2tleShrZXksIGtleWxlbikpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgaWYg KCFmaXBzX3Bvc3Rfc3RhcnRlZChGSVBTX1RFU1RfWDkzMSwga2V5bGVuLCBOVUxMKSkKKysgICAg ICAgIHJldHVybiAxOworKyAgICBpZiAoIWZpcHNfcG9zdF9jb3JydXB0KEZJUFNfVEVTVF9YOTMx LCBrZXlsZW4sIE5VTEwpKQorKyAgICAgICAgVlswXSsrOworKyAgICBGSVBTX3g5MzFfc2VlZChW LCAxNik7CisrICAgIEZJUFNfeDkzMV9zZXRfZHQodHYtPkRUKTsKKysgICAgRklQU194OTMxX2J5 dGVzKFIsIDE2KTsKKysgICAgaWYgKG1lbWNtcChSLCB0di0+UiwgMTYpKSB7CisrICAgICAgICBm aXBzX3Bvc3RfZmFpbGVkKEZJUFNfVEVTVF9YOTMxLCBrZXlsZW4sIE5VTEwpOworKyAgICAgICAg cnYgPSAwOworKyAgICB9IGVsc2UgaWYgKCFmaXBzX3Bvc3Rfc3VjY2VzcyhGSVBTX1RFU1RfWDkz MSwga2V5bGVuLCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gcnY7Cisr fQorKworK2ludCBGSVBTX3NlbGZ0ZXN0X3g5MzEoKQorK3sKKysgICAgaW50IHJ2ID0gMTsKKysg ICAgRklQU194OTMxX3Jlc2V0KCk7CisrICAgIGlmICghRklQU194OTMxX3Rlc3RfbW9kZSgpKSB7 CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEsIEZJUFNfUl9TRUxG VEVTVF9GQUlMRUQpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysgICAgaWYgKCFmaXBz X3g5MzFfdGVzdChhZXNfMTI4X2tleSwgYWVzXzEyOF90dikpCisrICAgICAgICBydiA9IDA7Cisr ICAgIGlmICghZmlwc194OTMxX3Rlc3QoYWVzXzE5Ml9rZXksIGFlc18xOTJfdHYpKQorKyAgICAg ICAgcnYgPSAwOworKyAgICBpZiAoIWZpcHNfeDkzMV90ZXN0KGFlc18yNTZfa2V5LCBhZXNfMjU2 X3R2KSkKKysgICAgICAgIHJ2ID0gMDsKKysgICAgRklQU194OTMxX3Jlc2V0KCk7CisrICAgIGlm ICghcnYpCisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX1NFTEZURVNUX1g5MzEsIEZJUFNf Ul9TRUxGVEVTVF9GQUlMRUQpOworKyAgICByZXR1cm4gcnY7CisrfQorKworK2ludCBGSVBTX3Nl bGZ0ZXN0X3JuZyh2b2lkKQorK3sKKysgICAgcmV0dXJuIEZJUFNfc2VsZnRlc3RfeDkzMSgpOwor K30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNf cmFuZHRlc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3Qu YworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfcmFuZHRlc3QuYy5maXBzCTIw MTYtMDUtMDMgMTY6NTc6NTguODMxMzIxMjI4ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5 cHRvL2ZpcHMvZmlwc19yYW5kdGVzdC5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODMxMzIxMjI4ICsw MjAwCitAQCAtMCwwICsxLDI0NyBAQAorKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMg WW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoK KysgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKysgKiBi eSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisrICogVGhlIGltcGxlbWVudGF0aW9u IHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorKyAqIAor KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lh bCB1c2UgYXMgbG9uZyBhcworKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJl ZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZv dW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisrICogbGhhc2gs IERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVu dGF0aW9uCisrICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5 IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMg VGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorKyAqIAorKyAqIENvcHlyaWdodCByZW1h aW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisr ICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorKyAqIElmIHRoaXMgcGFja2FnZSBp cyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRp b24KKysgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgor KyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dy YW0gc3RhcnR1cCBvcgorKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBw cm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorKyAqIAorKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworKyAqIGFyZSBtZXQ6CisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl IG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisrICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlCisrICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKysgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdh cmUKKysgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Cisr ICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0 ZW4gYnkKKysgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorKyAqICAgIFRo ZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJv bSB0aGUgbGlicmFyeQorKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJl bGF0ZWQgOi0pLgorKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNv ZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorKyAqICAgIHRoZSBhcHBzIGRpcmVj dG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1l bnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRp bSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKysgKiAKKysgKiBUSElTIFNPRlRXQVJFIElT IFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorKyAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFCisrICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT SEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKysgKiBGT1IgQU5ZIERJ UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTAorKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisrICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QKKysgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisrICogT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorKyAq IFNVQ0ggREFNQUdFLgorKyAqIAorKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVy bXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisrICogZGVyaXZhdGl2 ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qg c2ltcGx5IGJlCisrICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24g bGljZW5jZQorKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisrICovCisr LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJvamVj dC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisr ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0 aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZl YXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBm b2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBz b2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2Ug aW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgor KyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIg bXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAg IG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQg ZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5v ciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0 ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2 LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUg Zm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBp bmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAg IGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8p IgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9K RUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElF UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAq IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQ Uk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs IElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9D VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNF LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF IE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1 ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8Y3R5cGUuaD4K KysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZmlwc19yYW5k Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4K KysKKysjaW5jbHVkZSAiZV9vcy5oIgorKworKyNpZm5kZWYgT1BFTlNTTF9GSVBTCisraW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKKyt7CisrICAgIHByaW50ZigiTm8gRklQUyBSQU5E IHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4gKDApOworK30KKysKKysjZWxzZQorKworKyMgaW5j bHVkZSAiZmlwc191dGwuaCIKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworK3R5cGVk ZWYgc3RydWN0IHsKKysgICAgdW5zaWduZWQgY2hhciBEVFsxNl07CisrICAgIHVuc2lnbmVkIGNo YXIgVlsxNl07CisrICAgIHVuc2lnbmVkIGNoYXIgUlsxNl07CisrfSBBRVNfUFJOR19NQ1Q7Cisr Cisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYWVzXzEyOF9tY3Rfa2V5WzE2XSA9CisrICAg IHsgMHg5ZiwgMHg1YiwgMHg1MSwgMHgyMCwgMHgwYiwgMHhmMywgMHgzNCwgMHhiNSwKKysgICAg MHhkOCwgMHgyYiwgMHhlOCwgMHhjMywgMHg3MiwgMHg1NSwgMHhjOCwgMHg0OAorK307CisrCisr c3RhdGljIGNvbnN0IEFFU19QUk5HX01DVCBhZXNfMTI4X21jdF90diA9IHsKKysgICAgLyogRFQg Ki8KKysgICAgezB4NjMsIDB4NzYsIDB4YmIsIDB4ZTUsIDB4MjksIDB4MDIsIDB4YmEsIDB4M2Is CisrICAgICAweDY3LCAweGM5LCAweDI1LCAweGZhLCAweDcwLCAweDFmLCAweDExLCAweGFjfSwK KysgICAgLyogViAqLworKyAgICB7MHg1NywgMHgyYywgMHg4ZSwgMHg3NiwgMHg4NywgMHgyNiwg MHg0NywgMHg5NywKKysgICAgIDB4N2UsIDB4NzQsIDB4ZmIsIDB4ZGQsIDB4YzQsIDB4OTUsIDB4 MDEsIDB4ZDF9LAorKyAgICAvKiBSICovCisrICAgIHsweDQ4LCAweGU5LCAweGJkLCAweDBkLCAw eDA2LCAweGVlLCAweDE4LCAweGZiLAorKyAgICAgMHhlNCwgMHg1NywgMHg5MCwgMHhkNSwgMHhj MywgMHhmYywgMHg5YiwgMHg3M30KKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IGFlc18xOTJfbWN0X2tleVsyNF0gPQorKyAgICB7IDB4YjcsIDB4NmMsIDB4MzQsIDB4ZDEsIDB4 MDksIDB4NjcsIDB4YWIsIDB4NzMsCisrICAgIDB4NGQsIDB4NWEsIDB4ZDUsIDB4MzQsIDB4OTgs IDB4MTYsIDB4MGIsIDB4OTEsCisrICAgIDB4YmMsIDB4MzUsIDB4NTEsIDB4MTYsIDB4NmIsIDB4 YWUsIDB4OTMsIDB4OGEKKyt9OworKworK3N0YXRpYyBjb25zdCBBRVNfUFJOR19NQ1QgYWVzXzE5 Ml9tY3RfdHYgPSB7CisrICAgIC8qIERUICovCisrICAgIHsweDg0LCAweGNlLCAweDIyLCAweDdk LCAweDkxLCAweDVhLCAweGEzLCAweGM5LAorKyAgICAgMHg4NCwgMHgzYywgMHgwYSwgMHhiMywg MHhhOSwgMHg2MywgMHgxNSwgMHg1Mn0sCisrICAgIC8qIFYgKi8KKysgICAgezB4YjYsIDB4YWYs IDB4ZTYsIDB4OGYsIDB4OTksIDB4OWUsIDB4OTAsIDB4NjQsCisrICAgICAweGRkLCAweGM3LCAw eDdhLCAweGMxLCAweGJiLCAweDkwLCAweDNhLCAweDZkfSwKKysgICAgLyogUiAqLworKyAgICB7 MHhmYywgMHg4NSwgMHg2MCwgMHg5YSwgMHgyOSwgMHg2ZiwgMHhlZiwgMHgyMSwKKysgICAgIDB4 ZGQsIDB4ODYsIDB4MjAsIDB4MzIsIDB4OGEsIDB4MjksIDB4NmYsIDB4NDd9CisrfTsKKysKKytz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBhZXNfMjU2X21jdF9rZXlbMzJdID0KKysgICAgeyAw eDliLCAweDA1LCAweGM4LCAweDY4LCAweGZmLCAweDQ3LCAweGY4LCAweDNhLAorKyAgICAweGE2 LCAweDNhLCAweGE4LCAweGNiLCAweDRlLCAweDcxLCAweGIyLCAweGUwLAorKyAgICAweGI4LCAw eDdlLCAweGYxLCAweDM3LCAweGI2LCAweGI0LCAweGY2LCAweDZkLAorKyAgICAweDg2LCAweDMy LCAweGZjLCAweDFmLCAweDVlLCAweDFkLCAweDFlLCAweDUwCisrfTsKKysKKytzdGF0aWMgY29u c3QgQUVTX1BSTkdfTUNUIGFlc18yNTZfbWN0X3R2ID0geworKyAgICAvKiBEVCAqLworKyAgICB7 MHgzMSwgMHg2ZSwgMHgzNSwgMHg5YSwgMHhiMSwgMHg0NCwgMHhmMCwgMHhlZSwKKysgICAgIDB4 NjIsIDB4NmQsIDB4MDQsIDB4NDYsIDB4ZTAsIDB4YTMsIDB4OTIsIDB4NGN9LAorKyAgICAvKiBW ICovCisrICAgIHsweDRmLCAweGNkLCAweGMxLCAweDg3LCAweDgyLCAweDFmLCAweDRkLCAweGEx LAorKyAgICAgMHgzZSwgMHgwZSwgMHg1NiwgMHg0NCwgMHg1OSwgMHhlOCwgMHg4MywgMHhjYX0s CisrICAgIC8qIFIgKi8KKysgICAgezB4YzgsIDB4ODcsIDB4YzIsIDB4NjEsIDB4NWIsIDB4ZDAs IDB4YjksIDB4ZTEsCisrICAgICAweGU3LCAweGYzLCAweDhiLCAweGQ3LCAweDViLCAweGQ1LCAw eGYxLCAweDhkfQorK307CisrCisrc3RhdGljIHZvaWQgZHVtcChjb25zdCB1bnNpZ25lZCBjaGFy ICpiLCBpbnQgbikKKyt7CisrICAgIHdoaWxlIChuLS0gPiAwKSB7CisrICAgICAgICBwcmludGYo IiAlMDJ4IiwgKmIrKyk7CisrICAgIH0KKyt9CisrCisrc3RhdGljIHZvaWQgY29tcGFyZShjb25z dCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsCisrICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyICpleHBlY3RlZCwgaW50IG4pCisreworKyAgICBpbnQgaTsKKysKKysgICAgZm9y IChpID0gMDsgaSA8IG47ICsraSkKKysgICAgICAgIGlmIChyZXN1bHRbaV0gIT0gZXhwZWN0ZWRb aV0pIHsKKysgICAgICAgICAgICBwdXRzKCJSYW5kb20gdGVzdCBmYWlsZWQsIGdvdDoiKTsKKysg ICAgICAgICAgICBkdW1wKHJlc3VsdCwgbik7CisrICAgICAgICAgICAgcHV0cygiXG4gICAgICAg ICAgICAgICBleHBlY3RlZDoiKTsKKysgICAgICAgICAgICBkdW1wKGV4cGVjdGVkLCBuKTsKKysg ICAgICAgICAgICBwdXRjaGFyKCdcbicpOworKyAgICAgICAgICAgIEVYSVQoMSk7CisrICAgICAg ICB9CisrfQorKworK3N0YXRpYyB2b2lkIHJ1bl90ZXN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtl eSwgaW50IGtleWxlbiwKKysgICAgICAgICAgICAgICAgICAgICBjb25zdCBBRVNfUFJOR19NQ1Qg KiB0dikKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XSwgZHRbMTZdOworKyAgICBpbnQg aSwgajsKKysgICAgRklQU194OTMxX3Jlc2V0KCk7CisrICAgIEZJUFNfeDkzMV90ZXN0X21vZGUo KTsKKysgICAgRklQU194OTMxX3NldF9rZXkoa2V5LCBrZXlsZW4pOworKyAgICBGSVBTX3g5MzFf c2VlZCh0di0+ViwgMTYpOworKyAgICBtZW1jcHkoZHQsIHR2LT5EVCwgMTYpOworKyAgICBmb3Ig KGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworKyAgICAgICAgRklQU194OTMxX3NldF9kdChkdCk7 CisrICAgICAgICBGSVBTX3g5MzFfYnl0ZXMoYnVmLCAxNik7CisrICAgICAgICAvKiBJbmNyZW1l bnQgRFQgKi8KKysgICAgICAgIGZvciAoaiA9IDE1OyBqID49IDA7IGotLSkgeworKyAgICAgICAg ICAgIGR0W2pdKys7CisrICAgICAgICAgICAgaWYgKGR0W2pdKQorKyAgICAgICAgICAgICAgICBi cmVhazsKKysgICAgICAgIH0KKysgICAgfQorKworKyAgICBjb21wYXJlKGJ1ZiwgdHYtPlIsIDE2 KTsKKyt9CisrCisraW50IG1haW4oKQorK3sKKysgICAgcnVuX3Rlc3QoYWVzXzEyOF9tY3Rfa2V5 LCAxNiwgJmFlc18xMjhfbWN0X3R2KTsKKysgICAgcHJpbnRmKCJGSVBTIFBSTkcgdGVzdCAxIGRv bmVcbiIpOworKyAgICBydW5fdGVzdChhZXNfMTkyX21jdF9rZXksIDI0LCAmYWVzXzE5Ml9tY3Rf dHYpOworKyAgICBwcmludGYoIkZJUFMgUFJORyB0ZXN0IDIgZG9uZVxuIik7CisrICAgIHJ1bl90 ZXN0KGFlc18yNTZfbWN0X2tleSwgMzIsICZhZXNfMjU2X21jdF90dik7CisrICAgIHByaW50Zigi RklQUyBQUk5HIHRlc3QgMyBkb25lXG4iKTsKKysgICAgcmV0dXJuIDA7CisrfQorKworKyNlbmRp ZgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19yc2Ffc2VsZnRlc3Qu Yy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfcnNhX3NlbGZ0ZXN0LmMKKy0t LSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jLmZpcHMJMjAx Ni0wNS0wMyAxNjo1Nzo1OC44MzEzMjEyMjggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlw dG8vZmlwcy9maXBzX3JzYV9zZWxmdGVzdC5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODMxMzIxMjI4 ICswMjAwCitAQCAtMCwwICsxLDQ0NCBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisrICogQ29weXJpZ2h0 IChjKSAyMDAzLTIwMDcgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv cm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisr ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAqCisrICogMi4gUmVkaXN0cmlidXRpb25zIGlu IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy b3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJpYnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFk dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisr ICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6 CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhl IE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4g KGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysgKgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNT TCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAq ICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy ZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9y Zy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBu b3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBp biB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9m IHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55 IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93 bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9w ZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wg VG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisr ICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklT SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICov CisrCisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyNp ZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKyNlbmRpZgor KyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorKyNp bmNsdWRlIDxvcGVuc3NsL2JuLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvb3BlbnNzbGNvbmYuaD4K KysKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg bltdID0KKysgICAgIlx4MDBceEJCXHhGOFx4MkZceDA5XHgwNlx4ODJceENFXHg5Q1x4MjNceDM4 XHhBQ1x4MkJceDlEXHhBOFx4NzEiCisrICAgICJceEY3XHgzNlx4OERceDA3XHhFRVx4RDRceDEw XHg0M1x4QTRceDQwXHhENlx4QjZceEYwXHg3NFx4NTRceEY1IgorKyAgICAiXHgxRlx4QjhceERG XHhCQVx4QUZceDAzXHg1Q1x4MDJceEFCXHg2MVx4RUFceDQ4XHhDRVx4RUJceDZGXHhDRCIKKysg ICAgIlx4NDhceDc2XHhFRFx4NTJceDBEXHg2MFx4RTFceEVDXHg0Nlx4MTlceDcxXHg5RFx4OEFc eDVCXHg4Qlx4ODAiCisrICAgICJceDdGXHhBRlx4QjhceEUwXHhBM1x4REZceEM3XHgzN1x4NzJc eDNFXHhFNlx4QjRceEI3XHhEOVx4M0FceDI1IgorKyAgICAiXHg4NFx4RUVceDZBXHg2NFx4OURc eDA2XHgwOVx4NTNceDc0XHg4OFx4MzRceEIyXHg0NVx4NDVceDk4XHgzOSIKKysgICAgIlx4NEVc eEUwXHhBQVx4QjFceDJEXHg3Qlx4NjFceEE1XHgxRlx4NTJceDdBXHg5QVx4NDFceEY2XHhDMVx4 NjgiCisrICAgICJceDdGXHhFMlx4NTNceDcyXHg5OFx4Q0FceDJBXHg4Rlx4NTlceDQ2XHhGOFx4 RTVceEZEXHgwOVx4MURceEJEIiAiXHhDQiI7CisrCisrc3RhdGljIGludCBjb3JydXB0X3JzYTsK KysKKytzdGF0aWMgaW50IHNldHJzYWtleShSU0EgKmtleSkKKyt7CisrICAgIHN0YXRpYyBjb25z dCB1bnNpZ25lZCBjaGFyIGVbXSA9ICJceDExIjsKKysKKysgICAgc3RhdGljIGNvbnN0IHVuc2ln bmVkIGNoYXIgZFtdID0KKysgICAgICAgICJceDAwXHhBNVx4REFceEZDXHg1M1x4NDFceEZBXHhG Mlx4ODlceEM0XHhCOVx4ODhceERCXHgzMFx4QzFceENEIgorKyAgICAgICAgIlx4RjhceDNGXHgz MVx4MjVceDFFXHgwNlx4NjhceEI0XHgyN1x4ODRceDgxXHgzOFx4MDFceDU3XHg5Nlx4NDEiCisr ICAgICAgICAiXHhCMlx4OTRceDEwXHhCM1x4QzdceDk5XHg4RFx4NkJceEM0XHg2NVx4NzRceDVF XHg1Q1x4MzlceDI2XHg2OSIKKysgICAgICAgICJceEQ2XHg4N1x4MERceEEyXHhDMFx4ODJceEE5 XHgzOVx4RTNceDdGXHhEQ1x4QjhceDJFXHhDOVx4M0VceERBIgorKyAgICAgICAgIlx4QzlceDdG XHhGM1x4QURceDU5XHg1MFx4QUNceENGXHhCQ1x4MTFceDFDXHg3Nlx4RjFceEE5XHg1Mlx4OTQi CisrICAgICAgICAiXHg0NFx4RTVceDZBXHhBRlx4NjhceEM1XHg2Q1x4MDlceDJDXHhEM1x4OERc eEMzXHhCRVx4RjVceEQyXHgwQSIKKysgICAgICAgICJceDkzXHg5OVx4MjZceEVEXHg0Rlx4NzRc eEExXHgzRVx4RERceEZCXHhFMVx4QTFceENFXHhDQ1x4NDhceDk0IgorKyAgICAgICAgIlx4QUZc eDk0XHgyOFx4QzJceEI3XHhCOFx4ODhceDNGXHhFNFx4NDZceDNBXHg0Qlx4QzhceDVCXHgxQ1x4 QjMiCisrICAgICAgICAiXHhDMSI7CisrCisrICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy IHBbXSA9CisrICAgICAgICAiXHgwMFx4RUVceENGXHhBRVx4ODFceEIxXHhCOVx4QjNceEM5XHgw OFx4ODFceDBCXHgxMFx4QTFceEI1XHg2MCIKKysgICAgICAgICJceDAxXHg5OVx4RUJceDlGXHg0 NFx4QUVceEY0XHhGRFx4QTRceDkzXHhCOFx4MUFceDlFXHgzRFx4ODRceEY2IgorKyAgICAgICAg Ilx4MzJceDEyXHg0RVx4RjBceDIzXHg2RVx4NURceDFFXHgzQlx4N0VceDI4XHhGQVx4RTdceEFB XHgwNFx4MEEiCisrICAgICAgICAiXHgyRFx4NUJceDI1XHgyMVx4NzZceDQ1XHg5RFx4MUZceDM5 XHg3NVx4NDFceEJBXHgyQVx4NThceEZCXHg2NSIKKysgICAgICAgICJceDk5IjsKKysKKysgICAg c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcVtdID0KKysgICAgICAgICJceDAwXHhDOVx4N0Zc eEIxXHhGMFx4MjdceEY0XHg1M1x4RjZceDM0XHgxMlx4MzNceEVBXHhBQVx4RDFceEQ5IgorKyAg ICAgICAgIlx4MzVceDNGXHg2Q1x4NDJceEQwXHg4OFx4NjZceEIxXHhEMFx4NUFceDBGXHgyMFx4 MzVceDAyXHg4Qlx4OUQiCisrICAgICAgICAiXHg4Nlx4OThceDQwXHhCNFx4MTZceDY2XHhCNFx4 MkVceDkyXHhFQVx4MERceEEzXHhCNFx4MzJceDA0XHhCNSIKKysgICAgICAgICJceENGXHhDRVx4 MzNceDUyXHg1Mlx4NERceDA0XHgxNlx4QTVceEE0XHg0MVx4RTdceDAwXHhBRlx4NDZceDE1Igor KyAgICAgICAgIlx4MDMiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkbXAx W10gPQorKyAgICAgICAgIlx4NTRceDQ5XHg0Q1x4QTZceDNFXHhCQVx4MDNceDM3XHhFNFx4RTJc eDQwXHgyM1x4RkNceEQ2XHg5QVx4NUEiCisrICAgICAgICAiXHhFQlx4MDdceEREXHhEQ1x4MDFc eDgzXHhBNFx4RDBceEFDXHg5Qlx4NTRceEIwXHg1MVx4RjJceEIxXHgzRSIKKysgICAgICAgICJc eEQ5XHg0OVx4MDlceDc1XHhFQVx4QjdceDc0XHgxNFx4RkZceDU5XHhDMVx4RjdceDY5XHgyRVx4 OUFceDJFIgorKyAgICAgICAgIlx4MjBceDJCXHgzOFx4RkNceDkxXHgwQVx4NDdceDQxXHg3NFx4 QURceEM5XHgzQ1x4MUZceDY3XHhDOVx4ODEiOworKworKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBkbXExW10gPQorKyAgICAgICAgIlx4NDdceDFFXHgwMlx4OTBceEZGXHgwQVx4RjBc eDc1XHgwM1x4NTFceEI3XHhGOFx4NzhceDg2XHg0Q1x4QTkiCisrICAgICAgICAiXHg2MVx4QURc eEJEXHgzQVx4OEFceDdFXHg5OVx4MUNceDVDXHgwNVx4NTZceEE5XHg0Q1x4MzFceDQ2XHhBNyIK KysgICAgICAgICJceEY5XHg4MFx4M0ZceDhGXHg2Rlx4OEFceEUzXHg0Mlx4RTlceDMxXHhGRFx4 OEFceEU0XHg3QVx4MjJceDBEIgorKyAgICAgICAgIlx4MUJceDk5XHhBNFx4OTVceDg0XHg5OFx4 MDdceEZFXHgzOVx4RjlceDI0XHg1QVx4OThceDM2XHhEQVx4M0QiOworKworKyAgICBzdGF0aWMg Y29uc3QgdW5zaWduZWQgY2hhciBpcW1wW10gPQorKyAgICAgICAgIlx4MDBceEIwXHg2Q1x4NEZc eERBXHhCQlx4NjNceDAxXHgxOVx4OERceDI2XHg1Qlx4REJceEFFXHg5NFx4MjMiCisrICAgICAg ICAiXHhCM1x4ODBceEYyXHg3MVx4RjdceDM0XHg1M1x4ODhceDUwXHg5M1x4MDdceDdGXHhDRFx4 MzlceEUyXHgxMSIKKysgICAgICAgICJceDlGXHhDOVx4ODZceDMyXHgxNVx4NEZceDU4XHg4M1x4 QjFceDY3XHhBOVx4NjdceEJGXHg0MFx4MkJceDRFIgorKyAgICAgICAgIlx4OUVceDJFXHgwRlx4 OTZceDU2XHhFNlx4OThceEVBXHgzNlx4NjZceEVEXHhGQlx4MjVceDc5XHg4MFx4MzkiCisrICAg ICAgICAiXHhGNyI7CisrCisrICAgIGtleS0+biA9IEJOX2JpbjJibihuLCBzaXplb2YobikgLSAx LCBrZXktPm4pOworKyAgICBpZiAoY29ycnVwdF9yc2EpCisrICAgICAgICBCTl9zZXRfYml0KGtl eS0+biwgMTAyNCk7CisrICAgIGtleS0+ZSA9IEJOX2JpbjJibihlLCBzaXplb2YoZSkgLSAxLCBr ZXktPmUpOworKyAgICBrZXktPmQgPSBCTl9iaW4yYm4oZCwgc2l6ZW9mKGQpIC0gMSwga2V5LT5k KTsKKysgICAga2V5LT5wID0gQk5fYmluMmJuKHAsIHNpemVvZihwKSAtIDEsIGtleS0+cCk7Cisr ICAgIGtleS0+cSA9IEJOX2JpbjJibihxLCBzaXplb2YocSkgLSAxLCBrZXktPnEpOworKyAgICBr ZXktPmRtcDEgPSBCTl9iaW4yYm4oZG1wMSwgc2l6ZW9mKGRtcDEpIC0gMSwga2V5LT5kbXAxKTsK KysgICAga2V5LT5kbXExID0gQk5fYmluMmJuKGRtcTEsIHNpemVvZihkbXExKSAtIDEsIGtleS0+ ZG1xMSk7CisrICAgIGtleS0+aXFtcCA9IEJOX2JpbjJibihpcW1wLCBzaXplb2YoaXFtcCkgLSAx LCBrZXktPmlxbXApOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrdm9pZCBGSVBTX2NvcnJ1cHRf cnNhKCkKKyt7CisrICAgIGNvcnJ1cHRfcnNhID0gMTsKKyt9CisrCisrLyogS25vd24gQW5zd2Vy IFRlc3QgKEtBVCkgZGF0YSBmb3IgdGhlIGFib3ZlIFJTQSBwcml2YXRlIGtleSBzaWduaW5nCisr ICoga2F0X3Ricy4KKysgKi8KKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrYXRfdGJz W10gPQorKyAgICAiT3BlblNTTCBGSVBTIDE0MC0yIFB1YmxpYyBLZXkgUlNBIEtBVCI7CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9QU1NfU0hBMVtdID0geworKyAgICAw eDJELCAweEFGLCAweDZFLCAweEMyLCAweDk4LCAweEZCLCAweDhBLCAweEExLCAweEI5LCAweDQ2 LCAweERBLCAweDBGLAorKyAgICAweDAxLCAweDFFLCAweDM3LCAweDkzLCAweEMyLCAweDU1LCAw eDI3LCAweEU0LCAweDFELCAweEQyLCAweDkwLCAweEJCLAorKyAgICAweEY0LCAweEJGLCAweDRB LCAweDc0LCAweDM5LCAweDUxLCAweEJCLCAweEU4LCAweDBDLCAweEI3LCAweEY4LCAweEQzLAor KyAgICAweEQxLCAweERGLCAweEU3LCAweEJFLCAweDgwLCAweDA1LCAweEMzLCAweEI1LCAweEM3 LCAweDgzLCAweEQ1LCAweDRDLAorKyAgICAweDdGLCAweDQ5LCAweEZCLCAweDNGLCAweDI5LCAw eDlCLCAweEUxLCAweDEyLCAweDUxLCAweDYwLCAweEQwLCAweEE3LAorKyAgICAweDBELCAweEE5 LCAweDI4LCAweDU2LCAweDczLCAweEQ5LCAweDA3LCAweEUzLCAweDVFLCAweDNGLCAweDlCLCAw eEY1LAorKyAgICAweEI2LCAweEYzLCAweEYyLCAweDVFLCAweDc0LCAweEM5LCAweDgzLCAweDgx LCAweDQ3LCAweEYwLCAweEM1LCAweDQ1LAorKyAgICAweDBBLCAweEU5LCAweDhFLCAweDM4LCAw eEQ3LCAweDE4LCAweEM2LCAweDJBLCAweDBGLCAweEY4LCAweEI3LCAweDMxLAorKyAgICAweEQ2 LCAweDU1LCAweEU0LCAweDY2LCAweDc4LCAweDgxLCAweEQ0LCAweEU2LCAweERCLCAweDlGLCAw eEJBLCAweEU4LAorKyAgICAweDIzLCAweEI1LCAweDdGLCAweERDLCAweDA4LCAweEVBLCAweEQ1 LCAweDI2LCAweDFFLCAweDIwLCAweDI1LCAweDg0LAorKyAgICAweDI2LCAweEM2LCAweDc5LCAw eEM5LCAweDlCLCAweDNELCAweDdFLCAweEE5CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWdu ZWQgY2hhciBrYXRfUlNBX1BTU19TSEEyMjRbXSA9IHsKKysgICAgMHgzOSwgMHg0QSwgMHg2QSwg MHgyMCwgMHhCQywgMHhFOSwgMHgzMywgMHhFRCwgMHhFRiwgMHhDNSwgMHg1OCwgMHhBNywKKysg ICAgMHhGRSwgMHg4MSwgMHhDNCwgMHgzNiwgMHg1MCwgMHg5QSwgMHgyQywgMHg4MiwgMHg5OCwg MHgwOCwgMHg5NSwgMHhGQSwKKysgICAgMHhCMSwgMHg5RSwgMHhEMiwgMHg1NSwgMHg2MSwgMHg4 NywgMHgyMSwgMHg1OSwgMHg4NywgMHg3QiwgMHgxRiwgMHg1NywKKysgICAgMHgzMCwgMHg5RCwg MHgwRCwgMHg0QSwgMHgwNiwgMHhFQiwgMHg1MiwgMHgzNywgMHg1NSwgMHg1NCwgMHgxQywgMHg4 OSwKKysgICAgMHg4MywgMHg3NSwgMHg1OSwgMHg2NSwgMHg2NCwgMHg5MCwgMHgyRSwgMHgxNiwg MHhDQywgMHg4NiwgMHgwNSwgMHhFRSwKKysgICAgMHhCMSwgMHhFNiwgMHg3QiwgMHhCQSwgMHgx NiwgMHg3NSwgMHgwRCwgMHgwQywgMHg2NCwgMHgwQiwgMHhBQiwgMHgyMiwKKysgICAgMHgxNSwg MHg3OCwgMHg2QiwgMHg2RiwgMHhBNCwgMHhGQiwgMHg3NywgMHg0MCwgMHg2NCwgMHg2MiwgMHhE MSwgMHhCNSwKKysgICAgMHgzNywgMHgxRSwgMHhFMCwgMHgzRCwgMHhBOCwgMHhGOSwgMHhEMiwg MHhCRCwgMHhBQSwgMHgzOCwgMHgyNCwgMHg0OSwKKysgICAgMHg1OCwgMHhEMiwgMHg3NCwgMHg4 NSwgMHhGNCwgMHhCNSwgMHg5MywgMHg4RSwgMHhGNSwgMHgwMywgMHhFQSwgMHgyRCwKKysgICAg MHhDOCwgMHg1MiwgMHhGQSwgMHhDRiwgMHg3RSwgMHgzNSwgMHhCMCwgMHg2QSwgMHhBRiwgMHg5 NSwgMHhDMCwgMHgwMCwKKysgICAgMHg1NCwgMHg3NiwgMHgzRCwgMHgwQywgMHg5QywgMHhCMiwg MHhFRSwgMHhDMAorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9Q U1NfU0hBMjU2W10gPSB7CisrICAgIDB4NkQsIDB4M0QsIDB4QkUsIDB4OEYsIDB4NjAsIDB4NkQs IDB4MjUsIDB4MTQsIDB4RjAsIDB4MzEsIDB4RTMsIDB4ODksCisrICAgIDB4MDAsIDB4OTcsIDB4 RkEsIDB4OTksIDB4NzEsIDB4MjgsIDB4RTUsIDB4MTAsIDB4MjUsIDB4OUEsIDB4RjMsIDB4OEYs CisrICAgIDB4N0IsIDB4QzUsIDB4QTgsIDB4NEEsIDB4NzQsIDB4NTEsIDB4MzYsIDB4RTIsIDB4 OEQsIDB4N0QsIDB4NzMsIDB4MjgsCisrICAgIDB4QzEsIDB4NzcsIDB4QzYsIDB4MjcsIDB4OTcs IDB4MDAsIDB4OEIsIDB4MDAsIDB4QTMsIDB4OTYsIDB4NzMsIDB4NEUsCisrICAgIDB4N0QsIDB4 MkUsIDB4MkMsIDB4MzQsIDB4NjgsIDB4OEMsIDB4OEUsIDB4REYsIDB4OUQsIDB4NDksIDB4NDcs IDB4MDUsCisrICAgIDB4QUIsIDB4RjUsIDB4MDEsIDB4RDYsIDB4ODEsIDB4NDcsIDB4NzAsIDB4 RjUsIDB4MUQsIDB4NkQsIDB4MjYsIDB4QkEsCisrICAgIDB4MkYsIDB4N0EsIDB4NTQsIDB4NTMs IDB4NEUsIDB4RUQsIDB4NzEsIDB4RDksIDB4NUEsIDB4RjMsIDB4REEsIDB4QjYsCisrICAgIDB4 MEIsIDB4NDcsIDB4MzQsIDB4QUYsIDB4OTAsIDB4REMsIDB4QzgsIDB4RDksIDB4NkYsIDB4NTYs IDB4Q0QsIDB4OUYsCisrICAgIDB4MjEsIDB4QjcsIDB4N0UsIDB4QUQsIDB4N0MsIDB4MkYsIDB4 NzUsIDB4NTAsIDB4NDcsIDB4MTIsIDB4RTQsIDB4NkQsCisrICAgIDB4NUYsIDB4QjcsIDB4MDEs IDB4REYsIDB4QzMsIDB4MTEsIDB4NkMsIDB4QTksIDB4OUUsIDB4NDksIDB4QjksIDB4RjYsCisr ICAgIDB4NzIsIDB4RjQsIDB4RjYsIDB4RUYsIDB4ODgsIDB4MUUsIDB4MkQsIDB4MUMKKyt9Owor KworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfUFNTX1NIQTM4NFtdID0gewor KyAgICAweDQwLCAweEZCLCAweEExLCAweDIxLCAweEY0LCAweEIyLCAweDQwLCAweDlBLCAweEI0 LCAweDMxLCAweEE4LCAweEYyLAorKyAgICAweEVDLCAweDFDLCAweEM0LCAweEM4LCAweDdDLCAw eDIyLCAweDY1LCAweDlDLCAweDU3LCAweDQ1LCAweENELCAweDVFLAorKyAgICAweDg2LCAweDAw LCAweEY3LCAweDI1LCAweDc4LCAweERFLCAweERDLCAweDdBLCAweDcxLCAweDQ0LCAweDlBLCAw eENELAorKyAgICAweEFBLCAweDI1LCAweEY0LCAweEIyLCAweEZDLCAweEYwLCAweDc1LCAweEQ5 LCAweDJGLCAweDc4LCAweDIzLCAweDdGLAorKyAgICAweDZGLCAweDAyLCAweEVGLCAweEMxLCAw eEFGLCAweEE2LCAweDI4LCAweDE2LCAweDMxLCAweERDLCAweDQyLCAweDZDLAorKyAgICAweEIy LCAweDQ0LCAweEU1LCAweDRELCAweDY2LCAweEEyLCAweEU2LCAweDcxLCAweEYzLCAweEFDLCAw eDRGLCAweEZCLAorKyAgICAweDkxLCAweENBLCAweEY1LCAweDcwLCAweEVGLCAweDZCLCAweDlE LCAweEE0LCAweEVGLCAweEQ5LCAweDNELCAweDJGLAorKyAgICAweDNBLCAweEJFLCAweDg5LCAw eDM4LCAweDU5LCAweDAxLCAweEJBLCAweERBLCAweDMyLCAweEFELCAweDQyLCAweDg5LAorKyAg ICAweDk4LCAweDhCLCAweDM5LCAweDQ0LCAweEYwLCAweEZDLCAweDM4LCAweEFDLCAweDg3LCAw eDFGLCAweENBLCAweDZGLAorKyAgICAweDQ4LCAweEY2LCAweEFFLCAweEQ3LCAweDQ1LCAweEVF LCAweEFFLCAweDg4LCAweDBFLCAweDYwLCAweEY0LCAweDU1LAorKyAgICAweDQ4LCAweDQ0LCAw eEVFLCAweDFGLCAweDkwLCAweDE4LCAweDRCLCAweEYxCisrfTsKKysKKytzdGF0aWMgY29uc3Qg dW5zaWduZWQgY2hhciBrYXRfUlNBX1BTU19TSEE1MTJbXSA9IHsKKysgICAgMHgwNywgMHgxRSwg MHhEOCwgMHhENSwgMHgwNSwgMHhFOCwgMHhFNiwgMHhFNiwgMHg1NywgMHhBRSwgMHg2MywgMHg4 QywKKysgICAgMHhDNiwgMHg4MywgMHhCNywgMHhBMCwgMHg1OSwgMHhCQiwgMHhGMiwgMHhDNiwg MHg4RiwgMHgxMiwgMHg1MywgMHg5QSwKKysgICAgMHg5QiwgMHg1NCwgMHg5RSwgMHhCMywgMHhD MSwgMHgxRCwgMHgyMywgMHg0RCwgMHg1MSwgMHhFRCwgMHg5RSwgMHhERCwKKysgICAgMHg0Qiwg MHhGMywgMHg0NiwgMHg5QiwgMHg2QiwgMHhGNiwgMHg3QywgMHgyNCwgMHg2MCwgMHg3OSwgMHgy MywgMHgzOSwKKysgICAgMHgwMSwgMHgxQywgMHg1MSwgMHhDQiwgMHhEOCwgMHhFOSwgMHg5QSwg MHgwMSwgMHg2NywgMHg1RiwgMHhGRSwgMHhENywKKysgICAgMHg3QywgMHhFMywgMHg3RiwgMHhF RCwgMHhEQiwgMHg4NywgMHhCQiwgMHhGMCwgMHgzRCwgMHg3OCwgMHg1NSwgMHg2MSwKKysgICAg MHg1NywgMHhFMywgMHgwRiwgMHhFMywgMHhEMiwgMHg5RCwgMHgwQywgMHgyQSwgMHgyMCwgMHhC MCwgMHg4NSwgMHgxMywKKysgICAgMHhDNSwgMHg0NywgMHgzNCwgMHgwRCwgMHgzMiwgMHgxNSwg MHhDOCwgMHhBRSwgMHg5QSwgMHg2QSwgMHgzOSwgMHg2MywKKysgICAgMHgyRCwgMHg2MCwgMHhG NSwgMHg0QywgMHhERiwgMHg4QSwgMHg0OCwgMHg0QiwgMHhCRiwgMHhGNCwgMHhBOCwgMHhGRSwK KysgICAgMHg3NiwgMHhGMiwgMHgzMiwgMHgxQiwgMHg5QywgMHg3QywgMHhDQSwgMHhGRSwgMHg3 RiwgMHg4MCwgMHhDMiwgMHg4OCwKKysgICAgMHg1QywgMHg5NywgMHg3MCwgMHhCNCwgMHgyNiwg MHhDOSwgMHgxNCwgMHg4QgorK307CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0 X1JTQV9TSEExW10gPSB7CisrICAgIDB4NzEsIDB4RUUsIDB4MUEsIDB4QzAsIDB4RkUsIDB4MDEs IDB4OTMsIDB4NTQsIDB4NzksIDB4NUMsIDB4RjIsIDB4NEMsCisrICAgIDB4NEEsIDB4RkQsIDB4 MUEsIDB4MDUsIDB4OEYsIDB4NjQsIDB4QjEsIDB4NkQsIDB4NjEsIDB4MzMsIDB4OEQsIDB4OUIs CisrICAgIDB4RTcsIDB4RkQsIDB4NjAsIDB4QTMsIDB4ODMsIDB4QjUsIDB4QTMsIDB4NTEsIDB4 NTUsIDB4NzcsIDB4OTAsIDB4Q0YsCisrICAgIDB4REMsIDB4MjIsIDB4MzcsIDB4OEUsIDB4RDAs IDB4RTEsIDB4QUUsIDB4MDksIDB4RTMsIDB4M0QsIDB4MUUsIDB4RjgsCisrICAgIDB4ODAsIDB4 RDEsIDB4OEIsIDB4QzIsIDB4RUMsIDB4MEEsIDB4RDcsIDB4NkIsIDB4ODgsIDB4OEIsIDB4OEIs IDB4QTEsCisrICAgIDB4MjAsIDB4MjIsIDB4QkUsIDB4NTksIDB4NUIsIDB4RTAsIDB4MjMsIDB4 MjQsIDB4QTEsIDB4NDksIDB4MzAsIDB4QkEsCisrICAgIDB4QTksIDB4OUUsIDB4RTgsIDB4QjEs IDB4OEEsIDB4NjIsIDB4MTYsIDB4QkYsIDB4NEUsIDB4Q0EsIDB4MkUsIDB4NEUsCisrICAgIDB4 QkMsIDB4MjksIDB4QTgsIDB4NjcsIDB4MTMsIDB4QjcsIDB4OUYsIDB4MUQsIDB4MDQsIDB4NDQs IDB4RTUsIDB4NUYsCisrICAgIDB4MzUsIDB4MDcsIDB4MTEsIDB4QkMsIDB4RUQsIDB4MTksIDB4 MzcsIDB4MjEsIDB4Q0YsIDB4MjMsIDB4NDgsIDB4MUYsCisrICAgIDB4NzIsIDB4MDUsIDB4REUs IDB4RTYsIDB4RTgsIDB4N0YsIDB4MzMsIDB4OEEsIDB4NzYsIDB4NEIsIDB4MkYsIDB4OTUsCisr ICAgIDB4REYsIDB4RjEsIDB4NUYsIDB4ODQsIDB4ODAsIDB4RDksIDB4NDYsIDB4QjQKKyt9Owor KworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBMjI0W10gPSB7CisrICAg IDB4NjIsIDB4QUEsIDB4NzksIDB4QTksIDB4MTgsIDB4MEUsIDB4NUYsIDB4OEMsIDB4QkIsIDB4 QjcsIDB4MTUsIDB4RjksCisrICAgIDB4MjUsIDB4QkIsIDB4RkEsIDB4RDQsIDB4M0EsIDB4MzQs IDB4RUQsIDB4OUUsIDB4QTAsIDB4QTksIDB4MTgsIDB4OEQsCisrICAgIDB4NUIsIDB4NTUsIDB4 OUEsIDB4N0UsIDB4MUUsIDB4MDgsIDB4MDgsIDB4NjAsIDB4QzUsIDB4MUEsIDB4QzUsIDB4ODks CisrICAgIDB4MDgsIDB4RTIsIDB4MUIsIDB4QkQsIDB4NjIsIDB4NTAsIDB4MTcsIDB4NzYsIDB4 MzAsIDB4MkMsIDB4OUUsIDB4Q0QsCisrICAgIDB4QTQsIDB4MDIsIDB4QUQsIDB4QjEsIDB4NkQs IDB4NDQsIDB4NkQsIDB4RDUsIDB4QzYsIDB4NDUsIDB4NDEsIDB4RTUsCisrICAgIDB4RUUsIDB4 MUYsIDB4OEQsIDB4N0UsIDB4MDgsIDB4MTYsIDB4QTYsIDB4RTEsIDB4NUUsIDB4MEIsIDB4QTks IDB4Q0MsCisrICAgIDB4REIsIDB4NTksIDB4NTUsIDB4ODcsIDB4MDksIDB4MjUsIDB4NzAsIDB4 ODYsIDB4ODQsIDB4MDIsIDB4QzYsIDB4M0IsCisrICAgIDB4MEIsIDB4NDQsIDB4NEMsIDB4NDYs IDB4OTUsIDB4RjQsIDB4RjgsIDB4NUEsIDB4OTEsIDB4MjgsIDB4M0UsIDB4QjIsCisrICAgIDB4 NTgsIDB4MkUsIDB4MDYsIDB4NDUsIDB4NDksIDB4RTAsIDB4OTIsIDB4RTIsIDB4QzAsIDB4NjYs IDB4RTYsIDB4MzUsCisrICAgIDB4RDksIDB4NzksIDB4N0YsIDB4MTcsIDB4NUUsIDB4MDIsIDB4 NzMsIDB4MDQsIDB4NzcsIDB4ODIsIDB4RTYsIDB4REMsCisrICAgIDB4NDAsIDB4MjEsIDB4ODks IDB4OEIsIDB4MzcsIDB4M0UsIDB4MUUsIDB4OEQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNp Z25lZCBjaGFyIGthdF9SU0FfU0hBMjU2W10gPSB7CisrICAgIDB4MEQsIDB4NTUsIDB4RTIsIDB4 QUEsIDB4ODEsIDB4REIsIDB4OEUsIDB4ODIsIDB4MDUsIDB4MTcsIDB4QTUsIDB4MjMsCisrICAg IDB4RTcsIDB4M0IsIDB4MUQsIDB4QUYsIDB4RkIsIDB4OEMsIDB4RDAsIDB4ODEsIDB4MjAsIDB4 N0IsIDB4QUEsIDB4MjMsCisrICAgIDB4OTIsIDB4ODcsIDB4OEMsIDB4RDEsIDB4NTMsIDB4ODUs IDB4MTYsIDB4REMsIDB4QkUsIDB4QUQsIDB4NkYsIDB4MzUsCisrICAgIDB4OTgsIDB4MkQsIDB4 NjksIDB4ODQsIDB4QkYsIDB4RDksIDB4OEEsIDB4MDEsIDB4MTcsIDB4NTgsIDB4QjIsIDB4NkUs CisrICAgIDB4MkMsIDB4NDQsIDB4OUIsIDB4OTAsIDB4RjEsIDB4RkIsIDB4NTEsIDB4RTgsIDB4 NkEsIDB4OTAsIDB4MkQsIDB4MTgsCisrICAgIDB4MEUsIDB4QzAsIDB4OTAsIDB4MTAsIDB4MjQs IDB4QTksIDB4MUQsIDB4QjMsIDB4NTgsIDB4N0EsIDB4OTEsIDB4MzAsCisrICAgIDB4QkUsIDB4 MjIsIDB4QzcsIDB4RDMsIDB4RUMsIDB4QzMsIDB4MDksIDB4NUQsIDB4QkYsIDB4RTIsIDB4ODAs IDB4M0EsCisrICAgIDB4N0MsIDB4ODUsIDB4QjQsIDB4QkMsIDB4RDEsIDB4RTksIDB4RjAsIDB4 NUMsIDB4REUsIDB4ODEsIDB4QTYsIDB4MzgsCisrICAgIDB4QjgsIDB4NDIsIDB4QkIsIDB4ODYs IDB4QzUsIDB4OUQsIDB4Q0UsIDB4N0MsIDB4MkMsIDB4RUUsIDB4RDEsIDB4REEsCisrICAgIDB4 MjcsIDB4NDgsIDB4MkIsIDB4RjUsIDB4QUIsIDB4QjksIDB4RjcsIDB4ODAsIDB4RDEsIDB4OTAs IDB4MjcsIDB4OTAsCisrICAgIDB4QkQsIDB4NDQsIDB4OTcsIDB4NjAsIDB4Q0QsIDB4NTcsIDB4 QzAsIDB4N0EKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hB Mzg0W10gPSB7CisrICAgIDB4MUQsIDB4RTMsIDB4NkEsIDB4REQsIDB4MjcsIDB4NEMsIDB4QzAs IDB4QTUsIDB4MjcsIDB4RUYsIDB4RTYsIDB4MUYsCisrICAgIDB4RDIsIDB4OTEsIDB4NjgsIDB4 NTksIDB4MDQsIDB4QUUsIDB4QkQsIDB4OTksIDB4NjMsIDB4NTYsIDB4NDcsIDB4QzcsCisrICAg IDB4NkYsIDB4MjIsIDB4MTYsIDB4NDgsIDB4RDAsIDB4RjksIDB4MTgsIDB4QTksIDB4Q0EsIDB4 RkEsIDB4NUQsIDB4NUMsCisrICAgIDB4QTcsIDB4NjUsIDB4NTIsIDB4OEEsIDB4QzgsIDB4NDQs IDB4N0UsIDB4ODYsIDB4NUQsIDB4QTksIDB4QTYsIDB4NTUsCisrICAgIDB4NjUsIDB4M0UsIDB4 RDksIDB4MkQsIDB4MDIsIDB4MzgsIDB4QTgsIDB4NzksIDB4MjgsIDB4N0YsIDB4QjYsIDB4Q0Ys CisrICAgIDB4ODIsIDB4REQsIDB4N0UsIDB4NTUsIDB4RTEsIDB4QjEsIDB4QkMsIDB4RTIsIDB4 MTksIDB4MkIsIDB4MzAsIDB4QzIsCisrICAgIDB4MUIsIDB4MkIsIDB4QjAsIDB4ODIsIDB4NDYs IDB4QUMsIDB4NEIsIDB4RDEsIDB4RTIsIDB4N0QsIDB4RUIsIDB4OEMsCisrICAgIDB4RkYsIDB4 OTUsIDB4RTksIDB4NkEsIDB4MUMsIDB4M0QsIDB4NEQsIDB4QkYsIDB4OEYsIDB4OEIsIDB4OUMs IDB4Q0QsCisrICAgIDB4RUEsIDB4ODUsIDB4RUUsIDB4MDAsIDB4REMsIDB4MUMsIDB4QTcsIDB4 RUIsIDB4RDAsIDB4OEYsIDB4OTksIDB4RjEsCisrICAgIDB4MTYsIDB4MjgsIDB4MjQsIDB4NjQs IDB4MDQsIDB4MzksIDB4MkQsIDB4NTgsIDB4MUUsIDB4MzcsIDB4REMsIDB4MDQsCisrICAgIDB4 QkQsIDB4MzEsIDB4QTIsIDB4MkYsIDB4QjMsIDB4MzUsIDB4NTYsIDB4QkYKKyt9OworKworK3N0 YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfU0hBNTEyW10gPSB7CisrICAgIDB4Njks IDB4NTIsIDB4MUIsIDB4NTEsIDB4NUUsIDB4MDYsIDB4Q0EsIDB4OUIsIDB4MTYsIDB4NTEsIDB4 NUQsIDB4Q0YsCisrICAgIDB4NDksIDB4MjUsIDB4NEEsIDB4QTEsIDB4NkEsIDB4NzcsIDB4NEMs IDB4MzYsIDB4NDAsIDB4RjgsIDB4QjIsIDB4OUEsCisrICAgIDB4MTUsIDB4RUEsIDB4NUMsIDB4 RTUsIDB4RTYsIDB4ODIsIDB4RTAsIDB4ODYsIDB4ODIsIDB4NkIsIDB4MzIsIDB4RjEsCisrICAg IDB4MDQsIDB4QzEsIDB4NUEsIDB4MUEsIDB4RUQsIDB4MUUsIDB4OUEsIDB4QjYsIDB4NEMsIDB4 NTQsIDB4OUYsIDB4RDgsCisrICAgIDB4OEQsIDB4Q0MsIDB4QUMsIDB4OEEsIDB4QkIsIDB4OUMs IDB4ODIsIDB4M0YsIDB4QTYsIDB4NTMsIDB4NjIsIDB4QjUsCisrICAgIDB4ODAsIDB4RTIsIDB4 QkMsIDB4REQsIDB4NjcsIDB4MkIsIDB4RDksIDB4M0YsIDB4RTQsIDB4NzUsIDB4OTIsIDB4NkIs CisrICAgIDB4QUYsIDB4NjIsIDB4N0MsIDB4NTIsIDB4RjAsIDB4RUUsIDB4MzMsIDB4REYsIDB4 MUIsIDB4MUQsIDB4NDcsIDB4RTYsCisrICAgIDB4NTksIDB4NTYsIDB4QTUsIDB4QjksIDB4NUMs IDB4RTYsIDB4NzcsIDB4NzgsIDB4MTYsIDB4NjMsIDB4ODQsIDB4MDUsCisrICAgIDB4NkYsIDB4 MEUsIDB4MkIsIDB4MzEsIDB4OUQsIDB4RjcsIDB4N0YsIDB4QjIsIDB4NjQsIDB4NzEsIDB4RTAs IDB4MkQsCisrICAgIDB4M0UsIDB4NjIsIDB4Q0UsIDB4QjUsIDB4M0YsIDB4ODgsIDB4REYsIDB4 MkQsIDB4QUIsIDB4OTgsIDB4NjUsIDB4OTEsCisrICAgIDB4REYsIDB4NzAsIDB4MTQsIDB4QTUs IDB4M0YsIDB4MzYsIDB4QUIsIDB4ODQKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBj aGFyIGthdF9SU0FfWDkzMV9TSEExW10gPSB7CisrICAgIDB4ODYsIDB4QjQsIDB4MTgsIDB4QkEs IDB4RDEsIDB4ODAsIDB4QjYsIDB4N0MsIDB4NDIsIDB4NDUsIDB4NEQsIDB4REYsCisrICAgIDB4 RTksIDB4MkQsIDB4RTEsIDB4ODMsIDB4NUYsIDB4QjUsIDB4MkYsIDB4QzksIDB4Q0QsIDB4QzQs IDB4QjIsIDB4NzUsCisrICAgIDB4ODAsIDB4QTQsIDB4RjEsIDB4NEEsIDB4RTcsIDB4ODMsIDB4 MTIsIDB4MUUsIDB4MUUsIDB4MTQsIDB4QjgsIDB4QUMsCisrICAgIDB4MzUsIDB4RTIsIDB4QUEs IDB4MEIsIDB4NUMsIDB4RjgsIDB4MzgsIDB4NEQsIDB4MDQsIDB4RUUsIDB4QTksIDB4OTcsCisr ICAgIDB4NzAsIDB4RkIsIDB4NUUsIDB4RTcsIDB4QjcsIDB4RTMsIDB4NjIsIDB4MjMsIDB4NEIs IDB4MzgsIDB4QkUsIDB4RDYsCisrICAgIDB4NTMsIDB4MTUsIDB4RjcsIDB4REYsIDB4ODcsIDB4 QjQsIDB4MEUsIDB4Q0MsIDB4QjEsIDB4MUEsIDB4MTEsIDB4MTksCisrICAgIDB4RUUsIDB4NTEs IDB4Q0MsIDB4OTIsIDB4REQsIDB4QkMsIDB4NjMsIDB4MjksIDB4NjMsIDB4MEMsIDB4NTksIDB4 RDcsCisrICAgIDB4NkYsIDB4NEMsIDB4M0MsIDB4MzcsIDB4NUIsIDB4MzcsIDB4MDMsIDB4NjEs IDB4N0QsIDB4MjQsIDB4MUMsIDB4OTksCisrICAgIDB4NDgsIDB4QUYsIDB4ODIsIDB4RkUsIDB4 MzIsIDB4NDEsIDB4OUIsIDB4QjIsIDB4REIsIDB4RUEsIDB4RUQsIDB4NzYsCisrICAgIDB4OEUs IDB4NkUsIDB4Q0EsIDB4N0UsIDB4NEUsIDB4MTQsIDB4QkEsIDB4MzAsIDB4ODQsIDB4MUMsIDB4 QjMsIDB4NjcsCisrICAgIDB4QTMsIDB4MjksIDB4ODAsIDB4NzAsIDB4NTQsIDB4NjgsIDB4N0Qs IDB4NDkKKyt9OworKworK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGthdF9SU0FfWDkzMV9T SEEyNTZbXSA9IHsKKysgICAgMHg3RSwgMHhBMiwgMHg3NywgMHhGRSwgMHhCOCwgMHg1NCwgMHg4 QSwgMHhDNywgMHg3RiwgMHg2NCwgMHg1NCwgMHg4OSwKKysgICAgMHhFNSwgMHg1MiwgMHgxNSwg MHg4RSwgMHg1MiwgMHg5NiwgMHg0RSwgMHhBNiwgMHg1OCwgMHg5MiwgMHgxQywgMHhERCwKKysg ICAgMHhFQSwgMHhBMiwgMHgyRCwgMHg1QywgMHhEMSwgMHg2MiwgMHgwMCwgMHg0OSwgMHgwNSwg MHg5NSwgMHg3MywgMHhDRiwKKysgICAgMHgxNiwgMHg3NiwgMHg2OCwgMHhGNiwgMHhDNiwgMHg1 RSwgMHg4MCwgMHhCOCwgMHhCOCwgMHg3QiwgMHhDOCwgMHg5QiwKKysgICAgMHhDNiwgMHg1Mywg MHg4OCwgMHgyNiwgMHgyMCwgMHg4OCwgMHg3MywgMHhCNiwgMHgxMywgMHhCOCwgMHhGMCwgMHg0 QiwKKysgICAgMHgwMCwgMHg4NSwgMHhGMywgMHhERCwgMHgwNywgMHg1MCwgMHhFQiwgMHgyMCwg MHhDNCwgMHgzOCwgMHgwRSwgMHg5OCwKKysgICAgMHhBRCwgMHg0RSwgMHg0OSwgMHgyQywgMHhE NywgMHg2NSwgMHhBNSwgMHgxOSwgMHgwRSwgMHg1OSwgMHgwMSwgMHhFQywKKysgICAgMHg3RSwg MHg3NSwgMHg4OSwgMHg2OSwgMHgyRSwgMHg2MywgMHg3NiwgMHg4NSwgMHg0NiwgMHg4RCwgMHhB MCwgMHg4QywKKysgICAgMHgzMywgMHgxRCwgMHg4MiwgMHg4QywgMHgwMywgMHhFQSwgMHg2OSwg MHg4OCwgMHgzNSwgMHhBMSwgMHg0MiwgMHhCRCwKKysgICAgMHgyMSwgMHhFRCwgMHg4RCwgMHhC QywgMHhCQywgMHhEQiwgMHgzMCwgMHhGRiwgMHg4NiwgMHhGMCwgMHg1QiwgMHhEQywKKysgICAg MHhFMywgMHhFMiwgMHhFOCwgMHgwQSwgMHgwQSwgMHgyOSwgMHg5NCwgMHg4MAorK307CisrCisr c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIga2F0X1JTQV9YOTMxX1NIQTM4NFtdID0geworKyAg ICAweDVDLCAweDdELCAweDk2LCAweDM1LCAweEVDLCAweDdFLCAweDExLCAweDM4LCAweEJCLCAw eDdCLCAweEVDLCAweDdCLAorKyAgICAweEYyLCAweDgyLCAweDhFLCAweDk5LCAweEJELCAweEVG LCAweEQ4LCAweEFFLCAweEQ3LCAweDM5LCAweDM3LCAweENCLAorKyAgICAweEU2LCAweDRGLCAw eDVFLCAweDBBLCAweDEzLCAweEU0LCAweDJFLCAweDQwLCAweEI5LCAweEJFLCAweDJFLCAweEUz LAorKyAgICAweEVGLCAweDc4LCAweDgzLCAweDE4LCAweDQ0LCAweDM1LCAweDlDLCAweDhFLCAw eEQ3LCAweDRBLCAweDYzLCAweEY2LAorKyAgICAweDU3LCAweEMyLCAweEIwLCAweDA4LCAweDUx LCAweDczLCAweENGLCAweENBLCAweDk5LCAweDY2LCAweEVFLCAweDMxLAorKyAgICAweEQ4LCAw eDY5LCAweEU5LCAweEFCLCAweDEzLCAweDI3LCAweDdCLCAweDQxLCAweDFFLCAweDZELCAweDhE LCAweEYxLAorKyAgICAweDNFLCAweDlDLCAweDM1LCAweDk1LCAweDU4LCAweERELCAweDJCLCAw eEQ1LCAweEEwLCAweDYwLCAweDQxLCAweDc5LAorKyAgICAweDI0LCAweDIyLCAweEU0LCAweEI3 LCAweEJGLCAweDQ3LCAweDUzLCAweEY2LCAweDM0LCAweEQ1LCAweDdDLCAweEZGLAorKyAgICAw eDBFLCAweDA5LCAweEVFLCAweDJFLCAweEUyLCAweDM3LCAweEI5LCAweERFLCAweEM1LCAweDEy LCAweDQ0LCAweDM1LAorKyAgICAweEVGLCAweDAxLCAweEU2LCAweDVFLCAweDM5LCAweDMxLCAw eDJELCAweDcxLCAweEE1LCAweERDLCAweEM2LCAweDZELAorKyAgICAweEUyLCAweENELCAweDg1 LCAweERCLCAweDczLCAweDgyLCAweDY1LCAweDI4CisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBrYXRfUlNBX1g5MzFfU0hBNTEyW10gPSB7CisrICAgIDB4QTYsIDB4NjUsIDB4 QTIsIDB4NzcsIDB4NEYsIDB4QjMsIDB4ODYsIDB4Q0IsIDB4NjQsIDB4M0EsIDB4QzEsIDB4NjMs CisrICAgIDB4RkMsIDB4QTEsIDB4QUEsIDB4Q0IsIDB4OUIsIDB4NzksIDB4REQsIDB4NEIsIDB4 RTEsIDB4RDksIDB4REEsIDB4QUMsCisrICAgIDB4RTcsIDB4NDcsIDB4MDksIDB4QjIsIDB4MTEs IDB4NEIsIDB4OEEsIDB4QUEsIDB4MDUsIDB4OUUsIDB4NzcsIDB4RDcsCisrICAgIDB4M0EsIDB4 QkQsIDB4NUUsIDB4NTMsIDB4MDksIDB4NEEsIDB4RTYsIDB4MEYsIDB4NUUsIDB4RjksIDB4MTQs IDB4MjgsCisrICAgIDB4QTAsIDB4OTksIDB4NzQsIDB4NjQsIDB4NzAsIDB4NEUsIDB4RjIsIDB4 RTMsIDB4RkEsIDB4QzcsIDB4RjgsIDB4QzUsCisrICAgIDB4NkUsIDB4MkIsIDB4NzksIDB4OTYs IDB4MEQsIDB4MEMsIDB4QzgsIDB4MTAsIDB4MzQsIDB4NTMsIDB4RDIsIDB4QUYsCisrICAgIDB4 MTcsIDB4MEUsIDB4RTAsIDB4QkYsIDB4NzksIDB4RjYsIDB4MDQsIDB4NzIsIDB4MTAsIDB4RTAs IDB4RjYsIDB4RDAsCisrICAgIDB4Q0UsIDB4OEEsIDB4NkYsIDB4QTEsIDB4OTUsIDB4ODksIDB4 QkYsIDB4NTgsIDB4OEYsIDB4NDYsIDB4NUYsIDB4MDksCisrICAgIDB4OUYsIDB4MDksIDB4Q0Es IDB4ODQsIDB4MTUsIDB4ODUsIDB4RTAsIDB4RUQsIDB4MDQsIDB4MkQsIDB4RkIsIDB4N0MsCisr ICAgIDB4MzYsIDB4MzUsIDB4MjEsIDB4MzEsIDB4QzMsIDB4RkQsIDB4OTIsIDB4NDIsIDB4MTEs IDB4MzAsIDB4NzEsIDB4MUIsCisrICAgIDB4NjAsIDB4ODMsIDB4MTgsIDB4ODgsIDB4QTMsIDB4 RjUsIDB4NTksIDB4QzMKKyt9OworKworK2ludCBGSVBTX3NlbGZ0ZXN0X3JzYSgpCisreworKyAg ICBpbnQgcmV0ID0gMDsKKysgICAgUlNBICprZXk7CisrICAgIEVWUF9QS0VZICpwayA9IE5VTEw7 CisrCisrICAgIGlmICgoa2V5ID0gUlNBX25ldygpKSA9PSBOVUxMKQorKyAgICAgICAgZ290byBl cnI7CisrICAgIHNldHJzYWtleShrZXkpOworKyAgICBpZiAoKHBrID0gRVZQX1BLRVlfbmV3KCkp ID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgRVZQX1BLRVlfYXNzaWduX1JT QShwaywga2V5KTsKKysKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGth dF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGthdF9SU0FfU0hBMSwgc2l6ZW9mKGthdF9SU0FfU0hBMSksCisrICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVWUF9zaGExKCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtD UzEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBMSBQS0NTIzEi KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVz dChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAga2F0X1JTQV9TSEEyMjQsIHNpemVvZihrYXRfUlNBX1NIQTIyNCksCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9zaGEyMjQoKSwgRVZQX01EX0NU WF9GTEFHX1BBRF9QS0NTMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJT QSBTSEEyMjQgUEtDUyMxIikpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFmaXBzX3Br ZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfU0hBMjU2LCBzaXplb2Yoa2F0 X1JTQV9TSEEyNTYpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfc2hh MjU2KCksIEVWUF9NRF9DVFhfRkxBR19QQURfUEtDUzEsCisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJSU0EgU0hBMjU2IFBLQ1MjMSIpKQorKyAgICAgICAgZ290byBlcnI7Cisr ICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0 X3RicykgLSAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYXRfUlNBX1NI QTM4NCwgc2l6ZW9mKGthdF9SU0FfU0hBMzg0KSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRVZQX3NoYTM4NCgpLCBFVlBfTURfQ1RYX0ZMQUdfUEFEX1BLQ1MxLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNBIFNIQTM4NCBQS0NTIzEiKSkKKysgICAg ICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0 X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAga2F0X1JTQV9TSEE1MTIsIHNpemVvZihrYXRfUlNBX1NIQTUxMiksCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9zaGE1MTIoKSwgRVZQX01EX0NUWF9GTEFHX1BB RF9QS0NTMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBTSEE1MTIg UEtDUyMxIikpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgaWYgKCFmaXBzX3BrZXlfc2ln bmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGthdF9SU0FfUFNTX1NIQTEsIHNpemVvZihrYXRfUlNB X1BTU19TSEExKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX3NoYTEo KSwgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJSU0EgU0hBMSBQU1MiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9QU1NfU0hBMjI0LAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9QU1NfU0hB MjI0KSwgRVZQX3NoYTIyNCgpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgIlJTQSBTSEEyMjQgUFNTIikpCisrICAgICAgICBnb3Rv IGVycjsKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMsIHNp emVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGth dF9SU0FfUFNTX1NIQTI1NiwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZW9mKGthdF9SU0FfUFNTX1NIQTI1NiksIEVWUF9zaGEyNTYoKSwKKysgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9QU1MsICJSU0EgU0hBMjU2IFBT UyIpKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90 ZXN0KHBrLCBrYXRfdGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBrYXRfUlNBX1BTU19TSEEzODQsCisrICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVvZihrYXRfUlNBX1BTU19TSEEzODQpLCBFVlBfc2hhMzg0KCks CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURf UFNTLCAiUlNBIFNIQTM4NCBQU1MiKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZp cHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywga2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0X1JTQV9QU1NfU0hBNTEyLAor KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2F0X1JTQV9QU1NfU0hB NTEyKSwgRVZQX3NoYTUxMigpLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF VlBfTURfQ1RYX0ZMQUdfUEFEX1BTUywgIlJTQSBTSEE1MTIgUFNTIikpCisrICAgICAgICBnb3Rv IGVycjsKKysKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGthdF90YnMs IHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGthdF9SU0FfWDkzMV9TSEExLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplb2Yoa2F0X1JTQV9YOTMxX1NIQTEpLCBFVlBfc2hhMSgpLAorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsICJSU0EgU0hBMSBYOTMx IikpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgLyogTkI6IFNIQTIyNCBub3Qgc3VwcG9ydGVk IGluIFg5LjMxICovCisrICAgIGlmICghZmlwc19wa2V5X3NpZ25hdHVyZV90ZXN0KHBrLCBrYXRf dGJzLCBzaXplb2Yoa2F0X3RicykgLSAxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBrYXRfUlNBX1g5MzFfU0hBMjU2LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplb2Yoa2F0X1JTQV9YOTMxX1NIQTI1NiksIEVWUF9zaGEyNTYoKSwKKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NUWF9GTEFHX1BBRF9YOTMxLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUlNBIFNIQTI1NiBYOTMxIikpCisrICAg ICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIGth dF90YnMsIHNpemVvZihrYXRfdGJzKSAtIDEsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGthdF9SU0FfWDkzMV9TSEEzODQsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZihrYXRfUlNBX1g5MzFfU0hBMzg0KSwgRVZQX3NoYTM4NCgpLAorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVlBfTURfQ1RYX0ZMQUdfUEFEX1g5MzEsCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSU0EgU0hBMzg0IFg5MzEiKSkKKysg ICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChwaywg a2F0X3Ricywgc2l6ZW9mKGthdF90YnMpIC0gMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAga2F0X1JTQV9YOTMxX1NIQTUxMiwKKysgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mKGthdF9SU0FfWDkzMV9TSEE1MTIpLCBFVlBfc2hhNTEyKCksCisrICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBTSEE1MTIgWDkzMSIpKQor KyAgICAgICAgZ290byBlcnI7CisrCisrICAgIHJldCA9IDE7CisrCisrIGVycjoKKysgICAgaWYg KHBrKQorKyAgICAgICAgRVZQX1BLRVlfZnJlZShwayk7CisrICAgIGVsc2UgaWYgKGtleSkKKysg ICAgICAgIFJTQV9mcmVlKGtleSk7CisrICAgIHJldHVybiByZXQ7CisrfQorKworKyNlbmRpZiAg ICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmIE9QRU5TU0xfRklQUyAqLworZGlmZiAtdXAg b3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19yc2FfeDkzMWcuYy5maXBzIG9wZW5zc2wt MS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfcnNhX3g5MzFnLmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9j cnlwdG8vZmlwcy9maXBzX3JzYV94OTMxZy5jLmZpcHMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MzEz MjEyMjggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX3JzYV94OTMx Zy5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODMxMzIxMjI4ICswMjAwCitAQCAtMCwwICsxLDI3MyBA QAorKy8qIGNyeXB0by9yc2EvcnNhX2dlbi5jICovCisrLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5 OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisrICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKysgKgorKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRl bgorKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKysgKiBUaGUgaW1wbGVt ZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wu CisrICogCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1j b21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisrICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy ZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisrICogYXBwbHkgdG8gYWxs IGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKysg KiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NM IGRvY3VtZW50YXRpb24KKysgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNv dmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisrICogZXhjZXB0IHRoYXQgdGhlIGhv bGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisrICogCisrICogQ29weXJp Z2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGlj ZXMgaW4KKysgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisrICogSWYgdGhpcyBw YWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBh dHRyaWJ1dGlvbgorKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5 IHVzZWQuCisrICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2Ug YXQgcHJvZ3JhbSBzdGFydHVwIG9yCisrICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRl eHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisrICogCisrICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisr ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisrICogYXJlIG1ldDoKKysgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291 cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKysgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKysgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKyAqIDMuIEFs bCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhp cyBzb2Z0d2FyZQorKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdl bWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdh cmUgd3JpdHRlbiBieQorKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisr ICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91 aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisrICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dy YXBoaWMgcmVsYXRlZCA6LSkuCisrICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3Bl Y2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisrICogICAgdGhlIGFw cHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25v d2xlZGdlbWVudDoKKysgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0 ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorKyAqIAorKyAqIFRISVMgU09G VFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisrICogQU5ZIEVY UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgVEhFCisrICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKysgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorKyAqIEZP UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP UiBDT05TRVFVRU5USUFMCisrICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKysgKiBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKysg KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQ09OVFJBQ1QsIFNUUklDVAorKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKysgKiBPVVQgT0YgVEhF IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ IE9GCisrICogU1VDSCBEQU1BR0UuCisrICogCisrICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1 dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKysgKiBk ZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2Rl IGNhbm5vdCBzaW1wbHkgYmUKKysgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3Ry aWJ1dGlvbiBsaWNlbmNlCisrICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0K KysgKi8KKysKKysjaW5jbHVkZSA8c3RkaW8uaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lu Y2x1ZGUgPHRpbWUuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaW5jbHVkZSA8b3Bl bnNzbC9ibi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3JzYS5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJ UFMKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5oPgorKworK2V4dGVybiBpbnQgZmlwc19jaGVj a19yc2EoUlNBICpyc2EpOworKyNlbmRpZgorKworKy8qIFg5LjMxIFJTQSBrZXkgZGVyaXZhdGlv biBhbmQgZ2VuZXJhdGlvbiAqLworKworK2ludCBSU0FfWDkzMV9kZXJpdmVfZXgoUlNBICpyc2Es IEJJR05VTSAqcDEsIEJJR05VTSAqcDIsIEJJR05VTSAqcTEsCisrICAgICAgICAgICAgICAgICAg ICAgICBCSUdOVU0gKnEyLCBjb25zdCBCSUdOVU0gKlhwMSwgY29uc3QgQklHTlVNICpYcDIsCisr ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCSUdOVU0gKlhwLCBjb25zdCBCSUdOVU0gKlhx MSwgY29uc3QgQklHTlVNICpYcTIsCisrICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCSUdO VU0gKlhxLCBjb25zdCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYikKKyt7CisrICAgIEJJR05VTSAq cjAgPSBOVUxMLCAqcjEgPSBOVUxMLCAqcjIgPSBOVUxMLCAqcjMgPSBOVUxMOworKyAgICBCTl9D VFggKmN0eCA9IE5VTEwsICpjdHgyID0gTlVMTDsKKysKKysgICAgaWYgKCFyc2EpCisrICAgICAg ICBnb3RvIGVycjsKKysKKysgICAgY3R4ID0gQk5fQ1RYX25ldygpOworKyAgICBpZiAoIWN0eCkK KysgICAgICAgIGdvdG8gZXJyOworKyAgICBCTl9DVFhfc3RhcnQoY3R4KTsKKysKKysgICAgcjAg PSBCTl9DVFhfZ2V0KGN0eCk7CisrICAgIHIxID0gQk5fQ1RYX2dldChjdHgpOworKyAgICByMiA9 IEJOX0NUWF9nZXQoY3R4KTsKKysgICAgcjMgPSBCTl9DVFhfZ2V0KGN0eCk7CisrCisrICAgIGlm IChyMyA9PSBOVUxMKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIGlmICghcnNhLT5lKSB7Cisr ICAgICAgICByc2EtPmUgPSBCTl9kdXAoZSk7CisrICAgICAgICBpZiAoIXJzYS0+ZSkKKysgICAg ICAgICAgICBnb3RvIGVycjsKKysgICAgfSBlbHNlCisrICAgICAgICBlID0gcnNhLT5lOworKwor KyAgICAvKiBJZiBub3QgYWxsIHBhcmFtZXRlcnMgcHJlc2VudCBvbmx5IGNhbGN1bGF0ZSB3aGF0 IHdlIGNhbi4KKysgICAgICogVGhpcyBhbGxvd3MgdGVzdCBwcm9ncmFtcyB0byBvdXRwdXQgc2Vs ZWN0aXZlIHBhcmFtZXRlcnMuCisrICAgICAqLworKworKyAgICBpZiAoWHAgJiYgIXJzYS0+cCkg eworKyAgICAgICAgcnNhLT5wID0gQk5fbmV3KCk7CisrICAgICAgICBpZiAoIXJzYS0+cCkKKysg ICAgICAgICAgICBnb3RvIGVycjsKKysKKysgICAgICAgIGlmICghQk5fWDkzMV9kZXJpdmVfcHJp bWVfZXgocnNhLT5wLCBwMSwgcDIsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFhwLCBYcDEsIFhwMiwgZSwgY3R4LCBjYikpCisrICAgICAgICAgICAgZ290byBlcnI7Cisr ICAgIH0KKysKKysgICAgaWYgKFhxICYmICFyc2EtPnEpIHsKKysgICAgICAgIHJzYS0+cSA9IEJO X25ldygpOworKyAgICAgICAgaWYgKCFyc2EtPnEpCisrICAgICAgICAgICAgZ290byBlcnI7Cisr ICAgICAgICBpZiAoIUJOX1g5MzFfZGVyaXZlX3ByaW1lX2V4KHJzYS0+cSwgcTEsIHEyLAorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYcSwgWHExLCBYcTIsIGUsIGN0eCwg Y2IpKQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKyAgICB9CisrCisrICAgIGlmICghcnNhLT5w IHx8ICFyc2EtPnEpIHsKKysgICAgICAgIEJOX0NUWF9lbmQoY3R4KTsKKysgICAgICAgIEJOX0NU WF9mcmVlKGN0eCk7CisrICAgICAgICByZXR1cm4gMjsKKysgICAgfQorKworKyAgICAvKiBTaW5j ZSBib3RoIHByaW1lcyBhcmUgc2V0IHdlIGNhbiBub3cgY2FsY3VsYXRlIGFsbCByZW1haW5pbmcg CisrICAgICAqIGNvbXBvbmVudHMuCisrICAgICAqLworKworKyAgICAvKiBjYWxjdWxhdGUgbiAq LworKyAgICByc2EtPm4gPSBCTl9uZXcoKTsKKysgICAgaWYgKHJzYS0+biA9PSBOVUxMKQorKyAg ICAgICAgZ290byBlcnI7CisrICAgIGlmICghQk5fbXVsKHJzYS0+biwgcnNhLT5wLCByc2EtPnEs IGN0eCkpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgLyogY2FsY3VsYXRlIGQgKi8KKysg ICAgaWYgKCFCTl9zdWIocjEsIHJzYS0+cCwgQk5fdmFsdWVfb25lKCkpKQorKyAgICAgICAgZ290 byBlcnI7ICAgICAgICAgICAgICAgLyogcC0xICovCisrICAgIGlmICghQk5fc3ViKHIyLCByc2Et PnEsIEJOX3ZhbHVlX29uZSgpKSkKKysgICAgICAgIGdvdG8gZXJyOyAgICAgICAgICAgICAgIC8q IHEtMSAqLworKyAgICBpZiAoIUJOX211bChyMCwgcjEsIHIyLCBjdHgpKQorKyAgICAgICAgZ290 byBlcnI7ICAgICAgICAgICAgICAgLyogKHAtMSkocS0xKSAqLworKworKyAgICBpZiAoIUJOX2dj ZChyMywgcjEsIHIyLCBjdHgpKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGlmICghQk5f ZGl2KHIwLCBOVUxMLCByMCwgcjMsIGN0eCkpCisrICAgICAgICBnb3RvIGVycjsgICAgICAgICAg ICAgICAvKiBMQ00oKHAtMSkocS0xKSkgKi8KKysKKysgICAgY3R4MiA9IEJOX0NUWF9uZXcoKTsK KysgICAgaWYgKCFjdHgyKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIHJzYS0+ZCA9IEJO X21vZF9pbnZlcnNlKE5VTEwsIHJzYS0+ZSwgcjAsIGN0eDIpOyAvKiBkICovCisrICAgIGlmIChy c2EtPmQgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICAvKiBjYWxjdWxhdGUg ZCBtb2QgKHAtMSkgKi8KKysgICAgcnNhLT5kbXAxID0gQk5fbmV3KCk7CisrICAgIGlmIChyc2Et PmRtcDEgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICBpZiAoIUJOX21vZChyc2Et PmRtcDEsIHJzYS0+ZCwgcjEsIGN0eCkpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgICAgLyog Y2FsY3VsYXRlIGQgbW9kIChxLTEpICovCisrICAgIHJzYS0+ZG1xMSA9IEJOX25ldygpOworKyAg ICBpZiAocnNhLT5kbXExID09IE5VTEwpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKCFC Tl9tb2QocnNhLT5kbXExLCByc2EtPmQsIHIyLCBjdHgpKQorKyAgICAgICAgZ290byBlcnI7Cisr CisrICAgIC8qIGNhbGN1bGF0ZSBpbnZlcnNlIG9mIHEgbW9kIHAgKi8KKysgICAgcnNhLT5pcW1w ID0gQk5fbW9kX2ludmVyc2UoTlVMTCwgcnNhLT5xLCByc2EtPnAsIGN0eDIpOworKworKyBlcnI6 CisrICAgIGlmIChjdHgpIHsKKysgICAgICAgIEJOX0NUWF9lbmQoY3R4KTsKKysgICAgICAgIEJO X0NUWF9mcmVlKGN0eCk7CisrICAgIH0KKysgICAgaWYgKGN0eDIpCisrICAgICAgICBCTl9DVFhf ZnJlZShjdHgyKTsKKysgICAgLyogSWYgdGhpcyBpcyBzZXQgYWxsIGNhbGxzIHN1Y2Nlc3NmdWwg Ki8KKysgICAgaWYgKHJzYSAmJiByc2EtPmlxbXAgIT0gTlVMTCkKKysgICAgICAgIHJldHVybiAx OworKworKyAgICByZXR1cm4gMDsKKysKKyt9CisrCisraW50IFJTQV9YOTMxX2dlbmVyYXRlX2tl eV9leChSU0EgKnJzYSwgaW50IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwKKysgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYikKKyt7CisrICAgIGludCBvayA9IDA7CisrICAg IEJJR05VTSAqWHAgPSBOVUxMLCAqWHEgPSBOVUxMOworKyAgICBCTl9DVFggKmN0eCA9IE5VTEw7 CisrCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2RlKCkgJiYgIShyc2Et PmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpICYmCisrICAgICAgICAoYml0cyA8IE9Q RU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUykpIHsKKysgICAgICAgIEZJUFNlcnIoRklQ U19GX1JTQV9YOTMxX0dFTkVSQVRFX0tFWV9FWCwgRklQU19SX0tFWV9UT09fU0hPUlQpOworKyAg ICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgaWYgKGJpdHMgJiAweGZmKSB7CisrICAg ICAgICBGSVBTZXJyKEZJUFNfRl9SU0FfWDkzMV9HRU5FUkFURV9LRVlfRVgsIEZJUFNfUl9JTlZB TElEX0tFWV9MRU5HVEgpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysKKysgICAgaWYg KEZJUFNfc2VsZnRlc3RfZmFpbGVkKCkpIHsKKysgICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9Y OTMxX0dFTkVSQVRFX0tFWV9FWCwgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAg ICAgIHJldHVybiAwOworKyAgICB9CisrI2VuZGlmCisrCisrICAgIGN0eCA9IEJOX0NUWF9uZXco KTsKKysgICAgaWYgKCFjdHgpCisrICAgICAgICBnb3RvIGVycm9yOworKworKyAgICBCTl9DVFhf c3RhcnQoY3R4KTsKKysgICAgWHAgPSBCTl9DVFhfZ2V0KGN0eCk7CisrICAgIFhxID0gQk5fQ1RY X2dldChjdHgpOworKyAgICBpZiAoIUJOX1g5MzFfZ2VuZXJhdGVfWHBxKFhwLCBYcSwgYml0cywg Y3R4KSkKKysgICAgICAgIGdvdG8gZXJyb3I7CisrCisrICAgIHJzYS0+cCA9IEJOX25ldygpOwor KyAgICByc2EtPnEgPSBCTl9uZXcoKTsKKysgICAgaWYgKCFyc2EtPnAgfHwgIXJzYS0+cSkKKysg ICAgICAgIGdvdG8gZXJyb3I7CisrCisrICAgIC8qIEdlbmVyYXRlIHR3byBwcmltZXMgZnJvbSBY cCwgWHEgKi8KKysKKysgICAgaWYgKCFCTl9YOTMxX2dlbmVyYXRlX3ByaW1lX2V4KHJzYS0+cCwg TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgWHAsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlLCBjdHgsIGNiKSkKKysgICAgICAgIGdvdG8gZXJyb3I7CisrCisrICAgIGlmICgh Qk5fWDkzMV9nZW5lcmF0ZV9wcmltZV9leChyc2EtPnEsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws IFhxLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSwgY3R4LCBjYikpCisr ICAgICAgICBnb3RvIGVycm9yOworKworKyAgICAvKiBTaW5jZSByc2EtPnAgYW5kIHJzYS0+cSBh cmUgdmFsaWQgdGhpcyBjYWxsIHdpbGwganVzdCBkZXJpdmUKKysgICAgICogcmVtYWluaW5nIFJT QSBjb21wb25lbnRzLgorKyAgICAgKi8KKysKKysgICAgaWYgKCFSU0FfWDkzMV9kZXJpdmVfZXgo cnNhLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBlLCBjYikpCisrICAgICAgICBn b3RvIGVycm9yOworKworKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKCFmaXBzX2NoZWNr X3JzYShyc2EpKQorKyAgICAgICAgZ290byBlcnJvcjsKKysjZW5kaWYKKysKKysgICAgb2sgPSAx OworKworKyBlcnJvcjoKKysgICAgaWYgKGN0eCkgeworKyAgICAgICAgQk5fQ1RYX2VuZChjdHgp OworKyAgICAgICAgQk5fQ1RYX2ZyZWUoY3R4KTsKKysgICAgfQorKworKyAgICBpZiAob2spCisr ICAgICAgICByZXR1cm4gMTsKKysKKysgICAgcmV0dXJuIDA7CisrCisrfQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc19zaGFfc2VsZnRlc3QuYy5maXBzIG9wZW5zc2wt MS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfc2hhX3NlbGZ0ZXN0LmMKKy0tLSBvcGVuc3NsLTEuMC4y aC9jcnlwdG8vZmlwcy9maXBzX3NoYV9zZWxmdGVzdC5jLmZpcHMJMjAxNi0wNS0wMyAxNjo1Nzo1 OC44MzEzMjEyMjggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX3No YV9zZWxmdGVzdC5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODMxMzIxMjI4ICswMjAwCitAQCAtMCww ICsxLDE0NSBAQAorKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 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 T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKysgKgorKyAqLworKworKyNpbmNsdWRlIDxzdHJp bmcuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9lcnIuaD4KKysjaWZkZWYgT1BFTlNTTF9GSVBTCisr IyBpbmNsdWRlIDxvcGVuc3NsL2ZpcHMuaD4KKysjZW5kaWYKKysjaW5jbHVkZSA8b3BlbnNzbC9l dnAuaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9zaGEuaD4KKysKKysjaWZkZWYgT1BFTlNTTF9GSVBT Cisrc3RhdGljIGNvbnN0IGNoYXIgdGVzdFtdWzYwXSA9IHsKKysgICAgIiIsCisrICAgICJhYmMi LAorKyAgICAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5v bW5vcG5vcHEiCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByZXRbXVtTSEFf RElHRVNUX0xFTkdUSF0gPSB7CisrICAgIHsweGRhLCAweDM5LCAweGEzLCAweGVlLCAweDVlLCAw eDZiLCAweDRiLCAweDBkLCAweDMyLCAweDU1LAorKyAgICAgMHhiZiwgMHhlZiwgMHg5NSwgMHg2 MCwgMHgxOCwgMHg5MCwgMHhhZiwgMHhkOCwgMHgwNywgMHgwOX0sCisrICAgIHsweGE5LCAweDk5 LCAweDNlLCAweDM2LCAweDQ3LCAweDA2LCAweDgxLCAweDZhLCAweGJhLCAweDNlLAorKyAgICAg MHgyNSwgMHg3MSwgMHg3OCwgMHg1MCwgMHhjMiwgMHg2YywgMHg5YywgMHhkMCwgMHhkOCwgMHg5 ZH0sCisrICAgIHsweDg0LCAweDk4LCAweDNlLCAweDQ0LCAweDFjLCAweDNiLCAweGQyLCAweDZl LCAweGJhLCAweGFlLAorKyAgICAgMHg0YSwgMHhhMSwgMHhmOSwgMHg1MSwgMHgyOSwgMHhlNSwg MHhlNSwgMHg0NiwgMHg3MCwgMHhmMX0sCisrfTsKKysKKytzdGF0aWMgaW50IGNvcnJ1cHRfc2hh OworKworK3ZvaWQgRklQU19jb3JydXB0X3NoYTEoKQorK3sKKysgICAgY29ycnVwdF9zaGEgPSAx OworK30KKysKKytpbnQgRklQU19zZWxmdGVzdF9zaGExKCkKKyt7CisrICAgIGludCBuOworKwor KyAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHRlc3QpIC8gc2l6ZW9mKHRlc3RbMF0pOyArK24p IHsKKysgICAgICAgIHVuc2lnbmVkIGNoYXIgbWRbU0hBX0RJR0VTVF9MRU5HVEhdOworKworKyAg ICAgICAgRVZQX0RpZ2VzdCh0ZXN0W25dLCBzdHJsZW4odGVzdFtuXSkgKyBjb3JydXB0X3NoYSwg bWQsIE5VTEwsCisrICAgICAgICAgICAgICAgICAgIEVWUF9zaGExKCksIE5VTEwpOworKyAgICAg ICAgaWYgKG1lbWNtcChtZCwgcmV0W25dLCBzaXplb2YgbWQpKSB7CisrICAgICAgICAgICAgRklQ U2VycihGSVBTX0ZfRklQU19TRUxGVEVTVF9TSEExLCBGSVBTX1JfU0VMRlRFU1RfRkFJTEVEKTsK KysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysgICAgfQorKyAgICByZXR1cm4g MTsKKyt9CisrCisrc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbXNnX3NoYTI1NltdID0KKysg ICAgeyAweGZhLCAweDQ4LCAweDU5LCAweDJhLCAweGUxLCAweGFlLCAweDFmLCAweDMwLAorKyAg ICAweGZjCisrfTsKKysKKytzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBkaWdfc2hhMjU2W10g PQorKyAgICB7IDB4ZjcsIDB4MjYsIDB4ZDgsIDB4OTgsIDB4NDcsIDB4OTEsIDB4NjgsIDB4NWIs CisrICAgIDB4OWUsIDB4MzksIDB4YjIsIDB4NTgsIDB4YmIsIDB4NzUsIDB4YmYsIDB4MDEsCisr ICAgIDB4MTcsIDB4MGMsIDB4ODQsIDB4MDAsIDB4MDEsIDB4N2EsIDB4OTQsIDB4ODMsCisrICAg IDB4ZjMsIDB4MGIsIDB4MTUsIDB4ODQsIDB4NGIsIDB4NjksIDB4ODgsIDB4OGEKKyt9OworKwor K3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1zZ19zaGE1MTJbXSA9CisrICAgIHsgMHgzNywg MHhkMSwgMHgzNSwgMHg5ZCwgMHgxOCwgMHg0MSwgMHhlOSwgMHhiNywKKysgICAgMHg2ZCwgMHg5 YSwgMHgxMywgMHhkYSwgMHg1ZiwgMHhmMywgMHhiZAorK307CisrCisrc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgZGlnX3NoYTUxMltdID0KKysgICAgeyAweDExLCAweDEzLCAweGM0LCAweDE5 LCAweGVkLCAweDJiLCAweDFkLCAweDE2LAorKyAgICAweDExLCAweGViLCAweDliLCAweGJlLCAw eGYwLCAweDdmLCAweGNmLCAweDQ0LAorKyAgICAweDhiLCAweGQ3LCAweDU3LCAweGJkLCAweDhk LCAweGE5LCAweDI1LCAweGIwLAorKyAgICAweDQ3LCAweDI1LCAweGQ2LCAweDZjLCAweDlhLCAw eDU0LCAweDdmLCAweDhmLAorKyAgICAweDBiLCAweDUzLCAweDFhLCAweDEwLCAweDY4LCAweDMy LCAweDAzLCAweDM4LAorKyAgICAweDgyLCAweGM0LCAweDg3LCAweGM0LCAweGVhLCAweDBlLCAw eGQxLCAweDA0LAorKyAgICAweGE5LCAweDk4LCAweGMxLCAweDA1LCAweGEzLCAweGYzLCAweGY4 LCAweGIxLAorKyAgICAweGFmLCAweGJjLCAweGQ5LCAweDc4LCAweDdlLCAweGVlLCAweDNkLCAw eDQzCisrfTsKKysKKytpbnQgRklQU19zZWxmdGVzdF9zaGEyKHZvaWQpCisreworKyAgICB1bnNp Z25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVOR1RIXTsKKysKKysgICAgRVZQX0RpZ2VzdCht c2dfc2hhMjU2LCBzaXplb2YobXNnX3NoYTI1NiksIG1kLCBOVUxMLCBFVlBfc2hhMjU2KCksIE5V TEwpOworKyAgICBpZiAobWVtY21wKGRpZ19zaGEyNTYsIG1kLCBzaXplb2YoZGlnX3NoYTI1Nikp KSB7CisrICAgICAgICBGSVBTZXJyKEZJUFNfRl9GSVBTX01PREVfU0VULCBGSVBTX1JfU0VMRlRF U1RfRkFJTEVEKTsKKysgICAgICAgIHJldHVybiAwOworKyAgICB9CisrCisrICAgIEVWUF9EaWdl c3QobXNnX3NoYTUxMiwgc2l6ZW9mKG1zZ19zaGE1MTIpLCBtZCwgTlVMTCwgRVZQX3NoYTUxMigp LCBOVUxMKTsKKysgICAgaWYgKG1lbWNtcChkaWdfc2hhNTEyLCBtZCwgc2l6ZW9mKGRpZ19zaGE1 MTIpKSkgeworKyAgICAgICAgRklQU2VycihGSVBTX0ZfRklQU19NT0RFX1NFVCwgRklQU19SX1NF TEZURVNUX0ZBSUxFRCk7CisrICAgICAgICByZXR1cm4gMDsKKysgICAgfQorKworKyAgICByZXR1 cm4gMTsKKyt9CisrCisrI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlw cy9maXBzX3N0YW5kYWxvbmVfaG1hYy5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMv Zmlwc19zdGFuZGFsb25lX2htYWMuYworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2Zp cHNfc3RhbmRhbG9uZV9obWFjLmMuZmlwcwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgzMTMyMTIyOCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9maXBzL2ZpcHNfc3RhbmRhbG9uZV9obWFj LmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MzEzMjEyMjggKzAyMDAKK0BAIC0wLDAgKzEsMjY4IEBA CisrLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKysgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVGhlIE9wZW5TU0wgUHJv amVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisrICoKKysgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKysgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKysgKiBhcmUgbWV0OgorKyAqCisrICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorKyAq CisrICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKysgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKysgKiAgICB0aGUgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisrICogICAgZGlzdHJp YnV0aW9uLgorKyAqCisrICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5n IGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisrICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRo ZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRl cyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAqICAgIGZvciB1 c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKysg KgorKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVj dCIgbXVzdCBub3QgYmUgdXNlZCB0bworKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisrICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorKyAq ICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKysgKgorKyAqIDUuIFByb2R1Y3RzIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorKyAqICAg IG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdy aXR0ZW4KKysgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisrICoKKysg KiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0 aGUgZm9sbG93aW5nCisrICogICAgYWNrbm93bGVkZ21lbnQ6CisrICogICAgIlRoaXMgcHJvZHVj dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorKyAq ICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9y Zy8pIgorKyAqCisrICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQ Uk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisrICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNT TCBQUk9KRUNUIE9SCisrICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorKyAqIE5PVCBMSU1JVEVEIFRPLCBQ Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKyAqIExPU1MgT0Yg VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisrICogSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP TlRSQUNULAorKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkKKysgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisrICogT0YgVEhFIFBPU1NJQklMSVRZ IE9GIFNVQ0ggREFNQUdFLgorKyAqCisrICovCisrCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8b3BlbnNz bC9vcGVuc3NsY29uZi5oPgorKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKyNpbmNsdWRlIDxv cGVuc3NsL2htYWMuaD4KKysKKysjaWZuZGVmIEZJUFNDQU5JU1RFUl9PCisraW50IEZJUFNfc2Vs ZnRlc3RfZmFpbGVkKCkKKyt7CisrICAgIHJldHVybiAwOworK30KKysKKyt2b2lkIEZJUFNfc2Vs ZnRlc3RfY2hlY2soKQorK3sKKyt9CisrI2VuZGlmCisrCisrI2lmZGVmIE9QRU5TU0xfRklQUwor K2ludCBibl9tdWxfbW9udF9mcHU2NChCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05HICphcCwg Y29uc3QgQk5fVUxPTkcgKmJwLAorKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCTl9VTE9O RyAqbnAsIGNvbnN0IEJOX1VMT05HICpuMCwgaW50IG51bSkKKyt7CisrICAgIHJldHVybiAwOwor K307CisrCisraW50IGJuX211bF9tb250X2ludChCTl9VTE9ORyAqcnAsIGNvbnN0IEJOX1VMT05H ICphcCwgY29uc3QgQk5fVUxPTkcgKmJwLAorKyAgICAgICAgICAgICAgICAgICAgY29uc3QgQk5f VUxPTkcgKm5wLCBjb25zdCBCTl9VTE9ORyAqbjAsIGludCBudW0pCisreworKyAgICByZXR1cm4g MDsKKyt9OworKworKyMgaWYgICAgIGRlZmluZWQoX19pMzg2KSAgIHx8IGRlZmluZWQoX19pMzg2 X18pICAgfHwgZGVmaW5lZChfTV9JWDg2KSB8fCBcCisrICAgICAgICBkZWZpbmVkKF9fSU5URUxf XykgfHwgXAorKyAgICAgICAgZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9f KSB8fCBcCisrICAgICAgICBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZpbmVkKF9NX1g2NCkKKysK Kyt1bnNpZ25lZCBpbnQgT1BFTlNTTF9pYTMyY2FwX1BbNF07CisrdW5zaWduZWQgbG9uZyAqT1BF TlNTTF9pYTMyY2FwX2xvYyh2b2lkKQorK3sKKysgICAgaWYgKHNpemVvZihsb25nKSA9PSA0KQor KyAgICAgICAgLyoKKysgICAgICAgICAqIElmIDMyLWJpdCBhcHBsaWNhdGlvbiBwdWxscyBhZGRy ZXNzIG9mIE9QRU5TU0xfaWEzMmNhcF9QWzBdCisrICAgICAgICAgKiBjbGVhciBzZWNvbmQgZWxl bWVudCB0byBtYWludGFpbiB0aGUgaWxsdXNpb24gdGhhdCB2ZWN0b3IKKysgICAgICAgICAqIGlz IDMyLWJpdC4KKysgICAgICAgICAqLworKyAgICAgICAgT1BFTlNTTF9pYTMyY2FwX1BbMV0gPSAw OworKworKyAgICBPUEVOU1NMX2lhMzJjYXBfUFsyXSA9IDA7CisrCisrICAgIHJldHVybiAodW5z aWduZWQgbG9uZyAqKU9QRU5TU0xfaWEzMmNhcF9QOworK30KKysKKysjICBpZiBkZWZpbmVkKE9Q RU5TU0xfQ1BVSURfT0JKKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0FTTSkgJiYgIWRlZmluZWQo STM4Nl9PTkxZKQorKyMgICBkZWZpbmUgT1BFTlNTTF9DUFVJRF9TRVRVUAorKyMgICBpZiBkZWZp bmVkKF9XSU4zMikKKyt0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgSUEzMkNBUDsKKysjICAgZWxz ZQorK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIElBMzJDQVA7CisrIyAgIGVuZGlmCisrdm9p ZCBPUEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpCisreworKyAgICBzdGF0aWMgaW50IHRyaWdnZXIg PSAwOworKyAgICBJQTMyQ0FQIE9QRU5TU0xfaWEzMl9jcHVpZCh1bnNpZ25lZCBpbnQgKik7Cisr ICAgIElBMzJDQVAgdmVjOworKyAgICBjaGFyICplbnY7CisrCisrICAgIGlmICh0cmlnZ2VyKQor KyAgICAgICAgcmV0dXJuOworKworKyAgICB0cmlnZ2VyID0gMTsKKysgICAgaWYgKChlbnYgPSBn ZXRlbnYoIk9QRU5TU0xfaWEzMmNhcCIpKSkgeworKyAgICAgICAgaW50IG9mZiA9IChlbnZbMF0g PT0gJ34nKSA/IDEgOiAwOworKyMgICBpZiBkZWZpbmVkKF9XSU4zMikKKysgICAgICAgIGlmICgh c3NjYW5mKGVudiArIG9mZiwgIiVJNjRpIiwgJnZlYykpCisrICAgICAgICAgICAgdmVjID0gc3Ry dG91bChlbnYgKyBvZmYsIE5VTEwsIDApOworKyMgICBlbHNlCisrICAgICAgICBpZiAoIXNzY2Fu ZihlbnYgKyBvZmYsICIlbGxpIiwgKGxvbmcgbG9uZyAqKSZ2ZWMpKQorKyAgICAgICAgICAgIHZl YyA9IHN0cnRvdWwoZW52ICsgb2ZmLCBOVUxMLCAwKTsKKysjICAgZW5kaWYKKysgICAgICAgIGlm IChvZmYpCisrICAgICAgICAgICAgdmVjID0gT1BFTlNTTF9pYTMyX2NwdWlkKE9QRU5TU0xfaWEz MmNhcF9QKSAmIH52ZWM7CisrICAgICAgICBlbHNlIGlmIChlbnZbMF0gPT0gJzonKQorKyAgICAg ICAgICAgIHZlYyA9IE9QRU5TU0xfaWEzMl9jcHVpZChPUEVOU1NMX2lhMzJjYXBfUCk7CisrCisr ICAgICAgICBPUEVOU1NMX2lhMzJjYXBfUFsyXSA9IDA7CisrICAgICAgICBpZiAoKGVudiA9IHN0 cmNocihlbnYsICc6JykpKSB7CisrICAgICAgICAgICAgdW5zaWduZWQgaW50IHZlY3g7CisrICAg ICAgICAgICAgZW52Kys7CisrICAgICAgICAgICAgb2ZmID0gKGVudlswXSA9PSAnficpID8gMSA6 IDA7CisrICAgICAgICAgICAgdmVjeCA9IHN0cnRvdWwoZW52ICsgb2ZmLCBOVUxMLCAwKTsKKysg ICAgICAgICAgICBpZiAob2ZmKQorKyAgICAgICAgICAgICAgICBPUEVOU1NMX2lhMzJjYXBfUFsy XSAmPSB+dmVjeDsKKysgICAgICAgICAgICBlbHNlCisrICAgICAgICAgICAgICAgIE9QRU5TU0xf aWEzMmNhcF9QWzJdID0gdmVjeDsKKysgICAgICAgIH0KKysgICAgfSBlbHNlCisrICAgICAgICB2 ZWMgPSBPUEVOU1NMX2lhMzJfY3B1aWQoT1BFTlNTTF9pYTMyY2FwX1ApOworKworKyAgICAvKgor KyAgICAgKiB8KDE8PDEwKSBzZXRzIGEgcmVzZXJ2ZWQgYml0IHRvIHNpZ25hbCB0aGF0IHZhcmlh YmxlCisrICAgICAqIHdhcyBpbml0aWFsaXplZCBhbHJlYWR5Li4uIFRoaXMgaXMgdG8gYXZvaWQg aW50ZXJmZXJlbmNlCisrICAgICAqIHdpdGggY3B1aWQgc25pcHBldHMgaW4gRUxGIC5pbml0IHNl Z21lbnQuCisrICAgICAqLworKyAgICBPUEVOU1NMX2lhMzJjYXBfUFswXSA9ICh1bnNpZ25lZCBp bnQpdmVjIHwgKDEgPDwgMTApOworKyAgICBPUEVOU1NMX2lhMzJjYXBfUFsxXSA9ICh1bnNpZ25l ZCBpbnQpKHZlYyA+PiAzMik7CisrfQorKyMgIGVsc2UKKyt1bnNpZ25lZCBpbnQgT1BFTlNTTF9p YTMyY2FwX1BbNF07CisrIyAgZW5kaWYKKysKKysjIGVsc2UKKyt1bnNpZ25lZCBsb25nICpPUEVO U1NMX2lhMzJjYXBfbG9jKHZvaWQpCisreworKyAgICByZXR1cm4gTlVMTDsKKyt9CisrIyBlbmRp ZgorK2ludCBPUEVOU1NMX05PTlBJQ19yZWxvY2F0ZWQgPSAwOworKyMgaWYgIWRlZmluZWQoT1BF TlNTTF9DUFVJRF9TRVRVUCkgJiYgIWRlZmluZWQoT1BFTlNTTF9DUFVJRF9PQkopCisrdm9pZCBP UEVOU1NMX2NwdWlkX3NldHVwKHZvaWQpCisreworK30KKysjIGVuZGlmCisrCisrc3RhdGljIHZv aWQgaG1hY19pbml0KFNIQTI1Nl9DVFggKm1kX2N0eCwgU0hBMjU2X0NUWCAqb19jdHgsIGNvbnN0 IGNoYXIgKmtleSkKKyt7CisrICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oa2V5KTsKKysgICAgaW50 IGk7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5bWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKKysgICAg dW5zaWduZWQgY2hhciBwYWRbSE1BQ19NQVhfTURfQ0JMT0NLXTsKKysKKysgICAgaWYgKGxlbiA+ IFNIQV9DQkxPQ0spIHsKKysgICAgICAgIFNIQTI1Nl9Jbml0KG1kX2N0eCk7CisrICAgICAgICBT SEEyNTZfVXBkYXRlKG1kX2N0eCwga2V5LCBsZW4pOworKyAgICAgICAgU0hBMjU2X0ZpbmFsKGtl eW1kLCBtZF9jdHgpOworKyAgICAgICAgbGVuID0gU0hBMjU2X0RJR0VTVF9MRU5HVEg7CisrICAg IH0gZWxzZQorKyAgICAgICAgbWVtY3B5KGtleW1kLCBrZXksIGxlbik7CisrICAgIG1lbXNldCgm a2V5bWRbbGVuXSwgJ1wwJywgSE1BQ19NQVhfTURfQ0JMT0NLIC0gbGVuKTsKKysKKysgICAgZm9y IChpID0gMDsgaSA8IEhNQUNfTUFYX01EX0NCTE9DSzsgaSsrKQorKyAgICAgICAgcGFkW2ldID0g MHgzNiBeIGtleW1kW2ldOworKyAgICBTSEEyNTZfSW5pdChtZF9jdHgpOworKyAgICBTSEEyNTZf VXBkYXRlKG1kX2N0eCwgcGFkLCBTSEEyNTZfQ0JMT0NLKTsKKysKKysgICAgZm9yIChpID0gMDsg aSA8IEhNQUNfTUFYX01EX0NCTE9DSzsgaSsrKQorKyAgICAgICAgcGFkW2ldID0gMHg1YyBeIGtl eW1kW2ldOworKyAgICBTSEEyNTZfSW5pdChvX2N0eCk7CisrICAgIFNIQTI1Nl9VcGRhdGUob19j dHgsIHBhZCwgU0hBMjU2X0NCTE9DSyk7CisrfQorKworK3N0YXRpYyB2b2lkIGhtYWNfZmluYWwo dW5zaWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKm1kX2N0eCwKKysgICAgICAgICAgICAgICAg ICAgICAgIFNIQTI1Nl9DVFggKm9fY3R4KQorK3sKKysgICAgdW5zaWduZWQgY2hhciBidWZbU0hB MjU2X0RJR0VTVF9MRU5HVEhdOworKworKyAgICBTSEEyNTZfRmluYWwoYnVmLCBtZF9jdHgpOwor KyAgICBTSEEyNTZfVXBkYXRlKG9fY3R4LCBidWYsIHNpemVvZiBidWYpOworKyAgICBTSEEyNTZf RmluYWwobWQsIG9fY3R4KTsKKyt9CisrCisrI2VuZGlmCisrCisraW50IG1haW4oaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQorK3sKKysjaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIHN0YXRpYyBjaGFy IGtleVtdID0gIm9yYm9EZUpJVElUZWpzaXJwQURPTml2aXJwVWt2YXJQIjsKKysgICAgaW50IG4s IGJpbmFyeSA9IDA7CisrCisrICAgIGlmIChhcmdjIDwgMikgeworKyAgICAgICAgZnByaW50Zihz dGRlcnIsICIlcyBbPGZpbGU+XStcbiIsIGFyZ3ZbMF0pOworKyAgICAgICAgZXhpdCgxKTsKKysg ICAgfQorKworKyAgICBuID0gMTsKKysgICAgaWYgKCFzdHJjbXAoYXJndltuXSwgIi1iaW5hcnki KSkgeworKyAgICAgICAgbisrOworKyAgICAgICAgYmluYXJ5ID0gMTsgICAgICAgICAgICAgLyog ZW1pdCBiaW5hcnkgZmluZ2VycHJpbnQuLi4gKi8KKysgICAgfQorKworKyAgICBmb3IgKDsgbiA8 IGFyZ2M7ICsrbikgeworKyAgICAgICAgRklMRSAqZiA9IGZvcGVuKGFyZ3Zbbl0sICJyYiIpOwor KyAgICAgICAgU0hBMjU2X0NUWCBtZF9jdHgsIG9fY3R4OworKyAgICAgICAgdW5zaWduZWQgY2hh ciBtZFtTSEEyNTZfRElHRVNUX0xFTkdUSF07CisrICAgICAgICBpbnQgaTsKKysKKysgICAgICAg IGlmICghZikgeworKyAgICAgICAgICAgIHBlcnJvcihhcmd2W25dKTsKKysgICAgICAgICAgICBl eGl0KDIpOworKyAgICAgICAgfQorKworKyAgICAgICAgaG1hY19pbml0KCZtZF9jdHgsICZvX2N0 eCwga2V5KTsKKysgICAgICAgIGZvciAoOzspIHsKKysgICAgICAgICAgICBjaGFyIGJ1ZlsxMDI0 XTsKKysgICAgICAgICAgICBzaXplX3QgbCA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mIGJ1ZiwgZik7 CisrCisrICAgICAgICAgICAgaWYgKGwgPT0gMCkgeworKyAgICAgICAgICAgICAgICBpZiAoZmVy cm9yKGYpKSB7CisrICAgICAgICAgICAgICAgICAgICBwZXJyb3IoYXJndltuXSk7CisrICAgICAg ICAgICAgICAgICAgICBleGl0KDMpOworKyAgICAgICAgICAgICAgICB9IGVsc2UKKysgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworKyAgICAgICAgICAgIH0KKysgICAgICAgICAgICBTSEEyNTZf VXBkYXRlKCZtZF9jdHgsIGJ1ZiwgbCk7CisrICAgICAgICB9CisrICAgICAgICBobWFjX2ZpbmFs KG1kLCAmbWRfY3R4LCAmb19jdHgpOworKworKyAgICAgICAgaWYgKGJpbmFyeSkgeworKyAgICAg ICAgICAgIGZ3cml0ZShtZCwgU0hBMjU2X0RJR0VTVF9MRU5HVEgsIDEsIHN0ZG91dCk7CisrICAg ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiAuLi4gZm9yIHNpbmdsZSghKSBmaWxlICov CisrICAgICAgICB9CisrCisrLyogICAgICBwcmludGYoIkhNQUMtU0hBMSglcyk9ICIsYXJndltu XSk7ICovCisrICAgICAgICBmb3IgKGkgPSAwOyBpIDwgU0hBMjU2X0RJR0VTVF9MRU5HVEg7ICsr aSkKKysgICAgICAgICAgICBwcmludGYoIiUwMngiLCBtZFtpXSk7CisrICAgICAgICBwcmludGYo IlxuIik7CisrICAgIH0KKysjZW5kaWYKKysgICAgcmV0dXJuIDA7CisrfQorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvZmlwc190ZXN0X3N1aXRlLmMuZmlwcyBvcGVuc3NsLTEu MC4yaC9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3VpdGUuYworLS0tIG9wZW5zc2wtMS4wLjJoL2Ny eXB0by9maXBzL2ZpcHNfdGVzdF9zdWl0ZS5jLmZpcHMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MzIz MjEyNTIgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9maXBzX3Rlc3Rfc3Vp dGUuYwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgzMjMyMTI1MiArMDIwMAorQEAgLTAsMCArMSw2Mzkg QEAKKysvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorKyAqIENvcHlyaWdodCAoYykgMjAwMyBUaGUgT3BlblNTTCBQ cm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqCisrICogVGhpcyBjb21tYW5k IGlzIGludGVuZGVkIGFzIGEgdGVzdCBkcml2ZXIgZm9yIHRoZSBGSVBTLTE0MCB0ZXN0aW5nCisr ICogbGFiIHBlcmZvcm1pbmcgRklQUy0xNDAgdmFsaWRhdGlvbi4gIEl0IGRlbW9uc3RyYXRlcyB0 aGUgdXNlIG9mIHRoZQorKyAqIE9wZW5TU0wgbGlicmFyeSBpdG8gcGVyZm9ybSBhIHZhcmlldHkg b2YgY29tbW9uIGNyeXB0b2dyYXBoaWMKKysgKiBmdW5jdGlvbnMuICBBIHBvd2VyLXVwIHNlbGYg dGVzdCBpcyBkZW1vbnN0cmF0ZWQgYnkgZGVsaWJlcmF0ZWx5CisrICogcG9pbnRpbmcgdG8gYW4g aW52YWxpZCBleGVjdXRhYmxlIGhhc2gKKysgKgorKyAqIENvbnRyaWJ1dGVkIGJ5IFN0ZXZlIE1h cnF1ZXNzLgorKyAqCisrICovCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrI2luY2x1ZGUgPGFzc2Vy dC5oPgorKyNpbmNsdWRlIDxjdHlwZS5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVk ZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvYWVzLmg+CisrI2luY2x1ZGUgPG9wZW5z c2wvZGVzLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wv ZHNhLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZGguaD4KKysjaW5jbHVkZSA8b3BlbnNzbC9obWFj Lmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisrCisrI2luY2x1ZGUgPG9wZW5zc2wvYm4u aD4KKysjaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrI2luY2x1ZGUgPG9wZW5zc2wvc2hhLmg+ CisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQorK3sKKysgICAgcHJpbnRmKCJObyBGSVBTIHN1cHBvcnRcbiIpOworKyAgICByZXR1cm4g KDApOworK30KKysjZWxzZQorKworKyMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CisrIyBpbmNs dWRlICJmaXBzX3V0bC5oIgorKworKy8qIEFFUzogZW5jcnlwdCBhbmQgZGVjcnlwdCBrbm93biBw bGFpbnRleHQsIHZlcmlmeSByZXN1bHQgbWF0Y2hlcyBvcmlnaW5hbCBwbGFpbnRleHQKKysqLwor K3N0YXRpYyBpbnQgRklQU19hZXNfdGVzdCh2b2lkKQorK3sKKysgICAgaW50IHJldCA9IDA7Cisr ICAgIHVuc2lnbmVkIGNoYXIgcGx0bXBbMTZdOworKyAgICB1bnNpZ25lZCBjaGFyIGNpdG1wWzE2 XTsKKysgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdID0KKysgICAgICAgIHsgMSwgMiwgMywgNCwg NSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYgfTsKKysgICAgdW5zaWdu ZWQgY2hhciBwbGFpbnRleHRbMTZdID0gImV0YW9ucmlzaGRsY3UiOworKyAgICBFVlBfQ0lQSEVS X0NUWCBjdHg7CisrICAgIEVWUF9DSVBIRVJfQ1RYX2luaXQoJmN0eCk7CisrICAgIGlmIChFVlBf Q2lwaGVySW5pdF9leCgmY3R4LCBFVlBfYWVzXzEyOF9lY2IoKSwgTlVMTCwga2V5LCBOVUxMLCAx KSA8PSAwKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIEVWUF9DaXBoZXIoJmN0eCwgY2l0bXAs IHBsYWludGV4dCwgMTYpOworKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Fl c18xMjhfZWNiKCksIE5VTEwsIGtleSwgTlVMTCwgMCkgPD0gMCkKKysgICAgICAgIGdvdG8gZXJy OworKyAgICBFVlBfQ2lwaGVyKCZjdHgsIHBsdG1wLCBjaXRtcCwgMTYpOworKyAgICBpZiAobWVt Y21wKHBsdG1wLCBwbGFpbnRleHQsIDE2KSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICByZXQg PSAxOworKyBlcnI6CisrICAgIEVWUF9DSVBIRVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIHJl dHVybiByZXQ7CisrfQorKworK3N0YXRpYyBpbnQgRklQU19kZXMzX3Rlc3Qodm9pZCkKKyt7Cisr ICAgIGludCByZXQgPSAwOworKyAgICB1bnNpZ25lZCBjaGFyIHBsdG1wWzhdOworKyAgICB1bnNp Z25lZCBjaGFyIGNpdG1wWzhdOworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0KKysgICAgICAg IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYs IDE3LCAxOCwKKysgICAgICAgIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQKKysgICAgfTsKKysgICAg dW5zaWduZWQgY2hhciBwbGFpbnRleHRbXSA9IHsgJ2UnLCAndCcsICdhJywgJ28nLCAnbicsICdy JywgJ2knLCAncycgfTsKKysgICAgRVZQX0NJUEhFUl9DVFggY3R4OworKyAgICBFVlBfQ0lQSEVS X0NUWF9pbml0KCZjdHgpOworKyAgICBpZiAoRVZQX0NpcGhlckluaXRfZXgoJmN0eCwgRVZQX2Rl c19lZGUzX2VjYigpLCBOVUxMLCBrZXksIE5VTEwsIDEpIDw9IDApCisrICAgICAgICBnb3RvIGVy cjsKKysgICAgRVZQX0NpcGhlcigmY3R4LCBjaXRtcCwgcGxhaW50ZXh0LCA4KTsKKysgICAgaWYg KEVWUF9DaXBoZXJJbml0X2V4KCZjdHgsIEVWUF9kZXNfZWRlM19lY2IoKSwgTlVMTCwga2V5LCBO VUxMLCAwKSA8PSAwKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIEVWUF9DaXBoZXIoJmN0eCwg cGx0bXAsIGNpdG1wLCA4KTsKKysgICAgaWYgKG1lbWNtcChwbHRtcCwgcGxhaW50ZXh0LCA4KSkK KysgICAgICAgIGdvdG8gZXJyOworKyAgICByZXQgPSAxOworKyBlcnI6CisrICAgIEVWUF9DSVBI RVJfQ1RYX2NsZWFudXAoJmN0eCk7CisrICAgIHJldHVybiByZXQ7CisrfQorKworKy8qCisrICog RFNBOiBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgorKyAq LworK3N0YXRpYyBpbnQgRklQU19kc2FfdGVzdChpbnQgYmFkKQorK3sKKysgICAgRFNBICpkc2Eg PSBOVUxMOworKyAgICBFVlBfUEtFWSBwazsKKysgICAgdW5zaWduZWQgY2hhciBkZ3N0W10gPSAi ZXRhb25yaXNoZGxjIjsKKysgICAgdW5zaWduZWQgY2hhciBidWZbNjBdOworKyAgICB1bnNpZ25l ZCBpbnQgc2xlbjsKKysgICAgaW50IHIgPSAwOworKyAgICBFVlBfTURfQ1RYIG1jdHg7CisrCisr ICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBFVlBfTURfQ1RYX2luaXQoJm1jdHgpOworKyAg ICBkc2EgPSBEU0FfbmV3KCk7CisrICAgIGlmICghZHNhKQorKyAgICAgICAgZ290byBlbmQ7Cisr ICAgIGlmICghRFNBX2dlbmVyYXRlX3BhcmFtZXRlcnNfZXgoZHNhLCAxMDI0LCBOVUxMLCAwLCBO VUxMLCBOVUxMLCBOVUxMKSkKKysgICAgICAgIGdvdG8gZW5kOworKyAgICBpZiAoIURTQV9nZW5l cmF0ZV9rZXkoZHNhKSkKKysgICAgICAgIGdvdG8gZW5kOworKyAgICBpZiAoYmFkKQorKyAgICAg ICAgQk5fYWRkX3dvcmQoZHNhLT5wdWJfa2V5LCAxKTsKKysKKysgICAgcGsudHlwZSA9IEVWUF9Q S0VZX0RTQTsKKysgICAgcGsucGtleS5kc2EgPSBkc2E7CisrCisrICAgIGlmICghRVZQX1NpZ25J bml0X2V4KCZtY3R4LCBFVlBfZHNzMSgpLCBOVUxMKSkKKysgICAgICAgIGdvdG8gZW5kOworKyAg ICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKKysg ICAgICAgIGdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9TaWduRmluYWwoJm1jdHgsIGJ1ZiwgJnNs ZW4sICZwaykpCisrICAgICAgICBnb3RvIGVuZDsKKysKKysgICAgaWYgKCFFVlBfVmVyaWZ5SW5p dF9leCgmbWN0eCwgRVZQX2RzczEoKSwgTlVMTCkpCisrICAgICAgICBnb3RvIGVuZDsKKysgICAg aWYgKCFFVlBfVmVyaWZ5VXBkYXRlKCZtY3R4LCBkZ3N0LCBzaXplb2YoZGdzdCkgLSAxKSkKKysg ICAgICAgIGdvdG8gZW5kOworKyAgICByID0gRVZQX1ZlcmlmeUZpbmFsKCZtY3R4LCBidWYsIHNs ZW4sICZwayk7CisrIGVuZDoKKysgICAgRVZQX01EX0NUWF9jbGVhbnVwKCZtY3R4KTsKKysgICAg aWYgKGRzYSkKKysgICAgICAgIERTQV9mcmVlKGRzYSk7CisrICAgIGlmIChyICE9IDEpCisrICAg ICAgICByZXR1cm4gMDsKKysgICAgcmV0dXJuIDE7CisrfQorKworKy8qCisrICogUlNBOiBnZW5l cmF0ZSBrZXlzIGFuZCBzaWduLCB2ZXJpZnkgaW5wdXQgcGxhaW50ZXh0LgorKyAqLworK3N0YXRp YyBpbnQgRklQU19yc2FfdGVzdChpbnQgYmFkKQorK3sKKysgICAgUlNBICprZXk7CisrICAgIHVu c2lnbmVkIGNoYXIgaW5wdXRfcHRleHRbXSA9ICJldGFvbnJpc2hkbGMiOworKyAgICB1bnNpZ25l ZCBjaGFyIGJ1ZlsyNTZdOworKyAgICB1bnNpZ25lZCBpbnQgc2xlbjsKKysgICAgQklHTlVNICpi bjsKKysgICAgRVZQX01EX0NUWCBtY3R4OworKyAgICBFVlBfUEtFWSBwazsKKysgICAgaW50IHIg PSAwOworKworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgRVZQX01EX0NUWF9pbml0KCZt Y3R4KTsKKysgICAga2V5ID0gUlNBX25ldygpOworKyAgICBibiA9IEJOX25ldygpOworKyAgICBp ZiAoIWtleSB8fCAhYm4pCisrICAgICAgICByZXR1cm4gMDsKKysgICAgQk5fc2V0X3dvcmQoYm4s IDY1NTM3KTsKKysgICAgaWYgKCFSU0FfZ2VuZXJhdGVfa2V5X2V4KGtleSwgMTAyNCwgYm4sIE5V TEwpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIEJOX2ZyZWUoYm4pOworKyAgICBpZiAoYmFk KQorKyAgICAgICAgQk5fYWRkX3dvcmQoa2V5LT5uLCAxKTsKKysKKysgICAgcGsudHlwZSA9IEVW UF9QS0VZX1JTQTsKKysgICAgcGsucGtleS5yc2EgPSBrZXk7CisrCisrICAgIGlmICghRVZQX1Np Z25Jbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKKysgICAgICAgIGdvdG8gZW5kOwor KyAgICBpZiAoIUVWUF9TaWduVXBkYXRlKCZtY3R4LCBpbnB1dF9wdGV4dCwgc2l6ZW9mKGlucHV0 X3B0ZXh0KSAtIDEpKQorKyAgICAgICAgZ290byBlbmQ7CisrICAgIGlmICghRVZQX1NpZ25GaW5h bCgmbWN0eCwgYnVmLCAmc2xlbiwgJnBrKSkKKysgICAgICAgIGdvdG8gZW5kOworKworKyAgICBp ZiAoIUVWUF9WZXJpZnlJbml0X2V4KCZtY3R4LCBFVlBfc2hhMSgpLCBOVUxMKSkKKysgICAgICAg IGdvdG8gZW5kOworKyAgICBpZiAoIUVWUF9WZXJpZnlVcGRhdGUoJm1jdHgsIGlucHV0X3B0ZXh0 LCBzaXplb2YoaW5wdXRfcHRleHQpIC0gMSkpCisrICAgICAgICBnb3RvIGVuZDsKKysgICAgciA9 IEVWUF9WZXJpZnlGaW5hbCgmbWN0eCwgYnVmLCBzbGVuLCAmcGspOworKyBlbmQ6CisrICAgIEVW UF9NRF9DVFhfY2xlYW51cCgmbWN0eCk7CisrICAgIGlmIChrZXkpCisrICAgICAgICBSU0FfZnJl ZShrZXkpOworKyAgICBpZiAociAhPSAxKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVy biAxOworK30KKysKKysvKiBTSEExOiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1 ZSBhbmQgY29tcGFyZSB0byBrbm93bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyov Cisrc3RhdGljIGludCBGSVBTX3NoYTFfdGVzdCgpCisreworKyAgICB1bnNpZ25lZCBjaGFyIGRp Z2VzdFtTSEFfRElHRVNUX0xFTkdUSF0gPQorKyAgICAgICAgeyAweDExLCAweGYxLCAweDlhLCAw eDNhLCAweGVjLCAweDFhLCAweDFlLCAweDhlLCAweDY1LCAweGQ0LCAweDlhLAorKzB4MzgsIDB4 MGMsIDB4OGIsIDB4MWUsIDB4MmMsIDB4ZTgsIDB4YjMsIDB4YzUsIDB4MTggfTsKKysgICAgdW5z aWduZWQgY2hhciBzdHJbXSA9ICJldGFvbnJpc2hkIjsKKysKKysgICAgdW5zaWduZWQgY2hhciBt ZFtTSEFfRElHRVNUX0xFTkdUSF07CisrCisrICAgIEVSUl9jbGVhcl9lcnJvcigpOworKyAgICBp ZiAoIUVWUF9EaWdlc3Qoc3RyLCBzaXplb2Yoc3RyKSAtIDEsIG1kLCBOVUxMLCBFVlBfc2hhMSgp LCBOVUxMKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICBpZiAobWVtY21wKG1kLCBkaWdlc3Qs IHNpemVvZihtZCkpKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIHJldHVybiAxOworK30KKysK KysvKiBTSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21w YXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMg aW50IEZJUFNfc2hhMjU2X3Rlc3QoKQorK3sKKysgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbU0hB MjU2X0RJR0VTVF9MRU5HVEhdID0KKysgICAgICAgIHsgMHhmNSwgMHg1MywgMHhjZCwgMHhiOCwg MHhjZiwgMHgxLCAweGVlLCAweDE3LCAweDliLCAweDkzLCAweGM5LAorKzB4NjgsIDB4YzAsIDB4 ZWEsIDB4NDAsIDB4OTEsCisrICAgICAgICAweDYsIDB4ZWMsIDB4OGUsIDB4MTEsIDB4OTYsIDB4 YzgsIDB4NWQsIDB4MWMsIDB4YWYsIDB4NjQsIDB4MjIsIDB4ZTYsCisrICAgICAgICAgICAgMHg1 MCwgMHg0ZiwgMHg0NywgMHg1NworKyAgICB9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0g ImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTI1Nl9ESUdFU1RfTEVO R1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChz dHIsIHNpemVvZihzdHIpIC0gMSwgbWQsIE5VTEwsIEVWUF9zaGEyNTYoKSwgTlVMTCkpCisrICAg ICAgICByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCwgZGlnZXN0LCBzaXplb2YobWQpKSkK KysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogU0hBNTEyOiBn ZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93bgor KyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX3NoYTUx Ml90ZXN0KCkKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTUxMl9ESUdFU1RfTEVO R1RIXSA9CisrICAgICAgICB7IDB4OTksIDB4YzksIDB4ZTksIDB4NWIsIDB4ODgsIDB4ZDQsIDB4 NzgsIDB4ODgsIDB4ZGYsIDB4ODgsIDB4NWYsCisrMHg5NCwgMHg3MSwgMHg2NCwgMHgyOCwgMHhj YSwKKysgICAgICAgIDB4MTYsIDB4MWYsIDB4M2QsIDB4ZjQsIDB4MWYsIDB4ZjMsIDB4MGYsIDB4 YzUsIDB4MDMsIDB4OTksIDB4YjIsCisrICAgICAgICAgICAgMHhkMCwgMHhlNywgMHgwYiwgMHg5 NCwgMHg0YSwKKysgICAgICAgIDB4NDUsIDB4ZDIsIDB4NmMsIDB4NGYsIDB4MjAsIDB4MDYsIDB4 ZWYsIDB4NzEsIDB4YTksIDB4MjUsIDB4N2YsCisrICAgICAgICAgICAgMHgyNCwgMHhiMSwgMHhk OSwgMHg0MCwgMHgyMiwKKysgICAgICAgIDB4NDksIDB4NTQsIDB4MTAsIDB4YzIsIDB4MjIsIDB4 OWQsIDB4MjcsIDB4ZmUsIDB4YmQsIDB4ZDYsIDB4ZDYsCisrICAgICAgICAgICAgMHhlYiwgMHgy ZCwgMHg0MiwgMHgxZCwgMHhhMworKyAgICB9OworKyAgICB1bnNpZ25lZCBjaGFyIHN0cltdID0g ImV0YW9ucmlzaGQiOworKworKyAgICB1bnNpZ25lZCBjaGFyIG1kW1NIQTUxMl9ESUdFU1RfTEVO R1RIXTsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghRVZQX0RpZ2VzdChz dHIsIHNpemVvZihzdHIpIC0gMSwgbWQsIE5VTEwsIEVWUF9zaGE1MTIoKSwgTlVMTCkpCisrICAg ICAgICByZXR1cm4gMDsKKysgICAgaWYgKG1lbWNtcChtZCwgZGlnZXN0LCBzaXplb2YobWQpKSkK KysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogSE1BQy1TSEEx OiBnZW5lcmF0ZSBoYXNoIG9mIGtub3duIGRpZ2VzdCB2YWx1ZSBhbmQgY29tcGFyZSB0byBrbm93 bgorKyAgIHByZWNvbXB1dGVkIGNvcnJlY3QgaGFzaAorKyovCisrc3RhdGljIGludCBGSVBTX2ht YWNfc2hhMV90ZXN0KCkKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNo ZCI7CisrICAgIHVuc2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2ln bmVkIGNoYXIga2F2YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrICAgICAgICB7IDB4NzMsIDB4Zjcs IDB4YTAsIDB4NDgsIDB4ZjgsIDB4OTQsIDB4ZWQsIDB4ZGQsIDB4MGEsIDB4ZWEsIDB4ZWEsCisr MHg1NiwgMHgxYiwgMHg2MSwgMHgyZSwgMHg3MCwKKysgICAgICAgIDB4YjIsIDB4ZmIsIDB4ZWMs IDB4YzYKKysgICAgfTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpF XTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7 CisrICAgIGlmICghSE1BQworKyAgICAgICAgKEVWUF9zaGExKCksIGtleSwgc2l6ZW9mKGtleSkg LSAxLCBpdiwgc2l6ZW9mKGl2KSAtIDEsIG91dCwgJm91dGxlbikpCisrICAgICAgICByZXR1cm4g MDsKKysgICAgaWYgKG1lbWNtcChvdXQsIGthdmFsLCBvdXRsZW4pKQorKyAgICAgICAgcmV0dXJu IDA7CisrICAgIHJldHVybiAxOworK30KKysKKysvKiBITUFDLVNIQTIyNDogZ2VuZXJhdGUgaGFz aCBvZiBrbm93biBkaWdlc3QgdmFsdWUgYW5kIGNvbXBhcmUgdG8ga25vd24KKysgICBwcmVjb21w dXRlZCBjb3JyZWN0IGhhc2gKKysqLworK3N0YXRpYyBpbnQgRklQU19obWFjX3NoYTIyNF90ZXN0 KCkKKyt7CisrICAgIHVuc2lnbmVkIGNoYXIga2V5W10gPSAiZXRhb25yaXNoZCI7CisrICAgIHVu c2lnbmVkIGNoYXIgaXZbXSA9ICJTYW1wbGUgdGV4dCI7CisrICAgIHVuc2lnbmVkIGNoYXIga2F2 YWxbRVZQX01BWF9NRF9TSVpFXSA9CisrICAgICAgICB7IDB4NzUsIDB4NTgsIDB4ZDUsIDB4YmQs IDB4NTUsIDB4NmQsIDB4ODcsIDB4MGYsIDB4NzUsIDB4ZmYsIDB4YmUsCisrMHgxYywgMHhiMiwg MHhmMCwgMHgyMCwgMHgzNSwKKysgICAgICAgIDB4ZTUsIDB4NjIsIDB4NDksIDB4YjYsIDB4OTQs IDB4YjksIDB4ZmMsIDB4NjUsIDB4MzQsIDB4MzMsIDB4M2EsIDB4MTkKKysgICAgfTsKKysKKysg ICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50 IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQworKyAg ICAgICAgKEVWUF9zaGEyMjQoKSwga2V5LCBzaXplb2Yoa2V5KSAtIDEsIGl2LCBzaXplb2YoaXYp IC0gMSwgb3V0LAorKyAgICAgICAgICZvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAg IGlmIChtZW1jbXAob3V0LCBrYXZhbCwgb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAg ICByZXR1cm4gMTsKKyt9CisrCisrLyogSE1BQy1TSEEyNTY6IGdlbmVyYXRlIGhhc2ggb2Yga25v d24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29y cmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGEyNTZfdGVzdCgpCisrewor KyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBj aGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9N QVhfTURfU0laRV0gPQorKyAgICAgICAgeyAweGU5LCAweDE3LCAweGMxLCAweDdiLCAweDRjLCAw eDZiLCAweDc3LCAweGRhLCAweGQyLCAweDMwLCAweDM2LAorKzB4MDIsIDB4ZjUsIDB4NzIsIDB4 MzMsIDB4ODcsCisrICAgICAgICAweDlmLCAweGM2LCAweDZlLCAweDdiLCAweDdlLCAweGE4LCAw eGVhLCAweGFhLCAweDlmLCAweGJhLCAweGVlLAorKyAgICAgICAgICAgIDB4NTEsIDB4ZmYsIDB4 ZGEsIDB4MjQsIDB4ZjQKKysgICAgfTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01B WF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFy X2Vycm9yKCk7CisrICAgIGlmICghSE1BQworKyAgICAgICAgKEVWUF9zaGEyNTYoKSwga2V5LCBz aXplb2Yoa2V5KSAtIDEsIGl2LCBzaXplb2YoaXYpIC0gMSwgb3V0LAorKyAgICAgICAgICZvdXRs ZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmIChtZW1jbXAob3V0LCBrYXZhbCwgb3V0 bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogSE1B Qy1TSEEzODQ6IGdlbmVyYXRlIGhhc2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJl IHRvIGtub3duCisrICAgcHJlY29tcHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50 IEZJUFNfaG1hY19zaGEzODRfdGVzdCgpCisreworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0g ImV0YW9ucmlzaGQiOworKyAgICB1bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOwor KyAgICB1bnNpZ25lZCBjaGFyIGthdmFsW0VWUF9NQVhfTURfU0laRV0gPQorKyAgICAgICAgeyAw eGIyLCAweDlkLCAweDQwLCAweDU4LCAweDMyLCAweGM0LCAweGUzLCAweDMxLCAweGI2LCAweDYz LCAweDA4LAorKzB4MjYsIDB4OTksIDB4ZWYsIDB4M2IsIDB4MTAsCisrICAgICAgICAweGUyLCAw eGRmLCAweGY4LCAweGZmLCAweGM2LCAweGUxLCAweDAzLCAweDI5LCAweDgxLCAweDJhLCAweDFi LAorKyAgICAgICAgICAgIDB4YWMsIDB4YjAsIDB4MDcsIDB4MzksIDB4MDgsCisrICAgICAgICAw eGYzLCAweDkxLCAweDM1LCAweDExLCAweDc2LCAweGQ2LCAweDRjLCAweDIwLCAweGZiLCAweDRk LCAweGMzLAorKyAgICAgICAgICAgIDB4ZjMsIDB4YjgsIDB4OWIsIDB4ODgsIDB4MWMKKysgICAg fTsKKysKKysgICAgdW5zaWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5z aWduZWQgaW50IG91dGxlbjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICgh SE1BQworKyAgICAgICAgKEVWUF9zaGEzODQoKSwga2V5LCBzaXplb2Yoa2V5KSAtIDEsIGl2LCBz aXplb2YoaXYpIC0gMSwgb3V0LAorKyAgICAgICAgICZvdXRsZW4pKQorKyAgICAgICAgcmV0dXJu IDA7CisrICAgIGlmIChtZW1jbXAob3V0LCBrYXZhbCwgb3V0bGVuKSkKKysgICAgICAgIHJldHVy biAwOworKyAgICByZXR1cm4gMTsKKyt9CisrCisrLyogSE1BQy1TSEE1MTI6IGdlbmVyYXRlIGhh c2ggb2Yga25vd24gZGlnZXN0IHZhbHVlIGFuZCBjb21wYXJlIHRvIGtub3duCisrICAgcHJlY29t cHV0ZWQgY29ycmVjdCBoYXNoCisrKi8KKytzdGF0aWMgaW50IEZJUFNfaG1hY19zaGE1MTJfdGVz dCgpCisreworKyAgICB1bnNpZ25lZCBjaGFyIGtleVtdID0gImV0YW9ucmlzaGQiOworKyAgICB1 bnNpZ25lZCBjaGFyIGl2W10gPSAiU2FtcGxlIHRleHQiOworKyAgICB1bnNpZ25lZCBjaGFyIGth dmFsW0VWUF9NQVhfTURfU0laRV0gPQorKyAgICAgICAgeyAweGNkLCAweDNlLCAweGI5LCAweDUx LCAweGI4LCAweGJjLCAweDdmLCAweDlhLCAweDIzLCAweGFmLCAweGYzLAorKzB4NzcsIDB4NTks IDB4ODUsIDB4YTksIDB4ZTYsCisrICAgICAgICAweGY3LCAweGQxLCAweDUxLCAweDk2LCAweDE3 LCAweGUwLCAweDkyLCAweGQ4LCAweGE2LCAweDNiLCAweGMxLAorKyAgICAgICAgICAgIDB4YWQs IDB4N2UsIDB4MjQsIDB4Y2EsIDB4YjEsCisrICAgICAgICAweGQ3LCAweDc5LCAweDBhLCAweGE1 LCAweGVhLCAweDJjLCAweDAyLCAweDU4LCAweDBiLCAweGE2LCAweDUyLAorKyAgICAgICAgICAg IDB4NmIsIDB4NjEsIDB4N2YsIDB4ZWIsIDB4OWMsCisrICAgICAgICAweDQ3LCAweDg2LCAweDVk LCAweDc0LCAweDJiLCAweDg4LCAweGRmLCAweGVlLCAweDQ2LCAweDY5LCAweDk2LAorKyAgICAg ICAgICAgIDB4M2QsIDB4YTYsIDB4ZDksIDB4MmEsIDB4NTMKKysgICAgfTsKKysKKysgICAgdW5z aWduZWQgY2hhciBvdXRbRVZQX01BWF9NRF9TSVpFXTsKKysgICAgdW5zaWduZWQgaW50IG91dGxl bjsKKysKKysgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisrICAgIGlmICghSE1BQworKyAgICAgICAg KEVWUF9zaGE1MTIoKSwga2V5LCBzaXplb2Yoa2V5KSAtIDEsIGl2LCBzaXplb2YoaXYpIC0gMSwg b3V0LAorKyAgICAgICAgICZvdXRsZW4pKQorKyAgICAgICAgcmV0dXJuIDA7CisrICAgIGlmICht ZW1jbXAob3V0LCBrYXZhbCwgb3V0bGVuKSkKKysgICAgICAgIHJldHVybiAwOworKyAgICByZXR1 cm4gMTsKKyt9CisrCisrLyogREg6IGdlbmVyYXRlIHNoYXJlZCBwYXJhbWV0ZXJzCisrKi8KKytz dGF0aWMgaW50IGRoX3Rlc3QoKQorK3sKKysgICAgREggKmRoOworKyAgICBFUlJfY2xlYXJfZXJy b3IoKTsKKysgICAgZGggPSBGSVBTX2RoX25ldygpOworKyAgICBpZiAoIWRoKQorKyAgICAgICAg cmV0dXJuIDA7CisrICAgIGlmICghREhfZ2VuZXJhdGVfcGFyYW1ldGVyc19leChkaCwgMTAyNCwg MiwgTlVMTCkpCisrICAgICAgICByZXR1cm4gMDsKKysgICAgRklQU19kaF9mcmVlKGRoKTsKKysg ICAgcmV0dXJuIDE7CisrfQorKworKy8qIFplcm9pemUKKysqLworK3N0YXRpYyBpbnQgWmVyb2l6 ZSgpCisreworKyAgICBSU0EgKmtleTsKKysgICAgQklHTlVNICpibjsKKysgICAgdW5zaWduZWQg Y2hhciB1c2Vya2V5WzE2XSA9CisrICAgICAgICB7IDB4NDgsIDB4NTAsIDB4ZjAsIDB4YTMsIDB4 M2EsIDB4ZWQsIDB4ZDMsIDB4YWYsIDB4NmUsIDB4NDcsIDB4N2YsCisrMHg4MywgMHgwMiwgMHhi MSwgMHgwOSwgMHg2OCB9OworKyAgICBpbnQgaSwgbjsKKysKKysgICAga2V5ID0gRklQU19yc2Ff bmV3KCk7CisrICAgIGJuID0gQk5fbmV3KCk7CisrICAgIGlmICgha2V5IHx8ICFibikKKysgICAg ICAgIHJldHVybiAwOworKyAgICBCTl9zZXRfd29yZChibiwgNjU1MzcpOworKyAgICBpZiAoIVJT QV9nZW5lcmF0ZV9rZXlfZXgoa2V5LCAxMDI0LCBibiwgTlVMTCkpCisrICAgICAgICByZXR1cm4g MDsKKysgICAgQk5fZnJlZShibik7CisrCisrICAgIG4gPSBCTl9udW1fYnl0ZXMoa2V5LT5kKTsK KysgICAgcHJpbnRmKCIgR2VuZXJhdGVkICVkIGJ5dGUgUlNBIHByaXZhdGUga2V5XG4iLCBuKTsK KysgICAgcHJpbnRmKCJcdEJOIGtleSBiZWZvcmUgb3ZlcndyaXRpbmc6XG4iKTsKKysgICAgZG9f Ym5fcHJpbnQoc3Rkb3V0LCBrZXktPmQpOworKyAgICBCTl9yYW5kKGtleS0+ZCwgbiAqIDgsIC0x LCAwKTsKKysgICAgcHJpbnRmKCJcdEJOIGtleSBhZnRlciBvdmVyd3JpdGluZzpcbiIpOworKyAg ICBkb19ibl9wcmludChzdGRvdXQsIGtleS0+ZCk7CisrCisrICAgIHByaW50ZigiXHRjaGFyIGJ1 ZmZlciBrZXkgYmVmb3JlIG92ZXJ3cml0aW5nOiBcblx0XHQiKTsKKysgICAgZm9yIChpID0gMDsg aSA8IHNpemVvZih1c2Vya2V5KTsgaSsrKQorKyAgICAgICAgcHJpbnRmKCIlMDJ4IiwgdXNlcmtl eVtpXSk7CisrICAgIHByaW50ZigiXG4iKTsKKysgICAgUkFORF9ieXRlcyh1c2Vya2V5LCBzaXpl b2YgdXNlcmtleSk7CisrICAgIHByaW50ZigiXHRjaGFyIGJ1ZmZlciBrZXkgYWZ0ZXIgb3Zlcndy aXRpbmc6IFxuXHRcdCIpOworKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHVzZXJrZXkpOyBp KyspCisrICAgICAgICBwcmludGYoIiUwMngiLCB1c2Vya2V5W2ldKTsKKysgICAgcHJpbnRmKCJc biIpOworKworKyAgICByZXR1cm4gMTsKKyt9CisrCisrc3RhdGljIGludCBFcnJvcjsKKytjb25z dCBjaGFyICpGYWlsKGNvbnN0IGNoYXIgKm1zZykKKyt7CisrICAgIGRvX3ByaW50X2Vycm9ycygp OworKyAgICBFcnJvcisrOworKyAgICByZXR1cm4gbXNnOworK30KKysKKytpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCisreworKworKyAgICBpbnQgZG9fY29ycnVwdF9yc2Ffa2V5Z2Vu ID0gMCwgZG9fY29ycnVwdF9kc2Ffa2V5Z2VuID0gMDsKKysgICAgaW50IGJhZF9yc2EgPSAwLCBi YWRfZHNhID0gMDsKKysgICAgaW50IGRvX3JuZ19zdGljayA9IDA7CisrICAgIGludCBub19leGl0 ID0gMDsKKysKKysgICAgcHJpbnRmKCJcdEZJUFMtbW9kZSB0ZXN0IGFwcGxpY2F0aW9uXG5cbiIp OworKworKyAgICAvKiBMb2FkIGVudHJvcHkgZnJvbSBleHRlcm5hbCBmaWxlLCBpZiBhbnkgKi8K KysgICAgUkFORF9sb2FkX2ZpbGUoIi5ybmQiLCAxMDI0KTsKKysKKysgICAgaWYgKGFyZ3ZbMV0p IHsKKysgICAgICAgIC8qIENvcnJ1cHRlZCBLQVQgdGVzdHMgKi8KKysgICAgICAgIGlmICghc3Ry Y21wKGFyZ3ZbMV0sICJhZXMiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9hZXMoKTsK KysgICAgICAgICAgICBwcmludGYoIkFFUyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3Jy dXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAi ZGVzIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZGVzKCk7CisrICAgICAgICAgICAg cHJpbnRmKCJERVMzLUVDQiBlbmNyeXB0aW9uL2RlY3J5cHRpb24gd2l0aCBjb3JydXB0ZWQgS0FU Li4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNhIikpIHsK KysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfZHNhKCk7CisrICAgICAgICAgICAgcHJpbnRmCisr ICAgICAgICAgICAgICAgICgiRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRh dGlvbiB3aXRoIGNvcnJ1cHRlZCBLQVQuLi5cbiIpOworKyAgICAgICAgfSBlbHNlIGlmICghc3Ry Y21wKGFyZ3ZbMV0sICJyc2EiKSkgeworKyAgICAgICAgICAgIEZJUFNfY29ycnVwdF9yc2EoKTsK KysgICAgICAgICAgICBwcmludGYKKysgICAgICAgICAgICAgICAgKCJSU0Ega2V5IGdlbmVyYXRp b24gYW5kIHNpZ25hdHVyZSB2YWxpZGF0aW9uIHdpdGggY29ycnVwdGVkIEtBVC4uLlxuIik7Cisr ICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJzYWtleSIpKSB7CisrICAgICAg ICAgICAgcHJpbnRmCisrICAgICAgICAgICAgICAgICgiUlNBIGtleSBnZW5lcmF0aW9uIGFuZCBz aWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXkuLi5cbiIpOworKyAgICAgICAg ICAgIGJhZF9yc2EgPSAxOworKyAgICAgICAgICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAgfSBl bHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJyc2FrZXlnZW4iKSkgeworKyAgICAgICAgICAgIGRv X2NvcnJ1cHRfcnNhX2tleWdlbiA9IDE7CisrICAgICAgICAgICAgbm9fZXhpdCA9IDE7CisrICAg ICAgICAgICAgcHJpbnRmCisrICAgICAgICAgICAgICAgICgiUlNBIGtleSBnZW5lcmF0aW9uIGFu ZCBzaWduYXR1cmUgdmFsaWRhdGlvbiB3aXRoIGNvcnJ1cHRlZCBrZXlnZW4uLi5cbiIpOworKyAg ICAgICAgfSBlbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJkc2FrZXkiKSkgeworKyAgICAgICAg ICAgIHByaW50ZgorKyAgICAgICAgICAgICAgICAoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2ln bmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Li4uXG4iKTsKKysgICAgICAgICAg ICBiYWRfZHNhID0gMTsKKysgICAgICAgICAgICBub19leGl0ID0gMTsKKysgICAgICAgIH0gZWxz ZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiZHNha2V5Z2VuIikpIHsKKysgICAgICAgICAgICBkb19j b3JydXB0X2RzYV9rZXlnZW4gPSAxOworKyAgICAgICAgICAgIG5vX2V4aXQgPSAxOworKyAgICAg ICAgICAgIHByaW50ZgorKyAgICAgICAgICAgICAgICAoIkRTQSBrZXkgZ2VuZXJhdGlvbiBhbmQg c2lnbmF0dXJlIHZhbGlkYXRpb24gd2l0aCBjb3JydXB0ZWQga2V5Z2VuLi4uXG4iKTsKKysgICAg ICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hhMSIpKSB7CisrICAgICAgICAgICAg RklQU19jb3JydXB0X3NoYTEoKTsKKysgICAgICAgICAgICBwcmludGYoIlNIQS0xIGhhc2ggd2l0 aCBjb3JydXB0ZWQgS0FULi4uXG4iKTsKKysgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChhcmd2 WzFdLCAicm5nIikpIHsKKysgICAgICAgICAgICBGSVBTX2NvcnJ1cHRfcm5nKCk7CisrICAgICAg ICB9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInJuZ3N0aWNrIikpIHsKKysgICAgICAgICAg ICBkb19ybmdfc3RpY2sgPSAxOworKyAgICAgICAgICAgIG5vX2V4aXQgPSAxOworKyAgICAgICAg ICAgIHByaW50ZigiUk5HIHRlc3Qgd2l0aCBzdHVjayBjb250aW51b3VzIHRlc3QuLi5cbiIpOwor KyAgICAgICAgfSBlbHNlIHsKKysgICAgICAgICAgICBwcmludGYoIkJhZCBhcmd1bWVudCBcIiVz XCJcbiIsIGFyZ3ZbMV0pOworKyAgICAgICAgICAgIGV4aXQoMSk7CisrICAgICAgICB9CisrICAg ICAgICBpZiAoIW5vX2V4aXQpIHsKKysgICAgICAgICAgICBpZiAoIUZJUFNfbW9kZV9zZXQoMSkp IHsKKysgICAgICAgICAgICAgICAgZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgICAgICAgICAgICAg IHByaW50ZigiUG93ZXItdXAgc2VsZiB0ZXN0IGZhaWxlZFxuIik7CisrICAgICAgICAgICAgICAg IGV4aXQoMSk7CisrICAgICAgICAgICAgfQorKyAgICAgICAgICAgIHByaW50ZigiUG93ZXItdXAg c2VsZiB0ZXN0IHN1Y2Nlc3NmdWxcbiIpOworKyAgICAgICAgICAgIGV4aXQoMCk7CisrICAgICAg ICB9CisrICAgIH0KKysKKysgICAgLyogTm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0 aW9uCisrICAgICAqLworKyAgICBwcmludGYoIjEuIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGlj IG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsKKysgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29y aXRobSAoRC1IKS4uLiIpOworKyAgICBwcmludGYoZGhfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6 IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysgICAgLyogUG93ZXItdXAgc2VsZiB0ZXN0CisrICAg ICAqLworKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKysgICAgcHJpbnRmKCIyLiBBdXRvbWF0aWMg cG93ZXItdXAgc2VsZiB0ZXN0Li4uIik7CisrICAgIGlmICghRklQU19tb2RlX3NldCgxKSkgewor KyAgICAgICAgZG9fcHJpbnRfZXJyb3JzKCk7CisrICAgICAgICBwcmludGYoRmFpbCgiRkFJTEVE IVxuIikpOworKyAgICAgICAgZXhpdCgxKTsKKysgICAgfQorKyAgICBwcmludGYoInN1Y2Nlc3Nm dWxcbiIpOworKyAgICBpZiAoZG9fY29ycnVwdF9kc2Ffa2V5Z2VuKQorKyAgICAgICAgRklQU19j b3JydXB0X2RzYV9rZXlnZW4oKTsKKysgICAgaWYgKGRvX2NvcnJ1cHRfcnNhX2tleWdlbikKKysg ICAgICAgIEZJUFNfY29ycnVwdF9yc2Ffa2V5Z2VuKCk7CisrICAgIGlmIChkb19ybmdfc3RpY2sp CisrICAgICAgICBGSVBTX3JuZ19zdGljaygpOworKworKyAgICAvKiBBRVMgZW5jcnlwdGlvbi9k ZWNyeXB0aW9uCisrICAgICAqLworKyAgICBwcmludGYoIjMuIEFFUyBlbmNyeXB0aW9uL2RlY3J5 cHRpb24uLi4iKTsKKysgICAgcHJpbnRmKEZJUFNfYWVzX3Rlc3QoKT8gInN1Y2Nlc3NmdWxcbiIg OiBGYWlsKCJGQUlMRUQhXG4iKSk7CisrCisrICAgIC8qIFJTQSBrZXkgZ2VuZXJhdGlvbiBhbmQg ZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICAqLworKyAgICBwcmludGYoIjQuIFJTQSBrZXkg Z2VuZXJhdGlvbiBhbmQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAgIHByaW50ZihG SVBTX3JzYV90ZXN0KGJhZF9yc2EpID8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4i KSk7CisrCisrICAgIC8qIERFUy1DQkMgZW5jcnlwdGlvbi9kZWNyeXB0aW9uCisrICAgICAqLwor KyAgICBwcmludGYoIjUuIERFUy1FQ0IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLi4uIik7CisrICAg IHByaW50ZihGSVBTX2RlczNfdGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFc biIpKTsKKysKKysgICAgLyogRFNBIGtleSBnZW5lcmF0aW9uIGFuZCBzaWduYXR1cmUgdmFsaWRh dGlvbgorKyAgICAgKi8KKysgICAgcHJpbnRmKCI2LiBEU0Ega2V5IGdlbmVyYXRpb24gYW5kIHNp Z25hdHVyZSB2YWxpZGF0aW9uLi4uIik7CisrICAgIHByaW50ZihGSVBTX2RzYV90ZXN0KGJhZF9k c2EpID8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQhXG4iKSk7CisrCisrICAgIC8qIFNI QS0xIGhhc2gKKysgICAgICovCisrICAgIHByaW50ZigiN2EuIFNIQS0xIGhhc2guLi4iKTsKKysg ICAgcHJpbnRmKEZJUFNfc2hhMV90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVE IVxuIikpOworKworKyAgICAvKiBTSEEtMjU2IGhhc2gKKysgICAgICovCisrICAgIHByaW50Zigi N2IuIFNIQS0yNTYgaGFzaC4uLiIpOworKyAgICBwcmludGYoRklQU19zaGEyNTZfdGVzdCgpPyAi c3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysgICAgLyogU0hBLTUxMiBo YXNoCisrICAgICAqLworKyAgICBwcmludGYoIjdjLiBTSEEtNTEyIGhhc2guLi4iKTsKKysgICAg cHJpbnRmKEZJUFNfc2hhNTEyX3Rlc3QoKT8gInN1Y2Nlc3NmdWxcbiIgOiBGYWlsKCJGQUlMRUQh XG4iKSk7CisrCisrICAgIC8qIEhNQUMtU0hBLTEgaGFzaAorKyAgICAgKi8KKysgICAgcHJpbnRm KCI3ZC4gSE1BQy1TSEEtMSBoYXNoLi4uIik7CisrICAgIHByaW50ZihGSVBTX2htYWNfc2hhMV90 ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxuIikpOworKworKyAgICAvKiBI TUFDLVNIQS0yMjQgaGFzaAorKyAgICAgKi8KKysgICAgcHJpbnRmKCI3ZS4gSE1BQy1TSEEtMjI0 IGhhc2guLi4iKTsKKysgICAgcHJpbnRmKEZJUFNfaG1hY19zaGEyMjRfdGVzdCgpPyAic3VjY2Vz c2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysgICAgLyogSE1BQy1TSEEtMjU2IGhh c2gKKysgICAgICovCisrICAgIHByaW50ZigiN2YuIEhNQUMtU0hBLTI1NiBoYXNoLi4uIik7Cisr ICAgIHByaW50ZihGSVBTX2htYWNfc2hhMjU2X3Rlc3QoKT8gInN1Y2Nlc3NmdWxcbiIgOiBGYWls KCJGQUlMRUQhXG4iKSk7CisrCisrICAgIC8qIEhNQUMtU0hBLTM4NCBoYXNoCisrICAgICAqLwor KyAgICBwcmludGYoIjdnLiBITUFDLVNIQS0zODQgaGFzaC4uLiIpOworKyAgICBwcmludGYoRklQ U19obWFjX3NoYTM4NF90ZXN0KCk/ICJzdWNjZXNzZnVsXG4iIDogRmFpbCgiRkFJTEVEIVxuIikp OworKworKyAgICAvKiBITUFDLVNIQS01MTIgaGFzaAorKyAgICAgKi8KKysgICAgcHJpbnRmKCI3 aC4gSE1BQy1TSEEtNTEyIGhhc2guLi4iKTsKKysgICAgcHJpbnRmKEZJUFNfaG1hY19zaGE1MTJf dGVzdCgpPyAic3VjY2Vzc2Z1bFxuIiA6IEZhaWwoIkZBSUxFRCFcbiIpKTsKKysKKysgICAgLyog Tm9uLUFwcHJvdmVkIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uCisrICAgICAqLworKyAgICBwcmlu dGYoIjguIE5vbi1BcHByb3ZlZCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbiB0ZXN0Li4uXG4iKTsK KysgICAgcHJpbnRmKCJcdGEuIEluY2x1ZGVkIGFsZ29yaXRobSAoRC1IKS4uLiIpOworKyAgICBw cmludGYoZGhfdGVzdCgpPyAic3VjY2Vzc2Z1bCBhcyBleHBlY3RlZFxuIgorKyAgICAgICAgICAg OiBGYWlsKCJmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSk7CisrCisrICAgIC8qIFplcm9pemF0aW9u CisrICAgICAqLworKyAgICBwcmludGYoIjkuIFplcm8taXphdGlvbi4uLlxuIik7CisrICAgIHBy aW50ZihaZXJvaXplKCk/ICJcdHN1Y2Nlc3NmdWwgYXMgZXhwZWN0ZWRcbiIKKysgICAgICAgICAg IDogRmFpbCgiXHRmYWlsZWQgSU5DT1JSRUNUTFkhXG4iKSk7CisrCisrICAgIHByaW50ZigiXG5B bGwgdGVzdHMgY29tcGxldGVkIHdpdGggJWQgZXJyb3JzXG4iLCBFcnJvcik7CisrICAgIHJldHVy biBFcnJvciA/IDEgOiAwOworK30KKysKKysjZW5kaWYKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJo L2NyeXB0by9maXBzL01ha2VmaWxlLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2ZpcHMvTWFr ZWZpbGUKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vZmlwcy9NYWtlZmlsZS5maXBzCTIwMTYt MDUtMDMgMTY6NTc6NTguODMyMzIxMjUyICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRv L2ZpcHMvTWFrZWZpbGUJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MzIzMjEyNTIgKzAyMDAKK0BAIC0w LDAgKzEsMzQxIEBACisrIworKyMgT3BlblNTTC9jcnlwdG8vZmlwcy9NYWtlZmlsZQorKyMKKysK KytESVI9CWZpcHMKKytUT1A9CS4uLy4uCisrQ0M9CWNjCisrSU5DTFVERVM9CisrQ0ZMQUc9LWcK KytNQUtFRklMRT0JTWFrZWZpbGUKKytBUj0JCWFyIHIKKysKKytDRkxBR1M9ICQoSU5DTFVERVMp ICQoQ0ZMQUcpCisrCisrR0VORVJBTD1NYWtlZmlsZQorK1RFU1Q9Zmlwc190ZXN0X3N1aXRlLmMg Zmlwc19yYW5kdGVzdC5jCisrQVBQUz0KKysKKytQUk9HUkFNPSBmaXBzX3N0YW5kYWxvbmVfaG1h YworK0VYRT0gJChQUk9HUkFNKSQoRVhFX0VYVCkKKysKKytMSUI9JChUT1ApL2xpYmNyeXB0by5h CisrTElCU1JDPWZpcHNfYWVzX3NlbGZ0ZXN0LmMgZmlwc19kZXNfc2VsZnRlc3QuYyBmaXBzX2ht YWNfc2VsZnRlc3QuYyBmaXBzX3JhbmRfc2VsZnRlc3QuYyBcCisrICAgIGZpcHNfcnNhX3NlbGZ0 ZXN0LmMgZmlwc19zaGFfc2VsZnRlc3QuYyBmaXBzLmMgZmlwc19kc2Ffc2VsZnRlc3QuYyAgZmlw c19yYW5kLmMgXAorKyAgICBmaXBzX3JzYV94OTMxZy5jIGZpcHNfcG9zdC5jIGZpcHNfZHJiZ19j dHIuYyBmaXBzX2RyYmdfaGFzaC5jIGZpcHNfZHJiZ19obWFjLmMgXAorKyAgICBmaXBzX2RyYmdf bGliLmMgZmlwc19kcmJnX3JhbmQuYyBmaXBzX2RyYmdfc2VsZnRlc3QuYyBmaXBzX3JhbmRfbGli LmMgXAorKyAgICBmaXBzX2NtYWNfc2VsZnRlc3QuYyBmaXBzX2VuYy5jIGZpcHNfbWQuYworKwor K0xJQk9CSj1maXBzX2Flc19zZWxmdGVzdC5vIGZpcHNfZGVzX3NlbGZ0ZXN0Lm8gZmlwc19obWFj X3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX3NlbGZ0ZXN0Lm8gXAorKyAgICBmaXBzX3JzYV9zZWxmdGVz dC5vIGZpcHNfc2hhX3NlbGZ0ZXN0Lm8gZmlwcy5vIGZpcHNfZHNhX3NlbGZ0ZXN0Lm8gIGZpcHNf cmFuZC5vIFwKKysgICAgZmlwc19yc2FfeDkzMWcubyBmaXBzX3Bvc3QubyBmaXBzX2RyYmdfY3Ry Lm8gZmlwc19kcmJnX2hhc2gubyBmaXBzX2RyYmdfaG1hYy5vIFwKKysgICAgZmlwc19kcmJnX2xp Yi5vIGZpcHNfZHJiZ19yYW5kLm8gZmlwc19kcmJnX3NlbGZ0ZXN0Lm8gZmlwc19yYW5kX2xpYi5v IFwKKysgICAgZmlwc19jbWFjX3NlbGZ0ZXN0Lm8gZmlwc19lbmMubyBmaXBzX21kLm8KKysKKytM SUJDUllQVE89LUwuLiAtbGNyeXB0bworKworK1NSQz0gJChMSUJTUkMpIGZpcHNfc3RhbmRhbG9u ZV9obWFjLmMKKysKKytFWEhFQURFUj0gZmlwcy5oIGZpcHNfcmFuZC5oCisrSEVBREVSPQkkKEVY SEVBREVSKQorKworK0FMTD0gICAgJChHRU5FUkFMKSAkKFNSQykgJChIRUFERVIpCisrCisrdG9w OgorKwkoY2QgLi4vLi47ICQoTUFLRSkgRElSUz1jcnlwdG8gU0RJUlM9JChESVIpIHN1Yl9hbGwp CisrCisrYWxsOglsaWIgZXhlCisrCisrbGliOgkkKExJQk9CSikKKysJJChBUikgJChMSUIpICQo TElCT0JKKQorKwkkKFJBTkxJQikgJChMSUIpIHx8IGVjaG8gTmV2ZXIgbWluZC4KKysJQHRvdWNo IGxpYgorKworK2V4ZToJJChFWEUpCisrCisrZmlsZXM6CisrCSQoUEVSTCkgJChUT1ApL3V0aWwv ZmlsZXMucGwgTWFrZWZpbGUgPj4gJChUT1ApL01JTkZPCisrCisrbGlua3M6CisrCUAkKFBFUkwp ICQoVE9QKS91dGlsL21rbGluay5wbCAuLi8uLi9pbmNsdWRlL29wZW5zc2wgJChFWEhFQURFUikK KysJQCQoUEVSTCkgJChUT1ApL3V0aWwvbWtsaW5rLnBsIC4uLy4uL3Rlc3QgJChURVNUKQorKwlA JChQRVJMKSAkKFRPUCkvdXRpbC9ta2xpbmsucGwgLi4vLi4vYXBwcyAkKEFQUFMpCisrCisraW5z dGFsbDoKKysJQFsgLW4gIiQoSU5TVEFMTFRPUCkiIF0gIyBzaG91bGQgYmUgc2V0IGJ5IHRvcCBN YWtlZmlsZS4uLgorKwlAaGVhZGVybGlzdD0iJChFWEhFQURFUikiOyBmb3IgaSBpbiAkJGhlYWRl cmxpc3QgOyBcCisrCWRvICBcCisrCShjcCAkJGkgJChJTlNUQUxMX1BSRUZJWCkkKElOU1RBTExU T1ApL2luY2x1ZGUvb3BlbnNzbC8kJGk7IFwKKysJY2htb2QgNjQ0ICQoSU5TVEFMTF9QUkVGSVgp JChJTlNUQUxMVE9QKS9pbmNsdWRlL29wZW5zc2wvJCRpICk7IFwKKysJZG9uZTsKKysKKyt0YWdz OgorKwljdGFncyAkKFNSQykKKysKKyt0ZXN0czoKKysKKytsaW50OgorKwlsaW50IC1ETElOVCAk KElOQ0xVREVTKSAkKFNSQyk+Zmx1ZmYKKysKKytkZXBlbmQ6CisrCUBbIC1uICIkKE1BS0VERVBF TkQpIiBdICMgc2hvdWxkIGJlIHNldCBieSB1cHBlciBNYWtlZmlsZS4uLgorKwkkKE1BS0VERVBF TkQpIC0tICQoQ0ZMQUcpICQoSU5DTFVERVMpICQoREVQRkxBRykgLS0gJChQUk9HUykgJChMSUJT UkMpCisrCisrZGNsZWFuOgorKwkkKFBFUkwpIC1wZSAnaWYgKC9eIyBETyBOT1QgREVMRVRFIFRI SVMgTElORS8pIHtwcmludDsgZXhpdCgwKTt9JyAkKE1BS0VGSUxFKSA+TWFrZWZpbGUubmV3Cisr CW12IC1mIE1ha2VmaWxlLm5ldyAkKE1BS0VGSUxFKQorKworK2NsZWFuOgorKwlybSAtZiAqLm8g Ki5vYmogbGliIHRhZ3MgY29yZSAucHVyZSAubmZzKiAqLm9sZCAqLmJhayBmbHVmZgorKworKyQo RVhFKTogJChQUk9HUkFNKS5vCisrCUZJUFNfU0hBX0FTTT0iIjsgZm9yIGkgaW4gJChTSEExX0FT TV9PQkopIHNoYTI1Ni5vOyBkbyBGSVBTX1NIQV9BU009IiQkRklQU19TSEFfQVNNIC4uL3NoYS8k JGkiIDsgZG9uZTsgXAorKwlmb3IgaSBpbiAkKENQVUlEX09CSik7IGRvIEZJUFNfU0hBX0FTTT0i JCRGSVBTX1NIQV9BU00gLi4vJCRpIiA7IGRvbmU7IFwKKysJJChDQykgLW8gJEAgJChDRkxBR1Mp ICQoUFJPR1JBTSkubyAkJEZJUFNfU0hBX0FTTQorKworKyMgRE8gTk9UIERFTEVURSBUSElTIExJ TkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KKysKKytmaXBzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwcy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5o CisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvZXJyLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwcy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw c19yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2ZpcHMubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2xoYXNoLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2Zp cHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbGNvbmYuaAorK2ZpcHMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2 LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9yYW5kLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JzYS5oCisrZmlwcy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0 YWNrLmgKKytmaXBzLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHMuYyBm aXBzX2xvY2wuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19hZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisr Zmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vYmpfbWFjLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb3BlbnNzbHYuaAorK2ZpcHNfYWVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3NhZmVzdGFjay5oCisrZmlwc19hZXNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKKytmaXBzX2Flc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3lt aGFja3MuaCBmaXBzX2Flc19zZWxmdGVzdC5jCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBz X2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX2Rl c19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZXJyLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9saGFzaC5oCisrZmlwc19kZXNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kZXNfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2Rlc19zZWxmdGVzdC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZGVzX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZGVzX3NlbGZ0ZXN0LmMKKytmaXBzX2RyYmdf Y3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YXNuMS5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX2Ry YmdfY3RyLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv aG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfY3RyLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2RyYmdfY3RyLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJnX2N0ci5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19jdHIubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaAorK2ZpcHNf ZHJiZ19jdHIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJn X2N0ci5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8uLi9pbmNsdWRlL29wZW5z c2wvc3ltaGFja3MuaAorK2ZpcHNfZHJiZ19jdHIubzogZmlwc19kcmJnX2N0ci5jIGZpcHNfcmFu ZF9sY2wuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNf ZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9ldnAuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9m aXBzLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5k LmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNs dWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX2hhc2gubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfaGFzaC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfaGFz aC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfaGFzaC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJiZ19oYXNoLm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19oYXNoLmMKKytmaXBzX2RyYmdf aGFzaC5vOiBmaXBzX3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfZHJiZ19o bWFjLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv Y3J5cHRvLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIu aCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19kcmJnX2ht YWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfZHJiZ19obWFjLm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJnX2htYWMubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX2RyYmdfaG1hYy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcmFuZC5o CisrZmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisr Zmlwc19kcmJnX2htYWMubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgKKytmaXBzX2Ry YmdfaG1hYy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaCBmaXBzX2RyYmdfaG1h Yy5jCisrZmlwc19kcmJnX2htYWMubzogZmlwc19yYW5kX2xjbC5oCisrZmlwc19kcmJnX2xpYi5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEu aAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlwc19kcmJnX2xp Yi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBzX2RyYmdfbGliLm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9saGFzaC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmpfbWFjLmgKKytm aXBzX2RyYmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2Ry YmdfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJn X2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbHYuaAorK2ZpcHNfZHJiZ19saWIu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmggLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3JhbmQuaAorK2ZpcHNfZHJiZ19saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFj ay5oCisrZmlwc19kcmJnX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc3RhY2suaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3ltaGFja3MuaAorK2ZpcHNfZHJiZ19saWIubzogZmlwc19kcmJn X2xpYi5jIGZpcHNfbG9jbC5oIGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisr Zmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfZHJiZ19yYW5k Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlw cy5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5o CisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9p bmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vYmpfbWFjLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29w ZW5zc2xjb25mLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Bl bnNzbHYuaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5 cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX2RyYmdfcmFuZC5vOiAuLi8uLi9p bmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfZHJiZ19yYW5kLm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19yYW5kLmMKKytmaXBzX2RyYmdfcmFuZC5vOiBm aXBzX3JhbmRfbGNsLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Flcy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmgKKytmaXBzX2RyYmdfc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86 IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvZV9vczIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgK KytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9obWFjLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29ial9tYWMuaAorK2ZpcHNfZHJiZ19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvb2JqZWN0cy5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vcGVuc3Nsdi5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9vc3NsX3R5cC5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9yYW5kLmgKKytmaXBzX2RyYmdfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3NhZmVzdGFjay5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9zdGFjay5oCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9zeW1oYWNrcy5oIGZpcHNfZHJiZ19zZWxmdGVzdC5jCisrZmlwc19kcmJnX3NlbGZ0ZXN0Lm86 IGZpcHNfZHJiZ19zZWxmdGVzdC5oIGZpcHNfbG9jbC5oIGZpcHNfcmFuZF9sY2wuaAorK2ZpcHNf ZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2Jpby5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2JuLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19kc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9l X29zMi5oCisrZmlwc19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5o IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9ldnAuaAorK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytm aXBzX2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlw c19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNf ZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlw c19kc2Ffc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBz X2RzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNf ZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNf ZHNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19kc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19kc2Ffc2Vs ZnRlc3QuYworK2ZpcHNfZHNhX3NlbGZ0ZXN0Lm86IGZpcHNfbG9jbC5oCisrZmlwc19obWFjX3Nl bGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oCisrZmlwc19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9j cnlwdG8uaAorK2ZpcHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZV9v czIuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXJyLmgKKytmaXBzX2htYWNfc2VsZnRlc3Qubzog Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2V2cC5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9maXBzLmgK KytmaXBzX2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaAorK2Zp cHNfaG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAorK2ZpcHNf aG1hY19zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19o bWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX2ht YWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBz X2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBz X2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBz X2htYWNfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oCisrZmlw c19obWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19o bWFjX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfaG1h Y19zZWxmdGVzdC5jCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hZXMuaCAu Li8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUv b3BlbnNzbC9iaW8uaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmgKKytmaXBzX3Bvc3Qu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2RzYS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29z Mi5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Zp cHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX3Bvc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhhc2guaAor K2ZpcHNfcG9zdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKKytmaXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5z c2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX3Bvc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKKytm aXBzX3Bvc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3NhZmVzdGFjay5oIC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19wb3N0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9z eW1oYWNrcy5oIGZpcHNfbG9jbC5oIGZpcHNfcG9zdC5jCisrZmlwc19yYW5kLm86IC4uLy4uL2Vf b3MuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYWVzLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2FzbjEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3Jh bmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oIC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9lX29zMi5oCisrZmlwc19yYW5kLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8u Li9pbmNsdWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2htYWMuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvbGhh c2guaAorK2ZpcHNfcmFuZC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9vYmplY3RzLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9v cGVuc3NsL29wZW5zc2xjb25mLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29zc2xfdHlwLmgKKytmaXBzX3JhbmQu bzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3JhbmQuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvc2Fm ZXN0YWNrLmgKKytmaXBzX3JhbmQubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmggLi4v Li4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytmaXBzX3JhbmQubzogZmlwc19sb2NsLmgg Zmlwc19yYW5kLmMKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2Vfb3MuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvYWVzLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9h c24xLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Jpby5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvY3J5cHRvLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmgK KytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaCAuLi8uLi9pbmNs dWRlL29wZW5zc2wvZXZwLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9maXBzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHNfcmFuZC5oCisrZmlwc19yYW5kX2xp Yi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvaG1hYy5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9s aGFzaC5oCisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5o CisrZmlwc19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqZWN0cy5oCisrZmlw c19yYW5kX2xpYi5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3BlbnNzbGNvbmYuaAorK2ZpcHNf cmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX3JhbmRf bGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vc3NsX3R5cC5oIC4uLy4uL2luY2x1ZGUvb3Bl bnNzbC9yYW5kLmgKKytmaXBzX3JhbmRfbGliLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZl c3RhY2suaAorK2ZpcHNfcmFuZF9saWIubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N0YWNrLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmgKKytmaXBzX3JhbmRfbGliLm86IGZpcHNf cmFuZF9saWIuYworK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv YWVzLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2FzbjEuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5v OiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYmlvLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4v Li4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2Zp cHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZXZwLmggLi4vLi4vaW5j bHVkZS9vcGVuc3NsL2ZpcHMuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRl L29wZW5zc2wvZmlwc19yYW5kLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVk ZS9vcGVuc3NsL2htYWMuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29w ZW5zc2wvbGhhc2guaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5z c2wvb2JqX21hYy5oCisrZmlwc19yYW5kX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vYmplY3RzLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2xjb25mLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29wZW5zc2x2LmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL29zc2xfdHlwLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVu c3NsL3JhbmQuaAorK2ZpcHNfcmFuZF9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c2FmZXN0YWNrLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L3N0YWNrLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL3N5 bWhhY2tzLmggZmlwc19sb2NsLmgKKytmaXBzX3JhbmRfc2VsZnRlc3QubzogZmlwc19yYW5kX3Nl bGZ0ZXN0LmMKKytmaXBzX3JzYV9zZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNu MS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9iaW8uaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9ibi5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8uaAor K2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4uLy4u L2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19yc2Ff c2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3JzYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19yc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19yc2Ffc2VsZnRl c3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX3JzYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0 Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9yc2EuaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfcnNhX3NlbGZ0ZXN0Lm86IC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9zdGFjay5oCisrZmlwc19yc2Ffc2VsZnRlc3QubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL3N5bWhhY2tzLmggZmlwc19yc2Ffc2VsZnRlc3QuYworK2ZpcHNfcnNh X3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9hc24xLmggLi4vLi4vaW5jbHVkZS9vcGVu c3NsL2Jpby5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2JuLmgg Li4vLi4vaW5jbHVkZS9vcGVuc3NsL2NyeXB0by5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4v aW5jbHVkZS9vcGVuc3NsL2Vfb3MyLmggLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2Vyci5oCisrZmlw c19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2ZpcHMuaCAuLi8uLi9pbmNsdWRl L29wZW5zc2wvbGhhc2guaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1ZGUvb3BlbnNz bC9vcGVuc3NsY29uZi5oCisrZmlwc19yc2FfeDkzMWcubzogLi4vLi4vaW5jbHVkZS9vcGVuc3Ns L29wZW5zc2x2LmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3Nz bF90eXAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvcnNhLmgKKytmaXBzX3JzYV94OTMxZy5vOiAu Li8uLi9pbmNsdWRlL29wZW5zc2wvc2FmZXN0YWNrLmgKKytmaXBzX3JzYV94OTMxZy5vOiAuLi8u Li9pbmNsdWRlL29wZW5zc2wvc3RhY2suaAorK2ZpcHNfcnNhX3g5MzFnLm86IC4uLy4uL2luY2x1 ZGUvb3BlbnNzbC9zeW1oYWNrcy5oIGZpcHNfcnNhX3g5MzFnLmMKKytmaXBzX3NoYV9zZWxmdGVz dC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvYXNuMS5oIC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9i aW8uaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9jcnlwdG8u aAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9lX29zMi5oIC4u Ly4uL2luY2x1ZGUvb3BlbnNzbC9lcnIuaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2lu Y2x1ZGUvb3BlbnNzbC9ldnAuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wvZmlwcy5oCisrZmlwc19z aGFfc2VsZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL2xoYXNoLmgKKytmaXBzX3NoYV9z ZWxmdGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb2JqX21hYy5oCisrZmlwc19zaGFfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29iamVjdHMuaAorK2ZpcHNfc2hhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9vcGVuc3NsY29uZi5oCisrZmlwc19zaGFfc2Vs ZnRlc3QubzogLi4vLi4vaW5jbHVkZS9vcGVuc3NsL29wZW5zc2x2LmgKKytmaXBzX3NoYV9zZWxm dGVzdC5vOiAuLi8uLi9pbmNsdWRlL29wZW5zc2wvb3NzbF90eXAuaAorK2ZpcHNfc2hhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zYWZlc3RhY2suaAorK2ZpcHNfc2hhX3NlbGZ0 ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zaGEuaCAuLi8uLi9pbmNsdWRlL29wZW5zc2wv c3RhY2suaAorK2ZpcHNfc2hhX3NlbGZ0ZXN0Lm86IC4uLy4uL2luY2x1ZGUvb3BlbnNzbC9zeW1o YWNrcy5oIGZpcHNfc2hhX3NlbGZ0ZXN0LmMKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0 by9obWFjL2htYWMuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9obWFjL2htYWMuYworLS0t IG9wZW5zc2wtMS4wLjJoL2NyeXB0by9obWFjL2htYWMuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6 NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL2htYWMvaG1hYy5j CTIwMTYtMDUtMDMgMTY6NTc6NTguODMyMzIxMjUyICswMjAwCitAQCAtODksMTIgKzg5LDYgQEAg aW50IEhNQUNfSW5pdF9leChITUFDX0NUWCAqY3R4LCBjb25zdCB2bworICAgICAgICAgICAgIEVW UGVycihFVlBfRl9ITUFDX0lOSVRfRVgsIEVWUF9SX0RJU0FCTEVEX0ZPUl9GSVBTKTsKKyAgICAg ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgIH0KKy0gICAgICAgIC8qCistICAgICAgICAgKiBP dGhlciBhbGdvcml0aG0gYmxvY2tpbmcgd2lsbCBiZSBkb25lIGluIEZJUFNfY21hY19pbml0LCB2 aWEKKy0gICAgICAgICAqIEZJUFNfaG1hY19pbml0X2V4KCkuCistICAgICAgICAgKi8KKy0gICAg ICAgIGlmICghaW1wbCAmJiAhY3R4LT5pX2N0eC5lbmdpbmUpCistICAgICAgICAgICAgcmV0dXJu IEZJUFNfaG1hY19pbml0X2V4KGN0eCwga2V5LCBsZW4sIG1kLCBOVUxMKTsKKyAgICAgfQorICNl bmRpZgorICAgICAvKiBJZiB3ZSBhcmUgY2hhbmdpbmcgTUQgdGhlbiB3ZSBtdXN0IGhhdmUgYSBr ZXkgKi8KK0BAIC0xMTEsNiArMTA1LDEzIEBAIGludCBITUFDX0luaXRfZXgoSE1BQ19DVFggKmN0 eCwgY29uc3Qgdm8KKyAgICAgfQorIAorICAgICBpZiAoa2V5ICE9IE5VTEwpIHsKKysjaWZkZWYg T1BFTlNTTF9GSVBTCisrICAgICAgICBpZiAoRklQU19tb2RlKCkgJiYgIShtZC0+ZmxhZ3MgJiBF VlBfTURfRkxBR19GSVBTKQorKyAgICAgICAgICAgICYmICghKGN0eC0+bWRfY3R4LmZsYWdzICYg RVZQX01EX0NUWF9GTEFHX05PTl9GSVBTX0FMTE9XKQorKyAgICAgICAgICAgICAgICB8fCAhKGN0 eC0+aV9jdHguZmxhZ3MgJiBFVlBfTURfQ1RYX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrICAgICAg ICAgICAgICAgIHx8ICEoY3R4LT5vX2N0eC5mbGFncyAmIEVWUF9NRF9DVFhfRkxBR19OT05fRklQ U19BTExPVykpKQorKyAgICAgICAgICAgIGdvdG8gZXJyOworKyNlbmRpZgorICAgICAgICAgcmVz ZXQgPSAxOworICAgICAgICAgaiA9IEVWUF9NRF9ibG9ja19zaXplKG1kKTsKKyAgICAgICAgIE9Q RU5TU0xfYXNzZXJ0KGogPD0gKGludClzaXplb2YoY3R4LT5rZXkpKTsKK0BAIC0xNjQsMTAgKzE2 NSw2IEBAIGludCBITUFDX0luaXQoSE1BQ19DVFggKmN0eCwgY29uc3Qgdm9pZAorIAorIGludCBI TUFDX1VwZGF0ZShITUFDX0NUWCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBzaXpl X3QgbGVuKQorIHsKKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGlmIChGSVBTX21vZGUoKSAm JiAhY3R4LT5pX2N0eC5lbmdpbmUpCistICAgICAgICByZXR1cm4gRklQU19obWFjX3VwZGF0ZShj dHgsIGRhdGEsIGxlbik7CistI2VuZGlmCisgICAgIGlmICghY3R4LT5tZCkKKyAgICAgICAgIHJl dHVybiAwOworIAorQEAgLTE3OCwxMCArMTc1LDYgQEAgaW50IEhNQUNfRmluYWwoSE1BQ19DVFgg KmN0eCwgdW5zaWduZWQgYworIHsKKyAgICAgdW5zaWduZWQgaW50IGk7CisgICAgIHVuc2lnbmVk IGNoYXIgYnVmW0VWUF9NQVhfTURfU0laRV07CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBp ZiAoRklQU19tb2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKQorLSAgICAgICAgcmV0dXJuIEZJ UFNfaG1hY19maW5hbChjdHgsIG1kLCBsZW4pOworLSNlbmRpZgorIAorICAgICBpZiAoIWN0eC0+ bWQpCisgICAgICAgICBnb3RvIGVycjsKK0BAIC0yMjUsMTIgKzIxOCw2IEBAIGludCBITUFDX0NU WF9jb3B5KEhNQUNfQ1RYICpkY3R4LCBITUFDX0MKKyAKKyB2b2lkIEhNQUNfQ1RYX2NsZWFudXAo SE1BQ19DVFggKmN0eCkKKyB7CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBpZiAoRklQU19t b2RlKCkgJiYgIWN0eC0+aV9jdHguZW5naW5lKSB7CistICAgICAgICBGSVBTX2htYWNfY3R4X2Ns ZWFudXAoY3R4KTsKKy0gICAgICAgIHJldHVybjsKKy0gICAgfQorLSNlbmRpZgorICAgICBFVlBf TURfQ1RYX2NsZWFudXAoJmN0eC0+aV9jdHgpOworICAgICBFVlBfTURfQ1RYX2NsZWFudXAoJmN0 eC0+b19jdHgpOworICAgICBFVlBfTURfQ1RYX2NsZWFudXAoJmN0eC0+bWRfY3R4KTsKK2RpZmYg LXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9tZGMyL21kYzJkZ3N0LmMuZmlwcyBvcGVuc3NsLTEu MC4yaC9jcnlwdG8vbWRjMi9tZGMyZGdzdC5jCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL21k YzIvbWRjMmRnc3QuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAwMDAwICswMjAwCisr Kysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL21kYzIvbWRjMmRnc3QuYwkyMDE2LTA1LTAzIDE2OjU3 OjU4LjgzMjMyMTI1MiArMDIwMAorQEAgLTc2LDcgKzc2LDcgQEAKKyAgICAgICAgICAgICAgICAg ICAgICAgICAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZmKSkKKyAKKyBz dGF0aWMgdm9pZCBtZGMyX2JvZHkoTURDMl9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmlu LCBzaXplX3QgbGVuKTsKKy1maXBzX21kX2luaXQoTURDMikKKytub25maXBzX21kX2luaXQoTURD MikKKyB7CisgICAgIGMtPm51bSA9IDA7CisgICAgIGMtPnBhZF90eXBlID0gMTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjJoL2NyeXB0by9tZDIvbWQyX2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJo L2NyeXB0by9tZDIvbWQyX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9tZDIvbWQy X2Rnc3QuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3Bl bnNzbC0xLjAuMmgvY3J5cHRvL21kMi9tZDJfZGdzdC5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODMy MzIxMjUyICswMjAwCitAQCAtNjIsNiArNjIsMTEgQEAKKyAjaW5jbHVkZSA8b3BlbnNzbC9tZDIu aD4KKyAjaW5jbHVkZSA8b3BlbnNzbC9vcGVuc3Nsdi5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Ny eXB0by5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlwcy5o PgorKyNlbmRpZgorKworKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorIAorIGNvbnN0IGNoYXIg TUQyX3ZlcnNpb25bXSA9ICJNRDIiIE9QRU5TU0xfVkVSU0lPTl9QVEVYVDsKKyAKK0BAIC0xMTks NyArMTI0LDcgQEAgY29uc3QgY2hhciAqTUQyX29wdGlvbnModm9pZCkKKyAgICAgICAgIHJldHVy biAoIm1kMihpbnQpIik7CisgfQorIAorLWZpcHNfbWRfaW5pdChNRDIpCisrbm9uZmlwc19tZF9p bml0KE1EMikKKyB7CisgICAgIGMtPm51bSA9IDA7CisgICAgIG1lbXNldChjLT5zdGF0ZSwgMCwg c2l6ZW9mIGMtPnN0YXRlKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9tZDQvbWQ0 X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYworLS0tIG9w ZW5zc2wtMS4wLjJoL2NyeXB0by9tZDQvbWQ0X2Rnc3QuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6 NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL21kNC9tZDRfZGdz dC5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODMyMzIxMjUyICswMjAwCitAQCAtNzIsNyArNzIsNyBA QCBjb25zdCBjaGFyIE1ENF92ZXJzaW9uW10gPSAiTUQ0IiBPUEVOU1NMCisgI2RlZmluZSBJTklU X0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAorICNkZWZpbmUgSU5JVF9EQVRBX0Qg KHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1maXBzX21kX2luaXQoTUQ0KQorK25vbmZp cHNfbWRfaW5pdChNRDQpCisgeworICAgICBtZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisgICAg IGMtPkEgPSBJTklUX0RBVEFfQTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9tZDUv bWQ1X2Rnc3QuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYworLS0t IG9wZW5zc2wtMS4wLjJoL2NyeXB0by9tZDUvbWQ1X2Rnc3QuYy5maXBzCTIwMTYtMDUtMDMgMTU6 NDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL21kNS9tZDVf ZGdzdC5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODMzMzIxMjc1ICswMjAwCitAQCAtNzIsNyArNzIs NyBAQCBjb25zdCBjaGFyIE1ENV92ZXJzaW9uW10gPSAiTUQ1IiBPUEVOU1NMCisgI2RlZmluZSBJ TklUX0RBVEFfQyAodW5zaWduZWQgbG9uZykweDk4YmFkY2ZlTAorICNkZWZpbmUgSU5JVF9EQVRB X0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKyAKKy1maXBzX21kX2luaXQoTUQ1KQorK25v bmZpcHNfbWRfaW5pdChNRDUpCisgeworICAgICBtZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7Cisg ICAgIGMtPkEgPSBJTklUX0RBVEFfQTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9v X2ZpcHMuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9vX2ZpcHMuYworLS0tIG9wZW5zc2wt MS4wLjJoL2NyeXB0by9vX2ZpcHMuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAwMDAw ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL29fZmlwcy5jCTIwMTYtMDUtMDMgMTY6 NTc6NTguODMzMzIxMjc1ICswMjAwCitAQCAtODAsNiArODAsOCBAQCBpbnQgRklQU19tb2RlX3Nl dChpbnQgcikKKyAjIGlmbmRlZiBGSVBTX0FVVEhfVVNFUl9QQVNTCisgIyAgZGVmaW5lIEZJUFNf QVVUSF9VU0VSX1BBU1MgICAgICJEZWZhdWx0IEZJUFMgQ3J5cHRvIFVzZXIgUGFzc3dvcmQiCisg IyBlbmRpZgorKyAgICBpZiAociAmJiBGSVBTX21vZHVsZV9tb2RlKCkpIC8qIGNhbiBiZSBpbXBs aWNpdGx5IGluaXRpYWxpemVkIGJ5IE9QRU5TU0xfaW5pdCgpICovCisrICAgICAgICByZXR1cm4g MTsKKyAgICAgaWYgKCFGSVBTX21vZHVsZV9tb2RlX3NldChyLCBGSVBTX0FVVEhfVVNFUl9QQVNT KSkKKyAgICAgICAgIHJldHVybiAwOworICAgICBpZiAocikKK2RpZmYgLXVwIG9wZW5zc2wtMS4w LjJoL2NyeXB0by9vX2luaXQuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9vX2luaXQuYwor LS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9vX2luaXQuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6 NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL29faW5pdC5jCTIw MTYtMDUtMDMgMTY6NTc6NTguODMzMzIxMjc1ICswMjAwCitAQCAtNTYsOCArNTYsMzcgQEAKKyAj aW5jbHVkZSA8ZV9vcy5oPgorICNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorICNpZmRlZiBPUEVO U1NMX0ZJUFMKKysjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorKyMgaW5jbHVkZSA8c3lzL3N0YXQu aD4KKysjIGluY2x1ZGUgPGZjbnRsLmg+CisrIyBpbmNsdWRlIDx1bmlzdGQuaD4KKysjIGluY2x1 ZGUgPGVycm5vLmg+CisrIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyAjIGluY2x1ZGUgPG9wZW5zc2wv Zmlwcy5oPgorICMgaW5jbHVkZSA8b3BlbnNzbC9yYW5kLmg+CisrCisrIyBkZWZpbmUgRklQU19N T0RFX1NXSVRDSF9GSUxFICIvcHJvYy9zeXMvY3J5cHRvL2ZpcHNfZW5hYmxlZCIKKysKKytzdGF0 aWMgdm9pZCBpbml0X2ZpcHNfbW9kZSh2b2lkKQorK3sKKysgICAgY2hhciBidWZbMl0gPSAiMCI7 CisrICAgIGludCBmZDsKKysKKysgICAgaWYgKGdldGVudigiT1BFTlNTTF9GT1JDRV9GSVBTX01P REUiKSAhPSBOVUxMKSB7CisrICAgICAgICBidWZbMF0gPSAnMSc7CisrICAgIH0gZWxzZSBpZiAo KGZkID0gb3BlbihGSVBTX01PREVfU1dJVENIX0ZJTEUsIE9fUkRPTkxZKSkgPj0gMCkgeworKyAg ICAgICAgd2hpbGUgKHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDwgMCAmJiBlcnJubyA9PSBF SU5UUikgOworKyAgICAgICAgY2xvc2UoZmQpOworKyAgICB9CisrICAgIC8qIEZhaWx1cmUgcmVh ZGluZyB0aGUgZmlwcyBtb2RlIHN3aXRjaCBmaWxlIG1lYW5zIGp1c3Qgbm90CisrICAgICAqIHN3 aXRjaGluZyBpbnRvIEZJUFMgbW9kZS4gV2Ugd291bGQgYnJlYWsgdG9vIG1hbnkgdGhpbmdzCisr ICAgICAqIG90aGVyd2lzZS4uCisrICAgICAqLworKworKyAgICBpZiAoYnVmWzBdID09ICcxJykg eworKyAgICAgICAgRklQU19tb2RlX3NldCgxKTsKKysgICAgfQorK30KKyAjZW5kaWYKKyAKKyAv KgorQEAgLTY1LDE5ICs5NCwyNiBAQAorICAqIHNldHMgRklQUyBjYWxsYmFja3MKKyAgKi8KKyAK Ky12b2lkIE9QRU5TU0xfaW5pdCh2b2lkKQorK3ZvaWQgT1BFTlNTTF9pbml0X2xpYnJhcnkodm9p ZCkKKyB7CisgICAgIHN0YXRpYyBpbnQgZG9uZSA9IDA7CisgICAgIGlmIChkb25lKQorICAgICAg ICAgcmV0dXJuOworICAgICBkb25lID0gMTsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIEZJ UFNfc2V0X2xvY2tpbmdfY2FsbGJhY2tzKENSWVBUT19sb2NrLCBDUllQVE9fYWRkX2xvY2spOwor LSAgICBGSVBTX3NldF9lcnJvcl9jYWxsYmFja3MoRVJSX3B1dF9lcnJvciwgRVJSX2FkZF9lcnJv cl92ZGF0YSk7CistICAgIEZJUFNfc2V0X21hbGxvY19jYWxsYmFja3MoQ1JZUFRPX21hbGxvYywg Q1JZUFRPX2ZyZWUpOworICAgICBSQU5EX2luaXRfZmlwcygpOworKyAgICBpbml0X2ZpcHNfbW9k ZSgpOworKyAgICBpZiAoIUZJUFNfbW9kZSgpKSB7CisrICAgICAgICAvKiBDbGVhbiB1cCBwcmVt YXR1cmVseSBzZXQgZGVmYXVsdCByYW5kIG1ldGhvZCAqLworKyAgICAgICAgUkFORF9zZXRfcmFu ZF9tZXRob2QoTlVMTCk7CisrICAgIH0KKyAjZW5kaWYKKyAjaWYgMAorICAgICBmcHJpbnRmKHN0 ZGVyciwgIkNhbGxlZCBPUEVOU1NMX2luaXRcbiIpOworICNlbmRpZgorIH0KKysKKyt2b2lkIE9Q RU5TU0xfaW5pdCh2b2lkKQorK3sKKysgICAgT1BFTlNTTF9pbml0X2xpYnJhcnkoKTsKKyt9Citk aWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vb3BlbnNzbGNvbmYuaC5pbi5maXBzIG9wZW5z c2wtMS4wLjJoL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5 cHRvL29wZW5zc2xjb25mLmguaW4uZmlwcwkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAwMDAwMCAr MDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9vcGVuc3NsY29uZi5oLmluCTIwMTYtMDUt MDMgMTY6NTc6NTguODMzMzIxMjc1ICswMjAwCitAQCAtMSw1ICsxLDIwIEBACisgLyogY3J5cHRv L29wZW5zc2xjb25mLmguaW4gKi8KKyAKKysjaWZkZWYgT1BFTlNTTF9ET0lOR19NQUtFREVQRU5E CisrCisrLyogSW5jbHVkZSBhbnkgc3ltYm9scyBoZXJlIHRoYXQgaGF2ZSB0byBiZSBleHBsaWNp dGx5IHNldCB0byBlbmFibGUgYSBmZWF0dXJlCisrICogdGhhdCBzaG91bGQgYmUgdmlzaWJsZSB0 byBtYWtlZGVwZW5kLgorKyAqCisrICogW091ciAibWFrZSBkZXBlbmQiIGRvZXNuJ3QgYWN0dWFs bHkgbG9vayBhdCB0aGlzLCB3ZSB1c2UgYWN0dWFsIGJ1aWxkIHNldHRpbmdzCisrICogaW5zdGVh ZDsgd2Ugd2FudCB0byBtYWtlIGl0IGVhc3kgdG8gcmVtb3ZlIHN1YmRpcmVjdG9yaWVzIHdpdGgg ZGlzYWJsZWQgYWxnb3JpdGhtcy5dCisrICovCisrCisrI2lmbmRlZiBPUEVOU1NMX0ZJUFMKKysj ZGVmaW5lIE9QRU5TU0xfRklQUworKyNlbmRpZgorKworKyNlbmRpZgorKworIC8qIEdlbmVyYXRl IDgwMzg2IGNvZGU/ICovCisgI3VuZGVmIEkzODZfT05MWQorIAorZGlmZiAtdXAgb3BlbnNzbC0x LjAuMmgvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3Jh bmQvbWRfcmFuZC5jCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3JhbmQvbWRfcmFuZC5jLmZp cHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4y aC9jcnlwdG8vcmFuZC9tZF9yYW5kLmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MzMzMjEyNzUgKzAy MDAKK0BAIC0zOTEsNyArMzkxLDEwIEBAIGludCBzc2xlYXlfcmFuZF9ieXRlcyh1bnNpZ25lZCBj aGFyICpidWYKKyAgICAgQ1JZUFRPX3dfdW5sb2NrKENSWVBUT19MT0NLX1JBTkQyKTsKKyAgICAg Y3J5cHRvX2xvY2tfcmFuZCA9IDE7CisgCistICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKysgICAg LyogYWx3YXlzIHBvbGwgZm9yIGV4dGVybmFsIGVudHJvcHkgaW4gRklQUyBtb2RlLCBkcmJnIHBy b3ZpZGVzIHRoZSAKKysgICAgICogZXhwYW5zaW9uCisrICAgICAqLworKyAgICBpZiAoIWluaXRp YWxpemVkIHx8IEZJUFNfbW9kdWxlX21vZGUoKSkgeworICAgICAgICAgUkFORF9wb2xsKCk7Cisg ICAgICAgICBpbml0aWFsaXplZCA9IDE7CisgICAgIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJo L2NyeXB0by9yYW5kL3JhbmQuaC5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9yYW5kL3JhbmQu aAorLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9yYW5kL3JhbmQuaC5maXBzCTIwMTYtMDUtMDMg MTY6NTc6NTguNTAxMzEzNDM2ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3JhbmQv cmFuZC5oCTIwMTYtMDUtMDMgMTY6NTc6NTguODMzMzIxMjc1ICswMjAwCitAQCAtMTMzLDE2ICsx MzMsMzQgQEAgdm9pZCBFUlJfbG9hZF9SQU5EX3N0cmluZ3Modm9pZCk7CisgLyogRXJyb3IgY29k ZXMgZm9yIHRoZSBSQU5EIGZ1bmN0aW9ucy4gKi8KKyAKKyAvKiBGdW5jdGlvbiBjb2Rlcy4gKi8K KysjIGRlZmluZSBSQU5EX0ZfRU5HX1JBTkRfR0VUX1JBTkRfTUVUSE9EICAgICAgICAgICAgICAg ICAgMTA4CisrIyBkZWZpbmUgUkFORF9GX0ZJUFNfUkFORCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEwMworKyMgZGVmaW5lIFJBTkRfRl9GSVBTX1JBTkRfQllURVMgICAgICAgICAg ICAgICAgICAgICAgICAgICAxMDIKKysjIGRlZmluZSBSQU5EX0ZfRklQU19SQU5EX1NFVF9EVCAg ICAgICAgICAgICAgICAgICAgICAgICAgMTA2CisrIyBkZWZpbmUgUkFORF9GX0ZJUFNfWDkzMV9T RVRfRFQgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNgorKyMgZGVmaW5lIFJBTkRfRl9GSVBT X1NFVF9EVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDQKKysjIGRlZmluZSBSQU5E X0ZfRklQU19TRVRfUFJOR19TRUVEICAgICAgICAgICAgICAgICAgICAgICAgMTA3CisrIyBkZWZp bmUgUkFORF9GX0ZJUFNfU0VUX1RFU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgIDEwNQor ICMgZGVmaW5lIFJBTkRfRl9SQU5EX0dFVF9SQU5EX01FVEhPRCAgICAgICAgICAgICAgICAgICAg ICAxMDEKKy0jIGRlZmluZSBSQU5EX0ZfUkFORF9JTklUX0ZJUFMgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMTAyCisrIyBkZWZpbmUgUkFORF9GX1JBTkRfSU5JVF9GSVBTICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEwOQorICMgZGVmaW5lIFJBTkRfRl9TU0xFQVlfUkFORF9CWVRFUyAg ICAgICAgICAgICAgICAgICAgICAgICAxMDAKKyAKKyAvKiBSZWFzb24gY29kZXMuICovCistIyBk ZWZpbmUgUkFORF9SX0RVQUxfRUNfRFJCR19ESVNBQkxFRCAgICAgICAgICAgICAgICAgICAgIDEw NAorLSMgZGVmaW5lIFJBTkRfUl9FUlJPUl9JTklUSUFMSVNJTkdfRFJCRyAgICAgICAgICAgICAg ICAgICAxMDIKKy0jIGRlZmluZSBSQU5EX1JfRVJST1JfSU5TVEFOVElBVElOR19EUkJHICAgICAg ICAgICAgICAgICAgMTAzCistIyBkZWZpbmUgUkFORF9SX05PX0ZJUFNfUkFORE9NX01FVEhPRF9T RVQgICAgICAgICAgICAgICAgIDEwMQorKyMgZGVmaW5lIFJBTkRfUl9EVUFMX0VDX0RSQkdfRElT QUJMRUQgICAgICAgICAgICAgICAgICAgICAxMTQKKysjIGRlZmluZSBSQU5EX1JfRVJST1JfSU5J VElBTElTSU5HX0RSQkcgICAgICAgICAgICAgICAgICAgMTEyCisrIyBkZWZpbmUgUkFORF9SX0VS Uk9SX0lOU1RBTlRJQVRJTkdfRFJCRyAgICAgICAgICAgICAgICAgIDExMworKyMgZGVmaW5lIFJB TkRfUl9OT05fRklQU19NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDUKKysjIGRl ZmluZSBSQU5EX1JfTk9UX0lOX1RFU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMTA2 CisrIyBkZWZpbmUgUkFORF9SX05PX0ZJUFNfUkFORE9NX01FVEhPRF9TRVQgICAgICAgICAgICAg ICAgIDExMQorKyMgZGVmaW5lIFJBTkRfUl9OT19LRVlfU0VUICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAxMDcKKysjIGRlZmluZSBSQU5EX1JfUFJOR19BU0tJTkdfRk9SX1RPT19NVUNI ICAgICAgICAgICAgICAgICAgMTAxCisrIyBkZWZpbmUgUkFORF9SX1BSTkdfRVJST1IgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDEwOAorKyMgZGVmaW5lIFJBTkRfUl9QUk5HX0tFWUVE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDkKKysjIGRlZmluZSBSQU5EX1JfUFJO R19OT1RfUkVLRVlFRCAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyCisrIyBkZWZpbmUgUkFO RF9SX1BSTkdfTk9UX1JFU0VFREVEICAgICAgICAgICAgICAgICAgICAgICAgIDEwMworICMgZGVm aW5lIFJBTkRfUl9QUk5HX05PVF9TRUVERUQgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAK KysjIGRlZmluZSBSQU5EX1JfUFJOR19TRUVEX01VU1RfTk9UX01BVENIX0tFWSAgICAgICAgICAg ICAgMTEwCisrIyBkZWZpbmUgUkFORF9SX1BSTkdfU1RVQ0sgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEwNAorIAorICNpZmRlZiAgX19jcGx1c3BsdXMKKyB9CitkaWZmIC11cCBvcGVu c3NsLTEuMC4yaC9jcnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9j cnlwdG8vcmlwZW1kL3JtZF9kZ3N0LmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vcmlwZW1k L3JtZF9kZ3N0LmMuZmlwcwkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAwMDAwMCArMDIwMAorKysr IG9wZW5zc2wtMS4wLjJoL2NyeXB0by9yaXBlbWQvcm1kX2Rnc3QuYwkyMDE2LTA1LTAzIDE2OjU3 OjU4LjgzMzMyMTI3NSArMDIwMAorQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCByaXBlbWQxNjBfYmxv Y2tfeDg2KFJJUEVNRDE2MF9DVFggKgorIHZvaWQgcmlwZW1kMTYwX2Jsb2NrKFJJUEVNRDE2MF9D VFggKmMsIHVuc2lnbmVkIGxvbmcgKnAsIHNpemVfdCBudW0pOworICNlbmRpZgorIAorLWZpcHNf bWRfaW5pdChSSVBFTUQxNjApCisrbm9uZmlwc19tZF9pbml0KFJJUEVNRDE2MCkKKyB7CisgICAg IG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKyAgICAgYy0+QSA9IFJJUEVNRDE2MF9BOworZGlm ZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3JzYS9yc2FfY3JwdC5jLmZpcHMgb3BlbnNzbC0x LjAuMmgvY3J5cHRvL3JzYS9yc2FfY3JwdC5jCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3Jz YS9yc2FfY3JwdC5jLmZpcHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysr KyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vcnNhL3JzYV9jcnB0LmMJMjAxNi0wNS0wMyAxNjo1Nzo1 OC44MzQzMjEyOTkgKzAyMDAKK0BAIC04OSw5ICs4OSw5IEBAIGludCBSU0FfcHJpdmF0ZV9lbmNy eXB0KGludCBmbGVuLCBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo YXIgKnRvLCBSU0EgKnJzYSwgaW50IHBhZGRpbmcpCisgeworICNpZmRlZiBPUEVOU1NMX0ZJUFMK Ky0gICAgaWYgKEZJUFNfbW9kZSgpICYmICEocnNhLT5tZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJ UFNfTUVUSE9EKQorLSAgICAgICAgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNf QUxMT1cpKSB7CistICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX1BSSVZBVEVfRU5DUllQVCwgUlNB X1JfTk9OX0ZJUFNfUlNBX01FVEhPRCk7CisrICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+ ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpIHsKKysgICAgICAgIFJTQWVycihSU0Ff Rl9SU0FfUFJJVkFURV9FTkNSWVBULAorKyAgICAgICAgICAgICAgIFJTQV9SX09QRVJBVElPTl9O T1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOworICAgICAgICAgcmV0dXJuIC0xOworICAgICB9Cisg I2VuZGlmCitAQCAtMTE1LDkgKzExNSw5IEBAIGludCBSU0FfcHVibGljX2RlY3J5cHQoaW50IGZs ZW4sIGNvbnN0IHUKKyAgICAgICAgICAgICAgICAgICAgICAgIFJTQSAqcnNhLCBpbnQgcGFkZGlu ZykKKyB7CisgI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBpZiAoRklQU19tb2RlKCkgJiYgIShy c2EtPm1ldGgtPmZsYWdzICYgUlNBX0ZMQUdfRklQU19NRVRIT0QpCistICAgICAgICAmJiAhKHJz YS0+ZmxhZ3MgJiBSU0FfRkxBR19OT05fRklQU19BTExPVykpIHsKKy0gICAgICAgIFJTQWVycihS U0FfRl9SU0FfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX05PTl9GSVBTX1JTQV9NRVRIT0QpOworKyAg ICBpZiAoRklQU19tb2RlKCkgJiYgIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpKSB7CisrICAgICAgICBSU0FlcnIoUlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBULAorKyAgICAg ICAgICAgICAgIFJTQV9SX09QRVJBVElPTl9OT1RfQUxMT1dFRF9JTl9GSVBTX01PREUpOworICAg ICAgICAgcmV0dXJuIC0xOworICAgICB9CisgI2VuZGlmCitkaWZmIC11cCBvcGVuc3NsLTEuMC4y aC9jcnlwdG8vcnNhL3JzYV9lYXkuYy5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9yc2EvcnNh X2VheS5jCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3JzYS9yc2FfZWF5LmMuZmlwcwkyMDE2 LTA1LTAzIDE1OjQ0OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0 by9yc2EvcnNhX2VheS5jCTIwMTYtMDUtMDMgMTY6NTc6NTguODM0MzIxMjk5ICswMjAwCitAQCAt MTE0LDYgKzExNCwxMCBAQAorICNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisgI2luY2x1ZGUgPG9w ZW5zc2wvcnNhLmg+CisgI2luY2x1ZGUgPG9wZW5zc2wvcmFuZC5oPgorKyNpbmNsdWRlIDxvcGVu c3NsL2Vyci5oPgorKyNpZmRlZiBPUEVOU1NMX0ZJUFMKKysjIGluY2x1ZGUgPG9wZW5zc2wvZmlw cy5oPgorKyNlbmRpZgorIAorICNpZm5kZWYgUlNBX05VTEwKKyAKK0BAIC0xNDAsNyArMTQ0LDcg QEAgc3RhdGljIFJTQV9NRVRIT0QgcnNhX3BrY3MxX2VheV9tZXRoID0geworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogaWYgZSA9PSAzICovCisgICAgIFJTQV9lYXlfaW5pdCwK KyAgICAgUlNBX2VheV9maW5pc2gsCistICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAv KiBmbGFncyAqLworKyAgICBSU0FfRkxBR19GSVBTX01FVEhPRCwgICAgICAgLyogZmxhZ3MgKi8K KyAgICAgTlVMTCwKKyAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJzYV9zaWdu ICovCisgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByc2FfdmVyaWZ5ICovCitA QCAtMTYwLDYgKzE2NCwyMiBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2VuY3J5cHQoaW50 IGZsCisgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisgICAgIEJOX0NUWCAqY3R4ID0g TlVMTDsKKyAKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2RlKCkpIHsK KysgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7CisrICAgICAgICAgICAgRklQ U2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfRU5DUllQVCwKKysgICAgICAgICAgICAgICAgICAg IEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICAgICAgZ290byBlcnI7Cisr ICAgICAgICB9CisrCisrICAgICAgICBpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpCisrICAgICAgICAgICAgJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NM X1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICAgICAgUlNBZXJyKFJTQV9G X1JTQV9FQVlfUFVCTElDX0VOQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrICAg ICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9CisrIyBlbmRpZgorKworICAg ICBpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMp IHsKKyAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19FTkNSWVBULCBSU0FfUl9N T0RVTFVTX1RPT19MQVJHRSk7CisgICAgICAgICByZXR1cm4gLTE7CitAQCAtMzYxLDYgKzM4MSwy MiBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHJpdmF0ZV9lbmNyeXB0KGludCBmCisgICAgIEJJR05V TSAqdW5ibGluZCA9IE5VTEw7CisgICAgIEJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7Cisg CisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpKSB7CisrICAgICAg ICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgICAgIEZJUFNlcnIoRklQ U19GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBULAorKyAgICAgICAgICAgICAgICAgICAgRklQU19S X0ZJUFNfU0VMRlRFU1RfRkFJTEVEKTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAg ICB9CisrCisrICAgICAgICBpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxM T1cpCisrICAgICAgICAgICAgJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9G SVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9F QVlfUFJJVkFURV9FTkNSWVBULCBSU0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKyAgICAgICAg ICAgIHJldHVybiAtMTsKKysgICAgICAgIH0KKysgICAgfQorKyMgZW5kaWYKKysKKyAgICAgaWYg KChjdHggPSBCTl9DVFhfbmV3KCkpID09IE5VTEwpCisgICAgICAgICBnb3RvIGVycjsKKyAgICAg Qk5fQ1RYX3N0YXJ0KGN0eCk7CitAQCAtNDk3LDYgKzUzMywyMiBAQCBzdGF0aWMgaW50IFJTQV9l YXlfcHJpdmF0ZV9kZWNyeXB0KGludCBmCisgICAgIEJJR05VTSAqdW5ibGluZCA9IE5VTEw7Cisg ICAgIEJOX0JMSU5ESU5HICpibGluZGluZyA9IE5VTEw7CisgCisrIyBpZmRlZiBPUEVOU1NMX0ZJ UFMKKysgICAgaWYgKEZJUFNfbW9kZSgpKSB7CisrICAgICAgICBpZiAoRklQU19zZWxmdGVzdF9m YWlsZWQoKSkgeworKyAgICAgICAgICAgIEZJUFNlcnIoRklQU19GX1JTQV9FQVlfUFJJVkFURV9E RUNSWVBULAorKyAgICAgICAgICAgICAgICAgICAgRklQU19SX0ZJUFNfU0VMRlRFU1RfRkFJTEVE KTsKKysgICAgICAgICAgICByZXR1cm4gLTE7CisrICAgICAgICB9CisrCisrICAgICAgICBpZiAo IShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJUFNfQUxMT1cpCisrICAgICAgICAgICAgJiYg KEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NMX1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMp KSB7CisrICAgICAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9FQVlfUFJJVkFURV9ERUNSWVBULCBS U0FfUl9LRVlfU0laRV9UT09fU01BTEwpOworKyAgICAgICAgICAgIHJldHVybiAtMTsKKysgICAg ICAgIH0KKysgICAgfQorKyMgZW5kaWYKKysKKyAgICAgaWYgKChjdHggPSBCTl9DVFhfbmV3KCkp ID09IE5VTEwpCisgICAgICAgICBnb3RvIGVycjsKKyAgICAgQk5fQ1RYX3N0YXJ0KGN0eCk7CitA QCAtNjIzLDYgKzY3NSwyMiBAQCBzdGF0aWMgaW50IFJTQV9lYXlfcHVibGljX2RlY3J5cHQoaW50 IGZsCisgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiA9IE5VTEw7CisgICAgIEJOX0NUWCAqY3R4ID0g TlVMTDsKKyAKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2RlKCkpIHsK KysgICAgICAgIGlmIChGSVBTX3NlbGZ0ZXN0X2ZhaWxlZCgpKSB7CisrICAgICAgICAgICAgRklQ U2VycihGSVBTX0ZfUlNBX0VBWV9QVUJMSUNfREVDUllQVCwKKysgICAgICAgICAgICAgICAgICAg IEZJUFNfUl9GSVBTX1NFTEZURVNUX0ZBSUxFRCk7CisrICAgICAgICAgICAgZ290byBlcnI7Cisr ICAgICAgICB9CisrCisrICAgICAgICBpZiAoIShyc2EtPmZsYWdzICYgUlNBX0ZMQUdfTk9OX0ZJ UFNfQUxMT1cpCisrICAgICAgICAgICAgJiYgKEJOX251bV9iaXRzKHJzYS0+bikgPCBPUEVOU1NM X1JTQV9GSVBTX01JTl9NT0RVTFVTX0JJVFMpKSB7CisrICAgICAgICAgICAgUlNBZXJyKFJTQV9G X1JTQV9FQVlfUFVCTElDX0RFQ1JZUFQsIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCk7CisrICAg ICAgICAgICAgcmV0dXJuIC0xOworKyAgICAgICAgfQorKyAgICB9CisrIyBlbmRpZgorKworICAg ICBpZiAoQk5fbnVtX2JpdHMocnNhLT5uKSA+IE9QRU5TU0xfUlNBX01BWF9NT0RVTFVTX0JJVFMp IHsKKyAgICAgICAgIFJTQWVycihSU0FfRl9SU0FfRUFZX1BVQkxJQ19ERUNSWVBULCBSU0FfUl9N T0RVTFVTX1RPT19MQVJHRSk7CisgICAgICAgICByZXR1cm4gLTE7CitAQCAtODg2LDYgKzk1NCw5 IEBAIHN0YXRpYyBpbnQgUlNBX2VheV9tb2RfZXhwKEJJR05VTSAqcjAsIGMKKyAKKyBzdGF0aWMg aW50IFJTQV9lYXlfaW5pdChSU0EgKnJzYSkKKyB7CisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysg ICAgRklQU19zZWxmdGVzdF9jaGVjaygpOworKyMgZW5kaWYKKyAgICAgcnNhLT5mbGFncyB8PSBS U0FfRkxBR19DQUNIRV9QVUJMSUMgfCBSU0FfRkxBR19DQUNIRV9QUklWQVRFOworICAgICByZXR1 cm4gKDEpOworIH0KK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9yc2EvcnNhX2Vyci5j LmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3JzYS9yc2FfZXJyLmMKKy0tLSBvcGVuc3NsLTEu MC4yaC9jcnlwdG8vcnNhL3JzYV9lcnIuYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAw MDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3JzYS9yc2FfZXJyLmMJMjAxNi0w NS0wMyAxNjo1Nzo1OC44MzQzMjEyOTkgKzAyMDAKK0BAIC0xMzYsNiArMTM2LDggQEAgc3RhdGlj IEVSUl9TVFJJTkdfREFUQSBSU0Ffc3RyX2Z1bmN0c1tdCisgICAgIHtFUlJfRlVOQyhSU0FfRl9S U0FfUFVCTElDX0VOQ1JZUFQpLCAiUlNBX3B1YmxpY19lbmNyeXB0In0sCisgICAgIHtFUlJfRlVO QyhSU0FfRl9SU0FfUFVCX0RFQ09ERSksICJSU0FfUFVCX0RFQ09ERSJ9LAorICAgICB7RVJSX0ZV TkMoUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HKSwgIlJTQV9zZXR1cF9ibGluZGluZyJ9LAorKyAg ICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NFVF9ERUZBVUxUX01FVEhPRCksICJSU0Ffc2V0X2RlZmF1 bHRfbWV0aG9kIn0sCisrICAgIHtFUlJfRlVOQyhSU0FfRl9SU0FfU0VUX01FVEhPRCksICJSU0Ff c2V0X21ldGhvZCJ9LAorICAgICB7RVJSX0ZVTkMoUlNBX0ZfUlNBX1NJR04pLCAiUlNBX3NpZ24i fSwKKyAgICAge0VSUl9GVU5DKFJTQV9GX1JTQV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HKSwKKyAg ICAgICJSU0Ffc2lnbl9BU04xX09DVEVUX1NUUklORyJ9LAorZGlmZiAtdXAgb3BlbnNzbC0xLjAu MmgvY3J5cHRvL3JzYS9yc2FfZ2VuLmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vcnNhL3Jz YV9nZW4uYworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9yc2EvcnNhX2dlbi5jLmZpcHMJMjAx Ni0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlw dG8vcnNhL3JzYV9nZW4uYwkyMDE2LTA1LTAzIDE2OjU3OjU4LjgzNDMyMTI5OSArMDIwMAorQEAg LTY5LDggKzY5LDgwIEBACisgI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisgI2lmZGVmIE9QRU5T U0xfRklQUworICMgaW5jbHVkZSA8b3BlbnNzbC9maXBzLmg+CistZXh0ZXJuIGludCBGSVBTX3Jz YV94OTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZSwKKy0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJOX0dFTkNCICpjYik7Cisr IyBpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorKyMgaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKysK KytzdGF0aWMgaW50IGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwgPSAwOworKworK3ZvaWQgRklQU19j b3JydXB0X3JzYV9rZXlnZW4odm9pZCkKKyt7CisrICAgIGZpcHNfcnNhX3BhaXJ3aXNlX2ZhaWwg PSAxOworK30KKysKKytpbnQgZmlwc19jaGVja19yc2EoUlNBICpyc2EpCisreworKyAgICBjb25z dCB1bnNpZ25lZCBjaGFyIHRic1tdID0gIlJTQSBQYWlyd2lzZSBDaGVjayBEYXRhIjsKKysgICAg dW5zaWduZWQgY2hhciAqY3RidWYgPSBOVUxMLCAqcHRidWYgPSBOVUxMOworKyAgICBpbnQgbGVu LCByZXQgPSAwOworKyAgICBFVlBfUEtFWSAqcGs7CisrCisrICAgIGlmICgocGsgPSBFVlBfUEtF WV9uZXcoKSkgPT0gTlVMTCkKKysgICAgICAgIGdvdG8gZXJyOworKworKyAgICBFVlBfUEtFWV9z ZXQxX1JTQShwaywgcnNhKTsKKysKKysgICAgLyogUGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5j eSBzaWduYXR1cmUgdGVzdCAqLworKyAgICBpZiAoIWZpcHNfcGtleV9zaWduYXR1cmVfdGVzdChw aywgdGJzLCAtMSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwg RVZQX3NoYTEoKSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVZQX01EX0NU WF9GTEFHX1BBRF9QS0NTMSwgTlVMTCkKKysgICAgICAgIHx8ICFmaXBzX3BrZXlfc2lnbmF0dXJl X3Rlc3QocGssIHRicywgLTEsIE5VTEwsIDAsIEVWUF9zaGExKCksCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVWUF9NRF9DVFhfRkxBR19QQURfWDkzMSwgTlVMTCkKKysg ICAgICAgIHx8ICFmaXBzX3BrZXlfc2lnbmF0dXJlX3Rlc3QocGssIHRicywgLTEsIE5VTEwsIDAs IEVWUF9zaGExKCksCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVWUF9N RF9DVFhfRkxBR19QQURfUFNTLCBOVUxMKSkKKysgICAgICAgIGdvdG8gZXJyOworKyAgICAvKiBO b3cgcGVyZm9ybSBwYWlyd2lzZSBjb25zaXN0ZW5jeSBlbmNyeXB0L2RlY3J5cHQgdGVzdCAqLwor KyAgICBjdGJ1ZiA9IE9QRU5TU0xfbWFsbG9jKFJTQV9zaXplKHJzYSkpOworKyAgICBpZiAoIWN0 YnVmKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIGxlbiA9CisrICAgICAgICBSU0FfcHVi bGljX2VuY3J5cHQoc2l6ZW9mKHRicykgLSAxLCB0YnMsIGN0YnVmLCByc2EsCisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgUlNBX1BLQ1MxX1BBRERJTkcpOworKyAgICBpZiAobGVuIDw9IDAp CisrICAgICAgICBnb3RvIGVycjsKKysgICAgLyogQ2hlY2sgY2lwaGVydGV4dCBkb2Vzbid0IG1h dGNoIHBsYWludGV4dCAqLworKyAgICBpZiAoKGxlbiA9PSAoc2l6ZW9mKHRicykgLSAxKSkgJiYg IW1lbWNtcCh0YnMsIGN0YnVmLCBsZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrICAgIHB0YnVm ID0gT1BFTlNTTF9tYWxsb2MoUlNBX3NpemUocnNhKSk7CisrCisrICAgIGlmICghcHRidWYpCisr ICAgICAgICBnb3RvIGVycjsKKysgICAgbGVuID0gUlNBX3ByaXZhdGVfZGVjcnlwdChsZW4sIGN0 YnVmLCBwdGJ1ZiwgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7CisrICAgIGlmIChsZW4gIT0gKHNp emVvZih0YnMpIC0gMSkpCisrICAgICAgICBnb3RvIGVycjsKKysgICAgaWYgKG1lbWNtcChwdGJ1 ZiwgdGJzLCBsZW4pKQorKyAgICAgICAgZ290byBlcnI7CisrCisrICAgIHJldCA9IDE7CisrCisr ICAgIGlmICghcHRidWYpCisrICAgICAgICBnb3RvIGVycjsKKysKKysgZXJyOgorKyAgICBpZiAo cmV0ID09IDApIHsKKysgICAgICAgIGZpcHNfc2V0X3NlbGZ0ZXN0X2ZhaWwoKTsKKysgICAgICAg IEZJUFNlcnIoRklQU19GX0ZJUFNfQ0hFQ0tfUlNBLCBGSVBTX1JfUEFJUldJU0VfVEVTVF9GQUlM RUQpOworKyAgICB9CisrCisrICAgIGlmIChjdGJ1ZikKKysgICAgICAgIE9QRU5TU0xfZnJlZShj dGJ1Zik7CisrICAgIGlmIChwdGJ1ZikKKysgICAgICAgIE9QRU5TU0xfZnJlZShwdGJ1Zik7Cisr ICAgIGlmIChwaykKKysgICAgICAgIEVWUF9QS0VZX2ZyZWUocGspOworKworKyAgICByZXR1cm4g cmV0OworK30KKyAjZW5kaWYKKyAKKyBzdGF0aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0Eg KnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwKK0BAIC04Niw3ICsxNTgsNyBAQCBzdGF0 aWMgaW50IHJzYV9idWlsdGluX2tleWdlbihSU0EgKnJzYSwKKyBpbnQgUlNBX2dlbmVyYXRlX2tl eV9leChSU0EgKnJzYSwgaW50IGJpdHMsIEJJR05VTSAqZV92YWx1ZSwgQk5fR0VOQ0IgKmNiKQor IHsKKyAjaWZkZWYgT1BFTlNTTF9GSVBTCistICAgIGlmIChGSVBTX21vZGUoKSAmJiAhKHJzYS0+ bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKysgICAgaWYgKEZJUFNfbW9kdWxl X21vZGUoKSAmJiAhKHJzYS0+bWV0aC0+ZmxhZ3MgJiBSU0FfRkxBR19GSVBTX01FVEhPRCkKKyAg ICAgICAgICYmICEocnNhLT5mbGFncyAmIFJTQV9GTEFHX05PTl9GSVBTX0FMTE9XKSkgeworICAg ICAgICAgUlNBZXJyKFJTQV9GX1JTQV9HRU5FUkFURV9LRVlfRVgsIFJTQV9SX05PTl9GSVBTX1JT QV9NRVRIT0QpOworICAgICAgICAgcmV0dXJuIDA7CitAQCAtOTQsMTAgKzE2Niw2IEBAIGludCBS U0FfZ2VuZXJhdGVfa2V5X2V4KFJTQSAqcnNhLCBpbnQgYmkKKyAjZW5kaWYKKyAgICAgaWYgKHJz YS0+bWV0aC0+cnNhX2tleWdlbikKKyAgICAgICAgIHJldHVybiByc2EtPm1ldGgtPnJzYV9rZXln ZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CistI2lmZGVmIE9QRU5TU0xfRklQUworLSAgICBp ZiAoRklQU19tb2RlKCkpCistICAgICAgICByZXR1cm4gRklQU19yc2FfeDkzMV9nZW5lcmF0ZV9r ZXlfZXgocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CistI2VuZGlmCisgICAgIHJldHVybiByc2Ff YnVpbHRpbl9rZXlnZW4ocnNhLCBiaXRzLCBlX3ZhbHVlLCBjYik7CisgfQorIAorQEAgLTExMCw2 ICsxNzgsMjAgQEAgc3RhdGljIGludCByc2FfYnVpbHRpbl9rZXlnZW4oUlNBICpyc2EsCisgICAg IGludCBiaXRzcCwgYml0c3EsIG9rID0gLTEsIG4gPSAwOworICAgICBCTl9DVFggKmN0eCA9IE5V TEw7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgp KSB7CisrICAgICAgICBpZiAoRklQU19zZWxmdGVzdF9mYWlsZWQoKSkgeworKyAgICAgICAgICAg IEZJUFNlcnIoRklQU19GX1JTQV9CVUlMVElOX0tFWUdFTiwgRklQU19SX0ZJUFNfU0VMRlRFU1Rf RkFJTEVEKTsKKysgICAgICAgICAgICByZXR1cm4gMDsKKysgICAgICAgIH0KKysKKysgICAgICAg IGlmIChiaXRzIDwgT1BFTlNTTF9SU0FfRklQU19NSU5fTU9EVUxVU19CSVRTKSB7CisrICAgICAg ICAgICAgRklQU2VycihGSVBTX0ZfUlNBX0JVSUxUSU5fS0VZR0VOLCBGSVBTX1JfS0VZX1RPT19T SE9SVCk7CisrICAgICAgICAgICAgcmV0dXJuIDA7CisrICAgICAgICB9CisrICAgIH0KKysjZW5k aWYKKysKKyAgICAgY3R4ID0gQk5fQ1RYX25ldygpOworICAgICBpZiAoY3R4ID09IE5VTEwpCisg ICAgICAgICBnb3RvIGVycjsKK0BAIC0yMzUsNiArMzE3LDE2IEBAIHN0YXRpYyBpbnQgcnNhX2J1 aWx0aW5fa2V5Z2VuKFJTQSAqcnNhLAorICAgICBpZiAoIUJOX21vZF9pbnZlcnNlKHJzYS0+aXFt cCwgcnNhLT5xLCBwLCBjdHgpKQorICAgICAgICAgZ290byBlcnI7CisgCisrI2lmZGVmIE9QRU5T U0xfRklQUworKyAgICBpZiAoRklQU19tb2R1bGVfbW9kZSgpKSB7CisrICAgICAgICBpZiAoZmlw c19yc2FfcGFpcndpc2VfZmFpbCkKKysgICAgICAgICAgICBCTl9hZGRfd29yZChyc2EtPm4sIDEp OworKworKyAgICAgICAgaWYgKCFmaXBzX2NoZWNrX3JzYShyc2EpKQorKyAgICAgICAgICAgIGdv dG8gZXJyOworKyAgICB9CisrI2VuZGlmCisrCisgICAgIG9rID0gMTsKKyAgZXJyOgorICAgICBp ZiAob2sgPT0gLTEpIHsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9yc2EvcnNhLmgu ZmlwcyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vcnNhL3JzYS5oCistLS0gb3BlbnNzbC0xLjAuMmgv Y3J5cHRvL3JzYS9yc2EuaC5maXBzCTIwMTYtMDUtMDMgMTY6NTc6NTguNjk2MzE4MDQwICswMjAw CisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3JzYS9yc2EuaAkyMDE2LTA1LTAzIDE2OjU3OjU4 LjgzNDMyMTI5OSArMDIwMAorQEAgLTE2OCw2ICsxNjgsOCBAQCBzdHJ1Y3QgcnNhX3N0IHsKKyAj ICBkZWZpbmUgT1BFTlNTTF9SU0FfTUFYX01PRFVMVVNfQklUUyAgIDE2Mzg0CisgIyBlbmRpZgor IAorKyMgZGVmaW5lIE9QRU5TU0xfUlNBX0ZJUFNfTUlOX01PRFVMVVNfQklUUyAxMDI0CisrCisg IyBpZm5kZWYgT1BFTlNTTF9SU0FfU01BTExfTU9EVUxVU19CSVRTCisgIyAgZGVmaW5lIE9QRU5T U0xfUlNBX1NNQUxMX01PRFVMVVNfQklUUyAzMDcyCisgIyBlbmRpZgorQEAgLTMyOSw2ICszMzEs MTMgQEAgUlNBICpSU0FfZ2VuZXJhdGVfa2V5KGludCBiaXRzLCB1bnNpZ25lZAorIAorIC8qIE5l dyB2ZXJzaW9uICovCisgaW50IFJTQV9nZW5lcmF0ZV9rZXlfZXgoUlNBICpyc2EsIGludCBiaXRz LCBCSUdOVU0gKmUsIEJOX0dFTkNCICpjYik7CisraW50IFJTQV9YOTMxX2Rlcml2ZV9leChSU0Eg KnJzYSwgQklHTlVNICpwMSwgQklHTlVNICpwMiwgQklHTlVNICpxMSwKKysgICAgICAgICAgICAg ICAgICAgICAgIEJJR05VTSAqcTIsIGNvbnN0IEJJR05VTSAqWHAxLCBjb25zdCBCSUdOVU0gKlhw MiwKKysgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJJR05VTSAqWHAsIGNvbnN0IEJJR05V TSAqWHExLAorKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQklHTlVNICpYcTIsIGNvbnN0 IEJJR05VTSAqWHEsCisrICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCSUdOVU0gKmUsIEJO X0dFTkNCICpjYik7CisraW50IFJTQV9YOTMxX2dlbmVyYXRlX2tleV9leChSU0EgKnJzYSwgaW50 IGJpdHMsIGNvbnN0IEJJR05VTSAqZSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJO X0dFTkNCICpjYik7CisgCisgaW50IFJTQV9jaGVja19rZXkoY29uc3QgUlNBICopOworICAgICAg ICAgLyogbmV4dCA0IHJldHVybiAtMSBvbiBlcnJvciAqLworQEAgLTUzOCw3ICs1NDcsNyBAQCB2 b2lkIEVSUl9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICMgZGVmaW5lIFJTQV9GX1JTQV9BTEdP Ul9UT19NRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNTcKKyAjIGRlZmluZSBSU0FfRl9S U0FfQlVJTFRJTl9LRVlHRU4gICAgICAgICAgICAgICAgICAgICAgICAgMTI5CisgIyBkZWZpbmUg UlNBX0ZfUlNBX0NIRUNLX0tFWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMworLSMg ZGVmaW5lIFJTQV9GX1JTQV9DTVNfREVDUllQVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAx NTgKKysjIGRlZmluZSBSU0FfRl9SU0FfQ01TX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMjU4CisgIyBkZWZpbmUgUlNBX0ZfUlNBX0VBWV9QUklWQVRFX0RFQ1JZUFQgICAgICAg ICAgICAgICAgICAgIDEwMQorICMgZGVmaW5lIFJTQV9GX1JTQV9FQVlfUFJJVkFURV9FTkNSWVBU ICAgICAgICAgICAgICAgICAgICAxMDIKKyAjIGRlZmluZSBSU0FfRl9SU0FfRUFZX1BVQkxJQ19E RUNSWVBUICAgICAgICAgICAgICAgICAgICAgMTAzCitAQCAtNTU5LDcgKzU2OCw3IEBAIHZvaWQg RVJSX2xvYWRfUlNBX3N0cmluZ3Modm9pZCk7CisgIyBkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdf QUREX1BLQ1MxX09BRVAgICAgICAgICAgICAgICAgIDEyMQorICMgZGVmaW5lIFJTQV9GX1JTQV9Q QURESU5HX0FERF9QS0NTMV9PQUVQX01HRjEgICAgICAgICAgICAxNjAKKyAjIGRlZmluZSBSU0Ff Rl9SU0FfUEFERElOR19BRERfUEtDUzFfUFNTICAgICAgICAgICAgICAgICAgMTI1CistIyBkZWZp bmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1BTU19NR0YxICAgICAgICAgICAgIDE0OAor KyMgZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9QS0NTMV9QU1NfTUdGMSAgICAgICAgICAg ICAxNTgKKyAjIGRlZmluZSBSU0FfRl9SU0FfUEFERElOR19BRERfUEtDUzFfVFlQRV8xICAgICAg ICAgICAgICAgMTA4CisgIyBkZWZpbmUgUlNBX0ZfUlNBX1BBRERJTkdfQUREX1BLQ1MxX1RZUEVf MiAgICAgICAgICAgICAgIDEwOQorICMgZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0FERF9TU0xW MjMgICAgICAgICAgICAgICAgICAgICAxMTAKK0BAIC01NzMsMjEgKzU4MiwyMyBAQCB2b2lkIEVS Ul9sb2FkX1JTQV9zdHJpbmdzKHZvaWQpOworICMgZGVmaW5lIFJTQV9GX1JTQV9QQURESU5HX0NI RUNLX1g5MzEgICAgICAgICAgICAgICAgICAgICAxMjgKKyAjIGRlZmluZSBSU0FfRl9SU0FfUFJJ TlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE1CisgIyBkZWZpbmUgUlNBX0Zf UlNBX1BSSU5UX0ZQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNgorLSMgZGVmaW5l IFJTQV9GX1JTQV9QUklWQVRFX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAxNTAKKy0j IGRlZmluZSBSU0FfRl9SU0FfUFJJVkFURV9FTkNSWVBUICAgICAgICAgICAgICAgICAgICAgICAg MTUxCisrIyBkZWZpbmUgUlNBX0ZfUlNBX1BSSVZBVEVfREVDUllQVCAgICAgICAgICAgICAgICAg ICAgICAgIDE1NworKyMgZGVmaW5lIFJTQV9GX1JTQV9QUklWQVRFX0VOQ1JZUFQgICAgICAgICAg ICAgICAgICAgICAgICAxNDgKKyAjIGRlZmluZSBSU0FfRl9SU0FfUFJJVl9ERUNPREUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMTM3CisgIyBkZWZpbmUgUlNBX0ZfUlNBX1BSSVZfRU5DT0RF ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzOAorICMgZGVmaW5lIFJTQV9GX1JTQV9QU1Nf VE9fQ1RYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNjIKKy0jIGRlZmluZSBSU0FfRl9S U0FfUFVCTElDX0RFQ1JZUFQgICAgICAgICAgICAgICAgICAgICAgICAgMTUyCisrIyBkZWZpbmUg UlNBX0ZfUlNBX1BVQkxJQ19ERUNSWVBUICAgICAgICAgICAgICAgICAgICAgICAgIDE0OQorICMg ZGVmaW5lIFJTQV9GX1JTQV9QVUJMSUNfRU5DUllQVCAgICAgICAgICAgICAgICAgICAgICAgICAx NTMKKyAjIGRlZmluZSBSU0FfRl9SU0FfUFVCX0RFQ09ERSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTM5CisgIyBkZWZpbmUgUlNBX0ZfUlNBX1NFVFVQX0JMSU5ESU5HICAgICAgICAgICAg ICAgICAgICAgICAgIDEzNgorKyMgZGVmaW5lIFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0Qg ICAgICAgICAgICAgICAgICAgICAxNTAKKysjIGRlZmluZSBSU0FfRl9SU0FfU0VUX01FVEhPRCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTUxCisgIyBkZWZpbmUgUlNBX0ZfUlNBX1NJR04g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExNworICMgZGVmaW5lIFJTQV9GX1JT QV9TSUdOX0FTTjFfT0NURVRfU1RSSU5HICAgICAgICAgICAgICAgICAxMTgKKyAjIGRlZmluZSBS U0FfRl9SU0FfVkVSSUZZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTE5CisgIyBk ZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9BU04xX09DVEVUX1NUUklORyAgICAgICAgICAgICAgIDEy MAorICMgZGVmaW5lIFJTQV9GX1JTQV9WRVJJRllfUEtDUzFfUFNTICAgICAgICAgICAgICAgICAg ICAgICAxMjYKKy0jIGRlZmluZSBSU0FfRl9SU0FfVkVSSUZZX1BLQ1MxX1BTU19NR0YxICAgICAg ICAgICAgICAgICAgMTQ5CisrIyBkZWZpbmUgUlNBX0ZfUlNBX1ZFUklGWV9QS0NTMV9QU1NfTUdG MSAgICAgICAgICAgICAgICAgIDE1MgorIAorIC8qIFJlYXNvbiBjb2Rlcy4gKi8KKyAjIGRlZmlu ZSBSU0FfUl9BTEdPUklUSE1fTUlTTUFUQ0ggICAgICAgICAgICAgICAgICAgICAgICAgMTAwCitA QCAtNjIwLDIxICs2MzEsMjIgQEAgdm9pZCBFUlJfbG9hZF9SU0Ffc3RyaW5ncyh2b2lkKTsKKyAj IGRlZmluZSBSU0FfUl9JTlZBTElEX09BRVBfUEFSQU1FVEVSUyAgICAgICAgICAgICAgICAgICAg MTYyCisgIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9QQURESU5HICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDEzOAorICMgZGVmaW5lIFJTQV9SX0lOVkFMSURfUEFERElOR19NT0RFICAgICAgICAg ICAgICAgICAgICAgICAxNDEKKy0jIGRlZmluZSBSU0FfUl9JTlZBTElEX1BTU19QQVJBTUVURVJT ICAgICAgICAgICAgICAgICAgICAgMTQ5CisrIyBkZWZpbmUgUlNBX1JfSU5WQUxJRF9QU1NfUEFS QU1FVEVSUyAgICAgICAgICAgICAgICAgICAgIDE1NworICMgZGVmaW5lIFJTQV9SX0lOVkFMSURf UFNTX1NBTFRMRU4gICAgICAgICAgICAgICAgICAgICAgICAxNDYKKy0jIGRlZmluZSBSU0FfUl9J TlZBTElEX1NBTFRfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgMTUwCisrIyBkZWZpbmUg UlNBX1JfSU5WQUxJRF9TQUxUX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgIDE1OAorICMg ZGVmaW5lIFJTQV9SX0lOVkFMSURfVFJBSUxFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAx MzkKKyAjIGRlZmluZSBSU0FfUl9JTlZBTElEX1g5MzFfRElHRVNUICAgICAgICAgICAgICAgICAg ICAgICAgMTQyCisgIyBkZWZpbmUgUlNBX1JfSVFNUF9OT1RfSU5WRVJTRV9PRl9RICAgICAgICAg ICAgICAgICAgICAgIDEyNgorICMgZGVmaW5lIFJTQV9SX0tFWV9TSVpFX1RPT19TTUFMTCAgICAg ICAgICAgICAgICAgICAgICAgICAxMjAKKyAjIGRlZmluZSBSU0FfUl9MQVNUX09DVEVUX0lOVkFM SUQgICAgICAgICAgICAgICAgICAgICAgICAgMTM0CisgIyBkZWZpbmUgUlNBX1JfTU9EVUxVU19U T09fTEFSR0UgICAgICAgICAgICAgICAgICAgICAgICAgIDEwNQorLSMgZGVmaW5lIFJTQV9SX05P Tl9GSVBTX1JTQV9NRVRIT0QgICAgICAgICAgICAgICAgICAgICAgICAxNTcKKysjIGRlZmluZSBS U0FfUl9OT05fRklQU19SU0FfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgMTQ5CisrIyBk ZWZpbmUgUlNBX1JfTk9OX0ZJUFNfTUVUSE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0 OQorICMgZGVmaW5lIFJTQV9SX05PX1BVQkxJQ19FWFBPTkVOVCAgICAgICAgICAgICAgICAgICAg ICAgICAxNDAKKyAjIGRlZmluZSBSU0FfUl9OVUxMX0JFRk9SRV9CTE9DS19NSVNTSU5HICAgICAg ICAgICAgICAgICAgMTEzCisgIyBkZWZpbmUgUlNBX1JfTl9ET0VTX05PVF9FUVVBTF9QX1EgICAg ICAgICAgICAgICAgICAgICAgIDEyNworICMgZGVmaW5lIFJTQV9SX09BRVBfREVDT0RJTkdfRVJS T1IgICAgICAgICAgICAgICAgICAgICAgICAxMjEKKy0jIGRlZmluZSBSU0FfUl9PUEVSQVRJT05f Tk9UX0FMTE9XRURfSU5fRklQU19NT0RFICAgICAgICAgMTU4CisrIyBkZWZpbmUgUlNBX1JfT1BF UkFUSU9OX05PVF9BTExPV0VEX0lOX0ZJUFNfTU9ERSAgICAgICAgIDE1MAorICMgZGVmaW5lIFJT QV9SX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0ZPUl9USElTX0tFWVRZUEUgICAxNDgKKyAjIGRl ZmluZSBSU0FfUl9QQURESU5HX0NIRUNLX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgMTE0 CisgIyBkZWZpbmUgUlNBX1JfUEtDU19ERUNPRElOR19FUlJPUiAgICAgICAgICAgICAgICAgICAg ICAgIDE1OQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3JzYS9yc2FfbGliLmMuZmlw cyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vcnNhL3JzYV9saWIuYworLS0tIG9wZW5zc2wtMS4wLjJo L2NyeXB0by9yc2EvcnNhX2xpYi5jLmZpcHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vcnNhL3JzYV9saWIuYwkyMDE2LTA1LTAz IDE2OjU3OjU4LjgzNDMyMTI5OSArMDIwMAorQEAgLTg0LDIzICs4NCwyMiBAQCBSU0EgKlJTQV9u ZXcodm9pZCkKKyAKKyB2b2lkIFJTQV9zZXRfZGVmYXVsdF9tZXRob2QoY29uc3QgUlNBX01FVEhP RCAqbWV0aCkKKyB7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBpZiAoRklQU19tb2RlKCkg JiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9EKSkgeworKyAgICAgICAgUlNB ZXJyKFJTQV9GX1JTQV9TRVRfREVGQVVMVF9NRVRIT0QsIFJTQV9SX05PTl9GSVBTX01FVEhPRCk7 CisrICAgICAgICByZXR1cm47CisrICAgIH0KKysjZW5kaWYKKyAgICAgZGVmYXVsdF9SU0FfbWV0 aCA9IG1ldGg7CisgfQorIAorIGNvbnN0IFJTQV9NRVRIT0QgKlJTQV9nZXRfZGVmYXVsdF9tZXRo b2Qodm9pZCkKKyB7CisgICAgIGlmIChkZWZhdWx0X1JTQV9tZXRoID09IE5VTEwpIHsKKy0jaWZk ZWYgT1BFTlNTTF9GSVBTCistICAgICAgICBpZiAoRklQU19tb2RlKCkpCistICAgICAgICAgICAg cmV0dXJuIEZJUFNfcnNhX3BrY3MxX3NzbGVheSgpOworLSAgICAgICAgZWxzZQorLSAgICAgICAg ICAgIHJldHVybiBSU0FfUEtDUzFfU1NMZWF5KCk7CistI2Vsc2UKKy0jIGlmZGVmIFJTQV9OVUxM CisrI2lmZGVmIFJTQV9OVUxMCisgICAgICAgICBkZWZhdWx0X1JTQV9tZXRoID0gUlNBX251bGxf bWV0aG9kKCk7CistIyBlbHNlCisrI2Vsc2UKKyAgICAgICAgIGRlZmF1bHRfUlNBX21ldGggPSBS U0FfUEtDUzFfU1NMZWF5KCk7CistIyBlbmRpZgorICNlbmRpZgorICAgICB9CisgCitAQCAtMTE5 LDYgKzExOCwxMiBAQCBpbnQgUlNBX3NldF9tZXRob2QoUlNBICpyc2EsIGNvbnN0IFJTQV9NCisg ICAgICAqIHRvIGRlYWwgd2l0aCB3aGljaCBFTkdJTkUgaXQgY29tZXMgZnJvbS4KKyAgICAgICov CisgICAgIGNvbnN0IFJTQV9NRVRIT0QgKm10bXA7CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAg ICBpZiAoRklQU19tb2RlKCkgJiYgIShtZXRoLT5mbGFncyAmIFJTQV9GTEFHX0ZJUFNfTUVUSE9E KSkgeworKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9TRVRfTUVUSE9ELCBSU0FfUl9OT05fRklQ U19NRVRIT0QpOworKyAgICAgICAgcmV0dXJuIDA7CisrICAgIH0KKysjZW5kaWYKKyAgICAgbXRt cCA9IHJzYS0+bWV0aDsKKyAgICAgaWYgKG10bXAtPmZpbmlzaCkKKyAgICAgICAgIG10bXAtPmZp bmlzaChyc2EpOworQEAgLTE2NSw2ICsxNzAsMTcgQEAgUlNBICpSU0FfbmV3X21ldGhvZChFTkdJ TkUgKmVuZ2luZSkKKyAgICAgICAgIH0KKyAgICAgfQorICNlbmRpZgorKyNpZmRlZiBPUEVOU1NM X0ZJUFMKKysgICAgaWYgKEZJUFNfbW9kZSgpICYmICEocmV0LT5tZXRoLT5mbGFncyAmIFJTQV9G TEFHX0ZJUFNfTUVUSE9EKSkgeworKyAgICAgICAgUlNBZXJyKFJTQV9GX1JTQV9ORVdfTUVUSE9E LCBSU0FfUl9OT05fRklQU19NRVRIT0QpOworKyMgaWZuZGVmIE9QRU5TU0xfTk9fRU5HSU5FCisr ICAgICAgICBpZiAocmV0LT5lbmdpbmUpCisrICAgICAgICAgICAgRU5HSU5FX2ZpbmlzaChyZXQt PmVuZ2luZSk7CisrIyBlbmRpZgorKyAgICAgICAgT1BFTlNTTF9mcmVlKHJldCk7CisrICAgICAg ICByZXR1cm4gTlVMTDsKKysgICAgfQorKyNlbmRpZgorIAorICAgICByZXQtPnBhZCA9IDA7Cisg ICAgIHJldC0+dmVyc2lvbiA9IDA7CitAQCAtMTgzLDcgKzE5OSw3IEBAIFJTQSAqUlNBX25ld19t ZXRob2QoRU5HSU5FICplbmdpbmUpCisgICAgIHJldC0+YmxpbmRpbmcgPSBOVUxMOworICAgICBy ZXQtPm10X2JsaW5kaW5nID0gTlVMTDsKKyAgICAgcmV0LT5iaWdudW1fZGF0YSA9IE5VTEw7Cist ICAgIHJldC0+ZmxhZ3MgPSByZXQtPm1ldGgtPmZsYWdzICYgflJTQV9GTEFHX05PTl9GSVBTX0FM TE9XOworKyAgICByZXQtPmZsYWdzID0gcmV0LT5tZXRoLT5mbGFnczsKKyAgICAgaWYgKCFDUllQ VE9fbmV3X2V4X2RhdGEoQ1JZUFRPX0VYX0lOREVYX1JTQSwgcmV0LCAmcmV0LT5leF9kYXRhKSkg eworICNpZm5kZWYgT1BFTlNTTF9OT19FTkdJTkUKKyAgICAgICAgIGlmIChyZXQtPmVuZ2luZSkK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9yc2EvcnNhX3BtZXRoLmMuZmlwcyBvcGVu c3NsLTEuMC4yaC9jcnlwdG8vcnNhL3JzYV9wbWV0aC5jCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5 cHRvL3JzYS9yc2FfcG1ldGguYy5maXBzCTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAwMDAwICsw MjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3JzYS9yc2FfcG1ldGguYwkyMDE2LTA1LTAz IDE2OjU3OjU4LjgzNTMyMTMyMyArMDIwMAorQEAgLTIyOCwyMCArMjI4LDYgQEAgc3RhdGljIGlu dCBwa2V5X3JzYV9zaWduKEVWUF9QS0VZX0NUWCAqYworICAgICAgICAgICAgIFJTQWVycihSU0Ff Rl9QS0VZX1JTQV9TSUdOLCBSU0FfUl9JTlZBTElEX0RJR0VTVF9MRU5HVEgpOworICAgICAgICAg ICAgIHJldHVybiAtMTsKKyAgICAgICAgIH0KKy0jaWZkZWYgT1BFTlNTTF9GSVBTCistICAgICAg ICBpZiAocmV0ID4gMCkgeworLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBzbGVuOworLSAgICAg ICAgICAgIHJldCA9IEZJUFNfcnNhX3NpZ25fZGlnZXN0KHJzYSwgdGJzLCB0YnNsZW4sIHJjdHgt Pm1kLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjdHgtPnBhZF9t b2RlLAorLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjdHgtPnNhbHRs ZW4sCistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmN0eC0+bWdmMW1k LCBzaWcsICZzbGVuKTsKKy0gICAgICAgICAgICBpZiAocmV0ID4gMCkKKy0gICAgICAgICAgICAg ICAgKnNpZ2xlbiA9IHNsZW47CistICAgICAgICAgICAgZWxzZQorLSAgICAgICAgICAgICAgICAq c2lnbGVuID0gMDsKKy0gICAgICAgICAgICByZXR1cm4gcmV0OworLSAgICAgICAgfQorLSNlbmRp ZgorIAorICAgICAgICAgaWYgKEVWUF9NRF90eXBlKHJjdHgtPm1kKSA9PSBOSURfbWRjMikgewor ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzbHRtcDsKK0BAIC0zNTksMTcgKzM0NSw2IEBAIHN0 YXRpYyBpbnQgcGtleV9yc2FfdmVyaWZ5KEVWUF9QS0VZX0NUWAorICAgICB9CisgI2VuZGlmCisg ICAgIGlmIChyY3R4LT5tZCkgeworLSNpZmRlZiBPUEVOU1NMX0ZJUFMKKy0gICAgICAgIGlmIChy diA+IDApIHsKKy0gICAgICAgICAgICByZXR1cm4gRklQU19yc2FfdmVyaWZ5X2RpZ2VzdChyc2Es CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJzLCB0YnNsZW4s CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmN0eC0+bWQsCist ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmN0eC0+cGFkX21vZGUs CistICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmN0eC0+c2FsdGxl biwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY3R4LT5tZ2Yx bWQsIHNpZywgc2lnbGVuKTsKKy0KKy0gICAgICAgIH0KKy0jZW5kaWYKKyAgICAgICAgIGlmIChy Y3R4LT5wYWRfbW9kZSA9PSBSU0FfUEtDUzFfUEFERElORykKKyAgICAgICAgICAgICByZXR1cm4g UlNBX3ZlcmlmeShFVlBfTURfdHlwZShyY3R4LT5tZCksIHRicywgdGJzbGVuLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpZywgc2lnbGVuLCByc2EpOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmgvY3J5cHRvL3JzYS9yc2Ffc2lnbi5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRv L3JzYS9yc2Ffc2lnbi5jCistLS0gb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3JzYS9yc2Ffc2lnbi5j LmZpcHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEu MC4yaC9jcnlwdG8vcnNhL3JzYV9zaWduLmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MzUzMjEzMjMg KzAyMDAKK0BAIC0xMzIsNyArMTMyLDEwIEBAIGludCBSU0Ffc2lnbihpbnQgdHlwZSwgY29uc3Qg dW5zaWduZWQgY2gKKyAgICAgICAgIGkyZF9YNTA5X1NJRygmc2lnLCAmcCk7CisgICAgICAgICBz ID0gdG1wczsKKyAgICAgfQorLSAgICBpID0gUlNBX3ByaXZhdGVfZW5jcnlwdChpLCBzLCBzaWdy ZXQsIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOworKyAgICAvKiBOQjogY2FsbCB1bmRlcmx5aW5n IG1ldGhvZCBkaXJlY3RseSB0byBhdm9pZCBGSVBTIGJsb2NraW5nICovCisrICAgIGkgPSByc2Et Pm1ldGgtPnJzYV9wcml2X2VuYyA/IHJzYS0+bWV0aC0+cnNhX3ByaXZfZW5jKGksIHMsIHNpZ3Jl dCwgcnNhLAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBSU0FfUEtDUzFfUEFERElORykgOgorKyAgICAgICAgMDsKKyAgICAgaWYgKGkg PD0gMCkKKyAgICAgICAgIHJldCA9IDA7CisgICAgIGVsc2UKK0BAIC0xODgsOCArMTkxLDEwIEBA IGludCBpbnRfcnNhX3ZlcmlmeShpbnQgZHR5cGUsIGNvbnN0IHVuc2kKKyAgICAgfQorIAorICAg ICBpZiAoKGR0eXBlID09IE5JRF9tZDVfc2hhMSkgJiYgcm0pIHsKKy0gICAgICAgIGkgPSBSU0Ff cHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sCistICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpZ2J1Ziwgcm0sIHJzYSwgUlNBX1BLQ1MxX1BBRERJTkcpOworKyAgICAgICAgaSA9IHJz YS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2lnbGVu LAorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpZ2J1Ziwgcm0sIHJzYSwKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU0FfUEtDUzFfUEFERElORykKKysgICAgICAg ICAgICA6IDA7CisgICAgICAgICBpZiAoaSA8PSAwKQorICAgICAgICAgICAgIHJldHVybiAwOwor ICAgICAgICAgKnBybV9sZW4gPSBpOworQEAgLTIwNSw3ICsyMTAsMTEgQEAgaW50IGludF9yc2Ff dmVyaWZ5KGludCBkdHlwZSwgY29uc3QgdW5zaQorICAgICAgICAgUlNBZXJyKFJTQV9GX0lOVF9S U0FfVkVSSUZZLCBSU0FfUl9JTlZBTElEX01FU1NBR0VfTEVOR1RIKTsKKyAgICAgICAgIGdvdG8g ZXJyOworICAgICB9CistICAgIGkgPSBSU0FfcHVibGljX2RlY3J5cHQoKGludClzaWdsZW4sIHNp Z2J1ZiwgcywgcnNhLCBSU0FfUEtDUzFfUEFERElORyk7CisrICAgIC8qIE5COiBjYWxsIHVuZGVy bHlpbmcgbWV0aG9kIGRpcmVjdGx5IHRvIGF2b2lkIEZJUFMgYmxvY2tpbmcgKi8KKysgICAgaSA9 IHJzYS0+bWV0aC0+cnNhX3B1Yl9kZWMgPyByc2EtPm1ldGgtPnJzYV9wdWJfZGVjKChpbnQpc2ln bGVuLCBzaWdidWYsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzLCByc2EsCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSU0FfUEtDUzFfUEFERElORykgOgorKyAgICAgICAgMDsK KyAKKyAgICAgaWYgKGkgPD0gMCkKKyAgICAgICAgIGdvdG8gZXJyOworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmgvY3J5cHRvL3NoYS9zaGEuaC5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9zaGEv c2hhLmgKKy0tLSBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vc2hhL3NoYS5oLmZpcHMJMjAxNi0wNS0w MyAxNjo1Nzo1OC40MTMzMTEzNTggKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vc2hh L3NoYS5oCTIwMTYtMDUtMDMgMTY6NTc6NTguODM1MzIxMzIzICswMjAwCitAQCAtMTA1LDkgKzEw NSw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQXN0YXRlX3N0IHsKKyB9IFNIQV9DVFg7CisgCisgIyBp Zm5kZWYgT1BFTlNTTF9OT19TSEEwCistIyAgaWZkZWYgT1BFTlNTTF9GSVBTCistaW50IHByaXZh dGVfU0hBX0luaXQoU0hBX0NUWCAqYyk7CistIyAgZW5kaWYKKyBpbnQgU0hBX0luaXQoU0hBX0NU WCAqYyk7CisgaW50IFNIQV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6 ZV90IGxlbik7CisgaW50IFNIQV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7 CitAQCAtMTE1LDkgKzExMiw2IEBAIHVuc2lnbmVkIGNoYXIgKlNIQShjb25zdCB1bnNpZ25lZCBj aGFyICoKKyB2b2lkIFNIQV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hh ciAqZGF0YSk7CisgIyBlbmRpZgorICMgaWZuZGVmIE9QRU5TU0xfTk9fU0hBMQorLSMgIGlmZGVm IE9QRU5TU0xfRklQUworLWludCBwcml2YXRlX1NIQTFfSW5pdChTSEFfQ1RYICpjKTsKKy0jICBl bmRpZgorIGludCBTSEExX0luaXQoU0hBX0NUWCAqYyk7CisgaW50IFNIQTFfVXBkYXRlKFNIQV9D VFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworIGludCBTSEExX0ZpbmFsKHVu c2lnbmVkIGNoYXIgKm1kLCBTSEFfQ1RYICpjKTsKK0BAIC0xMzksMTAgKzEzMyw2IEBAIHR5cGVk ZWYgc3RydWN0IFNIQTI1NnN0YXRlX3N0IHsKKyB9IFNIQTI1Nl9DVFg7CisgCisgIyBpZm5kZWYg T1BFTlNTTF9OT19TSEEyNTYKKy0jICBpZmRlZiBPUEVOU1NMX0ZJUFMKKy1pbnQgcHJpdmF0ZV9T SEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKKy1pbnQgcHJpdmF0ZV9TSEEyNTZfSW5pdChTSEEy NTZfQ1RYICpjKTsKKy0jICBlbmRpZgorIGludCBTSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsK KyBpbnQgU0hBMjI0X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXpl X3QgbGVuKTsKKyBpbnQgU0hBMjI0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RY ICpjKTsKK0BAIC0xOTIsMTAgKzE4Miw2IEBAIHR5cGVkZWYgc3RydWN0IFNIQTUxMnN0YXRlX3N0 IHsKKyAjIGVuZGlmCisgCisgIyBpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKy0jICBpZmRlZiBP UEVOU1NMX0ZJUFMKKy1pbnQgcHJpdmF0ZV9TSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKKy1p bnQgcHJpdmF0ZV9TSEE1MTJfSW5pdChTSEE1MTJfQ1RYICpjKTsKKy0jICBlbmRpZgorIGludCBT SEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKKyBpbnQgU0hBMzg0X1VwZGF0ZShTSEE1MTJfQ1RY ICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKKyBpbnQgU0hBMzg0X0ZpbmFsKHVu c2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJo L2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9zaGEvc2hh X2xvY2wuaAorLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9zaGEvc2hhX2xvY2wuaC5maXBzCTIw MTYtMDUtMDMgMTY6NTc6NTguNDE1MzExNDA1ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvY3J5 cHRvL3NoYS9zaGFfbG9jbC5oCTIwMTYtMDUtMDMgMTY6NTc6NTguODM1MzIxMzIzICswMjAwCitA QCAtMTIzLDExICsxMjMsMTQgQEAgdm9pZCBzaGExX2Jsb2NrX2RhdGFfb3JkZXIoU0hBX0NUWCAq YywgYworICNkZWZpbmUgSU5JVF9EQVRBX2g0IDB4YzNkMmUxZjBVTAorIAorICNpZmRlZiBTSEFf MAorLWZpcHNfbWRfaW5pdChTSEEpCisrbm9uZmlwc19tZF9pbml0KFNIQSkKKyAjZWxzZQorIGZp cHNfbWRfaW5pdF9jdHgoU0hBMSwgU0hBKQorICNlbmRpZgorIHsKKysjaWYgZGVmaW5lZChTSEFf MSkgJiYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisrICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsK KysjZW5kaWYKKyAgICAgbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworICAgICBjLT5oMCA9IElO SVRfREFUQV9oMDsKKyAgICAgYy0+aDEgPSBJTklUX0RBVEFfaDE7CitkaWZmIC11cCBvcGVuc3Ns LTEuMC4yaC9jcnlwdG8vc2hhL3NoYTI1Ni5jLmZpcHMgb3BlbnNzbC0xLjAuMmgvY3J5cHRvL3No YS9zaGEyNTYuYworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9zaGEvc2hhMjU2LmMuZmlwcwky MDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2Ny eXB0by9zaGEvc2hhMjU2LmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MzUzMjEzMjMgKzAyMDAKK0BA IC0xMiwxMiArMTIsMTkgQEAKKyAKKyAjIGluY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgIyBp bmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrIyAgaW5jbHVk ZSA8b3BlbnNzbC9maXBzLmg+CisrIyBlbmRpZgorKworICMgaW5jbHVkZSA8b3BlbnNzbC9vcGVu c3Nsdi5oPgorIAorIGNvbnN0IGNoYXIgU0hBMjU2X3ZlcnNpb25bXSA9ICJTSEEtMjU2IiBPUEVO U1NMX1ZFUlNJT05fUFRFWFQ7CisgCisgZmlwc19tZF9pbml0X2N0eChTSEEyMjQsIFNIQTI1NikK KyB7CisrIyBpZmRlZiBPUEVOU1NMX0ZJUFMKKysgICAgRklQU19zZWxmdGVzdF9jaGVjaygpOwor KyMgZW5kaWYKKyAgICAgbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworICAgICBjLT5oWzBdID0g MHhjMTA1OWVkOFVMOworICAgICBjLT5oWzFdID0gMHgzNjdjZDUwN1VMOworQEAgLTMzLDYgKzQw LDkgQEAgZmlwc19tZF9pbml0X2N0eChTSEEyMjQsIFNIQTI1NikKKyAKKyBmaXBzX21kX2luaXQo U0hBMjU2KQorIHsKKysjIGlmZGVmIE9QRU5TU0xfRklQUworKyAgICBGSVBTX3NlbGZ0ZXN0X2No ZWNrKCk7CisrIyBlbmRpZgorICAgICBtZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisgICAgIGMt PmhbMF0gPSAweDZhMDllNjY3VUw7CisgICAgIGMtPmhbMV0gPSAweGJiNjdhZTg1VUw7CitkaWZm IC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vc2hhL3NoYTUxMi5jLmZpcHMgb3BlbnNzbC0xLjAu MmgvY3J5cHRvL3NoYS9zaGE1MTIuYworLS0tIG9wZW5zc2wtMS4wLjJoL2NyeXB0by9zaGEvc2hh NTEyLmMuZmlwcwkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5z c2wtMS4wLjJoL2NyeXB0by9zaGEvc2hhNTEyLmMJMjAxNi0wNS0wMyAxNjo1Nzo1OC44MzUzMjEz MjMgKzAyMDAKK0BAIC01LDYgKzUsMTAgQEAKKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAqLworICNpbmNs dWRlIDxvcGVuc3NsL29wZW5zc2xjb25mLmg+CisrI2lmZGVmIE9QRU5TU0xfRklQUworKyMgaW5j bHVkZSA8b3BlbnNzbC9maXBzLmg+CisrI2VuZGlmCisrCisgI2lmICFkZWZpbmVkKE9QRU5TU0xf Tk9fU0hBKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQTUxMikKKyAvKi0KKyAgKiBJTVBMRU1F TlRBVElPTiBOT1RFUy4KK0BAIC02Miw2ICs2Niw5IEBAIGNvbnN0IGNoYXIgU0hBNTEyX3ZlcnNp b25bXSA9ICJTSEEtNTEyIgorIAorIGZpcHNfbWRfaW5pdF9jdHgoU0hBMzg0LCBTSEE1MTIpCisg eworKyMgaWZkZWYgT1BFTlNTTF9GSVBTCisrICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysj IGVuZGlmCisgICAgIGMtPmhbMF0gPSBVNjQoMHhjYmJiOWQ1ZGMxMDU5ZWQ4KTsKKyAgICAgYy0+ aFsxXSA9IFU2NCgweDYyOWEyOTJhMzY3Y2Q1MDcpOworICAgICBjLT5oWzJdID0gVTY0KDB4OTE1 OTAxNWEzMDcwZGQxNyk7CitAQCAtODAsNiArODcsOSBAQCBmaXBzX21kX2luaXRfY3R4KFNIQTM4 NCwgU0hBNTEyKQorIAorIGZpcHNfbWRfaW5pdChTSEE1MTIpCisgeworKyMgaWZkZWYgT1BFTlNT TF9GSVBTCisrICAgIEZJUFNfc2VsZnRlc3RfY2hlY2soKTsKKysjIGVuZGlmCisgICAgIGMtPmhb MF0gPSBVNjQoMHg2YTA5ZTY2N2YzYmNjOTA4KTsKKyAgICAgYy0+aFsxXSA9IFU2NCgweGJiNjdh ZTg1ODRjYWE3M2IpOworICAgICBjLT5oWzJdID0gVTY0KDB4M2M2ZWYzNzJmZTk0ZjgyYik7Citk aWZmIC11cCBvcGVuc3NsLTEuMC4yaC9jcnlwdG8vd2hybHBvb2wvd3BfZGdzdC5jLmZpcHMgb3Bl bnNzbC0xLjAuMmgvY3J5cHRvL3docmxwb29sL3dwX2Rnc3QuYworLS0tIG9wZW5zc2wtMS4wLjJo L2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMuZmlwcwkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2NyeXB0by93aHJscG9vbC93cF9kZ3N0LmMJ MjAxNi0wNS0wMyAxNjo1Nzo1OC44MzYzMjEzNDYgKzAyMDAKK0BAIC01NSw3ICs1NSw3IEBACisg I2luY2x1ZGUgPG9wZW5zc2wvY3J5cHRvLmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorIAorLWZp cHNfbWRfaW5pdChXSElSTFBPT0wpCisrbm9uZmlwc19tZF9pbml0KFdISVJMUE9PTCkKKyB7Cisg ICAgIG1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKKyAgICAgcmV0dXJuICgxKTsKK2RpZmYgLXVw IG9wZW5zc2wtMS4wLjJoL01ha2VmaWxlLm9yZy5maXBzIG9wZW5zc2wtMS4wLjJoL01ha2VmaWxl Lm9yZworLS0tIG9wZW5zc2wtMS4wLjJoL01ha2VmaWxlLm9yZy5maXBzCTIwMTYtMDUtMDMgMTY6 NTc6NTguNzkxMzIwMjg0ICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvTWFrZWZpbGUub3JnCTIw MTYtMDUtMDMgMTY6NTc6NTguODM2MzIxMzQ2ICswMjAwCitAQCAtMTM3LDYgKzEzNyw5IEBAIEZJ UFNDQU5MSUI9CisgCisgQkFTRUFERFI9CisgCisrIyBOb24tZW1wdHkgaWYgRklQUyBlbmFibGVk CisrRklQUz0KKysKKyBESVJTPSAgIGNyeXB0byBzc2wgZW5naW5lcyBhcHBzIHRlc3QgdG9vbHMK KyBFTkdESVJTPSBjY2dvc3QKKyBTSExJQkRJUlM9IGNyeXB0byBzc2wKK0BAIC0xNDksNyArMTUy LDcgQEAgU0RJUlM9ICBcCisgCWJuIGVjIHJzYSBkc2EgZWNkc2EgZGggZWNkaCBkc28gZW5naW5l IFwKKyAJYnVmZmVyIGJpbyBzdGFjayBsaGFzaCByYW5kIGVyciBcCisgCWV2cCBhc24xIHBlbSB4 NTA5IHg1MDl2MyBjb25mIHR4dF9kYiBwa2NzNyBwa2NzMTIgY29tcCBvY3NwIHVpIGtyYjUgXAor LQljbXMgcHF1ZXVlIHRzIGpwYWtlIHNycCBzdG9yZSBjbWFjCisrCWNtcyBwcXVldWUgdHMganBh a2Ugc3JwIHN0b3JlIGNtYWMgZmlwcworICMga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGFib3ZlIGxp c3QgaXMgYWRqdXN0ZWQgYnkgLi9Db25maWd1cmUKKyAjIGFjY29yZGluZyB0byBuby14eHggYXJn dW1lbnRzLi4uCisgCitAQCAtMjM5LDYgKzI0Miw3IEBAIEJVSUxERU5WPQlMQ19BTEw9QyBQTEFU Rk9STT0nJChQTEFURk9STSkKKyAJCUZJUFNMSUJESVI9JyR7RklQU0xJQkRJUn0nCQkJXAorIAkJ RklQU0RJUj0nJHtGSVBTRElSfScJCQkJXAorIAkJRklQU0NBTkxJQj0iJCR7RklQU0NBTkxJQjot JChGSVBTQ0FOTElCKX0iCVwKKysJCUZJUFM9IiQke0ZJUFM6LSQoRklQUyl9IglcCisgCQlUSElT PSQke1RISVM6LSRAfSBNQUtFRklMRT1NYWtlZmlsZSBNQUtFT1ZFUlJJREVTPQorICMgTUFLRU9W RVJSSURFUz0gZWZmZWN0aXZlbHkgImVxdWFsaXplcyIgR05VLWlzaCBhbmQgU3lzVi1pc2ggbWFr ZSBmbGF2b3JzLAorICMgd2hpY2ggaW4gdHVybiBlbGltaW5hdGVzIGFtYmlndWl0aWVzIGluIHZh cmlhYmxlIHRyZWF0bWVudCB3aXRoIC1lLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvc3NsL3Nz bF9hbGdzLmMuZmlwcyBvcGVuc3NsLTEuMC4yaC9zc2wvc3NsX2FsZ3MuYworLS0tIG9wZW5zc2wt MS4wLjJoL3NzbC9zc2xfYWxncy5jLmZpcHMJMjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9zc2wvc3NsX2FsZ3MuYwkyMDE2LTA1LTAzIDE2OjU3 OjU4LjgzNjMyMTM0NiArMDIwMAorQEAgLTY0LDYgKzY0LDExIEBACisgaW50IFNTTF9saWJyYXJ5 X2luaXQodm9pZCkKKyB7CisgCisrI2lmZGVmIE9QRU5TU0xfRklQUworKyAgICBPUEVOU1NMX2lu aXRfbGlicmFyeSgpOworKyAgICBpZiAoIUZJUFNfbW9kZSgpKSB7CisrI2VuZGlmCisrCisgI2lm bmRlZiBPUEVOU1NMX05PX0RFUworICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2NiYygpKTsK KyAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Rlc19lZGUzX2NiYygpKTsKK0BAIC0xNDIsNiArMTQ3 LDQ4IEBAIGludCBTU0xfbGlicmFyeV9pbml0KHZvaWQpCisgICAgIEVWUF9hZGRfZGlnZXN0KEVW UF9zaGEoKSk7CisgICAgIEVWUF9hZGRfZGlnZXN0KEVWUF9kc3MoKSk7CisgI2VuZGlmCisrI2lm ZGVmIE9QRU5TU0xfRklQUworKyAgICB9IGVsc2UgeworKyMgaWZuZGVmIE9QRU5TU0xfTk9fREVT CisrICAgICAgICBFVlBfYWRkX2NpcGhlcihFVlBfZGVzX2VkZTNfY2JjKCkpOworKyMgZW5kaWYK KysjIGlmbmRlZiBPUEVOU1NMX05PX0FFUworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Fl c18xMjhfY2JjKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xOTJfY2JjKCkp OworKyAgICAgICAgRVZQX2FkZF9jaXBoZXIoRVZQX2Flc18yNTZfY2JjKCkpOworKyAgICAgICAg RVZQX2FkZF9jaXBoZXIoRVZQX2Flc18xMjhfZ2NtKCkpOworKyAgICAgICAgRVZQX2FkZF9jaXBo ZXIoRVZQX2Flc18yNTZfZ2NtKCkpOworKyMgZW5kaWYKKysjIGlmbmRlZiBPUEVOU1NMX05PX01E NQorKyAgICAgICAgLyogbmVlZGVkIGV2ZW4gaW4gdGhlIEZJUFMgbW9kZSBmb3IgVExTIE1BQyAq LworKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX21kNSgpKTsKKysgICAgICAgIEVWUF9hZGRf ZGlnZXN0X2FsaWFzKFNOX21kNSwgInNzbDItbWQ1Iik7CisrICAgICAgICBFVlBfYWRkX2RpZ2Vz dF9hbGlhcyhTTl9tZDUsICJzc2wzLW1kNSIpOworKyMgZW5kaWYKKysjIGlmbmRlZiBPUEVOU1NM X05PX1NIQQorKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTEoKSk7IC8qIFJTQSB3aXRo IHNoYTEgKi8KKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTEsICJzc2wzLXNo YTEiKTsKKysgICAgICAgIEVWUF9hZGRfZGlnZXN0X2FsaWFzKFNOX3NoYTFXaXRoUlNBRW5jcnlw dGlvbiwgU05fc2hhMVdpdGhSU0EpOworKyMgZW5kaWYKKysjIGlmbmRlZiBPUEVOU1NMX05PX1NI QTI1NgorKyAgICAgICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTIyNCgpKTsKKysgICAgICAgIEVW UF9hZGRfZGlnZXN0KEVWUF9zaGEyNTYoKSk7CisrIyBlbmRpZgorKyMgaWZuZGVmIE9QRU5TU0xf Tk9fU0hBNTEyCisrICAgICAgICBFVlBfYWRkX2RpZ2VzdChFVlBfc2hhMzg0KCkpOworKyAgICAg ICAgRVZQX2FkZF9kaWdlc3QoRVZQX3NoYTUxMigpKTsKKysjIGVuZGlmCisrIyBpZiAhZGVmaW5l ZChPUEVOU1NMX05PX1NIQSkgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19EU0EpCisrICAgICAgICBF VlBfYWRkX2RpZ2VzdChFVlBfZHNzMSgpKTsgLyogRFNBIHdpdGggc2hhMSAqLworKyAgICAgICAg RVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsIFNOX2RzYVdpdGhTSEExXzIpOwor KyAgICAgICAgRVZQX2FkZF9kaWdlc3RfYWxpYXMoU05fZHNhV2l0aFNIQTEsICJEU1MxIik7Cisr ICAgICAgICBFVlBfYWRkX2RpZ2VzdF9hbGlhcyhTTl9kc2FXaXRoU0hBMSwgImRzczEiKTsKKysj IGVuZGlmCisrIyBpZm5kZWYgT1BFTlNTTF9OT19FQ0RTQQorKyAgICAgICAgRVZQX2FkZF9kaWdl c3QoRVZQX2VjZHNhKCkpOworKyMgZW5kaWYKKysgICAgfQorKyNlbmRpZgorICNpZm5kZWYgT1BF TlNTTF9OT19DT01QCisgICAgIC8qCisgICAgICAqIFRoaXMgd2lsbCBpbml0aWFsaXNlIHRoZSBi dWlsdC1pbiBjb21wcmVzc2lvbiBhbGdvcml0aG1zLiBUaGUgdmFsdWUKCmRpZmYgLS1naXQgYS9v cGVuc3NsLTEuMC4yaC10cnVzdGVkLWZpcnN0LWRvYy5wYXRjaCBiL29wZW5zc2wtMS4wLjJoLXRy dXN0ZWQtZmlyc3QtZG9jLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LjhlYTg1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuc3NsLTEuMC4yaC10cnVzdGVkLWZpcnN0 LWRvYy5wYXRjaApAQCAtMCwwICsxLDI4NiBAQAorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvYXBw cy9jbXMuYy50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjJoL2FwcHMvY21zLmMKKy0tLSBvcGVu c3NsLTEuMC4yaC9hcHBzL2Ntcy5jLnRydXN0ZWQtZmlyc3QJMjAxNi0wNS0wMyAxNTo0NDo0Mi4w MDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9hcHBzL2Ntcy5jCTIwMTYtMDUtMDMg MTg6MDE6MTYuNzI5NTU2OTc2ICswMjAwCitAQCAtNjQ2LDYgKzY0Niw4IEBAIGludCBNQUlOKGlu dCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgICAgICAgICAgICAgIi1DQXBhdGggZGlyICAg IHRydXN0ZWQgY2VydGlmaWNhdGVzIGRpcmVjdG9yeVxuIik7CisgICAgICAgICBCSU9fcHJpbnRm KGJpb19lcnIsICItQ0FmaWxlIGZpbGUgICB0cnVzdGVkIGNlcnRpZmljYXRlcyBmaWxlXG4iKTsK KyAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwKKysgICAgICAgICAgICAgICAgICAgIi10cnVz dGVkX2ZpcnN0IHVzZSB0cnVzdGVkIGNlcnRpZmljYXRlcyBmaXJzdCB3aGVuIGJ1aWxkaW5nIHRo ZSB0cnVzdCBjaGFpblxuIik7CisrICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsCisgICAgICAg ICAgICAgICAgICAgICItbm9fYWx0X2NoYWlucyBvbmx5IGV2ZXIgdXNlIHRoZSBmaXJzdCBjZXJ0 aWZpY2F0ZSBjaGFpbiBmb3VuZFxuIik7CisgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsCisg ICAgICAgICAgICAgICAgICAgICItY3JsX2NoZWNrICAgICBjaGVjayByZXZvY2F0aW9uIHN0YXR1 cyBvZiBzaWduZXIncyBjZXJ0aWZpY2F0ZSB1c2luZyBDUkxzXG4iKTsKK2RpZmYgLXVwIG9wZW5z c2wtMS4wLjJoL2FwcHMvb2NzcC5jLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMmgvYXBwcy9v Y3NwLmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9hcHBzL29jc3AuYy50cnVzdGVkLWZpcnN0CTIwMTYt MDUtMDMgMTU6NDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvYXBwcy9v Y3NwLmMJMjAxNi0wNS0wMyAxODowMToxNi43MzA1NTY5OTggKzAyMDAKK0BAIC01MzcsNiArNTM3 LDggQEAgaW50IE1BSU4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorICAgICAgICAgQklPX3ByaW50 ZihiaW9fZXJyLAorICAgICAgICAgICAgICAgICAgICAiLUNBZmlsZSBmaWxlICAgICAgICAgdHJ1 c3RlZCBjZXJ0aWZpY2F0ZXMgZmlsZVxuIik7CisgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIs CisrICAgICAgICAgICAgICAgICAgICItdHJ1c3RlZF9maXJzdCAgICAgICB1c2UgdHJ1c3RlZCBj ZXJ0aWZpY2F0ZXMgZmlyc3Qgd2hlbiBidWlsZGluZyB0aGUgdHJ1c3QgY2hhaW5cbiIpOworKyAg ICAgICAgQklPX3ByaW50ZihiaW9fZXJyLAorICAgICAgICAgICAgICAgICAgICAiLW5vX2FsdF9j aGFpbnMgICAgICAgb25seSBldmVyIHVzZSB0aGUgZmlyc3QgY2VydGlmaWNhdGUgY2hhaW4gZm91 bmRcbiIpOworICAgICAgICAgQklPX3ByaW50ZihiaW9fZXJyLAorICAgICAgICAgICAgICAgICAg ICAiLVZBZmlsZSBmaWxlICAgICAgICAgdmFsaWRhdG9yIGNlcnRpZmljYXRlcyBmaWxlXG4iKTsK K2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2FwcHMvc19jbGllbnQuYy50cnVzdGVkLWZpcnN0IG9w ZW5zc2wtMS4wLjJoL2FwcHMvc19jbGllbnQuYworLS0tIG9wZW5zc2wtMS4wLjJoL2FwcHMvc19j bGllbnQuYy50cnVzdGVkLWZpcnN0CTIwMTYtMDUtMDMgMTg6MDE6MTYuNjk2NTU2MjQ2ICswMjAw CisrKysgb3BlbnNzbC0xLjAuMmgvYXBwcy9zX2NsaWVudC5jCTIwMTYtMDUtMDMgMTg6MDE6MTYu NzMwNTU2OTk4ICswMjAwCitAQCAtMzMzLDYgKzMzMyw4IEBAIHN0YXRpYyB2b2lkIHNjX3VzYWdl KHZvaWQpCisgICAgIEJJT19wcmludGYoYmlvX2VyciwgIiAtQ0FwYXRoIGFyZyAgIC0gUEVNIGZv cm1hdCBkaXJlY3Rvcnkgb2YgQ0Enc1xuIik7CisgICAgIEJJT19wcmludGYoYmlvX2VyciwgIiAt Q0FmaWxlIGFyZyAgIC0gUEVNIGZvcm1hdCBmaWxlIG9mIENBJ3NcbiIpOworICAgICBCSU9fcHJp bnRmKGJpb19lcnIsCisrICAgICAgICAgICAgICAgIiAtdHJ1c3RlZF9maXJzdCAtIFVzZSB0cnVz dGVkIENBJ3MgZmlyc3Qgd2hlbiBidWlsZGluZyB0aGUgdHJ1c3QgY2hhaW5cbiIpOworKyAgICBC SU9fcHJpbnRmKGJpb19lcnIsCisgICAgICAgICAgICAgICAgIiAtbm9fYWx0X2NoYWlucyAtIG9u bHkgZXZlciB1c2UgdGhlIGZpcnN0IGNlcnRpZmljYXRlIGNoYWluIGZvdW5kXG4iKTsKKyAgICAg QklPX3ByaW50ZihiaW9fZXJyLAorICAgICAgICAgICAgICAgICIgLXJlY29ubmVjdCAgICAtIERy b3AgYW5kIHJlLW1ha2UgdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2FtZSBTZXNzaW9uLUlEXG4i KTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2FwcHMvc21pbWUuYy50cnVzdGVkLWZpcnN0IG9w ZW5zc2wtMS4wLjJoL2FwcHMvc21pbWUuYworLS0tIG9wZW5zc2wtMS4wLjJoL2FwcHMvc21pbWUu Yy50cnVzdGVkLWZpcnN0CTIwMTYtMDUtMDMgMTU6NDQ6NDIuMDAwMDAwMDAwICswMjAwCisrKysg b3BlbnNzbC0xLjAuMmgvYXBwcy9zbWltZS5jCTIwMTYtMDUtMDMgMTg6MDE6MTYuNzMwNTU2OTk4 ICswMjAwCitAQCAtNDQyLDYgKzQ0Miw4IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJn dikKKyAgICAgICAgICAgICAgICAgICAgIi1DQXBhdGggZGlyICAgIHRydXN0ZWQgY2VydGlmaWNh dGVzIGRpcmVjdG9yeVxuIik7CisgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsICItQ0FmaWxl IGZpbGUgICB0cnVzdGVkIGNlcnRpZmljYXRlcyBmaWxlXG4iKTsKKyAgICAgICAgIEJJT19wcmlu dGYoYmlvX2VyciwKKysgICAgICAgICAgICAgICAgICAgIi10cnVzdGVkX2ZpcnN0IHVzZSB0cnVz dGVkIGNlcnRpZmljYXRlcyBmaXJzdCB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpblxuIik7 CisrICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsCisgICAgICAgICAgICAgICAgICAgICItbm9f YWx0X2NoYWlucyBvbmx5IGV2ZXIgdXNlIHRoZSBmaXJzdCBjZXJ0aWZpY2F0ZSBjaGFpbiBmb3Vu ZFxuIik7CisgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsCisgICAgICAgICAgICAgICAgICAg ICItY3JsX2NoZWNrICAgICBjaGVjayByZXZvY2F0aW9uIHN0YXR1cyBvZiBzaWduZXIncyBjZXJ0 aWZpY2F0ZSB1c2luZyBDUkxzXG4iKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2FwcHMvc19z ZXJ2ZXIuYy50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjJoL2FwcHMvc19zZXJ2ZXIuYworLS0t IG9wZW5zc2wtMS4wLjJoL2FwcHMvc19zZXJ2ZXIuYy50cnVzdGVkLWZpcnN0CTIwMTYtMDUtMDMg MTg6MDE6MTYuNjY2NTU1NTgzICswMjAwCisrKysgb3BlbnNzbC0xLjAuMmgvYXBwcy9zX3NlcnZl ci5jCTIwMTYtMDUtMDMgMTg6MDE6MTYuNzMxNTU3MDIwICswMjAwCitAQCAtNTc4LDYgKzU3OCw4 IEBAIHN0YXRpYyB2b2lkIHN2X3VzYWdlKHZvaWQpCisgICAgIEJJT19wcmludGYoYmlvX2Vyciwg IiAtQ0FwYXRoIGFyZyAgIC0gUEVNIGZvcm1hdCBkaXJlY3Rvcnkgb2YgQ0Enc1xuIik7CisgICAg IEJJT19wcmludGYoYmlvX2VyciwgIiAtQ0FmaWxlIGFyZyAgIC0gUEVNIGZvcm1hdCBmaWxlIG9m IENBJ3NcbiIpOworICAgICBCSU9fcHJpbnRmKGJpb19lcnIsCisrICAgICAgICAgICAgICAgIiAt dHJ1c3RlZF9maXJzdCAtIFVzZSB0cnVzdGVkIENBJ3MgZmlyc3Qgd2hlbiBidWlsZGluZyB0aGUg dHJ1c3QgY2hhaW5cbiIpOworKyAgICBCSU9fcHJpbnRmKGJpb19lcnIsCisgICAgICAgICAgICAg ICAgIiAtbm9fYWx0X2NoYWlucyAtIG9ubHkgZXZlciB1c2UgdGhlIGZpcnN0IGNlcnRpZmljYXRl IGNoYWluIGZvdW5kXG4iKTsKKyAgICAgQklPX3ByaW50ZihiaW9fZXJyLAorICAgICAgICAgICAg ICAgICIgLW5vY2VydCAgICAgICAtIERvbid0IHVzZSBhbnkgY2VydGlmaWNhdGVzIChBbm9uLURI KVxuIik7CitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9hcHBzL3NfdGltZS5jLnRydXN0ZWQtZmly c3Qgb3BlbnNzbC0xLjAuMmgvYXBwcy9zX3RpbWUuYworLS0tIG9wZW5zc2wtMS4wLjJoL2FwcHMv c190aW1lLmMudHJ1c3RlZC1maXJzdAkyMDE2LTA1LTAzIDE4OjAxOjE2LjY2MTU1NTQ3MiArMDIw MAorKysrIG9wZW5zc2wtMS4wLjJoL2FwcHMvc190aW1lLmMJMjAxNi0wNS0wMyAxODowMToxNi43 MzE1NTcwMjAgKzAyMDAKK0BAIC0xODIsNiArMTgyLDcgQEAgc3RhdGljIHZvaWQgc190aW1lX3Vz YWdlKHZvaWQpCisgICAgICAgICAgICAgICAgIGZpbGUgaWYgbm90IHNwZWNpZmllZCBieSB0aGlz IG9wdGlvblxuXAorIC1DQXBhdGggYXJnICAgLSBQRU0gZm9ybWF0IGRpcmVjdG9yeSBvZiBDQSdz XG5cCisgLUNBZmlsZSBhcmcgICAtIFBFTSBmb3JtYXQgZmlsZSBvZiBDQSdzXG5cCisrLXRydXN0 ZWRfZmlyc3QgLSBVc2UgdHJ1c3RlZCBDQSdzIGZpcnN0IHdoZW4gYnVpbGRpbmcgdGhlIHRydXN0 IGNoYWluXG5cCisgLWNpcGhlciAgICAgICAtIHByZWZlcnJlZCBjaXBoZXIgdG8gdXNlLCBwbGF5 IHdpdGggJ29wZW5zc2wgY2lwaGVycydcblxuIjsKKyAKKyAgICAgcHJpbnRmKCJ1c2FnZTogc190 aW1lIDxhcmdzPlxuXG4iKTsKK2RpZmYgLXVwIG9wZW5zc2wtMS4wLjJoL2FwcHMvdHMuYy50cnVz dGVkLWZpcnN0IG9wZW5zc2wtMS4wLjJoL2FwcHMvdHMuYworLS0tIG9wZW5zc2wtMS4wLjJoL2Fw cHMvdHMuYy50cnVzdGVkLWZpcnN0CTIwMTYtMDUtMDMgMTg6MDE6MTYuNjk0NTU2MjAyICswMjAw CisrKysgb3BlbnNzbC0xLjAuMmgvYXBwcy90cy5jCTIwMTYtMDUtMDMgMTg6MDE6MTYuNzMxNTU3 MDIwICswMjAwCitAQCAtMzUyLDcgKzM1Miw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoq YXJndikKKyAgICAgICAgICAgICAgICAidHMgLXZlcmlmeSBbLWRhdGEgZmlsZV90b19oYXNoXSBb LWRpZ2VzdCBkaWdlc3RfYnl0ZXNdICIKKyAgICAgICAgICAgICAgICAiWy1xdWVyeWZpbGUgcmVx dWVzdC50c3FdICIKKyAgICAgICAgICAgICAgICAiLWluIHJlc3BvbnNlLnRzciBbLXRva2VuX2lu XSAiCistICAgICAgICAgICAgICAgIi1DQXBhdGggY2FfcGF0aCAtQ0FmaWxlIGNhX2ZpbGUucGVt ICIKKysgICAgICAgICAgICAgICAiLUNBcGF0aCBjYV9wYXRoIC1DQWZpbGUgY2FfZmlsZS5wZW0g LXRydXN0ZWRfZmlyc3QiCisgICAgICAgICAgICAgICAgIi11bnRydXN0ZWQgY2VydF9maWxlLnBl bVxuIik7CisgIGNsZWFudXA6CisgICAgIC8qIENsZWFuIHVwLiAqLworZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmgvYXBwcy92ZXJpZnkuYy50cnVzdGVkLWZpcnN0IG9wZW5zc2wtMS4wLjJoL2FwcHMv dmVyaWZ5LmMKKy0tLSBvcGVuc3NsLTEuMC4yaC9hcHBzL3ZlcmlmeS5jLnRydXN0ZWQtZmlyc3QJ MjAxNi0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9h cHBzL3ZlcmlmeS5jCTIwMTYtMDUtMDMgMTg6MDE6MTYuNzMxNTU3MDIwICswMjAwCitAQCAtMjMx LDcgKzIzMSw3IEBAIGludCBNQUlOKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgZW5kOgorICAg ICBpZiAocmV0ID09IDEpIHsKKyAgICAgICAgIEJJT19wcmludGYoYmlvX2VyciwKKy0gICAgICAg ICAgICAgICAgICAgInVzYWdlOiB2ZXJpZnkgWy12ZXJib3NlXSBbLUNBcGF0aCBwYXRoXSBbLUNB ZmlsZSBmaWxlXSBbLXB1cnBvc2UgcHVycG9zZV0gWy1jcmxfY2hlY2tdIik7CisrICAgICAgICAg ICAgICAgICAgICJ1c2FnZTogdmVyaWZ5IFstdmVyYm9zZV0gWy1DQXBhdGggcGF0aF0gWy1DQWZp bGUgZmlsZV0gWy10cnVzdGVkX2ZpcnN0XSBbLXB1cnBvc2UgcHVycG9zZV0gWy1jcmxfY2hlY2td Iik7CisgICAgICAgICBCSU9fcHJpbnRmKGJpb19lcnIsICIgWy1ub19hbHRfY2hhaW5zXSBbLWF0 dGltZSB0aW1lc3RhbXBdIik7CisgI2lmbmRlZiBPUEVOU1NMX05PX0VOR0lORQorICAgICAgICAg QklPX3ByaW50ZihiaW9fZXJyLCAiIFstZW5naW5lIGVdIik7CitkaWZmIC11cCBvcGVuc3NsLTEu MC4yaC9kb2MvYXBwcy9jbXMucG9kLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMmgvZG9jL2Fw cHMvY21zLnBvZAorLS0tIG9wZW5zc2wtMS4wLjJoL2RvYy9hcHBzL2Ntcy5wb2QudHJ1c3RlZC1m aXJzdAkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4w LjJoL2RvYy9hcHBzL2Ntcy5wb2QJMjAxNi0wNS0wMyAxODowMToxNi43MzE1NTcwMjAgKzAyMDAK K0BAIC0zNSw2ICszNSw3IEBAIEI8b3BlbnNzbD4gQjxjbXM+CisgW0I8LXByaW50Pl0KKyBbQjwt Q0FmaWxlIGZpbGU+XQorIFtCPC1DQXBhdGggZGlyPl0KKytbQjwtdHJ1c3RlZF9maXJzdD5dCisg W0I8LW5vX2FsdF9jaGFpbnM+XQorIFtCPC1tZCBkaWdlc3Q+XQorIFtCPC1bY2lwaGVyXT5dCitA QCAtMjQ1LDYgKzI0NiwxMiBAQCBCPC12ZXJpZnk+LiBUaGlzIGRpcmVjdG9yeSBtdXN0IGJlIGEg c3RhCisgaXMgYSBoYXNoIG9mIGVhY2ggc3ViamVjdCBuYW1lICh1c2luZyBCPHg1MDkgLWhhc2g+ KSBzaG91bGQgYmUgbGlua2VkCisgdG8gZWFjaCBjZXJ0aWZpY2F0ZS4KKyAKKys9aXRlbSBCPC10 cnVzdGVkX2ZpcnN0PgorKworK1VzZSBjZXJ0aWZpY2F0ZXMgaW4gQ0EgZmlsZSBvciBDQSBkaXJl Y3RvcnkgYmVmb3JlIHVudHJ1c3RlZCBjZXJ0aWZpY2F0ZXMKKytmcm9tIHRoZSBtZXNzYWdlIHdo ZW4gYnVpbGRpbmcgdGhlIHRydXN0IGNoYWluIHRvIHZlcmlmeSBjZXJ0aWZpY2F0ZXMuCisrVGhp cyBpcyBtYWlubHkgdXNlZnVsIGluIGVudmlyb25tZW50cyB3aXRoIEJyaWRnZSBDQSBvciBDcm9z cy1DZXJ0aWZpZWQgQ0FzLgorKworID1pdGVtIEI8LW1kIGRpZ2VzdD4KKyAKKyBkaWdlc3QgYWxn b3JpdGhtIHRvIHVzZSB3aGVuIHNpZ25pbmcgb3IgcmVzaWduaW5nLiBJZiBub3QgcHJlc2VudCB0 aGVuIHRoZQorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvZG9jL2FwcHMvb2NzcC5wb2QudHJ1c3Rl ZC1maXJzdCBvcGVuc3NsLTEuMC4yaC9kb2MvYXBwcy9vY3NwLnBvZAorLS0tIG9wZW5zc2wtMS4w LjJoL2RvYy9hcHBzL29jc3AucG9kLnRydXN0ZWQtZmlyc3QJMjAxNi0wNS0wMyAxODowMToxNi42 OTU1NTYyMjQgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9kb2MvYXBwcy9vY3NwLnBvZAkyMDE2 LTA1LTAzIDE4OjAyOjE2LjAyMTg2ODAxMiArMDIwMAorQEAgLTI5LDYgKzI5LDcgQEAgQjxvcGVu c3NsPiBCPG9jc3A+CisgW0I8LXBhdGg+XQorIFtCPC1DQXBhdGggZGlyPl0KKyBbQjwtQ0FmaWxl IGZpbGU+XQorK1tCPC10cnVzdGVkX2ZpcnN0Pl0KKyBbQjwtbm9fYWx0X2NoYWlucz5dCisgW0I8 LVZBZmlsZSBmaWxlPl0KKyBbQjwtdmFsaWRpdHlfcGVyaW9kIG4+XQorQEAgLTE0NCw2ICsxNDUs MTMgQEAgY29ubmVjdGlvbiB0aW1lb3V0IHRvIHRoZSBPQ1NQIHJlc3BvbmRlcgorIGZpbGUgb3Ig cGF0aG5hbWUgY29udGFpbmluZyB0cnVzdGVkIENBIGNlcnRpZmljYXRlcy4gVGhlc2UgYXJlIHVz ZWQgdG8gdmVyaWZ5CisgdGhlIHNpZ25hdHVyZSBvbiB0aGUgT0NTUCByZXNwb25zZS4KKyAKKys9 aXRlbSBCPC10cnVzdGVkX2ZpcnN0PgorKworK1VzZSBjZXJ0aWZpY2F0ZXMgaW4gQ0EgZmlsZSBv ciBDQSBkaXJlY3Rvcnkgb3ZlciBjZXJ0aWZpY2F0ZXMgcHJvdmlkZWQKKytpbiB0aGUgcmVzcG9u c2Ugb3IgcmVzaWRpbmcgaW4gb3RoZXIgY2VydGlmaWNhdGVzIGZpbGUgd2hlbiBidWlsZGluZyB0 aGUgdHJ1c3QKKytjaGFpbiB0byB2ZXJpZnkgcmVzcG9uZGVyIGNlcnRpZmljYXRlLgorK1RoaXMg aXMgbWFpbmx5IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2l0aCBCcmlkZ2UgQ0Egb3IgQ3Jvc3Mt Q2VydGlmaWVkIENBcy4KKysKKyA9aXRlbSBCPC1ub19hbHRfY2hhaW5zPgorIAorIFNlZSBMPEI8 dmVyaWZ5Pnx2ZXJpZnkoMSk+IG1hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgorZGlmZiAtdXAgb3Bl bnNzbC0xLjAuMmgvZG9jL2FwcHMvc19jbGllbnQucG9kLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0x LjAuMmgvZG9jL2FwcHMvc19jbGllbnQucG9kCistLS0gb3BlbnNzbC0xLjAuMmgvZG9jL2FwcHMv c19jbGllbnQucG9kLnRydXN0ZWQtZmlyc3QJMjAxNi0wNS0wMyAxODowMToxNi43MDY1NTY0Njcg KzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9kb2MvYXBwcy9zX2NsaWVudC5wb2QJMjAxNi0wNS0w MyAxODowMToxNi43MzI1NTcwNDIgKzAyMDAKK0BAIC0xOSw2ICsxOSw3IEBAIEI8b3BlbnNzbD4g QjxzX2NsaWVudD4KKyBbQjwtcGFzcyBhcmc+XQorIFtCPC1DQXBhdGggZGlyZWN0b3J5Pl0KKyBb QjwtQ0FmaWxlIGZpbGVuYW1lPl0KKytbQjwtdHJ1c3RlZF9maXJzdD5dCisgW0I8LW5vX2FsdF9j aGFpbnM+XQorIFtCPC1yZWNvbm5lY3Q+XQorIFtCPC1wYXVzZT5dCitAQCAtMTI0LDcgKzEyNSw3 IEBAIGFsc28gdXNlZCB3aGVuIGJ1aWxkaW5nIHRoZSBjbGllbnQgY2VydGkKKyBBIGZpbGUgY29u dGFpbmluZyB0cnVzdGVkIGNlcnRpZmljYXRlcyB0byB1c2UgZHVyaW5nIHNlcnZlciBhdXRoZW50 aWNhdGlvbgorIGFuZCB0byB1c2Ugd2hlbiBhdHRlbXB0aW5nIHRvIGJ1aWxkIHRoZSBjbGllbnQg Y2VydGlmaWNhdGUgY2hhaW4uCisgCistPWl0ZW0gQjwtcHVycG9zZSwgLWlnbm9yZV9jcml0aWNh bCwgLWlzc3Vlcl9jaGVja3MsIC1jcmxfY2hlY2ssIC1jcmxfY2hlY2tfYWxsLCAtcG9saWN5X2No ZWNrLCAtZXh0ZW5kZWRfY3JsLCAteDUwOV9zdHJpY3QsIC1wb2xpY3kgLWNoZWNrX3NzX3NpZyAt bm9fYWx0X2NoYWlucz4KKys9aXRlbSBCPC1wdXJwb3NlLCAtaWdub3JlX2NyaXRpY2FsLCAtaXNz dWVyX2NoZWNrcywgLWNybF9jaGVjaywgLWNybF9jaGVja19hbGwsIC1wb2xpY3lfY2hlY2ssIC1l eHRlbmRlZF9jcmwsIC14NTA5X3N0cmljdCwgLXBvbGljeSAtY2hlY2tfc3Nfc2lnLCAtdHJ1c3Rl ZF9maXJzdCAtbm9fYWx0X2NoYWlucz4KKyAKKyBTZXQgdmFyaW91cyBjZXJ0aWZpY2F0ZSBjaGFp biB2YWxpYWRpdGlvbiBvcHRpb24uIFNlZSB0aGUKKyBMPEI8dmVyaWZ5Pnx2ZXJpZnkoMSk+IG1h bnVhbCBwYWdlIGZvciBkZXRhaWxzLgorZGlmZiAtdXAgb3BlbnNzbC0xLjAuMmgvZG9jL2FwcHMv c21pbWUucG9kLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMmgvZG9jL2FwcHMvc21pbWUucG9k CistLS0gb3BlbnNzbC0xLjAuMmgvZG9jL2FwcHMvc21pbWUucG9kLnRydXN0ZWQtZmlyc3QJMjAx Ni0wNS0wMyAxNTo0NDo0Mi4wMDAwMDAwMDAgKzAyMDAKKysrKyBvcGVuc3NsLTEuMC4yaC9kb2Mv YXBwcy9zbWltZS5wb2QJMjAxNi0wNS0wMyAxODowMToxNi43MzI1NTcwNDIgKzAyMDAKK0BAIC0x NSw2ICsxNSw5IEBAIEI8b3BlbnNzbD4gQjxzbWltZT4KKyBbQjwtcGs3b3V0Pl0KKyBbQjwtW2Np cGhlcl0+XQorIFtCPC1pbiBmaWxlPl0KKytbQjwtQ0FmaWxlIGZpbGU+XQorK1tCPC1DQXBhdGgg ZGlyPl0KKytbQjwtdHJ1c3RlZF9maXJzdD5dCisgW0I8LW5vX2FsdF9jaGFpbnM+XQorIFtCPC1j ZXJ0ZmlsZSBmaWxlPl0KKyBbQjwtc2lnbmVyIGZpbGU+XQorQEAgLTE0Nyw2ICsxNTAsMTIgQEAg QjwtdmVyaWZ5Pi4gVGhpcyBkaXJlY3RvcnkgbXVzdCBiZSBhIHN0YQorIGlzIGEgaGFzaCBvZiBl YWNoIHN1YmplY3QgbmFtZSAodXNpbmcgQjx4NTA5IC1oYXNoPikgc2hvdWxkIGJlIGxpbmtlZAor IHRvIGVhY2ggY2VydGlmaWNhdGUuCisgCisrPWl0ZW0gQjwtdHJ1c3RlZF9maXJzdD4KKysKKytV c2UgY2VydGlmaWNhdGVzIGluIENBIGZpbGUgb3IgQ0EgZGlyZWN0b3J5IG92ZXIgY2VydGlmaWNh dGVzIHByb3ZpZGVkCisraW4gdGhlIG1lc3NhZ2Ugd2hlbiBidWlsZGluZyB0aGUgdHJ1c3QgY2hh aW4gdG8gdmVyaWZ5IGEgY2VydGlmaWNhdGUuCisrVGhpcyBpcyBtYWlubHkgdXNlZnVsIGluIGVu dmlyb25tZW50cyB3aXRoIEJyaWRnZSBDQSBvciBDcm9zcy1DZXJ0aWZpZWQgQ0FzLgorKworID1p dGVtIEI8LW1kIGRpZ2VzdD4KKyAKKyBkaWdlc3QgYWxnb3JpdGhtIHRvIHVzZSB3aGVuIHNpZ25p bmcgb3IgcmVzaWduaW5nLiBJZiBub3QgcHJlc2VudCB0aGVuIHRoZQorZGlmZiAtdXAgb3BlbnNz bC0xLjAuMmgvZG9jL2FwcHMvc19zZXJ2ZXIucG9kLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAu MmgvZG9jL2FwcHMvc19zZXJ2ZXIucG9kCistLS0gb3BlbnNzbC0xLjAuMmgvZG9jL2FwcHMvc19z ZXJ2ZXIucG9kLnRydXN0ZWQtZmlyc3QJMjAxNi0wNS0wMyAxODowMToxNi43MDY1NTY0NjcgKzAy MDAKKysrKyBvcGVuc3NsLTEuMC4yaC9kb2MvYXBwcy9zX3NlcnZlci5wb2QJMjAxNi0wNS0wMyAx ODowMToxNi43MzI1NTcwNDIgKzAyMDAKK0BAIC0zMyw2ICszMyw3IEBAIEI8b3BlbnNzbD4gQjxz X3NlcnZlcj4KKyBbQjwtc3RhdGU+XQorIFtCPC1DQXBhdGggZGlyZWN0b3J5Pl0KKyBbQjwtQ0Fm aWxlIGZpbGVuYW1lPl0KKytbQjwtdHJ1c3RlZF9maXJzdD5dCisgW0I8LW5vX2FsdF9jaGFpbnM+ XQorIFtCPC1ub2NlcnQ+XQorIFtCPC1jaXBoZXIgY2lwaGVybGlzdD5dCitAQCAtMTc3LDYgKzE3 OCwxMiBAQCBhbmQgdG8gdXNlIHdoZW4gYXR0ZW1wdGluZyB0byBidWlsZCB0aGUKKyBpcyBhbHNv IHVzZWQgaW4gdGhlIGxpc3Qgb2YgYWNjZXB0YWJsZSBjbGllbnQgQ0FzIHBhc3NlZCB0byB0aGUg Y2xpZW50IHdoZW4KKyBhIGNlcnRpZmljYXRlIGlzIHJlcXVlc3RlZC4KKyAKKys9aXRlbSBCPC10 cnVzdGVkX2ZpcnN0PgorKworK1VzZSBjZXJ0aWZpY2F0ZXMgaW4gQ0EgZmlsZSBvciBDQSBkaXJl Y3RvcnkgYmVmb3JlIG90aGVyIGNlcnRpZmljYXRlcyAKKyt3aGVuIGJ1aWxkaW5nIHRoZSB0cnVz dCBjaGFpbiB0byB2ZXJpZnkgY2xpZW50IGNlcnRpZmljYXRlcy4KKytUaGlzIGlzIG1haW5seSB1 c2VmdWwgaW4gZW52aXJvbm1lbnRzIHdpdGggQnJpZGdlIENBIG9yIENyb3NzLUNlcnRpZmllZCBD QXMuCisrCisgPWl0ZW0gQjwtbm9fYWx0X2NoYWlucz4KKyAKKyBTZWUgdGhlIEw8Qjx2ZXJpZnk+ fHZlcmlmeSgxKT4gbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCitkaWZmIC11cCBvcGVuc3NsLTEu MC4yaC9kb2MvYXBwcy9zX3RpbWUucG9kLnRydXN0ZWQtZmlyc3Qgb3BlbnNzbC0xLjAuMmgvZG9j L2FwcHMvc190aW1lLnBvZAorLS0tIG9wZW5zc2wtMS4wLjJoL2RvYy9hcHBzL3NfdGltZS5wb2Qu dHJ1c3RlZC1maXJzdAkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAwMDAwMCArMDIwMAorKysrIG9w ZW5zc2wtMS4wLjJoL2RvYy9hcHBzL3NfdGltZS5wb2QJMjAxNi0wNS0wMyAxODowMToxNi43MzI1 NTcwNDIgKzAyMDAKK0BAIC0xNCw2ICsxNCw3IEBAIEI8b3BlbnNzbD4gQjxzX3RpbWU+CisgW0I8 LWtleSBmaWxlbmFtZT5dCisgW0I8LUNBcGF0aCBkaXJlY3Rvcnk+XQorIFtCPC1DQWZpbGUgZmls ZW5hbWU+XQorK1tCPC10cnVzdGVkX2ZpcnN0Pl0KKyBbQjwtcmV1c2U+XQorIFtCPC1uZXc+XQor IFtCPC12ZXJpZnkgZGVwdGg+XQorQEAgLTc2LDYgKzc3LDEyIEBAIGFsc28gdXNlZCB3aGVuIGJ1 aWxkaW5nIHRoZSBjbGllbnQgY2VydGkKKyBBIGZpbGUgY29udGFpbmluZyB0cnVzdGVkIGNlcnRp ZmljYXRlcyB0byB1c2UgZHVyaW5nIHNlcnZlciBhdXRoZW50aWNhdGlvbgorIGFuZCB0byB1c2Ug d2hlbiBhdHRlbXB0aW5nIHRvIGJ1aWxkIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgY2hhaW4uCisg CisrPWl0ZW0gQjwtdHJ1c3RlZF9maXJzdD4KKysKKytVc2UgY2VydGlmaWNhdGVzIGluIENBIGZp bGUgb3IgQ0EgZGlyZWN0b3J5IG92ZXIgdGhlIGNlcnRpZmljYXRlcyBwcm92aWRlZAorK2J5IHRo ZSBzZXJ2ZXIgd2hlbiBidWlsZGluZyB0aGUgdHJ1c3QgY2hhaW4gdG8gdmVyaWZ5IHNlcnZlciBj ZXJ0aWZpY2F0ZS4KKytUaGlzIGlzIG1haW5seSB1c2VmdWwgaW4gZW52aXJvbm1lbnRzIHdpdGgg QnJpZGdlIENBIG9yIENyb3NzLUNlcnRpZmllZCBDQXMuCisrCisgPWl0ZW0gQjwtbmV3PgorIAor IHBlcmZvcm1zIHRoZSB0aW1pbmcgdGVzdCB1c2luZyBhIG5ldyBzZXNzaW9uIElEIGZvciBlYWNo IGNvbm5lY3Rpb24uCitkaWZmIC11cCBvcGVuc3NsLTEuMC4yaC9kb2MvYXBwcy90cy5wb2QudHJ1 c3RlZC1maXJzdCBvcGVuc3NsLTEuMC4yaC9kb2MvYXBwcy90cy5wb2QKKy0tLSBvcGVuc3NsLTEu MC4yaC9kb2MvYXBwcy90cy5wb2QudHJ1c3RlZC1maXJzdAkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAw MDAwMDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2RvYy9hcHBzL3RzLnBvZAkyMDE2LTA1 LTAzIDE4OjAxOjE2LjczMjU1NzA0MiArMDIwMAorQEAgLTQ2LDYgKzQ2LDcgQEAgQjwtdmVyaWZ5 PgorIFtCPC10b2tlbl9pbj5dCisgW0I8LUNBcGF0aD4gdHJ1c3RlZF9jZXJ0X3BhdGhdCisgW0I8 LUNBZmlsZT4gdHJ1c3RlZF9jZXJ0cy5wZW1dCisrW0I8LXRydXN0ZWRfZmlyc3Q+XQorIFtCPC11 bnRydXN0ZWQ+IGNlcnRfZmlsZS5wZW1dCisgCisgPWhlYWQxIERFU0NSSVBUSU9OCitAQCAtMzI0 LDYgKzMyNSwxMiBAQCBMPHZlcmlmeSgxKXx2ZXJpZnkoMSk+IGZvciBhZGRpdGlvbmFsIGRlCisg b3IgQjwtQ0FwYXRoPiBtdXN0IGJlIHNwZWNpZmllZC4KKyAoT3B0aW9uYWwpCisgCisrPWl0ZW0g QjwtdHJ1c3RlZF9maXJzdD4KKysKKytVc2UgY2VydGlmaWNhdGVzIGluIENBIGZpbGUgb3IgQ0Eg ZGlyZWN0b3J5IGJlZm9yZSBvdGhlciBjZXJ0aWZpY2F0ZXMKKyt3aGVuIGJ1aWxkaW5nIHRoZSB0 cnVzdCBjaGFpbiB0byB2ZXJpZnkgY2VydGlmaWNhdGVzLgorK1RoaXMgaXMgbWFpbmx5IHVzZWZ1 bCBpbiBlbnZpcm9ubWVudHMgd2l0aCBCcmlkZ2UgQ0Egb3IgQ3Jvc3MtQ2VydGlmaWVkIENBcy4K KysKKyA9aXRlbSBCPC11bnRydXN0ZWQ+IGNlcnRfZmlsZS5wZW0KKyAKKyBTZXQgb2YgYWRkaXRp b25hbCB1bnRydXN0ZWQgY2VydGlmaWNhdGVzIGluIFBFTSBmb3JtYXQgd2hpY2ggbWF5IGJlCitk aWZmIC11cCBvcGVuc3NsLTEuMC4yaC9kb2MvYXBwcy92ZXJpZnkucG9kLnRydXN0ZWQtZmlyc3Qg b3BlbnNzbC0xLjAuMmgvZG9jL2FwcHMvdmVyaWZ5LnBvZAorLS0tIG9wZW5zc2wtMS4wLjJoL2Rv Yy9hcHBzL3ZlcmlmeS5wb2QudHJ1c3RlZC1maXJzdAkyMDE2LTA1LTAzIDE1OjQ0OjQyLjAwMDAw MDAwMCArMDIwMAorKysrIG9wZW5zc2wtMS4wLjJoL2RvYy9hcHBzL3ZlcmlmeS5wb2QJMjAxNi0w NS0wMyAxODowMToxNi43MzI1NTcwNDIgKzAyMDAKK0BAIC05LDYgKzksNyBAQCB2ZXJpZnkgLSBV dGlsaXR5IHRvIHZlcmlmeSBjZXJ0aWZpY2F0ZXMuCisgQjxvcGVuc3NsPiBCPHZlcmlmeT4KKyBb QjwtQ0FwYXRoIGRpcmVjdG9yeT5dCisgW0I8LUNBZmlsZSBmaWxlPl0KKytbQjwtdHJ1c3RlZF9m aXJzdD5dCisgW0I8LXB1cnBvc2UgcHVycG9zZT5dCisgW0I8LXBvbGljeSBhcmc+XQorIFtCPC1p Z25vcmVfY3JpdGljYWw+XQorQEAgLTg1LDYgKzg2LDEyIEBAIElmIGEgdmFsaWQgQ1JMIGNhbm5v dCBiZSBmb3VuZCBhbiBlcnJvcgorIEEgZmlsZSBvZiB1bnRydXN0ZWQgY2VydGlmaWNhdGVzLiBU aGUgZmlsZSBzaG91bGQgY29udGFpbiBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMKKyBpbiBQRU0gZm9y bWF0IGNvbmNhdGVuYXRlZCB0b2dldGhlci4KKyAKKys9aXRlbSBCPC10cnVzdGVkX2ZpcnN0Pgor KworK1VzZSBjZXJ0aWZpY2F0ZXMgaW4gQ0EgZmlsZSBvciBDQSBkaXJlY3RvcnkgYmVmb3JlIHRo ZSBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHVudHJ1c3RlZAorK2ZpbGUgd2hlbiBidWlsZGluZyB0aGUg dHJ1c3QgY2hhaW4gdG8gdmVyaWZ5IGNlcnRpZmljYXRlcy4KKytUaGlzIGlzIG1haW5seSB1c2Vm dWwgaW4gZW52aXJvbm1lbnRzIHdpdGggQnJpZGdlIENBIG9yIENyb3NzLUNlcnRpZmllZCBDQXMu CisrCisgPWl0ZW0gQjwtcHVycG9zZSBwdXJwb3NlPgorIAorIFRoZSBpbnRlbmRlZCB1c2UgZm9y IHRoZSBjZXJ0aWZpY2F0ZS4gSWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwKCmRpZmYg LS1naXQgYS9vcGVuc3NsLnNwZWMgYi9vcGVuc3NsLnNwZWMKaW5kZXggMDFmMmViMy4uOGQxYjg1 ZSAxMDA2NDQKLS0tIGEvb3BlbnNzbC5zcGVjCisrKyBiL29wZW5zc2wuc3BlYwpAQCAtMjIsOCAr MjIsOCBAQAogCiBTdW1tYXJ5OiBVdGlsaXRpZXMgZnJvbSB0aGUgZ2VuZXJhbCBwdXJwb3NlIGNy eXB0b2dyYXBoeSBsaWJyYXJ5IHdpdGggVExTIGltcGxlbWVudGF0aW9uCiBOYW1lOiBvcGVuc3Ns Ci1WZXJzaW9uOiAxLjAuMmcKLVJlbGVhc2U6IDQlez9kaXN0fQorVmVyc2lvbjogMS4wLjJoCitS ZWxlYXNlOiAxJXs/ZGlzdH0KIEVwb2NoOiAxCiAjIFdlIGhhdmUgdG8gcmVtb3ZlIGNlcnRhaW4g cGF0ZW50ZWQgYWxnb3JpdGhtcyBmcm9tIHRoZSBvcGVuc3NsIHNvdXJjZQogIyB0YXJiYWxsIHdp dGggdGhlIGhvYmJsZS1vcGVuc3NsIHNjcmlwdCB3aGljaCBpcyBpbmNsdWRlZCBiZWxvdy4KQEAg LTU2LDcgKzU2LDcgQEAgUGF0Y2gzMzogb3BlbnNzbC0xLjAuMC1iZXRhNC1jYS1kaXIucGF0Y2gK IFBhdGNoMzQ6IG9wZW5zc2wtMS4wLjJhLXg1MDkucGF0Y2gKIFBhdGNoMzU6IG9wZW5zc2wtMS4w LjJhLXZlcnNpb24tYWRkLWVuZ2luZXMucGF0Y2gKIFBhdGNoMzk6IG9wZW5zc2wtMS4wLjJhLWlw djYtYXBwcy5wYXRjaAotUGF0Y2g0MDogb3BlbnNzbC0xLjAuMmctZmlwcy5wYXRjaAorUGF0Y2g0 MDogb3BlbnNzbC0xLjAuMmgtZmlwcy5wYXRjaAogUGF0Y2g0NTogb3BlbnNzbC0xLjAuMmEtZW52 LXpsaWIucGF0Y2gKIFBhdGNoNDc6IG9wZW5zc2wtMS4wLjJhLXJlYWRtZS13YXJuaW5nLnBhdGNo CiBQYXRjaDQ5OiBvcGVuc3NsLTEuMC4xaS1hbGdvLWRvYy5wYXRjaApAQCAtNzYsNyArNzYsNiBA QCBQYXRjaDczOiBvcGVuc3NsLTEuMC4yYy1lY2Mtc3VpdGViLnBhdGNoCiBQYXRjaDc0OiBvcGVu c3NsLTEuMC4yYS1uby1tZDUtdmVyaWZ5LnBhdGNoCiBQYXRjaDc1OiBvcGVuc3NsLTEuMC4yYS1j b21wYXQtc3ltYm9scy5wYXRjaAogUGF0Y2g3Njogb3BlbnNzbC0xLjAuMmYtbmV3LWZpcHMtcmVx cy5wYXRjaAotUGF0Y2g3Nzogb3BlbnNzbC0xLjAuMmEtd2Vhay1jaXBoZXJzLnBhdGNoCiBQYXRj aDc4OiBvcGVuc3NsLTEuMC4yYS1jYy1yZXFzLnBhdGNoCiBQYXRjaDkwOiBvcGVuc3NsLTEuMC4y YS1lbmMtZmFpbC5wYXRjaAogUGF0Y2g5Mjogb3BlbnNzbC0xLjAuMmEtc3lzdGVtLWNpcGhlcmxp c3QucGF0Y2gKQEAgLTg3LDggKzg2LDcgQEAgUGF0Y2g5Njogb3BlbnNzbC0xLjAuMmUtc3BlZWQt ZG9jLnBhdGNoCiAjIEJhY2twb3J0ZWQgZml4ZXMgaW5jbHVkaW5nIHNlY3VyaXR5IGZpeGVzCiBQ YXRjaDgwOiBvcGVuc3NsLTEuMC4yZS13cmFwLXBhZC5wYXRjaAogUGF0Y2g4MTogb3BlbnNzbC0x LjAuMmEtcGFkbG9jazY0LnBhdGNoCi1QYXRjaDgyOiBvcGVuc3NsLTEuMC4yYy10cnVzdGVkLWZp cnN0LWRvYy5wYXRjaAotUGF0Y2g4Mzogb3BlbnNzbC0xLjAuMmctcmVtb3ZlLXNzbDIucGF0Y2gK K1BhdGNoODI6IG9wZW5zc2wtMS4wLjJoLXRydXN0ZWQtZmlyc3QtZG9jLnBhdGNoCiAKIExpY2Vu c2U6IE9wZW5TU0wKIEdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvTGlicmFyaWVzCkBAIC0yMDEs NyArMTk5LDYgQEAgY3AgJXtTT1VSQ0UxMn0gJXtTT1VSQ0UxM30gY3J5cHRvL2VjLwogJXBhdGNo NzQgLXAxIC1iIC5uby1tZDUtdmVyaWZ5CiAlcGF0Y2g3NSAtcDEgLWIgLmNvbXBhdAogJXBhdGNo NzYgLXAxIC1iIC5maXBzLXJlcXMKLSVwYXRjaDc3IC1wMSAtYiAud2Vhay1jaXBoZXJzCiAlcGF0 Y2g3OCAtcDEgLWIgLmNjLXJlcXMKICVwYXRjaDkwIC1wMSAtYiAuZW5jLWZhaWwKICVwYXRjaDky IC1wMSAtYiAuc3lzdGVtCkBAIC0yMTMsNyArMjEwLDYgQEAgY3AgJXtTT1VSQ0UxMn0gJXtTT1VS Q0UxM30gY3J5cHRvL2VjLwogJXBhdGNoODAgLXAxIC1iIC53cmFwCiAlcGF0Y2g4MSAtcDEgLWIg LnBhZGxvY2s2NAogJXBhdGNoODIgLXAxIC1iIC50cnVzdGVkLWZpcnN0Ci0lcGF0Y2g4MyAtcDEg LWIgLnJlbW92ZS1zc2wyCiAKIHNlZCAtaSAncy9TSExJQl9WRVJTSU9OX05VTUJFUiAiMS4wLjAi L1NITElCX1ZFUlNJT05fTlVNQkVSICIle3ZlcnNpb259Ii8nIGNyeXB0by9vcGVuc3Nsdi5oCiAK QEAgLTUwNCw2ICs1MDAsOSBAQCBybSAtcmYgJFJQTV9CVUlMRF9ST09ULyV7X2xpYmRpcn0vZmlw c2NhbmlzdGVyLioKICVwb3N0dW4gbGlicyAtcCAvc2Jpbi9sZGNvbmZpZwogCiAlY2hhbmdlbG9n CisqIFR1ZSBNYXkgIDMgMjAxNiBUb23DocWhIE1yw6F6IDx0bXJhekByZWRoYXQuY29tPiAxLjAu MmgtMQorLSBtaW5vciB1cHN0cmVhbSByZWxlYXNlIDEuMC4yaCBmaXhpbmcgc2VjdXJpdHkgaXNz dWVzCisKICogVHVlIE1hciAyOSAyMDE2IFRvbcOhxaEgTXLDoXogPHRtcmF6QHJlZGhhdC5jb20+ IDEuMC4yZy00CiAtIGRpc2FibGUgU1NMdjIgc3VwcG9ydCBhbHRvZ2V0aGVyICh3aXRob3V0IEFC SSBicmVhaykKIAoKZGlmZiAtLWdpdCBhL3NvdXJjZXMgYi9zb3VyY2VzCmluZGV4IGI3MzIzODEu LmY0OTUzNGUgMTAwNjQ0Ci0tLSBhL3NvdXJjZXMKKysrIGIvc291cmNlcwpAQCAtMSArMSBAQAot ZjMyZmQ5Nzk0ODY2MDBlMTAyYjc3ZmJjMWY4ODc4N2MgIG9wZW5zc2wtMS4wLjJnLWhvYmJsZWQu dGFyLnh6CiswMjA3OTNlN2I4OTAxYTFhYzYyZDM4ZjNhNzdmOWEwYyAgb3BlbnNzbC0xLjAuMmgt aG9iYmxlZC50YXIueHoK