Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nK7L4-0003ZW-KI for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Feb 2022 23:34:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nK7KX-00070D-LR for pgsql-hackers@arkaria.postgresql.org; Tue, 15 Feb 2022 23:33:57 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nK7KW-000703-7y for pgsql-hackers@lists.postgresql.org; Tue, 15 Feb 2022 23:33:57 +0000 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nK7KI-0000Xi-S6 for pgsql-hackers@postgresql.org; Tue, 15 Feb 2022 23:33:54 +0000 Received: by mail-wm1-x32e.google.com with SMTP id y6-20020a7bc186000000b0037bdc5a531eso2015202wmi.0 for ; Tue, 15 Feb 2022 15:33:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to; bh=GsoBIM+ho7BwCOAJOBFWu8oH7PwZ0Jq+FGrcZOqIxRg=; b=i2XuUNBgpqfgwqZVnUqPjL6AapdGNZExtSRXLh8r13ZWn0djJS6fuycRzX1np4S0Wv wmdGa7GsLcMHQLSZ9BH0CLVxJSy6iUxGbSxae1QYejKGx8AlkNcD7x6aeX7rrUWZiO9z GwZ8YffgagiNzwvXu/cCmE4w8+2ew/C056IuCQOz21GJVyErmRigs0kKo4Dr4eoRvx/s BEstPsRe8RhEPMGbAR1lyXbshvDxg8ZHzZsTjA8ofEZlbQRCR/83bKXQ0Ii7aSKIk6E+ ZwEEv4zJRSx5hOzy7VukEJ/QRXQEpY7KnTTJJOlBYWZpxknnN2eFVrbKEFUisSVi1fBA pyfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to; bh=GsoBIM+ho7BwCOAJOBFWu8oH7PwZ0Jq+FGrcZOqIxRg=; b=wFzhw4sZCv9qQsdiEd1nSvPWMxctu/4xunRRgwTpeCxyNZb75yjhdm0iLApgpLuD8e VJzBJLyEuZDjGD2W3Sp45jEBjGJmdobtOxEuJtBVaKFqGo4g/MuHnRfd9eZJJq518gMr o8nfGx9V6Y7zYsi4SeiMh/A8bqnWPiarjvY+APMBh/Lg2GEwtxJaBwAAxAiT8IRas3Fu DglFKodspyqYwCcDs6nRgwaUybaa3TzZhfDfAVHNpxP9h4KY1K68VhHxO5t53uppFEOm zx40I8BD9YHqWJQNDKNErW0dPp/aIhixwUt3Whk9MQw8TablcL8nLVy44MnF1gQiKl2A 9Pxg== X-Gm-Message-State: AOAM532B/2wIySHE0gqsNwPcQOx3E2OaPntz7bZ4guPGhmpbYtWiboBn w1VP2Nmhstt1ebphg+bX/NBvh0mMqwYlrHNhOVeva3C5Qn3SLfmAU0UemKEhwn20Qm8qV9xGKTd 6c2aCxbuQ6JseeLsaHTwHG6r0UCk9cUAgYjpMgCPsoFWuLQl8YLV63APlHW0QZJJPi3tMVt8FdE WxPclkt0NMH6nv403fP/fbcRd0/NlGHSHQALxo X-Google-Smtp-Source: ABdhPJy0rFmtkfqwVJgCM70d0uv8FbRUSvwg0lHsduqspyfJ+GTNK9zsD8R8facxK00gj+L11Vp86A== X-Received: by 2002:a05:600c:14c3:b0:37b:f051:b29e with SMTP id i3-20020a05600c14c300b0037bf051b29emr158331wmh.165.1644968021076; Tue, 15 Feb 2022 15:33:41 -0800 (PST) Received: from [10.137.0.18] (ip-86-49-251-241.net.upcbroadband.cz. [86.49.251.241]) by smtp.gmail.com with ESMTPSA id az21sm15984324wmb.11.2022.02.15.15.33.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 15 Feb 2022 15:33:40 -0800 (PST) Content-Type: multipart/mixed; boundary="------------tRh04vKPEyft6lLu0pa367jO" Message-ID: Date: Wed, 16 Feb 2022 00:33:37 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: Column Filtering in Logical Replication Content-Language: en-US To: Peter Eisentraut , Alvaro Herrera Cc: Justin Pryzby , Amit Kapila , "houzj.fnst@fujitsu.com" , Rahila Syed , Peter Smith , pgsql-hackers@postgresql.org References: <202201120041.p24wvsfcsope@alvherre.pgsql> From: Tomas Vondra In-Reply-To: X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------tRh04vKPEyft6lLu0pa367jO Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, Here's an updated version of the patch, rebased to current master. Parts 0002 and 0003 include various improvements based on review by me and another one by Peter Smith [1]. Part 0003 reworks and significantly extends the TAP test, to exercise various cases related to changes of replica identity etc. discussed in this thread. Some of the tests however still fail, because the behavior was not updated - I'll work on that once we agree what the expected behavior is. 1) partitioning with pubviaroot=true The main set of failures is related to partitions with different replica identities and (pubviaroot=true), some of which may be mismatching the column list. There are multiple such test cases, depending on how the inconsistency is introduced - it may be there from the beginning, the column filter may be modified after adding the partitioned table to the publication, etc. I think the expected behavior is to prohibit such cases from happening, by cross-checking the column filter when adding the partitioned table to publication, attaching a partition or changing a column filter. 2) merging multiple column filters When the table has multiple column filters (in different publications), we need to merge them. Which works, except that FOR ALL TABLES [IN SCHEMA] needs to be handled as "has no column filter" (and replicates everything). 3) partitioning with pubivaroot=false When a partitioned table is added with (pubviaroot=false), it should not be subject to column filter on the parent relation, which is the same behavior used by the row filtering patch. regards [1] https://www.postgresql.org/message-id/CAHut%2BPtc7Rh187eQKrxdUmUNWyfxz7OkhYAX%3DAW411Qwxya0LQ%40mail.gmail.com -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------tRh04vKPEyft6lLu0pa367jO Content-Type: text/x-patch; charset=UTF-8; name="0001-Support-column-lists-for-logical-replicatio-20220216.patch" Content-Disposition: attachment; filename*0="0001-Support-column-lists-for-logical-replicatio-20220216.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAxZDU5NTFjMjZhMjgyMWQyMGM5OTU5NzhlYWE0MDI4YTM5ZjU2NTY1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogTW9uLCAxNCBGZWIgMjAyMiAxNzoxMzowNCArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMS80XSBTdXBwb3J0IGNvbHVtbiBsaXN0cyBmb3IgbG9naWNhbCByZXBs aWNhdGlvbiBvZiB0YWJsZXMKCkFkZCB0aGUgY2FwYWJpbGl0eSBvZiBzcGVjaWZ5aW5nIGEg Y29sdW1uIGxpc3QgZm9yIGluZGl2aWR1YWwgdGFibGVzIGFzCnBhcnQgb2YgYSBwdWJsaWNh dGlvbi4gIENvbHVtbnMgbm90IGluIHRoZSBsaXN0IGFyZSBub3QgcHVibGlzaGVkLiAgVGhp cwplbmFibGVzIHJlcGxpY2F0aW5nIHRvIGEgdGFibGUgd2l0aCBvbmx5IGEgc3Vic2V0IG9m IHRoZSBjb2x1bW5zLgoKSWYgbm8gY29sdW1uIGxpc3QgaXMgc3BlY2lmaWVkLCBhbGwgdGhl IGNvbHVtbnMgYXJlIHJlcGxpY2F0ZWQsIGFzCnByZXZpb3VzbHkKCkF1dGhvcjogUmFoaWxh IFN5ZWQgPHJhaGlsYXN5ZWQ5MEBnbWFpbC5jb20+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9z dGdyLmVzL20vQ0FIMkwyOHZkZEJfTkZkUlZwdXlSQkpFQldqejRCU3lUQj1fZWt0TlJIOE5K MWpmOTVnQG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwg ICAgICAgICAgICAgICAgICB8ICAxMyArCiBkb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbCAg ICAgICAgICAgICAgICAgIHwgICA0ICstCiBkb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3B1Ymxp Y2F0aW9uLnNnbWwgICAgIHwgIDIwICstCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJs aWNhdGlvbi5zZ21sICAgIHwgIDExICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmMgICAgICAgIHwgMzUzICsrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgICAgIHwgIDY3ICsrKy0KIHNyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAgICAgICAgfCAgODcgKysrKy0KIHNyYy9i YWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jh Y2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFj a2VuZC9wYXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgIHwgIDYwICsrKy0KIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAgfCAgNjAgKystLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyB8IDExOSArKysrKyst CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIHwgMTE4ICsr KysrKy0KIHNyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgfCAg NDEgKystCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgIHwg ICAxICsKIHNyYy9iaW4vcHNxbC9kZXNjcmliZS5jICAgICAgICAgICAgICAgICAgICAgfCAg MjYgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgfCAg IDYgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCAgICB8ICAg MyArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgIHwgICA0 ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCAgICAgIHwgICA2 ICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgIHwgIDU5 ICsrKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCAgICAgICAgfCAg MzkgKystCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjhfY29sdW1uX2xpc3QucGwgIHwg MTY0ICsrKysrKysrKwogMjMgZmlsZXMgY2hhbmdlZCwgMTE3OSBpbnNlcnRpb25zKCspLCA4 NCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMjhfY29sdW1uX2xpc3QucGwKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0 YWxvZ3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCmluZGV4IDVhMTYyN2Ez OTQxLi5mMjBjYjJiNzhhYiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNn bWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKQEAgLTYzMjUsNiArNjMyNSwx OSBAQCBTQ1JBTS1TSEEtMjU2JDxyZXBsYWNlYWJsZT4mbHQ7aXRlcmF0aW9uIGNvdW50Jmd0 OzwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT4mbAogICAgICAgIFJlZmVyZW5jZSB0byBy ZWxhdGlvbgogICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgIDwvcm93PgorCisgICAgIDxy b3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9s ZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5wcmF0dHJzPC9z dHJ1Y3RmaWVsZD4gPHR5cGU+aW50MnZlY3RvcjwvdHlwZT4KKyAgICAgICAocmVmZXJlbmNl cyA8bGluayBsaW5rZW5kPSJjYXRhbG9nLXBnLWF0dHJpYnV0ZSI+PHN0cnVjdG5hbWU+cGdf YXR0cmlidXRlPC9zdHJ1Y3RuYW1lPjwvbGluaz4uPHN0cnVjdGZpZWxkPmF0dG51bTwvc3Ry dWN0ZmllbGQ+KQorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVGhpcyBp cyBhbiBhcnJheSBvZiB2YWx1ZXMgdGhhdCBpbmRpY2F0ZXMgd2hpY2ggdGFibGUgY29sdW1u cyBhcmUKKyAgICAgICBwYXJ0IG9mIHRoZSBwdWJsaWNhdGlvbi4gIEZvciBleGFtcGxlIGEg dmFsdWUgb2YgPGxpdGVyYWw+MSAzPC9saXRlcmFsPgorICAgICAgIHdvdWxkIG1lYW4gdGhh dCB0aGUgZmlyc3QgYW5kIHRoZSB0aGlyZCB0YWJsZSBjb2x1bW5zIGFyZSBwdWJsaXNoZWQu CisgICAgICAgQSBudWxsIHZhbHVlIGluZGljYXRlcyB0aGF0IGFsbCBhdHRyaWJ1dGVzIGFy ZSBwdWJsaXNoZWQuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CiAgICAg PC90Ym9keT4KICAgIDwvdGdyb3VwPgogICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3Byb3RvY29sLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAppbmRl eCAxYzVhYjAwODc5MS4uOTE1NDFjZDhjZjcgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9w cm90b2NvbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCkBAIC03MDA1 LDcgKzcwMDUsOSBAQCBSZWxhdGlvbgogPC9saXN0aXRlbT4KIDwvdmFybGlzdGVudHJ5Pgog PC92YXJpYWJsZWxpc3Q+Ci0gICAgICAgIE5leHQsIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSBw YXJ0IGFwcGVhcnMgZm9yIGVhY2ggY29sdW1uIChleGNlcHQgZ2VuZXJhdGVkIGNvbHVtbnMp OgorICAgICAgICBOZXh0LCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgcGFydCBhcHBlYXJzIGZv ciBlYWNoIGNvbHVtbiAoZXhjZXB0CisgICAgICAgIGdlbmVyYXRlZCBjb2x1bW5zIGFuZCBv dGhlciBjb2x1bW5zIHRoYXQgZG9uJ3QgYXBwZWFyIGluIHRoZSBjb2x1bW4KKyAgICAgICAg ZmlsdGVyIGxpc3QsIGZvciB0YWJsZXMgdGhhdCBoYXZlIG9uZSk6CiA8dmFyaWFibGVsaXN0 PgogPHZhcmxpc3RlbnRyeT4KIDx0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3Jl Zi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJs aWNhdGlvbi5zZ21sCmluZGV4IDdjN2MyN2JmN2NlLi5hODU1NzQyMTRhNSAxMDA2NDQKLS0t IGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9z cmMvc2dtbC9yZWYvYWx0ZXJfcHVibGljYXRpb24uc2dtbApAQCAtMjUsMTIgKzI1LDEzIEBA IEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1l PC9yZXBsYWNlYWJsZT4gQUREIDxyZXBsYWNlCiBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFNFVCA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJs ZT4gWywgLi4uXQogQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBEUk9QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5wdWJsaWNhdGlvbl9vYmplY3Q8L3JlcGxhY2VhYmxlPiBbLCAuLi5dCiBBTFRF UiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVw bGFjZWFibGU+IFNFVCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNh dGlvbl9wYXJhbWV0ZXI8L3JlcGxhY2VhYmxlPiBbPSA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+dmFsdWU8L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKQorQUxURVIgUFVCTElD QVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxl PiBBTFRFUiBUQUJMRSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRp b25fb2JqZWN0PC9yZXBsYWNlYWJsZT4gU0VUIENPTFVNTlMgeyAoIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uXSApIHwgQUxMIH0K IEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1l PC9yZXBsYWNlYWJsZT4gT1dORVIgVE8geyA8cmVwbGFjZWFibGU+bmV3X293bmVyPC9yZXBs YWNlYWJsZT4gfCBDVVJSRU5UX1JPTEUgfCBDVVJSRU5UX1VTRVIgfCBTRVNTSU9OX1VTRVIg fQogQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5h bWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8gPHJlcGxhY2VhYmxlPm5ld19uYW1lPC9yZXBs YWNlYWJsZT4KIAogPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+cHVibGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJsZT4gaXMgb25lIG9mOjwvcGhyYXNl PgogCi0gICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbLCAuLi4gXQorICAgIFRBQkxFIFsg T05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBs YWNlYWJsZT4gWyAqIF0gWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1 bW5fbmFtZTwvcmVwbGFjZWFibGU+LCBbLCAuLi4gXSApIF0gWywgLi4uIF0KICAgICBBTEwg VEFCTEVTIElOIFNDSEVNQSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zY2hl bWFfbmFtZTwvcmVwbGFjZWFibGU+IHwgQ1VSUkVOVF9TQ0hFTUEgfSBbLCAuLi4gXQogPC9z eW5vcHNpcz4KICA8L3JlZnN5bm9wc2lzZGl2PgpAQCAtNjIsNiArNjMsMTEgQEAgQUxURVIg UFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxh Y2VhYmxlPiBSRU5BTUUgVE8gPHIKICAgIGNvbW1hbmQgcmV0YWluIHRoZWlyIHByZXZpb3Vz IHNldHRpbmdzLgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBUaGUgPGxpdGVyYWw+QUxU RVIgVEFCTEUgLi4uIFNFVCBDT0xVTU5TPC9saXRlcmFsPiB2YXJpYW50IGFsbG93cyBjaGFu Z2luZworICAgdGhlIHNldCBvZiBjb2x1bW5zIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBw dWJsaWNhdGlvbi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogICAgVGhlIHJlbWFpbmluZyB2 YXJpYW50cyBjaGFuZ2UgdGhlIG93bmVyIGFuZCB0aGUgbmFtZSBvZiB0aGUgcHVibGljYXRp b24uCiAgIDwvcGFyYT4KQEAgLTExMCw2ICsxMTYsOCBAQCBBTFRFUiBQVUJMSUNBVElPTiA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFJFTkFN RSBUTyA8cgogICAgICAgc3BlY2lmaWVkLCB0aGUgdGFibGUgYW5kIGFsbCBpdHMgZGVzY2Vu ZGFudCB0YWJsZXMgKGlmIGFueSkgYXJlCiAgICAgICBhZmZlY3RlZC4gIE9wdGlvbmFsbHks IDxsaXRlcmFsPio8L2xpdGVyYWw+IGNhbiBiZSBzcGVjaWZpZWQgYWZ0ZXIgdGhlIHRhYmxl CiAgICAgICBuYW1lIHRvIGV4cGxpY2l0bHkgaW5kaWNhdGUgdGhhdCBkZXNjZW5kYW50IHRh YmxlcyBhcmUgaW5jbHVkZWQuCisgICAgICBPcHRpb25hbGx5LCBhIGNvbHVtbiBsaXN0IGNh biBiZSBzcGVjaWZpZWQuICBTZWUgPHhyZWYKKyAgICAgIGxpbmtlbmQ9InNxbC1jcmVhdGVw dWJsaWNhdGlvbiIvPiBmb3IgZGV0YWlscy4KICAgICAgPC9wYXJhPgogICAgIDwvbGlzdGl0 ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KQEAgLTE2NCw5ICsxNzIsMTUgQEAgQUxURVIgUFVC TElDQVRJT04gbm9pbnNlcnQgU0VUIChwdWJsaXNoID0gJ3VwZGF0ZSwgZGVsZXRlJyk7CiAg IDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEFkZCBzb21lIHRhYmxlcyB0byB0aGUgcHVibGlj YXRpb246CisgICBBZGQgdGFibGVzIHRvIHRoZSBwdWJsaWNhdGlvbjoKKzxwcm9ncmFtbGlz dGluZz4KK0FMVEVSIFBVQkxJQ0FUSU9OIG15cHVibGljYXRpb24gQUREIFRBQkxFIHVzZXJz ICh1c2VyX2lkLCBmaXJzdG5hbWUpLCBkZXBhcnRtZW50czsKKzwvcHJvZ3JhbWxpc3Rpbmc+ PC9wYXJhPgorCisgIDxwYXJhPgorICAgQ2hhbmdlIHRoZSBzZXQgb2YgY29sdW1ucyBwdWJs aXNoZWQgZm9yIGEgdGFibGU6CiA8cHJvZ3JhbWxpc3Rpbmc+Ci1BTFRFUiBQVUJMSUNBVElP TiBteXB1YmxpY2F0aW9uIEFERCBUQUJMRSB1c2VycywgZGVwYXJ0bWVudHM7CitBTFRFUiBQ VUJMSUNBVElPTiBteXB1YmxpY2F0aW9uIEFMVEVSIFRBQkxFIHVzZXJzIFNFVCBDT0xVTU5T ICh1c2VyX2lkLCBmaXJzdG5hbWUsIGxhc3RuYW1lKTsKIDwvcHJvZ3JhbWxpc3Rpbmc+PC9w YXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVf cHVibGljYXRpb24uc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9u LnNnbWwKaW5kZXggMzg1OTc1YmZhZGQuLmE1OWNkM2Y1MzJhIDEwMDY0NAotLS0gYS9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwKQEAgLTI4LDcgKzI4LDcgQEAgQ1JFQVRF IFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBs YWNlYWJsZT4KIAogPHBocmFzZT53aGVyZSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+cHVibGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJsZT4gaXMgb25lIG9mOjwvcGhyYXNl PgogCi0gICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIi PnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbLCAuLi4gXQorICAgIFRBQkxFIFsg T05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBs YWNlYWJsZT4gWyAqIF0gWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1 bW5fbmFtZTwvcmVwbGFjZWFibGU+LCBbLCAuLi4gXSApIF0gWywgLi4uIF0KICAgICBBTEwg VEFCTEVTIElOIFNDSEVNQSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zY2hl bWFfbmFtZTwvcmVwbGFjZWFibGU+IHwgQ1VSUkVOVF9TQ0hFTUEgfSBbLCAuLi4gXQogPC9z eW5vcHNpcz4KICA8L3JlZnN5bm9wc2lzZGl2PgpAQCAtNzgsNiArNzgsMTUgQEAgQ1JFQVRF IFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBs YWNlYWJsZT4KICAgICAgIHB1YmxpY2F0aW9uLCBzbyB0aGV5IGFyZSBuZXZlciBleHBsaWNp dGx5IGFkZGVkIHRvIHRoZSBwdWJsaWNhdGlvbi4KICAgICAgPC9wYXJhPgogCisgICAgIDxw YXJhPgorICAgICAgV2hlbiBhIGNvbHVtbiBsaXN0IGlzIHNwZWNpZmllZCwgb25seSB0aGUg bGlzdGVkIGNvbHVtbnMgYXJlIHJlcGxpY2F0ZWQ7CisgICAgICBhbnkgb3RoZXIgY29sdW1u cyBhcmUgaWdub3JlZCBmb3IgdGhlIHB1cnBvc2Ugb2YgcmVwbGljYXRpb24gdGhyb3VnaAor ICAgICAgdGhpcyBwdWJsaWNhdGlvbi4gIElmIG5vIGNvbHVtbiBsaXN0IGlzIHNwZWNpZmll ZCwgYWxsIGNvbHVtbnMgb2YgdGhlCisgICAgICB0YWJsZSBhcmUgcmVwbGljYXRlZCB0aHJv dWdoIHRoaXMgcHVibGljYXRpb24sIGluY2x1ZGluZyBhbnkgY29sdW1ucworICAgICAgYWRk ZWQgbGF0ZXIuICBJZiBhIGNvbHVtbiBsaXN0IGlzIHNwZWNpZmllZCwgaXQgbXVzdCBpbmNs dWRlIHRoZSByZXBsaWNhCisgICAgICBpZGVudGl0eSBjb2x1bW5zLgorICAgICA8L3BhcmE+ CisKICAgICAgPHBhcmE+CiAgICAgICBPbmx5IHBlcnNpc3RlbnQgYmFzZSB0YWJsZXMgYW5k IHBhcnRpdGlvbmVkIHRhYmxlcyBjYW4gYmUgcGFydCBvZiBhCiAgICAgICBwdWJsaWNhdGlv bi4gIFRlbXBvcmFyeSB0YWJsZXMsIHVubG9nZ2VkIHRhYmxlcywgZm9yZWlnbiB0YWJsZXMs CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggZTE0Y2EyZjU2MzAu LmFhMTY1NTY5NmY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBA IC00NSwxMyArNDUsMjYgQEAKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKICNpbmNsdWRlICJ1 dGlscy9zeXNjYWNoZS5oIgogCisKK3N0YXRpYyB2b2lkIGNoZWNrX3B1YmxpY2F0aW9uX2Nv bHVtbnMoUHVibGljYXRpb24gKnB1YiwgUmVsYXRpb24gdGFyZ2V0cmVsLAorCQkJCQkJCQkJ ICBCaXRtYXBzZXQgKmNvbHVtbnMpOworc3RhdGljIHZvaWQgcHVibGljYXRpb25fdHJhbnNs YXRlX2NvbHVtbnMoUmVsYXRpb24gdGFyZ2V0cmVsLCBMaXN0ICpjb2x1bW5zLAorCQkJCQkJ CQkJCSAgaW50ICpuYXR0cywgQXR0ck51bWJlciAqKmF0dHJzLAorCQkJCQkJCQkJCSAgQml0 bWFwc2V0ICoqYXR0c2V0KTsKKwogLyoKLSAqIENoZWNrIGlmIHJlbGF0aW9uIGNhbiBiZSBp biBnaXZlbiBwdWJsaWNhdGlvbiBhbmQgdGhyb3dzIGFwcHJvcHJpYXRlCi0gKiBlcnJvciBp ZiBub3QuCisgKiBDaGVjayBpZiByZWxhdGlvbiBjYW4gYmUgaW4gZ2l2ZW4gcHVibGljYXRp b24gYW5kIHRoYXQgdGhlIGNvbHVtbgorICogZmlsdGVyIGlzIHNlbnNpYmxlLCBhbmQgdGhy b3dzIGFwcHJvcHJpYXRlIGVycm9yIGlmIG5vdC4KKyAqCisgKiB0YXJnZXRjb2xzIGlzIHRo ZSBiaXRtYXBzZXQgb2YgYXR0cmlidXRlIG51bWJlcnMgZ2l2ZW4gaW4gdGhlIGNvbHVtbiBs aXN0LAorICogb3IgTlVMTCBpZiBpdCB3YXMgbm90IHNwZWNpZmllZC4KICAqLwogc3RhdGlj IHZvaWQKLWNoZWNrX3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihSZWxhdGlvbiB0YXJnZXRy ZWwpCitjaGVja19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oUHVibGljYXRpb24gKnB1Yiwg UmVsYXRpb24gdGFyZ2V0cmVsLAorCQkJCQkJCSAgIEJpdG1hcHNldCAqY29sdW1ucykKIHsK Kwlib29sCQlyZXBsaWRlbnRmdWxsID0gKHRhcmdldHJlbC0+cmRfcmVsLT5yZWxyZXBsaWRl bnQgPT0gUkVQTElDQV9JREVOVElUWV9GVUxMKTsKKwogCS8qIE11c3QgYmUgYSByZWd1bGFy IG9yIHBhcnRpdGlvbmVkIHRhYmxlICovCiAJaWYgKFJlbGF0aW9uR2V0Rm9ybSh0YXJnZXRy ZWwpLT5yZWxraW5kICE9IFJFTEtJTkRfUkVMQVRJT04gJiYKIAkJUmVsYXRpb25HZXRGb3Jt KHRhcmdldHJlbCktPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKQEAg LTgyLDYgKzk1LDczIEBAIGNoZWNrX3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihSZWxhdGlv biB0YXJnZXRyZWwpCiAJCQkJIGVycm1zZygiY2Fubm90IGFkZCByZWxhdGlvbiBcIiVzXCIg dG8gcHVibGljYXRpb24iLAogCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGFyZ2V0 cmVsKSksCiAJCQkJIGVycmRldGFpbCgiVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRl ZCBmb3IgdW5sb2dnZWQgdGFibGVzLiIpKSk7CisKKwkvKiBNYWtlIHN1cmUgdGhlIGNvbHVt biBsaXN0IGNoZWNrcyBvdXQgKi8KKwlpZiAoY29sdW1ucyAhPSBOVUxMKQorCXsKKwkJLyoK KwkJICogRXZlbiBpZiB0aGUgdXNlciBsaXN0ZWQgYWxsIGNvbHVtbnMgaW4gdGhlIGNvbHVt biBsaXN0LCB3ZSBjYW5ub3QKKwkJICogYWxsb3cgYSBjb2x1bW4gbGlzdCB0byBiZSBzcGVj aWZpZWQgd2hlbiBSRVBMSUNBIElERU5USVRZIGlzIEZVTEw7CisJCSAqIHRoYXQgd291bGQg Y2F1c2UgcHJvYmxlbXMgaWYgYSBuZXcgY29sdW1uIGlzIGFkZGVkIGxhdGVyLCBiZWNhdXNl CisJCSAqIHRoZSBuZXcgY29sdW1uIHdvdWxkIGhhdmUgdG8gYmUgaW5jbHVkZWQgKGJlY2F1 c2Ugb2YgYmVpbmcgcGFydCBvZgorCQkgKiB0aGUgcmVwbGljYSBpZGVudGl0eSkgYnV0IGl0 J3MgdGVjaG5pY2FsbHkgbm90IGFsbG93ZWQgKGJlY2F1c2Ugb2YKKwkJICogbm90IGJlaW5n IGluIHRoZSBwdWJsaWNhdGlvbidzIGNvbHVtbiBsaXN0IHlldCkuICBTbyByZWplY3QgdGhp cworCQkgKiBjYXNlIGFsdG9nZXRoZXIuCisJCSAqLworCQlpZiAocmVwbGlkZW50ZnVsbCkK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAorCQkJCQllcnJtc2coImludmFsaWQgY29sdW1uIGxpc3QgZm9yIHB1Ymxp c2hpbmcgcmVsYXRpb24gXCIlc1wiIiwKKwkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHRhcmdldHJlbCkpLAorCQkJCQllcnJkZXRhaWwoIkNhbm5vdCBzcGVjaWZ5IGEgY29s dW1uIGxpc3Qgb24gcmVsYXRpb25zIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxMLiIpKTsK KworCQljaGVja19wdWJsaWNhdGlvbl9jb2x1bW5zKHB1YiwgdGFyZ2V0cmVsLCBjb2x1bW5z KTsKKwl9Cit9CisKKy8qCisgKiBFbmZvcmNlIHRoYXQgdGhlIGNvbHVtbiBsaXN0IGNhbiBv bmx5IGxlYXZlIG91dCBjb2x1bW5zIHRoYXQgYXJlbid0CisgKiBmb3JjZWQgdG8gYmUgc2Vu dC4KKyAqCisgKiBObyBjb2x1bW4gY2FuIGJlIGV4Y2x1ZGVkIGlmIFJFUExJQ0EgSURFTlRJ VFkgaXMgRlVMTCAoc2luY2UgYWxsIHRoZQorICogY29sdW1ucyBuZWVkIHRvIGJlIHNlbnQg cmVnYXJkbGVzcyk7IGFuZCBpbiBvdGhlciBjYXNlcywgdGhlIGNvbHVtbnMgaW4KKyAqIHRo ZSBSRVBMSUNBIElERU5USVRZIGNhbm5vdCBiZSBsZWZ0IG91dC4KKyAqLworc3RhdGljIHZv aWQKK2NoZWNrX3B1YmxpY2F0aW9uX2NvbHVtbnMoUHVibGljYXRpb24gKnB1YiwgUmVsYXRp b24gdGFyZ2V0cmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpCit7CisJaWYgKHRhcmdldHJlbC0+ cmRfcmVsLT5yZWxyZXBsaWRlbnQgPT0gUkVQTElDQV9JREVOVElUWV9GVUxMKQorCQllcmVw b3J0KEVSUk9SLAorCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQp LAorCQkJCWVycm1zZygiY2Fubm90IGNoYW5nZSBjb2x1bW4gc2V0IGZvciByZWxhdGlvbiBc IiVzXCIiLAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpKSwK KwkJCQllcnJkZXRhaWwoIkNhbm5vdCBzcGVjaWZ5IGNvbHVtbiBsaXN0IG9uIHJlbGF0aW9u cyB3aXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTC4iKSk7CisKKwlpZiAocHViLT5wdWJhY3Rp b25zLnB1YnVwZGF0ZSB8fCBwdWItPnB1YmFjdGlvbnMucHViZGVsZXRlKQorCXsKKwkJQml0 bWFwc2V0ICAqaWRhdHRyczsKKwkJaW50CQkJeDsKKworCQlpZGF0dHJzID0gUmVsYXRpb25H ZXRJbmRleEF0dHJCaXRtYXAodGFyZ2V0cmVsLAorCQkJCQkJCQkJCQkgSU5ERVhfQVRUUl9C SVRNQVBfSURFTlRJVFlfS0VZKTsKKworCQkvKgorCQkgKiBXZSBoYXZlIHRvIHRlc3QgbWVt YmVyc2hpcCB0aGUgaGFyZCB3YXksIGJlY2F1c2UgdGhlIHZhbHVlcyByZXR1cm5lZCBieQor CQkgKiBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcCBhcmUgb2Zmc2V0LgorCQkgKi8KKwkJ eCA9IC0xOworCQl3aGlsZSAoKHggPSBibXNfbmV4dF9tZW1iZXIoaWRhdHRycywgeCkpID49 IDApCisJCXsKKwkJCWlmICghYm1zX2lzX21lbWJlcih4ICsgRmlyc3RMb3dJbnZhbGlkSGVh cEF0dHJpYnV0ZU51bWJlciwgY29sdW1ucykpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJ CWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0UpLAorCQkJCQkJZXJy bXNnKCJpbnZhbGlkIGNvbHVtbiBsaXN0IGZvciBwdWJsaXNoaW5nIHJlbGF0aW9uIFwiJXNc IiIsCisJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGFyZ2V0cmVsKSksCisJ CQkJCQllcnJkZXRhaWwoIkFsbCBjb2x1bW5zIGluIFJFUExJQ0EgSURFTlRJVFkgbXVzdCBi ZSBwcmVzZW50IGluIHRoZSBjb2x1bW4gbGlzdC4iKSk7CisJCX0KKworCQlibXNfZnJlZShp ZGF0dHJzKTsKKwl9CiB9CiAKIC8qCkBAIC0yODksNiArMzY5LDkgQEAgcHVibGljYXRpb25f YWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICp0YXJnZXRyZWws CiAJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHRhcmdldHJlbC0+cmVsYXRpb24p OwogCU9pZAkJCXB1YnJlbG9pZDsKIAlQdWJsaWNhdGlvbiAqcHViID0gR2V0UHVibGljYXRp b24ocHViaWQpOworCUJpdG1hcHNldCAgKmF0dHNldCA9IE5VTEw7CisJQXR0ck51bWJlciAq YXR0YXJyYXk7CisJaW50CQkJbmF0dHMgPSAwOwogCU9iamVjdEFkZHJlc3MgbXlzZWxmLAog CQkJCXJlZmVyZW5jZWQ7CiAJTGlzdAkgICAqcmVsaWRzID0gTklMOwpAQCAtMzE0LDcgKzM5 NywxNCBAQCBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlv blJlbEluZm8gKnRhcmdldHJlbCwKIAkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHRh cmdldHJlbC0+cmVsYXRpb24pLCBwdWItPm5hbWUpKSk7CiAJfQogCi0JY2hlY2tfcHVibGlj YXRpb25fYWRkX3JlbGF0aW9uKHRhcmdldHJlbC0+cmVsYXRpb24pOworCS8qIFRyYW5zbGF0 ZSBjb2x1bW4gbmFtZXMgdG8gbnVtYmVycyBhbmQgdmVyaWZ5IHN1aXRhYmlsaXR5ICovCisJ cHVibGljYXRpb25fdHJhbnNsYXRlX2NvbHVtbnModGFyZ2V0cmVsLT5yZWxhdGlvbiwKKwkJ CQkJCQkJICB0YXJnZXRyZWwtPmNvbHVtbnMsCisJCQkJCQkJCSAgJm5hdHRzLCAmYXR0YXJy YXksICZhdHRzZXQpOworCisJY2hlY2tfcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKHB1Yiwg dGFyZ2V0cmVsLT5yZWxhdGlvbiwgYXR0c2V0KTsKKworCWJtc19mcmVlKGF0dHNldCk7CiAK IAkvKiBGb3JtIGEgdHVwbGUuICovCiAJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVl cykpOwpAQCAtMzI3LDYgKzQxNywxNSBAQCBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lk IHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnRhcmdldHJlbCwKIAkJT2JqZWN0SWRHZXRE YXR1bShwdWJpZCk7CiAJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3BycmVsaWQg LSAxXSA9CiAJCU9iamVjdElkR2V0RGF0dW0ocmVsaWQpOworCWlmICh0YXJnZXRyZWwtPmNv bHVtbnMpCisJeworCQlpbnQydmVjdG9yICpwcmF0dHJzOworCisJCXByYXR0cnMgPSBidWls ZGludDJ2ZWN0b3IoYXR0YXJyYXksIG5hdHRzKTsKKwkJdmFsdWVzW0FudW1fcGdfcHVibGlj YXRpb25fcmVsX3ByYXR0cnMgLSAxXSA9IFBvaW50ZXJHZXREYXR1bShwcmF0dHJzKTsKKwl9 CisJZWxzZQorCQludWxsc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzIC0gMV0g PSB0cnVlOwogCiAJdHVwID0gaGVhcF9mb3JtX3R1cGxlKFJlbGF0aW9uR2V0RGVzY3IocmVs KSwgdmFsdWVzLCBudWxscyk7CiAKQEAgLTMzNyw2ICs0MzYsMTMgQEAgcHVibGljYXRpb25f YWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25SZWxJbmZvICp0YXJnZXRyZWws CiAJLyogUmVnaXN0ZXIgZGVwZW5kZW5jaWVzIGFzIG5lZWRlZCAqLwogCU9iamVjdEFkZHJl c3NTZXQobXlzZWxmLCBQdWJsaWNhdGlvblJlbFJlbGF0aW9uSWQsIHB1YnJlbG9pZCk7CiAK KwkvKiBBZGQgZGVwZW5kZW5jeSBvbiB0aGUgY29sdW1ucywgaWYgYW55IGFyZSBsaXN0ZWQg Ki8KKwlmb3IgKGludCBpID0gMDsgaSA8IG5hdHRzOyBpKyspCisJeworCQlPYmplY3RBZGRy ZXNzU3ViU2V0KHJlZmVyZW5jZWQsIFJlbGF0aW9uUmVsYXRpb25JZCwgcmVsaWQsIGF0dGFy cmF5W2ldKTsKKwkJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBE RVBFTkRFTkNZX0FVVE8pOworCX0KKwlwZnJlZShhdHRhcnJheSk7CiAJLyogQWRkIGRlcGVu ZGVuY3kgb24gdGhlIHB1YmxpY2F0aW9uICovCiAJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVu Y2VkLCBQdWJsaWNhdGlvblJlbGF0aW9uSWQsIHB1YmlkKTsKIAlyZWNvcmREZXBlbmRlbmN5 T24oJm15c2VsZiwgJnJlZmVyZW5jZWQsIERFUEVOREVOQ1lfQVVUTyk7CkBAIC0zNjQsNiAr NDcwLDE1NSBAQCBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNh dGlvblJlbEluZm8gKnRhcmdldHJlbCwKIAlyZXR1cm4gbXlzZWxmOwogfQogCisvKgorICog VXBkYXRlIHRoZSBjb2x1bW4gbGlzdCBmb3IgYSByZWxhdGlvbiBpbiBhIHB1YmxpY2F0aW9u LgorICovCit2b2lkCitwdWJsaWNhdGlvbl9zZXRfdGFibGVfY29sdW1ucyhSZWxhdGlvbiBw dWJyZWwsIEhlYXBUdXBsZSBwdWJyZWx0dXAsCisJCQkJCQkJICBSZWxhdGlvbiB0YXJnZXRy ZWwsIExpc3QgKmNvbHVtbnMpCit7CisJQml0bWFwc2V0ICAqYXR0c2V0OworCUF0dHJOdW1i ZXIgKmF0dGFycmF5OworCUhlYXBUdXBsZQljb3B5dHVwOworCWludAkJCW5hdHRzOworCWJv b2wJCW51bGxzW05hdHRzX3BnX3B1YmxpY2F0aW9uX3JlbF07CisJYm9vbAkJcmVwbGFjZXNb TmF0dHNfcGdfcHVibGljYXRpb25fcmVsXTsKKwlEYXR1bQkJdmFsdWVzW05hdHRzX3BnX3B1 YmxpY2F0aW9uX3JlbF07CisKKwltZW1zZXQodmFsdWVzLCAwLCBzaXplb2YodmFsdWVzKSk7 CisJbWVtc2V0KG51bGxzLCAwLCBzaXplb2YobnVsbHMpKTsKKwltZW1zZXQocmVwbGFjZXMs IGZhbHNlLCBzaXplb2YocmVwbGFjZXMpKTsKKworCXJlcGxhY2VzW0FudW1fcGdfcHVibGlj YXRpb25fcmVsX3ByYXR0cnMgLSAxXSA9IHRydWU7CisKKwlkZWxldGVEZXBlbmRlbmN5UmVj b3Jkc0ZvckNsYXNzKFB1YmxpY2F0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCSgoRm9ybV9w Z19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVChwdWJyZWx0dXApKS0+b2lkLAorCQkJCQkJ CQkJUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJREVQRU5ERU5DWV9BVVRPKTsKKwor CWlmIChjb2x1bW5zID09IE5VTEwpCisJeworCQludWxsc1tBbnVtX3BnX3B1YmxpY2F0aW9u X3JlbF9wcmF0dHJzIC0gMV0gPSB0cnVlOworCX0KKwllbHNlCisJeworCQlPYmplY3RBZGRy ZXNzIG15c2VsZiwKKwkJCQkJcmVmZXJlbmNlZDsKKwkJaW50MnZlY3RvciAqcHJhdHRyczsK KwkJUHVibGljYXRpb24gKnB1YjsKKworCQlwdWIgPSBHZXRQdWJsaWNhdGlvbigoKEZvcm1f cGdfcHVibGljYXRpb25fcmVsKSBHRVRTVFJVQ1QocHVicmVsdHVwKSktPnBycHViaWQpOwor CisJCXB1YmxpY2F0aW9uX3RyYW5zbGF0ZV9jb2x1bW5zKHRhcmdldHJlbCwgY29sdW1ucywK KwkJCQkJCQkJCSAgJm5hdHRzLCAmYXR0YXJyYXksICZhdHRzZXQpOworCisJCS8qCisJCSAq IE1ha2Ugc3VyZSB0aGUgY29sdW1uIGxpc3QgY2hlY2tzIG91dC4gIFhYWCB0aGlzIHNob3Vs ZCBvY2N1ciBhdAorCQkgKiBjYWxsZXIgaW4gcHVibGljYXRpb25jbWRzLmMsIG5vdCBoZXJl LgorCQkgKi8KKwkJY2hlY2tfcHVibGljYXRpb25fY29sdW1ucyhwdWIsIHRhcmdldHJlbCwg YXR0c2V0KTsKKwkJYm1zX2ZyZWUoYXR0c2V0KTsKKwkJLyogWFhYICJwdWIiIGlzIGxlYWtl ZCBoZXJlICovCisKKwkJcHJhdHRycyA9IGJ1aWxkaW50MnZlY3RvcihhdHRhcnJheSwgbmF0 dHMpOworCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycyAtIDFdID0g UG9pbnRlckdldERhdHVtKHByYXR0cnMpOworCisJCS8qIEFkZCBkZXBlbmRlbmNpZXMgb24g dGhlIG5ldyBsaXN0IG9mIGNvbHVtbnMgKi8KKwkJT2JqZWN0QWRkcmVzc1NldChteXNlbGYs IFB1YmxpY2F0aW9uUmVsUmVsYXRpb25JZCwKKwkJCQkJCSAoKEZvcm1fcGdfcHVibGljYXRp b25fcmVsKSBHRVRTVFJVQ1QocHVicmVsdHVwKSktPm9pZCk7CisJCWZvciAoaW50IGkgPSAw OyBpIDwgbmF0dHM7IGkrKykKKwkJeworCQkJT2JqZWN0QWRkcmVzc1N1YlNldChyZWZlcmVu Y2VkLCBSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQodGFy Z2V0cmVsKSwgYXR0YXJyYXlbaV0pOworCQkJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNlbGYs ICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FVVE8pOworCQl9CisJfQorCisJY29weXR1cCA9 IGhlYXBfbW9kaWZ5X3R1cGxlKHB1YnJlbHR1cCwgUmVsYXRpb25HZXREZXNjcihwdWJyZWwp LAorCQkJCQkJCQl2YWx1ZXMsIG51bGxzLCByZXBsYWNlcyk7CisKKwlDYXRhbG9nVHVwbGVV cGRhdGUocHVicmVsLCAmcHVicmVsdHVwLT50X3NlbGYsIGNvcHl0dXApOworCisJaGVhcF9m cmVldHVwbGUoY29weXR1cCk7Cit9CisKKy8qIHFzb3J0IGNvbXBhcmF0b3IgZm9yIGF0dG51 bXMgKi8KK3N0YXRpYyBpbnQKK2NvbXBhcmVfaW50MTYoY29uc3Qgdm9pZCAqYSwgY29uc3Qg dm9pZCAqYikKK3sKKwlpbnQJCQlhdiA9ICooY29uc3QgaW50MTYgKikgYTsKKwlpbnQJCQli diA9ICooY29uc3QgaW50MTYgKikgYjsKKworCS8qIHRoaXMgY2FuJ3Qgb3ZlcmZsb3cgaWYg aW50IGlzIHdpZGVyIHRoYW4gaW50MTYgKi8KKwlyZXR1cm4gKGF2IC0gYnYpOworfQorCisv KgorICogVHJhbnNsYXRlIGEgbGlzdCBvZiBjb2x1bW4gbmFtZXMgdG8gYW4gYXJyYXkgb2Yg YXR0cmlidXRlIG51bWJlcnMKKyAqIGFuZCBhIEJpdG1hcHNldCB3aXRoIHRoZW07IHZlcmlm eSB0aGF0IGVhY2ggYXR0cmlidXRlIGlzIGFwcHJvcHJpYXRlCisgKiB0byBoYXZlIGluIGEg cHVibGljYXRpb24gY29sdW1uIGxpc3QuICBPdGhlciBjaGVja3MgYXJlIGRvbmUgbGF0ZXI7 CisgKiBzZWUgY2hlY2tfcHVibGljYXRpb25fY29sdW1ucy4KKyAqCisgKiBOb3RlIHRoYXQg dGhlIGF0dHJpYnV0ZSBudW1iZXJzIGFyZSAqbm90KiBvZmZzZXQgYnkKKyAqIEZpcnN0TG93 SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXI7IHN5c3RlbSBjb2x1bW5zIGFyZSBmb3JiaWRk ZW4gc28gdGhpcworICogaXMgb2theS4KKyAqLworc3RhdGljIHZvaWQKK3B1YmxpY2F0aW9u X3RyYW5zbGF0ZV9jb2x1bW5zKFJlbGF0aW9uIHRhcmdldHJlbCwgTGlzdCAqY29sdW1ucywg aW50ICpuYXR0cywKKwkJCQkJCQkgIEF0dHJOdW1iZXIgKiphdHRycywgQml0bWFwc2V0ICoq YXR0c2V0KQoreworCUF0dHJOdW1iZXIgKmF0dGFycmF5OworCUJpdG1hcHNldCAgKnNldCA9 IE5VTEw7CisJTGlzdENlbGwgICAqbGM7CisJaW50CQkJbiA9IDA7CisJVHVwbGVEZXNjCXR1 cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHRhcmdldHJlbCk7CisKKwkvKgorCSAqIFRyYW5z bGF0ZSBsaXN0IG9mIGNvbHVtbnMgdG8gYXR0bnVtcy4gV2UgcHJvaGliaXQgc3lzdGVtIGF0 dHJpYnV0ZXMgYW5kCisJICogbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkdXBsaWNhdGUgY29s dW1ucy4KKwkgKi8KKwlhdHRhcnJheSA9IHBhbGxvYyhzaXplb2YoQXR0ck51bWJlcikgKiBs aXN0X2xlbmd0aChjb2x1bW5zKSk7CisJZm9yZWFjaChsYywgY29sdW1ucykKKwl7CisJCWNo YXIJICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGxjKSk7CisJCUF0dHJOdW1iZXIJYXR0 bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHRhcmdldHJlbCksIGNvbG5hbWUp OworCisJCWlmIChhdHRudW0gPT0gSW52YWxpZEF0dHJOdW1iZXIpCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0NPTFVNTiksCisJCQkJCWVy cm1zZygiY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhpc3Qi LAorCQkJCQkJICAgY29sbmFtZSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGFyZ2V0cmVs KSkpOworCisJCWlmICghQXR0ck51bWJlcklzRm9yVXNlckRlZmluZWRBdHRyKGF0dG51bSkp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xV TU5fUkVGRVJFTkNFKSwKKwkJCQkJZXJybXNnKCJjYW5ub3QgcmVmZXJlbmNlIHN5c3RlbSBj b2x1bW4gXCIlc1wiIGluIHB1YmxpY2F0aW9uIGNvbHVtbiBsaXN0IiwKKwkJCQkJCSAgIGNv bG5hbWUpKTsKKworCQlpZiAoVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBhdHRudW0gLSAxKS0+ YXR0Z2VuZXJhdGVkKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RF X0lOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSksCisJCQkJCWVycm1zZygiY2Fubm90IHJlZmVy ZW5jZSBnZW5lcmF0ZWQgY29sdW1uIFwiJXNcIiBpbiBwdWJsaWNhdGlvbiBjb2x1bW4gbGlz dCIsCisJCQkJCQkgICBjb2xuYW1lKSk7CisKKwkJaWYgKGJtc19pc19tZW1iZXIoYXR0bnVt LCBzZXQpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0RVUExJ Q0FURV9PQkpFQ1QpLAorCQkJCQllcnJtc2coImR1cGxpY2F0ZSBjb2x1bW4gXCIlc1wiIGlu IHB1YmxpY2F0aW9uIGNvbHVtbiBsaXN0IiwKKwkJCQkJCSAgIGNvbG5hbWUpKTsKKworCQlz ZXQgPSBibXNfYWRkX21lbWJlcihzZXQsIGF0dG51bSk7CisJCWF0dGFycmF5W24rK10gPSBh dHRudW07CisJfQorCisJLyogQmUgdGlkeSwgc28gdGhhdCB0aGUgY2F0YWxvZyByZXByZXNl bnRhdGlvbiBpcyBhbHdheXMgc29ydGVkICovCisJcXNvcnQoYXR0YXJyYXksIG4sIHNpemVv ZihBdHRyTnVtYmVyKSwgY29tcGFyZV9pbnQxNik7CisKKwkqbmF0dHMgPSBuOworCSphdHRy cyA9IGF0dGFycmF5OworCSphdHRzZXQgPSBzZXQ7Cit9CisKIC8qCiAgKiBJbnNlcnQgbmV3 IHB1YmxpY2F0aW9uIC8gc2NoZW1hIG1hcHBpbmcuCiAgKi8KQEAgLTQ3MSw2ICs3MjYsOTYg QEAgR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMoT2lkIHJlbGlkKQogCXJldHVybiByZXN1bHQ7 CiB9CiAKKy8qCisgKiBHZXRzIGEgbGlzdCBvZiBPSURzIG9mIGFsbCBwYXJ0aWFsLWNvbHVt biBwdWJsaWNhdGlvbnMgb2YgdGhlIGdpdmVuCisgKiByZWxhdGlvbiwgdGhhdCBpcywgdGhv c2UgdGhhdCBzcGVjaWZ5IGEgY29sdW1uIGxpc3QuCisgKi8KK0xpc3QgKgorR2V0UmVsYXRp b25Db2x1bW5QYXJ0aWFsUHVibGljYXRpb25zKE9pZCByZWxpZCkKK3sKKwlDYXRDTGlzdCAg ICpwdWJyZWxsaXN0OworCUxpc3QJICAgKnB1YnMgPSBOSUw7CisKKwlwdWJyZWxsaXN0ID0g U2VhcmNoU3lzQ2FjaGVMaXN0MShQVUJMSUNBVElPTlJFTE1BUCwKKwkJCQkJCQkJCSBPYmpl Y3RJZEdldERhdHVtKHJlbGlkKSk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBwdWJyZWxsaXN0 LT5uX21lbWJlcnM7IGkrKykKKwl7CisJCUhlYXBUdXBsZQl0dXAgPSAmcHVicmVsbGlzdC0+ bWVtYmVyc1tpXS0+dHVwbGU7CisJCWJvb2wJCWlzbnVsbDsKKworCQkodm9pZCkgU3lzQ2Fj aGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVMTUFQLCB0dXAsCisJCQkJCQkJICAgQW51bV9wZ19w dWJsaWNhdGlvbl9yZWxfcHJhdHRycywKKwkJCQkJCQkgICAmaXNudWxsKTsKKwkJaWYgKGlz bnVsbCkKKwkJCWNvbnRpbnVlOworCisJCXB1YnMgPSBsYXBwZW5kX29pZChwdWJzLAorCQkJ CQkJICAgKChGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHR1cCkpLT5wcnB1 YmlkKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGVMaXN0KHB1YnJlbGxpc3QpOworCisJcmV0 dXJuIHB1YnM7Cit9CisKKy8qIEZJWE1FIG1heWJlIHRoZXNlIHR3byByb3V0aW5lcyBzaG91 bGQgYmUgaW4gbHN5c2NhY2hlLmMgKi8KKy8qIFJldHVybiB0aGUgc2V0IG9mIGFjdGlvbnMg dGhhdCB0aGUgZ2l2ZW4gcHVibGljYXRpb24gaW5jbHVkZXMgKi8KK3ZvaWQKK0dldEFjdGlv bnNJblB1YmxpY2F0aW9uKE9pZCBwdWJpZCwgUHVibGljYXRpb25BY3Rpb25zICphY3Rpb25z KQoreworCUhlYXBUdXBsZQlwdWI7CisJRm9ybV9wZ19wdWJsaWNhdGlvbglwdWJGb3JtOwor CisJcHViID0gU2VhcmNoU3lzQ2FjaGUxKFBVQkxJQ0FUSU9OT0lELAorCQkJCQkJICBPYmpl Y3RJZEdldERhdHVtKHB1YmlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHB1YikpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBwdWJsaWNhdGlvbiAldSIs IHB1YmlkKTsKKworCXB1YkZvcm0gPSAoRm9ybV9wZ19wdWJsaWNhdGlvbikgR0VUU1RSVUNU KHB1Yik7CisJYWN0aW9ucy0+cHViaW5zZXJ0ID0gcHViRm9ybS0+cHViaW5zZXJ0OworCWFj dGlvbnMtPnB1YnVwZGF0ZSA9IHB1YkZvcm0tPnB1YnVwZGF0ZTsKKwlhY3Rpb25zLT5wdWJk ZWxldGUgPSBwdWJGb3JtLT5wdWJkZWxldGU7CisJYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSBw dWJGb3JtLT5wdWJ0cnVuY2F0ZTsKKworCVJlbGVhc2VTeXNDYWNoZShwdWIpOworfQorCisv KgorICogRm9yIGEgcmVsYXRpb24gaW4gYSBwdWJsaWNhdGlvbiB0aGF0IGlzIGtub3duIHRv IGhhdmUgYSBub24tbnVsbCBjb2x1bW4KKyAqIGxpc3QsIHJldHVybiB0aGUgbGlzdCBvZiBh dHRyaWJ1dGUgbnVtYmVycyB0aGF0IGFyZSBpbiBpdC4KKyAqLworTGlzdCAqCitHZXRSZWxh dGlvbkNvbHVtbkxpc3RJblB1YmxpY2F0aW9uKE9pZCByZWxpZCwgT2lkIHB1YmlkKQorewor CUhlYXBUdXBsZQl0dXA7CisJRGF0dW0JCWFkYXR1bTsKKwlib29sCQlpc251bGw7CisJQXJy YXlUeXBlICAqYXJyOworCWludAkJCW5lbGVtczsKKwlpbnQxNgkgICAqZWxlbXM7CisJTGlz dAkgICAqYXR0bm9zID0gTklMOworCisJdHVwID0gU2VhcmNoU3lzQ2FjaGUyKFBVQkxJQ0FU SU9OUkVMTUFQLAorCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwKKwkJCQkJCSAg T2JqZWN0SWRHZXREYXR1bShwdWJpZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXAp KQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsICV1IG9mIHB1 YmxpY2F0aW9uICV1IiwgcmVsaWQsIHB1YmlkKTsKKwlhZGF0dW0gPSBTeXNDYWNoZUdldEF0 dHIoUFVCTElDQVRJT05SRUxNQVAsIHR1cCwKKwkJCQkJCQkgQW51bV9wZ19wdWJsaWNhdGlv bl9yZWxfcHJhdHRycywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJPUiwg ImZvdW5kIHVuZXhwZWN0ZWQgbnVsbCBpbiBwZ19wdWJsaWNhdGlvbl9yZWwucHJhdHRycyIp OworCWFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChhZGF0dW0pOworCW5lbGVtcyA9IEFSUl9E SU1TKGFycilbMF07CisJZWxlbXMgPSAoaW50MTYgKikgQVJSX0RBVEFfUFRSKGFycik7CisK Kwlmb3IgKGludCBpID0gMDsgaSA8IG5lbGVtczsgaSsrKQorCQlhdHRub3MgPSBsYXBwZW5k X29pZChhdHRub3MsIGVsZW1zW2ldKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCisJ cmV0dXJuIGF0dG5vczsKK30KKwogLyoKICAqIEdldHMgbGlzdCBvZiByZWxhdGlvbiBvaWRz IGZvciBhIHB1YmxpY2F0aW9uLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3B1YmxpY2F0aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRp b25jbWRzLmMKaW5kZXggMGU0YmI5N2ZiNzMuLjU5MmY1NmRkNjFlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYwpAQCAtMzc2LDYgKzM3Niw0NiBAQCBDcmVh dGVQdWJsaWNhdGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3Rt dCAqc3RtdCkKIAlyZXR1cm4gbXlzZWxmOwogfQogCisvKgorICogQ2hhbmdlIHRoZSBjb2x1 bW4gbGlzdCBvZiBhIHJlbGF0aW9uIGluIGEgcHVibGljYXRpb24KKyAqLworc3RhdGljIHZv aWQKK1B1YmxpY2F0aW9uU2V0Q29sdW1ucyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwK KwkJCQkJICBGb3JtX3BnX3B1YmxpY2F0aW9uIHB1YmZvcm0sIFB1YmxpY2F0aW9uVGFibGUg KnRhYmxlKQoreworCVJlbGF0aW9uCXJlbCwKKwkJCQl1cmVsOworCUhlYXBUdXBsZQl0dXA7 CisJT2JqZWN0QWRkcmVzcyBvYmosCisJCQkJc2Vjb25kYXJ5OworCisJcmVsID0gdGFibGVf b3BlbihQdWJsaWNhdGlvblJlbFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOworCXVy ZWwgPSB0YWJsZV9vcGVucnYodGFibGUtPnJlbGF0aW9uLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2 ZUxvY2spOworCisJdHVwID0gU2VhcmNoU3lzQ2FjaGUyKFBVQkxJQ0FUSU9OUkVMTUFQLAor CQkJCQkJICBPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uR2V0UmVsaWQodXJlbCkpLAorCQkJ CQkJICBPYmplY3RJZEdldERhdHVtKHB1YmZvcm0tPm9pZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0dXApKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCWVycm1zZygicmVsYXRpb24g XCIlc1wiIGlzIG5vdCBhbHJlYWR5IGluIHB1YmxpY2F0aW9uIFwiJXNcIiIsCisJCQkJCSAg IHRhYmxlLT5yZWxhdGlvbi0+cmVsbmFtZSwKKwkJCQkJICAgTmFtZVN0cihwdWJmb3JtLT5w dWJuYW1lKSkpOworCisJcHVibGljYXRpb25fc2V0X3RhYmxlX2NvbHVtbnMocmVsLCB0dXAs IHVyZWwsIHRhYmxlLT5jb2x1bW5zKTsKKworCU9iamVjdEFkZHJlc3NTZXQob2JqLCBQdWJs aWNhdGlvblJlbGF0aW9uSWQsCisJCQkJCSAoKEZvcm1fcGdfcHVibGljYXRpb25fcmVsKSBH RVRTVFJVQ1QodHVwKSktPm9pZCk7CisJT2JqZWN0QWRkcmVzc1NldChzZWNvbmRhcnksIFJl bGF0aW9uUmVsYXRpb25JZCwgUmVsYXRpb25HZXRSZWxpZCh1cmVsKSk7CisJRXZlbnRUcmln Z2VyQ29sbGVjdFNpbXBsZUNvbW1hbmQob2JqLCBzZWNvbmRhcnksIChOb2RlICopIHN0bXQp OworCisJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CisKKwl0YWJsZV9jbG9zZShyZWwsIFJvd0V4 Y2x1c2l2ZUxvY2spOworCXRhYmxlX2Nsb3NlKHVyZWwsIE5vTG9jayk7CisKKwlJbnZva2VP YmplY3RQb3N0QWx0ZXJIb29rKFB1YmxpY2F0aW9uUmVsYXRpb25JZCwgcHViZm9ybS0+b2lk LCAwKTsKK30KKwogLyoKICAqIENoYW5nZSBvcHRpb25zIG9mIGEgcHVibGljYXRpb24uCiAg Ki8KQEAgLTUyMyw2ICs1NjMsMTQgQEAgQWx0ZXJQdWJsaWNhdGlvblRhYmxlcyhBbHRlclB1 YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAl9CiAJZWxzZSBpZiAoc3Rt dC0+YWN0aW9uID09IEFQX0Ryb3BPYmplY3RzKQogCQlQdWJsaWNhdGlvbkRyb3BUYWJsZXMo cHViaWQsIHJlbHMsIGZhbHNlKTsKKwllbHNlIGlmIChzdG10LT5hY3Rpb24gPT0gQVBfU2V0 Q29sdW1ucykKKwl7CisJCUFzc2VydChzY2hlbWFpZGxpc3QgPT0gTklMKTsKKwkJQXNzZXJ0 KGxpc3RfbGVuZ3RoKHRhYmxlcykgPT0gMSk7CisKKwkJUHVibGljYXRpb25TZXRDb2x1bW5z KHN0bXQsIHB1YmZvcm0sCisJCQkJCQkJICBsaW5pdGlhbF9ub2RlKFB1YmxpY2F0aW9uVGFi bGUsIHRhYmxlcykpOworCX0KIAllbHNlCQkJCQkJLyogQVBfU2V0T2JqZWN0cyAqLwogCXsK IAkJTGlzdAkgICAqb2xkcmVsaWRzID0gR2V0UHVibGljYXRpb25SZWxhdGlvbnMocHViaWQs CkBAIC01NjIsNyArNjEwLDggQEAgQWx0ZXJQdWJsaWNhdGlvblRhYmxlcyhBbHRlclB1Ymxp Y2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAogCQkJCXB1YnJlbCA9IHBhbGxv YyhzaXplb2YoUHVibGljYXRpb25SZWxJbmZvKSk7CiAJCQkJcHVicmVsLT5yZWxhdGlvbiA9 IG9sZHJlbDsKLQorCQkJCS8qIFRoaXMgaXMgbm90IG5lZWRlZCB0byBkZWxldGUgYSB0YWJs ZSAqLworCQkJCXB1YnJlbC0+Y29sdW1ucyA9IE5JTDsKIAkJCQlkZWxyZWxzID0gbGFwcGVu ZChkZWxyZWxzLCBwdWJyZWwpOwogCQkJfQogCQl9CkBAIC02MjIsNyArNjcxLDcgQEAgQWx0 ZXJQdWJsaWNhdGlvblNjaGVtYXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJfQog CWVsc2UgaWYgKHN0bXQtPmFjdGlvbiA9PSBBUF9Ecm9wT2JqZWN0cykKIAkJUHVibGljYXRp b25Ecm9wU2NoZW1hcyhwdWJmb3JtLT5vaWQsIHNjaGVtYWlkbGlzdCwgZmFsc2UpOwotCWVs c2UJCQkJCQkvKiBBUF9TZXRPYmplY3RzICovCisJZWxzZSBpZiAoc3RtdC0+YWN0aW9uID09 IEFQX1NldE9iamVjdHMpCiAJewogCQlMaXN0CSAgICpvbGRzY2hlbWFpZHMgPSBHZXRQdWJs aWNhdGlvblNjaGVtYXMocHViZm9ybS0+b2lkKTsKIAkJTGlzdAkgICAqZGVsc2NoZW1hcyA9 IE5JTDsKQEAgLTY0NSw2ICs2OTQsMTAgQEAgQWx0ZXJQdWJsaWNhdGlvblNjaGVtYXMoQWx0 ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCSAqLwogCQlQdWJsaWNhdGlvbkFkZFNjaGVt YXMocHViZm9ybS0+b2lkLCBzY2hlbWFpZGxpc3QsIHRydWUsIHN0bXQpOwogCX0KKwllbHNl CisJeworCQkvKiBOb3RoaW5nIHRvIGRvIGZvciBBUF9TZXRDb2x1bW5zICovCisJfQogfQog CiAvKgpAQCAtOTM0LDYgKzk4Nyw4IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQog CiAJCXB1Yl9yZWwgPSBwYWxsb2Moc2l6ZW9mKFB1YmxpY2F0aW9uUmVsSW5mbykpOwogCQlw dWJfcmVsLT5yZWxhdGlvbiA9IHJlbDsKKwkJcHViX3JlbC0+Y29sdW1ucyA9IHQtPmNvbHVt bnM7CisKIAkJcmVscyA9IGxhcHBlbmQocmVscywgcHViX3JlbCk7CiAJCXJlbGlkcyA9IGxh cHBlbmRfb2lkKHJlbGlkcywgbXlyZWxpZCk7CiAKQEAgLTk2Nyw4ICsxMDIyLDExIEBAIE9w ZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCiAJCQkJLyogZmluZF9hbGxfaW5oZXJpdG9y cyBhbHJlYWR5IGdvdCBsb2NrICovCiAJCQkJcmVsID0gdGFibGVfb3BlbihjaGlsZHJlbGlk LCBOb0xvY2spOworCiAJCQkJcHViX3JlbCA9IHBhbGxvYyhzaXplb2YoUHVibGljYXRpb25S ZWxJbmZvKSk7CiAJCQkJcHViX3JlbC0+cmVsYXRpb24gPSByZWw7CisJCQkJcHViX3JlbC0+ Y29sdW1ucyA9IHQtPmNvbHVtbnM7CisKIAkJCQlyZWxzID0gbGFwcGVuZChyZWxzLCBwdWJf cmVsKTsKIAkJCQlyZWxpZHMgPSBsYXBwZW5kX29pZChyZWxpZHMsIGNoaWxkcmVsaWQpOwog CQkJfQpAQCAtMTA3Niw2ICsxMTM0LDExIEBAIFB1YmxpY2F0aW9uRHJvcFRhYmxlcyhPaWQg cHViaWQsIExpc3QgKnJlbHMsIGJvb2wgbWlzc2luZ19vaykKIAkJUmVsYXRpb24JcmVsID0g cHVicmVsLT5yZWxhdGlvbjsKIAkJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJl bCk7CiAKKwkJaWYgKHB1YnJlbC0+Y29sdW1ucykKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQllcnJtc2coImNvbHVtbiBs aXN0IG11c3Qgbm90IGJlIHNwZWNpZmllZCBpbiBBTFRFUiBQVUJMSUNBVElPTiAuLi4gRFJP UCIpKTsKKwogCQlwcmlkID0gR2V0U3lzQ2FjaGVPaWQyKFBVQkxJQ0FUSU9OUkVMTUFQLCBB bnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9vaWQsCiAJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1 bShyZWxpZCksCiAJCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bShwdWJpZCkpOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYwppbmRleCAzZTgzZjM3NWI1NS4uMjhkZTkzMjk4MDAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCkBAIC04MzY1LDYgKzgzNjUsNyBAQCBBVEV4 ZWNEcm9wQ29sdW1uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAq Y29sTmFtZSwKIAkJCQkgYm9vbCBtaXNzaW5nX29rLCBMT0NLTU9ERSBsb2NrbW9kZSwKIAkJ CQkgT2JqZWN0QWRkcmVzc2VzICphZGRycykKIHsKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9u R2V0UmVsaWQocmVsKTsKIAlIZWFwVHVwbGUJdHVwbGU7CiAJRm9ybV9wZ19hdHRyaWJ1dGUg dGFyZ2V0YXR0OwogCUF0dHJOdW1iZXIJYXR0bnVtOwpAQCAtODM4NCw3ICs4Mzg1LDcgQEAg QVRFeGVjRHJvcENvbHVtbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNvbnN0IGNo YXIgKmNvbE5hbWUsCiAJLyoKIAkgKiBnZXQgdGhlIG51bWJlciBvZiB0aGUgYXR0cmlidXRl CiAJICovCi0JdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRSZWxp ZChyZWwpLCBjb2xOYW1lKTsKKwl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxp ZCwgY29sTmFtZSk7CiAJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKIAl7CiAJCWlm ICghbWlzc2luZ19vaykKQEAgLTg0MzgsMTMgKzg0MzksNDIgQEAgQVRFeGVjRHJvcENvbHVt bihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUsCiAK IAlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwogCisJLyoKKwkgKiBBbHNvLCBpZiB0aGUgY29s dW1uIGlzIHVzZWQgaW4gdGhlIGNvbHVtbiBsaXN0IG9mIGEgcHVibGljYXRpb24sCisJICog ZGlzYWxsb3cgdGhlIGRyb3AgaWYgdGhlIERST1AgaXMgUkVTVFJJQ1QuICBXZSBkb24ndCBk byBhbnl0aGluZyBpZiB0aGUKKwkgKiBEUk9QIGlzIENBU0NBREUsIHdoaWNoIG1lYW5zIHRo YXQgdGhlIGRlcGVuZGVuY3kgbWVjaGFuaXNtIHdpbGwgcmVtb3ZlCisJICogdGhlIHJlbGF0 aW9uIGZyb20gdGhlIHB1YmxpY2F0aW9uLgorCSAqLworCWlmIChiZWhhdmlvciA9PSBEUk9Q X1JFU1RSSUNUKQorCXsKKwkJTGlzdAkgICAqcHViczsKKwkJTGlzdENlbGwgICAqbGM7CisK KwkJcHVicyA9IEdldFJlbGF0aW9uQ29sdW1uUGFydGlhbFB1YmxpY2F0aW9ucyhyZWxpZCk7 CisJCWZvcmVhY2gobGMsIHB1YnMpCisJCXsKKwkJCU9pZAkJCXB1YmlkID0gbGZpcnN0X29p ZChsYyk7CisJCQlMaXN0CSAgICpwdWJsaXNoZWRfY29sczsKKworCQkJcHVibGlzaGVkX2Nv bHMgPQorCQkJCUdldFJlbGF0aW9uQ29sdW1uTGlzdEluUHVibGljYXRpb24ocmVsaWQsIHB1 YmlkKTsKKworCQkJaWYgKGxpc3RfbWVtYmVyX29pZChwdWJsaXNoZWRfY29scywgYXR0bnVt KSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURf VEFCTEVfREVGSU5JVElPTiksCisJCQkJCQllcnJtc2coImNhbm5vdCBkcm9wIGNvbHVtbiBc IiVzXCIgYmVjYXVzZSBpdCBpcyBwYXJ0IG9mIHB1YmxpY2F0aW9uIFwiJXNcIiIsCisJCQkJ CQkJICAgY29sTmFtZSwgZ2V0X3B1YmxpY2F0aW9uX25hbWUocHViaWQsIGZhbHNlKSksCisJ CQkJCQllcnJoaW50KCJTcGVjaWZ5IENBU0NBREUgb3IgdXNlIEFMVEVSIFBVQkxJQ0FUSU9O IHRvIHJlbW92ZSB0aGUgY29sdW1uIGZyb20gdGhlIHB1YmxpY2F0aW9uLiIpKTsKKwkJfQor CX0KKwogCS8qCiAJICogUHJvcGFnYXRlIHRvIGNoaWxkcmVuIGFzIGFwcHJvcHJpYXRlLiAg VW5saWtlIG1vc3Qgb3RoZXIgQUxURVIKIAkgKiByb3V0aW5lcywgd2UgaGF2ZSB0byBkbyB0 aGlzIG9uZSBsZXZlbCBvZiByZWN1cnNpb24gYXQgYSB0aW1lOyB3ZSBjYW4ndAogCSAqIHVz ZSBmaW5kX2FsbF9pbmhlcml0b3JzIHRvIGRvIGl0IGluIG9uZSBwYXNzLgogCSAqLwogCWNo aWxkcmVuID0KLQkJZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbihSZWxhdGlvbkdldFJlbGlk KHJlbCksIGxvY2ttb2RlKTsKKwkJZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbihyZWxpZCwg bG9ja21vZGUpOwogCiAJaWYgKGNoaWxkcmVuKQogCXsKQEAgLTg1MzIsNyArODU2Miw3IEBA IEFURXhlY0Ryb3BDb2x1bW4oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBjb25zdCBj aGFyICpjb2xOYW1lLAogCiAJLyogQWRkIG9iamVjdCB0byBkZWxldGUgKi8KIAlvYmplY3Qu Y2xhc3NJZCA9IFJlbGF0aW9uUmVsYXRpb25JZDsKLQlvYmplY3Qub2JqZWN0SWQgPSBSZWxh dGlvbkdldFJlbGlkKHJlbCk7CisJb2JqZWN0Lm9iamVjdElkID0gcmVsaWQ7CiAJb2JqZWN0 Lm9iamVjdFN1YklkID0gYXR0bnVtOwogCWFkZF9leGFjdF9vYmplY3RfYWRkcmVzcygmb2Jq ZWN0LCBhZGRycyk7CiAKQEAgLTE1ODQyLDYgKzE1ODcyLDcgQEAgcmVsYXRpb25fbWFya19y ZXBsaWNhX2lkZW50aXR5KFJlbGF0aW9uIHJlbCwgY2hhciByaV90eXBlLCBPaWQgaW5kZXhP aWQsCiAJCQlDYXRhbG9nVHVwbGVVcGRhdGUocGdfaW5kZXgsICZwZ19pbmRleF90dXBsZS0+ dF9zZWxmLCBwZ19pbmRleF90dXBsZSk7CiAJCQlJbnZva2VPYmplY3RQb3N0QWx0ZXJIb29r QXJnKEluZGV4UmVsYXRpb25JZCwgdGhpc0luZGV4T2lkLCAwLAogCQkJCQkJCQkJCSBJbnZh bGlkT2lkLCBpc19pbnRlcm5hbCk7CisKIAkJCS8qCiAJCQkgKiBJbnZhbGlkYXRlIHRoZSBy ZWxjYWNoZSBmb3IgdGhlIHRhYmxlLCBzbyB0aGF0IGFmdGVyIHdlIGNvbW1pdAogCQkJICog YWxsIHNlc3Npb25zIHdpbGwgcmVmcmVzaCB0aGUgdGFibGUncyByZXBsaWNhIGlkZW50aXR5 IGluZGV4CkBAIC0xNTg2NCw2ICsxNTg5NSwxMSBAQCBBVEV4ZWNSZXBsaWNhSWRlbnRpdHko UmVsYXRpb24gcmVsLCBSZXBsaWNhSWRlbnRpdHlTdG10ICpzdG10LCBMT0NLTU9ERSBsb2Nr bW9kZQogCU9pZAkJCWluZGV4T2lkOwogCVJlbGF0aW9uCWluZGV4UmVsOwogCWludAkJCWtl eTsKKwlMaXN0CSAgICpwdWJzOworCUJpdG1hcHNldCAgKmluZGV4ZWRfY29scyA9IE5VTEw7 CisJTGlzdENlbGwgICAqbGM7CisKKwlwdWJzID0gR2V0UmVsYXRpb25Db2x1bW5QYXJ0aWFs UHVibGljYXRpb25zKFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7CiAKIAlpZiAoc3RtdC0+aWRl bnRpdHlfdHlwZSA9PSBSRVBMSUNBX0lERU5USVRZX0RFRkFVTFQpCiAJewpAQCAtMTU4NzIs MTEgKzE1OTA4LDE2IEBAIEFURXhlY1JlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWwsIFJl cGxpY2FJZGVudGl0eVN0bXQgKnN0bXQsIExPQ0tNT0RFIGxvY2ttb2RlCiAJfQogCWVsc2Ug aWYgKHN0bXQtPmlkZW50aXR5X3R5cGUgPT0gUkVQTElDQV9JREVOVElUWV9GVUxMKQogCXsK KwkJaWYgKHB1YnMgIT0gTklMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJyY29kZShF UlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJZXJybXNn KCJjYW5ub3Qgc2V0IFJFUExJQ0EgSURFTlRJVFkgRlVMTCB3aGVuIHB1YmxpY2F0aW9ucyBj b250YWluIHJlbGF0aW9ucyB0aGF0IHNwZWNpZnkgY29sdW1uIGxpc3RzIikpOwogCQlyZWxh dGlvbl9tYXJrX3JlcGxpY2FfaWRlbnRpdHkocmVsLCBzdG10LT5pZGVudGl0eV90eXBlLCBJ bnZhbGlkT2lkLCB0cnVlKTsKIAkJcmV0dXJuOwogCX0KIAllbHNlIGlmIChzdG10LT5pZGVu dGl0eV90eXBlID09IFJFUExJQ0FfSURFTlRJVFlfTk9USElORykKIAl7CisJCS8qIFhYWCBu b3Qgc3VyZSB3aGF0J3MgdGhlIHJpZ2h0IGNoZWNrIGZvciBwdWJsaWNhdGlvbnMgaGVyZSAq LwogCQlyZWxhdGlvbl9tYXJrX3JlcGxpY2FfaWRlbnRpdHkocmVsLCBzdG10LT5pZGVudGl0 eV90eXBlLCBJbnZhbGlkT2lkLCB0cnVlKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE1OTYxLDYg KzE2MDAyLDQ2IEBAIEFURXhlY1JlcGxpY2FJZGVudGl0eShSZWxhdGlvbiByZWwsIFJlcGxp Y2FJZGVudGl0eVN0bXQgKnN0bXQsIExPQ0tNT0RFIGxvY2ttb2RlCiAJCQkJCSBlcnJtc2co ImluZGV4IFwiJXNcIiBjYW5ub3QgYmUgdXNlZCBhcyByZXBsaWNhIGlkZW50aXR5IGJlY2F1 c2UgY29sdW1uIFwiJXNcIiBpcyBudWxsYWJsZSIsCiAJCQkJCQkJUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUoaW5kZXhSZWwpLAogCQkJCQkJCU5hbWVTdHIoYXR0ci0+YXR0bmFtZSkpKSk7 CisKKwkJLyoKKwkJICogQ29sbGVjdCBjb2x1bW5zIHVzZWQsIGluIGNhc2Ugd2UgaGF2ZSBh bnkgcHVibGljYXRpb25zIHRoYXQgd2UgbmVlZAorCQkgKiB0byB2ZXQuICBTeXN0ZW0gYXR0 cmlidXRlcyBhcmUgZGlzYWxsb3dlZCBzbyBubyBuZWVkIHRvIHN1YnRyYWN0CisJCSAqIEZp cnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIuCisJCSAqLworCQlpbmRleGVkX2Nv bHMgPSBibXNfYWRkX21lbWJlcihpbmRleGVkX2NvbHMsIGF0dG5vKTsKKwl9CisKKwkvKgor CSAqIENoZWNrIHBhcnRpYWwtY29sdW1uIHB1YmxpY2F0aW9ucy4gIEZvciB0aG9zZSB0aGF0 IGluY2x1ZGUgVVBEQVRFIGFuZAorCSAqIERFTEVURSwgd2UgbXVzdCBlbmZvcmNlIHRoYXQg dGhlIGNvbHVtbnMgaW4gdGhlIHJlcGxpY2EgaWRlbnRpdHkgYXJlCisJICogaW5jbHVkZWQg aW4gdGhlIGNvbHVtbiBsaXN0LiAgRm9yIHB1YmxpY2F0aW9ucyB0aGF0IG9ubHkgaW5jbHVk ZSBJTlNFUlQKKwkgKiBhbmQgVFJVTkNBVEUsIHdlIGRvbid0IG5lZWQgdG8gcmVzdHJpY3Qg dGhlIHJlcGxpY2EgaWRlbnRpdHkuCisJICovCisJZm9yZWFjaChsYywgcHVicykKKwl7CisJ CU9pZAkJCXB1YmlkID0gbGZpcnN0X29pZChsYyk7CisJCUxpc3QJICAgKnB1Ymxpc2hlZF9j b2xzOworCQlQdWJsaWNhdGlvbkFjdGlvbnMgYWN0aW9uczsKKworCQlHZXRBY3Rpb25zSW5Q dWJsaWNhdGlvbihwdWJpZCwgJmFjdGlvbnMpOworCQkvKiBObyBuZWVkIHRvIHdvcnJ5IGFi b3V0IHRoaXMgb25lICovCisJCWlmICghYWN0aW9ucy5wdWJ1cGRhdGUgJiYgIWFjdGlvbnMu cHViZGVsZXRlKQorCQkJY29udGludWU7CisKKwkJcHVibGlzaGVkX2NvbHMgPQorCQkJR2V0 UmVsYXRpb25Db2x1bW5MaXN0SW5QdWJsaWNhdGlvbihSZWxhdGlvbkdldFJlbGlkKHJlbCks IHB1YmlkKTsKKworCQlmb3IgKGtleSA9IDA7IGtleSA8IEluZGV4UmVsYXRpb25HZXROdW1i ZXJPZktleUF0dHJpYnV0ZXMoaW5kZXhSZWwpOyBrZXkrKykKKwkJeworCQkJaW50MTYJYXR0 bm8gPSBpbmRleFJlbC0+cmRfaW5kZXgtPmluZGtleS52YWx1ZXNba2V5XTsKKworCQkJaWYg KCFsaXN0X21lbWJlcl9vaWQocHVibGlzaGVkX2NvbHMsIGF0dG5vKSkKKwkJCQllcmVwb3J0 KEVSUk9SLAorCQkJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCks CisJCQkJCQllcnJtc2coImluZGV4IFwiJXNcIiBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIHB1 YmxpY2F0aW9uIFwiJXNcIiBkb2VzIG5vdCBpbmNsdWRlIGFsbCBpbmRleGVkIGNvbHVtbnMi LAorCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKGluZGV4UmVsKSwKKwkJCQkJ CQkgICBnZXRfcHVibGljYXRpb25fbmFtZShwdWJpZCwgZmFsc2UpKSk7CisJCX0KIAl9CiAK IAkvKiBUaGlzIGluZGV4IGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgYSByZXBsaWNhIGlkZW50 aXR5LiBNYXJrIGl0LiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1 bmNzLmMgYi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwppbmRleCBiYzBkOTBiNGIx Yi4uNTg2MDNhYjE4ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5j cy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCkBAIC00ODQ5LDYgKzQ4 NDksNyBAQCBfY29weVB1YmxpY2F0aW9uVGFibGUoY29uc3QgUHVibGljYXRpb25UYWJsZSAq ZnJvbSkKIAlQdWJsaWNhdGlvblRhYmxlICpuZXdub2RlID0gbWFrZU5vZGUoUHVibGljYXRp b25UYWJsZSk7CiAKIAlDT1BZX05PREVfRklFTEQocmVsYXRpb24pOworCUNPUFlfTk9ERV9G SUVMRChjb2x1bW5zKTsKIAogCXJldHVybiBuZXdub2RlOwogfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxm dW5jcy5jCmluZGV4IDJlNzEyMmFkMmY2Li5mN2YxYjhiZTJlZCAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2Vx dWFsZnVuY3MuYwpAQCAtMjMyMSw2ICsyMzIxLDcgQEAgc3RhdGljIGJvb2wKIF9lcXVhbFB1 YmxpY2F0aW9uVGFibGUoY29uc3QgUHVibGljYXRpb25UYWJsZSAqYSwgY29uc3QgUHVibGlj YXRpb25UYWJsZSAqYikKIHsKIAlDT01QQVJFX05PREVfRklFTEQocmVsYXRpb24pOworCUNP TVBBUkVfTk9ERV9GSUVMRChjb2x1bW5zKTsKIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9n cmFtLnkKaW5kZXggOTJmOTNjZmM3MmQuLjNlNzQ1NWRkNWU5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkK QEAgLTk3NTEsMTIgKzk3NTEsMTMgQEAgQ3JlYXRlUHVibGljYXRpb25TdG10OgogICogcmVs YXRpb25fZXhwciBoZXJlLgogICovCiBQdWJsaWNhdGlvbk9ialNwZWM6Ci0JCQlUQUJMRSBy ZWxhdGlvbl9leHByCisJCQlUQUJMRSByZWxhdGlvbl9leHByIG9wdF9jb2x1bW5fbGlzdAog CQkJCXsKIAkJCQkJJCQgPSBtYWtlTm9kZShQdWJsaWNhdGlvbk9ialNwZWMpOwogCQkJCQkk JC0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JKX1RBQkxFOwogCQkJCQkkJC0+cHVidGFi bGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1YnRhYmxlLT5y ZWxhdGlvbiA9ICQyOworCQkJCQkkJC0+cHVidGFibGUtPmNvbHVtbnMgPSAkMzsKIAkJCQl9 CiAJCQl8IEFMTCBUQUJMRVMgSU5fUCBTQ0hFTUEgQ29sSWQKIAkJCQl7CkBAIC05NzcxLDI4 ICs5NzcyLDM4IEBAIFB1YmxpY2F0aW9uT2JqU3BlYzoKIAkJCQkJJCQtPnB1Ym9ianR5cGUg PSBQVUJMSUNBVElPTk9CSl9UQUJMRVNfSU5fQ1VSX1NDSEVNQTsKIAkJCQkJJCQtPmxvY2F0 aW9uID0gQDU7CiAJCQkJfQotCQkJfCBDb2xJZAorCQkJfCBDb2xJZCBvcHRfY29sdW1uX2xp c3QKIAkJCQl7CiAJCQkJCSQkID0gbWFrZU5vZGUoUHVibGljYXRpb25PYmpTcGVjKTsKIAkJ CQkJJCQtPnB1Ym9ianR5cGUgPSBQVUJMSUNBVElPTk9CSl9DT05USU5VQVRJT047Ci0JCQkJ CSQkLT5uYW1lID0gJDE7CisJCQkJCWlmICgkMiAhPSBOVUxMKQorCQkJCQl7CisJCQkJCQkk JC0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKKwkJCQkJCSQkLT5w dWJ0YWJsZS0+cmVsYXRpb24gPSBtYWtlUmFuZ2VWYXIoTlVMTCwgJDEsIEAxKTsKKwkJCQkJ CSQkLT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQyOworCQkJCQkJJCQtPm5hbWUgPSBOVUxMOwor CQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJCSQkLT5uYW1lID0gJDE7CiAJCQkJCSQkLT5sb2Nh dGlvbiA9IEAxOwogCQkJCX0KLQkJCXwgQ29sSWQgaW5kaXJlY3Rpb24KKwkJCXwgQ29sSWQg aW5kaXJlY3Rpb24gb3B0X2NvbHVtbl9saXN0CiAJCQkJewogCQkJCQkkJCA9IG1ha2VOb2Rl KFB1YmxpY2F0aW9uT2JqU3BlYyk7CiAJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJ T05PQkpfQ09OVElOVUFUSU9OOwogCQkJCQkkJC0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJs aWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1YnRhYmxlLT5yZWxhdGlvbiA9IG1ha2VSYW5n ZVZhckZyb21RdWFsaWZpZWROYW1lKCQxLCAkMiwgQDEsIHl5c2Nhbm5lcik7CisJCQkJCSQk LT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQzOwogCQkJCQkkJC0+bG9jYXRpb24gPSBAMTsKIAkJ CQl9CiAJCQkvKiBncmFtbWFyIGxpa2UgdGFibGVuYW1lICogLCBPTkxZIHRhYmxlbmFtZSwg T05MWSAoIHRhYmxlbmFtZSApICovCi0JCQl8IGV4dGVuZGVkX3JlbGF0aW9uX2V4cHIKKwkJ CXwgZXh0ZW5kZWRfcmVsYXRpb25fZXhwciBvcHRfY29sdW1uX2xpc3QKIAkJCQl7CiAJCQkJ CSQkID0gbWFrZU5vZGUoUHVibGljYXRpb25PYmpTcGVjKTsKIAkJCQkJJCQtPnB1Ym9ianR5 cGUgPSBQVUJMSUNBVElPTk9CSl9DT05USU5VQVRJT047CiAJCQkJCSQkLT5wdWJ0YWJsZSA9 IG1ha2VOb2RlKFB1YmxpY2F0aW9uVGFibGUpOwogCQkJCQkkJC0+cHVidGFibGUtPnJlbGF0 aW9uID0gJDE7CisJCQkJCSQkLT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQyOwogCQkJCX0KIAkJ CXwgQ1VSUkVOVF9TQ0hFTUEKIAkJCQl7CkBAIC05ODE4LDYgKzk4MjksOSBAQCBwdWJfb2Jq X2xpc3Q6IAlQdWJsaWNhdGlvbk9ialNwZWMKICAqCiAgKiBBTFRFUiBQVUJMSUNBVElPTiBu YW1lIFNFVCBwdWJfb2JqIFssIC4uLl0KICAqCisgKiBBTFRFUiBQVUJMSUNBVElPTiBuYW1l IFNFVCBDT0xVTU5TIHRhYmxlX25hbWUgKGNvbHVtblssIC4uLl0pCisgKiBBTFRFUiBQVUJM SUNBVElPTiBuYW1lIFNFVCBDT0xVTU5TIHRhYmxlX25hbWUgQUxMCisgKgogICogcHViX29i aiBpcyBvbmUgb2Y6CiAgKgogICoJCVRBQkxFIHRhYmxlX25hbWUgWywgLi4uXQpAQCAtOTg1 MSw2ICs5ODY1LDMyIEBAIEFsdGVyUHVibGljYXRpb25TdG10OgogCQkJCQluLT5hY3Rpb24g PSBBUF9TZXRPYmplY3RzOwogCQkJCQkkJCA9IChOb2RlICopbjsKIAkJCQl9CisJCQl8IEFM VEVSIFBVQkxJQ0FUSU9OIG5hbWUgQUxURVIgVEFCTEUgcmVsYXRpb25fZXhwciBTRVQgQ09M VU1OUyAnKCcgY29sdW1uTGlzdCAnKScKKwkJCQl7CisJCQkJCUFsdGVyUHVibGljYXRpb25T dG10ICpuID0gbWFrZU5vZGUoQWx0ZXJQdWJsaWNhdGlvblN0bXQpOworCQkJCQlQdWJsaWNh dGlvbk9ialNwZWMgKm9iaiA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CisJCQkJ CW9iai0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JKX1RBQkxFOworCQkJCQlvYmotPnB1 YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7CisJCQkJCW9iai0+cHVidGFi bGUtPnJlbGF0aW9uID0gJDY7CisJCQkJCW9iai0+cHVidGFibGUtPmNvbHVtbnMgPSAkMTA7 CisJCQkJCW4tPnB1Ym5hbWUgPSAkMzsKKwkJCQkJbi0+cHVib2JqZWN0cyA9IGxpc3RfbWFr ZTEob2JqKTsKKwkJCQkJbi0+YWN0aW9uID0gQVBfU2V0Q29sdW1uczsKKwkJCQkJJCQgPSAo Tm9kZSAqKSBuOworCQkJCX0KKwkJCXwgQUxURVIgUFVCTElDQVRJT04gbmFtZSBBTFRFUiBU QUJMRSByZWxhdGlvbl9leHByIFNFVCBDT0xVTU5TIEFMTAorCQkJCXsKKwkJCQkJQWx0ZXJQ dWJsaWNhdGlvblN0bXQgKm4gPSBtYWtlTm9kZShBbHRlclB1YmxpY2F0aW9uU3RtdCk7CisJ CQkJCVB1YmxpY2F0aW9uT2JqU3BlYyAqb2JqID0gbWFrZU5vZGUoUHVibGljYXRpb25PYmpT cGVjKTsKKwkJCQkJb2JqLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfVEFCTEU7CisJ CQkJCW9iai0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKKwkJCQkJ b2JqLT5wdWJ0YWJsZS0+cmVsYXRpb24gPSAkNjsKKwkJCQkJb2JqLT5wdWJ0YWJsZS0+Y29s dW1ucyA9IE5JTDsKKwkJCQkJbi0+cHVibmFtZSA9ICQzOworCQkJCQluLT5wdWJvYmplY3Rz ID0gbGlzdF9tYWtlMShvYmopOworCQkJCQluLT5hY3Rpb24gPSBBUF9TZXRDb2x1bW5zOwor CQkJCQkkJCA9IChOb2RlICopIG47CisJCQkJfQogCQkJfCBBTFRFUiBQVUJMSUNBVElPTiBu YW1lIERST1AgcHViX29ial9saXN0CiAJCQkJewogCQkJCQlBbHRlclB1YmxpY2F0aW9uU3Rt dCAqbiA9IG1ha2VOb2RlKEFsdGVyUHVibGljYXRpb25TdG10KTsKQEAgLTE3NDYyLDYgKzE3 NTAyLDE2IEBAIHByZXByb2Nlc3NfcHVib2JqX2xpc3QoTGlzdCAqcHVib2Jqc3BlY19saXN0 LCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKIAkJZWxzZSBpZiAocHVib2JqLT5wdWJvYmp0 eXBlID09IFBVQkxJQ0FUSU9OT0JKX1RBQkxFU19JTl9TQ0hFTUEgfHwKIAkJCQkgcHVib2Jq LT5wdWJvYmp0eXBlID09IFBVQkxJQ0FUSU9OT0JKX1RBQkxFU19JTl9DVVJfU0NIRU1BKQog CQl7CisJCQkvKgorCQkJICogVGhpcyBjYW4gaGFwcGVuIGlmIGEgY29sdW1uIGxpc3QgaXMg c3BlY2lmaWVkIGluIGEgY29udGludWF0aW9uCisJCQkgKiBmb3IgYSBzY2hlbWEgZW50cnk7 IHJlamVjdCBpdC4KKwkJCSAqLworCQkJaWYgKHB1Ym9iai0+cHVidGFibGUpCisJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJ CQkJZXJybXNnKCJjb2x1bW4gc3BlY2lmaWNhdGlvbiBub3QgYWxsb3dlZCBmb3Igc2NoZW1h cyIpLAorCQkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKHB1Ym9iai0+bG9jYXRpb24pKTsKKwog CQkJLyoKIAkJCSAqIFdlIGNhbiBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQg dHlwZSBvZiBzY2hlbWEKIAkJCSAqIG9iamVjdHMgYmFzZWQgb24gd2hldGhlciBuYW1lIGFu ZCBwdWJ0YWJsZSBpcyBzZXQuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3By b3RvLmMKaW5kZXggOTUzOTQyNjkyY2UuLmU2ZGE0NmQ4M2U1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysrIGIvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCkBAIC0yOSw5ICsyOSwxMSBAQAogI2RlZmlu ZSBUUlVOQ0FURV9DQVNDQURFCQkoMTw8MCkKICNkZWZpbmUgVFJVTkNBVEVfUkVTVEFSVF9T RVFTCSgxPDwxKQogCi1zdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmlu Z0luZm8gb3V0LCBSZWxhdGlvbiByZWwpOworc3RhdGljIHZvaWQgbG9naWNhbHJlcF93cml0 ZV9hdHRycyhTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLAorCQkJCQkJCQkgICBCaXRt YXBzZXQgKmNvbHVtbnMpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93cml0ZV90dXBsZShT dHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLAotCQkJCQkJCQkgICBIZWFwVHVwbGUgdHVw bGUsIGJvb2wgYmluYXJ5KTsKKwkJCQkJCQkJICAgSGVhcFR1cGxlIHR1cGxlLCBib29sIGJp bmFyeSwKKwkJCQkJCQkJICAgQml0bWFwc2V0ICpjb2x1bW5zKTsKIAogc3RhdGljIHZvaWQg bG9naWNhbHJlcF9yZWFkX2F0dHJzKFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBSZWxhdGlv biAqcmVsKTsKIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfcmVhZF90dXBsZShTdHJpbmdJbmZv IGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICp0dXBsZSk7CkBAIC0zOTgsNyArNDAwLDcgQEAg bG9naWNhbHJlcF9yZWFkX29yaWdpbihTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRyICpvcmln aW5fbHNuKQogICovCiB2b2lkCiBsb2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZv IG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKLQkJCQkJCUhlYXBUdXBs ZSBuZXd0dXBsZSwgYm9vbCBiaW5hcnkpCisJCQkJCQlIZWFwVHVwbGUgbmV3dHVwbGUsIGJv b2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpCiB7CiAJcHFfc2VuZGJ5dGUob3V0LCBM T0dJQ0FMX1JFUF9NU0dfSU5TRVJUKTsKIApAQCAtNDEwLDcgKzQxMiw3IEBAIGxvZ2ljYWxy ZXBfd3JpdGVfaW5zZXJ0KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgUmVs YXRpb24gcmVsLAogCXBxX3NlbmRpbnQzMihvdXQsIFJlbGF0aW9uR2V0UmVsaWQocmVsKSk7 CiAKIAlwcV9zZW5kYnl0ZShvdXQsICdOJyk7CQkvKiBuZXcgdHVwbGUgZm9sbG93cyAqLwot CWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUob3V0LCByZWwsIG5ld3R1cGxlLCBiaW5hcnkpOwor CWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUob3V0LCByZWwsIG5ld3R1cGxlLCBiaW5hcnksIGNv bHVtbnMpOwogfQogCiAvKgpAQCAtNDQyLDcgKzQ0NCw4IEBAIGxvZ2ljYWxyZXBfcmVhZF9p bnNlcnQoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcFR1cGxlRGF0YSAqbmV3dHVwKQogICov CiB2b2lkCiBsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKLQkJCQkJCUhlYXBUdXBsZSBvbGR0dXBsZSwg SGVhcFR1cGxlIG5ld3R1cGxlLCBib29sIGJpbmFyeSkKKwkJCQkJCUhlYXBUdXBsZSBvbGR0 dXBsZSwgSGVhcFR1cGxlIG5ld3R1cGxlLCBib29sIGJpbmFyeSwKKwkJCQkJCUJpdG1hcHNl dCAqY29sdW1ucykKIHsKIAlwcV9zZW5kYnl0ZShvdXQsIExPR0lDQUxfUkVQX01TR19VUERB VEUpOwogCkBAIC00NjMsMTEgKzQ2NiwxMSBAQCBsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShT dHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAkJCXBx X3NlbmRieXRlKG91dCwgJ08nKTsJLyogb2xkIHR1cGxlIGZvbGxvd3MgKi8KIAkJZWxzZQog CQkJcHFfc2VuZGJ5dGUob3V0LCAnSycpOwkvKiBvbGQga2V5IGZvbGxvd3MgKi8KLQkJbG9n aWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgb2xkdHVwbGUsIGJpbmFyeSk7CisJCWxv Z2ljYWxyZXBfd3JpdGVfdHVwbGUob3V0LCByZWwsIG9sZHR1cGxlLCBiaW5hcnksIGNvbHVt bnMpOwogCX0KIAogCXBxX3NlbmRieXRlKG91dCwgJ04nKTsJCS8qIG5ldyB0dXBsZSBmb2xs b3dzICovCi0JbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgbmV3dHVwbGUsIGJp bmFyeSk7CisJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgbmV3dHVwbGUsIGJp bmFyeSwgY29sdW1ucyk7CiB9CiAKIC8qCkBAIC01MzYsNyArNTM5LDcgQEAgbG9naWNhbHJl cF93cml0ZV9kZWxldGUoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBSZWxh dGlvbiByZWwsCiAJZWxzZQogCQlwcV9zZW5kYnl0ZShvdXQsICdLJyk7CS8qIG9sZCBrZXkg Zm9sbG93cyAqLwogCi0JbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgb2xkdHVw bGUsIGJpbmFyeSk7CisJbG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgb2xkdHVw bGUsIGJpbmFyeSwgTlVMTCk7CiB9CiAKIC8qCkBAIC02NTEsNyArNjU0LDggQEAgbG9naWNh bHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwg WExvZ1JlY1B0ciBsc24sCiAgKiBXcml0ZSByZWxhdGlvbiBkZXNjcmlwdGlvbiB0byB0aGUg b3V0cHV0IHN0cmVhbS4KICAqLwogdm9pZAotbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5n SW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBSZWxhdGlvbiByZWwpCitsb2dpY2FscmVw X3dyaXRlX3JlbChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9u IHJlbCwKKwkJCQkJIEJpdG1hcHNldCAqY29sdW1ucykKIHsKIAljaGFyCSAgICpyZWxuYW1l OwogCkBAIC02NzMsNyArNjc3LDcgQEAgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5m byBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBSZWxhdGlvbiByZWwpCiAJcHFfc2VuZGJ5dGUo b3V0LCByZWwtPnJkX3JlbC0+cmVscmVwbGlkZW50KTsKIAogCS8qIHNlbmQgdGhlIGF0dHJp YnV0ZSBpbmZvICovCi0JbG9naWNhbHJlcF93cml0ZV9hdHRycyhvdXQsIHJlbCk7CisJbG9n aWNhbHJlcF93cml0ZV9hdHRycyhvdXQsIHJlbCwgY29sdW1ucyk7CiB9CiAKIC8qCkBAIC03 NDksNyArNzUzLDggQEAgbG9naWNhbHJlcF9yZWFkX3R5cChTdHJpbmdJbmZvIGluLCBMb2dp Y2FsUmVwVHlwICpsdHlwKQogICogV3JpdGUgYSB0dXBsZSB0byB0aGUgb3V0cHV0c3RyZWFt LCBpbiB0aGUgbW9zdCBlZmZpY2llbnQgZm9ybWF0IHBvc3NpYmxlLgogICovCiBzdGF0aWMg dm9pZAotbG9naWNhbHJlcF93cml0ZV90dXBsZShTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24g cmVsLCBIZWFwVHVwbGUgdHVwbGUsIGJvb2wgYmluYXJ5KQorbG9naWNhbHJlcF93cml0ZV90 dXBsZShTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBIZWFwVHVwbGUgdHVwbGUsCisJ CQkJCSAgIGJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpCiB7CiAJVHVwbGVEZXNj CWRlc2M7CiAJRGF0dW0JCXZhbHVlc1tNYXhUdXBsZUF0dHJpYnV0ZU51bWJlcl07CkBAIC03 NjEsNyArNzY2LDEzIEBAIGxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUoU3RyaW5nSW5mbyBvdXQs IFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cGxlLCBib29sIGJpbmFyCiAKIAlmb3IgKGkg PSAwOyBpIDwgZGVzYy0+bmF0dHM7IGkrKykKIAl7Ci0JCWlmIChUdXBsZURlc2NBdHRyKGRl c2MsIGkpLT5hdHRpc2Ryb3BwZWQgfHwgVHVwbGVEZXNjQXR0cihkZXNjLCBpKS0+YXR0Z2Vu ZXJhdGVkKQorCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGRlc2Ms IGkpOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCB8fCBhdHQtPmF0dGdlbmVyYXRlZCkK KwkJCWNvbnRpbnVlOworCisJCS8qIERvbid0IGNvdW50IGF0dHJpYnV0ZXMgdGhhdCBhcmUg bm90IHRvIGJlIHNlbnQuICovCisJCWlmIChjb2x1bW5zICE9IE5VTEwgJiYgIWJtc19pc19t ZW1iZXIoYXR0LT5hdHRudW0sIGNvbHVtbnMpKQogCQkJY29udGludWU7CiAJCW5saXZlYXR0 cysrOwogCX0KQEAgLTc4Myw2ICs3OTQsMTAgQEAgbG9naWNhbHJlcF93cml0ZV90dXBsZShT dHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBIZWFwVHVwbGUgdHVwbGUsIGJvb2wgYmlu YXIKIAkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0dC0+YXR0Z2VuZXJhdGVkKQogCQkJ Y29udGludWU7CiAKKwkJLyogSWdub3JlIGF0dHJpYnV0ZXMgdGhhdCBhcmUgbm90IHRvIGJl IHNlbnQuICovCisJCWlmIChjb2x1bW5zICE9IE5VTEwgJiYgIWJtc19pc19tZW1iZXIoYXR0 LT5hdHRudW0sIGNvbHVtbnMpKQorCQkJY29udGludWU7CisKIAkJaWYgKGlzbnVsbFtpXSkK IAkJewogCQkJcHFfc2VuZGJ5dGUob3V0LCBMT0dJQ0FMUkVQX0NPTFVNTl9OVUxMKTsKQEAg LTkwNCw3ICs5MTksNyBAQCBsb2dpY2FscmVwX3JlYWRfdHVwbGUoU3RyaW5nSW5mbyBpbiwg TG9naWNhbFJlcFR1cGxlRGF0YSAqdHVwbGUpCiAgKiBXcml0ZSByZWxhdGlvbiBhdHRyaWJ1 dGUgbWV0YWRhdGEgdG8gdGhlIHN0cmVhbS4KICAqLwogc3RhdGljIHZvaWQKLWxvZ2ljYWxy ZXBfd3JpdGVfYXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJlbCkKK2xvZ2ljYWxy ZXBfd3JpdGVfYXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJlbCwgQml0bWFwc2V0 ICpjb2x1bW5zKQogewogCVR1cGxlRGVzYwlkZXNjOwogCWludAkJCWk7CkBAIC05MTQsMjAg KzkyOSwyNCBAQCBsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmluZ0luZm8gb3V0LCBSZWxh dGlvbiByZWwpCiAKIAlkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwogCisJLyogZmV0 Y2ggYml0bWFwIG9mIFJFUExJQ0FUSU9OIElERU5USVRZIGF0dHJpYnV0ZXMgKi8KKwlyZXBs aWRlbnRmdWxsID0gKHJlbC0+cmRfcmVsLT5yZWxyZXBsaWRlbnQgPT0gUkVQTElDQV9JREVO VElUWV9GVUxMKTsKKwlpZiAoIXJlcGxpZGVudGZ1bGwpCisJCWlkYXR0cnMgPSBSZWxhdGlv bkdldElkZW50aXR5S2V5Qml0bWFwKHJlbCk7CisKIAkvKiBzZW5kIG51bWJlciBvZiBsaXZl IGF0dHJpYnV0ZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bmF0dHM7IGkrKykKIAl7 Ci0JCWlmIChUdXBsZURlc2NBdHRyKGRlc2MsIGkpLT5hdHRpc2Ryb3BwZWQgfHwgVHVwbGVE ZXNjQXR0cihkZXNjLCBpKS0+YXR0Z2VuZXJhdGVkKQorCQlGb3JtX3BnX2F0dHJpYnV0ZSBh dHQgPSBUdXBsZURlc2NBdHRyKGRlc2MsIGkpOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBl ZCB8fCBhdHQtPmF0dGdlbmVyYXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoY29sdW1ucyAh PSBOVUxMICYmICFibXNfaXNfbWVtYmVyKGF0dC0+YXR0bnVtLCBjb2x1bW5zKSkKIAkJCWNv bnRpbnVlOwogCQlubGl2ZWF0dHMrKzsKIAl9CiAJcHFfc2VuZGludDE2KG91dCwgbmxpdmVh dHRzKTsKIAotCS8qIGZldGNoIGJpdG1hcCBvZiBSRVBMSUNBVElPTiBJREVOVElUWSBhdHRy aWJ1dGVzICovCi0JcmVwbGlkZW50ZnVsbCA9IChyZWwtPnJkX3JlbC0+cmVscmVwbGlkZW50 ID09IFJFUExJQ0FfSURFTlRJVFlfRlVMTCk7Ci0JaWYgKCFyZXBsaWRlbnRmdWxsKQotCQlp ZGF0dHJzID0gUmVsYXRpb25HZXRJZGVudGl0eUtleUJpdG1hcChyZWwpOwotCiAJLyogc2Vu ZCB0aGUgYXR0cmlidXRlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5uYXR0czsgaSsr KQogCXsKQEAgLTkzNiw3ICs5NTUsOCBAQCBsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmlu Z0luZm8gb3V0LCBSZWxhdGlvbiByZWwpCiAKIAkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8 IGF0dC0+YXR0Z2VuZXJhdGVkKQogCQkJY29udGludWU7Ci0KKwkJaWYgKGNvbHVtbnMgIT0g TlVMTCAmJiAhYm1zX2lzX21lbWJlcihhdHQtPmF0dG51bSwgY29sdW1ucykpCisJCQljb250 aW51ZTsKIAkJLyogUkVQTElDQSBJREVOVElUWSBGVUxMIG1lYW5zIGFsbCBjb2x1bW5zIGFy ZSBzZW50IGFzIHBhcnQgb2Yga2V5LiAqLwogCQlpZiAocmVwbGlkZW50ZnVsbCB8fAogCQkJ Ym1zX2lzX21lbWJlcihhdHQtPmF0dG51bSAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1 dGVOdW1iZXIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5 bmMuYwppbmRleCBlNTk2YjY5ZDQ2Ni4uYTdiZWZkNzEyYTAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpAQCAtMTEyLDYgKzExMiw3IEBA CiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIK ICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgogI2lu Y2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgi CiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTY5OSwxNyArNzAwLDIwIEBAIGZl dGNoX3JlbW90ZV90YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsCiAJ V2FsUmN2RXhlY1Jlc3VsdCAqcmVzOwogCVN0cmluZ0luZm9EYXRhIGNtZDsKIAlUdXBsZVRh YmxlU2xvdCAqc2xvdDsKLQlPaWQJCQl0YWJsZVJvd1tdID0ge09JRE9JRCwgQ0hBUk9JRCwg Q0hBUk9JRH07Ci0JT2lkCQkJYXR0clJvd1tdID0ge1RFWFRPSUQsIE9JRE9JRCwgQk9PTE9J RH07CisJT2lkCQkJdGFibGVSb3dbXSA9IHtPSURPSUQsIENIQVJPSUQsIENIQVJPSUQsIEJP T0xPSUR9OworCU9pZAkJCWF0dHJSb3dbXSA9IHtJTlQyT0lELCBURVhUT0lELCBPSURPSUQs IEJPT0xPSUR9OwogCWJvb2wJCWlzbnVsbDsKIAlpbnQJCQluYXR0OworCUxpc3RDZWxsICAg KmxjOworCWJvb2wJCWFtX3BhcnRpdGlvbjsKKwlCaXRtYXBzZXQgICppbmNsdWRlZF9jb2xz ID0gTlVMTDsKIAogCWxyZWwtPm5zcG5hbWUgPSBuc3BuYW1lOwogCWxyZWwtPnJlbG5hbWUg PSByZWxuYW1lOwogCiAJLyogRmlyc3QgZmV0Y2ggT2lkIGFuZCByZXBsaWNhIGlkZW50aXR5 LiAqLwogCWluaXRTdHJpbmdJbmZvKCZjbWQpOwotCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwg IlNFTEVDVCBjLm9pZCwgYy5yZWxyZXBsaWRlbnQsIGMucmVsa2luZCIKKwlhcHBlbmRTdHJp bmdJbmZvKCZjbWQsICJTRUxFQ1QgYy5vaWQsIGMucmVscmVwbGlkZW50LCBjLnJlbGtpbmQs IGMucmVsaXNwYXJ0aXRpb24iCiAJCQkJCSAiICBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3Mg YyIKIAkJCQkJICIgIElOTkVSIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiIKIAkJ CQkJICIgICAgICAgIE9OIChjLnJlbG5hbWVzcGFjZSA9IG4ub2lkKSIKQEAgLTczOSwxNCAr NzQzLDE5IEBAIGZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIg KnJlbG5hbWUsCiAJQXNzZXJ0KCFpc251bGwpOwogCWxyZWwtPnJlbGtpbmQgPSBEYXR1bUdl dENoYXIoc2xvdF9nZXRhdHRyKHNsb3QsIDMsICZpc251bGwpKTsKIAlBc3NlcnQoIWlzbnVs bCk7CisJYW1fcGFydGl0aW9uID0gRGF0dW1HZXRCb29sKHNsb3RfZ2V0YXR0cihzbG90LCA0 LCAmaXNudWxsKSk7CisJQXNzZXJ0KCFpc251bGwpOwogCiAJRXhlY0Ryb3BTaW5nbGVUdXBs ZVRhYmxlU2xvdChzbG90KTsKIAl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7CiAKLQkvKiBO b3cgZmV0Y2ggY29sdW1ucy4gKi8KKwkvKgorCSAqIE5vdyBmZXRjaCBjb2x1bW4gbmFtZXMg YW5kIHR5cGVzLgorCSAqLwogCXJlc2V0U3RyaW5nSW5mbygmY21kKTsKIAlhcHBlbmRTdHJp bmdJbmZvKCZjbWQsCi0JCQkJCSAiU0VMRUNUIGEuYXR0bmFtZSwiCisJCQkJCSAiU0VMRUNU IGEuYXR0bnVtLCIKKwkJCQkJICIgICAgICAgYS5hdHRuYW1lLCIKIAkJCQkJICIgICAgICAg YS5hdHR0eXBpZCwiCiAJCQkJCSAiICAgICAgIGEuYXR0bnVtID0gQU5ZKGkuaW5ka2V5KSIK IAkJCQkJICIgIEZST00gcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYSIKQEAgLTc3NCwxNiAr NzgzLDkxIEBAIGZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIg KnJlbG5hbWUsCiAJbHJlbC0+YXR0dHlwcyA9IHBhbGxvYzAoTWF4VHVwbGVBdHRyaWJ1dGVO dW1iZXIgKiBzaXplb2YoT2lkKSk7CiAJbHJlbC0+YXR0a2V5cyA9IE5VTEw7CiAKKwkvKgor CSAqIEluIHNlcnZlciB2ZXJzaW9ucyAxNSBhbmQgaGlnaGVyLCBvYnRhaW4gdGhlIHB1Ymxp Y2F0aW9uIGNvbHVtbiBsaXN0LAorCSAqIGlmIGFueS4KKwkgKi8KKwlpZiAod2FscmN2X3Nl cnZlcl92ZXJzaW9uKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4pID49IDE1MDAwMCkKKwl7CisJ CVdhbFJjdkV4ZWNSZXN1bHQgKnB1YnJlczsKKwkJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJ CU9pZAkJCWF0dHJzUm93W10gPSB7SU5UMk9JRH07CisJCVN0cmluZ0luZm9EYXRhIHB1Ymxp Y2F0aW9uczsKKwkJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJCWluaXRTdHJpbmdJbmZvKCZw dWJsaWNhdGlvbnMpOworCQlmb3JlYWNoKGxjLCBNeVN1YnNjcmlwdGlvbi0+cHVibGljYXRp b25zKQorCQl7CisJCQlpZiAoIWZpcnN0KQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJnB1Ymxp Y2F0aW9ucywgIiwgIik7CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZwdWJsaWNhdGlv bnMsIHF1b3RlX2xpdGVyYWxfY3N0cihzdHJWYWwobGZpcnN0KGxjKSkpKTsKKwkJCWZpcnN0 ID0gZmFsc2U7CisJCX0KKworCQlyZXNldFN0cmluZ0luZm8oJmNtZCk7CisJCWFwcGVuZFN0 cmluZ0luZm8oJmNtZCwKKwkJCQkJCSAiICBTRUxFQ1QgcGdfY2F0YWxvZy51bm5lc3QocHJh dHRycylcbiIKKwkJCQkJCSAiICAgIEZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBw IEpPSU5cbiIKKwkJCQkJCSAiICAgICAgICAgcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9y ZWwgcHIgT04gKHAub2lkID0gcHIucHJwdWJpZClcbiIKKwkJCQkJCSAiICAgV0hFUkUgcC5w dWJuYW1lIElOICglcykgQU5EXG4iLAorCQkJCQkJIHB1YmxpY2F0aW9ucy5kYXRhKTsKKwkJ aWYgKCFhbV9wYXJ0aXRpb24pCisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJwcnJlbGlk ID0gJXUiLCBscmVsLT5yZW1vdGVpZCk7CisJCWVsc2UKKwkJCWFwcGVuZFN0cmluZ0luZm8o JmNtZCwKKwkJCQkJCQkgInBycmVsaWQgSU4gKFNFTEVDVCByZWxpZFxuIgorCQkJCQkJCSAi ICAgIEZST00gcGdfY2F0YWxvZy5wZ19wYXJ0aXRpb25fdHJlZShwZ19jYXRhbG9nLnBnX3Bh cnRpdGlvbl9yb290KCV1KSkpIiwKKwkJCQkJCQkgbHJlbC0+cmVtb3RlaWQpOworCisJCXB1 YnJlcyA9IHdhbHJjdl9leGVjKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4sIGNtZC5kYXRhLAor CQkJCQkJCSBsZW5ndGhvZihhdHRyc1JvdyksIGF0dHJzUm93KTsKKworCQlpZiAocHVicmVz LT5zdGF0dXMgIT0gV0FMUkNWX09LX1RVUExFUykKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwKKwkJCQkJIGVycm1zZygi Y291bGQgbm90IGZldGNoIGF0dHJpYnV0ZSBpbmZvIGZvciB0YWJsZSBcIiVzLiVzXCIgZnJv bSBwdWJsaXNoZXI6ICVzIiwKKwkJCQkJCQluc3BuYW1lLCByZWxuYW1lLCBwdWJyZXMtPmVy cikpKTsKKworCQlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KHB1YnJlcy0+dHVw bGVkZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKwkJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0 dHVwbGVzbG90KHB1YnJlcy0+dHVwbGVzdG9yZSwgdHJ1ZSwgZmFsc2UsIHNsb3QpKQorCQl7 CisJCQlBdHRyTnVtYmVyCWF0dG51bTsKKworCQkJYXR0bnVtID0gRGF0dW1HZXRJbnQxNihz bG90X2dldGF0dHIoc2xvdCwgMSwgJmlzbnVsbCkpOworCQkJaWYgKGlzbnVsbCkKKwkJCQlj b250aW51ZTsKKwkJCWluY2x1ZGVkX2NvbHMgPSBibXNfYWRkX21lbWJlcihpbmNsdWRlZF9j b2xzLCBhdHRudW0pOworCQl9CisJCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qoc2xv dCk7CisJCXBmcmVlKHB1YmxpY2F0aW9ucy5kYXRhKTsKKwkJd2FscmN2X2NsZWFyX3Jlc3Vs dChwdWJyZXMpOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIGNvbHVtbnMgYXMgYSBsaXN0 IG9mIG5hbWVzLiAgSWdub3JlIHRob3NlIHRoYXQgYXJlIG5vdAorCSAqIHByZXNlbnQgaW4g dGhlIGNvbHVtbiBsaXN0LCBpZiB0aGVyZSBpcyBvbmUuCisJICovCiAJbmF0dCA9IDA7CiAJ c2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChyZXMtPnR1cGxlZGVzYywgJlRUU09w c01pbmltYWxUdXBsZSk7CiAJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KHJlcy0+ dHVwbGVzdG9yZSwgdHJ1ZSwgZmFsc2UsIHNsb3QpKQogCXsKLQkJbHJlbC0+YXR0bmFtZXNb bmF0dF0gPQotCQkJVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dldGF0dHIoc2xvdCwgMSwg JmlzbnVsbCkpOworCQljaGFyCSAgICpyZWxfY29sbmFtZTsKKwkJQXR0ck51bWJlcglhdHRu dW07CisKKwkJYXR0bnVtID0gRGF0dW1HZXRJbnQxNihzbG90X2dldGF0dHIoc2xvdCwgMSwg JmlzbnVsbCkpOwogCQlBc3NlcnQoIWlzbnVsbCk7Ci0JCWxyZWwtPmF0dHR5cHNbbmF0dF0g PSBEYXR1bUdldE9iamVjdElkKHNsb3RfZ2V0YXR0cihzbG90LCAyLCAmaXNudWxsKSk7CisK KwkJaWYgKGluY2x1ZGVkX2NvbHMgIT0gTlVMTCAmJiAhYm1zX2lzX21lbWJlcihhdHRudW0s IGluY2x1ZGVkX2NvbHMpKQorCQkJY29udGludWU7CisKKwkJcmVsX2NvbG5hbWUgPSBUZXh0 RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0YXR0cihzbG90LCAyLCAmaXNudWxsKSk7CiAJCUFz c2VydCghaXNudWxsKTsKLQkJaWYgKERhdHVtR2V0Qm9vbChzbG90X2dldGF0dHIoc2xvdCwg MywgJmlzbnVsbCkpKQorCisJCWxyZWwtPmF0dG5hbWVzW25hdHRdID0gcmVsX2NvbG5hbWU7 CisJCWxyZWwtPmF0dHR5cHNbbmF0dF0gPSBEYXR1bUdldE9iamVjdElkKHNsb3RfZ2V0YXR0 cihzbG90LCAzLCAmaXNudWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKworCQlpZiAoRGF0 dW1HZXRCb29sKHNsb3RfZ2V0YXR0cihzbG90LCA0LCAmaXNudWxsKSkpCiAJCQlscmVsLT5h dHRrZXlzID0gYm1zX2FkZF9tZW1iZXIobHJlbC0+YXR0a2V5cywgbmF0dCk7CiAKIAkJLyog U2hvdWxkIG5ldmVyIGhhcHBlbi4gKi8KQEAgLTc5MywxMiArODc3LDEyIEBAIGZldGNoX3Jl bW90ZV90YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUsCiAKIAkJRXhl Y0NsZWFyVHVwbGUoc2xvdCk7CiAJfQotCUV4ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qo c2xvdCk7Ci0KLQlscmVsLT5uYXR0cyA9IG5hdHQ7CiAKKwlFeGVjRHJvcFNpbmdsZVR1cGxl VGFibGVTbG90KHNsb3QpOwogCXdhbHJjdl9jbGVhcl9yZXN1bHQocmVzKTsKIAlwZnJlZShj bWQuZGF0YSk7CisKKwlscmVsLT5uYXR0cyA9IG5hdHQ7CiB9CiAKIC8qCkBAIC04MzEsOCAr OTE1LDE3IEBAIGNvcHlfdGFibGUoUmVsYXRpb24gcmVsKQogCS8qIFN0YXJ0IGNvcHkgb24g dGhlIHB1Ymxpc2hlci4gKi8KIAlpbml0U3RyaW5nSW5mbygmY21kKTsKIAlpZiAobHJlbC5y ZWxraW5kID09IFJFTEtJTkRfUkVMQVRJT04pCi0JCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwg IkNPUFkgJXMgVE8gU1RET1VUIiwKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwgIkNP UFkgJXMgKCIsCiAJCQkJCQkgcXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIobHJlbC5uc3Bu YW1lLCBscmVsLnJlbG5hbWUpKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBscmVsLm5hdHRz OyBpKyspCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgcXVvdGVfaWRl bnRpZmllcihscmVsLmF0dG5hbWVzW2ldKSk7CisJCQlpZiAoaSA8IGxyZWwubmF0dHMgLSAx KQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmNtZCwgIiwgIik7CisJCX0KKwkJYXBw ZW5kU3RyaW5nSW5mbygmY21kLCAiKSBUTyBTVERPVVQiKTsKKwl9CiAJZWxzZQogCXsKIAkJ LyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0 cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmlu ZGV4IDZkZjcwNWY5MGZmLi5jN2IyOGQ3MGQyMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0xNSwxNiArMTUsMTkgQEAKICNpbmNs dWRlICJhY2Nlc3MvdHVwY29udmVydC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGFydGl0aW9u LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfcHVibGljYXRpb25fcmVsX2QuaCIKICNpbmNsdWRlICJjb21tYW5kcy9kZWZy ZW0uaCIKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNh bC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL29yaWdpbi5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Bnb3V0cHV0 LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9pbnQ4 LmgiCiAjaW5jbHVkZSAidXRpbHMvaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3Jl bC5oIgogI2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdmFy bGVuYS5oIgogCkBAIC04MSw3ICs4NCw4IEBAIHN0YXRpYyBMaXN0ICpMb2FkUHVibGljYXRp b25zKExpc3QgKnB1Ym5hbWVzKTsKIHN0YXRpYyB2b2lkIHB1YmxpY2F0aW9uX2ludmFsaWRh dGlvbl9jYihEYXR1bSBhcmcsIGludCBjYWNoZWlkLAogCQkJCQkJCQkJCXVpbnQzMiBoYXNo dmFsdWUpOwogc3RhdGljIHZvaWQgc2VuZF9yZWxhdGlvbl9hbmRfYXR0cnMoUmVsYXRpb24g cmVsYXRpb24sIFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCQkJTG9naWNhbERlY29kaW5n Q29udGV4dCAqY3R4KTsKKwkJCQkJCQkJCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwK KwkJCQkJCQkJCUJpdG1hcHNldCAqY29sdW1ucyk7CiBzdGF0aWMgdm9pZCBzZW5kX3JlcGxf b3JpZ2luKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgUmVwT3JpZ2lu SWQgb3JpZ2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24sCiAJCQkJCQkJIGJvb2wgc2Vu ZF9vcmlnaW4pOwpAQCAtMTMyLDYgKzEzNiwxMyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxhdGlv blN5bmNFbnRyeQogCSAqIGhhdmluZyBpZGVudGljYWwgVHVwbGVEZXNjLgogCSAqLwogCVR1 cGxlQ29udmVyc2lvbk1hcCAqbWFwOworCisJLyoKKwkgKiBTZXQgb2YgY29sdW1ucyBpbmNs dWRlZCBpbiB0aGUgcHVibGljYXRpb24sIG9yIE5VTEwgaWYgYWxsIGNvbHVtbnMgYXJlCisJ ICogaW5jbHVkZWQgaW1wbGljaXRseS4gIE5vdGUgdGhhdCB0aGUgYXR0bnVtcyBpbiB0aGlz IGxpc3QgYXJlIG5vdAorCSAqIHNoaWZ0ZWQgYnkgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJp YnV0ZU51bWJlci4KKwkgKi8KKwlCaXRtYXBzZXQgICpjb2x1bW5zOwogfSBSZWxhdGlvblN5 bmNFbnRyeTsKIAogLyogTWFwIHVzZWQgdG8gcmVtZW1iZXIgd2hpY2ggcmVsYXRpb24gc2No ZW1hcyB3ZSBzZW50LiAqLwpAQCAtNTcyLDExICs1ODMsMTEgQEAgbWF5YmVfc2VuZF9zY2hl bWEoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCQl9CiAKIAkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGN0eCk7Ci0JCXNlbmRfcmVsYXRpb25fYW5kX2F0dHJzKGFuY2VzdG9y LCB4aWQsIGN0eCk7CisJCXNlbmRfcmVsYXRpb25fYW5kX2F0dHJzKGFuY2VzdG9yLCB4aWQs IGN0eCwgcmVsZW50cnktPmNvbHVtbnMpOwogCQlSZWxhdGlvbkNsb3NlKGFuY2VzdG9yKTsK IAl9CiAKLQlzZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhyZWxhdGlvbiwgeGlkLCBjdHgpOwor CXNlbmRfcmVsYXRpb25fYW5kX2F0dHJzKHJlbGF0aW9uLCB4aWQsIGN0eCwgcmVsZW50cnkt PmNvbHVtbnMpOwogCiAJaWYgKGluX3N0cmVhbWluZykKIAkJc2V0X3NjaGVtYV9zZW50X2lu X3N0cmVhbWVkX3R4bihyZWxlbnRyeSwgdG9weGlkKTsKQEAgLTU4OSw3ICs2MDAsOCBAQCBt YXliZV9zZW5kX3NjaGVtYShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAgKi8KIHN0 YXRpYyB2b2lkCiBzZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhSZWxhdGlvbiByZWxhdGlvbiwg VHJhbnNhY3Rpb25JZCB4aWQsCi0JCQkJCQlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgp CisJCQkJCQlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQlCaXRtYXBzZXQg KmNvbHVtbnMpCiB7CiAJVHVwbGVEZXNjCWRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0 aW9uKTsKIAlpbnQJCQlpOwpAQCAtNjEyLDEzICs2MjQsMTcgQEAgc2VuZF9yZWxhdGlvbl9h bmRfYXR0cnMoUmVsYXRpb24gcmVsYXRpb24sIFRyYW5zYWN0aW9uSWQgeGlkLAogCQlpZiAo YXR0LT5hdHR0eXBpZCA8IEZpcnN0R2VuYmtpT2JqZWN0SWQpCiAJCQljb250aW51ZTsKIAor CQkvKiBTa2lwIHRoaXMgYXR0cmlidXRlIGlmIGl0J3Mgbm90IHByZXNlbnQgaW4gdGhlIGNv bHVtbiBsaXN0ICovCisJCWlmIChjb2x1bW5zICE9IE5VTEwgJiYgIWJtc19pc19tZW1iZXIo YXR0LT5hdHRudW0sIGNvbHVtbnMpKQorCQkJY29udGludWU7CisKIAkJT3V0cHV0UGx1Z2lu UHJlcGFyZVdyaXRlKGN0eCwgZmFsc2UpOwogCQlsb2dpY2FscmVwX3dyaXRlX3R5cChjdHgt Pm91dCwgeGlkLCBhdHQtPmF0dHR5cGlkKTsKIAkJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCBm YWxzZSk7CiAJfQogCiAJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgZmFsc2UpOwot CWxvZ2ljYWxyZXBfd3JpdGVfcmVsKGN0eC0+b3V0LCB4aWQsIHJlbGF0aW9uKTsKKwlsb2dp Y2FscmVwX3dyaXRlX3JlbChjdHgtPm91dCwgeGlkLCByZWxhdGlvbiwgY29sdW1ucyk7CiAJ T3V0cHV0UGx1Z2luV3JpdGUoY3R4LCBmYWxzZSk7CiB9CiAKQEAgLTY5NSw3ICs3MTEsNyBA QCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVy QnVmZmVyVFhOICp0eG4sCiAKIAkJCQlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0 cnVlKTsKIAkJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCByZWxh dGlvbiwgdHVwbGUsCi0JCQkJCQkJCQkJZGF0YS0+YmluYXJ5KTsKKwkJCQkJCQkJCQlkYXRh LT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAkJCQlPdXRwdXRQbHVnaW5Xcml0ZShj dHgsIHRydWUpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtNzI0LDcgKzc0MCw3IEBAIHBnb3V0 cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIAogCQkJCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOwog CQkJCWxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKGN0eC0+b3V0LCB4aWQsIHJlbGF0aW9uLCBv bGR0dXBsZSwKLQkJCQkJCQkJCQluZXd0dXBsZSwgZGF0YS0+YmluYXJ5KTsKKwkJCQkJCQkJ CQluZXd0dXBsZSwgZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQkJT3V0 cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTExMjQs NiArMTE0MCw3IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIE9p ZCByZWxpZCkKIHsKIAlSZWxhdGlvblN5bmNFbnRyeSAqZW50cnk7CiAJYm9vbAkJZm91bmQ7 CisJT2lkCQkJYW5jZXN0b3JfaWQ7CiAJTWVtb3J5Q29udGV4dCBvbGRjdHg7CiAKIAlBc3Nl cnQoUmVsYXRpb25TeW5jQ2FjaGUgIT0gTlVMTCk7CkBAIC0xMTQzLDYgKzExNjAsNyBAQCBn ZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBPaWQgcmVsaWQpCiAJCWVu dHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0 ZSA9CiAJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9u cy5wdWJ0cnVuY2F0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHVibGlzaF9hc19yZWxpZCA9IElu dmFsaWRPaWQ7CisJCWVudHJ5LT5jb2x1bW5zID0gTlVMTDsKIAkJZW50cnktPm1hcCA9IE5V TEw7CQkvKiB3aWxsIGJlIHNldCBieSBtYXliZV9zZW5kX3NjaGVtYSgpIGlmCiAJCQkJCQkJ CSAqIG5lZWRlZCAqLwogCX0KQEAgLTExODcsNiArMTIwNSw4IEBAIGdldF9yZWxfc3luY19l bnRyeShQR091dHB1dERhdGEgKmRhdGEsIE9pZCByZWxpZCkKIAkJZW50cnktPnNjaGVtYV9z ZW50ID0gZmFsc2U7CiAJCWxpc3RfZnJlZShlbnRyeS0+c3RyZWFtZWRfdHhucyk7CiAJCWVu dHJ5LT5zdHJlYW1lZF90eG5zID0gTklMOworCQlibXNfZnJlZShlbnRyeS0+Y29sdW1ucyk7 CisJCWVudHJ5LT5jb2x1bW5zID0gTlVMTDsKIAkJZW50cnktPnB1YmFjdGlvbnMucHViaW5z ZXJ0ID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSA9IGZhbHNlOwog CQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgPSBmYWxzZTsKQEAgLTEyMDUsMTMgKzEy MjUsMTYgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgT2lkIHJl bGlkKQogCiAJCS8qCiAJCSAqIEJ1aWxkIHB1YmxpY2F0aW9uIGNhY2hlLiBXZSBjYW4ndCB1 c2Ugb25lIHByb3ZpZGVkIGJ5IHJlbGNhY2hlIGFzCi0JCSAqIHJlbGNhY2hlIGNvbnNpZGVy cyBhbGwgcHVibGljYXRpb25zIGdpdmVuIHJlbGF0aW9uIGlzIGluLCBidXQgaGVyZQotCQkg KiB3ZSBvbmx5IG5lZWQgdG8gY29uc2lkZXIgb25lcyB0aGF0IHRoZSBzdWJzY3JpYmVyIHJl cXVlc3RlZC4KKwkJICogcmVsY2FjaGUgY29uc2lkZXJzIGFsbCBwdWJsaWNhdGlvbnMgdGhh dCB0aGUgZ2l2ZW4gcmVsYXRpb24gaXMgaW4sCisJCSAqIGJ1dCBoZXJlIHdlIG9ubHkgbmVl ZCB0byBjb25zaWRlciBvbmVzIHRoYXQgdGhlIHN1YnNjcmliZXIKKwkJICogcmVxdWVzdGVk LgogCQkgKi8KIAkJZm9yZWFjaChsYywgZGF0YS0+cHVibGljYXRpb25zKQogCQl7CiAJCQlQ dWJsaWNhdGlvbiAqcHViID0gbGZpcnN0KGxjKTsKIAkJCWJvb2wJCXB1Ymxpc2ggPSBmYWxz ZTsKKwkJCWJvb2wJCWFuY2VzdG9yX3B1Ymxpc2hlZCA9IGZhbHNlOworCQkJYm9vbAkJYWxs X2NvbHVtbnMgPSBmYWxzZTsKIAogCQkJaWYgKHB1Yi0+YWxsdGFibGVzKQogCQkJewpAQCAt MTIyMiw4ICsxMjQ1LDYgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0 YSwgT2lkIHJlbGlkKQogCiAJCQlpZiAoIXB1Ymxpc2gpCiAJCQl7Ci0JCQkJYm9vbAkJYW5j ZXN0b3JfcHVibGlzaGVkID0gZmFsc2U7Ci0KIAkJCQkvKgogCQkJCSAqIEZvciBhIHBhcnRp dGlvbiwgY2hlY2sgaWYgYW55IG9mIHRoZSBhbmNlc3RvcnMgYXJlCiAJCQkJICogcHVibGlz aGVkLiAgSWYgc28sIG5vdGUgZG93biB0aGUgdG9wbW9zdCBhbmNlc3RvciB0aGF0IGlzCkBA IC0xMjQ5LDYgKzEyNzAsNyBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpk YXRhLCBPaWQgcmVsaWQpCiAJCQkJCQkJbGlzdF9tZW1iZXJfb2lkKGFzY2hlbWFQdWJpZHMs IHB1Yi0+b2lkKSkKIAkJCQkJCXsKIAkJCQkJCQlhbmNlc3Rvcl9wdWJsaXNoZWQgPSB0cnVl OworCQkJCQkJCWFuY2VzdG9yX2lkID0gYW5jZXN0b3I7CiAJCQkJCQkJaWYgKHB1Yi0+cHVi dmlhcm9vdCkKIAkJCQkJCQkJcHVibGlzaF9hc19yZWxpZCA9IGFuY2VzdG9yOwogCQkJCQkJ fQpAQCAtMTI2NCw5ICsxMjg2LDEzIEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERh dGEgKmRhdGEsIE9pZCByZWxpZCkKIAkJCX0KIAogCQkJLyoKKwkJCSAqIElmIHRoZSByZWxh dGlvbiBpcyB0byBiZSBwdWJsaXNoZWQsIGRldGVybWluZSBhY3Rpb25zIHRvCisJCQkgKiBw dWJsaXNoLCBhbmQgbGlzdCBvZiBjb2x1bW5zLCBpZiBhcHByb3ByaWF0ZS4KKwkJCSAqCiAJ CQkgKiBEb24ndCBwdWJsaXNoIGNoYW5nZXMgZm9yIHBhcnRpdGlvbmVkIHRhYmxlcywgYmVj YXVzZQotCQkJICogcHVibGlzaGluZyB0aG9zZSBvZiBpdHMgcGFydGl0aW9ucyBzdWZmaWNl cywgdW5sZXNzIHBhcnRpdGlvbgotCQkJICogY2hhbmdlcyB3b24ndCBiZSBwdWJsaXNoZWQg ZHVlIHRvIHB1YnZpYXJvb3QgYmVpbmcgc2V0LgorCQkJICogcHVibGlzaGluZyB0aG9zZSBv ZiBpdHMgcGFydGl0aW9ucyBzdWZmaWNlcy4gIChIb3dldmVyLCBpZ25vcmUKKwkJCSAqIHRo aXMgaWYgcGFydGl0aW9uIGNoYW5nZXMgYXJlIG5vdCB0byBwdWJsaXNoZWQgZHVlIHRvCisJ CQkgKiBwdWJ2aWFyb290IGJlaW5nIHNldC4pCiAJCQkgKi8KIAkJCWlmIChwdWJsaXNoICYm CiAJCQkJKHJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSB8fCBwdWItPnB1 YnZpYXJvb3QpKQpAQCAtMTI3NSwxMCArMTMwMSw3NCBAQCBnZXRfcmVsX3N5bmNfZW50cnko UEdPdXRwdXREYXRhICpkYXRhLCBPaWQgcmVsaWQpCiAJCQkJZW50cnktPnB1YmFjdGlvbnMu cHVidXBkYXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGU7CiAJCQkJZW50cnktPnB1 YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7CiAJCQkJ ZW50cnktPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnRy dW5jYXRlOworCisJCQkJLyoKKwkJCQkgKiBPYnRhaW4gY29sdW1ucyBwdWJsaXNoZWQgYnkg dGhpcyBwdWJsaWNhdGlvbiwgYW5kIGFkZCB0aGVtCisJCQkJICogdG8gdGhlIGxpc3QgZm9y IHRoaXMgcmVsLiAgTm90ZSB0aGF0IGlmIGF0IGxlYXN0IG9uZQorCQkJCSAqIHB1YmxpY2F0 aW9uIGhhcyBhIGVtcHR5IGNvbHVtbiBsaXN0LCB0aGF0IG1lYW5zIHRvIHB1Ymxpc2gKKwkJ CQkgKiBldmVyeXRoaW5nOyBzbyBpZiB3ZSBzYXcgYSBwdWJsaWNhdGlvbiB0aGF0IGluY2x1 ZGVzIGFsbAorCQkJCSAqIGNvbHVtbnMsIHNraXAgdGhpcy4KKwkJCQkgKi8KKwkJCQlpZiAo IWFsbF9jb2x1bW5zKQorCQkJCXsKKwkJCQkJSGVhcFR1cGxlCXB1Yl9yZWxfdHVwbGU7CisJ CQkJCU9pZAkJCXJlbGlkOworCisJCQkJCXJlbGlkID0gYW5jZXN0b3JfcHVibGlzaGVkID8g YW5jZXN0b3JfaWQgOiBwdWJsaXNoX2FzX3JlbGlkOworCisJCQkJCXB1Yl9yZWxfdHVwbGUg PSBTZWFyY2hTeXNDYWNoZTIoUFVCTElDQVRJT05SRUxNQVAsCisJCQkJCQkJCQkJCQkJT2Jq ZWN0SWRHZXREYXR1bShyZWxpZCksCisJCQkJCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShw dWItPm9pZCkpOworCisJCQkJCWlmIChIZWFwVHVwbGVJc1ZhbGlkKHB1Yl9yZWxfdHVwbGUp KQorCQkJCQl7CisJCQkJCQlEYXR1bQkJcHViX3JlbF9jb2xzOworCQkJCQkJYm9vbAkJaXNu dWxsOworCisJCQkJCQlwdWJfcmVsX2NvbHMgPSBTeXNDYWNoZUdldEF0dHIoUFVCTElDQVRJ T05SRUxNQVAsCisJCQkJCQkJCQkJCQkJICAgcHViX3JlbF90dXBsZSwKKwkJCQkJCQkJCQkJ CQkgICBBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzLAorCQkJCQkJCQkJCQkJCSAg ICZpc251bGwpOworCQkJCQkJaWYgKGlzbnVsbCkKKwkJCQkJCXsKKwkJCQkJCQkvKgorCQkJ CQkJCSAqIElmIHdlIHNlZSBhIHB1YmxpY2F0aW9uIHdpdGggbm8gY29sdW1ucywgcmVzZXQg dGhlCisJCQkJCQkJICogbGlzdCBhbmQgaWdub3JlIGZ1cnRoZXIgb25lcy4KKwkJCQkJCQkg Ki8KKwkJCQkJCQlhbGxfY29sdW1ucyA9IHRydWU7CisJCQkJCQkJYm1zX2ZyZWUoZW50cnkt PmNvbHVtbnMpOworCQkJCQkJCWVudHJ5LT5jb2x1bW5zID0gTlVMTDsKKwkJCQkJCX0KKwkJ CQkJCWVsc2UgaWYgKCFpc251bGwpCisJCQkJCQl7CisJCQkJCQkJQXJyYXlUeXBlICAqYXJy OworCQkJCQkJCWludAkJCW5lbGVtczsKKwkJCQkJCQlpbnQxNgkgICAqZWxlbXM7CisKKwkJ CQkJCQlhcnIgPSBEYXR1bUdldEFycmF5VHlwZVAocHViX3JlbF9jb2xzKTsKKwkJCQkJCQlu ZWxlbXMgPSBBUlJfRElNUyhhcnIpWzBdOworCQkJCQkJCWVsZW1zID0gKGludDE2ICopIEFS Ul9EQVRBX1BUUihhcnIpOworCisJCQkJCQkJLyogWFhYIGlzIHRoZXJlIGEgZGFuZ2VyIG9m IG1lbW9yeSBsZWFrIGhlcmU/IGJld2FyZSAqLworCQkJCQkJCW9sZGN0eCA9IE1lbW9yeUNv bnRleHRTd2l0Y2hUbyhDYWNoZU1lbW9yeUNvbnRleHQpOworCQkJCQkJCWZvciAoaW50IGkg PSAwOyBpIDwgbmVsZW1zOyBpKyspCisJCQkJCQkJCWVudHJ5LT5jb2x1bW5zID0gYm1zX2Fk ZF9tZW1iZXIoZW50cnktPmNvbHVtbnMsCisJCQkJCQkJCQkJCQkJCQkJZWxlbXNbaV0pOwor CQkJCQkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCQkJCQkJfQorCisJCQkJ CQlSZWxlYXNlU3lzQ2FjaGUocHViX3JlbF90dXBsZSk7CisJCQkJCX0KKwkJCQl9CiAJCQl9 CiAKKwkJCS8qCisJCQkgKiBJZiB3ZSd2ZSBzZWVuIGFsbCBhY3Rpb24gYml0cywgYW5kIHdl IGtub3cgdGhhdCBhbGwgY29sdW1ucyBhcmUKKwkJCSAqIHB1Ymxpc2hlZCwgdGhlcmUncyBu byByZWFzb24gdG8gbG9vayBhdCBmdXJ0aGVyIHB1YmxpY2F0aW9ucy4KKwkJCSAqLwogCQkJ aWYgKGVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2VydCAmJiBlbnRyeS0+cHViYWN0aW9ucy5w dWJ1cGRhdGUgJiYKLQkJCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZWxldGUgJiYgZW50cnkt PnB1YmFjdGlvbnMucHVidHJ1bmNhdGUpCisJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVs ZXRlICYmIGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlICYmCisJCQkJYWxsX2NvbHVt bnMpCiAJCQkJYnJlYWs7CiAJCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuYyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKaW5kZXggNDQ4NWVhODNiMWUu LjJjMzQ3ZTgwZWUwIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTQwNzQsNiArNDA3NCw3IEBAIGdl dFB1YmxpY2F0aW9uVGFibGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZvW10s IGludCBudW1UYWJsZXMpCiAJaW50CQkJaV9vaWQ7CiAJaW50CQkJaV9wcnB1YmlkOwogCWlu dAkJCWlfcHJyZWxpZDsKKwlpbnQJCQlpX3ByYXR0cnM7CiAJaW50CQkJaSwKIAkJCQlqLAog CQkJCW50dXBzOwpAQCAtNDA4NSw4ICs0MDg2LDEzIEBAIGdldFB1YmxpY2F0aW9uVGFibGVz KEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1UYWJsZXMpCiAK IAkvKiBDb2xsZWN0IGFsbCBwdWJsaWNhdGlvbiBtZW1iZXJzaGlwIGluZm8uICovCiAJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksCi0JCQkJCQkgIlNFTEVDVCB0YWJsZW9pZCwgb2lk LCBwcnB1YmlkLCBwcnJlbGlkICIKLQkJCQkJCSAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1Ymxp Y2F0aW9uX3JlbCIpOworCQkJCQkJICJTRUxFQ1QgdGFibGVvaWQsIG9pZCwgcHJwdWJpZCwg cHJyZWxpZCIpOworCWlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDE1MDAwMCkKKwkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIHByYXR0cnMiKTsKKwllbHNlCisJCWFwcGVu ZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiLCBOVUxMIGFzIHByYXR0cnMiKTsKKwlhcHBlbmRQ UUV4cEJ1ZmZlclN0cihxdWVyeSwKKwkJCQkJCSAiIEZST00gcGdfY2F0YWxvZy5wZ19wdWJs aWNhdGlvbl9yZWwiKTsKIAlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwgcXVlcnktPmRh dGEsIFBHUkVTX1RVUExFU19PSyk7CiAKIAludHVwcyA9IFBRbnR1cGxlcyhyZXMpOwpAQCAt NDA5NSw2ICs0MTAxLDcgQEAgZ2V0UHVibGljYXRpb25UYWJsZXMoQXJjaGl2ZSAqZm91dCwg VGFibGVJbmZvIHRibGluZm9bXSwgaW50IG51bVRhYmxlcykKIAlpX29pZCA9IFBRZm51bWJl cihyZXMsICJvaWQiKTsKIAlpX3BycHViaWQgPSBQUWZudW1iZXIocmVzLCAicHJwdWJpZCIp OwogCWlfcHJyZWxpZCA9IFBRZm51bWJlcihyZXMsICJwcnJlbGlkIik7CisJaV9wcmF0dHJz ID0gUFFmbnVtYmVyKHJlcywgInByYXR0cnMiKTsKIAogCS8qIHRoaXMgYWxsb2NhdGlvbiBt YXkgYmUgbW9yZSB0aGFuIHdlIG5lZWQgKi8KIAlwdWJyaW5mbyA9IHBnX21hbGxvYyhudHVw cyAqIHNpemVvZihQdWJsaWNhdGlvblJlbEluZm8pKTsKQEAgLTQxMzYsNiArNDE0MywyOCBA QCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJsZUluZm8gdGJsaW5m b1tdLCBpbnQgbnVtVGFibGVzKQogCQlwdWJyaW5mb1tqXS5wdWJsaWNhdGlvbiA9IHB1Ymlu Zm87CiAJCXB1YnJpbmZvW2pdLnB1YnRhYmxlID0gdGJpbmZvOwogCisJCWlmICghUFFnZXRp c251bGwocmVzLCBpLCBpX3ByYXR0cnMpKQorCQl7CisJCQljaGFyCSAgKiphdHRuYW1lczsK KwkJCWludAkJCW5hdHRuYW1lczsKKwkJCVBRRXhwQnVmZmVyIGF0dHJpYnM7CisKKwkJCWlm ICghcGFyc2VQR0FycmF5KFBRZ2V0dmFsdWUocmVzLCBpLCBpX3ByYXR0cnMpLAorCQkJCQkJ CSAgJmF0dG5hbWVzLCAmbmF0dG5hbWVzKSkKKwkJCQlmYXRhbCgiY291bGQgbm90IHBhcnNl ICVzIGFycmF5IiwgInByYXR0cnMiKTsKKwkJCWF0dHJpYnMgPSBjcmVhdGVQUUV4cEJ1ZmZl cigpOworCQkJZm9yIChpbnQgayA9IDA7IGsgPCBuYXR0bmFtZXM7IGsrKykKKwkJCXsKKwkJ CQlpZiAoayA+IDApCisJCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGF0dHJpYnMsICIsICIp OworCisJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYXR0cmlicywgZm10SWQoYXR0bmFtZXNb a10pKTsKKwkJCX0KKwkJCXB1YnJpbmZvW2ldLnB1YnJhdHRycyA9IGF0dHJpYnMtPmRhdGE7 CisJCX0KKwkJZWxzZQorCQkJcHVicmluZm9bal0ucHVicmF0dHJzID0gTlVMTDsKKwogCQkv KiBEZWNpZGUgd2hldGhlciB3ZSB3YW50IHRvIGR1bXAgaXQgKi8KIAkJc2VsZWN0RHVtcGFi bGVQdWJsaWNhdGlvbk9iamVjdCgmKHB1YnJpbmZvW2pdLmRvYmopLCBmb3V0KTsKIApAQCAt NDIxMCwxMCArNDIzOSwxMiBAQCBkdW1wUHVibGljYXRpb25UYWJsZShBcmNoaXZlICpmb3V0 LCBjb25zdCBQdWJsaWNhdGlvblJlbEluZm8gKnB1YnJpbmZvKQogCiAJcXVlcnkgPSBjcmVh dGVQUUV4cEJ1ZmZlcigpOwogCi0JYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksICJBTFRFUiBQ VUJMSUNBVElPTiAlcyBBREQgVEFCTEUgT05MWSIsCisJYXBwZW5kUFFFeHBCdWZmZXIocXVl cnksICJBTFRFUiBQVUJMSUNBVElPTiAlcyBBREQgVEFCTEUgT05MWSAiLAogCQkJCQkgIGZt dElkKHB1YmluZm8tPmRvYmoubmFtZSkpOwotCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LCAi ICVzO1xuIiwKLQkJCQkJICBmbXRRdWFsaWZpZWREdW1wYWJsZSh0YmluZm8pKTsKKwlhcHBl bmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgZm10UXVhbGlmaWVkRHVtcGFibGUodGJpbmZvKSk7 CisJaWYgKHB1YnJpbmZvLT5wdWJyYXR0cnMpCisJCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5 LCAiICglcykiLCBwdWJyaW5mby0+cHVicmF0dHJzKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0 cihxdWVyeSwgIjtcbiIpOwogCiAJLyoKIAkgKiBUaGVyZSBpcyBubyBwb2ludCBpbiBjcmVh dGluZyBhIGRyb3AgcXVlcnkgYXMgdGhlIGRyb3AgaXMgZG9uZSBieSB0YWJsZQpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19k dW1wLmgKaW5kZXggOTk2NWFjMjUxOGIuLjU0ZGY2OTk2NDI4IDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgK QEAgLTYzMSw2ICs2MzEsNyBAQCB0eXBlZGVmIHN0cnVjdCBfUHVibGljYXRpb25SZWxJbmZv CiAJRHVtcGFibGVPYmplY3QgZG9iajsKIAlQdWJsaWNhdGlvbkluZm8gKnB1YmxpY2F0aW9u OwogCVRhYmxlSW5mbyAgKnB1YnRhYmxlOworCWNoYXIJICAgKnB1YnJhdHRyczsKIH0gUHVi bGljYXRpb25SZWxJbmZvOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Rlc2Ny aWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwppbmRleCA2NTRlZjJkN2MzMC4uMWQx NDc0YThjMjkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3Ny Yy9iaW4vcHNxbC9kZXNjcmliZS5jCkBAIC01ODU2LDcgKzU4NTYsNyBAQCBsaXN0UHVibGlj YXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAgKi8KIHN0YXRpYyBib29sCiBhZGRGb290 ZXJUb1B1YmxpY2F0aW9uRGVzYyhQUUV4cEJ1ZmZlciBidWYsIGNoYXIgKmZvb3Rlcm1zZywK LQkJCQkJCSAgIGJvb2wgc2luZ2xlY29sLCBwcmludFRhYmxlQ29udGVudCAqY29udCkKKwkJ CQkJCSAgIGJvb2wgYXNfc2NoZW1hLCBwcmludFRhYmxlQ29udGVudCAqY29udCkKIHsKIAlQ R3Jlc3VsdCAgICpyZXM7CiAJaW50CQkJY291bnQgPSAwOwpAQCAtNTg3MywxMCArNTg3Mywx NCBAQCBhZGRGb290ZXJUb1B1YmxpY2F0aW9uRGVzYyhQUUV4cEJ1ZmZlciBidWYsIGNoYXIg KmZvb3Rlcm1zZywKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogCXsKLQkJaWYg KCFzaW5nbGVjb2wpCisJCWlmICghYXNfc2NoZW1hKQkJCS8qIGFzIHRhYmxlICovCisJCXsK IAkJCXByaW50ZlBRRXhwQnVmZmVyKGJ1ZiwgIiAgICBcIiVzLiVzXCIiLCBQUWdldHZhbHVl KHJlcywgaSwgMCksCiAJCQkJCQkJICBQUWdldHZhbHVlKHJlcywgaSwgMSkpOwotCQllbHNl CisJCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgMikpCisJCQkJYXBwZW5kUFFFeHBCdWZm ZXIoYnVmLCAiICglcykiLCBQUWdldHZhbHVlKHJlcywgaSwgMikpOworCQl9CisJCWVsc2UJ CQkJCS8qIGFzIHNjaGVtYSAqLwogCQkJcHJpbnRmUFFFeHBCdWZmZXIoYnVmLCAiICAgIFwi JXNcIiIsIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSk7CiAKIAkJcHJpbnRUYWJsZUFkZEZvb3Rl cihjb250LCBidWYtPmRhdGEpOwpAQCAtNjAwNCw4ICs2MDA4LDIwIEBAIGRlc2NyaWJlUHVi bGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCXsKIAkJCS8qIEdldCB0aGUgdGFi bGVzIGZvciB0aGUgc3BlY2lmaWVkIHB1YmxpY2F0aW9uICovCiAJCQlwcmludGZQUUV4cEJ1 ZmZlcigmYnVmLAotCQkJCQkJCSAgIlNFTEVDVCBuLm5zcG5hbWUsIGMucmVsbmFtZVxuIgot CQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjLFxuIgorCQkJCQkJCSAgIlNF TEVDVCBuLm5zcG5hbWUsIGMucmVsbmFtZSwgXG4iKTsKKwkJCWlmIChwc2V0LnN2ZXJzaW9u ID49IDE1MDAwMCkKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJCQkJCQkJ ICIgICAgICAgQ0FTRSBXSEVOIHByLnByYXR0cnMgSVMgTk9UIE5VTEwgVEhFTlxuIgorCQkJ CQkJCQkJICIgICAgICAgcGdfY2F0YWxvZy5hcnJheV90b19zdHJpbmciCisJCQkJCQkJCQkg IihBUlJBWShTRUxFQ1QgYXR0bmFtZVxuIgorCQkJCQkJCQkJICIgICAgICAgICBGUk9NIHBn X2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzKDAsIHBnX2NhdGFsb2cuYXJyYXlfdXBwZXIocHIu cHJhdHRyczo6cGdfY2F0YWxvZy5pbnQyW10sIDEpKSBzLFxuIgorCQkJCQkJCQkJICIgICAg ICAgICAgICAgIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlXG4iCisJCQkJCQkJCQkgIiAgICAg ICAgV0hFUkUgYXR0cmVsaWQgPSBjLm9pZCBBTkQgYXR0bnVtID0gcHJhdHRyc1tzXSksICcs ICcpXG4iCisJCQkJCQkJCQkgIiAgICAgICBFTFNFIE5VTEwgRU5EIEFTIGNvbHVtbnMiKTsK KwkJCWVsc2UKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiTlVMTCBhcyBjb2x1 bW5zIik7CisJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkJCSAgIlxuRlJPTSBw Z19jYXRhbG9nLnBnX2NsYXNzIGMsXG4iCiAJCQkJCQkJICAiICAgICBwZ19jYXRhbG9nLnBn X25hbWVzcGFjZSBuLFxuIgogCQkJCQkJCSAgIiAgICAgcGdfY2F0YWxvZy5wZ19wdWJsaWNh dGlvbl9yZWwgcHJcbiIKIAkJCQkJCQkgICJXSEVSRSBjLnJlbG5hbWVzcGFjZSA9IG4ub2lk XG4iCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgg Yi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggODQxYjliNmMy NTMuLjcwZjczZDAxZGMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1 YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5o CkBAIC04Niw2ICs4Niw3IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uCiB0eXBlZGVm IHN0cnVjdCBQdWJsaWNhdGlvblJlbEluZm8KIHsKIAlSZWxhdGlvbglyZWxhdGlvbjsKKwlM aXN0CSAgICpjb2x1bW5zOwogfSBQdWJsaWNhdGlvblJlbEluZm87CiAKIGV4dGVybiBQdWJs aWNhdGlvbiAqR2V0UHVibGljYXRpb24oT2lkIHB1YmlkKTsKQEAgLTEwOSw4ICsxMTAsMTEg QEAgdHlwZWRlZiBlbnVtIFB1YmxpY2F0aW9uUGFydE9wdAogfSBQdWJsaWNhdGlvblBhcnRP cHQ7CiAKIGV4dGVybiBMaXN0ICpHZXRQdWJsaWNhdGlvblJlbGF0aW9ucyhPaWQgcHViaWQs IFB1YmxpY2F0aW9uUGFydE9wdCBwdWJfcGFydG9wdCk7CitleHRlcm4gTGlzdCAqR2V0UmVs YXRpb25Db2x1bW5QYXJ0aWFsUHVibGljYXRpb25zKE9pZCByZWxpZCk7CitleHRlcm4gTGlz dCAqR2V0UmVsYXRpb25Db2x1bW5MaXN0SW5QdWJsaWNhdGlvbihPaWQgcmVsaWQsIE9pZCBw dWJpZCk7CiBleHRlcm4gTGlzdCAqR2V0QWxsVGFibGVzUHVibGljYXRpb25zKHZvaWQpOwog ZXh0ZXJuIExpc3QgKkdldEFsbFRhYmxlc1B1YmxpY2F0aW9uUmVsYXRpb25zKGJvb2wgcHVi dmlhcm9vdCk7CitleHRlcm4gdm9pZCBHZXRBY3Rpb25zSW5QdWJsaWNhdGlvbihPaWQgcHVi aWQsIFB1YmxpY2F0aW9uQWN0aW9ucyAqYWN0aW9ucyk7CiBleHRlcm4gTGlzdCAqR2V0UHVi bGljYXRpb25TY2hlbWFzKE9pZCBwdWJpZCk7CiBleHRlcm4gTGlzdCAqR2V0U2NoZW1hUHVi bGljYXRpb25zKE9pZCBzY2hlbWFpZCk7CiBleHRlcm4gTGlzdCAqR2V0U2NoZW1hUHVibGlj YXRpb25SZWxhdGlvbnMoT2lkIHNjaGVtYWlkLApAQCAtMTI3LDYgKzEzMSw4IEBAIGV4dGVy biBPYmplY3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1 YmxpY2F0aW9uUmVsSW5mbyAqdGFyCiAJCQkJCQkJCQkJCSAgYm9vbCBpZl9ub3RfZXhpc3Rz KTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIHB1YmxpY2F0aW9uX2FkZF9zY2hlbWEoT2lkIHB1 YmlkLCBPaWQgc2NoZW1haWQsCiAJCQkJCQkJCQkJCWJvb2wgaWZfbm90X2V4aXN0cyk7Citl eHRlcm4gdm9pZCBwdWJsaWNhdGlvbl9zZXRfdGFibGVfY29sdW1ucyhSZWxhdGlvbiBwdWJy ZWwsIEhlYXBUdXBsZSBwdWJyZWx0dXAsCisJCQkJCQkJCQkJICBSZWxhdGlvbiB0YXJnZXRy ZWwsIExpc3QgKmNvbHVtbnMpOwogCiBleHRlcm4gT2lkCWdldF9wdWJsaWNhdGlvbl9vaWQo Y29uc3QgY2hhciAqcHVibmFtZSwgYm9vbCBtaXNzaW5nX29rKTsKIGV4dGVybiBjaGFyICpn ZXRfcHVibGljYXRpb25fbmFtZShPaWQgcHViaWQsIGJvb2wgbWlzc2luZ19vayk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oIGIvc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaAppbmRleCAxMTdhMWQ2N2U1 Ni4uMjkxYWI3M2ZlZTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVi bGljYXRpb25fcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlv bl9yZWwuaApAQCAtMzEsNiArMzEsOSBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0aW9uX3JlbCw2 MTA2LFB1YmxpY2F0aW9uUmVsUmVsYXRpb25JZCkKIAlPaWQJCQlvaWQ7CQkJLyogb2lkICov CiAJT2lkCQkJcHJwdWJpZCBCS0lfTE9PS1VQKHBnX3B1YmxpY2F0aW9uKTsgLyogT2lkIG9m IHRoZSBwdWJsaWNhdGlvbiAqLwogCU9pZAkJCXBycmVsaWQgQktJX0xPT0tVUChwZ19jbGFz cyk7CS8qIE9pZCBvZiB0aGUgcmVsYXRpb24gKi8KKyNpZmRlZiBDQVRBTE9HX1ZBUkxFTgkJ CS8qIHZhcmlhYmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSAqLworCWludDJ2ZWN0b3IJ cHJhdHRyczsKKyNlbmRpZgogfSBGb3JtRGF0YV9wZ19wdWJsaWNhdGlvbl9yZWw7CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCAzNDIxOGI3 MThjMS4uMWJlY2I1Yjc4ZWEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTM2NTEs NiArMzY1MSw3IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uVGFibGUKIHsKIAlOb2Rl VGFnCQl0eXBlOwogCVJhbmdlVmFyICAgKnJlbGF0aW9uOwkJLyogcmVsYXRpb24gdG8gYmUg cHVibGlzaGVkICovCisJTGlzdAkgICAqY29sdW1uczsJCS8qIExpc3Qgb2YgY29sdW1ucyBp biBhIHB1YmxpY2F0aW9uIHRhYmxlICovCiB9IFB1YmxpY2F0aW9uVGFibGU7CiAKIC8qCkBA IC0zNjg3LDcgKzM2ODgsOCBAQCB0eXBlZGVmIGVudW0gQWx0ZXJQdWJsaWNhdGlvbkFjdGlv bgogewogCUFQX0FkZE9iamVjdHMsCQkJCS8qIGFkZCBvYmplY3RzIHRvIHB1YmxpY2F0aW9u ICovCiAJQVBfRHJvcE9iamVjdHMsCQkJCS8qIHJlbW92ZSBvYmplY3RzIGZyb20gcHVibGlj YXRpb24gKi8KLQlBUF9TZXRPYmplY3RzCQkJCS8qIHNldCBsaXN0IG9mIG9iamVjdHMgKi8K KwlBUF9TZXRPYmplY3RzLAkJCQkvKiBzZXQgbGlzdCBvZiBvYmplY3RzICovCisJQVBfU2V0 Q29sdW1ucwkJCQkvKiBjaGFuZ2UgbGlzdCBvZiBjb2x1bW5zIGZvciBhIHRhYmxlICovCiB9 IEFsdGVyUHVibGljYXRpb25BY3Rpb247CiAKIHR5cGVkZWYgc3RydWN0IEFsdGVyUHVibGlj YXRpb25TdG10CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fs cHJvdG8uaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCmluZGV4 IDIyZmZmYWNhNjJkLi5mY2JlZDRlZDJkNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbG9naWNhbHByb3RvLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v bG9naWNhbHByb3RvLmgKQEAgLTIwNywxMSArMjA3LDExIEBAIGV4dGVybiB2b2lkIGxvZ2lj YWxyZXBfd3JpdGVfb3JpZ2luKFN0cmluZ0luZm8gb3V0LCBjb25zdCBjaGFyICpvcmlnaW4s CiBleHRlcm4gY2hhciAqbG9naWNhbHJlcF9yZWFkX29yaWdpbihTdHJpbmdJbmZvIGluLCBY TG9nUmVjUHRyICpvcmlnaW5fbHNuKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVf aW5zZXJ0KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCVJl bGF0aW9uIHJlbCwgSGVhcFR1cGxlIG5ld3R1cGxlLAotCQkJCQkJCQkJYm9vbCBiaW5hcnkp OworCQkJCQkJCQkJYm9vbCBiaW5hcnksIEJpdG1hcHNldCAqY29sdW1ucyk7CiBleHRlcm4g TG9naWNhbFJlcFJlbElkIGxvZ2ljYWxyZXBfcmVhZF9pbnNlcnQoU3RyaW5nSW5mbyBpbiwg TG9naWNhbFJlcFR1cGxlRGF0YSAqbmV3dHVwKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBf d3JpdGVfdXBkYXRlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJ CQkJCVJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIG9sZHR1cGxlLAotCQkJCQkJCQkJSGVhcFR1 cGxlIG5ld3R1cGxlLCBib29sIGJpbmFyeSk7CisJCQkJCQkJCQlIZWFwVHVwbGUgbmV3dHVw bGUsIGJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogZXh0ZXJuIExvZ2ljYWxS ZXBSZWxJZCBsb2dpY2FscmVwX3JlYWRfdXBkYXRlKFN0cmluZ0luZm8gaW4sCiAJCQkJCQkJ CQkJCSAgYm9vbCAqaGFzX29sZHR1cGxlLCBMb2dpY2FsUmVwVHVwbGVEYXRhICpvbGR0dXAs CiAJCQkJCQkJCQkJCSAgTG9naWNhbFJlcFR1cGxlRGF0YSAqbmV3dHVwKTsKQEAgLTIyOCw3 ICsyMjgsNyBAQCBleHRlcm4gTGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5jYXRlKFN0cmlu Z0luZm8gaW4sCiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5n SW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKIAkJCQkJCQkJ CSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwgU2l6ZSBzeiwgY29u c3QgY2hhciAqbWVzc2FnZSk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3JlbChT dHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCi0JCQkJCQkJCSBSZWxhdGlvbiBy ZWwpOworCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogZXh0 ZXJuIExvZ2ljYWxSZXBSZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3JlbChTdHJpbmdJbmZv IGluKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdHlwKFN0cmluZ0luZm8gb3V0 LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJIE9pZCB0eXBvaWQpOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlvbi5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAppbmRleCBiOTdmOThjZGE3Mi4u ODYxZWFmNmY2OTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVi bGljYXRpb24ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRp b24ub3V0CkBAIC0xNjUsOCArMTY1LDU0IEBAIFB1YmxpY2F0aW9uczoKICByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICAgIHwgZgogKDEgcm93KQogCi1EUk9QIFRBQkxFIHRlc3RwdWJfdGJs MjsKLURST1AgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JhbGx0YWJsZXMsIHRlc3RwdWJfZm9y dGFibGUsIHRlc3RwdWJfZm9yc2NoZW1hOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsNSAo YSBpbnQgUFJJTUFSWSBLRVksIGIgdGV4dCwgYyB0ZXh0LAorCWQgaW50IGdlbmVyYXRlZCBh bHdheXMgYXMgKGEgKyBsZW5ndGgoYikpIHN0b3JlZCk7CitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIHgpOyAgLS0gZXJy b3IKK0VSUk9SOiAgY29sdW1uICJ4IiBvZiByZWxhdGlvbiAidGVzdHB1Yl90Ymw1IiBkb2Vz IG5vdCBleGlzdAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFC TEUgdGVzdHB1Yl90Ymw1IChiLCBjKTsgIC0tIGVycm9yCitFUlJPUjogIGludmFsaWQgY29s dW1uIGxpc3QgZm9yIHB1Ymxpc2hpbmcgcmVsYXRpb24gInRlc3RwdWJfdGJsNSIKK0RFVEFJ TDogIEFsbCBjb2x1bW5zIGluIFJFUExJQ0EgSURFTlRJVFkgbXVzdCBiZSBwcmVzZW50IGlu IHRoZSBjb2x1bW4gbGlzdC4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUg QUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgZCk7ICAtLSBlcnJvcgorRVJST1I6ICBjYW5u b3QgcmVmZXJlbmNlIGdlbmVyYXRlZCBjb2x1bW4gImQiIGluIHB1YmxpY2F0aW9uIGNvbHVt biBsaXN0CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0 ZXN0cHViX3RibDUgKGEsIGMpOyAgLS0gb2sKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNSBE Uk9QIENPTFVNTiBjOwkJLS0gbm8gZGljZQorRVJST1I6ICBjYW5ub3QgZHJvcCBjb2x1bW4g ImMiIGJlY2F1c2UgaXQgaXMgcGFydCBvZiBwdWJsaWNhdGlvbiAidGVzdHB1Yl9mb3J0YWJs ZSIKK0hJTlQ6ICBTcGVjaWZ5IENBU0NBREUgb3IgdXNlIEFMVEVSIFBVQkxJQ0FUSU9OIHRv IHJlbW92ZSB0aGUgY29sdW1uIGZyb20gdGhlIHB1YmxpY2F0aW9uLgorLyogbm90IGFsbCBy ZXBsaWNhIGlkZW50aXRpZXMgYXJlIGdvb2QgZW5vdWdoICovCitDUkVBVEUgVU5JUVVFIElO REVYIHRlc3RwdWJfdGJsNV9iX2tleSBPTiB0ZXN0cHViX3RibDUgKGIsIGMpOworQUxURVIg VEFCTEUgdGVzdHB1Yl90Ymw1IEFMVEVSIGIgU0VUIE5PVCBOVUxMLCBBTFRFUiBjIFNFVCBO T1QgTlVMTDsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNSBSRVBMSUNBIElERU5USVRZIFVT SU5HIElOREVYIHRlc3RwdWJfdGJsNV9iX2tleTsgLS0gbm9wZQorRVJST1I6ICBpbmRleCAi dGVzdHB1Yl90Ymw1X2Jfa2V5IiBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIHB1YmxpY2F0aW9u ICJ0ZXN0cHViX2ZvcnRhYmxlIiBkb2VzIG5vdCBpbmNsdWRlIGFsbCBpbmRleGVkIGNvbHVt bnMKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRSB0ZXN0 cHViX3RibDU7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDUgUkVQTElDQSBJREVOVElUWSBV U0lORyBJTkRFWCB0ZXN0cHViX3RibDVfYl9rZXk7IC0tIG9rLCBidXQgLi4uCitBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEs IGMpOwktLSBubyBkaWNlCitFUlJPUjogIGludmFsaWQgY29sdW1uIGxpc3QgZm9yIHB1Ymxp c2hpbmcgcmVsYXRpb24gInRlc3RwdWJfdGJsNSIKK0RFVEFJTDogIEFsbCBjb2x1bW5zIGlu IFJFUExJQ0EgSURFTlRJVFkgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBjb2x1bW4gbGlzdC4K Ky8qIEJ1dCBpZiB1cGQvZGVsIGFyZSBub3QgcHVibGlzaGVkLCBpdCB3b3JrcyBPSyAqLwor U0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWJfdGFibGVfaW5zIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB0cnVuY2F0ZScp OworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfdGFibGVfaW5zIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEpOwkJLS0gb2sKK1xkUnAr IHRlc3RwdWJfdGFibGVfaW5zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVz IHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgfCB0ICAgICAgICAgfCBmCitUYWJsZXM6CisgICAgInB1YmxpYy50 ZXN0cHViX3RibDUiIChhKQorCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw2IChhIGludCwg YiB0ZXh0LCBjIHRleHQpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw2IFJFUExJQ0EgSURF TlRJVFkgRlVMTDsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRB QkxFIHRlc3RwdWJfdGJsNiAoYSwgYiwgYyk7ICAtLSBlcnJvcgorRVJST1I6ICBpbnZhbGlk IGNvbHVtbiBsaXN0IGZvciBwdWJsaXNoaW5nIHJlbGF0aW9uICJ0ZXN0cHViX3RibDYiCitE RVRBSUw6ICBDYW5ub3Qgc3BlY2lmeSBhIGNvbHVtbiBsaXN0IG9uIHJlbGF0aW9ucyB3aXRo IFJFUExJQ0EgSURFTlRJVFkgRlVMTC4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNjsgLS0gb2sKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWJfZm9ydGFibGUKKyAgQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw2IFNFVCBDT0xV TU5TIChhLCBiLCBjKTsJLS0gZXJyb3IKK0VSUk9SOiAgY2Fubm90IGNoYW5nZSBjb2x1bW4g c2V0IGZvciByZWxhdGlvbiAidGVzdHB1Yl90Ymw2IgorREVUQUlMOiAgQ2Fubm90IHNwZWNp ZnkgY29sdW1uIGxpc3Qgb24gcmVsYXRpb25zIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxM LgorRFJPUCBUQUJMRSB0ZXN0cHViX3RibDIsIHRlc3RwdWJfdGJsNSwgdGVzdHB1Yl90Ymw2 OworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcmFsbHRhYmxlcywgdGVzdHB1Yl9mb3J0 YWJsZSwgdGVzdHB1Yl9mb3JzY2hlbWEsIHRlc3RwdWJfdGFibGVfaW5zOwogQ1JFQVRFIFRB QkxFIHRlc3RwdWJfdGJsMyAoYSBpbnQpOwogQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsM2Eg KGIgdGV4dCkgSU5IRVJJVFMgKHRlc3RwdWJfdGJsMyk7CiBTRVQgY2xpZW50X21pbl9tZXNz YWdlcyA9ICdFUlJPUic7CkBAIC02ODQsNiArNzMwLDE1IEBAIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Qx LCBwdWJfdGVzCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKKy0t IFZlcmlmeSB0aGF0IGl0IGZhaWxzIHRvIGFkZCBhIHNjaGVtYSB3aXRoIGEgY29sdW1uIHNw ZWNpZmljYXRpb24KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQg QUxMIFRBQkxFUyBJTiBTQ0hFTUEgZm9vIChhLCBiKTsKK0VSUk9SOiAgc3ludGF4IGVycm9y IGF0IG9yIG5lYXIgIigiCitMSU5FIDE6IC4uLlRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFE RCBBTEwgVEFCTEVTIElOIFNDSEVNQSBmb28gKGEsIGIpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0FMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hF TUEgZm9vLCBiYXIgKGEsIGIpOworRVJST1I6ICBjb2x1bW4gc3BlY2lmaWNhdGlvbiBub3Qg YWxsb3dlZCBmb3Igc2NoZW1hcworTElORSAxOiAuLi4gdGVzdHB1YjFfZm9yc2NoZW1hIEFE RCBBTEwgVEFCTEVTIElOIFNDSEVNQSBmb28sIGJhciAoYSwgYikuLi4KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAt LSBjbGVhbnVwIHB1Yl90ZXN0MSBzY2hlbWEgZm9yIGludmFsaWRhdGlvbiB0ZXN0cwogQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjJfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBT Q0hFTUEgcHViX3Rlc3QxOwogRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEs IHRlc3RwdWI0X2ZvcnNjaGVtYSwgdGVzdHB1YjVfZm9yc2NoZW1hLCB0ZXN0cHViNl9mb3Jz Y2hlbWEsIHRlc3RwdWJfZm9ydGFibGU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wdWJsaWNhdGlvbi5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlv bi5zcWwKaW5kZXggODZjMDE5YmRkYjQuLmQwZTlmMmIxMWJhIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvcHVibGljYXRpb24uc3FsCkBAIC04OSw4ICs4OSwzOSBAQCBTRUxFQ1QgcHVibmFt ZSwgcHViYWxsdGFibGVzIEZST00gcGdfcHVibGljYXRpb24gV0hFUkUgcHVibmFtZSA9ICd0 ZXN0cHViX2ZvcmFsbAogXGQrIHRlc3RwdWJfdGJsMgogXGRScCsgdGVzdHB1Yl9mb3JhbGx0 YWJsZXMKIAotRFJPUCBUQUJMRSB0ZXN0cHViX3RibDI7Ci1EUk9QIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9yYWxsdGFibGVzLCB0ZXN0cHViX2ZvcnRhYmxlLCB0ZXN0cHViX2ZvcnNjaGVt YTsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDUgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHRl eHQsIGMgdGV4dCwKKwlkIGludCBnZW5lcmF0ZWQgYWx3YXlzIGFzIChhICsgbGVuZ3RoKGIp KSBzdG9yZWQpOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFC TEUgdGVzdHB1Yl90Ymw1IChhLCB4KTsgIC0tIGVycm9yCitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGIsIGMpOyAgLS0gZXJy b3IKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3Rw dWJfdGJsNSAoYSwgZCk7ICAtLSBlcnJvcgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9m b3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhLCBjKTsgIC0tIG9rCitBTFRFUiBU QUJMRSB0ZXN0cHViX3RibDUgRFJPUCBDT0xVTU4gYzsJCS0tIG5vIGRpY2UKKworLyogbm90 IGFsbCByZXBsaWNhIGlkZW50aXRpZXMgYXJlIGdvb2QgZW5vdWdoICovCitDUkVBVEUgVU5J UVVFIElOREVYIHRlc3RwdWJfdGJsNV9iX2tleSBPTiB0ZXN0cHViX3RibDUgKGIsIGMpOwor QUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw1IEFMVEVSIGIgU0VUIE5PVCBOVUxMLCBBTFRFUiBj IFNFVCBOT1QgTlVMTDsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNSBSRVBMSUNBIElERU5U SVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsNV9iX2tleTsgLS0gbm9wZQorQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNTsKKwor QUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw1IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgg dGVzdHB1Yl90Ymw1X2Jfa2V5OyAtLSBvaywgYnV0IC4uLgorQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhLCBjKTsJLS0gbm8g ZGljZQorCisvKiBCdXQgaWYgdXBkL2RlbCBhcmUgbm90IHB1Ymxpc2hlZCwgaXQgd29ya3Mg T0sgKi8KK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJM SUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdHJ1 bmNhdGUnKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX3RhYmxlX2lucyBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhKTsJCS0tIG9r CitcZFJwKyB0ZXN0cHViX3RhYmxlX2lucworCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw2 IChhIGludCwgYiB0ZXh0LCBjIHRleHQpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw2IFJF UExJQ0EgSURFTlRJVFkgRlVMTDsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFi bGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNiAoYSwgYiwgYyk7ICAtLSBlcnJvcgorQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw2OyAt LSBvaworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZQorICBBTFRFUiBUQUJM RSB0ZXN0cHViX3RibDYgU0VUIENPTFVNTlMgKGEsIGIsIGMpOwktLSBlcnJvcgorCitEUk9Q IFRBQkxFIHRlc3RwdWJfdGJsMiwgdGVzdHB1Yl90Ymw1LCB0ZXN0cHViX3RibDY7CitEUk9Q IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yYWxsdGFibGVzLCB0ZXN0cHViX2ZvcnRhYmxlLCB0 ZXN0cHViX2ZvcnNjaGVtYSwgdGVzdHB1Yl90YWJsZV9pbnM7CiAKIENSRUFURSBUQUJMRSB0 ZXN0cHViX3RibDMgKGEgaW50KTsKIENSRUFURSBUQUJMRSB0ZXN0cHViX3RibDNhIChiIHRl eHQpIElOSEVSSVRTICh0ZXN0cHViX3RibDMpOwpAQCAtMzc1LDYgKzQwNiwxMCBAQCBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NI RU1BIG5vbl9leGlzdGVudF9zY2hlbQogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9y c2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MTsK IFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQogCistLSBWZXJpZnkgdGhhdCBpdCBmYWlscyB0 byBhZGQgYSBzY2hlbWEgd2l0aCBhIGNvbHVtbiBzcGVjaWZpY2F0aW9uCitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIGZv byAoYSwgYik7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFM TCBUQUJMRVMgSU4gU0NIRU1BIGZvbywgYmFyIChhLCBiKTsKKwogLS0gY2xlYW51cCBwdWJf dGVzdDEgc2NoZW1hIGZvciBpbnZhbGlkYXRpb24gdGVzdHMKIEFMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWIyX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 MTsKIERST1AgUFVCTElDQVRJT04gdGVzdHB1YjNfZm9yc2NoZW1hLCB0ZXN0cHViNF9mb3Jz Y2hlbWEsIHRlc3RwdWI1X2ZvcnNjaGVtYSwgdGVzdHB1YjZfZm9yc2NoZW1hLCB0ZXN0cHVi X2ZvcnRhYmxlOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI4X2Nv bHVtbl9saXN0LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI4X2NvbHVtbl9saXN0 LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YTRmMDIyZjI2 OAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyOF9jb2x1 bW5fbGlzdC5wbApAQCAtMCwwICsxLDE2NCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjIsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBwYXJ0aWFsLWNv bHVtbiBwdWJsaWNhdGlvbiBvZiB0YWJsZXMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDk7CisKKyMgc2V0dXAKKworbXkg JG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJs aXNoZXInKTsKKyRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ICds b2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCitteSAkbm9kZV9zdWJzY3Jp YmVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdzdWJzY3JpYmVyJyk7Cisk bm9kZV9zdWJzY3JpYmVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsK KyRub2RlX3N1YnNjcmliZXItPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNvbmYnLAorCXFx KG1heF9sb2dpY2FsX3JlcGxpY2F0aW9uX3dvcmtlcnMgPSA2KSk7Ciskbm9kZV9zdWJzY3Jp YmVyLT5zdGFydDsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3RyID0gJG5vZGVfcHVibGlzaGVy LT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiMSAoYSBpbnQgUFJJTUFS WSBLRVksIFwiQlwiIGludCwgYyBpbnQpIik7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiMSAoYSBpbnQgUFJJTUFSWSBL RVksIFwiQlwiIGludCwgYyBpbnQpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGFiMiAoYSBpbnQgUFJJTUFSWSBLRVksIGIg dmFyY2hhciwgYyBpbnQpOworCUlOU0VSVCBJTlRPIHRhYjIgVkFMVUVTICgyLCAnZm9vJywg Mik7Iik7CisjIFRlc3Qgd2l0aCB3ZWlyZCBjb2x1bW4gbmFtZXMKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0YWIzIChcImEnXCIg aW50IFBSSU1BUlkgS0VZLCBCIHZhcmNoYXIsIFwiYydcIiBpbnQpIik7CisKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0ZXN0X3Bh cnQgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHRleHQsIGMgdGltZXN0YW1wdHopIFBBUlRJVElP TiBCWSBMSVNUIChhKSIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8xXzEgUEFSVElUSU9OIE9GIHRlc3RfcGFy dCBGT1IgVkFMVUVTIElOICgxLDIsMykiKTsKKyMgVGVzdCByZXBsaWNhdGlvbiB3aXRoIG11 bHRpLWxldmVsIHBhcnRpdGlvbgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8yXzEgUEFSVElUSU9OIE9GIHRlc3Rf cGFydCBGT1IgVkFMVUVTIElOICg0LDUsNikgUEFSVElUSU9OIEJZIExJU1QgKGEpIik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUg dGVzdF9wYXJ0XzJfMiBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0XzJfMSBGT1IgVkFMVUVTIElO ICg0LDUpIik7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0IChhIGludCBQUklNQVJZIEtFWSwgYiB0ZXh0KSBQ QVJUSVRJT04gQlkgTElTVCAoYSkiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0XzFfMSBQQVJUSVRJT04gT0Yg dGVzdF9wYXJ0IEZPUiBWQUxVRVMgSU4gKDEsMiwzKSIpOworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0YWIzIChcImEnXCIgaW50 IFBSSU1BUlkgS0VZLCBcImMnXCIgaW50KSIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0YWIyIChhIGludCBQUklNQVJZIEtF WSwgYiB2YXJjaGFyKSIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJIkNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfMl8xIFBBUlRJVElPTiBPRiB0ZXN0X3Bh cnQgRk9SIFZBTFVFUyBJTiAoNCw1LDYpIFBBUlRJVElPTiBCWSBMSVNUIChhKSIpOworJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBUQUJMRSB0 ZXN0X3BhcnRfMl8yIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfMl8xIEZPUiBWQUxVRVMgSU4g KDQsNSkiKTsKKworIyBUZXN0IGNyZWF0ZSBwdWJsaWNhdGlvbiB3aXRoIGEgY29sdW1uIGxp c3QKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBQ VUJMSUNBVElPTiBwdWIxIEZPUiBUQUJMRSB0YWIxKGEsIFwiQlwiKSwgdGFiMyhcImEnXCIs XCJjJ1wiKSwgdGVzdF9wYXJ0KGEsYikiKTsKKworbXkgJHJlc3VsdCA9ICRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJInNlbGVjdCByZWxuYW1lLCBwcmF0dHJz IGZyb20gcGdfcHVibGljYXRpb25fcmVsIHBiLCBwZ19jbGFzcyBwYyB3aGVyZSBwYi5wcnJl bGlkID0gcGMub2lkOyIpOworaXMoJHJlc3VsdCwgcXEodGFiMXwxIDIKK3RhYjN8MSAzCit0 ZXN0X3BhcnR8MSAyKSwgJ3B1YmxpY2F0aW9uIHJlbGF0aW9uIHVwZGF0ZWQnKTsKKworJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJ UFRJT04gc3ViMSBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJQ0FUSU9O IHB1YjEiCispOworIyBJbml0aWFsIHN5bmMKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnc3ViMScpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAorCSJJTlNFUlQgSU5UTyB0YWIxIFZBTFVFUyAoMSwyLDMpIik7CisKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJTlRPIHRhYjMgVkFM VUVTICgxLDIsMykiKTsKKyMgVGVzdCBmb3IgcmVwbGljYXRpb24gb2YgcGFydGl0aW9uIGRh dGEKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJ TlRPIHRlc3RfcGFydCBWQUxVRVMgKDEsJ2FiYycsICcyMDIxLTA3LTA0IDEyOjAwOjAwJyki KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJ TlRPIHRlc3RfcGFydCBWQUxVRVMgKDIsJ2JjZCcsICcyMDIxLTA3LTAzIDExOjEyOjEzJyki KTsKKyMgVGVzdCBmb3IgcmVwbGljYXRpb24gb2YgbXVsdGktbGV2ZWwgcGFydGl0aW9uIGRh dGEKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJ TlRPIHRlc3RfcGFydCBWQUxVRVMgKDQsJ2FiYycsICcyMDIxLTA3LTA0IDEyOjAwOjAwJyki KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIklOU0VSVCBJ TlRPIHRlc3RfcGFydCBWQUxVRVMgKDUsJ2JjZCcsICcyMDIxLTA3LTAzIDExOjEyOjEzJyki KTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCSJTRUxFQ1QgKiBGUk9NIHRhYjEiKTsKK2lzKCRyZXN1bHQsIHFxKDF8MnwpLCAnaW5z ZXJ0IG9uIGNvbHVtbiB0YWIxLmMgaXMgbm90IHJlcGxpY2F0ZWQnKTsKKworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBG Uk9NIHRhYjMiKTsKK2lzKCRyZXN1bHQsIHFxKDF8MyksICdpbnNlcnQgb24gY29sdW1uIHRh YjMuYiBpcyBub3QgcmVwbGljYXRlZCcpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGVzdF9wYXJ0Iik7 CitpcygkcmVzdWx0LCBxcSgxfGFiY1xuMnxiY2RcbjR8YWJjXG41fGJjZCksICdpbnNlcnQg b24gYWxsIGNvbHVtbnMgaXMgcmVwbGljYXRlZCcpOworCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJVUERBVEUgdGFiMSBTRVQgYyA9IDUgd2hlcmUgYSA9 IDEiKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki U0VMRUNUICogRlJPTSB0YWIxIik7CitpcygkcmVzdWx0LCBxcSgxfDJ8KSwgJ3VwZGF0ZSBv biBjb2x1bW4gdGFiMS5jIGlzIG5vdCByZXBsaWNhdGVkJyk7CisKKyMgVmVyaWZ5IHVzZXIt ZGVmaW5lZCB0eXBlcworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwlxcXtDUkVBVEUgVFlQRSB0ZXN0X3R5cCBBUyBFTlVNICgnYmx1ZScsICdyZWQnKTsKKwlD UkVBVEUgVEFCTEUgdGVzdF90YWI0IChhIElOVCBQUklNQVJZIEtFWSwgYiB0ZXN0X3R5cCwg YyBpbnQsIGQgdGV4dCk7CisJQUxURVIgUFVCTElDQVRJT04gcHViMSBBREQgVEFCTEUgdGVz dF90YWI0IChhLCBiLCBkKTsKKwl9KTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCXFxe0NSRUFURSBUWVBFIHRlc3RfdHlwIEFTIEVOVU0gKCdibHVlJywg J3JlZCcpOworCUNSRUFURSBUQUJMRSB0ZXN0X3RhYjQgKGEgSU5UIFBSSU1BUlkgS0VZLCBi IHRlc3RfdHlwLCBkIHRleHQpOworCX0pOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGVzdF90YWI0IFZBTFVFUyAoMSwgJ3JlZCcs IDMsICdvaCBteScpOyIpOworCisjIFRlc3QgYWx0ZXIgcHVibGljYXRpb24gd2l0aCBhIGNv bHVtbiBsaXN0Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJB TFRFUiBQVUJMSUNBVElPTiBwdWIxIEFERCBUQUJMRSB0YWIyKGEsIGIpIik7CisKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJ T04gc3ViMSBSRUZSRVNIIFBVQkxJQ0FUSU9OIgorKTsKKworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiSU5TRVJUIElOVE8gdGFiMiBWQUxVRVMgKDEsJ2Fi YycsMykiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlVQ REFURSB0YWIyIFNFVCBjID0gNSB3aGVyZSBhID0gMiIpOworCiskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRhYjIgV0hFUkUg YSA9IDEiKTsKK2lzKCRyZXN1bHQsIHFxKDF8YWJjKSwgJ2luc2VydCBvbiBjb2x1bW4gdGFi Mi5jIGlzIG5vdCByZXBsaWNhdGVkJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0YWIyIFdIRVJFIGEg PSAyIik7CitpcygkcmVzdWx0LCBxcSgyfGZvbyksICd1cGRhdGUgb24gY29sdW1uIHRhYjIu YyBpcyBub3QgcmVwbGljYXRlZCcpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGVzdF90YWI0Iik7Citp cygkcmVzdWx0LCBxcSgxfHJlZHxvaCBteSksICdpbnNlcnQgb24gdGFibGUgd2l0aCB1c2Vy LWRlZmluZWQgdHlwZScpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHRhYjUgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBp bnQsIGQgaW50KSIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJDUkVBVEUgVEFCTEUgdGFiNSAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBkIGludCki KTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgUFVC TElDQVRJT04gcHViMiBGT1IgVEFCTEUgdGFiNSAoYSwgYikiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgUFVCTElDQVRJT04gcHViMyBGT1Ig VEFCTEUgdGFiNSAoYSwgZCkiKTsKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAgICAiQ1JFQVRFIFNVQlNDUklQVElPTiBzdWIyIENPTk5FQ1RJT04gJyRwdWJs aXNoZXJfY29ubnN0cicgUFVCTElDQVRJT04gcHViMiwgcHViMyIpOworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIyJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGFiNSBWQUxVRVMgKDEsIDExLCAxMTEs IDExMTEpIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5T RVJUIElOVE8gdGFiNSBWQUxVRVMgKDIsIDIyLCAyMjIsIDIyMjIpIik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjInKTsKK2lzKCRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRhYjU7IiksCisgICBxcSgx fDExfDExMTEKKzJ8MjJ8MjIyMiksCisgICAnb3ZlcmxhcHBpbmcgcHVibGljYXRpb25zIHdp dGggb3ZlcmxhcHBpbmcgY29sdW1uIGxpc3RzJyk7Ci0tIAoyLjM0LjEKCg== --------------tRh04vKPEyft6lLu0pa367jO Content-Type: text/x-patch; charset=UTF-8; name="0002-commit-tweaks-and-reviews-20220216.patch" Content-Disposition: attachment; filename="0002-commit-tweaks-and-reviews-20220216.patch" Content-Transfer-Encoding: base64 RnJvbSA3NzdlMmNkMWI5ZGVhMDE1YzMyYmY2MDZjNzZmMjA1NTYxMTA2OTI4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCAxNSBGZWIgMjAyMiAxMTowNDowNSArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMi80XSBjb21taXQgdHdlYWtzIGFuZCByZXZpZXdzCgotLS0KIGRvYy9z cmMvc2dtbC9yZWYvYWx0ZXJfcHVibGljYXRpb24uc2dtbCB8ICAzICstCiBzcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgICAgfCA1MCArKysrKysrKysrKysrKysrKy0t LS0tLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyAgfCAgNiAr KysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyB8IDEyICsrKysr LQogNCBmaWxlcyBjaGFuZ2VkLCA1NCBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3B1YmxpY2F0aW9uLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3B1YmxpY2F0aW9uLnNnbWwKaW5kZXggYTg1NTc0 MjE0YTUuLjZhMGM3NzIyYzdkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVy X3B1YmxpY2F0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNh dGlvbi5zZ21sCkBAIC02NSw3ICs2NSw4IEBAIEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gUkVOQU1FIFRPIDxy CiAKICAgPHBhcmE+CiAgICBUaGUgPGxpdGVyYWw+QUxURVIgVEFCTEUgLi4uIFNFVCBDT0xV TU5TPC9saXRlcmFsPiB2YXJpYW50IGFsbG93cyBjaGFuZ2luZwotICAgdGhlIHNldCBvZiBj b2x1bW5zIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBwdWJsaWNhdGlvbi4KKyAgIHRoZSBz ZXQgb2YgY29sdW1ucyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgcHVibGljYXRpb24uICBJ ZiBhIGNvbHVtbiBsaXN0CisgICBpcyBzcGVjaWZpZWQsIGl0IG11c3QgaW5jbHVkZSB0aGUg cmVwbGljYSBpZGVudGl0eSBjb2x1bW5zLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKaW5kZXggYWExNjU1Njk2ZjUuLmY4ZTBh NzI4YThjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC01Niwx NCArNTYsMTQgQEAgc3RhdGljIHZvaWQgcHVibGljYXRpb25fdHJhbnNsYXRlX2NvbHVtbnMo UmVsYXRpb24gdGFyZ2V0cmVsLCBMaXN0ICpjb2x1bW5zLAogICogQ2hlY2sgaWYgcmVsYXRp b24gY2FuIGJlIGluIGdpdmVuIHB1YmxpY2F0aW9uIGFuZCB0aGF0IHRoZSBjb2x1bW4KICAq IGZpbHRlciBpcyBzZW5zaWJsZSwgYW5kIHRocm93cyBhcHByb3ByaWF0ZSBlcnJvciBpZiBu b3QuCiAgKgotICogdGFyZ2V0Y29scyBpcyB0aGUgYml0bWFwc2V0IG9mIGF0dHJpYnV0ZSBu dW1iZXJzIGdpdmVuIGluIHRoZSBjb2x1bW4gbGlzdCwKLSAqIG9yIE5VTEwgaWYgaXQgd2Fz IG5vdCBzcGVjaWZpZWQuCisgKiBjb2x1bW5zIGlzIHRoZSBiaXRtYXBzZXQgb2YgYXR0cmli dXRlIG51bWJlcnMgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbiBsaXN0LAorICogb3IgTlVMTCBp ZiBubyBjb2x1bW4gbGlzdCB3YXMgc3BlY2lmaWVkIChpLmUuIGFsbCBjb2x1bW5zIGFyZSBy ZXBsaWNhdGVkKQogICovCiBzdGF0aWMgdm9pZAogY2hlY2tfcHVibGljYXRpb25fYWRkX3Jl bGF0aW9uKFB1YmxpY2F0aW9uICpwdWIsIFJlbGF0aW9uIHRhcmdldHJlbCwKIAkJCQkJCQkg ICBCaXRtYXBzZXQgKmNvbHVtbnMpCiB7Ci0JYm9vbAkJcmVwbGlkZW50ZnVsbCA9ICh0YXJn ZXRyZWwtPnJkX3JlbC0+cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfRlVMTCk7 CisJYm9vbAlyZXBsaWRlbnRmdWxsID0gKHRhcmdldHJlbC0+cmRfcmVsLT5yZWxyZXBsaWRl bnQgPT0gUkVQTElDQV9JREVOVElUWV9GVUxMKTsKIAogCS8qIE11c3QgYmUgYSByZWd1bGFy IG9yIHBhcnRpdGlvbmVkIHRhYmxlICovCiAJaWYgKFJlbGF0aW9uR2V0Rm9ybSh0YXJnZXRy ZWwpLT5yZWxraW5kICE9IFJFTEtJTkRfUkVMQVRJT04gJiYKQEAgLTk2LDE3ICs5NiwyNCBA QCBjaGVja19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oUHVibGljYXRpb24gKnB1YiwgUmVs YXRpb24gdGFyZ2V0cmVsLAogCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUodGFyZ2V0 cmVsKSksCiAJCQkJIGVycmRldGFpbCgiVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRl ZCBmb3IgdW5sb2dnZWQgdGFibGVzLiIpKSk7CiAKLQkvKiBNYWtlIHN1cmUgdGhlIGNvbHVt biBsaXN0IGNoZWNrcyBvdXQgKi8KKwkvKgorCSAqIElmIGEgY29sdW1uIGZpbHRlciB3YXMg c3BlY2lmaWVkLCBjaGVjayBpdCdzIHNlbnNpYmxlIHdpdGggcmVzcGVjdCB0bworCSAqIHJl cGxpY2EgaWRlbnRpdHkgLSB0aGUgbGlzdCBoYXMgdG8gaW5jbHVkZSBhbGwgY29sdW1ucyBp biB0aGUgcmVwbGljYQorCSAqIGlkZW50aXR5LgorCSAqLwogCWlmIChjb2x1bW5zICE9IE5V TEwpCiAJewogCQkvKgotCQkgKiBFdmVuIGlmIHRoZSB1c2VyIGxpc3RlZCBhbGwgY29sdW1u cyBpbiB0aGUgY29sdW1uIGxpc3QsIHdlIGNhbm5vdAotCQkgKiBhbGxvdyBhIGNvbHVtbiBs aXN0IHRvIGJlIHNwZWNpZmllZCB3aGVuIFJFUExJQ0EgSURFTlRJVFkgaXMgRlVMTDsKLQkJ ICogdGhhdCB3b3VsZCBjYXVzZSBwcm9ibGVtcyBpZiBhIG5ldyBjb2x1bW4gaXMgYWRkZWQg bGF0ZXIsIGJlY2F1c2UKLQkJICogdGhlIG5ldyBjb2x1bW4gd291bGQgaGF2ZSB0byBiZSBp bmNsdWRlZCAoYmVjYXVzZSBvZiBiZWluZyBwYXJ0IG9mCi0JCSAqIHRoZSByZXBsaWNhIGlk ZW50aXR5KSBidXQgaXQncyB0ZWNobmljYWxseSBub3QgYWxsb3dlZCAoYmVjYXVzZSBvZgot CQkgKiBub3QgYmVpbmcgaW4gdGhlIHB1YmxpY2F0aW9uJ3MgY29sdW1uIGxpc3QgeWV0KS4g IFNvIHJlamVjdCB0aGlzCi0JCSAqIGNhc2UgYWx0b2dldGhlci4KKwkJICoKKwkJICogSWYg dGhlIHJlbGF0aW9uIHVzZXMgUkVQTElDQSBJREVOVElUWSBGVUxMLCB3ZSBjYW4ndCBhbGxv dyBhbnkgY29sdW1uCisJCSAqIGxpc3QgZXZlbiBpZiBpdCBsaXN0cyBhbGwgY29sdW1ucyBv ZiB0aGUgcmVsYXRpb24gLSBpdCdkIGNhdXNlIGlzc3VlcworCQkgKiBpZiBhIGNvbHVtbiBp cyBhZGRlZCBsYXRlci4gVGhlIGNvbHVtbiB3b3VsZCBiZWNvbWUgcGFydCBvZiBhIHJlcGxp Y2EKKwkJICogaWRlbnRpdHksIHZpb2xhdGluZyB0aGUgcnVsZSB0aGF0IHRoZSBjb2x1bW4g bGlzdCBpbmNsdWRlcyB0aGUgd2hvbGUKKwkJICogcmVwbGljYSBpZGVudGl0eS4gV2UgY291 bGQgYWRkIHRoZSBjb2x1bW4gdG8gdGhlIGNvbHVtbiBsaXN0IHRvbywgb2YKKwkJICogY291 cnNlLCBidXQgaXQgc2VlbXMgcmF0aGVyIHVzZWxlcyAtIHRoZSBjb2x1bW4gbGlzdCB3b3Vs ZCBhbHdheXMKKwkJICogaW5jbHVkZSBhbGwgY29sdW1ucywgaS5lLiBhcyBpZiB0aGVyZSdz IG5vIGNvbHVtbiBmaWx0ZXIuCisJCSAqCisJCSAqIFNvIGp1c3QgcmVqZWN0IHRoaXMgY2Fz ZSBhbHRvZ2V0aGVyLgogCQkgKi8KIAkJaWYgKHJlcGxpZGVudGZ1bGwpCiAJCQllcmVwb3J0 KEVSUk9SLApAQCAtMTI2LDYgKzEzMywxMCBAQCBjaGVja19wdWJsaWNhdGlvbl9hZGRfcmVs YXRpb24oUHVibGljYXRpb24gKnB1YiwgUmVsYXRpb24gdGFyZ2V0cmVsLAogICogTm8gY29s dW1uIGNhbiBiZSBleGNsdWRlZCBpZiBSRVBMSUNBIElERU5USVRZIGlzIEZVTEwgKHNpbmNl IGFsbCB0aGUKICAqIGNvbHVtbnMgbmVlZCB0byBiZSBzZW50IHJlZ2FyZGxlc3MpOyBhbmQg aW4gb3RoZXIgY2FzZXMsIHRoZSBjb2x1bW5zIGluCiAgKiB0aGUgUkVQTElDQSBJREVOVElU WSBjYW5ub3QgYmUgbGVmdCBvdXQuCisgKgorICogVGhlbiB3ZSBuZWVkIHRvIGNyb3NzLWNo ZWNrIHRoZSByZXBsaWNhIGlkZW50aXR5IGFuZCBjb2x1bW4gbGlzdC4gRm9yCisgKiBVUERB VEUvREVMRVRFIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSByZXBsaWNhIGlkZW50aXR5IGlzIGEg c3Vic2V0IG9mIHRoZQorICogY29sdW1uIGZpbHRlci4gRm9yIElOU0VSVCwgd2UgZG9uJ3Qg bmVlZCB0byBjaGVjayBhbnl0aGluZy4KICAqLwogc3RhdGljIHZvaWQKIGNoZWNrX3B1Ymxp Y2F0aW9uX2NvbHVtbnMoUHVibGljYXRpb24gKnB1YiwgUmVsYXRpb24gdGFyZ2V0cmVsLCBC aXRtYXBzZXQgKmNvbHVtbnMpCkBAIC01MTMsMTEgKzUyNCwxNSBAQCBwdWJsaWNhdGlvbl9z ZXRfdGFibGVfY29sdW1ucyhSZWxhdGlvbiBwdWJyZWwsIEhlYXBUdXBsZSBwdWJyZWx0dXAs CiAJCQkJCQkJCQkgICZuYXR0cywgJmF0dGFycmF5LCAmYXR0c2V0KTsKIAogCQkvKgotCQkg KiBNYWtlIHN1cmUgdGhlIGNvbHVtbiBsaXN0IGNoZWNrcyBvdXQuICBYWFggdGhpcyBzaG91 bGQgb2NjdXIgYXQKLQkJICogY2FsbGVyIGluIHB1YmxpY2F0aW9uY21kcy5jLCBub3QgaGVy ZS4KKwkJICogTWFrZSBzdXJlIHRoZSBjb2x1bW4gbGlzdCBjaGVja3Mgb3V0LgorCQkgKgor CQkgKiBYWFggdGhpcyBzaG91bGQgb2NjdXIgYXQgY2FsbGVyIGluIHB1YmxpY2F0aW9uY21k cy5jLCBub3QgaGVyZS4KKwkJICogWFhYIEhvdyBjb21lIHRoaXMgZG9lcyBub3QgY2hlY2sg cmVwbGljYSBpZGVudGl0eT8gU2hvdWxkIHRoaXMgcHJldmVudAorCQkgKiByZXBsaWNhIGlk ZW50aXR5IGZ1bGwsIGp1c3QgbGlrZSBjaGVja19wdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24/ CiAJCSAqLwogCQljaGVja19wdWJsaWNhdGlvbl9jb2x1bW5zKHB1YiwgdGFyZ2V0cmVsLCBh dHRzZXQpOwogCQlibXNfZnJlZShhdHRzZXQpOworCiAJCS8qIFhYWCAicHViIiBpcyBsZWFr ZWQgaGVyZSAqLwogCiAJCXByYXR0cnMgPSBidWlsZGludDJ2ZWN0b3IoYXR0YXJyYXksIG5h dHRzKTsKQEAgLTU0Miw3ICs1NTcsMTEgQEAgcHVibGljYXRpb25fc2V0X3RhYmxlX2NvbHVt bnMoUmVsYXRpb24gcHVicmVsLCBIZWFwVHVwbGUgcHVicmVsdHVwLAogCWhlYXBfZnJlZXR1 cGxlKGNvcHl0dXApOwogfQogCi0vKiBxc29ydCBjb21wYXJhdG9yIGZvciBhdHRudW1zICov CisvKgorICogcXNvcnQgY29tcGFyYXRvciBmb3IgYXR0bnVtcworICoKKyAqIFhYWCBXZSBh bHJlYWR5IGhhdmUgY29tcGFyZV9pbnQxNiwgc28gbWF5YmUgbGV0J3Mgc2hhcmUgdGhhdCwg c29tZWhvdz8KKyAqLwogc3RhdGljIGludAogY29tcGFyZV9pbnQxNihjb25zdCB2b2lkICph LCBjb25zdCB2b2lkICpiKQogewpAQCAtNTU2LDcgKzU3NSw4IEBAIGNvbXBhcmVfaW50MTYo Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKIC8qCiAgKiBUcmFuc2xhdGUgYSBsaXN0 IG9mIGNvbHVtbiBuYW1lcyB0byBhbiBhcnJheSBvZiBhdHRyaWJ1dGUgbnVtYmVycwogICog YW5kIGEgQml0bWFwc2V0IHdpdGggdGhlbTsgdmVyaWZ5IHRoYXQgZWFjaCBhdHRyaWJ1dGUg aXMgYXBwcm9wcmlhdGUKLSAqIHRvIGhhdmUgaW4gYSBwdWJsaWNhdGlvbiBjb2x1bW4gbGlz dC4gIE90aGVyIGNoZWNrcyBhcmUgZG9uZSBsYXRlcjsKKyAqIHRvIGhhdmUgaW4gYSBwdWJs aWNhdGlvbiBjb2x1bW4gbGlzdCAobm8gc3lzdGVtIG9yIGdlbmVyYXRlZCBhdHRyaWJ1dGVz LAorICogbm8gZHVwbGljYXRlcykuICBBZGRpdGlvbmFsIGNoZWNrcyB3aXRoIHJlcGxpY2Eg aWRlbnRpdHkgYXJlIGRvbmUgbGF0ZXI7CiAgKiBzZWUgY2hlY2tfcHVibGljYXRpb25fY29s dW1ucy4KICAqCiAgKiBOb3RlIHRoYXQgdGhlIGF0dHJpYnV0ZSBudW1iZXJzIGFyZSAqbm90 KiBvZmZzZXQgYnkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0 aW9uY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5k ZXggNTkyZjU2ZGQ2MWUuLmU2YThmNTM5MTJkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9w dWJsaWNhdGlvbmNtZHMuYwpAQCAtNDM5LDYgKzQzOSwxMiBAQCBBbHRlclB1YmxpY2F0aW9u T3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10 LAogCQkJCQkJCSAgJnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuLAogCQkJCQkJ CSAgJnB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKIAorCS8qCisJICogRklYTUUgY2hl Y2sgcHViYWN0aW9ucyB2cy4gcmVwbGljYSBpZGVudGl0eSwgdG8gZW5zdXJlIHRoZSByZXBs aWNhCisJICogaWRlbnRpdHkgaXMgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbiBmaWx0ZXIuIE9u bHkgZG8gdGhpcyBmb3IgdXBkYXRlCisJICogYW5kIGRlbGV0ZSBwdWJsaWNhdGlvbnMuIFNl ZSBjaGVja19wdWJsaWNhdGlvbl9jb2x1bW5zLgorCSAqLworCiAJLyogRXZlcnl0aGluZyBv aywgZm9ybSBhIG5ldyB0dXBsZS4gKi8KIAltZW1zZXQodmFsdWVzLCAwLCBzaXplb2YodmFs dWVzKSk7CiAJbWVtc2V0KG51bGxzLCBmYWxzZSwgc2l6ZW9mKG51bGxzKSk7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMgYi9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKaW5kZXggZTZkYTQ2ZDgzZTUuLjI4 YzEwZTRkMWU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Byb3RvLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5j CkBAIC03OTQsNyArNzk0LDExIEBAIGxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUoU3RyaW5nSW5m byBvdXQsIFJlbGF0aW9uIHJlbCwgSGVhcFR1cGxlIHR1cGxlLAogCQlpZiAoYXR0LT5hdHRp c2Ryb3BwZWQgfHwgYXR0LT5hdHRnZW5lcmF0ZWQpCiAJCQljb250aW51ZTsKIAotCQkvKiBJ Z25vcmUgYXR0cmlidXRlcyB0aGF0IGFyZSBub3QgdG8gYmUgc2VudC4gKi8KKwkJLyogSWdu b3JlIGF0dHJpYnV0ZXMgdGhhdCBhcmUgbm90IHRvIGJlIHNlbnQuCisJCSAqCisJCSAqIFhY WCBEbyB3ZSBuZWVkIHRoZSAoY29sdW1ucyAhPSBOVUxMKSBjaGVjaz8gSSBkb24ndCB0aGlu ayBzbywgYmVjYXVzZQorCQkgKiBzdWNoIGJpdG1hcCBoYXMgbm8gbWVtYmVycy4KKwkJICov CiAJCWlmIChjb2x1bW5zICE9IE5VTEwgJiYgIWJtc19pc19tZW1iZXIoYXR0LT5hdHRudW0s IGNvbHVtbnMpKQogCQkJY29udGludWU7CiAKQEAgLTk0MSw4ICs5NDUsMTEgQEAgbG9naWNh bHJlcF93cml0ZV9hdHRycyhTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBCaXRtYXBz ZXQgKmNvbHVtbnMpCiAKIAkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0dC0+YXR0Z2Vu ZXJhdGVkKQogCQkJY29udGludWU7CisKKwkJLyogWFhYIHdlIHNob3VsZCBoYXZlIGEgZnVu Y3Rpb24vbWFjcm8gZm9yIHRoaXMgY2hlY2sgKi8KIAkJaWYgKGNvbHVtbnMgIT0gTlVMTCAm JiAhYm1zX2lzX21lbWJlcihhdHQtPmF0dG51bSwgY29sdW1ucykpCiAJCQljb250aW51ZTsK KwogCQlubGl2ZWF0dHMrKzsKIAl9CiAJcHFfc2VuZGludDE2KG91dCwgbmxpdmVhdHRzKTsK QEAgLTk1NSw4ICs5NjIsMTEgQEAgbG9naWNhbHJlcF93cml0ZV9hdHRycyhTdHJpbmdJbmZv IG91dCwgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpCiAKIAkJaWYgKGF0dC0+ YXR0aXNkcm9wcGVkIHx8IGF0dC0+YXR0Z2VuZXJhdGVkKQogCQkJY29udGludWU7CisKKwkJ LyogWFhYIHdlIHNob3VsZCBoYXZlIGEgZnVuY3Rpb24vbWFjcm8gZm9yIHRoaXMgY2hlY2sg Ki8KIAkJaWYgKGNvbHVtbnMgIT0gTlVMTCAmJiAhYm1zX2lzX21lbWJlcihhdHQtPmF0dG51 bSwgY29sdW1ucykpCiAJCQljb250aW51ZTsKKwogCQkvKiBSRVBMSUNBIElERU5USVRZIEZV TEwgbWVhbnMgYWxsIGNvbHVtbnMgYXJlIHNlbnQgYXMgcGFydCBvZiBrZXkuICovCiAJCWlm IChyZXBsaWRlbnRmdWxsIHx8CiAJCQlibXNfaXNfbWVtYmVyKGF0dC0+YXR0bnVtIC0gRmly c3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciwKLS0gCjIuMzQuMQoK --------------tRh04vKPEyft6lLu0pa367jO Content-Type: text/x-patch; charset=UTF-8; name="0003-Peter-Smith-review-20220216.patch" Content-Disposition: attachment; filename="0003-Peter-Smith-review-20220216.patch" Content-Transfer-Encoding: base64 RnJvbSBhMjY4ZTlhMmViMTNlY2Q4YmM1ZjFmOTA1M2YxMzYwNWJjNGEzNjI5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCAxNSBGZWIgMjAyMiAyMzowODoxMSArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMy80XSBQZXRlciBTbWl0aCByZXZpZXcKCi0tLQogZG9jL3NyYy9zZ21s L2NhdGFsb2dzLnNnbWwgICAgICAgICAgICAgICAgICB8ICA0ICstCiBkb2Mvc3JjL3NnbWwv cmVmL2FsdGVyX3B1YmxpY2F0aW9uLnNnbWwgICAgIHwgIDQgKy0KIGRvYy9zcmMvc2dtbC9y ZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwgICAgfCAyMCArKysrKy0tLQogc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jICAgICAgICB8IDU3ICsrKysrKysrLS0tLS0t LS0tLS0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICB8 ICAxIC0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAgfCAx MCArKy0tCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIHwg MTEgKystLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyB8 IDE2ICsrKy0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyAgICAgICAgICAgICAgICAg ICB8ICAyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmggICAgICAg IHwgIDIgKwogMTAgZmlsZXMgY2hhbmdlZCwgNjEgaW5zZXJ0aW9ucygrKSwgNjYgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgYi9kb2Mv c3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAppbmRleCBmMjBjYjJiNzhhYi4uYWRiMDgxOWMxMjAg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9jYXRhbG9ncy5zZ21sCkBAIC00MzkyLDcgKzQzOTIsNyBAQCBTQ1JBTS1TSEEtMjU2 JDxyZXBsYWNlYWJsZT4mbHQ7aXRlcmF0aW9uIGNvdW50Jmd0OzwvcmVwbGFjZWFibGU+Ojxy ZXBsYWNlYWJsZT4mbAogICAgICAgPC9wYXJhPgogICAgICAgPHBhcmE+CiAgICAgICAgVGhp cyBpcyBhbiBhcnJheSBvZiA8c3RydWN0ZmllbGQ+aW5kbmF0dHM8L3N0cnVjdGZpZWxkPiB2 YWx1ZXMgdGhhdAotICAgICAgIGluZGljYXRlIHdoaWNoIHRhYmxlIGNvbHVtbnMgdGhpcyBp bmRleCBpbmRleGVzLiAgRm9yIGV4YW1wbGUgYSB2YWx1ZQorICAgICAgIGluZGljYXRlIHdo aWNoIHRhYmxlIGNvbHVtbnMgdGhpcyBpbmRleCBpbmRleGVzLiAgRm9yIGV4YW1wbGUsIGEg dmFsdWUKICAgICAgICBvZiA8bGl0ZXJhbD4xIDM8L2xpdGVyYWw+IHdvdWxkIG1lYW4gdGhh dCB0aGUgZmlyc3QgYW5kIHRoZSB0aGlyZCB0YWJsZQogICAgICAgIGNvbHVtbnMgbWFrZSB1 cCB0aGUgaW5kZXggZW50cmllcy4gIEtleSBjb2x1bW5zIGNvbWUgYmVmb3JlIG5vbi1rZXkK ICAgICAgICAoaW5jbHVkZWQpIGNvbHVtbnMuICBBIHplcm8gaW4gdGhpcyBhcnJheSBpbmRp Y2F0ZXMgdGhhdCB0aGUKQEAgLTYzMzUsNyArNjMzNSw3IEBAIFNDUkFNLVNIQS0yNTYkPHJl cGxhY2VhYmxlPiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxh Y2VhYmxlPiZsCiAgICAgICAgVGhpcyBpcyBhbiBhcnJheSBvZiB2YWx1ZXMgdGhhdCBpbmRp Y2F0ZXMgd2hpY2ggdGFibGUgY29sdW1ucyBhcmUKICAgICAgICBwYXJ0IG9mIHRoZSBwdWJs aWNhdGlvbi4gIEZvciBleGFtcGxlIGEgdmFsdWUgb2YgPGxpdGVyYWw+MSAzPC9saXRlcmFs PgogICAgICAgIHdvdWxkIG1lYW4gdGhhdCB0aGUgZmlyc3QgYW5kIHRoZSB0aGlyZCB0YWJs ZSBjb2x1bW5zIGFyZSBwdWJsaXNoZWQuCi0gICAgICAgQSBudWxsIHZhbHVlIGluZGljYXRl cyB0aGF0IGFsbCBhdHRyaWJ1dGVzIGFyZSBwdWJsaXNoZWQuCisgICAgICAgQSBudWxsIHZh bHVlIGluZGljYXRlcyB0aGF0IGFsbCBjb2x1bW5zIGFyZSBwdWJsaXNoZWQuCiAgICAgICA8 L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CiAgICAgPC90Ym9keT4KZGlmZiAtLWdpdCBh L2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfcHVibGljYXRpb24uc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvYWx0ZXJfcHVibGljYXRpb24uc2dtbAppbmRleCA2YTBjNzcyMmM3ZC4uNWVhZTVj ZGU0OTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfcHVibGljYXRpb24u c2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3B1YmxpY2F0aW9uLnNnbWwKQEAg LTI1LDEzICsyNSwxMyBAQCBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IEFERCA8cmVwbGFjZQogQUxURVIgUFVC TElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2Vh YmxlPiBTRVQgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnB1YmxpY2F0aW9uX29i amVjdDwvcmVwbGFjZWFibGU+IFssIC4uLl0KIEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gRFJPUCA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJs ZT4gWywgLi4uXQogQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBTRVQgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+cHVibGljYXRpb25fcGFyYW1ldGVyPC9yZXBsYWNlYWJsZT4gWz0gPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnZhbHVlPC9yZXBsYWNlYWJsZT5dIFssIC4uLiBd ICkKLUFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5u YW1lPC9yZXBsYWNlYWJsZT4gQUxURVIgVEFCTEUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPnB1YmxpY2F0aW9uX29iamVjdDwvcmVwbGFjZWFibGU+IFNFVCBDT0xVTU5TIHsg KCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFss IC4uLl0gKSB8IEFMTCB9CitBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IEFMVEVSIFRBQkxFIDxyZXBsYWNlYWJs ZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gU0VUIENPTFVN TlMgeyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJs ZT4gWywgLi4uXSApIHwgQUxMIH0KIEFMVEVSIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gT1dORVIgVE8geyA8cmVwbGFj ZWFibGU+bmV3X293bmVyPC9yZXBsYWNlYWJsZT4gfCBDVVJSRU5UX1JPTEUgfCBDVVJSRU5U X1VTRVIgfCBTRVNTSU9OX1VTRVIgfQogQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8gPHJlcGxh Y2VhYmxlPm5ld19uYW1lPC9yZXBsYWNlYWJsZT4KIAogPHBocmFzZT53aGVyZSA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cHVibGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJs ZT4gaXMgb25lIG9mOjwvcGhyYXNlPgogCi0gICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBb ICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNl YWJsZT4sIFssIC4uLiBdICkgXSBbLCAuLi4gXQorICAgIFRBQkxFIFsgT05MWSBdIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAq IF0gWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVw bGFjZWFibGU+IFssIC4uLiBdICkgXSBbLCAuLi4gXQogICAgIEFMTCBUQUJMRVMgSU4gU0NI RU1BIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNjaGVtYV9uYW1lPC9yZXBs YWNlYWJsZT4gfCBDVVJSRU5UX1NDSEVNQSB9IFssIC4uLiBdCiA8L3N5bm9wc2lzPgogIDwv cmVmc3lub3BzaXNkaXY+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9w dWJsaWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24u c2dtbAppbmRleCBhNTljZDNmNTMyYS4uZGE0ZDkyOWUwMmEgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9yZWYvY3JlYXRlX3B1YmxpY2F0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbApAQCAtMjgsNyArMjgsNyBAQCBDUkVBVEUg UFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxh Y2VhYmxlPgogCiA8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5wdWJsaWNhdGlvbl9vYmplY3Q8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+ CiAKLSAgICBUQUJMRSBbIE9OTFkgXSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdIFsgKCA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiwgWywgLi4uIF0gKSBdIFss IC4uLiBdCisgICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbICggPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKSBd IFssIC4uLiBdCiAgICAgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgeyA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+c2NoZW1hX25hbWU8L3JlcGxhY2VhYmxlPiB8IENVUlJFTlRfU0NI RU1BIH0gWywgLi4uIF0KIDwvc3lub3BzaXM+CiAgPC9yZWZzeW5vcHNpc2Rpdj4KQEAgLTc5 LDEyICs3OSwxMCBAQCBDUkVBVEUgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgogICAgICA8L3BhcmE+CiAKICAgICAgPHBh cmE+Ci0gICAgICBXaGVuIGEgY29sdW1uIGxpc3QgaXMgc3BlY2lmaWVkLCBvbmx5IHRoZSBs aXN0ZWQgY29sdW1ucyBhcmUgcmVwbGljYXRlZDsKLSAgICAgIGFueSBvdGhlciBjb2x1bW5z IGFyZSBpZ25vcmVkIGZvciB0aGUgcHVycG9zZSBvZiByZXBsaWNhdGlvbiB0aHJvdWdoCi0g ICAgICB0aGlzIHB1YmxpY2F0aW9uLiAgSWYgbm8gY29sdW1uIGxpc3QgaXMgc3BlY2lmaWVk LCBhbGwgY29sdW1ucyBvZiB0aGUKLSAgICAgIHRhYmxlIGFyZSByZXBsaWNhdGVkIHRocm91 Z2ggdGhpcyBwdWJsaWNhdGlvbiwgaW5jbHVkaW5nIGFueSBjb2x1bW5zCi0gICAgICBhZGRl ZCBsYXRlci4gIElmIGEgY29sdW1uIGxpc3QgaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGluY2x1 ZGUgdGhlIHJlcGxpY2EKLSAgICAgIGlkZW50aXR5IGNvbHVtbnMuCisgICAgICBXaGVuIGEg Y29sdW1uIGxpc3QgaXMgc3BlY2lmaWVkLCBvbmx5IHRoZSBuYW1lZCBjb2x1bW5zIGFyZSBy ZXBsaWNhdGVkLgorICAgICAgSWYgbm8gY29sdW1uIGxpc3QgaXMgc3BlY2lmaWVkLCBhbGwg Y29sdW1ucyBvZiB0aGUgdGFibGUgYXJlIHJlcGxpY2F0ZWQKKyAgICAgIHRocm91Z2ggdGhp cyBwdWJsaWNhdGlvbiwgaW5jbHVkaW5nIGFueSBjb2x1bW5zIGFkZGVkIGxhdGVyLiAgSWYg YSBjb2x1bW4KKyAgICAgIGxpc3QgaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGluY2x1ZGUgdGhl IHJlcGxpY2EgaWRlbnRpdHkgY29sdW1ucy4KICAgICAgPC9wYXJhPgogCiAgICAgIDxwYXJh PgpAQCAtMzAwLDYgKzI5OCwxNCBAQCBDUkVBVEUgUFVCTElDQVRJT04gcHJvZHVjdGlvbl9w dWJsaWNhdGlvbiBGT1IgVEFCTEUgdXNlcnMsIGRlcGFydG1lbnRzLCBBTEwgVEFCTAogICAg PHN0cnVjdG5hbWU+c2FsZXM8L3N0cnVjdG5hbWU+OgogPHByb2dyYW1saXN0aW5nPgogQ1JF QVRFIFBVQkxJQ0FUSU9OIHNhbGVzX3B1YmxpY2F0aW9uIEZPUiBBTEwgVEFCTEVTIElOIFND SEVNQSBtYXJrZXRpbmcsIHNhbGVzOworPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+CisKKyAg PHBhcmE+CisgICBDcmVhdGUgYSBwdWJsaWNhdGlvbiB0aGF0IHB1Ymxpc2hlcyBhbGwgY2hh bmdlcyBmb3IgdGFibGUgPHN0cnVjdG5hbWU+dXNlcnM8L3N0cnVjdG5hbWU+LAorICAgYnV0 IHJlcGxpY2F0ZXMgb25seSBjb2x1bW5zIDxzdHJ1Y3RuYW1lPnVzZXJfaWQ8L3N0cnVjdG5h bWU+IGFuZAorICAgPHN0cnVjdG5hbWU+Zmlyc3RuYW1lPC9zdHJ1Y3RuYW1lPjoKKzxwcm9n cmFtbGlzdGluZz4KK0NSRUFURSBQVUJMSUNBVElPTiB1c2Vyc19maWx0ZXJlZCBGT1IgVEFC TEUgdXNlcnMgKHVzZXJfaWQsIGZpcnN0bmFtZSk7CiA8L3Byb2dyYW1saXN0aW5nPjwvcGFy YT4KICA8L3JlZnNlY3QxPgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMK aW5kZXggZjhlMGE3MjhhOGMuLmFiNWEzNDViM2RlIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jCkBAIC02Myw4ICs2Myw2IEBAIHN0YXRpYyB2b2lkCiBjaGVja19w dWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oUHVibGljYXRpb24gKnB1YiwgUmVsYXRpb24gdGFy Z2V0cmVsLAogCQkJCQkJCSAgIEJpdG1hcHNldCAqY29sdW1ucykKIHsKLQlib29sCXJlcGxp ZGVudGZ1bGwgPSAodGFyZ2V0cmVsLT5yZF9yZWwtPnJlbHJlcGxpZGVudCA9PSBSRVBMSUNB X0lERU5USVRZX0ZVTEwpOwotCiAJLyogTXVzdCBiZSBhIHJlZ3VsYXIgb3IgcGFydGl0aW9u ZWQgdGFibGUgKi8KIAlpZiAoUmVsYXRpb25HZXRGb3JtKHRhcmdldHJlbCktPnJlbGtpbmQg IT0gUkVMS0lORF9SRUxBVElPTiAmJgogCQlSZWxhdGlvbkdldEZvcm0odGFyZ2V0cmVsKS0+ cmVsa2luZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQpAQCAtOTcsNTAgKzk1LDM5 IEBAIGNoZWNrX3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihQdWJsaWNhdGlvbiAqcHViLCBS ZWxhdGlvbiB0YXJnZXRyZWwsCiAJCQkJIGVycmRldGFpbCgiVGhpcyBvcGVyYXRpb24gaXMg bm90IHN1cHBvcnRlZCBmb3IgdW5sb2dnZWQgdGFibGVzLiIpKSk7CiAKIAkvKgotCSAqIElm IGEgY29sdW1uIGZpbHRlciB3YXMgc3BlY2lmaWVkLCBjaGVjayBpdCdzIHNlbnNpYmxlIHdp dGggcmVzcGVjdCB0bwotCSAqIHJlcGxpY2EgaWRlbnRpdHkgLSB0aGUgbGlzdCBoYXMgdG8g aW5jbHVkZSBhbGwgY29sdW1ucyBpbiB0aGUgcmVwbGljYQotCSAqIGlkZW50aXR5LgorCSAq IEVuc3VyZSB0aGUgY29sdW1uIGZpbHRlciBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHJlcGxp Y2EgaWRlbnRpdHkgYW5kIHRoZQorCSAqIGFjdGlvbnMgdGhlIHB1YmxpY2F0aW9uIGlzIHJl cGxpY2F0aW5nLgogCSAqLwotCWlmIChjb2x1bW5zICE9IE5VTEwpCi0JewotCQkvKgotCQkg KgotCQkgKiBJZiB0aGUgcmVsYXRpb24gdXNlcyBSRVBMSUNBIElERU5USVRZIEZVTEwsIHdl IGNhbid0IGFsbG93IGFueSBjb2x1bW4KLQkJICogbGlzdCBldmVuIGlmIGl0IGxpc3RzIGFs bCBjb2x1bW5zIG9mIHRoZSByZWxhdGlvbiAtIGl0J2QgY2F1c2UgaXNzdWVzCi0JCSAqIGlm IGEgY29sdW1uIGlzIGFkZGVkIGxhdGVyLiBUaGUgY29sdW1uIHdvdWxkIGJlY29tZSBwYXJ0 IG9mIGEgcmVwbGljYQotCQkgKiBpZGVudGl0eSwgdmlvbGF0aW5nIHRoZSBydWxlIHRoYXQg dGhlIGNvbHVtbiBsaXN0IGluY2x1ZGVzIHRoZSB3aG9sZQotCQkgKiByZXBsaWNhIGlkZW50 aXR5LiBXZSBjb3VsZCBhZGQgdGhlIGNvbHVtbiB0byB0aGUgY29sdW1uIGxpc3QgdG9vLCBv ZgotCQkgKiBjb3Vyc2UsIGJ1dCBpdCBzZWVtcyByYXRoZXIgdXNlbGVzIC0gdGhlIGNvbHVt biBsaXN0IHdvdWxkIGFsd2F5cwotCQkgKiBpbmNsdWRlIGFsbCBjb2x1bW5zLCBpLmUuIGFz IGlmIHRoZXJlJ3Mgbm8gY29sdW1uIGZpbHRlci4KLQkJICoKLQkJICogU28ganVzdCByZWpl Y3QgdGhpcyBjYXNlIGFsdG9nZXRoZXIuCi0JCSAqLwotCQlpZiAocmVwbGlkZW50ZnVsbCkK LQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCWVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9T VVBQT1JURUQpLAotCQkJCQllcnJtc2coImludmFsaWQgY29sdW1uIGxpc3QgZm9yIHB1Ymxp c2hpbmcgcmVsYXRpb24gXCIlc1wiIiwKLQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25O YW1lKHRhcmdldHJlbCkpLAotCQkJCQllcnJkZXRhaWwoIkNhbm5vdCBzcGVjaWZ5IGEgY29s dW1uIGxpc3Qgb24gcmVsYXRpb25zIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxMLiIpKTsK LQotCQljaGVja19wdWJsaWNhdGlvbl9jb2x1bW5zKHB1YiwgdGFyZ2V0cmVsLCBjb2x1bW5z KTsKLQl9CisJY2hlY2tfcHVibGljYXRpb25fY29sdW1ucyhwdWIsIHRhcmdldHJlbCwgY29s dW1ucyk7CiB9CiAKIC8qCiAgKiBFbmZvcmNlIHRoYXQgdGhlIGNvbHVtbiBsaXN0IGNhbiBv bmx5IGxlYXZlIG91dCBjb2x1bW5zIHRoYXQgYXJlbid0CiAgKiBmb3JjZWQgdG8gYmUgc2Vu dC4KICAqCi0gKiBObyBjb2x1bW4gY2FuIGJlIGV4Y2x1ZGVkIGlmIFJFUExJQ0EgSURFTlRJ VFkgaXMgRlVMTCAoc2luY2UgYWxsIHRoZQotICogY29sdW1ucyBuZWVkIHRvIGJlIHNlbnQg cmVnYXJkbGVzcyk7IGFuZCBpbiBvdGhlciBjYXNlcywgdGhlIGNvbHVtbnMgaW4KLSAqIHRo ZSBSRVBMSUNBIElERU5USVRZIGNhbm5vdCBiZSBsZWZ0IG91dC4KKyAqIElmIHRoZSByZWxh dGlvbiB1c2VzIFJFUExJQ0EgSURFTlRJVFkgRlVMTCwgd2UgY2FuJ3QgYWxsb3cgYW55IGNv bHVtbgorICogbGlzdCBldmVuIGlmIGl0IGxpc3RzIGFsbCBjb2x1bW5zIG9mIHRoZSByZWxh dGlvbiAtIGl0J2QgY2F1c2UgaXNzdWVzCisgKiBpZiBhIGNvbHVtbiBpcyBhZGRlZCBsYXRl ci4gVGhlIGNvbHVtbiB3b3VsZCBiZWNvbWUgcGFydCBvZiBhIHJlcGxpY2EKKyAqIGlkZW50 aXR5LCB2aW9sYXRpbmcgdGhlIHJ1bGUgdGhhdCB0aGUgY29sdW1uIGxpc3QgaW5jbHVkZXMg dGhlIHdob2xlCisgKiByZXBsaWNhIGlkZW50aXR5LiBXZSBjb3VsZCBhZGQgdGhlIGNvbHVt biB0byB0aGUgY29sdW1uIGxpc3QgdG9vLCBvZgorICogY291cnNlLCBidXQgaXQgc2VlbXMg cmF0aGVyIHVzZWxlcyAtIHRoZSBjb2x1bW4gbGlzdCB3b3VsZCBhbHdheXMKKyAqIGluY2x1 ZGUgYWxsIGNvbHVtbnMsIGkuZS4gYXMgaWYgdGhlcmUncyBubyBjb2x1bW4gZmlsdGVyLgog ICoKLSAqIFRoZW4gd2UgbmVlZCB0byBjcm9zcy1jaGVjayB0aGUgcmVwbGljYSBpZGVudGl0 eSBhbmQgY29sdW1uIGxpc3QuIEZvcgotICogVVBEQVRFL0RFTEVURSB3ZSBuZWVkIHRvIGVu c3VyZSB0aGUgcmVwbGljYSBpZGVudGl0eSBpcyBhIHN1YnNldCBvZiB0aGUKLSAqIGNvbHVt biBmaWx0ZXIuIEZvciBJTlNFUlQsIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgYW55dGhpbmcu CisgKiBJbiBvdGhlciBjYXNlcywgdGhlIGNvbHVtbnMgaW4gdGhlIFJFUExJQ0EgSURFTlRJ VFkgY2Fubm90IGJlIGxlZnQgb3V0LAorICogZXhjZXB0IHdoZW4gdGhlIHB1YmxpY2F0aW9u IHJlcGxpY2F0ZXMgb25seSBpbnNlcnRzLiBTbyB3ZSBjaGVjayB0aGF0CisgKiBmb3IgVVBE QVRFL0RFTEVURSB0aGUgcmVwbGljYSBpZGVudGl0eSBpcyBhIHN1YnNldCBvZiB0aGUgY29s dW1uIGZpbHRlci4KICAqLwogc3RhdGljIHZvaWQKIGNoZWNrX3B1YmxpY2F0aW9uX2NvbHVt bnMoUHVibGljYXRpb24gKnB1YiwgUmVsYXRpb24gdGFyZ2V0cmVsLCBCaXRtYXBzZXQgKmNv bHVtbnMpCiB7CisJLyoKKwkgKiBJZiB0aGVyZSBpcyBubyBjb2x1bW4gbGlzdCwgd2UgdHJl YXQgaXQgYXMgaWYgdGhlIGxpc3QgY29udGFpbnMgYWxsIGNvbHVtbnMuIEluCisJICogd2hp Y2ggY2FzZSB0aGVyZSdzIG5vdGhpbmcgdG8gY2hlY2sgc28gd2UncmUgZG9uZS4KKwkgKi8K KwlpZiAoIWNvbHVtbnMpCisJCXJldHVybjsKKworCS8qIFdpdGggUkVQTElDQSBJREVOVElU WSBGVUxMIG5vIGNvbHVtbiBmaWx0ZXIgaXMgYWxsb3dlZC4gKi8KIAlpZiAodGFyZ2V0cmVs LT5yZF9yZWwtPnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0ZVTEwpCiAJCWVy ZXBvcnQoRVJST1IsCiAJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRF RCksCkBAIC00OTcsNyArNDg0LDcgQEAgcHVibGljYXRpb25fc2V0X3RhYmxlX2NvbHVtbnMo UmVsYXRpb24gcHVicmVsLCBIZWFwVHVwbGUgcHVicmVsdHVwLAogCURhdHVtCQl2YWx1ZXNb TmF0dHNfcGdfcHVibGljYXRpb25fcmVsXTsKIAogCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVv Zih2YWx1ZXMpKTsKLQltZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOworCW1lbXNl dChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOwogCW1lbXNldChyZXBsYWNlcywgZmFs c2UsIHNpemVvZihyZXBsYWNlcykpOwogCiAJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlv bl9yZWxfcHJhdHRycyAtIDFdID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMK aW5kZXggMjhkZTkzMjk4MDAuLjJiZmIxNjVlNDVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYwpAQCAtMTU4NzIsNyArMTU4NzIsNiBAQCByZWxhdGlvbl9tYXJrX3JlcGxpY2Ff aWRlbnRpdHkoUmVsYXRpb24gcmVsLCBjaGFyIHJpX3R5cGUsIE9pZCBpbmRleE9pZCwKIAkJ CUNhdGFsb2dUdXBsZVVwZGF0ZShwZ19pbmRleCwgJnBnX2luZGV4X3R1cGxlLT50X3NlbGYs IHBnX2luZGV4X3R1cGxlKTsKIAkJCUludm9rZU9iamVjdFBvc3RBbHRlckhvb2tBcmcoSW5k ZXhSZWxhdGlvbklkLCB0aGlzSW5kZXhPaWQsIDAsCiAJCQkJCQkJCQkJIEludmFsaWRPaWQs IGlzX2ludGVybmFsKTsKLQogCQkJLyoKIAkJCSAqIEludmFsaWRhdGUgdGhlIHJlbGNhY2hl IGZvciB0aGUgdGFibGUsIHNvIHRoYXQgYWZ0ZXIgd2UgY29tbWl0CiAJCQkgKiBhbGwgc2Vz c2lvbnMgd2lsbCByZWZyZXNoIHRoZSB0YWJsZSdzIHJlcGxpY2EgaWRlbnRpdHkgaW5kZXgK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYwppbmRleCAyOGMxMGU0 ZDFlNC4uZWM1YTc4N2NjM2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9u L2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3Byb3RvLmMKQEAgLTkzMywxMSArOTMzLDYgQEAgbG9naWNhbHJlcF93cml0ZV9hdHRycyhT dHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpCiAKIAlk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwogCi0JLyogZmV0Y2ggYml0bWFwIG9mIFJF UExJQ0FUSU9OIElERU5USVRZIGF0dHJpYnV0ZXMgKi8KLQlyZXBsaWRlbnRmdWxsID0gKHJl bC0+cmRfcmVsLT5yZWxyZXBsaWRlbnQgPT0gUkVQTElDQV9JREVOVElUWV9GVUxMKTsKLQlp ZiAoIXJlcGxpZGVudGZ1bGwpCi0JCWlkYXR0cnMgPSBSZWxhdGlvbkdldElkZW50aXR5S2V5 Qml0bWFwKHJlbCk7Ci0KIAkvKiBzZW5kIG51bWJlciBvZiBsaXZlIGF0dHJpYnV0ZXMgKi8K IAlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bmF0dHM7IGkrKykKIAl7CkBAIC05NTQsNiArOTQ5 LDExIEBAIGxvZ2ljYWxyZXBfd3JpdGVfYXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9u IHJlbCwgQml0bWFwc2V0ICpjb2x1bW5zKQogCX0KIAlwcV9zZW5kaW50MTYob3V0LCBubGl2 ZWF0dHMpOwogCisJLyogZmV0Y2ggYml0bWFwIG9mIFJFUExJQ0FUSU9OIElERU5USVRZIGF0 dHJpYnV0ZXMgKi8KKwlyZXBsaWRlbnRmdWxsID0gKHJlbC0+cmRfcmVsLT5yZWxyZXBsaWRl bnQgPT0gUkVQTElDQV9JREVOVElUWV9GVUxMKTsKKwlpZiAoIXJlcGxpZGVudGZ1bGwpCisJ CWlkYXR0cnMgPSBSZWxhdGlvbkdldElkZW50aXR5S2V5Qml0bWFwKHJlbCk7CisKIAkvKiBz ZW5kIHRoZSBhdHRyaWJ1dGVzICovCiAJZm9yIChpID0gMDsgaSA8IGRlc2MtPm5hdHRzOyBp KyspCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90 YWJsZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5j LmMKaW5kZXggYTdiZWZkNzEyYTAuLmQyZGJmNWY3YjgzIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisrKyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTg3NywxMiArODc3LDEyIEBA IGZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5hbWUs CiAKIAkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CiAJfQotCiAJRXhlY0Ryb3BTaW5nbGVUdXBs ZVRhYmxlU2xvdChzbG90KTsKLQl3YWxyY3ZfY2xlYXJfcmVzdWx0KHJlcyk7Ci0JcGZyZWUo Y21kLmRhdGEpOwogCiAJbHJlbC0+bmF0dHMgPSBuYXR0OworCisJd2FscmN2X2NsZWFyX3Jl c3VsdChyZXMpOworCXBmcmVlKGNtZC5kYXRhKTsKIH0KIAogLyoKQEAgLTkyMCw5ICs5MjAs MTAgQEAgY29weV90YWJsZShSZWxhdGlvbiByZWwpCiAJCQkJCQkgcXVvdGVfcXVhbGlmaWVk X2lkZW50aWZpZXIobHJlbC5uc3BuYW1lLCBscmVsLnJlbG5hbWUpKTsKIAkJZm9yIChpbnQg aSA9IDA7IGkgPCBscmVsLm5hdHRzOyBpKyspCiAJCXsKLQkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmNtZCwgcXVvdGVfaWRlbnRpZmllcihscmVsLmF0dG5hbWVzW2ldKSk7Ci0JCQlp ZiAoaSA8IGxyZWwubmF0dHMgLSAxKQorCQkJaWYgKGkgPiAwKQogCQkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmNtZCwgIiwgIik7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmco JmNtZCwgcXVvdGVfaWRlbnRpZmllcihscmVsLmF0dG5hbWVzW2ldKSk7CiAJCX0KIAkJYXBw ZW5kU3RyaW5nSW5mbygmY21kLCAiKSBUTyBTVERPVVQiKTsKIAl9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYwppbmRleCBjN2IyOGQ3MGQyMy4u MDA2OGFlMjVkM2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQv cGdvdXRwdXQuYwpAQCAtMTM4LDggKzEzOCw4IEBAIHR5cGVkZWYgc3RydWN0IFJlbGF0aW9u U3luY0VudHJ5CiAJVHVwbGVDb252ZXJzaW9uTWFwICptYXA7CiAKIAkvKgotCSAqIFNldCBv ZiBjb2x1bW5zIGluY2x1ZGVkIGluIHRoZSBwdWJsaWNhdGlvbiwgb3IgTlVMTCBpZiBhbGwg Y29sdW1ucyBhcmUKLQkgKiBpbmNsdWRlZCBpbXBsaWNpdGx5LiAgTm90ZSB0aGF0IHRoZSBh dHRudW1zIGluIHRoaXMgbGlzdCBhcmUgbm90CisJICogQ29sdW1ucyBpbmNsdWRlZCBpbiB0 aGUgcHVibGljYXRpb24sIG9yIE5VTEwgaWYgYWxsIGNvbHVtbnMgYXJlCisJICogaW5jbHVk ZWQgaW1wbGljaXRseS4gIE5vdGUgdGhhdCB0aGUgYXR0bnVtcyBpbiB0aGlzIGJpdG1hcCBh cmUgbm90CiAJICogc2hpZnRlZCBieSBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVt YmVyLgogCSAqLwogCUJpdG1hcHNldCAgKmNvbHVtbnM7CkBAIC0xMjkwLDkgKzEyOTAsOCBA QCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBPaWQgcmVsaWQpCiAJ CQkgKiBwdWJsaXNoLCBhbmQgbGlzdCBvZiBjb2x1bW5zLCBpZiBhcHByb3ByaWF0ZS4KIAkJ CSAqCiAJCQkgKiBEb24ndCBwdWJsaXNoIGNoYW5nZXMgZm9yIHBhcnRpdGlvbmVkIHRhYmxl cywgYmVjYXVzZQotCQkJICogcHVibGlzaGluZyB0aG9zZSBvZiBpdHMgcGFydGl0aW9ucyBz dWZmaWNlcy4gIChIb3dldmVyLCBpZ25vcmUKLQkJCSAqIHRoaXMgaWYgcGFydGl0aW9uIGNo YW5nZXMgYXJlIG5vdCB0byBwdWJsaXNoZWQgZHVlIHRvCi0JCQkgKiBwdWJ2aWFyb290IGJl aW5nIHNldC4pCisJCQkgKiBwdWJsaXNoaW5nIHRob3NlIG9mIGl0cyBwYXJ0aXRpb25zIHN1 ZmZpY2VzLCB1bmxlc3MgcGFydGl0aW9uCisJCQkgKiBjaGFuZ2VzIHdvbid0IGJlIHB1Ymxp c2hlZCBkdWUgdG8gcHVidmlhcm9vdCBiZWluZyBzZXQuCiAJCQkgKi8KIAkJCWlmIChwdWJs aXNoICYmCiAJCQkJKHJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSB8fCBw dWItPnB1YnZpYXJvb3QpKQpAQCAtMTMwNSw3ICsxMzA0LDcgQEAgZ2V0X3JlbF9zeW5jX2Vu dHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgT2lkIHJlbGlkKQogCQkJCS8qCiAJCQkJICogT2J0 YWluIGNvbHVtbnMgcHVibGlzaGVkIGJ5IHRoaXMgcHVibGljYXRpb24sIGFuZCBhZGQgdGhl bQogCQkJCSAqIHRvIHRoZSBsaXN0IGZvciB0aGlzIHJlbC4gIE5vdGUgdGhhdCBpZiBhdCBs ZWFzdCBvbmUKLQkJCQkgKiBwdWJsaWNhdGlvbiBoYXMgYSBlbXB0eSBjb2x1bW4gbGlzdCwg dGhhdCBtZWFucyB0byBwdWJsaXNoCisJCQkJICogcHVibGljYXRpb24gaGFzIGFuIGVtcHR5 IGNvbHVtbiBsaXN0LCB0aGF0IG1lYW5zIHRvIHB1Ymxpc2gKIAkJCQkgKiBldmVyeXRoaW5n OyBzbyBpZiB3ZSBzYXcgYSBwdWJsaWNhdGlvbiB0aGF0IGluY2x1ZGVzIGFsbAogCQkJCSAq IGNvbHVtbnMsIHNraXAgdGhpcy4KIAkJCQkgKi8KQEAgLTEzMzIsMTQgKzEzMzEsMTUgQEAg Z2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgT2lkIHJlbGlkKQogCQkJ CQkJaWYgKGlzbnVsbCkKIAkJCQkJCXsKIAkJCQkJCQkvKgotCQkJCQkJCSAqIElmIHdlIHNl ZSBhIHB1YmxpY2F0aW9uIHdpdGggbm8gY29sdW1ucywgcmVzZXQgdGhlCisJCQkJCQkJICog SWYgd2Ugc2VlIGEgcHVibGljYXRpb24gd2l0aCBubyBjb2x1bW4gZmlsdGVyLCBpdAorCQkJ CQkJCSAqIG1lYW5zIHdlIG5lZWQgdG8gcHVibGlzaCBhbGwgY29sdW1ucywgc28gcmVzZXQg dGhlCiAJCQkJCQkJICogbGlzdCBhbmQgaWdub3JlIGZ1cnRoZXIgb25lcy4KIAkJCQkJCQkg Ki8KIAkJCQkJCQlhbGxfY29sdW1ucyA9IHRydWU7CiAJCQkJCQkJYm1zX2ZyZWUoZW50cnkt PmNvbHVtbnMpOwogCQkJCQkJCWVudHJ5LT5jb2x1bW5zID0gTlVMTDsKIAkJCQkJCX0KLQkJ CQkJCWVsc2UgaWYgKCFpc251bGwpCisJCQkJCQllbHNlCiAJCQkJCQl7CiAJCQkJCQkJQXJy YXlUeXBlICAqYXJyOwogCQkJCQkJCWludAkJCW5lbGVtczsKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCmluZGV4 IDJjMzQ3ZTgwZWUwLi4yZjI5ZTBkNzE4OSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1w L3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCkBAIC00MTYwLDcg KzQxNjAsNyBAQCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJsZUlu Zm8gdGJsaW5mb1tdLCBpbnQgbnVtVGFibGVzKQogCiAJCQkJYXBwZW5kUFFFeHBCdWZmZXJT dHIoYXR0cmlicywgZm10SWQoYXR0bmFtZXNba10pKTsKIAkJCX0KLQkJCXB1YnJpbmZvW2ld LnB1YnJhdHRycyA9IGF0dHJpYnMtPmRhdGE7CisJCQlwdWJyaW5mb1tqXS5wdWJyYXR0cnMg PSBhdHRyaWJzLT5kYXRhOwogCQl9CiAJCWVsc2UKIAkJCXB1YnJpbmZvW2pdLnB1YnJhdHRy cyA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0 aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKaW5kZXggNzBm NzNkMDFkYzAuLmZmOWQ5YTQzOTg0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9n L3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5oCkBAIC04Niw2ICs4Niw4IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uCiB0 eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvblJlbEluZm8KIHsKIAlSZWxhdGlvbglyZWxhdGlv bjsKKworCS8qIExpc3Qgb2YgY29sdW1ucyB0byByZXBsaWNhdGUgKG9yIE5JTCB0byByZXBs aWNhdGUgYWxsIGNvbHVtbnMpICovCiAJTGlzdAkgICAqY29sdW1uczsKIH0gUHVibGljYXRp b25SZWxJbmZvOwogCi0tIAoyLjM0LjEKCg== --------------tRh04vKPEyft6lLu0pa367jO Content-Type: text/x-patch; charset=UTF-8; name="0004-rework-028_column_list.pl-20220216.patch" Content-Disposition: attachment; filename="0004-rework-028_column_list.pl-20220216.patch" Content-Transfer-Encoding: base64 RnJvbSBlYWJkMzI5ODg4ZGY3MWYxODQ2N2Y2YzZiZTUzYWU1OGRlM2E4ZDllIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCAxNSBGZWIgMjAyMiAxNDoxNDo0MCArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggNC80XSByZXdvcmsgMDI4X2NvbHVtbl9saXN0LnBsCgotLS0KIHNyYy90 ZXN0L3N1YnNjcmlwdGlvbi90LzAyOF9jb2x1bW5fbGlzdC5wbCB8IDkxNyArKysrKysrKysr KysrKysrKystLS0KIDEgZmlsZSBjaGFuZ2VkLCA4MjAgaW5zZXJ0aW9ucygrKSwgOTcgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI4X2Nv bHVtbl9saXN0LnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDI4X2NvbHVtbl9saXN0 LnBsCmluZGV4IDVhNGYwMjJmMjY4Li44YjEwOTQwMmFmNiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3Qvc3Vic2NyaXB0aW9uL3QvMDI4X2NvbHVtbl9saXN0LnBsCisrKyBiL3NyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAyOF9jb2x1bW5fbGlzdC5wbApAQCAtNSw3ICs1LDcgQEAgdXNlIHN0 cmljdDsKIHVzZSB3YXJuaW5nczsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwog dXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwotdXNlIFRlc3Q6Ok1vcmUgdGVzdHMgPT4g OTsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDMxOwogCiAjIHNldHVwCiAKQEAgLTIxLDE0 NCArMjEsODY3IEBAICRub2RlX3N1YnNjcmliZXItPnN0YXJ0OwogCiBteSAkcHVibGlzaGVy X2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3Jl cyc7CiAKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNSRUFU RSBUQUJMRSB0YWIxIChhIGludCBQUklNQVJZIEtFWSwgXCJCXCIgaW50LCBjIGludCkiKTsK KyMgc2V0dXAgdGFibGVzIG9uIGJvdGggbm9kZXMKIAotJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNSRUFURSBUQUJMRSB0YWIxIChhIGludCBQUklNQVJZ IEtFWSwgXCJCXCIgaW50LCBjIGludCkiKTsKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCi0JIkNSRUFURSBUQUJMRSB0YWIyIChhIGludCBQUklNQVJZIEtFWSwg YiB2YXJjaGFyLCBjIGludCk7Ci0JSU5TRVJUIElOVE8gdGFiMiBWQUxVRVMgKDIsICdmb28n LCAyKTsiKTsKLSMgVGVzdCB3aXRoIHdlaXJkIGNvbHVtbiBuYW1lcwotJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ1JFQVRFIFRBQkxFIHRhYjMgKFwiYSdc IiBpbnQgUFJJTUFSWSBLRVksIEIgdmFyY2hhciwgXCJjJ1wiIGludCkiKTsKKyMgdGFiMTog c2ltcGxlIDE6MSByZXBsaWNhdGlvbgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjEgKGEgaW50IFBSSU1BUlkgS0VZLCAi QiIgaW50LCBjIGludCkKKykpOwogCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAotCSJDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0IChhIGludCBQUklNQVJZIEtFWSwg YiB0ZXh0LCBjIHRpbWVzdGFtcHR6KSBQQVJUSVRJT04gQlkgTElTVCAoYSkiKTsKLSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNSRUFURSBUQUJMRSB0ZXN0 X3BhcnRfMV8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnQgRk9SIFZBTFVFUyBJTiAoMSwyLDMp Iik7Ci0jIFRlc3QgcmVwbGljYXRpb24gd2l0aCBtdWx0aS1sZXZlbCBwYXJ0aXRpb24KLSRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNSRUFURSBUQUJMRSB0 ZXN0X3BhcnRfMl8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnQgRk9SIFZBTFVFUyBJTiAoNCw1 LDYpIFBBUlRJVElPTiBCWSBMSVNUIChhKSIpOwotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKLQkiQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8yXzIgUEFSVElUSU9O IE9GIHRlc3RfcGFydF8yXzEgRk9SIFZBTFVFUyBJTiAoNCw1KSIpOworJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWIxIChh IGludCBQUklNQVJZIEtFWSwgIkIiIGludCwgYyBpbnQpCispKTsKIAotJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNSRUFURSBUQUJMRSB0ZXN0X3BhcnQg KGEgaW50IFBSSU1BUlkgS0VZLCBiIHRleHQpIFBBUlRJVElPTiBCWSBMSVNUIChhKSIpOwot JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIkNSRUFURSBUQUJM RSB0ZXN0X3BhcnRfMV8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnQgRk9SIFZBTFVFUyBJTiAo MSwyLDMpIik7Ci0kbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQki Q1JFQVRFIFRBQkxFIHRhYjMgKFwiYSdcIiBpbnQgUFJJTUFSWSBLRVksIFwiYydcIiBpbnQp Iik7Ci0kbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ1JFQVRF IFRBQkxFIHRhYjIgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHZhcmNoYXIpIik7Ci0kbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ1JFQVRFIFRBQkxFIHRlc3Rf cGFydF8yXzEgUEFSVElUSU9OIE9GIHRlc3RfcGFydCBGT1IgVkFMVUVTIElOICg0LDUsNikg UEFSVElUSU9OIEJZIExJU1QgKGEpIik7Ci0kbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKLQkiQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8yXzIgUEFSVElUSU9OIE9G IHRlc3RfcGFydF8yXzEgRk9SIFZBTFVFUyBJTiAoNCw1KSIpOworIyB0YWIyOiByZXBsaWNh dGlvbiBmcm9tIHJlZ3VsYXIgdG8gdGFibGUgd2l0aCBmZXdlciBjb2x1bW5zCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGFi MiAoYSBpbnQgUFJJTUFSWSBLRVksIGIgdmFyY2hhciwgYyBpbnQpOworKSk7CiAKLSMgVGVz dCBjcmVhdGUgcHVibGljYXRpb24gd2l0aCBhIGNvbHVtbiBsaXN0Ci0kbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJDUkVBVEUgUFVCTElDQVRJT04gcHViMSBG T1IgVEFCTEUgdGFiMShhLCBcIkJcIiksIHRhYjMoXCJhJ1wiLFwiYydcIiksIHRlc3RfcGFy dChhLGIpIik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CisJQ1JFQVRFIFRBQkxFIHRhYjIgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHZhcmNoYXIpCisp KTsKKworIyB0YWIzOiBzaW1wbGUgMToxIHJlcGxpY2F0aW9uIHdpdGggd2VpcmQgY29sdW1u IG5hbWVzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlD UkVBVEUgVEFCTEUgdGFiMyAoImEnIiBpbnQgUFJJTUFSWSBLRVksICJCIiB2YXJjaGFyLCAi YyciIGludCkKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjMgKCJhJyIgaW50IFBSSU1BUlkgS0VZLCAiYyci IGludCkKKykpOworCisjIHRlc3RfcGFydDogcGFydGl0aW9uZWQgdGFibGVzLCB3aXRoIHBh cnRpdGlvbmluZyAoaW5jbHVkaW5nIG11bHRpLWxldmVsCisjIHBhcnRpdGlvbmluZywgYW5k IGZld2VyIGNvbHVtbnMgb24gdGhlIHN1YnNjcmliZXIpCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0IChhIGlu dCBQUklNQVJZIEtFWSwgYiB0ZXh0LCBjIHRpbWVzdGFtcHR6KSBQQVJUSVRJT04gQlkgTElT VCAoYSk7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8xXzEgUEFSVElUSU9OIE9GIHRlc3Rf cGFydCBGT1IgVkFMVUVTIElOICgxLDIsMyk7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8y XzEgUEFSVElUSU9OIE9GIHRlc3RfcGFydCBGT1IgVkFMVUVTIElOICg0LDUsNikgUEFSVElU SU9OIEJZIExJU1QgKGEpOworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfMl8yIFBBUlRJVElP TiBPRiB0ZXN0X3BhcnRfMl8xIEZPUiBWQUxVRVMgSU4gKDQsNSk7CispKTsKKworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0 ZXN0X3BhcnQgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHRleHQpIFBBUlRJVElPTiBCWSBMSVNU IChhKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0XzFfMSBQQVJUSVRJT04gT0YgdGVzdF9w YXJ0IEZPUiBWQUxVRVMgSU4gKDEsMiwzKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0XzJf MSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0IEZPUiBWQUxVRVMgSU4gKDQsNSw2KSBQQVJUSVRJ T04gQlkgTElTVCAoYSk7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8yXzIgUEFSVElUSU9O IE9GIHRlc3RfcGFydF8yXzEgRk9SIFZBTFVFUyBJTiAoNCw1KTsKKykpOworCisjIHRhYjQ6 IHRhYmxlIHdpdGggdXNlci1kZWZpbmVkIGVudW0gdHlwZXMKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUWVBFIHRlc3RfdHlwIEFTIEVO VU0gKCdibHVlJywgJ3JlZCcpOworCUNSRUFURSBUQUJMRSB0YWI0IChhIElOVCBQUklNQVJZ IEtFWSwgYiB0ZXN0X3R5cCwgYyBpbnQsIGQgdGV4dCk7CispKTsKKworJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUWVBFIHRlc3RfdHlw IEFTIEVOVU0gKCdibHVlJywgJ3JlZCcpOworCUNSRUFURSBUQUJMRSB0YWI0IChhIElOVCBQ UklNQVJZIEtFWSwgYiB0ZXN0X3R5cCwgZCB0ZXh0KTsKKykpOworCisKKyMgVEVTVDogY3Jl YXRlIHB1YmxpY2F0aW9uIGFuZCBzdWJzY3JpcHRpb24gZm9yIHNvbWUgb2YgdGhlIHRhYmxl cyB3aXRoCisjIGNvbHVtbiBsaXN0cworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEKKwlGT1IgVEFCTEUgdGFi MSAoYSwgIkIiKSwgdGFiMyAoImEnIiwgImMnIiksIHRlc3RfcGFydCAoYSwgYiksIHRhYjQg KGEsIGIsIGQpOworKSk7CisKKyMgY2hlY2sgdGhhdCB3ZSBnb3QgdGhlIHJpZ2h0IHByYXR0 cnMgdmFsdWVzIGZvciB0aGUgcHVibGljYXRpb24gaW4gdGhlCisjIHBnX3B1YmxpY2F0aW9u X3JlbCBjYXRhbG9nIChvcmRlciBieSByZWxuYW1lLCB0byBnZXQgc3RhYmxlIG9yZGVyaW5n KQorbXkgJHJlc3VsdCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCVNFTEVDVCByZWxuYW1lLCBwcmF0dHJzCisJRlJPTSBwZ19wdWJsaWNhdGlvbl9y ZWwgcGIgSk9JTiBwZ19jbGFzcyBwYyBPTihwYi5wcnJlbGlkID0gcGMub2lkKQorCU9SREVS IEJZIHJlbG5hbWUKKykpOwogCi1teSAkcmVzdWx0ID0gJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywKLQkic2VsZWN0IHJlbG5hbWUsIHByYXR0cnMgZnJvbSBwZ19w dWJsaWNhdGlvbl9yZWwgcGIsIHBnX2NsYXNzIHBjIHdoZXJlIHBiLnBycmVsaWQgPSBwYy5v aWQ7Iik7CiBpcygkcmVzdWx0LCBxcSh0YWIxfDEgMgogdGFiM3wxIDMKK3RhYjR8MSAyIDQK IHRlc3RfcGFydHwxIDIpLCAncHVibGljYXRpb24gcmVsYXRpb24gdXBkYXRlZCcpOwogCi0k bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiQ1JFQVRFIFNVQlND UklQVElPTiBzdWIxIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0cicgUFVCTElDQVRJ T04gcHViMSIKLSk7Ci0jIEluaXRpYWwgc3luYworIyBjcmVhdGUgc3Vic2NyaXB0aW9uIGZv ciB0aGUgcHVibGljYXRpb24sIHdhaXQgZm9yIHN5bmMgdG8gY29tcGxldGUKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgU1VCU0NSSVBU SU9OIHN1YjEgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiBw dWIxCispKTsKKwogJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7 CiAKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJ TlRPIHRhYjEgVkFMVUVTICgxLDIsMykiKTsKKyMgVEVTVDogaW5zZXJ0IGRhdGEgaW50byB0 aGUgdGFibGVzLCBhbmQgc2VlIHdlIGdvdCByZXBsaWNhdGlvbiBvZiBqdXN0CisjIHRoZSBm aWx0ZXJlZCBjb2x1bW5zCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxcSgKKwlJTlNFUlQgSU5UTyB0YWIxIFZBTFVFUyAoMSwgMiwgMyk7CisJSU5TRVJUIElO VE8gdGFiMSBWQUxVRVMgKDQsIDUsIDYpOworKSk7CiAKLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRhYjMgVkFMVUVTICgxLDIsMyki KTsKLSMgVGVzdCBmb3IgcmVwbGljYXRpb24gb2YgcGFydGl0aW9uIGRhdGEKLSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfcGFy dCBWQUxVRVMgKDEsJ2FiYycsICcyMDIxLTA3LTA0IDEyOjAwOjAwJykiKTsKLSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfcGFy dCBWQUxVRVMgKDIsJ2JjZCcsICcyMDIxLTA3LTAzIDExOjEyOjEzJykiKTsKLSMgVGVzdCBm b3IgcmVwbGljYXRpb24gb2YgbXVsdGktbGV2ZWwgcGFydGl0aW9uIGRhdGEKLSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfcGFy dCBWQUxVRVMgKDQsJ2FiYycsICcyMDIxLTA3LTA0IDEyOjAwOjAwJykiKTsKLSRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIklOU0VSVCBJTlRPIHRlc3RfcGFy dCBWQUxVRVMgKDUsJ2JjZCcsICcyMDIxLTA3LTAzIDExOjEyOjEzJykiKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjMg VkFMVUVTICgxLCAyLCAzKTsKKwlJTlNFUlQgSU5UTyB0YWIzIFZBTFVFUyAoNCwgNSwgNik7 CispKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ SU5TRVJUIElOVE8gdGFiNCBWQUxVRVMgKDEsICdyZWQnLCAzLCAnb2ggbXknKTsKKwlJTlNF UlQgSU5UTyB0YWI0IFZBTFVFUyAoMiwgJ2JsdWUnLCA0LCAnaGVsbG8nKTsKKykpOworCisj IHJlcGxpY2F0aW9uIG9mIHBhcnRpdGlvbmVkIHRhYmxlCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnQgVkFMVUVT ICgxLCAnYWJjJywgJzIwMjEtMDctMDQgMTI6MDA6MDAnKTsKKwlJTlNFUlQgSU5UTyB0ZXN0 X3BhcnQgVkFMVUVTICgyLCAnYmNkJywgJzIwMjEtMDctMDMgMTE6MTI6MTMnKTsKKwlJTlNF UlQgSU5UTyB0ZXN0X3BhcnQgVkFMVUVTICg0LCAnYWJjJywgJzIwMjEtMDctMDQgMTI6MDA6 MDAnKTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnQgVkFMVUVTICg1LCAnYmNkJywgJzIwMjEt MDctMDMgMTE6MTI6MTMnKTsKKykpOworCisjIHdhaXQgZm9yIGNhdGNodXAgYmVmb3JlIGNo ZWNraW5nIHRoZSBzdWJzY3JpYmVyCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ3N1YjEnKTsKIAorIyB0YWIxOiBvbmx5IChhLGIpIGlzIHJlcGxpY2F0ZWQKICRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiU0VMRUNU ICogRlJPTSB0YWIxIik7Ci1pcygkcmVzdWx0LCBxcSgxfDJ8KSwgJ2luc2VydCBvbiBjb2x1 bW4gdGFiMS5jIGlzIG5vdCByZXBsaWNhdGVkJyk7CitpcygkcmVzdWx0LCBxcSgxfDJ8Cis0 fDV8KSwgJ2luc2VydCBvbiBjb2x1bW4gdGFiMS5jIGlzIG5vdCByZXBsaWNhdGVkJyk7CiAK KyMgdGFiMzogb25seSAoYSxjKSBpcyByZXBsaWNhdGVkCiAkcmVzdWx0ID0gJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIlNFTEVDVCAqIEZST00gdGFiMyIp OwotaXMoJHJlc3VsdCwgcXEoMXwzKSwgJ2luc2VydCBvbiBjb2x1bW4gdGFiMy5iIGlzIG5v dCByZXBsaWNhdGVkJyk7CitpcygkcmVzdWx0LCBxcSgxfDMKKzR8NiksICdpbnNlcnQgb24g Y29sdW1uIHRhYjMuYiBpcyBub3QgcmVwbGljYXRlZCcpOworCisjIHRhYjQ6IG9ubHkgKGEs YixkKSBpcyByZXBsaWNhdGVkCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGFiNCIpOworaXMoJHJlc3VsdCwg cXEoMXxyZWR8b2ggbXkKKzJ8Ymx1ZXxoZWxsbyksICdpbnNlcnQgb24gY29sdW1uIHRhYjQu YyBpcyBub3QgcmVwbGljYXRlZCcpOwogCisjIHRlc3RfcGFydDogKGEsYikgaXMgcmVwbGlj YXRlZAogJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAogCSJTRUxFQ1QgKiBGUk9NIHRlc3RfcGFydCIpOwotaXMoJHJlc3VsdCwgcXEoMXxhYmNc bjJ8YmNkXG40fGFiY1xuNXxiY2QpLCAnaW5zZXJ0IG9uIGFsbCBjb2x1bW5zIGlzIHJlcGxp Y2F0ZWQnKTsKK2lzKCRyZXN1bHQsIHFxKDF8YWJjCisyfGJjZAorNHxhYmMKKzV8YmNkKSwg J2luc2VydCBvbiBjb2x1bW4gdGVzdF9wYXJ0LmMgY29sdW1ucyBpcyBub3QgcmVwbGljYXRl ZCcpOworCisjIFRFU1Q6IGRvIHNvbWUgdXBkYXRlZCBvbiBzb21lIG9mIHRoZSB0YWJsZXMs IGJvdGggb24gY29sdW1ucyBpbmNsdWRlZAorIyBpbiB0aGUgY29sdW1uIGxpc3QgYW5kIG90 aGVyCiAKKyMgdGFiMTogdXBkYXRlIG9mIHJlcGxpY2F0ZWQgY29sdW1uCiAkbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJVUERBVEUgdGFiMSBTRVQgYyA9IDUg d2hlcmUgYSA9IDEiKTsKKwlxcShVUERBVEUgdGFiMSBTRVQgIkIiID0gMiAqICJCIiB3aGVy ZSBhID0gMSkpOwogCi0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEn KTsKKyMgdGFiMTogdXBkYXRlIG9mIG5vbi1yZXBsaWNhdGVkIGNvbHVtbgorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShVUERBVEUgdGFiMSBTRVQgYyA9 IDIqYyB3aGVyZSBhID0gNCkpOwogCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCAqIEZST00gdGFiMSIpOwotaXMoJHJlc3Vs dCwgcXEoMXwyfCksICd1cGRhdGUgb24gY29sdW1uIHRhYjEuYyBpcyBub3QgcmVwbGljYXRl ZCcpOworIyB0YWIzOiB1cGRhdGUgb2Ygbm9uLXJlcGxpY2F0ZWQKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXEoVVBEQVRFIHRhYjMgU0VUICJCIiA9ICJC IiB8fCAnIHVwZGF0ZWQnIHdoZXJlICJhJyIgPSA0KSk7CiAKLSMgVmVyaWZ5IHVzZXItZGVm aW5lZCB0eXBlcworIyB0YWIzOiB1cGRhdGUgb2YgcmVwbGljYXRlZCBjb2x1bW4KICRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JcXF7Q1JFQVRFIFRZUEUgdGVz dF90eXAgQVMgRU5VTSAoJ2JsdWUnLCAncmVkJyk7Ci0JQ1JFQVRFIFRBQkxFIHRlc3RfdGFi NCAoYSBJTlQgUFJJTUFSWSBLRVksIGIgdGVzdF90eXAsIGMgaW50LCBkIHRleHQpOwotCUFM VEVSIFBVQkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIHRlc3RfdGFiNCAoYSwgYiwgZCk7Ci0J fSk7Ci0kbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQlxcXtDUkVB VEUgVFlQRSB0ZXN0X3R5cCBBUyBFTlVNICgnYmx1ZScsICdyZWQnKTsKLQlDUkVBVEUgVEFC TEUgdGVzdF90YWI0IChhIElOVCBQUklNQVJZIEtFWSwgYiB0ZXN0X3R5cCwgZCB0ZXh0KTsK LQl9KTsKKwlxcShVUERBVEUgdGFiMyBTRVQgImMnIiA9IDIgKiAiYyciIHdoZXJlICJhJyIg PSAxKSk7CisKKyMgdGFiNAogJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKLQkiSU5TRVJUIElOVE8gdGVzdF90YWI0IFZBTFVFUyAoMSwgJ3JlZCcsIDMsICdvaCBt eScpOyIpOworCXFxKFVQREFURSB0YWI0IFNFVCBiID0gJ2JsdWUnLCBjID0gYyAqIDIsIGQg PSBkIHx8ICcgdXBkYXRlZCcgd2hlcmUgYSA9IDEpKTsKIAotIyBUZXN0IGFsdGVyIHB1Ymxp Y2F0aW9uIHdpdGggYSBjb2x1bW4gbGlzdAorIyB0YWI0CiAkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAotCSJBTFRFUiBQVUJMSUNBVElPTiBwdWIxIEFERCBUQUJM RSB0YWIyKGEsIGIpIik7CisJcXEoVVBEQVRFIHRhYjQgU0VUIGIgPSAncmVkJywgYyA9IGMg KiAyLCBkID0gZCB8fCAnIHVwZGF0ZWQnIHdoZXJlIGEgPSAyKSk7CiAKLSRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJBTFRFUiBTVUJTQ1JJUFRJT04gc3Vi MSBSRUZSRVNIIFBVQkxJQ0FUSU9OIgotKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnc3ViMScpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJcXEoU0VMRUNUICogRlJPTSB0YWIxIE9SREVSIEJZIGEpKTsK K2lzKCRyZXN1bHQsCitxcSgxfDR8Cis0fDV8KSwgJ29ubHkgdXBkYXRlIG9uIGNvbHVtbiB0 YWIxLmIgaXMgcmVwbGljYXRlZCcpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXEoU0VMRUNUICogRlJPTSB0YWIzIE9SREVSIEJZ ICJhJyIpKTsKK2lzKCRyZXN1bHQsCitxcSgxfDYKKzR8NiksICdvbmx5IHVwZGF0ZSBvbiBj b2x1bW4gdGFiMy5jIGlzIHJlcGxpY2F0ZWQnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFNFTEVDVCAqIEZST00gdGFiNCBP UkRFUiBCWSBhKSk7CisKK2lzKCRyZXN1bHQsIHFxKDF8Ymx1ZXxvaCBteSB1cGRhdGVkCisy fHJlZHxoZWxsbyB1cGRhdGVkKSwgJ3VwZGF0ZSBvbiBjb2x1bW4gdGFiNC5jIGlzIG5vdCBy ZXBsaWNhdGVkJyk7CisKKworIyBURVNUOiBhZGQgdGFibGUgd2l0aCBhIGNvbHVtbiBsaXN0 LCBpbnNlcnQgZGF0YSwgcmVwbGljYXRlCisKKyMgaW5zZXJ0IHNvbWUgZGF0YSBiZWZvcmUg YWRkaW5nIGl0IHRvIHRoZSBwdWJsaWNhdGlvbgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiMiBWQUxVRVMgKDEsICdhYmMn LCAzKTsKKykpOwogCiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAot CSJJTlNFUlQgSU5UTyB0YWIyIFZBTFVFUyAoMSwnYWJjJywzKSIpOwotJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiVVBEQVRFIHRhYjIgU0VUIGMgPSA1IHdo ZXJlIGEgPSAyIik7CisJIkFMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIHRhYjIg KGEsIGIpIik7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBSRUZSRVNIIFBVQkxJQ0FUSU9OIik7CisKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRP IHRhYjIgVkFMVUVTICgyLCAnZGVmJywgNik7CispKTsKIAogJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CiAKICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUICogRlJPTSB0YWIyIFdIRVJFIGEg PSAxIik7Ci1pcygkcmVzdWx0LCBxcSgxfGFiYyksICdpbnNlcnQgb24gY29sdW1uIHRhYjIu YyBpcyBub3QgcmVwbGljYXRlZCcpOworCSJTRUxFQ1QgKiBGUk9NIHRhYjIgT1JERVIgQlkg YSIpOworaXMoJHJlc3VsdCwgcXEoMXxhYmMKKzJ8ZGVmKSwgJ2luc2VydCBvbiBjb2x1bW4g dGFiMi5jIGlzIG5vdCByZXBsaWNhdGVkJyk7CiAKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUICogRlJPTSB0YWIyIFdIRVJF IGEgPSAyIik7Ci1pcygkcmVzdWx0LCBxcSgyfGZvbyksICd1cGRhdGUgb24gY29sdW1uIHRh YjIuYyBpcyBub3QgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJVVBEQVRFIHRhYjIgU0VUIGMgPSA1IHdoZXJlIGEgPSAxOwor CVVQREFURSB0YWIyIFNFVCBiID0gJ3h5eicgd2hlcmUgYSA9IDI7CispKTsKKworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CiAKICRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUICogRlJPTSB0 ZXN0X3RhYjQiKTsKLWlzKCRyZXN1bHQsIHFxKDF8cmVkfG9oIG15KSwgJ2luc2VydCBvbiB0 YWJsZSB3aXRoIHVzZXItZGVmaW5lZCB0eXBlJyk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdGFiNSAoYSBpbnQgUFJJTUFSWSBL RVksIGIgaW50LCBjIGludCwgZCBpbnQpIik7Ci0kbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0YWI1IChhIGludCBQUklNQVJZIEtFWSwg YiBpbnQsIGQgaW50KSIpOwotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIkNSRUFURSBQVUJMSUNBVElPTiBwdWIyIEZPUiBUQUJMRSB0YWI1IChhLCBiKSIpOwot JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBQVUJMSUNB VElPTiBwdWIzIEZPUiBUQUJMRSB0YWI1IChhLCBkKSIpOwotJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICAgICJDUkVBVEUgU1VCU0NSSVBUSU9OIHN1YjIgQ09O TkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNBVElPTiBwdWIyLCBwdWIzIik7 Ci0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjInKTsKKwkiU0VMRUNU ICogRlJPTSB0YWIyIE9SREVSIEJZIGEiKTsKK2lzKCRyZXN1bHQsIHFxKDF8YWJjCisyfHh5 eiksICd1cGRhdGUgb24gY29sdW1uIHRhYjIuYyBpcyBub3QgcmVwbGljYXRlZCcpOworCisj IFRFU1Q6IGFkZCBhIHRhYmxlIHRvIHR3byBwdWJsaWNhdGlvbnMgd2l0aCBkaWZmZXJlbnQg Y29sdW1uIGxpc3RzLCBhbmQKKyMgY3JlYXRlIGEgc2luZ2xlIHN1YnNjcmlwdGlvbiByZXBs aWNhdGluZyBib3RoIHB1YmxpY2F0aW9ucworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjUgKGEgaW50IFBSSU1BUlkgS0VZ LCBiIGludCwgYyBpbnQsIGQgaW50KTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViMiBGT1Ig VEFCTEUgdGFiNSAoYSwgYik7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjMgRk9SIFRBQkxF IHRhYjUgKGEsIGQpOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGFiNSAoYSBpbnQgUFJJTUFSWSBLRVksIGIg aW50LCBkIGludCk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIEFERCBQVUJMSUNBVElPTiBw dWIyLCBwdWIzCispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdz dWIxJyk7CisKKyMgVEVTVDogaW5zZXJ0IGRhdGEgYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIGNv bHVtbnMgKHVuaW9uIG9mIHRoZSBjb2x1bW5zIGxpc3RzKQorIyB3ZXJlIHJlcGxpY2F0ZWQK ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0 YWI1IFZBTFVFUyAoMSwgMTEsIDExMSwgMTExMSkiKTsKICRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0YWI1IFZBTFVFUyAoMiwgMjIsIDIy MiwgMjIyMikiKTsKLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMicp OwotaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAq IEZST00gdGFiNTsiKSwKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdz dWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJT RUxFQ1QgKiBGUk9NIHRhYjUgT1JERVIgQlkgYSIpLAogICAgcXEoMXwxMXwxMTExCiAyfDIy fDIyMjIpLAogICAgJ292ZXJsYXBwaW5nIHB1YmxpY2F0aW9ucyB3aXRoIG92ZXJsYXBwaW5n IGNvbHVtbiBsaXN0cycpOworCisjIGFuZCBmaW5hbGx5LCBzZXQgdGhlIGNvbHVtbiBmaWx0 ZXIgdG8gQUxMIGZvciBvbmUgb2YgdGhlIHB1YmxpY2F0aW9ucywKKyMgd2hpY2ggbWVhbnMg cmVwbGljYXRpbmcgYWxsIGNvbHVtbnMgKHJlbW92aW5nIHRoZSBjb2x1bW4gZmlsdGVyKSwg YnV0CisjIGZpcnN0IGFkZCB0aGUgbWlzc2luZyBjb2x1bW4gdG8gdGhlIHRhYmxlIG9uIHN1 YnNjcmliZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAor CUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjMgQUxURVIgVEFCTEUgdGFiNSBTRVQgQ09MVU1OUyBB TEw7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFx KAorCUFMVEVSIFRBQkxFIHRhYjUgQUREIENPTFVNTiBjIElOVDsKKykpOworCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGFiNSBWQUxV RVMgKDMsIDMzLCAzMzMsIDMzMzMpIik7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywiU0VMRUNUICogRlJPTSB0YWI1IE9SREVSIEJZIGEiKSwKKyAgIHFxKDF8MTF8 MTExMXwKKzJ8MjJ8MjIyMnwKKzN8MzN8MzMzM3wzMzMpLAorICAgJ292ZXJsYXBwaW5nIHB1 YmxpY2F0aW9ucyB3aXRoIG92ZXJsYXBwaW5nIGNvbHVtbiBsaXN0cycpOworCisjIFRFU1Q6 IGNyZWF0ZSBhIHRhYmxlIHdpdGggYSBjb2x1bW4gZmlsdGVyLCB0aGVuIGNoYW5nZSB0aGUg cmVwbGljYQorIyBpZGVudGl0eSBieSByZXBsYWNpbmcgYSBwcmltYXJ5IGtleSAoYnV0IHVz ZSBhIGRpZmZlcmVudCBjb2x1bW4gaW4KKyMgdGhlIGNvbHVtbiBmaWx0ZXIpCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGFi NiAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCwgZCBpbnQpOworCUNSRUFURSBQ VUJMSUNBVElPTiBwdWI0IEZPUiBUQUJMRSB0YWI2IChhLCBiKTsKKykpOworCiskbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRh YjYgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQsIGQgaW50KTsKKykpOworCisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgU1VC U0NSSVBUSU9OIHN1YjEgQUREIFBVQkxJQ0FUSU9OIHB1YjQKKykpOworCiskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiNiBWQUxVRVMgKDEs IDIyLCAzMzMsIDQ0NDQpOworCVVQREFURSB0YWI2IFNFVCBiID0gYiAqIDIsIGMgPSBjICog MywgZCA9IGQgKiA0IFdIRVJFIGEgPSAxOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0YWI2IE9SREVSIEJZIGEiKSwKKyAgICIx fDQ0fHwiLCAncmVwbGljYXRpb24gd2l0aCB0aGUgb3JpZ2luYWwgcHJpbWFyeSBrZXknKTsK KworIyBub3cgcmVkZWZpbmUgdGhlIGNvbnN0cmFpbnQgLSBtb3ZlIHRoZSBwcmltYXJ5IGtl eSB0byBhIGRpZmZlcmVudCBjb2x1bW4KKyMgKHdoaWNoIGlzIHN0aWxsIGNvdmVyZWQgYnkg dGhlIGNvbHVtbiBsaXN0LCB0aG91Z2gpCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFRBQkxFIHRhYjYgRFJPUCBDT05TVFJBSU5UIHRh YjZfcGtleTsKKwlBTFRFUiBUQUJMRSB0YWI2IEFERCBQUklNQVJZIEtFWSAoYik7CispKTsK KworIyB3ZSBuZWVkIHRvIGRvIHRoZSBzYW1lIHRoaW5nIG9uIHRoZSBzdWJzY3JpYmVyCisj IFhYWCBXaGF0IHdvdWxkIGhhcHBlbiBpZiB0aGlzIGhhcHBlbnMgYmVmb3JlIHRoZSBwdWJs aXNoZXIgQUxURVI/IE9yCisjIGludGVybGVhdmVkLCBzb21laG93PyBCdXQgdGhhdCBzZWVt cyB1bnJlbGF0ZWQgdG8gY29sdW1uIGxpc3RzLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFRBQkxFIHRhYjYgRFJPUCBDT05TVFJBSU5U IHRhYjZfcGtleTsKKwlBTFRFUiBUQUJMRSB0YWI2IEFERCBQUklNQVJZIEtFWSAoYik7Cisp KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5T RVJUIElOVE8gdGFiNiBWQUxVRVMgKDIsIDU1LCA2NjYsIDg4ODgpOworCVVQREFURSB0YWI2 IFNFVCBiID0gYiAqIDIsIGMgPSBjICogMywgZCA9IGQgKiA0IFdIRVJFIGEgPSAyOworKSk7 CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0 YWI2IE9SREVSIEJZIGEiKSwKKyAgIHFxKDF8NDR8fAorMnwxMTB8fCksCisgICAncmVwbGlj YXRpb24gd2l0aCB0aGUgbW9kaWZpZWQgcHJpbWFyeSBrZXknKTsKKworIyBub3cgc3dpdGNo IHRoZSBwcmltYXJ5IGtleSBiYWNrLCBidXQgYWxzbyBnZW5lcmF0ZSB3cml0ZXMgYmV0d2Vl biB0aGUKKyMgZHJvcCBhbmQgY3JlYXRpb24gb2YgdGhlIG5ldyBjb25zdHJhaW50CisKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFRBQkxF IHRhYjYgRFJPUCBDT05TVFJBSU5UIHRhYjZfcGtleTsKKwlJTlNFUlQgSU5UTyB0YWI2IFZB TFVFUyAoMywgMzMsIDk5OSwgNzc3Nyk7CisJLS0gdXBkYXRlL2RlbGV0ZSBpcyBub3QgYWxs b3dlZCBmb3IgdGFibGVzIHdpdGhvdXQgUkkKKwlBTFRFUiBUQUJMRSB0YWI2IEFERCBQUklN QVJZIEtFWSAoYSk7CisJVVBEQVRFIHRhYjYgU0VUIGIgPSBiICogMiwgYyA9IGMgKiAzLCBk ID0gZCAqIDQgV0hFUkUgYSA9IDM7CisJREVMRVRFIEZST00gdGFiNiBXSEVSRSBhID0gMTsK KykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ QUxURVIgVEFCTEUgdGFiNiBEUk9QIENPTlNUUkFJTlQgdGFiNl9wa2V5OworCUFMVEVSIFRB QkxFIHRhYjYgQUREIFBSSU1BUlkgS0VZIChhKTsKKykpOworCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGFiNiBPUkRFUiBCWSBhIiksCisgICBx cSgyfDExMHx8CiszfDY2fHwpLAorICAgJ3JlcGxpY2F0aW9uIHdpdGggdGhlIG1vZGlmaWVk IHByaW1hcnkga2V5Jyk7CisKKworIyBURVNUOiBjcmVhdGUgYSB0YWJsZSB3aXRoIGEgY29s dW1uIGZpbHRlciwgdGhlbiBjaGFuZ2UgdGhlIHJlcGxpY2EKKyMgaWRlbnRpdHkgYnkgcmVw bGFjaW5nIGEgcHJpbWFyeSBrZXkgd2l0aCBhIGtleSBvbiBtdWx0aXBsZSBjb2x1bW5zCisj IChhbGwgb2YgdGhlbSBjb3ZlcmVkIGJ5IHRoZSBjb2x1bW4gZmlsdGVyKQorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjcg KGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQsIGQgaW50KTsKKwlDUkVBVEUgUFVC TElDQVRJT04gcHViNSBGT1IgVEFCTEUgdGFiNyAoYSwgYik7CispKTsKKworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWI3 IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50LCBkIGludCk7CispKTsKKworJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlND UklQVElPTiBzdWIxIEFERCBQVUJMSUNBVElPTiBwdWI1CispKTsKKworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjcgVkFMVUVTICgxLCAy MiwgMzMzLCA0NDQ0KTsKKwlVUERBVEUgdGFiNyBTRVQgYiA9IGIgKiAyLCBjID0gYyAqIDMs IGQgPSBkICogNCBXSEVSRSBhID0gMTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGFiNyBPUkRFUiBCWSBhIiksCisgICAiMXw0 NHx8IiwgJ3JlcGxpY2F0aW9uIHdpdGggdGhlIG9yaWdpbmFsIHByaW1hcnkga2V5Jyk7CisK KyMgbm93IHJlZGVmaW5lIHRoZSBjb25zdHJhaW50IC0gbW92ZSB0aGUgcHJpbWFyeSBrZXkg dG8gYSBkaWZmZXJlbnQgY29sdW1uCisjICh3aGljaCBpcyBub3QgY292ZXJlZCBieSB0aGUg Y29sdW1uIGxpc3QpCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx cSgKKwlBTFRFUiBUQUJMRSB0YWI3IERST1AgQ09OU1RSQUlOVCB0YWI3X3BrZXk7CisJQUxU RVIgVEFCTEUgdGFiNyBBREQgUFJJTUFSWSBLRVkgKGEsIGIpOworKSk7CisKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjcg VkFMVUVTICgyLCA1NSwgNjY2LCA4ODg4KTsKKwlVUERBVEUgdGFiNyBTRVQgYiA9IGIgKiAy LCBjID0gYyAqIDMsIGQgPSBkICogNCBXSEVSRSBhID0gMjsKKykpOworCiskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGFiNyBPUkRFUiBCWSBh IiksCisgICBxcSgxfDQ0fHwKKzJ8MTEwfHwpLAorICAgJ3JlcGxpY2F0aW9uIHdpdGggdGhl IG1vZGlmaWVkIHByaW1hcnkga2V5Jyk7CisKKyMgbm93IHN3aXRjaCB0aGUgcHJpbWFyeSBr ZXkgYWdhaW4gdG8gYW5vdGhlciBjb2x1bW5zIG5vdCBjb3ZlcmVkIGJ5IHRoZQorIyBjb2x1 bW4gZmlsdGVyLCBidXQgYWxzbyBnZW5lcmF0ZSB3cml0ZXMgYmV0d2VlbiB0aGUgZHJvcCBh bmQgY3JlYXRpb24KKyMgb2YgdGhlIG5ldyBjb25zdHJhaW50CisKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFRBQkxFIHRhYjcgRFJPUCBD T05TVFJBSU5UIHRhYjdfcGtleTsKKwlJTlNFUlQgSU5UTyB0YWI3IFZBTFVFUyAoMywgMzMs IDk5OSwgNzc3Nyk7CisJLS0gdXBkYXRlL2RlbGV0ZSBpcyBub3QgYWxsb3dlZCBmb3IgdGFi bGVzIHdpdGhvdXQgUkkKKwlBTFRFUiBUQUJMRSB0YWI3IEFERCBQUklNQVJZIEtFWSAoYiwg YSk7CisJVVBEQVRFIHRhYjcgU0VUIGIgPSBiICogMiwgYyA9IGMgKiAzLCBkID0gZCAqIDQg V0hFUkUgYSA9IDM7CisJREVMRVRFIEZST00gdGFiNyBXSEVSRSBhID0gMTsKKykpOworCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKykpOworCiskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGFiNyBPUkRF UiBCWSBhIiksCisgICBxcSgyfDExMHx8CiszfDY2fHwpLAorICAgJ3JlcGxpY2F0aW9uIHdp dGggdGhlIG1vZGlmaWVkIHByaW1hcnkga2V5Jyk7CisKKworIyBURVNUOiBwYXJ0aXRpb25l ZCB0YWJsZXMgKHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSkKKyMg YW5kIHJlcGxpY2EgaWRlbnRpdHkuIFRoZSAobGVhZikgcGFydGl0aW9ucyBtYXkgaGF2ZSBk aWZmZXJlbnQgUkksIHNvCisjIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHBhcnRpdGlvbiBSSSAo d2l0aCByZXNwZWN0IHRvIHRoZSBjb2x1bW4gZmlsdGVyKQorIyB3aGlsZSBhdHRhY2hpbmcg dGhlIHBhcnRpdGlvbi4KKworIyBGaXJzdCwgbGV0J3MgY3JlYXRlIGEgcGFydGl0aW9uZWQg dGFibGUgd2l0aCB0d28gcGFydGl0aW9ucywgZWFjaCB3aXRoCisjIGEgZGlmZmVyZW50IFJJ LCBidXQgYSBjb2x1bW4gZmlsdGVyIG5vdCBjb3ZlcmluZyBhbGwgdGhvc2UgUkkuCisKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJM RSB0ZXN0X3BhcnRfYSAoYSBpbnQsIGIgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisK KwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2FfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2Eg Rk9SIFZBTFVFUyBJTiAoMSk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2FfMSBBREQgUFJJ TUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9hXzEgUkVQTElDQSBJREVO VElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfYV8xX3BrZXk7CisKKwlDUkVBVEUgVEFCTEUg dGVzdF9wYXJ0X2FfMiBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2EgRk9SIFZBTFVFUyBJTiAo Mik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2FfMiBBREQgUFJJTUFSWSBLRVkgKGIpOwor CUFMVEVSIFRBQkxFIHRlc3RfcGFydF9hXzIgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRF WCB0ZXN0X3BhcnRfYV8yX3BrZXk7CispKTsKKworIyBkbyB0aGUgc2FtZSB0aGluZyBvbiB0 aGUgc3Vic2NyaWJlcgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYSAoYSBpbnQsIGIgaW50KSBQQVJUSVRJ T04gQlkgTElTVCAoYSk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2FfMSBQQVJUSVRJ T04gT0YgdGVzdF9wYXJ0X2EgRk9SIFZBTFVFUyBJTiAoMSk7CisJQUxURVIgVEFCTEUgdGVz dF9wYXJ0X2FfMSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFy dF9hXzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfYV8xX3BrZXk7 CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2FfMiBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0 X2EgRk9SIFZBTFVFUyBJTiAoMik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2FfMiBBREQg UFJJTUFSWSBLRVkgKGIpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9hXzIgUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfYV8yX3BrZXk7CispKTsKKworIyBjcmVh dGUgYSBwdWJsaWNhdGlvbiByZXBsaWNhdGluZyBqdXN0IHRoZSBjb2x1bW4gImEiLCB3aGlj aCBpcyBub3QgZW5vdWdoCisjIGZvciB0aGUgc2Vjb25kIHBhcnRpdGlvbgorJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9O IHB1YjYgRk9SIFRBQkxFIHRlc3RfcGFydF9hIChhKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0 aXRpb25fcm9vdCA9IGZhbHNlKTsKKykpOworCisjIGFkZCB0aGUgcHVibGljYXRpb24gdG8g b3VyIHN1YnNjcmlwdGlvbiwgd2FpdCBmb3Igc3luYyB0byBjb21wbGV0ZQorJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElP TiBzdWIxIEFERCBQVUJMSUNBVElPTiBwdWI2CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9hIFZBTFVFUyAoMSwg MSk7CisJLS0gRklYTUU6IFRoaXMgZmFpbHMsIGJlY2F1c2UgaXQgZG9lcyBub3Qgc2VuZCAo YikgYXMgbmVlZGVkIGZvciB0aGUgUkkKKwktLSBJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYSBW QUxVRVMgKDIsIDIpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywiU0VMRUNUICogRlJPTSB0ZXN0X3BhcnRfYSBPUkRFUiBCWSBhLCBiIiksCisgICBxcSgx fDEKKzJ8MiksCisgICAncGFydGl0aW9ucyB3aXRoIGRpZmZlcmVudCByZXBsaWNhIGlkZW50 aXRpZXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CisKKworIyBUaGlzIHRpbWUgc3Rh cnQgd2l0aCBhIGNvbHVtbiBmaWx0ZXIgY292ZXJpbmcgUkkgZm9yIGFsbCBwYXJ0aXRpb25z LCBidXQKKyMgdGhlbiB1cGRhdGUgdGhlIGNvbHVtbiBmaWx0ZXIgdG8gbm90IGNvdmVyIGNv bHVtbiAiYiIgKG5lZWRlZCBieSB0aGUKKyMgc2Vjb25kIHBhcnRpdGlvbikKKworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRl c3RfcGFydF9iIChhIGludCwgYiBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChhKTsKKworCUNS RUFURSBUQUJMRSB0ZXN0X3BhcnRfYl8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfYiBGT1Ig VkFMVUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9iXzEgQUREIFBSSU1B UlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYl8xIFJFUExJQ0EgSURFTlRJ VFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2JfMV9wa2V5OworCisJQ1JFQVRFIFRBQkxFIHRl c3RfcGFydF9iXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9iIEZPUiBWQUxVRVMgSU4gKDIs NCk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2JfMiBBREQgUFJJTUFSWSBLRVkgKGIpOwor CUFMVEVSIFRBQkxFIHRlc3RfcGFydF9iXzIgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRF WCB0ZXN0X3BhcnRfYl8yX3BrZXk7CispKTsKKworIyBkbyB0aGUgc2FtZSB0aGluZyBvbiB0 aGUgc3Vic2NyaWJlcgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYiAoYSBpbnQsIGIgaW50KSBQQVJUSVRJ T04gQlkgTElTVCAoYSk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2JfMSBQQVJUSVRJ T04gT0YgdGVzdF9wYXJ0X2IgRk9SIFZBTFVFUyBJTiAoMSwzKTsKKwlBTFRFUiBUQUJMRSB0 ZXN0X3BhcnRfYl8xIEFERCBQUklNQVJZIEtFWSAoYSk7CisJQUxURVIgVEFCTEUgdGVzdF9w YXJ0X2JfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9iXzFfcGtl eTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYl8yIFBBUlRJVElPTiBPRiB0ZXN0X3Bh cnRfYiBGT1IgVkFMVUVTIElOICgyLDQpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9iXzIg QUREIFBSSU1BUlkgS0VZIChiKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYl8yIFJFUExJ Q0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2JfMl9wa2V5OworKSk7CisKKyMg Y3JlYXRlIGEgcHVibGljYXRpb24gcmVwbGljYXRpbmcgYm90aCBjb2x1bW5zLCB3aGljaCBp cyBzdWZmaWNpZW50IGZvcgorIyBib3RoIHBhcnRpdGlvbnMKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiBwdWI3IEZP UiBUQUJMRSB0ZXN0X3BhcnRfYiAoYSwgYikgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QgPSBmYWxzZSk7CispKTsKKworIyBhZGQgdGhlIHB1YmxpY2F0aW9uIHRvIG91ciBz dWJzY3JpcHRpb24sIHdhaXQgZm9yIHN5bmMgdG8gY29tcGxldGUKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3Vi MSBBREQgUFVCTElDQVRJT04gcHViNworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9m b3JfY2F0Y2h1cCgnc3ViMScpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYiBWQUxVRVMgKDEsIDEpOwor CUlOU0VSVCBJTlRPIHRlc3RfcGFydF9iIFZBTFVFUyAoMiwgMik7CispKTsKKworJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRlc3RfcGFydF9i IE9SREVSIEJZIGEsIGIiKSwKKyAgIHFxKDF8MQorMnwyKSwKKyAgICdwYXJ0aXRpb25zIHdp dGggZGlmZmVyZW50IHJlcGxpY2EgaWRlbnRpdGllcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0 bHknKTsKKworIyBub3cgYWx0ZXIgdGhlIHB1YmxpY2F0aW9uIHRvIG9ubHkgcmVwbGljYXRl IGNvbHVtbiAiYSIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFx KAorCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjcgQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2IgU0VU IENPTFVNTlMgKGEpOworKSk7CisKKyMgbm93IHJldHJ5IHRoZSBpbnNlcnRzCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0ZXN0 X3BhcnRfYiBWQUxVRVMgKDMsIDIpOworCS0tIEZJWE1FOiBUaGlzIGZhaWxzLCBiZWNhdXNl IGl0IGRvZXMgbm90IHNlbmQgKGIpIGFzIG5lZWRlZCBmb3IgdGhlIFJJCisJLS0gSU5TRVJU IElOVE8gdGVzdF9wYXJ0X2IgVkFMVUVTICg0LCAzKTsKKykpOworCiskbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGVzdF9wYXJ0X2IgT1JERVIg QlkgYSwgYiIpLAorICAgcXEoMXwxCisyfDIKKzN8MgorNHwzKSwKKyAgICdwYXJ0aXRpb25z IHdpdGggZGlmZmVyZW50IHJlcGxpY2EgaWRlbnRpdGllcyBub3QgcmVwbGljYXRlZCBjb3Jy ZWN0bHknKTsKKworCisjIFRFU1Q6IFRoaXMgdGltZSBzdGFydCB3aXRoIGEgY29sdW1uIGZp bHRlciBjb3ZlcmluZyBSSSBmb3IgYWxsIHBhcnRpdGlvbnMsCisjIGJ1dCB0aGVuIHVwZGF0 ZSBSSSBmb3Igb25lIG9mIHRoZSBwYXJ0aXRpb25zIHRvIG5vdCBiZSBjb3ZlcmVkIGJ5IHRo ZQorIyBjb2x1bW4gZmlsdGVyIGFueW1vcmUuCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYyAoYSBpbnQs IGIgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9w YXJ0X2NfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2MgRk9SIFZBTFVFUyBJTiAoMSwzKTsK KwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfY18xIEFERCBQUklNQVJZIEtFWSAoYSk7CisJQUxU RVIgVEFCTEUgdGVzdF9wYXJ0X2NfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRl c3RfcGFydF9jXzFfcGtleTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfY18yIFBBUlRJ VElPTiBPRiB0ZXN0X3BhcnRfYyBGT1IgVkFMVUVTIElOICgyLDQpOworCUFMVEVSIFRBQkxF IHRlc3RfcGFydF9jXzIgQUREIFBSSU1BUlkgS0VZIChiKTsKKwlBTFRFUiBUQUJMRSB0ZXN0 X3BhcnRfY18yIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2NfMl9w a2V5OworKSk7CisKKyMgZG8gdGhlIHNhbWUgdGhpbmcgb24gdGhlIHN1YnNjcmliZXIKKyRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFC TEUgdGVzdF9wYXJ0X2MgKGEgaW50LCBiIGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEpOwor CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9jXzEgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9j IEZPUiBWQUxVRVMgSU4gKDEsMyk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2NfMSBBREQg UFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9jXzEgUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfY18xX3BrZXk7CisKKwlDUkVBVEUgVEFC TEUgdGVzdF9wYXJ0X2NfMiBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2MgRk9SIFZBTFVFUyBJ TiAoMiw0KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfY18yIEFERCBQUklNQVJZIEtFWSAo YSk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2NfMiBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHRlc3RfcGFydF9jXzJfcGtleTsKKykpOworCisjIGNyZWF0ZSBhIHB1YmxpY2F0 aW9uIHJlcGxpY2F0aW5nIGJvdGggY29sdW1ucywgd2hpY2ggaXMgc3VmZmljaWVudCBmb3IK KyMgYm90aCBwYXJ0aXRpb25zCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViOCBGT1IgVEFCTEUgdGVzdF9wYXJ0 X2MgKGEpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gZmFsc2UpOworKSk7 CisKKyMgYWRkIHRoZSBwdWJsaWNhdGlvbiB0byBvdXIgc3Vic2NyaXB0aW9uLCB3YWl0IGZv ciBzeW5jIHRvIGNvbXBsZXRlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXEoCisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgQUREIFBVQkxJQ0FUSU9OIHB1 YjgKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsK KworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJU IElOVE8gdGVzdF9wYXJ0X2MgVkFMVUVTICgxLCAxKTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Bh cnRfYyBWQUxVRVMgKDIsIDIpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X3BhcnRfYyBPUkRFUiBCWSBhLCBiIiksCisg ICBxcSgxfDEKKzJ8MiksCisgICAncGFydGl0aW9ucyB3aXRoIGRpZmZlcmVudCByZXBsaWNh IGlkZW50aXRpZXMgbm90IHJlcGxpY2F0ZWQgY29ycmVjdGx5Jyk7CisKKyMgbm93IGFsdGVy IHRoZSBwdWJsaWNhdGlvbiB0byBvbmx5IHJlcGxpY2F0ZSBjb2x1bW4gImEiCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlBTFRFUiBUQUJMRSB0ZXN0 X3BhcnRfY18yIERST1AgQ09OU1RSQUlOVCB0ZXN0X3BhcnRfY18yX3BrZXk7CisJQUxURVIg VEFCTEUgdGVzdF9wYXJ0X2NfMiBBREQgUFJJTUFSWSBLRVkgKGIpOworKSk7CisKKyMgbm93 IHJldHJ5IHRoZSBpbnNlcnRzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYyBWQUxVRVMgKDMsIDIpOworCS0t IEZJWE1FOiBUaGlzIGZhaWxzLCBiZWNhdXNlIGl0IGRvZXMgbm90IHNlbmQgKGIpIGFzIG5l ZWRlZCBmb3IgdGhlIFJJCisJLS0gSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2MgVkFMVUVTICg0 LCAzKTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEn KTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVD VCAqIEZST00gdGVzdF9wYXJ0X2MgT1JERVIgQlkgYSwgYiIpLAorICAgcXEoMXwxCisyfDIK KzN8MgorNHwzKSwKKyAgICdwYXJ0aXRpb25zIHdpdGggZGlmZmVyZW50IHJlcGxpY2EgaWRl bnRpdGllcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKworCisjIFRFU1Q6IFN0YXJ0 IHdpdGggYSBzaW5nbGUgcGFydGl0aW9uLCB3aXRoIFJJIGNvbXBhdGlibGUgd2l0aCB0aGUg Y29sdW1uCisjIGZpbHRlciwgYW5kIHRoZW4gYXR0YWNoIGEgcGFydGl0aW9uIHdpdGggaW5j b21wYXRpYmxlIFJJLgorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2QgKGEgaW50LCBiIGludCkgUEFSVElU SU9OIEJZIExJU1QgKGEpOworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9kXzEgUEFSVElU SU9OIE9GIHRlc3RfcGFydF9kIEZPUiBWQUxVRVMgSU4gKDEsMyk7CisJQUxURVIgVEFCTEUg dGVzdF9wYXJ0X2RfMSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3Rf cGFydF9kXzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfZF8xX3Br ZXk7CispKTsKKworIyBkbyB0aGUgc2FtZSB0aGluZyBvbiB0aGUgc3Vic2NyaWJlciAoaW4g ZmFjdCwgY3JlYXRlIGJvdGggcGFydGl0aW9ucyByaWdodAorIyBhd2F5LCBubyBuZWVkIHRv IGRlbGF5IHRoYXQpCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9kIChhIGludCwgYiBpbnQpIFBBUlRJVElP TiBCWSBMSVNUIChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfZF8xIFBBUlRJVElP TiBPRiB0ZXN0X3BhcnRfZCBGT1IgVkFMVUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxFIHRl c3RfcGFydF9kXzEgQUREIFBSSU1BUlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3Bh cnRfZF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2RfMV9wa2V5 OworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9kXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFy dF9kIEZPUiBWQUxVRVMgSU4gKDIsNCk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2RfMiBB REQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9kXzIgUkVQTElD QSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfZF8yX3BrZXk7CispKTsKKworIyBj cmVhdGUgYSBwdWJsaWNhdGlvbiByZXBsaWNhdGluZyBib3RoIGNvbHVtbnMsIHdoaWNoIGlz IHN1ZmZpY2llbnQgZm9yCisjIGJvdGggcGFydGl0aW9ucworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjkgRk9S IFRBQkxFIHRlc3RfcGFydF9kIChhKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCA9IGZhbHNlKTsKKykpOworCisjIGFkZCB0aGUgcHVibGljYXRpb24gdG8gb3VyIHN1YnNj cmlwdGlvbiwgd2FpdCBmb3Igc3luYyB0byBjb21wbGV0ZQorJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIEFE RCBQVUJMSUNBVElPTiBwdWI5CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdzdWIxJyk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9kIFZBTFVFUyAoMSwgMSk7CispKTsK KworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRl c3RfcGFydF9kIE9SREVSIEJZIGEsIGIiKSwKKyAgIHFxKDF8MSksCisgICAncGFydGl0aW9u cyB3aXRoIGRpZmZlcmVudCByZXBsaWNhIGlkZW50aXRpZXMgbm90IHJlcGxpY2F0ZWQgY29y cmVjdGx5Jyk7CisKKyMgbm93IGFkZCB0aGUgc2Vjb25kIHBhcnRpdGlvbiwgd2l0aCBhIG1p c21hdGNoaW5nIFJJCisjIEZJWE1FIHRoaXMgc2hvdWxkIGZhaWwsIGNvbXBsYWluaW5nIGFi b3V0IHRoZSBjb2x1bW4gZmlsdGVyCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2RfMiBQQVJUSVRJT04gT0Yg dGVzdF9wYXJ0X2QgRk9SIFZBTFVFUyBJTiAoMiw0KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3Bh cnRfZF8yIEFERCBQUklNQVJZIEtFWSAoYik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2Rf MiBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9kXzJfcGtleTsKKykp OworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMo JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00g dGVzdF9wYXJ0X2QgT1JERVIgQlkgYSwgYiIpLAorICAgcXEoMXwxCisyfDIKKzN8MgorNHwz KSwKKyAgICdwYXJ0aXRpb25zIHdpdGggZGlmZmVyZW50IHJlcGxpY2EgaWRlbnRpdGllcyBu b3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKworCisjIFRFU1Q6IFdpdGggYSB0YWJsZSBp bmNsdWRlZCBpbiBtdWx0aXBsZSBwdWJsaWNhdGlvbnMsIHdlIHNob3VsZCB1c2UgYQorIyB1 bmlvbiBvZiB0aGUgY29sdW1uIGZpbHRlcnMuIFNvIHdpdGggY29sdW1uIGZpbHRlcnMgKGEs YikgYW5kIChhLGMpIHdlCisjIHNob3VsZCByZXBsaWNhdGUgKGEsYixjKS4KKworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRl c3RfbWl4XzEgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQpOworCUNSRUFURSBQ VUJMSUNBVElPTiBwdWJfbWl4XzEgRk9SIFRBQkxFIHRlc3RfbWl4XzEgKGEsIGIpOworCUNS RUFURSBQVUJMSUNBVElPTiBwdWJfbWl4XzIgRk9SIFRBQkxFIHRlc3RfbWl4XzEgKGEsIGMp OworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlDUkVBVEUgVEFCTEUgdGVzdF9taXhfMSAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBj IGludCk7CisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgQUREIFBVQkxJQ0FUSU9OIHB1Yl9t aXhfMSwgcHViX21peF8yOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfbWl4XzEgVkFMVUVTICgxLCAyLCAz KTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsK KworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAq IEZST00gdGVzdF9taXhfMSIpLAorICAgcXEoMXwyfDMpLAorICAgJ2EgbWl4IG9mIHB1Ymxp Y2F0aW9ucyBzaG91bGQgdXNlIGEgdW5pb24gb2YgY29sdW1uIGZpbHRlcicpOworCisKKyMg VEVTVDogV2l0aCBhIHRhYmxlIGluY2x1ZGVkIGluIG11bHRpcGxlIHB1YmxpY2F0aW9ucywg d2Ugc2hvdWxkIHVzZSBhCisjIHVuaW9uIG9mIHRoZSBjb2x1bW4gZmlsdGVycy4gSWYgYW55 IG9mIHRoZSBwdWJsaWNhdGlvbnMgaXMgRk9SIEFMTAorIyBUQUJMRVMsIHdlIHNob3VsZCBy ZXBsaWNhdGUgYWxsIGNvbHVtbnMuCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X21peF8yIChhIGludCBQUklNQVJZ IEtFWSwgYiBpbnQsIGMgaW50KTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViX21peF8zIEZP UiBUQUJMRSB0ZXN0X21peF8yIChhLCBiKTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViX21p eF80IEZPUiBBTEwgVEFCTEVTOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9taXhfMiAoYSBpbnQgUFJJ TUFSWSBLRVksIGIgaW50LCBjIGludCk7CisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgQURE IFBVQkxJQ0FUSU9OIHB1Yl9taXhfMywgcHViX21peF80OworKSk7CisKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfbWl4 XzIgVkFMVUVTICgxLCAyLCAzKTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGVzdF9taXhfMiIpLAorICAgcXEoMXwyfDMpLAor ICAgJ2EgbWl4IG9mIHB1YmxpY2F0aW9ucyBzaG91bGQgdXNlIGEgdW5pb24gb2YgY29sdW1u IGZpbHRlcicpOworCisKKyMgVEVTVDogV2l0aCBhIHRhYmxlIGluY2x1ZGVkIGluIG11bHRp cGxlIHB1YmxpY2F0aW9ucywgd2Ugc2hvdWxkIHVzZSBhCisjIHVuaW9uIG9mIHRoZSBjb2x1 bW4gZmlsdGVycy4gSWYgYW55IG9mIHRoZSBwdWJsaWNhdGlvbnMgaXMgRk9SIEFMTAorIyBU QUJMRVMgSU4gU0NIRU1BLCB3ZSBzaG91bGQgcmVwbGljYXRlIGFsbCBjb2x1bW5zLgorCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFC TEUgdGVzdF9taXhfMyAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCk7CisJQ1JF QVRFIFBVQkxJQ0FUSU9OIHB1Yl9taXhfNSBGT1IgVEFCTEUgdGVzdF9taXhfMyAoYSwgYik7 CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9taXhfNiBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hF TUEgcHVibGljOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9taXhfMyAoYSBpbnQgUFJJTUFSWSBLRVks IGIgaW50LCBjIGludCk7CisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgQUREIFBVQkxJQ0FU SU9OIHB1Yl9taXhfNSwgcHViX21peF82OworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfbWl4XzMgVkFMVUVT ICgxLCAyLCAzKTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IlNFTEVDVCAqIEZST00gdGVzdF9taXhfMyIpLAorICAgcXEoMXwyfDMpLAorICAgJ2EgbWl4 IG9mIHB1YmxpY2F0aW9ucyBzaG91bGQgdXNlIGEgdW5pb24gb2YgY29sdW1uIGZpbHRlcicp OworCisKKyMgVEVTVDogQ2hlY2sgaGFuZGxpbmcgb2YgcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QgLSBpZiBhIHBhcnRpdGlvbiBpcworIyBub3QgcHVibGlzaGVkIHRocm91Z2ggcGFy dGl0aW9uIHJvb3QsIHdlIHNob3VsZCBub3QgYXBwbHkgdGhlIGNvbHVtbgorIyBmaWx0ZXIg ZGVmaW5lZCBmb3IgdGhlIHdob2xlIHRhYmxlIC0gYm90aCBkdXJpbmcgdGhlIGluaXRpYWwg c3luYyBhbmQKKyMgd2hlbiByZXBsaWNhdGluZyBjaGFuZ2VzLiBUaGlzIGlzIHdoYXQgd2Ug ZG8gZm9yIHJvdyBmaWx0ZXJzLgorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9yb290IChhIGludCBQUklNQVJZIEtF WSwgYiBpbnQsIGMgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGEpOworCUNSRUFURSBUQUJM RSB0ZXN0X3Jvb3RfMSBQQVJUSVRJT04gT0YgdGVzdF9yb290IEZPUiBWQUxVRVMgRlJPTSAo MSkgVE8gKDEwKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9yb290XzIgUEFSVElUSU9OIE9GIHRl c3Rfcm9vdCBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApOworCisJQ1JFQVRFIFBVQkxJ Q0FUSU9OIHB1Yl9yb290X3RydWUgRk9SIFRBQkxFIHRlc3Rfcm9vdCAoYSkgV0lUSCAocHVi bGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKKwlDUkVBVEUgUFVCTElDQVRJT04g cHViX3Jvb3RfZmFsc2UgRk9SIFRBQkxFIHRlc3Rfcm9vdCAoYSkgV0lUSCAocHVibGlzaF92 aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3QgKGEg aW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7 CisJQ1JFQVRFIFRBQkxFIHRlc3Rfcm9vdF8xIFBBUlRJVElPTiBPRiB0ZXN0X3Jvb3QgRk9S IFZBTFVFUyBGUk9NICgxKSBUTyAoMTApOworCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3RfMiBQ QVJUSVRJT04gT0YgdGVzdF9yb290IEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCk7Cisp KTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFM VEVSIFNVQlNDUklQVElPTiBzdWIxIEFERCBQVUJMSUNBVElPTiBwdWJfcm9vdF90cnVlOwor KSk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlO U0VSVCBJTlRPIHRlc3Rfcm9vdCBWQUxVRVMgKDEsIDIsIDMpOworCUlOU0VSVCBJTlRPIHRl c3Rfcm9vdCBWQUxVRVMgKDEwLCAyMCwgMzApOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X3Jvb3QgT1JERVIgQlkgYSwg YiwgYyIpLAorICAgcXEoMXx8CisxMHx8KSwKKyAgICdwdWJsaWNhdGlvbiB2aWEgcGFydGl0 aW9uIHJvb3QgYXBwbGllcyBjb2x1bW4gZmlsdGVyJyk7CisKKyMgbm93IHN3aXRjaCB0byB1 c2luZyB0aGUgcHVibGljYXRpb24gd2l0aCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSBmYWxzZSksCisjIHdoaWNoIHNob3VsZCBub3QgYXBwbHkgdGhlIGNvbHVtbiBmaWx0ZXIK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlBTFRFUiBT VUJTQ1JJUFRJT04gc3ViMSBEUk9QIFBVQkxJQ0FUSU9OIHB1Yl9yb290X3RydWU7CisJQUxU RVIgU1VCU0NSSVBUSU9OIHN1YjEgQUREIFBVQkxJQ0FUSU9OIHB1Yl9yb290X2ZhbHNlOwor KSk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlO U0VSVCBJTlRPIHRlc3Rfcm9vdCBWQUxVRVMgKDIsIDQsIDYpOworCUlOU0VSVCBJTlRPIHRl c3Rfcm9vdCBWQUxVRVMgKDExLCAyMiwgMzMpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X3Jvb3QgT1JERVIgQlkgYSwg YiwgYyIpLAorICAgcXEoMXx8CisyfDR8NgorMTB8fAorMTF8MjJ8MzMpLAorICAgJ3B1Ymxp Y2F0aW9uIHZpYSBwYXJ0aXRpb24gcm9vdCBhcHBsaWVzIGNvbHVtbiBmaWx0ZXInKTsKKwor IyBhbmQgZmluYWxseSBhZGQgYm90aCBwdWJsaWNhdGlvbnMgdG8gdGhlIHN1YnNjcmlwdGlv biAtIGluIHRoaXMgY2FzZSB3ZQorIyBzaG91bGQgbm90IGFwcGx5IHRoZSBjb2x1bW4gZmls dGVyIGVpdGhlciwgYmVjYXVzZSB0aGUgImZhbHNlIiBjYXNlIGlzCisjIGhhbmRsZWQgYXMg Y29sdW1uIGZpbHRlciB3aXRoIGFsbCBjb2x1bW5zCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgQUREIFBV QkxJQ0FUSU9OIHB1Yl9yb290X3RydWU7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9yb290IFZBTFVFUyAo MywgNiwgOSk7CisJSU5TRVJUIElOVE8gdGVzdF9yb290IFZBTFVFUyAoMTIsIDI0LCAzNik7 CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisK K2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBG Uk9NIHRlc3Rfcm9vdCBPUkRFUiBCWSBhLCBiLCBjIiksCisgICBxcSgxfHwKKzJ8NHw2Cisz fDZ8OQorMTB8fAorMTF8MjJ8MzMKKzEyfDI0fDM2KSwKKyAgICdwdWJsaWNhdGlvbiB2aWEg cGFydGl0aW9uIHJvb3QgYXBwbGllcyBjb2x1bW4gZmlsdGVyJyk7Ci0tIAoyLjM0LjEKCg== --------------tRh04vKPEyft6lLu0pa367jO--