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.94.2) (envelope-from ) id 1tOnvs-008pUi-NX for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Dec 2024 01:05:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tOnvq-0028Eq-E6 for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Dec 2024 01:05:26 +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.94.2) (envelope-from ) id 1tOnvp-0028Ed-CD for pgsql-hackers@lists.postgresql.org; Sat, 21 Dec 2024 01:05:25 +0000 Received: from mail-yb1-xb34.google.com ([2607:f8b0:4864:20::b34]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1tOnvm-000duM-D5 for pgsql-hackers@postgresql.org; Sat, 21 Dec 2024 01:05:23 +0000 Received: by mail-yb1-xb34.google.com with SMTP id 3f1490d57ef6-e460717039fso1985145276.0 for ; Fri, 20 Dec 2024 17:05:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1734743121; x=1735347921; darn=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=QhjxLOJAXhdUPiUqEUSCdU3qQ7JzAFOV7WZB1c+nCSU=; b=nAY8PPAikFORKksDJ8h5FK7JOksWo/Kjy6lBGqMbX/sdaeyZNOihyHrebMHpiNrcav Pu0YpjPvxfr2+WSpxzqTBXXIyfs0a5DpibvffmQgXo39dMAq0ywYT6dziMJVaIK880hP V55S/vUZQ7UKq+LW7zZkKsFD4JSIiMhplOcBU5wsTgHG76LyVG2N4p+ZiGSXJFRgAuur ZglNlM0s1SCXiaS4U+UHoVgO2QLOrba14zs0lVVJ+uT6vNff215rdP++/t4kD5GR3q7M byCHrO7S9BMFcnJb/DVVST+G1VyslRDj9dJQoejj3RaSsBn5B2BscJ2DXFk0QFGEtbYy YNow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1734743121; x=1735347921; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=QhjxLOJAXhdUPiUqEUSCdU3qQ7JzAFOV7WZB1c+nCSU=; b=TRPWmpUuPia0l1v2AmZndmOCzDrry9UK2Ade0qE+uv09/3FOOqb2BX1X4b3a+O0IK+ aF0Cx7UlexvYf62e16UBAS47Dw7Hrea5YBrEBt+jQLaFaW4JPm8CchyhMEpxnO8FA7c7 XLwSH2k4erELOsehmByWQX10Ekp4cT8UwlUrJizinbQsDbJCqXarnNI0aqSE+fkdDlW4 4uDa2c7Gq2OVO9MHZ0gNZroq6reGEGNak3HMqk29zmBe3oTAY7PqMk6rEBp4lr//tRhF qBpxc19kqyrzfdx02T7m7N3uu+gW7Oa3AiSFxtQ6pmY1OwfJu1eP6+396s4mnmPEBnmz 06nA== X-Forwarded-Encrypted: i=1; AJvYcCUk3+yYWQJFPU87YpoiJsVhwMn7VHPSkn0V8yGrKui+Kt/t4aiYVF3f1OTm4stbMmnf+UzMCNz6LE+cKoCM@postgresql.org X-Gm-Message-State: AOJu0Yyed7cb/OYY2ndfOCnR3+RUG8BomXuHFupDmNt0lC5uALCPJRyX m6bg//YZ7ywrKa+mMWlwUJfKVKwzQvhxjOHo+1LxhQ1qgACfyIzIlTLPLdL5UEjl25DI6I9M0UM 7JyaimoKf0xdN5rhF+fO+CpNomk1x4Sjm X-Gm-Gg: ASbGncsXV+W8HZ5nMWZA6YaiwUL3e/CfGZNatJYIfUvJc0tgGXaMm6Mn1TWvmcQEzvC UNEyOiGA4LK8SljWUj9pOMZwQm68lSyKgHVvMPPWpdq/OuOOdr8OBTpzlF0bik4b+EcPnAZvQ X-Google-Smtp-Source: AGHT+IEk3tA4d4Ghi6UKw6qq11dhPetuOK/FCFEXbxTFk1tMBKj/4fGrjlUd3z3uYBb8Bmq5QQmbraWsUBEs0HOR76A= X-Received: by 2002:a05:6902:138f:b0:e4a:ea18:b449 with SMTP id 3f1490d57ef6-e538c3d10c3mr4191781276.41.1734743121155; Fri, 20 Dec 2024 17:05:21 -0800 (PST) MIME-Version: 1.0 References: <87il22cj51.fsf@163.com> In-Reply-To: From: Richard Guo Date: Sat, 21 Dec 2024 10:05:09 +0900 Message-ID: Subject: Re: Eager aggregation, take 3 To: Robert Haas Cc: Tender Wang , Paul George , Andy Fan , PostgreSQL-development , pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="0000000000008391a90629bd5bb2" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008391a90629bd5bb2 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Dec 17, 2024 at 12:42=E2=80=AFPM Richard Guo wrote: > Attached is the patch rebased on the latest master. It refines the > theoretical justification for the correctness of this transformation > in README and commit message. It also adds the check for image > equality for all grouping keys used in partial aggregation, and fixes > the issue reported by Jian. It does not yet handle the RLS case > though. I've looked at the RLS case. AFAIU we want to prevent any non-leakproof aggregation functions from being pushed down past securityQuals. I added a check in create_agg_clause_infos to ensure that no aggregation is pushed down if securityQuals are present along with any non-leakproof aggregate functions. I know this might be overly strict, but for now, I want to focus on the eager aggregation transformation itself. We can relax this restriction in subsequent patches after this already large one. Attached is the latest patch, which also includes some cosmetic tweaks. I am seeking the possibility of pushing this by the end of January, so that I can have enough time to react to any bugs before the feature freeze. Thanks Richard --0000000000008391a90629bd5bb2 Content-Type: application/octet-stream; name="v15-0001-Implement-Eager-Aggregation.patch" Content-Disposition: attachment; filename="v15-0001-Implement-Eager-Aggregation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m4xh95cq0 RnJvbSAxMmYxMTA3OWM0NmVlNWQ3ZWM5YTI4NWJiMGQ2NjdmZDQ2MTcwM2VkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVHVlLCAxMSBKdW4gMjAyNCAxNTo1OToxOSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjE1 XSBJbXBsZW1lbnQgRWFnZXIgQWdncmVnYXRpb24KCkVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGEgcXVl cnkgb3B0aW1pemF0aW9uIHRlY2huaXF1ZSB0aGF0IHBhcnRpYWxseQpwdXNoZXMgYWdncmVnYXRp b24gcGFzdCBhIGpvaW4sIGFuZCBmaW5hbGl6ZXMgaXQgb25jZSBhbGwgdGhlCnJlbGF0aW9ucyBh cmUgam9pbmVkLiAgRWFnZXIgYWdncmVnYXRpb24gbWF5IHJlZHVjZSB0aGUgbnVtYmVyIG9mCmlu cHV0IHJvd3MgdG8gdGhlIGpvaW4gYW5kIHRodXMgY291bGQgcmVzdWx0IGluIGEgYmV0dGVyIG92 ZXJhbGwgcGxhbi4KCkEgcGxhbiB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIGxvb2tzIGxpa2U6Cgog RVhQTEFJTiAoQ09TVFMgT0ZGKQogU0VMRUNUIGEuaSwgYXZnKGIueSkKIEZST00gYSBKT0lOIGIg T04gYS5pID0gYi5qCiBHUk9VUCBCWSBhLmk7CgogRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQogICBH cm91cCBLZXk6IGEuaQogICAtPiAgTmVzdGVkIExvb3AKICAgICAgICAgLT4gIFBhcnRpYWwgSGFz aEFnZ3JlZ2F0ZQogICAgICAgICAgICAgICBHcm91cCBLZXk6IGIuagogICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gYgogICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFfcGtl eSBvbiBhCiAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpID0gYi5qKQoKRHVyaW5nIHRoZSBj b25zdHJ1Y3Rpb24gb2YgdGhlIGpvaW4gdHJlZSwgd2UgZXZhbHVhdGUgZWFjaCBiYXNlIG9yCmpv aW4gcmVsYXRpb24gdG8gZGV0ZXJtaW5lIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGNhbiBiZSBhcHBs aWVkLiAgSWYKZmVhc2libGUsIHdlIGNyZWF0ZSBhIHNlcGFyYXRlIFJlbE9wdEluZm8gY2FsbGVk IGEgImdyb3VwZWQgcmVsYXRpb24iCmFuZCBzdG9yZSBpdCBpbiBhIGRlZGljYXRlZCBsaXN0LgoK R3JvdXBlZCByZWxhdGlvbiBwYXRocyBjYW4gYmUgZ2VuZXJhdGVkIGluIHR3byB3YXlzLiAgVGhl IGZpcnN0IG1ldGhvZAppbnZvbHZlcyBhZGRpbmcgc29ydGVkIGFuZCBoYXNoZWQgcGFydGlhbCBh Z2dyZWdhdGlvbiBwYXRocyBvbiB0b3Agb2YKdGhlIG5vbi1ncm91cGVkIHBhdGhzLiAgVG8gbGlt aXQgcGxhbm5pbmcgdGltZSwgd2Ugb25seSBjb25zaWRlciB0aGUKY2hlYXBlc3Qgb3Igc3VpdGFi bHktc29ydGVkIG5vbi1ncm91cGVkIHBhdGhzIGR1cmluZyB0aGlzIHBoYXNlLgoKQWx0ZXJuYXRp dmVseSwgZ3JvdXBlZCBwYXRocyBjYW4gYmUgZ2VuZXJhdGVkIGJ5IGpvaW5pbmcgYSBncm91cGVk CnJlbGF0aW9uIHdpdGggYSBub24tZ3JvdXBlZCByZWxhdGlvbi4gIEpvaW5pbmcgdHdvIGdyb3Vw ZWQgcmVsYXRpb25zCmRvZXMgbm90IHNlZW0gdG8gYmUgdmVyeSB1c2VmdWwgYW5kIGlzIGN1cnJl bnRseSBub3Qgc3VwcG9ydGVkLgoKRm9yIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHRoYXQgaXMg cHVzaGVkIGRvd24gdG8gYSBub24tYWdncmVnYXRlZApyZWxhdGlvbiwgd2UgbmVlZCB0byBjb25z aWRlciBhbGwgZXhwcmVzc2lvbnMgZnJvbSB0aGlzIHJlbGF0aW9uIHRoYXQKYXJlIGludm9sdmVk IGluIHVwcGVyIGpvaW4gY2xhdXNlcyBhbmQgaW5jbHVkZSB0aGVtIGluIHRoZSBncm91cGluZwpr ZXlzLCB1c2luZyBjb21wYXRpYmxlIG9wZXJhdG9ycy4gIFRoaXMgaXMgZXNzZW50aWFsIHRvIGVu c3VyZSB0aGF0IGFuCmFnZ3JlZ2F0ZWQgcm93IGZyb20gdGhlIHBhcnRpYWwgYWdncmVnYXRpb24g bWF0Y2hlcyB0aGUgb3RoZXIgc2lkZSBvZgp0aGUgam9pbiBpZiBhbmQgb25seSBpZiBlYWNoIHJv dyBpbiB0aGUgcGFydGlhbCBncm91cCBkb2VzLiAgVGhpcwplbnN1cmVzIHRoYXQgYWxsIHJvd3Mg d2l0aGluIHRoZSBzYW1lIHBhcnRpYWwgZ3JvdXAgc2hhcmUgdGhlIHNhbWUKJ2Rlc3RpbnknLCB3 aGljaCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBjb3JyZWN0bmVzcy4KCk9uZSByZXN0cmlj dGlvbiBpcyB0aGF0IHdlIGNhbm5vdCBwdXNoIHBhcnRpYWwgYWdncmVnYXRpb24gZG93biB0byBh CnJlbGF0aW9uIHRoYXQgaXMgaW4gdGhlIG51bGxhYmxlIHNpZGUgb2YgYW4gb3V0ZXIgam9pbiwg YmVjYXVzZSB0aGUKTlVMTC1leHRlbmRlZCByb3dzIHByb2R1Y2VkIGJ5IHRoZSBvdXRlciBqb2lu IHdvdWxkIG5vdCBiZSBhdmFpbGFibGUKd2hlbiB3ZSBwZXJmb3JtIHRoZSBwYXJ0aWFsIGFnZ3Jl Z2F0aW9uLCB3aGlsZSB3aXRoIGEKbm9uLWVhZ2VyLWFnZ3JlZ2F0aW9uIHBsYW4gdGhlc2Ugcm93 cyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgdG9wLWxldmVsCmFnZ3JlZ2F0aW9uLiAgUHVzaGluZyBw YXJ0aWFsIGFnZ3JlZ2F0aW9uIGluIHRoaXMgY2FzZSBtYXkgcmVzdWx0IGluCnRoZSByb3dzIGJl aW5nIGdyb3VwZWQgZGlmZmVyZW50bHkgdGhhbiBleHBlY3RlZCwgb3IgcHJvZHVjZSBpbmNvcnJl Y3QKdmFsdWVzIGZyb20gdGhlIGFnZ3JlZ2F0ZSBmdW5jdGlvbnMuCgpJZiB3ZSBoYXZlIGdlbmVy YXRlZCBhIGdyb3VwZWQgcmVsYXRpb24gZm9yIHRoZSB0b3Btb3N0IGpvaW4gcmVsYXRpb24sCndl IGZpbmFsaXplIGl0cyBwYXRocyBhdCB0aGUgZW5kLiAgVGhlIGZpbmFsIHBhdGhzIHdpbGwgY29t cGV0ZSBpbiB0aGUKdXN1YWwgd2F5IHdpdGggcGF0aHMgYnVpbHQgZnJvbSByZWd1bGFyIHBsYW5u aW5nLgoKU2luY2UgZWFnZXIgYWdncmVnYXRpb24gY2FuIGdlbmVyYXRlIG1hbnkgZ3JvdXBlZCBy ZWxhdGlvbnMsIHdlCmludHJvZHVjZSBhIFJlbEluZm9MaXN0IHN0cnVjdHVyZSwgd2hpY2ggZW5j YXBzdWxhdGVzIGJvdGggYSBsaXN0IGFuZAphIGhhc2ggdGFibGUsIHNvIHRoYXQgd2UgY2FuIGxl dmVyYWdlIHRoZSBoYXNoIHRhYmxlIGZvciBmYXN0ZXIKbG9va3VwcyBub3Qgb25seSBmb3Igam9p biByZWxhdGlvbnMgYnV0IGFsc28gZm9yIGdyb3VwZWQgcmVsYXRpb25zLgoKRWFnZXIgYWdncmVn YXRpb24gY2FuIHVzZSBzaWduaWZpY2FudGx5IG1vcmUgQ1BVIHRpbWUgYW5kIG1lbW9yeSB0aGFu CnJlZ3VsYXIgcGxhbm5pbmcgd2hlbiB0aGUgcXVlcnkgaW52b2x2ZXMgYWdncmVnYXRlcyBhbmQg bWFueSBqb2luaW5nCnJlbGF0aW9ucy4gIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMsIHRoZSByZXN1 bHRpbmcgcGxhbiBjYW4gYmUgbXVjaApiZXR0ZXIsIGp1c3RpZnlpbmcgdGhlIGFkZGl0aW9uYWwg cGxhbm5pbmcgZWZmb3J0LiAgQWxsIHRoZSBzYW1lLCBmb3IKbm93LCB0dXJuIHRoaXMgZmVhdHVy ZSBvZmYgYnkgZGVmYXVsdC4KLS0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcu YyAgICAgICAgICAgfCAgICAzICstCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAg ICAgICAgICAgICAgfCAgIDE1ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUgICAgICAg ICAgICAgICAgICB8ICAgODAgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL2dlcW8vZ2Vxb19ldmFs LmMgICAgICAgIHwgICA5OCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMu YyAgICAgICAgIHwgIDQ1NSArKysrKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3Rz aXplLmMgICAgICAgICB8ICAgOTUgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5y ZWxzLmMgICAgICAgICB8ICAxNDEgKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRz cGxhbi5jICAgICAgICB8ICAyNzMgKysrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm1haW4uYyAgICAgICAgIHwgICAxNyArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jICAgICAgICAgIHwgICA5OSArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBw ZW5kaW5mby5jICAgICAgIHwgICA2MCArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRo bm9kZS5jICAgICAgICAgfCAgIDQ3ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxu b2RlLmMgICAgICAgICAgfCAgNzU4ICsrKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jICAgICAgICAgICB8ICAgMTAgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9w b3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9k ZXMuaCAgICAgICAgICAgICAgICAgfCAgMTQ4ICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aG5vZGUuaCAgICAgICAgICAgICAgfCAgICA3ICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRo cy5oICAgICAgICAgICAgICAgICB8ICAgIDUgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5t YWluLmggICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2Vh Z2VyX2FnZ3JlZ2F0ZS5vdXQgfCAxMzA4ICsrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCAgICAgICAgfCAgICAzICstCiBzcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdy ZXNzL3NxbC9lYWdlcl9hZ2dyZWdhdGUuc3FsICAgICAgfCAgMTkyICsrKwogc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAgNyArLQogMjQgZmlsZXMgY2hh bmdlZCwgMzY2NyBpbnNlcnRpb25zKCspLCAxNTggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lYWdlcl9hZ2dyZWdhdGUub3V0CiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9zcWwvZWFnZXJfYWdncmVnYXRlLnNxbAoK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggY2Y1NjQzNDExOC4uN2JiMzZhNTJk MSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKKysrIGIv Y29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTYwODksNyArNjA4OSw4IEBA IGZvcmVpZ25fam9pbl9vayhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqam9pbnJlbCwg Sm9pblR5cGUgam9pbnR5cGUsCiAJICovCiAJQXNzZXJ0KGZwaW5mby0+cmVsYXRpb25faW5kZXgg PT0gMCk7CS8qIHNob3VsZG4ndCBiZSBzZXQgeWV0ICovCiAJZnBpbmZvLT5yZWxhdGlvbl9pbmRl eCA9Ci0JCWxpc3RfbGVuZ3RoKHJvb3QtPnBhcnNlLT5ydGFibGUpICsgbGlzdF9sZW5ndGgocm9v dC0+am9pbl9yZWxfbGlzdCk7CisJCWxpc3RfbGVuZ3RoKHJvb3QtPnBhcnNlLT5ydGFibGUpICsK KwkJbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdC0+aXRlbXMpOwogCiAJcmV0dXJuIHRy dWU7CiB9CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgYi9kb2Mvc3JjL3Nn bWwvY29uZmlnLnNnbWwKaW5kZXggZmJkZDZjZTU3NC4uM2Q3OGE1ODc1ZiAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApA QCAtNTM4Miw2ICs1MzgyLDIxIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xp c3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJn dWMtZW5hYmxlLWVhZ2VyLWFnZ3JlZ2F0ZSIgeHJlZmxhYmVsPSJlbmFibGVfZWFnZXJfYWdncmVn YXRlIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9lYWdlcl9hZ2dyZWdhdGU8L3Zhcm5h bWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHBy aW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZTwvdmFybmFtZT4gY29uZmlndXJh dGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVy bT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxlcyBvciBk aXNhYmxlcyB0aGUgcXVlcnkgcGxhbm5lcidzIGFiaWxpdHkgdG8gcGFydGlhbGx5IHB1c2gKKyAg ICAgICAgYWdncmVnYXRpb24gcGFzdCBhIGpvaW4sIGFuZCBmaW5hbGl6ZSBpdCBvbmNlIGFsbCB0 aGUgcmVsYXRpb25zIGFyZQorICAgICAgICBqb2luZWQuIFRoZSBkZWZhdWx0IGlzIDxsaXRlcmFs Pm9mZjwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAg PC92YXJsaXN0ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1nYXRo ZXJtZXJnZSIgeHJlZmxhYmVsPSJlbmFibGVfZ2F0aGVybWVyZ2UiPgogICAgICAgPHRlcm0+PHZh cm5hbWU+ZW5hYmxlX2dhdGhlcm1lcmdlPC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4p CiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JF QURNRSBiL3NyYy9iYWNrZW5kL29wdGltaXplci9SRUFETUUKaW5kZXggZjM0MWQ5ZjMwMy4uNDUy MzZjYTQ2YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL1JFQURNRQorKysgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvUkVBRE1FCkBAIC0xNDk3LDMgKzE0OTcsODMgQEAgYnJlYWtp bmcgZG93biBhZ2dyZWdhdGlvbiBvciBncm91cGluZyBvdmVyIGEgcGFydGl0aW9uZWQgcmVsYXRp b24gaW50bwogYWdncmVnYXRpb24gb3IgZ3JvdXBpbmcgb3ZlciBpdHMgcGFydGl0aW9ucyBpcyBj YWxsZWQgcGFydGl0aW9ud2lzZQogYWdncmVnYXRpb24uICBFc3BlY2lhbGx5IHdoZW4gdGhlIHBh cnRpdGlvbiBrZXlzIG1hdGNoIHRoZSBHUk9VUCBCWSBjbGF1c2UsCiB0aGlzIGNhbiBiZSBzaWdu aWZpY2FudGx5IGZhc3RlciB0aGFuIHRoZSByZWd1bGFyIG1ldGhvZC4KKworRWFnZXIgYWdncmVn YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKK0VhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGEgcXVlcnkg b3B0aW1pemF0aW9uIHRlY2huaXF1ZSB0aGF0IHBhcnRpYWxseSBwdXNoZXMKK2FnZ3JlZ2F0aW9u IHBhc3QgYSBqb2luLCBhbmQgZmluYWxpemVzIGl0IG9uY2UgYWxsIHRoZSByZWxhdGlvbnMgYXJl IGpvaW5lZC4KK0VhZ2VyIGFnZ3JlZ2F0aW9uIG1heSByZWR1Y2UgdGhlIG51bWJlciBvZiBpbnB1 dCByb3dzIHRvIHRoZSBqb2luIGFuZCB0aHVzCitjb3VsZCByZXN1bHQgaW4gYSBiZXR0ZXIgb3Zl cmFsbCBwbGFuLgorCitGb3IgZXhhbXBsZToKKworIEVYUExBSU4gKENPU1RTIE9GRikKKyBTRUxF Q1QgYS5pLCBhdmcoYi55KQorIEZST00gYSBKT0lOIGIgT04gYS5pID0gYi5qCisgR1JPVVAgQlkg YS5pOworCisgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBhLmkKKyAgIC0+ ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgR3JvdXAgS2V5OiBiLmoKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBi CisgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFfcGtleSBvbiBhCisgICAgICAg ICAgICAgICBJbmRleCBDb25kOiAoaSA9IGIuaikKKworSWYgdGhlIHBhcnRpYWwgYWdncmVnYXRp b24gb24gdGFibGUgQiBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZgoraW5wdXQg cm93cywgdGhlIGpvaW4gYWJvdmUgd2lsbCBiZSBtdWNoIGNoZWFwZXIsIGxlYWRpbmcgdG8gYSBt b3JlIGVmZmljaWVudAorZmluYWwgcGxhbi4KKworRm9yIHRoZSBwYXJ0aWFsIGFnZ3JlZ2F0aW9u IHRoYXQgaXMgcHVzaGVkIGRvd24gdG8gYSBub24tYWdncmVnYXRlZCByZWxhdGlvbiwKK3dlIG5l ZWQgdG8gY29uc2lkZXIgYWxsIGV4cHJlc3Npb25zIGZyb20gdGhpcyByZWxhdGlvbiB0aGF0IGFy ZSBpbnZvbHZlZCBpbgordXBwZXIgam9pbiBjbGF1c2VzIGFuZCBpbmNsdWRlIHRoZW0gaW4gdGhl IGdyb3VwaW5nIGtleXMsIHVzaW5nIGNvbXBhdGlibGUKK29wZXJhdG9ycy4gIFRoaXMgaXMgZXNz ZW50aWFsIHRvIGVuc3VyZSB0aGF0IGFuIGFnZ3JlZ2F0ZWQgcm93IGZyb20gdGhlIHBhcnRpYWwK K2FnZ3JlZ2F0aW9uIG1hdGNoZXMgdGhlIG90aGVyIHNpZGUgb2YgdGhlIGpvaW4gaWYgYW5kIG9u bHkgaWYgZWFjaCByb3cgaW4gdGhlCitwYXJ0aWFsIGdyb3VwIGRvZXMuICBUaGlzIGVuc3VyZXMg dGhhdCBhbGwgcm93cyB3aXRoaW4gdGhlIHNhbWUgcGFydGlhbCBncm91cAorc2hhcmUgdGhlIHNh bWUgJ2Rlc3RpbnknLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBjb3JyZWN0bmVz cy4KKworT25lIHJlc3RyaWN0aW9uIGlzIHRoYXQgd2UgY2Fubm90IHB1c2ggcGFydGlhbCBhZ2dy ZWdhdGlvbiBkb3duIHRvIGEgcmVsYXRpb24KK3RoYXQgaXMgaW4gdGhlIG51bGxhYmxlIHNpZGUg b2YgYW4gb3V0ZXIgam9pbiwgYmVjYXVzZSB0aGUgTlVMTC1leHRlbmRlZCByb3dzCitwcm9kdWNl ZCBieSB0aGUgb3V0ZXIgam9pbiB3b3VsZCBub3QgYmUgYXZhaWxhYmxlIHdoZW4gd2UgcGVyZm9y bSB0aGUgcGFydGlhbAorYWdncmVnYXRpb24sIHdoaWxlIHdpdGggYSBub24tZWFnZXItYWdncmVn YXRpb24gcGxhbiB0aGVzZSByb3dzIGFyZSBhdmFpbGFibGUKK2ZvciB0aGUgdG9wLWxldmVsIGFn Z3JlZ2F0aW9uLiAgUHVzaGluZyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGluIHRoaXMgY2FzZSBtYXkK K3Jlc3VsdCBpbiB0aGUgcm93cyBiZWluZyBncm91cGVkIGRpZmZlcmVudGx5IHRoYW4gZXhwZWN0 ZWQsIG9yIHByb2R1Y2UKK2luY29ycmVjdCB2YWx1ZXMgZnJvbSB0aGUgYWdncmVnYXRlIGZ1bmN0 aW9ucy4KKworV2UgY2FuIGFsc28gYXBwbHkgZWFnZXIgYWdncmVnYXRpb24gdG8gYSBqb2luOgor CisgRVhQTEFJTiAoQ09TVFMgT0ZGKQorIFNFTEVDVCBhLmksIGF2ZyhiLnkgKyBjLnopCisgRlJP TSBhIEpPSU4gYiBPTiBhLmkgPSBiLmoKKyAgICAgICAgSk9JTiBjIE9OIGIuaiA9IGMuaQorIEdS T1VQIEJZIGEuaTsKKworIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTogYS5p CisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgIEdyb3VwIEtleTogYi5qCisgICAgICAgICAgICAgICAtPiAgSGFzaCBK b2luCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChiLmogPSBjLmkpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gYgorICAgICAgICAgICAgICAgICAgICAgLT4g IEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBjCisgICAg ICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIGFfcGtleSBvbiBhCisgICAgICAgICAgICAg ICBJbmRleCBDb25kOiAoaSA9IGIuaikKKworRHVyaW5nIHRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhl IGpvaW4gdHJlZSwgd2UgZXZhbHVhdGUgZWFjaCBiYXNlIG9yIGpvaW4KK3JlbGF0aW9uIHRvIGRl dGVybWluZSBpZiBlYWdlciBhZ2dyZWdhdGlvbiBjYW4gYmUgYXBwbGllZC4gIElmIGZlYXNpYmxl LCB3ZQorY3JlYXRlIGEgc2VwYXJhdGUgUmVsT3B0SW5mbyBjYWxsZWQgYSAiZ3JvdXBlZCByZWxh dGlvbiIgYW5kIGdlbmVyYXRlIGdyb3VwZWQKK3BhdGhzIGJ5IGFkZGluZyBzb3J0ZWQgYW5kIGhh c2hlZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiB0aGUKK25vbi1ncm91cGVk IHBhdGhzLiAgVG8gbGltaXQgcGxhbm5pbmcgdGltZSwgd2UgY29uc2lkZXIgb25seSB0aGUgY2hl YXBlc3Qgb3IKK3N1aXRhYmx5LXNvcnRlZCBub24tZ3JvdXBlZCBwYXRocyBpbiB0aGlzIHN0ZXAu CisKK0Fub3RoZXIgd2F5IHRvIGdlbmVyYXRlIGdyb3VwZWQgcGF0aHMgaXMgdG8gam9pbiBhIGdy b3VwZWQgcmVsYXRpb24gd2l0aCBhCitub24tZ3JvdXBlZCByZWxhdGlvbi4gIEpvaW5pbmcgdHdv IGdyb3VwZWQgcmVsYXRpb25zIGRvZXMgbm90IHNlZW0gdG8gYmUgdmVyeQordXNlZnVsIGFuZCBp cyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KKworSWYgd2UgaGF2ZSBnZW5lcmF0ZWQgYSBncm91 cGVkIHJlbGF0aW9uIGZvciB0aGUgdG9wbW9zdCBqb2luIHJlbGF0aW9uLCB3ZSBuZWVkCit0byBm aW5hbGl6ZSBpdHMgcGF0aHMgYXQgdGhlIGVuZC4gIFRoZSBmaW5hbCBwYXRocyB3aWxsIGNvbXBl dGUgaW4gdGhlIHVzdWFsCit3YXkgd2l0aCBwYXRocyBidWlsdCBmcm9tIHJlZ3VsYXIgcGxhbm5p bmcuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvZ2Vxby9nZXFvX2V2YWwuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZhbC5jCmluZGV4IGQyZjdmNGU1ZjMu LmNkYzk1NDMxMzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9f ZXZhbC5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9nZXFvL2dlcW9fZXZhbC5jCkBAIC0z OSwxMCArMzksMjAgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJCQlzaXplOwkJCS8qIG51bWJlciBv ZiBpbnB1dCByZWxhdGlvbnMgaW4gY2x1bXAgKi8KIH0gQ2x1bXA7CiAKKy8qIFRoZSBvcmlnaW5h bCBsZW5ndGggYW5kIGhhc2h0YWJsZSBvZiBhIFJlbEluZm9MaXN0ICovCit0eXBlZGVmIHN0cnVj dAoreworCWludAkJCXNhdmVsZW5ndGg7CisJc3RydWN0IEhUQUIgKnNhdmVoYXNoOworfSBSZWxJ bmZvTGlzdEluZm87CisKIHN0YXRpYyBMaXN0ICptZXJnZV9jbHVtcChQbGFubmVySW5mbyAqcm9v dCwgTGlzdCAqY2x1bXBzLCBDbHVtcCAqbmV3X2NsdW1wLAogCQkJCQkJIGludCBudW1fZ2VuZSwg Ym9vbCBmb3JjZSk7CiBzdGF0aWMgYm9vbCBkZXNpcmFibGVfam9pbihQbGFubmVySW5mbyAqcm9v dCwKIAkJCQkJCSAgIFJlbE9wdEluZm8gKm91dGVyX3JlbCwgUmVsT3B0SW5mbyAqaW5uZXJfcmVs KTsKK3N0YXRpYyBSZWxJbmZvTGlzdEluZm8gc2F2ZV9yZWxpbmZvbGlzdChSZWxJbmZvTGlzdCAq cmVsaW5mb19saXN0KTsKK3N0YXRpYyB2b2lkIHJlc3RvcmVfcmVsaW5mb2xpc3QoUmVsSW5mb0xp c3QgKnJlbGluZm9fbGlzdCwKKwkJCQkJCQkJUmVsSW5mb0xpc3RJbmZvICppbmZvKTsKIAogCiAv KgpAQCAtNjAsOCArNzAsOCBAQCBnZXFvX2V2YWwoUGxhbm5lckluZm8gKnJvb3QsIEdlbmUgKnRv dXIsIGludCBudW1fZ2VuZSkKIAlNZW1vcnlDb250ZXh0IG9sZGN4dDsKIAlSZWxPcHRJbmZvICpq b2lucmVsOwogCUNvc3QJCWZpdG5lc3M7Ci0JaW50CQkJc2F2ZWxlbmd0aDsKLQlzdHJ1Y3QgSFRB QiAqc2F2ZWhhc2g7CisJUmVsSW5mb0xpc3RJbmZvIHNhdmVfam9pbl9yZWw7CisJUmVsSW5mb0xp c3RJbmZvIHNhdmVfZ3JvdXBlZF9yZWw7CiAKIAkvKgogCSAqIENyZWF0ZSBhIHByaXZhdGUgbWVt b3J5IGNvbnRleHQgdGhhdCB3aWxsIGhvbGQgYWxsIHRlbXAgc3RvcmFnZQpAQCAtNzgsMjUgKzg4 LDI5IEBAIGdlcW9fZXZhbChQbGFubmVySW5mbyAqcm9vdCwgR2VuZSAqdG91ciwgaW50IG51bV9n ZW5lKQogCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhteWNvbnRleHQpOwogCiAJLyoK LQkgKiBnaW1tZV90cmVlIHdpbGwgYWRkIGVudHJpZXMgdG8gcm9vdC0+am9pbl9yZWxfbGlzdCwg d2hpY2ggbWF5IG9yIG1heQotCSAqIG5vdCBhbHJlYWR5IGNvbnRhaW4gc29tZSBlbnRyaWVzLiAg VGhlIG5ld2x5IGFkZGVkIGVudHJpZXMgd2lsbCBiZQotCSAqIHJlY3ljbGVkIGJ5IHRoZSBNZW1v cnlDb250ZXh0RGVsZXRlIGJlbG93LCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IHRoZQotCSAqIGxp c3QgaXMgcmVzdG9yZWQgdG8gaXRzIGZvcm1lciBzdGF0ZSBiZWZvcmUgZXhpdGluZy4gIFdlIGNh biBkbyB0aGlzIGJ5Ci0JICogdHJ1bmNhdGluZyB0aGUgbGlzdCB0byBpdHMgb3JpZ2luYWwgbGVu Z3RoLiAgTk9URSB0aGlzIGFzc3VtZXMgdGhhdCBhbnkKLQkgKiBhZGRlZCBlbnRyaWVzIGFyZSBh cHBlbmRlZCBhdCB0aGUgZW5kIQorCSAqIGdpbW1lX3RyZWUgd2lsbCBhZGQgZW50cmllcyB0byBy b290LT5qb2luX3JlbF9saXN0IGFuZAorCSAqIHJvb3QtPmdyb3VwZWRfcmVsX2xpc3QsIHdoaWNo IG1heSBvciBtYXkgbm90IGFscmVhZHkgY29udGFpbiBzb21lCisJICogZW50cmllcy4gIFRoZSBu ZXdseSBhZGRlZCBlbnRyaWVzIHdpbGwgYmUgcmVjeWNsZWQgYnkgdGhlCisJICogTWVtb3J5Q29u dGV4dERlbGV0ZSBiZWxvdywgc28gd2UgbXVzdCBlbnN1cmUgdGhhdCBlYWNoIGxpc3Qgd2l0aGlu IHRoZQorCSAqIFJlbEluZm9MaXN0IHN0cnVjdHVyZXMgaXMgcmVzdG9yZWQgdG8gaXRzIGZvcm1l ciBzdGF0ZSBiZWZvcmUgZXhpdGluZy4KKwkgKiBXZSBjYW4gZG8gdGhpcyBieSB0cnVuY2F0aW5n IGVhY2ggbGlzdCB0byBpdHMgb3JpZ2luYWwgbGVuZ3RoLiAgTk9URQorCSAqIHRoaXMgYXNzdW1l cyB0aGF0IGFueSBhZGRlZCBlbnRyaWVzIGFyZSBhcHBlbmRlZCBhdCB0aGUgZW5kIQogCSAqCi0J ICogV2UgYWxzbyBtdXN0IHRha2UgY2FyZSBub3QgdG8gbWVzcyB1cCB0aGUgb3V0ZXIgam9pbl9y ZWxfaGFzaCwgaWYgdGhlcmUKLQkgKiBpcyBvbmUuICBXZSBjYW4gZG8gdGhpcyBieSBqdXN0IHRl bXBvcmFyaWx5IHNldHRpbmcgdGhlIGxpbmsgdG8gTlVMTC4KLQkgKiAoSWYgd2UgYXJlIGRlYWxp bmcgd2l0aCBlbm91Z2ggam9pbiByZWxzLCB3aGljaCB3ZSB2ZXJ5IGxpa2VseSBhcmUsIGEKLQkg KiBuZXcgaGFzaCB0YWJsZSB3aWxsIGdldCBidWlsdCBhbmQgdXNlZCBsb2NhbGx5LikKKwkgKiBX ZSBhbHNvIG11c3QgdGFrZSBjYXJlIG5vdCB0byBtZXNzIHVwIHRoZSBvdXRlciBoYXNoIHRhYmxl cyB3aXRoaW4gdGhlCisJICogUmVsSW5mb0xpc3Qgc3RydWN0dXJlcywgaWYgYW55LiAgV2UgY2Fu IGRvIHRoaXMgYnkganVzdCB0ZW1wb3JhcmlseQorCSAqIHNldHRpbmcgZWFjaCBsaW5rIHRvIE5V TEwuICAoSWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBlbm91Z2ggam9pbiByZWxzIG9yCisJICogZ3Jv dXBlZCByZWxzLCB3aGljaCB3ZSB2ZXJ5IGxpa2VseSBhcmUsIG5ldyBoYXNoIHRhYmxlcyB3aWxs IGdldCBidWlsdAorCSAqIGFuZCB1c2VkIGxvY2FsbHkuKQogCSAqCiAJICogam9pbl9yZWxfbGV2 ZWxbXSBzaG91bGRuJ3QgYmUgaW4gdXNlLCBzbyBqdXN0IEFzc2VydCBpdCBpc24ndC4KIAkgKi8K LQlzYXZlbGVuZ3RoID0gbGlzdF9sZW5ndGgocm9vdC0+am9pbl9yZWxfbGlzdCk7Ci0Jc2F2ZWhh c2ggPSByb290LT5qb2luX3JlbF9oYXNoOworCXNhdmVfam9pbl9yZWwgPSBzYXZlX3JlbGluZm9s aXN0KHJvb3QtPmpvaW5fcmVsX2xpc3QpOworCXNhdmVfZ3JvdXBlZF9yZWwgPSBzYXZlX3JlbGlu Zm9saXN0KHJvb3QtPmdyb3VwZWRfcmVsX2xpc3QpOworCiAJQXNzZXJ0KHJvb3QtPmpvaW5fcmVs X2xldmVsID09IE5VTEwpOwogCi0Jcm9vdC0+am9pbl9yZWxfaGFzaCA9IE5VTEw7CisJcm9vdC0+ am9pbl9yZWxfbGlzdC0+aGFzaCA9IE5VTEw7CisJcm9vdC0+Z3JvdXBlZF9yZWxfbGlzdC0+aGFz aCA9IE5VTEw7CiAKIAkvKiBjb25zdHJ1Y3QgdGhlIGJlc3QgcGF0aCBmb3IgdGhlIGdpdmVuIGNv bWJpbmF0aW9uIG9mIHJlbGF0aW9ucyAqLwogCWpvaW5yZWwgPSBnaW1tZV90cmVlKHJvb3QsIHRv dXIsIG51bV9nZW5lKTsKQEAgLTExOCwxMiArMTMyLDExIEBAIGdlcW9fZXZhbChQbGFubmVySW5m byAqcm9vdCwgR2VuZSAqdG91ciwgaW50IG51bV9nZW5lKQogCQlmaXRuZXNzID0gREJMX01BWDsK IAogCS8qCi0JICogUmVzdG9yZSBqb2luX3JlbF9saXN0IHRvIGl0cyBmb3JtZXIgc3RhdGUsIGFu ZCBwdXQgYmFjayBvcmlnaW5hbAotCSAqIGhhc2h0YWJsZSBpZiBhbnkuCisJICogUmVzdG9yZSBl YWNoIG9mIHRoZSBsaXN0IGluIGpvaW5fcmVsX2xpc3QgYW5kIGdyb3VwZWRfcmVsX2xpc3QgdG8g aXRzCisJICogZm9ybWVyIHN0YXRlLCBhbmQgcHV0IGJhY2sgb3JpZ2luYWwgaGFzaHRhYmxlcyBp ZiBhbnkuCiAJICovCi0Jcm9vdC0+am9pbl9yZWxfbGlzdCA9IGxpc3RfdHJ1bmNhdGUocm9vdC0+ am9pbl9yZWxfbGlzdCwKLQkJCQkJCQkJCQlzYXZlbGVuZ3RoKTsKLQlyb290LT5qb2luX3JlbF9o YXNoID0gc2F2ZWhhc2g7CisJcmVzdG9yZV9yZWxpbmZvbGlzdChyb290LT5qb2luX3JlbF9saXN0 LCAmc2F2ZV9qb2luX3JlbCk7CisJcmVzdG9yZV9yZWxpbmZvbGlzdChyb290LT5ncm91cGVkX3Jl bF9saXN0LCAmc2F2ZV9ncm91cGVkX3JlbCk7CiAKIAkvKiByZWxlYXNlIGFsbCB0aGUgbWVtb3J5 IGFjcXVpcmVkIHdpdGhpbiBnaW1tZV90cmVlICovCiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN4dCk7CkBAIC0yNzksNiArMjkyLDI3IEBAIG1lcmdlX2NsdW1wKFBsYW5uZXJJbmZvICpyb290 LCBMaXN0ICpjbHVtcHMsIENsdW1wICpuZXdfY2x1bXAsIGludCBudW1fZ2VuZSwKIAkJCQkvKiBG aW5kIGFuZCBzYXZlIHRoZSBjaGVhcGVzdCBwYXRocyBmb3IgdGhpcyBqb2lucmVsICovCiAJCQkJ c2V0X2NoZWFwZXN0KGpvaW5yZWwpOwogCisJCQkJLyoKKwkJCQkgKiBFeGNlcHQgZm9yIHRoZSB0 b3Btb3N0IHNjYW4vam9pbiByZWwsIGNvbnNpZGVyIGdlbmVyYXRpbmcKKwkJCQkgKiBwYXJ0aWFs IGFnZ3JlZ2F0aW9uIHBhdGhzIGZvciB0aGUgZ3JvdXBlZCByZWxhdGlvbiBvbiB0b3AKKwkJCQkg KiBvZiB0aGUgcGF0aHMgb2YgdGhpcyByZWwuICBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIGNyZWF0 aW5nCisJCQkJICogcGF0aHMgZm9yIHRoZSBncm91cGVkIHJlbGF0aW9uLCBzbyBydW4gc2V0X2No ZWFwZXN0KCkuCisJCQkJICovCisJCQkJaWYgKCFibXNfZXF1YWwoam9pbnJlbC0+cmVsaWRzLCBy b290LT5hbGxfcXVlcnlfcmVscykpCisJCQkJeworCQkJCQlSZWxPcHRJbmZvICpyZWxfZ3JvdXBl ZDsKKworCQkJCQlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9vdCwgam9pbnJlbC0+ cmVsaWRzKTsKKwkJCQkJaWYgKHJlbF9ncm91cGVkKQorCQkJCQl7CisJCQkJCQlBc3NlcnQoSVNf R1JPVVBFRF9SRUwocmVsX2dyb3VwZWQpKTsKKworCQkJCQkJZ2VuZXJhdGVfZ3JvdXBlZF9wYXRo cyhyb290LCByZWxfZ3JvdXBlZCwgam9pbnJlbCwKKwkJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQt PmFnZ19pbmZvKTsKKwkJCQkJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7CisJCQkJCX0KKwkJ CQl9CisKIAkJCQkvKiBBYnNvcmIgbmV3IGNsdW1wIGludG8gb2xkICovCiAJCQkJb2xkX2NsdW1w LT5qb2lucmVsID0gam9pbnJlbDsKIAkJCQlvbGRfY2x1bXAtPnNpemUgKz0gbmV3X2NsdW1wLT5z aXplOwpAQCAtMzM2LDMgKzM3MCwyNyBAQCBkZXNpcmFibGVfam9pbihQbGFubmVySW5mbyAqcm9v dCwKIAkvKiBPdGhlcndpc2UgcG9zdHBvbmUgdGhlIGpvaW4gdGlsbCBsYXRlci4gKi8KIAlyZXR1 cm4gZmFsc2U7CiB9CisKKy8qCisgKiBTYXZlIHRoZSBvcmlnaW5hbCBsZW5ndGggYW5kIGhhc2h0 YWJsZSBvZiBhIFJlbEluZm9MaXN0LgorICovCitzdGF0aWMgUmVsSW5mb0xpc3RJbmZvCitzYXZl X3JlbGluZm9saXN0KFJlbEluZm9MaXN0ICpyZWxpbmZvX2xpc3QpCit7CisJUmVsSW5mb0xpc3RJ bmZvIGluZm87CisKKwlpbmZvLnNhdmVsZW5ndGggPSBsaXN0X2xlbmd0aChyZWxpbmZvX2xpc3Qt Pml0ZW1zKTsKKwlpbmZvLnNhdmVoYXNoID0gcmVsaW5mb19saXN0LT5oYXNoOworCisJcmV0dXJu IGluZm87Cit9CisKKy8qCisgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBsZW5ndGggYW5kIGhhc2h0 YWJsZSBvZiBhIFJlbEluZm9MaXN0LgorICovCitzdGF0aWMgdm9pZAorcmVzdG9yZV9yZWxpbmZv bGlzdChSZWxJbmZvTGlzdCAqcmVsaW5mb19saXN0LCBSZWxJbmZvTGlzdEluZm8gKmluZm8pCit7 CisJcmVsaW5mb19saXN0LT5pdGVtcyA9IGxpc3RfdHJ1bmNhdGUocmVsaW5mb19saXN0LT5pdGVt cywgaW5mby0+c2F2ZWxlbmd0aCk7CisJcmVsaW5mb19saXN0LT5oYXNoID0gaW5mby0+c2F2ZWhh c2g7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCAxNzJlZGI2NDNh Li4xMzIyODM3N2E1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxw YXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKQEAgLTQw LDYgKzQwLDcgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJvcHRp bWl6ZXIvcGxhbmNhdC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL3ByZXAuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvdGxpc3QuaCIKICNpbmNs dWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5o IgpAQCAtNDcsNiArNDgsNyBAQAogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNs dWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgorI2luY2x1ZGUgInV0aWxzL3NlbGZ1bmNzLmgiCiAKIAogLyogQml0bWFzayBmbGFncyBmb3Ig cHVzaGRvd25fc2FmZXR5X2luZm8udW5zYWZlRmxhZ3MgKi8KQEAgLTc3LDYgKzc5LDcgQEAgdHlw ZWRlZiBlbnVtIHB1c2hkb3duX3NhZmVfdHlwZQogCiAvKiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBz ZXQgYnkgR1VDICovCiBib29sCQllbmFibGVfZ2VxbyA9IGZhbHNlOwkvKiBqdXN0IGluIGNhc2Ug R1VDIGRvZXNuJ3Qgc2V0IGl0ICovCitib29sCQllbmFibGVfZWFnZXJfYWdncmVnYXRlID0gZmFs c2U7CiBpbnQJCQlnZXFvX3RocmVzaG9sZDsKIGludAkJCW1pbl9wYXJhbGxlbF90YWJsZV9zY2Fu X3NpemU7CiBpbnQJCQltaW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9zaXplOwpAQCAtOTAsNiArOTMs NyBAQCBqb2luX3NlYXJjaF9ob29rX3R5cGUgam9pbl9zZWFyY2hfaG9vayA9IE5VTEw7CiAKIHN0 YXRpYyB2b2lkIHNldF9iYXNlX3JlbF9jb25zaWRlcl9zdGFydHVwKFBsYW5uZXJJbmZvICpyb290 KTsKIHN0YXRpYyB2b2lkIHNldF9iYXNlX3JlbF9zaXplcyhQbGFubmVySW5mbyAqcm9vdCk7Citz dGF0aWMgdm9pZCBzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhQbGFubmVySW5mbyAqcm9vdCk7CiBz dGF0aWMgdm9pZCBzZXRfYmFzZV9yZWxfcGF0aGxpc3RzKFBsYW5uZXJJbmZvICpyb290KTsKIHN0 YXRpYyB2b2lkIHNldF9yZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCQkJCQkJIEluZGV4IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKQEAgLTExNCw2ICsxMTgs NyBAQCBzdGF0aWMgdm9pZCBzZXRfYXBwZW5kX3JlbF9zaXplKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCUluZGV4IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKTsK IHN0YXRpYyB2b2lkIHNldF9hcHBlbmRfcmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQlJbmRleCBydGksIFJhbmdlVGJsRW50cnkgKnJ0ZSk7 CitzdGF0aWMgdm9pZCBzZXRfZ3JvdXBlZF9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnJlbCk7CiBzdGF0aWMgdm9pZCBnZW5lcmF0ZV9vcmRlcmVkYXBwZW5kX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJIExpc3Qg KmxpdmVfY2hpbGRyZWxzLAogCQkJCQkJCQkJCSBMaXN0ICphbGxfY2hpbGRfcGF0aGtleXMpOwpA QCAtMTgyLDYgKzE4NywxMSBAQCBtYWtlX29uZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg KmpvaW5saXN0KQogCSAqLwogCXNldF9iYXNlX3JlbF9zaXplcyhyb290KTsKIAorCS8qCisJICog QnVpbGQgZ3JvdXBlZCByZWxhdGlvbnMgZm9yIGJhc2UgcmVscyB3aGVyZSBwb3NzaWJsZS4KKwkg Ki8KKwlzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhyb290KTsKKwogCS8qCiAJICogV2Ugc2hvdWxk IG5vdyBoYXZlIHNpemUgZXN0aW1hdGVzIGZvciBldmVyeSBhY3R1YWwgdGFibGUgaW52b2x2ZWQg aW4KIAkgKiB0aGUgcXVlcnksIGFuZCB3ZSBhbHNvIGtub3cgd2hpY2ggaWYgYW55IGhhdmUgYmVl biBkZWxldGVkIGZyb20gdGhlCkBAIC0zMjMsNiArMzMzLDQ1IEBAIHNldF9iYXNlX3JlbF9zaXpl cyhQbGFubmVySW5mbyAqcm9vdCkKIAl9CiB9CiAKKy8qCisgKiBzZXR1cF9iYXNlX2dyb3VwZWRf cmVscworICoJICBGb3IgZWFjaCAicGxhaW4iIGJhc2UgcmVsYXRpb24sIGJ1aWxkIGEgZ3JvdXBl ZCBiYXNlIHJlbGF0aW9uIGlmIGVhZ2VyCisgKgkgIGFnZ3JlZ2F0aW9uIGlzIHBvc3NpYmxlIGFu ZCBpZiB0aGlzIHJlbGF0aW9uIGNhbiBwcm9kdWNlIGdyb3VwZWQgcGF0aHMuCisgKi8KK3N0YXRp YyB2b2lkCitzZXR1cF9iYXNlX2dyb3VwZWRfcmVscyhQbGFubmVySW5mbyAqcm9vdCkKK3sKKwlJ bmRleAkJcnRpOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgbm8gYWdncmVnYXRlIGV4cHJlc3Np b25zIG9yIGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIG5v dCBwb3NzaWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdnX2NsYXVzZV9saXN0ID09IE5JTCB8fAor CQlyb290LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQorCQlyZXR1cm47CisKKwlmb3IgKHJ0aSA9 IDE7IHJ0aSA8IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlfc2l6ZTsgcnRpKyspCisJeworCQlSZWxP cHRJbmZvICpyZWwgPSByb290LT5zaW1wbGVfcmVsX2FycmF5W3J0aV07CisJCVJlbE9wdEluZm8g KnJlbF9ncm91cGVkOworCisJCS8qIHRoZXJlIG1heSBiZSBlbXB0eSBzbG90cyBjb3JyZXNwb25k aW5nIHRvIG5vbi1iYXNlcmVsIFJURXMgKi8KKwkJaWYgKHJlbCA9PSBOVUxMKQorCQkJY29udGlu dWU7CisKKwkJQXNzZXJ0KHJlbC0+cmVsaWQgPT0gcnRpKTsJLyogc2FuaXR5IGNoZWNrIG9uIGFy cmF5ICovCisJCUFzc2VydChJU19TSU1QTEVfUkVMKHJlbCkpOyAvKiBzYW5pdHkgY2hlY2sgb24g cmVsICovCisKKwkJcmVsX2dyb3VwZWQgPSBidWlsZF9zaW1wbGVfZ3JvdXBlZF9yZWwocm9vdCwg cmVsKTsKKwkJaWYgKHJlbF9ncm91cGVkKQorCQl7CisJCQkvKiBNYWtlIHRoZSBncm91cGVkIHJl bGF0aW9uIGF2YWlsYWJsZSBmb3Igam9pbmluZy4gKi8KKwkJCWFkZF9ncm91cGVkX3JlbChyb290 LCByZWxfZ3JvdXBlZCk7CisJCX0KKwl9Cit9CisKIC8qCiAgKiBzZXRfYmFzZV9yZWxfcGF0aGxp c3RzCiAgKgkgIEZpbmRzIGFsbCBwYXRocyBhdmFpbGFibGUgZm9yIHNjYW5uaW5nIGVhY2ggYmFz ZS1yZWxhdGlvbiBlbnRyeS4KQEAgLTU1OSw2ICs2MDgsMTUgQEAgc2V0X3JlbF9wYXRobGlzdChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCS8qIE5vdyBmaW5kIHRoZSBjaGVh cGVzdCBvZiB0aGUgcGF0aHMgZm9yIHRoaXMgcmVsICovCiAJc2V0X2NoZWFwZXN0KHJlbCk7CiAK KwkvKgorCSAqIElmIGEgZ3JvdXBlZCByZWxhdGlvbiBmb3IgdGhpcyByZWwgZXhpc3RzLCBidWls ZCBwYXJ0aWFsIGFnZ3JlZ2F0aW9uCisJICogcGF0aHMgZm9yIGl0LgorCSAqCisJICogTm90ZSB0 aGF0IHRoaXMgY2FuIG9ubHkgaGFwcGVuIGFmdGVyIHdlJ3ZlIGNhbGxlZCBzZXRfY2hlYXBlc3Qo KSBmb3IKKwkgKiB0aGlzIGJhc2UgcmVsLCBiZWNhdXNlIHdlIG5lZWQgaXRzIGNoZWFwZXN0IHBh dGhzLgorCSAqLworCXNldF9ncm91cGVkX3JlbF9wYXRobGlzdChyb290LCByZWwpOworCiAjaWZk ZWYgT1BUSU1JWkVSX0RFQlVHCiAJcHByaW50KHJlbCk7CiAjZW5kaWYKQEAgLTEyOTgsNiArMTM1 NiwzNiBAQCBzZXRfYXBwZW5kX3JlbF9wYXRobGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAogCWFkZF9wYXRoc190b19hcHBlbmRfcmVsKHJvb3QsIHJlbCwgbGl2ZV9jaGls ZHJlbHMpOwogfQogCisvKgorICogc2V0X2dyb3VwZWRfcmVsX3BhdGhsaXN0CisgKgkgIElmIGEg Z3JvdXBlZCByZWxhdGlvbiBmb3IgdGhlIGdpdmVuICdyZWwnIGV4aXN0cywgYnVpbGQgcGFydGlh bAorICoJICBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgaXQuCisgKi8KK3N0YXRpYyB2b2lkCitzZXRf Z3JvdXBlZF9yZWxfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkK K3sKKwlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIG5v IGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyBvciBncm91cGluZyBleHByZXNzaW9ucywgZWFnZXIKKwkg KiBhZ2dyZWdhdGlvbiBpcyBub3QgcG9zc2libGUuCisJICovCisJaWYgKHJvb3QtPmFnZ19jbGF1 c2VfbGlzdCA9PSBOSUwgfHwKKwkJcm9vdC0+Z3JvdXBfZXhwcl9saXN0ID09IE5JTCkKKwkJcmV0 dXJuOworCisJLyogQWRkIHBhdGhzIHRvIHRoZSBncm91cGVkIGJhc2UgcmVsYXRpb24gaWYgb25l IGV4aXN0cy4gKi8KKwlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9yZWwocm9vdCwgcmVsLT5y ZWxpZHMpOworCWlmIChyZWxfZ3JvdXBlZCkKKwl7CisJCUFzc2VydChJU19HUk9VUEVEX1JFTChy ZWxfZ3JvdXBlZCkpOworCisJCWdlbmVyYXRlX2dyb3VwZWRfcGF0aHMocm9vdCwgcmVsX2dyb3Vw ZWQsIHJlbCwKKwkJCQkJCQkgICByZWxfZ3JvdXBlZC0+YWdnX2luZm8pOworCQlzZXRfY2hlYXBl c3QocmVsX2dyb3VwZWQpOworCX0KK30KKwogCiAvKgogICogYWRkX3BhdGhzX3RvX2FwcGVuZF9y ZWwKQEAgLTMzMDYsNiArMzM5NCwzMTggQEAgZ2VuZXJhdGVfdXNlZnVsX2dhdGhlcl9wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBib29sIG92ZXJyaWRlX3IKIAl9CiB9 CiAKKy8qCisgKiBnZW5lcmF0ZV9ncm91cGVkX3BhdGhzCisgKgkJR2VuZXJhdGUgcGF0aHMgZm9y IGEgZ3JvdXBlZCByZWxhdGlvbiBieSBhZGRpbmcgc29ydGVkIGFuZCBoYXNoZWQKKyAqCQlwYXJ0 aWFsIGFnZ3JlZ2F0aW9uIHBhdGhzIG9uIHRvcCBvZiBwYXRocyBvZiB0aGUgcGxhaW4gYmFzZSBv ciBqb2luCisgKgkJcmVsYXRpb24uCisgKgorICogVGhlIGluZm9ybWF0aW9uIG5lZWRlZCBhcmUg cHJvdmlkZWQgYnkgdGhlIFJlbEFnZ0luZm8gc3RydWN0dXJlLgorICovCit2b2lkCitnZW5lcmF0 ZV9ncm91cGVkX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWxfZ3JvdXBl ZCwKKwkJCQkJICAgUmVsT3B0SW5mbyAqcmVsX3BsYWluLCBSZWxBZ2dJbmZvICphZ2dfaW5mbykK K3sKKwlBZ2dDbGF1c2VDb3N0cyBhZ2dfY29zdHM7CisJYm9vbAkJY2FuX2hhc2g7CisJYm9vbAkJ Y2FuX3NvcnQ7CisJUGF0aAkgICAqY2hlYXBlc3RfdG90YWxfcGF0aCA9IE5VTEw7CisJUGF0aAkg ICAqY2hlYXBlc3RfcGFydGlhbF9wYXRoID0gTlVMTDsKKwlkb3VibGUJCWROdW1Hcm91cHMgPSAw OworCWRvdWJsZQkJZE51bVBhcnRpYWxHcm91cHMgPSAwOworCisJaWYgKElTX0RVTU1ZX1JFTChy ZWxfcGxhaW4pKQorCXsKKwkJbWFya19kdW1teV9yZWwocmVsX2dyb3VwZWQpOworCQlyZXR1cm47 CisJfQorCisJLyoKKwkgKiBJZiB0aGUgZ3JvdXBlZCBwYXRocyBmb3IgdGhlIGdpdmVuIHJlbGF0 aW9uIGFyZSBub3QgY29uc2lkZXJlZCB1c2VmdWwsCisJICogZG8gbm90IGJvdGhlciB0byBnZW5l cmF0ZSB0aGVtLgorCSAqLworCWlmICghYWdnX2luZm8tPmFnZ191c2VmdWwpCisJCXJldHVybjsK KworCU1lbVNldCgmYWdnX2Nvc3RzLCAwLCBzaXplb2YoQWdnQ2xhdXNlQ29zdHMpKTsKKwlnZXRf YWdnX2NsYXVzZV9jb3N0cyhyb290LCBBR0dTUExJVF9JTklUSUFMX1NFUklBTCwgJmFnZ19jb3N0 cyk7CisKKwkvKgorCSAqIERldGVybWluZSB3aGV0aGVyIGl0J3MgcG9zc2libGUgdG8gcGVyZm9y bSBzb3J0LWJhc2VkIGltcGxlbWVudGF0aW9ucworCSAqIG9mIGdyb3VwaW5nLgorCSAqLworCWNh bl9zb3J0ID0gZ3JvdXBpbmdfaXNfc29ydGFibGUoYWdnX2luZm8tPmdyb3VwX2NsYXVzZXMpOwor CisJLyoKKwkgKiBEZXRlcm1pbmUgd2hldGhlciB3ZSBzaG91bGQgY29uc2lkZXIgaGFzaC1iYXNl ZCBpbXBsZW1lbnRhdGlvbnMgb2YKKwkgKiBncm91cGluZy4KKwkgKi8KKwlBc3NlcnQocm9vdC0+ bnVtT3JkZXJlZEFnZ3MgPT0gMCk7CisJY2FuX2hhc2ggPSAoYWdnX2luZm8tPmdyb3VwX2NsYXVz ZXMgIT0gTklMICYmCisJCQkJZ3JvdXBpbmdfaXNfaGFzaGFibGUoYWdnX2luZm8tPmdyb3VwX2Ns YXVzZXMpKTsKKworCS8qCisJICogQ29uc2lkZXIgd2hldGhlciB3ZSBzaG91bGQgZ2VuZXJhdGUg cGFydGlhbGx5IGFnZ3JlZ2F0ZWQgbm9uLXBhcnRpYWwKKwkgKiBwYXRocy4gIFdlIGNhbiBvbmx5 IGRvIHRoaXMgaWYgd2UgaGF2ZSBhIG5vbi1wYXJ0aWFsIHBhdGguCisJICovCisJaWYgKHJlbF9w bGFpbi0+cGF0aGxpc3QgIT0gTklMKQorCXsKKwkJY2hlYXBlc3RfdG90YWxfcGF0aCA9IHJlbF9w bGFpbi0+Y2hlYXBlc3RfdG90YWxfcGF0aDsKKwkJQXNzZXJ0KGNoZWFwZXN0X3RvdGFsX3BhdGgg IT0gTlVMTCk7CisJfQorCisJLyoKKwkgKiBJZiBwYXJhbGxlbGlzbSBpcyBwb3NzaWJsZSBmb3Ig cmVsX2dyb3VwZWQsIHRoZW4gd2Ugc2hvdWxkIGNvbnNpZGVyCisJICogZ2VuZXJhdGluZyBwYXJ0 aWFsbHktZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzLiAgSG93ZXZlciwgaWYgdGhlIHBsYWluIHJlbAor CSAqIGhhcyBubyBwYXJ0aWFsIHBhdGhzLCB0aGVuIHdlIGNhbid0LgorCSAqLworCWlmIChyZWxf Z3JvdXBlZC0+Y29uc2lkZXJfcGFyYWxsZWwgJiYgcmVsX3BsYWluLT5wYXJ0aWFsX3BhdGhsaXN0 ICE9IE5JTCkKKwl7CisJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aCA9IGxpbml0aWFsKHJlbF9wbGFp bi0+cGFydGlhbF9wYXRobGlzdCk7CisJCUFzc2VydChjaGVhcGVzdF9wYXJ0aWFsX3BhdGggIT0g TlVMTCk7CisJfQorCisJLyogRXN0aW1hdGUgbnVtYmVyIG9mIHBhcnRpYWwgZ3JvdXBzLiAqLwor CWlmIChjaGVhcGVzdF90b3RhbF9wYXRoICE9IE5VTEwpCisJCWROdW1Hcm91cHMgPSBlc3RpbWF0 ZV9udW1fZ3JvdXBzKHJvb3QsCisJCQkJCQkJCQkJIGFnZ19pbmZvLT5ncm91cF9leHBycywKKwkJ CQkJCQkJCQkgY2hlYXBlc3RfdG90YWxfcGF0aC0+cm93cywKKwkJCQkJCQkJCQkgTlVMTCwgTlVM TCk7CisJaWYgKGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAhPSBOVUxMKQorCQlkTnVtUGFydGlhbEdy b3VwcyA9IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwKKwkJCQkJCQkJCQkJCWFnZ19pbmZvLT5n cm91cF9leHBycywKKwkJCQkJCQkJCQkJCWNoZWFwZXN0X3BhcnRpYWxfcGF0aC0+cm93cywKKwkJ CQkJCQkJCQkJCU5VTEwsIE5VTEwpOworCisJaWYgKGNhbl9zb3J0ICYmIGNoZWFwZXN0X3RvdGFs X3BhdGggIT0gTlVMTCkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCisJCS8qCisJCSAqIFVzZSBh bnkgYXZhaWxhYmxlIHN1aXRhYmx5LXNvcnRlZCBwYXRoIGFzIGlucHV0LCBhbmQgYWxzbyBjb25z aWRlcgorCQkgKiBzb3J0aW5nIHRoZSBjaGVhcGVzdC10b3RhbCBwYXRoLgorCQkgKi8KKwkJZm9y ZWFjaChsYywgcmVsX3BsYWluLT5wYXRobGlzdCkKKwkJeworCQkJUGF0aAkgICAqaW5wdXRfcGF0 aCA9IChQYXRoICopIGxmaXJzdChsYyk7CisJCQlQYXRoCSAgICpwYXRoOworCQkJYm9vbAkJaXNf c29ydGVkOworCQkJaW50CQkJcHJlc29ydGVkX2tleXM7CisKKwkJCS8qCisJCQkgKiBTaW5jZSB0 aGUgcGF0aCBvcmlnaW5hdGVzIGZyb20gYSBub24tZ3JvdXBlZCByZWxhdGlvbiB0aGF0IGlzCisJ CQkgKiBub3QgYXdhcmUgb2YgZWFnZXIgYWdncmVnYXRpb24sIHdlIG11c3QgZW5zdXJlIHRoYXQg aXQgcHJvdmlkZXMKKwkJCSAqIHRoZSBjb3JyZWN0IGlucHV0IGZvciBwYXJ0aWFsIGFnZ3JlZ2F0 aW9uLgorCQkJICovCisJCQlwYXRoID0gKFBhdGggKikgY3JlYXRlX3Byb2plY3Rpb25fcGF0aChy b290LAorCQkJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkgICBpbnB1dF9w YXRoLAorCQkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19pbnB1dCk7CisKKwkJCWlzX3NvcnRl ZCA9IHBhdGhrZXlzX2NvdW50X2NvbnRhaW5lZF9pbihhZ2dfaW5mby0+Z3JvdXBfcGF0aGtleXMs CisJCQkJCQkJCQkJCQkJcGF0aC0+cGF0aGtleXMsCisJCQkJCQkJCQkJCQkJJnByZXNvcnRlZF9r ZXlzKTsKKwkJCWlmICghaXNfc29ydGVkKQorCQkJeworCQkJCS8qCisJCQkJICogVHJ5IGF0IGxl YXN0IHNvcnRpbmcgdGhlIGNoZWFwZXN0IHBhdGggYW5kIGFsc28gdHJ5CisJCQkJICogaW5jcmVt ZW50YWxseSBzb3J0aW5nIGFueSBwYXRoIHdoaWNoIGlzIHBhcnRpYWxseSBzb3J0ZWQKKwkJCQkg KiBhbHJlYWR5IChubyBuZWVkIHRvIGRlYWwgd2l0aCBwYXRocyB3aGljaCBoYXZlIHByZXNvcnRl ZAorCQkJCSAqIGtleXMgd2hlbiBpbmNyZW1lbnRhbCBzb3J0IGlzIGRpc2FibGVkIHVubGVzcyBp dCdzIHRoZQorCQkJCSAqIGNoZWFwZXN0IGlucHV0IHBhdGgpLgorCQkJCSAqLworCQkJCWlmIChp bnB1dF9wYXRoICE9IGNoZWFwZXN0X3RvdGFsX3BhdGggJiYKKwkJCQkJKHByZXNvcnRlZF9rZXlz ID09IDAgfHwgIWVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0KSkKKwkJCQkJY29udGludWU7CisKKwkJ CQkvKgorCQkJCSAqIFdlJ3ZlIG5vIG5lZWQgdG8gY29uc2lkZXIgYm90aCBhIHNvcnQgYW5kIGlu Y3JlbWVudGFsIHNvcnQuCisJCQkJICogV2UnbGwganVzdCBkbyBhIHNvcnQgaWYgdGhlcmUgYXJl IG5vIHByZXNvcnRlZCBrZXlzIGFuZCBhbgorCQkJCSAqIGluY3JlbWVudGFsIHNvcnQgd2hlbiB0 aGVyZSBhcmUgcHJlc29ydGVkIGtleXMuCisJCQkJICovCisJCQkJaWYgKHByZXNvcnRlZF9rZXlz ID09IDAgfHwgIWVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0KQorCQkJCQlwYXRoID0gKFBhdGggKikg Y3JlYXRlX3NvcnRfcGF0aChyb290LAorCQkJCQkJCQkJCQkJCSByZWxfZ3JvdXBlZCwKKwkJCQkJ CQkJCQkJCQkgcGF0aCwKKwkJCQkJCQkJCQkJCQkgYWdnX2luZm8tPmdyb3VwX3BhdGhrZXlzLAor CQkJCQkJCQkJCQkJCSAtMS4wKTsKKwkJCQllbHNlCisJCQkJCXBhdGggPSAoUGF0aCAqKSBjcmVh dGVfaW5jcmVtZW50YWxfc29ydF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJCQkJIHJlbF9ncm91 cGVkLAorCQkJCQkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJCQkJCQkJCSBhZ2dfaW5mby0+ Z3JvdXBfcGF0aGtleXMsCisJCQkJCQkJCQkJCQkJCQkJIHByZXNvcnRlZF9rZXlzLAorCQkJCQkJ CQkJCQkJCQkJCSAtMS4wKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIHF1YWwgaXMgTklMIGJlY2F1 c2UgdGhlIEhBVklORyBjbGF1c2UgY2Fubm90IGJlIGV2YWx1YXRlZCB1bnRpbAorCQkJICogdGhl IGZpbmFsIHZhbHVlIG9mIHRoZSBhZ2dyZWdhdGUgaXMga25vd24uCisJCQkgKi8KKwkJCXBhdGgg PSAoUGF0aCAqKSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJcmVsX2dyb3VwZWQs CisJCQkJCQkJCQkJCXBhdGgsCisJCQkJCQkJCQkJCWFnZ19pbmZvLT50YXJnZXQsCisJCQkJCQkJ CQkJCUFHR19TT1JURUQsCisJCQkJCQkJCQkJCUFHR1NQTElUX0lOSVRJQUxfU0VSSUFMLAorCQkJ CQkJCQkJCQlhZ2dfaW5mby0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJCQkJCQkJTklMLAorCQkJCQkJ CQkJCQkmYWdnX2Nvc3RzLAorCQkJCQkJCQkJCQlkTnVtR3JvdXBzKTsKKworCQkJYWRkX3BhdGgo cmVsX2dyb3VwZWQsIHBhdGgpOworCQl9CisJfQorCisJaWYgKGNhbl9zb3J0ICYmIGNoZWFwZXN0 X3BhcnRpYWxfcGF0aCAhPSBOVUxMKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJLyogU2lt aWxhciB0byBhYm92ZSBsb2dpYywgYnV0IGZvciBwYXJ0aWFsIHBhdGhzLiAqLworCQlmb3JlYWNo KGxjLCByZWxfcGxhaW4tPnBhcnRpYWxfcGF0aGxpc3QpCisJCXsKKwkJCVBhdGgJICAgKmlucHV0 X3BhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMpOworCQkJUGF0aAkgICAqcGF0aDsKKwkJCWJvb2wJ CWlzX3NvcnRlZDsKKwkJCWludAkJCXByZXNvcnRlZF9rZXlzOworCisJCQkvKgorCQkJICogU2lu Y2UgdGhlIHBhdGggb3JpZ2luYXRlcyBmcm9tIGEgbm9uLWdyb3VwZWQgcmVsYXRpb24gdGhhdCBp cworCQkJICogbm90IGF3YXJlIG9mIGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3ZSBtdXN0IGVuc3VyZSB0 aGF0IGl0IHByb3ZpZGVzCisJCQkgKiB0aGUgY29ycmVjdCBpbnB1dCBmb3IgcGFydGlhbCBhZ2dy ZWdhdGlvbi4KKwkJCSAqLworCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9wcm9qZWN0aW9uX3Bh dGgocm9vdCwKKwkJCQkJCQkJCQkJCSAgIHJlbF9ncm91cGVkLAorCQkJCQkJCQkJCQkJICAgaW5w dXRfcGF0aCwKKwkJCQkJCQkJCQkJCSAgIGFnZ19pbmZvLT5hZ2dfaW5wdXQpOworCisJCQlpc19z b3J0ZWQgPSBwYXRoa2V5c19jb3VudF9jb250YWluZWRfaW4oYWdnX2luZm8tPmdyb3VwX3BhdGhr ZXlzLAorCQkJCQkJCQkJCQkJCXBhdGgtPnBhdGhrZXlzLAorCQkJCQkJCQkJCQkJCSZwcmVzb3J0 ZWRfa2V5cyk7CisKKwkJCWlmICghaXNfc29ydGVkKQorCQkJeworCQkJCS8qCisJCQkJICogVHJ5 IGF0IGxlYXN0IHNvcnRpbmcgdGhlIGNoZWFwZXN0IHBhdGggYW5kIGFsc28gdHJ5CisJCQkJICog aW5jcmVtZW50YWxseSBzb3J0aW5nIGFueSBwYXRoIHdoaWNoIGlzIHBhcnRpYWxseSBzb3J0ZWQK KwkJCQkgKiBhbHJlYWR5IChubyBuZWVkIHRvIGRlYWwgd2l0aCBwYXRocyB3aGljaCBoYXZlIHBy ZXNvcnRlZAorCQkJCSAqIGtleXMgd2hlbiBpbmNyZW1lbnRhbCBzb3J0IGlzIGRpc2FibGVkIHVu bGVzcyBpdCdzIHRoZQorCQkJCSAqIGNoZWFwZXN0IGlucHV0IHBhdGgpLgorCQkJCSAqLworCQkJ CWlmIChpbnB1dF9wYXRoICE9IGNoZWFwZXN0X3BhcnRpYWxfcGF0aCAmJgorCQkJCQkocHJlc29y dGVkX2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpKQorCQkJCQljb250aW51 ZTsKKworCQkJCS8qCisJCQkJICogV2UndmUgbm8gbmVlZCB0byBjb25zaWRlciBib3RoIGEgc29y dCBhbmQgaW5jcmVtZW50YWwgc29ydC4KKwkJCQkgKiBXZSdsbCBqdXN0IGRvIGEgc29ydCBpZiB0 aGVyZSBhcmUgbm8gcHJlc29ydGVkIGtleXMgYW5kIGFuCisJCQkJICogaW5jcmVtZW50YWwgc29y dCB3aGVuIHRoZXJlIGFyZSBwcmVzb3J0ZWQga2V5cy4KKwkJCQkgKi8KKwkJCQlpZiAocHJlc29y dGVkX2tleXMgPT0gMCB8fCAhZW5hYmxlX2luY3JlbWVudGFsX3NvcnQpCisJCQkJCXBhdGggPSAo UGF0aCAqKSBjcmVhdGVfc29ydF9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJIHJlbF9ncm91cGVk LAorCQkJCQkJCQkJCQkJCSBwYXRoLAorCQkJCQkJCQkJCQkJCSBhZ2dfaW5mby0+Z3JvdXBfcGF0 aGtleXMsCisJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJCWVsc2UKKwkJCQkJcGF0aCA9IChQYXRo ICopIGNyZWF0ZV9pbmNyZW1lbnRhbF9zb3J0X3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJCQkJCQkg cmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCQkJCQkJIHBhdGgsCisJCQkJCQkJCQkJCQkJCQkJIGFn Z19pbmZvLT5ncm91cF9wYXRoa2V5cywKKwkJCQkJCQkJCQkJCQkJCQkgcHJlc29ydGVkX2tleXMs CisJCQkJCQkJCQkJCQkJCQkJIC0xLjApOworCQkJfQorCisJCQkvKgorCQkJICogcXVhbCBpcyBO SUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVzZSBjYW5ub3QgYmUgZXZhbHVhdGVkIHVudGlsCisJ CQkgKiB0aGUgZmluYWwgdmFsdWUgb2YgdGhlIGFnZ3JlZ2F0ZSBpcyBrbm93bi4KKwkJCSAqLwor CQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2dfcGF0aChyb290LAorCQkJCQkJCQkJCQlyZWxf Z3JvdXBlZCwKKwkJCQkJCQkJCQkJcGF0aCwKKwkJCQkJCQkJCQkJYWdnX2luZm8tPnRhcmdldCwK KwkJCQkJCQkJCQkJQUdHX1NPUlRFRCwKKwkJCQkJCQkJCQkJQUdHU1BMSVRfSU5JVElBTF9TRVJJ QUwsCisJCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1c2VzLAorCQkJCQkJCQkJCQlOSUws CisJCQkJCQkJCQkJCSZhZ2dfY29zdHMsCisJCQkJCQkJCQkJCWROdW1QYXJ0aWFsR3JvdXBzKTsK KworCQkJYWRkX3BhcnRpYWxfcGF0aChyZWxfZ3JvdXBlZCwgcGF0aCk7CisJCX0KKwl9CisKKwkv KgorCSAqIEFkZCBhIHBhcnRpYWxseS1ncm91cGVkIEhhc2hBZ2cgUGF0aCB3aGVyZSBwb3NzaWJs ZQorCSAqLworCWlmIChjYW5faGFzaCAmJiBjaGVhcGVzdF90b3RhbF9wYXRoICE9IE5VTEwpCisJ eworCQlQYXRoCSAgICpwYXRoOworCisJCS8qCisJCSAqIFNpbmNlIHRoZSBwYXRoIG9yaWdpbmF0 ZXMgZnJvbSBhIG5vbi1ncm91cGVkIHJlbGF0aW9uIHRoYXQgaXMgbm90CisJCSAqIGF3YXJlIG9m IGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IGl0IHByb3ZpZGVzIHRoZQor CQkgKiBjb3JyZWN0IGlucHV0IGZvciBwYXJ0aWFsIGFnZ3JlZ2F0aW9uLgorCQkgKi8KKwkJcGF0 aCA9IChQYXRoICopIGNyZWF0ZV9wcm9qZWN0aW9uX3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJICAg cmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJCSAgIGNoZWFwZXN0X3RvdGFsX3BhdGgsCisJCQkJCQkJ CQkJCSAgIGFnZ19pbmZvLT5hZ2dfaW5wdXQpOworCisJCS8qCisJCSAqIHF1YWwgaXMgTklMIGJl Y2F1c2UgdGhlIEhBVklORyBjbGF1c2UgY2Fubm90IGJlIGV2YWx1YXRlZCB1bnRpbCB0aGUKKwkJ ICogZmluYWwgdmFsdWUgb2YgdGhlIGFnZ3JlZ2F0ZSBpcyBrbm93bi4KKwkJICovCisJCXBhdGgg PSAoUGF0aCAqKSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKKwkJCQkJCQkJCQlyZWxfZ3JvdXBlZCwK KwkJCQkJCQkJCQlwYXRoLAorCQkJCQkJCQkJCWFnZ19pbmZvLT50YXJnZXQsCisJCQkJCQkJCQkJ QUdHX0hBU0hFRCwKKwkJCQkJCQkJCQlBR0dTUExJVF9JTklUSUFMX1NFUklBTCwKKwkJCQkJCQkJ CQlhZ2dfaW5mby0+Z3JvdXBfY2xhdXNlcywKKwkJCQkJCQkJCQlOSUwsCisJCQkJCQkJCQkJJmFn Z19jb3N0cywKKwkJCQkJCQkJCQlkTnVtR3JvdXBzKTsKKworCQlhZGRfcGF0aChyZWxfZ3JvdXBl ZCwgcGF0aCk7CisJfQorCisJLyoKKwkgKiBOb3cgYWRkIGEgcGFydGlhbGx5LWdyb3VwZWQgSGFz aEFnZyBwYXJ0aWFsIFBhdGggd2hlcmUgcG9zc2libGUKKwkgKi8KKwlpZiAoY2FuX2hhc2ggJiYg Y2hlYXBlc3RfcGFydGlhbF9wYXRoICE9IE5VTEwpCisJeworCQlQYXRoCSAgICpwYXRoOworCisJ CS8qCisJCSAqIFNpbmNlIHRoZSBwYXRoIG9yaWdpbmF0ZXMgZnJvbSBhIG5vbi1ncm91cGVkIHJl bGF0aW9uIHRoYXQgaXMgbm90CisJCSAqIGF3YXJlIG9mIGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3ZSBt dXN0IGVuc3VyZSB0aGF0IGl0IHByb3ZpZGVzIHRoZQorCQkgKiBjb3JyZWN0IGlucHV0IGZvciBw YXJ0aWFsIGFnZ3JlZ2F0aW9uLgorCQkgKi8KKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9wcm9q ZWN0aW9uX3BhdGgocm9vdCwKKwkJCQkJCQkJCQkJICAgcmVsX2dyb3VwZWQsCisJCQkJCQkJCQkJ CSAgIGNoZWFwZXN0X3BhcnRpYWxfcGF0aCwKKwkJCQkJCQkJCQkJICAgYWdnX2luZm8tPmFnZ19p bnB1dCk7CisKKwkJLyoKKwkJICogcXVhbCBpcyBOSUwgYmVjYXVzZSB0aGUgSEFWSU5HIGNsYXVz ZSBjYW5ub3QgYmUgZXZhbHVhdGVkIHVudGlsIHRoZQorCQkgKiBmaW5hbCB2YWx1ZSBvZiB0aGUg YWdncmVnYXRlIGlzIGtub3duLgorCQkgKi8KKwkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9hZ2df cGF0aChyb290LAorCQkJCQkJCQkJCXJlbF9ncm91cGVkLAorCQkJCQkJCQkJCXBhdGgsCisJCQkJ CQkJCQkJYWdnX2luZm8tPnRhcmdldCwKKwkJCQkJCQkJCQlBR0dfSEFTSEVELAorCQkJCQkJCQkJ CUFHR1NQTElUX0lOSVRJQUxfU0VSSUFMLAorCQkJCQkJCQkJCWFnZ19pbmZvLT5ncm91cF9jbGF1 c2VzLAorCQkJCQkJCQkJCU5JTCwKKwkJCQkJCQkJCQkmYWdnX2Nvc3RzLAorCQkJCQkJCQkJCWRO dW1QYXJ0aWFsR3JvdXBzKTsKKworCQlhZGRfcGFydGlhbF9wYXRoKHJlbF9ncm91cGVkLCBwYXRo KTsKKwl9Cit9CisKIC8qCiAgKiBtYWtlX3JlbF9mcm9tX2pvaW5saXN0CiAgKgkgIEJ1aWxkIGFj Y2VzcyBwYXRocyB1c2luZyBhICJqb2lubGlzdCIgdG8gZ3VpZGUgdGhlIGpvaW4gcGF0aCBzZWFy Y2guCkBAIC0zNDE0LDkgKzM4MTQsMTAgQEAgbWFrZV9yZWxfZnJvbV9qb2lubGlzdChQbGFubmVy SW5mbyAqcm9vdCwgTGlzdCAqam9pbmxpc3QpCiAgKiBuZWVkZWQgZm9yIHRoZXNlIHBhdGhzIG5l ZWQgaGF2ZSBiZWVuIGluc3RhbnRpYXRlZC4KICAqCiAgKiBOb3RlIHRvIHBsdWdpbiBhdXRob3Jz OiB0aGUgZnVuY3Rpb25zIGludm9rZWQgZHVyaW5nIHN0YW5kYXJkX2pvaW5fc2VhcmNoKCkKLSAq IG1vZGlmeSByb290LT5qb2luX3JlbF9saXN0IGFuZCByb290LT5qb2luX3JlbF9oYXNoLiAgSWYg eW91IHdhbnQgdG8gZG8gbW9yZQotICogdGhhbiBvbmUgam9pbi1vcmRlciBzZWFyY2gsIHlvdSds bCBwcm9iYWJseSBuZWVkIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlCi0gKiBvcmlnaW5hbCBzdGF0 ZXMgb2YgdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzLiAgU2VlIGdlcW9fZXZhbCgpIGZvciBhbiBleGFt cGxlLgorICogbW9kaWZ5IHJvb3QtPmpvaW5fcmVsX2xpc3QtPml0ZW1zIGFuZCByb290LT5qb2lu X3JlbF9saXN0LT5oYXNoLiAgSWYgeW91CisgKiB3YW50IHRvIGRvIG1vcmUgdGhhbiBvbmUgam9p bi1vcmRlciBzZWFyY2gsIHlvdSdsbCBwcm9iYWJseSBuZWVkIHRvIHNhdmUgYW5kCisgKiByZXN0 b3JlIHRoZSBvcmlnaW5hbCBzdGF0ZXMgb2YgdGhvc2UgZGF0YSBzdHJ1Y3R1cmVzLiAgU2VlIGdl cW9fZXZhbCgpIGZvcgorICogYW4gZXhhbXBsZS4KICAqLwogUmVsT3B0SW5mbyAqCiBzdGFuZGFy ZF9qb2luX3NlYXJjaChQbGFubmVySW5mbyAqcm9vdCwgaW50IGxldmVsc19uZWVkZWQsIExpc3Qg KmluaXRpYWxfcmVscykKQEAgLTM0NjUsNiArMzg2NiwxMCBAQCBzdGFuZGFyZF9qb2luX3NlYXJj aChQbGFubmVySW5mbyAqcm9vdCwgaW50IGxldmVsc19uZWVkZWQsIExpc3QgKmluaXRpYWxfcmVs cykKIAkJICoKIAkJICogQWZ0ZXIgdGhhdCwgd2UncmUgZG9uZSBjcmVhdGluZyBwYXRocyBmb3Ig dGhlIGpvaW5yZWwsIHNvIHJ1bgogCQkgKiBzZXRfY2hlYXBlc3QoKS4KKwkJICoKKwkJICogSW4g YWRkaXRpb24sIHdlIGFsc28gcnVuIGdlbmVyYXRlX2dyb3VwZWRfcGF0aHMoKSBmb3IgdGhlIGdy b3VwZWQKKwkJICogcmVsYXRpb24gb2YgZWFjaCBqdXN0LXByb2Nlc3NlZCBqb2lucmVsLCBhbmQg cnVuIHNldF9jaGVhcGVzdCgpIGZvcgorCQkgKiB0aGUgZ3JvdXBlZCByZWxhdGlvbiBhZnRlcndh cmRzLgogCQkgKi8KIAkJZm9yZWFjaChsYywgcm9vdC0+am9pbl9yZWxfbGV2ZWxbbGV2XSkKIAkJ ewpAQCAtMzQ4NSw2ICszODkwLDI3IEBAIHN0YW5kYXJkX2pvaW5fc2VhcmNoKFBsYW5uZXJJbmZv ICpyb290LCBpbnQgbGV2ZWxzX25lZWRlZCwgTGlzdCAqaW5pdGlhbF9yZWxzKQogCQkJLyogRmlu ZCBhbmQgc2F2ZSB0aGUgY2hlYXBlc3QgcGF0aHMgZm9yIHRoaXMgcmVsICovCiAJCQlzZXRfY2hl YXBlc3QocmVsKTsKIAorCQkJLyoKKwkJCSAqIEV4Y2VwdCBmb3IgdGhlIHRvcG1vc3Qgc2Nhbi9q b2luIHJlbCwgY29uc2lkZXIgZ2VuZXJhdGluZworCQkJICogcGFydGlhbCBhZ2dyZWdhdGlvbiBw YXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gb24gdG9wIG9mCisJCQkgKiB0aGUgcGF0aHMg b2YgdGhpcyByZWwuICBBZnRlciB0aGF0LCB3ZSdyZSBkb25lIGNyZWF0aW5nIHBhdGhzCisJCQkg KiBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24sIHNvIHJ1biBzZXRfY2hlYXBlc3QoKS4KKwkJCSAq LworCQkJaWYgKCFibXNfZXF1YWwocmVsLT5yZWxpZHMsIHJvb3QtPmFsbF9xdWVyeV9yZWxzKSkK KwkJCXsKKwkJCQlSZWxPcHRJbmZvICpyZWxfZ3JvdXBlZDsKKworCQkJCXJlbF9ncm91cGVkID0g ZmluZF9ncm91cGVkX3JlbChyb290LCByZWwtPnJlbGlkcyk7CisJCQkJaWYgKHJlbF9ncm91cGVk KQorCQkJCXsKKwkJCQkJQXNzZXJ0KElTX0dST1VQRURfUkVMKHJlbF9ncm91cGVkKSk7CisKKwkJ CQkJZ2VuZXJhdGVfZ3JvdXBlZF9wYXRocyhyb290LCByZWxfZ3JvdXBlZCwgcmVsLAorCQkJCQkJ CQkJCSAgIHJlbF9ncm91cGVkLT5hZ2dfaW5mbyk7CisJCQkJCXNldF9jaGVhcGVzdChyZWxfZ3Jv dXBlZCk7CisJCQkJfQorCQkJfQorCiAjaWZkZWYgT1BUSU1JWkVSX0RFQlVHCiAJCQlwcHJpbnQo cmVsKTsKICNlbmRpZgpAQCAtNDM1Myw2ICs0Nzc5LDI5IEBAIGdlbmVyYXRlX3BhcnRpdGlvbndp c2Vfam9pbl9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQogCQlpZiAo SVNfRFVNTVlfUkVMKGNoaWxkX3JlbCkpCiAJCQljb250aW51ZTsKIAorCQkvKgorCQkgKiBFeGNl cHQgZm9yIHRoZSB0b3Btb3N0IHNjYW4vam9pbiByZWwsIGNvbnNpZGVyIGdlbmVyYXRpbmcgcGFy dGlhbAorCQkgKiBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdyb3VwZWQgcmVsYXRpb24gb24g dG9wIG9mIHRoZSBwYXRocyBvZgorCQkgKiB0aGlzIHBhcnRpdGlvbmVkIGNoaWxkLWpvaW4uICBB ZnRlciB0aGF0LCB3ZSdyZSBkb25lIGNyZWF0aW5nIHBhdGhzCisJCSAqIGZvciB0aGUgZ3JvdXBl ZCByZWxhdGlvbiwgc28gcnVuIHNldF9jaGVhcGVzdCgpLgorCQkgKi8KKwkJaWYgKCFibXNfZXF1 YWwoSVNfT1RIRVJfUkVMKHJlbCkgPworCQkJCQkgICByZWwtPnRvcF9wYXJlbnRfcmVsaWRzIDog cmVsLT5yZWxpZHMsCisJCQkJCSAgIHJvb3QtPmFsbF9xdWVyeV9yZWxzKSkKKwkJeworCQkJUmVs T3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisKKwkJCXJlbF9ncm91cGVkID0gZmluZF9ncm91cGVkX3Jl bChyb290LCBjaGlsZF9yZWwtPnJlbGlkcyk7CisJCQlpZiAocmVsX2dyb3VwZWQpCisJCQl7CisJ CQkJQXNzZXJ0KElTX0dST1VQRURfUkVMKHJlbF9ncm91cGVkKSk7CisKKwkJCQlnZW5lcmF0ZV9n cm91cGVkX3BhdGhzKHJvb3QsIHJlbF9ncm91cGVkLCBjaGlsZF9yZWwsCisJCQkJCQkJCQkgICBy ZWxfZ3JvdXBlZC0+YWdnX2luZm8pOworCQkJCXNldF9jaGVhcGVzdChyZWxfZ3JvdXBlZCk7CisJ CQl9CisJCX0KKwogI2lmZGVmIE9QVElNSVpFUl9ERUJVRwogCQlwcHJpbnQoY2hpbGRfcmVsKTsK ICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUu YyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKaW5kZXggYzM2Njg3YWE0 ZC4uYzA5M2I0N2FmNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29z dHNpemUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0x ODAsNiArMTgwLDggQEAgc3RhdGljIGJvb2wgY29zdF9xdWFsX2V2YWxfd2Fsa2VyKE5vZGUgKm5v ZGUsIGNvc3RfcXVhbF9ldmFsX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3Jl c3RyaWN0aW9uX3F1YWxfY29zdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJl bCwKIAkJCQkJCQkJCSAgUGFyYW1QYXRoSW5mbyAqcGFyYW1faW5mbywKIAkJCQkJCQkJCSAgUXVh bENvc3QgKnFwcXVhbF9jb3N0KTsKK3N0YXRpYyB2b2lkIHNldF9qb2lucGF0aF9zaXplKFBsYW5u ZXJJbmZvICpyb290LCBKb2luUGF0aCAqanBhdGgsCisJCQkJCQkJICBTcGVjaWFsSm9pbkluZm8g KnNqaW5mbyk7CiBzdGF0aWMgYm9vbCBoYXNfaW5kZXhlZF9qb2luX3F1YWxzKE5lc3RQYXRoICpw YXRoKTsKIHN0YXRpYyBkb3VibGUgYXBwcm94X3R1cGxlX2NvdW50KFBsYW5uZXJJbmZvICpyb290 LCBKb2luUGF0aCAqcGF0aCwKIAkJCQkJCQkJIExpc3QgKnF1YWxzKTsKQEAgLTMzNzAsMTkgKzMz NzIsNyBAQCBmaW5hbF9jb3N0X25lc3Rsb29wKFBsYW5uZXJJbmZvICpyb290LCBOZXN0UGF0aCAq cGF0aCwKIAlpZiAoaW5uZXJfcGF0aF9yb3dzIDw9IDApCiAJCWlubmVyX3BhdGhfcm93cyA9IDE7 CiAJLyogTWFyayB0aGUgcGF0aCB3aXRoIHRoZSBjb3JyZWN0IHJvdyBlc3RpbWF0ZSAqLwotCWlm IChwYXRoLT5qcGF0aC5wYXRoLnBhcmFtX2luZm8pCi0JCXBhdGgtPmpwYXRoLnBhdGgucm93cyA9 IHBhdGgtPmpwYXRoLnBhdGgucGFyYW1faW5mby0+cHBpX3Jvd3M7Ci0JZWxzZQotCQlwYXRoLT5q cGF0aC5wYXRoLnJvd3MgPSBwYXRoLT5qcGF0aC5wYXRoLnBhcmVudC0+cm93czsKLQotCS8qIEZv ciBwYXJ0aWFsIHBhdGhzLCBzY2FsZSByb3cgZXN0aW1hdGUuICovCi0JaWYgKHBhdGgtPmpwYXRo LnBhdGgucGFyYWxsZWxfd29ya2VycyA+IDApCi0JewotCQlkb3VibGUJCXBhcmFsbGVsX2Rpdmlz b3IgPSBnZXRfcGFyYWxsZWxfZGl2aXNvcigmcGF0aC0+anBhdGgucGF0aCk7Ci0KLQkJcGF0aC0+ anBhdGgucGF0aC5yb3dzID0KLQkJCWNsYW1wX3Jvd19lc3QocGF0aC0+anBhdGgucGF0aC5yb3dz IC8gcGFyYWxsZWxfZGl2aXNvcik7Ci0JfQorCXNldF9qb2lucGF0aF9zaXplKHJvb3QsICZwYXRo LT5qcGF0aCwgZXh0cmEtPnNqaW5mbyk7CiAKIAkvKiBjb3N0IG9mIGlubmVyLXJlbGF0aW9uIHNv dXJjZSBkYXRhICh3ZSBhbHJlYWR5IGRlYWx0IHdpdGggb3V0ZXIgcmVsKSAqLwogCkBAIC0zODY3 LDE5ICszODU3LDcgQEAgZmluYWxfY29zdF9tZXJnZWpvaW4oUGxhbm5lckluZm8gKnJvb3QsIE1l cmdlUGF0aCAqcGF0aCwKIAkJaW5uZXJfcGF0aF9yb3dzID0gMTsKIAogCS8qIE1hcmsgdGhlIHBh dGggd2l0aCB0aGUgY29ycmVjdCByb3cgZXN0aW1hdGUgKi8KLQlpZiAocGF0aC0+anBhdGgucGF0 aC5wYXJhbV9pbmZvKQotCQlwYXRoLT5qcGF0aC5wYXRoLnJvd3MgPSBwYXRoLT5qcGF0aC5wYXRo LnBhcmFtX2luZm8tPnBwaV9yb3dzOwotCWVsc2UKLQkJcGF0aC0+anBhdGgucGF0aC5yb3dzID0g cGF0aC0+anBhdGgucGF0aC5wYXJlbnQtPnJvd3M7Ci0KLQkvKiBGb3IgcGFydGlhbCBwYXRocywg c2NhbGUgcm93IGVzdGltYXRlLiAqLwotCWlmIChwYXRoLT5qcGF0aC5wYXRoLnBhcmFsbGVsX3dv cmtlcnMgPiAwKQotCXsKLQkJZG91YmxlCQlwYXJhbGxlbF9kaXZpc29yID0gZ2V0X3BhcmFsbGVs X2Rpdmlzb3IoJnBhdGgtPmpwYXRoLnBhdGgpOwotCi0JCXBhdGgtPmpwYXRoLnBhdGgucm93cyA9 Ci0JCQljbGFtcF9yb3dfZXN0KHBhdGgtPmpwYXRoLnBhdGgucm93cyAvIHBhcmFsbGVsX2Rpdmlz b3IpOwotCX0KKwlzZXRfam9pbnBhdGhfc2l6ZShyb290LCAmcGF0aC0+anBhdGgsIGV4dHJhLT5z amluZm8pOwogCiAJLyoKIAkgKiBDb21wdXRlIGNvc3Qgb2YgdGhlIG1lcmdlcXVhbHMgYW5kIHFw cXVhbHMgKG90aGVyIHJlc3RyaWN0aW9uIGNsYXVzZXMpCkBAIC00Mjk5LDE5ICs0Mjc3LDcgQEAg ZmluYWxfY29zdF9oYXNoam9pbihQbGFubmVySW5mbyAqcm9vdCwgSGFzaFBhdGggKnBhdGgsCiAJ cGF0aC0+anBhdGgucGF0aC5kaXNhYmxlZF9ub2RlcyA9IHdvcmtzcGFjZS0+ZGlzYWJsZWRfbm9k ZXM7CiAKIAkvKiBNYXJrIHRoZSBwYXRoIHdpdGggdGhlIGNvcnJlY3Qgcm93IGVzdGltYXRlICov Ci0JaWYgKHBhdGgtPmpwYXRoLnBhdGgucGFyYW1faW5mbykKLQkJcGF0aC0+anBhdGgucGF0aC5y b3dzID0gcGF0aC0+anBhdGgucGF0aC5wYXJhbV9pbmZvLT5wcGlfcm93czsKLQllbHNlCi0JCXBh dGgtPmpwYXRoLnBhdGgucm93cyA9IHBhdGgtPmpwYXRoLnBhdGgucGFyZW50LT5yb3dzOwotCi0J LyogRm9yIHBhcnRpYWwgcGF0aHMsIHNjYWxlIHJvdyBlc3RpbWF0ZS4gKi8KLQlpZiAocGF0aC0+ anBhdGgucGF0aC5wYXJhbGxlbF93b3JrZXJzID4gMCkKLQl7Ci0JCWRvdWJsZQkJcGFyYWxsZWxf ZGl2aXNvciA9IGdldF9wYXJhbGxlbF9kaXZpc29yKCZwYXRoLT5qcGF0aC5wYXRoKTsKLQotCQlw YXRoLT5qcGF0aC5wYXRoLnJvd3MgPQotCQkJY2xhbXBfcm93X2VzdChwYXRoLT5qcGF0aC5wYXRo LnJvd3MgLyBwYXJhbGxlbF9kaXZpc29yKTsKLQl9CisJc2V0X2pvaW5wYXRoX3NpemUocm9vdCwg JnBhdGgtPmpwYXRoLCBleHRyYS0+c2ppbmZvKTsKIAogCS8qIG1hcmsgdGhlIHBhdGggd2l0aCBl c3RpbWF0ZWQgIyBvZiBiYXRjaGVzICovCiAJcGF0aC0+bnVtX2JhdGNoZXMgPSBudW1iYXRjaGVz OwpAQCAtNTA2MSw2ICs1MDI3LDU3IEBAIGdldF9yZXN0cmljdGlvbl9xdWFsX2Nvc3QoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsCiAJCSpxcHF1YWxfY29zdCA9IGJhc2Vy ZWwtPmJhc2VyZXN0cmljdGNvc3Q7CiB9CiAKKy8qCisgKiBzZXRfam9pbnBhdGhfc2l6ZQorICoJ ICBTZXQgdGhlIGNvcnJlY3Qgcm93IGVzdGltYXRlIGZvciB0aGUgZ2l2ZW4gam9pbiBwYXRoLgor ICoKKyAqICdqcGF0aCcgaXMgdGhlIGpvaW4gcGF0aCB1bmRlciBjb25zaWRlcmF0aW9uLgorICog J3NqaW5mbycgaXMgYW55IFNwZWNpYWxKb2luSW5mbyByZWxldmFudCB0byB0aGlzIGpvaW4uCisg KgorICogTm90ZSB0aGF0IGZvciBhIGdyb3VwZWQgam9pbiByZWxhdGlvbiwgaXRzIHBhdGhzIGNv dWxkIGhhdmUgdmVyeSBkaWZmZXJlbnQKKyAqIHJvd2NvdW50IGVzdGltYXRlcywgc28gd2UgbmVl ZCB0byBjYWxjdWxhdGUgdGhlIHJvd2NvdW50IGVzdGltYXRlIHVzaW5nIHRoZQorICogb3V0ZXIg cGF0aCBhbmQgaW5uZXIgcGF0aCBvZiB0aGUgZ2l2ZW4gam9pbiBwYXRoLgorICovCitzdGF0aWMg dm9pZAorc2V0X2pvaW5wYXRoX3NpemUoUGxhbm5lckluZm8gKnJvb3QsIEpvaW5QYXRoICpqcGF0 aCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCit7CisJaWYgKElTX0dST1VQRURfUkVMKGpwYXRo LT5wYXRoLnBhcmVudCkpCisJeworCQlQYXRoCSAgICpvdXRlcl9wYXRoID0ganBhdGgtPm91dGVy am9pbnBhdGg7CisJCVBhdGgJICAgKmlubmVyX3BhdGggPSBqcGF0aC0+aW5uZXJqb2lucGF0aDsK KworCQkvKgorCQkgKiBFc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIHJvd3Mgb2YgdGhpcyBncm91cGVk IGpvaW4gcGF0aCBhcyB0aGUgc2l6ZXMKKwkJICogb2YgdGhlIG91dGVyIGFuZCBpbm5lciBwYXRo cyB0aW1lcyB0aGUgc2VsZWN0aXZpdHkgb2YgdGhlIGNsYXVzZXMKKwkJICogdGhhdCBoYXZlIGVu ZGVkIHVwIGF0IHRoaXMgam9pbiBub2RlLgorCQkgKi8KKwkJanBhdGgtPnBhdGgucm93cyA9IGNh bGNfam9pbnJlbF9zaXplX2VzdGltYXRlKHJvb3QsCisJCQkJCQkJCQkJCQkJICBqcGF0aC0+cGF0 aC5wYXJlbnQsCisJCQkJCQkJCQkJCQkJICBvdXRlcl9wYXRoLT5wYXJlbnQsCisJCQkJCQkJCQkJ CQkJICBpbm5lcl9wYXRoLT5wYXJlbnQsCisJCQkJCQkJCQkJCQkJICBvdXRlcl9wYXRoLT5yb3dz LAorCQkJCQkJCQkJCQkJCSAgaW5uZXJfcGF0aC0+cm93cywKKwkJCQkJCQkJCQkJCQkgIHNqaW5m bywKKwkJCQkJCQkJCQkJCQkgIGpwYXRoLT5qb2lucmVzdHJpY3RpbmZvKTsKKwl9CisJZWxzZQor CXsKKwkJaWYgKGpwYXRoLT5wYXRoLnBhcmFtX2luZm8pCisJCQlqcGF0aC0+cGF0aC5yb3dzID0g anBhdGgtPnBhdGgucGFyYW1faW5mby0+cHBpX3Jvd3M7CisJCWVsc2UKKwkJCWpwYXRoLT5wYXRo LnJvd3MgPSBqcGF0aC0+cGF0aC5wYXJlbnQtPnJvd3M7CisKKwkJLyogRm9yIHBhcnRpYWwgcGF0 aHMsIHNjYWxlIHJvdyBlc3RpbWF0ZS4gKi8KKwkJaWYgKGpwYXRoLT5wYXRoLnBhcmFsbGVsX3dv cmtlcnMgPiAwKQorCQl7CisJCQlkb3VibGUJCXBhcmFsbGVsX2Rpdmlzb3IgPSBnZXRfcGFyYWxs ZWxfZGl2aXNvcigmanBhdGgtPnBhdGgpOworCisJCQlqcGF0aC0+cGF0aC5yb3dzID0KKwkJCQlj bGFtcF9yb3dfZXN0KGpwYXRoLT5wYXRoLnJvd3MgLyBwYXJhbGxlbF9kaXZpc29yKTsKKwkJfQor CX0KK30KKwogCiAvKgogICogY29tcHV0ZV9zZW1pX2FudGlfam9pbl9mYWN0b3JzCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCA3ZGI1ZTMwZWVmLi4yNDhhYTNmZmZlIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTM1LDYgKzM1LDkgQEAgc3Rh dGljIGJvb2wgaGFzX2xlZ2FsX2pvaW5jbGF1c2UoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCk7CiBzdGF0aWMgYm9vbCByZXN0cmljdGlvbl9pc19jb25zdGFudF9mYWxzZShMaXN0 ICpyZXN0cmljdGxpc3QsCiAJCQkJCQkJCQkJICBSZWxPcHRJbmZvICpqb2lucmVsLAogCQkJCQkJ CQkJCSAgYm9vbCBvbmx5X3B1c2hlZF9kb3duKTsKK3N0YXRpYyB2b2lkIG1ha2VfZ3JvdXBlZF9q b2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwKKwkJCQkJCQkJICBS ZWxPcHRJbmZvICpyZWwyLCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJCQkgIFNwZWNpYWxK b2luSW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0cmljdGxpc3QpOwogc3RhdGljIHZvaWQgcG9wdWxh dGVfam9pbnJlbF93aXRoX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwx LAogCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbDIsIFJlbE9wdEluZm8gKmpvaW5yZWwsCiAJCQkJ CQkJCQkJU3BlY2lhbEpvaW5JbmZvICpzamluZm8sIExpc3QgKnJlc3RyaWN0bGlzdCk7CkBAIC03 NzEsNiArNzc0LDEwIEBAIG1ha2Vfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIpCiAJCXJldHVybiBqb2lucmVsOwogCX0KIAorCS8q IEJ1aWxkIGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIGZvciAnam9pbnJlbCcgaWYgcG9zc2libGUu ICovCisJbWFrZV9ncm91cGVkX2pvaW5fcmVsKHJvb3QsIHJlbDEsIHJlbDIsIGpvaW5yZWwsIHNq aW5mbywKKwkJCQkJCSAgcmVzdHJpY3RsaXN0KTsKKwogCS8qIEFkZCBwYXRocyB0byB0aGUgam9p biByZWxhdGlvbi4gKi8KIAlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9vdCwgcmVsMSwg cmVsMiwgam9pbnJlbCwgc2ppbmZvLAogCQkJCQkJCQlyZXN0cmljdGxpc3QpOwpAQCAtODgyLDYg Kzg4OSwxMzUgQEAgYWRkX291dGVyX2pvaW5zX3RvX3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwg UmVsaWRzIGlucHV0X3JlbGlkcywKIAlyZXR1cm4gaW5wdXRfcmVsaWRzOwogfQogCisvKgorICog bWFrZV9ncm91cGVkX2pvaW5fcmVsCisgKgkgIEJ1aWxkIGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9u IG91dCBvZiAnam9pbnJlbCcgaWYgZWFnZXIgYWdncmVnYXRpb24gaXMKKyAqCSAgcG9zc2libGUg YW5kIHRoZSAnam9pbnJlbCcgY2FuIHByb2R1Y2UgZ3JvdXBlZCBwYXRocy4KKyAqCisgKiBXZSBh bHNvIGdlbmVyYXRlIHBhcnRpYWwgYWdncmVnYXRpb24gcGF0aHMgZm9yIHRoZSBncm91cGVkIHJl bGF0aW9uIGJ5CisgKiBqb2luaW5nIHRoZSBncm91cGVkIHBhdGhzIG9mICdyZWwxJyB0byB0aGUg cGxhaW4gcGF0aHMgb2YgJ3JlbDInLCBvciBieQorICogam9pbmluZyB0aGUgZ3JvdXBlZCBwYXRo cyBvZiAncmVsMicgdG8gdGhlIHBsYWluIHBhdGhzIG9mICdyZWwxJy4KKyAqLworc3RhdGljIHZv aWQKK21ha2VfZ3JvdXBlZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsMSwKKwkJCQkJICBSZWxPcHRJbmZvICpyZWwyLCBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJ CQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBMaXN0ICpyZXN0cmljdGxpc3QpCit7CisJUmVs T3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisJUmVsT3B0SW5mbyAqcmVsMV9ncm91cGVkOworCVJlbE9w dEluZm8gKnJlbDJfZ3JvdXBlZDsKKwlib29sCQlyZWwxX2VtcHR5OworCWJvb2wJCXJlbDJfZW1w dHk7CisJYm9vbAkJeWV0X3RvX2FkZCA9IGZhbHNlOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUg bm8gYWdncmVnYXRlIGV4cHJlc3Npb25zIG9yIGdyb3VwaW5nIGV4cHJlc3Npb25zLCBlYWdlcgor CSAqIGFnZ3JlZ2F0aW9uIGlzIG5vdCBwb3NzaWJsZS4KKwkgKi8KKwlpZiAocm9vdC0+YWdnX2Ns YXVzZV9saXN0ID09IE5JTCB8fAorCQlyb290LT5ncm91cF9leHByX2xpc3QgPT0gTklMKQorCQly ZXR1cm47CisKKwkvKgorCSAqIFNlZSBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBncm91cGVkIGpvaW5y ZWwgZm9yIHRoaXMgam9pbnJlbC4KKwkgKi8KKwlyZWxfZ3JvdXBlZCA9IGZpbmRfZ3JvdXBlZF9y ZWwocm9vdCwgam9pbnJlbC0+cmVsaWRzKTsKKworCS8qCisJICogQ29uc3RydWN0IGEgbmV3IFJl bE9wdEluZm8gZm9yIHRoZSBncm91cGVkIGpvaW4gcmVsYXRpb24gaWYgdGhlcmUgaXMgbm8KKwkg KiBleGlzdGluZyBvbmUuCisJICovCisJaWYgKHJlbF9ncm91cGVkID09IE5VTEwpCisJeworCQlS ZWxBZ2dJbmZvICphZ2dfaW5mbyA9IE5VTEw7CisKKwkJLyoKKwkJICogUHJlcGFyZSB0aGUgaW5m b3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSBncm91cGVkIHBhdGhzIGZvciB0aGlzCisJCSAqIGpv aW4gcmVsYXRpb24uCisJCSAqLworCQlhZ2dfaW5mbyA9IGNyZWF0ZV9yZWxfYWdnX2luZm8ocm9v dCwgam9pbnJlbCk7CisJCWlmIChhZ2dfaW5mbyA9PSBOVUxMKQorCQkJcmV0dXJuOworCisJCS8q IGJ1aWxkIGEgZ3JvdXBlZCByZWxhdGlvbiBvdXQgb2YgdGhlIHBsYWluIHJlbGF0aW9uICovCisJ CXJlbF9ncm91cGVkID0gYnVpbGRfZ3JvdXBlZF9yZWwocm9vdCwgam9pbnJlbCk7CisJCXJlbF9n cm91cGVkLT5yZWx0YXJnZXQgPSBhZ2dfaW5mby0+dGFyZ2V0OworCQlyZWxfZ3JvdXBlZC0+cm93 cyA9IGFnZ19pbmZvLT5ncm91cGVkX3Jvd3M7CisJCXJlbF9ncm91cGVkLT5hZ2dfaW5mbyA9IGFn Z19pbmZvOworCisJCS8qCisJCSAqIElmIHRoZSBncm91cGVkIHBhdGhzIGZvciB0aGUgZ2l2ZW4g am9pbiByZWxhdGlvbiBhcmUgY29uc2lkZXJlZAorCQkgKiB1c2VmdWwsIGFkZCB0aGUgZ3JvdXBl ZCByZWxhdGlvbiB3ZSBqdXN0IGJ1aWx0IHRvIHRoZSBQbGFubmVySW5mbworCQkgKiB0byBtYWtl IGl0IGF2YWlsYWJsZSBmb3IgZnVydGhlciBqb2luaW5nIG9yIGZvciBhY3RpbmcgYXMgdGhlIHVw cGVyCisJCSAqIHJlbCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiBwYXJ0aWFsIGFnZ3JlZ2F0 aW9uLiAgT3RoZXJ3aXNlLCB3ZQorCQkgKiBuZWVkIHRvIHBvc3Rwb25lIHRoZSBkZWNpc2lvbiBv biBhZGRpbmcgdGhlIGdyb3VwZWQgcmVsYXRpb24gdG8gdGhlCisJCSAqIFBsYW5uZXJJbmZvLCBh cyBpdCBkZXBlbmRzIG9uIHdoZXRoZXIgd2UgY2FuIGdlbmVyYXRlIGFueSBncm91cGVkCisJCSAq IHBhdGhzIGJ5IGpvaW5pbmcgdGhlIGdpdmVuIHBhaXIgb2YgaW5wdXQgcmVsYXRpb25zLgorCQkg Ki8KKwkJaWYgKGFnZ19pbmZvLT5hZ2dfdXNlZnVsKQorCQkJYWRkX2dyb3VwZWRfcmVsKHJvb3Qs IHJlbF9ncm91cGVkKTsKKwkJZWxzZQorCQkJeWV0X3RvX2FkZCA9IHRydWU7CisJfQorCisJQXNz ZXJ0KElTX0dST1VQRURfUkVMKHJlbF9ncm91cGVkKSk7CisKKwkvKiBXZSBtYXkgaGF2ZSBhbHJl YWR5IHByb3ZlbiB0aGlzIGdyb3VwZWQgam9pbiByZWxhdGlvbiB0byBiZSBkdW1teS4gKi8KKwlp ZiAoSVNfRFVNTVlfUkVMKHJlbF9ncm91cGVkKSkKKwkJcmV0dXJuOworCisJLyogUmV0cmlldmUg dGhlIGdyb3VwZWQgcmVsYXRpb25zIGZvciB0aGUgdHdvIGlucHV0IHJlbHMgKi8KKwlyZWwxX2dy b3VwZWQgPSBmaW5kX2dyb3VwZWRfcmVsKHJvb3QsIHJlbDEtPnJlbGlkcyk7CisJcmVsMl9ncm91 cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwyLT5yZWxpZHMpOworCisJcmVsMV9lbXB0 eSA9IChyZWwxX2dyb3VwZWQgPT0gTlVMTCB8fCBJU19EVU1NWV9SRUwocmVsMV9ncm91cGVkKSk7 CisJcmVsMl9lbXB0eSA9IChyZWwyX2dyb3VwZWQgPT0gTlVMTCB8fCBJU19EVU1NWV9SRUwocmVs Ml9ncm91cGVkKSk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlJ3Mgbm8gZ3JvdXBlZCBy ZWxhdGlvbi4gKi8KKwlpZiAocmVsMV9lbXB0eSAmJiByZWwyX2VtcHR5KQorCQlyZXR1cm47CisK KwkvKiBKb2luaW5nIHR3byBncm91cGVkIHJlbGF0aW9ucyBpcyBjdXJyZW50bHkgbm90IHN1cHBv cnRlZCAqLworCWlmICghcmVsMV9lbXB0eSAmJiAhcmVsMl9lbXB0eSkKKwkJcmV0dXJuOworCisJ LyogR2VuZXJhdGUgcGFydGlhbCBhZ2dyZWdhdGlvbiBwYXRocyBmb3IgdGhlIGdyb3VwZWQgcmVs YXRpb24gKi8KKwlpZiAoIXJlbDFfZW1wdHkpCisJeworCQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhf cGF0aHMocm9vdCwgcmVsMV9ncm91cGVkLCByZWwyLCByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCXNq aW5mbywgcmVzdHJpY3RsaXN0KTsKKworCQkvKgorCQkgKiBJdCBzaG91bGRuJ3QgaGFwcGVuIHRo YXQgd2UgaGF2ZSBtYXJrZWQgcmVsMV9ncm91cGVkIGFzIGR1bW15IGluCisJCSAqIHBvcHVsYXRl X2pvaW5yZWxfd2l0aF9wYXRocyBkdWUgdG8gcHJvdmFibHkgY29uc3RhbnQtZmFsc2Ugam9pbgor CQkgKiByZXN0cmljdGlvbnMsIGhlbmNlIHdlIHdvdWxkbid0IGVuZCB1cCB3aXRoIGEgcGxhbiB0 aGF0IGhhcyBBZ2dyZWYKKwkJICogaW4gbm9uLUFnZyBwbGFuIG5vZGUuCisJCSAqLworCQlBc3Nl cnQoIUlTX0RVTU1ZX1JFTChyZWwxX2dyb3VwZWQpKTsKKwl9CisJZWxzZSBpZiAoIXJlbDJfZW1w dHkpCisJeworCQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9vdCwgcmVsMSwgcmVsMl9n cm91cGVkLCByZWxfZ3JvdXBlZCwKKwkJCQkJCQkJCXNqaW5mbywgcmVzdHJpY3RsaXN0KTsKKwor CQkvKgorCQkgKiBJdCBzaG91bGRuJ3QgaGFwcGVuIHRoYXQgd2UgaGF2ZSBtYXJrZWQgcmVsMl9n cm91cGVkIGFzIGR1bW15IGluCisJCSAqIHBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocyBkdWUg dG8gcHJvdmFibHkgY29uc3RhbnQtZmFsc2Ugam9pbgorCQkgKiByZXN0cmljdGlvbnMsIGhlbmNl IHdlIHdvdWxkbid0IGVuZCB1cCB3aXRoIGEgcGxhbiB0aGF0IGhhcyBBZ2dyZWYKKwkJICogaW4g bm9uLUFnZyBwbGFuIG5vZGUuCisJCSAqLworCQlBc3NlcnQoIUlTX0RVTU1ZX1JFTChyZWwyX2dy b3VwZWQpKTsKKwl9CisKKwkvKgorCSAqIFNpbmNlIHdlIGhhdmUgZ2VuZXJhdGVkIGdyb3VwZWQg cGF0aHMgYnkgam9pbmluZyB0aGUgZ2l2ZW4gcGFpciBvZgorCSAqIGlucHV0IHJlbGF0aW9ucywg YWRkIHRoZSBncm91cGVkIHJlbGF0aW9uIHRvIHRoZSBQbGFubmVySW5mbyBpZiB3ZSBoYXZlCisJ ICogbm90IGFscmVhZHkgZG9uZSBzby4KKwkgKi8KKwlpZiAoeWV0X3RvX2FkZCkKKwkJYWRkX2dy b3VwZWRfcmVsKHJvb3QsIHJlbF9ncm91cGVkKTsKK30KKwogLyoKICAqIHBvcHVsYXRlX2pvaW5y ZWxfd2l0aF9wYXRocwogICoJICBBZGQgcGF0aHMgdG8gdGhlIGdpdmVuIGpvaW5yZWwgZm9yIGdp dmVuIHBhaXIgb2Ygam9pbmluZyByZWxhdGlvbnMuIFRoZQpAQCAtMTY3NCw2ICsxODEwLDExIEBA IHRyeV9wYXJ0aXRpb253aXNlX2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJl bDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJCQkJCQkgYWRqdXN0X2NoaWxkX3JlbGlkcyhqb2lucmVs LT5yZWxpZHMsCiAJCQkJCQkJCQkJCSBuYXBwaW5mb3MsIGFwcGluZm9zKSkpOwogCisJCS8qIEJ1 aWxkIGEgZ3JvdXBlZCBqb2luIHJlbGF0aW9uIGZvciAnY2hpbGRfam9pbnJlbCcgaWYgcG9zc2li bGUgKi8KKwkJbWFrZV9ncm91cGVkX2pvaW5fcmVsKHJvb3QsIGNoaWxkX3JlbDEsIGNoaWxkX3Jl bDIsCisJCQkJCQkJICBjaGlsZF9qb2lucmVsLCBjaGlsZF9zamluZm8sCisJCQkJCQkJICBjaGls ZF9yZXN0cmljdGxpc3QpOworCiAJCS8qIEFuZCBtYWtlIHBhdGhzIGZvciB0aGUgY2hpbGQgam9p biAqLwogCQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9vdCwgY2hpbGRfcmVsMSwgY2hp bGRfcmVsMiwKIAkJCQkJCQkJCWNoaWxkX2pvaW5yZWwsIGNoaWxkX3NqaW5mbywKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKaW5kZXggNWYzOTA4YmU1MS4uMDUxMjc2YTczZSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKQEAgLTE0LDYgKzE0LDcgQEAK ICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgi CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCkBAIC04MSw2ICs4Miw4IEBA IHR5cGVkZWYgc3RydWN0IEpvaW5UcmVlSXRlbQogfSBKb2luVHJlZUl0ZW07CiAKIAorc3RhdGlj IHZvaWQgY3JlYXRlX2FnZ19jbGF1c2VfaW5mb3MoUGxhbm5lckluZm8gKnJvb3QpOworc3RhdGlj IHZvaWQgY3JlYXRlX2dyb3VwaW5nX2V4cHJfaW5mb3MoUGxhbm5lckluZm8gKnJvb3QpOwogc3Rh dGljIHZvaWQgZXh0cmFjdF9sYXRlcmFsX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKmJyZWwsCiAJCQkJCQkJCQkgICBJbmRleCBydGluZGV4KTsKIHN0YXRpYyBMaXN0 ICpkZWNvbnN0cnVjdF9yZWN1cnNlKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpqdG5vZGUsCkBA IC02MjgsNiArNjMxLDI3NiBAQCByZW1vdmVfdXNlbGVzc19ncm91cGJ5X2NvbHVtbnMoUGxhbm5l ckluZm8gKnJvb3QpCiAJfQogfQogCisvKgorICogc2V0dXBfZWFnZXJfYWdncmVnYXRpb24KKyAq CSAgQ2hlY2sgaWYgZWFnZXIgYWdncmVnYXRpb24gaXMgYXBwbGljYWJsZSwgYW5kIGlmIHNvIGNv bGxlY3Qgc3VpdGFibGUKKyAqCSAgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZCBncm91cGluZyBl eHByZXNzaW9ucyBpbiB0aGUgcXVlcnkuCisgKi8KK3ZvaWQKK3NldHVwX2VhZ2VyX2FnZ3JlZ2F0 aW9uKFBsYW5uZXJJbmZvICpyb290KQoreworCS8qCisJICogRG9uJ3QgYXBwbHkgZWFnZXIgYWdn cmVnYXRpb24gaWYgZGlzYWJsZWQgYnkgdXNlci4KKwkgKi8KKwlpZiAoIWVuYWJsZV9lYWdlcl9h Z2dyZWdhdGUpCisJCXJldHVybjsKKworCS8qCisJICogRG9uJ3QgYXBwbHkgZWFnZXIgYWdncmVn YXRpb24gaWYgdGhlcmUgYXJlIG5vIGF2YWlsYWJsZSBHUk9VUCBCWQorCSAqIGNsYXVzZXMuCisJ ICovCisJaWYgKCFyb290LT5wcm9jZXNzZWRfZ3JvdXBDbGF1c2UpCisJCXJldHVybjsKKworCS8q CisJICogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8gc3VwcG9ydCBncm91cGluZyBzZXRzLgorCSAq LworCWlmIChyb290LT5wYXJzZS0+Z3JvdXBpbmdTZXRzKQorCQlyZXR1cm47CisKKwkvKgorCSAq IEZvciBub3cgd2UgZG9uJ3QgdHJ5IHRvIHN1cHBvcnQgRElTVElOQ1Qgb3IgT1JERVIgQlkgYWdn cmVnYXRlcy4KKwkgKi8KKwlpZiAocm9vdC0+bnVtT3JkZXJlZEFnZ3MgPiAwKQorCQlyZXR1cm47 CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBhbnkgYWdncmVnYXRlcyB0aGF0IGRvIG5vdCBzdXBw b3J0IHBhcnRpYWwgbW9kZSwgb3IgYW55CisJICogcGFydGlhbCBhZ2dyZWdhdGVzIHRoYXQgYXJl IG5vbi1zZXJpYWxpemFibGUsIGRvIG5vdCBhcHBseSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uLgor CSAqLworCWlmIChyb290LT5oYXNOb25QYXJ0aWFsQWdncyB8fCByb290LT5oYXNOb25TZXJpYWxB Z2dzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdlIGRvbid0IHRyeSB0byBhcHBseSBlYWdlciBh Z2dyZWdhdGlvbiBpZiB0aGVyZSBhcmUgc2V0LXJldHVybmluZworCSAqIGZ1bmN0aW9ucyBpbiB0 YXJnZXRsaXN0LgorCSAqLworCWlmIChyb290LT5wYXJzZS0+aGFzVGFyZ2V0U1JGcykKKwkJcmV0 dXJuOworCisJLyoKKwkgKiBFYWdlciBhZ2dyZWdhdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGlmIHRo ZXJlIGFyZSBtdWx0aXBsZSBiYXNlIHJlbHMgaW4KKwkgKiB0aGUgcXVlcnkuCisJICovCisJaWYg KGJtc19tZW1iZXJzaGlwKHJvb3QtPmFsbF9iYXNlcmVscykgIT0gQk1TX01VTFRJUExFKQorCQly ZXR1cm47CisKKwkvKgorCSAqIENvbGxlY3QgYWdncmVnYXRlIGV4cHJlc3Npb25zIGFuZCBwbGFp biBWYXJzIHRoYXQgYXBwZWFyIGluIHRhcmdldGxpc3QKKwkgKiBhbmQgaGF2aW5nUXVhbC4KKwkg Ki8KKwljcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhyb290KTsKKworCS8qCisJICogSWYgdGhlcmUg YXJlIG5vIHN1aXRhYmxlIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucywgd2UgY2Fubm90IGFwcGx5IGVh Z2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJaWYgKHJvb3QtPmFnZ19jbGF1c2VfbGlzdCA9 PSBOSUwpCisJCXJldHVybjsKKworCS8qCisJICogQ29sbGVjdCBncm91cGluZyBleHByZXNzaW9u cyB0aGF0IGFwcGVhciBpbiBncm91cGluZyBjbGF1c2VzLgorCSAqLworCWNyZWF0ZV9ncm91cGlu Z19leHByX2luZm9zKHJvb3QpOworfQorCisvKgorICogY3JlYXRlX2FnZ19jbGF1c2VfaW5mb3MK KyAqCSAgU2VhcmNoIHRoZSB0YXJnZXRsaXN0IGFuZCBoYXZpbmdRdWFsIGZvciBBZ2dyZWZzIGFu ZCBwbGFpbiBWYXJzLCBhbmQKKyAqCSAgY3JlYXRlIGFuIEFnZ0NsYXVzZUluZm8gZm9yIGVhY2gg QWdncmVmIG5vZGUuCisgKi8KK3N0YXRpYyB2b2lkCitjcmVhdGVfYWdnX2NsYXVzZV9pbmZvcyhQ bGFubmVySW5mbyAqcm9vdCkKK3sKKwlMaXN0CSAgICp0bGlzdF9leHByczsKKwlMaXN0CSAgICph Z2dfY2xhdXNlX2xpc3QgPSBOSUw7CisJTGlzdAkgICAqdGxpc3RfdmFycyA9IE5JTDsKKwlMaXN0 Q2VsbCAgICpsYzsKKworCUFzc2VydChyb290LT5hZ2dfY2xhdXNlX2xpc3QgPT0gTklMKTsKKwlB c3NlcnQocm9vdC0+dGxpc3RfdmFycyA9PSBOSUwpOworCisJdGxpc3RfZXhwcnMgPSBwdWxsX3Zh cl9jbGF1c2UoKE5vZGUgKikgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0LAorCQkJCQkJCQkgIFBWQ19J TkNMVURFX0FHR1JFR0FURVMgfAorCQkJCQkJCQkgIFBWQ19SRUNVUlNFX1dJTkRPV0ZVTkNTIHwK KwkJCQkJCQkJICBQVkNfUkVDVVJTRV9QTEFDRUhPTERFUlMpOworCisJLyoKKwkgKiBBZ2dyZWdh dGVzIHdpdGhpbiB0aGUgSEFWSU5HIGNsYXVzZSBuZWVkIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUg c2FtZQorCSAqIHdheSBhcyB0aG9zZSBpbiB0aGUgdGFyZ2V0bGlzdC4gIE5vdGUgdGhhdCBIQVZJ TkcgY2FuIGNvbnRhaW4gQWdncmVmcworCSAqIGJ1dCBub3QgV2luZG93RnVuY3MuCisJICovCisJ aWYgKHJvb3QtPnBhcnNlLT5oYXZpbmdRdWFsICE9IE5VTEwpCisJeworCQlMaXN0CSAgICpoYXZp bmdfZXhwcnM7CisKKwkJaGF2aW5nX2V4cHJzID0gcHVsbF92YXJfY2xhdXNlKChOb2RlICopIHJv b3QtPnBhcnNlLT5oYXZpbmdRdWFsLAorCQkJCQkJCQkJICAgUFZDX0lOQ0xVREVfQUdHUkVHQVRF UyB8CisJCQkJCQkJCQkgICBQVkNfUkVDVVJTRV9QTEFDRUhPTERFUlMpOworCQlpZiAoaGF2aW5n X2V4cHJzICE9IE5JTCkKKwkJeworCQkJdGxpc3RfZXhwcnMgPSBsaXN0X2NvbmNhdCh0bGlzdF9l eHBycywgaGF2aW5nX2V4cHJzKTsKKwkJCWxpc3RfZnJlZShoYXZpbmdfZXhwcnMpOworCQl9CisJ fQorCisJZm9yZWFjaChsYywgdGxpc3RfZXhwcnMpCisJeworCQlFeHByCSAgICpleHByID0gKEV4 cHIgKikgbGZpcnN0KGxjKTsKKwkJQWdncmVmCSAgICphZ2dyZWY7CisJCUFnZ0NsYXVzZUluZm8g KmFjX2luZm87CisKKwkJLyogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8gc3VwcG9ydCBHUk9VUElO RygpIGV4cHJlc3Npb25zICovCisJCWlmIChJc0EoZXhwciwgR3JvdXBpbmdGdW5jKSkKKwkJewor CQkJbGlzdF9mcmVlX2RlZXAoYWdnX2NsYXVzZV9saXN0KTsKKwkJCWxpc3RfZnJlZSh0bGlzdF92 YXJzKTsKKworCQkJcmV0dXJuOworCQl9CisKKwkJLyogQ29sbGVjdCBwbGFpbiBWYXJzIGZvciBm dXR1cmUgcmVmZXJlbmNlICovCisJCWlmIChJc0EoZXhwciwgVmFyKSkKKwkJeworCQkJdGxpc3Rf dmFycyA9IGxpc3RfYXBwZW5kX3VuaXF1ZSh0bGlzdF92YXJzLCBleHByKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJYWdncmVmID0gY2FzdE5vZGUoQWdncmVmLCBleHByKTsKKworCQlBc3NlcnQo YWdncmVmLT5hZ2dvcmRlciA9PSBOSUwpOworCQlBc3NlcnQoYWdncmVmLT5hZ2dkaXN0aW5jdCA9 PSBOSUwpOworCisJCS8qCisJCSAqIElmIHRoZXJlIGFyZSBhbnkgc2VjdXJpdHlRdWFscywgZG8g bm90IHRyeSB0byBhcHBseSBlYWdlcgorCQkgKiBhZ2dyZWdhdGlvbiBpZiBhbnkgbm9uLWxlYWtw cm9vZiBhZ2dyZWdhdGUgZnVuY3Rpb25zIGFyZSBwcmVzZW50LgorCQkgKiBUaGlzIGlzIG92ZXJs eSBzdHJpY3QsIGJ1dCBmb3Igbm93Li4uCisJCSAqLworCQlpZiAocm9vdC0+cXVhbF9zZWN1cml0 eV9sZXZlbCA+IDAgJiYKKwkJCSFnZXRfZnVuY19sZWFrcHJvb2YoYWdncmVmLT5hZ2dmbm9pZCkp CisJCXsKKwkJCWxpc3RfZnJlZV9kZWVwKGFnZ19jbGF1c2VfbGlzdCk7CisJCQlsaXN0X2ZyZWUo dGxpc3RfdmFycyk7CisKKwkJCXJldHVybjsKKwkJfQorCisJCWFjX2luZm8gPSBtYWtlTm9kZShB Z2dDbGF1c2VJbmZvKTsKKwkJYWNfaW5mby0+YWdncmVmID0gYWdncmVmOworCQlhY19pbmZvLT5h Z2dfZXZhbF9hdCA9IHB1bGxfdmFybm9zKHJvb3QsIChOb2RlICopIGFnZ3JlZik7CisKKwkJYWdn X2NsYXVzZV9saXN0ID0gbGlzdF9hcHBlbmRfdW5pcXVlKGFnZ19jbGF1c2VfbGlzdCwgYWNfaW5m byk7CisJfQorCisJbGlzdF9mcmVlKHRsaXN0X2V4cHJzKTsKKworCXJvb3QtPmFnZ19jbGF1c2Vf bGlzdCA9IGFnZ19jbGF1c2VfbGlzdDsKKwlyb290LT50bGlzdF92YXJzID0gdGxpc3RfdmFyczsK K30KKworLyoKKyAqIGNyZWF0ZV9ncm91cGluZ19leHByX2luZm9zCisgKgkgIENyZWF0ZSBHcm91 cEV4cHJJbmZvIGZvciBlYWNoIGV4cHJlc3Npb24gdXNhYmxlIGFzIGdyb3VwaW5nIGtleS4KKyAq CisgKiBJZiBhbnkgZ3JvdXBpbmcgZXhwcmVzc2lvbiBpcyBub3Qgc3VpdGFibGUsIHdlIHdpbGwg anVzdCByZXR1cm4gd2l0aAorICogcm9vdC0+Z3JvdXBfZXhwcl9saXN0IGJlaW5nIE5JTC4KKyAq Lworc3RhdGljIHZvaWQKK2NyZWF0ZV9ncm91cGluZ19leHByX2luZm9zKFBsYW5uZXJJbmZvICpy b290KQoreworCUxpc3QJICAgKmV4cHJzID0gTklMOworCUxpc3QJICAgKnNvcnRncm91cHJlZnMg PSBOSUw7CisJTGlzdAkgICAqYnRyZWVfb3BmYW1pbGllcyA9IE5JTDsKKwlMaXN0Q2VsbCAgICps YywKKwkJCSAgICpsYzEsCisJCQkgICAqbGMyLAorCQkJICAgKmxjMzsKKworCUFzc2VydChyb290 LT5ncm91cF9leHByX2xpc3QgPT0gTklMKTsKKworCWZvcmVhY2gobGMsIHJvb3QtPnByb2Nlc3Nl ZF9ncm91cENsYXVzZSkKKwl7CisJCVNvcnRHcm91cENsYXVzZSAqc2djID0gbGZpcnN0X25vZGUo U29ydEdyb3VwQ2xhdXNlLCBsYyk7CisJCVRhcmdldEVudHJ5ICp0bGUgPSBnZXRfc29ydGdyb3Vw Y2xhdXNlX3RsZShzZ2MsIHJvb3QtPnByb2Nlc3NlZF90bGlzdCk7CisJCVR5cGVDYWNoZUVudHJ5 ICp0Y2U7CisJCU9pZAkJCWVxdWFsaW1hZ2Vwcm9jOworCQlPaWQJCQllcV9vcDsKKwkJTGlzdAkg ICAqZXFfb3BmYW1pbGllczsKKwkJT2lkCQkJYnRyZWVfb3BmYW1pbHk7CisKKwkJQXNzZXJ0KHRs ZS0+cmVzc29ydGdyb3VwcmVmID4gMCk7CisKKwkJLyoKKwkJICogRm9yIG5vdyB3ZSBvbmx5IHN1 cHBvcnQgcGxhaW4gVmFycyBhcyBncm91cGluZyBleHByZXNzaW9ucy4KKwkJICovCisJCWlmICgh SXNBKHRsZS0+ZXhwciwgVmFyKSkKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBFYWdlciBhZ2dy ZWdhdGlvbiBpcyBvbmx5IHBvc3NpYmxlIGlmIGVxdWFsaXR5IGltcGxpZXMgaW1hZ2UKKwkJICog ZXF1YWxpdHkgZm9yIGVhY2ggZ3JvdXBpbmcga2V5LiAgT3RoZXJ3aXNlLCBwbGFjaW5nIGtleXMg d2l0aAorCQkgKiBkaWZmZXJlbnQgYnl0ZSBpbWFnZXMgaW50byB0aGUgc2FtZSBncm91cCBtYXkg cmVzdWx0IGluIHRoZSBsb3NzIG9mCisJCSAqIGluZm9ybWF0aW9uIHRoYXQgY291bGQgYmUgbmVj ZXNzYXJ5IHRvIGV2YWx1YXRlIHVwcGVyIHF1YWwgY2xhdXNlcy4KKwkJICoKKwkJICogRm9yIGlu c3RhbmNlLCB0aGUgTlVNRVJJQyBkYXRhIHR5cGUgaXMgbm90IHN1cHBvcnRlZCwgYXMgdmFsdWVz CisJCSAqIHRoYXQgYXJlIGNvbnNpZGVyZWQgZXF1YWwgYnkgdGhlIGVxdWFsaXR5IG9wZXJhdG9y IChlLmcuLCAwIGFuZAorCQkgKiAwLjApIGNhbiBoYXZlIGRpZmZlcmVudCBzY2FsZXMuCisJCSAq LworCQl0Y2UgPSBsb29rdXBfdHlwZV9jYWNoZShleHByVHlwZSgoTm9kZSAqKSB0bGUtPmV4cHIp LAorCQkJCQkJCQlUWVBFQ0FDSEVfQlRSRUVfT1BGQU1JTFkpOworCQlpZiAoIU9pZElzVmFsaWQo dGNlLT5idHJlZV9vcGYpIHx8CisJCQkhT2lkSXNWYWxpZCh0Y2UtPmJ0cmVlX29waW50eXBlKSkK KwkJCXJldHVybjsKKworCQllcXVhbGltYWdlcHJvYyA9IGdldF9vcGZhbWlseV9wcm9jKHRjZS0+ YnRyZWVfb3BmLAorCQkJCQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJCQkJCQkJ ICAgdGNlLT5idHJlZV9vcGludHlwZSwKKwkJCQkJCQkJCQkgICBCVEVRVUFMSU1BR0VfUFJPQyk7 CisJCWlmICghT2lkSXNWYWxpZChlcXVhbGltYWdlcHJvYykgfHwKKwkJCSFEYXR1bUdldEJvb2wo T2lkRnVuY3Rpb25DYWxsMUNvbGwoZXF1YWxpbWFnZXByb2MsCisJCQkJCQkJCQkJCSAgIHRjZS0+ dHlwY29sbGF0aW9uLAorCQkJCQkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHRjZS0+YnRyZWVf b3BpbnR5cGUpKSkpCisJCQlyZXR1cm47CisKKwkJLyoKKwkJICogR2V0IHRoZSBvcGVyYXRvciBp biB0aGUgYnRyZWUncyBvcGZhbWlseS4KKwkJICovCisJCWVxX29wID0gZ2V0X29wZmFtaWx5X21l bWJlcih0Y2UtPmJ0cmVlX29wZiwKKwkJCQkJCQkJCXRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJ CQkJCQl0Y2UtPmJ0cmVlX29waW50eXBlLAorCQkJCQkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVy KTsKKwkJaWYgKCFPaWRJc1ZhbGlkKGVxX29wKSkKKwkJCXJldHVybjsKKwkJZXFfb3BmYW1pbGll cyA9IGdldF9tZXJnZWpvaW5fb3BmYW1pbGllcyhlcV9vcCk7CisJCWlmICghZXFfb3BmYW1pbGll cykKKwkJCXJldHVybjsKKwkJYnRyZWVfb3BmYW1pbHkgPSBsaW5pdGlhbF9vaWQoZXFfb3BmYW1p bGllcyk7CisKKwkJZXhwcnMgPSBsYXBwZW5kKGV4cHJzLCB0bGUtPmV4cHIpOworCQlzb3J0Z3Jv dXByZWZzID0gbGFwcGVuZF9pbnQoc29ydGdyb3VwcmVmcywgdGxlLT5yZXNzb3J0Z3JvdXByZWYp OworCQlidHJlZV9vcGZhbWlsaWVzID0gbGFwcGVuZF9vaWQoYnRyZWVfb3BmYW1pbGllcywgYnRy ZWVfb3BmYW1pbHkpOworCX0KKworCS8qCisJICogQ29uc3RydWN0IEdyb3VwRXhwckluZm8gZm9y IGVhY2ggZXhwcmVzc2lvbi4KKwkgKi8KKwlmb3J0aHJlZShsYzEsIGV4cHJzLCBsYzIsIHNvcnRn cm91cHJlZnMsIGxjMywgYnRyZWVfb3BmYW1pbGllcykKKwl7CisJCUV4cHIJICAgKmV4cHIgPSAo RXhwciAqKSBsZmlyc3QobGMxKTsKKwkJaW50CQkJc29ydGdyb3VwcmVmID0gbGZpcnN0X2ludChs YzIpOworCQlPaWQJCQlidHJlZV9vcGZhbWlseSA9IGxmaXJzdF9vaWQobGMzKTsKKwkJR3JvdXBF eHBySW5mbyAqZ2VfaW5mbzsKKworCQlnZV9pbmZvID0gbWFrZU5vZGUoR3JvdXBFeHBySW5mbyk7 CisJCWdlX2luZm8tPmV4cHIgPSAoRXhwciAqKSBjb3B5T2JqZWN0KGV4cHIpOworCQlnZV9pbmZv LT5zb3J0Z3JvdXByZWYgPSBzb3J0Z3JvdXByZWY7CisJCWdlX2luZm8tPmJ0cmVlX29wZmFtaWx5 ID0gYnRyZWVfb3BmYW1pbHk7CisKKwkJcm9vdC0+Z3JvdXBfZXhwcl9saXN0ID0gbGFwcGVuZChy b290LT5ncm91cF9leHByX2xpc3QsIGdlX2luZm8pOworCX0KK30KKwogLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCiAgKgogICoJICBMQVRFUkFMIFJFRkVSRU5DRVMKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubWFpbi5jCmluZGV4IDczNTU2MGU4Y2EuLjIyZGY5Njg2MjkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm1haW4uYwpAQCAtNjQsOCArNjQsMTIgQEAgcXVlcnlfcGxhbm5lcihQ bGFubmVySW5mbyAqcm9vdCwKIAkgKiBOT1RFOiBhcHBlbmRfcmVsX2xpc3Qgd2FzIHNldCB1cCBi eSBzdWJxdWVyeV9wbGFubmVyLCBzbyBkbyBub3QgdG91Y2gKIAkgKiBoZXJlLgogCSAqLwotCXJv b3QtPmpvaW5fcmVsX2xpc3QgPSBOSUw7Ci0Jcm9vdC0+am9pbl9yZWxfaGFzaCA9IE5VTEw7CisJ cm9vdC0+am9pbl9yZWxfbGlzdCA9IG1ha2VOb2RlKFJlbEluZm9MaXN0KTsKKwlyb290LT5qb2lu X3JlbF9saXN0LT5pdGVtcyA9IE5JTDsKKwlyb290LT5qb2luX3JlbF9saXN0LT5oYXNoID0gTlVM TDsKKwlyb290LT5ncm91cGVkX3JlbF9saXN0ID0gbWFrZU5vZGUoUmVsSW5mb0xpc3QpOworCXJv b3QtPmdyb3VwZWRfcmVsX2xpc3QtPml0ZW1zID0gTklMOworCXJvb3QtPmdyb3VwZWRfcmVsX2xp c3QtPmhhc2ggPSBOVUxMOwogCXJvb3QtPmpvaW5fcmVsX2xldmVsID0gTlVMTDsKIAlyb290LT5q b2luX2N1cl9sZXZlbCA9IDA7CiAJcm9vdC0+Y2Fub25fcGF0aGtleXMgPSBOSUw7CkBAIC03Niw2 ICs4MCw5IEBAIHF1ZXJ5X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsCiAJcm9vdC0+cGxhY2Vo b2xkZXJfbGlzdCA9IE5JTDsKIAlyb290LT5wbGFjZWhvbGRlcl9hcnJheSA9IE5VTEw7CiAJcm9v dC0+cGxhY2Vob2xkZXJfYXJyYXlfc2l6ZSA9IDA7CisJcm9vdC0+YWdnX2NsYXVzZV9saXN0ID0g TklMOworCXJvb3QtPmdyb3VwX2V4cHJfbGlzdCA9IE5JTDsKKwlyb290LT50bGlzdF92YXJzID0g TklMOwogCXJvb3QtPmZrZXlfbGlzdCA9IE5JTDsKIAlyb290LT5pbml0aWFsX3JlbHMgPSBOSUw7 CiAKQEAgLTI2MCw2ICsyNjcsMTIgQEAgcXVlcnlfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwK IAkgKi8KIAlleHRyYWN0X3Jlc3RyaWN0aW9uX29yX2NsYXVzZXMocm9vdCk7CiAKKwkvKgorCSAq IENoZWNrIGlmIGVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIGFwcGxpY2FibGUsIGFuZCBpZiBzbywgc2V0 IHVwCisJICogcm9vdC0+YWdnX2NsYXVzZV9saXN0IGFuZCByb290LT5ncm91cF9leHByX2xpc3Qu CisJICovCisJc2V0dXBfZWFnZXJfYWdncmVnYXRpb24ocm9vdCk7CisKIAkvKgogCSAqIE5vdyBl eHBhbmQgYXBwZW5kcmVscyBieSBhZGRpbmcgIm90aGVycmVscyIgZm9yIHRoZWlyIGNoaWxkcmVu LiAgV2UKIAkgKiBkZWxheSB0aGlzIHRvIHRoZSBlbmQgc28gdGhhdCB3ZSBoYXZlIGFzIG11Y2gg aW5mb3JtYXRpb24gYXMgcG9zc2libGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpp bmRleCA3NDY4OTYxYjAxLi45OWU0NmNjMTUyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jCkBAIC0yMjksNyArMjI5LDYgQEAgc3RhdGljIHZvaWQgYWRkX3BhdGhzX3RvX2dyb3Vw aW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJ CQkJICBSZWxPcHRJbmZvICpwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsCiAJCQkJCQkJCQkgIGNvbnN0 IEFnZ0NsYXVzZUNvc3RzICphZ2dfY29zdHMsCiAJCQkJCQkJCQkgIGdyb3VwaW5nX3NldHNfZGF0 YSAqZ2QsCi0JCQkJCQkJCQkgIGRvdWJsZSBkTnVtR3JvdXBzLAogCQkJCQkJCQkJICBHcm91cFBh dGhFeHRyYURhdGEgKmV4dHJhKTsKIHN0YXRpYyBSZWxPcHRJbmZvICpjcmVhdGVfcGFydGlhbF9n cm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSBSZWxPcHRJbmZv ICpncm91cGVkX3JlbCwKQEAgLTM5MTUsOSArMzkxNCw3IEBAIGNyZWF0ZV9vcmRpbmFyeV9ncm91 cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJ CQkJCSAgIEdyb3VwUGF0aEV4dHJhRGF0YSAqZXh0cmEsCiAJCQkJCQkJICAgUmVsT3B0SW5mbyAq KnBhcnRpYWxseV9ncm91cGVkX3JlbF9wKQogewotCVBhdGgJICAgKmNoZWFwZXN0X3BhdGggPSBp bnB1dF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7CiAJUmVsT3B0SW5mbyAqcGFydGlhbGx5X2dy b3VwZWRfcmVsID0gTlVMTDsKLQlkb3VibGUJCWROdW1Hcm91cHM7CiAJUGFydGl0aW9ud2lzZUFn Z3JlZ2F0ZVR5cGUgcGF0eXBlID0gUEFSVElUSU9OV0lTRV9BR0dSRUdBVEVfTk9ORTsKIAogCS8q CkBAIC0zOTk5LDIzICszOTk2LDE2IEBAIGNyZWF0ZV9vcmRpbmFyeV9ncm91cGluZ19wYXRocyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCiAJLyogR2F0aGVyIGFu eSBwYXJ0aWFsbHkgZ3JvdXBlZCBwYXJ0aWFsIHBhdGhzLiAqLwogCWlmIChwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXJ0aWFsX3BhdGhsaXN0KQotCXsK IAkJZ2F0aGVyX2dyb3VwaW5nX3BhdGhzKHJvb3QsIHBhcnRpYWxseV9ncm91cGVkX3JlbCk7Ci0J CXNldF9jaGVhcGVzdChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwpOwotCX0KIAotCS8qCi0JICogRXN0 aW1hdGUgbnVtYmVyIG9mIGdyb3Vwcy4KLQkgKi8KLQlkTnVtR3JvdXBzID0gZ2V0X251bWJlcl9v Zl9ncm91cHMocm9vdCwKLQkJCQkJCQkJCSAgY2hlYXBlc3RfcGF0aC0+cm93cywKLQkJCQkJCQkJ CSAgZ2QsCi0JCQkJCQkJCQkgIGV4dHJhLT50YXJnZXRMaXN0KTsKKwkvKiBOb3cgY2hvb3NlIHRo ZSBiZXN0IHBhdGgocykgZm9yIHBhcnRpYWxseV9ncm91cGVkX3JlbC4gKi8KKwlpZiAocGFydGlh bGx5X2dyb3VwZWRfcmVsICYmIHBhcnRpYWxseV9ncm91cGVkX3JlbC0+cGF0aGxpc3QpCisJCXNl dF9jaGVhcGVzdChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwpOwogCiAJLyogQnVpbGQgZmluYWwgZ3Jv dXBpbmcgcGF0aHMgKi8KIAlhZGRfcGF0aHNfdG9fZ3JvdXBpbmdfcmVsKHJvb3QsIGlucHV0X3Jl bCwgZ3JvdXBlZF9yZWwsCiAJCQkJCQkJICBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIGFnZ19jb3N0 cywgZ2QsCi0JCQkJCQkJICBkTnVtR3JvdXBzLCBleHRyYSk7CisJCQkJCQkJICBleHRyYSk7CiAK IAkvKiBHaXZlIGEgaGVscGZ1bCBlcnJvciBpZiB3ZSBmYWlsZWQgdG8gZmluZCBhbnkgaW1wbGVt ZW50YXRpb24gKi8KIAlpZiAoZ3JvdXBlZF9yZWwtPnBhdGhsaXN0ID09IE5JTCkKQEAgLTY5MDYs MTYgKzY4OTYsNDIgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJICBSZWxPcHRJbmZvICpncm91cGVkX3Jl bCwKIAkJCQkJCSAgUmVsT3B0SW5mbyAqcGFydGlhbGx5X2dyb3VwZWRfcmVsLAogCQkJCQkJICBj b25zdCBBZ2dDbGF1c2VDb3N0cyAqYWdnX2Nvc3RzLAotCQkJCQkJICBncm91cGluZ19zZXRzX2Rh dGEgKmdkLCBkb3VibGUgZE51bUdyb3VwcywKKwkJCQkJCSAgZ3JvdXBpbmdfc2V0c19kYXRhICpn ZCwKIAkJCQkJCSAgR3JvdXBQYXRoRXh0cmFEYXRhICpleHRyYSkKIHsKIAlRdWVyeQkgICAqcGFy c2UgPSByb290LT5wYXJzZTsKIAlQYXRoCSAgICpjaGVhcGVzdF9wYXRoID0gaW5wdXRfcmVsLT5j aGVhcGVzdF90b3RhbF9wYXRoOworCVBhdGgJICAgKmNoZWFwZXN0X3BhcnRpYWxseV9ncm91cGVk X3BhdGggPSBOVUxMOwogCUxpc3RDZWxsICAgKmxjOwogCWJvb2wJCWNhbl9oYXNoID0gKGV4dHJh LT5mbGFncyAmIEdST1VQSU5HX0NBTl9VU0VfSEFTSCkgIT0gMDsKIAlib29sCQljYW5fc29ydCA9 IChleHRyYS0+ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX1NPUlQpICE9IDA7CiAJTGlzdAkgICAq aGF2aW5nUXVhbCA9IChMaXN0ICopIGV4dHJhLT5oYXZpbmdRdWFsOwogCUFnZ0NsYXVzZUNvc3Rz ICphZ2dfZmluYWxfY29zdHMgPSAmZXh0cmEtPmFnZ19maW5hbF9jb3N0czsKKwlkb3VibGUJCWRO dW1Hcm91cHMgPSAwOworCWRvdWJsZQkJZE51bUZpbmFsR3JvdXBzID0gMDsKKworCS8qCisJICog RXN0aW1hdGUgbnVtYmVyIG9mIGdyb3VwcyBmb3Igbm9uLXNwbGl0IGFnZ3JlZ2F0aW9uLgorCSAq LworCWROdW1Hcm91cHMgPSBnZXRfbnVtYmVyX29mX2dyb3Vwcyhyb290LAorCQkJCQkJCQkJICBj aGVhcGVzdF9wYXRoLT5yb3dzLAorCQkJCQkJCQkJICBnZCwKKwkJCQkJCQkJCSAgZXh0cmEtPnRh cmdldExpc3QpOworCisJaWYgKHBhcnRpYWxseV9ncm91cGVkX3JlbCAmJiBwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwtPnBhdGhsaXN0KQorCXsKKwkJY2hlYXBlc3RfcGFydGlhbGx5X2dyb3VwZWRfcGF0 aCA9CisJCQlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7CisKKwkJ LyoKKwkJICogRXN0aW1hdGUgbnVtYmVyIG9mIGdyb3VwcyBmb3IgZmluYWwgcGhhc2Ugb2YgcGFy dGlhbCBhZ2dyZWdhdGlvbi4KKwkJICovCisJCWROdW1GaW5hbEdyb3VwcyA9CisJCQlnZXRfbnVt YmVyX29mX2dyb3Vwcyhyb290LAorCQkJCQkJCQkgY2hlYXBlc3RfcGFydGlhbGx5X2dyb3VwZWRf cGF0aC0+cm93cywKKwkJCQkJCQkJIGdkLAorCQkJCQkJCQkgZXh0cmEtPnRhcmdldExpc3QpOwor CX0KIAogCWlmIChjYW5fc29ydCkKIAl7CkBAIC03MDI4LDcgKzcwNDQsNyBAQCBhZGRfcGF0aHNf dG9fZ3JvdXBpbmdfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICppbnB1dF9yZWws CiAJCQkJCXBhdGggPSBtYWtlX29yZGVyZWRfcGF0aChyb290LAogCQkJCQkJCQkJCQkgZ3JvdXBl ZF9yZWwsCiAJCQkJCQkJCQkJCSBwYXRoLAotCQkJCQkJCQkJCQkgcGFydGlhbGx5X2dyb3VwZWRf cmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoLAorCQkJCQkJCQkJCQkgY2hlYXBlc3RfcGFydGlhbGx5 X2dyb3VwZWRfcGF0aCwKIAkJCQkJCQkJCQkJIGluZm8tPnBhdGhrZXlzLAogCQkJCQkJCQkJCQkg LTEuMCk7CiAKQEAgLTcwNDYsNyArNzA2Miw3IEBAIGFkZF9wYXRoc190b19ncm91cGluZ19yZWwo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJCQkJCQkJCQkJCSBp bmZvLT5jbGF1c2VzLAogCQkJCQkJCQkJCQkJIGhhdmluZ1F1YWwsCiAJCQkJCQkJCQkJCQkgYWdn X2ZpbmFsX2Nvc3RzLAotCQkJCQkJCQkJCQkJIGROdW1Hcm91cHMpKTsKKwkJCQkJCQkJCQkJCSBk TnVtRmluYWxHcm91cHMpKTsKIAkJCQkJZWxzZQogCQkJCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWws IChQYXRoICopCiAJCQkJCQkJCSBjcmVhdGVfZ3JvdXBfcGF0aChyb290LApAQCAtNzA1NCw3ICs3 MDcwLDcgQEAgYWRkX3BhdGhzX3RvX2dyb3VwaW5nX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqaW5wdXRfcmVsLAogCQkJCQkJCQkJCQkJICAgcGF0aCwKIAkJCQkJCQkJCQkJCSAg IGluZm8tPmNsYXVzZXMsCiAJCQkJCQkJCQkJCQkgICBoYXZpbmdRdWFsLAotCQkJCQkJCQkJCQkJ ICAgZE51bUdyb3VwcykpOworCQkJCQkJCQkJCQkJICAgZE51bUZpbmFsR3JvdXBzKSk7CiAKIAkJ CQl9CiAJCQl9CkBAIC03MDk2LDE5ICs3MTEyLDE3IEBAIGFkZF9wYXRoc190b19ncm91cGluZ19y ZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmlucHV0X3JlbCwKIAkJICovCiAJCWlm IChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgJiYgcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5wYXRobGlz dCkKIAkJewotCQkJUGF0aAkgICAqcGF0aCA9IHBhcnRpYWxseV9ncm91cGVkX3JlbC0+Y2hlYXBl c3RfdG90YWxfcGF0aDsKLQogCQkJYWRkX3BhdGgoZ3JvdXBlZF9yZWwsIChQYXRoICopCiAJCQkJ CSBjcmVhdGVfYWdnX3BhdGgocm9vdCwKIAkJCQkJCQkJCSBncm91cGVkX3JlbCwKLQkJCQkJCQkJ CSBwYXRoLAorCQkJCQkJCQkJIGNoZWFwZXN0X3BhcnRpYWxseV9ncm91cGVkX3BhdGgsCiAJCQkJ CQkJCQkgZ3JvdXBlZF9yZWwtPnJlbHRhcmdldCwKIAkJCQkJCQkJCSBBR0dfSEFTSEVELAogCQkJ CQkJCQkJIEFHR1NQTElUX0ZJTkFMX0RFU0VSSUFMLAogCQkJCQkJCQkJIHJvb3QtPnByb2Nlc3Nl ZF9ncm91cENsYXVzZSwKIAkJCQkJCQkJCSBoYXZpbmdRdWFsLAogCQkJCQkJCQkJIGFnZ19maW5h bF9jb3N0cywKLQkJCQkJCQkJCSBkTnVtR3JvdXBzKSk7CisJCQkJCQkJCQkgZE51bUZpbmFsR3Jv dXBzKSk7CiAJCX0KIAl9CiAKQEAgLTcxNTgsNiArNzE3MiwyMSBAQCBjcmVhdGVfcGFydGlhbF9n cm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAlib29sCQljYW5faGFzaCA9IChleHRy YS0+ZmxhZ3MgJiBHUk9VUElOR19DQU5fVVNFX0hBU0gpICE9IDA7CiAJYm9vbAkJY2FuX3NvcnQg PSAoZXh0cmEtPmZsYWdzICYgR1JPVVBJTkdfQ0FOX1VTRV9TT1JUKSAhPSAwOwogCisJLyoKKwkg KiBUaGUgcGFydGlhbGx5X2dyb3VwZWRfcmVsIGNvdWxkIGhhdmUgYmVlbiBhbHJlYWR5IGNyZWF0 ZWQgZHVlIHRvIGVhZ2VyCisJICogYWdncmVnYXRpb24uCisJICovCisJcGFydGlhbGx5X2dyb3Vw ZWRfcmVsID0gZmluZF9ncm91cGVkX3JlbChyb290LCBpbnB1dF9yZWwtPnJlbGlkcyk7CisJQXNz ZXJ0KGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgfHwgcGFydGlhbGx5X2dyb3VwZWRfcmVsID09IE5V TEwpOworCisJLyoKKwkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBwYXJ0aWFsbHlfZ3JvdXBl ZF9yZWwgY3JlYXRlZCBieSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uIGlzIGR1bW15LiAgSW4gdGhp cyBjYXNlIHdlIGp1c3Qgc2V0IGl0IHRvIE5VTEwuICBJdCBtaWdodAorCSAqIGJlIGNyZWF0ZWQg YWdhaW4gYnkgdGhlIGZvbGxvd2luZyBsb2dpYyBpZiBwb3NzaWJsZS4KKwkgKi8KKwlpZiAocGFy dGlhbGx5X2dyb3VwZWRfcmVsICYmIElTX0RVTU1ZX1JFTChwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwp KQorCQlwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwgPSBOVUxMOworCiAJLyoKIAkgKiBDb25zaWRlciB3 aGV0aGVyIHdlIHNob3VsZCBnZW5lcmF0ZSBwYXJ0aWFsbHkgYWdncmVnYXRlZCBub24tcGFydGlh bAogCSAqIHBhdGhzLiAgV2UgY2FuIG9ubHkgZG8gdGhpcyBpZiB3ZSBoYXZlIGEgbm9uLXBhcnRp YWwgcGF0aCwgYW5kIG9ubHkgaWYKQEAgLTcxODEsMTkgKzcyMTAsMjcgQEAgY3JlYXRlX3BhcnRp YWxfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJICogSWYgd2UgY2FuJ3QgcGFy dGlhbGx5IGFnZ3JlZ2F0ZSBwYXJ0aWFsIHBhdGhzLCBhbmQgd2UgY2FuJ3QgcGFydGlhbGx5CiAJ ICogYWdncmVnYXRlIG5vbi1wYXJ0aWFsIHBhdGhzLCB0aGVuIGRvbid0IGJvdGhlciBjcmVhdGlu ZyB0aGUgbmV3CiAJICogUmVsT3B0SW5mbyBhdCBhbGwsIHVubGVzcyB0aGUgY2FsbGVyIHNwZWNp ZmllZCBmb3JjZV9yZWxfY3JlYXRpb24uCisJICoKKwkgKiBOb3RlIHRoYXQgdGhlIHBhcnRpYWxs eV9ncm91cGVkX3JlbCBjb3VsZCBoYXZlIGJlZW4gYWxyZWFkeSBjcmVhdGVkIGFuZAorCSAqIHBv cHVsYXRlZCB3aXRoIGFwcHJvcHJpYXRlIHBhdGhzIGJ5IGVhZ2VyIGFnZ3JlZ2F0aW9uLgogCSAq LwogCWlmIChjaGVhcGVzdF90b3RhbF9wYXRoID09IE5VTEwgJiYKIAkJY2hlYXBlc3RfcGFydGlh bF9wYXRoID09IE5VTEwgJiYKKwkJKHBhcnRpYWxseV9ncm91cGVkX3JlbCA9PSBOVUxMIHx8CisJ CSBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwtPnBhdGhsaXN0ID09IE5JTCkgJiYKIAkJIWZvcmNlX3Jl bF9jcmVhdGlvbikKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgogCSAqIEJ1aWxkIGEgbmV3IHVwcGVy IHJlbGF0aW9uIHRvIHJlcHJlc2VudCB0aGUgcmVzdWx0IG9mIHBhcnRpYWxseQotCSAqIGFnZ3Jl Z2F0aW5nIHRoZSByb3dzIGZyb20gdGhlIGlucHV0IHJlbGF0aW9uLgotCSAqLwotCXBhcnRpYWxs eV9ncm91cGVkX3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LAotCQkJCQkJCQkJCQlVUFBFUlJF TF9QQVJUSUFMX0dST1VQX0FHRywKLQkJCQkJCQkJCQkJZ3JvdXBlZF9yZWwtPnJlbGlkcyk7CisJ ICogYWdncmVnYXRpbmcgdGhlIHJvd3MgZnJvbSB0aGUgaW5wdXQgcmVsYXRpb24uICBUaGUgcmVs YXRpb24gbWF5IGFscmVhZHkKKwkgKiBleGlzdCBkdWUgdG8gZWFnZXIgYWdncmVnYXRpb24sIGlu IHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byBjcmVhdGUKKwkgKiBpdC4KKwkgKi8KKwlpZiAo cGFydGlhbGx5X2dyb3VwZWRfcmVsID09IE5VTEwpCisJCXBhcnRpYWxseV9ncm91cGVkX3JlbCA9 IGZldGNoX3VwcGVyX3JlbChyb290LAorCQkJCQkJCQkJCQkJVVBQRVJSRUxfUEFSVElBTF9HUk9V UF9BR0csCisJCQkJCQkJCQkJCQlncm91cGVkX3JlbC0+cmVsaWRzKTsKIAlwYXJ0aWFsbHlfZ3Jv dXBlZF9yZWwtPmNvbnNpZGVyX3BhcmFsbGVsID0KIAkJZ3JvdXBlZF9yZWwtPmNvbnNpZGVyX3Bh cmFsbGVsOwogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+cmVsb3B0a2luZCA9IGdyb3VwZWRfcmVs LT5yZWxvcHRraW5kOwpAQCAtNzIwMiw2ICs3MjM5LDE0IEBAIGNyZWF0ZV9wYXJ0aWFsX2dyb3Vw aW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCXBhcnRpYWxseV9ncm91cGVkX3JlbC0+dXNl cmlkaXNjdXJyZW50ID0gZ3JvdXBlZF9yZWwtPnVzZXJpZGlzY3VycmVudDsKIAlwYXJ0aWFsbHlf Z3JvdXBlZF9yZWwtPmZkd3JvdXRpbmUgPSBncm91cGVkX3JlbC0+ZmR3cm91dGluZTsKIAorCS8q CisJICogUGFydGlhbGx5LWdyb3VwZWQgcGFydGlhbCBwYXRocyBtYXkgaGF2ZSBiZWVuIGdlbmVy YXRlZCBieSBlYWdlcgorCSAqIGFnZ3JlZ2F0aW9uLiAgSWYgd2UgZmluZCB0aGF0IHBhcmFsbGVs aXNtIGlzIG5vdCBwb3NzaWJsZSBmb3IKKwkgKiBwYXJ0aWFsbHlfZ3JvdXBlZF9yZWwsIHdlIG5l ZWQgdG8gZHJvcCB0aGVzZSBwYXJ0aWFsIHBhdGhzLgorCSAqLworCWlmICghcGFydGlhbGx5X2dy b3VwZWRfcmVsLT5jb25zaWRlcl9wYXJhbGxlbCkKKwkJcGFydGlhbGx5X2dyb3VwZWRfcmVsLT5w YXJ0aWFsX3BhdGhsaXN0ID0gTklMOworCiAJLyoKIAkgKiBCdWlsZCB0YXJnZXQgbGlzdCBmb3Ig cGFydGlhbCBhZ2dyZWdhdGUgcGF0aHMuICBUaGVzZSBwYXRocyBjYW5ub3QganVzdAogCSAqIGVt aXQgdGhlIHNhbWUgdGxpc3QgYXMgcmVndWxhciBhZ2dyZWdhdGUgcGF0aHMsIGJlY2F1c2UgKDEp IHdlIG11c3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZGlu Zm8uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZGluZm8uYwppbmRleCA0NWU4 Yjc0Zjk0Li4wZTRjN2IyYjJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9hcHBlbmRpbmZvLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5m by5jCkBAIC00OTksNiArNDk5LDY2IEBAIGFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcihO b2RlICpub2RlLAogCQlyZXR1cm4gKE5vZGUgKikgbmV3aW5mbzsKIAl9CiAKKwkvKgorCSAqIFdl IGhhdmUgdG8gcHJvY2VzcyBSZWxBZ2dJbmZvIG5vZGVzIHNwZWNpYWxseS4KKwkgKi8KKwlpZiAo SXNBKG5vZGUsIFJlbEFnZ0luZm8pKQorCXsKKwkJUmVsQWdnSW5mbyAqb2xkaW5mbyA9IChSZWxB Z2dJbmZvICopIG5vZGU7CisJCVJlbEFnZ0luZm8gKm5ld2luZm8gPSBtYWtlTm9kZShSZWxBZ2dJ bmZvKTsKKworCQkvKiBDb3B5IGFsbCBmbGF0LWNvcGlhYmxlIGZpZWxkcyAqLworCQltZW1jcHko bmV3aW5mbywgb2xkaW5mbywgc2l6ZW9mKFJlbEFnZ0luZm8pKTsKKworCQluZXdpbmZvLT5yZWxp ZHMgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPnJlbGlkcywKKwkJCQkJCQkJCQkJICBj b250ZXh0LT5uYXBwaW5mb3MsCisJCQkJCQkJCQkJCSAgY29udGV4dC0+YXBwaW5mb3MpOworCisJ CW5ld2luZm8tPnRhcmdldCA9IChQYXRoVGFyZ2V0ICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0 dHJzX211dGF0b3IoKE5vZGUgKikgb2xkaW5mby0+dGFyZ2V0LAorCQkJCQkJCQkJCSAgIGNvbnRl eHQpOworCisJCW5ld2luZm8tPmFnZ19pbnB1dCA9IChQYXRoVGFyZ2V0ICopCisJCQlhZGp1c3Rf YXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkaW5mby0+YWdnX2lucHV0LAorCQkJ CQkJCQkJCSAgIGNvbnRleHQpOworCisJCW5ld2luZm8tPmdyb3VwX2NsYXVzZXMgPSAoTGlzdCAq KQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKChOb2RlICopIG9sZGluZm8tPmdy b3VwX2NsYXVzZXMsCisJCQkJCQkJCQkJICAgY29udGV4dCk7CisKKwkJbmV3aW5mby0+Z3JvdXBf ZXhwcnMgPSAoTGlzdCAqKQorCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKChOb2Rl ICopIG9sZGluZm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQkJCSAgIGNvbnRleHQpOworCisJCXJl dHVybiAoTm9kZSAqKSBuZXdpbmZvOworCX0KKworCS8qCisJICogV2UgaGF2ZSB0byBwcm9jZXNz IFBhdGhUYXJnZXQgbm9kZXMgc3BlY2lhbGx5LgorCSAqLworCWlmIChJc0Eobm9kZSwgUGF0aFRh cmdldCkpCisJeworCQlQYXRoVGFyZ2V0ICpvbGR0YXJnZXQgPSAoUGF0aFRhcmdldCAqKSBub2Rl OworCQlQYXRoVGFyZ2V0ICpuZXd0YXJnZXQgPSBtYWtlTm9kZShQYXRoVGFyZ2V0KTsKKworCQkv KiBDb3B5IGFsbCBmbGF0LWNvcGlhYmxlIGZpZWxkcyAqLworCQltZW1jcHkobmV3dGFyZ2V0LCBv bGR0YXJnZXQsIHNpemVvZihQYXRoVGFyZ2V0KSk7CisKKwkJaWYgKG9sZHRhcmdldC0+c29ydGdy b3VwcmVmcykKKwkJeworCQkJU2l6ZQkJbmJ5dGVzID0gbGlzdF9sZW5ndGgob2xkdGFyZ2V0LT5l eHBycykgKiBzaXplb2YoSW5kZXgpOworCisJCQluZXd0YXJnZXQtPmV4cHJzID0gKExpc3QgKikK KwkJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkdGFyZ2V0LT5l eHBycywKKwkJCQkJCQkJCQkJICAgY29udGV4dCk7CisKKwkJCW5ld3RhcmdldC0+c29ydGdyb3Vw cmVmcyA9IChJbmRleCAqKSBwYWxsb2MobmJ5dGVzKTsKKwkJCW1lbWNweShuZXd0YXJnZXQtPnNv cnRncm91cHJlZnMsIG9sZHRhcmdldC0+c29ydGdyb3VwcmVmcywgbmJ5dGVzKTsKKwkJfQorCisJ CXJldHVybiAoTm9kZSAqKSBuZXd0YXJnZXQ7CisJfQorCiAJLyoKIAkgKiBOT1RFOiB3ZSBkbyBu b3QgbmVlZCB0byByZWN1cnNlIGludG8gc3VibGlua3MsIGJlY2F1c2UgdGhleSBzaG91bGQKIAkg KiBhbHJlYWR5IGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gc3VicGxhbnMgYmVmb3JlIHdlIHNlZSB0 aGVtLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BhdGhub2RlLmMKaW5kZXggNGY3NGNhZmEyNS4u ODVlNDE5MTYwYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5v ZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCkBAIC0yNjIs NiArMjYyLDEyIEBAIGNvbXBhcmVfcGF0aF9jb3N0c19mdXp6aWx5KFBhdGggKnBhdGgxLCBQYXRo ICpwYXRoMiwgZG91YmxlIGZ1enpfZmFjdG9yKQogICogdW5wYXJhbWV0ZXJpemVkIHBhdGgsIHRv bywgaWYgdGhlcmUgaXMgb25lOyB0aGUgdXNlcnMgb2YgdGhhdCBsaXN0IGZpbmQKICAqIGl0IG1v cmUgY29udmVuaWVudCBpZiB0aGF0J3MgaW5jbHVkZWQuCiAgKgorICogY2hlYXBlc3RfcGFyYW1l dGVyaXplZF9wYXRocyBhbHNvIGFsd2F5cyBpbmNsdWRlcyB0aGUgZmV3ZXN0LXJvdworICogdW5w YXJhbWV0ZXJpemVkIHBhdGgsIGlmIHRoZXJlIGlzIG9uZSwgZm9yIGdyb3VwZWQgcmVsYXRpb25z LiAgRGlmZmVyZW50CisgKiBwYXRocyBvZiBhIGdyb3VwZWQgcmVsYXRpb24gY2FuIGhhdmUgdmVy eSBkaWZmZXJlbnQgcm93IGNvdW50cywgYW5kIGluIHNvbWUKKyAqIGNhc2VzIHRoZSBjaGVhcGVz dC10b3RhbCB1bnBhcmFtZXRlcml6ZWQgcGF0aCBtYXkgbm90IGJlIHRoZSBvbmUgd2l0aCB0aGUK KyAqIGZld2VzdCByb3cuCisgKgogICogVGhpcyBpcyBub3JtYWxseSBjYWxsZWQgb25seSBhZnRl ciB3ZSd2ZSBmaW5pc2hlZCBjb25zdHJ1Y3RpbmcgdGhlIHBhdGgKICAqIGxpc3QgZm9yIHRoZSBy ZWwgbm9kZS4KICAqLwpAQCAtMjcxLDYgKzI3Nyw3IEBAIHNldF9jaGVhcGVzdChSZWxPcHRJbmZv ICpwYXJlbnRfcmVsKQogCVBhdGgJICAgKmNoZWFwZXN0X3N0YXJ0dXBfcGF0aDsKIAlQYXRoCSAg ICpjaGVhcGVzdF90b3RhbF9wYXRoOwogCVBhdGgJICAgKmJlc3RfcGFyYW1fcGF0aDsKKwlQYXRo CSAgICpmZXdlc3Rfcm93X3BhdGg7CiAJTGlzdAkgICAqcGFyYW1ldGVyaXplZF9wYXRoczsKIAlM aXN0Q2VsbCAgICpwOwogCkBAIC0yODAsNiArMjg3LDcgQEAgc2V0X2NoZWFwZXN0KFJlbE9wdElu Zm8gKnBhcmVudF9yZWwpCiAJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZGV2aXNlIGEgcXVlcnkg cGxhbiBmb3IgdGhlIGdpdmVuIHF1ZXJ5Iik7CiAKIAljaGVhcGVzdF9zdGFydHVwX3BhdGggPSBj aGVhcGVzdF90b3RhbF9wYXRoID0gYmVzdF9wYXJhbV9wYXRoID0gTlVMTDsKKwlmZXdlc3Rfcm93 X3BhdGggPSBOVUxMOwogCXBhcmFtZXRlcml6ZWRfcGF0aHMgPSBOSUw7CiAKIAlmb3JlYWNoKHAs IHBhcmVudF9yZWwtPnBhdGhsaXN0KQpAQCAtMzQxLDYgKzM0OSw4IEBAIHNldF9jaGVhcGVzdChS ZWxPcHRJbmZvICpwYXJlbnRfcmVsKQogCQkJaWYgKGNoZWFwZXN0X3RvdGFsX3BhdGggPT0gTlVM TCkKIAkJCXsKIAkJCQljaGVhcGVzdF9zdGFydHVwX3BhdGggPSBjaGVhcGVzdF90b3RhbF9wYXRo ID0gcGF0aDsKKwkJCQlpZiAoSVNfR1JPVVBFRF9SRUwocGFyZW50X3JlbCkpCisJCQkJCWZld2Vz dF9yb3dfcGF0aCA9IHBhdGg7CiAJCQkJY29udGludWU7CiAJCQl9CiAKQEAgLTM2NCw2ICszNzQs MjcgQEAgc2V0X2NoZWFwZXN0KFJlbE9wdEluZm8gKnBhcmVudF9yZWwpCiAJCQkJIGNvbXBhcmVf cGF0aGtleXMoY2hlYXBlc3RfdG90YWxfcGF0aC0+cGF0aGtleXMsCiAJCQkJCQkJCSAgcGF0aC0+ cGF0aGtleXMpID09IFBBVEhLRVlTX0JFVFRFUjIpKQogCQkJCWNoZWFwZXN0X3RvdGFsX3BhdGgg PSBwYXRoOworCisJCQkvKgorCQkJICogRmluZCB0aGUgZmV3ZXN0LXJvdyB1bnBhcmFtZXRlcml6 ZWQgcGF0aCBmb3IgYSBncm91cGVkCisJCQkgKiByZWxhdGlvbi4gIElmIHdlIGZpbmQgdHdvIHBh dGhzIG9mIHRoZSBzYW1lIHJvdyBjb3VudCwgdHJ5IHRvCisJCQkgKiBrZWVwIHRoZSBvbmUgd2l0 aCB0aGUgY2hlYXBlciB0b3RhbCBjb3N0OyBpZiB0aGUgY29zdHMgYXJlCisJCQkgKiBpZGVudGlj YWwsIGtlZXAgdGhlIGJldHRlci1zb3J0ZWQgb25lLgorCQkJICovCisJCQlpZiAoSVNfR1JPVVBF RF9SRUwocGFyZW50X3JlbCkpCisJCQl7CisJCQkJaWYgKGZld2VzdF9yb3dfcGF0aC0+cm93cyA+ IHBhdGgtPnJvd3MpCisJCQkJCWZld2VzdF9yb3dfcGF0aCA9IHBhdGg7CisJCQkJZWxzZSBpZiAo ZmV3ZXN0X3Jvd19wYXRoLT5yb3dzID09IHBhdGgtPnJvd3MpCisJCQkJeworCQkJCQljbXAgPSBj b21wYXJlX3BhdGhfY29zdHMoZmV3ZXN0X3Jvd19wYXRoLCBwYXRoLCBUT1RBTF9DT1NUKTsKKwkJ CQkJaWYgKGNtcCA+IDAgfHwKKwkJCQkJCShjbXAgPT0gMCAmJgorCQkJCQkJIGNvbXBhcmVfcGF0 aGtleXMoZmV3ZXN0X3Jvd19wYXRoLT5wYXRoa2V5cywKKwkJCQkJCQkJCQkgIHBhdGgtPnBhdGhr ZXlzKSA9PSBQQVRIS0VZU19CRVRURVIyKSkKKwkJCQkJCWZld2VzdF9yb3dfcGF0aCA9IHBhdGg7 CisJCQkJfQorCQkJfQogCQl9CiAJfQogCkBAIC0zNzEsNiArNDAyLDEwIEBAIHNldF9jaGVhcGVz dChSZWxPcHRJbmZvICpwYXJlbnRfcmVsKQogCWlmIChjaGVhcGVzdF90b3RhbF9wYXRoKQogCQlw YXJhbWV0ZXJpemVkX3BhdGhzID0gbGNvbnMoY2hlYXBlc3RfdG90YWxfcGF0aCwgcGFyYW1ldGVy aXplZF9wYXRocyk7CiAKKwkvKiBBZGQgZmV3ZXN0LXJvdyB1bnBhcmFtZXRlcml6ZWQgcGF0aCwg aWYgYW55LCB0byBwYXJhbWV0ZXJpemVkX3BhdGhzICovCisJaWYgKGZld2VzdF9yb3dfcGF0aCAm JiBmZXdlc3Rfcm93X3BhdGggIT0gY2hlYXBlc3RfdG90YWxfcGF0aCkKKwkJcGFyYW1ldGVyaXpl ZF9wYXRocyA9IGxjb25zKGZld2VzdF9yb3dfcGF0aCwgcGFyYW1ldGVyaXplZF9wYXRocyk7CisK IAkvKgogCSAqIElmIHRoZXJlIGlzIG5vIHVucGFyYW1ldGVyaXplZCBwYXRoLCB1c2UgdGhlIGJl c3QgcGFyYW1ldGVyaXplZCBwYXRoIGFzCiAJICogY2hlYXBlc3RfdG90YWxfcGF0aCAoYnV0IG5v dCBhcyBjaGVhcGVzdF9zdGFydHVwX3BhdGgpLgpAQCAtMjc4Nyw4ICsyODIyLDcgQEAgY3JlYXRl X3Byb2plY3Rpb25fcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXRo dHlwZSA9IFRfUmVzdWx0OwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsKIAlwYXRobm9k ZS0+cGF0aC5wYXRodGFyZ2V0ID0gdGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUg YWJvdmUgYW55IGpvaW5zLCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBh dGgucGFyYW1faW5mbyA9IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBh dGgtPnBhcmFtX2luZm87CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsK IAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAm JgogCQlzdWJwYXRoLT5wYXJhbGxlbF9zYWZlICYmCkBAIC0zMDQzLDggKzMwNzcsNyBAQCBjcmVh dGVfaW5jcmVtZW50YWxfc29ydF9wYXRoKFBsYW5uZXJJbmZvICpyb290LAogCXBhdGhub2RlLT5w YXRoLnBhcmVudCA9IHJlbDsKIAkvKiBTb3J0IGRvZXNuJ3QgcHJvamVjdCwgc28gdXNlIHNvdXJj ZSBwYXRoJ3MgcGF0aHRhcmdldCAqLwogCXBhdGhub2RlLT5wYXRoLnBhdGh0YXJnZXQgPSBzdWJw YXRoLT5wYXRodGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3VtZSB3ZSBhcmUgYWJvdmUgYW55IGpv aW5zLCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0aG5vZGUtPnBhdGgucGFyYW1faW5m byA9IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IHN1YnBhdGgtPnBhcmFtX2lu Zm87CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUgPSBmYWxzZTsKIAlwYXRobm9kZS0+ cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9wYXJhbGxlbCAmJgogCQlzdWJwYXRo LT5wYXJhbGxlbF9zYWZlOwpAQCAtMzA5MSw4ICszMTI0LDcgQEAgY3JlYXRlX3NvcnRfcGF0aChQ bGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9kZS0+cGF0aC5wYXJlbnQgPSByZWw7CiAJLyogU29y dCBkb2Vzbid0IHByb2plY3QsIHNvIHVzZSBzb3VyY2UgcGF0aCdzIHBhdGh0YXJnZXQgKi8KIAlw YXRobm9kZS0+cGF0aC5wYXRodGFyZ2V0ID0gc3VicGF0aC0+cGF0aHRhcmdldDsKLQkvKiBGb3Ig bm93LCBhc3N1bWUgd2UgYXJlIGFib3ZlIGFueSBqb2lucywgc28gbm8gcGFyYW1ldGVyaXphdGlv biAqLwotCXBhdGhub2RlLT5wYXRoLnBhcmFtX2luZm8gPSBOVUxMOworCXBhdGhub2RlLT5wYXRo LnBhcmFtX2luZm8gPSBzdWJwYXRoLT5wYXJhbV9pbmZvOwogCXBhdGhub2RlLT5wYXRoLnBhcmFs bGVsX2F3YXJlID0gZmFsc2U7CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfc2FmZSA9IHJlbC0+ Y29uc2lkZXJfcGFyYWxsZWwgJiYKIAkJc3VicGF0aC0+cGFyYWxsZWxfc2FmZTsKQEAgLTMyNTMs OCArMzI4NSw3IEBAIGNyZWF0ZV9hZ2dfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKIAlwYXRobm9k ZS0+cGF0aC5wYXRodHlwZSA9IFRfQWdnOwogCXBhdGhub2RlLT5wYXRoLnBhcmVudCA9IHJlbDsK IAlwYXRobm9kZS0+cGF0aC5wYXRodGFyZ2V0ID0gdGFyZ2V0OwotCS8qIEZvciBub3csIGFzc3Vt ZSB3ZSBhcmUgYWJvdmUgYW55IGpvaW5zLCBzbyBubyBwYXJhbWV0ZXJpemF0aW9uICovCi0JcGF0 aG5vZGUtPnBhdGgucGFyYW1faW5mbyA9IE5VTEw7CisJcGF0aG5vZGUtPnBhdGgucGFyYW1faW5m byA9IHN1YnBhdGgtPnBhcmFtX2luZm87CiAJcGF0aG5vZGUtPnBhdGgucGFyYWxsZWxfYXdhcmUg PSBmYWxzZTsKIAlwYXRobm9kZS0+cGF0aC5wYXJhbGxlbF9zYWZlID0gcmVsLT5jb25zaWRlcl9w YXJhbGxlbCAmJgogCQlzdWJwYXRoLT5wYXJhbGxlbF9zYWZlOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcmVsbm9kZS5jCmluZGV4IGY5NjU3M2ViNWQuLmQzNDlhZTUyMWIgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9yZWxub2RlLmMKQEAgLTE2LDYgKzE2LDggQEAKIAogI2luY2x1ZGUgPGxpbWl0 cy5oPgogCisjaW5jbHVkZSAiYWNjZXNzL25idHJlZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf Y29uc3RyYWludC5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL25v ZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9hcHBlbmRpbmZvLmgiCkBAIC0yNywxOSAr MjksMjcgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJvcHRpbWl6 ZXIvcGxhY2Vob2xkZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2luY2x1 ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3Jlc3RyaWN0aW5m by5oIgogI2luY2x1ZGUgIm9wdGltaXplci90bGlzdC5oIgorI2luY2x1ZGUgInBhcnNlci9wYXJz ZV9vcGVyLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAi cmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvc2VsZnVuY3MuaCIKKyNp bmNsdWRlICJ1dGlscy90eXBjYWNoZS5oIgogCiAKLXR5cGVkZWYgc3RydWN0IEpvaW5IYXNoRW50 cnkKKy8qCisgKiBBbiBlbnRyeSBvZiBhIGhhc2ggdGFibGUgdGhhdCB3ZSB1c2UgdG8gbWFrZSBs b29rdXAgZm9yIFJlbE9wdEluZm8KKyAqIHN0cnVjdHVyZXMgbW9yZSBlZmZpY2llbnQuCisgKi8K K3R5cGVkZWYgc3RydWN0IFJlbEhhc2hFbnRyeQogewotCVJlbGlkcwkJam9pbl9yZWxpZHM7CS8q IGhhc2gga2V5IC0tLSBNVVNUIEJFIEZJUlNUICovCi0JUmVsT3B0SW5mbyAqam9pbl9yZWw7Ci19 IEpvaW5IYXNoRW50cnk7CisJUmVsaWRzCQlyZWxpZHM7CQkJLyogaGFzaCBrZXkgLS0tIE1VU1Qg QkUgRklSU1QgKi8KKwlSZWxPcHRJbmZvICpyZWw7Cit9IFJlbEhhc2hFbnRyeTsKIAogc3RhdGlj IHZvaWQgYnVpbGRfam9pbnJlbF90bGlzdChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq am9pbnJlbCwKIAkJCQkJCQkJUmVsT3B0SW5mbyAqaW5wdXRfcmVsLApAQCAtODMsNyArOTMsMTcg QEAgc3RhdGljIHZvaWQgYnVpbGRfY2hpbGRfam9pbl9yZWx0YXJnZXQoUGxhbm5lckluZm8gKnJv b3QsCiAJCQkJCQkJCQkgICBSZWxPcHRJbmZvICpjaGlsZHJlbCwKIAkJCQkJCQkJCSAgIGludCBu YXBwaW5mb3MsCiAJCQkJCQkJCQkgICBBcHBlbmRSZWxJbmZvICoqYXBwaW5mb3MpOwotCitzdGF0 aWMgYm9vbCBlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24oUGxhbm5lcklu Zm8gKnJvb3QsCisJCQkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsKTsKK3N0YXRpYyBib29sIGlu aXRfZ3JvdXBpbmdfdGFyZ2V0cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAor CQkJCQkJCQkgIFBhdGhUYXJnZXQgKnRhcmdldCwgUGF0aFRhcmdldCAqYWdnX2lucHV0LAorCQkJ CQkJCQkgIExpc3QgKipncm91cF9jbGF1c2VzLCBMaXN0ICoqZ3JvdXBfZXhwcnMpOworc3RhdGlj IGJvb2wgaXNfdmFyX2luX2FnZ3JlZl9vbmx5KFBsYW5uZXJJbmZvICpyb290LCBWYXIgKnZhcik7 CitzdGF0aWMgYm9vbCBpc192YXJfbmVlZGVkX2J5X2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFZh ciAqdmFyLCBSZWxPcHRJbmZvICpyZWwpOworc3RhdGljIEluZGV4IGdldF9leHByZXNzaW9uX3Nv cnRncm91cHJlZihQbGFubmVySW5mbyAqcm9vdCwgRXhwciAqZXhwcik7CisKKy8qIE1pbmltdW0g cm93IHJlZHVjdGlvbiByYXRpbyBhdCB3aGljaCBhIGdyb3VwZWQgcGF0aCBpcyBjb25zaWRlcmVk IHVzZWZ1bCAqLworI2RlZmluZSBFQUdFUl9BR0dSRUdBVEVfUkFUSU8gMC41CiAKIC8qCiAgKiBz ZXR1cF9zaW1wbGVfcmVsX2FycmF5cwpAQCAtMjc2LDYgKzI5Niw3IEBAIGJ1aWxkX3NpbXBsZV9y ZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwgUmVsT3B0SW5mbyAqcGFyZW50KQogCXJl bC0+am9pbmluZm8gPSBOSUw7CiAJcmVsLT5oYXNfZWNsYXNzX2pvaW5zID0gZmFsc2U7CiAJcmVs LT5jb25zaWRlcl9wYXJ0aXRpb253aXNlX2pvaW4gPSBmYWxzZTsJLyogbWlnaHQgZ2V0IGNoYW5n ZWQgbGF0ZXIgKi8KKwlyZWwtPmFnZ19pbmZvID0gTlVMTDsKIAlyZWwtPnBhcnRfc2NoZW1lID0g TlVMTDsKIAlyZWwtPm5wYXJ0cyA9IC0xOwogCXJlbC0+Ym91bmRpbmZvID0gTlVMTDsKQEAgLTQw Niw2ICs0MjcsOTkgQEAgYnVpbGRfc2ltcGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJl bGlkLCBSZWxPcHRJbmZvICpwYXJlbnQpCiAJcmV0dXJuIHJlbDsKIH0KIAorLyoKKyAqIGJ1aWxk X3NpbXBsZV9ncm91cGVkX3JlbAorICoJICBDb25zdHJ1Y3QgYSBuZXcgUmVsT3B0SW5mbyBmb3Ig YSBncm91cGVkIGJhc2UgcmVsYXRpb24gb3V0IG9mIGFuIGV4aXN0aW5nCisgKgkgIG5vbi1ncm91 cGVkIGJhc2UgcmVsYXRpb24uCisgKi8KK1JlbE9wdEluZm8gKgorYnVpbGRfc2ltcGxlX2dyb3Vw ZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWxfcGxhaW4pCit7CisJUmVs T3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisJUmVsQWdnSW5mbyAqYWdnX2luZm87CisKKwkvKgorCSAq IFdlIHNob3VsZCBoYXZlIGF2YWlsYWJsZSBhZ2dyZWdhdGUgZXhwcmVzc2lvbnMgYW5kIGdyb3Vw aW5nCisJICogZXhwcmVzc2lvbnMsIG90aGVyd2lzZSB3ZSBjYW5ub3QgcmVhY2ggaGVyZS4KKwkg Ki8KKwlBc3NlcnQocm9vdC0+YWdnX2NsYXVzZV9saXN0ICE9IE5JTCk7CisJQXNzZXJ0KHJvb3Qt Pmdyb3VwX2V4cHJfbGlzdCAhPSBOSUwpOworCisJLyogbm90aGluZyB0byBkbyBmb3IgZHVtbXkg cmVsICovCisJaWYgKElTX0RVTU1ZX1JFTChyZWxfcGxhaW4pKQorCQlyZXR1cm4gTlVMTDsKKwor CS8qCisJICogUHJlcGFyZSB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSBncm91cGVk IHBhdGhzIGZvciB0aGlzIGJhc2UKKwkgKiByZWxhdGlvbi4KKwkgKi8KKwlhZ2dfaW5mbyA9IGNy ZWF0ZV9yZWxfYWdnX2luZm8ocm9vdCwgcmVsX3BsYWluKTsKKwlpZiAoYWdnX2luZm8gPT0gTlVM TCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIElmIHRoZSBncm91cGVkIHBhdGhzIGZvciB0 aGUgZ2l2ZW4gYmFzZSByZWxhdGlvbiBhcmUgbm90IGNvbnNpZGVyZWQKKwkgKiB1c2VmdWwsIGRv IG5vdCBidWlsZCB0aGUgZ3JvdXBlZCByZWxhdGlvbi4KKwkgKi8KKwlpZiAoIWFnZ19pbmZvLT5h Z2dfdXNlZnVsKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIGJ1aWxkIGEgZ3JvdXBlZCByZWxhdGlv biBvdXQgb2YgdGhlIHBsYWluIHJlbGF0aW9uICovCisJcmVsX2dyb3VwZWQgPSBidWlsZF9ncm91 cGVkX3JlbChyb290LCByZWxfcGxhaW4pOworCXJlbF9ncm91cGVkLT5yZWx0YXJnZXQgPSBhZ2df aW5mby0+dGFyZ2V0OworCXJlbF9ncm91cGVkLT5yb3dzID0gYWdnX2luZm8tPmdyb3VwZWRfcm93 czsKKwlyZWxfZ3JvdXBlZC0+YWdnX2luZm8gPSBhZ2dfaW5mbzsKKworCXJldHVybiByZWxfZ3Jv dXBlZDsKK30KKworLyoKKyAqIGJ1aWxkX2dyb3VwZWRfcmVsCisgKgkgIEJ1aWxkIGEgZ3JvdXBl ZCByZWxhdGlvbiBieSBmbGF0IGNvcHlpbmcgYSBwbGFpbiByZWxhdGlvbiBhbmQgcmVzZXR0aW5n CisgKgkgIHRoZSBuZWNlc3NhcnkgZmllbGRzLgorICovCitSZWxPcHRJbmZvICoKK2J1aWxkX2dy b3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWxfcGxhaW4pCit7CisJ UmVsT3B0SW5mbyAqcmVsX2dyb3VwZWQ7CisKKwlyZWxfZ3JvdXBlZCA9IG1ha2VOb2RlKFJlbE9w dEluZm8pOworCW1lbWNweShyZWxfZ3JvdXBlZCwgcmVsX3BsYWluLCBzaXplb2YoUmVsT3B0SW5m bykpOworCisJLyoKKwkgKiBjbGVhciBwYXRoIGluZm8KKwkgKi8KKwlyZWxfZ3JvdXBlZC0+cGF0 aGxpc3QgPSBOSUw7CisJcmVsX2dyb3VwZWQtPnBwaWxpc3QgPSBOSUw7CisJcmVsX2dyb3VwZWQt PnBhcnRpYWxfcGF0aGxpc3QgPSBOSUw7CisJcmVsX2dyb3VwZWQtPmNoZWFwZXN0X3N0YXJ0dXBf cGF0aCA9IE5VTEw7CisJcmVsX2dyb3VwZWQtPmNoZWFwZXN0X3RvdGFsX3BhdGggPSBOVUxMOwor CXJlbF9ncm91cGVkLT5jaGVhcGVzdF91bmlxdWVfcGF0aCA9IE5VTEw7CisJcmVsX2dyb3VwZWQt PmNoZWFwZXN0X3BhcmFtZXRlcml6ZWRfcGF0aHMgPSBOSUw7CisKKwkvKgorCSAqIGNsZWFyIHBh cnRpdGlvbiBpbmZvCisJICovCisJcmVsX2dyb3VwZWQtPnBhcnRfc2NoZW1lID0gTlVMTDsKKwly ZWxfZ3JvdXBlZC0+bnBhcnRzID0gLTE7CisJcmVsX2dyb3VwZWQtPmJvdW5kaW5mbyA9IE5VTEw7 CisJcmVsX2dyb3VwZWQtPnBhcnRib3VuZHNfbWVyZ2VkID0gZmFsc2U7CisJcmVsX2dyb3VwZWQt PnBhcnRpdGlvbl9xdWFsID0gTklMOworCXJlbF9ncm91cGVkLT5wYXJ0X3JlbHMgPSBOVUxMOwor CXJlbF9ncm91cGVkLT5saXZlX3BhcnRzID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+YWxsX3BhcnRy ZWxzID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+cGFydGV4cHJzID0gTlVMTDsKKwlyZWxfZ3JvdXBl ZC0+bnVsbGFibGVfcGFydGV4cHJzID0gTlVMTDsKKwlyZWxfZ3JvdXBlZC0+Y29uc2lkZXJfcGFy dGl0aW9ud2lzZV9qb2luID0gZmFsc2U7CisKKwkvKgorCSAqIGNsZWFyIHNpemUgZXN0aW1hdGVz CisJICovCisJcmVsX2dyb3VwZWQtPnJvd3MgPSAwOworCisJcmV0dXJuIHJlbF9ncm91cGVkOwor fQorCiAvKgogICogZmluZF9iYXNlX3JlbAogICoJICBGaW5kIGEgYmFzZSBvciBvdGhlcnJlbCBy ZWxhdGlvbiBlbnRyeSwgd2hpY2ggbXVzdCBhbHJlYWR5IGV4aXN0LgpAQCAtNDc5LDExICs1OTMs MTEgQEAgZmluZF9iYXNlX3JlbF9pZ25vcmVfam9pbihQbGFubmVySW5mbyAqcm9vdCwgaW50IHJl bGlkKQogfQogCiAvKgotICogYnVpbGRfam9pbl9yZWxfaGFzaAotICoJICBDb25zdHJ1Y3QgdGhl IGF1eGlsaWFyeSBoYXNoIHRhYmxlIGZvciBqb2luIHJlbGF0aW9ucy4KKyAqIGJ1aWxkX3JlbF9o YXNoCisgKgkgIENvbnN0cnVjdCB0aGUgYXV4aWxpYXJ5IGhhc2ggdGFibGUgZm9yIHJlbGF0aW9u cy4KICAqLwogc3RhdGljIHZvaWQKLWJ1aWxkX2pvaW5fcmVsX2hhc2goUGxhbm5lckluZm8gKnJv b3QpCitidWlsZF9yZWxfaGFzaChSZWxJbmZvTGlzdCAqbGlzdCkKIHsKIAlIVEFCCSAgICpoYXNo dGFiOwogCUhBU0hDVEwJCWhhc2hfY3RsOwpAQCAtNDkxLDQ3ICs2MDUsNDYgQEAgYnVpbGRfam9p bl9yZWxfaGFzaChQbGFubmVySW5mbyAqcm9vdCkKIAogCS8qIENyZWF0ZSB0aGUgaGFzaCB0YWJs ZSAqLwogCWhhc2hfY3RsLmtleXNpemUgPSBzaXplb2YoUmVsaWRzKTsKLQloYXNoX2N0bC5lbnRy eXNpemUgPSBzaXplb2YoSm9pbkhhc2hFbnRyeSk7CisJaGFzaF9jdGwuZW50cnlzaXplID0gc2l6 ZW9mKFJlbEhhc2hFbnRyeSk7CiAJaGFzaF9jdGwuaGFzaCA9IGJpdG1hcF9oYXNoOwogCWhhc2hf Y3RsLm1hdGNoID0gYml0bWFwX21hdGNoOwogCWhhc2hfY3RsLmhjeHQgPSBDdXJyZW50TWVtb3J5 Q29udGV4dDsKLQloYXNodGFiID0gaGFzaF9jcmVhdGUoIkpvaW5SZWxIYXNoVGFibGUiLAorCWhh c2h0YWIgPSBoYXNoX2NyZWF0ZSgiUmVsSGFzaFRhYmxlIiwKIAkJCQkJCSAgMjU2TCwKIAkJCQkJ CSAgJmhhc2hfY3RsLAogCQkJCQkJICBIQVNIX0VMRU0gfCBIQVNIX0ZVTkNUSU9OIHwgSEFTSF9D T01QQVJFIHwgSEFTSF9DT05URVhUKTsKIAotCS8qIEluc2VydCBhbGwgdGhlIGFscmVhZHktZXhp c3Rpbmcgam9pbnJlbHMgKi8KLQlmb3JlYWNoKGwsIHJvb3QtPmpvaW5fcmVsX2xpc3QpCisJLyog SW5zZXJ0IGFsbCB0aGUgYWxyZWFkeS1leGlzdGluZyBSZWxPcHRJbmZvcyAqLworCWZvcmVhY2go bCwgbGlzdC0+aXRlbXMpCiAJewogCQlSZWxPcHRJbmZvICpyZWwgPSAoUmVsT3B0SW5mbyAqKSBs Zmlyc3QobCk7Ci0JCUpvaW5IYXNoRW50cnkgKmhlbnRyeTsKKwkJUmVsSGFzaEVudHJ5ICpoZW50 cnk7CiAJCWJvb2wJCWZvdW5kOwogCi0JCWhlbnRyeSA9IChKb2luSGFzaEVudHJ5ICopIGhhc2hf c2VhcmNoKGhhc2h0YWIsCi0JCQkJCQkJCQkJCSAgICYocmVsLT5yZWxpZHMpLAotCQkJCQkJCQkJ CQkgICBIQVNIX0VOVEVSLAotCQkJCQkJCQkJCQkgICAmZm91bmQpOworCQloZW50cnkgPSAoUmVs SGFzaEVudHJ5ICopIGhhc2hfc2VhcmNoKGhhc2h0YWIsCisJCQkJCQkJCQkJCSAgJihyZWwtPnJl bGlkcyksCisJCQkJCQkJCQkJCSAgSEFTSF9FTlRFUiwKKwkJCQkJCQkJCQkJICAmZm91bmQpOwog CQlBc3NlcnQoIWZvdW5kKTsKLQkJaGVudHJ5LT5qb2luX3JlbCA9IHJlbDsKKwkJaGVudHJ5LT5y ZWwgPSByZWw7CiAJfQogCi0Jcm9vdC0+am9pbl9yZWxfaGFzaCA9IGhhc2h0YWI7CisJbGlzdC0+ aGFzaCA9IGhhc2h0YWI7CiB9CiAKIC8qCi0gKiBmaW5kX2pvaW5fcmVsCi0gKgkgIFJldHVybnMg cmVsYXRpb24gZW50cnkgY29ycmVzcG9uZGluZyB0byAncmVsaWRzJyAoYSBzZXQgb2YgUlQgaW5k ZXhlcyksCi0gKgkgIG9yIE5VTEwgaWYgbm9uZSBleGlzdHMuICBUaGlzIGlzIGZvciBqb2luIHJl bGF0aW9ucy4KKyAqIGZpbmRfcmVsX2luZm8KKyAqCSAgRmluZCBhIFJlbE9wdEluZm8gZW50cnkg Y29ycmVzcG9uZGluZyB0byAncmVsaWRzJy4KICAqLwotUmVsT3B0SW5mbyAqCi1maW5kX2pvaW5f cmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVsaWRzKQorc3RhdGljIFJlbE9wdEluZm8g KgorZmluZF9yZWxfaW5mbyhSZWxJbmZvTGlzdCAqbGlzdCwgUmVsaWRzIHJlbGlkcykKIHsKIAkv KgogCSAqIFN3aXRjaCB0byB1c2luZyBoYXNoIGxvb2t1cCB3aGVuIGxpc3QgZ3Jvd3MgInRvbyBs b25nIi4gIFRoZSB0aHJlc2hvbGQKIAkgKiBpcyBhcmJpdHJhcnkgYW5kIGlzIGtub3duIG9ubHkg aGVyZS4KIAkgKi8KLQlpZiAoIXJvb3QtPmpvaW5fcmVsX2hhc2ggJiYgbGlzdF9sZW5ndGgocm9v dC0+am9pbl9yZWxfbGlzdCkgPiAzMikKLQkJYnVpbGRfam9pbl9yZWxfaGFzaChyb290KTsKKwlp ZiAoIWxpc3QtPmhhc2ggJiYgbGlzdF9sZW5ndGgobGlzdC0+aXRlbXMpID4gMzIpCisJCWJ1aWxk X3JlbF9oYXNoKGxpc3QpOwogCiAJLyoKIAkgKiBVc2UgZWl0aGVyIGhhc2h0YWJsZSBsb29rdXAg b3IgbGluZWFyIHNlYXJjaCwgYXMgYXBwcm9wcmlhdGUuCkBAIC01NDEsMjMgKzY1NCwyMyBAQCBm aW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVsaWRzKQogCSAqIHNvIHdv dWxkIGZvcmNlIHJlbGlkcyBvdXQgb2YgYSByZWdpc3RlciBhbmQgdGh1cyBwcm9iYWJseSBzbG93 IGRvd24gdGhlCiAJICogbGlzdC1zZWFyY2ggY2FzZS4KIAkgKi8KLQlpZiAocm9vdC0+am9pbl9y ZWxfaGFzaCkKKwlpZiAobGlzdC0+aGFzaCkKIAl7CiAJCVJlbGlkcwkJaGFzaGtleSA9IHJlbGlk czsKLQkJSm9pbkhhc2hFbnRyeSAqaGVudHJ5OworCQlSZWxIYXNoRW50cnkgKmhlbnRyeTsKIAot CQloZW50cnkgPSAoSm9pbkhhc2hFbnRyeSAqKSBoYXNoX3NlYXJjaChyb290LT5qb2luX3JlbF9o YXNoLAotCQkJCQkJCQkJCQkgICAmaGFzaGtleSwKLQkJCQkJCQkJCQkJICAgSEFTSF9GSU5ELAot CQkJCQkJCQkJCQkgICBOVUxMKTsKKwkJaGVudHJ5ID0gKFJlbEhhc2hFbnRyeSAqKSBoYXNoX3Nl YXJjaChsaXN0LT5oYXNoLAorCQkJCQkJCQkJCQkgICZoYXNoa2V5LAorCQkJCQkJCQkJCQkgIEhB U0hfRklORCwKKwkJCQkJCQkJCQkJICBOVUxMKTsKIAkJaWYgKGhlbnRyeSkKLQkJCXJldHVybiBo ZW50cnktPmpvaW5fcmVsOworCQkJcmV0dXJuIGhlbnRyeS0+cmVsOwogCX0KIAllbHNlCiAJewog CQlMaXN0Q2VsbCAgICpsOwogCi0JCWZvcmVhY2gobCwgcm9vdC0+am9pbl9yZWxfbGlzdCkKKwkJ Zm9yZWFjaChsLCBsaXN0LT5pdGVtcykKIAkJewogCQkJUmVsT3B0SW5mbyAqcmVsID0gKFJlbE9w dEluZm8gKikgbGZpcnN0KGwpOwogCkBAIC01NjksNiArNjgyLDI4IEBAIGZpbmRfam9pbl9yZWwo UGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMpCiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8q CisgKiBmaW5kX2pvaW5fcmVsCisgKgkgIFJldHVybnMgcmVsYXRpb24gZW50cnkgY29ycmVzcG9u ZGluZyB0byAncmVsaWRzJyAoYSBzZXQgb2YgUlQgaW5kZXhlcyksCisgKgkgIG9yIE5VTEwgaWYg bm9uZSBleGlzdHMuICBUaGlzIGlzIGZvciBqb2luIHJlbGF0aW9ucy4KKyAqLworUmVsT3B0SW5m byAqCitmaW5kX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVsaWRzKQorewor CXJldHVybiBmaW5kX3JlbF9pbmZvKHJvb3QtPmpvaW5fcmVsX2xpc3QsIHJlbGlkcyk7Cit9CisK Ky8qCisgKiBmaW5kX2dyb3VwZWRfcmVsCisgKgkgIFJldHVybnMgcmVsYXRpb24gZW50cnkgY29y cmVzcG9uZGluZyB0byAncmVsaWRzJyAoYSBzZXQgb2YgUlQgaW5kZXhlcyksCisgKgkgIG9yIE5V TEwgaWYgbm9uZSBleGlzdHMuICBUaGlzIGlzIGZvciBncm91cGVkIHJlbGF0aW9ucy4KKyAqLwor UmVsT3B0SW5mbyAqCitmaW5kX2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMg cmVsaWRzKQoreworCXJldHVybiBmaW5kX3JlbF9pbmZvKHJvb3QtPmdyb3VwZWRfcmVsX2xpc3Qs IHJlbGlkcyk7Cit9CisKIC8qCiAgKiBzZXRfZm9yZWlnbl9yZWxfcHJvcGVydGllcwogICoJCVNl dCB1cCBmb3JlaWduLWpvaW4gZmllbGRzIGlmIG91dGVyIGFuZCBpbm5lciByZWxhdGlvbiBhcmUg Zm9yZWlnbgpAQCAtNjE5LDMxICs3NTQsNTMgQEAgc2V0X2ZvcmVpZ25fcmVsX3Byb3BlcnRpZXMo UmVsT3B0SW5mbyAqam9pbnJlbCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogfQogCiAvKgotICog YWRkX2pvaW5fcmVsCi0gKgkJQWRkIGdpdmVuIGpvaW4gcmVsYXRpb24gdG8gdGhlIGxpc3Qgb2Yg am9pbiByZWxhdGlvbnMgaW4gdGhlIGdpdmVuCi0gKgkJUGxhbm5lckluZm8uIEFsc28gYWRkIGl0 IHRvIHRoZSBhdXhpbGlhcnkgaGFzaHRhYmxlIGlmIHRoZXJlIGlzIG9uZS4KKyAqIGFkZF9yZWxf aW5mbworICoJCUFkZCBnaXZlbiByZWxhdGlvbiB0byB0aGUgbGlzdCwgYW5kIGFsc28gYWRkIGl0 IHRvIHRoZSBhdXhpbGlhcnkKKyAqCQloYXNodGFibGUgaWYgdGhlcmUgaXMgb25lLgogICovCiBz dGF0aWMgdm9pZAotYWRkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpq b2lucmVsKQorYWRkX3JlbF9pbmZvKFJlbEluZm9MaXN0ICpsaXN0LCBSZWxPcHRJbmZvICpyZWwp CiB7Ci0JLyogR0VRTyByZXF1aXJlcyB1cyB0byBhcHBlbmQgdGhlIG5ldyBqb2lucmVsIHRvIHRo ZSBlbmQgb2YgdGhlIGxpc3QhICovCi0Jcm9vdC0+am9pbl9yZWxfbGlzdCA9IGxhcHBlbmQocm9v dC0+am9pbl9yZWxfbGlzdCwgam9pbnJlbCk7CisJLyogR0VRTyByZXF1aXJlcyB1cyB0byBhcHBl bmQgdGhlIG5ldyByZWxhdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBsaXN0ISAqLworCWxpc3QtPml0 ZW1zID0gbGFwcGVuZChsaXN0LT5pdGVtcywgcmVsKTsKIAogCS8qIHN0b3JlIGl0IGludG8gdGhl IGF1eGlsaWFyeSBoYXNodGFibGUgaWYgdGhlcmUgaXMgb25lLiAqLwotCWlmIChyb290LT5qb2lu X3JlbF9oYXNoKQorCWlmIChsaXN0LT5oYXNoKQogCXsKLQkJSm9pbkhhc2hFbnRyeSAqaGVudHJ5 OworCQlSZWxIYXNoRW50cnkgKmhlbnRyeTsKIAkJYm9vbAkJZm91bmQ7CiAKLQkJaGVudHJ5ID0g KEpvaW5IYXNoRW50cnkgKikgaGFzaF9zZWFyY2gocm9vdC0+am9pbl9yZWxfaGFzaCwKLQkJCQkJ CQkJCQkJICAgJihqb2lucmVsLT5yZWxpZHMpLAotCQkJCQkJCQkJCQkgICBIQVNIX0VOVEVSLAot CQkJCQkJCQkJCQkgICAmZm91bmQpOworCQloZW50cnkgPSAoUmVsSGFzaEVudHJ5ICopIGhhc2hf c2VhcmNoKGxpc3QtPmhhc2gsCisJCQkJCQkJCQkJCSAgJihyZWwtPnJlbGlkcyksCisJCQkJCQkJ CQkJCSAgSEFTSF9FTlRFUiwKKwkJCQkJCQkJCQkJICAmZm91bmQpOwogCQlBc3NlcnQoIWZvdW5k KTsKLQkJaGVudHJ5LT5qb2luX3JlbCA9IGpvaW5yZWw7CisJCWhlbnRyeS0+cmVsID0gcmVsOwog CX0KIH0KIAorLyoKKyAqIGFkZF9qb2luX3JlbAorICoJCUFkZCBnaXZlbiBqb2luIHJlbGF0aW9u IHRvIHRoZSBsaXN0IG9mIGpvaW4gcmVsYXRpb25zIGluIHRoZSBnaXZlbgorICoJCVBsYW5uZXJJ bmZvLgorICovCitzdGF0aWMgdm9pZAorYWRkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpqb2lucmVsKQoreworCWFkZF9yZWxfaW5mbyhyb290LT5qb2luX3JlbF9saXN0 LCBqb2lucmVsKTsKK30KKworLyoKKyAqIGFkZF9ncm91cGVkX3JlbAorICoJCUFkZCBnaXZlbiBn cm91cGVkIHJlbGF0aW9uIHRvIHRoZSBsaXN0IG9mIGdyb3VwZWQgcmVsYXRpb25zIGluIHRoZQor ICoJCWdpdmVuIFBsYW5uZXJJbmZvLgorICovCit2b2lkCithZGRfZ3JvdXBlZF9yZWwoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKK3sKKwlhZGRfcmVsX2luZm8ocm9vdC0+Z3Jv dXBlZF9yZWxfbGlzdCwgcmVsKTsKK30KKwogLyoKICAqIGJ1aWxkX2pvaW5fcmVsCiAgKgkgIFJl dHVybnMgcmVsYXRpb24gZW50cnkgY29ycmVzcG9uZGluZyB0byB0aGUgdW5pb24gb2YgdHdvIGdp dmVuIHJlbHMsCkBAIC03NTUsNiArOTEyLDcgQEAgYnVpbGRfam9pbl9yZWwoUGxhbm5lckluZm8g KnJvb3QsCiAJam9pbnJlbC0+am9pbmluZm8gPSBOSUw7CiAJam9pbnJlbC0+aGFzX2VjbGFzc19q b2lucyA9IGZhbHNlOwogCWpvaW5yZWwtPmNvbnNpZGVyX3BhcnRpdGlvbndpc2Vfam9pbiA9IGZh bHNlOwkvKiBtaWdodCBnZXQgY2hhbmdlZCBsYXRlciAqLworCWpvaW5yZWwtPmFnZ19pbmZvID0g TlVMTDsKIAlqb2lucmVsLT5wYXJlbnQgPSBOVUxMOwogCWpvaW5yZWwtPnRvcF9wYXJlbnQgPSBO VUxMOwogCWpvaW5yZWwtPnRvcF9wYXJlbnRfcmVsaWRzID0gTlVMTDsKQEAgLTkzOSw2ICsxMDk3 LDcgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g Km91dGVyX3JlbCwKIAlqb2lucmVsLT5qb2luaW5mbyA9IE5JTDsKIAlqb2lucmVsLT5oYXNfZWNs YXNzX2pvaW5zID0gZmFsc2U7CiAJam9pbnJlbC0+Y29uc2lkZXJfcGFydGl0aW9ud2lzZV9qb2lu ID0gZmFsc2U7CS8qIG1pZ2h0IGdldCBjaGFuZ2VkIGxhdGVyICovCisJam9pbnJlbC0+YWdnX2lu Zm8gPSBOVUxMOwogCWpvaW5yZWwtPnBhcmVudCA9IHBhcmVudF9qb2lucmVsOwogCWpvaW5yZWwt PnRvcF9wYXJlbnQgPSBwYXJlbnRfam9pbnJlbC0+dG9wX3BhcmVudCA/IHBhcmVudF9qb2lucmVs LT50b3BfcGFyZW50IDogcGFyZW50X2pvaW5yZWw7CiAJam9pbnJlbC0+dG9wX3BhcmVudF9yZWxp ZHMgPSBqb2lucmVsLT50b3BfcGFyZW50LT5yZWxpZHM7CkBAIC0yNTE4LDMgKzI2NzcsNTA4IEBA IGJ1aWxkX2NoaWxkX2pvaW5fcmVsdGFyZ2V0KFBsYW5uZXJJbmZvICpyb290LAogCWNoaWxkcmVs LT5yZWx0YXJnZXQtPmNvc3QucGVyX3R1cGxlID0gcGFyZW50cmVsLT5yZWx0YXJnZXQtPmNvc3Qu cGVyX3R1cGxlOwogCWNoaWxkcmVsLT5yZWx0YXJnZXQtPndpZHRoID0gcGFyZW50cmVsLT5yZWx0 YXJnZXQtPndpZHRoOwogfQorCisvKgorICogY3JlYXRlX3JlbF9hZ2dfaW5mbworICoJICBDcmVh dGUgdGhlIFJlbEFnZ0luZm8gc3RydWN0dXJlIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24gaWYgaXQg Y2FuIHByb2R1Y2UKKyAqCSAgZ3JvdXBlZCBwYXRocy4gIFRoZSBnaXZlbiByZWxhdGlvbiBpcyB0 aGUgbm9uLWdyb3VwZWQgb25lIHdoaWNoIGhhcyB0aGUKKyAqCSAgcmVsdGFyZ2V0IGFscmVhZHkg Y29uc3RydWN0ZWQuCisgKi8KK1JlbEFnZ0luZm8gKgorY3JlYXRlX3JlbF9hZ2dfaW5mbyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQoreworCUxpc3RDZWxsICAgKmxjOworCVJl bEFnZ0luZm8gKnJlc3VsdDsKKwlQYXRoVGFyZ2V0ICphZ2dfaW5wdXQ7CisJUGF0aFRhcmdldCAq dGFyZ2V0OworCUxpc3QJICAgKmdyb3VwX2NsYXVzZXMgPSBOSUw7CisJTGlzdAkgICAqZ3JvdXBf ZXhwcnMgPSBOSUw7CisKKwkvKgorCSAqIFRoZSBsaXN0cyBvZiBhZ2dyZWdhdGUgZXhwcmVzc2lv bnMgYW5kIGdyb3VwaW5nIGV4cHJlc3Npb25zIHNob3VsZCBoYXZlCisJICogYmVlbiBjb25zdHJ1 Y3RlZC4KKwkgKi8KKwlBc3NlcnQocm9vdC0+YWdnX2NsYXVzZV9saXN0ICE9IE5JTCk7CisJQXNz ZXJ0KHJvb3QtPmdyb3VwX2V4cHJfbGlzdCAhPSBOSUwpOworCisJLyoKKwkgKiBJZiB0aGlzIGlz IGEgY2hpbGQgcmVsLCB0aGUgZ3JvdXBlZCByZWwgZm9yIGl0cyBwYXJlbnQgcmVsIG11c3QgaGF2 ZQorCSAqIGJlZW4gY3JlYXRlZCBpZiBpdCBjYW4uICBTbyB3ZSBjYW4ganVzdCB1c2UgcGFyZW50 J3MgUmVsQWdnSW5mbyBpZgorCSAqIHRoZXJlIGlzIG9uZSwgd2l0aCBhcHByb3ByaWF0ZSB2YXJp YWJsZSBzdWJzdGl0dXRpb25zLgorCSAqLworCWlmIChJU19PVEhFUl9SRUwocmVsKSkKKwl7CisJ CVJlbE9wdEluZm8gKnJlbF9ncm91cGVkOworCQlSZWxBZ2dJbmZvICphZ2dfaW5mbzsKKworCQlB c3NlcnQoIWJtc19pc19lbXB0eShyZWwtPnRvcF9wYXJlbnRfcmVsaWRzKSk7CisJCXJlbF9ncm91 cGVkID0gZmluZF9ncm91cGVkX3JlbChyb290LCByZWwtPnRvcF9wYXJlbnRfcmVsaWRzKTsKKwor CQlpZiAocmVsX2dyb3VwZWQgPT0gTlVMTCkKKwkJCXJldHVybiBOVUxMOworCisJCUFzc2VydChJ U19HUk9VUEVEX1JFTChyZWxfZ3JvdXBlZCkpOworCQkvKiBNdXN0IGRvIG11bHRpLWxldmVsIHRy YW5zZm9ybWF0aW9uICovCisJCWFnZ19pbmZvID0gKFJlbEFnZ0luZm8gKikKKwkJCWFkanVzdF9h cHBlbmRyZWxfYXR0cnNfbXVsdGlsZXZlbChyb290LAorCQkJCQkJCQkJCQkgIChOb2RlICopIHJl bF9ncm91cGVkLT5hZ2dfaW5mbywKKwkJCQkJCQkJCQkJICByZWwsCisJCQkJCQkJCQkJCSAgcmVs LT50b3BfcGFyZW50KTsKKworCQlhZ2dfaW5mby0+Z3JvdXBlZF9yb3dzID0KKwkJCWVzdGltYXRl X251bV9ncm91cHMocm9vdCwgYWdnX2luZm8tPmdyb3VwX2V4cHJzLAorCQkJCQkJCQlyZWwtPnJv d3MsIE5VTEwsIE5VTEwpOworCisJCS8qCisJCSAqIFRoZSBncm91cGVkIHBhdGhzIGZvciB0aGUg Z2l2ZW4gcmVsYXRpb24gYXJlIGNvbnNpZGVyZWQgdXNlZnVsIGlmZgorCQkgKiB0aGUgcm93IHJl ZHVjdGlvbiByYXRpbyBpcyBncmVhdGVyIHRoYW4gRUFHRVJfQUdHUkVHQVRFX1JBVElPLgorCQkg Ki8KKwkJYWdnX2luZm8tPmFnZ191c2VmdWwgPQorCQkJKGFnZ19pbmZvLT5ncm91cGVkX3Jvd3Mg PD0gcmVsLT5yb3dzICogKDEgLSBFQUdFUl9BR0dSRUdBVEVfUkFUSU8pKTsKKworCQlyZXR1cm4g YWdnX2luZm87CisJfQorCisJLyogQ2hlY2sgaWYgaXQncyBwb3NzaWJsZSB0byBwcm9kdWNlIGdy b3VwZWQgcGF0aHMgZm9yIHRoaXMgcmVsYXRpb24uICovCisJaWYgKCFlYWdlcl9hZ2dyZWdhdGlv bl9wb3NzaWJsZV9mb3JfcmVsYXRpb24ocm9vdCwgcmVsKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkv KgorCSAqIENyZWF0ZSB0YXJnZXRzIGZvciB0aGUgZ3JvdXBlZCBwYXRocyBhbmQgZm9yIHRoZSBp bnB1dCBwYXRocyBvZiB0aGUKKwkgKiBncm91cGVkIHBhdGhzLgorCSAqLworCXRhcmdldCA9IGNy ZWF0ZV9lbXB0eV9wYXRodGFyZ2V0KCk7CisJYWdnX2lucHV0ID0gY3JlYXRlX2VtcHR5X3BhdGh0 YXJnZXQoKTsKKworCS8qIC4uLiBhbmQgaW5pdGlhbGl6ZSB0aGVzZSB0YXJnZXRzICovCisJaWYg KCFpbml0X2dyb3VwaW5nX3RhcmdldHMocm9vdCwgcmVsLCB0YXJnZXQsIGFnZ19pbnB1dCwKKwkJ CQkJCQkgICAmZ3JvdXBfY2xhdXNlcywgJmdyb3VwX2V4cHJzKSkKKwkJcmV0dXJuIE5VTEw7CisK KwkvKgorCSAqIEVhZ2VyIGFnZ3JlZ2F0aW9uIGlzIG5vdCBhcHBsaWNhYmxlIGlmIHRoZXJlIGFy ZSBubyBhdmFpbGFibGUgZ3JvdXBpbmcKKwkgKiBleHByZXNzaW9ucy4KKwkgKi8KKwlpZiAobGlz dF9sZW5ndGgoZ3JvdXBfY2xhdXNlcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBidWls ZCB0aGUgUmVsQWdnSW5mbyByZXN1bHQgKi8KKwlyZXN1bHQgPSBtYWtlTm9kZShSZWxBZ2dJbmZv KTsKKworCXJlc3VsdC0+Z3JvdXBfY2xhdXNlcyA9IGdyb3VwX2NsYXVzZXM7CisJcmVzdWx0LT5n cm91cF9leHBycyA9IGdyb3VwX2V4cHJzOworCisJLyogQ2FsY3VsYXRlIHBhdGhrZXlzIHRoYXQg cmVwcmVzZW50IHRoaXMgZ3JvdXBpbmcgcmVxdWlyZW1lbnRzICovCisJcmVzdWx0LT5ncm91cF9w YXRoa2V5cyA9CisJCW1ha2VfcGF0aGtleXNfZm9yX3NvcnRjbGF1c2VzKHJvb3QsIHJlc3VsdC0+ Z3JvdXBfY2xhdXNlcywKKwkJCQkJCQkJCSAgbWFrZV90bGlzdF9mcm9tX3BhdGh0YXJnZXQodGFy Z2V0KSk7CisKKwkvKiBBZGQgYWdncmVnYXRlcyB0byB0aGUgZ3JvdXBpbmcgdGFyZ2V0ICovCisJ Zm9yZWFjaChsYywgcm9vdC0+YWdnX2NsYXVzZV9saXN0KQorCXsKKwkJQWdnQ2xhdXNlSW5mbyAq YWNfaW5mbyA9IGxmaXJzdF9ub2RlKEFnZ0NsYXVzZUluZm8sIGxjKTsKKwkJQWdncmVmCSAgICph Z2dyZWY7CisKKwkJQXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYsIEFnZ3JlZikpOworCisJCWFn Z3JlZiA9IChBZ2dyZWYgKikgY29weU9iamVjdChhY19pbmZvLT5hZ2dyZWYpOworCQltYXJrX3Bh cnRpYWxfYWdncmVmKGFnZ3JlZiwgQUdHU1BMSVRfSU5JVElBTF9TRVJJQUwpOworCisJCWFkZF9j b2x1bW5fdG9fcGF0aHRhcmdldCh0YXJnZXQsIChFeHByICopIGFnZ3JlZiwgMCk7CisJfQorCisJ LyogU2V0IHRoZSBlc3RpbWF0ZWQgZXZhbCBjb3N0IGFuZCBvdXRwdXQgd2lkdGggZm9yIGJvdGgg dGFyZ2V0cyAqLworCXNldF9wYXRodGFyZ2V0X2Nvc3Rfd2lkdGgocm9vdCwgdGFyZ2V0KTsKKwlz ZXRfcGF0aHRhcmdldF9jb3N0X3dpZHRoKHJvb3QsIGFnZ19pbnB1dCk7CisKKwlyZXN1bHQtPnJl bGlkcyA9IGJtc19jb3B5KHJlbC0+cmVsaWRzKTsKKwlyZXN1bHQtPnRhcmdldCA9IHRhcmdldDsK KwlyZXN1bHQtPmFnZ19pbnB1dCA9IGFnZ19pbnB1dDsKKwlyZXN1bHQtPmdyb3VwZWRfcm93cyA9 IGVzdGltYXRlX251bV9ncm91cHMocm9vdCwgcmVzdWx0LT5ncm91cF9leHBycywKKwkJCQkJCQkJ CQkJICAgcmVsLT5yb3dzLCBOVUxMLCBOVUxMKTsKKworCS8qCisJICogVGhlIGdyb3VwZWQgcGF0 aHMgZm9yIHRoZSBnaXZlbiByZWxhdGlvbiBhcmUgY29uc2lkZXJlZCB1c2VmdWwgaWZmIHRoZQor CSAqIHJvdyByZWR1Y3Rpb24gcmF0aW8gaXMgZ3JlYXRlciB0aGFuIEVBR0VSX0FHR1JFR0FURV9S QVRJTy4KKwkgKi8KKwlyZXN1bHQtPmFnZ191c2VmdWwgPQorCQkocmVzdWx0LT5ncm91cGVkX3Jv d3MgPD0gcmVsLT5yb3dzICogKDEgLSBFQUdFUl9BR0dSRUdBVEVfUkFUSU8pKTsKKworCXJldHVy biByZXN1bHQ7Cit9CisKKy8qCisgKiBlYWdlcl9hZ2dyZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVs YXRpb24KKyAqIAkgIENoZWNrIGlmIGl0J3MgcG9zc2libGUgdG8gcHJvZHVjZSBncm91cGVkIHBh dGhzIGZvciB0aGUgZ2l2ZW4gcmVsYXRpb24uCisgKi8KK3N0YXRpYyBib29sCitlYWdlcl9hZ2dy ZWdhdGlvbl9wb3NzaWJsZV9mb3JfcmVsYXRpb24oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCkKK3sKKwlMaXN0Q2VsbCAgICpsYzsKKwlpbnQJCQljdXJfcmVsaWQ7CisKKwkvKgor CSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gcmVsYXRpb24gaXMgaW4gdGhlIG51bGxhYmxl IHNpZGUgb2YgYW4gb3V0ZXIKKwkgKiBqb2luLiAgSW4gdGhpcyBjYXNlLCB3ZSBjYW5ub3QgcHVz aCBhIHBhcnRpYWwgYWdncmVnYXRpb24gZG93biB0byB0aGUKKwkgKiByZWxhdGlvbiwgYmVjYXVz ZSB0aGUgTlVMTC1leHRlbmRlZCByb3dzIHByb2R1Y2VkIGJ5IHRoZSBvdXRlciBqb2luCisJICog d291bGQgbm90IGJlIGF2YWlsYWJsZSB3aGVuIHdlIHBlcmZvcm0gdGhlIHBhcnRpYWwgYWdncmVn YXRpb24sIHdoaWxlCisJICogd2l0aCBhIG5vbi1lYWdlci1hZ2dyZWdhdGlvbiBwbGFuIHRoZXNl IHJvd3MgYXJlIGF2YWlsYWJsZSBmb3IgdGhlCisJICogdG9wLWxldmVsIGFnZ3JlZ2F0aW9uLiAg RG9pbmcgc28gbWF5IHJlc3VsdCBpbiB0aGUgcm93cyBiZWluZyBncm91cGVkCisJICogZGlmZmVy ZW50bHkgdGhhbiBleHBlY3RlZCwgb3IgcHJvZHVjZSBpbmNvcnJlY3QgdmFsdWVzIGZyb20gdGhl CisJICogYWdncmVnYXRlIGZ1bmN0aW9ucy4KKwkgKi8KKwljdXJfcmVsaWQgPSAtMTsKKwl3aGls ZSAoKGN1cl9yZWxpZCA9IGJtc19uZXh0X21lbWJlcihyZWwtPnJlbGlkcywgY3VyX3JlbGlkKSkg Pj0gMCkKKwl7CisJCVJlbE9wdEluZm8gKmJhc2VyZWwgPSBmaW5kX2Jhc2VfcmVsX2lnbm9yZV9q b2luKHJvb3QsIGN1cl9yZWxpZCk7CisKKwkJaWYgKGJhc2VyZWwgPT0gTlVMTCkKKwkJCWNvbnRp bnVlOwkJCS8qIGlnbm9yZSBvdXRlciBqb2lucyBpbiByZWwtPnJlbGlkcyAqLworCisJCWlmICgh Ym1zX2lzX3N1YnNldChiYXNlcmVsLT5udWxsaW5nX3JlbGlkcywgcmVsLT5yZWxpZHMpKQorCQkJ cmV0dXJuIGZhbHNlOworCX0KKworCS8qCisJICogRm9yIG5vdyB3ZSBkb24ndCB0cnkgdG8gc3Vw cG9ydCBQbGFjZUhvbGRlclZhcnMuCisJICovCisJZm9yZWFjaChsYywgcmVsLT5yZWx0YXJnZXQt PmV4cHJzKQorCXsKKwkJRXhwcgkgICAqZXhwciA9IGxmaXJzdChsYyk7CisKKwkJaWYgKElzQShl eHByLCBQbGFjZUhvbGRlclZhcikpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogQ2FsbGVy IHNob3VsZCBvbmx5IHBhc3MgYmFzZSByZWxhdGlvbnMgb3Igam9pbnMuICovCisJQXNzZXJ0KHJl bC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCB8fAorCQkgICByZWwtPnJlbG9wdGtpbmQg PT0gUkVMT1BUX0pPSU5SRUwpOworCisJLyoKKwkgKiBDaGVjayBpZiBhbGwgYWdncmVnYXRlIGV4 cHJlc3Npb25zIGNhbiBiZSBldmFsdWF0ZWQgb24gdGhpcyByZWxhdGlvbgorCSAqIGxldmVsLgor CSAqLworCWZvcmVhY2gobGMsIHJvb3QtPmFnZ19jbGF1c2VfbGlzdCkKKwl7CisJCUFnZ0NsYXVz ZUluZm8gKmFjX2luZm8gPSBsZmlyc3Rfbm9kZShBZ2dDbGF1c2VJbmZvLCBsYyk7CisKKwkJQXNz ZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYsIEFnZ3JlZikpOworCisJCS8qCisJCSAqIEdpdmUgdXAg aWYgYW55IGFnZ3JlZ2F0ZSBuZWVkcyByZWxhdGlvbnMgb3RoZXIgdGhhbiB0aGUgY3VycmVudAor CQkgKiBvbmUuCisJCSAqCisJCSAqIElmIHRoZSBhZ2dyZWdhdGUgbmVlZHMgdGhlIGN1cnJlbnQg cmVsIHBsdXMgYW55dGhpbmcgZWxzZSwgZ3JvdXBpbmcKKwkJICogdGhlIGN1cnJlbnQgcmVsIGNv dWxkIG1ha2Ugc29tZSBpbnB1dCB2YXJpYWJsZXMgdW5hdmFpbGFibGUgZm9yIHRoZQorCQkgKiBo aWdoZXIgYWdncmVnYXRlIGFuZCBhbHNvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGlucHV0IHJvd3Mg aXQKKwkJICogcmVjZWl2ZXMuCisJCSAqCisJCSAqIElmIHRoZSBhZ2dyZWdhdGUgZG9lcyBub3Qg bmVlZCB0aGUgY3VycmVudCByZWwgYXQgYWxsLCB0aGVuIHRoZQorCQkgKiBjdXJyZW50IHJlbCBz aG91bGQgbm90IGJlIGdyb3VwZWQsIGFzIHdlIGRvIG5vdCBzdXBwb3J0IGpvaW5pbmcgdHdvCisJ CSAqIGdyb3VwZWQgcmVsYXRpb25zLgorCQkgKi8KKwkJaWYgKCFibXNfaXNfc3Vic2V0KGFjX2lu Zm8tPmFnZ19ldmFsX2F0LCByZWwtPnJlbGlkcykpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ cmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBpbml0X2dyb3VwaW5nX3RhcmdldHMKKyAqCSAgSW5p dGlhbGl6ZSB0aGUgdGFyZ2V0IGZvciBncm91cGVkIHBhdGhzICh0YXJnZXQpIGFzIHdlbGwgYXMg dGhlIHRhcmdldAorICoJICBmb3IgcGF0aHMgdGhhdCBnZW5lcmF0ZSBpbnB1dCBmb3IgdGhlIGdy b3VwZWQgcGF0aHMgKGFnZ19pbnB1dCkuCisgKgorICogV2UgYWxzbyBjb25zdHJ1Y3QgdGhlIGxp c3Qgb2YgU29ydEdyb3VwQ2xhdXNlcyBhbmQgdGhlIGxpc3Qgb2YgZ3JvdXBpbmcKKyAqIGV4cHJl c3Npb25zIGZvciB0aGUgcGFydGlhbCBhZ2dyZWdhdGlvbiwgYW5kIHJldHVybiB0aGVtIGluICpn cm91cF9jbGF1c2UKKyAqIGFuZCAqZ3JvdXBfZXhwcnMuCisgKgorICogUmV0dXJuIHRydWUgaWYg dGhlIHRhcmdldHMgY291bGQgYmUgaW5pdGlhbGl6ZWQsIGZhbHNlIG90aGVyd2lzZS4KKyAqLwor c3RhdGljIGJvb2wKK2luaXRfZ3JvdXBpbmdfdGFyZ2V0cyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAorCQkJCQkgIFBhdGhUYXJnZXQgKnRhcmdldCwgUGF0aFRhcmdldCAqYWdn X2lucHV0LAorCQkJCQkgIExpc3QgKipncm91cF9jbGF1c2VzLCBMaXN0ICoqZ3JvdXBfZXhwcnMp Cit7CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqcG9zc2libHlfZGVwZW5kZW50ID0gTklM OworCUluZGV4CQltYXhTb3J0R3JvdXBSZWY7CisKKwkvKiBJZGVudGlmeSB0aGUgbWF4IHNvcnRn cm91cHJlZiAqLworCW1heFNvcnRHcm91cFJlZiA9IDA7CisJZm9yZWFjaChsYywgcm9vdC0+cHJv Y2Vzc2VkX3RsaXN0KQorCXsKKwkJSW5kZXgJCXJlZiA9ICgoVGFyZ2V0RW50cnkgKikgbGZpcnN0 KGxjKSktPnJlc3NvcnRncm91cHJlZjsKKworCQlpZiAocmVmID4gbWF4U29ydEdyb3VwUmVmKQor CQkJbWF4U29ydEdyb3VwUmVmID0gcmVmOworCX0KKworCWZvcmVhY2gobGMsIHJlbC0+cmVsdGFy Z2V0LT5leHBycykKKwl7CisJCUV4cHIJICAgKmV4cHIgPSAoRXhwciAqKSBsZmlyc3QobGMpOwor CQlJbmRleAkJc29ydGdyb3VwcmVmOworCisJCS8qCisJCSAqIEdpdmVuIHRoYXQgUGxhY2VIb2xk ZXJWYXIgY3VycmVudGx5IHByZXZlbnRzIHVzIGZyb20gZG9pbmcgZWFnZXIKKwkJICogYWdncmVn YXRpb24sIHRoZSBzb3VyY2UgdGFyZ2V0IGNhbm5vdCBjb250YWluIGFueXRoaW5nIG1vcmUgY29t cGxleAorCQkgKiB0aGFuIGEgVmFyLgorCQkgKi8KKwkJQXNzZXJ0KElzQShleHByLCBWYXIpKTsK KworCQkvKiBHZXQgdGhlIHNvcnRncm91cHJlZiBpZiB0aGUgZXhwciBjYW4gYWN0IGFzIGdyb3Vw aW5nIGV4cHJlc3Npb24uICovCisJCXNvcnRncm91cHJlZiA9IGdldF9leHByZXNzaW9uX3NvcnRn cm91cHJlZihyb290LCBleHByKTsKKwkJaWYgKHNvcnRncm91cHJlZiA+IDApCisJCXsKKwkJCVNv cnRHcm91cENsYXVzZSAqc2djOworCisJCQkvKiBGaW5kIHRoZSBtYXRjaGluZyBTb3J0R3JvdXBD bGF1c2UgKi8KKwkJCXNnYyA9IGdldF9zb3J0Z3JvdXByZWZfY2xhdXNlKHNvcnRncm91cHJlZiwg cm9vdC0+cHJvY2Vzc2VkX2dyb3VwQ2xhdXNlKTsKKwkJCUFzc2VydChzZ2MtPnRsZVNvcnRHcm91 cFJlZiA8PSBtYXhTb3J0R3JvdXBSZWYpOworCisJCQkvKgorCQkJICogSWYgdGhlIHRhcmdldCBl eHByZXNzaW9uIGNhbiBiZSB1c2VkIGFzIGEgZ3JvdXBpbmcga2V5LCBpdAorCQkJICogc2hvdWxk IGJlIGVtaXR0ZWQgYnkgdGhlIGdyb3VwZWQgcGF0aHMgdGhhdCBoYXZlIGJlZW4gcHVzaGVkCisJ CQkgKiBkb3duIHRvIHRoaXMgcmVsYXRpb24gbGV2ZWwuCisJCQkgKi8KKwkJCWFkZF9jb2x1bW5f dG9fcGF0aHRhcmdldCh0YXJnZXQsIGV4cHIsIHNvcnRncm91cHJlZik7CisKKwkJCS8qCisJCQkg KiAuLi4gYW5kIGl0IGFsc28gc2hvdWxkIGJlIGVtaXR0ZWQgYnkgdGhlIGlucHV0IHBhdGhzLgor CQkJICovCisJCQlhZGRfY29sdW1uX3RvX3BhdGh0YXJnZXQoYWdnX2lucHV0LCBleHByLCBzb3J0 Z3JvdXByZWYpOworCisJCQkvKgorCQkJICogUmVjb3JkIHRoaXMgU29ydEdyb3VwQ2xhdXNlIGFu ZCBncm91cGluZyBleHByZXNzaW9uLiAgTm90ZSB0aGF0CisJCQkgKiB0aGlzIFNvcnRHcm91cENs YXVzZSBtaWdodCBoYXZlIGFscmVhZHkgYmVlbiByZWNvcmRlZC4KKwkJCSAqLworCQkJaWYgKCFs aXN0X21lbWJlcigqZ3JvdXBfY2xhdXNlcywgc2djKSkKKwkJCXsKKwkJCQkqZ3JvdXBfY2xhdXNl cyA9IGxhcHBlbmQoKmdyb3VwX2NsYXVzZXMsIHNnYyk7CisJCQkJKmdyb3VwX2V4cHJzID0gbGFw cGVuZCgqZ3JvdXBfZXhwcnMsIGV4cHIpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKGlzX3Zhcl9u ZWVkZWRfYnlfam9pbihyb290LCAoVmFyICopIGV4cHIsIHJlbCkpCisJCXsKKwkJCS8qCisJCQkg KiBUaGUgZXhwcmVzc2lvbiBpcyBuZWVkZWQgZm9yIGFuIHVwcGVyIGpvaW4gYnV0IGlzIG5laXRo ZXIgaW4KKwkJCSAqIHRoZSBHUk9VUCBCWSBjbGF1c2Ugbm9yIGRlcml2YWJsZSBmcm9tIGl0IHVz aW5nIEVDIChvdGhlcndpc2UsCisJCQkgKiBpdCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBpbmNs dWRlZCBpbiB0aGUgdGFyZ2V0cyBhYm92ZSkuICBXZQorCQkJICogbmVlZCB0byBjcmVhdGUgYSBz cGVjaWFsIFNvcnRHcm91cENsYXVzZSBmb3IgdGhpcyBleHByZXNzaW9uLgorCQkJICoKKwkJCSAq IEl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlIHN1Y2ggZXhwcmVzc2lvbnMgaW4gdGhlIGdyb3Vw aW5nCisJCQkgKiBrZXlzLiAgVGhpcyBpcyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoYXQgYW4gYWdn cmVnYXRlZCByb3cgZnJvbQorCQkJICogdGhlIHBhcnRpYWwgYWdncmVnYXRpb24gbWF0Y2hlcyB0 aGUgb3RoZXIgc2lkZSBvZiB0aGUgam9pbiBpZgorCQkJICogYW5kIG9ubHkgaWYgZWFjaCByb3cg aW4gdGhlIHBhcnRpYWwgZ3JvdXAgZG9lcy4gIFRoaXMgZW5zdXJlcworCQkJICogdGhhdCBhbGwg cm93cyB3aXRoaW4gdGhlIHNhbWUgcGFydGlhbCBncm91cCBzaGFyZSB0aGUgc2FtZQorCQkJICog J2Rlc3RpbnknLCB3aGljaCBpcyBjcnVjaWFsIGZvciBtYWludGFpbmluZyBjb3JyZWN0bmVzcy4K KwkJCSAqLworCQkJU29ydEdyb3VwQ2xhdXNlICpzZ2M7CisJCQlUeXBlQ2FjaGVFbnRyeSAqdGNl OworCQkJT2lkCQkJZXF1YWxpbWFnZXByb2M7CisKKwkJCS8qCisJCQkgKiBCdXQgZmlyc3QsIGNo ZWNrIGlmIGVxdWFsaXR5IGltcGxpZXMgaW1hZ2UgZXF1YWxpdHkgZm9yIHRoaXMKKwkJCSAqIGV4 cHJlc3Npb24uICBJZiBub3QsIHdlIGNhbm5vdCB1c2UgaXQgYXMgYSBncm91cGluZyBrZXkuICBT ZWUKKwkJCSAqIGNvbW1lbnRzIGluIGNyZWF0ZV9ncm91cGluZ19leHByX2luZm9zKCkuCisJCQkg Ki8KKwkJCXRjZSA9IGxvb2t1cF90eXBlX2NhY2hlKGV4cHJUeXBlKChOb2RlICopIGV4cHIpLAor CQkJCQkJCQkJVFlQRUNBQ0hFX0JUUkVFX09QRkFNSUxZKTsKKwkJCWlmICghT2lkSXNWYWxpZCh0 Y2UtPmJ0cmVlX29wZikgfHwKKwkJCQkhT2lkSXNWYWxpZCh0Y2UtPmJ0cmVlX29waW50eXBlKSkK KwkJCQlyZXR1cm4gZmFsc2U7CisKKwkJCWVxdWFsaW1hZ2Vwcm9jID0gZ2V0X29wZmFtaWx5X3By b2ModGNlLT5idHJlZV9vcGYsCisJCQkJCQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5cGUsCisJ CQkJCQkJCQkJCSAgIHRjZS0+YnRyZWVfb3BpbnR5cGUsCisJCQkJCQkJCQkJCSAgIEJURVFVQUxJ TUFHRV9QUk9DKTsKKwkJCWlmICghT2lkSXNWYWxpZChlcXVhbGltYWdlcHJvYykgfHwKKwkJCQkh RGF0dW1HZXRCb29sKE9pZEZ1bmN0aW9uQ2FsbDFDb2xsKGVxdWFsaW1hZ2Vwcm9jLAorCQkJCQkJ CQkJCQkJICAgdGNlLT50eXBjb2xsYXRpb24sCisJCQkJCQkJCQkJCQkgICBPYmplY3RJZEdldERh dHVtKHRjZS0+YnRyZWVfb3BpbnR5cGUpKSkpCisJCQkJcmV0dXJuIGZhbHNlOworCisJCQkvKiBD cmVhdGUgdGhlIFNvcnRHcm91cENsYXVzZS4gKi8KKwkJCXNnYyA9IG1ha2VOb2RlKFNvcnRHcm91 cENsYXVzZSk7CisKKwkJCS8qIEluaXRpYWxpemUgdGhlIFNvcnRHcm91cENsYXVzZS4gKi8KKwkJ CXNnYy0+dGxlU29ydEdyb3VwUmVmID0gKyttYXhTb3J0R3JvdXBSZWY7CisJCQlnZXRfc29ydF9n cm91cF9vcGVyYXRvcnMoZXhwclR5cGUoKE5vZGUgKikgZXhwciksCisJCQkJCQkJCQkgZmFsc2Us IHRydWUsIGZhbHNlLAorCQkJCQkJCQkJICZzZ2MtPnNvcnRvcCwgJnNnYy0+ZXFvcCwgTlVMTCwK KwkJCQkJCQkJCSAmc2djLT5oYXNoYWJsZSk7CisKKwkJCS8qIFRoaXMgZXhwcmVzc2lvbiBzaG91 bGQgYmUgZW1pdHRlZCBieSB0aGUgZ3JvdXBlZCBwYXRocyAqLworCQkJYWRkX2NvbHVtbl90b19w YXRodGFyZ2V0KHRhcmdldCwgZXhwciwgc2djLT50bGVTb3J0R3JvdXBSZWYpOworCisJCQkvKiAu Li4gYW5kIGl0IGFsc28gc2hvdWxkIGJlIGVtaXR0ZWQgYnkgdGhlIGlucHV0IHBhdGhzLiAqLwor CQkJYWRkX2NvbHVtbl90b19wYXRodGFyZ2V0KGFnZ19pbnB1dCwgZXhwciwgc2djLT50bGVTb3J0 R3JvdXBSZWYpOworCisJCQkvKiBSZWNvcmQgdGhpcyBTb3J0R3JvdXBDbGF1c2UgYW5kIGdyb3Vw aW5nIGV4cHJlc3Npb24gKi8KKwkJCSpncm91cF9jbGF1c2VzID0gbGFwcGVuZCgqZ3JvdXBfY2xh dXNlcywgc2djKTsKKwkJCSpncm91cF9leHBycyA9IGxhcHBlbmQoKmdyb3VwX2V4cHJzLCBleHBy KTsKKwkJfQorCQllbHNlIGlmIChpc192YXJfaW5fYWdncmVmX29ubHkocm9vdCwgKFZhciAqKSBl eHByKSkKKwkJeworCQkJLyoKKwkJCSAqIFRoZSBleHByZXNzaW9uIGlzIHJlZmVyZW5jZWQgYnkg YW4gYWdncmVnYXRlIGZ1bmN0aW9uIHB1c2hlZAorCQkJICogZG93biB0byB0aGlzIHJlbGF0aW9u IGFuZCBkb2VzIG5vdCBhcHBlYXIgZWxzZXdoZXJlIGluIHRoZQorCQkJICogdGFyZ2V0bGlzdCBv ciBoYXZpbmdRdWFsLiAgQWRkIGl0IHRvICdhZ2dfaW5wdXQnIGJ1dCBub3QgdG8KKwkJCSAqICd0 YXJnZXQnLgorCQkJICovCisJCQlhZGRfbmV3X2NvbHVtbl90b19wYXRodGFyZ2V0KGFnZ19pbnB1 dCwgZXhwcik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICogVGhlIGV4cHJlc3Npb24g bWF5IGJlIGZ1bmN0aW9uYWxseSBkZXBlbmRlbnQgb24gb3RoZXIKKwkJCSAqIGV4cHJlc3Npb25z IGluIHRoZSB0YXJnZXQsIGJ1dCB3ZSBjYW5ub3QgdmVyaWZ5IHRoaXMgdW50aWwgYWxsCisJCQkg KiB0YXJnZXQgZXhwcmVzc2lvbnMgaGF2ZSBiZWVuIGNvbnN0cnVjdGVkLgorCQkJICovCisJCQlw b3NzaWJseV9kZXBlbmRlbnQgPSBsYXBwZW5kKHBvc3NpYmx5X2RlcGVuZGVudCwgZXhwcik7CisJ CX0KKwl9CisKKwkvKgorCSAqIE5vdyB3ZSBjYW4gdmVyaWZ5IHdoZXRoZXIgYW4gZXhwcmVzc2lv biBpcyBmdW5jdGlvbmFsbHkgZGVwZW5kZW50IG9uCisJICogb3RoZXJzLgorCSAqLworCWZvcmVh Y2gobGMsIHBvc3NpYmx5X2RlcGVuZGVudCkKKwl7CisJCVZhcgkJICAgKnR2YXI7CisJCUxpc3QJ ICAgKmRlcHMgPSBOSUw7CisJCVJhbmdlVGJsRW50cnkgKnJ0ZTsKKworCQl0dmFyID0gbGZpcnN0 X25vZGUoVmFyLCBsYyk7CisJCXJ0ZSA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbdHZhci0+dmFy bm9dOworCisJCWlmIChjaGVja19mdW5jdGlvbmFsX2dyb3VwaW5nKHJ0ZS0+cmVsaWQsIHR2YXIt PnZhcm5vLAorCQkJCQkJCQkJICB0dmFyLT52YXJsZXZlbHN1cCwKKwkJCQkJCQkJCSAgdGFyZ2V0 LT5leHBycywgJmRlcHMpKQorCQl7CisJCQkvKgorCQkJICogVGhlIGV4cHJlc3Npb24gaXMgZnVu Y3Rpb25hbGx5IGRlcGVuZGVudCBvbiBvdGhlciB0YXJnZXQKKwkJCSAqIGV4cHJlc3Npb25zLCBz byBpdCBjYW4gYmUgaW5jbHVkZWQgaW4gdGhlIHRhcmdldHMuICBTaW5jZSBpdAorCQkJICogd2ls bCBub3QgYmUgdXNlZCBhcyBhIGdyb3VwaW5nIGtleSwgYSBzb3J0Z3JvdXByZWYgaXMgbm90CisJ CQkgKiBuZWVkZWQgZm9yIGl0LgorCQkJICovCisJCQlhZGRfbmV3X2NvbHVtbl90b19wYXRodGFy Z2V0KHRhcmdldCwgKEV4cHIgKikgdHZhcik7CisJCQlhZGRfbmV3X2NvbHVtbl90b19wYXRodGFy Z2V0KGFnZ19pbnB1dCwgKEV4cHIgKikgdHZhcik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgor CQkJICogV2UgbWF5IGFycml2ZSBoZXJlIHdpdGggYSBncm91cGluZyBleHByZXNzaW9uIHRoYXQg aXMgcHJvdmVuCisJCQkgKiByZWR1bmRhbnQgYnkgRXF1aXZhbGVuY2VDbGFzcyBwcm9jZXNzaW5n LCBzdWNoIGFzICd0MS5hJyBpbiB0aGUKKwkJCSAqIHF1ZXJ5IGJlbG93LgorCQkJICoKKwkJCSAq IHNlbGVjdCBtYXgodDEuYykgZnJvbSB0IHQxLCB0IHQyIHdoZXJlIHQxLmEgPSAxIGdyb3VwIGJ5 IHQxLmEsCisJCQkgKiB0MS5iOworCQkJICoKKwkJCSAqIEZvciBub3cgd2UganVzdCBnaXZlIHVw IGluIHRoaXMgY2FzZS4KKwkJCSAqLworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCisJcmV0 dXJuIHRydWU7Cit9CisKKy8qCisgKiBpc192YXJfaW5fYWdncmVmX29ubHkKKyAqCSAgQ2hlY2sg d2hldGhlciB0aGUgZ2l2ZW4gVmFyIGFwcGVhcnMgaW4gYWdncmVnYXRlIGV4cHJlc3Npb25zIGFu ZCBub3QKKyAqCSAgZWxzZXdoZXJlIGluIHRoZSB0YXJnZXRsaXN0IG9yIGhhdmluZ1F1YWwuCisg Ki8KK3N0YXRpYyBib29sCitpc192YXJfaW5fYWdncmVmX29ubHkoUGxhbm5lckluZm8gKnJvb3Qs IFZhciAqdmFyKQoreworCUxpc3RDZWxsICAgKmxjOworCisJLyoKKwkgKiBTZWFyY2ggdGhlIGxp c3Qgb2YgYWdncmVnYXRlIGV4cHJlc3Npb25zIGZvciB0aGUgVmFyLgorCSAqLworCWZvcmVhY2go bGMsIHJvb3QtPmFnZ19jbGF1c2VfbGlzdCkKKwl7CisJCUFnZ0NsYXVzZUluZm8gKmFjX2luZm8g PSBsZmlyc3Rfbm9kZShBZ2dDbGF1c2VJbmZvLCBsYyk7CisJCUxpc3QJICAgKnZhcnM7CisKKwkJ QXNzZXJ0KElzQShhY19pbmZvLT5hZ2dyZWYsIEFnZ3JlZikpOworCisJCWlmICghYm1zX2lzX21l bWJlcih2YXItPnZhcm5vLCBhY19pbmZvLT5hZ2dfZXZhbF9hdCkpCisJCQljb250aW51ZTsKKwor CQl2YXJzID0gcHVsbF92YXJfY2xhdXNlKChOb2RlICopIGFjX2luZm8tPmFnZ3JlZiwKKwkJCQkJ CQkgICBQVkNfUkVDVVJTRV9BR0dSRUdBVEVTIHwKKwkJCQkJCQkgICBQVkNfUkVDVVJTRV9XSU5E T1dGVU5DUyB8CisJCQkJCQkJICAgUFZDX1JFQ1VSU0VfUExBQ0VIT0xERVJTKTsKKworCQlpZiAo bGlzdF9tZW1iZXIodmFycywgdmFyKSkKKwkJeworCQkJbGlzdF9mcmVlKHZhcnMpOworCQkJYnJl YWs7CisJCX0KKworCQlsaXN0X2ZyZWUodmFycyk7CisJfQorCisJcmV0dXJuIChsYyAhPSBOVUxM ICYmICFsaXN0X21lbWJlcihyb290LT50bGlzdF92YXJzLCB2YXIpKTsKK30KKworLyoKKyAqIGlz X3Zhcl9uZWVkZWRfYnlfam9pbgorICoJICBDaGVjayBpZiB0aGUgZ2l2ZW4gVmFyIGlzIG5lZWRl ZCBieSBqb2lucyBhYm92ZSB0aGUgY3VycmVudCByZWwuCisgKi8KK3N0YXRpYyBib29sCitpc192 YXJfbmVlZGVkX2J5X2pvaW4oUGxhbm5lckluZm8gKnJvb3QsIFZhciAqdmFyLCBSZWxPcHRJbmZv ICpyZWwpCit7CisJUmVsaWRzCQlyZWxpZHM7CisJaW50CQkJYXR0bm87CisJUmVsT3B0SW5mbyAq YmFzZXJlbDsKKworCS8qCisJICogTm90ZSB0aGF0IHdoZW4gY2hlY2tpbmcgaWYgdGhlIFZhciBp cyBuZWVkZWQgYnkgam9pbnMgYWJvdmUsIHdlIHdhbnQgdG8KKwkgKiBleGNsdWRlIGNhc2VzIHdo ZXJlIHRoZSBWYXIgaXMgb25seSBuZWVkZWQgaW4gdGhlIGZpbmFsIG91dHB1dC4gIFNvCisJICog aW5jbHVkZSAicmVsYXRpb24gMCIgaW4gdGhlIGNoZWNrLgorCSAqLworCXJlbGlkcyA9IGJtc19j b3B5KHJlbC0+cmVsaWRzKTsKKwlyZWxpZHMgPSBibXNfYWRkX21lbWJlcihyZWxpZHMsIDApOwor CisJYmFzZXJlbCA9IGZpbmRfYmFzZV9yZWwocm9vdCwgdmFyLT52YXJubyk7CisJYXR0bm8gPSB2 YXItPnZhcmF0dG5vIC0gYmFzZXJlbC0+bWluX2F0dHI7CisKKwlyZXR1cm4gYm1zX25vbmVtcHR5 X2RpZmZlcmVuY2UoYmFzZXJlbC0+YXR0cl9uZWVkZWRbYXR0bm9dLCByZWxpZHMpOworfQorCisv KgorICogZ2V0X2V4cHJlc3Npb25fc29ydGdyb3VwcmVmCisgKgkgIFJldHVybiBzb3J0Z3JvdXBy ZWYgaWYgdGhlIGdpdmVuICdleHByJyBjYW4gYmUgdXNlZCBhcyBhIGdyb3VwaW5nIGtleSBpbgor ICoJICBncm91cGVkIHBhdGhzIGZvciBiYXNlIG9yIGpvaW4gcmVsYXRpb25zLCBvciAwIG90aGVy d2lzZS4KKyAqCisgKiBXZSBmaXJzdCBjaGVjayBpZiAnZXhwcicgaXMgYW1vbmcgdGhlIGdyb3Vw aW5nIGV4cHJlc3Npb25zLiAgSWYgaXQgaXMgbm90LAorICogd2UgdGhlbiBjaGVjayBpZiAnZXhw cicgaXMga25vd24gZXF1YWwgdG8gYW55IG9mIHRoZSBncm91cGluZyBleHByZXNzaW9ucworICog ZHVlIHRvIGVxdWl2YWxlbmNlIHJlbGF0aW9uc2hpcHMuCisgKi8KK3N0YXRpYyBJbmRleAorZ2V0 X2V4cHJlc3Npb25fc29ydGdyb3VwcmVmKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByKQor eworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgcm9vdC0+Z3JvdXBfZXhwcl9saXN0 KQorCXsKKwkJR3JvdXBFeHBySW5mbyAqZ2VfaW5mbyA9IGxmaXJzdF9ub2RlKEdyb3VwRXhwcklu Zm8sIGxjKTsKKworCQlBc3NlcnQoSXNBKGdlX2luZm8tPmV4cHIsIFZhcikpOworCisJCWlmIChl cXVhbChnZV9pbmZvLT5leHByLCBleHByKSB8fAorCQkJZXhwcnNfa25vd25fZXF1YWwocm9vdCwg KE5vZGUgKikgZXhwciwgKE5vZGUgKikgZ2VfaW5mby0+ZXhwciwKKwkJCQkJCQkgIGdlX2luZm8t PmJ0cmVlX29wZmFtaWx5KSkKKwkJeworCQkJQXNzZXJ0KGdlX2luZm8tPnNvcnRncm91cHJlZiA+ IDApOworCisJCQlyZXR1cm4gZ2VfaW5mby0+c29ydGdyb3VwcmVmOworCQl9CisJfQorCisJLyog VGhlIGV4cHJlc3Npb24gY2Fubm90IGJlIHVzZWQgYXMgYSBncm91cGluZyBrZXkuICovCisJcmV0 dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IDhjZjFhZmJhZDIu Ljk1YmQ4MGM0ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxl cy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC05MjksNiAr OTI5LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCWZh bHNlLAogCQlOVUxMLCBOVUxMLCBOVUxMCiAJfSwKKwl7CisJCXsiZW5hYmxlX2VhZ2VyX2FnZ3Jl Z2F0ZSIsIFBHQ19VU0VSU0VULCBRVUVSWV9UVU5JTkdfTUVUSE9ELAorCQkJZ2V0dGV4dF9ub29w KCJFbmFibGVzIGVhZ2VyIGFnZ3JlZ2F0aW9uLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19FWFBMQUlO CisJCX0sCisJCSZlbmFibGVfZWFnZXJfYWdncmVnYXRlLAorCQlmYWxzZSwKKwkJTlVMTCwgTlVM TCwgTlVMTAorCX0sCiAJewogCQl7ImVuYWJsZV9wYXJhbGxlbF9hcHBlbmQiLCBQR0NfVVNFUlNF VCwgUVVFUllfVFVOSU5HX01FVEhPRCwKIAkJCWdldHRleHRfbm9vcCgiRW5hYmxlcyB0aGUgcGxh bm5lcidzIHVzZSBvZiBwYXJhbGxlbCBhcHBlbmQgcGxhbnMuIiksCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91 dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKaW5kZXggYTJhYzc1NzVjYS4uMTU0ZmM1 YjFmYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYu c2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZQpAQCAtNDE2LDYgKzQxNiw3IEBACiAjZW5hYmxlX3RpZHNjYW4gPSBvbgogI2VuYWJsZV9ncm91 cF9ieV9yZW9yZGVyaW5nID0gb24KICNlbmFibGVfZGlzdGluY3RfcmVvcmRlcmluZyA9IG9uCisj ZW5hYmxlX2VhZ2VyX2FnZ3JlZ2F0ZSA9IG9mZgogCiAjIC0gUGxhbm5lciBDb3N0IENvbnN0YW50 cyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNTg3NDhkMmNhNi4uMGIyYzUxZjczZSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvcGF0aG5vZGVzLmgKQEAgLTgwLDYgKzgwLDI1IEBAIHR5cGVkZWYgZW51bSBVcHBlclJl bGF0aW9uS2luZAogCS8qIE5COiBVUFBFUlJFTF9GSU5BTCBtdXN0IGJlIGxhc3QgZW51bSBlbnRy eTsgaXQncyB1c2VkIHRvIHNpemUgYXJyYXlzICovCiB9IFVwcGVyUmVsYXRpb25LaW5kOwogCisv KgorICogQSBzdHJ1Y3R1cmUgY29uc2lzdGluZyBvZiBhIGxpc3QgYW5kIGEgaGFzaCB0YWJsZSB0 byBzdG9yZSByZWxhdGlvbnMuCisgKgorICogRm9yIHNtYWxsIHByb2JsZW1zIHdlIGp1c3Qgc2Nh biB0aGUgbGlzdCB0byBkbyBsb29rdXBzLCBidXQgd2hlbiB0aGVyZSBhcmUKKyAqIG1hbnkgcmVs YXRpb25zIHdlIGJ1aWxkIGEgaGFzaCB0YWJsZSBmb3IgZmFzdGVyIGxvb2t1cHMuICBUaGUgaGFz aCB0YWJsZSBpcworICogcHJlc2VudCBhbmQgdmFsaWQgd2hlbiAnaGFzaCcgaXMgbm90IE5VTEwu ICBOb3RlIHRoYXQgd2Ugc3RpbGwgbWFpbnRhaW4gdGhlCisgKiBsaXN0IGV2ZW4gd2hlbiB1c2lu ZyB0aGUgaGFzaCB0YWJsZSBmb3IgbG9va3VwczsgdGhpcyBzaW1wbGlmaWVzIGxpZmUgZm9yCisg KiBHRVFPLgorICovCit0eXBlZGVmIHN0cnVjdCBSZWxJbmZvTGlzdAoreworCXBnX25vZGVfYXR0 cihub19jb3B5X2VxdWFsLCBub19yZWFkKQorCisJTm9kZVRhZwkJdHlwZTsKKworCUxpc3QJICAg Kml0ZW1zOworCXN0cnVjdCBIVEFCICpoYXNoIHBnX25vZGVfYXR0cihyZWFkX3dyaXRlX2lnbm9y ZSk7Cit9IFJlbEluZm9MaXN0OworCiAvKi0tLS0tLS0tLS0KICAqIFBsYW5uZXJHbG9iYWwKICAq CQlHbG9iYWwgaW5mb3JtYXRpb24gZm9yIHBsYW5uaW5nL29wdGltaXphdGlvbgpAQCAtMjcwLDE1 ICsyODksMTYgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAKIAkvKgogCSAqIGpvaW5fcmVsX2xpc3Qg aXMgYSBsaXN0IG9mIGFsbCBqb2luLXJlbGF0aW9uIFJlbE9wdEluZm9zIHdlIGhhdmUKLQkgKiBj b25zaWRlcmVkIGluIHRoaXMgcGxhbm5pbmcgcnVuLiAgRm9yIHNtYWxsIHByb2JsZW1zIHdlIGp1 c3Qgc2NhbiB0aGUKLQkgKiBsaXN0IHRvIGRvIGxvb2t1cHMsIGJ1dCB3aGVuIHRoZXJlIGFyZSBt YW55IGpvaW4gcmVsYXRpb25zIHdlIGJ1aWxkIGEKLQkgKiBoYXNoIHRhYmxlIGZvciBmYXN0ZXIg bG9va3Vwcy4gIFRoZSBoYXNoIHRhYmxlIGlzIHByZXNlbnQgYW5kIHZhbGlkCi0JICogd2hlbiBq b2luX3JlbF9oYXNoIGlzIG5vdCBOVUxMLiAgTm90ZSB0aGF0IHdlIHN0aWxsIG1haW50YWluIHRo ZSBsaXN0Ci0JICogZXZlbiB3aGVuIHVzaW5nIHRoZSBoYXNoIHRhYmxlIGZvciBsb29rdXBzOyB0 aGlzIHNpbXBsaWZpZXMgbGlmZSBmb3IKLQkgKiBHRVFPLgorCSAqIGNvbnNpZGVyZWQgaW4gdGhp cyBwbGFubmluZyBydW4uCiAJICovCi0JTGlzdAkgICAqam9pbl9yZWxfbGlzdDsKLQlzdHJ1Y3Qg SFRBQiAqam9pbl9yZWxfaGFzaCBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOworCVJl bEluZm9MaXN0ICpqb2luX3JlbF9saXN0OyAvKiBsaXN0IG9mIGpvaW4tcmVsYXRpb24gUmVsT3B0 SW5mb3MgKi8KKworCS8qCisJICogZ3JvdXBlZF9yZWxfbGlzdCBpcyBhIGxpc3Qgb2YgYWxsIGdy b3VwZWQtcmVsYXRpb24gUmVsT3B0SW5mb3Mgd2UgaGF2ZQorCSAqIGNvbnNpZGVyZWQgaW4gdGhp cyBwbGFubmluZyBydW4uICBUaGlzIGlzIG9ubHkgdXNlZCBieSBlYWdlcgorCSAqIGFnZ3JlZ2F0 aW9uLgorCSAqLworCVJlbEluZm9MaXN0ICpncm91cGVkX3JlbF9saXN0OwkvKiBsaXN0IG9mIGdy b3VwZWQtcmVsYXRpb24gUmVsT3B0SW5mb3MgKi8KIAogCS8qCiAJICogV2hlbiBkb2luZyBhIGR5 bmFtaWMtcHJvZ3JhbW1pbmctc3R5bGUgam9pbiBzZWFyY2gsIGpvaW5fcmVsX2xldmVsW2tdCkBA IC0zNzMsNiArMzkzLDE1IEBAIHN0cnVjdCBQbGFubmVySW5mbwogCS8qIGxpc3Qgb2YgUGxhY2VI b2xkZXJJbmZvcyAqLwogCUxpc3QJICAgKnBsYWNlaG9sZGVyX2xpc3Q7CiAKKwkvKiBsaXN0IG9m IEFnZ0NsYXVzZUluZm9zICovCisJTGlzdAkgICAqYWdnX2NsYXVzZV9saXN0OworCisJLyogbGlz dCBvZiBHcm91cEV4cHJJbmZvcyAqLworCUxpc3QJICAgKmdyb3VwX2V4cHJfbGlzdDsKKworCS8q IGxpc3Qgb2YgcGxhaW4gVmFycyBjb250YWluZWQgaW4gdGFyZ2V0bGlzdCBhbmQgaGF2aW5nUXVh bCAqLworCUxpc3QJICAgKnRsaXN0X3ZhcnM7CisKIAkvKiBhcnJheSBvZiBQbGFjZUhvbGRlcklu Zm9zIGluZGV4ZWQgYnkgcGhpZCAqLwogCXN0cnVjdCBQbGFjZUhvbGRlckluZm8gKipwbGFjZWhv bGRlcl9hcnJheSBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUsIGFycmF5X3NpemUocGxh Y2Vob2xkZXJfYXJyYXlfc2l6ZSkpOwogCS8qIGFsbG9jYXRlZCBzaXplIG9mIGFycmF5ICovCkBA IC05OTgsNiArMTAyNywxMiBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJLyogY29uc2lk ZXIgcGFydGl0aW9ud2lzZSBqb2luIHBhdGhzPyAoaWYgcGFydGl0aW9uZWQgcmVsKSAqLwogCWJv b2wJCWNvbnNpZGVyX3BhcnRpdGlvbndpc2Vfam9pbjsKIAorCS8qCisJICogdXNlZCBieSBlYWdl ciBhZ2dyZWdhdGlvbjoKKwkgKi8KKwkvKiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY3JlYXRlIGdy b3VwZWQgcGF0aHMgKi8KKwlzdHJ1Y3QgUmVsQWdnSW5mbyAqYWdnX2luZm87CisKIAkvKgogCSAq IGluaGVyaXRhbmNlIGxpbmtzLCBpZiB0aGlzIGlzIGFuIG90aGVycmVsIChvdGhlcndpc2UgTlVM TCk6CiAJICovCkBAIC0xMDcxLDYgKzExMDYsNjggQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5m bwogCSgocmVsKS0+cGFydF9zY2hlbWUgJiYgKHJlbCktPmJvdW5kaW5mbyAmJiAocmVsKS0+bnBh cnRzID4gMCAmJiBcCiAJIChyZWwpLT5wYXJ0X3JlbHMgJiYgKHJlbCktPnBhcnRleHBycyAmJiAo cmVsKS0+bnVsbGFibGVfcGFydGV4cHJzKQogCisvKgorICogSXMgdGhlIGdpdmVuIHJlbGF0aW9u IGEgZ3JvdXBlZCByZWxhdGlvbj8KKyAqLworI2RlZmluZSBJU19HUk9VUEVEX1JFTChyZWwpIFwK KwkoKHJlbCktPmFnZ19pbmZvICE9IE5VTEwpCisKKy8qCisgKiBSZWxBZ2dJbmZvCisgKgkJSW5m b3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSBncm91cGVkIHBhdGhzIGZvciBiYXNlIGFuZCBqb2lu IHJlbHMuCisgKgorICogInJlbGlkcyIgaXMgdGhlIHNldCBvZiByZWxhdGlvbiBpZGVudGlmaWVy cyAoUlQgaW5kZXhlcykuCisgKgorICogInRhcmdldCIgaXMgdGhlIG91dHB1dCB0bGlzdCBmb3Ig dGhlIGdyb3VwZWQgcGF0aHMuCisgKgorICogImFnZ19pbnB1dCIgaXMgdGhlIG91dHB1dCB0bGlz dCBmb3IgdGhlIHBhdGhzIHRoYXQgcHJvdmlkZSBpbnB1dCB0byB0aGUKKyAqIGdyb3VwZWQgcGF0 aHMuICBPbmUgZGlmZmVyZW5jZSBmcm9tIHRoZSByZWx0YXJnZXQgb2YgdGhlIG5vbi1ncm91cGVk CisgKiByZWxhdGlvbiBpcyB0aGF0IGFnZ19pbnB1dCBoYXMgaXRzIHNvcnRncm91cHJlZnNbXSBp bml0aWFsaXplZC4KKyAqCisgKiAiZ3JvdXBlZF9yb3dzIiBpcyB0aGUgZXN0aW1hdGVkIG51bWJl ciBvZiByZXN1bHQgdHVwbGVzIG9mIHRoZSBncm91cGVkCisgKiByZWxhdGlvbi4KKyAqCisgKiAi Z3JvdXBfY2xhdXNlcyIsICJncm91cF9leHBycyIgYW5kICJncm91cF9wYXRoa2V5cyIgYXJlIGxp c3RzIG9mCisgKiBTb3J0R3JvdXBDbGF1c2VzLCB0aGUgY29ycmVzcG9uZGluZyBncm91cGluZyBl eHByZXNzaW9ucyBhbmQgUGF0aEtleXMKKyAqIHJlc3BlY3RpdmVseS4KKyAqCisgKiAiYWdnX3Vz ZWZ1bCIgaXMgYSBmbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGdyb3VwZWQgcGF0aHMgYXJl IGNvbnNpZGVyZWQKKyAqIHVzZWZ1bC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgUmVsQWdnSW5mbwor eworCXBnX25vZGVfYXR0cihub19jb3B5X2VxdWFsLCBub19yZWFkLCBub19xdWVyeV9qdW1ibGUp CisKKwlOb2RlVGFnCQl0eXBlOworCisJLyogc2V0IG9mIGJhc2UgKyBPSiByZWxpZHMgKHJhbmdl dGFibGUgaW5kZXhlcykgKi8KKwlSZWxpZHMJCXJlbGlkczsKKworCS8qCisJICogZGVmYXVsdCBy ZXN1bHQgdGFyZ2V0bGlzdCBmb3IgUGF0aHMgc2Nhbm5pbmcgdGhpcyBncm91cGVkIHJlbGF0aW9u OworCSAqIGxpc3Qgb2YgVmFycy9FeHBycywgY29zdCwgd2lkdGgKKwkgKi8KKwlzdHJ1Y3QgUGF0 aFRhcmdldCAqdGFyZ2V0OworCisJLyoKKwkgKiB0aGUgdGFyZ2V0bGlzdCBmb3IgUGF0aHMgdGhh dCBwcm92aWRlIGlucHV0IHRvIHRoZSBncm91cGVkIHBhdGhzCisJICovCisJc3RydWN0IFBhdGhU YXJnZXQgKmFnZ19pbnB1dDsKKworCS8qIGVzdGltYXRlZCBudW1iZXIgb2YgcmVzdWx0IHR1cGxl cyAqLworCUNhcmRpbmFsaXR5IGdyb3VwZWRfcm93czsKKworCS8qIGEgbGlzdCBvZiBTb3J0R3Jv dXBDbGF1c2VzICovCisJTGlzdAkgICAqZ3JvdXBfY2xhdXNlczsKKwkvKiBhIGxpc3Qgb2YgZ3Jv dXBpbmcgZXhwcmVzc2lvbnMgKi8KKwlMaXN0CSAgICpncm91cF9leHByczsKKwkvKiBhIGxpc3Qg b2YgUGF0aEtleXMgKi8KKwlMaXN0CSAgICpncm91cF9wYXRoa2V5czsKKworCS8qIHRoZSBncm91 cGVkIHBhdGhzIGFyZSBjb25zaWRlcmVkIHVzZWZ1bD8gKi8KKwlib29sCQlhZ2dfdXNlZnVsOwor fSBSZWxBZ2dJbmZvOworCiAvKgogICogSW5kZXhPcHRJbmZvCiAgKgkJUGVyLWluZGV4IGluZm9y bWF0aW9uIGZvciBwbGFubmluZy9vcHRpbWl6YXRpb24KQEAgLTMxNDQsNiArMzI0MSw0MSBAQCB0 eXBlZGVmIHN0cnVjdCBNaW5NYXhBZ2dJbmZvCiAJUGFyYW0JICAgKnBhcmFtOwogfSBNaW5NYXhB Z2dJbmZvOwogCisvKgorICogVGhlIGFnZ3JlZ2F0ZSBleHByZXNzaW9ucyB0aGF0IGFwcGVhciBp biB0YXJnZXRsaXN0IGFuZCBoYXZpbmcgY2xhdXNlcworICovCit0eXBlZGVmIHN0cnVjdCBBZ2dD bGF1c2VJbmZvCit7CisJcGdfbm9kZV9hdHRyKG5vX3JlYWQsIG5vX3F1ZXJ5X2p1bWJsZSkKKwor CU5vZGVUYWcJCXR5cGU7CisKKwkvKiB0aGUgQWdncmVmIGV4cHIgKi8KKwlBZ2dyZWYJICAgKmFn Z3JlZjsKKworCS8qIGxvd2VzdCBsZXZlbCB3ZSBjYW4gZXZhbHVhdGUgdGhpcyBhZ2dyZWdhdGUg YXQgKi8KKwlSZWxpZHMJCWFnZ19ldmFsX2F0OworfSBBZ2dDbGF1c2VJbmZvOworCisvKgorICog VGhlIGdyb3VwaW5nIGV4cHJlc3Npb25zIHRoYXQgYXBwZWFyIGluIGdyb3VwaW5nIGNsYXVzZXMK KyAqLwordHlwZWRlZiBzdHJ1Y3QgR3JvdXBFeHBySW5mbworeworCXBnX25vZGVfYXR0cihub19y ZWFkLCBub19xdWVyeV9qdW1ibGUpCisKKwlOb2RlVGFnCQl0eXBlOworCisJLyogdGhlIHJlcHJl c2VudGVkIGV4cHJlc3Npb24gKi8KKwlFeHByCSAgICpleHByOworCisJLyogdGhlIHRsZVNvcnRH cm91cFJlZiBvZiB0aGUgY29ycmVzcG9uZGluZyBTb3J0R3JvdXBDbGF1c2UgKi8KKwlJbmRleAkJ c29ydGdyb3VwcmVmOworCisJLyogYnRyZWUgb3BmYW1pbHkgZGVmaW5pbmcgdGhlIG9yZGVyaW5n ICovCisJT2lkCQkJYnRyZWVfb3BmYW1pbHk7Cit9IEdyb3VwRXhwckluZm87CisKIC8qCiAgKiBB dCBydW50aW1lLCBQQVJBTV9FWEVDIHNsb3RzIGFyZSB1c2VkIHRvIHBhc3MgdmFsdWVzIGFyb3Vu ZCBmcm9tIG9uZSBwbGFuCiAgKiBub2RlIHRvIGFub3RoZXIuICBUaGV5IGNhbiBiZSB1c2VkIHRv IHBhc3MgdmFsdWVzIGRvd24gaW50byBzdWJxdWVyaWVzIChmb3IKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmgKaW5kZXggNWE2ZDAzNTBjMS4uOGRkZTM3Y2JmZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhu b2RlLmgKQEAgLTMxMywxMCArMzEzLDE2IEBAIGV4dGVybiB2b2lkIHNldHVwX3NpbXBsZV9yZWxf YXJyYXlzKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lkIGV4cGFuZF9wbGFubmVyX2Fy cmF5cyhQbGFubmVySW5mbyAqcm9vdCwgaW50IGFkZF9zaXplKTsKIGV4dGVybiBSZWxPcHRJbmZv ICpidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCiAJCQkJCQkJ CQlSZWxPcHRJbmZvICpwYXJlbnQpOworZXh0ZXJuIFJlbE9wdEluZm8gKmJ1aWxkX3NpbXBsZV9n cm91cGVkX3JlbChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVs X3BsYWluKTsKK2V4dGVybiBSZWxPcHRJbmZvICpidWlsZF9ncm91cGVkX3JlbChQbGFubmVySW5m byAqcm9vdCwKKwkJCQkJCQkJCSBSZWxPcHRJbmZvICpyZWxfcGxhaW4pOwogZXh0ZXJuIFJlbE9w dEluZm8gKmZpbmRfYmFzZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCk7CiBleHRl cm4gUmVsT3B0SW5mbyAqZmluZF9iYXNlX3JlbF9ub2VycihQbGFubmVySW5mbyAqcm9vdCwgaW50 IHJlbGlkKTsKIGV4dGVybiBSZWxPcHRJbmZvICpmaW5kX2Jhc2VfcmVsX2lnbm9yZV9qb2luKFBs YW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRfam9p bl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMpOworZXh0ZXJuIHZvaWQgYWRk X2dyb3VwZWRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpOworZXh0ZXJu IFJlbE9wdEluZm8gKmZpbmRfZ3JvdXBlZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyBy ZWxpZHMpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmJ1aWxkX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpy b290LAogCQkJCQkJCQkgIFJlbGlkcyBqb2lucmVsaWRzLAogCQkJCQkJCQkgIFJlbE9wdEluZm8g Km91dGVyX3JlbCwKQEAgLTM1Miw0ICszNTgsNSBAQCBleHRlcm4gUmVsT3B0SW5mbyAqYnVpbGRf Y2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCQkJU3BlY2lhbEpvaW5J bmZvICpzamluZm8sCiAJCQkJCQkJCQkJaW50IG5hcHBpbmZvcywgQXBwZW5kUmVsSW5mbyAqKmFw cGluZm9zKTsKIAorZXh0ZXJuIFJlbEFnZ0luZm8gKmNyZWF0ZV9yZWxfYWdnX2luZm8oUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCk7CiAjZW5kaWYJCQkJCQkJLyogUEFUSE5PREVf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggYi9zcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCA1NDg2OWQ0NDAxLi5hMTg5YjdmMThjIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvcGF0aHMuaApAQCAtMjEsNiArMjEsNyBAQAogICogYWxscGF0aHMuYwogICovCiBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfZ2VxbzsKK2V4dGVybiBQR0RMTElNUE9SVCBi b29sIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGU7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IGdlcW9f dGhyZXNob2xkOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nh bl9zaXplOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtaW5fcGFyYWxsZWxfaW5kZXhfc2Nhbl9z aXplOwpAQCAtNTcsNiArNTgsMTAgQEAgZXh0ZXJuIHZvaWQgZ2VuZXJhdGVfZ2F0aGVyX3BhdGhz KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCSAgYm9vbCBvdmVy cmlkZV9yb3dzKTsKIGV4dGVybiB2b2lkIGdlbmVyYXRlX3VzZWZ1bF9nYXRoZXJfcGF0aHMoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkJCQkgYm9vbCBvdmVycmlk ZV9yb3dzKTsKK2V4dGVybiB2b2lkIGdlbmVyYXRlX2dyb3VwZWRfcGF0aHMoUGxhbm5lckluZm8g KnJvb3QsCisJCQkJCQkJCSAgIFJlbE9wdEluZm8gKnJlbF9ncm91cGVkLAorCQkJCQkJCQkgICBS ZWxPcHRJbmZvICpyZWxfcGxhaW4sCisJCQkJCQkJCSAgIFJlbEFnZ0luZm8gKmFnZ19pbmZvKTsK IGV4dGVybiBpbnQJY29tcHV0ZV9wYXJhbGxlbF93b3JrZXIoUmVsT3B0SW5mbyAqcmVsLCBkb3Vi bGUgaGVhcF9wYWdlcywKIAkJCQkJCQkJCWRvdWJsZSBpbmRleF9wYWdlcywgaW50IG1heF93b3Jr ZXJzKTsKIGV4dGVybiB2b2lkIGNyZWF0ZV9wYXJ0aWFsX2JpdG1hcF9wYXRocyhQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BsYW5tYWluLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaAppbmRleCAw YjZmMGY3OTY5Li40OTYxNGRiZDc1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGxhbm1haW4uaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaApAQCAtNzUs NiArNzUsNyBAQCBleHRlcm4gdm9pZCBhZGRfdmFyc190b190YXJnZXRsaXN0KFBsYW5uZXJJbmZv ICpyb290LCBMaXN0ICp2YXJzLAogZXh0ZXJuIHZvaWQgYWRkX3ZhcnNfdG9fYXR0cl9uZWVkZWQo UGxhbm5lckluZm8gKnJvb3QsIExpc3QgKnZhcnMsCiAJCQkJCQkJCQlSZWxpZHMgd2hlcmVfbmVl ZGVkKTsKIGV4dGVybiB2b2lkIHJlbW92ZV91c2VsZXNzX2dyb3VwYnlfY29sdW1ucyhQbGFubmVy SW5mbyAqcm9vdCk7CitleHRlcm4gdm9pZCBzZXR1cF9lYWdlcl9hZ2dyZWdhdGlvbihQbGFubmVy SW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCBmaW5kX2xhdGVyYWxfcmVmZXJlbmNlcyhQbGFubmVy SW5mbyAqcm9vdCk7CiBleHRlcm4gdm9pZCByZWJ1aWxkX2xhdGVyYWxfYXR0cl9uZWVkZWQoUGxh bm5lckluZm8gKnJvb3QpOwogZXh0ZXJuIHZvaWQgY3JlYXRlX2xhdGVyYWxfam9pbl9pbmZvKFBs YW5uZXJJbmZvICpyb290KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv ZWFnZXJfYWdncmVnYXRlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZWFnZXJfYWdn cmVnYXRlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45ZjYzNDcy ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lYWdlcl9h Z2dyZWdhdGUub3V0CkBAIC0wLDAgKzEsMTMwOCBAQAorLS0KKy0tIEVBR0VSIEFHR1JFR0FUSU9O CistLSBUZXN0IHdlIGNhbiBwdXNoIGFnZ3JlZ2F0aW9uIGRvd24gYmVsb3cgam9pbgorLS0KKy0t IEVuYWJsZSBlYWdlciBhZ2dyZWdhdGlvbiwgd2hpY2ggYnkgZGVmYXVsdCBpcyBkaXNhYmxlZC4K K1NFVCBlbmFibGVfZWFnZXJfYWdncmVnYXRlIFRPIG9uOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2Fn Z190MSAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24pOworQ1JFQVRFIFRBQkxFIGVh Z2VyX2FnZ190MiAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24pOworQ1JFQVRFIFRB QkxFIGVhZ2VyX2FnZ190MyAoYSBpbnQsIGIgaW50LCBjIGRvdWJsZSBwcmVjaXNpb24pOworSU5T RVJUIElOVE8gZWFnZXJfYWdnX3QxIFNFTEVDVCBpLCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEsIDEwMDApaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190MiBTRUxFQ1QgaSwgaSUxMCwgaSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdDMg U0VMRUNUIGklMTAsIGklMTAsIGkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMClpOworQU5B TFlaRSBlYWdlcl9hZ2dfdDE7CitBTkFMWVpFIGVhZ2VyX2FnZ190MjsKK0FOQUxZWkUgZWFnZXJf YWdnX3QzOworLS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gb3ZlciBiYXNlIHJlbAorLS0K Ky0tIFBlcmZvcm0gc2NhbiBvZiBhIHRhYmxlLCBhZ2dyZWdhdGUgdGhlIHJlc3VsdCwgam9pbiBp dCB0byB0aGUgb3RoZXIgdGFibGUKKy0tIGFuZCBmaW5hbGl6ZSB0aGUgYWdncmVnYXRpb24uCitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00g ZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQ IEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUg R3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEuYSwgYXZnKHQyLmMpCisgICBHcm91cCBLZXk6 IHQxLmEKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0 Mi5jKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDEuYSwgdDEuYiwgdDEuYworICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAg ICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2Zyh0Mi5jKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MiB0MgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisoMTggcm93cykKKworU0VMRUNU IHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0 MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgYSB8IGF2ZyAK Ky0tLSstLS0tLQorIDEgfCA0OTYKKyAyIHwgNDk3CisgMyB8IDQ5OAorIDQgfCA0OTkKKyA1IHwg NTAwCisgNiB8IDUwMQorIDcgfCA1MDIKKyA4IHwgNTAzCisgOSB8IDUwNAorKDkgcm93cykKKwor LS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZyBhZ2dyZWdhdGlvbgorU0VUIGVuYWJsZV9o YXNoYWdnIFRPIG9mZjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5h LCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04g dDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0 MS5hLCBhdmcodDIuYykKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQKKyAgICAgICAg IE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgU29ydCBLZXk6IHQx LmEKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDEuYSwg KFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDEuYiA9IHQy LmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MSB0 MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5jCisgICAgICAg ICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCAoUEFS VElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFM IGF2Zyh0Mi5jKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTb3J0IEtleTogdDIuYgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYgorKDIxIHJvd3MpCisKK1NF TEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2df dDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworIGEgfCBh dmcgCistLS0rLS0tLS0KKyAxIHwgNDk2CisgMiB8IDQ5NworIDMgfCA0OTgKKyA0IHwgNDk5Cisg NSB8IDUwMAorIDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUwMworIDkgfCA1MDQKKyg5IHJvd3Mp CisKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworLS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24g b3ZlciBqb2luIHJlbAorLS0KKy0tIFBlcmZvcm0gam9pbiBvZiB0YWJsZXMsIGFnZ3JlZ2F0ZSB0 aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0gYW5kIGZpbmFsaXplIHRo ZSBhZ2dyZWdhdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5h LCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3Qy IHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5hIEdS T1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUgR3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDEu YSwgYXZnKCh0Mi5jICsgdDMuYykpCisgICBHcm91cCBLZXk6IHQxLmEKKyAgIC0+ICBTb3J0Cisg ICAgICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKSkKKyAgICAg ICAgIFNvcnQgS2V5OiB0MS5hCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKSkKKyAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHQxLmIgPSB0Mi5iKQorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDEgdDEKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDEuYSwgdDEuYiwgdDEuYworICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDIuYiwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAg ICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQzLmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHQzLmEgPSB0Mi5hKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdDMgdDMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDMuYSwgdDMuYiwgdDMuYworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYywgdDIuYiwgdDIuYQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdDIgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDIuYywgdDIuYiwgdDIuYQorKDI1IHJvd3MpCisKK1NFTEVDVCB0MS5hLCBhdmco dDIuYyArIHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9O IHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQIEJZ IHQxLmEgT1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5NworIDIg fCA0OTkKKyAzIHwgNTAxCisgNCB8IDUwMworIDUgfCA1MDUKKyA2IHwgNTA3CisgNyB8IDUwOQor IDggfCA1MTEKKyA5IHwgNTEzCisoOSByb3dzKQorCistLSBQcm9kdWNlIHJlc3VsdHMgd2l0aCBz b3J0aW5nIGFnZ3JlZ2F0aW9uCitTRVQgZW5hYmxlX2hhc2hhZ2cgVE8gb2ZmOworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBl YWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgSk9JTiBl YWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5h OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0cHV0OiB0MS5hLCBhdmcoKHQyLmMg KyB0My5jKSkKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQKKyAgICAgICAgIE91dHB1 dDogdDEuYSwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgU29ydCBLZXk6 IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgIE91dHB1dDogdDEu YSwgKFBBUlRJQUwgYXZnKCh0Mi5jICsgdDMuYykpKQorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0 MS5jCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Mi5iLCAoUEFSVElBTCBhdmcoKHQyLmMgKyB0My5jKSkpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0Mi5iLCBQQVJUSUFMIGF2ZygodDIuYyArIHQzLmMpKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgR3JvdXAgS2V5OiB0Mi5iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAt PiAgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0 Mi5iLCB0My5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDIu YgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5jLCB0Mi5iLCB0My5j CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0My5h ID0gdDIuYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QzIHQzCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmEsIHQzLmIsIHQzLmMKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmMsIHQyLmIsIHQyLmEKKygyOCByb3dzKQorCitT RUxFQ1QgdDEuYSwgYXZnKHQyLmMgKyB0My5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVh Z2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBKT0lOIGVhZ2VyX2FnZ190MyB0MyBPTiB0Mi5h ID0gdDMuYSBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisgYSB8IGF2ZyAKKy0tLSstLS0t LQorIDEgfCA0OTcKKyAyIHwgNDk5CisgMyB8IDUwMQorIDQgfCA1MDMKKyA1IHwgNTA1CisgNiB8 IDUwNworIDcgfCA1MDkKKyA4IHwgNTExCisgOSB8IDUxMworKDkgcm93cykKKworUkVTRVQgZW5h YmxlX2hhc2hhZ2c7CistLQorLS0gVGVzdCB0aGF0IGVhZ2VyIGFnZ3JlZ2F0aW9uIHdvcmtzIGZv ciBvdXRlciBqb2luCistLQorLS0gRW5zdXJlIGFnZ3JlZ2F0aW9uIGNhbiBiZSBwdXNoZWQgZG93 biB0byB0aGUgbm9uLW51bGxhYmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikK K1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgUklHSFQgSk9JTiBl YWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5h OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBGaW5hbGl6ZSBHcm91cEFnZ3JlZ2F0ZQorICAgT3V0 cHV0OiB0MS5hLCBhdmcodDIuYykKKyAgIEdyb3VwIEtleTogdDEuYQorICAgLT4gIFNvcnQKKyAg ICAgICAgIE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgU29ydCBL ZXk6IHQxLmEKKyAgICAgICAgIC0+ICBIYXNoIFJpZ2h0IEpvaW4KKyAgICAgICAgICAgICAgIE91 dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0 MS5jCisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Mi5iLCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy dGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy LmIsIFBBUlRJQUwgYXZnKHQyLmMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyLmEsIHQyLmIsIHQyLmMKKygxOCByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMp IEZST00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIg PSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0t CisgMSB8IDQ5NgorIDIgfCA0OTcKKyAzIHwgNDk4CisgNCB8IDQ5OQorIDUgfCA1MDAKKyA2IHwg NTAxCisgNyB8IDUwMgorIDggfCA1MDMKKyA5IHwgNTA0CisgICB8IDUwNQorKDEwIHJvd3MpCisK Ky0tIEVuc3VyZSBhZ2dyZWdhdGlvbiBjYW5ub3QgYmUgcHVzaGVkIGRvd24gdG8gdGhlIG51bGxh YmxlIHNpZGUKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0Mi5iLCBhdmco dDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgTEVGVCBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0 MS5iID0gdDIuYiBHUk9VUCBCWSB0Mi5iIE9SREVSIEJZIHQyLmI7CisgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQK KyAgIE91dHB1dDogdDIuYiwgKGF2Zyh0Mi5jKSkKKyAgIFNvcnQgS2V5OiB0Mi5iCisgICAtPiAg SGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0Mi5iLCBhdmcodDIuYykKKyAgICAgICAg IEdyb3VwIEtleTogdDIuYgorICAgICAgICAgLT4gIEhhc2ggUmlnaHQgSm9pbgorICAgICAgICAg ICAgICAgT3V0cHV0OiB0Mi5iLCB0Mi5jCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi5i ID0gdDEuYikKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3QyIHQyCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIsIHQyLmMKKyAg ICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmIK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Qx IHQxCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLmIKKygxNSByb3dzKQor CitTRUxFQ1QgdDIuYiwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIExFRlQgSk9JTiBl YWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDIuYiBPUkRFUiBCWSB0Mi5i OworIGIgfCBhdmcgCistLS0rLS0tLS0KKyAxIHwgNDk2CisgMiB8IDQ5NworIDMgfCA0OTgKKyA0 IHwgNDk5CisgNSB8IDUwMAorIDYgfCA1MDEKKyA3IHwgNTAyCisgOCB8IDUwMworIDkgfCA1MDQK KyAgIHwgICAgCisoMTAgcm93cykKKworLS0KKy0tIFRlc3QgdGhhdCBlYWdlciBhZ2dyZWdhdGlv biB3b3JrcyBmb3IgcGFyYWxsZWwgcGxhbnMKKy0tCitTRVQgcGFyYWxsZWxfc2V0dXBfY29zdD0w OworU0VUIHBhcmFsbGVsX3R1cGxlX2Nvc3Q9MDsKK1NFVCBtaW5fcGFyYWxsZWxfdGFibGVfc2Nh bl9zaXplPTA7CitTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlcj00OworRVhQTEFJ TiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2Vy X2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0 MS5hIE9SREVSIEJZIHQxLmE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEZpbmFsaXplIEdyb3VwQWdncmVnYXRlCisgICBPdXRwdXQ6IHQxLmEs IGF2Zyh0Mi5jKQorICAgR3JvdXAgS2V5OiB0MS5hCisgICAtPiAgR2F0aGVyIE1lcmdlCisgICAg ICAgICBPdXRwdXQ6IHQxLmEsIChQQVJUSUFMIGF2Zyh0Mi5jKSkKKyAgICAgICAgIFdvcmtlcnMg UGxhbm5lZDogMgorICAgICAgICAgLT4gIFNvcnQKKyAgICAgICAgICAgICAgIE91dHB1dDogdDEu YSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgU29ydCBLZXk6IHQxLmEKKyAg ICAgICAgICAgICAgIC0+ICBQYXJhbGxlbCBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDEuYSwgKFBBUlRJQUwgYXZnKHQyLmMpKQorICAgICAgICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDEuYiA9IHQyLmIpCisgICAgICAgICAgICAgICAgICAgICAtPiAgUGFyYWxs ZWwgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190MSB0MQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MS5hLCB0MS5iLCB0MS5jCisgICAgICAgICAgICAgICAgICAgICAt PiAgUGFyYWxsZWwgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5i LCAoUEFSVElBTCBhdmcodDIuYykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFy dGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyLmIsIFBBUlRJQUwgYXZnKHQyLmMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHcm91cCBLZXk6IHQyLmIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJhbGxlbCBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3QyIHQyCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIsIHQyLmMKKygy MSByb3dzKQorCitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpP SU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkg dDEuYTsKKyBhIHwgYXZnIAorLS0tKy0tLS0tCisgMSB8IDQ5NgorIDIgfCA0OTcKKyAzIHwgNDk4 CisgNCB8IDQ5OQorIDUgfCA1MDAKKyA2IHwgNTAxCisgNyB8IDUwMgorIDggfCA1MDMKKyA5IHwg NTA0CisoOSByb3dzKQorCitSRVNFVCBwYXJhbGxlbF9zZXR1cF9jb3N0OworUkVTRVQgcGFyYWxs ZWxfdHVwbGVfY29zdDsKK1JFU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9zY2FuX3NpemU7CitSRVNF VCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyOworRFJPUCBUQUJMRSBlYWdlcl9hZ2df dDE7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MjsKK0RST1AgVEFCTEUgZWFnZXJfYWdnX3QzOwor LS0KKy0tIFRlc3QgZWFnZXIgYWdncmVnYXRpb24gZm9yIHBhcnRpdGlvbndpc2Ugam9pbgorLS0K Ky0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0ZSwgd2hpY2ggYnkgZGVmYXVsdCBpcyBk aXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdhdGUgVE8gdHJ1ZTsKKy0t IEVuYWJsZSBwYXJ0aXRpb253aXNlIGpvaW4sIHdoaWNoIGJ5IGRlZmF1bHQgaXMgZGlzYWJsZWQu CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOworQ1JFQVRFIFRBQkxFIGVh Z2VyX2FnZ190YWIxKHggaW50LCB5IGludCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRF IFRBQkxFIGVhZ2VyX2FnZ190YWIxX3AxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMSBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDIg UEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCk7 CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDMgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190 YWIxIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRPICgzMCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdn X3RhYjIoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UoeSk7CitDUkVBVEUgVEFCTEUg ZWFnZXJfYWdnX3RhYjJfcDEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWIyIEZPUiBWQUxVRVMg RlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMiBQQVJUSVRJ T04gT0YgZWFnZXJfYWdnX3RhYjIgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKTsKK0NSRUFU RSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMyBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjIgRk9S IFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWIxIFNF TEVDVCBpICUgMzAsIGkgJSAyMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLCAyOTksIDIpIGk7CitJ TlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiMiBTRUxFQ1QgaSAlIDIwLCBpICUgMzAgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMCwgMjk5LCAzKSBpOworQU5BTFlaRSBlYWdlcl9hZ2dfdGFiMTsKK0FOQUxZ WkUgZWFnZXJfYWdnX3RhYjI7CistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBtYXRjaGVzOyBmdWxs IGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9N IGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBH Uk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEu eCwgKHN1bSh0MS55KSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54CisgICAtPiAgQXBw ZW5kCisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAg T3V0cHV0OiB0MS54LCBzdW0odDEueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwgY291bnQoKikp CisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi55ID0gdDEueCkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDEgdDIK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueQorICAgICAgICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEueCwg KFBBUlRJQUwgc3VtKHQxLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngsIFBBUlRJQUwgc3VtKHQxLnkpLCBQQVJUSUFMIGNv dW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjFfcDEgdDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDEueCwgdDEueQorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBzdW0odDFfMS55KSwgY291bnQoKikK KyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJQUwgc3Vt KHQxXzEueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHQyXzEueSA9IHQxXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDIgdDJfMQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml8xLnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJQUwgc3VtKHQxXzEu eSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQ YXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMS54LCBQQVJUSUFMIHN1bSh0MV8xLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzEueAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiMV9wMiB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQxXzEueCwgdDFfMS55CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIHN1bSh0MV8yLnkpLCBjb3VudCgqKQorICAg ICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDFf Mi55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDJfMi55ID0gdDFfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMyB0Ml8yCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzIueQorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFSVElBTCBzdW0odDFfMi55KSks IChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRp YWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8yLngsIFBBUlRJQUwgc3VtKHQxXzIueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMi54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIx X3AzIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDFfMi54LCB0MV8yLnkKKyg0OSByb3dzKQorCitTRUxFQ1QgdDEueCwgc3VtKHQxLnkpLCBjb3Vu dCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54 ID0gdDIueSBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CisgeCAgfCBzdW0gIHwgY291bnQg CistLS0tKy0tLS0tLSstLS0tLS0tCisgIDAgfCAgNTAwIHwgICAxMDAKKyAgNiB8IDExMDAgfCAg IDEwMAorIDEyIHwgIDcwMCB8ICAgMTAwCisgMTggfCAxMzAwIHwgICAxMDAKKyAyNCB8ICA5MDAg fCAgIDEwMAorKDUgcm93cykKKworLS0gR1JPVVAgQlkgaGF2aW5nIG90aGVyIG1hdGNoaW5nIGtl eQorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQyLnksIHN1bSh0MS55KSwg Y291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIgdDIgV0hFUkUg dDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueSBPUkRFUiBCWSB0Mi55OworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0Cisg ICBPdXRwdXQ6IHQyLnksIChzdW0odDEueSkpLCAoY291bnQoKikpCisgICBTb3J0IEtleTogdDIu eQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAg ICAgICAgICAgICAgIE91dHB1dDogdDIueSwgc3VtKHQxLnkpLCBjb3VudCgqKQorICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiB0Mi55CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnksIChQQVJUSUFMIHN1bSh0MS55KSksIChQQVJU SUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDIueSA9IHQx LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2Fn Z190YWIyX3AxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLnkKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxLngsIChQQVJUSUFMIHN1bSh0MS55KSksIChQQVJUSUFMIGNvdW50KCopKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCBQQVJUSUFMIHN1bSh0MS55 KSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Jv dXAgS2V5OiB0MS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQxCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxLnksIHQxLngKKyAgICAgICAgIC0+ICBGaW5hbGl6 ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgc3VtKHQxXzEu eSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueQorICAgICAgICAg ICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnks IChQQVJUSUFMIHN1bSh0MV8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0Ml8xLnkgPSB0MV8xLngpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AyIHQyXzEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55CisgICAgICAgICAgICAgICAgICAgICAt PiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIChQQVJU SUFMIHN1bSh0MV8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgUEFSVElBTCBzdW0odDFfMS55KSwgUEFSVElBTCBj b3VudCgqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8x LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYjFfcDIgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0MV8xLnksIHQxXzEueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhh c2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCBzdW0odDFfMi55KSwg Y291bnQoKikKKyAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMi55CisgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgKFBB UlRJQUwgc3VtKHQxXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAg ICAgIEhhc2ggQ29uZDogKHQyXzIueSA9IHQxXzIueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDMgdDJfMgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgKFBBUlRJQUwg c3VtKHQxXzIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDFfMi54LCBQQVJUSUFMIHN1bSh0MV8yLnkpLCBQQVJUSUFMIGNvdW50 KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzIueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiMV9wMyB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQxXzIueSwgdDFfMi54CisoNDkgcm93cykKKworU0VMRUNUIHQyLnksIHN1 bSh0MS55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSwgZWFnZXJfYWdnX3RhYjIg dDIgV0hFUkUgdDEueCA9IHQyLnkgR1JPVVAgQlkgdDIueSBPUkRFUiBCWSB0Mi55OworIHkgIHwg c3VtICB8IGNvdW50IAorLS0tLSstLS0tLS0rLS0tLS0tLQorICAwIHwgIDUwMCB8ICAgMTAwCisg IDYgfCAxMTAwIHwgICAxMDAKKyAxMiB8ICA3MDAgfCAgIDEwMAorIDE4IHwgMTMwMCB8ICAgMTAw CisgMjQgfCAgOTAwIHwgICAxMDAKKyg1IHJvd3MpCisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNl IGRvZXMgbm90IG1hdGNoOyBwYXJ0aWFsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFj aCBwYXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDIueCwg c3VtKHQxLngpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFi MiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0Mi54IEhBVklORyBhdmcodDEueCkgPiAx MCBPUkRFUiBCWSB0Mi54OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBTb3J0CisgICBPdXRwdXQ6IHQyLngsIChzdW0odDEueCkpLCAoY291bnQoKikp CisgICBTb3J0IEtleTogdDIueAorICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAg ICAgIE91dHB1dDogdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKQorICAgICAgICAgR3JvdXAgS2V5 OiB0Mi54CisgICAgICAgICBGaWx0ZXI6IChhdmcodDEueCkgPiAnMTAnOjpudW1lcmljKQorICAg ICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIChQQVJUSUFMIHN1bSh0MV8xLngpKSwgKFBBUlRJ QUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMS54KSkKKyAgICAgICAgICAgICAgICAgICAg IEhhc2ggQ29uZDogKHQyXzEueSA9IHQxXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjJfcDEgdDJfMQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIHQyXzEueQorICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCAoUEFS VElBTCBzdW0odDFfMS54KSksIChQQVJUSUFMIGNvdW50KCopKSwgKFBBUlRJQUwgYXZnKHQxXzEu eCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgUEFSVElB TCBzdW0odDFfMS54KSwgUEFSVElBTCBjb3VudCgqKSwgUEFSVElBTCBhdmcodDFfMS54KQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdn X3RhYjFfcDEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMi54LCAoUEFSVElBTCBzdW0odDFfMi54KSksIChQQVJUSUFMIGNv dW50KCopKSwgKFBBUlRJQUwgYXZnKHQxXzIueCkpCisgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0Ml8yLnkgPSB0MV8yLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIyX3AyIHQyXzIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMi54LCB0Ml8yLnkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBI YXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgKFBBUlRJQUwg c3VtKHQxXzIueCkpLCAoUEFSVElBTCBjb3VudCgqKSksIChQQVJUSUFMIGF2Zyh0MV8yLngpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIFBBUlRJQUwgc3Vt KHQxXzIueCksIFBBUlRJQUwgY291bnQoKiksIFBBUlRJQUwgYXZnKHQxXzIueCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDFfMi54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIx X3AyIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDFfMi54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzMueCwgKFBBUlRJQUwgc3VtKHQxXzMueCkpLCAoUEFSVElBTCBjb3VudCgq KSksIChQQVJUSUFMIGF2Zyh0MV8zLngpKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDJfMy55ID0gdDFfMy54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lYWdlcl9hZ2dfdGFiMl9wMyB0Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyXzMueCwgdDJfMy55CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngsIChQQVJUSUFMIHN1bSh0 MV8zLngpKSwgKFBBUlRJQUwgY291bnQoKikpLCAoUEFSVElBTCBhdmcodDFfMy54KSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCBQQVJUSUFMIHN1bSh0MV8z LngpLCBQQVJUSUFMIGNvdW50KCopLCBQQVJUSUFMIGF2Zyh0MV8zLngpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzMueAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMyB0 MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMu eAorKDQ0IHJvd3MpCisKK1NFTEVDVCB0Mi54LCBzdW0odDEueCksIGNvdW50KCopIEZST00gZWFn ZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQ IEJZIHQyLnggSEFWSU5HIGF2Zyh0MS54KSA+IDEwIE9SREVSIEJZIHQyLng7CisgeCAgfCBzdW0g IHwgY291bnQgCistLS0tKy0tLS0tLSstLS0tLS0tCisgIDIgfCAgNjAwIHwgICAgNTAKKyAgNCB8 IDEyMDAgfCAgICA1MAorICA4IHwgIDkwMCB8ICAgIDUwCisgMTIgfCAgNjAwIHwgICAgNTAKKyAx NCB8IDEyMDAgfCAgICA1MAorIDE4IHwgIDkwMCB8ICAgIDUwCisoNiByb3dzKQorCistLSBDaGVj ayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tIGZ1bGwgYWdncmVnYXRp b24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54LCBzdW0odDIueSAr IHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0 MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZ IHQxLnggT1JERVIgQlkgdDEueDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTb3J0CisgICBPdXRwdXQ6IHQx LngsIChzdW0oKHQyLnkgKyB0My55KSkpCisgICBTb3J0IEtleTogdDEueAorICAgLT4gIEFwcGVu ZAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91 dHB1dDogdDEueCwgc3VtKCh0Mi55ICsgdDMueSkpCisgICAgICAgICAgICAgICBHcm91cCBLZXk6 IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKQorICAgICAgICAgICAg ICAgICAgICAgSGFzaCBDb25kOiAodDEueCA9IHQyLngpCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AxIHQxCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLngsIHQzLngsIChQQVJUSUFM IHN1bSgodDIueSArIHQzLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0 aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDIueCwgdDMueCwgUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54LCB0My55LCB0My54CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi54ID0gdDMueCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYjFfcDEgdDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDIueSwgdDIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDMueSwgdDMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0 MworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0My55LCB0My54CisgICAgICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAg ICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIHN1bSgodDJfMS55ICsgdDNfMS55KSkKKyAgICAg ICAgICAgICAgIEdyb3VwIEtleTogdDFfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2lu CisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzEueCwgKFBBUlRJQUwgc3VtKCh0Ml8x LnkgKyB0M18xLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQxXzEueCA9 IHQyXzEueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFn ZXJfYWdnX3RhYjFfcDIgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS54LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQz XzEueSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIHQz XzEueCwgUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18xLngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9IHQzXzEueCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuZWFnZXJfYWdnX3RhYjFfcDIgdDJfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMS55LCB0M18xLngKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu ZWFnZXJfYWdnX3RhYjFfcDIgdDNfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgLT4gIEZp bmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCBzdW0o KHQyXzIueSArIHQzXzIueSkpCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzIueAorICAg ICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 MV8yLngsIChQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSkpCisgICAgICAgICAgICAgICAg ICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAtPiAg SGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueCwg KFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMi54LCB0M18yLngsIFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18y LnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8yLngK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngsIHQz XzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0Ml8yLnggPSB0M18yLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQyXzIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55 LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQz XzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQzXzIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55 LCB0M18yLngKKyg3MCByb3dzKQorCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSBGUk9N IGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3RhYjEgdDIgT04gdDEueCA9IHQyLngg Sk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0MS54IE9SREVS IEJZIHQxLng7CisgeCAgfCAgc3VtICAKKy0tLS0rLS0tLS0tLQorICAwIHwgMTAwMDAKKyAgMiB8 IDE0MDAwCisgIDQgfCAxODAwMAorICA2IHwgMjIwMDAKKyAgOCB8IDI2MDAwCisgMTAgfCAxMDAw MAorIDEyIHwgMTQwMDAKKyAxNCB8IDE4MDAwCisgMTYgfCAyMjAwMAorIDE4IHwgMjYwMDAKKyAy MCB8IDEwMDAwCisgMjIgfCAxNDAwMAorIDI0IHwgMTgwMDAKKyAyNiB8IDIyMDAwCisgMjggfCAy NjAwMAorKDE1IHJvd3MpCisKKy0tIHBhcnRpYWwgYWdncmVnYXRpb24KK1NFVCBlbmFibGVfaGFz aGFnZyBUTyBvZmY7CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDMueSwg c3VtKHQyLnkgKyB0My55KSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxIEpPSU4gZWFnZXJfYWdnX3Rh YjEgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MyBPTiB0Mi54ID0gdDMu eCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRmluYWxpemUg R3JvdXBBZ2dyZWdhdGUKKyAgIE91dHB1dDogdDMueSwgc3VtKCh0Mi55ICsgdDMueSkpCisgICBH cm91cCBLZXk6IHQzLnkKKyAgIC0+ICBTb3J0CisgICAgICAgICBPdXRwdXQ6IHQzLnksIChQQVJU SUFMIHN1bSgodDIueSArIHQzLnkpKSkKKyAgICAgICAgIFNvcnQgS2V5OiB0My55CisgICAgICAg ICAtPiAgQXBwZW5kCisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IHQzXzEueSwgKFBBUlRJQUwgc3VtKCh0Ml8xLnkgKyB0M18xLnkpKSkK KyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQyXzEueCA9IHQxXzEueCkKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEdyb3VwQWdncmVnYXRlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS55LCB0M18xLngsIFBBUlRJQUwgc3Vt KCh0Ml8xLnkgKyB0M18xLnkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5 OiB0Ml8xLngsIHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg SW5jcmVtZW50YWwgU29ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18xLngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFNvcnQgS2V5OiB0Ml8xLngsIHQzXzEueQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHJlc29ydGVkIEtleTogdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgTWVyZ2UgSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueCwgdDNfMS55LCB0M18xLngKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lcmdlIENvbmQ6ICh0Ml8xLnggPSB0M18x LngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29ydAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnks IHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29y dCBLZXk6IHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0Ml8xCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEu eSwgdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU29y dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU29ydCBLZXk6IHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiMV9wMSB0M18xCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDEgdDFfMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCAoUEFS VElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDJfMi54ID0gdDFfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwg R3JvdXBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi54 LCB0M18yLnksIHQzXzIueCwgUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIueCwgdDNfMi55LCB0M18yLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBJbmNyZW1lbnRhbCBTb3J0CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54LCB0M18yLnksIHQz XzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29ydCBLZXk6IHQyXzIueCwg dDNfMi55CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVzb3J0ZWQgS2V5OiB0 Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBNZXJnZSBKb2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJf Mi54LCB0M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTWVyZ2UgQ29uZDogKHQyXzIueCA9IHQzXzIueCkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDJfMi54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVh Z2VyX2FnZ190YWIxX3AyIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzIueSwgdDNfMi54CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3J0IEtleTogdDNfMi54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWIxX3AyIHQzXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNfMi55LCB0M18yLngKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQx XzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiMV9wMiB0MV8yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0M18zLnksIChQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSkp CisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Ml8zLnggPSB0MV8zLngpCisgICAg ICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBHcm91cEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueSwgdDNfMy54LCBQQVJUSUFMIHN1 bSgodDJfMy55ICsgdDNfMy55KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtl eTogdDJfMy54LCB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IEluY3JlbWVudGFsIFNvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMy55LCB0Ml8zLngsIHQzXzMueSwgdDNfMy54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTb3J0IEtleTogdDJfMy54LCB0M18zLnkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFByZXNvcnRlZCBLZXk6IHQyXzMueAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIE1lcmdlIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngsIHQzXzMueSwgdDNfMy54CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXJnZSBDb25kOiAodDJfMy54ID0gdDNf My54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNvcnQKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55 LCB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNv cnQgS2V5OiB0Ml8zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDJfMworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8z LnksIHQyXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNv cnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNvcnQgS2V5OiB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYjFfcDMgdDNfMwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWIxX3AzIHQxXzMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54CisoODggcm93cykKKwor U0VMRUNUIHQzLnksIHN1bSh0Mi55ICsgdDMueSkgRlJPTSBlYWdlcl9hZ2dfdGFiMSB0MSBKT0lO IGVhZ2VyX2FnZ190YWIxIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYjEgdDMg T04gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55OworIHkgIHwgIHN1bSAg CistLS0tKy0tLS0tLS0KKyAgMCB8ICA3NTAwCisgIDIgfCAxMzUwMAorICA0IHwgMTk1MDAKKyAg NiB8IDI1NTAwCisgIDggfCAzMTUwMAorIDEwIHwgMjI1MDAKKyAxMiB8IDI4NTAwCisgMTQgfCAz NDUwMAorIDE2IHwgNDA1MDAKKyAxOCB8IDQ2NTAwCisoMTAgcm93cykKKworUkVTRVQgZW5hYmxl X2hhc2hhZ2c7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190YWIxOworRFJPUCBUQUJMRSBlYWdlcl9h Z2dfdGFiMjsKKy0tCistLSBUZXN0IHdpdGggbXVsdGktbGV2ZWwgcGFydGl0aW9uaW5nIHNjaGVt ZQorLS0KK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sKHggaW50LCB5IGludCkgUEFSVElU SU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDEgUEFSVElU SU9OIE9GIGVhZ2VyX2FnZ190YWJfbWwgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTApOworQ1JF QVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJfbWxfcDIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJf bWwgRk9SIFZBTFVFUyBGUk9NICgxMCkgVE8gKDIwKSBQQVJUSVRJT04gQlkgUkFOR0UoeCk7CitD UkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMl9zMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdn X3RhYl9tbF9wMiBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMTUpOworQ1JFQVRFIFRBQkxFIGVh Z2VyX2FnZ190YWJfbWxfcDJfczIgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDIgRk9S IFZBTFVFUyBGUk9NICgxNSkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21s X3AzIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRP ICgzMCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWJf bWxfcDNfczEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDMgRk9SIFZBTFVFUyBGUk9N ICgyMCkgVE8gKDI1KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AzX3MyIFBBUlRJ VElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3AzIEZPUiBWQUxVRVMgRlJPTSAoMjUpIFRPICgzMCk7 CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdGFiX21sIFNFTEVDVCBpICUgMzAsIGkgJSAzMCBGUk9N IGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworQU5BTFlaRSBlYWdlcl9hZ2dfdGFiX21sOwor LS0gV2hlbiBHUk9VUCBCWSBjbGF1c2UgbWF0Y2hlczsgZnVsbCBhZ2dyZWdhdGlvbiBpcyBwZXJm b3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUIHQxLngsIHN1bSh0Mi55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQx IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBHUk9VUCBCWSB0MS54IE9S REVSIEJZIHQxLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEueCwgKHN1bSh0Mi55KSks IChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54CisgICAtPiAgQXBwZW5kCisgICAgICAgICAt PiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54LCBz dW0odDIueSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxLngKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDEu eCwgKFBBUlRJQUwgc3VtKHQyLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0MS54ID0gdDIueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi54LCAoUEFSVElBTCBzdW0o dDIueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDIueCwgUEFSVElBTCBzdW0odDIueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFi X21sX3AxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IHQyLnksIHQyLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAg ICAgICAgICBPdXRwdXQ6IHQxXzEueCwgc3VtKHQyXzEueSksIGNvdW50KCopCisgICAgICAgICAg ICAgICBHcm91cCBLZXk6IHQxXzEueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngsIChQQVJUSUFMIHN1bSh0Ml8xLnkpKSwg KFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8x LnggPSB0Ml8xLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGlj LmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgKFBBUlRJQUwgc3VtKHQyXzEueSkpLCAo UEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFs IEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfMS54LCBQQVJUSUFMIHN1bSh0Ml8xLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21s X3AyX3MxIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDJfMS55LCB0Ml8xLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisg ICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzIueCwgc3VtKHQyXzIueSksIGNvdW50KCopCisgICAg ICAgICAgICAgICBHcm91cCBLZXk6IHQxXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9p bgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngsIChQQVJUSUFMIHN1bSh0Ml8y LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6 ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDFfMgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgKFBBUlRJQUwgc3VtKHQyXzIu eSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQ YXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfMi54LCBQQVJUSUFMIHN1bSh0Ml8yLnkpLCBQQVJUSUFMIGNvdW50KCopCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzIueAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2df dGFiX21sX3AyX3MyIHQyXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMi55LCB0Ml8yLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNoQWdncmVn YXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzMueCwgc3VtKHQyXzMueSksIGNvdW50KCop CisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzMueAorICAgICAgICAgICAgICAgLT4gIEhh c2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngsIChQQVJUSUFMIHN1 bSh0Ml8zLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNo IENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDFfMworICAgICAgICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgKFBBUlRJQUwgc3Vt KHQyXzMueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMy54LCBQQVJUSUFMIHN1bSh0Ml8zLnkpLCBQQVJUSUFMIGNvdW50KCop CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzMueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdl cl9hZ2dfdGFiX21sX3AzX3MxIHQyXzMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8zLngKKyAgICAgICAgIC0+ICBGaW5hbGl6ZSBIYXNo QWdncmVnYXRlCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQxXzQueCwgc3VtKHQyXzQueSksIGNv dW50KCopCisgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQxXzQueAorICAgICAgICAgICAgICAg LT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngsIChQQVJU SUFMIHN1bSh0Ml80LnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDFfNAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgKFBBUlRJ QUwgc3VtKHQyXzQueSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfNC54LCBQQVJUSUFMIHN1bSh0Ml80LnkpLCBQQVJUSUFMIGNv dW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzQu eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQyXzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0Ml80LngKKyg3OSByb3dzKQorCitTRUxFQ1Qg dDEueCwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBl YWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZIHQxLnggT1JERVIgQlkg dDEueDsKKyB4ICB8ICBzdW0gIHwgY291bnQgCistLS0tKy0tLS0tLS0rLS0tLS0tLQorICAwIHwg ICAgIDAgfCAgMTA4OQorICAxIHwgIDExNTYgfCAgMTE1NgorICAyIHwgIDIzMTIgfCAgMTE1Ngor ICAzIHwgIDM0NjggfCAgMTE1NgorICA0IHwgIDQ2MjQgfCAgMTE1NgorICA1IHwgIDU3ODAgfCAg MTE1NgorICA2IHwgIDY5MzYgfCAgMTE1NgorICA3IHwgIDgwOTIgfCAgMTE1NgorICA4IHwgIDky NDggfCAgMTE1NgorICA5IHwgMTA0MDQgfCAgMTE1NgorIDEwIHwgMTE1NjAgfCAgMTE1NgorIDEx IHwgMTE5NzkgfCAgMTA4OQorIDEyIHwgMTMwNjggfCAgMTA4OQorIDEzIHwgMTQxNTcgfCAgMTA4 OQorIDE0IHwgMTUyNDYgfCAgMTA4OQorIDE1IHwgMTYzMzUgfCAgMTA4OQorIDE2IHwgMTc0MjQg fCAgMTA4OQorIDE3IHwgMTg1MTMgfCAgMTA4OQorIDE4IHwgMTk2MDIgfCAgMTA4OQorIDE5IHwg MjA2OTEgfCAgMTA4OQorIDIwIHwgMjE3ODAgfCAgMTA4OQorIDIxIHwgMjI4NjkgfCAgMTA4OQor IDIyIHwgMjM5NTggfCAgMTA4OQorIDIzIHwgMjUwNDcgfCAgMTA4OQorIDI0IHwgMjYxMzYgfCAg MTA4OQorIDI1IHwgMjcyMjUgfCAgMTA4OQorIDI2IHwgMjgzMTQgfCAgMTA4OQorIDI3IHwgMjk0 MDMgfCAgMTA4OQorIDI4IHwgMzA0OTIgfCAgMTA4OQorIDI5IHwgMzE1ODEgfCAgMTA4OQorKDMw IHJvd3MpCisKKy0tIFdoZW4gR1JPVVAgQlkgY2xhdXNlIGRvZXMgbm90IG1hdGNoOyBwYXJ0aWFs IGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0aXRpb24uCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueSwgc3VtKHQyLnkpLCBjb3VudCgqKSBGUk9N IGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0 Mi54IEdST1VQIEJZIHQxLnkgT1JERVIgQlkgdDEueTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU29ydAorICAgT3V0cHV0 OiB0MS55LCAoc3VtKHQyLnkpKSwgKGNvdW50KCopKQorICAgU29ydCBLZXk6IHQxLnkKKyAgIC0+ ICBGaW5hbGl6ZSBIYXNoQWdncmVnYXRlCisgICAgICAgICBPdXRwdXQ6IHQxLnksIHN1bSh0Mi55 KSwgY291bnQoKikKKyAgICAgICAgIEdyb3VwIEtleTogdDEueQorICAgICAgICAgLT4gIEFwcGVu ZAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0MV8xLnksIChQQVJUSUFMIHN1bSh0Ml8xLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLnggPSB0Ml8xLngpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEg dDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLnksIHQxXzEueAor ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMS54LCAoUEFSVElBTCBzdW0odDJfMS55KSksIChQQVJUSUFMIGNvdW50KCop KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLngsIFBBUlRJQUwg c3VtKHQyXzEueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdyb3VwIEtleTogdDJfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDJfMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnksIHQyXzEueAor ICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0MV8yLnksIChQQVJUSUFMIHN1bSh0Ml8yLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAg ICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEg dDFfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLnksIHQxXzIueAor ICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDJfMi54LCAoUEFSVElBTCBzdW0odDJfMi55KSksIChQQVJUSUFMIGNvdW50KCop KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIFBBUlRJQUwg c3VtKHQyXzIueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdyb3VwIEtleTogdDJfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDJfMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLnksIHQyXzIu eAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0MV8zLnksIChQQVJUSUFMIHN1bSh0Ml8zLnkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJf czIgdDFfMworICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLnksIHQxXzMu eAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDJfMy54LCAoUEFSVElBTCBzdW0odDJfMy55KSksIChQQVJUSUFMIGNvdW50 KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0 ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIFBBUlRJ QUwgc3VtKHQyXzMueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdyb3VwIEtleTogdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDJfMwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQy XzMueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV80LnksIChQQVJUSUFMIHN1bSh0Ml80LnkpKSwgKFBBUlRJQUwgY291bnQoKikp CisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxf cDNfczEgdDFfNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LnksIHQx XzQueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDJfNC54LCAoUEFSVElBTCBzdW0odDJfNC55KSksIChQQVJUSUFMIGNv dW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3Jl Z2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80LngsIFBB UlRJQUwgc3VtKHQyXzQueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDJf NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml80Lnks IHQyXzQueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0MV81LnksIChQQVJUSUFMIHN1bSh0Ml81LnkpKSwgKFBBUlRJQUwgY291bnQo KikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV81LnggPSB0Ml81LngpCisg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJf bWxfcDNfczIgdDFfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV81Lnks IHQxXzUueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDJfNS54LCAoUEFSVElBTCBzdW0odDJfNS55KSksIChQQVJUSUFM IGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFn Z3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml81Lngs IFBBUlRJQUwgc3VtKHQyXzUueSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNS54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIg dDJfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml81 LnksIHQyXzUueAorKDY3IHJvd3MpCisKK1NFTEVDVCB0MS55LCBzdW0odDIueSksIGNvdW50KCop IEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEu eCA9IHQyLnggR1JPVVAgQlkgdDEueSBPUkRFUiBCWSB0MS55OworIHkgIHwgIHN1bSAgfCBjb3Vu dCAKKy0tLS0rLS0tLS0tLSstLS0tLS0tCisgIDAgfCAgICAgMCB8ICAxMDg5CisgIDEgfCAgMTE1 NiB8ICAxMTU2CisgIDIgfCAgMjMxMiB8ICAxMTU2CisgIDMgfCAgMzQ2OCB8ICAxMTU2CisgIDQg fCAgNDYyNCB8ICAxMTU2CisgIDUgfCAgNTc4MCB8ICAxMTU2CisgIDYgfCAgNjkzNiB8ICAxMTU2 CisgIDcgfCAgODA5MiB8ICAxMTU2CisgIDggfCAgOTI0OCB8ICAxMTU2CisgIDkgfCAxMDQwNCB8 ICAxMTU2CisgMTAgfCAxMTU2MCB8ICAxMTU2CisgMTEgfCAxMTk3OSB8ICAxMDg5CisgMTIgfCAx MzA2OCB8ICAxMDg5CisgMTMgfCAxNDE1NyB8ICAxMDg5CisgMTQgfCAxNTI0NiB8ICAxMDg5Cisg MTUgfCAxNjMzNSB8ICAxMDg5CisgMTYgfCAxNzQyNCB8ICAxMDg5CisgMTcgfCAxODUxMyB8ICAx MDg5CisgMTggfCAxOTYwMiB8ICAxMDg5CisgMTkgfCAyMDY5MSB8ICAxMDg5CisgMjAgfCAyMTc4 MCB8ICAxMDg5CisgMjEgfCAyMjg2OSB8ICAxMDg5CisgMjIgfCAyMzk1OCB8ICAxMDg5CisgMjMg fCAyNTA0NyB8ICAxMDg5CisgMjQgfCAyNjEzNiB8ICAxMDg5CisgMjUgfCAyNzIyNSB8ICAxMDg5 CisgMjYgfCAyODMxNCB8ICAxMDg5CisgMjcgfCAyOTQwMyB8ICAxMDg5CisgMjggfCAzMDQ5MiB8 ICAxMDg5CisgMjkgfCAzMTU4MSB8ICAxMDg5CisoMzAgcm93cykKKworLS0gQ2hlY2sgd2l0aCBl YWdlciBhZ2dyZWdhdGlvbiBvdmVyIGpvaW4gcmVsCistLSBmdWxsIGFnZ3JlZ2F0aW9uCitFWFBM QUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSwg Y291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0 MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLngg R1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDEueCwgKHN1bSgodDIueSArIHQz LnkpKSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0MS54CisgICAtPiAgQXBwZW5kCisgICAg ICAgICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgT3V0cHV0OiB0 MS54LCBzdW0oKHQyLnkgKyB0My55KSksIGNvdW50KCopCisgICAgICAgICAgICAgICBHcm91cCBL ZXk6IHQxLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogdDEueCwgKFBBUlRJQUwgc3VtKCh0Mi55ICsgdDMueSkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MS54ID0gdDIueCkK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3Rh Yl9tbF9wMSB0MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MS54CisgICAg ICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0Mi54LCB0My54LCAoUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSkpLCAoUEFSVElBTCBj b3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIueCwgdDMu eCwgUEFSVElBTCBzdW0oKHQyLnkgKyB0My55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDIueAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54LCB0My55LCB0My54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0Mi54ID0gdDMueCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi55LCB0Mi54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0My55LCB0My54CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190 YWJfbWxfcDEgdDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogdDMueSwgdDMueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dy ZWdhdGUKKyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54LCBzdW0oKHQyXzEueSArIHQzXzEu eSkpLCBjb3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8xLngKKyAgICAgICAg ICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMS54 LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8xLnggPSB0Ml8xLngpCisgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJf czEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8xLngKKyAgICAg ICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQyXzEueCwgdDNfMS54LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkpKSwgKFBB UlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBI YXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzEueCwgdDNfMS54LCBQQVJUSUFMIHN1bSgodDJfMS55ICsgdDNfMS55KSksIFBBUlRJQUwgY291 bnQoKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMS54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueSwgdDJfMS54LCB0 M18xLnksIHQzXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFz aCBDb25kOiAodDJfMS54ID0gdDNfMS54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQy XzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfMS55LCB0Ml8xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRw dXQ6IHQzXzEueSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDNf MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiB0M18xLnksIHQzXzEueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUK KyAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCBzdW0oKHQyXzIueSArIHQzXzIueSkpLCBj b3VudCgqKQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8yLngKKyAgICAgICAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMi54LCAoUEFS VElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAg ICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0MV8yLnggPSB0Ml8yLngpCisgICAgICAgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDFf MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8yLngKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzIueCwgdDNfMi54LCAoUEFSVElBTCBzdW0oKHQyXzIueSArIHQzXzIueSkpKSwgKFBBUlRJQUwg Y291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdn cmVnYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwg dDNfMi54LCBQQVJUSUFMIHN1bSgodDJfMi55ICsgdDNfMi55KSksIFBBUlRJQUwgY291bnQoKikK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMi54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54LCB0M18yLnks IHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDJfMi54ID0gdDNfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQyXzIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55 LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQz XzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczIgdDNfMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 M18yLnksIHQzXzIueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAg ICAgICAgICAgIE91dHB1dDogdDFfMy54LCBzdW0oKHQyXzMueSArIHQzXzMueSkpLCBjb3VudCgq KQorICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV8zLngKKyAgICAgICAgICAgICAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfMy54LCAoUEFSVElBTCBz dW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICBIYXNoIENvbmQ6ICh0MV8zLnggPSB0Ml8zLngpCisgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDFfMworICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV8zLngKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwg dDNfMy54LCAoUEFSVElBTCBzdW0oKHQyXzMueSArIHQzXzMueSkpKSwgKFBBUlRJQUwgY291bnQo KikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRl CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueCwgdDNfMy54 LCBQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMy54CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzMueSwgdDJfMy54LCB0M18zLnksIHQzXzMu eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJf My54ID0gdDNfMy54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MxIHQyXzMKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy55LCB0Ml8z LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzMueSwg dDNfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDNfMworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M18zLnks IHQzXzMueAorICAgICAgICAgLT4gIEZpbmFsaXplIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAg ICAgIE91dHB1dDogdDFfNC54LCBzdW0oKHQyXzQueSArIHQzXzQueSkpLCBjb3VudCgqKQorICAg ICAgICAgICAgICAgR3JvdXAgS2V5OiB0MV80LngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDFfNC54LCAoUEFSVElBTCBzdW0oKHQy XzQueSArIHQzXzQueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAg ICBIYXNoIENvbmQ6ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDFfNAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAgICAgICAgICAgIC0+ ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgdDNfNC54 LCAoUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgdDNfNC54LCBQQVJU SUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfNC54CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueSwgdDJfNC54LCB0M180LnksIHQzXzQueAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDJfNC54ID0g dDNfNC54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQyXzQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0Ml80LngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzQueSwgdDNfNC54 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczIgdDNfNAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0M180LnksIHQzXzQu eAorKDExNCByb3dzKQorCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkgKyB0My55KSwgY291bnQoKikg RlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54 ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIueCA9IHQzLnggR1JPVVAgQlkg dDEueCBPUkRFUiBCWSB0MS54OworIHggIHwgICBzdW0gICB8IGNvdW50IAorLS0tLSstLS0tLS0t LS0rLS0tLS0tLQorICAwIHwgICAgICAgMCB8IDM1OTM3CisgIDEgfCAgIDc4NjA4IHwgMzkzMDQK KyAgMiB8ICAxNTcyMTYgfCAzOTMwNAorICAzIHwgIDIzNTgyNCB8IDM5MzA0CisgIDQgfCAgMzE0 NDMyIHwgMzkzMDQKKyAgNSB8ICAzOTMwNDAgfCAzOTMwNAorICA2IHwgIDQ3MTY0OCB8IDM5MzA0 CisgIDcgfCAgNTUwMjU2IHwgMzkzMDQKKyAgOCB8ICA2Mjg4NjQgfCAzOTMwNAorICA5IHwgIDcw NzQ3MiB8IDM5MzA0CisgMTAgfCAgNzg2MDgwIHwgMzkzMDQKKyAxMSB8ICA3OTA2MTQgfCAzNTkz NworIDEyIHwgIDg2MjQ4OCB8IDM1OTM3CisgMTMgfCAgOTM0MzYyIHwgMzU5MzcKKyAxNCB8IDEw MDYyMzYgfCAzNTkzNworIDE1IHwgMTA3ODExMCB8IDM1OTM3CisgMTYgfCAxMTQ5OTg0IHwgMzU5 MzcKKyAxNyB8IDEyMjE4NTggfCAzNTkzNworIDE4IHwgMTI5MzczMiB8IDM1OTM3CisgMTkgfCAx MzY1NjA2IHwgMzU5MzcKKyAyMCB8IDE0Mzc0ODAgfCAzNTkzNworIDIxIHwgMTUwOTM1NCB8IDM1 OTM3CisgMjIgfCAxNTgxMjI4IHwgMzU5MzcKKyAyMyB8IDE2NTMxMDIgfCAzNTkzNworIDI0IHwg MTcyNDk3NiB8IDM1OTM3CisgMjUgfCAxNzk2ODUwIHwgMzU5MzcKKyAyNiB8IDE4Njg3MjQgfCAz NTkzNworIDI3IHwgMTk0MDU5OCB8IDM1OTM3CisgMjggfCAyMDEyNDcyIHwgMzU5MzcKKyAyOSB8 IDIwODQzNDYgfCAzNTkzNworKDMwIHJvd3MpCisKKy0tIHBhcnRpYWwgYWdncmVnYXRpb24KK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkp LCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21s IHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MyBvbiB0Mi54ID0gdDMu eCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNvcnQKKyAgIE91dHB1dDogdDMu eSwgKHN1bSgodDIueSArIHQzLnkpKSksIChjb3VudCgqKSkKKyAgIFNvcnQgS2V5OiB0My55Cisg ICAtPiAgRmluYWxpemUgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgT3V0cHV0OiB0My55LCBzdW0o KHQyLnkgKyB0My55KSksIGNvdW50KCopCisgICAgICAgICBHcm91cCBLZXk6IHQzLnkKKyAgICAg ICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDNfMS55LCAoUEFSVElBTCBzdW0oKHQyXzEueSArIHQzXzEueSkp KSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6ICh0 MV8xLnggPSB0Ml8xLngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVi bGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDFfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiB0MV8xLngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEueCwgdDNfMS55LCB0M18xLngsIChQQVJUSUFM IHN1bSgodDJfMS55ICsgdDNfMS55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS54LCB0M18xLnksIHQzXzEueCwgUEFSVElB TCBzdW0oKHQyXzEueSArIHQzXzEueSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzEueCwgdDNfMS55LCB0M18xLngKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS55LCB0Ml8xLngsIHQzXzEu eSwgdDNfMS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoIENv bmQ6ICh0Ml8xLnggPSB0M18xLngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDEgdDJfMQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLnks IHQyXzEueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDNf MS55LCB0M18xLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMSB0M18xCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzEu eSwgdDNfMS54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IHQzXzIueSwgKFBBUlRJQUwgc3VtKCh0Ml8yLnkgKyB0M18yLnkpKSksIChQ QVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDFfMi54 ID0gdDJfMi54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5l YWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQxXzIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDFfMi54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8yLngsIHQzXzIueSwgdDNfMi54LCAoUEFSVElBTCBz dW0oKHQyXzIueSArIHQzXzIueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueCwgdDNfMi55LCB0M18yLngsIFBBUlRJQUwg c3VtKCh0Ml8yLnkgKyB0M18yLnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml8yLngsIHQzXzIueSwgdDNfMi54CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzIueSwgdDJfMi54LCB0M18yLnks IHQzXzIueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDJfMi54ID0gdDNfMi54KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MxIHQyXzIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMi55 LCB0Ml8yLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQz XzIueSwgdDNfMi54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDJfczEgdDNfMgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0 M18yLnksIHQzXzIueAorICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAg ICAgICAgICAgT3V0cHV0OiB0M18zLnksIChQQVJUSUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSkp LCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHQx XzMueCA9IHQyXzMueCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0MV8zCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQxXzMueAorICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMy54LCB0M18zLnksIHQzXzMueCwgKFBBUlRJ QUwgc3VtKCh0Ml8zLnkgKyB0M18zLnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFBhcnRpYWwgSGFzaEFnZ3JlZ2F0ZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLngsIHQzXzMueSwgdDNfMy54LCBQQVJU SUFMIHN1bSgodDJfMy55ICsgdDNfMy55KSksIFBBUlRJQUwgY291bnQoKikKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogdDJfMy54LCB0M18zLnksIHQzXzMueAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8zLnksIHQyXzMueCwgdDNf My55LCB0M18zLngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhc2gg Q29uZDogKHQyXzMueCA9IHQzXzMueCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wMl9zMiB0Ml8z CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQy XzMueSwgdDJfMy54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg SGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0M18zLnksIHQzXzMueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AyX3MyIHQzXzMK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1 dDogdDNfMy55LCB0M18zLngKKyAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogdDNfNC55LCAoUEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQu eSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6 ICh0MV80LnggPSB0Ml80LngpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEgdDFfNAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiB0MV80LngKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzQueCwgdDNfNC55LCB0M180LngsIChQ QVJUSUFMIHN1bSgodDJfNC55ICsgdDNfNC55KSkpLCAoUEFSVElBTCBjb3VudCgqKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBQYXJ0aWFsIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC54LCB0M180LnksIHQzXzQueCwg UEFSVElBTCBzdW0oKHQyXzQueSArIHQzXzQueSkpLCBQQVJUSUFMIGNvdW50KCopCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHQyXzQueCwgdDNfNC55LCB0M180 LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfNC55LCB0Ml80Lngs IHQzXzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBI YXNoIENvbmQ6ICh0Ml80LnggPSB0M180LngpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNfczEg dDJfNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiB0Ml80LnksIHQyXzQueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDNfNC55LCB0M180LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZWFnZXJfYWdnX3RhYl9tbF9wM19zMSB0 M180CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IHQzXzQueSwgdDNfNC54CisgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQzXzUueSwgKFBBUlRJQUwgc3VtKCh0Ml81LnkgKyB0 M181LnkpKSksIChQQVJUSUFMIGNvdW50KCopKQorICAgICAgICAgICAgICAgICAgICAgSGFzaCBD b25kOiAodDFfNS54ID0gdDJfNS54KQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3AzX3MyIHQxXzUKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogdDFfNS54CisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml81LngsIHQzXzUueSwgdDNfNS54 LCAoUEFSVElBTCBzdW0oKHQyXzUueSArIHQzXzUueSkpKSwgKFBBUlRJQUwgY291bnQoKikpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgUGFydGlhbCBIYXNoQWdncmVnYXRlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzUueCwgdDNfNS55LCB0M181 LngsIFBBUlRJQUwgc3VtKCh0Ml81LnkgKyB0M181LnkpKSwgUEFSVElBTCBjb3VudCgqKQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiB0Ml81LngsIHQzXzUueSwg dDNfNS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaCBKb2luCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzUueSwgdDJf NS54LCB0M181LnksIHQzXzUueAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSGFzaCBDb25kOiAodDJfNS54ID0gdDNfNS54KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lYWdlcl9hZ2dfdGFiX21sX3Az X3MyIHQyXzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogdDJfNS55LCB0Ml81LngKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQzXzUueSwgdDNfNS54CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVhZ2VyX2FnZ190YWJfbWxfcDNf czIgdDNfNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiB0M181LnksIHQzXzUueAorKDEwMiByb3dzKQorCitTRUxFQ1QgdDMueSwgc3Vt KHQyLnkgKyB0My55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFn ZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMg b24gdDIueCA9IHQzLnggR1JPVVAgQlkgdDMueSBPUkRFUiBCWSB0My55OworIHkgIHwgICBzdW0g ICB8IGNvdW50IAorLS0tLSstLS0tLS0tLS0rLS0tLS0tLQorICAwIHwgICAgICAgMCB8IDM1OTM3 CisgIDEgfCAgIDc4NjA4IHwgMzkzMDQKKyAgMiB8ICAxNTcyMTYgfCAzOTMwNAorICAzIHwgIDIz NTgyNCB8IDM5MzA0CisgIDQgfCAgMzE0NDMyIHwgMzkzMDQKKyAgNSB8ICAzOTMwNDAgfCAzOTMw NAorICA2IHwgIDQ3MTY0OCB8IDM5MzA0CisgIDcgfCAgNTUwMjU2IHwgMzkzMDQKKyAgOCB8ICA2 Mjg4NjQgfCAzOTMwNAorICA5IHwgIDcwNzQ3MiB8IDM5MzA0CisgMTAgfCAgNzg2MDgwIHwgMzkz MDQKKyAxMSB8ICA3OTA2MTQgfCAzNTkzNworIDEyIHwgIDg2MjQ4OCB8IDM1OTM3CisgMTMgfCAg OTM0MzYyIHwgMzU5MzcKKyAxNCB8IDEwMDYyMzYgfCAzNTkzNworIDE1IHwgMTA3ODExMCB8IDM1 OTM3CisgMTYgfCAxMTQ5OTg0IHwgMzU5MzcKKyAxNyB8IDEyMjE4NTggfCAzNTkzNworIDE4IHwg MTI5MzczMiB8IDM1OTM3CisgMTkgfCAxMzY1NjA2IHwgMzU5MzcKKyAyMCB8IDE0Mzc0ODAgfCAz NTkzNworIDIxIHwgMTUwOTM1NCB8IDM1OTM3CisgMjIgfCAxNTgxMjI4IHwgMzU5MzcKKyAyMyB8 IDE2NTMxMDIgfCAzNTkzNworIDI0IHwgMTcyNDk3NiB8IDM1OTM3CisgMjUgfCAxNzk2ODUwIHwg MzU5MzcKKyAyNiB8IDE4Njg3MjQgfCAzNTkzNworIDI3IHwgMTk0MDU5OCB8IDM1OTM3CisgMjgg fCAyMDEyNDcyIHwgMzU5MzcKKyAyOSB8IDIwODQzNDYgfCAzNTkzNworKDMwIHJvd3MpCisKK0RS T1AgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQKaW5kZXggOTEwODlhYzIxNS4uNjM3MDUwNDM3NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE1MSw2ICsxNTEsNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGlu ZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxlX2Fz eW5jX2FwcGVuZCAgICAgICAgICAgIHwgb24KICBlbmFibGVfYml0bWFwc2NhbiAgICAgICAgICAg ICAgfCBvbgogIGVuYWJsZV9kaXN0aW5jdF9yZW9yZGVyaW5nICAgICB8IG9uCisgZW5hYmxlX2Vh Z2VyX2FnZ3JlZ2F0ZSAgICAgICAgIHwgb2ZmCiAgZW5hYmxlX2dhdGhlcm1lcmdlICAgICAgICAg ICAgIHwgb24KICBlbmFibGVfZ3JvdXBfYnlfcmVvcmRlcmluZyAgICAgfCBvbgogIGVuYWJsZV9o YXNoYWdnICAgICAgICAgICAgICAgICB8IG9uCkBAIC0xNzEsNyArMTcyLDcgQEAgc2VsZWN0IG5h bWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwog IGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxlX3NvcnQgICAgICAg ICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAgICAgICAgICAgICAgfCBvbgot KDIzIHJvd3MpCisoMjQgcm93cykKIAogLS0gVGhlcmUgYXJlIGFsd2F5cyB3YWl0IGV2ZW50IGRl c2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlvblBvaW50CiAtLSBtYXkgYmUg cHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5IHNpbmNlIGxhc3QgcG9zdG1h c3RlciBzdGFydC4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1 bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlCmluZGV4IDFlZGQ5ZTQ1ZWIu LjRmYzIxMGUyZWYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1 bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMTE5LDcgKzEx OSw3IEBAIHRlc3Q6IHBsYW5jYWNoZSBsaW1pdCBwbHBnc3FsIGNvcHkyIHRlbXAgZG9tYWluIHJh bmdlZnVuY3MgcHJlcGFyZSBjb252ZXJzaW9uIHRyCiAjIFRoZSBzdGF0cyB0ZXN0IHJlc2V0cyBz dGF0cywgc28gbm90aGluZyBlbHNlIG5lZWRpbmcgc3RhdHMgYWNjZXNzIGNhbiBiZSBpbgogIyB0 aGlzIGdyb3VwLgogIyAtLS0tLS0tLS0tCi10ZXN0OiBwYXJ0aXRpb25fam9pbiBwYXJ0aXRpb25f cHJ1bmUgcmVsb3B0aW9ucyBoYXNoX3BhcnQgaW5kZXhpbmcgcGFydGl0aW9uX2FnZ3JlZ2F0ZSBw YXJ0aXRpb25faW5mbyB0dXBsZXNvcnQgZXhwbGFpbiBjb21wcmVzc2lvbiBtZW1vaXplIHN0YXRz IHByZWRpY2F0ZQordGVzdDogcGFydGl0aW9uX2pvaW4gcGFydGl0aW9uX3BydW5lIHJlbG9wdGlv bnMgaGFzaF9wYXJ0IGluZGV4aW5nIHBhcnRpdGlvbl9hZ2dyZWdhdGUgcGFydGl0aW9uX2luZm8g dHVwbGVzb3J0IGV4cGxhaW4gY29tcHJlc3Npb24gbWVtb2l6ZSBzdGF0cyBwcmVkaWNhdGUgZWFn ZXJfYWdncmVnYXRlCiAKICMgZXZlbnRfdHJpZ2dlciBkZXBlbmRzIG9uIGNyZWF0ZV9hbSBhbmQg Y2Fubm90IHJ1biBjb25jdXJyZW50bHkgd2l0aAogIyBhbnkgdGVzdCB0aGF0IHJ1bnMgRERMCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9lYWdlcl9hZ2dyZWdhdGUuc3FsIGIvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZWFnZXJfYWdncmVnYXRlLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi40MDUwZTRkZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9zcWwvZWFnZXJfYWdncmVnYXRlLnNxbApAQCAtMCwwICsxLDE5MiBAQAorLS0K Ky0tIEVBR0VSIEFHR1JFR0FUSU9OCistLSBUZXN0IHdlIGNhbiBwdXNoIGFnZ3JlZ2F0aW9uIGRv d24gYmVsb3cgam9pbgorLS0KKworLS0gRW5hYmxlIGVhZ2VyIGFnZ3JlZ2F0aW9uLCB3aGljaCBi eSBkZWZhdWx0IGlzIGRpc2FibGVkLgorU0VUIGVuYWJsZV9lYWdlcl9hZ2dyZWdhdGUgVE8gb247 CisKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdDEgKGEgaW50LCBiIGludCwgYyBkb3VibGUgcHJl Y2lzaW9uKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdDIgKGEgaW50LCBiIGludCwgYyBkb3Vi bGUgcHJlY2lzaW9uKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdDMgKGEgaW50LCBiIGludCwg YyBkb3VibGUgcHJlY2lzaW9uKTsKKworSU5TRVJUIElOVE8gZWFnZXJfYWdnX3QxIFNFTEVDVCBp LCBpLCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApaTsKK0lOU0VSVCBJTlRPIGVhZ2Vy X2FnZ190MiBTRUxFQ1QgaSwgaSUxMCwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKWk7 CitJTlNFUlQgSU5UTyBlYWdlcl9hZ2dfdDMgU0VMRUNUIGklMTAsIGklMTAsIGkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMSwgMTAwMClpOworCitBTkFMWVpFIGVhZ2VyX2FnZ190MTsKK0FOQUxZWkUg ZWFnZXJfYWdnX3QyOworQU5BTFlaRSBlYWdlcl9hZ2dfdDM7CisKKworLS0KKy0tIFRlc3QgZWFn ZXIgYWdncmVnYXRpb24gb3ZlciBiYXNlIHJlbAorLS0KKworLS0gUGVyZm9ybSBzY2FuIG9mIGEg dGFibGUsIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0LCBqb2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQor LS0gYW5kIGZpbmFsaXplIHRoZSBhZ2dyZWdhdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RT IE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBl YWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5h OworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2Vy X2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisK Ky0tIFByb2R1Y2UgcmVzdWx0cyB3aXRoIHNvcnRpbmcgYWdncmVnYXRpb24KK1NFVCBlbmFibGVf aGFzaGFnZyBUTyBvZmY7CisKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0 MS5hLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIg T04gdDEuYiA9IHQyLmIgR1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworU0VMRUNUIHQxLmEs IGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0 MS5iID0gdDIuYiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CisKK1JFU0VUIGVuYWJsZV9o YXNoYWdnOworCisKKy0tCistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwK Ky0tCisKKy0tIFBlcmZvcm0gam9pbiBvZiB0YWJsZXMsIGFnZ3JlZ2F0ZSB0aGUgcmVzdWx0LCBq b2luIGl0IHRvIHRoZSBvdGhlciB0YWJsZQorLS0gYW5kIGZpbmFsaXplIHRoZSBhZ2dyZWdhdGlv bi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYyAr IHQzLmMpIEZST00gZWFnZXJfYWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIg PSB0Mi5iIEpPSU4gZWFnZXJfYWdnX3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQIEJZIHQxLmEg T1JERVIgQlkgdDEuYTsKK1NFTEVDVCB0MS5hLCBhdmcodDIuYyArIHQzLmMpIEZST00gZWFnZXJf YWdnX3QxIHQxIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEpPSU4gZWFnZXJf YWdnX3QzIHQzIE9OIHQyLmEgPSB0My5hIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKwor LS0gUHJvZHVjZSByZXN1bHRzIHdpdGggc29ydGluZyBhZ2dyZWdhdGlvbgorU0VUIGVuYWJsZV9o YXNoYWdnIFRPIG9mZjsKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQx LmEsIGF2Zyh0Mi5jICsgdDMuYykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2df dDIgdDIgT04gdDEuYiA9IHQyLmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEg R1JPVVAgQlkgdDEuYSBPUkRFUiBCWSB0MS5hOworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jICsgdDMu YykgRlJPTSBlYWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQy LmIgSk9JTiBlYWdlcl9hZ2dfdDMgdDMgT04gdDIuYSA9IHQzLmEgR1JPVVAgQlkgdDEuYSBPUkRF UiBCWSB0MS5hOworCitSRVNFVCBlbmFibGVfaGFzaGFnZzsKKworCistLQorLS0gVGVzdCB0aGF0 IGVhZ2VyIGFnZ3JlZ2F0aW9uIHdvcmtzIGZvciBvdXRlciBqb2luCistLQorCistLSBFbnN1cmUg YWdncmVnYXRpb24gY2FuIGJlIHB1c2hlZCBkb3duIHRvIHRoZSBub24tbnVsbGFibGUgc2lkZQor RVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9N IGVhZ2VyX2FnZ190MSB0MSBSSUdIVCBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIu YiBHUk9VUCBCWSB0MS5hIE9SREVSIEJZIHQxLmE7CitTRUxFQ1QgdDEuYSwgYXZnKHQyLmMpIEZS T00gZWFnZXJfYWdnX3QxIHQxIFJJR0hUIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0 Mi5iIEdST1VQIEJZIHQxLmEgT1JERVIgQlkgdDEuYTsKKworLS0gRW5zdXJlIGFnZ3JlZ2F0aW9u IGNhbm5vdCBiZSBwdXNoZWQgZG93biB0byB0aGUgbnVsbGFibGUgc2lkZQorRVhQTEFJTiAoVkVS Qk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQyLmIsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2VyX2FnZ190 MSB0MSBMRUZUIEpPSU4gZWFnZXJfYWdnX3QyIHQyIE9OIHQxLmIgPSB0Mi5iIEdST1VQIEJZIHQy LmIgT1JERVIgQlkgdDIuYjsKK1NFTEVDVCB0Mi5iLCBhdmcodDIuYykgRlJPTSBlYWdlcl9hZ2df dDEgdDEgTEVGVCBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0 Mi5iIE9SREVSIEJZIHQyLmI7CisKKworLS0KKy0tIFRlc3QgdGhhdCBlYWdlciBhZ2dyZWdhdGlv biB3b3JrcyBmb3IgcGFyYWxsZWwgcGxhbnMKKy0tCisKK1NFVCBwYXJhbGxlbF9zZXR1cF9jb3N0 PTA7CitTRVQgcGFyYWxsZWxfdHVwbGVfY29zdD0wOworU0VUIG1pbl9wYXJhbGxlbF90YWJsZV9z Y2FuX3NpemU9MDsKK1NFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19wZXJfZ2F0aGVyPTQ7CisKK0VY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS5hLCBhdmcodDIuYykgRlJPTSBl YWdlcl9hZ2dfdDEgdDEgSk9JTiBlYWdlcl9hZ2dfdDIgdDIgT04gdDEuYiA9IHQyLmIgR1JPVVAg QlkgdDEuYSBPUkRFUiBCWSB0MS5hOworU0VMRUNUIHQxLmEsIGF2Zyh0Mi5jKSBGUk9NIGVhZ2Vy X2FnZ190MSB0MSBKT0lOIGVhZ2VyX2FnZ190MiB0MiBPTiB0MS5iID0gdDIuYiBHUk9VUCBCWSB0 MS5hIE9SREVSIEJZIHQxLmE7CisKK1JFU0VUIHBhcmFsbGVsX3NldHVwX2Nvc3Q7CitSRVNFVCBw YXJhbGxlbF90dXBsZV9jb3N0OworUkVTRVQgbWluX3BhcmFsbGVsX3RhYmxlX3NjYW5fc2l6ZTsK K1JFU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CisKKworRFJPUCBUQUJMRSBl YWdlcl9hZ2dfdDE7CitEUk9QIFRBQkxFIGVhZ2VyX2FnZ190MjsKK0RST1AgVEFCTEUgZWFnZXJf YWdnX3QzOworCisKKy0tCistLSBUZXN0IGVhZ2VyIGFnZ3JlZ2F0aW9uIGZvciBwYXJ0aXRpb253 aXNlIGpvaW4KKy0tCisKKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGFnZ3JlZ2F0ZSwgd2hpY2gg YnkgZGVmYXVsdCBpcyBkaXNhYmxlZC4KK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdh dGUgVE8gdHJ1ZTsKKy0tIEVuYWJsZSBwYXJ0aXRpb253aXNlIGpvaW4sIHdoaWNoIGJ5IGRlZmF1 bHQgaXMgZGlzYWJsZWQuCitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbiBUTyB0cnVlOwor CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjEoeCBpbnQsIHkgaW50KSBQQVJUSVRJT04gQlkg UkFOR0UoeCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYjFfcDEgUEFSVElUSU9OIE9GIGVh Z2VyX2FnZ190YWIxIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBl YWdlcl9hZ2dfdGFiMV9wMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYjEgRk9SIFZBTFVFUyBG Uk9NICgxMCkgVE8gKDIwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMV9wMyBQQVJUSVRJ T04gT0YgZWFnZXJfYWdnX3RhYjEgRk9SIFZBTFVFUyBGUk9NICgyMCkgVE8gKDMwKTsKK0NSRUFU RSBUQUJMRSBlYWdlcl9hZ2dfdGFiMih4IGludCwgeSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSh5 KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiMl9wMSBQQVJUSVRJT04gT0YgZWFnZXJfYWdn X3RhYjIgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2Fn Z190YWIyX3AyIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVTIEZST00gKDEw KSBUTyAoMjApOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190YWIyX3AzIFBBUlRJVElPTiBPRiBl YWdlcl9hZ2dfdGFiMiBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAoMzApOworSU5TRVJUIElOVE8g ZWFnZXJfYWdnX3RhYjEgU0VMRUNUIGkgJSAzMCwgaSAlIDIwIEZST00gZ2VuZXJhdGVfc2VyaWVz KDAsIDI5OSwgMikgaTsKK0lOU0VSVCBJTlRPIGVhZ2VyX2FnZ190YWIyIFNFTEVDVCBpICUgMjAs IGkgJSAzMCBGUk9NIGdlbmVyYXRlX3NlcmllcygwLCAyOTksIDMpIGk7CisKK0FOQUxZWkUgZWFn ZXJfYWdnX3RhYjE7CitBTkFMWVpFIGVhZ2VyX2FnZ190YWIyOworCistLSBXaGVuIEdST1VQIEJZ IGNsYXVzZSBtYXRjaGVzOyBmdWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBw YXJ0aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3Vt KHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0 MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7CitTRUxFQ1Qg dDEueCwgc3VtKHQxLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9h Z2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBHUk9VUCBCWSB0MS54IE9SREVSIEJZIHQxLng7 CisKKy0tIEdST1VQIEJZIGhhdmluZyBvdGhlciBtYXRjaGluZyBrZXkKK0VYUExBSU4gKFZFUkJP U0UsIENPU1RTIE9GRikKK1NFTEVDVCB0Mi55LCBzdW0odDEueSksIGNvdW50KCopIEZST00gZWFn ZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQ IEJZIHQyLnkgT1JERVIgQlkgdDIueTsKK1NFTEVDVCB0Mi55LCBzdW0odDEueSksIGNvdW50KCop IEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190YWIyIHQyIFdIRVJFIHQxLnggPSB0 Mi55IEdST1VQIEJZIHQyLnkgT1JERVIgQlkgdDIueTsKKworLS0gV2hlbiBHUk9VUCBCWSBjbGF1 c2UgZG9lcyBub3QgbWF0Y2g7IHBhcnRpYWwgYWdncmVnYXRpb24gaXMgcGVyZm9ybWVkIGZvciBl YWNoIHBhcnRpdGlvbi4KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0Mi54 LCBzdW0odDEueCksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYjEgdDEsIGVhZ2VyX2FnZ190 YWIyIHQyIFdIRVJFIHQxLnggPSB0Mi55IEdST1VQIEJZIHQyLnggSEFWSU5HIGF2Zyh0MS54KSA+ IDEwIE9SREVSIEJZIHQyLng7CitTRUxFQ1QgdDIueCwgc3VtKHQxLngpLCBjb3VudCgqKSBGUk9N IGVhZ2VyX2FnZ190YWIxIHQxLCBlYWdlcl9hZ2dfdGFiMiB0MiBXSEVSRSB0MS54ID0gdDIueSBH Uk9VUCBCWSB0Mi54IEhBVklORyBhdmcodDEueCkgPiAxMCBPUkRFUiBCWSB0Mi54OworCistLSBD aGVjayB3aXRoIGVhZ2VyIGFnZ3JlZ2F0aW9uIG92ZXIgam9pbiByZWwKKy0tIGZ1bGwgYWdncmVn YXRpb24KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0MS54LCBzdW0odDIu eSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBP TiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQ IEJZIHQxLnggT1JERVIgQlkgdDEueDsKK1NFTEVDVCB0MS54LCBzdW0odDIueSArIHQzLnkpIEZS T00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0gdDIu eCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQxLnggT1JE RVIgQlkgdDEueDsKKworLS0gcGFydGlhbCBhZ2dyZWdhdGlvbgorU0VUIGVuYWJsZV9oYXNoYWdn IFRPIG9mZjsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCB0My55LCBzdW0o dDIueSArIHQzLnkpIEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0 MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdS T1VQIEJZIHQzLnkgT1JERVIgQlkgdDMueTsKK1NFTEVDVCB0My55LCBzdW0odDIueSArIHQzLnkp IEZST00gZWFnZXJfYWdnX3RhYjEgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiMSB0MiBPTiB0MS54ID0g dDIueCBKT0lOIGVhZ2VyX2FnZ190YWIxIHQzIE9OIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkg T1JERVIgQlkgdDMueTsKK1JFU0VUIGVuYWJsZV9oYXNoYWdnOworCitEUk9QIFRBQkxFIGVhZ2Vy X2FnZ190YWIxOworRFJPUCBUQUJMRSBlYWdlcl9hZ2dfdGFiMjsKKworCistLQorLS0gVGVzdCB3 aXRoIG11bHRpLWxldmVsIHBhcnRpdGlvbmluZyBzY2hlbWUKKy0tCitDUkVBVEUgVEFCTEUgZWFn ZXJfYWdnX3RhYl9tbCh4IGludCwgeSBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSh4KTsKK0NSRUFU RSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AxIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21s IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwKTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFi X21sX3AyIFBBUlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sIEZPUiBWQUxVRVMgRlJPTSAoMTAp IFRPICgyMCkgUEFSVElUSU9OIEJZIFJBTkdFKHgpOworQ1JFQVRFIFRBQkxFIGVhZ2VyX2FnZ190 YWJfbWxfcDJfczEgUEFSVElUSU9OIE9GIGVhZ2VyX2FnZ190YWJfbWxfcDIgRk9SIFZBTFVFUyBG Uk9NICgxMCkgVE8gKDE1KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AyX3MyIFBB UlRJVElPTiBPRiBlYWdlcl9hZ2dfdGFiX21sX3AyIEZPUiBWQUxVRVMgRlJPTSAoMTUpIFRPICgy MCk7CitDUkVBVEUgVEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wMyBQQVJUSVRJT04gT0YgZWFnZXJf YWdnX3RhYl9tbCBGT1IgVkFMVUVTIEZST00gKDIwKSBUTyAoMzApIFBBUlRJVElPTiBCWSBSQU5H RSh4KTsKK0NSRUFURSBUQUJMRSBlYWdlcl9hZ2dfdGFiX21sX3AzX3MxIFBBUlRJVElPTiBPRiBl YWdlcl9hZ2dfdGFiX21sX3AzIEZPUiBWQUxVRVMgRlJPTSAoMjApIFRPICgyNSk7CitDUkVBVEUg VEFCTEUgZWFnZXJfYWdnX3RhYl9tbF9wM19zMiBQQVJUSVRJT04gT0YgZWFnZXJfYWdnX3RhYl9t bF9wMyBGT1IgVkFMVUVTIEZST00gKDI1KSBUTyAoMzApOworSU5TRVJUIElOVE8gZWFnZXJfYWdn X3RhYl9tbCBTRUxFQ1QgaSAlIDMwLCBpICUgMzAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAw MCkgaTsKKworQU5BTFlaRSBlYWdlcl9hZ2dfdGFiX21sOworCistLSBXaGVuIEdST1VQIEJZIGNs YXVzZSBtYXRjaGVzOyBmdWxsIGFnZ3JlZ2F0aW9uIGlzIHBlcmZvcm1lZCBmb3IgZWFjaCBwYXJ0 aXRpb24uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQy LnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFi X21sIHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKK1NFTEVD VCB0MS54LCBzdW0odDIueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lO IGVhZ2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggR1JPVVAgQlkgdDEueCBPUkRFUiBC WSB0MS54OworCistLSBXaGVuIEdST1VQIEJZIGNsYXVzZSBkb2VzIG5vdCBtYXRjaDsgcGFydGlh bCBhZ2dyZWdhdGlvbiBpcyBwZXJmb3JtZWQgZm9yIGVhY2ggcGFydGl0aW9uLgorRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQxLnksIHN1bSh0Mi55KSwgY291bnQoKikgRlJP TSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdnX3RhYl9tbCB0MiBPTiB0MS54ID0g dDIueCBHUk9VUCBCWSB0MS55IE9SREVSIEJZIHQxLnk7CitTRUxFQ1QgdDEueSwgc3VtKHQyLnkp LCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9JTiBlYWdlcl9hZ2dfdGFiX21s IHQyIE9OIHQxLnggPSB0Mi54IEdST1VQIEJZIHQxLnkgT1JERVIgQlkgdDEueTsKKworLS0gQ2hl Y2sgd2l0aCBlYWdlciBhZ2dyZWdhdGlvbiBvdmVyIGpvaW4gcmVsCistLSBmdWxsIGFnZ3JlZ2F0 aW9uCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgdDEueCwgc3VtKHQyLnkg KyB0My55KSwgY291bnQoKikgRlJPTSBlYWdlcl9hZ2dfdGFiX21sIHQxIEpPSU4gZWFnZXJfYWdn X3RhYl9tbCB0MiBPTiB0MS54ID0gdDIueCBKT0lOIGVhZ2VyX2FnZ190YWJfbWwgdDMgb24gdDIu eCA9IHQzLnggR1JPVVAgQlkgdDEueCBPUkRFUiBCWSB0MS54OworU0VMRUNUIHQxLngsIHN1bSh0 Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVhZ2Vy X2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQzIG9u IHQyLnggPSB0My54IEdST1VQIEJZIHQxLnggT1JERVIgQlkgdDEueDsKKworLS0gcGFydGlhbCBh Z2dyZWdhdGlvbgorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUIHQzLnksIHN1 bSh0Mi55ICsgdDMueSksIGNvdW50KCopIEZST00gZWFnZXJfYWdnX3RhYl9tbCB0MSBKT0lOIGVh Z2VyX2FnZ190YWJfbWwgdDIgT04gdDEueCA9IHQyLnggSk9JTiBlYWdlcl9hZ2dfdGFiX21sIHQz IG9uIHQyLnggPSB0My54IEdST1VQIEJZIHQzLnkgT1JERVIgQlkgdDMueTsKK1NFTEVDVCB0My55 LCBzdW0odDIueSArIHQzLnkpLCBjb3VudCgqKSBGUk9NIGVhZ2VyX2FnZ190YWJfbWwgdDEgSk9J TiBlYWdlcl9hZ2dfdGFiX21sIHQyIE9OIHQxLnggPSB0Mi54IEpPSU4gZWFnZXJfYWdnX3RhYl9t bCB0MyBvbiB0Mi54ID0gdDMueCBHUk9VUCBCWSB0My55IE9SREVSIEJZIHQzLnk7CisKK0RST1Ag VEFCTEUgZWFnZXJfYWdnX3RhYl9tbDsKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggZTFj NGY5MTNmOC4uOTViZTcwMWVjMyAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQxLDYg KzQxLDcgQEAgQWZ0ZXJUcmlnZ2Vyc1RhYmxlRGF0YQogQWZ0ZXJUcmlnZ2Vyc1RyYW5zRGF0YQog QWdnCiBBZ2dDbGF1c2VDb3N0cworQWdnQ2xhdXNlSW5mbwogQWdnSW5mbwogQWdnUGF0aAogQWdn U3BsaXQKQEAgLTEwNjUsNiArMTA2Niw3IEBAIEdyYW50VGFyZ2V0VHlwZQogR3JvdXAKIEdyb3Vw QnlPcmRlcmluZwogR3JvdXBDbGF1c2UKK0dyb3VwRXhwckluZm8KIEdyb3VwUGF0aAogR3JvdXBQ YXRoRXh0cmFEYXRhCiBHcm91cFJlc3VsdFBhdGgKQEAgLTEyOTcsNyArMTI5OSw2IEBAIEpvaW4K IEpvaW5Db3N0V29ya3NwYWNlCiBKb2luRG9tYWluCiBKb2luRXhwcgotSm9pbkhhc2hFbnRyeQog Sm9pblBhdGgKIEpvaW5QYXRoRXh0cmFEYXRhCiBKb2luU3RhdGUKQEAgLTIzODMsMTMgKzIzODQs MTcgQEAgUmVpbmRleE9iamVjdFR5cGUKIFJlaW5kZXhQYXJhbXMKIFJlaW5kZXhTdG10CiBSZWlu ZGV4VHlwZQorUmVsQWdnSW5mbwogUmVsRmlsZUxvY2F0b3IKIFJlbEZpbGVMb2NhdG9yQmFja2Vu ZAogUmVsRmlsZU51bWJlcgorUmVsSGFzaEVudHJ5CiBSZWxJZENhY2hlRW50CiBSZWxJZFRvVHlw ZUlkQ2FjaGVFbnRyeQogUmVsSW5mbwogUmVsSW5mb0FycgorUmVsSW5mb0xpc3QKK1JlbEluZm9M aXN0SW5mbwogUmVsTWFwRmlsZQogUmVsTWFwcGluZwogUmVsT3B0SW5mbwotLSAKMi40My4wCgo= --0000000000008391a90629bd5bb2--