Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vkP8R-00EZYT-2J for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Jan 2026 16:08:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vkP8Q-008uJD-2D for pgsql-hackers@arkaria.postgresql.org; Mon, 26 Jan 2026 16:08:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vkP8P-008uJ2-1B for pgsql-hackers@lists.postgresql.org; Mon, 26 Jan 2026 16:08:14 +0000 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vkP8K-002PwL-3C for pgsql-hackers@lists.postgresql.org; Mon, 26 Jan 2026 16:08:12 +0000 Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-65812261842so9233336a12.1 for ; Mon, 26 Jan 2026 08:08:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1769443688; cv=none; d=google.com; s=arc-20240605; b=M5TqA6Zjj+FcDvIOE6z9n5Kbb8rXfwug6bYo0wWE6AwCsZz6/NFJDsa89KnUMEK/YL y4xu/ci3OefqHuGz9dOXOZBBz1IKI2xeC6PXeKw5gaDb4wlUuAswynYrvTjIs02hezSm BJauyu1eZyy3pet9g0WKipwmEbi16pz/r3uddQOXfJ3ruXt14OLJvWuNBvSN4vOthZ46 VhCJ1fPEFs8dEWBxgKmRX+7QN9nOddkyq3qKts6skQOnFIZ19HnHtbQBaoz9uA1xH/er 07HBMK8AowXEacASQipQ6YeKaGwmCpy8qZKuT6+Pr0u+mvxVMeWn9ofQZp2C8Rk7aKM4 Nlpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=ma46BVzrIRWsdO3z0dH8XI9XX1YGHeg4R2rZVj4r1j0=; fh=7DWRtFoGG5PsW8gAwxLMfLBF7iq6XWzztLIw6GrQn+g=; b=azlfi6aKVjo59rRYWbfEH+FiJOE5HL3qmX8C1aT4VP4YVNPNuKuLBNM4ETG/SpWBx9 JkqZtITiCstQHaeTqfYSdMX2fGmQmovPftzgw9e4eNEEAOFQYbo9ZImlpyUJ5xyeKUjt jMVe9wR4PlxD5k8R7d7Cm52+5XIndfE9jQR0GeHYYVU1nY2MFkOpZki7Eio5+mG/uOeG E2qDuxYENXktBDFRYg3K4C4jZPGI/NUTjmG+xHcR7rf+65u4tH/z1EAMd4eJUL3/5MGQ RkGAhDeDQ0OShw8eyF5F0Jc8ezqsk4WpdlHgv41v/DnbLbHgUa7f0Qb5+Um8M0FKlYg3 LIOg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769443688; x=1770048488; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ma46BVzrIRWsdO3z0dH8XI9XX1YGHeg4R2rZVj4r1j0=; b=kE4tPxsw4rkXvjCTbGss5LI+yVl5gkAH58RKa9VWa7XXBELDl6lsqu04o746BvcdTY PqQ6evoR3Tx9lxNh6DTX18E4D04Q7sqL+bg/7dx6d4oB4EQgo0en1iLtctfdeSp1E6xy IVYMck/YH68UMLzYnW55o3jevTSsMkPufja5ARqsgoOmb/hXQanEImtJhjC1mKrP7zLV JmNl7tzPogwNYqv18Hi5WRUXYyrcE7JBjmY3+HMA6BV77IQIfveTgFLQ7wj0D0UYb/+Q KjCannja/Toyy0uAfPCNAxj/D23rNftEY6/+6fj4mUnihX0qbOAL37FyoXtURu0z15wc pNjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769443688; x=1770048488; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ma46BVzrIRWsdO3z0dH8XI9XX1YGHeg4R2rZVj4r1j0=; b=I9PrvMFbp2UvzgmuJgwdWGP+3IXBYY7d14SpGd9npVQXYJ0MzNuoTB3Y+o5QPEjxXN pHVc45rlmrtX82kqAK7/t+bWhxJ3+CLAfhagGj4eZt2nmP2194Mne8WHlX8EiNdQxioz aflOrv9sq0Uf7kuK55ivXRKGu6J3SzBFHuAcPh6aywaAEA3up6QI5RpM5ah++x33vh4k R9b6XAWlvDeZtV4lcfWyoWjYRgatn5lzvA6TrkSWIeW+sGfNh2XKlBuTYqciHEUATIQ7 kAwQltEjR2OsfDE+LMa4ey0/mm/GKgkr3JkxRMOW3IA03liSP6tW+efF7HnHPQBUg6l5 X5rA== X-Forwarded-Encrypted: i=1; AJvYcCWr+d9sm1YqGL5O4xTRUe//YSEkaE1KJ7g+b0CgJmeweENImTOlALOVH6pKmzdSzuExPEO2RbG9U4lmflWZ@lists.postgresql.org X-Gm-Message-State: AOJu0YzifLjKi3rhZ3d12qdYSnhe9hMxFeQUhCOnHnS0f1UrHDjUe7LG xnaf2fiMqj85Cf3EOgnXG1rYti+pRDN5LapbJrIS0kKCn/PbYp+XEw0YxTrsVI10jDGXaOJGay4 qbguTAm9JT77MDaOaKhYMpvueMm64OSM= X-Gm-Gg: AZuq6aLh1XO3zxRMuQB3bYTcSmZkA7dGO/ApUinPhKnk1ZMdFiS05z5OZKixqE3Mjr1 4vHpVn1FqXn7qUpl/2RywWmm5ivXARFRye6NL1Dfdr2u6bH8lCb5VSjdbfY/cYd6OGWy4M3RWzB TwYwXDQ6d9h7Q9a+59lTX7+0YoRNnAyYl5F7ckpy6cN4xZYjwzRA8FqGvoGECSaufIf/YUqiWMI r95HC9h6Ilvq0EWNpIhR9aGQDSAr+LmZVbPQ0sEkefAtl9rV3TLKNewG0uL0qyRqE3bVeEKNi81 Xflv84vff3jlovjqkIi9GEke8OmzIvZdEFxtEQ== X-Received: by 2002:a17:907:86a6:b0:b88:72da:1055 with SMTP id a640c23a62f3a-b8ceefe5044mr377666566b.29.1769443687678; Mon, 26 Jan 2026 08:08:07 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Robert Haas Date: Mon, 26 Jan 2026 11:07:55 -0500 X-Gm-Features: AZwV_Qj_XPOFTJGRlnnrMaGcudTOn2hROEsosSzVLJ7GGmiHrNMj39JtX-_5hho Message-ID: Subject: Re: pg_plan_advice To: Ajay Pal Cc: Jakub Wartak , Lukas Fittl , Jacob Champion , Dian Fay , Matheus Alcantara , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000748a9706494cb6bc" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000748a9706494cb6bc Content-Type: text/plain; charset="UTF-8" Here is v12. The big change in this version is that I've added extensive SGML documentation for v0005. If the README was a little too low-level for you, this might work better. If you'd like to view it without downloading the patch set, I've put it up here: https://robertmhaas.github.io/postgresql-static/html-pgpa-v12/pgplanadvice.html Aside from that: * Added a new GUC pg_plan_advice.always_store_advice_details. Without that, you can't generate advice or see feedback on supplied advice when using prepared queries, because we don't know at plan time that it's right to incur the overhead of generating that stuff, and most of the time it won't be. * Revoked privileges on pg_clear_collected_shared_advice() as I had already done on pg_get_collected_shared_advice(). * Removed a bogus elog(ERROR) in pgpa_walker_would_advise() in favor of returning 0. I think somebody, likely Jakub, pointed this out earlier, but I didn't quite absorb what I was being told until I rediscovered the problem. * Added a bunch more tests. I think the test coverage is getting pretty decent now, but it could still use some tests targeting more complex scenarios and corner cases. If you are curious about the coverage report, see here: https://robertmhaas.github.io/postgresql-static/coveragereport-pgpa-v12/contrib/pg_plan_advice/index.html The low number for pgpa_scanner.l is basically bogus, but I don't know of a way to make it not bogus. The low number for pgpa_ast.c is due to a bunch of things related to bitmap scans not being right, which at this point is, I think, the largest outstanding issue with the patch. It's probably more interesting to look into ways of covering a few more lines from pgpa_planner.c and pgpa_walker.c, which is where a lot of the complexity in this code lives. Also, it would be nice to have coverage of foreign scan cases, but I'm not quite sure what I need to do to create tests for this module that also depend on postgres_fdw. Any tips appreciated. -- Robert Haas EDB: http://www.enterprisedb.com --000000000000748a9706494cb6bc Content-Type: application/octet-stream; name="v12-0004-Store-information-about-Append-node-consolidatio.patch" Content-Disposition: attachment; filename="v12-0004-Store-information-about-Append-node-consolidatio.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkvd1frl3 RnJvbSAwNmFkYmM5MThlM2U4YjYwODU2YjFjOWNiZWU2MThjN2YyMzQyODg5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTIgSmFuIDIwMjYgMTA6MTI6MjUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMiA0 LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IEFwcGVuZCBub2RlIGNvbnNvbGlkYXRpb24gaW4K IHRoZSBmaW5hbCBwbGFuLgoKQW4gZXh0ZW5zaW9uIChvciBjb3JlIGNvZGUpIG1pZ2h0IHdhbnQg dG8gcmVjb25zdHJ1Y3QgdGhlIHBsYW5uZXIncwpkZWNpc2lvbnMgYWJvdXQgd2hldGhlciBhbmQg d2hlcmUgdG8gcGVyZm9ybSBwYXJ0aXRpb253aXNlIGpvaW5zIGZyb20KdGhlIGZpbmFsIHBsYW4u IFRvIGRvIHNvLCBpdCBtdXN0IGJlIHBvc3NpYmxlIHRvIGZpbmQgYWxsIG9mIHRoZSBSVElzCm9m IHBhcnRpdGlvbmVkIHRhYmxlcyBhcHBlYXJpbmcgaW4gdGhlIHBsYW4uIEJ1dCB3aGVuIGFuIEFw cGVuZFBhdGgKb3IgTWVyZ2VBcHBlbmRQYXRoIHB1bGxzIHVwIGNoaWxkIHBhdGhzIGZyb20gYSBz dWJvcmRpbmF0ZSBBcHBlbmRQYXRoCm9yIE1lcmdlQXBwZW5kUGF0aCwgdGhlIFJUSXMgb2YgdGhl IHN1Ym9yZGluYXRlIHBhdGggZG8gbm90IGFwcGVhcgppbiB0aGUgZmluYWwgcGxhbiwgbWFraW5n IHRoaXMga2luZCBvZiByZWNvbnN0cnVjdGlvbiBpbXBvc3NpYmxlLgoKVG8gYXZvaWQgdGhpcywg cHJvcGFnYXRlIHRoZSBSVEkgc2V0cyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwcmVzZW50CmluIHRo ZSAnYXBwcmVsaWRzJyBmaWVsZCBvZiB0aGUgc3Vib3JkaW5hdGUgQXBwZW5kIG9yIE1lcmdlQXBw ZW5kCm5vZGVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIGNyZWF0ZWQgaW50byB0aGUgc3Vydml2aW5n IEFwcGVuZCBvcgpNZXJnZUFwcGVuZCBub2RlLCB1c2luZyBhIG5ldyAnY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMnIGZpZWxkIGZvcgp0aGF0IHB1cnBvc2UuIFRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxk IGlzIGEgbGlzdCBvZiBCaXRtYXBzZXRzLApiZWNhdXNlIGVhY2ggcmVsYXRpb24gd2hvc2UgYXBw ZW5kLWxpc3Qgd2FzIHB1bGxlZCB1cCBoYWQgaXRzIG93bgpzZXQgb2YgUlRJczoganVzdCBvbmUs IGlmIGl0IHdhcyBhIHBhcnRpdGlvbndpc2Ugc2Nhbiwgb3IgbW9yZSB0aGFuCm9uZSwgaWYgaXQg d2FzIGEgcGFydGl0aW9ud2lzZSBqb2luLiBTaW5jZSBvdXIgZ29hbCBpcyB0byBzZWUgd2hlcmUK cGFydGl0aW9ud2lzZSBqb2lucyB3ZXJlIGRvbmUsIGl0IGlzIGVzc2VudGlhbCB0byBhdm9pZCBs b3NpbmcgdGhlCmluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGUgUlRJcyB3ZXJlIGdyb3VwZWQgaW4g dGhlIHB1bGxlZC11cApyZWxhdGlvbnMuCgpUaGlzIGNvbW1pdCBhbHNvIHVwZGF0ZXMgcGdfb3Zl cmV4cGxhaW4gc28gdGhhdCBFWFBMQUlOIChSQU5HRV9UQUJMRSkKd2lsbCBkaXNwbGF5IHRoZSBz YXZlZCBSVEkgc2V0cy4KCkNvLWF1dGhvcmVkLWJ5OiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdy ZXNxbC5vcmc+CkNvLWF1dGhvcmVkLWJ5OiBMdWthcyBGaXR0bCA8bHVrYXNAZml0dGwuY29tPgpS ZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2aWV3ZWQtYnk6IEph a3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVycHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBH cmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3ZWQtYnk6IEphY29iIENoYW1waW9uIDxqYWNv Yi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogQW1pdCBMYW5nb3RlIDxh bWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55 aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdtb1otSmgx VDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwuY29tCi0t LQogLi4uL2V4cGVjdGVkL3BnX292ZXJleHBsYWluLm91dCAgICAgICAgICAgICAgIHwgICA0ICst CiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMgICAgICAgfCAgNTYgKysr KysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICB8IDE5NSAr KysrKysrKysrKy0tLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMg ICAgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5j ICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICAg ICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgICAg ICAgIHwgIDQzICsrLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMgICAg ICAgICB8ICAyNiArKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAgICAg ICAgICB8ICAxMCArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCAgICAgICAgICAgICAg ICAgfCAgMTEgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmggICAgICAgICAgICAg IHwgIDE4ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAg fCAgIDEgKwogMTIgZmlsZXMgY2hhbmdlZCwgMjY2IGluc2VydGlvbnMoKyksIDExMCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL2V4cGVjdGVkL3BnX292 ZXJleHBsYWluLm91dCBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4 cGxhaW4ub3V0CmluZGV4IGNhOWEyM2VhNjFmLi5hMzc3ZmIyNTcxZCAxMDA2NDQKLS0tIGEvY29u dHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKKysrIGIvY29u dHJpYi9wZ19vdmVyZXhwbGFpbi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQKQEAgLTEwNCw2 ICsxMDQsNyBAQCAkJCk7CiAgICAgICAgICAgICAgICBQYXJhbGxlbCBTYWZlOiB0cnVlCiAgICAg ICAgICAgICAgICBQbGFuIE5vZGUgSUQ6IDIKICAgICAgICAgICAgICAgIEFwcGVuZCBSVElzOiAx CisgICAgICAgICAgICAgICBDaGlsZCBBcHBlbmQgUlRJczogbm9uZQogICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGJyYXNzaWNhIHZlZ2V0YWJsZXNfMQogICAgICAgICAgICAgICAgICAg ICAgRGlzYWJsZWQgTm9kZXM6IDAKICAgICAgICAgICAgICAgICAgICAgIFBhcmFsbGVsIFNhZmU6 IHRydWUKQEAgLTE0Miw3ICsxNDMsNyBAQCAkJCk7CiAgICBSZWxhdGlvbiBLaW5kOiByZWxhdGlv bgogICAgUmVsYXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFyZUxvY2sKICBVbnBydW5hYmxlIFJU SXM6IDEgMyA0Ci0oNTMgcm93cykKKyg1NCByb3dzKQogCiAtLSBUZXN0IGEgZGlmZmVyZW50IG91 dHB1dCBmb3JtYXQuCiBTRUxFQ1QgZXhwbGFpbl9maWx0ZXIoJCQKQEAgLTE5Nyw2ICsxOTgsNyBA QCAkJCk7CiAgICAgICAgICAgICAgICA8ZXh0UGFyYW0+bm9uZTwvZXh0UGFyYW0+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICsKICAgICAgICAgICAgICAgIDxhbGxQYXJhbT5ub25lPC9hbGxQ YXJhbT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPEFwcGVu ZC1SVElzPjE8L0FwcGVuZC1SVElzPiAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICAg ICAgICAgICA8Q2hpbGQtQXBwZW5kLVJUSXM+bm9uZTwvQ2hpbGQtQXBwZW5kLVJUSXM+ICAgICAg ICAgICsKICAgICAgICAgICAgICAgIDxTdWJwbGFucy1SZW1vdmVkPjA8L1N1YnBsYW5zLVJlbW92 ZWQ+ICAgICAgICAgICAgICAgKwogICAgICAgICAgICAgICAgPFBsYW5zPiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgICAgICAgICAgICAgIDxQbGFu PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYyBiL2NvbnRyaWIvcGdf b3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwppbmRleCBlMDE4NGJhMzE0YS4uMzZlNmFhYzBl MmMgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdfb3ZlcmV4cGxhaW4uYwor KysgYi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKQEAgLTU0LDYgKzU0 LDggQEAgc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5fYWxpYXMoY29uc3QgY2hhciAqcWxhYmVsLCBB bGlhcyAqYWxpYXMsCiAJCQkJCQkJICBFeHBsYWluU3RhdGUgKmVzKTsKIHN0YXRpYyB2b2lkIG92 ZXJleHBsYWluX2JpdG1hcHNldChjb25zdCBjaGFyICpxbGFiZWwsIEJpdG1hcHNldCAqYm1zLAog CQkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5fYml0 bWFwc2V0X2xpc3QoY29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpibXNfbGlzdCwKKwkJCQkJCQkJ CSAgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgb3ZlcmV4cGxhaW5faW50bGlzdChj b25zdCBjaGFyICpxbGFiZWwsIExpc3QgKmxpc3QsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMp OwogCkBAIC0yMzIsMTEgKzIzNCwxNyBAQCBvdmVyZXhwbGFpbl9wZXJfbm9kZV9ob29rKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFw c2V0KCJBcHBlbmQgUlRJcyIsCiAJCQkJCQkJCQkgICgoQXBwZW5kICopIHBsYW4pLT5hcHByZWxp ZHMsCiAJCQkJCQkJCQkgIGVzKTsKKwkJCQlvdmVyZXhwbGFpbl9iaXRtYXBzZXRfbGlzdCgiQ2hp bGQgQXBwZW5kIFJUSXMiLAorCQkJCQkJCQkJCSAgICgoQXBwZW5kICopIHBsYW4pLT5jaGlsZF9h cHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCQkJCQkgICBlcyk7CiAJCQkJYnJlYWs7CiAJCQljYXNl IFRfTWVyZ2VBcHBlbmQ6CiAJCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0KCJBcHBlbmQgUlRJcyIs CiAJCQkJCQkJCQkgICgoTWVyZ2VBcHBlbmQgKikgcGxhbiktPmFwcHJlbGlkcywKIAkJCQkJCQkJ CSAgZXMpOworCQkJCW92ZXJleHBsYWluX2JpdG1hcHNldF9saXN0KCJDaGlsZCBBcHBlbmQgUlRJ cyIsCisJCQkJCQkJCQkJICAgKChNZXJnZUFwcGVuZCAqKSBwbGFuKS0+Y2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMsCisJCQkJCQkJCQkJICAgZXMpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBUX1Jlc3Vs dDoKIApAQCAtODE1LDYgKzgyMyw1NCBAQCBvdmVyZXhwbGFpbl9iaXRtYXBzZXQoY29uc3QgY2hh ciAqcWxhYmVsLCBCaXRtYXBzZXQgKmJtcywgRXhwbGFpblN0YXRlICplcykKIAlwZnJlZShidWYu ZGF0YSk7CiB9CiAKKy8qCisgKiBFbWl0IGEgdGV4dCBwcm9wZXJ0eSBkZXNjcmliaW5nIHRoZSBj b250ZW50cyBvZiBhIGxpc3Qgb2YgYml0bWFwc2V0cy4KKyAqIElmIGEgYml0bWFwc2V0IGNvbnRh aW5zIGV4YWN0bHkgMSBtZW1iZXIsIHdlIGp1c3QgcHJpbnQgYW4gaW50ZWdlcjsKKyAqIG90aGVy d2lzZSwgd2Ugc3Vycm91bmQgdGhlIGxpc3Qgb2YgbWVtYmVycyBieSBwYXJlbnRoZXNlcy4KKyAq CisgKiBJZiB0aGVyZSBhcmUgbm8gYml0bWFwc2V0cyBpbiB0aGUgbGlzdCwgd2UgcHJpbnQgdGhl IHdvcmQgIm5vbmUiLgorICovCitzdGF0aWMgdm9pZAorb3ZlcmV4cGxhaW5fYml0bWFwc2V0X2xp c3QoY29uc3QgY2hhciAqcWxhYmVsLCBMaXN0ICpibXNfbGlzdCwKKwkJCQkJCSAgIEV4cGxhaW5T dGF0ZSAqZXMpCit7CisJU3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1 Zik7CisKKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCBibXMsIGJtc19saXN0KQorCXsKKwkJaWYg KGJtc19tZW1iZXJzaGlwKGJtcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCWFwcGVuZFN0cmluZ0lu Zm8oJmJ1ZiwgIiAlZCIsIGJtc19zaW5nbGV0b25fbWVtYmVyKGJtcykpOworCQllbHNlCisJCXsK KwkJCWludAkJCXggPSAtMTsKKwkJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmYnVmLCAiICgiKTsKKwkJCXdoaWxlICgoeCA9IGJtc19uZXh0X21lbWJl cihibXMsIHgpKSA+PSAwKQorCQkJeworCQkJCWlmIChmaXJzdCkKKwkJCQkJZmlyc3QgPSBmYWxz ZTsKKwkJCQllbHNlCisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZidWYsICcgJyk7CisJCQkJ YXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJWQiLCB4KTsKKwkJCX0KKwkJCWFwcGVuZFN0cmluZ0lu Zm9DaGFyKCZidWYsICcpJyk7CisJCX0KKwl9CisKKwlpZiAoYnVmLmxlbiA9PSAwKQorCXsKKwkJ RXhwbGFpblByb3BlcnR5VGV4dChxbGFiZWwsICJub25lIiwgZXMpOworCQlyZXR1cm47CisJfQor CisJQXNzZXJ0KGJ1Zi5kYXRhWzBdID09ICcgJyk7CisJRXhwbGFpblByb3BlcnR5VGV4dChxbGFi ZWwsIGJ1Zi5kYXRhICsgMSwgZXMpOworCXBmcmVlKGJ1Zi5kYXRhKTsKK30KKwogLyoKICAqIEVt aXQgYSB0ZXh0IHByb3BlcnR5IGRlc2NyaWJpbmcgdGhlIGNvbnRlbnRzIG9mIGEgbGlzdCBvZiBp bnRlZ2VycywgT0lEcywKICAqIG9yIFhJRHMgLS0gZWl0aGVyIGEgc3BhY2Utc2VwYXJhdGVkIGxp c3Qgb2YgaW50ZWdlciBtZW1iZXJzLCBvciB0aGUgd29yZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2FsbHBhdGhzLmMKaW5kZXggYjQ1ODFlNTRkOTMuLjJjNzYyNDlkMjViIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAgLTEyOCw4ICsxMjgsMTAgQEAgc3RhdGljIFBhdGgg KmdldF9jaGVhcGVzdF9wYXJhbWV0ZXJpemVkX2NoaWxkX3BhdGgoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQkJCQkgICBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIpOwogc3RhdGljIHZvaWQgYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoLAogCQkJCQkJCQkJICBMaXN0ICoqc3Vi cGF0aHMsCi0JCQkJCQkJCQkgIExpc3QgKipzcGVjaWFsX3N1YnBhdGhzKTsKLXN0YXRpYyBQYXRo ICpnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgpOworCQkJCQkJCQkJICBM aXN0ICoqc3BlY2lhbF9zdWJwYXRocywKKwkJCQkJCQkJCSAgTGlzdCAqKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzKTsKK3N0YXRpYyBQYXRoICpnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRoKFBh dGggKnBhdGgsCisJCQkJCQkJCQkJICBMaXN0ICoqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwog c3RhdGljIHZvaWQgc2V0X2R1bW15X3JlbF9wYXRobGlzdChSZWxPcHRJbmZvICpyZWwpOwogc3Rh dGljIHZvaWQgc2V0X3N1YnF1ZXJ5X3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCQkJCQkJCSAgSW5kZXggcnRpLCBSYW5nZVRibEVudHJ5ICpydGUpOwpAQCAt MTQwNCwyMiArMTQwNiwyMSBAQCB2b2lkCiBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJTGlzdCAqbGl2ZV9jaGlsZHJlbHMp CiB7Ci0JTGlzdAkgICAqc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJc3VicGF0aHNfdmFsaWQgPSB0 cnVlOwotCUxpc3QJICAgKnN0YXJ0dXBfc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJc3RhcnR1cF9z dWJwYXRoc192YWxpZCA9IHRydWU7Ci0JTGlzdAkgICAqcGFydGlhbF9zdWJwYXRocyA9IE5JTDsK LQlMaXN0CSAgICpwYV9wYXJ0aWFsX3N1YnBhdGhzID0gTklMOwotCUxpc3QJICAgKnBhX25vbnBh cnRpYWxfc3VicGF0aHMgPSBOSUw7Ci0JYm9vbAkJcGFydGlhbF9zdWJwYXRoc192YWxpZCA9IHRy dWU7Ci0JYm9vbAkJcGFfc3VicGF0aHNfdmFsaWQ7CisJQXBwZW5kUGF0aElucHV0IHVucGFyYW1l dGVyaXplZCA9IHswfTsKKwlBcHBlbmRQYXRoSW5wdXQgc3RhcnR1cCA9IHswfTsKKwlBcHBlbmRQ YXRoSW5wdXQgcGFydGlhbF9vbmx5ID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBwYXJhbGxlbF9h cHBlbmQgPSB7MH07CisJYm9vbAkJdW5wYXJhbWV0ZXJpemVkX3ZhbGlkID0gdHJ1ZTsKKwlib29s CQlzdGFydHVwX3ZhbGlkID0gdHJ1ZTsKKwlib29sCQlwYXJ0aWFsX29ubHlfdmFsaWQgPSB0cnVl OworCWJvb2wJCXBhcmFsbGVsX2FwcGVuZF92YWxpZCA9IHRydWU7CiAJTGlzdAkgICAqYWxsX2No aWxkX3BhdGhrZXlzID0gTklMOwogCUxpc3QJICAgKmFsbF9jaGlsZF9vdXRlcnMgPSBOSUw7CiAJ TGlzdENlbGwgICAqbDsKIAlkb3VibGUJCXBhcnRpYWxfcm93cyA9IC0xOwogCiAJLyogSWYgYXBw cm9wcmlhdGUsIGNvbnNpZGVyIHBhcmFsbGVsIGFwcGVuZCAqLwotCXBhX3N1YnBhdGhzX3ZhbGlk ID0gZW5hYmxlX3BhcmFsbGVsX2FwcGVuZCAmJiByZWwtPmNvbnNpZGVyX3BhcmFsbGVsOworCXBh cmFsbGVsX2FwcGVuZF92YWxpZCA9IGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQgJiYgcmVsLT5jb25z aWRlcl9wYXJhbGxlbDsKIAogCS8qCiAJICogRm9yIGV2ZXJ5IG5vbi1kdW1teSBjaGlsZCwgcmVt ZW1iZXIgdGhlIGNoZWFwZXN0IHBhdGguICBBbHNvLCBpZGVudGlmeQpAQCAtMTQ0Myw5ICsxNDQ0 LDkgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwKIAkJaWYgKGNoaWxkcmVsLT5wYXRobGlzdCAhPSBOSUwgJiYKIAkJCWNoaWxkcmVs LT5jaGVhcGVzdF90b3RhbF9wYXRoLT5wYXJhbV9pbmZvID09IE5VTEwpCiAJCQlhY2N1bXVsYXRl X2FwcGVuZF9zdWJwYXRoKGNoaWxkcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoLAotCQkJCQkJCQkJ ICAmc3VicGF0aHMsIE5VTEwpOworCQkJCQkJCQkJICAmdW5wYXJhbWV0ZXJpemVkLnN1YnBhdGhz LCBOVUxMLCAmdW5wYXJhbWV0ZXJpemVkLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJZWxz ZQotCQkJc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCXVucGFyYW1ldGVyaXplZF92YWxpZCA9 IGZhbHNlOwogCiAJCS8qCiAJCSAqIFdoZW4gdGhlIHBsYW5uZXIgaXMgY29uc2lkZXJpbmcgY2hl YXAgc3RhcnR1cCBwbGFucywgd2UnbGwgYWxzbwpAQCAtMTQ3MSwxMSArMTQ3MiwxMiBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CQkJLyogY2hlYXBlc3Rfc3RhcnR1cF9wYXRoIG11c3Qgbm90IGJlIGEgcGFyYW1ldGVyaXplZCBw YXRoLiAqLwogCQkJQXNzZXJ0KGNoZWFwZXN0X3BhdGgtPnBhcmFtX2luZm8gPT0gTlVMTCk7CiAJ CQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3BhdGgsCi0JCQkJCQkJCQkgICZz dGFydHVwX3N1YnBhdGhzLAotCQkJCQkJCQkJICBOVUxMKTsKKwkJCQkJCQkJCSAgJnN0YXJ0dXAu c3VicGF0aHMsCisJCQkJCQkJCQkgIE5VTEwsCisJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2Fw cGVuZF9yZWxpZF9zZXRzKTsKIAkJfQogCQllbHNlCi0JCQlzdGFydHVwX3N1YnBhdGhzX3ZhbGlk ID0gZmFsc2U7CisJCQlzdGFydHVwX3ZhbGlkID0gZmFsc2U7CiAKIAogCQkvKiBTYW1lIGlkZWEs IGJ1dCBmb3IgYSBwYXJ0aWFsIHBsYW4uICovCkBAIC0xNDgzLDE2ICsxNDg1LDE3IEBAIGFkZF9w YXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CXsKIAkJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9IGxpbml0aWFsKGNoaWxkcmVsLT5wYXJ0aWFs X3BhdGhsaXN0KTsKIAkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfcGFydGlh bF9wYXRoLAotCQkJCQkJCQkJICAmcGFydGlhbF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkg ICZwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocywgTlVMTCwKKwkJCQkJCQkJCSAgJnBhcnRp YWxfb25seS5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCX0KIAkJZWxzZQotCQkJcGFydGlh bF9zdWJwYXRoc192YWxpZCA9IGZhbHNlOworCQkJcGFydGlhbF9vbmx5X3ZhbGlkID0gZmFsc2U7 CiAKIAkJLyoKIAkJICogU2FtZSBpZGVhLCBidXQgZm9yIGEgcGFyYWxsZWwgYXBwZW5kIG1peGlu ZyBwYXJ0aWFsIGFuZCBub24tcGFydGlhbAogCQkgKiBwYXRocy4KIAkJICovCi0JCWlmIChwYV9z dWJwYXRoc192YWxpZCkKKwkJaWYgKHBhcmFsbGVsX2FwcGVuZF92YWxpZCkKIAkJewogCQkJUGF0 aAkgICAqbnBwYXRoID0gTlVMTDsKIApAQCAtMTUwMiw3ICsxNTA1LDcgQEAgYWRkX3BhdGhzX3Rv X2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCWlmIChj aGVhcGVzdF9wYXJ0aWFsX3BhdGggPT0gTlVMTCAmJiBucHBhdGggPT0gTlVMTCkKIAkJCXsKIAkJ CQkvKiBOZWl0aGVyIGEgcGFydGlhbCBub3IgYSBwYXJhbGxlbC1zYWZlIHBhdGg/ICBGb3JnZXQg aXQuICovCi0JCQkJcGFfc3VicGF0aHNfdmFsaWQgPSBmYWxzZTsKKwkJCQlwYXJhbGxlbF9hcHBl bmRfdmFsaWQgPSBmYWxzZTsKIAkJCX0KIAkJCWVsc2UgaWYgKG5wcGF0aCA9PSBOVUxMIHx8CiAJ CQkJCSAoY2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwgJiYKQEAgLTE1MTEsOCArMTUxNCw5 IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAJCQkJLyogUGFydGlhbCBwYXRoIGlzIGNoZWFwZXIgb3IgdGhlIG9ubHkgb3B0aW9u LiAqLwogCQkJCUFzc2VydChjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0gTlVMTCk7CiAJCQkJYWNj dW11bGF0ZV9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF9wYXJ0aWFsX3BhdGgsCi0JCQkJCQkJCQkJ ICAmcGFfcGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJCQkgICZwYV9ub25wYXJ0aWFsX3N1YnBh dGhzKTsKKwkJCQkJCQkJCQkgICZwYXJhbGxlbF9hcHBlbmQucGFydGlhbF9zdWJwYXRocywKKwkJ CQkJCQkJCQkgICZwYXJhbGxlbF9hcHBlbmQuc3VicGF0aHMsCisJCQkJCQkJCQkJICAmcGFyYWxs ZWxfYXBwZW5kLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsK QEAgLTE1MzAsOCArMTUzNCw5IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJICogZmlndXJlIHRoYXQgb3V0LgogCQkJCSAq LwogCQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgobnBwYXRoLAotCQkJCQkJCQkJCSAgJnBh X25vbnBhcnRpYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJICBOVUxMKTsKKwkJCQkJCQkJCQkgICZw YXJhbGxlbF9hcHBlbmQuc3VicGF0aHMsCisJCQkJCQkJCQkJICBOVUxMLAorCQkJCQkJCQkJCSAg JnBhcmFsbGVsX2FwcGVuZC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJCX0KIApA QCAtMTYwNSwyOCArMTYxMCwyOCBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIHVucGFyYW1ldGVyaXplZCBBcHBlbmQgcGF0 aCBmb3IgdGhlIHJlbC4gIChOb3RlOiB0aGlzIGlzIGNvcnJlY3QgZXZlbgogCSAqIGlmIHdlIGhh dmUgemVybyBvciBvbmUgbGl2ZSBzdWJwYXRoIGR1ZSB0byBjb25zdHJhaW50IGV4Y2x1c2lvbi4p CiAJICovCi0JaWYgKHN1YnBhdGhzX3ZhbGlkKQotCQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNy ZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIHN1YnBhdGhzLCBOSUwsCisJaWYgKHVucGFyYW1l dGVyaXplZF92YWxpZCkKKwkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3Bh dGgocm9vdCwgcmVsLCB1bnBhcmFtZXRlcml6ZWQsCiAJCQkJCQkJCQkJCQkgIE5JTCwgTlVMTCwg MCwgZmFsc2UsCiAJCQkJCQkJCQkJCQkgIC0xKSk7CiAKIAkvKiBidWlsZCBhbiBBcHBlbmRQYXRo IGZvciB0aGUgY2hlYXAgc3RhcnR1cCBwYXRocywgaWYgdmFsaWQgKi8KLQlpZiAoc3RhcnR1cF9z dWJwYXRoc192YWxpZCkKLQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3Bh dGgocm9vdCwgcmVsLCBzdGFydHVwX3N1YnBhdGhzLAotCQkJCQkJCQkJCQkJICBOSUwsIE5JTCwg TlVMTCwgMCwgZmFsc2UsIC0xKSk7CisJaWYgKHN0YXJ0dXBfdmFsaWQpCisJCWFkZF9wYXRoKHJl bCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgc3RhcnR1cCwKKwkJCQkJ CQkJCQkJCSAgTklMLCBOVUxMLCAwLCBmYWxzZSwgLTEpKTsKIAogCS8qCiAJICogQ29uc2lkZXIg YW4gYXBwZW5kIG9mIHVub3JkZXJlZCwgdW5wYXJhbWV0ZXJpemVkIHBhcnRpYWwgcGF0aHMuICBN YWtlCiAJICogaXQgcGFyYWxsZWwtYXdhcmUgaWYgcG9zc2libGUuCiAJICovCi0JaWYgKHBhcnRp YWxfc3VicGF0aHNfdmFsaWQgJiYgcGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBhcnRp YWxfb25seV92YWxpZCAmJiBwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCiAJ ewogCQlBcHBlbmRQYXRoICphcHBlbmRwYXRoOwogCQlMaXN0Q2VsbCAgICpsYzsKIAkJaW50CQkJ cGFyYWxsZWxfd29ya2VycyA9IDA7CiAKIAkJLyogRmluZCB0aGUgaGlnaGVzdCBudW1iZXIgb2Yg d29ya2VycyByZXF1ZXN0ZWQgZm9yIGFueSBzdWJwYXRoLiAqLwotCQlmb3JlYWNoKGxjLCBwYXJ0 aWFsX3N1YnBhdGhzKQorCQlmb3JlYWNoKGxjLCBwYXJ0aWFsX29ubHkucGFydGlhbF9zdWJwYXRo cykKIAkJewogCQkJUGF0aAkgICAqcGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTE2NTMsNyArMTY1 OCw3IEBAIGFkZF9wYXRoc190b19hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJCUFzc2VydChwYXJhbGxlbF93b3JrZXJzID4gMCk7CiAKIAkJLyogR2VuZXJh dGUgYSBwYXJ0aWFsIGFwcGVuZCBwYXRoLiAqLwotCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlbCwgTklMLCBwYXJ0aWFsX3N1YnBhdGhzLAorCQlhcHBlbmRwYXRoID0g Y3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFydGlhbF9vbmx5LAogCQkJCQkJCQkJCU5J TCwgTlVMTCwgcGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJCQllbmFibGVfcGFyYWxsZWxfYXBw ZW5kLAogCQkJCQkJCQkJCS0xKTsKQEAgLTE2NzQsNyArMTY3OSw3IEBAIGFkZF9wYXRoc190b19h cHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJICogYSBub24t cGFydGlhbCBwYXRoIHRoYXQgaXMgc3Vic3RhbnRpYWxseSBjaGVhcGVyIHRoYW4gYW55IHBhcnRp YWwgcGF0aDsKIAkgKiBvdGhlcndpc2UsIHdlIHNob3VsZCB1c2UgdGhlIGFwcGVuZCBwYXRoIGFk ZGVkIGluIHRoZSBwcmV2aW91cyBzdGVwLikKIAkgKi8KLQlpZiAocGFfc3VicGF0aHNfdmFsaWQg JiYgcGFfbm9ucGFydGlhbF9zdWJwYXRocyAhPSBOSUwpCisJaWYgKHBhcmFsbGVsX2FwcGVuZF92 YWxpZCAmJiBwYXJhbGxlbF9hcHBlbmQuc3VicGF0aHMgIT0gTklMKQogCXsKIAkJQXBwZW5kUGF0 aCAqYXBwZW5kcGF0aDsKIAkJTGlzdENlbGwgICAqbGM7CkBAIC0xNjg0LDcgKzE2ODksNyBAQCBh ZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCQkgKiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHJlcXVlc3RlZCBmb3Ig YW55IHBhcnRpYWwKIAkJICogc3VicGF0aC4KIAkJICovCi0JCWZvcmVhY2gobGMsIHBhX3BhcnRp YWxfc3VicGF0aHMpCisJCWZvcmVhY2gobGMsIHBhcmFsbGVsX2FwcGVuZC5wYXJ0aWFsX3N1YnBh dGhzKQogCQl7CiAJCQlQYXRoCSAgICpwYXRoID0gbGZpcnN0KGxjKTsKIApAQCAtMTcwMiw4ICsx NzA3LDcgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAkJCQkJCQkgICBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyKTsK IAkJQXNzZXJ0KHBhcmFsbGVsX3dvcmtlcnMgPiAwKTsKIAotCQlhcHBlbmRwYXRoID0gY3JlYXRl X2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFfbm9ucGFydGlhbF9zdWJwYXRocywKLQkJCQkJCQkJ CQlwYV9wYXJ0aWFsX3N1YnBhdGhzLAorCQlhcHBlbmRwYXRoID0gY3JlYXRlX2FwcGVuZF9wYXRo KHJvb3QsIHJlbCwgcGFyYWxsZWxfYXBwZW5kLAogCQkJCQkJCQkJCU5JTCwgTlVMTCwgcGFyYWxs ZWxfd29ya2VycywgdHJ1ZSwKIAkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQlhZGRfcGFydGlh bF9wYXRoKHJlbCwgKFBhdGggKikgYXBwZW5kcGF0aCk7CkBAIC0xNzEzLDcgKzE3MTcsNyBAQCBh ZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCSAqIEFsc28gYnVpbGQgdW5wYXJhbWV0ZXJpemVkIG9yZGVyZWQgYXBwZW5kIHBhdGhzIGJh c2VkIG9uIHRoZSBjb2xsZWN0ZWQKIAkgKiBsaXN0IG9mIGNoaWxkIHBhdGhrZXlzLgogCSAqLwot CWlmIChzdWJwYXRoc192YWxpZCkKKwlpZiAodW5wYXJhbWV0ZXJpemVkX3ZhbGlkKQogCQlnZW5l cmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKHJvb3QsIHJlbCwgbGl2ZV9jaGlsZHJlbHMsCiAJCQkJ CQkJCQkgYWxsX2NoaWxkX3BhdGhrZXlzKTsKIApAQCAtMTczNCwxMCArMTczOCwxMCBAQCBhZGRf cGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CXsKIAkJUmVsaWRzCQlyZXF1aXJlZF9vdXRlciA9IChSZWxpZHMpIGxmaXJzdChsKTsKIAkJTGlz dENlbGwgICAqbGNyOworCQlBcHBlbmRQYXRoSW5wdXQgcGFyYW1ldGVyaXplZCA9IHswfTsKKwkJ Ym9vbAkJcGFyYW1ldGVyaXplZF92YWxpZCA9IHRydWU7CiAKIAkJLyogU2VsZWN0IHRoZSBjaGls ZCBwYXRocyBmb3IgYW4gQXBwZW5kIHdpdGggdGhpcyBwYXJhbWV0ZXJpemF0aW9uICovCi0JCXN1 YnBhdGhzID0gTklMOwotCQlzdWJwYXRoc192YWxpZCA9IHRydWU7CiAJCWZvcmVhY2gobGNyLCBs aXZlX2NoaWxkcmVscykKIAkJewogCQkJUmVsT3B0SW5mbyAqY2hpbGRyZWwgPSAoUmVsT3B0SW5m byAqKSBsZmlyc3QobGNyKTsKQEAgLTE3NDYsNyArMTc1MCw3IEBAIGFkZF9wYXRoc190b19hcHBl bmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQlpZiAoY2hpbGRy ZWwtPnBhdGhsaXN0ID09IE5JTCkKIAkJCXsKIAkJCQkvKiBmYWlsZWQgdG8gbWFrZSBhIHN1aXRh YmxlIHBhdGggZm9yIHRoaXMgY2hpbGQgKi8KLQkJCQlzdWJwYXRoc192YWxpZCA9IGZhbHNlOwor CQkJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSBmYWxzZTsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAt MTc1NiwxNSArMTc2MCwxNiBAQCBhZGRfcGF0aHNfdG9fYXBwZW5kX3JlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKHN1YnBhdGggPT0gTlVMTCkKIAkJCXsKIAkJ CQkvKiBmYWlsZWQgdG8gbWFrZSBhIHN1aXRhYmxlIHBhdGggZm9yIHRoaXMgY2hpbGQgKi8KLQkJ CQlzdWJwYXRoc192YWxpZCA9IGZhbHNlOworCQkJCXBhcmFtZXRlcml6ZWRfdmFsaWQgPSBmYWxz ZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoc3VicGF0 aCwgJnN1YnBhdGhzLCBOVUxMKTsKKwkJCWFjY3VtdWxhdGVfYXBwZW5kX3N1YnBhdGgoc3VicGF0 aCwgJnBhcmFtZXRlcml6ZWQuc3VicGF0aHMsIE5VTEwsCisJCQkJCQkJCQkgICZwYXJhbWV0ZXJp emVkLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJfQogCi0JCWlmIChzdWJwYXRoc192YWxp ZCkKKwkJaWYgKHBhcmFtZXRlcml6ZWRfdmFsaWQpCiAJCQlhZGRfcGF0aChyZWwsIChQYXRoICop Ci0JCQkJCSBjcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRocywgTklMLAorCQkJ CQkgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsIHJlbCwgcGFyYW1ldGVyaXplZCwKIAkJCQkJCQkJ CQlOSUwsIHJlcXVpcmVkX291dGVyLCAwLCBmYWxzZSwKIAkJCQkJCQkJCQktMSkpOwogCX0KQEAg LTE3ODUsMTMgKzE3OTAsMTYgQEAgYWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJewogCQkJUGF0aAkgICAqcGF0aCA9IChQYXRoICop IGxmaXJzdChsKTsKIAkJCUFwcGVuZFBhdGggKmFwcGVuZHBhdGg7CisJCQlBcHBlbmRQYXRoSW5w dXQgYXBwZW5kID0gezB9OworCisJCQlhcHBlbmQucGFydGlhbF9zdWJwYXRocyA9IGxpc3RfbWFr ZTEocGF0aCk7CisJCQlhcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBsaXN0X21ha2Ux KHJlbC0+cmVsaWRzKTsKIAogCQkJLyogc2tpcCBwYXRocyB3aXRoIG5vIHBhdGhrZXlzLiAqLwog CQkJaWYgKHBhdGgtPnBhdGhrZXlzID09IE5JTCkKIAkJCQljb250aW51ZTsKIAotCQkJYXBwZW5k cGF0aCA9IGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIE5JTCwgbGlzdF9tYWtlMShwYXRo KSwKLQkJCQkJCQkJCQkJTklMLCBOVUxMLAorCQkJYXBwZW5kcGF0aCA9IGNyZWF0ZV9hcHBlbmRf cGF0aChyb290LCByZWwsIGFwcGVuZCwgTklMLCBOVUxMLAogCQkJCQkJCQkJCQlwYXRoLT5wYXJh bGxlbF93b3JrZXJzLCB0cnVlLAogCQkJCQkJCQkJCQlwYXJ0aWFsX3Jvd3MpOwogCQkJYWRkX3Bh cnRpYWxfcGF0aChyZWwsIChQYXRoICopIGFwcGVuZHBhdGgpOwpAQCAtMTg3Myw5ICsxODgxLDkg QEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAogCWZvcmVhY2gobGNwLCBhbGxfY2hpbGRfcGF0aGtleXMpCiAJewogCQlMaXN0 CSAgICpwYXRoa2V5cyA9IChMaXN0ICopIGxmaXJzdChsY3ApOwotCQlMaXN0CSAgICpzdGFydHVw X3N1YnBhdGhzID0gTklMOwotCQlMaXN0CSAgICp0b3RhbF9zdWJwYXRocyA9IE5JTDsKLQkJTGlz dAkgICAqZnJhY3Rpb25hbF9zdWJwYXRocyA9IE5JTDsKKwkJQXBwZW5kUGF0aElucHV0IHN0YXJ0 dXAgPSB7MH07CisJCUFwcGVuZFBhdGhJbnB1dCB0b3RhbCA9IHswfTsKKwkJQXBwZW5kUGF0aElu cHV0IGZyYWN0aW9uYWwgPSB7MH07CiAJCWJvb2wJCXN0YXJ0dXBfbmVxX3RvdGFsID0gZmFsc2U7 CiAJCWJvb2wJCWZyYWN0aW9uX25lcV90b3RhbCA9IGZhbHNlOwogCQlib29sCQltYXRjaF9wYXJ0 aXRpb25fb3JkZXI7CkBAIC0yMDM4LDE2ICsyMDQ2LDIzIEBAIGdlbmVyYXRlX29yZGVyZWRhcHBl bmRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkgKiBqdXN0 IGEgc2luZ2xlIHN1YnBhdGggKGFuZCBoZW5jZSBhcmVuJ3QgZG9pbmcgYW55dGhpbmcKIAkJCQkg KiB1c2VmdWwpLgogCQkJCSAqLwotCQkJCWNoZWFwZXN0X3N0YXJ0dXAgPSBnZXRfc2luZ2xldG9u X2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXApOwotCQkJCWNoZWFwZXN0X3RvdGFsID0g Z2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChjaGVhcGVzdF90b3RhbCk7CisJCQkJY2hlYXBl c3Rfc3RhcnR1cCA9CisJCQkJCWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3Rf c3RhcnR1cCwKKwkJCQkJCQkJCQkJCSAmc3RhcnR1cC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7 CisJCQkJY2hlYXBlc3RfdG90YWwgPQorCQkJCQlnZXRfc2luZ2xldG9uX2FwcGVuZF9zdWJwYXRo KGNoZWFwZXN0X3RvdGFsLAorCQkJCQkJCQkJCQkJICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRf c2V0cyk7CiAKLQkJCQlzdGFydHVwX3N1YnBhdGhzID0gbGFwcGVuZChzdGFydHVwX3N1YnBhdGhz LCBjaGVhcGVzdF9zdGFydHVwKTsKLQkJCQl0b3RhbF9zdWJwYXRocyA9IGxhcHBlbmQodG90YWxf c3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKKwkJCQlzdGFydHVwLnN1YnBhdGhzID0gbGFwcGVu ZChzdGFydHVwLnN1YnBhdGhzLCBjaGVhcGVzdF9zdGFydHVwKTsKKwkJCQl0b3RhbC5zdWJwYXRo cyA9IGxhcHBlbmQodG90YWwuc3VicGF0aHMsIGNoZWFwZXN0X3RvdGFsKTsKIAogCQkJCWlmIChj aGVhcGVzdF9mcmFjdGlvbmFsKQogCQkJCXsKLQkJCQkJY2hlYXBlc3RfZnJhY3Rpb25hbCA9IGdl dF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCk7Ci0JCQkJCWZy YWN0aW9uYWxfc3VicGF0aHMgPSBsYXBwZW5kKGZyYWN0aW9uYWxfc3VicGF0aHMsIGNoZWFwZXN0 X2ZyYWN0aW9uYWwpOworCQkJCQljaGVhcGVzdF9mcmFjdGlvbmFsID0KKwkJCQkJCWdldF9zaW5n bGV0b25fYXBwZW5kX3N1YnBhdGgoY2hlYXBlc3RfZnJhY3Rpb25hbCwKKwkJCQkJCQkJCQkJCQkg JmZyYWN0aW9uYWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOworCQkJCQlmcmFjdGlvbmFsLnN1 YnBhdGhzID0KKwkJCQkJCWxhcHBlbmQoZnJhY3Rpb25hbC5zdWJwYXRocywgY2hlYXBlc3RfZnJh Y3Rpb25hbCk7CiAJCQkJfQogCQkJfQogCQkJZWxzZQpAQCAtMjA1NywxMyArMjA3MiwxNiBAQCBn ZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAJCQkJICogY2hpbGQgcGF0aHMgZm9yIHRoZSBNZXJnZUFwcGVuZC4KIAkJCQkgKi8K IAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3N0YXJ0dXAsCi0JCQkJCQkJ CQkJICAmc3RhcnR1cF9zdWJwYXRocywgTlVMTCk7CisJCQkJCQkJCQkJICAmc3RhcnR1cC5zdWJw YXRocywgTlVMTCwKKwkJCQkJCQkJCQkgICZzdGFydHVwLmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRz KTsKIAkJCQlhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKGNoZWFwZXN0X3RvdGFsLAotCQkJCQkJ CQkJCSAgJnRvdGFsX3N1YnBhdGhzLCBOVUxMKTsKKwkJCQkJCQkJCQkgICZ0b3RhbC5zdWJwYXRo cywgTlVMTCwKKwkJCQkJCQkJCQkgICZ0b3RhbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAK IAkJCQlpZiAoY2hlYXBlc3RfZnJhY3Rpb25hbCkKIAkJCQkJYWNjdW11bGF0ZV9hcHBlbmRfc3Vi cGF0aChjaGVhcGVzdF9mcmFjdGlvbmFsLAotCQkJCQkJCQkJCQkgICZmcmFjdGlvbmFsX3N1YnBh dGhzLCBOVUxMKTsKKwkJCQkJCQkJCQkJICAmZnJhY3Rpb25hbC5zdWJwYXRocywgTlVMTCwKKwkJ CQkJCQkJCQkJICAmZnJhY3Rpb25hbC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyk7CiAJCQl9CiAJ CX0KIApAQCAtMjA3Myw4ICsyMDkxLDcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJLyogV2Ugb25seSBuZWVkIEFw cGVuZCAqLwogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgocm9v dCwKIAkJCQkJCQkJCQkJCQkgIHJlbCwKLQkJCQkJCQkJCQkJCQkgIHN0YXJ0dXBfc3VicGF0aHMs Ci0JCQkJCQkJCQkJCQkJICBOSUwsCisJCQkJCQkJCQkJCQkJICBzdGFydHVwLAogCQkJCQkJCQkJ CQkJCSAgcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCSAgMCwK QEAgLTIwODMsMTkgKzIxMDAsMTcgQEAgZ2VuZXJhdGVfb3JkZXJlZGFwcGVuZF9wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJaWYgKHN0YXJ0dXBfbmVxX3RvdGFs KQogCQkJCWFkZF9wYXRoKHJlbCwgKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJ CQkJCQkJCQkJCQkJCSAgcmVsLAotCQkJCQkJCQkJCQkJCQkgIHRvdGFsX3N1YnBhdGhzLAotCQkJ CQkJCQkJCQkJCQkgIE5JTCwKKwkJCQkJCQkJCQkJCQkJICB0b3RhbCwKIAkJCQkJCQkJCQkJCQkJ ICBwYXRoa2V5cywKIAkJCQkJCQkJCQkJCQkJICBOVUxMLAogCQkJCQkJCQkJCQkJCQkgIDAsCiAJ CQkJCQkJCQkJCQkJCSAgZmFsc2UsCiAJCQkJCQkJCQkJCQkJCSAgLTEpKTsKIAotCQkJaWYgKGZy YWN0aW9uYWxfc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQorCQkJaWYgKGZyYWN0aW9u YWwuc3VicGF0aHMgJiYgZnJhY3Rpb25fbmVxX3RvdGFsKQogCQkJCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3QsCiAJCQkJCQkJCQkJCQkJCSAgcmVsLAotCQkJ CQkJCQkJCQkJCQkgIGZyYWN0aW9uYWxfc3VicGF0aHMsCi0JCQkJCQkJCQkJCQkJCSAgTklMLAor CQkJCQkJCQkJCQkJCQkgIGZyYWN0aW9uYWwsCiAJCQkJCQkJCQkJCQkJCSAgcGF0aGtleXMsCiAJ CQkJCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkJCQkJICAwLApAQCAtMjEwNywyMCArMjEy MiwyMyBAQCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkvKiBXZSBuZWVkIE1lcmdlQXBwZW5kICovCiAJCQlhZGRfcGF0 aChyZWwsIChQYXRoICopIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJ CQkJCQkJcmVsLAotCQkJCQkJCQkJCQkJCQkJc3RhcnR1cF9zdWJwYXRocywKKwkJCQkJCQkJCQkJ CQkJCXN0YXJ0dXAuc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQlzdGFydHVwLmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQlO VUxMKSk7CiAJCQlpZiAoc3RhcnR1cF9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgocmVsLCAoUGF0 aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJCQkJCQlyZWws Ci0JCQkJCQkJCQkJCQkJCQkJdG90YWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJdG90YWwu c3VicGF0aHMsCisJCQkJCQkJCQkJCQkJCQkJdG90YWwuY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMs CiAJCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJCQkJCQkJCQkJCQkJTlVMTCkpOwogCi0J CQlpZiAoZnJhY3Rpb25hbF9zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCisJCQlpZiAo ZnJhY3Rpb25hbC5zdWJwYXRocyAmJiBmcmFjdGlvbl9uZXFfdG90YWwpCiAJCQkJYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BhdGgocm9vdCwKIAkJCQkJCQkJCQkJ CQkJCQlyZWwsCi0JCQkJCQkJCQkJCQkJCQkJZnJhY3Rpb25hbF9zdWJwYXRocywKKwkJCQkJCQkJ CQkJCQkJCQlmcmFjdGlvbmFsLnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJCQkJCWZyYWN0aW9uYWwu Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkJCQkJCQkJCQkJcGF0aGtleXMsCiAJCQkJ CQkJCQkJCQkJCQkJTlVMTCkpOwogCQl9CkBAIC0yMjIzLDcgKzIyNDEsOCBAQCBnZXRfY2hlYXBl c3RfcGFyYW1ldGVyaXplZF9jaGlsZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwsCiAgKiBwYXRocykuCiAgKi8KIHN0YXRpYyB2b2lkCi1hY2N1bXVsYXRlX2FwcGVuZF9z dWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0 aHMpCithY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRo cywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMsCisJCQkJCQkgIExpc3QgKipjaGlsZF9hcHBlbmRf cmVsaWRfc2V0cykKIHsKIAlpZiAoSXNBKHBhdGgsIEFwcGVuZFBhdGgpKQogCXsKQEAgLTIyMzIs NiArMjI1MSwxMSBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3Qg KipzdWJwYXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCWlmICghYXBhdGgtPnBhdGgu cGFyYWxsZWxfYXdhcmUgfHwgYXBhdGgtPmZpcnN0X3BhcnRpYWxfcGF0aCA9PSAwKQogCQl7CiAJ CQkqc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3VicGF0aHMsIGFwYXRoLT5zdWJwYXRocyk7CisJ CQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9y ZWxpZF9zZXRzLCBwYXRoLT5wYXJlbnQtPnJlbGlkcyk7CisJCQkqY2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPQorCQkJCWxpc3RfY29uY2F0KCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJ CQlhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMpOwogCQkJcmV0dXJuOwogCQl9CiAJCWVs c2UgaWYgKHNwZWNpYWxfc3VicGF0aHMgIT0gTlVMTCkKQEAgLTIyNDYsNiArMjI3MCwxMSBAQCBh Y2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJwYXRocywgTGlz dCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCQkJCQkJCQkJCQkgIGFwYXRoLT5maXJzdF9wYXJ0aWFs X3BhdGgpOwogCQkJKnNwZWNpYWxfc3VicGF0aHMgPSBsaXN0X2NvbmNhdCgqc3BlY2lhbF9zdWJw YXRocywKIAkJCQkJCQkJCQkJbmV3X3NwZWNpYWxfc3VicGF0aHMpOworCQkJKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzID0KKwkJCQlsYXBwZW5kKCpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgcGF0 aC0+cGFyZW50LT5yZWxpZHMpOworCQkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCQls aXN0X2NvbmNhdCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCisJCQkJCQkJYXBhdGgtPmNoaWxk X2FwcGVuZF9yZWxpZF9zZXRzKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTIyNTQsNiArMjI4 MywxMSBAQCBhY2N1bXVsYXRlX2FwcGVuZF9zdWJwYXRoKFBhdGggKnBhdGgsIExpc3QgKipzdWJw YXRocywgTGlzdCAqKnNwZWNpYWxfc3VicGF0aHMpCiAJCU1lcmdlQXBwZW5kUGF0aCAqbXBhdGgg PSAoTWVyZ2VBcHBlbmRQYXRoICopIHBhdGg7CiAKIAkJKnN1YnBhdGhzID0gbGlzdF9jb25jYXQo KnN1YnBhdGhzLCBtcGF0aC0+c3VicGF0aHMpOworCQkqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMg PQorCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgtPnBhcmVudC0+cmVs aWRzKTsKKwkJKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0KKwkJCWxpc3RfY29uY2F0KCpjaGls ZF9hcHBlbmRfcmVsaWRfc2V0cywKKwkJCQkJCW1wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0 cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIyNjUsMTAgKzIyOTksMTUgQEAgYWNjdW11bGF0ZV9h cHBlbmRfc3VicGF0aChQYXRoICpwYXRoLCBMaXN0ICoqc3VicGF0aHMsIExpc3QgKipzcGVjaWFs X3N1YnBhdGhzKQogICoJCVJldHVybnMgdGhlIHNpbmdsZSBzdWJwYXRoIG9mIGFuIEFwcGVuZC9N ZXJnZUFwcGVuZCwgb3IganVzdAogICoJCXJldHVybiAncGF0aCcgaWYgaXQncyBub3QgYSBzaW5n bGUgc3ViLXBhdGggQXBwZW5kL01lcmdlQXBwZW5kLgogICoKKyAqIEFzIGEgc2lkZSBlZmZlY3Qs IHdoZW5ldmVyIHdlIHJldHVybiBhIHNpbmdsZSBzdWJwYXRoIHJhdGhlciB0aGFuIHRoZQorICog b3JpZ2luYWwgcGF0aCwgYWRkIHRoZSByZWxpZCBzZXQgZm9yIHRoZSBvcmlnaW5hbCBwYXRoIHRv CisgKiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cywgc28gdGhhdCB0aG9zZSByZWxpZHMgZG9uJ3Qg ZW50aXJlbHkgZGlzYXBwZWFyCisgKiBmcm9tIHRoZSBmaW5hbCBwbGFuLgorICoKICAqIE5vdGU6 ICdwYXRoJyBtdXN0IG5vdCBiZSBhIHBhcmFsbGVsLWF3YXJlIHBhdGguCiAgKi8KIHN0YXRpYyBQ YXRoICoKLWdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCkKK2dldF9zaW5n bGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCwgTGlzdCAqKmNoaWxkX2FwcGVuZF9yZWxp ZF9zZXRzKQogewogCUFzc2VydCghcGF0aC0+cGFyYWxsZWxfYXdhcmUpOwogCkBAIC0yMjc3LDE0 ICsyMzE2LDIyIEBAIGdldF9zaW5nbGV0b25fYXBwZW5kX3N1YnBhdGgoUGF0aCAqcGF0aCkKIAkJ QXBwZW5kUGF0aCAqYXBhdGggPSAoQXBwZW5kUGF0aCAqKSBwYXRoOwogCiAJCWlmIChsaXN0X2xl bmd0aChhcGF0aC0+c3VicGF0aHMpID09IDEpCisJCXsKKwkJCSpjaGlsZF9hcHBlbmRfcmVsaWRf c2V0cyA9CisJCQkJbGFwcGVuZCgqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsIHBhdGgtPnBhcmVu dC0+cmVsaWRzKTsKIAkJCXJldHVybiAoUGF0aCAqKSBsaW5pdGlhbChhcGF0aC0+c3VicGF0aHMp OworCQl9CiAJfQogCWVsc2UgaWYgKElzQShwYXRoLCBNZXJnZUFwcGVuZFBhdGgpKQogCXsKIAkJ TWVyZ2VBcHBlbmRQYXRoICptcGF0aCA9IChNZXJnZUFwcGVuZFBhdGggKikgcGF0aDsKIAogCQlp ZiAobGlzdF9sZW5ndGgobXBhdGgtPnN1YnBhdGhzKSA9PSAxKQorCQl7CisJCQkqY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHMgPQorCQkJCWxhcHBlbmQoKmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzLCBw YXRoLT5wYXJlbnQtPnJlbGlkcyk7CiAJCQlyZXR1cm4gKFBhdGggKikgbGluaXRpYWwobXBhdGgt PnN1YnBhdGhzKTsKKwkJfQogCX0KIAogCXJldHVybiBwYXRoOwpAQCAtMjMwNCw2ICsyMzUxLDgg QEAgZ2V0X3NpbmdsZXRvbl9hcHBlbmRfc3VicGF0aChQYXRoICpwYXRoKQogc3RhdGljIHZvaWQK IHNldF9kdW1teV9yZWxfcGF0aGxpc3QoUmVsT3B0SW5mbyAqcmVsKQogeworCUFwcGVuZFBhdGhJ bnB1dCBpbiA9IHswfTsKKwogCS8qIFNldCBkdW1teSBzaXplIGVzdGltYXRlcyAtLS0gd2UgbGVh dmUgYXR0cl93aWR0aHNbXSBhcyB6ZXJvZXMgKi8KIAlyZWwtPnJvd3MgPSAwOwogCXJlbC0+cmVs dGFyZ2V0LT53aWR0aCA9IDA7CkBAIC0yMzEzLDcgKzIzNjIsNyBAQCBzZXRfZHVtbXlfcmVsX3Bh dGhsaXN0KFJlbE9wdEluZm8gKnJlbCkKIAlyZWwtPnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CiAK IAkvKiBTZXQgdXAgdGhlIGR1bW15IHBhdGggKi8KLQlhZGRfcGF0aChyZWwsIChQYXRoICopIGNy ZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIE5JTCwgTklMLAorCWFkZF9wYXRoKHJlbCwgKFBh dGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKE5VTEwsIHJlbCwgaW4sCiAJCQkJCQkJCQkJCSAgTklM LCByZWwtPmxhdGVyYWxfcmVsaWRzLAogCQkJCQkJCQkJCQkgIDAsIGZhbHNlLCAtMSkpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCAyNjE1NjUxYzA3My4uNDQzZTJk Y2E3YzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwpAQCAtMTUxMyw2ICsx NTEzLDcgQEAgdm9pZAogbWFya19kdW1teV9yZWwoUmVsT3B0SW5mbyAqcmVsKQogewogCU1lbW9y eUNvbnRleHQgb2xkY29udGV4dDsKKwlBcHBlbmRQYXRoSW5wdXQgaW4gPSB7MH07CiAKIAkvKiBB bHJlYWR5IG1hcmtlZD8gKi8KIAlpZiAoaXNfZHVtbXlfcmVsKHJlbCkpCkBAIC0xNTI5LDcgKzE1 MzAsNyBAQCBtYXJrX2R1bW15X3JlbChSZWxPcHRJbmZvICpyZWwpCiAJcmVsLT5wYXJ0aWFsX3Bh dGhsaXN0ID0gTklMOwogCiAJLyogU2V0IHVwIHRoZSBkdW1teSBwYXRoICovCi0JYWRkX3BhdGgo cmVsLCAoUGF0aCAqKSBjcmVhdGVfYXBwZW5kX3BhdGgoTlVMTCwgcmVsLCBOSUwsIE5JTCwKKwlh ZGRfcGF0aChyZWwsIChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChOVUxMLCByZWwsIGluLAog CQkJCQkJCQkJCQkgIE5JTCwgcmVsLT5sYXRlcmFsX3JlbGlkcywKIAkJCQkJCQkJCQkJICAwLCBm YWxzZSwgLTEpKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4 IGMyNmU4NDFmNTM3Li43NDg5NDY0N2NhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYwpAQCAtMTI2Myw2ICsxMjYzLDcgQEAgY3JlYXRlX2FwcGVuZF9wbGFuKFBsYW5u ZXJJbmZvICpyb290LCBBcHBlbmRQYXRoICpiZXN0X3BhdGgsIGludCBmbGFncykKIAlwbGFuLT5w bGFuLmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5wbGFuLnJpZ2h0dHJlZSA9IE5VTEw7CiAJcGxh bi0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CisJcGxhbi0+Y2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHMgPSBiZXN0X3BhdGgtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzOwogCiAJaWYgKHBhdGhrZXlz ICE9IE5JTCkKIAl7CkBAIC0xNDc1LDYgKzE0NzYsNyBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3Bs YW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4t PmxlZnR0cmVlID0gTlVMTDsKIAlwbGFuLT5yaWdodHRyZWUgPSBOVUxMOwogCW5vZGUtPmFwcHJl bGlkcyA9IHJlbC0+cmVsaWRzOworCW5vZGUtPmNoaWxkX2FwcGVuZF9yZWxpZF9zZXRzID0gYmVz dF9wYXRoLT5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAogCS8qCiAJICogQ29tcHV0ZSBzb3J0 IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdlQXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IGU4NjI3OTJlYjQ1Li5kNGJmOGE5 NTVkMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisr KyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNDA2Miw3ICs0MDYy LDcgQEAgY3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJICogbWlnaHQgZ2V0IGJldHdlZW4gMCBhbmQgTiBv dXRwdXQgcm93cy4gT2ZmaGFuZCBJIHRoaW5rIHRoYXQncwogCQkgKiBkZXNpcmVkLikKIAkJICov Ci0JCUxpc3QJICAgKnBhdGhzID0gTklMOworCQlBcHBlbmRQYXRoSW5wdXQgYXBwZW5kID0gezB9 OwogCiAJCXdoaWxlICgtLW5yb3dzID49IDApCiAJCXsKQEAgLTQwNzAsMTMgKzQwNzAsMTIgQEAg Y3JlYXRlX2RlZ2VuZXJhdGVfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKmlucHV0X3JlbCwKIAkJCQljcmVhdGVfZ3JvdXBfcmVzdWx0X3BhdGgocm9vdCwgZ3Jv dXBlZF9yZWwsCiAJCQkJCQkJCQkJIGdyb3VwZWRfcmVsLT5yZWx0YXJnZXQsCiAJCQkJCQkJCQkJ IChMaXN0ICopIHBhcnNlLT5oYXZpbmdRdWFsKTsKLQkJCXBhdGhzID0gbGFwcGVuZChwYXRocywg cGF0aCk7CisJCQlhcHBlbmQuc3VicGF0aHMgPSBsYXBwZW5kKGFwcGVuZC5zdWJwYXRocywgcGF0 aCk7CiAJCX0KIAkJcGF0aCA9IChQYXRoICopCiAJCQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwK IAkJCQkJCQkgICBncm91cGVkX3JlbCwKLQkJCQkJCQkgICBwYXRocywKLQkJCQkJCQkgICBOSUws CisJCQkJCQkJICAgYXBwZW5kLAogCQkJCQkJCSAgIE5JTCwKIAkJCQkJCQkgICBOVUxMLAogCQkJ CQkJCSAgIDAsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5p b24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCmluZGV4IDc4Yzk1 YzM2ZGQ1Li5mNTBjMjk2ZTNkOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3By ZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9u LmMKQEAgLTY5Niw5ICs2OTYsOSBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25T dG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJTGlzdENlbGwgICAqbGM7CiAJTGlzdENlbGwg ICAqbGMyOwogCUxpc3RDZWxsICAgKmxjMzsKLQlMaXN0CSAgICpjaGVhcGVzdF9wYXRobGlzdCA9 IE5JTDsKLQlMaXN0CSAgICpvcmRlcmVkX3BhdGhsaXN0ID0gTklMOwotCUxpc3QJICAgKnBhcnRp YWxfcGF0aGxpc3QgPSBOSUw7CisJQXBwZW5kUGF0aElucHV0IGNoZWFwZXN0ID0gezB9OworCUFw cGVuZFBhdGhJbnB1dCBvcmRlcmVkID0gezB9OworCUFwcGVuZFBhdGhJbnB1dCBwYXJ0aWFsID0g ezB9OwogCWJvb2wJCXBhcnRpYWxfcGF0aHNfdmFsaWQgPSB0cnVlOwogCWJvb2wJCWNvbnNpZGVy X3BhcmFsbGVsID0gdHJ1ZTsKIAlMaXN0CSAgICpyZWxsaXN0OwpAQCAtNzgzLDcgKzc4Myw3IEBA IGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAq cm9vdCwKIAkJaWYgKGlzX2R1bW15X3JlbChyZWwpKQogCQkJY29udGludWU7CiAKLQkJY2hlYXBl c3RfcGF0aGxpc3QgPSBsYXBwZW5kKGNoZWFwZXN0X3BhdGhsaXN0LAorCQljaGVhcGVzdC5zdWJw YXRocyA9IGxhcHBlbmQoY2hlYXBlc3Quc3VicGF0aHMsCiAJCQkJCQkJCQlyZWwtPmNoZWFwZXN0 X3RvdGFsX3BhdGgpOwogCiAJCWlmICh0cnlfc29ydGVkKQpAQCAtNzk1LDcgKzc5NSw3IEBAIGdl bmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCQkJCQkJCQkJICBmYWxzZSk7CiAKIAkJCWlmIChvcmRlcmVkX3BhdGggIT0gTlVM TCkKLQkJCQlvcmRlcmVkX3BhdGhsaXN0ID0gbGFwcGVuZChvcmRlcmVkX3BhdGhsaXN0LCBvcmRl cmVkX3BhdGgpOworCQkJCW9yZGVyZWQuc3VicGF0aHMgPSBsYXBwZW5kKG9yZGVyZWQuc3VicGF0 aHMsIG9yZGVyZWRfcGF0aCk7CiAJCQllbHNlCiAJCQl7CiAJCQkJLyoKQEAgLTgxOCwyMCArODE4 LDIwIEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVy SW5mbyAqcm9vdCwKIAkJCWVsc2UgaWYgKHJlbC0+cGFydGlhbF9wYXRobGlzdCA9PSBOSUwpCiAJ CQkJcGFydGlhbF9wYXRoc192YWxpZCA9IGZhbHNlOwogCQkJZWxzZQotCQkJCXBhcnRpYWxfcGF0 aGxpc3QgPSBsYXBwZW5kKHBhcnRpYWxfcGF0aGxpc3QsCi0JCQkJCQkJCQkJICAgbGluaXRpYWwo cmVsLT5wYXJ0aWFsX3BhdGhsaXN0KSk7CisJCQkJcGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzID0g bGFwcGVuZChwYXJ0aWFsLnBhcnRpYWxfc3VicGF0aHMsCisJCQkJCQkJCQkJCQkgICBsaW5pdGlh bChyZWwtPnBhcnRpYWxfcGF0aGxpc3QpKTsKIAkJfQogCX0KIAogCS8qIEJ1aWxkIHJlc3VsdCBy ZWxhdGlvbi4gKi8KIAlyZXN1bHRfcmVsID0gZmV0Y2hfdXBwZXJfcmVsKHJvb3QsIFVQUEVSUkVM X1NFVE9QLCByZWxpZHMpOwogCXJlc3VsdF9yZWwtPnJlbHRhcmdldCA9IGNyZWF0ZV9zZXRvcF9w YXRodGFyZ2V0KHJvb3QsIHRsaXN0LAotCQkJCQkJCQkJCQkJCWNoZWFwZXN0X3BhdGhsaXN0KTsK KwkJCQkJCQkJCQkJCQljaGVhcGVzdC5zdWJwYXRocyk7CiAJcmVzdWx0X3JlbC0+Y29uc2lkZXJf cGFyYWxsZWwgPSBjb25zaWRlcl9wYXJhbGxlbDsKIAlyZXN1bHRfcmVsLT5jb25zaWRlcl9zdGFy dHVwID0gKHJvb3QtPnR1cGxlX2ZyYWN0aW9uID4gMCk7CiAKIAkvKiBJZiBhbGwgVU5JT04gY2hp bGRyZW4gd2VyZSBkdW1teSByZWxzLCBtYWtlIHRoZSByZXN1bHRpbmcgcmVsIGR1bW15ICovCi0J aWYgKGNoZWFwZXN0X3BhdGhsaXN0ID09IE5JTCkKKwlpZiAoY2hlYXBlc3Quc3VicGF0aHMgPT0g TklMKQogCXsKIAkJbWFya19kdW1teV9yZWwocmVzdWx0X3JlbCk7CiAKQEAgLTg0Miw4ICs4NDIs OCBAQCBnZW5lcmF0ZV91bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lcklu Zm8gKnJvb3QsCiAJICogQXBwZW5kIHRoZSBjaGlsZCByZXN1bHRzIHRvZ2V0aGVyIHVzaW5nIHRo ZSBjaGVhcGVzdCBwYXRocyBmcm9tIGVhY2gKIAkgKiB1bmlvbiBjaGlsZC4KIAkgKi8KLQlhcGF0 aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVhcGVz dF9wYXRobGlzdCwKLQkJCQkJCQkJCQlOSUwsIE5JTCwgTlVMTCwgMCwgZmFsc2UsIC0xKTsKKwlh cGF0aCA9IChQYXRoICopIGNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBjaGVh cGVzdCwKKwkJCQkJCQkJCQlOSUwsIE5VTEwsIDAsIGZhbHNlLCAtMSk7CiAKIAkvKgogCSAqIEVz dGltYXRlIG51bWJlciBvZiBncm91cHMuICBGb3Igbm93IHdlIGp1c3QgYXNzdW1lIHRoZSBvdXRw dXQgaXMgdW5pcXVlCkBAIC04NjIsNyArODYyLDcgQEAgZ2VuZXJhdGVfdW5pb25fcGF0aHMoU2V0 T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQlpbnQJCQlwYXJhbGxlbF93 b3JrZXJzID0gMDsKIAogCQkvKiBGaW5kIHRoZSBoaWdoZXN0IG51bWJlciBvZiB3b3JrZXJzIHJl cXVlc3RlZCBmb3IgYW55IHN1YnBhdGguICovCi0JCWZvcmVhY2gobGMsIHBhcnRpYWxfcGF0aGxp c3QpCisJCWZvcmVhY2gobGMsIHBhcnRpYWwucGFydGlhbF9zdWJwYXRocykKIAkJewogCQkJUGF0 aAkgICAqc3VicGF0aCA9IGxmaXJzdChsYyk7CiAKQEAgLTg4MSwxNCArODgxLDE0IEBAIGdlbmVy YXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQgKm9wLCBQbGFubmVySW5mbyAqcm9vdCwK IAkJaWYgKGVuYWJsZV9wYXJhbGxlbF9hcHBlbmQpCiAJCXsKIAkJCXBhcmFsbGVsX3dvcmtlcnMg PSBNYXgocGFyYWxsZWxfd29ya2VycywKLQkJCQkJCQkJICAgcGdfbGVmdG1vc3Rfb25lX3BvczMy KGxpc3RfbGVuZ3RoKHBhcnRpYWxfcGF0aGxpc3QpKSArIDEpOworCQkJCQkJCQkgICBwZ19sZWZ0 bW9zdF9vbmVfcG9zMzIobGlzdF9sZW5ndGgocGFydGlhbC5wYXJ0aWFsX3N1YnBhdGhzKSkgKyAx KTsKIAkJCXBhcmFsbGVsX3dvcmtlcnMgPSBNaW4ocGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkJ ICAgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcik7CiAJCX0KIAkJQXNzZXJ0KHBhcmFs bGVsX3dvcmtlcnMgPiAwKTsKIAogCQlwYXBhdGggPSAoUGF0aCAqKQotCQkJY3JlYXRlX2FwcGVu ZF9wYXRoKHJvb3QsIHJlc3VsdF9yZWwsIE5JTCwgcGFydGlhbF9wYXRobGlzdCwKKwkJCWNyZWF0 ZV9hcHBlbmRfcGF0aChyb290LCByZXN1bHRfcmVsLCBwYXJ0aWFsLAogCQkJCQkJCSAgIE5JTCwg TlVMTCwgcGFyYWxsZWxfd29ya2VycywKIAkJCQkJCQkgICBlbmFibGVfcGFyYWxsZWxfYXBwZW5k LCAtMSk7CiAJCWdwYXRoID0gKFBhdGggKikKQEAgLTkwMSw3ICs5MDEsNyBAQCBnZW5lcmF0ZV91 bmlvbl9wYXRocyhTZXRPcGVyYXRpb25TdG10ICpvcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCWRv dWJsZQkJZE51bUdyb3VwczsKIAkJYm9vbAkJY2FuX3NvcnQgPSBncm91cGluZ19pc19zb3J0YWJs ZShncm91cExpc3QpOwogCQlib29sCQljYW5faGFzaCA9IGdyb3VwaW5nX2lzX2hhc2hhYmxlKGdy b3VwTGlzdCk7Ci0JCVBhdGgJICAgKmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdF9wYXRo bGlzdCk7CisJCVBhdGgJICAgKmZpcnN0X3BhdGggPSBsaW5pdGlhbChjaGVhcGVzdC5zdWJwYXRo cyk7CiAKIAkJLyoKIAkJICogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBVTklPTiBvdXRwdXQgcm93 cy4gIEluIHRoZSBjYXNlIHdoZW4gb25seSBhCkBAIC05MTEsNyArOTExLDcgQEAgZ2VuZXJhdGVf dW5pb25fcGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkg KiBjb250YWluIFZhcnMgd2l0aCB2YXJubz09MCwgd2hpY2ggZXN0aW1hdGVfbnVtX2dyb3Vwcygp IHdvdWxkbid0CiAJCSAqIGxpa2UuCiAJCSAqLwotCQlpZiAobGlzdF9sZW5ndGgoY2hlYXBlc3Rf cGF0aGxpc3QpID09IDEgJiYKKwkJaWYgKGxpc3RfbGVuZ3RoKGNoZWFwZXN0LnN1YnBhdGhzKSA9 PSAxICYmCiAJCQlmaXJzdF9wYXRoLT5wYXJlbnQtPnJlbG9wdGtpbmQgIT0gUkVMT1BUX1VQUEVS X1JFTCkKIAkJewogCQkJZE51bUdyb3VwcyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKQEAg LTEwMTcsNyArMTAxNyw4IEBAIGdlbmVyYXRlX3VuaW9uX3BhdGhzKFNldE9wZXJhdGlvblN0bXQg Km9wLCBQbGFubmVySW5mbyAqcm9vdCwKIAogCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tZXJn ZV9hcHBlbmRfcGF0aChyb290LAogCQkJCQkJCQkJCQkJCSByZXN1bHRfcmVsLAotCQkJCQkJCQkJ CQkJCSBvcmRlcmVkX3BhdGhsaXN0LAorCQkJCQkJCQkJCQkJCSBvcmRlcmVkLnN1YnBhdGhzLAor CQkJCQkJCQkJCQkJCSBOSUwsCiAJCQkJCQkJCQkJCQkJIHVuaW9uX3BhdGhrZXlzLAogCQkJCQkJ CQkJCQkJCSBOVUxMKTsKIApAQCAtMTIxNiw2ICsxMjE3LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJaWYgKG9w LT5hbGwpCiAJCQl7CiAJCQkJUGF0aAkgICAqYXBhdGg7CisJCQkJQXBwZW5kUGF0aElucHV0IGFw cGVuZCA9IHswfTsKKworCQkJCWFwcGVuZC5zdWJwYXRocyA9IGxpc3RfbWFrZTEobHBhdGgpOwog CiAJCQkJLyoKIAkJCQkgKiBFWENFUFQgQUxMOiBJZiB0aGUgcmlnaHQtaGFuZCBpbnB1dCBpcyBk dW1teSB0aGVuIHdlIGNhbgpAQCAtMTIyNCw4ICsxMjI4LDkgQEAgZ2VuZXJhdGVfbm9udW5pb25f cGF0aHMoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAqIGJl dHdlZW4gdGhlIHNldCBvcCB0YXJnZXRsaXN0IGFuZCB0aGUgdGFyZ2V0bGlzdCBvZiB0aGUKIAkJ CQkgKiBsZWZ0IGlucHV0LiAgVGhlIEFwcGVuZCB3aWxsIGJlIHJlbW92ZWQgaW4gc2V0cmVmcy5j LgogCQkJCSAqLwotCQkJCWFwYXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9wYXRoKHJvb3Qs IHJlc3VsdF9yZWwsIGxpc3RfbWFrZTEobHBhdGgpLAotCQkJCQkJCQkJCQkJCU5JTCwgTklMLCBO VUxMLCAwLCBmYWxzZSwgLTEpOworCQkJCWFwYXRoID0gKFBhdGggKikgY3JlYXRlX2FwcGVuZF9w YXRoKHJvb3QsIHJlc3VsdF9yZWwsCisJCQkJCQkJCQkJCQkJYXBwZW5kLCBOSUwsIE5VTEwsIDAs CisJCQkJCQkJCQkJCQkJZmFsc2UsIC0xKTsKIAogCQkJCWFkZF9wYXRoKHJlc3VsdF9yZWwsIGFw YXRoKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggNzI5NTQzOGFk MjAuLmJiMzAxZDU5NjkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKQEAg LTEyOTgsNyArMTI5OCw3IEBAIGNyZWF0ZV90aWRyYW5nZXNjYW5fcGF0aChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogQXBwZW5kUGF0aCAqCiBjcmVhdGVfYXBwZW5kX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJICAgUmVsT3B0SW5mbyAqcmVsLAotCQkJCSAgIExpc3Qg KnN1YnBhdGhzLCBMaXN0ICpwYXJ0aWFsX3N1YnBhdGhzLAorCQkJCSAgIEFwcGVuZFBhdGhJbnB1 dCBpbnB1dCwKIAkJCQkgICBMaXN0ICpwYXRoa2V5cywgUmVsaWRzIHJlcXVpcmVkX291dGVyLAog CQkJCSAgIGludCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJCSAg IGRvdWJsZSByb3dzKQpAQCAtMTMwOCw2ICsxMzA4LDcgQEAgY3JlYXRlX2FwcGVuZF9wYXRoKFBs YW5uZXJJbmZvICpyb290LAogCiAJQXNzZXJ0KCFwYXJhbGxlbF9hd2FyZSB8fCBwYXJhbGxlbF93 b3JrZXJzID4gMCk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBpbnB1 dC5jaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRf QXBwZW5kOwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9kZS0+cGF0aC5w YXRodGFyZ2V0ID0gcmVsLT5yZWx0YXJnZXQ7CkBAIC0xMzIzLDcgKzEzMjQsNyBAQCBjcmVhdGVf YXBwZW5kX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogb24gdGhlIHNpbXBsZXIgZ2V0X2Fw cGVuZHJlbF9wYXJhbXBhdGhpbmZvLiAgVGhlcmUncyBubyBwb2ludCBpbiBkb2luZwogCSAqIHRo ZSBtb3JlIGV4cGVuc2l2ZSB0aGluZyBmb3IgYSBkdW1teSBwYXRoLCBlaXRoZXIuCiAJICovCi0J aWYgKHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCAmJiByb290ICYmIHN1YnBhdGhz ICE9IE5JTCkKKwlpZiAocmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9CQVNFUkVMICYmIHJvb3Qg JiYgaW5wdXQuc3VicGF0aHMgIT0gTklMKQogCQlwYXRobm9kZS0+cGF0aC5wYXJhbV9pbmZvID0g Z2V0X2Jhc2VyZWxfcGFyYW1wYXRoaW5mbyhyb290LAogCQkJCQkJCQkJCQkJCQkJICByZWwsCiAJ CQkJCQkJCQkJCQkJCQkgIHJlcXVpcmVkX291dGVyKTsKQEAgLTEzNTQsMTEgKzEzNTUsMTEgQEAg Y3JlYXRlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkgKi8KIAkJQXNzZXJ0KHBh dGhrZXlzID09IE5JTCk7CiAKLQkJbGlzdF9zb3J0KHN1YnBhdGhzLCBhcHBlbmRfdG90YWxfY29z dF9jb21wYXJlKTsKLQkJbGlzdF9zb3J0KHBhcnRpYWxfc3VicGF0aHMsIGFwcGVuZF9zdGFydHVw X2Nvc3RfY29tcGFyZSk7CisJCWxpc3Rfc29ydChpbnB1dC5zdWJwYXRocywgYXBwZW5kX3RvdGFs X2Nvc3RfY29tcGFyZSk7CisJCWxpc3Rfc29ydChpbnB1dC5wYXJ0aWFsX3N1YnBhdGhzLCBhcHBl bmRfc3RhcnR1cF9jb3N0X2NvbXBhcmUpOwogCX0KLQlwYXRobm9kZS0+Zmlyc3RfcGFydGlhbF9w YXRoID0gbGlzdF9sZW5ndGgoc3VicGF0aHMpOwotCXBhdGhub2RlLT5zdWJwYXRocyA9IGxpc3Rf Y29uY2F0KHN1YnBhdGhzLCBwYXJ0aWFsX3N1YnBhdGhzKTsKKwlwYXRobm9kZS0+Zmlyc3RfcGFy dGlhbF9wYXRoID0gbGlzdF9sZW5ndGgoaW5wdXQuc3VicGF0aHMpOworCXBhdGhub2RlLT5zdWJw YXRocyA9IGxpc3RfY29uY2F0KGlucHV0LnN1YnBhdGhzLCBpbnB1dC5wYXJ0aWFsX3N1YnBhdGhz KTsKIAogCS8qCiAJICogQXBwbHkgcXVlcnktd2lkZSBMSU1JVCBpZiBrbm93biBhbmQgcGF0aCBp cyBmb3Igc29sZSBiYXNlIHJlbGF0aW9uLgpAQCAtMTQ3MCw2ICsxNDcxLDcgQEAgTWVyZ2VBcHBl bmRQYXRoICoKIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQkJCSBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkgTGlzdCAqc3VicGF0aHMsCisJCQkJCQkgTGlz dCAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMsCiAJCQkJCQkgTGlzdCAqcGF0aGtleXMsCiAJCQkJ CQkgUmVsaWRzIHJlcXVpcmVkX291dGVyKQogewpAQCAtMTQ4NSw2ICsxNDg3LDcgQEAgY3JlYXRl X21lcmdlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCUFzc2VydChibXNf aXNfZW1wdHkocmVsLT5sYXRlcmFsX3JlbGlkcykgJiYgYm1zX2lzX2VtcHR5KHJlcXVpcmVkX291 dGVyKSk7CiAKKwlwYXRobm9kZS0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgPSBjaGlsZF9hcHBl bmRfcmVsaWRfc2V0czsKIAlwYXRobm9kZS0+cGF0aC5wYXRodHlwZSA9IFRfTWVyZ2VBcHBlbmQ7 CiAJcGF0aG5vZGUtPnBhdGgucGFyZW50ID0gcmVsOwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJn ZXQgPSByZWwtPnJlbHRhcmdldDsKQEAgLTM5MzIsMTEgKzM5MzUsMTIgQEAgcmVwYXJhbWV0ZXJp emVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwKIAkJY2FzZSBUX0FwcGVuZDoK IAkJCXsKIAkJCQlBcHBlbmRQYXRoICphcGF0aCA9IChBcHBlbmRQYXRoICopIHBhdGg7Ci0JCQkJ TGlzdAkgICAqY2hpbGRwYXRocyA9IE5JTDsKLQkJCQlMaXN0CSAgICpwYXJ0aWFscGF0aHMgPSBO SUw7CisJCQkJQXBwZW5kUGF0aElucHV0IG5ld19hcHBlbmQgPSB7MH07CiAJCQkJaW50CQkJaTsK IAkJCQlMaXN0Q2VsbCAgICpsYzsKIAorCQkJCW5ld19hcHBlbmQuY2hpbGRfYXBwZW5kX3JlbGlk X3NldHMgPSBhcGF0aC0+Y2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKIAkJCQkvKiBSZXBhcmFt ZXRlcml6ZSB0aGUgY2hpbGRyZW4gKi8KIAkJCQlpID0gMDsKIAkJCQlmb3JlYWNoKGxjLCBhcGF0 aC0+c3VicGF0aHMpCkBAIC0zOTUwLDEzICszOTU0LDEzIEBAIHJlcGFyYW1ldGVyaXplX3BhdGgo UGxhbm5lckluZm8gKnJvb3QsIFBhdGggKnBhdGgsCiAJCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQkJ LyogV2UgaGF2ZSB0byByZS1zcGxpdCB0aGUgcmVndWxhciBhbmQgcGFydGlhbCBwYXRocyAqLwog CQkJCQlpZiAoaSA8IGFwYXRoLT5maXJzdF9wYXJ0aWFsX3BhdGgpCi0JCQkJCQljaGlsZHBhdGhz ID0gbGFwcGVuZChjaGlsZHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdfYXBwZW5kLnN1YnBhdGhz ID0gbGFwcGVuZChuZXdfYXBwZW5kLnN1YnBhdGhzLCBzcGF0aCk7CiAJCQkJCWVsc2UKLQkJCQkJ CXBhcnRpYWxwYXRocyA9IGxhcHBlbmQocGFydGlhbHBhdGhzLCBzcGF0aCk7CisJCQkJCQluZXdf YXBwZW5kLnBhcnRpYWxfc3VicGF0aHMgPSBsYXBwZW5kKG5ld19hcHBlbmQucGFydGlhbF9zdWJw YXRocywgc3BhdGgpOwogCQkJCQlpKys7CiAJCQkJfQogCQkJCXJldHVybiAoUGF0aCAqKQotCQkJ CQljcmVhdGVfYXBwZW5kX3BhdGgocm9vdCwgcmVsLCBjaGlsZHBhdGhzLCBwYXJ0aWFscGF0aHMs CisJCQkJCWNyZWF0ZV9hcHBlbmRfcGF0aChyb290LCByZWwsIG5ld19hcHBlbmQsCiAJCQkJCQkJ CQkgICBhcGF0aC0+cGF0aC5wYXRoa2V5cywgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgICBh cGF0aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzLAogCQkJCQkJCQkJICAgYXBhdGgtPnBhdGgucGFy YWxsZWxfYXdhcmUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4IDljYzVkMmU3NDExLi5jMTc1ZWU5 NWI2OCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTIyNTAsNiArMjI1MCwxMiBAQCB0eXBlZGVm IHN0cnVjdCBDdXN0b21QYXRoCiAgKiBGb3IgcGFydGlhbCBBcHBlbmQsICdzdWJwYXRocycgY29u dGFpbnMgbm9uLXBhcnRpYWwgc3VicGF0aHMgZm9sbG93ZWQgYnkKICAqIHBhcnRpYWwgc3VicGF0 aHMuCiAgKgorICogV2hlbmV2ZXIgYWNjdW11bGF0ZV9hcHBlbmRfc3VicGF0aCgpIGFsbG93cyB1 cyB0byBjb25zb2xpZGF0ZSBtdWx0aXBsZQorICogbGV2ZWxzIG9mIEFwcGVuZCBwYXRocyBkb3du IHRvIG9uZSwgd2Ugc3RvcmUgdGhlIFJUSSBzZXRzIGZvciB0aGUgb21pdHRlZAorICogcGF0aHMg aW4gY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMuIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSBmb3IgcGxh bm5pbmcgb3IKKyAqIGV4ZWN1dGlvbjsgd2UgZG8gaXQgZm9yIHRoZSBiZW5lZml0IG9mIGNvZGUg dGhhdCB3YW50cyB0byBpbnNwZWN0IHRoZQorICogZmluYWwgcGxhbiBhbmQgdW5kZXJzdGFuZCBo b3cgaXQgY2FtZSB0byBiZS4KKyAqCiAgKiBOb3RlOiBpdCBpcyBwb3NzaWJsZSBmb3IgInN1YnBh dGhzIiB0byBjb250YWluIG9ubHkgb25lLCBvciBldmVuIG5vLAogICogZWxlbWVudHMuICBUaGVz ZSBjYXNlcyBhcmUgb3B0aW1pemVkIGR1cmluZyBjcmVhdGVfYXBwZW5kX3BsYW4uCiAgKiBJbiBw YXJ0aWN1bGFyLCBhbiBBcHBlbmRQYXRoIHdpdGggbm8gc3VicGF0aHMgaXMgYSAiZHVtbXkiIHBh dGggdGhhdApAQCAtMjI2NSw2ICsyMjcxLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQXBwZW5kUGF0aAog CS8qIEluZGV4IG9mIGZpcnN0IHBhcnRpYWwgcGF0aCBpbiBzdWJwYXRoczsgbGlzdF9sZW5ndGgo c3VicGF0aHMpIGlmIG5vbmUgKi8KIAlpbnQJCQlmaXJzdF9wYXJ0aWFsX3BhdGg7CiAJQ2FyZGlu YWxpdHkgbGltaXRfdHVwbGVzOwkvKiBoYXJkIGxpbWl0IG9uIG91dHB1dCB0dXBsZXMsIG9yIC0x ICovCisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CiB9IEFwcGVuZFBhdGg7CiAK ICNkZWZpbmUgSVNfRFVNTVlfQVBQRU5EKHApIFwKQEAgLTIyODEsMTIgKzIyODgsMTUgQEAgZXh0 ZXJuIGJvb2wgaXNfZHVtbXlfcmVsKFJlbE9wdEluZm8gKnJlbCk7CiAvKgogICogTWVyZ2VBcHBl bmRQYXRoIHJlcHJlc2VudHMgYSBNZXJnZUFwcGVuZCBwbGFuLCBpZSwgdGhlIG1lcmdpbmcgb2Yg c29ydGVkCiAgKiByZXN1bHRzIGZyb20gc2V2ZXJhbCBtZW1iZXIgcGxhbnMgdG8gcHJvZHVjZSBz aW1pbGFybHktc29ydGVkIG91dHB1dC4KKyAqCisgKiBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyBo YXMgdGhlIHNhbWUgbWVhbmluZyBoZXJlIGFzIGZvciBBcHBlbmRQYXRoLgogICovCiB0eXBlZGVm IHN0cnVjdCBNZXJnZUFwcGVuZFBhdGgKIHsKIAlQYXRoCQlwYXRoOwogCUxpc3QJICAgKnN1YnBh dGhzOwkJLyogbGlzdCBvZiBjb21wb25lbnQgUGF0aHMgKi8KIAlDYXJkaW5hbGl0eSBsaW1pdF90 dXBsZXM7CS8qIGhhcmQgbGltaXQgb24gb3V0cHV0IHR1cGxlcywgb3IgLTEgKi8KKwlMaXN0CSAg ICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKIH0gTWVyZ2VBcHBlbmRQYXRoOwogCiAvKgpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9wbGFubm9kZXMuaAppbmRleCAwYWQwZmY0MDRjOS4uNDg1YmVjNWFhYmQgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3Bs YW5ub2Rlcy5oCkBAIC0zOTQsOSArMzk0LDE2IEBAIHN0cnVjdCBQYXJ0aXRpb25QcnVuZUluZm87 CQkvKiBmb3J3YXJkIHJlZmVyZW5jZSB0byBzdHJ1Y3QgYmVsb3cgKi8KIHR5cGVkZWYgc3RydWN0 IEFwcGVuZAogewogCVBsYW4JCXBsYW47CisKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3Jt ZWQgYnkgdGhpcyBub2RlICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOworCisJLyogc2V0cyBv ZiBSVElzIG9mIGFwcGVuZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlz dAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlM aXN0CSAgICphcHBlbmRwbGFuczsKKwogCS8qICMgb2YgYXN5bmNocm9ub3VzIHBsYW5zICovCiAJ aW50CQkJbmFzeW5jcGxhbnM7CiAKQEAgLTQyNiw2ICs0MzMsMTAgQEAgdHlwZWRlZiBzdHJ1Y3Qg TWVyZ2VBcHBlbmQKIAkvKiBSVElzIG9mIGFwcGVuZHJlbChzKSBmb3JtZWQgYnkgdGhpcyBub2Rl ICovCiAJQml0bWFwc2V0ICAqYXBwcmVsaWRzOwogCisJLyogc2V0cyBvZiBSVElzIG9mIGFwcGVu ZHJlbHMgY29uc29saWRhdGVkIGludG8gdGhpcyBub2RlICovCisJTGlzdAkgICAqY2hpbGRfYXBw ZW5kX3JlbGlkX3NldHM7CisKKwkvKiBwbGFucyB0byBydW4gKi8KIAlMaXN0CSAgICptZXJnZXBs YW5zOwogCiAJLyogdGhlc2UgZmllbGRzIGFyZSBqdXN0IGxpa2UgdGhlIHNvcnQta2V5IGluZm8g aW4gc3RydWN0IFNvcnQ6ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCmluZGV4IDIyNDc1MDg1 OWMzLi5jZjhhNjU0ZmE1MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKQEAgLTE3LDYgKzE3 LDIwIEBACiAjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCiAjaW5jbHVkZSAibm9kZXMvcGF0 aG5vZGVzLmgiCiAKKy8qCisgKiBFdmVyeXRoaW5nIGluIHN1YnBhdGhzIG9yIHBhcnRpYWxfc3Vi cGF0aHMgd2lsbCBiZWNvbWUgcGFydCBvZiB0aGUKKyAqIEFwcGVuZCBub2RlJ3Mgc3VicGF0aHMg bGlzdC4gUGFydGlhbCBhbmQgbm9uLXBhcnRpYWwgc3VicGF0aHMgY2FuIGJlCisgKiBtaXhlZCBp biB0aGUgc2FtZSBBcHBlbmQgbm9kZSBvbmx5IGlmIGl0IGlzIHBhcmFsbGVsLWF3YXJlLgorICoK KyAqIFNlZSB0aGUgY29tbWVudHMgZm9yIEFwcGVuZFBhdGggZm9yIHRoZSBtZWFuaW5nIGFuZCBw dXJwb3NlIG9mIHRoZQorICogY2hpbGRfYXBwZW5kX3JlbGlkX3NldHMgZmllbGQuCisgKi8KK3R5 cGVkZWYgc3RydWN0IEFwcGVuZFBhdGhJbnB1dAoreworCUxpc3QJICAgKnN1YnBhdGhzOworCUxp c3QJICAgKnBhcnRpYWxfc3VicGF0aHM7CisJTGlzdAkgICAqY2hpbGRfYXBwZW5kX3JlbGlkX3Nl dHM7Cit9IEFwcGVuZFBhdGhJbnB1dDsKIAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29u dHJvbCBkdXJpbmcgam9pbnJlbCBzZXR1cCAqLwogdHlwZWRlZiB2b2lkICgqam9pbnJlbF9zZXR1 cF9ob29rX3R5cGUpIChQbGFubmVySW5mbyAqcm9vdCwKQEAgLTc4LDE0ICs5MiwxNiBAQCBleHRl cm4gVGlkUmFuZ2VQYXRoICpjcmVhdGVfdGlkcmFuZ2VzY2FuX3BhdGgoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJCQkJCSAgTGlzdCAqdGlkcmFuZ2VxdWFscywKIAkJCQkJCQkJCQkJICBSZWxp ZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkJCSAgaW50IHBhcmFsbGVsX3dvcmtlcnMpOwor CiBleHRlcm4gQXBwZW5kUGF0aCAqY3JlYXRlX2FwcGVuZF9wYXRoKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJbmZvICpyZWwsCi0JCQkJCQkJCQkgIExpc3QgKnN1YnBhdGhzLCBMaXN0ICpwYXJ0 aWFsX3N1YnBhdGhzLAorCQkJCQkJCQkJICBBcHBlbmRQYXRoSW5wdXQgaW5wdXQsCiAJCQkJCQkJ CQkgIExpc3QgKnBhdGhrZXlzLCBSZWxpZHMgcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkgIGlu dCBwYXJhbGxlbF93b3JrZXJzLCBib29sIHBhcmFsbGVsX2F3YXJlLAogCQkJCQkJCQkJICBkb3Vi bGUgcm93cyk7CiBleHRlcm4gTWVyZ2VBcHBlbmRQYXRoICpjcmVhdGVfbWVyZ2VfYXBwZW5kX3Bh dGgoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAogCQkJ CQkJCQkJCQkJIExpc3QgKnN1YnBhdGhzLAorCQkJCQkJCQkJCQkJIExpc3QgKmNoaWxkX2FwcGVu ZF9yZWxpZF9zZXRzLAogCQkJCQkJCQkJCQkJIExpc3QgKnBhdGhrZXlzLAogCQkJCQkJCQkJCQkJ IFJlbGlkcyByZXF1aXJlZF9vdXRlcik7CiBleHRlcm4gR3JvdXBSZXN1bHRQYXRoICpjcmVhdGVf Z3JvdXBfcmVzdWx0X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CmluZGV4IDU4ZGUwNGNhMmM1Li43N2U1ZjhmZGMxNiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTEyNSw2ICsxMjUsNyBAQCBBbmxJbmRleERhdGEKIEFueUFycmF5VHlwZQogQXBw ZW5kCiBBcHBlbmRQYXRoCitBcHBlbmRQYXRoSW5wdXQKIEFwcGVuZFJlbEluZm8KIEFwcGVuZFN0 YXRlCiBBcHBseUVycm9yQ2FsbGJhY2tBcmcKLS0gCjIuNTEuMAoK --000000000000748a9706494cb6bc Content-Type: application/octet-stream; name="v12-0001-Allow-for-plugin-control-over-path-generation-st.patch" Content-Disposition: attachment; filename="v12-0001-Allow-for-plugin-control-over-path-generation-st.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkvd1fr50 RnJvbSBjMmZiMGEyNGU0OTE4OTdmMTM3OWVhZjQ1ODVlNzQyZDA1YzEwNDJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMTIgSmFuIDIwMjYgMTA6Mzc6MjEgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMiAx LzVdIEFsbG93IGZvciBwbHVnaW4gY29udHJvbCBvdmVyIHBhdGggZ2VuZXJhdGlvbgogc3RyYXRl Z2llcy4KCkVhY2ggUmVsT3B0SW5mbyBub3cgaGFzIGEgcGdzX21hc2sgbWVtYmVyIHdoaWNoIGlz IGEgbWFzayBvZiBhY2NlcHRhYmxlCnN0cmF0ZWdpZXMuIEZvciBtb3N0IHJlbHMsIHRoaXMgaXMg cG9wdWxhdGVkIGZyb20gUGxhbm5lckdsb2JhbCdzCmRlZmF1bHRfcGdzX21hc2ssIHdoaWNoIGlz IGNvbXB1dGVkIGZyb20gdGhlIHZhbHVlcyBvZiB0aGUgZW5hYmxlXyoKR1VDcyBhdCB0aGUgc3Rh cnQgb2YgcGxhbm5pbmcuCgpGb3IgYmFzZXJlbHMsIGdldF9yZWxhdGlvbl9pbmZvX2hvb2sgY2Fu IGJlIHVzZWQgdG8gYWRqdXN0IHBnc19tYXNrIGZvcgplYWNoIG5ldyBSZWxPcHRJbmZvLCBhdCBs ZWFzdCBmb3IgcmVscyBvZiB0eXBlIFJURV9SRUxBVElPTi4gQWRqdXN0aW5nCnBnc19tYXNrIGlz IGxlc3MgdXNlZnVsIGZvciBvdGhlciB0eXBlcyBvZiByZWxzLCBidXQgaWYgaXQgcHJvdmVzIHRv CmJlIG5lY2Vzc2FyeSwgd2UgY2FuIHJldmlzaXQgdGhlIHdheSB0aGlzIGhvb2sgd29ya3Mgb3Ig YWRkIGEgbmV3IG9uZS4KCkZvciBqb2lucmVscywgdHdvIG5ldyBob29rcyBhcmUgYWRkZWQuIGpv aW5yZWxfc2V0dXBfaG9vayBpcyBjYWxsZWQgZWFjaAp0aW1lIGEgam9pbnJlbCBpcyBjcmVhdGVk LCBhbmQgb25lIHRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgZnJvbSB0aGF0IGhvb2sKaXMgdG8gbWFu aXB1bGF0ZSBwZ3NfbWFzayBmb3IgdGhlIG5ldyBqb2lucmVsLiBqb2luX3BhdGhfc2V0dXBfaG9v ayBpcwpjYWxsZWQgZWFjaCB0aW1lIHdlJ3JlIGFib3V0IHRvIGFkZCBwYXRocyB0byBhIGpvaW5y ZWwgYnkgY29uc2lkZXJpbmcKc29tZSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIGFuIG91dGVy IHJlbCwgYW4gaW5uZXIgcmVsLCBhbmQgYSBqb2luCnR5cGUuIEl0IGNhbiBtb2RpZnkgdGhlIHBn c19tYXNrIHByb3BhZ2F0ZWQgaW50byBKb2luUGF0aEV4dHJhRGF0YSB0bwpyZXN0cmljdCBzdHJh dGVneSBjaG9pY2UgZm9yIHRoYXQgcGFyaWN1bGFyIGNvbWJpbmF0aW9uIG9mIHJlbHMuCgpUbyBt YWtlIGpvaW5yZWxfc2V0dXBfaG9vayB3b3JrIGFzIGludGVuZGVkLCB0aGUgZXhpc3RpbmcgY2Fs bHMgdG8KYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyBhcmUgbW92ZWQgbGF0ZXIgaW4gdGhl IGNhbGxpbmcgZnVuY3Rpb25zOwp0aGlzIGlzIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBjaGVja3Mg d2hldGhlciB0aGUgcmVsJ3MgcGdzX21hc2sgaW5jbHVkZXMKUEdTX0NPTlNJREVSX1BBUlRJVElP TldJU0UsIHNvIHdlIHdhbnQgaXQgdG8gb25seSBiZSBjYWxsZWQgYWZ0ZXIKcGx1Z2lucyBoYXZl IGhhZCBhIGNoYW5jZSB0byBhbHRlciBwZ3NfbWFzay4KClVwcGVyIHJlbHMgY3VycmVudGx5IGlu aGVyaXQgcGdzX21hc2sgZnJvbSB0aGUgaW5wdXQgcmVsYXRpb24uIEl0J3MKdW5jbGVhciB0aGF0 IHRoaXMgaXMgdGhlIG1vc3QgdXNlZnVsIGJlaGF2aW9yLCBidXQgYXQgdGhlIG1vbWVudCB0aGVy ZQphcmUgbm8gaG9va3MgdG8gYWxsb3cgdGhlIG1hc2sgdG8gYmUgc2V0IGluIGFueSBvdGhlciB3 YXkuCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2FzQGZpdHRsLmNvbT4KUmV2aWV3ZWQt Ynk6IEpha3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVycHJpc2VkYi5jb20+ClJldmlld2Vk LWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3ZWQtYnk6IEphY29iIENoYW1waW9u IDxqYWNvYi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdlZC1ieTogQW1pdCBMYW5n b3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEhhaWJvIFlhbiA8dHJp c3Rhbi55aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwOi8vcG9zdGdyLmVzL20vQ0ErVGdt b1otSmgxVDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVuND1aSG9LUHp3QG1haWwuZ21haWwu Y29tCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgIHwgICAyICst CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jICAgfCAyMjIgKysrKysrKysr KysrKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAg fCAgIDQgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMgICB8ICA4OSAr KysrKysrLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMgICAgfCAgIDcg Ky0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyB8ICAgNCArLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDU0ICsrKysrKwogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyAgIHwgIDE5ICstCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcmVsbm9kZS5jICAgIHwgIDQ0ICsrKystCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCAgICAgICAgICAgfCAgODIgKysrKysrKystCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29z dC5oICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5o ICAgICAgICB8ICAxMiArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAg IHwgICA5ICstCiAxNCBmaWxlcyBjaGFuZ2VkLCA0NTcgaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggZTAwZDE3MDA4 MTcuLmI0NTgxZTU0ZDkzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAg LTk1Miw3ICs5NTIsNyBAQCBzZXRfdGFibGVzYW1wbGVfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsIFJhbmdlVGJsRW50cnkgKgogCQkgYm1zX21lbWJlcnNo aXAocm9vdC0+YWxsX3F1ZXJ5X3JlbHMpICE9IEJNU19TSU5HTEVUT04pICYmCiAJCSEoR2V0VHNt Um91dGluZShydGUtPnRhYmxlc2FtcGxlLT50c21oYW5kbGVyKS0+cmVwZWF0YWJsZV9hY3Jvc3Nf c2NhbnMpKQogCXsKLQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwg cGF0aCk7CisJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWwsIHBhdGgs IHRydWUpOwogCX0KIAogCWFkZF9wYXRoKHJlbCwgcGF0aCk7CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvY29zdHNpemUuYwppbmRleCAxNmJmMWY2MWEwZi4uMmQ1ZjczMDAxMzUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMjc1LDYgKzI3NSw3IEBAIGNvc3Rfc2Vxc2Nh bihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlkb3VibGUJCXNwY19zZXFfcGFnZV9j b3N0OwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IFBHU19TRVFTQ0FOOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBw bGllZCB0byBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpA QCAtMzI3LDggKzMyOCwxMSBAQCBjb3N0X3NlcXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJCSAqLwogCQlwYXRoLT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8g cGFyYWxsZWxfZGl2aXNvcik7CiAJfQorCWVsc2UKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJ REVSX05PTlBBUlRJQUw7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGVuYWJsZV9zZXFzY2Fu ID8gMCA6IDE7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sg JiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlwYXRoLT5zdGFydHVwX2Nv c3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIGNw dV9ydW5fY29zdCArIGRpc2tfcnVuX2Nvc3Q7CiB9CkBAIC0zNTQsNiArMzU4LDcgQEAgY29zdF9z YW1wbGVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCXNwY19wYWdlX2Nv c3Q7CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50 NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFz ZSByZWxhdGlvbnMgd2l0aCB0YWJsZXNhbXBsZSBjbGF1c2VzICovCiAJQXNzZXJ0KGJhc2VyZWwt PnJlbGlkID4gMCk7CkBAIC00MDEsNyArNDA2LDExIEBAIGNvc3Rfc2FtcGxlc2NhbihQYXRoICpw YXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdl dC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVy X3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAo cGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTDsKKworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBn c19tYXNrICYgZW5hYmxlX21hc2spID09IGVuYWJsZV9tYXNrID8gMCA6IDE7CiAJcGF0aC0+c3Rh cnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nv c3QgKyBydW5fY29zdDsKIH0KQEAgLTQ0MCw3ICs0NDksOCBAQCBjb3N0X2dhdGhlcihHYXRoZXJQ YXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFydHVwX2Nvc3QgKz0gcGFyYWxsZWxf c2V0dXBfY29zdDsKIAlydW5fY29zdCArPSBwYXJhbGxlbF90dXBsZV9jb3N0ICogcGF0aC0+cGF0 aC5yb3dzOwogCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IHBhdGgtPnN1YnBhdGgtPmRp c2FibGVkX25vZGVzOworCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBwYXRoLT5zdWJwYXRo LT5kaXNhYmxlZF9ub2RlcworCQkrICgocmVsLT5wZ3NfbWFzayAmIFBHU19HQVRIRVIpICE9IDAg PyAwIDogMSk7CiAJcGF0aC0+cGF0aC5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0 aC0+cGF0aC50b3RhbF9jb3N0ID0gKHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0KTsKIH0KQEAgLTUw Niw4ICs1MTYsOCBAQCBjb3N0X2dhdGhlcl9tZXJnZShHYXRoZXJNZXJnZVBhdGggKnBhdGgsIFBs YW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXJhbGxlbF9zZXR1cF9jb3N0Owog CXJ1bl9jb3N0ICs9IHBhcmFsbGVsX3R1cGxlX2Nvc3QgKiBwYXRoLT5wYXRoLnJvd3MgKiAxLjA1 OwogCi0JcGF0aC0+cGF0aC5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVzCi0J CSsgKGVuYWJsZV9nYXRoZXJtZXJnZSA/IDAgOiAxKTsKKwlwYXRoLT5wYXRoLmRpc2FibGVkX25v ZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlzYWJsZWRfbm9kZXMKKwkJKyAoKHJlbC0+cGdzX21hc2sg JiBQR1NfR0FUSEVSX01FUkdFKSAhPSAwID8gMCA6IDEpOwogCXBhdGgtPnBhdGguc3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0ICsgaW5wdXRfc3RhcnR1cF9jb3N0OwogCXBhdGgtPnBhdGgudG90 YWxfY29zdCA9IChzdGFydHVwX2Nvc3QgKyBydW5fY29zdCArIGlucHV0X3RvdGFsX2Nvc3QpOwog fQpAQCAtNTU3LDYgKzU2Nyw3IEBAIGNvc3RfaW5kZXgoSW5kZXhQYXRoICpwYXRoLCBQbGFubmVy SW5mbyAqcm9vdCwgZG91YmxlIGxvb3BfY291bnQsCiAJZG91YmxlCQlwYWdlc19mZXRjaGVkOwog CWRvdWJsZQkJcmFuZF9oZWFwX3BhZ2VzOwogCWRvdWJsZQkJaW5kZXhfcGFnZXM7CisJdWludDY0 CQllbmFibGVfbWFzazsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxh dGlvbnMgKi8KIAlBc3NlcnQoSXNBKGJhc2VyZWwsIFJlbE9wdEluZm8pICYmCkBAIC01ODgsOCAr NTk5LDExIEBAIGNvc3RfaW5kZXgoSW5kZXhQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwg ZG91YmxlIGxvb3BfY291bnQsCiAJCQkJCQkJCQkJCSAgcGF0aC0+aW5kZXhjbGF1c2VzKTsKIAl9 CiAKLQkvKiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGVuYWJsZV9pbmRleG9ubHlzY2FuOyBpbmR4 cGF0aC5jIGRvZXMgdGhhdCAqLwotCXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVf aW5kZXhzY2FuID8gMCA6IDE7CisJLyogaXMgdGhpcyBzY2FuIHR5cGUgZGlzYWJsZWQ/ICovCisJ ZW5hYmxlX21hc2sgPSAoaW5kZXhvbmx5ID8gUEdTX0lOREVYT05MWVNDQU4gOiBQR1NfSU5ERVhT Q0FOKQorCQl8IChwYXJ0aWFsX3BhdGggPyAwIDogUEdTX0NPTlNJREVSX05PTlBBUlRJQUwpOwor CXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAogCS8qCiAJICogQ2FsbCBpbmRleC1h Y2Nlc3MtbWV0aG9kLXNwZWNpZmljIGNvZGUgdG8gZXN0aW1hdGUgdGhlIHByb2Nlc3NpbmcgY29z dApAQCAtMTAxMCw2ICsxMDI0LDcgQEAgY29zdF9iaXRtYXBfaGVhcF9zY2FuKFBhdGggKnBhdGgs IFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVsLAogCWRvdWJsZQkJc3BjX3Nl cV9wYWdlX2Nvc3QsCiAJCQkJc3BjX3JhbmRvbV9wYWdlX2Nvc3Q7CiAJZG91YmxlCQlUOworCXVp bnQ2NAkJZW5hYmxlX21hc2sgPSBQR1NfQklUTUFQU0NBTjsKIAogCS8qIFNob3VsZCBvbmx5IGJl IGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoSXNBKGJhc2VyZWwsIFJlbE9w dEluZm8pKTsKQEAgLTEwNzUsNiArMTA5MCw4IEBAIGNvc3RfYml0bWFwX2hlYXBfc2NhbihQYXRo ICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJlbCwKIAogCQlwYXRo LT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8gcGFyYWxsZWxfZGl2aXNvcik7CiAJ fQorCWVsc2UKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVSX05PTlBBUlRJQUw7CiAKIAog CXJ1bl9jb3N0ICs9IGNwdV9ydW5fY29zdDsKQEAgLTEwODMsNyArMTEwMCw4IEBAIGNvc3RfYml0 bWFwX2hlYXBfc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq YmFzZXJlbCwKIAlzdGFydHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVw OwogCXJ1bl9jb3N0ICs9IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+ cm93czsKIAotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gZW5hYmxlX2JpdG1hcHNjYW4gPyAwIDog MTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJs ZV9tYXNrKSA9PSBlbmFibGVfbWFzayA/IDAgOiAxOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0 YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7 CiB9CkBAIC0xMjQwLDYgKzEyNTgsNyBAQCBjb3N0X3RpZHNjYW4oUGF0aCAqcGF0aCwgUGxhbm5l ckluZm8gKnJvb3QsCiAJZG91YmxlCQludHVwbGVzOwogCUxpc3RDZWxsICAgKmw7CiAJZG91Ymxl CQlzcGNfcmFuZG9tX3BhZ2VfY29zdDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8q IFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFz ZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTEyNjEsMTAgKzEyODAsMTAgQEAgY29zdF90aWRzY2FuKFBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCiAJCS8qCiAJCSAqIFdlIG11c3QgdXNlIGEg VElEIHNjYW4gZm9yIEN1cnJlbnRPZkV4cHI7IGluIGFueSBvdGhlciBjYXNlLCB3ZQotCQkgKiBz aG91bGQgYmUgZ2VuZXJhdGluZyBhIFRJRCBzY2FuIG9ubHkgaWYgZW5hYmxlX3RpZHNjYW49dHJ1 ZS4gQWxzbywKLQkJICogaWYgQ3VycmVudE9mRXhwciBpcyB0aGUgcXVhbCwgdGhlcmUgc2hvdWxk IGJlIG9ubHkgb25lLgorCQkgKiBzaG91bGQgYmUgZ2VuZXJhdGluZyBhIFRJRCBzY2FuIG9ubHkg aWYgVElEIHNjYW5zIGFyZSBhbGxvd2VkLgorCQkgKiBBbHNvLCBpZiBDdXJyZW50T2ZFeHByIGlz IHRoZSBxdWFsLCB0aGVyZSBzaG91bGQgYmUgb25seSBvbmUuCiAJCSAqLwotCQlBc3NlcnQoZW5h YmxlX3RpZHNjYW4gfHwgSXNBKHF1YWwsIEN1cnJlbnRPZkV4cHIpKTsKKwkJQXNzZXJ0KChiYXNl cmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwIHx8IElzQShxdWFsLCBDdXJyZW50T2ZF eHByKSk7CiAJCUFzc2VydChsaXN0X2xlbmd0aCh0aWRxdWFscykgPT0gMSB8fCAhSXNBKHF1YWws IEN1cnJlbnRPZkV4cHIpKTsKIAogCQlpZiAoSXNBKHF1YWwsIFNjYWxhckFycmF5T3BFeHByKSkK QEAgLTEzMTYsMTAgKzEzMzUsMTQgQEAgY29zdF90aWRzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJ bmZvICpyb290LAogCiAJLyoKIAkgKiBUaGVyZSBhcmUgYXNzZXJ0aW9ucyBhYm92ZSB2ZXJpZnlp bmcgdGhhdCB3ZSBvbmx5IHJlYWNoIHRoaXMgZnVuY3Rpb24KLQkgKiBlaXRoZXIgd2hlbiBlbmFi bGVfdGlkc2Nhbj10cnVlIG9yIHdoZW4gdGhlIFRJRCBzY2FuIGlzIHRoZSBvbmx5IGxlZ2FsCi0J ICogcGF0aCwgc28gaXQncyBzYWZlIHRvIHNldCBkaXNhYmxlZF9ub2RlcyB0byB6ZXJvIGhlcmUu CisJICogZWl0aGVyIHdoZW4gYmFzZXJlbC0+cGdzX21hc2sgaW5jbHVkZXMgUEdTX1RJRFNDQU4g b3Igd2hlbiB0aGUgVElEIHNjYW4KKwkgKiBpcyB0aGUgb25seSBsZWdhbCBwYXRoLCBzbyB3ZSBv bmx5IG5lZWQgdG8gY29uc2lkZXIgdGhlIGVmZmVjdHMgb2YKKwkgKiBQR1NfQ09OU0lERVJfTk9O UEFSVElBTCBoZXJlLgogCSAqLwotCXBhdGgtPmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0 aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJf Tk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFz ayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBf Y29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRoLT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsg cnVuX2Nvc3Q7CiB9CkBAIC0xMzUwLDYgKzEzNzMsNyBAQCBjb3N0X3RpZHJhbmdlc2NhbihQYXRo ICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlkb3VibGUJCW5zZXFwYWdlczsKIAlkb3VibGUJ CXNwY19yYW5kb21fcGFnZV9jb3N0OwogCWRvdWJsZQkJc3BjX3NlcV9wYWdlX2Nvc3Q7CisJdWlu dDY0CQllbmFibGVfbWFzayA9IFBHU19USURTQ0FOOwogCiAJLyogU2hvdWxkIG9ubHkgYmUgYXBw bGllZCB0byBiYXNlIHJlbGF0aW9ucyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpA QCAtMTQyOCw4ICsxNDUyLDE1IEBAIGNvc3RfdGlkcmFuZ2VzY2FuKFBhdGggKnBhdGgsIFBsYW5u ZXJJbmZvICpyb290LAogCQlwYXRoLT5yb3dzID0gY2xhbXBfcm93X2VzdChwYXRoLT5yb3dzIC8g cGFyYWxsZWxfZGl2aXNvcik7CiAJfQogCi0JLyogd2Ugc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGlz IHBhdGggdHlwZSB3aGVuIGVuYWJsZV90aWRzY2FuPWZhbHNlICovCi0JQXNzZXJ0KGVuYWJsZV90 aWRzY2FuKTsKKwkvKgorCSAqIFdlIHNob3VsZCBub3QgZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUg d2hlbiBQR1NfVElEU0NBTiBpcyB1bnNldCwgYnV0IHdlCisJICogbWlnaHQgbmVlZCB0byBkaXNh YmxlIHRoaXMgcGF0aCBkdWUgdG8gUEdTX0NPTlNJREVSX05PTlBBUlRJQUwuCisJICovCisJQXNz ZXJ0KChiYXNlcmVsLT5wZ3NfbWFzayAmIFBHU19USURTQ0FOKSAhPSAwKTsKKwlpZiAocGF0aC0+ cGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9O UEFSVElBTDsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAm IGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzayA/IDEgOiAwOwogCXBhdGgtPmRpc2FibGVkX25v ZGVzID0gMDsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90 YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIGNwdV9ydW5fY29zdCArIGRpc2tfcnVuX2Nvc3Q7CkBA IC0xNDUzLDYgKzE0ODQsNyBAQCBjb3N0X3N1YnF1ZXJ5c2NhbihTdWJxdWVyeVNjYW5QYXRoICpw YXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlMaXN0CSAgICpxcHF1YWxzOwogCVF1YWxDb3N0CXFw cXVhbF9jb3N0OwogCUNvc3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9 IDA7CiAKIAkvKiBTaG91bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQg YXJlIHN1YnF1ZXJpZXMgKi8KIAlBc3NlcnQoYmFzZXJlbC0+cmVsaWQgPiAwKTsKQEAgLTE0ODMs NyArMTUxNSwxMCBAQCBjb3N0X3N1YnF1ZXJ5c2NhbihTdWJxdWVyeVNjYW5QYXRoICpwYXRoLCBQ bGFubmVySW5mbyAqcm9vdCwKIAkgKiBTdWJxdWVyeVNjYW4gbm9kZSwgcGx1cyBjcHVfdHVwbGVf Y29zdCB0byBhY2NvdW50IGZvciBzZWxlY3Rpb24gYW5kCiAJICogcHJvamVjdGlvbiBvdmVyaGVh ZC4KIAkgKi8KLQlwYXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlz YWJsZWRfbm9kZXM7CisJaWYgKHBhdGgtPnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQll bmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5wYXRoLmRpc2Fi bGVkX25vZGVzID0gcGF0aC0+c3VicGF0aC0+ZGlzYWJsZWRfbm9kZXMKKwkJKyAoKChiYXNlcmVs LT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzaykgPyAxIDogMCk7CiAJcGF0 aC0+cGF0aC5zdGFydHVwX2Nvc3QgPSBwYXRoLT5zdWJwYXRoLT5zdGFydHVwX2Nvc3Q7CiAJcGF0 aC0+cGF0aC50b3RhbF9jb3N0ID0gcGF0aC0+c3VicGF0aC0+dG90YWxfY29zdDsKIApAQCAtMTUz NCw2ICsxNTY5LDcgQEAgY29zdF9mdW5jdGlvbnNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKIAlSYW5nZVRibEVudHJ5ICpydGU7CiAJUXVh bENvc3QJZXhwcmNvc3Q7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQg b25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIGZ1bmN0aW9ucyAqLwog CUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTU3NCw3ICsxNjEwLDEwIEBAIGNvc3Rf ZnVuY3Rpb25zY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29z dCArPSBwYXRoLT5wYXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+ cGF0aHRhcmdldC0+Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJs ZWRfbm9kZXMgPSAwOworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJs ZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVz ID0KKwkJKGJhc2VyZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8g MSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFs X2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE1OTYsNiArMTYzNSw3IEBA IGNvc3RfdGFibGVmdW5jc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0 CQljcHVfcGVyX3R1cGxlOwogCVJhbmdlVGJsRW50cnkgKnJ0ZTsKIAlRdWFsQ29zdAlleHByY29z dDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxp ZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBhcmUgZnVuY3Rpb25zICovCiAJQXNzZXJ0KGJhc2Vy ZWwtPnJlbGlkID4gMCk7CkBAIC0xNjMxLDcgKzE2NzEsMTAgQEAgY29zdF90YWJsZWZ1bmNzY2Fu KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5w YXRodGFyZ2V0LT5jb3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+ Y29zdC5wZXJfdHVwbGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAw OworCWlmIChwYXRoLT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBH U19DT05TSURFUl9OT05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2Vy ZWwtPnBnc19tYXNrICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcGF0 aC0+c3RhcnR1cF9jb3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFy dHVwX2Nvc3QgKyBydW5fY29zdDsKIH0KQEAgLTE2NTEsNiArMTY5NCw3IEBAIGNvc3RfdmFsdWVz c2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0CQlydW5fY29zdCA9IDA7 CiAJUXVhbENvc3QJcXBxdWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50NjQJ CWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSBy ZWxhdGlvbnMgdGhhdCBhcmUgdmFsdWVzIGxpc3RzICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlk ID4gMCk7CkBAIC0xNjc5LDcgKzE3MjMsMTAgQEAgY29zdF92YWx1ZXNzY2FuKFBhdGggKnBhdGgs IFBsYW5uZXJJbmZvICpyb290LAogCXN0YXJ0dXBfY29zdCArPSBwYXRoLT5wYXRodGFyZ2V0LT5j b3N0LnN0YXJ0dXA7CiAJcnVuX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5wZXJfdHVw bGUgKiBwYXRoLT5yb3dzOwogCi0JcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSAwOworCWlmIChwYXRo LT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9O T05QQVJUSUFMOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKGJhc2VyZWwtPnBnc19tYXNr ICYgZW5hYmxlX21hc2spICE9IGVuYWJsZV9tYXNrID8gMSA6IDA7CiAJcGF0aC0+c3RhcnR1cF9j b3N0ID0gc3RhcnR1cF9jb3N0OwogCXBhdGgtPnRvdGFsX2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBy dW5fY29zdDsKIH0KQEAgLTE3MDIsNiArMTc0OSw3IEBAIGNvc3RfY3Rlc2NhbihQYXRoICpwYXRo LCBQbGFubmVySW5mbyAqcm9vdCwKIAlDb3N0CQlydW5fY29zdCA9IDA7CiAJUXVhbENvc3QJcXBx dWFsX2Nvc3Q7CiAJQ29zdAkJY3B1X3Blcl90dXBsZTsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0g MDsKIAogCS8qIFNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gYmFzZSByZWxhdGlvbnMgdGhhdCBh cmUgQ1RFcyAqLwogCUFzc2VydChiYXNlcmVsLT5yZWxpZCA+IDApOwpAQCAtMTcyNyw3ICsxNzc1 LDEwIEBAIGNvc3RfY3Rlc2NhbihQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwKIAlzdGFy dHVwX2Nvc3QgKz0gcGF0aC0+cGF0aHRhcmdldC0+Y29zdC5zdGFydHVwOwogCXJ1bl9jb3N0ICs9 IHBhdGgtPnBhdGh0YXJnZXQtPmNvc3QucGVyX3R1cGxlICogcGF0aC0+cm93czsKIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQor CQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxl ZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVf bWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNzQ0LDYgKzE3 OTUsNyBAQCBjb3N0X25hbWVkdHVwbGVzdG9yZXNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8g KnJvb3QsCiAJQ29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNv c3QJCWNwdV9wZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91 bGQgb25seSBiZSBhcHBsaWVkIHRvIGJhc2UgcmVsYXRpb25zIHRoYXQgYXJlIFR1cGxlc3RvcmVz ICovCiAJQXNzZXJ0KGJhc2VyZWwtPnJlbGlkID4gMCk7CkBAIC0xNzY1LDcgKzE4MTcsMTAgQEAg Y29zdF9uYW1lZHR1cGxlc3RvcmVzY2FuKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAog CWNwdV9wZXJfdHVwbGUgKz0gY3B1X3R1cGxlX2Nvc3QgKyBxcHF1YWxfY29zdC5wZXJfdHVwbGU7 CiAJcnVuX2Nvc3QgKz0gY3B1X3Blcl90dXBsZSAqIGJhc2VyZWwtPnR1cGxlczsKIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gMDsKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwKQor CQllbmFibGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlwYXRoLT5kaXNhYmxl ZF9ub2RlcyA9CisJCShiYXNlcmVsLT5wZ3NfbWFzayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVf bWFzayA/IDEgOiAwOwogCXBhdGgtPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlwYXRo LT50b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiB9CkBAIC0xNzgyLDYgKzE4 MzcsNyBAQCBjb3N0X3Jlc3VsdHNjYW4oUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJ Q29zdAkJcnVuX2Nvc3QgPSAwOwogCVF1YWxDb3N0CXFwcXVhbF9jb3N0OwogCUNvc3QJCWNwdV9w ZXJfdHVwbGU7CisJdWludDY0CQllbmFibGVfbWFzayA9IDA7CiAKIAkvKiBTaG91bGQgb25seSBi ZSBhcHBsaWVkIHRvIFJURV9SRVNVTFQgYmFzZSByZWxhdGlvbnMgKi8KIAlBc3NlcnQoYmFzZXJl bC0+cmVsaWQgPiAwKTsKQEAgLTE4MDAsNyArMTg1NiwxMCBAQCBjb3N0X3Jlc3VsdHNjYW4oUGF0 aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCiAJY3B1X3Blcl90dXBsZSA9IGNwdV90dXBsZV9j b3N0ICsgcXBxdWFsX2Nvc3QucGVyX3R1cGxlOwogCXJ1bl9jb3N0ICs9IGNwdV9wZXJfdHVwbGUg KiBiYXNlcmVsLT50dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IDA7CisJaWYgKHBh dGgtPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdTX0NPTlNJREVS X05PTlBBUlRJQUw7CisJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPQorCQkoYmFzZXJlbC0+cGdzX21h c2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDogMDsKIAlwYXRoLT5zdGFydHVw X2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCAr IHJ1bl9jb3N0OwogfQpAQCAtMTgxOCw2ICsxODc3LDcgQEAgY29zdF9yZWN1cnNpdmVfdW5pb24o UGF0aCAqcnVuaW9uLCBQYXRoICpucnRlcm0sIFBhdGggKnJ0ZXJtKQogCUNvc3QJCXN0YXJ0dXBf Y29zdDsKIAlDb3N0CQl0b3RhbF9jb3N0OwogCWRvdWJsZQkJdG90YWxfcm93czsKKwl1aW50NjQJ CWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFdlIHByb2JhYmx5IGhhdmUgZGVjZW50IGVzdGltYXRl cyBmb3IgdGhlIG5vbi1yZWN1cnNpdmUgdGVybSAqLwogCXN0YXJ0dXBfY29zdCA9IG5ydGVybS0+ c3RhcnR1cF9jb3N0OwpAQCAtMTg0MCw3ICsxOTAwLDEwIEBAIGNvc3RfcmVjdXJzaXZlX3VuaW9u KFBhdGggKnJ1bmlvbiwgUGF0aCAqbnJ0ZXJtLCBQYXRoICpydGVybSkKIAkgKi8KIAl0b3RhbF9j b3N0ICs9IGNwdV90dXBsZV9jb3N0ICogdG90YWxfcm93czsKIAotCXJ1bmlvbi0+ZGlzYWJsZWRf bm9kZXMgPSBucnRlcm0tPmRpc2FibGVkX25vZGVzICsgcnRlcm0tPmRpc2FibGVkX25vZGVzOwor CWlmIChydW5pb24tPnBhcmFsbGVsX3dvcmtlcnMgPT0gMCkKKwkJZW5hYmxlX21hc2sgfD0gUEdT X0NPTlNJREVSX05PTlBBUlRJQUw7CisJcnVuaW9uLT5kaXNhYmxlZF9ub2RlcyA9CisJCShydW5p b24tPnBhcmVudC0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgIT0gZW5hYmxlX21hc2sgPyAxIDog MDsKIAlydW5pb24tPnN0YXJ0dXBfY29zdCA9IHN0YXJ0dXBfY29zdDsKIAlydW5pb24tPnRvdGFs X2Nvc3QgPSB0b3RhbF9jb3N0OwogCXJ1bmlvbi0+cm93cyA9IHRvdGFsX3Jvd3M7CkBAIC0yMTEw LDcgKzIxNzMsMTEgQEAgY29zdF9pbmNyZW1lbnRhbF9zb3J0KFBhdGggKnBhdGgsCiAKIAlwYXRo LT5yb3dzID0gaW5wdXRfdHVwbGVzOwogCi0JLyogc2hvdWxkIG5vdCBnZW5lcmF0ZSB0aGVzZSBw YXRocyB3aGVuIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0PWZhbHNlICovCisJLyoKKwkgKiBXZSBz aG91bGQgbm90IGdlbmVyYXRlIHRoZXNlIHBhdGhzIHdoZW4gZW5hYmxlX2luY3JlbWVudGFsX3Nv cnQ9ZmFsc2UuCisJICogV2UgY2FuIGlnbm9yZSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTCBoZXJl LCBiZWNhdXNlIGlmIGl0J3MgcmVsZXZhbnQsCisJICogaXQgd2lsbCBoYXZlIGFscmVhZHkgYWZm ZWN0ZWQgdGhlIGlucHV0IHBhdGguCisJICovCiAJQXNzZXJ0KGVuYWJsZV9pbmNyZW1lbnRhbF9z b3J0KTsKIAlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25vZGVzOwogCkBA IC0yMTQ4LDYgKzIyMTUsMTAgQEAgY29zdF9zb3J0KFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpy b290LAogCiAJc3RhcnR1cF9jb3N0ICs9IGlucHV0X2Nvc3Q7CiAKKwkvKgorCSAqIFdlIGNhbiBp Z25vcmUgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwgaGVyZSwgYmVjYXVzZSBpZiBpdCdzIHJlbGV2 YW50LAorCSAqIGl0IHdpbGwgaGF2ZSBhbHJlYWR5IGFmZmVjdGVkIHRoZSBpbnB1dCBwYXRoLgor CSAqLwogCXBhdGgtPnJvd3MgPSB0dXBsZXM7CiAJcGF0aC0+ZGlzYWJsZWRfbm9kZXMgPSBpbnB1 dF9kaXNhYmxlZF9ub2RlcyArIChlbmFibGVfc29ydCA/IDAgOiAxKTsKIAlwYXRoLT5zdGFydHVw X2Nvc3QgPSBzdGFydHVwX2Nvc3Q7CkBAIC0yMjM5LDkgKzIzMTAsMTUgQEAgYXBwZW5kX25vbnBh cnRpYWxfY29zdChMaXN0ICpzdWJwYXRocywgaW50IG51bXBhdGhzLCBpbnQgcGFyYWxsZWxfd29y a2VycykKIHZvaWQKIGNvc3RfYXBwZW5kKEFwcGVuZFBhdGggKmFwYXRoLCBQbGFubmVySW5mbyAq cm9vdCkKIHsKKwlSZWxPcHRJbmZvICpyZWwgPSBhcGF0aC0+cGF0aC5wYXJlbnQ7CiAJTGlzdENl bGwgICAqbDsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gUEdTX0FQUEVORDsKKworCWlmIChhcGF0 aC0+cGF0aC5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05T SURFUl9OT05QQVJUSUFMOwogCi0JYXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPSAwOworCWFw YXRoLT5wYXRoLmRpc2FibGVkX25vZGVzID0KKwkJKHJlbC0+cGdzX21hc2sgJiBlbmFibGVfbWFz aykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlhcGF0aC0+cGF0aC5zdGFydHVwX2Nvc3QgPSAw OwogCWFwYXRoLT5wYXRoLnRvdGFsX2Nvc3QgPSAwOwogCWFwYXRoLT5wYXRoLnJvd3MgPSAwOwpA QCAtMjQ1MSwxMSArMjUyOCwxNiBAQCBjb3N0X21lcmdlX2FwcGVuZChQYXRoICpwYXRoLCBQbGFu bmVySW5mbyAqcm9vdCwKIAkJCQkgIENvc3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0 X3RvdGFsX2Nvc3QsCiAJCQkJICBkb3VibGUgdHVwbGVzKQogeworCVJlbE9wdEluZm8gKnJlbCA9 IHBhdGgtPnBhcmVudDsKIAlDb3N0CQlzdGFydHVwX2Nvc3QgPSAwOwogCUNvc3QJCXJ1bl9jb3N0 ID0gMDsKIAlDb3N0CQljb21wYXJpc29uX2Nvc3Q7CiAJZG91YmxlCQlOOwogCWRvdWJsZQkJbG9n TjsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gUEdTX01FUkdFX0FQUEVORDsKKworCWlmIChwYXRo LT5wYXJhbGxlbF93b3JrZXJzID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9O T05QQVJUSUFMOwogCiAJLyoKIAkgKiBBdm9pZCBsb2coMCkuLi4KQEAgLTI0NzgsNyArMjU2MCw5 IEBAIGNvc3RfbWVyZ2VfYXBwZW5kKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCSAq LwogCXJ1bl9jb3N0ICs9IGNwdV90dXBsZV9jb3N0ICogQVBQRU5EX0NQVV9DT1NUX01VTFRJUExJ RVIgKiB0dXBsZXM7CiAKLQlwYXRoLT5kaXNhYmxlZF9ub2RlcyA9IGlucHV0X2Rpc2FibGVkX25v ZGVzOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0KKwkJKHJlbC0+cGdzX21hc2sgJiBlbmFibGVf bWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKKwlwYXRoLT5kaXNhYmxlZF9ub2RlcyArPSBp bnB1dF9kaXNhYmxlZF9ub2RlczsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Qg KyBpbnB1dF9zdGFydHVwX2Nvc3Q7CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCAr IHJ1bl9jb3N0ICsgaW5wdXRfdG90YWxfY29zdDsKIH0KQEAgLTI0OTcsNyArMjU4MSw3IEBAIGNv c3RfbWVyZ2VfYXBwZW5kKFBhdGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogICovCiB2b2lk CiBjb3N0X21hdGVyaWFsKFBhdGggKnBhdGgsCi0JCQkgIGludCBpbnB1dF9kaXNhYmxlZF9ub2Rl cywKKwkJCSAgYm9vbCBlbmFibGVkLCBpbnQgaW5wdXRfZGlzYWJsZWRfbm9kZXMsCiAJCQkgIENv c3QgaW5wdXRfc3RhcnR1cF9jb3N0LCBDb3N0IGlucHV0X3RvdGFsX2Nvc3QsCiAJCQkgIGRvdWJs ZSB0dXBsZXMsIGludCB3aWR0aCkKIHsKQEAgLTI1MDYsNiArMjU5MCwxMSBAQCBjb3N0X21hdGVy aWFsKFBhdGggKnBhdGgsCiAJZG91YmxlCQluYnl0ZXMgPSByZWxhdGlvbl9ieXRlX3NpemUodHVw bGVzLCB3aWR0aCk7CiAJZG91YmxlCQl3b3JrX21lbV9ieXRlcyA9IHdvcmtfbWVtICogKFNpemUp IDEwMjQ7CiAKKwlpZiAocGF0aC0+cGFyYWxsZWxfd29ya2VycyA9PSAwICYmCisJCXBhdGgtPnBh cmVudCAhPSBOVUxMICYmCisJCShwYXRoLT5wYXJlbnQtPnBnc19tYXNrICYgUEdTX0NPTlNJREVS X05PTlBBUlRJQUwpID09IDApCisJCWVuYWJsZWQgPSBmYWxzZTsKKwogCXBhdGgtPnJvd3MgPSB0 dXBsZXM7CiAKIAkvKgpAQCAtMjUzNSw3ICsyNjI0LDcgQEAgY29zdF9tYXRlcmlhbChQYXRoICpw YXRoLAogCQlydW5fY29zdCArPSBzZXFfcGFnZV9jb3N0ICogbnBhZ2VzOwogCX0KIAotCXBhdGgt PmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMgKyAoZW5hYmxlX21hdGVyaWFs ID8gMCA6IDEpOworCXBhdGgtPmRpc2FibGVkX25vZGVzID0gaW5wdXRfZGlzYWJsZWRfbm9kZXMg KyAoZW5hYmxlZCA/IDAgOiAxKTsKIAlwYXRoLT5zdGFydHVwX2Nvc3QgPSBzdGFydHVwX2Nvc3Q7 CiAJcGF0aC0+dG90YWxfY29zdCA9IHN0YXJ0dXBfY29zdCArIHJ1bl9jb3N0OwogfQpAQCAtMzI4 Nyw3ICszMzc2LDcgQEAgY29zdF9ncm91cChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwK ICAqLwogdm9pZAogaW5pdGlhbF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LCBKb2lu Q29zdFdvcmtzcGFjZSAqd29ya3NwYWNlLAotCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJ CQkgIEpvaW5UeXBlIGpvaW50eXBlLCB1aW50NjQgZW5hYmxlX21hc2ssCiAJCQkJCSAgUGF0aCAq b3V0ZXJfcGF0aCwgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJICBKb2luUGF0aEV4dHJhRGF0YSAq ZXh0cmEpCiB7CkBAIC0zMzAxLDcgKzMzOTAsNyBAQCBpbml0aWFsX2Nvc3RfbmVzdGxvb3AoUGxh bm5lckluZm8gKnJvb3QsIEpvaW5Db3N0V29ya3NwYWNlICp3b3Jrc3BhY2UsCiAJQ29zdAkJaW5u ZXJfcmVzY2FuX3J1bl9jb3N0OwogCiAJLyogQ291bnQgdXAgZGlzYWJsZWQgbm9kZXMuICovCi0J ZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVfbmVzdGxvb3AgPyAwIDogMTsKKwlkaXNhYmxlZF9ub2Rl cyA9IChleHRyYS0+cGdzX21hc2sgJiBlbmFibGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDog MTsKIAlkaXNhYmxlZF9ub2RlcyArPSBpbm5lcl9wYXRoLT5kaXNhYmxlZF9ub2RlczsKIAlkaXNh YmxlZF9ub2RlcyArPSBvdXRlcl9wYXRoLT5kaXNhYmxlZF9ub2RlczsKIApAQCAtMzcwMSw3ICsz NzkwLDE5IEBAIGluaXRpYWxfY29zdF9tZXJnZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIEpvaW5D b3N0V29ya3NwYWNlICp3b3Jrc3BhY2UsCiAJQXNzZXJ0KG91dGVyc3RhcnRzZWwgPD0gb3V0ZXJl bmRzZWwpOwogCUFzc2VydChpbm5lcnN0YXJ0c2VsIDw9IGlubmVyZW5kc2VsKTsKIAotCWRpc2Fi bGVkX25vZGVzID0gZW5hYmxlX21lcmdlam9pbiA/IDAgOiAxOworCS8qCisJICogV2UgZG9uJ3Qg ZGVjaWRlIHdoZXRoZXIgdG8gbWF0ZXJpYWxpemUgdGhlIGlubmVyIHBhdGggdW50aWwgd2UgZ2V0 IHRvCisJICogZmluYWxfY29zdF9tZXJnZWpvaW4oKSwgc28gd2UgZG9uJ3Qga25vdyB3aGV0aGVy IHRvIGNoZWNrIHRoZSBwZ3NfbWFzaworCSAqIGFnYWluIFBHU19NRVJHRUpPSU5fUExBSU4gb3Ig UEdTX01FUkdFSk9JTl9NQVRFUklBTElaRS4gSW5zdGVhZCwgd2UKKwkgKiBqdXN0IGFjY291bnQg Zm9yIGFueSBjaGlsZCBub2RlcyBoZXJlIGFuZCBhc3N1bWUgdGhhdCB0aGlzIG5vZGUgaXMgbm90 CisJICogaXRzbGVmIGRpc2FibGVkOyB3ZSBjYW4gc29ydCBvdXQgdGhlIGRldGFpbHMgaW4gZmlu YWxfY29zdF9tZXJnZWpvaW4oKS4KKwkgKgorCSAqIChXZSBjb3VsZCBiZSBtb3JlIHByZWNpc2Ug aGVyZSBieSBzZXR0aW5nIGRpc2FibGVkX25vZGVzIHRvIDEgYXQgdGhpcworCSAqIHN0YWdlIGlm IGJvdGggUEdTX01FUkdFSk9JTl9QTEFJTiBhbmQgUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRSBh cmUKKwkgKiBkaXNhYmxlZCwgYnV0IHRoYXQgc2VlbXMgdG8gYWdhaW5zdCB0aGUgaWRlYSBvZiBt YWtpbmcgdGhpcyBmdW5jdGlvbgorCSAqIHByb2R1Y2UgYSBxdWljaywgb3B0aW1pc3RpYyBhcHBy b3hpbWF0aW9uIG9mIHRoZSBmaW5hbCBjb3N0LikKKwkgKi8KKwlkaXNhYmxlZF9ub2RlcyA9IDA7 CiAKIAkvKiBjb3N0IG9mIHNvdXJjZSBkYXRhICovCiAKQEAgLTM4ODAsOSArMzk4MSw3IEBAIGZp bmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgsCiAJ ZG91YmxlCQltZXJnZWpvaW50dXBsZXMsCiAJCQkJcmVzY2FubmVkdHVwbGVzOwogCWRvdWJsZQkJ cmVzY2FucmF0aW87Ci0KLQkvKiBTZXQgdGhlIG51bWJlciBvZiBkaXNhYmxlZCBub2Rlcy4gKi8K LQlwYXRoLT5qcGF0aC5wYXRoLmRpc2FibGVkX25vZGVzID0gd29ya3NwYWNlLT5kaXNhYmxlZF9u b2RlczsKKwl1aW50NjQJCWVuYWJsZV9tYXNrID0gMDsKIAogCS8qIFByb3RlY3Qgc29tZSBhc3N1 bXB0aW9ucyBiZWxvdyB0aGF0IHJvd2NvdW50cyBhcmVuJ3QgemVybyAqLwogCWlmIChpbm5lcl9w YXRoX3Jvd3MgPD0gMCkKQEAgLTQwMTIsMTYgKzQxMTEsMjAgQEAgZmluYWxfY29zdF9tZXJnZWpv aW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0aCAqcGF0aCwKIAkJcGF0aC0+bWF0ZXJpYWxp emVfaW5uZXIgPSBmYWxzZTsKIAogCS8qCi0JICogUHJlZmVyIG1hdGVyaWFsaXppbmcgaWYgaXQg bG9va3MgY2hlYXBlciwgdW5sZXNzIHRoZSB1c2VyIGhhcyBhc2tlZCB0bwotCSAqIHN1cHByZXNz IG1hdGVyaWFsaXphdGlvbi4KKwkgKiBJZiBtZXJnZSBqb2lucyB3aXRoIG1hdGVyaWFsaXphdGlv biBhcmUgZW5hYmxlZCwgdGhlbiBjaG9vc2UKKwkgKiBtYXRlcmlhbGl6YXRpb24gaWYgZWl0aGVy IChhKSBpdCBsb29rcyBjaGVhcGVyIG9yIChiKSBtZXJnZSBqb2lucworCSAqIHdpdGhvdXQgbWF0 ZXJpYWxpemF0aW9uIGFyZSBkaXNhYmxlZC4KIAkgKi8KLQllbHNlIGlmIChlbmFibGVfbWF0ZXJp YWwgJiYgbWF0X2lubmVyX2Nvc3QgPCBiYXJlX2lubmVyX2Nvc3QpCisJZWxzZSBpZiAoKGV4dHJh LT5wZ3NfbWFzayAmIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUpICE9IDAgJiYKKwkJCSAobWF0 X2lubmVyX2Nvc3QgPCBiYXJlX2lubmVyX2Nvc3QgfHwKKwkJCSAgKGV4dHJhLT5wZ3NfbWFzayAm IFBHU19NRVJHRUpPSU5fUExBSU4pID09IDApKQogCQlwYXRoLT5tYXRlcmlhbGl6ZV9pbm5lciA9 IHRydWU7CiAKIAkvKgotCSAqIEV2ZW4gaWYgbWF0ZXJpYWxpemluZyBkb2Vzbid0IGxvb2sgY2hl YXBlciwgd2UgKm11c3QqIGRvIGl0IGlmIHRoZQotCSAqIGlubmVyIHBhdGggaXMgdG8gYmUgdXNl ZCBkaXJlY3RseSAod2l0aG91dCBzb3J0aW5nKSBhbmQgaXQgZG9lc24ndAotCSAqIHN1cHBvcnQg bWFyay9yZXN0b3JlLgorCSAqIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBwbGFuIHNoYXBlcyBhcmUgZW5h YmxlZCBhbmQgd2hhdCB0aGUgY29zdHMgc2VlbSB0bworCSAqIGJlLCB3ZSAqbXVzdCogbWF0ZXJp YWxpemUgaXQgaWYgdGhlIGlubmVyIHBhdGggaXMgdG8gYmUgdXNlZCBkaXJlY3RseQorCSAqICh3 aXRob3V0IHNvcnRpbmcpIGFuZCBpdCBkb2Vzbid0IHN1cHBvcnQgbWFyay9yZXN0b3JlLiBQbGFu bmVyIGZhaWx1cmUKKwkgKiBpcyBub3QgYW4gb3B0aW9uIQogCSAqCiAJICogU2luY2UgdGhlIGlu bmVyIHNpZGUgbXVzdCBiZSBvcmRlcmVkLCBhbmQgb25seSBTb3J0cyBhbmQgSW5kZXhTY2FucyBj YW4KIAkgKiBjcmVhdGUgb3JkZXIgdG8gYmVnaW4gd2l0aCwgYW5kIHRoZXkgYm90aCBzdXBwb3J0 IG1hcmsvcmVzdG9yZSwgeW91CkBAIC00MDI5LDEwICs0MTMyLDYgQEAgZmluYWxfY29zdF9tZXJn ZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0aCAqcGF0aCwKIAkgKiBtZXJnZSBqb2lu cyBjYW4gKnByZXNlcnZlKiB0aGUgb3JkZXIgb2YgdGhlaXIgaW5wdXRzLCBzbyB0aGV5IGNhbiBi ZQogCSAqIHNlbGVjdGVkIGFzIHRoZSBpbnB1dCBvZiBhIG1lcmdlam9pbiwgYW5kIHRoZXkgZG9u J3Qgc3VwcG9ydAogCSAqIG1hcmsvcmVzdG9yZSBhdCBwcmVzZW50LgotCSAqCi0JICogV2UgZG9u J3QgdGVzdCB0aGUgdmFsdWUgb2YgZW5hYmxlX21hdGVyaWFsIGhlcmUsIGJlY2F1c2UKLQkgKiBt YXRlcmlhbGl6YXRpb24gaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzIGluIHRoaXMgY2FzZSwg YW5kIHR1cm5pbmcKLQkgKiBpdCBvZmYgZG9lcyBub3QgZW50aXRsZSB1cyB0byBkZWxpdmVyIGFu IGludmFsaWQgcGxhbi4KIAkgKi8KIAllbHNlIGlmIChpbm5lcnNvcnRrZXlzID09IE5JTCAmJgog CQkJICFFeGVjU3VwcG9ydHNNYXJrUmVzdG9yZShpbm5lcl9wYXRoKSkKQEAgLTQwNDYsMTAgKzQx NDUsMTEgQEAgZmluYWxfY29zdF9tZXJnZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIE1lcmdlUGF0 aCAqcGF0aCwKIAkgKiB0aG91Z2guCiAJICoKIAkgKiBTaW5jZSBtYXRlcmlhbGl6YXRpb24gaXMg YSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gaW4gdGhpcyBjYXNlLAotCSAqIHJhdGhlciB0aGFu IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3MsIHdlIHNraXAgaXQgaWYgZW5hYmxlX21hdGVyaWFs IGlzCi0JICogb2ZmLgorCSAqIHJhdGhlciB0aGFuIG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3Ms IHdlIHNraXAgaXQgaWYgbWF0ZXJpYWxpemF0aW9uIGlzCisJICogc3dpdGNoZWQgb2ZmLgogCSAq LwotCWVsc2UgaWYgKGVuYWJsZV9tYXRlcmlhbCAmJiBpbm5lcnNvcnRrZXlzICE9IE5JTCAmJgor CWVsc2UgaWYgKChleHRyYS0+cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX01BVEVSSUFMSVpFKSAh PSAwICYmCisJCQkgaW5uZXJzb3J0a2V5cyAhPSBOSUwgJiYKIAkJCSByZWxhdGlvbl9ieXRlX3Np emUoaW5uZXJfcGF0aF9yb3dzLAogCQkJCQkJCQlpbm5lcl9wYXRoLT5wYXRodGFyZ2V0LT53aWR0 aCkgPgogCQkJIHdvcmtfbWVtICogKFNpemUpIDEwMjQpCkBAIC00MDU3LDExICs0MTU3LDI5IEBA IGZpbmFsX2Nvc3RfbWVyZ2Vqb2luKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZVBhdGggKnBhdGgs CiAJZWxzZQogCQlwYXRoLT5tYXRlcmlhbGl6ZV9pbm5lciA9IGZhbHNlOwogCi0JLyogQ2hhcmdl IHRoZSByaWdodCBpbmNyZW1lbnRhbCBjb3N0IGZvciB0aGUgY2hvc2VuIGNhc2UgKi8KKwkvKiBH ZXQgdGhlIG51bWJlciBvZiBkaXNhYmxlZCBub2Rlcywgbm90IHlldCBpbmNsdWRpbmcgdGhpcyBv bmUuICovCisJcGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlcyA9IHdvcmtzcGFjZS0+ZGlz YWJsZWRfbm9kZXM7CisKKwkvKgorCSAqIENoYXJnZSB0aGUgcmlnaHQgaW5jcmVtZW50YWwgY29z dCBmb3IgdGhlIGNob3NlbiBjYXNlLCBhbmQgdXBkYXRlCisJICogZW5hYmxlX21hc2sgYXMgYXBw cm9wcmlhdGUuCisJICovCiAJaWYgKHBhdGgtPm1hdGVyaWFsaXplX2lubmVyKQorCXsKIAkJcnVu X2Nvc3QgKz0gbWF0X2lubmVyX2Nvc3Q7CisJCWVuYWJsZV9tYXNrIHw9IFBHU19NRVJHRUpPSU5f TUFURVJJQUxJWkU7CisJfQogCWVsc2UKKwl7CiAJCXJ1bl9jb3N0ICs9IGJhcmVfaW5uZXJfY29z dDsKKwkJZW5hYmxlX21hc2sgfD0gUEdTX01FUkdFSk9JTl9QTEFJTjsKKwl9CisKKwkvKiBJbmNy ZW1lbnRhbCBjb3VudCBvZiBkaXNhYmxlZCBub2RlcyBpZiB0aGlzIG5vZGUgaXMgZGlzYWJsZWQu ICovCisJaWYgKHBhdGgtPmpwYXRoLnBhdGgucGFyYWxsZWxfd29ya2VycyA9PSAwKQorCQllbmFi bGVfbWFzayB8PSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlpZiAoKGV4dHJhLT5wZ3NfbWFz ayAmIGVuYWJsZV9tYXNrKSAhPSBlbmFibGVfbWFzaykKKwkJKytwYXRoLT5qcGF0aC5wYXRoLmRp c2FibGVkX25vZGVzOwogCiAJLyogQ1BVIGNvc3RzICovCiAKQEAgLTQxOTksOSArNDMxNywxMyBA QCBpbml0aWFsX2Nvc3RfaGFzaGpvaW4oUGxhbm5lckluZm8gKnJvb3QsIEpvaW5Db3N0V29ya3Nw YWNlICp3b3Jrc3BhY2UsCiAJaW50CQkJbnVtYmF0Y2hlczsKIAlpbnQJCQludW1fc2tld19tY3Zz OwogCXNpemVfdAkJc3BhY2VfYWxsb3dlZDsJLyogdW51c2VkICovCisJdWludDY0CQllbmFibGVf bWFzayA9IFBHU19IQVNISk9JTjsKKworCWlmIChvdXRlcl9wYXRoLT5wYXJhbGxlbF93b3JrZXJz ID09IDApCisJCWVuYWJsZV9tYXNrIHw9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOwogCiAJLyog Q291bnQgdXAgZGlzYWJsZWQgbm9kZXMuICovCi0JZGlzYWJsZWRfbm9kZXMgPSBlbmFibGVfaGFz aGpvaW4gPyAwIDogMTsKKwlkaXNhYmxlZF9ub2RlcyA9IChleHRyYS0+cGdzX21hc2sgJiBlbmFi bGVfbWFzaykgPT0gZW5hYmxlX21hc2sgPyAwIDogMTsKIAlkaXNhYmxlZF9ub2RlcyArPSBpbm5l cl9wYXRoLT5kaXNhYmxlZF9ub2RlczsKIAlkaXNhYmxlZF9ub2RlcyArPSBvdXRlcl9wYXRoLT5k aXNhYmxlZF9ub2RlczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXgg MjljYjYwZDZiMzUuLjY3ZDlkYzM1ZjQ0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9pbmR4cGF0aC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhw YXRoLmMKQEAgLTIyMzIsOCArMjIzMiw4IEBAIGNoZWNrX2luZGV4X29ubHkoUmVsT3B0SW5mbyAq cmVsLCBJbmRleE9wdEluZm8gKmluZGV4KQogCUxpc3RDZWxsICAgKmxjOwogCWludAkJCWk7CiAK LQkvKiBJbmRleC1vbmx5IHNjYW5zIG11c3QgYmUgZW5hYmxlZCAqLwotCWlmICghZW5hYmxlX2lu ZGV4b25seXNjYW4pCisJLyogSWYgd2UncmUgbm90IGFsbG93ZWQgdG8gY29uc2lkZXIgaW5kZXgt b25seSBzY2FucywgZ2l2ZSB1cCBub3cgKi8KKwlpZiAoKHJlbC0+cGdzX21hc2sgJiBQR1NfQ09O U0lERVJfSU5ERVhPTkxZKSA9PSAwKQogCQlyZXR1cm4gZmFsc2U7CiAKIAkvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnBhdGguYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2pvaW5wYXRoLmMKaW5kZXggMzY5NzNlYWIzYmUuLjFlNDI0NmI0OWQ1IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucGF0aC5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKQEAgLTI3LDggKzI3LDkgQEAKICNp bmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgog Ci0vKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIGFkZF9wYXRoc190b19qb2lu cmVsKCkgKi8KKy8qIEhvb2tzIGZvciBwbHVnaW5zIHRvIGdldCBjb250cm9sIGluIGFkZF9wYXRo c190b19qb2lucmVsKCkgKi8KIHNldF9qb2luX3BhdGhsaXN0X2hvb2tfdHlwZSBzZXRfam9pbl9w YXRobGlzdF9ob29rID0gTlVMTDsKK2pvaW5fcGF0aF9zZXR1cF9ob29rX3R5cGUgam9pbl9wYXRo X3NldHVwX2hvb2sgPSBOVUxMOwogCiAvKgogICogUGF0aHMgcGFyYW1ldGVyaXplZCBieSBhIHBh cmVudCByZWwgY2FuIGJlIGNvbnNpZGVyZWQgdG8gYmUgcGFyYW1ldGVyaXplZApAQCAtMTQ5LDYg KzE1MCwzMyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFubmVySW5mbyAqcm9vdCwKIAlleHRy YS5tZXJnZWNsYXVzZV9saXN0ID0gTklMOwogCWV4dHJhLnNqaW5mbyA9IHNqaW5mbzsKIAlleHRy YS5wYXJhbV9zb3VyY2VfcmVscyA9IE5VTEw7CisJZXh0cmEucGdzX21hc2sgPSBqb2lucmVsLT5w Z3NfbWFzazsKKworCS8qCisJICogR2l2ZSBleHRlbnNpb25zIGEgY2hhbmNlIHRvIHRha2UgY29u dHJvbC4gSW4gcGFydGljdWxhciwgYW4gZXh0ZW5zaW9uCisJICogbWlnaHQgd2FudCB0byBtb2Rp ZnkgZXh0cmEucGdzX21hc2suIEl0J3MgcG9zc2libGUgdG8gb3ZlcnJpZGUgcGdzX21hc2sKKwkg KiBvbiBhIHF1ZXJ5LXdpZGUgYmFzaXMgdXNpbmcgam9pbl9zZWFyY2hfaG9vaywgb3IgZm9yIGEg cGFydGljdWxhcgorCSAqIHJlbGF0aW9uIHVzaW5nIGpvaW5yZWxfc2V0dXBfaG9vaywgYnV0IGV4 dGVuc2lvbnMgdGhhdCB3YW50IHRvIHByb3ZpZGUKKwkgKiBkaWZmZXJlbnQgYWR2aWNlIGZvciB0 aGUgc2FtZSBqb2lucmVsIGJhc2VkIG9uIHRoZSBjaG9pY2Ugb2YgaW5uZXJyZWwKKwkgKiBhbmQg b3V0ZXJyZWwgd2lsbCBuZWVkIHRvIHVzZSB0aGlzIGhvb2suCisJICoKKwkgKiBBIHZlcnkgc2lt cGxlIHdheSBmb3IgYW4gZXh0ZW5zaW9uIHRvIHVzZSB0aGlzIGhvb2sgaXMgdG8gc2V0CisJICog ZXh0cmEucGdzX21hc2sgJj0gflBHU19KT0lOX0FOWSwgaWYgaXQgc2ltcGx5IGRvZXNuJ3Qgd2Fu dCBhbnkgb2YgdGhlCisJICogcGF0aHMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbCB0byBhZGRfcGF0 aHNfdG9fam9pbnJlbCgpIHRvIGJlIHNlbGVjdGVkLgorCSAqIEFuIGV4dGVuc2lvbiBjb3VsZCB1 c2UgdGhpcyB0ZWNobmlxdWUgdG8gY29uc3RyYWluIHRoZSBqb2luIG9yZGVyLAorCSAqIHNpbmNl IGl0IGNvdWxkIHRoZXJlYnkgYXJyYW5nZSB0byByZWplY3QgYWxsIHBhdGhzIGZyb20gam9pbiBv cmRlcnMKKwkgKiB0aGF0IGl0IGRvZXMgbm90IGxpa2UuIEFuIGV4dGVuc2lvbiBjYW4gYWxzbyBz ZWxlY3RpdmVseSBjbGVhciBiaXRzCisJICogZnJvbSBleHRyYS5wZ3NfbWFzayB0byBydWxlIG91 dCBzcGVjaWZpYyB0ZWNobmlxdWVzIGZvciBzcGVjaWZpYyBqb2lucywKKwkgKiBvciBjb3VsZCBl dmVuIHNldCBhZGRpdGlvbmFsIGJpdHMgdG8gcmUtYWxsb3cgbWV0aG9kcyBkaXNhYmxlZCBhdCBz b21lCisJICogaGlnaGVyIGxldmVsLgorCSAqCisJICogTkI6IEJlbG93IHRoaXMgcG9pbnQsIHRo aXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhcmVmdWwgdG8gcmVmZXJlbmNlCisJICogZXh0cmEucGdz X21hc2sgcmF0aGVyIHRoYW4gcmVsLT5wZ3NfbWFzayB0byBhdm9pZCBkaXNyZWdhcmRpbmcgYW55 CisJICogY2hhbmdlcyBtYWRlIGJ5IHRoZSBob29rIHdlJ3JlIGFib3V0IHRvIGNhbGwuCisJICov CisJaWYgKGpvaW5fcGF0aF9zZXR1cF9ob29rKQorCQlqb2luX3BhdGhfc2V0dXBfaG9vayhyb290 LCBqb2lucmVsLCBvdXRlcnJlbCwgaW5uZXJyZWwsCisJCQkJCQkJIGpvaW50eXBlLCAmZXh0cmEp OwogCiAJLyoKIAkgKiBTZWUgaWYgdGhlIGlubmVyIHJlbGF0aW9uIGlzIHByb3ZhYmx5IHVuaXF1 ZSBmb3IgdGhpcyBvdXRlciByZWwuCkBAIC0yMDgsMTAgKzIzNiwxMCBAQCBhZGRfcGF0aHNfdG9f am9pbnJlbChQbGFubmVySW5mbyAqcm9vdCwKIAkvKgogCSAqIEZpbmQgcG90ZW50aWFsIG1lcmdl am9pbiBjbGF1c2VzLiAgV2UgY2FuIHNraXAgdGhpcyBpZiB3ZSBhcmUgbm90CiAJICogaW50ZXJl c3RlZCBpbiBkb2luZyBhIG1lcmdlam9pbi4gIEhvd2V2ZXIsIG1lcmdlam9pbiBtYXkgYmUgb3Vy IG9ubHkKLQkgKiB3YXkgb2YgaW1wbGVtZW50aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBvdmVy cmlkZSBlbmFibGVfbWVyZ2Vqb2luIGlmCi0JICogaXQncyBhIGZ1bGwgam9pbi4KKwkgKiB3YXkg b2YgaW1wbGVtZW50aW5nIGEgZnVsbCBvdXRlciBqb2luLCBzbyBpbiB0aGF0IGNhc2Ugd2UgZG9u J3QgY2FyZQorCSAqIHdoZXRoZXIgbWVyZ2Vqb2lucyBhcmUgZGlzYWJsZWQuCiAJICovCi0JaWYg KGVuYWJsZV9tZXJnZWpvaW4gfHwgam9pbnR5cGUgPT0gSk9JTl9GVUxMKQorCWlmICgoZXh0cmEu cGdzX21hc2sgJiBQR1NfTUVSR0VKT0lOX0FOWSkgIT0gMCB8fCBqb2ludHlwZSA9PSBKT0lOX0ZV TEwpCiAJCWV4dHJhLm1lcmdlY2xhdXNlX2xpc3QgPSBzZWxlY3RfbWVyZ2Vqb2luX2NsYXVzZXMo cm9vdCwKIAkJCQkJCQkJCQkJCQkJICBqb2lucmVsLAogCQkJCQkJCQkJCQkJCQkgIG91dGVycmVs LApAQCAtMzE5LDEwICszNDcsMTAgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8g KnJvb3QsCiAKIAkvKgogCSAqIDQuIENvbnNpZGVyIHBhdGhzIHdoZXJlIGJvdGggb3V0ZXIgYW5k IGlubmVyIHJlbGF0aW9ucyBtdXN0IGJlIGhhc2hlZAotCSAqIGJlZm9yZSBiZWluZyBqb2luZWQu ICBBcyBhYm92ZSwgZGlzcmVnYXJkIGVuYWJsZV9oYXNoam9pbiBmb3IgZnVsbAotCSAqIGpvaW5z LCBiZWNhdXNlIHRoZXJlIG1heSBiZSBubyBvdGhlciBhbHRlcm5hdGl2ZS4KKwkgKiBiZWZvcmUg YmVpbmcgam9pbmVkLiAgQXMgYWJvdmUsIHdoZW4gaXQncyBhIGZ1bGwgam9pbiwgd2UgbXVzdCB0 cnkgdGhpcworCSAqIGV2ZW4gd2hlbiB0aGUgcGF0aCB0eXBlIGlzIGRpc2FibGVkLCBiZWNhdXNl IGl0IG1heSBiZSBvdXIgb25seSBvcHRpb24uCiAJICovCi0JaWYgKGVuYWJsZV9oYXNoam9pbiB8 fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCisJaWYgKChleHRyYS5wZ3NfbWFzayAmIFBHU19IQVNI Sk9JTikgIT0gMCB8fCBqb2ludHlwZSA9PSBKT0lOX0ZVTEwpCiAJCWhhc2hfaW5uZXJfYW5kX291 dGVyKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJlbCwKIAkJCQkJCQkgam9pbnR5cGUs ICZleHRyYSk7CiAKQEAgLTMzMSw3ICszNTksNyBAQCBhZGRfcGF0aHNfdG9fam9pbnJlbChQbGFu bmVySW5mbyAqcm9vdCwKIAkgKiB0byB0aGUgc2FtZSBzZXJ2ZXIgYW5kIGFzc2lnbmVkIHRvIHRo ZSBzYW1lIHVzZXIgdG8gY2hlY2sgYWNjZXNzCiAJICogcGVybWlzc2lvbnMgYXMsIGdpdmUgdGhl IEZEVyBhIGNoYW5jZSB0byBwdXNoIGRvd24gam9pbnMuCiAJICovCi0JaWYgKGpvaW5yZWwtPmZk d3JvdXRpbmUgJiYKKwlpZiAoKGV4dHJhLnBnc19tYXNrICYgUEdTX0ZPUkVJR05KT0lOKSAhPSAw ICYmIGpvaW5yZWwtPmZkd3JvdXRpbmUgJiYKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9y ZWlnbkpvaW5QYXRocykKIAkJam9pbnJlbC0+ZmR3cm91dGluZS0+R2V0Rm9yZWlnbkpvaW5QYXRo cyhyb290LCBqb2lucmVsLAogCQkJCQkJCQkJCQkJIG91dGVycmVsLCBpbm5lcnJlbCwKQEAgLTM0 MCw4ICszNjgsMTMgQEAgYWRkX3BhdGhzX3RvX2pvaW5yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJ LyoKIAkgKiA2LiBGaW5hbGx5LCBnaXZlIGV4dGVuc2lvbnMgYSBjaGFuY2UgdG8gbWFuaXB1bGF0 ZSB0aGUgcGF0aCBsaXN0LiAgVGhleQogCSAqIGNvdWxkIGFkZCBuZXcgcGF0aHMgKHN1Y2ggYXMg Q3VzdG9tUGF0aHMpIGJ5IGNhbGxpbmcgYWRkX3BhdGgoKSwgb3IKLQkgKiBhZGRfcGFydGlhbF9w YXRoKCkgaWYgcGFyYWxsZWwgYXdhcmUuICBUaGV5IGNvdWxkIGFsc28gZGVsZXRlIG9yIG1vZGlm eQotCSAqIHBhdGhzIGFkZGVkIGJ5IHRoZSBjb3JlIGNvZGUuCisJICogYWRkX3BhcnRpYWxfcGF0 aCgpIGlmIHBhcmFsbGVsIGF3YXJlLgorCSAqCisJICogSW4gdGhlb3J5LCBleHRlbnNpb25zIGNv dWxkIGFsc28gdXNlIHRoaXMgaG9vayB0byBkZWxldGUgb3IgbW9kaWZ5CisJICogcGF0aHMgYWRk ZWQgYnkgdGhlIGNvcmUgY29kZSwgYnV0IGluIHByYWN0aWNlIHRoaXMgaXMgZGlmZmljdWx0IHRv IG1ha2UKKwkgKiB3b3JrLCBzaW5jZSBpdCdzIHRvbyBsYXRlIHRvIGdldCBiYWNrIGFueSBwYXRo cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuCisJICogZGlzY2FyZGVkIGJ5IGFkZF9wYXRoKCkgb3Ig YWRkX3BhcnRpYWxfcGF0aCgpLiBJZiB5b3UncmUgdHJ5aW5nIHRvCisJICogc3VwcHJlc3MgcGF0 aHMsIGNvbnNpZGVyIHVzaW5nIGpvaW5fcGF0aF9zZXR1cF9ob29rIGluc3RlYWQuCiAJICovCiAJ aWYgKHNldF9qb2luX3BhdGhsaXN0X2hvb2spCiAJCXNldF9qb2luX3BhdGhsaXN0X2hvb2socm9v dCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsLApAQCAtNjg4LDcgKzcyMSw3IEBAIGdldF9t ZW1vaXplX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlubmVycmVsLAogCUxp c3QJICAgKnBoX2xhdGVyYWxfdmFyczsKIAogCS8qIE9idmlvdXNseSBub3QgaWYgaXQncyBkaXNh YmxlZCAqLwotCWlmICghZW5hYmxlX21lbW9pemUpCisJaWYgKChleHRyYS0+cGdzX21hc2sgJiBQ R1NfTkVTVExPT1BfTUVNT0laRSkgPT0gMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgpAQCAtODQz LDYgKzg3Niw3IEBAIHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAg UGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkgIExpc3QgKnBhdGhrZXlzLAogCQkJCSAgSm9pblR5cGUg am9pbnR5cGUsCisJCQkJICB1aW50NjQgbmVzdGxvb3Bfc3VidHlwZSwKIAkJCQkgIEpvaW5QYXRo RXh0cmFEYXRhICpleHRyYSkKIHsKIAlSZWxpZHMJCXJlcXVpcmVkX291dGVyOwpAQCAtOTI1LDYg Kzk1OSw3IEBAIHRyeV9uZXN0bG9vcF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCSAqIG1ldGhv ZG9sb2d5IHdvcnRod2hpbGUuCiAJICovCiAJaW5pdGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3 b3Jrc3BhY2UsIGpvaW50eXBlLAorCQkJCQkJICBuZXN0bG9vcF9zdWJ0eXBlIHwgUEdTX0NPTlNJ REVSX05PTlBBUlRJQUwsCiAJCQkJCQkgIG91dGVyX3BhdGgsIGlubmVyX3BhdGgsIGV4dHJhKTsK IAogCWlmIChhZGRfcGF0aF9wcmVjaGVjayhqb2lucmVsLCB3b3Jrc3BhY2UuZGlzYWJsZWRfbm9k ZXMsCkBAIC05NjIsNiArOTk3LDcgQEAgdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChQbGFubmVy SW5mbyAqcm9vdCwKIAkJCQkJCSAgUGF0aCAqaW5uZXJfcGF0aCwKIAkJCQkJCSAgTGlzdCAqcGF0 aGtleXMsCiAJCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAorCQkJCQkJICB1aW50NjQgbmVzdGxv b3Bfc3VidHlwZSwKIAkJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQogewogCUpvaW5D b3N0V29ya3NwYWNlIHdvcmtzcGFjZTsKQEAgLTEwMDksNyArMTA0NSw3IEBAIHRyeV9wYXJ0aWFs X25lc3Rsb29wX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCiAJICogQmVmb3JlIGNyZWF0aW5nIGEg cGF0aCwgZ2V0IGEgcXVpY2sgbG93ZXIgYm91bmQgb24gd2hhdCBpdCBpcyBsaWtlbHkgdG8KIAkg KiBjb3N0LiAgQmFpbCBvdXQgcmlnaHQgYXdheSBpZiBpdCBsb29rcyB0ZXJyaWJsZS4KIAkgKi8K LQlpbml0aWFsX2Nvc3RfbmVzdGxvb3Aocm9vdCwgJndvcmtzcGFjZSwgam9pbnR5cGUsCisJaW5p dGlhbF9jb3N0X25lc3Rsb29wKHJvb3QsICZ3b3Jrc3BhY2UsIGpvaW50eXBlLCBuZXN0bG9vcF9z dWJ0eXBlLAogCQkJCQkJICBvdXRlcl9wYXRoLCBpbm5lcl9wYXRoLCBleHRyYSk7CiAJaWYgKCFh ZGRfcGFydGlhbF9wYXRoX3ByZWNoZWNrKGpvaW5yZWwsIHdvcmtzcGFjZS5kaXNhYmxlZF9ub2Rl cywKIAkJCQkJCQkJICAgd29ya3NwYWNlLnRvdGFsX2Nvc3QsIHBhdGhrZXlzKSkKQEAgLTE4NTcs MTQgKzE4OTMsMTQgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJ aWYgKG5lc3Rqb2luT0spCiAJewogCQkvKgotCQkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRo ZSBjaGVhcGVzdCBpbm5lciBwYXRoLCB1bmxlc3MKLQkJICogZW5hYmxlX21hdGVyaWFsIGlzIG9m ZiBvciB0aGUgcGF0aCBpbiBxdWVzdGlvbiBtYXRlcmlhbGl6ZXMgaXRzCi0JCSAqIG91dHB1dCBh bnl3YXkuCisJCSAqIENvbnNpZGVyIG1hdGVyaWFsaXppbmcgdGhlIGNoZWFwZXN0IGlubmVyIHBh dGgsIHVubGVzcyB0aGF0IGlzCisJCSAqIGRpc2FibGVkIG9yIHRoZSBwYXRoIGluIHF1ZXN0aW9u IG1hdGVyaWFsaXplcyBpdHMgb3V0cHV0IGFueXdheS4KIAkJICovCi0JCWlmIChlbmFibGVfbWF0 ZXJpYWwgJiYgaW5uZXJfY2hlYXBlc3RfdG90YWwgIT0gTlVMTCAmJgorCQlpZiAoKGV4dHJhLT5w Z3NfbWFzayAmIFBHU19ORVNUTE9PUF9NQVRFUklBTElaRSkgIT0gMCAmJgorCQkJaW5uZXJfY2hl YXBlc3RfdG90YWwgIT0gTlVMTCAmJgogCQkJIUV4ZWNNYXRlcmlhbGl6ZXNPdXRwdXQoaW5uZXJf Y2hlYXBlc3RfdG90YWwtPnBhdGh0eXBlKSkKIAkJCW1hdHBhdGggPSAoUGF0aCAqKQotCQkJCWNy ZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQkJ Y3JlYXRlX21hdGVyaWFsX3BhdGgoaW5uZXJyZWwsIGlubmVyX2NoZWFwZXN0X3RvdGFsLCB0cnVl KTsKIAl9CiAKIAlmb3JlYWNoKGxjMSwgb3V0ZXJyZWwtPnBhdGhsaXN0KQpAQCAtMTkwNyw2ICsx OTQzLDcgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJ CSAgaW5uZXJwYXRoLAogCQkJCQkJCQkgIG1lcmdlX3BhdGhrZXlzLAogCQkJCQkJCQkgIGpvaW50 eXBlLAorCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9QTEFJTiwKIAkJCQkJCQkJICBleHRyYSk7CiAK IAkJCQkvKgpAQCAtMTkyMyw2ICsxOTYwLDcgQEAgbWF0Y2hfdW5zb3J0ZWRfb3V0ZXIoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkJCQkgIG1wYXRoLAogCQkJCQkJCQkJICBtZXJnZV9wYXRoa2V5 cywKIAkJCQkJCQkJCSAgam9pbnR5cGUsCisJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpF LAogCQkJCQkJCQkJICBleHRyYSk7CiAJCQl9CiAKQEAgLTE5MzQsNiArMTk3Miw3IEBAIG1hdGNo X3Vuc29ydGVkX291dGVyKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkgIG1hdHBhdGgsCiAJ CQkJCQkJCSAgbWVyZ2VfcGF0aGtleXMsCiAJCQkJCQkJCSAgam9pbnR5cGUsCisJCQkJCQkJCSAg UEdTX05FU1RMT09QX01BVEVSSUFMSVpFLAogCQkJCQkJCQkgIGV4dHJhKTsKIAkJfQogCkBAIC0y MDUwLDE2ICsyMDg5LDE3IEBAIGNvbnNpZGVyX3BhcmFsbGVsX25lc3Rsb29wKFBsYW5uZXJJbmZv ICpyb290LAogCiAJLyoKIAkgKiBDb25zaWRlciBtYXRlcmlhbGl6aW5nIHRoZSBjaGVhcGVzdCBp bm5lciBwYXRoLCB1bmxlc3M6IDEpCi0JICogZW5hYmxlX21hdGVyaWFsIGlzIG9mZiwgMikgdGhl IGNoZWFwZXN0IGlubmVyIHBhdGggaXMgbm90CisJICogbWF0ZXJpYWxpemF0aW9uIGlzIGRpc2Fi bGVkIGhlcmUsIDIpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIG5vdAogCSAqIHBhcmFsbGVs LXNhZmUsIDMpIHRoZSBjaGVhcGVzdCBpbm5lciBwYXRoIGlzIHBhcmFtZXRlcml6ZWQgYnkgdGhl IG91dGVyCiAJICogcmVsLCBvciA0KSB0aGUgY2hlYXBlc3QgaW5uZXIgcGF0aCBtYXRlcmlhbGl6 ZXMgaXRzIG91dHB1dCBhbnl3YXkuCiAJICovCi0JaWYgKGVuYWJsZV9tYXRlcmlhbCAmJiBpbm5l cl9jaGVhcGVzdF90b3RhbC0+cGFyYWxsZWxfc2FmZSAmJgorCWlmICgoZXh0cmEtPnBnc19tYXNr ICYgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFKSAhPSAwICYmCisJCWlubmVyX2NoZWFwZXN0X3Rv dGFsLT5wYXJhbGxlbF9zYWZlICYmCiAJCSFQQVRIX1BBUkFNX0JZX1JFTChpbm5lcl9jaGVhcGVz dF90b3RhbCwgb3V0ZXJyZWwpICYmCiAJCSFFeGVjTWF0ZXJpYWxpemVzT3V0cHV0KGlubmVyX2No ZWFwZXN0X3RvdGFsLT5wYXRodHlwZSkpCiAJewogCQltYXRwYXRoID0gKFBhdGggKikKLQkJCWNy ZWF0ZV9tYXRlcmlhbF9wYXRoKGlubmVycmVsLCBpbm5lcl9jaGVhcGVzdF90b3RhbCk7CisJCQlj cmVhdGVfbWF0ZXJpYWxfcGF0aChpbm5lcnJlbCwgaW5uZXJfY2hlYXBlc3RfdG90YWwsIHRydWUp OwogCQlBc3NlcnQobWF0cGF0aC0+cGFyYWxsZWxfc2FmZSk7CiAJfQogCkBAIC0yMDg5LDcgKzIx MjksOCBAQCBjb25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwKIAkJ CQljb250aW51ZTsKIAogCQkJdHJ5X3BhcnRpYWxfbmVzdGxvb3BfcGF0aChyb290LCBqb2lucmVs LCBvdXRlcnBhdGgsIGlubmVycGF0aCwKLQkJCQkJCQkJCSAgcGF0aGtleXMsIGpvaW50eXBlLCBl eHRyYSk7CisJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlwZSwKKwkJCQkJCQkJCSAgUEdTX05F U1RMT09QX1BMQUlOLCBleHRyYSk7CiAKIAkJCS8qCiAJCQkgKiBUcnkgZ2VuZXJhdGluZyBhIG1l bW9pemUgcGF0aCBhbmQgc2VlIGlmIHRoYXQgbWFrZXMgdGhlIG5lc3RlZApAQCAtMjEwMCwxMyAr MjE0MSwxNSBAQCBjb25zaWRlcl9wYXJhbGxlbF9uZXN0bG9vcChQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCSBleHRyYSk7CiAJCQlpZiAobXBhdGggIT0gTlVMTCkKIAkJCQl0cnlfcGFydGlh bF9uZXN0bG9vcF9wYXRoKHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbXBhdGgsCi0JCQkJCQkJ CQkJICBwYXRoa2V5cywgam9pbnR5cGUsIGV4dHJhKTsKKwkJCQkJCQkJCQkgIHBhdGhrZXlzLCBq b2ludHlwZSwKKwkJCQkJCQkJCQkgIFBHU19ORVNUTE9PUF9NRU1PSVpFLCBleHRyYSk7CiAJCX0K IAogCQkvKiBBbHNvIGNvbnNpZGVyIG1hdGVyaWFsaXplZCBmb3JtIG9mIHRoZSBjaGVhcGVzdCBp bm5lciBwYXRoICovCiAJCWlmIChtYXRwYXRoICE9IE5VTEwpCiAJCQl0cnlfcGFydGlhbF9uZXN0 bG9vcF9wYXRoKHJvb3QsIGpvaW5yZWwsIG91dGVycGF0aCwgbWF0cGF0aCwKLQkJCQkJCQkJCSAg cGF0aGtleXMsIGpvaW50eXBlLCBleHRyYSk7CisJCQkJCQkJCQkgIHBhdGhrZXlzLCBqb2ludHlw ZSwKKwkJCQkJCQkJCSAgUEdTX05FU1RMT09QX01BVEVSSUFMSVpFLCBleHRyYSk7CiAJfQogfQog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMKaW5kZXggNTQ3M2Q5NzUxMmEuLjE4YTM2 NTQ3MjBiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC90aWRwYXRoLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvdGlkcGF0aC5jCkBAIC00OTksMTggKzQ5 OSwxOSBAQCBjcmVhdGVfdGlkc2Nhbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsKQogCUxpc3QJICAgKnRpZHF1YWxzOwogCUxpc3QJICAgKnRpZHJhbmdlcXVhbHM7CiAJ Ym9vbAkJaXNDdXJyZW50T2Y7CisJYm9vbAkJZW5hYmxlZCA9IChyZWwtPnBnc19tYXNrICYgUEdT X1RJRFNDQU4pICE9IDA7CiAKIAkvKgogCSAqIElmIGFueSBzdWl0YWJsZSBxdWFscyBleGlzdCBp biB0aGUgcmVsJ3MgYmFzZXJlc3RyaWN0IGxpc3QsIGdlbmVyYXRlIGEKIAkgKiBwbGFpbiAodW5w YXJhbWV0ZXJpemVkKSBUaWRQYXRoIHdpdGggdGhlbS4KIAkgKgotCSAqIFdlIHNraXAgdGhpcyB3 aGVuIGVuYWJsZV90aWRzY2FuID0gZmFsc2UsIGV4Y2VwdCB3aGVuIHRoZSBxdWFsIGlzCisJICog V2Ugc2tpcCB0aGlzIHdoZW4gVElEIHNjYW5zIGFyZSBkaXNhYmxlZCwgZXhjZXB0IHdoZW4gdGhl IHF1YWwgaXMKIAkgKiBDdXJyZW50T2ZFeHByLiBJbiB0aGF0IGNhc2UsIGEgVElEIHNjYW4gaXMg dGhlIG9ubHkgY29ycmVjdCBwYXRoLgogCSAqLwogCXRpZHF1YWxzID0gVGlkUXVhbEZyb21SZXN0 cmljdEluZm9MaXN0KHJvb3QsIHJlbC0+YmFzZXJlc3RyaWN0aW5mbywgcmVsLAogCQkJCQkJCQkJ CSAgICZpc0N1cnJlbnRPZik7CiAKLQlpZiAodGlkcXVhbHMgIT0gTklMICYmIChlbmFibGVfdGlk c2NhbiB8fCBpc0N1cnJlbnRPZikpCisJaWYgKHRpZHF1YWxzICE9IE5JTCAmJiAoZW5hYmxlZCB8 fCBpc0N1cnJlbnRPZikpCiAJewogCQkvKgogCQkgKiBUaGlzIHBhdGggdXNlcyBubyBqb2luIGNs YXVzZXMsIGJ1dCBpdCBjb3VsZCBzdGlsbCBoYXZlIHJlcXVpcmVkCkBAIC01MzIsNyArNTMzLDcg QEAgY3JlYXRlX3RpZHNjYW5fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bCkKIAl9CiAKIAkvKiBTa2lwIHRoZSByZXN0IGlmIFRJRCBzY2FucyBhcmUgZGlzYWJsZWQuICov Ci0JaWYgKCFlbmFibGVfdGlkc2NhbikKKwlpZiAoIWVuYWJsZWQpCiAJCXJldHVybiBmYWxzZTsK IAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFu LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKaW5kZXggZWI0ODA2 YjA4NGEuLmMyNmU4NDFmNTM3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9jcmVhdGVwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jCkBAIC02NTA1LDcgKzY1MDUsNyBAQCBQbGFuICoKIG1hdGVyaWFsaXplX2ZpbmlzaGVkX3Bs YW4oUGxhbiAqc3VicGxhbikKIHsKIAlQbGFuCSAgICptYXRwbGFuOwotCVBhdGgJCW1hdHBhdGg7 CQkvKiBkdW1teSBmb3IgcmVzdWx0IG9mIGNvc3RfbWF0ZXJpYWwgKi8KKwlQYXRoCQltYXRwYXRo OwkJLyogZHVtbXkgZm9yIGNvc3RfbWF0ZXJpYWwgKi8KIAlDb3N0CQlpbml0cGxhbl9jb3N0Owog CWJvb2wJCXVuc2FmZV9pbml0cGxhbnM7CiAKQEAgLTY1MjcsNyArNjUyNyw5IEBAIG1hdGVyaWFs aXplX2ZpbmlzaGVkX3BsYW4oUGxhbiAqc3VicGxhbikKIAlzdWJwbGFuLT50b3RhbF9jb3N0IC09 IGluaXRwbGFuX2Nvc3Q7CiAKIAkvKiBTZXQgY29zdCBkYXRhICovCisJbWF0cGF0aC5wYXJlbnQg PSBOVUxMOwogCWNvc3RfbWF0ZXJpYWwoJm1hdHBhdGgsCisJCQkJICBlbmFibGVfbWF0ZXJpYWws CiAJCQkJICBzdWJwbGFuLT5kaXNhYmxlZF9ub2RlcywKIAkJCQkgIHN1YnBsYW4tPnN0YXJ0dXBf Y29zdCwKIAkJCQkgIHN1YnBsYW4tPnRvdGFsX2Nvc3QsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9w bGFubmVyLmMKaW5kZXggN2E2YjhiNzQ5ZjIuLjc1N2JkYzdiMWRlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vcGxhbm5lci5jCkBAIC00NjIsNiArNDYyLDUzIEBAIHN0YW5kYXJkX3BsYW5uZXIo UXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIGludCBjdXJzb3JPcHRpb25z LAogCQl0dXBsZV9mcmFjdGlvbiA9IDAuMDsKIAl9CiAKKwkvKgorCSAqIENvbXB1dGUgdGhlIGlu aXRpYWwgcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1hc2suCisJICoKKwkgKiBTb21lIHN0cmF0 ZWdpZXMsIHN1Y2ggYXMgUEdTX0ZPUkVJR05KT0lOLCBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgZW5h YmxlXyoKKwkgKiBHVUMsIGFuZCBzbyB0aGUgY29ycmVzcG9uZGluZyBiaXRzIGFyZSBhbHdheXMg c2V0IGluIHRoZSBkZWZhdWx0CisJICogc3RyYXRlZ3kgbWFzay4KKwkgKgorCSAqIEl0IG1heSBz ZWVtIHN1cnByaXNpbmcgdGhhdCBlbmFibGVfaW5kZXhzY2FuIHNldHMgYm90aCBQR1NfSU5ERVhT Q0FOCisJICogYW5kIFBHU19JTkRFWE9OTFlTQ0FOLiBIb3dldmVyLCB0aGUgaGlzdG9yaWNhbCBi ZWhhdmlvciBvZiB0aGlzIEdVQworCSAqIGNvcnJlc3BvbmRzIHRvIHRoaXMgZXhhY3RseTogZW5h YmxlX2luZGV4c2Nhbj1vZmYgZGlzYWJsZXMgYm90aAorCSAqIGluZGV4LXNjYW4gYW5kIGluZGV4 LW9ubHkgc2NhbiBwYXRocywgd2hlcmVhcyBlbmFibGVfaW5kZXhvbmx5c2Nhbj1vZmYKKwkgKiBj b252ZXJ0cyB0aGUgaW5kZXgtb25seSBzY2FuIHBhdGhzIHRoYXQgd2Ugd291bGQgaGF2ZSBjb25z aWRlcmVkIGludG8KKwkgKiBpbmRleCBzY2FuIHBhdGhzLgorCSAqLworCWdsb2ItPmRlZmF1bHRf cGdzX21hc2sgPSBQR1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORCB8IFBHU19GT1JFSUdOSk9J TiB8CisJCVBHU19HQVRIRVIgfCBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwlpZiAoZW5hYmxl X3RpZHNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX1RJRFNDQU47CisJaWYg KGVuYWJsZV9zZXFzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19TRVFTQ0FO OworCWlmIChlbmFibGVfaW5kZXhzY2FuKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBH U19JTkRFWFNDQU4gfCBQR1NfSU5ERVhPTkxZU0NBTjsKKwlpZiAoZW5hYmxlX2luZGV4b25seXNj YW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0NPTlNJREVSX0lOREVYT05MWTsK KwlpZiAoZW5hYmxlX2JpdG1hcHNjYW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdT X0JJVE1BUFNDQU47CisJaWYgKGVuYWJsZV9tZXJnZWpvaW4pCisJeworCQlnbG9iLT5kZWZhdWx0 X3Bnc19tYXNrIHw9IFBHU19NRVJHRUpPSU5fUExBSU47CisJCWlmIChlbmFibGVfbWF0ZXJpYWwp CisJCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkU7 CisJfQorCWlmIChlbmFibGVfbmVzdGxvb3ApCisJeworCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNr IHw9IFBHU19ORVNUTE9PUF9QTEFJTjsKKwkJaWYgKGVuYWJsZV9tYXRlcmlhbCkKKwkJCWdsb2It PmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX05FU1RMT09QX01BVEVSSUFMSVpFOworCQlpZiAoZW5h YmxlX21lbW9pemUpCisJCQlnbG9iLT5kZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19ORVNUTE9PUF9N RU1PSVpFOworCX0KKwlpZiAoZW5hYmxlX2hhc2hqb2luKQorCQlnbG9iLT5kZWZhdWx0X3Bnc19t YXNrIHw9IFBHU19IQVNISk9JTjsKKwlpZiAoZW5hYmxlX2dhdGhlcm1lcmdlKQorCQlnbG9iLT5k ZWZhdWx0X3Bnc19tYXNrIHw9IFBHU19HQVRIRVJfTUVSR0U7CisJaWYgKGVuYWJsZV9wYXJ0aXRp b253aXNlX2pvaW4pCisJCWdsb2ItPmRlZmF1bHRfcGdzX21hc2sgfD0gUEdTX0NPTlNJREVSX1BB UlRJVElPTldJU0U7CisKIAkvKiBBbGxvdyBwbHVnaW5zIHRvIHRha2UgY29udHJvbCBhZnRlciB3 ZSd2ZSBpbml0aWFsaXplZCAiZ2xvYiIgKi8KIAlpZiAocGxhbm5lcl9zZXR1cF9ob29rKQogCQko KnBsYW5uZXJfc2V0dXBfaG9vaykgKGdsb2IsIHBhcnNlLCBxdWVyeV9zdHJpbmcsICZ0dXBsZV9m cmFjdGlvbiwgZXMpOwpAQCAtMzk1Myw2ICs0MDAwLDkgQEAgbWFrZV9ncm91cGluZ19yZWwoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJaXNfcGFyYWxsZWxfc2Fm ZShyb290LCBoYXZpbmdRdWFsKSkKIAkJZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0g dHJ1ZTsKIAorCS8qIEFzc3VtZSB0aGF0IHRoZSBzYW1lIHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVn aWVzIGFyZSBhbGxvd2VkICovCisJZ3JvdXBlZF9yZWwtPnBnc19tYXNrID0gaW5wdXRfcmVsLT5w Z3NfbWFzazsKKwogCS8qCiAJICogSWYgdGhlIGlucHV0IHJlbCBiZWxvbmdzIHRvIGEgc2luZ2xl IEZEVywgc28gZG9lcyB0aGUgZ3JvdXBlZCByZWwuCiAJICovCkBAIC01MzQ2LDYgKzUzOTYsOSBA QCBjcmVhdGVfb3JkZXJlZF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAlpZiAoaW5wdXRfcmVs LT5jb25zaWRlcl9wYXJhbGxlbCAmJiB0YXJnZXRfcGFyYWxsZWxfc2FmZSkKIAkJb3JkZXJlZF9y ZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0gdHJ1ZTsKIAorCS8qIEFzc3VtZSB0aGF0IHRoZSBzYW1l IHBhdGggZ2VuZXJhdGlvbiBzdHJhdGVnaWVzIGFyZSBhbGxvd2VkLiAqLworCW9yZGVyZWRfcmVs LT5wZ3NfbWFzayA9IGlucHV0X3JlbC0+cGdzX21hc2s7CisKIAkvKgogCSAqIElmIHRoZSBpbnB1 dCByZWwgYmVsb25ncyB0byBhIHNpbmdsZSBGRFcsIHNvIGRvZXMgdGhlIG9yZGVyZWRfcmVsLgog CSAqLwpAQCAtNzQyNiw2ICs3NDc5LDcgQEAgY3JlYXRlX3BhcnRpYWxfZ3JvdXBpbmdfcGF0aHMo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCWdyb3VwZWRfcmVsLT5yZWxpZHMpOwogCXBh cnRpYWxseV9ncm91cGVkX3JlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPQogCQlncm91cGVkX3JlbC0+ Y29uc2lkZXJfcGFyYWxsZWw7CisJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wZ3NfbWFzayA9IGdy b3VwZWRfcmVsLT5wZ3NfbWFzazsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnJlbG9wdGtpbmQg PSBncm91cGVkX3JlbC0+cmVsb3B0a2luZDsKIAlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnNlcnZl cmlkID0gZ3JvdXBlZF9yZWwtPnNlcnZlcmlkOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+dXNl cmlkID0gZ3JvdXBlZF9yZWwtPnVzZXJpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BhdGhub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9k ZS5jCmluZGV4IDBmMTI0MjFiYWMwLi43Mjk1NDM4YWQyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9wYXRobm9kZS5jCkBAIC0xNjUzLDcgKzE2NTMsNyBAQCBjcmVhdGVfZ3JvdXBfcmVzdWx0 X3BhdGgoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKICAqCSAgcGF0aG5vZGUu CiAgKi8KIE1hdGVyaWFsUGF0aCAqCi1jcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpy ZWwsIFBhdGggKnN1YnBhdGgpCitjcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpyZWws IFBhdGggKnN1YnBhdGgsIGJvb2wgZW5hYmxlZCkKIHsKIAlNYXRlcmlhbFBhdGggKnBhdGhub2Rl ID0gbWFrZU5vZGUoTWF0ZXJpYWxQYXRoKTsKIApAQCAtMTY3Miw2ICsxNjcyLDcgQEAgY3JlYXRl X21hdGVyaWFsX3BhdGgoUmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoKQogCXBhdGhub2Rl LT5zdWJwYXRoID0gc3VicGF0aDsKIAogCWNvc3RfbWF0ZXJpYWwoJnBhdGhub2RlLT5wYXRoLAor CQkJCSAgZW5hYmxlZCwKIAkJCQkgIHN1YnBhdGgtPmRpc2FibGVkX25vZGVzLAogCQkJCSAgc3Vi cGF0aC0+c3RhcnR1cF9jb3N0LAogCQkJCSAgc3VicGF0aC0+dG90YWxfY29zdCwKQEAgLTE3MjQs OCArMTcyNSwxNSBAQCBjcmVhdGVfbWVtb2l6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwsIFBhdGggKnN1YnBhdGgsCiAJcGF0aG5vZGUtPmVzdF91bmlxdWVfa2V5cyA9 IDAuMDsKIAlwYXRobm9kZS0+ZXN0X2hpdF9yYXRpbyA9IDAuMDsKIAotCS8qIHdlIHNob3VsZCBu b3QgZ2VuZXJhdGUgdGhpcyBwYXRoIHR5cGUgd2hlbiBlbmFibGVfbWVtb2l6ZT1mYWxzZSAqLwot CUFzc2VydChlbmFibGVfbWVtb2l6ZSk7CisJLyoKKwkgKiBXZSBzaG91bGQgbm90IGJlIGFza2Vk IHRvIGdlbmVyYXRlIHRoaXMgcGF0aCB0eXBlIHdoZW4gbWVtb2l6YXRpb24gaXMKKwkgKiBkaXNh YmxlZCwgc28gc2V0IG91ciBjb3VudCBvZiBkaXNhYmxlZCBub2RlcyBlcXVhbCB0byB0aGUgc3Vi cGF0aCdzCisJICogY291bnQuCisJICoKKwkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGFsc28gQXNz ZXJ0IHRoYXQgbWVtb2l6YXRpb24gaXMgZW5hYmxlZCwgYnV0IHRoZQorCSAqIHZhbHVlIG9mIGVu YWJsZV9tZW1vaXplIGlzIG5vdCBjb250cm9sbGluZzogd2hhdCB3ZSB3b3VsZCBuZWVkIHRvIGNo ZWNrCisJICogaXMgdGhhdCB0aGUgSm9pblBhdGhFeHRyYURhdGEncyBwZ3NfbWFzayBpbmNsdWRl ZCBQR1NfTkVTVExPT1BfTUVNT0laRS4KKwkgKi8KIAlwYXRobm9kZS0+cGF0aC5kaXNhYmxlZF9u b2RlcyA9IHN1YnBhdGgtPmRpc2FibGVkX25vZGVzOwogCiAJLyoKQEAgLTM5NTgsMTMgKzM5NjYs MTYgQEAgcmVwYXJhbWV0ZXJpemVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwK IAkJCXsKIAkJCQlNYXRlcmlhbFBhdGggKm1wYXRoID0gKE1hdGVyaWFsUGF0aCAqKSBwYXRoOwog CQkJCVBhdGgJICAgKnNwYXRoID0gbXBhdGgtPnN1YnBhdGg7CisJCQkJYm9vbAkJZW5hYmxlZDsK IAogCQkJCXNwYXRoID0gcmVwYXJhbWV0ZXJpemVfcGF0aChyb290LCBzcGF0aCwKIAkJCQkJCQkJ CQkJcmVxdWlyZWRfb3V0ZXIsCiAJCQkJCQkJCQkJCWxvb3BfY291bnQpOworCQkJCWVuYWJsZWQg PQorCQkJCQkobXBhdGgtPnBhdGguZGlzYWJsZWRfbm9kZXMgPD0gc3BhdGgtPmRpc2FibGVkX25v ZGVzKTsKIAkJCQlpZiAoc3BhdGggPT0gTlVMTCkKIAkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJcmV0 dXJuIChQYXRoICopIGNyZWF0ZV9tYXRlcmlhbF9wYXRoKHJlbCwgc3BhdGgpOworCQkJCXJldHVy biAoUGF0aCAqKSBjcmVhdGVfbWF0ZXJpYWxfcGF0aChyZWwsIHNwYXRoLCBlbmFibGVkKTsKIAkJ CX0KIAkJY2FzZSBUX01lbW9pemU6CiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0 LmMKaW5kZXggYTkwZTFjOWVlNmIuLjFiMjBiYzgwNWU2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGxhbmNhdC5jCkBAIC01NzYsNiArNTc2LDkgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5l ckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkgKiBB bGxvdyBhIHBsdWdpbiB0byBlZGl0b3JpYWxpemUgb24gdGhlIGluZm8gd2Ugb2J0YWluZWQgZnJv bSB0aGUKIAkgKiBjYXRhbG9ncy4gIEFjdGlvbnMgbWlnaHQgaW5jbHVkZSBhbHRlcmluZyB0aGUg YXNzdW1lZCByZWxhdGlvbiBzaXplLAogCSAqIHJlbW92aW5nIGFuIGluZGV4LCBvciBhZGRpbmcg YSBoeXBvdGhldGljYWwgaW5kZXggdG8gdGhlIGluZGV4bGlzdC4KKwkgKgorCSAqIEFuIGV4dGVu c2lvbiBjYW4gYWxzbyBtb2RpZnkgcmVsLT5wZ3NfbWFzayBoZXJlIHRvIGNvbnRyb2wgcGF0aAor CSAqIGdlbmVyYXRpb24uCiAJICovCiAJaWYgKGdldF9yZWxhdGlvbl9pbmZvX2hvb2spCiAJCSgq Z2V0X3JlbGF0aW9uX2luZm9faG9vaykgKHJvb3QsIHJlbGF0aW9uT2JqZWN0SWQsIGluaHBhcmVu dCwgcmVsKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCBmNTc2MzFlODc2 Zi4uYTcxNGM4M2YxYmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Jl bG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTQ3 LDYgKzQ3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSm9pbkhhc2hFbnRyeQogCVJlbE9wdEluZm8gKmpv aW5fcmVsOwogfSBKb2luSGFzaEVudHJ5OwogCisvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBj b250cm9sIGR1cmluZyBqb2lucmVsIHNldHVwICovCitqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBq b2lucmVsX3NldHVwX2hvb2sgPSBOVUxMOworCiBzdGF0aWMgdm9pZCBidWlsZF9qb2lucmVsX3Rs aXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAogCQkJCQkJCQlSZWxP cHRJbmZvICppbnB1dF9yZWwsCiAJCQkJCQkJCVNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLApAQCAt MjI1LDYgKzIyOCw3IEBAIGJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCBy ZWxpZCwgUmVsT3B0SW5mbyAqcGFyZW50KQogCXJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290 LT50dXBsZV9mcmFjdGlvbiA+IDApOwogCXJlbC0+Y29uc2lkZXJfcGFyYW1fc3RhcnR1cCA9IGZh bHNlOwkvKiBtaWdodCBnZXQgY2hhbmdlZCBsYXRlciAqLwogCXJlbC0+Y29uc2lkZXJfcGFyYWxs ZWwgPSBmYWxzZTsgLyogbWlnaHQgZ2V0IGNoYW5nZWQgbGF0ZXIgKi8KKwlyZWwtPnBnc19tYXNr ID0gcm9vdC0+Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzazsKIAlyZWwtPnJlbHRhcmdldCA9IGNyZWF0 ZV9lbXB0eV9wYXRodGFyZ2V0KCk7CiAJcmVsLT5wYXRobGlzdCA9IE5JTDsKIAlyZWwtPnBwaWxp c3QgPSBOSUw7CkBAIC04MjIsNiArODI2LDcgQEAgYnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8g KnJvb3QsCiAJam9pbnJlbC0+Y29uc2lkZXJfc3RhcnR1cCA9IChyb290LT50dXBsZV9mcmFjdGlv biA+IDApOwogCWpvaW5yZWwtPmNvbnNpZGVyX3BhcmFtX3N0YXJ0dXAgPSBmYWxzZTsKIAlqb2lu cmVsLT5jb25zaWRlcl9wYXJhbGxlbCA9IGZhbHNlOworCWpvaW5yZWwtPnBnc19tYXNrID0gcm9v dC0+Z2xvYi0+ZGVmYXVsdF9wZ3NfbWFzazsKIAlqb2lucmVsLT5yZWx0YXJnZXQgPSBjcmVhdGVf ZW1wdHlfcGF0aHRhcmdldCgpOwogCWpvaW5yZWwtPnBhdGhsaXN0ID0gTklMOwogCWpvaW5yZWwt PnBwaWxpc3QgPSBOSUw7CkBAIC05MzQsMTAgKzkzOSw2IEBAIGJ1aWxkX2pvaW5fcmVsKFBsYW5u ZXJJbmZvICpyb290LAogCSAqLwogCWpvaW5yZWwtPmhhc19lY2xhc3Nfam9pbnMgPSBoYXNfcmVs ZXZhbnRfZWNsYXNzX2pvaW5jbGF1c2Uocm9vdCwgam9pbnJlbCk7CiAKLQkvKiBTdG9yZSB0aGUg cGFydGl0aW9uIGluZm9ybWF0aW9uLiAqLwotCWJ1aWxkX2pvaW5yZWxfcGFydGl0aW9uX2luZm8o cm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVsLCBpbm5lcl9yZWwsIHNqaW5mbywKLQkJCQkJCQkJIHJl c3RyaWN0bGlzdCk7Ci0KIAkvKgogCSAqIFNldCBlc3RpbWF0ZXMgb2YgdGhlIGpvaW5yZWwncyBz aXplLgogCSAqLwpAQCAtOTYzLDYgKzk2NCwxOSBAQCBidWlsZF9qb2luX3JlbChQbGFubmVySW5m byAqcm9vdCwKIAkJaXNfcGFyYWxsZWxfc2FmZShyb290LCAoTm9kZSAqKSBqb2lucmVsLT5yZWx0 YXJnZXQtPmV4cHJzKSkKIAkJam9pbnJlbC0+Y29uc2lkZXJfcGFyYWxsZWwgPSB0cnVlOwogCisJ LyoKKwkgKiBBbGxvdyBhIHBsdWdpbiB0byBlZGl0b3JpYWxpemUgb24gdGhlIG5ldyBqb2lucmVs J3MgcHJvcGVydGllcy4gQWN0aW9ucworCSAqIG1pZ2h0IGluY2x1ZGUgYWx0ZXJpbmcgdGhlIHNp emUgZXN0aW1hdGUsIGNsZWFyaW5nIGNvbnNpZGVyX3BhcmFsbGVsLAorCSAqIG9yIGFkanVzdGlu ZyBwZ3NfbWFzay4KKwkgKi8KKwlpZiAoam9pbnJlbF9zZXR1cF9ob29rKQorCQkoKmpvaW5yZWxf c2V0dXBfaG9vaykgKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVsLCBzamluZm8s CisJCQkJCQkJICAgcmVzdHJpY3RsaXN0KTsKKworCS8qIFN0b3JlIHRoZSBwYXJ0aXRpb24gaW5m b3JtYXRpb24uICovCisJYnVpbGRfam9pbnJlbF9wYXJ0aXRpb25faW5mbyhyb290LCBqb2lucmVs LCBvdXRlcl9yZWwsIGlubmVyX3JlbCwgc2ppbmZvLAorCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsK KwogCS8qIEFkZCB0aGUgam9pbnJlbCB0byB0aGUgUGxhbm5lckluZm8uICovCiAJYWRkX2pvaW5f cmVsKHJvb3QsIGpvaW5yZWwpOwogCkBAIC0xMDE5LDYgKzEwMzMsNyBAQCBidWlsZF9jaGlsZF9q b2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCWpvaW5y ZWwtPmNvbnNpZGVyX3N0YXJ0dXAgPSAocm9vdC0+dHVwbGVfZnJhY3Rpb24gPiAwKTsKIAlqb2lu cmVsLT5jb25zaWRlcl9wYXJhbV9zdGFydHVwID0gZmFsc2U7CiAJam9pbnJlbC0+Y29uc2lkZXJf cGFyYWxsZWwgPSBmYWxzZTsKKwlqb2lucmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1 bHRfcGdzX21hc2s7CiAJam9pbnJlbC0+cmVsdGFyZ2V0ID0gY3JlYXRlX2VtcHR5X3BhdGh0YXJn ZXQoKTsKIAlqb2lucmVsLT5wYXRobGlzdCA9IE5JTDsKIAlqb2lucmVsLT5wcGlsaXN0ID0gTklM OwpAQCAtMTEwMiwxMCArMTExNyw2IEBAIGJ1aWxkX2NoaWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCiAJICovCiAJam9pbnJlbC0+aGFzX2VjbGFz c19qb2lucyA9IHBhcmVudF9qb2lucmVsLT5oYXNfZWNsYXNzX2pvaW5zOwogCi0JLyogSXMgdGhl IGpvaW4gYmV0d2VlbiBwYXJ0aXRpb25zIGl0c2VsZiBwYXJ0aXRpb25lZD8gKi8KLQlidWlsZF9q b2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJfcmVs LCBzamluZm8sCi0JCQkJCQkJCSByZXN0cmljdGxpc3QpOwotCiAJLyogQ2hpbGQgam9pbnJlbCBp cyBwYXJhbGxlbCBzYWZlIGlmIHBhcmVudCBpcyBwYXJhbGxlbCBzYWZlLiAqLwogCWpvaW5yZWwt PmNvbnNpZGVyX3BhcmFsbGVsID0gcGFyZW50X2pvaW5yZWwtPmNvbnNpZGVyX3BhcmFsbGVsOwog CkBAIC0xMTEzLDYgKzExMjQsMjAgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAlzZXRfam9pbnJlbF9zaXplX2VzdGltYXRl cyhyb290LCBqb2lucmVsLCBvdXRlcl9yZWwsIGlubmVyX3JlbCwKIAkJCQkJCQkgICBzamluZm8s IHJlc3RyaWN0bGlzdCk7CiAKKwkvKgorCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6 ZSBvbiB0aGUgbmV3IGpvaW5yZWwncyBwcm9wZXJ0aWVzLiBBY3Rpb25zCisJICogbWlnaHQgaW5j bHVkZSBhbHRlcmluZyB0aGUgc2l6ZSBlc3RpbWF0ZSwgY2xlYXJpbmcgY29uc2lkZXJfcGFyYWxs ZWwsCisJICogb3IgYWRqdXN0aW5nIHBnc19tYXNrLiAoSG93ZXZlciwgbm90ZSB0aGF0IGNsZWFy aW5nIGNvbnNpZGVyX3BhcmFsbGVsCisJICogd291bGQgYmUgYmV0dGVyIGRvbmUgaW4gdGhlIHBh cmVudCBqb2lucmVsIHJhdGhlciB0aGFuIGhlcmUuKQorCSAqLworCWlmIChqb2lucmVsX3NldHVw X2hvb2spCisJCSgqam9pbnJlbF9zZXR1cF9ob29rKSAocm9vdCwgam9pbnJlbCwgb3V0ZXJfcmVs LCBpbm5lcl9yZWwsIHNqaW5mbywKKwkJCQkJCQkgICByZXN0cmljdGxpc3QpOworCisJLyogSXMg dGhlIGpvaW4gYmV0d2VlbiBwYXJ0aXRpb25zIGl0c2VsZiBwYXJ0aXRpb25lZD8gKi8KKwlidWls ZF9qb2lucmVsX3BhcnRpdGlvbl9pbmZvKHJvb3QsIGpvaW5yZWwsIG91dGVyX3JlbCwgaW5uZXJf cmVsLCBzamluZm8sCisJCQkJCQkJCSByZXN0cmljdGxpc3QpOworCiAJLyogV2UgYnVpbGQgdGhl IGpvaW4gb25seSBvbmNlLiAqLwogCUFzc2VydCghZmluZF9qb2luX3JlbChyb290LCBqb2lucmVs LT5yZWxpZHMpKTsKIApAQCAtMTYwMiw2ICsxNjI3LDcgQEAgZmV0Y2hfdXBwZXJfcmVsKFBsYW5u ZXJJbmZvICpyb290LCBVcHBlclJlbGF0aW9uS2luZCBraW5kLCBSZWxpZHMgcmVsaWRzKQogCXVw cGVycmVsID0gbWFrZU5vZGUoUmVsT3B0SW5mbyk7CiAJdXBwZXJyZWwtPnJlbG9wdGtpbmQgPSBS RUxPUFRfVVBQRVJfUkVMOwogCXVwcGVycmVsLT5yZWxpZHMgPSBibXNfY29weShyZWxpZHMpOwor CXVwcGVycmVsLT5wZ3NfbWFzayA9IHJvb3QtPmdsb2ItPmRlZmF1bHRfcGdzX21hc2s7CiAKIAkv KiBjaGVhcCBzdGFydHVwIGNvc3QgaXMgaW50ZXJlc3RpbmcgaWZmIG5vdCBhbGwgdHVwbGVzIHRv IGJlIHJldHJpZXZlZCAqLwogCXVwcGVycmVsLT5jb25zaWRlcl9zdGFydHVwID0gKHJvb3QtPnR1 cGxlX2ZyYWN0aW9uID4gMCk7CkBAIC0yMTE4LDcgKzIxNDQsNyBAQCBidWlsZF9qb2lucmVsX3Bh cnRpdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LAogCVBhcnRpdGlvblNjaGVtZSBwYXJ0X3Nj aGVtZTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgcGFydGl0aW9ud2lzZSBqb2luIHRlY2huaXF1 ZSBpcyBkaXNhYmxlZC4gKi8KLQlpZiAoIWVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4pCisJaWYg KChqb2lucmVsLT5wZ3NfbWFzayAmIFBHU19DT05TSURFUl9QQVJUSVRJT05XSVNFKSA9PSAwKQog CXsKIAkJQXNzZXJ0KCFJU19QQVJUSVRJT05FRF9SRUwoam9pbnJlbCkpOwogCQlyZXR1cm47CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCmluZGV4IDQ0OTg4NWI5MzE5Li5mYjgwODgyM2FjZiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMv cGF0aG5vZGVzLmgKQEAgLTIyLDYgKzIyLDc5IEBACiAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rl cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYmxvY2suaCIKIAorLyoKKyAqIFBhdGggZ2VuZXJhdGlv biBzdHJhdGVnaWVzLgorICoKKyAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCB0byBzcGVjaWZ5 IHRoZSBzZXQgb2Ygc3RyYXRlZ2llcyB0aGF0IHRoZSBwbGFubmVyCisgKiBzaG91bGQgdXNlLCBl aXRoZXIgZm9yIHRoZSBxdWVyeSBhcyBhIHdob2xlIG9yIGZvciBhIHNwZWNpZmljIGJhc2VyZWwg b3IKKyAqIGpvaW5yZWwuIFRoZSB2YXJpb3VzIHBsYW5uZXItcmVsYXRlZCBlbmFibGVfKiBHVUNz IGFyZSB1c2VkIHRvIHNldCB0aGUKKyAqIFBsYW5uZXJHbG9iYWwncyBkZWZhdWx0X3Bnc19tYXNr LCBhbmQgdGhhdCBpbiB0dXJuIGlzIHVzZWQgdG8gc2V0IGVhY2gKKyAqIFJlbE9wdEluZm8ncyBw Z3NfbWFzay4gSW4gYm90aCBjYXNlcywgZXh0ZW5zaW9ucyBjYW4gdXNlIGhvb2tzIHRvIG1vZGlm eSB0aGUKKyAqIGRlZmF1bHQgdmFsdWUuICBOb3QgZXZlcnkgc3RyYXRlZ3kgbGlzdGVkIGhlcmUg aGFzIGEgY29ycmVzcG9uZGluZyBlbmFibGVfKgorICogR1VDOyB0aG9zZSB0aGF0IGRvbid0IGFy ZSBhbHdheXMgYWxsb3dlZCB1bmxlc3MgZGlzYWJsZWQgYnkgYW4gZXh0ZW5zaW9uLgorICogTm90 IGFsbCBzdHJhdGVnaWVzIGFyZSByZWxldmFudCBmb3IgZXZlcnkgUmVsT3B0SW5mbzsgZS5nLiBQ R1NfU0VRU0NBTgorICogZG9lc24ndCBhZmZlY3Qgam9pbnJlbHMgb25lIHdheSBvciB0aGUgb3Ro ZXIuCisgKgorICogSW4gbW9zdCBjYXNlcywgZGlzYWJsaW5nIGEgcGF0aCBnZW5lcmF0aW9uIHN0 cmF0ZWd5IG1lcmVseSBtZWFucyB0aGF0IGFueQorICogcGF0aHMgZ2VuZXJhdGVkIHVzaW5nIHRo YXQgc3RyYXRlZ3kgYXJlIG1hcmtlZCBhcyBkaXNhYmxlZCwgYnV0IGluIHNvbWUKKyAqIGNhc2Vz LCBwYXRoIGdlbmVyYXRpb24gaXMgc2tpcHBlZCBhbHRvZ2V0aGVyLiBUaGUgbGF0dGVyIHN0cmF0 ZWd5IGlzIG9ubHkKKyAqIHBlcm1pc3NpYmxlIHdoZW4gaXQgY2FuJ3QgcmVzdWx0IGluIHBsYW5u ZXIgZmFpbHVyZSAtLSBmb3IgaW5zdGFuY2UsIHdlCisgKiBjb3VsZG4ndCBkbyB0aGlzIGZvciBz ZXF1ZW50aWFsIHNjYW5zIG9uIGEgcGxhaW4gcmVsLCBiZWNhdXNlIHRoZXJlIG1pZ2h0CisgKiBu b3QgYmUgYW55IG90aGVyIHBvc3NpYmxlIHBhdGguIE5ldmVydGhlbGVzcywgdGhlIGJlaGF2aW9y cyBpbiBlYWNoCisgKiBpbmRpdmlkdWFsIGNhc2UgYXJlIHRvIHNvbWUgZXh0ZW50IHRoZSByZXN1 bHQgb2YgaGlzdG9yaWNhbCBhY2NpZGVudCwKKyAqIGNob3NlbiB0byBtYXRjaCB0aGUgcHJlZXhp c3RpbmcgYmVoYXZpb3JzIG9mIHRoZSBlbmFibGVfKiBHVUNzLgorICoKKyAqIEluIGEgZmV3IGNh c2VzLCB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgYml0IGZvciB0aGUgc2FtZSBzdHJhdGVneSwgY29u dHJvbGxpbmcKKyAqIGRpZmZlcmVudCBhc3BlY3RzIG9mIHRoZSBwbGFubmVyIGJlaGF2aW9yLiBX aGVuIFBHU19DT05TSURFUl9JTkRFWE9OTFkgaXMKKyAqIHVuc2V0LCB3ZSBkb24ndCBldmVuIGNv bnNpZGVyIGluZGV4LW9ubHkgc2NhbnMsIGFuZCBhbnkgc3VjaCBzY2FucyB0aGF0CisgKiB3b3Vs ZCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGJlY29tZSBpbmRleCBzY2FucyBpbnN0ZWFkLiBPbiB0aGUg b3RoZXIgaGFuZCwKKyAqIHVuc2V0dGluZyBQR1NfSU5ERVhTQ0FOIG9yIFBHU19JTkRFWE9OTFlT Q0FOIGNhdXNlcyBnZW5lcmF0ZWQgcGF0aHMgb2YgdGhlCisgKiBjb3JyZXNwb25kaW5nIHR5cGVz IHRvIGJlIG1hcmtlZCBhcyBkaXNhYmxlZC4gU2ltaWxhcmx5LCB1bnNldHRpbmcKKyAqIFBHU19D T05TSURFUl9QQVJUSVRJT05XSVNFIHByZXZlbnRzIGFueSBzb3J0IG9mIHRoaW5raW5nIGFib3V0 IHBhcnRpdGlvbndpc2UKKyAqIGpvaW5zIGZvciB0aGUgY3VycmVudCByZWwsIHdoaWNoIGluY2lk ZW50YWxseSB3aWxsIHByZWNsdWRlIGhpZ2hlci1sZXZlbAorICogam9pbnJlbHMgZnJvbSBidWls ZGluZyBwYXJ0aXRpb253aXNlIHBhdGhzIHVzaW5nIHBhdGhzIHRha2VuIGZyb20gdGhlCisgKiBj dXJyZW50IHJlbCdzIGNoaWxkcmVuLiBPbiB0aGUgb3RoZXIgaGFuZCwgdW5zZXR0aW5nIFBHU19B UFBFTkQgb3IKKyAqIFBHU19NRVJHRV9BUFBFTkQgd2lsbCBvbmx5IGFycmFuZ2UgdG8gZGlzYWJs ZSBwYXRocyBvZiB0aGUgY29ycmVzcG9uZGluZworICogdHlwZXMgaWYgdGhleSBhcmUgZ2VuZXJh dGVkIGF0IHRoZSBsZXZlbCBvZiB0aGUgY3VycmVudCByZWwuCisgKgorICogRmluYWxseSwgdW5z ZXR0aW5nIFBHU19DT05TSURFUl9OT05QQVJUSUFMIGRpc2FibGVzIGFsbCBub24tcGFydGlhbCBw YXRocworICogZXhjZXB0IHRob3NlIHRoYXQgdXNlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2UuIElu IG1vc3Qgb3RoZXIgY2FzZXMsIGEKKyAqIHBsdWdpbiBjYW4gbnVkZ2UgdGhlIHBsYW5uZXIgdG93 YXJkIGEgcGFydGljdWxhciBzdHJhdGVneSBieSBkaXNhYmxpbmcKKyAqIGFsbCBvZiB0aGUgb3Ro ZXJzLCBidXQgdGhhdCBkb2Vzbid0IHdvcmsgaGVyZTogdW5zZXR0aW5nIFBHU19TRVFTQ0FOLAor ICogZm9yIGluc3RhbmNlLCB3b3VsZCBkaXNhYmxlIGJvdGggcGFydGlhbCBhbmQgbm9uLXBhcnRp YWwgc2VxdWVudGlhbCBzY2Fucy4KKyAqLworI2RlZmluZSBQR1NfU0VRU0NBTgkJCQkJMHgwMDAw MDAwMQorI2RlZmluZSBQR1NfSU5ERVhTQ0FOCQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUEdTX0lO REVYT05MWVNDQU4JCQkweDAwMDAwMDA0CisjZGVmaW5lIFBHU19CSVRNQVBTQ0FOCQkJCTB4MDAw MDAwMDgKKyNkZWZpbmUgUEdTX1RJRFNDQU4JCQkJCTB4MDAwMDAwMTAKKyNkZWZpbmUgUEdTX0ZP UkVJR05KT0lOCQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgUEdTX01FUkdFSk9JTl9QTEFJTgkJCTB4 MDAwMDAwNDAKKyNkZWZpbmUgUEdTX01FUkdFSk9JTl9NQVRFUklBTElaRQkweDAwMDAwMDgwCisj ZGVmaW5lIFBHU19ORVNUTE9PUF9QTEFJTgkJCTB4MDAwMDAxMDAKKyNkZWZpbmUgUEdTX05FU1RM T09QX01BVEVSSUFMSVpFCTB4MDAwMDAyMDAKKyNkZWZpbmUgUEdTX05FU1RMT09QX01FTU9JWkUJ CTB4MDAwMDA0MDAKKyNkZWZpbmUgUEdTX0hBU0hKT0lOCQkJCTB4MDAwMDA4MDAKKyNkZWZpbmUg UEdTX0FQUEVORAkJCQkJMHgwMDAwMTAwMAorI2RlZmluZSBQR1NfTUVSR0VfQVBQRU5ECQkJMHgw MDAwMjAwMAorI2RlZmluZSBQR1NfR0FUSEVSCQkJCQkweDAwMDA0MDAwCisjZGVmaW5lIFBHU19H QVRIRVJfTUVSR0UJCQkweDAwMDA4MDAwCisjZGVmaW5lIFBHU19DT05TSURFUl9JTkRFWE9OTFkJ CTB4MDAwMTAwMDAKKyNkZWZpbmUgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UJMHgwMDAyMDAw MAorI2RlZmluZSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTAkJMHgwMDA0MDAwMAorCisvKgorICog Q29udmVuaWVuY2UgbWFjcm9zIGZvciB1c2VmdWwgY29tYmluYXRpb24gb2YgdGhlIGJpdHMgZGVm aW5lZCBhYm92ZS4KKyAqLworI2RlZmluZSBQR1NfU0NBTl9BTlkJCVwKKwkoUEdTX1NFUVNDQU4g fCBQR1NfSU5ERVhTQ0FOIHwgUEdTX0lOREVYT05MWVNDQU4gfCBQR1NfQklUTUFQU0NBTiB8IFwK KwkgUEdTX1RJRFNDQU4pCisjZGVmaW5lIFBHU19NRVJHRUpPSU5fQU5ZCVwKKwkoUEdTX01FUkdF Sk9JTl9QTEFJTiB8IFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkUpCisjZGVmaW5lIFBHU19ORVNU TE9PUF9BTlkJXAorCShQR1NfTkVTVExPT1BfUExBSU4gfCBQR1NfTkVTVExPT1BfTUFURVJJQUxJ WkUgfCBQR1NfTkVTVExPT1BfTUVNT0laRSkKKyNkZWZpbmUgUEdTX0pPSU5fQU5ZCQlcCisJKFBH U19GT1JFSUdOSk9JTiB8IFBHU19NRVJHRUpPSU5fQU5ZIHwgUEdTX05FU1RMT09QX0FOWSB8IFBH U19IQVNISk9JTikKIAogLyoKICAqIFJlbGlkcwpAQCAtMTgwLDYgKzI1Myw5IEBAIHR5cGVkZWYg c3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB3b3JzdCBQUk9QQVJBTExFTCBoYXphcmQgbGV2ZWwg Ki8KIAljaGFyCQltYXhQYXJhbGxlbEhhemFyZDsKIAorCS8qIG1hc2sgb2YgYWxsb3dlZCBwYXRo IGdlbmVyYXRpb24gc3RyYXRlZ2llcyAqLworCXVpbnQ2NAkJZGVmYXVsdF9wZ3NfbWFzazsKKwog CS8qIHBhcnRpdGlvbiBkZXNjcmlwdG9ycyAqLwogCVBhcnRpdGlvbkRpcmVjdG9yeSBwYXJ0aXRp b25fZGlyZWN0b3J5IHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9yZSk7CiAKQEAgLTkzMyw3 ICsxMDA5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCUNhcmRpbmFsaXR5IHJvd3M7 CiAKIAkvKgotCSAqIHBlci1yZWxhdGlvbiBwbGFubmVyIGNvbnRyb2wgZmxhZ3MKKwkgKiBwZXIt cmVsYXRpb24gcGxhbm5lciBjb250cm9sCiAJICovCiAJLyoga2VlcCBjaGVhcC1zdGFydHVwLWNv c3QgcGF0aHM/ICovCiAJYm9vbAkJY29uc2lkZXJfc3RhcnR1cDsKQEAgLTk0MSw2ICsxMDE3LDgg QEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCWJvb2wJCWNvbnNpZGVyX3BhcmFtX3N0YXJ0 dXA7CiAJLyogY29uc2lkZXIgcGFyYWxsZWwgcGF0aHM/ICovCiAJYm9vbAkJY29uc2lkZXJfcGFy YWxsZWw7CisJLyogcGF0aCBnZW5lcmF0aW9uIHN0cmF0ZWd5IG1hc2sgKi8KKwl1aW50NjQJCXBn c19tYXNrOwogCiAJLyoKIAkgKiBkZWZhdWx0IHJlc3VsdCB0YXJnZXRsaXN0IGZvciBQYXRocyBz Y2FubmluZyB0aGlzIHJlbGF0aW9uOyBsaXN0IG9mCkBAIC0zNDkwLDYgKzM1NjgsNyBAQCB0eXBl ZGVmIHN0cnVjdCBTZW1pQW50aUpvaW5GYWN0b3JzCiAgKiBzamluZm8gaXMgZXh0cmEgaW5mbyBh Ym91dCBzcGVjaWFsIGpvaW5zIGZvciBzZWxlY3Rpdml0eSBlc3RpbWF0aW9uCiAgKiBzZW1pZmFj dG9ycyBpcyBhcyBzaG93biBhYm92ZSAob25seSB2YWxpZCBmb3IgU0VNSS9BTlRJL2lubmVyX3Vu aXF1ZSBqb2lucykKICAqIHBhcmFtX3NvdXJjZV9yZWxzIGFyZSBPSyB0YXJnZXRzIGZvciBwYXJh bWV0ZXJpemF0aW9uIG9mIHJlc3VsdCBwYXRocworICogcGdzX21hc2sgaXMgYSBiaXRtYXNrIG9m IFBHU18qIGNvbnN0YW50cyB0byBsaW1pdCB0aGUgam9pbiBzdHJhdGVneQogICovCiB0eXBlZGVm IHN0cnVjdCBKb2luUGF0aEV4dHJhRGF0YQogewpAQCAtMzQ5OSw2ICszNTc4LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgSm9pblBhdGhFeHRyYURhdGEKIAlTcGVjaWFsSm9pbkluZm8gKnNqaW5mbzsKIAlT ZW1pQW50aUpvaW5GYWN0b3JzIHNlbWlmYWN0b3JzOwogCVJlbGlkcwkJcGFyYW1fc291cmNlX3Jl bHM7CisJdWludDY0CQlwZ3NfbWFzazsKIH0gSm9pblBhdGhFeHRyYURhdGE7CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL2Nvc3QuaAppbmRleCAwN2I4YmZhNjM3Ny4uZjJmZDVkMzE1MDcgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nv c3QuaApAQCAtMTI1LDcgKzEyNSw3IEBAIGV4dGVybiB2b2lkIGNvc3RfbWVyZ2VfYXBwZW5kKFBh dGggKnBhdGgsIFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCSAgQ29zdCBpbnB1dF9zdGFydHVw X2Nvc3QsIENvc3QgaW5wdXRfdG90YWxfY29zdCwKIAkJCQkJCQkgIGRvdWJsZSB0dXBsZXMpOwog ZXh0ZXJuIHZvaWQgY29zdF9tYXRlcmlhbChQYXRoICpwYXRoLAotCQkJCQkJICBpbnQgaW5wdXRf ZGlzYWJsZWRfbm9kZXMsCisJCQkJCQkgIGJvb2wgZW5hYmxlZCwgaW50IGlucHV0X2Rpc2FibGVk X25vZGVzLAogCQkJCQkJICBDb3N0IGlucHV0X3N0YXJ0dXBfY29zdCwgQ29zdCBpbnB1dF90b3Rh bF9jb3N0LAogCQkJCQkJICBkb3VibGUgdHVwbGVzLCBpbnQgd2lkdGgpOwogZXh0ZXJuIHZvaWQg Y29zdF9hZ2coUGF0aCAqcGF0aCwgUGxhbm5lckluZm8gKnJvb3QsCkBAIC0xNDgsNyArMTQ4LDcg QEAgZXh0ZXJuIHZvaWQgY29zdF9ncm91cChQYXRoICpwYXRoLCBQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJICAgZG91YmxlIGlucHV0X3R1cGxlcyk7CiBleHRlcm4gdm9pZCBpbml0aWFsX2Nvc3Rf bmVzdGxvb3AoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgSm9pbkNvc3RXb3Jrc3BhY2Ug KndvcmtzcGFjZSwKLQkJCQkJCQkJICBKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJICBKb2lu VHlwZSBqb2ludHlwZSwgdWludDY0IGVuYWJsZV9tYXNrLAogCQkJCQkJCQkgIFBhdGggKm91dGVy X3BhdGgsIFBhdGggKmlubmVyX3BhdGgsCiAJCQkJCQkJCSAgSm9pblBhdGhFeHRyYURhdGEgKmV4 dHJhKTsKIGV4dGVybiB2b2lkIGZpbmFsX2Nvc3RfbmVzdGxvb3AoUGxhbm5lckluZm8gKnJvb3Qs IE5lc3RQYXRoICpwYXRoLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaAppbmRleCA5YjJjNGIzZTdl Zi4uMjI0NzUwODU5YzMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9k ZS5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC0xOCw2ICsxOCwx NSBAQAogI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgogCiAKKy8qIEhvb2sgZm9yIHBsdWdp bnMgdG8gZ2V0IGNvbnRyb2wgZHVyaW5nIGpvaW5yZWwgc2V0dXAgKi8KK3R5cGVkZWYgdm9pZCAo KmpvaW5yZWxfc2V0dXBfaG9va190eXBlKSAoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJ IFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJCQkJIFJlbE9wdEluZm8gKm91dGVyX3JlbCwK KwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5uZXJfcmVsLAorCQkJCQkJCQkJCSBTcGVjaWFsSm9p bkluZm8gKnNqaW5mbywKKwkJCQkJCQkJCQkgTGlzdCAqcmVzdHJpY3RsaXN0KTsKK2V4dGVybiBQ R0RMTElNUE9SVCBqb2lucmVsX3NldHVwX2hvb2tfdHlwZSBqb2lucmVsX3NldHVwX2hvb2s7CisK IC8qCiAgKiBwcm90b3R5cGVzIGZvciBwYXRobm9kZS5jCiAgKi8KQEAgLTgzLDcgKzkyLDggQEAg ZXh0ZXJuIEdyb3VwUmVzdWx0UGF0aCAqY3JlYXRlX2dyb3VwX3Jlc3VsdF9wYXRoKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkJCQkJIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJCSBQ YXRoVGFyZ2V0ICp0YXJnZXQsCiAJCQkJCQkJCQkJCQkgTGlzdCAqaGF2aW5ncXVhbCk7Ci1leHRl cm4gTWF0ZXJpYWxQYXRoICpjcmVhdGVfbWF0ZXJpYWxfcGF0aChSZWxPcHRJbmZvICpyZWwsIFBh dGggKnN1YnBhdGgpOworZXh0ZXJuIE1hdGVyaWFsUGF0aCAqY3JlYXRlX21hdGVyaWFsX3BhdGgo UmVsT3B0SW5mbyAqcmVsLCBQYXRoICpzdWJwYXRoLAorCQkJCQkJCQkJCSAgYm9vbCBlbmFibGVk KTsKIGV4dGVybiBNZW1vaXplUGF0aCAqY3JlYXRlX21lbW9pemVfcGF0aChQbGFubmVySW5mbyAq cm9vdCwKIAkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJUGF0aCAqc3VicGF0 aCwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oIGIvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3BhdGhzLmgKaW5kZXggNDcxZTQ5YzA1NTguLjg3NTFhZDczODFjIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aHMuaApAQCAtMjgsNyArMjgsMTQgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXplOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBt aW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5h YmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmc7CiAKLS8qIEhvb2sgZm9yIHBsdWdpbnMgdG8gZ2V0IGNv bnRyb2wgaW4gc2V0X3JlbF9wYXRobGlzdCgpICovCisvKiBIb29rcyBmb3IgcGx1Z2lucyB0byBn ZXQgY29udHJvbCBpbiBzZXRfcmVsX3BhdGhsaXN0KCkgKi8KK3R5cGVkZWYgdm9pZCAoKmpvaW5f cGF0aF9zZXR1cF9ob29rX3R5cGUpIChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkgICBS ZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKm91dGVycmVsLAor CQkJCQkJCQkJCSAgIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkJCQkJCSAgIEpvaW5UeXBl IGpvaW50eXBlLAorCQkJCQkJCQkJCSAgIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSk7CitleHRl cm4gUEdETExJTVBPUlQgam9pbl9wYXRoX3NldHVwX2hvb2tfdHlwZSBqb2luX3BhdGhfc2V0dXBf aG9vazsKIHR5cGVkZWYgdm9pZCAoKnNldF9yZWxfcGF0aGxpc3RfaG9va190eXBlKSAoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkJSW5k ZXggcnRpLAotLSAKMi41MS4wCgo= --000000000000748a9706494cb6bc Content-Type: application/octet-stream; name="v12-0002-Store-information-about-range-table-flattening-i.patch" Content-Disposition: attachment; filename="v12-0002-Store-information-about-range-table-flattening-i.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkvd1frf1 RnJvbSBiMjc4YzQ5MmRhMjg4YjcxNDQyZjE1NWJkYWYwZTAyMTg2YTBmYTU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTI6MDA6MTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMiAy LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHJhbmdlLXRhYmxlIGZsYXR0ZW5pbmcgaW4gdGhl CiBmaW5hbCBwbGFuLgoKU3VwcG9zZSB0aGF0IHdlJ3JlIGN1cnJlbnRseSBwbGFubmluZyBhIHF1 ZXJ5IGFuZCwgd2hlbiB0aGF0IHNhbWUKcXVlcnkgd2FzIHByZXZpb3VzbHkgcGxhbm5lZCBhbmQg ZXhlY3V0ZWQsIHdlIGxlYXJuZWQgc29tZXRoaW5nIGFib3V0CmhvdyBhIGNlcnRhaW4gdGFibGUg d2l0aGluIHRoYXQgcXVlcnkgc2hvdWxkIGJlIHBsYW5uZWQuIFdlIHdhbnQgdG8KdGFrZSBub3Rl IHdoZW4gdGhhdCBzYW1lIHRhYmxlIGlzIGJlaW5nIHBsYW5uZWQgZHVyaW5nIHRoZSBjdXJyZW50 CnBsYW5uaW5nIGN5Y2xlLCBidXQgdGhpcyBpcyBkaWZmaWN1bHQgdG8gZG8sIGJlY2F1c2UgdGhl IFJUSSBvZiB0aGUKdGFibGUgZnJvbSB0aGUgcHJldmlvdXMgcGxhbiB3b24ndCBuZWNlc3Nhcmls eSBiZSBlcXVhbCB0byB0aGUgUlRJCnRoYXQgd2Ugc2VlIGR1cmluZyB0aGUgY3VycmVudCBwbGFu bmluZyBjeWNsZS4gVGhpcyBpcyBiZWNhdXNlIGVhY2gKc3VicXVlcnkgaGFzIGEgc2VwYXJhdGUg cmFuZ2UgdGFibGUgZHVyaW5nIHBsYW5uaW5nLCBidXQgdGhlc2UgYXJlCmZsYXR0ZW5lZCBpbnRv IG9uZSByYW5nZSB0YWJsZSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgZmluYWwgcGxhbiwKY2hhbmdp bmcgUlRJcy4KCkNvbW1pdCA4YzQ5YTQ4NGU4ZWJiMDE5OWZiYTRiZDY4ZWFhZWRhZjQ5YjQ4ZWQw IGFsbG93cyB1cyB0byBtYXRjaCB1cApzdWJxdWVyaWVzIHNlZW4gaW4gdGhlIHByZXZpb3VzIHBs YW5uaW5nIGN5Y2xlcyB3aXRoIHRoZSBzdWJxdWVyaWVzCmN1cnJlbnRseSBiZWluZyBwbGFubmVk IGp1c3QgYnkgY29tcGFyaW5nIHRleHR1YWwgbmFtZXMsIGJ1dCB0aGF0J3MKbm90IHF1aXRlIGVu b3VnaCB0byBsZXQgdXMgZGVkdWNlIGFueXRoaW5nIGFib3V0IGluZGl2aWR1YWwgdGFibGVzLApi ZWNhdXNlIHdlIGRvbid0IGtub3cgd2hlcmUgZWFjaCBzdWJxdWVyeSdzIHJhbmdlIHRhYmxlIGFw cGVhcnMgaW4KdGhlIGZpbmFsLCBmbGF0dGVuZWQgcmFuZ2UgdGFibGUuCgpUbyBmaXggdGhhdCwg c3RvcmUgYSBsaXN0IG9mIFN1YlBsYW5SVEluZm8gb2JqZWN0cyBpbiB0aGUgZmluYWwKcGxhbm5l ZCBzdGF0ZW1lbnQsIGVhY2ggaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBzdWJwbGFuLCB0aGUg b2Zmc2V0CmF0IHdoaWNoIGl0IGJlZ2lucyBpbiB0aGUgZmxhdHRlbmVkIHJhbmdlIHRhYmxlLCBh bmQgd2hldGhlciBvciBub3QKaXQgd2FzIGEgZHVtbXkgc3VicGxhbiAtLSBpZiBpdCB3YXMsIHNv bWUgUlRJcyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQKZnJvbSB0aGUgZmluYWwgcmFuZ2UgdGFibGUs IGJ1dCBhbHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBjb250cm9sIGhvdwphIGR1bW15IHN1YnF1ZXJ5 IGdldHMgcGxhbm5lZC4gVGhlIHRvcGxldmVsIHN1YnF1ZXJ5IGhhcyBubyBuYW1lIGFuZAphbHdh eXMgYmVnaW5zIGF0IHJ0b2Zmc2V0IDAsIHNvIHdlIG1ha2Ugbm8gZW50cnkgZm9yIGl0LgoKVGhp cyBjb21taXQgdGVhY2hlcyBwZ19vdmVyZXhwbGFpbidzIFJBTkdFX1RBQkxFIG9wdGlvbiB0byBt YWtlIHVzZQpvZiB0aGlzIG5ldyBkYXRhIHRvIGRpc3BsYXkgdGhlIHN1YnF1ZXJ5IG5hbWUgZm9y IGVhY2ggcmFuZ2UgdGFibGUKZW50cnkuCgpSZXZpZXdlZC1ieTogTHVrYXMgRml0dGwgPGx1a2Fz QGZpdHRsLmNvbT4KUmV2aWV3ZWQtYnk6IEpha3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVy cHJpc2VkYi5jb20+ClJldmlld2VkLWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KUmV2aWV3 ZWQtYnk6IEphY29iIENoYW1waW9uIDxqYWNvYi5jaGFtcGlvbkBlbnRlcnByaXNlZGIuY29tPgpS ZXZpZXdlZC1ieTogQW1pdCBMYW5nb3RlIDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4KUmV2aWV3 ZWQtYnk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRw Oi8vcG9zdGdyLmVzL20vQ0ErVGdtb1otSmgxVDZReVdvQ09ETVZRZGhUVVBZa2Faald6dHpQMUVu ND1aSG9LUHp3QG1haWwuZ21haWwuY29tCi0tLQogY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jICAgIHwgMjAgKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL25vZGVz L3BhdGhub2Rlcy5oICAgICAgICAgICB8ICAzICsrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5v ZGVzLmggICAgICAgICAgIHwgMTcgKysrKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMo KykKCmRpZmYgLS1naXQgYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMg Yi9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMKaW5kZXggMzE2ZmZkMWM4 N2YuLmJmOGM3NjhlZDQ3IDEwMDY0NAotLS0gYS9jb250cmliL3BnX292ZXJleHBsYWluL3BnX292 ZXJleHBsYWluLmMKKysrIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5j CkBAIC0zOTUsNiArMzk1LDggQEAgc3RhdGljIHZvaWQKIG92ZXJleHBsYWluX3JhbmdlX3RhYmxl KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgRXhwbGFpblN0YXRlICplcykKIHsKIAlJbmRleAkJ cnRpOworCUxpc3RDZWxsICAgKmxjX3N1YnJ0aW5mbyA9IGxpc3RfaGVhZChwbGFubmVkc3RtdC0+ c3VicnRpbmZvcyk7CisJU3ViUGxhblJUSW5mbyAqcnRpbmZvID0gTlVMTDsKIAogCS8qIE9wZW4g Z3JvdXAsIG9uZSBlbnRyeSBwZXIgUmFuZ2VUYmxFbnRyeSAqLwogCUV4cGxhaW5PcGVuR3JvdXAo IlJhbmdlIFRhYmxlIiwgIlJhbmdlIFRhYmxlIiwgZmFsc2UsIGVzKTsKQEAgLTQwNSw2ICs0MDcs MTggQEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBF eHBsYWluU3RhdGUgKmVzKQogCQlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHBs YW5uZWRzdG10LT5ydGFibGUpOwogCQljaGFyCSAgICpraW5kID0gTlVMTDsKIAkJY2hhcgkgICAq cmVsa2luZDsKKwkJU3ViUGxhblJUSW5mbyAqbmV4dF9ydGluZm87CisKKwkJLyogQWR2YW5jZSB0 byBuZXh0IFN1YlJUSW5mbywgaWYgaXQncyB0aW1lLiAqLworCQlpZiAobGNfc3VicnRpbmZvICE9 IE5VTEwpCisJCXsKKwkJCW5leHRfcnRpbmZvID0gbGZpcnN0KGxjX3N1YnJ0aW5mbyk7CisJCQlp ZiAocnRpID4gbmV4dF9ydGluZm8tPnJ0b2Zmc2V0KQorCQkJeworCQkJCXJ0aW5mbyA9IG5leHRf cnRpbmZvOworCQkJCWxjX3N1YnJ0aW5mbyA9IGxuZXh0KHBsYW5uZWRzdG10LT5zdWJydGluZm9z LCBsY19zdWJydGluZm8pOworCQkJfQorCQl9CiAKIAkJLyogTlVMTCBlbnRyaWVzIGFyZSBwb3Nz aWJsZTsgc2tpcCB0aGVtICovCiAJCWlmIChydGUgPT0gTlVMTCkKQEAgLTQ2OSw2ICs0ODMsMjgg QEAgb3ZlcmV4cGxhaW5fcmFuZ2VfdGFibGUoUGxhbm5lZFN0bXQgKnBsYW5uZWRzdG10LCBFeHBs YWluU3RhdGUgKmVzKQogCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgiSW4gRnJvbSBDbGF1c2UiLCBy dGUtPmluRnJvbUNsLCBlcyk7CiAJCX0KIAorCQkvKgorCQkgKiBJbmRpY2F0ZSB3aGljaCBzdWJw bGFuIGlzIHRoZSBvcmlnaW4gb2Ygd2hpY2ggUlRFLiBOb3RlIGR1bW15CisJCSAqIHN1YnBsYW5z LiBIZXJlIGFnYWluLCB3ZSBjcnVuY2ggbW9yZSBvbnRvIG9uZSBsaW5lIGluIHRleHQgZm9ybWF0 LgorCQkgKi8KKwkJaWYgKHJ0aW5mbyAhPSBOVUxMKQorCQl7CisJCQlpZiAoZXMtPmZvcm1hdCA9 PSBFWFBMQUlOX0ZPUk1BVF9URVhUKQorCQkJeworCQkJCWlmICghcnRpbmZvLT5kdW1teSkKKwkJ CQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3VicGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7 CisJCQkJZWxzZQorCQkJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJTdWJwbGFuIiwKKwkJCQkJCQkJ CQlwc3ByaW50ZigiJXMgKGR1bW15KSIsCisJCQkJCQkJCQkJCQkgcnRpbmZvLT5wbGFuX25hbWUp LCBlcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRXhwbGFpblByb3BlcnR5VGV4dCgiU3Vi cGxhbiIsIHJ0aW5mby0+cGxhbl9uYW1lLCBlcyk7CisJCQkJRXhwbGFpblByb3BlcnR5Qm9vbCgi U3VicGxhbiBJcyBEdW1teSIsIHJ0aW5mby0+ZHVtbXksIGVzKTsKKwkJCX0KKwkJfQorCiAJCS8q IHJ0ZS0+YWxpYXMgaXMgb3B0aW9uYWw7IHJ0ZS0+ZXJlZiBpcyByZXF1ZXN0ZWQgKi8KIAkJaWYg KHJ0ZS0+YWxpYXMgIT0gTlVMTCkKIAkJCW92ZXJleHBsYWluX2FsaWFzKCJBbGlhcyIsIHJ0ZS0+ YWxpYXMsIGVzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5u ZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCA3NTdiZGM3 YjFkZS4uMjk2ZjA5ZjBkNzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAg LTY1NCw2ICs2NTQsNyBAQCBzdGFuZGFyZF9wbGFubmVyKFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hh ciAqcXVlcnlfc3RyaW5nLCBpbnQgY3Vyc29yT3B0aW9ucywKIAlyZXN1bHQtPnVucHJ1bmFibGVS ZWxpZHMgPSBibXNfZGlmZmVyZW5jZShnbG9iLT5hbGxSZWxpZHMsCiAJCQkJCQkJCQkJCSAgZ2xv Yi0+cHJ1bmFibGVSZWxpZHMpOwogCXJlc3VsdC0+cGVybUluZm9zID0gZ2xvYi0+ZmluYWxydGVw ZXJtaW5mb3M7CisJcmVzdWx0LT5zdWJydGluZm9zID0gZ2xvYi0+c3VicnRpbmZvczsKIAlyZXN1 bHQtPnJlc3VsdFJlbGF0aW9ucyA9IGdsb2ItPnJlc3VsdFJlbGF0aW9uczsKIAlyZXN1bHQtPmFw cGVuZFJlbGF0aW9ucyA9IGdsb2ItPmFwcGVuZFJlbGF0aW9uczsKIAlyZXN1bHQtPnN1YnBsYW5z ID0gZ2xvYi0+c3VicGxhbnM7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKaW5kZXgg MTZkMjAwY2ZiNDYuLmE1YjIzMTRlZjJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVm cy5jCkBAIC0zOTksNiArMzk5LDI2IEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJ bmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmxj OwogCisJLyoKKwkgKiBSZWNvcmQgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgaXQgcG9zc2li bGUgZm9yIGNvZGUgdGhhdCBsb29rcyBhdAorCSAqIHRoZSBmaW5hbCByYW5nZSB0YWJsZSB0byB1 bmRlcnN0YW5kIGhvdyBpdCB3YXMgY29uc3RydWN0ZWQuIChJZgorCSAqIGZpbmFscnRhYmxlIGlz IHN0aWxsIE5JTCwgdGhlbiB0aGlzIGlzIHRoZSB2ZXJ5IHRvcG1vc3QgUGxhbm5lckluZm8sCisJ ICogd2hpY2ggd2lsbCBhbHdheXMgaGF2ZSBwbGFuX25hbWUgPT0gTlVMTCBhbmQgcnRvZmZzZXQg PT0gMDsgd2Ugb21pdCB0aGUKKwkgKiBkZWdlbmVyYXRlIGxpc3QgZW50cnkuKQorCSAqLworCWlm IChyb290LT5nbG9iLT5maW5hbHJ0YWJsZSAhPSBOSUwpCisJeworCQlTdWJQbGFuUlRJbmZvICpy dGluZm8gPSBtYWtlTm9kZShTdWJQbGFuUlRJbmZvKTsKKworCQlydGluZm8tPnBsYW5fbmFtZSA9 IHJvb3QtPnBsYW5fbmFtZTsKKwkJcnRpbmZvLT5ydG9mZnNldCA9IGxpc3RfbGVuZ3RoKHJvb3Qt Pmdsb2ItPmZpbmFscnRhYmxlKTsKKworCQkvKiBXaGVuIHJlY3Vyc2luZyA9IHRydWUsIGl0J3Mg YW4gdW5wbGFubmVkIG9yIGR1bW15IHN1YnF1ZXJ5LiAqLworCQlydGluZm8tPmR1bW15ID0gcmVj dXJzaW5nOworCisJCXJvb3QtPmdsb2ItPnN1YnJ0aW5mb3MgPSBsYXBwZW5kKHJvb3QtPmdsb2It PnN1YnJ0aW5mb3MsIHJ0aW5mbyk7CisJfQorCiAJLyoKIAkgKiBBZGQgdGhlIHF1ZXJ5J3Mgb3du IFJURXMgdG8gdGhlIGZsYXR0ZW5lZCByYW5nZXRhYmxlLgogCSAqCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IGZiODA4ODIzYWNmLi5jMWU5Mzk3NjIzYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTIwOCw2ICsyMDgsOSBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVyR2xvYmFsCiAJLyogImZsYXQi IGxpc3Qgb2YgUlRFUGVybWlzc2lvbkluZm9zICovCiAJTGlzdAkgICAqZmluYWxydGVwZXJtaW5m b3M7CiAKKwkvKiBsaXN0IG9mIFN1YlBsYW5SVEluZm8gbm9kZXMgKi8KKwlMaXN0CSAgICpzdWJy dGluZm9zOworCiAJLyogImZsYXQiIGxpc3Qgb2YgUGxhblJvd01hcmtzICovCiAJTGlzdAkgICAq ZmluYWxyb3dtYXJrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVz LmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAppbmRleCA0YmM2ZmI1NjcwZS4uOWFl NzJhNjA3ZTIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCisrKyBi L3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCkBAIC0xMzEsNiArMTMxLDkgQEAgdHlwZWRl ZiBzdHJ1Y3QgUGxhbm5lZFN0bXQKIAkgKi8KIAlMaXN0CSAgICpzdWJwbGFuczsKIAorCS8qIGEg bGlzdCBvZiBTdWJQbGFuUlRJbmZvIG9iamVjdHMgKi8KKwlMaXN0CSAgICpzdWJydGluZm9zOwor CiAJLyogaW5kaWNlcyBvZiBzdWJwbGFucyB0aGF0IHJlcXVpcmUgUkVXSU5EICovCiAJQml0bWFw c2V0ICAqcmV3aW5kUGxhbklEczsKIApAQCAtMTgyMSw0ICsxODI0LDE4IEBAIHR5cGVkZWYgZW51 bSBNb25vdG9uaWNGdW5jdGlvbgogCU1PTk9UT05JQ0ZVTkNfQk9USCA9IE1PTk9UT05JQ0ZVTkNf SU5DUkVBU0lORyB8IE1PTk9UT05JQ0ZVTkNfREVDUkVBU0lORywKIH0gTW9ub3RvbmljRnVuY3Rp b247CiAKKy8qCisgKiBTdWJQbGFuUlRJbmZvCisgKgorICogSW5mb3JtYXRpb24gYWJvdXQgd2hp Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBjYW1lIGZyb20gd2hpY2ggc3VicXVlcnkKKyAqIHBsYW5u aW5nIGN5Y2xlcy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU3ViUGxhblJUSW5mbworeworCU5vZGVU YWcJCXR5cGU7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUluZGV4CQlydG9mZnNldDsKKwlib29s CQlkdW1teTsKK30gU3ViUGxhblJUSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBMQU5OT0RFU19I ICovCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGRkYmU0YzY0OTcxLi4zMmExNTE0N2M1 NCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTI5MjcsNiArMjkyNyw3IEBAIFN1Ykxp bmsKIFN1YkxpbmtUeXBlCiBTdWJPcHRzCiBTdWJQbGFuCitTdWJQbGFuUlRJbmZvCiBTdWJQbGFu U3RhdGUKIFN1YlJlbEluZm8KIFN1YlJlbW92ZVJlbHMKLS0gCjIuNTEuMAoK --000000000000748a9706494cb6bc Content-Type: application/octet-stream; name="v12-0003-Store-information-about-elided-nodes-in-the-fina.patch" Content-Disposition: attachment; filename="v12-0003-Store-information-about-elided-nodes-in-the-fina.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkvd1fri2 RnJvbSBjODJiNmExM2ZhYjQ5Y2YxMzY2MjliN2Q1ZDM4MTU0MDg2MGRjM2NiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjAgT2N0IDIwMjUgMTQ6MjM6NDIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxMiAz LzVdIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IGVsaWRlZCBub2RlcyBpbiB0aGUgZmluYWwKIHBs YW4uCgpBbiBleHRlbnNpb24gKG9yIGNvcmUgY29kZSkgbWlnaHQgd2FudCB0byByZWNvbnN0cnVj dCB0aGUgcGxhbm5lcidzCmNob2ljZSBvZiBqb2luIG9yZGVyIGZyb20gdGhlIGZpbmFsIHBsYW4u IFRvIGRvIHNvLCBpdCBtdXN0IGJlIHBvc3NpYmxlCnRvIGZpbmQgYWxsIG9mIHRoZSBSVElzIHRo YXQgd2VyZSBwYXJ0IG9mIHRoZSBqb2luIHByb2JsZW0gaW4gdGhhdCBwbGFuLgpUaGUgcHJldmlv dXMgY29tbWl0LCB0b2dldGhlciB3aXRoIHRoZSBlYXJsaWVyIHdvcmsgaW4KOGM0OWE0ODRlOGVi YjAxOTlmYmE0YmQ2OGVhYWVkYWY0OWI0OGVkMCwgaXMgZW5vdWdoIHRvIGxldCB1cyBtYXRjaCB1 cApSVElzIHdlIHNlZSBpbiB0aGUgZmluYWwgcGxhbiB3aXRoIFJUSXMgdGhhdCB3ZSBzZWUgZHVy aW5nIHRoZSBwbGFubmluZwpjeWNsZSwgYnV0IHdlIHN0aWxsIGhhdmUgYSBwcm9ibGVtIGlmIHRo ZSBwbGFubmVyIGRlY2lkZXMgdG8gZHJvcCBzb21lClJUSXMgb3V0IG9mIHRoZSBmaW5hbCBwbGFu IGFsdG9nZXRoZXIuCgpUbyBmaXggdGhhdCwgd2hlbiBzZXRyZWZzLmMgcmVtb3ZlcyBhIFN1YnF1 ZXJ5U2Nhbiwgc2luZ2xlLWNoaWxkIEFwcGVuZCwKb3Igc2luZ2xlLWNoaWxkIE1lcmdlQXBwZW5k IGZyb20gdGhlIGZpbmFsIFBsYW4gdHJlZSwgcmVjb3JkIHRoZSB0eXBlIG9mCnRoZSByZW1vdmVk IG5vZGUgYW5kIHRoZSBSVElzIHRoYXQgdGhlIHJlbW92ZWQgbm9kZSB3b3VsZCBoYXZlIHNjYW5u ZWQKaW4gdGhlIGZpbmFsIHBsYW4gdHJlZS4gSXQgd291bGQgYmUgbmF0dXJhbCB0byByZWNvcmQg dGhpcyBpbmZvcm1hdGlvbgpvbiB0aGUgY2hpbGQgb2YgdGhlIHJlbW92ZWQgcGxhbiBub2RlLCBi dXQgdGhhdCB3b3VsZCByZXF1aXJlIGFkZGluZwphbiBhZGRpdGlvbmFsIHBvaW50ZXIgZmllbGQg dG8gdHlwZSBQbGFuLCB3aGljaCBzZWVtcyB1bmRlc2lyYWJsZS4KU28sIGluc3RlYWQsIHN0b3Jl IHRoZSBpbmZvcm1hdGlvbiBpbiBhIHNlcGFyYXRlIGxpc3QgdGhhdCB0aGUKZXhlY3V0b3IgbmVl ZCBuZXZlciBjb25zdWx0LCBhbmQgdXNlIHRoZSBwbGFuX25vZGVfaWQgdG8gaWRlbnRpZnkKdGhl IHBsYW4gbm9kZSB3aXRoIHdoaWNoIHRoZSByZW1vdmVkIG5vZGUgaXMgbG9naWNhbGx5IGFzc29j aWF0ZWQuCgpBbHNvLCB1cGRhdGUgcGdfb3ZlcmV4cGxhaW4gdG8gZGlzcGxheSB0aGVzZSBkZXRh aWxzLgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZpdHRsIDxsdWthc0BmaXR0bC5jb20+ClJldmlld2Vk LWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNlZGIuY29tPgpSZXZpZXdl ZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+ClJldmlld2VkLWJ5OiBKYWNvYiBDaGFtcGlv biA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEFtaXQgTGFu Z290ZSA8YW1pdGxhbmdvdGUwOUBnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBIYWlibyBZYW4gPHRy aXN0YW4ueWltQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1Rn bW9aLUpoMVQ2UXlXb0NPRE1WUWRoVFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWls LmNvbQotLS0KIC4uLi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgICAgICAgICAgICAgICB8 ICA0ICstCiBjb250cmliL3BnX292ZXJleHBsYWluL3BnX292ZXJleHBsYWluLmMgICAgICAgfCAz OSArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAg ICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgICAg ICAgIHwgNTIgKysrKysrKysrKysrKysrKysrLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggICAgICAgICAgICAgICAgIHwgIDMgKysKIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5o ICAgICAgICAgICAgICAgICB8IDIwICsrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgICAgICAgICAgICB8ICAxICsKIDcgZmlsZXMgY2hhbmdlZCwgMTE3IGluc2VydGlv bnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFp bi9leHBlY3RlZC9wZ19vdmVyZXhwbGFpbi5vdXQgYi9jb250cmliL3BnX292ZXJleHBsYWluL2V4 cGVjdGVkL3BnX292ZXJleHBsYWluLm91dAppbmRleCA1NWQzNDY2NmQ4Ny4uY2E5YTIzZWE2MWYg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxh aW4ub3V0CisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vZXhwZWN0ZWQvcGdfb3ZlcmV4cGxh aW4ub3V0CkBAIC00NTIsNiArNDUyLDggQEAgU0VMRUNUICogRlJPTSB2ZWdldGFibGVzIFdIRVJF IGdlbnVzID0gJ2RhdWN1cyc7CiAgU2VxIFNjYW4gb24gZGF1Y3VzIHZlZ2V0YWJsZXMKICAgIEZp bHRlcjogKGdlbnVzID0gJ2RhdWN1cyc6OnRleHQpCiAgICBTY2FuIFJUSTogMgorICAgRWxpZGVk IE5vZGUgVHlwZTogQXBwZW5kCisgICBFbGlkZWQgTm9kZSBSVElzOiAxCiAgUlRJIDEgKHJlbGF0 aW9uLCBpbmhlcml0ZWQsIGluLWZyb20tY2xhdXNlKToKICAgIEVyZWY6IHZlZ2V0YWJsZXMgKGlk LCBuYW1lLCBnZW51cykKICAgIFJlbGF0aW9uOiB2ZWdldGFibGVzCkBAIC00NjUsNyArNDY3LDcg QEAgU0VMRUNUICogRlJPTSB2ZWdldGFibGVzIFdIRVJFIGdlbnVzID0gJ2RhdWN1cyc7CiAgICBS ZWxhdGlvbiBLaW5kOiByZWxhdGlvbgogICAgUmVsYXRpb24gTG9jayBNb2RlOiBBY2Nlc3NTaGFy ZUxvY2sKICBVbnBydW5hYmxlIFJUSXM6IDEgMgotKDE2IHJvd3MpCisoMTggcm93cykKIAogLS0g QWxzbyB0ZXN0IGEgY2FzZSB0aGF0IGludm9sdmVzIGEgd3JpdGUuCiBFWFBMQUlOIChSQU5HRV9U QUJMRSwgQ09TVFMgT0ZGKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19v dmVyZXhwbGFpbi5jIGIvY29udHJpYi9wZ19vdmVyZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCmlu ZGV4IGJmOGM3NjhlZDQ3Li5lMDE4NGJhMzE0YSAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ19vdmVy ZXhwbGFpbi9wZ19vdmVyZXhwbGFpbi5jCisrKyBiL2NvbnRyaWIvcGdfb3ZlcmV4cGxhaW4vcGdf b3ZlcmV4cGxhaW4uYwpAQCAtMTkxLDYgKzE5MSw4IEBAIG92ZXJleHBsYWluX3Blcl9ub2RlX2hv b2soUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkgKi8KIAlpZiAob3B0 aW9ucy0+cmFuZ2VfdGFibGUpCiAJeworCQlib29sCQlvcGVuZWRfZWxpZGVkX25vZGVzID0gZmFs c2U7CisKIAkJc3dpdGNoIChub2RlVGFnKHBsYW4pKQogCQl7CiAJCQljYXNlIFRfU2VxU2NhbjoK QEAgLTI1MSw2ICsyNTMsNDMgQEAgb3ZlcmV4cGxhaW5fcGVyX25vZGVfaG9vayhQbGFuU3RhdGUg KnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJZGVmYXVsdDoKIAkJCQlicmVhazsKIAkJ fQorCisJCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBuLCBlcy0+cHN0bXQtPmVsaWRlZE5vZGVz KQorCQl7CisJCQljaGFyCSAgICplbGlkZWRub2RldGFnOworCisJCQlpZiAobi0+cGxhbl9ub2Rl X2lkICE9IHBsYW4tPnBsYW5fbm9kZV9pZCkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKCFvcGVu ZWRfZWxpZGVkX25vZGVzKQorCQkJeworCQkJCUV4cGxhaW5PcGVuR3JvdXAoIkVsaWRlZCBOb2Rl cyIsICJFbGlkZWQgTm9kZXMiLCBmYWxzZSwgZXMpOworCQkJCW9wZW5lZF9lbGlkZWRfbm9kZXMg PSB0cnVlOworCQkJfQorCisJCQlzd2l0Y2ggKG4tPmVsaWRlZF90eXBlKQorCQkJeworCQkJCWNh c2UgVF9BcHBlbmQ6CisJCQkJCWVsaWRlZG5vZGV0YWcgPSAiQXBwZW5kIjsKKwkJCQkJYnJlYWs7 CisJCQkJY2FzZSBUX01lcmdlQXBwZW5kOgorCQkJCQllbGlkZWRub2RldGFnID0gIk1lcmdlQXBw ZW5kIjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUX1N1YnF1ZXJ5U2NhbjoKKwkJCQkJZWxpZGVk bm9kZXRhZyA9ICJTdWJxdWVyeVNjYW4iOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJ CQllbGlkZWRub2RldGFnID0gcHNwcmludGYoIiVkIiwgbi0+ZWxpZGVkX3R5cGUpOworCQkJCQli cmVhazsKKwkJCX0KKworCQkJRXhwbGFpbk9wZW5Hcm91cCgiRWxpZGVkIE5vZGUiLCBOVUxMLCB0 cnVlLCBlcyk7CisJCQlFeHBsYWluUHJvcGVydHlUZXh0KCJFbGlkZWQgTm9kZSBUeXBlIiwgZWxp ZGVkbm9kZXRhZywgZXMpOworCQkJb3ZlcmV4cGxhaW5fYml0bWFwc2V0KCJFbGlkZWQgTm9kZSBS VElzIiwgbi0+cmVsaWRzLCBlcyk7CisJCQlFeHBsYWluQ2xvc2VHcm91cCgiRWxpZGVkIE5vZGUi LCBOVUxMLCB0cnVlLCBlcyk7CisJCX0KKwkJaWYgKG9wZW5lZF9lbGlkZWRfbm9kZXMpCisJCQlF eHBsYWluQ2xvc2VHcm91cCgiRWxpZGVkIE5vZGVzIiwgIkVsaWRlZCBOb2RlcyIsIGZhbHNlLCBl cyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bmVyLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggMjk2ZjA5 ZjBkNzMuLmU4NjI3OTJlYjQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBA IC02NjUsNiArNjY1LDcgQEAgc3RhbmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNo YXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1cnNvck9wdGlvbnMsCiAJcmVzdWx0LT5wYXJhbUV4ZWNU eXBlcyA9IGdsb2ItPnBhcmFtRXhlY1R5cGVzOwogCS8qIHV0aWxpdHlTdG10IHNob3VsZCBiZSBu dWxsLCBidXQgd2UgbWlnaHQgYXMgd2VsbCBjb3B5IGl0ICovCiAJcmVzdWx0LT51dGlsaXR5U3Rt dCA9IHBhcnNlLT51dGlsaXR5U3RtdDsKKwlyZXN1bHQtPmVsaWRlZE5vZGVzID0gZ2xvYi0+ZWxp ZGVkTm9kZXM7CiAJcmVzdWx0LT5zdG10X2xvY2F0aW9uID0gcGFyc2UtPnN0bXRfbG9jYXRpb247 CiAJcmVzdWx0LT5zdG10X2xlbiA9IHBhcnNlLT5zdG10X2xlbjsKIApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vc2V0cmVmcy5jCmluZGV4IGE1YjIzMTRlZjJhLi41YWQ2YzEzODMwYiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3NldHJlZnMuYwpAQCAtMjExLDYgKzIxMSw5IEBAIHN0YXRpYyBMaXN0 ICpzZXRfd2luZG93YWdnX3J1bmNvbmRpdGlvbl9yZWZlcmVuY2VzKFBsYW5uZXJJbmZvICpyb290 LAogCQkJCQkJCQkJCQkJICAgTGlzdCAqcnVuY29uZGl0aW9uLAogCQkJCQkJCQkJCQkJICAgUGxh biAqcGxhbik7CiAKK3N0YXRpYyB2b2lkIHJlY29yZF9lbGlkZWRfbm9kZShQbGFubmVyR2xvYmFs ICpnbG9iLCBpbnQgcGxhbl9ub2RlX2lkLAorCQkJCQkJCSAgIE5vZGVUYWcgZWxpZGVkX3R5cGUs IEJpdG1hcHNldCAqcmVsaWRzKTsKKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0x NDYwLDEwICsxNDYzLDE3IEBAIHNldF9zdWJxdWVyeXNjYW5fcmVmZXJlbmNlcyhQbGFubmVySW5m byAqcm9vdCwKIAogCWlmICh0cml2aWFsX3N1YnF1ZXJ5c2NhbihwbGFuKSkKIAl7CisJCUluZGV4 CQlzY2FucmVsaWQ7CisKIAkJLyoKIAkJICogV2UgY2FuIG9taXQgdGhlIFN1YnF1ZXJ5U2NhbiBu b2RlIGFuZCBqdXN0IHB1bGwgdXAgdGhlIHN1YnBsYW4uCiAJCSAqLwogCQlyZXN1bHQgPSBjbGVh bl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikgcGxhbiwgcGxhbi0+c3VicGxhbik7CisK KwkJLyogUmVtZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGEgU3VicXVlcnlTY2FuICovCisJCXNjYW5y ZWxpZCA9IHBsYW4tPnNjYW4uc2NhbnJlbGlkICsgcnRvZmZzZXQ7CisJCXJlY29yZF9lbGlkZWRf bm9kZShyb290LT5nbG9iLCBwbGFuLT5zdWJwbGFuLT5wbGFuX25vZGVfaWQsCisJCQkJCQkgICBU X1N1YnF1ZXJ5U2NhbiwgYm1zX21ha2Vfc2luZ2xldG9uKHNjYW5yZWxpZCkpOwogCX0KIAllbHNl CiAJewpAQCAtMTg5MSw3ICsxOTAxLDE3IEBAIHNldF9hcHBlbmRfcmVmZXJlbmNlcyhQbGFubmVy SW5mbyAqcm9vdCwKIAkJUGxhbgkgICAqcCA9IChQbGFuICopIGxpbml0aWFsKGFwbGFuLT5hcHBl bmRwbGFucyk7CiAKIAkJaWYgKHAtPnBhcmFsbGVsX2F3YXJlID09IGFwbGFuLT5wbGFuLnBhcmFs bGVsX2F3YXJlKQotCQkJcmV0dXJuIGNsZWFuX3VwX3JlbW92ZWRfcGxhbl9sZXZlbCgoUGxhbiAq KSBhcGxhbiwgcCk7CisJCXsKKwkJCVBsYW4JICAgKnJlc3VsdDsKKworCQkJcmVzdWx0ID0gY2xl YW5fdXBfcmVtb3ZlZF9wbGFuX2xldmVsKChQbGFuICopIGFwbGFuLCBwKTsKKworCQkJLyogUmVt ZW1iZXIgdGhhdCB3ZSByZW1vdmVkIGFuIEFwcGVuZCAqLworCQkJcmVjb3JkX2VsaWRlZF9ub2Rl KHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9BcHBlbmQsCisJCQkJCQkJICAgb2Zmc2V0 X3JlbGlkX3NldChhcGxhbi0+YXBwcmVsaWRzLCBydG9mZnNldCkpOworCisJCQlyZXR1cm4gcmVz dWx0OworCQl9CiAJfQogCiAJLyoKQEAgLTE5NTksNyArMTk3OSwxNyBAQCBzZXRfbWVyZ2VhcHBl bmRfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJUGxhbgkgICAqcCA9IChQbGFuICop IGxpbml0aWFsKG1wbGFuLT5tZXJnZXBsYW5zKTsKIAogCQlpZiAocC0+cGFyYWxsZWxfYXdhcmUg PT0gbXBsYW4tPnBsYW4ucGFyYWxsZWxfYXdhcmUpCi0JCQlyZXR1cm4gY2xlYW5fdXBfcmVtb3Zl ZF9wbGFuX2xldmVsKChQbGFuICopIG1wbGFuLCBwKTsKKwkJeworCQkJUGxhbgkgICAqcmVzdWx0 OworCisJCQlyZXN1bHQgPSBjbGVhbl91cF9yZW1vdmVkX3BsYW5fbGV2ZWwoKFBsYW4gKikgbXBs YW4sIHApOworCisJCQkvKiBSZW1lbWJlciB0aGF0IHdlIHJlbW92ZWQgYSBNZXJnZUFwcGVuZCAq LworCQkJcmVjb3JkX2VsaWRlZF9ub2RlKHJvb3QtPmdsb2IsIHAtPnBsYW5fbm9kZV9pZCwgVF9N ZXJnZUFwcGVuZCwKKwkJCQkJCQkgICBvZmZzZXRfcmVsaWRfc2V0KG1wbGFuLT5hcHByZWxpZHMs IHJ0b2Zmc2V0KSk7CisKKwkJCXJldHVybiByZXN1bHQ7CisJCX0KIAl9CiAKIAkvKgpAQCAtMzc3 NCwzICszODA0LDIxIEBAIGV4dHJhY3RfcXVlcnlfZGVwZW5kZW5jaWVzX3dhbGtlcihOb2RlICpu b2RlLCBQbGFubmVySW5mbyAqY29udGV4dCkKIAlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtl cihub2RlLCBleHRyYWN0X3F1ZXJ5X2RlcGVuZGVuY2llc193YWxrZXIsCiAJCQkJCQkJCSAgY29u dGV4dCk7CiB9CisKKy8qCisgKiBSZWNvcmQgc29tZSBkZXRhaWxzIGFib3V0IGEgbm9kZSByZW1v dmVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMKKyAqIHByb2Nlc3NpbmcsIGZvciB0aGUg YmVuZWZpdCBvZiBjb2RlIHRyeWluZyB0byByZWNvbnN0cnVjdCBwbGFubmVyIGRlY2lzaW9ucwor ICogZnJvbSBleGFtaW5hdGlvbiBvZiB0aGUgZmluYWwgcGxhbiB0cmVlLgorICovCitzdGF0aWMg dm9pZAorcmVjb3JkX2VsaWRlZF9ub2RlKFBsYW5uZXJHbG9iYWwgKmdsb2IsIGludCBwbGFuX25v ZGVfaWQsCisJCQkJICAgTm9kZVRhZyBlbGlkZWRfdHlwZSwgQml0bWFwc2V0ICpyZWxpZHMpCit7 CisJRWxpZGVkTm9kZSAqbiA9IG1ha2VOb2RlKEVsaWRlZE5vZGUpOworCisJbi0+cGxhbl9ub2Rl X2lkID0gcGxhbl9ub2RlX2lkOworCW4tPmVsaWRlZF90eXBlID0gZWxpZGVkX3R5cGU7CisJbi0+ cmVsaWRzID0gcmVsaWRzOworCisJZ2xvYi0+ZWxpZGVkTm9kZXMgPSBsYXBwZW5kKGdsb2ItPmVs aWRlZE5vZGVzLCBuKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggYzFlOTM5NzYyM2IuLjlj YzVkMmU3NDExIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMjMyLDYgKzIzMiw5IEBAIHR5cGVk ZWYgc3RydWN0IFBsYW5uZXJHbG9iYWwKIAkvKiB0eXBlIE9JRHMgZm9yIFBBUkFNX0VYRUMgUGFy YW1zICovCiAJTGlzdAkgICAqcGFyYW1FeGVjVHlwZXM7CiAKKwkvKiBpbmZvIGFib3V0IG5vZGVz IGVsaWRlZCBmcm9tIHRoZSBwbGFuIGR1cmluZyBzZXRyZWZzIHByb2Nlc3NpbmcgKi8KKwlMaXN0 CSAgICplbGlkZWROb2RlczsKKwogCS8qIGhpZ2hlc3QgUGxhY2VIb2xkZXJWYXIgSUQgYXNzaWdu ZWQgKi8KIAlJbmRleAkJbGFzdFBISWQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKaW5kZXggOWFlNzJh NjA3ZTIuLjBhZDBmZjQwNGM5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9k ZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaApAQCAtMTUyLDYgKzE1Miw5 IEBAIHR5cGVkZWYgc3RydWN0IFBsYW5uZWRTdG10CiAJLyogbm9uLW51bGwgaWYgdGhpcyBpcyB1 dGlsaXR5IHN0bXQgKi8KIAlOb2RlCSAgICp1dGlsaXR5U3RtdDsKIAorCS8qIGluZm8gYWJvdXQg bm9kZXMgZWxpZGVkIGZyb20gdGhlIHBsYW4gZHVyaW5nIHNldHJlZnMgcHJvY2Vzc2luZyAqLwor CUxpc3QJICAgKmVsaWRlZE5vZGVzOworCiAJLyoKIAkgKiBEZWZFbGVtIG9iamVjdHMgYWRkZWQg YnkgZXh0ZW5zaW9ucywgZS5nLiB1c2luZyBwbGFubmVyX3NodXRkb3duX2hvb2sKIAkgKgpAQCAt MTgzOCw0ICsxODQxLDIxIEBAIHR5cGVkZWYgc3RydWN0IFN1YlBsYW5SVEluZm8KIAlib29sCQlk dW1teTsKIH0gU3ViUGxhblJUSW5mbzsKIAorLyoKKyAqIEVsaWRlZE5vZGUKKyAqCisgKiBJbmZv cm1hdGlvbiBhYm91dCBub2RlcyBlbGlkZWQgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVlOiB0cml2 aWFsIHN1YnF1ZXJ5CisgKiBzY2FucywgYW5kIHNpbmdsZS1jaGlsZCBBcHBlbmQgYW5kIE1lcmdl QXBwZW5kIG5vZGVzLgorICoKKyAqIHBsYW5fbm9kZV9pZCBpcyB0aGF0IG9mIHRoZSBzdXJ2aXZp bmcgcGxhbiBub2RlLCB0aGUgc29sZSBjaGlsZCBvZiB0aGUKKyAqIG9uZSB3aGljaCB3YXMgZWxp ZGVkLgorICovCit0eXBlZGVmIHN0cnVjdCBFbGlkZWROb2RlCit7CisJTm9kZVRhZwkJdHlwZTsK KwlpbnQJCQlwbGFuX25vZGVfaWQ7CisJTm9kZVRhZwkJZWxpZGVkX3R5cGU7CisJQml0bWFwc2V0 ICAqcmVsaWRzOworfSBFbGlkZWROb2RlOworCiAjZW5kaWYJCQkJCQkJLyogUExBTk5PREVTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggMzJhMTUxNDdjNTQuLjU4ZGUwNGNhMmM1 IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNzEwLDYgKzcxMCw3IEBAIEVhY2hTdGF0 ZQogRWRnZQogRWRpdGFibGVPYmplY3RUeXBlCiBFbGVtZW50c1N0YXRlCitFbGlkZWROb2RlCiBF bmFibGVUaW1lb3V0UGFyYW1zCiBFbmREYXRhUHRyVHlwZQogRW5kRGlyZWN0TW9kaWZ5X2Z1bmN0 aW9uCi0tIAoyLjUxLjAKCg== --000000000000748a9706494cb6bc Content-Type: application/octet-stream; name="v12-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Disposition: attachment; filename="v12-0005-WIP-Add-pg_plan_advice-contrib-module.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mkvd1fro4 RnJvbSBmZTliYjA4MzM3ZTE1ZjRkMmYwOGU4Y2M2NDVkYjdjOTk3Y2RiNzAxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IE1vbiwgMjYgSmFuIDIwMjYgMDk6NTY6MzYgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxMiA1 LzVdIFdJUDogQWRkIHBnX3BsYW5fYWR2aWNlIGNvbnRyaWIgbW9kdWxlLgoKUHJvdmlkZSBhIGZh Y2lsaXR5IHRoYXQgKDEpIGNhbiBiZSB1c2VkIHRvIHN0YWJpbGl6ZSBjZXJ0YWluIHBsYW4gY2hv aWNlcwpzbyB0aGF0IHRoZSBwbGFubmVyIGNhbm5vdCByZXZlcnNlIGNvdXJzZSB3aXRob3V0IGF1 dGhvcml6YXRpb24gYW5kCigyKSBjYW4gYmUgdXNlZCBieSBrbm93bGVkZ2VhYmxlIHVzZXJzIHRv IGluc2lzdCBvbiBwbGFuIGNob2ljZXMgY29udHJhcnkKdG8gd2hhdCB0aGUgcGxhbm5lciBiZWxp ZXZlcyBiZXN0LiBJbiBib3RoIGNhc2VzLCB0ZXJyaWJsZSBvdXRjb21lcyBhcmUKcG9zc2libGU6 IHVzZXJzIHNob3VsZCB0aGluayB0d2ljZSBhbmQgcGVyaGFwcyB0aHJlZSB0aW1lcyBiZWZvcmUK Y29uc3RyYWluaW5nIHRoZSBwbGFubmVyJ3MgYWJpbGl0eSB0byBkbyBhcyBpdCB0aGlua3MgYmVz dDsgbmV2ZXJ0aGVsZXNzLAp0aGVyZSBhcmUgcHJvYmxlbXMgdGhhdCBhcmUgbXVjaCBtb3JlIGVh c2lseSBzb2x2ZWQgd2l0aCB0aGVzZSBmYWNpbGl0aWVzCnRoYW4gd2l0aG91dCB0aGVtLgoKVGhp cyBwYXRjaCB0YWtlcyB0aGUgYXBwcm9hY2ggb2YgYW5hbHl6aW5nIGEgZmluaXNoZWQgcGxhbiB0 byBwcm9kdWNlCnRleHR1YWwgb3V0cHV0LCB3aGljaCB3ZSBjYWxsICJwbGFuIGFkdmljZSIsIHRo YXQgZGVzY3JpYmVzIGtleQpkZWNpc2lvbnMgbWFkZSBkdXJpbmcgcGxhbjsgaWYgdGhhdCBwbGFu IGFkdmljZSBpcyBwcm92aWRlZCBkdXJpbmcKZnV0dXJlIHBsYW5uaW5nIGN5Y2xlcywgaXQgd2ls bCBmb3JjZSB0aG9zZSBrZXkgZGVjaXNpb25zIHRvIGJlIG1hZGUgaW4KdGhlIHNhbWUgd2F5LiAg Tm90IGFsbCBwbGFubmVyIGRlY2lzaW9ucyBjYW4gYmUgY29udHJvbGxlZCB1c2luZyBhZHZpY2U7 CmZvciBleGFtcGxlLCBkZWNpc2lvbnMgYWJvdXQgaG93IHRvIHBlcmZvcm0gYWdncmVnYXRpb24g YXJlIGN1cnJlbnRseQpvdXQgb2Ygc2NvcGUsIGFzIGlzIGNob2ljZSBvZiBzb3J0IG9yZGVyLiBQ bGFuIGFkdmljZSBjYW4gYWxzbyBiZSBlZGl0ZWQKYnkgdGhlIHVzZXIsIG9yIGV2ZW4gd3JpdHRl biBmcm9tIHNjcmF0Y2ggaW4gc2ltcGxlIGNhc2VzLCBtYWtpbmcgaXQKcG9zc2libGUgdG8gZ2Vu ZXJhdGUgb3V0Y29tZXMgdGhhdCB0aGUgcGxhbm5lciB3b3VsZCBub3QgaGF2ZSBwcm9kdWNlZC4K UGFydGlhbCBhZHZpY2UgY2FuIGJlIHByb3ZpZGVkIHRvIGNvbnRyb2wgc29tZSBwbGFubmVyIG91 dGNvbWVzIGJ1dCBub3QKb3RoZXJzLgoKQ3VycmVudGx5LCBwbGFuIGFkdmljZSBpcyBmb2N1c2Vk IG9ubHkgb24gc3BlY2lmaWMgb3V0Y29tZXMsIHN1Y2ggYXMKdGhlIGNob2ljZSB0byB1c2UgYSBz ZXF1ZW50aWFsIHNjYW4gZm9yIGEgcGFydGljdWxhciByZWxhdGlvbiwgYW5kIG5vdApvbiBlc3Rp bWF0ZXMgdGhhdCBtaWdodCBjb250cmlidXRlIHRvIHRob3NlIG91dGNvbWVzLCBzdWNoIGFzIGEK cG9zc2libHktaW5jb3JyZWN0IHNlbGVjdGl2aXR5IGVzdGltYXRlLiBXaGlsZSBpdCB3b3VsZCBi ZSB1c2VmdWwgdG8KdXNlcnMgdG8gYmUgYWJsZSB0byBwcm92aWRlIHBsYW4gYWR2aWNlIHRoYXQg YWZmZWN0cyBzZWxlY3Rpdml0eQplc3RpbWF0ZXMgb3Igb3RoZXIgYXNwZWN0cyBvZiBjb3N0aW5n LCB0aGF0IGlzIG91dCBvZiBzY29wZSBmb3IgdGhpcwpjb21taXQuCgpGb3IgbW9yZSBkZXRhaWxz LCBzZWUgY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgb3IgdGhlIFNHTUwKZG9jdW1lbnRh dGlvbi4KCk5PVEU6IFRoZXJlIGFyZSBzdGlsbCBzb21lIGtub3duIHByb2JsZW1zIHdpdGggdGhp cyBjb2RlLCB3aGljaCBhcmUKY2FsbGVkIG91dCBieSBYWFguIFByb2JhYmx5IHRoZSBiaWdnZXN0 IGdhcCBhcyBvZiB0aGlzIHdyaXRpbmcgaXMKdGhlIGluY29tcGxldGUgdHJlYXRtZW50IG9mIGJp dG1hcCBoZWFwIHNjYW5zLgoKUmV2aWV3ZWQtYnk6IEx1a2FzIEZpdHRsIDxsdWthc0BmaXR0bC5j b20+ClJldmlld2VkLWJ5OiBKYWt1YiBXYXJ0YWsgPGpha3ViLndhcnRha0BlbnRlcnByaXNlZGIu Y29tPgpSZXZpZXdlZC1ieTogR3JlZyBCdXJkIDxncmVnQGJ1cmQubWU+ClJldmlld2VkLWJ5OiBK YWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQt Ynk6IEhhaWJvIFlhbiA8dHJpc3Rhbi55aW1AZ21haWwuY29tPgpSZXZpZXdlZC1ieTogRGlhbiBG YXkgPGRpQG5tZmF5LmNvbT4KUmV2aWV3ZWQtYnk6IEFqYXkgUGFsIDxhamF5LnBhbC5rQGdtYWls LmNvbT4KUmV2aWV3ZWQtYnk6IEpvaG4gTmF5bG9yIDxqb2huY25heWxvcmxzQGdtYWlsLmNvbT4K RGlzY3Vzc2lvbjogaHR0cDovL3Bvc3Rnci5lcy9tL0NBK1RnbW9aLUpoMVQ2UXlXb0NPRE1WUWRo VFVQWWthWmpXenR6UDFFbjQ9WkhvS1B6d0BtYWlsLmdtYWlsLmNvbQotLS0KIGNvbnRyaWIvTWFr ZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogY29udHJpYi9tZXNv bi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBjb250cmliL3BnX3Bs YW5fYWR2aWNlLy5naXRpZ25vcmUgICAgICAgICAgICAgfCAgICAzICsKIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgNTAgKwogY29udHJpYi9wZ19wbGFu X2FkdmljZS9SRUFETUUgICAgICAgICAgICAgICAgIHwgIDI2NyArKysKIGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91dCAgICB8ICAzNzEgKysrCiAuLi4vcGdfcGxhbl9h ZHZpY2UvZXhwZWN0ZWQvam9pbl9vcmRlci5vdXQgICAgfCAgNTA5ICsrKysrCiAuLi4vcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvam9pbl9zdHJhdGVneS5vdXQgfCAgMzM4ICsrKwogLi4uL2V4cGVj dGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQgICAgICAgICAgICAgIHwgICA2NyArCiAuLi4vcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvcGFydGl0aW9ud2lzZS5vdXQgfCAgNDI2ICsrKysKIGNvbnRyaWIv cGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcHJlcGFyZWQub3V0ICB8ICAgNjcgKwogY29udHJpYi9w Z19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dCAgICAgIHwgIDc1NyArKysrKysKIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2VtaWpvaW4ub3V0ICB8ICAzNzcgKysrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3N5bnRheC5vdXQgICAgfCAgMTkyICsrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkICAgICAgICAgICAgfCAgIDcyICsKIC4uLi9w Z19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS0tMS4wLnNxbCAgICB8ICAgNDMgKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5jICAgICAgIHwgIDUwMyArKysrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wgfCAgICA1ICsKIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaCAgICAgICB8ICAgNDMgKwogY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jICAgICAgICAgICAgIHwgIDM5NCArKysrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmggICAgICAgICAgICAgfCAgMjA0ICsrCiBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmMgICAgICAgfCAgNjM5ICsrKysrKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rvci5oICAgICAgIHwgICAxOCArCiBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5jICAgICAgfCAgNDc2ICsrKysK IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmggICAgICB8ICAgNTIgKwog Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYyAgICAgICAgICAgIHwgIDYyOSArKysr KwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uaCAgICAgICAgICAgIHwgIDEwNSAr CiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgICAgICAgICAgfCAgNjI4ICsr KysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmggICAgICAgICAgfCAgIDIy ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueSAgICAgICAgICB8ICAzNDAg KysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jICAgICAgICAgfCAyMDI5 ICsrKysrKysrKysrKysrKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5o ICAgICAgICAgfCAgIDE3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMgICAg ICAgICAgICB8ICAzMDYgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oICAg ICAgICAgICAgfCAgIDg1ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FubmVyLmwg ICAgICAgICB8ICAzMDIgKysrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYyAg ICAgICAgICAgfCAgNDkyICsrKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5o ICAgICAgICAgICB8ICAxMTMgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtlci5j ICAgICAgICAgIHwgMTAwNiArKysrKysrKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dh bGtlci5oICAgICAgICAgIHwgIDE0MSArKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0 aGVyLnNxbCAgICAgICAgIHwgICA4NiArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2lu X29yZGVyLnNxbCAgICAgfCAgMTQ1ICsrCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2lu X3N0cmF0ZWd5LnNxbCAgfCAgIDg0ICsKIC4uLi9wZ19wbGFuX2FkdmljZS9zcWwvbG9jYWxfY29s bGVjdG9yLnNxbCAgICB8ICAgNDQgKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFydGl0 aW9ud2lzZS5zcWwgIHwgICA5OSArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wcmVwYXJl ZC5zcWwgICAgICAgfCAgIDM3ICsKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3Fs ICAgICAgICAgICB8ICAxOTUgKysKIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3NlbWlqb2lu LnNxbCAgICAgICB8ICAxMTggKwogY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc3ludGF4LnNx bCAgICAgICAgIHwgICA2OCArCiBjb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3Mu cGwgICAgICAgfCAgMTQ4ICsrCiBkb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sICAgICAgICAgICAg ICAgICAgICAgfCAgICAxICsKIGRvYy9zcmMvc2dtbC9maWxlbGlzdC5zZ21sICAgICAgICAgICAg ICAgICAgICB8ICAgIDEgKwogZG9jL3NyYy9zZ21sL3BncGxhbmFkdmljZS5zZ21sICAgICAgICAg ICAgICAgIHwgIDk1NyArKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3Qg ICAgICAgICAgICAgIHwgICAzOCArCiA1MyBmaWxlcyBjaGFuZ2VkLCAxNDExMSBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS8uZ2l0aWdub3Jl CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9NYWtlZmlsZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvUkVBRE1FCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0CiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVy Lm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQv am9pbl9zdHJhdGVneS5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2 aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0CiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0 CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zZW1p am9pbi5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL3N5bnRheC5vdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNl L21lc29uLmJ1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z19wbGFuX2FkdmljZS0tMS4wLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2pvaW4uYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGFyc2VyLnkKIGNyZWF0ZSBtb2RlIDEw MDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5oCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9vcmRlci5zcWwKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2luX3N0cmF0ZWd5LnNxbAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rv ci5zcWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0 aXRpb253aXNlLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2Uv c3FsL3ByZXBhcmVkLnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3NjYW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9zcWwvc2VtaWpvaW4uc3FsCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9wZ19wbGFuX2Fk dmljZS9zcWwvc3ludGF4LnNxbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvdC8wMDFfcmVncmVzcy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRvYy9zcmMvc2dtbC9w Z3BsYW5hZHZpY2Uuc2dtbAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvTWFrZWZpbGUgYi9jb250cmli L01ha2VmaWxlCmluZGV4IDJmMGE4OGQzZjc3Li5kZDA0YzIwYWNkMiAxMDA2NDQKLS0tIGEvY29u dHJpYi9NYWtlZmlsZQorKysgYi9jb250cmliL01ha2VmaWxlCkBAIC0zNCw2ICszNCw3IEBAIFNV QkRJUlMgPSBcCiAJCXBnX2ZyZWVzcGFjZW1hcCBcCiAJCXBnX2xvZ2ljYWxpbnNwZWN0IFwKIAkJ cGdfb3ZlcmV4cGxhaW4gXAorCQlwZ19wbGFuX2FkdmljZSBcCiAJCXBnX3ByZXdhcm0JXAogCQlw Z19zdGF0X3N0YXRlbWVudHMgXAogCQlwZ19zdXJnZXJ5CVwKZGlmZiAtLWdpdCBhL2NvbnRyaWIv bWVzb24uYnVpbGQgYi9jb250cmliL21lc29uLmJ1aWxkCmluZGV4IGRlZjEzMjU3Y2JlLi41YTc1 MmVhYzM0NyAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAorKysgYi9jb250cmliL21l c29uLmJ1aWxkCkBAIC00OCw2ICs0OCw3IEBAIHN1YmRpcigncGdjcnlwdG8nKQogc3ViZGlyKCdw Z19mcmVlc3BhY2VtYXAnKQogc3ViZGlyKCdwZ19sb2dpY2FsaW5zcGVjdCcpCiBzdWJkaXIoJ3Bn X292ZXJleHBsYWluJykKK3N1YmRpcigncGdfcGxhbl9hZHZpY2UnKQogc3ViZGlyKCdwZ19wcmV3 YXJtJykKIHN1YmRpcigncGdyb3dsb2NrcycpCiBzdWJkaXIoJ3BnX3N0YXRfc3RhdGVtZW50cycp CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjE5YTE0MjUzMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAorL3BncGFfcGFyc2VyLmgKKy9wZ3Bh X3BhcnNlci5jCisvcGdwYV9zY2FubmVyLmMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvTWFrZWZpbGUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xZDRjNTU5YWVkOAotLS0gL2Rldi9udWxs CisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvTWFrZWZpbGUKQEAgLTAsMCArMSw1MCBAQAor IyBjb250cmliL3BnX3BsYW5fYWR2aWNlL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSBwZ19wbGFu X2FkdmljZQorT0JKUyA9IFwKKwkkKFdJTjMyUkVTKSBcCisJcGdfcGxhbl9hZHZpY2UubyBcCisJ cGdwYV9hc3QubyBcCisJcGdwYV9jb2xsZWN0b3IubyBcCisJcGdwYV9pZGVudGlmaWVyLm8gXAor CXBncGFfam9pbi5vIFwKKwlwZ3BhX291dHB1dC5vIFwKKwlwZ3BhX3BhcnNlci5vIFwKKwlwZ3Bh X3BsYW5uZXIubyBcCisJcGdwYV9zY2FuLm8gXAorCXBncGFfc2Nhbm5lci5vIFwKKwlwZ3BhX3Ry b3ZlLm8gXAorCXBncGFfd2Fsa2VyLm8KKworRVhURU5TSU9OID0gcGdfcGxhbl9hZHZpY2UKK0RB VEEgPSBwZ19wbGFuX2FkdmljZS0tMS4wLnNxbAorUEdGSUxFREVTQyA9ICJwZ19wbGFuX2Fkdmlj ZSAtIGhlbHAgdGhlIHBsYW5uZXIgZ2V0IHRoZSByaWdodCBwbGFuIgorCitSRUdSRVNTID0gZ2F0 aGVyIGpvaW5fb3JkZXIgam9pbl9zdHJhdGVneSBwYXJ0aXRpb253aXNlIHNjYW4KK1RBUF9URVNU UyA9IDEKKworRVhUUkFfQ0xFQU4gPSBwZ3BhX3BhcnNlci5oIHBncGFfcGFyc2VyLmMgcGdwYV9z Y2FubmVyLmMKKworIyByZXF1aXJlZCBmb3IgMDAxX3JlZ3Jlc3MucGwKK1JFR1JFU1NfU0hMSUI9 JChhYnNfdG9wX2J1aWxkZGlyKS9zcmMvdGVzdC9yZWdyZXNzL3JlZ3Jlc3MkKERMU1VGRklYKQor ZXhwb3J0IFJFR1JFU1NfU0hMSUIKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2Nv bmZpZworUEdYUyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdY UykKK2Vsc2UKK3N1YmRpciA9IGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UKK3RvcF9idWlsZGRpciA9 IC4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCitpbmNs dWRlICQodG9wX3NyY2RpcikvY29udHJpYi9jb250cmliLWdsb2JhbC5taworZW5kaWYKKworIyBT ZWUgbm90ZXMgaW4gc3JjL2JhY2tlbmQvcGFyc2VyL01ha2VmaWxlIGFib3V0IHRoZSBmb2xsb3dp bmcgdHdvIHJ1bGVzCitwZ3BhX3BhcnNlci5oOiBwZ3BhX3BhcnNlci5jCisJdG91Y2ggJEAKKwor cGdwYV9wYXJzZXIuYzogQklTT05GTEFHUyArPSAtZAorCisjIEZvcmNlIHRoZXNlIGRlcGVuZGVu Y2llcyB0byBiZSBrbm93biBldmVuIHdpdGhvdXQgZGVwZW5kZW5jeSBpbmZvIGJ1aWx0OgorcGdw YV9wYXJzZXIubyBwZ3BhX3NjYW5uZXIubzogcGdwYV9wYXJzZXIuaApkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURN RQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzc3NTA4ZjUwM2IKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL1JFQURNRQpAQCAtMCwwICsx LDI2NyBAQAorY29udHJpYi9wZ19wbGFuX2FkdmljZS9SRUFETUUKKworUGxhbiBBZHZpY2UKKz09 PT09PT09PT09CisKK1RoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBtaW5pLWxhbmd1YWdlIGZvciAi cGxhbiBhZHZpY2UiIHRoYXQgYWxsb3dzIGZvcgorY29udHJvbCBvZiBjZXJ0YWluIGtleSBwbGFu bmVyIGRlY2lzaW9ucy4gR29hbHMgaW5jbHVkZSAoMSkgZW5mb3JjaW5nIHBsYW4KK3N0YWJpbGl0 eSAobXkgcHJldmlvdXMgcGxhbiB3YXMgZ29vZCBhbmQgSSB3b3VsZCBsaWtlIHRvIGtlZXAgZ2V0 dGluZyBhCitzaW1pbGFyIG9uZSkgYW5kICgyKSBhbGxvd2luZyB1c2VycyB0byBleHBlcmltZW50 IHdpdGggcGxhbnMgb3RoZXIgdGhhbgordGhlIG9uZSBwcmVmZXJyZWQgYnkgdGhlIG9wdGltaXpl ci4gTm9uLWdvYWxzIGluY2x1ZGUgKDEpIGNvbnRyb2xsaW5nCitldmVyeSBwb3NzaWJsZSBwbGFu bmVyIGRlY2lzaW9uIGFuZCAoMikgZm9yY2luZyBjb25zaWRlcmF0aW9uIG9mIHBsYW5zCit0aGF0 IHRoZSBvcHRpbWl6ZXIgcmVqZWN0cyBmb3IgcmVhc29ucyBvdGhlciB0aGFuIGNvc3QuIChUaGVy ZSBpcyBzb21lCityb29tIGZvciBiaWtlc2hlZGRpbmcgYWJvdXQgd2hhdCBleGFjdGx5IHRoaXMg bm9uLWdvYWwgbWVhbnM6IHdoYXQgaWYKK3dlIHNraXAgcGF0aCBnZW5lcmF0aW9uIGVudGlyZWx5 IGZvciBhIGNlcnRhaW4gY2FzZSBvbiB0aGUgdGhlb3J5IHRoYXQKK3dlIGtub3cgaXQgY2Fubm90 IHdpbiBvbiBjb3N0PyBEb2VzIHRoYXQgY291bnQgYXMgYSBjb3N0LWJhc2VkIHJlamVjdGlvbgor ZXZlbiB0aG91Z2ggbm8gY29zdCB3YXMgZXZlciBjb21wdXRlZD8pCisKK0dlbmVyYWxseSwgcGxh biBhZHZpY2UgaXMgYSBzZXJpZXMgb2Ygd2hpdGVzcGFjZS1zZXBhcmF0ZWQgYWR2aWNlIGl0ZW1z LAorZWFjaCBvZiB3aGljaCBhcHBsaWVzIGFuIGFkdmljZSB0YWcgdG8gYSBsaXN0IG9mIGFkdmlj ZSB0YXJnZXRzLiBGb3IKK2V4YW1wbGUsICJTRVFfU0NBTihmb28pIEhBU0hfSk9JTihiYXJAc3Mp IiBjb250YWlucyB0d28gaXRlbXMgb2YgYWR2aWNlLAordGhlIGZpcnN0IG9mIHdoaWNoIGFwcGxp ZXMgdGhlIFNFUV9TQ0FOIHRhZyB0byAiZm9vIiBhbmQgdGhlIHNlY29uZCBvZgord2hpY2ggYXBw bGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byAiYmFyQHNzIi4gSW4gdGhpcyBzaW1wbGUgZXhhbXBs ZSwgZWFjaAordGFyZ2V0IGlkZW50aWZpZXMgYSBzaW5nbGUgcmVsYXRpb247IHNlZSAiUmVsYXRp b24gSWRlbnRpZmllcnMiLCBiZWxvdy4KK0FkdmljZSB0YWdzIGNhbiBhbHNvIGJlIGFwcGxpZWQg dG8gZ3JvdXBzIG9mIHJlbGF0aW9uczsgZm9yIGV4YW1wbGUsCisiSEFTSF9KT0lOKGJheiAoYmxl dGNoIHF1dXgpKSIgYXBwbGllcyB0aGUgSEFTSF9KT0lOIHRhZyB0byB0aGUgc2luZ2xlCityZWxh dGlvbiBpZGVudGlmaWVyICJiYXoiIGFzIHdlbGwgYXMgdG8gdGhlIDItaXRlbSBsaXN0IGNvbnRh aW5pbmcKKyJibGV0Y2giIGFuZCAicXV1eCIuCisKK0NyaXRpY2FsbHksIHRoaXMgbW9kdWxlIGtu b3dzIGJvdGggaG93IHRvIGdlbmVyYXRlIHBsYW4gYWR2aWNlIGZyb20gYW4KK2FscmVhZHktZXhp c3RpbmcgcGxhbiwgYW5kIGFsc28gaG93IHRvIGVuZm9yY2UgaXQgZHVyaW5nIGZ1dHVyZSBwbGFu bmluZworY3ljbGVzLiBFdmVyeXRoaW5nIGl0IGRvZXMgaXMgaW50ZW5kZWQgdG8gYmUgInJvdW5k LXRyaXAgc2FmZSI6IGlmIHlvdQorZ2VuZXJhdGUgYWR2aWNlIGZyb20gYSBwbGFuIGFuZCB0aGVu IGZlZWQgdGhhdCBiYWNrIGludG8gYSBmdXR1cmUgcGxhbmluZworY3ljbGUsIGVhY2ggcGllY2Ug b2YgYWR2aWNlIHNob3VsZCBiZSBndWFyYW50ZWVkIHRvIGFwcGx5IHRvIHRoZSBleGFjdGx5IHRo ZQorc2FtZSBwYXJ0IG9mIHRoZSBxdWVyeSBmcm9tIHdoaWNoIGl0IHdhcyBnZW5lcmF0ZWQgd2l0 aG91dCBhbWJpZ3VpdHkgb3IKK2d1ZXNzd29yaywgYW5kIGl0IHNob3VsZCBzdWNjZXNmdWxseSBl bmZvcmNlIHRoZSBzYW1lIHBsYW5uaW5nIGRlY2lzaW9uIHRoYXQKK2xlZCB0byBpdCBiZWluZyBn ZW5lcmF0ZWQgaW4gdGhlIGZpcnN0IHBsYWNlLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8KK2ludGVu dGlvbiB0aGF0IHRoZXNlIGd1YXJhbnRlZXMgaG9sZCBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ZXJ2 ZW5pbmcgRERMOworZS5nLiBpZiB5b3UgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIG9mIGEgZnVuY3Rp b24gc28gdGhhdCBhIHN1YnF1ZXJ5IGlzIG5vCitsb25nZXIgaW5saW5lZCwgb3IgaWYgeW91IGRy b3AgYW4gaW5kZXggbmFtZWQgaW4gdGhlIHBsYW4gYWR2aWNlLCB0aGUgYWR2aWNlCitpc24ndCBn b2luZyB0byB3b3JrIGFueSBtb3JlLiBUaGF0J3MgZXhwZWN0ZWQuCisKK1RoaXMgbW9kdWxlIGFp bXMgdG8gZm9yY2UgdGhlIHBsYW5uZXIgdG8gZm9sbG93IGFueSBwcm92aWRlZCBhZHZpY2Ugd2l0 aG91dAorcmVnYXJkIHRvIHdoZXRoZXIgaXQgaXMgYXBwZWFycyB0byBiZSBnb29kIGFkdmljZSBv ciBiYWQgYWR2aWNlLiAgSWYgdGhlCit1c2VyIHByb3ZpZGVzIGJhZCBhZHZpY2UsIHdoZXRoZXIg ZGVyaXZlZCBmcm9tIGEgcHJldmlvdXNseS1nZW5lcmF0ZWQgcGxhbgorb3IgbWFudWFsbHkgd3Jp dHRlbiwgdGhleSBtYXkgZ2V0IGEgYmFkIHBsYW4uIFdlIHJlZ2FyZCB0aGlzIGFzIHVzZXIgZXJy b3IsCitub3QgYSBkZWZlY3QgaW4gdGhpcyBtb2R1bGUuIEl0IHNlZW1zIGxpa2VseSB0aGF0IGFw cGx5aW5nIGFkdmljZQoranVkaWNpb3VzbHkgYW5kIG9ubHkgd2hlbiB0cnVseSByZXF1aXJlZCB0 byBhdm9pZCBwcm9ibGVtcyB3aWxsIGJlIGEgbW9yZQorc3VjY2Vzc2Z1bCBzdHJhdGVneSB0aGFu IGFwcGx5aW5nIGl0IHdpdGggYSBicm9hZCBicnVzaCwgYnV0IHVzZXJzIGFyZSBmcmVlCit0byBl eHBlcmltZW50IHdpdGggd2hhdGV2ZXIgc3RyYXRlZ2llcyB0aGV5IHRoaW5rIGJlc3QuCisKK1Jl bGF0aW9uIElkZW50aWZpZXJzCis9PT09PT09PT09PT09PT09PT09PQorCitVbmlxdWVseSBpZGVu dGlmeWluZyB0aGUgcGFydCBvZiBhIHF1ZXJ5IHRvIHdoaWNoIGEgY2VydGFpbiBwaWVjZSBvZgor YWR2aWNlIGFwcGxpZXMgaXMgaGFyZGVyIHRoYW4gaXQgc291bmRzLiBPdXIgYmFzaWMgYXBwcm9h Y2ggaXMgdG8gdXNlCityZWxhdGlvbiBhbGlhc2VzIGFzIGEgc3RhcnRpbmcgcG9pbnQsIGFuZCB0 aGVuIGRpc2FtYmlndWF0ZS4gVGhlcmUgYXJlCit0aHJlZSB3YXlzIHRoYXQgc2FtZSByZWxhdGlv biBhbGlhcyBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXM6CisKKzEuIEl0IGNhbiBhcHBlYXIgaW4g bW9yZSB0aGFuIG9uZSBzdWJxdWVyeS4KKworMi4gSXQgY2FuIGFwcGVhciBtb3JlIHRoYW4gb25j ZSBpbiB0aGUgc2FtZSBzdWJxdWVyeSwKKyAgIGUuZy4gKGZvbyBKT0lOIGJhcikgeCBKT0lOIGZv by4KKworMy4gVGhlIHRhYmxlIGNhbiBiZSBwYXJ0aXRpb25lZC4KKworQW55IGNvbWJpbmF0aW9u IG9mIHRoZXNlIHRoaW5ncyBjYW4gb2NjdXIgc2ltdWx0YW5lb3VzbHkuICBUaGVyZWZvcmUsIG91 cgorZ2VuZXJhbCBzeW50YXggZm9yIGEgcmVsYXRpb24gaWRlbnRpZmllciBpczoKKworYWxpYXNf bmFtZSNvY2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25fc2NoZW1hLnBhcnRpdGlvbl9uYW1lQHBs YW5fbmFtZQorCitBbGwgY29tcG9uZW50cyBleGNlcHQgZm9yIHRoZSBhbGlhc19uYW1lIGFyZSBv cHRpb25hbCBhbmQgaW5jbHVkZWQgb25seQord2hlbiByZXF1aXJlZC4gV2hlbiBhIGNvbXBvbmVu dCBpcyBvbWl0dGVkLCB0aGUgYXNzb2NpYXRlZCBwdW5jdHVhdGlvbgorbXVzdCBhbHNvIGJlIG9t aXR0ZWQuIE9jY3VycmVuY2UgbnVtYmVycyBhcmUgY291bnRlZCBpZ25vcmluZyBjaGlsZHJlbiBv ZgorcGFydGl0aW9uZWQgdGFibGVzLiAgV2hlbiB0aGUgZ2VuZXJhdGVkIG9jY3VycmVuY2UgbnVt YmVyIGlzIDEsIHdlIG9taXQKK3RoZSBvY2N1cnJlbmNlIG51bWJlci4gVGhlIHBhcnRpdGlvbiBz Y2hlbWEgYW5kIHBhcnRpdGlvbiBuYW1lIGFyZSBpbmNsdWRlZAorb25seSBmb3IgY2hpbGRyZW4g b2YgcGFydGl0aW9uZWQgdGFibGVzLiBJbiBnZW5lcmF0ZWQgYWR2aWNlLCB0aGUKK3BhcnRpdGlv bl9zY2hlbWEgaXMgYWx3YXlzIGluY2x1ZGVkIHdoZW5ldmVyIHRoZXJlIGlzIGEgcGFydGl0aW9u X25hbWUsCitidXQgdXNlci13cml0dGVuIGFkdmljZSBtYXkgbWVudGlvbiB0aGUgbmFtZSBhbmQg b21pdCB0aGUgc2NoZW1hLiBUaGUKK3BsYW5fbmFtZSBpcyBvbWl0dGVkIGZvciB0aGUgdG9wLWxl dmVsIFBsYW5uZXJJbmZvLgorCitTY2FuIEFkdmljZQorPT09PT09PT09PT0KKworRm9yIG1hbnkg dHlwZXMgb2Ygc2Nhbiwgbm8gYWR2aWNlIGlzIGdlbmVyYXRlZCBvciBwb3NzaWJsZTsgZm9yIGlu c3RhbmNlLAorYSBzdWJxdWVyeSBpcyBhbHdheXMgc2Nhbm5lZCB1c2luZyBhIHN1YnF1ZXJ5IHNj YW4uIFdoaWxlIHRoYXQgc2NhbiBtYXkgYmUKK2VsaWRlZCB2aWEgc2V0cmVmcyBwcm9jZXNzaW5n LCB0aGlzIGRvZXNuJ3QgY2hhbmdlIHRoZSBmYWN0IHRoYXQgb25seSBvbmUKK2Jhc2ljIGFwcHJv YWNoIGV4aXN0cy4gSGVuY2UsIHNjYW4gYWR2aWNlIGFwcGxpZXMgbW9zdGx5IHRvIHJlbGF0aW9u cywgd2hpY2gKK2NhbiBiZSBzY2FubmVkIGluIG11bHRpcGxlIHdheXMuCisKK1dlIHRlbmQgdG8g dGhpbmsgb2YgYSBzY2FuIGFzIHRhcmdldGluZyBhIHNpbmdsZSByZWxhdGlvbiwgYW5kIHRoYXQn cworbm9ybWFsbHkgdGhlIGNhc2UsIGJ1dCBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuIEZvciBpbnN0 YW5jZSwgaWYgYSBqb2luIGlzCitwcm92ZW4gZW1wdHksIHRoZSB3aG9sZSB0aGluZyBtYXkgYmUg cmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBSZXN1bHQgbm9kZQord2hpY2gsIGluIGVmZmVjdCwgaXMg YSBkZWdlbmVyYXRlIHNjYW4gb2YgZXZlcnkgcmVsYXRpb24gaW4gdGhlIGNvbGxhcHNlZAorcG9y dGlvbiBvZiB0aGUgam9pbiB0cmVlLiBTaW1pbGFybHksIGl0J3MgcG9zc2libGUgdG8gaW5qZWN0 IGEgY3VzdG9tIHNjYW4KK2luIHN1Y2ggYSB3YXkgdGhhdCBpdCByZXBsYWNlcyBhbiBlbnRpcmUg am9pbi4gSWYgd2UgZXZlciBlbWl0IGFkdmljZQorZm9yIHRoZXNlIGNhc2VzLCBpdCB3b3VsZCB0 YXJnZXQgc2V0cyBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBzdXJyb3VuZGVkCitieSBjdXJseSBi cmFuY2VzLCBlLmcuIFNPTUVfU09SVF9PRl9TQ0FOKGZvbyAoYmFyIGJheikpIHdvdWxkIG1lYW4g dGhhdCB0aGUKK3RoZSBnaXZlbiBzY2FuIHR5cGUgd291bGQgYmUgdXNlZCBmb3IgZm9vIGFzIGEg c2luZ2xlIHJlbGF0aW9uIGFuZCBhbHNvIHRoZQorY29tYmluYXRpb24gb2YgYmFyIGFuZCBiYXog YXMgYSBqb2luIHByb2R1Y3QuIFdlIGhhdmUgbm8gc3VjaCBjYXNlcyBhdAorcHJlc2VudC4KKwor Rm9yIGluZGV4IGFuZCBpbmRleC1vbmx5IHNjYW5zLCBib3RoIHRoZSByZWxhdGlvbiBiZWluZyBz Y2FubmVkIGFuZCB0aGUKK2luZGV4IG9yIGluZGV4ZXMgYmVpbmcgdXNlZCBtdXN0IGJlIHNwZWNp ZmllZC4gRm9yIGV4YW1wbGUsIElOREVYX1NDQU4oZm9vCitmb29fYV9pZHggYmFyIGJhcl9iX2lk eCkgaW5kaWNhdGVzIHRoYXQgYW4gaW5kZXggc2NhbiAobm90IGFuIGluZGV4LW9ubHkKK3NjYW4p IHNob3VsZCBiZSB1c2VkIG9uIGZvb19hX2lkeCB3aGVuIHNjYW5uaW5nIGZvbywgYW5kIHRoYXQg YW4gaW5kZXggc2Nhbgorc2hvdWxkIGJlIHVzZWQgb24gYmFyX2JfaWR4IHdoZW4gc2Nhbm5pbmcg YmFyLgorCitCaXRtYXAgaGVhcCBzY2FucyBhbGxvdyBmb3IgYSBtb3JlIGNvbXBsaWNhdGVkIGlu ZGV4IHNwZWNpZmljYXRpb24uIEZvcgorZXhhbXBsZSwgQklUTUFQX0hFQVBfU0NBTihmb28gJiYo Zm9vX2FfaWR4IHx8KGZvb19iX2lkeCBmb29fY19pZHgpKSkgc2F5cwordGhhdCBmb28gc2hvdWxk IGJlIHNjYW5uZWQgdXNpbmcgYSBCaXRtYXBIZWFwU2NhbiBvdmVyIGEgQml0bWFwQW5kIGJldHdl ZW4KK2Zvb19hX2lkeCBhbmQgdGhlIHJlc3VsdCBvZiBhIEJpdG1hcE9yIGJldHdlZW4gZm9vX2Jf aWR4IGFuZCBmb29fY19pZHguCisKK1hYWDogQ3VycmVudGx5LCBCSVRNQVBfSEVBUF9TQ0FOIGRv ZXMgbm90IGVuZm9yY2UgdGhlIGluZGV4IHNwZWNpZmljYXRpb24sCitiZWNhdXNlIHRoZSBhdmFp bGFibGUgaG9va3MgYXJlIGluc3VmZmljaWVudCB0byBkbyBzby4gSXQncyBwb3NzaWJsZSB0aGF0 Cit0aGlzIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGV4Y2x1ZGUgdGhlIGluZGV4IHNwZWNpZmljYXRp b24gYWx0b2dldGhlciBhbmQKK3NpbXBseSBpbnNpc3QgdGhhdCBzb21lIHNvcnQgb2YgYml0bWFw IGhlYXAgc2NhbiBpcyB1c2VkOyBhbHRlcm5hdGl2ZWx5LAord2UgbmVlZCBiZXR0ZXIgaG9va3Mu CisKK0pvaW4gT3JkZXIgQWR2aWNlCis9PT09PT09PT09PT09PT09PQorCitUaGUgSk9JTl9PUkRF UiB0YWcgc3BlY2lmaWVzIHRoZSBvcmRlciBpbiB3aGljaCBzZXZlcmFsIHRhYmxlcyB0aGF0IGFy ZQorcGFydCBvZiB0aGUgc2FtZSBqb2luIHByb2JsZW0gc2hvdWxkIGJlIGpvaW5lZC4gRWFjaCBz dWJxdWVyeSAoZXhjZXB0IGZvcgordGhvc2UgdGhhdCBhcmUgaW5saW5lZCkgaXMgYSBzZXBhcmF0 ZSBqb2luIHByb2JsZW0uIFdpdGhpbiBhIHN1YnF1ZXJ5LAorcGFydGl0aW9ud2lzZSBqb2lucyBj YW4gY3JlYXRlIGFkZGl0aW9uYWwsIHNlcGFyYXRlIGpvaW4gcHJvYmxlbXMuIEhlbmNlLAorcXVl cmllcyBpbnZvbHZpbmcgcGFydGl0aW9ud2lzZSBqb2lucyBtYXkgdXNlIEpPSU5fT1JERVIoKSBt YW55IHRpbWVzLgorCitXZSB0YWtlIHRoZSBjYW5vbmljYWwgam9pbiBzdHJ1Y3R1cmUgdG8gYmUg YW4gb3V0ZXItZGVlcCB0cmVlLCBzbworSk9JTl9PUkRFUih0MSB0MiB0Mykgc2F5cyB0aGF0IHQx IGlzIHRoZSBkcml2aW5nIHRhYmxlIGFuZCBzaG91bGQgYmUgam9pbmVkCitmaXJzdCB0byB0MiBh bmQgdGhlbiB0byB0My4gSWYgdGhlIGpvaW4gcHJvYmxlbSBpbnZvbHZlcyBhZGRpdGlvbmFsIHRh YmxlcywKK3RoZXkgY2FuIGJlIGpvaW5lZCBpbiBhbnkgb3JkZXIgYWZ0ZXIgdGhlIGpvaW4gYmV0 d2VlbiB0MSwgdDIsIGFuZCB0MyBoYXMKK2JlZW4gY29uc3RydWN0dXJlZC4gR2VuZXJhdGVkIGpv aW4gYWR2aWNlIGFsd2F5cyBtZW50aW9ucyBhbGwgdGFibGVzCitpbiB0aGUgam9pbiBwcm9ibGVt LCBidXQgbWFudWFsbHkgd3JpdHRlbiBqb2luIGFkdmljZSBuZWVkIG5vdCBkbyBzby4KKworRm9y IHRyZWVzIHdoaWNoIGFyZSBub3Qgb3V0ZXItZGVlcCwgcGFyZW50aGVzZXMgY2FuIGJlIHVzZWQu IEZvciBleGFtcGxlLAorSk9JTl9PUkRFUih0MSAodDIgdDMpKSBzYXlzIHRoYXQgdGhlIHRvcC1s ZXZlbCBqb2luIHNob3VsZCBoYXZlIHQxIG9uIHRoZQorb3V0ZXIgc2lkZSBhbmQgYSBqb2luIGJl dHdlZW4gdDIgYW5kIHQzIG9uIHRoZSBpbm5lciBzaWRlLiBUaGF0IGpvaW4gc2hvdWxkCitiZSBj b25zdHJ1Y3RlZCBzbyB0aGF0IHQyIGlzIG9uIHRoZSBvdXRlciBzaWRlIGFuZCB0MyBpcyBvbiB0 aGUgaW5uZXIgc2lkZS4KKworSW4gc29tZSBjYXNlcywgaXQncyBub3QgcG9zc2libGUgdG8gZnVs bHkgc3BlY2lmeSB0aGUgam9pbiBvcmRlciBpbiB0aGlzIHdheS4KK0ZvciBleGFtcGxlLCBpZiB0 MiBhbmQgdDMgYXJlIGJlaW5nIHNjYW5uZWQgYnkgYSBzaW5nbGUgY3VzdG9tIHNjYW4gb3IgZm9y ZWlnbgorc2Nhbiwgb3IgaWYgYSBwYXJ0aXRpb253aXNlIGpvaW4gaXMgYmVpbmcgcGVyZm9ybWVk IGJldHdlZW4gdGhvc2UgdGFibGVzLCB0aGVuCitpdCdzIGltcG9zc2libGUgdG8gc2F5IHRoYXQg dDIgaXMgdGhlIG91dGVyIHRhYmxlIGFuZCB0MyBpcyB0aGUgaW5uZXIgdGFibGUsCitvciB0aGUg b3RoZXIgd2F5IGFyb3VuZDsgaXQncyBqdXN0IHVuZGVmaW5lZC4gSW4gc3VjaCBjYXNlcywgd2Ug Z2VuZXJhdGUKK2pvaW4gYWR2aWNlIHRoYXQgdXNlcyBjdXJseSBicmFjZXMsIGludGVuZGluZyB0 byBpbmRpY2F0ZSBhIGxhY2sgb2Ygb3JkZXJpbmc6CitKT0lOX09SREVSKHQxIHt0MiB0M30pIHNh eXMgdGhhdCB0aGUgdXBwZXJtb3N0IGpvaW4gc2hvdWxkIGhhdmUgdDEgb24gdGhlIG91dGVyCitz aWRlIGFuZCBzb21lIGtpbmQgb2Ygam9pbiBiZXR3ZWVuIHQyIGFuZCB0MyBvbiB0aGUgaW5uZXIg c2lkZSwgYnV0IHdpdGhvdXQKK3NheWluZyBob3cgdGhhdCBqb2luIG11c3QgYmUgcGVyZm9ybWVk IG9yIGFueXRoaW5nIGFib3V0IHdoaWNoIHJlbGF0aW9uIHNob3VsZAorYXBwZWFyIG9uIHdoaWNo IHNpZGUgb2YgdGhlIGpvaW4sIG9yIGV2ZW4gd2hldGhlciB0aGlzIGtpbmQgb2Ygam9pbiBoYXMg c2lkZXMuCisKK0pvaW4gU3RyYXRlZ3kgQWR2aWNlCis9PT09PT09PT09PT09PT09PT09PQorCitU YWdzIHN1Y2ggYXMgTkVTVEVEX0xPT1BfUExBSU4gc3BlY2lmeSB0aGUgbWV0aG9kIHRoYXQgc2hv dWxkIGJlIHVzZWQgdG8KK3BlcmZvcm0gYSBjZXJ0YWluIGpvaW4uIE1vcmUgc3BlY2lmaWNhbGx5 LCBORVNURURfTE9PUF9QTEFJTih4ICh5IHopKSBzYXlzCit0aGF0IHRoZSBwbGFuIHNob3VsZCBw dXQgdGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMgIngiIG9uIHRoZSBpbm5lcgorc2lk ZSBvZiBhIHBsYWluIG5lc3RlZCBsb29wIChvbmUgd2l0aG91dCBtYXRlcmlhbGl6YXRpb24gb3Ig bWVtb2l6YXRpb24pCithbmQgdGhhdCBpdCBzaG91bGQgYWxzbyBwdXQgYSBqb2luIGJldHdlZW4g dGhlIHJlbGF0aW9uIHdob3NlIGlkZW50aWZpZXIgaXMKKyJ5IiBhbmQgdGhlIHJlbGF0aW9uIHdo b3NlIGlkZW50aWZpZXIgaXMgInoiIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgbmVzdGVkCitsb29w LiBIZW5jZSwgZm9yIGFuIE4tdGFibGUgam9pbiBwcm9ibGVtLCB0aGVyZSB3aWxsIGJlIE4tMSBw aWVjZXMgb2Ygam9pbgorc3RyYXRlZ3kgYWR2aWNlOyBubyBqb2luIHN0cmF0ZWd5IGFkdmljZSBp cyByZXF1aXJlZCBmb3IgdGhlIG91dGVybW9zdAordGFibGUgaW4gdGhlIGpvaW4gcHJvYmxlbS4K KworQ29uc2lkZXJpbmcgdGhhdCB3ZSBoYXZlIGJvdGggam9pbiBvcmRlciBhZHZpY2UgYW5kIGpv aW4gc3RyYXRlZ3kgYWR2aWNlLAoraXQgbWlnaHQgc2VlbSBuYXR1cmFsIHRvIHNheSB0aGF0IE5F U1RFRF9MT09QX1BMQUlOKHgpIHNob3VsZCBiZSByZWRlZmluZWQKK3RvIG1lYW4gdGhhdCB4IHNo b3VsZCBhcHBlYXIgYnkgaXRzZWxmIG9uIG9uZSBzaWRlIG9yIHRoZSBvdGhlciBvZiBhIG5lc3Rl ZAorbG9vcCwgcmF0aGVyIHRoYW4gc3BlY2lmaWNhbGx5IG9uIHRoZSBpbm5lciBzaWRlLCBidXQg dGhpcyBkZWZpbml0aW9uIGFwcGVhcnMKK3VzZWxlc3MgaW4gcHJhY3RpY2UuIEl0IGdpdmVzIHRo ZSBwbGFubmVyIHRvbyBtdWNoIGZyZWVkb20gdG8gZG8gdGhpbmdzIHRoYXQKK2JlYXIgbGl0dGxl IHJlc2VtYmxhbmNlIHRvIHdoYXQgdGhlIHVzZXIgcHJvYmFibHkgaGFkIGluIG1pbmQuIFRoaXMg bWFrZXMKK29ubHkgYSBsaW1pdGVkIGFtb3VudCBvZiBwcmFjdGljYWwgZGlmZmVyZW5jZSBpbiB0 aGUgY2FzZSBvZiBhIG1lcmdlIGpvaW4gb3IKK3VucGFyYW1ldGVyaXplZCBuZXN0ZWQgbG9vcCwg YnV0IGZvciBhIHBhcmFtZXRlcml6ZWQgbmVzdGVkIGxvb3Agb3IgYSBoYXNoCitqb2luLCB0aGUg dHdvIHNpZGVzIGFyZSB0cmVhdGVkIHZlcnkgZGlmZmVyZW50bHkgYW5kIHNheWluZyB0aGF0IGEg Y2VydGFpbgorcmVsYXRpb24gc2hvdWxkIGJlIGludm9sdmVkIGluIG9uZSBvZiB0aG9zZSBvcGVy YXRpb25zIHdpdGhvdXQgc2F5aW5nIHdoaWNoCityb2xlIGl0IHNob3VsZCB0YWtlIGlzbid0IHNh eWluZyBtdWNoLgorCitUaGlzIGNob2ljZSBvZiBkZWZpbml0aW9uIGltcGxpZXMgdGhhdCBqb2lu IHN0cmF0ZWd5IGFkdmljZSBhbHNvIGltcG9zZXMgc29tZQoram9pbiBvcmRlciBjb25zdHJhaW50 cy4gRm9yIGV4YW1wbGUsIGdpdmVuIGEgam9pbiBiZXR3ZWVuIGZvbyBhbmQgYmFyLAorSEFTSF9K T0lOKGJhcikgaW1wbGllcyB0aGF0IGZvbyBpcyB0aGUgZHJpdmluZyB0YWJsZS4gT3RoZXJ3aXNl LCBpdCB3b3VsZAorYmUgaW1wb3NzaWJsZSB0byBwdXQgYmFyIGJlbmVhdGggdGhlIGlubmVyIHNp ZGUgb2YgYSBIYXNoIEpvaW4uCisKK05vdGUgdGhhdCwgZ2l2ZW4gdGhpcyBkZWZpbml0aW9uLCBp dCdzIHJlYXNvbmFibGUgdG8gY29uc2lkZXIgZGVsZXRpbmcgdGhlCitqb2luIG9yZGVyIGFkdmlj ZSBidXQgYXBwbHlpbmcgdGhlIGpvaW4gc3RyYXRlZ3kgYWR2aWNlLiBGb3IgZXhhbXBsZSwKK2Nv bnNpZGVyIGEgc3RhciBzY2hlbWEgd2l0aCB0YWJsZXMgZmFjdCwgZGltMSwgZGltMiwgZGltMywg ZGltNCwgYW5kIGRpbTUuCitUaGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYWR2aWNlIG1pZ2h0 IHNwZWNpZnkgSk9JTl9PUkRFUihmYWN0IGRpbTEgZGltMworZGltNCBkaW0yIGRpbTUpIEhBU0hf Sk9JTihkaW0yIGRpbTQpIE5FU1RFRF9MT09QX1BMQUlOKGRpbTEgZGltMyBkaW01KS4KK0RlbGV0 aW5nIHRoZSBKT0lOX09SREVSIGFkdmljZSBhbGxvd3MgdGhlIHBsYW5uZXIgdG8gcmVvcmRlciB0 aGUgam9pbnMKK2hvd2V2ZXIgaXQgbGlrZXMgd2hpbGUgc3RpbGwgZm9yY2luZyB0aGUgc2FtZSBj aG9pY2Ugb2Ygam9pbiBtZXRob2QuIFRoaXMKK3NlZW1zIHBvdGVudGlhbGx5IHVzZWZ1bCwgYW5k IGlzIG9uZSByZWFzb24gd2h5IGEgdW5pZmllZCBzeW50YXggdGhhdCBjb250cm9scworYm90aCBq b2luIG9yZGVyIGFuZCBqb2luIG1ldGhvZCBpbiBhIHNpbmdsZSBsb2N1dGlvbiB3YXMgbm90IGNo b3Nlbi4KKworQWR2aWNlIENvbXBsZXRlbmVzcworPT09PT09PT09PT09PT09PT09PQorCitBbiBl c3NlbnRpYWwgZ3VpZGluZyBwcmluY2lwbGUgaXMgdGhhdCBubyBpbmZlcmVuY2UgbWF5IG1hZGUg b24gdGhlIGJhc2lzCitvZiB0aGUgYWJzZW5jZSBvZiBhZHZpY2UuIFRoZSB1c2VyIGlzIGVudGl0 bGVkIHRvIHJlbW92ZSBhbnkgcG9ydGlvbiBvZiB0aGUKK2dlbmVyYXRlZCBhZHZpY2Ugd2hpY2gg dGhleSBkZWVtIHVuc3VpdGFibGUgb3IgY291bnRlcnByb2R1Y3RpdmUgYW5kIHRoZQorcmVzdWx0 IHNob3VsZCBvbmx5IGJlIHRvIGluY3JlYXNlIHRoZSBmbGV4aWJpbGl0eSBhZmZvcmRlZCB0byB0 aGUgcGxhbm5lci4KK1RoaXMgbWVhbnMgdGhhdCBpZiBhZHZpY2UgY2FuIHNheSB0aGF0IGEgY2Vy dGFpbiBvcHRpbWl6YXRpb24gb3IgdGVjaG5pcXVlCitzaG91bGQgYmUgdXNlZCwgaXQgc2hvdWxk IGFsc28gYmUgYWJsZSB0byBzYXkgdGhhdCB0aGUgb3B0aW1pemF0aW9uIG9yCit0ZWNobmlxdWUg c2hvdWxkIG5vdCBiZSB1c2VkLiBXZSBzaG91bGQgbmV2ZXIgYXNzdW1lIHRoYXQgdGhlIGFic2Vu Y2Ugb2YgYW4KK2luc3RydWN0aW9uIHRvIGRvIGEgY2VydGFpbiB0aGluZyBtZWFucyB0aGF0IGl0 IHNob3VsZCBub3QgYmUgZG9uZTsgYWxsCitpbnN0cnVjdGlvbnMgbXVzdCBiZSBleHBsaWNpdC4K KworU2VtaWpvaW4gVW5pcXVlbmVzcworPT09PT09PT09PT09PT09PT09PQorCitGYWNlZCB3aXRo IGEgc2VtaWpvaW4sIHRoZSBwbGFubmVyIGNvbnNpZGVycyBib3RoIGEgZGlyZWN0IGltcGxlbWVu dGF0aW9uCithbmQgYSBwbGFuIHdoZXJlIHRoZSBvbmUgc2lkZSBpcyBtYWRlIHVuaXF1ZSBhbmQg dGhlbiBhbiBpbm5lciBqb2luIGlzCitwZXJmb3JtZWQuIFdlIGVtaXQgU0VNSUpPSU5fVU5JUVVF KCkgYWR2aWNlIHdoZW4gdGhpcyB0cmFuc2Zvcm1hdGlvbiBvY2N1cnMKK2FuZCBTRU1JSk9JTl9O T05fVU5JUVVFKCkgYWR2aWNlIHdoZW4gaXQgZG9lc24ndC4gVGhlc2UgaXRlbXMgd29yayBsaWtl Citqb2luIHN0cmF0ZWd5IGFkdmljZTogdGhlIGlubmVyIHNpZGUgb2YgdGhlIHJlbGV2YW50IGpv aW4gaXMgbmFtZWQsIGFuZCB0aGUKK2Nob3NlbiBqb2luIG9yZGVyIG11c3QgYmUgY29tcGF0aWJs ZSB3aXRoIHRoZSBhZHZpY2UgaGF2aW5nIHNvbWUgZWZmZWN0LgorCitQYXJ0aXRpb253aXNlCis9 PT09PT09PT09PT09CisKK1BBUlRJVElPTldJU0UoKSBhZHZpc2UgY2FuIGJlIHVzZWQgdG8gc3Bl Y2lmeSBib3RoIHRob3NlIHBhcnRpdGlvbndpc2Ugam9pbnMKK3doaWNoIHNob3VsZCBiZSBwZXJm b3JtZWQgYW5kIHRob3NlIHdoaWNoIHNob3VsZCBub3QgYmUgcGVyZm9ybWVkOyB0aGUgaWRlYQor aXMgdGhhdCBlYWNoIGFyZ3VtZW50IHRvIFBBUlRJVElPTldJU0Ugc3BlY2lmaWVzIGEgc2V0IG9m IHJlbGF0aW9ucyB0aGF0CitzaG91bGQgYmUgc2Nhbm5lZCBwYXJ0aXRpb253aXNlIGFmdGVyIGJl aW5nIGpvaW5lZCB0byBlYWNoIG90aGVyIGFuZCBub3RoaW5nCitlbHNlLiBIZW5jZSwgZm9yIGV4 YW1wbGUsIFBBUlRJVElPTldJU0UoKHQxIHQyKSB0Mykgc3BlY2lmaWVzIHRoYXQgdGhlCitxdWVy eSBzaG91bGQgY29udGFpbiBhIHBhcnRpdGlvbndpc2Ugam9pbiBiZXR3ZWVuIHQxIGFuZCB0MiBh bmQgdGhhdCB0Mworc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIGFueSBwYXJ0aXRpb253aXNlIGpvaW4u IElmIHRoZXJlIGFyZSBubyBvdGhlciByZWxzCitpbiB0aGUgcXVlcnksIHNwZWNpZnlpbmcganVz dCBQQVJUSVRJT05XSVNFKCh0MSB0MikpIHdvdWxkIGhhdmUgdGhlIHNhbWUKK2VmZmVjdCwgc2lu Y2UgdGhlcmUgd291bGQgYmUgbm8gb3RoZXIgcmVscyB0byB3aGljaCB0MyBjb3VsZCBiZSBqb2lu ZWQgaW4KK2EgcGFydGl0aW9ud2lzZSBmYXNoaW9uLgorCitQYXJhbGxlbCBRdWVyeSAoR2F0aGVy LCBldGMuKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRWFjaCBhcmd1bWVudCB0 byBHQVRIRVIoKSBvciBHQVRIRVJfTUVSR0UoKSBpcyBhIHNpbmdsZSByZWxhdGlvbiBvciBhbgor ZXhhY3Qgc2V0IG9mIHJlbGF0aW9ucyBvbiB0b3Agb2Ygd2hpY2ggYSBHYXRoZXIgb3IgR2F0aGVy IE1lcmdlIG5vZGUsCityZXNwZWN0aXZlbHksIHNob3VsZCBiZSBwbGFjZWQuIEVhY2ggYXJndW1l bnQgdG8gTk9fR0FUSEVSKCkgaXMgYSBzaW5nbGUKK3JlbGF0aW9uIHRoYXQgc2hvdWxkIG5vdCBh cHBlYXIgYmVuZWF0aCBhbnkgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlOwordGhhdCBpcywg cGFyYWxsZWxpc20gc2hvdWxkIG5vdCBiZSB1c2VkLgorCitJbXBsaWNpdCBKb2luIE9yZGVyIENv bnN0cmFpbnRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4gSk9JTl9P UkRFUigpIGFkdmljZSBpcyBub3QgcHJvdmlkZWQgZm9yIGEgcGFydGljdWxhciBqb2luIHByb2Js ZW0sCitvdGhlciBwaWVjZXMgb2YgYWR2aWNlIG1heSBzdGlsbCBpbmNpZGVudGFsbHkgY29uc3Ry YWludCB0aGUgam9pbiBvcmRlci4KK0ZvciBleGFtcGxlLCBhIHVzZXIgd2hvIHNwZWNpZmllcyBI QVNIX0pPSU4oKGZvbyBiYXIpKSBpcyBleHBsaWNpdGx5IHNheWluZwordGhhdCB0aGVyZSBzaG91 bGQgYmUgYSBoYXNoIGpvaW4gd2l0aCBleGFjdGx5IGZvbyBhbmQgYmFyIG9uIHRoZSBvdXRlcgor c2lkZSBvZiBpdCwgYnV0IHRoYXQgYWxzbyBpbXBsaWVzIHRoYXQgZm9vIGFuZCBiYXIgbXVzdCBi ZSBqb2luZWQgdG8KK2VhY2ggb3RoZXIgYmVmb3JlIGVpdGhlciBvZiB0aGVtIGlzIGpvaW5lZCB0 byBhbnl0aGluZyBlbHNlLiBPdGhlcndpc2UsCit0aGUgam9pbiB0aGUgdXNlciBpcyBhdHRlbXB0 aW5nIHRvIGNvbnN0cmFpbnQgd29uJ3QgYWN0dWFsbHkgb2NjdXIgaW4gdGhlCitxdWVyeSwgd2hp Y2ggZW5kcyB1cCBsb29raW5nIGxpa2UgdGhlIHN5c3RlbSBoYXMganVzdCBkZWNpZGVkIHRvIGln bm9yZQordGhlIGFkdmljZSBhbHRvZ2V0aGVyLgorCitGdXR1cmUgV29yaworPT09PT09PT09PT0K KworV2UgZG9uJ3QgaGFuZGxlIGNob2ljZSBvZiBhZ2dyZWdhdGlvbjogaXQgd291bGQgYmUgbmlj ZSB0byBiZSBhYmxlIHRvIGZvcmNlCitzb3J0ZWQgb3IgZ3JvdXBlZCBhZ2dyZWdhdGlvbi4gSSdt IGd1ZXNzaW5nIHRoaXMgY2FuIGJlIGxlZnQgdG8gZnV0dXJlIHdvcmsuCisKK01vcmUgc2VyaW91 c2x5LCB3ZSBkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3aGlj aCBjb3VsZAoraGF2ZSBhIGxhcmdlIGltcGFjdCBvbiB0aGUgc2hhcGUgb2YgdGhlIHBsYW4gdHJl ZS4gWFhYOiBUaGlzIG5lZWRzIHNvbWUgc3R1ZHkKK3RvIGRldGVybWluZSBob3cgbGFyZ2UgYSBw cm9ibGVtIGl0IGlzLCBhbmQgbWlnaHQgbmVlZCB0byBiZSBmaXhlZCBzb29uZXIKK3JhdGhlciB0 aGFuIGxhdGVyLgorCitXZSBkb24ndCBvZmZlciBhbnkgY29udHJvbCBvdmVyIGVzdGltYXRlcywg b25seSBvdXRjb21lcy4gSXQgc2VlbXMgbGlrZSBhCitnb29kIGlkZWEgdG8gaW5jb3Jwb3JhdGUg dGhhdCBhYmlsaXR5IGF0IHNvbWUgZnV0dXJlIHBvaW50LCBhcyBwZ19oaW50X3BsYW4KK2RvZXMu IEhvd2V2ZXIsIHNpbmNlIHByaW1hcnkgZ29hbCBvZiB0aGUgaW5pdGlhbCBkZXZlbG9wbWVudCB3 b3JrIGlzIHRvIGJlCithYmxlIHRvIGluZHVjZSB0aGUgcGxhbm5lciB0byByZWNyZWF0ZSBhIGRl c2lyZWQgcGxhbiB0aGF0IHdvcmtlZCB3ZWxsIGluCit0aGUgcGFzdCwgdGhpcyBoYXMgbm90IGJl ZW4gaW5jbHVkZWQgaW4gdGhlIGluaXRpYWwgZGV2ZWxvcG1lbnQgZWZmb3J0LgorCitYWFggTmVl ZCB0byBpbnZlc3RpZ2F0ZSB3aGV0aGVyIGFuZCBob3cgd2VsbCBzdXBwbHlpbmcgYWR2aWNlIHdv cmtzIHdpdGggR0VRTwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3Rl ZC9nYXRoZXIub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9nYXRoZXIub3V0 Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wY2MwZGVkZjg1OQotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvZ2F0aGVyLm91 dApAQCAtMCwwICsxLDM3MSBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAxOworU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3QgPSAw OworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3QgPSAwOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9z Y2FuX3NpemUgPSAwOworU0VUIGRlYnVnX3BhcmFsbGVsX3F1ZXJ5ID0gb2ZmOworQ1JFQVRFIFRB QkxFIGd0X2RpbSAoaWQgc2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9kaW0gKGRpbSkgU0VMRUNU IHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFO QUxZWkUgZ3RfZGltOworQ1JFQVRFIFRBQkxFIGd0X2ZhY3QgKAorCWlkIGludCBub3QgbnVsbCwK KwlkaW1faWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGd0X2RpbSAoaWQpCispIFdJVEgg KGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGd0X2ZhY3QKKwlTRUxF Q1QgZywgKGclMykrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZBQ1VVTSBB TkFMWVpFIGd0X2ZhY3Q7CistLSBCeSBkZWZhdWx0LCB3ZSBleHBlY3QgR2F0aGVyIE1lcmdlIHdp dGggYSBwYXJhbGxlbCBoYXNoIGpvaW4uCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBk LmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0aGVyIE1lcmdlCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEK KyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBQ YXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0g ZC5pZCkKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYK KyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9JTihkKQorICAgU0VRX1NDQU4oZiBkKQor ICAgR0FUSEVSX01FUkdFKChmIGQpKQorKDE0IHJvd3MpCisKKy0tIEZvcmNlIEdhdGhlciBvciBH YXRoZXIgTWVyZ2Ugb2YgYm90aCByZWxhdGlvbnMgdG9nZXRoZXIuCitCRUdJTjsKK1NFVCBMT0NB TCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdlKChmIGQpKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4g Z3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CisgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0aGVyIE1lcmdl CisgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTog Zi5kaW1faWQKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg IEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxl bCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNo CisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRSgoZiBkKSkgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFT SF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVJfTUVSR0UoKGYgZCkpCisoMTYg cm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9m YWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBT b3J0CisgICBTb3J0IEtleTogZi5kaW1faWQKKyAgIC0+ICBHYXRoZXIKKyAgICAgICAgIFdvcmtl cnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFBhcmFsbGVsIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgICAgICAgICAgICAgLT4gIFBh cmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVs IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9k aW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgR0FUSEVSKChmIGQpKSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNI X0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIEdBVEhFUigoZiBkKSkKKygxNiByb3dzKQor CitDT01NSVQ7CistLSBGb3JjZSBhIHNlcGFyYXRlIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugb3Bl cmF0aW9uIGZvciBlYWNoIHJlbGF0aW9uLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZShmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRp bV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9 IGQuaWQpCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEK KyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBH YXRoZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAgICAgLT4gIFNv cnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisgICAgICAgICAgICAgICAtPiAgUGFy YWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdB VEhFUl9NRVJHRShmKSAvKiBtYXRjaGVkICovCisgICBHQVRIRVJfTUVSR0UoZCkgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVS R0VfSk9JTl9QTEFJTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSX01FUkdFKGYgZCkK KygyMCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihm IGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBn dF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsK KyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpv aW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU29ydAorICAgICAg ICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAg ICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2Nh biBvbiBndF9mYWN0IGYKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZC5pZAorICAg ICAgICAgLT4gIEdhdGhlcgorICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAg ICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIEdBVEhFUihmKSAvKiBtYXRjaGVkICovCisgICBHQVRIRVIoZCkgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQor ICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKGYgZCkK KygyMCByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcigo ZCBkL2QuZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JERVIgQlkg ZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1l cmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgR2F0aGVy IE1lcmdlCisgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAgICAgICAgIC0+ICBTb3J0Cisg ICAgICAgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgICAgICAgIC0+ICBQYXJh bGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2Rp bV9wa2V5IG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoKGQg ZC9kLmQpKSAvKiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgU0VRX1NDQU4o ZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuZ3RfZGltX3BrZXkpCisgICBHQVRIRVJfTUVSR0Uo ZikKKyAgIE5PX0dBVEhFUihkKQorKDE3IHJvd3MpCisKK0NPTU1JVDsKKy0tIEZvcmNlIGEgR2F0 aGVyIG9yIEdhdGhlciBNZXJnZSBvbiBvbmUgcmVsYXRpb24gYnV0IG5vIHBhcmFsbGVsaXNtIG9u IG90aGVyLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhl cl9tZXJnZShmKSBub19nYXRoZXIoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0g ZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkK KyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5lZDogMQorICAgICAg ICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBmLmRpbV9pZAorICAgICAgICAg ICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2ZhY3QgZgorICAgLT4gIEluZGV4IFNj YW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIEdBVEhFUl9NRVJHRShmKSAvKiBtYXRjaGVkICovCisgICBOT19HQVRIRVIoZCkgLyogbWF0 Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAg TUVSR0VfSk9JTl9QTEFJTihkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJs aWMuZ3RfZGltX3BrZXkpCisgICBHQVRIRVJfTUVSR0UoZikKKyAgIE5PX0dBVEhFUihkKQorKDE4 IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21lcmdl KGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9S REVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBT b3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBndF9mYWN0IGYKKyAgIC0+ICBHYXRoZXIgTWVyZ2UKKyAgICAgICAgIFdvcmtlcnMgUGxhbm5l ZDogMQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiBkLmlkCisg ICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGll ZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUl9NRVJHRShkKSAvKiBtYXRjaGVkICovCisgICBOT19H QVRIRVIoZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZiBkKQorICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAg R0FUSEVSX01FUkdFKGQpCisgICBOT19HQVRIRVIoZikKKygxOSByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmKSBub19nYXRoZXIoZCknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lO IGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2Ug Q29uZDogKGQuaWQgPSBmLmRpbV9pZCkKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGd0X2RpbV9w a2V5IG9uIGd0X2RpbSBkCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltX2lk CisgICAgICAgICAtPiAgR2F0aGVyCisgICAgICAgICAgICAgICBXb3JrZXJzIFBsYW5uZWQ6IDEK KyAgICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUihmKSAvKiBtYXRjaGVkICovCisgICBOT19HQVRI RVIoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZCBmKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVY X1NDQU4oZCBwdWJsaWMuZ3RfZGltX3BrZXkpCisgICBHQVRIRVIoZikKKyAgIE5PX0dBVEhFUihk KQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVy KGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNF TEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9S REVSIEJZIGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBT b3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBndF9mYWN0IGYKKyAgIC0+ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZC5pZAorICAgICAg ICAgLT4gIEdhdGhlcgorICAgICAgICAgICAgICAgV29ya2VycyBQbGFubmVkOiAxCisgICAgICAg ICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEdBVEhFUihkKSAvKiBtYXRjaGVkICovCisgICBOT19HQVRIRVIoZikgLyog bWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQor ICAgTUVSR0VfSk9JTl9QTEFJTihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgR0FUSEVSKGQpCisg ICBOT19HQVRIRVIoZikKKygxOSByb3dzKQorCitDT01NSVQ7CistLSBGb3JjZSBubyBHYXRoZXIg b3IgR2F0aGVyIE1lcmdlIHVzZSBhdCBhbGwuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnbm9fZ2F0aGVyKGYgZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoZC5pZCA9IGYuZGltX2lk KQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZ3RfZGltX3BrZXkgb24gZ3RfZGltIGQKKyAgIC0+ ICBTb3J0CisgICAgICAgICBTb3J0IEtleTogZi5kaW1faWQKKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBndF9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5PX0dBVEhFUihmKSAv KiBtYXRjaGVkICovCisgICBOT19HQVRIRVIoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQor ICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuZ3RfZGltX3BrZXkpCisgICBO T19HQVRIRVIoZiBkKQorKDE1IHJvd3MpCisKK0NPTU1JVDsKKy0tIENhbid0IGZvcmNlIEdhdGhl ciBNZXJnZSB3aXRob3V0IHRoZSBPUkRFUiBCWSBjbGF1c2UsIGJ1dCBqdXN0IEdhdGhlciBpcyBP Sy4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVy Z2UoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0aGVyCisgICBEaXNhYmxl ZDogdHJ1ZQorICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2lu CisgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAtPiAgUGFy YWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaAor ICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBTY2FuIG9uIGd0X2RpbSBkCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVJfTUVSR0UoKGYgZCkpIC8qIG1hdGNoZWQsIGZhaWxl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFT SF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoKGYgZCkpCisoMTUgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYg Sk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgR2F0aGVyCisgICBXb3JrZXJzIFBsYW5uZWQ6IDEKKyAg IC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0g ZC5pZCkKKyAgICAgICAgIC0+ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBndF9mYWN0IGYKKyAgICAg ICAgIC0+ICBQYXJhbGxlbCBIYXNoCisgICAgICAgICAgICAgICAtPiAgUGFyYWxsZWwgU2VxIFNj YW4gb24gZ3RfZGltIGQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEdBVEhFUigoZiBkKSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBk KQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBHQVRIRVIoKGYgZCkpCiso MTQgcm93cykKKworQ09NTUlUOworLS0gVGVzdCBjb25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSBub19nYXRo ZXIoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9N IGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBPUkRFUiBCWSBkLmlk OworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEdhdGhlciBNZXJnZQorICAgV29ya2VycyBQbGFubmVkOiAxCisgICAtPiAgU29ydAorICAg ICAgICAgU29ydCBLZXk6IGYuZGltX2lkCisgICAgICAgICAtPiAgUGFyYWxsZWwgSGFzaCBKb2lu CisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAgICAgICAg ICAgICAtPiAgUGFyYWxsZWwgU2VxIFNjYW4gb24gZ3RfZmFjdCBmCisgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcmFsbGVsIFNlcSBT Y2FuIG9uIGd0X2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBHQVRIRVIoKGYgZCkp IC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBmYWlsZWQgKi8KKyAgIE5PX0dBVEhFUihmKSAvKiBt YXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgor ICAgSk9JTl9PUkRFUihmIGQpCisgICBIQVNIX0pPSU4oZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAg IEdBVEhFUl9NRVJHRSgoZiBkKSkKKygxNyByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0IGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9leHBlY3RlZC9qb2luX29yZGVyLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uZGIwZGNlZjcwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2pvaW5fb3JkZXIub3V0CkBAIC0wLDAgKzEsNTA5 IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlciA9IDA7CitDUkVBVEUgVEFCTEUgam9fZGltMSAoaWQgaW50ZWdlciBwcmltYXJ5IGtl eSwgZGltMSB0ZXh0LCB2YWwxIGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBqb19kaW0xIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3Nv bWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19kaW0xOworQ1JFQVRFIFRBQkxFIGpvX2Rp bTIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFsMiBpbnQpCisJV0lUSCAo YXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZGltMiAoaWQsIGRp bTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIGZpbGxlciB0ZXh0ICcgfHwgZywgKGcgJSA3KSAr IDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpv X2RpbTI7CitDUkVBVEUgVEFCTEUgam9fZmFjdCAoCisJaWQgaW50IHByaW1hcnkga2V5LAorCWRp bTFfaWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvX2RpbTEgKGlkKSwKKwlkaW0yX2lk IGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0yIChpZCkKKykgV0lUSCAoYXV0b3Zh Y3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9fZmFjdAorCVNFTEVDVCBnLCAo ZyUxMDApKzEsIChnJTEwMCkrMSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMCkgZzsKK1ZB Q1VVTSBBTkFMWVpFIGpvX2ZhY3Q7CistLSBXZSBleHBlY3QgdG8gam9pbiB0byBkMiBmaXJzdCBh bmQgdGhlbiBkMSwgc2luY2UgdGhlIGNvbmRpdGlvbiBvbiBkMgorLS0gaXMgbW9yZSBzZWxlY3Rp dmUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19m YWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQg Sk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5E IHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAg IEhhc2ggQ29uZDogKGYuZGltMV9pZCA9IGQxLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgSGFzaCBDb25kOiAoZi5kaW0yX2lkID0gZDIuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAx KQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBIQVNIX0pPSU4oZDIgZDEpCisgICBTRVFfU0NBTihm IGQyIGQxKQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTYgcm93cykKKworLS0gRm9yY2UgYSBm ZXcgZGlmZmVyZW50IGpvaW4gb3JkZXJzLiBTb21lIG9mIHRoZXNlIGFyZSB2ZXJ5IGluZWZmaWNp ZW50LAorLS0gYnV0IHRoZSBwbGFubmVyIGNvbnNpZGVycyB0aGVtIGFsbCB2aWFibGUuCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQxIGQy KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19m YWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQg Sk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5E IHZhbDIgPSAxOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAg IEhhc2ggQ29uZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgSGFzaCBDb25kOiAoZi5kaW0xX2lkID0gZDEuaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gam9fZmFjdCBmCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2RpbTEgZDEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAx KQorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAg ICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IEpPSU5fT1JERVIoZiBkMSBkMikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikKKyAgIEhBU0hfSk9JTihkMSBkMikKKyAgIFNFUV9T Q0FOKGYgZDEgZDIpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitTRVQgTE9D QUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMiBkMSknOworRVhQTEFJ TiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVG VCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGlt MiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsK KyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6 IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29u ZDogKGYuZGltMl9pZCA9IGQyLmlkKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3Qg ZgorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19k aW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBI YXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVS KGYgZDIgZDEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKGYgZDIgZDEpCisgICBIQVNIX0pPSU4oZDIgZDEpCisgICBTRVFfU0NBTihmIGQyIGQx KQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCisoMTggcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQxIGYgZDIpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19k aW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5k aW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltMl9pZCA9 IGQyLmlkKQorICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgSGFzaCBDb25kOiAoZDEuaWQgPSBm LmRpbTFfaWQpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAgICAg ICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDEgZiBkMikgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDEgZiBkMikKKyAg IEhBU0hfSk9JTihmIGQyKQorICAgU0VRX1NDQU4oZDEgZiBkMikKKyAgIE5PX0dBVEhFUihmIGQx IGQyKQorKDE4IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9p bl9vcmRlcihmIChkMSBkMikpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9p ZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlX SEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAg TWVyZ2UgQ29uZDogKChmLmRpbTJfaWQgPSBkMi5pZCkgQU5EIChmLmRpbTFfaWQgPSBkMS5pZCkp CisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBLZXk6IGYuZGltMl9pZCwgZi5kaW0xX2lkCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgU29ydAorICAgICAgICAg U29ydCBLZXk6IGQyLmlkLCBkMS5pZAorICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZiAoZDEgZDIpKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4g QWR2aWNlOgorICAgSk9JTl9PUkRFUihmIChkMSBkMikpCisgICBNRVJHRV9KT0lOX1BMQUlOKChk MSBkMikpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMikKKyAgIFNFUV9TQ0FOKGYgZDEg ZDIpCisgICBOT19HQVRIRVIoZiBkMSBkMikKKygyMSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiB7ZDEgZDJ9KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4g am9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9O IGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6ICgoZi5kaW0yX2lkID0gZDIuaWQpIEFO RCAoZi5kaW0xX2lkID0gZDEuaWQpKQorICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBm LmRpbTJfaWQsIGYuZGltMV9pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgor ICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBkMi5pZCwgZDEuaWQKKyAgICAgICAgIC0+ ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIK KyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAg LT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisg U3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYge2QxIGQyfSkgLyogbWF0Y2hl ZCwgZmFpbGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIChk MiBkMSkpCisgICBNRVJHRV9KT0lOX1BMQUlOKChkMSBkMikpCisgICBORVNURURfTE9PUF9NQVRF UklBTElaRShkMSkKKyAgIFNFUV9TQ0FOKGYgZDIgZDEpCisgICBOT19HQVRIRVIoZiBkMSBkMikK KygyMSByb3dzKQorCitDT01NSVQ7CistLSBGb3JjZSBhIGpvaW4gb3JkZXIgYnkgbWVudGlvbmlu ZyBqdXN0IGEgcHJlZml4IG9mIHRoZSBqb2luIGxpc3QuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2Rp bTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRp bTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6 IChkMi5pZCA9IGYuZGltMl9pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAg ICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChmLmRpbTFfaWQgPSBkMS5pZCkKKyAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBKT0lOX09SREVSKGQyKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiAoZiBkMSkpCisgICBIQVNIX0pPSU4oZDEgKGYg ZDEpKQorICAgU0VRX1NDQU4oZDIgZiBkMSkKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQorKDE4IHJv d3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMiBk MSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9f ZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZU IEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFO RCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAoKGQy LmlkID0gZi5kaW0yX2lkKSBBTkQgKGQxLmlkID0gZi5kaW0xX2lkKSkKKyAgIC0+ICBTb3J0Cisg ICAgICAgICBTb3J0IEtleTogZDIuaWQsIGQxLmlkCisgICAgICAgICAtPiAgTmVzdGVkIExvb3AK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6 ZQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIFNvcnQKKyAg ICAgICAgIFNvcnQgS2V5OiBmLmRpbTJfaWQsIGYuZGltMV9pZAorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIGpvX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihk MiBkMSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JE RVIoZDIgZDEgZikKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVS SUFMSVpFKGQxKQorICAgU0VRX1NDQU4oZDIgZDEgZikKKyAgIE5PX0dBVEhFUihmIGQxIGQyKQor KDIxIHJvd3MpCisKK0NPTU1JVDsKKy0tIGpvX2ZhY3QgaXMgbm90IHBhcnRpdGlvbmVkLCBidXQg bGV0J3MgdHJ5IHByZXRlbmRpbmcgdGhhdCBpdCBpcyBhbmQKKy0tIHZlcmlmeWluZyB0aGF0IHRo ZSBhZHZpY2UgZG9lcyBub3QgYXBwbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmL2QxIGQxIGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGlt MSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGlt Ml9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDogdHJ1ZQorICAgLT4gIE5lc3RlZCBMb29wCisgICAg ICAgICBEaXNhYmxlZDogdHJ1ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgor ICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9fZGltMV9wa2V5IG9uIGpvX2RpbTEgZDEK KyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltMV9pZCkKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9fZGltMl9w a2V5IG9uIGpvX2RpbTIgZDIKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltMl9pZCkK KyAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg Sk9JTl9PUkRFUihmL2QxIGQxIGQyKSAvKiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikKKyAgIE5FU1RFRF9MT09QX1BM QUlOKGQxIGQyKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZDEgcHVibGljLmpvX2Rp bTFfcGtleSBkMiBwdWJsaWMuam9fZGltMl9wa2V5KQorICAgTk9fR0FUSEVSKGYgZDEgZDIpCiso MTkgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVy KGYvZDEgKGQxIGQyKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0g ZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJF IHZhbDEgPSAxIEFORCB2YWwyID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBE aXNhYmxlZDogdHJ1ZQorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBmLmRpbTFfaWQpIEFORCAo ZDIuaWQgPSBmLmRpbTJfaWQpKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisg ICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBq b19kaW0yIGQyCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5f T1JERVIoZi9kMSAoZDEgZDIpKSAvKiBwYXJ0aWFsbHkgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQ bGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDEgZDIgZikKKyAgIE5FU1RFRF9MT09QX1BMQUlO KGYpCisgICBORVNURURfTE9PUF9NQVRFUklBTElaRShkMikKKyAgIFNFUV9TQ0FOKGQxIGQyIGYp CisgICBOT19HQVRIRVIoZiBkMSBkMikKKygxOCByb3dzKQorCitDT01NSVQ7CistLSBUaGUgdW51 c3VhbCBmb3JtdWxhdGlvbiBvZiB0aGlzIHF1ZXJ5IGlzIGludGVuZGVkIHRvIHByZXZlbnQgdGhl IHF1ZXJ5CistLSBwbGFubmVyIGZyb20gcmVkdWNpbmcgdGhlIEZVTEwgSk9JTiB0byBzb21lIG90 aGVyIGpvaW4gdHlwZSwgc28gdGhhdCB3ZQorLS0gY2FuIHRlc3Qgd2hhdCBoYXBwZW5zIHdpdGgg YSBqb2luIHR5cGUgdGhhdCBjYW5ub3QgYmUgcmVvcmRlcmVkLgorRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpv X2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAw KQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1Ig KGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIE1l cmdlIENvbmQ6ICgoKGQyLmlkICsgMCkpID0gKChmLmRpbTJfaWQgKyAwKSkpCisgICAgICAgICAt PiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIuaWQgKyAwKSkKKyAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgU29ydCBLZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gam9fZmFjdCBmCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9J Tl9PUkRFUihkMiBmIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgTkVTVEVEX0xPT1Bf TUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQorICAgTk9fR0FUSEVSKGQxIGYg ZDIpCisoMTggcm93cykKKworLS0gV2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGZvcmNlIHRoZSBw bGFubmVyIHRvIGpvaW4gZiB0byBkMSBmaXJzdCwgYmVjYXVzZQorLS0gdGhhdCBpcyBub3QgYSB2 YWxpZCBqb2luIG9yZGVyLCBidXQgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZm9yY2UgdGhlIHBsYW5u ZXIKKy0tIHRvIG1ha2UgZWl0aGVyIGQyIG9yIGYgdGhlIGRyaXZpbmcgdGFibGUuCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmIGQxIGQyKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19kaW0x IGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGlt Ml9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lk IElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisg ICBKb2luIEZpbHRlcjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxM KSkKKyAgIC0+ICBNZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIERpc2FibGVkOiB0cnVlCisgICAg ICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0yX2lkICsgMCkpKQorICAg ICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsgMCkpCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAgLT4gIFNv cnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIFNlcSBTY2FuIG9uIGpvX2Rp bTEgZDEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkMSBkMikgLyog cGFydGlhbGx5IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGQyIGYgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGYpCisgICBORVNURURfTE9PUF9QTEFJ TihkMSkKKyAgIFNFUV9TQ0FOKGQyIGYgZDEpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMSBy b3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBk MiBkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g am9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBP TiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYu ZGltMV9pZCBJUyBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRl cjogKChkMS5pZCA9IGYuZGltMV9pZCkgT1IgKGYuZGltMV9pZCBJUyBOVUxMKSkKKyAgIC0+ICBN ZXJnZSBGdWxsIEpvaW4KKyAgICAgICAgIE1lcmdlIENvbmQ6ICgoKGYuZGltMl9pZCArIDApKSA9 ICgoZDIuaWQgKyAwKSkpCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBL ZXk6ICgoZi5kaW0yX2lkICsgMCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9f ZmFjdCBmCisgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgU29ydCBLZXk6ICgoZDIu aWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0yIGQyCisgICAt PiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19kaW0xIGQxCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZDIgZDEpCisgICBNRVJH RV9KT0lOX1BMQUlOKGQyKQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFf U0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGQxIGYgZDIpCisoMjAgcm93cykKKworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQyIGYgZDEpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJ Tk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsg MCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVM TDsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoZDEuaWQgPSBm LmRpbTFfaWQpIE9SIChmLmRpbTFfaWQgSVMgTlVMTCkpCisgICAtPiAgTWVyZ2UgRnVsbCBKb2lu CisgICAgICAgICBNZXJnZSBDb25kOiAoKChkMi5pZCArIDApKSA9ICgoZi5kaW0yX2lkICsgMCkp KQorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGQyLmlkICsg MCkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMiBkMgorICAgICAgICAg LT4gIFNvcnQKKyAgICAgICAgICAgICAgIFNvcnQgS2V5OiAoKGYuZGltMl9pZCArIDApKQorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorICAgLT4gIE1hdGVyaWFsaXpl CisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9fZGltMSBkMQorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihkMiBmIGQxKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBs YW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkMiBmIGQxKQorICAgTUVSR0VfSk9JTl9QTEFJTihm KQorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihkMiBmIGQxKQor ICAgTk9fR0FUSEVSKGQxIGYgZDIpCisoMjAgcm93cykKKworQ09NTUlUOworLS0gVHdvIGluY29t cGF0aWJsZSBqb2luIG9yZGVycyBzaG91bGQgY29uZmxpY3QuIEluIHRoZSBzZWNvbmQgY2FzZSwK Ky0tIHRoZSBjb25mbGljdCBpcyBpbXBsaWNpdDogaWYgZDEgaXMgb24gdGhlIGlubmVyIHNpZGUg b2YgYSBqb2luIG9mIGFueQorLS0gdHlwZSwgaXQgY2Fubm90IGFsc28gYmUgdGhlIGRyaXZpbmcg dGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9v cmRlcihmKSBqb2luX29yZGVyKGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwg Sk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQg PSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExv b3AKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lkIElT IE5VTEwpKQorICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgTWVyZ2UgQ29uZDogKCgo Zi5kaW0yX2lkICsgMCkpID0gKChkMi5pZCArIDApKSkKKyAgICAgICAgIC0+ICBTb3J0CisgICAg ICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJfaWQgKyAwKSkKKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYKKyAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAg ICBTb3J0IEtleTogKChkMi5pZCArIDApKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGpvX2RpbTIgZDIKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGpvX2RpbTEgZDEKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZikgLyog bWF0Y2hlZCwgY29uZmxpY3RpbmcgKi8KKyAgIEpPSU5fT1JERVIoZDEpIC8qIG1hdGNoZWQsIGNv bmZsaWN0aW5nLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09S REVSKGYgZDIgZDEpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQyKQorICAgTkVTVEVEX0xPT1BfTUFU RVJJQUxJWkUoZDEpCisgICBTRVFfU0NBTihmIGQyIGQxKQorICAgTk9fR0FUSEVSKGQxIGYgZDIp CisoMjEgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29y ZGVyKGQxKSBoYXNoX2pvaW4oZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0Up CitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBK T0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9 IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBPUiAoZi5kaW0xX2lk IElTIE5VTEwpKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTEgZDEKKyAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgLT4gIE1lcmdlIEZ1bGwgSm9pbgorICAgICAgICAgICAgICAgTWVyZ2Ug Q29uZDogKCgoZDIuaWQgKyAwKSkgPSAoKGYuZGltMl9pZCArIDApKSkKKyAgICAgICAgICAgICAg IC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogKChkMi5pZCArIDApKQor ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAg ICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogKChmLmRpbTJf aWQgKyAwKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBqb19mYWN0IGYK KyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZDEpIC8qIG1hdGNoZWQsIGNv bmZsaWN0aW5nICovCisgICBIQVNIX0pPSU4oZDEpIC8qIG1hdGNoZWQsIGNvbmZsaWN0aW5nLCBm YWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQxIChkMiBm KSkKKyAgIE1FUkdFX0pPSU5fUExBSU4oZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKChm IGQyKSkKKyAgIFNFUV9TQ0FOKGQxIGQyIGYpCisgICBOT19HQVRIRVIoZDEgZiBkMikKKygyMSBy b3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVj dGVkL2pvaW5fc3RyYXRlZ3kub3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9q b2luX3N0cmF0ZWd5Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u ODI1Y2NhNTE1ODQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4 cGVjdGVkL2pvaW5fc3RyYXRlZ3kub3V0CkBAIC0wLDAgKzEsMzM4IEBACitMT0FEICdwZ19wbGFu X2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitDUkVB VEUgVEFCTEUgam9pbl9kaW0gKGlkIHNlcmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lU SCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9kaW0gKGRp bSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOwor VkFDVVVNIEFOQUxZWkUgam9pbl9kaW07CitDUkVBVEUgVEFCTEUgam9pbl9mYWN0ICgKKwlpZCBp bnQgcHJpbWFyeSBrZXksCisJZGltX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb2lu X2RpbSAoaWQpCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJ TlRPIGpvaW5fZmFjdAorCVNFTEVDVCBnLCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MTAwMDAwKSBnOworQ1JFQVRFIElOREVYIGpvaW5fZmFjdF9kaW1faWQgT04gam9pbl9mYWN0IChk aW1faWQpOworVkFDVVVNIEFOQUxZWkUgam9pbl9mYWN0OworLS0gV2UgZXhwZWN0IGEgaGFzaCBq b2luIGJ5IGRlZmF1bHQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVD VCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsK KyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9 IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBIYXNoCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisg ICBOT19HQVRIRVIoZiBkKQorKDEwIHJvd3MpCisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggam9pbiBt ZXRob2QgaW4gdHVybiB3aXRoIGpvaW5fZGltIGFzIHRoZSBpbm5lciB0YWJsZS4KKy0tIEFsbCBv ZiB0aGVzZSBzaG91bGQgd29yayBleGNlcHQgZm9yIE1FUkdFX0pPSU5fTUFURVJJQUxJWkU7IHRo YXQgd2lsbAorLS0gZmFpbCwgYmVjYXVzZSB0aGUgcGxhbm5lciBrbm93cyB0aGF0IGpvaW5fZGlt IChpZCkgaXMgdW5pcXVlLCBhbmQgd2lsbAorLS0gcmVmdXNlIHRvIGFkZCBtYXJrL3Jlc3RvcmUg b3ZlcmhlYWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFT SF9KT0lOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKGYuZGltX2lkID0gZC5p ZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEhhc2gKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBqb2luX2RpbSBkCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBI QVNIX0pPSU4oZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpP SU5fT1JERVIoZiBkKQorICAgSEFTSF9KT0lOKGQpCisgICBTRVFfU0NBTihmIGQpCisgICBOT19H QVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYu ZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBEaXNhYmxl ZDogdHJ1ZQorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2 aWNlOgorICAgTUVSR0VfSk9JTl9NQVRFUklBTElaRShkKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE1FUkdFX0pP SU5fUExBSU4oZCkKKyAgIElOREVYX1NDQU4oZiBwdWJsaWMuam9pbl9mYWN0X2RpbV9pZCBkIHB1 YmxpYy5qb2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxMiByb3dzKQorCitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ01FUkdFX0pPSU5fUExBSU4oZCknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBm IEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKGYuZGltX2lkID0gZC5pZCkKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgTUVSR0VfSk9JTl9QTEFJTihkKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBNRVJHRV9KT0lOX1BMQUlOKGQp CisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQgZCBwdWJsaWMuam9pbl9k aW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTEgcm93cykKKworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGYuZGltX2lkID0gZC5p ZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIE1hdGVyaWFsaXplCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZCkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAgTkVTVEVEX0xPT1BfTUFURVJJ QUxJWkUoZCkKKyAgIFNFUV9TQ0FOKGYgZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykK KworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NRU1PSVpF KGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBq b2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBNZW1vaXpl CisgICAgICAgICBDYWNoZSBLZXk6IGYuZGltX2lkCisgICAgICAgICBDYWNoZSBNb2RlOiBsb2dp Y2FsCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5f ZGltIGQKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGYuZGltX2lkKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfTUVNT0laRShkKSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURf TE9PUF9NRU1PSVpFKGQpCisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5q b2luX2RpbV9wa2V5KQorICAgTk9fR0FUSEVSKGYgZCkKKygxNSByb3dzKQorCitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09QX1BMQUlOKGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4g b24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24g am9pbl9kaW0gZAorICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJTihkKSAvKiBtYXRjaGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpCisgICBORVNURURfTE9P UF9QTEFJTihkKQorICAgU0VRX1NDQU4oZikKKyAgIElOREVYX1NDQU4oZCBwdWJsaWMuam9pbl9k aW1fcGtleSkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworQ09NTUlUOworLS0gTm93 IHRyeSBmb3JjaW5nIGVhY2ggam9pbiBtZXRob2QgaW4gdHVybiB3aXRoIGpvaW5fZmFjdCBhcyB0 aGUgaW5uZXIKKy0tIHRhYmxlLiBBbGwgb2YgdGhlc2Ugc2hvdWxkIHdvcmsuCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSEFTSF9KT0lOKGYpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhh c2ggSm9pbgorICAgSGFzaCBDb25kOiAoZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIFNlcSBTY2Fu IG9uIGpvaW5fZGltIGQKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9p bl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEhBU0hfSk9JTihmKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBI QVNIX0pPSU4oZikKKyAgIFNFUV9TQ0FOKGQgZikKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVS SUFMSVpFKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAgIE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1f aWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQK KyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9m YWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTUVS R0VfSk9JTl9NQVRFUklBTElaRShmKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9KT0lOX01BVEVSSUFMSVpFKGYpCisg ICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkgZiBwdWJsaWMuam9pbl9mYWN0X2Rp bV9pZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9G RiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGlt IGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEpvaW4KKyAg IE1lcmdlIENvbmQ6IChkLmlkID0gZi5kaW1faWQpCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBq b2luX2RpbV9wa2V5IG9uIGpvaW5fZGltIGQKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5f ZmFjdF9kaW1faWQgb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE1F UkdFX0pPSU5fUExBSU4oZikgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoZCBmKQorICAgTUVSR0VfSk9JTl9QTEFJTihmKQorICAgSU5ERVhfU0NB TihkIHB1YmxpYy5qb2luX2RpbV9wa2V5IGYgcHVibGljLmpvaW5fZmFjdF9kaW1faWQpCisgICBO T19HQVRIRVIoZiBkKQorKDExIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQ TEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBP TiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBO ZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2Vx IFNjYW4gb24gam9pbl9kaW0gZAorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gam9pbl9mYWN0IGYKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIE5FU1RFRF9M T09QX01BVEVSSUFMSVpFKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBKT0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09QX01BVEVSSUFMSVpFKGYpCisgICBT RVFfU0NBTihkIGYpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0laRShmKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBM b29wCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAorICAgLT4gIE1lbW9pemUKKyAgICAg ICAgIENhY2hlIEtleTogZC5pZAorICAgICAgICAgQ2FjaGUgTW9kZTogbG9naWNhbAorICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9mYWN0X2RpbV9pZCBvbiBqb2luX2ZhY3QgZgor ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGRpbV9pZCA9IGQuaWQpCisgU3VwcGxpZWQgUGxh biBBZHZpY2U6CisgICBORVNURURfTE9PUF9NRU1PSVpFKGYpIC8qIG1hdGNoZWQgKi8KKyBHZW5l cmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGQgZikKKyAgIE5FU1RFRF9MT09QX01F TU9JWkUoZikKKyAgIFNFUV9TQ0FOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGljLmpvaW5fZmFj dF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZiknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9p bl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIFNlcSBT Y2FuIG9uIGpvaW5fZGltIGQKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZmFjdF9kaW1f aWQgb24gam9pbl9mYWN0IGYKKyAgICAgICAgIEluZGV4IENvbmQ6IChkaW1faWQgPSBkLmlkKQor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgTkVTVEVEX0xPT1BfUExBSU4oZikgLyogbWF0Y2hl ZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZCBmKQorICAgTkVT VEVEX0xPT1BfUExBSU4oZikKKyAgIFNFUV9TQ0FOKGQpCisgICBJTkRFWF9TQ0FOKGYgcHVibGlj LmpvaW5fZmFjdF9kaW1faWQpCisgICBOT19HQVRIRVIoZiBkKQorKDEyIHJvd3MpCisKK0NPTU1J VDsKKy0tIE5vbi13b3JraW5nIGNhc2VzLiBXZSBjYW4ndCBmb3JjZSBhIGZvcmVpZ24gam9pbiBi ZXR3ZWVuIHRoZXNlIHRhYmxlcywKKy0tIGJlY2F1c2UgdGhleSBhcmVuJ3QgZm9yZWlnbiB0YWJs ZXMuIFdlIGFsc28gY2FuJ3QgdXNlIHR3byBkaWZmZXJlbnQKKy0tIHN0cmF0ZWdpZXMgb24gdGhl IHNhbWUgdGFibGUsIG5vciBjYW4gd2UgcHV0IGJvdGggdGFibGVzIG9uIHRoZSBpbm5lcgorLS0g c2lkZSBvZiB0aGUgc2FtZSBqb2luLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0ZPUkVJR05fSk9JTigoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIERpc2FibGVkOiB0cnVlCisgICAtPiAgU2VxIFNj YW4gb24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkg b24gam9pbl9kaW0gZAorICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3Vw cGxpZWQgUGxhbiBBZHZpY2U6CisgICBGT1JFSUdOX0pPSU4oKGYgZCkpIC8qIG1hdGNoZWQsIGZh aWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZiBkKQorICAg TkVTVEVEX0xPT1BfUExBSU4oZCkKKyAgIFNFUV9TQ0FOKGYpCisgICBJTkRFWF9TQ0FOKGQgcHVi bGljLmpvaW5fZGltX3BrZXkpCisgICBOT19HQVRIRVIoZiBkKQorKDEzIHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZikgTkVTVEVE X0xPT1BfTUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9 IGQuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBKb2luCisgICBNZXJnZSBDb25kOiAo ZC5pZCA9IGYuZGltX2lkKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9pbl9kaW1fcGtleSBv biBqb2luX2RpbSBkCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBqb2luX2ZhY3RfZGltX2lkIG9u IGpvaW5fZmFjdCBmCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJ TihmKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgICBORVNURURfTE9PUF9N QVRFUklBTElaRShmKSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihkIGYpCisgICBNRVJHRV9KT0lOX1BMQUlO KGYpCisgICBJTkRFWF9TQ0FOKGQgcHVibGljLmpvaW5fZGltX3BrZXkgZiBwdWJsaWMuam9pbl9m YWN0X2RpbV9pZCkKKyAgIE5PX0dBVEhFUihmIGQpCisoMTIgcm93cykKKworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9QTEFJTihmIGQpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lO IGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4g b24gam9pbl9mYWN0IGYKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGpvaW5fZGltX3BrZXkgb24g am9pbl9kaW0gZAorICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZi5kaW1faWQpCisgU3VwcGxp ZWQgUGxhbiBBZHZpY2U6CisgICBORVNURURfTE9PUF9QTEFJTihmKSAvKiBtYXRjaGVkLCBmYWls ZWQgKi8KKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKGQp CisgICBTRVFfU0NBTihmKQorICAgSU5ERVhfU0NBTihkIHB1YmxpYy5qb2luX2RpbV9wa2V5KQor ICAgTk9fR0FUSEVSKGYgZCkKKygxMyByb3dzKQorCitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL2xvY2FsX2NvbGxlY3Rvci5vdXQKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYyYWRlZjM5ZWQ4Ci0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9sb2NhbF9jb2xsZWN0b3Iub3V0CkBA IC0wLDAgKzEsNjcgQEAKK0NSRUFURSBFWFRFTlNJT04gcGdfcGxhbl9hZHZpY2U7CitTRVQgZGVi dWdfcGFyYWxsZWxfcXVlcnkgPSBvZmY7CistLSBUcnkgY2xlYXJpbmcgYWR2aWNlIGJlZm9yZSB3 ZSd2ZSBjb2xsZWN0ZWQgYW55LgorU0VMRUNUIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZp Y2UoKTsKKyBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgCisoMSByb3cpCisKKy0tIFNldCBhIHNtYWxsIGFkdmljZSBj b2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgd2UnbGwgZXhjZWVkIGl0LgorU0VUIHBnX3BsYW5fYWR2 aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyOworLS0gRW5hYmxlIHRoZSBjb2xsZWN0b3Iu CitTRVQgcGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVjdG9yID0gb247CistLSBTZXQgdXAgYSBk dW1teSB0YWJsZS4KK0NSRUFURSBUQUJMRSBkdW1teV90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXks IGIgdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSwgcGFyYWxsZWxfd29y a2VycyA9IDApOworLS0gVGVzdCBxdWVyaWVzLgorU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSBh LCBkdW1teV90YWJsZSBiOworIGEgfCBiIHwgYSB8IGIgCistLS0rLS0tKy0tLSstLS0KKygwIHJv d3MpCisKK1NFTEVDVCAqIEZST00gZHVtbXlfdGFibGU7CisgYSB8IGIgCistLS0rLS0tCisoMCBy b3dzKQorCistLSBTaG91bGQgcmV0dXJuIHRoZSBhZHZpY2UgZnJvbSB0aGUgc2Vjb25kIHRlc3Qg cXVlcnkuCitTRUxFQ1QgYWR2aWNlIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Uo KSBPUkRFUiBCWSBpZCBERVNDIExJTUlUIDE7CisgICAgICAgICBhZHZpY2UgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNFUV9TQ0FOKGR1bW15X3RhYmxlKSArCisgTk9fR0FU SEVSKGR1bW15X3RhYmxlKQorKDEgcm93KQorCistLSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmljZSBh Z2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgcGdfY2xl YXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIAorKDEgcm93KQorCistLSBSYWlzZSB0aGUgY29sbGVjdGlvbiBsaW1pdCBzbyB0aGF0 IHRoZSBjb2xsZWN0b3IgdXNlcyBtdWx0aXBsZSBjaHVua3MuCitTRVQgcGdfcGxhbl9hZHZpY2Uu bG9jYWxfY29sbGVjdGlvbl9saW1pdCA9IDIwMDA7CistLSBQdXNoIGEgYnVuY2ggb2YgcXVlcmll cyB0aHJvdWdoIHRoZSBjb2xsZWN0b3IuCitETyAkJAorQkVHSU4KKwlGT1IgeCBJTiAxLi4yMDAw IExPT1AKKwkJRVhFQ1VURSAnU0VMRUNUICogRlJPTSBkdW1teV90YWJsZSc7CisJRU5EIExPT1A7 CitFTkQKKyQkOworLS0gQ2hlY2sgdGhhdCB0aGUgY29sbGVjdG9yIHdvcmtlZC4KK1NFTEVDVCBD T1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisgY291bnQgCist LS0tLS0tCisgIDIwMDAKKygxIHJvdykKKworLS0gQW5kIGNsZWFyIG9uZSBtb3JlIHRpbWUsIHRv IHZlcmlmeSB0aGF0IHRoaXMgZG9lc24ndCBjYXVzZSBhIHByb2JsZW0KKy0tIGV2ZW4gd2l0aCBh IGxhcmdlciBudW1iZXIgb2YgZW50cmllcy4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9j YWxfYWR2aWNlKCk7CisgcGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2FkdmljZSAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0IGIvY29udHJpYi9w Z19wbGFuX2FkdmljZS9leHBlY3RlZC9wYXJ0aXRpb253aXNlLm91dApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmIzZDBhODI0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9j b250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3BhcnRpdGlvbndpc2Uub3V0CkBAIC0wLDAg KzEsNDI2IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtl cnNfcGVyX2dhdGhlciA9IDA7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiA9IHRydWU7 CitDUkVBVEUgVEFCTEUgcHQxIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBkaW0xIHRleHQsIHZh bDEgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0MWEgUEFS VElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92 YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFiIFBBUlRJVElPTiBPRiBw dDEgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQxYyBQQVJUSVRJT04gT0YgcHQxIEZPUiBW QUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gcHQxIChpZCwgZGltMSwgdmFsMSkKKwlTRUxFQ1QgZywgJ3Nv bWUgZmlsbGVyIHRleHQgJyB8fCBnLCAoZyAlIDMpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHQxOworQ1JFQVRFIFRBQkxFIHB0MiAoaWQg aW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwyIGludCkKKwlQQVJUSVRJT04gQlkg UkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdDJhIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVF UyBGUk9NICgxKSB0byAoMTAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7 CitDUkVBVEUgVEFCTEUgcHQyYiBQQVJUSVRJT04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMTAw MSkgdG8gKDIwMDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRF IFRBQkxFIHB0MmMgUEFSVElUSU9OIE9GIHB0MiBGT1IgVkFMVUVTIEZST00gKDIwMDEpIHRvICgz MDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0 MiAoaWQsIGRpbTIsIHZhbDIpCisJU0VMRUNUIGcsICdzb21lIG90aGVyIHRleHQgJyB8fCBnLCAo ZyAlIDUpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDIpIGc7CitWQUNVVU0g QU5BTFlaRSBwdDI7CitDUkVBVEUgVEFCTEUgcHQzIChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBk aW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRB QkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVTIEZST00gKDEpIHRvICgxMDAxKQor CVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDNiIFBB UlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAxKSB0byAoMjAwMSkKKwlXSVRIIChh dXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHQzYyBQQVJUSVRJT04g T0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMwMDEpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQzIChpZCwgZGltMywgdmFsMykKKwlT RUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBnLCAoZyAlIDcpICsgMQorCSAgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDMpIGc7CitWQUNVVU0gQU5BTFlaRSBwdDM7CitDUkVB VEUgVEFCTEUgcHRtaXNtYXRjaCAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltbSB0ZXh0LCB2 YWxtIGludCkKKwlQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwdG1pc21h dGNoYSBQQVJUSVRJT04gT0YgcHRtaXNtYXRjaAorICAgIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8g KDE1MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxF IHB0bWlzbWF0Y2hiIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAgRk9SIFZBTFVFUyBGUk9N ICgxNTAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJ TlNFUlQgSU5UTyBwdG1pc21hdGNoIChpZCwgZGltbSwgdmFsbSkKKwlTRUxFQ1QgZywgJ3lldCBh bm90aGVyIHRleHQgJyB8fCBnLCAoZyAlIDIpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwzMDAwKSBnOworVkFDVVVNIEFOQUxZWkUgcHRtaXNtYXRjaDsKK0VYUExBSU4gKFBMQU5fQURW SUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlk ID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9 IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMS5pZCA9IHB0 M18xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEgcHQyXzEKKyAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhh c2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisgICAgICAgICAgICAgICBJ bmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEg PSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQorICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjog KHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBG aWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWJfcGtl eSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMi5p ZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29w CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJf My5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmMgcHQy XzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNjIHB0 M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0MV8zCisgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQy L3B1YmxpYy5wdDJhIHB0My9wdWJsaWMucHQzYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09S REVSKHB0Mi9wdWJsaWMucHQyYiBwdDMvcHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAg Sk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQx YykKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIg cHQxL3B1YmxpYy5wdDFjKQorICAgSEFTSF9KT0lOKHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGlj LnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgU0VRX1NDQU4ocHQyL3B1YmxpYy5wdDJhIHB0My9w dWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1Ymxp Yy5wdDJjIHB0My9wdWJsaWMucHQzYykKKyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1 YmxpYy5wdDFhX3BrZXkgcHQxL3B1YmxpYy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEv cHVibGljLnB0MWMgcHVibGljLnB0MWNfcGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIg cHQzKSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9w dWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1Ymxp Yy5wdDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQor KDQ3IHJvd3MpCisKKy0tIFN1cHByZXNzIHBhcnRpdGlvbndpc2Ugam9pbiwgb3IgZG8gaXQganVz dCBwYXJ0aWFsbHkuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn UEFSVElUSU9OV0lTRShwdDEgcHQyIHB0MyknOworRVhQTEFJTiAoUExBTl9BRFZJQ0UsIENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gcHQxLCBwdDIsIHB0MyBXSEVSRSBwdDEuaWQgPSBwdDIuaWQg QU5EIHB0Mi5pZCA9IHB0My5pZAorICAgQU5EIHZhbDEgPSAxIEFORCB2YWwyID0gMSBBTkQgdmFs MyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgIEhhc2gg Q29uZDogKHB0Mi5pZCA9IHB0My5pZCkKKyAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0Ml8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8y CisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 ICh2YWwyID0gMSkKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgQXBwZW5k CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNfMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9 IDEpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3Br ZXkgb24gcHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlk KQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKGlkID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisg ICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFjX3BrZXkgb24gcHQxYyBwdDFfMworICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyLmlkKQorICAgICAgICAgICAgICAgRmls dGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNF KHB0MSkgLyogbWF0Y2hlZCAqLworICAgUEFSVElUSU9OV0lTRShwdDIpIC8qIG1hdGNoZWQgKi8K KyAgIFBBUlRJVElPTldJU0UocHQzKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgSk9JTl9PUkRFUihwdDIgcHQzIHB0MSkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHB0 MSkKKyAgIEhBU0hfSk9JTihwdDMpCisgICBTRVFfU0NBTihwdDIvcHVibGljLnB0MmEgcHQyL3B1 YmxpYy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EKKyAgICBwdDMvcHVibGlj LnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorICAgSU5ERVhfU0NBTihwdDEvcHVibGljLnB0MWEgcHVi bGljLnB0MWFfcGtleSBwdDEvcHVibGljLnB0MWIgcHVibGljLnB0MWJfcGtleQorICAgIHB0MS9w dWJsaWMucHQxYyBwdWJsaWMucHQxY19wa2V5KQorICAgUEFSVElUSU9OV0lTRShwdDIgcHQzIHB0 MSkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJs aWMucHQxYyBwdDIvcHVibGljLnB0MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5w dDJjIHB0My9wdWJsaWMucHQzYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQz IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lT RSgocHQxIHB0MikgcHQzKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlk ID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKHB0MS5pZCA9IHB0My5pZCkKKyAgIC0+ICBBcHBl bmQKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0 MV8xLmlkID0gcHQyXzEuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYSBw dDFfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAgICAgICAg ICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmEg cHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQxXzIuaWQg PSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFiIHB0MV8yCisg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYiBwdDJfMgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAt PiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDFfMy5pZCA9IHB0Ml8z LmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MWMgcHQxXzMKKyAgICAgICAg ICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgIC0+ICBIYXNoCisgICAg ICAgICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYSBwdDNf MQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMyA9IDEpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMwor ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgU3VwcGxpZWQgUGxhbiBB ZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0Y2hlZCAqLworICAgUEFS VElUSU9OV0lTRShwdDMpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKHB0MS9wdWJsaWMucHQxYSBwdDIvcHVibGljLnB0MmEpCisgICBKT0lOX09S REVSKHB0MS9wdWJsaWMucHQxYiBwdDIvcHVibGljLnB0MmIpCisgICBKT0lOX09SREVSKHB0MS9w dWJsaWMucHQxYyBwdDIvcHVibGljLnB0MmMpCisgICBKT0lOX09SREVSKHtwdDEgcHQyfSBwdDMp CisgICBIQVNIX0pPSU4ocHQyL3B1YmxpYy5wdDJhIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGlj LnB0MmMgcHQzKQorICAgU0VRX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB0Mi9wdWJsaWMucHQyYSBw dDEvcHVibGljLnB0MWIgcHQyL3B1YmxpYy5wdDJiCisgICAgcHQxL3B1YmxpYy5wdDFjIHB0Mi9w dWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQzL3B1Ymxp Yy5wdDNjKQorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKQorICAgTk9fR0FUSEVSKHB0 MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjIHB0Mi9wdWJsaWMu cHQyYQorICAgIHB0Mi9wdWJsaWMucHQyYiBwdDIvcHVibGljLnB0MmMgcHQzL3B1YmxpYy5wdDNh IHB0My9wdWJsaWMucHQzYiBwdDMvcHVibGljLnB0M2MpCisoNDcgcm93cykKKworQ09NTUlUOwor LS0gVGVzdCBjb25mbGljdGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgKHB0MSBwdDMpKSc7CitFWFBM QUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQz IFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9 IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQKKyAgIERpc2FibGVkOiB0 cnVlCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHB0Ml8xLmlkID0gcHQzXzEuaWQpCisgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo dmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYV9wa2V5 IG9uIHB0MWEgcHQxXzEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8xLmlk KQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AK KyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8y LmlkID0gcHQzXzIuaWQpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYiBwdDJf MgorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2IgcHQz XzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgcHQxYl9wa2V5IG9uIHB0MWIgcHQxXzIKKyAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHB0Ml8yLmlkKQorICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMSA9IDEpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4K KyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHB0Ml8zLmlkID0gcHQzXzMuaWQpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQyYyBwdDJfMworICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAodmFsMiA9IDEpCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2MgcHQzXzMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcg cHQxY19wa2V5IG9uIHB0MWMgcHQxXzMKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9 IHB0Ml8zLmlkKQorICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBQQVJUSVRJT05XSVNFKChwdDEgcHQyKSkgLyogbWF0Y2hlZCwgY29u ZmxpY3RpbmcsIGZhaWxlZCAqLworICAgUEFSVElUSU9OV0lTRSgocHQxIHB0MykpIC8qIG1hdGNo ZWQsIGNvbmZsaWN0aW5nLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQxL3B1YmxpYy5wdDFh KQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9wdWJs aWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYyBw dDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEgcHQx L3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDMvcHVibGljLnB0 M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0Mi9wdWJs aWMucHQyYSBwdDMvcHVibGljLnB0M2EgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQzYgor ICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0MS9w dWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQxYl9w a2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJT05X SVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9wdWJs aWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1YmxpYy5w dDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0My9w dWJsaWMucHQzYykKKyg1MSByb3dzKQorCitDT01NSVQ7CistLSBDYW4ndCBmb3JjZSBhIHBhcnRp dGlvbndpc2Ugam9pbiB3aXRoIGEgbWlzbWF0Y2hlZCB0YWJsZS4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKChwdDEgcHRtaXNtYXRjaCkp JzsKK0VYUExBSU4gKFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwg cHRtaXNtYXRjaCBXSEVSRSBwdDEuaWQgPSBwdG1pc21hdGNoLmlkOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUK KyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDFhIHB0MV8xCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHQxYiBwdDFfMgorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB0MWMgcHQxXzMKKyAgIC0+ICBBcHBlbmQKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IHB0bWlzbWF0Y2hhX3BrZXkgb24gcHRtaXNtYXRjaGEgcHRtaXNtYXRjaF8xCisgICAgICAgICAg ICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDEuaWQpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBwdG1pc21hdGNoYl9wa2V5IG9uIHB0bWlzbWF0Y2hiIHB0bWlzbWF0Y2hfMgorICAgICAg ICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQxLmlkKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSAvKiBtYXRjaGVkLCBmYWlsZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHB0MSBwdG1pc21hdGNo KQorICAgTkVTVEVEX0xPT1BfUExBSU4ocHRtaXNtYXRjaCkKKyAgIFNFUV9TQ0FOKHB0MS9wdWJs aWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSU5ERVhfU0NBTihw dG1pc21hdGNoL3B1YmxpYy5wdG1pc21hdGNoYSBwdWJsaWMucHRtaXNtYXRjaGFfcGtleQorICAg IHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiIHB1YmxpYy5wdG1pc21hdGNoYl9wa2V5KQor ICAgUEFSVElUSU9OV0lTRShwdDEgcHRtaXNtYXRjaCkKKyAgIE5PX0dBVEhFUihwdDEvcHVibGlj LnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYworICAgIHB0bWlzbWF0Y2gvcHVi bGljLnB0bWlzbWF0Y2hhIHB0bWlzbWF0Y2gvcHVibGljLnB0bWlzbWF0Y2hiKQorKDIyIHJvd3Mp CisKK0NPTU1JVDsKKy0tIEZvcmNlIGpvaW4gb3JkZXIgZm9yIGEgcGFydGljdWxhciBicmFuY2gg b2YgdGhlIHBhcnRpdGlvbndpc2Ugam9pbiB3aXRoCistLSBhbmQgd2l0aG91dCBtZW50aW9uaW5n IHRoZSBzY2hlbWEgbmFtZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdKT0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1Ymxp Yy5wdDFhKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlk CisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQK KyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAocHQzXzEuaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdDNhIHB0M18xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwz ID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHQyYSBwdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVy OiAodmFsMiA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFhX3BrZXkgb24g cHQxYSBwdDFfMQorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzEuaWQpCisg ICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzIuaWQg PSBwdDNfMi5pZCkKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJiIHB0Ml8yCisg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYiBwdDNfMgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAt PiAgSW5kZXggU2NhbiB1c2luZyBwdDFiX3BrZXkgb24gcHQxYiBwdDFfMgorICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGlkID0gcHQyXzIuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2 YWwxID0gMSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgSGFzaCBDb25kOiAocHQyXzMuaWQgPSBwdDNfMy5pZCkKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJjIHB0Ml8zCisgICAgICAgICAgICAgICAgICAgICBGaWx0 ZXI6ICh2YWwyID0gMSkKKyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHQzYyBwdDNfMworICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmlsdGVyOiAodmFsMyA9IDEpCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBwdDFj X3BrZXkgb24gcHQxYyBwdDFfMworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gcHQy XzMuaWQpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwxID0gMSkKKyBTdXBwbGllZCBQbGFu IEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBw dDEvcHVibGljLnB0MWEpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6Cisg ICBKT0lOX09SREVSKHB0My9wdWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQxL3B1YmxpYy5w dDFhKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0MmIgcHQzL3B1YmxpYy5wdDNiIHB0MS9w dWJsaWMucHQxYikKKyAgIEpPSU5fT1JERVIocHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQz YyBwdDEvcHVibGljLnB0MWMpCisgICBORVNURURfTE9PUF9QTEFJTihwdDEvcHVibGljLnB0MWEg cHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYykKKyAgIEhBU0hfSk9JTihwdDIvcHVibGlj LnB0MmEgcHQzL3B1YmxpYy5wdDNiIHB0My9wdWJsaWMucHQzYykKKyAgIFNFUV9TQ0FOKHB0My9w dWJsaWMucHQzYSBwdDIvcHVibGljLnB0MmEgcHQyL3B1YmxpYy5wdDJiIHB0My9wdWJsaWMucHQz YgorICAgIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2MpCisgICBJTkRFWF9TQ0FOKHB0 MS9wdWJsaWMucHQxYSBwdWJsaWMucHQxYV9wa2V5IHB0MS9wdWJsaWMucHQxYiBwdWJsaWMucHQx Yl9wa2V5CisgICAgcHQxL3B1YmxpYy5wdDFjIHB1YmxpYy5wdDFjX3BrZXkpCisgICBQQVJUSVRJ T05XSVNFKChwdDEgcHQyIHB0MykpCisgICBOT19HQVRIRVIocHQxL3B1YmxpYy5wdDFhIHB0MS9w dWJsaWMucHQxYiBwdDEvcHVibGljLnB0MWMgcHQyL3B1YmxpYy5wdDJhCisgICAgcHQyL3B1Ymxp Yy5wdDJiIHB0Mi9wdWJsaWMucHQyYyBwdDMvcHVibGljLnB0M2EgcHQzL3B1YmxpYy5wdDNiIHB0 My9wdWJsaWMucHQzYykKKyg0OSByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0pPSU5fT1JERVIocHQzL3B0M2EgcHQyL3B0MmEgcHQxL3B0MWEpJzsKK0VYUExBSU4g KFBMQU5fQURWSUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hF UkUgcHQxLmlkID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBB TkQgdmFsMiA9IDEgQU5EIHZhbDMgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3RlZCBMb29w CisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDNf MS5pZCA9IHB0Ml8xLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0M2EgcHQz XzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDMgPSAxKQorICAgICAgICAgICAg ICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDJhIHB0 Ml8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwyID0gMSkKKyAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWFfcGtleSBvbiBwdDFhIHB0MV8xCisgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMS5pZCkKKyAgICAgICAgICAgICAgIEZpbHRl cjogKHZhbDEgPSAxKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwdDJfMi5pZCA9IHB0M18yLmlkKQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB0MmIgcHQyXzIKKyAgICAgICAgICAgICAgICAgICAg IEZpbHRlcjogKHZhbDIgPSAxKQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdDNiIHB0M18yCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBGaWx0ZXI6ICh2YWwzID0gMSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5n IHB0MWJfcGtleSBvbiBwdDFiIHB0MV8yCisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQg PSBwdDJfMi5pZCkKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDEgPSAxKQorICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENv bmQ6IChwdDJfMy5pZCA9IHB0M18zLmlkKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB0MmMgcHQyXzMKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAxKQorICAg ICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdDNjIHB0M18zCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh2YWwzID0g MSkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHB0MWNfcGtleSBvbiBwdDFjIHB0MV8z CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBwdDJfMy5pZCkKKyAgICAgICAgICAg ICAgIEZpbHRlcjogKHZhbDEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9P UkRFUihwdDMvcHQzYSBwdDIvcHQyYSBwdDEvcHQxYSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMu cHQyYSBwdDEvcHVibGljLnB0MWEpCisgICBKT0lOX09SREVSKHB0Mi9wdWJsaWMucHQyYiBwdDMv cHVibGljLnB0M2IgcHQxL3B1YmxpYy5wdDFiKQorICAgSk9JTl9PUkRFUihwdDIvcHVibGljLnB0 MmMgcHQzL3B1YmxpYy5wdDNjIHB0MS9wdWJsaWMucHQxYykKKyAgIE5FU1RFRF9MT09QX1BMQUlO KHB0MS9wdWJsaWMucHQxYSBwdDEvcHVibGljLnB0MWIgcHQxL3B1YmxpYy5wdDFjKQorICAgSEFT SF9KT0lOKHB0Mi9wdWJsaWMucHQyYSBwdDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQor ICAgU0VRX1NDQU4ocHQzL3B1YmxpYy5wdDNhIHB0Mi9wdWJsaWMucHQyYSBwdDIvcHVibGljLnB0 MmIgcHQzL3B1YmxpYy5wdDNiCisgICAgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYykK KyAgIElOREVYX1NDQU4ocHQxL3B1YmxpYy5wdDFhIHB1YmxpYy5wdDFhX3BrZXkgcHQxL3B1Ymxp Yy5wdDFiIHB1YmxpYy5wdDFiX3BrZXkKKyAgICBwdDEvcHVibGljLnB0MWMgcHVibGljLnB0MWNf cGtleSkKKyAgIFBBUlRJVElPTldJU0UoKHB0MSBwdDIgcHQzKSkKKyAgIE5PX0dBVEhFUihwdDEv cHVibGljLnB0MWEgcHQxL3B1YmxpYy5wdDFiIHB0MS9wdWJsaWMucHQxYyBwdDIvcHVibGljLnB0 MmEKKyAgICBwdDIvcHVibGljLnB0MmIgcHQyL3B1YmxpYy5wdDJjIHB0My9wdWJsaWMucHQzYSBw dDMvcHVibGljLnB0M2IgcHQzL3B1YmxpYy5wdDNjKQorKDQ5IHJvd3MpCisKK0NPTU1JVDsKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvcHJlcGFyZWQub3V0IGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA3YTdjNjIzNjU5Ci0tLSAvZGV2L251bGwKKysr IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9wcmVwYXJlZC5vdXQKQEAgLTAsMCAr MSw2NyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJz X3Blcl9nYXRoZXIgPSAwOworQ1JFQVRFIFRBQkxFIHB0YWIgKGlkIGludGVnZXIsIHZhbCB0ZXh0 KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitTRVQgcGdfcGxhbl9hZHZpY2Uu YWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gZmFsc2U7CistLSBOb3QgcHJlcGFyZWQsIHNv IGFkdmljZSBzaG91bGQgYmUgZ2VuZXJhdGVkLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgCitTRUxFQ1QgKiBGUk9NIHB0YWI7CisgICAgICAgUVVFUlkgUExBTiAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKyBHZW5lcmF0ZWQgUGxh biBBZHZpY2U6CisgICBTRVFfU0NBTihwdGFiKQorICAgTk9fR0FUSEVSKHB0YWIpCisoNCByb3dz KQorCistLSBQcmVwYXJlZCwgc28gYWR2aWNlIHNob3VsZCBub3QgYmUgZ2VuZXJhdGVkLgorUFJF UEFSRSBwdDEgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgRVhFQ1VURSBwdDE7CisgICAgUVVFUlkgUExBTiAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFs d2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWU7CistLSBQcmVwYXJlZCwgYnV0IGFsd2F5 c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGFkdmljZS4KK1BS RVBBUkUgcHQyIEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpIEVYRUNVVEUgcHQyOworICAgICAgIFFVRVJZIFBMQU4gICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwdGFiCisgR2VuZXJhdGVkIFBsYW4gQWR2 aWNlOgorICAgU0VRX1NDQU4ocHRhYikKKyAgIE5PX0dBVEhFUihwdGFiKQorKDQgcm93cykKKwor LS0gTm90IHByZXBhcmVkLCBzbyBmZWVkYmFjayBzaG91bGQgYmUgZ2VuZXJhdGVkLgorU0VUIHBn X3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IGZhbHNlOworU0VUIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihwdGFiKSc7CitFWFBMQUlOIChDT1NUUyBP RkYpIAorU0VMRUNUICogRlJPTSBwdGFiOworICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcHRhYgor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocHRhYikgLyogbWF0Y2hlZCAqLwor KDMgcm93cykKKworLS0gUHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQgbm90IGJlIGdlbmVyYXRl ZC4KK1BSRVBBUkUgcHQzIEFTIFNFTEVDVCAqIEZST00gcHRhYjsKK0VYUExBSU4gKENPU1RTIE9G RikgRVhFQ1VURSBwdDE7CisgICAgUVVFUlkgUExBTiAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLQor IFNlcSBTY2FuIG9uIHB0YWIKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19z dG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWU7CistLSBQcmVwYXJlZCwgYnV0IGFsd2F5c19zdG9y ZV9hZHZpY2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGZlZWRiYWNrLgorUFJFUEFS RSBwdDQgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgRVhFQ1VURSBwdDI7CisgICAgICAgUVVFUlkgUExBTiAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB0YWIKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTihwdGFiKQorICAgTk9fR0FUSEVSKHB0YWIpCisoNCByb3dzKQorCmRpZmYg LS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0IGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zY2FuLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uOTM2NjUyMzVkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL2V4cGVjdGVkL3NjYW4ub3V0CkBAIC0wLDAgKzEsNzU3IEBACitMT0FE ICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9 IDA7CitTRVQgc2VxX3BhZ2VfY29zdCA9IDAuMTsKK1NFVCByYW5kb21fcGFnZV9jb3N0ID0gMC4x OworU0VUIGNwdV90dXBsZV9jb3N0ID0gMDsKK1NFVCBjcHVfaW5kZXhfdHVwbGVfY29zdCA9IDA7 CitDUkVBVEUgVEFCTEUgc2Nhbl90YWJsZSAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCkKKwlX SVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzY2FuX3RhYmxl CisJU0VMRUNUIGcsICdzb21lIHRleHQgJyB8fCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEw MDAwMCkgZzsKK0NSRUFURSBJTkRFWCBzY2FuX3RhYmxlX2IgT04gc2Nhbl90YWJsZSBVU0lORyBi cmluIChiKTsKK1ZBQ1VVTSBBTkFMWVpFIHNjYW5fdGFibGU7CistLSBTZXF1ZW50aWFsIHNjYW4K K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJs ZTsKKyAgICAgICBRVUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4oc2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDQgcm93cykKKwor LS0gSW5kZXggc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNj YW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5P X0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gSW5kZXgtb25seSBzY2FuCitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hF UkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90 YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBO T19HQVRIRVIoc2Nhbl90YWJsZSkKKyg1IHJvd3MpCisKKy0tIEJpdG1hcCBoZWFwIHNjYW4KK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQor CVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gc2Nhbl90YWJsZQorICAg UmVjaGVjayBDb25kOiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisgICAtPiAgQml0bWFwIElu ZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9iCisgICAgICAgICBJbmRleCBDb25kOiAoYiA+ICdzb21l IHRleHQgOCc6OnRleHQpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBf U0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX2IpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg3IHJvd3MpCisKKy0tIFRJRCBzY2FuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7Cisg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBUaWQgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBUSUQgQ29uZDogKGN0 aWQgPSAnKDAsMSknOjp0aWQpCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4o c2Nhbl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDUgcm93cykKKworLS0gVElE IHJhbmdlIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZS T00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBjdGlkIDwgJygyLDEpJzsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgVGlkIFJhbmdlIFNjYW4gb24gc2Nhbl90YWJsZQorICAgVElEIENv bmQ6ICgoY3RpZCA+ICcoMSwxKSc6OnRpZCkgQU5EIChjdGlkIDwgJygyLDEpJzo6dGlkKSkKKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihzY2FuX3RhYmxlKQorICAgTk9fR0FU SEVSKHNjYW5fdGFibGUpCisoNSByb3dzKQorCistLSBUcnkgZm9yY2luZyBlYWNoIG9mIG91ciB0 ZXN0IHF1ZXJpZXMgdG8gdXNlIHRoZSBzY2FuIHR5cGUgdGhleQorLS0gd2FudGVkIHRvIHVzZSBh bnl3YXkuIFRoaXMgc2hvdWxkIHN1Y2NlZWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oc2Nhbl90YWJsZSknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkK Kyg2IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NB TihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXgg U2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDog KGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9f R0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxl IFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9w a2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05M WV9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihz Y2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBi ID4gJ3NvbWUgdGV4dCA4JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJpdG1hcCBIZWFwIFNjYW4gb24gc2Nhbl90YWJs ZQorICAgUmVjaGVjayBDb25kOiAoYiA+ICdzb21lIHRleHQgOCc6OnRleHQpCisgICAtPiAgQml0 bWFwIEluZGV4IFNjYW4gb24gc2Nhbl90YWJsZV9iCisgICAgICAgICBJbmRleCBDb25kOiAoYiA+ ICdzb21lIHRleHQgOCc6OnRleHQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBCSVRNQVBf SEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5z Y2FuX3RhYmxlX2IpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg5IHJvd3MpCisKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnVElEX1NDQU4oc2Nhbl90YWJsZSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdI RVJFIGN0aWQgPSAnKDAsMSknOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGlkIFNjYW4gb24g c2Nhbl90YWJsZQorICAgVElEIENvbmQ6IChjdGlkID0gJygwLDEpJzo6dGlkKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRI RVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGN0aWQgPiAnKDEsMSknIEFORCBj dGlkIDwgJygyLDEpJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVGlkIFJhbmdlIFNjYW4gb24gc2Nhbl90 YWJsZQorICAgVElEIENvbmQ6ICgoY3RpZCA+ICcoMSwxKSc6OnRpZCkgQU5EIChjdGlkIDwgJygy LDEpJzo6dGlkKSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFi bGUpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBUSURfU0NBTihz Y2FuX3RhYmxlKQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitDT01NSVQ7 CistLSBUcnkgdG8gZm9yY2UgYSBmdWxsIHNjYW4gb2YgdGhlIHRhYmxlIHRvIHVzZSBzb21lIG90 aGVyIHNjYW4gdHlwZS4gQWxsCistLSBvZiB0aGVzZSB3aWxsIGZhaWwuIEFuIGluZGV4IHNjYW4g b3IgYml0bWFwIGhlYXAgc2NhbiBjb3VsZCBwb3RlbnRpYWxseQorLS0gZ2VuZXJhdGUgdGhlIGNv cnJlY3QgYW5zd2VyLCBidXQgdGhlIHBsYW5uZXIgZG9lcyBub3QgZXZlbiBjb25zaWRlciB0aGVz ZQorLS0gcG9zc2liaWxpdGllcyBkdWUgdG8gdGhlIGxhY2sgb2YgYSBXSEVSRSBjbGF1c2UuCitC RUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2Fu X3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBm YWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxl KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVf cGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2Fu X3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSU5E RVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkLCBmYWls ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxlKQor ICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9h ZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3Br ZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2Fu X3RhYmxlCisgICBEaXNhYmxlZDogdHJ1ZQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgQklU TUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwgZmFp bGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkK KyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CisgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2Nhbl90YWJsZQorICAgRGlz YWJsZWQ6IHRydWUKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFRJRF9TQ0FOKHNjYW5fdGFi bGUpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNF UV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK K0NPTU1JVDsKKy0tIFRyeSBhZ2FpbiB0byBmb3JjZSBpbmRleCB1c2UuIFRoaXMgc2hvdWxkIG5v dyBzdWNjZWVkIGZvciB0aGUgSU5ERVhfU0NBTgorLS0gYW5kIEJJVE1BUF9IRUFQX1NDQU4sIGJ1 dCB0aGUgSU5ERVhfT05MWV9TQ0FOIGNhbid0IGJlIGZvcmNlZCBiZWNhdXNlIHRoZQorLS0gcXVl cnkgZmV0Y2hlcyBjb2x1bW5zIG5vdCBpbmNsdWRlZCBpbiB0aGUgaW5kZXguCitCRUdJTjsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNj YW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNU ICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2Fu X3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPiAwKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtl eSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4o c2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFi bGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlCisgICBE aXNhYmxlZDogdHJ1ZQorICAgRmlsdGVyOiAoYSA+IDApCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNo ZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5f dGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnQklUTUFQX0hFQVBfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPiAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQml0bWFwIEhlYXAg U2NhbiBvbiBzY2FuX3RhYmxlCisgICBSZWNoZWNrIENvbmQ6IChhID4gMCkKKyAgIC0+ICBCaXRt YXAgSW5kZXggU2NhbiBvbiBzY2FuX3RhYmxlX3BrZXkKKyAgICAgICAgIEluZGV4IENvbmQ6IChh ID4gMCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEJJVE1BUF9IRUFQX1NDQU4oc2Nhbl90 YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZp Y2U6CisgICBCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtl eSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDkgcm93cykKKworQ09NTUlUOworLS0gV2Ug Y2FuIGZvcmNlIGEgcHJpbWFyeSBrZXkgbG9va3VwIHRvIHVzZSBhIHNlcXVlbnRpYWwgc2Nhbiwg YnV0IHdlCistLSBjYW4ndCBmb3JjZSBpdCB0byB1c2UgYW4gaW5kZXgtb25seSBzY2FuIChkdWUg dG8gdGhlIGNvbHVtbiBsaXN0KQorLS0gb3IgYSBUSUQgc2NhbiAoZHVlIHRvIHRoZSBhYnNlbmNl IG9mIGEgVElEIHF1YWwpLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ1NFUV9TQ0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1 cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBO T19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4g dXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisg ICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9P TkxZX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNoZWQsIGZhaWxlZCAq LworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJs aWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQor CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlCisg ICBEaXNhYmxlZDogdHJ1ZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4g QWR2aWNlOgorICAgVElEX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCwgZmFpbGVkICovCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisKK0NP TU1JVDsKKy0tIFdlIGNhbiBmb3JjaWJseSBkb3duZ3JhZGUgYW4gaW5kZXgtb25seSBzY2FuIHRv IGFuIGluZGV4IHNjYW4sIGJ1dCB3ZSBjYW4ndAorLS0gZm9yY2UgdGhlIHVzZSBvZiBhbiBpbmRl eCB0aGF0IHRoZSBwbGFubmVyIHRoaW5rcyBpcyBpbmFwcGxpY2FibGUuCitCRUdJTjsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5f dGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICog RlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3Rh YmxlX3BrZXkgb24gc2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkg LyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nh bl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHNjYW5fdGFibGUp CisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1ND QU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5f dGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1 YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3Rh YmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisgICBGaWx0ZXI6IChhID0gMSkKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxl X2IpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNF UV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg4IHJvd3MpCisK K0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIGlu IHBsYWNlIG9mIGEgYml0bWFwIGhlYXAgc2NhbiwKKy0tIGJ1dCBhIHBsYWluIGluZGV4IHNjYW4g b24gYSBCUklOIGluZGV4IGlzIG5vdCBwb3NzaWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4g J3NvbWUgdGV4dCA4JzsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5f dGFibGUKKyAgIEZpbHRlcjogKGIgPiAnc29tZSB0ZXh0IDgnOjp0ZXh0KQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIo c2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOwor ICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIERpc2FibGVkOiB0cnVlCisg ICBGaWx0ZXI6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nh bl90YWJsZSkKKyg4IHJvd3MpCisKK0NPTU1JVDsKKy0tIFdlIGNhbiBmb3JjZSB0aGUgdXNlIG9m IGEgc2VxdWVudGlhbCBzY2FuIHJhdGhlciB0aGFuIGEgVElEIHNjYW4gb3IKKy0tIFRJRCByYW5n ZSBzY2FuLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9T Q0FOKHNjYW5fdGFibGUpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVD VCAqIEZST00gc2Nhbl90YWJsZSBXSEVSRSBjdGlkID0gJygwLDEpJzsKKyAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjogKGN0aWQgPSAnKDAs MSknOjp0aWQpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzY2FuX3RhYmxl KSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc2Nh bl90YWJsZSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDcgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlCisJV0hFUkUg Y3RpZCA+ICcoMSwxKScgQU5EIGN0aWQgPCAnKDIsMSknOworICAgICAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHNjYW5fdGFibGUKKyAgIEZpbHRlcjogKChjdGlkID4gJygxLDEpJzo6dGlkKSBBTkQgKGN0 aWQgPCAnKDIsMSknOjp0aWQpKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4o c2Nhbl90YWJsZSkgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIFNF UV9TQ0FOKHNjYW5fdGFibGUpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK K0NPTU1JVDsKKy0tIFRlc3QgbW9yZSBjb21wbGV4IHNjZW5hcmlvcyB3aXRoIGluZGV4IHNjYW5z LgorQkVHSU47CistLSBTaG91bGQgc3RpbGwgd29yayBpZiB3ZSBtZW50aW9uIHRoZSBzY2hlbWEu CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJs ZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIElu ZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4o c2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSAvKiBtYXRjaGVkICovCisgR2VuZXJh dGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3Rh YmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKKy0tIEJ1dCBu b3QgaWYgd2UgbWVudGlvbiB0aGUgd3Jvbmcgc2NoZW1hLgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgY2lsYnVwLnNjYW5fdGFibGVfcGtl eSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2Fu X3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5 IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBjaWxidXAuc2Nhbl90YWJsZV9wa2V5KSAv KiBtYXRjaGVkLCBpbmFwcGxpY2FibGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAg Tk9fR0FUSEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCistLSBJdCdzIE9LIHRvIHJlcGVhdCB0 aGUgc2FtZSBhZHZpY2UuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3Br ZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5 IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNo ZWQgKi8KKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRFWF9TQ0FOKHNjYW5fdGFibGUg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3RhYmxlKQorKDggcm93 cykKKworLS0gQnV0IGl0IGRvZXNuJ3Qgd29yayBpZiB0aGUgaW5kZXggdGFyZ2V0IGlzIGV2ZW4g bm90aW9uYWxseSBkaWZmZXJlbnQuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBwdWJsaWMu c2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkgb24g c2Nhbl90YWJsZQorICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgSU5ERVhfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkgLyogbWF0Y2hlZCwg Y29uZmxpY3RpbmcgKi8KKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJs ZV9wa2V5KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZyAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAg Tk9fR0FUSEVSKHNjYW5fdGFibGUpCisoOCByb3dzKQorCitDT01NSVQ7CistLSBUZXN0IGFzc29y dGVkIGluY29ycmVjdCBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnU0VRX1NDQU4obm90aGluZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNj YW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChh ID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKG5vdGhpbmcpIC8qIG5v dCBtYXRjaGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfT05MWV9TQ0FO KHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzY2FuX3Rh YmxlKQorKDcgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRF WF9TQ0FOKG5vdGhpbmcgd2hhdHNvZXZlciknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNj YW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChh ID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4obm90aGluZyB3aGF0 c29ldmVyKSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElO REVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19H QVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJs ZV9wa2V5IG9uIHNjYW5fdGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQ bGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc2Nhbl90YWJsZSBib2d1cykgLyogbWF0Y2hlZCwg aW5hcHBsaWNhYmxlLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJTkRF WF9PTkxZX1NDQU4oc2Nhbl90YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FU SEVSKHNjYW5fdGFibGUpCisoNyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJ0lOREVYX09OTFlfU0NBTihub3RoaW5nIHdoYXRzb2V2ZXIpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0g MTsKKyAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSW5kZXggT25seSBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3Rh YmxlCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9PTkxZX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSAvKiBub3QgbWF0Y2hlZCAqLworIEdl bmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHB1Ymxp Yy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90YWJsZSkKKyg3IHJvd3MpCisK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfT05MWV9TQ0FOKHNjYW5f dGFibGUgYm9ndXMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCBh IEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5f dGFibGUKKyAgIEluZGV4IENvbmQ6IChhID0gMSkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IElOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSAvKiBtYXRjaGVkLCBpbmFwcGxpY2Fi bGUsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX09OTFlfU0NB TihzY2FuX3RhYmxlIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc2Nhbl90 YWJsZSkKKyg3IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIg dG8gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGFsaWFzLgorQkVHSU47CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVz KDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBK T0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAg ICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVfc2VyaWVzIGcKKyAgICAgICAgIC0+ICBJ bmRleCBTY2FuIHVzaW5nIHNjYW5fdGFibGVfcGtleSBvbiBzY2FuX3RhYmxlIHMKKyAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nh bl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgc18xCisgICAgICAgICBJbmRleCBDb25kOiAoYSA9 IGcuZykKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisg ICBORVNURURfTE9PUF9QTEFJTihzIHMjMikKKyAgIElOREVYX1NDQU4ocyBwdWJsaWMuc2Nhbl90 YWJsZV9wa2V5IHMjMiBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHMgcyMy KQorKDEyIHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1ND QU4ocyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g KGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMu YSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBIYXNoIExlZnQgSm9pbgorICAgICAgICAgSGFzaCBD b25kOiAoZy5nID0gcy5hKQorICAgICAgICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJhdGVf c2VyaWVzIGcKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gc2Nhbl90YWJsZSBzCisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzY2FuX3RhYmxlX3BrZXkg b24gc2Nhbl90YWJsZSBzXzEKKyAgICAgICAgIEluZGV4IENvbmQ6IChhID0gZy5nKQorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocykgLyogbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoZyBzIHMjMikKKyAgIE5FU1RFRF9MT09QX1BM QUlOKHMjMikKKyAgIEhBU0hfSk9JTihzKQorICAgU0VRX1NDQU4ocykKKyAgIElOREVYX1NDQU4o cyMyIHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIocyBzIzIpCisoMTcgcm93 cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0 ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAg ICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcgPSBzLmE7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNo IExlZnQgSm9pbgorICAgSGFzaCBDb25kOiAoZy5nID0gc18xLmEpCisgICAtPiAgTmVzdGVkIExv b3AgTGVmdCBKb2luCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0ZV9zZXJp ZXMgZworICAgICAgICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNj YW5fdGFibGUgcworICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBnLmcpCisgICAtPiAg SGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNjYW5fdGFibGUgc18xCisgU3VwcGxpZWQg UGxhbiBBZHZpY2U6CisgICBTRVFfU0NBTihzIzIpIC8qIG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQg UGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgcyBzIzIpCisgICBORVNURURfTE9PUF9QTEFJ TihzKQorICAgSEFTSF9KT0lOKHMjMikKKyAgIFNFUV9TQ0FOKHMjMikKKyAgIElOREVYX1NDQU4o cyBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVSKHMgcyMyKQorKDE3IHJvd3Mp CisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocykgU0VRX1ND QU4ocyMyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0g cy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9pbgorICAgSGFz aCBDb25kOiAoZy5nID0gc18xLmEpCisgICAtPiAgSGFzaCBMZWZ0IEpvaW4KKyAgICAgICAgIEhh c2ggQ29uZDogKGcuZyA9IHMuYSkKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVy YXRlX3NlcmllcyBnCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHNjYW5fdGFibGUgcworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBzY2FuX3RhYmxlIHNfMQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4ocykg LyogbWF0Y2hlZCAqLworICAgU0VRX1NDQU4ocyMyKSAvKiBtYXRjaGVkICovCisgR2VuZXJhdGVk IFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHMgcyMyKQorICAgSEFTSF9KT0lOKHMgcyMy KQorICAgU0VRX1NDQU4ocyBzIzIpCisgICBOT19HQVRIRVIocyBzIzIpCisoMTcgcm93cykKKwor Q09NTUlUOworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBzY2FucyB3aXRoaW4gYSBz dWJxdWVyeS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4g dXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUgcworICAgSW5kZXggQ29uZDogKGEg PSAxKQorIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5z Y2FuX3RhYmxlX3BrZXkpCisgICBOT19HQVRIRVIoc0B4KQorKDUgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBzIFdIRVJFIGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW5kZXggU2NhbiB1c2luZyBz Y2FuX3RhYmxlX3BrZXkgb24gc2Nhbl90YWJsZSBzCisgICBJbmRleCBDb25kOiAoYSA9IDEpCisg R2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihzQHVubmFtZWRfc3VicXVlcnkg cHVibGljLnNjYW5fdGFibGVfcGtleSkKKyAgIE5PX0dBVEhFUihzQHVubmFtZWRfc3VicXVlcnkp CisoNSByb3dzKQorCitCRUdJTjsKKy0tIFNob3VsZCBub3QgbWF0Y2guCitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBX SEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5f dGFibGUgcworICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgor ICAgU0VRX1NDQU4ocykgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6 CisgICBJTkRFWF9TQ0FOKHNAeCBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAgTk9fR0FUSEVS KHNAeCkKKyg3IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQg MCk7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUg cworICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4ocykgLyogbm90IG1hdGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBJ TkRFWF9TQ0FOKHNAdW5uYW1lZF9zdWJxdWVyeSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KQorICAg Tk9fR0FUSEVSKHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKKy0tIFNob3VsZCBtYXRj aCBmaXJzdCBxdWVyeSBvbmx5LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdT RVFfU0NBTihzQHgpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkg eDsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlIHMKKyAgIEZpbHRlcjogKGEgPSAx KQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B4KSAvKiBtYXRjaGVkICov CisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B4KQorICAgTk9fR0FUSEVS KHNAeCkKKyg3IHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQg MCk7CisgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFibGUg cworICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VR X1NDQU4oc0B4KSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToKKyAg IElOREVYX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkpCisg ICBOT19HQVRIRVIoc0B1bm5hbWVkX3N1YnF1ZXJ5KQorKDcgcm93cykKKworLS0gU2hvdWxkIG1h dGNoIHNlY29uZCBxdWVyeSBvbmx5LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdTRVFfU0NBTihzQHVubmFtZWRfc3VicXVlcnkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExB Tl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVS RSBhID0gMSBPRkZTRVQgMCkgeDsKKyAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgc2Nhbl90YWJsZV9wa2V5IG9uIHNjYW5fdGFi bGUgcworICAgSW5kZXggQ29uZDogKGEgPSAxKQorIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAg U0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSAvKiBub3QgbWF0Y2hlZCAqLworIEdlbmVyYXRl ZCBQbGFuIEFkdmljZToKKyAgIElOREVYX1NDQU4oc0B4IHB1YmxpYy5zY2FuX3RhYmxlX3BrZXkp CisgICBOT19HQVRIRVIoc0B4KQorKDcgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gKFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZSBzIFdIRVJF IGEgPSAxIE9GRlNFVCAwKTsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBzY2FuX3RhYmxlIHMKKyAgIEZpbHRlcjogKGEgPSAxKQorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1ZXJ5KSAvKiBtYXRjaGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgU0VRX1NDQU4oc0B1bm5hbWVkX3N1YnF1 ZXJ5KQorICAgTk9fR0FUSEVSKHNAdW5uYW1lZF9zdWJxdWVyeSkKKyg3IHJvd3MpCisKK0NPTU1J VDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvZXhwZWN0ZWQvc2VtaWpvaW4u b3V0IGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zZW1pam9pbi5vdXQKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZmMjAzYzVhNjhlCi0tLSAvZGV2L251 bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zZW1pam9pbi5vdXQKQEAg LTAsMCArMSwzNzcgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxf d29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK0NSRUFURSBUQUJMRSBzal93aWRlICgKKwlpZCBpbnRl Z2VyIHByaW1hcnkga2V5LAorCXZhbDEgaW50ZWdlciwKKwlwYWRkaW5nIHRleHQgc3RvcmFnZSBw bGFpbgorKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBz al93aWRlCisJU0VMRUNUIGcsIGclMTArMSwgcmVwZWF0KCcgJywgMzAwKSBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMDAwKSBnOworQ1JFQVRFIElOREVYIE9OIHNqX3dpZGUgKHZhbDEpOworVkFD VVVNIEFOQUxZWkUgc2pfd2lkZTsKK0NSRUFURSBUQUJMRSBzal9uYXJyb3cgKAorCWlkIGludGVn ZXIgcHJpbWFyeSBrZXksCisJdmFsMSBpbnRlZ2VyCispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHNqX25hcnJvdworCVNFTEVDVCBnLCBnJTEwKzEgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgZzsKK0NSRUFURSBJTkRFWCBPTiBzal9uYXJyb3cg KHZhbDEpOworVkFDVVVNIEFOQUxZWkUgc2pfbmFycm93OworLS0gV2UgZXhwZWN0IHRoaXMgdG8g bWFrZSB0aGUgVkFMVUVTIGxpc3QgdW5pcXVlIGFuZCB1c2UgaW5kZXggbG9va3VwcyB0bworLS0g ZmluZCB0aGUgcm93cyBpbiBzal93aWRlLCBzbyBhcyB0byBhdm9pZCBhIGZ1bGwgc2NhbiBvZiBz al93aWRlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00g c2pfd2lkZQorCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwgKDMs IDMpLCAoNCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgLT4gIEhhc2hB Z2dyZWdhdGUKKyAgICAgICAgIEdyb3VwIEtleTogIipWQUxVRVMqIi5jb2x1bW4xLCAiKlZBTFVF UyoiLmNvbHVtbjIKKyAgICAgICAgIC0+ICBWYWx1ZXMgU2NhbiBvbiAiKlZBTFVFUyoiCisgICAt PiAgSW5kZXggU2NhbiB1c2luZyBzal93aWRlX3BrZXkgb24gc2pfd2lkZQorICAgICAgICAgSW5k ZXggQ29uZDogKGlkID0gIipWQUxVRVMqIi5jb2x1bW4xKQorICAgICAgICAgRmlsdGVyOiAodmFs MSA9ICIqVkFMVUVTKiIuY29sdW1uMikKKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lO X09SREVSKCIqVkFMVUVTKiIgc2pfd2lkZSkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHNqX3dpZGUp CisgICBJTkRFWF9TQ0FOKHNqX3dpZGUgcHVibGljLnNqX3dpZGVfcGtleSkKKyAgIFNFTUlKT0lO X1VOSVFVRSgiKlZBTFVFUyoiKQorICAgTk9fR0FUSEVSKHNqX3dpZGUpCisoMTMgcm93cykKKwor LS0gSWYgd2UgYXNrIGZvciBhIHVuaXF1ZSBzZW1pam9pbiwgd2Ugc2hvdWxkIGdldCB0aGUgc2Ft ZSBwbGFuIGFzIHdpdGgKKy0tIG5vIGFkdmljZS4gSWYgd2UgYXNrIGZvciBhIG5vbi11bmlxdWUg c2VtaWpvaW4sIHdlIHNob3VsZCBzZWUgYSBTZW1pCistLSBKb2luIG9wZXJhdGlvbiBpbiB0aGUg cGxhbiB0cmVlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3Nl bWlqb2luX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURW SUNFKQorU0VMRUNUICogRlJPTSBzal93aWRlCisJV0hFUkUgKGlkLCB2YWwxKSBJTiAoVkFMVUVT ICgxLCAxKSwgKDIsIDIpLCAoMywgMyksICg0LCA0KSwgKDUsIDUpKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3Rl ZCBMb29wCisgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgR3JvdXAgS2V5OiAiKlZBTFVF UyoiLmNvbHVtbjEsICIqVkFMVUVTKiIuY29sdW1uMgorICAgICAgICAgLT4gIFZhbHVlcyBTY2Fu IG9uICIqVkFMVUVTKiIKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNqX3dpZGVfcGtleSBvbiBz al93aWRlCisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpCisg ICAgICAgICBGaWx0ZXI6ICh2YWwxID0gIipWQUxVRVMqIi5jb2x1bW4yKQorIFN1cHBsaWVkIFBs YW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpIC8qIG1hdGNoZWQgKi8K KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKCIqVkFMVUVTKiIgc2pfd2lk ZSkKKyAgIE5FU1RFRF9MT09QX1BMQUlOKHNqX3dpZGUpCisgICBJTkRFWF9TQ0FOKHNqX3dpZGUg cHVibGljLnNqX3dpZGVfcGtleSkKKyAgIFNFTUlKT0lOX1VOSVFVRSgiKlZBTFVFUyoiKQorICAg Tk9fR0FUSEVSKHNqX3dpZGUpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQs IHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBIYXNoIFNlbWkgSm9pbgorICAgSGFzaCBDb25kOiAoKHNqX3dpZGUu aWQgPSAiKlZBTFVFUyoiLmNvbHVtbjEpIEFORCAoc2pfd2lkZS52YWwxID0gIipWQUxVRVMqIi5j b2x1bW4yKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzal93aWRlCisgICAtPiAgSGFzaAorICAgICAg ICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyBTdXBwbGllZCBQbGFuIEFkdmljZToK KyAgIFNFTUlKT0lOX05PTl9VTklRVUUoIipWQUxVRVMqIikgLyogbWF0Y2hlZCAqLworIEdlbmVy YXRlZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoc2pfd2lkZSAiKlZBTFVFUyoiKQorICAg SEFTSF9KT0lOKCIqVkFMVUVTKiIpCisgICBTRVFfU0NBTihzal93aWRlKQorICAgU0VNSUpPSU5f Tk9OX1VOSVFVRSgiKlZBTFVFUyoiKQorICAgTk9fR0FUSEVSKHNqX3dpZGUpCisoMTMgcm93cykK KworQ09NTUlUOworLS0gQmVjYXVzZSB0aGlzIHRhYmxlIGlzIG5hcnJvd2VyIHRoYW4gdGhlIHBy ZXZpb3VzIG9uZSwgYSBzZXF1ZW50aWFsIHNjYW4KKy0tIGlzIGxlc3MgZXhwZW5zaXZlLCBhbmQg d2UgY2hvb3NlIGEgc3RyYWlnaHRmb3J3YXJkIFNlbWkgSm9pbiBwbGFuIGJ5CistLSBkZWZhdWx0 LiAoTm90ZSB0aGF0IHRoaXMgaXMgYWxzbyB2ZXJ5IHNlbnNpdGl2ZSB0byB0aGUgbGVuZ3RoIG9m IHRoZSBJTgorLS0gbGlzdCwgd2hpY2ggYWZmZWN0cyBob3cgbWFueSBpbmRleCBsb29rdXBzIHRo ZSBhbHRlcm5hdGl2ZSBwbGFuIHdpbGwgbmVlZC4pCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChW QUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEhhc2ggU2VtaSBKb2luCisgICBIYXNoIENvbmQ6ICgoc2pfbmFycm93Lmlk ID0gIipWQUxVRVMqIi5jb2x1bW4xKSBBTkQgKHNqX25hcnJvdy52YWwxID0gIipWQUxVRVMqIi5j b2x1bW4yKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyAgIC0+ICBIYXNoCisgICAg ICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorIEdlbmVyYXRlZCBQbGFuIEFkdmlj ZToKKyAgIEpPSU5fT1JERVIoc2pfbmFycm93ICIqVkFMVUVTKiIpCisgICBIQVNIX0pPSU4oIipW QUxVRVMqIikKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX05PTl9VTklRVUUo IipWQUxVRVMqIikKKyAgIE5PX0dBVEhFUihzal9uYXJyb3cpCisoMTEgcm93cykKKworLS0gSGVy ZSwgd2UgZXhwZWN0IGFkdmlzaW5nIGEgdW5pcXVlIHNlbWlqb2luIHRvIHN3aXRoIHRvIHRoZSBz YW1lIHBsYW4gdGhhdAorLS0gd2UgZ290IHdpdGggc2pfd2lkZSwgYW5kIGFkdmlzaW5nIGEgbm9u LXVuaXF1ZSBzZW1pam9pbiBzaG91bGQgbm90IGNoYW5nZQorLS0gdGhlIHBsYW4uCitCRUdJTjsK K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKCIqVkFM VUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IHNqX25hcnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwg KDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2lu CisgICBIYXNoIENvbmQ6ICgoc2pfbmFycm93LmlkID0gIipWQUxVRVMqIi5jb2x1bW4xKSBBTkQg KHNqX25hcnJvdy52YWwxID0gIipWQUxVRVMqIi5jb2x1bW4yKSkKKyAgIC0+ICBTZXEgU2NhbiBv biBzal9uYXJyb3cKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgR3JvdXAgS2V5OiAiKlZBTFVFUyoiLmNvbHVtbjEsICIqVkFMVUVTKiIuY29s dW1uMgorICAgICAgICAgICAgICAgLT4gIFZhbHVlcyBTY2FuIG9uICIqVkFMVUVTKiIKKyBTdXBw bGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX1VOSVFVRSgiKlZBTFVFUyoiKSAvKiBtYXRj aGVkICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cg IipWQUxVRVMqIikKKyAgIEhBU0hfSk9JTigiKlZBTFVFUyoiKQorICAgU0VRX1NDQU4oc2pfbmFy cm93KQorICAgU0VNSUpPSU5fVU5JUVVFKCIqVkFMVUVTKiIpCisgICBOT19HQVRIRVIoc2pfbmFy cm93KQorKDE1IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2Vt aWpvaW5fbm9uX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorU0VMRUNUICogRlJPTSBzal9uYXJyb3cKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChW QUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEhhc2ggU2VtaSBKb2luCisgICBIYXNoIENvbmQ6ICgoc2pfbmFycm93Lmlk ID0gIipWQUxVRVMqIi5jb2x1bW4xKSBBTkQgKHNqX25hcnJvdy52YWwxID0gIipWQUxVRVMqIi5j b2x1bW4yKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyAgIC0+ICBIYXNoCisgICAg ICAgICAtPiAgVmFsdWVzIFNjYW4gb24gIipWQUxVRVMqIgorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgU0VNSUpPSU5fTk9OX1VOSVFVRSgiKlZBTFVFUyoiKSAvKiBtYXRjaGVkICovCisgR2Vu ZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihzal9uYXJyb3cgIipWQUxVRVMqIikK KyAgIEhBU0hfSk9JTigiKlZBTFVFUyoiKQorICAgU0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VN SUpPSU5fTk9OX1VOSVFVRSgiKlZBTFVFUyoiKQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykKKygx MyByb3dzKQorCitDT01NSVQ7CistLSBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgd2UgbWFkZSB0aGUg b3V0ZXIgc2lkZSBvZiB0aGUgam9pbiB1bmlxdWUsIGJ1dCBoZXJlLAorLS0gd2Ugc2hvdWxkIG1h a2UgdGhlIGlubmVyIHNpZGUgdW5pcXVlLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcg aW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzal9uYXJyb3cudmFsMSkK KyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAtPiAgSGFzaAor ICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogc2pf bmFycm93LnZhbDEKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyBH ZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgc2pfbmFycm93KQorICAgSEFT SF9KT0lOKHNqX25hcnJvdykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX1VO SVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIoc2pfbmFycm93KQorKDEzIHJvd3MpCisKKy0t IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIGEgcGxhbiB3aXRoIG9yIHdpdGhvdXQgdGhlIG1h a2UtdW5pcXVlIHN0cmF0ZWd5LAorLS0gd2l0aCBlaXRoZXIgc2lkZSBhcyB0aGUgZHJpdmluZyB0 YWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9p bl91bmlxdWUoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAo c2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgSGFzaCBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzal9uYXJyb3cudmFsMSkK KyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgICAtPiAgSGFzaAor ICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogc2pf bmFycm93LnZhbDEKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9uYXJyb3cKKyBT dXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpIC8qIG1h dGNoZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgc2pfbmFy cm93KQorICAgSEFTSF9KT0lOKHNqX25hcnJvdykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAg IFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRIRVIoc2pfbmFycm93KQorKDE1 IHJvd3MpCisKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9u X3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChz ZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CisgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEhhc2ggU2VtaSBKb2luCisgICBIYXNoIENvbmQ6IChnLmcgPSBzal9u YXJyb3cudmFsMSkKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisg ICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJvdworIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fTk9OX1VOSVFVRShzal9uYXJyb3cpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGcgc2pfbmFycm93 KQorICAgSEFTSF9KT0lOKHNqX25hcnJvdykKKyAgIFNFUV9TQ0FOKHNqX25hcnJvdykKKyAgIFNF TUlKT0lOX05PTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykKKygx MyByb3dzKQorCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3Vu aXF1ZShzal9uYXJyb3cpIGpvaW5fb3JkZXIoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBn CisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29u ZDogKHNqX25hcnJvdy52YWwxID0gZy5nKQorICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg IEdyb3VwIEtleTogc2pfbmFycm93LnZhbDEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal9u YXJyb3cKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0 ZV9zZXJpZXMgZworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fVU5JUVVFKHNq X25hcnJvdykgLyogbWF0Y2hlZCAqLworICAgSk9JTl9PUkRFUihzal9uYXJyb3cpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25hcnJvdyBn KQorICAgSEFTSF9KT0lOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9V TklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykKKygxNiByb3dzKQorCitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX25vbl91bmlxdWUoc2pf bmFycm93KSBqb2luX29yZGVyKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdI RVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKKyAgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBSaWdodCBTZW1pIEpvaW4KKyAgIEhhc2gg Q29uZDogKHNqX25hcnJvdy52YWwxID0gZy5nKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqX25hcnJv dworICAgLT4gIEhhc2gKKyAgICAgICAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3Nl cmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBTRU1JSk9JTl9OT05fVU5JUVVFKHNq X25hcnJvdykgLyogbWF0Y2hlZCAqLworICAgSk9JTl9PUkRFUihzal9uYXJyb3cpIC8qIG1hdGNo ZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHNqX25hcnJvdyBn KQorICAgSEFTSF9KT0lOKGcpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1JSk9JTl9O T05fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5PX0dBVEhFUihzal9uYXJyb3cpCisoMTQgcm93cykK KworQ09NTUlUOworLS0gSG93ZXZlciwgbWVudGlvbmluZyB0aGUgd3Jvbmcgc2lkZSBvZiB0aGUg am9pbiBzaG91bGQgcmVzdWx0IGluIGFuIGFkdmljZQorLS0gZmFpbHVyZS4KK0JFR0lOOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl91bmlxdWUoZyknOworRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93 KTsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBE aXNhYmxlZDogdHJ1ZQorICAgSm9pbiBGaWx0ZXI6IChnLmcgPSBzal9uYXJyb3cudmFsMSkKKyAg IC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwxCisg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgICAtPiAgRnVuY3Rpb24gU2NhbiBv biBnZW5lcmF0ZV9zZXJpZXMgZworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5f VU5JUVVFKGcpIC8qIG1hdGNoZWQsIGZhaWxlZCAqLworIEdlbmVyYXRlZCBQbGFuIEFkdmljZToK KyAgIEpPSU5fT1JERVIoc2pfbmFycm93IGcpCisgICBORVNURURfTE9PUF9QTEFJTihnKQorICAg U0VRX1NDQU4oc2pfbmFycm93KQorICAgU0VNSUpPSU5fVU5JUVVFKHNqX25hcnJvdykKKyAgIE5P X0dBVEhFUihzal9uYXJyb3cpCisoMTUgcm93cykKKworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKGcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAg ICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CisgICAgICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBEaXNhYmxlZDog dHJ1ZQorICAgSm9pbiBGaWx0ZXI6IChnLmcgPSBzal9uYXJyb3cudmFsMSkKKyAgIC0+ICBIYXNo QWdncmVnYXRlCisgICAgICAgICBHcm91cCBLZXk6IHNqX25hcnJvdy52YWwxCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gc2pfbmFycm93CisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBnZW5lcmF0 ZV9zZXJpZXMgZworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpPSU5fTk9OX1VOSVFV RShnKSAvKiBtYXRjaGVkLCBmYWlsZWQgKi8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBK T0lOX09SREVSKHNqX25hcnJvdyBnKQorICAgTkVTVEVEX0xPT1BfUExBSU4oZykKKyAgIFNFUV9T Q0FOKHNqX25hcnJvdykKKyAgIFNFTUlKT0lOX1VOSVFVRShzal9uYXJyb3cpCisgICBOT19HQVRI RVIoc2pfbmFycm93KQorKDE1IHJvd3MpCisKK0NPTU1JVDsKKy0tIFRlc3QgY29uZmxpY3Rpbmcg YWR2aWNlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlq b2luX3VuaXF1ZShzal9uYXJyb3cpIHNlbWlqb2luX25vbl91bmlxdWUoc2pfbmFycm93KSc7CitF WFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9z ZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJy b3cpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29u ZDogKGcuZyA9IHNqX25hcnJvdy52YWwxKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gZ2VuZXJh dGVfc2VyaWVzIGcKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgR3JvdXAgS2V5OiBzal9uYXJyb3cudmFsMQorICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHNqX25hcnJvdworIFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgU0VNSUpP SU5fVU5JUVVFKHNqX25hcnJvdykgLyogbWF0Y2hlZCwgY29uZmxpY3RpbmcgKi8KKyAgIFNFTUlK T0lOX05PTl9VTklRVUUoc2pfbmFycm93KSAvKiBtYXRjaGVkLCBjb25mbGljdGluZywgZmFpbGVk ICovCisgR2VuZXJhdGVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihnIHNqX25hcnJvdykK KyAgIEhBU0hfSk9JTihzal9uYXJyb3cpCisgICBTRVFfU0NBTihzal9uYXJyb3cpCisgICBTRU1J Sk9JTl9VTklRVUUoc2pfbmFycm93KQorICAgTk9fR0FUSEVSKHNqX25hcnJvdykKKygxNiByb3dz KQorCitDT01NSVQ7CistLSBUcnkgYXBwbHlpbmcgU0VNSUpPSU5fVU5JUVVFKCkgdG8gYSBub24t c2VtaWpvaW4uCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2Vt aWpvaW5fdW5pcXVlKGcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxF Q1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcsIHNqX25hcnJvdyBzIFdIRVJFIGcg PSBzLnZhbDE7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgSm9pbgorICAgTWVyZ2UgQ29uZDogKHMudmFsMSA9IGcu ZykKKyAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNqX25hcnJvd192YWwxX2lkeCBvbiBzal9uYXJy b3cgcworICAgLT4gIFNvcnQKKyAgICAgICAgIFNvcnQgS2V5OiBnLmcKKyAgICAgICAgIC0+ICBG dW5jdGlvbiBTY2FuIG9uIGdlbmVyYXRlX3NlcmllcyBnCisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBTRU1JSk9JTl9VTklRVUUoZykgLyogbWF0Y2hlZCwgaW5hcHBsaWNhYmxlLCBmYWlsZWQg Ki8KKyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKHMgZykKKyAgIE1FUkdF X0pPSU5fUExBSU4oZykKKyAgIElOREVYX1NDQU4ocyBwdWJsaWMuc2pfbmFycm93X3ZhbDFfaWR4 KQorICAgTk9fR0FUSEVSKHMpCisoMTMgcm93cykKKworQ09NTUlUOwpkaWZmIC0tZ2l0IGEvY29u dHJpYi9wZ19wbGFuX2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0IGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9leHBlY3RlZC9zeW50YXgub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5iZTYxNDAyYjU2OQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvZXhwZWN0ZWQvc3ludGF4Lm91dApAQCAtMCwwICsxLDE5MiBAQAorTE9BRCAncGdf cGxhbl9hZHZpY2UnOworLS0gQW4gZW1wdHkgc3RyaW5nIGlzIGFsbG93ZWQuIEVtcHR5IHRhcmdl dCBsaXN0cyBhcmUgYWxsb3dlZCBmb3IgbW9zdCBhZHZpY2UKKy0tIHRhZ3MsIGJ1dCBub3QgZm9y IEpPSU5fT1JERVIuICJTdXBwbGllZCBQbGFuIEFkdmljZSIgc2hvdWxkIGJlIG9taXR0ZWQgaW4K Ky0tIHRleHQgZm9ybWF0IHdoZW4gdGhlcmUgaXMgbm8gYWN0dWFsIGFkdmljZSwgYnV0IG5vdCBp biBub24tdGV4dCBmb3JtYXQuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJyc7CitFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworIFFVRVJZIFBMQU4gCistLS0tLS0tLS0tLS0KKyBS ZXN1bHQKKygxIHJvdykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigp JzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVFUlkgUExBTiAKKy0tLS0tLS0t LS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05F U1RFRF9MT09QX1BMQUlOKCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBGT1JNQVQgSlNPTikgU0VM RUNUIDE7CisgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAiUGxhbiI6IHsgICAgICAgICAgICAg ICAgICsKKyAgICAgICAiTm9kZSBUeXBlIjogIlJlc3VsdCIsICArCisgICAgICAgIlBhcmFsbGVs IEF3YXJlIjogZmFsc2UsKworICAgICAgICJBc3luYyBDYXBhYmxlIjogZmFsc2UsICsKKyAgICAg ICAiRGlzYWJsZWQiOiBmYWxzZSAgICAgICArCisgICAgIH0sICAgICAgICAgICAgICAgICAgICAg ICAgKworICAgICAiU3VwcGxpZWQgUGxhbiBBZHZpY2UiOiAiIisKKyAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICArCisgXQorKDEgcm93KQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl ID0gJ0pPSU5fT1JERVIoKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAi cGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkpPSU5fT1JERVIoKSIKK0RFVEFJTDogIENvdWxkIG5v dCBwYXJzZSBhZHZpY2U6IEpPSU5fT1JERVIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSB0YXJnZXQg YXQgb3IgbmVhciAiKSIKKy0tIFRlc3QgYXNzb3J0ZWQgdmFyaWF0aW9ucyBpbiBjYXBpdGFsaXph dGlvbiwgd2hpdGVzcGFjZSwgYW5kIHdoaWNoIHBhcnRzIG9mCistLSB0aGUgcmVsYXRpb24gaWRl bnRpZmllciBhcmUgaW5jbHVkZWQuIFRoZXNlIHNob3VsZCBhbGwgd29yay4KK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oeCknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxF Q1QgMTsKKyAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6CisgICBT RVFfU0NBTih4KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdzZXFfc2Nhbih4QHkpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNU IDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAg IFNFUV9TQ0FOKHhAeSkgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnU0VRX3NjYW4oeCMyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNF TEVDVCAxOworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6 CisgICBTRVFfU0NBTih4IzIpIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCitTRVQgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOICh4L3kpJzsKK0VYUExBSU4gKENPU1RTIE9G RikgU0VMRUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFk dmljZToKKyAgIFNFUV9TQ0FOKHgveSkgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnICBTRVFfU0NBTiAoIHggLyB5IC4geiApICAnOwor RVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1 bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIFNFUV9TQ0FOKHgveS56KSAvKiBub3QgbWF0 Y2hlZCAqLworKDMgcm93cykKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NB TigieCIjMi8ieSIuInoiQCJ0IiknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKKyAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBsaWVkIFBsYW4gQWR2aWNl OgorICAgU0VRX1NDQU4oeCMyL3kuekB0KSAvKiBub3QgbWF0Y2hlZCAqLworKDMgcm93cykKKwor LS0gU3ludGF4IGVycm9ycy4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRVUVOVElB TF9TQ0FOKHgpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFu X2FkdmljZS5hZHZpY2UiOiAiU0VRVUVOVElBTF9TQ0FOKHgpIgorREVUQUlMOiAgQ291bGQgbm90 IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIlNFUVVFTlRJQUxfU0NBTiIK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4nOworRVJST1I6ICBpbnZhbGlk IHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJTRVFfU0NBTiIK K0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBlbmQgb2Yg aW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oJzsKK0VSUk9SOiAg aW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VR X1NDQU4oIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogc3ludGF4IGVycm9yIGF0 IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigiJzsK K0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZp Y2UiOiAiU0VRX1NDQU4oIiIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHVudGVy bWluYXRlZCBxdW90ZWQgaWRlbnRpZmllciBhdCBlbmQgb2YgaW5wdXQKK1NFVCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIiIpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3Ig cGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIiIpIgorREVUQUlM OiAgQ291bGQgbm90IHBhcnNlIGFkdmljZTogemVyby1sZW5ndGggZGVsaW1pdGVkIGlkZW50aWZp ZXIgYXQgb3IgbmVhciAiIiIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4o ImEiJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UiOiAiU0VRX1NDQU4oImEiIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFkdmlj ZTogc3ludGF4IGVycm9yIGF0IGVuZCBvZiBpbnB1dAorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdTRVFfU0NBTigjJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJw Z19wbGFuX2FkdmljZS5hZHZpY2UiOiAiU0VRX1NDQU4oIyIKK0RFVEFJTDogIENvdWxkIG5vdCBw YXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIjIgorU0VUIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICcoKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAi cGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIigpIgorREVUQUlMOiAgQ291bGQgbm90IHBhcnNlIGFk dmljZTogc3ludGF4IGVycm9yIGF0IG9yIG5lYXIgIigiCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2 aWNlID0gJzEyMyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxh bl9hZHZpY2UuYWR2aWNlIjogIjEyMyIKK0RFVEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6 IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIxMjMiCistLSBUYWdzIGxpa2UgU0VRX1NDQU4gYW5k IE5PX0dBVEhFUiBkb24ndCBhbGxvdyBzdWJsaXN0cyBhdCBhbGw7IG90aGVyIHRhZ3MsCistLSBl eGNlcHQgZm9yIEpPSU5fT1JERVIsIGFsbG93IGF0IG1vc3Qgb25lIGxldmVsIG9mIHN1Ymxpc3Qu IEhlbmNlLCB0aGVzZQorLS0gZXhhbXBsZXMgc2hvdWxkIGVycm9yIG91dC4KK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oKHgpKSc7CitFUlJPUjogIGludmFsaWQgdmFsdWUg Zm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIlNFUV9TQ0FOKCh4KSkiCitE RVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJyb3IgYXQgb3IgbmVhciAi KCIKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnR0FUSEVSKCgoeCkpKSc7CitFUlJPUjog IGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIkdB VEhFUigoKHgpKSkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBzeW50YXggZXJy b3IgYXQgb3IgbmVhciAiKCIKKy0tIExlZ2FsIGNvbW1lbnRzLgorU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICcvKiovJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVFUlkg UExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0hBU0hfSk9JTihfKS8qKiovJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VM RUNUIDE7CisgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgU3VwcGxpZWQgUGxhbiBBZHZpY2U6Cisg ICBIQVNIX0pPSU4oXykgLyogbm90IG1hdGNoZWQgKi8KKygzIHJvd3MpCisKK1NFVCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnLyogY29tbWVudCAqLyBIQVNIX0pPSU4oLyp4Ki95KSc7CitFWFBM QUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFJlc3VsdAorIFN1cHBs aWVkIFBsYW4gQWR2aWNlOgorICAgSEFTSF9KT0lOKHkpIC8qIG5vdCBtYXRjaGVkICovCisoMyBy b3dzKQorCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9K T0lOKHkvLyp4Ki96KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBSZXN1bHQKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEhBU0hfSk9JTih5 L3opIC8qIG5vdCBtYXRjaGVkICovCisoMyByb3dzKQorCistLSBVbnRlcm1pbmF0ZWQgY29tbWVu dHMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJy8qJzsKK0VSUk9SOiAgaW52YWxpZCB2 YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFuX2FkdmljZS5hZHZpY2UiOiAiLyoiCitERVRBSUw6 ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0ZWQgY29tbWVudCBhdCBlbmQgb2Yg aW5wdXQKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigiZk9PIikgLyog b29wcyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9yIHBhcmFtZXRlciAicGdfcGxhbl9hZHZp Y2UuYWR2aWNlIjogIkpPSU5fT1JERVIoImZPTyIpIC8qIG9vcHMiCitERVRBSUw6ICBDb3VsZCBu b3QgcGFyc2UgYWR2aWNlOiB1bnRlcm1pbmF0ZWQgY29tbWVudCBhdCBlbmQgb2YgaW5wdXQKKy0t IE5lc3RlZCBjb21tZW50cyBhcmUgbm90IHN1cHBvcnRlZCwgc28gdGhlIGZpcnN0IG9mIHRoZXNl IGlzIGxlZ2FsIGFuZAorLS0gdGhlIHNlY29uZCBpcyBub3QuCitTRVQgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJy8qLyovJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisgUVVFUlkg UExBTiAKKy0tLS0tLS0tLS0tLQorIFJlc3VsdAorKDEgcm93KQorCitTRVQgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJy8qLyogc3R1ZmYgKi8qLyc7CitFUlJPUjogIGludmFsaWQgdmFsdWUgZm9y IHBhcmFtZXRlciAicGdfcGxhbl9hZHZpY2UuYWR2aWNlIjogIi8qLyogc3R1ZmYgKi8qLyIKK0RF VEFJTDogIENvdWxkIG5vdCBwYXJzZSBhZHZpY2U6IHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIq IgorLS0gRm9yZWlnbiBqb2luIHJlcXVpcmVzIG11bHRpcGxlIHJlbGF0aW9uIGlkZW50aWZpZXJz LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oYSknOworRVJST1I6 ICBpbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgInBnX3BsYW5fYWR2aWNlLmFkdmljZSI6ICJG T1JFSUdOX0pPSU4oYSkiCitERVRBSUw6ICBDb3VsZCBub3QgcGFyc2UgYWR2aWNlOiBGT1JFSUdO X0pPSU4gdGFyZ2V0cyBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByZWxhdGlvbiBpZGVudGlm aWVyIGF0IG9yIG5lYXIgIikiCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0ZPUkVJR05f Sk9JTigoYSkpJzsKK0VSUk9SOiAgaW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICJwZ19wbGFu X2FkdmljZS5hZHZpY2UiOiAiRk9SRUlHTl9KT0lOKChhKSkiCitERVRBSUw6ICBDb3VsZCBub3Qg cGFyc2UgYWR2aWNlOiBGT1JFSUdOX0pPSU4gdGFyZ2V0cyBtdXN0IGNvbnRhaW4gbW9yZSB0aGFu IG9uZSByZWxhdGlvbiBpZGVudGlmaWVyIGF0IG9yIG5lYXIgIikiCmRpZmYgLS1naXQgYS9jb250 cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1aWxkIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9t ZXNvbi5idWlsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmJiM2Jh M2M2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL21lc29uLmJ1 aWxkCkBAIC0wLDAgKzEsNzIgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIyLTIwMjQsIFBvc3RncmVT UUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK3BnX3BsYW5fYWR2aWNlX3NvdXJjZXMgPSBm aWxlcygKKyAgJ3BnX3BsYW5fYWR2aWNlLmMnLAorICAncGdwYV9hc3QuYycsCisgICdwZ3BhX2Nv bGxlY3Rvci5jJywKKyAgJ3BncGFfaWRlbnRpZmllci5jJywKKyAgJ3BncGFfam9pbi5jJywKKyAg J3BncGFfb3V0cHV0LmMnLAorICAncGdwYV9wbGFubmVyLmMnLAorICAncGdwYV9zY2FuLmMnLAor ICAncGdwYV90cm92ZS5jJywKKyAgJ3BncGFfd2Fsa2VyLmMnLAorKQorCitwZ3BhX3NjYW5uZXIg PSBjdXN0b21fdGFyZ2V0KCdwZ3BhX3NjYW5uZXInLAorICBpbnB1dDogJ3BncGFfc2Nhbm5lci5s JywKKyAgb3V0cHV0OiAncGdwYV9zY2FubmVyLmMnLAorICBjb21tYW5kOiBmbGV4X2NtZCwKKykK K2dlbmVyYXRlZF9zb3VyY2VzICs9IHBncGFfc2Nhbm5lcgorcGdfcGxhbl9hZHZpY2Vfc291cmNl cyArPSBwZ3BhX3NjYW5uZXIKKworcGdwYV9wYXJzZXIgPSBjdXN0b21fdGFyZ2V0KCdwZ3BhX3Bh cnNlcicsCisgIGlucHV0OiAncGdwYV9wYXJzZXIueScsCisgIGt3YXJnczogYmlzb25fa3csCisp CitnZW5lcmF0ZWRfc291cmNlcyArPSBwZ3BhX3BhcnNlci50b19saXN0KCkKK3BnX3BsYW5fYWR2 aWNlX3NvdXJjZXMgKz0gcGdwYV9wYXJzZXIKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3Mn CisgIHBnX3BsYW5fYWR2aWNlX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMydmVy X3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICdwZ19wbGFuX2FkdmljZScsCisgICAg Jy0tRklMRURFU0MnLCAncGdfcGxhbl9hZHZpY2UgLSBoZWxwIHRoZSBwbGFubmVyIGdldCB0aGUg cmlnaHQgcGxhbicsXSkKK2VuZGlmCisKK3BnX3BsYW5fYWR2aWNlID0gc2hhcmVkX21vZHVsZSgn cGdfcGxhbl9hZHZpY2UnLAorICBwZ19wbGFuX2FkdmljZV9zb3VyY2VzLAorICBpbmNsdWRlX2Rp cmVjdG9yaWVzOiBpbmNsdWRlX2RpcmVjdG9yaWVzKCcuJyksCisgIGt3YXJnczogY29udHJpYl9t b2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyArPSBwZ19wbGFuX2FkdmljZQorCitpbnN0YWxs X2RhdGEoCisgICdwZ19wbGFuX2FkdmljZS0tMS4wLnNxbCcsCisgICdwZ19wbGFuX2FkdmljZS5j b250cm9sJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKKwordGVzdHMgKz0gewor ICAnbmFtZSc6ICdwZ19wbGFuX2FkdmljZScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNl X2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncmVncmVzcyc6 IHsKKyAgICAnc3FsJzogWworICAgICAgJ2dhdGhlcicsCisgICAgICAnam9pbl9vcmRlcicsCisg ICAgICAnam9pbl9zdHJhdGVneScsCisgICAgICAnbG9jYWxfY29sbGVjdG9yJywKKyAgICAgICdw YXJ0aXRpb253aXNlJywKKyAgICAgICdwcmVwYXJlZCcsCisgICAgICAnc2NhbicsCisgICAgICAn c2VtaWpvaW4nLAorICAgICAgJ3N5bnRheCcsCisgICAgXSwKKyAgfSwKKyAgJ3RhcCc6IHsKKyAg ICAndGVzdHMnOiBbCisgICAgICAndC8wMDFfcmVncmVzcy5wbCcsCisgICAgXSwKKyAgfSwKK30K ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5z cWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLS0xLjAuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40NTBjNDIwNDBmZAotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UtLTEuMC5zcWwK QEAgLTAsMCArMSw0MyBAQAorLyogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2Fkdmlj ZS0tMS4wLnNxbCAqLworCistLSBjb21wbGFpbiBpZiBzY3JpcHQgaXMgc291cmNlZCBpbiBwc3Fs LCByYXRoZXIgdGhhbiB2aWEgQ1JFQVRFIEVYVEVOU0lPTgorXGVjaG8gVXNlICJDUkVBVEUgRVhU RU5TSU9OIHBnX3BsYW5fYWR2aWNlIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworQ1JFQVRF IEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKQorUkVUVVJOUyB2b2lk CitBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ3BnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2Un CitMQU5HVUFHRSBDIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIHBnX2NsZWFyX2NvbGxlY3Rl ZF9zaGFyZWRfYWR2aWNlKCkKK1JFVFVSTlMgdm9pZAorQVMgJ01PRFVMRV9QQVRITkFNRScsICdw Z19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZScKK0xBTkdVQUdFIEMgU1RSSUNUOworCitD UkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoCisJT1VUIGlkIGJp Z2ludCwKKwlPVVQgdXNlcmlkIG9pZCwKKwlPVVQgZGJpZCBvaWQsCisJT1VUIHF1ZXJ5aWQgYmln aW50LAorCU9VVCBjb2xsZWN0aW9uX3RpbWUgdGltZXN0YW1wdHosCisJT1VUIHF1ZXJ5IHRleHQs CisJT1VUIGFkdmljZSB0ZXh0CispCitSRVRVUk5TIFNFVE9GIHJlY29yZAorQVMgJ01PRFVMRV9Q QVRITkFNRScsICdwZ19nZXRfY29sbGVjdGVkX2xvY2FsX2FkdmljZScKK0xBTkdVQUdFIEMgU1RS SUNUOworCitDUkVBVEUgRlVOQ1RJT04gcGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKAor CU9VVCBpZCBiaWdpbnQsCisJT1VUIHVzZXJpZCBvaWQsCisJT1VUIGRiaWQgb2lkLAorCU9VVCBx dWVyeWlkIGJpZ2ludCwKKwlPVVQgY29sbGVjdGlvbl90aW1lIHRpbWVzdGFtcHR6LAorCU9VVCBx dWVyeSB0ZXh0LAorCU9VVCBhZHZpY2UgdGV4dAorKQorUkVUVVJOUyBTRVRPRiByZWNvcmQKK0FT ICdNT0RVTEVfUEFUSE5BTUUnLCAncGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlJworTEFO R1VBR0UgQyBTVFJJQ1Q7CisKK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04gcGdfY2xlYXJfY29sbGVj dGVkX3NoYXJlZF9hZHZpY2UoKSBGUk9NIFBVQkxJQzsKK1JFVk9LRSBBTEwgT04gRlVOQ1RJT04g cGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCkgRlJPTSBQVUJMSUM7CmRpZmYgLS1naXQg YS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjJhYTIxZWE5MTNhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ19wbGFuX2FkdmljZS5jCkBAIC0wLDAgKzEsNTAzIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiBwZ19wbGFuX2FkdmljZS5jCisgKgkgIG1haW4gZW50cnlwb2ludHMgZm9y IGdlbmVyYXRpbmcgYW5kIGFwcGx5aW5nIHBsYW5uZXIgYWR2aWNlCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgor ICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmMKKyAqCisgKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJwZ19w bGFuX2FkdmljZS5oIgorI2luY2x1ZGUgInBncGFfYXN0LmgiCisjaW5jbHVkZSAicGdwYV9jb2xs ZWN0b3IuaCIKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJwZ3BhX291 dHB1dC5oIgorI2luY2x1ZGUgInBncGFfcGxhbm5lci5oIgorI2luY2x1ZGUgInBncGFfdHJvdmUu aCIKKyNpbmNsdWRlICJwZ3BhX3dhbGtlci5oIgorCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVt LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V4 cGxhaW5fZm9ybWF0LmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbl9zdGF0ZS5oIgorI2lu Y2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5oIgorI2luY2x1 ZGUgInN0b3JhZ2UvZHNtX3JlZ2lzdHJ5LmgiCisjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCisKK1BH X01PRFVMRV9NQUdJQzsKKworc3RhdGljIHBncGFfc2hhcmVkX3N0YXRlICpwZ3BhX3N0YXRlID0g TlVMTDsKK3N0YXRpYyBkc2FfYXJlYSAqcGdwYV9kc2FfYXJlYSA9IE5VTEw7CisKKy8qIEdVQyB2 YXJpYWJsZXMgKi8KK2NoYXIJICAgKnBnX3BsYW5fYWR2aWNlX2FkdmljZSA9IE5VTEw7Citib29s CQlwZ19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSBmYWxzZTsKK3N0 YXRpYyBib29sIHBnX3BsYW5fYWR2aWNlX2Fsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA9 IHRydWU7Citib29sCQlwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0b3IgPSBmYWxzZTsKK2lu dAkJCXBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAwOworYm9vbAkJcGdf cGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3RvciA9IGZhbHNlOworaW50CQkJcGdfcGxhbl9hZHZp Y2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQgPSAwOworYm9vbAkJcGdfcGxhbl9hZHZpY2VfdHJh Y2VfbWFzayA9IGZhbHNlOworCisvKiBTYXZlZCBob29rIHZhbHVlICovCitzdGF0aWMgZXhwbGFp bl9wZXJfcGxhbl9ob29rX3R5cGUgcHJldl9leHBsYWluX3Blcl9wbGFuID0gTlVMTDsKKworLyog T3RoZXIgZmlsZS1sZXZlbCBnbG9iYWxzICovCitzdGF0aWMgaW50CWVzX2V4dGVuc2lvbl9pZDsK K3N0YXRpYyBNZW1vcnlDb250ZXh0IHBncGFfbWVtb3J5X2NvbnRleHQgPSBOVUxMOworCitzdGF0 aWMgdm9pZCBwZ3BhX2luaXRfc2hhcmVkX3N0YXRlKHZvaWQgKnB0ciwgdm9pZCAqYXJnKTsKK3N0 YXRpYyB2b2lkIHBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIoRXhwbGFpblN0 YXRlICplcywKKwkJCQkJCQkJCQkJCSAgRGVmRWxlbSAqb3B0LAorCQkJCQkJCQkJCQkJICBQYXJz ZVN0YXRlICpwc3RhdGUpOworc3RhdGljIHZvaWQgcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9wZXJf cGxhbl9ob29rKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwKKwkJCQkJCQkJCQkJCSBJbnRvQ2xh dXNlICppbnRvLAorCQkJCQkJCQkJCQkJIEV4cGxhaW5TdGF0ZSAqZXMsCisJCQkJCQkJCQkJCQkg Y29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCisJCQkJCQkJCQkJCQkgUGFyYW1MaXN0SW5mbyBwYXJh bXMsCisJCQkJCQkJCQkJCQkgUXVlcnlFbnZpcm9ubWVudCAqcXVlcnlFbnYpOworc3RhdGljIGJv b2wgcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2soY2hhciAqKm5ld3ZhbCwgdm9pZCAq KmV4dHJhLAorCQkJCQkJCQkJCQkgR3VjU291cmNlIHNvdXJjZSk7CitzdGF0aWMgRGVmRWxlbSAq ZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUoTGlzdCAqZGVmbGlzdCwgY2hhciAqZGVmbmFtZSk7CisK Ky8qCisgKiBJbml0aWFsaXplIHRoaXMgbW9kdWxlLgorICovCit2b2lkCitfUEdfaW5pdCh2b2lk KQoreworCURlZmluZUN1c3RvbVN0cmluZ1ZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS5hZHZpY2Ui LAorCQkJCQkJCSAgICJhZHZpY2UgdG8gYXBwbHkgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nIiwKKwkJ CQkJCQkgICBOVUxMLAorCQkJCQkJCSAgICZwZ19wbGFuX2FkdmljZV9hZHZpY2UsCisJCQkJCQkJ ICAgTlVMTCwKKwkJCQkJCQkgICBQR0NfVVNFUlNFVCwKKwkJCQkJCQkgICAwLAorCQkJCQkJCSAg IHBnX3BsYW5fYWR2aWNlX2FkdmljZV9jaGVja19ob29rLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJ CQkJICAgTlVMTCk7CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX3BsYW5fYWR2aWNl LmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSIsCisJCQkJCQkJICJFWFBMQUlOIG91dHB1 dCBpbmNsdWRlcyBzdXBwbGllZCBhZHZpY2UgZXZlbiB3aXRob3V0IEVYUExBSU4gKFBMQU5fQURW SUNFKSIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ19wbGFuX2FkdmljZV9hbHdheXNfZXhw bGFpbl9zdXBwbGllZF9hZHZpY2UsCisJCQkJCQkJIHRydWUsCisJCQkJCQkJIFBHQ19VU0VSU0VU LAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBOVUxM KTsKKworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0 b3JlX2FkdmljZV9kZXRhaWxzIiwKKwkJCQkJCQkgIkdlbmVyYXRlIGFkdmljZSBzdHJpbmdzIGV2 ZW4gd2hlbiBzZWVtaW5nbHkgbm90IHJlcXVpcmVkIiwKKwkJCQkJCQkgIlVzZSB0aGlzIG9wdGlv biB0byBzZWUgZ2VuZXJhdGVkIGFkdmljZSBmb3IgcHJlcGFyZWQgcXVlcmllcy4iLAorCQkJCQkJ CSAmcGdfcGxhbl9hZHZpY2VfYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzLAorCQkJCQkJCSBm YWxzZSwKKwkJCQkJCQkgUEdDX1VTRVJTRVQsCisJCQkJCQkJIDAsCisJCQkJCQkJIE5VTEwsCisJ CQkJCQkJIE5VTEwsCisJCQkJCQkJIE5VTEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxl KCJwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0b3IiLAorCQkJCQkJCSAiRW5hYmxlIHRoZSBs b2NhbCBhZHZpY2UgY29sbGVjdG9yLiIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZwZ19wbGFu X2FkdmljZV9sb2NhbF9jb2xsZWN0b3IsCisJCQkJCQkJIGZhbHNlLAorCQkJCQkJCSBQR0NfVVNF UlNFVCwKKwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkg TlVMTCk7CisKKwlEZWZpbmVDdXN0b21JbnRWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2UubG9jYWxf Y29sbGVjdGlvbl9saW1pdCIsCisJCQkJCQkJIiMgb2YgYWR2aWNlIGVudHJpZXMgdG8gcmV0YWlu IGluIHBlci1iYWNrZW5kIG1lbW9yeSIsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQkmcGdfcGxhbl9h ZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCwKKwkJCQkJCQkwLAorCQkJCQkJCTAsIElOVF9N QVgsCisJCQkJCQkJUEdDX1VTRVJTRVQsCisJCQkJCQkJMCwKKwkJCQkJCQlOVUxMLAorCQkJCQkJ CU5VTEwsCisJCQkJCQkJTlVMTCk7CisKKwlEZWZpbmVDdXN0b21Cb29sVmFyaWFibGUoInBnX3Bs YW5fYWR2aWNlLnNoYXJlZF9jb2xsZWN0b3IiLAorCQkJCQkJCSAiRW5hYmxlIHRoZSBzaGFyZWQg YWR2aWNlIGNvbGxlY3Rvci4iLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSAmcGdfcGxhbl9hZHZp Y2Vfc2hhcmVkX2NvbGxlY3RvciwKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19TVVNFVCwK KwkJCQkJCQkgMCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCk7 CisKKwlEZWZpbmVDdXN0b21JbnRWYXJpYWJsZSgicGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxl Y3Rpb25fbGltaXQiLAorCQkJCQkJCSIjIG9mIGFkdmljZSBlbnRyaWVzIHRvIHJldGFpbiBpbiBz aGFyZWQgbWVtb3J5IiwKKwkJCQkJCQlOVUxMLAorCQkJCQkJCSZwZ19wbGFuX2FkdmljZV9zaGFy ZWRfY29sbGVjdGlvbl9saW1pdCwKKwkJCQkJCQkwLAorCQkJCQkJCTAsIElOVF9NQVgsCisJCQkJ CQkJUEdDX1NVU0VULAorCQkJCQkJCTAsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJ CQkJCU5VTEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJwZ19wbGFuX2FkdmljZS50 cmFjZV9tYXNrIiwKKwkJCQkJCQkgIkVtaXQgZGVidWdnaW5nIG1lc3NhZ2VzIHNob3dpbmcgdGhl IGNvbXB1dGVkIHN0cmF0ZWd5IG1hc2sgZm9yIGVhY2ggcmVsYXRpb24iLAorCQkJCQkJCSBOVUxM LAorCQkJCQkJCSAmcGdfcGxhbl9hZHZpY2VfdHJhY2VfbWFzaywKKwkJCQkJCQkgZmFsc2UsCisJ CQkJCQkJIFBHQ19VU0VSU0VULAorCQkJCQkJCSAwLAorCQkJCQkJCSBOVUxMLAorCQkJCQkJCSBO VUxMLAorCQkJCQkJCSBOVUxMKTsKKworCU1hcmtHVUNQcmVmaXhSZXNlcnZlZCgicGdfcGxhbl9h ZHZpY2UiKTsKKworCS8qIEdldCBhbiBJRCB0aGF0IHdlIGNhbiB1c2UgdG8gY2FjaGUgZGF0YSBp biBhbiBFeHBsYWluU3RhdGUuICovCisJZXNfZXh0ZW5zaW9uX2lkID0gR2V0RXhwbGFpbkV4dGVu c2lvbklkKCJwZ19wbGFuX2FkdmljZSIpOworCisJLyogUmVnaXN0ZXIgdGhlIG5ldyBFWFBMQUlO IG9wdGlvbnMgaW1wbGVtZW50ZWQgYnkgdGhpcyBtb2R1bGUuICovCisJUmVnaXN0ZXJFeHRlbnNp b25FeHBsYWluT3B0aW9uKCJwbGFuX2FkdmljZSIsCisJCQkJCQkJCSAgIHBnX3BsYW5fYWR2aWNl X2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIpOworCisJLyogSW5zdGFsbCBob29rcyAqLworCXBncGFf cGxhbm5lcl9pbnN0YWxsX2hvb2tzKCk7CisJcHJldl9leHBsYWluX3Blcl9wbGFuID0gZXhwbGFp bl9wZXJfcGxhbl9ob29rOworCWV4cGxhaW5fcGVyX3BsYW5faG9vayA9IHBnX3BsYW5fYWR2aWNl X2V4cGxhaW5fcGVyX3BsYW5faG9vazsKK30KKworLyoKKyAqIEluaXRpYWxpemUgc2hhcmVkIHN0 YXRlIHdoZW4gZmlyc3QgY3JlYXRlZC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfaW5pdF9zaGFy ZWRfc3RhdGUodm9pZCAqcHRyLCB2b2lkICphcmcpCit7CisJcGdwYV9zaGFyZWRfc3RhdGUgKnN0 YXRlID0gKHBncGFfc2hhcmVkX3N0YXRlICopIHB0cjsKKworCUxXTG9ja0luaXRpYWxpemUoJnN0 YXRlLT5sb2NrLCBMV0xvY2tOZXdUcmFuY2hlSWQoInBnX3BsYW5fYWR2aWNlX2xvY2siKSk7CisJ c3RhdGUtPmRzYV90cmFuY2hlID0gTFdMb2NrTmV3VHJhbmNoZUlkKCJwZ19wbGFuX2FkdmljZV9k c2EiKTsKKwlzdGF0ZS0+YXJlYSA9IERTQV9IQU5ETEVfSU5WQUxJRDsKKwlzdGF0ZS0+c2hhcmVk X2NvbGxlY3RvciA9IEludmFsaWREc2FQb2ludGVyOworfQorCisvKgorICogUmV0dXJuIGEgcG9p bnRlciB0byBhIG1lbW9yeSBjb250ZXh0IHdoZXJlIGxvbmctbGl2ZWQgZGF0YSBtYW5hZ2VkIGJ5 IHRoaXMKKyAqIG1vZHVsZSBjYW4gYmUgc3RvcmVkLgorICovCitNZW1vcnlDb250ZXh0CitwZ19w bGFuX2FkdmljZV9nZXRfbWN4dCh2b2lkKQoreworCWlmIChwZ3BhX21lbW9yeV9jb250ZXh0ID09 IE5VTEwpCisJCXBncGFfbWVtb3J5X2NvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9w TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCQkJCQkicGdfcGxhbl9hZHZpY2UiLAorCQkJCQkJCQkJ CQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOworCisJcmV0dXJuIHBncGFfbWVtb3J5X2NvbnRl eHQ7Cit9CisKKy8qCisgKiBHZXQgYSBwb2ludGVyIHRvIG91ciBzaGFyZWQgc3RhdGUuCisgKgor ICogSWYgbm8gc2hhcmVkIHN0YXRlIGV4aXN0cywgY3JlYXRlIGFuZCBpbml0aWFsaXplIGl0LiBJ ZiBpdCBkb2VzIGV4aXN0IGJ1dAorICogdGhpcyBiYWNrZW5kIGhhcyBub3QgeWV0IGFjY2Vzc2Vk IGl0LCBhdHRhY2ggdG8gaXQuIE90aGVyd2lzZSwganVzdCByZXR1cm4KKyAqIG91ciBjYWNoZWQg cG9pbnRlci4KKyAqCisgKiBBbG9uZyB0aGUgd2F5LCBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IExX TG9jayB0cmFuY2hlcyBhcmUgcmVnaXN0ZXJlZC4KKyAqLworcGdwYV9zaGFyZWRfc3RhdGUgKgor cGdfcGxhbl9hZHZpY2VfYXR0YWNoKHZvaWQpCit7CisJaWYgKHBncGFfc3RhdGUgPT0gTlVMTCkK Kwl7CisJCWJvb2wJCWZvdW5kOworCisJCXBncGFfc3RhdGUgPQorCQkJR2V0TmFtZWREU01TZWdt ZW50KCJwZ19wbGFuX2FkdmljZSIsIHNpemVvZihwZ3BhX3NoYXJlZF9zdGF0ZSksCisJCQkJCQkJ ICAgcGdwYV9pbml0X3NoYXJlZF9zdGF0ZSwgJmZvdW5kLCBOVUxMKTsKKwl9CisKKwlyZXR1cm4g cGdwYV9zdGF0ZTsKK30KKworLyoKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gcGdfcGxhbl9hZHZp Y2UncyBEU0EgYXJlYSwgY3JlYXRpbmcgaXQgaWYgbmVlZGVkLgorICovCitkc2FfYXJlYSAqCitw Z19wbGFuX2FkdmljZV9kc2FfYXJlYSh2b2lkKQoreworCWlmIChwZ3BhX2RzYV9hcmVhID09IE5V TEwpCisJeworCQlwZ3BhX3NoYXJlZF9zdGF0ZSAqc3RhdGUgPSBwZ19wbGFuX2FkdmljZV9hdHRh Y2goKTsKKwkJZHNhX2hhbmRsZQlhcmVhX2hhbmRsZTsKKwkJTWVtb3J5Q29udGV4dCBvbGRjb250 ZXh0OworCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdfcGxhbl9hZHZp Y2VfZ2V0X21jeHQoKSk7CisKKwkJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxvY2ssIExXX0VYQ0xV U0lWRSk7CisJCWFyZWFfaGFuZGxlID0gc3RhdGUtPmFyZWE7CisJCWlmIChhcmVhX2hhbmRsZSA9 PSBEU0FfSEFORExFX0lOVkFMSUQpCisJCXsKKwkJCXBncGFfZHNhX2FyZWEgPSBkc2FfY3JlYXRl KHN0YXRlLT5kc2FfdHJhbmNoZSk7CisJCQlkc2FfcGluKHBncGFfZHNhX2FyZWEpOworCQkJc3Rh dGUtPmFyZWEgPSBkc2FfZ2V0X2hhbmRsZShwZ3BhX2RzYV9hcmVhKTsKKwkJCUxXTG9ja1JlbGVh c2UoJnN0YXRlLT5sb2NrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0 YXRlLT5sb2NrKTsKKwkJCXBncGFfZHNhX2FyZWEgPSBkc2FfYXR0YWNoKGFyZWFfaGFuZGxlKTsK KwkJfQorCisJCWRzYV9waW5fbWFwcGluZyhwZ3BhX2RzYV9hcmVhKTsKKworCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJfQorCisJcmV0dXJuIHBncGFfZHNhX2FyZWE7Cit9 CisKKy8qCisgKiBXYXMgdGhlIFBMQU5fQURWSUNFIG9wdGlvbiBzcGVjaWZpZWQgYW5kIG5vdCBz ZXQgdG8gZmFsc2U/CisgKi8KK2Jvb2wKK3BnX3BsYW5fYWR2aWNlX3Nob3VsZF9leHBsYWluKEV4 cGxhaW5TdGF0ZSAqZXMpCit7CisJYm9vbAkgICAqcGxhbl9hZHZpY2UgPSBOVUxMOworCisJaWYg KGVzICE9IE5VTEwpCisJCXBsYW5fYWR2aWNlID0gR2V0RXhwbGFpbkV4dGVuc2lvblN0YXRlKGVz LCBlc19leHRlbnNpb25faWQpOworCXJldHVybiBwbGFuX2FkdmljZSAhPSBOVUxMICYmICpwbGFu X2FkdmljZTsKK30KKworLyoKKyAqIEhhbmRsZXIgZm9yIEVYUExBSU4gKFBMQU5fQURWSUNFKS4K KyAqLworc3RhdGljIHZvaWQKK3BnX3BsYW5fYWR2aWNlX2V4cGxhaW5fb3B0aW9uX2hhbmRsZXIo RXhwbGFpblN0YXRlICplcywgRGVmRWxlbSAqb3B0LAorCQkJCQkJCQkJICBQYXJzZVN0YXRlICpw c3RhdGUpCit7CisJYm9vbAkgICAqcGxhbl9hZHZpY2U7CisKKwlwbGFuX2FkdmljZSA9IEdldEV4 cGxhaW5FeHRlbnNpb25TdGF0ZShlcywgZXNfZXh0ZW5zaW9uX2lkKTsKKworCWlmIChwbGFuX2Fk dmljZSA9PSBOVUxMKQorCXsKKwkJcGxhbl9hZHZpY2UgPSBwYWxsb2MwX29iamVjdChib29sKTsK KwkJU2V0RXhwbGFpbkV4dGVuc2lvblN0YXRlKGVzLCBlc19leHRlbnNpb25faWQsIHBsYW5fYWR2 aWNlKTsKKwl9CisKKwkqcGxhbl9hZHZpY2UgPSBkZWZHZXRCb29sZWFuKG9wdCk7Cit9CisKKy8q CisgKiBEaXNwbGF5IGEgc3RyaW5nIHRoYXQgaXMgbGlrZWx5IHRvIGNvbnNpc3Qgb2YgbXVsdGlw bGUgbGluZXMgaW4gRVhQTEFJTgorICogb3V0cHV0LgorICovCitzdGF0aWMgdm9pZAorcGdfcGxh bl9hZHZpY2VfZXhwbGFpbl90ZXh0X211bHRpbGluZShFeHBsYWluU3RhdGUgKmVzLCBjaGFyICpx bGFiZWwsCisJCQkJCQkJCQkgIGNoYXIgKnZhbHVlKQoreworCWNoYXIJICAgKnM7CisKKwkvKiBG b3Igbm9uLXRleHQgZm9ybWF0cywgaXQncyBiZXN0IG5vdCB0byBhZGQgYW55IHNwZWNpYWwgaGFu ZGxpbmcuICovCisJaWYgKGVzLT5mb3JtYXQgIT0gRVhQTEFJTl9GT1JNQVRfVEVYVCkKKwl7CisJ CUV4cGxhaW5Qcm9wZXJ0eVRleHQocWxhYmVsLCB2YWx1ZSwgZXMpOworCQlyZXR1cm47CisJfQor CisJLyogSW4gdGV4dCBmb3JtYXQsIGlmIHRoZXJlIGlzIG5vIGRhdGEsIGRpc3BsYXkgbm90aGlu Zy4gKi8KKwlpZiAoKnZhbHVlID09ICdcMCcpCisJCXJldHVybjsKKworCS8qCisJICogSXQgbG9v a3MgbmljZXN0IHRvIGluZGVudCBlYWNoIGxpbmUgb2YgdGhlIGFkdmljZSBzZXBhcmF0ZWx5LCBi ZWdpbm5pbmcKKwkgKiBvbiB0aGUgbGluZSBiZWxvdyB0aGUgbGFiZWwuCisJICovCisJRXhwbGFp bkluZGVudFRleHQoZXMpOworCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiVzOlxuIiwgcWxh YmVsKTsKKwllcy0+aW5kZW50Kys7CisJd2hpbGUgKChzID0gc3RyY2hyKHZhbHVlLCAnXG4nKSkg IT0gTlVMTCkKKwl7CisJCUV4cGxhaW5JbmRlbnRUZXh0KGVzKTsKKwkJYXBwZW5kQmluYXJ5U3Ry aW5nSW5mbyhlcy0+c3RyLCB2YWx1ZSwgKHMgLSB2YWx1ZSkgKyAxKTsKKwkJdmFsdWUgPSBzICsg MTsKKwl9CisKKwkvKiBEb24ndCBpbnRlcnByZXQgYSB0ZXJtaW5hbCBuZXdsaW5lIGFzIGEgcmVx dWVzdCBmb3IgYW4gZW1wdHkgbGluZS4gKi8KKwlpZiAoKnZhbHVlICE9ICdcMCcpCisJeworCQlF eHBsYWluSW5kZW50VGV4dChlcyk7CisJCWFwcGVuZFN0cmluZ0luZm8oZXMtPnN0ciwgIiVzXG4i LCB2YWx1ZSk7CisJfQorCisJZXMtPmluZGVudC0tOworfQorCisvKgorICogQWRkIGFkdmljZSBm ZWVkYmFjayB0byB0aGUgRVhQTEFJTiBvdXRwdXQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ19wbGFu X2FkdmljZV9leHBsYWluX2ZlZWRiYWNrKEV4cGxhaW5TdGF0ZSAqZXMsIExpc3QgKmZlZWRiYWNr KQoreworCVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCWZv cmVhY2hfbm9kZShEZWZFbGVtLCBpdGVtLCBmZWVkYmFjaykKKwl7CisJCWludAkJCWZsYWdzID0g ZGVmR2V0SW50MzIoaXRlbSk7CisKKwkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiJXMgLyogIiwg aXRlbS0+ZGVmbmFtZSk7CisJCWlmICgoZmxhZ3MgJiBQR1BBX1RFX01BVENIX0ZVTEwpICE9IDAp CisJCXsKKwkJCUFzc2VydCgoZmxhZ3MgJiBQR1BBX1RFX01BVENIX1BBUlRJQUwpICE9IDApOwor CQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAibWF0Y2hlZCIpOworCQl9CisJCWVsc2UgaWYgKChm bGFncyAmIFBHUEFfVEVfTUFUQ0hfUEFSVElBTCkgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8o JmJ1ZiwgInBhcnRpYWxseSBtYXRjaGVkIik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm8o JmJ1ZiwgIm5vdCBtYXRjaGVkIik7CisJCWlmICgoZmxhZ3MgJiBQR1BBX1RFX0lOQVBQTElDQUJM RSkgIT0gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiwgaW5hcHBsaWNhYmxlIik7CisJ CWlmICgoZmxhZ3MgJiBQR1BBX1RFX0NPTkZMSUNUSU5HKSAhPSAwKQorCQkJYXBwZW5kU3RyaW5n SW5mbygmYnVmLCAiLCBjb25mbGljdGluZyIpOworCQlpZiAoKGZsYWdzICYgUEdQQV9URV9GQUlM RUQpICE9IDApCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICIsIGZhaWxlZCIpOworCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICIgKi9cbiIpOworCX0KKworCXBnX3BsYW5fYWR2aWNlX2V4cGxh aW5fdGV4dF9tdWx0aWxpbmUoZXMsICJTdXBwbGllZCBQbGFuIEFkdmljZSIsCisJCQkJCQkJCQkJ ICBidWYuZGF0YSk7Cit9CisKKy8qCisgKiBBZGQgcmVsZXZhbnQgZGV0YWlscywgaWYgYW55LCB0 byB0aGUgRVhQTEFJTiBvdXRwdXQgZm9yIGEgc2luZ2xlIHBsYW4uCisgKi8KK3N0YXRpYyB2b2lk CitwZ19wbGFuX2FkdmljZV9leHBsYWluX3Blcl9wbGFuX2hvb2soUGxhbm5lZFN0bXQgKnBsYW5u ZWRzdG10LAorCQkJCQkJCQkJIEludG9DbGF1c2UgKmludG8sCisJCQkJCQkJCQkgRXhwbGFpblN0 YXRlICplcywKKwkJCQkJCQkJCSBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKKwkJCQkJCQkJCSBQ YXJhbUxpc3RJbmZvIHBhcmFtcywKKwkJCQkJCQkJCSBRdWVyeUVudmlyb25tZW50ICpxdWVyeUVu dikKK3sKKwlib29sCQlzaG91bGRfZXhwbGFpbjsKKwlEZWZFbGVtICAgICpwZ3BhX2l0ZW07CisJ TGlzdAkgICAqcGdwYV9saXN0OworCisJaWYgKHByZXZfZXhwbGFpbl9wZXJfcGxhbikKKwkJcHJl dl9leHBsYWluX3Blcl9wbGFuKHBsYW5uZWRzdG10LCBpbnRvLCBlcywgcXVlcnlTdHJpbmcsIHBh cmFtcywKKwkJCQkJCQkgIHF1ZXJ5RW52KTsKKworCS8qIFNob3VsZCBhbiBhZHZpY2Ugc3RyaW5n IGJlIHBhcnQgb2YgdGhlIEVYUExBSU4gb3V0cHV0PyAqLworCXNob3VsZF9leHBsYWluID0gcGdf cGxhbl9hZHZpY2Vfc2hvdWxkX2V4cGxhaW4oZXMpOworCisJLyogRmluZCBhbnkgZGF0YSBwZ3Bh X3BsYW5uZXJfc2h1dGRvd24gc3Rhc2hlZCBpbiB0aGUgUGxhbm5lZFN0bXQuICovCisJcGdwYV9p dGVtID0gZmluZF9kZWZlbGVtX2J5X2RlZm5hbWUocGxhbm5lZHN0bXQtPmV4dGVuc2lvbl9zdGF0 ZSwKKwkJCQkJCQkJCQkicGdfcGxhbl9hZHZpY2UiKTsKKwlwZ3BhX2xpc3QgPSBwZ3BhX2l0ZW0g PT0gTlVMTCA/IE5VTEwgOiAoTGlzdCAqKSBwZ3BhX2l0ZW0tPmFyZzsKKworCS8qCisJICogQnkg ZGVmYXVsdCwgaWYgdGhlcmUgaXMgYSByZWNvcmQgb2YgYXR0ZW1wdGluZyB0byBhcHBseSBhZHZp Y2UgZHVyaW5nCisJICogcXVlcnkgcGxhbm5pbmcsIHdlIGFsd2F5cyBvdXRwdXQgdGhhdCBpbmZv cm1hdGlvbiwgYnV0IHRoZSB1c2VyIGNhbiBzZXQKKwkgKiBwZ19wbGFuX2FkdmljZS5hbHdheXNf ZXhwbGFpbl9zdXBwbGllZF9hZHZpY2UgPSBmYWxzZSB0byBzdXBwcmVzcyB0aGF0CisJICogYmVo YXZpb3IuIElmIHRoZXkgZG8sIHdlJ2xsIG9ubHkgZGlzcGxheSBpdCB3aGVuIHRoZSBQTEFOX0FE VklDRSBvcHRpb24KKwkgKiB3YXMgc3BlY2lmaWVkIGFuZCBub3Qgc2V0IHRvIGZhbHNlLgorCSAq CisJICogTkI6IElmIHdlJ3JlIGV4cGxhaW5pbmcgYSBxdWVyeSBwbGFubmVkIGJlZm9yZWhhbmQg LS0gaS5lLiBhIHByZXBhcmVkCisJICogc3RhdGVtZW50IC0tIHRoZSBhcHBsaWNhdGlvbiBvZiBx dWVyeSBhZHZpY2UgbWF5IG5vdCBoYXZlIGJlZW4KKwkgKiByZWNvcmRlZCwgYW5kIHRoZXJlZm9y ZSB0aGlzIHdvbid0IGJlIGFibGUgdG8gc2hvdyBhbnl0aGluZy4gVXNlCisJICogcGdfcGxhbl9h ZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzID0gdHJ1ZSB0byB3b3JrIGFyb3VuZCB0 aGlzLgorCSAqLworCWlmIChwZ3BhX2xpc3QgIT0gTlVMTCAmJiAocGdfcGxhbl9hZHZpY2VfYWx3 YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlIHx8CisJCQkJCQkJICBzaG91bGRfZXhwbGFpbikp CisJeworCQlEZWZFbGVtICAgICpmZWVkYmFjazsKKworCQlmZWVkYmFjayA9IGZpbmRfZGVmZWxl bV9ieV9kZWZuYW1lKHBncGFfbGlzdCwgImZlZWRiYWNrIik7CisJCWlmIChmZWVkYmFjayAhPSBO VUxMKQorCQkJcGdfcGxhbl9hZHZpY2VfZXhwbGFpbl9mZWVkYmFjayhlcywgKExpc3QgKikgZmVl ZGJhY2stPmFyZyk7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgUExBTl9BRFZJQ0Ugb3B0aW9uIHdh cyBzcGVjaWZpZWQgLS0gYW5kIG5vdCBzZW50IHRvIEZBTFNFIC0tCisJICogc2hvdyBnZW5lcmF0 ZWQgYWR2aWNlLgorCSAqLworCWlmIChzaG91bGRfZXhwbGFpbikKKwl7CisJCURlZkVsZW0gICAg KmFkdmljZV9zdHJpbmdfaXRlbTsKKwkJY2hhcgkgICAqYWR2aWNlX3N0cmluZyA9IE5VTEw7CisK KwkJYWR2aWNlX3N0cmluZ19pdGVtID0KKwkJCWZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKHBncGFf bGlzdCwgImFkdmljZV9zdHJpbmciKTsKKwkJaWYgKGFkdmljZV9zdHJpbmdfaXRlbSAhPSBOVUxM KQorCQl7CisJCQlhZHZpY2Vfc3RyaW5nID0gc3RyVmFsKGFkdmljZV9zdHJpbmdfaXRlbS0+YXJn KTsKKwkJCXBnX3BsYW5fYWR2aWNlX2V4cGxhaW5fdGV4dF9tdWx0aWxpbmUoZXMsICJHZW5lcmF0 ZWQgUGxhbiBBZHZpY2UiLAorCQkJCQkJCQkJCQkJICBhZHZpY2Vfc3RyaW5nKTsKKwkJfQorCX0K K30KKworLyoKKyAqIENoZWNrIGhvb2sgZm9yIHBnX3BsYW5fYWR2aWNlLmFkdmljZQorICovCitz dGF0aWMgYm9vbAorcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNrX2hvb2soY2hhciAqKm5ld3Zh bCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKQoreworCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dDsKKwlNZW1vcnlDb250ZXh0IHRtcGNvbnRleHQ7CisJY2hhcgkgICAqZXJyb3I7CisK KwlpZiAoKm5ld3ZhbCA9PSBOVUxMKQorCQlyZXR1cm4gdHJ1ZTsKKworCXRtcGNvbnRleHQgPSBB bGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkgICAi cGdfcGxhbl9hZHZpY2UuYWR2aWNlIiwKKwkJCQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfU0la RVMpOworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY29udGV4dCk7CisK KwkvKgorCSAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gc2F2ZSB0aGUgcGFyc2UgdHJlZSB0aGF0IHdl IGNvbnN0cnVjdCBoZXJlIGZvcgorCSAqIGV2ZW50dWFsIHVzZSB3aGVuIHBsYW5uaW5nIHdpdGgg dGhpcyBhZHZpY2UsIGJ1dCAqZXh0cmEgY2FuIG9ubHkgcG9pbnQKKwkgKiB0byBhIHNpbmdsZSBn dWNfbWFsbG9jJ2QgY2h1bmssIGFuZCBvdXIgcGFyc2UgdHJlZSBpbnZvbHZlcyBhbgorCSAqIGFy Yml0cmFyeSBudW1iZXIgb2YgbWVtb3J5IGFsbG9jYXRpb25zLgorCSAqLworCSh2b2lkKSBwZ3Bh X3BhcnNlKCpuZXd2YWwsICZlcnJvcik7CisKKwlpZiAoZXJyb3IgIT0gTlVMTCkKKwl7CisJCUdV Q19jaGVja19lcnJkZXRhaWwoIkNvdWxkIG5vdCBwYXJzZSBhZHZpY2U6ICVzIiwgZXJyb3IpOwor CQlyZXR1cm4gZmFsc2U7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQp OworCU1lbW9yeUNvbnRleHREZWxldGUodG1wY29udGV4dCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30K KworLyoKKyAqIFNlYXJjaCBhIGxpc3Qgb2YgRGVmRWxlbSBvYmplY3RzIGZvciBhIGdpdmVuIGRl Zm5hbWUuCisgKi8KK3N0YXRpYyBEZWZFbGVtICoKK2ZpbmRfZGVmZWxlbV9ieV9kZWZuYW1lKExp c3QgKmRlZmxpc3QsIGNoYXIgKmRlZm5hbWUpCit7CisJZm9yZWFjaF9ub2RlKERlZkVsZW0sIGl0 ZW0sIGRlZmxpc3QpCisJeworCQlpZiAoc3RyY21wKGl0ZW0tPmRlZm5hbWUsIGRlZm5hbWUpID09 IDApCisJCQlyZXR1cm4gaXRlbTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbCBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uYWE2ZmRjOWU3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250 cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmNvbnRyb2wKQEAgLTAsMCArMSw1IEBA CisjIHBnX3BsYW5fYWR2aWNlIGV4dGVuc2lvbgorY29tbWVudCA9ICdoZWxwIHRoZSBwbGFubmVy IGdldCB0aGUgcmlnaHQgcGxhbicKK2RlZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0 aG5hbWUgPSAnJGxpYmRpci9wZ19wbGFuX2FkdmljZScKK3JlbG9jYXRhYmxlID0gdHJ1ZQpkaWZm IC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ19wbGFuX2FkdmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5lMjA3ZmM3ODBhMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdfcGxhbl9hZHZpY2UuaApAQCAtMCwwICsxLDQzIEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBwZ19wbGFuX2FkdmljZS5oCisgKgkgIG1haW4gaGVhZGVyIGZp bGUgZm9yIHBnX3BsYW5fYWR2aWNlIGNvbnRyaWIgbW9kdWxlCisgKgorICogQ29weXJpZ2h0IChj KSAyMDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJ ICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3BnX3BsYW5fYWR2aWNlLmgKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworI2lmbmRlZiBQR19QTEFOX0FEVklDRV9ICisjZGVmaW5lIFBHX1BMQU5f QURWSUNFX0gKKworI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW5fc3RhdGUuaCIKKyNpbmNsdWRl ICJub2Rlcy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgorI2luY2x1 ZGUgInV0aWxzL2RzYS5oIgorCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9zdGF0ZQorewor CUxXTG9jawkJbG9jazsKKwlpbnQJCQlkc2FfdHJhbmNoZTsKKwlkc2FfaGFuZGxlCWFyZWE7CisJ ZHNhX3BvaW50ZXIgc2hhcmVkX2NvbGxlY3RvcjsKK30gcGdwYV9zaGFyZWRfc3RhdGU7CisKKy8q IEdVQyB2YXJpYWJsZXMgKi8KK2V4dGVybiBjaGFyICpwZ19wbGFuX2FkdmljZV9hZHZpY2U7Citl eHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHM7Citl eHRlcm4gYm9vbCBwZ19wbGFuX2FkdmljZV9sb2NhbF9jb2xsZWN0b3I7CitleHRlcm4gaW50CXBn X3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGltaXQ7CitleHRlcm4gYm9vbCBwZ19wbGFu X2FkdmljZV9zaGFyZWRfY29sbGVjdG9yOworZXh0ZXJuIGludAlwZ19wbGFuX2FkdmljZV9zaGFy ZWRfY29sbGVjdGlvbl9saW1pdDsKK2V4dGVybiBib29sIHBnX3BsYW5fYWR2aWNlX3RyYWNlX21h c2s7CisKKy8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK2V4dGVybiBNZW1vcnlDb250ZXh0IHBn X3BsYW5fYWR2aWNlX2dldF9tY3h0KHZvaWQpOworZXh0ZXJuIHBncGFfc2hhcmVkX3N0YXRlICpw Z19wbGFuX2FkdmljZV9hdHRhY2godm9pZCk7CitleHRlcm4gZHNhX2FyZWEgKnBnX3BsYW5fYWR2 aWNlX2RzYV9hcmVhKHZvaWQpOworZXh0ZXJuIGJvb2wgcGdfcGxhbl9hZHZpY2Vfc2hvdWxkX2V4 cGxhaW4oRXhwbGFpblN0YXRlICplcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX2FzdC5jIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2Fz dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZDYwMTBjNDdlNwot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3QuYwpAQCAt MCwwICsxLDM5NCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9hc3QuYworICoJ ICBhZGRpdGlvbmFsIHN1cHBvcnRpbmcgY29kZSByZWxhdGVkIHRvIHBsYW4gYWR2aWNlIHBhcnNp bmcKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9hc3Qu YworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgor CisjaW5jbHVkZSAicGdwYV9hc3QuaCIKKworI2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRl ICJ1dGlscy9hcnJheS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisKK3N0YXRpYyBi b29sIHBncGFfaWRlbnRpZmllcnNfY292ZXJfdGFyZ2V0KGludCBucmlkcywgcGdwYV9pZGVudGlm aWVyICpyaWRzLAorCQkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQsCisJCQkJ CQkJCQkJICBib29sICpyaWRzX3VzZWQpOworCisvKgorICogR2V0IGEgQyBzdHJpbmcgdGhhdCBj b3JyZXNwb25kcyB0byB0aGUgc3BlY2lmaWVkIGFkdmljZSB0YWcuCisgKi8KK2NoYXIgKgorcGdw YV9jc3RyaW5nX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgYWR2aWNlX3RhZykKK3sK Kwlzd2l0Y2ggKGFkdmljZV90YWcpCisJeworCQljYXNlIFBHUEFfVEFHX0JJVE1BUF9IRUFQX1ND QU46CisJCQlyZXR1cm4gIkJJVE1BUF9IRUFQX1NDQU4iOworCQljYXNlIFBHUEFfVEFHX0ZPUkVJ R05fSk9JTjoKKwkJCXJldHVybiAiRk9SRUlHTl9KT0lOIjsKKwkJY2FzZSBQR1BBX1RBR19HQVRI RVI6CisJCQlyZXR1cm4gIkdBVEhFUiI7CisJCWNhc2UgUEdQQV9UQUdfR0FUSEVSX01FUkdFOgor CQkJcmV0dXJuICJHQVRIRVJfTUVSR0UiOworCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9JTjoKKwkJ CXJldHVybiAiSEFTSF9KT0lOIjsKKwkJY2FzZSBQR1BBX1RBR19JTkRFWF9PTkxZX1NDQU46CisJ CQlyZXR1cm4gIklOREVYX09OTFlfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoK KwkJCXJldHVybiAiSU5ERVhfU0NBTiI7CisJCWNhc2UgUEdQQV9UQUdfSk9JTl9PUkRFUjoKKwkJ CXJldHVybiAiSk9JTl9PUkRFUiI7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklB TElaRToKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9NQVRFUklBTElaRSI7CisJCWNhc2UgUEdQQV9U QUdfTUVSR0VfSk9JTl9QTEFJTjoKKwkJCXJldHVybiAiTUVSR0VfSk9JTl9QTEFJTiI7CisJCWNh c2UgUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9M T09QX01BVEVSSUFMSVpFIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1PSVpFOgor CQkJcmV0dXJuICJORVNURURfTE9PUF9NRU1PSVpFIjsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURf TE9PUF9QTEFJTjoKKwkJCXJldHVybiAiTkVTVEVEX0xPT1BfUExBSU4iOworCQljYXNlIFBHUEFf VEFHX05PX0dBVEhFUjoKKwkJCXJldHVybiAiTk9fR0FUSEVSIjsKKwkJY2FzZSBQR1BBX1RBR19Q QVJUSVRJT05XSVNFOgorCQkJcmV0dXJuICJQQVJUSVRJT05XSVNFIjsKKwkJY2FzZSBQR1BBX1RB R19TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJuICJTRU1JSk9JTl9OT05fVU5JUVVFIjsK KwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9VTklRVUU6CisJCQlyZXR1cm4gIlNFTUlKT0lOX1VO SVFVRSI7CisJCWNhc2UgUEdQQV9UQUdfU0VRX1NDQU46CisJCQlyZXR1cm4gIlNFUV9TQ0FOIjsK KwkJY2FzZSBQR1BBX1RBR19USURfU0NBTjoKKwkJCXJldHVybiAiVElEX1NDQU4iOworCX0KKwor CXBnX3VucmVhY2hhYmxlKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBDb252ZXJ0IGFu IGFkdmljZSB0YWcsIGZvcm1hdHRlZCBhcyBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW4K KyAqIGRvd25jYXNlZCBhcyBhcHByb3ByaWF0ZSwgdG8gYSBwZ3BhX2FkdmljZV90YWdfdHlwZS4K KyAqCisgKiBJZiB3ZSBzdWNjZWVkLCBzZXQgKmZhaWwgPSBmYWxzZSBhbmQgcmV0dXJuIHRoZSBy ZXN1bHQ7IGlmIHdlIGZhaWwsCisgKiBzZXQgKmZhaWwgPSB0cnVlIGFuZCByZXVybiBhbiBhcmJp dHJhcnkgdmFsdWUuCisgKi8KK3BncGFfYWR2aWNlX3RhZ190eXBlCitwZ3BhX3BhcnNlX2Fkdmlj ZV90YWcoY29uc3QgY2hhciAqdGFnLCBib29sICpmYWlsKQoreworCSpmYWlsID0gZmFsc2U7CisK Kwlzd2l0Y2ggKHRhZ1swXSkKKwl7CisJCWNhc2UgJ2InOgorCQkJaWYgKHN0cmNtcCh0YWcsICJi aXRtYXBfaGVhcF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfQklUTUFQX0hFQVBf U0NBTjsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiZm9yZWln bl9qb2luIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfRk9SRUlHTl9KT0lOOworCQkJYnJl YWs7CisJCWNhc2UgJ2cnOgorCQkJaWYgKHN0cmNtcCh0YWcsICJnYXRoZXIiKSA9PSAwKQorCQkJ CXJldHVybiBQR1BBX1RBR19HQVRIRVI7CisJCQlpZiAoc3RyY21wKHRhZywgImdhdGhlcl9tZXJn ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX0dBVEhFUl9NRVJHRTsKKwkJCWJyZWFrOwor CQljYXNlICdoJzoKKwkJCWlmIChzdHJjbXAodGFnLCAiaGFzaF9qb2luIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfSEFTSF9KT0lOOworCQkJYnJlYWs7CisJCWNhc2UgJ2knOgorCQkJaWYg KHN0cmNtcCh0YWcsICJpbmRleF9zY2FuIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdfSU5E RVhfU0NBTjsKKwkJCWlmIChzdHJjbXAodGFnLCAiaW5kZXhfb25seV9zY2FuIikgPT0gMCkKKwkJ CQlyZXR1cm4gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOOworCQkJYnJlYWs7CisJCWNhc2UgJ2on OgorCQkJaWYgKHN0cmNtcCh0YWcsICJqb2luX29yZGVyIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQ QV9UQUdfSk9JTl9PUkRFUjsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChzdHJjbXAo dGFnLCAibWVyZ2Vfam9pbl9tYXRlcmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFH X01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJCQlpZiAoc3RyY21wKHRhZywgIm1lcmdlX2pvaW5f cGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOOworCQkJ YnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9tYXRl cmlhbGl6ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFM SVpFOworCQkJaWYgKHN0cmNtcCh0YWcsICJuZXN0ZWRfbG9vcF9tZW1vaXplIikgPT0gMCkKKwkJ CQlyZXR1cm4gUEdQQV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRTsKKwkJCWlmIChzdHJjbXAodGFn LCAibmVzdGVkX2xvb3BfcGxhaW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19ORVNURURf TE9PUF9QTEFJTjsKKwkJCWlmIChzdHJjbXAodGFnLCAibm9fZ2F0aGVyIikgPT0gMCkKKwkJCQly ZXR1cm4gUEdQQV9UQUdfTk9fR0FUSEVSOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJaWYg KHN0cmNtcCh0YWcsICJwYXJ0aXRpb253aXNlIikgPT0gMCkKKwkJCQlyZXR1cm4gUEdQQV9UQUdf UEFSVElUSU9OV0lTRTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCWlmIChzdHJjbXAodGFn LCAic2VtaWpvaW5fbm9uX3VuaXF1ZSIpID09IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFTUlK T0lOX05PTl9VTklRVUU7CisJCQlpZiAoc3RyY21wKHRhZywgInNlbWlqb2luX3VuaXF1ZSIpID09 IDApCisJCQkJcmV0dXJuIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRTsKKwkJCWlmIChzdHJjbXAo dGFnLCAic2VxX3NjYW4iKSA9PSAwKQorCQkJCXJldHVybiBQR1BBX1RBR19TRVFfU0NBTjsKKwkJ CWJyZWFrOworCQljYXNlICd0JzoKKwkJCWlmIChzdHJjbXAodGFnLCAidGlkX3NjYW4iKSA9PSAw KQorCQkJCXJldHVybiBQR1BBX1RBR19USURfU0NBTjsKKwkJCWJyZWFrOworCX0KKworCS8qIGRp ZG4ndCB3b3JrIG91dCAqLworCSpmYWlsID0gdHJ1ZTsKKworCS8qIHJldHVybiBhbiBhcmJpdHJh cnkgdmFsdWUgdG8gdW53aW5kIHRoZSBjYWxsIHN0YWNrICovCisJcmV0dXJuIFBHUEFfVEFHX1NF UV9TQ0FOOworfQorCisvKgorICogRm9ybWF0IGEgcGdwYV9hZHZpY2VfdGFyZ2V0IGFzIGEgc3Ry aW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRvIGEgU3RyaW5nSW5mby4KKyAqLwordm9pZAorcGdwYV9m b3JtYXRfYWR2aWNlX3RhcmdldChTdHJpbmdJbmZvIHN0ciwgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0 YXJnZXQpCit7CisJaWYgKHRhcmdldC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikK Kwl7CisJCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKwkJY2hhcgkgICAqZGVsaW1zOworCisJCWlmICh0 YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUKQorCQkJZGVsaW1zID0g Int9IjsKKwkJZWxzZQorCQkJZGVsaW1zID0gIigpIjsKKworCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cihzdHIsIGRlbGltc1swXSk7CisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hp bGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlpZiAoZmlyc3QpCisJCQkJZmly c3QgPSBmYWxzZTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsICcgJyk7 CisJCQlwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KHN0ciwgY2hpbGRfdGFyZ2V0KTsKKwkJfQor CQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihzdHIsIGRlbGltc1sxXSk7CisJfQorCWVsc2UKKwl7CisJ CWNvbnN0IGNoYXIgKnJ0X2lkZW50aWZpZXI7CisKKwkJcnRfaWRlbnRpZmllciA9IHBncGFfaWRl bnRpZmllcl9zdHJpbmcoJnRhcmdldC0+cmlkKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhz dHIsIHJ0X2lkZW50aWZpZXIpOworCX0KK30KKworLyoKKyAqIEZvcm1hdCBhIHBncGFfaW5kZXhf dGFyZ2V0IGFzIGEgc3RyaW5nIGFuZCBhcHBlbmQgcmVzdWx0IHRvIGEgU3RyaW5nSW5mby4KKyAq Lwordm9pZAorcGdwYV9mb3JtYXRfaW5kZXhfdGFyZ2V0KFN0cmluZ0luZm8gc3RyLCBwZ3BhX2lu ZGV4X3RhcmdldCAqaXRhcmdldCkKK3sKKwlpZiAoaXRhcmdldC0+aXR5cGUgIT0gUEdQQV9JTkRF WF9OQU1FKQorCXsKKwkJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJCWlmIChpdGFyZ2V0LT5pdHlw ZSA9PSBQR1BBX0lOREVYX0FORCkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCAiJiYo Iik7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoc3RyLCAifHwoIik7CisKKwkJ Zm9yZWFjaF9wdHIocGdwYV9pbmRleF90YXJnZXQsIGNoaWxkX3RhcmdldCwgaXRhcmdldC0+Y2hp bGRyZW4pCisJCXsKKwkJCWlmIChmaXJzdCkKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJZWxzZQor CQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHN0ciwgJyAnKTsKKwkJCXBncGFfZm9ybWF0X2luZGV4 X3RhcmdldChzdHIsIGNoaWxkX3RhcmdldCk7CisJCX0KKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo c3RyLCAnKScpOworCX0KKwllbHNlCisJeworCQlpZiAoaXRhcmdldC0+aW5kbmFtZXNwYWNlICE9 IE5VTEwpCisJCQlhcHBlbmRTdHJpbmdJbmZvKHN0ciwgIiVzLiIsCisJCQkJCQkJIHF1b3RlX2lk ZW50aWZpZXIoaXRhcmdldC0+aW5kbmFtZXNwYWNlKSk7CisJCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoc3RyLCBxdW90ZV9pZGVudGlmaWVyKGl0YXJnZXQtPmluZG5hbWUpKTsKKwl9Cit9CisKKy8q CisgKiBEZXRlcm1pbmUgd2hldGhlciB0d28gcGdwYV9pbmRleF90YXJnZXQgb2JqZWN0cyBhcmUg ZXhhY3RseSBpZGVudGljYWwuCisgKi8KK2Jvb2wKK3BncGFfaW5kZXhfdGFyZ2V0c19lcXVhbChw Z3BhX2luZGV4X3RhcmdldCAqaTEsIHBncGFfaW5kZXhfdGFyZ2V0ICppMikKK3sKKwlpZiAoaTEt Pml0eXBlICE9IGkyLT5pdHlwZSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGkxLT5pdHlwZSA9 PSBQR1BBX0lOREVYX05BTUUpCisJeworCQkvKiBpbmRuYW1lc3BhY2UgY2FuIGJlIE5VTEwsIGFu ZCB0d28gTlVMTCB2YWx1ZXMgYXJlIGVxdWFsICovCisJCWlmICgoaTEtPmluZG5hbWVzcGFjZSAh PSBOVUxMIHx8IGkyLT5pbmRuYW1lc3BhY2UgIT0gTlVMTCkgJiYKKwkJCShpMS0+aW5kbmFtZXNw YWNlID09IE5VTEwgfHwgaTItPmluZG5hbWVzcGFjZSA9PSBOVUxMIHx8CisJCQkgc3RyY21wKGkx LT5pbmRuYW1lc3BhY2UsIGkyLT5pbmRuYW1lc3BhY2UpICE9IDApKQorCQkJcmV0dXJuIGZhbHNl OworCQlpZiAoc3RyY21wKGkxLT5pbmRuYW1lLCBpMi0+aW5kbmFtZSkgIT0gMCkKKwkJCXJldHVy biBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJaW50CQkJaTFfbGVuZ3RoID0gbGlzdF9sZW5ndGgo aTEtPmNoaWxkcmVuKTsKKworCQlpZiAoaTFfbGVuZ3RoICE9IGxpc3RfbGVuZ3RoKGkyLT5jaGls ZHJlbikpCisJCQlyZXR1cm4gZmFsc2U7CisJCWZvciAoaW50IG4gPSAwOyBuIDwgaTFfbGVuZ3Ro OyArK24pCisJCXsKKwkJCXBncGFfaW5kZXhfdGFyZ2V0ICpjMSA9IGxpc3RfbnRoKGkxLT5jaGls ZHJlbiwgbik7CisJCQlwZ3BhX2luZGV4X3RhcmdldCAqYzIgPSBsaXN0X250aChpMi0+Y2hpbGRy ZW4sIG4pOworCisJCQlpZiAoIXBncGFfaW5kZXhfdGFyZ2V0c19lcXVhbChjMSwgYzIpKQorCQkJ CXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogQ2hl Y2sgd2hldGhlciBhbiBpZGVudGlmaWVyIG1hdGNoZXMgYW4gYW55IHBhcnQgb2YgYW4gYWR2aWNl IHRhcmdldC4KKyAqLworYm9vbAorcGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KHBncGFf aWRlbnRpZmllciAqcmlkLCBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwkvKiBGb3Ig bm9uLWlkZW50aWZpZXJzLCBjaGVjayBhbGwgZGVzY2VuZGVudHMuICovCisJaWYgKHRhcmdldC0+ dHR5cGUgIT0gUEdQQV9UQVJHRVRfSURFTlRJRklFUikKKwl7CisJCWZvcmVhY2hfcHRyKHBncGFf YWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlp ZiAocGdwYV9pZGVudGlmaWVyX21hdGNoZXNfdGFyZ2V0KHJpZCwgY2hpbGRfdGFyZ2V0KSkKKwkJ CQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogU3RyYWlnaHRm b3J3YXJkIGNvbXBhcmlzb25zIG9mIGFsaWFzIG5hbWUgYW5kIG9jY2N1cnJlbmNlIG51bWJlci4g Ki8KKwlpZiAoc3RyY21wKHJpZC0+YWxpYXNfbmFtZSwgdGFyZ2V0LT5yaWQuYWxpYXNfbmFtZSkg IT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChyaWQtPm9jY3VycmVuY2UgIT0gdGFyZ2V0LT5y aWQub2NjdXJyZW5jZSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBJZiBhIHJlbGF0aW9u IGlkZW50aWZlciBtZW50aW9ucyBhIHBhcnRpdGlvbiBuYW1lLCBpdCBzaG91bGQgYWxzbworCSAq IHNwZWNpZnkgYSBwYXJ0aXRpb24gc2NoZW1hLiBCdXQgdGhlIHRhcmdldCBtYXkgbGVhdmUgdGhl IHNjaGVtYSBOVUxMIHRvCisJICogbWF0Y2ggYW55dGhpbmcuCisJICovCisJQXNzZXJ0KHJpZC0+ cGFydG5zcCAhPSBOVUxMIHx8IHJpZC0+cGFydHJlbCA9PSBOVUxMKTsKKwlpZiAocmlkLT5wYXJ0 bnNwICE9IE5VTEwgJiYgdGFyZ2V0LT5yaWQucGFydG5zcCAhPSBOVUxMICYmCisJCXN0cmNtcChy aWQtPnBhcnRuc3AsIHRhcmdldC0+cmlkLnBhcnRuc3ApICE9IDApCisJCXJldHVybiBmYWxzZTsK KworCS8qCisJICogVGhlc2UgZmllbGRzIGNhbiBiZSBOVUxMIG9uIGVpdGhlciBzaWRlLCBidXQg TlVMTCBvbmx5IG1hdGNoZXMgYW5vdGhlcgorCSAqIE5VTEwuCisJICovCisJaWYgKCFzdHJpbmdz X2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBhcnRyZWwsIHRhcmdldC0+cmlkLnBhcnRyZWwpKQor CQlyZXR1cm4gZmFsc2U7CisJaWYgKCFzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWQtPnBs YW5fbmFtZSwgdGFyZ2V0LT5yaWQucGxhbl9uYW1lKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0 dXJuIHRydWU7Cit9CisKKy8qCisgKiBNYXRjaCBpZGVudGlmaWVycyB0byBhZHZpY2UgdGFyZ2V0 cyBhbmQgcmV0dXJuIGFuIGVudW0gdmFsdWUgaW5kaWNhdGluZworICogdGhlIHJlbGF0aW9uc2hp cCBiZXR3ZWVuIHRoZSBzZXQgb2Yga2V5cyBhbmQgdGhlIHNldCBvZiB0YXJnZXRzLgorICoKKyAq IFNlZSB0aGUgY29tbWVudHMgZm9yIHBncGFfaXRtX3R5cGUuCisgKi8KK3BncGFfaXRtX3R5cGUK K3BncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KGludCBucmlkcywgcGdwYV9pZGVudGlmaWVy ICpyaWRzLAorCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQpCit7CisJYm9vbAkJ YWxsX3JpZHNfdXNlZCA9IHRydWU7CisJYm9vbAkJYW55X3JpZHNfdXNlZCA9IGZhbHNlOworCWJv b2wJCWFsbF90YXJnZXRzX3VzZWQ7CisJYm9vbAkgICAqcmlkc191c2VkID0gcGFsbG9jMF9hcnJh eShib29sLCBucmlkcyk7CisKKwlhbGxfdGFyZ2V0c191c2VkID0KKwkJcGdwYV9pZGVudGlmaWVy c19jb3Zlcl90YXJnZXQobnJpZHMsIHJpZHMsIHRhcmdldCwgcmlkc191c2VkKTsKKworCWZvciAo aW50IGkgPSAwOyBpIDwgbnJpZHM7ICsraSkKKwl7CisJCWlmIChyaWRzX3VzZWRbaV0pCisJCQlh bnlfcmlkc191c2VkID0gdHJ1ZTsKKwkJZWxzZQorCQkJYWxsX3JpZHNfdXNlZCA9IGZhbHNlOwor CX0KKworCWlmIChhbGxfcmlkc191c2VkKQorCXsKKwkJaWYgKGFsbF90YXJnZXRzX3VzZWQpCisJ CQlyZXR1cm4gUEdQQV9JVE1fRVFVQUw7CisJCWVsc2UKKwkJCXJldHVybiBQR1BBX0lUTV9LRVlT X0FSRV9TVUJTRVQ7CisJfQorCWVsc2UKKwl7CisJCWlmIChhbGxfdGFyZ2V0c191c2VkKQorCQkJ cmV0dXJuIFBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVDsKKwkJZWxzZSBpZiAoYW55X3JpZHNf dXNlZCkKKwkJCXJldHVybiBQR1BBX0lUTV9JTlRFUlNFQ1RJTkc7CisJCWVsc2UKKwkJCXJldHVy biBQR1BBX0lUTV9ESVNKT0lOVDsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgZXZl cnkgdGFyZ2V0IG9yIHN1Yi10YXJnZXQgaXMgbWF0Y2hlZCBieSBhdCBsZWFzdCBvbmUKKyAqIGlk ZW50aWZpZXIsIGFuZCBvdGhlcndpc2UgZmFsc2UuCisgKgorICogQWxzbyBzZXRzIHJpZHNfdXNl ZFtpXSA9IHRydWUgZm9yIGVhY2ggaWRlbmlmaWVyIHRoYXQgbWF0Y2hlcyBhdCBsZWFzdCBvbmUK KyAqIHRhcmdldC4KKyAqLworc3RhdGljIGJvb2wKK3BncGFfaWRlbnRpZmllcnNfY292ZXJfdGFy Z2V0KGludCBucmlkcywgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAgcGdwYV9hZHZp Y2VfdGFyZ2V0ICp0YXJnZXQsIGJvb2wgKnJpZHNfdXNlZCkKK3sKKwlib29sCQlyZXN1bHQgPSBm YWxzZTsKKworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFfVEFSR0VUX0lERU5USUZJRVIpCisJ eworCQlyZXN1bHQgPSB0cnVlOworCisJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwg Y2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7CisJCQlpZiAoIXBncGFfaWRlbnRp ZmllcnNfY292ZXJfdGFyZ2V0KG5yaWRzLCByaWRzLCBjaGlsZF90YXJnZXQsCisJCQkJCQkJCQkJ CSAgIHJpZHNfdXNlZCkpCisJCQkJcmVzdWx0ID0gZmFsc2U7CisJCX0KKwl9CisJZWxzZQorCXsK KwkJZm9yIChpbnQgaSA9IDA7IGkgPCBucmlkczsgKytpKQorCQl7CisJCQlpZiAocGdwYV9pZGVu dGlmaWVyX21hdGNoZXNfdGFyZ2V0KCZyaWRzW2ldLCB0YXJnZXQpKQorCQkJeworCQkJCXJpZHNf dXNlZFtpXSA9IHRydWU7CisJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKworCXJl dHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf YXN0LmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfYXN0LmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY2ZmU3MzBhNGQ0Ci0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCkBAIC0wLDAgKzEsMjA0IEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX2FzdC5oCisgKgkgIGFic3RyYWN0IHN5bnRheCB0 cmVlcyBmb3IgcGxhbiBhZHZpY2UsIHBsdXMgcGFyc2VyL3NjYW5uZXIgc3VwcG9ydAorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNi0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBH cm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2FzdC5oCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9BU1RfSAorI2RlZmluZSBQR1BBX0FT VF9ICisKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKworI2luY2x1ZGUgIm5vZGVzL3Bn X2xpc3QuaCIKKworLyoKKyAqIEFkdmljZSBpdGVtcyBnZW5lcmFsbHkgdGFrZSB0aGUgZm9ybSBT T01FX1RBRyhpdGVtIFsuLi5dKSwgd2hlcmUgYW4gaXRlbQorICogY2FuIHRha2UgdmFyaW91cyBm b3Jtcy4gVGhlIHNpbXBsZXN0IGNhc2UgaXMgYSByZWxhdGlvbiBpZGVudGlmaWVyLCBidXQKKyAq IHNvbWUgdGFncyBhbGxvdyBzdWJsaXN0cywgYW5kIEpPSU5fT1JERVIoKSBhbGxvd3MgYm90aCBv cmRlcmVkIGFuZCB1bm9yZGVyZWQKKyAqIHN1Ymxpc3RzLgorICovCit0eXBlZGVmIGVudW0KK3sK KwlQR1BBX1RBUkdFVF9JREVOVElGSUVSLAkJLyogcmVsYXRpb24gaWRlbnRpZmllciAqLworCVBH UEFfVEFSR0VUX09SREVSRURfTElTVCwJLyogKGl0ZW0gLi4uKSAqLworCVBHUEFfVEFSR0VUX1VO T1JERVJFRF9MSVNUCS8qIHtpdGVtIC4uLn0gKi8KK30gcGdwYV90YXJnZXRfdHlwZTsKKworLyoK KyAqIFdoZW4gYW4gYWR2aWNlIGl0ZW0gZGVzY3JpYmVzIGEgYml0bWFwIGluZGV4IHNjYW4sIGl0 IG1heSBuZWVkIHRvIGRlc2NyaWJlCisgKiB0aGUgdXNlIG9mIG11bHRpcGxlIGluZGV4ZXMuCisg Ki8KK3R5cGVkZWYgZW51bQoreworCVBHUEFfSU5ERVhfTkFNRSwJCQkvKiBpbmRleCBzY2hlbWEg KyBuYW1lICovCisJUEdQQV9JTkRFWF9BTkQsCQkJCS8qICYmKGl0ZW0gLi4uKSAqLworCVBHUEFf SU5ERVhfT1IJCQkJLyogfHwoaXRlbSAuLi4pICovCit9IHBncGFfaW5kZXhfdHlwZTsKKworLyoK KyAqIEFuIGluZGV4IHNwZWNpZmljYXRpb24uIFdlIHVzZSB0aGlzIGZvciBJTkRFWF9TQ0FOLCBJ TkRFWF9PTkxZX1NDQU4sCisgKiBhbmQgQklUTUFQX0hFQVBfU0NBTiBhZHZpY2UsIGJ1dCBpbiB0 aGUgZm9ybWVyIHR3byBjYXNlcywgdGhlIHRhcmdldCBtdXN0CisgKiBiZSBvZiB0eXBlIFBHUEFf SU5ERVhfTkFNRS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9pbmRleF90YXJnZXQKK3sKKwlw Z3BhX2luZGV4X3R5cGUgaXR5cGU7CisKKwkvKiBJbmRleCBzY2hlbSBhbmQgbmFtZSwgd2hlbiBp dHlwZSA9PSBQR1BBX0lOREVYX05BTUUgKi8KKwljaGFyCSAgICppbmRuYW1lc3BhY2U7CisJY2hh cgkgICAqaW5kbmFtZTsKKworCS8qIExpc3Qgb2YgcGdwYV9pbmRleF90YXJnZXQgb2JqZWN0cywg d2hlbiBpdHlwZSAhPSBQR1BBX0lOREVYX05BTUUgKi8KKwlMaXN0CSAgICpjaGlsZHJlbjsKK30g cGdwYV9pbmRleF90YXJnZXQ7CisKKy8qCisgKiBBIHNpbmdsZSBpdGVtIGFib3V0IHdoaWNoIGFk dmljZSBpcyBiZWluZyBnaXZlbiwgd2hpY2ggY291bGQgYmUgZWl0aGVyCisgKiBhIHJlbGF0aW9u IGlkZW50aWZpZXIgdGhhdCB3ZSB3YW50IHRvIGJyZWFrIG91dCBpbnRvIGl0cyBjb25zdGl0dWVu dCBmaWVsZHMsCisgKiBvciBhIHN1Ymxpc3Qgb2Ygc29tZSBraW5kLgorICovCit0eXBlZGVmIHN0 cnVjdCBwZ3BhX2FkdmljZV90YXJnZXQKK3sKKwlwZ3BhX3RhcmdldF90eXBlIHR0eXBlOworCisJ LyoKKwkgKiBUaGlzIGZpZWxkIGlzIG1lYW5pbmdmdWwgd2hlbiB0dHlwZSBpcyBQR1BBX1RBUkdF VF9JREVOVElGSUVSLgorCSAqCisJICogQWxsIGlkZW50aWZpZXJzIG11c3QgaGF2ZSBhbiBhbGlh cyBuYW1lIGFuZCBhbiBvY2N1cnJlbmNlIG51bWJlcjsgdGhlCisJICogcmVtYWluaW5nIGZpZWxk cyBjYW4gYmUgTlVMTC4gTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgdG8gc3BlY2lmeSBhCisJICog cGFydGl0aW9uIG5hbWUgd2l0aG91dCBhIHBhcnRpdGlvbiBzY2hlbWEsIGJ1dCBub3QgdGhlIHJl dmVyc2UuCisJICovCisJcGdwYV9pZGVudGlmaWVyIHJpZDsKKworCS8qCisJICogVGhpcyBmaWVs ZCBpcyBzZXQgd2hlbiB0dHlwZSBpcyBQUEdBX1RBUkdFVF9JREVOVElGSUVSIGFuZCB0aGUgYWR2 aWNlCisJICogdGFnIGlzIFBHUEFfVEFHX0lOREVYX1NDQU4sIFBHUEFfVEFHX0lOREVYX09OTFlf U0NBTiwgb3IKKwkgKiBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOLgorCSAqLworCXBncGFfaW5k ZXhfdGFyZ2V0ICppdGFyZ2V0OworCisJLyoKKwkgKiBXaGVuIHRoZSB0dHlwZSBpcyBQR1BBX1RB UkdFVF88YW55dGhpbmc+X0xJU1QsIHRoaXMgZmllbGQgY29udGFpbnMgYQorCSAqIGxpc3Qgb2Yg YWRkaXRpb25hbCBwZ3BhX2FkdmljZV90YXJnZXQgb2JqZWN0cy4gT3RoZXJ3aXNlLCBpdCBpcyB1 bnVzZWQuCisJICovCisJTGlzdAkgICAqY2hpbGRyZW47Cit9IHBncGFfYWR2aWNlX3RhcmdldDsK KworLyoKKyAqIFRoZXNlIGFyZSBhbGwgdGhlIGtpbmRzIG9mIGFkdmljZSB0aGF0IHdlIGtub3cg aG93IHRvIHBhcnNlLiBJZiBhIGtleXdvcmQKKyAqIGlzIGZvdW5kIGF0IHRoZSB0b3AgbGV2ZWws IGl0IG11c3QgYmUgaW4gdGhpcyBsaXN0LgorICoKKyAqIElmIHlvdSBjaGFuZ2UgYW55dGhpbmcg aGVyZSwgYWxzbyB1cGRhdGUgcGdwYV9wYXJzZV9hZHZpY2VfdGFnIGFuZAorICogcGdwYV9jc3Ry aW5nX2FkdmljZV90YWcuCisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX2FkdmljZV90YWdfdHlwZQor eworCVBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU4sCisJUEdQQV9UQUdfRk9SRUlHTl9KT0lOLAor CVBHUEFfVEFHX0dBVEhFUiwKKwlQR1BBX1RBR19HQVRIRVJfTUVSR0UsCisJUEdQQV9UQUdfSEFT SF9KT0lOLAorCVBHUEFfVEFHX0lOREVYX09OTFlfU0NBTiwKKwlQR1BBX1RBR19JTkRFWF9TQ0FO LAorCVBHUEFfVEFHX0pPSU5fT1JERVIsCisJUEdQQV9UQUdfTUVSR0VfSk9JTl9NQVRFUklBTEla RSwKKwlQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlOLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX01B VEVSSUFMSVpFLAorCVBHUEFfVEFHX05FU1RFRF9MT09QX01FTU9JWkUsCisJUEdQQV9UQUdfTkVT VEVEX0xPT1BfUExBSU4sCisJUEdQQV9UQUdfTk9fR0FUSEVSLAorCVBHUEFfVEFHX1BBUlRJVElP TldJU0UsCisJUEdQQV9UQUdfU0VNSUpPSU5fTk9OX1VOSVFVRSwKKwlQR1BBX1RBR19TRU1JSk9J Tl9VTklRVUUsCisJUEdQQV9UQUdfU0VRX1NDQU4sCisJUEdQQV9UQUdfVElEX1NDQU4KK30gcGdw YV9hZHZpY2VfdGFnX3R5cGU7CisKKy8qCisgKiBBbiBpdGVtIG9mIGFkdmljZSwgbWVhbmluZyBh IHRhZyBhbmQgdGhlIGxpc3Qgb2YgYWxsIHRhcmdldHMgdG8gd2hpY2gKKyAqIGl0IGlzIGJlaW5n IGFwcGxpZWQuCisgKgorICogInRhcmdldHMiIGlzIGEgbGlzdCBvZiBwZ3BhX2FkdmljZV90YXJn ZXQgb2JqZWN0cy4KKyAqCisgKiBUaGUgTGlzdCByZXR1cm5lZCBmcm9tIHBncGFfeXlwYXJzZSBp cyBsaXN0IG9mIHBncGFfYWR2aWNlX2l0ZW0gb2JqZWN0cy4KKyAqLwordHlwZWRlZiBzdHJ1Y3Qg cGdwYV9hZHZpY2VfaXRlbQoreworCXBncGFfYWR2aWNlX3RhZ190eXBlIHRhZzsKKwlMaXN0CSAg ICp0YXJnZXRzOworfSBwZ3BhX2FkdmljZV9pdGVtOworCisvKgorICogUmVzdWx0IG9mIGNvbXBh cmluZyBhbiBhcnJheSBvZiBwZ3BhX3JlbGF0aW9uX2lkZW50aWZpZXIgb2JqZWN0cyB0byBhCisg KiBwZ3BhX2FkdmljZV90YXJnZXQuCisgKgorICogUEdQQV9JVE1fRVFVQUwgbWVhbnMgYWxsIHRh cmdldHMgYXJlIG1hdGNoZWQgYnkgc29tZSBpZGVudGlmaWVyLCBhbmQKKyAqIGFsbCBpZGVudGlm aWVycyB3ZXJlIG1hdGNoZWQgdG8gYSB0YXJnZXQuCisgKgorICogUEdQQV9JVE1fS0VZU19BUkVf U1VCU0VUIG1lYW5zIHRoYXQgYWxsIGlkZW50aWZpZXJzIG1hdGNoZWQgdG8gYSB0YXJnZXQsCisg KiBidXQgdGhlcmUgd2VyZSBsZWZ0b3ZlciB0YXJnZXRzLiBHZW5lcmFsbHksIHRoaXMgbWVhbnMg dGhhdCB0aGUgYWR2aWNlIGlzCisgKiBsb29raW5nIHRvIGFwcGx5IHRvIGFsbCBvZiB0aGUgcmVs cyB3ZSBoYXZlIHBsdXMgc29tZSBhZGRpdGlvbmFsIG9uZXMgdGhhdAorICogd2UgZG9uJ3QgaGF2 ZS4KKyAqCisgKiBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQgbWVhbnMgdGhhdCBhbGwgdGFy Z2V0cyBhcmUgbWF0Y2hlZCBieSBhbgorICogaWRlbnRpZmllcnMsIGJ1dCB0aGVyZSB3ZXJlIGxl ZnRvdmVyIGlkZW50aWZpZXJzLiBHZW5lcmFsbHksIHRoaXMgbWVhbnMKKyAqIHRoYXQgdGhlIGFk dmljZSBpcyBsb29raW5nIHRvIGFwcGx5IHRvIHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlIHJlbHMg d2UgaGF2ZS4KKyAqCisgKiBQR1BBX0lUTV9JTlRFUlNFQ1RJTkcgbWVhbnMgdGhhdCBzb21lIGlk ZW50aWZlaXJzIGFuZCB0YXJnZXRzIHdlcmUgbWF0Y2hlZCwKKyAqIGJ1dCBuZWl0aGVyIGFsbCBp ZGVudGlmaWVycyBub3IgYWxsIHRhcmdldHMgY291bGQgYmUgbWF0Y2hlZCB0byBpdGVtcyBpbgor ICogdGhlIG90aGVyIHNldC4KKyAqCisgKiBQR1BBX0lUTV9ESVNKT0lOVCBtZWFucyB0aGF0IG5v IG1hdGNoZXMgYmV0d2VlbiBpZGVudGlmZWlycyBhbmQgdGFyZ2V0cyB3ZXJlCisgKiBmb3VuZC4K KyAqLwordHlwZWRlZiBlbnVtCit7CisJUEdQQV9JVE1fRVFVQUwsCisJUEdQQV9JVE1fS0VZU19B UkVfU1VCU0VULAorCVBHUEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCwKKwlQR1BBX0lUTV9JTlRF UlNFQ1RJTkcsCisJUEdQQV9JVE1fRElTSk9JTlQKK30gcGdwYV9pdG1fdHlwZTsKKworLyogZm9y IHBncGFfc2Nhbm5lci5sIGFuZCBwZ3BhX3BhcnNlci55ICovCit1bmlvbiBZWVNUWVBFOworI2lm bmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NDQU5O RVJfVAordHlwZWRlZiB2b2lkICp5eXNjYW5fdDsKKyNlbmRpZgorCisvKiBpbiBwZ3BhX3NjYW5u ZXIubCAqLworZXh0ZXJuIGludAlwZ3BhX3l5bGV4KHVuaW9uIFlZU1RZUEUgKnl5bHZhbF9wYXJh bSwgTGlzdCAqKnJlc3VsdCwKKwkJCQkJICAgY2hhciAqKnBhcnNlX2Vycm9yX21zZ19wLCB5eXNj YW5fdCB5eXNjYW5uZXIpOworZXh0ZXJuIHZvaWQgcGdwYV95eWVycm9yKExpc3QgKipyZXN1bHQs IGNoYXIgKipwYXJzZV9lcnJvcl9tc2dfcCwKKwkJCQkJCSB5eXNjYW5fdCB5eXNjYW5uZXIsCisJ CQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBwZ3BhX3NjYW5uZXJfaW5p dChjb25zdCBjaGFyICpzdHIsIHl5c2Nhbl90ICp5eXNjYW5uZXJwKTsKK2V4dGVybiB2b2lkIHBn cGFfc2Nhbm5lcl9maW5pc2goeXlzY2FuX3QgeXlzY2FubmVyKTsKKworLyogaW4gcGdwYV9wYXJz ZXIueSAqLworZXh0ZXJuIGludAlwZ3BhX3l5cGFyc2UoTGlzdCAqKnJlc3VsdCwgY2hhciAqKnBh cnNlX2Vycm9yX21zZ19wLAorCQkJCQkJIHl5c2Nhbl90IHl5c2Nhbm5lcik7CitleHRlcm4gTGlz dCAqcGdwYV9wYXJzZShjb25zdCBjaGFyICphZHZpY2Vfc3RyaW5nLCBjaGFyICoqZXJyb3JfcCk7 CisKKy8qIGluIHBncGFfYXN0LmMgKi8KK2V4dGVybiBjaGFyICpwZ3BhX2NzdHJpbmdfYWR2aWNl X3RhZyhwZ3BhX2FkdmljZV90YWdfdHlwZSBhZHZpY2VfdGFnKTsKK2V4dGVybiBib29sIHBncGFf aWRlbnRpZmllcl9tYXRjaGVzX3RhcmdldChwZ3BhX2lkZW50aWZpZXIgKnJpZCwKKwkJCQkJCQkJ CQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7CitleHRlcm4gcGdwYV9pdG1fdHlwZSBw Z3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbnQgbnJpZHMsCisJCQkJCQkJCQkJCQkgICBw Z3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQg KnRhcmdldCk7CitleHRlcm4gYm9vbCBwZ3BhX2luZGV4X3RhcmdldHNfZXF1YWwocGdwYV9pbmRl eF90YXJnZXQgKmkxLAorCQkJCQkJCQkJIHBncGFfaW5kZXhfdGFyZ2V0ICppMik7CitleHRlcm4g cGdwYV9hZHZpY2VfdGFnX3R5cGUgcGdwYV9wYXJzZV9hZHZpY2VfdGFnKGNvbnN0IGNoYXIgKnRh ZywgYm9vbCAqZmFpbCk7CitleHRlcm4gdm9pZCBwZ3BhX2Zvcm1hdF9hZHZpY2VfdGFyZ2V0KFN0 cmluZ0luZm8gc3RyLAorCQkJCQkJCQkJICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCk7Citl eHRlcm4gdm9pZCBwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQoU3RyaW5nSW5mbyBzdHIsCisJCQkJ CQkJCQkgcGdwYV9pbmRleF90YXJnZXQgKml0YXJnZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBh L2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYyBiL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYTBiMGQ3ZTE1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5f YWR2aWNlL3BncGFfY29sbGVjdG9yLmMKQEAgLTAsMCArMSw2MzkgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIHBncGFfY29sbGVjdG9yLmMKKyAqCSAgY29sbGVjdCBhZHZpY2UgaW50byBi YWNrZW5kLWxvY2FsIG9yIHNoYXJlZCBtZW1vcnkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYt MjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuYworICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZp Y2UuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgorCisjaW5jbHVkZSAiZGF0YXR5cGUv dGltZXN0YW1wLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgorI2luY2x1ZGUgIm5vZGVzL3BnX2xpc3QuaCIKKyNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgor CitQR19GVU5DVElPTl9JTkZPX1YxKHBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UpOwor UEdfRlVOQ1RJT05fSU5GT19WMShwZ19jbGVhcl9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSk7CitQ R19GVU5DVElPTl9JTkZPX1YxKHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKTsKK1BHX0ZV TkNUSU9OX0lORk9fVjEocGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKTsKKworI2RlZmlu ZSBBRFZJQ0VfQ0hVTktfU0laRQkJMTAyNAorI2RlZmluZSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0la RQk2NAorCisjZGVmaW5lCVBHX0dFVF9BRFZJQ0VfQ09MVU1OUwk3CisKKy8qCisgKiBBZHZpY2Ug ZXh0cmFjdGVkIGZyb20gb25lIHF1ZXJ5IHBsYW4sIHRvZ2V0aGVyIHdpdGggdGhlIHF1ZXJ5IHN0 cmluZworICogYW5kIHZhcmlvdXMgb3RoZXIgaWRlbnRpZnlpbmcgZGV0YWlscy4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlCit7CisJT2lkCQkJdXNlcmlkOwkJCS8q IHVzZXIgT0lEICovCisJT2lkCQkJZGJpZDsJCQkvKiBkYXRhYmFzZSBPSUQgKi8KKwl1aW50NjQJ CXF1ZXJ5aWQ7CQkvKiBxdWVyeSBpZGVudGlmaWVyICovCisJVGltZXN0YW1wVHogdGltZXN0YW1w OwkJLyogcXVlcnkgdGltZXN0YW1wICovCisJaW50CQkJYWR2aWNlX29mZnNldDsJLyogc3RhcnQg b2YgYWR2aWNlIGluIHRleHR1YWwgZGF0YSAqLworCWNoYXIJCXRleHR1YWxfZGF0YVtGTEVYSUJM RV9BUlJBWV9NRU1CRVJdOworfSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2U7CisKKy8qCisgKiBBIGJ1 bmNoIG9mIHBvaW50ZXJzIHRvIHBncGFfY29sbGVjdGVkX2FkdmljZSBvYmplY3RzLCBzdG9yZWQg aW4KKyAqIGJhY2tlbmQtbG9jYWwgbWVtb3J5LgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX2xv Y2FsX2FkdmljZV9jaHVuaworeworCXBncGFfY29sbGVjdGVkX2FkdmljZSAqZW50cmllc1tBRFZJ Q0VfQ0hVTktfU0laRV07Cit9IHBncGFfbG9jYWxfYWR2aWNlX2NodW5rOworCisvKgorICogSW5m b3JtYXRpb24gYWJvdXQgYWxsIG9mIHRoZSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2Ugb2JqZWN0cyB0 aGF0IHdlJ3JlCisgKiBzdG9yaW5nIGluIGxvY2FsIG1lbW9yeS4KKyAqCisgKiBXZSBhc3NpZ24g Y29uc2VjdXRpdmUgSURzLCBzdGFydGluZyBmcm9tIDAsIHRvIGVhY2ggcGdwYV9jb2xsZWN0ZWRf YWR2aWNlCisgKiBvYmplY3QgdGhhdCB3ZSBzdG9yZS4gVGhlIGFjdHVhbCBzdG9yYWdlIGlzIGFu IGFycmF5IG9mIGNodW5rcywgd2hpY2gKKyAqIGhlbHBzIGtlZXAgbWVtY3B5KCkgb3ZlcmhlYWQg bG93IHdoZW4gd2Ugc3RhcnQgZGlzY2FyZGluZyBvbGRlciBkYXRhLgorICovCit0eXBlZGVmIHN0 cnVjdCBwZ3BhX2xvY2FsX2FkdmljZQoreworCXVpbnQ2NAkJbmV4dF9pZDsKKwl1aW50NjQJCW9s ZGVzdF9pZDsKKwl1aW50NjQJCWJhc2VfaWQ7CisJaW50CQkJY2h1bmtfYXJyYXlfYWxsb2NhdGVk X3NpemU7CisJcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKipjaHVua3M7Cit9IHBncGFfbG9jYWxf YWR2aWNlOworCisvKgorICogSnVzdCBsaWtlIHBncGFfbG9jYWxfYWR2aWNlX2NodW5rLCBidXQg c3RvcmVkIGluIGEgZHluYW1pYyBzaGFyZWQgYXJlYSwKKyAqIHNvIHdlIG11c3QgdXNlIGRzYV9w b2ludGVyIGluc3RlYWQgb2YgbmF0aXZlIHBvaW50ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBw Z3BhX3NoYXJlZF9hZHZpY2VfY2h1bmsKK3sKKwlkc2FfcG9pbnRlciBlbnRyaWVzW0FEVklDRV9D SFVOS19TSVpFXTsKK30gcGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rOworCisvKgorICogSnVzdCBs aWtlIHBncGFfbG9jYWxfYWR2aWNlLCBidXQgc3RvcmVkIGluIGEgZHluYW1pYyBzaGFyZWQgYXJl YSwgc28KKyAqIHdlIG11c3QgdXNlIGRzYV9wb2ludGVyIGluc3RlYWQgb2YgbmF0aXZlIHBvaW50 ZXJzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3NoYXJlZF9hZHZpY2UKK3sKKwl1aW50NjQJ CW5leHRfaWQ7CisJdWludDY0CQlvbGRlc3RfaWQ7CisJdWludDY0CQliYXNlX2lkOworCWludAkJ CWNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplOworCWRzYV9wb2ludGVyIGNodW5rczsKK30gcGdw YV9zaGFyZWRfYWR2aWNlOworCisvKiBQb2ludGVycyB0byBsb2NhbCBhbmQgc2hhcmVkIGNvbGxl Y3RvcnMgKi8KK3N0YXRpYyBwZ3BhX2xvY2FsX2FkdmljZSAqbG9jYWxfY29sbGVjdG9yID0gTlVM TDsKK3N0YXRpYyBwZ3BhX3NoYXJlZF9hZHZpY2UgKnNoYXJlZF9jb2xsZWN0b3IgPSBOVUxMOwor CisvKiBTdGF0aWMgZnVuY3Rpb25zICovCitzdGF0aWMgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpw Z3BhX21ha2VfY29sbGVjdGVkX2FkdmljZShPaWQgdXNlcmlkLAorCQkJCQkJCQkJCQkJCQkgT2lk IGRiaWQsCisJCQkJCQkJCQkJCQkJCSB1aW50NjQgcXVlcnlJZCwKKwkJCQkJCQkJCQkJCQkJIFRp bWVzdGFtcFR6IHRpbWVzdGFtcCwKKwkJCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0 cmluZywKKwkJCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcsCisJCQkJCQkJ CQkJCQkJCSBkc2FfYXJlYSAqYXJlYSwKKwkJCQkJCQkJCQkJCQkJIGRzYV9wb2ludGVyICpyZXN1 bHQpOworc3RhdGljIHZvaWQgcGdwYV9zdG9yZV9sb2NhbF9hZHZpY2UocGdwYV9jb2xsZWN0ZWRf YWR2aWNlICpjYSk7CitzdGF0aWMgdm9pZCBwZ3BhX3RyaW1fbG9jYWxfYWR2aWNlKGludCBsaW1p dCk7CitzdGF0aWMgdm9pZCBwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoZHNhX3BvaW50ZXIgY2Ff cG9pbnRlcik7CitzdGF0aWMgdm9pZCBwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAq YXJlYSwgaW50IGxpbWl0KTsKKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIHF1 ZXJ5IHN0cmluZyBmcm9tIHBncGFfY29sbGVjdGVkX2FkdmljZSAqLworc3RhdGljIGlubGluZSBj b25zdCBjaGFyICoKK3F1ZXJ5X3N0cmluZyhwZ3BhX2NvbGxlY3RlZF9hZHZpY2UgKmNhKQorewor CXJldHVybiBjYS0+dGV4dHVhbF9kYXRhOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0 cmFjdCB0aGUgYWR2aWNlIHN0cmluZyBmcm9tIHBncGFfY29sbGVjdGVkX2FkdmljZSAqLworc3Rh dGljIGlubGluZSBjb25zdCBjaGFyICoKK2FkdmljZV9zdHJpbmcocGdwYV9jb2xsZWN0ZWRfYWR2 aWNlICpjYSkKK3sKKwlyZXR1cm4gY2EtPnRleHR1YWxfZGF0YSArIGNhLT5hZHZpY2Vfb2Zmc2V0 OworfQorCisvKgorICogU3RvcmUgY29sbGVjdGVkIHF1ZXJ5IGFkdmljZSBpbnRvIHRoZSBsb2Nh bCBvciBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciwKKyAqIGFzIGFwcHJvcHJpYXRlLgorICovCit2 b2lkCitwZ3BhX2NvbGxlY3RfYWR2aWNlKHVpbnQ2NCBxdWVyeUlkLCBjb25zdCBjaGFyICpxdWVy eV9zdHJpbmcsCisJCQkJCWNvbnN0IGNoYXIgKmFkdmljZV9zdHJpbmcpCit7CisJT2lkCQkJdXNl cmlkID0gR2V0VXNlcklkKCk7CisJT2lkCQkJZGJpZCA9IE15RGF0YWJhc2VJZDsKKwlUaW1lc3Rh bXBUeiBub3cgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwlpZiAocGdfcGxhbl9hZHZpY2Vf bG9jYWxfY29sbGVjdG9yICYmCisJCXBnX3BsYW5fYWR2aWNlX2xvY2FsX2NvbGxlY3Rpb25fbGlt aXQgPiAwKQorCXsKKwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwkJTWVtb3J5Q29udGV4 dCBvbGRjb250ZXh0OworCisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGdf cGxhbl9hZHZpY2VfZ2V0X21jeHQoKSk7CisJCWNhID0gcGdwYV9tYWtlX2NvbGxlY3RlZF9hZHZp Y2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJCQkJCQkJCQkJcXVlcnlfc3RyaW5nLCBh ZHZpY2Vfc3RyaW5nLAorCQkJCQkJCQkJCU5VTEwsIE5VTEwpOworCQlwZ3BhX3N0b3JlX2xvY2Fs X2FkdmljZShjYSk7CisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisK KwlpZiAocGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3RvciAmJgorCQlwZ19wbGFuX2Fkdmlj ZV9zaGFyZWRfY29sbGVjdGlvbl9saW1pdCA+IDApCisJeworCQlkc2FfYXJlYSAgICphcmVhID0g cGdfcGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwkJZHNhX3BvaW50ZXIgY2FfcG9pbnRlciA9IElu dmFsaWREc2FQb2ludGVyOyAvKiBwbGFjYXRlIGNvbXBpbGVyICovCisKKwkJcGdwYV9tYWtlX2Nv bGxlY3RlZF9hZHZpY2UodXNlcmlkLCBkYmlkLCBxdWVyeUlkLCBub3csCisJCQkJCQkJCSAgIHF1 ZXJ5X3N0cmluZywgYWR2aWNlX3N0cmluZywgYXJlYSwKKwkJCQkJCQkJICAgJmNhX3BvaW50ZXIp OworCQlwZ3BhX3N0b3JlX3NoYXJlZF9hZHZpY2UoY2FfcG9pbnRlcik7CisJfQorfQorCisvKgor ICogQWxsb2NhdGUgYW5kIGZpbGwgYSBuZXcgcGdwYV9jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdC4K KyAqCisgKiBJZiBhcmVhICE9IE5VTEwsIGl0IGlzIHVzZWQgdG8gYWxsb2NhdGUgdGhlIG5ldyBv YmplY3QsIGFuZCB0aGUgcmVzdWx0aW5nCisgKiBkc2FfcG9pbnRlciBpcyByZXR1cm5lZCB2aWEg KnJlc3VsdC4KKyAqCisgKiBJZiBhcmVhID09IE5VTEwsIHRoZSBuZXcgb2JqZWN0IGlzIGFsbG9j YXRlZCBpbiB0aGUgY3VycmVudCBtZW1vcnkgY29udGV4dCwKKyAqIGFuZCByZXN1bHQgaXMgbm90 IGV4YW1pbmVkIG9yIG1vZGlmaWVkLgorICovCitzdGF0aWMgcGdwYV9jb2xsZWN0ZWRfYWR2aWNl ICoKK3BncGFfbWFrZV9jb2xsZWN0ZWRfYWR2aWNlKE9pZCB1c2VyaWQsIE9pZCBkYmlkLCB1aW50 NjQgcXVlcnlJZCwKKwkJCQkJCSAgIFRpbWVzdGFtcFR6IHRpbWVzdGFtcCwKKwkJCQkJCSAgIGNv bnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKmFkdmljZV9zdHJp bmcsCisJCQkJCQkgICBkc2FfYXJlYSAqYXJlYSwgZHNhX3BvaW50ZXIgKnJlc3VsdCkKK3sKKwlz aXplX3QJCXF1ZXJ5X3N0cmluZ19sZW5ndGggPSBzdHJsZW4ocXVlcnlfc3RyaW5nKSArIDE7CisJ c2l6ZV90CQlhZHZpY2Vfc3RyaW5nX2xlbmd0aCA9IHN0cmxlbihhZHZpY2Vfc3RyaW5nKSArIDE7 CisJc2l6ZV90CQl0b3RhbF9sZW5ndGg7CisJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsKKwor CXRvdGFsX2xlbmd0aCA9IG9mZnNldG9mKHBncGFfY29sbGVjdGVkX2FkdmljZSwgdGV4dHVhbF9k YXRhKQorCQkrIHF1ZXJ5X3N0cmluZ19sZW5ndGggKyBhZHZpY2Vfc3RyaW5nX2xlbmd0aDsKKwor CWlmIChhcmVhID09IE5VTEwpCisJCWNhID0gcGFsbG9jKHRvdGFsX2xlbmd0aCk7CisJZWxzZQor CXsKKwkJKnJlc3VsdCA9IGRzYV9hbGxvY2F0ZShhcmVhLCB0b3RhbF9sZW5ndGgpOworCQljYSA9 IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCAqcmVzdWx0KTsKKwl9CisKKwljYS0+dXNlcmlkID0gdXNl cmlkOworCWNhLT5kYmlkID0gZGJpZDsKKwljYS0+cXVlcnlpZCA9IHF1ZXJ5SWQ7CisJY2EtPnRp bWVzdGFtcCA9IHRpbWVzdGFtcDsKKwljYS0+YWR2aWNlX29mZnNldCA9IHF1ZXJ5X3N0cmluZ19s ZW5ndGg7CisKKwltZW1jcHkoY2EtPnRleHR1YWxfZGF0YSwgcXVlcnlfc3RyaW5nLCBxdWVyeV9z dHJpbmdfbGVuZ3RoKTsKKwltZW1jcHkoJmNhLT50ZXh0dWFsX2RhdGFbY2EtPmFkdmljZV9vZmZz ZXRdLAorCQkgICBhZHZpY2Vfc3RyaW5nLCBhZHZpY2Vfc3RyaW5nX2xlbmd0aCk7CisKKwlyZXR1 cm4gY2E7Cit9CisKKy8qCisgKiBBZGQgYSBwZ19jb2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byBv dXIgYmFja2VuZC1sb2NhbCBhZHZpY2UgY29sbGVjdGlvbi4KKyAqCisgKiBDYWxsZXIgaXMgcmVz cG9uc2libGUgZm9yIHN3aXRjaGluZyB0byB0aGUgYXBwcm9wcmlhdGUgbWVtb3J5IGNvbnRleHQ7 CisgKiB0aGUgcHJvdmlkZWQgb2JqZWN0IHNob3VsZCBoYXZlIGJlZW4gYWxsb2NhdGVkIGluIHRo YXQgc2FtZSBjb250ZXh0LgorICovCitzdGF0aWMgdm9pZAorcGdwYV9zdG9yZV9sb2NhbF9hZHZp Y2UocGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYSkKK3sKKwl1aW50NjQJCWNodW5rX251bWJlcjsK Kwl1aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ3BhX2xvY2FsX2FkdmljZSAqbGEgPSBsb2NhbF9j b2xsZWN0b3I7CisKKwkvKiBJZiB0aGUgbG9jYWwgYWR2aWNlIGNvbGxlY3RvciBpc24ndCBpbml0 aWFsaXplZCB5ZXQsIGRvIHRoYXQgbm93LiAqLworCWlmIChsYSA9PSBOVUxMKQorCXsKKwkJbGEg PSBwYWxsb2MwKHNpemVvZihwZ3BhX2xvY2FsX2FkdmljZSkpOworCQlsYS0+Y2h1bmtfYXJyYXlf YWxsb2NhdGVkX3NpemUgPSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwkJbGEtPmNodW5rcyA9 IHBhbGxvYzBfYXJyYXkocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJICAgbGEt PmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJbG9jYWxfY29sbGVjdG9yID0gbGE7CisJ fQorCisJLyogQ29tcHV0ZSBjaHVuayBhbmQgb2Zmc2V0IGF0IHdoaWNoIHRvIHN0b3JlIHRoaXMg YWR2aWNlLiAqLworCWNodW5rX251bWJlciA9IChsYS0+bmV4dF9pZCAtIGxhLT5iYXNlX2lkKSAv IEFEVklDRV9DSFVOS19TSVpFOworCWNodW5rX29mZnNldCA9IChsYS0+bmV4dF9pZCAtIGxhLT5i YXNlX2lkKSAlIEFEVklDRV9DSFVOS19TSVpFOworCisJLyogRXh0ZW5kIGNodW5rIGFycmF5LCBp ZiBuZWVkZWQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2Nh dGVkX3NpemUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKworCQluZXdfc2l6ZSA9IGxhLT5jaHVu a19hcnJheV9hbGxvY2F0ZWRfc2l6ZSArIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCQlsYS0+ Y2h1bmtzID0gcmVwYWxsb2MwX2FycmF5KGxhLT5jaHVua3MsCisJCQkJCQkJCQkgcGdwYV9sb2Nh bF9hZHZpY2VfY2h1bmsgKiwKKwkJCQkJCQkJCSBsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3Np emUsCisJCQkJCQkJCQkgbmV3X3NpemUpOworCQlsYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3Np emUgPSBuZXdfc2l6ZTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBuZXcgY2h1bmssIGlmIG5lZWRlZC4g Ki8KKwlpZiAobGEtPmNodW5rc1tjaHVua19udW1iZXJdID09IE5VTEwpCisJCWxhLT5jaHVua3Nb Y2h1bmtfbnVtYmVyXSA9IHBhbGxvYzBfb2JqZWN0KHBncGFfbG9jYWxfYWR2aWNlX2NodW5rKTsK KworCS8qIFNhdmUgcG9pbnRlciBhbmQgYnVtcCBuZXh0LWlkIGNvdW50ZXIuICovCisJQXNzZXJ0 KGxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID09IE5VTEwp OworCWxhLT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gY2E7 CisJKytsYS0+bmV4dF9pZDsKKworCS8qIElmIHdlJ3ZlIGV4Y2VlZGVkIHRoZSBzdG9yYWdlIGxp bWl0LCBkaXNjYXJkIG9sZCBkYXRhLiAqLworCXBncGFfdHJpbV9sb2NhbF9hZHZpY2UocGdfcGxh bl9hZHZpY2VfbG9jYWxfY29sbGVjdGlvbl9saW1pdCk7Cit9CisKKy8qCisgKiBBZGQgYSBwZ19j b2xsZWN0ZWRfYWR2aWNlIG9iamVjdCB0byB0aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0aW9uLgor ICoKKyAqICdjYV9wb2ludGVyJyBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHRoZSBw Z19wbGFuX2FkdmljZSBEU0EgYXJlYQorICogYW5kIHNob3VsZCBwb2ludCB0byBhbiBvYmplY3Qg b2YgdHlwZSBwZ3BhX2NvbGxlY3RlZF9hZHZpY2UuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3N0 b3JlX3NoYXJlZF9hZHZpY2UoZHNhX3BvaW50ZXIgY2FfcG9pbnRlcikKK3sKKwl1aW50NjQJCWNo dW5rX251bWJlcjsKKwl1aW50NjQJCWNodW5rX29mZnNldDsKKwlwZ3BhX3NoYXJlZF9zdGF0ZSAq c3RhdGUgPSBwZ19wbGFuX2FkdmljZV9hdHRhY2goKTsKKwlkc2FfYXJlYSAgICphcmVhID0gcGdf cGxhbl9hZHZpY2VfZHNhX2FyZWEoKTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVk X2NvbGxlY3RvcjsKKwlkc2FfcG9pbnRlciAqY2h1bmtfYXJyYXk7CisJcGdwYV9zaGFyZWRfYWR2 aWNlX2NodW5rICpjaHVuazsKKworCS8qIExvY2sgdGhlIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xv Y2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qCisJICogSWYgd2Un cmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciB5ZXQsIGZpeCB0 aGF0IG5vdy4KKwkgKiBJZiB3ZSdyZSB0aGUgZmlyc3Qgb25lcyB0byBhdHRhY2gsIHdlIG1heSBu ZWVkIHRvIGNyZWF0ZSB0aGUgb2JqZWN0LgorCSAqLworCWlmIChzYSA9PSBOVUxMKQorCXsKKwkJ aWYgKHN0YXRlLT5zaGFyZWRfY29sbGVjdG9yID09IEludmFsaWREc2FQb2ludGVyKQorCQkJc3Rh dGUtPnNoYXJlZF9jb2xsZWN0b3IgPQorCQkJCWRzYV9hbGxvY2F0ZTAoYXJlYSwgc2l6ZW9mKHBn cGFfc2hhcmVkX2FkdmljZSkpOworCQlzaGFyZWRfY29sbGVjdG9yID0gc2EgPSBkc2FfZ2V0X2Fk ZHJlc3MoYXJlYSwgc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IpOworCX0KKworCS8qCisJICogSXQn cyBwb3NzaWJsZSB0aGF0IHNvbWUgb3RoZXIgYmFja2VuZCBtYXkgaGF2ZSBzdWNjZWVkZWQgaW4g Y3JlYXRpbmcKKwkgKiB0aGUgbWFpbiBjb2xsZWN0b3Igb2JqZWN0IGJ1dCBmYWlsZWQgdG8gYWxs b2NhdGUgYW4gaW5pdGlhbCBjaHVuaworCSAqIGFycmF5LCBzbyB3ZSBtdXN0IGJlIHByZXBhcmVk IHRvIGFsbG9jYXRlIHRoZSBjaHVuayBhcnJheSBoZXJlIHdoZXRoZXIKKwkgKiBvciBub3Qgd2Ug Y3JlYXRlZCB0aGUgY29sbGVjdG9yIG9iamVjdC4KKwkgKi8KKwlpZiAoc2hhcmVkX2NvbGxlY3Rv ci0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUgPT0gMCkKKwl7CisJCXNhLT5jaHVua3MgPQor CQkJZHNhX2FsbG9jYXRlMChhcmVhLAorCQkJCQkJICBzaXplb2YoZHNhX3BvaW50ZXIpICogQURW SUNFX0NIVU5LX0FSUkFZX1NJWkUpOworCQlzYS0+Y2h1bmtfYXJyYXlfYWxsb2NhdGVkX3NpemUg PSBBRFZJQ0VfQ0hVTktfQVJSQVlfU0laRTsKKwl9CisKKwkvKiBDb21wdXRlIGNodW5rIGFuZCBv ZmZzZXQgYXQgd2hpY2ggdG8gc3RvcmUgdGhpcyBhZHZpY2UuICovCisJY2h1bmtfbnVtYmVyID0g KHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJY2h1bmtf b2Zmc2V0ID0gKHNhLT5uZXh0X2lkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7 CisKKwkvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGNodW5rIGFycmF5IGFuZCwgaWYgbmVlZGVk LCBleHRlbmQgaXQuICovCisJaWYgKGNodW5rX251bWJlciA+PSBzYS0+Y2h1bmtfYXJyYXlfYWxs b2NhdGVkX3NpemUpCisJeworCQlpbnQJCQluZXdfc2l6ZTsKKwkJZHNhX3BvaW50ZXIgbmV3X2No dW5rczsKKworCQkvKgorCQkgKiBEU0EgY2FuJ3QgZW5sYXJnZSBhbiBleGlzdGluZyBhbGxvY2F0 aW9uLCBzbyB3ZSBtdXN0IG1ha2UgYSBuZXcKKwkJICogYWxsb2NhdGlvbiBhbmQgY29weSBkYXRh IG92ZXIuCisJCSAqLworCQluZXdfc2l6ZSA9IHNhLT5jaHVua19hcnJheV9hbGxvY2F0ZWRfc2l6 ZSArIEFEVklDRV9DSFVOS19BUlJBWV9TSVpFOworCQluZXdfY2h1bmtzID0gZHNhX2FsbG9jYXRl MChhcmVhLCBzaXplb2YoZHNhX3BvaW50ZXIpICogbmV3X3NpemUpOworCQljaHVua19hcnJheSA9 IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBuZXdfY2h1bmtzKTsKKwkJbWVtY3B5KGNodW5rX2FycmF5 LCBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgc2EtPmNodW5rcyksCisJCQkgICBzaXplb2YoZHNhX3Bv aW50ZXIpICogc2EtPmNodW5rX2FycmF5X2FsbG9jYXRlZF9zaXplKTsKKwkJZHNhX2ZyZWUoYXJl YSwgc2EtPmNodW5rcyk7CisJCXNhLT5jaHVua3MgPSBuZXdfY2h1bmtzOworCQlzYS0+Y2h1bmtf YXJyYXlfYWxsb2NhdGVkX3NpemUgPSBuZXdfc2l6ZTsKKwl9CisJZWxzZQorCQljaHVua19hcnJh eSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIEdldCB0aGUgYWRk cmVzcyBvZiB0aGUgZGVzaXJlZCBjaHVuaywgYWxsb2NhdGluZyBpdCBpZiBuZWVkZWQuICovCisJ aWYgKGNodW5rX2FycmF5W2NodW5rX251bWJlcl0gPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCWNo dW5rX2FycmF5W2NodW5rX251bWJlcl0gPQorCQkJZHNhX2FsbG9jYXRlMChhcmVhLCBzaXplb2Yo cGdwYV9zaGFyZWRfYWR2aWNlX2NodW5rKSk7CisJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJl YSwgY2h1bmtfYXJyYXlbY2h1bmtfbnVtYmVyXSk7CisKKwkvKiBTYXZlIHBvaW50ZXIgYW5kIGJ1 bXAgbmV4dC1pZCBjb3VudGVyLiAqLworCUFzc2VydChjaHVuay0+ZW50cmllc1tjaHVua19vZmZz ZXRdID09IEludmFsaWREc2FQb2ludGVyKTsKKwljaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRd ID0gY2FfcG9pbnRlcjsKKwkrK3NhLT5uZXh0X2lkOworCisJLyogSWYgd2UndmUgZXhjZWVkZWQg dGhlIHN0b3JhZ2UgbGltaXQsIGRpc2NhcmQgb2xkIGRhdGEuICovCisJcGdwYV90cmltX3NoYXJl ZF9hZHZpY2UoYXJlYSwgcGdfcGxhbl9hZHZpY2Vfc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQpOwor CisJLyogUmVsZWFzZSBsb2NrIG9uIHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tSZWxlYXNlKCZz dGF0ZS0+bG9jayk7Cit9CisKKy8qCisgKiBEaXNjYXJkIGNvbGxlY3RlZCBhZHZpY2Ugc3RvcmVk IGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5IGluIGV4Y2VzcyBvZiB0aGUKKyAqIHNwZWNpZmllZCBs aW1pdC4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfdHJpbV9sb2NhbF9hZHZpY2UoaW50IGxpbWl0 KQoreworCXBncGFfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3RvcjsKKwl1aW50NjQJ CWN1cnJlbnRfY291bnQ7CisJdWludDY0CQl0cmltX2NvdW50OworCXVpbnQ2NAkJdG90YWxfY2h1 bmtfY291bnQ7CisJdWludDY0CQl0cmltX2NodW5rX2NvdW50OworCXVpbnQ2NAkJcmVtYWluaW5n X2NodW5rX2NvdW50OworCisJLyogSWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbGltaXQs IHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KKwljdXJyZW50X2NvdW50ID0gbGEtPm5leHRfaWQg LSBsYS0+b2xkZXN0X2lkOworCWlmIChjdXJyZW50X2NvdW50IDw9IGxpbWl0KQorCQlyZXR1cm47 CisKKwkvKiBGcmVlIGVub3VnaCBlbnRyaWVzIHRvIGdldCB1cyBiYWNrIGRvd24gdG8gdGhlIGxp bWl0LiAqLworCXRyaW1fY291bnQgPSBjdXJyZW50X2NvdW50IC0gbGltaXQ7CisJd2hpbGUgKHRy aW1fY291bnQgPiAwKQorCXsKKwkJdWludDY0CQljaHVua19udW1iZXI7CisJCXVpbnQ2NAkJY2h1 bmtfb2Zmc2V0OworCisJCWNodW5rX251bWJlciA9IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2Vf aWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJCWNodW5rX29mZnNldCA9IChsYS0+b2xkZXN0X2lk IC0gbGEtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJWkU7CisKKwkJQXNzZXJ0KGxhLT5jaHVu a3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdICE9IE5VTEwpOworCQlwZnJl ZShsYS0+Y2h1bmtzW2NodW5rX251bWJlcl0tPmVudHJpZXNbY2h1bmtfb2Zmc2V0XSk7CisJCWxh LT5jaHVua3NbY2h1bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdID0gTlVMTDsKKwkJ KytsYS0+b2xkZXN0X2lkOworCQktLXRyaW1fY291bnQ7CisJfQorCisJLyogRnJlZSBhbnkgY2h1 bmtzIHRoYXQgYXJlIG5vdyBlbnRpcmVseSB1bnVzZWQuICovCisJdHJpbV9jaHVua19jb3VudCA9 IChsYS0+b2xkZXN0X2lkIC0gbGEtPmJhc2VfaWQpIC8gQURWSUNFX0NIVU5LX1NJWkU7CisJZm9y ICh1aW50NjQgbiA9IDA7IG4gPCB0cmltX2NodW5rX2NvdW50OyArK24pCisJCXBmcmVlKGxhLT5j aHVua3Nbbl0pOworCisJLyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJhY2sgdG93 YXJkIHRoZSBiYXNlIG9mIHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9IChsYS0+ bmV4dF9pZCAtIGxhLT5iYXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEpIC8g QURWSUNFX0NIVU5LX1NJWkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxfY2h1bmtf Y291bnQgLSB0cmltX2NodW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291bnQgPiAw KQorCQltZW1tb3ZlKCZsYS0+Y2h1bmtzWzBdLCAmbGEtPmNodW5rc1t0cmltX2NodW5rX2NvdW50 XSwKKwkJCQlzaXplb2YocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikgKiByZW1haW5pbmdfY2h1 bmtfY291bnQpOworCisJLyogRG9uJ3QgbGVhdmUgc3RhbGUgcG9pbnRlcnMgYXJvdW5kLiAqLwor CW1lbXNldCgmbGEtPmNodW5rc1tyZW1haW5pbmdfY2h1bmtfY291bnRdLCAwLAorCQkgICBzaXpl b2YocGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsgKikKKwkJICAgKiAodG90YWxfY2h1bmtfY291bnQg LSByZW1haW5pbmdfY2h1bmtfY291bnQpKTsKKworCS8qIEFkanVzdCBiYXNlIElEIHZhbHVlIGFj Y29yZGluZ2x5LiAqLworCWxhLT5iYXNlX2lkICs9IHRyaW1fY2h1bmtfY291bnQgKiBBRFZJQ0Vf Q0hVTktfU0laRTsKK30KKworLyoKKyAqIERpc2NhcmQgY29sbGVjdGVkIGFkdmljZSBzdG9yZWQg aW4gc2hhcmVkIG1lbW9yeSBpbiBleGNlc3Mgb2YgdGhlCisgKiBzcGVjaWZpZWQgbGltaXQuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX3RyaW1fc2hhcmVkX2FkdmljZShkc2FfYXJlYSAqYXJlYSwg aW50IGxpbWl0KQoreworCXBncGFfc2hhcmVkX2FkdmljZSAqc2EgPSBzaGFyZWRfY29sbGVjdG9y OworCXVpbnQ2NAkJY3VycmVudF9jb3VudDsKKwl1aW50NjQJCXRyaW1fY291bnQ7CisJdWludDY0 CQl0b3RhbF9jaHVua19jb3VudDsKKwl1aW50NjQJCXRyaW1fY2h1bmtfY291bnQ7CisJdWludDY0 CQlyZW1haW5pbmdfY2h1bmtfY291bnQ7CisJZHNhX3BvaW50ZXIgKmNodW5rX2FycmF5OworCisJ LyogSWYgd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbGltaXQsIHRoZXJlJ3Mgbm90aGluZyB0 byBkby4gKi8KKwljdXJyZW50X2NvdW50ID0gc2EtPm5leHRfaWQgLSBzYS0+b2xkZXN0X2lkOwor CWlmIChjdXJyZW50X2NvdW50IDw9IGxpbWl0KQorCQlyZXR1cm47CisKKwkvKiBHZXQgYSBwb2lu dGVyIHRvIHRoZSBjaHVuayBhcnJheS4gKi8KKwljaHVua19hcnJheSA9IGRzYV9nZXRfYWRkcmVz cyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIEZyZWUgZW5vdWdoIGVudHJpZXMgdG8gZ2V0IHVz IGJhY2sgZG93biB0byB0aGUgbGltaXQuICovCisJdHJpbV9jb3VudCA9IGN1cnJlbnRfY291bnQg LSBsaW1pdDsKKwl3aGlsZSAodHJpbV9jb3VudCA+IDApCisJeworCQl1aW50NjQJCWNodW5rX251 bWJlcjsKKwkJdWludDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFfc2hhcmVkX2FkdmljZV9jaHVu ayAqY2h1bms7CisKKwkJY2h1bmtfbnVtYmVyID0gKHNhLT5vbGRlc3RfaWQgLSBzYS0+YmFzZV9p ZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwkJY2h1bmtfb2Zmc2V0ID0gKHNhLT5vbGRlc3RfaWQg LSBzYS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljaHVuayA9IGRzYV9nZXRf YWRkcmVzcyhhcmVhLCBjaHVua19hcnJheVtjaHVua19udW1iZXJdKTsKKwkJQXNzZXJ0KGNodW5r LT5lbnRyaWVzW2NodW5rX29mZnNldF0gIT0gSW52YWxpZERzYVBvaW50ZXIpOworCQlkc2FfZnJl ZShhcmVhLCBjaHVuay0+ZW50cmllc1tjaHVua19vZmZzZXRdKTsKKwkJY2h1bmstPmVudHJpZXNb Y2h1bmtfb2Zmc2V0XSA9IEludmFsaWREc2FQb2ludGVyOworCQkrK3NhLT5vbGRlc3RfaWQ7CisJ CS0tdHJpbV9jb3VudDsKKwl9CisKKwkvKiBGcmVlIGFueSBjaHVua3MgdGhhdCBhcmUgbm93IGVu dGlyZWx5IHVudXNlZC4gKi8KKwl0cmltX2NodW5rX2NvdW50ID0gKHNhLT5vbGRlc3RfaWQgLSBz YS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0laRTsKKwlmb3IgKHVpbnQ2NCBuID0gMDsgbiA8 IHRyaW1fY2h1bmtfY291bnQ7ICsrbikKKwkJZHNhX2ZyZWUoYXJlYSwgY2h1bmtfYXJyYXlbbl0p OworCisJLyogU2xpZGUgcmVtYWluaW5nIGNodW5rIHBvaW50ZXJzIGJhY2sgdG93YXJkIHRoZSBi YXNlIG9mIHRoZSBhcnJheS4gKi8KKwl0b3RhbF9jaHVua19jb3VudCA9IChzYS0+bmV4dF9pZCAt IHNhLT5iYXNlX2lkICsKKwkJCQkJCSBBRFZJQ0VfQ0hVTktfU0laRSAtIDEpIC8gQURWSUNFX0NI VU5LX1NJWkU7CisJcmVtYWluaW5nX2NodW5rX2NvdW50ID0gdG90YWxfY2h1bmtfY291bnQgLSB0 cmltX2NodW5rX2NvdW50OworCWlmIChyZW1haW5pbmdfY2h1bmtfY291bnQgPiAwKQorCQltZW1t b3ZlKCZjaHVua19hcnJheVswXSwgJmNodW5rX2FycmF5W3RyaW1fY2h1bmtfY291bnRdLAorCQkJ CXNpemVvZihkc2FfcG9pbnRlcikgKiByZW1haW5pbmdfY2h1bmtfY291bnQpOworCisJLyogRG9u J3QgbGVhdmUgc3RhbGUgcG9pbnRlcnMgYXJvdW5kLiAqLworCW1lbXNldCgmY2h1bmtfYXJyYXlb cmVtYWluaW5nX2NodW5rX2NvdW50XSwgMCwKKwkJICAgc2l6ZW9mKHBncGFfc2hhcmVkX2Fkdmlj ZV9jaHVuayAqKQorCQkgICAqICh0b3RhbF9jaHVua19jb3VudCAtIHJlbWFpbmluZ19jaHVua19j b3VudCkpOworCisJLyogQWRqdXN0IGJhc2UgSUQgdmFsdWUgYWNjb3JkaW5nbHkuICovCisJc2Et PmJhc2VfaWQgKz0gdHJpbV9jaHVua19jb3VudCAqIEFEVklDRV9DSFVOS19TSVpFOworfQorCisv KgorICogU1FMLWNhbGxhYmxlIGZ1bmN0aW9uIHRvIGRpc2NhcmQgYWR2aWNlIGNvbGxlY3RlZCBp biBiYWNrZW5kLWxvY2FsIG1lbW9yeQorICovCitEYXR1bQorcGdfY2xlYXJfY29sbGVjdGVkX2xv Y2FsX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCWlmIChsb2NhbF9jb2xsZWN0b3IgIT0g TlVMTCkKKwkJcGdwYV90cmltX2xvY2FsX2FkdmljZSgwKTsKKworCVBHX1JFVFVSTl9WT0lEKCk7 Cit9CisKKy8qCisgKiBTUUwtY2FsbGFibGUgZnVuY3Rpb24gdG8gZGlzY2FyZCBhZHZpY2UgY29s bGVjdGVkIGluIGJhY2tlbmQtbG9jYWwgbWVtb3J5CisgKi8KK0RhdHVtCitwZ19jbGVhcl9jb2xs ZWN0ZWRfc2hhcmVkX2FkdmljZShQR19GVU5DVElPTl9BUkdTKQoreworCXBncGFfc2hhcmVkX3N0 YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOworCWRzYV9hcmVhICAgKmFyZWEg PSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOworCisJTFdMb2NrQWNxdWlyZSgmc3RhdGUtPmxv Y2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBhdHRhY2hlZCB0byB0 aGUgc2hhcmVkIGFkdmljZSBjb2xsZWN0b3IgeWV0LCBmaXggdGhhdCBub3c7CisJICogYnV0IGlm IHRoZSBjb2xsZWN0b3IgZG9lc24ndCBldmVuIGV4aXN0LCB3ZSBjYW4gcmV0dXJuIHdpdGhvdXQg ZG9pbmcKKwkgKiBhbnl0aGluZyBlbHNlLgorCSAqLworCWlmIChzaGFyZWRfY29sbGVjdG9yID09 IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJlZF9jb2xsZWN0b3IgPT0gSW52YWxpZERzYVBv aW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2UoJnN0YXRlLT5sb2NrKTsKKwkJCXJldHVybiAo RGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2NvbGxlY3RvciA9IGRzYV9nZXRfYWRkcmVzcyhhcmVh LCBzdGF0ZS0+c2hhcmVkX2NvbGxlY3Rvcik7CisJfQorCisJLyogRG8gdGhlIHJlYWwgd29yayAq LworCXBncGFfdHJpbV9zaGFyZWRfYWR2aWNlKGFyZWEsIDApOworCisJTFdMb2NrUmVsZWFzZSgm c3RhdGUtPmxvY2spOworCisJUEdfUkVUVVJOX1ZPSUQoKTsKK30KKworLyoKKyAqIFNRTC1jYWxs YWJsZSBTUkYgdG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gYmFja2VuZC1sb2NhbCBtZW1v cnkKKyAqLworRGF0dW0KK3BnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKFBHX0ZVTkNUSU9O X0FSR1MpCit7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNp bmZvLT5yZXN1bHRpbmZvOworCXBncGFfbG9jYWxfYWR2aWNlICpsYSA9IGxvY2FsX2NvbGxlY3Rv cjsKKwlPaWQJCQl1c2VyaWQgPSBHZXRVc2VySWQoKTsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYo ZmNpbmZvLCAwKTsKKworCWlmIChsYSA9PSBOVUxMKQorCQlyZXR1cm4gKERhdHVtKSAwOworCisJ LyogTG9vcCBvdmVyIGFsbCBlbnRyaWVzLiAqLworCWZvciAodWludDY0IGlkID0gbGEtPm9sZGVz dF9pZDsgaWQgPCBsYS0+bmV4dF9pZDsgKytpZCkKKwl7CisJCXVpbnQ2NAkJY2h1bmtfbnVtYmVy OworCQl1aW50NjQJCWNodW5rX29mZnNldDsKKwkJcGdwYV9jb2xsZWN0ZWRfYWR2aWNlICpjYTsK KwkJRGF0dW0JCXZhbHVlc1tQR19HRVRfQURWSUNFX0NPTFVNTlNdOworCQlib29sCQludWxsc1tQ R19HRVRfQURWSUNFX0NPTFVNTlNdID0gezB9OworCisJCWNodW5rX251bWJlciA9IChpZCAtIGxh LT5iYXNlX2lkKSAvIEFEVklDRV9DSFVOS19TSVpFOworCQljaHVua19vZmZzZXQgPSAoaWQgLSBs YS0+YmFzZV9pZCkgJSBBRFZJQ0VfQ0hVTktfU0laRTsKKworCQljYSA9IGxhLT5jaHVua3NbY2h1 bmtfbnVtYmVyXS0+ZW50cmllc1tjaHVua19vZmZzZXRdOworCisJCWlmICghbWVtYmVyX2Nhbl9z ZXRfcm9sZSh1c2VyaWQsIGNhLT51c2VyaWQpKQorCQkJY29udGludWU7CisKKwkJdmFsdWVzWzBd ID0gVUludDY0R2V0RGF0dW0oaWQpOworCQl2YWx1ZXNbMV0gPSBPYmplY3RJZEdldERhdHVtKGNh LT51c2VyaWQpOworCQl2YWx1ZXNbMl0gPSBPYmplY3RJZEdldERhdHVtKGNhLT5kYmlkKTsKKwkJ dmFsdWVzWzNdID0gVUludDY0R2V0RGF0dW0oY2EtPnF1ZXJ5aWQpOworCQl2YWx1ZXNbNF0gPSBU aW1lc3RhbXBHZXREYXR1bShjYS0+dGltZXN0YW1wKTsKKwkJdmFsdWVzWzVdID0gQ1N0cmluZ0dl dFRleHREYXR1bShxdWVyeV9zdHJpbmcoY2EpKTsKKwkJdmFsdWVzWzZdID0gQ1N0cmluZ0dldFRl eHREYXR1bShhZHZpY2Vfc3RyaW5nKGNhKSk7CisKKwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNp bmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVzYywKKwkJCQkJCQkgdmFsdWVzLCBudWxscyk7 CisJfQorCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworLyoKKyAqIFNRTC1jYWxsYWJsZSBTUkYg dG8gcmV0dXJuIGFkdmljZSBjb2xsZWN0ZWQgaW4gc2hhcmVkIG1lbW9yeQorICovCitEYXR1bQor cGdfZ2V0X2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUmV0 dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZv OworCXBncGFfc2hhcmVkX3N0YXRlICpzdGF0ZSA9IHBnX3BsYW5fYWR2aWNlX2F0dGFjaCgpOwor CWRzYV9hcmVhICAgKmFyZWEgPSBwZ19wbGFuX2FkdmljZV9kc2FfYXJlYSgpOworCWRzYV9wb2lu dGVyICpjaHVua19hcnJheTsKKwlwZ3BhX3NoYXJlZF9hZHZpY2UgKnNhID0gc2hhcmVkX2NvbGxl Y3RvcjsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCS8qIExvY2sgdGhl IHNoYXJlZCBzdGF0ZS4gKi8KKwlMV0xvY2tBY3F1aXJlKCZzdGF0ZS0+bG9jaywgTFdfU0hBUkVE KTsKKworCS8qCisJICogSWYgd2UncmUgbm90IGF0dGFjaGVkIHRvIHRoZSBzaGFyZWQgYWR2aWNl IGNvbGxlY3RvciB5ZXQsIGZpeCB0aGF0IG5vdzsKKwkgKiBidXQgaWYgdGhlIGNvbGxlY3RvciBk b2Vzbid0IGV2ZW4gZXhpc3QsIHdlIGNhbiByZXR1cm4gd2l0aG91dCBkb2luZworCSAqIGFueXRo aW5nIGVsc2UuCisJICovCisJaWYgKHNhID09IE5VTEwpCisJeworCQlpZiAoc3RhdGUtPnNoYXJl ZF9jb2xsZWN0b3IgPT0gSW52YWxpZERzYVBvaW50ZXIpCisJCXsKKwkJCUxXTG9ja1JlbGVhc2Uo JnN0YXRlLT5sb2NrKTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKwkJc2hhcmVkX2NvbGxl Y3RvciA9IHNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIHN0YXRlLT5zaGFyZWRfY29sbGVjdG9y KTsKKwl9CisKKwkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBjaHVuayBhcnJheS4gKi8KKwljaHVu a19hcnJheSA9IGRzYV9nZXRfYWRkcmVzcyhhcmVhLCBzYS0+Y2h1bmtzKTsKKworCS8qIExvb3Ag b3ZlciBhbGwgZW50cmllcy4gKi8KKwlmb3IgKHVpbnQ2NCBpZCA9IHNhLT5vbGRlc3RfaWQ7IGlk IDwgc2EtPm5leHRfaWQ7ICsraWQpCisJeworCQl1aW50NjQJCWNodW5rX251bWJlcjsKKwkJdWlu dDY0CQljaHVua19vZmZzZXQ7CisJCXBncGFfc2hhcmVkX2FkdmljZV9jaHVuayAqY2h1bms7CisJ CXBncGFfY29sbGVjdGVkX2FkdmljZSAqY2E7CisJCURhdHVtCQl2YWx1ZXNbUEdfR0VUX0FEVklD RV9DT0xVTU5TXTsKKwkJYm9vbAkJbnVsbHNbUEdfR0VUX0FEVklDRV9DT0xVTU5TXSA9IHswfTsK KworCQljaHVua19udW1iZXIgPSAoaWQgLSBzYS0+YmFzZV9pZCkgLyBBRFZJQ0VfQ0hVTktfU0la RTsKKwkJY2h1bmtfb2Zmc2V0ID0gKGlkIC0gc2EtPmJhc2VfaWQpICUgQURWSUNFX0NIVU5LX1NJ WkU7CisKKwkJY2h1bmsgPSBkc2FfZ2V0X2FkZHJlc3MoYXJlYSwgY2h1bmtfYXJyYXlbY2h1bmtf bnVtYmVyXSk7CisJCWNhID0gZHNhX2dldF9hZGRyZXNzKGFyZWEsIGNodW5rLT5lbnRyaWVzW2No dW5rX29mZnNldF0pOworCisJCXZhbHVlc1swXSA9IFVJbnQ2NEdldERhdHVtKGlkKTsKKwkJdmFs dWVzWzFdID0gT2JqZWN0SWRHZXREYXR1bShjYS0+dXNlcmlkKTsKKwkJdmFsdWVzWzJdID0gT2Jq ZWN0SWRHZXREYXR1bShjYS0+ZGJpZCk7CisJCXZhbHVlc1szXSA9IFVJbnQ2NEdldERhdHVtKGNh LT5xdWVyeWlkKTsKKwkJdmFsdWVzWzRdID0gVGltZXN0YW1wR2V0RGF0dW0oY2EtPnRpbWVzdGFt cCk7CisJCXZhbHVlc1s1XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocXVlcnlfc3RyaW5nKGNhKSk7 CisJCXZhbHVlc1s2XSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oYWR2aWNlX3N0cmluZyhjYSkpOwor CisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERl c2MsCisJCQkJCQkJIHZhbHVlcywgbnVsbHMpOworCX0KKworCS8qIFJlbGVhc2UgbG9jayBvbiBz aGFyZWQgc3RhdGUuICovCisJTFdMb2NrUmVsZWFzZSgmc3RhdGUtPmxvY2spOworCisJcmV0dXJu IChEYXR1bSkgMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9j b2xsZWN0b3IuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9jb2xsZWN0b3IuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjZlNzQ2YTA2ZDcKLS0tIC9kZXYv bnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfY29sbGVjdG9yLmgKQEAgLTAs MCArMSwxOCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9jb2xsZWN0b3IuaAor ICoJICBjb2xsZWN0IGFkdmljZSBpbnRvIGJhY2tlbmQtbG9jYWwgb3Igc2hhcmVkIG1lbW9yeQor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX2NvbGxlY3Rv ci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9DT0xMRUNUT1Jf SAorI2RlZmluZSBQR1BBX0NPTExFQ1RPUl9ICisKK2V4dGVybiB2b2lkIHBncGFfY29sbGVjdF9h ZHZpY2UodWludDY0IHF1ZXJ5SWQsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkJ Y29uc3QgY2hhciAqYWR2aWNlX3N0cmluZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX2lkZW50aWZpZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV9pZGVudGlmaWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjUxYjRiMGM2MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2Fkdmlj ZS9wZ3BhX2lkZW50aWZpZXIuYwpAQCAtMCwwICsxLDQ3NiBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogcGdwYV9pZGVudGlmaWVyLmMKKyAqCSAgY3JlYXRlIGFwcHJvcHJpYXRlIGlkZW50 aWZpZXJzIGZvciByYW5nZSB0YWJsZSBlbnRyaWVzCisgKgorICogVGhlIGdvYWwgb2YgdGhpcyBt b2R1bGUgaXMgdG8gYmUgYWJsZSB0byBwcm9kdWNlIGlkZW50aWZpZXJzIGZvciByYW5nZQorICog dGFibGUgZW50cmllcyB0aGF0IGFyZSB1bmlxdWUsIHVuZGVyc3RhbmRhYmxlIHRvIGh1bWFuIGJl aW5ncywgYW5kCisgKiBhYmxlIHRvIGJlIHJlY29uc3RydWN0ZWQgZHVyaW5nIGZ1dHVyZSBwbGFu bmluZyBjeWNsZXMuIEFzIGFuCisgKiBleGNlcHRpb24sIHdlIGRvIG5vdCBjYXJlIGFib3V0LCBv ciB3YW50IHRvIHByb2R1Y2UsIGlkZW50aWZpZXJzIGZvcgorICogUlRFX0pPSU4gZW50cmllcy4g VGhpcyBpcyBiZWNhdXNlICgxKSB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBhIHRvbiBvZgorICogUlRF cyB3aXRoIHVuaGVscGZ1bCBuYW1lcyBsaWtlIHVubmFtZWRfam9pbl8xNzsgKDIpIG5vdCBhbGwg am9pbnMgaGF2ZQorICogUlRFczsgYW5kICgzKSB3ZSBpbnRlbmQgdG8gcmVmZXIgdG8gam9pbnMg YnkgdGhlaXIgY29uc3RpdHVlbnQgbWVtYmVycworICogcmF0aGVyIHRoYW4gYnkgcmVmZXJlbmNl IHRvIHRoZSBqb2luIFJURS4KKyAqCisgKiBJbiBnZW5lcmFsLCB3ZSBjb25zdHJ1Y3QgaWRlbnRp ZmllcnMgb2YgdGhlIGZvbGxvd2luZyBmb3JtOgorICoKKyAqIGFsaWFzX25hbWUjb2NjdXJyZW5j ZV9udW1iZXIvY2hpbGRfdGFibGVfbmFtZUBzdWJxdWVyeV9uYW1lCisgKgorICogSG93ZXZlciwg b2NjdXJyZW5jZV9udW1iZXIgaXMgb21pdHRlZCB3aGVuIGl0IGlzIHRoZSBmaXJzdCBvY2N1cnJl bmNlCisgKiB3aXRoaW4gdGhlIHNhbWUgc3VicXVlcnksIGNoaWxkX3RhYmxlX25hbWUgaXMgb21p dHRlZCBmb3IgcmVsYXRpb25zIHRoYXQKKyAqIGFyZSBub3QgY2hpbGQgdGFibGVzLCBhbmQgc3Vi cXVlcnlfbmFtZSBpcyBvbWl0dGVkIGZvciB0aGUgdG9wbW9zdAorICogcXVlcnkgbGV2ZWwuIFdo ZW5ldmVyIGFuIGl0ZW0gaXMgb21pdHRlZCwgdGhlIHByZWNlZGluZyBwdW5jdHVhdGlvbiBtYXJr CisgKiBpcyBhbHNvIG9taXR0ZWQuICBJZGVudGlmaWVyLXN0eWxlIGVzY2FwaW5nIGlzIGFwcGxp ZWQgdG8gYWxpYXNfbmFtZSBhbmQKKyAqIHN1YnF1ZXJ5X25hbWUuICBXaGVuZXZlciB3ZSBpbmNs dWRlIGNoaWxkX3RhYmxlX25hbWUsIHdlIGFsd2F5cworICogc2NoZW1hLXF1YWxpZmllZCBuYW1l LCBidXQgd3JpdGluZyB0aGVpciBvd24gcGxhbiBhZHZpY2UgYXJlIG5vdCByZXF1aXJlZAorICog dG8gZG8gc28uICBJZGVudGlmaWVyLXN0eWxlIGVzY2FwaW5nIGlzIGFwcGxpZWQgdG8gdGhlIHNj aGVtYSBhbmQgdG8gdGhlCisgKiByZWxhdGlvbiBuYW1lcyBzZXBhcmF0ZWx5LgorICoKKyAqIFRo ZSB1cHNob3Qgb2YgYWxsIG9mIHRoZXNlIHJ1bGVzIGlzIHRoYXQgaW4gc2ltcGxlIGNhc2VzLCB0 aGUgcmVsYXRpb24KKyAqIGlkZW50aWZpZXIgaXMgdGV4dHVhbGx5IGlkZW50aWNhbCB0byB0aGUg YWxpYXMgbmFtZSwgbWFraW5nIGxpZmUgZWFzaWVyCisgKiBmb3IgdXNlcnMuIEhvd2V2ZXIsIGV2 ZW4gaW4gY29tcGxleCBjYXNlcywgZXZlcnkgcmVsYXRpb24gaWRlbnRpZmllcgorICogZm9yIGEg Z2l2ZW4gcXVlcnkgd2lsbCBiZSB1bmlxdWUgKG9yIGF0IGxlYXN0IHdlIGhvcGUgc286IGlmIG5v dCwgdGhpcworICogY29kZSBpcyBidWdneSBhbmQgdGhlIGlkZW50aWZpZXIgZm9ybWF0IG1pZ2h0 IG5lZWQgdG8gYmUgcmV0aG91Z2h0KS4KKyAqCisgKiBBIGtleSBnb2FsIG9mIHRoaXMgc3lzdGVt IGlzIHRoYXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHJlY29uc3RydWN0IHRoZQorICogc2FtZSBp ZGVudGlmaWVycyBkdXJpbmcgYSBmdXR1cmUgcGxhbm5pbmcgY3ljbGUgZm9yIHRoZSBzYW1lIHF1 ZXJ5LCBzbworICogdGhhdCBpZiBhIGNlcnRhaW4gYmVoYXZpb3IgaXMgc3BlY2lmaWVkIGZvciBh IGNlcnRhaW4gaWRlbnRpZmllciwgd2UgY2FuCisgKiBwcm9wZXJseSBpZGVudGlmeSB0aGUgUlRJ IGZvciB3aGljaCB0aGF0IGJlaGF2aW9yIGlzIG1hbmRhdGVkLiBJbiBvcmRlcgorICogZm9yIHRo aXMgdG8gd29yaywgc3VicXVlcnkgbmFtZXMgbXVzdCBiZSB1bmlxdWUgYW5kIGtub3duIGJlZm9y ZSB0aGUKKyAqIHN1YnF1ZXJ5IGlzIHBsYW5uZWQsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSBp ZGVudGlmaWVyIG11c3Qgbm90IGRlcGVuZAorICogb24gYW55IHBhcnQgb2YgdGhlIHF1ZXJ5IG91 dHNpZGUgb2YgdGhlIGN1cnJlbnQgc3VicXVlcnkgbGV2ZWwuIEluCisgKiBwYXJ0aWN1bGFyLCBv Y2N1cnJlbmNlX251bWJlciBtdXN0IGJlIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gdGhlIHJhbmdl CisgKiB0YWJsZSBmb3IgdGhlIHJlbGV2YW50IHN1YnF1ZXJ5LCBub3QgdGhlIGZpbmFsIGZsYXR0 ZW5lZCByYW5nZSB0YWJsZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNCwgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdfcGxhbl9h ZHZpY2UvcGdwYV9pZGVudGlmaWVyLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfaWRlbnRpZmllci5oIgorCisj aW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgi CisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKK3N0YXRpYyBJbmRleCAqcGdwYV9jcmVh dGVfdG9wX3J0aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlzdCAqcnRhYmxlLAorCQkJCQkJ CQkJICBMaXN0ICphcHBpbmZvcyk7CitzdGF0aWMgaW50CXBncGFfb2NjdXJyZW5jZV9udW1iZXIo TGlzdCAqcnRhYmxlLCBJbmRleCAqdG9wX3J0aV9tYXAsCisJCQkJCQkJCSAgIFN1YlBsYW5SVElu Zm8gKnJ0aW5mbywgSW5kZXggcnRpKTsKKworLyoKKyAqIENyZWF0ZSBhIHJhbmdlIHRhYmxlIGlk ZW50aWZpZXIgZnJvbSBzY3JhdGNoLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbGVhdmVzIHRoZSBj YWxsZXIgdG8gZG8gYWxsIHRoZSBoZWF2eSBsaWZ0aW5nLCBzbyBpdCdzCisgKiBnZW5lcmFsbHkg YmV0dGVyIHRvIHVzZSBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdyBpbnN0ZWFkLgorICoKKyAq IFNlZSB0aGUgZmlsZSBoZWFkZXIgY29tbWVudHMgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgZm9y bWF0IG9mIGFuCisgKiBpZGVudGlmaWVyLgorICovCitjb25zdCBjaGFyICoKK3BncGFfaWRlbnRp Zmllcl9zdHJpbmcoY29uc3QgcGdwYV9pZGVudGlmaWVyICpyaWQpCit7CisJY29uc3QgY2hhciAq cmVzdWx0OworCisJQXNzZXJ0KHJpZC0+YWxpYXNfbmFtZSAhPSBOVUxMKTsKKwlyZXN1bHQgPSBx dW90ZV9pZGVudGlmaWVyKHJpZC0+YWxpYXNfbmFtZSk7CisKKwlBc3NlcnQocmlkLT5vY2N1cnJl bmNlID49IDApOworCWlmIChyaWQtPm9jY3VycmVuY2UgPiAxKQorCQlyZXN1bHQgPSBwc3ByaW50 ZigiJXMjJWQiLCByZXN1bHQsIHJpZC0+b2NjdXJyZW5jZSk7CisKKwlpZiAocmlkLT5wYXJ0cmVs ICE9IE5VTEwpCisJeworCQlpZiAocmlkLT5wYXJ0bnNwID09IE5VTEwpCisJCQlyZXN1bHQgPSBw c3ByaW50ZigiJXMvJXMiLCByZXN1bHQsCisJCQkJCQkJICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+ cGFydHJlbCkpOworCQllbHNlCisJCQlyZXN1bHQgPSBwc3ByaW50ZigiJXMvJXMuJXMiLCByZXN1 bHQsCisJCQkJCQkJICBxdW90ZV9pZGVudGlmaWVyKHJpZC0+cGFydG5zcCksCisJCQkJCQkJICBx dW90ZV9pZGVudGlmaWVyKHJpZC0+cGFydHJlbCkpOworCX0KKworCWlmIChyaWQtPnBsYW5fbmFt ZSAhPSBOVUxMKQorCQlyZXN1bHQgPSBwc3ByaW50ZigiJXNAJXMiLCByZXN1bHQsIHF1b3RlX2lk ZW50aWZpZXIocmlkLT5wbGFuX25hbWUpKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisg KiBDb21wdXRlIGEgcmVsYXRpb24gaWRlbnRpZmllciBmb3IgYSBwYXJ0aWN1bGFyIFJUSS4KKyAq CisgKiBUaGUgY2FsbGVyIHByb3ZpZGVzIHJvb3QgYW5kIHJ0aSwgYW5kIGdldHMgdGhlIG5lY2Vz c2FyeSBkZXRhaWxzIGJhY2sgdmlhCisgKiB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMuCisgKi8K K3ZvaWQKK3BncGFfY29tcHV0ZV9pZGVudGlmaWVyX2J5X3J0aShQbGFubmVySW5mbyAqcm9vdCwg SW5kZXggcnRpLAorCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAqcmlkKQoreworCUluZGV4CQl0 b3BfcnRpID0gcnRpOworCWludAkJCW9jY3VycmVuY2UgPSAxOworCVJhbmdlVGJsRW50cnkgKnJ0 ZTsKKwlSYW5nZVRibEVudHJ5ICp0b3BfcnRlOworCWNoYXIJICAgKnBhcnRuc3AgPSBOVUxMOwor CWNoYXIJICAgKnBhcnRyZWwgPSBOVUxMOworCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgY2hpbGQg UlRFLCBmaW5kIHRoZSB0b3Btb3N0IHBhcmVudCB0aGF0IGlzIHN0aWxsIG9mIHR5cGUKKwkgKiBS VEVfUkVMQVRJT04uIFdlIGRvIHRoaXMgYmVjYXVzZSB3ZSBpZGVudGlmeSBjaGlsZHJlbiBvZiBw YXJ0aXRpb25lZAorCSAqIHRhYmxlcyBieSB0aGUgbmFtZSBvZiB0aGUgY2hpbGQgdGFibGUsIGJ1 dCBzdWJxdWVyaWVzIGNhbiBhbHNvIGhhdmUKKwkgKiBjaGlsZCByZWxzIGFuZCB3ZSBkb24ndCBj YXJlIGFib3V0IHRob3NlIGhlcmUuCisJICovCisJZm9yICg7OykKKwl7CisJCUFwcGVuZFJlbElu Zm8gKmFwcGluZm87CisJCVJhbmdlVGJsRW50cnkgKnBhcmVudF9ydGU7CisKKwkJLyogYXBwZW5k X3JlbF9hcnJheSBjYW4gYmUgTlVMTCBpZiB0aGVyZSBhcmUgbm8gY2hpbGRyZW4gKi8KKwkJaWYg KHJvb3QtPmFwcGVuZF9yZWxfYXJyYXkgPT0gTlVMTCB8fAorCQkJKGFwcGluZm8gPSByb290LT5h cHBlbmRfcmVsX2FycmF5W3RvcF9ydGldKSA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJcGFyZW50 X3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3JlbGlkLCByb290KTsKKwkJ aWYgKHBhcmVudF9ydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OKQorCQkJYnJlYWs7CisKKwkJ dG9wX3J0aSA9IGFwcGluZm8tPnBhcmVudF9yZWxpZDsKKwl9CisKKwkvKiBHZXQgdGhlIHJhbmdl IHRhYmxlIGVudHJpZXMgZm9yIHRoZSBSVEkgYW5kIHRvcCBSVEkuICovCisJcnRlID0gcGxhbm5l cl9ydF9mZXRjaChydGksIHJvb3QpOworCXRvcF9ydGUgPSBwbGFubmVyX3J0X2ZldGNoKHRvcF9y dGksIHJvb3QpOworCUFzc2VydChydGUtPnJ0ZWtpbmQgIT0gUlRFX0pPSU4pOworCUFzc2VydCh0 b3BfcnRlLT5ydGVraW5kICE9IFJURV9KT0lOKTsKKworCS8qIFdvcmsgb3V0IHRoZSBjb3JyZWN0 IG9jY3VycmVuY2UgbnVtYmVyLiAqLworCWZvciAoSW5kZXggcHJpb3JfcnRpID0gMTsgcHJpb3Jf cnRpIDwgdG9wX3J0aTsgKytwcmlvcl9ydGkpCisJeworCQlSYW5nZVRibEVudHJ5ICpwcmlvcl9y dGU7CisJCUFwcGVuZFJlbEluZm8gKmFwcGluZm87CisKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBh IGNoaWxkIHJlbCBvZiBhIHBhcmVudCB0aGF0IGlzIGEgcmVsYXRpb24sIHNraXAgaXQuCisJCSAq CisJCSAqIFN1Y2ggcmFuZ2UgdGFibGUgZW50cmllcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBtZW50 aW9uaW5nIHRoZSBzY2hlbWEKKwkJICogYW5kIG5hbWUgb2YgdGhlIHRhYmxlLCBub3QgYnkgY291 bnRpbmcgdGhlbSBhcyBzZXBhcmF0ZSBvY2N1cnJlbmNlcworCQkgKiBvZiB0aGUgc2FtZSB0YWJs ZS4KKwkJICoKKwkJICogTkI6IGFwcGVuZF9yZWxfYXJyYXkgY2FuIGJlIE5VTEwgaWYgdGhlcmUg YXJlIG5vIGNoaWxkcmVuCisJCSAqLworCQlpZiAocm9vdC0+YXBwZW5kX3JlbF9hcnJheSAhPSBO VUxMICYmCisJCQkoYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbcHJpb3JfcnRpXSkg IT0gTlVMTCkKKwkJeworCQkJUmFuZ2VUYmxFbnRyeSAqcGFyZW50X3J0ZTsKKworCQkJcGFyZW50 X3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3JlbGlkLCByb290KTsKKwkJ CWlmIChwYXJlbnRfcnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTikKKwkJCQljb250aW51ZTsK KwkJfQorCisJCS8qIFNraXAgTlVMTCBlbnRyaWVzIGFuZCBqb2lucy4gKi8KKwkJcHJpb3JfcnRl ID0gcGxhbm5lcl9ydF9mZXRjaChwcmlvcl9ydGksIHJvb3QpOworCQlpZiAocHJpb3JfcnRlID09 IE5VTEwgfHwgcHJpb3JfcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisK KwkJLyogU2tpcCBpZiB0aGUgYWxpYXMgbmFtZSBkaWZmZXJzLiAqLworCQlpZiAoc3RyY21wKHBy aW9yX3J0ZS0+ZXJlZi0+YWxpYXNuYW1lLCBydGUtPmVyZWYtPmFsaWFzbmFtZSkgIT0gMCkKKwkJ CWNvbnRpbnVlOworCisJCS8qIExvb2tzIGxpa2UgYSB0cnVlIGR1cGxpY2F0ZS4gKi8KKwkJKytv Y2N1cnJlbmNlOworCX0KKworCS8qIElmIHRoaXMgaXMgYSBjaGlsZCB0YWJsZSwgZ2V0IHRoZSBz Y2hlbWEgYW5kIHJlbGF0aW9uIG5hbWVzLiAqLworCWlmIChydGkgIT0gdG9wX3J0aSkKKwl7CisJ CXBhcnRuc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChnZXRfcmVsX25hbWVzcGFjZShy dGUtPnJlbGlkKSk7CisJCXBhcnRyZWwgPSBnZXRfcmVsX25hbWUocnRlLT5yZWxpZCk7CisJfQor CisJLyogT0ssIHdlIGhhdmUgYWxsIHRoZSBhbnN3ZXJzIHdlIG5lZWQuIFJldHVybiB0aGVtIHRv IHRoZSBjYWxsZXIuICovCisJcmlkLT5hbGlhc19uYW1lID0gdG9wX3J0ZS0+ZXJlZi0+YWxpYXNu YW1lOworCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJcmlkLT5wYXJ0bnNwID0gcGFy dG5zcDsKKwlyaWQtPnBhcnRyZWwgPSBwYXJ0cmVsOworCXJpZC0+cGxhbl9uYW1lID0gcm9vdC0+ cGxhbl9uYW1lOworfQorCisvKgorICogQ29tcHV0ZSBhIHJlbGF0aW9uIGlkZW50aWZpZXIgZm9y IGEgc2V0IG9mIFJUSXMsIGV4Y2VwdCBmb3IgYW55IFJURV9KT0lOCisgKiBSVElzIHRoYXQgbWF5 IGJlIHByZXNlbnQuCisgKgorICogUlRFX0pPSU4gZW50cmllcyBhcmUgZXhjbHVkZWQgYmVjYXVz ZSB0aGV5IGNhbm5vdCBiZSBtZW50aW9uZWQgYnkgcGxhbgorICogYWR2aWNlLgorICoKKyAqIFRo ZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG1ha2luZyBzdXJlIHRoYXQgdGhlIHRrZXlzIGFy cmF5IGlzIGxhcmdlCisgKiBlbm91Z2ggdG8gc3RvcmUgdGhlIHJlc3VsdHMuCisgKgorICogVGhl IHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGlkZW50aWZpZXJzIGNvbXB1dGVkLgorICov CitpbnQKK3BncGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMoUGxhbm5lckluZm8gKnJv b3QsIEJpdG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkgICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMp Cit7CisJaW50CQkJY291bnQgPSAwOworCWludAkJCXJ0aSA9IC0xOworCisJd2hpbGUgKChydGkg PSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRy eSAqcnRlID0gcGxhbm5lcl9ydF9mZXRjaChydGksIHJvb3QpOworCisJCWlmIChydGUtPnJ0ZWtp bmQgPT0gUlRFX0pPSU4pCisJCQljb250aW51ZTsKKwkJcGdwYV9jb21wdXRlX2lkZW50aWZpZXJf YnlfcnRpKHJvb3QsIHJ0aSwgJnJpZHNbY291bnQrK10pOworCX0KKworCUFzc2VydChjb3VudCA+ IDApOworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIENyZWF0ZSBhbiBhcnJheSBvZiByYW5n ZSB0YWJsZSBpZGVudGlmaWVycyBmb3IgYWxsIHRoZSBub24tTlVMTCwKKyAqIG5vbi1SVEVfSk9J TiBlbnRyaWVzIGluIHRoZSBQbGFubmVkU3RtdCdzIHJhbmdlIHRhYmxlLgorICovCitwZ3BhX2lk ZW50aWZpZXIgKgorcGdwYV9jcmVhdGVfaWRlbnRpZmllcnNfZm9yX3BsYW5uZWRfc3RtdChQbGFu bmVkU3RtdCAqcHN0bXQpCit7CisJSW5kZXgJCXJ0YWJsZV9sZW5ndGggPSBsaXN0X2xlbmd0aChw c3RtdC0+cnRhYmxlKTsKKwlwZ3BhX2lkZW50aWZpZXIgKnJlc3VsdCA9IHBhbGxvYzBfYXJyYXko cGdwYV9pZGVudGlmaWVyLCBydGFibGVfbGVuZ3RoKTsKKwlJbmRleAkgICAqdG9wX3J0aV9tYXA7 CisJaW50CQkJcnRpbmZvaW5kZXggPSAwOworCVN1YlBsYW5SVEluZm8gKnJ0aW5mbyA9IE5VTEw7 CisJU3ViUGxhblJUSW5mbyAqbmV4dHJ0aW5mbyA9IE5VTEw7CisKKwkvKgorCSAqIEFjY291bnQg Zm9yIHJlbGF0aW9ucyBhZGRkZWQgYnkgaW5oZXJpdGFuY2UgZXhwYW5zaW9uIG9mIHBhcnRpdGlv bmVkCisJICogdGFibGVzLgorCSAqLworCXRvcF9ydGlfbWFwID0gcGdwYV9jcmVhdGVfdG9wX3J0 aV9tYXAocnRhYmxlX2xlbmd0aCwgcHN0bXQtPnJ0YWJsZSwKKwkJCQkJCQkJCQkgIHBzdG10LT5h cHBlbmRSZWxhdGlvbnMpOworCisJLyoKKwkgKiBXaGVuIHdlIGJlZ2luIGl0ZXJhdGluZywgd2Un cmUgcHJvY2Vzc2luZyB0aGUgcG9ydGlvbiBvZiB0aGUgcmFuZ2UKKwkgKiB0YWJsZSB0aGF0IG9y aWdpbmF0ZWQgZnJvbSB0aGUgdG9wLWxldmVsIFBsYW5uZXJJbmZvLCBzbyBzdWJydGluZm8gaXMK KwkgKiBOVUxMLiBMYXRlciwgc3VicnRpbmZvIHdpbGwgYmUgdGhlIFN1YlBsYW5SVEluZm8gZm9y IHRoZSBzdWJxdWVyeSB3aG9zZQorCSAqIHBvcnRpb24gb2YgdGhlIHJhbmdlIHRhYmxlIHdlIGFy ZSBwcm9jZXNzaW5nLiBuZXh0cnRpbmZvIGlzIGFsd2F5cyB0aGUKKwkgKiBTdWJQbGFuUlRJbmZv IHRoYXQgZm9sbG93cyB0aGUgY3VycmVudCBvbmUsIGlmIGFueSwgc28gd2hlbiB3ZSdyZQorCSAq IHByb2Nlc3NpbmcgdGhlIHRvcC1sZXZlbCBxdWVyeSdzIHBvcnRpb24gb2YgdGhlIHJhbmdlIHRh YmxlLCB0aGUgbmV4dAorCSAqIFN1YlBsYW5SVEluZm8gaXMgdGhlIHZlcnkgZmlyc3Qgb25lLgor CSAqLworCWlmIChwc3RtdC0+c3VicnRpbmZvcyAhPSBOVUxMKQorCQluZXh0cnRpbmZvID0gbGlu aXRpYWwocHN0bXQtPnN1YnJ0aW5mb3MpOworCisJLyogTWFpbiBsb29wIG92ZXIgdGhlIHJhbmdl IHRhYmxlLiAqLworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7IHJ0 aSsrKQorCXsKKwkJY29uc3QgY2hhciAqcGxhbl9uYW1lOworCQlJbmRleAkJdG9wX3J0aTsKKwkJ UmFuZ2VUYmxFbnRyeSAqcnRlOworCQlSYW5nZVRibEVudHJ5ICp0b3BfcnRlOworCQljaGFyCSAg ICpwYXJ0bnNwID0gTlVMTDsKKwkJY2hhcgkgICAqcGFydHJlbCA9IE5VTEw7CisJCWludAkJCW9j Y3VycmVuY2U7CisJCXBncGFfaWRlbnRpZmllciAqcmlkOworCisJCS8qCisJCSAqIEFkdmFuY2Ug dG8gdGhlIG5leHQgU3ViUGxhblJUSW5mbywgaWYgaXQncyB0aW1lIHRvIGRvIHRoYXQuCisJCSAq CisJCSAqIFRoaXMgbG9vcCBwcm9iYWJseSBzaG91bGRuJ3QgZXZlciBpdGVyYXRlIG1vcmUgdGhh biBvbmNlLCBiZWNhdXNlCisJCSAqIHRoYXQgd291bGQgaW1wbHkgdGhhdCBhIHN1YnF1ZXJ5IHdh cyBwbGFubmVkIGJ1dCBhZGRlZCBub3RoaW5nIHRvCisJCSAqIHRoZSByYW5nZSB0YWJsZTsgYnV0 IGxldCdzIGJlIGRlZmVuc2l2ZSBhbmQgYXNzdW1lIGl0IGNhbiBoYXBwZW4uCisJCSAqLworCQl3 aGlsZSAobmV4dHJ0aW5mbyAhPSBOVUxMICYmIHJ0aSA+IG5leHRydGluZm8tPnJ0b2Zmc2V0KQor CQl7CisJCQlydGluZm8gPSBuZXh0cnRpbmZvOworCQkJaWYgKCsrcnRpbmZvaW5kZXggPj0gbGlz dF9sZW5ndGgocHN0bXQtPnN1YnJ0aW5mb3MpKQorCQkJCW5leHRydGluZm8gPSBOVUxMOworCQkJ ZWxzZQorCQkJCW5leHRydGluZm8gPSBsaXN0X250aChwc3RtdC0+c3VicnRpbmZvcywgcnRpbmZv aW5kZXgpOworCQl9CisKKwkJLyogRmV0Y2ggdGhlIHJhbmdlIHRhYmxlIGVudHJ5LCBpZiBhbnku ICovCisJCXJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcHN0bXQtPnJ0YWJsZSk7CisKKwkJLyoKKwkJICog V2UgY2FuJ3QgYW5kIGRvbid0IG5lZWQgdG8gaWRlbnRpZnkgbnVsbCBlbnRyaWVzLCBhbmQgd2Ug ZG9uJ3Qgd2FudAorCQkgKiB0byBpZGVudGlmeSBqb2luIGVudHJpZXMuCisJCSAqLworCQlpZiAo cnRlID09IE5VTEwgfHwgcnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisK KwkJLyoKKwkJICogSWYgdGhpcyBpcyBub3QgYSByZWxhdGlvbiBhZGRlZCBieSBwYXJ0aXRpb25l ZCB0YWJsZSBleHBhbnNpb24sCisJCSAqIHRoZW4gdGhlIHRvcCBSVEkvUlRFIGFyZSBqdXN0IHRo ZSBzYW1lIGFzIHRoaXMgUlRJL1JURS4gT3RoZXJ3aXNlLAorCQkgKiB3ZSBuZWVkIHRoZSBpbmZv cm1hdGlvbiBmb3IgdGhlIHRvcCBSVEkvUlRFLCBhbmQgbXVzdCBhbHNvIGZldGNoCisJCSAqIHRo ZSBwYXJ0aXRpb24gc2NoZW1hIGFuZCBuYW1lLgorCQkgKi8KKwkJdG9wX3J0aSA9IHRvcF9ydGlf bWFwW3J0aSAtIDFdOworCQlpZiAocnRpID09IHRvcF9ydGkpCisJCQl0b3BfcnRlID0gcnRlOwor CQllbHNlCisJCXsKKwkJCXRvcF9ydGUgPSBydF9mZXRjaCh0b3BfcnRpLCBwc3RtdC0+cnRhYmxl KTsKKwkJCXBhcnRuc3AgPQorCQkJCWdldF9uYW1lc3BhY2VfbmFtZV9vcl90ZW1wKGdldF9yZWxf bmFtZXNwYWNlKHJ0ZS0+cmVsaWQpKTsKKwkJCXBhcnRyZWwgPSBnZXRfcmVsX25hbWUocnRlLT5y ZWxpZCk7CisJCX0KKworCQkvKiBDb21wdXRlIHRoZSBjb3JyZWN0IG9jY3VycmVuY2UgbnVtYmVy LiAqLworCQlvY2N1cnJlbmNlID0gcGdwYV9vY2N1cnJlbmNlX251bWJlcihwc3RtdC0+cnRhYmxl LCB0b3BfcnRpX21hcCwKKwkJCQkJCQkJCQkJcnRpbmZvLCB0b3BfcnRpKTsKKworCQkvKiBHZXQg dGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgcGxhbiAoTlVMTCBmb3IgdG9wbGV2ZWwgcXVlcnkpLiAq LworCQlwbGFuX25hbWUgPSBydGluZm8gPT0gTlVMTCA/IE5VTEwgOiBydGluZm8tPnBsYW5fbmFt ZTsKKworCQkvKiBTYXZlIGFsbCB0aGUgZGV0YWlscyB3ZSd2ZSBkZXJpdmVkLiAqLworCQlyaWQg PSAmcmVzdWx0W3J0aSAtIDFdOworCQlyaWQtPmFsaWFzX25hbWUgPSB0b3BfcnRlLT5lcmVmLT5h bGlhc25hbWU7CisJCXJpZC0+b2NjdXJyZW5jZSA9IG9jY3VycmVuY2U7CisJCXJpZC0+cGFydG5z cCA9IHBhcnRuc3A7CisJCXJpZC0+cGFydHJlbCA9IHBhcnRyZWw7CisJCXJpZC0+cGxhbl9uYW1l ID0gcGxhbl9uYW1lOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBTZWFyY2gg Zm9yIGEgcGdwYV9pZGVudGlmaWVyIGluIHRoZSBhcnJheSBvZiBpZGVudGlmaWVycyBjb21wdXRl ZCBmb3IgdGhlCisgKiByYW5nZSB0YWJsZS4gSWYgZXhhY3RseSBvbmUgbWF0Y2ggaXMgZm91bmQs IHJldHVybiB0aGUgbWF0Y2hpbmcgUlRJOyBlbHNlCisgKiByZXR1cm4gMC4KKyAqLworSW5kZXgK K3BncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBydGFibGVfbGVuZ3RoLAorCQkJ CQkJCQkgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJIHBncGFfaWRl bnRpZmllciAqcmlkKQoreworCUluZGV4CQlyZXN1bHQgPSAwOworCisJZm9yIChJbmRleCBydGkg PSAxOyBydGkgPD0gcnRhYmxlX2xlbmd0aDsgKytydGkpCisJeworCQlwZ3BhX2lkZW50aWZpZXIg KnJ0aV9yaWQgPSAmcnRfaWRlbnRpZmllcnNbcnRpIC0gMV07CisKKwkJLyogSWYgdGhlcmUncyBu byBpZGVudGlmaWVyIGZvciB0aGlzIFJUSSwgc2tpcCBpdC4gKi8KKwkJaWYgKHJ0aV9yaWQtPmFs aWFzX25hbWUgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIGl0IG1hdGNo ZXMsIHJldHVybiB0aGlzIFJUSS4gQXMgdXN1YWwsIGFuIG9taXR0ZWQgcGFydGl0aW9uCisJCSAq IHNjaGVtYSBtYXRjaGVzIGFueXRoaW5nLCBidXQgcGFydGl0aW9uIGFuZCBwbGFuIG5hbWVzIG11 c3QgZWl0aGVyCisJCSAqIG1hdGNoIGV4YWN0bHkgb3IgYmUgb21pdHRlZCBvbiBib3RoIHNpZGVz LgorCQkgKi8KKwkJaWYgKHN0cmNtcChyaWQtPmFsaWFzX25hbWUsIHJ0aV9yaWQtPmFsaWFzX25h bWUpID09IDAgJiYKKwkJCXJpZC0+b2NjdXJyZW5jZSA9PSBydGlfcmlkLT5vY2N1cnJlbmNlICYm CisJCQkocmlkLT5wYXJ0bnNwID09IE5VTEwgfHwgcnRpX3JpZC0+cGFydG5zcCA9PSBOVUxMIHx8 CisJCQkgc3RyY21wKHJpZC0+cGFydG5zcCwgcnRpX3JpZC0+cGFydG5zcCkgPT0gMCkgJiYKKwkJ CXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGFydHJlbCwgcnRpX3JpZC0+cGFydHJl bCkgJiYKKwkJCXN0cmluZ3NfZXF1YWxfb3JfYm90aF9udWxsKHJpZC0+cGxhbl9uYW1lLCBydGlf cmlkLT5wbGFuX25hbWUpKQorCQl7CisJCQlpZiAocmVzdWx0ICE9IDApCisJCQl7CisJCQkJLyog TXVsdGlwbGUgbWF0Y2hlcyB3ZXJlIGZvdW5kLiAqLworCQkJCXJldHVybiAwOworCQkJfQorCQkJ cmVzdWx0ID0gcnRpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEJ1 aWxkIGEgbWFwcGluZyBmcm9tIGVhY2ggUlRJIHRvIHRoZSBSVEkgd2hvc2UgYWxpYXNfbmFtZSB3 aWxsIGJlIHVzZWQgdG8KKyAqIGNvbnN0cnVjdCB0aGUgcmFuZ2UgdGFibGUgaWRlbnRpZmllci4K KyAqCisgKiBGb3IgY2hpbGQgcmVsYXRpb25zLCB0aGlzIGlzIHRoZSB0b3Btb3N0IHBhcmVudCB0 aGF0IGlzIHN0aWxsIG9mIHR5cGUKKyAqIFJURV9SRUxBVElPTi4gRm9yIG90aGVyIHJlbGF0aW9u cywgaXQncyBqdXN0IHRoZSBvcmlnaW5hbCBSVEkuCisgKgorICogU2luY2Ugd2UncmUgZXZlbnR1 YWxseSBnb2luZyB0byBuZWVkIHRoaXMgaW5mb3JtYXRpb24gZm9yIGV2ZXJ5IFJUSSBpbgorICog dGhlIHJhbmdlIHRhYmxlLCBpdCdzIGJlc3QgdG8gY29tcHV0ZSBhbGwgdGhlIGFuc3dlcnMgaW4g YSBzaW5nbGUgcGFzcyBvdmVyCisgKiB0aGUgQXBwZW5kUmVsSW5mbyBsaXN0LiBPdGhlcndpc2Us IHdlIG1pZ2h0IGVuZCB1cCBzZWFyY2hpbmcgdGhyb3VnaCB0aGF0CisgKiBsaXN0IHJlcGVhdGVk bHkgZm9yIGVudHJpZXMgb2YgaW50ZXJlc3QuCisgKgorICogTm90ZSB0aGF0IHRoZSByZXR1cm5l ZCBhcnJheSBpcyB1c2VzIHplcm8tYmFzZWQgaW5kZXhpbmcsIHdoaWxlIFJUSXMgdXNlCisgKiAx LWJhc2VkIGluZGV4aW5nLCBzbyBzdWJ0cmFjdCAxIGZyb20gdGhlIFJUSSBiZWZvcmUgbG9va2lu ZyBpdCB1cCBpbiB0aGUKKyAqIGFycmF5LgorICovCitzdGF0aWMgSW5kZXggKgorcGdwYV9jcmVh dGVfdG9wX3J0aV9tYXAoSW5kZXggcnRhYmxlX2xlbmd0aCwgTGlzdCAqcnRhYmxlLCBMaXN0ICph cHBpbmZvcykKK3sKKwlJbmRleAkgICAqdG9wX3J0aV9tYXAgPSBwYWxsb2MwX2FycmF5KEluZGV4 LCBydGFibGVfbGVuZ3RoKTsKKworCS8qIEluaXRpYWxseSwgbWFrZSBldmVyeSBSVEkgcG9pbnQg dG8gaXRzZWxmLiAqLworCWZvciAoSW5kZXggcnRpID0gMTsgcnRpIDw9IHJ0YWJsZV9sZW5ndGg7 ICsrcnRpKQorCQl0b3BfcnRpX21hcFtydGkgLSAxXSA9IHJ0aTsKKworCS8qIFVwZGF0ZSB0aGUg bWFwIGZvciBlYWNoIEFwcGVuZFJlbEluZm8gb2JqZWN0LiAqLworCWZvcmVhY2hfbm9kZShBcHBl bmRSZWxJbmZvLCBhcHBpbmZvLCBhcHBpbmZvcykKKwl7CisJCUluZGV4CQlwYXJlbnRfcnRpID0g YXBwaW5mby0+cGFyZW50X3JlbGlkOworCQlSYW5nZVRibEVudHJ5ICpwYXJlbnRfcnRlID0gcnRf ZmV0Y2gocGFyZW50X3J0aSwgcnRhYmxlKTsKKworCQkvKiBJZiB0aGUgcGFyZW50IGlzIG5vdCBS VEVfUkVMQVRJT04sIGlnbm9yZSB0aGlzIGVudHJ5LiAqLworCQlpZiAocGFyZW50X3J0ZS0+cnRl a2luZCAhPSBSVEVfUkVMQVRJT04pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBNYXAgdGhl IGNoaWxkIHRvIHdoZXJldmVyIHdlIG1hcHBlZCB0aGUgcGFyZW50LiBQYXJlbnRzIGFsd2F5cwor CQkgKiBwcmVjZWRlIHRoZWlyIGNoaWxkcmVuIGluIHRoZSBBcHBlbmRSZWxJbmZvIGxpc3QsIHNv IHRoaXMgc2hvdWxkCisJCSAqIHdvcmsgb3V0LgorCQkgKi8KKwkJdG9wX3J0aV9tYXBbYXBwaW5m by0+Y2hpbGRfcmVsaWQgLSAxXSA9IHRvcF9ydGlfbWFwW3BhcmVudF9ydGkgLSAxXTsKKwl9CisK KwlyZXR1cm4gdG9wX3J0aV9tYXA7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBvY2N1cmVuY2UgbnVt YmVyIG9mIGEgY2VydGFpbiByZWxhdGlvbiB3aXRoaW4gYSBjZXJ0YWluIHN1YnF1ZXJ5LgorICoK KyAqIFRoZSBzYW1lIGFsaWFzIG5hbWUgY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzIHdpdGhpbiBh IHN1YnF1ZXJ5LCBidXQgd2Ugd2FudAorICogdG8gZGlzYW1iaWd1YXRlIGJ5IGdpdmluZyBkaWZm ZXJlbnQgb2NjdXJyZW5jZXMgZGlmZmVyZW50IGludGVnZXIgaW5kZXhlcy4KKyAqIEhvd2V2ZXIs IGNoaWxkIHRhYmxlcyBhcmUgZGlzYW1iaWd1YXRlZCBieSBpbmNsdWRpbmcgdGhlIHRhYmxlIG5h bWUgcmF0aGVyCisgKiB0aGFuIGJ5IGluY3JlbWVudGluZyB0aGUgb2NjdXJyZW5jZSBudW1iZXI7 IGFuZCBqb2lucyBhcmUgbm90IG5hbWVkIGFuZCBzbworICogc2hvdWxkbid0IGluY3JlbWVudCB0 aGUgb2NjdXJlbmNlIG51bWJlciBlaXRoZXIuCisgKi8KK3N0YXRpYyBpbnQKK3BncGFfb2NjdXJy ZW5jZV9udW1iZXIoTGlzdCAqcnRhYmxlLCBJbmRleCAqdG9wX3J0aV9tYXAsCisJCQkJCSAgIFN1 YlBsYW5SVEluZm8gKnJ0aW5mbywgSW5kZXggcnRpKQoreworCUluZGV4CQlydG9mZnNldCA9IChy dGluZm8gPT0gTlVMTCkgPyAwIDogcnRpbmZvLT5ydG9mZnNldDsKKwlpbnQJCQlvY2N1cnJlbmNl ID0gMTsKKwlSYW5nZVRibEVudHJ5ICpydGUgPSBydF9mZXRjaChydGksIHJ0YWJsZSk7CisKKwlm b3IgKEluZGV4IHByaW9yX3J0aSA9IHJ0b2Zmc2V0ICsgMTsgcHJpb3JfcnRpIDwgcnRpOyArK3By aW9yX3J0aSkKKwl7CisJCVJhbmdlVGJsRW50cnkgKnByaW9yX3J0ZTsKKworCQkvKgorCQkgKiBJ ZiB0aGlzIGlzIGEgY2hpbGQgcmVsIG9mIGEgcGFyZW50IHRoYXQgaXMgYSByZWxhdGlvbiwgc2tp cCBpdC4KKwkJICoKKwkJICogU3VjaCByYW5nZSB0YWJsZSBlbnRyaWVzIGFyZSBkaXNhbWJpZ3Vh dGVkIGJ5IG1lbnRpb25pbmcgdGhlIHNjaGVtYQorCQkgKiBhbmQgbmFtZSBvZiB0aGUgdGFibGUs IG5vdCBieSBjb3VudGluZyB0aGVtIGFzIHNlcGFyYXRlIG9jY3VycmVuY2VzCisJCSAqIG9mIHRo ZSBzYW1lIHRhYmxlLgorCQkgKi8KKwkJaWYgKHRvcF9ydGlfbWFwW3ByaW9yX3J0aSAtIDFdICE9 IHByaW9yX3J0aSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgam9pbnMuICovCisJCXByaW9y X3J0ZSA9IHJ0X2ZldGNoKHByaW9yX3J0aSwgcnRhYmxlKTsKKwkJaWYgKHByaW9yX3J0ZS0+cnRl a2luZCA9PSBSVEVfSk9JTikKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgdGhlIGFsaWFz IG5hbWUgZGlmZmVycy4gKi8KKwkJaWYgKHN0cmNtcChwcmlvcl9ydGUtPmVyZWYtPmFsaWFzbmFt ZSwgcnRlLT5lcmVmLT5hbGlhc25hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQkvKiBMb29r cyBsaWtlIGEgdHJ1ZSBkdXBsaWNhdGUuICovCisJCSsrb2NjdXJyZW5jZTsKKwl9CisKKwlyZXR1 cm4gb2NjdXJyZW5jZTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9pZGVudGlmaWVyLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfaWRlbnRpZmllci5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMDAwZDJiNzA4MQotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9pZGVudGlmaWVyLmgK QEAgLTAsMCArMSw1MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9pZGVudGlm aWVyLmgKKyAqCSAgY3JlYXRlIGFwcHJvcHJpYXRlIGlkZW50aWZpZXJzIGZvciByYW5nZSB0YWJs ZSBlbnRyaWVzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfaWRlbnRpZmllci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2lmbmRlZiBQ R1BBX0lERU5USUZJRVJfSAorI2RlZmluZSBQR1BBX0lERU5USUZJRVJfSAorCisjaW5jbHVkZSAi bm9kZXMvcGF0aG5vZGVzLmgiCisjaW5jbHVkZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVk ZWYgc3RydWN0IHBncGFfaWRlbnRpZmllcgoreworCWNvbnN0IGNoYXIgKmFsaWFzX25hbWU7CisJ aW50CQkJb2NjdXJyZW5jZTsKKwljb25zdCBjaGFyICpwYXJ0bnNwOworCWNvbnN0IGNoYXIgKnBh cnRyZWw7CisJY29uc3QgY2hhciAqcGxhbl9uYW1lOworfSBwZ3BhX2lkZW50aWZpZXI7CisKKy8q IENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgcG9zc2libHktTlVMTCBzdHJpbmdz LiAqLworc3RhdGljIGlubGluZSBib29sCitzdHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChjb25z dCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCWlmIChhID09IGIpCisJCXJldHVybiB0cnVl OworCWVsc2UgaWYgKGEgPT0gTlVMTCB8fCBiID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKwll bHNlCisJCXJldHVybiBzdHJjbXAoYSwgYikgPT0gMDsKK30KKworZXh0ZXJuIGNvbnN0IGNoYXIg KnBncGFfaWRlbnRpZmllcl9zdHJpbmcoY29uc3QgcGdwYV9pZGVudGlmaWVyICpyaWQpOworZXh0 ZXJuIHZvaWQgcGdwYV9jb21wdXRlX2lkZW50aWZpZXJfYnlfcnRpKFBsYW5uZXJJbmZvICpyb290 LCBJbmRleCBydGksCisJCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworZXh0ZXJu IGludAlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcnNfYnlfcmVsaWRzKFBsYW5uZXJJbmZvICpyb290 LAorCQkJCQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcywKKwkJCQkJCQkJCQkJICAgcGdwYV9p ZGVudGlmaWVyICpyaWRzKTsKK2V4dGVybiBwZ3BhX2lkZW50aWZpZXIgKnBncGFfY3JlYXRlX2lk ZW50aWZpZXJzX2Zvcl9wbGFubmVkX3N0bXQoUGxhbm5lZFN0bXQgKnBzdG10KTsKKworZXh0ZXJu IEluZGV4IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVyKGludCBydGFibGVfbGVuZ3Ro LAorCQkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJ CQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRy aWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfam9pbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYzhlMWE2 NjZlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2lu LmMKQEAgLTAsMCArMSw2MjkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfam9p bi5jCisgKgkgIGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq CisgKgkgIGNvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmMKKyAqCisgKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFf am9pbi5oIgorI2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgi CisKKyNpbmNsdWRlICJub2Rlcy9wYXRobm9kZXMuaCIKKyNpbmNsdWRlICJub2Rlcy9wcmludC5o IgorI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKKworLyoKKyAqIFRlbXBvcmFyeSBvYmpl Y3QgdXNlZCB3aGVuIHVucm9sbGluZyBhIGpvaW4gdHJlZS4KKyAqLworc3RydWN0IHBncGFfam9p bl91bnJvbGxlcgoreworCXVuc2lnbmVkCW5hbGxvY2F0ZWQ7CisJdW5zaWduZWQJbnVzZWQ7CisJ UGxhbgkgICAqb3V0ZXJfc3VicGxhbjsKKwlFbGlkZWROb2RlICpvdXRlcl9lbGlkZWRfbm9kZTsK Kwlib29sCQlvdXRlcl9iZW5lYXRoX2FueV9nYXRoZXI7CisJcGdwYV9qb2luX3N0cmF0ZWd5ICpz dHJhdGVneTsKKwlQbGFuCSAgKippbm5lcl9zdWJwbGFuczsKKwlFbGlkZWROb2RlICoqaW5uZXJf ZWxpZGVkX25vZGVzOworCXBncGFfam9pbl91bnJvbGxlciAqKmlubmVyX3Vucm9sbGVyczsKKwli b29sCSAgICppbm5lcl9iZW5lYXRoX2FueV9nYXRoZXI7Cit9OworCitzdGF0aWMgcGdwYV9qb2lu X3N0cmF0ZWd5IHBncGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3 YWxrZXIsCisJCQkJCQkJCQkJCSAgUGxhbiAqcGxhbiwKKwkJCQkJCQkJCQkJICBQbGFuICoqcmVh bG91dGVyLAorCQkJCQkJCQkJCQkgIFBsYW4gKipyZWFsaW5uZXIsCisJCQkJCQkJCQkJCSAgRWxp ZGVkTm9kZSAqKmVsaWRlZHJlYWxvdXRlciwKKwkJCQkJCQkJCQkJICBFbGlkZWROb2RlICoqZWxp ZGVkcmVhbGlubmVyLAorCQkJCQkJCQkJCQkgIGJvb2wgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIs CisJCQkJCQkJCQkJCSAgYm9vbCAqZm91bmRfYW55X2lubmVyX2dhdGhlcik7CitzdGF0aWMgRWxp ZGVkTm9kZSAqcGdwYV9kZXNjZW5kX25vZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICoqcGxh bik7CitzdGF0aWMgRWxpZGVkTm9kZSAqcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIoUGxhbm5lZFN0 bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCQkJCQkgICBib29sICpmb3VuZF9hbnlfZ2F0 aGVyKTsKK3N0YXRpYyBib29sIHBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKFBsYW5uZWRTdG10ICpw c3RtdCwgUGxhbiAqKnBsYW4sCisJCQkJCQkJCQlFbGlkZWROb2RlICoqZWxpZGVkX25vZGUpOwor CitzdGF0aWMgYm9vbCBpc19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKFBsYW4gKnBsYW4pOworc3Rh dGljIGJvb2wgaXNfc29ydGluZ19wbGFuKFBsYW4gKnBsYW4pOworCisvKgorICogQ3JlYXRlIGFu IGluaXRpYWxseS1lbXB0eSBvYmplY3QgZm9yIHVucm9sbGluZyBqb2lucy4KKyAqCisgKiBUaGlz IGZ1bmN0aW9uIGNyZWF0ZXMgYSBoZWxwZXIgb2JqZWN0IHRoYXQgY2FuIGxhdGVyIGJlIHVzZWQg dG8gY3JlYXRlIGEKKyAqIHBncGFfdW5yb2xsZWRfam9pbiwgYWZ0ZXIgZmlyc3QgY2FsbGluZyBw Z3BhX3Vucm9sbF9qb2luIG9uZSBvciBtb3JlIHRpbWVzLgorICovCitwZ3BhX2pvaW5fdW5yb2xs ZXIgKgorcGdwYV9jcmVhdGVfam9pbl91bnJvbGxlcih2b2lkKQoreworCXBncGFfam9pbl91bnJv bGxlciAqam9pbl91bnJvbGxlcjsKKworCWpvaW5fdW5yb2xsZXIgPSBwYWxsb2MwX29iamVjdChw Z3BhX2pvaW5fdW5yb2xsZXIpOworCWpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQgPSA0OworCWpv aW5fdW5yb2xsZXItPnN0cmF0ZWd5ID0KKwkJcGFsbG9jX2FycmF5KHBncGFfam9pbl9zdHJhdGVn eSwgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7CisJam9pbl91bnJvbGxlci0+aW5uZXJfc3Vi cGxhbnMgPQorCQlwYWxsb2NfYXJyYXkoUGxhbiAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVk KTsKKwlqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXMgPQorCQlwYWxsb2NfYXJyYXko RWxpZGVkTm9kZSAqLCBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKTsKKwlqb2luX3Vucm9sbGVy LT5pbm5lcl91bnJvbGxlcnMgPQorCQlwYWxsb2NfYXJyYXkocGdwYV9qb2luX3Vucm9sbGVyICos IGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVh dGhfYW55X2dhdGhlciA9CisJCXBhbGxvY19hcnJheShib29sLCBqb2luX3Vucm9sbGVyLT5uYWxs b2NhdGVkKTsKKworCXJldHVybiBqb2luX3Vucm9sbGVyOworfQorCisvKgorICogVW5yb2xsIG9u ZSBsZXZlbCBvZiBhbiB1bnJvbGxhYmxlIGpvaW4gdHJlZS4KKyAqCisgKiBPdXIgYmFzaWMgZ29h bCBoZXJlIGlzIHRvIHVucm9sbCBqb2luIHRyZWVzIGFzIHRoZXkgb2NjdXIgaW4gdGhlIFBsYW4K KyAqIHRyZWUgaW50byBhIHNpbXBsZXIgYW5kIG1vcmUgcmVndWxhciBzdHJ1Y3R1cmUgdGhhdCB3 ZSBjYW4gbW9yZSBlYXNpbHkKKyAqIHVzZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLiBVbnJvbGxp bmcgaXMgb3V0ZXItZGVlcCwgc28gaWYgdGhlIHBsYW4gdHJlZQorICogaGFzIEpvaW4xKEpvaW4y KEEsQiksSm9pbjMoQyxEKSksIHRoZSBzYW1lIGpvaW4gdW5yb2xsZXIgb2JqZWN0IHNob3VsZCBi ZQorICogdXNlZCBmb3IgSm9pbjEgYW5kIEpvaW4yLCBidXQgYSBkaWZmZXJlbnQgb25lIHdpbGwg YmUgbmVlZGVkIGZvciBKb2luMywKKyAqIHNpbmNlIHRoYXQgaW52b2x2ZXMgYSBqb2luIHdpdGhp biB0aGUgKmlubmVyKiBzaWRlIG9mIGFub3RoZXIgam9pbi4KKyAqCisgKiBwZ3BhX3BsYW5fd2Fs a2VyIGNyZWF0ZXMgYSAidG9wIGxldmVsIiBqb2luIHVucm9sbGVyIG9iamVjdCB3aGVuIGl0Cisg KiBlbmNvdW50ZXJzIGEgam9pbiBpbiBhIHBvcnRpb24gb2YgdGhlIHBsYW4gdHJlZSBpbiB3aGlj aCBubyBqb2luIHVucm9sbGVyCisgKiBpcyBhbHJlYWR5IGFjdGl2ZS4gRnJvbSB0aGVyZSwgdGhp cyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5nCisgKiB0byB3aGF0IHBvcnRp b24gb2YgdGhlIHBsYW4gdHJlZSB0aGF0IGpvaW4gdW5yb2xsZXIgYXBwbGllcywgYW5kIGZvcgor ICogY3JlYXRpbmcgYW55IHN1Ym9yZGluYXRlIGpvaW4gdW5yb2xsZXIgb2JqZWN0cyB0aGF0IGFy ZSBuZWVkZWQgYXMgYSByZXN1bHQKKyAqIG9mIG5vbi1vdXRlci1kZWVwIGpvaW4gdHJlZXMuIFdl IGRvIHRoaXMgYnkgcmV0dXJuaW5nIHRoZSBqb2luIHVucm9sbGVyCisgKiBvYmplY3RzIHRoYXQg c2hvdWxkIGJlIHVzZWQgZm9yIGZ1cnRoZXIgdHJhdmVyc2FsIG9mIHRoZSBvdXRlciBhbmQgaW5u ZXIKKyAqIHN1YnRyZWVzIG9mIHRoZSBjdXJyZW50IHBsYW4gbm9kZSB2aWEgKm91dGVyX2pvaW5f dW5yb2xsZXIgYW5kCisgKiAqaW5uZXJfam9pbl91bnJvbGxlciwgcmVzcGVjdGl2ZWx5LgorICov Cit2b2lkCitwZ3BhX3Vucm9sbF9qb2luKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2Vy LCBQbGFuICpwbGFuLAorCQkJCSBib29sIGJlbmVhdGhfYW55X2dhdGhlciwKKwkJCQkgcGdwYV9q b2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKipv dXRlcl9qb2luX3Vucm9sbGVyLAorCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl9qb2lu X3Vucm9sbGVyKQoreworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsKKwlQbGFuCSAgICpy ZWFsaW5uZXIsCisJCQkgICAqcmVhbG91dGVyOworCUVsaWRlZE5vZGUgKmVsaWRlZGlubmVyLAor CQkJICAgKmVsaWRlZG91dGVyOworCWludAkJCW47CisJYm9vbAkJZm91bmRfYW55X291dGVyX2dh dGhlciA9IGZhbHNlOworCWJvb2wJCWZvdW5kX2FueV9pbm5lcl9nYXRoZXIgPSBmYWxzZTsKKwor CUFzc2VydChqb2luX3Vucm9sbGVyICE9IE5VTEwpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHBh c3MgdGhlIGpvaW5fdW5yb2xsZXIgb2JqZWN0IGRvd24gdGhyb3VnaCBjZXJ0YWluIHR5cGVzIG9m CisJICogcGxhbiBub2RlcyAtLSBhbnl0aGluZyB0aGF0J3MgY29uc2lkZXJlZCBwYXJ0IG9mIHRo ZSBqb2luIHN0cmF0ZWd5LCBhbmQKKwkgKiBhbnkgb3RoZXIgbm9kZXMgdGhhdCBjYW4gb2NjdXIg aW4gYSBqb2luIHRyZWUgZGVzcGl0ZSBub3QgYmVpbmcgc2NhbnMKKwkgKiBvciBqb2lucy4KKwkg KgorCSAqIFRoaXMgaW5jbHVkZXM6CisJICoKKwkgKiAoMSkgTWF0ZXJpYWxpemUsIE1lbW9pemUs IGFuZCBIYXNoIG5vZGVzLCB3aGljaCBhcmUgcGFydCBvZiB0aGUgam9pbgorCSAqIHN0cmF0ZWd5 LAorCSAqCisJICogKDIpIEdhdGhlciBhbmQgR2F0aGVyIE1lcmdlIG5vZGVzLCB3aGljaCBjYW4g b2NjdXIgYXQgYW55IHBvaW50IGluIHRoZQorCSAqIGpvaW4gdHJlZSB3aGVyZSB0aGUgcGxhbm5l ciBkZWNpZGVkIHRvIGluaXRpYXRlIHBhcmFsbGVsaXNtLAorCSAqCisJICogKDMpIFNvcnQgYW5k IEluY3JlbWVudGFsU29ydCBub2Rlcywgd2hpY2ggY2FuIG9jY3VyIGJlbmVhdGggTWVyZ2VKb2lu CisJICogb3IgR2F0aGVyTWVyZ2UsCisJICoKKwkgKiAoNCkgQWdnIGFuZCBVbmlxdWUgbm9kZXMs IHdoaWNoIGNhbiBvY2N1ciB3aGVuIHdlIGRlY2lkZSB0byBtYWtlIHRoZQorCSAqIG51bGxhYmxl IHNpZGUgb2YgYSBzZW1pam9pbiB1bmlxdWUgYW5kIHRoZW4gam9pbiB0aGUgcmVzdWx0LCBhbmQK KwkgKgorCSAqICg1KSBSZXN1bHQgbm9kZXMgd2l0aCBjaGlsZHJlbiwgd2hpY2ggY2FuIGJlIGFk ZGVkIGVpdGhlciB0byBwcm9qZWN0IHRvCisJICogZW5mb3JjZSBhIG9uZS10aW1lIGZpbHRlciAo YnV0IFJlc3VsdCBub2RlcyB3aXRob3V0IGNoaWxkcmVuIGFyZQorCSAqIGRlZ2VuZXJhdGUgc2Nh bnMgb3Igam9pbnMpLgorCSAqLworCWlmIChJc0EocGxhbiwgTWF0ZXJpYWwpIHx8IElzQShwbGFu LCBNZW1vaXplKSB8fCBJc0EocGxhbiwgSGFzaCkKKwkJfHwgSXNBKHBsYW4sIEdhdGhlcikgfHwg SXNBKHBsYW4sIEdhdGhlck1lcmdlKQorCQl8fCBpc19zb3J0aW5nX3BsYW4ocGxhbikgfHwgSXNB KHBsYW4sIEFnZykgfHwgSXNBKHBsYW4sIFVuaXF1ZSkKKwkJfHwgaXNfcmVzdWx0X25vZGVfd2l0 aF9jaGlsZChwbGFuKSkKKwl7CisJCSpvdXRlcl9qb2luX3Vucm9sbGVyID0gam9pbl91bnJvbGxl cjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogU2luY2Ugd2UndmUgYWxyZWFkeSBoYW5kbGVk IG5vZGVzIHRoYXQgcmVxdWlyZSBwYXNzLXRocm91Z2ggdHJlYXRtZW50LAorCSAqIHRoaXMgc2hv dWxkIGJlIGFuIHVucm9sbGFibGUgam9pbi4KKwkgKi8KKwlzdHJhdGVneSA9IHBncGFfZGVjb21w b3NlX2pvaW4od2Fsa2VyLCBwbGFuLAorCQkJCQkJCQkgICAmcmVhbG91dGVyLCAmcmVhbGlubmVy LAorCQkJCQkJCQkgICAmZWxpZGVkb3V0ZXIsICZlbGlkZWRpbm5lciwKKwkJCQkJCQkJICAgJmZv dW5kX2FueV9vdXRlcl9nYXRoZXIsCisJCQkJCQkJCSAgICZmb3VuZF9hbnlfaW5uZXJfZ2F0aGVy KTsKKworCS8qIElmIG91ciB3b3Jrc3BhY2UgaXMgZnVsbCwgZXhwYW5kIGl0LiAqLworCWlmIChq b2luX3Vucm9sbGVyLT5udXNlZCA+PSBqb2luX3Vucm9sbGVyLT5uYWxsb2NhdGVkKQorCXsKKwkJ am9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCAqPSAyOworCQlqb2luX3Vucm9sbGVyLT5zdHJhdGVn eSA9CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5zdHJhdGVneSwKKwkJCQkJCSAg IHBncGFfam9pbl9zdHJhdGVneSwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQp OworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucyA9CisJCQlyZXBhbGxvY19hcnJheShq b2luX3Vucm9sbGVyLT5pbm5lcl9zdWJwbGFucywKKwkJCQkJCSAgIFBsYW4gKiwKKwkJCQkJCSAg IGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCQlqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlk ZWRfbm9kZXMgPQorCQkJcmVwYWxsb2NfYXJyYXkoam9pbl91bnJvbGxlci0+aW5uZXJfZWxpZGVk X25vZGVzLAorCQkJCQkJICAgRWxpZGVkTm9kZSAqLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+ bmFsbG9jYXRlZCk7CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX2JlbmVhdGhfYW55X2dhdGhlciA9 CisJCQlyZXBhbGxvY19hcnJheShqb2luX3Vucm9sbGVyLT5pbm5lcl9iZW5lYXRoX2FueV9nYXRo ZXIsCisJCQkJCQkgICBib29sLAorCQkJCQkJICAgam9pbl91bnJvbGxlci0+bmFsbG9jYXRlZCk7 CisJCWpvaW5fdW5yb2xsZXItPmlubmVyX3Vucm9sbGVycyA9CisJCQlyZXBhbGxvY19hcnJheShq b2luX3Vucm9sbGVyLT5pbm5lcl91bnJvbGxlcnMsCisJCQkJCQkgICBwZ3BhX2pvaW5fdW5yb2xs ZXIgKiwKKwkJCQkJCSAgIGpvaW5fdW5yb2xsZXItPm5hbGxvY2F0ZWQpOworCX0KKworCS8qCisJ ICogU2luY2Ugd2UncmUgZmxhdHRlbmluZyBvdXRlci1kZWVwIGpvaW4gdHJlZXMsIGl0IGZvbGxv d3MgdGhhdCBpZiB0aGUKKwkgKiBvdXRlciBzaWRlIGlzIHN0aWxsIGFuIHVucm9sbGFibGUgam9p biwgaXQgc2hvdWxkIGJlIHVucm9sbGVkIGludG8gdGhpcworCSAqIHNhbWUgb2JqZWN0LiBPdGhl cndpc2UsIHdlJ3ZlIHJlYWNoZWQgdGhlIGxpbWl0IG9mIHdoYXQgd2UgY2FuIHVucm9sbAorCSAq IGludG8gdGhpcyBvYmplY3QgYW5kIG11c3QgcmVtZW1iZXIgdGhlIG91dGVyIHNpZGUgYXMgdGhl IGZpbmFsIG91dGVyCisJICogc3VicGxhbi4KKwkgKi8KKwlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVM TCAmJiBwZ3BhX2lzX2pvaW4ocmVhbG91dGVyKSkKKwkJKm91dGVyX2pvaW5fdW5yb2xsZXIgPSBq b2luX3Vucm9sbGVyOworCWVsc2UKKwl7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX3N1YnBsYW4g PSByZWFsb3V0ZXI7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2VsaWRlZF9ub2RlID0gZWxpZGVk b3V0ZXI7CisJCWpvaW5fdW5yb2xsZXItPm91dGVyX2JlbmVhdGhfYW55X2dhdGhlciA9CisJCQli ZW5lYXRoX2FueV9nYXRoZXIgfHwgZm91bmRfYW55X291dGVyX2dhdGhlcjsKKwl9CisKKwkvKgor CSAqIFN0b3JlIHRoZSBpbm5lciBzdWJwbGFuLiBJZiBpdCdzIGFuIHVucm9sbGFibGUgam9pbiwg aXQgbmVlZHMgdG8gYmUKKwkgKiBmbGF0dGVuZWQgaW4gdHVybiwgYnV0IGludG8gYSBuZXcgdW5y b2xsZXIgb2JqZWN0LCBub3QgdGhpcyBvbmUuCisJICovCisJbiA9IGpvaW5fdW5yb2xsZXItPm51 c2VkKys7CisJam9pbl91bnJvbGxlci0+c3RyYXRlZ3lbbl0gPSBzdHJhdGVneTsKKwlqb2luX3Vu cm9sbGVyLT5pbm5lcl9zdWJwbGFuc1tuXSA9IHJlYWxpbm5lcjsKKwlqb2luX3Vucm9sbGVyLT5p bm5lcl9lbGlkZWRfbm9kZXNbbl0gPSBlbGlkZWRpbm5lcjsKKwlqb2luX3Vucm9sbGVyLT5pbm5l cl9iZW5lYXRoX2FueV9nYXRoZXJbbl0gPQorCQliZW5lYXRoX2FueV9nYXRoZXIgfHwgZm91bmRf YW55X2lubmVyX2dhdGhlcjsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBwZ3BhX2lzX2pv aW4ocmVhbGlubmVyKSkKKwkJKmlubmVyX2pvaW5fdW5yb2xsZXIgPSBwZ3BhX2NyZWF0ZV9qb2lu X3Vucm9sbGVyKCk7CisJZWxzZQorCQkqaW5uZXJfam9pbl91bnJvbGxlciA9IE5VTEw7CisJam9p bl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJzW25dID0gKmlubmVyX2pvaW5fdW5yb2xsZXI7Cit9 CisKKy8qCisgKiBVc2UgdGhlIGRhdGEgd2UndmUgYWNjdW11bGF0ZWQgaW4gYSBwZ3BhX2pvaW5f dW5yb2xsZXIgb2JqZWN0IHRvIGNvbnN0cnVjdAorICogYSBwZ3BhX3Vucm9sbGVkX2pvaW4uCisg Ki8KK3BncGFfdW5yb2xsZWRfam9pbiAqCitwZ3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4ocGdwYV9w bGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICpq b2luX3Vucm9sbGVyKQoreworCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW47CisJaW50CQkJaTsK KworCS8qCisJICogV2Ugc2hvdWxkbid0IGhhdmUgZ29uZSBldmVuIHNvIGZhciBhcyB0byBjcmVh dGUgYSBqb2luIHVucm9sbGVyIHVubGVzcworCSAqIHdlIGZvdW5kIGF0IGxlYXN0IG9uZSB1bnJv bGxhYmxlIGpvaW4uCisJICovCisJQXNzZXJ0KGpvaW5fdW5yb2xsZXItPm51c2VkID4gMCk7CisK KwkvKiBBbGxvY2F0ZSByZXN1bHQgc3RydWN0dXJlcy4gKi8KKwl1am9pbiA9IHBhbGxvYzBfb2Jq ZWN0KHBncGFfdW5yb2xsZWRfam9pbik7CisJdWpvaW4tPm5pbm5lciA9IGpvaW5fdW5yb2xsZXIt Pm51c2VkOworCXVqb2luLT5zdHJhdGVneSA9IHBhbGxvYzBfYXJyYXkocGdwYV9qb2luX3N0cmF0 ZWd5LCBqb2luX3Vucm9sbGVyLT5udXNlZCk7CisJdWpvaW4tPmlubmVyID0gcGFsbG9jMF9hcnJh eShwZ3BhX2pvaW5fbWVtYmVyLCBqb2luX3Vucm9sbGVyLT5udXNlZCk7CisKKwkvKiBIYW5kbGUg dGhlIG91dGVybW9zdCBqb2luLiAqLworCXVqb2luLT5vdXRlci5wbGFuID0gam9pbl91bnJvbGxl ci0+b3V0ZXJfc3VicGxhbjsKKwl1am9pbi0+b3V0ZXIuZWxpZGVkX25vZGUgPSBqb2luX3Vucm9s bGVyLT5vdXRlcl9lbGlkZWRfbm9kZTsKKwl1am9pbi0+b3V0ZXIuc2NhbiA9CisJCXBncGFfYnVp bGRfc2Nhbih3YWxrZXIsIHVqb2luLT5vdXRlci5wbGFuLAorCQkJCQkJdWpvaW4tPm91dGVyLmVs aWRlZF9ub2RlLAorCQkJCQkJam9pbl91bnJvbGxlci0+b3V0ZXJfYmVuZWF0aF9hbnlfZ2F0aGVy LAorCQkJCQkJdHJ1ZSk7CisKKwkvKgorCSAqIFdlIHdhbnQgdGhlIGpvaW5zIGZyb20gdGhlIGRl ZXBlc3QgcGFydCBvZiB0aGUgcGxhbiB0cmVlIHRvIGFwcGVhcgorCSAqIGZpcnN0IGluIHRoZSBy ZXN1bHQgb2JqZWN0LCBidXQgdGhlIGpvaW4gdW5yb2xsZXIgYWRkcyB0aGVtIGluIGV4YWN0bHkK KwkgKiB0aGUgcmV2ZXJzZSBvZiB0aGF0IG9yZGVyLCBzbyB3ZSBuZWVkIHRvIGZsaXAgdGhlIG9y ZGVyIG9mIHRoZSBhcnJheXMKKwkgKiB3aGVuIGNvbnN0cnVjdGluZyB0aGUgZmluYWwgcmVzdWx0 LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBqb2luX3Vucm9sbGVyLT5udXNlZDsgKytpKQorCXsK KwkJaW50CQkJayA9IGpvaW5fdW5yb2xsZXItPm51c2VkIC0gaSAtIDE7CisKKwkJLyogQ29weSBz dHJhdGVneSwgUGxhbiwgYW5kIEVsaWRlZE5vZGUuICovCisJCXVqb2luLT5zdHJhdGVneVtpXSA9 IGpvaW5fdW5yb2xsZXItPnN0cmF0ZWd5W2tdOworCQl1am9pbi0+aW5uZXJbaV0ucGxhbiA9IGpv aW5fdW5yb2xsZXItPmlubmVyX3N1YnBsYW5zW2tdOworCQl1am9pbi0+aW5uZXJbaV0uZWxpZGVk X25vZGUgPSBqb2luX3Vucm9sbGVyLT5pbm5lcl9lbGlkZWRfbm9kZXNba107CisKKwkJLyoKKwkJ ICogRmlsbCBpbiByZW1haW5pbmcgZGV0YWlscywgdXNpbmcgZWl0aGVyIHRoZSBuZXN0ZWQgam9p biB1bnJvbGxlciwKKwkJICogb3IgYnkgZGVyaXZpbmcgdGhlbSBmcm9tIHRoZSBwbGFuIGFuZCBl bGlkZWQgbm9kZXMuCisJCSAqLworCQlpZiAoam9pbl91bnJvbGxlci0+aW5uZXJfdW5yb2xsZXJz W2tdICE9IE5VTEwpCisJCQl1am9pbi0+aW5uZXJbaV0udW5yb2xsZWRfam9pbiA9CisJCQkJcGdw YV9idWlsZF91bnJvbGxlZF9qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkgam9pbl91bnJvbGxlci0+ aW5uZXJfdW5yb2xsZXJzW2tdKTsKKwkJZWxzZQorCQkJdWpvaW4tPmlubmVyW2ldLnNjYW4gPQor CQkJCXBncGFfYnVpbGRfc2Nhbih3YWxrZXIsIHVqb2luLT5pbm5lcltpXS5wbGFuLAorCQkJCQkJ CQl1am9pbi0+aW5uZXJbaV0uZWxpZGVkX25vZGUsCisJCQkJCQkJCWpvaW5fdW5yb2xsZXItPmlu bmVyX2JlbmVhdGhfYW55X2dhdGhlcltrXSwKKwkJCQkJCQkJdHJ1ZSk7CisJfQorCisJcmV0dXJu IHVqb2luOworfQorCisvKgorICogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBwZ3BhX2pvaW5f dW5yb2xsZXIuCisgKi8KK3ZvaWQKK3BncGFfZGVzdHJveV9qb2luX3Vucm9sbGVyKHBncGFfam9p bl91bnJvbGxlciAqam9pbl91bnJvbGxlcikKK3sKKwlwZnJlZShqb2luX3Vucm9sbGVyLT5zdHJh dGVneSk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+aW5uZXJfc3VicGxhbnMpOworCXBmcmVlKGpv aW5fdW5yb2xsZXItPmlubmVyX2VsaWRlZF9ub2Rlcyk7CisJcGZyZWUoam9pbl91bnJvbGxlci0+ aW5uZXJfdW5yb2xsZXJzKTsKKwlwZnJlZShqb2luX3Vucm9sbGVyKTsKK30KKworLyoKKyAqIElk ZW50aWZ5IHRoZSBqb2luIHN0cmF0ZWd5IHVzZWQgYnkgYSBqb2luIGFuZCB0aGUgInJlYWwiIGlu bmVyIGFuZCBvdXRlcgorICogcGxhbnMuCisgKgorICogRm9yIGV4YW1wbGUsIGEgSGFzaCBKb2lu IGFsd2F5cyBoYXMgYSBIYXNoIG5vZGUgb24gdGhlIGlubmVyIHNpZGUsIGJ1dAorICogZm9yIGFs bCBpbnRlbnRzIGFuZCBwdXJwb3NlcyB0aGUgcmVhbCBpbm5lciBpbnB1dCBpcyB0aGUgSGFzaCBu b2RlJ3MgY2hpbGQsCisgKiBub3QgdGhlIEhhc2ggbm9kZSBpdHNlbGYuCisgKgorICogTGlrZXdp c2UsIGEgTWVyZ2UgSm9pbiBtYXkgaGF2ZSBTb3J0IG5vdGUgb24gdGhlIGlubmVyIG9yIG91dGVy IHNpZGU7IGlmCisgKiBpdCBkb2VzLCB0aGUgcmVhbCBpbnB1dCB0byB0aGUgam9pbiBpcyB0aGUg U29ydCBub2RlJ3MgY2hpbGQsIG5vdCB0aGUKKyAqIFNvcnQgbm9kZSBpdHNlbGYuCisgKgorICog SW4gYWRkaXRpb24sIHdpdGggYSBNZXJnZSBKb2luIG9yIGEgTmVzdGVkIExvb3AsIHRoZSBqb2lu IHBsYW5uaW5nIGNvZGUKKyAqIG1heSBhZGQgYWRkaXRpb25hbCBub2RlcyBzdWNoIGFzIE1hdGVy aWFsaXplIG9yIE1lbW9pemUuIFdlIHJlZ2FyZCB0aGVzZQorICogYXMgYW4gYXNwZWN0IG9mIHRo ZSBqb2luIHN0cmF0ZWd5LiBBcyBpbiB0aGUgcHJldmlvdXMgY2FzZXMsIHRoZSB0cnVlIGlucHV0 CisgKiB0byB0aGUgam9pbiBpcyB0aGUgdW5kZXJseWluZyBub2RlLgorICoKKyAqIEhvd2V2ZXIs IGlmIGFueSBpbnZvbHZlZCBjaGlsZCBub2RlIHByZXZpb3VzbHkgaGFkIGEgbm93LWVsaWRlZCBu b2RlIHN0YWNrZWQKKyAqIG9uIHRvcCwgdGhlbiB3ZSBjYW4ndCAibG9vayB0aHJvdWdoIiB0aGF0 IG5vZGUgLS0gaW5kZWVkLCB3aGF0J3MgZ29pbmcgdG8gYmUKKyAqIHJlbGV2YW50IGZvciBvdXIg cHVycG9zZXMgaXMgdGhlIEVsaWRlZE5vZGUgb24gdG9wIG9mIHRoYXQgcGxhbiBub2RlLCByYXRo ZXIKKyAqIHRoYW4gdGhlIHBsYW4gbm9kZSBpdHNlbGYuCisgKgorICogSWYgdGhlcmUgYXJlIG11 bHRpcGxlIGVsaWRlZCBub2Rlcywgd2Ugd2FudCB0aGF0IG9uZSB0aGF0IHdvdWxkIGhhdmUgYmVl bgorICogdXBwZXJtb3N0IGluIHRoZSBwbGFuIHRyZWUgcHJpb3IgdG8gc2V0cmVmcyBwcm9jZXNz aW5nOyB3ZSBleHBlY3QgdG8gZmluZAorICogdGhhdCBvbmUgbGFzdCBpbiB0aGUgbGlzdCBvZiBl bGlkZWQgbm9kZXMuCisgKgorICogT24gcmV0dXJuICpyZWFsb3V0ZXIgYW5kICpyZWFsaW5uZXIg d2lsbCBoYXZlIGJlZW4gc2V0IHRvIHRoZSByZWFsIGlubmVyCisgKiBhbmQgcmVhbCBvdXRlciBw bGFucyB0aGF0IHdlIGlkZW50aWZpZWQsIGFuZCAqZWxpZGVkcmVhbG91dGVyIGFuZAorICogKmVs aWRlZHJlYWxpbm5lciB0byB0aGUgbGFzdCBvZiBhbnkgY29ycmVzcG9kaW5nIGVsaWRlZCBub2Rl cy4KKyAqIEFkZGl0aW9uYWxseSwgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIgYW5kICpmb3VuZF9h bnlfaW5uZXJfZ2F0aGVyIHdpbGwKKyAqIGJlIHNldCB0byB0cnVlIGlmIHdlIGxvb2tlZCB0aHJv dWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlIG9uCisgKiB0aGF0IHNpZGUgb2YgdGhl IGpvaW4sIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBwZ3BhX2pvaW5fc3RyYXRl Z3kKK3BncGFfZGVjb21wb3NlX2pvaW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIs IFBsYW4gKnBsYW4sCisJCQkJCVBsYW4gKipyZWFsb3V0ZXIsIFBsYW4gKipyZWFsaW5uZXIsCisJ CQkJCUVsaWRlZE5vZGUgKiplbGlkZWRyZWFsb3V0ZXIsIEVsaWRlZE5vZGUgKiplbGlkZWRyZWFs aW5uZXIsCisJCQkJCWJvb2wgKmZvdW5kX2FueV9vdXRlcl9nYXRoZXIsIGJvb2wgKmZvdW5kX2Fu eV9pbm5lcl9nYXRoZXIpCit7CisJUGxhbm5lZFN0bXQgKnBzdG10ID0gd2Fsa2VyLT5wc3RtdDsK KwlKb2luVHlwZQlqb2ludHlwZSA9ICgoSm9pbiAqKSBwbGFuKS0+am9pbnR5cGU7CisJUGxhbgkg ICAqb3V0ZXJwbGFuID0gcGxhbi0+bGVmdHRyZWU7CisJUGxhbgkgICAqaW5uZXJwbGFuID0gcGxh bi0+cmlnaHR0cmVlOworCUVsaWRlZE5vZGUgKmVsaWRlZG91dGVyOworCUVsaWRlZE5vZGUgKmVs aWRlZGlubmVyOworCXBncGFfam9pbl9zdHJhdGVneSBzdHJhdGVneTsKKwlib29sCQl1bmlxdWVv dXRlcjsKKwlib29sCQl1bmlxdWVpbm5lcjsKKworCWVsaWRlZG91dGVyID0gcGdwYV9sYXN0X2Vs aWRlZF9ub2RlKHBzdG10LCBvdXRlcnBsYW4pOworCWVsaWRlZGlubmVyID0gcGdwYV9sYXN0X2Vs aWRlZF9ub2RlKHBzdG10LCBpbm5lcnBsYW4pOworCSpmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyID0g ZmFsc2U7CisJKmZvdW5kX2FueV9pbm5lcl9nYXRoZXIgPSBmYWxzZTsKKworCXN3aXRjaCAobm9k ZVRhZyhwbGFuKSkKKwl7CisJCWNhc2UgVF9NZXJnZUpvaW46CisKKwkJCS8qCisJCQkgKiBUaGUg cGxhbm5lciBtYXkgaGF2ZSBjaG9zZW4gdG8gcGxhY2UgYSBNYXRlcmlhbCBub2RlIG9uIHRoZQor CQkJICogaW5uZXIgc2lkZSBvZiB0aGUgTWVyZ2VKb2luOyBpZiB0aGlzIGlzIHByZXNlbnQsIHdl IHJlY29yZCBpdAorCQkJICogYXMgcGFydCBvZiB0aGUgam9pbiBzdHJhdGVneS4KKwkJCSAqLwor CQkJaWYgKGVsaWRlZGlubmVyID09IE5VTEwgJiYgSXNBKGlubmVycGxhbiwgTWF0ZXJpYWwpKQor CQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBs YW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX01FUkdFX0pPSU5fTUFURVJJQUxJWkU7CisJCQl9 CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTUVSR0VfSk9JTl9QTEFJTjsKKworCQkJ LyoKKwkJCSAqIEZvciBhIE1lcmdlSm9pbiwgZWl0aGVyIHRoZSBvdXRlciBvciB0aGUgaW5uZXIg c3VicGxhbiwgb3IKKwkJCSAqIGJvdGgsIG1heSBoYXZlIG5lZWRlZCB0byBiZSBzb3J0ZWQ7IHdl IG11c3QgZGlzcmVnYXJkIGFueSBTb3J0CisJCQkgKiBvciBJbmNyZW1lbnRhbFNvcnQgbm9kZSB0 byBmaW5kIHRoZSByZWFsIGlubmVyIG9yIG91dGVyCisJCQkgKiBzdWJwbGFuLgorCQkJICovCisJ CQlpZiAoZWxpZGVkb3V0ZXIgPT0gTlVMTCAmJiBpc19zb3J0aW5nX3BsYW4ob3V0ZXJwbGFuKSkK KwkJCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCAmb3V0ZXJwbGFuKTsK KwkJCWlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIGlzX3NvcnRpbmdfcGxhbihpbm5lcnBsYW4p KQorCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4p OworCQkJYnJlYWs7CisKKwkJY2FzZSBUX05lc3RMb29wOgorCisJCQkvKgorCQkJICogVGhlIHBs YW5uZXIgbWF5IGhhdmUgY2hvc2VuIHRvIHBsYWNlIGEgTWF0ZXJpYWwgb3IgTWVtb2l6ZSBub2Rl CisJCQkgKiBvbiB0aGUgaW5uZXIgc2lkZSBvZiB0aGUgTmVzdExvb3A7IGlmIHRoaXMgaXMgcHJl c2VudCwgd2UKKwkJCSAqIHJlY29yZCBpdCBhcyBwYXJ0IG9mIHRoZSBqb2luIHN0cmF0ZWd5Lgor CQkJICovCisJCQlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBJc0EoaW5uZXJwbGFuLCBNYXRl cmlhbCkpCisJCQl7CisJCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwg JmlubmVycGxhbik7CisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJ WkU7CisJCQl9CisJCQllbHNlIGlmIChlbGlkZWRpbm5lciA9PSBOVUxMICYmIElzQShpbm5lcnBs YW4sIE1lbW9pemUpKQorCQkJeworCQkJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX25vZGUo cHN0bXQsICZpbm5lcnBsYW4pOworCQkJCXN0cmF0ZWd5ID0gSlNUUkFUX05FU1RFRF9MT09QX01F TU9JWkU7CisJCQl9CisJCQllbHNlCisJCQkJc3RyYXRlZ3kgPSBKU1RSQVRfTkVTVEVEX0xPT1Bf UExBSU47CisJCQlicmVhazsKKworCQljYXNlIFRfSGFzaEpvaW46CisKKwkJCS8qCisJCQkgKiBU aGUgaW5uZXIgc3VicGxhbiBvZiBhIEhhc2hKb2luIGlzIGFsd2F5cyBhIEhhc2ggbm9kZTsgdGhl IHJlYWwKKwkJCSAqIGlubmVyIHN1YnBsYW4gaXMgdGhlIEhhc2ggbm9kZSdzIGNoaWxkLgorCQkJ ICovCisJCQlBc3NlcnQoSXNBKGlubmVycGxhbiwgSGFzaCkpOworCQkJQXNzZXJ0KGVsaWRlZGlu bmVyID09IE5VTEwpOworCQkJZWxpZGVkaW5uZXIgPSBwZ3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwg JmlubmVycGxhbik7CisJCQlzdHJhdGVneSA9IEpTVFJBVF9IQVNIX0pPSU47CisJCQlicmVhazsK KworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBub2RlIHR5cGU6ICVk IiwgKGludCkgbm9kZVRhZyhwbGFuKSk7CisJfQorCisJLyoKKwkgKiBUaGUgcGxhbm5lciBtYXkg aGF2ZSBkZWNpZGVkIHRvIGltcGxlbWVudCBhIHNlbWlqb2luIGJ5IGZpcnN0IG1ha2luZworCSAq IHRoZSBudWxsYWJsZSBzaWRlIG9mIHRoZSBwbGFuIHVuaXF1ZSwgYW5kIHRoZW4gcGVyZm9ybWlu ZyBhIG5vcm1hbCBqb2luCisJICogYWdhaW5zdCB0aGUgcmVzdWx0LiBUaGVyZWZvcmUsIHdlIG1p Z2h0IG5lZWQgdG8gZGVzY2VuZCB0aHJvdWdoIGEKKwkgKiB1bmlxdWUgbm9kZSBvbiBlaXRoZXIg c2lkZSBvZiB0aGUgcGxhbi4KKwkgKi8KKwl1bmlxdWVvdXRlciA9IHBncGFfZGVzY2VuZF9hbnlf dW5pcXVlKHBzdG10LCAmb3V0ZXJwbGFuLCAmZWxpZGVkb3V0ZXIpOworCXVuaXF1ZWlubmVyID0g cGdwYV9kZXNjZW5kX2FueV91bmlxdWUocHN0bXQsICZpbm5lcnBsYW4sICZlbGlkZWRpbm5lcik7 CisKKwkvKgorCSAqIFRoZSBwbGFubmVyIG1heSBoYXZlIGRlY2lkZWQgdG8gcGFyYWxsZWxpemUg cGFydCBvZiB0aGUgam9pbiB0cmVlLCBzbworCSAqIHdlIGNvdWxkIGZpbmQgYSBHYXRoZXIgb3Ig R2F0aGVyIE1lcmdlIG5vZGUgaGVyZS4gTm90ZSB0aGF0LCBpZgorCSAqIHByZXNlbnQsIHRoaXMg d2lsbCBhcHBlYXIgYmVsb3cgbm9kZXMgd2UgY29uc2lkZXJlZCBhcyBwYXJ0IG9mIHRoZSBqb2lu CisJICogc3RyYXRlZ3ksIGJ1dCB3ZSBjb3VsZCBmaW5kIGFub3RoZXIgdW5pcXVlbmVzcy1lbmZv cmNpbmcgbm9kZSBiZWxvdyB0aGUKKwkgKiBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlLCBpZiBwcmVz ZW50LgorCSAqLworCWlmIChlbGlkZWRvdXRlciA9PSBOVUxMKQorCXsKKwkJZWxpZGVkb3V0ZXIg PSBwZ3BhX2Rlc2NlbmRfYW55X2dhdGhlcihwc3RtdCwgJm91dGVycGxhbiwKKwkJCQkJCQkJCQkJ ICBmb3VuZF9hbnlfb3V0ZXJfZ2F0aGVyKTsKKwkJaWYgKGZvdW5kX2FueV9vdXRlcl9nYXRoZXIg JiYKKwkJCXBncGFfZGVzY2VuZF9hbnlfdW5pcXVlKHBzdG10LCAmb3V0ZXJwbGFuLCAmZWxpZGVk b3V0ZXIpKQorCQkJdW5pcXVlb3V0ZXIgPSB0cnVlOworCX0KKwlpZiAoZWxpZGVkaW5uZXIgPT0g TlVMTCkKKwl7CisJCWVsaWRlZGlubmVyID0gcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIocHN0bXQs ICZpbm5lcnBsYW4sCisJCQkJCQkJCQkJCSAgZm91bmRfYW55X2lubmVyX2dhdGhlcik7CisJCWlm IChmb3VuZF9hbnlfaW5uZXJfZ2F0aGVyICYmCisJCQlwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1ZShw c3RtdCwgJmlubmVycGxhbiwgJmVsaWRlZGlubmVyKSkKKwkJCXVuaXF1ZWlubmVyID0gdHJ1ZTsK Kwl9CisKKwkvKgorCSAqIEl0J3MgcG9zc2libGUgdGhhdCBSZXN1bHQgbm9kZSBoYXMgYmVlbiBp bnNlcnRlZCBlaXRoZXIgdG8gcHJvamVjdCBhCisJICogdGFyZ2V0IGxpc3Qgb3IgdG8gaW1wbGVt ZW50IGEgb25lLXRpbWUgZmlsdGVyLiBJZiBzbywgd2UgY2FuIGRlc2NlbmQKKwkgKiB0aHJvdWdo dCBpdC4gTm90ZSB0aGF0IGEgcmVzdWx0IG5vZGUgd2l0aG91dCBhIGNoaWxkIHdvdWxkIGJlIGEK KwkgKiBkZWdlbmVyYXRlIHNjYW4gb3Igam9pbiwgYW5kIG5vdCBzb21ldGhpbmcgd2UgY291bGQg ZGVzY2VuZCB0aHJvdWdoLgorCSAqCisJICogWFhYLiBJIHN1c3BlY3QgaXQncyBwb3NzaWJsZSBm b3IgdGhpcyB0byBoYXBwZW4gYWJvdmUgdGhlIEdhdGhlciBvcgorCSAqIEdhdGhlciBNZXJnZSBu b2RlLCB0b28sIGJ1dCBhcHBhcmVudGx5IHdlIGhhdmUgbm8gdGVzdCBjYXNlIGZvciB0aGF0CisJ ICogc2NlbmFyaW8uCisJICovCisJaWYgKGVsaWRlZG91dGVyID09IE5VTEwgJiYgaXNfcmVzdWx0 X25vZGVfd2l0aF9jaGlsZChvdXRlcnBsYW4pKQorCQllbGlkZWRvdXRlciA9IHBncGFfZGVzY2Vu ZF9ub2RlKHBzdG10LCAmb3V0ZXJwbGFuKTsKKwlpZiAoZWxpZGVkaW5uZXIgPT0gTlVMTCAmJiBp c19yZXN1bHRfbm9kZV93aXRoX2NoaWxkKGlubmVycGxhbikpCisJCWVsaWRlZGlubmVyID0gcGdw YV9kZXNjZW5kX25vZGUocHN0bXQsICZpbm5lcnBsYW4pOworCisJLyoKKwkgKiBJZiB0aGlzIGlz IGEgc2VtaWpvaW4gdGhhdCB3YXMgY29udmVydGVkIHRvIGFuIGlubmVyIGpvaW4gYnkgbWFraW5n IG9uZQorCSAqIHNpZGUgb3IgdGhlIG90aGVyIHVuaXF1ZSwgbWFrZSBhIG5vdGUgdGhhdCB0aGUg aW5uZXIgb3Igb3V0ZXIgc3VicGxhbiwKKwkgKiBhcyBhcHByb3ByaWF0ZSwgc2hvdWxkIGJlIHRy ZWF0ZWQgYXMgYSBxdWVyeSBwbGFuIGZlYXR1cmUgd2hlbiB0aGUgbWFpbgorCSAqIHRyZWUgdHJh dmVyc2FsIHJlYWNoZXMgaXQuCisJICoKKwkgKiBDb252ZXJzZWx5LCBpZiB0aGUgcGxhbm5lciBj b3VsZCBoYXZlIG1hZGUgb25lIHNpZGUgb2YgdGhlIGpvaW4gdW5pcXVlCisJICogYW5kIHRoZXJl YnkgY29udmVydGVkIGl0IHRvIGFuIGlubmVyIGpvaW4sIGFuZCBjaG9zZSBub3QgdG8gZG8gc28s IHRoYXQKKwkgKiBpcyBhbHNvIHdvcnRoIG5vdGluZy4KKwkgKgorCSAqIE5COiBUaGlzIGNvZGUg Y291bGQgYXBwZWFyIHNsaWdodGx5IGhpZ2hlciB1cCBpbiBpbiB0aGlzIGZ1bmN0aW9uLCBidXQK KwkgKiBub25lIG9mIHRoZSBub2RlcyB0aHJvdWdoIHdoaWNoIHdlIGp1c3QgZGVzY2VuZGVkIHNo b3VsZCBoYXZlCisJICogYXNzb2NpYXRlZCBSVElzLgorCSAqCisJICogTkI6IFRoaXMgc2VlbXMg bGlrZSBhIHNvbWV3aGF0IGhhY2t5IHdheSBvZiBwYXNzaW5nIGluZm9ybWF0aW9uIHVwIHRvCisJ ICogdGhlIG1haW4gdHJlZSB3YWxrLCBidXQgSSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIGJldHRl ciBpZGVhLgorCSAqLworCWlmICh1bmlxdWVvdXRlcikKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1 cmUod2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFLCBvdXRlcnBsYW4pOworCWVsc2UgaWYg KGpvaW50eXBlID09IEpPSU5fUklHSFRfU0VNSSkKKwkJcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUo d2Fsa2VyLCBQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRSwgb3V0ZXJwbGFuKTsKKwlpZiAodW5p cXVlaW5uZXIpCisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlK T0lOX1VOSVFVRSwgaW5uZXJwbGFuKTsKKwllbHNlIGlmIChqb2ludHlwZSA9PSBKT0lOX1NFTUkp CisJCXBncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHdhbGtlciwgUEdQQVFGX1NFTUlKT0lOX05PTl9V TklRVUUsIGlubmVycGxhbik7CisKKwkvKiBTZXQgb3V0cHV0IHBhcmFtZXRlcnMuICovCisJKnJl YWxvdXRlciA9IG91dGVycGxhbjsKKwkqcmVhbGlubmVyID0gaW5uZXJwbGFuOworCSplbGlkZWRy ZWFsb3V0ZXIgPSBlbGlkZWRvdXRlcjsKKwkqZWxpZGVkcmVhbGlubmVyID0gZWxpZGVkaW5uZXI7 CisJcmV0dXJuIHN0cmF0ZWd5OworfQorCisvKgorICogRGVzY2VuZCB0aHJvdWdoIGEgUGxhbiBu b2RlIGluIGEgam9pbiB0cmVlIHRoYXQgdGhlIGNhbGxlciBoYXMgZGV0ZXJtaW5lZAorICogdG8g YmUgaXJyZWxldmFudC4KKyAqCisgKiBVcGRhdGVzICpwbGFuLCBhbmQgcmV0dXJucyB0aGUgbGFz dCBvZiBhbnkgZWxpZGVkIG5vZGVzIHBlcnRhaW5pbmcgdG8gdGhlCisgKiBuZXcgcGxhbiBub2Rl LgorICovCitzdGF0aWMgRWxpZGVkTm9kZSAqCitwZ3BhX2Rlc2NlbmRfbm9kZShQbGFubmVkU3Rt dCAqcHN0bXQsIFBsYW4gKipwbGFuKQoreworCSpwbGFuID0gKCpwbGFuKS0+bGVmdHRyZWU7CisJ cmV0dXJuIHBncGFfbGFzdF9lbGlkZWRfbm9kZShwc3RtdCwgKnBsYW4pOworfQorCisvKgorICog RGVzY2VuZCB0aHJvdWdoIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLCBpZiBwcmVzZW50 LCBhbmQgYW55IFNvcnQKKyAqIG9yIEluY3JlbWVudGFsU29ydCBub2RlIG9jY3VycmluZyB1bmRl ciBhIEdhdGhlciBNZXJnZS4KKyAqCisgKiBDYWxsZXIgc2hvdWxkIGhhdmUgdmVyaWZpZWQgdGhh dCB0aGVyZSBpcyBubyBFbGlkZWROb2RlIHBlcnRhaW5pbmcgdG8KKyAqIHRoZSBpbml0aWFsIHZh bHVlIG9mICpwbGFuLgorICoKKyAqIFVwZGF0ZXMgKnBsYW4sIGFuZCByZXR1cm5zIHRoZSBsYXN0 IG9mIGFueSBlbGlkZWQgbm9kZXMgcGVydGFpbmluZyB0byB0aGUKKyAqIG5ldyBwbGFuIG5vZGUu IFNldHMgKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlIGlmIGVpdGhlciBHYXRoZXIgb3IKKyAqIEdh dGhlciBNZXJnZSB3YXMgZm91bmQsIGFuZCBvdGhlcndpc2UgbGVhdmVzIGl0IHVuY2hhbmdlZC4K KyAqLworc3RhdGljIEVsaWRlZE5vZGUgKgorcGdwYV9kZXNjZW5kX2FueV9nYXRoZXIoUGxhbm5l ZFN0bXQgKnBzdG10LCBQbGFuICoqcGxhbiwKKwkJCQkJCWJvb2wgKmZvdW5kX2FueV9nYXRoZXIp Cit7CisJaWYgKElzQSgqcGxhbiwgR2F0aGVyKSkKKwl7CisJCSpmb3VuZF9hbnlfZ2F0aGVyID0g dHJ1ZTsKKwkJcmV0dXJuIHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwl9CisKKwlp ZiAoSXNBKCpwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlFbGlkZWROb2RlICplbGlkZWQgPSBw Z3BhX2Rlc2NlbmRfbm9kZShwc3RtdCwgcGxhbik7CisKKwkJaWYgKGVsaWRlZCA9PSBOVUxMICYm IGlzX3NvcnRpbmdfcGxhbigqcGxhbikpCisJCQllbGlkZWQgPSBwZ3BhX2Rlc2NlbmRfbm9kZShw c3RtdCwgcGxhbik7CisKKwkJKmZvdW5kX2FueV9nYXRoZXIgPSB0cnVlOworCQlyZXR1cm4gZWxp ZGVkOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogSWYgKnBsYW4gaXMgYW4gQWdn IG9yIFVuaXF1ZSBub2RlLCB3ZSB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBpdCwgdW5sZXNzCisg KiBpdCBoYXMgYSBjb3JyZXNwb25kaW5nIGVsaWRlZCBub2RlLiBJZiBpdHMgaW1tZWRpYXRlIGNo aWxkIGlzIGEgU29ydCBvcgorICogSW5jcmVtZW50YWxTb3J0LCB3ZSBhbHNvIHdhbnQgdG8gZGVz Y2VuZCB0aHJvdWdoIHRoYXQsIHVubGVzcyBpdCBoYXMgYQorICogY29ycmVzcG9uZGluZyBlbGlk ZWQgbm9kZS4KKyAqCisgKiBPbiBlbnRyeSwgKmVsaWRlZF9ub2RlIG11c3QgYmUgdGhlIGxhc3Qg b2YgYW55IGVsaWRlZCBub2RlcyBjb3JyZXNwb25kaW5nCisgKiB0byAqcGxhbjsgb24gZXhpdCwg dGhpcyB3aWxsIHN0aWxsIGJlIHRydWUsIGJ1dCAqcGxhbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQu CisgKgorICogVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIGRlc2NlbmQgdGhyb3VnaCBlbGlk ZWQgbm9kZXMgaXMgdGhhdCBhIHNpbmdsZQorICogam9pbiB0cmVlIGNhbid0IGNyb3NzIHRocm91 Z2ggYW55IHNvcnQgb2YgZWxpZGVkIG5vZGU6IHN1YnF1ZXJpZXMgYXJlCisgKiBwbGFubmVkIHNl cGFyYXRlbHksIGFuZCBwbGFubmluZyBpbnNpZGUgYW4gQXBwZW5kIG9yIE1lcmdlQXBwZW5kIGlz CisgKiBzZXBhcmF0ZSBmcm9tIHBsYW5uaW5nIG91dHNpZGUgb2YgaXQuCisgKgorICogVGhlIHJl dHVybiB2YWx1ZSBpcyB0cnVlIGlmIHdlIGRlc2NlbmQgdGhyb3VnaCBhIG5vZGUgdGhhdCB3ZSBi ZWxpZXZlIGlzCisgKiBtYWtpbmcgb25lIHNpZGUgb2YgYSBzZW1pam9pbiB1bmlxdWUsIGFuZCBv dGhlcndpc2UgZmFsc2UuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2Rlc2NlbmRfYW55X3VuaXF1 ZShQbGFubmVkU3RtdCAqcHN0bXQsIFBsYW4gKipwbGFuLAorCQkJCQkJRWxpZGVkTm9kZSAqKmVs aWRlZF9ub2RlKQoreworCWJvb2wJCWRlc2NlbmQgPSBmYWxzZTsKKwlib29sCQlzanVuaXF1ZSA9 IGZhbHNlOworCisJaWYgKCplbGlkZWRfbm9kZSAhPSBOVUxMKQorCQlyZXR1cm4gc2p1bmlxdWU7 CisKKwlpZiAoSXNBKCpwbGFuLCBVbmlxdWUpKQorCXsKKwkJZGVzY2VuZCA9IHRydWU7CisJCXNq dW5pcXVlID0gdHJ1ZTsKKwl9CisJZWxzZSBpZiAoSXNBKCpwbGFuLCBBZ2cpKQorCXsKKwkJLyoK KwkJICogSWYgdGhpcyBpcyBhIHNpbXBsZSBBZ2cgbm9kZSwgdGhlbiBhc3N1bWUgaXQncyBoZXJl IHRvIGltcGxlbWVudAorCQkgKiBzZW1pam9pbiB1bmlxdWVuZXNzLiBPdGhlcndpc2UsIGFzc3Vt ZSBpdCdzIGNvbXBsZXRpbmcgYW4gZWFnZXIKKwkJICogYWdncmVnYXRpb24gb3IgcGFydGl0aW9u d2lzZSBhZ2dyZWdhdGlvbiBvcGVyYXRpb24gdGhhdCBiZWdhbiBhdCBhCisJCSAqIGhpZ2hlciBs ZXZlbCBvZiB0aGUgcGxhbiB0cmVlLgorCQkgKgorCQkgKiBYWFguIEkgc3VzcGVjdCB0aGlzIGxv Z2ljIGRvZXMgbm90IGNvdmVyIGFsbCBjYXNlczogY291bGRuJ3QgU0oKKwkJICogdW5pcXVlbmVz cyBiZSBpbXBsZW1lbnRlZCBpbiB0d28gc3RlcHMgd2l0aCBhbiBpbnRlcm1lZGlhdGUgR2F0aGVy PworCQkgKi8KKwkJZGVzY2VuZCA9IHRydWU7CisJCXNqdW5pcXVlID0gKCgoQWdnICopICpwbGFu KS0+YWdnc3BsaXQgPT0gQUdHU1BMSVRfU0lNUExFKTsKKwl9CisKKwlpZiAoZGVzY2VuZCkKKwl7 CisJCSplbGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKworCQlp ZiAoKmVsaWRlZF9ub2RlID09IE5VTEwgJiYgaXNfc29ydGluZ19wbGFuKCpwbGFuKSkKKwkJCSpl bGlkZWRfbm9kZSA9IHBncGFfZGVzY2VuZF9ub2RlKHBzdG10LCBwbGFuKTsKKwl9CisKKwlyZXR1 cm4gc2p1bmlxdWU7Cit9CisKKy8qCisgKiBJcyB0aGlzIGEgUmVzdWx0IG5vZGUgdGhhdCBoYXMg YSBjaGlsZD8KKyAqLworc3RhdGljIGJvb2wKK2lzX3Jlc3VsdF9ub2RlX3dpdGhfY2hpbGQoUGxh biAqcGxhbikKK3sKKwlyZXR1cm4gSXNBKHBsYW4sIFJlc3VsdCkgJiYgcGxhbi0+bGVmdHRyZWUg IT0gTlVMTDsKK30KKworLyoKKyAqIElzIHRoaXMgYSBQbGFuIG5vZGUgd2hvc2UgcHVycG9zZSBp cyBwdXQgdGhlIGRhdGEgaW4gYSBjZXJ0YWluIG9yZGVyPworICovCitzdGF0aWMgYm9vbAoraXNf c29ydGluZ19wbGFuKFBsYW4gKnBsYW4pCit7CisJcmV0dXJuIElzQShwbGFuLCBTb3J0KSB8fCBJ c0EocGxhbiwgSW5jcmVtZW50YWxTb3J0KTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9qb2luLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfam9pbi5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZGM3Mjk4NmE3MAotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKQEAgLTAs MCArMSwxMDUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHBncGFfam9pbi5oCisgKgkg IGFuYWx5c2lzIG9mIGpvaW5zIGluIFBsYW4gdHJlZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9qb2luLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2lmbmRlZiBQR1BBX0pPSU5fSAorI2RlZmluZSBQR1BBX0pPSU5fSAorCisjaW5jbHVk ZSAibm9kZXMvcGxhbm5vZGVzLmgiCisKK3R5cGVkZWYgc3RydWN0IHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBwZ3BhX2pv aW5fdW5yb2xsZXIgcGdwYV9qb2luX3Vucm9sbGVyOwordHlwZWRlZiBzdHJ1Y3QgcGdwYV91bnJv bGxlZF9qb2luIHBncGFfdW5yb2xsZWRfam9pbjsKKworLyoKKyAqIEFsdGhvdWdoIHRoZXJlIGFy ZSB0aHJlZSBtYWluIGpvaW4gc3RyYXRlZ2llcywgd2UgdHJ5IHRvIGNsYXNzaWZ5IHRoaW5ncwor ICogbW9yZSBwcmVjaXNlbHkgaGVyZTogbWVyZ2Ugam9pbnMgaGF2ZSB0aGUgb3B0aW9uIG9mIHVz aW5nIG1hdGVyaWFsaXphdGlvbgorICogb24gdGhlIGlubmVyIHNpZGUsIGFuZCBuZXN0ZWQgbG9v cHMgY2FuIHVzZSBlaXRoZXIgbWF0ZXJpYWxpemF0aW9uIG9yCisgKiBtZW1vaXphdGlvbi4KKyAq LwordHlwZWRlZiBlbnVtCit7CisJSlNUUkFUX01FUkdFX0pPSU5fUExBSU4gPSAwLAorCUpTVFJB VF9NRVJHRV9KT0lOX01BVEVSSUFMSVpFLAorCUpTVFJBVF9ORVNURURfTE9PUF9QTEFJTiwKKwlK U1RSQVRfTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUsCisJSlNUUkFUX05FU1RFRF9MT09QX01FTU9J WkUsCisJSlNUUkFUX0hBU0hfSk9JTgorCS8qIHVwZGF0ZSBOVU1fUEdQQV9KT0lOX1NUUkFURUdZ IGlmIHlvdSBhZGQgYW55dGhpbmcgaGVyZSAqLworfSBwZ3BhX2pvaW5fc3RyYXRlZ3k7CisKKyNk ZWZpbmUgTlVNX1BHUEFfSk9JTl9TVFJBVEVHWQkJKChpbnQpIEpTVFJBVF9IQVNIX0pPSU4gKyAx KQorCisvKgorICogSW4gYW4gb3V0ZXItZGVlcCBqb2luIHRyZWUsIGV2ZXJ5IG1lbWJlciBvZiBh biB1bnJvbGxlZCBqb2luIHdpbGwgYmUgYSBzY2FuLAorICogYnV0IGpvaW4gdHJlZXMgd2l0aCBv dGhlciBzaGFwZXMgY2FuIGNvbnRhaW4gdW5yb2xsZWQgam9pbnMuCisgKgorICogVGhlIHBsYW4g bm9kZSB3ZSBzdG9yZSBoZXJlIHdpbGwgYmUgdGhlIGlubmVyIG9yIG91dGVyIGNoaWxkIG9mIHRo ZSBqb2luCisgKiBub2RlLCBhcyBhcHByb3ByaWF0ZSwgZXhjZXB0IHRoYXQgd2UgbG9vayB0aHJv dWdoIHN1Ym5vZGVzIHRoYXQgd2UgcmVnYXJkIGFzCisgKiBwYXJ0IG9mIHRoZSBqb2luIG1ldGhv ZCBpdHNlbGYuIEZvciBpbnN0YW5jZSwgZm9yIGEgTmVzdGVkIExvb3AgdGhhdAorICogbWF0ZXJp YWxpemVzIHRoZSBpbm5lciBpbnB1dCwgd2UnbGwgc3RvcmUgdGhlIGNoaWxkIG9mIHRoZSBNYXRl cmlhbGl6ZSBub2RlLAorICogbm90IHRoZSBNYXRlcmlhbGl6ZSBub2RlIGl0c2VsZi4KKyAqCisg KiBJZiBzZXRyZWZzIHByb2Nlc3NpbmcgZWxpZGVkIG9uZSBvciBtb3JlIG5vZGVzIGZyb20gdGhl IHBsYW4gdHJlZSwgdGhlbgorICogd2UnbGwgc3RvcmUgZGV0YWlscyBhYm91dCB0aGUgdG9wbW9z dCBvZiB0aG9zZSBpbiBlbGlkZWRfbm9kZTsgb3RoZXJ3aXNlLAorICogaXQgd2lsbCBiZSBOVUxM LgorICoKKyAqIEV4YWN0bHkgb25lIG9mIHNjYW4gYW5kIHVucm9sbGVkX2pvaW4gd2lsbCBiZSBu b24tTlVMTC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQbGFuCSAgICpwbGFuOworCUVsaWRl ZE5vZGUgKmVsaWRlZF9ub2RlOworCXN0cnVjdCBwZ3BhX3NjYW4gKnNjYW47CisJcGdwYV91bnJv bGxlZF9qb2luICp1bnJvbGxlZF9qb2luOworfSBwZ3BhX2pvaW5fbWVtYmVyOworCisvKgorICog V2UgY29udmVydCBvdXRlci1kZWVwIGpvaW4gdHJlZXMgdG8gYSBmbGF0IHN0cnVjdHVyZTsgdGhh dCBpcywgKChBIEpPSU4gQikKKyAqIEpPSU4gQykgSk9JTiBEIGdldHMgY29udmVydGVkIHRvIG91 dGVyID0gQSwgaW5uZXIgPSA8QiBDIEQ+LiAgV2hlbiBqb2lucworICogYXJlbid0IG91dGVyLWRl ZXAsIHN1YnN0cnVjdHVyZSBpcyByZXF1aXJlZCwgZS5nLiAoQSBKT0lOIEIpIEpPSU4gKEMgSk9J TiBEKQorICogaXMgcmVwcmVzZW50ZWQgYXMgb3V0ZXIgPSBBLCBpbm5lciA9IDxCIFg+LCB3aGVy ZSBYIGlzIGEgcGdwYV91bnJvbGxlZF9qb2luCisgKiBjb3ZlcmluZyBDLUQuCisgKi8KK3N0cnVj dCBwZ3BhX3Vucm9sbGVkX2pvaW4KK3sKKwkvKiBPdXRlcm1vc3QgbWVtYmVyOyBtdXN0IG5vdCBp dHNlbGYgYmUgYW4gdW5yb2xsZWQgam9pbi4gKi8KKwlwZ3BhX2pvaW5fbWVtYmVyIG91dGVyOwor CisJLyogTnVtYmVyIG9mIGlubmVyIG1lbWJlcnMuIExlbmd0aCBvZiB0aGUgc3RyYXRlZ3kgYW5k IGlubmVyIGFycmF5cy4gKi8KKwl1bnNpZ25lZAluaW5uZXI7CisKKwkvKiBBcnJheSBvZiBzdHJh dGVnaWVzLCBvbmUgcGVyIG5vbi1vdXRlcm1vc3QgbWVtYmVyLiAqLworCXBncGFfam9pbl9zdHJh dGVneSAqc3RyYXRlZ3k7CisKKwkvKiBBcnJheSBvZiBtZW1iZXJzLCBleGNsdWRpbmcgdGhlIG91 dGVybW9zdC4gRGVlcGVzdCBmaXJzdC4gKi8KKwlwZ3BhX2pvaW5fbWVtYmVyICppbm5lcjsKK307 CisKKy8qCisgKiBEb2VzIHRoaXMgcGxhbiBub2RlIGluaGVyaXQgZnJvbSBKb2luPworICovCitz dGF0aWMgaW5saW5lIGJvb2wKK3BncGFfaXNfam9pbihQbGFuICpwbGFuKQoreworCXJldHVybiBJ c0EocGxhbiwgTmVzdExvb3ApIHx8IElzQShwbGFuLCBNZXJnZUpvaW4pIHx8IElzQShwbGFuLCBI YXNoSm9pbik7Cit9CisKK2V4dGVybiBwZ3BhX2pvaW5fdW5yb2xsZXIgKnBncGFfY3JlYXRlX2pv aW5fdW5yb2xsZXIodm9pZCk7CitleHRlcm4gdm9pZCBwZ3BhX3Vucm9sbF9qb2luKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFuICpwbGFuLCBib29sIGJlbmVh dGhfYW55X2dhdGhlciwKKwkJCQkJCQkgcGdwYV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVy LAorCQkJCQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKipvdXRlcl9qb2luX3Vucm9sbGVyLAorCQkJ CQkJCSBwZ3BhX2pvaW5fdW5yb2xsZXIgKippbm5lcl9qb2luX3Vucm9sbGVyKTsKK2V4dGVybiBw Z3BhX3Vucm9sbGVkX2pvaW4gKnBncGFfYnVpbGRfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fs a2VyX2NvbnRleHQgKndhbGtlciwKKwkJCQkJCQkJCQkJCQlwZ3BhX2pvaW5fdW5yb2xsZXIgKmpv aW5fdW5yb2xsZXIpOworZXh0ZXJuIHZvaWQgcGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIocGdw YV9qb2luX3Vucm9sbGVyICpqb2luX3Vucm9sbGVyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9j b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMgYi9jb250cmliL3BnX3BsYW5fYWR2 aWNlL3BncGFfb3V0cHV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu Ljg5YTY3NWZmOTNlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9w Z3BhX291dHB1dC5jCkBAIC0wLDAgKzEsNjI4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiBwZ3BhX291dHB1dC5jCisgKgkgIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQgZnJvbSB0aGUgcmVz dWx0cyBvZiBhIHBsYW4gdHJlZSB3YWxrCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisjaW5j bHVkZSAicGdwYV9zY2FuLmgiCisKKyNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5j bHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCisj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisKKy8qCisgKiBDb250ZXh0IG9iamVjdCBmb3Ig dGV4dHVhbCBhZHZpY2UgZ2VuZXJhdGlvbi4KKyAqCisgKiBydF9pZGVudGlmaWVycyBpcyB0aGUg Y2FsbGVyLXByb3ZpZGVkIGFycmF5IG9mIHJhbmdlIHRhYmxlIGlkZW50aWZpZXJzLgorICogU2Vl IHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHBncGFfaWRlbnRpZmllci5jIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICogYnVmIGlzIHRoZSBjYWxsZXItcHJvdmlkZWQgb3V0cHV0IGJ1ZmZlci4K KyAqCisgKiB3cmFwX2NvbHVtbiBpcyB0aGUgd3JhcCBjb2x1bW4sIHNvIHRoYXQgd2UgZG9uJ3Qg Y3JlYXRlIG91dHB1dCB0aGF0IGlzCisgKiB0b28gd2lkZS4gU2VlIHBncGFfbWF5YmVfbGluZWJy ZWFrKCkgYW5kIGNvbW1lbnRzIGluIHBncGFfb3V0cHV0X2FkdmljZS4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgcGdwYV9vdXRwdXRfY29udGV4dAoreworCWNvbnN0IGNoYXIgKipyaWRfc3RyaW5nczsK KwlTdHJpbmdJbmZvCWJ1ZjsKKwlpbnQJCQl3cmFwX2NvbHVtbjsKK30gcGdwYV9vdXRwdXRfY29u dGV4dDsKKworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbihwZ3BhX291dHB1 dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3Vucm9sbGVkX2pvaW4gKmpvaW4p Oworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9vdXRwdXRfY29udGV4 dCAqY29udGV4dCwKKwkJCQkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlcik7CitzdGF0aWMg dm9pZCBwZ3BhX291dHB1dF9zY2FuX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRl eHQsCisJCQkJCQkJCQkgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwKKwkJCQkJCQkJCSAg TGlzdCAqc2NhbnMpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfYml0bWFwX2luZGV4X2RldGFp bHMocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCQkJCQkJIFBsYW4gKnBsYW4p Oworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcmVsYXRpb25fbmFtZShwZ3BhX291dHB1dF9jb250 ZXh0ICpjb250ZXh0LCBPaWQgcmVsaWQpOworc3RhdGljIHZvaWQgcGdwYV9vdXRwdXRfcXVlcnlf ZmVhdHVyZShwZ3BhX291dHB1dF9jb250ZXh0ICpjb250ZXh0LAorCQkJCQkJCQkJICBwZ3BhX3Fm X3R5cGUgdHlwZSwKKwkJCQkJCQkJCSAgTGlzdCAqcXVlcnlfZmVhdHVyZXMpOworc3RhdGljIHZv aWQgcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRl eHQsCisJCQkJCQkJCQkJY2hhciAqc3RyYXRlZ3ksCisJCQkJCQkJCQkJTGlzdCAqcmVsaWRfc2V0 cyk7CitzdGF0aWMgdm9pZCBwZ3BhX291dHB1dF9ub19nYXRoZXIocGdwYV9vdXRwdXRfY29udGV4 dCAqY29udGV4dCwKKwkJCQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgdm9pZCBw Z3BhX291dHB1dF9yZWxhdGlvbnMocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwgU3RyaW5n SW5mbyBidWYsCisJCQkJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpOworCitzdGF0aWMgY2hhciAq cGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRlZ3kocGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5KTsK K3N0YXRpYyBjaGFyICpwZ3BhX2NzdHJpbmdfc2Nhbl9zdHJhdGVneShwZ3BhX3NjYW5fc3RyYXRl Z3kgc3RyYXRlZ3kpOworc3RhdGljIGNoYXIgKnBncGFfY3N0cmluZ19xdWVyeV9mZWF0dXJlX3R5 cGUocGdwYV9xZl90eXBlIHR5cGUpOworCitzdGF0aWMgdm9pZCBwZ3BhX21heWJlX2xpbmVicmVh ayhTdHJpbmdJbmZvIGJ1ZiwgaW50IHdyYXBfY29sdW1uKTsKKworLyoKKyAqIEFwcGVuZCBxdWVy eSBhZHZpY2UgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4KKyAqCisgKiBCZWZvcmUgY2FsbGluZyB0 aGlzIGZ1bmN0aW9uLCAnd2Fsa2VyJyBtdXN0IGJlIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZQor ICogbWFpbiBwbGFuIHRyZWUgYW5kIGFsbCBzdWJwbGFucyBmcm9tIHRoZSBQbGFubmVkU3RtdC4K KyAqCisgKiAncnRfaWRlbnRpZmllcnMnIGlzIGEgdGFibGUgb2YgdW5pcXVlIGlkZW50aWZpZXJz LCBvbmUgZm9yIGVhY2ggUlRJLgorICogU2VlIHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9w bGFubmVkX3N0bXQoKS4KKyAqCisgKiBSZXN1bHRzIHdpbGwgYmUgYXBwZW5kZWQgdG8gJ2J1Zicu CisgKi8KK3ZvaWQKK3BncGFfb3V0cHV0X2FkdmljZShTdHJpbmdJbmZvIGJ1ZiwgcGdwYV9wbGFu X3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVu dGlmaWVycykKK3sKKwlJbmRleAkJcnRhYmxlX2xlbmd0aCA9IGxpc3RfbGVuZ3RoKHdhbGtlci0+ cHN0bXQtPnJ0YWJsZSk7CisJTGlzdENlbGwgICAqbGM7CisJcGdwYV9vdXRwdXRfY29udGV4dCBj b250ZXh0OworCisJLyogQmFzaWMgaW5pdGlhbGl6YXRpb24uICovCisJbWVtc2V0KCZjb250ZXh0 LCAwLCBzaXplb2YocGdwYV9vdXRwdXRfY29udGV4dCkpOworCWNvbnRleHQuYnVmID0gYnVmOwor CisJLyoKKwkgKiBDb252ZXJ0IGlkZW50aWZpZXJzIHRvIHN0cmluZyBmb3JtLiBOb3RlIHRoYXQg dGhlIGxvb3AgdmFyaWFibGUgaGVyZSBpcworCSAqIG5vdCBhbiBSVEksIGJlY2F1c2UgUlRJcyBh cmUgMS1iYXNlZC4gU29tZSBSVElzIHdpbGwgaGF2ZSBubworCSAqIGlkZW50aWZpZXIsIGVpdGhl ciBiZWNhdXNlIHRoZSByZWxvcHRraW5kIGlzIFJURV9KT0lOIG9yIGJlY2F1c2UgdGhhdAorCSAq IHBvcnRpb24gb2YgdGhlIHF1ZXJ5IGRpZG4ndCBtYWtlIGl0IGludG8gdGhlIGZpbmFsIHBsYW4u CisJICovCisJY29udGV4dC5yaWRfc3RyaW5ncyA9IHBhbGxvYzBfYXJyYXkoY29uc3QgY2hhciAq LCBydGFibGVfbGVuZ3RoKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IHJ0YWJsZV9sZW5ndGg7ICsr aSkKKwkJaWYgKHJ0X2lkZW50aWZpZXJzW2ldLmFsaWFzX25hbWUgIT0gTlVMTCkKKwkJCWNvbnRl eHQucmlkX3N0cmluZ3NbaV0gPSBwZ3BhX2lkZW50aWZpZXJfc3RyaW5nKCZydF9pZGVudGlmaWVy c1tpXSk7CisKKwkvKgorCSAqIElmIHRoZSB1c2VyIGNob29zZXMgdG8gdXNlIEVYUExBSU4gKFBM QU5fQURWSUNFKSBpbiBhbiA4MC1jb2x1bW4gd2luZG93CisJICogZnJvbSBhIHBzcWwgY2xpZW50 IHdpdGggZGVmYXVsdCBzZXR0aW5ncywgcHNxbCB3aWxsIGFkZCBvbmUgc3BhY2UgdG8KKwkgKiB0 aGUgbGVmdCBvZiB0aGUgb3V0cHV0IGFuZCBFWFBMQUlOIHdpbGwgYWRkIHR3byBtb3JlIHRvIHRo ZSBsZWZ0IG9mIHRoZQorCSAqIGFkdmljZS4gVGh1cywgbGluZXMgb2YgbW9yZSB0aGFuIDc3IGNo YXJhY3RlcnMgd2lsbCB3cmFwLiBXZSBzZXQgdGhlCisJICogd3JhcCBsaW1pdCB0byA3NiBoZXJl IHNvIHRoYXQgdGhlIG91dHB1dCB3b24ndCByZWFjaCBhbGwgdGhlIHdheSB0byB0aGUKKwkgKiB2 ZXJ5IGxhc3QgY29sdW1uIG9mIHRoZSB0ZXJtaW5hbC4KKwkgKgorCSAqIE9mIGNvdXJzZSwgdGhp cyBpcyBmYWlybHkgYXJiaXRyYXJ5IHNldCBvZiBhc3N1bXB0aW9ucywgYW5kIG9uZSBjb3VsZAor CSAqIHdlbGwgbWFrZSBhbiBhcmd1bWVudCBmb3IgYSBkaWZmZXJlbnQgd3JhcCBsaW1pdCwgb3Ig Zm9yIGEgY29uZmlndXJhYmxlCisJICogb25lLgorCSAqLworCWNvbnRleHQud3JhcF9jb2x1bW4g PSA3NjsKKworCS8qCisJICogRWFjaCBwaWVjZSBvZiBKT0lOX09SREVSKCkgYWR2aWNlIGZ1bGx5 IGRlc2NyaWJlcyB0aGUgam9pbiBvcmRlciBmb3IgYQorCSAqIGEgc2luZ2xlIHVucm9sbGVkIGpv aW4uIE1lcmdpbmcgaXMgbm90IHBlcm1pdHRlZCwgYmVjYXVzZSB0aGF0IHdvdWxkCisJICogY2hh bmdlIHRoZSBtZWFuaW5nLCBlLmcuIFNFUV9TQ0FOKGEgYiBjIGQpIG1lYW5zIHNpbXBseSB0aGF0 IHNlcXVlbnRpYWwKKwkgKiBzY2FucyBzaG91bGQgYmUgdXNlZCBmb3IgYWxsIG9mIHRob3NlIHJl bGF0aW9ucywgYW5kIGlzIHRodXMgZXF1aXZhbGVudAorCSAqIHRvIFNFUV9TQ0FOKGEgYikgU0VR X1NDQU4oYyBkKSwgYnV0IEpPSU5fT1JERVIoYSBiIGMgZCkgbWVhbnMgdGhhdCAiYSIKKwkgKiBp cyB0aGUgZHJpdmluZyB0YWJsZSB3aGljaCBpcyB0aGVuIGpvaW5lZCB0byAiYiIgdGhlbiAiYyIg dGhlbiAiZCIsCisJICogd2hpY2ggaXMgdG90YWxseSBkaWZmZXJlbnQgZnJvbSBKT0lOX09SREVS KGEgYikgYW5kIEpPSU5fT1JERVIoYyBkKS4KKwkgKi8KKwlmb3JlYWNoKGxjLCB3YWxrZXItPnRv cGxldmVsX3Vucm9sbGVkX2pvaW5zKQorCXsKKwkJcGdwYV91bnJvbGxlZF9qb2luICp1am9pbiA9 IGxmaXJzdChsYyk7CisKKwkJaWYgKGJ1Zi0+bGVuID4gMCkKKwkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGJ1ZiwgJ1xuJyk7CisJCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC5idWYsICJKT0lOX09S REVSKCIpOworCQlwZ3BhX291dHB1dF91bnJvbGxlZF9qb2luKCZjb250ZXh0LCB1am9pbik7CisJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQuYnVmLCAnKScpOworCQlwZ3BhX21heWJlX2xp bmVicmVhayhjb250ZXh0LmJ1ZiwgY29udGV4dC53cmFwX2NvbHVtbik7CisJfQorCisJLyogRW1p dCBqb2luIHN0cmF0ZWd5IGFkdmljZS4gKi8KKwlmb3IgKGludCBzID0gMDsgcyA8IE5VTV9QR1BB X0pPSU5fU1RSQVRFR1k7ICsrcykKKwl7CisJCWNoYXIJICAgKnN0cmF0ZWd5ID0gcGdwYV9jc3Ry aW5nX2pvaW5fc3RyYXRlZ3kocyk7CisKKwkJcGdwYV9vdXRwdXRfc2ltcGxlX3N0cmF0ZWd5KCZj b250ZXh0LAorCQkJCQkJCQkJc3RyYXRlZ3ksCisJCQkJCQkJCQl3YWxrZXItPmpvaW5fc3RyYXRl Z2llc1tzXSk7CisJfQorCisJLyoKKwkgKiBFbWl0IHNjYW4gc3RyYXRlZ3kgYWR2aWNlIChidXQg bm90IGZvciBvcmRpbmFyeSBzY2Fucywgd2hpY2ggYXJlCisJICogZGVmaW5pdGlvbmFsbHkgdW5p bnRlcmVzdGluZykuCisJICovCisJZm9yIChpbnQgYyA9IDA7IGMgPCBOVU1fUEdQQV9TQ0FOX1NU UkFURUdZOyArK2MpCisJCWlmIChjICE9IFBHUEFfU0NBTl9PUkRJTkFSWSkKKwkJCXBncGFfb3V0 cHV0X3NjYW5fc3RyYXRlZ3koJmNvbnRleHQsIGMsIHdhbGtlci0+c2NhbnNbY10pOworCisJLyog RW1pdCBxdWVyeSBmZWF0dXJlIGFkdmljZS4gKi8KKwlmb3IgKGludCB0ID0gMDsgdCA8IE5VTV9Q R1BBX1FGX1RZUEVTOyArK3QpCisJCXBncGFfb3V0cHV0X3F1ZXJ5X2ZlYXR1cmUoJmNvbnRleHQs IHQsIHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbdF0pOworCisJLyogRW1pdCBOT19HQVRIRVIgYWR2 aWNlLiAqLworCXBncGFfb3V0cHV0X25vX2dhdGhlcigmY29udGV4dCwgd2Fsa2VyLT5ub19nYXRo ZXJfc2NhbnMpOworfQorCisvKgorICogT3V0cHV0IHRoZSBtZW1iZXJzIG9mIGFuIHVucm9sbGVk IGpvaW4sIGZpcnN0IHRoZSBvdXRlcm1vc3QgbWVtYmVyLCBhbmQKKyAqIHRoZW4gdGhlIGlubmVy IG1lbWJlcnMgb25lIGJ5IG9uZSwgYXMgcGFydCBvZiBKT0lOX09SREVSKCkgYWR2aWNlLgorICov CitzdGF0aWMgdm9pZAorcGdwYV9vdXRwdXRfdW5yb2xsZWRfam9pbihwZ3BhX291dHB1dF9jb250 ZXh0ICpjb250ZXh0LAorCQkJCQkJICBwZ3BhX3Vucm9sbGVkX2pvaW4gKmpvaW4pCit7CisJcGdw YV9vdXRwdXRfam9pbl9tZW1iZXIoY29udGV4dCwgJmpvaW4tPm91dGVyKTsKKworCWZvciAoaW50 IGsgPSAwOyBrIDwgam9pbi0+bmlubmVyOyArK2spCisJeworCQlwZ3BhX2pvaW5fbWVtYmVyICpt ZW1iZXIgPSAmam9pbi0+aW5uZXJba107CisKKwkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4 dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNv bnRleHQtPmJ1ZiwgJyAnKTsKKwkJcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIoY29udGV4dCwgbWVt YmVyKTsKKwl9Cit9CisKKy8qCisgKiBPdXRwdXQgYSBzaW5nbGUgbWVtYmVyIG9mIGFuIHVucm9s bGVkIGpvaW4gYXMgcGFydCBvZiBKT0lOX09SREVSKCkgYWR2aWNlLgorICovCitzdGF0aWMgdm9p ZAorcGdwYV9vdXRwdXRfam9pbl9tZW1iZXIocGdwYV9vdXRwdXRfY29udGV4dCAqY29udGV4dCwK KwkJCQkJCXBncGFfam9pbl9tZW1iZXIgKm1lbWJlcikKK3sKKwlpZiAobWVtYmVyLT51bnJvbGxl ZF9qb2luICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYs ICcoJyk7CisJCXBncGFfb3V0cHV0X3Vucm9sbGVkX2pvaW4oY29udGV4dCwgbWVtYmVyLT51bnJv bGxlZF9qb2luKTsKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnKScpOwor CX0KKwllbHNlCisJeworCQlwZ3BhX3NjYW4gICpzY2FuID0gbWVtYmVyLT5zY2FuOworCisJCUFz c2VydChzY2FuICE9IE5VTEwpOworCQlpZiAoYm1zX21lbWJlcnNoaXAoc2Nhbi0+cmVsaWRzKSA9 PSBCTVNfU0lOR0xFVE9OKQorCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRl eHQtPmJ1Ziwgc2Nhbi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihjb250ZXh0LT5idWYsICd7Jyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4 dCwgY29udGV4dC0+YnVmLCBzY2FuLT5yZWxpZHMpOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIo Y29udGV4dC0+YnVmLCAnfScpOworCQl9CisJfQorfQorCisvKgorICogT3V0cHV0IGFkdmljZSBm b3IgYSBMaXN0IG9mIHBncGFfc2NhbiBvYmplY3RzLgorICoKKyAqIEFsbCB0aGUgc2NhbnMgbXVz dCB1c2UgdGhlIHN0cmF0ZWd5IHNwZWNpZmllZCBieSB0aGUgInN0cmF0ZWd5IiBhcmd1bWVudC4K KyAqLworc3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X3NjYW5fc3RyYXRlZ3kocGdwYV9vdXRwdXRf Y29udGV4dCAqY29udGV4dCwKKwkJCQkJCSAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LAor CQkJCQkJICBMaXN0ICpzY2FucykKK3sKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlpZiAoc2Nh bnMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQorCQlh cHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmluZ0lu Zm8oY29udGV4dC0+YnVmLCAiJXMoIiwKKwkJCQkJIHBncGFfY3N0cmluZ19zY2FuX3N0cmF0ZWd5 KHN0cmF0ZWd5KSk7CisKKwlmb3JlYWNoX3B0cihwZ3BhX3NjYW4sIHNjYW4sIHNjYW5zKQorCXsK KwkJUGxhbgkgICAqcGxhbiA9IHNjYW4tPnBsYW47CisKKwkJaWYgKGZpcnN0KQorCQkJZmlyc3Qg PSBmYWxzZTsKKwkJZWxzZQorCQl7CisJCQlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5i dWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJyAnKTsKKwkJfQorCisJCS8qIE91dHB1dCB0aGUgcmVsYXRpb24gaWRlbnRpZmll cnMuICovCisJCWlmIChibXNfbWVtYmVyc2hpcChzY2FuLT5yZWxpZHMpID09IEJNU19TSU5HTEVU T04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29udGV4dC0+YnVmLCBzY2Fu LT5yZWxpZHMpOworCQllbHNlCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQt PmJ1ZiwgJygnKTsKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5i dWYsIHNjYW4tPnJlbGlkcyk7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYs ICcpJyk7CisJCX0KKworCQkvKiBGb3Igc2NhbnMgaW52b2x2aW5nIGluZGV4ZXMsIG91dHB1dCBp bmRleCBpbmZvcm1hdGlvbi4gKi8KKwkJaWYgKHN0cmF0ZWd5ID09IFBHUEFfU0NBTl9JTkRFWCkK KwkJeworCQkJQXNzZXJ0KElzQShwbGFuLCBJbmRleFNjYW4pKTsKKwkJCXBncGFfbWF5YmVfbGlu ZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25f bmFtZShjb250ZXh0LCAoKEluZGV4U2NhbiAqKSBwbGFuKS0+aW5kZXhpZCk7CisJCX0KKwkJZWxz ZSBpZiAoc3RyYXRlZ3kgPT0gUEdQQV9TQ0FOX0lOREVYX09OTFkpCisJCXsKKwkJCUFzc2VydChJ c0EocGxhbiwgSW5kZXhPbmx5U2NhbikpOworCQkJcGdwYV9tYXliZV9saW5lYnJlYWsoY29udGV4 dC0+YnVmLCBjb250ZXh0LT53cmFwX2NvbHVtbik7CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihj b250ZXh0LT5idWYsICcgJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbl9uYW1lKGNvbnRleHQs CisJCQkJCQkJCQkgICgoSW5kZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5kZXhpZCk7CisJCX0KKwkJ ZWxzZSBpZiAoc3RyYXRlZ3kgPT0gUEdQQV9TQ0FOX0JJVE1BUF9IRUFQKQorCQl7CisJCQlwZ3Bh X21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJ CWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyAnKTsKKwkJCXBncGFfb3V0cHV0 X2JpdG1hcF9pbmRleF9kZXRhaWxzKGNvbnRleHQsIHBsYW4tPmxlZnR0cmVlKTsKKwkJfQorCX0K KworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwlwZ3BhX21heWJl X2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKK30KKworLyoK KyAqIE91dHB1dCBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBpbmRleCBvciBpbmRleGVzIHBvd2Vy IGEgQml0bWFwSGVhcFNjYW4uCisgKgorICogV2UgZW1pdCAmJihpMSBpMiBpMykgZm9yIGEgQml0 bWFwQW5kIGJldHdlZW4gaW5kZXhlcyBpMSwgaTIsIGFuZCBpMzsKKyAqIGFuZCBsaWtld2lzZSB8 fChpMSBpMiBpMykgZm9yIGEgc2ltaWxhciBCaXRtYXBPciBvcGVyYXRpb24uCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX291dHB1dF9iaXRtYXBfaW5kZXhfZGV0YWlscyhwZ3BhX291dHB1dF9jb250 ZXh0ICpjb250ZXh0LCBQbGFuICpwbGFuKQoreworCWNoYXIJICAgKm9wZXJhdG9yOworCUxpc3QJ ICAgKmJpdG1hcHBsYW5zOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlmIChJc0EocGxhbiwg Qml0bWFwSW5kZXhTY2FuKSkKKwl7CisJCUJpdG1hcEluZGV4U2NhbiAqYml0bWFwaW5kZXhzY2Fu ID0gKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuOworCisJCXBncGFfb3V0cHV0X3JlbGF0aW9uX25h bWUoY29udGV4dCwgYml0bWFwaW5kZXhzY2FuLT5pbmRleGlkKTsKKwkJcmV0dXJuOworCX0KKwor CWlmIChJc0EocGxhbiwgQml0bWFwT3IpKQorCXsKKwkJb3BlcmF0b3IgPSAifHwiOworCQliaXRt YXBwbGFucyA9ICgoQml0bWFwT3IgKikgcGxhbiktPmJpdG1hcHBsYW5zOworCX0KKwllbHNlIGlm IChJc0EocGxhbiwgQml0bWFwQW5kKSkKKwl7CisJCW9wZXJhdG9yID0gIiYmIjsKKwkJYml0bWFw cGxhbnMgPSAoKEJpdG1hcEFuZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJfQorCWVsc2UKKwkJ ZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcocGxh bikpOworCisJYXBwZW5kU3RyaW5nSW5mbyhjb250ZXh0LT5idWYsICIlcygiLCBvcGVyYXRvcik7 CisJZm9yZWFjaF9wdHIoUGxhbiwgY2hpbGRfcGxhbiwgYml0bWFwcGxhbnMpCisJeworCQlpZiAo Zmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOworCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGlu ZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAnICcpOworCQl9CisJCXBncGFfb3V0cHV0X2JpdG1h cF9pbmRleF9kZXRhaWxzKGNvbnRleHQsIGNoaWxkX3BsYW4pOworCX0KKwlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihjb250ZXh0LT5idWYsICcpJyk7Cit9CisKKy8qCisgKiBPdXRwdXQgYSBzY2hlbWEt cXVhbGlmaWVkIHJlbGF0aW9uIG5hbWUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9y ZWxhdGlvbl9uYW1lKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIE9pZCByZWxpZCkKK3sK KwlPaWQJCQluc3BvaWQgPSBnZXRfcmVsX25hbWVzcGFjZShyZWxpZCk7CisJY2hhcgkgICAqcmVs bmFtZXNwYWNlID0gZ2V0X25hbWVzcGFjZV9uYW1lX29yX3RlbXAobnNwb2lkKTsKKwljaGFyCSAg ICpyZWxuYW1lID0gZ2V0X3JlbF9uYW1lKHJlbGlkKTsKKworCWFwcGVuZFN0cmluZ0luZm9TdHJp bmcoY29udGV4dC0+YnVmLCBxdW90ZV9pZGVudGlmaWVyKHJlbG5hbWVzcGFjZSkpOworCWFwcGVu ZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJy4nKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGNvbnRleHQtPmJ1ZiwgcXVvdGVfaWRlbnRpZmllcihyZWxuYW1lKSk7Cit9CisKKy8qCisg KiBPdXRwdXQgYWR2aWNlIGZvciBhIExpc3Qgb2YgcGdwYV9xdWVyeV9mZWF0dXJlIG9iamVjdHMu CisgKgorICogQWxsIGZlYXR1cmVzIG11c3QgYmUgb2YgdGhlIHR5cGUgc3BlY2lmaWVkIGJ5IHRo ZSAidHlwZSIgYXJndW1lbnQuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9xdWVyeV9m ZWF0dXJlKHBncGFfb3V0cHV0X2NvbnRleHQgKmNvbnRleHQsIHBncGFfcWZfdHlwZSB0eXBlLAor CQkJCQkJICBMaXN0ICpxdWVyeV9mZWF0dXJlcykKK3sKKwlib29sCQlmaXJzdCA9IHRydWU7CisK KwlpZiAocXVlcnlfZmVhdHVyZXMgPT0gTklMKQorCQlyZXR1cm47CisKKwlpZiAoY29udGV4dC0+ YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihjb250ZXh0LT5idWYsICdcbicp OworCWFwcGVuZFN0cmluZ0luZm8oY29udGV4dC0+YnVmLCAiJXMoIiwKKwkJCQkJIHBncGFfY3N0 cmluZ19xdWVyeV9mZWF0dXJlX3R5cGUodHlwZSkpOworCisJZm9yZWFjaF9wdHIocGdwYV9xdWVy eV9mZWF0dXJlLCBxZiwgcXVlcnlfZmVhdHVyZXMpCisJeworCQlpZiAoZmlyc3QpCisJCQlmaXJz dCA9IGZhbHNlOworCQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQt PmJ1ZiwgY29udGV4dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29u dGV4dC0+YnVmLCAnICcpOworCQl9CisKKwkJaWYgKGJtc19tZW1iZXJzaGlwKHFmLT5yZWxpZHMp ID09IEJNU19TSU5HTEVUT04pCisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4dCwgY29u dGV4dC0+YnVmLCBxZi0+cmVsaWRzKTsKKwkJZWxzZQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihjb250ZXh0LT5idWYsICcoJyk7CisJCQlwZ3BhX291dHB1dF9yZWxhdGlvbnMoY29udGV4 dCwgY29udGV4dC0+YnVmLCBxZi0+cmVsaWRzKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNv bnRleHQtPmJ1ZiwgJyknKTsKKwkJfQorCX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRl eHQtPmJ1ZiwgJyknKTsKKwlwZ3BhX21heWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRl eHQtPndyYXBfY29sdW1uKTsKK30KKworLyoKKyAqIE91dHB1dCAic2ltcGxlIiBhZHZpY2UgZm9y IGEgTGlzdCBvZiBCaXRtYXBzZXQgb2JqZWN0cyBlYWNoIG9mIHdoaWNoCisgKiBjb250YWlucyBv bmUgb3IgbW9yZSBSVElzLgorICoKKyAqIEJ5IHNpbXBsZSwgd2UganVzdCBtZWFuIHRoYXQgdGhl IGFkdmljZSBlbWl0dGVkIGZvbGxvd3MgdGhlIG1vc3QKKyAqIHN0cmFpZ2h0Zm9yd2FyZCBwYXR0 ZXJuOiB0aGUgc3RyYXRlZ3kgbmFtZSwgZm9sbG93ZWQgYnkgYSBsaXN0IG9mIGl0ZW1zCisgKiBz ZXBhcmF0ZWQgYnkgc3BhY2VzIGFuZCBzdXJyb3VuZGVkIGJ5IHBhcmVudGhlc2VzLiBJbmRpdmlk dWFsIGl0ZW1zIGluCisgKiB0aGUgbGlzdCBhcmUgYSBzaW5nbGUgcmVsYXRpb24gaWRlbnRpZmll ciBmb3IgYSBCaXRtYXBzZXQgdGhhdCBjb250YWlucworICoganVzdCBvbmUgbWVtYmVyLCBvciBh IHN1Yi1saXN0IGFnYWluIHNlcGFyYXRlZCBieSBzcGFjZXMgYW5kIHN1cnJvdW5kZWQKKyAqIGJ5 IHBhcmVudGhlc2VzIGZvciBhIEJpdG1hcHNldCB3aXRoIG11bHRpcGxlIG1lbWJlcnMuIEJpdG1h cHNldHMgd2l0aAorICogbm8gbWVtYmVycyBwcm9iYWJseSBzaG91bGRuJ3Qgb2NjdXIgaGVyZSwg YnV0IGlmIHRoZXkgZG8gdGhleSdsbCBiZQorICogcmVuZGVyZWQgYXMgYW4gZW1wdHkgc3ViLWxp c3QuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9zaW1wbGVfc3RyYXRlZ3kocGdwYV9v dXRwdXRfY29udGV4dCAqY29udGV4dCwgY2hhciAqc3RyYXRlZ3ksCisJCQkJCQkJTGlzdCAqcmVs aWRfc2V0cykKK3sKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwlpZiAocmVsaWRfc2V0cyA9PSBO SUwpCisJCXJldHVybjsKKworCWlmIChjb250ZXh0LT5idWYtPmxlbiA+IDApCisJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJ1xuJyk7CisJYXBwZW5kU3RyaW5nSW5mbyhjb250 ZXh0LT5idWYsICIlcygiLCBzdHJhdGVneSk7CisKKwlmb3JlYWNoX25vZGUoQml0bWFwc2V0LCBy ZWxpZHMsIHJlbGlkX3NldHMpCisJeworCQlpZiAoZmlyc3QpCisJCQlmaXJzdCA9IGZhbHNlOwor CQllbHNlCisJCXsKKwkJCXBncGFfbWF5YmVfbGluZWJyZWFrKGNvbnRleHQtPmJ1ZiwgY29udGV4 dC0+d3JhcF9jb2x1bW4pOworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn ICcpOworCQl9CisKKwkJaWYgKGJtc19tZW1iZXJzaGlwKHJlbGlkcykgPT0gQk1TX1NJTkdMRVRP TikKKwkJCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250ZXh0LT5idWYsIHJlbGlk cyk7CisJCWVsc2UKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn KCcpOworCQkJcGdwYV9vdXRwdXRfcmVsYXRpb25zKGNvbnRleHQsIGNvbnRleHQtPmJ1ZiwgcmVs aWRzKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwkJfQor CX0KKworCWFwcGVuZFN0cmluZ0luZm9DaGFyKGNvbnRleHQtPmJ1ZiwgJyknKTsKKwlwZ3BhX21h eWJlX2xpbmVicmVhayhjb250ZXh0LT5idWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKK30KKwor LyoKKyAqIE91dHB1dCBOT19HQVRIRVIgYWR2aWNlIGZvciBhbGwgcmVsYXRpb25zIG5vdCBhcHBl YXJpbmcgYmVuZWF0aCBhbnkKKyAqIEdhdGhlciBvciBHYXRoZXIgTWVyZ2Ugbm9kZS4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfb3V0cHV0X25vX2dhdGhlcihwZ3BhX291dHB1dF9jb250ZXh0ICpj b250ZXh0LCBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlpZiAocmVsaWRzID09IE5VTEwpCisJCXJl dHVybjsKKwlpZiAoY29udGV4dC0+YnVmLT5sZW4gPiAwKQorCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cihjb250ZXh0LT5idWYsICdcbicpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoY29udGV4dC0+ YnVmLCAiTk9fR0FUSEVSKCIpOworCXBncGFfb3V0cHV0X3JlbGF0aW9ucyhjb250ZXh0LCBjb250 ZXh0LT5idWYsIHJlbGlkcyk7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoY29udGV4dC0+YnVmLCAn KScpOworfQorCisvKgorICogT3V0cHV0IHRoZSBpZGVudGlmaWVycyBmb3IgZWFjaCBSVEkgaW4g dGhlIHByb3ZpZGVkIHNldC4KKyAqCisgKiBJZGVudGlmaWVycyBhcmUgc2VwYXJhdGVkIGJ5IHNw YWNlcywgYW5kIGEgbGluZSBicmVhayBpcyBwb3NzaWJsZSBhZnRlcgorICogZWFjaCBvbmUuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX291dHB1dF9yZWxhdGlvbnMocGdwYV9vdXRwdXRfY29udGV4 dCAqY29udGV4dCwgU3RyaW5nSW5mbyBidWYsCisJCQkJCSAgQml0bWFwc2V0ICpyZWxpZHMpCit7 CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJd2hpbGUgKChydGkg PSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBydGkpKSA+PSAwKQorCXsKKwkJY29uc3QgY2hhciAq cmlkX3N0cmluZyA9IGNvbnRleHQtPnJpZF9zdHJpbmdzW3J0aSAtIDFdOworCisJCWlmIChyaWRf c3RyaW5nID09IE5VTEwpCisJCQllbG9nKEVSUk9SLCAibm8gaWRlbnRpZmllciBmb3IgUlRJICVk IiwgcnRpKTsKKworCQlpZiAoZmlyc3QpCisJCXsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgcmlkX3N0cmluZyk7CisJCX0KKwkJZWxzZQorCQl7CisJ CQlwZ3BhX21heWJlX2xpbmVicmVhayhidWYsIGNvbnRleHQtPndyYXBfY29sdW1uKTsKKwkJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiICVzIiwgcmlkX3N0cmluZyk7CisJCX0KKwl9Cit9CisKKy8q CisgKiBHZXQgYSBDIHN0cmluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzcGVjaWZpZWQgam9p biBzdHJhdGVneS4KKyAqLworc3RhdGljIGNoYXIgKgorcGdwYV9jc3RyaW5nX2pvaW5fc3RyYXRl Z3kocGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5KQoreworCXN3aXRjaCAoc3RyYXRlZ3kpCisJ eworCQljYXNlIEpTVFJBVF9NRVJHRV9KT0lOX1BMQUlOOgorCQkJcmV0dXJuICJNRVJHRV9KT0lO X1BMQUlOIjsKKwkJY2FzZSBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTElaRToKKwkJCXJldHVy biAiTUVSR0VfSk9JTl9NQVRFUklBTElaRSI7CisJCWNhc2UgSlNUUkFUX05FU1RFRF9MT09QX1BM QUlOOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9QTEFJTiI7CisJCWNhc2UgSlNUUkFUX05FU1RF RF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuICJORVNURURfTE9PUF9NQVRFUklBTElaRSI7 CisJCWNhc2UgSlNUUkFUX05FU1RFRF9MT09QX01FTU9JWkU6CisJCQlyZXR1cm4gIk5FU1RFRF9M T09QX01FTU9JWkUiOworCQljYXNlIEpTVFJBVF9IQVNIX0pPSU46CisJCQlyZXR1cm4gIkhBU0hf Sk9JTiI7CisJfQorCisJcGdfdW5yZWFjaGFibGUoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoK KyAqIEdldCBhIEMgc3RyaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBzY2Fu IHN0cmF0ZWd5LgorICovCitzdGF0aWMgY2hhciAqCitwZ3BhX2NzdHJpbmdfc2Nhbl9zdHJhdGVn eShwZ3BhX3NjYW5fc3RyYXRlZ3kgc3RyYXRlZ3kpCit7CisJc3dpdGNoIChzdHJhdGVneSkKKwl7 CisJCWNhc2UgUEdQQV9TQ0FOX09SRElOQVJZOgorCQkJcmV0dXJuICJPUkRJTkFSWV9TQ0FOIjsK KwkJY2FzZSBQR1BBX1NDQU5fU0VROgorCQkJcmV0dXJuICJTRVFfU0NBTiI7CisJCWNhc2UgUEdQ QV9TQ0FOX0JJVE1BUF9IRUFQOgorCQkJcmV0dXJuICJCSVRNQVBfSEVBUF9TQ0FOIjsKKwkJY2Fz ZSBQR1BBX1NDQU5fRk9SRUlHTjoKKwkJCXJldHVybiAiRk9SRUlHTl9KT0lOIjsKKwkJY2FzZSBQ R1BBX1NDQU5fSU5ERVg6CisJCQlyZXR1cm4gIklOREVYX1NDQU4iOworCQljYXNlIFBHUEFfU0NB Tl9JTkRFWF9PTkxZOgorCQkJcmV0dXJuICJJTkRFWF9PTkxZX1NDQU4iOworCQljYXNlIFBHUEFf U0NBTl9QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuICJQQVJUSVRJT05XSVNFIjsKKwkJY2FzZSBQ R1BBX1NDQU5fVElEOgorCQkJcmV0dXJuICJUSURfU0NBTiI7CisJfQorCisJcGdfdW5yZWFjaGFi bGUoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEdldCBhIEMgc3RyaW5nIHRoYXQgY29y cmVzcG9uZHMgdG8gdGhlIHNwZWNpZmllZCBzY2FuIHN0cmF0ZWd5LgorICovCitzdGF0aWMgY2hh ciAqCitwZ3BhX2NzdHJpbmdfcXVlcnlfZmVhdHVyZV90eXBlKHBncGFfcWZfdHlwZSB0eXBlKQor eworCXN3aXRjaCAodHlwZSkKKwl7CisJCWNhc2UgUEdQQVFGX0dBVEhFUjoKKwkJCXJldHVybiAi R0FUSEVSIjsKKwkJY2FzZSBQR1BBUUZfR0FUSEVSX01FUkdFOgorCQkJcmV0dXJuICJHQVRIRVJf TUVSR0UiOworCQljYXNlIFBHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFOgorCQkJcmV0dXJuICJT RU1JSk9JTl9OT05fVU5JUVVFIjsKKwkJY2FzZSBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFOgorCQkJ cmV0dXJuICJTRU1JSk9JTl9VTklRVUUiOworCX0KKworCisJcGdfdW5yZWFjaGFibGUoKTsKKwly ZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEluc2VydCBhIGxpbmUgYnJlYWsgaW50byB0aGUgU3Ry aW5nSW5mb0RhdGEsIGlmIG5lZWRlZC4KKyAqCisgKiBJZiB3cmFwX2NvbHVtbiBpcyB6ZXJvIG9y IG5lZ2F0aXZlLCB0aGlzIGRvZXMgbm90aGluZy4gT3RoZXJ3aXNlLCB3ZQorICogY29uc2lkZXIg aW5zZXJ0aW5nIGEgbmV3bGluZS4gV2Ugb25seSBpbnNlcnQgYSBuZXdsaW5lIGlmIHRoZSBsZW5n dGggb2YKKyAqIHRoZSBsYXN0IGxpbmUgaW4gdGhlIGJ1ZmZlciBleGNlZWRzIHdyYXBfY29sdW1u LCBhbmQgbm90IGlmIHdlJ2QgYmUKKyAqIGluc2VydGluZyBhIG5ld2xpbmUgYXQgb3IgYmVmb3Jl IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgbGluZS4KKyAqCisgKiBUaGUgcG9zaXRpb24g YXQgd2hpY2ggdGhlIG5ld2xpbmUgaXMgaW5zZXJ0ZWQgaXMgc2ltcGx5IHdoZXJldmVyIHRoZQor ICogYnVmZmVyIGVuZGVkIHRoZSBsYXN0IHRpbWUgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkLiBJ biBvdGhlciB3b3JkcywKKyAqIHRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gY2FsbCB0aGlzIGZ1 bmN0aW9uIGV2ZXJ5IHRpbWUgd2UgcmVhY2ggYSBnb29kCisgKiBwbGFjZSBmb3IgYSBsaW5lIGJy ZWFrLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9tYXliZV9saW5lYnJlYWsoU3RyaW5nSW5mbyBi dWYsIGludCB3cmFwX2NvbHVtbikKK3sKKwljaGFyCSAgICp0cmFpbGluZ19ubDsKKwlpbnQJCQls aW5lX3N0YXJ0OworCWludAkJCXNhdmVfY3Vyc29yOworCisJLyogSWYgbGluZSB3cmFwcGluZyBp cyBkaXNhYmxlZCwgZXhpdCBxdWlja2x5LiAqLworCWlmICh3cmFwX2NvbHVtbiA8PSAwKQorCQly ZXR1cm47CisKKwkvKgorCSAqIFNldCBsaW5lX3N0YXJ0IHRvIHRoZSBieXRlIG9mZnNldCB3aXRo aW4gYnVmLT5kYXRhIG9mIHRoZSBmaXJzdAorCSAqIGNoYXJhY3RlciBvZiB0aGUgY3VycmVudCBs aW5lLCB3aGVyZSB0aGUgY3VycmVudCBsaW5lIG1lYW5zIHRoZSBsYXN0CisJICogb25lIGluIHRo ZSBidWZmZXIuIE5vdGUgdGhhdCBsaW5lX3N0YXJ0IGNvdWxkIGJlIHRoZSBvZmZzZXQgb2YgdGhl CisJICogdHJhaWxpbmcgJ1wwJyBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlciBp cyBhIGxpbmUgYnJlYWsuCisJICovCisJdHJhaWxpbmdfbmwgPSBzdHJyY2hyKGJ1Zi0+ZGF0YSwg J1xuJyk7CisJaWYgKHRyYWlsaW5nX25sID09IE5VTEwpCisJCWxpbmVfc3RhcnQgPSAwOworCWVs c2UKKwkJbGluZV9zdGFydCA9ICh0cmFpbGluZ19ubCAtIGJ1Zi0+ZGF0YSkgKyAxOworCisJLyoK KwkgKiBSZW1lbWJlciB0aGF0IHRoZSBjdXJyZW50IGVuZCBvZiB0aGUgYnVmZmVyIGlzIGEgcG90 ZW50aWFsIGxvY2F0aW9uIHRvCisJICogaW5zZXJ0IGEgbGluZSBicmVhayBvbiBhIGZ1dHVyZSBj YWxsIHRvIHRoaXMgZnVuY3Rpb24uCisJICovCisJc2F2ZV9jdXJzb3IgPSBidWYtPmN1cnNvcjsK KwlidWYtPmN1cnNvciA9IGJ1Zi0+bGVuOworCisJLyogSWYgd2UgaGF2ZW4ndCBwYXNzZWQgdGhl IHdyYXAgY29sdW1uLCB3ZSBkb24ndCBuZWVkIGEgbmV3bGluZS4gKi8KKwlpZiAoYnVmLT5sZW4g LSBsaW5lX3N0YXJ0IDw9IHdyYXBfY29sdW1uKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEl0IG9u bHkgbWFrZXMgc2Vuc2UgdG8gaW5zZXJ0IGEgbmV3bGluZSBhdCBhIHBvc2l0aW9uIGxhdGVyIHRo YW4gdGhlCisJICogYmVnaW5uaW5nIG9mIHRoZSBjdXJyZW50IGxpbmUuCisJICovCisJaWYgKGJ1 Zi0+Y3Vyc29yIDw9IGxpbmVfc3RhcnQpCisJCXJldHVybjsKKworCS8qIEluc2VydCBhIG5ld2xp bmUgYXQgdGhlIHByZXZpb3VzIGN1cnNvciBsb2NhdGlvbi4gKi8KKwllbmxhcmdlU3RyaW5nSW5m byhidWYsIDEpOworCW1lbW1vdmUoJmJ1Zi0+ZGF0YVtzYXZlX2N1cnNvcl0gKyAxLCAmYnVmLT5k YXRhW3NhdmVfY3Vyc29yXSwKKwkJCWJ1Zi0+bGVuIC0gc2F2ZV9jdXJzb3IpOworCSsrYnVmLT5j dXJzb3I7CisJYnVmLT5kYXRhWysrYnVmLT5sZW5dID0gJ1wwJzsKKwlidWYtPmRhdGFbc2F2ZV9j dXJzb3JdID0gJ1xuJzsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9vdXRwdXQuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9vdXRwdXQuaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDc0OTZkNzZmNTIKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfb3V0cHV0LmgKQEAgLTAsMCArMSwy MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9vdXRwdXQuaAorICoJICBwcm9k dWNlIHRleHR1YWwgb3V0cHV0IGZyb20gdGhlIHJlc3VsdHMgb2YgYSBwbGFuIHRyZWUgd2Fsawor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX291dHB1dC5j CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUEdQQV9PVVRQVVRfSAorI2Rl ZmluZSBQR1BBX09VVFBVVF9ICisKKyNpbmNsdWRlICJwZ3BhX2lkZW50aWZpZXIuaCIKKyNpbmNs dWRlICJwZ3BhX3dhbGtlci5oIgorCitleHRlcm4gdm9pZCBwZ3BhX291dHB1dF9hZHZpY2UoU3Ry aW5nSW5mbyBidWYsCisJCQkJCQkJICAgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIs CisJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycyk7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55IGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3BhcnNlci55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5iZjMzNzI0ZGUwMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV9wYXJzZXIueQpAQCAtMCwwICsxLDM0MCBAQAorJXsKKy8qCisgKiBQ YXJzZXIgZm9yIHBsYW4gYWR2aWNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMjUsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3BhcnNlci55CisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNp bmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImZtZ3IuaCIK KyNpbmNsdWRlICJub2Rlcy9taXNjbm9kZXMuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5o IgorI2luY2x1ZGUgInV0aWxzL2Zsb2F0LmgiCisKKyNpbmNsdWRlICJwZ3BhX2FzdC5oIgorI2lu Y2x1ZGUgInBncGFfcGFyc2VyLmgiCisKKy8qCisgKiBCaXNvbiBkb2Vzbid0IGFsbG9jYXRlIGFu eXRoaW5nIHRoYXQgbmVlZHMgdG8gbGl2ZSBhY3Jvc3MgcGFyc2VyIGNhbGxzLAorICogc28gd2Ug Y2FuIGVhc2lseSBoYXZlIGl0IHVzZSBwYWxsb2MgaW5zdGVhZCBvZiBtYWxsb2MuICBUaGlzIHBy ZXZlbnRzCisgKiBtZW1vcnkgbGVha3MgaWYgd2UgZXJyb3Igb3V0IGR1cmluZyBwYXJzaW5nLgor ICovCisjZGVmaW5lIFlZTUFMTE9DIHBhbGxvYworI2RlZmluZSBZWUZSRUUgICBwZnJlZQorJX0K KworLyogQklTT04gRGVjbGFyYXRpb25zICovCislcGFyc2UtcGFyYW0ge0xpc3QgKipyZXN1bHR9 CislcGFyc2UtcGFyYW0ge2NoYXIgKipwYXJzZV9lcnJvcl9tc2dfcH0KKyVwYXJzZS1wYXJhbSB7 eXlzY2FuX3QgeXlzY2FubmVyfQorJWxleC1wYXJhbSB7TGlzdCAqKnJlc3VsdH0KKyVsZXgtcGFy YW0ge2NoYXIgKipwYXJzZV9lcnJvcl9tc2dfcH0KKyVsZXgtcGFyYW0ge3l5c2Nhbl90IHl5c2Nh bm5lcn0KKyVwdXJlLXBhcnNlcgorJWV4cGVjdCAwCislbmFtZS1wcmVmaXg9InBncGFfeXkiCisK KyV1bmlvbgoreworCWNoYXIJICAgKnN0cjsKKwlpbnQJCQlpbnRlZ2VyOworCUxpc3QJICAgKmxp c3Q7CisJcGdwYV9hZHZpY2VfaXRlbSAqaXRlbTsKKwlwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdl dDsKKwlwZ3BhX2luZGV4X3RhcmdldCAqaXRhcmdldDsKK30KKyV0b2tlbiA8c3RyPiBUT0tfSURF TlQgVE9LX1RBR19KT0lOX09SREVSIFRPS19UQUdfQklUTUFQIFRPS19UQUdfSU5ERVgKKyV0b2tl biA8c3RyPiBUT0tfVEFHX1NJTVBMRSBUT0tfVEFHX0dFTkVSSUMKKyV0b2tlbiA8aW50ZWdlcj4g VE9LX0lOVEVHRVIKKyV0b2tlbiBUT0tfT1IgVE9LX0FORAorCisldHlwZSA8aW50ZWdlcj4gb3B0 X3JpX29jY3VycmVuY2UKKyV0eXBlIDxpdGVtPiBhZHZpY2VfaXRlbQorJXR5cGUgPGxpc3Q+IGFk dmljZV9pdGVtX2xpc3QgYml0bWFwX3N1Ymxpc3QgYml0bWFwX3RhcmdldF9saXN0IGdlbmVyaWNf dGFyZ2V0X2xpc3QKKyV0eXBlIDxsaXN0PiBpbmRleF90YXJnZXRfbGlzdCBqb2luX29yZGVyX3Rh cmdldF9saXN0CisldHlwZSA8bGlzdD4gb3B0X3BhcnRpdGlvbiBzaW1wbGVfdGFyZ2V0X2xpc3QK KyV0eXBlIDxzdHI+IGlkZW50aWZpZXIgb3B0X3BsYW5fbmFtZQorJXR5cGUgPHRhcmdldD4gZ2Vu ZXJpY19zdWJsaXN0IGpvaW5fb3JkZXJfc3VibGlzdAorJXR5cGUgPHRhcmdldD4gcmVsYXRpb25f aWRlbnRpZmllcgorJXR5cGUgPGl0YXJnZXQ+IGJpdG1hcF90YXJnZXRfaXRlbSBpbmRleF9uYW1l CisKKyVzdGFydCBwYXJzZV90b3BsZXZlbAorCisvKiBHcmFtbWFyIGZvbGxvd3MgKi8KKyUlCisK K3BhcnNlX3RvcGxldmVsOiBhZHZpY2VfaXRlbV9saXN0CisJCXsKKwkJCSh2b2lkKSB5eW5lcnJz OwkJCQkvKiBzdXBwcmVzcyBjb21waWxlciB3YXJuaW5nICovCisJCQkqcmVzdWx0ID0gJDE7CisJ CX0KKwk7CisKK2FkdmljZV9pdGVtX2xpc3Q6IGFkdmljZV9pdGVtX2xpc3QgYWR2aWNlX2l0ZW0K KwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKwor YWR2aWNlX2l0ZW06IFRPS19UQUdfSk9JTl9PUkRFUiAnKCcgam9pbl9vcmRlcl90YXJnZXRfbGlz dCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV9pdGVtKTsKKwkJ CSQkLT50YWcgPSBQR1BBX1RBR19KT0lOX09SREVSOworCQkJJCQtPnRhcmdldHMgPSAkMzsKKwkJ CWlmICgkMyA9PSBOSUwpCisJCQkJcGdwYV95eWVycm9yKHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNn X3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkgIkpPSU5fT1JERVIgbXVzdCBoYXZlIGF0IGxlYXN0IG9u ZSB0YXJnZXQiKTsKKwkJfQorCXwgVE9LX1RBR19JTkRFWCAnKCcgaW5kZXhfdGFyZ2V0X2xpc3Qg JyknCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfaXRlbSk7CisJCQlp ZiAoc3RyY21wKCQxLCAiaW5kZXhfb25seV9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFnID0gUEdQ QV9UQUdfSU5ERVhfT05MWV9TQ0FOOworCQkJZWxzZSBpZiAoc3RyY21wKCQxLCAiaW5kZXhfc2Nh biIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX0lOREVYX1NDQU47CisJCQllbHNlCisJ CQkJZWxvZyhFUlJPUiwgInRhZyBwYXJzaW5nIGZhaWxlZDogJXMiLCAkMSk7CisJCQkkJC0+dGFy Z2V0cyA9ICQzOworCQl9CisJfCBUT0tfVEFHX0JJVE1BUCAnKCcgYml0bWFwX3RhcmdldF9saXN0 ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJ JCQtPnRhZyA9IFBHUEFfVEFHX0JJVE1BUF9IRUFQX1NDQU47CisJCQkkJC0+dGFyZ2V0cyA9ICQz OworCQl9CisJfCBUT0tfVEFHX1NJTVBMRSAnKCcgc2ltcGxlX3RhcmdldF9saXN0ICcpJworCQl7 CisJCQkkJCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfYWR2aWNlX2l0ZW0pOworCQkJaWYgKHN0cmNt cCgkMSwgIm5vX2dhdGhlciIpID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX05PX0dBVEhF UjsKKwkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgInNlcV9zY2FuIikgPT0gMCkKKwkJCQkkJC0+dGFn ID0gUEdQQV9UQUdfU0VRX1NDQU47CisJCQllbHNlIGlmIChzdHJjbXAoJDEsICJ0aWRfc2NhbiIp ID09IDApCisJCQkJJCQtPnRhZyA9IFBHUEFfVEFHX1RJRF9TQ0FOOworCQkJZWxzZQorCQkJCWVs b2coRVJST1IsICJ0YWcgcGFyc2luZyBmYWlsZWQ6ICVzIiwgJDEpOworCQkJJCQtPnRhcmdldHMg PSAkMzsKKwkJfQorCXwgVE9LX1RBR19HRU5FUklDICcoJyBnZW5lcmljX3RhcmdldF9saXN0ICcp JworCQl7CisJCQlib29sCWZhaWw7CisKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZp Y2VfaXRlbSk7CisJCQkkJC0+dGFnID0gcGdwYV9wYXJzZV9hZHZpY2VfdGFnKCQxLCAmZmFpbCk7 CisJCQlpZiAoZmFpbCkKKwkJCXsKKwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJv cl9tc2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCSAidW5yZWNvZ25pemVkIGFkdmljZSB0YWciKTsK KwkJCX0KKworCQkJaWYgKCQkLT50YWcgPT0gUEdQQV9UQUdfRk9SRUlHTl9KT0lOKQorCQkJewor CQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgdGFyZ2V0LCAkMykKKwkJCQl7CisJ CQkJCWlmICh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX0lERU5USUZJRVIgfHwKKwkJCQkJ CWxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hpbGRyZW4pID09IDEpCisJCQkJCQkJcGdwYV95eWVycm9y KHJlc3VsdCwgcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nhbm5lciwKKwkJCQkJCQkJCQkgIkZPUkVJ R05fSk9JTiB0YXJnZXRzIG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJlbGF0aW9uIGlkZW50 aWZpZXIiKTsKKwkJCQl9CisJCQl9CisKKwkJCSQkLT50YXJnZXRzID0gJDM7CisJCX0KKwk7CisK K3JlbGF0aW9uX2lkZW50aWZpZXI6IGlkZW50aWZpZXIgb3B0X3JpX29jY3VycmVuY2Ugb3B0X3Bh cnRpdGlvbiBvcHRfcGxhbl9uYW1lCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9h ZHZpY2VfdGFyZ2V0KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX0lERU5USUZJRVI7CisJ CQkkJC0+cmlkLmFsaWFzX25hbWUgPSAkMTsKKwkJCSQkLT5yaWQub2NjdXJyZW5jZSA9ICQyOwor CQkJaWYgKGxpc3RfbGVuZ3RoKCQzKSA9PSAyKQorCQkJeworCQkJCSQkLT5yaWQucGFydG5zcCA9 IGxpbml0aWFsKCQzKTsKKwkJCQkkJC0+cmlkLnBhcnRyZWwgPSBsc2Vjb25kKCQzKTsKKwkJCX0K KwkJCWVsc2UgaWYgKCQzICE9IE5JTCkKKwkJCQkkJC0+cmlkLnBhcnRyZWwgPSBsaW5pdGlhbCgk Myk7CisJCQkkJC0+cmlkLnBsYW5fbmFtZSA9ICQ0OworCQl9CisJOworCitpbmRleF9uYW1lOiBp ZGVudGlmaWVyCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9pbmRleF90YXJnZXQp OworCQkJJCQtPml0eXBlID0gUEdQQV9JTkRFWF9OQU1FOworCQkJJCQtPmluZG5hbWUgPSAkMTsK KwkJfQorCXwgaWRlbnRpZmllciAnLicgaWRlbnRpZmllcgorCQl7CisJCQkkJCA9IHBhbGxvYzBf b2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJCSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhfTkFN RTsKKwkJCSQkLT5pbmRuYW1lc3BhY2UgPSAkMTsKKwkJCSQkLT5pbmRuYW1lID0gJDM7CisJCX0K Kwk7CisKK29wdF9yaV9vY2N1cnJlbmNlOgorCScjJyBUT0tfSU5URUdFUgorCQl7CisJCQlpZiAo JDIgPD0gMCkKKwkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9tc2dfcCwgeXlz Y2FubmVyLAorCQkJCQkJCSAib25seSBwb3NpdGl2ZSBvY2N1cnJlbmNlIG51bWJlcnMgYXJlIHBl cm1pdHRlZCIpOworCQkJJCQgPSAkMjsKKwkJfQorCXwKKwkJeworCQkJLyogVGhlIGRlZmF1bHQg b2NjdXJyZW5jZSBudW1iZXIgaXMgMS4gKi8KKwkJCSQkID0gMTsKKwkJfQorCTsKKworaWRlbnRp ZmllcjogVE9LX0lERU5UCisJfCBUT0tfVEFHX0pPSU5fT1JERVIKKwl8IFRPS19UQUdfSU5ERVgK Kwl8IFRPS19UQUdfQklUTUFQCisJfCBUT0tfVEFHX1NJTVBMRQorCXwgVE9LX1RBR19HRU5FUklD CisJOworCisvKgorICogV2hlbiBnZW5lcmF0aW5nIGFkdmljZSwgd2UgYWx3YXlzIHNjaGVtYS1x dWFsaWZ5IHRoZSBwYXJ0aXRpb24gbmFtZSwgYnV0CisgKiB3aGVuIHBhcnNpbmcgYWR2aWNlLCB3 ZSBhY2NlcHQgYSBzcGVjaWZpY2F0aW9uIHRoYXQgbGFja3Mgb25lLgorICovCitvcHRfcGFydGl0 aW9uOgorCScvJyBUT0tfSURFTlQgJy4nIFRPS19JREVOVAorCQl7ICQkID0gbGlzdF9tYWtlMigk MiwgJDQpOyB9CisJfCAnLycgVE9LX0lERU5UCisJCXsgJCQgPSBsaXN0X21ha2UxKCQyKTsgfQor CXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworb3B0X3BsYW5fbmFtZToKKwknQCcgVE9LX0lERU5U CisJCXsgJCQgPSAkMjsgfQorCXwKKwkJeyAkJCA9IE5VTEw7IH0KKwk7CisKK2JpdG1hcF90YXJn ZXRfbGlzdDogYml0bWFwX3RhcmdldF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIgYml0bWFwX3Rh cmdldF9pdGVtCisJCXsKKwkJCSQyLT5pdGFyZ2V0ID0gJDM7CisJCQkkJCA9IGxhcHBlbmQoJDEs ICQyKTsKKwkJfQorCXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworYml0bWFwX3RhcmdldF9pdGVt OiBpbmRleF9uYW1lCisJCXsgJCQgPSAkMTsgfQorCXwgVE9LX09SICcoJyBiaXRtYXBfc3VibGlz dCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2luZGV4X3RhcmdldCk7CisJ CQkkJC0+aXR5cGUgPSBQR1BBX0lOREVYX09SOworCQkJJCQtPmNoaWxkcmVuID0gJDM7CisJCX0K Kwl8IFRPS19BTkQgJygnIGJpdG1hcF9zdWJsaXN0ICcpJworCQl7CisJCQkkJCA9IHBhbGxvYzBf b2JqZWN0KHBncGFfaW5kZXhfdGFyZ2V0KTsKKwkJCSQkLT5pdHlwZSA9IFBHUEFfSU5ERVhfQU5E OworCQkJJCQtPmNoaWxkcmVuID0gJDM7CisJCX0KKwk7CisKK2JpdG1hcF9zdWJsaXN0OiBiaXRt YXBfc3VibGlzdCBiaXRtYXBfdGFyZ2V0X2l0ZW0KKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsg fQorCXwgYml0bWFwX3RhcmdldF9pdGVtCisJCXsgJCQgPSBsaXN0X21ha2UxKCQxKTsgfQorCTsK KworZ2VuZXJpY190YXJnZXRfbGlzdDogZ2VuZXJpY190YXJnZXRfbGlzdCByZWxhdGlvbl9pZGVu dGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8IGdlbmVyaWNfdGFyZ2V0X2xp c3QgZ2VuZXJpY19zdWJsaXN0CisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8CisJCXsg JCQgPSBOSUw7IH0KKwk7CisKK2dlbmVyaWNfc3VibGlzdDogJygnIHNpbXBsZV90YXJnZXRfbGlz dCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOwor CQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCQkJJCQtPmNoaWxkcmVu ID0gJDI7CisJCX0KKwk7CisKK2luZGV4X3RhcmdldF9saXN0OgorCSAgaW5kZXhfdGFyZ2V0X2xp c3QgcmVsYXRpb25faWRlbnRpZmllciBpbmRleF9uYW1lCisJCXsKKwkJCSQyLT5pdGFyZ2V0ID0g JDM7CisJCQkkJCA9IGxhcHBlbmQoJDEsICQyKTsKKwkJfQorCXwKKwkJeyAkJCA9IE5JTDsgfQor CTsKKworam9pbl9vcmRlcl90YXJnZXRfbGlzdDogam9pbl9vcmRlcl90YXJnZXRfbGlzdCByZWxh dGlvbl9pZGVudGlmaWVyCisJCXsgJCQgPSBsYXBwZW5kKCQxLCAkMik7IH0KKwl8IGpvaW5fb3Jk ZXJfdGFyZ2V0X2xpc3Qgam9pbl9vcmRlcl9zdWJsaXN0CisJCXsgJCQgPSBsYXBwZW5kKCQxLCAk Mik7IH0KKwl8CisJCXsgJCQgPSBOSUw7IH0KKwk7CisKK2pvaW5fb3JkZXJfc3VibGlzdDoKKwkn KCcgam9pbl9vcmRlcl90YXJnZXRfbGlzdCAnKScKKwkJeworCQkJJCQgPSBwYWxsb2MwX29iamVj dChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJJCQtPnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJF RF9MSVNUOworCQkJJCQtPmNoaWxkcmVuID0gJDI7CisJCX0KKwl8ICd7JyBzaW1wbGVfdGFyZ2V0 X2xpc3QgJ30nCisJCXsKKwkJCSQkID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0 KTsKKwkJCSQkLT50dHlwZSA9IFBHUEFfVEFSR0VUX1VOT1JERVJFRF9MSVNUOworCQkJJCQtPmNo aWxkcmVuID0gJDI7CisJCX0KKwk7CisKK3NpbXBsZV90YXJnZXRfbGlzdDogc2ltcGxlX3Rhcmdl dF9saXN0IHJlbGF0aW9uX2lkZW50aWZpZXIKKwkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQor CXwKKwkJeyAkJCA9IE5JTDsgfQorCTsKKworJSUKKworLyoKKyAqIFBhcnNlIGFuIGFkdmljZV9z dHJpbmcgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGxpc3Qgb2YgcGdwYV9hZHZpY2VfaXRlbQor ICogb2JqZWN0cy4gSWYgYSBwYXJzZSBlcnJvciBvY2N1cnMsIGluc3RlYWQgcmV0dXJuIE5VTEwu CisgKgorICogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBOVUxMLCAqZXJyb3JfcCB3aWxsIGJlIHNl dCB0byB0aGUgZXJyb3IgbWVzc2FnZTsKKyAqIG90aGVyd2lzZSwgKmVycm9yX3Agd2lsbCBiZSBz ZXQgdG8gTlVMTC4KKyAqLworTGlzdCAqCitwZ3BhX3BhcnNlKGNvbnN0IGNoYXIgKmFkdmljZV9z dHJpbmcsIGNoYXIgKiplcnJvcl9wKQoreworCXl5c2Nhbl90CXNjYW5uZXI7CisJTGlzdAkgICAq cmVzdWx0OworCWNoYXIJICAgKmVycm9yID0gTlVMTDsKKworCXBncGFfc2Nhbm5lcl9pbml0KGFk dmljZV9zdHJpbmcsICZzY2FubmVyKTsKKwlwZ3BhX3l5cGFyc2UoJnJlc3VsdCwgJmVycm9yLCBz Y2FubmVyKTsKKwlwZ3BhX3NjYW5uZXJfZmluaXNoKHNjYW5uZXIpOworCisJaWYgKGVycm9yICE9 IE5VTEwpCisJeworCQkqZXJyb3JfcCA9IGVycm9yOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkq ZXJyb3JfcCA9IE5VTEw7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9wbGFubmVyLmMgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3Bn cGFfcGxhbm5lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYWM3 M2RhOTdhYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9w bGFubmVyLmMKQEAgLTAsMCArMSwyMDI5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBw Z3BhX3BsYW5uZXIuYworICoJICBwbGFubmVyIGhvb2tzCisgKgorICogQ29weXJpZ2h0IChjKSAy MDE2LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBj b250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5jCisgKgorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAicGdfcGxhbl9hZHZp Y2UuaCIKKyNpbmNsdWRlICJwZ3BhX2NvbGxlY3Rvci5oIgorI2luY2x1ZGUgInBncGFfaWRlbnRp Zmllci5oIgorI2luY2x1ZGUgInBncGFfb3V0cHV0LmgiCisjaW5jbHVkZSAicGdwYV9wbGFubmVy LmgiCisjaW5jbHVkZSAicGdwYV90cm92ZS5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisK KyNpbmNsdWRlICJjb21tb24vaGFzaGZuX3Vuc3RhYmxlLmgiCisjaW5jbHVkZSAibm9kZXMvbWFr ZWZ1bmNzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2V4dGVuZHBsYW4uaCIKKyNpbmNsdWRlICJv cHRpbWl6ZXIvcGF0aG5vZGUuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKKyNpbmNs dWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgi CisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNo ZS5oIgorCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCisvKgorICogV2hlbiBhc3NlcnRp b25zIGFyZSBlbmFibGVkLCB3ZSB0cnkgZ2VuZXJhdGluZyByZWxhdGlvbiBpZGVudGlmaWVycyBk dXJpbmcKKyAqIHBsYW5uaW5nLCBzYXZpbmcgdGhlbSBpbiBhIGhhc2ggdGFibGUsIGFuZCB0aGVu IGNyb3NzLWNoZWNraW5nIHRoZW0gYWdhaW5zdAorICogdGhlIG9uZXMgZ2VuZXJhdGVkIGFmdGVy IHBsYW5uaW5nIGlzIGNvbXBsZXRlLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3JpX2NoZWNr ZXJfa2V5Cit7CisJY2hhcgkgICAqcGxhbl9uYW1lOworCUluZGV4CQlydGk7Cit9IHBncGFfcmlf Y2hlY2tlcl9rZXk7CisKK3R5cGVkZWYgc3RydWN0IHBncGFfcmlfY2hlY2tlcgoreworCXBncGFf cmlfY2hlY2tlcl9rZXkga2V5OworCXVpbnQzMgkJc3RhdHVzOworCWNvbnN0IGNoYXIgKnJpZF9z dHJpbmc7Cit9IHBncGFfcmlfY2hlY2tlcjsKKworc3RhdGljIHVpbnQzMiBwZ3BhX3JpX2NoZWNr ZXJfaGFzaF9rZXkocGdwYV9yaV9jaGVja2VyX2tleSBrZXkpOworCitzdGF0aWMgaW5saW5lIGJv b2wKK3BncGFfcmlfY2hlY2tlcl9jb21wYXJlX2tleShwZ3BhX3JpX2NoZWNrZXJfa2V5IGEsIHBn cGFfcmlfY2hlY2tlcl9rZXkgYikKK3sKKwlpZiAoYS5ydGkgIT0gYi5ydGkpCisJCXJldHVybiBm YWxzZTsKKwlpZiAoYS5wbGFuX25hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIChiLnBsYW5fbmFtZSA9 PSBOVUxMKTsKKwlpZiAoYi5wbGFuX25hbWUgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCXJl dHVybiBzdHJjbXAoYS5wbGFuX25hbWUsIGIucGxhbl9uYW1lKSA9PSAwOworfQorCisjZGVmaW5l IFNIX1BSRUZJWAkJCXBncGFfcmlfY2hlY2sKKyNkZWZpbmUgU0hfRUxFTUVOVF9UWVBFCQlwZ3Bh X3JpX2NoZWNrZXIKKyNkZWZpbmUgU0hfS0VZX1RZUEUJCQlwZ3BhX3JpX2NoZWNrZXJfa2V5Cisj ZGVmaW5lIFNIX0tFWQkJCQlrZXkKKyNkZWZpbmUgU0hfSEFTSF9LRVkodGIsIGtleSkJcGdwYV9y aV9jaGVja2VyX2hhc2hfa2V5KGtleSkKKyNkZWZpbmUJU0hfRVFVQUwodGIsIGEsIGIpCXBncGFf cmlfY2hlY2tlcl9jb21wYXJlX2tleShhLCBiKQorI2RlZmluZSBTSF9TQ09QRQkJCXN0YXRpYyBp bmxpbmUKKyNkZWZpbmUgU0hfREVDTEFSRQorI2RlZmluZSBTSF9ERUZJTkUKKyNpbmNsdWRlICJs aWIvc2ltcGxlaGFzaC5oIgorCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFubmVy X3N0YXRlCit7CisJRXhwbGFpblN0YXRlICpleHBsYWluX3N0YXRlOworCWJvb2wJCWdlbmVyYXRl X2FkdmljZV9mZWVkYmFjazsKKwlib29sCQlnZW5lcmF0ZV9hZHZpY2Vfc3RyaW5nOworCXBncGFf dHJvdmUgKnRyb3ZlOworCU1lbW9yeUNvbnRleHQgdHJvdmVfY3h0OworCUxpc3QJICAgKnNqX3Vu aXF1ZV9yZWxzOworCisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCXBncGFfcmlfY2hlY2tf aGFzaCAqcmlfY2hlY2tfaGFzaDsKKyNlbmRpZgorfSBwZ3BhX3BsYW5uZXJfc3RhdGU7CisKK3R5 cGVkZWYgc3RydWN0IHBncGFfam9pbl9zdGF0ZQoreworCS8qIE1vc3QtcmVjZW50bHktY29uc2lk ZXJlZCBvdXRlciByZWwuICovCisJUmVsT3B0SW5mbyAqb3V0ZXJyZWw7CisKKwkvKiBNb3N0LXJl Y2VudGx5LWNvbnNpZGVyZWQgaW5uZXIgcmVsLiAqLworCVJlbE9wdEluZm8gKmlubmVycmVsOwor CisJLyoKKwkgKiBBcnJheSBvZiByZWxhdGlvbiBpZGVudGlmaWVycyBmb3IgYWxsIG1lbWJlcnMg b2YgdGhpcyBqb2lucmVsLCB3aXRoCisJICogb3V0ZXJyZWwgaWRlbmlmaWVycyBiZWZvcmUgaW5u ZXJyZWwgaWRlbnRpZmllcnMuCisJICovCisJcGdwYV9pZGVudGlmaWVyICpyaWRzOworCisJLyog TnVtYmVyIG9mIG91dGVyIHJlbCBpZGVudGlmaWVycy4gKi8KKwlpbnQJCQlvdXRlcl9jb3VudDsK KworCS8qIE51bWJlciBvZiBpbm5lciByZWwgaWRlbnRpZmllcnMuICovCisJaW50CQkJaW5uZXJf Y291bnQ7CisKKwkvKgorCSAqIFRyb3ZlIGxvb2t1cCByZXN1bHRzLgorCSAqCisJICogam9pbl9l bnRyaWVzIGFuZCByZWxfZW50cmllcyBhcmUgYXJyYXlzIG9mIGVudHJpZXMsIGFuZCBqb2luX2lu ZGV4ZXMKKwkgKiBhbmQgcmVsX2luZGV4ZXMgYXJlIHRoZSBpbnRlZ2VyIG9mZnNldHMgd2l0aGlu IHRob3NlIGFycmF5cyBvZiBlbnRyaWVzCisJICogcG90ZW50aWFsbHkgcmVsZXZhbnQgdG8gdXMu IFRoZSAiam9pbiIgZmllbGRzIGNvcnJlc3BvbmQgdG8gYSBsb29rdXAKKwkgKiB1c2luZyBQR1BB X1RST1ZFX0xPT0tVUF9KT0lOIGFuZCB0aGUgInJlbCIgZmllbGRzIHRvIGEgbG9va3VwIHVzaW5n CisJICogUEdQQV9UUk9WRV9MT09LVVBfUkVMLgorCSAqLworCXBncGFfdHJvdmVfZW50cnkgKmpv aW5fZW50cmllczsKKwlCaXRtYXBzZXQgICpqb2luX2luZGV4ZXM7CisJcGdwYV90cm92ZV9lbnRy eSAqcmVsX2VudHJpZXM7CisJQml0bWFwc2V0ICAqcmVsX2luZGV4ZXM7Cit9IHBncGFfam9pbl9z dGF0ZTsKKworLyogU2F2ZWQgaG9vayB2YWx1ZXMgKi8KK3N0YXRpYyBnZXRfcmVsYXRpb25faW5m b19ob29rX3R5cGUgcHJldl9nZXRfcmVsYXRpb25faW5mbyA9IE5VTEw7CitzdGF0aWMgam9pbl9w YXRoX3NldHVwX2hvb2tfdHlwZSBwcmV2X2pvaW5fcGF0aF9zZXR1cCA9IE5VTEw7CitzdGF0aWMg am9pbnJlbF9zZXR1cF9ob29rX3R5cGUgcHJldl9qb2lucmVsX3NldHVwID0gTlVMTDsKK3N0YXRp YyBwbGFubmVyX3NldHVwX2hvb2tfdHlwZSBwcmV2X3BsYW5uZXJfc2V0dXAgPSBOVUxMOworc3Rh dGljIHBsYW5uZXJfc2h1dGRvd25faG9va190eXBlIHByZXZfcGxhbm5lcl9zaHV0ZG93biA9IE5V TEw7CisKKy8qIE90aGVyIGdsb2JhbCB2YXJpYWJlcyAqLworc3RhdGljIGludAlwbGFubmVyX2V4 dGVuc2lvbl9pZCA9IC0xOworCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzLiAqLworc3RhdGljIHZv aWQgcGdwYV9nZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJICAg T2lkIHJlbGF0aW9uT2JqZWN0SWQsCisJCQkJCQkJCSAgIGJvb2wgaW5ocGFyZW50LAorCQkJCQkJ CQkgICBSZWxPcHRJbmZvICpyZWwpOworc3RhdGljIHZvaWQgcGdwYV9qb2lucmVsX3NldHVwKFBs YW5uZXJJbmZvICpyb290LAorCQkJCQkJCSAgIFJlbE9wdEluZm8gKmpvaW5yZWwsCisJCQkJCQkJ ICAgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsCisJCQkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWws CisJCQkJCQkJICAgU3BlY2lhbEpvaW5JbmZvICpzamluZm8sCisJCQkJCQkJICAgTGlzdCAqcmVz dHJpY3RsaXN0KTsKK3N0YXRpYyB2b2lkIHBncGFfam9pbl9wYXRoX3NldHVwKFBsYW5uZXJJbmZv ICpyb290LAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkJCQkJIFJlbE9wdElu Zm8gKm91dGVycmVsLAorCQkJCQkJCQkgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJCSBK b2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSk7Citz dGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfc2V0dXAoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkg KnBhcnNlLAorCQkJCQkJCSAgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywKKwkJCQkJCQkgICBk b3VibGUgKnR1cGxlX2ZyYWN0aW9uLAorCQkJCQkJCSAgIEV4cGxhaW5TdGF0ZSAqZXMpOworc3Rh dGljIHZvaWQgcGdwYV9wbGFubmVyX3NodXRkb3duKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5 ICpwYXJzZSwKKwkJCQkJCQkJICBjb25zdCBjaGFyICpxdWVyeV9zdHJpbmcsIFBsYW5uZWRTdG10 ICpwc3RtdCk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2Uo dWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJCQkJCQkgIGNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJ CQkJCQkJICBwZ3BhX2pvaW5fc3RhdGUgKnBqcyk7CitzdGF0aWMgdm9pZCBwZ3BhX3BsYW5uZXJf YXBwbHlfam9pbl9wYXRoX2FkdmljZShKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJCQkJCXVp bnQ2NCAqcGdzX21hc2tfcCwKKwkJCQkJCQkJCQkJCWNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJ CQkJCXBncGFfam9pbl9zdGF0ZSAqcGpzKTsKK3N0YXRpYyB2b2lkIHBncGFfcGxhbm5lcl9hcHBs eV9zY2FuX2FkdmljZShSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkJCQkJICAgcGdwYV90cm92ZV9l bnRyeSAqc2Nhbl9lbnRyaWVzLAorCQkJCQkJCQkJCSAgIEJpdG1hcHNldCAqc2Nhbl9pbmRleGVz LAorCQkJCQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnJlbF9lbnRyaWVzLAorCQkJCQkJCQkJ CSAgIEJpdG1hcHNldCAqcmVsX2luZGV4ZXMpOworc3RhdGljIHVpbnQ2NCBwZ3BhX2pvaW5fc3Ry YXRlZ3lfbWFza19mcm9tX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnKTsKK3N0 YXRpYyBib29sIHBncGFfam9pbl9vcmRlcl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBp bnQgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJ CQkJCQkgcGdwYV90cm92ZV9lbnRyeSAqZW50cnkpOworc3RhdGljIGJvb2wgcGdwYV9qb2luX21l dGhvZF9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJ CQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkJCQkJICBwZ3BhX3Ryb3ZlX2Vu dHJ5ICplbnRyeSwKKwkJCQkJCQkJCQkgIGJvb2wgKnJlc3RyaWN0X21ldGhvZCk7CitzdGF0aWMg Ym9vbCBwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBp bm5lcl9jb3VudCwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkJ CQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCQkJCSAgYm9vbCAqcmVzdHJpY3Rf bWV0aG9kKTsKK3N0YXRpYyBib29sIHBncGFfc2VtaWpvaW5fcGVybWl0c19qb2luKGludCBvdXRl cl9jb3VudCwgaW50IGlubmVyX2NvdW50LAorCQkJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpy aWRzLAorCQkJCQkJCQkJICAgcGdwYV90cm92ZV9lbnRyeSAqZW50cnksCisJCQkJCQkJCQkgICBi b29sIG91dGVyX3NpZGVfbnVsbGFibGUsCisJCQkJCQkJCQkgICBib29sICpyZXN0cmljdF9tZXRo b2QpOworCitzdGF0aWMgTGlzdCAqcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhMaXN0ICps aXN0LCBwZ3BhX3Ryb3ZlICp0cm92ZSwKKwkJCQkJCQkJCQkgIHBncGFfdHJvdmVfbG9va3VwX3R5 cGUgdHlwZSwKKwkJCQkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJ CQkJCQkJCQkJICBwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlcik7CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywK KwkJCQkJCQkJCQlQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQlSZWxPcHRJbmZvICpyZWwp Oworc3RhdGljIHZvaWQgcGdwYV9yaV9jaGVja2VyX3ZhbGlkYXRlKHBncGFfcGxhbm5lcl9zdGF0 ZSAqcHBzLAorCQkJCQkJCQkJIFBsYW5uZWRTdG10ICpwc3RtdCk7CisKK3N0YXRpYyBjaGFyICpw Z3BhX2Jtc190b19jc3RyaW5nKEJpdG1hcHNldCAqYm1zKTsKK3N0YXRpYyBjb25zdCBjaGFyICpw Z3BhX2pvaW50eXBlX3RvX2NzdHJpbmcoSm9pblR5cGUgam9pbnR5cGUpOworCisvKgorICogSW5z dGFsbCBwbGFubmVyLXJlbGF0ZWQgaG9va3MuCisgKi8KK3ZvaWQKK3BncGFfcGxhbm5lcl9pbnN0 YWxsX2hvb2tzKHZvaWQpCit7CisJcGxhbm5lcl9leHRlbnNpb25faWQgPSBHZXRQbGFubmVyRXh0 ZW5zaW9uSWQoInBnX3BsYW5fYWR2aWNlIik7CisJcHJldl9nZXRfcmVsYXRpb25faW5mbyA9IGdl dF9yZWxhdGlvbl9pbmZvX2hvb2s7CisJZ2V0X3JlbGF0aW9uX2luZm9faG9vayA9IHBncGFfZ2V0 X3JlbGF0aW9uX2luZm87CisJcHJldl9qb2lucmVsX3NldHVwID0gam9pbnJlbF9zZXR1cF9ob29r OworCWpvaW5yZWxfc2V0dXBfaG9vayA9IHBncGFfam9pbnJlbF9zZXR1cDsKKwlwcmV2X2pvaW5f cGF0aF9zZXR1cCA9IGpvaW5fcGF0aF9zZXR1cF9ob29rOworCWpvaW5fcGF0aF9zZXR1cF9ob29r ID0gcGdwYV9qb2luX3BhdGhfc2V0dXA7CisJcHJldl9wbGFubmVyX3NldHVwID0gcGxhbm5lcl9z ZXR1cF9ob29rOworCXBsYW5uZXJfc2V0dXBfaG9vayA9IHBncGFfcGxhbm5lcl9zZXR1cDsKKwlw cmV2X3BsYW5uZXJfc2h1dGRvd24gPSBwbGFubmVyX3NodXRkb3duX2hvb2s7CisJcGxhbm5lcl9z aHV0ZG93bl9ob29rID0gcGdwYV9wbGFubmVyX3NodXRkb3duOworfQorCisvKgorICogSG9vayBm dW5jdGlvbiBmb3IgZ2V0X3JlbGF0aW9uX2luZm8oKS4KKyAqCisgKiBXZSBjYW4gYXBwbHkgc2Nh biBhZHZpY2UgYXQgdGhpcyBvcGludCwgYW5kIHdlIGFsc28gdXNlZSB0aGlzIGFzIGFuCisgKiBv cHBvcnR1bml0eSB0byBkbyByYW5nZS10YWJsZSBpZGVudGlmaWVyIGNyb3NzLWNoZWNraW5nIGlu IGFzc2VydC1lbmFibGVkCisgKiBidWlsZHMuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX2dldF9y ZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25PYmplY3RJZCwKKwkJ CQkJICAgYm9vbCBpbmhwYXJlbnQsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlwZ3BhX3BsYW5uZXJf c3RhdGUgKnBwczsKKworCS8qIEZldGNoIG91ciBwcml2YXRlIHN0YXRlLCBzZXQgdXAgYnkgcGdw YV9wbGFubmVyX3NldHVwKCkuICovCisJcHBzID0gR2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0 YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsKKworCS8qIFNhdmUgZGV0YWls cyBuZWVkZWQgZm9yIHJhbmdlIHRhYmxlIGlkZW50aWZpZXIgY3Jvc3MtY2hlY2tpbmcuICovCisJ aWYgKHBwcyAhPSBOVUxMKQorCQlwZ3BhX3JpX2NoZWNrZXJfc2F2ZShwcHMsIHJvb3QsIHJlbCk7 CisKKwkvKiBJZiBxdWVyeSBhZHZpY2Ugd2FzIHByb3ZpZGVkLCBzZWFyY2ggZm9yIHJlbGV2YW50 IGVudHJpZXMuICovCisJaWYgKHBwcyAhPSBOVUxMICYmIHBwcy0+dHJvdmUgIT0gTlVMTCkKKwl7 CisJCXBncGFfaWRlbnRpZmllciByaWQ7CisJCXBncGFfdHJvdmVfcmVzdWx0IHRyZXN1bHRfc2Nh bjsKKwkJcGdwYV90cm92ZV9yZXN1bHQgdHJlc3VsdF9yZWw7CisKKwkJLyogU2VhcmNoIGZvciBz Y2FuIGFkdmljZSBhbmQgZ2VuZXJhbCByZWwgYWR2aWNlLiAqLworCQlwZ3BhX2NvbXB1dGVfaWRl bnRpZmllcl9ieV9ydGkocm9vdCwgcmVsLT5yZWxpZCwgJnJpZCk7CisJCXBncGFfdHJvdmVfbG9v a3VwKHBwcy0+dHJvdmUsIFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4sIDEsICZyaWQsCisJCQkJCQkg ICZ0cmVzdWx0X3NjYW4pOworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BBX1RS T1ZFX0xPT0tVUF9SRUwsIDEsICZyaWQsCisJCQkJCQkgICZ0cmVzdWx0X3JlbCk7CisKKwkJLyog SWYgcmVsZXZhbnQgZW50cmllcyB3ZXJlIGZvdW5kLCBhcHBseSB0aGVtLiAqLworCQlpZiAodHJl c3VsdF9zY2FuLmluZGV4ZXMgIT0gTlVMTCB8fCB0cmVzdWx0X3JlbC5pbmRleGVzICE9IE5VTEwp CisJCXsKKwkJCXVpbnQ2NAkJb3JpZ2luYWxfbWFzayA9IHJlbC0+cGdzX21hc2s7CisKKwkJCXBn cGFfcGxhbm5lcl9hcHBseV9zY2FuX2FkdmljZShyZWwsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9z Y2FuLmVudHJpZXMsCisJCQkJCQkJCQkJICAgdHJlc3VsdF9zY2FuLmluZGV4ZXMsCisJCQkJCQkJ CQkJICAgdHJlc3VsdF9yZWwuZW50cmllcywKKwkJCQkJCQkJCQkgICB0cmVzdWx0X3JlbC5pbmRl eGVzKTsKKworCQkJLyogRW1pdCBkZWJ1Z2dpbmcgbWVzc2FnZSwgaWYgZW5hYmxlZC4gKi8KKwkJ CWlmIChwZ19wbGFuX2FkdmljZV90cmFjZV9tYXNrICYmIG9yaWdpbmFsX21hc2sgIT0gcmVsLT5w Z3NfbWFzaykKKwkJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCQkoZXJybXNnKCJzdHJhdGVneSBt YXNrIGZvciBSVEkgJXUgY2hhbmdlZCBmcm9tIDB4JSIgUFJJeDY0ICIgdG8gMHglIiBQUkl4NjQs CisJCQkJCQkJCXJlbC0+cmVsaWQsIG9yaWdpbmFsX21hc2ssIHJlbC0+cGdzX21hc2spKSk7CisJ CX0KKwl9CisKKwkvKiBQYXNzIGNhbGwgdG8gcHJldmlvdXMgaG9vay4gKi8KKwlpZiAocHJldl9n ZXRfcmVsYXRpb25faW5mbykKKwkJKCpwcmV2X2dldF9yZWxhdGlvbl9pbmZvKSAocm9vdCwgcmVs YXRpb25PYmplY3RJZCwgaW5ocGFyZW50LCByZWwpOworfQorCisvKgorICogU2VhcmNoIGZvciBh ZHZpY2UgcGVydGFpbmluZyB0byBhIHByb3Bvc2VkIGpvaW4uCisgKi8KK3N0YXRpYyBwZ3BhX2pv aW5fc3RhdGUgKgorcGdwYV9nZXRfam9pbl9zdGF0ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqam9pbnJlbCwKKwkJCQkJUmVsT3B0SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdEluZm8gKmlu bmVycmVsKQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCXBncGFfam9pbl9zdGF0ZSAq cGpzOworCWJvb2wJCW5ld19wanMgPSBmYWxzZTsKKworCS8qIEZldGNoIG91ciBwcml2YXRlIHN0 YXRlLCBzZXQgdXAgYnkgcGdwYV9wbGFubmVyX3NldHVwKCkuICovCisJcHBzID0gR2V0UGxhbm5l ckdsb2JhbEV4dGVuc2lvblN0YXRlKHJvb3QtPmdsb2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkKTsK KwlpZiAocHBzID09IE5VTEwgfHwgcHBzLT50cm92ZSA9PSBOVUxMKQorCXsKKwkJLyogTm8gYWR2 aWNlIGFwcGxpZXMgdG8gdGhpcyBxdWVyeSwgaGVuY2Ugbm9uZSB0byB0aGlzIGpvaW5yZWwuICov CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogU2VlIHdoZXRoZXIgd2UndmUgcHJldmlv dXNseSBhc3NvY2lhdGVkIGEgcGdwYV9qb2luX3N0YXRlIHdpdGggdGhpcworCSAqIGpvaW5yZWwu IElmIHdlIGhhdmUgbm90LCB3ZSBuZWVkIHRvIHRyeSB0byBjb25zdHJ1Y3Qgb25lLiBJZiB3ZSBo YXZlLAorCSAqIHRoZW4gdGhlcmUgYXJlIHR3byBjYXNlczogKGEpIGlmIGlubmVycmVsIGFuZCBv dXRlcnJlbCBhcmUgdW5jaGFuZ2VkLAorCSAqIHdlIGNhbiBzaW1wbHkgdXNlIGl0LCBhbmQgKGIp IGlmIHRoZXkgaGF2ZSBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHJlamlnZ2VyCisJICogdGhlIGFycmF5 IG9mIGlkZW50aWZpZXJzIGJ1dCBjYW4gc3RpbGwgc2tpcCB0aGUgdHJvdmUgbG9va3VwLgorCSAq LworCXBqcyA9IEdldFJlbE9wdEluZm9FeHRlbnNpb25TdGF0ZShqb2lucmVsLCBwbGFubmVyX2V4 dGVuc2lvbl9pZCk7CisJaWYgKHBqcyAhPSBOVUxMKQorCXsKKwkJaWYgKHBqcy0+am9pbl9pbmRl eGVzID09IE5VTEwgJiYgcGpzLT5yZWxfaW5kZXhlcyA9PSBOVUxMKQorCQl7CisJCQkvKgorCQkJ ICogSWYgdGhlcmUncyBubyBwb3RlbnRpYWxseSByZWxldmFudCBhZHZpY2UsIHRoZW4gdGhlIHBy ZXNlbmNlIG9mCisJCQkgKiB0aGlzIHBncGFfam9pbl9zdGF0ZSBhY3RzIGxpa2UgYSBuZWdhdGl2 ZSBjYWNoZSBlbnRyeTogaXQgdGVsbHMKKwkJCSAqIHVzIG5vdCB0byBib3RoZXIgc2VhcmNoaW5n IHRoZSB0cm92ZSBmb3IgYWR2aWNlLCBiZWNhdXNlIHdlCisJCQkgKiB3aWxsIG5vdCBmaW5kIGFu eS4KKwkJCSAqLworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlpZiAocGpzLT5vdXRlcnJlbCA9 PSBvdXRlcnJlbCAmJiBwanMtPmlubmVycmVsID09IGlubmVycmVsKQorCQl7CisJCQkvKiBObyB1 cGRhdGVzIHJlcXVpcmVkLCBzbyBqdXN0IHJldHVybi4gKi8KKwkJCS8qIFhYWC4gRG9lcyB0aGlz IG5lZWQgdG8gZG8gc29tZXRoaW5nIGRpZmZlcmVudCB1bmRlciBHRVFPPyAqLworCQkJcmV0dXJu IHBqczsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlcmUncyBubyBwZ3BhX2pvaW5fc3RhdGUg eWV0LCB3ZSBuZWVkIHRvIGFsbG9jYXRlIG9uZS4gVHJvdmUga2V5cworCSAqIHdpbGwgbm90IGdl dCBidWlsdCBmb3IgUlRFX0pPSU4gUlRFcywgc28gdGhlIGFycmF5IG1heSBlbmQgdXAgYmVpbmcK KwkgKiBsYXJnZXIgdGhhbiBuZWVkZWQuIEl0J3Mgbm90IHdvcnRoIHRyeWluZyB0byBjb21wdXRl IGEgcGVyZmVjdGx5CisJICogYWNjdXJhdGUgY291bnQgaGVyZS4KKwkgKi8KKwlpZiAocGpzID09 IE5VTEwpCisJeworCQlpbnQJCQlwZXNzaW1pc3RpY19jb3VudCA9IGJtc19udW1fbWVtYmVycyhq b2lucmVsLT5yZWxpZHMpOworCisJCXBqcyA9IHBhbGxvYzBfb2JqZWN0KHBncGFfam9pbl9zdGF0 ZSk7CisJCXBqcy0+cmlkcyA9IHBhbGxvY19hcnJheShwZ3BhX2lkZW50aWZpZXIsIHBlc3NpbWlz dGljX2NvdW50KTsKKwkJbmV3X3BqcyA9IHRydWU7CisJfQorCisJLyoKKwkgKiBFaXRoZXIgd2Ug anVzdCBhbGxvY2F0ZWQgYSBuZXcgcGdwYV9qb2luX3N0YXRlLCBvciB0aGUgZXhpc3Rpbmcgb25l CisJICogbmVlZHMgcmVjb25maWd1cmluZyBmb3IgYSBuZXcgaW5uZXJyZWwgYW5kIG91dGVycmVs LiBUaGUgcmVxdWlyZWQgYXJyYXkKKwkgKiBzaXplIGNhbid0IGNoYW5nZSwgc28gd2UgY2FuIG92 ZXJ3cml0ZSB0aGUgZXhpc3Rpbmcgb25lLgorCSAqLworCXBqcy0+b3V0ZXJyZWwgPSBvdXRlcnJl bDsKKwlwanMtPmlubmVycmVsID0gaW5uZXJyZWw7CisJcGpzLT5vdXRlcl9jb3VudCA9CisJCXBn cGFfY29tcHV0ZV9pZGVudGlmaWVyc19ieV9yZWxpZHMocm9vdCwgb3V0ZXJyZWwtPnJlbGlkcywg cGpzLT5yaWRzKTsKKwlwanMtPmlubmVyX2NvdW50ID0KKwkJcGdwYV9jb21wdXRlX2lkZW50aWZp ZXJzX2J5X3JlbGlkcyhyb290LCBpbm5lcnJlbC0+cmVsaWRzLAorCQkJCQkJCQkJCSAgIHBqcy0+ cmlkcyArIHBqcy0+b3V0ZXJfY291bnQpOworCisJLyoKKwkgKiBJZiB3ZSBhbGxvY2F0ZWQgYSBu ZXcgcGdwYV9qb2luX3N0YXRlLCBzZWFyY2ggb3VyIHRyb3ZlIG9mIGFkdmljZSBmb3IKKwkgKiBy ZWxldmFudCBlbnRyaWVzLiBUaGUgdHJvdmUgbG9va3VwIHdpbGwgcmV0dXJuIHRoZSBzYW1lIHJl c3VsdHMgZm9yCisJICogZXZlcnkgb3V0ZXJyZWwvaW5uZXJyZWwgY29tYmluYXRpb24sIHNvIHdl IGRvbid0IG5lZWQgdG8gcmVwZWF0IHRoYXQKKwkgKiB3b3JrIGV2ZXJ5IHRpbWUuCisJICovCisJ aWYgKG5ld19wanMpCisJeworCQlwZ3BhX3Ryb3ZlX3Jlc3VsdCB0cmVzdWx0OworCisJCS8qIEZp bmQgam9pbiBlbnRyaWVzLiAqLworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChwcHMtPnRyb3ZlLCBQR1BB X1RST1ZFX0xPT0tVUF9KT0lOLAorCQkJCQkJICBwanMtPm91dGVyX2NvdW50ICsgcGpzLT5pbm5l cl9jb3VudCwKKwkJCQkJCSAgcGpzLT5yaWRzLCAmdHJlc3VsdCk7CisJCXBqcy0+am9pbl9lbnRy aWVzID0gdHJlc3VsdC5lbnRyaWVzOworCQlwanMtPmpvaW5faW5kZXhlcyA9IHRyZXN1bHQuaW5k ZXhlczsKKworCQkvKiBGaW5kIHJlbCBlbnRyaWVzLiAqLworCQlwZ3BhX3Ryb3ZlX2xvb2t1cChw cHMtPnRyb3ZlLCBQR1BBX1RST1ZFX0xPT0tVUF9SRUwsCisJCQkJCQkgIHBqcy0+b3V0ZXJfY291 bnQgKyBwanMtPmlubmVyX2NvdW50LAorCQkJCQkJICBwanMtPnJpZHMsICZ0cmVzdWx0KTsKKwkJ cGpzLT5yZWxfZW50cmllcyA9IHRyZXN1bHQuZW50cmllczsKKwkJcGpzLT5yZWxfaW5kZXhlcyA9 IHRyZXN1bHQuaW5kZXhlczsKKworCQkvKiBOb3cgdGhhdCB0aGUgbmV3IHBncGFfam9pbl9zdGF0 ZSBpcyBmdWxseSB2YWxpZCwgc2F2ZSBhIHBvaW50ZXIuICovCisJCVNldFJlbE9wdEluZm9FeHRl bnNpb25TdGF0ZShqb2lucmVsLCBwbGFubmVyX2V4dGVuc2lvbl9pZCwgcGpzKTsKKworCQkvKgor CQkgKiBJZiB0aGVyZSB3YXMgbm8gcmVsZXZhbnQgYWR2aWNlIGZvdW5kLCBqdXN0IHJldHVybiBO VUxMLiBUaGlzCisJCSAqIHBncGFfam9pbl9zdGF0ZSB3aWxsIHN0aWNrIGFyb3VuZCBhcyBhIHNv cnQgb2YgbmVnYXRpdmUgY2FjaGUKKwkJICogZW50cnksIHNvIHRoYXQgZnV0dXJlIGNhbGxzIGZv ciB0aGlzIHNhbWUgam9pbnJlbCBxdWlja2x5IHJldHVybgorCQkgKiBOVUxMLgorCQkgKi8KKwkJ aWYgKHBqcy0+am9pbl9pbmRleGVzID09IE5VTEwgJiYgcGpzLT5yZWxfaW5kZXhlcyA9PSBOVUxM KQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHBqczsKK30KKworLyoKKyAqIEVuZm9y Y2UgYW55IHByb3ZpZGVkIGFkdmljZSB0aGF0IGlzIHJlbGV2YW50IHRvIGFueSBtZXRob2Qgb2Yg aW1wbGVtZW50aW5nCisgKiB0aGlzIGpvaW4uCisgKgorICogQWx0aG91Z2ggd2UncmUgcGFzc2Vk IHRoZSBvdXRlcnJlbCBhbmQgaW5uZXJyZWwgaGVyZSwgdGhvc2UgYXJlIGp1c3QKKyAqIHdoYXRl dmVyIHZhbHVlcyBoYXBwZW5lZCB0byBwcm9tcHQgdGhlIGNyZWF0aW9uIG9mIHRoaXMgam9pbnJl bDsgdGhleQorICogc2hvdWxkbid0IHJlYWxseSBpbmZsdWVuY2Ugb3VyIGNob2ljZSBvZiB3aGF0 IGFkdmljZSB0byBhcHBseS4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfam9pbnJlbF9zZXR1cChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwKKwkJCQkgICBSZWxPcHRJbmZv ICpvdXRlcnJlbCwgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJICAgU3BlY2lhbEpvaW5JbmZv ICpzamluZm8sIExpc3QgKnJlc3RyaWN0bGlzdCkKK3sKKwlwZ3BhX2pvaW5fc3RhdGUgKnBqczsK KworCUFzc2VydChibXNfbWVtYmVyc2hpcChqb2lucmVsLT5yZWxpZHMpID09IEJNU19NVUxUSVBM RSk7CisKKwkvKiBHZXQgb3VyIHByaXZhdGUgc3RhdGUgaW5mb3JtYXRpb24gZm9yIHRoaXMgam9p bi4gKi8KKwlwanMgPSBwZ3BhX2dldF9qb2luX3N0YXRlKHJvb3QsIGpvaW5yZWwsIG91dGVycmVs LCBpbm5lcnJlbCk7CisKKwkvKiBJZiB0aGVyZSBpcyByZWxldmFudCBhZHZpY2UsIGNhbGwgYSBo ZWxwZXIgZnVuY3Rpb24gdG8gYXBwbHkgaXQuICovCisJaWYgKHBqcyAhPSBOVUxMKQorCXsKKwkJ dWludDY0CQlvcmlnaW5hbF9tYXNrID0gam9pbnJlbC0+cGdzX21hc2s7CisKKwkJcGdwYV9wbGFu bmVyX2FwcGx5X2pvaW5yZWxfYWR2aWNlKCZqb2lucmVsLT5wZ3NfbWFzaywKKwkJCQkJCQkJCQkg IHJvb3QtPnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkgIHBqcyk7CisKKwkJLyogRW1pdCBkZWJ1Z2dp bmcgbWVzc2FnZSwgaWYgZW5hYmxlZC4gKi8KKwkJaWYgKHBnX3BsYW5fYWR2aWNlX3RyYWNlX21h c2sgJiYgb3JpZ2luYWxfbWFzayAhPSBqb2lucmVsLT5wZ3NfbWFzaykKKwkJCWVyZXBvcnQoV0FS TklORywKKwkJCQkJKGVycm1zZygic3RyYXRlZ3kgbWFzayBmb3Igam9pbiBvbiBSVElzICVzIGNo YW5nZWQgZnJvbSAweCUiIFBSSXg2NCAiIHRvIDB4JSIgUFJJeDY0LAorCQkJCQkJCXBncGFfYm1z X3RvX2NzdHJpbmcoam9pbnJlbC0+cmVsaWRzKSwKKwkJCQkJCQlvcmlnaW5hbF9tYXNrLAorCQkJ CQkJCWpvaW5yZWwtPnBnc19tYXNrKSkpOworCX0KKworCS8qIFBhc3MgY2FsbCB0byBwcmV2aW91 cyBob29rLiAqLworCWlmIChwcmV2X2pvaW5yZWxfc2V0dXApCisJCSgqcHJldl9qb2lucmVsX3Nl dHVwKSAocm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsLAorCQkJCQkJCSAgIHNqaW5m bywgcmVzdHJpY3RsaXN0KTsKK30KKworLyoKKyAqIEVuZm9yY2UgYW55IHByb3ZpZGVkIGFkdmlj ZSB0aGF0IGlzIHJlbGV2YW50IHRvIHRoaXMgcGFydGljdWxhciBtZXRob2Qgb2YKKyAqIGltcGxl bWVudGluZyB0aGlzIHBhcnRpY3VsYXIgam9pbi4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfam9p bl9wYXRoX3NldHVwKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJ CQkgUmVsT3B0SW5mbyAqb3V0ZXJyZWwsIFJlbE9wdEluZm8gKmlubmVycmVsLAorCQkJCQkgSm9p blR5cGUgam9pbnR5cGUsIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSkKK3sKKwlwZ3BhX2pvaW5f c3RhdGUgKnBqczsKKworCUFzc2VydChibXNfbWVtYmVyc2hpcChqb2lucmVsLT5yZWxpZHMpID09 IEJNU19NVUxUSVBMRSk7CisKKwkvKgorCSAqIElmIHdlJ3JlIGNvbnNpZGVyaW5nIGltcGxlbWVu dGluZyBhIHNlbWlqb2luIGJ5IG1ha2luZyBvbmUgc2lkZSB1bmlxdWUsCisJICogbWFrZSBhIG5v dGUgb2YgaXQgaW4gdGhlIHBncGFfcGxhbm5lcl9zdGF0ZS4gU2VlIGNvbW1lbnRzIGZvcgorCSAq IHBncGFfc2pfdW5pcXVlX3JlbCBmb3Igd2h5IHdlIGRvIHRoaXMuCisJICovCisJaWYgKGpvaW50 eXBlID09IEpPSU5fVU5JUVVFX09VVEVSIHx8IGpvaW50eXBlID09IEpPSU5fVU5JUVVFX0lOTkVS KQorCXsKKwkJcGdwYV9wbGFubmVyX3N0YXRlICpwcHM7CisJCVJlbE9wdEluZm8gKnVuaXF1ZXJl bDsKKworCQl1bmlxdWVyZWwgPSBqb2ludHlwZSA9PSBKT0lOX1VOSVFVRV9PVVRFUiA/IG91dGVy cmVsIDogaW5uZXJyZWw7CisJCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShy b290LT5nbG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJCWlmIChwcHMgIT0gTlVMTCAmJgor CQkJKHBwcy0+Z2VuZXJhdGVfYWR2aWNlX3N0cmluZyB8fCBwcHMtPmdlbmVyYXRlX2FkdmljZV9m ZWVkYmFjaykpCisJCXsKKwkJCWJvb2wJCWZvdW5kID0gZmFsc2U7CisKKwkJCS8qIEF2b2lkIGFk ZGluZyBkdXBsaWNhdGVzLiAqLworCQkJZm9yZWFjaF9wdHIocGdwYV9zal91bmlxdWVfcmVsLCB1 ciwgcHBzLT5zal91bmlxdWVfcmVscykKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIHNob3VsZCBh bHdheXMgdXNlIHRoZSBzYW1lIHBvaW50ZXIgZm9yIHRoZSBzYW1lIHBsYW4KKwkJCQkgKiBuYW1l LCBzbyB3ZSBuZWVkIG5vdCB1c2Ugc3RyY21wKCkgaGVyZS4KKwkJCQkgKi8KKwkJCQlpZiAocm9v dC0+cGxhbl9uYW1lID09IHVyLT5wbGFuX25hbWUgJiYKKwkJCQkJYm1zX2VxdWFsKHVuaXF1ZXJl bC0+cmVsaWRzLCB1ci0+cmVsaWRzKSkKKwkJCQl7CisJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJ YnJlYWs7CisJCQkJfQorCQkJfQorCisJCQkvKiBJZiBub3QgYSBkdXBsaWNhdGUsIGFwcGVuZCB0 byB0aGUgbGlzdC4gKi8KKwkJCWlmICghZm91bmQpCisJCQl7CisJCQkJcGdwYV9zal91bmlxdWVf cmVsICp1ciA9IHBhbGxvY19vYmplY3QocGdwYV9zal91bmlxdWVfcmVsKTsKKworCQkJCXVyLT5w bGFuX25hbWUgPSByb290LT5wbGFuX25hbWU7CisJCQkJdXItPnJlbGlkcyA9IHVuaXF1ZXJlbC0+ cmVsaWRzOworCQkJCXBwcy0+c2pfdW5pcXVlX3JlbHMgPSBsYXBwZW5kKHBwcy0+c2pfdW5pcXVl X3JlbHMsIHVyKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIEdldCBvdXIgcHJpdmF0ZSBzdGF0ZSBp bmZvcm1hdGlvbiBmb3IgdGhpcyBqb2luLiAqLworCXBqcyA9IHBncGFfZ2V0X2pvaW5fc3RhdGUo cm9vdCwgam9pbnJlbCwgb3V0ZXJyZWwsIGlubmVycmVsKTsKKworCS8qIElmIHRoZXJlIGlzIHJl bGV2YW50IGFkdmljZSwgY2FsbCBhIGhlbHBlciBmdW5jdGlvbiB0byBhcHBseSBpdC4gKi8KKwlp ZiAocGpzICE9IE5VTEwpCisJeworCQl1aW50NjQJCW9yaWdpbmFsX21hc2sgPSBleHRyYS0+cGdz X21hc2s7CisKKwkJcGdwYV9wbGFubmVyX2FwcGx5X2pvaW5fcGF0aF9hZHZpY2Uoam9pbnR5cGUs CisJCQkJCQkJCQkJCSZleHRyYS0+cGdzX21hc2ssCisJCQkJCQkJCQkJCXJvb3QtPnBsYW5fbmFt ZSwKKwkJCQkJCQkJCQkJcGpzKTsKKworCQkvKiBFbWl0IGRlYnVnZ2luZyBtZXNzYWdlLCBpZiBl bmFibGVkLiAqLworCQlpZiAocGdfcGxhbl9hZHZpY2VfdHJhY2VfbWFzayAmJiBvcmlnaW5hbF9t YXNrICE9IGV4dHJhLT5wZ3NfbWFzaykKKwkJCWVyZXBvcnQoV0FSTklORywKKwkJCQkJKGVycm1z Zygic3RyYXRlZ3kgbWFzayBmb3IgJXMgam9pbiBvbiAlcyB3aXRoIG91dGVyICVzIGFuZCBpbm5l ciAlcyBjaGFuZ2VkIGZyb20gMHglIiBQUkl4NjQgIiB0byAweCUiIFBSSXg2NCwKKwkJCQkJCQlw Z3BhX2pvaW50eXBlX3RvX2NzdHJpbmcoam9pbnR5cGUpLAorCQkJCQkJCXBncGFfYm1zX3RvX2Nz dHJpbmcoam9pbnJlbC0+cmVsaWRzKSwKKwkJCQkJCQlwZ3BhX2Jtc190b19jc3RyaW5nKG91dGVy cmVsLT5yZWxpZHMpLAorCQkJCQkJCXBncGFfYm1zX3RvX2NzdHJpbmcoaW5uZXJyZWwtPnJlbGlk cyksCisJCQkJCQkJb3JpZ2luYWxfbWFzaywKKwkJCQkJCQlleHRyYS0+cGdzX21hc2spKSk7CisJ fQorCisJLyogUGFzcyBjYWxsIHRvIHByZXZpb3VzIGhvb2suICovCisJaWYgKHByZXZfam9pbl9w YXRoX3NldHVwKQorCQkoKnByZXZfam9pbl9wYXRoX3NldHVwKSAocm9vdCwgam9pbnJlbCwgb3V0 ZXJyZWwsIGlubmVycmVsLAorCQkJCQkJCQkgam9pbnR5cGUsIGV4dHJhKTsKK30KKworLyoKKyAq IENhcnJ5IG91dCB3aGF0ZXZlciBzZXR1cCB3b3JrIHdlIG5lZWQgdG8gZG8gYmVmb3JlIHBsYW5u aW5nLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9wbGFubmVyX3NldHVwKFBsYW5uZXJHbG9iYWwg Kmdsb2IsIFF1ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCSAgIGRv dWJsZSAqdHVwbGVfZnJhY3Rpb24sIEV4cGxhaW5TdGF0ZSAqZXMpCit7CisJcGdwYV90cm92ZSAq dHJvdmUgPSBOVUxMOworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCWJvb2wJCWdlbmVyYXRl X2FkdmljZV9mZWVkYmFjayA9IGZhbHNlOworCWJvb2wJCWdlbmVyYXRlX2FkdmljZV9zdHJpbmcg PSBmYWxzZTsKKwlib29sCQluZWVkc19wcHMgPSBmYWxzZTsKKworCS8qCisJICogRGVjaWRlIHdo ZXRoZXIgd2UgbmVlZCB0byBnZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nLiBXZSBtdXN0IGRvIHRo aXMgaWYKKwkgKiB0aGUgdXNlciBoYXMgdG9sZCB1cyB0byBkbyBpdCBjYXRlZ29yaWNhbGx5LCBv ciBpZiBhdCBsZWFzdCBvbmUKKwkgKiBjb2xsZWN0b3IgaXMgZW5hYmxlZCwgb3IgaWYgdGhlIHVz ZXIgaGFzIHJlcXVlc3RlZCBpdCB1c2luZyB0aGUKKwkgKiBFWFBMQUlOIChQTEFOX0FEVklDRSkg b3B0aW9uLgorCSAqLworCWdlbmVyYXRlX2FkdmljZV9zdHJpbmcgPSAocGdfcGxhbl9hZHZpY2Vf YWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzIHx8CisJCQkJCQkJICBwZ19wbGFuX2FkdmljZV9s b2NhbF9jb2xsZWN0b3IgfHwKKwkJCQkJCQkgIHBnX3BsYW5fYWR2aWNlX3NoYXJlZF9jb2xsZWN0 b3IgfHwKKwkJCQkJCQkgIHBnX3BsYW5fYWR2aWNlX3Nob3VsZF9leHBsYWluKGVzKSk7CisJaWYg KGdlbmVyYXRlX2FkdmljZV9zdHJpbmcpCisJCW5lZWRzX3BwcyA9IHRydWU7CisKKwkvKgorCSAq IElmIGFueSBhZHZpY2Ugd2FzIHByb3ZpZGVkLCBidWlsZCBhIHRyb3ZlIG9mIGFkdmljZSBmb3Ig dXNlIGR1cmluZworCSAqIHBsYW5uaW5nLgorCSAqLworCWlmIChwZ19wbGFuX2FkdmljZV9hZHZp Y2UgIT0gTlVMTCAmJiBwZ19wbGFuX2FkdmljZV9hZHZpY2VbMF0gIT0gJ1wwJykKKwl7CisJCUxp c3QJICAgKmFkdmljZV9pdGVtczsKKwkJY2hhcgkgICAqZXJyb3I7CisKKwkJLyoKKwkJICogUGFy c2luZyBzaG91bGRuJ3QgZmFpbCBoZXJlLCBiZWNhdXNlIHdlIG11c3QgaGF2ZSBwcmV2aW91c2x5 IHBhcnNlZAorCQkgKiBzdWNjZXNzZnVsbHkgaW4gcGdfcGxhbl9hZHZpY2VfYWR2aWNlX2NoZWNr X2hvb2ssIGJ1dCBpZiBpdCBkb2VzLAorCQkgKiBlbWl0IGEgd2FybmluZy4KKwkJICovCisJCWFk dmljZV9pdGVtcyA9IHBncGFfcGFyc2UocGdfcGxhbl9hZHZpY2VfYWR2aWNlLCAmZXJyb3IpOwor CQlpZiAoZXJyb3IpCisJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBub3QgcGFyc2UgYWR2aWNlOiAl cyIsIGVycm9yKTsKKworCQkvKgorCQkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGFkdmljZSBz dHJpbmcgd2FzIG5vbi1lbXB0eSBidXQgY29udGFpbmVkIG5vCisJCSAqIGFjdHVhbCBhZHZpY2Us IGUuZy4gaXQgd2FzIGFsbCB3aGl0ZXNwYWNlLgorCQkgKi8KKwkJaWYgKGFkdmljZV9pdGVtcyAh PSBOSUwpCisJCXsKKwkJCXRyb3ZlID0gcGdwYV9idWlsZF90cm92ZShhZHZpY2VfaXRlbXMpOwor CQkJbmVlZHNfcHBzID0gdHJ1ZTsKKworCQkJLyoKKwkJCSAqIElmIHdlIGtub3cgdGhhdCB3ZSdy ZSBydW5uaW5nIHVuZGVyIEVYUExBSU4sIG9yIGlmIHRoZSB1c2VyCisJCQkgKiBoYXMgdG9sZCB1 cyB0byBhbHdheXMgZG8gdGhlIHdvcmssIGdlbmVyYXRlIGFkdmljZSBmZWVkYmFjay4KKwkJCSAq LworCQkJaWYgKGVzICE9IE5VTEwgfHwgcGdfcGxhbl9hZHZpY2VfYWx3YXlzX3N0b3JlX2Fkdmlj ZV9kZXRhaWxzKQorCQkJCWdlbmVyYXRlX2FkdmljZV9mZWVkYmFjayA9IHRydWU7CisJCX0KKwl9 CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisKKwkvKgorCSAqIElmIGFzc2VydHMgYXJl IGVuYWJsZWQsIGFsd2F5cyBidWlsZCBhIHByaXZhdGUgc3RhdGUgb2JqZWN0IGZvcgorCSAqIGNy b3NzLWNoZWNrcy4KKwkgKi8KKwluZWVkc19wcHMgPSB0cnVlOworI2VuZGlmCisKKwkvKgorCSAq IFdlIG9ubHkgY3JlYXRlIGFuZCBpbml0aWFsaXplIGEgcHJpdmF0ZSBzdGF0ZSBvYmplY3QgaWYg aXQncyBuZWVkZWQgZm9yCisJICogc29tZSBwdXJwb3NlLiBUaGF0IGNvdWxkIGJlICgxKSByZWNv cmRpbmcgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gZ2VuZXJhdGUKKwkgKiBhbiBhZHZpY2Ugc3RyaW5n LCAoMikgc3RvcmluZyBhIHRyb3ZlIG9mIHN1cHBsaWVkIGFkdmljZSwgb3IgKDMpCisJICogZmFj aWxpdGF0aW5nIGRlYnVnZ2luZyBjcm9zcy1jaGVja3Mgd2hlbiBhc3NlcnRzIGFyZSBlbmFibGVk LgorCSAqLworCWlmIChuZWVkc19wcHMpCisJeworCQlwcHMgPSBwYWxsb2MwX29iamVjdChwZ3Bh X3BsYW5uZXJfc3RhdGUpOworCQlwcHMtPmV4cGxhaW5fc3RhdGUgPSBlczsKKwkJcHBzLT5nZW5l cmF0ZV9hZHZpY2VfZmVlZGJhY2sgPSBnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2s7CisJCXBwcy0+ Z2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9IGdlbmVyYXRlX2FkdmljZV9zdHJpbmc7CisJCXBwcy0+ dHJvdmUgPSB0cm92ZTsKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCXBwcy0+cmlfY2hl Y2tfaGFzaCA9CisJCQlwZ3BhX3JpX2NoZWNrX2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwg MTAyNCwgTlVMTCk7CisjZW5kaWYKKwkJU2V0UGxhbm5lckdsb2JhbEV4dGVuc2lvblN0YXRlKGds b2IsIHBsYW5uZXJfZXh0ZW5zaW9uX2lkLCBwcHMpOworCX0KK30KKworLyoKKyAqIENhcnJ5IG91 dCB3aGF0ZXZlciB3b3JrIHdlIHdhbnQgdG8gZG8gYWZ0ZXIgcGxhbm5pbmcgaXMgY29tcGxldGUu CisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfc2h1dGRvd24oUGxhbm5lckdsb2JhbCAq Z2xvYiwgUXVlcnkgKnBhcnNlLAorCQkJCQkgIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgUGxh bm5lZFN0bXQgKnBzdG10KQoreworCXBncGFfcGxhbm5lcl9zdGF0ZSAqcHBzOworCXBncGFfdHJv dmUgKnRyb3ZlID0gTlVMTDsKKwlwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgd2Fsa2VyID0gezB9 OwkvKiBwbGFjYXRlIGNvbXBpbGVyICovCisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX2ZlZWRiYWNr ID0gZmFsc2U7CisJYm9vbAkJZ2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9IGZhbHNlOworCUxpc3QJ ICAgKnBncGFfaXRlbXMgPSBOSUw7CisJcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVycyA9 IE5VTEw7CisKKwkvKiBGZXRjaCBvdXIgcHJpdmF0ZSBzdGF0ZSwgc2V0IHVwIGJ5IHBncGFfcGxh bm5lcl9zZXR1cCgpLiAqLworCXBwcyA9IEdldFBsYW5uZXJHbG9iYWxFeHRlbnNpb25TdGF0ZShn bG9iLCBwbGFubmVyX2V4dGVuc2lvbl9pZCk7CisJaWYgKHBwcyAhPSBOVUxMKQorCXsKKwkJdHJv dmUgPSBwcHMtPnRyb3ZlOworCQlnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2sgPSBwcHMtPmdlbmVy YXRlX2FkdmljZV9mZWVkYmFjazsKKwkJZ2VuZXJhdGVfYWR2aWNlX3N0cmluZyA9IHBwcy0+Z2Vu ZXJhdGVfYWR2aWNlX3N0cmluZzsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIHRyeWluZyB0byBn ZW5lcmF0ZSBhbiBhZHZpY2Ugc3RyaW5nIG9yIGlmIHdlJ3JlIHRyeWluZyB0bworCSAqIHByb3Zp ZGUgYWR2aWNlIGZlZWRiYWNrLCB0aGVuIHdlIHdpbGwgbmVlZCB0byBjcmVhdGUgcmFuZ2UgdGFi bGUKKwkgKiBpZGVudGlmaWVycy4KKwkgKi8KKwlpZiAoZ2VuZXJhdGVfYWR2aWNlX3N0cmluZyB8 fCBnZW5lcmF0ZV9hZHZpY2VfZmVlZGJhY2spCisJeworCQlwZ3BhX3BsYW5fd2Fsa2VyKCZ3YWxr ZXIsIHBzdG10LCBwcHMtPnNqX3VuaXF1ZV9yZWxzKTsKKwkJcnRfaWRlbnRpZmllcnMgPSBwZ3Bh X2NyZWF0ZV9pZGVudGlmaWVyc19mb3JfcGxhbm5lZF9zdG10KHBzdG10KTsKKwl9CisKKwkvKiBH ZW5lcmF0ZSB0aGUgYWR2aWNlIHN0cmluZywgaWYgd2UgbmVlZCB0byBkbyBzby4gKi8KKwlpZiAo Z2VuZXJhdGVfYWR2aWNlX3N0cmluZykKKwl7CisJCWNoYXIJICAgKmFkdmljZV9zdHJpbmc7CisJ CVN0cmluZ0luZm9EYXRhIGJ1ZjsKKworCQkvKiBHZW5lcmF0ZSBhIHRleHR1YWwgYWR2aWNlIHN0 cmluZy4gKi8KKwkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCXBncGFfb3V0cHV0X2FkdmljZSgm YnVmLCAmd2Fsa2VyLCBydF9pZGVudGlmaWVycyk7CisJCWFkdmljZV9zdHJpbmcgPSBidWYuZGF0 YTsKKworCQkvKiBJZiB0aGUgYWR2aWNlIHN0cmluZyBpcyBlbXB0eSwgZG9uJ3QgYm90aGVyIGNv bGxlY3RpbmcgaXQuICovCisJCWlmIChhZHZpY2Vfc3RyaW5nWzBdICE9ICdcMCcpCisJCQlwZ3Bh X2NvbGxlY3RfYWR2aWNlKHBzdG10LT5xdWVyeUlkLCBxdWVyeV9zdHJpbmcsIGFkdmljZV9zdHJp bmcpOworCisJCS8qIFNhdmUgdGhlIGFkdmljZSBzdHJpbmcgaW4gdGhlIGZpbmFsIHBsYW4uICov CisJCXBncGFfaXRlbXMgPSBsYXBwZW5kKHBncGFfaXRlbXMsCisJCQkJCQkJIG1ha2VEZWZFbGVt KCJhZHZpY2Vfc3RyaW5nIiwKKwkJCQkJCQkJCQkgKE5vZGUgKikgbWFrZVN0cmluZyhhZHZpY2Vf c3RyaW5nKSwKKwkJCQkJCQkJCQkgLTEpKTsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIHRyeWlu ZyB0byBwcm92aWRlIGFkdmljZSBmZWVkYmFjaywgdGhlbiB3ZSB3aWxsIG5lZWQgdG8KKwkgKiBh bmFseXplIGhvdyBzdWNjZXNzZnVsIHRoZSBhZHZpY2Ugd2FzLgorCSAqLworCWlmIChnZW5lcmF0 ZV9hZHZpY2VfZmVlZGJhY2spCisJeworCQlMaXN0CSAgICpmZWVkYmFjayA9IE5JTDsKKworCQkv KgorCQkgKiBJbmplY3QgYSBOb2RlLXRyZWUgcmVwcmVzZW50YXRpb24gb2YgYWxsIHRoZSB0cm92 ZS1lbnRyeSBmbGFncyBpbnRvCisJCSAqIHRoZSBQbGFubmVkU3RtdC4KKwkJICovCisJCWZlZWRi YWNrID0gcGdwYV9wbGFubmVyX2FwcGVuZF9mZWVkYmFjayhmZWVkYmFjaywKKwkJCQkJCQkJCQkJ CXRyb3ZlLAorCQkJCQkJCQkJCQkJUEdQQV9UUk9WRV9MT09LVVBfU0NBTiwKKwkJCQkJCQkJCQkJ CXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKwkJZmVlZGJhY2sgPSBwZ3BhX3BsYW5uZXJfYXBw ZW5kX2ZlZWRiYWNrKGZlZWRiYWNrLAorCQkJCQkJCQkJCQkJdHJvdmUsCisJCQkJCQkJCQkJCQlQ R1BBX1RST1ZFX0xPT0tVUF9KT0lOLAorCQkJCQkJCQkJCQkJcnRfaWRlbnRpZmllcnMsICZ3YWxr ZXIpOworCQlmZWVkYmFjayA9IHBncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soZmVlZGJhY2ss CisJCQkJCQkJCQkJCQl0cm92ZSwKKwkJCQkJCQkJCQkJCVBHUEFfVFJPVkVfTE9PS1VQX1JFTCwK KwkJCQkJCQkJCQkJCXJ0X2lkZW50aWZpZXJzLCAmd2Fsa2VyKTsKKworCQlwZ3BhX2l0ZW1zID0g bGFwcGVuZChwZ3BhX2l0ZW1zLCBtYWtlRGVmRWxlbSgiZmVlZGJhY2siLAorCQkJCQkJCQkJCQkJ CSAoTm9kZSAqKSBmZWVkYmFjaywKKwkJCQkJCQkJCQkJCQkgLTEpKTsKKwl9CisKKwkvKiBQdXNo IHdoYXRldmVyIGRhdGEgd2UncmUgc2F2aW5nIGludG8gdGhlIFBsYW5uZWRTdG10LiAqLworCWlm IChwZ3BhX2l0ZW1zICE9IE5JTCkKKwkJcHN0bXQtPmV4dGVuc2lvbl9zdGF0ZSA9CisJCQlsYXBw ZW5kKHBzdG10LT5leHRlbnNpb25fc3RhdGUsCisJCQkJCW1ha2VEZWZFbGVtKCJwZ19wbGFuX2Fk dmljZSIsIChOb2RlICopIHBncGFfaXRlbXMsIC0xKSk7CisKKwkvKgorCSAqIElmIGFzc2VydGlv bnMgYXJlIGVuYWJsZWQsIGNyb3NzLWNoZWNrIHRoZSBnZW5lcmF0ZWQgcmFuZ2UgdGFibGUKKwkg KiBpZGVudGlmaWVycy4KKwkgKi8KKwlpZiAocHBzICE9IE5VTEwpCisJCXBncGFfcmlfY2hlY2tl cl92YWxpZGF0ZShwcHMsIHBzdG10KTsKK30KKworLyoKKyAqIEVuZm9yY2Ugb3ZlcmFsbCByZXN0 cmljdGlvbnMgb24gYSBqb2luIHJlbGF0aW9uIHRoYXQgYXBwbHkgdW5pZm9ybWx5CisgKiByZWdh cmRsZXNzIG9mIHRoZSBjaG9pY2Ugb2YgaW5uZXIgYW5kIG91dGVyIHJlbC4KKyAqLworc3RhdGlj IHZvaWQKK3BncGFfcGxhbm5lcl9hcHBseV9qb2lucmVsX2FkdmljZSh1aW50NjQgKnBnc19tYXNr X3AsIGNoYXIgKnBsYW5fbmFtZSwKKwkJCQkJCQkJICBwZ3BhX2pvaW5fc3RhdGUgKnBqcykKK3sK KwlpbnQJCQlpID0gLTE7CisJaW50CQkJZmxhZ3M7CisJYm9vbAkJZ2F0aGVyX2NvbmZsaWN0ID0g ZmFsc2U7CisJdWludDY0CQlnYXRoZXJfbWFzayA9IDA7CisJQml0bWFwc2V0ICAqZ2F0aGVyX3Bh cnRpYWxfbWF0Y2ggPSBOVUxMOworCUJpdG1hcHNldCAgKmdhdGhlcl9mdWxsX21hdGNoID0gTlVM TDsKKwlib29sCQlwYXJ0aXRpb253aXNlX2NvbmZsaWN0ID0gZmFsc2U7CisJaW50CQkJcGFydGl0 aW9ud2lzZV9vdXRjb21lID0gMDsKKwlCaXRtYXBzZXQgICpwYXJ0aXRpb253aXNlX3BhcnRpYWxf bWF0Y2ggPSBOVUxMOworCUJpdG1hcHNldCAgKnBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCA9IE5V TEw7CisKKwkvKiBJdGVyYXRlIG92ZXIgYWxsIHBvc3NpYmx5LXJlbGV2YW50IGFkdmljZS4gKi8K Kwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocGpzLT5yZWxfaW5kZXhlcywgaSkpID49IDAp CisJeworCQlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSA9ICZwanMtPnJlbF9lbnRyaWVzW2ldOwor CQlwZ3BhX2l0bV90eXBlIGl0bTsKKwkJYm9vbAkJZnVsbF9tYXRjaCA9IGZhbHNlOworCQl1aW50 NjQJCW15X2dhdGhlcl9tYXNrID0gMDsKKwkJaW50CQkJbXlfcGFydGl0aW9ud2lzZV9vdXRjb21l ID0gMDsJLyogPjAgeWVzLCA8MCBubyAqLworCisJCS8qCisJCSAqIEZvciBHQVRIRVIgYW5kIEdB VEhFUl9NRVJHRSwgaWYgdGhlIHNwZWNpZmllZCByZWxhdGlvbnMgZXhhY3RseQorCQkgKiBtYXRj aCB0aGlzIGpvaW5yZWwsIGRvIHdoYXRldmVyIHRoZSBhZHZpY2Ugc2F5czsgb3RoZXJ3aXNlLCBk b24ndAorCQkgKiBhbGxvdyBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIGF0IHRoaXMgbGV2ZWwuIEZv ciBOT19HQVRIRVIsIHRoZXJlCisJCSAqIG11c3QgYmUgYSBzaW5nbGUgdGFyZ2V0IHJlbGF0aW9u IHdoaWNoIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhpcworCQkgKiBqb2lucmVsLCBzbyBqdXN0IGRv bid0IGFsbG93IEdhdGhlciBvciBHYXRoZXIgTWVyZ2UgaGVyZSwgZnVsbAorCQkgKiBzdG9wLgor CQkgKi8KKwkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfTk9fR0FUSEVSKQorCQl7CisJCQlt eV9nYXRoZXJfbWFzayA9IFBHU19DT05TSURFUl9OT05QQVJUSUFMOworCQkJZnVsbF9tYXRjaCA9 IHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpbnQJCQl0b3RhbF9jb3VudDsKKworCQkJdG90 YWxfY291bnQgPSBwanMtPm91dGVyX2NvdW50ICsgcGpzLT5pbm5lcl9jb3VudDsKKwkJCWl0bSA9 IHBncGFfaWRlbnRpZmllcnNfbWF0Y2hfdGFyZ2V0KHRvdGFsX2NvdW50LCBwanMtPnJpZHMsCisJ CQkJCQkJCQkJCQllbnRyeS0+dGFyZ2V0KTsKKwkJCUFzc2VydChpdG0gIT0gUEdQQV9JVE1fRElT Sk9JTlQpOworCisJCQlpZiAoaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQkJeworCQkJCWZ1bGxf bWF0Y2ggPSB0cnVlOworCQkJCWlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJ U0UpCisJCQkJCW15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IDE7CisJCQkJZWxzZSBpZiAoZW50 cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVIpCisJCQkJCW15X2dhdGhlcl9tYXNrID0gUEdTX0dB VEhFUjsKKwkJCQllbHNlIGlmIChlbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkK KwkJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfR0FUSEVSX01FUkdFOworCQkJCWVsc2UKKwkJCQkJ ZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgYWR2aWNlIHRhZzogJWQiLAorCQkJCQkJIChpbnQpIGVu dHJ5LT50YWcpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChlbnRyeS0+dGFnID09IFBH UEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQkJeworCQkJCQlteV9wYXJ0aXRpb253aXNlX291dGNv bWUgPSAtMTsKKwkJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsK KwkJCQl9CisJCQkJZWxzZSBpZiAoZW50cnktPnRhZyA9PSBQR1BBX1RBR19HQVRIRVIgfHwKKwkJ CQkJCSBlbnRyeS0+dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJCQl7CisJCQkJCW15 X3BhcnRpdGlvbndpc2Vfb3V0Y29tZSA9IC0xOworCQkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19D T05TSURFUl9OT05QQVJUSUFMOworCQkJCX0KKwkJCQllbHNlCisJCQkJCWVsb2coRVJST1IsICJ1 bmV4cGVjdGVkIGFkdmljZSB0YWc6ICVkIiwKKwkJCQkJCSAoaW50KSBlbnRyeS0+dGFnKTsKKwkJ CX0KKwkJfQorCisJCS8qCisJCSAqIElmIHdlIHNldCBteV9nYXRoZXJfbWFzayB1cCBhYm92ZSwg dGhlbiB3ZSAoMSkgbWFrZSBhIG5vdGUgaWYgdGhlCisJCSAqIGFkdmljZSBjb25mbGljdGVkLCAo MikgcmVtZW1iZXIgdGhlIG1hc2sgdmFsdWUsIGFuZCAoMykgcmVtZW1iZXIKKwkJICogd2hldGhl ciB0aGlzIHdhcyBhIGZ1bGwgb3IgcGFydGlhbCBtYXRjaC4KKwkJICovCisJCWlmIChteV9nYXRo ZXJfbWFzayAhPSAwKQorCQl7CisJCQlpZiAoZ2F0aGVyX21hc2sgIT0gMCAmJiBnYXRoZXJfbWFz ayAhPSBteV9nYXRoZXJfbWFzaykKKwkJCQlnYXRoZXJfY29uZmxpY3QgPSB0cnVlOworCQkJZ2F0 aGVyX21hc2sgPSBteV9nYXRoZXJfbWFzazsKKwkJCWlmIChmdWxsX21hdGNoKQorCQkJCWdhdGhl cl9mdWxsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX2Z1bGxfbWF0Y2gsIGkpOworCQkJ ZWxzZQorCQkJCWdhdGhlcl9wYXJ0aWFsX21hdGNoID0gYm1zX2FkZF9tZW1iZXIoZ2F0aGVyX3Bh cnRpYWxfbWF0Y2gsIGkpOworCQl9CisKKwkJLyoKKwkJICogTGlrZXdpc2UsIGlmIHdlIHNldCBt eV9wYXJ0aXRpb253aXNlX291dGNvbWUgdXAgYWJvdmUsIHRoZW4gd2UgKDEpCisJCSAqIG1ha2Ug YSBub3RlIGlmIHRoZSBhZHZpY2UgY29uZmxpY3RlZCwgKDIpIHJlbWVtYmVyIHdoYXQgdGhlIGRl c2lyZWQKKwkJICogb3V0Y29tZSB3YXMsIGFuZCAoMykgcmVtZW1iZXIgd2hldGhlciB0aGlzIHdh cyBhIGZ1bGwgb3IgcGFydGlhbAorCQkgKiBtYXRjaC4KKwkJICovCisJCWlmIChteV9wYXJ0aXRp b253aXNlX291dGNvbWUgIT0gMCkKKwkJeworCQkJaWYgKHBhcnRpdGlvbndpc2Vfb3V0Y29tZSAh PSAwICYmCisJCQkJcGFydGl0aW9ud2lzZV9vdXRjb21lICE9IG15X3BhcnRpdGlvbndpc2Vfb3V0 Y29tZSkKKwkJCQlwYXJ0aXRpb253aXNlX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCXBhcnRpdGlvbndp c2Vfb3V0Y29tZSA9IG15X3BhcnRpdGlvbndpc2Vfb3V0Y29tZTsKKwkJCWlmIChmdWxsX21hdGNo KQorCQkJCXBhcnRpdGlvbndpc2VfZnVsbF9tYXRjaCA9CisJCQkJCWJtc19hZGRfbWVtYmVyKHBh cnRpdGlvbndpc2VfZnVsbF9tYXRjaCwgaSk7CisJCQllbHNlCisJCQkJcGFydGl0aW9ud2lzZV9w YXJ0aWFsX21hdGNoID0KKwkJCQkJYm1zX2FkZF9tZW1iZXIocGFydGl0aW9ud2lzZV9wYXJ0aWFs X21hdGNoLCBpKTsKKwkJfQorCX0KKworCS8qCisJICogTWFyayBldmVyeSBHYXRoZXItcmVsYXRl ZCBwaWVjZSBvZiBhZHZpY2UgYXMgcGFydGlhbGx5IG1hdGNoZWQsIGFuZCBpZgorCSAqIHRoZSBz ZXQgb2YgdGFyZ2V0cyBleGFjdGx5IG1hdGNoZWQgdGhpcyByZWxhdGlvbiwgZnVsbHkgbWF0Y2hl ZC4gSWYKKwkgKiB0aGVyZSB3YXMgYSBjb25mbGljdCwgbWFyayB0aGVtIGFsbCBhcyBjb25mbGlj dGluZy4KKwkgKi8KKwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTDsKKwlpZiAoZ2F0aGVy X2NvbmZsaWN0KQorCQlmbGFncyB8PSBQR1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVf c2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIGdhdGhlcl9wYXJ0aWFsX21hdGNoLCBmbGFncyk7 CisJZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBq cy0+cmVsX2VudHJpZXMsIGdhdGhlcl9mdWxsX21hdGNoLCBmbGFncyk7CisKKwkvKiBMaWtld2lz ZSBmb3IgcGFydGl0aW9ud2lzZSBhZHZpY2UuICovCisJZmxhZ3MgPSBQR1BBX1RFX01BVENIX1BB UlRJQUw7CisJaWYgKHBhcnRpdGlvbndpc2VfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVf Q09ORkxJQ1RJTkc7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5yZWxfZW50cmllcywgcGFy dGl0aW9ud2lzZV9wYXJ0aWFsX21hdGNoLCBmbGFncyk7CisJZmxhZ3MgfD0gUEdQQV9URV9NQVRD SF9GVUxMOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIHBhcnRpdGlv bndpc2VfZnVsbF9tYXRjaCwgZmxhZ3MpOworCisJLyogSWYgdGhlcmUgaXMgYSBub24tY29uZmxp Y3RpbmcgZ2F0aGVyIHNwZWNpZmljYXRpb24sIGVuZm9yY2UgaXQuICovCisJaWYgKGdhdGhlcl9t YXNrICE9IDAgJiYgIWdhdGhlcl9jb25mbGljdCkKKwl7CisJCSpwZ3NfbWFza19wICY9CisJCQl+ KFBHU19HQVRIRVIgfCBQR1NfR0FUSEVSX01FUkdFIHwgUEdTX0NPTlNJREVSX05PTlBBUlRJQUwp OworCQkqcGdzX21hc2tfcCB8PSBnYXRoZXJfbWFzazsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJl IGlzIGEgbm9uLWNvbmZsaWN0aW5nIHBhcnRpdGlvbndpc2Ugc3BlY2lmaWNhdGlvbiwgZW5mb3Jj ZS4KKwkgKgorCSAqIFRvIGZvcmNlIGEgcGFydGl0aW9ud2lzZSBqb2luLCB3ZSBkaXNhYmxlIGFs bCB0aGUgb3JkaW5hcnkgbWVhbnMgb2YKKwkgKiBwZXJmb3JtaW5nIGEgam9pbiwgYW5kIGluc3Rl YWQgb25seSBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kIHBhdGhzIGhlcmUuCisJICogVG8gcHJldmVu dCBvbmUsIHdlIGp1c3QgZGlzYWJsZSBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kLiAgTm90ZSB0aGF0 IHdlCisJICogbXVzdCBub3QgdW5zZXQgUEdTX0NPTlNJREVSX1BBUlRJVElPTldJU0UgZXZlbiB3 aGVuIHdlIGRvbid0IHdhbnQgYQorCSAqIHBhcnRpdGlvbndpc2Ugam9pbiBoZXJlLCBiZWNhdXNl IHdlIG1pZ2h0IHdhbnQgb25lIGF0IGEgaGlnaGVyIGxldmVsCisJICogdGhhdCBpcyBjb25zdHJ1 Y3RpbmcgdXNpbmcgcGF0aHMgZnJvbSB0aGlzIGxldmVsLgorCSAqLworCWlmIChwYXJ0aXRpb253 aXNlX291dGNvbWUgIT0gMCAmJiAhcGFydGl0aW9ud2lzZV9jb25mbGljdCkKKwl7CisJCWlmIChw YXJ0aXRpb253aXNlX291dGNvbWUgPiAwKQorCQkJKnBnc19tYXNrX3AgPSAoKnBnc19tYXNrX3Ag JiB+UEdTX0pPSU5fQU5ZKSB8CisJCQkJUEdTX0FQUEVORCB8IFBHU19NRVJHRV9BUFBFTkQgfCBQ R1NfQ09OU0lERVJfUEFSVElUSU9OV0lTRTsKKwkJZWxzZQorCQkJKnBnc19tYXNrX3AgJj0gfihQ R1NfQVBQRU5EIHwgUEdTX01FUkdFX0FQUEVORCk7CisJfQorfQorCisvKgorICogRW5mb3JjZSBy ZXN0cmljdGlvbnMgb24gdGhlIGpvaW4gb3JkZXIgb3Igam9pbiBtZXRob2QuCisgKi8KK3N0YXRp YyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbl9wYXRoX2FkdmljZShKb2luVHlwZSBqb2lu dHlwZSwgdWludDY0ICpwZ3NfbWFza19wLAorCQkJCQkJCQkJY2hhciAqcGxhbl9uYW1lLAorCQkJ CQkJCQkJcGdwYV9qb2luX3N0YXRlICpwanMpCit7CisJaW50CQkJaSA9IC0xOworCUJpdG1hcHNl dCAgKmpvX3Blcm1pdF9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBzZXQgICpqb19kZW55X2luZGV4 ZXMgPSBOVUxMOworCUJpdG1hcHNldCAgKmpvX2RlbnlfcmVsX2luZGV4ZXMgPSBOVUxMOworCUJp dG1hcHNldCAgKmptX2luZGV4ZXMgPSBOVUxMOworCWJvb2wJCWptX2NvbmZsaWN0ID0gZmFsc2U7 CisJdWludDMyCQlqb2luX21hc2sgPSAwOworCUJpdG1hcHNldCAgKnNqX3Blcm1pdF9pbmRleGVz ID0gTlVMTDsKKwlCaXRtYXBzZXQgICpzal9kZW55X2luZGV4ZXMgPSBOVUxMOworCisJLyoKKwkg KiBSZWNvbnNpZGVyIFBBUlRJVElPTldJU0UoLi4uKSBhZHZpY2UuCisJICoKKwkgKiBXZSBhbHJl YWR5IHRob3VnaHQgYWJvdXQgdGhpcyBmb3IgdGhlIGpvaW5yZWwgYXMgYSB3aG9sZSwgYnV0IGlu IHNvbWUKKwkgKiBjYXNlcywgcGFydGl0aW9ud2lzZSBhZHZpY2UgY2FuIGFsc28gY29uc3RyYWlu IHRoZSBqb2luIG9yZGVyLiBGb3IKKwkgKiBpbnN0YW5jZSwgaWYgdGhlIGFkdmljZSBzYXlzIFBB UlRJVElPTldJU0UoKHQxIHQyKSksIHdlIHNob3VsZG4ndCBidWlsZAorCSAqIGpvaW4gcGF0aHMg Zm9yIGEgYW55IGpvaW5yZWwgdGhhdCBpbmNsdWRlcyB0MSBvciB0MiB1bmxlc3MgaXQgYWxzbwor CSAqIGluY2x1ZGVzIHRoZSBvdGhlci4gSW4gZ2VuZXJhbCwgdGhlIHBhcml0aW9ud2lzZSBvcGVy YXRpb24gbXVzdCBoYXZlCisJICogYWxyZWFkeSBiZWVuIGNvbXBsZXRlZCB3aXRoaW4gb25lIHNp ZGUgb2YgdGhlIGN1cnJlbnQgam9pbiBvciB0aGUKKwkgKiBvdGhlciwgZWxzZSB0aGUgam9pbiBv cmRlciBpcyBpbXBlcm1pc3NpYmxlLgorCSAqCisJICogTkI6IEl0IG1pZ2h0IHNlZW0gdGVtcHRp bmcgdG8gdHJ5IHRvIGRlYWwgd2l0aCBQQVJUSVRJT05XSVNFIGFkdmlzZQorCSAqIGVudGlyZWx5 IGluIHRoaXMgZnVuY3Rpb24sIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yay4gSGVyZSwgd2UgY2FuIG9u bHkKKwkgKiBhZmZlY3QgdGhlIHBnc19tYXNrIHdpdGhpbiBhIHBhcnRpY3VsYXIgSm9pblBhdGhF eHRyYURhdGEsIHRoYXQgaXMsIGZvcgorCSAqIGEgcGFydGljdWxhciBjaG9pY2Ugb2YgaW5uZXJy ZWwgYW5kIG91dGVycmVsLiBQYXJ0aXRpb253aXNlIHBhdGhzIGFyZQorCSAqIG5vdCBidWlsdCB0 aGF0IHdheSwgc28gd2UgbXVzdCBzZXQgcGdzX21hc2sgZm9yIHRoZSBSZWxPcHRJbmZvLCB3aGlj aAorCSAqIGlzIGJlc3QgZG9uZSBpbiBwZ3BhX3BsYW5uZXJfYXBwbHlfam9pbnJlbF9hZHZpY2Uu CisJICovCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBqcy0+cmVsX2luZGV4ZXMsIGkp KSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmcGpzLT5yZWxfZW50cmll c1tpXTsKKwkJcGdwYV9pdG1fdHlwZSBpbm5lcl9pdG07CisJCXBncGFfaXRtX3R5cGUgb3V0ZXJf aXRtOworCisJCWlmIChlbnRyeS0+dGFnICE9IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCQlj b250aW51ZTsKKworCQlvdXRlcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChw anMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkJICBwanMtPnJpZHMsIGVudHJ5LT50YXJnZXQp OworCQlpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMIHx8CisJCQlvdXRlcl9pdG0gPT0g UEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQkJY29udGludWU7CisKKwkJaW5uZXJfaXRt ID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQocGpzLT5pbm5lcl9jb3VudCwKKwkJCQkJ CQkJCQkJCSAgcGpzLT5yaWRzICsgcGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCSAgZW50 cnktPnRhcmdldCk7CisJCWlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwgfHwKKwkJCWlu bmVyX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9TVUJTRVQpCisJCQljb250aW51ZTsKKwor CQlqb19kZW55X3JlbF9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam9fZGVueV9yZWxfaW5kZXhl cywgaSk7CisJfQorCisJLyogSXRlcmF0ZSBvdmVyIGFkdmljZSB0aGF0IHBlcnRhaW5zIHRvIHRo ZSBqb2luIG9yZGVyIGFuZCBtZXRob2QuICovCisJaSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19u ZXh0X21lbWJlcihwanMtPmpvaW5faW5kZXhlcywgaSkpID49IDApCisJeworCQlwZ3BhX3Ryb3Zl X2VudHJ5ICplbnRyeSA9ICZwanMtPmpvaW5fZW50cmllc1tpXTsKKwkJdWludDMyCQlteV9qb2lu X21hc2s7CisKKwkJLyogSGFuZGxlIGpvaW4gb3JkZXIgYWR2aWNlLiAqLworCQlpZiAoZW50cnkt PnRhZyA9PSBQR1BBX1RBR19KT0lOX09SREVSKQorCQl7CisJCQlpZiAocGdwYV9qb2luX29yZGVy X3Blcm1pdHNfam9pbihwanMtPm91dGVyX2NvdW50LAorCQkJCQkJCQkJCQkgcGpzLT5pbm5lcl9j b3VudCwKKwkJCQkJCQkJCQkJIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJIGVudHJ5KSkKKwkJCQlq b19wZXJtaXRfaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKGpvX3Blcm1pdF9pbmRleGVzLCBpKTsK KwkJCWVsc2UKKwkJCQlqb19kZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihqb19kZW55X2lu ZGV4ZXMsIGkpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBIYW5kbGUgam9pbiBtZXRob2Qg YWR2aWNlLiAqLworCQlteV9qb2luX21hc2sgPSBwZ3BhX2pvaW5fc3RyYXRlZ3lfbWFza19mcm9t X2FkdmljZV90YWcoZW50cnktPnRhZyk7CisJCWlmIChteV9qb2luX21hc2sgIT0gMCkKKwkJewor CQkJYm9vbAkJcGVybWl0OworCQkJYm9vbAkJcmVzdHJpY3RfbWV0aG9kOworCisJCQlpZiAoZW50 cnktPnRhZyA9PSBQR1BBX1RBR19GT1JFSUdOX0pPSU4pCisJCQkJcGVybWl0ID0gcGdwYV9vcGFx dWVfam9pbl9wZXJtaXRzX2pvaW4ocGpzLT5vdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJCQkgICBw anMtPmlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+cmlkcywKKwkJCQkJCQkJCQkJ CQkgICBlbnRyeSwKKwkJCQkJCQkJCQkJCQkgICAmcmVzdHJpY3RfbWV0aG9kKTsKKwkJCWVsc2UK KwkJCQlwZXJtaXQgPSBwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbihwanMtPm91dGVyX2Nv dW50LAorCQkJCQkJCQkJCQkJCSAgIHBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCQkJICAg cGpzLT5yaWRzLAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LAorCQkJCQkJCQkJCQkJCSAgICZyZXN0 cmljdF9tZXRob2QpOworCQkJaWYgKCFwZXJtaXQpCisJCQkJam9fZGVueV9pbmRleGVzID0gYm1z X2FkZF9tZW1iZXIoam9fZGVueV9pbmRleGVzLCBpKTsKKwkJCWVsc2UgaWYgKHJlc3RyaWN0X21l dGhvZCkKKwkJCXsKKwkJCQlqbV9pbmRleGVzID0gYm1zX2FkZF9tZW1iZXIoam1faW5kZXhlcywg aSk7CisJCQkJaWYgKGpvaW5fbWFzayAhPSAwICYmIGpvaW5fbWFzayAhPSBteV9qb2luX21hc2sp CisJCQkJCWptX2NvbmZsaWN0ID0gdHJ1ZTsKKwkJCQlqb2luX21hc2sgPSBteV9qb2luX21hc2s7 CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBzZW1pam9pbiB1bmlxdWVu ZXNzIGFkdmljZS4gKi8KKwkJaWYgKGVudHJ5LT50YWcgPT0gUEdQQV9UQUdfU0VNSUpPSU5fVU5J UVVFIHx8CisJCQllbnRyeS0+dGFnID09IFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUUpCisJ CXsKKwkJCWJvb2wJCW91dGVyX3NpZGVfbnVsbGFibGU7CisJCQlib29sCQlyZXN0cmljdF9tZXRo b2Q7CisKKwkJCS8qIFBsYW5uZXIgaGFzIG51bGxhYmxlIHNpZGUgb2YgdGhlIHNlbWlqb2luIG9u IHRoZSBvdXRlciBzaWRlPyAqLworCQkJb3V0ZXJfc2lkZV9udWxsYWJsZSA9IChqb2ludHlwZSA9 PSBKT0lOX1VOSVFVRV9PVVRFUiB8fAorCQkJCQkJCQkgICBqb2ludHlwZSA9PSBKT0lOX1JJR0hU X1NFTUkpOworCisJCQlpZiAoIXBncGFfc2VtaWpvaW5fcGVybWl0c19qb2luKHBqcy0+b3V0ZXJf Y291bnQsCisJCQkJCQkJCQkJCXBqcy0+aW5uZXJfY291bnQsCisJCQkJCQkJCQkJCXBqcy0+cmlk cywKKwkJCQkJCQkJCQkJZW50cnksCisJCQkJCQkJCQkJCW91dGVyX3NpZGVfbnVsbGFibGUsCisJ CQkJCQkJCQkJCSZyZXN0cmljdF9tZXRob2QpKQorCQkJCWpvX2RlbnlfaW5kZXhlcyA9IGJtc19h ZGRfbWVtYmVyKGpvX2RlbnlfaW5kZXhlcywgaSk7CisJCQllbHNlIGlmIChyZXN0cmljdF9tZXRo b2QpCisJCQl7CisJCQkJYm9vbAkJYWR2aWNlX3VuaXF1ZTsKKwkJCQlib29sCQlqdF91bmlxdWU7 CisJCQkJYm9vbAkJanRfbm9uX3VuaXF1ZTsKKworCQkJCS8qIEFkdmljZSB3YW50cyB0byB1bmlx dWUtaWZ5IGFuZCB1c2UgYSByZWd1bGFyIGpvaW4/ICovCisJCQkJYWR2aWNlX3VuaXF1ZSA9IChl bnRyeS0+dGFnID09IFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRSk7CisKKwkJCQkvKiBQbGFubmVy IGlzIHRyeWluZyB0byB1bmlxdWUtaWZ5IGFuZCB1c2UgYSByZWd1bGFyIGpvaW4/ICovCisJCQkJ anRfdW5pcXVlID0gKGpvaW50eXBlID09IEpPSU5fVU5JUVVFX0lOTkVSIHx8CisJCQkJCQkJIGpv aW50eXBlID09IEpPSU5fVU5JUVVFX09VVEVSKTsKKworCQkJCS8qIFBsYW5uZXIgaXMgdHJ5aW5n IGEgc2VtaS1qb2luLCB3aXRob3V0IHVuaXF1ZS1pZnlpbmc/ICovCisJCQkJanRfbm9uX3VuaXF1 ZSA9IChqb2ludHlwZSA9PSBKT0lOX1NFTUkgfHwKKwkJCQkJCQkJIGpvaW50eXBlID09IEpPSU5f UklHSFRfU0VNSSk7CisKKwkJCQlpZiAoIWp0X3VuaXF1ZSAmJiAhanRfbm9uX3VuaXF1ZSkKKwkJ CQl7CisJCQkJCS8qCisJCQkJCSAqIFRoaXMgZG9lc24ndCBzZWVtIHRvIGJlIGEgc2VtaWpvaW4g dG8gd2hpY2ggU0pfVU5JUVVFCisJCQkJCSAqIG9yIFNKX05PTl9VTklRVUUgY2FuIGJlIGFwcGxp ZWQuCisJCQkJCSAqLworCQkJCQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9JTkFQUExJQ0FCTEU7 CisJCQkJfQorCQkJCWVsc2UgaWYgKGFkdmljZV91bmlxdWUgIT0ganRfdW5pcXVlKQorCQkJCQlz al9kZW55X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzal9kZW55X2luZGV4ZXMsIGkpOworCQkJ CWVsc2UKKwkJCQkJc2pfcGVybWl0X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzal9wZXJtaXRf aW5kZXhlcywgaSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCS8qCisJICogSWYg dGhlIGFkdmljZSBpbmRpY2F0ZXMgYm90aCB0aGF0IHRoaXMgam9pbiBvcmRlciBpcyBwZXJtaXNz aWJsZSBhbmQKKwkgKiBhbHNvIHRoYXQgaXQgaXNuJ3QsIHRoZW4gbWFyayBhZHZpY2UgcmVsYXRl ZCB0byB0aGUgam9pbiBvcmRlciBhcworCSAqIGNvbmZsaWN0aW5nLgorCSAqLworCWlmIChqb19w ZXJtaXRfaW5kZXhlcyAhPSBOVUxMICYmCisJCShqb19kZW55X2luZGV4ZXMgIT0gTlVMTCB8fCBq b19kZW55X3JlbF9pbmRleGVzICE9IE5VTEwpKQorCXsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3Mo cGpzLT5qb2luX2VudHJpZXMsIGpvX3Blcm1pdF9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NP TkZMSUNUSU5HKTsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIGpv X2RlbnlfaW5kZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisJCXBncGFfdHJv dmVfc2V0X2ZsYWdzKHBqcy0+cmVsX2VudHJpZXMsIGpvX2RlbnlfcmVsX2luZGV4ZXMsCisJCQkJ CQkJIFBHUEFfVEVfQ09ORkxJQ1RJTkcpOworCX0KKworCS8qCisJICogSWYgbW9yZSB0aGFuIG9u ZSBqb2luIG1ldGhvZCBzcGVjaWZpY2F0aW9uIGlzIHJlbGV2YW50IGhlcmUgYW5kIHRoZXkKKwkg KiBkaWZmZXIsIG1hcmsgdGhlbSBhbGwgYXMgY29uZmxpY3RpbmcuCisJICovCisJaWYgKGptX2Nv bmZsaWN0KQorCQlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhwanMtPmpvaW5fZW50cmllcywgam1faW5k ZXhlcywKKwkJCQkJCQkgUEdQQV9URV9DT05GTElDVElORyk7CisKKwkvKiBJZiBzZW1pam9pbiBh ZHZpY2Ugc2F5cyBib3RoIHllcyBhbmQgbm8sIG1hcmsgaXQgYWxsIGFzIGNvbmZsaWN0aW5nLiAq LworCWlmIChzal9wZXJtaXRfaW5kZXhlcyAhPSBOVUxMICYmIHNqX2RlbnlfaW5kZXhlcyAhPSBO VUxMKQorCXsKKwkJcGdwYV90cm92ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIHNqX3Bl cm1pdF9pbmRleGVzLAorCQkJCQkJCSBQR1BBX1RFX0NPTkZMSUNUSU5HKTsKKwkJcGdwYV90cm92 ZV9zZXRfZmxhZ3MocGpzLT5qb2luX2VudHJpZXMsIHNqX2RlbnlfaW5kZXhlcywKKwkJCQkJCQkg UEdQQV9URV9DT05GTElDVElORyk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGFkdmlzZWQg dG8gZGVueSB0aGlzIGpvaW4gb3JkZXIsIHRoZW4gZG8gc28uIEhvd2V2ZXIsIGlmIHdlCisJICog d2VyZSBhbHNvIGFkdmlzZWQgdG8gcGVybWl0IGl0LCB0aGVuIGRvIG5vdGhpbmcsIHNpbmNlIHRo ZSBhZHZpY2UKKwkgKiBjb25mbGljdHMuCisJICovCisJaWYgKChqb19kZW55X2luZGV4ZXMgIT0g TlVMTCB8fCBqb19kZW55X3JlbF9pbmRleGVzICE9IE5VTEwpICYmCisJCWpvX3Blcm1pdF9pbmRl eGVzID09IE5VTEwpCisJCSpwZ3NfbWFza19wID0gKCpwZ3NfbWFza19wICYgflBHU19KT0lOX0FO WSkgfCBqb2luX21hc2s7CisKKwkvKgorCSAqIElmIHdlIHdlcmUgYWR2aXNlZCB0byByZXN0cmlj dCB0aGUgam9pbiBtZXRob2QsIHRoZW4gZG8gc28uIEhvd2V2ZXIsIGlmCisJICogd2UgZ290IGNv bmZsaWN0aW5nIGpvaW4gbWV0aG9kIGFkdmljZSwgdGhlbiBpbnN0ZWFkIGRvIG5vdGhpbmcuCisJ ICovCisJaWYgKGpvaW5fbWFzayAhPSAwICYmICFqbV9jb25mbGljdCkKKwkJKnBnc19tYXNrX3Ag PSAoKnBnc19tYXNrX3AgJiB+UEdTX0pPSU5fQU5ZKSB8IGpvaW5fbWFzazsKKworCS8qCisJICog SWYgd2Ugd2VyZSBhZHZpc2VkIHRvIGRlbnkgdGhpcyBkdWUgdG8gc2VtaWpvaW4tcmVsYXRlZCBh ZHZpY2UsIHRoZW4gZG8KKwkgKiBzby4gSG93ZXZlciwgaWYgd2UgZ290IGNvbmZsaWN0aW5nIHNl bWlqb2luIGFkdmljZSwgdGhlbiBpbnN0ZWFkIGRvCisJICogbm90aGluZy4KKwkgKi8KKwlpZiAo c2pfZGVueV9pbmRleGVzICE9IE5VTEwgJiYgc2pfcGVybWl0X2luZGV4ZXMgPT0gTlVMTCkKKwkJ KnBnc19tYXNrX3AgPSAoKnBnc19tYXNrX3AgJiB+UEdTX0pPSU5fQU5ZKSB8IGpvaW5fbWFzazsK K30KKworLyoKKyAqIFRyYW5zbGF0ZSBhbiBhZHZpY2UgdGFnIGludG8gYSBwYXRoIGdlbmVyYXRp b24gc3RyYXRlZ3kgbWFzay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0 aCB0YWcgdHlwZXMgdGhhdCBkb24ndCByZXByZXNlbnQgam9pbgorICogc3RyYXRlZ2llcy4gSW4g c3VjaCBjYXNlcywgd2UganVzdCByZXR1cm4gMCwgd2hpY2ggY2FuJ3QgYmUgY29uZnVzZWQgd2l0 aAorICogYSB2YWxpZCBtYXNrLgorICovCitzdGF0aWMgdWludDY0CitwZ3BhX2pvaW5fc3RyYXRl Z3lfbWFza19mcm9tX2FkdmljZV90YWcocGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnKQoreworCXN3 aXRjaCAodGFnKQorCXsKKwkJY2FzZSBQR1BBX1RBR19GT1JFSUdOX0pPSU46CisJCQlyZXR1cm4g UEdTX0ZPUkVJR05KT0lOOworCQljYXNlIFBHUEFfVEFHX01FUkdFX0pPSU5fUExBSU46CisJCQly ZXR1cm4gUEdTX01FUkdFSk9JTl9QTEFJTjsKKwkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX01B VEVSSUFMSVpFOgorCQkJcmV0dXJuIFBHU19NRVJHRUpPSU5fTUFURVJJQUxJWkU7CisJCWNhc2Ug UEdQQV9UQUdfTkVTVEVEX0xPT1BfUExBSU46CisJCQlyZXR1cm4gUEdTX05FU1RMT09QX1BMQUlO OworCQljYXNlIFBHUEFfVEFHX05FU1RFRF9MT09QX01BVEVSSUFMSVpFOgorCQkJcmV0dXJuIFBH U19ORVNUTE9PUF9NQVRFUklBTElaRTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NRU1P SVpFOgorCQkJcmV0dXJuIFBHU19ORVNUTE9PUF9NRU1PSVpFOworCQljYXNlIFBHUEFfVEFHX0hB U0hfSk9JTjoKKwkJCXJldHVybiBQR1NfSEFTSEpPSU47CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4g MDsKKwl9Cit9CisKKy8qCisgKiBEb2VzIGEgY2VydGFpbiBpdGVtIG9mIGpvaW4gb3JkZXIgYWR2 aWNlIHBlcm1pdCBhIGNlcnRhaW4gam9pbj8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfam9pbl9v cmRlcl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJ CQkJIHBncGFfaWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgcGdwYV90cm92ZV9lbnRyeSAqZW50 cnkpCit7CisJYm9vbAkJbG9vcCA9IHRydWU7CisJYm9vbAkJc3VibGlzdCA9IGZhbHNlOworCWlu dAkJCWxlbmd0aDsKKwlpbnQJCQlvdXRlcl9sZW5ndGg7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0 YXJnZXQgPSBlbnRyeS0+dGFyZ2V0OworCXBncGFfYWR2aWNlX3RhcmdldCAqcHJlZml4X3Rhcmdl dDsKKworCS8qIFdlIGRlZmluaXRlbHkgaGF2ZSBhdCBsZWFzdCBhIHBhcnRpYWwgbWF0Y2ggZm9y IHRoaXMgdHJvdmUgZW50cnkuICovCisJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfUEFS VElBTDsKKworCS8qCisJICogRmluZCB0aGUgaW5uZXJtb3N0IHN1Ymxpc3QgdGhhdCBjb250YWlu cyBhbGwga2V5czsgaWYgbm8gc3VibGlzdCBkb2VzLAorCSAqIHRoZW4gY29udGludWUgcHJvY2Vz c2luZyB3aXRoIHRoZSB0b3BsZXZlbCBsaXN0LgorCSAqCisJICogRm9yIGV4YW1wbGUsIGlmIHRo ZSBhZHZpY2Ugc2F5cyBKT0lOX09SREVSKHQxIHQyICh0MyB0NCB0NSkpLCB0aGVuIHdlCisJICog c2hvdWxkIGV2YWx1YXRlIGpvaW5zIHRoYXQgb25seSBpbnZvbHZlIHQzLCB0NCwgYW5kL29yIHQ1 IGFnYWluc3QgdGhlCisJICogKHQzIHQ0IHQ1KSBzdWJsaXN0LCBhbmQgb3RoZXJzIGFnYWluc3Qg dGhlIGZ1bGwgbGlzdC4KKwkgKgorCSAqIE5vdGUgdGhhdCAoMSkgb3V0ZXJtb3N0IHN1Ymxpc3Qg aXMgYWx3YXlzIG9yZGVyZWQgYW5kICgyKSB3aGVuZXZlciB3ZQorCSAqIHpvb20gaW50byBhbiB1 bm9yZGVyZWQgc3VibGlzdCwgd2UgaW5zdGFudGx5IGFjY2VwdCB0aGUgcHJvcG9zZWQgam9pbi4K KwkgKiBJZiB0aGUgYWR2aWNlIHNheXMgSk9JTl9PUkRFUih0MSB0MiB7dDMgdDQgdDV9KSwgYW55 IGFwcHJvYWNoIHRvCisJICogam9pbmluZyB0MywgdDQsIGFuZC9vciB0NSBpcyBhY2NlcHRhYmxl LgorCSAqLworCXdoaWxlIChsb29wKQorCXsKKwkJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQ QV9UQVJHRVRfT1JERVJFRF9MSVNUKTsKKworCQlsb29wID0gZmFsc2U7CisJCWZvcmVhY2hfcHRy KHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxkcmVuKQorCQl7 CisJCQlwZ3BhX2l0bV90eXBlIGl0bTsKKworCQkJaWYgKGNoaWxkX3RhcmdldC0+dHR5cGUgPT0g UEdQQV9UQVJHRVRfSURFTlRJRklFUikKKwkJCQljb250aW51ZTsKKworCQkJaXRtID0gcGdwYV9p ZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQgKyBpbm5lcl9jb3VudCwKKwkJCQkJ CQkJCQkJCXJpZHMsIGNoaWxkX3RhcmdldCk7CisJCQlpZiAoaXRtID09IFBHUEFfSVRNX0VRVUFM IHx8IGl0bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQpCisJCQl7CisJCQkJaWYgKGNoaWxk X3RhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKQorCQkJCXsKKwkJCQkJ dGFyZ2V0ID0gY2hpbGRfdGFyZ2V0OworCQkJCQlzdWJsaXN0ID0gdHJ1ZTsKKwkJCQkJbG9vcCA9 IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlBc3NlcnQo Y2hpbGRfdGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9VTk9SREVSRURfTElTVCk7CisJCQkJ CXJldHVybiB0cnVlOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogVHJ5IHRvIGZp bmQgYSBwcmVmaXggb2YgdGhlIHNlbGVjdGVkIGpvaW4gb3JkZXIgbGlzdCB0aGF0IGlzIGV4YWN0 bHkKKwkgKiBlcXVhbCB0byB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUgcHJvcG9zZWQgam9pbi4KKwkg Ki8KKwlsZW5ndGggPSBsaXN0X2xlbmd0aCh0YXJnZXQtPmNoaWxkcmVuKTsKKwlwcmVmaXhfdGFy Z2V0ID0gcGFsbG9jMF9vYmplY3QocGdwYV9hZHZpY2VfdGFyZ2V0KTsKKwlwcmVmaXhfdGFyZ2V0 LT50dHlwZSA9IFBHUEFfVEFSR0VUX09SREVSRURfTElTVDsKKwlmb3IgKG91dGVyX2xlbmd0aCA9 IDE7IG91dGVyX2xlbmd0aCA8PSBsZW5ndGg7ICsrb3V0ZXJfbGVuZ3RoKQorCXsKKwkJcGdwYV9p dG1fdHlwZSBpdG07CisKKwkJLyogQXZvaWQgbGVha2luZyBtZW1vcnkgaW4gZXZlcnkgbG9vcCBp dGVyYXRpb24uICovCisJCWlmIChwcmVmaXhfdGFyZ2V0LT5jaGlsZHJlbiAhPSBOVUxMKQorCQkJ bGlzdF9mcmVlKHByZWZpeF90YXJnZXQtPmNoaWxkcmVuKTsKKwkJcHJlZml4X3RhcmdldC0+Y2hp bGRyZW4gPSBsaXN0X2NvcHlfaGVhZCh0YXJnZXQtPmNoaWxkcmVuLAorCQkJCQkJCQkJCQkJIG91 dGVyX2xlbmd0aCk7CisKKwkJLyogU2VhcmNoLCBob3BpbmcgdG8gZmluZCBhbiBleGFjdCBtYXRj aC4gKi8KKwkJaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQs IHJpZHMsIHByZWZpeF90YXJnZXQpOworCQlpZiAoaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQkJ YnJlYWs7CisKKwkJLyoKKwkJICogSWYgdGhlIHByZWZpeCBvZiB0aGUgam9pbiBvcmRlciBsaXN0 IHRoYXQgd2UncmUgY29uc2lkZXJpbmcKKwkJICogaW5jbHVkZXMgc29tZSBidXQgbm90IGFsbCBv ZiB0aGUgb3V0ZXIgcmVscywgd2UgY2FuIG1ha2UgdGhlIHByZWZpeAorCQkgKiBsb25nZXIgdG8g ZmluZCBhbiBleGFjdCBtYXRjaC4gQnV0IHRoZSBhZHZpY2UgaGFzbid0IG1lbnRpb25lZAorCQkg KiBldmVyeXRoaW5nIHRoYXQncyBwYXJ0IG9mIG91ciBvdXRlciByZWwgeWV0LCBidXQgaGFzIG1l bnRpb25lZAorCQkgKiB0aGluZ3MgdGhhdCBhcmUgbm90LCB0aGVuIHRoaXMgam9pbiBkb2Vzbid0 IG1hdGNoIHRoZSBqb2luIG9yZGVyCisJCSAqIGxpc3QuCisJCSAqLworCQlpZiAoaXRtICE9IFBH UEFfSVRNX1RBUkdFVFNfQVJFX1NVQlNFVCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKgor CSAqIElmIHRoZSBwcmV2aW91cyBsb29wZWQgc3RvcHBlZCBiZWZvcmUgdGhlIHByZWZpeF90YXJn ZXQgaW5jbHVkZWQgdGhlCisJICogZW50aXJlIGpvaW4gb3JkZXIgbGlzdCwgdGhlbiB0aGUgbmV4 dCBtZW1iZXIgb2YgdGhlIGpvaW4gb3JkZXIgbGlzdAorCSAqIG11c3QgZXhhY3RseSBtYXRjaCB0 aGUgaW5uZXIgc2lkZSBvZiB0aGUgam9pbi4KKwkgKgorCSAqIEV4YW1wbGU6IEdpdmVuIEpPSU5f T1JERVIodDEgdDIgKHQzIHQ0IHQ1KSksIGlmIHRoZSBvdXRlciBzaWRlIG9mIHRoZQorCSAqIGN1 cnJlbnQgam9pbiBpbmNsdWRlcyBvbmx5IHQxLCB0aGVuIHRoZSBpbm5lciBzaWRlIG11c3QgYmUg ZXhhY3RseSB0MjsKKwkgKiBpZiB0aGUgb3V0ZXIgc2lkZSBpbmNsdWRlcyBib3RoIHQxIGFuZCB0 MiwgdGhlbiB0aGUgaW5uZXIgc2lkZSBtdXN0CisJICogaW5jbHVkZSBleGFjdGx5IHQzLCB0NCwg YW5kIHQ1LgorCSAqLworCWlmIChvdXRlcl9sZW5ndGggPCBsZW5ndGgpCisJeworCQlwZ3BhX2Fk dmljZV90YXJnZXQgKmlubmVyX3RhcmdldDsKKwkJcGdwYV9pdG1fdHlwZSBpdG07CisKKwkJaW5u ZXJfdGFyZ2V0ID0gbGlzdF9udGgodGFyZ2V0LT5jaGlsZHJlbiwgb3V0ZXJfbGVuZ3RoKTsKKwor CQlpdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChpbm5lcl9jb3VudCwgcmlkcyAr IG91dGVyX2NvdW50LAorCQkJCQkJCQkJCQlpbm5lcl90YXJnZXQpOworCisJCS8qCisJCSAqIEJl Zm9yZSByZXR1cm5pbmcsIGNvbnNpZGVyIHdoZXRoZXIgd2UgbmVlZCB0byBtYXJrIHRoaXMgZW50 cnkgYXMKKwkJICogZnVsbHkgbWF0Y2hlZC4gSWYgd2UncmUgY29uc2lkZXJpbmcgdGhlIGZ1bGwg bGlzdCByYXRoZXIgdGhhbiBhCisJCSAqIHN1Ymxpc3QsIGFuZCBpZiB3ZSBmb3VuZCBldmVyeSBp dGVtIGJ1dCBvbmUgb24gdGhlIG91dGVyIHNpZGUgb2YKKwkJICogdGhlIGpvaW4gYW5kIHRoZSBs YXN0IGl0ZW0gb24gdGhlIGlubmVyIHNpZGUgb2YgdGhlIGpvaW4sIHRoZW4gdGhlCisJCSAqIGFu c3dlciBpcyB5ZXMuCisJCSAqLworCQlpZiAoIXN1Ymxpc3QgJiYgb3V0ZXJfbGVuZ3RoICsgMSA9 PSBsZW5ndGggJiYgaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCQkJZW50cnktPmZsYWdzIHw9IFBH UEFfVEVfTUFUQ0hfRlVMTDsKKworCQlyZXR1cm4gKGl0bSA9PSBQR1BBX0lUTV9FUVVBTCk7CisJ fQorCisJLyoKKwkgKiBJZiB3ZSBnZXQgaGVyZSwgdGhlbiB0aGUgb3V0ZXIgc2lkZSBvZiB0aGUg am9pbiBpbmNsdWRlcyB0aGUgZW50aXJldHkKKwkgKiBvZiB0aGUgam9pbiBvcmRlciBsaXN0LiBJ biB0aGlzIGNhc2UsIHdlIGJlaGF2ZSBkaWZmZXJlbnRseSBkZXBlbmRpbmcKKwkgKiBvbiB3aGV0 aGVyIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIHRvcC1sZXZlbCBqb2luIG9yZGVyIGxpc3Qgb3Igc3Vi bGlzdC4KKwkgKiBBdCB0aGUgdG9wLWxldmVsLCB3ZSB0cmVhdCB0aGUgc3BlY2lmaWVkIGxpc3Qg YXMgbWFuZGF0aW5nIHRoYXQgdGhlCisJICogYWN0dWFsIGpvaW4gb3JkZXIgaGFzIHRoZSBnaXZl biBsaXN0IGFzIGEgcHJlZml4LCBidXQgYSBzdWJsaXN0CisJICogcmVxdWlyZXMgYW4gZXhhY3Qg bWF0Y2guCisJICoKKwkgKiBFeG1hcGxlOiBHaXZlbiBKT0lOX09SREVSKHQxIHQyICh0MyB0NCB0 NSkpLCB3ZSBtdXN0IHN0YXJ0IGJ5IGpvaW5pbmcKKwkgKiBhbGwgZml2ZSBvZiB0aG9zZSByZWxh dGlvbnMgYW5kIGluIHRoYXQgc2VxdWVuY2UsIGJ1dCBvbmNlIHRoYXQgaXMKKwkgKiBkb25lLCBp dCdzIE9LIHRvIGpvaW4gYW55IG90aGVyIHJlbHMgdGhhdCBhcmUgcGFydCBvZiB0aGUgam9pbiBw cm9ibGVtLgorCSAqIFRoaXMgYWxsb3dzIGEgdXNlciB0byBzcGVjaWZ5IHRoZSBkcml2aW5nIHRh YmxlIGFuZCBwZXJoYXBzIHRoZSBmaXJzdAorCSAqIGZldyB0aGluZ3MgdG8gd2hpY2ggaXQgc2hv dWxkIGJlIGpvaW5lZCB3aGlsZSBsZWF2aW5nIHRoZSByZXN0IG9mIHRoZQorCSAqIGpvaW4gb3Jk ZXIgdXAgdGhlIG9wdGltaXplci4gQnV0IGl0IHNlZW1zIGxpa2UgaXQgd291bGQgYmUgc3VycHJp c2luZywKKwkgKiBnaXZlbiB0aGF0IHNwZWNpZmljYXRpb24sIGlmIHRoZSB1c2VyIGNvdWxkIGFk ZCB0NiB0byB0aGUgKHQzIHQ0IHQ1KQorCSAqIHN1Yi1qb2luLCBzbyB3ZSBkb24ndCBhbGxvdyB0 aGF0LiBJZiB3ZSBkaWQgd2FudCB0byBhbGxvdyBpdCwgdGhlIGxvZ2ljCisJICogZWFybGllciBp biB0aGlzIGZ1bmN0aW9uIHdvdWxkIHJlcXVpcmUgc3Vic3RhbnRpYWwgYWRqdXN0bWVudDogd2Ug Y291bGQKKwkgKiBhbGxvdyB0aGUgdDMtdDQtdDUtdDYgam9pbiB0byBiZSBidWlsdCBoZXJlLCBi dXQgdGhlIG5leHQgc3RlcCBvZgorCSAqIGpvaW5pbmcgdDEtdDIgdG8gdGhlIHJlc3VsdCB3b3Vs ZCBzdGlsbCBiZSByZWplY3RlZC4KKwkgKi8KKwlpZiAoIXN1Ymxpc3QpCisJCWVudHJ5LT5mbGFn cyB8PSBQR1BBX1RFX01BVENIX0ZVTEw7CisJcmV0dXJuICFzdWJsaXN0OworfQorCisvKgorICog RG9lcyBhIGNlcnRhaW4gaXRlbSBvZiBqb2luIG1ldGhvZCBhZHZpY2UgcGVybWl0IGEgY2VydGFp biBqb2luPworICoKKyAqIEFkdmljZSBzdWNoIGFzIEhBU0hfSk9JTigoeCB5KSkgbWVhbnMgdGhh dCB0aGVyZSBzaG91bGQgYmUgYSBoYXNoIGpvaW4gd2l0aAorICogZXhhY3RseSB4IGFuZCB5IG9u IHRoZSBpbm5lciBzaWRlLiBPYnZpb3VzbHksIHRoaXMgbWVhbnMgdGhhdCBpZiB3ZSBhcmUKKyAq IGNvbnNpZGVyaW5nIGEgam9pbiB3aXRoIGV4YWN0bHkgeCBhbmQgeSBvbiB0aGUgaW5uZXIgc2lk ZSwgd2Ugc2hvdWxkIGVuZm9yY2UKKyAqIHRoZSB1c2Ugb2YgYSBoYXNoIGpvaW4uIEhvd2V2ZXIs IGl0IGFsc28gbWVhbnMgdGhhdCB3ZSBtdXN0IHJlamVjdCBzb21lCisgKiBpbmNvbXBhdGlibGUg am9pbiBvcmRlcnMgZW50aXJlbHkuICBGb3IgZXhhbXBsZSwgYSBqb2luIHdpdGggZXhhY3RseSB4 CisgKiBhbmQgeSBvbiB0aGUgb3V0ZXIgc2lkZSBzaG91bGRuJ3QgYmUgYWxsb3dlZCwgYmVjYXVz ZSBzdWNoIHBhdGhzIG1pZ2h0IHdpbgorICogb3ZlciB0aGUgYWR2aWNlLWRyaXZlbiBwYXRoIG9u IGNvc3QuCisgKgorICogVG8gYWNjb21tb2RhdGUgdGhlc2UgcmVxdWlyZW1lbnRzLCB0aGlzIGZ1 bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgam9pbgorICogc2hvdWxkIGJlIGFsbG93ZWQgYW5k IGZhbHNlIGlmIGl0IHNob3VsZCBub3QuIEZ1cnRoZXJtb3JlLCAqcmVzdHJpY3RfbWV0aG9kCisg KiBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGUgam9pbiBtZXRob2Qgc2hvdWxkIGJlIGVuZm9yY2VkIGFu ZCBmYWxzZSBpZiBub3QuCisgKi8KK3N0YXRpYyBib29sCitwZ3BhX2pvaW5fbWV0aG9kX3Blcm1p dHNfam9pbihpbnQgb3V0ZXJfY291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFf aWRlbnRpZmllciAqcmlkcywKKwkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJ CQkJCSAgYm9vbCAqcmVzdHJpY3RfbWV0aG9kKQoreworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFy Z2V0ID0gZW50cnktPnRhcmdldDsKKwlwZ3BhX2l0bV90eXBlIGlubmVyX2l0bTsKKwlwZ3BhX2l0 bV90eXBlIG91dGVyX2l0bTsKKwlwZ3BhX2l0bV90eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVm aW5pdGVseSBoYXZlIGF0IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRy eS4gKi8KKwllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3Ry aWN0X21ldGhvZCA9IGZhbHNlOworCisJLyoKKwkgKiBJZiBvdXIgaW5uZXIgcmVsIG1lbnRpb25z IGV4YWN0bHkgdGhlIHNhbWUgcmVsYXRpb25zIGFzIHRoZSBhZHZpY2UKKwkgKiB0YXJnZXQsIGFs bG93IHRoZSBqb2luIGFuZCBlbmZvcmNlIHRoZSBqb2luIG1ldGhvZCByZXN0cmljdGlvbi4KKwkg KgorCSAqIElmIG91ciBpbm5lciByZWwgbWVudGlvbnMgYSBzdXBlcnNldCBvZiB0aGUgdGFyZ2V0 IHJlbGF0aW9ucywgYWxsb3cgdGhlCisJICogam9pbi4gVGhlIGpvaW4gd2UgY2FyZSBhYm91dCBo YXMgYWxyZWFkeSB0YWtlbiBwbGFjZSwgYW5kIHRoaXMgYWR2aWNlCisJICogaW1wb3NlcyBubyBm dXJ0aGVyIHJlc3RyaWN0aW9ucy4KKwkgKi8KKwlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJz X21hdGNoX3RhcmdldChpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzICsgb3V0ZXJfY291 bnQsCisJCQkJCQkJCQkJCSAgdGFyZ2V0KTsKKwlpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VR VUFMKQorCXsKKwkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJKnJlc3Ry aWN0X21ldGhvZCA9IHRydWU7CisJCXJldHVybiB0cnVlOworCX0KKwllbHNlIGlmIChpbm5lcl9p dG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8q CisJICogSWYgb3VyIG91dGVyIHJlbCBtZW50aW9ucyBhIHN1cHNlcnNldCBvZiB0aGUgcmVsYXRp b25zIGluIHRoZSBhZHZpY2UKKwkgKiB0YXJnZXQsIG5vIHJlc3RyaWN0aW9ucyBhcHBseS4gVGhl IGpvaW4gd2UgY2FyZSBoYXMgYWxyZWFkeSB0YWtlbgorCSAqIHBsYWNlLCBhbmQgdGhpcyBhZHZp Y2UgaW1wb3NlcyBubyBmdXJ0aGVyIHJlc3RyaWN0aW9ucy4KKwkgKgorCSAqIE9uIHRoZSBvdGhl ciBoYW5kLCBpZiBvdXIgb3V0ZXIgcmVsIG1lbnRpb25zIGV4YWN0bHkgdGhlIHJlbGF0aW9ucwor CSAqIG1lbnRpb25lZCBpbiB0aGUgYWR2aWNlIHRhcmdldCwgdGhlIHBsYW5uZXIgaXMgdHJ5aW5n IHRvIHJldmVyc2UgdGhlCisJICogc2lkZXMgb2YgdGhlIGpvaW4gYXMgY29tcGFyZWQgd2l0aCBv dXIgZGVzaXJlZCBvdXRjb21lLiBSZWplY3QgdGhhdC4KKwkgKi8KKwlvdXRlcl9pdG0gPSBwZ3Bh X2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRz LCB0YXJnZXQpOworCWlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVfU1VCU0VU KQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlIGlmIChvdXRlcl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwp CisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWYgdGhlIGFkdmljZSB0YXJnZXQgbWVudGlv bnMgb25seSBhIHNpbmdsZSByZWxhdGlvbiwgdGhlIHRlc3QgYmVsb3cKKwkgKiBjYW5ub3QgZXZl ciBwYXNzLCBzbyBzYXZlIHNvbWUgd29yayBieSBleGl0aW5nIG5vdy4KKwkgKi8KKwlpZiAodGFy Z2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKQorCQlyZXR1cm4gZmFsc2U7CisK KwkvKgorCSAqIElmIGV2ZXJ5dGhpbmcgaW4gdGhlIGpvaW5yZWwgYXBwZWFycyBpbiB0aGUgYWR2 aWNlIHRhcmdldCwgd2UncmUgYmVsb3cKKwkgKiB0aGUgbGV2ZWwgb2YgdGhlIGpvaW4gd2Ugd2Fu dCB0byBjb250cm9sLgorCSAqCisJICogRm9yIGV4YW1wbGUsIEhBU0hfSk9JTigoeCB5KSkgZG9l c24ndCByZXN0cmljdCBob3cgeCBhbmQgeSBjYW4gYmUKKwkgKiBqb2luZWQuCisJICoKKwkgKiBU aGlzIGxvb2t1cCBzaG91bGRuJ3QgcmV0dXJuIFBHUEFfSVRNX0RJU0pPSU5ULCBiZWNhdXNlIGFu eSBzdWNoIGFkdmljZQorCSAqIHNob3VsZCBub3QgaGF2ZSBiZWVuIHJldHVybmVkIGZyb20gdGhl IHRyb3ZlIGluIHRoZSBmaXJzdCBwbGFjZS4KKwkgKi8KKwlqb2luX2l0bSA9IHBncGFfaWRlbnRp ZmllcnNfbWF0Y2hfdGFyZ2V0KG91dGVyX2NvdW50ICsgaW5uZXJfY291bnQsCisJCQkJCQkJCQkJ CSByaWRzLCB0YXJnZXQpOworCUFzc2VydChqb2luX2l0bSAhPSBQR1BBX0lUTV9ESVNKT0lOVCk7 CisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0 bSA9PSBQR1BBX0lUTV9FUVVBTCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKgorCSAqIFdlJ3ZlIGFs cmVhZHkgcGVybWl0dGVkIGFsbCBhbGxvd2FibGUgY2FzZXMsIHNvIHJlamVjdCB0aGlzLgorCSAq CisJICogSWYgd2UgcmVhY2ggdGhpcyBwb2ludCwgdGhlbiB0aGUgYWR2aWNlIG92ZXJsYXBzIHdp dGggdGhpcyBqb2luIGJ1dAorCSAqIGlzbid0IGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gZWl0 aGVyIHNpZGUsIGFuZCB0aGVyZSdzIGFsc28gYXQgbGVhc3QKKwkgKiBvbmUgcmVsYXRpb24gcHJl c2VudCBpbiB0aGUgam9pbiB0aGF0IGlzbid0IG1lbnRpb25lZCBieSB0aGUgYWR2aWNlLgorCSAq CisJICogRm9yIGluc3RhbmNlLCBpbiB0aGUgSEFTSF9KT0lOKCh4IHkpKSBleGFtcGxlLCB3ZSB3 b3VsZCByZWFjaCBoZXJlIGlmIHgKKwkgKiB3ZXJlIG9uIG9uZSBzaWRlIG9mIHRoZSBqb2luLCB5 IG9uIHRoZSBvdGhlciwgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUKKwkgKiB0d28gc2lkZXMgYWxz byBpbmNsdWRlZCBzb21lIG90aGVyIHJlbGF0aW9uLCBzYXkgdC4gSW4gdGhhdCBjYXNlLAorCSAq IGFjY2VwdGluZyB0aGlzIGpvaW4gd291bGQgYWxsb3cgdGhlICh4IHkgdCkgam9pbnJlbCB0byBj b250YWluCisJICogbm9uLWRpc2FibGVkIHBhdGhzIHRoYXQgZG8gbm90IHB1dCAoeCB5KSBvbiB0 aGUgaW5uZXIgc2lkZSBvZiBhIGhhc2gKKwkgKiBqb2luOyB3ZSBjb3VsZCBpbnN0ZWFkIGVuZCB1 cCB3aXRoIHNvbWV0aGluZyBsaWtlICh4IEpPSU4gdCkgSk9JTiB5LgorCSAqLworCXJldHVybiBm YWxzZTsKK30KKworLyoKKyAqIERvZXMgYWR2aWNlIGNvbmNlcm5pbmcgYW4gb3BhcXVlIGpvaW4g cGVybWl0IGEgY2VydGFpbiBqb2luPworICoKKyAqIEJ5IGFuIG9wYXF1ZSBqb2luLCB3ZSBtZWFu IG9uZSB3aGVyZSB0aGUgZXhhY3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZQorICogam9pbiBpcyBw ZXJmb3JtZWQgaXMgbm90IHZpc2libGUgdG8gUG9zdGdyZVNRTC4gQ3VycmVudGx5IHRoaXMgaXMg dGhlCisgKiBjYXNlIG9ubHkgZm9yIGZvcmVpZ24gam9pbnM6IEZPUkVJR05fSk9JTigoeCB5IHop KSBtZWFucyB0aGF0IHgsIHksIGFuZAorICogeiBhcmUgam9pbmVkIG9uIHRoZSByZW1vdGUgc2lk ZSwgYnV0IHdlIGtub3cgbm90aGluZyBhYm91dCB0aGUgam9pbiBvcmRlcgorICogb3Igam9pbiBt ZXRob2RzIHVzZWQgb3ZlciB0aGVyZS4KKyAqCisgKiBUaGUgbG9naWMgaGVyZSBuZWVkcyB0byBk aWZmZXIgZnJvbSBwZ3BhX2pvaW5fbWV0aG9kX3Blcm1pdHNfam9pbiBiZWNhdXNlLAorICogZm9y IG90aGVyIGpvaW4gdHlwZXMsIHRoZSBhZHZpY2UgdGFyZ2V0IGlzIHRoZSBzZXQgb2YgaW5uZXIg cmVsczsgaGVyZSwgaXQKKyAqIGluY2x1ZGVzIGJvdGggaW5uZXIgYW5kIG91dGVyIHJlbHMuCisg Ki8KK3N0YXRpYyBib29sCitwZ3BhX29wYXF1ZV9qb2luX3Blcm1pdHNfam9pbihpbnQgb3V0ZXJf Y291bnQsIGludCBpbm5lcl9jb3VudCwKKwkJCQkJCQkgIHBncGFfaWRlbnRpZmllciAqcmlkcywK KwkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKmVudHJ5LAorCQkJCQkJCSAgYm9vbCAqcmVzdHJp Y3RfbWV0aG9kKQoreworCXBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0ID0gZW50cnktPnRhcmdl dDsKKwlwZ3BhX2l0bV90eXBlIGpvaW5faXRtOworCisJLyogV2UgZGVmaW5pdGVseSBoYXZlIGF0 IGxlYXN0IGEgcGFydGlhbCBtYXRjaCBmb3IgdGhpcyB0cm92ZSBlbnRyeS4gKi8KKwllbnRyeS0+ ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9QQVJUSUFMOworCisJKnJlc3RyaWN0X21ldGhvZCA9IGZh bHNlOworCisJam9pbl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9j b3VudCArIGlubmVyX2NvdW50LAorCQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0KTsKKwlpZiAoam9p bl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJeworCQkvKgorCQkgKiBXZSBoYXZlIGFuIGV4YWN0 IG1hdGNoLCBhbmQgc2hvdWxkIHRoZXJlZm9yZSBhbGxvdyB0aGUgam9pbiBhbmQKKwkJICogZW5m b3JjZSB0aGUgdXNlIG9mIHRoZSByZWxldmFudCBvcGFxdWUgam9pbiBtZXRob2QuCisJCSAqLwor CQllbnRyeS0+ZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCQkqcmVzdHJpY3RfbWV0aG9k ID0gdHJ1ZTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKGpvaW5faXRtID09IFBHUEFfSVRN X0tFWVNfQVJFX1NVQlNFVCB8fAorCQlqb2luX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FSRV9T VUJTRVQpCisJeworCQkvKgorCQkgKiBJZiBqb2luX2l0bSA9PSBQR1BBX0lUTV9UQVJHRVRTX0FS RV9TVUJTRVQsIHRoZW4gdGhlIGpvaW4gd2UgY2FyZQorCQkgKiBhYm91dCBoYXMgYWxyZWFkeSB0 YWtlbiBwbGFjZSBhbmQgbm8gZnVydGhlciByZXN0cmljdGlvbnMgYXBwbHkuCisJCSAqCisJCSAq IElmIGpvaW5faXRtID09IFBHUEFfSVRNX0tFWVNfQVJFX1NVQlNFVCwgd2UncmUgc3RpbGwgYnVp bGRpbmcgdXAgdG8KKwkJICogdGhlIGpvaW4gd2UgY2FyZSBhYm91dCBhbmQgaGF2ZSBub3QgaW50 cm9kdWNlZCBhbnkgZXh0cmFuZW91cworCQkgKiByZWxhdGlvbnMgbm90IG5hbWVkIGluIHRoZSBh ZHZpY2UuIE5vdGUgdGhhdCBGb3JlaWduU2NhbiBwYXRocyBmb3IKKwkJICogam9pbnMgYXJlIGJ1 aWx0IHVwIGZyb20gRm9yZWlnblNjYW4gcGF0aHMgZnJvbSB1bmRlcmx5aW5nIGpvaW5zIGFuZAor CQkgKiBzY2Fucywgc28gd2UgbXVzdCBub3QgZGlzYWJsZSB0aGlzIGpvaW4gd2hlbiBjb25zaWRl cmluZyBhIHN1YnNldAorCQkgKiBvZiB0aGUgcmVsYXRpb25zIHdlIHVsdGltYXRlbHkgd2FudC4K KwkJICovCisJCXJldHVybiB0cnVlOworCX0KKworCS8qCisJICogVGhlIGFkdmljZSBvdmVybGFw cyB0aGUgam9pbiwgYnV0IGF0IGxlYXN0IG9uZSByZWxhdGlvbiBpcyBwcmVzZW50IGluCisJICog dGhlIGpvaW4gdGhhdCBpc24ndCBtZW50aW9uZWQgYnkgdGhlIGFkdmljZS4gV2Ugd2FudCB0byBk aXNhYmxlIHN1Y2gKKwkgKiBwYXRocyBzbyB0aGF0IHdlIGFjdHVhbGx5IHB1c2ggZG93biB0aGUg am9pbiBhcyBpbnRlbmRlZC4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBEb2Vz IGFkdmljZSBjb25jZXJuaW5nIGEgc2VtaWpvaW4gcGVybWl0IGEgY2VydGFpbiBqb2luPworICoK KyAqIFVubGlrZSBqb2luIG1ldGhvZCBhZHZpY2UsIHdoaWNoIGxpc3RzIHRoZSByZWxzIG9uIHRo ZSBpbm5lciBzaWRlIG9mIHRoZQorICogam9pbiwgc2VtaWpvaW4gdW5pcXVlbmVzcyBhZHZpY2Ug bGlzdHMgdGhlIHJlbHMgb24gdGhlIG51bGxhYmxlIHNpZGUgb2YgdGhlCisgKiBqb2luLiBUaG9z ZSBjYW4gYmUgdGhlIHNhbWUsIGlmIHRoZSBqb2luIHR5cGUgaXMgSk9JTl9VTklRVUVfSU5ORVIg b3IKKyAqIEpPSU5fU0VNSSwgb3IgdGhleSBjYW4gYmUgZGlmZmVyZW50LCBpbiBjYXNlIG9mIEpP SU5fVU5JUVVFX09VVEVSIG9yCisgKiBKT0lOX1JJR0hUX1NFTUkuCisgKgorICogV2UgZG9uJ3Qg a25vdyBoZXJlIHdoZXRoZXIgdGhlIGNhbGxlciBzcGVjaWZpZWQgU0VNSUpPSU5fVU5JUVVFIG9y CisgKiBTRU1JSk9JTl9OT05fVU5JUVVFLiBUaGUgY2FsbGVyIHNob3VsZCBjaGVjayB0aGUgam9p biB0eXBlIGFnYWluc3QgdGhlCisgKiBhZHZpY2UgdHlwZSBpZiBhbmQgb25seSBpZiB3ZSBzZXQg KnJlc3RyaWN0X21ldGhvZCB0byB0cnVlLgorICovCitzdGF0aWMgYm9vbAorcGdwYV9zZW1pam9p bl9wZXJtaXRzX2pvaW4oaW50IG91dGVyX2NvdW50LCBpbnQgaW5uZXJfY291bnQsCisJCQkJCQkg ICBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsCisJCQkJCQkgICBwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRy eSwKKwkJCQkJCSAgIGJvb2wgb3V0ZXJfaXNfbnVsbGFibGUsCisJCQkJCQkgICBib29sICpyZXN0 cmljdF9tZXRob2QpCit7CisJcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQgPSBlbnRyeS0+dGFy Z2V0OworCXBncGFfaXRtX3R5cGUgam9pbl9pdG07CisJcGdwYV9pdG1fdHlwZSBpbm5lcl9pdG07 CisJcGdwYV9pdG1fdHlwZSBvdXRlcl9pdG07CisKKwkqcmVzdHJpY3RfbWV0aG9kID0gZmFsc2U7 CisKKwkvKiBXZSBkZWZpbml0ZWx5IGhhdmUgYXQgbGVhc3QgYSBwYXJ0aWFsIG1hdGNoIGZvciB0 aGlzIHRyb3ZlIGVudHJ5LiAqLworCWVudHJ5LT5mbGFncyB8PSBQR1BBX1RFX01BVENIX1BBUlRJ QUw7CisKKwkvKgorCSAqIElmIG91dGVyIHJlbCBpcyB0aGUgbnVsbGFibGUgc2lkZSBhbmQgY29u dGFpbnMgZXhhY3RseSB0aGUgc2FtZQorCSAqIHJlbGF0aW9ucyBhcyB0aGUgYWR2aWNlIHRhcmdl dCwgdGhlbiB0aGUgam9pbiBvcmRlciBpcyBhbGxvd2FibGUsIGJ1dAorCSAqIHRoZSBjYWxsZXIg bXVzdCBjaGVjayB3aGV0aGVyIHRoZSBhZHZpY2UgdGFnIChlaXRoZXIgU0VNSUpPSU5fVU5JUVVF IG9yCisJICogU0VNSUpPSU5fTk9OX1VOSVFVRSkgbWF0Y2hlcyB0aGUgam9pbiB0eXBlLgorCSAq CisJICogSWYgdGhlIG91dGVyIHJlbCBpcyBhIHN1cGVyc2V0IG9mIHRoZSB0YXJnZXQgcmVsYXRp b25zLCB0aGUgam9pbiB3ZQorCSAqIGNhcmUgYWJvdXQgaGFzIGFscmVhZHkgdGFrZW4gcGxhY2Us IHNvIHdlIHNob3VsZCBpbXBvc2Ugbm8gZnV0aGVyCisJICogcmVzdHJpdGlvbnMuCisJICovCisJ b3V0ZXJfaXRtID0gcGdwYV9pZGVudGlmaWVyc19tYXRjaF90YXJnZXQob3V0ZXJfY291bnQsCisJ CQkJCQkJCQkJCSAgcmlkcywgdGFyZ2V0KTsKKwlpZiAob3V0ZXJfaXRtID09IFBHUEFfSVRNX0VR VUFMKQorCXsKKwkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJaWYgKG91 dGVyX2lzX251bGxhYmxlKQorCQl7CisJCQkqcmVzdHJpY3RfbWV0aG9kID0gdHJ1ZTsKKwkJCXJl dHVybiB0cnVlOworCQl9CisJfQorCWVsc2UgaWYgKG91dGVyX2l0bSA9PSBQR1BBX0lUTV9UQVJH RVRTX0FSRV9TVUJTRVQpCisJCXJldHVybiB0cnVlOworCisJLyogQXMgYWJvdmUsIGJ1dCBmb3Ig dGhlIGlubmVyIHJlbC4gKi8KKwlpbm5lcl9pdG0gPSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3Rh cmdldChpbm5lcl9jb3VudCwKKwkJCQkJCQkJCQkJICByaWRzICsgb3V0ZXJfY291bnQsCisJCQkJ CQkJCQkJCSAgdGFyZ2V0KTsKKwlpZiAoaW5uZXJfaXRtID09IFBHUEFfSVRNX0VRVUFMKQorCXsK KwkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfTUFUQ0hfRlVMTDsKKwkJaWYgKCFvdXRlcl9pc19u dWxsYWJsZSkKKwkJeworCQkJKnJlc3RyaWN0X21ldGhvZCA9IHRydWU7CisJCQlyZXR1cm4gdHJ1 ZTsKKwkJfQorCX0KKwllbHNlIGlmIChpbm5lcl9pdG0gPT0gUEdQQV9JVE1fVEFSR0VUU19BUkVf U1VCU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogSWYgZXZlcnl0aGluZyBpbiB0aGUg am9pbnJlbCBhcHBlYXJzIGluIHRoZSBhZHZpY2UgdGFyZ2V0LCB3ZSdyZSBiZWxvdworCSAqIHRo ZSBsZXZlbCBvZiB0aGUgam9pbiB3ZSB3YW50IHRvIGNvbnRyb2wuCisJICovCisJam9pbl9pdG0g PSBwZ3BhX2lkZW50aWZpZXJzX21hdGNoX3RhcmdldChvdXRlcl9jb3VudCArIGlubmVyX2NvdW50 LAorCQkJCQkJCQkJCQkgcmlkcywgdGFyZ2V0KTsKKwlBc3NlcnQoam9pbl9pdG0gIT0gUEdQQV9J VE1fRElTSk9JTlQpOworCWlmIChqb2luX2l0bSA9PSBQR1BBX0lUTV9LRVlTX0FSRV9TVUJTRVQg fHwKKwkJam9pbl9pdG0gPT0gUEdQQV9JVE1fRVFVQUwpCisJCXJldHVybiB0cnVlOworCisJLyoK KwkgKiBXZSd2ZSB0ZXN0ZWQgZm9yIGFsbCBhbGxvd2FibGUgcG9zc2liaWxpdGllcywgYW5kIHNv IG11c3QgcmVqZWN0IHRoaXMKKwkgKiBqb2luIG9yZGVyLiBUaGlzIGNhbiBoYXBwZW4gaW4gdHdv IHdheXMuCisJICoKKwkgKiBGaXJzdCwgd2UgbWlnaCBiZSBjb25zaWRlcmluZyBhIHNlbWlqb2lu IHRoYXQgb3ZlcmxhcHMgaW5jb21wbGV0ZWx5CisJICogd2l0aCBvbmUgb3IgYm90aCBzaWRlcyBv ZiB0aGUgam9pbi4gRm9yIGV4YW1wbGUsIGlmIHRoZSB1c2VyIGhhcworCSAqIHNwZWNpZmllZCBT RU1JSk9JTl9VTklRVUUoKHQxIHQyKSkgb3IgU0VNSUpPSU5fTk9OX1VOSVFVRSgodDEgdDIpKSwg d2UKKwkgKiBzaG91bGQgcmVqZWN0IGEgcHJvcG9zZWQgdDItdDMgam9pbiwgc2luY2UgdGhhdCBj b3VsZCBub3QgcmVzdWx0IGluIGEKKwkgKiBmaW5hbCBwbGFuIGNvbXBhdGlibGUgd2l0aCB0aGUg YWR2aWNlLgorCSAqCisJICogU2Vjb25kLCB3ZSBtaWdodCBiZSBjb25zaWRlcmluZyBhIHNlbWlq b2luIHdoZXJlIHRoZSBhZHZpY2UgdGFyZ2V0CisJICogcGVyZmVjdGx5IG1hdGNoZXMgb25lIHNp ZGUgb2YgdGhlIGpvaW4sIGJ1dCBpdCdzIHRoZSB3cm9uZyBvbmUuIEZvcgorCSAqIGV4YW1wbGUs IGluIHRoZSBleGFtcGxlIGFib3ZlLCB3ZSBtaWdodCBzZWUgYSAzLXdheSBqb2luIGJldHdlZW4g dDEsCisJICogdDIsIGFuZCB0Mywgd2l0aCAodDEgdDIpIG9uIHRoZSBub24tbnVsbGFibGUgc2lk ZS4gVGhhdCwgdG9vLCB3b3VsZCBiZQorCSAqIGluY29tcGF0aWJsZSB3aXRoIHRoZSBhZHZpY2Uu CisJICovCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogQXBwbHkgc2NhbiBhZHZpY2UgdG8g YSBSZWxPcHRJbmZvLgorICoKKyAqIFhYWC4gRm9yIGJpdG1hcCBoZWFwIHNjYW5zLCB3ZSdyZSBq dXN0IGlnbm9yaW5nIHRoZSBpbmRleCBpbmZvcm1hdGlvbiBmcm9tCisgKiB0aGUgYWR2aWNlLiBU aGF0J3Mgbm90IGNvb2wuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3BsYW5uZXJfYXBwbHlfc2Nh bl9hZHZpY2UoUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCSAgIHBncGFfdHJvdmVfZW50cnkgKnNj YW5fZW50cmllcywKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnNjYW5faW5kZXhlcywKKwkJCQkJCQkg ICBwZ3BhX3Ryb3ZlX2VudHJ5ICpyZWxfZW50cmllcywKKwkJCQkJCQkgICBCaXRtYXBzZXQgKnJl bF9pbmRleGVzKQoreworCWJvb2wJCWdhdGhlcl9jb25mbGljdCA9IGZhbHNlOworCUJpdG1hcHNl dCAgKmdhdGhlcl9wYXJ0aWFsX21hdGNoID0gTlVMTDsKKwlCaXRtYXBzZXQgICpnYXRoZXJfZnVs bF9tYXRjaCA9IE5VTEw7CisJaW50CQkJaSA9IC0xOworCXBncGFfdHJvdmVfZW50cnkgKnNjYW5f ZW50cnkgPSBOVUxMOworCWludAkJCWZsYWdzOworCWJvb2wJCXNjYW5fdHlwZV9jb25mbGljdCA9 IGZhbHNlOworCUJpdG1hcHNldCAgKnNjYW5fdHlwZV9pbmRleGVzID0gTlVMTDsKKwlCaXRtYXBz ZXQgICpzY2FuX3R5cGVfcmVsX2luZGV4ZXMgPSBOVUxMOworCXVpbnQ2NAkJZ2F0aGVyX21hc2sg PSAwOworCXVpbnQ2NAkJc2Nhbl90eXBlID0gMDsKKworCS8qIFNjcnV0aW5pemUgYXZhaWxhYmxl IHNjYW4gYWR2aWNlLiAqLworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihzY2FuX2luZGV4 ZXMsIGkpKSA+PSAwKQorCXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqbXlfZW50cnkgPSAmc2Nhbl9l bnRyaWVzW2ldOworCQl1aW50NjQJCW15X3NjYW5fdHlwZSA9IDA7CisKKwkJLyogVHJhbnNsYXRl IG91ciBhZHZpY2UgdGFncyB0byBhIHNjYW4gc3RyYXRlZ3kgYWR2aWNlIHZhbHVlLiAqLworCQlp ZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOKQorCQkJbXlfc2Nh bl90eXBlID0gUEdTX0JJVE1BUFNDQU47CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQ QV9UQUdfSU5ERVhfT05MWV9TQ0FOKQorCQkJbXlfc2Nhbl90eXBlID0gUEdTX0lOREVYT05MWVND QU4gfCBQR1NfQ09OU0lERVJfSU5ERVhPTkxZOworCQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09 IFBHUEFfVEFHX0lOREVYX1NDQU4pCisJCQlteV9zY2FuX3R5cGUgPSBQR1NfSU5ERVhTQ0FOOwor CQllbHNlIGlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX1NFUV9TQ0FOKQorCQkJbXlfc2Nh bl90eXBlID0gUEdTX1NFUVNDQU47CisJCWVsc2UgaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9U QUdfVElEX1NDQU4pCisJCQlteV9zY2FuX3R5cGUgPSBQR1NfVElEU0NBTjsKKworCQkvKgorCQkg KiBJZiB0aGlzIGlzIHVuZGVyc3RhbmRhYmxlIHNjYW4gYWR2aWNlLCBoYW5nIG9uIHRvIHRoZSBl bnRyeSwgdGhlCisJCSAqIGluZmVycmVkIHNjYW4gdHlwZSB0eXBlLCBhbmQgdGhlIGluZGV4IGF0 IHdoaWNoIHdlIGZvdW5kIGl0LgorCQkgKgorCQkgKiBBbHNvIG1ha2UgYSBub3RlIGlmIHdlIHNl ZSBjb25mbGljdGluZyBzY2FuIHR5cGUgYWR2aWNlLiBOb3RlIHRoYXQKKwkJICogd2UgcmVnYXJk IHR3byBpbmRleCBzcGVjaWZpY2F0aW9ucyBhcyBjb25mbGljdGluZyB1bmxlc3MgdGhleSBtYXRj aAorCQkgKiBleGFjdGx5LiBJbiB0aGVvcnksIHBlcmhhcHMgd2UgY291bGQgcmVnYXJkIElOREVY X1NDQU4oYSBjKSBhbmQKKwkJICogSU5ERVhfU0NBTihhIGIuYykgYXMgbm9uLWNvbmZsaWN0aW5n IGlmIGl0IGhhcHBlbnMgdGhhdCB0aGUgb25seQorCQkgKiBpbmRleCBuYW1lZCBjIGlzIGluIHNj aGVtYSBiLCBidXQgaXQgZG9lc24ndCBzZWVtIHdvcnRoIHRoZSBjb2RlLgorCQkgKi8KKwkJaWYg KG15X3NjYW5fdHlwZSAhPSAwKQorCQl7CisJCQlpZiAoc2Nhbl90eXBlICE9IDAgJiYgc2Nhbl90 eXBlICE9IG15X3NjYW5fdHlwZSkKKwkJCQlzY2FuX3R5cGVfY29uZmxpY3QgPSB0cnVlOworCQkJ aWYgKCFzY2FuX3R5cGVfY29uZmxpY3QgJiYgc2Nhbl9lbnRyeSAhPSBOVUxMICYmCisJCQkJbXlf ZW50cnktPnRhcmdldC0+aXRhcmdldCAhPSBOVUxMICYmCisJCQkJc2Nhbl9lbnRyeS0+dGFyZ2V0 LT5pdGFyZ2V0ICE9IE5VTEwgJiYKKwkJCQkhcGdwYV9pbmRleF90YXJnZXRzX2VxdWFsKHNjYW5f ZW50cnktPnRhcmdldC0+aXRhcmdldCwKKwkJCQkJCQkJCQkgIG15X2VudHJ5LT50YXJnZXQtPml0 YXJnZXQpKQorCQkJCXNjYW5fdHlwZV9jb25mbGljdCA9IHRydWU7CisJCQlzY2FuX2VudHJ5ID0g bXlfZW50cnk7CisJCQlzY2FuX3R5cGUgPSBteV9zY2FuX3R5cGU7CisJCQlzY2FuX3R5cGVfaW5k ZXhlcyA9IGJtc19hZGRfbWVtYmVyKHNjYW5fdHlwZV9pbmRleGVzLCBpKTsKKwkJfQorCX0KKwor CS8qIFNjcnV0aW5pemUgYXZhaWxhYmxlIGdhdGhlci1yZWxhdGVkIGFuZCBwYXJ0aXRpb253aXNl IGFkdmljZS4gKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHJlbF9p bmRleGVzLCBpKSkgPj0gMCkKKwl7CisJCXBncGFfdHJvdmVfZW50cnkgKm15X2VudHJ5ID0gJnJl bF9lbnRyaWVzW2ldOworCQl1aW50NjQJCW15X2dhdGhlcl9tYXNrID0gMDsKKwkJYm9vbAkJanVz dF9vbmVfcmVsOworCisJCWp1c3Rfb25lX3JlbCA9IG15X2VudHJ5LT50YXJnZXQtPnR0eXBlID09 IFBHUEFfVEFSR0VUX0lERU5USUZJRVIKKwkJCXx8IGxpc3RfbGVuZ3RoKG15X2VudHJ5LT50YXJn ZXQtPmNoaWxkcmVuKSA9PSAxOworCisJCS8qCisJCSAqIFBBUlRJVElPTldJU0UgYmVoYXZlcyBs aWtlIGEgc2NhbiB0eXBlLCBleGNlcHQgdGhhdCBpZiB0aGVyZSdzIG1vcmUKKwkJICogdGhhbiBv bmUgcmVsYXRpb24gdGFyZ2V0ZWQsIGl0IGhhcyBubyBlZmZlY3QgYXQgdGhpcyBsZXZlbC4KKwkJ ICovCisJCWlmIChteV9lbnRyeS0+dGFnID09IFBHUEFfVEFHX1BBUlRJVElPTldJU0UpCisJCXsK KwkJCWlmIChqdXN0X29uZV9yZWwpCisJCQl7CisJCQkJY29uc3QgdWludDY0IG15X3NjYW5fdHlw ZSA9IFBHU19BUFBFTkQgfCBQR1NfTUVSR0VfQVBQRU5EOworCisJCQkJaWYgKHNjYW5fdHlwZSAh PSAwICYmIHNjYW5fdHlwZSAhPSBteV9zY2FuX3R5cGUpCisJCQkJCXNjYW5fdHlwZV9jb25mbGlj dCA9IHRydWU7CisJCQkJc2Nhbl9lbnRyeSA9IG15X2VudHJ5OworCQkJCXNjYW5fdHlwZSA9IG15 X3NjYW5fdHlwZTsKKwkJCQlzY2FuX3R5cGVfcmVsX2luZGV4ZXMgPQorCQkJCQlibXNfYWRkX21l bWJlcihzY2FuX3R5cGVfcmVsX2luZGV4ZXMsIGkpOworCQkJfQorCQkJY29udGludWU7CisJCX0K KworCQkvKgorCQkgKiBHQVRIRVIgYW5kIEdBVEhFUl9NRVJHRSBhcHBsaWVkIHRvIGEgc2luZ2xl IHJlbCBtZWFuIHRoYXQgd2Ugc2hvdWxkCisJCSAqIHVzZSB0aGUgY29ycmVzcG9uZGluZ3Mgc3Ry YXRlZ3kgaGVyZSwgd2hpbGUgYXBwbHlpbmcgZWl0aGVyIHRvIG1vcmUKKwkJICogdGhhbiBvbmUg cmVsIG1lYW5zIHdlIHNob3VsZCBub3QgdXNlIHRob3NlIHN0cmF0ZWdpZXMgaGVyZSwgYnV0CisJ CSAqIHJhdGhlciBhdCB0aGUgbGV2ZWwgb2YgdGhlIGpvaW5yZWwgdGhhdCBjb3JyZXNwb25kcyB0 byB3aGF0IHdhcworCQkgKiBzcGVjaWZpZWQuIE5PX0dBVEhFUiBjYW4gb25seSBiZSBhcHBsaWVk IHRvIHNpbmdsZSByZWxzLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgc2V0dGluZyBQR1NfQ09OU0lE RVJfTk9OUEFSVElBTCBpbiBteV9nYXRoZXJfbWFzayBpcworCQkgKiBlcXVpdmFsZW50IHRvIGFs bG93aW5nIHRoZSBub24tdXNlIG9mIGVpdGhlciBmb3JtIG9mIEdhdGhlciBoZXJlLgorCQkgKi8K KwkJaWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSIHx8CisJCQlteV9lbnRyeS0+ dGFnID09IFBHUEFfVEFHX0dBVEhFUl9NRVJHRSkKKwkJeworCQkJaWYgKCFqdXN0X29uZV9yZWwp CisJCQkJbXlfZ2F0aGVyX21hc2sgPSBQR1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJCWVsc2Ug aWYgKG15X2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfR0FUSEVSKQorCQkJCW15X2dhdGhlcl9tYXNr ID0gUEdTX0dBVEhFUjsKKwkJCWVsc2UKKwkJCQlteV9nYXRoZXJfbWFzayA9IFBHU19HQVRIRVJf TUVSR0U7CisJCX0KKwkJZWxzZSBpZiAobXlfZW50cnktPnRhZyA9PSBQR1BBX1RBR19OT19HQVRI RVIpCisJCXsKKwkJCUFzc2VydChqdXN0X29uZV9yZWwpOworCQkJbXlfZ2F0aGVyX21hc2sgPSBQ R1NfQ09OU0lERVJfTk9OUEFSVElBTDsKKwkJfQorCisJCS8qCisJCSAqIElmIHdlIHNldCBteV9n YXRoZXJfbWFzayB1cCBhYm92ZSwgdGhlbiB3ZSAoMSkgbWFrZSBhIG5vdGUgaWYgdGhlCisJCSAq IGFkdmljZSBjb25mbGljdGVkLCAoMikgcmVtZW1iZXIgdGhlIG1hc2sgdmFsdWUsIGFuZCAoMykg cmVtZW1iZXIKKwkJICogd2hldGhlciB0aGlzIHdhcyBhIGZ1bGwgb3IgcGFydGlhbCBtYXRjaC4K KwkJICovCisJCWlmIChteV9nYXRoZXJfbWFzayAhPSAwKQorCQl7CisJCQlpZiAoZ2F0aGVyX21h c2sgIT0gMCAmJiBnYXRoZXJfbWFzayAhPSBteV9nYXRoZXJfbWFzaykKKwkJCQlnYXRoZXJfY29u ZmxpY3QgPSB0cnVlOworCQkJZ2F0aGVyX21hc2sgPSBteV9nYXRoZXJfbWFzazsKKwkJCWlmIChq dXN0X29uZV9yZWwpCisJCQkJZ2F0aGVyX2Z1bGxfbWF0Y2ggPSBibXNfYWRkX21lbWJlcihnYXRo ZXJfZnVsbF9tYXRjaCwgaSk7CisJCQllbHNlCisJCQkJZ2F0aGVyX3BhcnRpYWxfbWF0Y2ggPSBi bXNfYWRkX21lbWJlcihnYXRoZXJfcGFydGlhbF9tYXRjaCwgaSk7CisJCX0KKwl9CisKKwkvKiBF bmZvcmNlIGNob2ljZSBvZiBpbmRleC4gKi8KKwlpZiAoc2Nhbl9lbnRyeSAhPSBOVUxMICYmICFz Y2FuX3R5cGVfY29uZmxpY3QgJiYKKwkJKHNjYW5fZW50cnktPnRhZyA9PSBQR1BBX1RBR19JTkRF WF9TQ0FOIHx8CisJCSBzY2FuX2VudHJ5LT50YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FO KSkKKwl7CisJCXBncGFfaW5kZXhfdGFyZ2V0ICppdGFyZ2V0ID0gc2Nhbl9lbnRyeS0+dGFyZ2V0 LT5pdGFyZ2V0OworCQlJbmRleE9wdEluZm8gKm1hdGNoZWRfaW5kZXggPSBOVUxMOworCisJCUFz c2VydChpdGFyZ2V0LT5pdHlwZSA9PSBQR1BBX0lOREVYX05BTUUpOworCisJCWZvcmVhY2hfbm9k ZShJbmRleE9wdEluZm8sIGluZGV4LCByZWwtPmluZGV4bGlzdCkKKwkJeworCQkJY2hhcgkgICAq cmVsbmFtZSA9IGdldF9yZWxfbmFtZShpbmRleC0+aW5kZXhvaWQpOworCQkJT2lkCQkJbnNwb2lk ID0gZ2V0X3JlbF9uYW1lc3BhY2UoaW5kZXgtPmluZGV4b2lkKTsKKwkJCWNoYXIJICAgKnJlbG5h bWVzcGFjZSA9IGdldF9uYW1lc3BhY2VfbmFtZShuc3BvaWQpOworCisJCQlpZiAoc3RyY21wKGl0 YXJnZXQtPmluZG5hbWUsIHJlbG5hbWUpID09IDAgJiYKKwkJCQkoaXRhcmdldC0+aW5kbmFtZXNw YWNlID09IE5VTEwgfHwKKwkJCQkgc3RyY21wKGl0YXJnZXQtPmluZG5hbWVzcGFjZSwgcmVsbmFt ZXNwYWNlKSA9PSAwKSkKKwkJCXsKKwkJCQltYXRjaGVkX2luZGV4ID0gaW5kZXg7CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKworCQlpZiAobWF0Y2hlZF9pbmRleCA9PSBOVUxMKQorCQl7CisJCQkv KiBEb24ndCBmb3JjZSB0aGUgc2NhbiB0eXBlIGlmIHRoZSBpbmRleCBkb2Vzbid0IGV4aXN0LiAq LworCQkJc2Nhbl90eXBlID0gMDsKKworCQkJLyogTWFyayBhZHZpY2UgYXMgaW5hcHBsaWNhYmxl LiAqLworCQkJcGdwYV90cm92ZV9zZXRfZmxhZ3Moc2Nhbl9lbnRyaWVzLCBzY2FuX3R5cGVfaW5k ZXhlcywKKwkJCQkJCQkJIFBHUEFfVEVfSU5BUFBMSUNBQkxFKTsKKwkJfQorCQllbHNlCisJCXsK KwkJCS8qIFJldGFpbiB0aGlzIGluZGV4IGFuZCBkaXNjYXJkIHRoZSByZXN0LiAqLworCQkJcmVs LT5pbmRleGxpc3QgPSBsaXN0X21ha2UxKG1hdGNoZWRfaW5kZXgpOworCQl9CisJfQorCisJLyoK KwkgKiBNYXJrIGFsbCB0aGUgc2NhbiBtZXRob2QgZW50cmllcyBhcyBmdWxseSBtYXRjaGVkOyBh bmQgaWYgdGhleSBzcGVjaWZ5CisJICogZGlmZmVyZW50IHRoaW5ncywgbWFyayB0aGVtIGFsbCBh cyBjb25mbGljdGluZy4KKwkgKi8KKwlmbGFncyA9IFBHUEFfVEVfTUFUQ0hfUEFSVElBTCB8IFBH UEFfVEVfTUFUQ0hfRlVMTDsKKwlpZiAoc2Nhbl90eXBlX2NvbmZsaWN0KQorCQlmbGFncyB8PSBQ R1BBX1RFX0NPTkZMSUNUSU5HOworCXBncGFfdHJvdmVfc2V0X2ZsYWdzKHNjYW5fZW50cmllcywg c2Nhbl90eXBlX2luZGV4ZXMsIGZsYWdzKTsKKwlwZ3BhX3Ryb3ZlX3NldF9mbGFncyhyZWxfZW50 cmllcywgc2Nhbl90eXBlX3JlbF9pbmRleGVzLCBmbGFncyk7CisKKwkvKgorCSAqIE1hcmsgZXZl cnkgR2F0aGVyLXJlbGF0ZWQgcGllY2Ugb2YgYWR2aWNlIGFzIHBhcnRpYWxseSBtYXRjaGVkLiBN YXJrCisJICogdGhlIG9uZXMgdGhhdCBpbmNsdWRlZCB0aGlzIHJlbGF0aW9uIGFzIGEgdGFyZ2V0 IGJ5IGl0c2VsZiBhcyBmdWxseQorCSAqIG1hdGNoZWQuIElmIHRoZXJlIHdhcyBhIGNvbmZsaWN0 LCBtYXJrIHRoZW0gYWxsIGFzIGNvbmZsaWN0aW5nLgorCSAqLworCWZsYWdzID0gUEdQQV9URV9N QVRDSF9QQVJUSUFMOworCWlmIChnYXRoZXJfY29uZmxpY3QpCisJCWZsYWdzIHw9IFBHUEFfVEVf Q09ORkxJQ1RJTkc7CisJcGdwYV90cm92ZV9zZXRfZmxhZ3MocmVsX2VudHJpZXMsIGdhdGhlcl9w YXJ0aWFsX21hdGNoLCBmbGFncyk7CisJZmxhZ3MgfD0gUEdQQV9URV9NQVRDSF9GVUxMOworCXBn cGFfdHJvdmVfc2V0X2ZsYWdzKHJlbF9lbnRyaWVzLCBnYXRoZXJfZnVsbF9tYXRjaCwgZmxhZ3Mp OworCisJLyogSWYgdGhlcmUgaXMgYSBub24tY29uZmxpY3Rpbmcgc2NhbiBzcGVjaWZpY2F0aW9u LCBlbmZvcmNlIGl0LiAqLworCWlmIChzY2FuX3R5cGUgIT0gMCAmJiAhc2Nhbl90eXBlX2NvbmZs aWN0KQorCXsKKwkJcmVsLT5wZ3NfbWFzayAmPQorCQkJfihQR1NfU0NBTl9BTlkgfCBQR1NfQVBQ RU5EIHwgUEdTX01FUkdFX0FQUEVORCB8CisJCQkgIFBHU19DT05TSURFUl9JTkRFWE9OTFkpOwor CQlyZWwtPnBnc19tYXNrIHw9IHNjYW5fdHlwZTsKKwl9CisKKwkvKiBJZiB0aGVyZSBpcyBhIG5v bi1jb25mbGljdGluZyBnYXRoZXIgc3BlY2lmaWNhdGlvbiwgZW5mb3JjZSBpdC4gKi8KKwlpZiAo Z2F0aGVyX21hc2sgIT0gMCAmJiAhZ2F0aGVyX2NvbmZsaWN0KQorCXsKKwkJcmVsLT5wZ3NfbWFz ayAmPQorCQkJfihQR1NfR0FUSEVSIHwgUEdTX0dBVEhFUl9NRVJHRSB8IFBHU19DT05TSURFUl9O T05QQVJUSUFMKTsKKwkJcmVsLT5wZ3NfbWFzayB8PSBnYXRoZXJfbWFzazsKKwl9Cit9CisKKy8q CisgKiBBZGQgZmVlZGJhY2sgZW50cmllcyB0byBmb3Igb25lIHRyb3ZlIHNsaWNlIHRvIHRoZSBw cm92aWRlZCBsaXN0IGFuZAorICogcmV0dXJuIHRoZSByZXN1bHRpbmcgbGlzdC4KKyAqCisgKiBG ZWVkYmFjayBlbnRyaWVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgdHJvdmUgZW50cnkncyBmbGFn cy4gSXQncyBhc3N1bWVkCisgKiB0aGF0IHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgc2V0IGFsbCBy ZWxldmFudCBmbGFncyB3aXRoIHRoZSBleGNlcHRpb24gb2YKKyAqIFBHUEFfVEVfRkFJTEVELiBX ZSBzZXQgdGhhdCBmbGFnIGhlcmUgaWYgYXBwcm9wcmlhdGUuCisgKi8KK3N0YXRpYyBMaXN0ICoK K3BncGFfcGxhbm5lcl9hcHBlbmRfZmVlZGJhY2soTGlzdCAqbGlzdCwgcGdwYV90cm92ZSAqdHJv dmUsCisJCQkJCQkJIHBncGFfdHJvdmVfbG9va3VwX3R5cGUgdHlwZSwKKwkJCQkJCQkgcGdwYV9p ZGVudGlmaWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkgcGdwYV9wbGFuX3dhbGtlcl9jb250 ZXh0ICp3YWxrZXIpCit7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50cmllczsKKwlpbnQJCQluZW50 cmllczsKKwlTdHJpbmdJbmZvRGF0YSBidWY7CisKKwlpbml0U3RyaW5nSW5mbygmYnVmKTsKKwlw Z3BhX3Ryb3ZlX2xvb2t1cF9hbGwodHJvdmUsIHR5cGUsICZlbnRyaWVzLCAmbmVudHJpZXMpOwor CWZvciAoaW50IGkgPSAwOyBpIDwgbmVudHJpZXM7ICsraSkKKwl7CisJCXBncGFfdHJvdmVfZW50 cnkgKmVudHJ5ID0gJmVudHJpZXNbaV07CisJCURlZkVsZW0gICAgKml0ZW07CisKKwkJLyoKKwkJ ICogSWYgdGhpcyBlbnRyeSB3YXMgZnVsbHkgbWF0Y2hlZCwgY2hlY2sgd2hldGhlciBnZW5lcmF0 aW5nIGFkdmljZQorCQkgKiBmcm9tIHRoaXMgcGxhbiB3b3VsZCBwcm9kdWNlIHN1Y2ggYW4gZW50 cnkuIElmIG5vdCwgbGFiZWwgdGhlIGVudHJ5CisJCSAqIGFzIGZhaWxlZC4KKwkJICovCisJCWlm ICgoZW50cnktPmZsYWdzICYgUEdQQV9URV9NQVRDSF9GVUxMKSAhPSAwICYmCisJCQkhcGdwYV93 YWxrZXJfd291bGRfYWR2aXNlKHdhbGtlciwgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkgIGVu dHJ5LT50YWcsIGVudHJ5LT50YXJnZXQpKQorCQkJZW50cnktPmZsYWdzIHw9IFBHUEFfVEVfRkFJ TEVEOworCisJCWl0ZW0gPSBtYWtlRGVmRWxlbShwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnkoZW50 cnkpLAorCQkJCQkJICAgKE5vZGUgKikgbWFrZUludGVnZXIoZW50cnktPmZsYWdzKSwgLTEpOwor CQlsaXN0ID0gbGFwcGVuZChsaXN0LCBpdGVtKTsKKwl9CisKKwlyZXR1cm4gbGlzdDsKK30KKwor I2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKworLyoKKyAqIEZhc3QgaGFzaCBmdW5jdGlvbiBm b3IgYSBrZXkgY29uc2lzdGluZyBvZiBhbiBSVEkgYW5kIHBsYW4gbmFtZS4KKyAqLworc3RhdGlj IHVpbnQzMgorcGdwYV9yaV9jaGVja2VyX2hhc2hfa2V5KHBncGFfcmlfY2hlY2tlcl9rZXkga2V5 KQoreworCWZhc3RoYXNoX3N0YXRlIGhzOworCWludAkJCXNwX2xlbjsKKworCWZhc3RoYXNoX2lu aXQoJmhzLCAwKTsKKworCWhzLmFjY3VtID0ga2V5LnJ0aTsKKwlmYXN0aGFzaF9jb21iaW5lKCZo cyk7CisKKwkvKiBwbGFuX25hbWUgY2FuIGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBsYW5fbmFtZSA9 PSBOVUxMKQorCQlzcF9sZW4gPSAwOworCWVsc2UKKwkJc3BfbGVuID0gZmFzdGhhc2hfYWNjdW1f Y3N0cmluZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyogaGFzaGZuX3Vuc3RhYmxlLmggcmVj b21tZW5kcyB1c2luZyBzdHJpbmcgbGVuZ3RoIGFzIHR3ZWFrICovCisJcmV0dXJuIGZhc3RoYXNo X2ZpbmFsMzIoJmhzLCBzcF9sZW4pOworfQorCisjZW5kaWYKKworLyoKKyAqIFNhdmUgdGhlIHJh bmdlIHRhYmxlIGlkZW50aWZpZXIgZm9yIG9uZSByZWxhdGlvbiBmb3IgZnV0dXJlIGNyb3NzLWNo ZWNraW5nLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9yaV9jaGVja2VyX3NhdmUocGdwYV9wbGFu bmVyX3N0YXRlICpwcHMsIFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkgUmVsT3B0SW5mbyAqcmVs KQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX3JpX2NoZWNrZXJfa2V5IGtl eTsKKwlwZ3BhX3JpX2NoZWNrZXIgKmNoZWNrOworCXBncGFfaWRlbnRpZmllciByaWQ7CisJY29u c3QgY2hhciAqcmlkX3N0cmluZzsKKwlib29sCQlmb3VuZDsKKworCWtleS5ydGkgPSBibXNfc2lu Z2xldG9uX21lbWJlcihyZWwtPnJlbGlkcyk7CisJa2V5LnBsYW5fbmFtZSA9IHJvb3QtPnBsYW5f bmFtZTsKKwlwZ3BhX2NvbXB1dGVfaWRlbnRpZmllcl9ieV9ydGkocm9vdCwga2V5LnJ0aSwgJnJp ZCk7CisJcmlkX3N0cmluZyA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJpZCk7CisJY2hlY2sg PSBwZ3BhX3JpX2NoZWNrX2luc2VydChwcHMtPnJpX2NoZWNrX2hhc2gsIGtleSwgJmZvdW5kKTsK KwlBc3NlcnQoIWZvdW5kIHx8IHN0cmNtcChjaGVjay0+cmlkX3N0cmluZywgcmlkX3N0cmluZykg PT0gMCk7CisJY2hlY2stPnJpZF9zdHJpbmcgPSByaWRfc3RyaW5nOworI2VuZGlmCit9CisKKy8q CisgKiBWYWxpZGF0ZSB0aGF0IHRoZSByYW5nZSB0YWJsZSBpZGVudGlmaWVycyB3ZSB3ZXJlIGFi bGUgdG8gZ2VuZXJhdGUgZHVyaW5nCisgKiBwbGFubmluZyBtYXRjaCB0aGUgb25lcyB3ZSBnZW5l cmF0ZWQgZnJvbSB0aGUgZmluYWwgcGxhbi4KKyAqLworc3RhdGljIHZvaWQKK3BncGFfcmlfY2hl Y2tlcl92YWxpZGF0ZShwZ3BhX3BsYW5uZXJfc3RhdGUgKnBwcywgUGxhbm5lZFN0bXQgKnBzdG10 KQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlwZ3BhX2lkZW50aWZpZXIgKnJ0X2lk ZW50aWZpZXJzOworCXBncGFfcmlfY2hlY2tfaXRlcmF0b3IgaXQ7CisJcGdwYV9yaV9jaGVja2Vy ICpjaGVjazsKKworCS8qIENyZWF0ZSBpZGVudGlmaWVycyBmcm9tIHRoZSBwbGFubmVkIHN0YXRl bWVudC4gKi8KKwlydF9pZGVudGlmaWVycyA9IHBncGFfY3JlYXRlX2lkZW50aWZpZXJzX2Zvcl9w bGFubmVkX3N0bXQocHN0bXQpOworCisJLyogSXRlcmF0ZSBvdmVyIGlkZW50aWZpZXJzIGNyZWF0 ZWQgZHVyaW5nIHBsYW5uaW5nLCBzbyB3ZSBjYW4gY29tcGFyZS4gKi8KKwlwZ3BhX3JpX2NoZWNr X3N0YXJ0X2l0ZXJhdGUocHBzLT5yaV9jaGVja19oYXNoLCAmaXQpOworCXdoaWxlICgoY2hlY2sg PSBwZ3BhX3JpX2NoZWNrX2l0ZXJhdGUocHBzLT5yaV9jaGVja19oYXNoLCAmaXQpKSAhPSBOVUxM KQorCXsKKwkJaW50CQkJcnRvZmZzZXQgPSAwOworCQljb25zdCBjaGFyICpyaWRfc3RyaW5nOwor CQlJbmRleAkJZmxhdF9ydGk7CisKKwkJLyoKKwkJICogSWYgdGhlcmUncyBubyBwbGFuIG5hbWUg YXNzb2NpYXRlZCB3aXRoIHRoaXMgZW50cnksIHRoZW4gdGhlCisJCSAqIHJ0b2Zmc2V0IGlzIDAu IE90aGVyd2lzZSwgd2UgY2FuIHNlYXJjaCB0aGUgU3ViUGxhblJUSW5mbyBsaXN0IHRvCisJCSAq IGZpbmQgdGhlIHJ0b2Zmc2V0LgorCQkgKi8KKwkJaWYgKGNoZWNrLT5rZXkucGxhbl9uYW1lICE9 IE5VTEwpCisJCXsKKwkJCWZvcmVhY2hfbm9kZShTdWJQbGFuUlRJbmZvLCBydGluZm8sIHBzdG10 LT5zdWJydGluZm9zKQorCQkJeworCQkJCS8qCisJCQkJICogSWYgcnRpbmZvLT5kdW1teSBpcyBz ZXQsIHRoZW4gdGhlIHN1YnF1ZXJ5J3MgcmFuZ2UgdGFibGUKKwkJCQkgKiB3aWxsIG9ubHkgaGF2 ZSBiZWVuIHBhcnRpYWxseSBjb3BpZWQgdG8gdGhlIGZpbmFsIHJhbmdlCisJCQkJICogdGFibGUu IFNwZWNpZmljYWxseSwgb25seSBSVEVfUkVMQVRJT04gZW50cmllcyBhbmQKKwkJCQkgKiBSVEVf U1VCUVVFUlkgZW50cmllcyB0aGF0IHdlcmUgb25jZSBSVEVfUkVMQVRJT04gZW50cmllcworCQkJ CSAqIHdpbGwgYmUgY29waWVkLCBhcyBwZXIgYWRkX3J0ZXNfdG9fZmxhdF9ydGFibGUuIFRoZXJl Zm9yZSwKKwkJCQkgKiB0aGVyZSdzIG5vIGZpeGVkIHJ0b2Zmc2V0IHRoYXQgd2UgY2FuIGFwcGx5 IHRvIHRoZSBSVElzCisJCQkJICogdXNlZCBkdXJpbmcgcGxhbm5pbmcgdG8gbG9jYXRlIHRoZSBj b3JyZXNwb25kaW5nIHJlbGF0aW9ucworCQkJCSAqIGluIHRoZSBmaW5hbCBydGFibGUuCisJCQkJ ICoKKwkJCQkgKiBXaXRoIG1vcmUgY29tcGxleCBsb2dpYywgd2UgY291bGQgd29yayBhcm91bmQg dGhhdCBwcm9ibGVtCisJCQkJICogYnkgcmVtZW1iZXJpbmcgdGhlIHdob2xlIGNvbnRlbnRzIG9m IHRoZSBzdWJxdWVyeSdzIHJ0YWJsZQorCQkJCSAqIGR1cmluZyBwbGFubmluZywgZGV0ZXJtaW5p bmcgd2hpY2ggb2YgdGhvc2Ugd291bGQgaGF2ZSBiZWVuCisJCQkJICogY29waWVkIHRvIHRoZSBm aW5hbCBydGFibGUsIGFuZCBtYXRjaGluZyB0aGVtIHVwLiBCdXQgaXQKKwkJCQkgKiBkb2Vzbid0 IHNlZW0gbGlrZSBhIHdvcnRod2hpbGUgZW5kZWF2b3IgZm9yIHJpZ2h0IG5vdywKKwkJCQkgKiBi ZWNhdXNlIFJUSXMgZnJvbSBzdWNoIHN1YnF1ZXJpZXMgd29uJ3QgYXBwZWFyIGluIHRoZSBwbGFu CisJCQkJICogdHJlZSBpdHNlbGYsIGp1c3QgaW4gdGhlIHJhbmdlIHRhYmxlLiBIZW5jZSwgd2Ug Y2FuIG5laXRoZXIKKwkJCQkgKiBnZW5lcmF0ZSBub3IgYWNjZXB0IGFkdmljZSBmb3IgdGhlbS4K KwkJCQkgKi8KKwkJCQlpZiAoc3RyY21wKGNoZWNrLT5rZXkucGxhbl9uYW1lLCBydGluZm8tPnBs YW5fbmFtZSkgPT0gMAorCQkJCQkmJiAhcnRpbmZvLT5kdW1teSkKKwkJCQl7CisJCQkJCXJ0b2Zm c2V0ID0gcnRpbmZvLT5ydG9mZnNldDsKKwkJCQkJQXNzZXJ0KHJ0b2Zmc2V0ID4gMCk7CisJCQkJ CWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJLyoKKwkJCSAqIEl0J3Mgbm90IGFuIGVycm9yIGlm IHdlIGRvbid0IGZpbmQgdGhlIHBsYW4gbmFtZTogdGhhdCBqdXN0CisJCQkgKiBtZWFucyB0aGF0 IHdlIHBsYW5uZWQgYSBzdWJwbGFuIGJ5IHRoaXMgbmFtZSBidXQgaXQgZW5kZWQgdXAKKwkJCSAq IGJlaW5nIGEgZHVtbXkgc3VicGxhbiBhbmQgc28gd2Fzbid0IGluY2x1ZGVkIGluIHRoZSBmaW5h bCBwbGFuCisJCQkgKiB0cmVlLgorCQkJICovCisJCQlpZiAocnRvZmZzZXQgPT0gMCkKKwkJCQlj b250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIGNoZWNrLT5rZXkucnRpIGlzIHRoZSBSVEkgdGhh dCB3ZSBzYXcgcHJpb3IgdG8gcmFuZ2UtdGFibGUKKwkJICogZmxhdHRlbmluZywgc28gd2UgbXVz dCBhZGQgdGhlIGFwcHJvcHJpYXRlIFJUIG9mZnNldCB0byBnZXQgdGhlCisJCSAqIGZpbmFsIFJU SS4KKwkJICovCisJCWZsYXRfcnRpID0gY2hlY2stPmtleS5ydGkgKyBydG9mZnNldDsKKwkJQXNz ZXJ0KGZsYXRfcnRpIDw9IGxpc3RfbGVuZ3RoKHBzdG10LT5ydGFibGUpKTsKKworCQkvKiBBc3Nl cnQgdGhhdCB0aGUgc3RyaW5nIHdlIGNvbXB1dGUgbm93IG1hdGNoZXMgdGhlIHByZXZpb3VzIG9u ZS4gKi8KKwkJcmlkX3N0cmluZyA9IHBncGFfaWRlbnRpZmllcl9zdHJpbmcoJnJ0X2lkZW50aWZp ZXJzW2ZsYXRfcnRpIC0gMV0pOworCQlBc3NlcnQoc3RyY21wKHJpZF9zdHJpbmcsIGNoZWNrLT5y aWRfc3RyaW5nKSA9PSAwKTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIENvbnZlcnQgYSBiaXRt YXBzZXQgdG8gYSBDIHN0cmluZyBvZiBjb21tYS1zZXBhcmF0ZWQgaW50ZWdlcnMuCisgKi8KK3N0 YXRpYyBjaGFyICoKK3BncGFfYm1zX3RvX2NzdHJpbmcoQml0bWFwc2V0ICpibXMpCit7CisJU3Ry aW5nSW5mb0RhdGEgYnVmOworCWludAkJCXggPSAtMTsKKworCWlmIChibXNfaXNfZW1wdHkoYm1z KSkKKwkJcmV0dXJuICJub25lIjsKKworCWluaXRTdHJpbmdJbmZvKCZidWYpOworCXdoaWxlICgo eCA9IGJtc19uZXh0X21lbWJlcihibXMsIHgpKSA+PSAwKQorCXsKKwkJaWYgKGJ1Zi5sZW4gPiAw KQorCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiLCAlZCIsIHgpOworCQllbHNlCisJCQlhcHBl bmRTdHJpbmdJbmZvKCZidWYsICIlZCIsIHgpOworCX0KKworCXJldHVybiBidWYuZGF0YTsKK30K KworLyoKKyAqIENvbnZlcnQgYSBKb2luVHlwZSB0byBhIEMgc3RyaW5nLgorICovCitzdGF0aWMg Y29uc3QgY2hhciAqCitwZ3BhX2pvaW50eXBlX3RvX2NzdHJpbmcoSm9pblR5cGUgam9pbnR5cGUp Cit7CisJc3dpdGNoIChqb2ludHlwZSkKKwl7CisJCWNhc2UgSk9JTl9JTk5FUjoKKwkJCXJldHVy biAiaW5uZXIiOworCQljYXNlIEpPSU5fTEVGVDoKKwkJCXJldHVybiAibGVmdCI7CisJCWNhc2Ug Sk9JTl9GVUxMOgorCQkJcmV0dXJuICJmdWxsIjsKKwkJY2FzZSBKT0lOX1JJR0hUOgorCQkJcmV0 dXJuICJyaWdodCI7CisJCWNhc2UgSk9JTl9TRU1JOgorCQkJcmV0dXJuICJzZW1pIjsKKwkJY2Fz ZSBKT0lOX0FOVEk6CisJCQlyZXR1cm4gImFudGkiOworCQljYXNlIEpPSU5fUklHSFRfU0VNSToK KwkJCXJldHVybiAicmlnaHQgc2VtaSI7CisJCWNhc2UgSk9JTl9SSUdIVF9BTlRJOgorCQkJcmV0 dXJuICJyaWdodCBhbnRpIjsKKwkJY2FzZSBKT0lOX1VOSVFVRV9PVVRFUjoKKwkJCXJldHVybiAi dW5pcXVlIG91dGVyIjsKKwkJY2FzZSBKT0lOX1VOSVFVRV9JTk5FUjoKKwkJCXJldHVybiAidW5p cXVlIGlubmVyIjsKKwl9CisJcmV0dXJuICI/Pz8iOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3BsYW5uZXIuaCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdw YV9wbGFubmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdkNDBi OTEwYjAwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Bs YW5uZXIuaApAQCAtMCwwICsxLDE3IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3Bh X3BsYW5uZXIuaAorICoJICBwbGFubmVyIGhvb2tzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2 LTIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250 cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfcGxhbm5lci5oCisgKgorICotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKi8KKyNpZm5kZWYgUEdQQV9QTEFOTkVSX0gKKyNkZWZpbmUgUEdQQV9QTEFOTkVSX0gKKwor ZXh0ZXJuIHZvaWQgcGdwYV9wbGFubmVyX2luc3RhbGxfaG9va3Modm9pZCk7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4uYyBiL2NvbnRyaWIv cGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjEwNzU0NGI2ZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3NjYW4uYwpAQCAtMCwwICsxLDMwNiBAQAorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKgorICogcGdwYV9zY2FuLmMKKyAqCSAgYW5hbHlzaXMgb2Ygc2NhbnMgaW4gUGxhbiB0cmVl cworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW4u YworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKwor I2luY2x1ZGUgInBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNs dWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgor CitzdGF0aWMgcGdwYV9zY2FuICpwZ3BhX21ha2Vfc2NhbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRl eHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJh dGVneSwKKwkJCQkJCQkJIEJpdG1hcHNldCAqcmVsaWRzLAorCQkJCQkJCQkgYm9vbCBuZWVkc19u b19nYXRoZXIpOworCisKK3N0YXRpYyBSVEVLaW5kIHVuaXF1ZV9ub25qb2luX3J0ZWtpbmQoQml0 bWFwc2V0ICpyZWxpZHMsIExpc3QgKnJ0YWJsZSk7CisKKy8qCisgKiBCdWlsZCBhIHBncGFfc2Nh biBvYmplY3QgZm9yIGEgUGxhbiBub2RlIGFuZCB1cGRhdGUgdGhlIHBsYW4gd2Fsa2VyCisgKiBj b250ZXh0IGFzIGFwcG9wcmlhdGUuICBJZiB0aGlzIGlzIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVu ZCBzY2FuLCBhbHNvCisgKiBidWlsZCBwZ3BhX3NjYW4gZm9yIGFueSBzY2FucyB0aGF0IHdlcmUg Y29uc29saWRhdGVkIGludG8gdGhpcyBvbmUgYnkKKyAqIEFwcGVuZC9NZXJnZUFwcGVuZCBwdWxs LXVwLgorICoKKyAqIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBFbGlkZWROb2RlIGZvciB0aGlz IHBsYW4gbm9kZSwgcGFzcyB0aGUgdXBwZXJtb3N0CisgKiBvbmUgYXMgZWxpZGVkX25vZGUsIGVs c2UgcGFzcyBOVUxMLgorICoKKyAqIFNldCB0aGUgJ2JlbmVhdGhfYW55X2dhdGhlcicgbm9kZSBp ZiB3ZSBhcmUgdW5kZXJuZWF0aCBhIEdhdGhlciBvcgorICogR2F0aGVyIE1lcmdlIG5vZGUuCisg KgorICogU2V0IHRoZSAnd2l0aGluX2pvaW5fcHJvYmxlbScgZmxhZyBpZiB3ZSdyZSBpbnNpZGUg b2YgYSBqb2luIHByb2JsZW0gYW5kCisgKiBub3Qgb3RoZXJ3aXNlLgorICovCitwZ3BhX3NjYW4g KgorcGdwYV9idWlsZF9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFu ICpwbGFuLAorCQkJCUVsaWRlZE5vZGUgKmVsaWRlZF9ub2RlLAorCQkJCWJvb2wgYmVuZWF0aF9h bnlfZ2F0aGVyLCBib29sIHdpdGhpbl9qb2luX3Byb2JsZW0pCit7CisJcGdwYV9zY2FuX3N0cmF0 ZWd5IHN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCUJpdG1hcHNldCAgKnJlbGlkcyA9 IE5VTEw7CisJaW50CQkJcnRpID0gLTE7CisJYm9vbAkJbmVlZHNfbm9fZ2F0aGVyID0gIWJlbmVh dGhfYW55X2dhdGhlcjsKKwlMaXN0CSAgICpjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9IE5JTDsK KworCWlmIChlbGlkZWRfbm9kZSAhPSBOVUxMKQorCXsKKwkJTm9kZVRhZwkJZWxpZGVkX3R5cGUg PSBlbGlkZWRfbm9kZS0+ZWxpZGVkX3R5cGU7CisKKwkJLyoKKwkJICogSWYgc2V0cmVmcyBwcm9j ZXNzaW5nIGVsaWRlZCBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSB0aGF0IGhhZAorCQkg KiBvbmx5IG9uZSBzdXJ2aXZpbmcgY2hpbGQsIGl0IG1pZ2h0IGJlIGEgcGFydGl0aW9ud2lzZSBv cGVyYXRpb24sCisJCSAqIGJ1dCB0aGVuIHRoaXMgaXMgZWl0aGVyIGEgc2V0b3Agb3ZlciBzdWJx dWVyaWVzLCBvciBhIHBhcnRpdGlvbndpc2UKKwkJICogb3BlcmF0aW9uICh3aGljaCBtaWdodCBi ZSBhIHNjYW4gb3IgYSBqb2luIGluIHJlYWxpdHksIGJ1dCBoZXJlIHdlCisJCSAqIGRvbid0IGNh cmUgYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGFuZCBjb25zaWRlciBpdCBzaW1wbHkgYSBzY2FuKS4K KwkJICoKKwkJICogQSBzZXRvcCBvdmVyIHN1YnF1ZXJpZXMsIG9yIGEgdHJpdmlhbCBTdWJRdWVy eVNjYW4gdGhhdCB3YXMgZWxpZGVkLAorCQkgKiBpcyBhbiAib3JkaW5hcnkiIHNjYW4gaS5lLiBv bmUgZm9yIHdoaWNoIHdlIG5lZWQgdG8gZ2VuZXJhdGUgYWR2aWNlCisJCSAqIGJlY2F1c2UgdGhl IHBsYW5uZXIgaGFzIG5vdCBtYWRlIGFueSBtZWFuaW5nZnVsIGNob2ljZS4KKwkJICovCisJCXJl bGlkcyA9IGVsaWRlZF9ub2RlLT5yZWxpZHM7CisJCWlmICgoZWxpZGVkX3R5cGUgPT0gVF9BcHBl bmQgfHwgZWxpZGVkX3R5cGUgPT0gVF9NZXJnZUFwcGVuZCkgJiYKKwkJCXVuaXF1ZV9ub25qb2lu X3J0ZWtpbmQocmVsaWRzLAorCQkJCQkJCQkgICB3YWxrZXItPnBzdG10LT5ydGFibGUpID09IFJU RV9SRUxBVElPTikKKwkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX1BBUlRJVElPTldJU0U7CisJCWVs c2UKKwkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOworCisJCS8qCisJCSAqIElmIHRo aXMgaXMgYW4gZWxpZGVkIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlLCB3ZSBkb24ndCBuZWVk IHRvCisJCSAqIGVtaXQgTk9fR0FUSEVSKCkgYmVjYXVzZSB3ZSdsbCBhbHNvIGVtaXQgaXQgZm9y IHRoZSB1bmRlcmx5aW5nCisJCSAqIHNjYW4sIHdoaWNoIGlzIGdvb2QgZW5vdWdoLgorCQkgKgor CQkgKiBJZiBpdCdzIGFuIGVsaWRlZCBTdWJxdWVyeVNjYW4sIHRoZSBzYW1lIGFyZ3VtZW50IGlz IGxpa2VseSB0bworCQkgKiBhcHBseSwgYmVjYXVzZSB0aGUgc3VicXVlcnkgcHJvYmFibHkgY29u dGFpbnMgcmVmZXJlbmNlcyB0byB0YWJsZXMsCisJCSAqIGFuZCBpZiBpdCBkb2Vzbid0LCB0aGVu IHBsYW5uZXIgaXNuJ3QgbGlrZWx5IHRvIHdhbnQgdG8gZG8gaXQgaW4KKwkJICogcGFyYWxsZWwg YW55d2F5LiBCdXQgYWxzbywgd2UgY2FuJ3QgaW1wbGVtZW50IE5PX0dBVEhFUigpIGFkdmljZQor CQkgKiBmb3IgYSBub24tcmVsYXRpb24gUlRFS2luZCwgYmVjYXVzZSBnZXRfcmVsYXRpb25faW5m bygpIGlzbid0CisJCSAqIGNhbGxlZCBpbiBzdWNoIGNhc2VzLiBUaGF0IHNob3VsZCBwcm9iYWJs eSBiZSBmaXhlZCBhdCBzb21lIHBvaW50LAorCQkgKiBidXQgdW50aWwgdGhlbiB3ZSBzaG91bGRu J3QgZW1pdCBpdC4KKwkJICovCisJCW5lZWRzX25vX2dhdGhlciA9IGZhbHNlOworCisJCS8qIEpv aW4gUlRJcyBjYW4gYmUgcHJlc2VudCwgYnV0IGFkdmljZSBuZXZlciByZWZlcnMgdG8gdGhlbS4g Ki8KKwkJcmVsaWRzID0gcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKHJlbGlkcywgd2Fsa2Vy LT5wc3RtdC0+cnRhYmxlKTsKKwl9CisJZWxzZSBpZiAoKHJ0aSA9IHBncGFfc2NhbnJlbGlkKHBs YW4pKSAhPSAwKQorCXsKKwkJUmFuZ2VUYmxFbnRyeSAqcnRlOworCisJCXJlbGlkcyA9IGJtc19t YWtlX3NpbmdsZXRvbihydGkpOworCisJCXN3aXRjaCAobm9kZVRhZyhwbGFuKSkKKwkJeworCQkJ Y2FzZSBUX1NlcVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fU0VROworCQkJCWJyZWFr OworCQkJY2FzZSBUX0JpdG1hcEhlYXBTY2FuOgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0JJ VE1BUF9IRUFQOworCQkJCWJyZWFrOworCQkJY2FzZSBUX0luZGV4U2NhbjoKKwkJCQlzdHJhdGVn eSA9IFBHUEFfU0NBTl9JTkRFWDsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9JbmRleE9ubHlTY2Fu OgorCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0lOREVYX09OTFk7CisJCQkJYnJlYWs7CisJCQlj YXNlIFRfVGlkU2NhbjoKKwkJCWNhc2UgVF9UaWRSYW5nZVNjYW46CisJCQkJc3RyYXRlZ3kgPSBQ R1BBX1NDQU5fVElEOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKworCQkJCS8qCisJCQkJICog VGhpcyBjYXNlIGluY2x1ZGVzIGEgRm9yZWlnblNjYW4gdGFyZ2V0aW5nIGEgc2luZ2xlCisJCQkJ ICogcmVsYXRpb247IG5vIG90aGVyIHN0cmF0ZWd5IGlzIHBvc3NpYmxlIGluIHRoYXQgY2FzZSwg YnV0CisJCQkJICogc2VlIGJlbG93LCB3aGVyZSB0aGluZ3MgYXJlIGRpZmZlcmVudCBpbiBtdWx0 aS1yZWxhdGlvbgorCQkJCSAqIGNhc2VzLgorCQkJCSAqLworCQkJCXN0cmF0ZWd5ID0gUEdQQV9T Q0FOX09SRElOQVJZOworCisJCQkJLyoKKwkJCQkgKiBXZSBjYW4ndCBoYW5kbGUgTk9fR0FUSEVS KCkgZm9yIG5vbi1yZWxhdGlvbiBSVEVzIGJlY2F1c2UKKwkJCQkgKiBnZXRfcmVsYXRpb25faW5m byB3b24ndCBiZSBjYWxsZWQuCisJCQkJICovCisJCQkJcnRlID0gcnRfZmV0Y2gocnRpLCB3YWxr ZXItPnBzdG10LT5ydGFibGUpOworCQkJCWlmIChydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9O KQorCQkJCQluZWVkc19ub19nYXRoZXIgPSBmYWxzZTsKKworCQkJCWJyZWFrOworCQl9CisJfQor CWVsc2UgaWYgKChyZWxpZHMgPSBwZ3BhX3JlbGlkcyhwbGFuKSkgIT0gTlVMTCkKKwl7CisJCXN3 aXRjaCAobm9kZVRhZyhwbGFuKSkKKwkJeworCQkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorCisJCQkJ LyoKKwkJCQkgKiBJZiBtdWx0aXBsZSByZWxhdGlvbnMgYXJlIGJlaW5nIHRhcmdldGVkIGJ5IGEg c2luZ2xlCisJCQkJICogZm9yZWlnbiBzY2FuLCB0aGVuIHRoZSBmb3JlaWduIGpvaW4gaGFzIGJl ZW4gcHVzaGVkIHRvIHRoZQorCQkJCSAqIHJlbW90ZSBzaWRlLCBhbmQgd2Ugd2FudCB0aGF0IHRv IGJlIHJlZmxlY3RlZCBpbiB0aGUKKwkJCQkgKiBnZW5lcmF0ZWQgYWR2aWNlLgorCQkJCSAqLwor CQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX0ZPUkVJR047CisJCQkJYnJlYWs7CisJCQljYXNlIFRf QXBwZW5kOgorCisJCQkJLyoKKwkJCQkgKiBBcHBlbmQgbm9kZXMgY2FuIHJlcHJlc2VudCBwYXJ0 aXRpb253aXNlIHNjYW5zIG9mIGEgYQorCQkJCSAqIHJlbGF0aW9uLCBidXQgd2hlbiB0aGV5IGlt cGxlbWVudCBhIHNldCBvcGVyYXRpb24sIHRoZXkgYXJlCisJCQkJICoganVzdCBvcmRpbmFyeSBz Y2Fucy4KKwkJCQkgKi8KKwkJCQlpZiAodW5pcXVlX25vbmpvaW5fcnRla2luZChyZWxpZHMsIHdh bGtlci0+cHN0bXQtPnJ0YWJsZSkKKwkJCQkJPT0gUlRFX1JFTEFUSU9OKQorCQkJCQlzdHJhdGVn eSA9IFBHUEFfU0NBTl9QQVJUSVRJT05XSVNFOworCQkJCWVsc2UKKwkJCQkJc3RyYXRlZ3kgPSBQ R1BBX1NDQU5fT1JESU5BUlk7CisKKwkJCQkvKiBOT19HQVRIRVIoKSBzaG91bGQgYmUgZW1pdHRl ZCBmb3IgdW5kZXJseWluZyByZWxzIG9ubHkuICovCisJCQkJbmVlZHNfbm9fZ2F0aGVyID0gZmFs c2U7CisKKwkJCQkvKiBCZSBzdXJlIHRvIGFjY291bnQgZm9yIHB1bGxlZC11cCBzY2Fucy4gKi8K KwkJCQljaGlsZF9hcHBlbmRfcmVsaWRfc2V0cyA9CisJCQkJCSgoQXBwZW5kICopIHBsYW4pLT5j aGlsZF9hcHBlbmRfcmVsaWRfc2V0czsKKwkJCQlicmVhazsKKwkJCWNhc2UgVF9NZXJnZUFwcGVu ZDoKKwkJCQkvKiBTb21lIGxvZ2ljIGhlcmUgYXMgZm9yIEFwcGVuZCwgYWJvdmUuICovCisJCQkJ aWYgKHVuaXF1ZV9ub25qb2luX3J0ZWtpbmQocmVsaWRzLCB3YWxrZXItPnBzdG10LT5ydGFibGUp CisJCQkJCT09IFJURV9SRUxBVElPTikKKwkJCQkJc3RyYXRlZ3kgPSBQR1BBX1NDQU5fUEFSVElU SU9OV0lTRTsKKwkJCQllbHNlCisJCQkJCXN0cmF0ZWd5ID0gUEdQQV9TQ0FOX09SRElOQVJZOwor CisJCQkJLyogTk9fR0FUSEVSKCkgc2hvdWxkIGJlIGVtaXR0ZWQgZm9yIHVuZGVybHlpbmcgcmVs cyBvbmx5LiAqLworCQkJCW5lZWRzX25vX2dhdGhlciA9IGZhbHNlOworCisJCQkJLyogQmUgc3Vy ZSB0byBhY2NvdW50IGZvciBwdWxsZWQtdXAgc2NhbnMuICovCisJCQkJY2hpbGRfYXBwZW5kX3Jl bGlkX3NldHMgPQorCQkJCQkoKE1lcmdlQXBwZW5kICopIHBsYW4pLT5jaGlsZF9hcHBlbmRfcmVs aWRfc2V0czsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RyYXRlZ3kgPSBQR1BBX1ND QU5fT1JESU5BUlk7CisKKwkJCQkvKgorCQkJCSAqIFdlIGNhbid0IGhhbmRsZSBOT19HQVRIRVIo KSBmb3Igc2luZ2xlIG5vbi1yZWxhdGlvbiBSVEVzCisJCQkJICogYmVjYXVzZSBnZXRfcmVsYXRp b25faW5mbyB3b24ndCBiZSBjYWxsZWQuCisJCQkJICovCisJCQkJaWYgKGJtc19tZW1iZXJzaGlw KHJlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCQl7CisJCQkJCVJhbmdlVGJsRW50cnkgKnJ0 ZTsKKworCQkJCQlydGUgPSBydF9mZXRjaChibXNfc2luZ2xldG9uX21lbWJlcihyZWxpZHMpLAor CQkJCQkJCQkgICB3YWxrZXItPnBzdG10LT5ydGFibGUpOworCQkJCQlpZiAocnRlLT5ydGVraW5k ICE9IFJURV9SRUxBVElPTikKKwkJCQkJCW5lZWRzX25vX2dhdGhlciA9IGZhbHNlOworCQkJCX0K KworCQkJCWJyZWFrOworCQl9CisKKworCQkvKiBKb2luIFJUSXMgY2FuIGJlIHByZXNlbnQsIGJ1 dCBhZHZpY2UgbmV2ZXIgcmVmZXJzIHRvIHRoZW0uICovCisJCXJlbGlkcyA9IHBncGFfZmlsdGVy X291dF9qb2luX3JlbGlkcyhyZWxpZHMsIHdhbGtlci0+cHN0bXQtPnJ0YWJsZSk7CisJfQorCisJ LyoKKwkgKiBJZiB0aGlzIGlzIGFuIEFwcGVuZCBvciBNZXJnZUFwcGVuZCBub2RlIGludG8gd2hp Y2ggc3Vib3JkaW5hdGUgQXBwZW5kCisJICogb3IgTWVyZ2VBcHBlbmQgcGF0aHMgd2VyZSBtZXJn ZWQsIGVhY2ggb2YgdGhvc2UgbWVyZ2VkIHBhdGhzIGlzCisJICogZWZmZWN0aXZlbHkgYW5vdGhl ciBzY2FuIGZvciB3aGljaCB3ZSBuZWVkIHRvIGFjY291bnQuCisJICovCisJZm9yZWFjaF9ub2Rl KEJpdG1hcHNldCwgY2hpbGRfcmVsaWRzLCBjaGlsZF9hcHBlbmRfcmVsaWRfc2V0cykKKwl7CisJ CUJpdG1hcHNldCAgKmNoaWxkX25vbmpvaW5fcmVsaWRzOworCisJCWNoaWxkX25vbmpvaW5fcmVs aWRzID0KKwkJCXBncGFfZmlsdGVyX291dF9qb2luX3JlbGlkcyhjaGlsZF9yZWxpZHMsCisJCQkJ CQkJCQkJd2Fsa2VyLT5wc3RtdC0+cnRhYmxlKTsKKwkJKHZvaWQpIHBncGFfbWFrZV9zY2FuKHdh bGtlciwgcGxhbiwgc3RyYXRlZ3ksCisJCQkJCQkJICBjaGlsZF9ub25qb2luX3JlbGlkcywgZmFs c2UpOworCX0KKworCS8qCisJICogSWYgdGhpcyBwbGFuIG5vZGUgaGFzIG5vIGFzc29jaWF0ZWQg UlRJcywgaXQncyBub3QgYSBzY2FuLiBXaGVuIHRoZQorCSAqICd3aXRoaW5fam9pbl9wcm9ibGVt JyBmbGFnIGlzIHNldCwgdGhhdCdzIHVuZXhwZWN0ZWQsIHNvIHRocm93IGFuCisJICogZXJyb3Is IGVsc2UgcmV0dXJuIHF1aWV0bHkuCisJICovCisJaWYgKHJlbGlkcyA9PSBOVUxMKQorCXsKKwkJ aWYgKHdpdGhpbl9qb2luX3Byb2JsZW0pCisJCQllbG9nKEVSUk9SLCAicGxhbiBub2RlIGhhcyBu byBSVElzOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisK KwlyZXR1cm4gcGdwYV9tYWtlX3NjYW4od2Fsa2VyLCBwbGFuLCBzdHJhdGVneSwgcmVsaWRzLCBu ZWVkc19ub19nYXRoZXIpOworfQorCisvKgorICogQ3JlYXRlIGEgc2luZ2xlIHBncGFfc2NhbiBv YmplY3QgYW5kIHVwZGF0ZSB0aGUgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0LgorICovCitzdGF0 aWMgcGdwYV9zY2FuICoKK3BncGFfbWFrZV9zY2FuKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAq d2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJICAgcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0ZWd5LCBC aXRtYXBzZXQgKnJlbGlkcywKKwkJCSAgIGJvb2wgbmVlZHNfbm9fZ2F0aGVyKQoreworCXBncGFf c2NhbiAgKnNjYW47CisKKwkvKiBDcmVhdGUgdGhlIHNjYW4gb2JqZWN0LiAqLworCXNjYW4gPSBw YWxsb2Moc2l6ZW9mKHBncGFfc2NhbikpOworCXNjYW4tPnBsYW4gPSBwbGFuOworCXNjYW4tPnN0 cmF0ZWd5ID0gc3RyYXRlZ3k7CisJc2Nhbi0+cmVsaWRzID0gcmVsaWRzOworCisJLyogQWRkIGl0 IHRvIHRoZSBhcHByb3ByaWF0ZSBsaXN0LiAqLworCXdhbGtlci0+c2NhbnNbc2Nhbi0+c3RyYXRl Z3ldID0gbGFwcGVuZCh3YWxrZXItPnNjYW5zW3NjYW4tPnN0cmF0ZWd5XSwKKwkJCQkJCQkJCQkJ c2Nhbik7CisKKwkvKiBDYWxsZXIgdGVsbHMgdXMgd2hldGhlciBOT19HQVRIRVIoKSBhZHZpY2Ug Zm9yIHRoaXMgc2NhbiBpcyBuZWVkZWQuICovCisJaWYgKG5lZWRzX25vX2dhdGhlcikKKwkJd2Fs a2VyLT5ub19nYXRoZXJfc2NhbnMgPSBibXNfYWRkX21lbWJlcnMod2Fsa2VyLT5ub19nYXRoZXJf c2NhbnMsCisJCQkJCQkJCQkJCQkgIHNjYW4tPnJlbGlkcyk7CisKKwlyZXR1cm4gc2NhbjsKK30K KworLyoKKyAqIERldGVybWluZSB0aGUgdW5pcXVlIHJ0ZWtpbmQgb2YgYSBzZXQgb2YgcmVsaWRz LgorICovCitzdGF0aWMgUlRFS2luZAordW5pcXVlX25vbmpvaW5fcnRla2luZChCaXRtYXBzZXQg KnJlbGlkcywgTGlzdCAqcnRhYmxlKQoreworCWludAkJCXJ0aSA9IC0xOworCWJvb2wJCWZpcnN0 ID0gdHJ1ZTsKKwlSVEVLaW5kCQlydGVraW5kOworCisJQXNzZXJ0KHJlbGlkcyAhPSBOVUxMKTsK KworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkKKwl7 CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKworCQlpZiAo cnRlLT5ydGVraW5kID09IFJURV9KT0lOKQorCQkJY29udGludWU7CisKKwkJaWYgKGZpcnN0KQor CQl7CisJCQlydGVraW5kID0gcnRlLT5ydGVraW5kOworCQkJZmlyc3QgPSBmYWxzZTsKKwkJfQor CQllbHNlIGlmIChydGVraW5kICE9IHJ0ZS0+cnRla2luZCkKKwkJCWVsb2coRVJST1IsICJydGVr aW5kIG1pc21hdGNoOiAlZCB2cy4gJWQiLAorCQkJCSBydGVraW5kLCBydGUtPnJ0ZWtpbmQpOwor CX0KKworCWlmIChmaXJzdCkKKwkJZWxvZyhFUlJPUiwgIm5vIG5vbi1SVEVfSk9JTiBSVEVzIGZv dW5kIik7CisKKwlyZXR1cm4gcnRla2luZDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2UvcGdwYV9zY2FuLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbi5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYmI4NzI2ZmYxZQotLS0g L2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV9zY2FuLmgKQEAgLTAs MCArMSw4NSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogcGdwYV9zY2FuLmgKKyAqCSAg YW5hbHlzaXMgb2Ygc2NhbnMgaW4gUGxhbiB0cmVlcworICoKKyAqIEZvciBwdXJwb3NlcyBvZiB0 aGlzIG1vZHVsZSwgYSAic2NhbiIgaW5jbHVkZXMgKDEpIHNpbmdsZSBwbGFuIG5vZGVzIHRoYXQK KyAqIHNjYW4gbXVsdGlwbGUgUlRJcywgc3VjaCBhcyBhIGRlZ2VuZXJhdGUgUmVzdWx0IG5vZGUg dGhhdCByZXBsYWNlcyB3aGF0CisgKiB3b3VsZCBvdGhlcndpc2UgaGF2ZSBiZWVuIGEgam9pbiwg YW5kICgyKSBBcHBlbmQgYW5kIE1lcmdlQXBwZW5kIG5vZGVzCisgKiBpbXBsZW1lbnRpbmcgYSBw YXJ0aXRpb253aXNlIHNjYW4gb3IgYSBwYXJ0aXRpb253aXNlIGpvaW4uIFNhaWQKKyAqIGRpZmZl cmVudGx5LCBzY2FucyBhcmUgdGhlIGxlYXZlcyBvZiB0aGUgam9pbiB0cmVlIGZvciBhIHNpbmds ZSBqb2luCisgKiBwcm9ibGVtLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI1LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9wZ19wbGFu X2FkdmljZS9wZ3BhX3NjYW4uaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVm IFBHUEFfU0NBTl9ICisjZGVmaW5lIFBHUEFfU0NBTl9ICisKKyNpbmNsdWRlICJub2Rlcy9wbGFu bm9kZXMuaCIKKwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0IHBncGFf cGxhbl93YWxrZXJfY29udGV4dDsKKworLyoKKyAqIFNjYW4gc3RyYXRlZ2llcy4KKyAqCisgKiBQ R1BBX1NDQU5fT1JESU5BUlkgaXMgYW55IHNjYW4gc3RyYXRlZ3kgdGhhdCBpc24ndCBpbnRlcmVz dGluZyB0byB1cworICogYmVjYXVzZSB0aGVyZSBpcyBubyBtZWFuaW5nZnVsIHBsYW5uZXIgZGVj aXNpb24gaW52b2x2ZWQuIEZvciBleGFtcGxlLAorICogdGhlIG9ubHkgd2F5IHRvIHNjYW4gYSBz dWJxdWVyeSBpcyBhIFN1YnF1ZXJ5U2NhbiwgYW5kIHRoZSBvbmx5IHdheSB0bworICogc2NhbiBh IFZBTFVFUyBjb25zdHJ1Y3QgaXMgYSBWYWx1ZXNTY2FuLiBXZSBuZWVkIG5vdCBjYXJlIGV4YWN0 bHkgd2hpY2gKKyAqIHR5cGUgb2YgcGxhbm5lciBub2RlIHdhcyB1c2VkIGluIHN1Y2ggY2FzZXMs IGJlY2F1c2UgdGhlIHNhbWUgdGhpbmcgd2lsbAorICogaGFwcGVuIHdoZW4gcmVwbGFubmluZy4K KyAqCisgKiBQR1BBX1NDQU5fT1JESU5BUlkgYWxzbyBpbmNsdWRlcyBSZXN1bHQgbm9kZXMgdGhh dCBjb3JyZXNwb25kIHRvIHNjYW5zCisgKiBvciBldmVuIGpvaW5zIHRoYXQgYXJlIHByb3ZlZCBl bXB0eS4gV2UgZG9uJ3Qga25vdyB3aGV0aGVyIG9yIG5vdCB0aGUgc2NhbgorICogb3Igam9pbiB3 aWxsIHN0aWxsIGJlIHByb3ZhYmx5IGVtcHR5IGF0IHJlcGxhbm5pbmcgdGltZSwgYnV0IGlmIGl0 IGlzLAorICogdGhlbiBubyBzY2FuLXR5cGUgYWR2aWNlIGlzIG5lZWRlZCwgYW5kIGlmIGl0J3Mg bm90LCB3ZSBjYW4ndCByZWNvbW1lbmQKKyAqIGEgc2NhbiB0eXBlIGJhc2VkIG9uIHRoZSBjdXJy ZW50IHBsYW4uCisgKgorICogUEdQQV9TQ0FOX1BBUlRJVElPTldJU0UgYWxzbyBsdW1wcyB0b2dl dGhlciBzY2FucyBhbmQgam9pbnM6IHRoaXMgY2FuCisgKiBiZSBlaXRoZXIgYSBwYXJ0aXRpb253 aXNlIHNjYW4gb2YgYSBwYXJ0aXRpb25lZCB0YWJsZSBvciBhIHBhcnRpdGlvbndpc2UKKyAqIGpv aW4gYmV0d2VlbiBzZXZlcmFsIHBhcnRpdGlvbmVkIHRhYmxlcy4gTm90ZSB0aGF0IGFsbCBkZWNp c2lvbnMgYWJvdXQKKyAqIHdoZXRoZXIgb3Igbm90IHRvIHVzZSBwYXJ0aXRpb253aXNlIGpvaW4g YXJlIG1lYW5pbmdmdWw6IG5vIG1hdHRlciB3aGF0CisgKiB3ZSBkZWNpZGVkIHRoaXMgdGltZSwg d2UgY291bGQgZG8gbW9yZSBvciBmZXdlciB0aGluZ3MgcGFydGl0aW9ud2lzZSB0aGUKKyAqIG5l eHQgdGltZS4KKyAqCisgKiBQR1BBX1NDQU5fRk9SRUlHTiBpcyBvbmx5IHVzZWQgd2hlbiB0aGVy ZSdzIG1vcmUgdGhhbiBvbmUgcmVsYXRpb24gaW52b2x2ZWQ7CisgKiBhIHNpbmdsZS10YWJsZSBm b3JlaWduIHNjYW4gaXMgY2xhc3NpZmllZCBhcyBvcmRpbmFyeSwgc2luY2UgdGhlcmUgaXMgbm8K KyAqIGRlY2lzaW9uIHRvIG1ha2UgaW4gdGhhdCBjYXNlLgorICoKKyAqIE90aGVyIHNjYW4gc3Ry YXRlZ2llcyBtYXAgb25lLXRvLW9uZSB0byBwbGFuIG5vZGVzLgorICovCit0eXBlZGVmIGVudW0K K3sKKwlQR1BBX1NDQU5fT1JESU5BUlkgPSAwLAorCVBHUEFfU0NBTl9TRVEsCisJUEdQQV9TQ0FO X0JJVE1BUF9IRUFQLAorCVBHUEFfU0NBTl9GT1JFSUdOLAorCVBHUEFfU0NBTl9JTkRFWCwKKwlQ R1BBX1NDQU5fSU5ERVhfT05MWSwKKwlQR1BBX1NDQU5fUEFSVElUSU9OV0lTRSwKKwlQR1BBX1ND QU5fVElECisJLyogdXBkYXRlIE5VTV9QR1BBX1NDQU5fU1RSQVRFR1kgaWYgeW91IGFkZCBhbnl0 aGluZyBoZXJlICovCit9IHBncGFfc2Nhbl9zdHJhdGVneTsKKworI2RlZmluZSBOVU1fUEdQQV9T Q0FOX1NUUkFURUdZCSgoaW50KSBQR1BBX1NDQU5fVElEICsgMSkKKworLyoKKyAqIEFsbCBvZiB0 aGUgZGV0YWlscyB3ZSBuZWVkIHJlZ2FyZGluZyBhIHNjYW4uCisgKi8KK3R5cGVkZWYgc3RydWN0 IHBncGFfc2NhbgoreworCVBsYW4JICAgKnBsYW47CisJcGdwYV9zY2FuX3N0cmF0ZWd5IHN0cmF0 ZWd5OworCUJpdG1hcHNldCAgKnJlbGlkczsKK30gcGdwYV9zY2FuOworCitleHRlcm4gcGdwYV9z Y2FuICpwZ3BhX2J1aWxkX3NjYW4ocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsIFBs YW4gKnBsYW4sCisJCQkJCQkJCSAgRWxpZGVkTm9kZSAqZWxpZGVkX25vZGUsCisJCQkJCQkJCSAg Ym9vbCBiZW5lYXRoX2FueV9nYXRoZXIsCisJCQkJCQkJCSAgYm9vbCB3aXRoaW5fam9pbl9wcm9i bGVtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf c2Nhbm5lci5sIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzQ5YjI5ZDkwNmQKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfc2Nhbm5lci5sCkBAIC0wLDAgKzEs MzAyIEBACisldG9weworLyoKKyAqIFNjYW5uZXIgZm9yIHBsYW4gYWR2aWNlCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDAwLTIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3Vw CisgKgorICogY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3NjYW5uZXIubAorICovCisjaW5j bHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImNvbW1vbi9zdHJpbmcuaCIKKyNpbmNsdWRl ICJub2Rlcy9taXNjbm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvc2NhbnN1cC5oIgorCisjaW5j bHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX3BhcnNlci5oIgorCisvKgorICogRXh0 cmEgZGF0YSB0aGF0IHdlIHBhc3MgYXJvdW5kIHdoZW4gZHVyaW5nIHNjYW5uaW5nLgorICoKKyAq ICdsaXRidWYnIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoZSA8eGQ+IGV4Y2x1c2l2ZSBzdGF0ZSwg d2hpY2ggaGFuZGxlcworICogZG91YmxlLXF1b3RlZCBpZGVudGlmaWVycy4KKyAqLwordHlwZWRl ZiBzdHJ1Y3QgcGdwYV95eV9leHRyYV90eXBlCit7CisJU3RyaW5nSW5mb0RhdGEJbGl0YnVmOwor fSBwZ3BhX3l5X2V4dHJhX3R5cGU7CisKK30KKworJXsKKy8qIExDT1ZfRVhDTF9TVEFSVCAqLwor CisjZGVmaW5lIFlZX0RFQ0wgXAorCWV4dGVybiBpbnQgcGdwYV95eWxleCh1bmlvbiBZWVNUWVBF ICp5eWx2YWxfcGFyYW0sIExpc3QgKipyZXN1bHQsIFwKKwkJCQkJCSAgY2hhciAqKnBhcnNlX2Vy cm9yX21zZ19wLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisKKy8qIE5vIHJlYXNvbiB0byBjb25zdHJh aW4gYW1vdW50IG9mIGRhdGEgc2x1cnBlZCAqLworI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2 Nzc3MjE2CisKKy8qIEF2b2lkIGV4aXQoKSBvbiBmYXRhbCBzY2FubmVyIGVycm9ycyAoYSBiaXQg dWdseSAtLSBzZWUgeXlfZmF0YWxfZXJyb3IpICovCisjdW5kZWYgZnByaW50ZgorI2RlZmluZSBm cHJpbnRmKGZpbGUsIGZtdCwgbXNnKSAgZnByaW50Zl90b19lcmVwb3J0KGZtdCwgbXNnKQorCitz dGF0aWMgdm9pZAorZnByaW50Zl90b19lcmVwb3J0KGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgY2hh ciAqbXNnKQoreworCWVyZXBvcnQoRVJST1IsIChlcnJtc2dfaW50ZXJuYWwoIiVzIiwgbXNnKSkp OworfQorJX0KKworJW9wdGlvbiByZWVudHJhbnQKKyVvcHRpb24gYmlzb24tYnJpZGdlCislb3B0 aW9uIDhiaXQKKyVvcHRpb24gbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24gbm9kZWZhdWx0Cisl b3B0aW9uIG5vaW5wdXQKKyVvcHRpb24gbm91bnB1dAorJW9wdGlvbiBub3l5d3JhcAorJW9wdGlv biBub3l5YWxsb2MKKyVvcHRpb24gbm95eXJlYWxsb2MKKyVvcHRpb24gbm95eWZyZWUKKyVvcHRp b24gd2FybgorJW9wdGlvbiBwcmVmaXg9InBncGFfeXkiCislb3B0aW9uIGV4dHJhLXR5cGU9InBn cGFfeXlfZXh0cmFfdHlwZSAqIgorCisvKgorICogV2hhdCBmb2xsb3dzIGlzIGEgc2V2ZXJlbHkg c3RyaXBwZWQtZG93biB2ZXJzaW9uIG9mIHRoZSBjb3JlIHNjYW5uZXIuIFdlCisgKiBvbmx5IGNh cmUgYWJvdXQgcmVjb2duaXppbmcgaWRlbnRpZmllcnMgd2l0aCBvciB3aXRob3V0IGlkZW50aWZp ZXIgcXVvdGluZworICogKGkuZS4gZG91YmxlLXF1b3RpbmcpLCBkZWNpbWFsIGludGVnZXJzLCBh bmQgYSBzbWFsbCBoYW5kZnVsIG9mIG90aGVyCisgKiB0aGluZ3MuIEtlZXAgdGhlc2UgcnVsZXMg aW4gc3luYyB3aXRoIHNyYy9iYWNrZW5kL3BhcnNlci9zY2FuLmwuIEFzIGluIHRoYXQKKyAqIGZp bGUsIHdlIHVzZSBhbiBleGNsdXNpdmUgc3RhdGUgY2FsbGVkICd4YycgZm9yIEMtc3R5bGUgY29t bWVudHMsIGFuZCBhbgorICogZXhjbHVzaXZlIHN0YXRlIGNhbGxlZCAneGQnIGZvciBkb3VibGUt cXVvdGVkIGlkZW50aWZpZXJzLgorICovCisleCB4YworJXggeGQKKworaWRlbnRfc3RhcnQJCVtB LVphLXpcMjAwLVwzNzdfXQoraWRlbnRfY29udAkJW0EtWmEtelwyMDAtXDM3N18wLTlcJF0KKwor aWRlbnRpZmllcgkJe2lkZW50X3N0YXJ0fXtpZGVudF9jb250fSoKKworZGVjZGlnaXQJCVswLTld CitkZWNpbnRlZ2VyCQl7ZGVjZGlnaXR9KF8/e2RlY2RpZ2l0fSkqCisKK3NwYWNlCQkJWyBcdFxu XHJcZlx2XQord2hpdGVzcGFjZQkJe3NwYWNlfSsKKworZHF1b3RlCQkJXCIKK3hkc3RhcnQJCQl7 ZHF1b3RlfQoreGRzdG9wCQkJe2RxdW90ZX0KK3hkZG91YmxlCQl7ZHF1b3RlfXtkcXVvdGV9Cit4 ZGluc2lkZQkJW14iXSsKKworeGNzdGFydAkJCVwvXCoKK3hjc3RvcAkJCVwqK1wvCit4Y2luc2lk ZQkJW14qL10rCisKKyUlCisKK3t3aGl0ZXNwYWNlfQl7IC8qIGlnbm9yZSAqLyB9CisKK3tpZGVu dGlmaWVyfQl7CisJCQkJCWNoYXIgICAqc3RyOworCQkJCQlib29sCWZhaWw7CisJCQkJCXBncGFf YWR2aWNlX3RhZ190eXBlCXRhZzsKKworCQkJCQkvKgorCQkJCQkgKiBVbmxpa2UgdGhlIGNvcmUg c2Nhbm5lciwgd2UgZG9uJ3QgdHJ1bmNhdGUgaWRlbnRpZmllcnMKKwkJCQkJICogaGVyZS4gVGhl cmUgaXMgbm8gb2J2aW91cyByZWFzb24gdG8gZG8gc28uCisJCQkJCSAqLworCQkJCQlzdHIgPSBk b3duY2FzZV9pZGVudGlmaWVyKHl5dGV4dCwgeXlsZW5nLCBmYWxzZSwgZmFsc2UpOworCQkJCQl5 eWx2YWwtPnN0ciA9IHN0cjsKKworCQkJCQkvKgorCQkJCQkgKiBJZiBpdCdzIG5vdCBhIHRhZywg anVzdCByZXR1cm4gVE9LX0lERU5UOyBlbHNlLCByZXR1cm4KKwkJCQkJICogYSB0b2tlbiB0eXBl IGJhc2VkIG9uIGhvdyBmdXJ0aGVyIHBhcnNpbmcgc2hvdWxkCisJCQkJCSAqIHByb2NlZWQuCisJ CQkJCSAqLworCQkJCQl0YWcgPSBwZ3BhX3BhcnNlX2FkdmljZV90YWcoc3RyLCAmZmFpbCk7CisJ CQkJCWlmIChmYWlsKQorCQkJCQkJcmV0dXJuIFRPS19JREVOVDsKKwkJCQkJZWxzZSBpZiAodGFn ID09IFBHUEFfVEFHX0pPSU5fT1JERVIpCisJCQkJCQlyZXR1cm4gVE9LX1RBR19KT0lOX09SREVS OworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdfSU5ERVhfU0NBTiB8fAorCQkJCQkJCSB0 YWcgPT0gUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FOKQorCQkJCQkJcmV0dXJuIFRPS19UQUdfSU5E RVg7CisJCQkJCWVsc2UgaWYgKHRhZyA9PSBQR1BBX1RBR19CSVRNQVBfSEVBUF9TQ0FOKQorCQkJ CQkJcmV0dXJuIFRPS19UQUdfQklUTUFQOworCQkJCQllbHNlIGlmICh0YWcgPT0gUEdQQV9UQUdf U0VRX1NDQU4gfHwKKwkJCQkJCQkgdGFnID09IFBHUEFfVEFHX1RJRF9TQ0FOIHx8CisJCQkJCQkJ IHRhZyA9PSBQR1BBX1RBR19OT19HQVRIRVIpCisJCQkJCQlyZXR1cm4gVE9LX1RBR19TSU1QTEU7 CisJCQkJCWVsc2UKKwkJCQkJCXJldHVybiBUT0tfVEFHX0dFTkVSSUM7CisJCQkJfQorCit7ZGVj aW50ZWdlcn0JeworCQkJCQljaGFyICAgKmVuZHB0cjsKKworCQkJCQllcnJubyA9IDA7CisJCQkJ CXl5bHZhbC0+aW50ZWdlciA9IHN0cnRvaW50KHl5dGV4dCwgJmVuZHB0ciwgMTApOworCQkJCQlp ZiAoKmVuZHB0ciAhPSAnXDAnIHx8IGVycm5vID09IEVSQU5HRSkKKwkJCQkJCXBncGFfeXllcnJv cihyZXN1bHQsIHBhcnNlX2Vycm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCQkgImludGVn ZXIgb3V0IG9mIHJhbmdlIik7CisJCQkJCXJldHVybiBUT0tfSU5URUdFUjsKKwkJCQl9CisKK3t4 Y3N0YXJ0fQkJeworCQkJCQlCRUdJTih4Yyk7CisJCQkJfQorCit7eGRzdGFydH0JCXsKKwkJCQkJ QkVHSU4oeGQpOworCQkJCQlyZXNldFN0cmluZ0luZm8oJnl5ZXh0cmEtPmxpdGJ1Zik7CisJCQkJ fQorCisifHwiCQkJeyByZXR1cm4gVE9LX09SOyB9CisKKyImJiIJCQl7IHJldHVybiBUT0tfQU5E OyB9CisKKy4JCQkJeyByZXR1cm4geXl0ZXh0WzBdOyB9CisKKzx4Yz57eGNzdG9wfQl7CisJCQkJ CUJFR0lOKElOSVRJQUwpOworCQkJCX0KKworPHhjPnt4Y2luc2lkZX0JeworCQkJCQkvKiBkaXNj YXJkIG11bHRpcGxlIGNoYXJhY3RlcnMgd2l0aG91dCBzbGFzaCBvciBhc3RlcmlzayAqLworCQkJ CX0KKworPHhjPi4JCQl7CisJCQkJCS8qCisJCQkJCSAqIERpc2NhcmQgYW55IHNpbmdsZSBjaGFy YWN0ZXIuIGZsZXggcHJlZmVycyBsb25nZXIKKwkJCQkJICogbWF0Y2hlcywgc28gdGhpcyBydWxl IHdpbGwgbmV2ZXIgYmUgcGlja2VkIHdoZW4gd2UgY291bGQKKwkJCQkJICogaGF2ZSBtYXRjaGVk IHhjc3RvcC4KKwkJCQkJICoKKwkJCQkJICogTkI6IEF0IHByZXNlbnQsIHdlIGRvbid0IGJvdGhl ciB0byBzdXBwb3J0IG5lc3RlZAorCQkJCQkgKiBDLXN0eWxlIGNvbW1lbnRzIGhlcmUsIGJ1dCB0 aGlzIGxvZ2ljIGNvdWxkIGJlIGV4dGVuZGVkCisJCQkJCSAqIGlmIHRoYXQgcmVzdHJpY3Rpb24g cG9zZXMgYSBwcm9ibGVtLgorCQkJCQkgKi8KKwkJCQl9CisKKzx4Yz48PEVPRj4+CQl7CisJCQkJ CUJFR0lOKElOSVRJQUwpOworCQkJCQlwZ3BhX3l5ZXJyb3IocmVzdWx0LCBwYXJzZV9lcnJvcl9t c2dfcCwgeXlzY2FubmVyLAorCQkJCQkJCQkgInVudGVybWluYXRlZCBjb21tZW50Iik7CisJCQkJ fQorCis8eGQ+e3hkc3RvcH0JeworCQkJCQlCRUdJTihJTklUSUFMKTsKKwkJCQkJaWYgKHl5ZXh0 cmEtPmxpdGJ1Zi5sZW4gPT0gMCkKKwkJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vy cm9yX21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCQkgInplcm8tbGVuZ3RoIGRlbGltaXRlZCBp ZGVudGlmaWVyIik7CisJCQkJCXl5bHZhbC0+c3RyID0gcHN0cmR1cCh5eWV4dHJhLT5saXRidWYu ZGF0YSk7CisJCQkJCXJldHVybiBUT0tfSURFTlQ7CisJCQkJfQorCis8eGQ+e3hkZG91YmxlfQl7 CisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZ5eWV4dHJhLT5saXRidWYsICciJyk7CisJCQkJ fQorCis8eGQ+e3hkaW5zaWRlfQl7CisJCQkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJnl5ZXh0 cmEtPmxpdGJ1ZiwgeXl0ZXh0LCB5eWxlbmcpOworCQkJCX0KKworPHhkPjw8RU9GPj4JCXsKKwkJ CQkJQkVHSU4oSU5JVElBTCk7CisJCQkJCXBncGFfeXllcnJvcihyZXN1bHQsIHBhcnNlX2Vycm9y X21zZ19wLCB5eXNjYW5uZXIsCisJCQkJCQkJCSAidW50ZXJtaW5hdGVkIHF1b3RlZCBpZGVudGlm aWVyIik7CisJCQkJfQorCislJQorCisvKiBMQ09WX0VYQ0xfU1RPUCAqLworCisvKgorICogSGFu ZGxlciBmb3IgZXJyb3JzIHdoaWxlIHNjYW5uaW5nIG9yIHBhcnNpbmcgYWR2aWNlLgorICoKKyAq IGJpc29uIHBhc3NlcyB0aGUgZXJyb3IgbWVzc2FnZSB0byB1cyB2aWEgJ21lc3NhZ2UnLCBhbmQg dGhlIGNvbnRleHQgaXMKKyAqIGF2YWlsYWJsZSB2aWEgdGhlICd5eXRleHQnIG1hY3JvLiBXZSBh c3NlbWJsZSB0aG9zZSB2YWx1ZXMgaW50byBhIGZpbmFsCisgKiBlcnJvciB0ZXh0IGFuZCB0aGVu IGFycmFuZ2UgdG8gcGFzcyBpdCBiYWNrIHRvIHRoZSBjYWxsZXIgb2YgcGdwYV95eXBhcnNlKCkK KyAqIGJ5IHN0b3JpbmcgaXQgaW50byAqcGFyc2VfZXJyb3JfbXNnX3AuCisgKi8KK3ZvaWQKK3Bn cGFfeXllcnJvcihMaXN0ICoqcmVzdWx0LCBjaGFyICoqcGFyc2VfZXJyb3JfbXNnX3AsIHl5c2Nh bl90IHl5c2Nhbm5lciwKKwkJCSBjb25zdCBjaGFyICptZXNzYWdlKQoreworCXN0cnVjdCB5eWd1 dHNfdCAqeXlnID0gKHN0cnVjdCB5eWd1dHNfdCAqKSB5eXNjYW5uZXI7CS8qIG5lZWRlZCBmb3Ig eXl0ZXh0CisJCQkJCQkJCQkJCQkJCQkgKiBtYWNybyAqLworCisKKwkvKiByZXBvcnQgb25seSB0 aGUgZmlyc3QgZXJyb3IgaW4gYSBwYXJzZSBvcGVyYXRpb24gKi8KKwlpZiAoKnBhcnNlX2Vycm9y X21zZ19wKQorCQlyZXR1cm47CisKKwlpZiAoeXl0ZXh0WzBdKQorCQkqcGFyc2VfZXJyb3JfbXNn X3AgPSBwc3ByaW50ZigiJXMgYXQgb3IgbmVhciBcIiVzXCIiLCBtZXNzYWdlLCB5eXRleHQpOwor CWVsc2UKKwkJKnBhcnNlX2Vycm9yX21zZ19wID0gcHNwcmludGYoIiVzIGF0IGVuZCBvZiBpbnB1 dCIsIG1lc3NhZ2UpOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgYWR2aWNlIHNjYW5uZXIu CisgKgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBwYXJzaW5nIGJlZ2lucy4KKyAq Lwordm9pZAorcGdwYV9zY2FubmVyX2luaXQoY29uc3QgY2hhciAqc3RyLCB5eXNjYW5fdCAqeXlz Y2FubmVycCkKK3sKKwl5eXNjYW5fdAl5eXNjYW5uZXI7CisJcGdwYV95eV9leHRyYV90eXBlCSp5 eWV4dCA9IHBhbGxvYzBfb2JqZWN0KHBncGFfeXlfZXh0cmFfdHlwZSk7CisKKwlpZiAoeXlsZXhf aW5pdCh5eXNjYW5uZXJwKSAhPSAwKQorCQllbG9nKEVSUk9SLCAieXlsZXhfaW5pdCgpIGZhaWxl ZDogJW0iKTsKKworCXl5c2Nhbm5lciA9ICp5eXNjYW5uZXJwOworCisJaW5pdFN0cmluZ0luZm8o Jnl5ZXh0LT5saXRidWYpOworCXBncGFfeXlzZXRfZXh0cmEoeXlleHQsIHl5c2Nhbm5lcik7CisK Kwl5eV9zY2FuX3N0cmluZyhzdHIsIHl5c2Nhbm5lcik7Cit9CisKKworLyoKKyAqIFNodXQgZG93 biB0aGUgYWR2aWNlIHNjYW5uZXIuCisgKgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVy IHBhcnNpbmcgaXMgY29tcGxldGUuCisgKi8KK3ZvaWQKK3BncGFfc2Nhbm5lcl9maW5pc2goeXlz Y2FuX3QgeXlzY2FubmVyKQoreworCXl5bGV4X2Rlc3Ryb3koeXlzY2FubmVyKTsKK30KKworLyoK KyAqIEludGVyZmFjZSBmdW5jdGlvbnMgdG8gbWFrZSBmbGV4IHVzZSBwYWxsb2MoKSBpbnN0ZWFk IG9mIG1hbGxvYygpLgorICogSXQnZCBiZSBiZXR0ZXIgdG8gbWFrZSB0aGVzZSBzdGF0aWMsIGJ1 dCBmbGV4IGluc2lzdHMgb3RoZXJ3aXNlLgorICovCisKK3ZvaWQgKgoreXlhbGxvYyh5eV9zaXpl X3Qgc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJldHVybiBwYWxsb2Moc2l6ZSk7Cit9 CisKK3ZvaWQgKgoreXlyZWFsbG9jKHZvaWQgKnB0ciwgeXlfc2l6ZV90IHNpemUsIHl5c2Nhbl90 IHl5c2Nhbm5lcikKK3sKKwlpZiAocHRyKQorCQlyZXR1cm4gcmVwYWxsb2MocHRyLCBzaXplKTsK KwllbHNlCisJCXJldHVybiBwYWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQKK3l5ZnJlZSh2b2lkICpw dHIsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlpZiAocHRyKQorCQlwZnJlZShwdHIpOworfQpk aWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmMgYi9jb250cmli L3BnX3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uOWRiMTA3N2Q0ODcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3Bs YW5fYWR2aWNlL3BncGFfdHJvdmUuYwpAQCAtMCwwICsxLDQ5MiBAQAorLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogcGdwYV90cm92ZS5jCisgKgkgIEFsbCBvZiB0aGUgYWR2aWNlIGdpdmVuIGZv ciBhIHBhcnRpY3VsYXIgcXVlcnksIGFwcHJvcHJpYXRlbHkKKyAqICAgIG9yZ2FuaXplZCBmb3Ig Y29udmVuaWVudCBhY2Nlc3MuCisgKgorICogVGhpcyBuYW1lIGNvbWVzIGZyb20gdGhlIEVuZ2xp c2ggZXhwcmVzc2lvbiAidHJvdmUgb2YgYWR2aWNlIiwgd2hpY2gKKyAqIG1lYW5zIGEgY29sbGVj dGlvbiBvZiB3aXNkb20uIFRoaXMgc2xpZ2h0bHkgdW51c3VhbCB0ZXJtIGlzIGNob3NlbiB0bwor ICogYXZvaWQgbmFtaW5nIGNvbmZ1c2lvbjsgZm9yIGV4YW1wbGUsICJjb2xsZWN0aW9uIG9mIGFk dmljZSIgd291bGQKKyAqIGludml0ZSBjb25mdXNpb24gd2l0aCBwZ3BhX2NvbGxlY3Rvci5jLiBO b3RlIHRoYXQsIHdoaWxlIHdlIGRvbid0IGtub3cKKyAqIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGFk dmljZSBpcyBhY3R1YWxseSB3aXNlLCBpdCdzIG5vdCBvdXIgam9iIHRvCisgKiBxdWVzdGlvbiB0 aGUgdXNlcidzIGNob2ljZXMuCisgKgorICogVGhlIGdvYWwgb2YgdGhpcyBtb2R1bGUgaXMgdG8g bWFrZSBpdCBlYXN5IHRvIGxvY2F0ZSB0aGUgc3BlY2lmaWMKKyAqIGJpdHMgb2YgYWR2aWNlIHRo YXQgcGVydGFpbiB0byBhbnkgZ2l2ZW4gcGFydCBvZiBhIHF1ZXJ5LCBvciB0bworICogZGV0ZXJt aW5lIHRoYXQgdGhlcmUgYXJlIG5vbmUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjQs IFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICoJICBjb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfdHJvdmUuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfdHJvdmUuaCIKKworI2luY2x1 ZGUgImNvbW1vbi9oYXNoZm5fdW5zdGFibGUuaCIKKworLyoKKyAqIEFuIGFkdmljZSB0cm92ZSBp cyBvcmdhbml6ZWQgaW50byBhIHNlcmllcyBvZiAic2xpY2VzIiwgZWFjaCBvZiB3aGljaAorICog Y29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgb25lIHRvcGljIGUuZy4gc2NhbiBtZXRob2RzLiBF YWNoIHNsaWNlIGNvbnNpc3RzCisgKiBvZiBhbiBhcnJheSBvZiB0cm92ZSBlbnRyaWVzIHBsdXMg YSBoYXNoIHRhYmxlIHRoYXQgd2UgY2FuIHVzZSB0byBkZXRlcm1pbmUKKyAqIHdoaWNoIG9uZXMg YXJlIHJlbGV2YW50IHRvIGEgcGFydGljdWxhciBwYXJ0IG9mIHRoZSBxdWVyeS4KKyAqLwordHlw ZWRlZiBzdHJ1Y3QgcGdwYV90cm92ZV9zbGljZQoreworCXVuc2lnbmVkCW5hbGxvY2F0ZWQ7CisJ dW5zaWduZWQJbnVzZWQ7CisJcGdwYV90cm92ZV9lbnRyeSAqZW50cmllczsKKwlzdHJ1Y3QgcGdw YV90cm92ZV9lbnRyeV9oYXNoICpoYXNoOworfSBwZ3BhX3Ryb3ZlX3NsaWNlOworCisvKgorICog U2NhbiBhZHZpY2UgaXMgc3RvcmVkIGludG8gJ3NjYW4nOyBqb2luIGFkdmljZSBpcyBzdG9yZWQg aW50byAnam9pbic7IGFuZAorICogYWR2aWNlIHRoYXQgY2FuIGFwcGx5IHRvIGJvdGggY2FzZXMg aXMgc3RvcmVkIGludG8gJ3JlbCcuIFRoaXMgbGV0cyBjYWxsZXJzCisgKiBhc2sganVzdCBmb3Ig d2hhdCdzIHJlbGV2YW50LiBUaGVzZSBzbGljZXMgY29ycmVzcG9uZCB0byB0aGUgcG9zc2libGUg dmFsdWVzCisgKiBvZiBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlLgorICovCitzdHJ1Y3QgcGdwYV90 cm92ZQoreworCXBncGFfdHJvdmVfc2xpY2Ugam9pbjsKKwlwZ3BhX3Ryb3ZlX3NsaWNlIHJlbDsK KwlwZ3BhX3Ryb3ZlX3NsaWNlIHNjYW47Cit9OworCisvKgorICogV2UncmUgZ29pbmcgdG8gYnVp bGQgYSBoYXNoIHRhYmxlIHRvIGFsbG93IGNsaWVudHMgb2YgdGhpcyBtb2R1bGUgdG8gZmluZAor ICogcmVsZXZhbnQgYWR2aWNlIGZvciBhIGdpdmVuIHBhcnQgb2YgdGhlIHF1ZXJ5IHF1aWNrbHku IEhvd2V2ZXIsIHdlJ3JlIGdvaW5nCisgKiB0byB1c2Ugb25seSB0aHJlZSBvZiB0aGUgZml2ZSBr ZXkgZmllbGRzIGFzIGhhc2gga2V5cy4gVGhlcmUgYXJlIHR3byByZWFzb25zCisgKiBmb3IgdGhp cy4KKyAqCisgKiBGaXJzdCwgaXQncyBhbGxvd2FibGUgdG8gc2V0IHBhcnRpdGlvbl9zY2hlbWEg dG8gTlVMTCB0byBtYXRjaCBhIHBhcnRpdGlvbgorICogd2l0aCB0aGUgY29ycmVjdCBuYW1lIGlu IGFueSBzY2hlbWEuCisgKgorICogU2Vjb25kLCB3ZSBleHBlY3QgdGhlICJvY2N1cnJlbmNlIiBh bmQgInBhcnRpdGlvbl9zY2hlbWEiIHBvcnRpb25zIG9mIHRoZQorICogcmVsYXRpb24gaWRlbnRp ZmllcnMgdG8gYmUgbW9zdGx5IHVuaW50ZXJlc3RpbmcuIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZQor ICogb2NjdXJyZW5jZSBmaWVsZCB3aWxsIGJlIDEgYW5kIHRoZSBwYXJ0aXRpb25fc2NoZW1hIHZh bHVlcyB3aWxsIGFsbCBiZSB0aGUKKyAqIHNhbWUuIEV2ZW4gd2hlbiB0aGVyZSBpcyBzb21lIHZh cmlhdGlvbiwgdGhlIGFic29sdXRlIG51bWJlciBvZiBlbnRyaWVzCisgKiB0aGF0IGhhdmUgdGhl IHNhbWUgdmFsdWVzIGZvciBhbGwgdGhyZWUgb2YgdGhlc2Uga2V5IGZpZWxkcyBzaG91bGQgYmUK KyAqIHF1aXRlIHNtYWxsLgorICovCit0eXBlZGVmIHN0cnVjdAoreworCWNvbnN0IGNoYXIgKmFs aWFzX25hbWU7CisJY29uc3QgY2hhciAqcGFydGl0aW9uX25hbWU7CisJY29uc3QgY2hhciAqcGxh bl9uYW1lOworfSBwZ3BhX3Ryb3ZlX2VudHJ5X2tleTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlw Z3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXk7CisJaW50CQkJc3RhdHVzOworCUJpdG1hcHNldCAgKmlu ZGV4ZXM7Cit9IHBncGFfdHJvdmVfZW50cnlfZWxlbWVudDsKKworc3RhdGljIHVpbnQzMiBwZ3Bh X3Ryb3ZlX2VudHJ5X2hhc2hfa2V5KHBncGFfdHJvdmVfZW50cnlfa2V5IGtleSk7CisKK3N0YXRp YyBpbmxpbmUgYm9vbAorcGdwYV90cm92ZV9lbnRyeV9jb21wYXJlX2tleShwZ3BhX3Ryb3ZlX2Vu dHJ5X2tleSBhLCBwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBiKQoreworCWlmIChzdHJjbXAoYS5hbGlh c19uYW1lLCBiLmFsaWFzX25hbWUpICE9IDApCisJCXJldHVybiBmYWxzZTsKKworCWlmICghc3Ry aW5nc19lcXVhbF9vcl9ib3RoX251bGwoYS5wYXJ0aXRpb25fbmFtZSwgYi5wYXJ0aXRpb25fbmFt ZSkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghc3RyaW5nc19lcXVhbF9vcl9ib3RoX251bGwo YS5wbGFuX25hbWUsIGIucGxhbl9uYW1lKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHRy dWU7Cit9CisKKyNkZWZpbmUgU0hfUFJFRklYCQkJcGdwYV90cm92ZV9lbnRyeQorI2RlZmluZSBT SF9FTEVNRU5UX1RZUEUJCXBncGFfdHJvdmVfZW50cnlfZWxlbWVudAorI2RlZmluZSBTSF9LRVlf VFlQRQkJCXBncGFfdHJvdmVfZW50cnlfa2V5CisjZGVmaW5lIFNIX0tFWQkJCQlrZXkKKyNkZWZp bmUgU0hfSEFTSF9LRVkodGIsIGtleSkJcGdwYV90cm92ZV9lbnRyeV9oYXNoX2tleShrZXkpCisj ZGVmaW5lCVNIX0VRVUFMKHRiLCBhLCBiKQlwZ3BhX3Ryb3ZlX2VudHJ5X2NvbXBhcmVfa2V5KGEs IGIpCisjZGVmaW5lIFNIX1NDT1BFCQkJc3RhdGljIGlubGluZQorI2RlZmluZSBTSF9ERUNMQVJF CisjZGVmaW5lIFNIX0RFRklORQorI2luY2x1ZGUgImxpYi9zaW1wbGVoYXNoLmgiCisKK3N0YXRp YyB2b2lkIHBncGFfaW5pdF90cm92ZV9zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UpOwor c3RhdGljIHZvaWQgcGdwYV90cm92ZV9hZGRfdG9fc2xpY2UocGdwYV90cm92ZV9zbGljZSAqdHNs aWNlLAorCQkJCQkJCQkJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJCQkJcGdwYV9h ZHZpY2VfdGFyZ2V0ICp0YXJnZXQpOworc3RhdGljIHZvaWQgcGdwYV90cm92ZV9hZGRfdG9faGFz aChwZ3BhX3Ryb3ZlX2VudHJ5X2hhc2ggKmhhc2gsCisJCQkJCQkJCSAgIHBncGFfYWR2aWNlX3Rh cmdldCAqdGFyZ2V0LAorCQkJCQkJCQkgICBpbnQgaW5kZXgpOworc3RhdGljIEJpdG1hcHNldCAq cGdwYV90cm92ZV9zbGljZV9sb29rdXAocGdwYV90cm92ZV9zbGljZSAqdHNsaWNlLAorCQkJCQkJ CQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWQpOworCisvKgorICogQnVpbGQgYSB0cm92ZSBvZiBh ZHZpY2UgZnJvbSBhIGxpc3Qgb2YgYWR2aWNlIGl0ZW1zLgorICoKKyAqIENhbGxlciBjYW4gb2J0 YWluIGEgbGlzdCBvZiBhZHZpY2UgaXRlbXMgdG8gcGFzcyB0byB0aGlzIGZ1bmN0aW9uIGJ5Cisg KiBjYWxsaW5nIHBncGFfcGFyc2UoKS4KKyAqLworcGdwYV90cm92ZSAqCitwZ3BhX2J1aWxkX3Ry b3ZlKExpc3QgKmFkdmljZV9pdGVtcykKK3sKKwlwZ3BhX3Ryb3ZlICp0cm92ZSA9IHBhbGxvY19v YmplY3QocGdwYV90cm92ZSk7CisKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5qb2lu KTsKKwlwZ3BhX2luaXRfdHJvdmVfc2xpY2UoJnRyb3ZlLT5yZWwpOworCXBncGFfaW5pdF90cm92 ZV9zbGljZSgmdHJvdmUtPnNjYW4pOworCisJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfaXRlbSwg aXRlbSwgYWR2aWNlX2l0ZW1zKQorCXsKKwkJc3dpdGNoIChpdGVtLT50YWcpCisJCXsKKwkJCWNh c2UgUEdQQV9UQUdfSk9JTl9PUkRFUjoKKwkJCQl7CisJCQkJCXBncGFfYWR2aWNlX3RhcmdldCAq dGFyZ2V0OworCisJCQkJCS8qCisJCQkJCSAqIEZvciBtb3N0IGFkdmljZSB0eXBlcywgZWFjaCBl bGVtZW50IGluIHRoZSB0b3AtbGV2ZWwKKwkJCQkJICogbGlzdCBpcyBhIHNlcGFyYXRlIHRhcmdl dCwgYnV0IGl0J3MgbW9zdCBjb252ZW5pZW50IHRvCisJCQkJCSAqIHJlZ2FyZCB0aGUgZW50aXJl dHkgb2YgYSBKT0lOX09SREVSIHNwZWNpZmljYXRpb24gYXMgYQorCQkJCQkgKiBzaW5nbGUgdGFy Z2V0LiBTaW5jZSBpdCB3YXNuJ3QgcmVwcmVzZW50ZWQgdGhhdCB3YXkKKwkJCQkJICogZHVyaW5n IHBhcnNpbmcsIGJ1aWxkIGEgc3Vycm9nYXRlIG9iamVjdCBub3cuCisJCQkJCSAqLworCQkJCQl0 YXJnZXQgPSBwYWxsb2MwX29iamVjdChwZ3BhX2FkdmljZV90YXJnZXQpOworCQkJCQl0YXJnZXQt PnR0eXBlID0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUOworCQkJCQl0YXJnZXQtPmNoaWxkcmVu ID0gaXRlbS0+dGFyZ2V0czsKKworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgmdHJvdmUt PmpvaW4sCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJYnJlYWs7 CisKKwkJCWNhc2UgUEdQQV9UQUdfQklUTUFQX0hFQVBfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdf SU5ERVhfT05MWV9TQ0FOOgorCQkJY2FzZSBQR1BBX1RBR19JTkRFWF9TQ0FOOgorCQkJY2FzZSBQ R1BBX1RBR19TRVFfU0NBTjoKKwkJCWNhc2UgUEdQQV9UQUdfVElEX1NDQU46CisKKwkJCQkvKgor CQkJCSAqIFNjYW4gYWR2aWNlLgorCQkJCSAqLworCQkJCWZvcmVhY2hfcHRyKHBncGFfYWR2aWNl X3RhcmdldCwgdGFyZ2V0LCBpdGVtLT50YXJnZXRzKQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJICog Rm9yIG5vdywgYWxsIG9mIG91ciBzY2FuIHR5cGVzIHRhcmdldCBzaW5nbGUgcmVsYXRpb25zLAor CQkJCQkgKiBidXQgaW4gdGhlIGZ1dHVyZSB0aGlzIG1pZ2h0IG5vdCBiZSB0cnVlLCBlLmcuIGEg Y3VzdG9tCisJCQkJCSAqIHNjYW4gY291bGQgcmVwbGFjZSBhIGpvaW4uCisJCQkJCSAqLworCQkJ CQlBc3NlcnQodGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKTsKKwkJCQkJ cGdwYV90cm92ZV9hZGRfdG9fc2xpY2UoJnRyb3ZlLT5zY2FuLAorCQkJCQkJCQkJCQlpdGVtLT50 YWcsIHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFBHUEFfVEFHX0ZPUkVJ R05fSk9JTjoKKwkJCWNhc2UgUEdQQV9UQUdfSEFTSF9KT0lOOgorCQkJY2FzZSBQR1BBX1RBR19N RVJHRV9KT0lOX01BVEVSSUFMSVpFOgorCQkJY2FzZSBQR1BBX1RBR19NRVJHRV9KT0lOX1BMQUlO OgorCQkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCWNhc2UgUEdQ QV9UQUdfTkVTVEVEX0xPT1BfTUVNT0laRToKKwkJCWNhc2UgUEdQQV9UQUdfTkVTVEVEX0xPT1Bf UExBSU46CisJCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX05PTl9VTklRVUU6CisJCQljYXNlIFBH UEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKKworCQkJCS8qCisJCQkJICogSm9pbiBzdHJhdGVneSBh ZHZpY2UuCisJCQkJICovCisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZpY2VfdGFyZ2V0LCB0YXJn ZXQsIGl0ZW0tPnRhcmdldHMpCisJCQkJeworCQkJCQlwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZSgm dHJvdmUtPmpvaW4sCisJCQkJCQkJCQkJCWl0ZW0tPnRhZywgdGFyZ2V0KTsKKwkJCQl9CisJCQkJ YnJlYWs7CisKKwkJCWNhc2UgUEdQQV9UQUdfUEFSVElUSU9OV0lTRToKKwkJCWNhc2UgUEdQQV9U QUdfR0FUSEVSOgorCQkJY2FzZSBQR1BBX1RBR19HQVRIRVJfTUVSR0U6CisJCQljYXNlIFBHUEFf VEFHX05PX0dBVEhFUjoKKworCQkJCS8qCisJCQkJICogQWR2aWNlIGFib3V0IGEgUmVsT3B0SW5m byByZWxldmFudCB0byBib3RoIHNjYW5zIGFuZCBqb2lucy4KKwkJCQkgKi8KKwkJCQlmb3JlYWNo X3B0cihwZ3BhX2FkdmljZV90YXJnZXQsIHRhcmdldCwgaXRlbS0+dGFyZ2V0cykKKwkJCQl7CisJ CQkJCXBncGFfdHJvdmVfYWRkX3RvX3NsaWNlKCZ0cm92ZS0+cmVsLAorCQkJCQkJCQkJCQlpdGVt LT50YWcsIHRhcmdldCk7CisJCQkJfQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIHRy b3ZlOworfQorCisvKgorICogU2VhcmNoIGEgdHJvdmUgb2YgYWR2aWNlIGZvciByZWxldmFudCBl bnRyaWVzLgorICoKKyAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBpbnB1dCBwYXJhbWV0ZXJzIGV4Y2Vw dCBmb3IgKnJlc3VsdCwgd2hpY2ggaXMgYW4gb3V0cHV0CisgKiBwYXJhbWV0ZXIgdXNlZCB0byBy ZXR1cm4gcmVzdWx0cyB0byB0aGUgY2FsbGVyLgorICovCit2b2lkCitwZ3BhX3Ryb3ZlX2xvb2t1 cChwZ3BhX3Ryb3ZlICp0cm92ZSwgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCSAg aW50IG5yaWRzLCBwZ3BhX2lkZW50aWZpZXIgKnJpZHMsIHBncGFfdHJvdmVfcmVzdWx0ICpyZXN1 bHQpCit7CisJcGdwYV90cm92ZV9zbGljZSAqdHNsaWNlOworCUJpdG1hcHNldCAgKmluZGV4ZXM7 CisKKwlBc3NlcnQobnJpZHMgPiAwKTsKKworCWlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQ X1NDQU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+c2NhbjsKKwllbHNlIGlmICh0eXBlID09IFBHUEFf VFJPVkVfTE9PS1VQX0pPSU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+am9pbjsKKwllbHNlCisJCXRz bGljZSA9ICZ0cm92ZS0+cmVsOworCisJaW5kZXhlcyA9IHBncGFfdHJvdmVfc2xpY2VfbG9va3Vw KHRzbGljZSwgJnJpZHNbMF0pOworCWZvciAoaW50IGkgPSAxOyBpIDwgbnJpZHM7ICsraSkKKwl7 CisJCUJpdG1hcHNldCAgKm90aGVyX2luZGV4ZXM7CisKKwkJLyoKKwkJICogSWYgdGhlIGNhbGxl ciBpcyBhc2tpbmcgYWJvdXQgdHdvIHJlbGF0aW9ucyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZQor CQkgKiBzYW1lIHN1YnF1ZXJ5LCB0aGV5J3ZlIG1lc3NlZCB1cC4KKwkJICovCisJCUFzc2VydChz dHJpbmdzX2VxdWFsX29yX2JvdGhfbnVsbChyaWRzWzBdLnBsYW5fbmFtZSwKKwkJCQkJCQkJCQkg IHJpZHNbaV0ucGxhbl9uYW1lKSk7CisKKwkJb3RoZXJfaW5kZXhlcyA9IHBncGFfdHJvdmVfc2xp Y2VfbG9va3VwKHRzbGljZSwgJnJpZHNbaV0pOworCQlpbmRleGVzID0gYm1zX3VuaW9uKGluZGV4 ZXMsIG90aGVyX2luZGV4ZXMpOworCX0KKworCXJlc3VsdC0+ZW50cmllcyA9IHRzbGljZS0+ZW50 cmllczsKKwlyZXN1bHQtPmluZGV4ZXMgPSBpbmRleGVzOworfQorCisvKgorICogUmV0dXJuIGFs bCBlbnRyaWVzIGluIGEgdHJvdmUgc2xpY2UgdG8gdGhlIGNhbGxlci4KKyAqCisgKiBUaGUgZmly c3QgdHdvIGFyZ3VtZW50cyBhcmUgaW5wdXQgYXJndW1lbnRzLCBhbmQgdGhlIHJlbWFpbmRlciBh cmUgb3V0cHV0CisgKiBhcmd1bWVudHMuCisgKi8KK3ZvaWQKK3BncGFfdHJvdmVfbG9va3VwX2Fs bChwZ3BhX3Ryb3ZlICp0cm92ZSwgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkg IHBncGFfdHJvdmVfZW50cnkgKiplbnRyaWVzLCBpbnQgKm5lbnRyaWVzKQoreworCXBncGFfdHJv dmVfc2xpY2UgKnRzbGljZTsKKworCWlmICh0eXBlID09IFBHUEFfVFJPVkVfTE9PS1VQX1NDQU4p CisJCXRzbGljZSA9ICZ0cm92ZS0+c2NhbjsKKwllbHNlIGlmICh0eXBlID09IFBHUEFfVFJPVkVf TE9PS1VQX0pPSU4pCisJCXRzbGljZSA9ICZ0cm92ZS0+am9pbjsKKwllbHNlCisJCXRzbGljZSA9 ICZ0cm92ZS0+cmVsOworCisJKmVudHJpZXMgPSB0c2xpY2UtPmVudHJpZXM7CisJKm5lbnRyaWVz ID0gdHNsaWNlLT5udXNlZDsKK30KKworLyoKKyAqIENvbnZlcnQgYSB0cm92ZSBlbnRyeSB0byBh biBpdGVtIG9mIHBsYW4gYWR2aWNlIHRoYXQgd291bGQgcHJvZHVjZSBpdC4KKyAqLworY2hhciAq CitwZ3BhX2NzdHJpbmdfdHJvdmVfZW50cnkocGdwYV90cm92ZV9lbnRyeSAqZW50cnkpCit7CisJ U3RyaW5nSW5mb0RhdGEgYnVmOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJYXBwZW5kU3Ry aW5nSW5mbygmYnVmLCAiJXMiLCBwZ3BhX2NzdHJpbmdfYWR2aWNlX3RhZyhlbnRyeS0+dGFnKSk7 CisKKwkvKiBKT0lOX09SREVSIHRhZ3MgYXJlIHRyYW5zZm9ybWVkIGJ5IHBncGFfYnVpbGRfdHJv dmU7IHVuZG8gdGhhdCBoZXJlICovCisJaWYgKGVudHJ5LT50YWcgIT0gUEdQQV9UQUdfSk9JTl9P UkRFUikKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJygnKTsKKwllbHNlCisJCUFzc2Vy dChlbnRyeS0+dGFyZ2V0LT50dHlwZSA9PSBQR1BBX1RBUkdFVF9PUkRFUkVEX0xJU1QpOworCisJ cGdwYV9mb3JtYXRfYWR2aWNlX3RhcmdldCgmYnVmLCBlbnRyeS0+dGFyZ2V0KTsKKworCWlmIChl bnRyeS0+dGFyZ2V0LT5pdGFyZ2V0ICE9IE5VTEwpCisJeworCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cigmYnVmLCAnICcpOworCQlwZ3BhX2Zvcm1hdF9pbmRleF90YXJnZXQoJmJ1ZiwgZW50cnktPnRh cmdldC0+aXRhcmdldCk7CisJfQorCisJaWYgKGVudHJ5LT50YWcgIT0gUEdQQV9UQUdfSk9JTl9P UkRFUikKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmJ1ZiwgJyknKTsKKworCXJldHVybiBidWYu ZGF0YTsKK30KKworLyoKKyAqIFNldCBQR1BBX1RFXyogZmxhZ3Mgb24gYSBzZXQgb2YgdHJvdmUg ZW50cmllcy4KKyAqLwordm9pZAorcGdwYV90cm92ZV9zZXRfZmxhZ3MocGdwYV90cm92ZV9lbnRy eSAqZW50cmllcywgQml0bWFwc2V0ICppbmRleGVzLCBpbnQgZmxhZ3MpCit7CisJaW50CQkJaSA9 IC0xOworCisJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKGluZGV4ZXMsIGkpKSA+PSAwKQor CXsKKwkJcGdwYV90cm92ZV9lbnRyeSAqZW50cnkgPSAmZW50cmllc1tpXTsKKworCQllbnRyeS0+ ZmxhZ3MgfD0gZmxhZ3M7CisJfQorfQorCisvKgorICogQWRkIGEgbmV3IGFkdmljZSB0YXJnZXQg dG8gYW4gZXhpc3RpbmcgcGdwYV90cm92ZV9zbGljZSBvYmplY3QuCisgKi8KK3N0YXRpYyB2b2lk CitwZ3BhX3Ryb3ZlX2FkZF90b19zbGljZShwZ3BhX3Ryb3ZlX3NsaWNlICp0c2xpY2UsCisJCQkJ CQlwZ3BhX2FkdmljZV90YWdfdHlwZSB0YWcsCisJCQkJCQlwZ3BhX2FkdmljZV90YXJnZXQgKnRh cmdldCkKK3sKKwlwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyeTsKKworCWlmICh0c2xpY2UtPm51c2Vk ID49IHRzbGljZS0+bmFsbG9jYXRlZCkKKwl7CisJCWludAkJCW5ld19hbGxvY2F0ZWQ7CisKKwkJ bmV3X2FsbG9jYXRlZCA9IHRzbGljZS0+bmFsbG9jYXRlZCAqIDI7CisJCXRzbGljZS0+ZW50cmll cyA9IHJlcGFsbG9jX2FycmF5KHRzbGljZS0+ZW50cmllcywgcGdwYV90cm92ZV9lbnRyeSwKKwkJ CQkJCQkJCQkgbmV3X2FsbG9jYXRlZCk7CisJCXRzbGljZS0+bmFsbG9jYXRlZCA9IG5ld19hbGxv Y2F0ZWQ7CisJfQorCisJZW50cnkgPSAmdHNsaWNlLT5lbnRyaWVzW3RzbGljZS0+bnVzZWRdOwor CWVudHJ5LT50YWcgPSB0YWc7CisJZW50cnktPnRhcmdldCA9IHRhcmdldDsKKwllbnRyeS0+Zmxh Z3MgPSAwOworCisJcGdwYV90cm92ZV9hZGRfdG9faGFzaCh0c2xpY2UtPmhhc2gsIHRhcmdldCwg dHNsaWNlLT5udXNlZCk7CisKKwl0c2xpY2UtPm51c2VkKys7Cit9CisKKy8qCisgKiBVcGRhdGUg dGhlIGhhc2ggdGFibGUgZm9yIGEgbmV3bHktYWRkZWQgYWR2aWNlIHRhcmdldC4KKyAqLworc3Rh dGljIHZvaWQKK3BncGFfdHJvdmVfYWRkX3RvX2hhc2gocGdwYV90cm92ZV9lbnRyeV9oYXNoICpo YXNoLCBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJICAgaW50IGluZGV4KQorewor CXBncGFfdHJvdmVfZW50cnlfa2V5IGtleTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQgKmVs ZW1lbnQ7CisJYm9vbAkJZm91bmQ7CisKKwkvKiBGb3Igbm9uLWlkZW50aWZpZXJzLCBhZGQgZW50 cmllcyBmb3IgYWxsIGRlc2NlbmRlbnRzLiAqLworCWlmICh0YXJnZXQtPnR0eXBlICE9IFBHUEFf VEFSR0VUX0lERU5USUZJRVIpCisJeworCQlmb3JlYWNoX3B0cihwZ3BhX2FkdmljZV90YXJnZXQs IGNoaWxkX3RhcmdldCwgdGFyZ2V0LT5jaGlsZHJlbikKKwkJeworCQkJcGdwYV90cm92ZV9hZGRf dG9faGFzaChoYXNoLCBjaGlsZF90YXJnZXQsIGluZGV4KTsKKwkJfQorCQlyZXR1cm47CisJfQor CisJLyogU2FuaXR5IGNoZWNrcy4gKi8KKwlBc3NlcnQodGFyZ2V0LT5yaWQub2NjdXJyZW5jZSA+ IDApOworCUFzc2VydCh0YXJnZXQtPnJpZC5hbGlhc19uYW1lICE9IE5VTEwpOworCisJLyogQWRk IGFuIGVudHJ5IGZvciB0aGlzIHJlbGF0aW9uIGlkZW50aWZpZXIuICovCisJa2V5LmFsaWFzX25h bWUgPSB0YXJnZXQtPnJpZC5hbGlhc19uYW1lOworCWtleS5wYXJ0aXRpb25fbmFtZSA9IHRhcmdl dC0+cmlkLnBhcnRyZWw7CisJa2V5LnBsYW5fbmFtZSA9IHRhcmdldC0+cmlkLnBsYW5fbmFtZTsK KwllbGVtZW50ID0gcGdwYV90cm92ZV9lbnRyeV9pbnNlcnQoaGFzaCwga2V5LCAmZm91bmQpOwor CWlmICghZm91bmQpCisJCWVsZW1lbnQtPmluZGV4ZXMgPSBOVUxMOworCWVsZW1lbnQtPmluZGV4 ZXMgPSBibXNfYWRkX21lbWJlcihlbGVtZW50LT5pbmRleGVzLCBpbmRleCk7Cit9CisKKy8qCisg KiBDcmVhdGUgYW5kIGluaXRpYWxpemUgYSBuZXcgcGdwYV90cm92ZV9zbGljZSBvYmplY3QuCisg Ki8KK3N0YXRpYyB2b2lkCitwZ3BhX2luaXRfdHJvdmVfc2xpY2UocGdwYV90cm92ZV9zbGljZSAq dHNsaWNlKQoreworCS8qCisJICogSW4gYW4gaWRlYWwgd29ybGQsIHdlJ2xsIG1ha2UgdHNsaWNl LT5uYWxsb2NhdGVkIGJpZyBlbm91Z2ggdGhhdCB0aGUKKwkgKiBhcnJheSBhbmQgaGFzaCB0YWJs ZSB3aWxsIGJlIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSBudW1iZXIgb2YKKwkgKiBhZHZp Y2UgaXRlbXMgaW4gdGhpcyB0cm92ZSBzbGljZSwgYnV0IGEgZ2VuZXJvdXMgZGVmYXVsdCB2YWx1 ZSBpcyBub3QKKwkgKiBnb29kIGZvciBwZXJmb3JtYW5jZSwgYmVjYXVzZSBwZ3BhX2luaXRfdHJv dmVfc2xpY2UoKSBoYXMgdG8gemVybyBhbgorCSAqIGFtb3VudCBvZiBtZW1vcnkgcHJvcG9ydGlv bmFsIHRvIHRzbGljZS0+bmFsbG9jYXRlZC4gSGVuY2UsIHdlIGtlZXAgdGhlCisJICogc3RhcnRp bmcgdmFsdWUgcXVpdGUgc21hbGwsIG9uIHRoZSB0aGVvcnkgdGhhdCBhZHZpY2Ugc3RyaW5ncyB3 aWxsCisJICogb2Z0ZW4gYmUgcmVsYXRpdmVseSBzaG9ydC4KKwkgKi8KKwl0c2xpY2UtPm5hbGxv Y2F0ZWQgPSAxNjsKKwl0c2xpY2UtPm51c2VkID0gMDsKKwl0c2xpY2UtPmVudHJpZXMgPSBwYWxs b2NfYXJyYXkocGdwYV90cm92ZV9lbnRyeSwgdHNsaWNlLT5uYWxsb2NhdGVkKTsKKwl0c2xpY2Ut Pmhhc2ggPSBwZ3BhX3Ryb3ZlX2VudHJ5X2NyZWF0ZShDdXJyZW50TWVtb3J5Q29udGV4dCwKKwkJ CQkJCQkJCQkgICB0c2xpY2UtPm5hbGxvY2F0ZWQsIE5VTEwpOworfQorCisvKgorICogRmFzdCBo YXNoIGZ1bmN0aW9uIGZvciBhIGtleSBjb25zaXN0aW5nIG9mIGFsaWFzX25hbWUsIHBhcnRpdGlv bl9uYW1lLAorICogYW5kIHBsYW5fbmFtZS4KKyAqLworc3RhdGljIHVpbnQzMgorcGdwYV90cm92 ZV9lbnRyeV9oYXNoX2tleShwZ3BhX3Ryb3ZlX2VudHJ5X2tleSBrZXkpCit7CisJZmFzdGhhc2hf c3RhdGUgaHM7CisJaW50CQkJc3BfbGVuOworCisJZmFzdGhhc2hfaW5pdCgmaHMsIDApOworCisJ LyogYWxpYXNfbmFtZSBtYXkgbm90IGJlIE5VTEwgKi8KKwlzcF9sZW4gPSBmYXN0aGFzaF9hY2N1 bV9jc3RyaW5nKCZocywga2V5LmFsaWFzX25hbWUpOworCisJLyogcGFydGl0aW9uX25hbWUgYW5k IHBsYW5fbmFtZSwgaG93ZXZlciwgY2FuIGJlIE5VTEwgKi8KKwlpZiAoa2V5LnBhcnRpdGlvbl9u YW1lICE9IE5VTEwpCisJCXNwX2xlbiArPSBmYXN0aGFzaF9hY2N1bV9jc3RyaW5nKCZocywga2V5 LnBhcnRpdGlvbl9uYW1lKTsKKwlpZiAoa2V5LnBsYW5fbmFtZSAhPSBOVUxMKQorCQlzcF9sZW4g Kz0gZmFzdGhhc2hfYWNjdW1fY3N0cmluZygmaHMsIGtleS5wbGFuX25hbWUpOworCisJLyoKKwkg KiBoYXNoZm5fdW5zdGFibGUuaCByZWNvbW1lbmRzIHVzaW5nIHN0cmluZyBsZW5ndGggYXMgdHdl YWsuIEl0J3Mgbm90CisJICogY2xlYXIgdG8gbWUgd2hhdCB0byBkbyBpZiB0aGVyZSBhcmUgbXVs dGlwbGUgc3RyaW5ncywgc28gZm9yIG5vdyBJJ20KKwkgKiBqdXN0IHVzaW5nIHRoZSB0b3RhbCBv ZiBhbGwgb2YgdGhlIGxlbmd0aHMuCisJICovCisJcmV0dXJuIGZhc3RoYXNoX2ZpbmFsMzIoJmhz LCBzcF9sZW4pOworfQorCisvKgorICogTG9vayBmb3IgbWF0Y2hpbmcgZW50cmllcy4KKyAqLwor c3RhdGljIEJpdG1hcHNldCAqCitwZ3BhX3Ryb3ZlX3NsaWNlX2xvb2t1cChwZ3BhX3Ryb3ZlX3Ns aWNlICp0c2xpY2UsIHBncGFfaWRlbnRpZmllciAqcmlkKQoreworCXBncGFfdHJvdmVfZW50cnlf a2V5IGtleTsKKwlwZ3BhX3Ryb3ZlX2VudHJ5X2VsZW1lbnQgKmVsZW1lbnQ7CisJQml0bWFwc2V0 ICAqcmVzdWx0ID0gTlVMTDsKKworCUFzc2VydChyaWQtPm9jY3VycmVuY2UgPj0gMSk7CisKKwlr ZXkuYWxpYXNfbmFtZSA9IHJpZC0+YWxpYXNfbmFtZTsKKwlrZXkucGFydGl0aW9uX25hbWUgPSBy aWQtPnBhcnRyZWw7CisJa2V5LnBsYW5fbmFtZSA9IHJpZC0+cGxhbl9uYW1lOworCisJZWxlbWVu dCA9IHBncGFfdHJvdmVfZW50cnlfbG9va3VwKHRzbGljZS0+aGFzaCwga2V5KTsKKworCWlmIChl bGVtZW50ICE9IE5VTEwpCisJeworCQlpbnQJCQlpID0gLTE7CisKKwkJd2hpbGUgKChpID0gYm1z X25leHRfbWVtYmVyKGVsZW1lbnQtPmluZGV4ZXMsIGkpKSA+PSAwKQorCQl7CisJCQlwZ3BhX3Ry b3ZlX2VudHJ5ICplbnRyeSA9ICZ0c2xpY2UtPmVudHJpZXNbaV07CisKKwkJCS8qCisJCQkgKiBX ZSBrbm93IHRoYXQgdGhpcyB0YXJnZXQgb3Igb25lIG9mIGl0cyBkZXNjZW5kZW50cyBtYXRjaGVz IHRoZQorCQkJICogaWRlbnRpZmllciBvbiB0aGUgdGhyZWUga2V5IGZpZWxkcyBhYm92ZSwgYnV0 IHdlIGRvbid0IGtub3cKKwkJCSAqIHdoaWNoIGRlc2NlbmRlbnQgb3Igd2hldGhlciB0aGUgb2Nj dXJlbmNlIGFuZCBzY2hlbWEgYWxzbworCQkJICogbWF0Y2guCisJCQkgKi8KKwkJCWlmIChwZ3Bh X2lkZW50aWZpZXJfbWF0Y2hlc190YXJnZXQocmlkLCBlbnRyeS0+dGFyZ2V0KSkKKwkJCQlyZXN1 bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQsIGkpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3Vs dDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV90cm92ZS5oIGIv Y29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjQ3OWMzZjc1Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9wZ19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICoKKyAqIHBncGFfdHJvdmUuaAorICoJICBBbGwgb2YgdGhlIGFkdmljZSBn aXZlbiBmb3IgYSBwYXJ0aWN1bGFyIHF1ZXJ5LCBhcHByb3ByaWF0ZWx5CisgKiAgICBvcmdhbml6 ZWQgZm9yIGNvbnZlbmllbnQgYWNjZXNzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDI0 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCSAgY29udHJpYi9w Z19wbGFuX2FkdmljZS9wZ3BhX3Ryb3ZlLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwor I2lmbmRlZiBQR1BBX1RST1ZFX0gKKyNkZWZpbmUgUEdQQV9UUk9WRV9ICisKKyNpbmNsdWRlICJw Z3BhX2FzdC5oIgorCisjaW5jbHVkZSAibm9kZXMvYml0bWFwc2V0LmgiCisKK3R5cGVkZWYgc3Ry dWN0IHBncGFfdHJvdmUgcGdwYV90cm92ZTsKKworLyoKKyAqIEZsYWdzIHRoYXQgY2FuIGJlIHNl dCBvbiBhIHBncGFfdHJvdmVfZW50cnkgdG8gaW5kaWNhdGUgd2hhdCBoYXBwZW5lZCB3aGVuCisg KiB0cnlpbmcgdG8gcGxhbiB1c2luZyBhZHZpY2UuCisgKgorICogUEdQQV9URV9NQVRDSF9QQVJU SUFMIG1lYW5zIHRoYXQgd2UgZm91bmQgc29tZSBwYXJ0IG9mIHRoZSBxdWVyeSB0aGF0IGF0Cisg KiBsZWFzdCBwYXJ0aWFsbHkgbWF0Y2hlZCB0aGUgdGFyZ2V0OyBlLmcuIGdpdmVuIEpPSU5fT1JE RVIoYSBiKSwgdGhpcyB3b3VsZAorICogYmUgc2V0IGlmIHdlIGV2ZXIgc2F3IGFueSBqb2lucmVs IGluY2x1ZGluZyBlaXRoZXIgImEiIG9yICJiIi4KKyAqCisgKiBQR1BBX1RFX01BVENIX0ZVTEwg bWVhbnMgdGhhdCB3ZSBmb3VuZCBhbiBleGFjdCBtYXRjaCBmb3IgdGhlIHRhcmdldDsgZS5nLgor ICogZ2l2ZW4gSk9JTl9PUkRFUihhIGIpLCB0aGlzIHdvdWxkIGJlIHNldCBpZiB3ZSBzYXcgYSBq b2lucmVsIGNvbnRhaW5pbmcKKyAqIGV4YWN0bHkgImEiIGFuZCAiYiIgYW5kIG5vdGhpbmcgZWxz ZS4KKyAqCisgKiBQR1BBX1RFX0lOQVBQTElDQUJMRSBtZWFucyB0aGF0IHRoZSBhZHZpY2UgZG9l c24ndCBwcm9wZXJseSBhcHBseSB0byB0aGUKKyAqIHRhcmdldDsgZS5nLiBJTkRFWF9TQ0FOKGZv byBiYXJfaWR4KSB3b3VsZCBiZSBzbyBtYXJrZWQgaWYgYmFyX2lkeCBkb2VzIG5vdAorICogZXhp c3Qgb24gZm9vLiBUaGUgZmFjdCB0aGF0IHRoaXMgYml0IGhhcyBiZWVuIHNldCBkb2VzIG5vdCBt ZWFuIHRoYXQgdGhlCisgKiBhZHZpY2UgaGFkIG5vIGVmZmVjdC4KKyAqCisgKiBQR1BBX1RFX0NP TkZMSUNUSU5HIG1lYW5zIHRoYXQgYSBjb25mbGljdCB3YXMgZGV0ZWN0ZWQgYmV0d2VlbiB3aGF0 IHRoaXMKKyAqIGFkdmljZSB3YW50cyBhbmQgd2hhdCBzb21lIG90aGVyIHBsYW4gYWR2aWNlIHdh bnRzOyBlLmcuIEpPSU5fT1JERVIoYSBiKQorICogd291bGQgY29uZmxpY3Qgd2l0aCBIQVNIX0pP SU4oYSksIGJlY2F1c2UgdGhlIGZvcm1lciByZXF1aXJlcyAiYSIgdG8gYmUgdGhlCisgKiBvdXRl ciB0YWJsZSB3aGlsZSB0aGUgbGF0dGVyIHJlcXVpcmVzIGl0IHRvIGJlIHRoZSBpbm5lciB0YWJs ZS4KKyAqCisgKiBQR1BBX1RFX0ZBSUxFRCBtZWFucyB0aGF0IHRoZSByZXN1bHRpbmcgcGxhbiBk aWQgbm90IGNvbmZvcm0gdG8gdGhlIGFkdmljZS4KKyAqLworI2RlZmluZSBQR1BBX1RFX01BVENI X1BBUlRJQUwJCTB4MDAwMQorI2RlZmluZSBQR1BBX1RFX01BVENIX0ZVTEwJCQkweDAwMDIKKyNk ZWZpbmUgUEdQQV9URV9JTkFQUExJQ0FCTEUJCTB4MDAwNAorI2RlZmluZSBQR1BBX1RFX0NPTkZM SUNUSU5HCQkJMHgwMDA4CisjZGVmaW5lIFBHUEFfVEVfRkFJTEVECQkJCTB4MDAxMAorCisvKgor ICogRWFjaCBlbnRyeSBpbiBhIHRyb3ZlIG9mIGFkdmljZSByZXByZXNlbnRzIHRoZSBhcHBsaWNh dGlvbiBvZiBhIHRhZyB0bworICogYSBzaW5nbGUgdGFyZ2V0LgorICovCit0eXBlZGVmIHN0cnVj dCBwZ3BhX3Ryb3ZlX2VudHJ5Cit7CisJcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnOworCXBncGFf YWR2aWNlX3RhcmdldCAqdGFyZ2V0OworCWludAkJCWZsYWdzOworfSBwZ3BhX3Ryb3ZlX2VudHJ5 OworCisvKgorICogV2hhdCBraW5kIG9mIGluZm9ybWF0aW9uIGRvZXMgdGhlIGNhbGxlciB3YW50 IHRvIGZpbmQgaW4gYSB0cm92ZT8KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9TQ0FOIG1lYW5z IHdlJ3JlIGxvb2tpbmcgZm9yIHNjYW4gYWR2aWNlLgorICoKKyAqIFBHUEFfVFJPVkVfTE9PS1VQ X0pPSU4gbWVhbnMgd2UncmUgbG9va2luZyBmb3Igam9pbi1yZWxhdGVkIGFkdmljZS4KKyAqIFRo aXMgaW5jbHVkZXMgam9pbiBvcmRlciBhZHZpY2UsIGpvaW4gbWV0aG9kIGFkdmljZSwgYW5kIHNl bWlqb2luLXVuaXF1ZW5lc3MKKyAqIGFkdmljZS4KKyAqCisgKiBQR1BBX1RST1ZFX0xPT0tVUF9S RUwgbWVhbnMgd2UncmUgbG9va2luZyBmb3IgZ2VuZXJhbCBhZHZpY2UgYWJvdXQgdGhpcworICog YSBSZWxPcHRJbmZvIHRoYXQgbWF5IGNvcnJlc3BvbmQgdG8gZWl0aGVyIGEgc2NhbiBvciBhIGpv aW4uIFRoaXMgaW5jbHVkZXMKKyAqIGdhdGhlci1yZWxhdGVkIGFkdmljZSBhbmQgcGFydGl0aW9u d2lzZSBhZHZpY2UuIE5vdGUgdGhhdCBwYXJ0aXRpb253aXNlCisgKiBhZHZpY2UgbWlnaHQgc2Vl bSBsaWtlIGpvaW4gYWR2aWNlLCBidXQgdGhhdCdzIG5vdCBhIGhlbHBmdWwgd2F5IG9mIHZpZXdp bmcKKyAqIHRoZSBtYXR0ZXIgYmVjYXVzZSAoMSkgcGFydGl0aW9ud2lzZSBhZHZpY2UgaXMgYWxz byByZWxldmFudCBhdCB0aGUgc2NhbgorICogbGV2ZWwgYW5kICgyKSBvdGhlciB0eXBlcyBvZiBq b2luIGFkdmljZSBhZmZlY3Qgb25seSB3aGF0IHRvIGRvIGZyb20KKyAqIGpvaW5fcGF0aF9zZXR1 cF9ob29rLCBidXQgcGFydGl0aW9ud2lzZSBhZHZpY2UgYWZmZWN0cyB3aGF0IHRvIGRvIGluCisg KiBqb2lucmVsX3NldHVwX2hvb2suCisgKi8KK3R5cGVkZWYgZW51bSBwZ3BhX3Ryb3ZlX2xvb2t1 cF90eXBlCit7CisJUEdQQV9UUk9WRV9MT09LVVBfSk9JTiwKKwlQR1BBX1RST1ZFX0xPT0tVUF9S RUwsCisJUEdQQV9UUk9WRV9MT09LVVBfU0NBTgorfSBwZ3BhX3Ryb3ZlX2xvb2t1cF90eXBlOwor CisvKgorICogVGhpcyBzdHJ1Y3QgaXMgdXNlZCB0byBzdG9yZSB0aGUgcmVzdWx0IG9mIGEgdHJv dmUgbG9va3VwLiBGb3IgZWFjaCBtZW1iZXIKKyAqIG9mICJpbmRleGVzIiwgdGhlIGVudHJ5IGF0 IHRoZSBjb3JyZXNwb25kaW5nIG9mZnNldCB3aXRoaW4gImVudHJpZXMiIGlzIG9uZQorICogb2Yg dGhlIHJlc3VsdHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHBncGFfdHJvdmVfcmVzdWx0Cit7CisJ cGdwYV90cm92ZV9lbnRyeSAqZW50cmllczsKKwlCaXRtYXBzZXQgICppbmRleGVzOworfSBwZ3Bh X3Ryb3ZlX3Jlc3VsdDsKKworZXh0ZXJuIHBncGFfdHJvdmUgKnBncGFfYnVpbGRfdHJvdmUoTGlz dCAqYWR2aWNlX2l0ZW1zKTsKK2V4dGVybiB2b2lkIHBncGFfdHJvdmVfbG9va3VwKHBncGFfdHJv dmUgKnRyb3ZlLAorCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlwZSB0eXBlLAorCQkJCQkJ CSAgaW50IG5yaWRzLAorCQkJCQkJCSAgcGdwYV9pZGVudGlmaWVyICpyaWRzLAorCQkJCQkJCSAg cGdwYV90cm92ZV9yZXN1bHQgKnJlc3VsdCk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX2xvb2t1 cF9hbGwocGdwYV90cm92ZSAqdHJvdmUsCisJCQkJCQkJCSAgcGdwYV90cm92ZV9sb29rdXBfdHlw ZSB0eXBlLAorCQkJCQkJCQkgIHBncGFfdHJvdmVfZW50cnkgKiplbnRyaWVzLAorCQkJCQkJCQkg IGludCAqbmVudHJpZXMpOworZXh0ZXJuIGNoYXIgKnBncGFfY3N0cmluZ190cm92ZV9lbnRyeShw Z3BhX3Ryb3ZlX2VudHJ5ICplbnRyeSk7CitleHRlcm4gdm9pZCBwZ3BhX3Ryb3ZlX3NldF9mbGFn cyhwZ3BhX3Ryb3ZlX2VudHJ5ICplbnRyaWVzLAorCQkJCQkJCQkgQml0bWFwc2V0ICppbmRleGVz LCBpbnQgZmxhZ3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2UvcGdwYV93YWxrZXIuYyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDkxZmMyNWQ1MDgKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmMKQEAgLTAs MCArMSwxMDA2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3dhbGtlci5jCisg KgkgIFBsYW4gdHJlZSBpdGVyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAyNSwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNvbnRyaWIvcGdf cGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisj aW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInBncGFfam9pbi5oIgorI2luY2x1ZGUg InBncGFfc2Nhbi5oIgorI2luY2x1ZGUgInBncGFfd2Fsa2VyLmgiCisKKyNpbmNsdWRlICJub2Rl cy9wbGFubm9kZXMuaCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVkZSAi dXRpbHMvbHN5c2NhY2hlLmgiCisKK3N0YXRpYyB2b2lkIHBncGFfd2Fsa19yZWN1cnNpdmVseShw Z3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwgUGxhbiAqcGxhbiwKKwkJCQkJCQkJICBi b29sIHdpdGhpbl9qb2luX3Byb2JsZW0sCisJCQkJCQkJCSAgcGdwYV9qb2luX3Vucm9sbGVyICpq b2luX3Vucm9sbGVyLAorCQkJCQkJCQkgIExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJ CQkJCQkJICBib29sIGJlbmVhdGhfYW55X2dhdGhlcik7CitzdGF0aWMgQml0bWFwc2V0ICpwZ3Bh X3Byb2Nlc3NfdW5yb2xsZWRfam9pbihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwK KwkJCQkJCQkJCQkJIHBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW4pOworCitzdGF0aWMgcGdwYV9x dWVyeV9mZWF0dXJlICpwZ3BhX2FkZF9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAq d2Fsa2VyLAorCQkJCQkJCQkJCQlwZ3BhX3FmX3R5cGUgdHlwZSwKKwkJCQkJCQkJCQkJUGxhbiAq cGxhbik7CisKK3N0YXRpYyB2b2lkIHBncGFfcWZfYWRkX3J0aShMaXN0ICphY3RpdmVfcXVlcnlf ZmVhdHVyZXMsIEluZGV4IHJ0aSk7CitzdGF0aWMgdm9pZCBwZ3BhX3FmX2FkZF9ydGlzKExpc3Qg KmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgQml0bWFwc2V0ICpyZWxpZHMpOworc3RhdGljIHZvaWQg cGdwYV9xZl9hZGRfcGxhbl9ydGlzKExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgUGxhbiAq cGxhbiwKKwkJCQkJCQkJICBMaXN0ICpydGFibGUpOworCitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtl cl9qb2luX29yZGVyX21hdGNoZXMocGdwYV91bnJvbGxlZF9qb2luICp1am9pbiwKKwkJCQkJCQkJ CQkgICBJbmRleCBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCSAgIHBncGFfaWRlbnRpZmllciAq cnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJICAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0YXJnZXQs CisJCQkJCQkJCQkJICAgYm9vbCB0b3BsZXZlbCk7CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9q b2luX29yZGVyX21hdGNoZXNfbWVtYmVyKHBncGFfam9pbl9tZW1iZXIgKm1lbWJlciwKKwkJCQkJ CQkJCQkJCSAgSW5kZXggcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJCSAgcGdwYV9pZGVudGlm aWVyICpydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJCSAgcGdwYV9hZHZpY2VfdGFyZ2V0ICp0 YXJnZXQpOworc3RhdGljIHBncGFfc2NhbiAqcGdwYV93YWxrZXJfZmluZF9zY2FuKHBncGFfcGxh bl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJCXBncGFfc2Nhbl9zdHJhdGVneSBz dHJhdGVneSwKKwkJCQkJCQkJCQlCaXRtYXBzZXQgKnJlbGlkcyk7CitzdGF0aWMgYm9vbCBwZ3Bh X3dhbGtlcl9pbmRleF90YXJnZXRfbWF0Y2hlc19wbGFuKHBncGFfaW5kZXhfdGFyZ2V0ICppdGFy Z2V0LAorCQkJCQkJCQkJCQkJICBQbGFuICpwbGFuKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2Vy X2NvbnRhaW5zX2ZlYXR1cmUocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJ CQkJCQkJIHBncGFfcWZfdHlwZSB0eXBlLAorCQkJCQkJCQkJCSBCaXRtYXBzZXQgKnJlbGlkcyk7 CitzdGF0aWMgYm9vbCBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHBncGFfcGxhbl93YWxrZXJf Y29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCQkJICBwZ3BhX2pvaW5fc3RyYXRlZ3kgc3RyYXRlZ3ks CisJCQkJCQkJCQkgIEJpdG1hcHNldCAqcmVsaWRzKTsKK3N0YXRpYyBib29sIHBncGFfd2Fsa2Vy X2NvbnRhaW5zX25vX2dhdGhlcihwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwKKwkJ CQkJCQkJCQkgICBCaXRtYXBzZXQgKnJlbGlkcyk7CisKKy8qCisgKiBUb3AtbGV2ZWwgZW50cnlw b2ludCBmb3IgdGhlIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIFBvcHVsYXRlcyB3YWxrZXIgYmFz ZWQgb24gYSB0cmF2ZXJzYWwgb2YgdGhlIFBsYW4gdHJlZXMgaW4gcHN0bXQuCisgKgorICogc2pf dW5pcXVlX3JlbHMgaXMgYSBsaXN0IG9mIHBncGFfc2pfdW5pcXVlX3JlbCBvYmplY3RzLCBvbmUg Zm9yIGVhY2gKKyAqIHJlbGF0aW9uIHdlIGNvbnNpZGVyZWQgbWFraW5nIHVuaXF1ZSBhcyBwYXJ0 IG9mIHNlbWlqb2luIHBsYW5uaW5nLgorICovCit2b2lkCitwZ3BhX3BsYW5fd2Fsa2VyKHBncGFf cGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFubmVkU3RtdCAqcHN0bXQsCisJCQkJIExp c3QgKnNqX3VuaXF1ZV9yZWxzKQoreworCUxpc3RDZWxsICAgKmxjOworCUxpc3QJICAgKnNqX3Vu aXF1ZV9ydGlzID0gTlVMTDsKKwlMaXN0CSAgICpzal9ub251bmlxdWVfcWZzID0gTlVMTDsKKwor CS8qIEluaXRpYWxpemF0aW9uLiAqLworCW1lbXNldCh3YWxrZXIsIDAsIHNpemVvZihwZ3BhX3Bs YW5fd2Fsa2VyX2NvbnRleHQpKTsKKwl3YWxrZXItPnBzdG10ID0gcHN0bXQ7CisKKwkvKiBXYWxr IHRoZSBtYWluIHBsYW4gdHJlZS4gKi8KKwlwZ3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBw c3RtdC0+cGxhblRyZWUsIDAsIE5VTEwsIE5JTCwgZmFsc2UpOworCisJLyogTWFpbiBwbGFuIHRy ZWUgd2FsayB3b24ndCByZWFjaCBzdWJwbGFucywgc28gd2FsayB0aG9zZS4gKi8KKwlmb3JlYWNo KGxjLCBwc3RtdC0+c3VicGxhbnMpCisJeworCQlQbGFuCSAgICpwbGFuID0gbGZpcnN0KGxjKTsK KworCQlpZiAocGxhbiAhPSBOVUxMKQorCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwg cGxhbiwgMCwgTlVMTCwgTklMLCBmYWxzZSk7CisJfQorCisJLyogQWRqdXN0IFJUSXMgZnJvbSBz al91bmlxdWVfcmVscyBmb3IgdGhlIGZsYXR0ZW5lZCByYW5nZSB0YWJsZS4gKi8KKwlmb3JlYWNo X3B0cihwZ3BhX3NqX3VuaXF1ZV9yZWwsIHVyLCBzal91bmlxdWVfcmVscykKKwl7CisJCWludAkJ CXJ0aW5kZXggPSAtMTsKKwkJaW50CQkJcnRvZmZzZXQgPSAwOworCQlib29sCQlkdW1teSA9IGZh bHNlOworCQlCaXRtYXBzZXQgICpyZWxpZHMgPSBOVUxMOworCisJCS8qIElmIHRoaXMgaXMgYSBz dWJwbGFuLCBmaW5kIHRoZSByYW5nZSB0YWJsZSBvZmZzZXQuICovCisJCWlmICh1ci0+cGxhbl9u YW1lICE9IE5VTEwpCisJCXsKKwkJCWZvcmVhY2hfbm9kZShTdWJQbGFuUlRJbmZvLCBydGluZm8s IHBzdG10LT5zdWJydGluZm9zKQorCQkJeworCQkJCWlmIChzdHJjbXAodXItPnBsYW5fbmFtZSwg cnRpbmZvLT5wbGFuX25hbWUpID09IDApCisJCQkJeworCQkJCQlydG9mZnNldCA9IHJ0aW5mby0+ cnRvZmZzZXQ7CisJCQkJCWR1bW15ID0gcnRpbmZvLT5kdW1teTsKKwkJCQkJYnJlYWs7CisJCQkJ fQorCQkJfQorCisJCQlpZiAocnRvZmZzZXQgPT0gMCkKKwkJCQllbG9nKEVSUk9SLCAibm8gcnRv ZmZzZXQgZm9yIHBsYW4gJXMiLCB1ci0+cGxhbl9uYW1lKTsKKwkJfQorCisJCS8qIElmIHRoaXMg ZW50cnkgcGVydGFpbnMgdG8gYSBkdW1teSBzdWJxdWVyeSwgaWdub3JlIGl0LiAqLworCQlpZiAo ZHVtbXkpCisJCQljb250aW51ZTsKKworCQkvKiBPZmZzZXQgZWFjaCBlbnRyeSBmcm9tIHRoZSBv cmlnaW5hbCBzZXQuICovCisJCXdoaWxlICgocnRpbmRleCA9IGJtc19uZXh0X21lbWJlcih1ci0+ cmVsaWRzLCBydGluZGV4KSkgPj0gMCkKKwkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHJlbGlk cywgcnRpbmRleCArIHJ0b2Zmc2V0KTsKKworCQkvKiBTdG9yZSB0aGUgcmVzdWx0aW5nIHNldC4g Ki8KKwkJc2pfdW5pcXVlX3J0aXMgPSBsYXBwZW5kKHNqX3VuaXF1ZV9ydGlzLCByZWxpZHMpOwor CX0KKworCS8qCisJICogUmVtb3ZlIGFueSBub24tdW5pcXVlIHNlbWpvaW4gcXVlcnkgZmVhdHVy ZXMgZm9yIHdoaWNoIG1ha2luZyB0aGUgcmVsCisJICogdW5pcXVlIHdhc24ndCBjb25zaWRlcmVk LgorCSAqLworCWZvcmVhY2hfcHRyKHBncGFfcXVlcnlfZmVhdHVyZSwgcWYsCisJCQkJd2Fsa2Vy LT5xdWVyeV9mZWF0dXJlc1tQR1BBUUZfU0VNSUpPSU5fTk9OX1VOSVFVRV0pCisJeworCQlpZiAo bGlzdF9tZW1iZXIoc2pfdW5pcXVlX3J0aXMsIHFmLT5yZWxpZHMpKQorCQkJc2pfbm9udW5pcXVl X3FmcyA9IGxhcHBlbmQoc2pfbm9udW5pcXVlX3FmcywgcWYpOworCX0KKwl3YWxrZXItPnF1ZXJ5 X2ZlYXR1cmVzW1BHUEFRRl9TRU1JSk9JTl9OT05fVU5JUVVFXSA9IHNqX25vbnVuaXF1ZV9xZnM7 CisKKwkvKgorCSAqIElmIHdlIGZpbmQgYW55IGNhc2VzIHdoZXJlIGFuYWx5c2lzIG9mIHRoZSBQ bGFuIHRyZWUgc2hvd3MgdGhhdCB0aGUKKwkgKiBzZW1pam9pbiB3YXMgbWFkZSB1bmlxdWUgYnV0 IHRoaXMgcG9zc2liaWxpdHkgd2FzIG5ldmVyIG9ic2VydmVkIHRvIGJlCisJICogY29uc2lkZXJl ZCBkdXJpbmcgcGxhbm5pbmcsIHRoZW4gd2UgaGF2ZSBhIGJ1ZyBzb21ld2hlcmUuCisJICovCisJ Zm9yZWFjaF9wdHIocGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwKKwkJCQl3YWxrZXItPnF1ZXJ5X2Zl YXR1cmVzW1BHUEFRRl9TRU1JSk9JTl9VTklRVUVdKQorCXsKKwkJaWYgKCFsaXN0X21lbWJlcihz al91bmlxdWVfcnRpcywgcWYtPnJlbGlkcykpCisJCXsKKwkJCVN0cmluZ0luZm9EYXRhIGJ1ZjsK KworCQkJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJCQlvdXRCaXRtYXBzZXQoJmJ1ZiwgcWYtPnJl bGlkcyk7CisJCQllbG9nKEVSUk9SLAorCQkJCSAidW5pcXVlIHNlbWlqb2luIGZvdW5kIGZvciBy ZWxpZHMgJXMgYnV0IG5vdCBvYnNlcnZlZCBkdXJpbmcgcGxhbm5pbmciLAorCQkJCSBidWYuZGF0 YSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBNYWluIHdvcmtob3JzZSBmb3IgdGhlIHBsYW4gdHJl ZSB3YWxrLgorICoKKyAqIElmIHdpdGhpbl9qb2luX3Byb2JsZW0gaXMgdHJ1ZSwgd2UgZW5jb3Vu dGVyZWQgYSBqb2luIGF0IHNvbWUgaGlnaGVyIGxldmVsCisgKiBvZiB0aGUgdHJlZSB3YWxrIGFu ZCBoYXZlbid0IHlldCBkZXNjZW5kZWQgb3V0IG9mIHRoZSBwb3J0aW9uIG9mIHRoZSBwbGFuCisg KiB0cmVlIHRoYXQgaXMgcGFydCBvZiB0aGF0IHNhbWUgam9pbiBwcm9ibGVtLiBXZSdyZSBubyBs b25nZXIgaW4gdGhlIHNhbWUKKyAqIGpvaW4gcHJvYmxlbSBpZiAoMSkgd2UgY3Jvc3MgaW50byBh IGRpZmZlcmVudCBzdWJxdWVyeSBvciAoMikgd2UgZGVzY2VuZAorICogdGhyb3VnaCBhbiBBcHBl bmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSwgYmVsb3cgd2hpY2ggYW55IGZ1cnRoZXIgam9pbnMgd291 bGQKKyAqIGJlIHBhcnRpdGlvbndpc2Ugam9pbnMgcGxhbm5lZCBzZXBhcmF0ZWx5IGZyb20gdGhl IG91dGVyIGpvaW4gcHJvYmxlbS4KKyAqCisgKiBJZiBqb2luX3Vucm9sbGVyICE9IE5VTEwsIHRo ZSBqb2luIHVucm9sbGVyIGNvZGUgZXhwZWN0cyB1cyB0byBmaW5kIGEgam9pbgorICogdGhhdCBz aG91bGQgYmUgdW5yb2xsZWQgaW50byB0aGF0IG9iamVjdC4gVGhpcyBpbXBsaWVzIHRoYXQgd2Un cmUgd2l0aGluIGEKKyAqIGpvaW4gcHJvYmxlbSwgYnV0IHRoZSByZXZlcnNlIGlzIG5vdCB0cnVl OiB3aGVuIHdlJ3ZlIHRyYXZlcnNlZCBhbGwgdGhlCisgKiBqb2lucyBidXQgYXJlIHN0aWxsIGxv b2tpbmcgZm9yIHRoZSBzY2FuIHRoYXQgaXMgdGhlIGxlYWYgb2YgdGhlIGpvaW4gdHJlZSwKKyAq IGpvaW5fdW5yb2xsZXIgd2lsbCBiZSBOVUxMIGJ1dCB3aXRoaW5fam9pbl9wcm9ibGVtIHdpbGwg YmUgdHJ1ZS4KKyAqCisgKiBFYWNoIGVsZW1lbnQgb2YgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzIGNv cnJlc3BvbmRzIHRvIHNvbWUgaXRlbSBvZiBhZHZpY2UKKyAqIHRoYXQgbmVlZHMgdG8gZW51bWVy YXRlIGFsbCB0aGUgcmVsYXRpb25zIGl0IGFmZmVjdHMuIFdlIGFkZCBSVElzIHdlIGZpbmQKKyAq IGR1cmluZyB0cmVlIHRyYXZlcnNhbCB0byBlYWNoIG9mIHRoZXNlIHF1ZXJ5IGZlYXR1cmVzLgor ICoKKyAqIElmIGJlbmVhdGhfYW55X2dhdGhlciA9PSB0cnVlLCBzb21lIGhpZ2hlciBsZXZlbCBv ZiB0aGUgdHJlZSB0cmF2ZXJzYWwgZm91bmQKKyAqIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBu b2RlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHBncGFfcGxhbl93 YWxrZXJfY29udGV4dCAqd2Fsa2VyLCBQbGFuICpwbGFuLAorCQkJCQkgIGJvb2wgd2l0aGluX2pv aW5fcHJvYmxlbSwKKwkJCQkJICBwZ3BhX2pvaW5fdW5yb2xsZXIgKmpvaW5fdW5yb2xsZXIsCisJ CQkJCSAgTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLAorCQkJCQkgIGJvb2wgYmVuZWF0aF9h bnlfZ2F0aGVyKQoreworCXBncGFfam9pbl91bnJvbGxlciAqb3V0ZXJfam9pbl91bnJvbGxlciA9 IE5VTEw7CisJcGdwYV9qb2luX3Vucm9sbGVyICppbm5lcl9qb2luX3Vucm9sbGVyID0gTlVMTDsK Kwlib29sCQlqb2luX3Vucm9sbGVyX3RvcGxldmVsID0gZmFsc2U7CisJTGlzdAkgICAqcHVzaGRv d25fcXVlcnlfZmVhdHVyZXMgPSBOSUw7CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqZXh0 cmFwbGFucyA9IE5JTDsKKwlMaXN0CSAgICplbGlkZWRfbm9kZXMgPSBOSUw7CisKKwlBc3NlcnQo d2l0aGluX2pvaW5fcHJvYmxlbSB8fCBqb2luX3Vucm9sbGVyID09IE5VTEwpOworCisJLyoKKwkg KiBJZiB0aGlzIGlzIGEgR2F0aGVyIG9yIEdhdGhlciBNZXJnZSBub2RlLCBkaXJlY3RseSBhZGQg aXQgdG8gdGhlIGxpc3QKKwkgKiBvZiBjdXJyZW50bHktYWN0aXZlIHF1ZXJ5IGZlYXR1cmVzLgor CSAqCisJICogT3RoZXJ3aXNlLCBjaGVjayB0aGUgZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzIGxpc3Qg dG8gc2VlIHdoZXRoZXIgdGhpcyB3YXMKKwkgKiBwcmV2aW91c2x5IGlkZW50aWZpZWQgYXMgYSBw bGFuIG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmVhdGVkIGFzIGEKKwkgKiBxdWVyeSBmZWF0dXJl LgorCSAqCisJICogTm90ZSB0aGF0IHRoZSBjYWxsZXIgYWxzbyBoYXMgYSBjb3B5IHRvIGFjdGl2 ZV9xdWVyeV9mZWF0dXJlcywgc28gd2UKKwkgKiBjYW4ndCBkZXN0cnVjdGl2ZWx5IG1vZGlmeSBp dCB3aXRob3V0IG1ha2luZyBhIGNvcHkuCisJICovCisJaWYgKElzQShwbGFuLCBHYXRoZXIpKQor CXsKKwkJYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJCWxhcHBlbmQobGlzdF9jb3B5KGFjdGl2 ZV9xdWVyeV9mZWF0dXJlcyksCisJCQkJCXBncGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCBQR1BBUUZf R0FUSEVSLCBwbGFuKSk7CisJCWJlbmVhdGhfYW55X2dhdGhlciA9IHRydWU7CisJfQorCWVsc2Ug aWYgKElzQShwbGFuLCBHYXRoZXJNZXJnZSkpCisJeworCQlhY3RpdmVfcXVlcnlfZmVhdHVyZXMg PQorCQkJbGFwcGVuZChsaXN0X2NvcHkoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKSwKKwkJCQkJcGdw YV9hZGRfZmVhdHVyZSh3YWxrZXIsIFBHUEFRRl9HQVRIRVJfTUVSR0UsIHBsYW4pKTsKKwkJYmVu ZWF0aF9hbnlfZ2F0aGVyID0gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJZm9yZWFjaF9wdHIocGdw YV9xdWVyeV9mZWF0dXJlLCBxZiwgd2Fsa2VyLT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMpCisJCXsK KwkJCWlmIChxZi0+cGxhbiA9PSBwbGFuKQorCQkJeworCQkJCWFjdGl2ZV9xdWVyeV9mZWF0dXJl cyA9IGxpc3RfY29weShhY3RpdmVfcXVlcnlfZmVhdHVyZXMpOworCQkJCWFjdGl2ZV9xdWVyeV9m ZWF0dXJlcyA9IGxhcHBlbmQoYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBxZik7CisJCQkJd2Fsa2Vy LT5mdXR1cmVfcXVlcnlfZmVhdHVyZXMgPQorCQkJCQlsaXN0X2RlbGV0ZV9wdHIod2Fsa2VyLT5m dXR1cmVfcXVlcnlfZmVhdHVyZXMsIHBsYW4pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQor CisJLyoKKwkgKiBGaW5kIGFsbCBlbGlkZWQgbm9kZXMgZm9yIHRoaXMgUGxhbiBub2RlLgorCSAq LworCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBuLCB3YWxrZXItPnBzdG10LT5lbGlkZWROb2Rl cykKKwl7CisJCWlmIChuLT5wbGFuX25vZGVfaWQgPT0gcGxhbi0+cGxhbl9ub2RlX2lkKQorCQkJ ZWxpZGVkX25vZGVzID0gbGFwcGVuZChlbGlkZWRfbm9kZXMsIG4pOworCX0KKworCS8qIElmIHdl IGZvdW5kIGFueSBlbGlkZWRfbm9kZXMsIGhhbmRsZSB0aGVtLiAqLworCWlmIChlbGlkZWRfbm9k ZXMgIT0gTklMKQorCXsKKwkJaW50CQkJbnVtX2VsaWRlZF9ub2RlcyA9IGxpc3RfbGVuZ3RoKGVs aWRlZF9ub2Rlcyk7CisJCUVsaWRlZE5vZGUgKmxhc3RfZWxpZGVkX25vZGU7CisKKwkJLyoKKwkJ ICogUlRJcyBmb3IgdGhlIGZpbmFsIC0tIGFuZCB0aHVzIGxvZ2ljYWxseSB1cHBlcm1vc3QgLS0g ZWxpZGVkIG5vZGUKKwkJICogc2hvdWxkIGJlIGNvbGxlY3RlZCBmb3IgcXVlcnkgZmVhdHVyZXMg cGFzc2VkIGRvd24gYnkgdGhlIGNhbGxlci4KKwkJICogSG93ZXZlciwgZWxpZGVkIG5vZGVzIGFj dCBhcyBiYXJyaWVycyB0byBxdWVyeSBmZWF0dXJlcywgd2hpY2gKKwkJICogbWVhbnMgdGhhdCAo MSkgdGhlIHJlbWFpbmluZyBlbGlkZWQgbm9kZXMsIGlmIGFueSwgc2hvdWxkIGJlCisJCSAqIGln bm9yZWQgZm9yIHB1cnBvc2VzIG9mIHF1ZXJ5IGZlYXR1cmVzIGFuZCAoMikgdGhlIGxpc3Qgb2Yg YWN0aXZlCisJCSAqIHF1ZXJ5IGZlYXR1cmVzIHNob3VsZCBiZSByZXNldCB0byBlbXB0eSBzbyB0 aGF0IHdlIGRvIG5vdCBhZGQgUlRJcworCQkgKiBmcm9tIHRoZSBwbGFuIG5vZGUgdGhhdCBpcyBs b2dpY2FsbHkgYmVuZWF0aCB0aGUgZWxpZGVkIG5vZGUgdG8gdGhlCisJCSAqIHF1ZXJ5IGZlYXR1 cmVzIHBhc3NlZCBkb3duIGZyb20gdGhlIGNhbGxlci4KKwkJICovCisJCWxhc3RfZWxpZGVkX25v ZGUgPSBsaXN0X250aChlbGlkZWRfbm9kZXMsIG51bV9lbGlkZWRfbm9kZXMgLSAxKTsKKwkJcGdw YV9xZl9hZGRfcnRpcyhhY3RpdmVfcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkgcGdwYV9maWx0ZXJf b3V0X2pvaW5fcmVsaWRzKGxhc3RfZWxpZGVkX25vZGUtPnJlbGlkcywKKwkJCQkJCQkJCQkJCQkg d2Fsa2VyLT5wc3RtdC0+cnRhYmxlKSk7CisJCWFjdGl2ZV9xdWVyeV9mZWF0dXJlcyA9IE5JTDsK KworCQkvKgorCQkgKiBJZiB3ZSdyZSB3aXRoaW4gYSBqb2luIHByb2JsZW0sIHRoZSBqb2luX3Vu cm9sbGVyIGlzIHJlc3BvbnNpYmxlCisJCSAqIGZvciBidWlsZGluZyB0aGUgc2NhbiBmb3IgdGhl IGZpbmFsIGVsaWRlZCBub2RlLCBzbyB0aHJvdyBpdCBvdXQuCisJCSAqLworCQlpZiAod2l0aGlu X2pvaW5fcHJvYmxlbSkKKwkJCWVsaWRlZF9ub2RlcyA9IGxpc3RfdHJ1bmNhdGUoZWxpZGVkX25v ZGVzLCBudW1fZWxpZGVkX25vZGVzIC0gMSk7CisKKwkJLyogQnVpbGQgc2NhbnMgZm9yIGFsbCAo b3IgdGhlIHJlbWFpbmluZykgZWxpZGVkIG5vZGVzLiAqLworCQlmb3JlYWNoX25vZGUoRWxpZGVk Tm9kZSwgZWxpZGVkX25vZGUsIGVsaWRlZF9ub2RlcykKKwkJeworCQkJKHZvaWQpIHBncGFfYnVp bGRfc2Nhbih3YWxrZXIsIHBsYW4sIGVsaWRlZF9ub2RlLAorCQkJCQkJCQkgICBiZW5lYXRoX2Fu eV9nYXRoZXIsIHdpdGhpbl9qb2luX3Byb2JsZW0pOworCQl9CisKKwkJLyoKKwkJICogSWYgdGhl cmUgd2VyZSBhbnkgZWxpZGVkIG5vZGVzLCB0aGVuIGV2ZXJ5dGhpbmcgYmVuZWF0aCB0aG9zZSBu b2RlcworCQkgKiBpcyBub3QgcGFydCBvZiB0aGUgc2FtZSBqb2luIHByb2JsZW0uCisJCSAqCisJ CSAqIEluIG1vcmUgZGV0YWlsLCBpZiBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgd2FzIGVsaWRl ZCwgdGhlbiBhCisJCSAqIHBhcnRpdGlvbndpc2Ugam9pbiB3YXMgY2hvc2VuIGFuZCBvbmx5IGEg c2luZ2xlIGNoaWxkIHN1cnZpdmVkOyBpZgorCQkgKiBhIFN1YnF1ZXJ5U2NhbiB3YXMgZWxpZGVk LCB0aGUgc3VicXVlcnkgd2FzIHBsYW5uZWQgd2l0aG91dAorCQkgKiBmbGF0dGVuaW5nIGl0IGlu dG8gdGhlIHBhcmVudC4KKwkJICovCisJCXdpdGhpbl9qb2luX3Byb2JsZW0gPSBmYWxzZTsKKwkJ am9pbl91bnJvbGxlciA9IE5VTEw7CisJfQorCisJLyoKKwkgKiBJZiB3ZSdyZSB3aXRoaW4gYSBq b2luIHByb2JsZW0sIHRoZSBqb2luIHVucm9sbGVyIGlzIHJlc3BvbnNpYmxlIGZvcgorCSAqIGJ1 aWxkaW5nIGFueSByZXF1aXJlZCBzY2FuIGZvciB0aGlzIG5vZGUuIElmIG5vdCwgd2UgZG8gaXQg aGVyZS4KKwkgKi8KKwlpZiAoIXdpdGhpbl9qb2luX3Byb2JsZW0pCisJCSh2b2lkKSBwZ3BhX2J1 aWxkX3NjYW4od2Fsa2VyLCBwbGFuLCBOVUxMLCBiZW5lYXRoX2FueV9nYXRoZXIsIGZhbHNlKTsK KworCS8qCisJICogSWYgdGhpcyBqb2luIG5lZWRzIHRvIHVucm9sbGVkIGJ1dCB0aGVyZSdzIG5v IGpvaW4gdW5yb2xsZXIgYWxyZWFkeQorCSAqIGF2YWlsYWJsZSwgY3JlYXRlIG9uZS4KKwkgKi8K KwlpZiAoam9pbl91bnJvbGxlciA9PSBOVUxMICYmIHBncGFfaXNfam9pbihwbGFuKSkKKwl7CisJ CWpvaW5fdW5yb2xsZXIgPSBwZ3BhX2NyZWF0ZV9qb2luX3Vucm9sbGVyKCk7CisJCWpvaW5fdW5y b2xsZXJfdG9wbGV2ZWwgPSB0cnVlOworCQl3aXRoaW5fam9pbl9wcm9ibGVtID0gdHJ1ZTsKKwl9 CisKKwkvKgorCSAqIElmIHRoaXMgam9pbiBpcyB0byBiZSB1bnJvbGxlZCwgcGdwYV91bnJvbGxf am9pbigpIHdpbGwgcmV0dXJuIHRoZSBqb2luCisJICogdW5yb2xsZXIgb2JqZWN0IHRoYXQgc2hv dWxkIGJlIHBhc3NlZCBkb3duIHdoZW4gd2UgcmVjdXJzZSBpbnRvIHRoZQorCSAqIG91dGVyIGFu ZCBpbm5lciBzaWRlcyBvZiB0aGUgcGxhbi4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxlciAhPSBO VUxMKQorCQlwZ3BhX3Vucm9sbF9qb2luKHdhbGtlciwgcGxhbiwgYmVuZWF0aF9hbnlfZ2F0aGVy LCBqb2luX3Vucm9sbGVyLAorCQkJCQkJICZvdXRlcl9qb2luX3Vucm9sbGVyLCAmaW5uZXJfam9p bl91bnJvbGxlcik7CisKKwkvKiBBZGQgUlRJcyBmcm9tIHRoZSBwbGFuIG5vZGUgdG8gYWxsIGFj dGl2ZSBxdWVyeSBmZWF0dXJlcy4gKi8KKwlwZ3BhX3FmX2FkZF9wbGFuX3J0aXMoYWN0aXZlX3F1 ZXJ5X2ZlYXR1cmVzLCBwbGFuLCB3YWxrZXItPnBzdG10LT5ydGFibGUpOworCisJLyoKKwkgKiBS ZWN1cnNlIGludG8gdGhlIG91dGVyIGFuZCBpbm5lciBzdWJ0cmVlcy4KKwkgKgorCSAqIEFzIGFu IGV4Y2VwdGlvbiwgaWYgdGhpcyBpcyBhIEZvcmVpZ25TY2FuLCBkb24ndCByZWN1cnNlLiBwb3N0 Z3Jlc19mZHcKKwkgKiBzb21ldGltZXMgc3RvcmVzIGFuIEVQUSByZWNoZWNrIHBsYW4gaW4gcGxh bi0+bGVmdHJlZSwgYnV0IHRoYXQncyBnb2luZworCSAqIHRvIG1lbnRpb24gdGhlIHNhbWUgc2V0 IG9mIHJlbGF0aW9ucyBhcyB0aGUgRm9yZWlnblNjYW4gaXRzZWxmLCBhbmQgd2UKKwkgKiBoYXZl IG5vIHdheSB0byBlbWl0IGFkdmljZSB0YXJnZXRpbmcgdGhlIEVQUSBjYXNlIHZzLiB0aGUgbm9u LUVQUSBjYXNlLgorCSAqIE1vcmVvdmVyLCBpdCdzIG5vdCBlbnRpcmVseSBjbGVhciB3aGF0IG90 aGVyIEZEV3MgbWlnaHQgZG8gd2l0aCB0aGUKKwkgKiBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlcy4g TWF5YmUgc29tZSBiZXR0ZXIgaGFuZGxpbmcgaXMgbmVlZGVkIGhlcmUsIGJ1dAorCSAqIGZvciBu b3csIHdlIGp1c3QgcHVudC4KKwkgKi8KKwlpZiAoIUlzQShwbGFuLCBGb3JlaWduU2NhbikpCisJ eworCQlpZiAocGxhbi0+bGVmdHRyZWUgIT0gTlVMTCkKKwkJCXBncGFfd2Fsa19yZWN1cnNpdmVs eSh3YWxrZXIsIHBsYW4tPmxlZnR0cmVlLCB3aXRoaW5fam9pbl9wcm9ibGVtLAorCQkJCQkJCQkg IG91dGVyX2pvaW5fdW5yb2xsZXIsIGFjdGl2ZV9xdWVyeV9mZWF0dXJlcywKKwkJCQkJCQkJICBi ZW5lYXRoX2FueV9nYXRoZXIpOworCQlpZiAocGxhbi0+cmlnaHR0cmVlICE9IE5VTEwpCisJCQlw Z3BhX3dhbGtfcmVjdXJzaXZlbHkod2Fsa2VyLCBwbGFuLT5yaWdodHRyZWUsIHdpdGhpbl9qb2lu X3Byb2JsZW0sCisJCQkJCQkJCSAgaW5uZXJfam9pbl91bnJvbGxlciwgYWN0aXZlX3F1ZXJ5X2Zl YXR1cmVzLAorCQkJCQkJCQkgIGJlbmVhdGhfYW55X2dhdGhlcik7CisJfQorCisJLyoKKwkgKiBJ ZiB3ZSBjcmVhdGVkIGEgam9pbiB1bnJvbGxlciB1cCBhYm92ZSwgdGhlbiBpdCdzIGFsc28gb3Vy IGpvaW4gdG8gdXNlCisJICogaXQgdG8gYnVpbGQgdGhlIGZpbmFsIHBncGFfdW5yb2xsZWRfam9p biwgYW5kIHRvIGRlc3Ryb3kgdGhlIG9iamVjdC4KKwkgKi8KKwlpZiAoam9pbl91bnJvbGxlcl90 b3BsZXZlbCkKKwl7CisJCXBncGFfdW5yb2xsZWRfam9pbiAqdWpvaW47CisKKwkJdWpvaW4gPSBw Z3BhX2J1aWxkX3Vucm9sbGVkX2pvaW4od2Fsa2VyLCBqb2luX3Vucm9sbGVyKTsKKwkJd2Fsa2Vy LT50b3BsZXZlbF91bnJvbGxlZF9qb2lucyA9CisJCQlsYXBwZW5kKHdhbGtlci0+dG9wbGV2ZWxf dW5yb2xsZWRfam9pbnMsIHVqb2luKTsKKwkJcGdwYV9kZXN0cm95X2pvaW5fdW5yb2xsZXIoam9p bl91bnJvbGxlcik7CisJCSh2b2lkKSBwZ3BhX3Byb2Nlc3NfdW5yb2xsZWRfam9pbih3YWxrZXIs IHVqb2luKTsKKwl9CisKKwkvKgorCSAqIFNvbWUgcGxhbiB0eXBlcyBjYW4gaGF2ZSBhZGRpdGlv bmFsIGNoaWxkcmVuLiBOb2RlcyBsaWtlIEFwcGVuZCB0aGF0CisJICogY2FuIGhhdmUgYW55IG51 bWJlciBvZiBjaGlsZHJlbiBzdG9yZSB0aGVtIGluIGEgTGlzdDsgYSBTdWJxdWVyeVNjYW4KKwkg KiBqdXN0IGhhcyBhIGZpZWxkIGZvciBhIHNpbmdsZSBhZGRpdGlvbmFsIFBsYW4uCisJICovCisJ c3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX0FwcGVuZDoKKwkJCXsKKwkJCQlB cHBlbmQJICAgKmFwbGFuID0gKEFwcGVuZCAqKSBwbGFuOworCisJCQkJZXh0cmFwbGFucyA9IGFw bGFuLT5hcHBlbmRwbGFuczsKKwkJCQlpZiAoYm1zX2lzX2VtcHR5KGFwbGFuLT5hcHByZWxpZHMp KQorCQkJCQlwdXNoZG93bl9xdWVyeV9mZWF0dXJlcyA9IGFjdGl2ZV9xdWVyeV9mZWF0dXJlczsK KwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfTWVyZ2VBcHBlbmQ6CisJCQl7CisJCQkJTWVyZ2VB cHBlbmQgKm1hcGxhbiA9IChNZXJnZUFwcGVuZCAqKSBwbGFuOworCisJCQkJZXh0cmFwbGFucyA9 IG1hcGxhbi0+bWVyZ2VwbGFuczsKKwkJCQlpZiAoYm1zX2lzX2VtcHR5KG1hcGxhbi0+YXBwcmVs aWRzKSkKKwkJCQkJcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMgPSBhY3RpdmVfcXVlcnlfZmVhdHVy ZXM7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBUX0JpdG1hcEFuZDoKKwkJCWV4dHJhcGxhbnMg PSAoKEJpdG1hcEFuZCAqKSBwbGFuKS0+Yml0bWFwcGxhbnM7CisJCQlicmVhazsKKwkJY2FzZSBU X0JpdG1hcE9yOgorCQkJZXh0cmFwbGFucyA9ICgoQml0bWFwT3IgKikgcGxhbiktPmJpdG1hcHBs YW5zOworCQkJYnJlYWs7CisJCWNhc2UgVF9TdWJxdWVyeVNjYW46CisKKwkJCS8qCisJCQkgKiBX ZSBkb24ndCBwYXNzIGRvd24gYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzIGFjcm9zcyBoZXJlLCBiZWNh dXNlCisJCQkgKiB0aG9zZSBhcmUgc3BlY2lmaWMgdG8gYSBzdWJxdWVyeSBsZXZlbC4KKwkJCSAq LworCQkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdhbGtlciwgKChTdWJxdWVyeVNjYW4gKikgcGxh biktPnN1YnBsYW4sCisJCQkJCQkJCSAgMCwgTlVMTCwgTklMLCBiZW5lYXRoX2FueV9nYXRoZXIp OworCQkJYnJlYWs7CisJCWNhc2UgVF9DdXN0b21TY2FuOgorCQkJZXh0cmFwbGFucyA9ICgoQ3Vz dG9tU2NhbiAqKSBwbGFuKS0+Y3VzdG9tX3BsYW5zOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ CQlicmVhazsKKwl9CisKKwkvKiBJZiB3ZSBmb3VuZCBhIGxpc3Qgb2YgZXh0cmEgY2hpbGRyZW4s IGl0ZXJhdGUgb3ZlciBpdC4gKi8KKwlmb3JlYWNoKGxjLCBleHRyYXBsYW5zKQorCXsKKwkJUGxh bgkgICAqc3VicGxhbiA9IGxmaXJzdChsYyk7CisKKwkJcGdwYV93YWxrX3JlY3Vyc2l2ZWx5KHdh bGtlciwgc3VicGxhbiwgMCwgTlVMTCwgcHVzaGRvd25fcXVlcnlfZmVhdHVyZXMsCisJCQkJCQkJ ICBiZW5lYXRoX2FueV9nYXRoZXIpOworCX0KK30KKworLyoKKyAqIFBlcmZvcm0gZmluYWwgcHJv Y2Vzc2luZyBvZiBhIG5ld2x5LWNvbnN0cnVjdGVkIHBncGFfdW5yb2xsZWRfam9pbi4gVGhpcwor ICogb25seSBuZWVkcyB0byBiZSBjYWxsZWQgZm9yIHRvcGxldmVsIHBncGFfdW5yb2xsZWRfam9p biBvYmplY3RzLCBzaW5jZSBpdAorICogcmVjdXJzZXMgdG8gc3ViLWpvaW5zIGFzIG5lZWRlZC4K KyAqCisgKiBPdXIgZ29hbCBpcyB0byBhZGQgdGhlIHNldCBvZiBpbm5lciByZWxpZHMgdG8gdGhl IHJlbGV2YW50IGpvaW5fc3RyYXRlZ2llcworICogbGlzdCwgYW5kIHRvIGRvIHRoZSBzYW1lIGZv ciBhbnkgc3ViLWpvaW5zLiBUbyB0aGF0IGVuZCwgdGhlIHJldHVybiB2YWx1ZQorICogaXMgdGhl IHNldCBvZiByZWxpZHMgZm91bmQgYmVuZWF0aCB0aGUgdGhlIGpvaW4sIGJ1dCBpdCBpcyBleHBl Y3RlZCB0aGF0CisgKiB0aGUgdG9wbGV2ZWwgY2FsbGVyIHdpbGwgaWdub3JlIHRoaXMuCisgKi8K K3N0YXRpYyBCaXRtYXBzZXQgKgorcGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4ocGdwYV9wbGFu X3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkgICBwZ3BhX3Vucm9sbGVkX2pvaW4gKnVq b2luKQoreworCUJpdG1hcHNldCAgKmFsbF9yZWxpZHMgPSBibXNfY29weSh1am9pbi0+b3V0ZXIu c2Nhbi0+cmVsaWRzKTsKKworCS8qIElmIHRoaXMgZmFpbHMsIHdlIGRpZG4ndCB1bnJvbGwgcHJv cGVybHkuICovCisJQXNzZXJ0KHVqb2luLT5vdXRlci51bnJvbGxlZF9qb2luID09IE5VTEwpOwor CisJZm9yIChpbnQgayA9IDA7IGsgPCB1am9pbi0+bmlubmVyOyArK2spCisJeworCQlwZ3BhX2pv aW5fbWVtYmVyICptZW1iZXIgPSAmdWpvaW4tPmlubmVyW2tdOworCQlCaXRtYXBzZXQgICpyZWxp ZHM7CisKKwkJaWYgKG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCQkJcmVsaWRzID0g cGdwYV9wcm9jZXNzX3Vucm9sbGVkX2pvaW4od2Fsa2VyLAorCQkJCQkJCQkJCQkJbWVtYmVyLT51 bnJvbGxlZF9qb2luKTsKKwkJZWxzZQorCQl7CisJCQlBc3NlcnQobWVtYmVyLT5zY2FuICE9IE5V TEwpOworCQkJcmVsaWRzID0gbWVtYmVyLT5zY2FuLT5yZWxpZHM7CisJCX0KKwkJd2Fsa2VyLT5q b2luX3N0cmF0ZWdpZXNbdWpvaW4tPnN0cmF0ZWd5W2tdXSA9CisJCQlsYXBwZW5kKHdhbGtlci0+ am9pbl9zdHJhdGVnaWVzW3Vqb2luLT5zdHJhdGVneVtrXV0sIHJlbGlkcyk7CisJCWFsbF9yZWxp ZHMgPSBibXNfYWRkX21lbWJlcnMoYWxsX3JlbGlkcywgcmVsaWRzKTsKKwl9CisKKwlyZXR1cm4g YWxsX3JlbGlkczsKK30KKworLyoKKyAqIEFycmFuZ2UgZm9yIHRoZSBnaXZlbiBwbGFuIG5vZGUg dG8gYmUgdHJlYXRlZCBhcyBhIHF1ZXJ5IGZlYXR1cmUgd2hlbiB0aGUKKyAqIHRyZWUgd2FsayBy ZWFjaGVzIGl0LgorICoKKyAqIE1ha2Ugc3VyZSB0byBvbmx5IHVzZSB0aGlzIGZvciBub2RlcyB0 aGF0IHRoZSB0cmVlIHdhbGsgY2FuJ3QgaGF2ZSByZWFjaGVkCisgKiB5ZXQhCisgKi8KK3ZvaWQK K3BncGFfYWRkX2Z1dHVyZV9mZWF0dXJlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2Vy LAorCQkJCQkJcGdwYV9xZl90eXBlIHR5cGUsIFBsYW4gKnBsYW4pCit7CisJcGdwYV9xdWVyeV9m ZWF0dXJlICpxZiA9IHBncGFfYWRkX2ZlYXR1cmUod2Fsa2VyLCB0eXBlLCBwbGFuKTsKKworCXdh bGtlci0+ZnV0dXJlX3F1ZXJ5X2ZlYXR1cmVzID0KKwkJbGFwcGVuZCh3YWxrZXItPmZ1dHVyZV9x dWVyeV9mZWF0dXJlcywgcWYpOworfQorCisvKgorICogUmV0dXJuIHRoZSBsYXN0IG9mIGFueSBl bGlkZWQgbm9kZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGxhbiBub2RlIElELgorICoKKyAqIFRo ZSBsYXN0IGVsaWRlZCBub2RlIGlzIHRoZSBvbmUgdGhhdCB3b3VsZCBoYXZlIGJlZW4gdXBwZXJt b3N0IGluIHRoZSBwbGFuCisgKiB0cmVlIGhhZCBpdCBub3QgYmVlbiByZW1vdmVkIGR1cmluZyBz ZXRyZWZzIHByb2Nlc3NpZy4KKyAqLworRWxpZGVkTm9kZSAqCitwZ3BhX2xhc3RfZWxpZGVkX25v ZGUoUGxhbm5lZFN0bXQgKnBzdG10LCBQbGFuICpwbGFuKQoreworCUVsaWRlZE5vZGUgKmVsaWRl ZF9ub2RlID0gTlVMTDsKKworCWZvcmVhY2hfbm9kZShFbGlkZWROb2RlLCBuLCBwc3RtdC0+ZWxp ZGVkTm9kZXMpCisJeworCQlpZiAobi0+cGxhbl9ub2RlX2lkID09IHBsYW4tPnBsYW5fbm9kZV9p ZCkKKwkJCWVsaWRlZF9ub2RlID0gbjsKKwl9CisKKwlyZXR1cm4gZWxpZGVkX25vZGU7Cit9CisK Ky8qCisgKiBDZXJ0YWluIHBsYW4gbm9kZXMgY2FuIHJlZmVyIHRvIGEgc2V0IG9mIFJUSXMuIEV4 dHJhY3QgYW5kIHJldHVybiB0aGUgc2V0LgorICovCitCaXRtYXBzZXQgKgorcGdwYV9yZWxpZHMo UGxhbiAqcGxhbikKK3sKKwlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCXJldHVybiAoKFJlc3Vs dCAqKSBwbGFuKS0+cmVsaWRzOworCWVsc2UgaWYgKElzQShwbGFuLCBGb3JlaWduU2NhbikpCisJ CXJldHVybiAoKEZvcmVpZ25TY2FuICopIHBsYW4pLT5mc19yZWxpZHM7CisJZWxzZSBpZiAoSXNB KHBsYW4sIEFwcGVuZCkpCisJCXJldHVybiAoKEFwcGVuZCAqKSBwbGFuKS0+YXBwcmVsaWRzOwor CWVsc2UgaWYgKElzQShwbGFuLCBNZXJnZUFwcGVuZCkpCisJCXJldHVybiAoKE1lcmdlQXBwZW5k ICopIHBsYW4pLT5hcHByZWxpZHM7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEV4dHJh Y3QgdGhlIHNjYW5uZWQgUlRJIGZyb20gYSBwbGFuIG5vZGUuCisgKgorICogUmV0dXJucyAwIGlm IHRoZXJlIGlzbid0IG9uZS4KKyAqLworSW5kZXgKK3BncGFfc2NhbnJlbGlkKFBsYW4gKnBsYW4p Cit7CisJc3dpdGNoIChub2RlVGFnKHBsYW4pKQorCXsKKwkJY2FzZSBUX1NlcVNjYW46CisJCWNh c2UgVF9TYW1wbGVTY2FuOgorCQljYXNlIFRfQml0bWFwSGVhcFNjYW46CisJCWNhc2UgVF9UaWRT Y2FuOgorCQljYXNlIFRfVGlkUmFuZ2VTY2FuOgorCQljYXNlIFRfU3VicXVlcnlTY2FuOgorCQlj YXNlIFRfRnVuY3Rpb25TY2FuOgorCQljYXNlIFRfVGFibGVGdW5jU2NhbjoKKwkJY2FzZSBUX1Zh bHVlc1NjYW46CisJCWNhc2UgVF9DdGVTY2FuOgorCQljYXNlIFRfTmFtZWRUdXBsZXN0b3JlU2Nh bjoKKwkJY2FzZSBUX1dvcmtUYWJsZVNjYW46CisJCWNhc2UgVF9Gb3JlaWduU2NhbjoKKwkJY2Fz ZSBUX0N1c3RvbVNjYW46CisJCWNhc2UgVF9JbmRleFNjYW46CisJCWNhc2UgVF9JbmRleE9ubHlT Y2FuOgorCQkJcmV0dXJuICgoU2NhbiAqKSBwbGFuKS0+c2NhbnJlbGlkOworCQlkZWZhdWx0Ogor CQkJcmV0dXJuIDA7CisJfQorfQorCisvKgorICogQ29uc3RydWN0IGEgbmV3IEJpdG1hcHNldCBj b250YWluaW5nIG5vbi1SVEVfSk9JTiBtZW1iZXJzIG9mICdyZWxpZHMnLgorICovCitCaXRtYXBz ZXQgKgorcGdwYV9maWx0ZXJfb3V0X2pvaW5fcmVsaWRzKEJpdG1hcHNldCAqcmVsaWRzLCBMaXN0 ICpydGFibGUpCit7CisJaW50CQkJcnRpID0gLTE7CisJQml0bWFwc2V0ICAqcmVzdWx0ID0gTlVM TDsKKworCXdoaWxlICgocnRpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcnRpKSkgPj0gMCkK Kwl7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJ0X2ZldGNoKHJ0aSwgcnRhYmxlKTsKKworCQlp ZiAocnRlLT5ydGVraW5kICE9IFJURV9KT0lOKQorCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIo cmVzdWx0LCBydGkpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDcmVhdGUg YSBwZ3BhX3F1ZXJ5X2ZlYXR1cmUgYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhbGwgcXVlcnkg ZmVhdHVyZXMKKyAqIGZvciB0aGlzIHBsYW4uCisgKi8KK3N0YXRpYyBwZ3BhX3F1ZXJ5X2ZlYXR1 cmUgKgorcGdwYV9hZGRfZmVhdHVyZShwZ3BhX3BsYW5fd2Fsa2VyX2NvbnRleHQgKndhbGtlciwK KwkJCQkgcGdwYV9xZl90eXBlIHR5cGUsIFBsYW4gKnBsYW4pCit7CisJcGdwYV9xdWVyeV9mZWF0 dXJlICpxZiA9IHBhbGxvYzBfb2JqZWN0KHBncGFfcXVlcnlfZmVhdHVyZSk7CisKKwlxZi0+dHlw ZSA9IHR5cGU7CisJcWYtPnBsYW4gPSBwbGFuOworCisJd2Fsa2VyLT5xdWVyeV9mZWF0dXJlc1tx Zi0+dHlwZV0gPQorCQlsYXBwZW5kKHdhbGtlci0+cXVlcnlfZmVhdHVyZXNbcWYtPnR5cGVdLCBx Zik7CisKKwlyZXR1cm4gcWY7Cit9CisKKy8qCisgKiBBZGQgYSBzaW5nbGUgUlRJIHRvIGVhY2gg YWN0aXZlIHF1ZXJ5IGZlYXR1cmUuCisgKi8KK3N0YXRpYyB2b2lkCitwZ3BhX3FmX2FkZF9ydGko TGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzLCBJbmRleCBydGkpCit7CisJZm9yZWFjaF9wdHIo cGdwYV9xdWVyeV9mZWF0dXJlLCBxZiwgYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVzKQorCXsKKwkJcWYt PnJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHFmLT5yZWxpZHMsIHJ0aSk7CisJfQorfQorCisvKgor ICogQWRkIGEgc2V0IG9mIFJUSXMgdG8gZWFjaCBhY3RpdmUgcXVlcnkgZmVhdHVyZS4KKyAqLwor c3RhdGljIHZvaWQKK3BncGFfcWZfYWRkX3J0aXMoTGlzdCAqYWN0aXZlX3F1ZXJ5X2ZlYXR1cmVz LCBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlmb3JlYWNoX3B0cihwZ3BhX3F1ZXJ5X2ZlYXR1cmUs IHFmLCBhY3RpdmVfcXVlcnlfZmVhdHVyZXMpCisJeworCQlxZi0+cmVsaWRzID0gYm1zX2FkZF9t ZW1iZXJzKHFmLT5yZWxpZHMsIHJlbGlkcyk7CisJfQorfQorCisvKgorICogQWRkIFJUSXMgZGly ZWN0bHkgY29udGFpbmVkIGluIGEgcGxhbiBub2RlIHRvIGVhY2ggYWN0aXZlIHF1ZXJ5IGZlYXR1 cmUsCisgKiBidXQgZmlsdGVyIG91dCBhbnkgam9pbiBSVElzLCBzaW5jZSBhZHZpY2UgZG9lc24n dCBtZW50aW9uIHRob3NlLgorICovCitzdGF0aWMgdm9pZAorcGdwYV9xZl9hZGRfcGxhbl9ydGlz KExpc3QgKmFjdGl2ZV9xdWVyeV9mZWF0dXJlcywgUGxhbiAqcGxhbiwgTGlzdCAqcnRhYmxlKQor eworCUJpdG1hcHNldCAgKnJlbGlkczsKKwlJbmRleAkJcnRpOworCisJaWYgKChyZWxpZHMgPSBw Z3BhX3JlbGlkcyhwbGFuKSkgIT0gTlVMTCkKKwl7CisJCXJlbGlkcyA9IHBncGFfZmlsdGVyX291 dF9qb2luX3JlbGlkcyhyZWxpZHMsIHJ0YWJsZSk7CisJCXBncGFfcWZfYWRkX3J0aXMoYWN0aXZl X3F1ZXJ5X2ZlYXR1cmVzLCByZWxpZHMpOworCX0KKwllbHNlIGlmICgocnRpID0gcGdwYV9zY2Fu cmVsaWQocGxhbikpICE9IDApCisJCXBncGFfcWZfYWRkX3J0aShhY3RpdmVfcXVlcnlfZmVhdHVy ZXMsIHJ0aSk7Cit9CisKKy8qCisgKiBJZiB3ZSBnZW5lcmF0ZWQgcGxhbiBhZHZpY2UgdXNpbmcg dGhlIHByb3ZpZGVkIHdhbGtlciBvYmplY3QgYW5kIGFycmF5CisgKiBvZiBpZGVudGlmaWVycywg d291bGQgd2UgZ2VuZXJhdGUgdGhlIHNwZWNpZmllZCB0YWcvdGFyZ2V0IGNvbWJpbmF0aW9uPwor ICoKKyAqIElmIHllcywgdGhlIHBsYW4gY29uZm9ybXMgdG8gdGhlIGFkdmljZTsgaWYgbm8sIGl0 IGRvZXMgbm90LiBOb3RlIHRoYXQKKyAqIHdlIGhhdmUga25vdyB3YXkgb2Yga25vd2luZyB3aGV0 aGVyIHRoZSBwbGFubmVyIHdhcyBmb3JjZWQgdG8gZW1pdCBhIHBsYW4KKyAqIHRoYXQgY29uZm9y bWVkIHRvIHRoZSBhZHZpY2Ugb3IganVzdCBoYXBwZW5lZCB0byBkbyBzby4KKyAqLworYm9vbAor cGdwYV93YWxrZXJfd291bGRfYWR2aXNlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2Vy LAorCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkgcGdwYV9h ZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJIHBncGFfYWR2aWNlX3RhcmdldCAqdGFyZ2V0KQor eworCUluZGV4CQlydGFibGVfbGVuZ3RoID0gbGlzdF9sZW5ndGgod2Fsa2VyLT5wc3RtdC0+cnRh YmxlKTsKKwlCaXRtYXBzZXQgICpyZWxpZHMgPSBOVUxMOworCisJaWYgKHRhZyA9PSBQR1BBX1RB R19KT0lOX09SREVSKQorCXsKKwkJZm9yZWFjaF9wdHIocGdwYV91bnJvbGxlZF9qb2luLCB1am9p biwgd2Fsa2VyLT50b3BsZXZlbF91bnJvbGxlZF9qb2lucykKKwkJeworCQkJaWYgKHBncGFfd2Fs a2VyX2pvaW5fb3JkZXJfbWF0Y2hlcyh1am9pbiwgcnRhYmxlX2xlbmd0aCwKKwkJCQkJCQkJCQkJ ICAgcnRfaWRlbnRpZmllcnMsIHRhcmdldCwgdHJ1ZSkpCisJCQkJcmV0dXJuIHRydWU7CisJCX0K KworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJH RVRfSURFTlRJRklFUikKKwl7CisJCUluZGV4CQlydGk7CisKKwkJcnRpID0gcGdwYV9jb21wdXRl X3J0aV9mcm9tX2lkZW50aWZpZXIocnRhYmxlX2xlbmd0aCwgcnRfaWRlbnRpZmllcnMsCisJCQkJ CQkJCQkJCSAgICZ0YXJnZXQtPnJpZCk7CisJCWlmIChydGkgPT0gMCkKKwkJCXJldHVybiBmYWxz ZTsKKwkJcmVsaWRzID0gYm1zX21ha2Vfc2luZ2xldG9uKHJ0aSk7CisJfQorCWVsc2UKKwl7CisJ CUFzc2VydCh0YXJnZXQtPnR0eXBlID09IFBHUEFfVEFSR0VUX09SREVSRURfTElTVCk7CisJCWZv cmVhY2hfcHRyKHBncGFfYWR2aWNlX3RhcmdldCwgY2hpbGRfdGFyZ2V0LCB0YXJnZXQtPmNoaWxk cmVuKQorCQl7CisJCQlJbmRleAkJcnRpOworCisJCQlBc3NlcnQoY2hpbGRfdGFyZ2V0LT50dHlw ZSA9PSBQR1BBX1RBUkdFVF9JREVOVElGSUVSKTsKKwkJCXJ0aSA9IHBncGFfY29tcHV0ZV9ydGlf ZnJvbV9pZGVudGlmaWVyKHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkgICBydF9pZGVudGlm aWVycywKKwkJCQkJCQkJCQkJCSAgICZjaGlsZF90YXJnZXQtPnJpZCk7CisJCQlpZiAocnRpID09 IDApCisJCQkJcmV0dXJuIGZhbHNlOworCQkJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRz LCBydGkpOworCQl9CisJfQorCisJc3dpdGNoICh0YWcpCisJeworCQljYXNlIFBHUEFfVEFHX0pP SU5fT1JERVI6CisJCQkvKiBzaG91bGQgaGF2ZSBiZWVuIGhhbmRsZWQgYWJvdmUgKi8KKwkJCXBn X3VucmVhY2hhYmxlKCk7CisJCQlicmVhazsKKwkJY2FzZSBQR1BBX1RBR19CSVRNQVBfSEVBUF9T Q0FOOgorCQkJLyogWFhYIGN1cnJlbmx5IGRvZXNuJ3QgdHJ5IHRvIG1hdGNoIHRoZSBpbmRleCBz cGVjaWZpY2F0aW9uICovCisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwK KwkJCQkJCQkJCQkgUEdQQV9TQ0FOX0JJVE1BUF9IRUFQLAorCQkJCQkJCQkJCSByZWxpZHMpICE9 IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfRk9SRUlHTl9KT0lOOgorCQkJcmV0dXJuIHBncGFfd2Fs a2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJIFBHUEFfU0NBTl9GT1JFSUdOLAorCQkJ CQkJCQkJCSByZWxpZHMpICE9IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfT05MWV9TQ0FO OgorCQkJeworCQkJCXBncGFfc2NhbiAgKnNjYW47CisKKwkJCQlzY2FuID0gcGdwYV93YWxrZXJf ZmluZF9zY2FuKHdhbGtlciwgUEdQQV9TQ0FOX0lOREVYX09OTFksCisJCQkJCQkJCQkJCSByZWxp ZHMpOworCQkJCWlmIChzY2FuID09IE5VTEwpCisJCQkJCXJldHVybiBmYWxzZTsKKworCQkJCXJl dHVybiBwZ3BhX3dhbGtlcl9pbmRleF90YXJnZXRfbWF0Y2hlc19wbGFuKHRhcmdldC0+aXRhcmdl dCwgc2Nhbi0+cGxhbik7CisJCQl9CisJCWNhc2UgUEdQQV9UQUdfSU5ERVhfU0NBTjoKKwkJCXsK KwkJCQlwZ3BhX3NjYW4gICpzY2FuOworCisJCQkJc2NhbiA9IHBncGFfd2Fsa2VyX2ZpbmRfc2Nh bih3YWxrZXIsIFBHUEFfU0NBTl9JTkRFWCwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCQkJaWYg KHNjYW4gPT0gTlVMTCkKKwkJCQkJcmV0dXJuIGZhbHNlOworCisJCQkJcmV0dXJuIHBncGFfd2Fs a2VyX2luZGV4X3RhcmdldF9tYXRjaGVzX3BsYW4odGFyZ2V0LT5pdGFyZ2V0LCBzY2FuLT5wbGFu KTsKKwkJCX0KKwkJY2FzZSBQR1BBX1RBR19QQVJUSVRJT05XSVNFOgorCQkJcmV0dXJuIHBncGFf d2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJCQkJCQkJCQkJIFBHUEFfU0NBTl9QQVJUSVRJT05X SVNFLAorCQkJCQkJCQkJCSByZWxpZHMpICE9IE5VTEw7CisJCWNhc2UgUEdQQV9UQUdfU0VRX1ND QU46CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfZmluZF9zY2FuKHdhbGtlciwKKwkJCQkJCQkJCQkg UEdQQV9TQ0FOX1NFUSwKKwkJCQkJCQkJCQkgcmVsaWRzKSAhPSBOVUxMOworCQljYXNlIFBHUEFf VEFHX1RJRF9TQ0FOOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2ZpbmRfc2Nhbih3YWxrZXIsCisJ CQkJCQkJCQkJIFBHUEFfU0NBTl9USUQsCisJCQkJCQkJCQkJIHJlbGlkcykgIT0gTlVMTDsKKwkJ Y2FzZSBQR1BBX1RBR19HQVRIRVI6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFpbnNfZmVh dHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfR0FUSEVSLAorCQkJCQkJCQkJCQkJcmVs aWRzKTsKKwkJY2FzZSBQR1BBX1RBR19HQVRIRVJfTUVSR0U6CisJCQlyZXR1cm4gcGdwYV93YWxr ZXJfY29udGFpbnNfZmVhdHVyZSh3YWxrZXIsCisJCQkJCQkJCQkJCQlQR1BBUUZfR0FUSEVSX01F UkdFLAorCQkJCQkJCQkJCQkJcmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19TRU1JSk9JTl9OT05f VU5JUVVFOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX2ZlYXR1cmUod2Fsa2VyLAor CQkJCQkJCQkJCQkJUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUsCisJCQkJCQkJCQkJCQlyZWxp ZHMpOworCQljYXNlIFBHUEFfVEFHX1NFTUlKT0lOX1VOSVFVRToKKwkJCXJldHVybiBwZ3BhX3dh bGtlcl9jb250YWluc19mZWF0dXJlKHdhbGtlciwKKwkJCQkJCQkJCQkJCVBHUEFRRl9TRU1JSk9J Tl9VTklRVUUsCisJCQkJCQkJCQkJCQlyZWxpZHMpOworCQljYXNlIFBHUEFfVEFHX0hBU0hfSk9J TjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJ CQkJIEpTVFJBVF9IQVNIX0pPSU4sCisJCQkJCQkJCQkJCSByZWxpZHMpOworCQljYXNlIFBHUEFf VEFHX01FUkdFX0pPSU5fTUFURVJJQUxJWkU6CisJCQlyZXR1cm4gcGdwYV93YWxrZXJfY29udGFp bnNfam9pbih3YWxrZXIsCisJCQkJCQkJCQkJCSBKU1RSQVRfTUVSR0VfSk9JTl9NQVRFUklBTEla RSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTUVSR0VfSk9JTl9QTEFJ TjoKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJ CQkJIEpTVFJBVF9NRVJHRV9KT0lOX1BMQUlOLAorCQkJCQkJCQkJCQkgcmVsaWRzKTsKKwkJY2Fz ZSBQR1BBX1RBR19ORVNURURfTE9PUF9NQVRFUklBTElaRToKKwkJCXJldHVybiBwZ3BhX3dhbGtl cl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9N QVRFUklBTElaRSwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTkVTVEVE X0xPT1BfTUVNT0laRToKKwkJCXJldHVybiBwZ3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtl ciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNURURfTE9PUF9NRU1PSVpFLAorCQkJCQkJCQkJCQkg cmVsaWRzKTsKKwkJY2FzZSBQR1BBX1RBR19ORVNURURfTE9PUF9QTEFJTjoKKwkJCXJldHVybiBw Z3BhX3dhbGtlcl9jb250YWluc19qb2luKHdhbGtlciwKKwkJCQkJCQkJCQkJIEpTVFJBVF9ORVNU RURfTE9PUF9QTEFJTiwKKwkJCQkJCQkJCQkJIHJlbGlkcyk7CisJCWNhc2UgUEdQQV9UQUdfTk9f R0FUSEVSOgorCQkJcmV0dXJuIHBncGFfd2Fsa2VyX2NvbnRhaW5zX25vX2dhdGhlcih3YWxrZXIs IHJlbGlkcyk7CisJfQorCisJLyogc2hvdWxkIG5vdCBnZXQgaGVyZSAqLworCXJldHVybiBmYWxz ZTsKK30KKworLyoKKyAqIERvZXMgdGhlIGluZGV4IHRhcmdldCBtYXRjaCB0aGUgUGxhbj8KKyAq CisgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB3ZSBrbm93IHRoYXQgaXRhcmdldCBtYW5k YXRlcyBhbiBJbmRleCBTY2FuIG9yCisgKiBJbmRleCBPbmx5IFNjYW4gYW5kIHRoaXMgY29ycmVz cG9uZHMgdG8gdGhlIHR5cGUgb2YgUGxhbi4gSGVyZSwgb3VyIGpvYiBpcworICoganVzdCB0byBj aGVjayB3aGV0aGVyIGl0J3MgdGhlIHNhbWUgaW5kZXguCisgKi8KK3N0YXRpYyBib29sCitwZ3Bh X3dhbGtlcl9pbmRleF90YXJnZXRfbWF0Y2hlc19wbGFuKHBncGFfaW5kZXhfdGFyZ2V0ICppdGFy Z2V0LCBQbGFuICpwbGFuKQoreworCU9pZAkJCWluZGV4b2lkID0gSW52YWxpZE9pZDsKKworCS8q IFJldHJpZXZlIHRoZSBpbmRleCBPSUQgZnJvbSB0aGUgcGxhbi4gKi8KKwlpZiAoSXNBKHBsYW4s IEluZGV4U2NhbikpCisJCWluZGV4b2lkID0gKChJbmRleFNjYW4gKikgcGxhbiktPmluZGV4aWQ7 CisJZWxzZSBpZiAoSXNBKHBsYW4sIEluZGV4T25seVNjYW4pKQorCQlpbmRleG9pZCA9ICgoSW5k ZXhPbmx5U2NhbiAqKSBwbGFuKS0+aW5kZXhpZDsKKwllbHNlCisJCWVsb2coRVJST1IsICJ1bnJl Y29nbml6ZWQgbm9kZSB0eXBlOiAlZCIsIChpbnQpIG5vZGVUYWcocGxhbikpOworCisJLyogU2hv dWxkbid0IGJlIGNhbGxlZCBpbiBhbnkgb3RoZXIgY2FzZS4gKi8KKwlBc3NlcnQoaXRhcmdldC0+ aXR5cGUgPT0gUEdQQV9JTkRFWF9OQU1FKTsKKworCS8qIENoZWNrIHdoZXRoZXIgc2NoZW1hIG5h bWUgbWF0Y2hlcywgaWYgc3BlY2lmaWVkIGluIGluZGV4IHRhcmdldC4gKi8KKwlpZiAoaXRhcmdl dC0+aW5kbmFtZXNwYWNlICE9IE5VTEwpCisJeworCQlPaWQJCQluc3BvaWQgPSBnZXRfcmVsX25h bWVzcGFjZShpbmRleG9pZCk7CisJCWNoYXIJICAgKnJlbG5hbWVzcGFjZSA9IGdldF9uYW1lc3Bh Y2VfbmFtZV9vcl90ZW1wKG5zcG9pZCk7CisKKwkJaWYgKHN0cmNtcChpdGFyZ2V0LT5pbmRuYW1l c3BhY2UsIHJlbG5hbWVzcGFjZSkgIT0gMCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwkvKiBD aGVjayB3aGV0aGVyIHJlbGF0aW9uIG5hbWUgbWF0Y2hlcy4gKi8KKwlyZXR1cm4gKHN0cmNtcChp dGFyZ2V0LT5pbmRuYW1lLCBnZXRfcmVsX25hbWUoaW5kZXhvaWQpKSA9PSAwKTsKK30KKworLyoK KyAqIERvZXMgYW4gdW5yb2xsZWQgam9pbiBtYXRjaCB0aGUgam9pbiBvcmRlciBzcGVjaWZpZWQg YnkgYW4gYWR2aWNlIHRhcmdldD8KKyAqLworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2pvaW5f b3JkZXJfbWF0Y2hlcyhwZ3BhX3Vucm9sbGVkX2pvaW4gKnVqb2luLAorCQkJCQkJCSAgIEluZGV4 IHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJICAgcGdwYV9pZGVudGlmaWVyICpydF9pZGVudGlmaWVy cywKKwkJCQkJCQkgICBwZ3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCwKKwkJCQkJCQkgICBib29s IHRvcGxldmVsKQoreworCWludAkJCW5jaGlsZHJlbiA9IGxpc3RfbGVuZ3RoKHRhcmdldC0+Y2hp bGRyZW4pOworCisJQXNzZXJ0KHRhcmdldC0+dHR5cGUgPT0gUEdQQV9UQVJHRVRfT1JERVJFRF9M SVNUKTsKKworCS8qIEF0IHRvcGxldmVsLCB3ZSBhbGxvdyBhIHByZWZpeCBtYXRjaC4gKi8KKwlp ZiAodG9wbGV2ZWwpCisJeworCQlpZiAobmNoaWxkcmVuID4gdWpvaW4tPm5pbm5lciArIDEpCisJ CQlyZXR1cm4gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCWlmIChuY2hpbGRyZW4gIT0gdWpvaW4t Pm5pbm5lciArIDEpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogT3V0ZXJtb3N0IHJlbCBt dXN0IG1hdGNoLiAqLworCWlmICghcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzX21lbWJl cigmdWpvaW4tPm91dGVyLAorCQkJCQkJCQkJCQkgICBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJ CQkgICBydF9pZGVudGlmaWVycywKKwkJCQkJCQkJCQkJICAgbGluaXRpYWwodGFyZ2V0LT5jaGls ZHJlbikpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBFYWNoIGlubmVyIHJlbCBtdXN0IG1hdGNo LiAqLworCWZvciAoaW50IG4gPSAwOyBuIDwgbmNoaWxkcmVuIC0gMTsgKytuKQorCXsKKwkJcGdw YV9hZHZpY2VfdGFyZ2V0ICpjaGlsZF90YXJnZXQgPSBsaXN0X250aCh0YXJnZXQtPmNoaWxkcmVu LCBuICsgMSk7CisKKwkJaWYgKCFwZ3BhX3dhbGtlcl9qb2luX29yZGVyX21hdGNoZXNfbWVtYmVy KCZ1am9pbi0+aW5uZXJbbl0sCisJCQkJCQkJCQkJCQkgICBydGFibGVfbGVuZ3RoLAorCQkJCQkJ CQkJCQkJICAgcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJCQkJCQkgICBjaGlsZF90YXJnZXQpKQor CQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogRG9lcyBv bmUgbWVtYmVyIG9mIGFuIHVucm9sbGVkIGpvaW4gbWF0Y2ggYW4gYWR2aWNlIHRhcmdldD8KKyAq Lworc3RhdGljIGJvb2wKK3BncGFfd2Fsa2VyX2pvaW5fb3JkZXJfbWF0Y2hlc19tZW1iZXIocGdw YV9qb2luX21lbWJlciAqbWVtYmVyLAorCQkJCQkJCQkJICBJbmRleCBydGFibGVfbGVuZ3RoLAor CQkJCQkJCQkJICBwZ3BhX2lkZW50aWZpZXIgKnJ0X2lkZW50aWZpZXJzLAorCQkJCQkJCQkJICBw Z3BhX2FkdmljZV90YXJnZXQgKnRhcmdldCkKK3sKKwlCaXRtYXBzZXQgICpyZWxpZHMgPSBOVUxM OworCisJaWYgKG1lbWJlci0+dW5yb2xsZWRfam9pbiAhPSBOVUxMKQorCXsKKwkJaWYgKHRhcmdl dC0+dHR5cGUgIT0gUEdQQV9UQVJHRVRfT1JERVJFRF9MSVNUKQorCQkJcmV0dXJuIGZhbHNlOwor CQlyZXR1cm4gcGdwYV93YWxrZXJfam9pbl9vcmRlcl9tYXRjaGVzKG1lbWJlci0+dW5yb2xsZWRf am9pbiwKKwkJCQkJCQkJCQkJICBydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkgIHJ0X2lkZW50 aWZpZXJzLAorCQkJCQkJCQkJCQkgIHRhcmdldCwKKwkJCQkJCQkJCQkJICBmYWxzZSk7CisJfQor CisJQXNzZXJ0KG1lbWJlci0+c2NhbiAhPSBOVUxMKTsKKwlzd2l0Y2ggKHRhcmdldC0+dHR5cGUp CisJeworCQljYXNlIFBHUEFfVEFSR0VUX09SREVSRURfTElTVDoKKwkJCS8qIENvdWxkIG9ubHkg bWF0Y2ggYW4gdW5yb2xsZWQgam9pbiAqLworCQkJcmV0dXJuIGZhbHNlOworCisJCWNhc2UgUEdQ QV9UQVJHRVRfVU5PUkRFUkVEX0xJU1Q6CisJCQl7CisJCQkJZm9yZWFjaF9wdHIocGdwYV9hZHZp Y2VfdGFyZ2V0LCBjaGlsZF90YXJnZXQsIHRhcmdldC0+Y2hpbGRyZW4pCisJCQkJeworCQkJCQlJ bmRleAkJcnRpOworCisJCQkJCXJ0aSA9IHBncGFfY29tcHV0ZV9ydGlfZnJvbV9pZGVudGlmaWVy KHJ0YWJsZV9sZW5ndGgsCisJCQkJCQkJCQkJCQkJCSAgIHJ0X2lkZW50aWZpZXJzLAorCQkJCQkJ CQkJCQkJCQkgICAmY2hpbGRfdGFyZ2V0LT5yaWQpOworCQkJCQlpZiAocnRpID09IDApCisJCQkJ CQlyZXR1cm4gZmFsc2U7CisJCQkJCXJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKHJlbGlkcywgcnRp KTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisKKwkJY2FzZSBQR1BBX1RBUkdFVF9JREVOVElG SUVSOgorCQkJeworCQkJCUluZGV4CQlydGk7CisKKwkJCQlydGkgPSBwZ3BhX2NvbXB1dGVfcnRp X2Zyb21faWRlbnRpZmllcihydGFibGVfbGVuZ3RoLAorCQkJCQkJCQkJCQkJCSAgIHJ0X2lkZW50 aWZpZXJzLAorCQkJCQkJCQkJCQkJCSAgICZ0YXJnZXQtPnJpZCk7CisJCQkJaWYgKHJ0aSA9PSAw KQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJcmVsaWRzID0gYm1zX21ha2Vfc2luZ2xldG9uKHJ0 aSk7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJcmV0dXJuIGJtc19lcXVhbChtZW1iZXItPnNj YW4tPnJlbGlkcywgcmVsaWRzKTsKK30KKworLyoKKyAqIEZpbmQgdGhlIHNjYW4gd2hlcmUgdGhl IHdhbGtlciBzYXlzIHRoYXQgdGhlIGdpdmVuIHNjYW4gc3RyYXRlZ3kgc2hvdWxkIGJlCisgKiB1 c2VkIGZvciB0aGUgZ2l2ZW4gcmVsaWQgc2V0LCBpZiBvbmUgZXhpc3RzLgorICoKKyAqIFJldHVy bnMgdGhlIHBncGFfc2NhbiBvYmplY3QsIG9yIE5VTEwgaWYgbm9uZSB3YXMgZm91bmQuCisgKi8K K3N0YXRpYyBwZ3BhX3NjYW4gKgorcGdwYV93YWxrZXJfZmluZF9zY2FuKHBncGFfcGxhbl93YWxr ZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkgIHBncGFfc2Nhbl9zdHJhdGVneSBzdHJhdGVneSwK KwkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAgICpzY2FucyA9IHdhbGtlci0+ c2NhbnNbc3RyYXRlZ3ldOworCisJZm9yZWFjaF9wdHIocGdwYV9zY2FuLCBzY2FuLCBzY2FucykK Kwl7CisJCWlmIChibXNfZXF1YWwoc2Nhbi0+cmVsaWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHNj YW47CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBEb2VzIHRoaXMgd2Fsa2VyIHNh eSB0aGF0IHRoZSBnaXZlbiBxdWVyeSBmZWF0dXJlIGFwcGxpZXMgdG8gdGhlIGdpdmVuCisgKiBy ZWxpZCBzZXQ/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtlcl9jb250YWluc19mZWF0dXJl KHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBwZ3BhX3FmX3R5cGUg dHlwZSwKKwkJCQkJCQkgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJTGlzdAkgICAqcXVlcnlfZmVh dHVyZXMgPSB3YWxrZXItPnF1ZXJ5X2ZlYXR1cmVzW3R5cGVdOworCisJZm9yZWFjaF9wdHIocGdw YV9xdWVyeV9mZWF0dXJlLCBxZiwgcXVlcnlfZmVhdHVyZXMpCisJeworCQlpZiAoYm1zX2VxdWFs KHFmLT5yZWxpZHMsIHJlbGlkcykpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFs c2U7Cit9CisKKy8qCisgKiBEb2VzIHRoZSB3YWxrZXIgc2F5IHRoYXQgdGhlIGdpdmVuIGpvaW4g c3RyYXRlZ3kgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZQorICogZ2l2ZW4gcmVsaWQgc2V0PworICov CitzdGF0aWMgYm9vbAorcGdwYV93YWxrZXJfY29udGFpbnNfam9pbihwZ3BhX3BsYW5fd2Fsa2Vy X2NvbnRleHQgKndhbGtlciwKKwkJCQkJCSAgcGdwYV9qb2luX3N0cmF0ZWd5IHN0cmF0ZWd5LAor CQkJCQkJICBCaXRtYXBzZXQgKnJlbGlkcykKK3sKKwlMaXN0CSAgICpqb2luX3N0cmF0ZWdpZXMg PSB3YWxrZXItPmpvaW5fc3RyYXRlZ2llc1tzdHJhdGVneV07CisKKwlmb3JlYWNoX3B0cihCaXRt YXBzZXQsIGpzcmVsaWRzLCBqb2luX3N0cmF0ZWdpZXMpCisJeworCQlpZiAoYm1zX2VxdWFsKGpz cmVsaWRzLCByZWxpZHMpKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOwor fQorCisvKgorICogRG9lcyB0aGUgd2Fsa2VyIHNheSB0aGF0IHRoZSBnaXZlbiByZWxpZHMgc2hv dWxkIGJlIG1hcmtlZCBhcyBOT19HQVRIRVI/CisgKi8KK3N0YXRpYyBib29sCitwZ3BhX3dhbGtl cl9jb250YWluc19ub19nYXRoZXIocGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJ CQkJCQkJICAgQml0bWFwc2V0ICpyZWxpZHMpCit7CisJcmV0dXJuIGJtc19pc19zdWJzZXQocmVs aWRzLCB3YWxrZXItPm5vX2dhdGhlcl9zY2Fucyk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3BncGFfd2Fsa2VyLmggYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3BncGFf d2Fsa2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI5MWEzNmNh M2RkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9wZ3BhX3dhbGtl ci5oCkBAIC0wLDAgKzEsMTQxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ3BhX3dh bGtlci5oCisgKgkgIFBsYW4gdHJlZSBpdGVyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKgkgIGNv bnRyaWIvcGdfcGxhbl9hZHZpY2UvcGdwYV93YWxrZXIuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaWZuZGVmIFBHUEFfV0FMS0VSX0gKKyNkZWZpbmUgUEdQQV9XQUxLRVJfSAorCisj aW5jbHVkZSAicGdwYV9hc3QuaCIKKyNpbmNsdWRlICJwZ3BhX2pvaW4uaCIKKyNpbmNsdWRlICJw Z3BhX3NjYW4uaCIKKworLyoKKyAqIFdoZW4gZ2VuZXJhdGluZyBhZHZpY2UsIHdlIHNob3VsZCBl bWl0IGVpdGhlciBTRU1JSk9JTl9VTklRVUUgYWR2aWNlIG9yCisgKiBTRU1JSk9JTl9OT05fVU5J UVVFIGFkdmljZSBmb3IgZWFjaCBzZW1pam9pbiBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSBjaG9z ZQorICogdG8gaW1wbGVtZW50IGl0IGFzIGEgc2VtaWpvaW4gb3Igd2hldGhlciB3ZSBpbnN0ZWFk IGNob3NlIHRvIG1ha2UgdGhlCisgKiBudWxsYWJsZSBzaWRlIHVuaXF1ZSBhbmQgdGhlbiBwZXJm b3JtIGFuIGlubmVyIGpvaW4uIFdoZW4gdGhlIG1ha2UtdW5pcXVlCisgKiBzdHJhdGVneSBpcyBu b3QgY2hvc2VuLCBpdCdzIG5vdCBlYXN5IHRvIHRlbGwgZnJvbSB0aGUgZmluYWwgcGxhbiB0cmVl CisgKiB3aGV0aGVyIGl0IHdhcyBjb25zaWRlcmVkLiBUaGF0J3MgYXdrd2FyZCwgYmVjYXVzZSB3 ZSBkb24ndCB3YW50IHRvIGVtaXQKKyAqIHVzZWxlc3MgU0VNSUpPSU5fTk9OX1VOSVFVRSBhZHZp Y2Ugd2hlbiB0aGVyZSB3YXMgbm8gZGVjaXNpb24gdG8gYmUgbWFkZS4KKyAqCisgKiBUbyBhdm9p ZCB0aGF0LCBkdXJpbmcgcGxhbm5pbmcsIHdlIGNyZWF0ZSBhIHBncGFfc2pfdW5pcXVlX3JlbCBm b3IgZWFjaAorICogcmVsYXRpb24gdGhhdCB3ZSBjb25zaWRlcmVkIG1ha2luZyB1bmlxdWUgZm9y IHB1cnBvc2VzIG9mIHNlbWlqb2luIHBsYW5uaW5nLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3Bh X3NqX3VuaXF1ZV9yZWwKK3sKKwljaGFyCSAgICpwbGFuX25hbWU7CisJQml0bWFwc2V0ICAqcmVs aWRzOworfSBwZ3BhX3NqX3VuaXF1ZV9yZWw7CisKKy8qCisgKiBXZSB1c2UgdGhlIHRlcm0gInF1 ZXJ5IGZlYXR1cmUiIHRvIHJlZmVyIHRvIHBsYW4gbm9kZXMgdGhhdCBhcmUgaW50ZXJlc3RpbmcK KyAqIGluIHRoZSBmb2xsb3dpbmcgd2F5OiB0byBnZW5lcmF0ZSBhZHZpY2UsIHdlJ2xsIG5lZWQg dG8ga25vdyB0aGUgc2V0IG9mCisgKiBzYW1lLXN1YnF1ZXJ5LCBub24tam9pbiBSVElzIG9jY3Vy aW5nIGF0IG9yIGJlbG93IHRoYXQgcGxhbiBub2RlLCB3aXRob3V0CisgKiBhZG1peHR1cmUgb2Yg cGFyZW50IGFuZCBjaGlsZCBSVElzLgorICoKKyAqIEZvciBleGFtcGxlLCBHYXRoZXIgbm9kZXMs IGRlc2lnaW5hdGVkIGJ5IFBHUEFRRl9HQVRIRVIsIGFuZCBHYXRoZXIgTWVyZ2UKKyAqIG5vZGVz LCBkZXNpZ25hdGVkIGJ5IFBHUEFRRl9HQVRIRVJfTUVSR0UsIGFyZSBxdWVyeSBmZWF0dXJlcywg YmVjYXVzZSB3ZSdsbAorICogd2FudCB0byBhZG1pdCBzb21lIGtpbmQgb2YgYWR2aWNlIHRoYXQg ZGVzY3JpYmVzIHRoZSBwb3J0aW9uIG9mIHRoZSBwbGFuCisgKiB0cmVlIHRoYXQgYXBwZWFycyBi ZW5lYXRoIHRob3NlIG5vZGVzLgorICoKKyAqIEVhY2ggc2VtaWpvaW4gY2FuIGJlIGltcGxlbWVu dGVkIGVpdGhlciBieSBkaXJlY3RseSBwZXJmb3JtaW5nIGEgc2VtaWpvaW4sCisgKiBvciBieSBt YWtpbmcgb25lIHNpZGUgdW5pcXVlIGFuZCB0aGVuIHBlcmZvcm1pbmcgYSBub3JtYWwgam9pbi4g RWl0aGVyIHdheSwKKyAqIHdlIHVzZSBhIHF1ZXJ5IGZlYXR1cmUgdG8gbm90aWNlIHdoYXQgZGVj aXNpb24gd2FzIG1hZGUsIHNvIHRoYXQgd2UgY2FuCisgKiBkZXNjcmliZSBpdCBieSBlbnVtZXJh dGluZyB0aGUgUlRJcyBvbiB0aGF0IHNpZGUgb2YgdGhlIGpvaW4uCisgKgorICogVG8gZWxhYm9y YXRlIG9uIHRoZSAibm8gYWRtaXh0dXJlIG9mIHBhcmVudCBhbmQgY2hpbGQgUlRJcyIgcnVsZSwg aW4gYWxsIG9mCisgKiB0aGVzZSBjYXNlcywgaWYgdGhlIGVudGlyZXR5IG9mIGFuIGluaGVyaXRh bmNlIGhpZXJhcmNoeSBhcHBlYXJzIGJlbmVhdGgKKyAqIHRoZSBxdWVyeSBmZWF0dXJlLCB3ZSBv bmx5IHdhbnQgdG8gbmFtZSB0aGUgcGFyZW50IHRhYmxlLiBCdXQgaXQncyBhbHNvCisgKiBwb3Nz aWJsZSB0byBoYXZlIGNhc2VzIHdoZXJlIHdlIG11c3QgbmFtZSBjaGlsZCB0YWJsZXMuIFRoaXMg aXMgcGFydGljdWxhcmx5CisgKiBsaWtlbHkgdG8gaGFwcGVuIHdoZW4gcGFydGl0aW9ud2lzZSBq b2luIGlzIGluIHVzZSwgYnV0IGNvdWxkIGhhcHBlbiBmb3IKKyAqIEdhdGhlciBvciBHYXRoZXIg TWVyZ2UgZXZlbiB3aXRob3V0IHRoYXQsIGlmIG9uZSBvZiB0aG9zZSBhcHBlYXJzIGJlbG93Cisg KiBhbiBBcHBlbmQgb3IgTWVyZ2VBcHBlbmQgbm9kZSBmb3IgYSBzaW5nbGUgdGFibGUuCisgKi8K K3R5cGVkZWYgZW51bSBwZ3BhX3FmX3R5cGUKK3sKKwlQR1BBUUZfR0FUSEVSLAorCVBHUEFRRl9H QVRIRVJfTUVSR0UsCisJUEdQQVFGX1NFTUlKT0lOX05PTl9VTklRVUUsCisJUEdQQVFGX1NFTUlK T0lOX1VOSVFVRQorCS8qIHVwZGF0ZSBOVU1fUEdQQV9RRl9UWVBFUyBpZiB5b3UgYWRkIGFueXRo aW5nIGhlcmUgKi8KK30gcGdwYV9xZl90eXBlOworCisjZGVmaW5lIE5VTV9QR1BBX1FGX1RZUEVT ICgoaW50KSBQR1BBUUZfU0VNSUpPSU5fVU5JUVVFICsgMSkKKworLyoKKyAqIEZvciBlYWNoIHF1 ZXJ5IGZlYXR1cmUsIHdlIGtlZXAgdHJhY2sgb2YgdGhlIGZlYXR1cmUgdHlwZSBhbmQgdGhlIHNl dCBvZgorICogcmVsaWRzIHRoYXQgd2UgZm91bmQgdW5kZXJuZWF0aCB0aGUgcmVsZXZhbnQgcGxh biBub2RlLiBTZWUgdGhlIGNvbW1lbnRzCisgKiBvbiBwZ3BhX3FmX3R5cGUsIGFib3ZlLCBmb3Ig YWRkaXRpb25hbCBkZXRhaWxzLgorICovCit0eXBlZGVmIHN0cnVjdCBwZ3BhX3F1ZXJ5X2ZlYXR1 cmUKK3sKKwlwZ3BhX3FmX3R5cGUgdHlwZTsKKwlQbGFuCSAgICpwbGFuOworCUJpdG1hcHNldCAg KnJlbGlkczsKK30gcGdwYV9xdWVyeV9mZWF0dXJlOworCisvKgorICogQ29udGV4dCBvYmplY3Qg Zm9yIHBsYW4gdHJlZSB3YWxrLgorICoKKyAqIHBzdG10IGlzIHRoZSBQbGFubmVkU3RtdCB3ZSdy ZSBzdHVkeWluZy4KKyAqCisgKiBzY2FucyBpcyBhbiBhcnJheSBvZiBsaXN0cyBvZiBwZ3BhX3Nj YW4gb2JqZWN0cy4gVGhlIGFycmF5IGlzIGluZGV4ZWQgYnkKKyAqIHRoZSBzY2FuJ3MgcGdwYV9z Y2FuX3N0cmF0ZWd5LgorICoKKyAqIG5vX2dhdGhlcl9zY2FucyBpcyB0aGUgc2V0IG9mIHNjYW4g UlRJcyB0aGF0IGRvIG5vdCBhcHBlYXIgYmVuZWF0aCBhbnkKKyAqIEdhdGhlciBvciBHYXRoZXIg TWVyZ2Ugbm9kZS4KKyAqCisgKiB0b3BsZXZlbF91bnJvbGxlZF9qb2lucyBpcyBhIGxpc3Qgb2Yg YWxsIHBncGFfdW5yb2xsZWRfam9pbiBvYmplY3RzIHRoYXQKKyAqIGFyZSBub3QgYSBjaGlsZCBv ZiBzb21lIG90aGVyIHBncGFfdW5yb2xsZWRfam9pbi4KKyAqCisgKiBqb2luX3N0cmF0ZWd5IGlz IGFuIGFycmF5IG9mIGxpc3RzIG9mIEJpdG1hcHNldCBvYmplY3RzLiBFYWNoIEJpdG1hcHNldAor ICogaXMgdGhlIHNldCBvZiByZWxpZHMgdGhhdCBhcHBlYXJzIG9uIHRoZSBpbm5lciBzaWRlIG9m IHNvbWUgam9pbiAoZXhjbHVkaW5nCisgKiBSVElzIGZyb20gcGFydGl0aW9uIGNoaWxkcmVuIGFu ZCBzdWJxdWVyaWVzKS4gVGhlIGFycmF5IGlzIGluZGV4ZWQgYnkKKyAqIHBncGFfam9pbl9zdHJh dGVneS4KKyAqCisgKiBxdWVyeV9mZWF0dXJlcyBpcyBhbiBhcnJheSBsaXN0cyBvZiBwZ3BhX3F1 ZXJ5X2ZlYXR1cmUgb2JqZWN0cywgaW5kZXhlZAorICogYnkgcGdwYV9xZl90eXBlLgorICoKKyAq IGZ1dHVyZV9xdWVyeV9mZWF0dXJlcyBpcyBvbmx5IHVzZWQgZHVyaW5nIHRoZSBwbGFuIHRyZWUg d2FsayBhbmQgc2hvdWxkCisgKiBiZSBlbXB0eSB3aGVuIHRoZSB0cmVlIHdhbGsgY29uY2x1ZGVz LiBJdCBpcyBhIGxpc3Qgb2YgcGdwYV9xdWVyeV9mZWF0dXJlCisgKiBvYmplY3RzIGZvciBQbGFu IG5vZGVzIHRoYXQgdGhlIHBsYW4gdHJlZSB3YWxrIGhhcyBub3QgeWV0IGVuY291bnRlcmVkOwor ICogd2hlbiBlbmNvdW50ZXJlZCwgdGhleSB3aWxsIGJlIG1vdmVkIHRvIHRoZSBsaXN0IG9mIGFj dGl2ZSBxdWVyeSBmZWF0dXJlcworICogdGhhdCBpcyBwcm9wYWdhdGVkIHZpYSB0aGUgY2FsbCBz dGFjay4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0Cit7CisJ UGxhbm5lZFN0bXQgKnBzdG10OworCUxpc3QJICAgKnNjYW5zW05VTV9QR1BBX1NDQU5fU1RSQVRF R1ldOworCUJpdG1hcHNldCAgKm5vX2dhdGhlcl9zY2FuczsKKwlMaXN0CSAgICp0b3BsZXZlbF91 bnJvbGxlZF9qb2luczsKKwlMaXN0CSAgICpqb2luX3N0cmF0ZWdpZXNbTlVNX1BHUEFfSk9JTl9T VFJBVEVHWV07CisJTGlzdAkgICAqcXVlcnlfZmVhdHVyZXNbTlVNX1BHUEFfUUZfVFlQRVNdOwor CUxpc3QJICAgKmZ1dHVyZV9xdWVyeV9mZWF0dXJlczsKK30gcGdwYV9wbGFuX3dhbGtlcl9jb250 ZXh0OworCitleHRlcm4gdm9pZCBwZ3BhX3BsYW5fd2Fsa2VyKHBncGFfcGxhbl93YWxrZXJfY29u dGV4dCAqd2Fsa2VyLAorCQkJCQkJCSBQbGFubmVkU3RtdCAqcHN0bXQsCisJCQkJCQkJIExpc3Qg KnNqX3VuaXF1ZV9yZWxzKTsKKworZXh0ZXJuIHZvaWQgcGdwYV9hZGRfZnV0dXJlX2ZlYXR1cmUo cGdwYV9wbGFuX3dhbGtlcl9jb250ZXh0ICp3YWxrZXIsCisJCQkJCQkJCQlwZ3BhX3FmX3R5cGUg dHlwZSwKKwkJCQkJCQkJCVBsYW4gKnBsYW4pOworCitleHRlcm4gRWxpZGVkTm9kZSAqcGdwYV9s YXN0X2VsaWRlZF9ub2RlKFBsYW5uZWRTdG10ICpwc3RtdCwgUGxhbiAqcGxhbik7CitleHRlcm4g Qml0bWFwc2V0ICpwZ3BhX3JlbGlkcyhQbGFuICpwbGFuKTsKK2V4dGVybiBJbmRleCBwZ3BhX3Nj YW5yZWxpZChQbGFuICpwbGFuKTsKK2V4dGVybiBCaXRtYXBzZXQgKnBncGFfZmlsdGVyX291dF9q b2luX3JlbGlkcyhCaXRtYXBzZXQgKnJlbGlkcywgTGlzdCAqcnRhYmxlKTsKKworZXh0ZXJuIGJv b2wgcGdwYV93YWxrZXJfd291bGRfYWR2aXNlKHBncGFfcGxhbl93YWxrZXJfY29udGV4dCAqd2Fs a2VyLAorCQkJCQkJCQkJIHBncGFfaWRlbnRpZmllciAqcnRfaWRlbnRpZmllcnMsCisJCQkJCQkJ CQkgcGdwYV9hZHZpY2VfdGFnX3R5cGUgdGFnLAorCQkJCQkJCQkJIHBncGFfYWR2aWNlX3Rhcmdl dCAqdGFyZ2V0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9nYXRoZXIuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvZ2F0aGVyLnNxbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzc2NjY2YmYxOTYKLS0tIC9k ZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9nYXRoZXIuc3FsCkBAIC0w LDAgKzEsODYgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxsZWxfd29y a2Vyc19wZXJfZ2F0aGVyID0gMTsKK1NFVCBwYXJhbGxlbF9zZXR1cF9jb3N0ID0gMDsKK1NFVCBw YXJhbGxlbF90dXBsZV9jb3N0ID0gMDsKK1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nhbl9zaXpl ID0gMDsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsKKworQ1JFQVRFIFRBQkxFIGd0 X2RpbSAoaWQgc2VyaWFsIHByaW1hcnkga2V5LCBkaW0gdGV4dCkKKwlXSVRIIChhdXRvdmFjdXVt X2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBndF9kaW0gKGRpbSkgU0VMRUNUIHJhbmRv bSgpOjp0ZXh0IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUg Z3RfZGltOworCitDUkVBVEUgVEFCTEUgZ3RfZmFjdCAoCisJaWQgaW50IG5vdCBudWxsLAorCWRp bV9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgZ3RfZGltIChpZCkKKykgV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gZ3RfZmFjdAorCVNFTEVDVCBn LCAoZyUzKSsxIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMDAwKSBnOworVkFDVVVNIEFOQUxZ WkUgZ3RfZmFjdDsKKworLS0gQnkgZGVmYXVsdCwgd2UgZXhwZWN0IEdhdGhlciBNZXJnZSB3aXRo IGEgcGFyYWxsZWwgaGFzaCBqb2luLgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK KwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5p ZCBPUkRFUiBCWSBkLmlkOworCistLSBGb3JjZSBHYXRoZXIgb3IgR2F0aGVyIE1lcmdlIG9mIGJv dGggcmVsYXRpb25zIHRvZ2V0aGVyLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2Uu YWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGlt X2lkID0gZC5pZCBPUkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdnYXRoZXIoKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQg T1JERVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2UgYSBzZXBhcmF0ZSBHYXRoZXIgb3Ig R2F0aGVyIE1lcmdlIG9wZXJhdGlvbiBmb3IgZWFjaCByZWxhdGlvbi4KK0JFR0lOOworU0VUIExP Q0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2UoZiBkKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4g Z3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcihmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBm LmRpbV9pZCA9IGQuaWQgT1JERVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnZ2F0aGVyKChkIGQvZC5kKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lk ID0gZC5pZCBPUkRFUiBCWSBkLmlkOworQ09NTUlUOworCistLSBGb3JjZSBhIEdhdGhlciBvciBH YXRoZXIgTWVyZ2Ugb24gb25lIHJlbGF0aW9uIGJ1dCBubyBwYXJhbGxlbGlzbSBvbiBvdGhlci4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXJfbWVyZ2Uo Zikgbm9fZ2F0aGVyKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JE RVIgQlkgZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnZ2F0aGVyX21l cmdlKGQpIG5vX2dhdGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor CVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlk IE9SREVSIEJZIGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhl cihmKSBub19nYXRoZXIoZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGd0X2ZhY3QgZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZCBP UkRFUiBCWSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIo ZCkgbm9fZ2F0aGVyKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JE RVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2Ugbm8gR2F0aGVyIG9yIEdhdGhlciBNZXJn ZSB1c2UgYXQgYWxsLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J25vX2dhdGhlcihmIGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VM RUNUICogRlJPTSBndF9mYWN0IGYgSk9JTiBndF9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQgT1JE RVIgQlkgZC5pZDsKK0NPTU1JVDsKKworLS0gQ2FuJ3QgZm9yY2UgR2F0aGVyIE1lcmdlIHdpdGhv dXQgdGhlIE9SREVSIEJZIGNsYXVzZSwgYnV0IGp1c3QgR2F0aGVyIGlzIE9LLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2dhdGhlcl9tZXJnZSgoZiBkKSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGd0X2ZhY3Qg ZiBKT0lOIGd0X2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnZ2F0aGVyKChmIGQpKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKQorCVNFTEVDVCAqIEZST00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1f aWQgPSBkLmlkOworQ09NTUlUOworCistLSBUZXN0IGNvbmZsaWN0aW5nIGFkdmljZS4KK0JFR0lO OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdnYXRoZXIoKGYgZCkpIG5vX2dh dGhlcihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZS T00gZ3RfZmFjdCBmIEpPSU4gZ3RfZGltIGQgT04gZi5kaW1faWQgPSBkLmlkIE9SREVSIEJZIGQu aWQ7CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9qb2lu X29yZGVyLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41ZTE2ZTU0ZWZhZAotLS0gL2Rl di9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fb3JkZXIuc3FsCkBA IC0wLDAgKzEsMTQ1IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVs X3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBqb19kaW0xIChpZCBpbnRl Z2VyIHByaW1hcnkga2V5LCBkaW0xIHRleHQsIHZhbDEgaW50KQorCVdJVEggKGF1dG92YWN1dW1f ZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2RpbTEgKGlkLCBkaW0xLCB2YWwxKQor CVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMCkgZzsKK1ZBQ1VVTSBBTkFMWVpFIGpvX2RpbTE7CitDUkVB VEUgVEFCTEUgam9fZGltMiAoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgZGltMiB0ZXh0LCB2YWwy IGludCkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBq b19kaW0yIChpZCwgZGltMiwgdmFsMikKKwlTRUxFQ1QgZywgJ3NvbWUgZmlsbGVyIHRleHQgJyB8 fCBnLCAoZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnOworVkFD VVVNIEFOQUxZWkUgam9fZGltMjsKKworQ1JFQVRFIFRBQkxFIGpvX2ZhY3QgKAorCWlkIGludCBw cmltYXJ5IGtleSwKKwlkaW0xX2lkIGludGVnZXIgbm90IG51bGwgcmVmZXJlbmNlcyBqb19kaW0x IChpZCksCisJZGltMl9pZCBpbnRlZ2VyIG5vdCBudWxsIHJlZmVyZW5jZXMgam9fZGltMiAoaWQp CispIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIGpvX2Zh Y3QKKwlTRUxFQ1QgZywgKGclMTAwKSsxLCAoZyUxMDApKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMDAwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBqb19mYWN0OworCistLSBXZSBleHBlY3QgdG8g am9pbiB0byBkMiBmaXJzdCBhbmQgdGhlbiBkMSwgc2luY2UgdGhlIGNvbmRpdGlvbiBvbiBkMgor LS0gaXMgbW9yZSBzZWxlY3RpdmUuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFf aWQgPSBkMS5pZAorCUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJ V0hFUkUgdmFsMSA9IDEgQU5EIHZhbDIgPSAxOworCistLSBGb3JjZSBhIGZldyBkaWZmZXJlbnQg am9pbiBvcmRlcnMuIFNvbWUgb2YgdGhlc2UgYXJlIHZlcnkgaW5lZmZpY2llbnQsCistLSBidXQg dGhlIHBsYW5uZXIgY29uc2lkZXJzIHRoZW0gYWxsIHZpYWJsZS4KK0JFR0lOOworU0VUIExPQ0FM IHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGYgZDEgZDIpJzsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQg Sk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIg ZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMiBkMSknOwor RVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBm CisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4g am9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwy ID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihkMSBm IGQyKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBq b19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxF RlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEg QU5EIHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29y ZGVyKGYgKGQxIGQyKSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVD VCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lOIGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0g ZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJF IHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihmIHtkMSBkMn0pJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYu ZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIu aWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFsMiA9IDE7CitDT01NSVQ7CisKKy0tIEZvcmNlIGEg am9pbiBvcmRlciBieSBtZW50aW9uaW5nIGp1c3QgYSBwcmVmaXggb2YgdGhlIGpvaW4gbGlzdC4K K0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQy KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBqb19m YWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorCUxFRlQg Sk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9IDEgQU5E IHZhbDIgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29yZGVy KGQyIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBqb19mYWN0IGYKKwlMRUZUIEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAor CUxFRlQgSk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCA9IGQyLmlkCisJV0hFUkUgdmFsMSA9 IDEgQU5EIHZhbDIgPSAxOworQ09NTUlUOworCistLSBqb19mYWN0IGlzIG5vdCBwYXJ0aXRpb25l ZCwgYnV0IGxldCdzIHRyeSBwcmV0ZW5kaW5nIHRoYXQgaXQgaXMgYW5kCistLSB2ZXJpZnlpbmcg dGhhdCB0aGUgYWR2aWNlIGRvZXMgbm90IGFwcGx5LgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZi9kMSBkMSBkMiknOworRVhQTEFJTiAoQ09T VFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9fZmFjdCBmCisJTEVGVCBKT0lO IGpvX2RpbTEgZDEgT04gZi5kaW0xX2lkID0gZDEuaWQKKwlMRUZUIEpPSU4gam9fZGltMiBkMiBP TiBmLmRpbTJfaWQgPSBkMi5pZAorCVdIRVJFIHZhbDEgPSAxIEFORCB2YWwyID0gMTsKK1NFVCBM T0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnam9pbl9vcmRlcihmL2QxIChkMSBkMikpJzsK K0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2ZhY3Qg ZgorCUxFRlQgSk9JTiBqb19kaW0xIGQxIE9OIGYuZGltMV9pZCA9IGQxLmlkCisJTEVGVCBKT0lO IGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkID0gZDIuaWQKKwlXSEVSRSB2YWwxID0gMSBBTkQgdmFs MiA9IDE7CitDT01NSVQ7CisKKy0tIFRoZSB1bnVzdWFsIGZvcm11bGF0aW9uIG9mIHRoaXMgcXVl cnkgaXMgaW50ZW5kZWQgdG8gcHJldmVudCB0aGUgcXVlcnkKKy0tIHBsYW5uZXIgZnJvbSByZWR1 Y2luZyB0aGUgRlVMTCBKT0lOIHRvIHNvbWUgb3RoZXIgam9pbiB0eXBlLCBzbyB0aGF0IHdlCist LSBjYW4gdGVzdCB3aGF0IGhhcHBlbnMgd2l0aCBhIGpvaW4gdHlwZSB0aGF0IGNhbm5vdCBiZSBy ZW9yZGVyZWQuCitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJP TSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwgSk9JTiBqb19kaW0yIGQy IE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQgPSBmLmRpbTFfaWQgT1Ig Zi5kaW0xX2lkIElTIE5VTEw7CisKKy0tIFdlIHNob3VsZCBub3QgYmUgYWJsZSB0byBmb3JjZSB0 aGUgcGxhbm5lciB0byBqb2luIGYgdG8gZDEgZmlyc3QsIGJlY2F1c2UKKy0tIHRoYXQgaXMgbm90 IGEgdmFsaWQgam9pbiBvcmRlciwgYnV0IHdlIHNob3VsZCBiZSBhYmxlIHRvIGZvcmNlIHRoZSBw bGFubmVyCistLSB0byBtYWtlIGVpdGhlciBkMiBvciBmIHRoZSBkcml2aW5nIHRhYmxlLgorQkVH SU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5fb3JkZXIoZiBkMSBk MiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAqIEZST00gam9f ZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxMIEpPSU4gam9fZGltMiBkMiBPTiBm LmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlkID0gZi5kaW0xX2lkIE9SIGYuZGlt MV9pZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdqb2luX29y ZGVyKGYgZDIgZDEpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBKT0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2Rp bTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQyLmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9p ZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2Ug PSAnam9pbl9vcmRlcihkMiBmIGQxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBqb19kaW0xIGQxCisJSU5ORVIgSk9JTiAoam9fZmFjdCBmIEZVTEwg Sk9JTiBqb19kaW0yIGQyIE9OIGYuZGltMl9pZCArIDAgPSBkMi5pZCArIDApCisJT04gZDEuaWQg PSBmLmRpbTFfaWQgT1IgZi5kaW0xX2lkIElTIE5VTEw7CitDT01NSVQ7CisKKy0tIFR3byBpbmNv bXBhdGlibGUgam9pbiBvcmRlcnMgc2hvdWxkIGNvbmZsaWN0LiBJbiB0aGUgc2Vjb25kIGNhc2Us CistLSB0aGUgY29uZmxpY3QgaXMgaW1wbGljaXQ6IGlmIGQxIGlzIG9uIHRoZSBpbm5lciBzaWRl IG9mIGEgam9pbiBvZiBhbnkKKy0tIHR5cGUsIGl0IGNhbm5vdCBhbHNvIGJlIHRoZSBkcml2aW5n IHRhYmxlLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ2pvaW5f b3JkZXIoZikgam9pbl9vcmRlcihkMSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gam9fZGltMSBkMQorCUlOTkVSIEpPSU4gKGpvX2ZhY3QgZiBGVUxM IEpPSU4gam9fZGltMiBkMiBPTiBmLmRpbTJfaWQgKyAwID0gZDIuaWQgKyAwKQorCU9OIGQxLmlk ID0gZi5kaW0xX2lkIE9SIGYuZGltMV9pZCBJUyBOVUxMOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdqb2luX29yZGVyKGQxKSBoYXNoX2pvaW4oZDEpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGpvX2RpbTEgZDEKKwlJTk5FUiBK T0lOIChqb19mYWN0IGYgRlVMTCBKT0lOIGpvX2RpbTIgZDIgT04gZi5kaW0yX2lkICsgMCA9IGQy LmlkICsgMCkKKwlPTiBkMS5pZCA9IGYuZGltMV9pZCBPUiBmLmRpbTFfaWQgSVMgTlVMTDsKK0NP TU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL2pvaW5fc3RyYXRl Z3kuc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVkZDVjNGMwZTE0Ci0tLSAvZGV2 L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvam9pbl9zdHJhdGVneS5zcWwK QEAgLTAsMCArMSw4NCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJhbGxl bF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgam9pbl9kaW0gKGlkIHNl cmlhbCBwcmltYXJ5IGtleSwgZGltIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9kaW0gKGRpbSkgU0VMRUNUIHJhbmRvbSgpOjp0ZXh0 IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwKSBnOworVkFDVVVNIEFOQUxZWkUgam9pbl9kaW07 CisKK0NSRUFURSBUQUJMRSBqb2luX2ZhY3QgKAorCWlkIGludCBwcmltYXJ5IGtleSwKKwlkaW1f aWQgaW50ZWdlciBub3QgbnVsbCByZWZlcmVuY2VzIGpvaW5fZGltIChpZCkKKykgV0lUSCAoYXV0 b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gam9pbl9mYWN0CisJU0VMRUNU IGcsIChnJTMpKzEgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDApIGc7CitDUkVBVEUgSU5E RVggam9pbl9mYWN0X2RpbV9pZCBPTiBqb2luX2ZhY3QgKGRpbV9pZCk7CitWQUNVVU0gQU5BTFla RSBqb2luX2ZhY3Q7CisKKy0tIFdlIGV4cGVjdCBhIGhhc2ggam9pbiBieSBkZWZhdWx0LgorRVhQ TEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBm IEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisKKy0tIFRyeSBmb3JjaW5nIGVh Y2ggam9pbiBtZXRob2QgaW4gdHVybiB3aXRoIGpvaW5fZGltIGFzIHRoZSBpbm5lciB0YWJsZS4K Ky0tIEFsbCBvZiB0aGVzZSBzaG91bGQgd29yayBleGNlcHQgZm9yIE1FUkdFX0pPSU5fTUFURVJJ QUxJWkU7IHRoYXQgd2lsbAorLS0gZmFpbCwgYmVjYXVzZSB0aGUgcGxhbm5lciBrbm93cyB0aGF0 IGpvaW5fZGltIChpZCkgaXMgdW5pcXVlLCBhbmQgd2lsbAorLS0gcmVmdXNlIHRvIGFkZCBtYXJr L3Jlc3RvcmUgb3ZlcmhlYWQuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnSEFTSF9KT0lOKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJ U0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBk LmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX01BVEVS SUFMSVpFKGQpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdNRVJHRV9KT0lOX1BMQUlOKGQpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdORVNURURfTE9PUF9NQVRFUklBTElaRShkKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBq b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUVNT0laRShkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBM QU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9O IGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVT VEVEX0xPT1BfUExBSU4oZCknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKwlT RUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQu aWQ7CitDT01NSVQ7CisKKy0tIE5vdyB0cnkgZm9yY2luZyBlYWNoIGpvaW4gbWV0aG9kIGluIHR1 cm4gd2l0aCBqb2luX2ZhY3QgYXMgdGhlIGlubmVyCistLSB0YWJsZS4gQWxsIG9mIHRoZXNlIHNo b3VsZCB3b3JrLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hB U0hfSk9JTihmKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAq IEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NF VCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9NQVRFUklBTElaRShm KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9p bl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBw Z19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTUVSR0VfSk9JTl9QTEFJTihmKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBq b2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5h ZHZpY2UgPSAnTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZG LCBQTEFOX0FEVklDRSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0g ZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J05FU1RFRF9MT09QX01FTU9JWkUoZiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKKwlTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBmIEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9p ZCA9IGQuaWQ7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ05FU1RFRF9MT09Q X1BMQUlOKGYpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCisJU0VMRUNUICog RlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworQ09N TUlUOworCistLSBOb24td29ya2luZyBjYXNlcy4gV2UgY2FuJ3QgZm9yY2UgYSBmb3JlaWduIGpv aW4gYmV0d2VlbiB0aGVzZSB0YWJsZXMsCistLSBiZWNhdXNlIHRoZXkgYXJlbid0IGZvcmVpZ24g dGFibGVzLiBXZSBhbHNvIGNhbid0IHVzZSB0d28gZGlmZmVyZW50CistLSBzdHJhdGVnaWVzIG9u IHRoZSBzYW1lIHRhYmxlLCBub3IgY2FuIHdlIHB1dCBib3RoIHRhYmxlcyBvbiB0aGUgaW5uZXIK Ky0tIHNpZGUgb2YgdGhlIHNhbWUgam9pbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2 aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGYgZCkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwg UExBTl9BRFZJQ0UpCisJU0VMRUNUICogRlJPTSBqb2luX2ZhY3QgZiBKT0lOIGpvaW5fZGltIGQg T04gZi5kaW1faWQgPSBkLmlkOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdO RVNURURfTE9PUF9QTEFJTihmKSBORVNURURfTE9PUF9NQVRFUklBTElaRShmKSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9J TiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1BfUExBSU4oZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYs IFBMQU5fQURWSUNFKQorCVNFTEVDVCAqIEZST00gam9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBk IE9OIGYuZGltX2lkID0gZC5pZDsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxh bl9hZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNl L3NxbC9sb2NhbF9jb2xsZWN0b3Iuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi5kYjFlMjM0ODhkNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL2xvY2FsX2NvbGxlY3Rvci5zcWwKQEAgLTAsMCArMSw0NCBAQAorQ1JFQVRFIEVY VEVOU0lPTiBwZ19wbGFuX2FkdmljZTsKK1NFVCBkZWJ1Z19wYXJhbGxlbF9xdWVyeSA9IG9mZjsK KworLS0gVHJ5IGNsZWFyaW5nIGFkdmljZSBiZWZvcmUgd2UndmUgY29sbGVjdGVkIGFueS4KK1NF TEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0tIFNldCBhIHNtYWxs IGFkdmljZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgd2UnbGwgZXhjZWVkIGl0LgorU0VUIHBn X3BsYW5fYWR2aWNlLmxvY2FsX2NvbGxlY3Rpb25fbGltaXQgPSAyOworCistLSBFbmFibGUgdGhl IGNvbGxlY3Rvci4KK1NFVCBwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0b3IgPSBvbjsKKwor LS0gU2V0IHVwIGEgZHVtbXkgdGFibGUuCitDUkVBVEUgVEFCTEUgZHVtbXlfdGFibGUgKGEgaW50 IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Us IHBhcmFsbGVsX3dvcmtlcnMgPSAwKTsKKworLS0gVGVzdCBxdWVyaWVzLgorU0VMRUNUICogRlJP TSBkdW1teV90YWJsZSBhLCBkdW1teV90YWJsZSBiOworU0VMRUNUICogRlJPTSBkdW1teV90YWJs ZTsKKworLS0gU2hvdWxkIHJldHVybiB0aGUgYWR2aWNlIGZyb20gdGhlIHNlY29uZCB0ZXN0IHF1 ZXJ5LgorU0VMRUNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkg T1JERVIgQlkgaWQgREVTQyBMSU1JVCAxOworCistLSBOb3cgdHJ5IGNsZWFyaW5nIGFkdmljZSBh Z2Fpbi4KK1NFTEVDVCBwZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0tIFJh aXNlIHRoZSBjb2xsZWN0aW9uIGxpbWl0IHNvIHRoYXQgdGhlIGNvbGxlY3RvciB1c2VzIG11bHRp cGxlIGNodW5rcy4KK1NFVCBwZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0ID0g MjAwMDsKKworLS0gUHVzaCBhIGJ1bmNoIG9mIHF1ZXJpZXMgdGhyb3VnaCB0aGUgY29sbGVjdG9y LgorRE8gJCQKK0JFR0lOCisJRk9SIHggSU4gMS4uMjAwMCBMT09QCisJCUVYRUNVVEUgJ1NFTEVD VCAqIEZST00gZHVtbXlfdGFibGUnOworCUVORCBMT09QOworRU5ECiskJDsKKworLS0gQ2hlY2sg dGhhdCB0aGUgY29sbGVjdG9yIHdvcmtlZC4KK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9j b2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk7CisKKy0tIEFuZCBjbGVhciBvbmUgbW9yZSB0aW1lLCB0 byB2ZXJpZnkgdGhhdCB0aGlzIGRvZXNuJ3QgY2F1c2UgYSBwcm9ibGVtCistLSBldmVuIHdpdGgg YSBsYXJnZXIgbnVtYmVyIG9mIGVudHJpZXMuCitTRUxFQ1QgcGdfY2xlYXJfY29sbGVjdGVkX2xv Y2FsX2FkdmljZSgpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvcGFy dGl0aW9ud2lzZS5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253aXNl LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzUxNDU2ZGJiYjUK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wYXJ0aXRpb253 aXNlLnNxbApAQCAtMCwwICsxLDk5IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4 X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDA7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndp c2Vfam9pbiA9IHRydWU7CisKK0NSRUFURSBUQUJMRSBwdDEgKGlkIGludGVnZXIgcHJpbWFyeSBr ZXksIGRpbTEgdGV4dCwgdmFsMSBpbnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVB VEUgVEFCTEUgcHQxYSBQQVJUSVRJT04gT0YgcHQxIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEw MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0 MWIgUEFSVElUSU9OIE9GIHB0MSBGT1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDFjIFBBUlRJ VElPTiBPRiBwdDEgRk9SIFZBTFVFUyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRv dmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBwdDEgKGlkLCBkaW0xLCB2YWwx KQorCVNFTEVDVCBnLCAnc29tZSBmaWxsZXIgdGV4dCAnIHx8IGcsIChnICUgMykgKyAxCisJICBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdDE7CisKK0NS RUFURSBUQUJMRSBwdDIgKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGRpbTIgdGV4dCwgdmFsMiBp bnQpCisJUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcHQyYSBQQVJUSVRJ T04gT0YgcHQyIEZPUiBWQUxVRVMgRlJPTSAoMSkgdG8gKDEwMDEpCisJV0lUSCAoYXV0b3ZhY3V1 bV9lbmFibGVkID0gZmFsc2UpOworQ1JFQVRFIFRBQkxFIHB0MmIgUEFSVElUSU9OIE9GIHB0MiBG T1IgVkFMVUVTIEZST00gKDEwMDEpIHRvICgyMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxl ZCA9IGZhbHNlKTsKK0NSRUFURSBUQUJMRSBwdDJjIFBBUlRJVElPTiBPRiBwdDIgRk9SIFZBTFVF UyBGUk9NICgyMDAxKSB0byAoMzAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxz ZSk7CitJTlNFUlQgSU5UTyBwdDIgKGlkLCBkaW0yLCB2YWwyKQorCVNFTEVDVCBnLCAnc29tZSBv dGhlciB0ZXh0ICcgfHwgZywgKGcgJSA1KSArIDEKKwkgIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEs MzAwMCwyKSBnOworVkFDVVVNIEFOQUxZWkUgcHQyOworCitDUkVBVEUgVEFCTEUgcHQzIChpZCBp bnRlZ2VyIHByaW1hcnkga2V5LCBkaW0zIHRleHQsIHZhbDMgaW50KQorCVBBUlRJVElPTiBCWSBS QU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHB0M2EgUEFSVElUSU9OIE9GIHB0MyBGT1IgVkFMVUVT IEZST00gKDEpIHRvICgxMDAxKQorCVdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsK K0NSRUFURSBUQUJMRSBwdDNiIFBBUlRJVElPTiBPRiBwdDMgRk9SIFZBTFVFUyBGUk9NICgxMDAx KSB0byAoMjAwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitDUkVBVEUg VEFCTEUgcHQzYyBQQVJUSVRJT04gT0YgcHQzIEZPUiBWQUxVRVMgRlJPTSAoMjAwMSkgdG8gKDMw MDEpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2UpOworSU5TRVJUIElOVE8gcHQz IChpZCwgZGltMywgdmFsMykKKwlTRUxFQ1QgZywgJ2EgdGhpcmQgcmFuZG9tIHRleHQgJyB8fCBn LCAoZyAlIDcpICsgMQorCSAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwzMDAwLDMpIGc7CitWQUNV VU0gQU5BTFlaRSBwdDM7CisKK0NSRUFURSBUQUJMRSBwdG1pc21hdGNoIChpZCBpbnRlZ2VyIHBy aW1hcnkga2V5LCBkaW1tIHRleHQsIHZhbG0gaW50KQorCVBBUlRJVElPTiBCWSBSQU5HRSAoaWQp OworQ1JFQVRFIFRBQkxFIHB0bWlzbWF0Y2hhIFBBUlRJVElPTiBPRiBwdG1pc21hdGNoCisgICAg Rk9SIFZBTFVFUyBGUk9NICgxKSB0byAoMTUwMSkKKwlXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQg PSBmYWxzZSk7CitDUkVBVEUgVEFCTEUgcHRtaXNtYXRjaGIgUEFSVElUSU9OIE9GIHB0bWlzbWF0 Y2gKKyAgICBGT1IgVkFMVUVTIEZST00gKDE1MDEpIHRvICgzMDAxKQorCVdJVEggKGF1dG92YWN1 dW1fZW5hYmxlZCA9IGZhbHNlKTsKK0lOU0VSVCBJTlRPIHB0bWlzbWF0Y2ggKGlkLCBkaW1tLCB2 YWxtKQorCVNFTEVDVCBnLCAneWV0IGFub3RoZXIgdGV4dCAnIHx8IGcsIChnICUgMikgKyAxCisJ ICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDMwMDApIGc7CitWQUNVVU0gQU5BTFlaRSBwdG1pc21h dGNoOworCitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBw dDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisg ICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKKworLS0gU3VwcHJlc3Mg cGFydGl0aW9ud2lzZSBqb2luLCBvciBkbyBpdCBqdXN0IHBhcnRpYWxseS4KK0JFR0lOOworU0VU IExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdQQVJUSVRJT05XSVNFKHB0MSBwdDIgcHQz KSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEs IHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBB TkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFu X2FkdmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0MikgcHQzKSc7CitFWFBMQUlO IChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdI RVJFIHB0MS5pZCA9IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEg QU5EIHZhbDIgPSAxIEFORCB2YWwzID0gMTsKK0NPTU1JVDsKKworLS0gVGVzdCBjb25mbGljdGlu ZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnUEFS VElUSU9OV0lTRSgocHQxIHB0MikgKHB0MSBwdDMpKSc7CitFWFBMQUlOIChQTEFOX0FEVklDRSwg Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9IHB0 Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAxIEFO RCB2YWwzID0gMTsKK0NPTU1JVDsKKworLS0gQ2FuJ3QgZm9yY2UgYSBwYXJ0aXRpb253aXNlIGpv aW4gd2l0aCBhIG1pc21hdGNoZWQgdGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fk dmljZS5hZHZpY2UgPSAnUEFSVElUSU9OV0lTRSgocHQxIHB0bWlzbWF0Y2gpKSc7CitFWFBMQUlO IChQTEFOX0FEVklDRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0bWlzbWF0Y2gg V0hFUkUgcHQxLmlkID0gcHRtaXNtYXRjaC5pZDsKK0NPTU1JVDsKKworLS0gRm9yY2Ugam9pbiBv cmRlciBmb3IgYSBwYXJ0aWN1bGFyIGJyYW5jaCBvZiB0aGUgcGFydGl0aW9ud2lzZSBqb2luIHdp dGgKKy0tIGFuZCB3aXRob3V0IG1lbnRpb25pbmcgdGhlIHNjaGVtYSBuYW1lLgorQkVHSU47CitT RVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0pPSU5fT1JERVIocHQzL3B1YmxpYy5w dDNhIHB0Mi9wdWJsaWMucHQyYSBwdDEvcHVibGljLnB0MWEpJzsKK0VYUExBSU4gKFBMQU5fQURW SUNFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHB0MSwgcHQyLCBwdDMgV0hFUkUgcHQxLmlk ID0gcHQyLmlkIEFORCBwdDIuaWQgPSBwdDMuaWQKKyAgIEFORCB2YWwxID0gMSBBTkQgdmFsMiA9 IDEgQU5EIHZhbDMgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lO X09SREVSKHB0My9wdDNhIHB0Mi9wdDJhIHB0MS9wdDFhKSc7CitFWFBMQUlOIChQTEFOX0FEVklD RSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwdDEsIHB0MiwgcHQzIFdIRVJFIHB0MS5pZCA9 IHB0Mi5pZCBBTkQgcHQyLmlkID0gcHQzLmlkCisgICBBTkQgdmFsMSA9IDEgQU5EIHZhbDIgPSAx IEFORCB2YWwzID0gMTsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9hZHZp Y2Uvc3FsL3ByZXBhcmVkLnNxbCBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3ByZXBhcmVk LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2VjMzBlZWRlZTUK LS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9wcmVwYXJlZC5z cWwKQEAgLTAsMCArMSwzNyBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworU0VUIG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworCitDUkVBVEUgVEFCTEUgcHRhYiAoaWQgaW50 ZWdlciwgdmFsIHRleHQpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZCA9IGZhbHNlKTsKKworU0VU IHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IGZhbHNlOworCist LSBOb3QgcHJlcGFyZWQsIHNvIGFkdmljZSBzaG91bGQgYmUgZ2VuZXJhdGVkLgorRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgCitTRUxFQ1QgKiBGUk9NIHB0YWI7CisKKy0tIFByZXBh cmVkLCBzbyBhZHZpY2Ugc2hvdWxkIG5vdCBiZSBnZW5lcmF0ZWQuCitQUkVQQVJFIHB0MSBBUyBT RUxFQ1QgKiBGUk9NIHB0YWI7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBFWEVD VVRFIHB0MTsKKworU0VUIHBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWls cyA9IHRydWU7CisKKy0tIFByZXBhcmVkLCBidXQgYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxz ID0gdHJ1ZSwgc28gc2hvdWxkIHNob3cgYWR2aWNlLgorUFJFUEFSRSBwdDIgQVMgU0VMRUNUICog RlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDI7 CisKKy0tIE5vdCBwcmVwYXJlZCwgc28gZmVlZGJhY2sgc2hvdWxkIGJlIGdlbmVyYXRlZC4KK1NF VCBwZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSBmYWxzZTsKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4ocHRhYiknOworRVhQTEFJTiAoQ09T VFMgT0ZGKSAKK1NFTEVDVCAqIEZST00gcHRhYjsKKworLS0gUHJlcGFyZWQsIHNvIGFkdmljZSBz aG91bGQgbm90IGJlIGdlbmVyYXRlZC4KK1BSRVBBUkUgcHQzIEFTIFNFTEVDVCAqIEZST00gcHRh YjsKK0VYUExBSU4gKENPU1RTIE9GRikgRVhFQ1VURSBwdDE7CisKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHMgPSB0cnVlOworCistLSBQcmVwYXJlZCwgYnV0 IGFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA9IHRydWUsIHNvIHNob3VsZCBzaG93IGZlZWRi YWNrLgorUFJFUEFSRSBwdDQgQVMgU0VMRUNUICogRlJPTSBwdGFiOworRVhQTEFJTiAoQ09TVFMg T0ZGLCBQTEFOX0FEVklDRSkgRVhFQ1VURSBwdDI7CisKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdf cGxhbl9hZHZpY2Uvc3FsL3NjYW4uc3FsIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nh bi5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI1NDE2YTc1ZjQ2 Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2Nhbi5zcWwK QEAgLTAsMCArMSwxOTUgQEAKK0xPQUQgJ3BnX3BsYW5fYWR2aWNlJzsKK1NFVCBtYXhfcGFyYWxs ZWxfd29ya2Vyc19wZXJfZ2F0aGVyID0gMDsKK1NFVCBzZXFfcGFnZV9jb3N0ID0gMC4xOworU0VU IHJhbmRvbV9wYWdlX2Nvc3QgPSAwLjE7CitTRVQgY3B1X3R1cGxlX2Nvc3QgPSAwOworU0VUIGNw dV9pbmRleF90dXBsZV9jb3N0ID0gMDsKKworQ1JFQVRFIFRBQkxFIHNjYW5fdGFibGUgKGEgaW50 IHByaW1hcnkga2V5LCBiIHRleHQpCisJV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0gZmFsc2Up OworSU5TRVJUIElOVE8gc2Nhbl90YWJsZQorCVNFTEVDVCBnLCAnc29tZSB0ZXh0ICcgfHwgZyBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMDApIGc7CitDUkVBVEUgSU5ERVggc2Nhbl90YWJs ZV9iIE9OIHNjYW5fdGFibGUgVVNJTkcgYnJpbiAoYik7CitWQUNVVU0gQU5BTFlaRSBzY2FuX3Rh YmxlOworCistLSBTZXF1ZW50aWFsIHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsKKworLS0gSW5kZXggc2NhbgorRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworCistLSBJbmRleC1vbmx5IHNjYW4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCBhIEZST00gc2Nhbl90YWJsZSBXSEVSRSBhID0gMTsKKworLS0gQml0bWFwIGhl YXAgc2NhbgorRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlCisJV0hFUkUgYiA+ICdzb21lIHRleHQgOCc7CisKKy0tIFRJRCBzY2FuCitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hF UkUgY3RpZCA9ICcoMCwxKSc7CisKKy0tIFRJRCByYW5nZSBzY2FuCitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4g JygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7CisKKy0tIFRyeSBmb3JjaW5nIGVhY2ggb2Ygb3Vy IHRlc3QgcXVlcmllcyB0byB1c2UgdGhlIHNjYW4gdHlwZSB0aGV5CistLSB3YW50ZWQgdG8gdXNl IGFueXdheS4gVGhpcyBzaG91bGQgc3VjY2VlZC4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQgTE9DQUwgcGdf cGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3Br ZXkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nh bl90YWJsZSBXSEVSRSBhID0gMTsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn SU5ERVhfT05MWV9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0JJVE1BUF9IRUFQX1NDQU4o c2Nhbl90YWJsZSBzY2FuX3RhYmxlX2IpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZQorCVdIRVJFIGIgPiAnc29tZSB0ZXh0IDgnOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgY3RpZCA9ICcoMCwxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3Rp ZCA8ICcoMiwxKSc7CitDT01NSVQ7CisKKy0tIFRyeSB0byBmb3JjZSBhIGZ1bGwgc2NhbiBvZiB0 aGUgdGFibGUgdG8gdXNlIHNvbWUgb3RoZXIgc2NhbiB0eXBlLiBBbGwKKy0tIG9mIHRoZXNlIHdp bGwgZmFpbC4gQW4gaW5kZXggc2NhbiBvciBiaXRtYXAgaGVhcCBzY2FuIGNvdWxkIHBvdGVudGlh bGx5CistLSBnZW5lcmF0ZSB0aGUgY29ycmVjdCBhbnN3ZXIsIGJ1dCB0aGUgcGxhbm5lciBkb2Vz IG5vdCBldmVuIGNvbnNpZGVyIHRoZXNlCistLSBwb3NzaWJpbGl0aWVzIGR1ZSB0byB0aGUgbGFj ayBvZiBhIFdIRVJFIGNsYXVzZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VM RUNUICogRlJPTSBzY2FuX3RhYmxlOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdCSVRNQVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGU7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1RJRF9TQ0FOKHNjYW5fdGFibGUpJzsKK0VY UExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90YWJsZTsK K0NPTU1JVDsKKworLS0gVHJ5IGFnYWluIHRvIGZvcmNlIGluZGV4IHVzZS4gVGhpcyBzaG91bGQg bm93IHN1Y2NlZWQgZm9yIHRoZSBJTkRFWF9TQ0FOCistLSBhbmQgQklUTUFQX0hFQVBfU0NBTiwg YnV0IHRoZSBJTkRFWF9PTkxZX1NDQU4gY2FuJ3QgYmUgZm9yY2VkIGJlY2F1c2UgdGhlCistLSBx dWVyeSBmZXRjaGVzIGNvbHVtbnMgbm90IGluY2x1ZGVkIGluIHRoZSBpbmRleC4KK0JFR0lOOwor U0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUg c2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSkn OworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3Rh YmxlIFdIRVJFIGEgPiAwOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdCSVRN QVBfSEVBUF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA+IDA7 CitDT01NSVQ7CisKKy0tIFdlIGNhbiBmb3JjZSBhIHByaW1hcnkga2V5IGxvb2t1cCB0byB1c2Ug YSBzZXF1ZW50aWFsIHNjYW4sIGJ1dCB3ZQorLS0gY2FuJ3QgZm9yY2UgaXQgdG8gdXNlIGFuIGlu ZGV4LW9ubHkgc2NhbiAoZHVlIHRvIHRoZSBjb2x1bW4gbGlzdCkKKy0tIG9yIGEgVElEIHNjYW4g KGR1ZSB0byB0aGUgYWJzZW5jZSBvZiBhIFRJRCBxdWFsKS4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX09OTFlfU0NBTihz Y2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FE VklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdUSURfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9 IDE7CitDT01NSVQ7CisKKy0tIFdlIGNhbiBmb3JjaWJseSBkb3duZ3JhZGUgYW4gaW5kZXgtb25s eSBzY2FuIHRvIGFuIGluZGV4IHNjYW4sIGJ1dCB3ZSBjYW4ndAorLS0gZm9yY2UgdGhlIHVzZSBv ZiBhbiBpbmRleCB0aGF0IHRoZSBwbGFubmVyIHRoaW5rcyBpcyBpbmFwcGxpY2FibGUuCitCRUdJ TjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3Rh YmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkg U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5f YWR2aWNlLmFkdmljZSA9ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgcHVibGljLnNjYW5fdGFibGVf cGtleSknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBz Y2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9 ICdJTkRFWF9TQ0FOKHNjYW5fdGFibGUgc2Nhbl90YWJsZV9iKSc7CitFWFBMQUlOIChDT1NUUyBP RkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitD T01NSVQ7CisKKy0tIFdlIGNhbiBmb3JjZSB0aGUgdXNlIG9mIGEgc2VxdWVudGlhbCBzY2FuIGlu IHBsYWNlIG9mIGEgYml0bWFwIGhlYXAgc2NhbiwKKy0tIGJ1dCBhIHBsYWluIGluZGV4IHNjYW4g b24gYSBCUklOIGluZGV4IGlzIG5vdCBwb3NzaWJsZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUKKwlXSEVSRSBiID4g J3NvbWUgdGV4dCA4JzsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhf U0NBTihzY2FuX3RhYmxlIHNjYW5fdGFibGVfYiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFO X0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworQ09NTUlUOwor CistLSBXZSBjYW4gZm9yY2UgdGhlIHVzZSBvZiBhIHNlcXVlbnRpYWwgc2NhbiByYXRoZXIgdGhh biBhIFRJRCBzY2FuIG9yCistLSBUSUQgcmFuZ2Ugc2Nhbi4KK0JFR0lOOworU0VUIExPQ0FMIHBn X3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzY2FuX3RhYmxlKSc7CitFWFBMQUlOIChD T1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgY3Rp ZCA9ICcoMCwxKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgKiBG Uk9NIHNjYW5fdGFibGUKKwlXSEVSRSBjdGlkID4gJygxLDEpJyBBTkQgY3RpZCA8ICcoMiwxKSc7 CitDT01NSVQ7CisKKy0tIFRlc3QgbW9yZSBjb21wbGV4IHNjZW5hcmlvcyB3aXRoIGluZGV4IHNj YW5zLgorQkVHSU47CistLSBTaG91bGQgc3RpbGwgd29yayBpZiB3ZSBtZW50aW9uIHRoZSBzY2hl bWEuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4oc2Nhbl90 YWJsZSBwdWJsaWMuc2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CistLSBCdXQgbm90 IGlmIHdlIG1lbnRpb24gdGhlIHdyb25nIHNjaGVtYS4KK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxlIGNpbGJ1cC5zY2FuX3RhYmxlX3BrZXkp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpIFNFTEVDVCAqIEZST00gc2Nhbl90 YWJsZSBXSEVSRSBhID0gMTsKKy0tIEl0J3MgT0sgdG8gcmVwZWF0IHRoZSBzYW1lIGFkdmljZS4K K1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSU5ERVhfU0NBTihzY2FuX3RhYmxl IHNjYW5fdGFibGVfcGtleSBzY2FuX3RhYmxlIHNjYW5fdGFibGVfcGtleSknOworRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkgU0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEg PSAxOworLS0gQnV0IGl0IGRvZXNuJ3Qgd29yayBpZiB0aGUgaW5kZXggdGFyZ2V0IGlzIGV2ZW4g bm90aW9uYWxseSBkaWZmZXJlbnQuCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0g J0lOREVYX1NDQU4oc2Nhbl90YWJsZSBzY2FuX3RhYmxlX3BrZXkgc2Nhbl90YWJsZSBwdWJsaWMu c2Nhbl90YWJsZV9wa2V5KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisKKy0tIFRlc3QgYXNz b3J0ZWQgaW5jb3JyZWN0IGFkdmljZS4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTihub3RoaW5nKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVYX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X1NDQU4oc2Nhbl90YWJsZSBib2d1cyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkgU0VMRUNUIGEgRlJPTSBzY2FuX3RhYmxlIFdIRVJFIGEgPSAxOworU0VUIExPQ0FMIHBnX3Bs YW5fYWR2aWNlLmFkdmljZSA9ICdJTkRFWF9PTkxZX1NDQU4obm90aGluZyB3aGF0c29ldmVyKSc7 CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFi bGUgV0hFUkUgYSA9IDE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0lOREVY X09OTFlfU0NBTihzY2FuX3RhYmxlIGJvZ3VzKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5f QURWSUNFKSBTRUxFQ1QgYSBGUk9NIHNjYW5fdGFibGUgV0hFUkUgYSA9IDE7CitDT01NSVQ7CisK Ky0tIFRlc3Qgb3VyIGFiaWxpdHkgdG8gcmVmZXIgdG8gbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRo ZSBzYW1lIGFsaWFzLgorQkVHSU47CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQor U0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2VyaWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFi bGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5h OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTihzKSc7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoZ2VuZXJhdGVfc2Vy aWVzKDEsMTApIGcgTEVGVCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hKSB4CisgICAgTEVG VCBKT0lOIHNjYW5fdGFibGUgcyBPTiBnID0gcy5hOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdTRVFfU0NBTihzIzIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIChnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgZyBMRUZUIEpPSU4gc2Nh bl90YWJsZSBzIE9OIGcgPSBzLmEpIHgKKyAgICBMRUZUIEpPSU4gc2Nhbl90YWJsZSBzIE9OIGcg PSBzLmE7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMpIFNF UV9TQ0FOKHMjMiknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKK1NFTEVDVCAq IEZST00gKGdlbmVyYXRlX3NlcmllcygxLDEwKSBnIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04g ZyA9IHMuYSkgeAorICAgIExFRlQgSk9JTiBzY2FuX3RhYmxlIHMgT04gZyA9IHMuYTsKK0NPTU1J VDsKKworLS0gVGVzdCBvdXIgYWJpbGl0eSB0byByZWZlciB0byBzY2FucyB3aXRoaW4gYSBzdWJx dWVyeS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChT RUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9N IHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CitCRUdJTjsKKy0tIFNob3VsZCBu b3QgbWF0Y2guCitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKHMp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxF Q1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCkgeDsKK0VYUExBSU4g KENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNj YW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7CistLSBTaG91bGQgbWF0Y2ggZmlyc3Qg cXVlcnkgb25seS4KK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4o c0B4KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAo U0VMRUNUICogRlJPTSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApIHg7CitFWFBM QUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSAoU0VMRUNUICogRlJP TSBzY2FuX3RhYmxlIHMgV0hFUkUgYSA9IDEgT0ZGU0VUIDApOworLS0gU2hvdWxkIG1hdGNoIHNl Y29uZCBxdWVyeSBvbmx5LgorU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFf U0NBTihzQHVubmFtZWRfc3VicXVlcnkpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJ Q0UpCitTRUxFQ1QgKiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0g MSBPRkZTRVQgMCkgeDsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIChTRUxFQ1QgKiBGUk9NIHNjYW5fdGFibGUgcyBXSEVSRSBhID0gMSBPRkZTRVQgMCk7 CitDT01NSVQ7CmRpZmYgLS1naXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zZW1pam9p bi5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zZW1pam9pbi5zcWwKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVhNGFlNTJkMWQ5Ci0tLSAvZGV2L251bGwK KysrIGIvY29udHJpYi9wZ19wbGFuX2FkdmljZS9zcWwvc2VtaWpvaW4uc3FsCkBAIC0wLDAgKzEs MTE4IEBACitMT0FEICdwZ19wbGFuX2FkdmljZSc7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNf cGVyX2dhdGhlciA9IDA7CisKK0NSRUFURSBUQUJMRSBzal93aWRlICgKKwlpZCBpbnRlZ2VyIHBy aW1hcnkga2V5LAorCXZhbDEgaW50ZWdlciwKKwlwYWRkaW5nIHRleHQgc3RvcmFnZSBwbGFpbgor KSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQgPSBmYWxzZSk7CitJTlNFUlQgSU5UTyBzal93aWRl CisJU0VMRUNUIGcsIGclMTArMSwgcmVwZWF0KCcgJywgMzAwKSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxLCAxMDAwKSBnOworQ1JFQVRFIElOREVYIE9OIHNqX3dpZGUgKHZhbDEpOworVkFDVVVNIEFO QUxZWkUgc2pfd2lkZTsKKworQ1JFQVRFIFRBQkxFIHNqX25hcnJvdyAoCisJaWQgaW50ZWdlciBw cmltYXJ5IGtleSwKKwl2YWwxIGludGVnZXIKKykgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkID0g ZmFsc2UpOworSU5TRVJUIElOVE8gc2pfbmFycm93CisJU0VMRUNUIGcsIGclMTArMSBGUk9NIGdl bmVyYXRlX3NlcmllcygxLCAxMDAwKSBnOworQ1JFQVRFIElOREVYIE9OIHNqX25hcnJvdyAodmFs MSk7CitWQUNVVU0gQU5BTFlaRSBzal9uYXJyb3c7CisKKy0tIFdlIGV4cGVjdCB0aGlzIHRvIG1h a2UgdGhlIFZBTFVFUyBsaXN0IHVuaXF1ZSBhbmQgdXNlIGluZGV4IGxvb2t1cHMgdG8KKy0tIGZp bmQgdGhlIHJvd3MgaW4gc2pfd2lkZSwgc28gYXMgdG8gYXZvaWQgYSBmdWxsIHNjYW4gb2Ygc2pf d2lkZS4KK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNq X3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAz KSwgKDQsIDQpLCAoNSwgNSkpOworCistLSBJZiB3ZSBhc2sgZm9yIGEgdW5pcXVlIHNlbWlqb2lu LCB3ZSBzaG91bGQgZ2V0IHRoZSBzYW1lIHBsYW4gYXMgd2l0aAorLS0gbm8gYWR2aWNlLiBJZiB3 ZSBhc2sgZm9yIGEgbm9uLXVuaXF1ZSBzZW1pam9pbiwgd2Ugc2hvdWxkIHNlZSBhIFNlbWkKKy0t IEpvaW4gb3BlcmF0aW9uIGluIHRoZSBwbGFuIHRyZWUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5fdW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExB SU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVS RSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAo NSwgNSkpOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25f dW5pcXVlKCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitT RUxFQ1QgKiBGUk9NIHNqX3dpZGUKKwlXSEVSRSAoaWQsIHZhbDEpIElOIChWQUxVRVMgKDEsIDEp LCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkpOworQ09NTUlUOworCistLSBCZWNhdXNl IHRoaXMgdGFibGUgaXMgbmFycm93ZXIgdGhhbiB0aGUgcHJldmlvdXMgb25lLCBhIHNlcXVlbnRp YWwgc2NhbgorLS0gaXMgbGVzcyBleHBlbnNpdmUsIGFuZCB3ZSBjaG9vc2UgYSBzdHJhaWdodGZv cndhcmQgU2VtaSBKb2luIHBsYW4gYnkKKy0tIGRlZmF1bHQuIChOb3RlIHRoYXQgdGhpcyBpcyBh bHNvIHZlcnkgc2Vuc2l0aXZlIHRvIHRoZSBsZW5ndGggb2YgdGhlIElOCistLSBsaXN0LCB3aGlj aCBhZmZlY3RzIGhvdyBtYW55IGluZGV4IGxvb2t1cHMgdGhlIGFsdGVybmF0aXZlIHBsYW4gd2ls bCBuZWVkLikKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IHNqX25hcnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgyLCAyKSwg KDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CisKKy0tIEhlcmUsIHdlIGV4cGVjdCBhZHZpc2luZyBh IHVuaXF1ZSBzZW1pam9pbiB0byBzd2l0aCB0byB0aGUgc2FtZSBwbGFuIHRoYXQKKy0tIHdlIGdv dCB3aXRoIHNqX3dpZGUsIGFuZCBhZHZpc2luZyBhIG5vbi11bmlxdWUgc2VtaWpvaW4gc2hvdWxk IG5vdCBjaGFuZ2UKKy0tIHRoZSBwbGFuLgorQkVHSU47CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZp Y2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZSgiKlZBTFVFUyoiKSc7CitFWFBMQUlOIChDT1NU UyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBzal9uYXJyb3cKKwlXSEVSRSAoaWQs IHZhbDEpIElOIChWQUxVRVMgKDEsIDEpLCAoMiwgMiksICgzLCAzKSwgKDQsIDQpLCAoNSwgNSkp OworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVl KCIqVkFMVUVTKiIpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1Qg KiBGUk9NIHNqX25hcnJvdworCVdIRVJFIChpZCwgdmFsMSkgSU4gKFZBTFVFUyAoMSwgMSksICgy LCAyKSwgKDMsIDMpLCAoNCwgNCksICg1LCA1KSk7CitDT01NSVQ7CisKKy0tIEluIHRoZSBhYm92 ZSBleGFtcGxlLCB3ZSBtYWRlIHRoZSBvdXRlciBzaWRlIG9mIHRoZSBqb2luIHVuaXF1ZSwgYnV0 IGhlcmUsCistLSB3ZSBzaG91bGQgbWFrZSB0aGUgaW5uZXIgc2lkZSB1bmlxdWUuCitFWFBMQUlO IChDT1NUUyBPRkYsIFBMQU5fQURWSUNFKQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MSwxMDAwKSBnCisgICAgV0hFUkUgZyBpbiAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOwor CistLSBXZSBzaG91bGQgYmUgYWJsZSB0byBmb3JjZSBhIHBsYW4gd2l0aCBvciB3aXRob3V0IHRo ZSBtYWtlLXVuaXF1ZSBzdHJhdGVneSwKKy0tIHdpdGggZWl0aGVyIHNpZGUgYXMgdGhlIGRyaXZp bmcgdGFibGUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2Vt aWpvaW5fdW5pcXVlKHNqX25hcnJvdyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcg aW4gKHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKK1NFVCBMT0NBTCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9uYXJyb3cpJzsKK0VYUExBSU4gKENP U1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEw MDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNqX25hcnJvdyk7CitTRVQg TE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3NlbWlqb2luX3VuaXF1ZShzal9uYXJyb3cp IGpvaW5fb3JkZXIoc2pfbmFycm93KSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIFBMQU5fQURWSUNF KQorU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBnCisgICAgV0hFUkUgZyBp biAoc2VsZWN0IHZhbDEgZnJvbSBzal9uYXJyb3cpOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICdzZW1pam9pbl9ub25fdW5pcXVlKHNqX25hcnJvdykgam9pbl9vcmRlcihzal9u YXJyb3cpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9N IGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBm cm9tIHNqX25hcnJvdyk7CitDT01NSVQ7CisKKy0tIEhvd2V2ZXIsIG1lbnRpb25pbmcgdGhlIHdy b25nIHNpZGUgb2YgdGhlIGpvaW4gc2hvdWxkIHJlc3VsdCBpbiBhbiBhZHZpY2UKKy0tIGZhaWx1 cmUuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnc2VtaWpvaW5f dW5pcXVlKGcpJzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFs MSBmcm9tIHNqX25hcnJvdyk7CitTRVQgTE9DQUwgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ3Nl bWlqb2luX25vbl91bmlxdWUoZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklDRSkK K1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZworICAgIFdIRVJFIGcgaW4g KHNlbGVjdCB2YWwxIGZyb20gc2pfbmFycm93KTsKK0NPTU1JVDsKKworLS0gVGVzdCBjb25mbGlj dGluZyBhZHZpY2UuCitCRUdJTjsKK1NFVCBMT0NBTCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn c2VtaWpvaW5fdW5pcXVlKHNqX25hcnJvdykgc2VtaWpvaW5fbm9uX3VuaXF1ZShzal9uYXJyb3cp JzsKK0VYUExBSU4gKENPU1RTIE9GRiwgUExBTl9BRFZJQ0UpCitTRUxFQ1QgKiBGUk9NIGdlbmVy YXRlX3NlcmllcygxLDEwMDApIGcKKyAgICBXSEVSRSBnIGluIChzZWxlY3QgdmFsMSBmcm9tIHNq X25hcnJvdyk7CitDT01NSVQ7CisKKy0tIFRyeSBhcHBseWluZyBTRU1JSk9JTl9VTklRVUUoKSB0 byBhIG5vbi1zZW1pam9pbi4KK0JFR0lOOworU0VUIExPQ0FMIHBnX3BsYW5fYWR2aWNlLmFkdmlj ZSA9ICdzZW1pam9pbl91bmlxdWUoZyknOworRVhQTEFJTiAoQ09TVFMgT0ZGLCBQTEFOX0FEVklD RSkKK1NFTEVDVCAqIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgZywgc2pfbmFycm93IHMg V0hFUkUgZyA9IHMudmFsMTsKK0NPTU1JVDsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcGxhbl9h ZHZpY2Uvc3FsL3N5bnRheC5zcWwgYi9jb250cmliL3BnX3BsYW5fYWR2aWNlL3NxbC9zeW50YXgu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NmE1ZDU0ZTJiNQot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGdfcGxhbl9hZHZpY2Uvc3FsL3N5bnRheC5zcWwK QEAgLTAsMCArMSw2OCBAQAorTE9BRCAncGdfcGxhbl9hZHZpY2UnOworCistLSBBbiBlbXB0eSBz dHJpbmcgaXMgYWxsb3dlZC4gRW1wdHkgdGFyZ2V0IGxpc3RzIGFyZSBhbGxvd2VkIGZvciBtb3N0 IGFkdmljZQorLS0gdGFncywgYnV0IG5vdCBmb3IgSk9JTl9PUkRFUi4gIlN1cHBsaWVkIFBsYW4g QWR2aWNlIiBzaG91bGQgYmUgb21pdHRlZCBpbgorLS0gdGV4dCBmb3JtYXQgd2hlbiB0aGVyZSBp cyBubyBhY3R1YWwgYWR2aWNlLCBidXQgbm90IGluIG5vbi10ZXh0IGZvcm1hdC4KK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCknOworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnTkVTVEVEX0xPT1Bf UExBSU4oKSc7CitFWFBMQUlOIChDT1NUUyBPRkYsIEZPUk1BVCBKU09OKSBTRUxFQ1QgMTsKK1NF VCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnSk9JTl9PUkRFUigpJzsKKworLS0gVGVzdCBhc3Nv cnRlZCB2YXJpYXRpb25zIGluIGNhcGl0YWxpemF0aW9uLCB3aGl0ZXNwYWNlLCBhbmQgd2hpY2gg cGFydHMgb2YKKy0tIHRoZSByZWxhdGlvbiBpZGVudGlmaWVyIGFyZSBpbmNsdWRlZC4gVGhlc2Ug c2hvdWxkIGFsbCB3b3JrLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTih4 KSc7CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAxOworU0VUIHBnX3BsYW5fYWR2aWNlLmFk dmljZSA9ICdzZXFfc2Nhbih4QHkpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitT RVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9zY2FuKHgjMiknOworRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4g KHgveSknOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnICBTRVFfU0NBTiAoIHggLyB5IC4geiApICAnOworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oIngi IzIvInkiLiJ6IkAidCIpJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CisKKy0tIFN5 bnRheCBlcnJvcnMuCitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUVVFTlRJQUxfU0NB Tih4KSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOJzsKK1NFVCBwZ19w bGFuX2FkdmljZS5hZHZpY2UgPSAnU0VRX1NDQU4oJzsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZp Y2UgPSAnU0VRX1NDQU4oIic7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FO KCIiKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCJhIic7CitTRVQg cGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ1NFUV9TQ0FOKCMnOworU0VUIHBnX3BsYW5fYWR2aWNl LmFkdmljZSA9ICcoKSc7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJzEyMyc7CisKKy0t IFRhZ3MgbGlrZSBTRVFfU0NBTiBhbmQgTk9fR0FUSEVSIGRvbid0IGFsbG93IHN1Ymxpc3RzIGF0 IGFsbDsgb3RoZXIgdGFncywKKy0tIGV4Y2VwdCBmb3IgSk9JTl9PUkRFUiwgYWxsb3cgYXQgbW9z dCBvbmUgbGV2ZWwgb2Ygc3VibGlzdC4gSGVuY2UsIHRoZXNlCistLSBleGFtcGxlcyBzaG91bGQg ZXJyb3Igb3V0LgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdTRVFfU0NBTigoeCkpJzsK K1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnR0FUSEVSKCgoeCkpKSc7CisKKy0tIExlZ2Fs IGNvbW1lbnRzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICcvKiovJzsKK0VYUExBSU4g KENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxhbl9hZHZpY2UuYWR2aWNlID0gJ0hBU0hf Sk9JTihfKS8qKiovJzsKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUIDE7CitTRVQgcGdfcGxh bl9hZHZpY2UuYWR2aWNlID0gJy8qIGNvbW1lbnQgKi8gSEFTSF9KT0lOKC8qeCoveSknOworRVhQ TEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAn LyogY29tbWVudCAqLyBIQVNIX0pPSU4oeS8vKngqL3opJzsKK0VYUExBSU4gKENPU1RTIE9GRikg U0VMRUNUIDE7CisKKy0tIFVudGVybWluYXRlZCBjb21tZW50cy4KK1NFVCBwZ19wbGFuX2Fkdmlj ZS5hZHZpY2UgPSAnLyonOworU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVS KCJmT08iKSAvKiBvb3BzJzsKKworLS0gTmVzdGVkIGNvbW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVk LCBzbyB0aGUgZmlyc3Qgb2YgdGhlc2UgaXMgbGVnYWwgYW5kCistLSB0aGUgc2Vjb25kIGlzIG5v dC4KK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKi8nOworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgMTsKK1NFVCBwZ19wbGFuX2FkdmljZS5hZHZpY2UgPSAnLyovKiBzdHVmZiAq LyovJzsKKworLS0gRm9yZWlnbiBqb2luIHJlcXVpcmVzIG11bHRpcGxlIHJlbGF0aW9uIGlkZW50 aWZpZXJzLgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oYSknOwor U0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdGT1JFSUdOX0pPSU4oKGEpKSc7CmRpZmYgLS1n aXQgYS9jb250cmliL3BnX3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwgYi9jb250cmliL3Bn X3BsYW5fYWR2aWNlL3QvMDAxX3JlZ3Jlc3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjY3NTk1Y2RkZjc1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZ19w bGFuX2FkdmljZS90LzAwMV9yZWdyZXNzLnBsCkBAIC0wLDAgKzEsMTQ4IEBACisjIENvcHlyaWdo dCAoYykgMjAyMS0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisj IFJ1biB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzIHVuZGVyIHBnX3BsYW5fYWR2aWNlIHRvIGNo ZWNrIGZvciBwcm9ibGVtcy4KK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3MgRkFUQUwgPT4gJ2Fs bCc7CisKK3VzZSBDd2QgICAgICAgICAgICBxdyhhYnNfcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5h bWUgcXcoZGlybmFtZSk7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBv c3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgSW5pdGlhbGl6ZSB0 aGUgcHJpbWFyeSBub2RlCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygnbWFpbicpOworJG5vZGUtPmluaXQoKTsKKworIyBTZXQgdXAgb3VyIGRlc2lyZWQgY29uZmln dXJhdGlvbi4KKyMKKyMgV2UgcnVuIHdpdGggcGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rp b25fbGltaXQgc2V0IHRvIGVuc3VyZSB0aGF0IHRoZQorIyBwbGFuIHRyZWUgd2Fsa2VyIGNvZGUg cnVucyBhZ2FpbnN0IGV2ZXJ5IHF1ZXJ5IGluIHRoZSByZWdyZXNzaW9uIHRlc3RzLiBJZgorIyB3 ZSdyZSB1bmFibGUgdG8gcHJvcGVybHkgYW5hbHl6ZSBhbnkgb2YgdGhvc2UgcGxhbiB0cmVlcywg dGhpcyB0ZXN0IHNob3VsZCBmYWlsLgorIworIyBXZSBzZXQgcGdfcGxhbl9hZHZpY2UuYWR2aWNl IHRvIGFuIGFkdmljZSBzdHJpbmcgdGhhdCB3aWxsIGNhdXNlIHRoZSBhZHZpY2UKKyMgdHJvdmUg dG8gYmUgcG9wdWxhdGVkIHdpdGggYSBmZXcgZW50cmllcyBvZiB2YXJpb3VzIHNvcnRzLCBidXQg d2hpY2ggd2UgZG8KKyMgbm90IGV4cGVjdCB0byBtYXRjaCBhbnl0aGluZyBpbiB0aGUgcmVncmVz c2lvbiB0ZXN0IHF1ZXJpZXMuIFRoaXMgd2F5LCB0aGUKKyMgcGxhbm5lciBob29rcyB3aWxsIGJl IGNhbGxlZCwgaW1wcm92aW5nIGNvZGUgY292ZXJhZ2UsIGJ1dCBubyBwbGFucyBzaG91bGQKKyMg YWN0dWFsbHkgY2hhbmdlLgorIworIyBwZ19wbGFuX2FkdmljZS5hbHdheXNfZXhwbGFpbl9zdXBw bGllZF9hZHZpY2U9ZmFsc2UgaXMgbmVlZGVkIHRvIGF2b2lkIGJyZWFraW5nCisjIHJlZ3Jlc3Np b24gdGVzdCBxdWVyaWVzIHRoYXQgdXNlIEVYUExBSU4uIEluIHRoZSByZWFsIHdvcmxkLCBpdCBz ZWVtcyBsaWtlCisjIHVzZXJzIHdpbGwgd2FudCBFWFBMQUlOIG91dHB1dCB0byBzaG93IHN1cHBs aWVkIGFkdmljZSBzbyB0aGF0IGl0J3MgY2xlYXIKKyMgd2hldGhlciBub3JtYWwgcGxhbm5lciBi ZWhhdmlvciBoYXMgYmVlbiBhbHRlcmVkLCBidXQgaGVyZSB0aGF0J3MgdW5kZXNpcmFibGUuCisk bm9kZS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsIDw8RU9NKTsKK3BnX3BsYW5fYWR2 aWNlLnNoYXJlZF9jb2xsZWN0aW9uX2xpbWl0PTEwMDAwMDAKK3BnX3BsYW5fYWR2aWNlLnNoYXJl ZF9jb2xsZWN0b3I9dHJ1ZQorc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzPXBnX3BsYW5fYWR2aWNl CitwZ19wbGFuX2FkdmljZS5hZHZpY2U9J1NFUV9TQ0FOKGVudGlyZWx5X2ZpY3RpdGlvdXMpIEhB U0hfSk9JTih0b3RhbF9mYWJyaWNhdGlvbikgR0FUSEVSKGNvbXBsZXRlbHlfaW1hZ2luYXJ5KScK K3BnX3BsYW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZT1mYWxzZQorRU9N Ciskbm9kZS0+c3RhcnQ7CisKK215ICRzcmNkaXIgPSBhYnNfcGF0aCgiLi4vLi4iKTsKKworIyAt LWRscGF0aCBpcyBuZWVkZWQgdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBsb2NhdGlvbiBvZiByZWdy ZXNzLnNvCisjIGFuZCBhbnkgbGlicmFyaWVzIHRoZSByZWdyZXNzaW9uIHRlc3RzIHJlcXVpcmUu CitteSAkZGxwYXRoID0gZGlybmFtZSgkRU5We1JFR1JFU1NfU0hMSUJ9KTsKKworIyAtLW91dHB1 dGRpciBwb2ludHMgdG8gdGhlIHBhdGggd2hlcmUgdG8gcGxhY2UgdGhlIG91dHB1dCBmaWxlcy4K K215ICRvdXRwdXRkaXIgPSAkUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVjazsKKwor IyAtLWlucHV0ZGlyIHBvaW50cyB0byB0aGUgcGF0aCBvZiB0aGUgaW5wdXQgZmlsZXMuCitteSAk aW5wdXRkaXIgPSAiJHNyY2Rpci9zcmMvdGVzdC9yZWdyZXNzIjsKKworIyBSdW4gdGhlIHRlc3Rz LgorbXkgJHJjID0KKyAgc3lzdGVtKCRFTlZ7UEdfUkVHUkVTU30gLiAiICIKKwkgIC4gIi0tYmlu ZGlyPSAiCisJICAuICItLWRscGF0aD1cIiRkbHBhdGhcIiAiCisJICAuICItLWhvc3Q9IiAuICRu b2RlLT5ob3N0IC4gIiAiCisJICAuICItLXBvcnQ9IiAuICRub2RlLT5wb3J0IC4gIiAiCisJICAu ICItLXNjaGVkdWxlPSRzcmNkaXIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSAi CisJICAuICItLW1heC1jb25jdXJyZW50LXRlc3RzPTIwICIKKwkgIC4gIi0taW5wdXRkaXI9XCIk aW5wdXRkaXJcIiAiCisJICAuICItLW91dHB1dGRpcj1cIiRvdXRwdXRkaXJcIiIpOworCisjIER1 bXAgb3V0IHRoZSByZWdyZXNzaW9uIGRpZmZzIGZpbGUsIGlmIHRoZXJlIGlzIG9uZQoraWYgKCRy YyAhPSAwKQoreworCW15ICRkaWZmcyA9ICIkb3V0cHV0ZGlyL3JlZ3Jlc3Npb24uZGlmZnMiOwor CWlmICgtZSAkZGlmZnMpCisJeworCQlwcmludCAiPT09IGR1bXBpbmcgJGRpZmZzID09PVxuIjsK KwkJcHJpbnQgc2x1cnBfZmlsZSgkZGlmZnMpOworCQlwcmludCAiPT09IEVPRiA9PT1cbiI7CisJ fQorfQorCisjIFJlcG9ydCByZXN1bHRzCitpcygkcmMsIDAsICdyZWdyZXNzaW9uIHRlc3RzIHBh c3MnKTsKKworIyBDcmVhdGUgdGhlIGV4dGVuc2lvbiBzbyB3ZSBjYW4gYWNjZXNzIHRoZSBjb2xs ZWN0b3IKKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBFWFRFTlNJT04gcGdf cGxhbl9hZHZpY2UnKTsKKworIyBWZXJpZnkgdGhhdCBhIGxhcmdlIGFtb3VudCBvZiBhZHZpY2Ug d2FzIGNvbGxlY3RlZAorbXkgJGFsbF9xdWVyeV9jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgPDxFT00pOworU0VMRUNUIENPVU5UKCopIEZST00gcGdfZ2V0X2NvbGxlY3RlZF9z aGFyZWRfYWR2aWNlKCk7CitFT00KK2NtcF9vaygkYWxsX3F1ZXJ5X2NvdW50LCAnPicsIDIwMDAw LCAiY29waW91cyBhZHZpY2UgY29sbGVjdGVkIik7CisKKyMgVmVyaWZ5IHRoYXQgbG90cyBvZiBk aWZmZXJlbnQgYWR2aWNlIHN0cmluZ3Mgd2VyZSBjb2xsZWN0ZWQKK215ICRkaXN0aW5jdF9xdWVy eV9jb3VudCA9ICRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgPDxFT00pOworU0VMRUNUIENP VU5UKCopIEZST00KKwkoU0VMRUNUIERJU1RJTkNUIGFkdmljZSBGUk9NIHBnX2dldF9jb2xsZWN0 ZWRfc2hhcmVkX2FkdmljZSgpKTsKK0VPTQorY21wX29rKCRkaXN0aW5jdF9xdWVyeV9jb3VudCwg Jz4nLCAzMDAwLCAiZGl2ZXJzZSBhZHZpY2UgY29sbGVjdGVkIik7CisKKyMgV2Ugd2FudCB0byB0 ZXN0IGZvciB0aGUgcHJlc2VuY2Ugb2Ygb3VyIGtub3duIHRhZ3MgaW4gdGhlIGNvbGxlY3RlZCBh ZHZpY2UuCisjIFB1dCBhbGwgdGFncyBpbnRvIHRoZSBoYXNoIHRoYXQgZm9sbG93czsgbWFwIGFu eSB0YWdzIHRoYXQgYXJlbid0IHRlc3RlZAorIyBieSB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3Rz IHRvIDAsIGFuZCBvdGhlcnMgdG8gMS4KK215ICV0YWdfbWFwID0gKAorCUJJVE1BUF9IRUFQX1ND QU4gPT4gMSwKKwlGT1JFSUdOX0pPSU4gPT4gMCwKKwlHQVRIRVIgPT4gMSwKKwlHQVRIRVJfTUVS R0UgPT4gMSwKKwlIQVNIX0pPSU4gPT4gMSwKKwlJTkRFWF9PTkxZX1NDQU4gPT4gMSwKKwlJTkRF WF9TQ0FOID0+IDEsCisJSk9JTl9PUkRFUiA9PiAxLAorCU1FUkdFX0pPSU5fTUFURVJJQUxJWkUg PT4gMSwKKwlNRVJHRV9KT0lOX1BMQUlOID0+IDEsCisJTkVTVEVEX0xPT1BfTUFURVJJQUxJWkUg PT4gMSwKKwlORVNURURfTE9PUF9NRU1PSVpFID0+IDEsCisJTkVTVEVEX0xPT1BfUExBSU4gPT4g MSwKKwlOT19HQVRIRVIgPT4gMSwKKwlQQVJUSVRJT05XSVNFID0+IDEsCisJU0VNSUpPSU5fTk9O X1VOSVFVRSA9PiAxLAorCVNFTUlKT0lOX1VOSVFVRSA9PiAxLAorCVNFUV9TQ0FOID0+IDEsCisJ VElEX1NDQU4gPT4gMSwKKyk7Citmb3IgbXkgJHRhZyAoc29ydCBrZXlzICV0YWdfbWFwKQorewor CW15ICRjaGVja2l0ID0gJHRhZ19tYXB7JHRhZ307CisKKwkjIFNlYXJjaCBmb3IgdGhlIGdpdmVu IHRhZy4gVGhpcyBpcyBub3QgZW50aXJlbHkgcm9idXN0OiBpdCBjb3VsZCBnZXQgdGhyb3duCisJ IyBvZmYgYnkgYSB0YWJsZSBhbGlhcyBzdWNoIGFzICJGT1JFSUdOX0pPSU4oIiwgYnV0IHRoYXQg cHJvYmFibHkgd29uJ3QKKwkjIGhhcHBlbiBpbiB0aGUgY29yZSByZWdyZXNzaW9uIHRlc3RzLgor CW15ICR0YWdfY291bnQgPSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NF TEVDVCBDT1VOVCgqKSBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpCisJV0hF UkUgYWR2aWNlIExJS0UgJyUkdGFnKCUnCitFT00KKworCSMgQ2hlY2sgdGhhdCB0aGUgdGFnIGdv dCBhIG5vbi10cml2aWFsIGFtb3VudCBvZiB1c2UsIHVubGVzcyB0b2xkIG90aGVyd2lzZS4KKwlj bXBfb2soJHRhZ19jb3VudCwgJz4nLCAxMCwgIm11bHRpcGxlIHVzZXMgb2YgJHRhZyIpIGlmICRj aGVja2l0OworCisJIyBSZWdhcmRsZXNzLCBub3RlIHRoZSBleGFjdCBjb3VudCBpbiB0aGUgbG9n LCBmb3IgaHVtYW4gY29uc3VtcHRpb24uCisJbm90ZSgiZm91bmQgJHRhZ19jb3VudCBhZHZpY2Ug c3RyaW5ncyBjb250YWluaW5nICR0YWciKTsKK30KKworIyBUcmlnZ2VyIGEgcGFydGlhbCBjbGVh bnVwIG9mIHRoZSBzaGFyZWQgYWR2aWNlIGNvbGxlY3RvciwgYW5kIHRoZW4gYSBmdWxsCisjIGNs ZWFudXAuCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIDw8RU9NKTsKK1NFVCBwZ19wbGFu X2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdD01MDA7CitTRUxFQ1QgKiBGUk9NIHBnX2Ns ZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk7CitFT00KKworZG9uZV90ZXN0aW5nKCk7CmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29udHJpYi5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbnRy aWIuc2dtbAppbmRleCAyNGI3MDZiMjlhZC4uYmRkNDg2NWY1M2YgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9jb250cmliLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbApAQCAt MTU2LDYgKzE1Niw3IEBAIENSRUFURSBFWFRFTlNJT04gPHJlcGxhY2VhYmxlPmV4dGVuc2lvbl9u YW1lPC9yZXBsYWNlYWJsZT47CiAgJnBnZnJlZXNwYWNlbWFwOwogICZwZ2xvZ2ljYWxpbnNwZWN0 OwogICZwZ292ZXJleHBsYWluOworICZwZ3BsYW5hZHZpY2U7CiAgJnBncHJld2FybTsKICAmcGdy b3dsb2NrczsKICAmcGdzdGF0c3RhdGVtZW50czsKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9m aWxlbGlzdC5zZ21sIGIvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwKaW5kZXggYWM2NmZjYmRi NTcuLmQ5MGI0MzM4ZDJhIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbApAQCAtMTQ5LDYgKzE0OSw3IEBACiA8IUVO VElUWSBwZ2ZyZWVzcGFjZW1hcCAgU1lTVEVNICJwZ2ZyZWVzcGFjZW1hcC5zZ21sIj4KIDwhRU5U SVRZIHBnbG9naWNhbGluc3BlY3QgIFNZU1RFTSAicGdsb2dpY2FsaW5zcGVjdC5zZ21sIj4KIDwh RU5USVRZIHBnb3ZlcmV4cGxhaW4gICBTWVNURU0gInBnb3ZlcmV4cGxhaW4uc2dtbCI+Cis8IUVO VElUWSBwZ3BsYW5hZHZpY2UgICAgU1lTVEVNICJwZ3BsYW5hZHZpY2Uuc2dtbCI+CiA8IUVOVElU WSBwZ3ByZXdhcm0gICAgICAgU1lTVEVNICJwZ3ByZXdhcm0uc2dtbCI+CiA8IUVOVElUWSBwZ3Jv d2xvY2tzICAgICAgU1lTVEVNICJwZ3Jvd2xvY2tzLnNnbWwiPgogPCFFTlRJVFkgcGdzdGF0c3Rh dGVtZW50cyBTWVNURU0gInBnc3RhdHN0YXRlbWVudHMuc2dtbCI+CmRpZmYgLS1naXQgYS9kb2Mv c3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGdwbGFuYWR2aWNlLnNn bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNhMTg5YWI1Y2M0Ci0t LSAvZGV2L251bGwKKysrIGIvZG9jL3NyYy9zZ21sL3BncGxhbmFkdmljZS5zZ21sCkBAIC0wLDAg KzEsOTU3IEBACis8IS0tIGRvYy9zcmMvc2dtbC9wZ3BsYW5hZHZpY2Uuc2dtbCAtLT4KKworPHNl Y3QxIGlkPSJwZ3BsYW5hZHZpY2UiIHhyZWZsYWJlbD0icGdfcHJld2FybSI+CisgPHRpdGxlPnBn X3BsYW5fYWR2aWNlICZtZGFzaDsgaGVscCB0aGUgcGxhbm5lciBnZXQgdGhlIHJpZ2h0IHBsYW48 L3RpdGxlPgorCisgPGluZGV4dGVybSB6b25lPSJwZ3BsYW5hZHZpY2UiPgorICA8cHJpbWFyeT5w Z19wbGFuX2FkdmljZTwvcHJpbWFyeT4KKyA8L2luZGV4dGVybT4KKworIDxwYXJhPgorICBUaGUg PGZpbGVuYW1lPnBnX3BsYW5fYWR2aWNlPC9maWxlbmFtZT4gYWxsb3dzIGtleSBwbGFubmVyIGRl Y2lzaW9ucyB0byBiZQorICBkZXNjcmliZWQsIHJlcHJvZHVjZWQsIGFuZCBhbHRlcmVkIHVzaW5n IGEgc3BlY2lhbC1wdXJwb3NlICJwbGFuIGFkdmljZSIKKyAgbWluaS1sYW5ndWFnZS4gSXQgaXMg aW50ZW5kZWQgdG8gYWxsb3cgc3RhYmlsaXphdGlvbiBvZiBwbGFuIGNob2ljZXMgdGhhdAorICB0 aGUgdXNlciBiZWxpZXZlcyB0byBiZSBnb29kLCBhcyB3ZWxsIGFzIGV4cGVyaW1lbnRhdGlvbiB3 aXRoIHBsYW5zIHRoYXQKKyAgdGhlIHBsYW5uZXIgYmVsaWV2ZXMgdG8gYmUgbm9uLW9wdGltYWwu CisgPC9wYXJhPgorCisgPHBhcmE+CisgIE5vdGUgdGhhdCwgc2luY2UgdGhlIHBsYW5uZXIgb2Z0 ZW4gbWFrZXMgZ29vZCBkZWNpc2lvbnMsIG92ZXJyaWRpbmcgaXRzCisgIGp1ZGdlbWVudCBjYW4g ZWFzaWx5IGJhY2tmaXJlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUK KyAgdW5kZXJseWluZyBkYXRhIGNoYW5nZXMsIHRoZSBwbGFubmVyIG5vcm1hbGx5IGhhcyB0aGUg b3B0aW9uIHRvIGFkanVzdCB0aGUKKyAgcGxhbiBpbiBhbiBhdHRlbXB0IHRvIHByZXNlcnZlIGdv b2QgcGVyZm9ybWFuY2UuIElmIHRoZSBwbGFuIGFkdmljZSBwcmV2ZW50cworICB0aGlzLCBhIHZl cnkgcG9vciBwbGFuIG1heSBiZSBjaG9zZW4uIEl0IGlzIGltcG9ydGFudCB0byB1c2UgcGxhbiBh ZHZpY2UKKyAgb25seSB3aGVuIHJpc2tzIG9mIGNvbnN0cmFpbmluZyB0aGUgcGxhbm5lcidzIGNo b2ljZXMgYXJlIG91dHdlaWdoZWQgYnkKKyAgdGhlIGJlbmVmaXRzLgorIDwvcGFyYT4KKworIDxz ZWN0MiBpZD0icGdwbGFuYWR2aWNlLWdldHRpbmctc3RhcnRlZCI+CisgIDx0aXRsZT5HZXR0aW5n IFN0YXJ0ZWQ8L3RpdGxlPgorCisgIDxwYXJhPgorICAgSW4gb3JkZXIgdG8gdXNlIHRoaXMgbW9k dWxlLCB0aGUgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IG1vZHVsZQorICAgbXVz dCBiZSBsb2FkZWQuIFlvdSBjYW4gZG8gdGhpcyBvbiBhIHN5c3RlbS13aWRlIGJhc2lzIGJ5IGFk ZGluZworICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IHRvCisgICA8eHJlZiBs aW5rZW5kPSJndWMtc2hhcmVkLXByZWxvYWQtbGlicmFyaWVzIi8+IGFuZCByZXN0YXJ0aW5nIHRo ZQorICAgc2VydmVyLCBvciBieSBhZGRpbmcgaXQgdG8KKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1z ZXNzaW9uLXByZWxvYWQtbGlicmFyaWVzIi8+IGFuZCBzdGFydGluZyBhIG5ldyBzZXNzaW9uLAor ICAgb3IgYnkgbG9hZGluZyBpdCBpbnRvIGFuIGluZGl2aWR1YWwgc2Vzc2lvbiB1c2luZyB0aGUK KyAgIDxsaW5rIGxpbmtlbmQ9InNxbC1sb2FkIj48bGl0ZXJhbD5MT0FEPC9saXRlcmFsPjwvbGlu az4gY29tbWFuZC4gSWYgeW91CisgICB3aXNoIHRvIHVzZSB0aGUKKyAgIDxsaW5rIGxpbmtlbmQ9 InBncGxhbmFkdmljZS1jb2xsZWN0b3IiPmNvbGxlY3RvciBpbnRlcmZhY2U8L2xpbms+LAorICAg eW91IG11c3QgYWxzbyB0aGUgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IGV4dGVu c2lvbgorICAgaW4gdGhlIGRhdGFiYXNlIHdoZXJlIHlvdSB3aXNoIHRvIHVzZSB0aGUgY29sbGVj dG9yLiBVc2UgdGhlIGNvbW1hbmQKKyAgIDxsaXRlcmFsPkNSRUFURSBFWFRFTlNJT04gcGdfcGxh bl9hZHZpY2U8L2xpdGVyYWw+IHRvIGRvIHRoaXMuIElmIHlvdSBkbworICAgbm90IHdpc2ggdG8g dXNlIHRoZSBjb2xsZWN0b3IgaW50ZXJmYWNlLCB0aGlzIHN0ZXAgaXMgbm90IHJlcXVpcmVkLgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBPbmNlIHRoZSA8bGl0ZXJhbD5wZ19wbGFuX2Fkdmlj ZTwvbGl0ZXJhbD4gbW9kdWxlIGlzIGxvYWRlZCwKKyAgIDxsaW5rIGxpbmtlbmQ9InNxbC1leHBs YWluIj48bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPjwvbGluaz4gd2lsbCBzdXBwb3J0CisgICBh IDxsaXRlcmFsPlBMQU5fQURWSUNFPC9saXRlcmFsPiBvcHRpb24uIFlvdSBjYW4gdXNlIHRoaXMg b3B0aW9uIHRvIHNlZQorICAgYSBwbGFuIGFkdmljZSBzdHJpbmcgZm9yIHRoZSBjaG9zZW4gcGxh bi4gRm9yIGV4YW1wbGU6CisgIDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorRVhQTEFJTiAo Q09TVFMgT0ZGLCBQTEFOX0FEVklDRSkKKyAgICAgICAgU0VMRUNUICogRlJPTSBqb2luX2ZhY3Qg ZiBKT0lOIGpvaW5fZGltIGQgT04gZi5kaW1faWQgPSBkLmlkOworICAgICAgICAgICAgIFFVRVJZ IFBMQU4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggSm9pbgor ICAgSGFzaCBDb25kOiAoZi5kaW1faWQgPSBkLmlkKQorICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5f ZmFjdCBmCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvaW5fZGltIGQK KyBHZW5lcmF0ZWQgUGxhbiBBZHZpY2U6CisgICBKT0lOX09SREVSKGYgZCkKKyAgIEhBU0hfSk9J TihkKQorICAgU0VRX1NDQU4oZiBkKQorICAgTk9fR0FUSEVSKGYgZCkKKzwvcHJvZ3JhbWxpc3Rp bmc+CisKKyAgPHBhcmE+CisgICBJbiB0aGlzIGV4YW1wbGUsIHRoZSB1c2VyIGhhcyBub3Qgc3Bl Y2lmaWVkIGFueSBhZHZpY2U7IGluc3RlYWQsIHRoZQorICAgcGxhbm5lciBoYXMgYmVlbiBwZXJt aXR0ZWQgdG8gbWFrZSB3aGF0ZXZlciBkZWNpc2lvbnMgaXQgdGhpbmtzIGJlc3QsIGFuZAorICAg dGhvc2UgZGVjaXNpb25zIGFyZSBtZW1vcmlhbGl6ZWQgaW4gdGhlIGZvcm0gb2YgYW4gYWR2aWNl IHN0cmluZy4KKyAgIDxsaXRlcmFsPkpPSU5fT1JERVIoZiBkKTwvbGl0ZXJhbD4gbWVhbnMgdGhh dCA8bGl0ZXJhbD5mPC9saXRlcmFsPiBzaG91bGQKKyAgIGJlIHRoZSBkcml2aW5nIHRhYmxlLCBh bmQgdGhlIGZpcnN0IHRhYmxlIHRvIHdoaWNoIGl0IHNob3VsZCBiZSBqb2luZWQgaXMKKyAgIDxs aXRlcmFsPmQ8L2xpdGVyYWw+LiA8bGl0ZXJhbD5IQVNIX0pPSU4oZCk8L2xpdGVyYWw+IG1lYW5z IHRoYXQKKyAgIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IHNob3VsZCBhcHBlYXIgb24gdGhlIGlubmVy IHNpZGUgb2YgYSBoYXNoIGpvaW4uCisgICA8bGl0ZXJhbD5TRVFfU0NBTihmIGQpPC9saXRlcmFs PiBtZWFucyB0aGF0IGJvdGggPGxpdGVyYWw+ZjwvbGl0ZXJhbD4KKyAgIGFuZCA8bGl0ZXJhbD5k PC9saXRlcmFsPiBzaG91bGQgYmUgYWNjZXNzZWQgdmlhIGEgc2VxdWVudGlhbCBzY2FuLgorICAg PGxpdGVyYWw+Tk9fR0FUSEVSKGYgZCk8L2xpdGVyYWw+IG1lYW5zIHRoYXQgbmVpdGhlciA8bGl0 ZXJhbD5mPC9saXRlcmFsPgorICAgbm9yIDxsaXRlcmFsPmQ8L2xpdGVyYWw+IHNob3VsZCBhcHBl YXIgYmVuZWF0aCBhIDxsaXRlcmFsPkdhdGhlcjwvbGl0ZXJhbD4KKyAgIG9yIDxsaXRlcmFsPkdh dGhlciBNZXJnZTwvbGl0ZXJhbD4gbm9kZS4gRm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcGxhbgor ICAgYWR2aWNlIG1pbmktbGFuZ3VhZ2UsIHNlZSB0aGUgaW5mb3JtYXRpb24gb24KKyAgIDxsaW5r IGxpbmtlbmQ9InBncGxhbmFkdmljZS10YXJnZXRzIj5hZHZpY2UgdGFyZ2V0czwvbGluaz4gYW5k CisgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtdGFncyI+YWR2aWNlIHRhZ3M8L2xpbms+ LCBiZWxvdy4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSWYgeW91IHdhbnQgdG8gc2VlIHRo ZSBhZHZpY2Ugc3RyaW5ncyBmb3IgYSBsYXJnZSBudW1iZXIgb2YgcXVlcmllcywgb3IKKyAgIGFu IGVudGlyZSB3b3JrbG9hZCwgcnVubmluZyA8bGl0ZXJhbD5FWFBMQUlOIChQTEFOX0FEVklDRSk8 L2xpdGVyYWw+IGZvcgorICAgZWFjaCBvbmUgbWF5IG5vdCBiZSBjb252ZW5pZW50LiBJbiBzdWNo IHNpdHVhdGlvbnMsIGl0IGNhbiBiZSBtb3JlCisgICBjb252ZW5pZW50IHRvIHVzZSBhbgorICAg PGxpbmsgbGlua2VuZD0icGdwbGFuYWR2aWNlLWNvbGxlY3RvciI+YWR2aWNlIGNvbGxlY3Rvcjwv bGluaz4uCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIE9uY2UgeW91IGhhdmUgYW4gYWR2aWNl IHN0cmluZyBmb3IgYSBxdWVyeSwgeW91IGNhbiB1c2UgaXQgdG8gY29udHJvbCBob3cKKyAgIHRo YXQgcXVlcnkgaXMgcGxhbm5lZC4gWW91IGNhbiBkbyB0aGlzIGJ5IHNldHRpbmcKKyAgIDxsaXRl cmFsPnBnX3BsYW5fYWR2aWNlLmFkdmljZTwvbGl0ZXJhbD4gdG8gdGhlIGFkdmljZSBzdHJpbmcg eW91J3ZlCisgICBjaG9zZW4uIFRoaXMgY2FuIGJlIGFuIGFkdmljZSBzdHJpbmcgdGhhdCB3YXMg Z2VuZXJhdGVkIGJ5IHRoZSBzeXN0ZW0sCisgICBvciBvbmUgeW91J3ZlIHdyaXR0ZW4geW91cnNl bGYuIE9uZSBnb29kIHdheSBvZiBjcmVhdGluZyB5b3VyIG93biBhZHZpY2UKKyAgIHN0cmluZyBp cyB0byB0YWtlIHRoZSBzdHJpbmcgZ2VuZXJhdGVkIGJ5IHRoZSBzeXN0ZW0gYW5kIHBpY2sgb3V0 IGp1c3QKKyAgIHRob3NlIGVsZW1lbnRzIHRoYXQgeW91IHdpc2ggdG8gZW5mb3JjZS4gSW4gdGhl IGV4YW1wbGUgYWJvdmUsCisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gZW1p dHMgYWR2aWNlIGZvciB0aGUgam9pbiBvcmRlciwgdGhlCisgICBqb2luIG1ldGhvZCwgdGhlIHNj YW4gbWV0aG9kLCBhbmQgdGhlIHVzZSBvZiBwYXJhbGxlbGlzbSwgYnV0IHlvdSBtaWdodAorICAg b25seSB3YW50IHRvIGNvbnRyb2wgdGhlIGpvaW4gb3JkZXI6CisgIDwvcGFyYT4KKworPHByb2dy YW1saXN0aW5nPgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09SREVSKGYgZCkn OworRVhQTEFJTiAoQ09TVFMgT0ZGKQorICAgICAgICBTRUxFQ1QgKiBGUk9NIGpvaW5fZmFjdCBm IEpPSU4gam9pbl9kaW0gZCBPTiBmLmRpbV9pZCA9IGQuaWQ7CisgICAgICAgICAgICAgUVVFUlkg UExBTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSGFzaCBKb2luCisg ICBIYXNoIENvbmQ6IChmLmRpbV9pZCA9IGQuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gam9pbl9m YWN0IGYKKyAgIC0+ICBIYXNoCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gam9pbl9kaW0gZAor IFN1cHBsaWVkIFBsYW4gQWR2aWNlOgorICAgSk9JTl9PUkRFUihmIGQpIC8qIG1hdGNoZWQgKi8K KzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBTaW5jZSB0aGUgPGxpdGVyYWw+UExB Tl9BRFZJQ0U8L2xpdGVyYWw+IG9wdGlvbiB0bworICAgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJh bD4gd2FzIG5vdCBzcGVjaWZpZWQsIG5vIGFkdmljZSBzdHJpbmcgaXMgZ2VuZXJhdGVkCisgICBm b3IgdGhlIHBsYW4uIEhvd2V2ZXIsIHRoZSBzdXBwbGllZCBwbGFuIGFkdmljZSBpcyBzdGlsbCBz aG93biBzbyB0aGF0CisgICBhbnlvbmUgbG9va2luZyBhdCB0aGUgPGxpdGVyYWw+RVhQTEFJTjwv bGl0ZXJhbD4gb3V0cHV0IGtub3dzIHRoYXQgdGhlCisgICBjaG9zZW4gcGxhbiB3YXMgaW5mbHVl bmNlZCBieSBwbGFuIGFkdmljZS4gSWYgaW5mb3JtYXRpb24gYWJvdXQgc3VwcGxpZWQKKyAgIHBs YW4gYWR2aWNlIGlzIG5vdCBkZXNpcmVkLCBpdCBjYW4gYmUgc3VwcHJlc3NlZCBieSBjb25maWd1 cmluZworICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRf YWR2aWNlID0gZmFsc2U8L2xpdGVyYWw+LgorICAgRm9yIGVhY2ggcGllY2Ugb2Ygc3VwcGxpZWQg YWR2aWNlLCB0aGUgb3V0cHV0IHNob3dzCisgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2Ut ZmVlZGJhY2siPmFkdmljZSBmZWVkYmFjazwvbGluaz4gaW5kaWNhdGluZworICAgd2hldGhlciBv ciBub3QgdGhlIGFkdmljZSB3YXMgc3VjY2Vzc2Z1bGx5IGFwcGxpZWQgdG8gdGhlIHF1ZXJ5LiBJ biB0aGlzCisgICBjYXNlLCB0aGUgZmVlZGJhY2sgc2F5cyA8bGl0ZXJhbD4vKiBtYXRjaGVkICov PC9saXRlcmFsPiwgd2hpY2ggbWVhbnMgdGhhdAorICAgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4gYW5k IDxsaXRlcmFsPmQ8L2xpdGVyYWw+IHdlcmUgZm91bmQgaW4gdGhlIHF1ZXJ5IGFuZAorICAgdGhh dCB0aGUgcmVzdWx0aW5nIHF1ZXJ5IHBsYW4gY29uZm9ybXMgdG8gdGhlIHNwZWNpZmllZCBhZHZp Y2UuCisgIDwvcGFyYT4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS1o b3ctaXQtd29ya3MiPgorICA8dGl0bGU+SG93IEl0IFdvcmtzPC90aXRsZT4KKworICA8cGFyYT4K KyAgIFBsYW4gYWR2aWNlIGlzIHdyaXR0ZW4gaW1wZXJhdGl2ZWx5OyB0aGF0IGlzLCBpdCBzcGVj aWZpZXMgd2hhdCBzaG91bGQgYmUKKyAgIGRvbmUuIEhvd2V2ZXIsIGF0IGFuIGltcGxlbWVudGF0 aW9uIGxldmVsLAorICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IHdvcmtzIGJ5 IHRlbGxpbmcgdGhlIGNvcmUgcGxhbm5lciB3aGF0CisgICBzaG91bGQgbm90IGJlIGRvbmUuIElu IG90aGVyIHdvcmRzLCBpdCBvcGVyYXRlcyBieSBjb25zdHJhaW5pbmcgdGhlCisgICBwbGFubmVy J3MgY2hvaWNlcywgbm90IGJ5IHJlcGxhY2luZyBpdC4gVGhlcmVmb3JlLCBubyBtYXR0ZXIgd2hh dCBhZHZpY2UKKyAgIHlvdSBwcm92aWRlLCB5b3Ugd2lsbCBvbmx5IGV2ZXIgZ2V0IGEgcGxhbiB0 aGF0IHRoZSBjb3JlIHBsYW5uZXIgd291bGQgaGF2ZQorICAgY29uc2lkZXJlZCBmb3IgdGhlIHF1 ZXJ5IGluIHF1ZXN0aW9uLiBJZiB5b3UgYXR0ZW1wdCB0byBmb3JjZSB3aGF0IHlvdQorICAgYmVs aWV2ZSB0byBiZSB0aGUgY29ycmVjdCBwbGFuIGJ5IHN1cHBseWluZyBhbiBhZHZpY2Ugc3RyaW5n LCBhbmQgdGhlCisgICBwbGFubmVyIHN0aWxsIGZhaWxzIHRvIHByb2R1Y2UgdGhlIGRlc2lyZWQg cGxhbiwgdGhpcyBtZWFucyB0aGF0IGVpdGhlcgorICAgdGhlcmUgaXMgYSBidWcgaW4geW91ciBh ZHZpY2Ugc3RyaW5nLCBvciB0aGUgcGxhbiBpbiBxdWVzdGlvbiB3YXMgbm90CisgICBjb25zaWRl cmVkIHZpYWJsZSBieSB0aGUgY29yZSBwbGFubmVyLiBUaGlzIGNvbW1vbmx5IGhhcHBlbnMgZm9y IG9uZSBvZiB0d28KKyAgIHJlYXNvbnMuIEZpcnN0LCBpdCBtaWdodCBiZSB0aGUgcGxhbm5lciBi ZWxpZXZlcyB0aGF0IHRoZSBwbGFuIHlvdSdyZSB0cnlpbmcKKyAgIHRvIGZvcmNlIHdvdWxkIGJl IHNlbWFudGljYWxseSBpbmNvcnJlY3QgLS0gdGhhdCBpcywgaXQgd291bGQgcHJvZHVjZSB0aGUK KyAgIHdyb25nIHJlc3VsdHMgLS0gYW5kIGZvciB0aGF0IHJlYXNvbiBpdCB3YXNuJ3QgY29uc2lk ZXJlZC4gU2Vjb25kLCBpdCBtaWdodAorICAgYmUgdGhhdCB0aGUgcGxhbm5lciByZWplY3RlZCB0 aGUgcGxhbiB5b3Ugd2VyZSBob3BpbmcgdG8gZ2VuZXJhdGUgb24gc29tZQorICAgZ3JvdW5kcyBv dGhlciB0aGFuIGNvc3QuIEZvciBleGFtcGxlLCBnaXZlbiBhIHZlcnkgc2ltcGxlIHF1ZXJ5IHN1 Y2ggYXMKKyAgIDxsaXRlcmFsPlNFTEVDVCAqIEZST00gc29tZV90YWJsZTwvbGl0ZXJhbD4sIHRo ZSBxdWVyeSBwbGFubmVyIHdpbGwKKyAgIGRlY2lkZSB0aGF0IHRoZSB1c2Ugb2YgYW4gaW5kZXgg aXMgd29ydGhsZXNzIGhlcmUgYmVmb3JlIGl0IHBlcmZvcm1zIGFueQorICAgY29zdGluZyBjYWxj dWxhdGlvbnMuIFlvdSBjYW5ub3QgZm9yY2UgaXQgdG8gdXNlIGFuIGluZGV4IGZvciB0aGlzIHF1 ZXJ5CisgICBldmVuIGlmIHlvdSBzZXQgPGxpdGVyYWw+ZW5hYmxlX3NlcXNjYW4gPSBmYWxzZTwv bGl0ZXJhbD4sIGFuZCB5b3UgY2FuJ3QKKyAgIGZvcmNlIGl0IHRvIHVzZSBhbiBpbmRleCB1c2lu ZyBwbGFuIGFkdmljZSwgZWl0aGVyLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBTcGVjaWZ5 aW5nIHBsYW4gYWR2aWNlIHNob3VsZCBuZXZlciBjYXVzZSBwbGFubmVyIGZhaWx1cmUuIEhvd2V2 ZXIsIGlmIHlvdQorICAgc3BlY2lmeSBwbGFuIGFkdmljZSB0aGF0IGFza3MgZm9yIHNvbWV0aGlu ZyBpbXBvc3NpYmxlLCB5b3UgbWF5IGdldCBhIHBsYW4KKyAgIHdoZXJlIHNvbWUgcGxhbiBub2Rl cyBhcmUgZmxhZ2dlZCBhcyA8bGl0ZXJhbD5EaXNhYmxlZDogdHJ1ZTwvbGl0ZXJhbD4gaW4KKyAg IHRoZSA8bGl0ZXJhbD5FWFBMQUlOPC9saXRlcmFsPiBvdXRwdXQuIEluIHNvbWUgY2FzZXMsIHN1 Y2ggcGxhbnMgd2lsbCBiZQorICAgYmFzaWNhbGx5IHRoZSBzYW1lIHBsYW4geW91IHdvdWxkIGhh dmUgZ290dGVuIHdpdGggbm8gc3VwcGxpZWQgYWR2aWNlIGF0CisgICBhbGwsIGJ1dCBpbiBvdGhl ciBjYXNlcywgdGhleSBtYXkgYmUgbXVjaCB3b3JzZS4gRm9yIGV4YW1wbGU6CisgIDwvcGFyYT4K KworPHByb2dyYW1saXN0aW5nPgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdKT0lOX09S REVSKHggZiBkKSc7CitFWFBMQUlOIChDT1NUUyBPRkYpCisgICAgICAgIFNFTEVDVCAqIEZST00g am9pbl9mYWN0IGYgSk9JTiBqb2luX2RpbSBkIE9OIGYuZGltX2lkID0gZC5pZDsKKyAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgRGlzYWJsZWQ6IHRydWUKKyAg IC0+ICBTZXEgU2NhbiBvbiBqb2luX2ZhY3QgZgorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgam9p bl9kaW1fcGtleSBvbiBqb2luX2RpbSBkCisgICAgICAgICBJbmRleCBDb25kOiAoaWQgPSBmLmRp bV9pZCkKKyBTdXBwbGllZCBQbGFuIEFkdmljZToKKyAgIEpPSU5fT1JERVIoeCBmIGQpIC8qIHBh cnRpYWxseSBtYXRjaGVkICovCis8L3Byb2dyYW1saXN0aW5nPgorCisgIDxwYXJhPgorICAgQmVj YXVzZSBuZWl0aGVyIDxsaXRlcmFsPmY8L2xpdGVyYWw+IG5vciA8bGl0ZXJhbD5kPC9saXRlcmFs PiBpcyB0aGUKKyAgIGZpcnN0IHRhYmxlIGluIHRoZSA8bGl0ZXJhbD5KT0lOX09SREVSKCk8L2xp dGVyYWw+IHNwZWNpZmljYXRpb24sIHRoZQorICAgcGxhbm5lciBkaXNhYmxlcyBhbGwgZGlyZWN0 IGpvaW5zIGJldHdlZW4gdGhlIHR3byBvZiB0aGVtLCB0aGlua2luZyB0aGF0CisgICB0aGUgam9p biB0byA8bGl0ZXJhbD54PC9saXRlcmFsPiBzaG91bGQgaGFwcGVuIGZpcnN0LiBTaW5jZSBwbGFu bmluZyBpc24ndAorICAgYWxsb3dlZCB0byBmYWlsLCBhIGRpc2FibGVkIHBsYW4gYmV0d2VlbiB0 aGUgdHdvIHRhYmxlcyBpcyBldmVudHVhbGx5CisgICBzZWxlY3RlZCBhbnl3YXksIGJ1dCBoZXJl IGl0J3MgYSA8bGl0ZXJhbD5OZXN0ZWQgTG9vcDwvbGl0ZXJhbD4gcmF0aGVyIHRoYW4KKyAgIHRo ZSA8bGl0ZXJhbD5IYXNoIEpvaW48L2xpdGVyYWw+IHRoYXQgd2FzIGNob3NlbiBpbiB0aGUgYWJv dmUgZXhhbXBsZSB3aGVyZQorICAgbm8gYWR2aWNlIHdhcyBzcGVjaWZpZWQuIFRoZXJlIGFyZSBz ZXZlcmFsIGRpZmZlcmVudCB3YXlzIHRoYXQgdGhpcyBraW5kCisgICBvZiB0aGluZyBjYW4gaGFw cGVuOyB3aGVuIGl0IGRvZXMsIHRoZSByZXN1bHRpbmcgcGxhbiBpcyBnZW5lcmFsbHkgd29yc2UK KyAgIHRoYW4gaWYgbm8gYWR2aWNlIGhhZCBiZWVuIHNwZWNpZmllZCBhdCBhbGwuIFRoZXJlZm9y ZSwgaXQgaXMgYSBnb29kIGlkZWEKKyAgIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGFkdmljZSB5b3Ug c3BlY2lmeSBhcHBsaWVzIHRvIHRoZSBxdWVyeSB0byB3aGljaCBpdAorICAgaXMgYXBwbGllZCBh bmQgdGhhdCB0aGUgcmVzdWx0cyBhcmUgYXMgZXhwZWN0ZWQuCisgIDwvcGFyYT4KKworIDwvc2Vj dDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS10YXJnZXRzIj4KKyAgPHRpdGxlPkFkdmlj ZSBUYXJnZXRzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIEFuIDxmaXJzdHRlcm0+YWR2aWNlIHRh cmdldDwvZmlyc3R0ZXJtPiB1bmlxdWVseSBpZGVudGlmaWVzIGEgcGFydGljdWxhcgorICAgaW5z dGFuY2Ugb2YgYSBwYXJ0aWN1bGFyIHRhYmxlIGludm9sdmVkIGluIGEgcGFydGljdWxhciBxdWVy eS4gSW4gc2ltcGxlCisgICBjYXNlcywgc3VjaCBhcyB0aGUgZXhhbXBsZXMgc2hvd24gYWJvdmUs IHRoZSBhZHZpY2UgdGFyZ2V0IGlzIHNpbXBseSB0aGUKKyAgIHJlbGF0aW9uIGFsaWFzLiBIb3dl dmVyLCBhIG1vcmUgY29tcGxleCBzeW50YXggaXMgcmVxdWlyZWQgd2hlbiBzdWJxdWVyaWVzCisg ICBhcmUgdXNlZCwgd2hlbiB0YWJsZXMgYXJlIHBhcnRpdGlvbmVkLCBvciB3aGVuIHRoZSBzYW1l IHJlbGF0aW9uIGFsaWFzIGlzCisgICBtZW50aW9uZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNh bWUgc3VicXVlcnkgKGUuZy4gPGxpdGVyYWw+KGZvbyBKT0lOIGJhcgorICAgT04gZm9vLmEgPSBi YXIuYSkgeCBKT0lOIGZvbyBPTiB4LmIgPSBmb28uYjwvbGl0ZXJhbD4uIEFueSBjb21iaW5hdGlv biBvZgorICAgdGhlc2UgdGhyZWUgdGhpbmdzIGNhbiBvY2N1ciBzaW11bHRhbmVvdXNseTogYSBy ZWxhdGlvbiBjb3VsZCBiZSBtZW50aW9uZWQKKyAgIG1vcmUgdGhhbiBvbmNlLCBiZSBwYXJ0aXRp b25lZCwgYW5kIGJlIHVzZWQgaW5zaWRlIG9mIGEgc3VicXVlcnkuCisgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIEJlY2F1c2Ugb2YgdGhpcywgdGhlIGdlbmVyYWwgc3ludGF4IGZvciBhIHJlbGF0 aW9uIGlkZW50aWZpZXIgaXM6CisgIDwvcGFyYT4KKworPHByb2dyYW1saXN0aW5nPgorYWxpYXNf bmFtZSNvY2N1cnJlbmNlX251bWJlci9wYXJ0aXRpb25fc2NoZW1hLnBhcnRpdGlvbl9uYW1lQHBs YW5fbmFtZQorPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAgIEFsbCBjb21wb25lbnRz IGV4Y2VwdCBmb3IgdGhlIDxsaXRlcmFsPmFsaWFzX25hbWU8L2xpdGVyYWw+IGFyZSBvcHRpb25h bAorICAgYW5kIGluY2x1ZGVkIG9ubHkgd2hlbiByZXF1aXJlZC4gV2hlbiBhIGNvbXBvbmVudCBp cyBvbWl0dGVkLCB0aGUgYXNzb2NpYXRlZAorICAgcHVuY3R1YXRpb24gbXVzdCBhbHNvIGJlIG9t aXR0ZWQuIEZvciB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHRhYmxlCisgICB3aXRoaW4gYSBn aXZlbiBzdWJxdWVyeSwgZ2VuZXJhdGVkIGFkdmljZSB3aWxsIG9taXQgdGhlIG9jY3VycmVuY2Ug bnVtYmVyLAorICAgYnV0IGl0IGlzIGxlZ2FsIHRvIHdyaXRlIDxsaXRlcmFsPiMxPC9saXRlcmFs PiwgaWYgZGVzaXJlZC4gVGhlIHBhcnRpdGlvbgorICAgc2NoZW1hIGFuZCBwYXJ0aXRpb24gbmFt ZSBhcmUgaW5jbHVkZWQgb25seSBmb3IgY2hpbGRyZW4gb2YgcGFydGl0aW9uZWQKKyAgIHRhYmxl cy4gSW4gZ2VuZXJhdGVkIGFkdmljZSwgd2UgYWx3YXlzIGluY3VkZSBib3RoLCBidXQgaXQgaXMg bGVnYWwgdG8KKyAgIG9taXQgdGhlIHNjaGVtYS4gVGhlIHBsYW4gbmFtZSBpcyBvbWl0dGVkIGZv ciB0aGUgdG9wbGV2ZWwgcGxhbiwgYW5kIG11c3QKKyAgIGJlIGluY2x1ZGVkIGZvciBhbnkgc3Vi cGxhbi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgSXQgaXMgbm90IGFsd2F5cyBlYXN5IHRv IGRldGVybWluZSB0aGUgY29ycmVjdCBhZHZpY2UgdGFyZ2V0IGJ5IGV4YW1pbmluZworICAgdGhl IHF1ZXJ5OyBmb3IgaW5zdGFuY2UsIGlmIHRoZSBwbGFubmVyIHB1bGxzIHVwIGEgc3VicXVlcnkg aW50byB0aGUgcGFyZW50CisgICBxdWVyeSBsZXZlbCwgZXZlcnl0aGluZyBpbnNpZGUgb2YgaXQg YmVjb21lcyBwYXJ0IG9mIHRoZSBwYXJlbnQgcXVlcnkgbGV2ZWwsCisgICBhbmQgdXNlcyB0aGUg cGFyZW50IHF1ZXJ5J3Mgc3VicGxhbiBuYW1lIChvciBubyBzdWJwbGFuIG5hbWUsIGlmIHB1bGxl ZCB1cAorICAgdG8gdGhlIHRvcGxldmVsKS4gRnVydGhlcm1vcmUsIHRoZSBjb3JyZWN0IHN1YnF1 ZXJ5IG5hbWUgaXMgc29tZXRpbWVzIG5vdAorICAgb2J2aW91cy4gRm9yIGV4YW1wbGUsIHdoZW4g dHdvIHF1ZXJpZXMgYXJlIGpvaW5lZCB1c2luZyBhbiBvcGVyYXRpb24gc3VjaCBhcworICAgPGxp dGVyYWw+VU5JT048L2xpdGVyYWw+IG9yIDxsaXRlcmFsPklOVEVSU0VDVDwvbGl0ZXJhbD4sIG5v IG5hbWUgZm9yIHRoZQorICAgc3VicXVlcmllcyBpcyBwcmVzZW50IGluIHRoZSBTUUwgc3ludGF4 OyBpbnN0ZWFkLCBhIHN5c3RlbS1nZW5lcmF0ZWQgbmFtZSBpcworICAgYXNzaWduZWQgdG8gZWFj aCBicmFuY2guIFRoZSBlYXNpZXN0IHdheSB0byBkaXNjb3ZlciB0aGUgcHJvcGVyIGFkdmljZQor ICAgdGFyZ2V0cyBpcyB0byB1c2UgPGxpdGVyYWw+RVhQTEFJTiAoUExBTl9BRFZJQ0UpPC9saXRl cmFsPiBhbmQgZXhhbWluZSB0aGUKKyAgIGdlbmVyYXRlZCBhZHZpY2UuCisgIDwvcGFyYT4KKwor IDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS10YWdzIj4KKyAgPHRpdGxlPkFk dmljZSBUYWdzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIEFuIDxmaXJzdHRlcm0+YWR2aWNlIHRh ZzwvZmlyc3R0ZXJtPiBzcGVjaWZpZXMgYSBwYXJ0aWN1bGFyIGJlaGF2aW9yIHRoYXQKKyAgIHNo b3VsZCBiZSBlbmZvcmNlZCBmb3Igc29tZSBwb3J0aW9uIG9mIHRoZSBxdWVyeSwgc3VjaCBhcyBh IHBhcnRpY3VsYXIKKyAgIGpvaW4gb3JkZXIgb3Igam9pbiBtZXRob2QuIEFsbCBhZHZpY2UgdGFn cyB0YWtlCisgICA8bGluayBsaW5rZW5kPSJwZ3BsYW5hZHZpY2UtdGFyZ2V0cyI+YWR2aWNlIHRh cmdldHM8L2xpbms+IGFzIGFyZ3VtZW50cywKKyAgIGFuZCBtYW55IGFsbG93IGxpc3RzIG9mIGFk dmljZSB0YXJnZXRzLCB3aGljaCBpbiBzb21lIGNhc2VzIGNhbiBiZSBuZXN0ZWQKKyAgIG11bHRp cGxlIGxldmVscyBkZWVwLiBTZXZlcmFsIGRpZmZlcmVudCBjbGFzc2VzIG9mIGFkdmljZSB0YXJn ZXRzIGV4aXN0LAorICAgZWFjaCBjb250cm9sbGluZyBhIGRpZmZlcmVudCBhc3BlY3Qgb2YgcXVl cnkgcGxhbm5pbmcuCisgIDwvcGFyYT4KKworICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1zY2Fu LW1ldGhvZCI+CisgIDx0aXRsZT5TY2FuIE1ldGhvZCBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9w c2lzPgorU0VRX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IFsgLi4uIF0p CitUSURfU0NBTig8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK0lO REVYX1NDQU4oPHJlcGxhY2VhYmxlPnRhcmdldDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5p bmRleF9uYW1lPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK0lOREVYX09OTFlfU0NBTig8cmVwbGFj ZWFibGU+dGFyZ2V0PC9yZXBsYWNlYWJsZT4gPHJlcGxhY2VhYmxlPmluZGV4X25hbWU8L3JlcGxh Y2VhYmxlPiBbIC4uLiBdKQorRk9SRUlHTl9TQ0FOKCg8cmVwbGFjZWFibGU+dGFyZ2V0PC9yZXBs YWNlYWJsZT4gWyAuLi4gXSkgWyAuLi4gXSkKK0JJVE1BUF9IRUFQX1NDQU4oPHJlcGxhY2VhYmxl PnRhcmdldDwvcmVwbGFjZWFibGU+IDxyZXBsYWNlYWJsZT5iaXRtYXBfdGFyZ2V0PC9yZXBsYWNl YWJsZT4gWyAuLi4gXSk8L3N5bm9wc2lzPgorCisgICA8cGFyYT4KKyAgICA8bGl0ZXJhbD5TRVFf U0NBTjwvbGl0ZXJhbD4gc3BlY2lmaWVzIHRoYXQgZWFjaCB0YXJnZXQgdGFibGUgc2hvdWxkIGJl CisgICAgc2Nhbm5lZCB1c2luZyBhIDxsaXRlcmFsPlNlcSBTY2FuPC9saXRlcmFsPi4gPGxpdGVy YWw+VElEX1NDQU48L2xpdGVyYWw+CisgICAgc3BlY2lmaWVzIHRoYXQgZWFjaCB0YXJnZXQgdGFi bGUgc2hvdWxkIGJlIHNjYW5uZWQgdXNpbmcgYQorICAgIDxsaXRlcmFsPlRJRCBTY2FuPC9saXRl cmFsPiBvciA8bGl0ZXJhbD5USUQgUmFuZ2UgU2NhbjwvbGl0ZXJhbD4uCisgICA8L3BhcmE+CisK KyAgIDxwYXJhPgorICAgIDxsaXRlcmFsPklOREVYX1NDQU48L2xpdGVyYWw+IHNwZWNpZmllcyB0 aGF0IGVhY2ggdGFyZ2V0IHRhYmxlIHNob3VsZAorICAgIGJlIHNjYW5uZWQgdXNpbmcgYW4gPGxp dGVyYWw+SW5kZXggU2NhbjwvbGl0ZXJhbD4gb24gdGhlIGdpdmVuIGluZGV4CisgICAgbmFtZS4g PGxpdGVyYWw+SU5ERVhfT05MWV9TQ0FOPC9saXRlcmFsPiBpcyBzaW1pbGFyLCBidXQgc3BlY2lm aWVzIHRoZQorICAgIHVzZSBvZiBhbiA8bGl0ZXJhbD5JbmRleCBPbmx5IFNjYW48L2xpdGVyYWw+ LiBJbiBlaXRoZXIgY2FzZSwgdGhlIGluZGV4CisgICAgbmFtZSBjYW4gYmUsIGJ1dCBkb2VzIG5v dCBoYXZlIHRvIGJlLCBzY2hlbWEtcXVhbGlmaWVkLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4K KyAgICA8bGl0ZXJhbD5GT1JFSUdOX1NDQU48L2xpdGVyYWw+IHNwZWNpZmllcyB0aGF0IGEgZm9y ZWlnbiBqb2luIGJldHdlZW4KKyAgICBhIHNldmVyYWwgZm9yZWlnbiB0YWJsZXMgc2hvdWxkIGJl IHB1c2hlZCBkb3duIHRvIGEgcmVtb3RlIHNlcnZlciBzbworICAgIHRoYXQgaXQgY2FuIGJlIGlt cGxlbmVudGVkIGFzIGEgc2luZ2xlIDxsaXRlcmFsPkZvcmVpZ24gU2NhbjwvbGl0ZXJhbD4uCisg ICAgU3BlY2lmeWluZyA8bGl0ZXJhbD5GT1JFSUdOX1NDQU48L2xpdGVyYWw+IGZvciBhIHNpbmds ZSBmb3JlaWduIHRhYmxlIGlzCisgICAgbmVpdGhlciBuZWNlc3Nhcnkgbm9yIHBlcm1pc3NpYmxl OiBhIDxsaXRlcmFsPkZvcmVpZ24gU2NhbjwvbGl0ZXJhbD4gd2lsbAorICAgIG5lZWQgdG8gYmUg dXNlZCByZWdhcmRsZXNzLiBJZiB5b3Ugd2FudCB0byBwcmV2ZW50IGEgam9pbiBmcm9tIGJlaW5n CisgICAgcHVzaGVkIGRvd24sIGNvbnNpZGVyIHVzaW5nIHRoZSA8bGl0ZXJhbD5KT0lOX09SREVS PC9saXRlcmFsPiB0YWcgZm9yCisgICAgdGhhdCBwdXJwb3NlLgorICAgPC9wYXJhPgorCisgICA8 cGFyYT4KKyAgICA8bGl0ZXJhbD5CSVRNQVBfSEVBUF9TQ0FOPC9saXRlcmFsPiBzcGVjaWZpZXMg dGhhdCBlYWNoIHRhcmdldCB0YWJsZQorICAgIHNob3VsZCBiZSBzY2FubmVkIHVzaW5nIGEgPGxp dGVyYWw+Qml0bWFwIEhlYXAgU2NhbjwvbGl0ZXJhbD4uIFRoZQorICAgIDxsaXRlcmFsPmJpdG1h cF90YXJnZXQ8L2xpdGVyYWw+IGlzIGN1cnJlbnRseSBzeW50YXgtY2hlY2tlZCBhbmQgdGhlbgor ICAgIGlnbm9yZWQsIHdoaWNoIGlzIGJ1c3RlZC4gWFhYOiBGSVhNRSBzb21laG93LgorICAgPC9w YXJhPgorCisgICA8cGFyYT4KKyAgICBUaGUgcGxhbm5lciBzdXBwb3J0cyBtYW55IHR5cGVzIG9m IHNjYW5zIG90aGVyIHRoYW4gdGhvc2UgbGlzdGVkIGhlcmU7CisgICAgaG93ZXZlciwgaW4gbW9z dCBvZiB0aG9zZSBjYXNlcywgdGhlcmUgaXMgbm8gbWVhbmluZ2Z1bCBkZWNpc2lvbiB0byBiZQor ICAgIG1hZGUsIGFuZCBoZW5jZSBubyBuZWVkIGZvciBhZHZpY2UuIEZvciBleGFtcGxlLCB0aGUg b3V0cHV0IG9mIGEKKyAgICBzZXQtcmV0dXJuaW5nIGZ1bmN0aW9uIHRoYXQgYXBwZWFycyBpbiB0 aGUgPGxpdGVyYWw+RlJPTTwvbGl0ZXJhbD4gY2xhdXNlCisgICAgY2FuIG9ubHkgZXZlciBiZSBz Y2FubmVkIHVzaW5nIGEgPGxpdGVyYWw+RnVuY3Rpb24gU2NhbjwvbGl0ZXJhbD4sIHNvCisgICAg dGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgZm9yIGFkdmljZSB0byBjaGFuZ2UgYW55dGhpbmcuCisg ICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKworICA8c2VjdDMgaWQ9InBncGxhbmFkdmljZS1qb2lu LW9yZGVyIj4KKyAgPHRpdGxlPkpvaW4gT3JkZXIgQWR2aWNlPC90aXRsZT4KKyAgIDxzeW5vcHNp cz4KK0pPSU5fT1JERVIoPHJlcGxhY2VhYmxlPmpvaW5fb3JkZXJfaXRlbTwvcmVwbGFjZWFibGU+ IFsgLi4uIF0pCisKKzxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlPmpvaW5fb3JkZXJfaXRlbTwv cmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgorCis8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwv cmVwbGFjZWFibGU+IHwKKyggPHJlcGxhY2VhYmxlPmpvaW5fb3JkZXJfaXRlbTwvcmVwbGFjZWFi bGU+IFsgLi4uIF0gKSB8Cit7IDxyZXBsYWNlYWJsZT5qb2luX29yZGVyX2l0ZW08L3JlcGxhY2Vh YmxlPiBbIC4uLiBdIH08L3N5bm9wc2lzPgorCisgICA8cGFyYT4KKyAgICBXaGVuIDxsaXRlcmFs PkpPSU5fT1JERVI8L2xpdGVyYWw+IGlzIHVzZWQgd2l0aG91dCBhbnkgc3VibGlzdHMsIGl0Cisg ICAgc3BlY2lmaWVzIGFuIG91dGVyLWRlZXAgam9pbiB3aXRoIHRoZSBmaXJzdCBhZHZpY2UgdGFy Z2V0IGFzIHRoZSBkcml2aW5nCisgICAgdGFibGUsIGpvaW5lZCB0byBlYWNoIHN1YnNlcXVlbnQg YWR2aWNlIHRhcmdldCBpbiB0dXJuIGluIHRoZSBvcmRlcgorICAgIHNwZWNpZmllZC4gRm9yIGlu c3RhbmNlLCA8bGl0ZXJhbD5KT0lOX09SREVSKGEgYiBjKTwvbGl0ZXJhbD4gbWVhbnMgdGhhdAor ICAgIDxsaXRlcmFsPmE8L2xpdGVyYWw+IHNob3VsZCBiZSB0aGUgZHJpdmluZyB0YWJsZSwgYW5k IHRoYXQgaXQgc2hvdWxkIGJlCisgICAgam9pbmVkIGZpcnN0IHRvIDxsaXRlcmFsPmI8L2xpdGVy YWw+IGFuZCB0aGVuIHRvIDxsaXRlcmFsPmM8L2xpdGVyYWw+LgorICAgIElmIHRoZXJlIGFyZSBt b3JlIHRhYmxlcyBpbiB0aGUgcXVlcnkgdGhhbiA8bGl0ZXJhbD5hPC9saXRlcmFsPiwKKyAgICA8 bGl0ZXJhbD5iPC9saXRlcmFsPiwgYW5kIDxsaXRlcmFsPmM8L2xpdGVyYWw+LCB0aGUgcmVzdCBj YW4gYmUgam9pbmVkCisgICAgYWZ0ZXJ3YXJkcyBpbiBhbnkgbWFubmVyLgorICAgPC9wYXJhPgor CisgICA8cGFyYT4KKyAgICBJZiBhIDxsaXRlcmFsPkpPSU5fT1JERVI8L2xpdGVyYWw+IGxpc3Qg Y29udGFpbnMgYSBwYXJlbnRoZXNpemVkIHN1Ymxpc3QsCisgICAgaXQgc3BlY2lmaWVzIGEgbm9u LW91dGVyLWRlZXAgam9pbi4gVGhlIHRhYmxlcyBpbiB0aGUgc3VibGlzdCBtdXN0IGZpcnN0Cisg ICAgYmUgam9pbmVkIHRvIGVhY2ggb3RoZXIgbXVjaCBhcyBpZiB0aGUgc3VibGlzdCB3ZXJlIGEg dG9wbGV2ZWwKKyAgICA8bGl0ZXJhbD5KT0lOX09SREVSPC9saXRlcmFsPiBsaXN0LCBhbmQgdGhl IHJlc3VsdGluZyBqb2luIHByb2R1Y3QgbXVzdAorICAgIHRoZW4gYXBwZWFyIG9uIHRoZSBpbm5l ciBzaWRlIG9mIGEgam9pbiBhdCB0aGUgYXBwcm9wcmlhdGUgcG9pbnQgaW4gdGhlCisgICAgam9p biBvcmRlci4gRm9yIGV4YW1wbGUsIDxsaXRlcmFsPkpPSU5fT1JERVIoYSAoYiBjKSBkKTwvbGl0 ZXJhbD4gcmVxdWlyZXMKKyAgICBhIHBsYW4gb2YgdGhpcyBmb3JtOgorICAgPC9wYXJhPgorCis8 cHJvZ3JhbWxpc3Rpbmc+CitKb2luCisgIC0+ICBKb2luCisgICAgICAgIC0+IFNjYW4gb24gYQor ICAgICAgICAtPiBKb2luCisgICAgICAgICAgICAgLT4gU2NhbiBvbiBiCisgICAgICAgICAgICAg LT4gU2NhbiBvbiBjCisgIC0+ICBTY2FuIG9uIGQKKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgIDxw YXJhPgorICAgIElmIGEgPGxpdGVyYWw+Sk9JTl9PUkRFUjwvbGl0ZXJhbD4gbGlzdCBjb250YWlu cyBhIHN1Ymxpc3Qgc3Vycm9uZGVkIGJ5CisgICAgY3VybHkgYnJhY2VzLCB0aGlzIGFsc28gc3Bl Y2lmaWVzIGEgbm9uLW91dGVyLWRlZXAgam9pbi4gSG93ZXZlciwgdGhlIGpvaW4KKyAgICBvcmRl ciB3aXRoaW4gdGhlIHN1Ymxpc3QgaXMgbm90IGNvbnN0cmFpbmVkLiBGb3IgZXhhbXBsZSwgc3Bl Y2lmaXlpbmcKKyAgICA8bGl0ZXJhbD5KT0lOX09SREVSKGEge2IgY30gZDwvbGl0ZXJhbD4gd291 bGQgYWxsb3cgdGhlIHNjYW5zIG9mCisgICAgPGxpdGVyYWw+YjwvbGl0ZXJhbD4gYW5kIDxsaXRl cmFsPmM8L2xpdGVyYWw+IHRvIGJlIHN3YXBwZWQgaW4gdGhlCisgICAgcHJldmlvdXMgZXhhbXBs ZSwgd2hpY2ggaXMgbm90IGFsbG93ZWQgd2hlbiBwYXJlbnRoZXNlIGFyZSB1c2VkLgorICAgPC9w YXJhPgorCisgICA8cGFyYT4KKyAgICBQYXJlbnRoZXNpemVkIHN1Ymxpc3RzIGNhbiBiZSBhcmJp dHJhcmlseSBuZXN0ZWQsIGJ1dCBzdWJsaXN0cyBzdXJyb3VuZGVkCisgICAgYnkgY3VybHkgYnJh Y2VzIGNhbm5vdCB0aGVtc2VsdmVzIGNvbnRhaW4gc3VibGlzdHMuCisgICA8L3BhcmE+CisKKyAg IDxwYXJhPgorICAgIE11bHRpcGxlIGluc3RhbmNlcyBvZiA8bGl0ZXJhbD5KT0lOX09SREVSKCk8 L2xpdGVyYWw+IGNhbiBzb21ldGltZXMgYmUKKyAgICBuZWVkZWQgaW4gb3JkZXIgdG8gZnVsbHkg Y29uc3RyYWludCB0aGUgam9pbiBvcmRlci4gVGhpcyBvY2N1cnMgd2hlbiB0aGVyZQorICAgIGFy ZSBtdWx0aXBsZSBqb2luIHByb2JsZW1zIHRoYXQgYXJlIG9wdGltaXplZCBzZXBhcmF0ZWx5IGJ5 IHRoZSBwbGFubmVyLgorICAgIFRoaXMgY2FuIGhhcHBlbiBkdWUgdG8gdGhlIHByZXNlbmNlIG9m IHN1YnF1ZXJpZXMsIG9yIGJlY2F1c2UgdGhlcmUgaXMgYQorICAgIHBhcnRpdGlvbndpc2Ugam9p bi4gSW4gdGhlIGxhdHRlciBjYXNlLCBlYWNoIGJyYW5jaCBvZiB0aGUgcGFydGl0aW9ud2lzZQor ICAgIGpvaW4gY2FuIGhhdmUgaXRzIG93biBqb2luIG9yZGVyLCBpbmRlcGVuZGVudCBvZiBldmVy eSBvdGhlciBicmFuY2guCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKworICA8c2VjdDMgaWQ9 InBncGxhbmFkdmljZS1qb2luLW1ldGhvZCI+CisgIDx0aXRsZT5Kb2luIE1ldGhvZCBBZHZpY2U8 L3RpdGxlPgorICAgPHN5bm9wc2lzPgoram9pbl9tZXRob2RfbmFtZSg8cmVwbGFjZWFibGU+am9p bl9tZXRob2RfaXRlbTwvcmVwbGFjZWFibGU+IFsgLi4uIF0pCisKKzxwaHJhc2U+d2hlcmUgPHJl cGxhY2VhYmxlPmpvaW5fbWV0aG9kX25hbWU8L3JlcGxhY2VhYmxlPiBpczo8L3BocmFzZT4KKwor eyBNRVJHRV9KT0lOX01BVEVSSUFMSVpFIHwgTUVSR0VfSk9JTl9QTEFJTiB8IE5FU1RFRF9MT09Q X01BVEVSSUFMSVpFIHwgTkVTVEVEX0xPT1BfUExBSU4gfCBIQVNIX0pPSU4gfQorCis8cGhyYXNl PmFuZCA8cmVwbGFjZWFibGU+am9pbl9tZXRob2RfaXRlbTwvcmVwbGFjZWFibGU+IGlzOjwvcGhy YXNlPgorCis8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+IHwKKyggPHJl cGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdICkgfTwvc3lub3Bz aXM+CisKKyAgIDxwYXJhPgorICAgIEpvaW4gbWV0aG9kIGFkdmljZSBzcGVjaWZpZXMgdGhlIHRh YmxlLCBvciBzZXQgb2YgdGFibGVzLCB0aGF0IHNob3VsZAorICAgIGFwcGVhciBvbiB0aGUgaW5u ZXIgc2lkZSBvZiBhIGpvaW4gdXNpbmcgdGhlIG5hbWVkIGpvaW4gbWV0aG9kLiBGb3IKKyAgICBl eGFtcGxlLCA8bGl0ZXJhbD5IQVNIX0pPSU4oYSBiKTwvbGl0ZXJhbD4gbWVhbnMgdGhhdCBlYWNo IG9mCisgICAgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPmI8L2xpdGVyYWw+IHNo b3VsZCBhcHBlYXIgb24gdGhlIGlubmVyCisgICAgc2lkZSBvZiBhIGhhc2ggam9pbjsgYSBjb25m aXJtaW5nIHBsYW4gbXVzdCBjb250YWluIGF0IGxlYXN0IHR3byBoYXNoCisgICAgam9pbnMsIG9u ZSBvZiB3aGljaCBoYXMgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gYW5kIG5vdGhpbmcgZWxzZSBvbiB0 aGUKKyAgICBpbm5lciBzaWRlLCBhbmQgdGhlIG90aGVyIG9mIHdoaWNoIGhhcyA8bGl0ZXJhbD5i PC9saXRlcmFsPiBhbmQgbm90aGluZworICAgIGVsc2Ugb24gdGhlIGlubmVyIHNpZGUuIE9uIHRo ZSBvdGhlciBoYW5kLAorICAgIDxsaXRlcmFsPkhBU0hfSk9JTigoYSBiKSk8L2xpdGVyYWw+IG1l YW5zIHRoYXQgdGhlIGpvaW4gcHJvZHVjdCBvZgorICAgIDxsaXRlcmFsPmE8L2xpdGVyYWw+IGFu ZCA8bGl0ZXJhbD5iPC9saXRlcmFsPiBzaG91bGQgYXBwZWFyIHRvZ2V0aGVyCisgICAgb24gdGhl IGlubmVyIHNpZGUgb2YgYSBhIHNpbmdsZSBoYXNoIGpvaW4uCisgICA8L3BhcmE+CisKKyAgIDxw YXJhPgorICAgIE5vdGUgdGhhdCBqb2luIG1ldGhvZCBhZHZpY2UgaW1wbGllcyBhIG5lZ2F0aXZl IGpvaW4gb3JkZXIgY29uc3RyYWludC4KKyAgICBTaW5jZSB0aGUgbmFtZWQgdGFibGUgb3IgdGFi bGVzIG11c3QgYmUgb24gdGhlIGlubmVyIHNpZGUgb2YgYSBqb2luIHVzaW5nCisgICAgdGhlIHNw ZWNpZmllZCBtZXRob2QsIG5vbmUgb2YgdGhlbSBjYW4gYmUgdGhlIGRyaXZpbmcgdGFibGUgZm9y IHRoZSBlbnRpcmUKKyAgICBqb2luIHByb2JsZW0uIE1vcmVvdmVyLCBubyB0YWJsZSBpbnNpZGUg dGhlIHNldCBzaG91bGQgYmUgam9pbmVkIHRvIGFueQorICAgIHRhYmxlIG91dHNpZGUgdGhlIHNl dCB1bnRpbCBhbGwgdGFibGVzIHdpdGhpbiB0aGUgc2V0IGhhdmUgYmVlbiBqb2luZWQgdG8KKyAg ICBlYWNoIG90aGVyLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGFkdmljZSBzcGVjaWZpZXMKKyAgICA8 bGl0ZXJhbD5IQVNIX0pPSU4oKGEgYikpPC9saXRlcmFsPiBhbmQgdGhlIHN5c3RlbSBiZWdpbnMg Ynkgam9pbmluZyBlaXRoZXIKKyAgICBvZiB0aG9zZSB0YWJsZXMgdG8gc29tZSB0aGlyZCB0YWJs ZSA8bGl0ZXJhbD5jPC9saXRlcmFsPiwgdGhlIHJlc3VsdGluZworICAgIHBsYW4gY291bGQgbmV2 ZXIgYmUgY29tcGxpYW50IHdpdGggdGhlIHJlcXVlc3QgdG8gcHV0IGV4YWN0bHkgdGhvc2UgdHdv CisgICAgdGFibGVzIG9uIHRoZSBpbm5lciBzaWRlIG9mIGEgaGFzaCBqb2luLiBXaGVuIHVzaW5n IGJvdGggam9pbiBvcmRlciBhZHZpY2UKKyAgICBhbmQgam9pbiBtZXRob2QgYWR2aWNlIGZvciB0 aGUgc2FtZSBxdWVyeSwgaXQgaXMgYSBnb29kIGlkZWEgdG8gbWFrZSBzdXJlCisgICAgdGhhdCB0 aGV5IGRvIG5vdCBtYW5kYXRlIGluY29tcGF0aWJsZSBqb2luIG9yZGVycy4KKyAgIDwvcGFyYT4K KworICA8L3NlY3QzPgorCisgIDxzZWN0MyBpZD0icGdwbGFuYWR2aWNlLXBhcnRpdGlvbndpc2Ui PgorICA8dGl0bGU+UGFydGl0aW9ud2lzZSBBZHZpY2U8L3RpdGxlPgorICAgPHN5bm9wc2lzPgor UEFSVElUSU9OV0lTRSg8cmVwbGFjZWFibGU+cGFydGl0aW9ud2lzZV9pdGVtPC9yZXBsYWNlYWJs ZT4gWyAuLi4gXSkKKworPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGU+cGFydGl0aW9ud2lzZV9p dGVtPC9yZXBsYWNlYWJsZT4gaXM6PC9waHJhc2U+CisKKzxyZXBsYWNlYWJsZT5hZHZpY2VfdGFy Z2V0PC9yZXBsYWNlYWJsZT4gfAorKCA8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFj ZWFibGU+IFsgLi4uIF0gKSB9PC9zeW5vcHNpcz4KKworICAgPHBhcmE+CisgICAgV2hlbiBhcHBs aWVkIHRvIGEgc2luZ2xlIHRhcmdldCwgPGxpdGVyYWw+UEFSVElUSU9OV0lTRTwvbGl0ZXJhbD4K KyAgICBzcGVjaWZpZXMgdGhhdCB0aGUgc3BlY2lmaWVkIHRhYmxlIHNob3VsZCBub3QgYmUgcGFy dCBvZiBhbnkgcGFydGl0aW9ud2lzZQorICAgIGpvaW4uIFdoZW4gYXBwbGllZCB0byBhIGxpc3Qg b2YgdGFyZ2V0cywgPGxpdGVyYWw+UEFSVElUSU9OV0lTRTwvbGl0ZXJhbD4KKyAgICBzcGVjaWZp ZXMgdGhhdCBleGFjdGx5IHRoYXQgc2V0IG9mIHRhYmxlcyBzaG91bGQgYmUgam9pbmVkIGluCisg ICAgcGFydGl0aW9ud2lzZSBmYXNoaW9uLiBOb3RlIHRoYXQsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBh ZHZpY2UgaXMgc3BlY2lmaWVkLAorICAgIG5vIHBhcnRpdGlvbndpc2Ugam9pbnMgd2lsbCBiZSBw b3NzaWJsZSBpZgorICAgIDxsaXRlcmFsPmVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gPSBvZmY8 L2xpdGVyYWw+LgorICAgPC9wYXJhPgorCisgIDwvc2VjdDM+CisKKyAgPHNlY3QzIGlkPSJwZ3Bs YW5hZHZpY2Utc2VtaWpvaW4tdW5pcXVlIj4KKyAgPHRpdGxlPlNlbWlqb2luIFVuaXF1ZW5lc3Mg QWR2aWNlPC90aXRsZT4KKyAgIDxzeW5vcHNpcz4KK1NFTUlKT0lOX1VOSVFVRSg8cmVwbGFjZWFi bGU+c2pfdW5pcXVlX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorU0VNSUpPSU5fTk9OX1VO SVFVRSg8cmVwbGFjZWFibGU+c2pfdW5pcXVlX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQor Cis8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZT5zal91bmlxdWVfaXRlbTwvcmVwbGFjZWFibGU+ IGlzOjwvcGhyYXNlPgorCis8cmVwbGFjZWFibGU+YWR2aWNlX3RhcmdldDwvcmVwbGFjZWFibGU+ IHwKKyggPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiBbIC4uLiBdICkg fTwvc3lub3BzaXM+CisKKyAgIDxwYXJhPgorICAgIFRoZSBwbGFubmVyIHNvbWV0aW1lcyBoYXMg YSBjaG9pY2UgYmV0d2VlbiBpbXBsZW1lbnRpbmcgYSBzZW1pam9pbgorICAgIGRpcmVjdGx5IGFu ZCBpbXBsZW1lbW50aW5nIGEgc2VtaWpvaW4gYnkgbWFraW5nIHRoZSBudWxsYWJsZSBzaWRlIHVu aXF1ZQorICAgIGFuZCB0aGVuIHBlcmZvcm1pbmcgYW4gaW5uZXIgam9pbi4gPGxpdGVyYWw+U0VN SUpPSU5fVU5JUVVFPC9saXRlcmFsPgorICAgIHNwZWNpZmllcyB0aGUgbGF0dGVyIHN0cmF0ZWd5 LCB3aGlsZSA8bGl0ZXJhbD5TRU1JSk9JTl9OT05fVU5JUVVFPC9saXRlcmFsPgorICAgIHNwZWNp ZmllcyB0aGUgZm9ybWVyIHN0cmF0ZWd5LiBJbiBlaXRoZXIgY2FzZSwgdGhlIGFyZ3VtZW50IGlz IHRoZSBzaW5nbGUKKyAgICB0YWJsZSBvciBsaXN0IG9mIHRhYmxlcyB0aGF0IGFwcGVhciBiZW5l YXRoIHRoZSBudWxsYWJsZSBzaWRlIG9mIHRoZSBqb2luLgorICAgPC9wYXJhPgorCisgIDwvc2Vj dDM+CisKKyAgPHNlY3QzIGlkPSJwZ3BsYW5hZHZpY2UtcGFyYWxsZWwtcXVlcnlqIj4KKyAgPHRp dGxlPlBhcmFsbGVsIFF1ZXJ5IEFkdmljZTwvdGl0bGU+CisgICA8c3lub3BzaXM+CitHQVRIRVIo PHJlcGxhY2VhYmxlPmdhdGhlcl9pdGVtPC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkKK0dBVEhFUl9N RVJHRSg8cmVwbGFjZWFibGU+Z2F0aGVyX2l0ZW08L3JlcGxhY2VhYmxlPiBbIC4uLiBdKQorTk9f R0FUSEVSKDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSkK KworPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGU+Z2F0aGVyX2l0ZW08L3JlcGxhY2VhYmxlPiBp czo8L3BocmFzZT4KKworPHJlcGxhY2VhYmxlPmFkdmljZV90YXJnZXQ8L3JlcGxhY2VhYmxlPiB8 CisoIDxyZXBsYWNlYWJsZT5hZHZpY2VfdGFyZ2V0PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSApIH08 L3N5bm9wc2lzPgorCisgICA8cGFyYT4KKyAgICA8bGl0ZXJhbD5HQVRIRVI8L2xpdGVyYWw+IG9y IDxsaXRlcmFsPkdBVEhFUl9NRVJHRTwvbGl0ZXJhbD4gc3BlY2lmaWVzCisgICAgdGhhdCA8bGl0 ZXJhbD5HYXRoZXI8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkdhdGhlciBNZXJnZTwvbGl0ZXJhbD4s CisgICAgcmVzcGVjdGl2ZWx5LCBzaG91bGQgYmUgcGxhY2VkIG9uIHRvcCBvZiB0aGUgc2luZ2xl IHRhYmxlIHNwZWNpZmllZCBhcworICAgIGEgdGFyZ2V0LCBvciBvbiB0b3Agb2YgdGhlIGpvaW4g YmV0d2VlbiB0aGUgbGlzdCBvZiB0YWJsZXMgc3BlY2lmaWVkIGFzCisgICAgYSB0YXJnZXQuIFRo aXMgbWVhbnMgdGhhdCA8bGl0ZXJhbD5HQVRIRVIoYSBiIGMpPC9saXRlcmFsPiBpcyBhIHJlcXVl c3QKKyAgICBmb3IgdGhyZWUgZGlmZmVyZW50IDxsaXRlcmFsPkdhdGhlcjwvbGl0ZXJhbD4gbm9k ZXMsIHdoaWxlCisgICAgPGxpdGVyYWw+R0FUSEVSKChhIGIgYykpPC9saXRlcmFsPiBpcyBhIHJl cXVlc3QgZm9yIGEgc2luZ2xlCisgICAgPGxpdGVyYWw+R2F0aGVyPC9saXRlcmFsPiBub2RlIG9u IHRvcCBvZiBhIDMtd2F5IGpvaW4uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxsaXRl cmFsPk5PX0dBVEhFUjwvbGl0ZXJhbD4gc3BlY2lmaWVzIHRoYXQgbm9uZSBvZiB0aGUgdGFibGVz IGdpdmVuCisgICAgYXMgYXJndW1lbnRzIHNob3VsZCBhcHBlYXIgYmVuZWF0aCBhIDxsaXRlcmFs PkdhdGhlcjwvbGl0ZXJhbD4gb3IKKyAgICA8bGl0ZXJhbD5HYXRoZXIgTWVyZ2U8L2xpdGVyYWw+ IG5vZGUuCisgICA8L3BhcmE+CisKKyAgPC9zZWN0Mz4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIg aWQ9InBncGxhbmFkdmljZS1mZWVkYmFjayI+CisgIDx0aXRsZT5BZHZpY2UgRmVlZGJhY2s8L3Rp dGxlPgorCisgIDxwYXJhPgorICAgPGxpdGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gcHJvdmlkZXMg ZmVlZGJhY2sgb24gd2hldGhlciBzdXBwbGllZCBhZHZpY2Ugd2FzCisgICBzdWNjZXNzZnVsbHkg YXBwbGllZCB0byB0aGUgcXVlcnkgaW4gdGhlIGZvcm0gb2YgYSBjb21tZW50IG9uIGVhY2ggcGll Y2UKKyAgIG9mIHN1cHBsaWVkIGFkdmljZS4gRm9yIGV4YW1wbGU6CisgIDwvcGFyYT4KKworPHBy b2dyYW1saXN0aW5nPgorU0VUIHBnX3BsYW5fYWR2aWNlLmFkdmljZSA9ICdoYXNoX2pvaW4oZiBn KSBqb2luX29yZGVyKGYgZykgaW5kZXhfc2NhbihmIG5vX3N1Y2hfaW5kZXgpJzsKK1NFVAorcmhh YXM9IyBFWFBMQUlOIChDT1NUUyBPRkYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTRUxFQ1QgKiBGUk9NIGpvX2ZhY3QgZgorICAgICAgICBMRUZU IEpPSU4gam9fZGltMSBkMSBPTiBmLmRpbTFfaWQgPSBkMS5pZAorICAgICAgICBMRUZUIEpPSU4g am9fZGltMiBkMiBPTiBmLmRpbTJfaWQgPSBkMi5pZAorICAgICAgICBXSEVSRSB2YWwxID0gMSBB TkQgdmFsMiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTgorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEhhc2ggSm9pbgorICAgSGFzaCBDb25kOiAoKGQxLmlkID0gZi5kaW0xX2lkKSBB TkQgKGQyLmlkID0gZi5kaW0yX2lkKSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIGpvX2RpbTIgZDIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHZhbDIgPSAx KQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gam9fZGltMSBkMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAodmFsMSA9IDEpCisg ICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGpvX2ZhY3QgZgorIFN1cHBsaWVk IFBsYW4gQWR2aWNlOgorICAgSU5ERVhfU0NBTihmIG5vX3N1Y2hfaW5kZXgpIC8qIG1hdGNoZWQs IGluYXBwbGljYWJsZSwgZmFpbGVkICovCisgICBIQVNIX0pPSU4oZikgLyogbWF0Y2hlZCAqLwor ICAgSEFTSF9KT0lOKGcpIC8qIG5vdCBtYXRjaGVkICovCisgICBKT0lOX09SREVSKGYgZykgLyog cGFydGlhbGx5IG1hdGNoZWQgKi8KKzwvcHJvZ3JhbWxpc3Rpbmc+CisKKyAgPHBhcmE+CisgICBG b3IgdGhpcyBxdWVyeSwgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4gaXMgYSB2YWxpZCBhZHZpY2UgdGFy Z2V0LCBidXQKKyAgIDxsaXRlcmFsPmc8L2xpdGVyYWw+IGlzIG5vdC4gVGhlcmVmb3JlLCB0aGUg cmVxdWVzdCB0byBwbGFjZQorICAgPGxpdGVyYWw+ZjwvbGl0ZXJhbD4gb24gdGhlIGlubmVyIHNp ZGUgb2YgYSBoYXNoIGpvaW4gaXMgbGlzdGVkIGFzCisgICA8bGl0ZXJhbD5tYXRjaGVkPC9saXRl cmFsPiwgYnV0IHRoZSByZXF1ZXN0IHRvIHBsYWNlIDxsaXRlcmFsPmc8L2xpdGVyYWw+CisgICBv biB0aGUgaW5uZXIgc2lkZSBvZiBhIGhhc2ggam9pbiBpcyBsaXN0ZWQgYXMKKyAgIDxsaXRlcmFs Pm5vdCBtYXRjaGVkPC9saXRlcmFsPi4gVGhlIDxsaXRlcmFsPkpPSU5fT1JERVI8L2xpdGVyYWw+ IGFkdmljZQorICAgdGFnIGludm9sdmVzIG9uZSB2YWxpZCB0YXJnZXQgYW5kIG9uZSBpbnZhbGQg dGFyZ2V0LCBhbmQgc28gaXMgbGlzdGVkIGFzCisgICA8bGl0ZXJhbD5wYXJ0aWFsbHkgbWF0Y2hl ZDwvbGl0ZXJhbD4uIE5vdGUgdGhhdAorICAgPGxpdGVyYWw+SEFTSF9KT0lOKGYgZyk8L2xpdGVy YWw+IGlzIGFjdHVhbGx5IGEgcmVxdWVzdCBmb3IgdHdvIGxvZ2ljYWxseQorICAgc2VwYXJhdGUg YmVoYXZpb3JzLCB3aGVyZWFzIDxsaXRlcmFsPkpPSU5fT1JERVIoZiBnKTwvbGl0ZXJhbD4gaXMg YSBzaW5nbGUKKyAgIHJlcXVlc3QuIFdoZW4gcHJvdmlkaW5nIGFkdmljZSBmZWVkYmFjaywgPGxp dGVyYWw+RVhQTEFJTjwvbGl0ZXJhbD4gc2hvd3MKKyAgIGVhY2ggbG9naWNhbCByZXF1ZXN0IHNl cGFydGVseSwgdG9nZXRoZXIgd2l0aCBhbGwgdGhlIGZlZWRiYWNrIGFwcGxpY2FibGUKKyAgIHRv IHRoYXQgcmVxdWVzdCB0eXBlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBZHZpY2UgZmVl ZGJhY2sgY2FuIGluY2x1ZGUgYW55IG9mIHRoZSBmb2xsbG93aW5nOgorICA8L3BhcmE+CisKKyAg PGl0ZW1pemVkbGlzdD4KKworICAgPGxpc3RpdGVtPgorICAgIDxwYXJhPgorICAgICA8bGl0ZXJh bD5tYXRjaGVkPC9saXRlcmFsPiBtZWFucyB0aGF0IGFsbCBvZiB0aGUgc3BlY2lmaWVkIGFkdmlj ZSB0YXJnZXRzCisgICAgIHdlcmUgb2JzZXJ2ZWQgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nLgorICAg IDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAg ICAgPGxpdGVyYWw+cGFydGlhbGx5IG1hdGNoZWQ8L2xpdGVyYWw+IG1lYW5zIHRoYXQgc29tZSBi dXQgbm90IGFsbCBvZiB0aGUKKyAgICAgc3BlY2lmaWVkIGFkdmljZSB0YXJnZXRlcyB3ZXJlIG9i c2VydmVkIGR1cmluZyBxdWVyeSBwbGFubmluZy4KKyAgICA8L3BhcmE+CisgICA8L2xpc3RpdGVt PgorCisgICA8bGlzdGl0ZW0+CisgICAgPHBhcmE+CisgICAgIDxsaXRlcmFsPm5vdCBtYXRjaGVk PC9saXRlcmFsPiBtZWFucyB0aGF0IG5vbmUgb2YgdGhlCisgICAgIHNwZWNpZmllZCBhZHZpY2Ug dGFyZ2V0cyB3ZXJlIG9ic2VydmVkIGR1cmluZyBxdWVyeSBwbGFubmluZy4gVGhpcyBtYXkKKyAg ICAgYmUgaGFwcGVuIGlmIHRoZSBhZHZpY2Ugc2ltcGx5IGRvZXNuJ3QgbWF0Y2ggdGhlIHF1ZXJ5 LCBvciBpdCBtYXkKKyAgICAgb2NjdXIgaWYgdGhlIHJlbGV2YW50IHBvcnRpb24gb2YgdGhlIHF1 ZXJ5IHdhcyBub3QgcGxhbm5lZCwgcGVyaGFwcworICAgICBiZWNhdXNlIGl0IHdhcyBnYXRlZCBi eSBhIGNvbmRpdGlvbiB0aGF0IHdhcyBzaW1wbGlmaWVkIHRvIGNvbnN0YW50IGZhbHNlLgorICAg IDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAgIDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAg ICAgPGxpdGVyYWw+aW5hcHBsaWNhYmxlPC9saXRlcmFsPiBtZWFucyB0aGF0IHRoZSBhZHZpY2Ug dGFnIGNvdWxkIG5vdAorICAgICBiZSBhcHBsaWVkIHRvIHRoZSBhZHZpY2UgdGFyZ2V0cyBmb3Ig c29tZSByZWFzb24uIEZvciBleGFtcGxlLCB0aGlzIHdpbGwKKyAgICAgaGFwcGVuIGlmIHRoZSB1 c2Ugb2YgYSBub25leGlzdGVudCBpbmRleCBpcyByZXF1ZXN0ZWQsIG9yIGlmIGFuIGF0dGVtcHQK KyAgICAgaXMgbWFkZSB0byBjb250cm9sIHNlbWlqb2luIHVuaXF1bmVzcyBmb3IgYSBub24tc2Vt aWpvaW4uCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4KKworICAgPGxpc3RpdGVtPgorICAg IDxwYXJhPgorICAgICA8bGl0ZXJhbD5jb25mbGljdGluZzwvbGl0ZXJhbD4gbWVhbnMgdGhhdCB0 d28gb3IgbW9yZSBwaWVjZXMgb2YgYWR2aWNlCisgICAgIHJlcXVlc3QgaW5jb21wYXRpYmxlIGJl aGF2aW9ycy4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhZHZpc2UgYSBzZXF1ZW50aWFsCisgICAgIHNj YW4gYW5kIGFuIGluZGV4IHNjYW4gZm9yIHRoZSBzYW1lIHRhYmxlLCBib3RoIHJlcXVlc3RzIHdp bGwgYmUgZmxhZ2dlZAorICAgICBhcyBjb25mbGljdGluZy4gVGhpcyBhbHNvIGNvbW1vbmx5IGhh cHBlbnMgaWYgam9pbiBtZXRob2QgYWR2aWNlIG9yCisgICAgIHNlbWlqb2luIHVuaXF1ZW5lc3Mg YWR2aWNlIGltcGxpZXMgYSBqb2luIG9yZGVyIGluY29tcGF0aWJsZSB3aXRoIHRoZQorICAgICBv bmUgZXhwbGljaXRseSBzcGVjaWZpZWQ7IHNlZQorICAgICA8eHJlZiBsaW5rZW5kPSJwZ3BsYW5h ZHZpY2Utam9pbi1tZXRob2QiIC8+LgorICAgIDwvcGFyYT4KKyAgIDwvbGlzdGl0ZW0+CisKKyAg IDxsaXN0aXRlbT4KKyAgICA8cGFyYT4KKyAgICAgPGxpdGVyYWw+ZmFpbGVkPC9saXRlcmFsPiBt ZWFucyB0aGF0IHF1ZXJ5IHBsYW4gZG9lcyBub3QgY29tcGx5IHdpdGgKKyAgICAgdGhlIGFkdmlj ZS4gVGhpcyBvbmx5IG9jY3VycyBmb3IgZW50cmllcyB0aGF0IGFyZSBhbHNvIHNob3duIGFzCisg ICAgIDxsaXRlcmFsPm1hdGNoZWQ8L2xpdGVyYWw+LiBJdCBmcmVxdWVudGx5IG9jY3VycyBmb3Ig ZW50cmllcyB0aGF0IGFyZQorICAgICBhbHNvIG1hcmtlZCBhcyA8bGl0ZXJhbD5jb25mbGljdGlu ZzwvbGl0ZXJhbD4gb3IKKyAgICAgPGxpdGVyYWw+aW5hcHBsaWNhYmxlPC9saXRlcmFsPi4gSG93 ZXZlciwgaXQgY2FuIGFsc28gb2NjdXIgd2hlbiB0aGUKKyAgICAgYWR2aWNlIGlzIHZhbGlkIGlu c29mYXIgYXMgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IGlzIGFibGUKKyAgICAg dG8gZGV0ZXJtaW5lLCBidXQgdGhlIHBsYW5uZXIgaXMgbm90IGFibGUgdG8gY29uc3RydWN0IGEg bGVnYWwKKyAgICAgcGxhbiB0aGF0IGNhbiBjb21wbHkgd2l0aCB0aGUgYWR2aWNlLiBJdCBpcyBp bXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZQorICAgICBzYW5pdHkgY2hlY2tzIHBlcmZvcm1lZCBi eSA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZTwvbGl0ZXJhbD4gYXJlIGZhaXJseQorICAgICBzdXBl cmZpY2lhbCBhbmQgZm9jdXNlZCBtb3N0bHkgb24gbG9va2luZyBmb3IgbG9naWNhbCBpbmNvbnNp c3RlbmNpZXMgaW4KKyAgICAgdGhlIGFkdmljZSBzdHJpbmc7IG9ubHkgdGhlIHBsYW5uZXIga25v d3Mgd2hhdCB3aWxsIGFjdHVhbGx5IHdvcmsuCisgICAgPC9wYXJhPgorICAgPC9saXN0aXRlbT4K KworICA8L2l0ZW1pemVkbGlzdD4KKworICA8cGFyYT4KKyAgIEFsbCBhZHZpY2Ugc2hvdWxkIGJl IG1hcmtlZCBhcyBleGFjdGx5IG9uZSBvZiA8bGl0ZXJhbD5tYXRjaGVkPC9saXRlcmFsPiwKKyAg IDxsaXRlcmFsPnBhcnRpYWxseSBtYXRjaGVkPC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+bm90IG1h dGNoZWQ8L2xpdGVyYWw+LgorICA8L3BhcmE+CisKKyA8L3NlY3QyPgorCisgPHNlY3QyIGlkPSJw Z3BsYW5hZHZpY2UtY29sbGVjdG9yIj4KKyAgPHRpdGxlPkFkdmljZSBDb2xsZWN0b3JzPC90aXRs ZT4KKworICA8cGFyYT4KKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBjYW4g YmUgY29uZmlndXJlZCB0byBhdXRvbWF0aWNhbGx5CisgICBnZW5lcmF0ZSBhZHZpY2UgZXZlcnkg dGltZSBhIHF1ZXJ5IGlzIHBsYW5uZWQgYW5kIHN0b3JlIHRoZSBxdWVyeSBhbmQKKyAgIHRoZSBn ZW5lcmF0ZWQgYWR2aWNlIHN0cmluZyBlaXRoZXIgaW4gbG9jYWwgb3Igc2hhcmVkIG1lbW9yeS4K KyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVG8gZW5hYmxlIGEgY29sbGVjdG9yLCB5b3UgbXVz dCBmaXJzdCBzZXQgYSBjb2xsZWN0aW9uIGxpbWl0LiBXaGVuIHRoZQorICAgbnVtYmVyIG9mIHF1 ZXJpZXMgZm9yIHdoaWNoIGFkdmljZSBoYXMgYmVlbiBzdG9yZWQgZXhjZWVkcyB0aGUgY29sbGVj dGlvbgorICAgbGltaXQsIHRoZSBvbGRlc3QgcXVlcmllcyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcg YWR2aWNlIHdpbGwgYmUgZGlzY2FyZGVkLgorICAgVGhlbiwgeW91IG11c3QgYWRqdXN0IGEgc2Vw YXJhdGUgc2V0dGluZyB0byBhY3R1YWxseSBlbmFibGUgYWR2aWNlCisgICBjb2xsZWN0aW9uLiBG b3IgdGhlIGxvY2FsIGNvbGxlY3Rvciwgc2V0IHRoZSBjb2xsZWN0aW9uIGxpbWl0IGJ5IGNvbmZp Z3VyaW5nCisgICA8bGl0ZXJhbD5wZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0 PC9saXRlcmFsPiB0byBhIHZhbHVlCisgICBncmVhdGVyIHRoYW4gemVybywgYW5kIHRoZW4gZW5h YmxlIGFkdmljZSBjb2xsZWN0aW9uIGJ5IHNldHRpbmcKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2 aWNlLmxvY2FsX2NvbGxlY3RvciA9IHRydWU8L2xpdGVyYWw+LiBGb3IgdGhlIHNoYXJlZAorICAg Y29sbGVjdG9yLCB0aGUgcHJvY2VkdXJlIGlzIHRoZSBzYW1lLCBleGNlcHQgdGhhdCB0aGUgbmFt ZXMgb2YgdGhlIHNldHRpbmdzCisgICBhcmUgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2Uuc2hhcmVk X2NvbGxlY3Rpb25fbGltaXQ8L2xpdGVyYWw+IGFuZAorICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZp Y2Uuc2hhcmVkX2NvbGxlY3RvcjwvbGl0ZXJhbD4uIE5vdGUgdGhhdCB0aGUgbG9jYWwKKyAgIGNv bGxlY3RvciBzdG9yZXMgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGluIGJhY2tlbmQt bG9jYWwgbWVtb3J5LAorICAgYW5kIHRoZSBzaGFyZWQgY29sbGVjdG9yIGRvZXMgdGhlIHNhbWUg aW4gZHluYW1pYyBzaGFyZWQgbWVtb3J5LCBzbworICAgY29uZmlndXJpbmcgbGFyZ2UgbGltaXRz IG1heSByZXN1bHQgaW4gY29uc2lkZXJhYmxlIG1lbW9yeSBjb25zdW1wdGlvbi4KKyAgPC9wYXJh PgorCisgIDxwYXJhPgorICAgT25jZSB0aGUgY29sbGVjdG9yIGlzIGVuYWJsZWQsIHlvdSBjYW4g cnVuIGFueSBxdWVyaWVzIGZvciB3aGljaCB5b3Ugd2lzaAorICAgdG8gc2VlIHRoZSBnZW5lcmF0 ZWQgcGxhbiBhZHZpY2UuIFRoZW4sIHlvdSBjYW4gZXhhbWluZSB3aGF0IGhhcyBiZWVuCisgICBj b2xsZWN0ZWQgdXNpbmcgd2hpY2hldmVyIG9mCisgICA8bGl0ZXJhbD5TRUxFQ1QgKiBGUk9NIHBn X2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCk8L2xpdGVyYWw+IG9yCisgICA8bGl0ZXJhbD5T RUxFQ1QgKiBGUk9NIHBnX2dldF9jb2xsZWN0ZWRfc2hhcmVkX2FkdmljZSgpPC9saXRlcmFsPgor ICAgY29ycmVzcG9uZHMgdG8gdGhlIGNvbGxlY3RvciB5b3UgZW5hYmxlZC4gVG8gZGlzY2FyZCB0 aGUgY29sbGVjdGVkIGFkdmljZQorICAgYW5kIHJlbGVhc2UgbWVtb3J5LCB5b3UgY2FuIGNhbGwK KyAgIDxsaXRlcmFsPnBnX2NsZWFyX2NvbGxlY3RlZF9sb2NhbF9hZHZpY2UoKTwvbGl0ZXJhbD4K KyAgIG9yIDxsaXRlcmFsPnBnX2NsZWFyX2NvbGxlY3RlZF9zaGFyZWRfYWR2aWNlKCk8L2xpdGVy YWw+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbiBhZGRpdGlvbiB0byB0aGUgcXVlcnkg dGV4dHMgYW4gYWR2aWNlIHN0cmluZ3MsIHRoZSBhZHZpY2UgY29sbGVjdG9ycworICAgd2lsbCBh bHNvIHN0b3JlIHRoZSBPSUQgb2YgdGhlIHJvbGUgdGhhdCBjYXVzZWQgdGhlIHF1ZXJ5IHRvIGJl IHBsYW5uZWQsCisgICB0aGUgT0lEIG9mIHRoZSBkYXRhYmFzZSBpbiB3aGljaCB0aGUgcXVlcnkg d2FzIHBsYW5uZWQsIHRoZSBxdWVyeSBJRCwKKyAgIGFuZCB0aGUgdGltZSBhdCB3aGljaCB0aGUg Y29sbGVjdGlvbiBvY2N1cnJlZC4gVGhpcyBtb2R1bGUgZG9lcyBub3QKKyAgIGF1dG9tYXRpY2Fs bHkgZW5hYmxlIHF1ZXJ5IElEIGNvbXB1dGF0aW9uOyB0aGVyZWZvcmUsIGlmIHlvdSB3YW50IHRo ZQorICAgcXVlcnkgSUQgdmFsdWUgdG8gYmUgcG9wdWxhdGVkIGluIGNvbGxlY3RlZCBhZHZpY2Us IGJlIHN1cmUgdG8gY29uZmlndXJlCisgICA8bGl0ZXJhbD5lbmFibGVfcXVlcnlfaWQgPSBvbjwv bGl0ZXJhbD4uIE90aGVyd2lzZSwgdGhlIHF1ZXJ5IElEIG1heQorICAgYWx3YXlzIHNob3cgYXMg PGxpdGVyYWw+MDwvbGl0ZXJhbD4uCisgIDwvcGFyYT4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIg aWQ9InBncGxhbmFkdmljZS1mdW5jdGlvbnMiPgorICA8dGl0bGU+RnVuY3Rpb25zPC90aXRsZT4K KworICA8cGFyYT4KKyAgIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgd2lsbCBvbmx5IGJlIGF2 YWlsYWJsZSBpZiB0aGUKKyAgIDxsaXRlcmFsPnBnX3BsYW5fYWR2aWNlPC9saXRlcmFsPiBleHRl bnNpb24gaGFzIGJlZW4gaW5zdGFsbGVkIGluIHRoZQorICAgY3VycmVudCBkYXRhYmFzZSwgd2hp Y2ggaXMgbm90IG1hbmRhdG9yeSwgc2luY2UgbXVjaCBvZiB0aGUgZnVuY3Rpb25hbGl0eQorICAg b2YgdGhpcyBtb2R1bGUgY2FuIGJlIHVzZWQgd2l0aG91dCBpbnN0YWxsaW5nIHRoZSBleHRlbnNp b24uCisgIDwvcGFyYT4KKworICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5Pgor ICAgIDx0ZXJtPgorICAgICA8ZnVuY3Rpb24+cGdfY2xlYXJfY29sbGVjdGVkX2xvY2FsX2Fkdmlj ZSgpIHJldHVybnMgdm9pZDwvZnVuY3Rpb24+CisgICAgIDxpbmRleHRlcm0+CisgICAgICA8cHJp bWFyeT5wZ19jbGVhcl9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2lu ZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAg ICAgUmVtb3ZlcyBhbGwgY29sbGVjdGVkIHF1ZXJ5IHRleHRzIGFuZCBhZHZpY2Ugc3RyaW5ncyBm cm9tIGJhY2tlbmQtbG9jYWwKKyAgICAgIG1lbW9yeS4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlz dGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVy bT4KKyAgICAgPGZ1bmN0aW9uPnBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlKCkgcmV0dXJu cyBzZXRvZiAoaWQgYmlnaW50LAorICAgICAgICB1c2VyaWQgb2lkLCBkYmlkIG9pZCwgcXVlcnlp ZCBiaWdpbnQsIGNvbGxlY3Rpb25fdGltZSB0aW1lc3RhbXB0eiwKKyAgICAgICAgcXVlcnkgdGV4 dCwgYWR2aWNlIHRleHQpPC9mdW5jdGlvbj4KKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmlt YXJ5PnBnX2dldF9jb2xsZWN0ZWRfbG9jYWxfYWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4 dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg UmV0dXJucyBhbGwgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIHN0b3JlZCBpbiB0aGUg bG9jYWwKKyAgICAgIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS1jb2xsZWN0b3IiPmFkdmlj ZSBjb2xsZWN0b3I8L2xpbms+LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwv dmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8ZnVu Y3Rpb24+cGdfY2xlYXJfY29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSByZXR1cm5zIHZvaWQ8L2Z1 bmN0aW9uPgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdfY2xlYXJfY29sbGVj dGVkX3NoYXJlZF9hZHZpY2U8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVy bT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBSZW1vdmVzIGFsbCBjb2xs ZWN0ZWQgcXVlcnkgdGV4dHMgYW5kIGFkdmljZSBzdHJpbmdzIGZyb20gc2hhcmVkCisgICAgICBt ZW1vcnkuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+ CisKKyAgIDx2YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDxmdW5jdGlvbj5wZ19nZXRf Y29sbGVjdGVkX3NoYXJlZF9hZHZpY2UoKSByZXR1cm5zIHNldG9mIChpZCBiaWdpbnQsCisgICAg ICAgIHVzZXJpZCBvaWQsIGRiaWQgb2lkLCBxdWVyeWlkIGJpZ2ludCwgY29sbGVjdGlvbl90aW1l IHRpbWVzdGFtcHR6LAorICAgICAgICBxdWVyeSB0ZXh0LCBhZHZpY2UgdGV4dCk8L2Z1bmN0aW9u PgorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+cGdfZ2V0X2NvbGxlY3RlZF9zaGFy ZWRfYWR2aWNlPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisKKyAg ICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgUmV0dXJucyBhbGwgcXVlcnkgdGV4dHMg YW5kIGFkdmljZSBzdHJpbmdzIHN0b3JlZCBpbiB0aGUgc2hhcmVkCisgICAgICA8bGluayBsaW5r ZW5kPSJwZ3BsYW5hZHZpY2UtY29sbGVjdG9yIj5hZHZpY2UgY29sbGVjdG9yPC9saW5rPi4KKyAg ICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICA8L3Zh cmlhYmxlbGlzdD4KKworIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9InBncGxhbmFkdmljZS1jb25m aWctcGFyYW1zIj4KKyAgPHRpdGxlPkNvbmZpZ3VyYXRpb24gUGFyYW1ldGVyczwvdGl0bGU+CisK KyAgPHZhcmlhYmxlbGlzdD4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAg PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UuYWR2aWNlPC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90 eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5f YWR2aWNlLmFkdmljZTwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+ CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAg PHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5hZHZpY2U8L3Zhcm5hbWU+IGlz IGFuIGFkdmljZSBzdHJpbmcgdG8gYmUKKyAgICAgIHVzZWQgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5n LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisg ICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5wZ19wbGFuX2Fkdmlj ZS5hbHdheXNfZXhwbGFpbl9zdXBwbGllZF9hZHZpY2U8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFu PC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3Bs YW5fYWR2aWNlLmFsd2F5c19leHBsYWluX3N1cHBsaWVkX2FkdmljZSA8L3Zhcm5hbWU+IGNvbmZp Z3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rl cm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZhcm5hbWU+cGdfcGxh bl9hZHZpY2UuYWx3YXlzX2V4cGxhaW5fc3VwcGxpZWRfYWR2aWNlPC92YXJuYW1lPiBjYXVzZXMK KyAgICAgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHRvIGFsd2F5cyBzaG93IGFueSBzdXBw bGllZCBhZHZpY2UgYW5kIHRoZQorICAgICAgYXNzb2NpYXRlZAorICAgICAgPGxpbmsgbGlua2Vu ZD0icGdwbGFuYWR2aWNlLWZlZWRiYWNrIj5hZHZpY2UgZmVlZGJhY2s8L2xpbms+LgorICAgICAg VGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4uIElmIHNldCB0bwor ICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCB0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUg ZGlzcGxheWVkIG9ubHkgd2hlbgorICAgICAgPGxpdGVyYWw+RVhQTEFJTiAoUExBTl9BRFZJQ0Up PC9saXRlcmFsPiBpcyB1c2VkLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwv dmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFy bmFtZT5wZ19wbGFuX2FkdmljZS5hbHdheXNfc3RvcmVfYWR2aWNlX2RldGFpbHM8L3Zhcm5hbWU+ ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5 Pjx2YXJuYW1lPnBnX3BsYW5fYWR2aWNlLmFsd2F5c19zdG9yZV9hZHZpY2VfZGV0YWlscyA8L3Zh cm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVy bT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPHZh cm5hbWU+cGdfcGxhbl9hZHZpY2UuYWx3YXlzX3N0b3JlX2FkdmljZV9kZXRhaWxzPC92YXJuYW1l PiBhbGxvd3MKKyAgICAgIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHRvIHNob3cgZGV0YWls cyByZWxhdGVkIHRvIHBsYW4gYWR2aWNlIGV2ZW4KKyAgICAgIHdoZW4gcHJlcGFyZWQgcXVlcmll cyBhcmUgdXNlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzCisgICAgICA8bGl0ZXJhbD5mYWxzZTwv bGl0ZXJhbD4uICBXaGVuIHBsYW5uaW5nIGEgcHJlcGFyZWQgcXVlcnksIHdlIGRvIG5vdAorICAg ICAga25vdyB3aGV0aGVyIDxsaXRlcmFsPkVYUExBSU48L2xpdGVyYWw+IHdpbGwgYmUgdXNlZCwg c28gYnkgZGVmYXVsdCwgdG8KKyAgICAgIHJlZHVjZSBvdmVyaGVhZCwgd2UgZG8gbm90IGdlbmVy YXRlIHBsYW4gYWR2aWNlLCBhbmQgd2UgZG8gbm90IGdlbmVyYXRlCisgICAgICBmZWVkYmFjayBv biBzdXBwbGllZCBhZHZpY2UuIFRoaXMgbWVhbnMgdGhhdCBpZgorICAgICAgPGxpdGVyYWw+RVhQ TEFJTiBFWEVDVVRFPC9saXRlcmFsPiBpcyBsYXRlciB1c2VkIG9uIHRoZSBwcmVwYXJlZCBxdWVy eSwKKyAgICAgIGl0IHdpbGwgbm90IGJlIGFibGUgdG8gc2hvdyB0aGlzIGluZm9ybWF0aW9uLiBD aGFuZ2luZyB0aGlzIHNldHRpbmcgdG8KKyAgICAgIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+IGF2 b2lkcyB0aGlzIHByb2JsZW0sIGJ1dCBhZGRzIGFkZGl0aW9uYWwKKyAgICAgIG92ZXJoZWFkLiBJ dCBpcyBwcm9iYWJseSBhIGdvb2QgaWRlYSB0byBlbmFibGUgdGhpcyBvcHRpb24gb25seSBpbgor ICAgICAgc2Vzc2lvbnMgd2hlcmUgaXQgaXMgbmVlZGVkLCByYXRoZXIgdGhhbiBvbiBhIHN5c3Rl bS13aWRlIGJhc2lzLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlz dGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5w Z19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0b3I8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90 eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnBnX3BsYW5f YWR2aWNlLmxvY2FsX2NvbGxlY3RvcjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8 L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRl bT4KKyAgICAgPHBhcmE+CisgICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xs ZWN0b3I8L3Zhcm5hbWU+IGVuYWJsZXMgdGhlCisgICAgICBsb2NhbCA8bGluayBsaW5rZW5kPSJw Z3BsYW5hZHZpY2UtY29sbGVjdG9yIj5hZHZpY2UgY29sbGVjdG9yPC9saW5rPi4KKyAgICAgIFRo ZSBkZWZhdWx0IHZhbHVlIGlzIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRy eT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVj dGlvbl9saW1pdDwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0 ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UubG9jYWxfY29sbGVj dGlvbl9saW1pdDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+Cisg ICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBh cmE+CisgICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5sb2NhbF9jb2xsZWN0aW9uX2xpbWl0 PC92YXJuYW1lPiBzZXRzIHRoZQorICAgICAgbWF4aW11bSBudW1iZXIgb2YgcXVlcnkgdGV4dHMg YW5kIGFkdmljZSBzdHJpbmdzIHJldGFpbmVkIGJ5IHRoZQorICAgICAgbG9jYWwgPGxpbmsgbGlu a2VuZD0icGdwbGFuYWR2aWNlLWNvbGxlY3RvciI+YWR2aWNlIGNvbGxlY3RvcjwvbGluaz4uCisg ICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD4wPC9saXRlcmFsPi4KKyAgICAgPC9w YXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3Rl bnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2Nv bGxlY3RvcjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0ZXJt PgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rv cjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5k ZXh0ZXJtPgorICAgIDwvdGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAg ICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdG9yPC92YXJuYW1lPiBlbmFi bGVzIHRoZQorICAgICAgc2hhcmVkIDxsaW5rIGxpbmtlbmQ9InBncGxhbmFkdmljZS1jb2xsZWN0 b3IiPmFkdmljZSBjb2xsZWN0b3I8L2xpbms+LgorICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMg PGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LiAgT25seSBzdXBlcnVzZXJzIGFuZCB1c2VycworICAg ICAgd2l0aCB0aGUgYXBwcm9wcmlhdGUgPGxpdGVyYWw+U0VUPC9saXRlcmFsPiBwcml2aWxlZ2Ug Y2FuIGNoYW5nZSB0aGlzCisgICAgICBzZXR0aW5nLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJt PgorICAgICA8dmFybmFtZT5wZ19wbGFuX2FkdmljZS5zaGFyZWRfY29sbGVjdGlvbl9saW1pdDwv dmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAg PHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8 L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4 dGVybT4KKyAgICA8L3Rlcm0+CisKKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2Uuc2hhcmVkX2NvbGxlY3Rpb25fbGltaXQ8L3Zhcm5hbWU+ IHNldHMgdGhlCisgICAgICBtYXhpbXVtIG51bWJlciBvZiBxdWVyeSB0ZXh0cyBhbmQgYWR2aWNl IHN0cmluZ3MgcmV0YWluZWQgYnkgdGhlCisgICAgICBzaGFyZWQgPGxpbmsgbGlua2VuZD0icGdw bGFuYWR2aWNlLWNvbGxlY3RvciI+YWR2aWNlIGNvbGxlY3RvcjwvbGluaz4uCisgICAgICBUaGUg ZGVmYXVsdCB2YWx1ZSBpcyA8bGl0ZXJhbD4wPC9saXRlcmFsPi4gIE9ubHkgc3VwZXJ1c2VycyBh bmQgdXNlcnMKKyAgICAgIHdpdGggdGhlIGFwcHJvcHJpYXRlIDxsaXRlcmFsPlNFVDwvbGl0ZXJh bD4gcHJpdmlsZWdlIGNhbiBjaGFuZ2UgdGhpcworICAgICAgc2V0dGluZy4KKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRy eT4KKyAgICA8dGVybT4KKyAgICAgPHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UudHJhY2VfbWFzazwv dmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAg PHByaW1hcnk+PHZhcm5hbWU+cGdfcGxhbl9hZHZpY2UudHJhY2VfbWFzazwvdmFybmFtZT4gY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwv dGVybT4KKworICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIDx2YXJuYW1l PnBnX3BsYW5fYWR2aWNlLnRyYWNlX21hc2s8L3Zhcm5hbWU+IGlzCisgICAgICA8bGl0ZXJhbD50 cnVlPC9saXRlcmFsPiwgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IHdpbGwgcHJp bnQKKyAgICAgIG1lc3NhZ2VzIGR1cmluZyBxdWVyeSBwbGFubmluZyBlYWNoIHRpbWUgdGhhdAor ICAgICAgPGxpdGVyYWw+cGdfcGxhbl9hZHZpY2U8L2xpdGVyYWw+IGFsdGVycyB0aGUgbWFzayBv ZiBhbGxvd2FibGUgcXVlcnkKKyAgICAgIHBsYW4gdHlwZXMgaW4gcmVzcG9uc2UgdG8gc3VwcGxp ZWQgcGxhbiBhZHZpY2UuIFRoZSBkZWZhdWx0IHZhbHVlcyBpcworICAgICAgPGxpdGVyYWw+ZmFs c2U8L2xpdGVyYWw+LiBUaGUgbWVzc2FnZXMgcHJpbnRlZCBieSB0aGlzIHNldHRpbmcgYXJlIG5v dAorICAgICAgZXhjZXB0ZWQgdG8gYmUgdXNlZnVsIGV4Y2VwdCBmb3IgcHVycG9zZXMgb2YgZGVi dWdnaW5nIHRoaXMgbW9kdWxlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwv dmFybGlzdGVudHJ5PgorCisgIDwvdmFyaWFibGVsaXN0PgorCisgPC9zZWN0Mj4KKworIDxzZWN0 MiBpZD0icGdwbGFuYWR2aWNlLWF1dGhvciI+CisgIDx0aXRsZT5BdXRob3I8L3RpdGxlPgorCisg IDxwYXJhPgorICAgUm9iZXJ0IEhhYXMgPGVtYWlsPnJoYWFzQHBvc3RncmVzcWwub3JnPC9lbWFp bD4KKyAgPC9wYXJhPgorIDwvc2VjdDI+CisKKzwvc2VjdDE+CmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5s aXN0CmluZGV4IDc3ZTVmOGZkYzE2Li4wNjY0ZDk5NDQ5MCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZz Lmxpc3QKQEAgLTM5NzYsNiArMzk3Niw0NCBAQCBwZ191dWlkX3QKIHBnX3djaGFyCiBwZ193Y2hh cl90YmwKIHBncF9hcm1vcl9oZWFkZXJzX3N0YXRlCitwZ3BhX2NvbGxlY3RlZF9hZHZpY2UKK3Bn cGFfYWR2aWNlX2l0ZW0KK3BncGFfYWR2aWNlX3RhZ190eXBlCitwZ3BhX2FkdmljZV90YXJnZXQK K3BncGFfaWRlbnRpZmllcgorcGdwYV9pbmRleF90YXJnZXQKK3BncGFfaW5kZXhfdHlwZQorcGdw YV9pdG1fdHlwZQorcGdwYV9qb2luX2NsYXNzCitwZ3BhX2pvaW5fbWVtYmVyCitwZ3BhX2pvaW5f c3RhdGUKK3BncGFfam9pbl9zdHJhdGVneQorcGdwYV9qb2luX3Vucm9sbGVyCitwZ3BhX2xvY2Fs X2FkdmljZQorcGdwYV9sb2NhbF9hZHZpY2VfY2h1bmsKK3BncGFfb3V0cHV0X2NvbnRleHQKK3Bn cGFfcGxhbl93YWxrZXJfY29udGV4dAorcGdwYV9wbGFubmVyX3N0YXRlCitwZ3BhX3FmX3R5cGUK K3BncGFfcXVlcnlfZmVhdHVyZQorcGdwYV9yaV9jaGVja2VyCitwZ3BhX3JpX2NoZWNrZXJfa2V5 CitwZ3BhX3NjYW4KK3BncGFfc2Nhbl9zdHJhdGVneQorcGdwYV9zaGFyZWRfYWR2aWNlCitwZ3Bh X3NoYXJlZF9hZHZpY2VfY2h1bmsKK3BncGFfc2hhcmVkX3N0YXRlCitwZ3BhX3NqX3VuaXF1ZV9y ZWwKK3BncGFfdGFyZ2V0X3R5cGUKK3BncGFfdHJvdmUKK3BncGFfdHJvdmVfZW50cnkKK3BncGFf dHJvdmVfZW50cnlfZWxlbWVudAorcGdwYV90cm92ZV9lbnRyeV9oYXNoCitwZ3BhX3Ryb3ZlX2Vu dHJ5X2tleQorcGdwYV90cm92ZV9sb29rdXBfdHlwZQorcGdwYV90cm92ZV9yZXN1bHQKK3BncGFf dHJvdmVfc2xpY2UKK3BncGFfdW5yb2xsZWRfam9pbgogcGdzb2NrZXQKIHBnc3FsX3RoaW5nX3QK IHBnc3NFbnRyeQotLSAKMi41MS4wCgo= --000000000000748a9706494cb6bc--