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: Takao Fujiwara To: git-commits@fedoraproject.org Subject: [rpms/ibus] autotool: Bumped to ibus-gjs 3.3.90.20120308 to work with gnome-shell 3.3.90 Date: Sun, 31 May 2026 02:05:36 GMT Message-ID: <178019313618.1.6322225439523088747.rpms-ibus-e429e123c3d8@fedoraproject.org> List-ID: X-Git-Repo: rpms/ibus X-Git-Branch: autotool X-Git-Rev: e429e123c3d8f74c71a152ab0550986c7fc0697e QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvaWJ1cwpCcmFuY2gg OiBhdXRvdG9vbApDb21taXQgOiBlNDI5ZTEyM2MzZDhmNzRjNzFhMTUyYWIwNTUwOTg2YzdmYzA2 OTdlCkF1dGhvciA6IFRha2FvIEZ1aml3YXJhIDx0ZnVqaXdhckByZWRoYXQuY29tPgpEYXRlICAg OiAyMDEyLTAzLTEwVDEyOjI3OjU5KzA5OjAwClN0YXRzICA6ICs4OTMxLy04IGluIDUgZmlsZShz KQpVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9qZWN0Lm9yZy9ycG1zL2lidXMvYy9lNDI5 ZTEyM2MzZDhmNzRjNzFhMTUyYWIwNTUwOTg2YzdmYzA2OTdlP2JyYW5jaD1hdXRvdG9vbAoKTG9n OgpCdW1wZWQgdG8gaWJ1cy1nanMgMy4zLjkwLjIwMTIwMzA4IHRvIHdvcmsgd2l0aCBnbm9tZS1z aGVsbCAzLjMuOTAKCi0tLQpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5k ZXggNjU4YjdkZi4uNzYwMmI4ZCAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdu b3JlCkBAIC0zNiwzICszNiw0IEBAIGlidXMtMS4zLjYudGFyLmd6CiAvaWJ1cy1nanMtMy4yLjEu MjAxMTExMjgudGFyLmd6CiAvaWJ1cy1nanMtMy4yLjEuMjAxMTEyMzAudGFyLmd6CiAvaWJ1cy1n anMtMy4zLjMuMjAxMjAyMDMudGFyLmd6CisvaWJ1cy1nanMtMy4zLjkwLjIwMTIwMzA4LnRhci5n egoKZGlmZiAtLWdpdCBhL2lidXMtSEVBRC5wYXRjaCBiL2lidXMtSEVBRC5wYXRjaAppbmRleCA1 ODdiZmVkLi5jNzNjYzAxIDEwMDY0NAotLS0gYS9pYnVzLUhFQUQucGF0Y2gKKysrIGIvaWJ1cy1I RUFELnBhdGNoCkBAIC01MCwzICs1MCw0MiBAQCBpbmRleCA2NDgzYWFlLi5mYjM5ZDU2IDEwMDY0 NAogLS0gCiAxLjcuOS4xCiAKK0Zyb20gNDAxZjg4MTMxNGFiY2U1N2EwOTc5YWE0ZWYwOGZjNTQ2 MmRmZTNjYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IGZ1aml3YXJhdCA8dGFrYW8u ZnVqaXdhcmExQGdtYWlsLmNvbT4KK0RhdGU6IFNhdCwgMTAgTWFyIDIwMTIgMDk6NDU6MDcgKzA5 MDAKK1N1YmplY3Q6IFtQQVRDSF0gRml4IHRvIHVuZ3JhYiB1aS9ndGszL3N3aXRjaGVyIGZvciBH VEsgMy4zLjE4IGFuZCBHTGliCisgMi4zMS4yMAorCistLS0KKyB1aS9ndGszL3N3aXRjaGVyLnZh bGEgfCAgICA4ICsrKysrKysrCisgMSBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDAg ZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS91aS9ndGszL3N3aXRjaGVyLnZhbGEgYi91aS9n dGszL3N3aXRjaGVyLnZhbGEKK2luZGV4IDc2YzY3ZWMuLjEzMWNhZDUgMTAwNjQ0CistLS0gYS91 aS9ndGszL3N3aXRjaGVyLnZhbGEKKysrKyBiL3VpL2d0azMvc3dpdGNoZXIudmFsYQorQEAgLTEy Nyw2ICsxMjcsOSBAQCBjbGFzcyBTd2l0Y2hlciA6IEd0ay5XaW5kb3cgeworICAgICAgICAgbV9s b29wLnJ1bigpOworICAgICAgICAgbV9sb29wID0gbnVsbDsKKyAKKysgICAgICAgIGtleWJvYXJk LnVuZ3JhYihHZGsuQ1VSUkVOVF9USU1FKTsKKysgICAgICAgIHBvaW50ZXIudW5ncmFiKEdkay5D VVJSRU5UX1RJTUUpOworKworICAgICAgICAgaGlkZSgpOworICAgICAgICAgLy8gTWFrZSBzdXJl IHRoZSBzd2l0Y2hlciBpcyBoaWRkZW4gYmVmb3JlIHJldHVybmluZyBmcm9tIHRoaXMgZnVuY3Rp b24uCisgICAgICAgICB3aGlsZSAoR3RrLmV2ZW50c19wZW5kaW5nKCkpCitAQCAtMjM5LDYgKzI0 MiwxMSBAQCBjbGFzcyBTd2l0Y2hlciA6IEd0ay5XaW5kb3cgeworICAgICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICAgfQorIAorKyAgICAgICAgLy8gaWYgZS50eXBlID09IEdkay5FdmVu dFR5cGUuS0VZX1JFTEVBU0UsIG1fbG9vcCBpcyBhbHJlYWR5IG51bGwuCisrICAgICAgICBpZiAo bV9sb29wID09IG51bGwpIHsKKysgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisrICAgICAgICB9 CisrCisgICAgICAgICBtX2xvb3AucXVpdCgpOworICAgICAgICAgbV9yZXN1bHQgPSAoaW50KW1f c2VsZWN0ZWRfZW5naW5lOworICAgICAgICAgcmV0dXJuIHRydWU7CistLSAKKzEuNy45LjEKKwoK ZGlmZiAtLWdpdCBhL2lidXMteHgtdmFwaS1idWlsZC1mYWlsdXJlLmRpZmYgYi9pYnVzLXh4LXZh cGktYnVpbGQtZmFpbHVyZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmZlZmIwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9pYnVzLXh4LXZhcGktYnVpbGQtZmFpbHVyZS5k aWZmCkBAIC0wLDAgKzEsODg0NyBAQAorLS0tIGlidXMvdWkvZ3RrMy9Ha2JkLTMuMC5naS5mb28J MTk3MC0wMS0wMSAwOTowMDowMC4wMDAwMDAwMDAgKzA5MDAKKysrKyBpYnVzL3VpL2d0azMvR2ti ZC0zLjAuZ2kJMjAxMi0wMy0wOSAxNjowOToxMS40NzgwMTg5NzUgKzA5MDAKK0BAIC0wLDAgKzEs NzQgQEAKKys8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKys8YXBpIHZlcnNpb249IjEuMCI+CisrICAg ICAgICA8bmFtZXNwYWNlIG5hbWU9IkdrYmQiPgorKyAgICAgICAgICAgICAgICA8ZnVuY3Rpb24g bmFtZT0iY29uZmlndXJhdGlvbl9nZXQiIHN5bWJvbD0iZ2tiZF9jb25maWd1cmF0aW9uX2dldCI+ CisrICAgICAgICAgICAgICAgICAgICAgICAgPHJldHVybi10eXBlIHR5cGU9IkdrYmRDb25maWd1 cmF0aW9uKiIvPgorKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXJzLz4KKysgICAg ICAgICAgICAgICAgPC9mdW5jdGlvbj4KKysgICAgICAgICAgICAgICAgPG9iamVjdCBuYW1lPSJH a2JkQ29uZmlndXJhdGlvbiIKKysgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9IkdPYmpl Y3QiCisrICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS1uYW1lPSJHa2JkQ29uZmlndXJhdGlv biIKKysgICAgICAgICAgICAgICAgICAgICAgICBnZXQtdHlwZT0iZ2tiZF9jb25maWd1cmF0aW9u X2dldF90eXBlIj4KKysgICAgICAgICAgICAgICAgICAgICAgICA8ZmllbGQgbmFtZT0icGFyZW50 IiB0eXBlPSJHT2JqZWN0Ii8+CisrICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGhvZCBuYW1l PSJnZXRfc2hvcnRfZ3JvdXBfbmFtZXMiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzeW1ib2w9ImdrYmRfY29uZmlndXJhdGlvbl9nZXRfc2hvcnRfZ3JvdXBfbmFtZXMiPgorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJldHVybi10eXBlIHR5cGU9ImdjaGFyKioi Lz4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXJzPgorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImNvbmZp Z3VyYXRpb24iCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdHlwZT0iR2tiZENvbmZpZ3VyYXRpb24qIi8+CisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA8L3BhcmFtZXRlcnM+CisrICAgICAgICAgICAgICAgICAgICAgICAgPC9tZXRo b2Q+CisrICAgICAgICAgICAgICAgICAgICAgICAgPG1ldGhvZCBuYW1lPSJnZXRfZ3JvdXBfbmFt ZXMiCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2w9ImdrYmRfY29uZmln dXJhdGlvbl9nZXRfZ3JvdXBfbmFtZXMiPgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgPHJldHVybi10eXBlIHR5cGU9ImdjaGFyKioiLz4KKysgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDxwYXJhbWV0ZXJzPgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImNvbmZpZ3VyYXRpb24iCisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0iR2tiZENvbmZpZ3VyYXRp b24qIi8+CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmFtZXRlcnM+Cisr ICAgICAgICAgICAgICAgICAgICAgICAgPC9tZXRob2Q+CisrICAgICAgICAgICAgICAgICAgICAg ICAgPG1ldGhvZCBuYW1lPSJsb2NrX2dyb3VwIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3ltYm9sPSJna2JkX2NvbmZpZ3VyYXRpb25fbG9ja19ncm91cCI+CisrICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA8cmV0dXJuLXR5cGUgdHlwZT0idm9pZCIvPgorKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmFtZXRlcnM+CisrICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iY29uZmlndXJhdGlvbiIK KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl PSJHa2JkQ29uZmlndXJhdGlvbioiLz4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJncm91cCIgdHlwZT0iZ3VpbnQiLz4KKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYW1ldGVycz4KKysgICAgICAgICAgICAgICAg ICAgICAgICA8L21ldGhvZD4KKysgICAgICAgICAgICAgICAgICAgICAgICA8bWV0aG9kIG5hbWU9 InN0YXJ0X2xpc3RlbiIKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbD0i Z2tiZF9jb25maWd1cmF0aW9uX3N0YXJ0X2xpc3RlbiI+CisrICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA8cmV0dXJuLXR5cGUgdHlwZT0idm9pZCIvPgorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgPHBhcmFtZXRlcnM+CisrICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDxwYXJhbWV0ZXIgbmFtZT0iY29uZmlndXJhdGlvbiIKKysgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJHa2JkQ29uZmln dXJhdGlvbioiLz4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFyYW1ldGVy cz4KKysgICAgICAgICAgICAgICAgICAgICAgICA8L21ldGhvZD4KKysgICAgICAgICAgICAgICAg ICAgICAgICA8bWV0aG9kIG5hbWU9InN0b3BfbGlzdGVuIgorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3ltYm9sPSJna2JkX2NvbmZpZ3VyYXRpb25fc3RvcF9saXN0ZW4iPgorKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJldHVybi10eXBlIHR5cGU9InZvaWQiLz4K KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXJzPgorKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImNvbmZpZ3Vy YXRpb24iCisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdHlwZT0iR2tiZENvbmZpZ3VyYXRpb24qIi8+CisrICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA8L3BhcmFtZXRlcnM+CisrICAgICAgICAgICAgICAgICAgICAgICAgPC9tZXRob2Q+ CisrICAgICAgICAgICAgICAgICAgICAgICAgPHNpZ25hbCBuYW1lPSJjaGFuZ2VkIiB3aGVuPSJM QVNUIj4KKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXR1cm4tdHlwZSB0eXBl PSJ2b2lkIi8+CisrICAgICAgICAgICAgICAgICAgICAgICAgPC9zaWduYWw+CisrICAgICAgICAg ICAgICAgICAgICAgICAgPHNpZ25hbCBuYW1lPSJncm91cC1jaGFuZ2VkIiB3aGVuPSJMQVNUIj4K KysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXR1cm4tdHlwZSB0eXBlPSJ2b2lk Ii8+CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFyYW1ldGVycz4KKysgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJjb25m aWd1cmF0aW9uIgorKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGU9IkdrYmRDb25maWd1cmF0aW9uKiIvPgorKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9Im9iamVjdCIgdHlwZT0iaW50Ii8+ CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3BhcmFtZXRlcnM+CisrICAgICAg ICAgICAgICAgICAgICAgICAgPC9zaWduYWw+CisrICAgICAgICAgICAgICAgICAgICAgICAgPHNp Z25hbCBuYW1lPSJpbmRpY2F0b3JzLWNoYW5nZWQiIHdoZW49IkxBU1QiPgorKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPHJldHVybi10eXBlIHR5cGU9InZvaWQiLz4KKysgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbWV0ZXJzPgorKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9ImNvbmZpZ3VyYXRpb24iCisr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0i R2tiZENvbmZpZ3VyYXRpb24qIi8+CisrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8 L3BhcmFtZXRlcnM+CisrICAgICAgICAgICAgICAgICAgICAgICAgPC9zaWduYWw+CisrICAgICAg ICAgICAgICAgIDwvb2JqZWN0PgorKyAgICAgICAgPC9uYW1lc3BhY2U+CisrPC9hcGk+CistLS0g aWJ1cy91aS9ndGszL0drYmQtMy4wLm1ldGFkYXRhLm9yaWcJMjAxMi0wMy0wOSAxMTo1MTowMy41 MDkzNTQyNjYgKzA5MDAKKysrKyBpYnVzL3VpL2d0azMvR2tiZC0zLjAubWV0YWRhdGEJMjAxMi0w My0wOSAxNjoyNzozOC4xNDM5Mjk3OTkgKzA5MDAKK0BAIC0xICsxLDQgQEAKKytHa2JkIGNoZWFk ZXJfZmlsZW5hbWU9ImxpYmdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIgorIENvbmZpZ3Vy YXRpb24gY2hlYWRlcl9maWxlbmFtZT0ibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgi CisrLy9na2JkX2NvbmZpZ3VyYXRpb25fZ2V0X3Nob3J0X2dyb3VwX25hbWVzIHR5cGVfbmFtZT0i c3RyaW5nW10iCisrLy9na2JkX2NvbmZpZ3VyYXRpb25fZ2V0X2dyb3VwX25hbWVzIHR5cGVfbmFt ZT0ic3RyaW5nW10iCistLS0gaWJ1cy91aS9ndGszL01ha2VmaWxlLmFtLm9yaWcJMjAxMi0wMy0w OSAxNzo1OTozMC4zMjc3MjgxMzcgKzA5MDAKKysrKyBpYnVzL3VpL2d0azMvTWFrZWZpbGUuYW0J MjAxMi0wMy0wOSAxODowMTowNC4yNzQ0MzA2ODMgKzA5MDAKK0BAIC04NSw2ICs4NSw3IEBAIEFN X1ZBTEFGTEFHUyA9IFwKKyAJLS1wa2c9Z3RrKy0zLjAgXAorIAktLXBrZz1nZGsteDExLTMuMCBc CisgCS0tcGtnPWlidXMtMS4wIFwKKysJLS1wa2c9WGtsLTEuMCBcCisgCSQoTlVMTCkKKyAKKyBs aWJleGVjX1BST0dSQU1TID0gaWJ1cy11aS1ndGszCitAQCAtMTA2LDggKzEwNywxMiBAQCBpYnVz X3VpX2d0azNfdmFsYXMgPSBcCisgCSQoTlVMTCkKKyBpYnVzX3VpX2d0azNfdmFsYV9jZmlsZXMg PSAkKGlidXNfdWlfZ3RrM192YWxhczoudmFsYT0uYykKKyAKKysjaWJ1c191aV9ndGszX1NPVVJD RVMgPSBcCisrIwkkKGlidXNfdWlfZ3RrM192YWxhcykgXAorKyMJZ3JhYmtleWNvZGUuYyBcCisr IwkkKE5VTEwpCisgaWJ1c191aV9ndGszX1NPVVJDRVMgPSBcCistCSQoaWJ1c191aV9ndGszX3Zh bGFzKSBcCisrCSQoaWJ1c191aV9ndGszX3ZhbGFfY2ZpbGVzKSBcCisgCWdyYWJrZXljb2RlLmMg XAorIAkkKE5VTEwpCisgCitAQCAtMTMzLDYgKzEzOCwxMSBAQCBBTV9WQUxBRkxBR1MgKz0gXAor IAktLXBrZz1na2JkIFwKKyAJJChOVUxMKQorIAorKyMgRklYTUU6IFJ1bm5pbmcgdmFwaWdlbiBH a2JkLTMuMC5naXIgY2Fubm90IHJlc29sdmUgdGhlIHR5cGUgbmFtZSBlcnJvcjoKKysjCisrIyBY a2wtMS4wLmdpcjo4NzcuNTEtODc3LjUxOiBlcnJvcjogVGhlIHR5cGUgbmFtZSBgWC5YRXZlbnQn IGNvdWxkIG5vdCBiZSBmb3VuZAorKyMgICAgICAgICAgICAgPHR5cGUgbmFtZT0ieGxpYi5YRXZl bnQiIGM6dHlwZT0iWEV2ZW50KiIvPgorKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF4KKyAkKHNyY2RpcikvZ2tiZC52YXBpOgorIAkkKFZBUElHRU4p IC0tbWV0YWRhdGFkaXIgLiAtLWxpYnJhcnkgZ2tiZCBcCisgCSAgICAtLXBrZyBndGsrLTMuMCAt LXBrZyBnbGliLTIuMCAtLXBrZyBnbW9kdWxlLTIuMCBcCitAQCAtMTQxLDIwICsxNTEsMjggQEAg JChzcmNkaXIpL2drYmQudmFwaToKKyAKKyAkKHNyY2RpcikvZ2tiZGxheW91dC52YWxhOiAkKHNy Y2RpcikvZ2tiZC52YXBpCisgCUBjcCAkKHNyY2RpcikvZ2tiZGxheW91dC52YWxhLnRydWUgJChz cmNkaXIpL2drYmRsYXlvdXQudmFsYQorKwlAY3AgJChzcmNkaXIpL2drYmRsYXlvdXQuYy50cnVl ICQoc3JjZGlyKS9na2JkbGF5b3V0LmMKKyBlbHNlCisgJChzcmNkaXIpL2drYmRsYXlvdXQudmFs YToKKyAJQGNwICQoc3JjZGlyKS9na2JkbGF5b3V0LnZhbGEuZmFsc2UgJChzcmNkaXIpL2drYmRs YXlvdXQudmFsYQorKwlAY3AgJChzcmNkaXIpL2drYmRsYXlvdXQuYy5mYWxzZSAkKHNyY2Rpcikv Z2tiZGxheW91dC5jCisgZW5kaWYKKyAKKytzcmNkaXIpL3BhbmVsLmM6ICQoc3JjZGlyKS9wYW5l bC5jLmluCisrCUBjcCAkKHNyY2RpcikvcGFuZWwuYy5pbiAkKHNyY2RpcikvcGFuZWwuYworKwor IENMRUFORklMRVMgPSBcCistCWdrYmQudmFwaSBcCisgCWdrYmRsYXlvdXQudmFsYSBcCisgCWd0 a3BhbmVsLnhtbCBcCisgCSQoaWJ1c191aV9ndGszX3ZhbGFfY2ZpbGVzKSBcCisgCSQoTlVMTCkK KyAKKyBFWFRSQV9ESVNUID0gXAorKwlna2JkLnZhcGkgXAorKwlHa2JkLTMuMC5naSBcCisgCUdr YmQtMy4wLm1ldGFkYXRhIFwKKysJZ2tiZGxheW91dC5jLmZhbHNlIFwKKysJZ2tiZGxheW91dC5j LnRydWUgXAorIAlna2JkbGF5b3V0LnZhbGEuZmFsc2UgXAorIAlna2JkbGF5b3V0LnZhbGEudHJ1 ZSBcCisgCWd0a3BhbmVsLnhtbC5pbi5pbiBcCistLS0gaWJ1cy91aS9ndGszL2drYmQudmFwaS5m b28JMTk3MC0wMS0wMSAwOTowMDowMC4wMDAwMDAwMDAgKzA5MDAKKysrKyBpYnVzL3VpL2d0azMv Z2tiZC52YXBpCTIwMTItMDMtMDkgMTY6MzA6MzcuNjQxMTg0NTY2ICswOTAwCitAQCAtMCwwICsx LDI4MiBAQAorKy8qIGdrYmQudmFwaSBnZW5lcmF0ZWQgYnkgdmFwaWdlbiwgZG8gbm90IG1vZGlm eS4gKi8KKysKKytbQ0NvZGUgKGNwcmVmaXggPSAiR2tiZCIsIGdpcl9uYW1lc3BhY2UgPSAiR2ti ZCIsIGdpcl92ZXJzaW9uID0gIjMuMCIsIGxvd2VyX2Nhc2VfY3ByZWZpeCA9ICJna2JkXyIpXQor K25hbWVzcGFjZSBHa2JkIHsKKysJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYmdub21l a2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgdHlwZV9pZCA9ICJna2JkX2NvbmZpZ3VyYXRpb25f Z2V0X3R5cGUgKCkiKV0KKysJcHVibGljIGNsYXNzIENvbmZpZ3VyYXRpb24gOiBHTGliLk9iamVj dCB7CisrCQlbQ0NvZGUgKGhhc19jb25zdHJ1Y3RfZnVuY3Rpb24gPSBmYWxzZSldCisrCQlwcm90 ZWN0ZWQgQ29uZmlndXJhdGlvbiAoKTsKKysJCXB1YmxpYyB2b2lkIGFwcGVuZF9vYmplY3QgKEdM aWIuT2JqZWN0IG9iaik7CisrCQlwdWJsaWMgc3RhdGljIHN0cmluZyBjcmVhdGVfbGFiZWxfdGl0 bGUgKGludCBncm91cCwgR0xpYi5IYXNoVGFibGU8dm9pZCosdm9pZCo+IGxuMmNudF9tYXAsIHN0 cmluZyBsYXlvdXRfbmFtZSk7CisrCQlwdWJsaWMgc3RyaW5nIGV4dHJhY3RfbGF5b3V0X25hbWUg KGludCBncm91cCk7CisrCQlwdWJsaWMgdm9pZCBmcmVlX2ltYWdlcyAoR0xpYi5TTGlzdDxHZGsu UGl4YnVmPiBpbWFnZXMpOworKwkJcHVibGljIHN0YXRpYyBHa2JkLkNvbmZpZ3VyYXRpb24gQGdl dCAoKTsKKysJCXB1YmxpYyB1bm93bmVkIEdMaWIuU0xpc3Q8R0xpYi5PYmplY3Q+IGdldF9hbGxf b2JqZWN0cyAoKTsKKysJCXB1YmxpYyBib29sIGdldF9jYXBzX2xvY2tfc3RhdGUgKCk7CisrCQlw dWJsaWMgdWludCBnZXRfY3VycmVudF9ncm91cCAoKTsKKysJCXB1YmxpYyBzdHJpbmcgZ2V0X2N1 cnJlbnRfdG9vbHRpcCAoKTsKKysJCXB1YmxpYyBzdHJpbmcgZ2V0X2dyb3VwX25hbWUgKHVpbnQg Z3JvdXApOworKwkJW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJt aW5hdGVkID0gdHJ1ZSldCisrCQlwdWJsaWMgdW5vd25lZCBzdHJpbmdbXSBnZXRfZ3JvdXBfbmFt ZXMgKCk7CisrCQlwdWJsaWMgc3RyaW5nIGdldF9pbWFnZV9maWxlbmFtZSAodWludCBncm91cCk7 CisrCQlwdWJsaWMgR2tiZC5JbmRpY2F0b3JDb25maWcgZ2V0X2luZGljYXRvcl9jb25maWcgKCk7 CisrCQlwdWJsaWMgR2tiZC5LZXlib2FyZENvbmZpZyBnZXRfa2V5Ym9hcmRfY29uZmlnICgpOwor KwkJcHVibGljIGJvb2wgZ2V0X251bV9sb2NrX3N0YXRlICgpOworKwkJcHVibGljIGJvb2wgZ2V0 X3Njcm9sbF9sb2NrX3N0YXRlICgpOworKwkJW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwg YXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldCisrCQlwdWJsaWMgdW5vd25lZCBzdHJpbmdb XSBnZXRfc2hvcnRfZ3JvdXBfbmFtZXMgKCk7CisrCQlwdWJsaWMgdW5vd25lZCBYa2wuRW5naW5l IGdldF94a2xfZW5naW5lICgpOworKwkJcHVibGljIGJvb2wgaWZfYW55X29iamVjdF9leGlzdHMg KCk7CisrCQlwdWJsaWMgYm9vbCBpZl9mbGFnc19zaG93biAoKTsKKysJCXB1YmxpYyBHTGliLlNM aXN0PEdkay5QaXhidWY+IGxvYWRfaW1hZ2VzICgpOworKwkJcHVibGljIHZvaWQgbG9ja19ncm91 cCAodWludCBncm91cCk7CisrCQlwdWJsaWMgdm9pZCBsb2NrX25leHRfZ3JvdXAgKCk7CisrCQlw dWJsaWMgdm9pZCByZW1vdmVfb2JqZWN0IChHTGliLk9iamVjdCBvYmopOworKwkJcHVibGljIHZv aWQgc3RhcnRfbGlzdGVuICgpOworKwkJcHVibGljIHZvaWQgc3RvcF9saXN0ZW4gKCk7CisrCQlw dWJsaWMgc2lnbmFsIHZvaWQgY2hhbmdlZCAoKTsKKysJCXB1YmxpYyBzaWduYWwgdm9pZCBncm91 cF9jaGFuZ2VkIChpbnQgb2JqZWN0KTsKKysJCXB1YmxpYyBzaWduYWwgdm9pZCBpbmRpY2F0b3Jz X2NoYW5nZWQgKCk7CisrCX0KKysJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYmdub21l a2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgdHlwZV9pZCA9ICJna2JkX2luZGljYXRvcl9nZXRf dHlwZSAoKSIpXQorKwlwdWJsaWMgY2xhc3MgSW5kaWNhdG9yIDogR3RrLk5vdGVib29rLCBBdGsu SW1wbGVtZW50b3IsIEd0ay5CdWlsZGFibGUgeworKwkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1 bmN0aW9uID0gZmFsc2UsIHR5cGUgPSAiR3RrV2lkZ2V0KiIpXQorKwkJcHVibGljIEluZGljYXRv ciAoKTsKKysJCVtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWlu YXRlZCA9IHRydWUpXQorKwkJcHVibGljIHN0YXRpYyB1bm93bmVkIHN0cmluZ1tdIGdldF9ncm91 cF9uYW1lcyAoKTsKKysJCXB1YmxpYyBzdGF0aWMgc3RyaW5nIGdldF9pbWFnZV9maWxlbmFtZSAo dWludCBncm91cCk7CisrCQlwdWJsaWMgc3RhdGljIGRvdWJsZSBnZXRfbWF4X3dpZHRoX2hlaWdo dF9yYXRpbyAoKTsKKysJCXB1YmxpYyBzdGF0aWMgdW5vd25lZCBYa2wuRW5naW5lIGdldF94a2xf ZW5naW5lICgpOworKwkJcHVibGljIHZvaWQgc2V0X2FuZ2xlIChkb3VibGUgYW5nbGUpOworKwkJ cHVibGljIHZvaWQgc2V0X3BhcmVudF90b29sdGlwcyAoYm9vbCBpZnNldCk7CisrCQlbSGFzRW1p dHRlcl0KKysJCXB1YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIHJlaW5pdF91aSAoKTsKKysJfQor KwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0 aW9uLmgiLCB0eXBlX2lkID0gImdrYmRfa2V5Ym9hcmRfZHJhd2luZ19nZXRfdHlwZSAoKSIpXQor KwlwdWJsaWMgY2xhc3MgS2V5Ym9hcmREcmF3aW5nIDogR3RrLkRyYXdpbmdBcmVhLCBBdGsuSW1w bGVtZW50b3IsIEd0ay5CdWlsZGFibGUgeworKwkJW0NDb2RlIChoYXNfY29uc3RydWN0X2Z1bmN0 aW9uID0gZmFsc2UsIHR5cGUgPSAiR3RrV2lkZ2V0KiIpXQorKwkJcHVibGljIEtleWJvYXJkRHJh d2luZyAoKTsKKysJCVtDQ29kZSAoaGFzX2NvbnN0cnVjdF9mdW5jdGlvbiA9IGZhbHNlLCB0eXBl ID0gIkd0a1dpZGdldCoiKV0KKysJCXB1YmxpYyBLZXlib2FyZERyYXdpbmcuZGlhbG9nX25ldyAo KTsKKysJCXB1YmxpYyBzdGF0aWMgdm9pZCBkaWFsb2dfc2V0X2dyb3VwIChHdGsuV2lkZ2V0IGRp YWxvZywgWGtsLkNvbmZpZ1JlZ2lzdHJ5IHJlZ2lzdHJ5LCBpbnQgZ3JvdXApOworKwkJcHVibGlj IHN0YXRpYyB2b2lkIGRpYWxvZ19zZXRfbGF5b3V0IChHdGsuV2lkZ2V0IGRpYWxvZywgWGtsLkNv bmZpZ1JlZ2lzdHJ5IHJlZ2lzdHJ5LCBzdHJpbmcgbGF5b3V0KTsKKysJCXB1YmxpYyB1bm93bmVk IHN0cmluZyBnZXRfY29tcGF0ICgpOworKwkJcHVibGljIHVub3duZWQgc3RyaW5nIGdldF9nZW9t ZXRyeSAoKTsKKysJCXB1YmxpYyB1bm93bmVkIHN0cmluZyBnZXRfa2V5Y29kZXMgKCk7CisrCQlw dWJsaWMgdW5vd25lZCBzdHJpbmcgZ2V0X3N5bWJvbHMgKCk7CisrCQlwdWJsaWMgdW5vd25lZCBz dHJpbmcgZ2V0X3R5cGVzICgpOworKwkJcHVibGljIHZvaWQgcHJpbnQgKEd0ay5XaW5kb3cgcGFy ZW50X3dpbmRvdywgc3RyaW5nIGRlc2NyaXB0aW9uKTsKKysJCXB1YmxpYyBib29sIHJlbmRlciAo Q2Fpcm8uQ29udGV4dCBjciwgUGFuZ28uTGF5b3V0IGxheW91dCwgZG91YmxlIHgsIGRvdWJsZSB5 LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQsIGRvdWJsZSBkcGlfeCwgZG91YmxlIGRwaV95 KTsKKysJCXB1YmxpYyB2b2lkIHNldF9ncm91cHNfbGV2ZWxzIChHa2JkLktleWJvYXJkRHJhd2lu Z0dyb3VwTGV2ZWwgZ3JvdXBMZXZlbHMpOworKwkJcHVibGljIHZvaWQgc2V0X2xheW91dCAoc3Ry aW5nIGlkKTsKKysJCXB1YmxpYyB2b2lkIHNldF90cmFja19jb25maWcgKGJvb2wgZW5hYmxlKTsK KysJCXB1YmxpYyB2b2lkIHNldF90cmFja19tb2RpZmllcnMgKGJvb2wgZW5hYmxlKTsKKysJCXB1 YmxpYyB2aXJ0dWFsIHNpZ25hbCB2b2lkIGJhZF9rZXljb2RlICh1aW50IGtleWNvZGUpOworKwl9 CisrCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3Vy YXRpb24uaCIsIHR5cGVfaWQgPSAiZ2tiZF9zdGF0dXNfZ2V0X3R5cGUgKCkiKV0KKysJcHVibGlj IGNsYXNzIFN0YXR1cyA6IEd0ay5TdGF0dXNJY29uIHsKKysJCVtDQ29kZSAoaGFzX2NvbnN0cnVj dF9mdW5jdGlvbiA9IGZhbHNlLCB0eXBlID0gIkd0a1N0YXR1c0ljb24qIildCisrCQlwdWJsaWMg U3RhdHVzICgpOworKwkJW0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90 ZXJtaW5hdGVkID0gdHJ1ZSldCisrCQlwdWJsaWMgc3RhdGljIHVub3duZWQgc3RyaW5nW10gZ2V0 X2dyb3VwX25hbWVzICgpOworKwkJcHVibGljIHN0YXRpYyBzdHJpbmcgZ2V0X2ltYWdlX2ZpbGVu YW1lICh1aW50IGdyb3VwKTsKKysJCXB1YmxpYyBzdGF0aWMgdW5vd25lZCBYa2wuRW5naW5lIGdl dF94a2xfZW5naW5lICgpOworKwkJcHVibGljIHZvaWQgcmVpbml0X3VpICgpOworKwl9CisrCVtD Q29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24u aCIsIGhhc190eXBlX2lkID0gZmFsc2UpXQorKwlwdWJsaWMgc3RydWN0IERlc2t0b3BDb25maWcg eworKwkJcHVibGljIGludCBkZWZhdWx0X2dyb3VwOworKwkJcHVibGljIGJvb2wgZ3JvdXBfcGVy X2FwcDsKKysJCXB1YmxpYyBib29sIGhhbmRsZV9pbmRpY2F0b3JzOworKwkJcHVibGljIGJvb2wg bGF5b3V0X25hbWVzX2FzX2dyb3VwX25hbWVzOworKwkJcHVibGljIGJvb2wgbG9hZF9leHRyYV9p dGVtczsKKysJCXB1YmxpYyB3ZWFrIEdMaWIuU2V0dGluZ3Mgc2V0dGluZ3M7CisrCQlwdWJsaWMg aW50IGNvbmZpZ19saXN0ZW5lcl9pZDsKKysJCXB1YmxpYyB3ZWFrIFhrbC5FbmdpbmUgZW5naW5l OworKwkJcHVibGljIGJvb2wgYWN0aXZhdGUgKCk7CisrCQlwdWJsaWMgdm9pZCBpbml0IChYa2wu RW5naW5lIGVuZ2luZSk7CisrCQlwdWJsaWMgdm9pZCBsb2FkICgpOworKwkJcHVibGljIGJvb2wg bG9hZF9ncm91cF9kZXNjcmlwdGlvbnMgKFhrbC5Db25maWdSZWdpc3RyeSByZWdpc3RyeSwgc3Ry aW5nIGxheW91dF9pZHMsIHN0cmluZyB2YXJpYW50X2lkcywgc3RyaW5nIHNob3J0X2dyb3VwX25h bWVzLCBzdHJpbmcgZnVsbF9ncm91cF9uYW1lcyk7CisrCQlwdWJsaWMgdm9pZCBsb2NrX25leHRf Z3JvdXAgKCk7CisrCQlwdWJsaWMgdm9pZCBsb2NrX3ByZXZfZ3JvdXAgKCk7CisrCQlwdWJsaWMg dm9pZCByZXN0b3JlX2dyb3VwICgpOworKwkJcHVibGljIHZvaWQgc2F2ZSAoKTsKKysJCXB1Ymxp YyB2b2lkIHN0YXJ0X2xpc3RlbiAoR0xpYi5DYWxsYmFjayBmdW5jKTsKKysJCXB1YmxpYyB2b2lk IHN0b3BfbGlzdGVuICgpOworKwkJcHVibGljIHZvaWQgdGVybSAoKTsKKysJfQorKwlbQ0NvZGUg KGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiLCBo YXNfdHlwZV9pZCA9IGZhbHNlKV0KKysJcHVibGljIHN0cnVjdCBJbmRpY2F0b3JDb25maWcgewor KwkJcHVibGljIGludCBzZWNvbmRhcnlfZ3JvdXBzX21hc2s7CisrCQlwdWJsaWMgYm9vbCBzaG93 X2ZsYWdzOworKwkJcHVibGljIHdlYWsgc3RyaW5nIGZvbnRfZmFtaWx5OworKwkJcHVibGljIGlu dCBmb250X3NpemU7CisrCQlwdWJsaWMgd2VhayBzdHJpbmcgZm9yZWdyb3VuZF9jb2xvcjsKKysJ CXB1YmxpYyB3ZWFrIHN0cmluZyBiYWNrZ3JvdW5kX2NvbG9yOworKwkJcHVibGljIHdlYWsgc3Ry aW5nIGVuYWJsZWRfcGx1Z2luczsKKysJCXB1YmxpYyB3ZWFrIEdMaWIuU2V0dGluZ3Mgc2V0dGlu Z3M7CisrCQlwdWJsaWMgd2VhayBHTGliLlNMaXN0PHZvaWQqPiBpbWFnZV9maWxlbmFtZXM7Cisr CQlwdWJsaWMgd2VhayBHdGsuSWNvblRoZW1lIGljb25fdGhlbWU7CisrCQlwdWJsaWMgaW50IGNv bmZpZ19saXN0ZW5lcl9pZDsKKysJCXB1YmxpYyB3ZWFrIFhrbC5FbmdpbmUgZW5naW5lOworKwkJ cHVibGljIHZvaWQgYWN0aXZhdGUgKCk7CisrCQlwdWJsaWMgdm9pZCBmcmVlX2ltYWdlX2ZpbGVu YW1lcyAoKTsKKysJCXB1YmxpYyBzdHJpbmcgZ2V0X2ZnX2NvbG9yX2Zvcl93aWRnZXQgKEd0ay5X aWRnZXQgd2lkZ2V0KTsKKysJCXB1YmxpYyB2b2lkIGdldF9mb250X2Zvcl93aWRnZXQgKEd0ay5X aWRnZXQgd2lkZ2V0LCBzdHJpbmcgZm9udF9mYW1pbHksIGludCBmb250X3NpemUpOworKwkJcHVi bGljIHN0cmluZyBnZXRfaW1hZ2VzX2ZpbGUgKEdrYmQuS2V5Ym9hcmRDb25maWcga2JkX2NvbmZp ZywgaW50IGdyb3VwKTsKKysJCXB1YmxpYyB2b2lkIGluaXQgKFhrbC5FbmdpbmUgZW5naW5lKTsK KysJCXB1YmxpYyB2b2lkIGxvYWQgKCk7CisrCQlwdWJsaWMgdm9pZCBsb2FkX2ltYWdlX2ZpbGVu YW1lcyAoR2tiZC5LZXlib2FyZENvbmZpZyBrYmRfY29uZmlnKTsKKysJCXB1YmxpYyB2b2lkIHJl ZnJlc2hfc3R5bGUgKCk7CisrCQlwdWJsaWMgdm9pZCBzYXZlICgpOworKwkJcHVibGljIHZvaWQg c3RhcnRfbGlzdGVuIChHTGliLkNhbGxiYWNrIGZ1bmMpOworKwkJcHVibGljIHZvaWQgc3RvcF9s aXN0ZW4gKCk7CisrCQlwdWJsaWMgdm9pZCB0ZXJtICgpOworKwl9CisrCVtDQ29kZSAoY2hlYWRl cl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24uaCIsIGhhc190eXBl X2lkID0gZmFsc2UpXQorKwlwdWJsaWMgc3RydWN0IEluZGljYXRvclBsdWdpbiB7CisrCQlwdWJs aWMgd2VhayBzdHJpbmcgbmFtZTsKKysJCXB1YmxpYyB3ZWFrIHN0cmluZyBkZXNjcmlwdGlvbjsK KysJCXB1YmxpYyB3ZWFrIEdrYmQuSW5kaWNhdG9yUGx1Z2luSW5pdEZ1bmMgaW5pdF9jYWxsYmFj azsKKysJCXB1YmxpYyB3ZWFrIEdrYmQuSW5kaWNhdG9yUGx1Z2luVGVybUZ1bmMgdGVybV9jYWxs YmFjazsKKysJCXB1YmxpYyB3ZWFrIEdrYmQuSW5kaWNhdG9yUGx1Z2luQ29uZmlndXJlUHJvcGVy dGllcyBjb25maWd1cmVfcHJvcGVydGllc19jYWxsYmFjazsKKysJCXB1YmxpYyB3ZWFrIEdrYmQu SW5kaWNhdG9yUGx1Z2luR3JvdXBDaGFuZ2VkRnVuYyBncm91cF9jaGFuZ2VkX2NhbGxiYWNrOwor KwkJcHVibGljIHdlYWsgR2tiZC5JbmRpY2F0b3JQbHVnaW5XaW5kb3dDcmVhdGVkRnVuYyB3aW5k b3dfY3JlYXRlZF9jYWxsYmFjazsKKysJCXB1YmxpYyB3ZWFrIEdrYmQuSW5kaWNhdG9yUGx1Z2lu Q29uZmlnQ2hhbmdlZEZ1bmMgY29uZmlnX2NoYW5nZWRfY2FsbGJhY2s7CisrCQlwdWJsaWMgc3Rh dGljIHVpbnQgZ2V0X251bV9ncm91cHMgKEdrYmQuSW5kaWNhdG9yUGx1Z2luQ29udGFpbmVyIHBj KTsKKysJCVtDQ29kZSAoYXJyYXlfbGVuZ3RoID0gZmFsc2UsIGFycmF5X251bGxfdGVybWluYXRl ZCA9IHRydWUpXQorKwkJcHVibGljIHN0YXRpYyB1bm93bmVkIHN0cmluZ1tdIGxvYWRfbG9jYWxp emVkX2dyb3VwX25hbWVzIChHa2JkLkluZGljYXRvclBsdWdpbkNvbnRhaW5lciBwYyk7CisrCX0K KysJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYmdub21la2JkL2drYmQtY29uZmlndXJh dGlvbi5oIiwgaGFzX3R5cGVfaWQgPSBmYWxzZSldCisrCXB1YmxpYyBzdHJ1Y3QgSW5kaWNhdG9y UGx1Z2luQ29udGFpbmVyIHsKKysJCXB1YmxpYyB3ZWFrIEdMaWIuU2V0dGluZ3Mgc2V0dGluZ3M7 CisrCQlwdWJsaWMgdm9pZCBpbml0ICgpOworKwkJcHVibGljIHZvaWQgcmVpbml0X3VpICgpOwor KwkJcHVibGljIHZvaWQgdGVybSAoKTsKKysJfQorKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUg PSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiLCBoYXNfdHlwZV9pZCA9IGZhbHNl KV0KKysJcHVibGljIHN0cnVjdCBJbmRpY2F0b3JQbHVnaW5NYW5hZ2VyIHsKKysJCXB1YmxpYyB3 ZWFrIEdMaWIuSGFzaFRhYmxlPHZvaWQqLHZvaWQqPiBhbGxfcGx1Z2luX3JlY3M7CisrCQlwdWJs aWMgd2VhayBHTGliLlNMaXN0PHZvaWQqPiBpbml0ZWRfcGx1Z2luX3JlY3M7CisrCQlwdWJsaWMg dm9pZCBjb25maWdfY2hhbmdlZCAoR2tiZC5LZXlib2FyZENvbmZpZyBmcm9tLCBHa2JkLktleWJv YXJkQ29uZmlnIHRvKTsKKysJCXB1YmxpYyB2b2lkIGNvbmZpZ3VyZV9wbHVnaW4gKEdrYmQuSW5k aWNhdG9yUGx1Z2luQ29udGFpbmVyIHBjLCBzdHJpbmcgZnVsbF9wYXRoLCBHdGsuV2luZG93IHBh cmVudCk7CisrCQlwdWJsaWMgR3RrLldpZGdldCBkZWNvcmF0ZV93aWRnZXQgKEd0ay5XaWRnZXQg d2lkZ2V0LCBpbnQgZ3JvdXAsIHN0cmluZyBncm91cF9kZXNjcmlwdGlvbiwgR2tiZC5LZXlib2Fy ZENvbmZpZyBjb25maWcpOworKwkJcHVibGljIHZvaWQgZGVtb3RlX3BsdWdpbiAoc3RyaW5nIGVu YWJsZWRfcGx1Z2lucywgc3RyaW5nIGZ1bGxfcGF0aCk7CisrCQlwdWJsaWMgdm9pZCBkaXNhYmxl X3BsdWdpbiAoc3RyaW5nIGVuYWJsZWRfcGx1Z2lucywgc3RyaW5nIGZ1bGxfcGF0aCk7CisrCQlw dWJsaWMgdm9pZCBlbmFibGVfcGx1Z2luIChzdHJpbmcgZW5hYmxlZF9wbHVnaW5zLCBzdHJpbmcg ZnVsbF9wYXRoKTsKKysJCXB1YmxpYyBHa2JkLkluZGljYXRvclBsdWdpbiBnZXRfcGx1Z2luIChz dHJpbmcgZnVsbF9wYXRoKTsKKysJCXB1YmxpYyB2b2lkIGdyb3VwX2NoYW5nZWQgKEd0ay5XaWRn ZXQgbm90ZWJvb2ssIGludCBuZXdfZ3JvdXApOworKwkJcHVibGljIHZvaWQgaW5pdCAoKTsKKysJ CXB1YmxpYyB2b2lkIGluaXRfZW5hYmxlZF9wbHVnaW5zIChHa2JkLkluZGljYXRvclBsdWdpbkNv bnRhaW5lciBwYywgc3RyaW5nIGVuYWJsZWRfcGx1Z2lucyk7CisrCQlwdWJsaWMgdm9pZCBwcm9t b3RlX3BsdWdpbiAoc3RyaW5nIGVuYWJsZWRfcGx1Z2lucywgc3RyaW5nIGZ1bGxfcGF0aCk7Cisr CQlwdWJsaWMgdm9pZCB0ZXJtICgpOworKwkJcHVibGljIHZvaWQgdGVybV9pbml0aWFsaXplZF9w bHVnaW5zICgpOworKwkJcHVibGljIHZvaWQgdG9nZ2xlX3BsdWdpbnMgKEdrYmQuSW5kaWNhdG9y UGx1Z2luQ29udGFpbmVyIHBjLCBzdHJpbmcgZW5hYmxlZF9wbHVnaW5zKTsKKysJCXB1YmxpYyBp bnQgd2luZG93X2NyZWF0ZWQgKFguV2luZG93IHdpbiwgWC5XaW5kb3cgcGFyZW50KTsKKysJfQor KwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0 aW9uLmgiLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KKysJcHVibGljIHN0cnVjdCBJbmRpY2F0b3JQ bHVnaW5NYW5hZ2VyUmVjb3JkIHsKKysJCXB1YmxpYyB3ZWFrIHN0cmluZyBmdWxsX3BhdGg7Cisr CQlwdWJsaWMgd2VhayBHTGliLk1vZHVsZSBtb2R1bGU7CisrCQlwdWJsaWMgR2tiZC5JbmRpY2F0 b3JQbHVnaW4gcGx1Z2luOworKwl9CisrCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJn bm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24uaCIsIGhhc190eXBlX2lkID0gZmFsc2UpXQorKwlw dWJsaWMgc3RydWN0IEtleWJvYXJkQ29uZmlnIHsKKysJCXB1YmxpYyB3ZWFrIHN0cmluZyBtb2Rl bDsKKysJCXB1YmxpYyB3ZWFrIHN0cmluZyBsYXlvdXRzX3ZhcmlhbnRzOworKwkJcHVibGljIHdl YWsgc3RyaW5nIG9wdGlvbnM7CisrCQlwdWJsaWMgd2VhayBHTGliLlNldHRpbmdzIHNldHRpbmdz OworKwkJcHVibGljIGludCBjb25maWdfbGlzdGVuZXJfaWQ7CisrCQlwdWJsaWMgd2VhayBYa2wu RW5naW5lIGVuZ2luZTsKKysJCXB1YmxpYyBib29sIGFjdGl2YXRlICgpOworKwkJW0NDb2RlIChh cnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1ZSldCisrCQlw dWJsaWMgc3RhdGljIHN0cmluZ1tdIGFkZF9kZWZhdWx0X3N3aXRjaF9vcHRpb25faWZfbmVjZXNz YXJ5IChzdHJpbmcgbGF5b3V0c19saXN0LCBzdHJpbmcgb3B0aW9uc19saXN0LCBib29sIHdhc19h cHBlbmRlZCk7CisrCQlwdWJsaWMgYm9vbCBlcXVhbHMgKEdrYmQuS2V5Ym9hcmRDb25maWcga2Jk X2NvbmZpZzIpOworKwkJcHVibGljIHN0YXRpYyB1bm93bmVkIHN0cmluZyBmb3JtYXRfZnVsbF9k ZXNjcmlwdGlvbiAoc3RyaW5nIGxheW91dF9kZXNjciwgc3RyaW5nIHZhcmlhbnRfZGVzY3IpOwor KwkJcHVibGljIHN0YXRpYyBib29sIGdldF9kZXNjcmlwdGlvbnMgKFhrbC5Db25maWdSZWdpc3Ry eSBjb25maWdfcmVnaXN0cnksIHN0cmluZyBuYW1lLCBzdHJpbmcgbGF5b3V0X3Nob3J0X2Rlc2Ny LCBzdHJpbmcgbGF5b3V0X2Rlc2NyLCBzdHJpbmcgdmFyaWFudF9zaG9ydF9kZXNjciwgc3RyaW5n IHZhcmlhbnRfZGVzY3IpOworKwkJcHVibGljIHZvaWQgaW5pdCAoWGtsLkVuZ2luZSBlbmdpbmUp OworKwkJcHVibGljIHZvaWQgbG9hZCAoR2tiZC5LZXlib2FyZENvbmZpZyBrYmRfY29uZmlnX2Rl ZmF1bHQpOworKwkJcHVibGljIHZvaWQgbG9hZF9mcm9tX3hfY3VycmVudCAoWGtsLkNvbmZpZ1Jl YyBidWYpOworKwkJcHVibGljIHZvaWQgbG9hZF9mcm9tX3hfaW5pdGlhbCAoWGtsLkNvbmZpZ1Jl YyBidWYpOworKwkJcHVibGljIHN0YXRpYyB1bm93bmVkIHN0cmluZyBtZXJnZV9pdGVtcyAoc3Ry aW5nIHBhcmVudCwgc3RyaW5nIGNoaWxkKTsKKysJCXB1YmxpYyB2b2lkIHNhdmUgKCk7CisrCQlw dWJsaWMgc3RhdGljIGJvb2wgc3BsaXRfaXRlbXMgKHN0cmluZyBtZXJnZWQsIHN0cmluZyBwYXJl bnQsIHN0cmluZyBjaGlsZCk7CisrCQlwdWJsaWMgdm9pZCBzdGFydF9saXN0ZW4gKEdMaWIuQ2Fs bGJhY2sgZnVuYyk7CisrCQlwdWJsaWMgdm9pZCBzdG9wX2xpc3RlbiAoKTsKKysJCXB1YmxpYyB2 b2lkIHRlcm0gKCk7CisrCQlwdWJsaWMgc3RyaW5nIHRvX3N0cmluZyAoKTsKKysJfQorKwlbQ0Nv ZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgi LCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KKysJcHVibGljIHN0cnVjdCBLZXlib2FyZERyYXdpbmdE b29kYWQgeworKwl9CisrCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9n a2JkLWNvbmZpZ3VyYXRpb24uaCIsIGhhc190eXBlX2lkID0gZmFsc2UpXQorKwlwdWJsaWMgc3Ry dWN0IEtleWJvYXJkRHJhd2luZ0dyb3VwTGV2ZWwgeworKwkJcHVibGljIGludCBncm91cDsKKysJ CXB1YmxpYyBpbnQgbGV2ZWw7CisrCX0KKysJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxp Ymdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgaGFzX3R5cGVfaWQgPSBmYWxzZSldCisr CXB1YmxpYyBzdHJ1Y3QgS2V5Ym9hcmREcmF3aW5nSXRlbSB7CisrCX0KKysJW0NDb2RlIChjaGVh ZGVyX2ZpbGVuYW1lID0gImxpYmdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgaGFzX3R5 cGVfaWQgPSBmYWxzZSldCisrCXB1YmxpYyBzdHJ1Y3QgS2V5Ym9hcmREcmF3aW5nS2V5IHsKKysJ fQorKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1 cmF0aW9uLmgiLCBoYXNfdHlwZV9pZCA9IGZhbHNlKV0KKysJcHVibGljIHN0cnVjdCBLZXlib2Fy ZERyYXdpbmdSZW5kZXJDb250ZXh0IHsKKysJCXB1YmxpYyB3ZWFrIENhaXJvLkNvbnRleHQgY3I7 CisrCQlwdWJsaWMgaW50IGFuZ2xlOworKwkJcHVibGljIHdlYWsgUGFuZ28uTGF5b3V0IGxheW91 dDsKKysJCXB1YmxpYyB3ZWFrIFBhbmdvLkZvbnREZXNjcmlwdGlvbiBmb250X2Rlc2M7CisrCQlw dWJsaWMgaW50IHNjYWxlX251bWVyYXRvcjsKKysJCXB1YmxpYyBpbnQgc2NhbGVfZGVub21pbmF0 b3I7CisrCQlwdWJsaWMgR2RrLlJHQkEgZGFya19jb2xvcjsKKysJfQorKwlbQ0NvZGUgKGNoZWFk ZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiLCBjcHJlZml4 ID0gIkdLQkRfS0VZQk9BUkRfRFJBV0lOR19QT1NfIildCisrCXB1YmxpYyBlbnVtIEtleWJvYXJk RHJhd2luZ0dyb3VwTGV2ZWxQb3NpdGlvbiB7CisrCQlUT1BMRUZULAorKwkJVE9QUklHSFQsCisr CQlCT1RUT01MRUZULAorKwkJQk9UVE9NUklHSFQsCisrCQlUT1RBTCwKKysJCUZJUlNULAorKwkJ TEFTVAorKwl9CisrCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2Jk LWNvbmZpZ3VyYXRpb24uaCIsIGNwcmVmaXggPSAiR0tCRF9LRVlCT0FSRF9EUkFXSU5HX0lURU1f VFlQRV8iKV0KKysJcHVibGljIGVudW0gS2V5Ym9hcmREcmF3aW5nSXRlbVR5cGUgeworKwkJSU5W QUxJRCwKKysJCUtFWSwKKysJCUtFWV9FWFRSQSwKKysJCURPT0RBRAorKwl9CisrCVtDQ29kZSAo Y2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24uaCIsIGhh c190YXJnZXQgPSBmYWxzZSldCisrCXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIEluZGljYXRvclBsdWdp bkNvbmZpZ0NoYW5nZWRGdW5jIChHa2JkLktleWJvYXJkQ29uZmlnIGZyb20sIEdrYmQuS2V5Ym9h cmRDb25maWcgdG8pOworKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQv Z2tiZC1jb25maWd1cmF0aW9uLmgiLCBoYXNfdGFyZ2V0ID0gZmFsc2UpXQorKwlwdWJsaWMgZGVs ZWdhdGUgdm9pZCBJbmRpY2F0b3JQbHVnaW5Db25maWd1cmVQcm9wZXJ0aWVzIChHa2JkLkluZGlj YXRvclBsdWdpbkNvbnRhaW5lciBwYywgR3RrLldpbmRvdyBwYXJlbnQpOworKwlbQ0NvZGUgKGNo ZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiLCBoYXNf dGFyZ2V0ID0gZmFsc2UpXQorKwlwdWJsaWMgZGVsZWdhdGUgdm9pZCogSW5kaWNhdG9yUGx1Z2lu R2V0UGx1Z2luRnVuYyAoKTsKKysJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxpYmdub21l a2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgaGFzX3RhcmdldCA9IGZhbHNlKV0KKysJcHVibGlj IGRlbGVnYXRlIHZvaWQgSW5kaWNhdG9yUGx1Z2luR3JvdXBDaGFuZ2VkRnVuYyAoR3RrLldpZGdl dCBub3RlYm9vaywgaW50IG5ld19ncm91cCk7CisrCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9 ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24uaCIsIGhhc190YXJnZXQgPSBmYWxzZSld CisrCXB1YmxpYyBkZWxlZ2F0ZSBib29sIEluZGljYXRvclBsdWdpbkluaXRGdW5jIChHa2JkLklu ZGljYXRvclBsdWdpbkNvbnRhaW5lciBwYyk7CisrCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9 ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24uaCIsIGhhc190YXJnZXQgPSBmYWxzZSld CisrCXB1YmxpYyBkZWxlZ2F0ZSB2b2lkIEluZGljYXRvclBsdWdpblRlcm1GdW5jICgpOworKwlb Q0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9u LmgiLCBoYXNfdGFyZ2V0ID0gZmFsc2UpXQorKwlwdWJsaWMgZGVsZWdhdGUgaW50IEluZGljYXRv clBsdWdpbldpbmRvd0NyZWF0ZWRGdW5jIChYLldpbmRvdyB3aW4sIFguV2luZG93IHBhcmVudCk7 CisrCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3Vy YXRpb24uaCIsIGNuYW1lID0gIkdLQkRfREVTS1RPUF9TQ0hFTUEiKV0KKysJcHVibGljIGNvbnN0 IHN0cmluZyBERVNLVE9QX1NDSEVNQTsKKysJW0NDb2RlIChjaGVhZGVyX2ZpbGVuYW1lID0gImxp Ymdub21la2JkL2drYmQtY29uZmlndXJhdGlvbi5oIiwgY25hbWUgPSAiR0tCRF9LRVlCT0FSRF9E UkFXSU5HX0giKV0KKysJcHVibGljIGNvbnN0IGludCBLRVlCT0FSRF9EUkFXSU5HX0g7CisrCVtD Q29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24u aCIsIGNuYW1lID0gIkdLQkRfS0VZQk9BUkRfU0NIRU1BIildCisrCXB1YmxpYyBjb25zdCBzdHJp bmcgS0VZQk9BUkRfU0NIRU1BOworKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25v bWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiKV0KKysJcHVibGljIHN0YXRpYyB2b2lkIGluc3Rh bGxfZ2xpYl9sb2dfYXBwZW5kZXIgKCk7CisrCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJs aWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24uaCIpXQorKwlwdWJsaWMgc3RhdGljIEdkay5S ZWN0YW5nbGUgcHJldmlld19sb2FkX3Bvc2l0aW9uICgpOworKwlbQ0NvZGUgKGNoZWFkZXJfZmls ZW5hbWUgPSAibGliZ25vbWVrYmQvZ2tiZC1jb25maWd1cmF0aW9uLmgiKV0KKysJcHVibGljIHN0 YXRpYyB2b2lkIHByZXZpZXdfc2F2ZV9wb3NpdGlvbiAoR2RrLlJlY3RhbmdsZSByZWN0KTsKKysJ W0NDb2RlIChhcnJheV9sZW5ndGggPSBmYWxzZSwgYXJyYXlfbnVsbF90ZXJtaW5hdGVkID0gdHJ1 ZSwgY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24uaCIp XQorKwlwdWJsaWMgc3RhdGljIHN0cmluZ1tdIHN0cnZfYXBwZW5kIChzdHJpbmcgYXJyLCBzdHJp bmcgZWxlbWVudCk7CisrCVtDQ29kZSAoY2hlYWRlcl9maWxlbmFtZSA9ICJsaWJnbm9tZWtiZC9n a2JkLWNvbmZpZ3VyYXRpb24uaCIpXQorKwlwdWJsaWMgc3RhdGljIHZvaWQgc3Rydl9iZWhlYWQg KHN0cmluZyBhcnIpOworKwlbQ0NvZGUgKGNoZWFkZXJfZmlsZW5hbWUgPSAibGliZ25vbWVrYmQv Z2tiZC1jb25maWd1cmF0aW9uLmgiKV0KKysJcHVibGljIHN0YXRpYyBib29sIHN0cnZfcmVtb3Zl IChzdHJpbmcgYXJyLCBzdHJpbmcgZWxlbWVudCk7CisrfQorLS0tIGlidXMvdWkvZ3RrMy9na2Jk bGF5b3V0LmMuZmFsc2Uub3JpZwkyMDEyLTAzLTA5IDE2OjQyOjU5LjY4ODYzOTg4MiArMDkwMAor KysrIGlidXMvdWkvZ3RrMy9na2JkbGF5b3V0LmMuZmFsc2UJMjAxMi0wMy0wOSAxNjo0Mjo1My45 NTA1MzU4MzYgKzA5MDAKK0BAIC0wLDAgKzEsMzA3IEBACisrLyogZ2tiZGxheW91dC5jIGdlbmVy YXRlZCBieSB2YWxhYyAwLjE1LjEsIHRoZSBWYWxhIGNvbXBpbGVyCisrICogZ2VuZXJhdGVkIGZy b20gZ2tiZGxheW91dC52YWxhLCBkbyBub3QgbW9kaWZ5ICovCisrCisrLyogdmltOnNldCBldCBz dHM9NCBzdz00OgorKyAqCisrICogaWJ1cyAtIFRoZSBJbnB1dCBCdXMKKysgKgorKyAqIENvcHly aWdodCAyMDEyIFJlZCBIYXQsIEluYy4KKysgKiBDb3B5cmlnaHQoYykgMjAxMiBQZW5nIEh1YW5n IDxzaGF3bi5wLmh1YW5nQGdtYWlsLmNvbT4KKysgKiBDb3B5cmlnaHQoYykgMjAxMiBUYWthbyBG dWppd2FyYSA8dGZ1aml3YXJAcmVkaGF0LmNvbT4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKysgKiBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCisrICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcihhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKysgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKysg KiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKysg KgorKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHdyaXRlIHRvIHRoZQorKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkg VGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisrICogQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNB CisrICovCisrCisrI2luY2x1ZGUgPGdsaWIuaD4KKysjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K KysjaW5jbHVkZSA8c3RkbGliLmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxn b2JqZWN0L2d2YWx1ZWNvbGxlY3Rvci5oPgorKworKworKyNkZWZpbmUgVFlQRV9HS0JEX0xBWU9V VCAoZ2tiZF9sYXlvdXRfZ2V0X3R5cGUgKCkpCisrI2RlZmluZSBHS0JEX0xBWU9VVChvYmopIChH X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFRZUEVfR0tCRF9MQVlPVVQsIEdrYmRM YXlvdXQpKQorKyNkZWZpbmUgR0tCRF9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf Q0xBU1NfQ0FTVCAoKGtsYXNzKSwgVFlQRV9HS0JEX0xBWU9VVCwgR2tiZExheW91dENsYXNzKSkK KysjZGVmaW5lIElTX0dLQkRfTEFZT1VUKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF ICgob2JqKSwgVFlQRV9HS0JEX0xBWU9VVCkpCisrI2RlZmluZSBJU19HS0JEX0xBWU9VVF9DTEFT UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBUWVBFX0dLQkRfTEFZ T1VUKSkKKysjZGVmaW5lIEdLQkRfTEFZT1VUX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFO Q0VfR0VUX0NMQVNTICgob2JqKSwgVFlQRV9HS0JEX0xBWU9VVCwgR2tiZExheW91dENsYXNzKSkK KysKKyt0eXBlZGVmIHN0cnVjdCBfR2tiZExheW91dCBHa2JkTGF5b3V0OworK3R5cGVkZWYgc3Ry dWN0IF9Ha2JkTGF5b3V0Q2xhc3MgR2tiZExheW91dENsYXNzOworK3R5cGVkZWYgc3RydWN0IF9H a2JkTGF5b3V0UHJpdmF0ZSBHa2JkTGF5b3V0UHJpdmF0ZTsKKyt0eXBlZGVmIHN0cnVjdCBfUGFy YW1TcGVjR2tiZExheW91dCBQYXJhbVNwZWNHa2JkTGF5b3V0OworKworK3N0cnVjdCBfR2tiZExh eW91dCB7CisrCUdUeXBlSW5zdGFuY2UgcGFyZW50X2luc3RhbmNlOworKwl2b2xhdGlsZSBpbnQg cmVmX2NvdW50OworKwlHa2JkTGF5b3V0UHJpdmF0ZSAqIHByaXY7CisrfTsKKysKKytzdHJ1Y3Qg X0drYmRMYXlvdXRDbGFzcyB7CisrCUdUeXBlQ2xhc3MgcGFyZW50X2NsYXNzOworKwl2b2lkICgq ZmluYWxpemUpIChHa2JkTGF5b3V0ICpzZWxmKTsKKyt9OworKworK3N0cnVjdCBfUGFyYW1TcGVj R2tiZExheW91dCB7CisrCUdQYXJhbVNwZWMgcGFyZW50X2luc3RhbmNlOworK307CisrCisrCisr c3RhdGljIGdwb2ludGVyIGdrYmRfbGF5b3V0X3BhcmVudF9jbGFzcyA9IE5VTEw7CisrCisrZ3Bv aW50ZXIgZ2tiZF9sYXlvdXRfcmVmIChncG9pbnRlciBpbnN0YW5jZSk7Cisrdm9pZCBna2JkX2xh eW91dF91bnJlZiAoZ3BvaW50ZXIgaW5zdGFuY2UpOworK0dQYXJhbVNwZWMqIHBhcmFtX3NwZWNf Z2tiZF9sYXlvdXQgKGNvbnN0IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciogbmljaywgY29uc3Qg Z2NoYXIqIGJsdXJiLCBHVHlwZSBvYmplY3RfdHlwZSwgR1BhcmFtRmxhZ3MgZmxhZ3MpOworK3Zv aWQgdmFsdWVfc2V0X2drYmRfbGF5b3V0IChHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB2X29iamVj dCk7Cisrdm9pZCB2YWx1ZV90YWtlX2drYmRfbGF5b3V0IChHVmFsdWUqIHZhbHVlLCBncG9pbnRl ciB2X29iamVjdCk7CisrZ3BvaW50ZXIgdmFsdWVfZ2V0X2drYmRfbGF5b3V0IChjb25zdCBHVmFs dWUqIHZhbHVlKTsKKytHVHlwZSBna2JkX2xheW91dF9nZXRfdHlwZSAodm9pZCkgR19HTlVDX0NP TlNUOworK2VudW0gIHsKKysJR0tCRF9MQVlPVVRfRFVNTVlfUFJPUEVSVFkKKyt9OworK0drYmRM YXlvdXQqIGdrYmRfbGF5b3V0X25ldyAodm9pZCk7CisrR2tiZExheW91dCogZ2tiZF9sYXlvdXRf Y29uc3RydWN0IChHVHlwZSBvYmplY3RfdHlwZSk7CisrZ2NoYXIqKiBna2JkX2xheW91dF9nZXRf bGF5b3V0cyAoR2tiZExheW91dCogc2VsZiwgaW50KiByZXN1bHRfbGVuZ3RoMSk7CisrZ2NoYXIq KiBna2JkX2xheW91dF9nZXRfZ3JvdXBfbmFtZXMgKEdrYmRMYXlvdXQqIHNlbGYsIGludCogcmVz dWx0X2xlbmd0aDEpOworK3ZvaWQgZ2tiZF9sYXlvdXRfbG9ja19ncm91cCAoR2tiZExheW91dCog c2VsZiwgZ2ludCBpZCk7Cisrdm9pZCBna2JkX2xheW91dF9zdGFydF9saXN0ZW4gKEdrYmRMYXlv dXQqIHNlbGYpOworK3ZvaWQgZ2tiZF9sYXlvdXRfc3RvcF9saXN0ZW4gKEdrYmRMYXlvdXQqIHNl bGYpOworK3N0YXRpYyB2b2lkIGdrYmRfbGF5b3V0X2ZpbmFsaXplIChHa2JkTGF5b3V0KiBvYmop OworKworKworK0drYmRMYXlvdXQqIGdrYmRfbGF5b3V0X2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0 X3R5cGUpIHsKKysJR2tiZExheW91dCogc2VsZiA9IE5VTEw7CisrCXNlbGYgPSAoR2tiZExheW91 dCopIGdfdHlwZV9jcmVhdGVfaW5zdGFuY2UgKG9iamVjdF90eXBlKTsKKysJcmV0dXJuIHNlbGY7 CisrfQorKworKworK0drYmRMYXlvdXQqIGdrYmRfbGF5b3V0X25ldyAodm9pZCkgeworKwlyZXR1 cm4gZ2tiZF9sYXlvdXRfY29uc3RydWN0IChUWVBFX0dLQkRfTEFZT1VUKTsKKyt9CisrCisrCisr Z2NoYXIqKiBna2JkX2xheW91dF9nZXRfbGF5b3V0cyAoR2tiZExheW91dCogc2VsZiwgaW50KiBy ZXN1bHRfbGVuZ3RoMSkgeworKwlnY2hhcioqIHJlc3VsdCA9IE5VTEw7CisrCWdjaGFyKiogX3Rt cDBfID0gTlVMTDsKKysJZ2NoYXIqKiBfdG1wMV87CisrCWdpbnQgX3RtcDFfX2xlbmd0aDE7Cisr CWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5VTEwsIE5VTEwpOworKwlfdG1wMF8gPSBn X25ldzAgKGdjaGFyKiwgMCArIDEpOworKwlfdG1wMV8gPSBfdG1wMF87CisrCV90bXAxX19sZW5n dGgxID0gMDsKKysJaWYgKHJlc3VsdF9sZW5ndGgxKSB7CisrCQkqcmVzdWx0X2xlbmd0aDEgPSBf dG1wMV9fbGVuZ3RoMTsKKysJfQorKwlyZXN1bHQgPSBfdG1wMV87CisrCXJldHVybiByZXN1bHQ7 CisrfQorKworKworK2djaGFyKiogZ2tiZF9sYXlvdXRfZ2V0X2dyb3VwX25hbWVzIChHa2JkTGF5 b3V0KiBzZWxmLCBpbnQqIHJlc3VsdF9sZW5ndGgxKSB7CisrCWdjaGFyKiogcmVzdWx0ID0gTlVM TDsKKysJZ2NoYXIqKiBfdG1wMF8gPSBOVUxMOworKwlnY2hhcioqIF90bXAxXzsKKysJZ2ludCBf dG1wMV9fbGVuZ3RoMTsKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCwgTlVM TCk7CisrCV90bXAwXyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7CisrCV90bXAxXyA9IF90bXAw XzsKKysJX3RtcDFfX2xlbmd0aDEgPSAwOworKwlpZiAocmVzdWx0X2xlbmd0aDEpIHsKKysJCSpy ZXN1bHRfbGVuZ3RoMSA9IF90bXAxX19sZW5ndGgxOworKwl9CisrCXJlc3VsdCA9IF90bXAxXzsK KysJcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrdm9pZCBna2JkX2xheW91dF9sb2NrX2dyb3Vw IChHa2JkTGF5b3V0KiBzZWxmLCBnaW50IGlkKSB7CisrCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYg IT0gTlVMTCk7CisrfQorKworKworK3ZvaWQgZ2tiZF9sYXlvdXRfc3RhcnRfbGlzdGVuIChHa2Jk TGF5b3V0KiBzZWxmKSB7CisrCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7CisrfQor KworKworK3ZvaWQgZ2tiZF9sYXlvdXRfc3RvcF9saXN0ZW4gKEdrYmRMYXlvdXQqIHNlbGYpIHsK KysJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKKyt9CisrCisrCisrc3RhdGljIHZv aWQgdmFsdWVfZ2tiZF9sYXlvdXRfaW5pdCAoR1ZhbHVlKiB2YWx1ZSkgeworKwl2YWx1ZS0+ZGF0 YVswXS52X3BvaW50ZXIgPSBOVUxMOworK30KKysKKysKKytzdGF0aWMgdm9pZCB2YWx1ZV9na2Jk X2xheW91dF9mcmVlX3ZhbHVlIChHVmFsdWUqIHZhbHVlKSB7CisrCWlmICh2YWx1ZS0+ZGF0YVsw XS52X3BvaW50ZXIpIHsKKysJCWdrYmRfbGF5b3V0X3VucmVmICh2YWx1ZS0+ZGF0YVswXS52X3Bv aW50ZXIpOworKwl9CisrfQorKworKworK3N0YXRpYyB2b2lkIHZhbHVlX2drYmRfbGF5b3V0X2Nv cHlfdmFsdWUgKGNvbnN0IEdWYWx1ZSogc3JjX3ZhbHVlLCBHVmFsdWUqIGRlc3RfdmFsdWUpIHsK KysJaWYgKHNyY192YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpIHsKKysJCWRlc3RfdmFsdWUtPmRh dGFbMF0udl9wb2ludGVyID0gZ2tiZF9sYXlvdXRfcmVmIChzcmNfdmFsdWUtPmRhdGFbMF0udl9w b2ludGVyKTsKKysJfSBlbHNlIHsKKysJCWRlc3RfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0g TlVMTDsKKysJfQorK30KKysKKysKKytzdGF0aWMgZ3BvaW50ZXIgdmFsdWVfZ2tiZF9sYXlvdXRf cGVla19wb2ludGVyIChjb25zdCBHVmFsdWUqIHZhbHVlKSB7CisrCXJldHVybiB2YWx1ZS0+ZGF0 YVswXS52X3BvaW50ZXI7CisrfQorKworKworK3N0YXRpYyBnY2hhciogdmFsdWVfZ2tiZF9sYXlv dXRfY29sbGVjdF92YWx1ZSAoR1ZhbHVlKiB2YWx1ZSwgZ3VpbnQgbl9jb2xsZWN0X3ZhbHVlcywg R1R5cGVDVmFsdWUqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xsZWN0X2ZsYWdzKSB7CisrCWlm IChjb2xsZWN0X3ZhbHVlc1swXS52X3BvaW50ZXIpIHsKKysJCUdrYmRMYXlvdXQqIG9iamVjdDsK KysJCW9iamVjdCA9IGNvbGxlY3RfdmFsdWVzWzBdLnZfcG9pbnRlcjsKKysJCWlmIChvYmplY3Qt PnBhcmVudF9pbnN0YW5jZS5nX2NsYXNzID09IE5VTEwpIHsKKysJCQlyZXR1cm4gZ19zdHJjb25j YXQgKCJpbnZhbGlkIHVuY2xhc3NlZCBvYmplY3QgcG9pbnRlciBmb3IgdmFsdWUgdHlwZSBgIiwg R19WQUxVRV9UWVBFX05BTUUgKHZhbHVlKSwgIiciLCBOVUxMKTsKKysJCX0gZWxzZSBpZiAoIWdf dmFsdWVfdHlwZV9jb21wYXRpYmxlIChHX1RZUEVfRlJPTV9JTlNUQU5DRSAob2JqZWN0KSwgR19W QUxVRV9UWVBFICh2YWx1ZSkpKSB7CisrCQkJcmV0dXJuIGdfc3RyY29uY2F0ICgiaW52YWxpZCBv YmplY3QgdHlwZSBgIiwgZ190eXBlX25hbWUgKEdfVFlQRV9GUk9NX0lOU1RBTkNFIChvYmplY3Qp KSwgIicgZm9yIHZhbHVlIHR5cGUgYCIsIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSksICInIiwg TlVMTCk7CisrCQl9CisrCQl2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBna2JkX2xheW91dF9y ZWYgKG9iamVjdCk7CisrCX0gZWxzZSB7CisrCQl2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBO VUxMOworKwl9CisrCXJldHVybiBOVUxMOworK30KKysKKysKKytzdGF0aWMgZ2NoYXIqIHZhbHVl X2drYmRfbGF5b3V0X2xjb3B5X3ZhbHVlIChjb25zdCBHVmFsdWUqIHZhbHVlLCBndWludCBuX2Nv bGxlY3RfdmFsdWVzLCBHVHlwZUNWYWx1ZSogY29sbGVjdF92YWx1ZXMsIGd1aW50IGNvbGxlY3Rf ZmxhZ3MpIHsKKysJR2tiZExheW91dCoqIG9iamVjdF9wOworKwlvYmplY3RfcCA9IGNvbGxlY3Rf dmFsdWVzWzBdLnZfcG9pbnRlcjsKKysJaWYgKCFvYmplY3RfcCkgeworKwkJcmV0dXJuIGdfc3Ry ZHVwX3ByaW50ZiAoInZhbHVlIGxvY2F0aW9uIGZvciBgJXMnIHBhc3NlZCBhcyBOVUxMIiwgR19W QUxVRV9UWVBFX05BTUUgKHZhbHVlKSk7CisrCX0KKysJaWYgKCF2YWx1ZS0+ZGF0YVswXS52X3Bv aW50ZXIpIHsKKysJCSpvYmplY3RfcCA9IE5VTEw7CisrCX0gZWxzZSBpZiAoY29sbGVjdF9mbGFn cyAmIEdfVkFMVUVfTk9DT1BZX0NPTlRFTlRTKSB7CisrCQkqb2JqZWN0X3AgPSB2YWx1ZS0+ZGF0 YVswXS52X3BvaW50ZXI7CisrCX0gZWxzZSB7CisrCQkqb2JqZWN0X3AgPSBna2JkX2xheW91dF9y ZWYgKHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcik7CisrCX0KKysJcmV0dXJuIE5VTEw7CisrfQor KworKworK0dQYXJhbVNwZWMqIHBhcmFtX3NwZWNfZ2tiZF9sYXlvdXQgKGNvbnN0IGdjaGFyKiBu YW1lLCBjb25zdCBnY2hhciogbmljaywgY29uc3QgZ2NoYXIqIGJsdXJiLCBHVHlwZSBvYmplY3Rf dHlwZSwgR1BhcmFtRmxhZ3MgZmxhZ3MpIHsKKysJUGFyYW1TcGVjR2tiZExheW91dCogc3BlYzsK KysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfdHlwZV9pc19hIChvYmplY3RfdHlwZSwgVFlQRV9H S0JEX0xBWU9VVCksIE5VTEwpOworKwlzcGVjID0gZ19wYXJhbV9zcGVjX2ludGVybmFsIChHX1RZ UEVfUEFSQU1fT0JKRUNULCBuYW1lLCBuaWNrLCBibHVyYiwgZmxhZ3MpOworKwlHX1BBUkFNX1NQ RUMgKHNwZWMpLT52YWx1ZV90eXBlID0gb2JqZWN0X3R5cGU7CisrCXJldHVybiBHX1BBUkFNX1NQ RUMgKHNwZWMpOworK30KKysKKysKKytncG9pbnRlciB2YWx1ZV9nZXRfZ2tiZF9sYXlvdXQgKGNv bnN0IEdWYWx1ZSogdmFsdWUpIHsKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfVFlQRV9DSEVD S19WQUxVRV9UWVBFICh2YWx1ZSwgVFlQRV9HS0JEX0xBWU9VVCksIE5VTEwpOworKwlyZXR1cm4g dmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOworK30KKysKKysKKyt2b2lkIHZhbHVlX3NldF9na2Jk X2xheW91dCAoR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpIHsKKysJR2tiZExheW91 dCogb2xkOworKwlnX3JldHVybl9pZl9mYWlsIChHX1RZUEVfQ0hFQ0tfVkFMVUVfVFlQRSAodmFs dWUsIFRZUEVfR0tCRF9MQVlPVVQpKTsKKysJb2xkID0gdmFsdWUtPmRhdGFbMF0udl9wb2ludGVy OworKwlpZiAodl9vYmplY3QpIHsKKysJCWdfcmV0dXJuX2lmX2ZhaWwgKEdfVFlQRV9DSEVDS19J TlNUQU5DRV9UWVBFICh2X29iamVjdCwgVFlQRV9HS0JEX0xBWU9VVCkpOworKwkJZ19yZXR1cm5f aWZfZmFpbCAoZ192YWx1ZV90eXBlX2NvbXBhdGlibGUgKEdfVFlQRV9GUk9NX0lOU1RBTkNFICh2 X29iamVjdCksIEdfVkFMVUVfVFlQRSAodmFsdWUpKSk7CisrCQl2YWx1ZS0+ZGF0YVswXS52X3Bv aW50ZXIgPSB2X29iamVjdDsKKysJCWdrYmRfbGF5b3V0X3JlZiAodmFsdWUtPmRhdGFbMF0udl9w b2ludGVyKTsKKysJfSBlbHNlIHsKKysJCXZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IE5VTEw7 CisrCX0KKysJaWYgKG9sZCkgeworKwkJZ2tiZF9sYXlvdXRfdW5yZWYgKG9sZCk7CisrCX0KKyt9 CisrCisrCisrdm9pZCB2YWx1ZV90YWtlX2drYmRfbGF5b3V0IChHVmFsdWUqIHZhbHVlLCBncG9p bnRlciB2X29iamVjdCkgeworKwlHa2JkTGF5b3V0KiBvbGQ7CisrCWdfcmV0dXJuX2lmX2ZhaWwg KEdfVFlQRV9DSEVDS19WQUxVRV9UWVBFICh2YWx1ZSwgVFlQRV9HS0JEX0xBWU9VVCkpOworKwlv bGQgPSB2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXI7CisrCWlmICh2X29iamVjdCkgeworKwkJZ19y ZXR1cm5faWZfZmFpbCAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKHZfb2JqZWN0LCBUWVBF X0dLQkRfTEFZT1VUKSk7CisrCQlnX3JldHVybl9pZl9mYWlsIChnX3ZhbHVlX3R5cGVfY29tcGF0 aWJsZSAoR19UWVBFX0ZST01fSU5TVEFOQ0UgKHZfb2JqZWN0KSwgR19WQUxVRV9UWVBFICh2YWx1 ZSkpKTsKKysJCXZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IHZfb2JqZWN0OworKwl9IGVsc2Ug eworKwkJdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gTlVMTDsKKysJfQorKwlpZiAob2xkKSB7 CisrCQlna2JkX2xheW91dF91bnJlZiAob2xkKTsKKysJfQorK30KKysKKysKKytzdGF0aWMgdm9p ZCBna2JkX2xheW91dF9jbGFzc19pbml0IChHa2JkTGF5b3V0Q2xhc3MgKiBrbGFzcykgeworKwln a2JkX2xheW91dF9wYXJlbnRfY2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJlbnQgKGtsYXNz KTsKKysJR0tCRF9MQVlPVVRfQ0xBU1MgKGtsYXNzKS0+ZmluYWxpemUgPSBna2JkX2xheW91dF9m aW5hbGl6ZTsKKysJZ19zaWduYWxfbmV3ICgiY2hhbmdlZCIsIFRZUEVfR0tCRF9MQVlPVVQsIEdf U0lHTkFMX1JVTl9MQVNULCAwLCBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9f Vk9JRCwgR19UWVBFX05PTkUsIDApOworKwlnX3NpZ25hbF9uZXcgKCJncm91cF9jaGFuZ2VkIiwg VFlQRV9HS0JEX0xBWU9VVCwgR19TSUdOQUxfUlVOX0xBU1QsIDAsIE5VTEwsIE5VTEwsIGdfY2Ns b3N1cmVfbWFyc2hhbF9WT0lEX19JTlQsIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfSU5UKTsKKyt9 CisrCisrCisrc3RhdGljIHZvaWQgZ2tiZF9sYXlvdXRfaW5zdGFuY2VfaW5pdCAoR2tiZExheW91 dCAqIHNlbGYpIHsKKysJc2VsZi0+cmVmX2NvdW50ID0gMTsKKyt9CisrCisrCisrc3RhdGljIHZv aWQgZ2tiZF9sYXlvdXRfZmluYWxpemUgKEdrYmRMYXlvdXQqIG9iaikgeworKwlHa2JkTGF5b3V0 ICogc2VsZjsKKysJc2VsZiA9IEdLQkRfTEFZT1VUIChvYmopOworK30KKysKKysKKytHVHlwZSBn a2JkX2xheW91dF9nZXRfdHlwZSAodm9pZCkgeworKwlzdGF0aWMgdm9sYXRpbGUgZ3NpemUgZ2ti ZF9sYXlvdXRfdHlwZV9pZF9fdm9sYXRpbGUgPSAwOworKwlpZiAoZ19vbmNlX2luaXRfZW50ZXIg KCZna2JkX2xheW91dF90eXBlX2lkX192b2xhdGlsZSkpIHsKKysJCXN0YXRpYyBjb25zdCBHVHlw ZVZhbHVlVGFibGUgZ19kZWZpbmVfdHlwZV92YWx1ZV90YWJsZSA9IHsgdmFsdWVfZ2tiZF9sYXlv dXRfaW5pdCwgdmFsdWVfZ2tiZF9sYXlvdXRfZnJlZV92YWx1ZSwgdmFsdWVfZ2tiZF9sYXlvdXRf Y29weV92YWx1ZSwgdmFsdWVfZ2tiZF9sYXlvdXRfcGVla19wb2ludGVyLCAicCIsIHZhbHVlX2dr YmRfbGF5b3V0X2NvbGxlY3RfdmFsdWUsICJwIiwgdmFsdWVfZ2tiZF9sYXlvdXRfbGNvcHlfdmFs dWUgfTsKKysJCXN0YXRpYyBjb25zdCBHVHlwZUluZm8gZ19kZWZpbmVfdHlwZV9pbmZvID0geyBz aXplb2YgKEdrYmRMYXlvdXRDbGFzcyksIChHQmFzZUluaXRGdW5jKSBOVUxMLCAoR0Jhc2VGaW5h bGl6ZUZ1bmMpIE5VTEwsIChHQ2xhc3NJbml0RnVuYykgZ2tiZF9sYXlvdXRfY2xhc3NfaW5pdCwg KEdDbGFzc0ZpbmFsaXplRnVuYykgTlVMTCwgTlVMTCwgc2l6ZW9mIChHa2JkTGF5b3V0KSwgMCwg KEdJbnN0YW5jZUluaXRGdW5jKSBna2JkX2xheW91dF9pbnN0YW5jZV9pbml0LCAmZ19kZWZpbmVf dHlwZV92YWx1ZV90YWJsZSB9OworKwkJc3RhdGljIGNvbnN0IEdUeXBlRnVuZGFtZW50YWxJbmZv IGdfZGVmaW5lX3R5cGVfZnVuZGFtZW50YWxfaW5mbyA9IHsgKEdfVFlQRV9GTEFHX0NMQVNTRUQg fCBHX1RZUEVfRkxBR19JTlNUQU5USUFUQUJMRSB8IEdfVFlQRV9GTEFHX0RFUklWQUJMRSB8IEdf VFlQRV9GTEFHX0RFRVBfREVSSVZBQkxFKSB9OworKwkJR1R5cGUgZ2tiZF9sYXlvdXRfdHlwZV9p ZDsKKysJCWdrYmRfbGF5b3V0X3R5cGVfaWQgPSBnX3R5cGVfcmVnaXN0ZXJfZnVuZGFtZW50YWwg KGdfdHlwZV9mdW5kYW1lbnRhbF9uZXh0ICgpLCAiR2tiZExheW91dCIsICZnX2RlZmluZV90eXBl X2luZm8sICZnX2RlZmluZV90eXBlX2Z1bmRhbWVudGFsX2luZm8sIDApOworKwkJZ19vbmNlX2lu aXRfbGVhdmUgKCZna2JkX2xheW91dF90eXBlX2lkX192b2xhdGlsZSwgZ2tiZF9sYXlvdXRfdHlw ZV9pZCk7CisrCX0KKysJcmV0dXJuIGdrYmRfbGF5b3V0X3R5cGVfaWRfX3ZvbGF0aWxlOworK30K KysKKysKKytncG9pbnRlciBna2JkX2xheW91dF9yZWYgKGdwb2ludGVyIGluc3RhbmNlKSB7Cisr CUdrYmRMYXlvdXQqIHNlbGY7CisrCXNlbGYgPSBpbnN0YW5jZTsKKysJZ19hdG9taWNfaW50X2lu YyAoJnNlbGYtPnJlZl9jb3VudCk7CisrCXJldHVybiBpbnN0YW5jZTsKKyt9CisrCisrCisrdm9p ZCBna2JkX2xheW91dF91bnJlZiAoZ3BvaW50ZXIgaW5zdGFuY2UpIHsKKysJR2tiZExheW91dCog c2VsZjsKKysJc2VsZiA9IGluc3RhbmNlOworKwlpZiAoZ19hdG9taWNfaW50X2RlY19hbmRfdGVz dCAoJnNlbGYtPnJlZl9jb3VudCkpIHsKKysJCUdLQkRfTEFZT1VUX0dFVF9DTEFTUyAoc2VsZikt PmZpbmFsaXplIChzZWxmKTsKKysJCWdfdHlwZV9mcmVlX2luc3RhbmNlICgoR1R5cGVJbnN0YW5j ZSAqKSBzZWxmKTsKKysJfQorK30KKysKKysKKysKKy0tLSBpYnVzL3VpL2d0azMvZ2tiZGxheW91 dC5jLnRydWUub3JpZwkyMDEyLTAzLTA5IDE2OjQxOjAzLjQxNTUzMTUzOCArMDkwMAorKysrIGli dXMvdWkvZ3RrMy9na2JkbGF5b3V0LmMudHJ1ZQkyMDEyLTAzLTA5IDE2OjQwOjQ1LjY3MjIwOTgw NSArMDkwMAorQEAgLTAsMCArMSw0OTAgQEAKKysvKiBna2JkbGF5b3V0LmMgZ2VuZXJhdGVkIGJ5 IHZhbGFjIDAuMTUuMSwgdGhlIFZhbGEgY29tcGlsZXIKKysgKiBnZW5lcmF0ZWQgZnJvbSBna2Jk bGF5b3V0LnZhbGEsIGRvIG5vdCBtb2RpZnkgKi8KKysKKysvKiB2aW06c2V0IGV0IHN0cz00IHN3 PTQ6CisrICoKKysgKiBpYnVzIC0gVGhlIElucHV0IEJ1cworKyAqCisrICogQ29weXJpZ2h0IDIw MTIgUmVkIEhhdCwgSW5jLgorKyAqIENvcHlyaWdodChjKSAyMDEyIFBlbmcgSHVhbmcgPHNoYXdu LnAuaHVhbmdAZ21haWwuY29tPgorKyAqIENvcHlyaWdodChjKSAyMDEyIFRha2FvIEZ1aml3YXJh IDx0ZnVqaXdhckByZWRoYXQuY29tPgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKysgKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKysg KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKysgKgorKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisrICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKyAqIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKyAqCisrICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp dGUgdG8gdGhlCisrICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg UGxhY2UsIFN1aXRlIDMzMCwKKysgKiBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKysgKi8K KysKKysjaW5jbHVkZSA8Z2xpYi5oPgorKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorKyNpbmNs dWRlIDxsaWJnbm9tZWtiZC9na2JkLWNvbmZpZ3VyYXRpb24uaD4KKysjaW5jbHVkZSA8c3RkbGli Lmg+CisrI2luY2x1ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxnb2JqZWN0L2d2YWx1ZWNvbGxl Y3Rvci5oPgorKworKworKyNkZWZpbmUgVFlQRV9HS0JEX0xBWU9VVCAoZ2tiZF9sYXlvdXRfZ2V0 X3R5cGUgKCkpCisrI2RlZmluZSBHS0JEX0xBWU9VVChvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFO Q0VfQ0FTVCAoKG9iaiksIFRZUEVfR0tCRF9MQVlPVVQsIEdrYmRMYXlvdXQpKQorKyNkZWZpbmUg R0tCRF9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNz KSwgVFlQRV9HS0JEX0xBWU9VVCwgR2tiZExheW91dENsYXNzKSkKKysjZGVmaW5lIElTX0dLQkRf TEFZT1VUKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgVFlQRV9HS0JE X0xBWU9VVCkpCisrI2RlZmluZSBJU19HS0JEX0xBWU9VVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9D SEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBUWVBFX0dLQkRfTEFZT1VUKSkKKysjZGVmaW5lIEdL QkRfTEFZT1VUX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2Jq KSwgVFlQRV9HS0JEX0xBWU9VVCwgR2tiZExheW91dENsYXNzKSkKKysKKyt0eXBlZGVmIHN0cnVj dCBfR2tiZExheW91dCBHa2JkTGF5b3V0OworK3R5cGVkZWYgc3RydWN0IF9Ha2JkTGF5b3V0Q2xh c3MgR2tiZExheW91dENsYXNzOworK3R5cGVkZWYgc3RydWN0IF9Ha2JkTGF5b3V0UHJpdmF0ZSBH a2JkTGF5b3V0UHJpdmF0ZTsKKysjZGVmaW5lIF9nX29iamVjdF91bnJlZjAodmFyKSAoKHZhciA9 PSBOVUxMKSA/IE5VTEwgOiAodmFyID0gKGdfb2JqZWN0X3VucmVmICh2YXIpLCBOVUxMKSkpCisr dHlwZWRlZiBzdHJ1Y3QgX1BhcmFtU3BlY0drYmRMYXlvdXQgUGFyYW1TcGVjR2tiZExheW91dDsK KysKKytzdHJ1Y3QgX0drYmRMYXlvdXQgeworKwlHVHlwZUluc3RhbmNlIHBhcmVudF9pbnN0YW5j ZTsKKysJdm9sYXRpbGUgaW50IHJlZl9jb3VudDsKKysJR2tiZExheW91dFByaXZhdGUgKiBwcml2 OworK307CisrCisrc3RydWN0IF9Ha2JkTGF5b3V0Q2xhc3MgeworKwlHVHlwZUNsYXNzIHBhcmVu dF9jbGFzczsKKysJdm9pZCAoKmZpbmFsaXplKSAoR2tiZExheW91dCAqc2VsZik7CisrfTsKKysK KytzdHJ1Y3QgX0drYmRMYXlvdXRQcml2YXRlIHsKKysJR2tiZENvbmZpZ3VyYXRpb24qIG1fY29u ZmlnOworK307CisrCisrc3RydWN0IF9QYXJhbVNwZWNHa2JkTGF5b3V0IHsKKysJR1BhcmFtU3Bl YyBwYXJlbnRfaW5zdGFuY2U7CisrfTsKKysKKysKKytzdGF0aWMgZ3BvaW50ZXIgZ2tiZF9sYXlv dXRfcGFyZW50X2NsYXNzID0gTlVMTDsKKysKKytncG9pbnRlciBna2JkX2xheW91dF9yZWYgKGdw b2ludGVyIGluc3RhbmNlKTsKKyt2b2lkIGdrYmRfbGF5b3V0X3VucmVmIChncG9pbnRlciBpbnN0 YW5jZSk7CisrR1BhcmFtU3BlYyogcGFyYW1fc3BlY19na2JkX2xheW91dCAoY29uc3QgZ2NoYXIq IG5hbWUsIGNvbnN0IGdjaGFyKiBuaWNrLCBjb25zdCBnY2hhciogYmx1cmIsIEdUeXBlIG9iamVj dF90eXBlLCBHUGFyYW1GbGFncyBmbGFncyk7Cisrdm9pZCB2YWx1ZV9zZXRfZ2tiZF9sYXlvdXQg KEdWYWx1ZSogdmFsdWUsIGdwb2ludGVyIHZfb2JqZWN0KTsKKyt2b2lkIHZhbHVlX3Rha2VfZ2ti ZF9sYXlvdXQgKEdWYWx1ZSogdmFsdWUsIGdwb2ludGVyIHZfb2JqZWN0KTsKKytncG9pbnRlciB2 YWx1ZV9nZXRfZ2tiZF9sYXlvdXQgKGNvbnN0IEdWYWx1ZSogdmFsdWUpOworK0dUeXBlIGdrYmRf bGF5b3V0X2dldF90eXBlICh2b2lkKSBHX0dOVUNfQ09OU1Q7CisrI2RlZmluZSBHS0JEX0xBWU9V VF9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFRZUEVf R0tCRF9MQVlPVVQsIEdrYmRMYXlvdXRQcml2YXRlKSkKKytlbnVtICB7CisrCUdLQkRfTEFZT1VU X0RVTU1ZX1BST1BFUlRZCisrfTsKKytzdGF0aWMgdm9pZCBna2JkX2xheW91dF9jb25maWdfY2hh bmdlZF9jYiAoR2tiZExheW91dCogc2VsZik7Cisrc3RhdGljIHZvaWQgX2drYmRfbGF5b3V0X2Nv bmZpZ19jaGFuZ2VkX2NiX2drYmRfY29uZmlndXJhdGlvbl9jaGFuZ2VkIChHa2JkQ29uZmlndXJh dGlvbiogX3NlbmRlciwgZ3BvaW50ZXIgc2VsZik7Cisrc3RhdGljIHZvaWQgZ2tiZF9sYXlvdXRf Y29uZmlnX2dyb3VwX2NoYW5nZWRfY2IgKEdrYmRMYXlvdXQqIHNlbGYsIGdpbnQgb2JqZWN0KTsK KytzdGF0aWMgdm9pZCBfZ2tiZF9sYXlvdXRfY29uZmlnX2dyb3VwX2NoYW5nZWRfY2JfZ2tiZF9j b25maWd1cmF0aW9uX2dyb3VwX2NoYW5nZWQgKEdrYmRDb25maWd1cmF0aW9uKiBfc2VuZGVyLCBn aW50IG9iamVjdCwgZ3BvaW50ZXIgc2VsZik7CisrR2tiZExheW91dCogZ2tiZF9sYXlvdXRfbmV3 ICh2b2lkKTsKKytHa2JkTGF5b3V0KiBna2JkX2xheW91dF9jb25zdHJ1Y3QgKEdUeXBlIG9iamVj dF90eXBlKTsKKytnY2hhcioqIGdrYmRfbGF5b3V0X2dldF9sYXlvdXRzIChHa2JkTGF5b3V0KiBz ZWxmLCBpbnQqIHJlc3VsdF9sZW5ndGgxKTsKKytzdGF0aWMgZ2NoYXIqKiBfdmFsYV9hcnJheV9k dXAyIChnY2hhcioqIHNlbGYsIGludCBsZW5ndGgpOworK2djaGFyKiogZ2tiZF9sYXlvdXRfZ2V0 X2dyb3VwX25hbWVzIChHa2JkTGF5b3V0KiBzZWxmLCBpbnQqIHJlc3VsdF9sZW5ndGgxKTsKKytz dGF0aWMgZ2NoYXIqKiBfdmFsYV9hcnJheV9kdXAzIChnY2hhcioqIHNlbGYsIGludCBsZW5ndGgp OworK3ZvaWQgZ2tiZF9sYXlvdXRfbG9ja19ncm91cCAoR2tiZExheW91dCogc2VsZiwgZ2ludCBp ZCk7Cisrdm9pZCBna2JkX2xheW91dF9zdGFydF9saXN0ZW4gKEdrYmRMYXlvdXQqIHNlbGYpOwor K3ZvaWQgZ2tiZF9sYXlvdXRfc3RvcF9saXN0ZW4gKEdrYmRMYXlvdXQqIHNlbGYpOworK3N0YXRp YyB2b2lkIGdrYmRfbGF5b3V0X2ZpbmFsaXplIChHa2JkTGF5b3V0KiBvYmopOworK3N0YXRpYyBn aW50IF92YWxhX2FycmF5X2xlbmd0aCAoZ3BvaW50ZXIgYXJyYXkpOworKworKworK3N0YXRpYyB2 b2lkIF9na2JkX2xheW91dF9jb25maWdfY2hhbmdlZF9jYl9na2JkX2NvbmZpZ3VyYXRpb25fY2hh bmdlZCAoR2tiZENvbmZpZ3VyYXRpb24qIF9zZW5kZXIsIGdwb2ludGVyIHNlbGYpIHsKKysJZ2ti ZF9sYXlvdXRfY29uZmlnX2NoYW5nZWRfY2IgKHNlbGYpOworK30KKysKKysKKytzdGF0aWMgdm9p ZCBfZ2tiZF9sYXlvdXRfY29uZmlnX2dyb3VwX2NoYW5nZWRfY2JfZ2tiZF9jb25maWd1cmF0aW9u X2dyb3VwX2NoYW5nZWQgKEdrYmRDb25maWd1cmF0aW9uKiBfc2VuZGVyLCBnaW50IG9iamVjdCwg Z3BvaW50ZXIgc2VsZikgeworKwlna2JkX2xheW91dF9jb25maWdfZ3JvdXBfY2hhbmdlZF9jYiAo c2VsZiwgb2JqZWN0KTsKKyt9CisrCisrCisrR2tiZExheW91dCogZ2tiZF9sYXlvdXRfY29uc3Ry dWN0IChHVHlwZSBvYmplY3RfdHlwZSkgeworKwlHa2JkTGF5b3V0KiBzZWxmID0gTlVMTDsKKysJ R2tiZENvbmZpZ3VyYXRpb24qIF90bXAwXyA9IE5VTEw7CisrCUdrYmRDb25maWd1cmF0aW9uKiBf dG1wMV87CisrCXNlbGYgPSAoR2tiZExheW91dCopIGdfdHlwZV9jcmVhdGVfaW5zdGFuY2UgKG9i amVjdF90eXBlKTsKKysJX3RtcDBfID0gZ2tiZF9jb25maWd1cmF0aW9uX2dldCAoKTsKKysJX2df b2JqZWN0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9jb25maWcpOworKwlzZWxmLT5wcml2LT5tX2Nv bmZpZyA9IF90bXAwXzsKKysJX3RtcDFfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisrCWlmIChf dG1wMV8gIT0gTlVMTCkgeworKwkJR2tiZENvbmZpZ3VyYXRpb24qIF90bXAyXzsKKysJCUdrYmRD b25maWd1cmF0aW9uKiBfdG1wM187CisrCQlfdG1wMl8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsK KysJCWdfc2lnbmFsX2Nvbm5lY3QgKF90bXAyXywgImNoYW5nZWQiLCAoR0NhbGxiYWNrKSBfZ2ti ZF9sYXlvdXRfY29uZmlnX2NoYW5nZWRfY2JfZ2tiZF9jb25maWd1cmF0aW9uX2NoYW5nZWQsIHNl bGYpOworKwkJX3RtcDNfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisrCQlnX3NpZ25hbF9jb25u ZWN0IChfdG1wM18sICJncm91cC1jaGFuZ2VkIiwgKEdDYWxsYmFjaykgX2drYmRfbGF5b3V0X2Nv bmZpZ19ncm91cF9jaGFuZ2VkX2NiX2drYmRfY29uZmlndXJhdGlvbl9ncm91cF9jaGFuZ2VkLCBz ZWxmKTsKKysJfQorKwlyZXR1cm4gc2VsZjsKKyt9CisrCisrCisrR2tiZExheW91dCogZ2tiZF9s YXlvdXRfbmV3ICh2b2lkKSB7CisrCXJldHVybiBna2JkX2xheW91dF9jb25zdHJ1Y3QgKFRZUEVf R0tCRF9MQVlPVVQpOworK30KKysKKysKKytzdGF0aWMgdm9pZCBna2JkX2xheW91dF9jb25maWdf Y2hhbmdlZF9jYiAoR2tiZExheW91dCogc2VsZikgeworKwlnX3JldHVybl9pZl9mYWlsIChzZWxm ICE9IE5VTEwpOworKwlnX3NpZ25hbF9lbWl0X2J5X25hbWUgKHNlbGYsICJjaGFuZ2VkIik7Cisr fQorKworKworK3N0YXRpYyB2b2lkIGdrYmRfbGF5b3V0X2NvbmZpZ19ncm91cF9jaGFuZ2VkX2Ni IChHa2JkTGF5b3V0KiBzZWxmLCBnaW50IG9iamVjdCkgeworKwlnaW50IF90bXAwXzsKKysJZ19y ZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKKysJX3RtcDBfID0gb2JqZWN0OworKwlnX3Np Z25hbF9lbWl0X2J5X25hbWUgKHNlbGYsICJncm91cC1jaGFuZ2VkIiwgX3RtcDBfKTsKKyt9Cisr CisrCisrc3RhdGljIGdjaGFyKiogX3ZhbGFfYXJyYXlfZHVwMiAoZ2NoYXIqKiBzZWxmLCBpbnQg bGVuZ3RoKSB7CisrCWdjaGFyKiogcmVzdWx0OworKwlpbnQgaTsKKysJcmVzdWx0ID0gZ19uZXcw IChnY2hhciosIGxlbmd0aCArIDEpOworKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsK KysJCWdjaGFyKiBfdG1wMF87CisrCQlfdG1wMF8gPSBnX3N0cmR1cCAoc2VsZltpXSk7CisrCQly ZXN1bHRbaV0gPSBfdG1wMF87CisrCX0KKysJcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrZ2No YXIqKiBna2JkX2xheW91dF9nZXRfbGF5b3V0cyAoR2tiZExheW91dCogc2VsZiwgaW50KiByZXN1 bHRfbGVuZ3RoMSkgeworKwlnY2hhcioqIHJlc3VsdCA9IE5VTEw7CisrCUdrYmRDb25maWd1cmF0 aW9uKiBfdG1wMF87CisrCUdrYmRDb25maWd1cmF0aW9uKiBfdG1wM187CisrCWdjaGFyKiogX3Rt cDRfOworKwlnY2hhcioqIF90bXA1XyA9IE5VTEw7CisrCWdjaGFyKiogX3RtcDZfOworKwlnaW50 IF90bXA2X19sZW5ndGgxOworKwlnY2hhcioqIF90bXA3XzsKKysJZ2ludCBfdG1wN19fbGVuZ3Ro MTsKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCwgTlVMTCk7CisrCV90bXAw XyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwlpZiAoX3RtcDBfID09IE5VTEwpIHsKKysJCWdj aGFyKiogX3RtcDFfID0gTlVMTDsKKysJCWdjaGFyKiogX3RtcDJfOworKwkJZ2ludCBfdG1wMl9f bGVuZ3RoMTsKKysJCV90bXAxXyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7CisrCQlfdG1wMl8g PSBfdG1wMV87CisrCQlfdG1wMl9fbGVuZ3RoMSA9IDA7CisrCQlpZiAocmVzdWx0X2xlbmd0aDEp IHsKKysJCQkqcmVzdWx0X2xlbmd0aDEgPSBfdG1wMl9fbGVuZ3RoMTsKKysJCX0KKysJCXJlc3Vs dCA9IF90bXAyXzsKKysJCXJldHVybiByZXN1bHQ7CisrCX0KKysJX3RtcDNfID0gc2VsZi0+cHJp di0+bV9jb25maWc7CisrCV90bXA1XyA9IF90bXA0XyA9IGdrYmRfY29uZmlndXJhdGlvbl9nZXRf c2hvcnRfZ3JvdXBfbmFtZXMgKF90bXAzXyk7CisrCV90bXA2XyA9IChfdG1wNV8gIT0gTlVMTCkg PyBfdmFsYV9hcnJheV9kdXAyIChfdG1wNV8sIF92YWxhX2FycmF5X2xlbmd0aCAoX3RtcDRfKSkg OiAoKGdwb2ludGVyKSBfdG1wNV8pOworKwlfdG1wNl9fbGVuZ3RoMSA9IF92YWxhX2FycmF5X2xl bmd0aCAoX3RtcDRfKTsKKysJX3RtcDdfID0gX3RtcDZfOworKwlfdG1wN19fbGVuZ3RoMSA9IF90 bXA2X19sZW5ndGgxOworKwlpZiAocmVzdWx0X2xlbmd0aDEpIHsKKysJCSpyZXN1bHRfbGVuZ3Ro MSA9IF90bXA3X19sZW5ndGgxOworKwl9CisrCXJlc3VsdCA9IF90bXA3XzsKKysJcmV0dXJuIHJl c3VsdDsKKyt9CisrCisrCisrc3RhdGljIGdjaGFyKiogX3ZhbGFfYXJyYXlfZHVwMyAoZ2NoYXIq KiBzZWxmLCBpbnQgbGVuZ3RoKSB7CisrCWdjaGFyKiogcmVzdWx0OworKwlpbnQgaTsKKysJcmVz dWx0ID0gZ19uZXcwIChnY2hhciosIGxlbmd0aCArIDEpOworKwlmb3IgKGkgPSAwOyBpIDwgbGVu Z3RoOyBpKyspIHsKKysJCWdjaGFyKiBfdG1wMF87CisrCQlfdG1wMF8gPSBnX3N0cmR1cCAoc2Vs ZltpXSk7CisrCQlyZXN1bHRbaV0gPSBfdG1wMF87CisrCX0KKysJcmV0dXJuIHJlc3VsdDsKKyt9 CisrCisrCisrZ2NoYXIqKiBna2JkX2xheW91dF9nZXRfZ3JvdXBfbmFtZXMgKEdrYmRMYXlvdXQq IHNlbGYsIGludCogcmVzdWx0X2xlbmd0aDEpIHsKKysJZ2NoYXIqKiByZXN1bHQgPSBOVUxMOwor KwlHa2JkQ29uZmlndXJhdGlvbiogX3RtcDBfOworKwlHa2JkQ29uZmlndXJhdGlvbiogX3RtcDNf OworKwlnY2hhcioqIF90bXA0XzsKKysJZ2NoYXIqKiBfdG1wNV8gPSBOVUxMOworKwlnY2hhcioq IF90bXA2XzsKKysJZ2ludCBfdG1wNl9fbGVuZ3RoMTsKKysJZ2NoYXIqKiBfdG1wN187CisrCWdp bnQgX3RtcDdfX2xlbmd0aDE7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5VTEws IE5VTEwpOworKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKKysJaWYgKF90bXAwXyA9 PSBOVUxMKSB7CisrCQlnY2hhcioqIF90bXAxXyA9IE5VTEw7CisrCQlnY2hhcioqIF90bXAyXzsK KysJCWdpbnQgX3RtcDJfX2xlbmd0aDE7CisrCQlfdG1wMV8gPSBnX25ldzAgKGdjaGFyKiwgMCAr IDEpOworKwkJX3RtcDJfID0gX3RtcDFfOworKwkJX3RtcDJfX2xlbmd0aDEgPSAwOworKwkJaWYg KHJlc3VsdF9sZW5ndGgxKSB7CisrCQkJKnJlc3VsdF9sZW5ndGgxID0gX3RtcDJfX2xlbmd0aDE7 CisrCQl9CisrCQlyZXN1bHQgPSBfdG1wMl87CisrCQlyZXR1cm4gcmVzdWx0OworKwl9CisrCV90 bXAzXyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwlfdG1wNV8gPSBfdG1wNF8gPSBna2JkX2Nv bmZpZ3VyYXRpb25fZ2V0X2dyb3VwX25hbWVzIChfdG1wM18pOworKwlfdG1wNl8gPSAoX3RtcDVf ICE9IE5VTEwpID8gX3ZhbGFfYXJyYXlfZHVwMyAoX3RtcDVfLCBfdmFsYV9hcnJheV9sZW5ndGgg KF90bXA0XykpIDogKChncG9pbnRlcikgX3RtcDVfKTsKKysJX3RtcDZfX2xlbmd0aDEgPSBfdmFs YV9hcnJheV9sZW5ndGggKF90bXA0Xyk7CisrCV90bXA3XyA9IF90bXA2XzsKKysJX3RtcDdfX2xl bmd0aDEgPSBfdG1wNl9fbGVuZ3RoMTsKKysJaWYgKHJlc3VsdF9sZW5ndGgxKSB7CisrCQkqcmVz dWx0X2xlbmd0aDEgPSBfdG1wN19fbGVuZ3RoMTsKKysJfQorKwlyZXN1bHQgPSBfdG1wN187Cisr CXJldHVybiByZXN1bHQ7CisrfQorKworKworK3ZvaWQgZ2tiZF9sYXlvdXRfbG9ja19ncm91cCAo R2tiZExheW91dCogc2VsZiwgZ2ludCBpZCkgeworKwlHa2JkQ29uZmlndXJhdGlvbiogX3RtcDBf OworKwlHa2JkQ29uZmlndXJhdGlvbiogX3RtcDFfOworKwlnaW50IF90bXAyXzsKKysJZ19yZXR1 cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKKysJX3RtcDBfID0gc2VsZi0+cHJpdi0+bV9jb25m aWc7CisrCWlmIChfdG1wMF8gPT0gTlVMTCkgeworKwkJcmV0dXJuOworKwl9CisrCV90bXAxXyA9 IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwlfdG1wMl8gPSBpZDsKKysJZ2tiZF9jb25maWd1cmF0 aW9uX2xvY2tfZ3JvdXAgKF90bXAxXywgKGd1aW50KSBfdG1wMl8pOworK30KKysKKysKKyt2b2lk IGdrYmRfbGF5b3V0X3N0YXJ0X2xpc3RlbiAoR2tiZExheW91dCogc2VsZikgeworKwlHa2JkQ29u ZmlndXJhdGlvbiogX3RtcDBfOworKwlHa2JkQ29uZmlndXJhdGlvbiogX3RtcDFfOworKwlnX3Jl dHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOworKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2Nv bmZpZzsKKysJaWYgKF90bXAwXyA9PSBOVUxMKSB7CisrCQlyZXR1cm47CisrCX0KKysJX3RtcDFf ID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisrCWdrYmRfY29uZmlndXJhdGlvbl9zdGFydF9saXN0 ZW4gKF90bXAxXyk7CisrfQorKworKworK3ZvaWQgZ2tiZF9sYXlvdXRfc3RvcF9saXN0ZW4gKEdr YmRMYXlvdXQqIHNlbGYpIHsKKysJR2tiZENvbmZpZ3VyYXRpb24qIF90bXAwXzsKKysJR2tiZENv bmZpZ3VyYXRpb24qIF90bXAxXzsKKysJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsK KysJX3RtcDBfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisrCWlmIChfdG1wMF8gPT0gTlVMTCkg eworKwkJcmV0dXJuOworKwl9CisrCV90bXAxXyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwln a2JkX2NvbmZpZ3VyYXRpb25fc3RvcF9saXN0ZW4gKF90bXAxXyk7CisrfQorKworKworK3N0YXRp YyB2b2lkIHZhbHVlX2drYmRfbGF5b3V0X2luaXQgKEdWYWx1ZSogdmFsdWUpIHsKKysJdmFsdWUt PmRhdGFbMF0udl9wb2ludGVyID0gTlVMTDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgdmFsdWVf Z2tiZF9sYXlvdXRfZnJlZV92YWx1ZSAoR1ZhbHVlKiB2YWx1ZSkgeworKwlpZiAodmFsdWUtPmRh dGFbMF0udl9wb2ludGVyKSB7CisrCQlna2JkX2xheW91dF91bnJlZiAodmFsdWUtPmRhdGFbMF0u dl9wb2ludGVyKTsKKysJfQorK30KKysKKysKKytzdGF0aWMgdm9pZCB2YWx1ZV9na2JkX2xheW91 dF9jb3B5X3ZhbHVlIChjb25zdCBHVmFsdWUqIHNyY192YWx1ZSwgR1ZhbHVlKiBkZXN0X3ZhbHVl KSB7CisrCWlmIChzcmNfdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyKSB7CisrCQlkZXN0X3ZhbHVl LT5kYXRhWzBdLnZfcG9pbnRlciA9IGdrYmRfbGF5b3V0X3JlZiAoc3JjX3ZhbHVlLT5kYXRhWzBd LnZfcG9pbnRlcik7CisrCX0gZWxzZSB7CisrCQlkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRl ciA9IE5VTEw7CisrCX0KKyt9CisrCisrCisrc3RhdGljIGdwb2ludGVyIHZhbHVlX2drYmRfbGF5 b3V0X3BlZWtfcG9pbnRlciAoY29uc3QgR1ZhbHVlKiB2YWx1ZSkgeworKwlyZXR1cm4gdmFsdWUt PmRhdGFbMF0udl9wb2ludGVyOworK30KKysKKysKKytzdGF0aWMgZ2NoYXIqIHZhbHVlX2drYmRf bGF5b3V0X2NvbGxlY3RfdmFsdWUgKEdWYWx1ZSogdmFsdWUsIGd1aW50IG5fY29sbGVjdF92YWx1 ZXMsIEdUeXBlQ1ZhbHVlKiBjb2xsZWN0X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFncykgewor KwlpZiAoY29sbGVjdF92YWx1ZXNbMF0udl9wb2ludGVyKSB7CisrCQlHa2JkTGF5b3V0KiBvYmpl Y3Q7CisrCQlvYmplY3QgPSBjb2xsZWN0X3ZhbHVlc1swXS52X3BvaW50ZXI7CisrCQlpZiAob2Jq ZWN0LT5wYXJlbnRfaW5zdGFuY2UuZ19jbGFzcyA9PSBOVUxMKSB7CisrCQkJcmV0dXJuIGdfc3Ry Y29uY2F0ICgiaW52YWxpZCB1bmNsYXNzZWQgb2JqZWN0IHBvaW50ZXIgZm9yIHZhbHVlIHR5cGUg YCIsIEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSksICInIiwgTlVMTCk7CisrCQl9IGVsc2UgaWYg KCFnX3ZhbHVlX3R5cGVfY29tcGF0aWJsZSAoR19UWVBFX0ZST01fSU5TVEFOQ0UgKG9iamVjdCks IEdfVkFMVUVfVFlQRSAodmFsdWUpKSkgeworKwkJCXJldHVybiBnX3N0cmNvbmNhdCAoImludmFs aWQgb2JqZWN0IHR5cGUgYCIsIGdfdHlwZV9uYW1lIChHX1RZUEVfRlJPTV9JTlNUQU5DRSAob2Jq ZWN0KSksICInIGZvciB2YWx1ZSB0eXBlIGAiLCBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpLCAi JyIsIE5VTEwpOworKwkJfQorKwkJdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gZ2tiZF9sYXlv dXRfcmVmIChvYmplY3QpOworKwl9IGVsc2UgeworKwkJdmFsdWUtPmRhdGFbMF0udl9wb2ludGVy ID0gTlVMTDsKKysJfQorKwlyZXR1cm4gTlVMTDsKKyt9CisrCisrCisrc3RhdGljIGdjaGFyKiB2 YWx1ZV9na2JkX2xheW91dF9sY29weV92YWx1ZSAoY29uc3QgR1ZhbHVlKiB2YWx1ZSwgZ3VpbnQg bl9jb2xsZWN0X3ZhbHVlcywgR1R5cGVDVmFsdWUqIGNvbGxlY3RfdmFsdWVzLCBndWludCBjb2xs ZWN0X2ZsYWdzKSB7CisrCUdrYmRMYXlvdXQqKiBvYmplY3RfcDsKKysJb2JqZWN0X3AgPSBjb2xs ZWN0X3ZhbHVlc1swXS52X3BvaW50ZXI7CisrCWlmICghb2JqZWN0X3ApIHsKKysJCXJldHVybiBn X3N0cmR1cF9wcmludGYgKCJ2YWx1ZSBsb2NhdGlvbiBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIs IEdfVkFMVUVfVFlQRV9OQU1FICh2YWx1ZSkpOworKwl9CisrCWlmICghdmFsdWUtPmRhdGFbMF0u dl9wb2ludGVyKSB7CisrCQkqb2JqZWN0X3AgPSBOVUxMOworKwl9IGVsc2UgaWYgKGNvbGxlY3Rf ZmxhZ3MgJiBHX1ZBTFVFX05PQ09QWV9DT05URU5UUykgeworKwkJKm9iamVjdF9wID0gdmFsdWUt PmRhdGFbMF0udl9wb2ludGVyOworKwl9IGVsc2UgeworKwkJKm9iamVjdF9wID0gZ2tiZF9sYXlv dXRfcmVmICh2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpOworKwl9CisrCXJldHVybiBOVUxMOwor K30KKysKKysKKytHUGFyYW1TcGVjKiBwYXJhbV9zcGVjX2drYmRfbGF5b3V0IChjb25zdCBnY2hh ciogbmFtZSwgY29uc3QgZ2NoYXIqIG5pY2ssIGNvbnN0IGdjaGFyKiBibHVyYiwgR1R5cGUgb2Jq ZWN0X3R5cGUsIEdQYXJhbUZsYWdzIGZsYWdzKSB7CisrCVBhcmFtU3BlY0drYmRMYXlvdXQqIHNw ZWM7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3R5cGVfaXNfYSAob2JqZWN0X3R5cGUsIFRZ UEVfR0tCRF9MQVlPVVQpLCBOVUxMKTsKKysJc3BlYyA9IGdfcGFyYW1fc3BlY19pbnRlcm5hbCAo R19UWVBFX1BBUkFNX09CSkVDVCwgbmFtZSwgbmljaywgYmx1cmIsIGZsYWdzKTsKKysJR19QQVJB TV9TUEVDIChzcGVjKS0+dmFsdWVfdHlwZSA9IG9iamVjdF90eXBlOworKwlyZXR1cm4gR19QQVJB TV9TUEVDIChzcGVjKTsKKyt9CisrCisrCisrZ3BvaW50ZXIgdmFsdWVfZ2V0X2drYmRfbGF5b3V0 IChjb25zdCBHVmFsdWUqIHZhbHVlKSB7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX1RZUEVf Q0hFQ0tfVkFMVUVfVFlQRSAodmFsdWUsIFRZUEVfR0tCRF9MQVlPVVQpLCBOVUxMKTsKKysJcmV0 dXJuIHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKKyt9CisrCisrCisrdm9pZCB2YWx1ZV9zZXRf Z2tiZF9sYXlvdXQgKEdWYWx1ZSogdmFsdWUsIGdwb2ludGVyIHZfb2JqZWN0KSB7CisrCUdrYmRM YXlvdXQqIG9sZDsKKysJZ19yZXR1cm5faWZfZmFpbCAoR19UWVBFX0NIRUNLX1ZBTFVFX1RZUEUg KHZhbHVlLCBUWVBFX0dLQkRfTEFZT1VUKSk7CisrCW9sZCA9IHZhbHVlLT5kYXRhWzBdLnZfcG9p bnRlcjsKKysJaWYgKHZfb2JqZWN0KSB7CisrCQlnX3JldHVybl9pZl9mYWlsIChHX1RZUEVfQ0hF Q0tfSU5TVEFOQ0VfVFlQRSAodl9vYmplY3QsIFRZUEVfR0tCRF9MQVlPVVQpKTsKKysJCWdfcmV0 dXJuX2lmX2ZhaWwgKGdfdmFsdWVfdHlwZV9jb21wYXRpYmxlIChHX1RZUEVfRlJPTV9JTlNUQU5D RSAodl9vYmplY3QpLCBHX1ZBTFVFX1RZUEUgKHZhbHVlKSkpOworKwkJdmFsdWUtPmRhdGFbMF0u dl9wb2ludGVyID0gdl9vYmplY3Q7CisrCQlna2JkX2xheW91dF9yZWYgKHZhbHVlLT5kYXRhWzBd LnZfcG9pbnRlcik7CisrCX0gZWxzZSB7CisrCQl2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBO VUxMOworKwl9CisrCWlmIChvbGQpIHsKKysJCWdrYmRfbGF5b3V0X3VucmVmIChvbGQpOworKwl9 CisrfQorKworKworK3ZvaWQgdmFsdWVfdGFrZV9na2JkX2xheW91dCAoR1ZhbHVlKiB2YWx1ZSwg Z3BvaW50ZXIgdl9vYmplY3QpIHsKKysJR2tiZExheW91dCogb2xkOworKwlnX3JldHVybl9pZl9m YWlsIChHX1RZUEVfQ0hFQ0tfVkFMVUVfVFlQRSAodmFsdWUsIFRZUEVfR0tCRF9MQVlPVVQpKTsK KysJb2xkID0gdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyOworKwlpZiAodl9vYmplY3QpIHsKKysJ CWdfcmV0dXJuX2lmX2ZhaWwgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICh2X29iamVjdCwg VFlQRV9HS0JEX0xBWU9VVCkpOworKwkJZ19yZXR1cm5faWZfZmFpbCAoZ192YWx1ZV90eXBlX2Nv bXBhdGlibGUgKEdfVFlQRV9GUk9NX0lOU1RBTkNFICh2X29iamVjdCksIEdfVkFMVUVfVFlQRSAo dmFsdWUpKSk7CisrCQl2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSB2X29iamVjdDsKKysJfSBl bHNlIHsKKysJCXZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9IE5VTEw7CisrCX0KKysJaWYgKG9s ZCkgeworKwkJZ2tiZF9sYXlvdXRfdW5yZWYgKG9sZCk7CisrCX0KKyt9CisrCisrCisrc3RhdGlj IHZvaWQgZ2tiZF9sYXlvdXRfY2xhc3NfaW5pdCAoR2tiZExheW91dENsYXNzICoga2xhc3MpIHsK KysJZ2tiZF9sYXlvdXRfcGFyZW50X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWtfcGFyZW50IChr bGFzcyk7CisrCUdLQkRfTEFZT1VUX0NMQVNTIChrbGFzcyktPmZpbmFsaXplID0gZ2tiZF9sYXlv dXRfZmluYWxpemU7CisrCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAo R2tiZExheW91dFByaXZhdGUpKTsKKysJZ19zaWduYWxfbmV3ICgiY2hhbmdlZCIsIFRZUEVfR0tC RF9MQVlPVVQsIEdfU0lHTkFMX1JVTl9MQVNULCAwLCBOVUxMLCBOVUxMLCBnX2NjbG9zdXJlX21h cnNoYWxfVk9JRF9fVk9JRCwgR19UWVBFX05PTkUsIDApOworKwlnX3NpZ25hbF9uZXcgKCJncm91 cF9jaGFuZ2VkIiwgVFlQRV9HS0JEX0xBWU9VVCwgR19TSUdOQUxfUlVOX0xBU1QsIDAsIE5VTEws IE5VTEwsIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19JTlQsIEdfVFlQRV9OT05FLCAxLCBHX1RZ UEVfSU5UKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgZ2tiZF9sYXlvdXRfaW5zdGFuY2VfaW5p dCAoR2tiZExheW91dCAqIHNlbGYpIHsKKysJc2VsZi0+cHJpdiA9IEdLQkRfTEFZT1VUX0dFVF9Q UklWQVRFIChzZWxmKTsKKysJc2VsZi0+cHJpdi0+bV9jb25maWcgPSBOVUxMOworKwlzZWxmLT5y ZWZfY291bnQgPSAxOworK30KKysKKysKKytzdGF0aWMgdm9pZCBna2JkX2xheW91dF9maW5hbGl6 ZSAoR2tiZExheW91dCogb2JqKSB7CisrCUdrYmRMYXlvdXQgKiBzZWxmOworKwlHa2JkQ29uZmln dXJhdGlvbiogX3RtcDBfOworKwlzZWxmID0gR0tCRF9MQVlPVVQgKG9iaik7CisrCV90bXAwXyA9 IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwlpZiAoX3RtcDBfICE9IE5VTEwpIHsKKysJCUdrYmRD b25maWd1cmF0aW9uKiBfdG1wMV87CisrCQlndWludCBfdG1wMl8gPSAwVTsKKysJCUdrYmRDb25m aWd1cmF0aW9uKiBfdG1wM187CisrCQlndWludCBfdG1wNF8gPSAwVTsKKysJCUdrYmRDb25maWd1 cmF0aW9uKiBfdG1wNV87CisrCQlfdG1wMV8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKKysJCWdf c2lnbmFsX3BhcnNlX25hbWUgKCJjaGFuZ2VkIiwgZ2tiZF9jb25maWd1cmF0aW9uX2dldF90eXBl ICgpLCAmX3RtcDJfLCBOVUxMLCBGQUxTRSk7CisrCQlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u ZWN0X21hdGNoZWQgKF90bXAxXywgR19TSUdOQUxfTUFUQ0hfSUQgfCBHX1NJR05BTF9NQVRDSF9G VU5DIHwgR19TSUdOQUxfTUFUQ0hfREFUQSwgX3RtcDJfLCAwLCBOVUxMLCAoR0NhbGxiYWNrKSBf Z2tiZF9sYXlvdXRfY29uZmlnX2NoYW5nZWRfY2JfZ2tiZF9jb25maWd1cmF0aW9uX2NoYW5nZWQs IHNlbGYpOworKwkJX3RtcDNfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisrCQlnX3NpZ25hbF9w YXJzZV9uYW1lICgiZ3JvdXAtY2hhbmdlZCIsIGdrYmRfY29uZmlndXJhdGlvbl9nZXRfdHlwZSAo KSwgJl90bXA0XywgTlVMTCwgRkFMU0UpOworKwkJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj dF9tYXRjaGVkIChfdG1wM18sIEdfU0lHTkFMX01BVENIX0lEIHwgR19TSUdOQUxfTUFUQ0hfRlVO QyB8IEdfU0lHTkFMX01BVENIX0RBVEEsIF90bXA0XywgMCwgTlVMTCwgKEdDYWxsYmFjaykgX2dr YmRfbGF5b3V0X2NvbmZpZ19ncm91cF9jaGFuZ2VkX2NiX2drYmRfY29uZmlndXJhdGlvbl9ncm91 cF9jaGFuZ2VkLCBzZWxmKTsKKysJCV90bXA1XyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwkJ Z19vYmplY3RfcmVmICgoR09iamVjdCopIF90bXA1Xyk7CisrCQlfZ19vYmplY3RfdW5yZWYwIChz ZWxmLT5wcml2LT5tX2NvbmZpZyk7CisrCQlzZWxmLT5wcml2LT5tX2NvbmZpZyA9IE5VTEw7Cisr CX0KKysJX2dfb2JqZWN0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9jb25maWcpOworK30KKysKKysK KytHVHlwZSBna2JkX2xheW91dF9nZXRfdHlwZSAodm9pZCkgeworKwlzdGF0aWMgdm9sYXRpbGUg Z3NpemUgZ2tiZF9sYXlvdXRfdHlwZV9pZF9fdm9sYXRpbGUgPSAwOworKwlpZiAoZ19vbmNlX2lu aXRfZW50ZXIgKCZna2JkX2xheW91dF90eXBlX2lkX192b2xhdGlsZSkpIHsKKysJCXN0YXRpYyBj b25zdCBHVHlwZVZhbHVlVGFibGUgZ19kZWZpbmVfdHlwZV92YWx1ZV90YWJsZSA9IHsgdmFsdWVf Z2tiZF9sYXlvdXRfaW5pdCwgdmFsdWVfZ2tiZF9sYXlvdXRfZnJlZV92YWx1ZSwgdmFsdWVfZ2ti ZF9sYXlvdXRfY29weV92YWx1ZSwgdmFsdWVfZ2tiZF9sYXlvdXRfcGVla19wb2ludGVyLCAicCIs IHZhbHVlX2drYmRfbGF5b3V0X2NvbGxlY3RfdmFsdWUsICJwIiwgdmFsdWVfZ2tiZF9sYXlvdXRf bGNvcHlfdmFsdWUgfTsKKysJCXN0YXRpYyBjb25zdCBHVHlwZUluZm8gZ19kZWZpbmVfdHlwZV9p bmZvID0geyBzaXplb2YgKEdrYmRMYXlvdXRDbGFzcyksIChHQmFzZUluaXRGdW5jKSBOVUxMLCAo R0Jhc2VGaW5hbGl6ZUZ1bmMpIE5VTEwsIChHQ2xhc3NJbml0RnVuYykgZ2tiZF9sYXlvdXRfY2xh c3NfaW5pdCwgKEdDbGFzc0ZpbmFsaXplRnVuYykgTlVMTCwgTlVMTCwgc2l6ZW9mIChHa2JkTGF5 b3V0KSwgMCwgKEdJbnN0YW5jZUluaXRGdW5jKSBna2JkX2xheW91dF9pbnN0YW5jZV9pbml0LCAm Z19kZWZpbmVfdHlwZV92YWx1ZV90YWJsZSB9OworKwkJc3RhdGljIGNvbnN0IEdUeXBlRnVuZGFt ZW50YWxJbmZvIGdfZGVmaW5lX3R5cGVfZnVuZGFtZW50YWxfaW5mbyA9IHsgKEdfVFlQRV9GTEFH X0NMQVNTRUQgfCBHX1RZUEVfRkxBR19JTlNUQU5USUFUQUJMRSB8IEdfVFlQRV9GTEFHX0RFUklW QUJMRSB8IEdfVFlQRV9GTEFHX0RFRVBfREVSSVZBQkxFKSB9OworKwkJR1R5cGUgZ2tiZF9sYXlv dXRfdHlwZV9pZDsKKysJCWdrYmRfbGF5b3V0X3R5cGVfaWQgPSBnX3R5cGVfcmVnaXN0ZXJfZnVu ZGFtZW50YWwgKGdfdHlwZV9mdW5kYW1lbnRhbF9uZXh0ICgpLCAiR2tiZExheW91dCIsICZnX2Rl ZmluZV90eXBlX2luZm8sICZnX2RlZmluZV90eXBlX2Z1bmRhbWVudGFsX2luZm8sIDApOworKwkJ Z19vbmNlX2luaXRfbGVhdmUgKCZna2JkX2xheW91dF90eXBlX2lkX192b2xhdGlsZSwgZ2tiZF9s YXlvdXRfdHlwZV9pZCk7CisrCX0KKysJcmV0dXJuIGdrYmRfbGF5b3V0X3R5cGVfaWRfX3ZvbGF0 aWxlOworK30KKysKKysKKytncG9pbnRlciBna2JkX2xheW91dF9yZWYgKGdwb2ludGVyIGluc3Rh bmNlKSB7CisrCUdrYmRMYXlvdXQqIHNlbGY7CisrCXNlbGYgPSBpbnN0YW5jZTsKKysJZ19hdG9t aWNfaW50X2luYyAoJnNlbGYtPnJlZl9jb3VudCk7CisrCXJldHVybiBpbnN0YW5jZTsKKyt9Cisr CisrCisrdm9pZCBna2JkX2xheW91dF91bnJlZiAoZ3BvaW50ZXIgaW5zdGFuY2UpIHsKKysJR2ti ZExheW91dCogc2VsZjsKKysJc2VsZiA9IGluc3RhbmNlOworKwlpZiAoZ19hdG9taWNfaW50X2Rl Y19hbmRfdGVzdCAoJnNlbGYtPnJlZl9jb3VudCkpIHsKKysJCUdLQkRfTEFZT1VUX0dFVF9DTEFT UyAoc2VsZiktPmZpbmFsaXplIChzZWxmKTsKKysJCWdfdHlwZV9mcmVlX2luc3RhbmNlICgoR1R5 cGVJbnN0YW5jZSAqKSBzZWxmKTsKKysJfQorK30KKysKKysKKytzdGF0aWMgZ2ludCBfdmFsYV9h cnJheV9sZW5ndGggKGdwb2ludGVyIGFycmF5KSB7CisrCWludCBsZW5ndGg7CisrCWxlbmd0aCA9 IDA7CisrCWlmIChhcnJheSkgeworKwkJd2hpbGUgKCgoZ3BvaW50ZXIqKSBhcnJheSlbbGVuZ3Ro XSkgeworKwkJCWxlbmd0aCsrOworKwkJfQorKwl9CisrCXJldHVybiBsZW5ndGg7CisrfQorKwor KworKworLS0tIGlidXMvdWkvZ3RrMy9wYW5lbC5jLmluLm9yaWcJMjAxMi0wMy0wOSAxNzowNjow My4zMzk1NDcyNjYgKzA5MDAKKysrKyBpYnVzL3VpL2d0azMvcGFuZWwuYy5pbgkyMDEyLTAzLTA5 IDE3OjA1OjUzLjcwODM3Mjc0NyArMDkwMAorQEAgLTAsMCArMSwzMjAzIEBACisrLyogcGFuZWwu YyBnZW5lcmF0ZWQgYnkgdmFsYWMgMC4xNS4xLCB0aGUgVmFsYSBjb21waWxlcgorKyAqIGdlbmVy YXRlZCBmcm9tIHBhbmVsLnZhbGEsIGRvIG5vdCBtb2RpZnkgKi8KKysKKysvKiB2aW06c2V0IGV0 IHN0cz00IHN3PTQ6CisrICoKKysgKiBpYnVzIC0gVGhlIElucHV0IEJ1cworKyAqCisrICogQ29w eXJpZ2h0KGMpIDIwMTEgUGVuZyBIdWFuZyA8c2hhd24ucC5odWFuZ0BnbWFpbC5jb20+CisrICoK KysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKyAqCisrICogVGhpcyBsaWJy YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisr ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisrICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisrICogTGljZW5zZSBhbG9uZyB3 aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKysgKiBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorKyAqIEJvc3Rv biwgTUEgIDAyMTExLTEzMDcgIFVTQQorKyAqLworKworKyNpbmNsdWRlIDxnbGliLmg+CisrI2lu Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisrI2luY2x1ZGUgPGlidXMuaD4KKysjaW5jbHVkZSA8Z3Rr L2d0ay5oPgorKyNpbmNsdWRlIDxzdGRsaWIuaD4KKysjaW5jbHVkZSA8c3RyaW5nLmg+CisrI2lu Y2x1ZGUgPGxvY2FsZS5oPgorKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisrI2luY2x1ZGUgPGZsb2F0 Lmg+CisrI2luY2x1ZGUgPG1hdGguaD4KKysjaW5jbHVkZSA8c2lnbmFsLmg+CisrI2luY2x1ZGUg PHN5cy90eXBlcy5oPgorKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorKworKworKyNkZWZp bmUgVFlQRV9QQU5FTCAocGFuZWxfZ2V0X3R5cGUgKCkpCisrI2RlZmluZSBQQU5FTChvYmopIChH X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFRZUEVfUEFORUwsIFBhbmVsKSkKKysj ZGVmaW5lIFBBTkVMX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFz cyksIFRZUEVfUEFORUwsIFBhbmVsQ2xhc3MpKQorKyNkZWZpbmUgSVNfUEFORUwob2JqKSAoR19U WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBUWVBFX1BBTkVMKSkKKysjZGVmaW5lIElT X1BBTkVMX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFRZ UEVfUEFORUwpKQorKyNkZWZpbmUgUEFORUxfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNUQU5D RV9HRVRfQ0xBU1MgKChvYmopLCBUWVBFX1BBTkVMLCBQYW5lbENsYXNzKSkKKysKKyt0eXBlZGVm IHN0cnVjdCBfUGFuZWwgUGFuZWw7CisrdHlwZWRlZiBzdHJ1Y3QgX1BhbmVsQ2xhc3MgUGFuZWxD bGFzczsKKyt0eXBlZGVmIHN0cnVjdCBfUGFuZWxQcml2YXRlIFBhbmVsUHJpdmF0ZTsKKysKKysj ZGVmaW5lIFRZUEVfQ0FORElEQVRFX1BBTkVMIChjYW5kaWRhdGVfcGFuZWxfZ2V0X3R5cGUgKCkp CisrI2RlZmluZSBDQU5ESURBVEVfUEFORUwob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB U1QgKChvYmopLCBUWVBFX0NBTkRJREFURV9QQU5FTCwgQ2FuZGlkYXRlUGFuZWwpKQorKyNkZWZp bmUgQ0FORElEQVRFX1BBTkVMX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qg KChrbGFzcyksIFRZUEVfQ0FORElEQVRFX1BBTkVMLCBDYW5kaWRhdGVQYW5lbENsYXNzKSkKKysj ZGVmaW5lIElTX0NBTkRJREFURV9QQU5FTChvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ RSAoKG9iaiksIFRZUEVfQ0FORElEQVRFX1BBTkVMKSkKKysjZGVmaW5lIElTX0NBTkRJREFURV9Q QU5FTF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBUWVBF X0NBTkRJREFURV9QQU5FTCkpCisrI2RlZmluZSBDQU5ESURBVEVfUEFORUxfR0VUX0NMQVNTKG9i aikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBUWVBFX0NBTkRJREFURV9QQU5F TCwgQ2FuZGlkYXRlUGFuZWxDbGFzcykpCisrCisrdHlwZWRlZiBzdHJ1Y3QgX0NhbmRpZGF0ZVBh bmVsIENhbmRpZGF0ZVBhbmVsOworK3R5cGVkZWYgc3RydWN0IF9DYW5kaWRhdGVQYW5lbENsYXNz IENhbmRpZGF0ZVBhbmVsQ2xhc3M7CisrCisrI2RlZmluZSBUWVBFX1NXSVRDSEVSIChzd2l0Y2hl cl9nZXRfdHlwZSAoKSkKKysjZGVmaW5lIFNXSVRDSEVSKG9iaikgKEdfVFlQRV9DSEVDS19JTlNU QU5DRV9DQVNUICgob2JqKSwgVFlQRV9TV0lUQ0hFUiwgU3dpdGNoZXIpKQorKyNkZWZpbmUgU1dJ VENIRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgVFlQ RV9TV0lUQ0hFUiwgU3dpdGNoZXJDbGFzcykpCisrI2RlZmluZSBJU19TV0lUQ0hFUihvYmopIChH X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFRZUEVfU1dJVENIRVIpKQorKyNkZWZp bmUgSVNfU1dJVENIRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGts YXNzKSwgVFlQRV9TV0lUQ0hFUikpCisrI2RlZmluZSBTV0lUQ0hFUl9HRVRfQ0xBU1Mob2JqKSAo R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFRZUEVfU1dJVENIRVIsIFN3aXRjaGVy Q2xhc3MpKQorKworK3R5cGVkZWYgc3RydWN0IF9Td2l0Y2hlciBTd2l0Y2hlcjsKKyt0eXBlZGVm IHN0cnVjdCBfU3dpdGNoZXJDbGFzcyBTd2l0Y2hlckNsYXNzOworKworKyNkZWZpbmUgVFlQRV9Q Uk9QRVJUWV9NQU5BR0VSIChwcm9wZXJ0eV9tYW5hZ2VyX2dldF90eXBlICgpKQorKyNkZWZpbmUg UFJPUEVSVFlfTUFOQUdFUihvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiks IFRZUEVfUFJPUEVSVFlfTUFOQUdFUiwgUHJvcGVydHlNYW5hZ2VyKSkKKysjZGVmaW5lIFBST1BF UlRZX01BTkFHRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNz KSwgVFlQRV9QUk9QRVJUWV9NQU5BR0VSLCBQcm9wZXJ0eU1hbmFnZXJDbGFzcykpCisrI2RlZmlu ZSBJU19QUk9QRVJUWV9NQU5BR0VSKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgo b2JqKSwgVFlQRV9QUk9QRVJUWV9NQU5BR0VSKSkKKysjZGVmaW5lIElTX1BST1BFUlRZX01BTkFH RVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgVFlQRV9Q Uk9QRVJUWV9NQU5BR0VSKSkKKysjZGVmaW5lIFBST1BFUlRZX01BTkFHRVJfR0VUX0NMQVNTKG9i aikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBUWVBFX1BST1BFUlRZX01BTkFH RVIsIFByb3BlcnR5TWFuYWdlckNsYXNzKSkKKysKKyt0eXBlZGVmIHN0cnVjdCBfUHJvcGVydHlN YW5hZ2VyIFByb3BlcnR5TWFuYWdlcjsKKyt0eXBlZGVmIHN0cnVjdCBfUHJvcGVydHlNYW5hZ2Vy Q2xhc3MgUHJvcGVydHlNYW5hZ2VyQ2xhc3M7CisrCisrI2RlZmluZSBUWVBFX0dLQkRfTEFZT1VU IChna2JkX2xheW91dF9nZXRfdHlwZSAoKSkKKysjZGVmaW5lIEdLQkRfTEFZT1VUKG9iaikgKEdf VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgVFlQRV9HS0JEX0xBWU9VVCwgR2tiZExh eW91dCkpCisrI2RlZmluZSBHS0JEX0xBWU9VVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D TEFTU19DQVNUICgoa2xhc3MpLCBUWVBFX0dLQkRfTEFZT1VULCBHa2JkTGF5b3V0Q2xhc3MpKQor KyNkZWZpbmUgSVNfR0tCRF9MQVlPVVQob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUg KChvYmopLCBUWVBFX0dLQkRfTEFZT1VUKSkKKysjZGVmaW5lIElTX0dLQkRfTEFZT1VUX0NMQVNT KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFRZUEVfR0tCRF9MQVlP VVQpKQorKyNkZWZpbmUgR0tCRF9MQVlPVVRfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNUQU5D RV9HRVRfQ0xBU1MgKChvYmopLCBUWVBFX0dLQkRfTEFZT1VULCBHa2JkTGF5b3V0Q2xhc3MpKQor KworK3R5cGVkZWYgc3RydWN0IF9Ha2JkTGF5b3V0IEdrYmRMYXlvdXQ7CisrdHlwZWRlZiBzdHJ1 Y3QgX0drYmRMYXlvdXRDbGFzcyBHa2JkTGF5b3V0Q2xhc3M7CisrCisrI2RlZmluZSBUWVBFX1hL Ql9MQVlPVVQgKHhrYl9sYXlvdXRfZ2V0X3R5cGUgKCkpCisrI2RlZmluZSBYS0JfTEFZT1VUKG9i aikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgVFlQRV9YS0JfTEFZT1VULCBY S0JMYXlvdXQpKQorKyNkZWZpbmUgWEtCX0xBWU9VVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD S19DTEFTU19DQVNUICgoa2xhc3MpLCBUWVBFX1hLQl9MQVlPVVQsIFhLQkxheW91dENsYXNzKSkK KysjZGVmaW5lIElTX1hLQl9MQVlPVVQob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUg KChvYmopLCBUWVBFX1hLQl9MQVlPVVQpKQorKyNkZWZpbmUgSVNfWEtCX0xBWU9VVF9DTEFTUyhr bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBUWVBFX1hLQl9MQVlPVVQp KQorKyNkZWZpbmUgWEtCX0xBWU9VVF9HRVRfQ0xBU1Mob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dF VF9DTEFTUyAoKG9iaiksIFRZUEVfWEtCX0xBWU9VVCwgWEtCTGF5b3V0Q2xhc3MpKQorKworK3R5 cGVkZWYgc3RydWN0IF9YS0JMYXlvdXQgWEtCTGF5b3V0OworK3R5cGVkZWYgc3RydWN0IF9YS0JM YXlvdXRDbGFzcyBYS0JMYXlvdXRDbGFzczsKKysKKysjZGVmaW5lIFRZUEVfS0VZQklORElOR19N QU5BR0VSIChrZXliaW5kaW5nX21hbmFnZXJfZ2V0X3R5cGUgKCkpCisrI2RlZmluZSBLRVlCSU5E SU5HX01BTkFHRVIob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBUWVBF X0tFWUJJTkRJTkdfTUFOQUdFUiwgS2V5YmluZGluZ01hbmFnZXIpKQorKyNkZWZpbmUgS0VZQklO RElOR19NQU5BR0VSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFz cyksIFRZUEVfS0VZQklORElOR19NQU5BR0VSLCBLZXliaW5kaW5nTWFuYWdlckNsYXNzKSkKKysj ZGVmaW5lIElTX0tFWUJJTkRJTkdfTUFOQUdFUihvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf VFlQRSAoKG9iaiksIFRZUEVfS0VZQklORElOR19NQU5BR0VSKSkKKysjZGVmaW5lIElTX0tFWUJJ TkRJTkdfTUFOQUdFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xh c3MpLCBUWVBFX0tFWUJJTkRJTkdfTUFOQUdFUikpCisrI2RlZmluZSBLRVlCSU5ESU5HX01BTkFH RVJfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBUWVBF X0tFWUJJTkRJTkdfTUFOQUdFUiwgS2V5YmluZGluZ01hbmFnZXJDbGFzcykpCisrCisrdHlwZWRl ZiBzdHJ1Y3QgX0tleWJpbmRpbmdNYW5hZ2VyIEtleWJpbmRpbmdNYW5hZ2VyOworK3R5cGVkZWYg c3RydWN0IF9LZXliaW5kaW5nTWFuYWdlckNsYXNzIEtleWJpbmRpbmdNYW5hZ2VyQ2xhc3M7Cisr I2RlZmluZSBfZ19mcmVlMCh2YXIpICh2YXIgPSAoZ19mcmVlICh2YXIpLCBOVUxMKSkKKysjZGVm aW5lIF9na2JkX2xheW91dF91bnJlZjAodmFyKSAoKHZhciA9PSBOVUxMKSA/IE5VTEwgOiAodmFy ID0gKGdrYmRfbGF5b3V0X3VucmVmICh2YXIpLCBOVUxMKSkpCisrI2RlZmluZSBfeGtiX2xheW91 dF91bnJlZjAodmFyKSAoKHZhciA9PSBOVUxMKSA/IE5VTEwgOiAodmFyID0gKHhrYl9sYXlvdXRf dW5yZWYgKHZhciksIE5VTEwpKSkKKysjZGVmaW5lIF9nX29iamVjdF91bnJlZjAodmFyKSAoKHZh ciA9PSBOVUxMKSA/IE5VTEwgOiAodmFyID0gKGdfb2JqZWN0X3VucmVmICh2YXIpLCBOVUxMKSkp CisrI2RlZmluZSBfcHJvcGVydHlfbWFuYWdlcl91bnJlZjAodmFyKSAoKHZhciA9PSBOVUxMKSA/ IE5VTEwgOiAodmFyID0gKHByb3BlcnR5X21hbmFnZXJfdW5yZWYgKHZhciksIE5VTEwpKSkKKysj ZGVmaW5lIF9nX3RpbWVyX2Rlc3Ryb3kwKHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZh ciA9IChnX3RpbWVyX2Rlc3Ryb3kgKHZhciksIE5VTEwpKSkKKysjZGVmaW5lIF9nX3ZhcmlhbnRf dW5yZWYwKHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZhciA9IChnX3ZhcmlhbnRfdW5y ZWYgKHZhciksIE5VTEwpKSkKKysjZGVmaW5lIF9fZ19saXN0X2ZyZWVfX2dfZnJlZTBfMCh2YXIp ICgodmFyID09IE5VTEwpID8gTlVMTCA6ICh2YXIgPSAoX2dfbGlzdF9mcmVlX19nX2ZyZWUwXyAo dmFyKSwgTlVMTCkpKQorKyNkZWZpbmUgX2dfZXJyb3JfZnJlZTAodmFyKSAoKHZhciA9PSBOVUxM KSA/IE5VTEwgOiAodmFyID0gKGdfZXJyb3JfZnJlZSAodmFyKSwgTlVMTCkpKQorK3R5cGVkZWYg c3RydWN0IF9CbG9jazREYXRhIEJsb2NrNERhdGE7CisrCisrI2RlZmluZSBUWVBFX0lDT05fV0lE R0VUIChpY29uX3dpZGdldF9nZXRfdHlwZSAoKSkKKysjZGVmaW5lIElDT05fV0lER0VUKG9iaikg KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgVFlQRV9JQ09OX1dJREdFVCwgSWNv bldpZGdldCkpCisrI2RlZmluZSBJQ09OX1dJREdFVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD S19DTEFTU19DQVNUICgoa2xhc3MpLCBUWVBFX0lDT05fV0lER0VULCBJY29uV2lkZ2V0Q2xhc3Mp KQorKyNkZWZpbmUgSVNfSUNPTl9XSURHRVQob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ UEUgKChvYmopLCBUWVBFX0lDT05fV0lER0VUKSkKKysjZGVmaW5lIElTX0lDT05fV0lER0VUX0NM QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFRZUEVfSUNPTl9X SURHRVQpKQorKyNkZWZpbmUgSUNPTl9XSURHRVRfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNU QU5DRV9HRVRfQ0xBU1MgKChvYmopLCBUWVBFX0lDT05fV0lER0VULCBJY29uV2lkZ2V0Q2xhc3Mp KQorKworK3R5cGVkZWYgc3RydWN0IF9JY29uV2lkZ2V0IEljb25XaWRnZXQ7CisrdHlwZWRlZiBz dHJ1Y3QgX0ljb25XaWRnZXRDbGFzcyBJY29uV2lkZ2V0Q2xhc3M7CisrCisrc3RydWN0IF9QYW5l bCB7CisrCUlCdXNQYW5lbFNlcnZpY2UgcGFyZW50X2luc3RhbmNlOworKwlQYW5lbFByaXZhdGUg KiBwcml2OworK307CisrCisrc3RydWN0IF9QYW5lbENsYXNzIHsKKysJSUJ1c1BhbmVsU2Vydmlj ZUNsYXNzIHBhcmVudF9jbGFzczsKKyt9OworKworK3N0cnVjdCBfUGFuZWxQcml2YXRlIHsKKysJ SUJ1c0J1cyogbV9idXM7CisrCUlCdXNDb25maWcqIG1fY29uZmlnOworKwlHdGtTdGF0dXNJY29u KiBtX3N0YXR1c19pY29uOworKwlHdGtNZW51KiBtX2ltZV9tZW51OworKwlHdGtNZW51KiBtX3N5 c19tZW51OworKwlJQnVzRW5naW5lRGVzYyoqIG1fZW5naW5lczsKKysJZ2ludCBtX2VuZ2luZXNf bGVuZ3RoMTsKKysJZ2ludCBfbV9lbmdpbmVzX3NpemVfOworKwlDYW5kaWRhdGVQYW5lbCogbV9j YW5kaWRhdGVfcGFuZWw7CisrCVN3aXRjaGVyKiBtX3N3aXRjaGVyOworKwlQcm9wZXJ0eU1hbmFn ZXIqIG1fcHJvcGVydHlfbWFuYWdlcjsKKysJR1BpZCBtX3NldHVwX3BpZDsKKysJR3RrQWJvdXRE aWFsb2cqIG1fYWJvdXRfZGlhbG9nOworKwlHa2JkTGF5b3V0KiBtX2drYmRsYXlvdXQ7CisrCVhL QkxheW91dCogbV94a2JsYXlvdXQ7CisrCWdjaGFyKiogbV9sYXlvdXRzOworKwlnaW50IG1fbGF5 b3V0c19sZW5ndGgxOworKwlnaW50IF9tX2xheW91dHNfc2l6ZV87CisrCWdjaGFyKiogbV92YXJp YW50czsKKysJZ2ludCBtX3ZhcmlhbnRzX2xlbmd0aDE7CisrCWdpbnQgX21fdmFyaWFudHNfc2l6 ZV87CisrCWdpbnQgbV9mYWxsYmFja19sb2NrX2lkOworKwlnYm9vbGVhbiBtX2NoYW5nZWRfeGti X29wdGlvbjsKKysJR1RpbWVyKiBtX2NoYW5nZWRfbGF5b3V0X3RpbWVyOworKwlnY2hhcioqIEFD Q0VMRVJBVE9SX0lNRV9IT1RLRVlTOworKwlnaW50IEFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xl bmd0aDE7CisrCWdpbnQgX0FDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX3NpemVfOworK307CisrCisr dHlwZWRlZiB2b2lkICgqS2V5YmluZGluZ01hbmFnZXJLZXliaW5kaW5nSGFuZGxlckZ1bmMpIChH ZGtFdmVudCogZXZlbnQsIHZvaWQqIHVzZXJfZGF0YSk7Cisrc3RydWN0IF9CbG9jazREYXRhIHsK KysJaW50IF9yZWZfY291bnRfOworKwlQYW5lbCAqIHNlbGY7CisrCUlCdXNFbmdpbmVEZXNjKiBl OworK307CisrCisrCisrc3RhdGljIGdwb2ludGVyIHBhbmVsX3BhcmVudF9jbGFzcyA9IE5VTEw7 CisrCisrR1R5cGUgcGFuZWxfZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKKytHVHlwZSBj YW5kaWRhdGVfcGFuZWxfZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKKytHVHlwZSBzd2l0 Y2hlcl9nZXRfdHlwZSAodm9pZCkgR19HTlVDX0NPTlNUOworK2dwb2ludGVyIHByb3BlcnR5X21h bmFnZXJfcmVmIChncG9pbnRlciBpbnN0YW5jZSk7Cisrdm9pZCBwcm9wZXJ0eV9tYW5hZ2VyX3Vu cmVmIChncG9pbnRlciBpbnN0YW5jZSk7CisrR1BhcmFtU3BlYyogcGFyYW1fc3BlY19wcm9wZXJ0 eV9tYW5hZ2VyIChjb25zdCBnY2hhciogbmFtZSwgY29uc3QgZ2NoYXIqIG5pY2ssIGNvbnN0IGdj aGFyKiBibHVyYiwgR1R5cGUgb2JqZWN0X3R5cGUsIEdQYXJhbUZsYWdzIGZsYWdzKTsKKyt2b2lk IHZhbHVlX3NldF9wcm9wZXJ0eV9tYW5hZ2VyIChHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB2X29i amVjdCk7Cisrdm9pZCB2YWx1ZV90YWtlX3Byb3BlcnR5X21hbmFnZXIgKEdWYWx1ZSogdmFsdWUs IGdwb2ludGVyIHZfb2JqZWN0KTsKKytncG9pbnRlciB2YWx1ZV9nZXRfcHJvcGVydHlfbWFuYWdl ciAoY29uc3QgR1ZhbHVlKiB2YWx1ZSk7CisrR1R5cGUgcHJvcGVydHlfbWFuYWdlcl9nZXRfdHlw ZSAodm9pZCkgR19HTlVDX0NPTlNUOworK2dwb2ludGVyIGdrYmRfbGF5b3V0X3JlZiAoZ3BvaW50 ZXIgaW5zdGFuY2UpOworK3ZvaWQgZ2tiZF9sYXlvdXRfdW5yZWYgKGdwb2ludGVyIGluc3RhbmNl KTsKKytHUGFyYW1TcGVjKiBwYXJhbV9zcGVjX2drYmRfbGF5b3V0IChjb25zdCBnY2hhciogbmFt ZSwgY29uc3QgZ2NoYXIqIG5pY2ssIGNvbnN0IGdjaGFyKiBibHVyYiwgR1R5cGUgb2JqZWN0X3R5 cGUsIEdQYXJhbUZsYWdzIGZsYWdzKTsKKyt2b2lkIHZhbHVlX3NldF9na2JkX2xheW91dCAoR1Zh bHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpOworK3ZvaWQgdmFsdWVfdGFrZV9na2JkX2xh eW91dCAoR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpOworK2dwb2ludGVyIHZhbHVl X2dldF9na2JkX2xheW91dCAoY29uc3QgR1ZhbHVlKiB2YWx1ZSk7CisrR1R5cGUgZ2tiZF9sYXlv dXRfZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKKytncG9pbnRlciB4a2JfbGF5b3V0X3Jl ZiAoZ3BvaW50ZXIgaW5zdGFuY2UpOworK3ZvaWQgeGtiX2xheW91dF91bnJlZiAoZ3BvaW50ZXIg aW5zdGFuY2UpOworK0dQYXJhbVNwZWMqIHBhcmFtX3NwZWNfeGtiX2xheW91dCAoY29uc3QgZ2No YXIqIG5hbWUsIGNvbnN0IGdjaGFyKiBuaWNrLCBjb25zdCBnY2hhciogYmx1cmIsIEdUeXBlIG9i amVjdF90eXBlLCBHUGFyYW1GbGFncyBmbGFncyk7Cisrdm9pZCB2YWx1ZV9zZXRfeGtiX2xheW91 dCAoR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpOworK3ZvaWQgdmFsdWVfdGFrZV94 a2JfbGF5b3V0IChHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB2X29iamVjdCk7CisrZ3BvaW50ZXIg dmFsdWVfZ2V0X3hrYl9sYXlvdXQgKGNvbnN0IEdWYWx1ZSogdmFsdWUpOworK0dUeXBlIHhrYl9s YXlvdXRfZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKKysjZGVmaW5lIFBBTkVMX0dFVF9Q UklWQVRFKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvKSwgVFlQRV9QQU5FTCwg UGFuZWxQcml2YXRlKSkKKytlbnVtICB7CisrCVBBTkVMX0RVTU1ZX1BST1BFUlRZCisrfTsKKytH VHlwZSBrZXliaW5kaW5nX21hbmFnZXJfZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKKytL ZXliaW5kaW5nTWFuYWdlcioga2V5YmluZGluZ19tYW5hZ2VyX2dldF9pbnN0YW5jZSAodm9pZCk7 Cisrdm9pZCBrZXliaW5kaW5nX21hbmFnZXJfdW5iaW5kIChLZXliaW5kaW5nTWFuYWdlciogc2Vs ZiwgY29uc3QgZ2NoYXIqIGFjY2VsZXJhdG9yKTsKKysjZGVmaW5lIFBBTkVMX0FDQ0VMRVJBVE9S X1NXSVRDSF9JTUVfRk9SRVdBUkQgIjxDb250cm9sPnNwYWNlIgorKyNkZWZpbmUgUEFORUxfQUND RUxFUkFUT1JfU1dJVENIX0lNRV9CQUNLV0FSRCAiPENvbnRyb2w+PFNoaWZ0PnNwYWNlIgorK3N0 YXRpYyB2b2lkIHBhbmVsX2drYmRsYXlvdXRfY2hhbmdlZF9jYiAoUGFuZWwqIHNlbGYpOworK3N0 YXRpYyB2b2lkIF9wYW5lbF9na2JkbGF5b3V0X2NoYW5nZWRfY2JfZ2tiZF9sYXlvdXRfY2hhbmdl ZCAoR2tiZExheW91dCogX3NlbmRlciwgZ3BvaW50ZXIgc2VsZik7Cisrdm9pZCBna2JkX2xheW91 dF9zdG9wX2xpc3RlbiAoR2tiZExheW91dCogc2VsZik7CisrUGFuZWwqIHBhbmVsX25ldyAoSUJ1 c0J1cyogYnVzKTsKKytQYW5lbCogcGFuZWxfY29uc3RydWN0IChHVHlwZSBvYmplY3RfdHlwZSwg SUJ1c0J1cyogYnVzKTsKKytzdGF0aWMgdm9pZCBwYW5lbF9zdGF0dXNfaWNvbl9wb3B1cF9tZW51 X2NiIChQYW5lbCogc2VsZiwgR3RrU3RhdHVzSWNvbiogc3RhdHVzX2ljb24sIGd1aW50IGJ1dHRv biwgZ3VpbnQgYWN0aXZhdGVfdGltZSk7Cisrc3RhdGljIHZvaWQgX3BhbmVsX3N0YXR1c19pY29u X3BvcHVwX21lbnVfY2JfZ3RrX3N0YXR1c19pY29uX3BvcHVwX21lbnUgKEd0a1N0YXR1c0ljb24q IF9zZW5kZXIsIGd1aW50IGJ1dHRvbiwgZ3VpbnQgYWN0aXZhdGVfdGltZSwgZ3BvaW50ZXIgc2Vs Zik7Cisrc3RhdGljIHZvaWQgcGFuZWxfc3RhdHVzX2ljb25fYWN0aXZhdGVfY2IgKFBhbmVsKiBz ZWxmLCBHdGtTdGF0dXNJY29uKiBzdGF0dXNfaWNvbik7Cisrc3RhdGljIHZvaWQgX3BhbmVsX3N0 YXR1c19pY29uX2FjdGl2YXRlX2NiX2d0a19zdGF0dXNfaWNvbl9hY3RpdmF0ZSAoR3RrU3RhdHVz SWNvbiogX3NlbmRlciwgZ3BvaW50ZXIgc2VsZik7CisrQ2FuZGlkYXRlUGFuZWwqIGNhbmRpZGF0 ZV9wYW5lbF9uZXcgKHZvaWQpOworK0NhbmRpZGF0ZVBhbmVsKiBjYW5kaWRhdGVfcGFuZWxfY29u c3RydWN0IChHVHlwZSBvYmplY3RfdHlwZSk7Cisrc3RhdGljIHZvaWQgX19sYW1iZGEyM18gKFBh bmVsKiBzZWxmLCBDYW5kaWRhdGVQYW5lbCogdyk7Cisrc3RhdGljIHZvaWQgX19fbGFtYmRhMjNf X2NhbmRpZGF0ZV9wYW5lbF9wYWdlX3VwIChDYW5kaWRhdGVQYW5lbCogX3NlbmRlciwgZ3BvaW50 ZXIgc2VsZik7Cisrc3RhdGljIHZvaWQgX19sYW1iZGEyNF8gKFBhbmVsKiBzZWxmLCBDYW5kaWRh dGVQYW5lbCogdyk7Cisrc3RhdGljIHZvaWQgX19fbGFtYmRhMjRfX2NhbmRpZGF0ZV9wYW5lbF9w YWdlX2Rvd24gKENhbmRpZGF0ZVBhbmVsKiBfc2VuZGVyLCBncG9pbnRlciBzZWxmKTsKKytTd2l0 Y2hlciogc3dpdGNoZXJfbmV3ICh2b2lkKTsKKytTd2l0Y2hlciogc3dpdGNoZXJfY29uc3RydWN0 IChHVHlwZSBvYmplY3RfdHlwZSk7CisrUHJvcGVydHlNYW5hZ2VyKiBwcm9wZXJ0eV9tYW5hZ2Vy X25ldyAodm9pZCk7CisrUHJvcGVydHlNYW5hZ2VyKiBwcm9wZXJ0eV9tYW5hZ2VyX2NvbnN0cnVj dCAoR1R5cGUgb2JqZWN0X3R5cGUpOworK3N0YXRpYyB2b2lkIF9fbGFtYmRhMjVfIChQYW5lbCog c2VsZiwgY29uc3QgZ2NoYXIqIGssIGdpbnQgcyk7Cisrc3RhdGljIHZvaWQgX19fbGFtYmRhMjVf X3Byb3BlcnR5X21hbmFnZXJfcHJvcGVydHlfYWN0aXZhdGUgKFByb3BlcnR5TWFuYWdlciogX3Nl bmRlciwgY29uc3QgZ2NoYXIqIGtleSwgZ2ludCBzdGF0ZSwgZ3BvaW50ZXIgc2VsZik7Cisrc3Rh dGljIHZvaWQgcGFuZWxfc2V0X2tleWJpbmRpbmcgKFBhbmVsKiBzZWxmKTsKKytzdGF0aWMgdm9p ZCBfdmFsYV9hcnJheV9hZGQ5IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6 ZSwgZ2NoYXIqIHZhbHVlKTsKKytzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMCAoZ2NoYXIq KiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Cisrc3RhdGlj IHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTEgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50 KiBzaXplLCBnY2hhciogdmFsdWUpOworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDEyIChn Y2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKKytn Ym9vbGVhbiBrZXliaW5kaW5nX21hbmFnZXJfYmluZCAoS2V5YmluZGluZ01hbmFnZXIqIHNlbGYs IGNvbnN0IGdjaGFyKiBhY2NlbGVyYXRvciwgS2V5YmluZGluZ01hbmFnZXJLZXliaW5kaW5nSGFu ZGxlckZ1bmMgaGFuZGxlciwgdm9pZCogaGFuZGxlcl90YXJnZXQpOworK3N0YXRpYyB2b2lkIF9f X19sYW1iZGEyNl8gKFBhbmVsKiBzZWxmLCBHZGtFdmVudCogZSk7Cisrc3RhdGljIHZvaWQgcGFu ZWxfaGFuZGxlX2VuZ2luZV9zd2l0Y2ggKFBhbmVsKiBzZWxmLCBHZGtFdmVudCogZXZlbnQsIGdi b29sZWFuIHJldmVydCk7Cisrc3RhdGljIHZvaWQgX19fX19sYW1iZGEyNl9fa2V5YmluZGluZ19t YW5hZ2VyX2tleWJpbmRpbmdfaGFuZGxlcl9mdW5jIChHZGtFdmVudCogZXZlbnQsIGdwb2ludGVy IHNlbGYpOworK3N0YXRpYyB2b2lkIF9fX19fbGFtYmRhMjdfIChQYW5lbCogc2VsZiwgR2RrRXZl bnQqIGUpOworK3N0YXRpYyB2b2lkIF9fX19fX2xhbWJkYTI3X19rZXliaW5kaW5nX21hbmFnZXJf a2V5YmluZGluZ19oYW5kbGVyX2Z1bmMgKEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgc2VsZik7 Cisrdm9pZCBwYW5lbF9zZXRfY29uZmlnIChQYW5lbCogc2VsZiwgSUJ1c0NvbmZpZyogY29uZmln KTsKKytzdGF0aWMgdm9pZCBwYW5lbF9jb25maWdfdmFsdWVfY2hhbmdlZF9jYiAoUGFuZWwqIHNl bGYsIElCdXNDb25maWcqIGNvbmZpZywgY29uc3QgZ2NoYXIqIHNlY3Rpb24sIGNvbnN0IGdjaGFy KiBuYW1lLCBHVmFyaWFudCogdmFyaWFudCk7Cisrc3RhdGljIHZvaWQgX3BhbmVsX2NvbmZpZ192 YWx1ZV9jaGFuZ2VkX2NiX2lidXNfY29uZmlnX3ZhbHVlX2NoYW5nZWQgKElCdXNDb25maWcqIF9z ZW5kZXIsIGNvbnN0IGdjaGFyKiBzZWN0aW9uLCBjb25zdCBnY2hhciogbmFtZSwgR1ZhcmlhbnQq IHZhbHVlLCBncG9pbnRlciBzZWxmKTsKKytzdGF0aWMgdm9pZCBwYW5lbF9pbml0X2VuZ2luZXNf b3JkZXIgKFBhbmVsKiBzZWxmKTsKKytzdGF0aWMgdm9pZCBwYW5lbF91cGRhdGVfZW5naW5lcyAo UGFuZWwqIHNlbGYsIEdWYXJpYW50KiB2YXJfZW5naW5lcywgR1ZhcmlhbnQqIHZhcl9vcmRlcik7 Cisrdm9pZCBna2JkX2xheW91dF9sb2NrX2dyb3VwIChHa2JkTGF5b3V0KiBzZWxmLCBnaW50IGlk KTsKKyt2b2lkIHhrYl9sYXlvdXRfcmVzZXRfbGF5b3V0IChYS0JMYXlvdXQqIHNlbGYpOworK3N0 YXRpYyB2b2lkIHBhbmVsX3VwZGF0ZV94a2JfZW5naW5lcyAoUGFuZWwqIHNlbGYpOworK3N0YXRp YyB2b2lkIHBhbmVsX2luaXRfZ2tiZCAoUGFuZWwqIHNlbGYpOworK0drYmRMYXlvdXQqIGdrYmRf bGF5b3V0X25ldyAodm9pZCk7CisrR2tiZExheW91dCogZ2tiZF9sYXlvdXRfY29uc3RydWN0IChH VHlwZSBvYmplY3RfdHlwZSk7Cisrdm9pZCBna2JkX2xheW91dF9zdGFydF9saXN0ZW4gKEdrYmRM YXlvdXQqIHNlbGYpOworK1hLQkxheW91dCogeGtiX2xheW91dF9uZXcgKElCdXNDb25maWcqIGNv bmZpZyk7CisrWEtCTGF5b3V0KiB4a2JfbGF5b3V0X2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5 cGUsIElCdXNDb25maWcqIGNvbmZpZyk7CisrZ2NoYXIqIHhrYl9sYXlvdXRfZ2V0X2xheW91dCAo WEtCTGF5b3V0KiBzZWxmKTsKKytnY2hhciogeGtiX2xheW91dF9nZXRfdmFyaWFudCAoWEtCTGF5 b3V0KiBzZWxmKTsKKytzdGF0aWMgdm9pZCBfZ19mcmVlMF8gKGdwb2ludGVyIHZhcik7Cisrc3Rh dGljIHZvaWQgX2dfbGlzdF9mcmVlX19nX2ZyZWUwXyAoR0xpc3QqIHNlbGYpOworK3N0YXRpYyB2 b2lkIF92YWxhX2FycmF5X2FkZDEzIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCog c2l6ZSwgZ2NoYXIqIHZhbHVlKTsKKytzdGF0aWMgZ2Jvb2xlYW4gX3ZhbGFfc3RyaW5nX2FycmF5 X2NvbnRhaW5zIChnY2hhcioqIHN0YWNrLCBpbnQgc3RhY2tfbGVuZ3RoLCBnY2hhciogbmVlZGxl KTsKKytzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxNCAoZ2NoYXIqKiogYXJyYXksIGludCog bGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Cisrc3RhdGljIHZvaWQgX3ZhbGFfYXJy YXlfYWRkMTUgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciog dmFsdWUpOworK3N0YXRpYyB2b2lkIHBhbmVsX3NldF94a2JfZ3JvdXBfbGF5b3V0IChQYW5lbCog c2VsZiwgY29uc3QgZ2NoYXIqIGxheW91dCk7CisrZ2ludCogeGtiX2xheW91dF9zZXRfbGF5b3V0 IChYS0JMYXlvdXQqIHNlbGYsIGNvbnN0IGdjaGFyKiBfbGF5b3V0LCBjb25zdCBnY2hhciogX3Zh cmlhbnQsIGNvbnN0IGdjaGFyKiBfb3B0aW9uLCBpbnQqIHJlc3VsdF9sZW5ndGgxKTsKKytzdGF0 aWMgZ2Jvb2xlYW4gcGFuZWxfc2V0X2drYmRfbGF5b3V0IChQYW5lbCogc2VsZiwgY29uc3QgZ2No YXIqIGxheW91dCk7CisrZ2NoYXIqKiBna2JkX2xheW91dF9nZXRfZ3JvdXBfbmFtZXMgKEdrYmRM YXlvdXQqIHNlbGYsIGludCogcmVzdWx0X2xlbmd0aDEpOworK3N0YXRpYyB2b2lkIHBhbmVsX3Nl dF9sYXlvdXQgKFBhbmVsKiBzZWxmLCBjb25zdCBnY2hhciogbGF5b3V0KTsKKytzdGF0aWMgdm9p ZCBwYW5lbF9zd2l0Y2hfZW5naW5lIChQYW5lbCogc2VsZiwgZ2ludCBpLCBnYm9vbGVhbiBmb3Jj ZSk7Cisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTYgKGdjaGFyKioqIGFycmF5LCBpbnQq IGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOworK2d1aW50IGtleWJpbmRpbmdfbWFu YWdlcl9nZXRfcHJpbWFyeV9tb2RpZmllciAoZ3VpbnQgYmluZGluZ19tYXNrKTsKKytnYm9vbGVh biBrZXliaW5kaW5nX21hbmFnZXJfcHJpbWFyeV9tb2RpZmllcl9zdGlsbF9wcmVzc2VkIChHZGtF dmVudCogZXZlbnQsIGd1aW50IHByaW1hcnlfbW9kaWZpZXIpOworK2dpbnQgc3dpdGNoZXJfcnVu IChTd2l0Y2hlciogc2VsZiwgR2RrRXZlbnQqIGV2ZW50LCBJQnVzRW5naW5lRGVzYyoqIGVuZ2lu ZXMsIGludCBlbmdpbmVzX2xlbmd0aDEsIGdpbnQgaW5kZXgpOworK3N0YXRpYyBnY2hhcioqIF92 YWxhX2FycmF5X2R1cDIgKGdjaGFyKiogc2VsZiwgaW50IGxlbmd0aCk7Cisrc3RhdGljIHZvaWQg X3ZhbGFfYXJyYXlfYWRkMTcgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXpl LCBnY2hhciogdmFsdWUpOworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDE4IChnY2hhcioq KiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKKytzdGF0aWMg SUJ1c0VuZ2luZURlc2MqKiBfdmFsYV9hcnJheV9kdXAzIChJQnVzRW5naW5lRGVzYyoqIHNlbGYs IGludCBsZW5ndGgpOworK3N0YXRpYyBJQnVzRW5naW5lRGVzYyoqIF92YWxhX2FycmF5X2R1cDQg KElCdXNFbmdpbmVEZXNjKiogc2VsZiwgaW50IGxlbmd0aCk7Cisrc3RhdGljIHZvaWQgcGFuZWxf c2hvd19zZXR1cF9kaWFsb2cgKFBhbmVsKiBzZWxmKTsKKytzdGF0aWMgdm9pZCBfX2xhbWJkYTE4 XyAoUGFuZWwqIHNlbGYsIEdQaWQgcGlkLCBnaW50IHN0YXRlKTsKKytzdGF0aWMgdm9pZCBfX19s YW1iZGExOF9fZ2NoaWxkX3dhdGNoX2Z1bmMgKEdQaWQgcGlkLCBnaW50IHN0YXR1cywgZ3BvaW50 ZXIgc2VsZik7Cisrc3RhdGljIHZvaWQgcGFuZWxfc2hvd19hYm91dF9kaWFsb2cgKFBhbmVsKiBz ZWxmKTsKKytzdGF0aWMgdm9pZCBfX19sYW1iZGExN18gKFBhbmVsKiBzZWxmLCBHdGtNZW51SXRl bSogaSk7Cisrc3RhdGljIHZvaWQgX19fX2xhbWJkYTE3X19ndGtfbWVudV9pdGVtX2FjdGl2YXRl IChHdGtNZW51SXRlbSogX3NlbmRlciwgZ3BvaW50ZXIgc2VsZik7Cisrc3RhdGljIHZvaWQgX19f bGFtYmRhMTlfIChQYW5lbCogc2VsZiwgR3RrTWVudUl0ZW0qIGkpOworK3N0YXRpYyB2b2lkIF9f X19sYW1iZGExOV9fZ3RrX21lbnVfaXRlbV9hY3RpdmF0ZSAoR3RrTWVudUl0ZW0qIF9zZW5kZXIs IGdwb2ludGVyIHNlbGYpOworK3N0YXRpYyB2b2lkIF9fX2xhbWJkYTIwXyAoUGFuZWwqIHNlbGYs IEd0a01lbnVJdGVtKiBpKTsKKytzdGF0aWMgdm9pZCBfX19fbGFtYmRhMjBfX2d0a19tZW51X2l0 ZW1fYWN0aXZhdGUgKEd0a01lbnVJdGVtKiBfc2VuZGVyLCBncG9pbnRlciBzZWxmKTsKKytzdGF0 aWMgdm9pZCBfX19sYW1iZGEyMV8gKFBhbmVsKiBzZWxmLCBHdGtNZW51SXRlbSogaSk7Cisrc3Rh dGljIHZvaWQgX19fX2xhbWJkYTIxX19ndGtfbWVudV9pdGVtX2FjdGl2YXRlIChHdGtNZW51SXRl bSogX3NlbmRlciwgZ3BvaW50ZXIgc2VsZik7Cisrc3RhdGljIHZvaWQgX2d0a19zdGF0dXNfaWNv bl9wb3NpdGlvbl9tZW51X2d0a19tZW51X3Bvc2l0aW9uX2Z1bmMgKEd0a01lbnUqIG1lbnUsIGdp bnQqIHgsIGdpbnQqIHksIGdib29sZWFuKiBwdXNoX2luLCBncG9pbnRlciBzZWxmKTsKKytnaW50 IHByb3BlcnR5X21hbmFnZXJfY3JlYXRlX21lbnVfaXRlbXMgKFByb3BlcnR5TWFuYWdlciogc2Vs ZiwgR3RrTWVudSogbWVudSk7Cisrc3RhdGljIEJsb2NrNERhdGEqIGJsb2NrNF9kYXRhX3JlZiAo QmxvY2s0RGF0YSogX2RhdGE0Xyk7Cisrc3RhdGljIHZvaWQgYmxvY2s0X2RhdGFfdW5yZWYgKEJs b2NrNERhdGEqIF9kYXRhNF8pOworK0ljb25XaWRnZXQqIGljb25fd2lkZ2V0X25ldyAoY29uc3Qg Z2NoYXIqIGljb24sIGdpbnQgc2l6ZSk7CisrSWNvbldpZGdldCogaWNvbl93aWRnZXRfY29uc3Ry dWN0IChHVHlwZSBvYmplY3RfdHlwZSwgY29uc3QgZ2NoYXIqIGljb24sIGdpbnQgc2l6ZSk7Cisr R1R5cGUgaWNvbl93aWRnZXRfZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKKytzdGF0aWMg dm9pZCBfX19fbGFtYmRhMjJfIChCbG9jazREYXRhKiBfZGF0YTRfLCBHdGtNZW51SXRlbSogaXRl bSk7Cisrc3RhdGljIHZvaWQgX19fX19sYW1iZGEyMl9fZ3RrX21lbnVfaXRlbV9hY3RpdmF0ZSAo R3RrTWVudUl0ZW0qIF9zZW5kZXIsIGdwb2ludGVyIHNlbGYpOworK3N0YXRpYyB2b2lkIHBhbmVs X3JlYWxfc2V0X2N1cnNvcl9sb2NhdGlvbiAoSUJ1c1BhbmVsU2VydmljZSogYmFzZSwgZ2ludCB4 LCBnaW50IHksIGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0KTsKKyt2b2lkIGNhbmRpZGF0ZV9wYW5l bF9zZXRfY3Vyc29yX2xvY2F0aW9uIChDYW5kaWRhdGVQYW5lbCogc2VsZiwgZ2ludCB4LCBnaW50 IHksIGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0KTsKKytzdGF0aWMgdm9pZCBwYW5lbF9yZWFsX2Zv Y3VzX2luIChJQnVzUGFuZWxTZXJ2aWNlKiBiYXNlLCBjb25zdCBnY2hhciogaW5wdXRfY29udGV4 dF9wYXRoKTsKKytzdGF0aWMgdm9pZCBwYW5lbF9yZWFsX2ZvY3VzX291dCAoSUJ1c1BhbmVsU2Vy dmljZSogYmFzZSwgY29uc3QgZ2NoYXIqIGlucHV0X2NvbnRleHRfcGF0aCk7Cisrc3RhdGljIHZv aWQgcGFuZWxfcmVhbF9yZWdpc3Rlcl9wcm9wZXJ0aWVzIChJQnVzUGFuZWxTZXJ2aWNlKiBiYXNl LCBJQnVzUHJvcExpc3QqIHByb3BzKTsKKyt2b2lkIHByb3BlcnR5X21hbmFnZXJfc2V0X3Byb3Bl cnRpZXMgKFByb3BlcnR5TWFuYWdlciogc2VsZiwgSUJ1c1Byb3BMaXN0KiBwcm9wcyk7Cisrc3Rh dGljIHZvaWQgcGFuZWxfcmVhbF91cGRhdGVfcHJvcGVydHkgKElCdXNQYW5lbFNlcnZpY2UqIGJh c2UsIElCdXNQcm9wZXJ0eSogcHJvcCk7Cisrdm9pZCBwcm9wZXJ0eV9tYW5hZ2VyX3VwZGF0ZV9w cm9wZXJ0eSAoUHJvcGVydHlNYW5hZ2VyKiBzZWxmLCBJQnVzUHJvcGVydHkqIHByb3ApOworK3N0 YXRpYyB2b2lkIHBhbmVsX3JlYWxfdXBkYXRlX3ByZWVkaXRfdGV4dCAoSUJ1c1BhbmVsU2Vydmlj ZSogYmFzZSwgSUJ1c1RleHQqIHRleHQsIGd1aW50IGN1cnNvcl9wb3MsIGdib29sZWFuIHZpc2li bGUpOworK3ZvaWQgY2FuZGlkYXRlX3BhbmVsX3NldF9wcmVlZGl0X3RleHQgKENhbmRpZGF0ZVBh bmVsKiBzZWxmLCBJQnVzVGV4dCogdGV4dCwgZ3VpbnQgY3Vyc29yKTsKKytzdGF0aWMgdm9pZCBw YW5lbF9yZWFsX2hpZGVfcHJlZWRpdF90ZXh0IChJQnVzUGFuZWxTZXJ2aWNlKiBiYXNlKTsKKytz dGF0aWMgdm9pZCBwYW5lbF9yZWFsX3VwZGF0ZV9hdXhpbGlhcnlfdGV4dCAoSUJ1c1BhbmVsU2Vy dmljZSogYmFzZSwgSUJ1c1RleHQqIHRleHQsIGdib29sZWFuIHZpc2libGUpOworK3ZvaWQgY2Fu ZGlkYXRlX3BhbmVsX3NldF9hdXhpbGlhcnlfdGV4dCAoQ2FuZGlkYXRlUGFuZWwqIHNlbGYsIElC dXNUZXh0KiB0ZXh0KTsKKytzdGF0aWMgdm9pZCBwYW5lbF9yZWFsX2hpZGVfYXV4aWxpYXJ5X3Rl eHQgKElCdXNQYW5lbFNlcnZpY2UqIGJhc2UpOworK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfdXBk YXRlX2xvb2t1cF90YWJsZSAoSUJ1c1BhbmVsU2VydmljZSogYmFzZSwgSUJ1c0xvb2t1cFRhYmxl KiB0YWJsZSwgZ2Jvb2xlYW4gdmlzaWJsZSk7Cisrdm9pZCBjYW5kaWRhdGVfcGFuZWxfc2V0X2xv b2t1cF90YWJsZSAoQ2FuZGlkYXRlUGFuZWwqIHNlbGYsIElCdXNMb29rdXBUYWJsZSogdGFibGUp OworK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfaGlkZV9sb29rdXBfdGFibGUgKElCdXNQYW5lbFNl cnZpY2UqIGJhc2UpOworK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfc3RhdGVfY2hhbmdlZCAoSUJ1 c1BhbmVsU2VydmljZSogYmFzZSk7Cisrc3RhdGljIHZvaWQgcGFuZWxfZmluYWxpemUgKEdPYmpl Y3QqIG9iaik7Cisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfZGVzdHJveSAoZ3BvaW50ZXIgYXJy YXksIGdpbnQgYXJyYXlfbGVuZ3RoLCBHRGVzdHJveU5vdGlmeSBkZXN0cm95X2Z1bmMpOworK3N0 YXRpYyB2b2lkIF92YWxhX2FycmF5X2ZyZWUgKGdwb2ludGVyIGFycmF5LCBnaW50IGFycmF5X2xl bmd0aCwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9mdW5jKTsKKytzdGF0aWMgZ2ludCBfdmFsYV9h cnJheV9sZW5ndGggKGdwb2ludGVyIGFycmF5KTsKKysKKysKKytzdGF0aWMgdm9pZCBfcGFuZWxf Z2tiZGxheW91dF9jaGFuZ2VkX2NiX2drYmRfbGF5b3V0X2NoYW5nZWQgKEdrYmRMYXlvdXQqIF9z ZW5kZXIsIGdwb2ludGVyIHNlbGYpIHsKKysJcGFuZWxfZ2tiZGxheW91dF9jaGFuZ2VkX2NiIChz ZWxmKTsKKyt9CisrCisrCisrc3RhdGljIGdwb2ludGVyIF9nX29iamVjdF9yZWYwIChncG9pbnRl ciBzZWxmKSB7CisrCXJldHVybiBzZWxmID8gZ19vYmplY3RfcmVmIChzZWxmKSA6IE5VTEw7Cisr fQorKworKworK3N0YXRpYyB2b2lkIF9wYW5lbF9zdGF0dXNfaWNvbl9wb3B1cF9tZW51X2NiX2d0 a19zdGF0dXNfaWNvbl9wb3B1cF9tZW51IChHdGtTdGF0dXNJY29uKiBfc2VuZGVyLCBndWludCBi dXR0b24sIGd1aW50IGFjdGl2YXRlX3RpbWUsIGdwb2ludGVyIHNlbGYpIHsKKysJcGFuZWxfc3Rh dHVzX2ljb25fcG9wdXBfbWVudV9jYiAoc2VsZiwgX3NlbmRlciwgYnV0dG9uLCBhY3RpdmF0ZV90 aW1lKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3BhbmVsX3N0YXR1c19pY29uX2FjdGl2YXRl X2NiX2d0a19zdGF0dXNfaWNvbl9hY3RpdmF0ZSAoR3RrU3RhdHVzSWNvbiogX3NlbmRlciwgZ3Bv aW50ZXIgc2VsZikgeworKwlwYW5lbF9zdGF0dXNfaWNvbl9hY3RpdmF0ZV9jYiAoc2VsZiwgX3Nl bmRlcik7CisrfQorKworKworK3N0YXRpYyB2b2lkIF9fbGFtYmRhMjNfIChQYW5lbCogc2VsZiwg Q2FuZGlkYXRlUGFuZWwqIHcpIHsKKysJZ19yZXR1cm5faWZfZmFpbCAodyAhPSBOVUxMKTsKKysJ aWJ1c19wYW5lbF9zZXJ2aWNlX3BhZ2VfdXAgKChJQnVzUGFuZWxTZXJ2aWNlKikgc2VsZik7Cisr fQorKworKworK3N0YXRpYyB2b2lkIF9fX2xhbWJkYTIzX19jYW5kaWRhdGVfcGFuZWxfcGFnZV91 cCAoQ2FuZGlkYXRlUGFuZWwqIF9zZW5kZXIsIGdwb2ludGVyIHNlbGYpIHsKKysJX19sYW1iZGEy M18gKHNlbGYsIF9zZW5kZXIpOworK30KKysKKysKKytzdGF0aWMgdm9pZCBfX2xhbWJkYTI0XyAo UGFuZWwqIHNlbGYsIENhbmRpZGF0ZVBhbmVsKiB3KSB7CisrCWdfcmV0dXJuX2lmX2ZhaWwgKHcg IT0gTlVMTCk7CisrCWlidXNfcGFuZWxfc2VydmljZV9wYWdlX2Rvd24gKChJQnVzUGFuZWxTZXJ2 aWNlKikgc2VsZik7CisrfQorKworKworK3N0YXRpYyB2b2lkIF9fX2xhbWJkYTI0X19jYW5kaWRh dGVfcGFuZWxfcGFnZV9kb3duIChDYW5kaWRhdGVQYW5lbCogX3NlbmRlciwgZ3BvaW50ZXIgc2Vs ZikgeworKwlfX2xhbWJkYTI0XyAoc2VsZiwgX3NlbmRlcik7CisrfQorKworKworK3N0YXRpYyB2 b2lkIF9fbGFtYmRhMjVfIChQYW5lbCogc2VsZiwgY29uc3QgZ2NoYXIqIGssIGdpbnQgcykgewor Kwljb25zdCBnY2hhciogX3RtcDBfOworKwlnaW50IF90bXAxXzsKKysJZ19yZXR1cm5faWZfZmFp bCAoayAhPSBOVUxMKTsKKysJX3RtcDBfID0gazsKKysJX3RtcDFfID0gczsKKysJaWJ1c19wYW5l bF9zZXJ2aWNlX3Byb3BlcnR5X2FjdGl2YXRlICgoSUJ1c1BhbmVsU2VydmljZSopIHNlbGYsIF90 bXAwXywgKGd1aW50KSBfdG1wMV8pOworK30KKysKKysKKytzdGF0aWMgdm9pZCBfX19sYW1iZGEy NV9fcHJvcGVydHlfbWFuYWdlcl9wcm9wZXJ0eV9hY3RpdmF0ZSAoUHJvcGVydHlNYW5hZ2VyKiBf c2VuZGVyLCBjb25zdCBnY2hhcioga2V5LCBnaW50IHN0YXRlLCBncG9pbnRlciBzZWxmKSB7Cisr CV9fbGFtYmRhMjVfIChzZWxmLCBrZXksIHN0YXRlKTsKKyt9CisrCisrCisrUGFuZWwqIHBhbmVs X2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5cGUsIElCdXNCdXMqIGJ1cykgeworKwlQYW5lbCAq IHNlbGYgPSBOVUxMOworKwlJQnVzQnVzKiBfdG1wMF87CisrCWdib29sZWFuIF90bXAxXyA9IEZB TFNFOworKwlJQnVzQnVzKiBfdG1wMl87CisrCUdEQnVzQ29ubmVjdGlvbiogX3RtcDNfID0gTlVM TDsKKysJSUJ1c0J1cyogX3RtcDRfOworKwlJQnVzQnVzKiBfdG1wNV87CisrCUd0a1N0YXR1c0lj b24qIF90bXA2XzsKKysJR3RrU3RhdHVzSWNvbiogX3RtcDdfOworKwlHdGtTdGF0dXNJY29uKiBf dG1wOF87CisrCUd0a1N0YXR1c0ljb24qIF90bXA5XzsKKysJR3RrU3RhdHVzSWNvbiogX3RtcDEw XzsKKysJR3RrU3RhdHVzSWNvbiogX3RtcDExXzsKKysJQ2FuZGlkYXRlUGFuZWwqIF90bXAxMl87 CisrCUNhbmRpZGF0ZVBhbmVsKiBfdG1wMTNfOworKwlDYW5kaWRhdGVQYW5lbCogX3RtcDE0XzsK KysJQ2FuZGlkYXRlUGFuZWwqIF90bXAxNV87CisrCVN3aXRjaGVyKiBfdG1wMTZfOworKwlTd2l0 Y2hlciogX3RtcDE3XzsKKysJUHJvcGVydHlNYW5hZ2VyKiBfdG1wMThfOworKwlQcm9wZXJ0eU1h bmFnZXIqIF90bXAxOV87CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChidXMgIT0gTlVMTCwgTlVM TCk7CisrCV90bXAwXyA9IGJ1czsKKysJX3RtcDFfID0gaWJ1c19idXNfaXNfY29ubmVjdGVkIChf dG1wMF8pOworKwlnX2Fzc2VydCAoX3RtcDFfKTsKKysJX3RtcDJfID0gYnVzOworKwlfdG1wM18g PSBpYnVzX2J1c19nZXRfY29ubmVjdGlvbiAoX3RtcDJfKTsKKysJc2VsZiA9IChQYW5lbCopIGdf b2JqZWN0X25ldyAob2JqZWN0X3R5cGUsICJjb25uZWN0aW9uIiwgX3RtcDNfLCAib2JqZWN0LXBh dGgiLCAiL29yZy9mcmVlZGVza3RvcC9JQnVzL1BhbmVsIiwgTlVMTCk7CisrCV90bXA0XyA9IGJ1 czsKKysJX3RtcDVfID0gX2dfb2JqZWN0X3JlZjAgKF90bXA0Xyk7CisrCV9nX29iamVjdF91bnJl ZjAgKHNlbGYtPnByaXYtPm1fYnVzKTsKKysJc2VsZi0+cHJpdi0+bV9idXMgPSBfdG1wNV87Cisr CV90bXA2XyA9IGd0a19zdGF0dXNfaWNvbl9uZXcgKCk7CisrCV9nX29iamVjdF91bnJlZjAgKHNl bGYtPnByaXYtPm1fc3RhdHVzX2ljb24pOworKwlzZWxmLT5wcml2LT5tX3N0YXR1c19pY29uID0g X3RtcDZfOworKwlfdG1wN18gPSBzZWxmLT5wcml2LT5tX3N0YXR1c19pY29uOworKwlndGtfc3Rh dHVzX2ljb25fc2V0X25hbWUgKF90bXA3XywgImlidXMtdWktZ3RrIik7CisrCV90bXA4XyA9IHNl bGYtPnByaXYtPm1fc3RhdHVzX2ljb247CisrCWd0a19zdGF0dXNfaWNvbl9zZXRfdGl0bGUgKF90 bXA4XywgIklCdXMgUGFuZWwiKTsKKysJX3RtcDlfID0gc2VsZi0+cHJpdi0+bV9zdGF0dXNfaWNv bjsKKysJZ19zaWduYWxfY29ubmVjdF9vYmplY3QgKF90bXA5XywgInBvcHVwLW1lbnUiLCAoR0Nh bGxiYWNrKSBfcGFuZWxfc3RhdHVzX2ljb25fcG9wdXBfbWVudV9jYl9ndGtfc3RhdHVzX2ljb25f cG9wdXBfbWVudSwgc2VsZiwgMCk7CisrCV90bXAxMF8gPSBzZWxmLT5wcml2LT5tX3N0YXR1c19p Y29uOworKwlnX3NpZ25hbF9jb25uZWN0X29iamVjdCAoX3RtcDEwXywgImFjdGl2YXRlIiwgKEdD YWxsYmFjaykgX3BhbmVsX3N0YXR1c19pY29uX2FjdGl2YXRlX2NiX2d0a19zdGF0dXNfaWNvbl9h Y3RpdmF0ZSwgc2VsZiwgMCk7CisrCV90bXAxMV8gPSBzZWxmLT5wcml2LT5tX3N0YXR1c19pY29u OworKwlndGtfc3RhdHVzX2ljb25fc2V0X2Zyb21faWNvbl9uYW1lIChfdG1wMTFfLCAiaWJ1cy1r ZXlib2FyZCIpOworKwlfdG1wMTJfID0gY2FuZGlkYXRlX3BhbmVsX25ldyAoKTsKKysJX3RtcDEz XyA9IGdfb2JqZWN0X3JlZl9zaW5rIChfdG1wMTJfKTsKKysJX2dfb2JqZWN0X3VucmVmMCAoc2Vs Zi0+cHJpdi0+bV9jYW5kaWRhdGVfcGFuZWwpOworKwlzZWxmLT5wcml2LT5tX2NhbmRpZGF0ZV9w YW5lbCA9IF90bXAxM187CisrCV90bXAxNF8gPSBzZWxmLT5wcml2LT5tX2NhbmRpZGF0ZV9wYW5l bDsKKysJZ19zaWduYWxfY29ubmVjdF9vYmplY3QgKF90bXAxNF8sICJwYWdlLXVwIiwgKEdDYWxs YmFjaykgX19fbGFtYmRhMjNfX2NhbmRpZGF0ZV9wYW5lbF9wYWdlX3VwLCBzZWxmLCAwKTsKKysJ X3RtcDE1XyA9IHNlbGYtPnByaXYtPm1fY2FuZGlkYXRlX3BhbmVsOworKwlnX3NpZ25hbF9jb25u ZWN0X29iamVjdCAoX3RtcDE1XywgInBhZ2UtZG93biIsIChHQ2FsbGJhY2spIF9fX2xhbWJkYTI0 X19jYW5kaWRhdGVfcGFuZWxfcGFnZV9kb3duLCBzZWxmLCAwKTsKKysJX3RtcDE2XyA9IHN3aXRj aGVyX25ldyAoKTsKKysJX3RtcDE3XyA9IGdfb2JqZWN0X3JlZl9zaW5rIChfdG1wMTZfKTsKKysJ X2dfb2JqZWN0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9zd2l0Y2hlcik7CisrCXNlbGYtPnByaXYt Pm1fc3dpdGNoZXIgPSBfdG1wMTdfOworKwlfdG1wMThfID0gcHJvcGVydHlfbWFuYWdlcl9uZXcg KCk7CisrCV9wcm9wZXJ0eV9tYW5hZ2VyX3VucmVmMCAoc2VsZi0+cHJpdi0+bV9wcm9wZXJ0eV9t YW5hZ2VyKTsKKysJc2VsZi0+cHJpdi0+bV9wcm9wZXJ0eV9tYW5hZ2VyID0gX3RtcDE4XzsKKysJ X3RtcDE5XyA9IHNlbGYtPnByaXYtPm1fcHJvcGVydHlfbWFuYWdlcjsKKysJZ19zaWduYWxfY29u bmVjdF9vYmplY3QgKF90bXAxOV8sICJwcm9wZXJ0eS1hY3RpdmF0ZSIsIChHQ2FsbGJhY2spIF9f X2xhbWJkYTI1X19wcm9wZXJ0eV9tYW5hZ2VyX3Byb3BlcnR5X2FjdGl2YXRlLCBzZWxmLCAwKTsK KysJZ19zaWduYWxfZW1pdF9ieV9uYW1lICgoSUJ1c1BhbmVsU2VydmljZSopIHNlbGYsICJzdGF0 ZS1jaGFuZ2VkIik7CisrCXJldHVybiBzZWxmOworK30KKysKKysKKytQYW5lbCogcGFuZWxfbmV3 IChJQnVzQnVzKiBidXMpIHsKKysJcmV0dXJuIHBhbmVsX2NvbnN0cnVjdCAoVFlQRV9QQU5FTCwg YnVzKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkOSAoZ2NoYXIqKiog YXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgeworKwlpZiAoKCps ZW5ndGgpID09ICgqc2l6ZSkpIHsKKysJCSpzaXplID0gKCpzaXplKSA/ICgyICogKCpzaXplKSkg OiA0OworKwkJKmFycmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXksICgqc2l6ZSkgKyAxKTsK KysJfQorKwkoKmFycmF5KVsoKmxlbmd0aCkrK10gPSB2YWx1ZTsKKysJKCphcnJheSlbKmxlbmd0 aF0gPSBOVUxMOworK30KKysKKysKKytzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMCAoZ2No YXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgeworKwlp ZiAoKCpsZW5ndGgpID09ICgqc2l6ZSkpIHsKKysJCSpzaXplID0gKCpzaXplKSA/ICgyICogKCpz aXplKSkgOiA0OworKwkJKmFycmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXksICgqc2l6ZSkg KyAxKTsKKysJfQorKwkoKmFycmF5KVsoKmxlbmd0aCkrK10gPSB2YWx1ZTsKKysJKCphcnJheSlb Kmxlbmd0aF0gPSBOVUxMOworK30KKysKKysKKytzdGF0aWMgZ2NoYXIqIHN0cmluZ19zbGljZSAo Y29uc3QgZ2NoYXIqIHNlbGYsIGdsb25nIHN0YXJ0LCBnbG9uZyBlbmQpIHsKKysJZ2NoYXIqIHJl c3VsdCA9IE5VTEw7CisrCWdpbnQgX3RtcDBfOworKwlnaW50IF90bXAxXzsKKysJZ2xvbmcgc3Ry aW5nX2xlbmd0aDsKKysJZ2xvbmcgX3RtcDJfOworKwlnbG9uZyBfdG1wNV87CisrCWdib29sZWFu IF90bXA4XyA9IEZBTFNFOworKwlnbG9uZyBfdG1wOV87CisrCWdib29sZWFuIF90bXAxMl87Cisr CWdib29sZWFuIF90bXAxM18gPSBGQUxTRTsKKysJZ2xvbmcgX3RtcDE0XzsKKysJZ2Jvb2xlYW4g X3RtcDE3XzsKKysJZ2xvbmcgX3RtcDE4XzsKKysJZ2xvbmcgX3RtcDE5XzsKKysJZ2xvbmcgX3Rt cDIwXzsKKysJZ2xvbmcgX3RtcDIxXzsKKysJZ2xvbmcgX3RtcDIyXzsKKysJZ2NoYXIqIF90bXAy M18gPSBOVUxMOworKwlnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZiAhPSBOVUxMLCBOVUxMKTsK KysJX3RtcDBfID0gc3RybGVuIChzZWxmKTsKKysJX3RtcDFfID0gX3RtcDBfOworKwlzdHJpbmdf bGVuZ3RoID0gKGdsb25nKSBfdG1wMV87CisrCV90bXAyXyA9IHN0YXJ0OworKwlpZiAoX3RtcDJf IDwgKChnbG9uZykgMCkpIHsKKysJCWdsb25nIF90bXAzXzsKKysJCWdsb25nIF90bXA0XzsKKysJ CV90bXAzXyA9IHN0cmluZ19sZW5ndGg7CisrCQlfdG1wNF8gPSBzdGFydDsKKysJCXN0YXJ0ID0g X3RtcDNfICsgX3RtcDRfOworKwl9CisrCV90bXA1XyA9IGVuZDsKKysJaWYgKF90bXA1XyA8ICgo Z2xvbmcpIDApKSB7CisrCQlnbG9uZyBfdG1wNl87CisrCQlnbG9uZyBfdG1wN187CisrCQlfdG1w Nl8gPSBzdHJpbmdfbGVuZ3RoOworKwkJX3RtcDdfID0gZW5kOworKwkJZW5kID0gX3RtcDZfICsg X3RtcDdfOworKwl9CisrCV90bXA5XyA9IHN0YXJ0OworKwlpZiAoX3RtcDlfID49ICgoZ2xvbmcp IDApKSB7CisrCQlnbG9uZyBfdG1wMTBfOworKwkJZ2xvbmcgX3RtcDExXzsKKysJCV90bXAxMF8g PSBzdGFydDsKKysJCV90bXAxMV8gPSBzdHJpbmdfbGVuZ3RoOworKwkJX3RtcDhfID0gX3RtcDEw XyA8PSBfdG1wMTFfOworKwl9IGVsc2UgeworKwkJX3RtcDhfID0gRkFMU0U7CisrCX0KKysJX3Rt cDEyXyA9IF90bXA4XzsKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKF90bXAxMl8sIE5VTEwpOwor KwlfdG1wMTRfID0gZW5kOworKwlpZiAoX3RtcDE0XyA+PSAoKGdsb25nKSAwKSkgeworKwkJZ2xv bmcgX3RtcDE1XzsKKysJCWdsb25nIF90bXAxNl87CisrCQlfdG1wMTVfID0gZW5kOworKwkJX3Rt cDE2XyA9IHN0cmluZ19sZW5ndGg7CisrCQlfdG1wMTNfID0gX3RtcDE1XyA8PSBfdG1wMTZfOwor Kwl9IGVsc2UgeworKwkJX3RtcDEzXyA9IEZBTFNFOworKwl9CisrCV90bXAxN18gPSBfdG1wMTNf OworKwlnX3JldHVybl92YWxfaWZfZmFpbCAoX3RtcDE3XywgTlVMTCk7CisrCV90bXAxOF8gPSBz dGFydDsKKysJX3RtcDE5XyA9IGVuZDsKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKF90bXAxOF8g PD0gX3RtcDE5XywgTlVMTCk7CisrCV90bXAyMF8gPSBzdGFydDsKKysJX3RtcDIxXyA9IGVuZDsK KysJX3RtcDIyXyA9IHN0YXJ0OworKwlfdG1wMjNfID0gZ19zdHJuZHVwICgoKGdjaGFyKikgc2Vs ZikgKyBfdG1wMjBfLCAoZ3NpemUpIChfdG1wMjFfIC0gX3RtcDIyXykpOworKwlyZXN1bHQgPSBf dG1wMjNfOworKwlyZXR1cm4gcmVzdWx0OworK30KKysKKysKKytzdGF0aWMgdm9pZCBfdmFsYV9h cnJheV9hZGQxMSAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFy KiB2YWx1ZSkgeworKwlpZiAoKCpsZW5ndGgpID09ICgqc2l6ZSkpIHsKKysJCSpzaXplID0gKCpz aXplKSA/ICgyICogKCpzaXplKSkgOiA0OworKwkJKmFycmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAq YXJyYXksICgqc2l6ZSkgKyAxKTsKKysJfQorKwkoKmFycmF5KVsoKmxlbmd0aCkrK10gPSB2YWx1 ZTsKKysJKCphcnJheSlbKmxlbmd0aF0gPSBOVUxMOworK30KKysKKysKKytzdGF0aWMgdm9pZCBf dmFsYV9hcnJheV9hZGQxMiAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUs IGdjaGFyKiB2YWx1ZSkgeworKwlpZiAoKCpsZW5ndGgpID09ICgqc2l6ZSkpIHsKKysJCSpzaXpl ID0gKCpzaXplKSA/ICgyICogKCpzaXplKSkgOiA0OworKwkJKmFycmF5ID0gZ19yZW5ldyAoZ2No YXIqLCAqYXJyYXksICgqc2l6ZSkgKyAxKTsKKysJfQorKwkoKmFycmF5KVsoKmxlbmd0aCkrK10g PSB2YWx1ZTsKKysJKCphcnJheSlbKmxlbmd0aF0gPSBOVUxMOworK30KKysKKysKKytzdGF0aWMg dm9pZCBfX19fbGFtYmRhMjZfIChQYW5lbCogc2VsZiwgR2RrRXZlbnQqIGUpIHsKKysJR2RrRXZl bnQqIF90bXAwXzsKKysJZ19yZXR1cm5faWZfZmFpbCAoZSAhPSBOVUxMKTsKKysJX3RtcDBfID0g ZTsKKysJcGFuZWxfaGFuZGxlX2VuZ2luZV9zd2l0Y2ggKHNlbGYsIF90bXAwXywgRkFMU0UpOwor K30KKysKKysKKytzdGF0aWMgdm9pZCBfX19fX2xhbWJkYTI2X19rZXliaW5kaW5nX21hbmFnZXJf a2V5YmluZGluZ19oYW5kbGVyX2Z1bmMgKEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgc2VsZikg eworKwlfX19fbGFtYmRhMjZfIChzZWxmLCBldmVudCk7CisrfQorKworKworK3N0YXRpYyB2b2lk IF9fX19fbGFtYmRhMjdfIChQYW5lbCogc2VsZiwgR2RrRXZlbnQqIGUpIHsKKysJR2RrRXZlbnQq IF90bXAwXzsKKysJZ19yZXR1cm5faWZfZmFpbCAoZSAhPSBOVUxMKTsKKysJX3RtcDBfID0gZTsK KysJcGFuZWxfaGFuZGxlX2VuZ2luZV9zd2l0Y2ggKHNlbGYsIF90bXAwXywgVFJVRSk7CisrfQor KworKworK3N0YXRpYyB2b2lkIF9fX19fX2xhbWJkYTI3X19rZXliaW5kaW5nX21hbmFnZXJfa2V5 YmluZGluZ19oYW5kbGVyX2Z1bmMgKEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgc2VsZikgewor KwlfX19fX2xhbWJkYTI3XyAoc2VsZiwgZXZlbnQpOworK30KKysKKysKKytzdGF0aWMgdm9pZCBw YW5lbF9zZXRfa2V5YmluZGluZyAoUGFuZWwqIHNlbGYpIHsKKysJY29uc3QgZ2NoYXIqIF90bXAw XyA9IE5VTEw7CisrCWdjaGFyKiBfdG1wMV87CisrCWdjaGFyKiBsb2NhbGU7CisrCWNvbnN0IGdj aGFyKiBfdG1wMl87CisrCWdjaGFyKiogX3RtcDRfOworKwlnaW50IF90bXA0X19sZW5ndGgxOwor KwlnY2hhciogX3RtcDVfOworKwlJQnVzQ29uZmlnKiBfdG1wNl87CisrCWdib29sZWFuIF90bXAy M18gPSBGQUxTRTsKKysJZ2NoYXIqKiBfdG1wMjRfOworKwlnaW50IF90bXAyNF9fbGVuZ3RoMTsK KysJZ2Jvb2xlYW4gX3RtcDI3XzsKKysJS2V5YmluZGluZ01hbmFnZXIqIF90bXAzNl8gPSBOVUxM OworKwlLZXliaW5kaW5nTWFuYWdlcioga2V5YmluZGluZ19tYW5hZ2VyOworKwlnY2hhcioqIF90 bXAzN187CisrCWdpbnQgX3RtcDM3X19sZW5ndGgxOworKwlnX3JldHVybl9pZl9mYWlsIChzZWxm ICE9IE5VTEwpOworKwlfdG1wMF8gPSBzZXRsb2NhbGUgKExDX0FMTCwgTlVMTCk7CisrCV90bXAx XyA9IGdfc3RyZHVwIChfdG1wMF8pOworKwlsb2NhbGUgPSBfdG1wMV87CisrCV90bXAyXyA9IGxv Y2FsZTsKKysJaWYgKF90bXAyXyA9PSBOVUxMKSB7CisrCQlnY2hhciogX3RtcDNfOworKwkJX3Rt cDNfID0gZ19zdHJkdXAgKCJDIik7CisrCQlfZ19mcmVlMCAobG9jYWxlKTsKKysJCWxvY2FsZSA9 IF90bXAzXzsKKysJfQorKwlfdG1wNF8gPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9U S0VZUzsKKysJX3RtcDRfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9U S0VZU19sZW5ndGgxOworKwlfdG1wNV8gPSBnX3N0cmR1cCAoUEFORUxfQUNDRUxFUkFUT1JfU1dJ VENIX0lNRV9GT1JFV0FSRCk7CisrCV92YWxhX2FycmF5X2FkZDkgKCZzZWxmLT5wcml2LT5BQ0NF TEVSQVRPUl9JTUVfSE9US0VZUywgJnNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlT X2xlbmd0aDEsICZzZWxmLT5wcml2LT5fQUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfc2l6ZV8sIF90 bXA1Xyk7CisrCV90bXA2XyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwlpZiAoX3RtcDZfICE9 IE5VTEwpIHsKKysJCUlCdXNDb25maWcqIF90bXA3XzsKKysJCUdWYXJpYW50KiBfdG1wOF8gPSBO VUxMOworKwkJR1ZhcmlhbnQqIHZhcmlhbnQ7CisrCQlHVmFyaWFudCogX3RtcDlfOworKwkJX3Rt cDdfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisrCQlfdG1wOF8gPSBpYnVzX2NvbmZpZ19nZXRf dmFsdWUgKF90bXA3XywgImdlbmVyYWwvaG90a2V5IiwgInRyaWdnZXJfYWNjZWwiKTsKKysJCXZh cmlhbnQgPSBfdG1wOF87CisrCQlfdG1wOV8gPSB2YXJpYW50OworKwkJaWYgKF90bXA5XyAhPSBO VUxMKSB7CisrCQkJZ2NoYXIqKiBfdG1wMTBfID0gTlVMTDsKKysJCQlfdG1wMTBfID0gZ19uZXcw IChnY2hhciosIDAgKyAxKTsKKysJCQlzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZ UyA9IChfdmFsYV9hcnJheV9mcmVlIChzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZ Uywgc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMSwgKEdEZXN0cm95 Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKKysJCQlzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVf SE9US0VZUyA9IF90bXAxMF87CisrCQkJc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtF WVNfbGVuZ3RoMSA9IDA7CisrCQkJc2VsZi0+cHJpdi0+X0FDQ0VMRVJBVE9SX0lNRV9IT1RLRVlT X3NpemVfID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMTsKKysJ CQl7CisrCQkJCWdpbnQgaTsKKysJCQkJaSA9IDA7CisrCQkJCXsKKysJCQkJCWdib29sZWFuIF90 bXAxMV87CisrCQkJCQlfdG1wMTFfID0gVFJVRTsKKysJCQkJCXdoaWxlIChUUlVFKSB7CisrCQkJ CQkJZ2Jvb2xlYW4gX3RtcDEyXzsKKysJCQkJCQlnaW50IF90bXAxNF87CisrCQkJCQkJR1Zhcmlh bnQqIF90bXAxNV87CisrCQkJCQkJZ3NpemUgX3RtcDE2XyA9IDBVTDsKKysJCQkJCQlnY2hhcioq IF90bXAxN187CisrCQkJCQkJZ2ludCBfdG1wMTdfX2xlbmd0aDE7CisrCQkJCQkJR1ZhcmlhbnQq IF90bXAxOF87CisrCQkJCQkJZ2ludCBfdG1wMTlfOworKwkJCQkJCUdWYXJpYW50KiBfdG1wMjBf ID0gTlVMTDsKKysJCQkJCQlHVmFyaWFudCogX3RtcDIxXzsKKysJCQkJCQlnY2hhciogX3RtcDIy XyA9IE5VTEw7CisrCQkJCQkJX3RtcDEyXyA9IF90bXAxMV87CisrCQkJCQkJaWYgKCFfdG1wMTJf KSB7CisrCQkJCQkJCWdpbnQgX3RtcDEzXzsKKysJCQkJCQkJX3RtcDEzXyA9IGk7CisrCQkJCQkJ CWkgPSBfdG1wMTNfICsgMTsKKysJCQkJCQl9CisrCQkJCQkJX3RtcDExXyA9IEZBTFNFOworKwkJ CQkJCV90bXAxNF8gPSBpOworKwkJCQkJCV90bXAxNV8gPSB2YXJpYW50OworKwkJCQkJCV90bXAx Nl8gPSBnX3ZhcmlhbnRfbl9jaGlsZHJlbiAoX3RtcDE1Xyk7CisrCQkJCQkJaWYgKCEoKChnc2l6 ZSkgX3RtcDE0XykgPCBfdG1wMTZfKSkgeworKwkJCQkJCQlicmVhazsKKysJCQkJCQl9CisrCQkJ CQkJX3RtcDE3XyA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTOworKwkJCQkJ CV90bXAxN19fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xl bmd0aDE7CisrCQkJCQkJX3RtcDE4XyA9IHZhcmlhbnQ7CisrCQkJCQkJX3RtcDE5XyA9IGk7Cisr CQkJCQkJX3RtcDIwXyA9IGdfdmFyaWFudF9nZXRfY2hpbGRfdmFsdWUgKF90bXAxOF8sIChnc2l6 ZSkgX3RtcDE5Xyk7CisrCQkJCQkJX3RtcDIxXyA9IF90bXAyMF87CisrCQkJCQkJX3RtcDIyXyA9 IGdfdmFyaWFudF9kdXBfc3RyaW5nIChfdG1wMjFfLCBOVUxMKTsKKysJCQkJCQlfdmFsYV9hcnJh eV9hZGQxMCAoJnNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTLCAmc2VsZi0+cHJp di0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMSwgJnNlbGYtPnByaXYtPl9BQ0NFTEVS QVRPUl9JTUVfSE9US0VZU19zaXplXywgX3RtcDIyXyk7CisrCQkJCQkJX2dfdmFyaWFudF91bnJl ZjAgKF90bXAyMV8pOworKwkJCQkJfQorKwkJCQl9CisrCQkJfQorKwkJfQorKwkJX2dfdmFyaWFu dF91bnJlZjAgKHZhcmlhbnQpOworKwl9CisrCV90bXAyNF8gPSBzZWxmLT5wcml2LT5BQ0NFTEVS QVRPUl9JTUVfSE9US0VZUzsKKysJX3RtcDI0X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+QUNDRUxF UkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMTsKKysJaWYgKF90bXAyNF9fbGVuZ3RoMSA9PSAxKSB7 CisrCQlnY2hhcioqIF90bXAyNV87CisrCQlnaW50IF90bXAyNV9fbGVuZ3RoMTsKKysJCWNvbnN0 IGdjaGFyKiBfdG1wMjZfOworKwkJX3RtcDI1XyA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lN RV9IT1RLRVlTOworKwkJX3RtcDI1X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1Jf SU1FX0hPVEtFWVNfbGVuZ3RoMTsKKysJCV90bXAyNl8gPSBfdG1wMjVfWzBdOworKwkJX3RtcDIz XyA9IGdfc3RyY21wMCAoX3RtcDI2XywgUEFORUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9GT1JF V0FSRCkgPT0gMDsKKysJfSBlbHNlIHsKKysJCV90bXAyM18gPSBGQUxTRTsKKysJfQorKwlfdG1w MjdfID0gX3RtcDIzXzsKKysJaWYgKF90bXAyN18pIHsKKysJCWNvbnN0IGdjaGFyKiBfdG1wMjhf OworKwkJZ2NoYXIqIF90bXAyOV8gPSBOVUxMOworKwkJZ2NoYXIqIF90bXAzMF87CisrCQlnYm9v bGVhbiBfdG1wMzFfOworKwkJX3RtcDI4XyA9IGxvY2FsZTsKKysJCV90bXAyOV8gPSBzdHJpbmdf c2xpY2UgKF90bXAyOF8sIChnbG9uZykgMCwgKGdsb25nKSAyKTsKKysJCV90bXAzMF8gPSBfdG1w MjlfOworKwkJX3RtcDMxXyA9IGdfc3RyY21wMCAoX3RtcDMwXywgImtvIikgPT0gMDsKKysJCV9n X2ZyZWUwIChfdG1wMzBfKTsKKysJCWlmIChfdG1wMzFfKSB7CisrCQkJZ2NoYXIqKiBfdG1wMzJf OworKwkJCWdpbnQgX3RtcDMyX19sZW5ndGgxOworKwkJCWdjaGFyKiBfdG1wMzNfOworKwkJCWdj aGFyKiogX3RtcDM0XzsKKysJCQlnaW50IF90bXAzNF9fbGVuZ3RoMTsKKysJCQlnY2hhciogX3Rt cDM1XzsKKysJCQlfdG1wMzJfID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVM7 CisrCQkJX3RtcDMyX19sZW5ndGgxID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtF WVNfbGVuZ3RoMTsKKysJCQlfdG1wMzNfID0gZ19zdHJkdXAgKCJIYW5ndWwiKTsKKysJCQlfdmFs YV9hcnJheV9hZGQxMSAoJnNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTLCAmc2Vs Zi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMSwgJnNlbGYtPnByaXYtPl9B Q0NFTEVSQVRPUl9JTUVfSE9US0VZU19zaXplXywgX3RtcDMzXyk7CisrCQkJX3RtcDM0XyA9IHNl bGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTOworKwkJCV90bXAzNF9fbGVuZ3RoMSA9 IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDE7CisrCQkJX3RtcDM1 XyA9IGdfc3RyZHVwICgiQWx0X1IiKTsKKysJCQlfdmFsYV9hcnJheV9hZGQxMiAoJnNlbGYtPnBy aXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTLCAmc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1F X0hPVEtFWVNfbGVuZ3RoMSwgJnNlbGYtPnByaXYtPl9BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19z aXplXywgX3RtcDM1Xyk7CisrCQl9CisrCX0KKysJX3RtcDM2XyA9IGtleWJpbmRpbmdfbWFuYWdl cl9nZXRfaW5zdGFuY2UgKCk7CisrCWtleWJpbmRpbmdfbWFuYWdlciA9IF90bXAzNl87CisrCV90 bXAzN18gPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZUzsKKysJX3RtcDM3X19s ZW5ndGgxID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMTsKKysJ eworKwkJZ2NoYXIqKiBrZXliaW5kaW5nX2NvbGxlY3Rpb24gPSBOVUxMOworKwkJZ2ludCBrZXli aW5kaW5nX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IDA7CisrCQlnaW50IF9rZXliaW5kaW5nX2NvbGxl Y3Rpb25fc2l6ZV8gPSAwOworKwkJZ2ludCBrZXliaW5kaW5nX2l0ID0gMDsKKysJCWtleWJpbmRp bmdfY29sbGVjdGlvbiA9IF90bXAzN187CisrCQlrZXliaW5kaW5nX2NvbGxlY3Rpb25fbGVuZ3Ro MSA9IF90bXAzN19fbGVuZ3RoMTsKKysJCWZvciAoa2V5YmluZGluZ19pdCA9IDA7IGtleWJpbmRp bmdfaXQgPCBfdG1wMzdfX2xlbmd0aDE7IGtleWJpbmRpbmdfaXQgPSBrZXliaW5kaW5nX2l0ICsg MSkgeworKwkJCWdjaGFyKiBfdG1wMzhfOworKwkJCWdjaGFyKiBrZXliaW5kaW5nID0gTlVMTDsK KysJCQlfdG1wMzhfID0gZ19zdHJkdXAgKGtleWJpbmRpbmdfY29sbGVjdGlvbltrZXliaW5kaW5n X2l0XSk7CisrCQkJa2V5YmluZGluZyA9IF90bXAzOF87CisrCQkJeworKwkJCQlLZXliaW5kaW5n TWFuYWdlciogX3RtcDM5XzsKKysJCQkJY29uc3QgZ2NoYXIqIF90bXA0MF87CisrCQkJCWNvbnN0 IGdjaGFyKiBfdG1wNDFfOworKwkJCQlfdG1wMzlfID0ga2V5YmluZGluZ19tYW5hZ2VyOworKwkJ CQlfdG1wNDBfID0ga2V5YmluZGluZzsKKysJCQkJa2V5YmluZGluZ19tYW5hZ2VyX2JpbmQgKF90 bXAzOV8sIF90bXA0MF8sIF9fX19fbGFtYmRhMjZfX2tleWJpbmRpbmdfbWFuYWdlcl9rZXliaW5k aW5nX2hhbmRsZXJfZnVuYywgc2VsZik7CisrCQkJCV90bXA0MV8gPSBrZXliaW5kaW5nOworKwkJ CQlpZiAoZ19zdHJjbXAwIChfdG1wNDFfLCBQQU5FTF9BQ0NFTEVSQVRPUl9TV0lUQ0hfSU1FX0ZP UkVXQVJEKSA9PSAwKSB7CisrCQkJCQlLZXliaW5kaW5nTWFuYWdlciogX3RtcDQyXzsKKysJCQkJ CV90bXA0Ml8gPSBrZXliaW5kaW5nX21hbmFnZXI7CisrCQkJCQlrZXliaW5kaW5nX21hbmFnZXJf YmluZCAoX3RtcDQyXywgUEFORUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9CQUNLV0FSRCwgX19f X19fbGFtYmRhMjdfX2tleWJpbmRpbmdfbWFuYWdlcl9rZXliaW5kaW5nX2hhbmRsZXJfZnVuYywg c2VsZik7CisrCQkJCX0KKysJCQkJX2dfZnJlZTAgKGtleWJpbmRpbmcpOworKwkJCX0KKysJCX0K KysJfQorKwlfZ19vYmplY3RfdW5yZWYwIChrZXliaW5kaW5nX21hbmFnZXIpOworKwlfZ19mcmVl MCAobG9jYWxlKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3BhbmVsX2NvbmZpZ192YWx1ZV9j aGFuZ2VkX2NiX2lidXNfY29uZmlnX3ZhbHVlX2NoYW5nZWQgKElCdXNDb25maWcqIF9zZW5kZXIs IGNvbnN0IGdjaGFyKiBzZWN0aW9uLCBjb25zdCBnY2hhciogbmFtZSwgR1ZhcmlhbnQqIHZhbHVl LCBncG9pbnRlciBzZWxmKSB7CisrCXBhbmVsX2NvbmZpZ192YWx1ZV9jaGFuZ2VkX2NiIChzZWxm LCBfc2VuZGVyLCBzZWN0aW9uLCBuYW1lLCB2YWx1ZSk7CisrfQorKworKworK3ZvaWQgcGFuZWxf c2V0X2NvbmZpZyAoUGFuZWwqIHNlbGYsIElCdXNDb25maWcqIGNvbmZpZykgeworKwlJQnVzQ29u ZmlnKiBfdG1wMF87CisrCUlCdXNDb25maWcqIF90bXAzXzsKKysJSUJ1c0NvbmZpZyogX3RtcDRf OworKwlJQnVzQ29uZmlnKiBfdG1wNV87CisrCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVM TCk7CisrCWdfcmV0dXJuX2lmX2ZhaWwgKGNvbmZpZyAhPSBOVUxMKTsKKysJX3RtcDBfID0gc2Vs Zi0+cHJpdi0+bV9jb25maWc7CisrCWlmIChfdG1wMF8gIT0gTlVMTCkgeworKwkJSUJ1c0NvbmZp ZyogX3RtcDFfOworKwkJZ3VpbnQgX3RtcDJfID0gMFU7CisrCQlfdG1wMV8gPSBzZWxmLT5wcml2 LT5tX2NvbmZpZzsKKysJCWdfc2lnbmFsX3BhcnNlX25hbWUgKCJ2YWx1ZS1jaGFuZ2VkIiwgaWJ1 c19jb25maWdfZ2V0X3R5cGUgKCksICZfdG1wMl8sIE5VTEwsIEZBTFNFKTsKKysJCWdfc2lnbmFs X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCAoX3RtcDFfLCBHX1NJR05BTF9NQVRDSF9JRCB8 IEdfU0lHTkFMX01BVENIX0ZVTkMgfCBHX1NJR05BTF9NQVRDSF9EQVRBLCBfdG1wMl8sIDAsIE5V TEwsIChHQ2FsbGJhY2spIF9wYW5lbF9jb25maWdfdmFsdWVfY2hhbmdlZF9jYl9pYnVzX2NvbmZp Z192YWx1ZV9jaGFuZ2VkLCBzZWxmKTsKKysJCV9nX29iamVjdF91bnJlZjAgKHNlbGYtPnByaXYt Pm1fY29uZmlnKTsKKysJCXNlbGYtPnByaXYtPm1fY29uZmlnID0gTlVMTDsKKysJfQorKwlfdG1w M18gPSBjb25maWc7CisrCV90bXA0XyA9IF9nX29iamVjdF9yZWYwIChfdG1wM18pOworKwlfZ19v YmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX2NvbmZpZyk7CisrCXNlbGYtPnByaXYtPm1fY29u ZmlnID0gX3RtcDRfOworKwlwYW5lbF9zZXRfa2V5YmluZGluZyAoc2VsZik7CisrCV90bXA1XyA9 IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwlpZiAoX3RtcDVfICE9IE5VTEwpIHsKKysJCUlCdXND b25maWcqIF90bXA2XzsKKysJCUlCdXNDb25maWcqIF90bXA3XzsKKysJCUdWYXJpYW50KiBfdG1w OF8gPSBOVUxMOworKwkJR1ZhcmlhbnQqIF90bXA5XzsKKysJCUlCdXNDb25maWcqIF90bXAxMF87 CisrCQlHVmFyaWFudCogX3RtcDExXyA9IE5VTEw7CisrCQlHVmFyaWFudCogX3RtcDEyXzsKKysJ CV90bXA2XyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwkJZ19zaWduYWxfY29ubmVjdF9vYmpl Y3QgKF90bXA2XywgInZhbHVlLWNoYW5nZWQiLCAoR0NhbGxiYWNrKSBfcGFuZWxfY29uZmlnX3Zh bHVlX2NoYW5nZWRfY2JfaWJ1c19jb25maWdfdmFsdWVfY2hhbmdlZCwgc2VsZiwgMCk7CisrCQlw YW5lbF9pbml0X2VuZ2luZXNfb3JkZXIgKHNlbGYpOworKwkJX3RtcDdfID0gc2VsZi0+cHJpdi0+ bV9jb25maWc7CisrCQlfdG1wOF8gPSBpYnVzX2NvbmZpZ19nZXRfdmFsdWUgKF90bXA3XywgImdl bmVyYWwiLCAicHJlbG9hZF9lbmdpbmVzIik7CisrCQlfdG1wOV8gPSBfdG1wOF87CisrCQlfdG1w MTBfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisrCQlfdG1wMTFfID0gaWJ1c19jb25maWdfZ2V0 X3ZhbHVlIChfdG1wMTBfLCAiZ2VuZXJhbCIsICJlbmdpbmVzX29yZGVyIik7CisrCQlfdG1wMTJf ID0gX3RtcDExXzsKKysJCXBhbmVsX3VwZGF0ZV9lbmdpbmVzIChzZWxmLCBfdG1wOV8sIF90bXAx Ml8pOworKwkJX2dfdmFyaWFudF91bnJlZjAgKF90bXAxMl8pOworKwkJX2dfdmFyaWFudF91bnJl ZjAgKF90bXA5Xyk7CisrCX0gZWxzZSB7CisrCQlwYW5lbF91cGRhdGVfZW5naW5lcyAoc2VsZiwg TlVMTCwgTlVMTCk7CisrCX0KKyt9CisrCisrCisrc3RhdGljIHZvaWQgcGFuZWxfZ2tiZGxheW91 dF9jaGFuZ2VkX2NiIChQYW5lbCogc2VsZikgeworKwlHVGltZXIqIF90bXAwXzsKKysJZ2RvdWJs ZSBfdG1wMV8gPSAwLjA7CisrCWdkb3VibGUgZWxhcHNlZDsKKysJZ2Jvb2xlYW4gX3RtcDJfID0g RkFMU0U7CisrCWdkb3VibGUgX3RtcDNfOworKwlnYm9vbGVhbiBfdG1wNV87CisrCWdpbnQgX3Rt cDZfOworKwlHVGltZXIqIF90bXAxMF87CisrCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVM TCk7CisrCV90bXAwXyA9IHNlbGYtPnByaXYtPm1fY2hhbmdlZF9sYXlvdXRfdGltZXI7CisrCV90 bXAxXyA9IGdfdGltZXJfZWxhcHNlZCAoX3RtcDBfLCBOVUxMKTsKKysJZWxhcHNlZCA9IF90bXAx XzsKKysJX3RtcDNfID0gZWxhcHNlZDsKKysJaWYgKF90bXAzXyA8IDEuMCkgeworKwkJZ2RvdWJs ZSBfdG1wNF87CisrCQlfdG1wNF8gPSBlbGFwc2VkOworKwkJX3RtcDJfID0gX3RtcDRfID4gMC4w OworKwl9IGVsc2UgeworKwkJX3RtcDJfID0gRkFMU0U7CisrCX0KKysJX3RtcDVfID0gX3RtcDJf OworKwlpZiAoX3RtcDVfKSB7CisrCQlyZXR1cm47CisrCX0KKysJX3RtcDZfID0gc2VsZi0+cHJp di0+bV9mYWxsYmFja19sb2NrX2lkOworKwlpZiAoX3RtcDZfICE9ICgtMSkpIHsKKysJCUdrYmRM YXlvdXQqIF90bXA3XzsKKysJCWdpbnQgX3RtcDhfOworKwkJX3RtcDdfID0gc2VsZi0+cHJpdi0+ bV9na2JkbGF5b3V0OworKwkJX3RtcDhfID0gc2VsZi0+cHJpdi0+bV9mYWxsYmFja19sb2NrX2lk OworKwkJZ2tiZF9sYXlvdXRfbG9ja19ncm91cCAoX3RtcDdfLCBfdG1wOF8pOworKwkJc2VsZi0+ cHJpdi0+bV9mYWxsYmFja19sb2NrX2lkID0gLTE7CisrCX0gZWxzZSB7CisrCQlYS0JMYXlvdXQq IF90bXA5XzsKKysJCV90bXA5XyA9IHNlbGYtPnByaXYtPm1feGtibGF5b3V0OworKwkJeGtiX2xh eW91dF9yZXNldF9sYXlvdXQgKF90bXA5Xyk7CisrCX0KKysJcGFuZWxfdXBkYXRlX3hrYl9lbmdp bmVzIChzZWxmKTsKKysJX3RtcDEwXyA9IHNlbGYtPnByaXYtPm1fY2hhbmdlZF9sYXlvdXRfdGlt ZXI7CisrCWdfdGltZXJfcmVzZXQgKF90bXAxMF8pOworK30KKysKKysKKytzdGF0aWMgdm9pZCBw YW5lbF9pbml0X2drYmQgKFBhbmVsKiBzZWxmKSB7CisrCUdrYmRMYXlvdXQqIF90bXAwXzsKKysJ R2tiZExheW91dCogX3RtcDFfOworKwlHVGltZXIqIF90bXAyXzsKKysJR1RpbWVyKiBfdG1wM187 CisrCUdrYmRMYXlvdXQqIF90bXA0XzsKKysJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxM KTsKKysJX3RtcDBfID0gZ2tiZF9sYXlvdXRfbmV3ICgpOworKwlfZ2tiZF9sYXlvdXRfdW5yZWYw IChzZWxmLT5wcml2LT5tX2drYmRsYXlvdXQpOworKwlzZWxmLT5wcml2LT5tX2drYmRsYXlvdXQg PSBfdG1wMF87CisrCV90bXAxXyA9IHNlbGYtPnByaXYtPm1fZ2tiZGxheW91dDsKKysJZ19zaWdu YWxfY29ubmVjdF9vYmplY3QgKF90bXAxXywgImNoYW5nZWQiLCAoR0NhbGxiYWNrKSBfcGFuZWxf Z2tiZGxheW91dF9jaGFuZ2VkX2NiX2drYmRfbGF5b3V0X2NoYW5nZWQsIHNlbGYsIDApOworKwlf dG1wMl8gPSBnX3RpbWVyX25ldyAoKTsKKysJX2dfdGltZXJfZGVzdHJveTAgKHNlbGYtPnByaXYt Pm1fY2hhbmdlZF9sYXlvdXRfdGltZXIpOworKwlzZWxmLT5wcml2LT5tX2NoYW5nZWRfbGF5b3V0 X3RpbWVyID0gX3RtcDJfOworKwlfdG1wM18gPSBzZWxmLT5wcml2LT5tX2NoYW5nZWRfbGF5b3V0 X3RpbWVyOworKwlnX3RpbWVyX3N0YXJ0IChfdG1wM18pOworKwlfdG1wNF8gPSBzZWxmLT5wcml2 LT5tX2drYmRsYXlvdXQ7CisrCWdrYmRfbGF5b3V0X3N0YXJ0X2xpc3RlbiAoX3RtcDRfKTsKKyt9 CisrCisrCisrc3RhdGljIHZvaWQgcGFuZWxfaW5pdF9lbmdpbmVzX29yZGVyIChQYW5lbCogc2Vs ZikgeworKwlJQnVzQ29uZmlnKiBfdG1wMF87CisrCUlCdXNDb25maWcqIF90bXAxXzsKKysJWEtC TGF5b3V0KiBfdG1wMl87CisrCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7CisrCV90 bXAwXyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwlpZiAoX3RtcDBfID09IE5VTEwpIHsKKysJ CXJldHVybjsKKysJfQorKwlfdG1wMV8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKKysJX3RtcDJf ID0geGtiX2xheW91dF9uZXcgKF90bXAxXyk7CisrCV94a2JfbGF5b3V0X3VucmVmMCAoc2VsZi0+ cHJpdi0+bV94a2JsYXlvdXQpOworKwlzZWxmLT5wcml2LT5tX3hrYmxheW91dCA9IF90bXAyXzsK KysJaWYgKEhBVkVfSUJVU19HS0JEKSB7CisrCQlwYW5lbF9pbml0X2drYmQgKHNlbGYpOworKwl9 CisrCXBhbmVsX3VwZGF0ZV94a2JfZW5naW5lcyAoc2VsZik7CisrfQorKworKworK3N0YXRpYyB2 b2lkIF9nX2ZyZWUwXyAoZ3BvaW50ZXIgdmFyKSB7CisrCXZhciA9IChnX2ZyZWUgKHZhciksIE5V TEwpOworK30KKysKKysKKytzdGF0aWMgdm9pZCBfZ19saXN0X2ZyZWVfX2dfZnJlZTBfIChHTGlz dCogc2VsZikgeworKwlnX2xpc3RfZm9yZWFjaCAoc2VsZiwgKEdGdW5jKSBfZ19mcmVlMF8sIE5V TEwpOworKwlnX2xpc3RfZnJlZSAoc2VsZik7CisrfQorKworKworK3N0YXRpYyB2b2lkIF92YWxh X2FycmF5X2FkZDEzIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2No YXIqIHZhbHVlKSB7CisrCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgeworKwkJKnNpemUgPSAo KnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7CisrCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhcios ICphcnJheSwgKCpzaXplKSArIDEpOworKwl9CisrCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZh bHVlOworKwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7CisrfQorKworKworK3N0YXRpYyBnYm9v bGVhbiBfdmFsYV9zdHJpbmdfYXJyYXlfY29udGFpbnMgKGdjaGFyKiogc3RhY2ssIGludCBzdGFj a19sZW5ndGgsIGdjaGFyKiBuZWVkbGUpIHsKKysJaW50IGk7CisrCWZvciAoaSA9IDA7IGkgPCBz dGFja19sZW5ndGg7IGkrKykgeworKwkJaWYgKGdfc3RyY21wMCAoc3RhY2tbaV0sIG5lZWRsZSkg PT0gMCkgeworKwkJCXJldHVybiBUUlVFOworKwkJfQorKwl9CisrCXJldHVybiBGQUxTRTsKKyt9 CisrCisrCisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTQgKGdjaGFyKioqIGFycmF5LCBp bnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9 PSAoKnNpemUpKSB7CisrCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJ CSphcnJheSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJ KCphcnJheSlbKCpsZW5ndGgpKytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVM TDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTUgKGdjaGFyKioqIGFy cmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVu Z3RoKSA9PSAoKnNpemUpKSB7CisrCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDog NDsKKysJCSphcnJheSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7Cisr CX0KKysJKCphcnJheSlbKCpsZW5ndGgpKytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhd ID0gTlVMTDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgcGFuZWxfdXBkYXRlX3hrYl9lbmdpbmVz IChQYW5lbCogc2VsZikgeworKwlYS0JMYXlvdXQqIF90bXAwXzsKKysJZ2NoYXIqIF90bXAxXyA9 IE5VTEw7CisrCWdjaGFyKiB2YXJfbGF5b3V0OworKwlYS0JMYXlvdXQqIF90bXAyXzsKKysJZ2No YXIqIF90bXAzXyA9IE5VTEw7CisrCWdjaGFyKiB2YXJfdmFyaWFudDsKKysJY29uc3QgZ2NoYXIq IF90bXA0XzsKKysJY29uc3QgZ2NoYXIqIF90bXA1XzsKKysJZ2NoYXIqKiBfdG1wNl87CisrCWdj aGFyKiogX3RtcDdfID0gTlVMTDsKKysJY29uc3QgZ2NoYXIqIF90bXA4XzsKKysJZ2NoYXIqKiBf dG1wOV87CisrCWdjaGFyKiogX3RtcDEwXyA9IE5VTEw7CisrCUlCdXNYS0JDb25maWdSZWdpc3Ry eSogX3RtcDExXzsKKysJSUJ1c1hLQkNvbmZpZ1JlZ2lzdHJ5KiBfdG1wMTJfOworKwlJQnVzWEtC Q29uZmlnUmVnaXN0cnkqIHJlZ2lzdHJ5OworKwlnY2hhcioqIF90bXAxM18gPSBOVUxMOworKwln Y2hhcioqIHZhcl94a2JfZW5naW5lX25hbWVzOworKwlnaW50IHZhcl94a2JfZW5naW5lX25hbWVz X2xlbmd0aDE7CisrCWdpbnQgX3Zhcl94a2JfZW5naW5lX25hbWVzX3NpemVfOworKwlJQnVzQ29u ZmlnKiBfdG1wNjVfOworKwlHVmFyaWFudCogX3RtcDY2XyA9IE5VTEw7CisrCUdWYXJpYW50KiB2 YXJfZW5naW5lczsKKysJZ2NoYXIqKiBfdG1wNjdfID0gTlVMTDsKKysJZ2NoYXIqKiBlbmdpbmVf bmFtZXM7CisrCWdpbnQgZW5naW5lX25hbWVzX2xlbmd0aDE7CisrCWdpbnQgX2VuZ2luZV9uYW1l c19zaXplXzsKKysJZ2Jvb2xlYW4gdXBkYXRlZF9lbmdpbmVfbmFtZXM7CisrCUdWYXJpYW50KiBf dG1wNjhfOworKwlnY2hhcioqIF90bXA3Ml87CisrCWdpbnQgX3RtcDcyX19sZW5ndGgxOworKwln Ym9vbGVhbiBfdG1wNzlfOworKwlJQnVzQ29uZmlnKiBfdG1wODRfOworKwlHVmFyaWFudCogX3Rt cDg1XyA9IE5VTEw7CisrCUdWYXJpYW50KiB2YXJfb3JkZXI7CisrCWdjaGFyKiogX3RtcDg2XyA9 IE5VTEw7CisrCWdjaGFyKiogb3JkZXJfbmFtZXM7CisrCWdpbnQgb3JkZXJfbmFtZXNfbGVuZ3Ro MTsKKysJZ2ludCBfb3JkZXJfbmFtZXNfc2l6ZV87CisrCWdib29sZWFuIHVwZGF0ZWRfb3JkZXJf bmFtZXM7CisrCUdWYXJpYW50KiBfdG1wODdfOworKwlnY2hhcioqIF90bXA5MV87CisrCWdpbnQg X3RtcDkxX19sZW5ndGgxOworKwlnYm9vbGVhbiBfdG1wOThfOworKwlnX3JldHVybl9pZl9mYWls IChzZWxmICE9IE5VTEwpOworKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX3hrYmxheW91dDsKKysJ X3RtcDFfID0geGtiX2xheW91dF9nZXRfbGF5b3V0IChfdG1wMF8pOworKwl2YXJfbGF5b3V0ID0g X3RtcDFfOworKwlfdG1wMl8gPSBzZWxmLT5wcml2LT5tX3hrYmxheW91dDsKKysJX3RtcDNfID0g eGtiX2xheW91dF9nZXRfdmFyaWFudCAoX3RtcDJfKTsKKysJdmFyX3ZhcmlhbnQgPSBfdG1wM187 CisrCV90bXA0XyA9IHZhcl9sYXlvdXQ7CisrCWlmIChnX3N0cmNtcDAgKF90bXA0XywgIiIpID09 IDApIHsKKysJCV9nX2ZyZWUwICh2YXJfdmFyaWFudCk7CisrCQlfZ19mcmVlMCAodmFyX2xheW91 dCk7CisrCQlyZXR1cm47CisrCX0KKysJX3RtcDVfID0gdmFyX2xheW91dDsKKysJX3RtcDdfID0g X3RtcDZfID0gZ19zdHJzcGxpdCAoX3RtcDVfLCAiLCIsIDApOworKwlzZWxmLT5wcml2LT5tX2xh eW91dHMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoc2VsZi0+cHJpdi0+bV9sYXlvdXRzLCBzZWxmLT5w cml2LT5tX2xheW91dHNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsK KysJc2VsZi0+cHJpdi0+bV9sYXlvdXRzID0gX3RtcDdfOworKwlzZWxmLT5wcml2LT5tX2xheW91 dHNfbGVuZ3RoMSA9IF92YWxhX2FycmF5X2xlbmd0aCAoX3RtcDZfKTsKKysJc2VsZi0+cHJpdi0+ X21fbGF5b3V0c19zaXplXyA9IHNlbGYtPnByaXYtPm1fbGF5b3V0c19sZW5ndGgxOworKwlfdG1w OF8gPSB2YXJfdmFyaWFudDsKKysJX3RtcDEwXyA9IF90bXA5XyA9IGdfc3Ryc3BsaXQgKF90bXA4 XywgIiwiLCAwKTsKKysJc2VsZi0+cHJpdi0+bV92YXJpYW50cyA9IChfdmFsYV9hcnJheV9mcmVl IChzZWxmLT5wcml2LT5tX3ZhcmlhbnRzLCBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDEs IChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCXNlbGYtPnByaXYtPm1fdmFyaWFu dHMgPSBfdG1wMTBfOworKwlzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDEgPSBfdmFsYV9h cnJheV9sZW5ndGggKF90bXA5Xyk7CisrCXNlbGYtPnByaXYtPl9tX3ZhcmlhbnRzX3NpemVfID0g c2VsZi0+cHJpdi0+bV92YXJpYW50c19sZW5ndGgxOworKwlfdG1wMTFfID0gaWJ1c194a2JfY29u ZmlnX3JlZ2lzdHJ5X25ldyAoKTsKKysJX3RtcDEyXyA9IGdfb2JqZWN0X3JlZl9zaW5rIChfdG1w MTFfKTsKKysJcmVnaXN0cnkgPSBfdG1wMTJfOworKwlfdG1wMTNfID0gZ19uZXcwIChnY2hhcios IDAgKyAxKTsKKysJdmFyX3hrYl9lbmdpbmVfbmFtZXMgPSBfdG1wMTNfOworKwl2YXJfeGtiX2Vu Z2luZV9uYW1lc19sZW5ndGgxID0gMDsKKysJX3Zhcl94a2JfZW5naW5lX25hbWVzX3NpemVfID0g dmFyX3hrYl9lbmdpbmVfbmFtZXNfbGVuZ3RoMTsKKysJeworKwkJZ2ludCBpOworKwkJaSA9IDA7 CisrCQl7CisrCQkJZ2Jvb2xlYW4gX3RtcDE0XzsKKysJCQlfdG1wMTRfID0gVFJVRTsKKysJCQl3 aGlsZSAoVFJVRSkgeworKwkJCQlnYm9vbGVhbiBfdG1wMTVfOworKwkJCQlnaW50IF90bXAxN187 CisrCQkJCWdjaGFyKiogX3RtcDE4XzsKKysJCQkJZ2ludCBfdG1wMThfX2xlbmd0aDE7CisrCQkJ CWdjaGFyKiogX3RtcDE5XzsKKysJCQkJZ2ludCBfdG1wMTlfX2xlbmd0aDE7CisrCQkJCWdpbnQg X3RtcDIwXzsKKysJCQkJY29uc3QgZ2NoYXIqIF90bXAyMV87CisrCQkJCWdjaGFyKiBfdG1wMjJf OworKwkJCQlnY2hhciogbmFtZTsKKysJCQkJZ2NoYXIqIGxhbmc7CisrCQkJCWdib29sZWFuIF90 bXAyM18gPSBGQUxTRTsKKysJCQkJZ2ludCBfdG1wMjRfOworKwkJCQlnY2hhcioqIF90bXAyNV87 CisrCQkJCWdpbnQgX3RtcDI1X19sZW5ndGgxOworKwkJCQlnYm9vbGVhbiBfdG1wMjlfOworKwkJ CQljb25zdCBnY2hhciogX3RtcDUwXzsKKysJCQkJZ2NoYXIqKiBfdG1wNjFfOworKwkJCQlnaW50 IF90bXA2MV9fbGVuZ3RoMTsKKysJCQkJY29uc3QgZ2NoYXIqIF90bXA2Ml87CisrCQkJCWNvbnN0 IGdjaGFyKiBfdG1wNjNfOworKwkJCQlnY2hhciogX3RtcDY0XyA9IE5VTEw7CisrCQkJCV90bXAx NV8gPSBfdG1wMTRfOworKwkJCQlpZiAoIV90bXAxNV8pIHsKKysJCQkJCWdpbnQgX3RtcDE2XzsK KysJCQkJCV90bXAxNl8gPSBpOworKwkJCQkJaSA9IF90bXAxNl8gKyAxOworKwkJCQl9CisrCQkJ CV90bXAxNF8gPSBGQUxTRTsKKysJCQkJX3RtcDE3XyA9IGk7CisrCQkJCV90bXAxOF8gPSBzZWxm LT5wcml2LT5tX2xheW91dHM7CisrCQkJCV90bXAxOF9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1f bGF5b3V0c19sZW5ndGgxOworKwkJCQlpZiAoIShfdG1wMTdfIDwgX3RtcDE4X19sZW5ndGgxKSkg eworKwkJCQkJYnJlYWs7CisrCQkJCX0KKysJCQkJX3RtcDE5XyA9IHNlbGYtPnByaXYtPm1fbGF5 b3V0czsKKysJCQkJX3RtcDE5X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0 aDE7CisrCQkJCV90bXAyMF8gPSBpOworKwkJCQlfdG1wMjFfID0gX3RtcDE5X1tfdG1wMjBfXTsK KysJCQkJX3RtcDIyXyA9IGdfc3RyZHVwIChfdG1wMjFfKTsKKysJCQkJbmFtZSA9IF90bXAyMl87 CisrCQkJCWxhbmcgPSBOVUxMOworKwkJCQlfdG1wMjRfID0gaTsKKysJCQkJX3RtcDI1XyA9IHNl bGYtPnByaXYtPm1fdmFyaWFudHM7CisrCQkJCV90bXAyNV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYt Pm1fdmFyaWFudHNfbGVuZ3RoMTsKKysJCQkJaWYgKF90bXAyNF8gPCBfdG1wMjVfX2xlbmd0aDEp IHsKKysJCQkJCWdjaGFyKiogX3RtcDI2XzsKKysJCQkJCWdpbnQgX3RtcDI2X19sZW5ndGgxOwor KwkJCQkJZ2ludCBfdG1wMjdfOworKwkJCQkJY29uc3QgZ2NoYXIqIF90bXAyOF87CisrCQkJCQlf dG1wMjZfID0gc2VsZi0+cHJpdi0+bV92YXJpYW50czsKKysJCQkJCV90bXAyNl9fbGVuZ3RoMSA9 IHNlbGYtPnByaXYtPm1fdmFyaWFudHNfbGVuZ3RoMTsKKysJCQkJCV90bXAyN18gPSBpOworKwkJ CQkJX3RtcDI4XyA9IF90bXAyNl9bX3RtcDI3X107CisrCQkJCQlfdG1wMjNfID0gZ19zdHJjbXAw IChfdG1wMjhfLCAiIikgIT0gMDsKKysJCQkJfSBlbHNlIHsKKysJCQkJCV90bXAyM18gPSBGQUxT RTsKKysJCQkJfQorKwkJCQlfdG1wMjlfID0gX3RtcDIzXzsKKysJCQkJaWYgKF90bXAyOV8pIHsK KysJCQkJCWNvbnN0IGdjaGFyKiBfdG1wMzBfOworKwkJCQkJZ2NoYXIqKiBfdG1wMzFfOworKwkJ CQkJZ2ludCBfdG1wMzFfX2xlbmd0aDE7CisrCQkJCQlnaW50IF90bXAzMl87CisrCQkJCQljb25z dCBnY2hhciogX3RtcDMzXzsKKysJCQkJCWdjaGFyKiBfdG1wMzRfID0gTlVMTDsKKysJCQkJCWNv bnN0IGdjaGFyKiBfdG1wMzVfOworKwkJCQkJZ2NoYXIqKiBfdG1wMzZfOworKwkJCQkJZ2ludCBf dG1wMzZfX2xlbmd0aDE7CisrCQkJCQlnaW50IF90bXAzN187CisrCQkJCQljb25zdCBnY2hhciog X3RtcDM4XzsKKysJCQkJCWdjaGFyKiBfdG1wMzlfID0gTlVMTDsKKysJCQkJCWdjaGFyKiBsYXlv dXQ7CisrCQkJCQlJQnVzWEtCQ29uZmlnUmVnaXN0cnkqIF90bXA0MF87CisrCQkJCQljb25zdCBn Y2hhciogX3RtcDQxXzsKKysJCQkJCUdMaXN0KiBfdG1wNDJfID0gTlVMTDsKKysJCQkJCUdMaXN0 KiBsYW5nczsKKysJCQkJCUdMaXN0KiBfdG1wNDNfOworKwkJCQkJZ3VpbnQgX3RtcDQ0XyA9IDBV OworKwkJCQkJX3RtcDMwXyA9IG5hbWU7CisrCQkJCQlfdG1wMzFfID0gc2VsZi0+cHJpdi0+bV92 YXJpYW50czsKKysJCQkJCV90bXAzMV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHNf bGVuZ3RoMTsKKysJCQkJCV90bXAzMl8gPSBpOworKwkJCQkJX3RtcDMzXyA9IF90bXAzMV9bX3Rt cDMyX107CisrCQkJCQlfdG1wMzRfID0gZ19zdHJkdXBfcHJpbnRmICgiJXM6JXMiLCBfdG1wMzBf LCBfdG1wMzNfKTsKKysJCQkJCV9nX2ZyZWUwIChuYW1lKTsKKysJCQkJCW5hbWUgPSBfdG1wMzRf OworKwkJCQkJX3RtcDM1XyA9IG5hbWU7CisrCQkJCQlfdG1wMzZfID0gc2VsZi0+cHJpdi0+bV92 YXJpYW50czsKKysJCQkJCV90bXAzNl9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHNf bGVuZ3RoMTsKKysJCQkJCV90bXAzN18gPSBpOworKwkJCQkJX3RtcDM4XyA9IF90bXAzNl9bX3Rt cDM3X107CisrCQkJCQlfdG1wMzlfID0gZ19zdHJkdXBfcHJpbnRmICgiJXMoJXMpIiwgX3RtcDM1 XywgX3RtcDM4Xyk7CisrCQkJCQlsYXlvdXQgPSBfdG1wMzlfOworKwkJCQkJX3RtcDQwXyA9IHJl Z2lzdHJ5OworKwkJCQkJX3RtcDQxXyA9IGxheW91dDsKKysJCQkJCV90bXA0Ml8gPSBpYnVzX3hr Yl9jb25maWdfcmVnaXN0cnlfbGF5b3V0X2xhbmdfZ2V0X2xhbmdzIChfdG1wNDBfLCBfdG1wNDFf KTsKKysJCQkJCWxhbmdzID0gX3RtcDQyXzsKKysJCQkJCV90bXA0M18gPSBsYW5nczsKKysJCQkJ CV90bXA0NF8gPSBnX2xpc3RfbGVuZ3RoIChfdG1wNDNfKTsKKysJCQkJCWlmIChfdG1wNDRfICE9 ICgoZ3VpbnQpIDApKSB7CisrCQkJCQkJR0xpc3QqIF90bXA0NV87CisrCQkJCQkJZ2NvbnN0cG9p bnRlciBfdG1wNDZfOworKwkJCQkJCWdjaGFyKiBfdG1wNDdfOworKwkJCQkJCV90bXA0NV8gPSBs YW5nczsKKysJCQkJCQlfdG1wNDZfID0gX3RtcDQ1Xy0+ZGF0YTsKKysJCQkJCQlfdG1wNDdfID0g Z19zdHJkdXAgKChjb25zdCBnY2hhciopIF90bXA0Nl8pOworKwkJCQkJCV9nX2ZyZWUwIChsYW5n KTsKKysJCQkJCQlsYW5nID0gX3RtcDQ3XzsKKysJCQkJCX0KKysJCQkJCV9fZ19saXN0X2ZyZWVf X2dfZnJlZTBfMCAobGFuZ3MpOworKwkJCQkJX2dfZnJlZTAgKGxheW91dCk7CisrCQkJCX0gZWxz ZSB7CisrCQkJCQljb25zdCBnY2hhciogX3RtcDQ4XzsKKysJCQkJCWdjaGFyKiBfdG1wNDlfID0g TlVMTDsKKysJCQkJCV90bXA0OF8gPSBuYW1lOworKwkJCQkJX3RtcDQ5XyA9IGdfc3RyZHVwX3By aW50ZiAoIiVzOiIsIF90bXA0OF8pOworKwkJCQkJX2dfZnJlZTAgKG5hbWUpOworKwkJCQkJbmFt ZSA9IF90bXA0OV87CisrCQkJCX0KKysJCQkJX3RtcDUwXyA9IGxhbmc7CisrCQkJCWlmIChfdG1w NTBfID09IE5VTEwpIHsKKysJCQkJCUlCdXNYS0JDb25maWdSZWdpc3RyeSogX3RtcDUxXzsKKysJ CQkJCWdjaGFyKiogX3RtcDUyXzsKKysJCQkJCWdpbnQgX3RtcDUyX19sZW5ndGgxOworKwkJCQkJ Z2ludCBfdG1wNTNfOworKwkJCQkJY29uc3QgZ2NoYXIqIF90bXA1NF87CisrCQkJCQlHTGlzdCog X3RtcDU1XyA9IE5VTEw7CisrCQkJCQlHTGlzdCogbGFuZ3M7CisrCQkJCQlHTGlzdCogX3RtcDU2 XzsKKysJCQkJCWd1aW50IF90bXA1N18gPSAwVTsKKysJCQkJCV90bXA1MV8gPSByZWdpc3RyeTsK KysJCQkJCV90bXA1Ml8gPSBzZWxmLT5wcml2LT5tX2xheW91dHM7CisrCQkJCQlfdG1wNTJfX2xl bmd0aDEgPSBzZWxmLT5wcml2LT5tX2xheW91dHNfbGVuZ3RoMTsKKysJCQkJCV90bXA1M18gPSBp OworKwkJCQkJX3RtcDU0XyA9IF90bXA1Ml9bX3RtcDUzX107CisrCQkJCQlfdG1wNTVfID0gaWJ1 c194a2JfY29uZmlnX3JlZ2lzdHJ5X2xheW91dF9sYW5nX2dldF9sYW5ncyAoX3RtcDUxXywgX3Rt cDU0Xyk7CisrCQkJCQlsYW5ncyA9IF90bXA1NV87CisrCQkJCQlfdG1wNTZfID0gbGFuZ3M7Cisr CQkJCQlfdG1wNTdfID0gZ19saXN0X2xlbmd0aCAoX3RtcDU2Xyk7CisrCQkJCQlpZiAoX3RtcDU3 XyAhPSAoKGd1aW50KSAwKSkgeworKwkJCQkJCUdMaXN0KiBfdG1wNThfOworKwkJCQkJCWdjb25z dHBvaW50ZXIgX3RtcDU5XzsKKysJCQkJCQlnY2hhciogX3RtcDYwXzsKKysJCQkJCQlfdG1wNThf ID0gbGFuZ3M7CisrCQkJCQkJX3RtcDU5XyA9IF90bXA1OF8tPmRhdGE7CisrCQkJCQkJX3RtcDYw XyA9IGdfc3RyZHVwICgoY29uc3QgZ2NoYXIqKSBfdG1wNTlfKTsKKysJCQkJCQlfZ19mcmVlMCAo bGFuZyk7CisrCQkJCQkJbGFuZyA9IF90bXA2MF87CisrCQkJCQl9CisrCQkJCQlfX2dfbGlzdF9m cmVlX19nX2ZyZWUwXzAgKGxhbmdzKTsKKysJCQkJfQorKwkJCQlfdG1wNjFfID0gdmFyX3hrYl9l bmdpbmVfbmFtZXM7CisrCQkJCV90bXA2MV9fbGVuZ3RoMSA9IHZhcl94a2JfZW5naW5lX25hbWVz X2xlbmd0aDE7CisrCQkJCV90bXA2Ml8gPSBuYW1lOworKwkJCQlfdG1wNjNfID0gbGFuZzsKKysJ CQkJX3RtcDY0XyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzOiVzOiVzIiwgInhrYiIsIF90bXA2Ml8s IF90bXA2M18pOworKwkJCQlfdmFsYV9hcnJheV9hZGQxMyAoJnZhcl94a2JfZW5naW5lX25hbWVz LCAmdmFyX3hrYl9lbmdpbmVfbmFtZXNfbGVuZ3RoMSwgJl92YXJfeGtiX2VuZ2luZV9uYW1lc19z aXplXywgX3RtcDY0Xyk7CisrCQkJCV9nX2ZyZWUwIChsYW5nKTsKKysJCQkJX2dfZnJlZTAgKG5h bWUpOworKwkJCX0KKysJCX0KKysJfQorKwlfdG1wNjVfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7 CisrCV90bXA2Nl8gPSBpYnVzX2NvbmZpZ19nZXRfdmFsdWUgKF90bXA2NV8sICJnZW5lcmFsIiwg InByZWxvYWRfZW5naW5lcyIpOworKwl2YXJfZW5naW5lcyA9IF90bXA2Nl87CisrCV90bXA2N18g PSBnX25ldzAgKGdjaGFyKiwgMCArIDEpOworKwllbmdpbmVfbmFtZXMgPSBfdG1wNjdfOworKwll bmdpbmVfbmFtZXNfbGVuZ3RoMSA9IDA7CisrCV9lbmdpbmVfbmFtZXNfc2l6ZV8gPSBlbmdpbmVf bmFtZXNfbGVuZ3RoMTsKKysJdXBkYXRlZF9lbmdpbmVfbmFtZXMgPSBGQUxTRTsKKysJX3RtcDY4 XyA9IHZhcl9lbmdpbmVzOworKwlpZiAoX3RtcDY4XyAhPSBOVUxMKSB7CisrCQlHVmFyaWFudCog X3RtcDY5XzsKKysJCXNpemVfdCBfdG1wNzBfOworKwkJZ2NoYXIqKiBfdG1wNzFfID0gTlVMTDsK KysJCV90bXA2OV8gPSB2YXJfZW5naW5lczsKKysJCV90bXA3MV8gPSBnX3ZhcmlhbnRfZHVwX3N0 cnYgKF90bXA2OV8sICZfdG1wNzBfKTsKKysJCWVuZ2luZV9uYW1lcyA9IChfdmFsYV9hcnJheV9m cmVlIChlbmdpbmVfbmFtZXMsIGVuZ2luZV9uYW1lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkp IGdfZnJlZSksIE5VTEwpOworKwkJZW5naW5lX25hbWVzID0gX3RtcDcxXzsKKysJCWVuZ2luZV9u YW1lc19sZW5ndGgxID0gX3RtcDcwXzsKKysJCV9lbmdpbmVfbmFtZXNfc2l6ZV8gPSBlbmdpbmVf bmFtZXNfbGVuZ3RoMTsKKysJfQorKwlfdG1wNzJfID0gdmFyX3hrYl9lbmdpbmVfbmFtZXM7Cisr CV90bXA3Ml9fbGVuZ3RoMSA9IHZhcl94a2JfZW5naW5lX25hbWVzX2xlbmd0aDE7CisrCXsKKysJ CWdjaGFyKiogbmFtZV9jb2xsZWN0aW9uID0gTlVMTDsKKysJCWdpbnQgbmFtZV9jb2xsZWN0aW9u X2xlbmd0aDEgPSAwOworKwkJZ2ludCBfbmFtZV9jb2xsZWN0aW9uX3NpemVfID0gMDsKKysJCWdp bnQgbmFtZV9pdCA9IDA7CisrCQluYW1lX2NvbGxlY3Rpb24gPSBfdG1wNzJfOworKwkJbmFtZV9j b2xsZWN0aW9uX2xlbmd0aDEgPSBfdG1wNzJfX2xlbmd0aDE7CisrCQlmb3IgKG5hbWVfaXQgPSAw OyBuYW1lX2l0IDwgX3RtcDcyX19sZW5ndGgxOyBuYW1lX2l0ID0gbmFtZV9pdCArIDEpIHsKKysJ CQlnY2hhciogX3RtcDczXzsKKysJCQlnY2hhciogbmFtZSA9IE5VTEw7CisrCQkJX3RtcDczXyA9 IGdfc3RyZHVwIChuYW1lX2NvbGxlY3Rpb25bbmFtZV9pdF0pOworKwkJCW5hbWUgPSBfdG1wNzNf OworKwkJCXsKKysJCQkJY29uc3QgZ2NoYXIqIF90bXA3NF87CisrCQkJCWdjaGFyKiogX3RtcDc1 XzsKKysJCQkJZ2ludCBfdG1wNzVfX2xlbmd0aDE7CisrCQkJCWdjaGFyKiogX3RtcDc2XzsKKysJ CQkJZ2ludCBfdG1wNzZfX2xlbmd0aDE7CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wNzdfOworKwkJ CQlnY2hhciogX3RtcDc4XzsKKysJCQkJX3RtcDc0XyA9IG5hbWU7CisrCQkJCV90bXA3NV8gPSBl bmdpbmVfbmFtZXM7CisrCQkJCV90bXA3NV9fbGVuZ3RoMSA9IGVuZ2luZV9uYW1lc19sZW5ndGgx OworKwkJCQlpZiAoX3ZhbGFfc3RyaW5nX2FycmF5X2NvbnRhaW5zIChfdG1wNzVfLCBfdG1wNzVf X2xlbmd0aDEsIF90bXA3NF8pKSB7CisrCQkJCQlfZ19mcmVlMCAobmFtZSk7CisrCQkJCQljb250 aW51ZTsKKysJCQkJfQorKwkJCQl1cGRhdGVkX2VuZ2luZV9uYW1lcyA9IFRSVUU7CisrCQkJCV90 bXA3Nl8gPSBlbmdpbmVfbmFtZXM7CisrCQkJCV90bXA3Nl9fbGVuZ3RoMSA9IGVuZ2luZV9uYW1l c19sZW5ndGgxOworKwkJCQlfdG1wNzdfID0gbmFtZTsKKysJCQkJX3RtcDc4XyA9IGdfc3RyZHVw IChfdG1wNzdfKTsKKysJCQkJX3ZhbGFfYXJyYXlfYWRkMTQgKCZlbmdpbmVfbmFtZXMsICZlbmdp bmVfbmFtZXNfbGVuZ3RoMSwgJl9lbmdpbmVfbmFtZXNfc2l6ZV8sIF90bXA3OF8pOworKwkJCQlf Z19mcmVlMCAobmFtZSk7CisrCQkJfQorKwkJfQorKwl9CisrCV90bXA3OV8gPSB1cGRhdGVkX2Vu Z2luZV9uYW1lczsKKysJaWYgKF90bXA3OV8pIHsKKysJCUlCdXNDb25maWcqIF90bXA4MF87Cisr CQlnY2hhcioqIF90bXA4MV87CisrCQlnaW50IF90bXA4MV9fbGVuZ3RoMTsKKysJCUdWYXJpYW50 KiBfdG1wODJfOworKwkJR1ZhcmlhbnQqIF90bXA4M187CisrCQlfdG1wODBfID0gc2VsZi0+cHJp di0+bV9jb25maWc7CisrCQlfdG1wODFfID0gZW5naW5lX25hbWVzOworKwkJX3RtcDgxX19sZW5n dGgxID0gZW5naW5lX25hbWVzX2xlbmd0aDE7CisrCQlfdG1wODJfID0gZ192YXJpYW50X25ld19z dHJ2IChfdG1wODFfLCBfdG1wODFfX2xlbmd0aDEpOworKwkJX3RtcDgzXyA9IGdfdmFyaWFudF9y ZWZfc2luayAoX3RtcDgyXyk7CisrCQlpYnVzX2NvbmZpZ19zZXRfdmFsdWUgKF90bXA4MF8sICJn ZW5lcmFsIiwgInByZWxvYWRfZW5naW5lcyIsIF90bXA4M18pOworKwkJX2dfdmFyaWFudF91bnJl ZjAgKF90bXA4M18pOworKwl9CisrCV90bXA4NF8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKKysJ X3RtcDg1XyA9IGlidXNfY29uZmlnX2dldF92YWx1ZSAoX3RtcDg0XywgImdlbmVyYWwiLCAiZW5n aW5lc19vcmRlciIpOworKwl2YXJfb3JkZXIgPSBfdG1wODVfOworKwlfdG1wODZfID0gZ19uZXcw IChnY2hhciosIDAgKyAxKTsKKysJb3JkZXJfbmFtZXMgPSBfdG1wODZfOworKwlvcmRlcl9uYW1l c19sZW5ndGgxID0gMDsKKysJX29yZGVyX25hbWVzX3NpemVfID0gb3JkZXJfbmFtZXNfbGVuZ3Ro MTsKKysJdXBkYXRlZF9vcmRlcl9uYW1lcyA9IEZBTFNFOworKwlfdG1wODdfID0gdmFyX29yZGVy OworKwlpZiAoX3RtcDg3XyAhPSBOVUxMKSB7CisrCQlHVmFyaWFudCogX3RtcDg4XzsKKysJCXNp emVfdCBfdG1wODlfOworKwkJZ2NoYXIqKiBfdG1wOTBfID0gTlVMTDsKKysJCV90bXA4OF8gPSB2 YXJfb3JkZXI7CisrCQlfdG1wOTBfID0gZ192YXJpYW50X2R1cF9zdHJ2IChfdG1wODhfLCAmX3Rt cDg5Xyk7CisrCQlvcmRlcl9uYW1lcyA9IChfdmFsYV9hcnJheV9mcmVlIChvcmRlcl9uYW1lcywg b3JkZXJfbmFtZXNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKKysJ CW9yZGVyX25hbWVzID0gX3RtcDkwXzsKKysJCW9yZGVyX25hbWVzX2xlbmd0aDEgPSBfdG1wODlf OworKwkJX29yZGVyX25hbWVzX3NpemVfID0gb3JkZXJfbmFtZXNfbGVuZ3RoMTsKKysJfQorKwlf dG1wOTFfID0gdmFyX3hrYl9lbmdpbmVfbmFtZXM7CisrCV90bXA5MV9fbGVuZ3RoMSA9IHZhcl94 a2JfZW5naW5lX25hbWVzX2xlbmd0aDE7CisrCXsKKysJCWdjaGFyKiogbmFtZV9jb2xsZWN0aW9u ID0gTlVMTDsKKysJCWdpbnQgbmFtZV9jb2xsZWN0aW9uX2xlbmd0aDEgPSAwOworKwkJZ2ludCBf bmFtZV9jb2xsZWN0aW9uX3NpemVfID0gMDsKKysJCWdpbnQgbmFtZV9pdCA9IDA7CisrCQluYW1l X2NvbGxlY3Rpb24gPSBfdG1wOTFfOworKwkJbmFtZV9jb2xsZWN0aW9uX2xlbmd0aDEgPSBfdG1w OTFfX2xlbmd0aDE7CisrCQlmb3IgKG5hbWVfaXQgPSAwOyBuYW1lX2l0IDwgX3RtcDkxX19sZW5n dGgxOyBuYW1lX2l0ID0gbmFtZV9pdCArIDEpIHsKKysJCQlnY2hhciogX3RtcDkyXzsKKysJCQln Y2hhciogbmFtZSA9IE5VTEw7CisrCQkJX3RtcDkyXyA9IGdfc3RyZHVwIChuYW1lX2NvbGxlY3Rp b25bbmFtZV9pdF0pOworKwkJCW5hbWUgPSBfdG1wOTJfOworKwkJCXsKKysJCQkJY29uc3QgZ2No YXIqIF90bXA5M187CisrCQkJCWdjaGFyKiogX3RtcDk0XzsKKysJCQkJZ2ludCBfdG1wOTRfX2xl bmd0aDE7CisrCQkJCWdjaGFyKiogX3RtcDk1XzsKKysJCQkJZ2ludCBfdG1wOTVfX2xlbmd0aDE7 CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wOTZfOworKwkJCQlnY2hhciogX3RtcDk3XzsKKysJCQkJ X3RtcDkzXyA9IG5hbWU7CisrCQkJCV90bXA5NF8gPSBvcmRlcl9uYW1lczsKKysJCQkJX3RtcDk0 X19sZW5ndGgxID0gb3JkZXJfbmFtZXNfbGVuZ3RoMTsKKysJCQkJaWYgKF92YWxhX3N0cmluZ19h cnJheV9jb250YWlucyAoX3RtcDk0XywgX3RtcDk0X19sZW5ndGgxLCBfdG1wOTNfKSkgeworKwkJ CQkJX2dfZnJlZTAgKG5hbWUpOworKwkJCQkJY29udGludWU7CisrCQkJCX0KKysJCQkJX3RtcDk1 XyA9IG9yZGVyX25hbWVzOworKwkJCQlfdG1wOTVfX2xlbmd0aDEgPSBvcmRlcl9uYW1lc19sZW5n dGgxOworKwkJCQlfdG1wOTZfID0gbmFtZTsKKysJCQkJX3RtcDk3XyA9IGdfc3RyZHVwIChfdG1w OTZfKTsKKysJCQkJX3ZhbGFfYXJyYXlfYWRkMTUgKCZvcmRlcl9uYW1lcywgJm9yZGVyX25hbWVz X2xlbmd0aDEsICZfb3JkZXJfbmFtZXNfc2l6ZV8sIF90bXA5N18pOworKwkJCQl1cGRhdGVkX29y ZGVyX25hbWVzID0gVFJVRTsKKysJCQkJX2dfZnJlZTAgKG5hbWUpOworKwkJCX0KKysJCX0KKysJ fQorKwlfdG1wOThfID0gdXBkYXRlZF9vcmRlcl9uYW1lczsKKysJaWYgKF90bXA5OF8pIHsKKysJ CUlCdXNDb25maWcqIF90bXA5OV87CisrCQlnY2hhcioqIF90bXAxMDBfOworKwkJZ2ludCBfdG1w MTAwX19sZW5ndGgxOworKwkJR1ZhcmlhbnQqIF90bXAxMDFfOworKwkJR1ZhcmlhbnQqIF90bXAx MDJfOworKwkJX3RtcDk5XyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwkJX3RtcDEwMF8gPSBv cmRlcl9uYW1lczsKKysJCV90bXAxMDBfX2xlbmd0aDEgPSBvcmRlcl9uYW1lc19sZW5ndGgxOwor KwkJX3RtcDEwMV8gPSBnX3ZhcmlhbnRfbmV3X3N0cnYgKF90bXAxMDBfLCBfdG1wMTAwX19sZW5n dGgxKTsKKysJCV90bXAxMDJfID0gZ192YXJpYW50X3JlZl9zaW5rIChfdG1wMTAxXyk7CisrCQlp YnVzX2NvbmZpZ19zZXRfdmFsdWUgKF90bXA5OV8sICJnZW5lcmFsIiwgImVuZ2luZXNfb3JkZXIi LCBfdG1wMTAyXyk7CisrCQlfZ192YXJpYW50X3VucmVmMCAoX3RtcDEwMl8pOworKwl9CisrCW9y ZGVyX25hbWVzID0gKF92YWxhX2FycmF5X2ZyZWUgKG9yZGVyX25hbWVzLCBvcmRlcl9uYW1lc19s ZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOworKwlfZ192YXJpYW50X3Vu cmVmMCAodmFyX29yZGVyKTsKKysJZW5naW5lX25hbWVzID0gKF92YWxhX2FycmF5X2ZyZWUgKGVu Z2luZV9uYW1lcywgZW5naW5lX25hbWVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVl KSwgTlVMTCk7CisrCV9nX3ZhcmlhbnRfdW5yZWYwICh2YXJfZW5naW5lcyk7CisrCXZhcl94a2Jf ZW5naW5lX25hbWVzID0gKF92YWxhX2FycmF5X2ZyZWUgKHZhcl94a2JfZW5naW5lX25hbWVzLCB2 YXJfeGtiX2VuZ2luZV9uYW1lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5V TEwpOworKwlfZ19vYmplY3RfdW5yZWYwIChyZWdpc3RyeSk7CisrCV9nX2ZyZWUwICh2YXJfdmFy aWFudCk7CisrCV9nX2ZyZWUwICh2YXJfbGF5b3V0KTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQg cGFuZWxfc2V0X3hrYl9ncm91cF9sYXlvdXQgKFBhbmVsKiBzZWxmLCBjb25zdCBnY2hhciogbGF5 b3V0KSB7CisrCVhLQkxheW91dCogX3RtcDBfOworKwljb25zdCBnY2hhciogX3RtcDFfOworKwln aW50IF90bXAyXyA9IDA7CisrCWdpbnQqIF90bXAzXyA9IE5VTEw7CisrCWdpbnQqIHJldHZhbDsK KysJZ2ludCByZXR2YWxfbGVuZ3RoMTsKKysJZ2ludCBfcmV0dmFsX3NpemVfOworKwlnaW50KiBf dG1wNF87CisrCWdpbnQgX3RtcDRfX2xlbmd0aDE7CisrCWdpbnQgX3RtcDVfOworKwlnX3JldHVy bl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOworKwlnX3JldHVybl9pZl9mYWlsIChsYXlvdXQgIT0g TlVMTCk7CisrCV90bXAwXyA9IHNlbGYtPnByaXYtPm1feGtibGF5b3V0OworKwlfdG1wMV8gPSBs YXlvdXQ7CisrCV90bXAzXyA9IHhrYl9sYXlvdXRfc2V0X2xheW91dCAoX3RtcDBfLCBfdG1wMV8s ICJkZWZhdWx0IiwgImRlZmF1bHQiLCAmX3RtcDJfKTsKKysJcmV0dmFsID0gX3RtcDNfOworKwly ZXR2YWxfbGVuZ3RoMSA9IF90bXAyXzsKKysJX3JldHZhbF9zaXplXyA9IHJldHZhbF9sZW5ndGgx OworKwlfdG1wNF8gPSByZXR2YWw7CisrCV90bXA0X19sZW5ndGgxID0gcmV0dmFsX2xlbmd0aDE7 CisrCV90bXA1XyA9IF90bXA0X1swXTsKKysJaWYgKF90bXA1XyA+PSAwKSB7CisrCQlnaW50KiBf dG1wNl87CisrCQlnaW50IF90bXA2X19sZW5ndGgxOworKwkJZ2ludCBfdG1wN187CisrCQlnYm9v bGVhbiBfdG1wOF8gPSBGQUxTRTsKKysJCWdpbnQqIF90bXA5XzsKKysJCWdpbnQgX3RtcDlfX2xl bmd0aDE7CisrCQlnaW50IF90bXAxMF87CisrCQlnYm9vbGVhbiBfdG1wMTFfOworKwkJX3RtcDZf ID0gcmV0dmFsOworKwkJX3RtcDZfX2xlbmd0aDEgPSByZXR2YWxfbGVuZ3RoMTsKKysJCV90bXA3 XyA9IF90bXA2X1swXTsKKysJCXNlbGYtPnByaXYtPm1fZmFsbGJhY2tfbG9ja19pZCA9IF90bXA3 XzsKKysJCV90bXA5XyA9IHJldHZhbDsKKysJCV90bXA5X19sZW5ndGgxID0gcmV0dmFsX2xlbmd0 aDE7CisrCQlfdG1wMTBfID0gX3RtcDlfWzFdOworKwkJaWYgKF90bXAxMF8gIT0gMCkgeworKwkJ CV90bXA4XyA9IFRSVUU7CisrCQl9IGVsc2UgeworKwkJCV90bXA4XyA9IEZBTFNFOworKwkJfQor KwkJX3RtcDExXyA9IF90bXA4XzsKKysJCXNlbGYtPnByaXYtPm1fY2hhbmdlZF94a2Jfb3B0aW9u ID0gX3RtcDExXzsKKysJfQorKwlyZXR2YWwgPSAoZ19mcmVlIChyZXR2YWwpLCBOVUxMKTsKKyt9 CisrCisrCisrc3RhdGljIGdib29sZWFuIHBhbmVsX3NldF9na2JkX2xheW91dCAoUGFuZWwqIHNl bGYsIGNvbnN0IGdjaGFyKiBsYXlvdXQpIHsKKysJZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7Cisr CWdib29sZWFuIF90bXAwXzsKKysJR2tiZExheW91dCogX3RtcDFfOworKwlnaW50IF90bXAyXyA9 IDA7CisrCWdjaGFyKiogX3RtcDNfID0gTlVMTDsKKysJZ2NoYXIqKiBfdG1wNF87CisrCWdpbnQg X3RtcDRfX2xlbmd0aDE7CisrCWdpbnQgX3RtcDVfOworKwlnaW50IGdrYmRfbGVuOworKwlnX3Jl dHVybl92YWxfaWZfZmFpbCAoc2VsZiAhPSBOVUxMLCBGQUxTRSk7CisrCWdfcmV0dXJuX3ZhbF9p Zl9mYWlsIChsYXlvdXQgIT0gTlVMTCwgRkFMU0UpOworKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5t X2NoYW5nZWRfeGtiX29wdGlvbjsKKysJaWYgKF90bXAwXyA9PSBUUlVFKSB7CisrCQlzZWxmLT5w cml2LT5tX2NoYW5nZWRfeGtiX29wdGlvbiA9IEZBTFNFOworKwkJcmVzdWx0ID0gRkFMU0U7Cisr CQlyZXR1cm4gcmVzdWx0OworKwl9CisrCV90bXAxXyA9IHNlbGYtPnByaXYtPm1fZ2tiZGxheW91 dDsKKysJX3RtcDNfID0gZ2tiZF9sYXlvdXRfZ2V0X2dyb3VwX25hbWVzIChfdG1wMV8sICZfdG1w Ml8pOworKwlfdG1wNF8gPSBfdG1wM187CisrCV90bXA0X19sZW5ndGgxID0gX3RtcDJfOworKwlf dG1wNV8gPSBfdG1wMl87CisrCV90bXA0XyA9IChfdmFsYV9hcnJheV9mcmVlIChfdG1wNF8sIF90 bXA0X19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOworKwlna2JkX2xl biA9IF90bXA1XzsKKysJeworKwkJZ2ludCBpOworKwkJaSA9IDA7CisrCQl7CisrCQkJZ2Jvb2xl YW4gX3RtcDZfOworKwkJCV90bXA2XyA9IFRSVUU7CisrCQkJd2hpbGUgKFRSVUUpIHsKKysJCQkJ Z2Jvb2xlYW4gX3RtcDdfOworKwkJCQlnYm9vbGVhbiBfdG1wOV8gPSBGQUxTRTsKKysJCQkJZ2lu dCBfdG1wMTBfOworKwkJCQlnY2hhcioqIF90bXAxMV87CisrCQkJCWdpbnQgX3RtcDExX19sZW5n dGgxOworKwkJCQlnYm9vbGVhbiBfdG1wMTRfOworKwkJCQlnY2hhcioqIF90bXAxNV87CisrCQkJ CWdpbnQgX3RtcDE1X19sZW5ndGgxOworKwkJCQlnaW50IF90bXAxNl87CisrCQkJCWNvbnN0IGdj aGFyKiBfdG1wMTdfOworKwkJCQlnY2hhciogX3RtcDE4XzsKKysJCQkJZ2NoYXIqIHN5c19sYXlv dXQ7CisrCQkJCWdib29sZWFuIF90bXAxOV8gPSBGQUxTRTsKKysJCQkJZ2ludCBfdG1wMjBfOwor KwkJCQlnY2hhcioqIF90bXAyMV87CisrCQkJCWdpbnQgX3RtcDIxX19sZW5ndGgxOworKwkJCQln Ym9vbGVhbiBfdG1wMjVfOworKwkJCQljb25zdCBnY2hhciogX3RtcDMxXzsKKysJCQkJY29uc3Qg Z2NoYXIqIF90bXAzMl87CisrCQkJCV90bXA3XyA9IF90bXA2XzsKKysJCQkJaWYgKCFfdG1wN18p IHsKKysJCQkJCWdpbnQgX3RtcDhfOworKwkJCQkJX3RtcDhfID0gaTsKKysJCQkJCWkgPSBfdG1w OF8gKyAxOworKwkJCQl9CisrCQkJCV90bXA2XyA9IEZBTFNFOworKwkJCQlfdG1wMTBfID0gaTsK KysJCQkJX3RtcDExXyA9IHNlbGYtPnByaXYtPm1fbGF5b3V0czsKKysJCQkJX3RtcDExX19sZW5n dGgxID0gc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0aDE7CisrCQkJCWlmIChfdG1wMTBfIDwg X3RtcDExX19sZW5ndGgxKSB7CisrCQkJCQlnaW50IF90bXAxMl87CisrCQkJCQlnaW50IF90bXAx M187CisrCQkJCQlfdG1wMTJfID0gaTsKKysJCQkJCV90bXAxM18gPSBna2JkX2xlbjsKKysJCQkJ CV90bXA5XyA9IF90bXAxMl8gPCBfdG1wMTNfOworKwkJCQl9IGVsc2UgeworKwkJCQkJX3RtcDlf ID0gRkFMU0U7CisrCQkJCX0KKysJCQkJX3RtcDE0XyA9IF90bXA5XzsKKysJCQkJaWYgKCFfdG1w MTRfKSB7CisrCQkJCQlicmVhazsKKysJCQkJfQorKwkJCQlfdG1wMTVfID0gc2VsZi0+cHJpdi0+ bV9sYXlvdXRzOworKwkJCQlfdG1wMTVfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX2xheW91dHNf bGVuZ3RoMTsKKysJCQkJX3RtcDE2XyA9IGk7CisrCQkJCV90bXAxN18gPSBfdG1wMTVfW190bXAx Nl9dOworKwkJCQlfdG1wMThfID0gZ19zdHJkdXAgKF90bXAxN18pOworKwkJCQlzeXNfbGF5b3V0 ID0gX3RtcDE4XzsKKysJCQkJX3RtcDIwXyA9IGk7CisrCQkJCV90bXAyMV8gPSBzZWxmLT5wcml2 LT5tX3ZhcmlhbnRzOworKwkJCQlfdG1wMjFfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX3Zhcmlh bnRzX2xlbmd0aDE7CisrCQkJCWlmIChfdG1wMjBfIDwgX3RtcDIxX19sZW5ndGgxKSB7CisrCQkJ CQlnY2hhcioqIF90bXAyMl87CisrCQkJCQlnaW50IF90bXAyMl9fbGVuZ3RoMTsKKysJCQkJCWdp bnQgX3RtcDIzXzsKKysJCQkJCWNvbnN0IGdjaGFyKiBfdG1wMjRfOworKwkJCQkJX3RtcDIyXyA9 IHNlbGYtPnByaXYtPm1fdmFyaWFudHM7CisrCQkJCQlfdG1wMjJfX2xlbmd0aDEgPSBzZWxmLT5w cml2LT5tX3ZhcmlhbnRzX2xlbmd0aDE7CisrCQkJCQlfdG1wMjNfID0gaTsKKysJCQkJCV90bXAy NF8gPSBfdG1wMjJfW190bXAyM19dOworKwkJCQkJX3RtcDE5XyA9IGdfc3RyY21wMCAoX3RtcDI0 XywgIiIpICE9IDA7CisrCQkJCX0gZWxzZSB7CisrCQkJCQlfdG1wMTlfID0gRkFMU0U7CisrCQkJ CX0KKysJCQkJX3RtcDI1XyA9IF90bXAxOV87CisrCQkJCWlmIChfdG1wMjVfKSB7CisrCQkJCQlj b25zdCBnY2hhciogX3RtcDI2XzsKKysJCQkJCWdjaGFyKiogX3RtcDI3XzsKKysJCQkJCWdpbnQg X3RtcDI3X19sZW5ndGgxOworKwkJCQkJZ2ludCBfdG1wMjhfOworKwkJCQkJY29uc3QgZ2NoYXIq IF90bXAyOV87CisrCQkJCQlnY2hhciogX3RtcDMwXyA9IE5VTEw7CisrCQkJCQlfdG1wMjZfID0g c3lzX2xheW91dDsKKysJCQkJCV90bXAyN18gPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzOworKwkJ CQkJX3RtcDI3X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV92YXJpYW50c19sZW5ndGgxOworKwkJ CQkJX3RtcDI4XyA9IGk7CisrCQkJCQlfdG1wMjlfID0gX3RtcDI3X1tfdG1wMjhfXTsKKysJCQkJ CV90bXAzMF8gPSBnX3N0cmR1cF9wcmludGYgKCIlcyglcykiLCBfdG1wMjZfLCBfdG1wMjlfKTsK KysJCQkJCV9nX2ZyZWUwIChzeXNfbGF5b3V0KTsKKysJCQkJCXN5c19sYXlvdXQgPSBfdG1wMzBf OworKwkJCQl9CisrCQkJCV90bXAzMV8gPSBzeXNfbGF5b3V0OworKwkJCQlfdG1wMzJfID0gbGF5 b3V0OworKwkJCQlpZiAoZ19zdHJjbXAwIChfdG1wMzFfLCBfdG1wMzJfKSA9PSAwKSB7CisrCQkJ CQlHa2JkTGF5b3V0KiBfdG1wMzNfOworKwkJCQkJZ2ludCBfdG1wMzRfOworKwkJCQkJX3RtcDMz XyA9IHNlbGYtPnByaXYtPm1fZ2tiZGxheW91dDsKKysJCQkJCV90bXAzNF8gPSBpOworKwkJCQkJ Z2tiZF9sYXlvdXRfbG9ja19ncm91cCAoX3RtcDMzXywgX3RtcDM0Xyk7CisrCQkJCQlyZXN1bHQg PSBUUlVFOworKwkJCQkJX2dfZnJlZTAgKHN5c19sYXlvdXQpOworKwkJCQkJcmV0dXJuIHJlc3Vs dDsKKysJCQkJfQorKwkJCQlfZ19mcmVlMCAoc3lzX2xheW91dCk7CisrCQkJfQorKwkJfQorKwl9 CisrCXJlc3VsdCA9IEZBTFNFOworKwlyZXR1cm4gcmVzdWx0OworK30KKysKKysKKytzdGF0aWMg dm9pZCBwYW5lbF9zZXRfbGF5b3V0IChQYW5lbCogc2VsZiwgY29uc3QgZ2NoYXIqIGxheW91dCkg eworKwlnYm9vbGVhbiBfdG1wMF8gPSBGQUxTRTsKKysJY29uc3QgZ2NoYXIqIF90bXAxXzsKKysJ Z2Jvb2xlYW4gX3RtcDNfOworKwlYS0JMYXlvdXQqIF90bXA0XzsKKysJWEtCTGF5b3V0KiBfdG1w OF87CisrCWNvbnN0IGdjaGFyKiBfdG1wOV87CisrCWdpbnQgX3RtcDEwXyA9IDA7CisrCWdpbnQq IF90bXAxMV8gPSBOVUxMOworKwlnaW50KiBfdG1wMTJfOworKwlnaW50IF90bXAxMl9fbGVuZ3Ro MTsKKysJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKKysJZ19yZXR1cm5faWZfZmFp bCAobGF5b3V0ICE9IE5VTEwpOworKwlfdG1wMV8gPSBsYXlvdXQ7CisrCWlmIChnX3N0cmNtcDAg KF90bXAxXywgImRlZmF1bHQiKSA9PSAwKSB7CisrCQlfdG1wMF8gPSBUUlVFOworKwl9IGVsc2Ug eworKwkJY29uc3QgZ2NoYXIqIF90bXAyXzsKKysJCV90bXAyXyA9IGxheW91dDsKKysJCV90bXAw XyA9IF90bXAyXyA9PSBOVUxMOworKwl9CisrCV90bXAzXyA9IF90bXAwXzsKKysJaWYgKF90bXAz XykgeworKwkJcmV0dXJuOworKwl9CisrCV90bXA0XyA9IHNlbGYtPnByaXYtPm1feGtibGF5b3V0 OworKwlpZiAoX3RtcDRfID09IE5VTEwpIHsKKysJCXBhbmVsX2luaXRfZW5naW5lc19vcmRlciAo c2VsZik7CisrCX0KKysJaWYgKEhBVkVfSUJVU19HS0JEKSB7CisrCQljb25zdCBnY2hhciogX3Rt cDVfOworKwkJZ2Jvb2xlYW4gX3RtcDZfID0gRkFMU0U7CisrCQljb25zdCBnY2hhciogX3RtcDdf OworKwkJX3RtcDVfID0gbGF5b3V0OworKwkJX3RtcDZfID0gcGFuZWxfc2V0X2drYmRfbGF5b3V0 IChzZWxmLCBfdG1wNV8pOworKwkJaWYgKF90bXA2XykgeworKwkJCXJldHVybjsKKysJCX0KKysJ CV90bXA3XyA9IGxheW91dDsKKysJCXBhbmVsX3NldF94a2JfZ3JvdXBfbGF5b3V0IChzZWxmLCBf dG1wN18pOworKwkJcmV0dXJuOworKwl9CisrCV90bXA4XyA9IHNlbGYtPnByaXYtPm1feGtibGF5 b3V0OworKwlfdG1wOV8gPSBsYXlvdXQ7CisrCV90bXAxMV8gPSB4a2JfbGF5b3V0X3NldF9sYXlv dXQgKF90bXA4XywgX3RtcDlfLCAiZGVmYXVsdCIsICJkZWZhdWx0IiwgJl90bXAxMF8pOworKwlf dG1wMTJfID0gX3RtcDExXzsKKysJX3RtcDEyX19sZW5ndGgxID0gX3RtcDEwXzsKKysJX3RtcDEy XyA9IChnX2ZyZWUgKF90bXAxMl8pLCBOVUxMKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3Zh bGFfYXJyYXlfYWRkMTYgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBn Y2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7CisrCQkqc2l6ZSA9 ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJCSphcnJheSA9IGdfcmVuZXcgKGdjaGFy KiwgKmFycmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJKCphcnJheSlbKCpsZW5ndGgpKytdID0g dmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKKyt9CisrCisrCisrc3RhdGljIHZv aWQgcGFuZWxfc3dpdGNoX2VuZ2luZSAoUGFuZWwqIHNlbGYsIGdpbnQgaSwgZ2Jvb2xlYW4gZm9y Y2UpIHsKKysJZ2Jvb2xlYW4gX3RtcDBfID0gRkFMU0U7CisrCWdpbnQgX3RtcDFfOworKwlnYm9v bGVhbiBfdG1wNF87CisrCWdib29sZWFuIF90bXA1XyA9IEZBTFNFOworKwlnaW50IF90bXA2XzsK KysJZ2Jvb2xlYW4gX3RtcDhfOworKwlJQnVzRW5naW5lRGVzYyoqIF90bXA5XzsKKysJZ2ludCBf dG1wOV9fbGVuZ3RoMTsKKysJZ2ludCBfdG1wMTBfOworKwlJQnVzRW5naW5lRGVzYyogX3RtcDEx XzsKKysJSUJ1c0VuZ2luZURlc2MqIF90bXAxMl87CisrCUlCdXNFbmdpbmVEZXNjKiBlbmdpbmU7 CisrCUlCdXNFbmdpbmVEZXNjKiogX3RtcDI1XzsKKysJZ2ludCBfdG1wMjVfX2xlbmd0aDE7Cisr CUlCdXNFbmdpbmVEZXNjKiBfdG1wMjZfOworKwlJQnVzRW5naW5lRGVzYyogX3RtcDI3XzsKKysJ SUJ1c0VuZ2luZURlc2MqIF90bXAyOF87CisrCUlCdXNCdXMqIF90bXAyOV87CisrCUlCdXNFbmdp bmVEZXNjKiBfdG1wMzBfOworKwljb25zdCBnY2hhciogX3RtcDMxXyA9IE5VTEw7CisrCWdib29s ZWFuIF90bXAzMl8gPSBGQUxTRTsKKysJSUJ1c0VuZ2luZURlc2MqIF90bXAzNV87CisrCWNvbnN0 IGdjaGFyKiBfdG1wMzZfID0gTlVMTDsKKysJZ2NoYXIqKiBfdG1wMzdfID0gTlVMTDsKKysJZ2No YXIqKiBuYW1lczsKKysJZ2ludCBuYW1lc19sZW5ndGgxOworKwlnaW50IF9uYW1lc19zaXplXzsK KysJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMzhfOworKwlnaW50IF90bXAzOF9fbGVuZ3RoMTsKKysJ SUJ1c0NvbmZpZyogX3RtcDQ0XzsKKysJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsK KysJX3RtcDFfID0gaTsKKysJaWYgKF90bXAxXyA+PSAwKSB7CisrCQlnaW50IF90bXAyXzsKKysJ CUlCdXNFbmdpbmVEZXNjKiogX3RtcDNfOworKwkJZ2ludCBfdG1wM19fbGVuZ3RoMTsKKysJCV90 bXAyXyA9IGk7CisrCQlfdG1wM18gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXM7CisrCQlfdG1wM19f bGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxOworKwkJX3RtcDBfID0gX3Rt cDJfIDwgX3RtcDNfX2xlbmd0aDE7CisrCX0gZWxzZSB7CisrCQlfdG1wMF8gPSBGQUxTRTsKKysJ fQorKwlfdG1wNF8gPSBfdG1wMF87CisrCWdfYXNzZXJ0IChfdG1wNF8pOworKwlfdG1wNl8gPSBp OworKwlpZiAoX3RtcDZfID09IDApIHsKKysJCWdib29sZWFuIF90bXA3XzsKKysJCV90bXA3XyA9 IGZvcmNlOworKwkJX3RtcDVfID0gIV90bXA3XzsKKysJfSBlbHNlIHsKKysJCV90bXA1XyA9IEZB TFNFOworKwl9CisrCV90bXA4XyA9IF90bXA1XzsKKysJaWYgKF90bXA4XykgeworKwkJcmV0dXJu OworKwl9CisrCV90bXA5XyA9IHNlbGYtPnByaXYtPm1fZW5naW5lczsKKysJX3RtcDlfX2xlbmd0 aDEgPSBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMTsKKysJX3RtcDEwXyA9IGk7CisrCV90 bXAxMV8gPSBfdG1wOV9bX3RtcDEwX107CisrCV90bXAxMl8gPSBfZ19vYmplY3RfcmVmMCAoX3Rt cDExXyk7CisrCWVuZ2luZSA9IF90bXAxMl87CisrCXsKKysJCWdpbnQgX3RtcDEzXzsKKysJCWdp bnQgajsKKysJCV90bXAxM18gPSBpOworKwkJaiA9IF90bXAxM187CisrCQl7CisrCQkJZ2Jvb2xl YW4gX3RtcDE0XzsKKysJCQlfdG1wMTRfID0gVFJVRTsKKysJCQl3aGlsZSAoVFJVRSkgeworKwkJ CQlnYm9vbGVhbiBfdG1wMTVfOworKwkJCQlnaW50IF90bXAxN187CisrCQkJCUlCdXNFbmdpbmVE ZXNjKiogX3RtcDE4XzsKKysJCQkJZ2ludCBfdG1wMThfX2xlbmd0aDE7CisrCQkJCWdpbnQgX3Rt cDE5XzsKKysJCQkJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMjBfOworKwkJCQlnaW50IF90bXAyMF9f bGVuZ3RoMTsKKysJCQkJZ2ludCBfdG1wMjFfOworKwkJCQlJQnVzRW5naW5lRGVzYyogX3RtcDIy XzsKKysJCQkJSUJ1c0VuZ2luZURlc2MqIF90bXAyM187CisrCQkJCUlCdXNFbmdpbmVEZXNjKiBf dG1wMjRfOworKwkJCQlfdG1wMTVfID0gX3RtcDE0XzsKKysJCQkJaWYgKCFfdG1wMTVfKSB7Cisr CQkJCQlnaW50IF90bXAxNl87CisrCQkJCQlfdG1wMTZfID0gajsKKysJCQkJCWogPSBfdG1wMTZf IC0gMTsKKysJCQkJfQorKwkJCQlfdG1wMTRfID0gRkFMU0U7CisrCQkJCV90bXAxN18gPSBqOwor KwkJCQlpZiAoIShfdG1wMTdfID4gMCkpIHsKKysJCQkJCWJyZWFrOworKwkJCQl9CisrCQkJCV90 bXAxOF8gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXM7CisrCQkJCV90bXAxOF9fbGVuZ3RoMSA9IHNl bGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxOworKwkJCQlfdG1wMTlfID0gajsKKysJCQkJX3Rt cDIwXyA9IHNlbGYtPnByaXYtPm1fZW5naW5lczsKKysJCQkJX3RtcDIwX19sZW5ndGgxID0gc2Vs Zi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDE7CisrCQkJCV90bXAyMV8gPSBqOworKwkJCQlfdG1w MjJfID0gX3RtcDIwX1tfdG1wMjFfIC0gMV07CisrCQkJCV90bXAyM18gPSBfZ19vYmplY3RfcmVm MCAoX3RtcDIyXyk7CisrCQkJCV9nX29iamVjdF91bnJlZjAgKF90bXAxOF9bX3RtcDE5X10pOwor KwkJCQlfdG1wMThfW190bXAxOV9dID0gX3RtcDIzXzsKKysJCQkJX3RtcDI0XyA9IF90bXAxOF9b X3RtcDE5X107CisrCQkJfQorKwkJfQorKwl9CisrCV90bXAyNV8gPSBzZWxmLT5wcml2LT5tX2Vu Z2luZXM7CisrCV90bXAyNV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgx OworKwlfdG1wMjZfID0gZW5naW5lOworKwlfdG1wMjdfID0gX2dfb2JqZWN0X3JlZjAgKF90bXAy Nl8pOworKwlfZ19vYmplY3RfdW5yZWYwIChfdG1wMjVfWzBdKTsKKysJX3RtcDI1X1swXSA9IF90 bXAyN187CisrCV90bXAyOF8gPSBfdG1wMjVfWzBdOworKwlfdG1wMjlfID0gc2VsZi0+cHJpdi0+ bV9idXM7CisrCV90bXAzMF8gPSBlbmdpbmU7CisrCV90bXAzMV8gPSBpYnVzX2VuZ2luZV9kZXNj X2dldF9uYW1lIChfdG1wMzBfKTsKKysJX3RtcDMyXyA9IGlidXNfYnVzX3NldF9nbG9iYWxfZW5n aW5lIChfdG1wMjlfLCBfdG1wMzFfKTsKKysJaWYgKCFfdG1wMzJfKSB7CisrCQlJQnVzRW5naW5l RGVzYyogX3RtcDMzXzsKKysJCWNvbnN0IGdjaGFyKiBfdG1wMzRfID0gTlVMTDsKKysJCV90bXAz M18gPSBlbmdpbmU7CisrCQlfdG1wMzRfID0gaWJ1c19lbmdpbmVfZGVzY19nZXRfbmFtZSAoX3Rt cDMzXyk7CisrCQlnX3dhcm5pbmcgKCJwYW5lbC52YWxhOjM2NzogU3dpdGNoIGVuZ2luZSB0byAl cyBmYWlsZWQuIiwgX3RtcDM0Xyk7CisrCQlfZ19vYmplY3RfdW5yZWYwIChlbmdpbmUpOworKwkJ cmV0dXJuOworKwl9CisrCV90bXAzNV8gPSBlbmdpbmU7CisrCV90bXAzNl8gPSBpYnVzX2VuZ2lu ZV9kZXNjX2dldF9sYXlvdXQgKF90bXAzNV8pOworKwlwYW5lbF9zZXRfbGF5b3V0IChzZWxmLCBf dG1wMzZfKTsKKysJX3RtcDM3XyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7CisrCW5hbWVzID0g X3RtcDM3XzsKKysJbmFtZXNfbGVuZ3RoMSA9IDA7CisrCV9uYW1lc19zaXplXyA9IG5hbWVzX2xl bmd0aDE7CisrCV90bXAzOF8gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXM7CisrCV90bXAzOF9fbGVu Z3RoMSA9IHNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxOworKwl7CisrCQlJQnVzRW5naW5l RGVzYyoqIGRlc2NfY29sbGVjdGlvbiA9IE5VTEw7CisrCQlnaW50IGRlc2NfY29sbGVjdGlvbl9s ZW5ndGgxID0gMDsKKysJCWdpbnQgX2Rlc2NfY29sbGVjdGlvbl9zaXplXyA9IDA7CisrCQlnaW50 IGRlc2NfaXQgPSAwOworKwkJZGVzY19jb2xsZWN0aW9uID0gX3RtcDM4XzsKKysJCWRlc2NfY29s bGVjdGlvbl9sZW5ndGgxID0gX3RtcDM4X19sZW5ndGgxOworKwkJZm9yIChkZXNjX2l0ID0gMDsg ZGVzY19pdCA8IF90bXAzOF9fbGVuZ3RoMTsgZGVzY19pdCA9IGRlc2NfaXQgKyAxKSB7CisrCQkJ SUJ1c0VuZ2luZURlc2MqIF90bXAzOV87CisrCQkJSUJ1c0VuZ2luZURlc2MqIGRlc2MgPSBOVUxM OworKwkJCV90bXAzOV8gPSBfZ19vYmplY3RfcmVmMCAoZGVzY19jb2xsZWN0aW9uW2Rlc2NfaXRd KTsKKysJCQlkZXNjID0gX3RtcDM5XzsKKysJCQl7CisrCQkJCWdjaGFyKiogX3RtcDQwXzsKKysJ CQkJZ2ludCBfdG1wNDBfX2xlbmd0aDE7CisrCQkJCUlCdXNFbmdpbmVEZXNjKiBfdG1wNDFfOwor KwkJCQljb25zdCBnY2hhciogX3RtcDQyXyA9IE5VTEw7CisrCQkJCWdjaGFyKiBfdG1wNDNfOwor KwkJCQlfdG1wNDBfID0gbmFtZXM7CisrCQkJCV90bXA0MF9fbGVuZ3RoMSA9IG5hbWVzX2xlbmd0 aDE7CisrCQkJCV90bXA0MV8gPSBkZXNjOworKwkJCQlfdG1wNDJfID0gaWJ1c19lbmdpbmVfZGVz Y19nZXRfbmFtZSAoX3RtcDQxXyk7CisrCQkJCV90bXA0M18gPSBnX3N0cmR1cCAoX3RtcDQyXyk7 CisrCQkJCV92YWxhX2FycmF5X2FkZDE2ICgmbmFtZXMsICZuYW1lc19sZW5ndGgxLCAmX25hbWVz X3NpemVfLCBfdG1wNDNfKTsKKysJCQkJX2dfb2JqZWN0X3VucmVmMCAoZGVzYyk7CisrCQkJfQor KwkJfQorKwl9CisrCV90bXA0NF8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKKysJaWYgKF90bXA0 NF8gIT0gTlVMTCkgeworKwkJSUJ1c0NvbmZpZyogX3RtcDQ1XzsKKysJCWdjaGFyKiogX3RtcDQ2 XzsKKysJCWdpbnQgX3RtcDQ2X19sZW5ndGgxOworKwkJR1ZhcmlhbnQqIF90bXA0N187CisrCQlH VmFyaWFudCogX3RtcDQ4XzsKKysJCV90bXA0NV8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKKysJ CV90bXA0Nl8gPSBuYW1lczsKKysJCV90bXA0Nl9fbGVuZ3RoMSA9IG5hbWVzX2xlbmd0aDE7Cisr CQlfdG1wNDdfID0gZ192YXJpYW50X25ld19zdHJ2IChfdG1wNDZfLCBfdG1wNDZfX2xlbmd0aDEp OworKwkJX3RtcDQ4XyA9IGdfdmFyaWFudF9yZWZfc2luayAoX3RtcDQ3Xyk7CisrCQlpYnVzX2Nv bmZpZ19zZXRfdmFsdWUgKF90bXA0NV8sICJnZW5lcmFsIiwgImVuZ2luZXNfb3JkZXIiLCBfdG1w NDhfKTsKKysJCV9nX3ZhcmlhbnRfdW5yZWYwIChfdG1wNDhfKTsKKysJfQorKwluYW1lcyA9IChf dmFsYV9hcnJheV9mcmVlIChuYW1lcywgbmFtZXNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBn X2ZyZWUpLCBOVUxMKTsKKysJX2dfb2JqZWN0X3VucmVmMCAoZW5naW5lKTsKKyt9CisrCisrCisr c3RhdGljIHZvaWQgcGFuZWxfY29uZmlnX3ZhbHVlX2NoYW5nZWRfY2IgKFBhbmVsKiBzZWxmLCBJ QnVzQ29uZmlnKiBjb25maWcsIGNvbnN0IGdjaGFyKiBzZWN0aW9uLCBjb25zdCBnY2hhciogbmFt ZSwgR1ZhcmlhbnQqIHZhcmlhbnQpIHsKKysJZ2Jvb2xlYW4gX3RtcDBfID0gRkFMU0U7CisrCWNv bnN0IGdjaGFyKiBfdG1wMV87CisrCWdib29sZWFuIF90bXAzXzsKKysJZ19yZXR1cm5faWZfZmFp bCAoc2VsZiAhPSBOVUxMKTsKKysJZ19yZXR1cm5faWZfZmFpbCAoY29uZmlnICE9IE5VTEwpOwor KwlnX3JldHVybl9pZl9mYWlsIChzZWN0aW9uICE9IE5VTEwpOworKwlnX3JldHVybl9pZl9mYWls IChuYW1lICE9IE5VTEwpOworKwlnX3JldHVybl9pZl9mYWlsICh2YXJpYW50ICE9IE5VTEwpOwor KwlfdG1wMV8gPSBzZWN0aW9uOworKwlpZiAoZ19zdHJjbXAwIChfdG1wMV8sICJnZW5lcmFsIikg PT0gMCkgeworKwkJY29uc3QgZ2NoYXIqIF90bXAyXzsKKysJCV90bXAyXyA9IG5hbWU7CisrCQlf dG1wMF8gPSBnX3N0cmNtcDAgKF90bXAyXywgInByZWxvYWRfZW5naW5lcyIpID09IDA7CisrCX0g ZWxzZSB7CisrCQlfdG1wMF8gPSBGQUxTRTsKKysJfQorKwlfdG1wM18gPSBfdG1wMF87CisrCWlm IChfdG1wM18pIHsKKysJCUdWYXJpYW50KiBfdG1wNF87CisrCQlfdG1wNF8gPSB2YXJpYW50Owor KwkJcGFuZWxfdXBkYXRlX2VuZ2luZXMgKHNlbGYsIF90bXA0XywgTlVMTCk7CisrCX0KKyt9Cisr CisrCisrc3RhdGljIHZvaWQgcGFuZWxfaGFuZGxlX2VuZ2luZV9zd2l0Y2ggKFBhbmVsKiBzZWxm LCBHZGtFdmVudCogZXZlbnQsIGdib29sZWFuIHJldmVydCkgeworKwlJQnVzRW5naW5lRGVzYyoq IF90bXAwXzsKKysJZ2ludCBfdG1wMF9fbGVuZ3RoMTsKKysJR2RrRXZlbnQqIF90bXAxXzsKKysJ R2RrRXZlbnRLZXkgX3RtcDJfOworKwlHZGtNb2RpZmllclR5cGUgX3RtcDNfOworKwlndWludCBf dG1wNF8gPSAwVTsKKysJZ3VpbnQgcHJpbWFyeV9tb2RpZmllcnM7CisrCUdka0V2ZW50KiBfdG1w NV87CisrCWd1aW50IF90bXA2XzsKKysJZ2Jvb2xlYW4gX3RtcDdfID0gRkFMU0U7CisrCWdib29s ZWFuIHByZXNzZWQ7CisrCWdib29sZWFuIF90bXA4XzsKKysJZ19yZXR1cm5faWZfZmFpbCAoc2Vs ZiAhPSBOVUxMKTsKKysJZ19yZXR1cm5faWZfZmFpbCAoZXZlbnQgIT0gTlVMTCk7CisrCV90bXAw XyA9IHNlbGYtPnByaXYtPm1fZW5naW5lczsKKysJX3RtcDBfX2xlbmd0aDEgPSBzZWxmLT5wcml2 LT5tX2VuZ2luZXNfbGVuZ3RoMTsKKysJaWYgKF90bXAwX19sZW5ndGgxIDw9IDEpIHsKKysJCXJl dHVybjsKKysJfQorKwlfdG1wMV8gPSBldmVudDsKKysJX3RtcDJfID0gX3RtcDFfLT5rZXk7Cisr CV90bXAzXyA9IF90bXAyXy5zdGF0ZTsKKysJX3RtcDRfID0ga2V5YmluZGluZ19tYW5hZ2VyX2dl dF9wcmltYXJ5X21vZGlmaWVyICgoZ3VpbnQpIF90bXAzXyk7CisrCXByaW1hcnlfbW9kaWZpZXJz ID0gX3RtcDRfOworKwlfdG1wNV8gPSBldmVudDsKKysJX3RtcDZfID0gcHJpbWFyeV9tb2RpZmll cnM7CisrCV90bXA3XyA9IGtleWJpbmRpbmdfbWFuYWdlcl9wcmltYXJ5X21vZGlmaWVyX3N0aWxs X3ByZXNzZWQgKF90bXA1XywgX3RtcDZfKTsKKysJcHJlc3NlZCA9IF90bXA3XzsKKysJX3RtcDhf ID0gcHJlc3NlZDsKKysJaWYgKF90bXA4XykgeworKwkJZ2ludCBfdG1wOV8gPSAwOworKwkJZ2Jv b2xlYW4gX3RtcDEwXzsKKysJCWdpbnQgX3RtcDEyXzsKKysJCWdpbnQgaTsKKysJCVN3aXRjaGVy KiBfdG1wMTNfOworKwkJR2RrRXZlbnQqIF90bXAxNF87CisrCQlJQnVzRW5naW5lRGVzYyoqIF90 bXAxNV87CisrCQlnaW50IF90bXAxNV9fbGVuZ3RoMTsKKysJCWdpbnQgX3RtcDE2XzsKKysJCWdp bnQgX3RtcDE3XyA9IDA7CisrCQlnaW50IF90bXAxOF87CisrCQlfdG1wMTBfID0gcmV2ZXJ0Owor KwkJaWYgKF90bXAxMF8pIHsKKysJCQlJQnVzRW5naW5lRGVzYyoqIF90bXAxMV87CisrCQkJZ2lu dCBfdG1wMTFfX2xlbmd0aDE7CisrCQkJX3RtcDExXyA9IHNlbGYtPnByaXYtPm1fZW5naW5lczsK KysJCQlfdG1wMTFfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMTsKKysJ CQlfdG1wOV8gPSBfdG1wMTFfX2xlbmd0aDEgLSAxOworKwkJfSBlbHNlIHsKKysJCQlfdG1wOV8g PSAxOworKwkJfQorKwkJX3RtcDEyXyA9IF90bXA5XzsKKysJCWkgPSBfdG1wMTJfOworKwkJX3Rt cDEzXyA9IHNlbGYtPnByaXYtPm1fc3dpdGNoZXI7CisrCQlfdG1wMTRfID0gZXZlbnQ7CisrCQlf dG1wMTVfID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzOworKwkJX3RtcDE1X19sZW5ndGgxID0gc2Vs Zi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDE7CisrCQlfdG1wMTZfID0gaTsKKysJCV90bXAxN18g PSBzd2l0Y2hlcl9ydW4gKF90bXAxM18sIF90bXAxNF8sIF90bXAxNV8sIF90bXAxNV9fbGVuZ3Ro MSwgX3RtcDE2Xyk7CisrCQlpID0gX3RtcDE3XzsKKysJCV90bXAxOF8gPSBpOworKwkJaWYgKF90 bXAxOF8gPCAwKSB7CisrCQkJZ19kZWJ1ZyAoInBhbmVsLnZhbGE6NDA2OiBzd2l0Y2ggY2FuY2Vs bGVkIik7CisrCQl9IGVsc2UgeworKwkJCWdpbnQgX3RtcDE5XzsKKysJCQlJQnVzRW5naW5lRGVz YyoqIF90bXAyMF87CisrCQkJZ2ludCBfdG1wMjBfX2xlbmd0aDE7CisrCQkJZ2ludCBfdG1wMjFf OworKwkJCV90bXAxOV8gPSBpOworKwkJCV90bXAyMF8gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXM7 CisrCQkJX3RtcDIwX19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDE7Cisr CQkJZ19hc3NlcnQgKF90bXAxOV8gPCBfdG1wMjBfX2xlbmd0aDEpOworKwkJCV90bXAyMV8gPSBp OworKwkJCXBhbmVsX3N3aXRjaF9lbmdpbmUgKHNlbGYsIF90bXAyMV8sIEZBTFNFKTsKKysJCX0K KysJfSBlbHNlIHsKKysJCWdpbnQgX3RtcDIyXyA9IDA7CisrCQlnYm9vbGVhbiBfdG1wMjNfOwor KwkJZ2ludCBfdG1wMjVfOworKwkJZ2ludCBpOworKwkJZ2ludCBfdG1wMjZfOworKwkJX3RtcDIz XyA9IHJldmVydDsKKysJCWlmIChfdG1wMjNfKSB7CisrCQkJSUJ1c0VuZ2luZURlc2MqKiBfdG1w MjRfOworKwkJCWdpbnQgX3RtcDI0X19sZW5ndGgxOworKwkJCV90bXAyNF8gPSBzZWxmLT5wcml2 LT5tX2VuZ2luZXM7CisrCQkJX3RtcDI0X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVz X2xlbmd0aDE7CisrCQkJX3RtcDIyXyA9IF90bXAyNF9fbGVuZ3RoMSAtIDE7CisrCQl9IGVsc2Ug eworKwkJCV90bXAyMl8gPSAxOworKwkJfQorKwkJX3RtcDI1XyA9IF90bXAyMl87CisrCQlpID0g X3RtcDI1XzsKKysJCV90bXAyNl8gPSBpOworKwkJcGFuZWxfc3dpdGNoX2VuZ2luZSAoc2VsZiwg X3RtcDI2XywgRkFMU0UpOworKwl9CisrfQorKworKworK3N0YXRpYyBnY2hhcioqIF92YWxhX2Fy cmF5X2R1cDIgKGdjaGFyKiogc2VsZiwgaW50IGxlbmd0aCkgeworKwlnY2hhcioqIHJlc3VsdDsK KysJaW50IGk7CisrCXJlc3VsdCA9IGdfbmV3MCAoZ2NoYXIqLCBsZW5ndGggKyAxKTsKKysJZm9y IChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisrCQlnY2hhciogX3RtcDBfOworKwkJX3RtcDBf ID0gZ19zdHJkdXAgKHNlbGZbaV0pOworKwkJcmVzdWx0W2ldID0gX3RtcDBfOworKwl9CisrCXJl dHVybiByZXN1bHQ7CisrfQorKworKworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDE3IChn Y2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7Cisr CWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgeworKwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAo KnNpemUpKSA6IDQ7CisrCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpzaXpl KSArIDEpOworKwl9CisrCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOworKwkoKmFycmF5 KVsqbGVuZ3RoXSA9IE5VTEw7CisrfQorKworKworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2Fk ZDE4IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVl KSB7CisrCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgeworKwkJKnNpemUgPSAoKnNpemUpID8g KDIgKiAoKnNpemUpKSA6IDQ7CisrCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwg KCpzaXplKSArIDEpOworKwl9CisrCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOworKwko KmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7CisrfQorKworKworK3N0YXRpYyBJQnVzRW5naW5lRGVz YyoqIF92YWxhX2FycmF5X2R1cDMgKElCdXNFbmdpbmVEZXNjKiogc2VsZiwgaW50IGxlbmd0aCkg eworKwlJQnVzRW5naW5lRGVzYyoqIHJlc3VsdDsKKysJaW50IGk7CisrCXJlc3VsdCA9IGdfbmV3 MCAoSUJ1c0VuZ2luZURlc2MqLCBsZW5ndGggKyAxKTsKKysJZm9yIChpID0gMDsgaSA8IGxlbmd0 aDsgaSsrKSB7CisrCQlJQnVzRW5naW5lRGVzYyogX3RtcDBfOworKwkJX3RtcDBfID0gX2dfb2Jq ZWN0X3JlZjAgKHNlbGZbaV0pOworKwkJcmVzdWx0W2ldID0gX3RtcDBfOworKwl9CisrCXJldHVy biByZXN1bHQ7CisrfQorKworKworK3N0YXRpYyBJQnVzRW5naW5lRGVzYyoqIF92YWxhX2FycmF5 X2R1cDQgKElCdXNFbmdpbmVEZXNjKiogc2VsZiwgaW50IGxlbmd0aCkgeworKwlJQnVzRW5naW5l RGVzYyoqIHJlc3VsdDsKKysJaW50IGk7CisrCXJlc3VsdCA9IGdfbmV3MCAoSUJ1c0VuZ2luZURl c2MqLCBsZW5ndGggKyAxKTsKKysJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisrCQlJ QnVzRW5naW5lRGVzYyogX3RtcDBfOworKwkJX3RtcDBfID0gX2dfb2JqZWN0X3JlZjAgKHNlbGZb aV0pOworKwkJcmVzdWx0W2ldID0gX3RtcDBfOworKwl9CisrCXJldHVybiByZXN1bHQ7CisrfQor KworKworK3N0YXRpYyB2b2lkIHBhbmVsX3VwZGF0ZV9lbmdpbmVzIChQYW5lbCogc2VsZiwgR1Zh cmlhbnQqIHZhcl9lbmdpbmVzLCBHVmFyaWFudCogdmFyX29yZGVyKSB7CisrCWdjaGFyKiogZW5n aW5lX25hbWVzOworKwlnaW50IGVuZ2luZV9uYW1lc19sZW5ndGgxOworKwlnaW50IF9lbmdpbmVf bmFtZXNfc2l6ZV87CisrCUdWYXJpYW50KiBfdG1wMF87CisrCWdib29sZWFuIF90bXA0XyA9IEZB TFNFOworKwlnY2hhcioqIF90bXA1XzsKKysJZ2ludCBfdG1wNV9fbGVuZ3RoMTsKKysJZ2Jvb2xl YW4gX3RtcDdfOworKwlnY2hhcioqIF90bXAxMF8gPSBOVUxMOworKwlnaW50IF90bXAxMF9fbGVu Z3RoMSA9IDA7CisrCWdpbnQgX190bXAxMF9fc2l6ZV8gPSAwOworKwlHVmFyaWFudCogX3RtcDEx XzsKKysJZ2NoYXIqKiBfdG1wMTVfOworKwlnaW50IF90bXAxNV9fbGVuZ3RoMTsKKysJZ2NoYXIq KiBfdG1wMTZfOworKwlnaW50IF90bXAxNl9fbGVuZ3RoMTsKKysJZ2NoYXIqKiBvcmRlcl9uYW1l czsKKysJZ2ludCBvcmRlcl9uYW1lc19sZW5ndGgxOworKwlnaW50IF9vcmRlcl9uYW1lc19zaXpl XzsKKysJZ2NoYXIqKiBfdG1wMTdfID0gTlVMTDsKKysJZ2NoYXIqKiBuYW1lczsKKysJZ2ludCBu YW1lc19sZW5ndGgxOworKwlnaW50IF9uYW1lc19zaXplXzsKKysJZ2NoYXIqKiBfdG1wMThfOwor KwlnaW50IF90bXAxOF9fbGVuZ3RoMTsKKysJZ2NoYXIqKiBfdG1wMjVfOworKwlnaW50IF90bXAy NV9fbGVuZ3RoMTsKKysJSUJ1c0J1cyogX3RtcDMyXzsKKysJZ2NoYXIqKiBfdG1wMzNfOworKwln aW50IF90bXAzM19fbGVuZ3RoMTsKKysJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMzRfOworKwlJQnVz RW5naW5lRGVzYyoqIF90bXAzNV8gPSBOVUxMOworKwlJQnVzRW5naW5lRGVzYyoqIGVuZ2luZXM7 CisrCWdpbnQgZW5naW5lc19sZW5ndGgxOworKwlnaW50IF9lbmdpbmVzX3NpemVfOworKwlJQnVz RW5naW5lRGVzYyoqIF90bXAzNl87CisrCWdpbnQgX3RtcDM2X19sZW5ndGgxOworKwlnX3JldHVy bl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOworKwllbmdpbmVfbmFtZXMgPSBOVUxMOworKwllbmdp bmVfbmFtZXNfbGVuZ3RoMSA9IDA7CisrCV9lbmdpbmVfbmFtZXNfc2l6ZV8gPSBlbmdpbmVfbmFt ZXNfbGVuZ3RoMTsKKysJX3RtcDBfID0gdmFyX2VuZ2luZXM7CisrCWlmIChfdG1wMF8gIT0gTlVM TCkgeworKwkJR1ZhcmlhbnQqIF90bXAxXzsKKysJCXNpemVfdCBfdG1wMl87CisrCQlnY2hhcioq IF90bXAzXyA9IE5VTEw7CisrCQlfdG1wMV8gPSB2YXJfZW5naW5lczsKKysJCV90bXAzXyA9IGdf dmFyaWFudF9kdXBfc3RydiAoX3RtcDFfLCAmX3RtcDJfKTsKKysJCWVuZ2luZV9uYW1lcyA9IChf dmFsYV9hcnJheV9mcmVlIChlbmdpbmVfbmFtZXMsIGVuZ2luZV9uYW1lc19sZW5ndGgxLCAoR0Rl c3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOworKwkJZW5naW5lX25hbWVzID0gX3RtcDNfOwor KwkJZW5naW5lX25hbWVzX2xlbmd0aDEgPSBfdG1wMl87CisrCQlfZW5naW5lX25hbWVzX3NpemVf ID0gZW5naW5lX25hbWVzX2xlbmd0aDE7CisrCX0KKysJX3RtcDVfID0gZW5naW5lX25hbWVzOwor KwlfdG1wNV9fbGVuZ3RoMSA9IGVuZ2luZV9uYW1lc19sZW5ndGgxOworKwlpZiAoX3RtcDVfID09 IE5VTEwpIHsKKysJCV90bXA0XyA9IFRSVUU7CisrCX0gZWxzZSB7CisrCQlnY2hhcioqIF90bXA2 XzsKKysJCWdpbnQgX3RtcDZfX2xlbmd0aDE7CisrCQlfdG1wNl8gPSBlbmdpbmVfbmFtZXM7Cisr CQlfdG1wNl9fbGVuZ3RoMSA9IGVuZ2luZV9uYW1lc19sZW5ndGgxOworKwkJX3RtcDRfID0gX3Rt cDZfX2xlbmd0aDEgPT0gMDsKKysJfQorKwlfdG1wN18gPSBfdG1wNF87CisrCWlmIChfdG1wN18p IHsKKysJCWdjaGFyKiBfdG1wOF87CisrCQlnY2hhcioqIF90bXA5XyA9IE5VTEw7CisrCQlfdG1w OF8gPSBnX3N0cmR1cCAoInhrYjp1czo6ZW5nIik7CisrCQlfdG1wOV8gPSBnX25ldzAgKGdjaGFy KiwgMSArIDEpOworKwkJX3RtcDlfWzBdID0gX3RtcDhfOworKwkJZW5naW5lX25hbWVzID0gKF92 YWxhX2FycmF5X2ZyZWUgKGVuZ2luZV9uYW1lcywgZW5naW5lX25hbWVzX2xlbmd0aDEsIChHRGVz dHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCQllbmdpbmVfbmFtZXMgPSBfdG1wOV87Cisr CQllbmdpbmVfbmFtZXNfbGVuZ3RoMSA9IDE7CisrCQlfZW5naW5lX25hbWVzX3NpemVfID0gZW5n aW5lX25hbWVzX2xlbmd0aDE7CisrCX0KKysJX3RtcDExXyA9IHZhcl9vcmRlcjsKKysJaWYgKF90 bXAxMV8gIT0gTlVMTCkgeworKwkJR1ZhcmlhbnQqIF90bXAxMl87CisrCQlzaXplX3QgX3RtcDEz XzsKKysJCWdjaGFyKiogX3RtcDE0XyA9IE5VTEw7CisrCQlfdG1wMTJfID0gdmFyX29yZGVyOwor KwkJX3RtcDE0XyA9IGdfdmFyaWFudF9kdXBfc3RydiAoX3RtcDEyXywgJl90bXAxM18pOworKwkJ X3RtcDEwXyA9IChfdmFsYV9hcnJheV9mcmVlIChfdG1wMTBfLCBfdG1wMTBfX2xlbmd0aDEsIChH RGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCQlfdG1wMTBfID0gX3RtcDE0XzsKKysJ CV90bXAxMF9fbGVuZ3RoMSA9IF90bXAxM187CisrCQlfX3RtcDEwX19zaXplXyA9IF90bXAxMF9f bGVuZ3RoMTsKKysJfSBlbHNlIHsKKysJCV90bXAxMF8gPSAoX3ZhbGFfYXJyYXlfZnJlZSAoX3Rt cDEwXywgX3RtcDEwX19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwor KwkJX3RtcDEwXyA9IE5VTEw7CisrCQlfdG1wMTBfX2xlbmd0aDEgPSAwOworKwkJX190bXAxMF9f c2l6ZV8gPSBfdG1wMTBfX2xlbmd0aDE7CisrCX0KKysJX3RtcDE1XyA9IF90bXAxMF87CisrCV90 bXAxNV9fbGVuZ3RoMSA9IF90bXAxMF9fbGVuZ3RoMTsKKysJX3RtcDE2XyA9IChfdG1wMTVfICE9 IE5VTEwpID8gX3ZhbGFfYXJyYXlfZHVwMiAoX3RtcDE1XywgX3RtcDE1X19sZW5ndGgxKSA6ICgo Z3BvaW50ZXIpIF90bXAxNV8pOworKwlfdG1wMTZfX2xlbmd0aDEgPSBfdG1wMTVfX2xlbmd0aDE7 CisrCW9yZGVyX25hbWVzID0gX3RtcDE2XzsKKysJb3JkZXJfbmFtZXNfbGVuZ3RoMSA9IF90bXAx Nl9fbGVuZ3RoMTsKKysJX29yZGVyX25hbWVzX3NpemVfID0gb3JkZXJfbmFtZXNfbGVuZ3RoMTsK KysJX3RtcDE3XyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7CisrCW5hbWVzID0gX3RtcDE3XzsK KysJbmFtZXNfbGVuZ3RoMSA9IDA7CisrCV9uYW1lc19zaXplXyA9IG5hbWVzX2xlbmd0aDE7Cisr CV90bXAxOF8gPSBvcmRlcl9uYW1lczsKKysJX3RtcDE4X19sZW5ndGgxID0gb3JkZXJfbmFtZXNf bGVuZ3RoMTsKKysJeworKwkJZ2NoYXIqKiBuYW1lX2NvbGxlY3Rpb24gPSBOVUxMOworKwkJZ2lu dCBuYW1lX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IDA7CisrCQlnaW50IF9uYW1lX2NvbGxlY3Rpb25f c2l6ZV8gPSAwOworKwkJZ2ludCBuYW1lX2l0ID0gMDsKKysJCW5hbWVfY29sbGVjdGlvbiA9IF90 bXAxOF87CisrCQluYW1lX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IF90bXAxOF9fbGVuZ3RoMTsKKysJ CWZvciAobmFtZV9pdCA9IDA7IG5hbWVfaXQgPCBfdG1wMThfX2xlbmd0aDE7IG5hbWVfaXQgPSBu YW1lX2l0ICsgMSkgeworKwkJCWdjaGFyKiBfdG1wMTlfOworKwkJCWdjaGFyKiBuYW1lID0gTlVM TDsKKysJCQlfdG1wMTlfID0gZ19zdHJkdXAgKG5hbWVfY29sbGVjdGlvbltuYW1lX2l0XSk7Cisr CQkJbmFtZSA9IF90bXAxOV87CisrCQkJeworKwkJCQljb25zdCBnY2hhciogX3RtcDIwXzsKKysJ CQkJZ2NoYXIqKiBfdG1wMjFfOworKwkJCQlnaW50IF90bXAyMV9fbGVuZ3RoMTsKKysJCQkJX3Rt cDIwXyA9IG5hbWU7CisrCQkJCV90bXAyMV8gPSBlbmdpbmVfbmFtZXM7CisrCQkJCV90bXAyMV9f bGVuZ3RoMSA9IGVuZ2luZV9uYW1lc19sZW5ndGgxOworKwkJCQlpZiAoX3ZhbGFfc3RyaW5nX2Fy cmF5X2NvbnRhaW5zIChfdG1wMjFfLCBfdG1wMjFfX2xlbmd0aDEsIF90bXAyMF8pKSB7CisrCQkJ CQlnY2hhcioqIF90bXAyMl87CisrCQkJCQlnaW50IF90bXAyMl9fbGVuZ3RoMTsKKysJCQkJCWNv bnN0IGdjaGFyKiBfdG1wMjNfOworKwkJCQkJZ2NoYXIqIF90bXAyNF87CisrCQkJCQlfdG1wMjJf ID0gbmFtZXM7CisrCQkJCQlfdG1wMjJfX2xlbmd0aDEgPSBuYW1lc19sZW5ndGgxOworKwkJCQkJ X3RtcDIzXyA9IG5hbWU7CisrCQkJCQlfdG1wMjRfID0gZ19zdHJkdXAgKF90bXAyM18pOworKwkJ CQkJX3ZhbGFfYXJyYXlfYWRkMTcgKCZuYW1lcywgJm5hbWVzX2xlbmd0aDEsICZfbmFtZXNfc2l6 ZV8sIF90bXAyNF8pOworKwkJCQl9CisrCQkJCV9nX2ZyZWUwIChuYW1lKTsKKysJCQl9CisrCQl9 CisrCX0KKysJX3RtcDI1XyA9IGVuZ2luZV9uYW1lczsKKysJX3RtcDI1X19sZW5ndGgxID0gZW5n aW5lX25hbWVzX2xlbmd0aDE7CisrCXsKKysJCWdjaGFyKiogbmFtZV9jb2xsZWN0aW9uID0gTlVM TDsKKysJCWdpbnQgbmFtZV9jb2xsZWN0aW9uX2xlbmd0aDEgPSAwOworKwkJZ2ludCBfbmFtZV9j b2xsZWN0aW9uX3NpemVfID0gMDsKKysJCWdpbnQgbmFtZV9pdCA9IDA7CisrCQluYW1lX2NvbGxl Y3Rpb24gPSBfdG1wMjVfOworKwkJbmFtZV9jb2xsZWN0aW9uX2xlbmd0aDEgPSBfdG1wMjVfX2xl bmd0aDE7CisrCQlmb3IgKG5hbWVfaXQgPSAwOyBuYW1lX2l0IDwgX3RtcDI1X19sZW5ndGgxOyBu YW1lX2l0ID0gbmFtZV9pdCArIDEpIHsKKysJCQlnY2hhciogX3RtcDI2XzsKKysJCQlnY2hhciog bmFtZSA9IE5VTEw7CisrCQkJX3RtcDI2XyA9IGdfc3RyZHVwIChuYW1lX2NvbGxlY3Rpb25bbmFt ZV9pdF0pOworKwkJCW5hbWUgPSBfdG1wMjZfOworKwkJCXsKKysJCQkJY29uc3QgZ2NoYXIqIF90 bXAyN187CisrCQkJCWdjaGFyKiogX3RtcDI4XzsKKysJCQkJZ2ludCBfdG1wMjhfX2xlbmd0aDE7 CisrCQkJCWdjaGFyKiogX3RtcDI5XzsKKysJCQkJZ2ludCBfdG1wMjlfX2xlbmd0aDE7CisrCQkJ CWNvbnN0IGdjaGFyKiBfdG1wMzBfOworKwkJCQlnY2hhciogX3RtcDMxXzsKKysJCQkJX3RtcDI3 XyA9IG5hbWU7CisrCQkJCV90bXAyOF8gPSBuYW1lczsKKysJCQkJX3RtcDI4X19sZW5ndGgxID0g bmFtZXNfbGVuZ3RoMTsKKysJCQkJaWYgKF92YWxhX3N0cmluZ19hcnJheV9jb250YWlucyAoX3Rt cDI4XywgX3RtcDI4X19sZW5ndGgxLCBfdG1wMjdfKSkgeworKwkJCQkJX2dfZnJlZTAgKG5hbWUp OworKwkJCQkJY29udGludWU7CisrCQkJCX0KKysJCQkJX3RtcDI5XyA9IG5hbWVzOworKwkJCQlf dG1wMjlfX2xlbmd0aDEgPSBuYW1lc19sZW5ndGgxOworKwkJCQlfdG1wMzBfID0gbmFtZTsKKysJ CQkJX3RtcDMxXyA9IGdfc3RyZHVwIChfdG1wMzBfKTsKKysJCQkJX3ZhbGFfYXJyYXlfYWRkMTgg KCZuYW1lcywgJm5hbWVzX2xlbmd0aDEsICZfbmFtZXNfc2l6ZV8sIF90bXAzMV8pOworKwkJCQlf Z19mcmVlMCAobmFtZSk7CisrCQkJfQorKwkJfQorKwl9CisrCV90bXAzMl8gPSBzZWxmLT5wcml2 LT5tX2J1czsKKysJX3RtcDMzXyA9IG5hbWVzOworKwlfdG1wMzNfX2xlbmd0aDEgPSBuYW1lc19s ZW5ndGgxOworKwlfdG1wMzVfID0gX3RtcDM0XyA9IGlidXNfYnVzX2dldF9lbmdpbmVzX2J5X25h bWVzIChfdG1wMzJfLCBfdG1wMzNfKTsKKysJZW5naW5lcyA9IF90bXAzNV87CisrCWVuZ2luZXNf bGVuZ3RoMSA9IF92YWxhX2FycmF5X2xlbmd0aCAoX3RtcDM0Xyk7CisrCV9lbmdpbmVzX3NpemVf ID0gZW5naW5lc19sZW5ndGgxOworKwlfdG1wMzZfID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzOwor KwlfdG1wMzZfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMTsKKysJaWYg KF90bXAzNl9fbGVuZ3RoMSA9PSAwKSB7CisrCQlJQnVzRW5naW5lRGVzYyoqIF90bXAzN187Cisr CQlnaW50IF90bXAzN19fbGVuZ3RoMTsKKysJCUlCdXNFbmdpbmVEZXNjKiogX3RtcDM4XzsKKysJ CWdpbnQgX3RtcDM4X19sZW5ndGgxOworKwkJX3RtcDM3XyA9IGVuZ2luZXM7CisrCQlfdG1wMzdf X2xlbmd0aDEgPSBlbmdpbmVzX2xlbmd0aDE7CisrCQlfdG1wMzhfID0gKF90bXAzN18gIT0gTlVM TCkgPyBfdmFsYV9hcnJheV9kdXAzIChfdG1wMzdfLCBfdG1wMzdfX2xlbmd0aDEpIDogKChncG9p bnRlcikgX3RtcDM3Xyk7CisrCQlfdG1wMzhfX2xlbmd0aDEgPSBfdG1wMzdfX2xlbmd0aDE7Cisr CQlzZWxmLT5wcml2LT5tX2VuZ2luZXMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoc2VsZi0+cHJpdi0+ bV9lbmdpbmVzLCBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5 KSBnX29iamVjdF91bnJlZiksIE5VTEwpOworKwkJc2VsZi0+cHJpdi0+bV9lbmdpbmVzID0gX3Rt cDM4XzsKKysJCXNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxID0gX3RtcDM4X19sZW5ndGgx OworKwkJc2VsZi0+cHJpdi0+X21fZW5naW5lc19zaXplXyA9IHNlbGYtPnByaXYtPm1fZW5naW5l c19sZW5ndGgxOworKwkJcGFuZWxfc3dpdGNoX2VuZ2luZSAoc2VsZiwgMCwgVFJVRSk7CisrCX0g ZWxzZSB7CisrCQlJQnVzRW5naW5lRGVzYyoqIF90bXAzOV87CisrCQlnaW50IF90bXAzOV9fbGVu Z3RoMTsKKysJCUlCdXNFbmdpbmVEZXNjKiBfdG1wNDBfOworKwkJSUJ1c0VuZ2luZURlc2MqIF90 bXA0MV87CisrCQlJQnVzRW5naW5lRGVzYyogY3VycmVudF9lbmdpbmU7CisrCQlJQnVzRW5naW5l RGVzYyoqIF90bXA0Ml87CisrCQlnaW50IF90bXA0Ml9fbGVuZ3RoMTsKKysJCUlCdXNFbmdpbmVE ZXNjKiogX3RtcDQzXzsKKysJCWdpbnQgX3RtcDQzX19sZW5ndGgxOworKwkJZ2ludCBpID0gMDsK KysJCV90bXAzOV8gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXM7CisrCQlfdG1wMzlfX2xlbmd0aDEg PSBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMTsKKysJCV90bXA0MF8gPSBfdG1wMzlfWzBd OworKwkJX3RtcDQxXyA9IF9nX29iamVjdF9yZWYwIChfdG1wNDBfKTsKKysJCWN1cnJlbnRfZW5n aW5lID0gX3RtcDQxXzsKKysJCV90bXA0Ml8gPSBlbmdpbmVzOworKwkJX3RtcDQyX19sZW5ndGgx ID0gZW5naW5lc19sZW5ndGgxOworKwkJX3RtcDQzXyA9IChfdG1wNDJfICE9IE5VTEwpID8gX3Zh bGFfYXJyYXlfZHVwNCAoX3RtcDQyXywgX3RtcDQyX19sZW5ndGgxKSA6ICgoZ3BvaW50ZXIpIF90 bXA0Ml8pOworKwkJX3RtcDQzX19sZW5ndGgxID0gX3RtcDQyX19sZW5ndGgxOworKwkJc2VsZi0+ cHJpdi0+bV9lbmdpbmVzID0gKF92YWxhX2FycmF5X2ZyZWUgKHNlbGYtPnByaXYtPm1fZW5naW5l cywgc2VsZi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19vYmpl Y3RfdW5yZWYpLCBOVUxMKTsKKysJCXNlbGYtPnByaXYtPm1fZW5naW5lcyA9IF90bXA0M187Cisr CQlzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMSA9IF90bXA0M19fbGVuZ3RoMTsKKysJCXNl bGYtPnByaXYtPl9tX2VuZ2luZXNfc2l6ZV8gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3Ro MTsKKysJCXsKKysJCQlnYm9vbGVhbiBfdG1wNDRfOworKwkJCWkgPSAwOworKwkJCV90bXA0NF8g PSBUUlVFOworKwkJCXdoaWxlIChUUlVFKSB7CisrCQkJCWdib29sZWFuIF90bXA0NV87CisrCQkJ CWdpbnQgX3RtcDQ3XzsKKysJCQkJSUJ1c0VuZ2luZURlc2MqKiBfdG1wNDhfOworKwkJCQlnaW50 IF90bXA0OF9fbGVuZ3RoMTsKKysJCQkJSUJ1c0VuZ2luZURlc2MqIF90bXA0OV87CisrCQkJCWNv bnN0IGdjaGFyKiBfdG1wNTBfID0gTlVMTDsKKysJCQkJSUJ1c0VuZ2luZURlc2MqKiBfdG1wNTFf OworKwkJCQlnaW50IF90bXA1MV9fbGVuZ3RoMTsKKysJCQkJZ2ludCBfdG1wNTJfOworKwkJCQlJ QnVzRW5naW5lRGVzYyogX3RtcDUzXzsKKysJCQkJY29uc3QgZ2NoYXIqIF90bXA1NF8gPSBOVUxM OworKwkJCQlfdG1wNDVfID0gX3RtcDQ0XzsKKysJCQkJaWYgKCFfdG1wNDVfKSB7CisrCQkJCQln aW50IF90bXA0Nl87CisrCQkJCQlfdG1wNDZfID0gaTsKKysJCQkJCWkgPSBfdG1wNDZfICsgMTsK KysJCQkJfQorKwkJCQlfdG1wNDRfID0gRkFMU0U7CisrCQkJCV90bXA0N18gPSBpOworKwkJCQlf dG1wNDhfID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzOworKwkJCQlfdG1wNDhfX2xlbmd0aDEgPSBz ZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMTsKKysJCQkJaWYgKCEoX3RtcDQ3XyA8IF90bXA0 OF9fbGVuZ3RoMSkpIHsKKysJCQkJCWJyZWFrOworKwkJCQl9CisrCQkJCV90bXA0OV8gPSBjdXJy ZW50X2VuZ2luZTsKKysJCQkJX3RtcDUwXyA9IGlidXNfZW5naW5lX2Rlc2NfZ2V0X25hbWUgKF90 bXA0OV8pOworKwkJCQlfdG1wNTFfID0gZW5naW5lczsKKysJCQkJX3RtcDUxX19sZW5ndGgxID0g ZW5naW5lc19sZW5ndGgxOworKwkJCQlfdG1wNTJfID0gaTsKKysJCQkJX3RtcDUzXyA9IF90bXA1 MV9bX3RtcDUyX107CisrCQkJCV90bXA1NF8gPSBpYnVzX2VuZ2luZV9kZXNjX2dldF9uYW1lIChf dG1wNTNfKTsKKysJCQkJaWYgKGdfc3RyY21wMCAoX3RtcDUwXywgX3RtcDU0XykgPT0gMCkgewor KwkJCQkJZ2ludCBfdG1wNTVfOworKwkJCQkJX3RtcDU1XyA9IGk7CisrCQkJCQlwYW5lbF9zd2l0 Y2hfZW5naW5lIChzZWxmLCBfdG1wNTVfLCBGQUxTRSk7CisrCQkJCQlfZ19vYmplY3RfdW5yZWYw IChjdXJyZW50X2VuZ2luZSk7CisrCQkJCQllbmdpbmVzID0gKF92YWxhX2FycmF5X2ZyZWUgKGVu Z2luZXMsIGVuZ2luZXNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX29iamVjdF91bnJlZiks IE5VTEwpOworKwkJCQkJbmFtZXMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAobmFtZXMsIG5hbWVzX2xl bmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCQkJCQlvcmRlcl9uYW1l cyA9IChfdmFsYV9hcnJheV9mcmVlIChvcmRlcl9uYW1lcywgb3JkZXJfbmFtZXNfbGVuZ3RoMSwg KEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKKysJCQkJCV90bXAxMF8gPSAoX3ZhbGFf YXJyYXlfZnJlZSAoX3RtcDEwXywgX3RtcDEwX19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdf ZnJlZSksIE5VTEwpOworKwkJCQkJZW5naW5lX25hbWVzID0gKF92YWxhX2FycmF5X2ZyZWUgKGVu Z2luZV9uYW1lcywgZW5naW5lX25hbWVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVl KSwgTlVMTCk7CisrCQkJCQlyZXR1cm47CisrCQkJCX0KKysJCQl9CisrCQl9CisrCQlwYW5lbF9z d2l0Y2hfZW5naW5lIChzZWxmLCAwLCBUUlVFKTsKKysJCV9nX29iamVjdF91bnJlZjAgKGN1cnJl bnRfZW5naW5lKTsKKysJfQorKwllbmdpbmVzID0gKF92YWxhX2FycmF5X2ZyZWUgKGVuZ2luZXMs IGVuZ2luZXNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX29iamVjdF91bnJlZiksIE5VTEwp OworKwluYW1lcyA9IChfdmFsYV9hcnJheV9mcmVlIChuYW1lcywgbmFtZXNfbGVuZ3RoMSwgKEdE ZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKKysJb3JkZXJfbmFtZXMgPSAoX3ZhbGFfYXJy YXlfZnJlZSAob3JkZXJfbmFtZXMsIG9yZGVyX25hbWVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlm eSkgZ19mcmVlKSwgTlVMTCk7CisrCV90bXAxMF8gPSAoX3ZhbGFfYXJyYXlfZnJlZSAoX3RtcDEw XywgX3RtcDEwX19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOworKwll bmdpbmVfbmFtZXMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoZW5naW5lX25hbWVzLCBlbmdpbmVfbmFt ZXNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKKyt9CisrCisrCisr c3RhdGljIHZvaWQgX19sYW1iZGExOF8gKFBhbmVsKiBzZWxmLCBHUGlkIHBpZCwgZ2ludCBzdGF0 ZSkgeworKwlHUGlkIF90bXAwXzsKKysJR1BpZCBfdG1wMV87CisrCUdQaWQgX3RtcDJfOworKwlf dG1wMF8gPSBwaWQ7CisrCV90bXAxXyA9IHNlbGYtPnByaXYtPm1fc2V0dXBfcGlkOworKwlpZiAo X3RtcDBfICE9IF90bXAxXykgeworKwkJcmV0dXJuOworKwl9CisrCXNlbGYtPnByaXYtPm1fc2V0 dXBfcGlkID0gKEdQaWQpIDA7CisrCV90bXAyXyA9IHBpZDsKKysJZ19zcGF3bl9jbG9zZV9waWQg KF90bXAyXyk7CisrfQorKworKworK3N0YXRpYyB2b2lkIF9fX2xhbWJkYTE4X19nY2hpbGRfd2F0 Y2hfZnVuYyAoR1BpZCBwaWQsIGdpbnQgc3RhdHVzLCBncG9pbnRlciBzZWxmKSB7CisrCV9fbGFt YmRhMThfIChzZWxmLCBwaWQsIHN0YXR1cyk7CisrfQorKworKworK3N0YXRpYyB2b2lkIHBhbmVs X3Nob3dfc2V0dXBfZGlhbG9nIChQYW5lbCogc2VsZikgeworKwlHUGlkIF90bXAwXzsKKysJZ2No YXIqIF90bXAzXyA9IE5VTEw7CisrCWdjaGFyKiBiaW5hcnk7CisrCUdQaWQgX3RtcDEzXzsKKysJ R0Vycm9yICogX2lubmVyX2Vycm9yXyA9IE5VTEw7CisrCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYg IT0gTlVMTCk7CisrCV90bXAwXyA9IHNlbGYtPnByaXYtPm1fc2V0dXBfcGlkOworKwlpZiAoX3Rt cDBfICE9ICgoR1BpZCkgMCkpIHsKKysJCUdQaWQgX3RtcDFfOworKwkJZ2ludCBfdG1wMl8gPSAw OworKwkJX3RtcDFfID0gc2VsZi0+cHJpdi0+bV9zZXR1cF9waWQ7CisrCQlfdG1wMl8gPSBraWxs ICgocGlkX3QpIF90bXAxXywgU0lHVVNSMSk7CisrCQlpZiAoX3RtcDJfID09IDApIHsKKysJCQly ZXR1cm47CisrCQl9CisrCQlzZWxmLT5wcml2LT5tX3NldHVwX3BpZCA9IChHUGlkKSAwOworKwl9 CisrCV90bXAzXyA9IGdfYnVpbGRfZmlsZW5hbWUgKEJJTkRJUiwgImlidXMtc2V0dXAiLCBOVUxM KTsKKysJYmluYXJ5ID0gX3RtcDNfOworKwl7CisrCQljb25zdCBnY2hhciogX3RtcDRfOworKwkJ Z2NoYXIqIF90bXA1XzsKKysJCWdjaGFyKiBfdG1wNl87CisrCQlnY2hhcioqIF90bXA3XyA9IE5V TEw7CisrCQlnY2hhcioqIF90bXA4XzsKKysJCWdpbnQgX3RtcDhfX2xlbmd0aDE7CisrCQlHUGlk IF90bXA5XyA9IDA7CisrCQlfdG1wNF8gPSBiaW5hcnk7CisrCQlfdG1wNV8gPSBnX3N0cmR1cCAo X3RtcDRfKTsKKysJCV90bXA2XyA9IGdfc3RyZHVwICgiaWJ1cy1zZXR1cCIpOworKwkJX3RtcDdf ID0gZ19uZXcwIChnY2hhciosIDIgKyAxKTsKKysJCV90bXA3X1swXSA9IF90bXA1XzsKKysJCV90 bXA3X1sxXSA9IF90bXA2XzsKKysJCV90bXA4XyA9IF90bXA3XzsKKysJCV90bXA4X19sZW5ndGgx ID0gMjsKKysJCWdfc3Bhd25fYXN5bmMgKE5VTEwsIF90bXA4XywgTlVMTCwgR19TUEFXTl9ET19O T1RfUkVBUF9DSElMRCwgTlVMTCwgTlVMTCwgJl90bXA5XywgJl9pbm5lcl9lcnJvcl8pOworKwkJ c2VsZi0+cHJpdi0+bV9zZXR1cF9waWQgPSBfdG1wOV87CisrCQlfdG1wOF8gPSAoX3ZhbGFfYXJy YXlfZnJlZSAoX3RtcDhfLCBfdG1wOF9fbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUp LCBOVUxMKTsKKysJCWlmIChfaW5uZXJfZXJyb3JfICE9IE5VTEwpIHsKKysJCQlpZiAoX2lubmVy X2Vycm9yXy0+ZG9tYWluID09IEdfU1BBV05fRVJST1IpIHsKKysJCQkJZ290byBfX2NhdGNoMl9n X3NwYXduX2Vycm9yOworKwkJCX0KKysJCQlfZ19mcmVlMCAoYmluYXJ5KTsKKysJCQlnX2NyaXRp Y2FsICgiZmlsZSAlczogbGluZSAlZDogdW5leHBlY3RlZCBlcnJvcjogJXMgKCVzLCAlZCkiLCBf X0ZJTEVfXywgX19MSU5FX18sIF9pbm5lcl9lcnJvcl8tPm1lc3NhZ2UsIGdfcXVhcmtfdG9fc3Ry aW5nIChfaW5uZXJfZXJyb3JfLT5kb21haW4pLCBfaW5uZXJfZXJyb3JfLT5jb2RlKTsKKysJCQln X2NsZWFyX2Vycm9yICgmX2lubmVyX2Vycm9yXyk7CisrCQkJcmV0dXJuOworKwkJfQorKwl9Cisr CWdvdG8gX19maW5hbGx5MjsKKysJX19jYXRjaDJfZ19zcGF3bl9lcnJvcjoKKysJeworKwkJR0Vy cm9yKiBlID0gTlVMTDsKKysJCWNvbnN0IGdjaGFyKiBfdG1wMTBfOworKwkJR0Vycm9yKiBfdG1w MTFfOworKwkJY29uc3QgZ2NoYXIqIF90bXAxMl87CisrCQllID0gX2lubmVyX2Vycm9yXzsKKysJ CV9pbm5lcl9lcnJvcl8gPSBOVUxMOworKwkJX3RtcDEwXyA9IGJpbmFyeTsKKysJCV90bXAxMV8g PSBlOworKwkJX3RtcDEyXyA9IF90bXAxMV8tPm1lc3NhZ2U7CisrCQlnX3dhcm5pbmcgKCJwYW5l bC52YWxhOjQ3ODogRXhlY3V0ZSAlcyBmYWlsZWQhICVzIiwgX3RtcDEwXywgX3RtcDEyXyk7Cisr CQlzZWxmLT5wcml2LT5tX3NldHVwX3BpZCA9IChHUGlkKSAwOworKwkJX2dfZXJyb3JfZnJlZTAg KGUpOworKwl9CisrCV9fZmluYWxseTI6CisrCWlmIChfaW5uZXJfZXJyb3JfICE9IE5VTEwpIHsK KysJCV9nX2ZyZWUwIChiaW5hcnkpOworKwkJZ19jcml0aWNhbCAoImZpbGUgJXM6IGxpbmUgJWQ6 IHVuY2F1Z2h0IGVycm9yOiAlcyAoJXMsICVkKSIsIF9fRklMRV9fLCBfX0xJTkVfXywgX2lubmVy X2Vycm9yXy0+bWVzc2FnZSwgZ19xdWFya190b19zdHJpbmcgKF9pbm5lcl9lcnJvcl8tPmRvbWFp biksIF9pbm5lcl9lcnJvcl8tPmNvZGUpOworKwkJZ19jbGVhcl9lcnJvciAoJl9pbm5lcl9lcnJv cl8pOworKwkJcmV0dXJuOworKwl9CisrCV90bXAxM18gPSBzZWxmLT5wcml2LT5tX3NldHVwX3Bp ZDsKKysJZ19jaGlsZF93YXRjaF9hZGRfZnVsbCAoR19QUklPUklUWV9ERUZBVUxUX0lETEUsIF90 bXAxM18sIF9fX2xhbWJkYTE4X19nY2hpbGRfd2F0Y2hfZnVuYywgZ19vYmplY3RfcmVmIChzZWxm KSwgZ19vYmplY3RfdW5yZWYpOworKwlfZ19mcmVlMCAoYmluYXJ5KTsKKyt9CisrCisrCisrc3Rh dGljIHZvaWQgcGFuZWxfc2hvd19hYm91dF9kaWFsb2cgKFBhbmVsKiBzZWxmKSB7CisrCUd0a0Fi b3V0RGlhbG9nKiBfdG1wMF87CisrCUd0a0Fib3V0RGlhbG9nKiBfdG1wMjVfOworKwlnYm9vbGVh biBfdG1wMjZfID0gRkFMU0U7CisrCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7Cisr CV90bXAwXyA9IHNlbGYtPnByaXYtPm1fYWJvdXRfZGlhbG9nOworKwlpZiAoX3RtcDBfID09IE5V TEwpIHsKKysJCUd0a0Fib3V0RGlhbG9nKiBfdG1wMV87CisrCQlHdGtBYm91dERpYWxvZyogX3Rt cDJfOworKwkJR3RrQWJvdXREaWFsb2cqIF90bXAzXzsKKysJCUd0a0Fib3V0RGlhbG9nKiBfdG1w NF87CisrCQljb25zdCBnY2hhciogX3RtcDVfID0gTlVMTDsKKysJCWdjaGFyKiBfdG1wNl87Cisr CQlnY2hhciogY29weXJpZ2h0OworKwkJR3RrQWJvdXREaWFsb2cqIF90bXA3XzsKKysJCWNvbnN0 IGdjaGFyKiBfdG1wOF87CisrCQlHdGtBYm91dERpYWxvZyogX3RtcDlfOworKwkJR3RrQWJvdXRE aWFsb2cqIF90bXAxMF87CisrCQljb25zdCBnY2hhciogX3RtcDExXyA9IE5VTEw7CisrCQlHdGtB Ym91dERpYWxvZyogX3RtcDEyXzsKKysJCUd0a0Fib3V0RGlhbG9nKiBfdG1wMTNfOworKwkJZ2No YXIqIF90bXAxNF87CisrCQlnY2hhcioqIF90bXAxNV8gPSBOVUxMOworKwkJZ2NoYXIqKiBfdG1w MTZfOworKwkJZ2ludCBfdG1wMTZfX2xlbmd0aDE7CisrCQlHdGtBYm91dERpYWxvZyogX3RtcDE3 XzsKKysJCWdjaGFyKiBfdG1wMThfOworKwkJZ2NoYXIqKiBfdG1wMTlfID0gTlVMTDsKKysJCWdj aGFyKiogX3RtcDIwXzsKKysJCWdpbnQgX3RtcDIwX19sZW5ndGgxOworKwkJR3RrQWJvdXREaWFs b2cqIF90bXAyMV87CisrCQljb25zdCBnY2hhciogX3RtcDIyXyA9IE5VTEw7CisrCQlHdGtBYm91 dERpYWxvZyogX3RtcDIzXzsKKysJCUd0a0Fib3V0RGlhbG9nKiBfdG1wMjRfOworKwkJX3RtcDFf ID0gKEd0a0Fib3V0RGlhbG9nKikgZ3RrX2Fib3V0X2RpYWxvZ19uZXcgKCk7CisrCQlfdG1wMl8g PSBnX29iamVjdF9yZWZfc2luayAoX3RtcDFfKTsKKysJCV9nX29iamVjdF91bnJlZjAgKHNlbGYt PnByaXYtPm1fYWJvdXRfZGlhbG9nKTsKKysJCXNlbGYtPnByaXYtPm1fYWJvdXRfZGlhbG9nID0g X3RtcDJfOworKwkJX3RtcDNfID0gc2VsZi0+cHJpdi0+bV9hYm91dF9kaWFsb2c7CisrCQlndGtf YWJvdXRfZGlhbG9nX3NldF9wcm9ncmFtX25hbWUgKF90bXAzXywgIklCdXMiKTsKKysJCV90bXA0 XyA9IHNlbGYtPnByaXYtPm1fYWJvdXRfZGlhbG9nOworKwkJZ3RrX2Fib3V0X2RpYWxvZ19zZXRf dmVyc2lvbiAoX3RtcDRfLCBJQlVTX1ZFUlNJT04pOworKwkJX3RtcDVfID0gXyAoIkNvcHlyaWdo dCAoYykgMjAwNy0yMDEyIFBlbmcgSHVhbmdcbiIgIkNvcHlyaWdodCAoYykgMjAwNy0yMDEwIFJl ZCBIYXQsIEluYy5cbiIpOworKwkJX3RtcDZfID0gZ19zdHJkdXAgKF90bXA1Xyk7CisrCQljb3B5 cmlnaHQgPSBfdG1wNl87CisrCQlfdG1wN18gPSBzZWxmLT5wcml2LT5tX2Fib3V0X2RpYWxvZzsK KysJCV90bXA4XyA9IGNvcHlyaWdodDsKKysJCWd0a19hYm91dF9kaWFsb2dfc2V0X2NvcHlyaWdo dCAoX3RtcDdfLCBfdG1wOF8pOworKwkJX3RtcDlfID0gc2VsZi0+cHJpdi0+bV9hYm91dF9kaWFs b2c7CisrCQlndGtfYWJvdXRfZGlhbG9nX3NldF9saWNlbnNlIChfdG1wOV8sICJMR1BMIik7Cisr CQlfdG1wMTBfID0gc2VsZi0+cHJpdi0+bV9hYm91dF9kaWFsb2c7CisrCQlfdG1wMTFfID0gXyAo IklCdXMgaXMgYW4gaW50ZWxsaWdlbnQgaW5wdXQgYnVzIGZvciBMaW51eC9Vbml4LiIpOworKwkJ Z3RrX2Fib3V0X2RpYWxvZ19zZXRfY29tbWVudHMgKF90bXAxMF8sIF90bXAxMV8pOworKwkJX3Rt cDEyXyA9IHNlbGYtPnByaXYtPm1fYWJvdXRfZGlhbG9nOworKwkJZ3RrX2Fib3V0X2RpYWxvZ19z ZXRfd2Vic2l0ZSAoX3RtcDEyXywgImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9pYnVzIik7Cisr CQlfdG1wMTNfID0gc2VsZi0+cHJpdi0+bV9hYm91dF9kaWFsb2c7CisrCQlfdG1wMTRfID0gZ19z dHJkdXAgKCJQZW5nIEh1YW5nIDxzaGF3bi5wLmh1YW5nQGdtYWlsLmNvbT4iKTsKKysJCV90bXAx NV8gPSBnX25ldzAgKGdjaGFyKiwgMSArIDEpOworKwkJX3RtcDE1X1swXSA9IF90bXAxNF87Cisr CQlfdG1wMTZfID0gX3RtcDE1XzsKKysJCV90bXAxNl9fbGVuZ3RoMSA9IDE7CisrCQlndGtfYWJv dXRfZGlhbG9nX3NldF9hdXRob3JzIChfdG1wMTNfLCBfdG1wMTZfKTsKKysJCV90bXAxNl8gPSAo X3ZhbGFfYXJyYXlfZnJlZSAoX3RtcDE2XywgX3RtcDE2X19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3Rp ZnkpIGdfZnJlZSksIE5VTEwpOworKwkJX3RtcDE3XyA9IHNlbGYtPnByaXYtPm1fYWJvdXRfZGlh bG9nOworKwkJX3RtcDE4XyA9IGdfc3RyZHVwICgiUGVuZyBIdWFuZyA8c2hhd24ucC5odWFuZ0Bn bWFpbC5jb20+Iik7CisrCQlfdG1wMTlfID0gZ19uZXcwIChnY2hhciosIDEgKyAxKTsKKysJCV90 bXAxOV9bMF0gPSBfdG1wMThfOworKwkJX3RtcDIwXyA9IF90bXAxOV87CisrCQlfdG1wMjBfX2xl bmd0aDEgPSAxOworKwkJZ3RrX2Fib3V0X2RpYWxvZ19zZXRfZG9jdW1lbnRlcnMgKF90bXAxN18s IF90bXAyMF8pOworKwkJX3RtcDIwXyA9IChfdmFsYV9hcnJheV9mcmVlIChfdG1wMjBfLCBfdG1w MjBfX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCQlfdG1wMjFf ID0gc2VsZi0+cHJpdi0+bV9hYm91dF9kaWFsb2c7CisrCQlfdG1wMjJfID0gXyAoInRyYW5zbGF0 b3ItY3JlZGl0cyIpOworKwkJZ3RrX2Fib3V0X2RpYWxvZ19zZXRfdHJhbnNsYXRvcl9jcmVkaXRz IChfdG1wMjFfLCBfdG1wMjJfKTsKKysJCV90bXAyM18gPSBzZWxmLT5wcml2LT5tX2Fib3V0X2Rp YWxvZzsKKysJCWd0a19hYm91dF9kaWFsb2dfc2V0X2xvZ29faWNvbl9uYW1lIChfdG1wMjNfLCAi aWJ1cyIpOworKwkJX3RtcDI0XyA9IHNlbGYtPnByaXYtPm1fYWJvdXRfZGlhbG9nOworKwkJZ3Rr X3dpbmRvd19zZXRfaWNvbl9uYW1lICgoR3RrV2luZG93KikgX3RtcDI0XywgImlidXMiKTsKKysJ CV9nX2ZyZWUwIChjb3B5cmlnaHQpOworKwl9CisrCV90bXAyNV8gPSBzZWxmLT5wcml2LT5tX2Fi b3V0X2RpYWxvZzsKKysJX3RtcDI2XyA9IGd0a193aWRnZXRfZ2V0X3Zpc2libGUgKChHdGtXaWRn ZXQqKSBfdG1wMjVfKTsKKysJaWYgKCFfdG1wMjZfKSB7CisrCQlHdGtBYm91dERpYWxvZyogX3Rt cDI3XzsKKysJCUd0a0Fib3V0RGlhbG9nKiBfdG1wMjhfOworKwkJX3RtcDI3XyA9IHNlbGYtPnBy aXYtPm1fYWJvdXRfZGlhbG9nOworKwkJZ3RrX2RpYWxvZ19ydW4gKChHdGtEaWFsb2cqKSBfdG1w MjdfKTsKKysJCV90bXAyOF8gPSBzZWxmLT5wcml2LT5tX2Fib3V0X2RpYWxvZzsKKysJCWd0a193 aWRnZXRfaGlkZSAoKEd0a1dpZGdldCopIF90bXAyOF8pOworKwl9IGVsc2UgeworKwkJR3RrQWJv dXREaWFsb2cqIF90bXAyOV87CisrCQlfdG1wMjlfID0gc2VsZi0+cHJpdi0+bV9hYm91dF9kaWFs b2c7CisrCQlndGtfd2luZG93X3ByZXNlbnQgKChHdGtXaW5kb3cqKSBfdG1wMjlfKTsKKysJfQor K30KKysKKysKKytzdGF0aWMgdm9pZCBfX19sYW1iZGExN18gKFBhbmVsKiBzZWxmLCBHdGtNZW51 SXRlbSogaSkgeworKwlnX3JldHVybl9pZl9mYWlsIChpICE9IE5VTEwpOworKwlwYW5lbF9zaG93 X3NldHVwX2RpYWxvZyAoc2VsZik7CisrfQorKworKworK3N0YXRpYyB2b2lkIF9fX19sYW1iZGEx N19fZ3RrX21lbnVfaXRlbV9hY3RpdmF0ZSAoR3RrTWVudUl0ZW0qIF9zZW5kZXIsIGdwb2ludGVy IHNlbGYpIHsKKysJX19fbGFtYmRhMTdfIChzZWxmLCBfc2VuZGVyKTsKKyt9CisrCisrCisrc3Rh dGljIHZvaWQgX19fbGFtYmRhMTlfIChQYW5lbCogc2VsZiwgR3RrTWVudUl0ZW0qIGkpIHsKKysJ Z19yZXR1cm5faWZfZmFpbCAoaSAhPSBOVUxMKTsKKysJcGFuZWxfc2hvd19hYm91dF9kaWFsb2cg KHNlbGYpOworK30KKysKKysKKytzdGF0aWMgdm9pZCBfX19fbGFtYmRhMTlfX2d0a19tZW51X2l0 ZW1fYWN0aXZhdGUgKEd0a01lbnVJdGVtKiBfc2VuZGVyLCBncG9pbnRlciBzZWxmKSB7CisrCV9f X2xhbWJkYTE5XyAoc2VsZiwgX3NlbmRlcik7CisrfQorKworKworK3N0YXRpYyB2b2lkIF9fX2xh bWJkYTIwXyAoUGFuZWwqIHNlbGYsIEd0a01lbnVJdGVtKiBpKSB7CisrCUlCdXNCdXMqIF90bXAw XzsKKysJZ19yZXR1cm5faWZfZmFpbCAoaSAhPSBOVUxMKTsKKysJX3RtcDBfID0gc2VsZi0+cHJp di0+bV9idXM7CisrCWlidXNfYnVzX2V4aXQgKF90bXAwXywgVFJVRSk7CisrfQorKworKworK3N0 YXRpYyB2b2lkIF9fX19sYW1iZGEyMF9fZ3RrX21lbnVfaXRlbV9hY3RpdmF0ZSAoR3RrTWVudUl0 ZW0qIF9zZW5kZXIsIGdwb2ludGVyIHNlbGYpIHsKKysJX19fbGFtYmRhMjBfIChzZWxmLCBfc2Vu ZGVyKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX19fbGFtYmRhMjFfIChQYW5lbCogc2VsZiwg R3RrTWVudUl0ZW0qIGkpIHsKKysJSUJ1c0J1cyogX3RtcDBfOworKwlnX3JldHVybl9pZl9mYWls IChpICE9IE5VTEwpOworKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2J1czsKKysJaWJ1c19idXNf ZXhpdCAoX3RtcDBfLCBGQUxTRSk7CisrfQorKworKworK3N0YXRpYyB2b2lkIF9fX19sYW1iZGEy MV9fZ3RrX21lbnVfaXRlbV9hY3RpdmF0ZSAoR3RrTWVudUl0ZW0qIF9zZW5kZXIsIGdwb2ludGVy IHNlbGYpIHsKKysJX19fbGFtYmRhMjFfIChzZWxmLCBfc2VuZGVyKTsKKyt9CisrCisrCisrc3Rh dGljIHZvaWQgX2d0a19zdGF0dXNfaWNvbl9wb3NpdGlvbl9tZW51X2d0a19tZW51X3Bvc2l0aW9u X2Z1bmMgKEd0a01lbnUqIG1lbnUsIGdpbnQqIHgsIGdpbnQqIHksIGdib29sZWFuKiBwdXNoX2lu LCBncG9pbnRlciBzZWxmKSB7CisrCWd0a19zdGF0dXNfaWNvbl9wb3NpdGlvbl9tZW51IChtZW51 LCB4LCB5LCBwdXNoX2luLCBzZWxmKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgcGFuZWxfc3Rh dHVzX2ljb25fcG9wdXBfbWVudV9jYiAoUGFuZWwqIHNlbGYsIEd0a1N0YXR1c0ljb24qIHN0YXR1 c19pY29uLCBndWludCBidXR0b24sIGd1aW50IGFjdGl2YXRlX3RpbWUpIHsKKysJR3RrTWVudSog X3RtcDBfOworKwlHdGtNZW51KiBfdG1wMjlfOworKwlHdGtTdGF0dXNJY29uKiBfdG1wMzBfOwor KwlndWludDMyIF90bXAzMV8gPSAwVTsKKysJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxM KTsKKysJZ19yZXR1cm5faWZfZmFpbCAoc3RhdHVzX2ljb24gIT0gTlVMTCk7CisrCV90bXAwXyA9 IHNlbGYtPnByaXYtPm1fc3lzX21lbnU7CisrCWlmIChfdG1wMF8gPT0gTlVMTCkgeworKwkJR3Rr SW1hZ2VNZW51SXRlbSogaXRlbSA9IE5VTEw7CisrCQlHdGtNZW51KiBfdG1wMV87CisrCQlHdGtN ZW51KiBfdG1wMl87CisrCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wM187CisrCQlHdGtJbWFnZU1l bnVJdGVtKiBfdG1wNF87CisrCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wNV87CisrCQlHdGtNZW51 KiBfdG1wNl87CisrCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wN187CisrCQlHdGtJbWFnZU1lbnVJ dGVtKiBfdG1wOF87CisrCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wOV87CisrCQlHdGtJbWFnZU1l bnVJdGVtKiBfdG1wMTBfOworKwkJR3RrTWVudSogX3RtcDExXzsKKysJCUd0a0ltYWdlTWVudUl0 ZW0qIF90bXAxMl87CisrCQlHdGtNZW51KiBfdG1wMTNfOworKwkJR3RrU2VwYXJhdG9yTWVudUl0 ZW0qIF90bXAxNF87CisrCQlHdGtTZXBhcmF0b3JNZW51SXRlbSogX3RtcDE1XzsKKysJCUd0a0lt YWdlTWVudUl0ZW0qIF90bXAxNl87CisrCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wMTdfOworKwkJ R3RrSW1hZ2VNZW51SXRlbSogX3RtcDE4XzsKKysJCWNvbnN0IGdjaGFyKiBfdG1wMTlfID0gTlVM TDsKKysJCUd0a0ltYWdlTWVudUl0ZW0qIF90bXAyMF87CisrCQlHdGtNZW51KiBfdG1wMjFfOwor KwkJR3RrSW1hZ2VNZW51SXRlbSogX3RtcDIyXzsKKysJCUd0a0ltYWdlTWVudUl0ZW0qIF90bXAy M187CisrCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wMjRfOworKwkJR3RrSW1hZ2VNZW51SXRlbSog X3RtcDI1XzsKKysJCUd0a01lbnUqIF90bXAyNl87CisrCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1w MjdfOworKwkJR3RrTWVudSogX3RtcDI4XzsKKysJCV90bXAxXyA9IChHdGtNZW51KikgZ3RrX21l bnVfbmV3ICgpOworKwkJX3RtcDJfID0gZ19vYmplY3RfcmVmX3NpbmsgKF90bXAxXyk7CisrCQlf Z19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX3N5c19tZW51KTsKKysJCXNlbGYtPnByaXYt Pm1fc3lzX21lbnUgPSBfdG1wMl87CisrCQlfdG1wM18gPSAoR3RrSW1hZ2VNZW51SXRlbSopIGd0 a19pbWFnZV9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2sgKEdUS19TVE9DS19QUkVGRVJFTkNFUywg TlVMTCk7CisrCQlfdG1wNF8gPSBnX29iamVjdF9yZWZfc2luayAoX3RtcDNfKTsKKysJCV9nX29i amVjdF91bnJlZjAgKGl0ZW0pOworKwkJaXRlbSA9IF90bXA0XzsKKysJCV90bXA1XyA9IGl0ZW07 CisrCQlnX3NpZ25hbF9jb25uZWN0X29iamVjdCAoKEd0a01lbnVJdGVtKikgX3RtcDVfLCAiYWN0 aXZhdGUiLCAoR0NhbGxiYWNrKSBfX19fbGFtYmRhMTdfX2d0a19tZW51X2l0ZW1fYWN0aXZhdGUs IHNlbGYsIDApOworKwkJX3RtcDZfID0gc2VsZi0+cHJpdi0+bV9zeXNfbWVudTsKKysJCV90bXA3 XyA9IGl0ZW07CisrCQlndGtfbWVudV9zaGVsbF9hcHBlbmQgKChHdGtNZW51U2hlbGwqKSBfdG1w Nl8sIChHdGtXaWRnZXQqKSAoKEd0a01lbnVJdGVtKikgX3RtcDdfKSk7CisrCQlfdG1wOF8gPSAo R3RrSW1hZ2VNZW51SXRlbSopIGd0a19pbWFnZV9tZW51X2l0ZW1fbmV3X2Zyb21fc3RvY2sgKEdU S19TVE9DS19BQk9VVCwgTlVMTCk7CisrCQlfdG1wOV8gPSBnX29iamVjdF9yZWZfc2luayAoX3Rt cDhfKTsKKysJCV9nX29iamVjdF91bnJlZjAgKGl0ZW0pOworKwkJaXRlbSA9IF90bXA5XzsKKysJ CV90bXAxMF8gPSBpdGVtOworKwkJZ19zaWduYWxfY29ubmVjdF9vYmplY3QgKChHdGtNZW51SXRl bSopIF90bXAxMF8sICJhY3RpdmF0ZSIsIChHQ2FsbGJhY2spIF9fX19sYW1iZGExOV9fZ3RrX21l bnVfaXRlbV9hY3RpdmF0ZSwgc2VsZiwgMCk7CisrCQlfdG1wMTFfID0gc2VsZi0+cHJpdi0+bV9z eXNfbWVudTsKKysJCV90bXAxMl8gPSBpdGVtOworKwkJZ3RrX21lbnVfc2hlbGxfYXBwZW5kICgo R3RrTWVudVNoZWxsKikgX3RtcDExXywgKEd0a1dpZGdldCopICgoR3RrTWVudUl0ZW0qKSBfdG1w MTJfKSk7CisrCQlfdG1wMTNfID0gc2VsZi0+cHJpdi0+bV9zeXNfbWVudTsKKysJCV90bXAxNF8g PSAoR3RrU2VwYXJhdG9yTWVudUl0ZW0qKSBndGtfc2VwYXJhdG9yX21lbnVfaXRlbV9uZXcgKCk7 CisrCQlfdG1wMTVfID0gZ19vYmplY3RfcmVmX3NpbmsgKF90bXAxNF8pOworKwkJZ3RrX21lbnVf c2hlbGxfYXBwZW5kICgoR3RrTWVudVNoZWxsKikgX3RtcDEzXywgKEd0a1dpZGdldCopICgoR3Rr TWVudUl0ZW0qKSBfdG1wMTVfKSk7CisrCQlfZ19vYmplY3RfdW5yZWYwIChfdG1wMTVfKTsKKysJ CV90bXAxNl8gPSAoR3RrSW1hZ2VNZW51SXRlbSopIGd0a19pbWFnZV9tZW51X2l0ZW1fbmV3X2Zy b21fc3RvY2sgKEdUS19TVE9DS19SRUZSRVNILCBOVUxMKTsKKysJCV90bXAxN18gPSBnX29iamVj dF9yZWZfc2luayAoX3RtcDE2Xyk7CisrCQlfZ19vYmplY3RfdW5yZWYwIChpdGVtKTsKKysJCWl0 ZW0gPSBfdG1wMTdfOworKwkJX3RtcDE4XyA9IGl0ZW07CisrCQlfdG1wMTlfID0gXyAoIlJlc3Rh cnQiKTsKKysJCWd0a19tZW51X2l0ZW1fc2V0X2xhYmVsICgoR3RrTWVudUl0ZW0qKSBfdG1wMThf LCBfdG1wMTlfKTsKKysJCV90bXAyMF8gPSBpdGVtOworKwkJZ19zaWduYWxfY29ubmVjdF9vYmpl Y3QgKChHdGtNZW51SXRlbSopIF90bXAyMF8sICJhY3RpdmF0ZSIsIChHQ2FsbGJhY2spIF9fX19s YW1iZGEyMF9fZ3RrX21lbnVfaXRlbV9hY3RpdmF0ZSwgc2VsZiwgMCk7CisrCQlfdG1wMjFfID0g c2VsZi0+cHJpdi0+bV9zeXNfbWVudTsKKysJCV90bXAyMl8gPSBpdGVtOworKwkJZ3RrX21lbnVf c2hlbGxfYXBwZW5kICgoR3RrTWVudVNoZWxsKikgX3RtcDIxXywgKEd0a1dpZGdldCopICgoR3Rr TWVudUl0ZW0qKSBfdG1wMjJfKSk7CisrCQlfdG1wMjNfID0gKEd0a0ltYWdlTWVudUl0ZW0qKSBn dGtfaW1hZ2VfbWVudV9pdGVtX25ld19mcm9tX3N0b2NrIChHVEtfU1RPQ0tfUVVJVCwgTlVMTCk7 CisrCQlfdG1wMjRfID0gZ19vYmplY3RfcmVmX3NpbmsgKF90bXAyM18pOworKwkJX2dfb2JqZWN0 X3VucmVmMCAoaXRlbSk7CisrCQlpdGVtID0gX3RtcDI0XzsKKysJCV90bXAyNV8gPSBpdGVtOwor KwkJZ19zaWduYWxfY29ubmVjdF9vYmplY3QgKChHdGtNZW51SXRlbSopIF90bXAyNV8sICJhY3Rp dmF0ZSIsIChHQ2FsbGJhY2spIF9fX19sYW1iZGEyMV9fZ3RrX21lbnVfaXRlbV9hY3RpdmF0ZSwg c2VsZiwgMCk7CisrCQlfdG1wMjZfID0gc2VsZi0+cHJpdi0+bV9zeXNfbWVudTsKKysJCV90bXAy N18gPSBpdGVtOworKwkJZ3RrX21lbnVfc2hlbGxfYXBwZW5kICgoR3RrTWVudVNoZWxsKikgX3Rt cDI2XywgKEd0a1dpZGdldCopICgoR3RrTWVudUl0ZW0qKSBfdG1wMjdfKSk7CisrCQlfdG1wMjhf ID0gc2VsZi0+cHJpdi0+bV9zeXNfbWVudTsKKysJCWd0a193aWRnZXRfc2hvd19hbGwgKChHdGtX aWRnZXQqKSBfdG1wMjhfKTsKKysJCV9nX29iamVjdF91bnJlZjAgKGl0ZW0pOworKwl9CisrCV90 bXAyOV8gPSBzZWxmLT5wcml2LT5tX3N5c19tZW51OworKwlfdG1wMzBfID0gc2VsZi0+cHJpdi0+ bV9zdGF0dXNfaWNvbjsKKysJX3RtcDMxXyA9IGd0a19nZXRfY3VycmVudF9ldmVudF90aW1lICgp OworKwlndGtfbWVudV9wb3B1cCAoX3RtcDI5XywgTlVMTCwgTlVMTCwgX2d0a19zdGF0dXNfaWNv bl9wb3NpdGlvbl9tZW51X2d0a19tZW51X3Bvc2l0aW9uX2Z1bmMsIF90bXAzMF8sIChndWludCkg MCwgX3RtcDMxXyk7CisrfQorKworKworK3N0YXRpYyBCbG9jazREYXRhKiBibG9jazRfZGF0YV9y ZWYgKEJsb2NrNERhdGEqIF9kYXRhNF8pIHsKKysJZ19hdG9taWNfaW50X2luYyAoJl9kYXRhNF8t Pl9yZWZfY291bnRfKTsKKysJcmV0dXJuIF9kYXRhNF87CisrfQorKworKworK3N0YXRpYyB2b2lk IGJsb2NrNF9kYXRhX3VucmVmIChCbG9jazREYXRhKiBfZGF0YTRfKSB7CisrCWlmIChnX2F0b21p Y19pbnRfZGVjX2FuZF90ZXN0ICgmX2RhdGE0Xy0+X3JlZl9jb3VudF8pKSB7CisrCQlQYW5lbCAq IHNlbGY7CisrCQlzZWxmID0gX2RhdGE0Xy0+c2VsZjsKKysJCV9nX29iamVjdF91bnJlZjAgKF9k YXRhNF8tPmUpOworKwkJX2dfb2JqZWN0X3VucmVmMCAoc2VsZik7CisrCQlnX3NsaWNlX2ZyZWUg KEJsb2NrNERhdGEsIF9kYXRhNF8pOworKwl9CisrfQorKworKworK3N0YXRpYyB2b2lkIF9fX19s YW1iZGEyMl8gKEJsb2NrNERhdGEqIF9kYXRhNF8sIEd0a01lbnVJdGVtKiBpdGVtKSB7CisrCVBh bmVsICogc2VsZjsKKysJc2VsZiA9IF9kYXRhNF8tPnNlbGY7CisrCWdfcmV0dXJuX2lmX2ZhaWwg KGl0ZW0gIT0gTlVMTCk7CisrCXsKKysJCWdpbnQgaTsKKysJCWkgPSAwOworKwkJeworKwkJCWdi b29sZWFuIF90bXAwXzsKKysJCQlfdG1wMF8gPSBUUlVFOworKwkJCXdoaWxlIChUUlVFKSB7Cisr CQkJCWdib29sZWFuIF90bXAxXzsKKysJCQkJZ2ludCBfdG1wM187CisrCQkJCUlCdXNFbmdpbmVE ZXNjKiogX3RtcDRfOworKwkJCQlnaW50IF90bXA0X19sZW5ndGgxOworKwkJCQlJQnVzRW5naW5l RGVzYyogX3RtcDVfOworKwkJCQlJQnVzRW5naW5lRGVzYyoqIF90bXA2XzsKKysJCQkJZ2ludCBf dG1wNl9fbGVuZ3RoMTsKKysJCQkJZ2ludCBfdG1wN187CisrCQkJCUlCdXNFbmdpbmVEZXNjKiBf dG1wOF87CisrCQkJCV90bXAxXyA9IF90bXAwXzsKKysJCQkJaWYgKCFfdG1wMV8pIHsKKysJCQkJ CWdpbnQgX3RtcDJfOworKwkJCQkJX3RtcDJfID0gaTsKKysJCQkJCWkgPSBfdG1wMl8gKyAxOwor KwkJCQl9CisrCQkJCV90bXAwXyA9IEZBTFNFOworKwkJCQlfdG1wM18gPSBpOworKwkJCQlfdG1w NF8gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXM7CisrCQkJCV90bXA0X19sZW5ndGgxID0gc2VsZi0+ cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDE7CisrCQkJCWlmICghKF90bXAzXyA8IF90bXA0X19sZW5n dGgxKSkgeworKwkJCQkJYnJlYWs7CisrCQkJCX0KKysJCQkJX3RtcDVfID0gX2RhdGE0Xy0+ZTsK KysJCQkJX3RtcDZfID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVzOworKwkJCQlfdG1wNl9fbGVuZ3Ro MSA9IHNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxOworKwkJCQlfdG1wN18gPSBpOworKwkJ CQlfdG1wOF8gPSBfdG1wNl9bX3RtcDdfXTsKKysJCQkJaWYgKF90bXA1XyA9PSBfdG1wOF8pIHsK KysJCQkJCWdpbnQgX3RtcDlfOworKwkJCQkJX3RtcDlfID0gaTsKKysJCQkJCXBhbmVsX3N3aXRj aF9lbmdpbmUgKHNlbGYsIF90bXA5XywgRkFMU0UpOworKwkJCQkJYnJlYWs7CisrCQkJCX0KKysJ CQl9CisrCQl9CisrCX0KKyt9CisrCisrCisrc3RhdGljIHZvaWQgX19fX19sYW1iZGEyMl9fZ3Rr X21lbnVfaXRlbV9hY3RpdmF0ZSAoR3RrTWVudUl0ZW0qIF9zZW5kZXIsIGdwb2ludGVyIHNlbGYp IHsKKysJX19fX2xhbWJkYTIyXyAoc2VsZiwgX3NlbmRlcik7CisrfQorKworKworK3N0YXRpYyB2 b2lkIHBhbmVsX3N0YXR1c19pY29uX2FjdGl2YXRlX2NiIChQYW5lbCogc2VsZiwgR3RrU3RhdHVz SWNvbiogc3RhdHVzX2ljb24pIHsKKysJR3RrTWVudSogX3RtcDBfOworKwlHdGtNZW51KiBfdG1w MV87CisrCVByb3BlcnR5TWFuYWdlciogX3RtcDJfOworKwlHdGtNZW51KiBfdG1wM187CisrCUd0 a01lbnUqIF90bXA0XzsKKysJR3RrU2VwYXJhdG9yTWVudUl0ZW0qIF90bXA1XzsKKysJR3RrU2Vw YXJhdG9yTWVudUl0ZW0qIF90bXA2XzsKKysJZ2ludCB3aWR0aCA9IDA7CisrCWdpbnQgaGVpZ2h0 ID0gMDsKKysJZ2ludCBfdG1wN18gPSAwOworKwlnaW50IF90bXA4XyA9IDA7CisrCUlCdXNFbmdp bmVEZXNjKiogX3RtcDlfOworKwlnaW50IF90bXA5X19sZW5ndGgxOworKwlHdGtNZW51KiBfdG1w MzFfOworKwlHdGtNZW51KiBfdG1wMzJfOworKwlHdGtNZW51KiBfdG1wMzNfOworKwlHdGtTdGF0 dXNJY29uKiBfdG1wMzRfOworKwlndWludDMyIF90bXAzNV8gPSAwVTsKKysJZ19yZXR1cm5faWZf ZmFpbCAoc2VsZiAhPSBOVUxMKTsKKysJZ19yZXR1cm5faWZfZmFpbCAoc3RhdHVzX2ljb24gIT0g TlVMTCk7CisrCV90bXAwXyA9IChHdGtNZW51KikgZ3RrX21lbnVfbmV3ICgpOworKwlfdG1wMV8g PSBnX29iamVjdF9yZWZfc2luayAoX3RtcDBfKTsKKysJX2dfb2JqZWN0X3VucmVmMCAoc2VsZi0+ cHJpdi0+bV9pbWVfbWVudSk7CisrCXNlbGYtPnByaXYtPm1faW1lX21lbnUgPSBfdG1wMV87Cisr CV90bXAyXyA9IHNlbGYtPnByaXYtPm1fcHJvcGVydHlfbWFuYWdlcjsKKysJX3RtcDNfID0gc2Vs Zi0+cHJpdi0+bV9pbWVfbWVudTsKKysJcHJvcGVydHlfbWFuYWdlcl9jcmVhdGVfbWVudV9pdGVt cyAoX3RtcDJfLCBfdG1wM18pOworKwlfdG1wNF8gPSBzZWxmLT5wcml2LT5tX2ltZV9tZW51Owor KwlfdG1wNV8gPSAoR3RrU2VwYXJhdG9yTWVudUl0ZW0qKSBndGtfc2VwYXJhdG9yX21lbnVfaXRl bV9uZXcgKCk7CisrCV90bXA2XyA9IGdfb2JqZWN0X3JlZl9zaW5rIChfdG1wNV8pOworKwlndGtf bWVudV9zaGVsbF9hcHBlbmQgKChHdGtNZW51U2hlbGwqKSBfdG1wNF8sIChHdGtXaWRnZXQqKSAo KEd0a01lbnVJdGVtKikgX3RtcDZfKSk7CisrCV9nX29iamVjdF91bnJlZjAgKF90bXA2Xyk7Cisr CWd0a19pY29uX3NpemVfbG9va3VwIChHVEtfSUNPTl9TSVpFX01FTlUsICZfdG1wN18sICZfdG1w OF8pOworKwl3aWR0aCA9IF90bXA3XzsKKysJaGVpZ2h0ID0gX3RtcDhfOworKwlfdG1wOV8gPSBz ZWxmLT5wcml2LT5tX2VuZ2luZXM7CisrCV90bXA5X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV9l bmdpbmVzX2xlbmd0aDE7CisrCXsKKysJCUlCdXNFbmdpbmVEZXNjKiogZW5naW5lX2NvbGxlY3Rp b24gPSBOVUxMOworKwkJZ2ludCBlbmdpbmVfY29sbGVjdGlvbl9sZW5ndGgxID0gMDsKKysJCWdp bnQgX2VuZ2luZV9jb2xsZWN0aW9uX3NpemVfID0gMDsKKysJCWdpbnQgZW5naW5lX2l0ID0gMDsK KysJCWVuZ2luZV9jb2xsZWN0aW9uID0gX3RtcDlfOworKwkJZW5naW5lX2NvbGxlY3Rpb25fbGVu Z3RoMSA9IF90bXA5X19sZW5ndGgxOworKwkJZm9yIChlbmdpbmVfaXQgPSAwOyBlbmdpbmVfaXQg PCBfdG1wOV9fbGVuZ3RoMTsgZW5naW5lX2l0ID0gZW5naW5lX2l0ICsgMSkgeworKwkJCUlCdXNF bmdpbmVEZXNjKiBfdG1wMTBfOworKwkJCUlCdXNFbmdpbmVEZXNjKiBlbmdpbmUgPSBOVUxMOwor KwkJCV90bXAxMF8gPSBfZ19vYmplY3RfcmVmMCAoZW5naW5lX2NvbGxlY3Rpb25bZW5naW5lX2l0 XSk7CisrCQkJZW5naW5lID0gX3RtcDEwXzsKKysJCQl7CisrCQkJCUJsb2NrNERhdGEqIF9kYXRh NF87CisrCQkJCUlCdXNFbmdpbmVEZXNjKiBfdG1wMTFfOworKwkJCQljb25zdCBnY2hhciogX3Rt cDEyXyA9IE5VTEw7CisrCQkJCWdjaGFyKiBfdG1wMTNfOworKwkJCQlnY2hhciogbG9uZ25hbWU7 CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wMTRfOworKwkJCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1w MTVfOworKwkJCQlHdGtJbWFnZU1lbnVJdGVtKiBfdG1wMTZfOworKwkJCQlHdGtJbWFnZU1lbnVJ dGVtKiBpdGVtOworKwkJCQlJQnVzRW5naW5lRGVzYyogX3RtcDE3XzsKKysJCQkJY29uc3QgZ2No YXIqIF90bXAxOF8gPSBOVUxMOworKwkJCQlJQnVzRW5naW5lRGVzYyogX3RtcDI2XzsKKysJCQkJ SUJ1c0VuZ2luZURlc2MqIF90bXAyN187CisrCQkJCUd0a0ltYWdlTWVudUl0ZW0qIF90bXAyOF87 CisrCQkJCUd0a01lbnUqIF90bXAyOV87CisrCQkJCUd0a0ltYWdlTWVudUl0ZW0qIF90bXAzMF87 CisrCQkJCV9kYXRhNF8gPSBnX3NsaWNlX25ldzAgKEJsb2NrNERhdGEpOworKwkJCQlfZGF0YTRf LT5fcmVmX2NvdW50XyA9IDE7CisrCQkJCV9kYXRhNF8tPnNlbGYgPSBnX29iamVjdF9yZWYgKHNl bGYpOworKwkJCQlfdG1wMTFfID0gZW5naW5lOworKwkJCQlfdG1wMTJfID0gaWJ1c19lbmdpbmVf ZGVzY19nZXRfbG9uZ25hbWUgKF90bXAxMV8pOworKwkJCQlfdG1wMTNfID0gZ19zdHJkdXAgKF90 bXAxMl8pOworKwkJCQlsb25nbmFtZSA9IF90bXAxM187CisrCQkJCV90bXAxNF8gPSBsb25nbmFt ZTsKKysJCQkJX3RtcDE1XyA9IChHdGtJbWFnZU1lbnVJdGVtKikgZ3RrX2ltYWdlX21lbnVfaXRl bV9uZXdfd2l0aF9sYWJlbCAoX3RtcDE0Xyk7CisrCQkJCV90bXAxNl8gPSBnX29iamVjdF9yZWZf c2luayAoX3RtcDE1Xyk7CisrCQkJCWl0ZW0gPSBfdG1wMTZfOworKwkJCQlfdG1wMTdfID0gZW5n aW5lOworKwkJCQlfdG1wMThfID0gaWJ1c19lbmdpbmVfZGVzY19nZXRfaWNvbiAoX3RtcDE3Xyk7 CisrCQkJCWlmIChnX3N0cmNtcDAgKF90bXAxOF8sICIiKSAhPSAwKSB7CisrCQkJCQlJQnVzRW5n aW5lRGVzYyogX3RtcDE5XzsKKysJCQkJCWNvbnN0IGdjaGFyKiBfdG1wMjBfID0gTlVMTDsKKysJ CQkJCWdpbnQgX3RtcDIxXzsKKysJCQkJCUljb25XaWRnZXQqIF90bXAyMl87CisrCQkJCQlJY29u V2lkZ2V0KiBfdG1wMjNfOworKwkJCQkJSWNvbldpZGdldCogaWNvbjsKKysJCQkJCUd0a0ltYWdl TWVudUl0ZW0qIF90bXAyNF87CisrCQkJCQlJY29uV2lkZ2V0KiBfdG1wMjVfOworKwkJCQkJX3Rt cDE5XyA9IGVuZ2luZTsKKysJCQkJCV90bXAyMF8gPSBpYnVzX2VuZ2luZV9kZXNjX2dldF9pY29u IChfdG1wMTlfKTsKKysJCQkJCV90bXAyMV8gPSB3aWR0aDsKKysJCQkJCV90bXAyMl8gPSBpY29u X3dpZGdldF9uZXcgKF90bXAyMF8sIF90bXAyMV8pOworKwkJCQkJX3RtcDIzXyA9IGdfb2JqZWN0 X3JlZl9zaW5rIChfdG1wMjJfKTsKKysJCQkJCWljb24gPSBfdG1wMjNfOworKwkJCQkJX3RtcDI0 XyA9IGl0ZW07CisrCQkJCQlfdG1wMjVfID0gaWNvbjsKKysJCQkJCWd0a19pbWFnZV9tZW51X2l0 ZW1fc2V0X2ltYWdlIChfdG1wMjRfLCAoR3RrV2lkZ2V0KikgX3RtcDI1Xyk7CisrCQkJCQlfZ19v YmplY3RfdW5yZWYwIChpY29uKTsKKysJCQkJfQorKwkJCQlfdG1wMjZfID0gZW5naW5lOworKwkJ CQlfdG1wMjdfID0gX2dfb2JqZWN0X3JlZjAgKF90bXAyNl8pOworKwkJCQlfZGF0YTRfLT5lID0g X3RtcDI3XzsKKysJCQkJX3RtcDI4XyA9IGl0ZW07CisrCQkJCWdfc2lnbmFsX2Nvbm5lY3RfZGF0 YSAoKEd0a01lbnVJdGVtKikgX3RtcDI4XywgImFjdGl2YXRlIiwgKEdDYWxsYmFjaykgX19fX19s YW1iZGEyMl9fZ3RrX21lbnVfaXRlbV9hY3RpdmF0ZSwgYmxvY2s0X2RhdGFfcmVmIChfZGF0YTRf KSwgKEdDbG9zdXJlTm90aWZ5KSBibG9jazRfZGF0YV91bnJlZiwgMCk7CisrCQkJCV90bXAyOV8g PSBzZWxmLT5wcml2LT5tX2ltZV9tZW51OworKwkJCQlfdG1wMzBfID0gaXRlbTsKKysJCQkJZ3Rr X2NvbnRhaW5lcl9hZGQgKChHdGtDb250YWluZXIqKSBfdG1wMjlfLCAoR3RrV2lkZ2V0KikgX3Rt cDMwXyk7CisrCQkJCV9nX29iamVjdF91bnJlZjAgKGl0ZW0pOworKwkJCQlfZ19mcmVlMCAobG9u Z25hbWUpOworKwkJCQlfZ19vYmplY3RfdW5yZWYwIChlbmdpbmUpOworKwkJCQlibG9jazRfZGF0 YV91bnJlZiAoX2RhdGE0Xyk7CisrCQkJCV9kYXRhNF8gPSBOVUxMOworKwkJCX0KKysJCX0KKysJ fQorKwlfdG1wMzFfID0gc2VsZi0+cHJpdi0+bV9pbWVfbWVudTsKKysJZ3RrX3dpZGdldF9zaG93 X2FsbCAoKEd0a1dpZGdldCopIF90bXAzMV8pOworKwlfdG1wMzJfID0gc2VsZi0+cHJpdi0+bV9p bWVfbWVudTsKKysJZ3RrX21lbnVfc2hlbGxfc2V0X3Rha2VfZm9jdXMgKChHdGtNZW51U2hlbGwq KSBfdG1wMzJfLCBGQUxTRSk7CisrCV90bXAzM18gPSBzZWxmLT5wcml2LT5tX2ltZV9tZW51Owor KwlfdG1wMzRfID0gc2VsZi0+cHJpdi0+bV9zdGF0dXNfaWNvbjsKKysJX3RtcDM1XyA9IGd0a19n ZXRfY3VycmVudF9ldmVudF90aW1lICgpOworKwlndGtfbWVudV9wb3B1cCAoX3RtcDMzXywgTlVM TCwgTlVMTCwgX2d0a19zdGF0dXNfaWNvbl9wb3NpdGlvbl9tZW51X2d0a19tZW51X3Bvc2l0aW9u X2Z1bmMsIF90bXAzNF8sIChndWludCkgMCwgX3RtcDM1Xyk7CisrfQorKworKworK3N0YXRpYyB2 b2lkIHBhbmVsX3JlYWxfc2V0X2N1cnNvcl9sb2NhdGlvbiAoSUJ1c1BhbmVsU2VydmljZSogYmFz ZSwgZ2ludCB4LCBnaW50IHksIGdpbnQgd2lkdGgsIGdpbnQgaGVpZ2h0KSB7CisrCVBhbmVsICog c2VsZjsKKysJQ2FuZGlkYXRlUGFuZWwqIF90bXAwXzsKKysJZ2ludCBfdG1wMV87CisrCWdpbnQg X3RtcDJfOworKwlnaW50IF90bXAzXzsKKysJZ2ludCBfdG1wNF87CisrCXNlbGYgPSAoUGFuZWwq KSBiYXNlOworKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2NhbmRpZGF0ZV9wYW5lbDsKKysJX3Rt cDFfID0geDsKKysJX3RtcDJfID0geTsKKysJX3RtcDNfID0gd2lkdGg7CisrCV90bXA0XyA9IGhl aWdodDsKKysJY2FuZGlkYXRlX3BhbmVsX3NldF9jdXJzb3JfbG9jYXRpb24gKF90bXAwXywgX3Rt cDFfLCBfdG1wMl8sIF90bXAzXywgX3RtcDRfKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgcGFu ZWxfcmVhbF9mb2N1c19pbiAoSUJ1c1BhbmVsU2VydmljZSogYmFzZSwgY29uc3QgZ2NoYXIqIGlu cHV0X2NvbnRleHRfcGF0aCkgeworKwlQYW5lbCAqIHNlbGY7CisrCXNlbGYgPSAoUGFuZWwqKSBi YXNlOworKwlnX3JldHVybl9pZl9mYWlsIChpbnB1dF9jb250ZXh0X3BhdGggIT0gTlVMTCk7Cisr fQorKworKworK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfZm9jdXNfb3V0IChJQnVzUGFuZWxTZXJ2 aWNlKiBiYXNlLCBjb25zdCBnY2hhciogaW5wdXRfY29udGV4dF9wYXRoKSB7CisrCVBhbmVsICog c2VsZjsKKysJc2VsZiA9IChQYW5lbCopIGJhc2U7CisrCWdfcmV0dXJuX2lmX2ZhaWwgKGlucHV0 X2NvbnRleHRfcGF0aCAhPSBOVUxMKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgcGFuZWxfcmVh bF9yZWdpc3Rlcl9wcm9wZXJ0aWVzIChJQnVzUGFuZWxTZXJ2aWNlKiBiYXNlLCBJQnVzUHJvcExp c3QqIHByb3BzKSB7CisrCVBhbmVsICogc2VsZjsKKysJUHJvcGVydHlNYW5hZ2VyKiBfdG1wMF87 CisrCUlCdXNQcm9wTGlzdCogX3RtcDFfOworKwlzZWxmID0gKFBhbmVsKikgYmFzZTsKKysJZ19y ZXR1cm5faWZfZmFpbCAocHJvcHMgIT0gTlVMTCk7CisrCV90bXAwXyA9IHNlbGYtPnByaXYtPm1f cHJvcGVydHlfbWFuYWdlcjsKKysJX3RtcDFfID0gcHJvcHM7CisrCXByb3BlcnR5X21hbmFnZXJf c2V0X3Byb3BlcnRpZXMgKF90bXAwXywgX3RtcDFfKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQg cGFuZWxfcmVhbF91cGRhdGVfcHJvcGVydHkgKElCdXNQYW5lbFNlcnZpY2UqIGJhc2UsIElCdXNQ cm9wZXJ0eSogcHJvcCkgeworKwlQYW5lbCAqIHNlbGY7CisrCVByb3BlcnR5TWFuYWdlciogX3Rt cDBfOworKwlJQnVzUHJvcGVydHkqIF90bXAxXzsKKysJc2VsZiA9IChQYW5lbCopIGJhc2U7Cisr CWdfcmV0dXJuX2lmX2ZhaWwgKHByb3AgIT0gTlVMTCk7CisrCV90bXAwXyA9IHNlbGYtPnByaXYt Pm1fcHJvcGVydHlfbWFuYWdlcjsKKysJX3RtcDFfID0gcHJvcDsKKysJcHJvcGVydHlfbWFuYWdl cl91cGRhdGVfcHJvcGVydHkgKF90bXAwXywgX3RtcDFfKTsKKyt9CisrCisrCisrc3RhdGljIHZv aWQgcGFuZWxfcmVhbF91cGRhdGVfcHJlZWRpdF90ZXh0IChJQnVzUGFuZWxTZXJ2aWNlKiBiYXNl LCBJQnVzVGV4dCogdGV4dCwgZ3VpbnQgY3Vyc29yX3BvcywgZ2Jvb2xlYW4gdmlzaWJsZSkgewor KwlQYW5lbCAqIHNlbGY7CisrCWdib29sZWFuIF90bXAwXzsKKysJc2VsZiA9IChQYW5lbCopIGJh c2U7CisrCWdfcmV0dXJuX2lmX2ZhaWwgKHRleHQgIT0gTlVMTCk7CisrCV90bXAwXyA9IHZpc2li bGU7CisrCWlmIChfdG1wMF8pIHsKKysJCUNhbmRpZGF0ZVBhbmVsKiBfdG1wMV87CisrCQlJQnVz VGV4dCogX3RtcDJfOworKwkJZ3VpbnQgX3RtcDNfOworKwkJX3RtcDFfID0gc2VsZi0+cHJpdi0+ bV9jYW5kaWRhdGVfcGFuZWw7CisrCQlfdG1wMl8gPSB0ZXh0OworKwkJX3RtcDNfID0gY3Vyc29y X3BvczsKKysJCWNhbmRpZGF0ZV9wYW5lbF9zZXRfcHJlZWRpdF90ZXh0IChfdG1wMV8sIF90bXAy XywgX3RtcDNfKTsKKysJfSBlbHNlIHsKKysJCUNhbmRpZGF0ZVBhbmVsKiBfdG1wNF87CisrCQlf dG1wNF8gPSBzZWxmLT5wcml2LT5tX2NhbmRpZGF0ZV9wYW5lbDsKKysJCWNhbmRpZGF0ZV9wYW5l bF9zZXRfcHJlZWRpdF90ZXh0IChfdG1wNF8sIE5VTEwsIChndWludCkgMCk7CisrCX0KKyt9Cisr CisrCisrc3RhdGljIHZvaWQgcGFuZWxfcmVhbF9oaWRlX3ByZWVkaXRfdGV4dCAoSUJ1c1BhbmVs U2VydmljZSogYmFzZSkgeworKwlQYW5lbCAqIHNlbGY7CisrCUNhbmRpZGF0ZVBhbmVsKiBfdG1w MF87CisrCXNlbGYgPSAoUGFuZWwqKSBiYXNlOworKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2Nh bmRpZGF0ZV9wYW5lbDsKKysJY2FuZGlkYXRlX3BhbmVsX3NldF9wcmVlZGl0X3RleHQgKF90bXAw XywgTlVMTCwgKGd1aW50KSAwKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgcGFuZWxfcmVhbF91 cGRhdGVfYXV4aWxpYXJ5X3RleHQgKElCdXNQYW5lbFNlcnZpY2UqIGJhc2UsIElCdXNUZXh0KiB0 ZXh0LCBnYm9vbGVhbiB2aXNpYmxlKSB7CisrCVBhbmVsICogc2VsZjsKKysJSUJ1c1RleHQqIF90 bXAwXyA9IE5VTEw7CisrCWdib29sZWFuIF90bXAxXzsKKysJQ2FuZGlkYXRlUGFuZWwqIF90bXAz XzsKKysJSUJ1c1RleHQqIF90bXA0XzsKKysJc2VsZiA9IChQYW5lbCopIGJhc2U7CisrCWdfcmV0 dXJuX2lmX2ZhaWwgKHRleHQgIT0gTlVMTCk7CisrCV90bXAxXyA9IHZpc2libGU7CisrCWlmIChf dG1wMV8pIHsKKysJCUlCdXNUZXh0KiBfdG1wMl87CisrCQlfdG1wMl8gPSB0ZXh0OworKwkJX3Rt cDBfID0gX3RtcDJfOworKwl9IGVsc2UgeworKwkJX3RtcDBfID0gTlVMTDsKKysJfQorKwlfdG1w M18gPSBzZWxmLT5wcml2LT5tX2NhbmRpZGF0ZV9wYW5lbDsKKysJX3RtcDRfID0gX3RtcDBfOwor KwljYW5kaWRhdGVfcGFuZWxfc2V0X2F1eGlsaWFyeV90ZXh0IChfdG1wM18sIF90bXA0Xyk7Cisr fQorKworKworK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxfaGlkZV9hdXhpbGlhcnlfdGV4dCAoSUJ1 c1BhbmVsU2VydmljZSogYmFzZSkgeworKwlQYW5lbCAqIHNlbGY7CisrCUNhbmRpZGF0ZVBhbmVs KiBfdG1wMF87CisrCXNlbGYgPSAoUGFuZWwqKSBiYXNlOworKwlfdG1wMF8gPSBzZWxmLT5wcml2 LT5tX2NhbmRpZGF0ZV9wYW5lbDsKKysJY2FuZGlkYXRlX3BhbmVsX3NldF9hdXhpbGlhcnlfdGV4 dCAoX3RtcDBfLCBOVUxMKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgcGFuZWxfcmVhbF91cGRh dGVfbG9va3VwX3RhYmxlIChJQnVzUGFuZWxTZXJ2aWNlKiBiYXNlLCBJQnVzTG9va3VwVGFibGUq IHRhYmxlLCBnYm9vbGVhbiB2aXNpYmxlKSB7CisrCVBhbmVsICogc2VsZjsKKysJSUJ1c0xvb2t1 cFRhYmxlKiBfdG1wMF8gPSBOVUxMOworKwlnYm9vbGVhbiBfdG1wMV87CisrCUNhbmRpZGF0ZVBh bmVsKiBfdG1wM187CisrCUlCdXNMb29rdXBUYWJsZSogX3RtcDRfOworKwlzZWxmID0gKFBhbmVs KikgYmFzZTsKKysJZ19yZXR1cm5faWZfZmFpbCAodGFibGUgIT0gTlVMTCk7CisrCV90bXAxXyA9 IHZpc2libGU7CisrCWlmIChfdG1wMV8pIHsKKysJCUlCdXNMb29rdXBUYWJsZSogX3RtcDJfOwor KwkJX3RtcDJfID0gdGFibGU7CisrCQlfdG1wMF8gPSBfdG1wMl87CisrCX0gZWxzZSB7CisrCQlf dG1wMF8gPSBOVUxMOworKwl9CisrCV90bXAzXyA9IHNlbGYtPnByaXYtPm1fY2FuZGlkYXRlX3Bh bmVsOworKwlfdG1wNF8gPSBfdG1wMF87CisrCWNhbmRpZGF0ZV9wYW5lbF9zZXRfbG9va3VwX3Rh YmxlIChfdG1wM18sIF90bXA0Xyk7CisrfQorKworKworK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxf aGlkZV9sb29rdXBfdGFibGUgKElCdXNQYW5lbFNlcnZpY2UqIGJhc2UpIHsKKysJUGFuZWwgKiBz ZWxmOworKwlDYW5kaWRhdGVQYW5lbCogX3RtcDBfOworKwlzZWxmID0gKFBhbmVsKikgYmFzZTsK KysJX3RtcDBfID0gc2VsZi0+cHJpdi0+bV9jYW5kaWRhdGVfcGFuZWw7CisrCWNhbmRpZGF0ZV9w YW5lbF9zZXRfbG9va3VwX3RhYmxlIChfdG1wMF8sIE5VTEwpOworK30KKysKKysKKytzdGF0aWMg Z2NoYXIgc3RyaW5nX2dldCAoY29uc3QgZ2NoYXIqIHNlbGYsIGdsb25nIGluZGV4KSB7CisrCWdj aGFyIHJlc3VsdCA9ICdcMCc7CisrCWdsb25nIF90bXAwXzsKKysJZ2NoYXIgX3RtcDFfOworKwln X3JldHVybl92YWxfaWZfZmFpbCAoc2VsZiAhPSBOVUxMLCAnXDAnKTsKKysJX3RtcDBfID0gaW5k ZXg7CisrCV90bXAxXyA9ICgoZ2NoYXIqKSBzZWxmKVtfdG1wMF9dOworKwlyZXN1bHQgPSBfdG1w MV87CisrCXJldHVybiByZXN1bHQ7CisrfQorKworKworK3N0YXRpYyB2b2lkIHBhbmVsX3JlYWxf c3RhdGVfY2hhbmdlZCAoSUJ1c1BhbmVsU2VydmljZSogYmFzZSkgeworKwlQYW5lbCAqIHNlbGY7 CisrCWdjaGFyKiBfdG1wMF87CisrCWdjaGFyKiBpY29uX25hbWU7CisrCUlCdXNCdXMqIF90bXAx XzsKKysJSUJ1c0VuZ2luZURlc2MqIF90bXAyXyA9IE5VTEw7CisrCUlCdXNFbmdpbmVEZXNjKiBf dG1wM187CisrCUlCdXNFbmdpbmVEZXNjKiBlbmdpbmU7CisrCUlCdXNFbmdpbmVEZXNjKiBfdG1w NF87CisrCWNvbnN0IGdjaGFyKiBfdG1wOF87CisrCWdjaGFyIF90bXA5XyA9ICdcMCc7CisrCXNl bGYgPSAoUGFuZWwqKSBiYXNlOworKwlfdG1wMF8gPSBnX3N0cmR1cCAoImlidXMta2V5Ym9hcmQi KTsKKysJaWNvbl9uYW1lID0gX3RtcDBfOworKwlfdG1wMV8gPSBzZWxmLT5wcml2LT5tX2J1czsK KysJX3RtcDJfID0gaWJ1c19idXNfZ2V0X2dsb2JhbF9lbmdpbmUgKF90bXAxXyk7CisrCV90bXAz XyA9IF9nX29iamVjdF9yZWYwIChfdG1wMl8pOworKwllbmdpbmUgPSBfdG1wM187CisrCV90bXA0 XyA9IGVuZ2luZTsKKysJaWYgKF90bXA0XyAhPSBOVUxMKSB7CisrCQlJQnVzRW5naW5lRGVzYyog X3RtcDVfOworKwkJY29uc3QgZ2NoYXIqIF90bXA2XyA9IE5VTEw7CisrCQlnY2hhciogX3RtcDdf OworKwkJX3RtcDVfID0gZW5naW5lOworKwkJX3RtcDZfID0gaWJ1c19lbmdpbmVfZGVzY19nZXRf aWNvbiAoX3RtcDVfKTsKKysJCV90bXA3XyA9IGdfc3RyZHVwIChfdG1wNl8pOworKwkJX2dfZnJl ZTAgKGljb25fbmFtZSk7CisrCQlpY29uX25hbWUgPSBfdG1wN187CisrCX0KKysJX3RtcDhfID0g aWNvbl9uYW1lOworKwlfdG1wOV8gPSBzdHJpbmdfZ2V0IChfdG1wOF8sIChnbG9uZykgMCk7Cisr CWlmIChfdG1wOV8gPT0gJy8nKSB7CisrCQlHdGtTdGF0dXNJY29uKiBfdG1wMTBfOworKwkJY29u c3QgZ2NoYXIqIF90bXAxMV87CisrCQlfdG1wMTBfID0gc2VsZi0+cHJpdi0+bV9zdGF0dXNfaWNv bjsKKysJCV90bXAxMV8gPSBpY29uX25hbWU7CisrCQlndGtfc3RhdHVzX2ljb25fc2V0X2Zyb21f ZmlsZSAoX3RtcDEwXywgX3RtcDExXyk7CisrCX0gZWxzZSB7CisrCQlHdGtTdGF0dXNJY29uKiBf dG1wMTJfOworKwkJY29uc3QgZ2NoYXIqIF90bXAxM187CisrCQlfdG1wMTJfID0gc2VsZi0+cHJp di0+bV9zdGF0dXNfaWNvbjsKKysJCV90bXAxM18gPSBpY29uX25hbWU7CisrCQlndGtfc3RhdHVz X2ljb25fc2V0X2Zyb21faWNvbl9uYW1lIChfdG1wMTJfLCBfdG1wMTNfKTsKKysJfQorKwlfZ19v YmplY3RfdW5yZWYwIChlbmdpbmUpOworKwlfZ19mcmVlMCAoaWNvbl9uYW1lKTsKKyt9CisrCisr Cisrc3RhdGljIHZvaWQgcGFuZWxfY2xhc3NfaW5pdCAoUGFuZWxDbGFzcyAqIGtsYXNzKSB7Cisr CXBhbmVsX3BhcmVudF9jbGFzcyA9IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOwor KwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKFBhbmVsUHJpdmF0ZSkp OworKwlJQlVTX1BBTkVMX1NFUlZJQ0VfQ0xBU1MgKGtsYXNzKS0+c2V0X2N1cnNvcl9sb2NhdGlv biA9IHBhbmVsX3JlYWxfc2V0X2N1cnNvcl9sb2NhdGlvbjsKKysJSUJVU19QQU5FTF9TRVJWSUNF X0NMQVNTIChrbGFzcyktPmZvY3VzX2luID0gcGFuZWxfcmVhbF9mb2N1c19pbjsKKysJSUJVU19Q QU5FTF9TRVJWSUNFX0NMQVNTIChrbGFzcyktPmZvY3VzX291dCA9IHBhbmVsX3JlYWxfZm9jdXNf b3V0OworKwlJQlVTX1BBTkVMX1NFUlZJQ0VfQ0xBU1MgKGtsYXNzKS0+cmVnaXN0ZXJfcHJvcGVy dGllcyA9IHBhbmVsX3JlYWxfcmVnaXN0ZXJfcHJvcGVydGllczsKKysJSUJVU19QQU5FTF9TRVJW SUNFX0NMQVNTIChrbGFzcyktPnVwZGF0ZV9wcm9wZXJ0eSA9IHBhbmVsX3JlYWxfdXBkYXRlX3By b3BlcnR5OworKwlJQlVTX1BBTkVMX1NFUlZJQ0VfQ0xBU1MgKGtsYXNzKS0+dXBkYXRlX3ByZWVk aXRfdGV4dCA9IHBhbmVsX3JlYWxfdXBkYXRlX3ByZWVkaXRfdGV4dDsKKysJSUJVU19QQU5FTF9T RVJWSUNFX0NMQVNTIChrbGFzcyktPmhpZGVfcHJlZWRpdF90ZXh0ID0gcGFuZWxfcmVhbF9oaWRl X3ByZWVkaXRfdGV4dDsKKysJSUJVU19QQU5FTF9TRVJWSUNFX0NMQVNTIChrbGFzcyktPnVwZGF0 ZV9hdXhpbGlhcnlfdGV4dCA9IHBhbmVsX3JlYWxfdXBkYXRlX2F1eGlsaWFyeV90ZXh0OworKwlJ QlVTX1BBTkVMX1NFUlZJQ0VfQ0xBU1MgKGtsYXNzKS0+aGlkZV9hdXhpbGlhcnlfdGV4dCA9IHBh bmVsX3JlYWxfaGlkZV9hdXhpbGlhcnlfdGV4dDsKKysJSUJVU19QQU5FTF9TRVJWSUNFX0NMQVNT IChrbGFzcyktPnVwZGF0ZV9sb29rdXBfdGFibGUgPSBwYW5lbF9yZWFsX3VwZGF0ZV9sb29rdXBf dGFibGU7CisrCUlCVVNfUEFORUxfU0VSVklDRV9DTEFTUyAoa2xhc3MpLT5oaWRlX2xvb2t1cF90 YWJsZSA9IHBhbmVsX3JlYWxfaGlkZV9sb29rdXBfdGFibGU7CisrCUlCVVNfUEFORUxfU0VSVklD RV9DTEFTUyAoa2xhc3MpLT5zdGF0ZV9jaGFuZ2VkID0gcGFuZWxfcmVhbF9zdGF0ZV9jaGFuZ2Vk OworKwlHX09CSkVDVF9DTEFTUyAoa2xhc3MpLT5maW5hbGl6ZSA9IHBhbmVsX2ZpbmFsaXplOwor K30KKysKKysKKytzdGF0aWMgdm9pZCBwYW5lbF9pbnN0YW5jZV9pbml0IChQYW5lbCAqIHNlbGYp IHsKKysJSUJ1c0VuZ2luZURlc2MqKiBfdG1wMF8gPSBOVUxMOworKwlnY2hhcioqIF90bXAxXyA9 IE5VTEw7CisrCWdjaGFyKiogX3RtcDJfID0gTlVMTDsKKysJZ2NoYXIqKiBfdG1wM18gPSBOVUxM OworKwlzZWxmLT5wcml2ID0gUEFORUxfR0VUX1BSSVZBVEUgKHNlbGYpOworKwlfdG1wMF8gPSBn X25ldzAgKElCdXNFbmdpbmVEZXNjKiwgMCArIDEpOworKwlzZWxmLT5wcml2LT5tX2VuZ2luZXMg PSBfdG1wMF87CisrCXNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxID0gMDsKKysJc2VsZi0+ cHJpdi0+X21fZW5naW5lc19zaXplXyA9IHNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxOwor KwlzZWxmLT5wcml2LT5tX3NldHVwX3BpZCA9IChHUGlkKSAwOworKwlzZWxmLT5wcml2LT5tX2dr YmRsYXlvdXQgPSBOVUxMOworKwlzZWxmLT5wcml2LT5tX3hrYmxheW91dCA9IE5VTEw7CisrCV90 bXAxXyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7CisrCXNlbGYtPnByaXYtPm1fbGF5b3V0cyA9 IF90bXAxXzsKKysJc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0aDEgPSAwOworKwlzZWxmLT5w cml2LT5fbV9sYXlvdXRzX3NpemVfID0gc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0aDE7Cisr CV90bXAyXyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7CisrCXNlbGYtPnByaXYtPm1fdmFyaWFu dHMgPSBfdG1wMl87CisrCXNlbGYtPnByaXYtPm1fdmFyaWFudHNfbGVuZ3RoMSA9IDA7CisrCXNl bGYtPnByaXYtPl9tX3ZhcmlhbnRzX3NpemVfID0gc2VsZi0+cHJpdi0+bV92YXJpYW50c19sZW5n dGgxOworKwlzZWxmLT5wcml2LT5tX2ZhbGxiYWNrX2xvY2tfaWQgPSAtMTsKKysJc2VsZi0+cHJp di0+bV9jaGFuZ2VkX3hrYl9vcHRpb24gPSBGQUxTRTsKKysJX3RtcDNfID0gZ19uZXcwIChnY2hh ciosIDAgKyAxKTsKKysJc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVMgPSBfdG1w M187CisrCXNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDEgPSAwOwor KwlzZWxmLT5wcml2LT5fQUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfc2l6ZV8gPSBzZWxmLT5wcml2 LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxOworK30KKysKKysKKytzdGF0aWMgdm9p ZCBwYW5lbF9maW5hbGl6ZSAoR09iamVjdCogb2JqKSB7CisrCVBhbmVsICogc2VsZjsKKysJS2V5 YmluZGluZ01hbmFnZXIqIF90bXAwXyA9IE5VTEw7CisrCUtleWJpbmRpbmdNYW5hZ2VyKiBrZXli aW5kaW5nX21hbmFnZXI7CisrCWdjaGFyKiogX3RtcDFfOworKwlnaW50IF90bXAxX19sZW5ndGgx OworKwlnYm9vbGVhbiBfdG1wN18gPSBGQUxTRTsKKysJZ2Jvb2xlYW4gX3RtcDlfOworKwlzZWxm ID0gUEFORUwgKG9iaik7CisrCV90bXAwXyA9IGtleWJpbmRpbmdfbWFuYWdlcl9nZXRfaW5zdGFu Y2UgKCk7CisrCWtleWJpbmRpbmdfbWFuYWdlciA9IF90bXAwXzsKKysJX3RtcDFfID0gc2VsZi0+ cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVM7CisrCV90bXAxX19sZW5ndGgxID0gc2VsZi0+ cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMTsKKysJeworKwkJZ2NoYXIqKiBr ZXliaW5kaW5nX2NvbGxlY3Rpb24gPSBOVUxMOworKwkJZ2ludCBrZXliaW5kaW5nX2NvbGxlY3Rp b25fbGVuZ3RoMSA9IDA7CisrCQlnaW50IF9rZXliaW5kaW5nX2NvbGxlY3Rpb25fc2l6ZV8gPSAw OworKwkJZ2ludCBrZXliaW5kaW5nX2l0ID0gMDsKKysJCWtleWJpbmRpbmdfY29sbGVjdGlvbiA9 IF90bXAxXzsKKysJCWtleWJpbmRpbmdfY29sbGVjdGlvbl9sZW5ndGgxID0gX3RtcDFfX2xlbmd0 aDE7CisrCQlmb3IgKGtleWJpbmRpbmdfaXQgPSAwOyBrZXliaW5kaW5nX2l0IDwgX3RtcDFfX2xl bmd0aDE7IGtleWJpbmRpbmdfaXQgPSBrZXliaW5kaW5nX2l0ICsgMSkgeworKwkJCWdjaGFyKiBf dG1wMl87CisrCQkJZ2NoYXIqIGtleWJpbmRpbmcgPSBOVUxMOworKwkJCV90bXAyXyA9IGdfc3Ry ZHVwIChrZXliaW5kaW5nX2NvbGxlY3Rpb25ba2V5YmluZGluZ19pdF0pOworKwkJCWtleWJpbmRp bmcgPSBfdG1wMl87CisrCQkJeworKwkJCQlLZXliaW5kaW5nTWFuYWdlciogX3RtcDNfOworKwkJ CQljb25zdCBnY2hhciogX3RtcDRfOworKwkJCQljb25zdCBnY2hhciogX3RtcDVfOworKwkJCQlf dG1wM18gPSBrZXliaW5kaW5nX21hbmFnZXI7CisrCQkJCV90bXA0XyA9IGtleWJpbmRpbmc7Cisr CQkJCWtleWJpbmRpbmdfbWFuYWdlcl91bmJpbmQgKF90bXAzXywgX3RtcDRfKTsKKysJCQkJX3Rt cDVfID0ga2V5YmluZGluZzsKKysJCQkJaWYgKGdfc3RyY21wMCAoX3RtcDVfLCBQQU5FTF9BQ0NF TEVSQVRPUl9TV0lUQ0hfSU1FX0ZPUkVXQVJEKSA9PSAwKSB7CisrCQkJCQlLZXliaW5kaW5nTWFu YWdlciogX3RtcDZfOworKwkJCQkJX3RtcDZfID0ga2V5YmluZGluZ19tYW5hZ2VyOworKwkJCQkJ a2V5YmluZGluZ19tYW5hZ2VyX3VuYmluZCAoX3RtcDZfLCBQQU5FTF9BQ0NFTEVSQVRPUl9TV0lU Q0hfSU1FX0JBQ0tXQVJEKTsKKysJCQkJfQorKwkJCQlfZ19mcmVlMCAoa2V5YmluZGluZyk7Cisr CQkJfQorKwkJfQorKwl9CisrCWlmIChIQVZFX0lCVVNfR0tCRCkgeworKwkJR2tiZExheW91dCog X3RtcDhfOworKwkJX3RtcDhfID0gc2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0OworKwkJX3RtcDdf ID0gX3RtcDhfICE9IE5VTEw7CisrCX0gZWxzZSB7CisrCQlfdG1wN18gPSBGQUxTRTsKKysJfQor KwlfdG1wOV8gPSBfdG1wN187CisrCWlmIChfdG1wOV8pIHsKKysJCUdrYmRMYXlvdXQqIF90bXAx MF87CisrCQlndWludCBfdG1wMTFfID0gMFU7CisrCQlHa2JkTGF5b3V0KiBfdG1wMTJfOworKwkJ X3RtcDEwXyA9IHNlbGYtPnByaXYtPm1fZ2tiZGxheW91dDsKKysJCWdfc2lnbmFsX3BhcnNlX25h bWUgKCJjaGFuZ2VkIiwgVFlQRV9HS0JEX0xBWU9VVCwgJl90bXAxMV8sIE5VTEwsIEZBTFNFKTsK KysJCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCAoX3RtcDEwXywgR19TSUdO QUxfTUFUQ0hfSUQgfCBHX1NJR05BTF9NQVRDSF9GVU5DIHwgR19TSUdOQUxfTUFUQ0hfREFUQSwg X3RtcDExXywgMCwgTlVMTCwgKEdDYWxsYmFjaykgX3BhbmVsX2drYmRsYXlvdXRfY2hhbmdlZF9j Yl9na2JkX2xheW91dF9jaGFuZ2VkLCBzZWxmKTsKKysJCV90bXAxMl8gPSBzZWxmLT5wcml2LT5t X2drYmRsYXlvdXQ7CisrCQlna2JkX2xheW91dF9zdG9wX2xpc3RlbiAoX3RtcDEyXyk7CisrCQlf Z2tiZF9sYXlvdXRfdW5yZWYwIChzZWxmLT5wcml2LT5tX2drYmRsYXlvdXQpOworKwkJc2VsZi0+ cHJpdi0+bV9na2JkbGF5b3V0ID0gTlVMTDsKKysJfQorKwlfeGtiX2xheW91dF91bnJlZjAgKHNl bGYtPnByaXYtPm1feGtibGF5b3V0KTsKKysJc2VsZi0+cHJpdi0+bV94a2JsYXlvdXQgPSBOVUxM OworKwlfZ19vYmplY3RfdW5yZWYwIChrZXliaW5kaW5nX21hbmFnZXIpOworKwlfZ19vYmplY3Rf dW5yZWYwIChzZWxmLT5wcml2LT5tX2J1cyk7CisrCV9nX29iamVjdF91bnJlZjAgKHNlbGYtPnBy aXYtPm1fY29uZmlnKTsKKysJX2dfb2JqZWN0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9zdGF0dXNf aWNvbik7CisrCV9nX29iamVjdF91bnJlZjAgKHNlbGYtPnByaXYtPm1faW1lX21lbnUpOworKwlf Z19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX3N5c19tZW51KTsKKysJc2VsZi0+cHJpdi0+ bV9lbmdpbmVzID0gKF92YWxhX2FycmF5X2ZyZWUgKHNlbGYtPnByaXYtPm1fZW5naW5lcywgc2Vs Zi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19vYmplY3RfdW5y ZWYpLCBOVUxMKTsKKysJX2dfb2JqZWN0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9jYW5kaWRhdGVf cGFuZWwpOworKwlfZ19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX3N3aXRjaGVyKTsKKysJ X3Byb3BlcnR5X21hbmFnZXJfdW5yZWYwIChzZWxmLT5wcml2LT5tX3Byb3BlcnR5X21hbmFnZXIp OworKwlfZ19vYmplY3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX2Fib3V0X2RpYWxvZyk7CisrCV9n a2JkX2xheW91dF91bnJlZjAgKHNlbGYtPnByaXYtPm1fZ2tiZGxheW91dCk7CisrCV94a2JfbGF5 b3V0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV94a2JsYXlvdXQpOworKwlzZWxmLT5wcml2LT5tX2xh eW91dHMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoc2VsZi0+cHJpdi0+bV9sYXlvdXRzLCBzZWxmLT5w cml2LT5tX2xheW91dHNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsK KysJc2VsZi0+cHJpdi0+bV92YXJpYW50cyA9IChfdmFsYV9hcnJheV9mcmVlIChzZWxmLT5wcml2 LT5tX3ZhcmlhbnRzLCBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDEsIChHRGVzdHJveU5v dGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCV9nX3RpbWVyX2Rlc3Ryb3kwIChzZWxmLT5wcml2LT5t X2NoYW5nZWRfbGF5b3V0X3RpbWVyKTsKKysJc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hP VEtFWVMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hP VEtFWVMsIHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDEsIChHRGVz dHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCUdfT0JKRUNUX0NMQVNTIChwYW5lbF9wYXJl bnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqKTsKKyt9CisrCisrCisrR1R5cGUgcGFuZWxfZ2V0X3R5 cGUgKHZvaWQpIHsKKysJc3RhdGljIHZvbGF0aWxlIGdzaXplIHBhbmVsX3R5cGVfaWRfX3ZvbGF0 aWxlID0gMDsKKysJaWYgKGdfb25jZV9pbml0X2VudGVyICgmcGFuZWxfdHlwZV9pZF9fdm9sYXRp bGUpKSB7CisrCQlzdGF0aWMgY29uc3QgR1R5cGVJbmZvIGdfZGVmaW5lX3R5cGVfaW5mbyA9IHsg c2l6ZW9mIChQYW5lbENsYXNzKSwgKEdCYXNlSW5pdEZ1bmMpIE5VTEwsIChHQmFzZUZpbmFsaXpl RnVuYykgTlVMTCwgKEdDbGFzc0luaXRGdW5jKSBwYW5lbF9jbGFzc19pbml0LCAoR0NsYXNzRmlu YWxpemVGdW5jKSBOVUxMLCBOVUxMLCBzaXplb2YgKFBhbmVsKSwgMCwgKEdJbnN0YW5jZUluaXRG dW5jKSBwYW5lbF9pbnN0YW5jZV9pbml0LCBOVUxMIH07CisrCQlHVHlwZSBwYW5lbF90eXBlX2lk OworKwkJcGFuZWxfdHlwZV9pZCA9IGdfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKGlidXNfcGFuZWxf c2VydmljZV9nZXRfdHlwZSAoKSwgIlBhbmVsIiwgJmdfZGVmaW5lX3R5cGVfaW5mbywgMCk7Cisr CQlnX29uY2VfaW5pdF9sZWF2ZSAoJnBhbmVsX3R5cGVfaWRfX3ZvbGF0aWxlLCBwYW5lbF90eXBl X2lkKTsKKysJfQorKwlyZXR1cm4gcGFuZWxfdHlwZV9pZF9fdm9sYXRpbGU7CisrfQorKworKwor K3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2Rlc3Ryb3kgKGdwb2ludGVyIGFycmF5LCBnaW50IGFy cmF5X2xlbmd0aCwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9mdW5jKSB7CisrCWlmICgoYXJyYXkg IT0gTlVMTCkgJiYgKGRlc3Ryb3lfZnVuYyAhPSBOVUxMKSkgeworKwkJaW50IGk7CisrCQlmb3Ig KGkgPSAwOyBpIDwgYXJyYXlfbGVuZ3RoOyBpID0gaSArIDEpIHsKKysJCQlpZiAoKChncG9pbnRl ciopIGFycmF5KVtpXSAhPSBOVUxMKSB7CisrCQkJCWRlc3Ryb3lfZnVuYyAoKChncG9pbnRlciop IGFycmF5KVtpXSk7CisrCQkJfQorKwkJfQorKwl9CisrfQorKworKworK3N0YXRpYyB2b2lkIF92 YWxhX2FycmF5X2ZyZWUgKGdwb2ludGVyIGFycmF5LCBnaW50IGFycmF5X2xlbmd0aCwgR0Rlc3Ry b3lOb3RpZnkgZGVzdHJveV9mdW5jKSB7CisrCV92YWxhX2FycmF5X2Rlc3Ryb3kgKGFycmF5LCBh cnJheV9sZW5ndGgsIGRlc3Ryb3lfZnVuYyk7CisrCWdfZnJlZSAoYXJyYXkpOworK30KKysKKysK KytzdGF0aWMgZ2ludCBfdmFsYV9hcnJheV9sZW5ndGggKGdwb2ludGVyIGFycmF5KSB7CisrCWlu dCBsZW5ndGg7CisrCWxlbmd0aCA9IDA7CisrCWlmIChhcnJheSkgeworKwkJd2hpbGUgKCgoZ3Bv aW50ZXIqKSBhcnJheSlbbGVuZ3RoXSkgeworKwkJCWxlbmd0aCsrOworKwkJfQorKwl9CisrCXJl dHVybiBsZW5ndGg7CisrfQorKworKworKworLS0tIGlidXMvdWkvZ3RrMy9wYW5lbC5jLm9yaWcJ MjAxMi0wMy0wOSAxODo1MzozOS4yNzEyNDM0MDAgKzA5MDAKKysrKyBpYnVzL3VpL2d0azMvcGFu ZWwuYwkyMDEyLTAzLTA5IDE4OjU0OjUxLjU5NDU1NjIwNiArMDkwMAorQEAgLTI5LDcgKzI5LDEw IEBACisgI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1 ZGUgPHN0cmluZy5oPgorKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyAjaW5jbHVkZSA8Z2RrL2dkay5o PgorKyNpbmNsdWRlIDxmbG9hdC5oPgorKyNpbmNsdWRlIDxtYXRoLmg+CisgI2luY2x1ZGUgPHNp Z25hbC5oPgorICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAjaW5jbHVkZSA8Z2xpYi9naTE4bi1s aWIuaD4KK0BAIC03Niw2ICs3OSwyNiBAQCB0eXBlZGVmIHN0cnVjdCBfU3dpdGNoZXJDbGFzcyBT d2l0Y2hlckNsCisgdHlwZWRlZiBzdHJ1Y3QgX1Byb3BlcnR5TWFuYWdlciBQcm9wZXJ0eU1hbmFn ZXI7CisgdHlwZWRlZiBzdHJ1Y3QgX1Byb3BlcnR5TWFuYWdlckNsYXNzIFByb3BlcnR5TWFuYWdl ckNsYXNzOworIAorKyNkZWZpbmUgVFlQRV9HS0JEX0xBWU9VVCAoZ2tiZF9sYXlvdXRfZ2V0X3R5 cGUgKCkpCisrI2RlZmluZSBHS0JEX0xBWU9VVChvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf Q0FTVCAoKG9iaiksIFRZUEVfR0tCRF9MQVlPVVQsIEdrYmRMYXlvdXQpKQorKyNkZWZpbmUgR0tC RF9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwg VFlQRV9HS0JEX0xBWU9VVCwgR2tiZExheW91dENsYXNzKSkKKysjZGVmaW5lIElTX0dLQkRfTEFZ T1VUKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgVFlQRV9HS0JEX0xB WU9VVCkpCisrI2RlZmluZSBJU19HS0JEX0xBWU9VVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD S19DTEFTU19UWVBFICgoa2xhc3MpLCBUWVBFX0dLQkRfTEFZT1VUKSkKKysjZGVmaW5lIEdLQkRf TEFZT1VUX0dFVF9DTEFTUyhvYmopIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwg VFlQRV9HS0JEX0xBWU9VVCwgR2tiZExheW91dENsYXNzKSkKKysKKyt0eXBlZGVmIHN0cnVjdCBf R2tiZExheW91dCBHa2JkTGF5b3V0OworK3R5cGVkZWYgc3RydWN0IF9Ha2JkTGF5b3V0Q2xhc3Mg R2tiZExheW91dENsYXNzOworKworKyNkZWZpbmUgVFlQRV9YS0JfTEFZT1VUICh4a2JfbGF5b3V0 X2dldF90eXBlICgpKQorKyNkZWZpbmUgWEtCX0xBWU9VVChvYmopIChHX1RZUEVfQ0hFQ0tfSU5T VEFOQ0VfQ0FTVCAoKG9iaiksIFRZUEVfWEtCX0xBWU9VVCwgWEtCTGF5b3V0KSkKKysjZGVmaW5l IFhLQl9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNz KSwgVFlQRV9YS0JfTEFZT1VULCBYS0JMYXlvdXRDbGFzcykpCisrI2RlZmluZSBJU19YS0JfTEFZ T1VUKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgVFlQRV9YS0JfTEFZ T1VUKSkKKysjZGVmaW5lIElTX1hLQl9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf Q0xBU1NfVFlQRSAoKGtsYXNzKSwgVFlQRV9YS0JfTEFZT1VUKSkKKysjZGVmaW5lIFhLQl9MQVlP VVRfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBUWVBF X1hLQl9MQVlPVVQsIFhLQkxheW91dENsYXNzKSkKKysKKyt0eXBlZGVmIHN0cnVjdCBfWEtCTGF5 b3V0IFhLQkxheW91dDsKKyt0eXBlZGVmIHN0cnVjdCBfWEtCTGF5b3V0Q2xhc3MgWEtCTGF5b3V0 Q2xhc3M7CisrCisgI2RlZmluZSBUWVBFX0tFWUJJTkRJTkdfTUFOQUdFUiAoa2V5YmluZGluZ19t YW5hZ2VyX2dldF90eXBlICgpKQorICNkZWZpbmUgS0VZQklORElOR19NQU5BR0VSKG9iaikgKEdf VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgVFlQRV9LRVlCSU5ESU5HX01BTkFHRVIs IEtleWJpbmRpbmdNYW5hZ2VyKSkKKyAjZGVmaW5lIEtFWUJJTkRJTkdfTUFOQUdFUl9DTEFTUyhr bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBUWVBFX0tFWUJJTkRJTkdf TUFOQUdFUiwgS2V5YmluZGluZ01hbmFnZXJDbGFzcykpCitAQCAtODUsMTAgKzEwOCwxNCBAQCB0 eXBlZGVmIHN0cnVjdCBfUHJvcGVydHlNYW5hZ2VyQ2xhc3MgUHJvCisgCisgdHlwZWRlZiBzdHJ1 Y3QgX0tleWJpbmRpbmdNYW5hZ2VyIEtleWJpbmRpbmdNYW5hZ2VyOworIHR5cGVkZWYgc3RydWN0 IF9LZXliaW5kaW5nTWFuYWdlckNsYXNzIEtleWJpbmRpbmdNYW5hZ2VyQ2xhc3M7CisrI2RlZmlu ZSBfZ19mcmVlMCh2YXIpICh2YXIgPSAoZ19mcmVlICh2YXIpLCBOVUxMKSkKKysjZGVmaW5lIF9n a2JkX2xheW91dF91bnJlZjAodmFyKSAoKHZhciA9PSBOVUxMKSA/IE5VTEwgOiAodmFyID0gKGdr YmRfbGF5b3V0X3VucmVmICh2YXIpLCBOVUxMKSkpCisrI2RlZmluZSBfeGtiX2xheW91dF91bnJl ZjAodmFyKSAoKHZhciA9PSBOVUxMKSA/IE5VTEwgOiAodmFyID0gKHhrYl9sYXlvdXRfdW5yZWYg KHZhciksIE5VTEwpKSkKKyAjZGVmaW5lIF9nX29iamVjdF91bnJlZjAodmFyKSAoKHZhciA9PSBO VUxMKSA/IE5VTEwgOiAodmFyID0gKGdfb2JqZWN0X3VucmVmICh2YXIpLCBOVUxMKSkpCisgI2Rl ZmluZSBfcHJvcGVydHlfbWFuYWdlcl91bnJlZjAodmFyKSAoKHZhciA9PSBOVUxMKSA/IE5VTEwg OiAodmFyID0gKHByb3BlcnR5X21hbmFnZXJfdW5yZWYgKHZhciksIE5VTEwpKSkKKysjZGVmaW5l IF9nX3RpbWVyX2Rlc3Ryb3kwKHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZhciA9IChn X3RpbWVyX2Rlc3Ryb3kgKHZhciksIE5VTEwpKSkKKyAjZGVmaW5lIF9nX3ZhcmlhbnRfdW5yZWYw KHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZhciA9IChnX3ZhcmlhbnRfdW5yZWYgKHZh ciksIE5VTEwpKSkKKy0jZGVmaW5lIF9nX2ZyZWUwKHZhcikgKHZhciA9IChnX2ZyZWUgKHZhciks IE5VTEwpKQorKyNkZWZpbmUgX19nX2xpc3RfZnJlZV9fZ19mcmVlMF8wKHZhcikgKCh2YXIgPT0g TlVMTCkgPyBOVUxMIDogKHZhciA9IChfZ19saXN0X2ZyZWVfX2dfZnJlZTBfICh2YXIpLCBOVUxM KSkpCisgI2RlZmluZSBfZ19lcnJvcl9mcmVlMCh2YXIpICgodmFyID09IE5VTEwpID8gTlVMTCA6 ICh2YXIgPSAoZ19lcnJvcl9mcmVlICh2YXIpLCBOVUxMKSkpCisgdHlwZWRlZiBzdHJ1Y3QgX0Js b2NrNERhdGEgQmxvY2s0RGF0YTsKKyAKK0BAIC0xMjUsNiArMTUyLDIwIEBAIHN0cnVjdCBfUGFu ZWxQcml2YXRlIHsKKyAJUHJvcGVydHlNYW5hZ2VyKiBtX3Byb3BlcnR5X21hbmFnZXI7CisgCUdQ aWQgbV9zZXR1cF9waWQ7CisgCUd0a0Fib3V0RGlhbG9nKiBtX2Fib3V0X2RpYWxvZzsKKysJR2ti ZExheW91dCogbV9na2JkbGF5b3V0OworKwlYS0JMYXlvdXQqIG1feGtibGF5b3V0OworKwlnY2hh cioqIG1fbGF5b3V0czsKKysJZ2ludCBtX2xheW91dHNfbGVuZ3RoMTsKKysJZ2ludCBfbV9sYXlv dXRzX3NpemVfOworKwlnY2hhcioqIG1fdmFyaWFudHM7CisrCWdpbnQgbV92YXJpYW50c19sZW5n dGgxOworKwlnaW50IF9tX3ZhcmlhbnRzX3NpemVfOworKwlnaW50IG1fZmFsbGJhY2tfbG9ja19p ZDsKKysJZ2Jvb2xlYW4gbV9jaGFuZ2VkX3hrYl9vcHRpb247CisrCUdUaW1lciogbV9jaGFuZ2Vk X2xheW91dF90aW1lcjsKKysJZ2NoYXIqKiBBQ0NFTEVSQVRPUl9JTUVfSE9US0VZUzsKKysJZ2lu dCBBQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxOworKwlnaW50IF9BQ0NFTEVSQVRPUl9J TUVfSE9US0VZU19zaXplXzsKKyB9OworIAorIHR5cGVkZWYgdm9pZCAoKktleWJpbmRpbmdNYW5h Z2VyS2V5YmluZGluZ0hhbmRsZXJGdW5jKSAoR2RrRXZlbnQqIGV2ZW50LCB2b2lkKiB1c2VyX2Rh dGEpOworQEAgLTE0Nyw2ICsxODgsMjAgQEAgdm9pZCB2YWx1ZV9zZXRfcHJvcGVydHlfbWFuYWdl ciAoR1ZhbHVlKgorIHZvaWQgdmFsdWVfdGFrZV9wcm9wZXJ0eV9tYW5hZ2VyIChHVmFsdWUqIHZh bHVlLCBncG9pbnRlciB2X29iamVjdCk7CisgZ3BvaW50ZXIgdmFsdWVfZ2V0X3Byb3BlcnR5X21h bmFnZXIgKGNvbnN0IEdWYWx1ZSogdmFsdWUpOworIEdUeXBlIHByb3BlcnR5X21hbmFnZXJfZ2V0 X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKKytncG9pbnRlciBna2JkX2xheW91dF9yZWYgKGdw b2ludGVyIGluc3RhbmNlKTsKKyt2b2lkIGdrYmRfbGF5b3V0X3VucmVmIChncG9pbnRlciBpbnN0 YW5jZSk7CisrR1BhcmFtU3BlYyogcGFyYW1fc3BlY19na2JkX2xheW91dCAoY29uc3QgZ2NoYXIq IG5hbWUsIGNvbnN0IGdjaGFyKiBuaWNrLCBjb25zdCBnY2hhciogYmx1cmIsIEdUeXBlIG9iamVj dF90eXBlLCBHUGFyYW1GbGFncyBmbGFncyk7Cisrdm9pZCB2YWx1ZV9zZXRfZ2tiZF9sYXlvdXQg KEdWYWx1ZSogdmFsdWUsIGdwb2ludGVyIHZfb2JqZWN0KTsKKyt2b2lkIHZhbHVlX3Rha2VfZ2ti ZF9sYXlvdXQgKEdWYWx1ZSogdmFsdWUsIGdwb2ludGVyIHZfb2JqZWN0KTsKKytncG9pbnRlciB2 YWx1ZV9nZXRfZ2tiZF9sYXlvdXQgKGNvbnN0IEdWYWx1ZSogdmFsdWUpOworK0dUeXBlIGdrYmRf bGF5b3V0X2dldF90eXBlICh2b2lkKSBHX0dOVUNfQ09OU1Q7CisrZ3BvaW50ZXIgeGtiX2xheW91 dF9yZWYgKGdwb2ludGVyIGluc3RhbmNlKTsKKyt2b2lkIHhrYl9sYXlvdXRfdW5yZWYgKGdwb2lu dGVyIGluc3RhbmNlKTsKKytHUGFyYW1TcGVjKiBwYXJhbV9zcGVjX3hrYl9sYXlvdXQgKGNvbnN0 IGdjaGFyKiBuYW1lLCBjb25zdCBnY2hhciogbmljaywgY29uc3QgZ2NoYXIqIGJsdXJiLCBHVHlw ZSBvYmplY3RfdHlwZSwgR1BhcmFtRmxhZ3MgZmxhZ3MpOworK3ZvaWQgdmFsdWVfc2V0X3hrYl9s YXlvdXQgKEdWYWx1ZSogdmFsdWUsIGdwb2ludGVyIHZfb2JqZWN0KTsKKyt2b2lkIHZhbHVlX3Rh a2VfeGtiX2xheW91dCAoR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpOworK2dwb2lu dGVyIHZhbHVlX2dldF94a2JfbGF5b3V0IChjb25zdCBHVmFsdWUqIHZhbHVlKTsKKytHVHlwZSB4 a2JfbGF5b3V0X2dldF90eXBlICh2b2lkKSBHX0dOVUNfQ09OU1Q7CisgI2RlZmluZSBQQU5FTF9H RVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFRZUEVfUEFO RUwsIFBhbmVsUHJpdmF0ZSkpCisgZW51bSAgeworIAlQQU5FTF9EVU1NWV9QUk9QRVJUWQorQEAg LTE1Niw2ICsyMTEsOSBAQCBLZXliaW5kaW5nTWFuYWdlcioga2V5YmluZGluZ19tYW5hZ2VyX2dl Cisgdm9pZCBrZXliaW5kaW5nX21hbmFnZXJfdW5iaW5kIChLZXliaW5kaW5nTWFuYWdlciogc2Vs ZiwgY29uc3QgZ2NoYXIqIGFjY2VsZXJhdG9yKTsKKyAjZGVmaW5lIFBBTkVMX0FDQ0VMRVJBVE9S X1NXSVRDSF9JTUVfRk9SRVdBUkQgIjxDb250cm9sPnNwYWNlIgorICNkZWZpbmUgUEFORUxfQUND RUxFUkFUT1JfU1dJVENIX0lNRV9CQUNLV0FSRCAiPENvbnRyb2w+PFNoaWZ0PnNwYWNlIgorK3N0 YXRpYyB2b2lkIHBhbmVsX2drYmRsYXlvdXRfY2hhbmdlZF9jYiAoUGFuZWwqIHNlbGYpOworK3N0 YXRpYyB2b2lkIF9wYW5lbF9na2JkbGF5b3V0X2NoYW5nZWRfY2JfZ2tiZF9sYXlvdXRfY2hhbmdl ZCAoR2tiZExheW91dCogX3NlbmRlciwgZ3BvaW50ZXIgc2VsZik7Cisrdm9pZCBna2JkX2xheW91 dF9zdG9wX2xpc3RlbiAoR2tiZExheW91dCogc2VsZik7CisgUGFuZWwqIHBhbmVsX25ldyAoSUJ1 c0J1cyogYnVzKTsKKyBQYW5lbCogcGFuZWxfY29uc3RydWN0IChHVHlwZSBvYmplY3RfdHlwZSwg SUJ1c0J1cyogYnVzKTsKKyBzdGF0aWMgdm9pZCBwYW5lbF9zdGF0dXNfaWNvbl9wb3B1cF9tZW51 X2NiIChQYW5lbCogc2VsZiwgR3RrU3RhdHVzSWNvbiogc3RhdHVzX2ljb24sIGd1aW50IGJ1dHRv biwgZ3VpbnQgYWN0aXZhdGVfdGltZSk7CitAQCAtMTcwLDMxICsyMjgsNTggQEAgc3RhdGljIHZv aWQgX19sYW1iZGEyNF8gKFBhbmVsKiBzZWxmLCBDYQorIHN0YXRpYyB2b2lkIF9fX2xhbWJkYTI0 X19jYW5kaWRhdGVfcGFuZWxfcGFnZV9kb3duIChDYW5kaWRhdGVQYW5lbCogX3NlbmRlciwgZ3Bv aW50ZXIgc2VsZik7CisgU3dpdGNoZXIqIHN3aXRjaGVyX25ldyAodm9pZCk7CisgU3dpdGNoZXIq IHN3aXRjaGVyX2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5cGUpOworLWdib29sZWFuIGtleWJp bmRpbmdfbWFuYWdlcl9iaW5kIChLZXliaW5kaW5nTWFuYWdlciogc2VsZiwgY29uc3QgZ2NoYXIq IGFjY2VsZXJhdG9yLCBLZXliaW5kaW5nTWFuYWdlcktleWJpbmRpbmdIYW5kbGVyRnVuYyBoYW5k bGVyLCB2b2lkKiBoYW5kbGVyX3RhcmdldCk7Cistc3RhdGljIHZvaWQgX19sYW1iZGEyNV8gKFBh bmVsKiBzZWxmLCBHZGtFdmVudCogZSk7Cistc3RhdGljIHZvaWQgcGFuZWxfaGFuZGxlX2VuZ2lu ZV9zd2l0Y2ggKFBhbmVsKiBzZWxmLCBHZGtFdmVudCogZXZlbnQsIGdib29sZWFuIHJldmVydCk7 Cistc3RhdGljIHZvaWQgX19fbGFtYmRhMjVfX2tleWJpbmRpbmdfbWFuYWdlcl9rZXliaW5kaW5n X2hhbmRsZXJfZnVuYyAoR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBzZWxmKTsKKy1zdGF0aWMg dm9pZCBfX2xhbWJkYTI2XyAoUGFuZWwqIHNlbGYsIEdka0V2ZW50KiBlKTsKKy1zdGF0aWMgdm9p ZCBfX19sYW1iZGEyNl9fa2V5YmluZGluZ19tYW5hZ2VyX2tleWJpbmRpbmdfaGFuZGxlcl9mdW5j IChHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIHNlbGYpOworIFByb3BlcnR5TWFuYWdlciogcHJv cGVydHlfbWFuYWdlcl9uZXcgKHZvaWQpOworIFByb3BlcnR5TWFuYWdlciogcHJvcGVydHlfbWFu YWdlcl9jb25zdHJ1Y3QgKEdUeXBlIG9iamVjdF90eXBlKTsKKy1zdGF0aWMgdm9pZCBfX2xhbWJk YTI3XyAoUGFuZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBrLCBnaW50IHMpOworLXN0YXRpYyB2b2lk IF9fX2xhbWJkYTI3X19wcm9wZXJ0eV9tYW5hZ2VyX3Byb3BlcnR5X2FjdGl2YXRlIChQcm9wZXJ0 eU1hbmFnZXIqIF9zZW5kZXIsIGNvbnN0IGdjaGFyKiBrZXksIGdpbnQgc3RhdGUsIGdwb2ludGVy IHNlbGYpOworK3N0YXRpYyB2b2lkIF9fbGFtYmRhMjVfIChQYW5lbCogc2VsZiwgY29uc3QgZ2No YXIqIGssIGdpbnQgcyk7Cisrc3RhdGljIHZvaWQgX19fbGFtYmRhMjVfX3Byb3BlcnR5X21hbmFn ZXJfcHJvcGVydHlfYWN0aXZhdGUgKFByb3BlcnR5TWFuYWdlciogX3NlbmRlciwgY29uc3QgZ2No YXIqIGtleSwgZ2ludCBzdGF0ZSwgZ3BvaW50ZXIgc2VsZik7Cisrc3RhdGljIHZvaWQgcGFuZWxf c2V0X2tleWJpbmRpbmcgKFBhbmVsKiBzZWxmKTsKKytzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9h ZGQ5IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVl KTsKKytzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMCAoZ2NoYXIqKiogYXJyYXksIGludCog bGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Cisrc3RhdGljIHZvaWQgX3ZhbGFfYXJy YXlfYWRkMTEgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciog dmFsdWUpOworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDEyIChnY2hhcioqKiBhcnJheSwg aW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKKytnYm9vbGVhbiBrZXliaW5k aW5nX21hbmFnZXJfYmluZCAoS2V5YmluZGluZ01hbmFnZXIqIHNlbGYsIGNvbnN0IGdjaGFyKiBh Y2NlbGVyYXRvciwgS2V5YmluZGluZ01hbmFnZXJLZXliaW5kaW5nSGFuZGxlckZ1bmMgaGFuZGxl ciwgdm9pZCogaGFuZGxlcl90YXJnZXQpOworK3N0YXRpYyB2b2lkIF9fX19sYW1iZGEyNl8gKFBh bmVsKiBzZWxmLCBHZGtFdmVudCogZSk7Cisrc3RhdGljIHZvaWQgcGFuZWxfaGFuZGxlX2VuZ2lu ZV9zd2l0Y2ggKFBhbmVsKiBzZWxmLCBHZGtFdmVudCogZXZlbnQsIGdib29sZWFuIHJldmVydCk7 Cisrc3RhdGljIHZvaWQgX19fX19sYW1iZGEyNl9fa2V5YmluZGluZ19tYW5hZ2VyX2tleWJpbmRp bmdfaGFuZGxlcl9mdW5jIChHZGtFdmVudCogZXZlbnQsIGdwb2ludGVyIHNlbGYpOworK3N0YXRp YyB2b2lkIF9fX19fbGFtYmRhMjdfIChQYW5lbCogc2VsZiwgR2RrRXZlbnQqIGUpOworK3N0YXRp YyB2b2lkIF9fX19fX2xhbWJkYTI3X19rZXliaW5kaW5nX21hbmFnZXJfa2V5YmluZGluZ19oYW5k bGVyX2Z1bmMgKEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgc2VsZik7Cisgdm9pZCBwYW5lbF9z ZXRfY29uZmlnIChQYW5lbCogc2VsZiwgSUJ1c0NvbmZpZyogY29uZmlnKTsKKyBzdGF0aWMgdm9p ZCBwYW5lbF9jb25maWdfdmFsdWVfY2hhbmdlZF9jYiAoUGFuZWwqIHNlbGYsIElCdXNDb25maWcq IGNvbmZpZywgY29uc3QgZ2NoYXIqIHNlY3Rpb24sIGNvbnN0IGdjaGFyKiBuYW1lLCBHVmFyaWFu dCogdmFyaWFudCk7Cisgc3RhdGljIHZvaWQgX3BhbmVsX2NvbmZpZ192YWx1ZV9jaGFuZ2VkX2Ni X2lidXNfY29uZmlnX3ZhbHVlX2NoYW5nZWQgKElCdXNDb25maWcqIF9zZW5kZXIsIGNvbnN0IGdj aGFyKiBzZWN0aW9uLCBjb25zdCBnY2hhciogbmFtZSwgR1ZhcmlhbnQqIHZhbHVlLCBncG9pbnRl ciBzZWxmKTsKKytzdGF0aWMgdm9pZCBwYW5lbF9pbml0X2VuZ2luZXNfb3JkZXIgKFBhbmVsKiBz ZWxmKTsKKyBzdGF0aWMgdm9pZCBwYW5lbF91cGRhdGVfZW5naW5lcyAoUGFuZWwqIHNlbGYsIEdW YXJpYW50KiB2YXJfZW5naW5lcywgR1ZhcmlhbnQqIHZhcl9vcmRlcik7Cisrdm9pZCBna2JkX2xh eW91dF9sb2NrX2dyb3VwIChHa2JkTGF5b3V0KiBzZWxmLCBnaW50IGlkKTsKKyt2b2lkIHhrYl9s YXlvdXRfcmVzZXRfbGF5b3V0IChYS0JMYXlvdXQqIHNlbGYpOworK3N0YXRpYyB2b2lkIHBhbmVs X3VwZGF0ZV94a2JfZW5naW5lcyAoUGFuZWwqIHNlbGYpOworK3N0YXRpYyB2b2lkIHBhbmVsX2lu aXRfZ2tiZCAoUGFuZWwqIHNlbGYpOworK0drYmRMYXlvdXQqIGdrYmRfbGF5b3V0X25ldyAodm9p ZCk7CisrR2tiZExheW91dCogZ2tiZF9sYXlvdXRfY29uc3RydWN0IChHVHlwZSBvYmplY3RfdHlw ZSk7Cisrdm9pZCBna2JkX2xheW91dF9zdGFydF9saXN0ZW4gKEdrYmRMYXlvdXQqIHNlbGYpOwor K1hLQkxheW91dCogeGtiX2xheW91dF9uZXcgKElCdXNDb25maWcqIGNvbmZpZyk7CisrWEtCTGF5 b3V0KiB4a2JfbGF5b3V0X2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5cGUsIElCdXNDb25maWcq IGNvbmZpZyk7CisrZ2NoYXIqIHhrYl9sYXlvdXRfZ2V0X2xheW91dCAoWEtCTGF5b3V0KiBzZWxm KTsKKytnY2hhciogeGtiX2xheW91dF9nZXRfdmFyaWFudCAoWEtCTGF5b3V0KiBzZWxmKTsKKytz dGF0aWMgdm9pZCBfZ19mcmVlMF8gKGdwb2ludGVyIHZhcik7Cisrc3RhdGljIHZvaWQgX2dfbGlz dF9mcmVlX19nX2ZyZWUwXyAoR0xpc3QqIHNlbGYpOworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5 X2FkZDEzIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZh bHVlKTsKKytzdGF0aWMgZ2Jvb2xlYW4gX3ZhbGFfc3RyaW5nX2FycmF5X2NvbnRhaW5zIChnY2hh cioqIHN0YWNrLCBpbnQgc3RhY2tfbGVuZ3RoLCBnY2hhciogbmVlZGxlKTsKKytzdGF0aWMgdm9p ZCBfdmFsYV9hcnJheV9hZGQxNCAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNp emUsIGdjaGFyKiB2YWx1ZSk7Cisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTUgKGdjaGFy KioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOworK3N0YXRp YyB2b2lkIHBhbmVsX3NldF94a2JfZ3JvdXBfbGF5b3V0IChQYW5lbCogc2VsZiwgY29uc3QgZ2No YXIqIGxheW91dCk7CisrZ2ludCogeGtiX2xheW91dF9zZXRfbGF5b3V0IChYS0JMYXlvdXQqIHNl bGYsIGNvbnN0IGdjaGFyKiBfbGF5b3V0LCBjb25zdCBnY2hhciogX3ZhcmlhbnQsIGNvbnN0IGdj aGFyKiBfb3B0aW9uLCBpbnQqIHJlc3VsdF9sZW5ndGgxKTsKKytzdGF0aWMgZ2Jvb2xlYW4gcGFu ZWxfc2V0X2drYmRfbGF5b3V0IChQYW5lbCogc2VsZiwgY29uc3QgZ2NoYXIqIGxheW91dCk7Cisr Z2NoYXIqKiBna2JkX2xheW91dF9nZXRfZ3JvdXBfbmFtZXMgKEdrYmRMYXlvdXQqIHNlbGYsIGlu dCogcmVzdWx0X2xlbmd0aDEpOworK3N0YXRpYyB2b2lkIHBhbmVsX3NldF9sYXlvdXQgKFBhbmVs KiBzZWxmLCBjb25zdCBnY2hhciogbGF5b3V0KTsKKyBzdGF0aWMgdm9pZCBwYW5lbF9zd2l0Y2hf ZW5naW5lIChQYW5lbCogc2VsZiwgZ2ludCBpLCBnYm9vbGVhbiBmb3JjZSk7Cistc3RhdGljIHZv aWQgX3ZhbGFfYXJyYXlfYWRkOSAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNp emUsIGdjaGFyKiB2YWx1ZSk7Cisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTYgKGdjaGFy KioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOworIGd1aW50 IGtleWJpbmRpbmdfbWFuYWdlcl9nZXRfcHJpbWFyeV9tb2RpZmllciAoZ3VpbnQgYmluZGluZ19t YXNrKTsKKyBnYm9vbGVhbiBrZXliaW5kaW5nX21hbmFnZXJfcHJpbWFyeV9tb2RpZmllcl9zdGls bF9wcmVzc2VkIChHZGtFdmVudCogZXZlbnQsIGd1aW50IHByaW1hcnlfbW9kaWZpZXIpOworIGdp bnQgc3dpdGNoZXJfcnVuIChTd2l0Y2hlciogc2VsZiwgR2RrRXZlbnQqIGV2ZW50LCBJQnVzRW5n aW5lRGVzYyoqIGVuZ2luZXMsIGludCBlbmdpbmVzX2xlbmd0aDEsIGdpbnQgaW5kZXgpOworLXN0 YXRpYyBnY2hhcioqIF92YWxhX2FycmF5X2R1cDIgKGdjaGFyKiogc2VsZiwgaW50IGxlbmd0aCk7 Cistc3RhdGljIGdib29sZWFuIF92YWxhX3N0cmluZ19hcnJheV9jb250YWlucyAoZ2NoYXIqKiBz dGFjaywgaW50IHN0YWNrX2xlbmd0aCwgZ2NoYXIqIG5lZWRsZSk7Cistc3RhdGljIHZvaWQgX3Zh bGFfYXJyYXlfYWRkMTAgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBn Y2hhciogdmFsdWUpOworLXN0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDExIChnY2hhcioqKiBh cnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKKy1zdGF0aWMgSUJ1 c0VuZ2luZURlc2MqKiBfdmFsYV9hcnJheV9kdXAzIChJQnVzRW5naW5lRGVzYyoqIHNlbGYsIGlu dCBsZW5ndGgpOworLXN0YXRpYyBJQnVzRW5naW5lRGVzYyoqIF92YWxhX2FycmF5X2R1cDQgKElC dXNFbmdpbmVEZXNjKiogc2VsZiwgaW50IGxlbmd0aCk7Cisrc3RhdGljIGdjaGFyKiogX3ZhbGFf YXJyYXlfZHVwNCAoZ2NoYXIqKiBzZWxmLCBpbnQgbGVuZ3RoKTsKKytzdGF0aWMgdm9pZCBfdmFs YV9hcnJheV9hZGQxNyAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdj aGFyKiB2YWx1ZSk7Cisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTggKGdjaGFyKioqIGFy cmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOworK3N0YXRpYyBJQnVz RW5naW5lRGVzYyoqIF92YWxhX2FycmF5X2R1cDUgKElCdXNFbmdpbmVEZXNjKiogc2VsZiwgaW50 IGxlbmd0aCk7Cisrc3RhdGljIElCdXNFbmdpbmVEZXNjKiogX3ZhbGFfYXJyYXlfZHVwNiAoSUJ1 c0VuZ2luZURlc2MqKiBzZWxmLCBpbnQgbGVuZ3RoKTsKKyBzdGF0aWMgdm9pZCBwYW5lbF9zaG93 X3NldHVwX2RpYWxvZyAoUGFuZWwqIHNlbGYpOworIHN0YXRpYyB2b2lkIF9fbGFtYmRhMThfIChQ YW5lbCogc2VsZiwgR1BpZCBwaWQsIGdpbnQgc3RhdGUpOworIHN0YXRpYyB2b2lkIF9fX2xhbWJk YTE4X19nY2hpbGRfd2F0Y2hfZnVuYyAoR1BpZCBwaWQsIGdpbnQgc3RhdHVzLCBncG9pbnRlciBz ZWxmKTsKK0BAIC0yNDAsNiArMzI1LDExIEBAIHN0YXRpYyB2b2lkIF92YWxhX2FycmF5X2ZyZWUg KGdwb2ludGVyIGEKKyBzdGF0aWMgZ2ludCBfdmFsYV9hcnJheV9sZW5ndGggKGdwb2ludGVyIGFy cmF5KTsKKyAKKyAKKytzdGF0aWMgdm9pZCBfcGFuZWxfZ2tiZGxheW91dF9jaGFuZ2VkX2NiX2dr YmRfbGF5b3V0X2NoYW5nZWQgKEdrYmRMYXlvdXQqIF9zZW5kZXIsIGdwb2ludGVyIHNlbGYpIHsK KysJcGFuZWxfZ2tiZGxheW91dF9jaGFuZ2VkX2NiIChzZWxmKTsKKyt9CisrCisrCisgc3RhdGlj IGdwb2ludGVyIF9nX29iamVjdF9yZWYwIChncG9pbnRlciBzZWxmKSB7CisgCXJldHVybiBzZWxm ID8gZ19vYmplY3RfcmVmIChzZWxmKSA6IE5VTEw7CisgfQorQEAgLTI3NywzMyArMzY3LDcgQEAg c3RhdGljIHZvaWQgX19fbGFtYmRhMjRfX2NhbmRpZGF0ZV9wYW5lbAorIH0KKyAKKyAKKy1zdGF0 aWMgdm9pZCBfX2xhbWJkYTI1XyAoUGFuZWwqIHNlbGYsIEdka0V2ZW50KiBlKSB7CistCUdka0V2 ZW50KiBfdG1wMF87CistCWdfcmV0dXJuX2lmX2ZhaWwgKGUgIT0gTlVMTCk7CistCV90bXAwXyA9 IGU7CistCXBhbmVsX2hhbmRsZV9lbmdpbmVfc3dpdGNoIChzZWxmLCBfdG1wMF8sIEZBTFNFKTsK Ky19CistCistCistc3RhdGljIHZvaWQgX19fbGFtYmRhMjVfX2tleWJpbmRpbmdfbWFuYWdlcl9r ZXliaW5kaW5nX2hhbmRsZXJfZnVuYyAoR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBzZWxmKSB7 CistCV9fbGFtYmRhMjVfIChzZWxmLCBldmVudCk7CistfQorLQorLQorLXN0YXRpYyB2b2lkIF9f bGFtYmRhMjZfIChQYW5lbCogc2VsZiwgR2RrRXZlbnQqIGUpIHsKKy0JR2RrRXZlbnQqIF90bXAw XzsKKy0JZ19yZXR1cm5faWZfZmFpbCAoZSAhPSBOVUxMKTsKKy0JX3RtcDBfID0gZTsKKy0JcGFu ZWxfaGFuZGxlX2VuZ2luZV9zd2l0Y2ggKHNlbGYsIF90bXAwXywgVFJVRSk7CistfQorLQorLQor LXN0YXRpYyB2b2lkIF9fX2xhbWJkYTI2X19rZXliaW5kaW5nX21hbmFnZXJfa2V5YmluZGluZ19o YW5kbGVyX2Z1bmMgKEdka0V2ZW50KiBldmVudCwgZ3BvaW50ZXIgc2VsZikgeworLQlfX2xhbWJk YTI2XyAoc2VsZiwgZXZlbnQpOworLX0KKy0KKy0KKy1zdGF0aWMgdm9pZCBfX2xhbWJkYTI3XyAo UGFuZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBrLCBnaW50IHMpIHsKKytzdGF0aWMgdm9pZCBfX2xh bWJkYTI1XyAoUGFuZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBrLCBnaW50IHMpIHsKKyAJY29uc3Qg Z2NoYXIqIF90bXAwXzsKKyAJZ2ludCBfdG1wMV87CisgCWdfcmV0dXJuX2lmX2ZhaWwgKGsgIT0g TlVMTCk7CitAQCAtMzEzLDggKzM3Nyw4IEBAIHN0YXRpYyB2b2lkIF9fbGFtYmRhMjdfIChQYW5l bCogc2VsZiwgY28KKyB9CisgCisgCistc3RhdGljIHZvaWQgX19fbGFtYmRhMjdfX3Byb3BlcnR5 X21hbmFnZXJfcHJvcGVydHlfYWN0aXZhdGUgKFByb3BlcnR5TWFuYWdlciogX3NlbmRlciwgY29u c3QgZ2NoYXIqIGtleSwgZ2ludCBzdGF0ZSwgZ3BvaW50ZXIgc2VsZikgeworLQlfX2xhbWJkYTI3 XyAoc2VsZiwga2V5LCBzdGF0ZSk7Cisrc3RhdGljIHZvaWQgX19fbGFtYmRhMjVfX3Byb3BlcnR5 X21hbmFnZXJfcHJvcGVydHlfYWN0aXZhdGUgKFByb3BlcnR5TWFuYWdlciogX3NlbmRlciwgY29u c3QgZ2NoYXIqIGtleSwgZ2ludCBzdGF0ZSwgZ3BvaW50ZXIgc2VsZikgeworKwlfX2xhbWJkYTI1 XyAoc2VsZiwga2V5LCBzdGF0ZSk7CisgfQorIAorIAorQEAgLTMzOCwxMCArNDAyLDggQEAgUGFu ZWwqIHBhbmVsX2NvbnN0cnVjdCAoR1R5cGUgb2JqZWN0X3R5cAorIAlDYW5kaWRhdGVQYW5lbCog X3RtcDE1XzsKKyAJU3dpdGNoZXIqIF90bXAxNl87CisgCVN3aXRjaGVyKiBfdG1wMTdfOworLQlL ZXliaW5kaW5nTWFuYWdlciogX3RtcDE4XyA9IE5VTEw7CistCUtleWJpbmRpbmdNYW5hZ2VyKiBr ZXliaW5kaW5nX21hbmFnZXI7CisrCVByb3BlcnR5TWFuYWdlciogX3RtcDE4XzsKKyAJUHJvcGVy dHlNYW5hZ2VyKiBfdG1wMTlfOworLQlQcm9wZXJ0eU1hbmFnZXIqIF90bXAyMF87CisgCWdfcmV0 dXJuX3ZhbF9pZl9mYWlsIChidXMgIT0gTlVMTCwgTlVMTCk7CisgCV90bXAwXyA9IGJ1czsKKyAJ X3RtcDFfID0gaWJ1c19idXNfaXNfY29ubmVjdGVkIChfdG1wMF8pOworQEAgLTM3OCwxNyArNDQw LDEyIEBAIFBhbmVsKiBwYW5lbF9jb25zdHJ1Y3QgKEdUeXBlIG9iamVjdF90eXAKKyAJX3RtcDE3 XyA9IGdfb2JqZWN0X3JlZl9zaW5rIChfdG1wMTZfKTsKKyAJX2dfb2JqZWN0X3VucmVmMCAoc2Vs Zi0+cHJpdi0+bV9zd2l0Y2hlcik7CisgCXNlbGYtPnByaXYtPm1fc3dpdGNoZXIgPSBfdG1wMTdf OworLQlfdG1wMThfID0ga2V5YmluZGluZ19tYW5hZ2VyX2dldF9pbnN0YW5jZSAoKTsKKy0Ja2V5 YmluZGluZ19tYW5hZ2VyID0gX3RtcDE4XzsKKy0Ja2V5YmluZGluZ19tYW5hZ2VyX2JpbmQgKGtl eWJpbmRpbmdfbWFuYWdlciwgUEFORUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9GT1JFV0FSRCwg X19fbGFtYmRhMjVfX2tleWJpbmRpbmdfbWFuYWdlcl9rZXliaW5kaW5nX2hhbmRsZXJfZnVuYywg c2VsZik7CistCWtleWJpbmRpbmdfbWFuYWdlcl9iaW5kIChrZXliaW5kaW5nX21hbmFnZXIsIFBB TkVMX0FDQ0VMRVJBVE9SX1NXSVRDSF9JTUVfQkFDS1dBUkQsIF9fX2xhbWJkYTI2X19rZXliaW5k aW5nX21hbmFnZXJfa2V5YmluZGluZ19oYW5kbGVyX2Z1bmMsIHNlbGYpOworLQlfdG1wMTlfID0g cHJvcGVydHlfbWFuYWdlcl9uZXcgKCk7CisrCV90bXAxOF8gPSBwcm9wZXJ0eV9tYW5hZ2VyX25l dyAoKTsKKyAJX3Byb3BlcnR5X21hbmFnZXJfdW5yZWYwIChzZWxmLT5wcml2LT5tX3Byb3BlcnR5 X21hbmFnZXIpOworLQlzZWxmLT5wcml2LT5tX3Byb3BlcnR5X21hbmFnZXIgPSBfdG1wMTlfOwor LQlfdG1wMjBfID0gc2VsZi0+cHJpdi0+bV9wcm9wZXJ0eV9tYW5hZ2VyOworLQlnX3NpZ25hbF9j b25uZWN0X29iamVjdCAoX3RtcDIwXywgInByb3BlcnR5LWFjdGl2YXRlIiwgKEdDYWxsYmFjaykg X19fbGFtYmRhMjdfX3Byb3BlcnR5X21hbmFnZXJfcHJvcGVydHlfYWN0aXZhdGUsIHNlbGYsIDAp OworKwlzZWxmLT5wcml2LT5tX3Byb3BlcnR5X21hbmFnZXIgPSBfdG1wMThfOworKwlfdG1wMTlf ID0gc2VsZi0+cHJpdi0+bV9wcm9wZXJ0eV9tYW5hZ2VyOworKwlnX3NpZ25hbF9jb25uZWN0X29i amVjdCAoX3RtcDE5XywgInByb3BlcnR5LWFjdGl2YXRlIiwgKEdDYWxsYmFjaykgX19fbGFtYmRh MjVfX3Byb3BlcnR5X21hbmFnZXJfcHJvcGVydHlfYWN0aXZhdGUsIHNlbGYsIDApOworIAlnX3Np Z25hbF9lbWl0X2J5X25hbWUgKChJQnVzUGFuZWxTZXJ2aWNlKikgc2VsZiwgInN0YXRlLWNoYW5n ZWQiKTsKKy0JX2dfb2JqZWN0X3VucmVmMCAoa2V5YmluZGluZ19tYW5hZ2VyKTsKKyAJcmV0dXJu IHNlbGY7CisgfQorIAorQEAgLTM5OCw2ICs0NTUsMzIxIEBAIFBhbmVsKiBwYW5lbF9uZXcgKElC dXNCdXMqIGJ1cykgeworIH0KKyAKKyAKKytzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQ5IChn Y2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7Cisr CWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgeworKwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAo KnNpemUpKSA6IDQ7CisrCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpzaXpl KSArIDEpOworKwl9CisrCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOworKwkoKmFycmF5 KVsqbGVuZ3RoXSA9IE5VTEw7CisrfQorKworKworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2Fk ZDEwIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVl KSB7CisrCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgeworKwkJKnNpemUgPSAoKnNpemUpID8g KDIgKiAoKnNpemUpKSA6IDQ7CisrCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwg KCpzaXplKSArIDEpOworKwl9CisrCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOworKwko KmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7CisrfQorKworKworK3N0YXRpYyBnY2hhciogc3RyaW5n X3NsaWNlIChjb25zdCBnY2hhciogc2VsZiwgZ2xvbmcgc3RhcnQsIGdsb25nIGVuZCkgeworKwln Y2hhciogcmVzdWx0ID0gTlVMTDsKKysJZ2ludCBfdG1wMF87CisrCWdpbnQgX3RtcDFfOworKwln bG9uZyBzdHJpbmdfbGVuZ3RoOworKwlnbG9uZyBfdG1wMl87CisrCWdsb25nIF90bXA1XzsKKysJ Z2Jvb2xlYW4gX3RtcDhfID0gRkFMU0U7CisrCWdsb25nIF90bXA5XzsKKysJZ2Jvb2xlYW4gX3Rt cDEyXzsKKysJZ2Jvb2xlYW4gX3RtcDEzXyA9IEZBTFNFOworKwlnbG9uZyBfdG1wMTRfOworKwln Ym9vbGVhbiBfdG1wMTdfOworKwlnbG9uZyBfdG1wMThfOworKwlnbG9uZyBfdG1wMTlfOworKwln bG9uZyBfdG1wMjBfOworKwlnbG9uZyBfdG1wMjFfOworKwlnbG9uZyBfdG1wMjJfOworKwlnY2hh ciogX3RtcDIzXyA9IE5VTEw7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5VTEws IE5VTEwpOworKwlfdG1wMF8gPSBzdHJsZW4gKHNlbGYpOworKwlfdG1wMV8gPSBfdG1wMF87Cisr CXN0cmluZ19sZW5ndGggPSAoZ2xvbmcpIF90bXAxXzsKKysJX3RtcDJfID0gc3RhcnQ7CisrCWlm IChfdG1wMl8gPCAoKGdsb25nKSAwKSkgeworKwkJZ2xvbmcgX3RtcDNfOworKwkJZ2xvbmcgX3Rt cDRfOworKwkJX3RtcDNfID0gc3RyaW5nX2xlbmd0aDsKKysJCV90bXA0XyA9IHN0YXJ0OworKwkJ c3RhcnQgPSBfdG1wM18gKyBfdG1wNF87CisrCX0KKysJX3RtcDVfID0gZW5kOworKwlpZiAoX3Rt cDVfIDwgKChnbG9uZykgMCkpIHsKKysJCWdsb25nIF90bXA2XzsKKysJCWdsb25nIF90bXA3XzsK KysJCV90bXA2XyA9IHN0cmluZ19sZW5ndGg7CisrCQlfdG1wN18gPSBlbmQ7CisrCQllbmQgPSBf dG1wNl8gKyBfdG1wN187CisrCX0KKysJX3RtcDlfID0gc3RhcnQ7CisrCWlmIChfdG1wOV8gPj0g KChnbG9uZykgMCkpIHsKKysJCWdsb25nIF90bXAxMF87CisrCQlnbG9uZyBfdG1wMTFfOworKwkJ X3RtcDEwXyA9IHN0YXJ0OworKwkJX3RtcDExXyA9IHN0cmluZ19sZW5ndGg7CisrCQlfdG1wOF8g PSBfdG1wMTBfIDw9IF90bXAxMV87CisrCX0gZWxzZSB7CisrCQlfdG1wOF8gPSBGQUxTRTsKKysJ fQorKwlfdG1wMTJfID0gX3RtcDhfOworKwlnX3JldHVybl92YWxfaWZfZmFpbCAoX3RtcDEyXywg TlVMTCk7CisrCV90bXAxNF8gPSBlbmQ7CisrCWlmIChfdG1wMTRfID49ICgoZ2xvbmcpIDApKSB7 CisrCQlnbG9uZyBfdG1wMTVfOworKwkJZ2xvbmcgX3RtcDE2XzsKKysJCV90bXAxNV8gPSBlbmQ7 CisrCQlfdG1wMTZfID0gc3RyaW5nX2xlbmd0aDsKKysJCV90bXAxM18gPSBfdG1wMTVfIDw9IF90 bXAxNl87CisrCX0gZWxzZSB7CisrCQlfdG1wMTNfID0gRkFMU0U7CisrCX0KKysJX3RtcDE3XyA9 IF90bXAxM187CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChfdG1wMTdfLCBOVUxMKTsKKysJX3Rt cDE4XyA9IHN0YXJ0OworKwlfdG1wMTlfID0gZW5kOworKwlnX3JldHVybl92YWxfaWZfZmFpbCAo X3RtcDE4XyA8PSBfdG1wMTlfLCBOVUxMKTsKKysJX3RtcDIwXyA9IHN0YXJ0OworKwlfdG1wMjFf ID0gZW5kOworKwlfdG1wMjJfID0gc3RhcnQ7CisrCV90bXAyM18gPSBnX3N0cm5kdXAgKCgoZ2No YXIqKSBzZWxmKSArIF90bXAyMF8sIChnc2l6ZSkgKF90bXAyMV8gLSBfdG1wMjJfKSk7CisrCXJl c3VsdCA9IF90bXAyM187CisrCXJldHVybiByZXN1bHQ7CisrfQorKworKworK3N0YXRpYyB2b2lk IF92YWxhX2FycmF5X2FkZDExIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6 ZSwgZ2NoYXIqIHZhbHVlKSB7CisrCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgeworKwkJKnNp emUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7CisrCQkqYXJyYXkgPSBnX3JlbmV3IChn Y2hhciosICphcnJheSwgKCpzaXplKSArIDEpOworKwl9CisrCSgqYXJyYXkpWygqbGVuZ3RoKSsr XSA9IHZhbHVlOworKwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7CisrfQorKworKworK3N0YXRp YyB2b2lkIF92YWxhX2FycmF5X2FkZDEyIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGlu dCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7CisrCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgewor KwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7CisrCQkqYXJyYXkgPSBnX3Jl bmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSArIDEpOworKwl9CisrCSgqYXJyYXkpWygqbGVu Z3RoKSsrXSA9IHZhbHVlOworKwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7CisrfQorKworKwor K3N0YXRpYyB2b2lkIF9fX19sYW1iZGEyNl8gKFBhbmVsKiBzZWxmLCBHZGtFdmVudCogZSkgewor KwlHZGtFdmVudCogX3RtcDBfOworKwlnX3JldHVybl9pZl9mYWlsIChlICE9IE5VTEwpOworKwlf dG1wMF8gPSBlOworKwlwYW5lbF9oYW5kbGVfZW5naW5lX3N3aXRjaCAoc2VsZiwgX3RtcDBfLCBG QUxTRSk7CisrfQorKworKworK3N0YXRpYyB2b2lkIF9fX19fbGFtYmRhMjZfX2tleWJpbmRpbmdf bWFuYWdlcl9rZXliaW5kaW5nX2hhbmRsZXJfZnVuYyAoR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRl ciBzZWxmKSB7CisrCV9fX19sYW1iZGEyNl8gKHNlbGYsIGV2ZW50KTsKKyt9CisrCisrCisrc3Rh dGljIHZvaWQgX19fX19sYW1iZGEyN18gKFBhbmVsKiBzZWxmLCBHZGtFdmVudCogZSkgeworKwlH ZGtFdmVudCogX3RtcDBfOworKwlnX3JldHVybl9pZl9mYWlsIChlICE9IE5VTEwpOworKwlfdG1w MF8gPSBlOworKwlwYW5lbF9oYW5kbGVfZW5naW5lX3N3aXRjaCAoc2VsZiwgX3RtcDBfLCBUUlVF KTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX19fX19fbGFtYmRhMjdfX2tleWJpbmRpbmdfbWFu YWdlcl9rZXliaW5kaW5nX2hhbmRsZXJfZnVuYyAoR2RrRXZlbnQqIGV2ZW50LCBncG9pbnRlciBz ZWxmKSB7CisrCV9fX19fbGFtYmRhMjdfIChzZWxmLCBldmVudCk7CisrfQorKworKworK3N0YXRp YyB2b2lkIHBhbmVsX3NldF9rZXliaW5kaW5nIChQYW5lbCogc2VsZikgeworKwljb25zdCBnY2hh ciogX3RtcDBfID0gTlVMTDsKKysJZ2NoYXIqIF90bXAxXzsKKysJZ2NoYXIqIGxvY2FsZTsKKysJ Y29uc3QgZ2NoYXIqIF90bXAyXzsKKysJZ2NoYXIqKiBfdG1wNF87CisrCWdpbnQgX3RtcDRfX2xl bmd0aDE7CisrCWdjaGFyKiBfdG1wNV87CisrCUlCdXNDb25maWcqIF90bXA2XzsKKysJZ2Jvb2xl YW4gX3RtcDIzXyA9IEZBTFNFOworKwlnY2hhcioqIF90bXAyNF87CisrCWdpbnQgX3RtcDI0X19s ZW5ndGgxOworKwlnYm9vbGVhbiBfdG1wMjdfOworKwlLZXliaW5kaW5nTWFuYWdlciogX3RtcDM2 XyA9IE5VTEw7CisrCUtleWJpbmRpbmdNYW5hZ2VyKiBrZXliaW5kaW5nX21hbmFnZXI7CisrCWdj aGFyKiogX3RtcDM3XzsKKysJZ2ludCBfdG1wMzdfX2xlbmd0aDE7CisrCWdfcmV0dXJuX2lmX2Zh aWwgKHNlbGYgIT0gTlVMTCk7CisrCV90bXAwXyA9IHNldGxvY2FsZSAoTENfQUxMLCBOVUxMKTsK KysJX3RtcDFfID0gZ19zdHJkdXAgKF90bXAwXyk7CisrCWxvY2FsZSA9IF90bXAxXzsKKysJX3Rt cDJfID0gbG9jYWxlOworKwlpZiAoX3RtcDJfID09IE5VTEwpIHsKKysJCWdjaGFyKiBfdG1wM187 CisrCQlfdG1wM18gPSBnX3N0cmR1cCAoIkMiKTsKKysJCV9nX2ZyZWUwIChsb2NhbGUpOworKwkJ bG9jYWxlID0gX3RtcDNfOworKwl9CisrCV90bXA0XyA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9S X0lNRV9IT1RLRVlTOworKwlfdG1wNF9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9S X0lNRV9IT1RLRVlTX2xlbmd0aDE7CisrCV90bXA1XyA9IGdfc3RyZHVwIChQQU5FTF9BQ0NFTEVS QVRPUl9TV0lUQ0hfSU1FX0ZPUkVXQVJEKTsKKysJX3ZhbGFfYXJyYXlfYWRkOSAoJnNlbGYtPnBy aXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTLCAmc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1F X0hPVEtFWVNfbGVuZ3RoMSwgJnNlbGYtPnByaXYtPl9BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19z aXplXywgX3RtcDVfKTsKKysJX3RtcDZfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisrCWlmIChf dG1wNl8gIT0gTlVMTCkgeworKwkJSUJ1c0NvbmZpZyogX3RtcDdfOworKwkJR1ZhcmlhbnQqIF90 bXA4XyA9IE5VTEw7CisrCQlHVmFyaWFudCogdmFyaWFudDsKKysJCUdWYXJpYW50KiBfdG1wOV87 CisrCQlfdG1wN18gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKKysJCV90bXA4XyA9IGlidXNfY29u ZmlnX2dldF92YWx1ZSAoX3RtcDdfLCAiZ2VuZXJhbC9ob3RrZXkiLCAidHJpZ2dlcl9hY2NlbCIp OworKwkJdmFyaWFudCA9IF90bXA4XzsKKysJCV90bXA5XyA9IHZhcmlhbnQ7CisrCQlpZiAoX3Rt cDlfICE9IE5VTEwpIHsKKysJCQlnY2hhcioqIF90bXAxMF8gPSBOVUxMOworKwkJCV90bXAxMF8g PSBnX25ldzAgKGdjaGFyKiwgMCArIDEpOworKwkJCXNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lN RV9IT1RLRVlTID0gKF92YWxhX2FycmF5X2ZyZWUgKHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lN RV9IT1RLRVlTLCBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxLCAo R0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOworKwkJCXNlbGYtPnByaXYtPkFDQ0VMRVJB VE9SX0lNRV9IT1RLRVlTID0gX3RtcDEwXzsKKysJCQlzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9J TUVfSE9US0VZU19sZW5ndGgxID0gMDsKKysJCQlzZWxmLT5wcml2LT5fQUNDRUxFUkFUT1JfSU1F X0hPVEtFWVNfc2l6ZV8gPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5n dGgxOworKwkJCXsKKysJCQkJZ2ludCBpOworKwkJCQlpID0gMDsKKysJCQkJeworKwkJCQkJZ2Jv b2xlYW4gX3RtcDExXzsKKysJCQkJCV90bXAxMV8gPSBUUlVFOworKwkJCQkJd2hpbGUgKFRSVUUp IHsKKysJCQkJCQlnYm9vbGVhbiBfdG1wMTJfOworKwkJCQkJCWdpbnQgX3RtcDE0XzsKKysJCQkJ CQlHVmFyaWFudCogX3RtcDE1XzsKKysJCQkJCQlnc2l6ZSBfdG1wMTZfID0gMFVMOworKwkJCQkJ CWdjaGFyKiogX3RtcDE3XzsKKysJCQkJCQlnaW50IF90bXAxN19fbGVuZ3RoMTsKKysJCQkJCQlH VmFyaWFudCogX3RtcDE4XzsKKysJCQkJCQlnaW50IF90bXAxOV87CisrCQkJCQkJR1ZhcmlhbnQq IF90bXAyMF8gPSBOVUxMOworKwkJCQkJCUdWYXJpYW50KiBfdG1wMjFfOworKwkJCQkJCWdjaGFy KiBfdG1wMjJfID0gTlVMTDsKKysJCQkJCQlfdG1wMTJfID0gX3RtcDExXzsKKysJCQkJCQlpZiAo IV90bXAxMl8pIHsKKysJCQkJCQkJZ2ludCBfdG1wMTNfOworKwkJCQkJCQlfdG1wMTNfID0gaTsK KysJCQkJCQkJaSA9IF90bXAxM18gKyAxOworKwkJCQkJCX0KKysJCQkJCQlfdG1wMTFfID0gRkFM U0U7CisrCQkJCQkJX3RtcDE0XyA9IGk7CisrCQkJCQkJX3RtcDE1XyA9IHZhcmlhbnQ7CisrCQkJ CQkJX3RtcDE2XyA9IGdfdmFyaWFudF9uX2NoaWxkcmVuIChfdG1wMTVfKTsKKysJCQkJCQlpZiAo ISgoKGdzaXplKSBfdG1wMTRfKSA8IF90bXAxNl8pKSB7CisrCQkJCQkJCWJyZWFrOworKwkJCQkJ CX0KKysJCQkJCQlfdG1wMTdfID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVM7 CisrCQkJCQkJX3RtcDE3X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hP VEtFWVNfbGVuZ3RoMTsKKysJCQkJCQlfdG1wMThfID0gdmFyaWFudDsKKysJCQkJCQlfdG1wMTlf ID0gaTsKKysJCQkJCQlfdG1wMjBfID0gZ192YXJpYW50X2dldF9jaGlsZF92YWx1ZSAoX3RtcDE4 XywgKGdzaXplKSBfdG1wMTlfKTsKKysJCQkJCQlfdG1wMjFfID0gX3RtcDIwXzsKKysJCQkJCQlf dG1wMjJfID0gZ192YXJpYW50X2R1cF9zdHJpbmcgKF90bXAyMV8sIE5VTEwpOworKwkJCQkJCV92 YWxhX2FycmF5X2FkZDEwICgmc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVMsICZz ZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxLCAmc2VsZi0+cHJpdi0+ X0FDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX3NpemVfLCBfdG1wMjJfKTsKKysJCQkJCQlfZ192YXJp YW50X3VucmVmMCAoX3RtcDIxXyk7CisrCQkJCQl9CisrCQkJCX0KKysJCQl9CisrCQl9CisrCQlf Z192YXJpYW50X3VucmVmMCAodmFyaWFudCk7CisrCX0KKysJX3RtcDI0XyA9IHNlbGYtPnByaXYt PkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTOworKwlfdG1wMjRfX2xlbmd0aDEgPSBzZWxmLT5wcml2 LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxOworKwlpZiAoX3RtcDI0X19sZW5ndGgx ID09IDEpIHsKKysJCWdjaGFyKiogX3RtcDI1XzsKKysJCWdpbnQgX3RtcDI1X19sZW5ndGgxOwor KwkJY29uc3QgZ2NoYXIqIF90bXAyNl87CisrCQlfdG1wMjVfID0gc2VsZi0+cHJpdi0+QUNDRUxF UkFUT1JfSU1FX0hPVEtFWVM7CisrCQlfdG1wMjVfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5BQ0NF TEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxOworKwkJX3RtcDI2XyA9IF90bXAyNV9bMF07Cisr CQlfdG1wMjNfID0gZ19zdHJjbXAwIChfdG1wMjZfLCBQQU5FTF9BQ0NFTEVSQVRPUl9TV0lUQ0hf SU1FX0ZPUkVXQVJEKSA9PSAwOworKwl9IGVsc2UgeworKwkJX3RtcDIzXyA9IEZBTFNFOworKwl9 CisrCV90bXAyN18gPSBfdG1wMjNfOworKwlpZiAoX3RtcDI3XykgeworKwkJY29uc3QgZ2NoYXIq IF90bXAyOF87CisrCQlnY2hhciogX3RtcDI5XyA9IE5VTEw7CisrCQlnY2hhciogX3RtcDMwXzsK KysJCWdib29sZWFuIF90bXAzMV87CisrCQlfdG1wMjhfID0gbG9jYWxlOworKwkJX3RtcDI5XyA9 IHN0cmluZ19zbGljZSAoX3RtcDI4XywgKGdsb25nKSAwLCAoZ2xvbmcpIDIpOworKwkJX3RtcDMw XyA9IF90bXAyOV87CisrCQlfdG1wMzFfID0gZ19zdHJjbXAwIChfdG1wMzBfLCAia28iKSA9PSAw OworKwkJX2dfZnJlZTAgKF90bXAzMF8pOworKwkJaWYgKF90bXAzMV8pIHsKKysJCQlnY2hhcioq IF90bXAzMl87CisrCQkJZ2ludCBfdG1wMzJfX2xlbmd0aDE7CisrCQkJZ2NoYXIqIF90bXAzM187 CisrCQkJZ2NoYXIqKiBfdG1wMzRfOworKwkJCWdpbnQgX3RtcDM0X19sZW5ndGgxOworKwkJCWdj aGFyKiBfdG1wMzVfOworKwkJCV90bXAzMl8gPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVf SE9US0VZUzsKKysJCQlfdG1wMzJfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9J TUVfSE9US0VZU19sZW5ndGgxOworKwkJCV90bXAzM18gPSBnX3N0cmR1cCAoIkhhbmd1bCIpOwor KwkJCV92YWxhX2FycmF5X2FkZDExICgmc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtF WVMsICZzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxLCAmc2VsZi0+ cHJpdi0+X0FDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX3NpemVfLCBfdG1wMzNfKTsKKysJCQlfdG1w MzRfID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVM7CisrCQkJX3RtcDM0X19s ZW5ndGgxID0gc2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMTsKKysJ CQlfdG1wMzVfID0gZ19zdHJkdXAgKCJBbHRfUiIpOworKwkJCV92YWxhX2FycmF5X2FkZDEyICgm c2VsZi0+cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVMsICZzZWxmLT5wcml2LT5BQ0NFTEVS QVRPUl9JTUVfSE9US0VZU19sZW5ndGgxLCAmc2VsZi0+cHJpdi0+X0FDQ0VMRVJBVE9SX0lNRV9I T1RLRVlTX3NpemVfLCBfdG1wMzVfKTsKKysJCX0KKysJfQorKwlfdG1wMzZfID0ga2V5YmluZGlu Z19tYW5hZ2VyX2dldF9pbnN0YW5jZSAoKTsKKysJa2V5YmluZGluZ19tYW5hZ2VyID0gX3RtcDM2 XzsKKysJX3RtcDM3XyA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTOworKwlf dG1wMzdfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5n dGgxOworKwl7CisrCQlnY2hhcioqIGtleWJpbmRpbmdfY29sbGVjdGlvbiA9IE5VTEw7CisrCQln aW50IGtleWJpbmRpbmdfY29sbGVjdGlvbl9sZW5ndGgxID0gMDsKKysJCWdpbnQgX2tleWJpbmRp bmdfY29sbGVjdGlvbl9zaXplXyA9IDA7CisrCQlnaW50IGtleWJpbmRpbmdfaXQgPSAwOworKwkJ a2V5YmluZGluZ19jb2xsZWN0aW9uID0gX3RtcDM3XzsKKysJCWtleWJpbmRpbmdfY29sbGVjdGlv bl9sZW5ndGgxID0gX3RtcDM3X19sZW5ndGgxOworKwkJZm9yIChrZXliaW5kaW5nX2l0ID0gMDsg a2V5YmluZGluZ19pdCA8IF90bXAzN19fbGVuZ3RoMTsga2V5YmluZGluZ19pdCA9IGtleWJpbmRp bmdfaXQgKyAxKSB7CisrCQkJZ2NoYXIqIF90bXAzOF87CisrCQkJZ2NoYXIqIGtleWJpbmRpbmcg PSBOVUxMOworKwkJCV90bXAzOF8gPSBnX3N0cmR1cCAoa2V5YmluZGluZ19jb2xsZWN0aW9uW2tl eWJpbmRpbmdfaXRdKTsKKysJCQlrZXliaW5kaW5nID0gX3RtcDM4XzsKKysJCQl7CisrCQkJCUtl eWJpbmRpbmdNYW5hZ2VyKiBfdG1wMzlfOworKwkJCQljb25zdCBnY2hhciogX3RtcDQwXzsKKysJ CQkJY29uc3QgZ2NoYXIqIF90bXA0MV87CisrCQkJCV90bXAzOV8gPSBrZXliaW5kaW5nX21hbmFn ZXI7CisrCQkJCV90bXA0MF8gPSBrZXliaW5kaW5nOworKwkJCQlrZXliaW5kaW5nX21hbmFnZXJf YmluZCAoX3RtcDM5XywgX3RtcDQwXywgX19fX19sYW1iZGEyNl9fa2V5YmluZGluZ19tYW5hZ2Vy X2tleWJpbmRpbmdfaGFuZGxlcl9mdW5jLCBzZWxmKTsKKysJCQkJX3RtcDQxXyA9IGtleWJpbmRp bmc7CisrCQkJCWlmIChnX3N0cmNtcDAgKF90bXA0MV8sIFBBTkVMX0FDQ0VMRVJBVE9SX1NXSVRD SF9JTUVfRk9SRVdBUkQpID09IDApIHsKKysJCQkJCUtleWJpbmRpbmdNYW5hZ2VyKiBfdG1wNDJf OworKwkJCQkJX3RtcDQyXyA9IGtleWJpbmRpbmdfbWFuYWdlcjsKKysJCQkJCWtleWJpbmRpbmdf bWFuYWdlcl9iaW5kIChfdG1wNDJfLCBQQU5FTF9BQ0NFTEVSQVRPUl9TV0lUQ0hfSU1FX0JBQ0tX QVJELCBfX19fX19sYW1iZGEyN19fa2V5YmluZGluZ19tYW5hZ2VyX2tleWJpbmRpbmdfaGFuZGxl cl9mdW5jLCBzZWxmKTsKKysJCQkJfQorKwkJCQlfZ19mcmVlMCAoa2V5YmluZGluZyk7CisrCQkJ fQorKwkJfQorKwl9CisrCV9nX29iamVjdF91bnJlZjAgKGtleWJpbmRpbmdfbWFuYWdlcik7Cisr CV9nX2ZyZWUwIChsb2NhbGUpOworK30KKysKKysKKyBzdGF0aWMgdm9pZCBfcGFuZWxfY29uZmln X3ZhbHVlX2NoYW5nZWRfY2JfaWJ1c19jb25maWdfdmFsdWVfY2hhbmdlZCAoSUJ1c0NvbmZpZyog X3NlbmRlciwgY29uc3QgZ2NoYXIqIHNlY3Rpb24sIGNvbnN0IGdjaGFyKiBuYW1lLCBHVmFyaWFu dCogdmFsdWUsIGdwb2ludGVyIHNlbGYpIHsKKyAJcGFuZWxfY29uZmlnX3ZhbHVlX2NoYW5nZWRf Y2IgKHNlbGYsIF9zZW5kZXIsIHNlY3Rpb24sIG5hbWUsIHZhbHVlKTsKKyB9CitAQCAtNDI0LDYg Kzc5Niw3IEBAIHZvaWQgcGFuZWxfc2V0X2NvbmZpZyAoUGFuZWwqIHNlbGYsIElCdXMKKyAJX3Rt cDRfID0gX2dfb2JqZWN0X3JlZjAgKF90bXAzXyk7CisgCV9nX29iamVjdF91bnJlZjAgKHNlbGYt PnByaXYtPm1fY29uZmlnKTsKKyAJc2VsZi0+cHJpdi0+bV9jb25maWcgPSBfdG1wNF87CisrCXBh bmVsX3NldF9rZXliaW5kaW5nIChzZWxmKTsKKyAJX3RtcDVfID0gc2VsZi0+cHJpdi0+bV9jb25m aWc7CisgCWlmIChfdG1wNV8gIT0gTlVMTCkgeworIAkJSUJ1c0NvbmZpZyogX3RtcDZfOworQEAg LTQzNSw2ICs4MDgsNyBAQCB2b2lkIHBhbmVsX3NldF9jb25maWcgKFBhbmVsKiBzZWxmLCBJQnVz CisgCQlHVmFyaWFudCogX3RtcDEyXzsKKyAJCV90bXA2XyA9IHNlbGYtPnByaXYtPm1fY29uZmln OworIAkJZ19zaWduYWxfY29ubmVjdF9vYmplY3QgKF90bXA2XywgInZhbHVlLWNoYW5nZWQiLCAo R0NhbGxiYWNrKSBfcGFuZWxfY29uZmlnX3ZhbHVlX2NoYW5nZWRfY2JfaWJ1c19jb25maWdfdmFs dWVfY2hhbmdlZCwgc2VsZiwgMCk7CisrCQlwYW5lbF9pbml0X2VuZ2luZXNfb3JkZXIgKHNlbGYp OworIAkJX3RtcDdfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisgCQlfdG1wOF8gPSBpYnVzX2Nv bmZpZ19nZXRfdmFsdWUgKF90bXA3XywgImdlbmVyYWwiLCAicHJlbG9hZF9lbmdpbmVzIik7Cisg CQlfdG1wOV8gPSBfdG1wOF87CitAQCAtNDUwLDcgKzgyNCw3ODYgQEAgdm9pZCBwYW5lbF9zZXRf Y29uZmlnIChQYW5lbCogc2VsZiwgSUJ1cworIH0KKyAKKyAKKy1zdGF0aWMgdm9pZCBfdmFsYV9h cnJheV9hZGQ5IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIq IHZhbHVlKSB7Cisrc3RhdGljIHZvaWQgcGFuZWxfZ2tiZGxheW91dF9jaGFuZ2VkX2NiIChQYW5l bCogc2VsZikgeworKwlHVGltZXIqIF90bXAwXzsKKysJZ2RvdWJsZSBfdG1wMV8gPSAwLjA7Cisr CWdkb3VibGUgZWxhcHNlZDsKKysJZ2Jvb2xlYW4gX3RtcDJfID0gRkFMU0U7CisrCWdkb3VibGUg X3RtcDNfOworKwlnYm9vbGVhbiBfdG1wNV87CisrCWdpbnQgX3RtcDZfOworKwlHVGltZXIqIF90 bXAxMF87CisrCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7CisrCV90bXAwXyA9IHNl bGYtPnByaXYtPm1fY2hhbmdlZF9sYXlvdXRfdGltZXI7CisrCV90bXAxXyA9IGdfdGltZXJfZWxh cHNlZCAoX3RtcDBfLCBOVUxMKTsKKysJZWxhcHNlZCA9IF90bXAxXzsKKysJX3RtcDNfID0gZWxh cHNlZDsKKysJaWYgKF90bXAzXyA8IDEuMCkgeworKwkJZ2RvdWJsZSBfdG1wNF87CisrCQlfdG1w NF8gPSBlbGFwc2VkOworKwkJX3RtcDJfID0gX3RtcDRfID4gMC4wOworKwl9IGVsc2UgeworKwkJ X3RtcDJfID0gRkFMU0U7CisrCX0KKysJX3RtcDVfID0gX3RtcDJfOworKwlpZiAoX3RtcDVfKSB7 CisrCQlyZXR1cm47CisrCX0KKysJX3RtcDZfID0gc2VsZi0+cHJpdi0+bV9mYWxsYmFja19sb2Nr X2lkOworKwlpZiAoX3RtcDZfICE9ICgtMSkpIHsKKysJCUdrYmRMYXlvdXQqIF90bXA3XzsKKysJ CWdpbnQgX3RtcDhfOworKwkJX3RtcDdfID0gc2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0OworKwkJ X3RtcDhfID0gc2VsZi0+cHJpdi0+bV9mYWxsYmFja19sb2NrX2lkOworKwkJZ2tiZF9sYXlvdXRf bG9ja19ncm91cCAoX3RtcDdfLCBfdG1wOF8pOworKwkJc2VsZi0+cHJpdi0+bV9mYWxsYmFja19s b2NrX2lkID0gLTE7CisrCX0gZWxzZSB7CisrCQlYS0JMYXlvdXQqIF90bXA5XzsKKysJCV90bXA5 XyA9IHNlbGYtPnByaXYtPm1feGtibGF5b3V0OworKwkJeGtiX2xheW91dF9yZXNldF9sYXlvdXQg KF90bXA5Xyk7CisrCX0KKysJcGFuZWxfdXBkYXRlX3hrYl9lbmdpbmVzIChzZWxmKTsKKysJX3Rt cDEwXyA9IHNlbGYtPnByaXYtPm1fY2hhbmdlZF9sYXlvdXRfdGltZXI7CisrCWdfdGltZXJfcmVz ZXQgKF90bXAxMF8pOworK30KKysKKysKKytzdGF0aWMgdm9pZCBwYW5lbF9pbml0X2drYmQgKFBh bmVsKiBzZWxmKSB7CisrCUdrYmRMYXlvdXQqIF90bXAwXzsKKysJR2tiZExheW91dCogX3RtcDFf OworKwlHVGltZXIqIF90bXAyXzsKKysJR1RpbWVyKiBfdG1wM187CisrCUdrYmRMYXlvdXQqIF90 bXA0XzsKKysJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKKysJX3RtcDBfID0gZ2ti ZF9sYXlvdXRfbmV3ICgpOworKwlfZ2tiZF9sYXlvdXRfdW5yZWYwIChzZWxmLT5wcml2LT5tX2dr YmRsYXlvdXQpOworKwlzZWxmLT5wcml2LT5tX2drYmRsYXlvdXQgPSBfdG1wMF87CisrCV90bXAx XyA9IHNlbGYtPnByaXYtPm1fZ2tiZGxheW91dDsKKysJZ19zaWduYWxfY29ubmVjdF9vYmplY3Qg KF90bXAxXywgImNoYW5nZWQiLCAoR0NhbGxiYWNrKSBfcGFuZWxfZ2tiZGxheW91dF9jaGFuZ2Vk X2NiX2drYmRfbGF5b3V0X2NoYW5nZWQsIHNlbGYsIDApOworKwlfdG1wMl8gPSBnX3RpbWVyX25l dyAoKTsKKysJX2dfdGltZXJfZGVzdHJveTAgKHNlbGYtPnByaXYtPm1fY2hhbmdlZF9sYXlvdXRf dGltZXIpOworKwlzZWxmLT5wcml2LT5tX2NoYW5nZWRfbGF5b3V0X3RpbWVyID0gX3RtcDJfOwor KwlfdG1wM18gPSBzZWxmLT5wcml2LT5tX2NoYW5nZWRfbGF5b3V0X3RpbWVyOworKwlnX3RpbWVy X3N0YXJ0IChfdG1wM18pOworKwlfdG1wNF8gPSBzZWxmLT5wcml2LT5tX2drYmRsYXlvdXQ7Cisr CWdrYmRfbGF5b3V0X3N0YXJ0X2xpc3RlbiAoX3RtcDRfKTsKKyt9CisrCisrCisrc3RhdGljIHZv aWQgcGFuZWxfaW5pdF9lbmdpbmVzX29yZGVyIChQYW5lbCogc2VsZikgeworKwlJQnVzQ29uZmln KiBfdG1wMF87CisrCUlCdXNDb25maWcqIF90bXAxXzsKKysJWEtCTGF5b3V0KiBfdG1wMl87Cisr CWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7CisrCV90bXAwXyA9IHNlbGYtPnByaXYt Pm1fY29uZmlnOworKwlpZiAoX3RtcDBfID09IE5VTEwpIHsKKysJCXJldHVybjsKKysJfQorKwlf dG1wMV8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKKysJX3RtcDJfID0geGtiX2xheW91dF9uZXcg KF90bXAxXyk7CisrCV94a2JfbGF5b3V0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV94a2JsYXlvdXQp OworKwlzZWxmLT5wcml2LT5tX3hrYmxheW91dCA9IF90bXAyXzsKKysJaWYgKEhBVkVfSUJVU19H S0JEKSB7CisrCQlwYW5lbF9pbml0X2drYmQgKHNlbGYpOworKwl9CisrCXBhbmVsX3VwZGF0ZV94 a2JfZW5naW5lcyAoc2VsZik7CisrfQorKworKworK3N0YXRpYyB2b2lkIF9nX2ZyZWUwXyAoZ3Bv aW50ZXIgdmFyKSB7CisrCXZhciA9IChnX2ZyZWUgKHZhciksIE5VTEwpOworK30KKysKKysKKytz dGF0aWMgdm9pZCBfZ19saXN0X2ZyZWVfX2dfZnJlZTBfIChHTGlzdCogc2VsZikgeworKwlnX2xp c3RfZm9yZWFjaCAoc2VsZiwgKEdGdW5jKSBfZ19mcmVlMF8sIE5VTEwpOworKwlnX2xpc3RfZnJl ZSAoc2VsZik7CisrfQorKworKworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDEzIChnY2hh cioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7CisrCWlm ICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgeworKwkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNp emUpKSA6IDQ7CisrCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSAr IDEpOworKwl9CisrCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOworKwkoKmFycmF5KVsq bGVuZ3RoXSA9IE5VTEw7CisrfQorKworKworK3N0YXRpYyBnYm9vbGVhbiBfdmFsYV9zdHJpbmdf YXJyYXlfY29udGFpbnMgKGdjaGFyKiogc3RhY2ssIGludCBzdGFja19sZW5ndGgsIGdjaGFyKiBu ZWVkbGUpIHsKKysJaW50IGk7CisrCWZvciAoaSA9IDA7IGkgPCBzdGFja19sZW5ndGg7IGkrKykg eworKwkJaWYgKGdfc3RyY21wMCAoc3RhY2tbaV0sIG5lZWRsZSkgPT0gMCkgeworKwkJCXJldHVy biBUUlVFOworKwkJfQorKwl9CisrCXJldHVybiBGQUxTRTsKKyt9CisrCisrCisrc3RhdGljIHZv aWQgX3ZhbGFfYXJyYXlfYWRkMTQgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBz aXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7CisrCQkq c2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJCSphcnJheSA9IGdfcmVuZXcg KGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJKCphcnJheSlbKCpsZW5ndGgp KytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKKyt9CisrCisrCisrc3Rh dGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTUgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwg aW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7 CisrCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJCSphcnJheSA9IGdf cmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJKCphcnJheSlbKCps ZW5ndGgpKytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKKyt9CisrCisr Cisrc3RhdGljIHZvaWQgcGFuZWxfdXBkYXRlX3hrYl9lbmdpbmVzIChQYW5lbCogc2VsZikgewor KwlYS0JMYXlvdXQqIF90bXAwXzsKKysJZ2NoYXIqIF90bXAxXyA9IE5VTEw7CisrCWdjaGFyKiB2 YXJfbGF5b3V0OworKwlYS0JMYXlvdXQqIF90bXAyXzsKKysJZ2NoYXIqIF90bXAzXyA9IE5VTEw7 CisrCWdjaGFyKiB2YXJfdmFyaWFudDsKKysJY29uc3QgZ2NoYXIqIF90bXA0XzsKKysJY29uc3Qg Z2NoYXIqIF90bXA1XzsKKysJZ2NoYXIqKiBfdG1wNl87CisrCWdjaGFyKiogX3RtcDdfID0gTlVM TDsKKysJY29uc3QgZ2NoYXIqIF90bXA4XzsKKysJZ2NoYXIqKiBfdG1wOV87CisrCWdjaGFyKiog X3RtcDEwXyA9IE5VTEw7CisrCUlCdXNYS0JDb25maWdSZWdpc3RyeSogX3RtcDExXzsKKysJSUJ1 c1hLQkNvbmZpZ1JlZ2lzdHJ5KiBfdG1wMTJfOworKwlJQnVzWEtCQ29uZmlnUmVnaXN0cnkqIHJl Z2lzdHJ5OworKwlnY2hhcioqIF90bXAxM18gPSBOVUxMOworKwlnY2hhcioqIHZhcl94a2JfZW5n aW5lX25hbWVzOworKwlnaW50IHZhcl94a2JfZW5naW5lX25hbWVzX2xlbmd0aDE7CisrCWdpbnQg X3Zhcl94a2JfZW5naW5lX25hbWVzX3NpemVfOworKwlJQnVzQ29uZmlnKiBfdG1wNjVfOworKwlH VmFyaWFudCogX3RtcDY2XyA9IE5VTEw7CisrCUdWYXJpYW50KiB2YXJfZW5naW5lczsKKysJZ2No YXIqKiBfdG1wNjdfID0gTlVMTDsKKysJZ2NoYXIqKiBlbmdpbmVfbmFtZXM7CisrCWdpbnQgZW5n aW5lX25hbWVzX2xlbmd0aDE7CisrCWdpbnQgX2VuZ2luZV9uYW1lc19zaXplXzsKKysJZ2Jvb2xl YW4gdXBkYXRlZF9lbmdpbmVfbmFtZXM7CisrCUdWYXJpYW50KiBfdG1wNjhfOworKwlnY2hhcioq IF90bXA3Ml87CisrCWdpbnQgX3RtcDcyX19sZW5ndGgxOworKwlnYm9vbGVhbiBfdG1wNzlfOwor KwlJQnVzQ29uZmlnKiBfdG1wODRfOworKwlHVmFyaWFudCogX3RtcDg1XyA9IE5VTEw7CisrCUdW YXJpYW50KiB2YXJfb3JkZXI7CisrCWdjaGFyKiogX3RtcDg2XyA9IE5VTEw7CisrCWdjaGFyKiog b3JkZXJfbmFtZXM7CisrCWdpbnQgb3JkZXJfbmFtZXNfbGVuZ3RoMTsKKysJZ2ludCBfb3JkZXJf bmFtZXNfc2l6ZV87CisrCWdib29sZWFuIHVwZGF0ZWRfb3JkZXJfbmFtZXM7CisrCUdWYXJpYW50 KiBfdG1wODdfOworKwlnY2hhcioqIF90bXA5MV87CisrCWdpbnQgX3RtcDkxX19sZW5ndGgxOwor KwlnYm9vbGVhbiBfdG1wOThfOworKwlnX3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOwor KwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX3hrYmxheW91dDsKKysJX3RtcDFfID0geGtiX2xheW91 dF9nZXRfbGF5b3V0IChfdG1wMF8pOworKwl2YXJfbGF5b3V0ID0gX3RtcDFfOworKwlfdG1wMl8g PSBzZWxmLT5wcml2LT5tX3hrYmxheW91dDsKKysJX3RtcDNfID0geGtiX2xheW91dF9nZXRfdmFy aWFudCAoX3RtcDJfKTsKKysJdmFyX3ZhcmlhbnQgPSBfdG1wM187CisrCV90bXA0XyA9IHZhcl9s YXlvdXQ7CisrCWlmIChnX3N0cmNtcDAgKF90bXA0XywgIiIpID09IDApIHsKKysJCV9nX2ZyZWUw ICh2YXJfdmFyaWFudCk7CisrCQlfZ19mcmVlMCAodmFyX2xheW91dCk7CisrCQlyZXR1cm47Cisr CX0KKysJX3RtcDVfID0gdmFyX2xheW91dDsKKysJX3RtcDdfID0gX3RtcDZfID0gZ19zdHJzcGxp dCAoX3RtcDVfLCAiLCIsIDApOworKwlzZWxmLT5wcml2LT5tX2xheW91dHMgPSAoX3ZhbGFfYXJy YXlfZnJlZSAoc2VsZi0+cHJpdi0+bV9sYXlvdXRzLCBzZWxmLT5wcml2LT5tX2xheW91dHNfbGVu Z3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKKysJc2VsZi0+cHJpdi0+bV9s YXlvdXRzID0gX3RtcDdfOworKwlzZWxmLT5wcml2LT5tX2xheW91dHNfbGVuZ3RoMSA9IF92YWxh X2FycmF5X2xlbmd0aCAoX3RtcDZfKTsKKysJc2VsZi0+cHJpdi0+X21fbGF5b3V0c19zaXplXyA9 IHNlbGYtPnByaXYtPm1fbGF5b3V0c19sZW5ndGgxOworKwlfdG1wOF8gPSB2YXJfdmFyaWFudDsK KysJX3RtcDEwXyA9IF90bXA5XyA9IGdfc3Ryc3BsaXQgKF90bXA4XywgIiwiLCAwKTsKKysJc2Vs Zi0+cHJpdi0+bV92YXJpYW50cyA9IChfdmFsYV9hcnJheV9mcmVlIChzZWxmLT5wcml2LT5tX3Zh cmlhbnRzLCBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkg Z19mcmVlKSwgTlVMTCk7CisrCXNlbGYtPnByaXYtPm1fdmFyaWFudHMgPSBfdG1wMTBfOworKwlz ZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDEgPSBfdmFsYV9hcnJheV9sZW5ndGggKF90bXA5 Xyk7CisrCXNlbGYtPnByaXYtPl9tX3ZhcmlhbnRzX3NpemVfID0gc2VsZi0+cHJpdi0+bV92YXJp YW50c19sZW5ndGgxOworKwlfdG1wMTFfID0gaWJ1c194a2JfY29uZmlnX3JlZ2lzdHJ5X25ldyAo KTsKKysJX3RtcDEyXyA9IGdfb2JqZWN0X3JlZl9zaW5rIChfdG1wMTFfKTsKKysJcmVnaXN0cnkg PSBfdG1wMTJfOworKwlfdG1wMTNfID0gZ19uZXcwIChnY2hhciosIDAgKyAxKTsKKysJdmFyX3hr Yl9lbmdpbmVfbmFtZXMgPSBfdG1wMTNfOworKwl2YXJfeGtiX2VuZ2luZV9uYW1lc19sZW5ndGgx ID0gMDsKKysJX3Zhcl94a2JfZW5naW5lX25hbWVzX3NpemVfID0gdmFyX3hrYl9lbmdpbmVfbmFt ZXNfbGVuZ3RoMTsKKysJeworKwkJZ2ludCBpOworKwkJaSA9IDA7CisrCQl7CisrCQkJZ2Jvb2xl YW4gX3RtcDE0XzsKKysJCQlfdG1wMTRfID0gVFJVRTsKKysJCQl3aGlsZSAoVFJVRSkgeworKwkJ CQlnYm9vbGVhbiBfdG1wMTVfOworKwkJCQlnaW50IF90bXAxN187CisrCQkJCWdjaGFyKiogX3Rt cDE4XzsKKysJCQkJZ2ludCBfdG1wMThfX2xlbmd0aDE7CisrCQkJCWdjaGFyKiogX3RtcDE5XzsK KysJCQkJZ2ludCBfdG1wMTlfX2xlbmd0aDE7CisrCQkJCWdpbnQgX3RtcDIwXzsKKysJCQkJY29u c3QgZ2NoYXIqIF90bXAyMV87CisrCQkJCWdjaGFyKiBfdG1wMjJfOworKwkJCQlnY2hhciogbmFt ZTsKKysJCQkJZ2NoYXIqIGxhbmc7CisrCQkJCWdib29sZWFuIF90bXAyM18gPSBGQUxTRTsKKysJ CQkJZ2ludCBfdG1wMjRfOworKwkJCQlnY2hhcioqIF90bXAyNV87CisrCQkJCWdpbnQgX3RtcDI1 X19sZW5ndGgxOworKwkJCQlnYm9vbGVhbiBfdG1wMjlfOworKwkJCQljb25zdCBnY2hhciogX3Rt cDUwXzsKKysJCQkJZ2NoYXIqKiBfdG1wNjFfOworKwkJCQlnaW50IF90bXA2MV9fbGVuZ3RoMTsK KysJCQkJY29uc3QgZ2NoYXIqIF90bXA2Ml87CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wNjNfOwor KwkJCQlnY2hhciogX3RtcDY0XyA9IE5VTEw7CisrCQkJCV90bXAxNV8gPSBfdG1wMTRfOworKwkJ CQlpZiAoIV90bXAxNV8pIHsKKysJCQkJCWdpbnQgX3RtcDE2XzsKKysJCQkJCV90bXAxNl8gPSBp OworKwkJCQkJaSA9IF90bXAxNl8gKyAxOworKwkJCQl9CisrCQkJCV90bXAxNF8gPSBGQUxTRTsK KysJCQkJX3RtcDE3XyA9IGk7CisrCQkJCV90bXAxOF8gPSBzZWxmLT5wcml2LT5tX2xheW91dHM7 CisrCQkJCV90bXAxOF9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fbGF5b3V0c19sZW5ndGgxOwor KwkJCQlpZiAoIShfdG1wMTdfIDwgX3RtcDE4X19sZW5ndGgxKSkgeworKwkJCQkJYnJlYWs7Cisr CQkJCX0KKysJCQkJX3RtcDE5XyA9IHNlbGYtPnByaXYtPm1fbGF5b3V0czsKKysJCQkJX3RtcDE5 X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0aDE7CisrCQkJCV90bXAyMF8g PSBpOworKwkJCQlfdG1wMjFfID0gX3RtcDE5X1tfdG1wMjBfXTsKKysJCQkJX3RtcDIyXyA9IGdf c3RyZHVwIChfdG1wMjFfKTsKKysJCQkJbmFtZSA9IF90bXAyMl87CisrCQkJCWxhbmcgPSBOVUxM OworKwkJCQlfdG1wMjRfID0gaTsKKysJCQkJX3RtcDI1XyA9IHNlbGYtPnByaXYtPm1fdmFyaWFu dHM7CisrCQkJCV90bXAyNV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHNfbGVuZ3Ro MTsKKysJCQkJaWYgKF90bXAyNF8gPCBfdG1wMjVfX2xlbmd0aDEpIHsKKysJCQkJCWdjaGFyKiog X3RtcDI2XzsKKysJCQkJCWdpbnQgX3RtcDI2X19sZW5ndGgxOworKwkJCQkJZ2ludCBfdG1wMjdf OworKwkJCQkJY29uc3QgZ2NoYXIqIF90bXAyOF87CisrCQkJCQlfdG1wMjZfID0gc2VsZi0+cHJp di0+bV92YXJpYW50czsKKysJCQkJCV90bXAyNl9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fdmFy aWFudHNfbGVuZ3RoMTsKKysJCQkJCV90bXAyN18gPSBpOworKwkJCQkJX3RtcDI4XyA9IF90bXAy Nl9bX3RtcDI3X107CisrCQkJCQlfdG1wMjNfID0gZ19zdHJjbXAwIChfdG1wMjhfLCAiIikgIT0g MDsKKysJCQkJfSBlbHNlIHsKKysJCQkJCV90bXAyM18gPSBGQUxTRTsKKysJCQkJfQorKwkJCQlf dG1wMjlfID0gX3RtcDIzXzsKKysJCQkJaWYgKF90bXAyOV8pIHsKKysJCQkJCWNvbnN0IGdjaGFy KiBfdG1wMzBfOworKwkJCQkJZ2NoYXIqKiBfdG1wMzFfOworKwkJCQkJZ2ludCBfdG1wMzFfX2xl bmd0aDE7CisrCQkJCQlnaW50IF90bXAzMl87CisrCQkJCQljb25zdCBnY2hhciogX3RtcDMzXzsK KysJCQkJCWdjaGFyKiBfdG1wMzRfID0gTlVMTDsKKysJCQkJCWNvbnN0IGdjaGFyKiBfdG1wMzVf OworKwkJCQkJZ2NoYXIqKiBfdG1wMzZfOworKwkJCQkJZ2ludCBfdG1wMzZfX2xlbmd0aDE7Cisr CQkJCQlnaW50IF90bXAzN187CisrCQkJCQljb25zdCBnY2hhciogX3RtcDM4XzsKKysJCQkJCWdj aGFyKiBfdG1wMzlfID0gTlVMTDsKKysJCQkJCWdjaGFyKiBsYXlvdXQ7CisrCQkJCQlJQnVzWEtC Q29uZmlnUmVnaXN0cnkqIF90bXA0MF87CisrCQkJCQljb25zdCBnY2hhciogX3RtcDQxXzsKKysJ CQkJCUdMaXN0KiBfdG1wNDJfID0gTlVMTDsKKysJCQkJCUdMaXN0KiBsYW5nczsKKysJCQkJCUdM aXN0KiBfdG1wNDNfOworKwkJCQkJZ3VpbnQgX3RtcDQ0XyA9IDBVOworKwkJCQkJX3RtcDMwXyA9 IG5hbWU7CisrCQkJCQlfdG1wMzFfID0gc2VsZi0+cHJpdi0+bV92YXJpYW50czsKKysJCQkJCV90 bXAzMV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHNfbGVuZ3RoMTsKKysJCQkJCV90 bXAzMl8gPSBpOworKwkJCQkJX3RtcDMzXyA9IF90bXAzMV9bX3RtcDMyX107CisrCQkJCQlfdG1w MzRfID0gZ19zdHJkdXBfcHJpbnRmICgiJXM6JXMiLCBfdG1wMzBfLCBfdG1wMzNfKTsKKysJCQkJ CV9nX2ZyZWUwIChuYW1lKTsKKysJCQkJCW5hbWUgPSBfdG1wMzRfOworKwkJCQkJX3RtcDM1XyA9 IG5hbWU7CisrCQkJCQlfdG1wMzZfID0gc2VsZi0+cHJpdi0+bV92YXJpYW50czsKKysJCQkJCV90 bXAzNl9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHNfbGVuZ3RoMTsKKysJCQkJCV90 bXAzN18gPSBpOworKwkJCQkJX3RtcDM4XyA9IF90bXAzNl9bX3RtcDM3X107CisrCQkJCQlfdG1w MzlfID0gZ19zdHJkdXBfcHJpbnRmICgiJXMoJXMpIiwgX3RtcDM1XywgX3RtcDM4Xyk7CisrCQkJ CQlsYXlvdXQgPSBfdG1wMzlfOworKwkJCQkJX3RtcDQwXyA9IHJlZ2lzdHJ5OworKwkJCQkJX3Rt cDQxXyA9IGxheW91dDsKKysJCQkJCV90bXA0Ml8gPSBpYnVzX3hrYl9jb25maWdfcmVnaXN0cnlf bGF5b3V0X2xhbmdfZ2V0X2xhbmdzIChfdG1wNDBfLCBfdG1wNDFfKTsKKysJCQkJCWxhbmdzID0g X3RtcDQyXzsKKysJCQkJCV90bXA0M18gPSBsYW5nczsKKysJCQkJCV90bXA0NF8gPSBnX2xpc3Rf bGVuZ3RoIChfdG1wNDNfKTsKKysJCQkJCWlmIChfdG1wNDRfICE9ICgoZ3VpbnQpIDApKSB7Cisr CQkJCQkJR0xpc3QqIF90bXA0NV87CisrCQkJCQkJZ2NvbnN0cG9pbnRlciBfdG1wNDZfOworKwkJ CQkJCWdjaGFyKiBfdG1wNDdfOworKwkJCQkJCV90bXA0NV8gPSBsYW5nczsKKysJCQkJCQlfdG1w NDZfID0gX3RtcDQ1Xy0+ZGF0YTsKKysJCQkJCQlfdG1wNDdfID0gZ19zdHJkdXAgKChjb25zdCBn Y2hhciopIF90bXA0Nl8pOworKwkJCQkJCV9nX2ZyZWUwIChsYW5nKTsKKysJCQkJCQlsYW5nID0g X3RtcDQ3XzsKKysJCQkJCX0KKysJCQkJCV9fZ19saXN0X2ZyZWVfX2dfZnJlZTBfMCAobGFuZ3Mp OworKwkJCQkJX2dfZnJlZTAgKGxheW91dCk7CisrCQkJCX0gZWxzZSB7CisrCQkJCQljb25zdCBn Y2hhciogX3RtcDQ4XzsKKysJCQkJCWdjaGFyKiBfdG1wNDlfID0gTlVMTDsKKysJCQkJCV90bXA0 OF8gPSBuYW1lOworKwkJCQkJX3RtcDQ5XyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVzOiIsIF90bXA0 OF8pOworKwkJCQkJX2dfZnJlZTAgKG5hbWUpOworKwkJCQkJbmFtZSA9IF90bXA0OV87CisrCQkJ CX0KKysJCQkJX3RtcDUwXyA9IGxhbmc7CisrCQkJCWlmIChfdG1wNTBfID09IE5VTEwpIHsKKysJ CQkJCUlCdXNYS0JDb25maWdSZWdpc3RyeSogX3RtcDUxXzsKKysJCQkJCWdjaGFyKiogX3RtcDUy XzsKKysJCQkJCWdpbnQgX3RtcDUyX19sZW5ndGgxOworKwkJCQkJZ2ludCBfdG1wNTNfOworKwkJ CQkJY29uc3QgZ2NoYXIqIF90bXA1NF87CisrCQkJCQlHTGlzdCogX3RtcDU1XyA9IE5VTEw7Cisr CQkJCQlHTGlzdCogbGFuZ3M7CisrCQkJCQlHTGlzdCogX3RtcDU2XzsKKysJCQkJCWd1aW50IF90 bXA1N18gPSAwVTsKKysJCQkJCV90bXA1MV8gPSByZWdpc3RyeTsKKysJCQkJCV90bXA1Ml8gPSBz ZWxmLT5wcml2LT5tX2xheW91dHM7CisrCQkJCQlfdG1wNTJfX2xlbmd0aDEgPSBzZWxmLT5wcml2 LT5tX2xheW91dHNfbGVuZ3RoMTsKKysJCQkJCV90bXA1M18gPSBpOworKwkJCQkJX3RtcDU0XyA9 IF90bXA1Ml9bX3RtcDUzX107CisrCQkJCQlfdG1wNTVfID0gaWJ1c194a2JfY29uZmlnX3JlZ2lz dHJ5X2xheW91dF9sYW5nX2dldF9sYW5ncyAoX3RtcDUxXywgX3RtcDU0Xyk7CisrCQkJCQlsYW5n cyA9IF90bXA1NV87CisrCQkJCQlfdG1wNTZfID0gbGFuZ3M7CisrCQkJCQlfdG1wNTdfID0gZ19s aXN0X2xlbmd0aCAoX3RtcDU2Xyk7CisrCQkJCQlpZiAoX3RtcDU3XyAhPSAoKGd1aW50KSAwKSkg eworKwkJCQkJCUdMaXN0KiBfdG1wNThfOworKwkJCQkJCWdjb25zdHBvaW50ZXIgX3RtcDU5XzsK KysJCQkJCQlnY2hhciogX3RtcDYwXzsKKysJCQkJCQlfdG1wNThfID0gbGFuZ3M7CisrCQkJCQkJ X3RtcDU5XyA9IF90bXA1OF8tPmRhdGE7CisrCQkJCQkJX3RtcDYwXyA9IGdfc3RyZHVwICgoY29u c3QgZ2NoYXIqKSBfdG1wNTlfKTsKKysJCQkJCQlfZ19mcmVlMCAobGFuZyk7CisrCQkJCQkJbGFu ZyA9IF90bXA2MF87CisrCQkJCQl9CisrCQkJCQlfX2dfbGlzdF9mcmVlX19nX2ZyZWUwXzAgKGxh bmdzKTsKKysJCQkJfQorKwkJCQlfdG1wNjFfID0gdmFyX3hrYl9lbmdpbmVfbmFtZXM7CisrCQkJ CV90bXA2MV9fbGVuZ3RoMSA9IHZhcl94a2JfZW5naW5lX25hbWVzX2xlbmd0aDE7CisrCQkJCV90 bXA2Ml8gPSBuYW1lOworKwkJCQlfdG1wNjNfID0gbGFuZzsKKysJCQkJX3RtcDY0XyA9IGdfc3Ry ZHVwX3ByaW50ZiAoIiVzOiVzOiVzIiwgInhrYiIsIF90bXA2Ml8sIF90bXA2M18pOworKwkJCQlf dmFsYV9hcnJheV9hZGQxMyAoJnZhcl94a2JfZW5naW5lX25hbWVzLCAmdmFyX3hrYl9lbmdpbmVf bmFtZXNfbGVuZ3RoMSwgJl92YXJfeGtiX2VuZ2luZV9uYW1lc19zaXplXywgX3RtcDY0Xyk7Cisr CQkJCV9nX2ZyZWUwIChsYW5nKTsKKysJCQkJX2dfZnJlZTAgKG5hbWUpOworKwkJCX0KKysJCX0K KysJfQorKwlfdG1wNjVfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisrCV90bXA2Nl8gPSBpYnVz X2NvbmZpZ19nZXRfdmFsdWUgKF90bXA2NV8sICJnZW5lcmFsIiwgInByZWxvYWRfZW5naW5lcyIp OworKwl2YXJfZW5naW5lcyA9IF90bXA2Nl87CisrCV90bXA2N18gPSBnX25ldzAgKGdjaGFyKiwg MCArIDEpOworKwllbmdpbmVfbmFtZXMgPSBfdG1wNjdfOworKwllbmdpbmVfbmFtZXNfbGVuZ3Ro MSA9IDA7CisrCV9lbmdpbmVfbmFtZXNfc2l6ZV8gPSBlbmdpbmVfbmFtZXNfbGVuZ3RoMTsKKysJ dXBkYXRlZF9lbmdpbmVfbmFtZXMgPSBGQUxTRTsKKysJX3RtcDY4XyA9IHZhcl9lbmdpbmVzOwor KwlpZiAoX3RtcDY4XyAhPSBOVUxMKSB7CisrCQlHVmFyaWFudCogX3RtcDY5XzsKKysJCXNpemVf dCBfdG1wNzBfOworKwkJZ2NoYXIqKiBfdG1wNzFfID0gTlVMTDsKKysJCV90bXA2OV8gPSB2YXJf ZW5naW5lczsKKysJCV90bXA3MV8gPSBnX3ZhcmlhbnRfZHVwX3N0cnYgKF90bXA2OV8sICZfdG1w NzBfKTsKKysJCWVuZ2luZV9uYW1lcyA9IChfdmFsYV9hcnJheV9mcmVlIChlbmdpbmVfbmFtZXMs IGVuZ2luZV9uYW1lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwor KwkJZW5naW5lX25hbWVzID0gX3RtcDcxXzsKKysJCWVuZ2luZV9uYW1lc19sZW5ndGgxID0gX3Rt cDcwXzsKKysJCV9lbmdpbmVfbmFtZXNfc2l6ZV8gPSBlbmdpbmVfbmFtZXNfbGVuZ3RoMTsKKysJ fQorKwlfdG1wNzJfID0gdmFyX3hrYl9lbmdpbmVfbmFtZXM7CisrCV90bXA3Ml9fbGVuZ3RoMSA9 IHZhcl94a2JfZW5naW5lX25hbWVzX2xlbmd0aDE7CisrCXsKKysJCWdjaGFyKiogbmFtZV9jb2xs ZWN0aW9uID0gTlVMTDsKKysJCWdpbnQgbmFtZV9jb2xsZWN0aW9uX2xlbmd0aDEgPSAwOworKwkJ Z2ludCBfbmFtZV9jb2xsZWN0aW9uX3NpemVfID0gMDsKKysJCWdpbnQgbmFtZV9pdCA9IDA7Cisr CQluYW1lX2NvbGxlY3Rpb24gPSBfdG1wNzJfOworKwkJbmFtZV9jb2xsZWN0aW9uX2xlbmd0aDEg PSBfdG1wNzJfX2xlbmd0aDE7CisrCQlmb3IgKG5hbWVfaXQgPSAwOyBuYW1lX2l0IDwgX3RtcDcy X19sZW5ndGgxOyBuYW1lX2l0ID0gbmFtZV9pdCArIDEpIHsKKysJCQlnY2hhciogX3RtcDczXzsK KysJCQlnY2hhciogbmFtZSA9IE5VTEw7CisrCQkJX3RtcDczXyA9IGdfc3RyZHVwIChuYW1lX2Nv bGxlY3Rpb25bbmFtZV9pdF0pOworKwkJCW5hbWUgPSBfdG1wNzNfOworKwkJCXsKKysJCQkJY29u c3QgZ2NoYXIqIF90bXA3NF87CisrCQkJCWdjaGFyKiogX3RtcDc1XzsKKysJCQkJZ2ludCBfdG1w NzVfX2xlbmd0aDE7CisrCQkJCWdjaGFyKiogX3RtcDc2XzsKKysJCQkJZ2ludCBfdG1wNzZfX2xl bmd0aDE7CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wNzdfOworKwkJCQlnY2hhciogX3RtcDc4XzsK KysJCQkJX3RtcDc0XyA9IG5hbWU7CisrCQkJCV90bXA3NV8gPSBlbmdpbmVfbmFtZXM7CisrCQkJ CV90bXA3NV9fbGVuZ3RoMSA9IGVuZ2luZV9uYW1lc19sZW5ndGgxOworKwkJCQlpZiAoX3ZhbGFf c3RyaW5nX2FycmF5X2NvbnRhaW5zIChfdG1wNzVfLCBfdG1wNzVfX2xlbmd0aDEsIF90bXA3NF8p KSB7CisrCQkJCQlfZ19mcmVlMCAobmFtZSk7CisrCQkJCQljb250aW51ZTsKKysJCQkJfQorKwkJ CQl1cGRhdGVkX2VuZ2luZV9uYW1lcyA9IFRSVUU7CisrCQkJCV90bXA3Nl8gPSBlbmdpbmVfbmFt ZXM7CisrCQkJCV90bXA3Nl9fbGVuZ3RoMSA9IGVuZ2luZV9uYW1lc19sZW5ndGgxOworKwkJCQlf dG1wNzdfID0gbmFtZTsKKysJCQkJX3RtcDc4XyA9IGdfc3RyZHVwIChfdG1wNzdfKTsKKysJCQkJ X3ZhbGFfYXJyYXlfYWRkMTQgKCZlbmdpbmVfbmFtZXMsICZlbmdpbmVfbmFtZXNfbGVuZ3RoMSwg Jl9lbmdpbmVfbmFtZXNfc2l6ZV8sIF90bXA3OF8pOworKwkJCQlfZ19mcmVlMCAobmFtZSk7Cisr CQkJfQorKwkJfQorKwl9CisrCV90bXA3OV8gPSB1cGRhdGVkX2VuZ2luZV9uYW1lczsKKysJaWYg KF90bXA3OV8pIHsKKysJCUlCdXNDb25maWcqIF90bXA4MF87CisrCQlnY2hhcioqIF90bXA4MV87 CisrCQlnaW50IF90bXA4MV9fbGVuZ3RoMTsKKysJCUdWYXJpYW50KiBfdG1wODJfOworKwkJR1Zh cmlhbnQqIF90bXA4M187CisrCQlfdG1wODBfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisrCQlf dG1wODFfID0gZW5naW5lX25hbWVzOworKwkJX3RtcDgxX19sZW5ndGgxID0gZW5naW5lX25hbWVz X2xlbmd0aDE7CisrCQlfdG1wODJfID0gZ192YXJpYW50X25ld19zdHJ2IChfdG1wODFfLCBfdG1w ODFfX2xlbmd0aDEpOworKwkJX3RtcDgzXyA9IGdfdmFyaWFudF9yZWZfc2luayAoX3RtcDgyXyk7 CisrCQlpYnVzX2NvbmZpZ19zZXRfdmFsdWUgKF90bXA4MF8sICJnZW5lcmFsIiwgInByZWxvYWRf ZW5naW5lcyIsIF90bXA4M18pOworKwkJX2dfdmFyaWFudF91bnJlZjAgKF90bXA4M18pOworKwl9 CisrCV90bXA4NF8gPSBzZWxmLT5wcml2LT5tX2NvbmZpZzsKKysJX3RtcDg1XyA9IGlidXNfY29u ZmlnX2dldF92YWx1ZSAoX3RtcDg0XywgImdlbmVyYWwiLCAiZW5naW5lc19vcmRlciIpOworKwl2 YXJfb3JkZXIgPSBfdG1wODVfOworKwlfdG1wODZfID0gZ19uZXcwIChnY2hhciosIDAgKyAxKTsK KysJb3JkZXJfbmFtZXMgPSBfdG1wODZfOworKwlvcmRlcl9uYW1lc19sZW5ndGgxID0gMDsKKysJ X29yZGVyX25hbWVzX3NpemVfID0gb3JkZXJfbmFtZXNfbGVuZ3RoMTsKKysJdXBkYXRlZF9vcmRl cl9uYW1lcyA9IEZBTFNFOworKwlfdG1wODdfID0gdmFyX29yZGVyOworKwlpZiAoX3RtcDg3XyAh PSBOVUxMKSB7CisrCQlHVmFyaWFudCogX3RtcDg4XzsKKysJCXNpemVfdCBfdG1wODlfOworKwkJ Z2NoYXIqKiBfdG1wOTBfID0gTlVMTDsKKysJCV90bXA4OF8gPSB2YXJfb3JkZXI7CisrCQlfdG1w OTBfID0gZ192YXJpYW50X2R1cF9zdHJ2IChfdG1wODhfLCAmX3RtcDg5Xyk7CisrCQlvcmRlcl9u YW1lcyA9IChfdmFsYV9hcnJheV9mcmVlIChvcmRlcl9uYW1lcywgb3JkZXJfbmFtZXNfbGVuZ3Ro MSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKKysJCW9yZGVyX25hbWVzID0gX3Rt cDkwXzsKKysJCW9yZGVyX25hbWVzX2xlbmd0aDEgPSBfdG1wODlfOworKwkJX29yZGVyX25hbWVz X3NpemVfID0gb3JkZXJfbmFtZXNfbGVuZ3RoMTsKKysJfQorKwlfdG1wOTFfID0gdmFyX3hrYl9l bmdpbmVfbmFtZXM7CisrCV90bXA5MV9fbGVuZ3RoMSA9IHZhcl94a2JfZW5naW5lX25hbWVzX2xl bmd0aDE7CisrCXsKKysJCWdjaGFyKiogbmFtZV9jb2xsZWN0aW9uID0gTlVMTDsKKysJCWdpbnQg bmFtZV9jb2xsZWN0aW9uX2xlbmd0aDEgPSAwOworKwkJZ2ludCBfbmFtZV9jb2xsZWN0aW9uX3Np emVfID0gMDsKKysJCWdpbnQgbmFtZV9pdCA9IDA7CisrCQluYW1lX2NvbGxlY3Rpb24gPSBfdG1w OTFfOworKwkJbmFtZV9jb2xsZWN0aW9uX2xlbmd0aDEgPSBfdG1wOTFfX2xlbmd0aDE7CisrCQlm b3IgKG5hbWVfaXQgPSAwOyBuYW1lX2l0IDwgX3RtcDkxX19sZW5ndGgxOyBuYW1lX2l0ID0gbmFt ZV9pdCArIDEpIHsKKysJCQlnY2hhciogX3RtcDkyXzsKKysJCQlnY2hhciogbmFtZSA9IE5VTEw7 CisrCQkJX3RtcDkyXyA9IGdfc3RyZHVwIChuYW1lX2NvbGxlY3Rpb25bbmFtZV9pdF0pOworKwkJ CW5hbWUgPSBfdG1wOTJfOworKwkJCXsKKysJCQkJY29uc3QgZ2NoYXIqIF90bXA5M187CisrCQkJ CWdjaGFyKiogX3RtcDk0XzsKKysJCQkJZ2ludCBfdG1wOTRfX2xlbmd0aDE7CisrCQkJCWdjaGFy KiogX3RtcDk1XzsKKysJCQkJZ2ludCBfdG1wOTVfX2xlbmd0aDE7CisrCQkJCWNvbnN0IGdjaGFy KiBfdG1wOTZfOworKwkJCQlnY2hhciogX3RtcDk3XzsKKysJCQkJX3RtcDkzXyA9IG5hbWU7Cisr CQkJCV90bXA5NF8gPSBvcmRlcl9uYW1lczsKKysJCQkJX3RtcDk0X19sZW5ndGgxID0gb3JkZXJf bmFtZXNfbGVuZ3RoMTsKKysJCQkJaWYgKF92YWxhX3N0cmluZ19hcnJheV9jb250YWlucyAoX3Rt cDk0XywgX3RtcDk0X19sZW5ndGgxLCBfdG1wOTNfKSkgeworKwkJCQkJX2dfZnJlZTAgKG5hbWUp OworKwkJCQkJY29udGludWU7CisrCQkJCX0KKysJCQkJX3RtcDk1XyA9IG9yZGVyX25hbWVzOwor KwkJCQlfdG1wOTVfX2xlbmd0aDEgPSBvcmRlcl9uYW1lc19sZW5ndGgxOworKwkJCQlfdG1wOTZf ID0gbmFtZTsKKysJCQkJX3RtcDk3XyA9IGdfc3RyZHVwIChfdG1wOTZfKTsKKysJCQkJX3ZhbGFf YXJyYXlfYWRkMTUgKCZvcmRlcl9uYW1lcywgJm9yZGVyX25hbWVzX2xlbmd0aDEsICZfb3JkZXJf bmFtZXNfc2l6ZV8sIF90bXA5N18pOworKwkJCQl1cGRhdGVkX29yZGVyX25hbWVzID0gVFJVRTsK KysJCQkJX2dfZnJlZTAgKG5hbWUpOworKwkJCX0KKysJCX0KKysJfQorKwlfdG1wOThfID0gdXBk YXRlZF9vcmRlcl9uYW1lczsKKysJaWYgKF90bXA5OF8pIHsKKysJCUlCdXNDb25maWcqIF90bXA5 OV87CisrCQlnY2hhcioqIF90bXAxMDBfOworKwkJZ2ludCBfdG1wMTAwX19sZW5ndGgxOworKwkJ R1ZhcmlhbnQqIF90bXAxMDFfOworKwkJR1ZhcmlhbnQqIF90bXAxMDJfOworKwkJX3RtcDk5XyA9 IHNlbGYtPnByaXYtPm1fY29uZmlnOworKwkJX3RtcDEwMF8gPSBvcmRlcl9uYW1lczsKKysJCV90 bXAxMDBfX2xlbmd0aDEgPSBvcmRlcl9uYW1lc19sZW5ndGgxOworKwkJX3RtcDEwMV8gPSBnX3Zh cmlhbnRfbmV3X3N0cnYgKF90bXAxMDBfLCBfdG1wMTAwX19sZW5ndGgxKTsKKysJCV90bXAxMDJf ID0gZ192YXJpYW50X3JlZl9zaW5rIChfdG1wMTAxXyk7CisrCQlpYnVzX2NvbmZpZ19zZXRfdmFs dWUgKF90bXA5OV8sICJnZW5lcmFsIiwgImVuZ2luZXNfb3JkZXIiLCBfdG1wMTAyXyk7CisrCQlf Z192YXJpYW50X3VucmVmMCAoX3RtcDEwMl8pOworKwl9CisrCW9yZGVyX25hbWVzID0gKF92YWxh X2FycmF5X2ZyZWUgKG9yZGVyX25hbWVzLCBvcmRlcl9uYW1lc19sZW5ndGgxLCAoR0Rlc3Ryb3lO b3RpZnkpIGdfZnJlZSksIE5VTEwpOworKwlfZ192YXJpYW50X3VucmVmMCAodmFyX29yZGVyKTsK KysJZW5naW5lX25hbWVzID0gKF92YWxhX2FycmF5X2ZyZWUgKGVuZ2luZV9uYW1lcywgZW5naW5l X25hbWVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCV9nX3Zh cmlhbnRfdW5yZWYwICh2YXJfZW5naW5lcyk7CisrCXZhcl94a2JfZW5naW5lX25hbWVzID0gKF92 YWxhX2FycmF5X2ZyZWUgKHZhcl94a2JfZW5naW5lX25hbWVzLCB2YXJfeGtiX2VuZ2luZV9uYW1l c19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOworKwlfZ19vYmplY3Rf dW5yZWYwIChyZWdpc3RyeSk7CisrCV9nX2ZyZWUwICh2YXJfdmFyaWFudCk7CisrCV9nX2ZyZWUw ICh2YXJfbGF5b3V0KTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgcGFuZWxfc2V0X3hrYl9ncm91 cF9sYXlvdXQgKFBhbmVsKiBzZWxmLCBjb25zdCBnY2hhciogbGF5b3V0KSB7CisrCVhLQkxheW91 dCogX3RtcDBfOworKwljb25zdCBnY2hhciogX3RtcDFfOworKwlnaW50IF90bXAyXyA9IDA7Cisr CWdpbnQqIF90bXAzXyA9IE5VTEw7CisrCWdpbnQqIHJldHZhbDsKKysJZ2ludCByZXR2YWxfbGVu Z3RoMTsKKysJZ2ludCBfcmV0dmFsX3NpemVfOworKwlnaW50KiBfdG1wNF87CisrCWdpbnQgX3Rt cDRfX2xlbmd0aDE7CisrCWdpbnQgX3RtcDVfOworKwlnX3JldHVybl9pZl9mYWlsIChzZWxmICE9 IE5VTEwpOworKwlnX3JldHVybl9pZl9mYWlsIChsYXlvdXQgIT0gTlVMTCk7CisrCV90bXAwXyA9 IHNlbGYtPnByaXYtPm1feGtibGF5b3V0OworKwlfdG1wMV8gPSBsYXlvdXQ7CisrCV90bXAzXyA9 IHhrYl9sYXlvdXRfc2V0X2xheW91dCAoX3RtcDBfLCBfdG1wMV8sICJkZWZhdWx0IiwgImRlZmF1 bHQiLCAmX3RtcDJfKTsKKysJcmV0dmFsID0gX3RtcDNfOworKwlyZXR2YWxfbGVuZ3RoMSA9IF90 bXAyXzsKKysJX3JldHZhbF9zaXplXyA9IHJldHZhbF9sZW5ndGgxOworKwlfdG1wNF8gPSByZXR2 YWw7CisrCV90bXA0X19sZW5ndGgxID0gcmV0dmFsX2xlbmd0aDE7CisrCV90bXA1XyA9IF90bXA0 X1swXTsKKysJaWYgKF90bXA1XyA+PSAwKSB7CisrCQlnaW50KiBfdG1wNl87CisrCQlnaW50IF90 bXA2X19sZW5ndGgxOworKwkJZ2ludCBfdG1wN187CisrCQlnYm9vbGVhbiBfdG1wOF8gPSBGQUxT RTsKKysJCWdpbnQqIF90bXA5XzsKKysJCWdpbnQgX3RtcDlfX2xlbmd0aDE7CisrCQlnaW50IF90 bXAxMF87CisrCQlnYm9vbGVhbiBfdG1wMTFfOworKwkJX3RtcDZfID0gcmV0dmFsOworKwkJX3Rt cDZfX2xlbmd0aDEgPSByZXR2YWxfbGVuZ3RoMTsKKysJCV90bXA3XyA9IF90bXA2X1swXTsKKysJ CXNlbGYtPnByaXYtPm1fZmFsbGJhY2tfbG9ja19pZCA9IF90bXA3XzsKKysJCV90bXA5XyA9IHJl dHZhbDsKKysJCV90bXA5X19sZW5ndGgxID0gcmV0dmFsX2xlbmd0aDE7CisrCQlfdG1wMTBfID0g X3RtcDlfWzFdOworKwkJaWYgKF90bXAxMF8gIT0gMCkgeworKwkJCV90bXA4XyA9IFRSVUU7Cisr CQl9IGVsc2UgeworKwkJCV90bXA4XyA9IEZBTFNFOworKwkJfQorKwkJX3RtcDExXyA9IF90bXA4 XzsKKysJCXNlbGYtPnByaXYtPm1fY2hhbmdlZF94a2Jfb3B0aW9uID0gX3RtcDExXzsKKysJfQor KwlyZXR2YWwgPSAoZ19mcmVlIChyZXR2YWwpLCBOVUxMKTsKKyt9CisrCisrCisrc3RhdGljIGdi b29sZWFuIHBhbmVsX3NldF9na2JkX2xheW91dCAoUGFuZWwqIHNlbGYsIGNvbnN0IGdjaGFyKiBs YXlvdXQpIHsKKysJZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7CisrCWdib29sZWFuIF90bXAwXzsK KysJR2tiZExheW91dCogX3RtcDFfOworKwlnaW50IF90bXAyXyA9IDA7CisrCWdjaGFyKiogX3Rt cDNfID0gTlVMTDsKKysJZ2NoYXIqKiBfdG1wNF87CisrCWdpbnQgX3RtcDRfX2xlbmd0aDE7Cisr CWdpbnQgX3RtcDVfOworKwlnaW50IGdrYmRfbGVuOworKwlnX3JldHVybl92YWxfaWZfZmFpbCAo c2VsZiAhPSBOVUxMLCBGQUxTRSk7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChsYXlvdXQgIT0g TlVMTCwgRkFMU0UpOworKwlfdG1wMF8gPSBzZWxmLT5wcml2LT5tX2NoYW5nZWRfeGtiX29wdGlv bjsKKysJaWYgKF90bXAwXyA9PSBUUlVFKSB7CisrCQlzZWxmLT5wcml2LT5tX2NoYW5nZWRfeGti X29wdGlvbiA9IEZBTFNFOworKwkJcmVzdWx0ID0gRkFMU0U7CisrCQlyZXR1cm4gcmVzdWx0Owor Kwl9CisrCV90bXAxXyA9IHNlbGYtPnByaXYtPm1fZ2tiZGxheW91dDsKKysJX3RtcDNfID0gZ2ti ZF9sYXlvdXRfZ2V0X2dyb3VwX25hbWVzIChfdG1wMV8sICZfdG1wMl8pOworKwlfdG1wNF8gPSBf dG1wM187CisrCV90bXA0X19sZW5ndGgxID0gX3RtcDJfOworKwlfdG1wNV8gPSBfdG1wMl87Cisr CV90bXA0XyA9IChfdmFsYV9hcnJheV9mcmVlIChfdG1wNF8sIF90bXA0X19sZW5ndGgxLCAoR0Rl c3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOworKwlna2JkX2xlbiA9IF90bXA1XzsKKysJewor KwkJZ2ludCBpOworKwkJaSA9IDA7CisrCQl7CisrCQkJZ2Jvb2xlYW4gX3RtcDZfOworKwkJCV90 bXA2XyA9IFRSVUU7CisrCQkJd2hpbGUgKFRSVUUpIHsKKysJCQkJZ2Jvb2xlYW4gX3RtcDdfOwor KwkJCQlnYm9vbGVhbiBfdG1wOV8gPSBGQUxTRTsKKysJCQkJZ2ludCBfdG1wMTBfOworKwkJCQln Y2hhcioqIF90bXAxMV87CisrCQkJCWdpbnQgX3RtcDExX19sZW5ndGgxOworKwkJCQlnYm9vbGVh biBfdG1wMTRfOworKwkJCQlnY2hhcioqIF90bXAxNV87CisrCQkJCWdpbnQgX3RtcDE1X19sZW5n dGgxOworKwkJCQlnaW50IF90bXAxNl87CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wMTdfOworKwkJ CQlnY2hhciogX3RtcDE4XzsKKysJCQkJZ2NoYXIqIHN5c19sYXlvdXQ7CisrCQkJCWdib29sZWFu IF90bXAxOV8gPSBGQUxTRTsKKysJCQkJZ2ludCBfdG1wMjBfOworKwkJCQlnY2hhcioqIF90bXAy MV87CisrCQkJCWdpbnQgX3RtcDIxX19sZW5ndGgxOworKwkJCQlnYm9vbGVhbiBfdG1wMjVfOwor KwkJCQljb25zdCBnY2hhciogX3RtcDMxXzsKKysJCQkJY29uc3QgZ2NoYXIqIF90bXAzMl87Cisr CQkJCV90bXA3XyA9IF90bXA2XzsKKysJCQkJaWYgKCFfdG1wN18pIHsKKysJCQkJCWdpbnQgX3Rt cDhfOworKwkJCQkJX3RtcDhfID0gaTsKKysJCQkJCWkgPSBfdG1wOF8gKyAxOworKwkJCQl9Cisr CQkJCV90bXA2XyA9IEZBTFNFOworKwkJCQlfdG1wMTBfID0gaTsKKysJCQkJX3RtcDExXyA9IHNl bGYtPnByaXYtPm1fbGF5b3V0czsKKysJCQkJX3RtcDExX19sZW5ndGgxID0gc2VsZi0+cHJpdi0+ bV9sYXlvdXRzX2xlbmd0aDE7CisrCQkJCWlmIChfdG1wMTBfIDwgX3RtcDExX19sZW5ndGgxKSB7 CisrCQkJCQlnaW50IF90bXAxMl87CisrCQkJCQlnaW50IF90bXAxM187CisrCQkJCQlfdG1wMTJf ID0gaTsKKysJCQkJCV90bXAxM18gPSBna2JkX2xlbjsKKysJCQkJCV90bXA5XyA9IF90bXAxMl8g PCBfdG1wMTNfOworKwkJCQl9IGVsc2UgeworKwkJCQkJX3RtcDlfID0gRkFMU0U7CisrCQkJCX0K KysJCQkJX3RtcDE0XyA9IF90bXA5XzsKKysJCQkJaWYgKCFfdG1wMTRfKSB7CisrCQkJCQlicmVh azsKKysJCQkJfQorKwkJCQlfdG1wMTVfID0gc2VsZi0+cHJpdi0+bV9sYXlvdXRzOworKwkJCQlf dG1wMTVfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX2xheW91dHNfbGVuZ3RoMTsKKysJCQkJX3Rt cDE2XyA9IGk7CisrCQkJCV90bXAxN18gPSBfdG1wMTVfW190bXAxNl9dOworKwkJCQlfdG1wMThf ID0gZ19zdHJkdXAgKF90bXAxN18pOworKwkJCQlzeXNfbGF5b3V0ID0gX3RtcDE4XzsKKysJCQkJ X3RtcDIwXyA9IGk7CisrCQkJCV90bXAyMV8gPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzOworKwkJ CQlfdG1wMjFfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDE7CisrCQkJ CWlmIChfdG1wMjBfIDwgX3RtcDIxX19sZW5ndGgxKSB7CisrCQkJCQlnY2hhcioqIF90bXAyMl87 CisrCQkJCQlnaW50IF90bXAyMl9fbGVuZ3RoMTsKKysJCQkJCWdpbnQgX3RtcDIzXzsKKysJCQkJ CWNvbnN0IGdjaGFyKiBfdG1wMjRfOworKwkJCQkJX3RtcDIyXyA9IHNlbGYtPnByaXYtPm1fdmFy aWFudHM7CisrCQkJCQlfdG1wMjJfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xl bmd0aDE7CisrCQkJCQlfdG1wMjNfID0gaTsKKysJCQkJCV90bXAyNF8gPSBfdG1wMjJfW190bXAy M19dOworKwkJCQkJX3RtcDE5XyA9IGdfc3RyY21wMCAoX3RtcDI0XywgIiIpICE9IDA7CisrCQkJ CX0gZWxzZSB7CisrCQkJCQlfdG1wMTlfID0gRkFMU0U7CisrCQkJCX0KKysJCQkJX3RtcDI1XyA9 IF90bXAxOV87CisrCQkJCWlmIChfdG1wMjVfKSB7CisrCQkJCQljb25zdCBnY2hhciogX3RtcDI2 XzsKKysJCQkJCWdjaGFyKiogX3RtcDI3XzsKKysJCQkJCWdpbnQgX3RtcDI3X19sZW5ndGgxOwor KwkJCQkJZ2ludCBfdG1wMjhfOworKwkJCQkJY29uc3QgZ2NoYXIqIF90bXAyOV87CisrCQkJCQln Y2hhciogX3RtcDMwXyA9IE5VTEw7CisrCQkJCQlfdG1wMjZfID0gc3lzX2xheW91dDsKKysJCQkJ CV90bXAyN18gPSBzZWxmLT5wcml2LT5tX3ZhcmlhbnRzOworKwkJCQkJX3RtcDI3X19sZW5ndGgx ID0gc2VsZi0+cHJpdi0+bV92YXJpYW50c19sZW5ndGgxOworKwkJCQkJX3RtcDI4XyA9IGk7Cisr CQkJCQlfdG1wMjlfID0gX3RtcDI3X1tfdG1wMjhfXTsKKysJCQkJCV90bXAzMF8gPSBnX3N0cmR1 cF9wcmludGYgKCIlcyglcykiLCBfdG1wMjZfLCBfdG1wMjlfKTsKKysJCQkJCV9nX2ZyZWUwIChz eXNfbGF5b3V0KTsKKysJCQkJCXN5c19sYXlvdXQgPSBfdG1wMzBfOworKwkJCQl9CisrCQkJCV90 bXAzMV8gPSBzeXNfbGF5b3V0OworKwkJCQlfdG1wMzJfID0gbGF5b3V0OworKwkJCQlpZiAoZ19z dHJjbXAwIChfdG1wMzFfLCBfdG1wMzJfKSA9PSAwKSB7CisrCQkJCQlHa2JkTGF5b3V0KiBfdG1w MzNfOworKwkJCQkJZ2ludCBfdG1wMzRfOworKwkJCQkJX3RtcDMzXyA9IHNlbGYtPnByaXYtPm1f Z2tiZGxheW91dDsKKysJCQkJCV90bXAzNF8gPSBpOworKwkJCQkJZ2tiZF9sYXlvdXRfbG9ja19n cm91cCAoX3RtcDMzXywgX3RtcDM0Xyk7CisrCQkJCQlyZXN1bHQgPSBUUlVFOworKwkJCQkJX2df ZnJlZTAgKHN5c19sYXlvdXQpOworKwkJCQkJcmV0dXJuIHJlc3VsdDsKKysJCQkJfQorKwkJCQlf Z19mcmVlMCAoc3lzX2xheW91dCk7CisrCQkJfQorKwkJfQorKwl9CisrCXJlc3VsdCA9IEZBTFNF OworKwlyZXR1cm4gcmVzdWx0OworK30KKysKKysKKytzdGF0aWMgdm9pZCBwYW5lbF9zZXRfbGF5 b3V0IChQYW5lbCogc2VsZiwgY29uc3QgZ2NoYXIqIGxheW91dCkgeworKwlnYm9vbGVhbiBfdG1w MF8gPSBGQUxTRTsKKysJY29uc3QgZ2NoYXIqIF90bXAxXzsKKysJZ2Jvb2xlYW4gX3RtcDNfOwor KwlYS0JMYXlvdXQqIF90bXA0XzsKKysJWEtCTGF5b3V0KiBfdG1wOF87CisrCWNvbnN0IGdjaGFy KiBfdG1wOV87CisrCWdpbnQgX3RtcDEwXyA9IDA7CisrCWdpbnQqIF90bXAxMV8gPSBOVUxMOwor KwlnaW50KiBfdG1wMTJfOworKwlnaW50IF90bXAxMl9fbGVuZ3RoMTsKKysJZ19yZXR1cm5faWZf ZmFpbCAoc2VsZiAhPSBOVUxMKTsKKysJZ19yZXR1cm5faWZfZmFpbCAobGF5b3V0ICE9IE5VTEwp OworKwlfdG1wMV8gPSBsYXlvdXQ7CisrCWlmIChnX3N0cmNtcDAgKF90bXAxXywgImRlZmF1bHQi KSA9PSAwKSB7CisrCQlfdG1wMF8gPSBUUlVFOworKwl9IGVsc2UgeworKwkJY29uc3QgZ2NoYXIq IF90bXAyXzsKKysJCV90bXAyXyA9IGxheW91dDsKKysJCV90bXAwXyA9IF90bXAyXyA9PSBOVUxM OworKwl9CisrCV90bXAzXyA9IF90bXAwXzsKKysJaWYgKF90bXAzXykgeworKwkJcmV0dXJuOwor Kwl9CisrCV90bXA0XyA9IHNlbGYtPnByaXYtPm1feGtibGF5b3V0OworKwlpZiAoX3RtcDRfID09 IE5VTEwpIHsKKysJCXBhbmVsX2luaXRfZW5naW5lc19vcmRlciAoc2VsZik7CisrCX0KKysJaWYg KEhBVkVfSUJVU19HS0JEKSB7CisrCQljb25zdCBnY2hhciogX3RtcDVfOworKwkJZ2Jvb2xlYW4g X3RtcDZfID0gRkFMU0U7CisrCQljb25zdCBnY2hhciogX3RtcDdfOworKwkJX3RtcDVfID0gbGF5 b3V0OworKwkJX3RtcDZfID0gcGFuZWxfc2V0X2drYmRfbGF5b3V0IChzZWxmLCBfdG1wNV8pOwor KwkJaWYgKF90bXA2XykgeworKwkJCXJldHVybjsKKysJCX0KKysJCV90bXA3XyA9IGxheW91dDsK KysJCXBhbmVsX3NldF94a2JfZ3JvdXBfbGF5b3V0IChzZWxmLCBfdG1wN18pOworKwkJcmV0dXJu OworKwl9CisrCV90bXA4XyA9IHNlbGYtPnByaXYtPm1feGtibGF5b3V0OworKwlfdG1wOV8gPSBs YXlvdXQ7CisrCV90bXAxMV8gPSB4a2JfbGF5b3V0X3NldF9sYXlvdXQgKF90bXA4XywgX3RtcDlf LCAiZGVmYXVsdCIsICJkZWZhdWx0IiwgJl90bXAxMF8pOworKwlfdG1wMTJfID0gX3RtcDExXzsK KysJX3RtcDEyX19sZW5ndGgxID0gX3RtcDEwXzsKKysJX3RtcDEyXyA9IChnX2ZyZWUgKF90bXAx Ml8pLCBOVUxMKTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTYgKGdj aGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKKyAJ aWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7CisgCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgq c2l6ZSkpIDogNDsKKyAJCSphcnJheSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUp ICsgMSk7CitAQCAtNDg0LDE2ICsxNjM3LDEzIEBAIHN0YXRpYyB2b2lkIHBhbmVsX3N3aXRjaF9l bmdpbmUgKFBhbmVsKgorIAlnYm9vbGVhbiBfdG1wMzJfID0gRkFMU0U7CisgCUlCdXNFbmdpbmVE ZXNjKiBfdG1wMzVfOworIAljb25zdCBnY2hhciogX3RtcDM2XyA9IE5VTEw7CistCWdjaGFyKiBf dG1wMzdfID0gTlVMTDsKKy0JZ2NoYXIqIGNtZGxpbmU7CistCWdjaGFyKiogX3RtcDQzXyA9IE5V TEw7CisrCWdjaGFyKiogX3RtcDM3XyA9IE5VTEw7CisgCWdjaGFyKiogbmFtZXM7CisgCWdpbnQg bmFtZXNfbGVuZ3RoMTsKKyAJZ2ludCBfbmFtZXNfc2l6ZV87CistCUlCdXNFbmdpbmVEZXNjKiog X3RtcDQ0XzsKKy0JZ2ludCBfdG1wNDRfX2xlbmd0aDE7CistCUlCdXNDb25maWcqIF90bXA1MF87 CistCUdFcnJvciAqIF9pbm5lcl9lcnJvcl8gPSBOVUxMOworKwlJQnVzRW5naW5lRGVzYyoqIF90 bXAzOF87CisrCWdpbnQgX3RtcDM4X19sZW5ndGgxOworKwlJQnVzQ29uZmlnKiBfdG1wNDRfOwor IAlnX3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOworIAlfdG1wMV8gPSBpOworIAlpZiAo X3RtcDFfID49IDApIHsKK0BAIC01ODgsMTA3ICsxNzM4LDYzIEBAIHN0YXRpYyB2b2lkIHBhbmVs X3N3aXRjaF9lbmdpbmUgKFBhbmVsKgorIAkJY29uc3QgZ2NoYXIqIF90bXAzNF8gPSBOVUxMOwor IAkJX3RtcDMzXyA9IGVuZ2luZTsKKyAJCV90bXAzNF8gPSBpYnVzX2VuZ2luZV9kZXNjX2dldF9u YW1lIChfdG1wMzNfKTsKKy0JCWdfd2FybmluZyAoInBhbmVsLnZhbGE6MTIwOiBTd2l0Y2ggZW5n aW5lIHRvICVzIGZhaWxlZC4iLCBfdG1wMzRfKTsKKysJCWdfd2FybmluZyAoInBhbmVsLnZhbGE6 MzY3OiBTd2l0Y2ggZW5naW5lIHRvICVzIGZhaWxlZC4iLCBfdG1wMzRfKTsKKyAJCV9nX29iamVj dF91bnJlZjAgKGVuZ2luZSk7CisgCQlyZXR1cm47CisgCX0KKyAJX3RtcDM1XyA9IGVuZ2luZTsK KyAJX3RtcDM2XyA9IGlidXNfZW5naW5lX2Rlc2NfZ2V0X2xheW91dCAoX3RtcDM1Xyk7CistCV90 bXAzN18gPSBnX3N0cmR1cF9wcmludGYgKCJzZXR4a2JtYXAgJXMiLCBfdG1wMzZfKTsKKy0JY21k bGluZSA9IF90bXAzN187CistCXsKKy0JCWNvbnN0IGdjaGFyKiBfdG1wMzhfOworLQkJZ2Jvb2xl YW4gX3RtcDM5XyA9IEZBTFNFOworLQkJZ2Jvb2xlYW4gX3RtcDQwXzsKKy0JCV90bXAzOF8gPSBj bWRsaW5lOworLQkJX3RtcDM5XyA9IGdfc3Bhd25fY29tbWFuZF9saW5lX3N5bmMgKF90bXAzOF8s IE5VTEwsIE5VTEwsIE5VTEwsICZfaW5uZXJfZXJyb3JfKTsKKy0JCV90bXA0MF8gPSBfdG1wMzlf OworLQkJaWYgKF9pbm5lcl9lcnJvcl8gIT0gTlVMTCkgeworLQkJCWlmIChfaW5uZXJfZXJyb3Jf LT5kb21haW4gPT0gR19TUEFXTl9FUlJPUikgeworLQkJCQlnb3RvIF9fY2F0Y2gyX2dfc3Bhd25f ZXJyb3I7CistCQkJfQorLQkJCV9nX2ZyZWUwIChjbWRsaW5lKTsKKy0JCQlfZ19vYmplY3RfdW5y ZWYwIChlbmdpbmUpOworLQkJCWdfY3JpdGljYWwgKCJmaWxlICVzOiBsaW5lICVkOiB1bmV4cGVj dGVkIGVycm9yOiAlcyAoJXMsICVkKSIsIF9fRklMRV9fLCBfX0xJTkVfXywgX2lubmVyX2Vycm9y Xy0+bWVzc2FnZSwgZ19xdWFya190b19zdHJpbmcgKF9pbm5lcl9lcnJvcl8tPmRvbWFpbiksIF9p bm5lcl9lcnJvcl8tPmNvZGUpOworLQkJCWdfY2xlYXJfZXJyb3IgKCZfaW5uZXJfZXJyb3JfKTsK Ky0JCQlyZXR1cm47CistCQl9CistCQlpZiAoIV90bXA0MF8pIHsKKy0JCQlJQnVzRW5naW5lRGVz YyogX3RtcDQxXzsKKy0JCQljb25zdCBnY2hhciogX3RtcDQyXyA9IE5VTEw7CistCQkJX3RtcDQx XyA9IGVuZ2luZTsKKy0JCQlfdG1wNDJfID0gaWJ1c19lbmdpbmVfZGVzY19nZXRfbGF5b3V0IChf dG1wNDFfKTsKKy0JCQlnX3dhcm5pbmcgKCJwYW5lbC52YWxhOjEyNzogU3dpdGNoIHhrYiBsYXlv dXQgdG8gJXMgZmFpbGVkLiIsIF90bXA0Ml8pOworLQkJfQorLQl9CistCWdvdG8gX19maW5hbGx5 MjsKKy0JX19jYXRjaDJfZ19zcGF3bl9lcnJvcjoKKy0JeworLQkJR0Vycm9yKiBlID0gTlVMTDsK Ky0JCWUgPSBfaW5uZXJfZXJyb3JfOworLQkJX2lubmVyX2Vycm9yXyA9IE5VTEw7CistCQlnX3dh cm5pbmcgKCJwYW5lbC52YWxhOjEzMTogZXhlY3V0ZSBzZXR4a2JsYXlvdXQgZmFpbGVkIik7Cist CQlfZ19lcnJvcl9mcmVlMCAoZSk7CistCX0KKy0JX19maW5hbGx5MjoKKy0JaWYgKF9pbm5lcl9l cnJvcl8gIT0gTlVMTCkgeworLQkJX2dfZnJlZTAgKGNtZGxpbmUpOworLQkJX2dfb2JqZWN0X3Vu cmVmMCAoZW5naW5lKTsKKy0JCWdfY3JpdGljYWwgKCJmaWxlICVzOiBsaW5lICVkOiB1bmNhdWdo dCBlcnJvcjogJXMgKCVzLCAlZCkiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9pbm5lcl9lcnJvcl8t Pm1lc3NhZ2UsIGdfcXVhcmtfdG9fc3RyaW5nIChfaW5uZXJfZXJyb3JfLT5kb21haW4pLCBfaW5u ZXJfZXJyb3JfLT5jb2RlKTsKKy0JCWdfY2xlYXJfZXJyb3IgKCZfaW5uZXJfZXJyb3JfKTsKKy0J CXJldHVybjsKKy0JfQorLQlfdG1wNDNfID0gZ19uZXcwIChnY2hhciosIDAgKyAxKTsKKy0JbmFt ZXMgPSBfdG1wNDNfOworKwlwYW5lbF9zZXRfbGF5b3V0IChzZWxmLCBfdG1wMzZfKTsKKysJX3Rt cDM3XyA9IGdfbmV3MCAoZ2NoYXIqLCAwICsgMSk7CisrCW5hbWVzID0gX3RtcDM3XzsKKyAJbmFt ZXNfbGVuZ3RoMSA9IDA7CisgCV9uYW1lc19zaXplXyA9IG5hbWVzX2xlbmd0aDE7CistCV90bXA0 NF8gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXM7CistCV90bXA0NF9fbGVuZ3RoMSA9IHNlbGYtPnBy aXYtPm1fZW5naW5lc19sZW5ndGgxOworKwlfdG1wMzhfID0gc2VsZi0+cHJpdi0+bV9lbmdpbmVz OworKwlfdG1wMzhfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMTsKKyAJ eworIAkJSUJ1c0VuZ2luZURlc2MqKiBkZXNjX2NvbGxlY3Rpb24gPSBOVUxMOworIAkJZ2ludCBk ZXNjX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IDA7CisgCQlnaW50IF9kZXNjX2NvbGxlY3Rpb25fc2l6 ZV8gPSAwOworIAkJZ2ludCBkZXNjX2l0ID0gMDsKKy0JCWRlc2NfY29sbGVjdGlvbiA9IF90bXA0 NF87CistCQlkZXNjX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IF90bXA0NF9fbGVuZ3RoMTsKKy0JCWZv ciAoZGVzY19pdCA9IDA7IGRlc2NfaXQgPCBfdG1wNDRfX2xlbmd0aDE7IGRlc2NfaXQgPSBkZXNj X2l0ICsgMSkgeworLQkJCUlCdXNFbmdpbmVEZXNjKiBfdG1wNDVfOworKwkJZGVzY19jb2xsZWN0 aW9uID0gX3RtcDM4XzsKKysJCWRlc2NfY29sbGVjdGlvbl9sZW5ndGgxID0gX3RtcDM4X19sZW5n dGgxOworKwkJZm9yIChkZXNjX2l0ID0gMDsgZGVzY19pdCA8IF90bXAzOF9fbGVuZ3RoMTsgZGVz Y19pdCA9IGRlc2NfaXQgKyAxKSB7CisrCQkJSUJ1c0VuZ2luZURlc2MqIF90bXAzOV87CisgCQkJ SUJ1c0VuZ2luZURlc2MqIGRlc2MgPSBOVUxMOworLQkJCV90bXA0NV8gPSBfZ19vYmplY3RfcmVm MCAoZGVzY19jb2xsZWN0aW9uW2Rlc2NfaXRdKTsKKy0JCQlkZXNjID0gX3RtcDQ1XzsKKysJCQlf dG1wMzlfID0gX2dfb2JqZWN0X3JlZjAgKGRlc2NfY29sbGVjdGlvbltkZXNjX2l0XSk7CisrCQkJ ZGVzYyA9IF90bXAzOV87CisgCQkJeworLQkJCQlnY2hhcioqIF90bXA0Nl87CistCQkJCWdpbnQg X3RtcDQ2X19sZW5ndGgxOworLQkJCQlJQnVzRW5naW5lRGVzYyogX3RtcDQ3XzsKKy0JCQkJY29u c3QgZ2NoYXIqIF90bXA0OF8gPSBOVUxMOworLQkJCQlnY2hhciogX3RtcDQ5XzsKKy0JCQkJX3Rt cDQ2XyA9IG5hbWVzOworLQkJCQlfdG1wNDZfX2xlbmd0aDEgPSBuYW1lc19sZW5ndGgxOworLQkJ CQlfdG1wNDdfID0gZGVzYzsKKy0JCQkJX3RtcDQ4XyA9IGlidXNfZW5naW5lX2Rlc2NfZ2V0X25h bWUgKF90bXA0N18pOworLQkJCQlfdG1wNDlfID0gZ19zdHJkdXAgKF90bXA0OF8pOworLQkJCQlf dmFsYV9hcnJheV9hZGQ5ICgmbmFtZXMsICZuYW1lc19sZW5ndGgxLCAmX25hbWVzX3NpemVfLCBf dG1wNDlfKTsKKysJCQkJZ2NoYXIqKiBfdG1wNDBfOworKwkJCQlnaW50IF90bXA0MF9fbGVuZ3Ro MTsKKysJCQkJSUJ1c0VuZ2luZURlc2MqIF90bXA0MV87CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1w NDJfID0gTlVMTDsKKysJCQkJZ2NoYXIqIF90bXA0M187CisrCQkJCV90bXA0MF8gPSBuYW1lczsK KysJCQkJX3RtcDQwX19sZW5ndGgxID0gbmFtZXNfbGVuZ3RoMTsKKysJCQkJX3RtcDQxXyA9IGRl c2M7CisrCQkJCV90bXA0Ml8gPSBpYnVzX2VuZ2luZV9kZXNjX2dldF9uYW1lIChfdG1wNDFfKTsK KysJCQkJX3RtcDQzXyA9IGdfc3RyZHVwIChfdG1wNDJfKTsKKysJCQkJX3ZhbGFfYXJyYXlfYWRk MTYgKCZuYW1lcywgJm5hbWVzX2xlbmd0aDEsICZfbmFtZXNfc2l6ZV8sIF90bXA0M18pOworIAkJ CQlfZ19vYmplY3RfdW5yZWYwIChkZXNjKTsKKyAJCQl9CisgCQl9CisgCX0KKy0JX3RtcDUwXyA9 IHNlbGYtPnByaXYtPm1fY29uZmlnOworLQlpZiAoX3RtcDUwXyAhPSBOVUxMKSB7CistCQlJQnVz Q29uZmlnKiBfdG1wNTFfOworLQkJZ2NoYXIqKiBfdG1wNTJfOworLQkJZ2ludCBfdG1wNTJfX2xl bmd0aDE7CistCQlHVmFyaWFudCogX3RtcDUzXzsKKy0JCUdWYXJpYW50KiBfdG1wNTRfOworLQkJ X3RtcDUxXyA9IHNlbGYtPnByaXYtPm1fY29uZmlnOworLQkJX3RtcDUyXyA9IG5hbWVzOworLQkJ X3RtcDUyX19sZW5ndGgxID0gbmFtZXNfbGVuZ3RoMTsKKy0JCV90bXA1M18gPSBnX3ZhcmlhbnRf bmV3X3N0cnYgKF90bXA1Ml8sIF90bXA1Ml9fbGVuZ3RoMSk7CistCQlfdG1wNTRfID0gZ192YXJp YW50X3JlZl9zaW5rIChfdG1wNTNfKTsKKy0JCWlidXNfY29uZmlnX3NldF92YWx1ZSAoX3RtcDUx XywgImdlbmVyYWwiLCAiZW5naW5lc19vcmRlciIsIF90bXA1NF8pOworLQkJX2dfdmFyaWFudF91 bnJlZjAgKF90bXA1NF8pOworKwlfdG1wNDRfID0gc2VsZi0+cHJpdi0+bV9jb25maWc7CisrCWlm IChfdG1wNDRfICE9IE5VTEwpIHsKKysJCUlCdXNDb25maWcqIF90bXA0NV87CisrCQlnY2hhcioq IF90bXA0Nl87CisrCQlnaW50IF90bXA0Nl9fbGVuZ3RoMTsKKysJCUdWYXJpYW50KiBfdG1wNDdf OworKwkJR1ZhcmlhbnQqIF90bXA0OF87CisrCQlfdG1wNDVfID0gc2VsZi0+cHJpdi0+bV9jb25m aWc7CisrCQlfdG1wNDZfID0gbmFtZXM7CisrCQlfdG1wNDZfX2xlbmd0aDEgPSBuYW1lc19sZW5n dGgxOworKwkJX3RtcDQ3XyA9IGdfdmFyaWFudF9uZXdfc3RydiAoX3RtcDQ2XywgX3RtcDQ2X19s ZW5ndGgxKTsKKysJCV90bXA0OF8gPSBnX3ZhcmlhbnRfcmVmX3NpbmsgKF90bXA0N18pOworKwkJ aWJ1c19jb25maWdfc2V0X3ZhbHVlIChfdG1wNDVfLCAiZ2VuZXJhbCIsICJlbmdpbmVzX29yZGVy IiwgX3RtcDQ4Xyk7CisrCQlfZ192YXJpYW50X3VucmVmMCAoX3RtcDQ4Xyk7CisgCX0KKyAJbmFt ZXMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAobmFtZXMsIG5hbWVzX2xlbmd0aDEsIChHRGVzdHJveU5v dGlmeSkgZ19mcmVlKSwgTlVMTCk7CistCV9nX2ZyZWUwIChjbWRsaW5lKTsKKyAJX2dfb2JqZWN0 X3VucmVmMCAoZW5naW5lKTsKKyB9CisgCitAQCAtNzgyLDcgKzE4ODgsNyBAQCBzdGF0aWMgdm9p ZCBwYW5lbF9oYW5kbGVfZW5naW5lX3N3aXRjaCAoCisgCQlpID0gX3RtcDE3XzsKKyAJCV90bXAx OF8gPSBpOworIAkJaWYgKF90bXAxOF8gPCAwKSB7CistCQkJZ19kZWJ1ZyAoInBhbmVsLnZhbGE6 MTY3OiBzd2l0Y2ggY2FuY2VsbGVkIik7CisrCQkJZ19kZWJ1ZyAoInBhbmVsLnZhbGE6NDA2OiBz d2l0Y2ggY2FuY2VsbGVkIik7CisgCQl9IGVsc2UgeworIAkJCWdpbnQgX3RtcDE5XzsKKyAJCQlJ QnVzRW5naW5lRGVzYyoqIF90bXAyMF87CitAQCAtODE5LDcgKzE5MjUsNyBAQCBzdGF0aWMgdm9p ZCBwYW5lbF9oYW5kbGVfZW5naW5lX3N3aXRjaCAoCisgfQorIAorIAorLXN0YXRpYyBnY2hhcioq IF92YWxhX2FycmF5X2R1cDIgKGdjaGFyKiogc2VsZiwgaW50IGxlbmd0aCkgeworK3N0YXRpYyBn Y2hhcioqIF92YWxhX2FycmF5X2R1cDQgKGdjaGFyKiogc2VsZiwgaW50IGxlbmd0aCkgeworIAln Y2hhcioqIHJlc3VsdDsKKyAJaW50IGk7CisgCXJlc3VsdCA9IGdfbmV3MCAoZ2NoYXIqLCBsZW5n dGggKyAxKTsKK0BAIC04MzIsMTggKzE5MzgsNyBAQCBzdGF0aWMgZ2NoYXIqKiBfdmFsYV9hcnJh eV9kdXAyIChnY2hhcioqCisgfQorIAorIAorLXN0YXRpYyBnYm9vbGVhbiBfdmFsYV9zdHJpbmdf YXJyYXlfY29udGFpbnMgKGdjaGFyKiogc3RhY2ssIGludCBzdGFja19sZW5ndGgsIGdjaGFyKiBu ZWVkbGUpIHsKKy0JaW50IGk7CistCWZvciAoaSA9IDA7IGkgPCBzdGFja19sZW5ndGg7IGkrKykg eworLQkJaWYgKGdfc3RyY21wMCAoc3RhY2tbaV0sIG5lZWRsZSkgPT0gMCkgeworLQkJCXJldHVy biBUUlVFOworLQkJfQorLQl9CistCXJldHVybiBGQUxTRTsKKy19CistCistCistc3RhdGljIHZv aWQgX3ZhbGFfYXJyYXlfYWRkMTAgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBz aXplLCBnY2hhciogdmFsdWUpIHsKKytzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxNyAoZ2No YXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgeworIAlp ZiAoKCpsZW5ndGgpID09ICgqc2l6ZSkpIHsKKyAJCSpzaXplID0gKCpzaXplKSA/ICgyICogKCpz aXplKSkgOiA0OworIAkJKmFycmF5ID0gZ19yZW5ldyAoZ2NoYXIqLCAqYXJyYXksICgqc2l6ZSkg KyAxKTsKK0BAIC04NTMsNyArMTk0OCw3IEBAIHN0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDEw IChnY2hhcioqKgorIH0KKyAKKyAKKy1zdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMSAoZ2No YXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSkgeworK3N0 YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDE4IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgs IGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKSB7CisgCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkg eworIAkJKnNpemUgPSAoKnNpemUpID8gKDIgKiAoKnNpemUpKSA6IDQ7CisgCQkqYXJyYXkgPSBn X3JlbmV3IChnY2hhciosICphcnJheSwgKCpzaXplKSArIDEpOworQEAgLTg2Myw3ICsxOTU4LDcg QEAgc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTEgKGdjaGFyKioqCisgfQorIAorIAorLXN0 YXRpYyBJQnVzRW5naW5lRGVzYyoqIF92YWxhX2FycmF5X2R1cDMgKElCdXNFbmdpbmVEZXNjKiog c2VsZiwgaW50IGxlbmd0aCkgeworK3N0YXRpYyBJQnVzRW5naW5lRGVzYyoqIF92YWxhX2FycmF5 X2R1cDUgKElCdXNFbmdpbmVEZXNjKiogc2VsZiwgaW50IGxlbmd0aCkgeworIAlJQnVzRW5naW5l RGVzYyoqIHJlc3VsdDsKKyAJaW50IGk7CisgCXJlc3VsdCA9IGdfbmV3MCAoSUJ1c0VuZ2luZURl c2MqLCBsZW5ndGggKyAxKTsKK0BAIC04NzYsNyArMTk3MSw3IEBAIHN0YXRpYyBJQnVzRW5naW5l RGVzYyoqIF92YWxhX2FycmF5X2R1cDMKKyB9CisgCisgCistc3RhdGljIElCdXNFbmdpbmVEZXNj KiogX3ZhbGFfYXJyYXlfZHVwNCAoSUJ1c0VuZ2luZURlc2MqKiBzZWxmLCBpbnQgbGVuZ3RoKSB7 Cisrc3RhdGljIElCdXNFbmdpbmVEZXNjKiogX3ZhbGFfYXJyYXlfZHVwNiAoSUJ1c0VuZ2luZURl c2MqKiBzZWxmLCBpbnQgbGVuZ3RoKSB7CisgCUlCdXNFbmdpbmVEZXNjKiogcmVzdWx0OworIAlp bnQgaTsKKyAJcmVzdWx0ID0gZ19uZXcwIChJQnVzRW5naW5lRGVzYyosIGxlbmd0aCArIDEpOwor QEAgLTk4NSw3ICsyMDgwLDcgQEAgc3RhdGljIHZvaWQgcGFuZWxfdXBkYXRlX2VuZ2luZXMgKFBh bmVsKgorIAl9CisgCV90bXAxNV8gPSBfdG1wMTBfOworIAlfdG1wMTVfX2xlbmd0aDEgPSBfdG1w MTBfX2xlbmd0aDE7CistCV90bXAxNl8gPSAoX3RtcDE1XyAhPSBOVUxMKSA/IF92YWxhX2FycmF5 X2R1cDIgKF90bXAxNV8sIF90bXAxNV9fbGVuZ3RoMSkgOiAoKGdwb2ludGVyKSBfdG1wMTVfKTsK KysJX3RtcDE2XyA9IChfdG1wMTVfICE9IE5VTEwpID8gX3ZhbGFfYXJyYXlfZHVwNCAoX3RtcDE1 XywgX3RtcDE1X19sZW5ndGgxKSA6ICgoZ3BvaW50ZXIpIF90bXAxNV8pOworIAlfdG1wMTZfX2xl bmd0aDEgPSBfdG1wMTVfX2xlbmd0aDE7CisgCW9yZGVyX25hbWVzID0gX3RtcDE2XzsKKyAJb3Jk ZXJfbmFtZXNfbGVuZ3RoMSA9IF90bXAxNl9fbGVuZ3RoMTsKK0BAIC0xMDI0LDcgKzIxMTksNyBA QCBzdGF0aWMgdm9pZCBwYW5lbF91cGRhdGVfZW5naW5lcyAoUGFuZWwqCisgCQkJCQlfdG1wMjJf X2xlbmd0aDEgPSBuYW1lc19sZW5ndGgxOworIAkJCQkJX3RtcDIzXyA9IG5hbWU7CisgCQkJCQlf dG1wMjRfID0gZ19zdHJkdXAgKF90bXAyM18pOworLQkJCQkJX3ZhbGFfYXJyYXlfYWRkMTAgKCZu YW1lcywgJm5hbWVzX2xlbmd0aDEsICZfbmFtZXNfc2l6ZV8sIF90bXAyNF8pOworKwkJCQkJX3Zh bGFfYXJyYXlfYWRkMTcgKCZuYW1lcywgJm5hbWVzX2xlbmd0aDEsICZfbmFtZXNfc2l6ZV8sIF90 bXAyNF8pOworIAkJCQl9CisgCQkJCV9nX2ZyZWUwIChuYW1lKTsKKyAJCQl9CitAQCAtMTA2Myw3 ICsyMTU4LDcgQEAgc3RhdGljIHZvaWQgcGFuZWxfdXBkYXRlX2VuZ2luZXMgKFBhbmVsKgorIAkJ CQlfdG1wMjlfX2xlbmd0aDEgPSBuYW1lc19sZW5ndGgxOworIAkJCQlfdG1wMzBfID0gbmFtZTsK KyAJCQkJX3RtcDMxXyA9IGdfc3RyZHVwIChfdG1wMzBfKTsKKy0JCQkJX3ZhbGFfYXJyYXlfYWRk MTEgKCZuYW1lcywgJm5hbWVzX2xlbmd0aDEsICZfbmFtZXNfc2l6ZV8sIF90bXAzMV8pOworKwkJ CQlfdmFsYV9hcnJheV9hZGQxOCAoJm5hbWVzLCAmbmFtZXNfbGVuZ3RoMSwgJl9uYW1lc19zaXpl XywgX3RtcDMxXyk7CisgCQkJCV9nX2ZyZWUwIChuYW1lKTsKKyAJCQl9CisgCQl9CitAQCAtMTA4 NCw3ICsyMTc5LDcgQEAgc3RhdGljIHZvaWQgcGFuZWxfdXBkYXRlX2VuZ2luZXMgKFBhbmVsKgor IAkJZ2ludCBfdG1wMzhfX2xlbmd0aDE7CisgCQlfdG1wMzdfID0gZW5naW5lczsKKyAJCV90bXAz N19fbGVuZ3RoMSA9IGVuZ2luZXNfbGVuZ3RoMTsKKy0JCV90bXAzOF8gPSAoX3RtcDM3XyAhPSBO VUxMKSA/IF92YWxhX2FycmF5X2R1cDMgKF90bXAzN18sIF90bXAzN19fbGVuZ3RoMSkgOiAoKGdw b2ludGVyKSBfdG1wMzdfKTsKKysJCV90bXAzOF8gPSAoX3RtcDM3XyAhPSBOVUxMKSA/IF92YWxh X2FycmF5X2R1cDUgKF90bXAzN18sIF90bXAzN19fbGVuZ3RoMSkgOiAoKGdwb2ludGVyKSBfdG1w MzdfKTsKKyAJCV90bXAzOF9fbGVuZ3RoMSA9IF90bXAzN19fbGVuZ3RoMTsKKyAJCXNlbGYtPnBy aXYtPm1fZW5naW5lcyA9IChfdmFsYV9hcnJheV9mcmVlIChzZWxmLT5wcml2LT5tX2VuZ2luZXMs IHNlbGYtPnByaXYtPm1fZW5naW5lc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfb2JqZWN0 X3VucmVmKSwgTlVMTCk7CisgCQlzZWxmLT5wcml2LT5tX2VuZ2luZXMgPSBfdG1wMzhfOworQEAg LTExMDksNyArMjIwNCw3IEBAIHN0YXRpYyB2b2lkIHBhbmVsX3VwZGF0ZV9lbmdpbmVzIChQYW5l bCoKKyAJCWN1cnJlbnRfZW5naW5lID0gX3RtcDQxXzsKKyAJCV90bXA0Ml8gPSBlbmdpbmVzOwor IAkJX3RtcDQyX19sZW5ndGgxID0gZW5naW5lc19sZW5ndGgxOworLQkJX3RtcDQzXyA9IChfdG1w NDJfICE9IE5VTEwpID8gX3ZhbGFfYXJyYXlfZHVwNCAoX3RtcDQyXywgX3RtcDQyX19sZW5ndGgx KSA6ICgoZ3BvaW50ZXIpIF90bXA0Ml8pOworKwkJX3RtcDQzXyA9IChfdG1wNDJfICE9IE5VTEwp ID8gX3ZhbGFfYXJyYXlfZHVwNiAoX3RtcDQyXywgX3RtcDQyX19sZW5ndGgxKSA6ICgoZ3BvaW50 ZXIpIF90bXA0Ml8pOworIAkJX3RtcDQzX19sZW5ndGgxID0gX3RtcDQyX19sZW5ndGgxOworIAkJ c2VsZi0+cHJpdi0+bV9lbmdpbmVzID0gKF92YWxhX2FycmF5X2ZyZWUgKHNlbGYtPnByaXYtPm1f ZW5naW5lcywgc2VsZi0+cHJpdi0+bV9lbmdpbmVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkg Z19vYmplY3RfdW5yZWYpLCBOVUxMKTsKKyAJCXNlbGYtPnByaXYtPm1fZW5naW5lcyA9IF90bXA0 M187CitAQCAtMTIzNyw3ICsyMzMyLDcgQEAgc3RhdGljIHZvaWQgcGFuZWxfc2hvd19zZXR1cF9k aWFsb2cgKFBhbgorIAkJX3RtcDhfID0gKF92YWxhX2FycmF5X2ZyZWUgKF90bXA4XywgX3RtcDhf X2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisgCQlpZiAoX2lubmVy X2Vycm9yXyAhPSBOVUxMKSB7CisgCQkJaWYgKF9pbm5lcl9lcnJvcl8tPmRvbWFpbiA9PSBHX1NQ QVdOX0VSUk9SKSB7CistCQkJCWdvdG8gX19jYXRjaDNfZ19zcGF3bl9lcnJvcjsKKysJCQkJZ290 byBfX2NhdGNoMl9nX3NwYXduX2Vycm9yOworIAkJCX0KKyAJCQlfZ19mcmVlMCAoYmluYXJ5KTsK KyAJCQlnX2NyaXRpY2FsICgiZmlsZSAlczogbGluZSAlZDogdW5leHBlY3RlZCBlcnJvcjogJXMg KCVzLCAlZCkiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9pbm5lcl9lcnJvcl8tPm1lc3NhZ2UsIGdf cXVhcmtfdG9fc3RyaW5nIChfaW5uZXJfZXJyb3JfLT5kb21haW4pLCBfaW5uZXJfZXJyb3JfLT5j b2RlKTsKK0BAIC0xMjQ1LDggKzIzNDAsOCBAQCBzdGF0aWMgdm9pZCBwYW5lbF9zaG93X3NldHVw X2RpYWxvZyAoUGFuCisgCQkJcmV0dXJuOworIAkJfQorIAl9CistCWdvdG8gX19maW5hbGx5MzsK Ky0JX19jYXRjaDNfZ19zcGF3bl9lcnJvcjoKKysJZ290byBfX2ZpbmFsbHkyOworKwlfX2NhdGNo Ml9nX3NwYXduX2Vycm9yOgorIAl7CisgCQlHRXJyb3IqIGUgPSBOVUxMOworIAkJY29uc3QgZ2No YXIqIF90bXAxMF87CitAQCAtMTI1NywxMSArMjM1MiwxMSBAQCBzdGF0aWMgdm9pZCBwYW5lbF9z aG93X3NldHVwX2RpYWxvZyAoUGFuCisgCQlfdG1wMTBfID0gYmluYXJ5OworIAkJX3RtcDExXyA9 IGU7CisgCQlfdG1wMTJfID0gX3RtcDExXy0+bWVzc2FnZTsKKy0JCWdfd2FybmluZyAoInBhbmVs LnZhbGE6MjM5OiBFeGVjdXRlICVzIGZhaWxlZCEgJXMiLCBfdG1wMTBfLCBfdG1wMTJfKTsKKysJ CWdfd2FybmluZyAoInBhbmVsLnZhbGE6NDc4OiBFeGVjdXRlICVzIGZhaWxlZCEgJXMiLCBfdG1w MTBfLCBfdG1wMTJfKTsKKyAJCXNlbGYtPnByaXYtPm1fc2V0dXBfcGlkID0gKEdQaWQpIDA7Cisg CQlfZ19lcnJvcl9mcmVlMCAoZSk7CisgCX0KKy0JX19maW5hbGx5MzoKKysJX19maW5hbGx5MjoK KyAJaWYgKF9pbm5lcl9lcnJvcl8gIT0gTlVMTCkgeworIAkJX2dfZnJlZTAgKGJpbmFyeSk7Cisg CQlnX2NyaXRpY2FsICgiZmlsZSAlczogbGluZSAlZDogdW5jYXVnaHQgZXJyb3I6ICVzICglcywg JWQpIiwgX19GSUxFX18sIF9fTElORV9fLCBfaW5uZXJfZXJyb3JfLT5tZXNzYWdlLCBnX3F1YXJr X3RvX3N0cmluZyAoX2lubmVyX2Vycm9yXy0+ZG9tYWluKSwgX2lubmVyX2Vycm9yXy0+Y29kZSk7 CitAQCAtMTk1MCwxMiArMzA0NSwzMSBAQCBzdGF0aWMgdm9pZCBwYW5lbF9jbGFzc19pbml0IChQ YW5lbENsYXNzCisgCisgc3RhdGljIHZvaWQgcGFuZWxfaW5zdGFuY2VfaW5pdCAoUGFuZWwgKiBz ZWxmKSB7CisgCUlCdXNFbmdpbmVEZXNjKiogX3RtcDBfID0gTlVMTDsKKysJZ2NoYXIqKiBfdG1w MV8gPSBOVUxMOworKwlnY2hhcioqIF90bXAyXyA9IE5VTEw7CisrCWdjaGFyKiogX3RtcDNfID0g TlVMTDsKKyAJc2VsZi0+cHJpdiA9IFBBTkVMX0dFVF9QUklWQVRFIChzZWxmKTsKKyAJX3RtcDBf ID0gZ19uZXcwIChJQnVzRW5naW5lRGVzYyosIDAgKyAxKTsKKyAJc2VsZi0+cHJpdi0+bV9lbmdp bmVzID0gX3RtcDBfOworIAlzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3RoMSA9IDA7CisgCXNl bGYtPnByaXYtPl9tX2VuZ2luZXNfc2l6ZV8gPSBzZWxmLT5wcml2LT5tX2VuZ2luZXNfbGVuZ3Ro MTsKKyAJc2VsZi0+cHJpdi0+bV9zZXR1cF9waWQgPSAoR1BpZCkgMDsKKysJc2VsZi0+cHJpdi0+ bV9na2JkbGF5b3V0ID0gTlVMTDsKKysJc2VsZi0+cHJpdi0+bV94a2JsYXlvdXQgPSBOVUxMOwor KwlfdG1wMV8gPSBnX25ldzAgKGdjaGFyKiwgMCArIDEpOworKwlzZWxmLT5wcml2LT5tX2xheW91 dHMgPSBfdG1wMV87CisrCXNlbGYtPnByaXYtPm1fbGF5b3V0c19sZW5ndGgxID0gMDsKKysJc2Vs Zi0+cHJpdi0+X21fbGF5b3V0c19zaXplXyA9IHNlbGYtPnByaXYtPm1fbGF5b3V0c19sZW5ndGgx OworKwlfdG1wMl8gPSBnX25ldzAgKGdjaGFyKiwgMCArIDEpOworKwlzZWxmLT5wcml2LT5tX3Zh cmlhbnRzID0gX3RtcDJfOworKwlzZWxmLT5wcml2LT5tX3ZhcmlhbnRzX2xlbmd0aDEgPSAwOwor KwlzZWxmLT5wcml2LT5fbV92YXJpYW50c19zaXplXyA9IHNlbGYtPnByaXYtPm1fdmFyaWFudHNf bGVuZ3RoMTsKKysJc2VsZi0+cHJpdi0+bV9mYWxsYmFja19sb2NrX2lkID0gLTE7CisrCXNlbGYt PnByaXYtPm1fY2hhbmdlZF94a2Jfb3B0aW9uID0gRkFMU0U7CisrCV90bXAzXyA9IGdfbmV3MCAo Z2NoYXIqLCAwICsgMSk7CisrCXNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTID0g X3RtcDNfOworKwlzZWxmLT5wcml2LT5BQ0NFTEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxID0g MDsKKysJc2VsZi0+cHJpdi0+X0FDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX3NpemVfID0gc2VsZi0+ cHJpdi0+QUNDRUxFUkFUT1JfSU1FX0hPVEtFWVNfbGVuZ3RoMTsKKyB9CisgCisgCitAQCAtMTk2 MywxNSArMzA3Nyw2NiBAQCBzdGF0aWMgdm9pZCBwYW5lbF9maW5hbGl6ZSAoR09iamVjdCogb2Jq CisgCVBhbmVsICogc2VsZjsKKyAJS2V5YmluZGluZ01hbmFnZXIqIF90bXAwXyA9IE5VTEw7Cisg CUtleWJpbmRpbmdNYW5hZ2VyKiBrZXliaW5kaW5nX21hbmFnZXI7CistCUtleWJpbmRpbmdNYW5h Z2VyKiBfdG1wMV87CistCUtleWJpbmRpbmdNYW5hZ2VyKiBfdG1wMl87CisrCWdjaGFyKiogX3Rt cDFfOworKwlnaW50IF90bXAxX19sZW5ndGgxOworKwlnYm9vbGVhbiBfdG1wN18gPSBGQUxTRTsK KysJZ2Jvb2xlYW4gX3RtcDlfOworIAlzZWxmID0gUEFORUwgKG9iaik7CisgCV90bXAwXyA9IGtl eWJpbmRpbmdfbWFuYWdlcl9nZXRfaW5zdGFuY2UgKCk7CisgCWtleWJpbmRpbmdfbWFuYWdlciA9 IF90bXAwXzsKKy0JX3RtcDFfID0ga2V5YmluZGluZ19tYW5hZ2VyOworLQlrZXliaW5kaW5nX21h bmFnZXJfdW5iaW5kIChfdG1wMV8sIFBBTkVMX0FDQ0VMRVJBVE9SX1NXSVRDSF9JTUVfRk9SRVdB UkQpOworLQlfdG1wMl8gPSBrZXliaW5kaW5nX21hbmFnZXI7CistCWtleWJpbmRpbmdfbWFuYWdl cl91bmJpbmQgKF90bXAyXywgUEFORUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9CQUNLV0FSRCk7 CisrCV90bXAxXyA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTOworKwlfdG1w MV9fbGVuZ3RoMSA9IHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTX2xlbmd0aDE7 CisrCXsKKysJCWdjaGFyKioga2V5YmluZGluZ19jb2xsZWN0aW9uID0gTlVMTDsKKysJCWdpbnQg a2V5YmluZGluZ19jb2xsZWN0aW9uX2xlbmd0aDEgPSAwOworKwkJZ2ludCBfa2V5YmluZGluZ19j b2xsZWN0aW9uX3NpemVfID0gMDsKKysJCWdpbnQga2V5YmluZGluZ19pdCA9IDA7CisrCQlrZXli aW5kaW5nX2NvbGxlY3Rpb24gPSBfdG1wMV87CisrCQlrZXliaW5kaW5nX2NvbGxlY3Rpb25fbGVu Z3RoMSA9IF90bXAxX19sZW5ndGgxOworKwkJZm9yIChrZXliaW5kaW5nX2l0ID0gMDsga2V5Ymlu ZGluZ19pdCA8IF90bXAxX19sZW5ndGgxOyBrZXliaW5kaW5nX2l0ID0ga2V5YmluZGluZ19pdCAr IDEpIHsKKysJCQlnY2hhciogX3RtcDJfOworKwkJCWdjaGFyKiBrZXliaW5kaW5nID0gTlVMTDsK KysJCQlfdG1wMl8gPSBnX3N0cmR1cCAoa2V5YmluZGluZ19jb2xsZWN0aW9uW2tleWJpbmRpbmdf aXRdKTsKKysJCQlrZXliaW5kaW5nID0gX3RtcDJfOworKwkJCXsKKysJCQkJS2V5YmluZGluZ01h bmFnZXIqIF90bXAzXzsKKysJCQkJY29uc3QgZ2NoYXIqIF90bXA0XzsKKysJCQkJY29uc3QgZ2No YXIqIF90bXA1XzsKKysJCQkJX3RtcDNfID0ga2V5YmluZGluZ19tYW5hZ2VyOworKwkJCQlfdG1w NF8gPSBrZXliaW5kaW5nOworKwkJCQlrZXliaW5kaW5nX21hbmFnZXJfdW5iaW5kIChfdG1wM18s IF90bXA0Xyk7CisrCQkJCV90bXA1XyA9IGtleWJpbmRpbmc7CisrCQkJCWlmIChnX3N0cmNtcDAg KF90bXA1XywgUEFORUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9GT1JFV0FSRCkgPT0gMCkgewor KwkJCQkJS2V5YmluZGluZ01hbmFnZXIqIF90bXA2XzsKKysJCQkJCV90bXA2XyA9IGtleWJpbmRp bmdfbWFuYWdlcjsKKysJCQkJCWtleWJpbmRpbmdfbWFuYWdlcl91bmJpbmQgKF90bXA2XywgUEFO RUxfQUNDRUxFUkFUT1JfU1dJVENIX0lNRV9CQUNLV0FSRCk7CisrCQkJCX0KKysJCQkJX2dfZnJl ZTAgKGtleWJpbmRpbmcpOworKwkJCX0KKysJCX0KKysJfQorKwlpZiAoSEFWRV9JQlVTX0dLQkQp IHsKKysJCUdrYmRMYXlvdXQqIF90bXA4XzsKKysJCV90bXA4XyA9IHNlbGYtPnByaXYtPm1fZ2ti ZGxheW91dDsKKysJCV90bXA3XyA9IF90bXA4XyAhPSBOVUxMOworKwl9IGVsc2UgeworKwkJX3Rt cDdfID0gRkFMU0U7CisrCX0KKysJX3RtcDlfID0gX3RtcDdfOworKwlpZiAoX3RtcDlfKSB7Cisr CQlHa2JkTGF5b3V0KiBfdG1wMTBfOworKwkJZ3VpbnQgX3RtcDExXyA9IDBVOworKwkJR2tiZExh eW91dCogX3RtcDEyXzsKKysJCV90bXAxMF8gPSBzZWxmLT5wcml2LT5tX2drYmRsYXlvdXQ7Cisr CQlnX3NpZ25hbF9wYXJzZV9uYW1lICgiY2hhbmdlZCIsIFRZUEVfR0tCRF9MQVlPVVQsICZfdG1w MTFfLCBOVUxMLCBGQUxTRSk7CisrCQlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNo ZWQgKF90bXAxMF8sIEdfU0lHTkFMX01BVENIX0lEIHwgR19TSUdOQUxfTUFUQ0hfRlVOQyB8IEdf U0lHTkFMX01BVENIX0RBVEEsIF90bXAxMV8sIDAsIE5VTEwsIChHQ2FsbGJhY2spIF9wYW5lbF9n a2JkbGF5b3V0X2NoYW5nZWRfY2JfZ2tiZF9sYXlvdXRfY2hhbmdlZCwgc2VsZik7CisrCQlfdG1w MTJfID0gc2VsZi0+cHJpdi0+bV9na2JkbGF5b3V0OworKwkJZ2tiZF9sYXlvdXRfc3RvcF9saXN0 ZW4gKF90bXAxMl8pOworKwkJX2drYmRfbGF5b3V0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9na2Jk bGF5b3V0KTsKKysJCXNlbGYtPnByaXYtPm1fZ2tiZGxheW91dCA9IE5VTEw7CisrCX0KKysJX3hr Yl9sYXlvdXRfdW5yZWYwIChzZWxmLT5wcml2LT5tX3hrYmxheW91dCk7CisrCXNlbGYtPnByaXYt Pm1feGtibGF5b3V0ID0gTlVMTDsKKyAJX2dfb2JqZWN0X3VucmVmMCAoa2V5YmluZGluZ19tYW5h Z2VyKTsKKyAJX2dfb2JqZWN0X3VucmVmMCAoc2VsZi0+cHJpdi0+bV9idXMpOworIAlfZ19vYmpl Y3RfdW5yZWYwIChzZWxmLT5wcml2LT5tX2NvbmZpZyk7CitAQCAtMTk4Myw2ICszMTQ4LDEyIEBA IHN0YXRpYyB2b2lkIHBhbmVsX2ZpbmFsaXplIChHT2JqZWN0KiBvYmoKKyAJX2dfb2JqZWN0X3Vu cmVmMCAoc2VsZi0+cHJpdi0+bV9zd2l0Y2hlcik7CisgCV9wcm9wZXJ0eV9tYW5hZ2VyX3VucmVm MCAoc2VsZi0+cHJpdi0+bV9wcm9wZXJ0eV9tYW5hZ2VyKTsKKyAJX2dfb2JqZWN0X3VucmVmMCAo c2VsZi0+cHJpdi0+bV9hYm91dF9kaWFsb2cpOworKwlfZ2tiZF9sYXlvdXRfdW5yZWYwIChzZWxm LT5wcml2LT5tX2drYmRsYXlvdXQpOworKwlfeGtiX2xheW91dF91bnJlZjAgKHNlbGYtPnByaXYt Pm1feGtibGF5b3V0KTsKKysJc2VsZi0+cHJpdi0+bV9sYXlvdXRzID0gKF92YWxhX2FycmF5X2Zy ZWUgKHNlbGYtPnByaXYtPm1fbGF5b3V0cywgc2VsZi0+cHJpdi0+bV9sYXlvdXRzX2xlbmd0aDEs IChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCXNlbGYtPnByaXYtPm1fdmFyaWFu dHMgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoc2VsZi0+cHJpdi0+bV92YXJpYW50cywgc2VsZi0+cHJp di0+bV92YXJpYW50c19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOwor KwlfZ190aW1lcl9kZXN0cm95MCAoc2VsZi0+cHJpdi0+bV9jaGFuZ2VkX2xheW91dF90aW1lcik7 CisrCXNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTID0gKF92YWxhX2FycmF5X2Zy ZWUgKHNlbGYtPnByaXYtPkFDQ0VMRVJBVE9SX0lNRV9IT1RLRVlTLCBzZWxmLT5wcml2LT5BQ0NF TEVSQVRPUl9JTUVfSE9US0VZU19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5V TEwpOworIAlHX09CSkVDVF9DTEFTUyAocGFuZWxfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9i aik7CisgfQorIAorLS0tIGlidXMvdWkvZ3RrMy9zd2l0Y2hlci5jLm9yaWcJMjAxMi0wMy0wNCAx OTowNTozNS4wMDAwMDAwMDAgKzA5MDAKKysrKyBpYnVzL3VpL2d0azMvc3dpdGNoZXIuYwkyMDEy LTAzLTEwIDExOjI2OjMwLjQyNDk4NDEzNyArMDkwMAorQEAgLTEwMyw3ICsxMDMsNyBAQCBndWlu dCBrZXliaW5kaW5nX21hbmFnZXJfZ2V0X3ByaW1hcnlfbW9kCisgc3RhdGljIHZvaWQgc3dpdGNo ZXJfdXBkYXRlX2VuZ2luZXMgKFN3aXRjaGVyKiBzZWxmLCBJQnVzRW5naW5lRGVzYyoqIGVuZ2lu ZXMsIGludCBlbmdpbmVzX2xlbmd0aDEpOworIHN0YXRpYyBnYm9vbGVhbiBfX19sYW1iZGExNV8g KFN3aXRjaGVyKiBzZWxmKTsKKyBzdGF0aWMgZ2Jvb2xlYW4gX19fX2xhbWJkYTE1X19nc291cmNl X2Z1bmMgKGdwb2ludGVyIHNlbGYpOworLXN0YXRpYyBJQnVzRW5naW5lRGVzYyoqIF92YWxhX2Fy cmF5X2R1cDUgKElCdXNFbmdpbmVEZXNjKiogc2VsZiwgaW50IGxlbmd0aCk7Cisrc3RhdGljIElC dXNFbmdpbmVEZXNjKiogX3ZhbGFfYXJyYXlfZHVwNyAoSUJ1c0VuZ2luZURlc2MqKiBzZWxmLCBp bnQgbGVuZ3RoKTsKKyBzdGF0aWMgQmxvY2s1RGF0YSogYmxvY2s1X2RhdGFfcmVmIChCbG9jazVE YXRhKiBfZGF0YTVfKTsKKyBzdGF0aWMgdm9pZCBibG9jazVfZGF0YV91bnJlZiAoQmxvY2s1RGF0 YSogX2RhdGE1Xyk7CisgSWNvbldpZGdldCogaWNvbl93aWRnZXRfbmV3IChjb25zdCBnY2hhciog aWNvbiwgZ2ludCBzaXplKTsKK0BAIC0xMTMsNyArMTEzLDcgQEAgc3RhdGljIGdib29sZWFuIF9f X19fbGFtYmRhMTNfIChCbG9jazVEYQorIHN0YXRpYyBnYm9vbGVhbiBfX19fX19sYW1iZGExM19f Z3RrX3dpZGdldF9lbnRlcl9ub3RpZnlfZXZlbnQgKEd0a1dpZGdldCogX3NlbmRlciwgR2RrRXZl bnRDcm9zc2luZyogZXZlbnQsIGdwb2ludGVyIHNlbGYpOworIHN0YXRpYyBnYm9vbGVhbiBfX19f X2xhbWJkYTE0XyAoQmxvY2s1RGF0YSogX2RhdGE1XywgR2RrRXZlbnRCdXR0b24qIGUpOworIHN0 YXRpYyBnYm9vbGVhbiBfX19fX19sYW1iZGExNF9fZ3RrX3dpZGdldF9idXR0b25fcHJlc3NfZXZl bnQgKEd0a1dpZGdldCogX3NlbmRlciwgR2RrRXZlbnRCdXR0b24qIGV2ZW50LCBncG9pbnRlciBz ZWxmKTsKKy1zdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQxMiAoR3RrQnV0dG9uKioqIGFycmF5 LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBHdGtCdXR0b24qIHZhbHVlKTsKKytzdGF0aWMgdm9p ZCBfdmFsYV9hcnJheV9hZGQxOSAoR3RrQnV0dG9uKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50 KiBzaXplLCBHdGtCdXR0b24qIHZhbHVlKTsKKyBzdGF0aWMgdm9pZCBzd2l0Y2hlcl9uZXh0X2Vu Z2luZSAoU3dpdGNoZXIqIHNlbGYpOworIHN0YXRpYyB2b2lkIHN3aXRjaGVyX3ByZXZpb3VzX2Vu Z2luZSAoU3dpdGNoZXIqIHNlbGYpOworIHN0YXRpYyB2b2lkIHN3aXRjaGVyX3JlYWxfc2hvdyAo R3RrV2lkZ2V0KiBiYXNlKTsKK0BAIC0yMDcsNyArMjA3LDkgQEAgZ2ludCBzd2l0Y2hlcl9ydW4g KFN3aXRjaGVyKiBzZWxmLCBHZGtFdgorIAlHZGtHcmFiU3RhdHVzIF90bXA0OF87CisgCUdNYWlu TG9vcCogX3RtcDUwXzsKKyAJR01haW5Mb29wKiBfdG1wNTFfOworLQlnaW50IF90bXA1M187Cisr CUdka0RldmljZSogX3RtcDUyXzsKKysJR2RrRGV2aWNlKiBfdG1wNTNfOworKwlnaW50IF90bXA1 NV87CisgCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5VTEwsIDApOworIAlnX3JldHVy bl92YWxfaWZfZmFpbCAoZXZlbnQgIT0gTlVMTCwgMCk7CisgCV90bXAwXyA9IHNlbGYtPnByaXYt Pm1fbG9vcDsKK0BAIC0zMzUsMTcgKzMzNywyMSBAQCBnaW50IHN3aXRjaGVyX3J1biAoU3dpdGNo ZXIqIHNlbGYsIEdka0V2CisgCWdfbWFpbl9sb29wX3J1biAoX3RtcDUxXyk7CisgCV9nX21haW5f bG9vcF91bnJlZjAgKHNlbGYtPnByaXYtPm1fbG9vcCk7CisgCXNlbGYtPnByaXYtPm1fbG9vcCA9 IE5VTEw7CisrCV90bXA1Ml8gPSBrZXlib2FyZDsKKysJZ2RrX2RldmljZV91bmdyYWIgKF90bXA1 Ml8sIChndWludDMyKSBHREtfQ1VSUkVOVF9USU1FKTsKKysJX3RtcDUzXyA9IHBvaW50ZXI7Cisr CWdka19kZXZpY2VfdW5ncmFiIChfdG1wNTNfLCAoZ3VpbnQzMikgR0RLX0NVUlJFTlRfVElNRSk7 CisgCWd0a193aWRnZXRfaGlkZSAoKEd0a1dpZGdldCopIHNlbGYpOworIAl3aGlsZSAoVFJVRSkg eworLQkJZ2Jvb2xlYW4gX3RtcDUyXyA9IEZBTFNFOworLQkJX3RtcDUyXyA9IGd0a19ldmVudHNf cGVuZGluZyAoKTsKKy0JCWlmICghX3RtcDUyXykgeworKwkJZ2Jvb2xlYW4gX3RtcDU0XyA9IEZB TFNFOworKwkJX3RtcDU0XyA9IGd0a19ldmVudHNfcGVuZGluZyAoKTsKKysJCWlmICghX3RtcDU0 XykgeworIAkJCWJyZWFrOworIAkJfQorIAkJZ3RrX21haW5faXRlcmF0aW9uICgpOworIAl9Cist CV90bXA1M18gPSBzZWxmLT5wcml2LT5tX3Jlc3VsdDsKKy0JcmVzdWx0ID0gX3RtcDUzXzsKKysJ X3RtcDU1XyA9IHNlbGYtPnByaXYtPm1fcmVzdWx0OworKwlyZXN1bHQgPSBfdG1wNTVfOworIAlf Z19vYmplY3RfdW5yZWYwIChwb2ludGVyKTsKKyAJX2dfb2JqZWN0X3VucmVmMCAoa2V5Ym9hcmQp OworIAlfZ19vYmplY3RfdW5yZWYwIChkZXZpY2UpOworQEAgLTM1Myw3ICszNTksNyBAQCBnaW50 IHN3aXRjaGVyX3J1biAoU3dpdGNoZXIqIHNlbGYsIEdka0V2CisgfQorIAorIAorLXN0YXRpYyBJ QnVzRW5naW5lRGVzYyoqIF92YWxhX2FycmF5X2R1cDUgKElCdXNFbmdpbmVEZXNjKiogc2VsZiwg aW50IGxlbmd0aCkgeworK3N0YXRpYyBJQnVzRW5naW5lRGVzYyoqIF92YWxhX2FycmF5X2R1cDcg KElCdXNFbmdpbmVEZXNjKiogc2VsZiwgaW50IGxlbmd0aCkgeworIAlJQnVzRW5naW5lRGVzYyoq IHJlc3VsdDsKKyAJaW50IGk7CisgCXJlc3VsdCA9IGdfbmV3MCAoSUJ1c0VuZ2luZURlc2MqLCBs ZW5ndGggKyAxKTsKK0BAIC00MzIsNyArNDM4LDcgQEAgc3RhdGljIGdib29sZWFuIF9fX19fX2xh bWJkYTE0X19ndGtfd2lkZworIH0KKyAKKyAKKy1zdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQx MiAoR3RrQnV0dG9uKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBHdGtCdXR0b24q IHZhbHVlKSB7Cisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMTkgKEd0a0J1dHRvbioqKiBh cnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgR3RrQnV0dG9uKiB2YWx1ZSkgeworIAlpZiAo KCpsZW5ndGgpID09ICgqc2l6ZSkpIHsKKyAJCSpzaXplID0gKCpzaXplKSA/ICgyICogKCpzaXpl KSkgOiA0OworIAkJKmFycmF5ID0gZ19yZW5ldyAoR3RrQnV0dG9uKiwgKmFycmF5LCAoKnNpemUp ICsgMSk7CitAQCAtNTAwLDcgKzUwNiw3IEBAIHN0YXRpYyB2b2lkIHN3aXRjaGVyX3VwZGF0ZV9l bmdpbmVzIChTd2kKKyAJaGVpZ2h0ID0gX3RtcDdfOworIAlfdG1wOF8gPSBlbmdpbmVzOworIAlf dG1wOF9fbGVuZ3RoMSA9IGVuZ2luZXNfbGVuZ3RoMTsKKy0JX3RtcDlfID0gKF90bXA4XyAhPSBO VUxMKSA/IF92YWxhX2FycmF5X2R1cDUgKF90bXA4XywgX3RtcDhfX2xlbmd0aDEpIDogKChncG9p bnRlcikgX3RtcDhfKTsKKysJX3RtcDlfID0gKF90bXA4XyAhPSBOVUxMKSA/IF92YWxhX2FycmF5 X2R1cDcgKF90bXA4XywgX3RtcDhfX2xlbmd0aDEpIDogKChncG9pbnRlcikgX3RtcDhfKTsKKyAJ X3RtcDlfX2xlbmd0aDEgPSBfdG1wOF9fbGVuZ3RoMTsKKyAJc2VsZi0+cHJpdi0+bV9lbmdpbmVz ID0gKF92YWxhX2FycmF5X2ZyZWUgKHNlbGYtPnByaXYtPm1fZW5naW5lcywgc2VsZi0+cHJpdi0+ bV9lbmdpbmVzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19vYmplY3RfdW5yZWYpLCBOVUxM KTsKKyAJc2VsZi0+cHJpdi0+bV9lbmdpbmVzID0gX3RtcDlfOworQEAgLTU5OSw3ICs2MDUsNyBA QCBzdGF0aWMgdm9pZCBzd2l0Y2hlcl91cGRhdGVfZW5naW5lcyAoU3dpCisgCQkJCV90bXAzNl9f bGVuZ3RoMSA9IHNlbGYtPnByaXYtPm1fYnV0dG9uc19sZW5ndGgxOworIAkJCQlfdG1wMzdfID0g X2RhdGE1Xy0+YnV0dG9uOworIAkJCQlfdG1wMzhfID0gX2dfb2JqZWN0X3JlZjAgKF90bXAzN18p OworLQkJCQlfdmFsYV9hcnJheV9hZGQxMiAoJnNlbGYtPnByaXYtPm1fYnV0dG9ucywgJnNlbGYt PnByaXYtPm1fYnV0dG9uc19sZW5ndGgxLCAmc2VsZi0+cHJpdi0+X21fYnV0dG9uc19zaXplXywg X3RtcDM4Xyk7CisrCQkJCV92YWxhX2FycmF5X2FkZDE5ICgmc2VsZi0+cHJpdi0+bV9idXR0b25z LCAmc2VsZi0+cHJpdi0+bV9idXR0b25zX2xlbmd0aDEsICZzZWxmLT5wcml2LT5fbV9idXR0b25z X3NpemVfLCBfdG1wMzhfKTsKKyAJCQkJX2dfb2JqZWN0X3VucmVmMCAoZW5naW5lKTsKKyAJCQkJ YmxvY2s1X2RhdGFfdW5yZWYgKF9kYXRhNV8pOworIAkJCQlfZGF0YTVfID0gTlVMTDsKK0BAIC03 MjUsNyArNzMxLDcgQEAgc3RhdGljIGdib29sZWFuIHN3aXRjaGVyX3JlYWxfa2V5X3ByZXNzXwor IAkJCWd1aW50IF90bXA1XzsKKyAJCQlfdG1wNF8gPSBwZTsKKyAJCQlfdG1wNV8gPSAoKl90bXA0 Xykua2V5dmFsOworLQkJCWdfZGVidWcgKCJzd2l0Y2hlci52YWxhOjIyNTogMHglMDR4IiwgX3Rt cDVfKTsKKysJCQlnX2RlYnVnICgic3dpdGNoZXIudmFsYToyMjg6IDB4JTA0eCIsIF90bXA1Xyk7 CisgCQkJYnJlYWs7CisgCQl9CisgCX0KK0BAIC03NDIsNyArNzQ4LDggQEAgc3RhdGljIGdib29s ZWFuIHN3aXRjaGVyX3JlYWxfa2V5X3JlbGVhcworIAlndWludCBfdG1wMV87CisgCWdib29sZWFu IF90bXAyXyA9IEZBTFNFOworIAlHTWFpbkxvb3AqIF90bXAzXzsKKy0JZ3VpbnQgX3RtcDRfOwor KwlHTWFpbkxvb3AqIF90bXA0XzsKKysJZ3VpbnQgX3RtcDVfOworIAlzZWxmID0gKFN3aXRjaGVy KikgYmFzZTsKKyAJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGUgIT0gTlVMTCwgRkFMU0UpOworIAlw ZSA9IGU7CitAQCAtNzU0LDkgKzc2MSwxNCBAQCBzdGF0aWMgZ2Jvb2xlYW4gc3dpdGNoZXJfcmVh bF9rZXlfcmVsZWFzCisgCQlyZXR1cm4gcmVzdWx0OworIAl9CisgCV90bXAzXyA9IHNlbGYtPnBy aXYtPm1fbG9vcDsKKy0JZ19tYWluX2xvb3BfcXVpdCAoX3RtcDNfKTsKKy0JX3RtcDRfID0gc2Vs Zi0+cHJpdi0+bV9zZWxlY3RlZF9lbmdpbmU7CistCXNlbGYtPnByaXYtPm1fcmVzdWx0ID0gKGdp bnQpIF90bXA0XzsKKysJaWYgKF90bXAzXyA9PSBOVUxMKSB7CisrCQlyZXN1bHQgPSBGQUxTRTsK KysJCXJldHVybiByZXN1bHQ7CisrCX0KKysJX3RtcDRfID0gc2VsZi0+cHJpdi0+bV9sb29wOwor KwlnX21haW5fbG9vcF9xdWl0IChfdG1wNF8pOworKwlfdG1wNV8gPSBzZWxmLT5wcml2LT5tX3Nl bGVjdGVkX2VuZ2luZTsKKysJc2VsZi0+cHJpdi0+bV9yZXN1bHQgPSAoZ2ludCkgX3RtcDVfOwor IAlyZXN1bHQgPSBUUlVFOworIAlyZXR1cm4gcmVzdWx0OworIH0KKy0tLSBpYnVzL3VpL2d0azMv eGtibGF5b3V0LmMub3JpZwkyMDEyLTAzLTA5IDE4OjU4OjQxLjQ1MjgwNDA5MCArMDkwMAorKysr IGlidXMvdWkvZ3RrMy94a2JsYXlvdXQuYwkyMDEyLTAzLTA5IDE4OjU0OjUxLjcxODU1ODQ1NiAr MDkwMAorQEAgLTAsMCArMSwyNDQxIEBACisrLyogeGtibGF5b3V0LmMgZ2VuZXJhdGVkIGJ5IHZh bGFjIDAuMTUuMSwgdGhlIFZhbGEgY29tcGlsZXIKKysgKiBnZW5lcmF0ZWQgZnJvbSB4a2JsYXlv dXQudmFsYSwgZG8gbm90IG1vZGlmeSAqLworKworKy8qIHZpbTpzZXQgZXQgc3RzPTQgc3c9NDoK KysgKgorKyAqIGlidXMgLSBUaGUgSW5wdXQgQnVzCisrICoKKysgKiBDb3B5cmlnaHQgMjAxMiBS ZWQgSGF0LCBJbmMuCisrICogQ29weXJpZ2h0KGMpIDIwMTIgUGVuZyBIdWFuZyA8c2hhd24ucC5o dWFuZ0BnbWFpbC5jb20+CisrICogQ29weXJpZ2h0KGMpIDIwMTIgVGFrYW8gRnVqaXdhcmEgPHRm dWppd2FyQHJlZGhhdC5jb20+CisrICoKKysgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisrICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorKyAqIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorKyAqCisrICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisrICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKysgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisrICogR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisrICoKKysgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisrICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUKKysgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj ZSwgU3VpdGUgMzMwLAorKyAqIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKyAqLworKwor KyNpbmNsdWRlIDxnbGliLmg+CisrI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisrI2luY2x1ZGUg PHN0ZGxpYi5oPgorKyNpbmNsdWRlIDxzdHJpbmcuaD4KKysjaW5jbHVkZSA8aWJ1cy5oPgorKyNp bmNsdWRlIDxzdGRpby5oPgorKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorKyNpbmNsdWRlIDxn b2JqZWN0L2d2YWx1ZWNvbGxlY3Rvci5oPgorKworKworKyNkZWZpbmUgVFlQRV9YS0JfTEFZT1VU ICh4a2JfbGF5b3V0X2dldF90eXBlICgpKQorKyNkZWZpbmUgWEtCX0xBWU9VVChvYmopIChHX1RZ UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFRZUEVfWEtCX0xBWU9VVCwgWEtCTGF5b3V0 KSkKKysjZGVmaW5lIFhLQl9MQVlPVVRfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf Q0FTVCAoKGtsYXNzKSwgVFlQRV9YS0JfTEFZT1VULCBYS0JMYXlvdXRDbGFzcykpCisrI2RlZmlu ZSBJU19YS0JfTEFZT1VUKG9iaikgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwg VFlQRV9YS0JfTEFZT1VUKSkKKysjZGVmaW5lIElTX1hLQl9MQVlPVVRfQ0xBU1Moa2xhc3MpIChH X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgVFlQRV9YS0JfTEFZT1VUKSkKKysjZGVm aW5lIFhLQl9MQVlPVVRfR0VUX0NMQVNTKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mg KChvYmopLCBUWVBFX1hLQl9MQVlPVVQsIFhLQkxheW91dENsYXNzKSkKKysKKyt0eXBlZGVmIHN0 cnVjdCBfWEtCTGF5b3V0IFhLQkxheW91dDsKKyt0eXBlZGVmIHN0cnVjdCBfWEtCTGF5b3V0Q2xh c3MgWEtCTGF5b3V0Q2xhc3M7CisrdHlwZWRlZiBzdHJ1Y3QgX1hLQkxheW91dFByaXZhdGUgWEtC TGF5b3V0UHJpdmF0ZTsKKysjZGVmaW5lIF9nX2ZyZWUwKHZhcikgKHZhciA9IChnX2ZyZWUgKHZh ciksIE5VTEwpKQorKyNkZWZpbmUgX2dfb2JqZWN0X3VucmVmMCh2YXIpICgodmFyID09IE5VTEwp ID8gTlVMTCA6ICh2YXIgPSAoZ19vYmplY3RfdW5yZWYgKHZhciksIE5VTEwpKSkKKysjZGVmaW5l IF9nX3ZhcmlhbnRfdW5yZWYwKHZhcikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZhciA9IChn X3ZhcmlhbnRfdW5yZWYgKHZhciksIE5VTEwpKSkKKysjZGVmaW5lIF9nX2Vycm9yX2ZyZWUwKHZh cikgKCh2YXIgPT0gTlVMTCkgPyBOVUxMIDogKHZhciA9IChnX2Vycm9yX2ZyZWUgKHZhciksIE5V TEwpKSkKKyt0eXBlZGVmIHN0cnVjdCBfUGFyYW1TcGVjWEtCTGF5b3V0IFBhcmFtU3BlY1hLQkxh eW91dDsKKysKKytzdHJ1Y3QgX1hLQkxheW91dCB7CisrCUdUeXBlSW5zdGFuY2UgcGFyZW50X2lu c3RhbmNlOworKwl2b2xhdGlsZSBpbnQgcmVmX2NvdW50OworKwlYS0JMYXlvdXRQcml2YXRlICog cHJpdjsKKyt9OworKworK3N0cnVjdCBfWEtCTGF5b3V0Q2xhc3MgeworKwlHVHlwZUNsYXNzIHBh cmVudF9jbGFzczsKKysJdm9pZCAoKmZpbmFsaXplKSAoWEtCTGF5b3V0ICpzZWxmKTsKKyt9Owor KworK3N0cnVjdCBfWEtCTGF5b3V0UHJpdmF0ZSB7CisrCWdjaGFyKiBtX3hrYl9jb21tYW5kOwor KwlJQnVzQ29uZmlnKiBtX2NvbmZpZzsKKysJZ2NoYXIqKiBtX3hrYl9sYXRpbl9sYXlvdXRzOwor KwlnaW50IG1feGtiX2xhdGluX2xheW91dHNfbGVuZ3RoMTsKKysJZ2ludCBfbV94a2JfbGF0aW5f bGF5b3V0c19zaXplXzsKKysJR1BpZCBtX3hrYl9waWQ7CisrCUdQaWQgbV94bW9kbWFwX3BpZDsK KysJZ2NoYXIqIG1feG1vZG1hcF9jb21tYW5kOworKwlnYm9vbGVhbiBtX3VzZV94bW9kbWFwOwor KwlnY2hhcioqIG1feG1vZG1hcF9rbm93bl9maWxlczsKKysJZ2ludCBtX3htb2RtYXBfa25vd25f ZmlsZXNfbGVuZ3RoMTsKKysJZ2ludCBfbV94bW9kbWFwX2tub3duX2ZpbGVzX3NpemVfOworKwln Y2hhciogbV9kZWZhdWx0X2xheW91dDsKKysJZ2NoYXIqIG1fZGVmYXVsdF92YXJpYW50OworKwln Y2hhciogbV9kZWZhdWx0X29wdGlvbjsKKyt9OworKworK3N0cnVjdCBfUGFyYW1TcGVjWEtCTGF5 b3V0IHsKKysJR1BhcmFtU3BlYyBwYXJlbnRfaW5zdGFuY2U7CisrfTsKKysKKysKKytzdGF0aWMg Z3BvaW50ZXIgeGtiX2xheW91dF9wYXJlbnRfY2xhc3MgPSBOVUxMOworKworK2dwb2ludGVyIHhr Yl9sYXlvdXRfcmVmIChncG9pbnRlciBpbnN0YW5jZSk7Cisrdm9pZCB4a2JfbGF5b3V0X3VucmVm IChncG9pbnRlciBpbnN0YW5jZSk7CisrR1BhcmFtU3BlYyogcGFyYW1fc3BlY194a2JfbGF5b3V0 IChjb25zdCBnY2hhciogbmFtZSwgY29uc3QgZ2NoYXIqIG5pY2ssIGNvbnN0IGdjaGFyKiBibHVy YiwgR1R5cGUgb2JqZWN0X3R5cGUsIEdQYXJhbUZsYWdzIGZsYWdzKTsKKyt2b2lkIHZhbHVlX3Nl dF94a2JfbGF5b3V0IChHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB2X29iamVjdCk7Cisrdm9pZCB2 YWx1ZV90YWtlX3hrYl9sYXlvdXQgKEdWYWx1ZSogdmFsdWUsIGdwb2ludGVyIHZfb2JqZWN0KTsK KytncG9pbnRlciB2YWx1ZV9nZXRfeGtiX2xheW91dCAoY29uc3QgR1ZhbHVlKiB2YWx1ZSk7Cisr R1R5cGUgeGtiX2xheW91dF9nZXRfdHlwZSAodm9pZCkgR19HTlVDX0NPTlNUOworKyNkZWZpbmUg WEtCX0xBWU9VVF9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgo byksIFRZUEVfWEtCX0xBWU9VVCwgWEtCTGF5b3V0UHJpdmF0ZSkpCisrZW51bSAgeworKwlYS0Jf TEFZT1VUX0RVTU1ZX1BST1BFUlRZCisrfTsKKytYS0JMYXlvdXQqIHhrYl9sYXlvdXRfbmV3IChJ QnVzQ29uZmlnKiBjb25maWcpOworK1hLQkxheW91dCogeGtiX2xheW91dF9jb25zdHJ1Y3QgKEdU eXBlIG9iamVjdF90eXBlLCBJQnVzQ29uZmlnKiBjb25maWcpOworK3N0YXRpYyB2b2lkIF92YWxh X2FycmF5X2FkZDIwIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2No YXIqIHZhbHVlKTsKKytzdGF0aWMgZ2NoYXIqIHhrYl9sYXlvdXRfZ2V0X291dHB1dF9mcm9tX2Nt ZGxpbmUgKFhLQkxheW91dCogc2VsZiwgY29uc3QgZ2NoYXIqIGFyZywgY29uc3QgZ2NoYXIqIGVs ZW1lbnQpOworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDIxIChnY2hhcioqKiBhcnJheSwg aW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKKytzdGF0aWMgdm9pZCBfdmFs YV9hcnJheV9hZGQyMiAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdj aGFyKiB2YWx1ZSk7Cisrc3RhdGljIHZvaWQgeGtiX2xheW91dF9zZXRfbGF5b3V0X2NiIChYS0JM YXlvdXQqIHNlbGYsIEdQaWQgcGlkLCBnaW50IHN0YXR1cyk7Cisrdm9pZCB4a2JfbGF5b3V0X3Nl dF94bW9kbWFwIChYS0JMYXlvdXQqIHNlbGYpOworK3N0YXRpYyB2b2lkIHhrYl9sYXlvdXRfc2V0 X3htb2RtYXBfY2IgKFhLQkxheW91dCogc2VsZiwgR1BpZCBwaWQsIGdpbnQgc3RhdHVzKTsKKytz dGF0aWMgZ2NoYXIqIHhrYl9sYXlvdXRfZ2V0X2Z1bGxwYXRoIChYS0JMYXlvdXQqIHNlbGYsIGNv bnN0IGdjaGFyKiBjb21tYW5kKTsKKytzdGF0aWMgZ2NoYXIqKiB4a2JfbGF5b3V0X2dldF94a2Jf Z3JvdXBfbGF5b3V0IChYS0JMYXlvdXQqIHNlbGYsIGNvbnN0IGdjaGFyKiBsYXlvdXQsIGNvbnN0 IGdjaGFyKiB2YXJpYW50LCBnaW50IGxheW91dHNfbWF4X2xlbmd0aCwgaW50KiByZXN1bHRfbGVu Z3RoMSk7CisrZ2NoYXIqKiB4a2JfbGF5b3V0X2dldF92YXJpYW50X2Zyb21fbGF5b3V0IChYS0JM YXlvdXQqIHNlbGYsIGNvbnN0IGdjaGFyKiBsYXlvdXQsIGludCogcmVzdWx0X2xlbmd0aDEpOwor K2djaGFyKiogeGtiX2xheW91dF9nZXRfb3B0aW9uX2Zyb21fbGF5b3V0IChYS0JMYXlvdXQqIHNl bGYsIGNvbnN0IGdjaGFyKiBsYXlvdXQsIGludCogcmVzdWx0X2xlbmd0aDEpOworK2djaGFyKiB4 a2JfbGF5b3V0X2dldF9sYXlvdXQgKFhLQkxheW91dCogc2VsZik7CisrZ2NoYXIqIHhrYl9sYXlv dXRfZ2V0X3ZhcmlhbnQgKFhLQkxheW91dCogc2VsZik7CisrZ2NoYXIqIHhrYl9sYXlvdXRfZ2V0 X29wdGlvbiAoWEtCTGF5b3V0KiBzZWxmKTsKKytnaW50KiB4a2JfbGF5b3V0X3NldF9sYXlvdXQg KFhLQkxheW91dCogc2VsZiwgY29uc3QgZ2NoYXIqIF9sYXlvdXQsIGNvbnN0IGdjaGFyKiBfdmFy aWFudCwgY29uc3QgZ2NoYXIqIF9vcHRpb24sIGludCogcmVzdWx0X2xlbmd0aDEpOworK3N0YXRp YyBnYm9vbGVhbiBfdmFsYV9zdHJpbmdfYXJyYXlfY29udGFpbnMgKGdjaGFyKiogc3RhY2ssIGlu dCBzdGFja19sZW5ndGgsIGdjaGFyKiBuZWVkbGUpOworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5 X2FkZDIzIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZh bHVlKTsKKytzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQyNCAoZ2NoYXIqKiogYXJyYXksIGlu dCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Cisrc3RhdGljIHZvaWQgX3ZhbGFf YXJyYXlfYWRkMjUgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hh ciogdmFsdWUpOworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDI2IChnY2hhcioqKiBhcnJh eSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsKKytzdGF0aWMgdm9pZCBf dmFsYV9hcnJheV9hZGQyNyAoZ2NoYXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUs IGdjaGFyKiB2YWx1ZSk7Cisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMjggKGdjaGFyKioq IGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpOworK3N0YXRpYyB2 b2lkIF92YWxhX2FycmF5X2FkZDI5IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCog c2l6ZSwgZ2NoYXIqIHZhbHVlKTsKKytzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9hZGQzMCAoZ2No YXIqKiogYXJyYXksIGludCogbGVuZ3RoLCBpbnQqIHNpemUsIGdjaGFyKiB2YWx1ZSk7Cisrc3Rh dGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMzEgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwg aW50KiBzaXplLCBnY2hhciogdmFsdWUpOworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2FkZDMy IChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZhbHVlKTsK KytzdGF0aWMgdm9pZCBfeGtiX2xheW91dF9zZXRfbGF5b3V0X2NiX2djaGlsZF93YXRjaF9mdW5j IChHUGlkIHBpZCwgZ2ludCBzdGF0dXMsIGdwb2ludGVyIHNlbGYpOworK3N0YXRpYyB2b2lkIF94 a2JfbGF5b3V0X3NldF94bW9kbWFwX2NiX2djaGlsZF93YXRjaF9mdW5jIChHUGlkIHBpZCwgZ2lu dCBzdGF0dXMsIGdwb2ludGVyIHNlbGYpOworK3ZvaWQgeGtiX2xheW91dF9yZXNldF9sYXlvdXQg KFhLQkxheW91dCogc2VsZik7Cisrc3RhdGljIHZvaWQgeGtiX2xheW91dF9maW5hbGl6ZSAoWEtC TGF5b3V0KiBvYmopOworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5X2Rlc3Ryb3kgKGdwb2ludGVy IGFycmF5LCBnaW50IGFycmF5X2xlbmd0aCwgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9mdW5jKTsK KytzdGF0aWMgdm9pZCBfdmFsYV9hcnJheV9mcmVlIChncG9pbnRlciBhcnJheSwgZ2ludCBhcnJh eV9sZW5ndGgsIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3lfZnVuYyk7Cisrc3RhdGljIGdpbnQgX3Zh bGFfYXJyYXlfbGVuZ3RoIChncG9pbnRlciBhcnJheSk7CisrCisrCisrc3RhdGljIGdwb2ludGVy IF9nX29iamVjdF9yZWYwIChncG9pbnRlciBzZWxmKSB7CisrCXJldHVybiBzZWxmID8gZ19vYmpl Y3RfcmVmIChzZWxmKSA6IE5VTEw7CisrfQorKworKworK3N0YXRpYyB2b2lkIF92YWxhX2FycmF5 X2FkZDIwIChnY2hhcioqKiBhcnJheSwgaW50KiBsZW5ndGgsIGludCogc2l6ZSwgZ2NoYXIqIHZh bHVlKSB7CisrCWlmICgoKmxlbmd0aCkgPT0gKCpzaXplKSkgeworKwkJKnNpemUgPSAoKnNpemUp ID8gKDIgKiAoKnNpemUpKSA6IDQ7CisrCQkqYXJyYXkgPSBnX3JlbmV3IChnY2hhciosICphcnJh eSwgKCpzaXplKSArIDEpOworKwl9CisrCSgqYXJyYXkpWygqbGVuZ3RoKSsrXSA9IHZhbHVlOwor KwkoKmFycmF5KVsqbGVuZ3RoXSA9IE5VTEw7CisrfQorKworKworK1hLQkxheW91dCogeGtiX2xh eW91dF9jb25zdHJ1Y3QgKEdUeXBlIG9iamVjdF90eXBlLCBJQnVzQ29uZmlnKiBjb25maWcpIHsK KysJWEtCTGF5b3V0KiBzZWxmID0gTlVMTDsKKysJSUJ1c0NvbmZpZyogX3RtcDFfOworKwlJQnVz Q29uZmlnKiBfdG1wMl87CisrCUlCdXNDb25maWcqIF90bXAzXzsKKysJc2VsZiA9IChYS0JMYXlv dXQqKSBnX3R5cGVfY3JlYXRlX2luc3RhbmNlIChvYmplY3RfdHlwZSk7CisrCWlmICghSEFWRV9J QlVTX1hLQikgeworKwkJZ2NoYXIqIF90bXAwXzsKKysJCV90bXAwXyA9IGdfc3RyZHVwICgic2V0 eGtibWFwIik7CisrCQlfZ19mcmVlMCAoc2VsZi0+cHJpdi0+bV94a2JfY29tbWFuZCk7CisrCQlz ZWxmLT5wcml2LT5tX3hrYl9jb21tYW5kID0gX3RtcDBfOworKwl9CisrCV90bXAxXyA9IGNvbmZp ZzsKKysJX3RtcDJfID0gX2dfb2JqZWN0X3JlZjAgKF90bXAxXyk7CisrCV9nX29iamVjdF91bnJl ZjAgKHNlbGYtPnByaXYtPm1fY29uZmlnKTsKKysJc2VsZi0+cHJpdi0+bV9jb25maWcgPSBfdG1w Ml87CisrCV90bXAzXyA9IGNvbmZpZzsKKysJaWYgKF90bXAzXyAhPSBOVUxMKSB7CisrCQlJQnVz Q29uZmlnKiBfdG1wNF87CisrCQlHVmFyaWFudCogX3RtcDVfID0gTlVMTDsKKysJCUdWYXJpYW50 KiB2YWx1ZTsKKysJCWdib29sZWFuIF90bXAyMV87CisrCQlfdG1wNF8gPSBjb25maWc7CisrCQlf dG1wNV8gPSBpYnVzX2NvbmZpZ19nZXRfdmFsdWUgKF90bXA0XywgImdlbmVyYWwiLCAieGtiX2xh dGluX2xheW91dHMiKTsKKysJCXZhbHVlID0gX3RtcDVfOworKwkJeworKwkJCWdpbnQgaTsKKysJ CQlpID0gMDsKKysJCQl7CisrCQkJCWdib29sZWFuIF90bXA2XzsKKysJCQkJX3RtcDZfID0gVFJV RTsKKysJCQkJd2hpbGUgKFRSVUUpIHsKKysJCQkJCWdib29sZWFuIF90bXA3XzsKKysJCQkJCWdi b29sZWFuIF90bXA5XyA9IEZBTFNFOworKwkJCQkJR1ZhcmlhbnQqIF90bXAxMF87CisrCQkJCQln Ym9vbGVhbiBfdG1wMTRfOworKwkJCQkJZ2NoYXIqKiBfdG1wMTVfOworKwkJCQkJZ2ludCBfdG1w MTVfX2xlbmd0aDE7CisrCQkJCQlHVmFyaWFudCogX3RtcDE2XzsKKysJCQkJCWdpbnQgX3RtcDE3 XzsKKysJCQkJCUdWYXJpYW50KiBfdG1wMThfID0gTlVMTDsKKysJCQkJCUdWYXJpYW50KiBfdG1w MTlfOworKwkJCQkJZ2NoYXIqIF90bXAyMF8gPSBOVUxMOworKwkJCQkJX3RtcDdfID0gX3RtcDZf OworKwkJCQkJaWYgKCFfdG1wN18pIHsKKysJCQkJCQlnaW50IF90bXA4XzsKKysJCQkJCQlfdG1w OF8gPSBpOworKwkJCQkJCWkgPSBfdG1wOF8gKyAxOworKwkJCQkJfQorKwkJCQkJX3RtcDZfID0g RkFMU0U7CisrCQkJCQlfdG1wMTBfID0gdmFsdWU7CisrCQkJCQlpZiAoX3RtcDEwXyAhPSBOVUxM KSB7CisrCQkJCQkJZ2ludCBfdG1wMTFfOworKwkJCQkJCUdWYXJpYW50KiBfdG1wMTJfOworKwkJ CQkJCWdzaXplIF90bXAxM18gPSAwVUw7CisrCQkJCQkJX3RtcDExXyA9IGk7CisrCQkJCQkJX3Rt cDEyXyA9IHZhbHVlOworKwkJCQkJCV90bXAxM18gPSBnX3ZhcmlhbnRfbl9jaGlsZHJlbiAoX3Rt cDEyXyk7CisrCQkJCQkJX3RtcDlfID0gKChnc2l6ZSkgX3RtcDExXykgPCBfdG1wMTNfOworKwkJ CQkJfSBlbHNlIHsKKysJCQkJCQlfdG1wOV8gPSBGQUxTRTsKKysJCQkJCX0KKysJCQkJCV90bXAx NF8gPSBfdG1wOV87CisrCQkJCQlpZiAoIV90bXAxNF8pIHsKKysJCQkJCQlicmVhazsKKysJCQkJ CX0KKysJCQkJCV90bXAxNV8gPSBzZWxmLT5wcml2LT5tX3hrYl9sYXRpbl9sYXlvdXRzOworKwkJ CQkJX3RtcDE1X19sZW5ndGgxID0gc2VsZi0+cHJpdi0+bV94a2JfbGF0aW5fbGF5b3V0c19sZW5n dGgxOworKwkJCQkJX3RtcDE2XyA9IHZhbHVlOworKwkJCQkJX3RtcDE3XyA9IGk7CisrCQkJCQlf dG1wMThfID0gZ192YXJpYW50X2dldF9jaGlsZF92YWx1ZSAoX3RtcDE2XywgKGdzaXplKSBfdG1w MTdfKTsKKysJCQkJCV90bXAxOV8gPSBfdG1wMThfOworKwkJCQkJX3RtcDIwXyA9IGdfdmFyaWFu dF9kdXBfc3RyaW5nIChfdG1wMTlfLCBOVUxMKTsKKysJCQkJCV92YWxhX2FycmF5X2FkZDIwICgm c2VsZi0+cHJpdi0+bV94a2JfbGF0aW5fbGF5b3V0cywgJnNlbGYtPnByaXYtPm1feGtiX2xhdGlu X2xheW91dHNfbGVuZ3RoMSwgJnNlbGYtPnByaXYtPl9tX3hrYl9sYXRpbl9sYXlvdXRzX3NpemVf LCBfdG1wMjBfKTsKKysJCQkJCV9nX3ZhcmlhbnRfdW5yZWYwIChfdG1wMTlfKTsKKysJCQkJfQor KwkJCX0KKysJCX0KKysJCV90bXAyMV8gPSBzZWxmLT5wcml2LT5tX3VzZV94bW9kbWFwOworKwkJ aWYgKF90bXAyMV8pIHsKKysJCQlJQnVzQ29uZmlnKiBfdG1wMjJfOworKwkJCUdWYXJpYW50KiBf dG1wMjNfID0gTlVMTDsKKysJCQlHVmFyaWFudCogX3RtcDI0XzsKKysJCQlnYm9vbGVhbiBfdG1w MjVfID0gRkFMU0U7CisrCQkJX3RtcDIyXyA9IGNvbmZpZzsKKysJCQlfdG1wMjNfID0gaWJ1c19j b25maWdfZ2V0X3ZhbHVlIChfdG1wMjJfLCAiZ2VuZXJhbCIsICJ1c2VfeG1vZG1hcCIpOworKwkJ CV90bXAyNF8gPSBfdG1wMjNfOworKwkJCV90bXAyNV8gPSBnX3ZhcmlhbnRfZ2V0X2Jvb2xlYW4g KF90bXAyNF8pOworKwkJCXNlbGYtPnByaXYtPm1fdXNlX3htb2RtYXAgPSBfdG1wMjVfOworKwkJ CV9nX3ZhcmlhbnRfdW5yZWYwIChfdG1wMjRfKTsKKysJCX0KKysJCV9nX3ZhcmlhbnRfdW5yZWYw ICh2YWx1ZSk7CisrCX0KKysJcmV0dXJuIHNlbGY7CisrfQorKworKworK1hLQkxheW91dCogeGti X2xheW91dF9uZXcgKElCdXNDb25maWcqIGNvbmZpZykgeworKwlyZXR1cm4geGtiX2xheW91dF9j b25zdHJ1Y3QgKFRZUEVfWEtCX0xBWU9VVCwgY29uZmlnKTsKKyt9CisrCisrCisrc3RhdGljIHZv aWQgX3ZhbGFfYXJyYXlfYWRkMjEgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBz aXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7CisrCQkq c2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJCSphcnJheSA9IGdfcmVuZXcg KGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJKCphcnJheSlbKCpsZW5ndGgp KytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKKyt9CisrCisrCisrc3Rh dGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMjIgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwg aW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7 CisrCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJCSphcnJheSA9IGdf cmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJKCphcnJheSlbKCps ZW5ndGgpKytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKKyt9CisrCisr Cisrc3RhdGljIGdjaGFyKiBzdHJpbmdfc2xpY2UgKGNvbnN0IGdjaGFyKiBzZWxmLCBnbG9uZyBz dGFydCwgZ2xvbmcgZW5kKSB7CisrCWdjaGFyKiByZXN1bHQgPSBOVUxMOworKwlnaW50IF90bXAw XzsKKysJZ2ludCBfdG1wMV87CisrCWdsb25nIHN0cmluZ19sZW5ndGg7CisrCWdsb25nIF90bXAy XzsKKysJZ2xvbmcgX3RtcDVfOworKwlnYm9vbGVhbiBfdG1wOF8gPSBGQUxTRTsKKysJZ2xvbmcg X3RtcDlfOworKwlnYm9vbGVhbiBfdG1wMTJfOworKwlnYm9vbGVhbiBfdG1wMTNfID0gRkFMU0U7 CisrCWdsb25nIF90bXAxNF87CisrCWdib29sZWFuIF90bXAxN187CisrCWdsb25nIF90bXAxOF87 CisrCWdsb25nIF90bXAxOV87CisrCWdsb25nIF90bXAyMF87CisrCWdsb25nIF90bXAyMV87Cisr CWdsb25nIF90bXAyMl87CisrCWdjaGFyKiBfdG1wMjNfID0gTlVMTDsKKysJZ19yZXR1cm5fdmFs X2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCwgTlVMTCk7CisrCV90bXAwXyA9IHN0cmxlbiAoc2VsZik7 CisrCV90bXAxXyA9IF90bXAwXzsKKysJc3RyaW5nX2xlbmd0aCA9IChnbG9uZykgX3RtcDFfOwor KwlfdG1wMl8gPSBzdGFydDsKKysJaWYgKF90bXAyXyA8ICgoZ2xvbmcpIDApKSB7CisrCQlnbG9u ZyBfdG1wM187CisrCQlnbG9uZyBfdG1wNF87CisrCQlfdG1wM18gPSBzdHJpbmdfbGVuZ3RoOwor KwkJX3RtcDRfID0gc3RhcnQ7CisrCQlzdGFydCA9IF90bXAzXyArIF90bXA0XzsKKysJfQorKwlf dG1wNV8gPSBlbmQ7CisrCWlmIChfdG1wNV8gPCAoKGdsb25nKSAwKSkgeworKwkJZ2xvbmcgX3Rt cDZfOworKwkJZ2xvbmcgX3RtcDdfOworKwkJX3RtcDZfID0gc3RyaW5nX2xlbmd0aDsKKysJCV90 bXA3XyA9IGVuZDsKKysJCWVuZCA9IF90bXA2XyArIF90bXA3XzsKKysJfQorKwlfdG1wOV8gPSBz dGFydDsKKysJaWYgKF90bXA5XyA+PSAoKGdsb25nKSAwKSkgeworKwkJZ2xvbmcgX3RtcDEwXzsK KysJCWdsb25nIF90bXAxMV87CisrCQlfdG1wMTBfID0gc3RhcnQ7CisrCQlfdG1wMTFfID0gc3Ry aW5nX2xlbmd0aDsKKysJCV90bXA4XyA9IF90bXAxMF8gPD0gX3RtcDExXzsKKysJfSBlbHNlIHsK KysJCV90bXA4XyA9IEZBTFNFOworKwl9CisrCV90bXAxMl8gPSBfdG1wOF87CisrCWdfcmV0dXJu X3ZhbF9pZl9mYWlsIChfdG1wMTJfLCBOVUxMKTsKKysJX3RtcDE0XyA9IGVuZDsKKysJaWYgKF90 bXAxNF8gPj0gKChnbG9uZykgMCkpIHsKKysJCWdsb25nIF90bXAxNV87CisrCQlnbG9uZyBfdG1w MTZfOworKwkJX3RtcDE1XyA9IGVuZDsKKysJCV90bXAxNl8gPSBzdHJpbmdfbGVuZ3RoOworKwkJ X3RtcDEzXyA9IF90bXAxNV8gPD0gX3RtcDE2XzsKKysJfSBlbHNlIHsKKysJCV90bXAxM18gPSBG QUxTRTsKKysJfQorKwlfdG1wMTdfID0gX3RtcDEzXzsKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwg KF90bXAxN18sIE5VTEwpOworKwlfdG1wMThfID0gc3RhcnQ7CisrCV90bXAxOV8gPSBlbmQ7Cisr CWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChfdG1wMThfIDw9IF90bXAxOV8sIE5VTEwpOworKwlfdG1w MjBfID0gc3RhcnQ7CisrCV90bXAyMV8gPSBlbmQ7CisrCV90bXAyMl8gPSBzdGFydDsKKysJX3Rt cDIzXyA9IGdfc3RybmR1cCAoKChnY2hhciopIHNlbGYpICsgX3RtcDIwXywgKGdzaXplKSAoX3Rt cDIxXyAtIF90bXAyMl8pKTsKKysJcmVzdWx0ID0gX3RtcDIzXzsKKysJcmV0dXJuIHJlc3VsdDsK Kyt9CisrCisrCisrc3RhdGljIGdjaGFyKiB4a2JfbGF5b3V0X2dldF9vdXRwdXRfZnJvbV9jbWRs aW5lIChYS0JMYXlvdXQqIHNlbGYsIGNvbnN0IGdjaGFyKiBhcmcsIGNvbnN0IGdjaGFyKiBlbGVt ZW50KSB7CisrCWdjaGFyKiByZXN1bHQgPSBOVUxMOworKwlnY2hhcioqIF90bXAwXyA9IE5VTEw7 CisrCWdjaGFyKiogZXhlY19jb21tYW5kOworKwlnaW50IGV4ZWNfY29tbWFuZF9sZW5ndGgxOwor KwlnaW50IF9leGVjX2NvbW1hbmRfc2l6ZV87CisrCWdjaGFyKiogX3RtcDFfOworKwlnaW50IF90 bXAxX19sZW5ndGgxOworKwljb25zdCBnY2hhciogX3RtcDJfOworKwlnY2hhciogX3RtcDNfOwor KwlnY2hhcioqIF90bXA0XzsKKysJZ2ludCBfdG1wNF9fbGVuZ3RoMTsKKysJY29uc3QgZ2NoYXIq IF90bXA1XzsKKysJZ2NoYXIqIF90bXA2XzsKKysJZ2NoYXIqIHN0YW5kYXJkX291dHB1dDsKKysJ Z2NoYXIqIHN0YW5kYXJkX2Vycm9yOworKwlnaW50IGV4aXRfc3RhdHVzOworKwlnY2hhciogX3Rt cDdfOworKwlnY2hhciogcmV0dmFsOworKwlnaW50IF90bXAxNV87CisrCWNvbnN0IGdjaGFyKiBf dG1wMjNfOworKwljb25zdCBnY2hhciogX3RtcDI1XzsKKysJZ2NoYXIqKiBfdG1wMjZfOworKwln Y2hhcioqIF90bXAyN18gPSBOVUxMOworKwlHRXJyb3IgKiBfaW5uZXJfZXJyb3JfID0gTlVMTDsK KysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCwgTlVMTCk7CisrCWdfcmV0dXJu X3ZhbF9pZl9mYWlsIChhcmcgIT0gTlVMTCwgTlVMTCk7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWls IChlbGVtZW50ICE9IE5VTEwsIE5VTEwpOworKwlfdG1wMF8gPSBnX25ldzAgKGdjaGFyKiwgMCAr IDEpOworKwlleGVjX2NvbW1hbmQgPSBfdG1wMF87CisrCWV4ZWNfY29tbWFuZF9sZW5ndGgxID0g MDsKKysJX2V4ZWNfY29tbWFuZF9zaXplXyA9IGV4ZWNfY29tbWFuZF9sZW5ndGgxOworKwlfdG1w MV8gPSBleGVjX2NvbW1hbmQ7CisrCV90bXAxX19sZW5ndGgxID0gZXhlY19jb21tYW5kX2xlbmd0 aDE7CisrCV90bXAyXyA9IHNlbGYtPnByaXYtPm1feGtiX2NvbW1hbmQ7CisrCV90bXAzXyA9IGdf c3RyZHVwIChfdG1wMl8pOworKwlfdmFsYV9hcnJheV9hZGQyMSAoJmV4ZWNfY29tbWFuZCwgJmV4 ZWNfY29tbWFuZF9sZW5ndGgxLCAmX2V4ZWNfY29tbWFuZF9zaXplXywgX3RtcDNfKTsKKysJX3Rt cDRfID0gZXhlY19jb21tYW5kOworKwlfdG1wNF9fbGVuZ3RoMSA9IGV4ZWNfY29tbWFuZF9sZW5n dGgxOworKwlfdG1wNV8gPSBhcmc7CisrCV90bXA2XyA9IGdfc3RyZHVwIChfdG1wNV8pOworKwlf dmFsYV9hcnJheV9hZGQyMiAoJmV4ZWNfY29tbWFuZCwgJmV4ZWNfY29tbWFuZF9sZW5ndGgxLCAm X2V4ZWNfY29tbWFuZF9zaXplXywgX3RtcDZfKTsKKysJc3RhbmRhcmRfb3V0cHV0ID0gTlVMTDsK KysJc3RhbmRhcmRfZXJyb3IgPSBOVUxMOworKwlleGl0X3N0YXR1cyA9IDA7CisrCV90bXA3XyA9 IGdfc3RyZHVwICgiIik7CisrCXJldHZhbCA9IF90bXA3XzsKKysJeworKwkJZ2NoYXIqKiBfdG1w OF87CisrCQlnaW50IF90bXA4X19sZW5ndGgxOworKwkJZ2NoYXIqIF90bXA5XyA9IE5VTEw7Cisr CQlnY2hhciogX3RtcDEwXyA9IE5VTEw7CisrCQlnaW50IF90bXAxMV8gPSAwOworKwkJX3RtcDhf ID0gZXhlY19jb21tYW5kOworKwkJX3RtcDhfX2xlbmd0aDEgPSBleGVjX2NvbW1hbmRfbGVuZ3Ro MTsKKysJCWdfc3Bhd25fc3luYyAoTlVMTCwgX3RtcDhfLCBOVUxMLCBHX1NQQVdOX1NFQVJDSF9Q QVRILCBOVUxMLCBOVUxMLCAmX3RtcDlfLCAmX3RtcDEwXywgJl90bXAxMV8sICZfaW5uZXJfZXJy b3JfKTsKKysJCV9nX2ZyZWUwIChzdGFuZGFyZF9vdXRwdXQpOworKwkJc3RhbmRhcmRfb3V0cHV0 ID0gX3RtcDlfOworKwkJX2dfZnJlZTAgKHN0YW5kYXJkX2Vycm9yKTsKKysJCXN0YW5kYXJkX2Vy cm9yID0gX3RtcDEwXzsKKysJCWV4aXRfc3RhdHVzID0gX3RtcDExXzsKKysJCWlmIChfaW5uZXJf ZXJyb3JfICE9IE5VTEwpIHsKKysJCQlpZiAoX2lubmVyX2Vycm9yXy0+ZG9tYWluID09IEdfU1BB V05fRVJST1IpIHsKKysJCQkJZ290byBfX2NhdGNoM19nX3NwYXduX2Vycm9yOworKwkJCX0KKysJ CQlfZ19mcmVlMCAocmV0dmFsKTsKKysJCQlfZ19mcmVlMCAoc3RhbmRhcmRfZXJyb3IpOworKwkJ CV9nX2ZyZWUwIChzdGFuZGFyZF9vdXRwdXQpOworKwkJCWV4ZWNfY29tbWFuZCA9IChfdmFsYV9h cnJheV9mcmVlIChleGVjX2NvbW1hbmQsIGV4ZWNfY29tbWFuZF9sZW5ndGgxLCAoR0Rlc3Ryb3lO b3RpZnkpIGdfZnJlZSksIE5VTEwpOworKwkJCWdfY3JpdGljYWwgKCJmaWxlICVzOiBsaW5lICVk OiB1bmV4cGVjdGVkIGVycm9yOiAlcyAoJXMsICVkKSIsIF9fRklMRV9fLCBfX0xJTkVfXywgX2lu bmVyX2Vycm9yXy0+bWVzc2FnZSwgZ19xdWFya190b19zdHJpbmcgKF9pbm5lcl9lcnJvcl8tPmRv bWFpbiksIF9pbm5lcl9lcnJvcl8tPmNvZGUpOworKwkJCWdfY2xlYXJfZXJyb3IgKCZfaW5uZXJf ZXJyb3JfKTsKKysJCQlyZXR1cm4gTlVMTDsKKysJCX0KKysJfQorKwlnb3RvIF9fZmluYWxseTM7 CisrCV9fY2F0Y2gzX2dfc3Bhd25fZXJyb3I6CisrCXsKKysJCUdFcnJvciogZXJyID0gTlVMTDsK KysJCUZJTEUqIF90bXAxMl87CisrCQlHRXJyb3IqIF90bXAxM187CisrCQljb25zdCBnY2hhciog X3RtcDE0XzsKKysJCWVyciA9IF9pbm5lcl9lcnJvcl87CisrCQlfaW5uZXJfZXJyb3JfID0gTlVM TDsKKysJCV90bXAxMl8gPSBzdGRlcnI7CisrCQlfdG1wMTNfID0gZXJyOworKwkJX3RtcDE0XyA9 IF90bXAxM18tPm1lc3NhZ2U7CisrCQlmcHJpbnRmIChfdG1wMTJfLCAiSUJVU19FUlJPUjogJXNc biIsIF90bXAxNF8pOworKwkJX2dfZXJyb3JfZnJlZTAgKGVycik7CisrCX0KKysJX19maW5hbGx5 MzoKKysJaWYgKF9pbm5lcl9lcnJvcl8gIT0gTlVMTCkgeworKwkJX2dfZnJlZTAgKHJldHZhbCk7 CisrCQlfZ19mcmVlMCAoc3RhbmRhcmRfZXJyb3IpOworKwkJX2dfZnJlZTAgKHN0YW5kYXJkX291 dHB1dCk7CisrCQlleGVjX2NvbW1hbmQgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoZXhlY19jb21tYW5k LCBleGVjX2NvbW1hbmRfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsK KysJCWdfY3JpdGljYWwgKCJmaWxlICVzOiBsaW5lICVkOiB1bmNhdWdodCBlcnJvcjogJXMgKCVz LCAlZCkiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9pbm5lcl9lcnJvcl8tPm1lc3NhZ2UsIGdfcXVh cmtfdG9fc3RyaW5nIChfaW5uZXJfZXJyb3JfLT5kb21haW4pLCBfaW5uZXJfZXJyb3JfLT5jb2Rl KTsKKysJCWdfY2xlYXJfZXJyb3IgKCZfaW5uZXJfZXJyb3JfKTsKKysJCXJldHVybiBOVUxMOwor Kwl9CisrCV90bXAxNV8gPSBleGl0X3N0YXR1czsKKysJaWYgKF90bXAxNV8gIT0gMCkgeworKwkJ Y29uc3QgZ2NoYXIqIF90bXAxNl87CisrCQlnY2hhciogX3RtcDE3XzsKKysJCWdjaGFyKiBfdG1w MThfOworKwkJY29uc3QgZ2NoYXIqIF90bXAxOV87CisrCQlGSUxFKiBfdG1wMjFfOworKwkJY29u c3QgZ2NoYXIqIF90bXAyMl87CisrCQlfdG1wMTZfID0gc3RhbmRhcmRfZXJyb3I7CisrCQlfdG1w MTdfID0gZ19zdHJkdXAgKF90bXAxNl8pOworKwkJX3RtcDE4XyA9IF90bXAxN187CisrCQlfdG1w MTlfID0gX3RtcDE4XzsKKysJCWlmIChfdG1wMTlfID09IE5VTEwpIHsKKysJCQlnY2hhciogX3Rt cDIwXzsKKysJCQlfdG1wMjBfID0gZ19zdHJkdXAgKCIiKTsKKysJCQlfZ19mcmVlMCAoX3RtcDE4 Xyk7CisrCQkJX3RtcDE4XyA9IF90bXAyMF87CisrCQl9CisrCQlfdG1wMjFfID0gc3RkZXJyOwor KwkJX3RtcDIyXyA9IF90bXAxOF87CisrCQlmcHJpbnRmIChfdG1wMjFfLCAiSUJVU19FUlJPUjog JXNcbiIsIF90bXAyMl8pOworKwkJX2dfZnJlZTAgKF90bXAxOF8pOworKwl9CisrCV90bXAyM18g PSBzdGFuZGFyZF9vdXRwdXQ7CisrCWlmIChfdG1wMjNfID09IE5VTEwpIHsKKysJCWdjaGFyKiBf dG1wMjRfOworKwkJX3RtcDI0XyA9IGdfc3RyZHVwICgiIik7CisrCQlyZXN1bHQgPSBfdG1wMjRf OworKwkJX2dfZnJlZTAgKHJldHZhbCk7CisrCQlfZ19mcmVlMCAoc3RhbmRhcmRfZXJyb3IpOwor KwkJX2dfZnJlZTAgKHN0YW5kYXJkX291dHB1dCk7CisrCQlleGVjX2NvbW1hbmQgPSAoX3ZhbGFf YXJyYXlfZnJlZSAoZXhlY19jb21tYW5kLCBleGVjX2NvbW1hbmRfbGVuZ3RoMSwgKEdEZXN0cm95 Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKKysJCXJldHVybiByZXN1bHQ7CisrCX0KKysJX3RtcDI1 XyA9IHN0YW5kYXJkX291dHB1dDsKKysJX3RtcDI3XyA9IF90bXAyNl8gPSBnX3N0cnNwbGl0IChf dG1wMjVfLCAiXG4iLCAwKTsKKysJeworKwkJZ2NoYXIqKiBsaW5lX2NvbGxlY3Rpb24gPSBOVUxM OworKwkJZ2ludCBsaW5lX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IDA7CisrCQlnaW50IF9saW5lX2Nv bGxlY3Rpb25fc2l6ZV8gPSAwOworKwkJZ2ludCBsaW5lX2l0ID0gMDsKKysJCWxpbmVfY29sbGVj dGlvbiA9IF90bXAyN187CisrCQlsaW5lX2NvbGxlY3Rpb25fbGVuZ3RoMSA9IF92YWxhX2FycmF5 X2xlbmd0aCAoX3RtcDI2Xyk7CisrCQlmb3IgKGxpbmVfaXQgPSAwOyBsaW5lX2l0IDwgX3ZhbGFf YXJyYXlfbGVuZ3RoIChfdG1wMjZfKTsgbGluZV9pdCA9IGxpbmVfaXQgKyAxKSB7CisrCQkJZ2No YXIqIF90bXAyOF87CisrCQkJZ2NoYXIqIGxpbmUgPSBOVUxMOworKwkJCV90bXAyOF8gPSBnX3N0 cmR1cCAobGluZV9jb2xsZWN0aW9uW2xpbmVfaXRdKTsKKysJCQlsaW5lID0gX3RtcDI4XzsKKysJ CQl7CisrCQkJCWdib29sZWFuIF90bXAyOV8gPSBGQUxTRTsKKysJCQkJY29uc3QgZ2NoYXIqIF90 bXAzMF87CisrCQkJCWdpbnQgX3RtcDMxXzsKKysJCQkJZ2ludCBfdG1wMzJfOworKwkJCQljb25z dCBnY2hhciogX3RtcDMzXzsKKysJCQkJZ2ludCBfdG1wMzRfOworKwkJCQlnaW50IF90bXAzNV87 CisrCQkJCWdib29sZWFuIF90bXA0M187CisrCQkJCV90bXAzMF8gPSBlbGVtZW50OworKwkJCQlf dG1wMzFfID0gc3RybGVuIChfdG1wMzBfKTsKKysJCQkJX3RtcDMyXyA9IF90bXAzMV87CisrCQkJ CV90bXAzM18gPSBsaW5lOworKwkJCQlfdG1wMzRfID0gc3RybGVuIChfdG1wMzNfKTsKKysJCQkJ X3RtcDM1XyA9IF90bXAzNF87CisrCQkJCWlmIChfdG1wMzJfIDw9IF90bXAzNV8pIHsKKysJCQkJ CWNvbnN0IGdjaGFyKiBfdG1wMzZfOworKwkJCQkJY29uc3QgZ2NoYXIqIF90bXAzN187CisrCQkJ CQlnaW50IF90bXAzOF87CisrCQkJCQlnaW50IF90bXAzOV87CisrCQkJCQlnY2hhciogX3RtcDQw XyA9IE5VTEw7CisrCQkJCQlnY2hhciogX3RtcDQxXzsKKysJCQkJCWNvbnN0IGdjaGFyKiBfdG1w NDJfOworKwkJCQkJX3RtcDM2XyA9IGxpbmU7CisrCQkJCQlfdG1wMzdfID0gZWxlbWVudDsKKysJ CQkJCV90bXAzOF8gPSBzdHJsZW4gKF90bXAzN18pOworKwkJCQkJX3RtcDM5XyA9IF90bXAzOF87 CisrCQkJCQlfdG1wNDBfID0gc3RyaW5nX3NsaWNlIChfdG1wMzZfLCAoZ2xvbmcpIDAsIChnbG9u ZykgX3RtcDM5Xyk7CisrCQkJCQlfdG1wNDFfID0gX3RtcDQwXzsKKysJCQkJCV90bXA0Ml8gPSBl bGVtZW50OworKwkJCQkJX3RtcDI5XyA9IGdfc3RyY21wMCAoX3RtcDQxXywgX3RtcDQyXykgPT0g MDsKKysJCQkJCV9nX2ZyZWUwIChfdG1wNDFfKTsKKysJCQkJfSBlbHNlIHsKKysJCQkJCV90bXAy OV8gPSBGQUxTRTsKKysJCQkJfQorKwkJCQlfdG1wNDNfID0gX3RtcDI5XzsKKysJCQkJaWYgKF90 bXA0M18pIHsKKysJCQkJCWNvbnN0IGdjaGFyKiBfdG1wNDRfOworKwkJCQkJY29uc3QgZ2NoYXIq IF90bXA0NV87CisrCQkJCQlnaW50IF90bXA0Nl87CisrCQkJCQlnaW50IF90bXA0N187CisrCQkJ CQljb25zdCBnY2hhciogX3RtcDQ4XzsKKysJCQkJCWdpbnQgX3RtcDQ5XzsKKysJCQkJCWdpbnQg X3RtcDUwXzsKKysJCQkJCWdjaGFyKiBfdG1wNTFfID0gTlVMTDsKKysJCQkJCV90bXA0NF8gPSBs aW5lOworKwkJCQkJX3RtcDQ1XyA9IGVsZW1lbnQ7CisrCQkJCQlfdG1wNDZfID0gc3RybGVuIChf dG1wNDVfKTsKKysJCQkJCV90bXA0N18gPSBfdG1wNDZfOworKwkJCQkJX3RtcDQ4XyA9IGxpbmU7 CisrCQkJCQlfdG1wNDlfID0gc3RybGVuIChfdG1wNDhfKTsKKysJCQkJCV90bXA1MF8gPSBfdG1w NDlfOworKwkJCQkJX3RtcDUxXyA9IHN0cmluZ19zbGljZSAoX3RtcDQ0XywgKGdsb25nKSBfdG1w NDdfLCAoZ2xvbmcpIF90bXA1MF8pOworKwkJCQkJX2dfZnJlZTAgKHJldHZhbCk7CisrCQkJCQly ZXR2YWwgPSBfdG1wNTFfOworKwkJCQl9CisrCQkJCV9nX2ZyZWUwIChsaW5lKTsKKysJCQl9Cisr CQl9CisrCQlsaW5lX2NvbGxlY3Rpb24gPSAoX3ZhbGFfYXJyYXlfZnJlZSAobGluZV9jb2xsZWN0 aW9uLCBsaW5lX2NvbGxlY3Rpb25fbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBO VUxMKTsKKysJfQorKwlyZXN1bHQgPSByZXR2YWw7CisrCV9nX2ZyZWUwIChzdGFuZGFyZF9lcnJv cik7CisrCV9nX2ZyZWUwIChzdGFuZGFyZF9vdXRwdXQpOworKwlleGVjX2NvbW1hbmQgPSAoX3Zh bGFfYXJyYXlfZnJlZSAoZXhlY19jb21tYW5kLCBleGVjX2NvbW1hbmRfbGVuZ3RoMSwgKEdEZXN0 cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKKysJcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisr c3RhdGljIHZvaWQgeGtiX2xheW91dF9zZXRfbGF5b3V0X2NiIChYS0JMYXlvdXQqIHNlbGYsIEdQ aWQgcGlkLCBnaW50IHN0YXR1cykgeworKwlHUGlkIF90bXAwXzsKKysJR1BpZCBfdG1wMV87Cisr CUdQaWQgX3RtcDNfOworKwlnX3JldHVybl9pZl9mYWlsIChzZWxmICE9IE5VTEwpOworKwlfdG1w MF8gPSBzZWxmLT5wcml2LT5tX3hrYl9waWQ7CisrCV90bXAxXyA9IHBpZDsKKysJaWYgKF90bXAw XyAhPSBfdG1wMV8pIHsKKysJCUZJTEUqIF90bXAyXzsKKysJCV90bXAyXyA9IHN0ZGVycjsKKysJ CWZwcmludGYgKF90bXAyXywgIklCVVNfRVJST1I6IHNldF9sYXlvdXRfY2IgaGFzIGFub3RoZXIg cGlkXG4iKTsKKysJCXJldHVybjsKKysJfQorKwlfdG1wM18gPSBzZWxmLT5wcml2LT5tX3hrYl9w aWQ7CisrCWdfc3Bhd25fY2xvc2VfcGlkIChfdG1wM18pOworKwlzZWxmLT5wcml2LT5tX3hrYl9w aWQgPSAoR1BpZCkgKC0xKTsKKysJeGtiX2xheW91dF9zZXRfeG1vZG1hcCAoc2VsZik7CisrfQor KworKworK3N0YXRpYyB2b2lkIHhrYl9sYXlvdXRfc2V0X3htb2RtYXBfY2IgKFhLQkxheW91dCog c2VsZiwgR1BpZCBwaWQsIGdpbnQgc3RhdHVzKSB7CisrCUdQaWQgX3RtcDBfOworKwlHUGlkIF90 bXAxXzsKKysJR1BpZCBfdG1wM187CisrCWdfcmV0dXJuX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCk7 CisrCV90bXAwXyA9IHNlbGYtPnByaXYtPm1feG1vZG1hcF9waWQ7CisrCV90bXAxXyA9IHBpZDsK KysJaWYgKF90bXAwXyAhPSBfdG1wMV8pIHsKKysJCUZJTEUqIF90bXAyXzsKKysJCV90bXAyXyA9 IHN0ZGVycjsKKysJCWZwcmludGYgKF90bXAyXywgIklCVVNfRVJST1I6IHNldF94bW9kbWFwX2Ni IGhhcyBhbm90aGVyIHBpZFxuIik7CisrCQlyZXR1cm47CisrCX0KKysJX3RtcDNfID0gc2VsZi0+ cHJpdi0+bV94bW9kbWFwX3BpZDsKKysJZ19zcGF3bl9jbG9zZV9waWQgKF90bXAzXyk7CisrCXNl bGYtPnByaXYtPm1feG1vZG1hcF9waWQgPSAoR1BpZCkgKC0xKTsKKyt9CisrCisrCisrc3RhdGlj IGdjaGFyKiB4a2JfbGF5b3V0X2dldF9mdWxscGF0aCAoWEtCTGF5b3V0KiBzZWxmLCBjb25zdCBn Y2hhciogY29tbWFuZCkgeworKwlnY2hhciogcmVzdWx0ID0gTlVMTDsKKysJY29uc3QgZ2NoYXIq IF90bXAwXyA9IE5VTEw7CisrCWdjaGFyKiBfdG1wMV87CisrCWdjaGFyKiBlbnZwYXRoOworKwlj b25zdCBnY2hhciogX3RtcDJfOworKwlnY2hhcioqIF90bXAzXzsKKysJZ2NoYXIqKiBfdG1wNF8g PSBOVUxMOworKwlnY2hhciogX3RtcDExXzsKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHNlbGYg IT0gTlVMTCwgTlVMTCk7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChjb21tYW5kICE9IE5VTEws IE5VTEwpOworKwlfdG1wMF8gPSBnX2dldGVudiAoIlBBVEgiKTsKKysJX3RtcDFfID0gZ19zdHJk dXAgKF90bXAwXyk7CisrCWVudnBhdGggPSBfdG1wMV87CisrCV90bXAyXyA9IGVudnBhdGg7Cisr CV90bXA0XyA9IF90bXAzXyA9IGdfc3Ryc3BsaXQgKF90bXAyXywgIjoiLCAwKTsKKysJeworKwkJ Z2NoYXIqKiBkaXJfY29sbGVjdGlvbiA9IE5VTEw7CisrCQlnaW50IGRpcl9jb2xsZWN0aW9uX2xl bmd0aDEgPSAwOworKwkJZ2ludCBfZGlyX2NvbGxlY3Rpb25fc2l6ZV8gPSAwOworKwkJZ2ludCBk aXJfaXQgPSAwOworKwkJZGlyX2NvbGxlY3Rpb24gPSBfdG1wNF87CisrCQlkaXJfY29sbGVjdGlv bl9sZW5ndGgxID0gX3ZhbGFfYXJyYXlfbGVuZ3RoIChfdG1wM18pOworKwkJZm9yIChkaXJfaXQg PSAwOyBkaXJfaXQgPCBfdmFsYV9hcnJheV9sZW5ndGggKF90bXAzXyk7IGRpcl9pdCA9IGRpcl9p dCArIDEpIHsKKysJCQlnY2hhciogX3RtcDVfOworKwkJCWdjaGFyKiBkaXIgPSBOVUxMOworKwkJ CV90bXA1XyA9IGdfc3RyZHVwIChkaXJfY29sbGVjdGlvbltkaXJfaXRdKTsKKysJCQlkaXIgPSBf dG1wNV87CisrCQkJeworKwkJCQljb25zdCBnY2hhciogX3RtcDZfOworKwkJCQljb25zdCBnY2hh ciogX3RtcDdfOworKwkJCQlnY2hhciogX3RtcDhfID0gTlVMTDsKKysJCQkJZ2NoYXIqIGZpbGVw YXRoOworKwkJCQljb25zdCBnY2hhciogX3RtcDlfOworKwkJCQlnYm9vbGVhbiBfdG1wMTBfID0g RkFMU0U7CisrCQkJCV90bXA2XyA9IGRpcjsKKysJCQkJX3RtcDdfID0gY29tbWFuZDsKKysJCQkJ X3RtcDhfID0gZ19idWlsZF9maWxlbmFtZSAoX3RtcDZfLCBfdG1wN18sIE5VTEwpOworKwkJCQlm aWxlcGF0aCA9IF90bXA4XzsKKysJCQkJX3RtcDlfID0gZmlsZXBhdGg7CisrCQkJCV90bXAxMF8g PSBnX2ZpbGVfdGVzdCAoX3RtcDlfLCBHX0ZJTEVfVEVTVF9FWElTVFMpOworKwkJCQlpZiAoX3Rt cDEwXykgeworKwkJCQkJcmVzdWx0ID0gZmlsZXBhdGg7CisrCQkJCQlfZ19mcmVlMCAoZGlyKTsK KysJCQkJCWRpcl9jb2xsZWN0aW9uID0gKF92YWxhX2FycmF5X2ZyZWUgKGRpcl9jb2xsZWN0aW9u LCBkaXJfY29sbGVjdGlvbl9sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwp OworKwkJCQkJX2dfZnJlZTAgKGVudnBhdGgpOworKwkJCQkJcmV0dXJuIHJlc3VsdDsKKysJCQkJ fQorKwkJCQlfZ19mcmVlMCAoZmlsZXBhdGgpOworKwkJCQlfZ19mcmVlMCAoZGlyKTsKKysJCQl9 CisrCQl9CisrCQlkaXJfY29sbGVjdGlvbiA9IChfdmFsYV9hcnJheV9mcmVlIChkaXJfY29sbGVj dGlvbiwgZGlyX2NvbGxlY3Rpb25fbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBO VUxMKTsKKysJfQorKwlfdG1wMTFfID0gZ19zdHJkdXAgKCIiKTsKKysJcmVzdWx0ID0gX3RtcDEx XzsKKysJX2dfZnJlZTAgKGVudnBhdGgpOworKwlyZXR1cm4gcmVzdWx0OworK30KKysKKysKKytz dGF0aWMgZ2NoYXIqKiB4a2JfbGF5b3V0X2dldF94a2JfZ3JvdXBfbGF5b3V0IChYS0JMYXlvdXQq IHNlbGYsIGNvbnN0IGdjaGFyKiBsYXlvdXQsIGNvbnN0IGdjaGFyKiB2YXJpYW50LCBnaW50IGxh eW91dHNfbWF4X2xlbmd0aCwgaW50KiByZXN1bHRfbGVuZ3RoMSkgeworKwlnY2hhcioqIHJlc3Vs dCA9IE5VTEw7CisrCWdpbnQgZ3JvdXBfaWQ7CisrCWdpbnQgaTsKKysJY29uc3QgZ2NoYXIqIF90 bXAwXzsKKysJZ2NoYXIqKiBfdG1wMV87CisrCWdjaGFyKiogX3RtcDJfID0gTlVMTDsKKysJZ2No YXIqKiBsYXlvdXRzOworKwlnaW50IGxheW91dHNfbGVuZ3RoMTsKKysJZ2ludCBfbGF5b3V0c19z aXplXzsKKysJY29uc3QgZ2NoYXIqIF90bXAzXzsKKysJZ2NoYXIqKiBfdG1wNF87CisrCWdjaGFy KiogX3RtcDVfID0gTlVMTDsKKysJZ2NoYXIqKiB2YXJpYW50czsKKysJZ2ludCB2YXJpYW50c19s ZW5ndGgxOworKwlnaW50IF92YXJpYW50c19zaXplXzsKKysJZ2NoYXIqIF90bXA2XzsKKysJZ2No YXIqIGdyb3VwX2xheW91dHM7CisrCWdjaGFyKiBfdG1wN187CisrCWdjaGFyKiBncm91cF92YXJp YW50czsKKysJZ2Jvb2xlYW4gaGFzX3ZhcmlhbnQ7CisrCWdib29sZWFuIGluY2x1ZGVfa2V5bWFw OworKwljb25zdCBnY2hhciogX3RtcDYzXzsKKysJZ2Jvb2xlYW4gX3RtcDY0XzsKKysJZ2Jvb2xl YW4gX3RtcDcyXzsKKysJY29uc3QgZ2NoYXIqIF90bXA3M187CisrCWdjaGFyKiBfdG1wNzRfOwor Kwljb25zdCBnY2hhciogX3RtcDc1XzsKKysJZ2NoYXIqIF90bXA3Nl87CisrCWdpbnQgX3RtcDc3 XzsKKysJZ2NoYXIqIF90bXA3OF8gPSBOVUxMOworKwlnY2hhcioqIF90bXA3OV8gPSBOVUxMOwor KwlnY2hhcioqIF90bXA4MF87CisrCWdpbnQgX3RtcDgwX19sZW5ndGgxOworKwlnX3JldHVybl92 YWxfaWZfZmFpbCAoc2VsZiAhPSBOVUxMLCBOVUxMKTsKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwg KGxheW91dCAhPSBOVUxMLCBOVUxMKTsKKysJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHZhcmlhbnQg IT0gTlVMTCwgTlVMTCk7CisrCWdyb3VwX2lkID0gMDsKKysJaSA9IDA7CisrCV90bXAwXyA9IHNl bGYtPnByaXYtPm1fZGVmYXVsdF9sYXlvdXQ7CisrCV90bXAyXyA9IF90bXAxXyA9IGdfc3Ryc3Bs aXQgKF90bXAwXywgIiwiLCAwKTsKKysJbGF5b3V0cyA9IF90bXAyXzsKKysJbGF5b3V0c19sZW5n dGgxID0gX3ZhbGFfYXJyYXlfbGVuZ3RoIChfdG1wMV8pOworKwlfbGF5b3V0c19zaXplXyA9IGxh eW91dHNfbGVuZ3RoMTsKKysJX3RtcDNfID0gc2VsZi0+cHJpdi0+bV9kZWZhdWx0X3ZhcmlhbnQ7 CisrCV90bXA1XyA9IF90bXA0XyA9IGdfc3Ryc3BsaXQgKF90bXAzXywgIiwiLCAwKTsKKysJdmFy aWFudHMgPSBfdG1wNV87CisrCXZhcmlhbnRzX2xlbmd0aDEgPSBfdmFsYV9hcnJheV9sZW5ndGgg KF90bXA0Xyk7CisrCV92YXJpYW50c19zaXplXyA9IHZhcmlhbnRzX2xlbmd0aDE7CisrCV90bXA2 XyA9IGdfc3RyZHVwICgiIik7CisrCWdyb3VwX2xheW91dHMgPSBfdG1wNl87CisrCV90bXA3XyA9 IGdfc3RyZHVwICgiIik7CisrCWdyb3VwX3ZhcmlhbnRzID0gX3RtcDdfOworKwloYXNfdmFyaWFu dCA9IEZBTFNFOworKwlpbmNsdWRlX2tleW1hcCA9IEZBTFNFOworKwl7CisrCQlnYm9vbGVhbiBf dG1wOF87CisrCQlpID0gMDsKKysJCV90bXA4XyA9IFRSVUU7CisrCQl3aGlsZSAoVFJVRSkgewor KwkJCWdib29sZWFuIF90bXA5XzsKKysJCQlnaW50IF90bXAxMV87CisrCQkJZ2NoYXIqKiBfdG1w MTJfOworKwkJCWdpbnQgX3RtcDEyX19sZW5ndGgxOworKwkJCWdpbnQgX3RtcDEzXzsKKysJCQln aW50IF90bXAxNF87CisrCQkJZ2ludCBfdG1wMTVfOworKwkJCWdpbnQgX3RtcDI1XzsKKysJCQln Y2hhcioqIF90bXAyNl87CisrCQkJZ2ludCBfdG1wMjZfX2xlbmd0aDE7CisrCQkJZ2Jvb2xlYW4g X3RtcDM5XyA9IEZBTFNFOworKwkJCWNvbnN0IGdjaGFyKiBfdG1wNDBfOworKwkJCWdjaGFyKiog X3RtcDQxXzsKKysJCQlnaW50IF90bXA0MV9fbGVuZ3RoMTsKKysJCQlnaW50IF90bXA0Ml87Cisr CQkJY29uc3QgZ2NoYXIqIF90bXA0M187CisrCQkJZ2Jvb2xlYW4gX3RtcDQ4XzsKKysJCQlnY2hh cioqIF90bXA1MF87CisrCQkJZ2ludCBfdG1wNTBfX2xlbmd0aDE7CisrCQkJZ2ludCBfdG1wNTFf OworKwkJCWNvbnN0IGdjaGFyKiBfdG1wNTJfOworKwkJCWdpbnQgX3RtcDUzXzsKKysJCQlfdG1w OV8gPSBfdG1wOF87CisrCQkJaWYgKCFfdG1wOV8pIHsKKysJCQkJZ2ludCBfdG1wMTBfOworKwkJ CQlfdG1wMTBfID0gaTsKKysJCQkJaSA9IF90bXAxMF8gKyAxOworKwkJCX0KKysJCQlfdG1wOF8g PSBGQUxTRTsKKysJCQlfdG1wMTFfID0gaTsKKysJCQlfdG1wMTJfID0gbGF5b3V0czsKKysJCQlf dG1wMTJfX2xlbmd0aDEgPSBsYXlvdXRzX2xlbmd0aDE7CisrCQkJaWYgKCEoX3RtcDExXyA8IF90 bXAxMl9fbGVuZ3RoMSkpIHsKKysJCQkJYnJlYWs7CisrCQkJfQorKwkJCV90bXAxM18gPSBpOwor KwkJCV90bXAxNF8gPSBsYXlvdXRzX21heF9sZW5ndGg7CisrCQkJaWYgKF90bXAxM18gPj0gKF90 bXAxNF8gLSAxKSkgeworKwkJCQlicmVhazsKKysJCQl9CisrCQkJX3RtcDE1XyA9IGk7CisrCQkJ aWYgKF90bXAxNV8gPT0gMCkgeworKwkJCQlnY2hhcioqIF90bXAxNl87CisrCQkJCWdpbnQgX3Rt cDE2X19sZW5ndGgxOworKwkJCQlnaW50IF90bXAxN187CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1w MThfOworKwkJCQlnY2hhciogX3RtcDE5XzsKKysJCQkJX3RtcDE2XyA9IGxheW91dHM7CisrCQkJ CV90bXAxNl9fbGVuZ3RoMSA9IGxheW91dHNfbGVuZ3RoMTsKKysJCQkJX3RtcDE3XyA9IGk7Cisr CQkJCV90bXAxOF8gPSBfdG1wMTZfW190bXAxN19dOworKwkJCQlfdG1wMTlfID0gZ19zdHJkdXAg KF90bXAxOF8pOworKwkJCQlfZ19mcmVlMCAoZ3JvdXBfbGF5b3V0cyk7CisrCQkJCWdyb3VwX2xh eW91dHMgPSBfdG1wMTlfOworKwkJCX0gZWxzZSB7CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wMjBf OworKwkJCQlnY2hhcioqIF90bXAyMV87CisrCQkJCWdpbnQgX3RtcDIxX19sZW5ndGgxOworKwkJ CQlnaW50IF90bXAyMl87CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wMjNfOworKwkJCQlnY2hhciog X3RtcDI0XyA9IE5VTEw7CisrCQkJCV90bXAyMF8gPSBncm91cF9sYXlvdXRzOworKwkJCQlfdG1w MjFfID0gbGF5b3V0czsKKysJCQkJX3RtcDIxX19sZW5ndGgxID0gbGF5b3V0c19sZW5ndGgxOwor KwkJCQlfdG1wMjJfID0gaTsKKysJCQkJX3RtcDIzXyA9IF90bXAyMV9bX3RtcDIyX107CisrCQkJ CV90bXAyNF8gPSBnX3N0cmR1cF9wcmludGYgKCIlcywlcyIsIF90bXAyMF8sIF90bXAyM18pOwor KwkJCQlfZ19mcmVlMCAoZ3JvdXBfbGF5b3V0cyk7CisrCQkJCWdyb3VwX2xheW91dHMgPSBfdG1w MjRfOworKwkJCX0KKysJCQlfdG1wMjVfID0gaTsKKysJCQlfdG1wMjZfID0gdmFyaWFudHM7Cisr CQkJX3RtcDI2X19sZW5ndGgxID0gdmFyaWFudHNfbGVuZ3RoMTsKKysJCQlpZiAoX3RtcDI1XyA+ PSBfdG1wMjZfX2xlbmd0aDEpIHsKKysJCQkJZ2ludCBfdG1wMjdfOworKwkJCQlnYm9vbGVhbiBf dG1wMzFfID0gRkFMU0U7CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wMzJfOworKwkJCQlnY2hhcioq IF90bXAzM187CisrCQkJCWdpbnQgX3RtcDMzX19sZW5ndGgxOworKwkJCQlnaW50IF90bXAzNF87 CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wMzVfOworKwkJCQlnYm9vbGVhbiBfdG1wMzdfOworKwkJ CQlfdG1wMjdfID0gaTsKKysJCQkJaWYgKF90bXAyN18gPT0gMCkgeworKwkJCQkJZ2NoYXIqIF90 bXAyOF87CisrCQkJCQlfdG1wMjhfID0gZ19zdHJkdXAgKCIiKTsKKysJCQkJCV9nX2ZyZWUwIChn cm91cF92YXJpYW50cyk7CisrCQkJCQlncm91cF92YXJpYW50cyA9IF90bXAyOF87CisrCQkJCX0g ZWxzZSB7CisrCQkJCQljb25zdCBnY2hhciogX3RtcDI5XzsKKysJCQkJCWdjaGFyKiBfdG1wMzBf OworKwkJCQkJX3RtcDI5XyA9IGdyb3VwX3ZhcmlhbnRzOworKwkJCQkJX3RtcDMwXyA9IGdfc3Ry Y29uY2F0IChfdG1wMjlfLCAiLCIsIE5VTEwpOworKwkJCQkJX2dfZnJlZTAgKGdyb3VwX3Zhcmlh bnRzKTsKKysJCQkJCWdyb3VwX3ZhcmlhbnRzID0gX3RtcDMwXzsKKysJCQkJfQorKwkJCQlfdG1w MzJfID0gbGF5b3V0OworKwkJCQlfdG1wMzNfID0gbGF5b3V0czsKKysJCQkJX3RtcDMzX19sZW5n dGgxID0gbGF5b3V0c19sZW5ndGgxOworKwkJCQlfdG1wMzRfID0gaTsKKysJCQkJX3RtcDM1XyA9 IF90bXAzM19bX3RtcDM0X107CisrCQkJCWlmIChnX3N0cmNtcDAgKF90bXAzMl8sIF90bXAzNV8p ID09IDApIHsKKysJCQkJCWNvbnN0IGdjaGFyKiBfdG1wMzZfOworKwkJCQkJX3RtcDM2XyA9IHZh cmlhbnQ7CisrCQkJCQlfdG1wMzFfID0gZ19zdHJjbXAwIChfdG1wMzZfLCAiIikgPT0gMDsKKysJ CQkJfSBlbHNlIHsKKysJCQkJCV90bXAzMV8gPSBGQUxTRTsKKysJCQkJfQorKwkJCQlfdG1wMzdf ID0gX3RtcDMxXzsKKysJCQkJaWYgKF90bXAzN18pIHsKKysJCQkJCWdpbnQgX3RtcDM4XzsKKysJ CQkJCWluY2x1ZGVfa2V5bWFwID0gVFJVRTsKKysJCQkJCV90bXAzOF8gPSBpOworKwkJCQkJZ3Jv dXBfaWQgPSBfdG1wMzhfOworKwkJCQl9CisrCQkJCWNvbnRpbnVlOworKwkJCX0KKysJCQlfdG1w NDBfID0gbGF5b3V0OworKwkJCV90bXA0MV8gPSBsYXlvdXRzOworKwkJCV90bXA0MV9fbGVuZ3Ro MSA9IGxheW91dHNfbGVuZ3RoMTsKKysJCQlfdG1wNDJfID0gaTsKKysJCQlfdG1wNDNfID0gX3Rt cDQxX1tfdG1wNDJfXTsKKysJCQlpZiAoZ19zdHJjbXAwIChfdG1wNDBfLCBfdG1wNDNfKSA9PSAw KSB7CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wNDRfOworKwkJCQlnY2hhcioqIF90bXA0NV87Cisr CQkJCWdpbnQgX3RtcDQ1X19sZW5ndGgxOworKwkJCQlnaW50IF90bXA0Nl87CisrCQkJCWNvbnN0 IGdjaGFyKiBfdG1wNDdfOworKwkJCQlfdG1wNDRfID0gdmFyaWFudDsKKysJCQkJX3RtcDQ1XyA9 IHZhcmlhbnRzOworKwkJCQlfdG1wNDVfX2xlbmd0aDEgPSB2YXJpYW50c19sZW5ndGgxOworKwkJ CQlfdG1wNDZfID0gaTsKKysJCQkJX3RtcDQ3XyA9IF90bXA0NV9bX3RtcDQ2X107CisrCQkJCV90 bXAzOV8gPSBnX3N0cmNtcDAgKF90bXA0NF8sIF90bXA0N18pID09IDA7CisrCQkJfSBlbHNlIHsK KysJCQkJX3RtcDM5XyA9IEZBTFNFOworKwkJCX0KKysJCQlfdG1wNDhfID0gX3RtcDM5XzsKKysJ CQlpZiAoX3RtcDQ4XykgeworKwkJCQlnaW50IF90bXA0OV87CisrCQkJCWluY2x1ZGVfa2V5bWFw ID0gVFJVRTsKKysJCQkJX3RtcDQ5XyA9IGk7CisrCQkJCWdyb3VwX2lkID0gX3RtcDQ5XzsKKysJ CQl9CisrCQkJX3RtcDUwXyA9IHZhcmlhbnRzOworKwkJCV90bXA1MF9fbGVuZ3RoMSA9IHZhcmlh bnRzX2xlbmd0aDE7CisrCQkJX3RtcDUxXyA9IGk7CisrCQkJX3RtcDUyXyA9IF90bXA1MF9bX3Rt cDUxX107CisrCQkJaWYgKGdfc3RyY21wMCAoX3RtcDUyXywgIiIpICE9IDApIHsKKysJCQkJaGFz X3ZhcmlhbnQgPSBUUlVFOworKwkJCX0KKysJCQlfdG1wNTNfID0gaTsKKysJCQlpZiAoX3RtcDUz XyA9PSAwKSB7CisrCQkJCWdjaGFyKiogX3RtcDU0XzsKKysJCQkJZ2ludCBfdG1wNTRfX2xlbmd0 aDE7CisrCQkJCWdpbnQgX3RtcDU1XzsKKysJCQkJY29uc3QgZ2NoYXIqIF90bXA1Nl87CisrCQkJ CWdjaGFyKiBfdG1wNTdfOworKwkJCQlfdG1wNTRfID0gdmFyaWFudHM7CisrCQkJCV90bXA1NF9f bGVuZ3RoMSA9IHZhcmlhbnRzX2xlbmd0aDE7CisrCQkJCV90bXA1NV8gPSBpOworKwkJCQlfdG1w NTZfID0gX3RtcDU0X1tfdG1wNTVfXTsKKysJCQkJX3RtcDU3XyA9IGdfc3RyZHVwIChfdG1wNTZf KTsKKysJCQkJX2dfZnJlZTAgKGdyb3VwX3ZhcmlhbnRzKTsKKysJCQkJZ3JvdXBfdmFyaWFudHMg PSBfdG1wNTdfOworKwkJCX0gZWxzZSB7CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wNThfOworKwkJ CQlnY2hhcioqIF90bXA1OV87CisrCQkJCWdpbnQgX3RtcDU5X19sZW5ndGgxOworKwkJCQlnaW50 IF90bXA2MF87CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wNjFfOworKwkJCQlnY2hhciogX3RtcDYy XyA9IE5VTEw7CisrCQkJCV90bXA1OF8gPSBncm91cF92YXJpYW50czsKKysJCQkJX3RtcDU5XyA9 IHZhcmlhbnRzOworKwkJCQlfdG1wNTlfX2xlbmd0aDEgPSB2YXJpYW50c19sZW5ndGgxOworKwkJ CQlfdG1wNjBfID0gaTsKKysJCQkJX3RtcDYxXyA9IF90bXA1OV9bX3RtcDYwX107CisrCQkJCV90 bXA2Ml8gPSBnX3N0cmR1cF9wcmludGYgKCIlcywlcyIsIF90bXA1OF8sIF90bXA2MV8pOworKwkJ CQlfZ19mcmVlMCAoZ3JvdXBfdmFyaWFudHMpOworKwkJCQlncm91cF92YXJpYW50cyA9IF90bXA2 Ml87CisrCQkJfQorKwkJfQorKwl9CisrCV90bXA2M18gPSB2YXJpYW50OworKwlpZiAoZ19zdHJj bXAwIChfdG1wNjNfLCAiIikgIT0gMCkgeworKwkJaGFzX3ZhcmlhbnQgPSBUUlVFOworKwl9Cisr CV90bXA2NF8gPSBpbmNsdWRlX2tleW1hcDsKKysJaWYgKCFfdG1wNjRfKSB7CisrCQljb25zdCBn Y2hhciogX3RtcDY1XzsKKysJCWNvbnN0IGdjaGFyKiBfdG1wNjZfOworKwkJZ2NoYXIqIF90bXA2 N18gPSBOVUxMOworKwkJY29uc3QgZ2NoYXIqIF90bXA2OF87CisrCQljb25zdCBnY2hhciogX3Rt cDY5XzsKKysJCWdjaGFyKiBfdG1wNzBfID0gTlVMTDsKKysJCWdpbnQgX3RtcDcxXzsKKysJCV90 bXA2NV8gPSBncm91cF9sYXlvdXRzOworKwkJX3RtcDY2XyA9IGxheW91dDsKKysJCV90bXA2N18g PSBnX3N0cmR1cF9wcmludGYgKCIlcywlcyIsIF90bXA2NV8sIF90bXA2Nl8pOworKwkJX2dfZnJl ZTAgKGdyb3VwX2xheW91dHMpOworKwkJZ3JvdXBfbGF5b3V0cyA9IF90bXA2N187CisrCQlfdG1w NjhfID0gZ3JvdXBfdmFyaWFudHM7CisrCQlfdG1wNjlfID0gdmFyaWFudDsKKysJCV90bXA3MF8g PSBnX3N0cmR1cF9wcmludGYgKCIlcywlcyIsIF90bXA2OF8sIF90bXA2OV8pOworKwkJX2dfZnJl ZTAgKGdyb3VwX3ZhcmlhbnRzKTsKKysJCWdyb3VwX3ZhcmlhbnRzID0gX3RtcDcwXzsKKysJCV90 bXA3MV8gPSBpOworKwkJZ3JvdXBfaWQgPSBfdG1wNzFfOworKwl9CisrCV90bXA3Ml8gPSBoYXNf dmFyaWFudDsKKysJaWYgKCFfdG1wNzJfKSB7CisrCQlfZ19mcmVlMCAoZ3JvdXBfdmFyaWFudHMp OworKwkJZ3JvdXBfdmFyaWFudHMgPSBOVUxMOworKwl9CisrCV90bXA3M18gPSBncm91cF9sYXlv dXRzOworKwlfdG1wNzRfID0gZ19zdHJkdXAgKF90bXA3M18pOworKwlfdG1wNzVfID0gZ3JvdXBf dmFyaWFudHM7CisrCV90bXA3Nl8gPSBnX3N0cmR1cCAoX3RtcDc1Xyk7CisrCV90bXA3N18gPSBn cm91cF9pZDsKKysJX3RtcDc4XyA9IGdfc3RyZHVwX3ByaW50ZiAoIiVpIiwgX3RtcDc3Xyk7Cisr CV90bXA3OV8gPSBnX25ldzAgKGdjaGFyKiwgMyArIDEpOworKwlfdG1wNzlfWzBdID0gX3RtcDc0 XzsKKysJX3RtcDc5X1sxXSA9IF90bXA3Nl87CisrCV90bXA3OV9bMl0gPSBfdG1wNzhfOworKwlf dG1wODBfID0gX3RtcDc5XzsKKysJX3RtcDgwX19sZW5ndGgxID0gMzsKKysJaWYgKHJlc3VsdF9s ZW5ndGgxKSB7CisrCQkqcmVzdWx0X2xlbmd0aDEgPSBfdG1wODBfX2xlbmd0aDE7CisrCX0KKysJ cmVzdWx0ID0gX3RtcDgwXzsKKysJX2dfZnJlZTAgKGdyb3VwX3ZhcmlhbnRzKTsKKysJX2dfZnJl ZTAgKGdyb3VwX2xheW91dHMpOworKwl2YXJpYW50cyA9IChfdmFsYV9hcnJheV9mcmVlICh2YXJp YW50cywgdmFyaWFudHNfbGVuZ3RoMSwgKEdEZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsK KysJbGF5b3V0cyA9IChfdmFsYV9hcnJheV9mcmVlIChsYXlvdXRzLCBsYXlvdXRzX2xlbmd0aDEs IChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCXJldHVybiByZXN1bHQ7CisrfQor KworKworK3N0YXRpYyBnaW50IHN0cmluZ19pbmRleF9vZiAoY29uc3QgZ2NoYXIqIHNlbGYsIGNv bnN0IGdjaGFyKiBuZWVkbGUsIGdpbnQgc3RhcnRfaW5kZXgpIHsKKysJZ2ludCByZXN1bHQgPSAw OworKwlnaW50IF90bXAwXzsKKysJY29uc3QgZ2NoYXIqIF90bXAxXzsKKysJZ2NoYXIqIF90bXAy XyA9IE5VTEw7CisrCWdjaGFyKiBfcmVzdWx0XzsKKysJZ2NoYXIqIF90bXAzXzsKKysJZ19yZXR1 cm5fdmFsX2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCwgMCk7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWls IChuZWVkbGUgIT0gTlVMTCwgMCk7CisrCV90bXAwXyA9IHN0YXJ0X2luZGV4OworKwlfdG1wMV8g PSBuZWVkbGU7CisrCV90bXAyXyA9IHN0cnN0ciAoKChnY2hhciopIHNlbGYpICsgX3RtcDBfLCAo Z2NoYXIqKSBfdG1wMV8pOworKwlfcmVzdWx0XyA9IF90bXAyXzsKKysJX3RtcDNfID0gX3Jlc3Vs dF87CisrCWlmIChfdG1wM18gIT0gTlVMTCkgeworKwkJZ2NoYXIqIF90bXA0XzsKKysJCV90bXA0 XyA9IF9yZXN1bHRfOworKwkJcmVzdWx0ID0gKGdpbnQpIChfdG1wNF8gLSAoKGdjaGFyKikgc2Vs ZikpOworKwkJcmV0dXJuIHJlc3VsdDsKKysJfSBlbHNlIHsKKysJCXJlc3VsdCA9IC0xOworKwkJ cmV0dXJuIHJlc3VsdDsKKysJfQorK30KKysKKysKKytnY2hhcioqIHhrYl9sYXlvdXRfZ2V0X3Zh cmlhbnRfZnJvbV9sYXlvdXQgKFhLQkxheW91dCogc2VsZiwgY29uc3QgZ2NoYXIqIGxheW91dCwg aW50KiByZXN1bHRfbGVuZ3RoMSkgeworKwlnY2hhcioqIHJlc3VsdCA9IE5VTEw7CisrCWNvbnN0 IGdjaGFyKiBfdG1wMF87CisrCWdpbnQgX3RtcDFfID0gMDsKKysJZ2ludCBsZWZ0X2JyYWNrZXQ7 CisrCWNvbnN0IGdjaGFyKiBfdG1wMl87CisrCWdpbnQgX3RtcDNfID0gMDsKKysJZ2ludCByaWdo dF9icmFja2V0OworKwlnYm9vbGVhbiBfdG1wNF8gPSBGQUxTRTsKKysJZ2ludCBfdG1wNV87Cisr CWdib29sZWFuIF90bXA4XzsKKysJY29uc3QgZ2NoYXIqIF90bXAyOF87CisrCWdjaGFyKiBfdG1w MjlfOworKwlnY2hhciogX3RtcDMwXzsKKysJZ2NoYXIqKiBfdG1wMzFfID0gTlVMTDsKKysJZ2No YXIqKiBfdG1wMzJfOworKwlnaW50IF90bXAzMl9fbGVuZ3RoMTsKKysJZ19yZXR1cm5fdmFsX2lm X2ZhaWwgKHNlbGYgIT0gTlVMTCwgTlVMTCk7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChsYXlv dXQgIT0gTlVMTCwgTlVMTCk7CisrCV90bXAwXyA9IGxheW91dDsKKysJX3RtcDFfID0gc3RyaW5n X2luZGV4X29mIChfdG1wMF8sICIoIiwgMCk7CisrCWxlZnRfYnJhY2tldCA9IF90bXAxXzsKKysJ X3RtcDJfID0gbGF5b3V0OworKwlfdG1wM18gPSBzdHJpbmdfaW5kZXhfb2YgKF90bXAyXywgIiki LCAwKTsKKysJcmlnaHRfYnJhY2tldCA9IF90bXAzXzsKKysJX3RtcDVfID0gbGVmdF9icmFja2V0 OworKwlpZiAoX3RtcDVfID49IDApIHsKKysJCWdpbnQgX3RtcDZfOworKwkJZ2ludCBfdG1wN187 CisrCQlfdG1wNl8gPSByaWdodF9icmFja2V0OworKwkJX3RtcDdfID0gbGVmdF9icmFja2V0Owor KwkJX3RtcDRfID0gX3RtcDZfID4gX3RtcDdfOworKwl9IGVsc2UgeworKwkJX3RtcDRfID0gRkFM U0U7CisrCX0KKysJX3RtcDhfID0gX3RtcDRfOworKwlpZiAoX3RtcDhfKSB7CisrCQljb25zdCBn Y2hhciogX3RtcDlfOworKwkJZ2ludCBfdG1wMTBfOworKwkJZ2NoYXIqIF90bXAxMV8gPSBOVUxM OworKwkJZ2NoYXIqIF90bXAxMl87CisrCQljb25zdCBnY2hhciogX3RtcDEzXzsKKysJCWdpbnQg X3RtcDE0XzsKKysJCWNvbnN0IGdjaGFyKiBfdG1wMTVfOworKwkJZ2ludCBfdG1wMTZfOworKwkJ Z2ludCBfdG1wMTdfOworKwkJZ2NoYXIqIF90bXAxOF8gPSBOVUxMOworKwkJZ2NoYXIqIF90bXAx OV87CisrCQlnY2hhciogX3RtcDIwXzsKKysJCWNvbnN0IGdjaGFyKiBfdG1wMjFfOworKwkJZ2lu dCBfdG1wMjJfOworKwkJZ2ludCBfdG1wMjNfOworKwkJZ2NoYXIqIF90bXAyNF8gPSBOVUxMOwor KwkJZ2NoYXIqKiBfdG1wMjVfID0gTlVMTDsKKysJCWdjaGFyKiogX3RtcDI2XzsKKysJCWdpbnQg X3RtcDI2X19sZW5ndGgxOworKwkJZ2NoYXIqKiBfdG1wMjdfOworKwkJZ2ludCBfdG1wMjdfX2xl bmd0aDE7CisrCQlfdG1wOV8gPSBsYXlvdXQ7CisrCQlfdG1wMTBfID0gbGVmdF9icmFja2V0Owor KwkJX3RtcDExXyA9IHN0cmluZ19zbGljZSAoX3RtcDlfLCAoZ2xvbmcpIDAsIChnbG9uZykgX3Rt cDEwXyk7CisrCQlfdG1wMTJfID0gX3RtcDExXzsKKysJCV90bXAxM18gPSBsYXlvdXQ7CisrCQlf dG1wMTRfID0gcmlnaHRfYnJhY2tldDsKKysJCV90bXAxNV8gPSBsYXlvdXQ7CisrCQlfdG1wMTZf ID0gc3RybGVuIChfdG1wMTVfKTsKKysJCV90bXAxN18gPSBfdG1wMTZfOworKwkJX3RtcDE4XyA9 IHN0cmluZ19zbGljZSAoX3RtcDEzXywgKGdsb25nKSAoX3RtcDE0XyArIDEpLCAoZ2xvbmcpIF90 bXAxN18pOworKwkJX3RtcDE5XyA9IF90bXAxOF87CisrCQlfdG1wMjBfID0gZ19zdHJjb25jYXQg KF90bXAxMl8sIF90bXAxOV8sIE5VTEwpOworKwkJX3RtcDIxXyA9IGxheW91dDsKKysJCV90bXAy Ml8gPSBsZWZ0X2JyYWNrZXQ7CisrCQlfdG1wMjNfID0gcmlnaHRfYnJhY2tldDsKKysJCV90bXAy NF8gPSBzdHJpbmdfc2xpY2UgKF90bXAyMV8sIChnbG9uZykgKF90bXAyMl8gKyAxKSwgKGdsb25n KSBfdG1wMjNfKTsKKysJCV90bXAyNV8gPSBnX25ldzAgKGdjaGFyKiwgMiArIDEpOworKwkJX3Rt cDI1X1swXSA9IF90bXAyMF87CisrCQlfdG1wMjVfWzFdID0gX3RtcDI0XzsKKysJCV90bXAyNl8g PSBfdG1wMjVfOworKwkJX3RtcDI2X19sZW5ndGgxID0gMjsKKysJCV9nX2ZyZWUwIChfdG1wMTlf KTsKKysJCV9nX2ZyZWUwIChfdG1wMTJfKTsKKysJCV90bXAyN18gPSBfdG1wMjZfOworKwkJX3Rt cDI3X19sZW5ndGgxID0gX3RtcDI2X19sZW5ndGgxOworKwkJaWYgKHJlc3VsdF9sZW5ndGgxKSB7 CisrCQkJKnJlc3VsdF9sZW5ndGgxID0gX3RtcDI3X19sZW5ndGgxOworKwkJfQorKwkJcmVzdWx0 ID0gX3RtcDI3XzsKKysJCXJldHVybiByZXN1bHQ7CisrCX0KKysJX3RtcDI4XyA9IGxheW91dDsK KysJX3RtcDI5XyA9IGdfc3RyZHVwIChfdG1wMjhfKTsKKysJX3RtcDMwXyA9IGdfc3RyZHVwICgi ZGVmYXVsdCIpOworKwlfdG1wMzFfID0gZ19uZXcwIChnY2hhciosIDIgKyAxKTsKKysJX3RtcDMx X1swXSA9IF90bXAyOV87CisrCV90bXAzMV9bMV0gPSBfdG1wMzBfOworKwlfdG1wMzJfID0gX3Rt cDMxXzsKKysJX3RtcDMyX19sZW5ndGgxID0gMjsKKysJaWYgKHJlc3VsdF9sZW5ndGgxKSB7Cisr CQkqcmVzdWx0X2xlbmd0aDEgPSBfdG1wMzJfX2xlbmd0aDE7CisrCX0KKysJcmVzdWx0ID0gX3Rt cDMyXzsKKysJcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrZ2NoYXIqKiB4a2JfbGF5b3V0X2dl dF9vcHRpb25fZnJvbV9sYXlvdXQgKFhLQkxheW91dCogc2VsZiwgY29uc3QgZ2NoYXIqIGxheW91 dCwgaW50KiByZXN1bHRfbGVuZ3RoMSkgeworKwlnY2hhcioqIHJlc3VsdCA9IE5VTEw7CisrCWNv bnN0IGdjaGFyKiBfdG1wMF87CisrCWdpbnQgX3RtcDFfID0gMDsKKysJZ2ludCBsZWZ0X2JyYWNr ZXQ7CisrCWNvbnN0IGdjaGFyKiBfdG1wMl87CisrCWdpbnQgX3RtcDNfID0gMDsKKysJZ2ludCBy aWdodF9icmFja2V0OworKwlnYm9vbGVhbiBfdG1wNF8gPSBGQUxTRTsKKysJZ2ludCBfdG1wNV87 CisrCWdib29sZWFuIF90bXA4XzsKKysJY29uc3QgZ2NoYXIqIF90bXAyOF87CisrCWdjaGFyKiBf dG1wMjlfOworKwlnY2hhciogX3RtcDMwXzsKKysJZ2NoYXIqKiBfdG1wMzFfID0gTlVMTDsKKysJ Z2NoYXIqKiBfdG1wMzJfOworKwlnaW50IF90bXAzMl9fbGVuZ3RoMTsKKysJZ19yZXR1cm5fdmFs X2lmX2ZhaWwgKHNlbGYgIT0gTlVMTCwgTlVMTCk7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChs YXlvdXQgIT0gTlVMTCwgTlVMTCk7CisrCV90bXAwXyA9IGxheW91dDsKKysJX3RtcDFfID0gc3Ry aW5nX2luZGV4X29mIChfdG1wMF8sICJbIiwgMCk7CisrCWxlZnRfYnJhY2tldCA9IF90bXAxXzsK KysJX3RtcDJfID0gbGF5b3V0OworKwlfdG1wM18gPSBzdHJpbmdfaW5kZXhfb2YgKF90bXAyXywg Il0iLCAwKTsKKysJcmlnaHRfYnJhY2tldCA9IF90bXAzXzsKKysJX3RtcDVfID0gbGVmdF9icmFj a2V0OworKwlpZiAoX3RtcDVfID49IDApIHsKKysJCWdpbnQgX3RtcDZfOworKwkJZ2ludCBfdG1w N187CisrCQlfdG1wNl8gPSByaWdodF9icmFja2V0OworKwkJX3RtcDdfID0gbGVmdF9icmFja2V0 OworKwkJX3RtcDRfID0gX3RtcDZfID4gX3RtcDdfOworKwl9IGVsc2UgeworKwkJX3RtcDRfID0g RkFMU0U7CisrCX0KKysJX3RtcDhfID0gX3RtcDRfOworKwlpZiAoX3RtcDhfKSB7CisrCQljb25z dCBnY2hhciogX3RtcDlfOworKwkJZ2ludCBfdG1wMTBfOworKwkJZ2NoYXIqIF90bXAxMV8gPSBO VUxMOworKwkJZ2NoYXIqIF90bXAxMl87CisrCQljb25zdCBnY2hhciogX3RtcDEzXzsKKysJCWdp bnQgX3RtcDE0XzsKKysJCWNvbnN0IGdjaGFyKiBfdG1wMTVfOworKwkJZ2ludCBfdG1wMTZfOwor KwkJZ2ludCBfdG1wMTdfOworKwkJZ2NoYXIqIF90bXAxOF8gPSBOVUxMOworKwkJZ2NoYXIqIF90 bXAxOV87CisrCQlnY2hhciogX3RtcDIwXzsKKysJCWNvbnN0IGdjaGFyKiBfdG1wMjFfOworKwkJ Z2ludCBfdG1wMjJfOworKwkJZ2ludCBfdG1wMjNfOworKwkJZ2NoYXIqIF90bXAyNF8gPSBOVUxM OworKwkJZ2NoYXIqKiBfdG1wMjVfID0gTlVMTDsKKysJCWdjaGFyKiogX3RtcDI2XzsKKysJCWdp bnQgX3RtcDI2X19sZW5ndGgxOworKwkJZ2NoYXIqKiBfdG1wMjdfOworKwkJZ2ludCBfdG1wMjdf X2xlbmd0aDE7CisrCQlfdG1wOV8gPSBsYXlvdXQ7CisrCQlfdG1wMTBfID0gbGVmdF9icmFja2V0 OworKwkJX3RtcDExXyA9IHN0cmluZ19zbGljZSAoX3RtcDlfLCAoZ2xvbmcpIDAsIChnbG9uZykg X3RtcDEwXyk7CisrCQlfdG1wMTJfID0gX3RtcDExXzsKKysJCV90bXAxM18gPSBsYXlvdXQ7Cisr CQlfdG1wMTRfID0gcmlnaHRfYnJhY2tldDsKKysJCV90bXAxNV8gPSBsYXlvdXQ7CisrCQlfdG1w MTZfID0gc3RybGVuIChfdG1wMTVfKTsKKysJCV90bXAxN18gPSBfdG1wMTZfOworKwkJX3RtcDE4 XyA9IHN0cmluZ19zbGljZSAoX3RtcDEzXywgKGdsb25nKSAoX3RtcDE0XyArIDEpLCAoZ2xvbmcp IF90bXAxN18pOworKwkJX3RtcDE5XyA9IF90bXAxOF87CisrCQlfdG1wMjBfID0gZ19zdHJjb25j YXQgKF90bXAxMl8sIF90bXAxOV8sIE5VTEwpOworKwkJX3RtcDIxXyA9IGxheW91dDsKKysJCV90 bXAyMl8gPSBsZWZ0X2JyYWNrZXQ7CisrCQlfdG1wMjNfID0gcmlnaHRfYnJhY2tldDsKKysJCV90 bXAyNF8gPSBzdHJpbmdfc2xpY2UgKF90bXAyMV8sIChnbG9uZykgKF90bXAyMl8gKyAxKSwgKGds b25nKSBfdG1wMjNfKTsKKysJCV90bXAyNV8gPSBnX25ldzAgKGdjaGFyKiwgMiArIDEpOworKwkJ X3RtcDI1X1swXSA9IF90bXAyMF87CisrCQlfdG1wMjVfWzFdID0gX3RtcDI0XzsKKysJCV90bXAy Nl8gPSBfdG1wMjVfOworKwkJX3RtcDI2X19sZW5ndGgxID0gMjsKKysJCV9nX2ZyZWUwIChfdG1w MTlfKTsKKysJCV9nX2ZyZWUwIChfdG1wMTJfKTsKKysJCV90bXAyN18gPSBfdG1wMjZfOworKwkJ X3RtcDI3X19sZW5ndGgxID0gX3RtcDI2X19sZW5ndGgxOworKwkJaWYgKHJlc3VsdF9sZW5ndGgx KSB7CisrCQkJKnJlc3VsdF9sZW5ndGgxID0gX3RtcDI3X19sZW5ndGgxOworKwkJfQorKwkJcmVz dWx0ID0gX3RtcDI3XzsKKysJCXJldHVybiByZXN1bHQ7CisrCX0KKysJX3RtcDI4XyA9IGxheW91 dDsKKysJX3RtcDI5XyA9IGdfc3RyZHVwIChfdG1wMjhfKTsKKysJX3RtcDMwXyA9IGdfc3RyZHVw ICgiZGVmYXVsdCIpOworKwlfdG1wMzFfID0gZ19uZXcwIChnY2hhciosIDIgKyAxKTsKKysJX3Rt cDMxX1swXSA9IF90bXAyOV87CisrCV90bXAzMV9bMV0gPSBfdG1wMzBfOworKwlfdG1wMzJfID0g X3RtcDMxXzsKKysJX3RtcDMyX19sZW5ndGgxID0gMjsKKysJaWYgKHJlc3VsdF9sZW5ndGgxKSB7 CisrCQkqcmVzdWx0X2xlbmd0aDEgPSBfdG1wMzJfX2xlbmd0aDE7CisrCX0KKysJcmVzdWx0ID0g X3RtcDMyXzsKKysJcmV0dXJuIHJlc3VsdDsKKyt9CisrCisrCisrZ2NoYXIqIHhrYl9sYXlvdXRf Z2V0X2xheW91dCAoWEtCTGF5b3V0KiBzZWxmKSB7CisrCWdjaGFyKiByZXN1bHQgPSBOVUxMOwor KwlnX3JldHVybl92YWxfaWZfZmFpbCAoc2VsZiAhPSBOVUxMLCBOVUxMKTsKKysJaWYgKEhBVkVf SUJVU19YS0IpIHsKKysJCWdjaGFyKiBfdG1wMF8gPSBOVUxMOworKwkJX3RtcDBfID0geGtiX2xh eW91dF9nZXRfb3V0cHV0X2Zyb21fY21kbGluZSAoc2VsZiwgIi0tZ2V0IiwgImxheW91dDogIik7 CisrCQlyZXN1bHQgPSBfdG1wMF87CisrCQlyZXR1cm4gcmVzdWx0OworKwl9IGVsc2UgeworKwkJ Z2NoYXIqIF90bXAxXyA9IE5VTEw7CisrCQlfdG1wMV8gPSB4a2JfbGF5b3V0X2dldF9vdXRwdXRf ZnJvbV9jbWRsaW5lIChzZWxmLCAiLXF1ZXJ5IiwgImxheW91dDogIik7CisrCQlyZXN1bHQgPSBf dG1wMV87CisrCQlyZXR1cm4gcmVzdWx0OworKwl9CisrfQorKworKworK2djaGFyKiB4a2JfbGF5 b3V0X2dldF92YXJpYW50IChYS0JMYXlvdXQqIHNlbGYpIHsKKysJZ2NoYXIqIHJlc3VsdCA9IE5V TEw7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5VTEwsIE5VTEwpOworKwlpZiAo SEFWRV9JQlVTX1hLQikgeworKwkJZ2NoYXIqIF90bXAwXyA9IE5VTEw7CisrCQlfdG1wMF8gPSB4 a2JfbGF5b3V0X2dldF9vdXRwdXRfZnJvbV9jbWRsaW5lIChzZWxmLCAiLS1nZXQiLCAidmFyaWFu dDogIik7CisrCQlyZXN1bHQgPSBfdG1wMF87CisrCQlyZXR1cm4gcmVzdWx0OworKwl9IGVsc2Ug eworKwkJZ2NoYXIqIF90bXAxXyA9IE5VTEw7CisrCQlfdG1wMV8gPSB4a2JfbGF5b3V0X2dldF9v dXRwdXRfZnJvbV9jbWRsaW5lIChzZWxmLCAiLXF1ZXJ5IiwgInZhcmlhbnQ6ICIpOworKwkJcmVz dWx0ID0gX3RtcDFfOworKwkJcmV0dXJuIHJlc3VsdDsKKysJfQorK30KKysKKysKKytnY2hhciog eGtiX2xheW91dF9nZXRfb3B0aW9uIChYS0JMYXlvdXQqIHNlbGYpIHsKKysJZ2NoYXIqIHJlc3Vs dCA9IE5VTEw7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5VTEwsIE5VTEwpOwor KwlpZiAoSEFWRV9JQlVTX1hLQikgeworKwkJZ2NoYXIqIF90bXAwXyA9IE5VTEw7CisrCQlfdG1w MF8gPSB4a2JfbGF5b3V0X2dldF9vdXRwdXRfZnJvbV9jbWRsaW5lIChzZWxmLCAiLS1nZXQiLCAi b3B0aW9uOiAiKTsKKysJCXJlc3VsdCA9IF90bXAwXzsKKysJCXJldHVybiByZXN1bHQ7CisrCX0g ZWxzZSB7CisrCQlnY2hhciogX3RtcDFfID0gTlVMTDsKKysJCV90bXAxXyA9IHhrYl9sYXlvdXRf Z2V0X291dHB1dF9mcm9tX2NtZGxpbmUgKHNlbGYsICItcXVlcnkiLCAib3B0aW9uczogIik7Cisr CQlyZXN1bHQgPSBfdG1wMV87CisrCQlyZXR1cm4gcmVzdWx0OworKwl9CisrfQorKworKworK3N0 YXRpYyBnYm9vbGVhbiBfdmFsYV9zdHJpbmdfYXJyYXlfY29udGFpbnMgKGdjaGFyKiogc3RhY2ss IGludCBzdGFja19sZW5ndGgsIGdjaGFyKiBuZWVkbGUpIHsKKysJaW50IGk7CisrCWZvciAoaSA9 IDA7IGkgPCBzdGFja19sZW5ndGg7IGkrKykgeworKwkJaWYgKGdfc3RyY21wMCAoc3RhY2tbaV0s IG5lZWRsZSkgPT0gMCkgeworKwkJCXJldHVybiBUUlVFOworKwkJfQorKwl9CisrCXJldHVybiBG QUxTRTsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMjMgKGdjaGFyKioq IGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgq bGVuZ3RoKSA9PSAoKnNpemUpKSB7CisrCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkp IDogNDsKKysJCSphcnJheSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7 CisrCX0KKysJKCphcnJheSlbKCpsZW5ndGgpKytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5n dGhdID0gTlVMTDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMjQgKGdj aGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKKysJ aWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7CisrCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgq c2l6ZSkpIDogNDsKKysJCSphcnJheSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUp ICsgMSk7CisrCX0KKysJKCphcnJheSlbKCpsZW5ndGgpKytdID0gdmFsdWU7CisrCSgqYXJyYXkp WypsZW5ndGhdID0gTlVMTDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRk MjUgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUp IHsKKysJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7CisrCQkqc2l6ZSA9ICgqc2l6ZSkgPyAo MiAqICgqc2l6ZSkpIDogNDsKKysJCSphcnJheSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAo KnNpemUpICsgMSk7CisrCX0KKysJKCphcnJheSlbKCpsZW5ndGgpKytdID0gdmFsdWU7CisrCSgq YXJyYXkpWypsZW5ndGhdID0gTlVMTDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3ZhbGFfYXJy YXlfYWRkMjYgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciog dmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7CisrCQkqc2l6ZSA9ICgqc2l6 ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJCSphcnJheSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFy cmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJKCphcnJheSlbKCpsZW5ndGgpKytdID0gdmFsdWU7 CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3Zh bGFfYXJyYXlfYWRkMjcgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBn Y2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7CisrCQkqc2l6ZSA9 ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJCSphcnJheSA9IGdfcmVuZXcgKGdjaGFy KiwgKmFycmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJKCphcnJheSlbKCpsZW5ndGgpKytdID0g dmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKKyt9CisrCisrCisrc3RhdGljIHZv aWQgX3ZhbGFfYXJyYXlfYWRkMjggKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwgaW50KiBz aXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7CisrCQkq c2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJCSphcnJheSA9IGdfcmVuZXcg KGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJKCphcnJheSlbKCpsZW5ndGgp KytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKKyt9CisrCisrCisrc3Rh dGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMjkgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxlbmd0aCwg aW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9PSAoKnNpemUpKSB7 CisrCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJCSphcnJheSA9IGdf cmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJKCphcnJheSlbKCps ZW5ndGgpKytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKKyt9CisrCisr Cisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMzAgKGdjaGFyKioqIGFycmF5LCBpbnQqIGxl bmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9PSAoKnNp emUpKSB7CisrCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJCSphcnJh eSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJKCphcnJh eSlbKCpsZW5ndGgpKytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVMTDsKKyt9 CisrCisrCisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMzEgKGdjaGFyKioqIGFycmF5LCBp bnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVuZ3RoKSA9 PSAoKnNpemUpKSB7CisrCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDogNDsKKysJ CSphcnJheSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7CisrCX0KKysJ KCphcnJheSlbKCpsZW5ndGgpKytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhdID0gTlVM TDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfYWRkMzIgKGdjaGFyKioqIGFy cmF5LCBpbnQqIGxlbmd0aCwgaW50KiBzaXplLCBnY2hhciogdmFsdWUpIHsKKysJaWYgKCgqbGVu Z3RoKSA9PSAoKnNpemUpKSB7CisrCQkqc2l6ZSA9ICgqc2l6ZSkgPyAoMiAqICgqc2l6ZSkpIDog NDsKKysJCSphcnJheSA9IGdfcmVuZXcgKGdjaGFyKiwgKmFycmF5LCAoKnNpemUpICsgMSk7Cisr CX0KKysJKCphcnJheSlbKCpsZW5ndGgpKytdID0gdmFsdWU7CisrCSgqYXJyYXkpWypsZW5ndGhd ID0gTlVMTDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3hrYl9sYXlvdXRfc2V0X2xheW91dF9j Yl9nY2hpbGRfd2F0Y2hfZnVuYyAoR1BpZCBwaWQsIGdpbnQgc3RhdHVzLCBncG9pbnRlciBzZWxm KSB7CisrCXhrYl9sYXlvdXRfc2V0X2xheW91dF9jYiAoc2VsZiwgcGlkLCBzdGF0dXMpOworK30K KysKKysKKytnaW50KiB4a2JfbGF5b3V0X3NldF9sYXlvdXQgKFhLQkxheW91dCogc2VsZiwgY29u c3QgZ2NoYXIqIF9sYXlvdXQsIGNvbnN0IGdjaGFyKiBfdmFyaWFudCwgY29uc3QgZ2NoYXIqIF9v cHRpb24sIGludCogcmVzdWx0X2xlbmd0aDEpIHsKKysJZ2ludCogcmVzdWx0ID0gTlVMTDsKKysJ Y29uc3QgZ2NoYXIqIF90bXAwXzsKKysJZ2ludCB4a2JfZ3JvdXBfaWQ7CisrCWdpbnQgY2hhbmdl ZF9vcHRpb247CisrCUdQaWQgX3RtcDFfOworKwlnYm9vbGVhbiBfdG1wNF8gPSBGQUxTRTsKKysJ Z2Jvb2xlYW4gX3RtcDVfID0gRkFMU0U7CisrCWNvbnN0IGdjaGFyKiBfdG1wNl87CisrCWdib29s ZWFuIF90bXA4XzsKKysJZ2Jvb2xlYW4gX3RtcDEwXzsKKysJY29uc3QgZ2NoYXIqIF90bXAxM187 CisrCWdjaGFyKiBfdG1wMTRfOworKwlnY2hhciogbGF5b3V0OworKwljb25zdCBnY2hhciogX3Rt cDE1XzsKKysJZ2NoYXIqIF90bXAxNl87CisrCWdjaGFyKiB2YXJpYW50OworKwljb25zdCBnY2hh ciogX3RtcDE3XzsKKysJZ2NoYXIqIF90bXAxOF87CisrCWdjaGFyKiBvcHRpb247CisrCWNvbnN0 IGdjaGFyKiBfdG1wMTlfOworKwljb25zdCBnY2hhciogX3RtcDI5XzsKKysJZ2Jvb2xlYW4gbmVl ZF91c19sYXlvdXQ7CisrCWdjaGFyKiogX3RtcDM5XzsKKysJZ2ludCBfdG1wMzlfX2xlbmd0aDE7 CisrCWdpbnQgbGF5b3V0c19tYXhfbGVuZ3RoOworKwlnYm9vbGVhbiBfdG1wNTRfOworKwljb25z dCBnY2hhciogX3RtcDU2XzsKKysJY29uc3QgZ2NoYXIqIF90bXA1OF87CisrCWNvbnN0IGdjaGFy KiBfdG1wNjBfOworKwljb25zdCBnY2hhciogX3RtcDYyXzsKKysJY29uc3QgZ2NoYXIqIF90bXA4 M187CisrCWdib29sZWFuIF90bXA4Nl8gPSBGQUxTRTsKKysJY29uc3QgZ2NoYXIqIF90bXA4N187 CisrCWdib29sZWFuIF90bXA4OV87CisrCWdib29sZWFuIF90bXA5MF8gPSBGQUxTRTsKKysJY29u c3QgZ2NoYXIqIF90bXA5MV87CisrCWdib29sZWFuIF90bXA5M187CisrCWNvbnN0IGdjaGFyKiBf dG1wMTA3XzsKKysJZ2Jvb2xlYW4gX3RtcDEwOF87CisrCWdjaGFyKiogX3RtcDExNF8gPSBOVUxM OworKwlnY2hhcioqIGFyZ3M7CisrCWdpbnQgYXJnc19sZW5ndGgxOworKwlnaW50IF9hcmdzX3Np emVfOworKwlnY2hhcioqIF90bXAxMTVfOworKwlnaW50IF90bXAxMTVfX2xlbmd0aDE7CisrCWNv bnN0IGdjaGFyKiBfdG1wMTE2XzsKKysJZ2NoYXIqIF90bXAxMTdfOworKwlHUGlkIGNoaWxkX3Bp ZCA9IDA7CisrCUdQaWQgX3RtcDE1M187CisrCUdQaWQgX3RtcDE1NF87CisrCWdpbnQgX3RtcDE1 NV87CisrCWdpbnQgX3RtcDE1Nl87CisrCWdpbnQqIF90bXAxNTdfID0gTlVMTDsKKysJZ2ludCog X3RtcDE1OF87CisrCWdpbnQgX3RtcDE1OF9fbGVuZ3RoMTsKKysJR0Vycm9yICogX2lubmVyX2Vy cm9yXyA9IE5VTEw7CisrCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChzZWxmICE9IE5VTEwsIE5VTEwp OworKwlnX3JldHVybl92YWxfaWZfZmFpbCAoX2xheW91dCAhPSBOVUxMLCBOVUxMKTsKKysJZ19y ZXR1cm5fdmFsX2lmX2ZhaWwgKF92YXJpYW50ICE9IE5VTEwsIE5VTEwpOworKwlnX3JldHVybl92 YWxfaWZfZmFpbCAoX29wdGlvbiAhPSBOVUxMLCBOVUxMKTsKKysJX3RtcDBfID0gX2xheW91dDsK KysJZ19hc3NlcnQgKF90bXAwXyAhPSBOVUxMKTsKKysJeGtiX2dyb3VwX2lkID0gMDsKKysJY2hh bmdlZF9vcHRpb24gPSAwOworKwlfdG1wMV8gPSBzZWxmLT5wcml2LT5tX3hrYl9waWQ7CisrCWlm IChfdG1wMV8gIT0gKChHUGlkKSAoLTEpKSkgeworKwkJZ2ludCogX3RtcDJfID0gTlVMTDsKKysJ CWdpbnQqIF90bXAzXzsKKysJCWdpbnQgX3RtcDNfX2xlbmd0aDE7CisrCQlfdG1wMl8gPSBnX25l dzAgKGdpbnQsIDIpOworKwkJX3RtcDJfWzBdID0gLTE7CisrCQlfdG1wMl9bMV0gPSAwOworKwkJ X3RtcDNfID0gX3RtcDJfOworKwkJX3RtcDNfX2xlbmd0aDEgPSAyOworKwkJaWYgKHJlc3VsdF9s ZW5ndGgxKSB7CisrCQkJKnJlc3VsdF9sZW5ndGgxID0gX3RtcDNfX2xlbmd0aDE7CisrCQl9Cisr CQlyZXN1bHQgPSBfdG1wM187CisrCQlyZXR1cm4gcmVzdWx0OworKwl9CisrCV90bXA2XyA9IF9s YXlvdXQ7CisrCWlmIChnX3N0cmNtcDAgKF90bXA2XywgImRlZmF1bHQiKSA9PSAwKSB7CisrCQlj b25zdCBnY2hhciogX3RtcDdfOworKwkJX3RtcDdfID0gX3ZhcmlhbnQ7CisrCQlfdG1wNV8gPSBn X3N0cmNtcDAgKF90bXA3XywgImRlZmF1bHQiKSA9PSAwOworKwl9IGVsc2UgeworKwkJX3RtcDVf ID0gRkFMU0U7CisrCX0KKysJX3RtcDhfID0gX3RtcDVfOworKwlpZiAoX3RtcDhfKSB7CisrCQlj b25zdCBnY2hhciogX3RtcDlfOworKwkJX3RtcDlfID0gX29wdGlvbjsKKysJCV90bXA0XyA9IGdf c3RyY21wMCAoX3RtcDlfLCAiZGVmYXVsdCIpID09IDA7CisrCX0gZWxzZSB7CisrCQlfdG1wNF8g PSBGQUxTRTsKKysJfQorKwlfdG1wMTBfID0gX3RtcDRfOworKwlpZiAoX3RtcDEwXykgeworKwkJ Z2ludCogX3RtcDExXyA9IE5VTEw7CisrCQlnaW50KiBfdG1wMTJfOworKwkJZ2ludCBfdG1wMTJf X2xlbmd0aDE7CisrCQlfdG1wMTFfID0gZ19uZXcwIChnaW50LCAyKTsKKysJCV90bXAxMV9bMF0g PSAtMTsKKysJCV90bXAxMV9bMV0gPSAwOworKwkJX3RtcDEyXyA9IF90bXAxMV87CisrCQlfdG1w MTJfX2xlbmd0aDEgPSAyOworKwkJaWYgKHJlc3VsdF9sZW5ndGgxKSB7CisrCQkJKnJlc3VsdF9s ZW5ndGgxID0gX3RtcDEyX19sZW5ndGgxOworKwkJfQorKwkJcmVzdWx0ID0gX3RtcDEyXzsKKysJ CXJldHVybiByZXN1bHQ7CisrCX0KKysJX3RtcDEzXyA9IF9sYXlvdXQ7CisrCV90bXAxNF8gPSBn X3N0cmR1cCAoX3RtcDEzXyk7CisrCWxheW91dCA9IF90bXAxNF87CisrCV90bXAxNV8gPSBfdmFy aWFudDsKKysJX3RtcDE2XyA9IGdfc3RyZHVwIChfdG1wMTVfKTsKKysJdmFyaWFudCA9IF90bXAx Nl87CisrCV90bXAxN18gPSBfb3B0aW9uOworKwlfdG1wMThfID0gZ19zdHJkdXAgKF90bXAxN18p OworKwlvcHRpb24gPSBfdG1wMThfOworKwlfdG1wMTlfID0gdmFyaWFudDsKKysJaWYgKGdfc3Ry Y21wMCAoX3RtcDE5XywgImRlZmF1bHQiKSA9PSAwKSB7CisrCQljb25zdCBnY2hhciogX3RtcDIw XzsKKysJCWdpbnQgX3RtcDIxXyA9IDA7CisrCQlnY2hhcioqIF90bXAyMl8gPSBOVUxMOworKwkJ Z2NoYXIqKiBhcnJheTsKKysJCWdpbnQgYXJyYXlfbGVuZ3RoMTsKKysJCWdpbnQgX2FycmF5X3Np emVfOworKwkJZ2NoYXIqKiBfdG1wMjNfOworKwkJZ2ludCBfdG1wMjNfX2xlbmd0aDE7CisrCQlj b25zdCBnY2hhciogX3RtcDI0XzsKKysJCWdjaGFyKiBfdG1wMjVfOworKwkJZ2NoYXIqKiBfdG1w MjZfOworKwkJZ2ludCBfdG1wMjZfX2xlbmd0aDE7CisrCQljb25zdCBnY2hhciogX3RtcDI3XzsK KysJCWdjaGFyKiBfdG1wMjhfOworKwkJX3RtcDIwXyA9IGxheW91dDsKKysJCV90bXAyMl8gPSB4 a2JfbGF5b3V0X2dldF92YXJpYW50X2Zyb21fbGF5b3V0IChzZWxmLCBfdG1wMjBfLCAmX3RtcDIx Xyk7CisrCQlhcnJheSA9IF90bXAyMl87CisrCQlhcnJheV9sZW5ndGgxID0gX3RtcDIxXzsKKysJ CV9hcnJheV9zaXplXyA9IGFycmF5X2xlbmd0aDE7CisrCQlfdG1wMjNfID0gYXJyYXk7CisrCQlf dG1wMjNfX2xlbmd0aDEgPSBhcnJheV9sZW5ndGgxOworKwkJX3RtcDI0XyA9IF90bXAyM19bMF07 CisrCQlfdG1wMjVfID0gZ19zdHJkdXAgKF90bXAyNF8pOworKwkJX2dfZnJlZTAgKGxheW91dCk7 CisrCQlsYXlvdXQgPSBfdG1wMjVfOworKwkJX3RtcDI2XyA9IGFycmF5OworKwkJX3RtcDI2X19s ZW5ndGgxID0gYXJyYXlfbGVuZ3RoMTsKKysJCV90bXAyN18gPSBfdG1wMjZfWzFdOworKwkJX3Rt cDI4XyA9IGdfc3RyZHVwIChfdG1wMjdfKTsKKysJCV9nX2ZyZWUwICh2YXJpYW50KTsKKysJCXZh cmlhbnQgPSBfdG1wMjhfOworKwkJYXJyYXkgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoYXJyYXksIGFy cmF5X2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCX0KKysJX3Rt cDI5XyA9IG9wdGlvbjsKKysJaWYgKGdfc3RyY21wMCAoX3RtcDI5XywgImRlZmF1bHQiKSA9PSAw KSB7CisrCQljb25zdCBnY2hhciogX3RtcDMwXzsKKysJCWdpbnQgX3RtcDMxXyA9IDA7CisrCQln Y2hhcioqIF90bXAzMl8gPSBOVUxMOworKwkJZ2NoYXIqKiBhcnJheTsKKysJCWdpbnQgYXJyYXlf bGVuZ3RoMTsKKysJCWdpbnQgX2FycmF5X3NpemVfOworKwkJZ2NoYXIqKiBfdG1wMzNfOworKwkJ Z2ludCBfdG1wMzNfX2xlbmd0aDE7CisrCQljb25zdCBnY2hhciogX3RtcDM0XzsKKysJCWdjaGFy KiBfdG1wMzVfOworKwkJZ2NoYXIqKiBfdG1wMzZfOworKwkJZ2ludCBfdG1wMzZfX2xlbmd0aDE7 CisrCQljb25zdCBnY2hhciogX3RtcDM3XzsKKysJCWdjaGFyKiBfdG1wMzhfOworKwkJX3RtcDMw XyA9IGxheW91dDsKKysJCV90bXAzMl8gPSB4a2JfbGF5b3V0X2dldF9vcHRpb25fZnJvbV9sYXlv dXQgKHNlbGYsIF90bXAzMF8sICZfdG1wMzFfKTsKKysJCWFycmF5ID0gX3RtcDMyXzsKKysJCWFy cmF5X2xlbmd0aDEgPSBfdG1wMzFfOworKwkJX2FycmF5X3NpemVfID0gYXJyYXlfbGVuZ3RoMTsK KysJCV90bXAzM18gPSBhcnJheTsKKysJCV90bXAzM19fbGVuZ3RoMSA9IGFycmF5X2xlbmd0aDE7 CisrCQlfdG1wMzRfID0gX3RtcDMzX1swXTsKKysJCV90bXAzNV8gPSBnX3N0cmR1cCAoX3RtcDM0 Xyk7CisrCQlfZ19mcmVlMCAobGF5b3V0KTsKKysJCWxheW91dCA9IF90bXAzNV87CisrCQlfdG1w MzZfID0gYXJyYXk7CisrCQlfdG1wMzZfX2xlbmd0aDEgPSBhcnJheV9sZW5ndGgxOworKwkJX3Rt cDM3XyA9IF90bXAzNl9bMV07CisrCQlfdG1wMzhfID0gZ19zdHJkdXAgKF90bXAzN18pOworKwkJ X2dfZnJlZTAgKG9wdGlvbik7CisrCQlvcHRpb24gPSBfdG1wMzhfOworKwkJYXJyYXkgPSAoX3Zh bGFfYXJyYXlfZnJlZSAoYXJyYXksIGFycmF5X2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkgZ19m cmVlKSwgTlVMTCk7CisrCX0KKysJbmVlZF91c19sYXlvdXQgPSBGQUxTRTsKKysJX3RtcDM5XyA9 IHNlbGYtPnByaXYtPm1feGtiX2xhdGluX2xheW91dHM7CisrCV90bXAzOV9fbGVuZ3RoMSA9IHNl bGYtPnByaXYtPm1feGtiX2xhdGluX2xheW91dHNfbGVuZ3RoMTsKKysJeworKwkJZ2NoYXIqKiBs YXRpbl9sYXlvdXRfY29sbGVjdGlvbiA9IE5VTEw7CisrCQlnaW50IGxhdGluX2xheW91dF9jb2xs ZWN0aW9uX2xlbmd0aDEgPSAwOworKwkJZ2ludCBfbGF0aW5fbGF5b3V0X2NvbGxlY3Rpb25fc2l6 ZV8gPSAwOworKwkJZ2ludCBsYXRpbl9sYXlvdXRfaXQgPSAwOworKwkJbGF0aW5fbGF5b3V0X2Nv bGxlY3Rpb24gPSBfdG1wMzlfOworKwkJbGF0aW5fbGF5b3V0X2NvbGxlY3Rpb25fbGVuZ3RoMSA9 IF90bXAzOV9fbGVuZ3RoMTsKKysJCWZvciAobGF0aW5fbGF5b3V0X2l0ID0gMDsgbGF0aW5fbGF5 b3V0X2l0IDwgX3RtcDM5X19sZW5ndGgxOyBsYXRpbl9sYXlvdXRfaXQgPSBsYXRpbl9sYXlvdXRf aXQgKyAxKSB7CisrCQkJZ2NoYXIqIF90bXA0MF87CisrCQkJZ2NoYXIqIGxhdGluX2xheW91dCA9 IE5VTEw7CisrCQkJX3RtcDQwXyA9IGdfc3RyZHVwIChsYXRpbl9sYXlvdXRfY29sbGVjdGlvblts YXRpbl9sYXlvdXRfaXRdKTsKKysJCQlsYXRpbl9sYXlvdXQgPSBfdG1wNDBfOworKwkJCXsKKysJ CQkJZ2Jvb2xlYW4gX3RtcDQxXyA9IEZBTFNFOworKwkJCQljb25zdCBnY2hhciogX3RtcDQyXzsK KysJCQkJY29uc3QgZ2NoYXIqIF90bXA0M187CisrCQkJCWdib29sZWFuIF90bXA0NV87CisrCQkJ CWdib29sZWFuIF90bXA0Nl8gPSBGQUxTRTsKKysJCQkJY29uc3QgZ2NoYXIqIF90bXA0N187Cisr CQkJCWdib29sZWFuIF90bXA1M187CisrCQkJCV90bXA0Ml8gPSBsYXlvdXQ7CisrCQkJCV90bXA0 M18gPSBsYXRpbl9sYXlvdXQ7CisrCQkJCWlmIChnX3N0cmNtcDAgKF90bXA0Ml8sIF90bXA0M18p ID09IDApIHsKKysJCQkJCWNvbnN0IGdjaGFyKiBfdG1wNDRfOworKwkJCQkJX3RtcDQ0XyA9IHZh cmlhbnQ7CisrCQkJCQlfdG1wNDFfID0gZ19zdHJjbXAwIChfdG1wNDRfLCAiZW5nIikgIT0gMDsK KysJCQkJfSBlbHNlIHsKKysJCQkJCV90bXA0MV8gPSBGQUxTRTsKKysJCQkJfQorKwkJCQlfdG1w NDVfID0gX3RtcDQxXzsKKysJCQkJaWYgKF90bXA0NV8pIHsKKysJCQkJCW5lZWRfdXNfbGF5b3V0 ID0gVFJVRTsKKysJCQkJCV9nX2ZyZWUwIChsYXRpbl9sYXlvdXQpOworKwkJCQkJYnJlYWs7Cisr CQkJCX0KKysJCQkJX3RtcDQ3XyA9IHZhcmlhbnQ7CisrCQkJCWlmIChfdG1wNDdfICE9IE5VTEwp IHsKKysJCQkJCWNvbnN0IGdjaGFyKiBfdG1wNDhfOworKwkJCQkJY29uc3QgZ2NoYXIqIF90bXA0 OV87CisrCQkJCQlnY2hhciogX3RtcDUwXyA9IE5VTEw7CisrCQkJCQlnY2hhciogX3RtcDUxXzsK KysJCQkJCWNvbnN0IGdjaGFyKiBfdG1wNTJfOworKwkJCQkJX3RtcDQ4XyA9IGxheW91dDsKKysJ CQkJCV90bXA0OV8gPSB2YXJpYW50OworKwkJCQkJX3RtcDUwXyA9IGdfc3RyZHVwX3ByaW50ZiAo IiVzKCVzKSIsIF90bXA0OF8sIF90bXA0OV8pOworKwkJCQkJX3RtcDUxXyA9IF90bXA1MF87Cisr CQkJCQlfdG1wNTJfID0gbGF0aW5fbGF5b3V0OworKwkJCQkJX3RtcDQ2XyA9IGdfc3RyY21wMCAo X3RtcDUxXywgX3RtcDUyXykgPT0gMDsKKysJCQkJCV9nX2ZyZWUwIChfdG1wNTFfKTsKKysJCQkJ fSBlbHNlIHsKKysJCQkJCV90bXA0Nl8gPSBGQUxTRTsKKysJCQkJfQorKwkJCQlfdG1wNTNfID0g X3RtcDQ2XzsKKysJCQkJaWYgKF90bXA1M18pIHsKKysJCQkJCW5lZWRfdXNfbGF5b3V0ID0gVFJV RTsKKysJCQkJCV9nX2ZyZWUwIChsYXRpbl9sYXlvdXQpOworKwkJCQkJYnJlYWs7CisrCQkJCX0K KysJCQkJX2dfZnJlZTAgKGxhdGluX2xheW91dCk7CisrCQkJfQorKwkJfQorKwl9CisrCWxheW91 dHNfbWF4X2xlbmd0aCA9IFhLQl9MQVlPVVRTX01BWF9MRU5HVEg7CisrCV90bXA1NF8gPSBuZWVk X3VzX2xheW91dDsKKysJaWYgKF90bXA1NF8pIHsKKysJCWdpbnQgX3RtcDU1XzsKKysJCV90bXA1 NV8gPSBsYXlvdXRzX21heF9sZW5ndGg7CisrCQlsYXlvdXRzX21heF9sZW5ndGggPSBfdG1wNTVf IC0gMTsKKysJfQorKwlfdG1wNTZfID0gc2VsZi0+cHJpdi0+bV9kZWZhdWx0X2xheW91dDsKKysJ aWYgKGdfc3RyY21wMCAoX3RtcDU2XywgIiIpID09IDApIHsKKysJCWdjaGFyKiBfdG1wNTdfID0g TlVMTDsKKysJCV90bXA1N18gPSB4a2JfbGF5b3V0X2dldF9sYXlvdXQgKHNlbGYpOworKwkJX2df ZnJlZTAgKHNlbGYtPnByaXYtPm1fZGVmYXVsdF9sYXlvdXQpOworKwkJc2VsZi0+cHJpdi0+bV9k ZWZhdWx0X2xheW91dCA9IF90bXA1N187CisrCX0KKysJX3RtcDU4XyA9IHNlbGYtPnByaXYtPm1f ZGVmYXVsdF92YXJpYW50OworKwlpZiAoZ19zdHJjbXAwIChfdG1wNThfLCAiIikgPT0gMCkgewor KwkJZ2NoYXIqIF90bXA1OV8gPSBOVUxMOworKwkJX3RtcDU5XyA9IHhrYl9sYXlvdXRfZ2V0X3Zh cmlhbnQgKHNlbGYpOworKwkJX2dfZnJlZTAgKHNlbGYtPnByaXYtPm1fZGVmYXVsdF92YXJpYW50 KTsKKysJCXNlbGYtPnByaXYtPm1fZGVmYXVsdF92YXJpYW50ID0gX3RtcDU5XzsKKysJfQorKwlf dG1wNjBfID0gc2VsZi0+cHJpdi0+bV9kZWZhdWx0X29wdGlvbjsKKysJaWYgKGdfc3RyY21wMCAo X3RtcDYwXywgIiIpID09IDApIHsKKysJCWdjaGFyKiBfdG1wNjFfID0gTlVMTDsKKysJCV90bXA2 MV8gPSB4a2JfbGF5b3V0X2dldF9vcHRpb24gKHNlbGYpOworKwkJX2dfZnJlZTAgKHNlbGYtPnBy aXYtPm1fZGVmYXVsdF9vcHRpb24pOworKwkJc2VsZi0+cHJpdi0+bV9kZWZhdWx0X29wdGlvbiA9 IF90bXA2MV87CisrCX0KKysJX3RtcDYyXyA9IGxheW91dDsKKysJaWYgKGdfc3RyY21wMCAoX3Rt cDYyXywgImRlZmF1bHQiKSA9PSAwKSB7CisrCQljb25zdCBnY2hhciogX3RtcDYzXzsKKysJCWdj aGFyKiBfdG1wNjRfOworKwkJY29uc3QgZ2NoYXIqIF90bXA2NV87CisrCQlnY2hhciogX3RtcDY2 XzsKKysJCV90bXA2M18gPSBzZWxmLT5wcml2LT5tX2RlZmF1bHRfbGF5b3V0OworKwkJX3RtcDY0 XyA9IGdfc3RyZHVwIChfdG1wNjNfKTsKKysJCV9nX2ZyZWUwIChsYXlvdXQpOworKwkJbGF5b3V0 ID0gX3RtcDY0XzsKKysJCV90bXA2NV8gPSBzZWxmLT5wcml2LT5tX2RlZmF1bHRfdmFyaWFudDsK KysJCV90bXA2Nl8gPSBnX3N0cmR1cCAoX3RtcDY1Xyk7CisrCQlfZ19mcmVlMCAodmFyaWFudCk7 CisrCQl2YXJpYW50ID0gX3RtcDY2XzsKKysJfSBlbHNlIHsKKysJCWlmIChIQVZFX0lCVVNfR0tC RCkgeworKwkJCWNvbnN0IGdjaGFyKiBfdG1wNjdfOworKwkJCWNvbnN0IGdjaGFyKiBfdG1wNjlf OworKwkJCWNvbnN0IGdjaGFyKiBfdG1wNzBfOworKwkJCWdpbnQgX3RtcDcxXzsKKysJCQlnaW50 IF90bXA3Ml8gPSAwOworKwkJCWdjaGFyKiogX3RtcDczXyA9IE5VTEw7CisrCQkJZ2NoYXIqKiBy ZXR2YWw7CisrCQkJZ2ludCByZXR2YWxfbGVuZ3RoMTsKKysJCQlnaW50IF9yZXR2YWxfc2l6ZV87 CisrCQkJZ2NoYXIqKiBfdG1wNzRfOworKwkJCWdpbnQgX3RtcDc0X19sZW5ndGgxOworKwkJCWNv bnN0IGdjaGFyKiBfdG1wNzVfOworKwkJCWdjaGFyKiBfdG1wNzZfOworKwkJCWdjaGFyKiogX3Rt cDc3XzsKKysJCQlnaW50IF90bXA3N19fbGVuZ3RoMTsKKysJCQljb25zdCBnY2hhciogX3RtcDc4 XzsKKysJCQlnY2hhciogX3RtcDc5XzsKKysJCQlnY2hhcioqIF90bXA4MF87CisrCQkJZ2ludCBf dG1wODBfX2xlbmd0aDE7CisrCQkJY29uc3QgZ2NoYXIqIF90bXA4MV87CisrCQkJZ2ludCBfdG1w ODJfID0gMDsKKysJCQlfdG1wNjdfID0gdmFyaWFudDsKKysJCQlpZiAoZ19zdHJjbXAwIChfdG1w NjdfLCAiZGVmYXVsdCIpID09IDApIHsKKysJCQkJZ2NoYXIqIF90bXA2OF87CisrCQkJCV90bXA2 OF8gPSBnX3N0cmR1cCAoIiIpOworKwkJCQlfZ19mcmVlMCAodmFyaWFudCk7CisrCQkJCXZhcmlh bnQgPSBfdG1wNjhfOworKwkJCX0KKysJCQlfdG1wNjlfID0gbGF5b3V0OworKwkJCV90bXA3MF8g PSB2YXJpYW50OworKwkJCV90bXA3MV8gPSBsYXlvdXRzX21heF9sZW5ndGg7CisrCQkJX3RtcDcz XyA9IHhrYl9sYXlvdXRfZ2V0X3hrYl9ncm91cF9sYXlvdXQgKHNlbGYsIF90bXA2OV8sIF90bXA3 MF8sIF90bXA3MV8sICZfdG1wNzJfKTsKKysJCQlyZXR2YWwgPSBfdG1wNzNfOworKwkJCXJldHZh bF9sZW5ndGgxID0gX3RtcDcyXzsKKysJCQlfcmV0dmFsX3NpemVfID0gcmV0dmFsX2xlbmd0aDE7 CisrCQkJX3RtcDc0XyA9IHJldHZhbDsKKysJCQlfdG1wNzRfX2xlbmd0aDEgPSByZXR2YWxfbGVu Z3RoMTsKKysJCQlfdG1wNzVfID0gX3RtcDc0X1swXTsKKysJCQlfdG1wNzZfID0gZ19zdHJkdXAg KF90bXA3NV8pOworKwkJCV9nX2ZyZWUwIChsYXlvdXQpOworKwkJCWxheW91dCA9IF90bXA3Nl87 CisrCQkJX3RtcDc3XyA9IHJldHZhbDsKKysJCQlfdG1wNzdfX2xlbmd0aDEgPSByZXR2YWxfbGVu Z3RoMTsKKysJCQlfdG1wNzhfID0gX3RtcDc3X1sxXTsKKysJCQlfdG1wNzlfID0gZ19zdHJkdXAg KF90bXA3OF8pOworKwkJCV9nX2ZyZWUwICh2YXJpYW50KTsKKysJCQl2YXJpYW50ID0gX3RtcDc5 XzsKKysJCQlfdG1wODBfID0gcmV0dmFsOworKwkJCV90bXA4MF9fbGVuZ3RoMSA9IHJldHZhbF9s ZW5ndGgxOworKwkJCV90bXA4MV8gPSBfdG1wODBfWzJdOworKwkJCV90bXA4Ml8gPSBhdG9pIChf dG1wODFfKTsKKysJCQl4a2JfZ3JvdXBfaWQgPSBfdG1wODJfOworKwkJCXJldHZhbCA9IChfdmFs YV9hcnJheV9mcmVlIChyZXR2YWwsIHJldHZhbF9sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdf ZnJlZSksIE5VTEwpOworKwkJfQorKwl9CisrCV90bXA4M18gPSBsYXlvdXQ7CisrCWlmIChnX3N0 cmNtcDAgKF90bXA4M18sICIiKSA9PSAwKSB7CisrCQlnaW50KiBfdG1wODRfID0gTlVMTDsKKysJ CWdpbnQqIF90bXA4NV87CisrCQlnaW50IF90bXA4NV9fbGVuZ3RoMTsKKysJCWdfd2FybmluZyAo InhrYmxheW91dC52YWxhOjMyOTogQ291bGQgbm90IGdldCB0aGUgY29ycmVjdCBsYXlvdXQiKTsK KysJCV90bXA4NF8gPSBnX25ldzAgKGdpbnQsIDIpOworKwkJX3RtcDg0X1swXSA9IC0xOworKwkJ X3RtcDg0X1sxXSA9IDA7CisrCQlfdG1wODVfID0gX3RtcDg0XzsKKysJCV90bXA4NV9fbGVuZ3Ro MSA9IDI7CisrCQlpZiAocmVzdWx0X2xlbmd0aDEpIHsKKysJCQkqcmVzdWx0X2xlbmd0aDEgPSBf dG1wODVfX2xlbmd0aDE7CisrCQl9CisrCQlyZXN1bHQgPSBfdG1wODVfOworKwkJX2dfZnJlZTAg KG9wdGlvbik7CisrCQlfZ19mcmVlMCAodmFyaWFudCk7CisrCQlfZ19mcmVlMCAobGF5b3V0KTsK KysJCXJldHVybiByZXN1bHQ7CisrCX0KKysJX3RtcDg3XyA9IHZhcmlhbnQ7CisrCWlmIChnX3N0 cmNtcDAgKF90bXA4N18sICJkZWZhdWx0IikgPT0gMCkgeworKwkJX3RtcDg2XyA9IFRSVUU7Cisr CX0gZWxzZSB7CisrCQljb25zdCBnY2hhciogX3RtcDg4XzsKKysJCV90bXA4OF8gPSB2YXJpYW50 OworKwkJX3RtcDg2XyA9IGdfc3RyY21wMCAoX3RtcDg4XywgIiIpID09IDA7CisrCX0KKysJX3Rt cDg5XyA9IF90bXA4Nl87CisrCWlmIChfdG1wODlfKSB7CisrCQlfZ19mcmVlMCAodmFyaWFudCk7 CisrCQl2YXJpYW50ID0gTlVMTDsKKysJfQorKwlfdG1wOTFfID0gb3B0aW9uOworKwlpZiAoZ19z dHJjbXAwIChfdG1wOTFfLCAiZGVmYXVsdCIpID09IDApIHsKKysJCV90bXA5MF8gPSBUUlVFOwor Kwl9IGVsc2UgeworKwkJY29uc3QgZ2NoYXIqIF90bXA5Ml87CisrCQlfdG1wOTJfID0gb3B0aW9u OworKwkJX3RtcDkwXyA9IGdfc3RyY21wMCAoX3RtcDkyXywgIiIpID09IDA7CisrCX0KKysJX3Rt cDkzXyA9IF90bXA5MF87CisrCWlmIChfdG1wOTNfKSB7CisrCQljb25zdCBnY2hhciogX3RtcDk0 XzsKKysJCWdjaGFyKiBfdG1wOTVfOworKwkJX3RtcDk0XyA9IHNlbGYtPnByaXYtPm1fZGVmYXVs dF9vcHRpb247CisrCQlfdG1wOTVfID0gZ19zdHJkdXAgKF90bXA5NF8pOworKwkJX2dfZnJlZTAg KG9wdGlvbik7CisrCQlvcHRpb24gPSBfdG1wOTVfOworKwl9IGVsc2UgeworKwkJY29uc3QgZ2No YXIqIF90bXA5Nl87CisrCQljb25zdCBnY2hhciogX3RtcDk3XzsKKysJCWdjaGFyKiogX3RtcDk4 XzsKKysJCWdjaGFyKiogX3RtcDk5XyA9IE5VTEw7CisrCQlnY2hhcioqIF90bXAxMDBfOworKwkJ Z2ludCBfdG1wMTAwX19sZW5ndGgxOworKwkJZ2Jvb2xlYW4gX3RtcDEwMV87CisrCQlfdG1wOTZf ID0gb3B0aW9uOworKwkJX3RtcDk3XyA9IHNlbGYtPnByaXYtPm1fZGVmYXVsdF9vcHRpb247Cisr CQlfdG1wOTlfID0gX3RtcDk4XyA9IGdfc3Ryc3BsaXQgKF90bXA5N18sICIsIiwgMCk7CisrCQlf dG1wMTAwXyA9IF90bXA5OV87CisrCQlfdG1wMTAwX19sZW5ndGgxID0gX3ZhbGFfYXJyYXlfbGVu Z3RoIChfdG1wOThfKTsKKysJCV90bXAxMDFfID0gIV92YWxhX3N0cmluZ19hcnJheV9jb250YWlu cyAoX3RtcDEwMF8sIF92YWxhX2FycmF5X2xlbmd0aCAoX3RtcDk4XyksIF90bXA5Nl8pOworKwkJ X3RtcDEwMF8gPSAoX3ZhbGFfYXJyYXlfZnJlZSAoX3RtcDEwMF8sIF90bXAxMDBfX2xlbmd0aDEs IChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCQlpZiAoX3RtcDEwMV8pIHsKKysJ CQljb25zdCBnY2hhciogX3RtcDEwMl87CisrCQkJY29uc3QgZ2NoYXIqIF90bXAxMDNfOworKwkJ CWdjaGFyKiBfdG1wMTA0XyA9IE5VTEw7CisrCQkJX3RtcDEwMl8gPSBzZWxmLT5wcml2LT5tX2Rl ZmF1bHRfb3B0aW9uOworKwkJCV90bXAxMDNfID0gb3B0aW9uOworKwkJCV90bXAxMDRfID0gZ19z dHJkdXBfcHJpbnRmICgiJXMsJXMiLCBfdG1wMTAyXywgX3RtcDEwM18pOworKwkJCV9nX2ZyZWUw IChvcHRpb24pOworKwkJCW9wdGlvbiA9IF90bXAxMDRfOworKwkJCWNoYW5nZWRfb3B0aW9uID0g MTsKKysJCX0gZWxzZSB7CisrCQkJY29uc3QgZ2NoYXIqIF90bXAxMDVfOworKwkJCWdjaGFyKiBf dG1wMTA2XzsKKysJCQlfdG1wMTA1XyA9IHNlbGYtPnByaXYtPm1fZGVmYXVsdF9vcHRpb247Cisr CQkJX3RtcDEwNl8gPSBnX3N0cmR1cCAoX3RtcDEwNV8pOworKwkJCV9nX2ZyZWUwIChvcHRpb24p OworKwkJCW9wdGlvbiA9IF90bXAxMDZfOworKwkJfQorKwl9CisrCV90bXAxMDdfID0gb3B0aW9u OworKwlpZiAoZ19zdHJjbXAwIChfdG1wMTA3XywgIiIpID09IDApIHsKKysJCV9nX2ZyZWUwIChv cHRpb24pOworKwkJb3B0aW9uID0gTlVMTDsKKysJfQorKwlfdG1wMTA4XyA9IG5lZWRfdXNfbGF5 b3V0OworKwlpZiAoX3RtcDEwOF8pIHsKKysJCWNvbnN0IGdjaGFyKiBfdG1wMTA5XzsKKysJCWdj aGFyKiBfdG1wMTEwXzsKKysJCWNvbnN0IGdjaGFyKiBfdG1wMTExXzsKKysJCV90bXAxMDlfID0g bGF5b3V0OworKwkJX3RtcDExMF8gPSBnX3N0cmNvbmNhdCAoX3RtcDEwOV8sICIsdXMiLCBOVUxM KTsKKysJCV9nX2ZyZWUwIChsYXlvdXQpOworKwkJbGF5b3V0ID0gX3RtcDExMF87CisrCQlfdG1w MTExXyA9IHZhcmlhbnQ7CisrCQlpZiAoX3RtcDExMV8gIT0gTlVMTCkgeworKwkJCWNvbnN0IGdj aGFyKiBfdG1wMTEyXzsKKysJCQlnY2hhciogX3RtcDExM187CisrCQkJX3RtcDExMl8gPSB2YXJp YW50OworKwkJCV90bXAxMTNfID0gZ19zdHJjb25jYXQgKF90bXAxMTJfLCAiLCIsIE5VTEwpOwor KwkJCV9nX2ZyZWUwICh2YXJpYW50KTsKKysJCQl2YXJpYW50ID0gX3RtcDExM187CisrCQl9Cisr CX0KKysJX3RtcDExNF8gPSBnX25ldzAgKGdjaGFyKiwgMCArIDEpOworKwlhcmdzID0gX3RtcDEx NF87CisrCWFyZ3NfbGVuZ3RoMSA9IDA7CisrCV9hcmdzX3NpemVfID0gYXJnc19sZW5ndGgxOwor KwlfdG1wMTE1XyA9IGFyZ3M7CisrCV90bXAxMTVfX2xlbmd0aDEgPSBhcmdzX2xlbmd0aDE7Cisr CV90bXAxMTZfID0gc2VsZi0+cHJpdi0+bV94a2JfY29tbWFuZDsKKysJX3RtcDExN18gPSBnX3N0 cmR1cCAoX3RtcDExNl8pOworKwlfdmFsYV9hcnJheV9hZGQyMyAoJmFyZ3MsICZhcmdzX2xlbmd0 aDEsICZfYXJnc19zaXplXywgX3RtcDExN18pOworKwlpZiAoSEFWRV9JQlVTX1hLQikgeworKwkJ Z2NoYXIqKiBfdG1wMTE4XzsKKysJCWdpbnQgX3RtcDExOF9fbGVuZ3RoMTsKKysJCWdjaGFyKiBf dG1wMTE5XzsKKysJCWdjaGFyKiogX3RtcDEyMF87CisrCQlnaW50IF90bXAxMjBfX2xlbmd0aDE7 CisrCQljb25zdCBnY2hhciogX3RtcDEyMV87CisrCQlnY2hhciogX3RtcDEyMl87CisrCQljb25z dCBnY2hhciogX3RtcDEyM187CisrCQljb25zdCBnY2hhciogX3RtcDEyOV87CisrCQlfdG1wMTE4 XyA9IGFyZ3M7CisrCQlfdG1wMTE4X19sZW5ndGgxID0gYXJnc19sZW5ndGgxOworKwkJX3RtcDEx OV8gPSBnX3N0cmR1cCAoIi0tbGF5b3V0Iik7CisrCQlfdmFsYV9hcnJheV9hZGQyNCAoJmFyZ3Ms ICZhcmdzX2xlbmd0aDEsICZfYXJnc19zaXplXywgX3RtcDExOV8pOworKwkJX3RtcDEyMF8gPSBh cmdzOworKwkJX3RtcDEyMF9fbGVuZ3RoMSA9IGFyZ3NfbGVuZ3RoMTsKKysJCV90bXAxMjFfID0g bGF5b3V0OworKwkJX3RtcDEyMl8gPSBnX3N0cmR1cCAoX3RtcDEyMV8pOworKwkJX3ZhbGFfYXJy YXlfYWRkMjUgKCZhcmdzLCAmYXJnc19sZW5ndGgxLCAmX2FyZ3Nfc2l6ZV8sIF90bXAxMjJfKTsK KysJCV90bXAxMjNfID0gdmFyaWFudDsKKysJCWlmIChfdG1wMTIzXyAhPSBOVUxMKSB7CisrCQkJ Z2NoYXIqKiBfdG1wMTI0XzsKKysJCQlnaW50IF90bXAxMjRfX2xlbmd0aDE7CisrCQkJZ2NoYXIq IF90bXAxMjVfOworKwkJCWdjaGFyKiogX3RtcDEyNl87CisrCQkJZ2ludCBfdG1wMTI2X19sZW5n dGgxOworKwkJCWNvbnN0IGdjaGFyKiBfdG1wMTI3XzsKKysJCQlnY2hhciogX3RtcDEyOF87Cisr CQkJX3RtcDEyNF8gPSBhcmdzOworKwkJCV90bXAxMjRfX2xlbmd0aDEgPSBhcmdzX2xlbmd0aDE7 CisrCQkJX3RtcDEyNV8gPSBnX3N0cmR1cCAoIi0tdmFyaWFudCIpOworKwkJCV92YWxhX2FycmF5 X2FkZDI2ICgmYXJncywgJmFyZ3NfbGVuZ3RoMSwgJl9hcmdzX3NpemVfLCBfdG1wMTI1Xyk7Cisr CQkJX3RtcDEyNl8gPSBhcmdzOworKwkJCV90bXAxMjZfX2xlbmd0aDEgPSBhcmdzX2xlbmd0aDE7 CisrCQkJX3RtcDEyN18gPSB2YXJpYW50OworKwkJCV90bXAxMjhfID0gZ19zdHJkdXAgKF90bXAx MjdfKTsKKysJCQlfdmFsYV9hcnJheV9hZGQyNyAoJmFyZ3MsICZhcmdzX2xlbmd0aDEsICZfYXJn c19zaXplXywgX3RtcDEyOF8pOworKwkJfQorKwkJX3RtcDEyOV8gPSBvcHRpb247CisrCQlpZiAo X3RtcDEyOV8gIT0gTlVMTCkgeworKwkJCWdjaGFyKiogX3RtcDEzMF87CisrCQkJZ2ludCBfdG1w MTMwX19sZW5ndGgxOworKwkJCWdjaGFyKiBfdG1wMTMxXzsKKysJCQlnY2hhcioqIF90bXAxMzJf OworKwkJCWdpbnQgX3RtcDEzMl9fbGVuZ3RoMTsKKysJCQljb25zdCBnY2hhciogX3RtcDEzM187 CisrCQkJZ2NoYXIqIF90bXAxMzRfOworKwkJCV90bXAxMzBfID0gYXJnczsKKysJCQlfdG1wMTMw X19sZW5ndGgxID0gYXJnc19sZW5ndGgxOworKwkJCV90bXAxMzFfID0gZ19zdHJkdXAgKCItLW9w dGlvbiIpOworKwkJCV92YWxhX2FycmF5X2FkZDI4ICgmYXJncywgJmFyZ3NfbGVuZ3RoMSwgJl9h cmdzX3NpemVfLCBfdG1wMTMxXyk7CisrCQkJX3RtcDEzMl8gPSBhcmdzOworKwkJCV90bXAxMzJf X2xlbmd0aDEgPSBhcmdzX2xlbmd0aDE7CisrCQkJX3RtcDEzM18gPSBvcHRpb247CisrCQkJX3Rt cDEzNF8gPSBnX3N0cmR1cCAoX3RtcDEzM18pOworKwkJCV92YWxhX2FycmF5X2FkZDI5ICgmYXJn cywgJmFyZ3NfbGVuZ3RoMSwgJl9hcmdzX3NpemVfLCBfdG1wMTM0Xyk7CisrCQl9CisrCX0gZWxz ZSB7CisrCQlnY2hhcioqIF90bXAxMzVfOworKwkJZ2ludCBfdG1wMTM1X19sZW5ndGgxOworKwkJ Y29uc3QgZ2NoYXIqIF90bXAxMzZfOworKwkJZ2NoYXIqIF90bXAxMzdfOworKwkJY29uc3QgZ2No YXIqIF90bXAxMzhfOworKwkJY29uc3QgZ2NoYXIqIF90bXAxNDJfOworKwkJX3RtcDEzNV8gPSBh cmdzOworKwkJX3RtcDEzNV9fbGVuZ3RoMSA9IGFyZ3NfbGVuZ3RoMTsKKysJCV90bXAxMzZfID0g bGF5b3V0OworKwkJX3RtcDEzN18gPSBnX3N0cmR1cCAoX3RtcDEzNl8pOworKwkJX3ZhbGFfYXJy YXlfYWRkMzAgKCZhcmdzLCAmYXJnc19sZW5ndGgxLCAmX2FyZ3Nfc2l6ZV8sIF90bXAxMzdfKTsK KysJCV90bXAxMzhfID0gdmFyaWFudDsKKysJCWlmIChfdG1wMTM4XyAhPSBOVUxMKSB7CisrCQkJ Z2NoYXIqKiBfdG1wMTM5XzsKKysJCQlnaW50IF90bXAxMzlfX2xlbmd0aDE7CisrCQkJY29uc3Qg Z2NoYXIqIF90bXAxNDBfOworKwkJCWdjaGFyKiBfdG1wMTQxXzsKKysJCQlfdG1wMTM5XyA9IGFy Z3M7CisrCQkJX3RtcDEzOV9fbGVuZ3RoMSA9IGFyZ3NfbGVuZ3RoMTsKKysJCQlfdG1wMTQwXyA9 IHZhcmlhbnQ7CisrCQkJX3RtcDE0MV8gPSBnX3N0cmR1cCAoX3RtcDE0MF8pOworKwkJCV92YWxh X2FycmF5X2FkZDMxICgmYXJncywgJmFyZ3NfbGVuZ3RoMSwgJl9hcmdzX3NpemVfLCBfdG1wMTQx Xyk7CisrCQl9CisrCQlfdG1wMTQyXyA9IG9wdGlvbjsKKysJCWlmIChfdG1wMTQyXyAhPSBOVUxM KSB7CisrCQkJZ2NoYXIqKiBfdG1wMTQzXzsKKysJCQlnaW50IF90bXAxNDNfX2xlbmd0aDE7Cisr CQkJY29uc3QgZ2NoYXIqIF90bXAxNDRfOworKwkJCWdjaGFyKiBfdG1wMTQ1XzsKKysJCQlfdG1w MTQzXyA9IGFyZ3M7CisrCQkJX3RtcDE0M19fbGVuZ3RoMSA9IGFyZ3NfbGVuZ3RoMTsKKysJCQlf dG1wMTQ0XyA9IG9wdGlvbjsKKysJCQlfdG1wMTQ1XyA9IGdfc3RyZHVwIChfdG1wMTQ0Xyk7Cisr CQkJX3ZhbGFfYXJyYXlfYWRkMzIgKCZhcmdzLCAmYXJnc19sZW5ndGgxLCAmX2FyZ3Nfc2l6ZV8s IF90bXAxNDVfKTsKKysJCX0KKysJfQorKwl7CisrCQlnY2hhcioqIF90bXAxNDZfOworKwkJZ2lu dCBfdG1wMTQ2X19sZW5ndGgxOworKwkJR1BpZCBfdG1wMTQ3XyA9IDA7CisrCQlfdG1wMTQ2XyA9 IGFyZ3M7CisrCQlfdG1wMTQ2X19sZW5ndGgxID0gYXJnc19sZW5ndGgxOworKwkJZ19zcGF3bl9h c3luYyAoTlVMTCwgX3RtcDE0Nl8sIE5VTEwsIEdfU1BBV05fRE9fTk9UX1JFQVBfQ0hJTEQgfCBH X1NQQVdOX1NFQVJDSF9QQVRILCBOVUxMLCBOVUxMLCAmX3RtcDE0N18sICZfaW5uZXJfZXJyb3Jf KTsKKysJCWNoaWxkX3BpZCA9IF90bXAxNDdfOworKwkJaWYgKF9pbm5lcl9lcnJvcl8gIT0gTlVM TCkgeworKwkJCWlmIChfaW5uZXJfZXJyb3JfLT5kb21haW4gPT0gR19TUEFXTl9FUlJPUikgewor KwkJCQlnb3RvIF9fY2F0Y2g0X2dfc3Bhd25fZXJyb3I7CisrCQkJfQorKwkJCWFyZ3MgPSAoX3Zh bGFfYXJyYXlfZnJlZSAoYXJncywgYXJnc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJl ZSksIE5VTEwpOworKwkJCV9nX2ZyZWUwIChvcHRpb24pOworKwkJCV9nX2ZyZWUwICh2YXJpYW50 KTsKKysJCQlfZ19mcmVlMCAobGF5b3V0KTsKKysJCQlnX2NyaXRpY2FsICgiZmlsZSAlczogbGlu ZSAlZDogdW5leHBlY3RlZCBlcnJvcjogJXMgKCVzLCAlZCkiLCBfX0ZJTEVfXywgX19MSU5FX18s IF9pbm5lcl9lcnJvcl8tPm1lc3NhZ2UsIGdfcXVhcmtfdG9fc3RyaW5nIChfaW5uZXJfZXJyb3Jf LT5kb21haW4pLCBfaW5uZXJfZXJyb3JfLT5jb2RlKTsKKysJCQlnX2NsZWFyX2Vycm9yICgmX2lu bmVyX2Vycm9yXyk7CisrCQkJcmV0dXJuIE5VTEw7CisrCQl9CisrCX0KKysJZ290byBfX2ZpbmFs bHk0OworKwlfX2NhdGNoNF9nX3NwYXduX2Vycm9yOgorKwl7CisrCQlHRXJyb3IqIGVyciA9IE5V TEw7CisrCQlGSUxFKiBfdG1wMTQ4XzsKKysJCUdFcnJvciogX3RtcDE0OV87CisrCQljb25zdCBn Y2hhciogX3RtcDE1MF87CisrCQlnaW50KiBfdG1wMTUxXyA9IE5VTEw7CisrCQlnaW50KiBfdG1w MTUyXzsKKysJCWdpbnQgX3RtcDE1Ml9fbGVuZ3RoMTsKKysJCWVyciA9IF9pbm5lcl9lcnJvcl87 CisrCQlfaW5uZXJfZXJyb3JfID0gTlVMTDsKKysJCV90bXAxNDhfID0gc3RkZXJyOworKwkJX3Rt cDE0OV8gPSBlcnI7CisrCQlfdG1wMTUwXyA9IF90bXAxNDlfLT5tZXNzYWdlOworKwkJZnByaW50 ZiAoX3RtcDE0OF8sICJJQlVTX0VSUk9SOiAlc1xuIiwgX3RtcDE1MF8pOworKwkJX3RtcDE1MV8g PSBnX25ldzAgKGdpbnQsIDIpOworKwkJX3RtcDE1MV9bMF0gPSAtMTsKKysJCV90bXAxNTFfWzFd ID0gMDsKKysJCV90bXAxNTJfID0gX3RtcDE1MV87CisrCQlfdG1wMTUyX19sZW5ndGgxID0gMjsK KysJCWlmIChyZXN1bHRfbGVuZ3RoMSkgeworKwkJCSpyZXN1bHRfbGVuZ3RoMSA9IF90bXAxNTJf X2xlbmd0aDE7CisrCQl9CisrCQlyZXN1bHQgPSBfdG1wMTUyXzsKKysJCV9nX2Vycm9yX2ZyZWUw IChlcnIpOworKwkJYXJncyA9IChfdmFsYV9hcnJheV9mcmVlIChhcmdzLCBhcmdzX2xlbmd0aDEs IChHRGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCQlfZ19mcmVlMCAob3B0aW9uKTsK KysJCV9nX2ZyZWUwICh2YXJpYW50KTsKKysJCV9nX2ZyZWUwIChsYXlvdXQpOworKwkJcmV0dXJu IHJlc3VsdDsKKysJfQorKwlfX2ZpbmFsbHk0OgorKwlpZiAoX2lubmVyX2Vycm9yXyAhPSBOVUxM KSB7CisrCQlhcmdzID0gKF92YWxhX2FycmF5X2ZyZWUgKGFyZ3MsIGFyZ3NfbGVuZ3RoMSwgKEdE ZXN0cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKKysJCV9nX2ZyZWUwIChvcHRpb24pOworKwkJ X2dfZnJlZTAgKHZhcmlhbnQpOworKwkJX2dfZnJlZTAgKGxheW91dCk7CisrCQlnX2NyaXRpY2Fs ICgiZmlsZSAlczogbGluZSAlZDogdW5jYXVnaHQgZXJyb3I6ICVzICglcywgJWQpIiwgX19GSUxF X18sIF9fTElORV9fLCBfaW5uZXJfZXJyb3JfLT5tZXNzYWdlLCBnX3F1YXJrX3RvX3N0cmluZyAo X2lubmVyX2Vycm9yXy0+ZG9tYWluKSwgX2lubmVyX2Vycm9yXy0+Y29kZSk7CisrCQlnX2NsZWFy X2Vycm9yICgmX2lubmVyX2Vycm9yXyk7CisrCQlyZXR1cm4gTlVMTDsKKysJfQorKwlfdG1wMTUz XyA9IGNoaWxkX3BpZDsKKysJc2VsZi0+cHJpdi0+bV94a2JfcGlkID0gX3RtcDE1M187CisrCV90 bXAxNTRfID0gc2VsZi0+cHJpdi0+bV94a2JfcGlkOworKwlnX2NoaWxkX3dhdGNoX2FkZF9mdWxs IChHX1BSSU9SSVRZX0RFRkFVTFRfSURMRSwgX3RtcDE1NF8sIF94a2JfbGF5b3V0X3NldF9sYXlv dXRfY2JfZ2NoaWxkX3dhdGNoX2Z1bmMsIHhrYl9sYXlvdXRfcmVmIChzZWxmKSwgeGtiX2xheW91 dF91bnJlZik7CisrCV90bXAxNTVfID0geGtiX2dyb3VwX2lkOworKwlfdG1wMTU2XyA9IGNoYW5n ZWRfb3B0aW9uOworKwlfdG1wMTU3XyA9IGdfbmV3MCAoZ2ludCwgMik7CisrCV90bXAxNTdfWzBd ID0gX3RtcDE1NV87CisrCV90bXAxNTdfWzFdID0gX3RtcDE1Nl87CisrCV90bXAxNThfID0gX3Rt cDE1N187CisrCV90bXAxNThfX2xlbmd0aDEgPSAyOworKwlpZiAocmVzdWx0X2xlbmd0aDEpIHsK KysJCSpyZXN1bHRfbGVuZ3RoMSA9IF90bXAxNThfX2xlbmd0aDE7CisrCX0KKysJcmVzdWx0ID0g X3RtcDE1OF87CisrCWFyZ3MgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoYXJncywgYXJnc19sZW5ndGgx LCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOworKwlfZ19mcmVlMCAob3B0aW9uKTsK KysJX2dfZnJlZTAgKHZhcmlhbnQpOworKwlfZ19mcmVlMCAobGF5b3V0KTsKKysJcmV0dXJuIHJl c3VsdDsKKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3hrYl9sYXlvdXRfc2V0X3htb2RtYXBfY2Jf Z2NoaWxkX3dhdGNoX2Z1bmMgKEdQaWQgcGlkLCBnaW50IHN0YXR1cywgZ3BvaW50ZXIgc2VsZikg eworKwl4a2JfbGF5b3V0X3NldF94bW9kbWFwX2NiIChzZWxmLCBwaWQsIHN0YXR1cyk7CisrfQor KworKworK3ZvaWQgeGtiX2xheW91dF9zZXRfeG1vZG1hcCAoWEtCTGF5b3V0KiBzZWxmKSB7Cisr CWdib29sZWFuIF90bXAwXzsKKysJR1BpZCBfdG1wMV87CisrCWNvbnN0IGdjaGFyKiBfdG1wMl87 CisrCWdjaGFyKiBfdG1wM18gPSBOVUxMOworKwlnY2hhciogeG1vZG1hcF9jbWRwYXRoOworKwlj b25zdCBnY2hhciogX3RtcDRfOworKwljb25zdCBnY2hhciogX3RtcDdfID0gTlVMTDsKKysJZ2No YXIqIF90bXA4XzsKKysJZ2NoYXIqIGhvbWVkaXI7CisrCWdjaGFyKiogX3RtcDlfOworKwlnaW50 IF90bXA5X19sZW5ndGgxOworKwlHRXJyb3IgKiBfaW5uZXJfZXJyb3JfID0gTlVMTDsKKysJZ19y ZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKKysJX3RtcDBfID0gc2VsZi0+cHJpdi0+bV91 c2VfeG1vZG1hcDsKKysJaWYgKCFfdG1wMF8pIHsKKysJCXJldHVybjsKKysJfQorKwlfdG1wMV8g PSBzZWxmLT5wcml2LT5tX3htb2RtYXBfcGlkOworKwlpZiAoX3RtcDFfICE9ICgoR1BpZCkgKC0x KSkpIHsKKysJCXJldHVybjsKKysJfQorKwlfdG1wMl8gPSBzZWxmLT5wcml2LT5tX3htb2RtYXBf Y29tbWFuZDsKKysJX3RtcDNfID0geGtiX2xheW91dF9nZXRfZnVsbHBhdGggKHNlbGYsIF90bXAy Xyk7CisrCXhtb2RtYXBfY21kcGF0aCA9IF90bXAzXzsKKysJX3RtcDRfID0geG1vZG1hcF9jbWRw YXRoOworKwlpZiAoZ19zdHJjbXAwIChfdG1wNF8sICIiKSA9PSAwKSB7CisrCQljb25zdCBnY2hh ciogX3RtcDVfOworKwkJZ2NoYXIqIF90bXA2XzsKKysJCV90bXA1XyA9IHNlbGYtPnByaXYtPm1f eG1vZG1hcF9jb21tYW5kOworKwkJX3RtcDZfID0gZ19zdHJkdXAgKF90bXA1Xyk7CisrCQlfZ19m cmVlMCAoeG1vZG1hcF9jbWRwYXRoKTsKKysJCXhtb2RtYXBfY21kcGF0aCA9IF90bXA2XzsKKysJ fQorKwlfdG1wN18gPSBnX2dldF9ob21lX2RpciAoKTsKKysJX3RtcDhfID0gZ19zdHJkdXAgKF90 bXA3Xyk7CisrCWhvbWVkaXIgPSBfdG1wOF87CisrCV90bXA5XyA9IHNlbGYtPnByaXYtPm1feG1v ZG1hcF9rbm93bl9maWxlczsKKysJX3RtcDlfX2xlbmd0aDEgPSBzZWxmLT5wcml2LT5tX3htb2Rt YXBfa25vd25fZmlsZXNfbGVuZ3RoMTsKKysJeworKwkJZ2NoYXIqKiB4bW9kbWFwX2ZpbGVfY29s bGVjdGlvbiA9IE5VTEw7CisrCQlnaW50IHhtb2RtYXBfZmlsZV9jb2xsZWN0aW9uX2xlbmd0aDEg PSAwOworKwkJZ2ludCBfeG1vZG1hcF9maWxlX2NvbGxlY3Rpb25fc2l6ZV8gPSAwOworKwkJZ2lu dCB4bW9kbWFwX2ZpbGVfaXQgPSAwOworKwkJeG1vZG1hcF9maWxlX2NvbGxlY3Rpb24gPSBfdG1w OV87CisrCQl4bW9kbWFwX2ZpbGVfY29sbGVjdGlvbl9sZW5ndGgxID0gX3RtcDlfX2xlbmd0aDE7 CisrCQlmb3IgKHhtb2RtYXBfZmlsZV9pdCA9IDA7IHhtb2RtYXBfZmlsZV9pdCA8IF90bXA5X19s ZW5ndGgxOyB4bW9kbWFwX2ZpbGVfaXQgPSB4bW9kbWFwX2ZpbGVfaXQgKyAxKSB7CisrCQkJZ2No YXIqIF90bXAxMF87CisrCQkJZ2NoYXIqIHhtb2RtYXBfZmlsZSA9IE5VTEw7CisrCQkJX3RtcDEw XyA9IGdfc3RyZHVwICh4bW9kbWFwX2ZpbGVfY29sbGVjdGlvblt4bW9kbWFwX2ZpbGVfaXRdKTsK KysJCQl4bW9kbWFwX2ZpbGUgPSBfdG1wMTBfOworKwkJCXsKKysJCQkJY29uc3QgZ2NoYXIqIF90 bXAxMV87CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1wMTJfOworKwkJCQlnY2hhciogX3RtcDEzXyA9 IE5VTEw7CisrCQkJCWdjaGFyKiB4bW9kbWFwX2ZpbGVwYXRoOworKwkJCQljb25zdCBnY2hhciog X3RtcDE0XzsKKysJCQkJZ2Jvb2xlYW4gX3RtcDE1XyA9IEZBTFNFOworKwkJCQljb25zdCBnY2hh ciogX3RtcDE2XzsKKysJCQkJZ2NoYXIqIF90bXAxN187CisrCQkJCWNvbnN0IGdjaGFyKiBfdG1w MThfOworKwkJCQlnY2hhciogX3RtcDE5XzsKKysJCQkJZ2NoYXIqKiBfdG1wMjBfID0gTlVMTDsK KysJCQkJZ2NoYXIqKiBhcmdzOworKwkJCQlnaW50IGFyZ3NfbGVuZ3RoMTsKKysJCQkJZ2ludCBf YXJnc19zaXplXzsKKysJCQkJR1BpZCBjaGlsZF9waWQgPSAwOworKwkJCQlHUGlkIF90bXAyNl87 CisrCQkJCUdQaWQgX3RtcDI3XzsKKysJCQkJX3RtcDExXyA9IGhvbWVkaXI7CisrCQkJCV90bXAx Ml8gPSB4bW9kbWFwX2ZpbGU7CisrCQkJCV90bXAxM18gPSBnX2J1aWxkX2ZpbGVuYW1lIChfdG1w MTFfLCBfdG1wMTJfLCBOVUxMKTsKKysJCQkJeG1vZG1hcF9maWxlcGF0aCA9IF90bXAxM187Cisr CQkJCV90bXAxNF8gPSB4bW9kbWFwX2ZpbGVwYXRoOworKwkJCQlfdG1wMTVfID0gZ19maWxlX3Rl c3QgKF90bXAxNF8sIEdfRklMRV9URVNUX0VYSVNUUyk7CisrCQkJCWlmICghX3RtcDE1Xykgewor KwkJCQkJX2dfZnJlZTAgKHhtb2RtYXBfZmlsZXBhdGgpOworKwkJCQkJX2dfZnJlZTAgKHhtb2Rt YXBfZmlsZSk7CisrCQkJCQljb250aW51ZTsKKysJCQkJfQorKwkJCQlfdG1wMTZfID0geG1vZG1h cF9jbWRwYXRoOworKwkJCQlfdG1wMTdfID0gZ19zdHJkdXAgKF90bXAxNl8pOworKwkJCQlfdG1w MThfID0geG1vZG1hcF9maWxlcGF0aDsKKysJCQkJX3RtcDE5XyA9IGdfc3RyZHVwIChfdG1wMThf KTsKKysJCQkJX3RtcDIwXyA9IGdfbmV3MCAoZ2NoYXIqLCAyICsgMSk7CisrCQkJCV90bXAyMF9b MF0gPSBfdG1wMTdfOworKwkJCQlfdG1wMjBfWzFdID0gX3RtcDE5XzsKKysJCQkJYXJncyA9IF90 bXAyMF87CisrCQkJCWFyZ3NfbGVuZ3RoMSA9IDI7CisrCQkJCV9hcmdzX3NpemVfID0gYXJnc19s ZW5ndGgxOworKwkJCQl7CisrCQkJCQlnY2hhcioqIF90bXAyMV87CisrCQkJCQlnaW50IF90bXAy MV9fbGVuZ3RoMTsKKysJCQkJCUdQaWQgX3RtcDIyXyA9IDA7CisrCQkJCQlfdG1wMjFfID0gYXJn czsKKysJCQkJCV90bXAyMV9fbGVuZ3RoMSA9IGFyZ3NfbGVuZ3RoMTsKKysJCQkJCWdfc3Bhd25f YXN5bmMgKE5VTEwsIF90bXAyMV8sIE5VTEwsIEdfU1BBV05fRE9fTk9UX1JFQVBfQ0hJTEQgfCBH X1NQQVdOX1NFQVJDSF9QQVRILCBOVUxMLCBOVUxMLCAmX3RtcDIyXywgJl9pbm5lcl9lcnJvcl8p OworKwkJCQkJY2hpbGRfcGlkID0gX3RtcDIyXzsKKysJCQkJCWlmIChfaW5uZXJfZXJyb3JfICE9 IE5VTEwpIHsKKysJCQkJCQlpZiAoX2lubmVyX2Vycm9yXy0+ZG9tYWluID09IEdfU1BBV05fRVJS T1IpIHsKKysJCQkJCQkJZ290byBfX2NhdGNoNV9nX3NwYXduX2Vycm9yOworKwkJCQkJCX0KKysJ CQkJCQlhcmdzID0gKF92YWxhX2FycmF5X2ZyZWUgKGFyZ3MsIGFyZ3NfbGVuZ3RoMSwgKEdEZXN0 cm95Tm90aWZ5KSBnX2ZyZWUpLCBOVUxMKTsKKysJCQkJCQlfZ19mcmVlMCAoeG1vZG1hcF9maWxl cGF0aCk7CisrCQkJCQkJX2dfZnJlZTAgKHhtb2RtYXBfZmlsZSk7CisrCQkJCQkJX2dfZnJlZTAg KGhvbWVkaXIpOworKwkJCQkJCV9nX2ZyZWUwICh4bW9kbWFwX2NtZHBhdGgpOworKwkJCQkJCWdf Y3JpdGljYWwgKCJmaWxlICVzOiBsaW5lICVkOiB1bmV4cGVjdGVkIGVycm9yOiAlcyAoJXMsICVk KSIsIF9fRklMRV9fLCBfX0xJTkVfXywgX2lubmVyX2Vycm9yXy0+bWVzc2FnZSwgZ19xdWFya190 b19zdHJpbmcgKF9pbm5lcl9lcnJvcl8tPmRvbWFpbiksIF9pbm5lcl9lcnJvcl8tPmNvZGUpOwor KwkJCQkJCWdfY2xlYXJfZXJyb3IgKCZfaW5uZXJfZXJyb3JfKTsKKysJCQkJCQlyZXR1cm47Cisr CQkJCQl9CisrCQkJCX0KKysJCQkJZ290byBfX2ZpbmFsbHk1OworKwkJCQlfX2NhdGNoNV9nX3Nw YXduX2Vycm9yOgorKwkJCQl7CisrCQkJCQlHRXJyb3IqIGVyciA9IE5VTEw7CisrCQkJCQlGSUxF KiBfdG1wMjNfOworKwkJCQkJR0Vycm9yKiBfdG1wMjRfOworKwkJCQkJY29uc3QgZ2NoYXIqIF90 bXAyNV87CisrCQkJCQllcnIgPSBfaW5uZXJfZXJyb3JfOworKwkJCQkJX2lubmVyX2Vycm9yXyA9 IE5VTEw7CisrCQkJCQlfdG1wMjNfID0gc3RkZXJyOworKwkJCQkJX3RtcDI0XyA9IGVycjsKKysJ CQkJCV90bXAyNV8gPSBfdG1wMjRfLT5tZXNzYWdlOworKwkJCQkJZnByaW50ZiAoX3RtcDIzXywg IklCVVNfRVJST1I6ICVzXG4iLCBfdG1wMjVfKTsKKysJCQkJCV9nX2Vycm9yX2ZyZWUwIChlcnIp OworKwkJCQkJYXJncyA9IChfdmFsYV9hcnJheV9mcmVlIChhcmdzLCBhcmdzX2xlbmd0aDEsIChH RGVzdHJveU5vdGlmeSkgZ19mcmVlKSwgTlVMTCk7CisrCQkJCQlfZ19mcmVlMCAoeG1vZG1hcF9m aWxlcGF0aCk7CisrCQkJCQlfZ19mcmVlMCAoeG1vZG1hcF9maWxlKTsKKysJCQkJCV9nX2ZyZWUw IChob21lZGlyKTsKKysJCQkJCV9nX2ZyZWUwICh4bW9kbWFwX2NtZHBhdGgpOworKwkJCQkJcmV0 dXJuOworKwkJCQl9CisrCQkJCV9fZmluYWxseTU6CisrCQkJCWlmIChfaW5uZXJfZXJyb3JfICE9 IE5VTEwpIHsKKysJCQkJCWFyZ3MgPSAoX3ZhbGFfYXJyYXlfZnJlZSAoYXJncywgYXJnc19sZW5n dGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwpOworKwkJCQkJX2dfZnJlZTAgKHht b2RtYXBfZmlsZXBhdGgpOworKwkJCQkJX2dfZnJlZTAgKHhtb2RtYXBfZmlsZSk7CisrCQkJCQlf Z19mcmVlMCAoaG9tZWRpcik7CisrCQkJCQlfZ19mcmVlMCAoeG1vZG1hcF9jbWRwYXRoKTsKKysJ CQkJCWdfY3JpdGljYWwgKCJmaWxlICVzOiBsaW5lICVkOiB1bmNhdWdodCBlcnJvcjogJXMgKCVz LCAlZCkiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9pbm5lcl9lcnJvcl8tPm1lc3NhZ2UsIGdfcXVh cmtfdG9fc3RyaW5nIChfaW5uZXJfZXJyb3JfLT5kb21haW4pLCBfaW5uZXJfZXJyb3JfLT5jb2Rl KTsKKysJCQkJCWdfY2xlYXJfZXJyb3IgKCZfaW5uZXJfZXJyb3JfKTsKKysJCQkJCXJldHVybjsK KysJCQkJfQorKwkJCQlfdG1wMjZfID0gY2hpbGRfcGlkOworKwkJCQlzZWxmLT5wcml2LT5tX3ht b2RtYXBfcGlkID0gX3RtcDI2XzsKKysJCQkJX3RtcDI3XyA9IHNlbGYtPnByaXYtPm1feG1vZG1h cF9waWQ7CisrCQkJCWdfY2hpbGRfd2F0Y2hfYWRkX2Z1bGwgKEdfUFJJT1JJVFlfREVGQVVMVF9J RExFLCBfdG1wMjdfLCBfeGtiX2xheW91dF9zZXRfeG1vZG1hcF9jYl9nY2hpbGRfd2F0Y2hfZnVu YywgeGtiX2xheW91dF9yZWYgKHNlbGYpLCB4a2JfbGF5b3V0X3VucmVmKTsKKysJCQkJYXJncyA9 IChfdmFsYV9hcnJheV9mcmVlIChhcmdzLCBhcmdzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkg Z19mcmVlKSwgTlVMTCk7CisrCQkJCV9nX2ZyZWUwICh4bW9kbWFwX2ZpbGVwYXRoKTsKKysJCQkJ X2dfZnJlZTAgKHhtb2RtYXBfZmlsZSk7CisrCQkJCWJyZWFrOworKwkJCX0KKysJCX0KKysJfQor KwlfZ19mcmVlMCAoaG9tZWRpcik7CisrCV9nX2ZyZWUwICh4bW9kbWFwX2NtZHBhdGgpOworK30K KysKKysKKyt2b2lkIHhrYl9sYXlvdXRfcmVzZXRfbGF5b3V0IChYS0JMYXlvdXQqIHNlbGYpIHsK KysJZ2NoYXIqIF90bXAwXyA9IE5VTEw7CisrCWdjaGFyKiBfdG1wMV8gPSBOVUxMOworKwlnY2hh ciogX3RtcDJfID0gTlVMTDsKKysJZ19yZXR1cm5faWZfZmFpbCAoc2VsZiAhPSBOVUxMKTsKKysJ X3RtcDBfID0geGtiX2xheW91dF9nZXRfbGF5b3V0IChzZWxmKTsKKysJX2dfZnJlZTAgKHNlbGYt PnByaXYtPm1fZGVmYXVsdF9sYXlvdXQpOworKwlzZWxmLT5wcml2LT5tX2RlZmF1bHRfbGF5b3V0 ID0gX3RtcDBfOworKwlfdG1wMV8gPSB4a2JfbGF5b3V0X2dldF92YXJpYW50IChzZWxmKTsKKysJ X2dfZnJlZTAgKHNlbGYtPnByaXYtPm1fZGVmYXVsdF92YXJpYW50KTsKKysJc2VsZi0+cHJpdi0+ bV9kZWZhdWx0X3ZhcmlhbnQgPSBfdG1wMV87CisrCV90bXAyXyA9IHhrYl9sYXlvdXRfZ2V0X29w dGlvbiAoc2VsZik7CisrCV9nX2ZyZWUwIChzZWxmLT5wcml2LT5tX2RlZmF1bHRfb3B0aW9uKTsK KysJc2VsZi0+cHJpdi0+bV9kZWZhdWx0X29wdGlvbiA9IF90bXAyXzsKKyt9CisrCisrCisrc3Rh dGljIHZvaWQgdmFsdWVfeGtiX2xheW91dF9pbml0IChHVmFsdWUqIHZhbHVlKSB7CisrCXZhbHVl LT5kYXRhWzBdLnZfcG9pbnRlciA9IE5VTEw7CisrfQorKworKworK3N0YXRpYyB2b2lkIHZhbHVl X3hrYl9sYXlvdXRfZnJlZV92YWx1ZSAoR1ZhbHVlKiB2YWx1ZSkgeworKwlpZiAodmFsdWUtPmRh dGFbMF0udl9wb2ludGVyKSB7CisrCQl4a2JfbGF5b3V0X3VucmVmICh2YWx1ZS0+ZGF0YVswXS52 X3BvaW50ZXIpOworKwl9CisrfQorKworKworK3N0YXRpYyB2b2lkIHZhbHVlX3hrYl9sYXlvdXRf Y29weV92YWx1ZSAoY29uc3QgR1ZhbHVlKiBzcmNfdmFsdWUsIEdWYWx1ZSogZGVzdF92YWx1ZSkg eworKwlpZiAoc3JjX3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcikgeworKwkJZGVzdF92YWx1ZS0+ ZGF0YVswXS52X3BvaW50ZXIgPSB4a2JfbGF5b3V0X3JlZiAoc3JjX3ZhbHVlLT5kYXRhWzBdLnZf cG9pbnRlcik7CisrCX0gZWxzZSB7CisrCQlkZXN0X3ZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlciA9 IE5VTEw7CisrCX0KKyt9CisrCisrCisrc3RhdGljIGdwb2ludGVyIHZhbHVlX3hrYl9sYXlvdXRf cGVla19wb2ludGVyIChjb25zdCBHVmFsdWUqIHZhbHVlKSB7CisrCXJldHVybiB2YWx1ZS0+ZGF0 YVswXS52X3BvaW50ZXI7CisrfQorKworKworK3N0YXRpYyBnY2hhciogdmFsdWVfeGtiX2xheW91 dF9jb2xsZWN0X3ZhbHVlIChHVmFsdWUqIHZhbHVlLCBndWludCBuX2NvbGxlY3RfdmFsdWVzLCBH VHlwZUNWYWx1ZSogY29sbGVjdF92YWx1ZXMsIGd1aW50IGNvbGxlY3RfZmxhZ3MpIHsKKysJaWYg KGNvbGxlY3RfdmFsdWVzWzBdLnZfcG9pbnRlcikgeworKwkJWEtCTGF5b3V0KiBvYmplY3Q7Cisr CQlvYmplY3QgPSBjb2xsZWN0X3ZhbHVlc1swXS52X3BvaW50ZXI7CisrCQlpZiAob2JqZWN0LT5w YXJlbnRfaW5zdGFuY2UuZ19jbGFzcyA9PSBOVUxMKSB7CisrCQkJcmV0dXJuIGdfc3RyY29uY2F0 ICgiaW52YWxpZCB1bmNsYXNzZWQgb2JqZWN0IHBvaW50ZXIgZm9yIHZhbHVlIHR5cGUgYCIsIEdf VkFMVUVfVFlQRV9OQU1FICh2YWx1ZSksICInIiwgTlVMTCk7CisrCQl9IGVsc2UgaWYgKCFnX3Zh bHVlX3R5cGVfY29tcGF0aWJsZSAoR19UWVBFX0ZST01fSU5TVEFOQ0UgKG9iamVjdCksIEdfVkFM VUVfVFlQRSAodmFsdWUpKSkgeworKwkJCXJldHVybiBnX3N0cmNvbmNhdCAoImludmFsaWQgb2Jq ZWN0IHR5cGUgYCIsIGdfdHlwZV9uYW1lIChHX1RZUEVfRlJPTV9JTlNUQU5DRSAob2JqZWN0KSks ICInIGZvciB2YWx1ZSB0eXBlIGAiLCBHX1ZBTFVFX1RZUEVfTkFNRSAodmFsdWUpLCAiJyIsIE5V TEwpOworKwkJfQorKwkJdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0geGtiX2xheW91dF9yZWYg KG9iamVjdCk7CisrCX0gZWxzZSB7CisrCQl2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSBOVUxM OworKwl9CisrCXJldHVybiBOVUxMOworK30KKysKKysKKytzdGF0aWMgZ2NoYXIqIHZhbHVlX3hr Yl9sYXlvdXRfbGNvcHlfdmFsdWUgKGNvbnN0IEdWYWx1ZSogdmFsdWUsIGd1aW50IG5fY29sbGVj dF92YWx1ZXMsIEdUeXBlQ1ZhbHVlKiBjb2xsZWN0X3ZhbHVlcywgZ3VpbnQgY29sbGVjdF9mbGFn cykgeworKwlYS0JMYXlvdXQqKiBvYmplY3RfcDsKKysJb2JqZWN0X3AgPSBjb2xsZWN0X3ZhbHVl c1swXS52X3BvaW50ZXI7CisrCWlmICghb2JqZWN0X3ApIHsKKysJCXJldHVybiBnX3N0cmR1cF9w cmludGYgKCJ2YWx1ZSBsb2NhdGlvbiBmb3IgYCVzJyBwYXNzZWQgYXMgTlVMTCIsIEdfVkFMVUVf VFlQRV9OQU1FICh2YWx1ZSkpOworKwl9CisrCWlmICghdmFsdWUtPmRhdGFbMF0udl9wb2ludGVy KSB7CisrCQkqb2JqZWN0X3AgPSBOVUxMOworKwl9IGVsc2UgaWYgKGNvbGxlY3RfZmxhZ3MgJiBH X1ZBTFVFX05PQ09QWV9DT05URU5UUykgeworKwkJKm9iamVjdF9wID0gdmFsdWUtPmRhdGFbMF0u dl9wb2ludGVyOworKwl9IGVsc2UgeworKwkJKm9iamVjdF9wID0geGtiX2xheW91dF9yZWYgKHZh bHVlLT5kYXRhWzBdLnZfcG9pbnRlcik7CisrCX0KKysJcmV0dXJuIE5VTEw7CisrfQorKworKwor K0dQYXJhbVNwZWMqIHBhcmFtX3NwZWNfeGtiX2xheW91dCAoY29uc3QgZ2NoYXIqIG5hbWUsIGNv bnN0IGdjaGFyKiBuaWNrLCBjb25zdCBnY2hhciogYmx1cmIsIEdUeXBlIG9iamVjdF90eXBlLCBH UGFyYW1GbGFncyBmbGFncykgeworKwlQYXJhbVNwZWNYS0JMYXlvdXQqIHNwZWM7CisrCWdfcmV0 dXJuX3ZhbF9pZl9mYWlsIChnX3R5cGVfaXNfYSAob2JqZWN0X3R5cGUsIFRZUEVfWEtCX0xBWU9V VCksIE5VTEwpOworKwlzcGVjID0gZ19wYXJhbV9zcGVjX2ludGVybmFsIChHX1RZUEVfUEFSQU1f T0JKRUNULCBuYW1lLCBuaWNrLCBibHVyYiwgZmxhZ3MpOworKwlHX1BBUkFNX1NQRUMgKHNwZWMp LT52YWx1ZV90eXBlID0gb2JqZWN0X3R5cGU7CisrCXJldHVybiBHX1BBUkFNX1NQRUMgKHNwZWMp OworK30KKysKKysKKytncG9pbnRlciB2YWx1ZV9nZXRfeGtiX2xheW91dCAoY29uc3QgR1ZhbHVl KiB2YWx1ZSkgeworKwlnX3JldHVybl92YWxfaWZfZmFpbCAoR19UWVBFX0NIRUNLX1ZBTFVFX1RZ UEUgKHZhbHVlLCBUWVBFX1hLQl9MQVlPVVQpLCBOVUxMKTsKKysJcmV0dXJuIHZhbHVlLT5kYXRh WzBdLnZfcG9pbnRlcjsKKyt9CisrCisrCisrdm9pZCB2YWx1ZV9zZXRfeGtiX2xheW91dCAoR1Zh bHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdl9vYmplY3QpIHsKKysJWEtCTGF5b3V0KiBvbGQ7CisrCWdf cmV0dXJuX2lmX2ZhaWwgKEdfVFlQRV9DSEVDS19WQUxVRV9UWVBFICh2YWx1ZSwgVFlQRV9YS0Jf TEFZT1VUKSk7CisrCW9sZCA9IHZhbHVlLT5kYXRhWzBdLnZfcG9pbnRlcjsKKysJaWYgKHZfb2Jq ZWN0KSB7CisrCQlnX3JldHVybl9pZl9mYWlsIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAo dl9vYmplY3QsIFRZUEVfWEtCX0xBWU9VVCkpOworKwkJZ19yZXR1cm5faWZfZmFpbCAoZ192YWx1 ZV90eXBlX2NvbXBhdGlibGUgKEdfVFlQRV9GUk9NX0lOU1RBTkNFICh2X29iamVjdCksIEdfVkFM VUVfVFlQRSAodmFsdWUpKSk7CisrCQl2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIgPSB2X29iamVj dDsKKysJCXhrYl9sYXlvdXRfcmVmICh2YWx1ZS0+ZGF0YVswXS52X3BvaW50ZXIpOworKwl9IGVs c2UgeworKwkJdmFsdWUtPmRhdGFbMF0udl9wb2ludGVyID0gTlVMTDsKKysJfQorKwlpZiAob2xk KSB7CisrCQl4a2JfbGF5b3V0X3VucmVmIChvbGQpOworKwl9CisrfQorKworKworK3ZvaWQgdmFs dWVfdGFrZV94a2JfbGF5b3V0IChHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB2X29iamVjdCkgewor KwlYS0JMYXlvdXQqIG9sZDsKKysJZ19yZXR1cm5faWZfZmFpbCAoR19UWVBFX0NIRUNLX1ZBTFVF X1RZUEUgKHZhbHVlLCBUWVBFX1hLQl9MQVlPVVQpKTsKKysJb2xkID0gdmFsdWUtPmRhdGFbMF0u dl9wb2ludGVyOworKwlpZiAodl9vYmplY3QpIHsKKysJCWdfcmV0dXJuX2lmX2ZhaWwgKEdfVFlQ RV9DSEVDS19JTlNUQU5DRV9UWVBFICh2X29iamVjdCwgVFlQRV9YS0JfTEFZT1VUKSk7CisrCQln X3JldHVybl9pZl9mYWlsIChnX3ZhbHVlX3R5cGVfY29tcGF0aWJsZSAoR19UWVBFX0ZST01fSU5T VEFOQ0UgKHZfb2JqZWN0KSwgR19WQUxVRV9UWVBFICh2YWx1ZSkpKTsKKysJCXZhbHVlLT5kYXRh WzBdLnZfcG9pbnRlciA9IHZfb2JqZWN0OworKwl9IGVsc2UgeworKwkJdmFsdWUtPmRhdGFbMF0u dl9wb2ludGVyID0gTlVMTDsKKysJfQorKwlpZiAob2xkKSB7CisrCQl4a2JfbGF5b3V0X3VucmVm IChvbGQpOworKwl9CisrfQorKworKworK3N0YXRpYyB2b2lkIHhrYl9sYXlvdXRfY2xhc3NfaW5p dCAoWEtCTGF5b3V0Q2xhc3MgKiBrbGFzcykgeworKwl4a2JfbGF5b3V0X3BhcmVudF9jbGFzcyA9 IGdfdHlwZV9jbGFzc19wZWVrX3BhcmVudCAoa2xhc3MpOworKwlYS0JfTEFZT1VUX0NMQVNTIChr bGFzcyktPmZpbmFsaXplID0geGtiX2xheW91dF9maW5hbGl6ZTsKKysJZ190eXBlX2NsYXNzX2Fk ZF9wcml2YXRlIChrbGFzcywgc2l6ZW9mIChYS0JMYXlvdXRQcml2YXRlKSk7CisrfQorKworKwor K3N0YXRpYyB2b2lkIHhrYl9sYXlvdXRfaW5zdGFuY2VfaW5pdCAoWEtCTGF5b3V0ICogc2VsZikg eworKwlnY2hhciogX3RtcDBfOworKwlnY2hhcioqIF90bXAxXyA9IE5VTEw7CisrCWdjaGFyKiBf dG1wMl87CisrCWdjaGFyKiBfdG1wM187CisrCWdjaGFyKiBfdG1wNF87CisrCWdjaGFyKiBfdG1w NV87CisrCWdjaGFyKiBfdG1wNl87CisrCWdjaGFyKiogX3RtcDdfID0gTlVMTDsKKysJZ2NoYXIq IF90bXA4XzsKKysJZ2NoYXIqIF90bXA5XzsKKysJZ2NoYXIqIF90bXAxMF87CisrCXNlbGYtPnBy aXYgPSBYS0JfTEFZT1VUX0dFVF9QUklWQVRFIChzZWxmKTsKKysJX3RtcDBfID0gZ19zdHJkdXAg KElCVVNfWEtCX0NPTU1BTkQpOworKwlzZWxmLT5wcml2LT5tX3hrYl9jb21tYW5kID0gX3RtcDBf OworKwlzZWxmLT5wcml2LT5tX2NvbmZpZyA9IE5VTEw7CisrCV90bXAxXyA9IGdfbmV3MCAoZ2No YXIqLCAwICsgMSk7CisrCXNlbGYtPnByaXYtPm1feGtiX2xhdGluX2xheW91dHMgPSBfdG1wMV87 CisrCXNlbGYtPnByaXYtPm1feGtiX2xhdGluX2xheW91dHNfbGVuZ3RoMSA9IDA7CisrCXNlbGYt PnByaXYtPl9tX3hrYl9sYXRpbl9sYXlvdXRzX3NpemVfID0gc2VsZi0+cHJpdi0+bV94a2JfbGF0 aW5fbGF5b3V0c19sZW5ndGgxOworKwlzZWxmLT5wcml2LT5tX3hrYl9waWQgPSAoR1BpZCkgKC0x KTsKKysJc2VsZi0+cHJpdi0+bV94bW9kbWFwX3BpZCA9IChHUGlkKSAoLTEpOworKwlfdG1wMl8g PSBnX3N0cmR1cCAoInhtb2RtYXAiKTsKKysJc2VsZi0+cHJpdi0+bV94bW9kbWFwX2NvbW1hbmQg PSBfdG1wMl87CisrCXNlbGYtPnByaXYtPm1fdXNlX3htb2RtYXAgPSBUUlVFOworKwlfdG1wM18g PSBnX3N0cmR1cCAoIi54bW9kbWFwIik7CisrCV90bXA0XyA9IGdfc3RyZHVwICgiLnhtb2RtYXBy YyIpOworKwlfdG1wNV8gPSBnX3N0cmR1cCAoIi5YbW9kbWFwIik7CisrCV90bXA2XyA9IGdfc3Ry ZHVwICgiLlhtb2RtYXByYyIpOworKwlfdG1wN18gPSBnX25ldzAgKGdjaGFyKiwgNCArIDEpOwor KwlfdG1wN19bMF0gPSBfdG1wM187CisrCV90bXA3X1sxXSA9IF90bXA0XzsKKysJX3RtcDdfWzJd ID0gX3RtcDVfOworKwlfdG1wN19bM10gPSBfdG1wNl87CisrCXNlbGYtPnByaXYtPm1feG1vZG1h cF9rbm93bl9maWxlcyA9IF90bXA3XzsKKysJc2VsZi0+cHJpdi0+bV94bW9kbWFwX2tub3duX2Zp bGVzX2xlbmd0aDEgPSA0OworKwlzZWxmLT5wcml2LT5fbV94bW9kbWFwX2tub3duX2ZpbGVzX3Np emVfID0gc2VsZi0+cHJpdi0+bV94bW9kbWFwX2tub3duX2ZpbGVzX2xlbmd0aDE7CisrCV90bXA4 XyA9IGdfc3RyZHVwICgiIik7CisrCXNlbGYtPnByaXYtPm1fZGVmYXVsdF9sYXlvdXQgPSBfdG1w OF87CisrCV90bXA5XyA9IGdfc3RyZHVwICgiIik7CisrCXNlbGYtPnByaXYtPm1fZGVmYXVsdF92 YXJpYW50ID0gX3RtcDlfOworKwlfdG1wMTBfID0gZ19zdHJkdXAgKCIiKTsKKysJc2VsZi0+cHJp di0+bV9kZWZhdWx0X29wdGlvbiA9IF90bXAxMF87CisrCXNlbGYtPnJlZl9jb3VudCA9IDE7Cisr fQorKworKworK3N0YXRpYyB2b2lkIHhrYl9sYXlvdXRfZmluYWxpemUgKFhLQkxheW91dCogb2Jq KSB7CisrCVhLQkxheW91dCAqIHNlbGY7CisrCXNlbGYgPSBYS0JfTEFZT1VUIChvYmopOworKwlf Z19mcmVlMCAoc2VsZi0+cHJpdi0+bV94a2JfY29tbWFuZCk7CisrCV9nX29iamVjdF91bnJlZjAg KHNlbGYtPnByaXYtPm1fY29uZmlnKTsKKysJc2VsZi0+cHJpdi0+bV94a2JfbGF0aW5fbGF5b3V0 cyA9IChfdmFsYV9hcnJheV9mcmVlIChzZWxmLT5wcml2LT5tX3hrYl9sYXRpbl9sYXlvdXRzLCBz ZWxmLT5wcml2LT5tX3hrYl9sYXRpbl9sYXlvdXRzX2xlbmd0aDEsIChHRGVzdHJveU5vdGlmeSkg Z19mcmVlKSwgTlVMTCk7CisrCV9nX2ZyZWUwIChzZWxmLT5wcml2LT5tX3htb2RtYXBfY29tbWFu ZCk7CisrCXNlbGYtPnByaXYtPm1feG1vZG1hcF9rbm93bl9maWxlcyA9IChfdmFsYV9hcnJheV9m cmVlIChzZWxmLT5wcml2LT5tX3htb2RtYXBfa25vd25fZmlsZXMsIHNlbGYtPnByaXYtPm1feG1v ZG1hcF9rbm93bl9maWxlc19sZW5ndGgxLCAoR0Rlc3Ryb3lOb3RpZnkpIGdfZnJlZSksIE5VTEwp OworKwlfZ19mcmVlMCAoc2VsZi0+cHJpdi0+bV9kZWZhdWx0X2xheW91dCk7CisrCV9nX2ZyZWUw IChzZWxmLT5wcml2LT5tX2RlZmF1bHRfdmFyaWFudCk7CisrCV9nX2ZyZWUwIChzZWxmLT5wcml2 LT5tX2RlZmF1bHRfb3B0aW9uKTsKKyt9CisrCisrCisrR1R5cGUgeGtiX2xheW91dF9nZXRfdHlw ZSAodm9pZCkgeworKwlzdGF0aWMgdm9sYXRpbGUgZ3NpemUgeGtiX2xheW91dF90eXBlX2lkX192 b2xhdGlsZSA9IDA7CisrCWlmIChnX29uY2VfaW5pdF9lbnRlciAoJnhrYl9sYXlvdXRfdHlwZV9p ZF9fdm9sYXRpbGUpKSB7CisrCQlzdGF0aWMgY29uc3QgR1R5cGVWYWx1ZVRhYmxlIGdfZGVmaW5l X3R5cGVfdmFsdWVfdGFibGUgPSB7IHZhbHVlX3hrYl9sYXlvdXRfaW5pdCwgdmFsdWVfeGtiX2xh eW91dF9mcmVlX3ZhbHVlLCB2YWx1ZV94a2JfbGF5b3V0X2NvcHlfdmFsdWUsIHZhbHVlX3hrYl9s YXlvdXRfcGVla19wb2ludGVyLCAicCIsIHZhbHVlX3hrYl9sYXlvdXRfY29sbGVjdF92YWx1ZSwg InAiLCB2YWx1ZV94a2JfbGF5b3V0X2xjb3B5X3ZhbHVlIH07CisrCQlzdGF0aWMgY29uc3QgR1R5 cGVJbmZvIGdfZGVmaW5lX3R5cGVfaW5mbyA9IHsgc2l6ZW9mIChYS0JMYXlvdXRDbGFzcyksIChH QmFzZUluaXRGdW5jKSBOVUxMLCAoR0Jhc2VGaW5hbGl6ZUZ1bmMpIE5VTEwsIChHQ2xhc3NJbml0 RnVuYykgeGtiX2xheW91dF9jbGFzc19pbml0LCAoR0NsYXNzRmluYWxpemVGdW5jKSBOVUxMLCBO VUxMLCBzaXplb2YgKFhLQkxheW91dCksIDAsIChHSW5zdGFuY2VJbml0RnVuYykgeGtiX2xheW91 dF9pbnN0YW5jZV9pbml0LCAmZ19kZWZpbmVfdHlwZV92YWx1ZV90YWJsZSB9OworKwkJc3RhdGlj IGNvbnN0IEdUeXBlRnVuZGFtZW50YWxJbmZvIGdfZGVmaW5lX3R5cGVfZnVuZGFtZW50YWxfaW5m byA9IHsgKEdfVFlQRV9GTEFHX0NMQVNTRUQgfCBHX1RZUEVfRkxBR19JTlNUQU5USUFUQUJMRSB8 IEdfVFlQRV9GTEFHX0RFUklWQUJMRSB8IEdfVFlQRV9GTEFHX0RFRVBfREVSSVZBQkxFKSB9Owor KwkJR1R5cGUgeGtiX2xheW91dF90eXBlX2lkOworKwkJeGtiX2xheW91dF90eXBlX2lkID0gZ190 eXBlX3JlZ2lzdGVyX2Z1bmRhbWVudGFsIChnX3R5cGVfZnVuZGFtZW50YWxfbmV4dCAoKSwgIlhL QkxheW91dCIsICZnX2RlZmluZV90eXBlX2luZm8sICZnX2RlZmluZV90eXBlX2Z1bmRhbWVudGFs X2luZm8sIDApOworKwkJZ19vbmNlX2luaXRfbGVhdmUgKCZ4a2JfbGF5b3V0X3R5cGVfaWRfX3Zv bGF0aWxlLCB4a2JfbGF5b3V0X3R5cGVfaWQpOworKwl9CisrCXJldHVybiB4a2JfbGF5b3V0X3R5 cGVfaWRfX3ZvbGF0aWxlOworK30KKysKKysKKytncG9pbnRlciB4a2JfbGF5b3V0X3JlZiAoZ3Bv aW50ZXIgaW5zdGFuY2UpIHsKKysJWEtCTGF5b3V0KiBzZWxmOworKwlzZWxmID0gaW5zdGFuY2U7 CisrCWdfYXRvbWljX2ludF9pbmMgKCZzZWxmLT5yZWZfY291bnQpOworKwlyZXR1cm4gaW5zdGFu Y2U7CisrfQorKworKworK3ZvaWQgeGtiX2xheW91dF91bnJlZiAoZ3BvaW50ZXIgaW5zdGFuY2Up IHsKKysJWEtCTGF5b3V0KiBzZWxmOworKwlzZWxmID0gaW5zdGFuY2U7CisrCWlmIChnX2F0b21p Y19pbnRfZGVjX2FuZF90ZXN0ICgmc2VsZi0+cmVmX2NvdW50KSkgeworKwkJWEtCX0xBWU9VVF9H RVRfQ0xBU1MgKHNlbGYpLT5maW5hbGl6ZSAoc2VsZik7CisrCQlnX3R5cGVfZnJlZV9pbnN0YW5j ZSAoKEdUeXBlSW5zdGFuY2UgKikgc2VsZik7CisrCX0KKyt9CisrCisrCisrc3RhdGljIHZvaWQg X3ZhbGFfYXJyYXlfZGVzdHJveSAoZ3BvaW50ZXIgYXJyYXksIGdpbnQgYXJyYXlfbGVuZ3RoLCBH RGVzdHJveU5vdGlmeSBkZXN0cm95X2Z1bmMpIHsKKysJaWYgKChhcnJheSAhPSBOVUxMKSAmJiAo ZGVzdHJveV9mdW5jICE9IE5VTEwpKSB7CisrCQlpbnQgaTsKKysJCWZvciAoaSA9IDA7IGkgPCBh cnJheV9sZW5ndGg7IGkgPSBpICsgMSkgeworKwkJCWlmICgoKGdwb2ludGVyKikgYXJyYXkpW2ld ICE9IE5VTEwpIHsKKysJCQkJZGVzdHJveV9mdW5jICgoKGdwb2ludGVyKikgYXJyYXkpW2ldKTsK KysJCQl9CisrCQl9CisrCX0KKyt9CisrCisrCisrc3RhdGljIHZvaWQgX3ZhbGFfYXJyYXlfZnJl ZSAoZ3BvaW50ZXIgYXJyYXksIGdpbnQgYXJyYXlfbGVuZ3RoLCBHRGVzdHJveU5vdGlmeSBkZXN0 cm95X2Z1bmMpIHsKKysJX3ZhbGFfYXJyYXlfZGVzdHJveSAoYXJyYXksIGFycmF5X2xlbmd0aCwg ZGVzdHJveV9mdW5jKTsKKysJZ19mcmVlIChhcnJheSk7CisrfQorKworKworK3N0YXRpYyBnaW50 IF92YWxhX2FycmF5X2xlbmd0aCAoZ3BvaW50ZXIgYXJyYXkpIHsKKysJaW50IGxlbmd0aDsKKysJ bGVuZ3RoID0gMDsKKysJaWYgKGFycmF5KSB7CisrCQl3aGlsZSAoKChncG9pbnRlciopIGFycmF5 KVtsZW5ndGhdKSB7CisrCQkJbGVuZ3RoKys7CisrCQl9CisrCX0KKysJcmV0dXJuIGxlbmd0aDsK Kyt9CisrCisrCisrCgpkaWZmIC0tZ2l0IGEvaWJ1cy5zcGVjIGIvaWJ1cy5zcGVjCmluZGV4IDVm OGMwNGIuLmYwZWQ1ZGYgMTAwNjQ0Ci0tLSBhL2lidXMuc3BlYworKysgYi9pYnVzLnNwZWMKQEAg LTgsOCArOCwxMCBAQAogJWRlZmluZSBoYXZlX3B5Z29iamVjdDIgMQogJWRlZmluZSBoYXZlX3B5 Z29iamVjdDMgMQogCislZGVmaW5lIHZhbGFfYnVpbGRfZmFpbHVyZSAxCisKICVpZiAwJXs/ZmVk b3JhfSA+IDE2Ci0lZGVmaW5lIGlidXNfZ2pzX3ZlcnNpb24gMy4zLjMuMjAxMjAyMDMKKyVkZWZp bmUgaWJ1c19nanNfdmVyc2lvbiAzLjMuOTAuMjAxMjAzMDgKICVkZWZpbmUgaWJ1c19nanNfYnVp bGRfZmFpbHVyZSAxCiAlZWxzZQogJWRlZmluZSBpYnVzX2dqc192ZXJzaW9uIDMuMi4xLjIwMTEx MjMwCkBAIC0yNSw3ICsyNyw3IEBACiAKIE5hbWU6ICAgICAgIGlidXMKIFZlcnNpb246ICAgIDEu NC45OS4yMDEyMDMwNAotUmVsZWFzZTogICAgMiV7P2Rpc3R9CitSZWxlYXNlOiAgICAzJXs/ZGlz dH0KIFN1bW1hcnk6ICAgIEludGVsbGlnZW50IElucHV0IEJ1cyBmb3IgTGludXggT1MKIExpY2Vu c2U6ICAgIExHUEx2MisKIEdyb3VwOiAgICAgIFN5c3RlbSBFbnZpcm9ubWVudC9MaWJyYXJpZXMK QEAgLTQzLDExICs0NSwxNiBAQCBQYXRjaDI6ICAgICBpYnVzLXh4LXNldHVwLWZyZXF1ZW50LWxh bmcucGF0Y2gKIAogIyBXb3JrYXJvdW5kIGdub21lLXNoZWxsIGJ1aWxkIGZhaWx1cmUKICMgaHR0 cDovL2tvamkuZmVkb3JhcHJvamVjdC5vcmcva29qaS9nZXRmaWxlP3Rhc2tJRD0zMzE3OTE3Jm5h bWU9cm9vdC5sb2cKLVBhdGNoOTE6ICAgIGlidXMtZ2pzLXh4LWdub21lLXNoZWxsLTMuMS40LWJ1 aWxkLWZhaWx1cmUucGF0Y2gKKyMgUGF0Y2g5MTogICAgaWJ1cy1nanMteHgtZ25vbWUtc2hlbGwt My4xLjQtYnVpbGQtZmFpbHVyZS5wYXRjaAogIyBXb3JrYXJvdW5kIHRvIGRpc2FibGUgcHJlZWRp dCBvbiBnbm9tZS1zaGVsbCB1bnRpbCBidWcgNjU4NDIwIGlzIGZpeGVkLgogIyBodHRwczovL2J1 Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU4NDIwCiBQYXRjaDkyOiAgICBpYnVz LXh4LWctcy1kaXNhYmxlLXByZWVkaXQucGF0Y2gKIFBhdGNoOTM6ICAgIGlidXMtNzcxMTE1LXBy b3BlcnR5LWNvbXBhdGlibGUucGF0Y2gKKyVpZiAldmFsYV9idWlsZF9mYWlsdXJlCisjIFhrbC0x LjAuZ2lyIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gdmFwaS4KKyMgaHR0cHM6Ly9idWdzLmZyZWVk ZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcxNDEKK1BhdGNoOTQ6ICAgIGlidXMteHgtdmFw aS1idWlsZC1mYWlsdXJlLmRpZmYKKyVlbmRpZgogCiBCdWlsZFJvb3Q6ICAle190bXBwYXRofS8l e25hbWV9LSV7dmVyc2lvbn0tJXtyZWxlYXNlfS1yb290LSUoJXtfX2lkX3V9IC1uKQogCkBAIC01 Niw3ICs2Myw2IEBAIEJ1aWxkUmVxdWlyZXM6ICBjdnMKIEJ1aWxkUmVxdWlyZXM6ICBnZXR0ZXh0 LWRldmVsCiBCdWlsZFJlcXVpcmVzOiAgbGlidG9vbAogQnVpbGRSZXF1aXJlczogIHB5dGhvbgot QnVpbGRSZXF1aXJlczogIGdvYmplY3QtaW50cm9zcGVjdGlvbi1kZXZlbAogQnVpbGRSZXF1aXJl czogIGd0azItZGV2ZWwKIEJ1aWxkUmVxdWlyZXM6ICBndGszLWRldmVsCiBCdWlsZFJlcXVpcmVz OiAgZGJ1cy1nbGliLWRldmVsCkBAIC03Miw3ICs3OCw3IEBAIEJ1aWxkUmVxdWlyZXM6ICB2YWxh LXRvb2xzCiAjIGZvciBBTV9HQ09ORl9TT1VSQ0VfMiBpbiBjb25maWd1cmUuYWMKIEJ1aWxkUmVx dWlyZXM6ICBHQ29uZjItZGV2ZWwKICVpZiAlaGF2ZV9weWdvYmplY3QzCi1CdWlsZFJlcXVpcmVz OiAgcHlnb2JqZWN0My1kZXZlbAorQnVpbGRSZXF1aXJlczogIGdvYmplY3QtaW50cm9zcGVjdGlv bi1kZXZlbAogJWVuZGlmCiBCdWlsZFJlcXVpcmVzOiAgaW50bHRvb2wKIEJ1aWxkUmVxdWlyZXM6 ICBpc28tY29kZXMtZGV2ZWwKQEAgLTE2Myw2ICsxNjksNyBAQCBSZXF1aXJlcyhwb3N0KTogZ2xp YjIgPj0gJXtnbGliX3Zlcn0KICVkZXNjcmlwdGlvbiBndGszCiBUaGlzIHBhY2thZ2UgY29udGFp bnMgaWJ1cyBpbSBtb2R1bGUgZm9yIGd0azMKIAorJWlmbmFyY2ggcHBjIHBwYzY0IHMzOTAgczM5 MHgKICVwYWNrYWdlIGdub21lMwogU3VtbWFyeTogICAgSUJ1cyBnbm9tZS1zaGVsbC1leHRlbnNp b24gZm9yIEdOT01FMwogR3JvdXA6ICAgICAgU3lzdGVtIEVudmlyb25tZW50L0xpYnJhcmllcwpA QCAtMTc0LDYgKzE4MSw3IEBAIFJlcXVpcmVzOiAgIGdub21lLXNoZWxsCiBUaGlzIGlzIGEgdHJh bnNpdGlvbmFsIHBhY2thZ2Ugd2hpY2ggYWxsb3dzIHVzZXJzIHRvIHRyeSBvdXQgbmV3IElCdXMK IEdVSSBmb3IgR05PTUUzIGluIGRldmVsb3BtZW50LiAgTm90ZSB0aGF0IHRoaXMgcGFja2FnZSB3 aWxsIGJlIG1hcmtlZAogYXMgb2Jzb2xldGUgb25jZSB0aGUgaW50ZWdyYXRpb24gaGFzIGNvbXBs ZXRlZCBpbiB0aGUgR05PTUUzIHVwc3RyZWFtLgorJWVuZGlmCiAKICVwYWNrYWdlIGRldmVsCiBT dW1tYXJ5OiAgICBEZXZlbG9wbWVudCB0b29scyBmb3IgaWJ1cwpAQCAtMTk4LDIwICsyMDYsMjYg QEAgVGhlIGlidXMtZGV2ZWwtZG9jcyBwYWNrYWdlIGNvbnRhaW5zIGRldmVsb3BlciBkb2N1bWVu dGF0aW9uIGZvciBpYnVzCiAKICVwcmVwCiAlc2V0dXAgLXEKKyVpZm5hcmNoIHBwYyBwcGM2NCBz MzkwIHMzOTB4CiAlaWYgJWhhdmVfZ2pzZmlsZQogemNhdCAlU09VUkNFMiB8IHRhciB4ZiAtCiAl aWYgJWlidXNfZ2pzX2J1aWxkX2ZhaWx1cmUKIGQ9YGJhc2VuYW1lICVTT1VSQ0UyIC50YXIuZ3pg CiBjZCAkZAotJXBhdGNoOTEgLXAxIC1iIC5mYWlsLWctcworIyVwYXRjaDkxIC1wMSAtYiAuZmFp bC1nLXMKIGNkIC4uCiAlZW5kaWYKICVlbmRpZgorJWVuZGlmCisKICVwYXRjaDAgLXAxCiAlcGF0 Y2g5MiAtcDEgLWIgLmctcy1wcmVlZGl0CiBjcCBjbGllbnQvZ3RrMi9pYnVzaW1jb250ZXh0LmMg Y2xpZW50L2d0azMvaWJ1c2ltY29udGV4dC5jIHx8CiAlaWYgJWhhdmVfbGlieGtiZmlsZQogJXBh dGNoMSAtcDEgLWIgLnhrYgorJWlmICV2YWxhX2J1aWxkX2ZhaWx1cmUKKyVwYXRjaDk0IC1wMSAt YiAudmFsYS1mYWlsCislZW5kaWYKIHJtIC1mIGJpbmRpbmdzL3ZhbGEvaWJ1cy0xLjAudmFwaQog JWVuZGlmCiAlcGF0Y2gyIC1wMSAtYiAuc2V0dXAtZnJlcXVlbnQtbGFuZwpAQCAtMjU4LDEwICsy NzIsMTggQEAgYXV0b3JlY29uZiAtZiAtaQogJWVuZGlmCiAgICAgLS1lbmFibGUtaW50cm9zcGVj dGlvbgogCislaWYgJXZhbGFfYnVpbGRfZmFpbHVyZQordG91Y2ggdWkvZ3RrMy9pYnVzX3VpX2d0 azNfdmFsYS5zdGFtcAordG91Y2ggdWkvZ3RrMy8qLmMKK2NwIHVpL2d0azMvZ2tiZGxheW91dC5j LnRydWUgdWkvZ3RrMy9na2JkbGF5b3V0LmMKKyVlbmRpZgorCiAjIG1ha2UgLUMgcG8gdXBkYXRl LWdtbwogbWFrZSAlez9fc21wX21mbGFnc30gXAorICBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xIFwK ICAgUEtHX0NPTkZJR19QQVRIPS4uOi91c3IvbGliNjQvcGtnY29uZmlnOi91c3IvbGliL3BrZ2Nv bmZpZwogCislaWZuYXJjaCBwcGMgcHBjNjQgczM5MCBzMzkweAogJWlmICVoYXZlX2dqc2ZpbGUK IGQ9YGJhc2VuYW1lICVTT1VSQ0UyIC50YXIuZ3pgCiBjZCAkZApAQCAtMjY5LDEwICsyOTEsMTMg QEAgY2QgJGQKIGF1dG9yZWNvbmYKICVlbmRpZgogZXhwb3J0IFBLR19DT05GSUdfUEFUSD0uLjov dXNyL2xpYjY0L3BrZ2NvbmZpZzovdXNyL2xpYi9wa2djb25maWcKLSVjb25maWd1cmUKKyVjb25m aWd1cmUgXAorICAtLXdpdGgtZ25vbWUtc2hlbGwtdmVyc2lvbj0iMy4zLjkwLDMuMy41LDMuMy40 LDMuMy4zLDMuMiIgXAorICAtLXdpdGgtZ2pzLXZlcnNpb249IjEuMzEuMjAsMS4zMS4xMCwxLjMx LjYsMS4zMS4xMSwxLjMwIgogbWFrZSAlez9fc21wX21mbGFnc30KIGNkIC4uCiAlZW5kaWYKKyVl bmRpZgogCiAlaW5zdGFsbAogcm0gLXJmICRSUE1fQlVJTERfUk9PVApAQCAtMzAzLDYgKzMyOCw3 IEBAIGRlc2t0b3AtZmlsZS1pbnN0YWxsIC0tZGVsZXRlLW9yaWdpbmFsICAgICAgICAgIFwKICAg LS1kaXIgJFJQTV9CVUlMRF9ST09UJXtfZGF0YWRpcn0vYXBwbGljYXRpb25zIFwKICAgJFJQTV9C VUlMRF9ST09UJXtfZGF0YWRpcn0vYXBwbGljYXRpb25zLyoKIAorJWlmbmFyY2ggcHBjIHBwYzY0 IHMzOTAgczM5MHgKICVpZiAlaGF2ZV9nanNmaWxlCiAjIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0 LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9NjU3MTY1CiBkPWBiYXNlbmFtZSAlU09VUkNFMiAudGFyLmd6 YApAQCAtMzExLDYgKzMzNyw3IEBAIG1ha2UgREVTVERJUj0kUlBNX0JVSUxEX1JPT1QgaW5zdGFs bAogcm0gLWYgJFJQTV9CVUlMRF9ST09UJXtfZGF0YWRpcn0vbG9jYWxlLyovTENfTUVTU0FHRVMv aWJ1cy1nanMubW8KIGNkIC4uCiAlZW5kaWYKKyVlbmRpZgogCiAjIEZJWE1FOiBubyB2ZXJzaW9u IG51bWJlcgogJWZpbmRfbGFuZyAle25hbWV9MTAKQEAgLTQ0MiwxMCArNDY5LDEyIEBAIGZpCiAl ZGVmYXR0cigtLHJvb3Qscm9vdCwtKQogJXtfbGliZGlyfS9ndGstMy4wLyV7Z3RrM19iaW5hcnlf dmVyc2lvbn0vaW1tb2R1bGVzL2ltLWlidXMuc28KIAorJWlmbmFyY2ggcHBjIHBwYzY0IHMzOTAg czM5MHgKICVmaWxlcyBnbm9tZTMKICVkZWZhdHRyKC0scm9vdCxyb290LC0pCiAle19kYXRhZGly fS9nbm9tZS1zaGVsbC9qcy91aS9zdGF0dXMvaWJ1cwogJXtfZGF0YWRpcn0vZ25vbWUtc2hlbGwv ZXh0ZW5zaW9ucy9pYnVzLWluZGljYXRvckBleGFtcGxlLmNvbQorJWVuZGlmCiAKICVmaWxlcyBk ZXZlbAogJWRlZmF0dHIoLSxyb290LHJvb3QsLSkKQEAgLTQ2MSwxMSArNDkwLDE4IEBAIGZpCiAl e19kYXRhZGlyfS9ndGstZG9jL2h0bWwvKgogCiAlY2hhbmdlbG9nCisqIFRodSBNYXIgMDggMjAx MiBUYWthbyBGdWppd2FyYSA8dGZ1aml3YXJAcmVkaGF0LmNvbT4gLSAxLjQuOTkuMjAxMjAzMDMt MworLSBCdW1wZWQgdG8gaWJ1cy1nanMgMy4zLjkwLjIwMTIwMzA4IHRvIHdvcmsgd2l0aCBnbm9t ZS1zaGVsbCAzLjMuOTAKKy0gRml4ZWQgQnVnIDc4NjkwNiAtIEFkZGVkIGlmbmFyY2ggcHBjIHBw YzY0IHMzOTAgczM5MHgKKy0gVXBkYXRlZCBpYnVzLUhFQUQucGF0Y2gKKyAgRml4ZWQgQnVnIDgw MDg5NyAtIEFmdGVyIGRvaW5nICJjdHJsK3NwYWNlIiwgaWJ1cyB0cmF5IGljb24gZnJlZXplcwor CiAqIE1vbiBNYXIgMDUgMjAxMiBUYWthbyBGdWppd2FyYSA8dGZ1aml3YXJAcmVkaGF0LmNvbT4g LSAxLjQuOTkuMjAxMjAzMDMtMgogLSBBZGRlZCBpYnVzLUhFQUQucGF0Y2ggdG8gZml4IHB5dGhv biBsaWJyYXJ5IHRvIGxvYWQgbGliaWJ1cy5zby4KIAogKiBTdW4gTWFyIDA0IDIwMTIgVGFrYW8g RnVqaXdhcmEgPHRmdWppd2FyQHJlZGhhdC5jb20+IC0gMS40Ljk5LjIwMTIwMzAzLTEKIC0gQnVt cGVkIHRvIDEuNC45OS4yMDEyMDMwMworICBGaXhlZCBCdWcgNzk2MDcwIC0gaWJ1cy1zZXR1cCB3 aXRob3V0IG5vIGlidXMtZGFlbW9uCiAKICogV2VkIEZlYiAwOCAyMDEyIFRha2FvIEZ1aml3YXJh IDx0ZnVqaXdhckByZWRoYXQuY29tPiAtIDEuNC45OS4yMDEyMDIwMy0zCiAtIEZpeGVkIGlidXMt c2V0dXAgb24gQyBsb2NhbGUKCmRpZmYgLS1naXQgYS9zb3VyY2VzIGIvc291cmNlcwppbmRleCBm Y2VjZTRlLi4xNDdlYjZiIDEwMDY0NAotLS0gYS9zb3VyY2VzCisrKyBiL3NvdXJjZXMKQEAgLTEs MyArMSwzIEBACiAyOGM3N2VkODg5ZGJlMjU1MjVmZGUxMmU1OGYxNDAyYiAgaWJ1cy0xLjQuOTku MjAxMjAzMDQudGFyLmd6Ci04YzcxM2U0N2Q0MDM0ODJjZGQ4Yjg1MWRkYTNkMDcxMyAgaWJ1cy1n anMtMy4zLjMuMjAxMjAyMDMudGFyLmd6CisxMTI3NDE5MzA5M2M5ZDcyOTE4N2JkY2VhNmU4NTQ0 MiAgaWJ1cy1nanMtMy4zLjkwLjIwMTIwMzA4LnRhci5negogMmQyYWQ1OGUzZTQxNDI5ZGJkODgz YmE3ZTUwMWM5YjIgIGlidXMtZ2pzLTMuMi4xLjIwMTExMjMwLnRhci5nego=