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 1nUvYJ-0000ab-B0 for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Mar 2022 19:12:52 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nUvXJ-00060J-AP for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Mar 2022 19:11:49 +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 1nUvXH-00060A-Sr for pgsql-hackers@lists.postgresql.org; Thu, 17 Mar 2022 19:11:48 +0000 Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nUvX8-00038m-92 for pgsql-hackers@postgresql.org; Thu, 17 Mar 2022 19:11:46 +0000 Received: by mail-lf1-x136.google.com with SMTP id g17so10655867lfh.2 for ; Thu, 17 Mar 2022 12:11:38 -0700 (PDT) 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=wrDcQuAWAlO/m5G2a7N0zQ4k0EY4F7t0gadxAf/uglA=; b=dxATK//Bc9rYTGyEBN1Szu4DNRkgQ3qMf4IPytU3xcYLZOaiy9LQVPM6cq5Z4+4S3b q1uTbHv8K6NEETwnxOnl2Q8GueVh2RekJyKu4O5nfyNVLapXW/lkWCmN7ukKiTJ3Z6lw U3P02/JgGQ8Bpeuy++W6qmziCyfliqzzh1anJF0X0+C/X9eBC5FdfVakTwzeHzeZfiIP 5Vo3ukcmJgMcGZEDjKNEzldcapXW91OVROIiTp7MVcXKR2ftW1hfExrsTrtTEy/A+L81 HKZzoFF5nFD6GOCptsZ+l+XeTo/QHJw9aGrL2MFiytl5y1ZFRxQsl/i6mIjepOzzYFUN YDBA== 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=wrDcQuAWAlO/m5G2a7N0zQ4k0EY4F7t0gadxAf/uglA=; b=1W5NTStJdSuRT4RAn23wLbLGRtS8lv44lqhwh3ZPNQcQ45sz4IxneW05olqXbDwOoF sN4M663XBpoy+UwDcp2v1r4s9ocOPk676caX1IhK+04o1/8gznuGxdwrGHrxdoTfN1V5 Xwp4HYgM5kJcd62sHsNtfrMd2hZ20eVcwH3NscjhXZ3qayQc2j38/i4WxCN3cVFFGtGn hkHvkUgTZXYRMD7E1+jzjagUKKqa2GCFMF/n5UP5IEgpso5pKq3F/ZZoGKL9akc+RrEP sVGnxlRoCQqWsNtb87MJOBM0g0ysTvCvHEByJxmfZoMAL5fV2cLfGr+G3B1AXU90Raup 8CuA== X-Gm-Message-State: AOAM532OKskXU5Ol1vdhB6OyegJlmssxIpZpAijj7oeWBAuLlbwfyYtz aHU6MsVgbBK7oI4TW83fF675ERsVkCiRk1xkct3SeIswI24xfF0c8YRHuywglMpoq6WvuBkT6oU gdqSJa2PNllO0RVXTcHWhq4AbYHfiDa/XQ1lClyhlHX8jfmkbY6HmYxuF8Mud2wEWtnarEz82Tr IJDrgPvKHIIz2C0E5W3Sz3oI6eQpyFKNpyXq1L X-Google-Smtp-Source: ABdhPJyOaFYvHpwfmwF9M7/5x5t0ZStBiy0nodejAd9eFSf1X2VNpUrpY+XzIzfXZuk6GkSEW4Z6kg== X-Received: by 2002:a05:6512:2292:b0:448:b7b7:a5d with SMTP id f18-20020a056512229200b00448b7b70a5dmr3818252lfu.288.1647544296148; Thu, 17 Mar 2022 12:11:36 -0700 (PDT) Received: from [10.137.0.17] (37-247-27-82.customers.ownit.se. [37.247.27.82]) by smtp.gmail.com with ESMTPSA id u11-20020a19600b000000b004487aecc6d0sm508900lfb.137.2022.03.17.12.11.33 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 17 Mar 2022 12:11:34 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------lEr06qP8cqAQxdZPUpPbovUB" Message-ID: Date: Thu, 17 Mar 2022 20:11:32 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.2 Subject: Re: Column Filtering in Logical Replication Content-Language: en-US To: Peter Eisentraut , Amit Kapila Cc: "houzj.fnst@fujitsu.com" , Alvaro Herrera , Justin Pryzby , Rahila Syed , Peter Smith , pgsql-hackers , "shiy.fnst@fujitsu.com" References: <202201120041.p24wvsfcsope@alvherre.pgsql> <78b8d385-57cb-9a3f-cfe5-9f300f15eced@enterprisedb.com> <822a8e40-287c-59ff-0ea9-35eb759f4fe6@enterprisedb.com> <2b8471f9-3849-c91f-ef82-9181d4bca0a7@enterprisedb.com> <16e83ce3-8415-b732-37b2-c3329a2c13a1@enterprisedb.com> <9c0dd1f3-c1b9-9c10-eca6-35f22104434a@enterprisedb.com> From: Tomas Vondra In-Reply-To: <9c0dd1f3-c1b9-9c10-eca6-35f22104434a@enterprisedb.com> 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. --------------lEr06qP8cqAQxdZPUpPbovUB Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 3/17/22 15:17, Peter Eisentraut wrote: > I notice that the publication.sql regression tests contain a number of > comments like > > +-- error: replica identity "a" not included in the column list > +ALTER PUBLICATION testpub_fortable ADD TABLE testpub_tbl5 (b, c); > > but the error doesn't actually happen, because of the way the replica > identity checking was changed.  This needs to be checked again. But the comment describes the error for the whole block, which looks like this: -- error: replica identity "a" not included in the column list ALTER PUBLICATION testpub_fortable ADD TABLE testpub_tbl5 (b, c); UPDATE testpub_tbl5 SET a = 1; ERROR: cannot update table "testpub_tbl5" DETAIL: Column list used by the publication does not cover the replica identity. So IMHO the comment is correct. But there was one place where it wasn't entirely clear, as the block was split by another comment. So I tweaked it to: -- error: change the replica identity to "b", and column list to (a, c) -- then update fails, because (a, c) does not cover replica identity Attached is a rebased patch, on top of the two fixes I pushed. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------lEr06qP8cqAQxdZPUpPbovUB Content-Type: text/x-patch; charset=UTF-8; name="0001-Allow-specifying-column-filters-for-logical-20220317.patch" Content-Disposition: attachment; filename*0="0001-Allow-specifying-column-filters-for-logical-20220317.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwYjQ2NjQzNDMyZTNkNTgzOWQxMWI3NWMzODhmNWNmNDJlYzQyN2JhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAxNyBNYXIgMjAyMiAxOToxNjozOSArMDEwMApTdWJq ZWN0OiBbUEFUQ0hdIEFsbG93IHNwZWNpZnlpbmcgY29sdW1uIGZpbHRlcnMgZm9yIGxvZ2lj YWwgcmVwbGljYXRpb24KClRoaXMgYWxsb3dzIHNwZWNpZnlpbmcgYW4gb3B0aW9uYWwgY29s dW1uIGxpc3Qgd2hlbiBhZGRpbmcgYSB0YWJsZSB0bwpsb2dpY2FsIHJlcGxpY2F0aW9uLiBD b2x1bW5zIG5vdCBpbmNsdWRlZCBvbiB0aGlzIGxpc3QgYXJlIG5vdCBzZW50IHRvCnRoZSBz dWJzY3JpYmVyLiBUaGUgZmlsdGVyIGlzIHNwZWNpZmllZCBhcyBhIGxpc3Qgb2YgY29sdW1u cyBhZnRlciB0aGUKdGFibGUgbmFtZSwgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMuCgpGb3Ig VVBEQVRFL0RFTEVURSBwdWJsaWNhdGlvbnMsIHRoZSBjb2x1bW4gZmlsdGVyIG5lZWRzIHRv IGNvdmVyIGFsbApSRVBMSUNBIElERU5USVRZIGNvbHVtbnMuIEZvciBJTlNFUlQgcHVibGlj YXRpb25zLCB0aGUgY29sdW1uIGxpc3QgaXMKYXJiaXRyYXJ5IGFuZCBtYXkgb21pdCBzb21l IFJFUExJQ0EgSURFTlRJVFkgY29sdW1ucy4gRnVydGhlcm1vcmUsIGlmCnRoZSB0YWJsZSB1 c2VzIFJFUExJQ0EgSURFTlRJVFkgRlVMTCwgY29sdW1uIGZpbHRlciBpcyBub3QgYWxsb3dl ZC4KClRoZSBjb2x1bW4gZmlsdGVyIGNhbiBjb250YWluIG9ubHkgc2ltcGxlIGNvbHVtbiBy ZWZlcmVuY2VzLiBDb21wbGV4CmV4cHJlc3Npb25zLCBmdW5jdGlvbiBjYWxscyBldGMuIGFy ZSBub3QgYWxsb3dlZC4gVGhpcyByZXN0cmljdGlvbiBjb3VsZApiZSByZWxheGVkIGluIHRo ZSBmdXR1cmUuCgpEdXJpbmcgdGhlIGluaXRpYWwgdGFibGUgc3luY2hyb25pemF0aW9uLCBv bmx5IGNvbHVtbnMgc3BlY2lmaWVkIGluIHRoZQpjb2x1bW4gZmlsdGVyIGFyZSBjb3BpZWQg dG8gdGhlIHN1YnNjcmliZXIuIElmIHRoZSBzdWJzY3JpcHRpb24gaGFzCnNldmVyYWwgcHVi bGljYXRpb25zLCBjb250YWluaW5nIHRoZSBzYW1lIHRhYmxlIHdpdGggZGlmZmVyZW50IGNv bHVtbgpmaWx0ZXJzLCBjb2x1bW5zIHNwZWNpZmllZCBpbiBhbnkgb2YgdGhlIGZpbHRlcnMg d2lsbCBiZSBjb3BpZWQuIFRoaXMKbWVhbnMgYWxsIGNvbHVtbnMgYXJlIHJlcGxpY2F0ZWQg aWYgdGhlIHRhYmxlIGhhcyBubyBjb2x1bW4gZmlsdGVyIGF0CmFsbCAod2hpY2ggaXMgdHJl YXRlZCBhcyBjb2x1bW4gZmlsdGVyIHdpdGggYWxsIGNvbHVtbnMpLCBvZiB3aGVuIG9mIHRo ZQpwdWJsaWNhdGlvbnMgaXMgZGVmaW5lZCBhcyBGT1IgQUxMIFRBQkxFUyAocG9zc2libHkg SU4gU0NIRU1BIGZvciB0aGUKc2NoZW1hIG9mIHRoZSB0YWJsZSkuCgpGb3IgcGFydGl0aW9u ZWQgdGFibGVzLCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCBkZXRlcm1pbmVzIHdoZXRo ZXIKdGhlIHJvdyBmaWx0ZXIgZm9yIHRoZSByb290IG9yIGxlYWYgcmVsYXRpb24gd2lsbCBi ZSB1c2VkLiBJZiB0aGUKcGFyYW1ldGVyIGlzICdmYWxzZScgKHRoZSBkZWZhdWx0KSwgdGhl IGZpbHRlciBkZWZpbmVkIGZvciB0aGUgbGVhZgpyZWxhdGlvbiBpcyB1c2VkLiBPdGhlcndp c2UsIHRoZSBjb2x1bW4gZmlsdGVyIGZvciB0aGUgcm9vdCBwYXJ0aXRpb24Kd2lsbCBiZSB1 c2VkLgoKUHNxbCBjb21tYW5kcyBcZFJwKyBhbmQgXGQgPHRhYmxlLW5hbWU+IG5vdyBkaXNw bGF5IGFueSBjb2x1bW4gZmlsdGVycy4KCkF1dGhvcjogVG9tYXMgVm9uZHJhLCBSYWhpbGEg U3llZApSZXZpZXdlZC1ieTogUGV0ZXIgRWlzZW50cmF1dCwgQWx2YXJvIEhlcnJlcmEsIFZp Z25lc2ggQywgSWJyYXIgQWhtZWQsCkFtaXQgS2FwaWxhLCBIb3UgemosIFBldGVyIFNtaXRo LCBXYW5nIHdlaSwgVGFuZywgU2hpIHl1CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vQ0FIMkwyOHZkZEJfTkZkUlZwdXlSQkpFQldqejRCU3lUQj1fZWt0TlJIOE5KMWpmOTVn QG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgICAgICAg ICAgICAgICAgICB8ICAgMTUgKy0KIGRvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sICAgICAg ICAgICAgICAgICAgfCAgICAzICstCiBkb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX3B1YmxpY2F0 aW9uLnNnbWwgICAgIHwgICAyNyArLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGlj YXRpb24uc2dtbCAgICB8ICAgMTcgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGlj YXRpb24uYyAgICAgICAgfCAgMjU2ICsrKysrCiBzcmMvYmFja2VuZC9jb21tYW5kcy9wdWJs aWNhdGlvbmNtZHMuYyAgICAgIHwgIDM2NCArKysrKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jICAgICAgICAgICAgfCAgIDM2ICstCiBzcmMvYmFja2VuZC9leGVjdXRv ci9leGVjUmVwbGljYXRpb24uYyAgICAgIHwgICAxOSArLQogc3JjL2JhY2tlbmQvbm9kZXMv Y29weWZ1bmNzLmMgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvbm9kZXMv ZXF1YWxmdW5jcy5jICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcGFyc2Vy L2dyYW0ueSAgICAgICAgICAgICAgICAgICB8ICAgNjAgKy0KIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAgfCAgIDU2ICstCiBzcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIHwgIDE1NiArKy0KIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgfCAgMjAzICsrKy0KIHNyYy9iYWNrZW5k L3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgICAgICAgICAgfCAgIDMzICstCiBzcmMvYmluL3Bn X2R1bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgIHwgICA0NyArLQogc3JjL2Jpbi9w Z19kdW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2Jpbi9w Z19kdW1wL3QvMDAyX3BnX2R1bXAucGwgICAgICAgICAgICB8ICAgNjAgKwogc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICB8ICAgNDAgKy0KIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgfCAgIDEzICsKIHNyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmggICAgfCAgICAxICsKIHNyYy9pbmNs dWRlL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oICAgICAgfCAgICA0ICstCiBzcmMvaW5j bHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAgICAgICAgICAgIHwgICAgNCArLQogc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggICAgICB8ICAgIDYgKy0KIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0ICAgfCAgMzc1ICsrKysrKysK IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCAgICAgICAgfCAgMjkwICsr KysrCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjlfY29sdW1uX2xpc3QucGwgIHwgMTEy NCArKysrKysrKysrKysrKysrKysrCiAyNyBmaWxlcyBjaGFuZ2VkLCAzMTE3IGluc2VydGlv bnMoKyksIDk1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3N1 YnNjcmlwdGlvbi90LzAyOV9jb2x1bW5fbGlzdC5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMv c2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKaW5kZXgg NGRjNWIzNGQyMWMuLjg5ODI3YzM3M2JkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY2F0 YWxvZ3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbApAQCAtNDQxMCw3 ICs0NDEwLDcgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBj b3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKICAgICAgIDwvcGFyYT4K ICAgICAgIDxwYXJhPgogICAgICAgIFRoaXMgaXMgYW4gYXJyYXkgb2YgPHN0cnVjdGZpZWxk PmluZG5hdHRzPC9zdHJ1Y3RmaWVsZD4gdmFsdWVzIHRoYXQKLSAgICAgICBpbmRpY2F0ZSB3 aGljaCB0YWJsZSBjb2x1bW5zIHRoaXMgaW5kZXggaW5kZXhlcy4gIEZvciBleGFtcGxlIGEg dmFsdWUKKyAgICAgICBpbmRpY2F0ZSB3aGljaCB0YWJsZSBjb2x1bW5zIHRoaXMgaW5kZXgg aW5kZXhlcy4gIEZvciBleGFtcGxlLCBhIHZhbHVlCiAgICAgICAgb2YgPGxpdGVyYWw+MSAz PC9saXRlcmFsPiB3b3VsZCBtZWFuIHRoYXQgdGhlIGZpcnN0IGFuZCB0aGUgdGhpcmQgdGFi bGUKICAgICAgICBjb2x1bW5zIG1ha2UgdXAgdGhlIGluZGV4IGVudHJpZXMuICBLZXkgY29s dW1ucyBjb21lIGJlZm9yZSBub24ta2V5CiAgICAgICAgKGluY2x1ZGVkKSBjb2x1bW5zLiAg QSB6ZXJvIGluIHRoaXMgYXJyYXkgaW5kaWNhdGVzIHRoYXQgdGhlCkBAIC02MjgxLDYgKzYy ODEsMTkgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3Vu dCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKICAgICAgICBSZWZlcmVuY2Ug dG8gc2NoZW1hCiAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CisKKyAgICAg PHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSBy b2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPnByYXR0cnM8 L3N0cnVjdGZpZWxkPiA8dHlwZT5pbnQydmVjdG9yPC90eXBlPgorICAgICAgIChyZWZlcmVu Y2VzIDxsaW5rIGxpbmtlbmQ9ImNhdGFsb2ctcGctYXR0cmlidXRlIj48c3RydWN0bmFtZT5w Z19hdHRyaWJ1dGU8L3N0cnVjdG5hbWU+PC9saW5rPi48c3RydWN0ZmllbGQ+YXR0bnVtPC9z dHJ1Y3RmaWVsZD4pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGlz IGlzIGFuIGFycmF5IG9mIHZhbHVlcyB0aGF0IGluZGljYXRlcyB3aGljaCB0YWJsZSBjb2x1 bW5zIGFyZQorICAgICAgIHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uLiAgRm9yIGV4YW1wbGUs IGEgdmFsdWUgb2YgPGxpdGVyYWw+MSAzPC9saXRlcmFsPgorICAgICAgIHdvdWxkIG1lYW4g dGhhdCB0aGUgZmlyc3QgYW5kIHRoZSB0aGlyZCB0YWJsZSBjb2x1bW5zIGFyZSBwdWJsaXNo ZWQuCisgICAgICAgQSBudWxsIHZhbHVlIGluZGljYXRlcyB0aGF0IGFsbCBjb2x1bW5zIGFy ZSBwdWJsaXNoZWQuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CiAgICAg PC90Ym9keT4KICAgIDwvdGdyb3VwPgogICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3Byb3RvY29sLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbAppbmRl eCA5MTc4Yzc3OWJhOS4uZmI0OTFlOWViZWUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9w cm90b2NvbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCkBAIC03MDA2 LDcgKzcwMDYsOCBAQCBSZWxhdGlvbgogPC9saXN0aXRlbT4KIDwvdmFybGlzdGVudHJ5Pgog PC92YXJpYWJsZWxpc3Q+Ci0gICAgICAgIE5leHQsIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSBw YXJ0IGFwcGVhcnMgZm9yIGVhY2ggY29sdW1uIChleGNlcHQgZ2VuZXJhdGVkIGNvbHVtbnMp OgorICAgICAgICBOZXh0LCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgcGFydCBhcHBlYXJzIGZv ciBlYWNoIGNvbHVtbiBpbmNsdWRlZCBpbgorICAgICAgICB0aGUgcHVibGljYXRpb24gKGV4 Y2VwdCBnZW5lcmF0ZWQgY29sdW1ucyk6CiA8dmFyaWFibGVsaXN0PgogPHZhcmxpc3RlbnRy eT4KIDx0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNh dGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sCmlu ZGV4IDMyYjc1ZjZjNzhlLi40NzBkNTBhMjQ0NyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21s L3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYvYWx0 ZXJfcHVibGljYXRpb24uc2dtbApAQCAtMjUsMTIgKzI1LDEzIEBAIEFMVEVSIFBVQkxJQ0FU SU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4g QUREIDxyZXBsYWNlCiBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFNFVCA8cmVwbGFjZWFibGUgY2xhc3M9InBh cmFtZXRlciI+cHVibGljYXRpb25fb2JqZWN0PC9yZXBsYWNlYWJsZT4gWywgLi4uXQogQUxU RVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3Jl cGxhY2VhYmxlPiBEUk9QIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNh dGlvbl9vYmplY3Q8L3JlcGxhY2VhYmxlPiBbLCAuLi5dCiBBTFRFUiBQVUJMSUNBVElPTiA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFNFVCAo IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9wYXJhbWV0ZXI8 L3JlcGxhY2VhYmxlPiBbPSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dmFsdWU8 L3JlcGxhY2VhYmxlPl0gWywgLi4uIF0gKQorQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBBTFRFUiBUQUJMRSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+ IFNFVCBDT0xVTU5TIHsgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwv cmVwbGFjZWFibGU+IFssIC4uLl0gKSB8IEFMTCB9CiBBTFRFUiBQVUJMSUNBVElPTiA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IE9XTkVSIFRP IHsgPHJlcGxhY2VhYmxlPm5ld19vd25lcjwvcmVwbGFjZWFibGU+IHwgQ1VSUkVOVF9ST0xF IHwgQ1VSUkVOVF9VU0VSIHwgU0VTU0lPTl9VU0VSIH0KIEFMVEVSIFBVQkxJQ0FUSU9OIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1lPC9yZXBsYWNlYWJsZT4gUkVOQU1F IFRPIDxyZXBsYWNlYWJsZT5uZXdfbmFtZTwvcmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+d2hl cmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnB1YmxpY2F0aW9uX29iamVjdDwv cmVwbGFjZWFibGU+IGlzIG9uZSBvZjo8L3BocmFzZT4KIAotICAgIFRBQkxFIFsgT05MWSBd IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJs ZT4gWyAqIF0gWyBXSEVSRSAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHBy ZXNzaW9uPC9yZXBsYWNlYWJsZT4gKSBdIFssIC4uLiBdCisgICAgVEFCTEUgWyBPTkxZIF0g PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxl PiBbICogXSBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1l PC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKSBdIFsgV0hFUkUgKCA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICkgXSBbLCAuLi4gXQog ICAgIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnNjaGVtYV9uYW1lPC9yZXBsYWNlYWJsZT4gfCBDVVJSRU5UX1NDSEVNQSB9IFssIC4u LiBdCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lub3BzaXNkaXY+CkBAIC02NCw2ICs2NSwxMiBA QCBBTFRFUiBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFt ZTwvcmVwbGFjZWFibGU+IFJFTkFNRSBUTyA8cgogICAgY29tbWFuZCByZXRhaW4gdGhlaXIg cHJldmlvdXMgc2V0dGluZ3MuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIFRoZSA8bGl0 ZXJhbD5BTFRFUiBUQUJMRSAuLi4gU0VUIENPTFVNTlM8L2xpdGVyYWw+IHZhcmlhbnQgYWxs b3dzIGNoYW5naW5nCisgICB0aGUgc2V0IG9mIGNvbHVtbnMgdGhhdCBhcmUgaW5jbHVkZWQg aW4gdGhlIHB1YmxpY2F0aW9uLiAgSWYgYSBjb2x1bW4gbGlzdAorICAgaXMgc3BlY2lmaWVk LCBpdCBtdXN0IGluY2x1ZGUgdGhlIHJlcGxpY2EgaWRlbnRpdHkgY29sdW1ucy4KKyAgPC9w YXJhPgorCiAgIDxwYXJhPgogICAgVGhlIHJlbWFpbmluZyB2YXJpYW50cyBjaGFuZ2UgdGhl IG93bmVyIGFuZCB0aGUgbmFtZSBvZiB0aGUgcHVibGljYXRpb24uCiAgIDwvcGFyYT4KQEAg LTExMiw2ICsxMTksMTQgQEAgQUxURVIgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPiBSRU5BTUUgVE8gPHIKICAgICAgIHNw ZWNpZmllZCwgdGhlIHRhYmxlIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnQgdGFibGVzIChpZiBh bnkpIGFyZQogICAgICAgYWZmZWN0ZWQuICBPcHRpb25hbGx5LCA8bGl0ZXJhbD4qPC9saXRl cmFsPiBjYW4gYmUgc3BlY2lmaWVkIGFmdGVyIHRoZSB0YWJsZQogICAgICAgbmFtZSB0byBl eHBsaWNpdGx5IGluZGljYXRlIHRoYXQgZGVzY2VuZGFudCB0YWJsZXMgYXJlIGluY2x1ZGVk LgorICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CisgICAgICBPcHRpb25hbGx5LCBhIGNv bHVtbiBsaXN0IGNhbiBiZSBzcGVjaWZpZWQuICBTZWUgPHhyZWYKKyAgICAgIGxpbmtlbmQ9 InNxbC1jcmVhdGVwdWJsaWNhdGlvbiIvPiBmb3IgZGV0YWlscy4KKyAgICAgPC9wYXJhPgor CisgICAgIDxwYXJhPgogICAgICAgSWYgdGhlIG9wdGlvbmFsIDxsaXRlcmFsPldIRVJFPC9s aXRlcmFsPiBjbGF1c2UgaXMgc3BlY2lmaWVkLCByb3dzIGZvcgogICAgICAgd2hpY2ggdGhl IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJs ZT4KICAgICAgIGV2YWx1YXRlcyB0byBmYWxzZSBvciBudWxsIHdpbGwgbm90IGJlIHB1Ymxp c2hlZC4gTm90ZSB0aGF0IHBhcmVudGhlc2VzCkBAIC0xNzIsOSArMTg3LDE1IEBAIEFMVEVS IFBVQkxJQ0FUSU9OIG5vaW5zZXJ0IFNFVCAocHVibGlzaCA9ICd1cGRhdGUsIGRlbGV0ZScp OwogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0gICBBZGQgc29tZSB0YWJsZXMgdG8gdGhlIHB1 YmxpY2F0aW9uOgorICAgQWRkIHRhYmxlcyB0byB0aGUgcHVibGljYXRpb246Cis8cHJvZ3Jh bWxpc3Rpbmc+CitBTFRFUiBQVUJMSUNBVElPTiBteXB1YmxpY2F0aW9uIEFERCBUQUJMRSB1 c2VycyAodXNlcl9pZCwgZmlyc3RuYW1lKSwgZGVwYXJ0bWVudHM7Cis8L3Byb2dyYW1saXN0 aW5nPjwvcGFyYT4KKworICA8cGFyYT4KKyAgIENoYW5nZSB0aGUgc2V0IG9mIGNvbHVtbnMg cHVibGlzaGVkIGZvciBhIHRhYmxlOgogPHByb2dyYW1saXN0aW5nPgotQUxURVIgUFVCTElD QVRJT04gbXlwdWJsaWNhdGlvbiBBREQgVEFCTEUgdXNlcnMsIGRlcGFydG1lbnRzOworQUxU RVIgUFVCTElDQVRJT04gbXlwdWJsaWNhdGlvbiBBTFRFUiBUQUJMRSB1c2VycyBTRVQgQ09M VU1OUyAodXNlcl9pZCwgZmlyc3RuYW1lLCBsYXN0bmFtZSk7CiA8L3Byb2dyYW1saXN0aW5n PjwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3Jl YXRlX3B1YmxpY2F0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNh dGlvbi5zZ21sCmluZGV4IDQ5NzliOWI2NDZkLi5mYjJkMDEzMzkzYiAxMDA2NDQKLS0tIGEv ZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbAorKysgYi9kb2Mvc3Jj L3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sCkBAIC0yOCw3ICsyOCw3IEBAIENS RUFURSBQVUJMSUNBVElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwv cmVwbGFjZWFibGU+CiAKIDxwaHJhc2U+d2hlcmUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPnB1YmxpY2F0aW9uX29iamVjdDwvcmVwbGFjZWFibGU+IGlzIG9uZSBvZjo8L3Bo cmFzZT4KIAotICAgIFRBQkxFIFsgT05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAqIF0gWyBXSEVSRSAoIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gKSBdIFss IC4uLiBdCisgICAgVEFCTEUgWyBPTkxZIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPnRhYmxlX25hbWU8L3JlcGxhY2VhYmxlPiBbICogXSBbICggPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKSBd IFsgV0hFUkUgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXhwcmVzc2lvbjwv cmVwbGFjZWFibGU+ICkgXSBbLCAuLi4gXQogICAgIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHsg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNjaGVtYV9uYW1lPC9yZXBsYWNlYWJs ZT4gfCBDVVJSRU5UX1NDSEVNQSB9IFssIC4uLiBdCiA8L3N5bm9wc2lzPgogIDwvcmVmc3lu b3BzaXNkaXY+CkBAIC04Niw2ICs4NiwxMyBAQCBDUkVBVEUgUFVCTElDQVRJT04gPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgogICAgICAgPGxp dGVyYWw+VFJVTkNBVEU8L2xpdGVyYWw+IGNvbW1hbmRzLgogICAgICA8L3BhcmE+CiAKKyAg ICAgPHBhcmE+CisgICAgICBXaGVuIGEgY29sdW1uIGxpc3QgaXMgc3BlY2lmaWVkLCBvbmx5 IHRoZSBuYW1lZCBjb2x1bW5zIGFyZSByZXBsaWNhdGVkLgorICAgICAgSWYgbm8gY29sdW1u IGxpc3QgaXMgc3BlY2lmaWVkLCBhbGwgY29sdW1ucyBvZiB0aGUgdGFibGUgYXJlIHJlcGxp Y2F0ZWQKKyAgICAgIHRocm91Z2ggdGhpcyBwdWJsaWNhdGlvbiwgaW5jbHVkaW5nIGFueSBj b2x1bW5zIGFkZGVkIGxhdGVyLiAgSWYgYSBjb2x1bW4KKyAgICAgIGxpc3QgaXMgc3BlY2lm aWVkLCBpdCBtdXN0IGluY2x1ZGUgdGhlIHJlcGxpY2EgaWRlbnRpdHkgY29sdW1ucy4KKyAg ICAgPC9wYXJhPgorCiAgICAgIDxwYXJhPgogICAgICAgT25seSBwZXJzaXN0ZW50IGJhc2Ug dGFibGVzIGFuZCBwYXJ0aXRpb25lZCB0YWJsZXMgY2FuIGJlIHBhcnQgb2YgYQogICAgICAg cHVibGljYXRpb24uICBUZW1wb3JhcnkgdGFibGVzLCB1bmxvZ2dlZCB0YWJsZXMsIGZvcmVp Z24gdGFibGVzLApAQCAtMzI3LDYgKzMzNCwxNCBAQCBDUkVBVEUgUFVCTElDQVRJT04gcHJv ZHVjdGlvbl9wdWJsaWNhdGlvbiBGT1IgVEFCTEUgdXNlcnMsIGRlcGFydG1lbnRzLCBBTEwg VEFCTAogICAgPHN0cnVjdG5hbWU+c2FsZXM8L3N0cnVjdG5hbWU+OgogPHByb2dyYW1saXN0 aW5nPgogQ1JFQVRFIFBVQkxJQ0FUSU9OIHNhbGVzX3B1YmxpY2F0aW9uIEZPUiBBTEwgVEFC TEVTIElOIFNDSEVNQSBtYXJrZXRpbmcsIHNhbGVzOworPC9wcm9ncmFtbGlzdGluZz48L3Bh cmE+CisKKyAgPHBhcmE+CisgICBDcmVhdGUgYSBwdWJsaWNhdGlvbiB0aGF0IHB1Ymxpc2hl cyBhbGwgY2hhbmdlcyBmb3IgdGFibGUgPHN0cnVjdG5hbWU+dXNlcnM8L3N0cnVjdG5hbWU+ LAorICAgYnV0IHJlcGxpY2F0ZXMgb25seSBjb2x1bW5zIDxzdHJ1Y3RuYW1lPnVzZXJfaWQ8 L3N0cnVjdG5hbWU+IGFuZAorICAgPHN0cnVjdG5hbWU+Zmlyc3RuYW1lPC9zdHJ1Y3RuYW1l PjoKKzxwcm9ncmFtbGlzdGluZz4KK0NSRUFURSBQVUJMSUNBVElPTiB1c2Vyc19maWx0ZXJl ZCBGT1IgVEFCTEUgdXNlcnMgKHVzZXJfaWQsIGZpcnN0bmFtZSk7CiA8L3Byb2dyYW1saXN0 aW5nPjwvcGFyYT4KICA8L3JlZnNlY3QxPgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j YXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1Ymxp Y2F0aW9uLmMKaW5kZXggNzg5Yjg5NWRiODkuLjcwYTM1YTEyYTQ3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCkBAIC00NSw2ICs0NSw5IEBACiAjaW5jbHVkZSAi dXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAorc3RhdGljIHZv aWQgcHVibGljYXRpb25fdHJhbnNsYXRlX2NvbHVtbnMoUmVsYXRpb24gdGFyZ2V0cmVsLCBM aXN0ICpjb2x1bW5zLAorCQkJCQkJCQkJCSAgaW50ICpuYXR0cywgQXR0ck51bWJlciAqKmF0 dHJzKTsKKwogLyoKICAqIENoZWNrIGlmIHJlbGF0aW9uIGNhbiBiZSBpbiBnaXZlbiBwdWJs aWNhdGlvbiBhbmQgdGhyb3dzIGFwcHJvcHJpYXRlCiAgKiBlcnJvciBpZiBub3QuCkBAIC0z NDUsNiArMzQ4LDggQEAgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwgUHVi bGljYXRpb25SZWxJbmZvICpwcmksCiAJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlk KHRhcmdldHJlbCk7CiAJT2lkCQkJcHVicmVsb2lkOwogCVB1YmxpY2F0aW9uICpwdWIgPSBH ZXRQdWJsaWNhdGlvbihwdWJpZCk7CisJQXR0ck51bWJlciAqYXR0YXJyYXk7CisJaW50CQkJ bmF0dHMgPSAwOwogCU9iamVjdEFkZHJlc3MgbXlzZWxmLAogCQkJCXJlZmVyZW5jZWQ7CiAJ TGlzdAkgICAqcmVsaWRzID0gTklMOwpAQCAtMzcyLDYgKzM3NywxNCBAQCBwdWJsaWNhdGlv bl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKIAog CWNoZWNrX3B1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbih0YXJnZXRyZWwpOwogCisJLyoKKwkg KiBUcmFuc2xhdGUgY29sdW1uIG5hbWVzIHRvIGF0dG51bXMgYW5kIGNoZWNrIHRoZSBjb2x1 bW4gbGlzdCBpcyB2YWxpZC4KKwkgKiBXZSBhbHNvIGRlY29uc3RydWN0IHRoZSBiaXRtYXAg aW50byBhbiBhcnJheSBvZiBhdHRudW1zLCBmb3Igc3RvcmluZworCSAqIGluIHRoZSBjYXRh bG9nLgorCSAqLworCXB1YmxpY2F0aW9uX3RyYW5zbGF0ZV9jb2x1bW5zKHByaS0+cmVsYXRp b24sIHByaS0+Y29sdW1ucywKKwkJCQkJCQkJICAmbmF0dHMsICZhdHRhcnJheSk7CisKIAkv KiBGb3JtIGEgdHVwbGUuICovCiAJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykp OwogCW1lbXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOwpAQCAtMzg0LDYgKzM5 NywxNyBAQCBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlv blJlbEluZm8gKnByaSwKIAl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJyZWxp ZCAtIDFdID0KIAkJT2JqZWN0SWRHZXREYXR1bShyZWxpZCk7CiAKKwkvKiBBZGQgY29sdW1u IGxpc3QsIGlmIGF2YWlsYWJsZSAqLworCWlmIChwcmktPmNvbHVtbnMpCisJeworCQlpbnQy dmVjdG9yICpwcmF0dHJzOworCisJCXByYXR0cnMgPSBidWlsZGludDJ2ZWN0b3IoYXR0YXJy YXksIG5hdHRzKTsKKwkJdmFsdWVzW0FudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMg LSAxXSA9IFBvaW50ZXJHZXREYXR1bShwcmF0dHJzKTsKKwl9CisJZWxzZQorCQludWxsc1tB bnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzIC0gMV0gPSB0cnVlOworCiAJLyogQWRk IHF1YWxpZmljYXRpb25zLCBpZiBhdmFpbGFibGUgKi8KIAlpZiAocHJpLT53aGVyZUNsYXVz ZSAhPSBOVUxMKQogCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJxdWFsIC0g MV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKG5vZGVUb1N0cmluZyhwcmktPndoZXJlQ2xhdXNl KSk7CkBAIC0zOTksNiArNDIzLDE0IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQg cHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCS8qIFJlZ2lzdGVyIGRlcGVuZGVu Y2llcyBhcyBuZWVkZWQgKi8KIAlPYmplY3RBZGRyZXNzU2V0KG15c2VsZiwgUHVibGljYXRp b25SZWxSZWxhdGlvbklkLCBwdWJyZWxvaWQpOwogCisJLyogQWRkIGRlcGVuZGVuY3kgb24g dGhlIGNvbHVtbnMsIGlmIGFueSBhcmUgbGlzdGVkICovCisJZm9yIChpbnQgaSA9IDA7IGkg PCBuYXR0czsgaSsrKQorCXsKKwkJT2JqZWN0QWRkcmVzc1N1YlNldChyZWZlcmVuY2VkLCBS ZWxhdGlvblJlbGF0aW9uSWQsIHJlbGlkLCBhdHRhcnJheVtpXSk7CisJCXJlY29yZERlcGVu ZGVuY3lPbigmbXlzZWxmLCAmcmVmZXJlbmNlZCwgREVQRU5ERU5DWV9BVVRPKTsKKwl9CisJ cGZyZWUoYXR0YXJyYXkpOworCiAJLyogQWRkIGRlcGVuZGVuY3kgb24gdGhlIHB1YmxpY2F0 aW9uICovCiAJT2JqZWN0QWRkcmVzc1NldChyZWZlcmVuY2VkLCBQdWJsaWNhdGlvblJlbGF0 aW9uSWQsIHB1YmlkKTsKIAlyZWNvcmREZXBlbmRlbmN5T24oJm15c2VsZiwgJnJlZmVyZW5j ZWQsIERFUEVOREVOQ1lfQVVUTyk7CkBAIC00MzIsNiArNDY0LDE1NCBAQCBwdWJsaWNhdGlv bl9hZGRfcmVsYXRpb24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaSwKIAly ZXR1cm4gbXlzZWxmOwogfQogCisvKgorICogVXBkYXRlIHRoZSBjb2x1bW4gbGlzdCBmb3Ig YSByZWxhdGlvbiBpbiBhIHB1YmxpY2F0aW9uLgorICovCit2b2lkCitwdWJsaWNhdGlvbl9z ZXRfdGFibGVfY29sdW1ucyhSZWxhdGlvbiBwdWJyZWwsIEhlYXBUdXBsZSBwdWJyZWx0dXAs CisJCQkJCQkJICBSZWxhdGlvbiB0YXJnZXRyZWwsIExpc3QgKmNvbHVtbnMpCit7CisJQXR0 ck51bWJlciAqYXR0YXJyYXk7CisJSGVhcFR1cGxlCWNvcHl0dXA7CisJaW50CQkJbmF0dHM7 CisJYm9vbAkJbnVsbHNbTmF0dHNfcGdfcHVibGljYXRpb25fcmVsXTsKKwlib29sCQlyZXBs YWNlc1tOYXR0c19wZ19wdWJsaWNhdGlvbl9yZWxdOworCURhdHVtCQl2YWx1ZXNbTmF0dHNf cGdfcHVibGljYXRpb25fcmVsXTsKKworCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1 ZXMpKTsKKwltZW1zZXQobnVsbHMsIGZhbHNlLCBzaXplb2YobnVsbHMpKTsKKwltZW1zZXQo cmVwbGFjZXMsIGZhbHNlLCBzaXplb2YocmVwbGFjZXMpKTsKKworCXJlcGxhY2VzW0FudW1f cGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMgLSAxXSA9IHRydWU7CisKKwlkZWxldGVEZXBl bmRlbmN5UmVjb3Jkc0ZvckNsYXNzKFB1YmxpY2F0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJ CSgoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVChwdWJyZWx0dXApKS0+b2lk LAorCQkJCQkJCQkJUmVsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJREVQRU5ERU5DWV9B VVRPKTsKKworCWlmIChjb2x1bW5zID09IE5VTEwpCisJeworCQludWxsc1tBbnVtX3BnX3B1 YmxpY2F0aW9uX3JlbF9wcmF0dHJzIC0gMV0gPSB0cnVlOworCX0KKwllbHNlCisJeworCQlP YmplY3RBZGRyZXNzCW15c2VsZiwKKwkJCQkJCXJlZmVyZW5jZWQ7CisJCWludDJ2ZWN0b3IJ ICAgKnByYXR0cnM7CisJCUZvcm1fcGdfcHVibGljYXRpb25fcmVsCXB1YnJlbDsKKworCQlw dWJsaWNhdGlvbl90cmFuc2xhdGVfY29sdW1ucyh0YXJnZXRyZWwsIGNvbHVtbnMsICZuYXR0 cywgJmF0dGFycmF5KTsKKworCQkvKiBYWFggInB1YiIgaXMgbGVha2VkIGhlcmUgPz8/ICov CisKKwkJcHJhdHRycyA9IGJ1aWxkaW50MnZlY3RvcihhdHRhcnJheSwgbmF0dHMpOworCQl2 YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycyAtIDFdID0gUG9pbnRlckdl dERhdHVtKHByYXR0cnMpOworCisJCS8qIEFkZCBkZXBlbmRlbmNpZXMgb24gdGhlIG5ldyBs aXN0IG9mIGNvbHVtbnMgKi8KKwkJcHVicmVsID0gKEZvcm1fcGdfcHVibGljYXRpb25fcmVs KSBHRVRTVFJVQ1QocHVicmVsdHVwKTsKKwkJT2JqZWN0QWRkcmVzc1NldChteXNlbGYsIFB1 YmxpY2F0aW9uUmVsUmVsYXRpb25JZCwgcHVicmVsLT5vaWQpOworCisJCWZvciAoaW50IGkg PSAwOyBpIDwgbmF0dHM7IGkrKykKKwkJeworCQkJT2JqZWN0QWRkcmVzc1N1YlNldChyZWZl cmVuY2VkLCBSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQo dGFyZ2V0cmVsKSwgYXR0YXJyYXlbaV0pOworCQkJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNl bGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX0FVVE8pOworCQl9CisJfQorCisJY29weXR1 cCA9IGhlYXBfbW9kaWZ5X3R1cGxlKHB1YnJlbHR1cCwgUmVsYXRpb25HZXREZXNjcihwdWJy ZWwpLAorCQkJCQkJCQl2YWx1ZXMsIG51bGxzLCByZXBsYWNlcyk7CisKKwlDYXRhbG9nVHVw bGVVcGRhdGUocHVicmVsLCAmcHVicmVsdHVwLT50X3NlbGYsIGNvcHl0dXApOworCisJaGVh cF9mcmVldHVwbGUoY29weXR1cCk7Cit9CisKKy8qCisgKiBxc29ydCBjb21wYXJhdG9yIGZv ciBhdHRudW1zCisgKgorICogWFhYIFdlIGFscmVhZHkgaGF2ZSBjb21wYXJlX2ludDE2LCBz byBtYXliZSBsZXQncyBzaGFyZSB0aGF0LCBzb21laG93PworICovCitzdGF0aWMgaW50Citj b21wYXJlX2ludDE2KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJaW50CQkJ YXYgPSAqKGNvbnN0IGludDE2ICopIGE7CisJaW50CQkJYnYgPSAqKGNvbnN0IGludDE2ICop IGI7CisKKwkvKiB0aGlzIGNhbid0IG92ZXJmbG93IGlmIGludCBpcyB3aWRlciB0aGFuIGlu dDE2ICovCisJcmV0dXJuIChhdiAtIGJ2KTsKK30KKworLyoKKyAqIFRyYW5zbGF0ZSBhIGxp c3Qgb2YgY29sdW1uIG5hbWVzIHRvIGFuIGFycmF5IG9mIGF0dHJpYnV0ZSBudW1iZXJzCisg KiBhbmQgYSBCaXRtYXBzZXQgd2l0aCB0aGVtOyB2ZXJpZnkgdGhhdCBlYWNoIGF0dHJpYnV0 ZSBpcyBhcHByb3ByaWF0ZQorICogdG8gaGF2ZSBpbiBhIHB1YmxpY2F0aW9uIGNvbHVtbiBs aXN0IChubyBzeXN0ZW0gb3IgZ2VuZXJhdGVkIGF0dHJpYnV0ZXMsCisgKiBubyBkdXBsaWNh dGVzKS4gIEFkZGl0aW9uYWwgY2hlY2tzIHdpdGggcmVwbGljYSBpZGVudGl0eSBhcmUgZG9u ZSBsYXRlcjsKKyAqIHNlZSBjaGVja19wdWJsaWNhdGlvbl9jb2x1bW5zLgorICoKKyAqIE5v dGUgdGhhdCB0aGUgYXR0cmlidXRlIG51bWJlcnMgYXJlICpub3QqIG9mZnNldCBieQorICog Rmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsgc3lzdGVtIGNvbHVtbnMgYXJl IGZvcmJpZGRlbiBzbyB0aGlzCisgKiBpcyBva2F5LgorICoKKyAqIFhYWCBTaG91bGQgdGhp cyBkZXRlY3QgZHVwbGljYXRlIGNvbHVtbnM/CisgKi8KK3N0YXRpYyB2b2lkCitwdWJsaWNh dGlvbl90cmFuc2xhdGVfY29sdW1ucyhSZWxhdGlvbiB0YXJnZXRyZWwsIExpc3QgKmNvbHVt bnMsCisJCQkJCQkJICBpbnQgKm5hdHRzLCBBdHRyTnVtYmVyICoqYXR0cnMpCit7CisJQXR0 ck51bWJlciAqYXR0YXJyYXk7CisJQml0bWFwc2V0ICAqc2V0ID0gTlVMTDsKKwlMaXN0Q2Vs bCAgICpsYzsKKwlpbnQJCQluID0gMDsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9u R2V0RGVzY3IodGFyZ2V0cmVsKTsKKworCS8qCisJICogVHJhbnNsYXRlIGxpc3Qgb2YgY29s dW1ucyB0byBhdHRudW1zLiBXZSBwcm9oaWJpdCBzeXN0ZW0gYXR0cmlidXRlcyBhbmQKKwkg KiBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGR1cGxpY2F0ZSBjb2x1bW5zLgorCSAqLworCWF0 dGFycmF5ID0gcGFsbG9jKHNpemVvZihBdHRyTnVtYmVyKSAqIGxpc3RfbGVuZ3RoKGNvbHVt bnMpKTsKKwlmb3JlYWNoKGxjLCBjb2x1bW5zKQorCXsKKwkJY2hhcgkgICAqY29sbmFtZSA9 IHN0clZhbChsZmlyc3QobGMpKTsKKwkJQXR0ck51bWJlcglhdHRudW0gPSBnZXRfYXR0bnVt KFJlbGF0aW9uR2V0UmVsaWQodGFyZ2V0cmVsKSwgY29sbmFtZSk7CisKKwkJaWYgKGF0dG51 bSA9PSBJbnZhbGlkQXR0ck51bWJlcikKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNv ZGUoRVJSQ09ERV9VTkRFRklORURfQ09MVU1OKSwKKwkJCQkJZXJybXNnKCJjb2x1bW4gXCIl c1wiIG9mIHJlbGF0aW9uIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkgICBjb2xu YW1lLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZSh0YXJnZXRyZWwpKSk7CisKKwkJaWYgKCFB dHRyTnVtYmVySXNGb3JVc2VyRGVmaW5lZEF0dHIoYXR0bnVtKSkKKwkJCWVyZXBvcnQoRVJS T1IsCisJCQkJCWVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0UpLAor CQkJCQllcnJtc2coImNhbm5vdCByZWZlcmVuY2Ugc3lzdGVtIGNvbHVtbiBcIiVzXCIgaW4g cHVibGljYXRpb24gY29sdW1uIGxpc3QiLAorCQkJCQkJICAgY29sbmFtZSkpOworCisJCWlm IChUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGF0dG51bSAtIDEpLT5hdHRnZW5lcmF0ZWQpCisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5f UkVGRVJFTkNFKSwKKwkJCQkJZXJybXNnKCJjYW5ub3QgcmVmZXJlbmNlIGdlbmVyYXRlZCBj b2x1bW4gXCIlc1wiIGluIHB1YmxpY2F0aW9uIGNvbHVtbiBsaXN0IiwKKwkJCQkJCSAgIGNv bG5hbWUpKTsKKworCQlpZiAoYm1zX2lzX21lbWJlcihhdHRudW0sIHNldCkpCisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfRFVQTElDQVRFX09CSkVDVCksCisJ CQkJCWVycm1zZygiZHVwbGljYXRlIGNvbHVtbiBcIiVzXCIgaW4gcHVibGljYXRpb24gY29s dW1uIGxpc3QiLAorCQkJCQkJICAgY29sbmFtZSkpOworCisJCXNldCA9IGJtc19hZGRfbWVt YmVyKHNldCwgYXR0bnVtKTsKKwkJYXR0YXJyYXlbbisrXSA9IGF0dG51bTsKKwl9CisKKwkv KiBCZSB0aWR5LCBzbyB0aGF0IHRoZSBjYXRhbG9nIHJlcHJlc2VudGF0aW9uIGlzIGFsd2F5 cyBzb3J0ZWQgKi8KKwlxc29ydChhdHRhcnJheSwgbiwgc2l6ZW9mKEF0dHJOdW1iZXIpLCBj b21wYXJlX2ludDE2KTsKKworCSpuYXR0cyA9IG47CisJKmF0dHJzID0gYXR0YXJyYXk7CisK KwlibXNfZnJlZShzZXQpOworfQorCiAvKgogICogSW5zZXJ0IG5ldyBwdWJsaWNhdGlvbiAv IHNjaGVtYSBtYXBwaW5nLgogICovCkBAIC01MzksNiArNzE5LDgyIEBAIEdldFJlbGF0aW9u UHVibGljYXRpb25zKE9pZCByZWxpZCkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICog R2V0cyBhIGxpc3Qgb2YgT0lEcyBvZiBhbGwgcGFydGlhbC1jb2x1bW4gcHVibGljYXRpb25z IG9mIHRoZSBnaXZlbgorICogcmVsYXRpb24sIHRoYXQgaXMsIHRob3NlIHRoYXQgc3BlY2lm eSBhIGNvbHVtbiBsaXN0LgorICovCitMaXN0ICoKK0dldFJlbGF0aW9uQ29sdW1uUGFydGlh bFB1YmxpY2F0aW9ucyhPaWQgcmVsaWQpCit7CisJQ2F0Q0xpc3QgICAqcHVicmVsbGlzdDsK KwlMaXN0CSAgICpwdWJzID0gTklMOworCisJcHVicmVsbGlzdCA9IFNlYXJjaFN5c0NhY2hl TGlzdDEoUFVCTElDQVRJT05SRUxNQVAsCisJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShy ZWxpZCkpOworCWZvciAoaW50IGkgPSAwOyBpIDwgcHVicmVsbGlzdC0+bl9tZW1iZXJzOyBp KyspCisJeworCQlIZWFwVHVwbGUJdHVwID0gJnB1YnJlbGxpc3QtPm1lbWJlcnNbaV0tPnR1 cGxlOworCQlib29sCQlpc251bGw7CisJCUZvcm1fcGdfcHVibGljYXRpb25fcmVsCXB1YnJl bDsKKworCQkodm9pZCkgU3lzQ2FjaGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVMTUFQLCB0dXAs CisJCQkJCQkJICAgQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycywKKwkJCQkJCQkg ICAmaXNudWxsKTsKKworCQkvKiBubyBjb2x1bW4gbGlzdCBmb3IgdGhpcyBwdWJsaWNhdGlv bnMvcmVsYXRpb24gKi8KKwkJaWYgKGlzbnVsbCkKKwkJCWNvbnRpbnVlOworCisJCXB1YnJl bCA9IChGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbCkgR0VUU1RSVUNUKHR1cCk7CisKKwkJcHVi cyA9IGxhcHBlbmRfb2lkKHB1YnMsIHB1YnJlbC0+cHJwdWJpZCk7CisJfQorCisJUmVsZWFz ZVN5c0NhY2hlTGlzdChwdWJyZWxsaXN0KTsKKworCXJldHVybiBwdWJzOworfQorCisKKy8q CisgKiBGb3IgYSByZWxhdGlvbiBpbiBhIHB1YmxpY2F0aW9uIHRoYXQgaXMga25vd24gdG8g aGF2ZSBhIG5vbi1udWxsIGNvbHVtbgorICogbGlzdCwgcmV0dXJuIHRoZSBsaXN0IG9mIGF0 dHJpYnV0ZSBudW1iZXJzIHRoYXQgYXJlIGluIGl0LgorICovCitMaXN0ICoKK0dldFJlbGF0 aW9uQ29sdW1uTGlzdEluUHVibGljYXRpb24oT2lkIHJlbGlkLCBPaWQgcHViaWQpCit7CisJ SGVhcFR1cGxlCXR1cDsKKwlEYXR1bQkJYWRhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlBcnJh eVR5cGUgICphcnI7CisJaW50CQkJbmVsZW1zOworCWludDE2CSAgICplbGVtczsKKwlMaXN0 CSAgICphdHRub3MgPSBOSUw7CisKKwl0dXAgPSBTZWFyY2hTeXNDYWNoZTIoUFVCTElDQVRJ T05SRUxNQVAsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpLAorCQkJCQkJICBP YmplY3RJZEdldERhdHVtKHB1YmlkKSk7CisKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVw KSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHJlbCAldSBvZiBw dWJsaWNhdGlvbiAldSIsIHJlbGlkLCBwdWJpZCk7CisKKwlhZGF0dW0gPSBTeXNDYWNoZUdl dEF0dHIoUFVCTElDQVRJT05SRUxNQVAsIHR1cCwKKwkJCQkJCQkgQW51bV9wZ19wdWJsaWNh dGlvbl9yZWxfcHJhdHRycywgJmlzbnVsbCk7CisJaWYgKGlzbnVsbCkKKwkJZWxvZyhFUlJP UiwgImZvdW5kIHVuZXhwZWN0ZWQgbnVsbCBpbiBwZ19wdWJsaWNhdGlvbl9yZWwucHJhdHRy cyIpOworCisJYXJyID0gRGF0dW1HZXRBcnJheVR5cGVQKGFkYXR1bSk7CisJbmVsZW1zID0g QVJSX0RJTVMoYXJyKVswXTsKKwllbGVtcyA9IChpbnQxNiAqKSBBUlJfREFUQV9QVFIoYXJy KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJCWF0dG5vcyA9IGxh cHBlbmRfb2lkKGF0dG5vcywgZWxlbXNbaV0pOworCisJUmVsZWFzZVN5c0NhY2hlKHR1cCk7 CisKKwlyZXR1cm4gYXR0bm9zOworfQorCiAvKgogICogR2V0cyBsaXN0IG9mIHJlbGF0aW9u IG9pZHMgZm9yIGEgcHVibGljYXRpb24uCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJs aWNhdGlvbmNtZHMuYwppbmRleCAxYWFkMmU3NjljYi4uMGZiY2M2OTk0YjUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCisrKyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5jCkBAIC0yOTYsNyArMjk2LDcgQEAg Y29udGFpbl9pbnZhbGlkX3JmY29sdW1uX3dhbGtlcihOb2RlICpub2RlLCByZl9jb250ZXh0 ICpjb250ZXh0KQogICogUmV0dXJucyB0cnVlIGlmIGFueSBpbnZhbGlkIGNvbHVtbiBpcyBm b3VuZC4KICAqLwogYm9vbAotY29udGFpbl9pbnZhbGlkX3JmY29sdW1uKE9pZCBwdWJpZCwg UmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmFuY2VzdG9ycywKK3B1Yl9yZl9jb250YWluc19p bnZhbGlkX2NvbHVtbihPaWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICphbmNl c3RvcnMsCiAJCQkJCQkgYm9vbCBwdWJ2aWFyb290KQogewogCUhlYXBUdXBsZQlyZnR1cGxl OwpAQCAtMzY4LDYgKzM2OCwxMjMgQEAgY29udGFpbl9pbnZhbGlkX3JmY29sdW1uKE9pZCBw dWJpZCwgUmVsYXRpb24gcmVsYXRpb24sIExpc3QgKmFuY2VzdG9ycywKIAlyZXR1cm4gcmVz dWx0OwogfQogCisvKgorICogQ2hlY2sgaWYgYWxsIGNvbHVtbnMgcmVmZXJlbmNlZCBpbiB0 aGUgY29sdW1uIGxpc3QgYXJlIHBhcnQgb2YgdGhlCisgKiBSRVBMSUNBIElERU5USVRZIGlu ZGV4IG9yIG5vdC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYW55IGludmFsaWQgY29sdW1u IGlzIGZvdW5kLgorICovCitib29sCitwdWJfY29sbGlzdF9jb250YWluc19pbnZhbGlkX2Nv bHVtbihPaWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBMaXN0ICphbmNlc3RvcnMsCisJ CQkJCQkgYm9vbCBwdWJ2aWFyb290KQoreworCUhlYXBUdXBsZQl0dXBsZTsKKwlPaWQJCQly ZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCU9pZAkJCXB1Ymxpc2hfYXNf cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKwlib29sCQlyZXN1bHQgPSBm YWxzZTsKKwlEYXR1bQkJZGF0dW07CisJYm9vbAkJaXNudWxsOworCisJLyoKKwkgKiBGb3Ig YSBwYXJ0aXRpb24sIGlmIHB1YnZpYXJvb3QgaXMgdHJ1ZSwgZmluZCB0aGUgdG9wbW9zdCBh bmNlc3RvciB0aGF0CisJICogaXMgcHVibGlzaGVkIHZpYSB0aGlzIHB1YmxpY2F0aW9uIGFz IHdlIG5lZWQgdG8gdXNlIGl0cyBjb2x1bW4gbGlzdAorCSAqIGZvciB0aGUgY2hhbmdlcy4K KwkgKgorCSAqIE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGUgY29sdW1uIGxpc3QgdXNlZCBp cyBmb3IgYW4gYW5jZXN0b3IsIHRoZQorCSAqIFJFUExJQ0EgSURFTlRJVFkgdXNlZCB3aWxs IGJlIGZvciB0aGUgYWN0dWFsIGNoaWxkIHRhYmxlLgorCSAqLworCWlmIChwdWJ2aWFyb290 ICYmIHJlbGF0aW9uLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQorCXsKKwkJcHVibGlzaF9h c19yZWxpZCA9IEdldFRvcE1vc3RBbmNlc3RvckluUHVibGljYXRpb24ocHViaWQsIGFuY2Vz dG9ycywgTlVMTCk7CisKKwkJaWYgKCFPaWRJc1ZhbGlkKHB1Ymxpc2hfYXNfcmVsaWQpKQor CQkJcHVibGlzaF9hc19yZWxpZCA9IHJlbGlkOworCX0KKworCXR1cGxlID0gU2VhcmNoU3lz Q2FjaGUyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShw dWJsaXNoX2FzX3JlbGlkKSwKKwkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHViaWQpKTsK KworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisJCXJldHVybiBmYWxzZTsKKwor CWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVMTUFQLCB0dXBsZSwKKwkJ CQkJCQkgIEFudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMsCisJCQkJCQkJICAmaXNu dWxsKTsKKworCWlmICghaXNudWxsKQorCXsKKwkJaW50CXg7CisJCUJpdG1hcHNldCAgKmlk YXR0cnM7CisJCUJpdG1hcHNldCAgKmNvbHVtbnMgPSBOVUxMOworCisJCS8qIFdpdGggUkVQ TElDQSBJREVOVElUWSBGVUxMLCBubyBjb2x1bW4gbGlzdCBpcyBhbGxvd2VkLiAqLworCQlp ZiAocmVsYXRpb24tPnJkX3JlbC0+cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlf RlVMTCkKKwkJCXJlc3VsdCA9IHRydWU7CisKKwkJeworCQkJQXJyYXlUeXBlICAqYXJyOwor CQkJaW50CQkJbmVsZW1zOworCQkJaW50MTYJICAgKmVsZW1zOworCisJCQlhcnIgPSBEYXR1 bUdldEFycmF5VHlwZVAoZGF0dW0pOworCQkJbmVsZW1zID0gQVJSX0RJTVMoYXJyKVswXTsK KwkJCWVsZW1zID0gKGludDE2ICopIEFSUl9EQVRBX1BUUihhcnIpOworCisJCQkvKiBYWFgg aXMgdGhlcmUgYSBkYW5nZXIgb2YgbWVtb3J5IGxlYWsgaGVyZT8gYmV3YXJlICovCisJCQlm b3IgKGludCBpID0gMDsgaSA8IG5lbGVtczsgaSsrKQorCQkJCWNvbHVtbnMgPSBibXNfYWRk X21lbWJlcihjb2x1bW5zLCBlbGVtc1tpXSk7CisJCX0KKworCQkvKiBSZW1lbWJlciBjb2x1 bW5zIHRoYXQgYXJlIHBhcnQgb2YgdGhlIFJFUExJQ0EgSURFTlRJVFkgKi8KKwkJaWRhdHRy cyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKHJlbGF0aW9uLAorCQkJCQkJCQkJCQkg SU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlfS0VZKTsKKworCQkvKgorCQkgKiBBdHRudW1z IGluIHRoZSBiaXRtYXAgcmV0dXJuZWQgYnkgUmVsYXRpb25HZXRJbmRleEF0dHJCaXRtYXAg YXJlCisJCSAqIG9mZnNldCAodG8gaGFuZGxlIHN5c3RlbSBjb2x1bW5zIHRoZSB1c3VhbCB3 YXkpLCB3aGlsZSBjb2x1bW4gbGlzdAorCQkgKiBkb2VzIG5vdCB1c2Ugb2Zmc2V0LCBzbyB3 ZSBjYW4ndCBkbyBibXNfaXNfc3Vic2V0KCkuIEluc3RlYWQsIHdlIGhhdmUKKwkJICogdG8g bG9vcCBvdmVyIHRoZSBpZGF0dHJzIGFuZCBjaGVjayBhbGwgb2YgdGhlbSBhcmUgaW4gdGhl IGZpbHRlci4KKwkJICovCisJCXggPSAtMTsKKwkJd2hpbGUgKCh4ID0gYm1zX25leHRfbWVt YmVyKGlkYXR0cnMsIHgpKSA+PSAwKQorCQl7CisJCQlBdHRyTnVtYmVyCWF0dG51bSA9ICh4 ICsgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisKKwkJCS8qCisJCQkg KiBJZiBwdWJ2aWFyb290IGlzIHRydWUsIHdlIGFyZSB2YWxpZGF0aW5nIHRoZSByb3cgZmls dGVyIG9mIHRoZQorCQkJICogcGFyZW50IHRhYmxlLCBidXQgdGhlIGJpdG1hcCBjb250YWlu cyB0aGUgcmVwbGljYSBpZGVudGl0eQorCQkJICogaW5mb3JtYXRpb24gb2YgdGhlIGNoaWxk IHRhYmxlLiBTbywgZ2V0IHRoZSBjb2x1bW4gbnVtYmVyIG9mIHRoZQorCQkJICogY2hpbGQg dGFibGUgYXMgcGFyZW50IGFuZCBjaGlsZCBjb2x1bW4gb3JkZXIgY291bGQgYmUgZGlmZmVy ZW50LgorCQkJICovCisJCQlpZiAocHVidmlhcm9vdCkKKwkJCXsKKwkJCQkvKiBhdHRudW0g aXMgZm9yIGNoaWxkIHRhYmxlICovCisJCQkJY2hhciAgICpjb2xuYW1lID0gZ2V0X2F0dG5h bWUocmVsaWQsIGF0dG51bSwgZmFsc2UpOworCisJCQkJLyoKKwkJCQkgKiBEZXRlcm1pbmUg dGhlIG1hdGNoaW5nIGF0dG51bSBpbiBwYXJlbnQgKGJlY2F1c2UgdGhlIGNvbHVtbgorCQkJ CSAqIGZpbHRlciBpcyBkZWZpbmVkIG9uIHRoZSBwYXJlbnQpLgorCQkJCSAqLworCQkJCWF0 dG51bSA9IGdldF9hdHRudW0ocHVibGlzaF9hc19yZWxpZCwgY29sbmFtZSk7CisJCQl9CisK KwkJCWlmICghYm1zX2lzX21lbWJlcihhdHRudW0sIGNvbHVtbnMpKQorCQkJeworCQkJCXJl c3VsdCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlibXNfZnJlZShpZGF0 dHJzKTsKKwkJYm1zX2ZyZWUoY29sdW1ucyk7CisJfQorCisJUmVsZWFzZVN5c0NhY2hlKHR1 cGxlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKIC8qIGNoZWNrX2Z1bmN0aW9uc19pbl9u b2RlIGNhbGxiYWNrICovCiBzdGF0aWMgYm9vbAogY29udGFpbl9tdXRhYmxlX29yX3VzZXJf ZnVuY3Rpb25zX2NoZWNrZXIoT2lkIGZ1bmNfaWQsIHZvaWQgKmNvbnRleHQpCkBAIC02MDks NiArNzI2LDQ1IEBAIFRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhMaXN0ICp0YWJsZXMsIGNv bnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAogCX0KIH0KIAorCisvKgorICogVHJhbnNmb3JtIHRo ZSBwdWJsaWNhdGlvbiBjb2x1bW4gbGlzdHMgZXhwcmVzc2lvbiBmb3IgYWxsIHRoZSByZWxh dGlvbnMKKyAqIGluIHRoZSBsaXN0LgorICoKKyAqIFhYWCBUaGUgbmFtZSBpcyBhIGJpdCBt aXNsZWFkaW5nLCBiZWNhdXNlIHdlIGRvbid0IHJlYWxseSB0cmFuc2Zvcm0KKyAqIGFueXRo aW5nIGhlcmUgLSB3ZSBtZXJlbHkgY2hlY2sgdGhlIGNvbHVtbiBsaXN0IGlzIGNvbXBhdGli bGUgd2l0aCB0aGUKKyAqIGRlZmluaXRpb24gb2YgdGhlIHB1YmxpY2F0aW9uICh3aXRoIHB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290PWZhbHNlKQorICogd2Ugb25seSBhbGxvdyBjb2x1 bW4gbGlzdHMgb24gdGhlIGxlYWYgcmVsYXRpb25zLiBTbyBtYXliZSByZW5hbWUgaXQ/Cisg Ki8KK3N0YXRpYyB2b2lkCitUcmFuc2Zvcm1QdWJDb2x1bW5MaXN0KExpc3QgKnRhYmxlcywg Y29uc3QgY2hhciAqcXVlcnlTdHJpbmcsCisJCQkJCSAgIGJvb2wgcHVidmlhcm9vdCkKK3sK KwlMaXN0Q2VsbCAgICpsYzsKKworCWZvcmVhY2gobGMsIHRhYmxlcykKKwl7CisJCVB1Ymxp Y2F0aW9uUmVsSW5mbyAqcHJpID0gKFB1YmxpY2F0aW9uUmVsSW5mbyAqKSBsZmlyc3QobGMp OworCisJCWlmIChwcmktPmNvbHVtbnMgPT0gTklMKQorCQkJY29udGludWU7CisKKwkJLyoK KwkJICogSWYgdGhlIHB1YmxpY2F0aW9uIGRvZXNuJ3QgcHVibGlzaCBjaGFuZ2VzIHZpYSB0 aGUgcm9vdCBwYXJ0aXRpb25lZAorCQkgKiB0YWJsZSwgdGhlIHBhcnRpdGlvbidzIGNvbHVt biBsaXN0IHdpbGwgYmUgdXNlZC4gU28gZGlzYWxsb3cgdXNpbmcKKwkJICogdGhlIGNvbHVt biBsaXN0IG9uIHBhcnRpdGlvbmVkIHRhYmxlIGluIHRoaXMgY2FzZS4KKwkJICovCisJCWlm ICghcHVidmlhcm9vdCAmJgorCQkJcHJpLT5yZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1z ZygiY2Fubm90IHVzZSBwdWJsaWNhdGlvbiBjb2x1bW4gbGlzdCBmb3IgcmVsYXRpb24gXCIl c1wiIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShwcmktPnJlbGF0aW9uKSks CisJCQkJCSBlcnJkZXRhaWwoImNvbHVtbiBsaXN0IGNhbm5vdCBiZSB1c2VkIGZvciBhIHBh cnRpdGlvbmVkIHRhYmxlIHdoZW4gJXMgaXMgZmFsc2UuIiwKKwkJCQkJCQkgICAicHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QiKSkpOworCX0KK30KKwogLyoKICAqIENyZWF0ZSBuZXcg cHVibGljYXRpb24uCiAgKi8KQEAgLTcyNSw2ICs4ODEsOSBAQCBDcmVhdGVQdWJsaWNhdGlv bihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJ CVRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhyZWxzLCBwc3RhdGUtPnBfc291cmNldGV4dCwK IAkJCQkJCQkJCSBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7CiAKKwkJCVRyYW5zZm9y bVB1YkNvbHVtbkxpc3QocmVscywgcHN0YXRlLT5wX3NvdXJjZXRleHQsCisJCQkJCQkJCSAg IHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290KTsKKwogCQkJUHVibGljYXRpb25BZGRUYWJs ZXMocHVib2lkLCByZWxzLCB0cnVlLCBOVUxMKTsKIAkJCUNsb3NlVGFibGVMaXN0KHJlbHMp OwogCQl9CkBAIC03NTUsNiArOTE0LDUyIEBAIENyZWF0ZVB1YmxpY2F0aW9uKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10KQogCXJldHVybiBteXNl bGY7CiB9CiAKKy8qCisgKiBDaGFuZ2UgdGhlIGNvbHVtbiBsaXN0IG9mIGEgcmVsYXRpb24g aW4gYSBwdWJsaWNhdGlvbgorICovCitzdGF0aWMgdm9pZAorUHVibGljYXRpb25TZXRDb2x1 bW5zKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAorCQkJCQkgIEZvcm1fcGdfcHVibGlj YXRpb24gcHViZm9ybSwgUHVibGljYXRpb25UYWJsZSAqdGFibGUpCit7CisJUmVsYXRpb24J cmVsLAorCQkJCXVyZWw7CisJSGVhcFR1cGxlCXR1cDsKKwlPYmplY3RBZGRyZXNzIG9iaiwK KwkJCQlzZWNvbmRhcnk7CisKKwlyZWwgPSB0YWJsZV9vcGVuKFB1YmxpY2F0aW9uUmVsUmVs YXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisJdXJlbCA9IHRhYmxlX29wZW5ydih0YWJs ZS0+cmVsYXRpb24sIFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jayk7CisKKwl0dXAgPSBTZWFy Y2hTeXNDYWNoZTIoUFVCTElDQVRJT05SRUxNQVAsCisJCQkJCQkgIE9iamVjdElkR2V0RGF0 dW0oUmVsYXRpb25HZXRSZWxpZCh1cmVsKSksCisJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0o cHViZm9ybS0+b2lkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJZXJybXNnKCJyZWxhdGlvbiBcIiVzXCIgaXMgbm90IGFscmVhZHkg aW4gcHVibGljYXRpb24gXCIlc1wiIiwKKwkJCQkJICAgdGFibGUtPnJlbGF0aW9uLT5yZWxu YW1lLAorCQkJCQkgICBOYW1lU3RyKHB1YmZvcm0tPnB1Ym5hbWUpKSk7CisKKwlwdWJsaWNh dGlvbl9zZXRfdGFibGVfY29sdW1ucyhyZWwsIHR1cCwgdXJlbCwgdGFibGUtPmNvbHVtbnMp OworCisJT2JqZWN0QWRkcmVzc1NldChvYmosIFB1YmxpY2F0aW9uUmVsYXRpb25JZCwKKwkJ CQkJICgoRm9ybV9wZ19wdWJsaWNhdGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApKS0+b2lkKTsK KwlPYmplY3RBZGRyZXNzU2V0KHNlY29uZGFyeSwgUmVsYXRpb25SZWxhdGlvbklkLCBSZWxh dGlvbkdldFJlbGlkKHVyZWwpKTsKKwlFdmVudFRyaWdnZXJDb2xsZWN0U2ltcGxlQ29tbWFu ZChvYmosIHNlY29uZGFyeSwgKE5vZGUgKikgc3RtdCk7CisKKwlSZWxlYXNlU3lzQ2FjaGUo dHVwKTsKKworCS8qCisJICogSW52YWxpZGF0ZSByZWxjYWNoZSBmb3IgdGhpcyByZWxhdGlv biwgdG8gZm9yY2UgcmVidWlsZGluZyB0aGUKKwkgKiBwdWJsaWNhdGlvbiBkZXNjcmlwdGlv bi4KKwkgKi8KKwlDYWNoZUludmFsaWRhdGVSZWxjYWNoZSh1cmVsKTsKKworCXRhYmxlX2Ns b3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisJdGFibGVfY2xvc2UodXJlbCwgTm9Mb2Nr KTsKKworCUludm9rZU9iamVjdFBvc3RBbHRlckhvb2soUHVibGljYXRpb25SZWxhdGlvbklk LCBwdWJmb3JtLT5vaWQsIDApOworfQorCiAvKgogICogQ2hhbmdlIG9wdGlvbnMgb2YgYSBw dWJsaWNhdGlvbi4KICAqLwpAQCAtNzg0LDggKzk4OSw4IEBAIEFsdGVyUHVibGljYXRpb25P cHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQs CiAKIAkvKgogCSAqIElmIHRoZSBwdWJsaWNhdGlvbiBkb2Vzbid0IHB1Ymxpc2ggY2hhbmdl cyB2aWEgdGhlIHJvb3QgcGFydGl0aW9uZWQKLQkgKiB0YWJsZSwgdGhlIHBhcnRpdGlvbidz IHJvdyBmaWx0ZXIgd2lsbCBiZSB1c2VkLiBTbyBkaXNhbGxvdyB1c2luZyBXSEVSRQotCSAq IGNsYXVzZSBvbiBwYXJ0aXRpb25lZCB0YWJsZSBpbiB0aGlzIGNhc2UuCisJICogdGFibGUs IHRoZSBwYXJ0aXRpb24ncyByb3cgZmlsdGVyIGFuZCBjb2x1bW4gbGlzdCB3aWxsIGJlIHVz ZWQuIFNvIGRpc2FsbG93CisJICogdXNpbmcgV0hFUkUgY2xhdXNlIGFuZCBjb2x1bW4gbGlz dHMgb24gcGFydGl0aW9uZWQgdGFibGUgaW4gdGhpcyBjYXNlLgogCSAqLwogCWlmICghcHVi Zm9ybS0+cHViYWxsdGFibGVzICYmIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVu ICYmCiAJCSFwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCkKQEAgLTc5Myw3ICs5OTgsOCBA QCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVi bGljYXRpb25TdG10ICpzdG10LAogCQkvKgogCQkgKiBMb2NrIHRoZSBwdWJsaWNhdGlvbiBz byBub2JvZHkgZWxzZSBjYW4gZG8gYW55dGhpbmcgd2l0aCBpdC4gVGhpcwogCQkgKiBwcmV2 ZW50cyBjb25jdXJyZW50IGFsdGVyIHRvIGFkZCBwYXJ0aXRpb25lZCB0YWJsZShzKSB3aXRo IFdIRVJFCi0JCSAqIGNsYXVzZShzKSB3aGljaCB3ZSBkb24ndCBhbGxvdyB3aGVuIG5vdCBw dWJsaXNoaW5nIHZpYSByb290LgorCQkgKiBjbGF1c2UocykgYW5kL29yIGNvbHVtbiBsaXN0 cyB3aGljaCB3ZSBkb24ndCBhbGxvdyB3aGVuIG5vdAorCQkgKiBwdWJsaXNoaW5nIHZpYSBy b290LgogCQkgKi8KIAkJTG9ja0RhdGFiYXNlT2JqZWN0KFB1YmxpY2F0aW9uUmVsYXRpb25J ZCwgcHViZm9ybS0+b2lkLCAwLAogCQkJCQkJICAgQWNjZXNzU2hhcmVMb2NrKTsKQEAgLTgw NSwxMyArMTAxMSwyMSBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpw c3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCQl7CiAJCQlIZWFwVHVwbGUJ cmZ0dXBsZTsKIAkJCU9pZAkJCXJlbGlkID0gbGZpcnN0X29pZChsYyk7CisJCQlib29sCQlo YXNfY29sdW1uX2xpc3Q7CisJCQlib29sCQloYXNfcm93X2ZpbHRlcjsKIAogCQkJcmZ0dXBs ZSA9IFNlYXJjaFN5c0NhY2hlMihQVUJMSUNBVElPTlJFTE1BUCwKIAkJCQkJCQkJCSAgT2Jq ZWN0SWRHZXREYXR1bShyZWxpZCksCiAJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ocHVi Zm9ybS0+b2lkKSk7CiAKKwkJCWhhc19yb3dfZmlsdGVyCisJCQkJPSAhaGVhcF9hdHRpc251 bGwocmZ0dXBsZSwgQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJxdWFsLCBOVUxMKTsKKwor CQkJaGFzX2NvbHVtbl9saXN0CisJCQkJPSAhaGVhcF9hdHRpc251bGwocmZ0dXBsZSwgQW51 bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycywgTlVMTCk7CisKIAkJCWlmIChIZWFwVHVw bGVJc1ZhbGlkKHJmdHVwbGUpICYmCi0JCQkJIWhlYXBfYXR0aXNudWxsKHJmdHVwbGUsIEFu dW1fcGdfcHVibGljYXRpb25fcmVsX3BycXVhbCwgTlVMTCkpCisJCQkJKGhhc19yb3dfZmls dGVyIHx8IGhhc19jb2x1bW5fbGlzdCkpCiAJCQl7CiAJCQkJSGVhcFR1cGxlCXR1cGxlOwog CkBAIC04MjAsNyArMTAzNCw4IEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3Rh dGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCQkJewogCQkJCQlG b3JtX3BnX2NsYXNzIHJlbGZvcm0gPSAoRm9ybV9wZ19jbGFzcykgR0VUU1RSVUNUKHR1cGxl KTsKIAotCQkJCQlpZiAocmVsZm9ybS0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVE X1RBQkxFKQorCQkJCQlpZiAoKHJlbGZvcm0tPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJ T05FRF9UQUJMRSkgJiYKKwkJCQkJCWhhc19yb3dfZmlsdGVyKQogCQkJCQkJZXJlcG9ydChF UlJPUiwKIAkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxV RSksCiAJCQkJCQkJCSBlcnJtc2coImNhbm5vdCBzZXQgJXMgZm9yIHB1YmxpY2F0aW9uIFwi JXNcIiIsCkBAIC04MzEsNiArMTA0NiwxOCBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQ YXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCQkJCQkJ CQkJCSAgIE5hbWVTdHIocmVsZm9ybS0+cmVsbmFtZSksCiAJCQkJCQkJCQkJICAgInB1Ymxp c2hfdmlhX3BhcnRpdGlvbl9yb290IikpKTsKIAorCQkJCQlpZiAoKHJlbGZvcm0tPnJlbGtp bmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkgJiYKKwkJCQkJCWhhc19jb2x1bW5f bGlzdCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf SU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJCQkgZXJybXNnKCJjYW5ub3Qgc2V0 ICVzIGZvciBwdWJsaWNhdGlvbiBcIiVzXCIiLAorCQkJCQkJCQkJCSJwdWJsaXNoX3ZpYV9w YXJ0aXRpb25fcm9vdCA9IGZhbHNlIiwKKwkJCQkJCQkJCQlzdG10LT5wdWJuYW1lKSwKKwkJ CQkJCQkJIGVycmRldGFpbCgiVGhlIHB1YmxpY2F0aW9uIGNvbnRhaW5zIGEgY29sdW1uIGxp c3QgZm9yIGEgcGFydGl0aW9uZWQgdGFibGUgXCIlc1wiICIKKwkJCQkJCQkJCQkgICAid2hp Y2ggaXMgbm90IGFsbG93ZWQgd2hlbiAlcyBpcyBmYWxzZS4iLAorCQkJCQkJCQkJCSAgIE5h bWVTdHIocmVsZm9ybS0+cmVsbmFtZSksCisJCQkJCQkJCQkJICAgInB1Ymxpc2hfdmlhX3Bh cnRpdGlvbl9yb290IikpKTsKKwogCQkJCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOwogCQkJ CX0KIApAQCAtODM5LDYgKzEwNjYsMTYgQEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFy c2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAkJfQogCX0K IAorCS8qCisJICogRklYTUUgY2hlY2sgcHViYWN0aW9ucyB2cy4gcmVwbGljYSBpZGVudGl0 eSwgdG8gZW5zdXJlIHRoZSByZXBsaWNhCisJICogaWRlbnRpdHkgaXMgaW5jbHVkZWQgaW4g dGhlIGNvbHVtbiBsaXN0LiBPbmx5IGRvIHRoaXMgZm9yIHVwZGF0ZQorCSAqIGFuZCBkZWxl dGUgcHVibGljYXRpb25zLiBTZWUgY2hlY2tfcHVibGljYXRpb25fY29sdW1ucy4KKwkgKgor CSAqIFhYWCBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290IG1heSBjaGFuZ2UsCisJICogaW4gd2hpY2ggY2FzZSB0aGUgcm93IGZpbHRlcnMgbWF5 IGJlIGludmFsaWQgKGUuZy4gd2l0aCBwdnByPWZhbHNlCisJICogdGhlcmUgbXVzdCBiZSBu byBmaWx0ZXIgb24gcGFydGl0aW9uZWQgdGFibGVzKS4KKwkgKi8KKwogCS8qIEV2ZXJ5dGhp bmcgb2ssIGZvcm0gYSBuZXcgdHVwbGUuICovCiAJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9m KHZhbHVlcykpOwogCW1lbXNldChudWxscywgZmFsc2UsIHNpemVvZihudWxscykpOwpAQCAt OTc2LDEwICsxMjEzLDIwIEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJsaWNh dGlvblN0bXQgKnN0bXQsIEhlYXBUdXBsZSB0dXAsCiAKIAkJVHJhbnNmb3JtUHViV2hlcmVD bGF1c2VzKHJlbHMsIHF1ZXJ5U3RyaW5nLCBwdWJmb3JtLT5wdWJ2aWFyb290KTsKIAorCQlU cmFuc2Zvcm1QdWJDb2x1bW5MaXN0KHJlbHMsIHF1ZXJ5U3RyaW5nLCBwdWJmb3JtLT5wdWJ2 aWFyb290KTsKKwogCQlQdWJsaWNhdGlvbkFkZFRhYmxlcyhwdWJpZCwgcmVscywgZmFsc2Us IHN0bXQpOwogCX0KIAllbHNlIGlmIChzdG10LT5hY3Rpb24gPT0gQVBfRHJvcE9iamVjdHMp CiAJCVB1YmxpY2F0aW9uRHJvcFRhYmxlcyhwdWJpZCwgcmVscywgZmFsc2UpOworCWVsc2Ug aWYgKHN0bXQtPmFjdGlvbiA9PSBBUF9TZXRDb2x1bW5zKQorCXsKKwkJQXNzZXJ0KHNjaGVt YWlkbGlzdCA9PSBOSUwpOworCQlBc3NlcnQobGlzdF9sZW5ndGgodGFibGVzKSA9PSAxKTsK KworCQlQdWJsaWNhdGlvblNldENvbHVtbnMoc3RtdCwgcHViZm9ybSwKKwkJCQkJCQkgIGxp bml0aWFsX25vZGUoUHVibGljYXRpb25UYWJsZSwgdGFibGVzKSk7CisJfQogCWVsc2UJCQkJ CQkvKiBBUF9TZXRPYmplY3RzICovCiAJewogCQlMaXN0CSAgICpvbGRyZWxpZHMgPSBHZXRQ dWJsaWNhdGlvblJlbGF0aW9ucyhwdWJpZCwKQEAgLTk5Miw2ICsxMjM5LDggQEAgQWx0ZXJQ dWJsaWNhdGlvblRhYmxlcyhBbHRlclB1YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxl IHR1cCwKIAogCQlUcmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMocmVscywgcXVlcnlTdHJpbmcs IHB1YmZvcm0tPnB1YnZpYXJvb3QpOwogCisJCVRyYW5zZm9ybVB1YkNvbHVtbkxpc3QocmVs cywgcXVlcnlTdHJpbmcsIHB1YmZvcm0tPnB1YnZpYXJvb3QpOworCiAJCS8qCiAJCSAqIFRv IHJlY3JlYXRlIHRoZSByZWxhdGlvbiBsaXN0IGZvciB0aGUgcHVibGljYXRpb24sIGxvb2sg Zm9yCiAJCSAqIGV4aXN0aW5nIHJlbGF0aW9ucyB0aGF0IGRvIG5vdCBuZWVkIHRvIGJlIGRy b3BwZWQuCkBAIC0xMDAzLDMyICsxMjUyLDg1IEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMo QWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsIEhlYXBUdXBsZSB0dXAsCiAJCQlQdWJsaWNh dGlvblJlbEluZm8gKm9sZHJlbDsKIAkJCWJvb2wJCWZvdW5kID0gZmFsc2U7CiAJCQlIZWFw VHVwbGUJcmZ0dXBsZTsKLQkJCWJvb2wJCXJmaXNudWxsID0gdHJ1ZTsKIAkJCU5vZGUJICAg Km9sZHJlbHdoZXJlY2xhdXNlID0gTlVMTDsKKwkJCUJpdG1hcHNldCAgKm9sZGNvbHVtbnMg PSBOVUxMOwogCiAJCQkvKiBsb29rIHVwIHRoZSBjYWNoZSBmb3IgdGhlIG9sZCByZWxtYXAg Ki8KIAkJCXJmdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTIoUFVCTElDQVRJT05SRUxNQVAsCiAJ CQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0ob2xkcmVsaWQpLAogCQkJCQkJCQkJICBPYmpl Y3RJZEdldERhdHVtKHB1YmlkKSk7CiAKKwkJCS8qCisJCQkgKiBTZWUgaWYgdGhlIGV4aXN0 aW5nIHJlbGF0aW9uIGN1cnJlbnRseSBoYXMgYSBXSEVSRSBjbGF1c2Ugb3IgYQorCQkJICog Y29sdW1uIGxpc3QuIFdlIG5lZWQgdG8gY29tcGFyZSB0aG9zZSB0b28uCisJCQkgKi8KIAkJ CWlmIChIZWFwVHVwbGVJc1ZhbGlkKHJmdHVwbGUpKQogCQkJeworCQkJCWJvb2wJCWlzbnVs bCA9IHRydWU7CiAJCQkJRGF0dW0JCXdoZXJlQ2xhdXNlRGF0dW07CisJCQkJRGF0dW0JCWNv bHVtbkxpc3REYXR1bTsKIAorCQkJCS8qIExvYWQgdGhlIFdIRVJFIGNsYXVzZSBmb3IgdGhp cyB0YWJsZS4gKi8KIAkJCQl3aGVyZUNsYXVzZURhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBV QkxJQ0FUSU9OUkVMTUFQLCByZnR1cGxlLAogCQkJCQkJCQkJCQkJICAgQW51bV9wZ19wdWJs aWNhdGlvbl9yZWxfcHJxdWFsLAotCQkJCQkJCQkJCQkJICAgJnJmaXNudWxsKTsKLQkJCQlp ZiAoIXJmaXNudWxsKQorCQkJCQkJCQkJCQkJICAgJmlzbnVsbCk7CisJCQkJaWYgKCFpc251 bGwpCiAJCQkJCW9sZHJlbHdoZXJlY2xhdXNlID0gc3RyaW5nVG9Ob2RlKFRleHREYXR1bUdl dENTdHJpbmcod2hlcmVDbGF1c2VEYXR1bSkpOwogCisJCQkJLyogVHJhbnNmb3JtIHRoZSBp bnQydmVjdG9yIGNvbHVtbiBsaXN0IHRvIGEgYml0bWFwLiAqLworCQkJCWNvbHVtbkxpc3RE YXR1bSA9IFN5c0NhY2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgcmZ0dXBsZSwKKwkJ CQkJCQkJCQkJCSAgIEFudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMsCisJCQkJCQkJ CQkJCQkgICAmaXNudWxsKTsKKworCQkJCS8qCisJCQkJICogWFhYIE1heWJlIG1ha2UgdGhp cyBhIHNlcGFyYXRlIGZ1bmN0aW9uLiBXZSBkbyB0aGlzIG9uCisJCQkJICogbXVsdGlwbGUg cGxhY2VzLgorCQkJCSAqLworCQkJCWlmICghaXNudWxsKQorCQkJCXsKKwkJCQkJQXJyYXlU eXBlICAqYXJyOworCQkJCQlpbnQJCQluZWxlbXM7CisJCQkJCWludDE2CSAgICplbGVtczsK KworCQkJCQlhcnIgPSBEYXR1bUdldEFycmF5VHlwZVAoY29sdW1uTGlzdERhdHVtKTsKKwkJ CQkJbmVsZW1zID0gQVJSX0RJTVMoYXJyKVswXTsKKwkJCQkJZWxlbXMgPSAoaW50MTYgKikg QVJSX0RBVEFfUFRSKGFycik7CisKKwkJCQkJLyogWFhYIGlzIHRoZXJlIGEgZGFuZ2VyIG9m IG1lbW9yeSBsZWFrIGhlcmU/IGJld2FyZSAqLworCQkJCQlmb3IgKGludCBpID0gMDsgaSA8 IG5lbGVtczsgaSsrKQorCQkJCQkJb2xkY29sdW1ucyA9IGJtc19hZGRfbWVtYmVyKG9sZGNv bHVtbnMsIGVsZW1zW2ldKTsKKwkJCQl9CisKIAkJCQlSZWxlYXNlU3lzQ2FjaGUocmZ0dXBs ZSk7CiAJCQl9CiAKIAkJCWZvcmVhY2gobmV3bGMsIHJlbHMpCiAJCQl7CiAJCQkJUHVibGlj YXRpb25SZWxJbmZvICpuZXdwdWJyZWw7CisJCQkJT2lkCQkJCQluZXdyZWxpZDsKKwkJCQlC aXRtYXBzZXQJCSAgICpuZXdjb2x1bW5zID0gTlVMTDsKIAogCQkJCW5ld3B1YnJlbCA9IChQ dWJsaWNhdGlvblJlbEluZm8gKikgbGZpcnN0KG5ld2xjKTsKKwkJCQluZXdyZWxpZCA9IFJl bGF0aW9uR2V0UmVsaWQobmV3cHVicmVsLT5yZWxhdGlvbik7CisKKwkJCQkvKgorCQkJCSAq IElmIHRoZSBuZXcgcHVibGljYXRpb24gaGFzIGNvbHVtbiBsaXN0LCB0cmFuc2Zvcm0gaXQg dG8KKwkJCQkgKiBhIGJpdG1hcCB0b28uCisJCQkJICovCisJCQkJaWYgKG5ld3B1YnJlbC0+ Y29sdW1ucykKKwkJCQl7CisJCQkJCUxpc3RDZWxsICAgKmxjOworCisJCQkJCWZvcmVhY2go bGMsIG5ld3B1YnJlbC0+Y29sdW1ucykKKwkJCQkJeworCQkJCQkJY2hhcgkgICAqY29sbmFt ZSA9IHN0clZhbChsZmlyc3QobGMpKTsKKwkJCQkJCUF0dHJOdW1iZXIJYXR0bnVtID0gZ2V0 X2F0dG51bShuZXdyZWxpZCwgY29sbmFtZSk7CisKKwkJCQkJCS8qIG5vIGNoZWNrcyBuZWVk ZWQgaGVyZSwgdGhhdCBoYXBwZW5zIGVsc2V3aGVyZSAqLworCisJCQkJCQluZXdjb2x1bW5z ID0gYm1zX2FkZF9tZW1iZXIobmV3Y29sdW1ucywgYXR0bnVtKTsKKwkJCQkJfQorCQkJCX0K IAogCQkJCS8qCiAJCQkJICogQ2hlY2sgaWYgYW55IG9mIHRoZSBuZXcgc2V0IG9mIHJlbGF0 aW9ucyBtYXRjaGVzIHdpdGggdGhlCkBAIC0xMDM4LDcgKzEzNDAsOCBAQCBBbHRlclB1Ymxp Y2F0aW9uVGFibGVzKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBIZWFwVHVwbGUgdHVw LAogCQkJCSAqLwogCQkJCWlmIChSZWxhdGlvbkdldFJlbGlkKG5ld3B1YnJlbC0+cmVsYXRp b24pID09IG9sZHJlbGlkKQogCQkJCXsKLQkJCQkJaWYgKGVxdWFsKG9sZHJlbHdoZXJlY2xh dXNlLCBuZXdwdWJyZWwtPndoZXJlQ2xhdXNlKSkKKwkJCQkJaWYgKGVxdWFsKG9sZHJlbHdo ZXJlY2xhdXNlLCBuZXdwdWJyZWwtPndoZXJlQ2xhdXNlKSAmJgorCQkJCQkJYm1zX2VxdWFs KG9sZGNvbHVtbnMsIG5ld2NvbHVtbnMpKQogCQkJCQl7CiAJCQkJCQlmb3VuZCA9IHRydWU7 CiAJCQkJCQlicmVhazsKQEAgLTEwNTcsNiArMTM2MCw3IEBAIEFsdGVyUHVibGljYXRpb25U YWJsZXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsIEhlYXBUdXBsZSB0dXAsCiAJCQl7 CiAJCQkJb2xkcmVsID0gcGFsbG9jKHNpemVvZihQdWJsaWNhdGlvblJlbEluZm8pKTsKIAkJ CQlvbGRyZWwtPndoZXJlQ2xhdXNlID0gTlVMTDsKKwkJCQlvbGRyZWwtPmNvbHVtbnMgPSBO SUw7CiAJCQkJb2xkcmVsLT5yZWxhdGlvbiA9IHRhYmxlX29wZW4ob2xkcmVsaWQsCiAJCQkJ CQkJCQkJCSAgU2hhcmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKIAkJCQlkZWxyZWxzID0gbGFw cGVuZChkZWxyZWxzLCBvbGRyZWwpOwpAQCAtMTExOCw3ICsxNDIyLDcgQEAgQWx0ZXJQdWJs aWNhdGlvblNjaGVtYXMoQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJfQogCWVsc2Ug aWYgKHN0bXQtPmFjdGlvbiA9PSBBUF9Ecm9wT2JqZWN0cykKIAkJUHVibGljYXRpb25Ecm9w U2NoZW1hcyhwdWJmb3JtLT5vaWQsIHNjaGVtYWlkbGlzdCwgZmFsc2UpOwotCWVsc2UJCQkJ CQkvKiBBUF9TZXRPYmplY3RzICovCisJZWxzZSBpZiAoc3RtdC0+YWN0aW9uID09IEFQX1Nl dE9iamVjdHMpCiAJewogCQlMaXN0CSAgICpvbGRzY2hlbWFpZHMgPSBHZXRQdWJsaWNhdGlv blNjaGVtYXMocHViZm9ybS0+b2lkKTsKIAkJTGlzdAkgICAqZGVsc2NoZW1hcyA9IE5JTDsK QEAgLTExNDEsNiArMTQ0NSwxMCBAQCBBbHRlclB1YmxpY2F0aW9uU2NoZW1hcyhBbHRlclB1 YmxpY2F0aW9uU3RtdCAqc3RtdCwKIAkJICovCiAJCVB1YmxpY2F0aW9uQWRkU2NoZW1hcyhw dWJmb3JtLT5vaWQsIHNjaGVtYWlkbGlzdCwgdHJ1ZSwgc3RtdCk7CiAJfQorCWVsc2UKKwl7 CisJCS8qIE5vdGhpbmcgdG8gZG8gZm9yIEFQX1NldENvbHVtbnMgKi8KKwl9CiB9CiAKIC8q CkBAIC0xNDAzLDYgKzE3MTEsNyBAQCBPcGVuVGFibGVMaXN0KExpc3QgKnRhYmxlcykKIAlM aXN0CSAgICpyZWxzID0gTklMOwogCUxpc3RDZWxsICAgKmxjOwogCUxpc3QJICAgKnJlbGlk c193aXRoX3JmID0gTklMOworCUxpc3QJICAgKnJlbGlkc193aXRoX2NvbGxpc3QgPSBOSUw7 CiAKIAkvKgogCSAqIE9wZW4sIHNoYXJlLWxvY2ssIGFuZCBjaGVjayBhbGwgdGhlIGV4cGxp Y2l0bHktc3BlY2lmaWVkIHJlbGF0aW9ucwpAQCAtMTQzNyw2ICsxNzQ2LDEzIEBAIE9wZW5U YWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQkJCQkJIGVycm1zZygiY29uZmxpY3Rpbmcgb3Ig cmVkdW5kYW50IFdIRVJFIGNsYXVzZXMgZm9yIHRhYmxlIFwiJXNcIiIsCiAJCQkJCQkJCVJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CiAKKwkJCS8qIERpc2FsbG93IGR1cGxp Y2F0ZSB0YWJsZXMgaWYgdGhlcmUgYXJlIGFueSB3aXRoIGNvbHVtbiBsaXN0cy4gKi8KKwkJ CWlmICh0LT5jb2x1bW5zIHx8IGxpc3RfbWVtYmVyX29pZChyZWxpZHNfd2l0aF9jb2xsaXN0 LCBteXJlbGlkKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9EVVBMSUNBVEVfT0JKRUNUKSwKKwkJCQkJCSBlcnJtc2coImNvbmZsaWN0aW5nIG9yIHJl ZHVuZGFudCBjb2x1bW4gbGlzdHMgZm9yIHRhYmxlIFwiJXNcIiIsCisJCQkJCQkJCVJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CisKIAkJCXRhYmxlX2Nsb3NlKHJlbCwgU2hh cmVVcGRhdGVFeGNsdXNpdmVMb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xNDQ0LDEy ICsxNzYwLDE2IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQlwdWJfcmVsID0g cGFsbG9jKHNpemVvZihQdWJsaWNhdGlvblJlbEluZm8pKTsKIAkJcHViX3JlbC0+cmVsYXRp b24gPSByZWw7CiAJCXB1Yl9yZWwtPndoZXJlQ2xhdXNlID0gdC0+d2hlcmVDbGF1c2U7CisJ CXB1Yl9yZWwtPmNvbHVtbnMgPSB0LT5jb2x1bW5zOwogCQlyZWxzID0gbGFwcGVuZChyZWxz LCBwdWJfcmVsKTsKIAkJcmVsaWRzID0gbGFwcGVuZF9vaWQocmVsaWRzLCBteXJlbGlkKTsK IAogCQlpZiAodC0+d2hlcmVDbGF1c2UpCiAJCQlyZWxpZHNfd2l0aF9yZiA9IGxhcHBlbmRf b2lkKHJlbGlkc193aXRoX3JmLCBteXJlbGlkKTsKIAorCQlpZiAodC0+Y29sdW1ucykKKwkJ CXJlbGlkc193aXRoX2NvbGxpc3QgPSBsYXBwZW5kX29pZChyZWxpZHNfd2l0aF9jb2xsaXN0 LCBteXJlbGlkKTsKKwogCQkvKgogCQkgKiBBZGQgY2hpbGRyZW4gb2YgdGhpcyByZWwsIGlm IHJlcXVlc3RlZCwgc28gdGhhdCB0aGV5IHRvbyBhcmUgYWRkZWQKIAkJICogdG8gdGhlIHB1 YmxpY2F0aW9uLiAgQSBwYXJ0aXRpb25lZCB0YWJsZSBjYW4ndCBoYXZlIGFueSBpbmhlcml0 YW5jZQpAQCAtMTQ4OSw2ICsxODA5LDE4IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVz KQogCQkJCQkJCQkgZXJybXNnKCJjb25mbGljdGluZyBvciByZWR1bmRhbnQgV0hFUkUgY2xh dXNlcyBmb3IgdGFibGUgXCIlc1wiIiwKIAkJCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKSkpOwogCisJCQkJCS8qCisJCQkJCSAqIFdlIGRvbid0IGFsbG93IHRvIHNw ZWNpZnkgY29sdW1uIGxpc3QgZm9yIGJvdGggcGFyZW50CisJCQkJCSAqIGFuZCBjaGlsZCB0 YWJsZSBhdCB0aGUgc2FtZSB0aW1lIGFzIGl0IGlzIG5vdCB2ZXJ5CisJCQkJCSAqIGNsZWFy IHdoaWNoIG9uZSBzaG91bGQgYmUgZ2l2ZW4gcHJlZmVyZW5jZS4KKwkJCQkJICovCisJCQkJ CWlmIChjaGlsZHJlbGlkICE9IG15cmVsaWQgJiYKKwkJCQkJCSh0LT5jb2x1bW5zIHx8IGxp c3RfbWVtYmVyX29pZChyZWxpZHNfd2l0aF9jb2xsaXN0LCBjaGlsZHJlbGlkKSkpCisJCQkJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RVUExJQ0FURV9P QkpFQ1QpLAorCQkJCQkJCQkgZXJybXNnKCJjb25mbGljdGluZyBvciByZWR1bmRhbnQgY29s dW1uIGxpc3RzIGZvciB0YWJsZSBcIiVzXCIiLAorCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKHJlbCkpKSk7CisKIAkJCQkJY29udGludWU7CiAJCQkJfQogCkBAIC0xNDk4 LDExICsxODMwLDE2IEBAIE9wZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCQkJCXB1Yl9y ZWwtPnJlbGF0aW9uID0gcmVsOwogCQkJCS8qIGNoaWxkIGluaGVyaXRzIFdIRVJFIGNsYXVz ZSBmcm9tIHBhcmVudCAqLwogCQkJCXB1Yl9yZWwtPndoZXJlQ2xhdXNlID0gdC0+d2hlcmVD bGF1c2U7CisJCQkJLyogY2hpbGQgaW5oZXJpdHMgY29sdW1uIGxpc3QgZnJvbSBwYXJlbnQg Ki8KKwkJCQlwdWJfcmVsLT5jb2x1bW5zID0gdC0+Y29sdW1uczsKIAkJCQlyZWxzID0gbGFw cGVuZChyZWxzLCBwdWJfcmVsKTsKIAkJCQlyZWxpZHMgPSBsYXBwZW5kX29pZChyZWxpZHMs IGNoaWxkcmVsaWQpOwogCiAJCQkJaWYgKHQtPndoZXJlQ2xhdXNlKQogCQkJCQlyZWxpZHNf d2l0aF9yZiA9IGxhcHBlbmRfb2lkKHJlbGlkc193aXRoX3JmLCBjaGlsZHJlbGlkKTsKKwor CQkJCWlmICh0LT5jb2x1bW5zKQorCQkJCQlyZWxpZHNfd2l0aF9jb2xsaXN0ID0gbGFwcGVu ZF9vaWQocmVsaWRzX3dpdGhfY29sbGlzdCwgY2hpbGRyZWxpZCk7CiAJCQl9CiAJCX0KIAl9 CkBAIC0xNjExLDYgKzE5NDgsMTEgQEAgUHVibGljYXRpb25Ecm9wVGFibGVzKE9pZCBwdWJp ZCwgTGlzdCAqcmVscywgYm9vbCBtaXNzaW5nX29rKQogCQlSZWxhdGlvbglyZWwgPSBwdWJy ZWwtPnJlbGF0aW9uOwogCQlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsK IAorCQlpZiAocHVicmVsLT5jb2x1bW5zKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJy Y29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCWVycm1zZygiY29sdW1uIGxpc3Qg bXVzdCBub3QgYmUgc3BlY2lmaWVkIGluIEFMVEVSIFBVQkxJQ0FUSU9OIC4uLiBEUk9QIikp OworCiAJCXByaWQgPSBHZXRTeXNDYWNoZU9pZDIoUFVCTElDQVRJT05SRUxNQVAsIEFudW1f cGdfcHVibGljYXRpb25fcmVsX29pZCwKIAkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHJl bGlkKSwKIAkJCQkJCQkgICBPYmplY3RJZEdldERhdHVtKHB1YmlkKSk7CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL3RhYmxlY21kcy5jCmluZGV4IGRjNTg3MmY5ODhjLi5hOWZkMGYwYzg5NSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdGFibGVjbWRzLmMKQEAgLTgzNjUsNiArODM2NSw3IEBAIEFURXhlY0Ry b3BDb2x1bW4oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICpjb2xO YW1lLAogCQkJCSBib29sIG1pc3Npbmdfb2ssIExPQ0tNT0RFIGxvY2ttb2RlLAogCQkJCSBP YmplY3RBZGRyZXNzZXMgKmFkZHJzKQogeworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRS ZWxpZChyZWwpOwogCUhlYXBUdXBsZQl0dXBsZTsKIAlGb3JtX3BnX2F0dHJpYnV0ZSB0YXJn ZXRhdHQ7CiAJQXR0ck51bWJlcglhdHRudW07CkBAIC04Mzg0LDcgKzgzODUsNyBAQCBBVEV4 ZWNEcm9wQ29sdW1uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAq Y29sTmFtZSwKIAkvKgogCSAqIGdldCB0aGUgbnVtYmVyIG9mIHRoZSBhdHRyaWJ1dGUKIAkg Ki8KLQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShSZWxhdGlvbkdldFJlbGlkKHJl bCksIGNvbE5hbWUpOworCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVBdHROYW1lKHJlbGlkLCBj b2xOYW1lKTsKIAlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUpKQogCXsKIAkJaWYgKCFt aXNzaW5nX29rKQpAQCAtODQzOCwxMyArODQzOSw0MiBAQCBBVEV4ZWNEcm9wQ29sdW1uKExp c3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwKIAogCVJl bGVhc2VTeXNDYWNoZSh0dXBsZSk7CiAKKwkvKgorCSAqIEFsc28sIGlmIHRoZSBjb2x1bW4g aXMgdXNlZCBpbiB0aGUgY29sdW1uIGxpc3Qgb2YgYSBwdWJsaWNhdGlvbiwKKwkgKiBkaXNh bGxvdyB0aGUgZHJvcCBpZiB0aGUgRFJPUCBpcyBSRVNUUklDVC4gIFdlIGRvbid0IGRvIGFu eXRoaW5nIGlmIHRoZQorCSAqIERST1AgaXMgQ0FTQ0FERSwgd2hpY2ggbWVhbnMgdGhhdCB0 aGUgZGVwZW5kZW5jeSBtZWNoYW5pc20gd2lsbCByZW1vdmUKKwkgKiB0aGUgcmVsYXRpb24g ZnJvbSB0aGUgcHVibGljYXRpb24uCisJICovCisJaWYgKGJlaGF2aW9yID09IERST1BfUkVT VFJJQ1QpCisJeworCQlMaXN0CSAgICpwdWJzOworCQlMaXN0Q2VsbCAgICpsYzsKKworCQlw dWJzID0gR2V0UmVsYXRpb25Db2x1bW5QYXJ0aWFsUHVibGljYXRpb25zKHJlbGlkKTsKKwkJ Zm9yZWFjaChsYywgcHVicykKKwkJeworCQkJT2lkCQkJcHViaWQgPSBsZmlyc3Rfb2lkKGxj KTsKKwkJCUxpc3QJICAgKnB1Ymxpc2hlZF9jb2xzOworCisJCQlwdWJsaXNoZWRfY29scyA9 CisJCQkJR2V0UmVsYXRpb25Db2x1bW5MaXN0SW5QdWJsaWNhdGlvbihyZWxpZCwgcHViaWQp OworCisJCQlpZiAobGlzdF9tZW1iZXJfb2lkKHB1Ymxpc2hlZF9jb2xzLCBhdHRudW0pKQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQllcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9UQUJM RV9ERUZJTklUSU9OKSwKKwkJCQkJCWVycm1zZygiY2Fubm90IGRyb3AgY29sdW1uIFwiJXNc IiBiZWNhdXNlIGl0IGlzIHBhcnQgb2YgcHVibGljYXRpb24gXCIlc1wiIiwKKwkJCQkJCQkg ICBjb2xOYW1lLCBnZXRfcHVibGljYXRpb25fbmFtZShwdWJpZCwgZmFsc2UpKSwKKwkJCQkJ CWVycmhpbnQoIlNwZWNpZnkgQ0FTQ0FERSBvciB1c2UgQUxURVIgUFVCTElDQVRJT04gdG8g cmVtb3ZlIHRoZSBjb2x1bW4gZnJvbSB0aGUgcHVibGljYXRpb24uIikpOworCQl9CisJfQor CiAJLyoKIAkgKiBQcm9wYWdhdGUgdG8gY2hpbGRyZW4gYXMgYXBwcm9wcmlhdGUuICBVbmxp a2UgbW9zdCBvdGhlciBBTFRFUgogCSAqIHJvdXRpbmVzLCB3ZSBoYXZlIHRvIGRvIHRoaXMg b25lIGxldmVsIG9mIHJlY3Vyc2lvbiBhdCBhIHRpbWU7IHdlIGNhbid0CiAJICogdXNlIGZp bmRfYWxsX2luaGVyaXRvcnMgdG8gZG8gaXQgaW4gb25lIHBhc3MuCiAJICovCiAJY2hpbGRy ZW4gPQotCQlmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKFJlbGF0aW9uR2V0UmVsaWQocmVs KSwgbG9ja21vZGUpOworCQlmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKHJlbGlkLCBsb2Nr bW9kZSk7CiAKIAlpZiAoY2hpbGRyZW4pCiAJewpAQCAtODUzMiw3ICs4NTYyLDcgQEAgQVRF eGVjRHJvcENvbHVtbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIg KmNvbE5hbWUsCiAKIAkvKiBBZGQgb2JqZWN0IHRvIGRlbGV0ZSAqLwogCW9iamVjdC5jbGFz c0lkID0gUmVsYXRpb25SZWxhdGlvbklkOwotCW9iamVjdC5vYmplY3RJZCA9IFJlbGF0aW9u R2V0UmVsaWQocmVsKTsKKwlvYmplY3Qub2JqZWN0SWQgPSByZWxpZDsKIAlvYmplY3Qub2Jq ZWN0U3ViSWQgPSBhdHRudW07CiAJYWRkX2V4YWN0X29iamVjdF9hZGRyZXNzKCZvYmplY3Qs IGFkZHJzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYwppbmRl eCAwOWY3OGYyMjQ0MS4uM2UyODJlZDk5YWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNSZXBsaWNhdGlvbi5jCkBAIC01NzMsOSArNTczLDYgQEAgQ2hlY2tDbWRSZXBsaWNhSWRl bnRpdHkoUmVsYXRpb24gcmVsLCBDbWRUeXBlIGNtZCkKIAlpZiAoY21kICE9IENNRF9VUERB VEUgJiYgY21kICE9IENNRF9ERUxFVEUpCiAJCXJldHVybjsKIAotCWlmIChyZWwtPnJkX3Jl bC0+cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfRlVMTCkKLQkJcmV0dXJuOwot CiAJLyoKIAkgKiBJdCBpcyBvbmx5IHNhZmUgdG8gZXhlY3V0ZSBVUERBVEUvREVMRVRFIHdo ZW4gYWxsIGNvbHVtbnMsIHJlZmVyZW5jZWQKIAkgKiBpbiB0aGUgcm93IGZpbHRlcnMgZnJv bSBwdWJsaWNhdGlvbnMgd2hpY2ggdGhlIHJlbGF0aW9uIGlzIGluLCBhcmUKQEAgLTU5NSwx NyArNTkyLDMzIEBAIENoZWNrQ21kUmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbCwgQ21k VHlwZSBjbWQpCiAJCQkJIGVycm1zZygiY2Fubm90IHVwZGF0ZSB0YWJsZSBcIiVzXCIiLAog CQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSksCiAJCQkJIGVycmRldGFpbCgi Q29sdW1uIHVzZWQgaW4gdGhlIHB1YmxpY2F0aW9uIFdIRVJFIGV4cHJlc3Npb24gaXMgbm90 IHBhcnQgb2YgdGhlIHJlcGxpY2EgaWRlbnRpdHkuIikpKTsKKwllbHNlIGlmIChjbWQgPT0g Q01EX1VQREFURSAmJiAhcHViZGVzYy5jb2xzX3ZhbGlkX2Zvcl91cGRhdGUpCisJCWVyZXBv cnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVO Q0UpLAorCQkJCSBlcnJtc2coImNhbm5vdCB1cGRhdGUgdGFibGUgXCIlc1wiIiwKKwkJCQkJ CVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpLAorCQkJCSBlcnJkZXRhaWwoIkNvbHVt biBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBs aWNhIGlkZW50aXR5LiIpKSk7CiAJZWxzZSBpZiAoY21kID09IENNRF9ERUxFVEUgJiYgIXB1 YmRlc2MucmZfdmFsaWRfZm9yX2RlbGV0ZSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSksCiAJCQkJIGVycm1zZygi Y2Fubm90IGRlbGV0ZSBmcm9tIHRhYmxlIFwiJXNcIiIsCiAJCQkJCQlSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpKSwKIAkJCQkgZXJyZGV0YWlsKCJDb2x1bW4gdXNlZCBpbiB0aGUg cHVibGljYXRpb24gV0hFUkUgZXhwcmVzc2lvbiBpcyBub3QgcGFydCBvZiB0aGUgcmVwbGlj YSBpZGVudGl0eS4iKSkpOworCWVsc2UgaWYgKGNtZCA9PSBDTURfREVMRVRFICYmICFwdWJk ZXNjLmNvbHNfdmFsaWRfZm9yX2RlbGV0ZSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSksCisJCQkJIGVycm1zZygi Y2Fubm90IGRlbGV0ZSBmcm9tIHRhYmxlIFwiJXNcIiIsCisJCQkJCQlSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpKSwKKwkJCQkgZXJyZGV0YWlsKCJDb2x1bW4gbGlzdCB1c2VkIGJ5 IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4i KSkpOwogCiAJLyogSWYgcmVsYXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgd2UgYXJlIGFs d2F5cyBnb29kLiAqLwogCWlmIChPaWRJc1ZhbGlkKFJlbGF0aW9uR2V0UmVwbGljYUluZGV4 KHJlbCkpKQogCQlyZXR1cm47CiAKKwkvKiBSRVBMSUNBIElERU5USVRZIEZVTEwgaXMgYWxz byBnb29kIGZvciBVUERBVEUvREVMRVRFLiAqLworCWlmIChyZWwtPnJkX3JlbC0+cmVscmVw bGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfRlVMTCkKKwkJcmV0dXJuOworCiAJLyoKIAkg KiBUaGlzIGlzIFVQREFURS9ERUxFVEUgYW5kIHRoZXJlIGlzIG5vIHJlcGxpY2EgaWRlbnRp dHkuCiAJICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jIGIv c3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKaW5kZXggZDRmODQ1NWEyYmQuLmE1MDQ0 Mzc4NzNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVuY3MuYwpAQCAtNDg1MCw2ICs0ODUwLDcgQEAg X2NvcHlQdWJsaWNhdGlvblRhYmxlKGNvbnN0IFB1YmxpY2F0aW9uVGFibGUgKmZyb20pCiAK IAlDT1BZX05PREVfRklFTEQocmVsYXRpb24pOwogCUNPUFlfTk9ERV9GSUVMRCh3aGVyZUNs YXVzZSk7CisJQ09QWV9OT0RFX0ZJRUxEKGNvbHVtbnMpOwogCiAJcmV0dXJuIG5ld25vZGU7 CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMgYi9zcmMv YmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKaW5kZXggZjEwMDJhZmU3YTAuLjRmYzE2Y2Uw NGUzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9lcXVhbGZ1bmNzLmMKKysrIGIv c3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCkBAIC0yMzIyLDYgKzIzMjIsNyBAQCBf ZXF1YWxQdWJsaWNhdGlvblRhYmxlKGNvbnN0IFB1YmxpY2F0aW9uVGFibGUgKmEsIGNvbnN0 IFB1YmxpY2F0aW9uVGFibGUgKmIpCiB7CiAJQ09NUEFSRV9OT0RFX0ZJRUxEKHJlbGF0aW9u KTsKIAlDT01QQVJFX05PREVfRklFTEQod2hlcmVDbGF1c2UpOworCUNPTVBBUkVfTk9ERV9G SUVMRChjb2x1bW5zKTsKIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXgg YTAzYjMzYjUzYmQuLjI1YzliMjlhZmRkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJz ZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTk3NTEsMTMg Kzk3NTEsMTQgQEAgQ3JlYXRlUHVibGljYXRpb25TdG10OgogICogcmVsYXRpb25fZXhwciBo ZXJlLgogICovCiBQdWJsaWNhdGlvbk9ialNwZWM6Ci0JCQlUQUJMRSByZWxhdGlvbl9leHBy IE9wdFdoZXJlQ2xhdXNlCisJCQlUQUJMRSByZWxhdGlvbl9leHByIG9wdF9jb2x1bW5fbGlz dCBPcHRXaGVyZUNsYXVzZQogCQkJCXsKIAkJCQkJJCQgPSBtYWtlTm9kZShQdWJsaWNhdGlv bk9ialNwZWMpOwogCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JKX1RBQkxF OwogCQkJCQkkJC0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKIAkJ CQkJJCQtPnB1YnRhYmxlLT5yZWxhdGlvbiA9ICQyOwotCQkJCQkkJC0+cHVidGFibGUtPndo ZXJlQ2xhdXNlID0gJDM7CisJCQkJCSQkLT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQzOworCQkJ CQkkJC0+cHVidGFibGUtPndoZXJlQ2xhdXNlID0gJDQ7CiAJCQkJfQogCQkJfCBBTEwgVEFC TEVTIElOX1AgU0NIRU1BIENvbElkCiAJCQkJewpAQCAtOTc3MiwxMSArOTc3MywxMiBAQCBQ dWJsaWNhdGlvbk9ialNwZWM6CiAJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05P QkpfVEFCTEVTX0lOX0NVUl9TQ0hFTUE7CiAJCQkJCSQkLT5sb2NhdGlvbiA9IEA1OwogCQkJ CX0KLQkJCXwgQ29sSWQgT3B0V2hlcmVDbGF1c2UKKwkJCXwgQ29sSWQgb3B0X2NvbHVtbl9s aXN0IE9wdFdoZXJlQ2xhdXNlCiAJCQkJewogCQkJCQkkJCA9IG1ha2VOb2RlKFB1YmxpY2F0 aW9uT2JqU3BlYyk7CiAJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfQ09O VElOVUFUSU9OOwotCQkJCQlpZiAoJDIpCisJCQkJCS8qIEZJWE1FIHRoaXMgaXMgYSBiaXQg Y3VtYmVyc29tZSAqLworCQkJCQlpZiAoJDIgfHwgJDMpCiAJCQkJCXsKIAkJCQkJCS8qCiAJ CQkJCQkgKiBUaGUgT3B0V2hlcmVDbGF1c2UgbXVzdCBiZSBzdG9yZWQgaGVyZSBidXQgaXQg aXMKQEAgLTk3ODYsNyArOTc4OCw4IEBAIFB1YmxpY2F0aW9uT2JqU3BlYzoKIAkJCQkJCSAq LwogCQkJCQkJJCQtPnB1YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7CiAJ CQkJCQkkJC0+cHVidGFibGUtPnJlbGF0aW9uID0gbWFrZVJhbmdlVmFyKE5VTEwsICQxLCBA MSk7Ci0JCQkJCQkkJC0+cHVidGFibGUtPndoZXJlQ2xhdXNlID0gJDI7CisJCQkJCQkkJC0+ cHVidGFibGUtPmNvbHVtbnMgPSAkMjsKKwkJCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1 c2UgPSAkMzsKIAkJCQkJfQogCQkJCQllbHNlCiAJCQkJCXsKQEAgLTk3OTQsMjMgKzk3OTcs MjUgQEAgUHVibGljYXRpb25PYmpTcGVjOgogCQkJCQl9CiAJCQkJCSQkLT5sb2NhdGlvbiA9 IEAxOwogCQkJCX0KLQkJCXwgQ29sSWQgaW5kaXJlY3Rpb24gT3B0V2hlcmVDbGF1c2UKKwkJ CXwgQ29sSWQgaW5kaXJlY3Rpb24gb3B0X2NvbHVtbl9saXN0IE9wdFdoZXJlQ2xhdXNlCiAJ CQkJewogCQkJCQkkJCA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CiAJCQkJCSQk LT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfQ09OVElOVUFUSU9OOwogCQkJCQkkJC0+ cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1YnRh YmxlLT5yZWxhdGlvbiA9IG1ha2VSYW5nZVZhckZyb21RdWFsaWZpZWROYW1lKCQxLCAkMiwg QDEsIHl5c2Nhbm5lcik7Ci0JCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2UgPSAkMzsK KwkJCQkJJCQtPnB1YnRhYmxlLT5jb2x1bW5zID0gJDM7CisJCQkJCSQkLT5wdWJ0YWJsZS0+ d2hlcmVDbGF1c2UgPSAkNDsKIAkJCQkJJCQtPmxvY2F0aW9uID0gQDE7CiAJCQkJfQogCQkJ LyogZ3JhbW1hciBsaWtlIHRhYmxlbmFtZSAqICwgT05MWSB0YWJsZW5hbWUsIE9OTFkgKCB0 YWJsZW5hbWUgKSAqLwotCQkJfCBleHRlbmRlZF9yZWxhdGlvbl9leHByIE9wdFdoZXJlQ2xh dXNlCisJCQl8IGV4dGVuZGVkX3JlbGF0aW9uX2V4cHIgb3B0X2NvbHVtbl9saXN0IE9wdFdo ZXJlQ2xhdXNlCiAJCQkJewogCQkJCQkkJCA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3Bl Yyk7CiAJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElDQVRJT05PQkpfQ09OVElOVUFUSU9O OwogCQkJCQkkJC0+cHVidGFibGUgPSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKIAkJ CQkJJCQtPnB1YnRhYmxlLT5yZWxhdGlvbiA9ICQxOwotCQkJCQkkJC0+cHVidGFibGUtPndo ZXJlQ2xhdXNlID0gJDI7CisJCQkJCSQkLT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQyOworCQkJ CQkkJC0+cHVidGFibGUtPndoZXJlQ2xhdXNlID0gJDM7CiAJCQkJfQogCQkJfCBDVVJSRU5U X1NDSEVNQQogCQkJCXsKQEAgLTk4MzYsNiArOTg0MSwxMCBAQCBwdWJfb2JqX2xpc3Q6IAlQ dWJsaWNhdGlvbk9ialNwZWMKICAqCiAgKiBBTFRFUiBQVUJMSUNBVElPTiBuYW1lIFNFVCBw dWJfb2JqIFssIC4uLl0KICAqCisgKiBBTFRFUiBQVUJMSUNBVElPTiBuYW1lIFNFVCBDT0xV TU5TIHRhYmxlX25hbWUgKGNvbHVtblssIC4uLl0pCisgKgorICogQUxURVIgUFVCTElDQVRJ T04gbmFtZSBTRVQgQ09MVU1OUyB0YWJsZV9uYW1lIEFMTAorICoKICAqIHB1Yl9vYmogaXMg b25lIG9mOgogICoKICAqCQlUQUJMRSB0YWJsZV9uYW1lIFssIC4uLl0KQEAgLTk4NjksNiAr OTg3OCwzMiBAQCBBbHRlclB1YmxpY2F0aW9uU3RtdDoKIAkJCQkJbi0+YWN0aW9uID0gQVBf U2V0T2JqZWN0czsKIAkJCQkJJCQgPSAoTm9kZSAqKW47CiAJCQkJfQorCQkJfCBBTFRFUiBQ VUJMSUNBVElPTiBuYW1lIEFMVEVSIFRBQkxFIHJlbGF0aW9uX2V4cHIgU0VUIENPTFVNTlMg JygnIGNvbHVtbkxpc3QgJyknCisJCQkJeworCQkJCQlBbHRlclB1YmxpY2F0aW9uU3RtdCAq biA9IG1ha2VOb2RlKEFsdGVyUHVibGljYXRpb25TdG10KTsKKwkJCQkJUHVibGljYXRpb25P YmpTcGVjICpvYmogPSBtYWtlTm9kZShQdWJsaWNhdGlvbk9ialNwZWMpOworCQkJCQlvYmot PnB1Ym9ianR5cGUgPSBQVUJMSUNBVElPTk9CSl9UQUJMRTsKKwkJCQkJb2JqLT5wdWJ0YWJs ZSA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uVGFibGUpOworCQkJCQlvYmotPnB1YnRhYmxlLT5y ZWxhdGlvbiA9ICQ2OworCQkJCQlvYmotPnB1YnRhYmxlLT5jb2x1bW5zID0gJDEwOworCQkJ CQluLT5wdWJuYW1lID0gJDM7CisJCQkJCW4tPnB1Ym9iamVjdHMgPSBsaXN0X21ha2UxKG9i aik7CisJCQkJCW4tPmFjdGlvbiA9IEFQX1NldENvbHVtbnM7CisJCQkJCSQkID0gKE5vZGUg KikgbjsKKwkJCQl9CisJCQl8IEFMVEVSIFBVQkxJQ0FUSU9OIG5hbWUgQUxURVIgVEFCTEUg cmVsYXRpb25fZXhwciBTRVQgQ09MVU1OUyBBTEwKKwkJCQl7CisJCQkJCUFsdGVyUHVibGlj YXRpb25TdG10ICpuID0gbWFrZU5vZGUoQWx0ZXJQdWJsaWNhdGlvblN0bXQpOworCQkJCQlQ dWJsaWNhdGlvbk9ialNwZWMgKm9iaiA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7 CisJCQkJCW9iai0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9OT0JKX1RBQkxFOworCQkJCQlv YmotPnB1YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7CisJCQkJCW9iai0+ cHVidGFibGUtPnJlbGF0aW9uID0gJDY7CisJCQkJCW9iai0+cHVidGFibGUtPmNvbHVtbnMg PSBOSUw7CisJCQkJCW4tPnB1Ym5hbWUgPSAkMzsKKwkJCQkJbi0+cHVib2JqZWN0cyA9IGxp c3RfbWFrZTEob2JqKTsKKwkJCQkJbi0+YWN0aW9uID0gQVBfU2V0Q29sdW1uczsKKwkJCQkJ JCQgPSAoTm9kZSAqKSBuOworCQkJCX0KIAkJCXwgQUxURVIgUFVCTElDQVRJT04gbmFtZSBE Uk9QIHB1Yl9vYmpfbGlzdAogCQkJCXsKIAkJCQkJQWx0ZXJQdWJsaWNhdGlvblN0bXQgKm4g PSBtYWtlTm9kZShBbHRlclB1YmxpY2F0aW9uU3RtdCk7CkBAIC0xNzQ4OCw2ICsxNzUyMywx MyBAQCBwcmVwcm9jZXNzX3B1Ym9ial9saXN0KExpc3QgKnB1Ym9ianNwZWNfbGlzdCwgY29y ZV95eXNjYW5fdCB5eXNjYW5uZXIpCiAJCQkJCQllcnJtc2coIldIRVJFIGNsYXVzZSBub3Qg YWxsb3dlZCBmb3Igc2NoZW1hIiksCiAJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHVib2Jq LT5sb2NhdGlvbikpOwogCisJCQkvKiBDb2x1bW4gZmlsdGVyIGlzIG5vdCBhbGxvd2VkIG9u IGEgc2NoZW1hIG9iamVjdCAqLworCQkJaWYgKHB1Ym9iai0+cHVidGFibGUgJiYgcHVib2Jq LT5wdWJ0YWJsZS0+Y29sdW1ucykKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29k ZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQllcnJtc2coImNvbHVtbiBzcGVjaWZp Y2F0aW9uIG5vdCBhbGxvd2VkIGZvciBzY2hlbWEiKSwKKwkJCQkJCXBhcnNlcl9lcnJwb3Np dGlvbihwdWJvYmotPmxvY2F0aW9uKSk7CisKIAkJCS8qCiAJCQkgKiBXZSBjYW4gZGlzdGlu Z3Vpc2ggYmV0d2VlbiB0aGUgZGlmZmVyZW50IHR5cGUgb2Ygc2NoZW1hCiAJCQkgKiBvYmpl Y3RzIGJhc2VkIG9uIHdoZXRoZXIgbmFtZSBhbmQgcHVidGFibGUgaXMgc2V0LgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IGM5YjBlZWVmZDdlLi44 MTZkNDYxYWNkMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8u YwpAQCAtMjksMTYgKzI5LDI1IEBACiAjZGVmaW5lIFRSVU5DQVRFX0NBU0NBREUJCSgxPDww KQogI2RlZmluZSBUUlVOQ0FURV9SRVNUQVJUX1NFUVMJKDE8PDEpCiAKLXN0YXRpYyB2b2lk IGxvZ2ljYWxyZXBfd3JpdGVfYXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJlbCk7 CitzdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmluZ0luZm8gb3V0LCBS ZWxhdGlvbiByZWwsCisJCQkJCQkJCSAgIEJpdG1hcHNldCAqY29sdW1ucyk7CiBzdGF0aWMg dm9pZCBsb2dpY2FscmVwX3dyaXRlX3R1cGxlKFN0cmluZ0luZm8gb3V0LCBSZWxhdGlvbiBy ZWwsCiAJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJCQkgICBib29s IGJpbmFyeSk7CisJCQkJCQkJCSAgIGJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMp Owogc3RhdGljIHZvaWQgbG9naWNhbHJlcF9yZWFkX2F0dHJzKFN0cmluZ0luZm8gaW4sIExv Z2ljYWxSZXBSZWxhdGlvbiAqcmVsKTsKIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfcmVhZF90 dXBsZShTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICp0dXBsZSk7CiAKIHN0 YXRpYyB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfbmFtZXNwYWNlKFN0cmluZ0luZm8gb3V0LCBP aWQgbnNwaWQpOwogc3RhdGljIGNvbnN0IGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9uYW1lc3Bh Y2UoU3RyaW5nSW5mbyBpbik7CiAKKworc3RhdGljIGJvb2wKK2NvbHVtbl9pbl9zZXQoaW50 IGF0dG51bSwgQml0bWFwc2V0ICpjb2x1bW5zKQoreworCXJldHVybiAoY29sdW1ucyA9PSBO VUxMIHx8IGJtc19pc19tZW1iZXIoYXR0bnVtLCBjb2x1bW5zKSk7Cit9CisKKwogLyoKICAq IFdyaXRlIEJFR0lOIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCkBAIC0zOTgsNyArNDA3 LDcgQEAgbG9naWNhbHJlcF9yZWFkX29yaWdpbihTdHJpbmdJbmZvIGluLCBYTG9nUmVjUHRy ICpvcmlnaW5fbHNuKQogICovCiB2b2lkCiBsb2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJp bmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKLQkJCQkJCVR1 cGxlVGFibGVTbG90ICpuZXdzbG90LCBib29sIGJpbmFyeSkKKwkJCQkJCVR1cGxlVGFibGVT bG90ICpuZXdzbG90LCBib29sIGJpbmFyeSwgQml0bWFwc2V0ICpjb2x1bW5zKQogewogCXBx X3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0lOU0VSVCk7CiAKQEAgLTQxMCw3ICs0 MTksNyBAQCBsb2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAlwcV9zZW5kaW50MzIob3V0LCBSZWxhdGlv bkdldFJlbGlkKHJlbCkpOwogCiAJcHFfc2VuZGJ5dGUob3V0LCAnTicpOwkJLyogbmV3IHR1 cGxlIGZvbGxvd3MgKi8KLQlsb2dpY2FscmVwX3dyaXRlX3R1cGxlKG91dCwgcmVsLCBuZXdz bG90LCBiaW5hcnkpOworCWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUob3V0LCByZWwsIG5ld3Ns b3QsIGJpbmFyeSwgY29sdW1ucyk7CiB9CiAKIC8qCkBAIC00NDMsNyArNDUyLDcgQEAgbG9n aWNhbHJlcF9yZWFkX2luc2VydChTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRh ICpuZXd0dXApCiB2b2lkCiBsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShTdHJpbmdJbmZvIG91 dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAkJCQkJCVR1cGxlVGFibGVT bG90ICpvbGRzbG90LCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCwKLQkJCQkJCWJvb2wgYmlu YXJ5KQorCQkJCQkJYm9vbCBiaW5hcnksIEJpdG1hcHNldCAqY29sdW1ucykKIHsKIAlwcV9z ZW5kYnl0ZShvdXQsIExPR0lDQUxfUkVQX01TR19VUERBVEUpOwogCkBAIC00NjQsMTEgKzQ3 MywxMSBAQCBsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNh Y3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAkJCXBxX3NlbmRieXRlKG91dCwgJ08nKTsJ Lyogb2xkIHR1cGxlIGZvbGxvd3MgKi8KIAkJZWxzZQogCQkJcHFfc2VuZGJ5dGUob3V0LCAn SycpOwkvKiBvbGQga2V5IGZvbGxvd3MgKi8KLQkJbG9naWNhbHJlcF93cml0ZV90dXBsZShv dXQsIHJlbCwgb2xkc2xvdCwgYmluYXJ5KTsKKwkJbG9naWNhbHJlcF93cml0ZV90dXBsZShv dXQsIHJlbCwgb2xkc2xvdCwgYmluYXJ5LCBjb2x1bW5zKTsKIAl9CiAKIAlwcV9zZW5kYnl0 ZShvdXQsICdOJyk7CQkvKiBuZXcgdHVwbGUgZm9sbG93cyAqLwotCWxvZ2ljYWxyZXBfd3Jp dGVfdHVwbGUob3V0LCByZWwsIG5ld3Nsb3QsIGJpbmFyeSk7CisJbG9naWNhbHJlcF93cml0 ZV90dXBsZShvdXQsIHJlbCwgbmV3c2xvdCwgYmluYXJ5LCBjb2x1bW5zKTsKIH0KIAogLyoK QEAgLTUzNyw3ICs1NDYsNyBAQCBsb2dpY2FscmVwX3dyaXRlX2RlbGV0ZShTdHJpbmdJbmZv IG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAllbHNlCiAJCXBxX3Nl bmRieXRlKG91dCwgJ0snKTsJLyogb2xkIGtleSBmb2xsb3dzICovCiAKLQlsb2dpY2FscmVw X3dyaXRlX3R1cGxlKG91dCwgcmVsLCBvbGRzbG90LCBiaW5hcnkpOworCWxvZ2ljYWxyZXBf d3JpdGVfdHVwbGUob3V0LCByZWwsIG9sZHNsb3QsIGJpbmFyeSwgTlVMTCk7CiB9CiAKIC8q CkBAIC02NTIsNyArNjYxLDggQEAgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0lu Zm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiAgKiBXcml0ZSBy ZWxhdGlvbiBkZXNjcmlwdGlvbiB0byB0aGUgb3V0cHV0IHN0cmVhbS4KICAqLwogdm9pZAot bG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LCBSZWxhdGlvbiByZWwpCitsb2dpY2FscmVwX3dyaXRlX3JlbChTdHJpbmdJbmZvIG91dCwg VHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKKwkJCQkJIEJpdG1hcHNldCAqY29s dW1ucykKIHsKIAljaGFyCSAgICpyZWxuYW1lOwogCkBAIC02NzQsNyArNjg0LDcgQEAgbG9n aWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBS ZWxhdGlvbiByZWwpCiAJcHFfc2VuZGJ5dGUob3V0LCByZWwtPnJkX3JlbC0+cmVscmVwbGlk ZW50KTsKIAogCS8qIHNlbmQgdGhlIGF0dHJpYnV0ZSBpbmZvICovCi0JbG9naWNhbHJlcF93 cml0ZV9hdHRycyhvdXQsIHJlbCk7CisJbG9naWNhbHJlcF93cml0ZV9hdHRycyhvdXQsIHJl bCwgY29sdW1ucyk7CiB9CiAKIC8qCkBAIC03NTEsNyArNzYxLDcgQEAgbG9naWNhbHJlcF9y ZWFkX3R5cChTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHlwICpsdHlwKQogICovCiBzdGF0 aWMgdm9pZAogbG9naWNhbHJlcF93cml0ZV90dXBsZShTdHJpbmdJbmZvIG91dCwgUmVsYXRp b24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJICAgYm9vbCBiaW5hcnkpCisJ CQkJCSAgIGJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMpCiB7CiAJVHVwbGVEZXNj CWRlc2M7CiAJRGF0dW0JICAgKnZhbHVlczsKQEAgLTc2Myw4ICs3NzMsMTQgQEAgbG9naWNh bHJlcF93cml0ZV90dXBsZShTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBUdXBsZVRh YmxlU2xvdCAqc2xvdCwKIAogCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5uYXR0czsgaSsrKQog CXsKLQkJaWYgKFR1cGxlRGVzY0F0dHIoZGVzYywgaSktPmF0dGlzZHJvcHBlZCB8fCBUdXBs ZURlc2NBdHRyKGRlc2MsIGkpLT5hdHRnZW5lcmF0ZWQpCisJCUZvcm1fcGdfYXR0cmlidXRl IGF0dCA9IFR1cGxlRGVzY0F0dHIoZGVzYywgaSk7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9w cGVkIHx8IGF0dC0+YXR0Z2VuZXJhdGVkKQogCQkJY29udGludWU7CisKKwkJaWYgKCFjb2x1 bW5faW5fc2V0KGF0dC0+YXR0bnVtLCBjb2x1bW5zKSkKKwkJCWNvbnRpbnVlOworCiAJCW5s aXZlYXR0cysrOwogCX0KIAlwcV9zZW5kaW50MTYob3V0LCBubGl2ZWF0dHMpOwpAQCAtNzgz LDYgKzc5OSw5IEBAIGxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUoU3RyaW5nSW5mbyBvdXQsIFJl bGF0aW9uIHJlbCwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCWlmIChhdHQtPmF0dGlzZHJv cHBlZCB8fCBhdHQtPmF0dGdlbmVyYXRlZCkKIAkJCWNvbnRpbnVlOwogCisJCWlmICghY29s dW1uX2luX3NldChhdHQtPmF0dG51bSwgY29sdW1ucykpCisJCQljb250aW51ZTsKKwogCQlp ZiAoaXNudWxsW2ldKQogCQl7CiAJCQlwcV9zZW5kYnl0ZShvdXQsIExPR0lDQUxSRVBfQ09M VU1OX05VTEwpOwpAQCAtOTA0LDcgKzkyMyw3IEBAIGxvZ2ljYWxyZXBfcmVhZF90dXBsZShT dHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICp0dXBsZSkKICAqIFdyaXRlIHJl bGF0aW9uIGF0dHJpYnV0ZSBtZXRhZGF0YSB0byB0aGUgc3RyZWFtLgogICovCiBzdGF0aWMg dm9pZAotbG9naWNhbHJlcF93cml0ZV9hdHRycyhTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24g cmVsKQorbG9naWNhbHJlcF93cml0ZV9hdHRycyhTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24g cmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpCiB7CiAJVHVwbGVEZXNjCWRlc2M7CiAJaW50CQkJ aTsKQEAgLTkxNyw4ICs5MzYsMTQgQEAgbG9naWNhbHJlcF93cml0ZV9hdHRycyhTdHJpbmdJ bmZvIG91dCwgUmVsYXRpb24gcmVsKQogCS8qIHNlbmQgbnVtYmVyIG9mIGxpdmUgYXR0cmli dXRlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBkZXNjLT5uYXR0czsgaSsrKQogCXsKLQkJaWYg KFR1cGxlRGVzY0F0dHIoZGVzYywgaSktPmF0dGlzZHJvcHBlZCB8fCBUdXBsZURlc2NBdHRy KGRlc2MsIGkpLT5hdHRnZW5lcmF0ZWQpCisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1 cGxlRGVzY0F0dHIoZGVzYywgaSk7CisKKwkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0 dC0+YXR0Z2VuZXJhdGVkKQogCQkJY29udGludWU7CisKKwkJaWYgKCFjb2x1bW5faW5fc2V0 KGF0dC0+YXR0bnVtLCBjb2x1bW5zKSkKKwkJCWNvbnRpbnVlOworCiAJCW5saXZlYXR0cysr OwogCX0KIAlwcV9zZW5kaW50MTYob3V0LCBubGl2ZWF0dHMpOwpAQCAtOTM3LDYgKzk2Miw5 IEBAIGxvZ2ljYWxyZXBfd3JpdGVfYXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJl bCkKIAkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0dC0+YXR0Z2VuZXJhdGVkKQogCQkJ Y29udGludWU7CiAKKwkJaWYgKCFjb2x1bW5faW5fc2V0KGF0dC0+YXR0bnVtLCBjb2x1bW5z KSkKKwkJCWNvbnRpbnVlOworCiAJCS8qIFJFUExJQ0EgSURFTlRJVFkgRlVMTCBtZWFucyBh bGwgY29sdW1ucyBhcmUgc2VudCBhcyBwYXJ0IG9mIGtleS4gKi8KIAkJaWYgKHJlcGxpZGVu dGZ1bGwgfHwKIAkJCWJtc19pc19tZW1iZXIoYXR0LT5hdHRudW0gLSBGaXJzdExvd0ludmFs aWRIZWFwQXR0cmlidXRlTnVtYmVyLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC90YWJsZXN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvdGFibGVzeW5jLmMKaW5kZXggMTY1OTk2NDU3MWMuLjVhMjgwMzkwMjNiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKQEAgLTEx Miw2ICsxMTIsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3Rv cmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgiCisjaW5jbHVkZSAidXRpbHMv YXJyYXkuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxz L2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCkBAIC03MDEsMTIg KzcwMiwxMyBAQCBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFy ICpyZWxuYW1lLAogCVN0cmluZ0luZm9EYXRhIGNtZDsKIAlUdXBsZVRhYmxlU2xvdCAqc2xv dDsKIAlPaWQJCQl0YWJsZVJvd1tdID0ge09JRE9JRCwgQ0hBUk9JRCwgQ0hBUk9JRH07Ci0J T2lkCQkJYXR0clJvd1tdID0ge1RFWFRPSUQsIE9JRE9JRCwgQk9PTE9JRH07CisJT2lkCQkJ YXR0clJvd1tdID0ge0lOVDJPSUQsIFRFWFRPSUQsIE9JRE9JRCwgQk9PTE9JRH07CiAJT2lk CQkJcXVhbFJvd1tdID0ge1RFWFRPSUR9OwogCWJvb2wJCWlzbnVsbDsKIAlpbnQJCQluYXR0 OwogCUxpc3RDZWxsICAgKmxjOwogCWJvb2wJCWZpcnN0OworCUJpdG1hcHNldCAgKmluY2x1 ZGVkX2NvbHMgPSBOVUxMOwogCiAJbHJlbC0+bnNwbmFtZSA9IG5zcG5hbWU7CiAJbHJlbC0+ cmVsbmFtZSA9IHJlbG5hbWU7CkBAIC03NDcsMTAgKzc0OSwxMTAgQEAgZmV0Y2hfcmVtb3Rl X3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwKIAlFeGVjRHJvcFNp bmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOwogCXdhbHJjdl9jbGVhcl9yZXN1bHQocmVzKTsK IAotCS8qIE5vdyBmZXRjaCBjb2x1bW5zLiAqLworCisJLyoKKwkgKiBHZXQgY29sdW1uIGxp c3RzIGZvciBlYWNoIHJlbGF0aW9uLgorCSAqCisJICogRm9yIGluaXRpYWwgc3luY2hyb25p emF0aW9uLCBjb2x1bW4gbGlzdHMgY2FuIGJlIGlnbm9yZWQgaW4gZm9sbG93aW5nCisJICog Y2FzZXM6CisJICoKKwkgKiAxKSBvbmUgb2YgdGhlIHN1YnNjcmliZWQgcHVibGljYXRpb25z IGZvciB0aGUgdGFibGUgaGFzbid0IHNwZWNpZmllZAorCSAqIGFueSBjb2x1bW4gbGlzdAor CSAqCisJICogMikgb25lIG9mIHRoZSBzdWJzY3JpYmVkIHB1YmxpY2F0aW9ucyBoYXMgcHVi YWxsdGFibGVzIHNldCB0byB0cnVlCisJICoKKwkgKiAzKSBvbmUgb2YgdGhlIHN1YnNjcmli ZWQgcHVibGljYXRpb25zIGlzIGRlY2xhcmVkIGFzIEFMTCBUQUJMRVMgSU4KKwkgKiBTQ0hF TUEgdGhhdCBpbmNsdWRlcyB0aGlzIHJlbGF0aW9uCisJICoKKwkgKiBXZSBuZWVkIHRvIGRv IHRoaXMgYmVmb3JlIGZldGNoaW5nIGluZm8gYWJvdXQgY29sdW1uIG5hbWVzIGFuZCB0eXBl cywKKwkgKiBzbyB0aGF0IHdlIGNhbiBza2lwIGNvbHVtbnMgdGhhdCBzaG91bGQgbm90IGJl IHJlcGxpY2F0ZWQuCisJICovCisJaWYgKHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbihMb2dSZXBX b3JrZXJXYWxSY3ZDb25uKSA+PSAxNTAwMDApCisJeworCQlXYWxSY3ZFeGVjUmVzdWx0ICpw dWJyZXM7CisJCVR1cGxlVGFibGVTbG90ICpzbG90OworCQlPaWQJCQlhdHRyc1Jvd1tdID0g e0lOVDJPSUR9OworCQlTdHJpbmdJbmZvRGF0YSBwdWJfbmFtZXM7CisJCWJvb2wJCWZpcnN0 ID0gdHJ1ZTsKKworCQlpbml0U3RyaW5nSW5mbygmcHViX25hbWVzKTsKKwkJZm9yZWFjaChs YywgTXlTdWJzY3JpcHRpb24tPnB1YmxpY2F0aW9ucykKKwkJeworCQkJaWYgKCFmaXJzdCkK KwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZwdWJfbmFtZXMsICIsICIpOworCQkJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZygmcHViX25hbWVzLCBxdW90ZV9saXRlcmFsX2NzdHIoc3RyVmFsKGxm aXJzdChsYykpKSk7CisJCQlmaXJzdCA9IGZhbHNlOworCQl9CisKKwkJLyoKKwkJICogRmV0 Y2ggaW5mbyBhYm91dCBjb2x1bW4gZmlsdGVycyBmb3IgdGhlIHJlbGF0aW9uIChmcm9tIGFs bCB0aGUKKwkJICogcHVibGljYXRpb25zKS4gV2UgdW5uZXN0IHRoZSBpbnQydmVjdG9yIHZh bHVlcywgYmVjYXVzZSB0aGF0CisJCSAqIG1ha2VzIGl0IGVhc2llciB0byBjb21iaW5lIGZp bHRlcnMgYnkgc2ltcGx5IGFkZGluZyB0aGUgYXR0bnVtcworCQkgKiB0byBhIG5ldyBiaXRt YXAgKHdpdGhvdXQgaGF2aW5nIHRvIHBhcnNlIHRoZSBpbnQydmVjdG9yIGRhdGEpLgorCQkg KiBUaGlzIHByZXNlcnZlcyBOVUxMIHZhbHVlcywgc28gdGhhdCBpZiBvbmUgb2YgdGhlIHB1 YmxpY2F0aW9ucworCQkgKiBoYXMgbm8gY29sdW1uIGZpbHRlciwgd2UnbGwga25vdyB0aGF0 LgorCQkgKi8KKwkJcmVzZXRTdHJpbmdJbmZvKCZjbWQpOworCQlhcHBlbmRTdHJpbmdJbmZv KCZjbWQsCisJCQkJCQkgIlNFTEVDVCBESVNUSU5DVCB1bm5lc3QiCisJCQkJCQkgIiAgRlJP TSBwZ19wdWJsaWNhdGlvbiBwIgorCQkJCQkJICIgIExFRlQgT1VURVIgSk9JTiBwZ19wdWJs aWNhdGlvbl9yZWwgcHIiCisJCQkJCQkgIiAgICAgICBPTiAocC5vaWQgPSBwci5wcnB1Ymlk IEFORCBwci5wcnJlbGlkID0gJXUpIgorCQkJCQkJICIgIExFRlQgT1VURVIgSk9JTiB1bm5l c3QocHIucHJhdHRycykgT04gVFJVRSwiCisJCQkJCQkgIiAgTEFURVJBTCBwZ19nZXRfcHVi bGljYXRpb25fdGFibGVzKHAucHVibmFtZSkgZ3B0IgorCQkJCQkJICIgV0hFUkUgZ3B0LnJl bGlkID0gJXUiCisJCQkJCQkgIiAgIEFORCBwLnB1Ym5hbWUgSU4gKCAlcyApIiwKKwkJCQkJ CSBscmVsLT5yZW1vdGVpZCwKKwkJCQkJCSBscmVsLT5yZW1vdGVpZCwKKwkJCQkJCSBwdWJf bmFtZXMuZGF0YSk7CisKKwkJcHVicmVzID0gd2FscmN2X2V4ZWMoTG9nUmVwV29ya2VyV2Fs UmN2Q29ubiwgY21kLmRhdGEsCisJCQkJCQkJIGxlbmd0aG9mKGF0dHJzUm93KSwgYXR0cnNS b3cpOworCisJCWlmIChwdWJyZXMtPnN0YXR1cyAhPSBXQUxSQ1ZfT0tfVFVQTEVTKQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxV UkUpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZmV0Y2ggY29sdW1uIGxpc3QgaW5mbyBm b3IgdGFibGUgXCIlcy4lc1wiIGZyb20gcHVibGlzaGVyOiAlcyIsCisJCQkJCQkJbnNwbmFt ZSwgcmVsbmFtZSwgcHVicmVzLT5lcnIpKSk7CisKKwkJLyoKKwkJICogTWVyZ2UgdGhlIGNv bHVtbiBsaXN0cyAoZnJvbSBkaWZmZXJlbnQgcHVibGljYXRpb25zKSBieSBjcmVhdGluZwor CQkgKiBhIHNpbmdsZSBiaXRtYXAgd2l0aCBhbGwgdGhlIGF0dG51bXMuIElmIHdlIGZpbmQg YSBOVUxMIHZhbHVlLAorCQkgKiB0aGF0IG1lYW5zIG9uZSBvZiB0aGUgcHVibGljYXRpb25z IGhhcyBubyBjb2x1bW4gZmlsdGVyIGZvciB0aGUKKwkJICogdGFibGUgd2UncmUgc3luY2lu Zy4KKwkJICovCisJCXNsb3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QocHVicmVzLT50 dXBsZWRlc2MsICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCQl3aGlsZSAodHVwbGVzdG9yZV9n ZXR0dXBsZXNsb3QocHVicmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkpCisJ CXsKKwkJCURhdHVtCWNmdmFsID0gc2xvdF9nZXRhdHRyKHNsb3QsIDEsICZpc251bGwpOwor CisJCQkvKiBOVUxMIG1lYW5zIGVtcHR5IGNvbHVtbiBsaXN0LCBzbyB3ZSdyZSBkb25lLiAq LworCQkJaWYgKGlzbnVsbCkKKwkJCXsKKwkJCQlibXNfZnJlZShpbmNsdWRlZF9jb2xzKTsK KwkJCQlpbmNsdWRlZF9jb2xzID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaW5j bHVkZWRfY29scyA9IGJtc19hZGRfbWVtYmVyKGluY2x1ZGVkX2NvbHMsCisJCQkJCQkJCQkJ RGF0dW1HZXRJbnQxNihjZnZhbCkpOworCisJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJ fQorCQlFeGVjRHJvcFNpbmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCisJCXdhbHJjdl9j bGVhcl9yZXN1bHQocHVicmVzKTsKKworCQlwZnJlZShwdWJfbmFtZXMuZGF0YSk7CisJfQor CisJLyoKKwkgKiBOb3cgZmV0Y2ggY29sdW1uIG5hbWVzIGFuZCB0eXBlcy4KKwkgKi8KIAly ZXNldFN0cmluZ0luZm8oJmNtZCk7CiAJYXBwZW5kU3RyaW5nSW5mbygmY21kLAotCQkJCQkg IlNFTEVDVCBhLmF0dG5hbWUsIgorCQkJCQkgIlNFTEVDVCBhLmF0dG51bSwiCisJCQkJCSAi ICAgICAgIGEuYXR0bmFtZSwiCiAJCQkJCSAiICAgICAgIGEuYXR0dHlwaWQsIgogCQkJCQkg IiAgICAgICBhLmF0dG51bSA9IEFOWShpLmluZGtleSkiCiAJCQkJCSAiICBGUk9NIHBnX2Nh dGFsb2cucGdfYXR0cmlidXRlIGEiCkBAIC03NzgsMTYgKzg4MCwzNSBAQCBmZXRjaF9yZW1v dGVfdGFibGVfaW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLAogCWxyZWwtPmF0 dHR5cHMgPSBwYWxsb2MwKE1heFR1cGxlQXR0cmlidXRlTnVtYmVyICogc2l6ZW9mKE9pZCkp OwogCWxyZWwtPmF0dGtleXMgPSBOVUxMOwogCisJLyoKKwkgKiBTdG9yZSB0aGUgY29sdW1u cyBhcyBhIGxpc3Qgb2YgbmFtZXMuICBJZ25vcmUgdGhvc2UgdGhhdCBhcmUgbm90CisJICog cHJlc2VudCBpbiB0aGUgY29sdW1uIGxpc3QsIGlmIHRoZXJlIGlzIG9uZS4KKwkgKi8KIAlu YXR0ID0gMDsKIAlzbG90ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KHJlcy0+dHVwbGVk ZXNjLCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKIAl3aGlsZSAodHVwbGVzdG9yZV9nZXR0dXBs ZXNsb3QocmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkpCiAJewotCQlscmVs LT5hdHRuYW1lc1tuYXR0XSA9Ci0JCQlUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0YXR0 cihzbG90LCAxLCAmaXNudWxsKSk7CisJCWNoYXIJICAgKnJlbF9jb2xuYW1lOworCQlBdHRy TnVtYmVyCWF0dG51bTsKKworCQlhdHRudW0gPSBEYXR1bUdldEludDE2KHNsb3RfZ2V0YXR0 cihzbG90LCAxLCAmaXNudWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKworCQkvKiBJZiB0 aGUgY29sdW1uIGlzIG5vdCBpbiB0aGUgY29sdW1uIGxpc3QsIHNraXAgaXQuICovCisJCWlm IChpbmNsdWRlZF9jb2xzICE9IE5VTEwgJiYgIWJtc19pc19tZW1iZXIoYXR0bnVtLCBpbmNs dWRlZF9jb2xzKSkKKwkJeworCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCQljb250aW51 ZTsKKwkJfQorCisJCXJlbF9jb2xuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dl dGF0dHIoc2xvdCwgMiwgJmlzbnVsbCkpOwogCQlBc3NlcnQoIWlzbnVsbCk7Ci0JCWxyZWwt PmF0dHR5cHNbbmF0dF0gPSBEYXR1bUdldE9iamVjdElkKHNsb3RfZ2V0YXR0cihzbG90LCAy LCAmaXNudWxsKSk7CisKKwkJbHJlbC0+YXR0bmFtZXNbbmF0dF0gPSByZWxfY29sbmFtZTsK KwkJbHJlbC0+YXR0dHlwc1tuYXR0XSA9IERhdHVtR2V0T2JqZWN0SWQoc2xvdF9nZXRhdHRy KHNsb3QsIDMsICZpc251bGwpKTsKIAkJQXNzZXJ0KCFpc251bGwpOwotCQlpZiAoRGF0dW1H ZXRCb29sKHNsb3RfZ2V0YXR0cihzbG90LCAzLCAmaXNudWxsKSkpCisKKwkJaWYgKERhdHVt R2V0Qm9vbChzbG90X2dldGF0dHIoc2xvdCwgNCwgJmlzbnVsbCkpKQogCQkJbHJlbC0+YXR0 a2V5cyA9IGJtc19hZGRfbWVtYmVyKGxyZWwtPmF0dGtleXMsIG5hdHQpOwogCiAJCS8qIFNo b3VsZCBuZXZlciBoYXBwZW4uICovCkBAIC04MjEsNiArOTQyLDkgQEAgZmV0Y2hfcmVtb3Rl X3RhYmxlX2luZm8oY2hhciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwKIAkgKgogCSAqIDMp IG9uZSBvZiB0aGUgc3Vic2NyaWJlZCBwdWJsaWNhdGlvbnMgaXMgZGVjbGFyZWQgYXMgQUxM IFRBQkxFUyBJTgogCSAqIFNDSEVNQSB0aGF0IGluY2x1ZGVzIHRoaXMgcmVsYXRpb24KKwkg KgorCSAqIFhYWCBEb2VzIHRoaXMgYWN0dWFsbHkgaGFuZGxlIHB1YmFsbHRhYmxlcyBhbmQg c2NoZW1hIHB1YmxpY2F0aW9ucworCSAqIGNvcnJlY3RseT8KIAkgKi8KIAlpZiAod2FscmN2 X3NlcnZlcl92ZXJzaW9uKExvZ1JlcFdvcmtlcldhbFJjdkNvbm4pID49IDE1MDAwMCkKIAl7 CkBAIC05MzAsOCArMTA1NCwyNCBAQCBjb3B5X3RhYmxlKFJlbGF0aW9uIHJlbCkKIAogCS8q IFJlZ3VsYXIgdGFibGUgd2l0aCBubyByb3cgZmlsdGVyICovCiAJaWYgKGxyZWwucmVsa2lu ZCA9PSBSRUxLSU5EX1JFTEFUSU9OICYmIHF1YWwgPT0gTklMKQotCQlhcHBlbmRTdHJpbmdJ bmZvKCZjbWQsICJDT1BZICVzIFRPIFNURE9VVCIsCisJeworCQlhcHBlbmRTdHJpbmdJbmZv KCZjbWQsICJDT1BZICVzICgiLAogCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVy KGxyZWwubnNwbmFtZSwgbHJlbC5yZWxuYW1lKSk7CisKKwkJLyoKKwkJICogWFhYIERvIHdl IG5lZWQgdG8gbGlzdCB0aGUgY29sdW1ucyBpbiBhbGwgY2FzZXM/IE1heWJlIHdlJ3JlIHJl cGxpY2F0aW5nCisJCSAqIGFsbCBjb2x1bW5zPworCQkgKi8KKwkJZm9yIChpbnQgaSA9IDA7 IGkgPCBscmVsLm5hdHRzOyBpKyspCisJCXsKKwkJCWlmIChpID4gMCkKKwkJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKCZjbWQsICIsICIpOworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZjbWQsIHF1b3RlX2lkZW50aWZpZXIobHJlbC5hdHRuYW1lc1tpXSkpOworCQl9CisK KwkJYXBwZW5kU3RyaW5nSW5mbygmY21kLCAiKSBUTyBTVERPVVQiKTsKKwl9CiAJZWxzZQog CXsKIAkJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0 L3Bnb3V0cHV0LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1 dC5jCmluZGV4IDVmZGRhYjNhM2Q0Li5kY2I5NzIzYWQzYyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCkBAIC0yOSw2ICsyOSw3IEBACiAj aW5jbHVkZSAidXRpbHMvaW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIK ICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgog I2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5o IgogCkBAIC04NSw3ICs4Niw4IEBAIHN0YXRpYyBMaXN0ICpMb2FkUHVibGljYXRpb25zKExp c3QgKnB1Ym5hbWVzKTsKIHN0YXRpYyB2b2lkIHB1YmxpY2F0aW9uX2ludmFsaWRhdGlvbl9j YihEYXR1bSBhcmcsIGludCBjYWNoZWlkLAogCQkJCQkJCQkJCXVpbnQzMiBoYXNodmFsdWUp Owogc3RhdGljIHZvaWQgc2VuZF9yZWxhdGlvbl9hbmRfYXR0cnMoUmVsYXRpb24gcmVsYXRp b24sIFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCQkJTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4KTsKKwkJCQkJCQkJCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJ CQkJCUJpdG1hcHNldCAqY29sdW1ucyk7CiBzdGF0aWMgdm9pZCBzZW5kX3JlcGxfb3JpZ2lu KExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgUmVwT3JpZ2luSWQgb3Jp Z2luX2lkLCBYTG9nUmVjUHRyIG9yaWdpbl9sc24sCiAJCQkJCQkJIGJvb2wgc2VuZF9vcmln aW4pOwpAQCAtOTMsNiArOTUsOCBAQCBzdGF0aWMgdm9pZCBzZW5kX3JlcGxfb3JpZ2luKExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIC8qCiAgKiBPbmx5IDMgcHVibGljYXRpb24g YWN0aW9ucyBhcmUgdXNlZCBmb3Igcm93IGZpbHRlcmluZyAoImluc2VydCIsICJ1cGRhdGUi LAogICogImRlbGV0ZSIpLiBTZWUgUmVsYXRpb25TeW5jRW50cnkuZXhwcnN0YXRlW10uCisg KgorICogRklYTUUgRG8gd2UgbmVlZCBzb21ldGhpbmcgc2ltaWxhciBmb3IgY29sdW1uIGZp bHRlcnM/CiAgKi8KIGVudW0gUm93RmlsdGVyUHViQWN0aW9uCiB7CkBAIC0xNDMsOSArMTQ3 LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsYXRpb25TeW5jRW50cnkKIAkgKi8KIAlFeHByU3Rh dGUgICpleHByc3RhdGVbTlVNX1JPV0ZJTFRFUl9QVUJBQ1RJT05TXTsKIAlFU3RhdGUJICAg KmVzdGF0ZTsJCQkvKiBleGVjdXRvciBzdGF0ZSB1c2VkIGZvciByb3cgZmlsdGVyICovCi0J TWVtb3J5Q29udGV4dCBjYWNoZV9leHByX2N4dDsJLyogcHJpdmF0ZSBjb250ZXh0IGZvciBl eHByc3RhdGUgYW5kCi0JCQkJCQkJCQkgKiBlc3RhdGUsIGlmIGFueSAqLwotCiAJVHVwbGVU YWJsZVNsb3QgKm5ld19zbG90OwkvKiBzbG90IGZvciBzdG9yaW5nIG5ldyB0dXBsZSAqLwog CVR1cGxlVGFibGVTbG90ICpvbGRfc2xvdDsJLyogc2xvdCBmb3Igc3RvcmluZyBvbGQgdHVw bGUgKi8KIApAQCAtMTY0LDYgKzE2NSwxOSBAQCB0eXBlZGVmIHN0cnVjdCBSZWxhdGlvblN5 bmNFbnRyeQogCSAqIGhhdmluZyBpZGVudGljYWwgVHVwbGVEZXNjLgogCSAqLwogCUF0dHJN YXAgICAgKmF0dHJtYXA7CisKKwkvKgorCSAqIENvbHVtbnMgaW5jbHVkZWQgaW4gdGhlIHB1 YmxpY2F0aW9uLCBvciBOVUxMIGlmIGFsbCBjb2x1bW5zIGFyZQorCSAqIGluY2x1ZGVkIGlt cGxpY2l0bHkuICBOb3RlIHRoYXQgdGhlIGF0dG51bXMgaW4gdGhpcyBiaXRtYXAgYXJlIG5v dAorCSAqIHNoaWZ0ZWQgYnkgRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlci4K KwkgKi8KKwlCaXRtYXBzZXQgICpjb2x1bW5zOworCisJLyoKKwkgKiBQcml2YXRlIGNvbnRl eHQgdG8gc3RvcmUgYWRkaXRpb25hbCBkYXRhIGZvciB0aGlzIGVudHJ5IC0gc3RhdGUgZm9y CisJICogdGhlIHJvdyBmaWx0ZXIgZXhwcmVzc2lvbnMsIGNvbHVtbiBsaXN0LCBldGMuCisJ ICovCisJTWVtb3J5Q29udGV4dCBlbnRyeV9jeHQ7CiB9IFJlbGF0aW9uU3luY0VudHJ5Owog CiAvKiBNYXAgdXNlZCB0byByZW1lbWJlciB3aGljaCByZWxhdGlvbiBzY2hlbWFzIHdlIHNl bnQuICovCkBAIC0xODgsNiArMjAyLDcgQEAgc3RhdGljIEVTdGF0ZSAqY3JlYXRlX2VzdGF0 ZV9mb3JfcmVsYXRpb24oUmVsYXRpb24gcmVsKTsKIHN0YXRpYyB2b2lkIHBnb3V0cHV0X3Jv d19maWx0ZXJfaW5pdChQR091dHB1dERhdGEgKmRhdGEsCiAJCQkJCQkJCQkgTGlzdCAqcHVi bGljYXRpb25zLAogCQkJCQkJCQkJIFJlbGF0aW9uU3luY0VudHJ5ICplbnRyeSk7CisKIHN0 YXRpYyBib29sIHBnb3V0cHV0X3Jvd19maWx0ZXJfZXhlY19leHByKEV4cHJTdGF0ZSAqc3Rh dGUsCiAJCQkJCQkJCQkJICBFeHByQ29udGV4dCAqZWNvbnRleHQpOwogc3RhdGljIGJvb2wg cGdvdXRwdXRfcm93X2ZpbHRlcihSZWxhdGlvbiByZWxhdGlvbiwgVHVwbGVUYWJsZVNsb3Qg Km9sZF9zbG90LApAQCAtMTk1LDYgKzIxMCwxMSBAQCBzdGF0aWMgYm9vbCBwZ291dHB1dF9y b3dfZmlsdGVyKFJlbGF0aW9uIHJlbGF0aW9uLCBUdXBsZVRhYmxlU2xvdCAqb2xkX3Nsb3Qs CiAJCQkJCQkJCVJlbGF0aW9uU3luY0VudHJ5ICplbnRyeSwKIAkJCQkJCQkJUmVvcmRlckJ1 ZmZlckNoYW5nZVR5cGUgKmFjdGlvbik7CiAKKy8qIGNvbHVtbiBmaWx0ZXIgcm91dGluZXMg Ki8KK3N0YXRpYyB2b2lkIHBnb3V0cHV0X2NvbHVtbl9maWx0ZXJfaW5pdChQR091dHB1dERh dGEgKmRhdGEsCisJCQkJCQkJCQkJTGlzdCAqcHVibGljYXRpb25zLAorCQkJCQkJCQkJCVJl bGF0aW9uU3luY0VudHJ5ICplbnRyeSk7CisKIC8qCiAgKiBTcGVjaWZ5IG91dHB1dCBwbHVn aW4gY2FsbGJhY2tzCiAgKi8KQEAgLTYwMywxMSArNjIzLDExIEBAIG1heWJlX3NlbmRfc2No ZW1hKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAl7CiAJCVJlbGF0aW9uCWFuY2Vz dG9yID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGVudHJ5LT5wdWJsaXNoX2FzX3JlbGlk KTsKIAotCQlzZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhhbmNlc3RvciwgeGlkLCBjdHgpOwor CQlzZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhhbmNlc3RvciwgeGlkLCBjdHgsIHJlbGVudHJ5 LT5jb2x1bW5zKTsKIAkJUmVsYXRpb25DbG9zZShhbmNlc3Rvcik7CiAJfQogCi0Jc2VuZF9y ZWxhdGlvbl9hbmRfYXR0cnMocmVsYXRpb24sIHhpZCwgY3R4KTsKKwlzZW5kX3JlbGF0aW9u X2FuZF9hdHRycyhyZWxhdGlvbiwgeGlkLCBjdHgsIHJlbGVudHJ5LT5jb2x1bW5zKTsKIAog CWlmIChpbl9zdHJlYW1pbmcpCiAJCXNldF9zY2hlbWFfc2VudF9pbl9zdHJlYW1lZF90eG4o cmVsZW50cnksIHRvcHhpZCk7CkBAIC02MjAsNyArNjQwLDggQEAgbWF5YmVfc2VuZF9zY2hl bWEoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogICovCiBzdGF0aWMgdm9pZAogc2Vu ZF9yZWxhdGlvbl9hbmRfYXR0cnMoUmVsYXRpb24gcmVsYXRpb24sIFRyYW5zYWN0aW9uSWQg eGlkLAotCQkJCQkJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4KQorCQkJCQkJTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJQml0bWFwc2V0ICpjb2x1bW5zKQogewog CVR1cGxlRGVzYwlkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWxhdGlvbik7CiAJaW50CQkJ aTsKQEAgLTY0MywxMyArNjY0LDE3IEBAIHNlbmRfcmVsYXRpb25fYW5kX2F0dHJzKFJlbGF0 aW9uIHJlbGF0aW9uLCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJaWYgKGF0dC0+YXR0dHlwaWQg PCBGaXJzdEdlbmJraU9iamVjdElkKQogCQkJY29udGludWU7CiAKKwkJLyogU2tpcCB0aGlz IGF0dHJpYnV0ZSBpZiBpdCdzIG5vdCBwcmVzZW50IGluIHRoZSBjb2x1bW4gbGlzdCAqLwor CQlpZiAoY29sdW1ucyAhPSBOVUxMICYmICFibXNfaXNfbWVtYmVyKGF0dC0+YXR0bnVtLCBj b2x1bW5zKSkKKwkJCWNvbnRpbnVlOworCiAJCU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShj dHgsIGZhbHNlKTsKIAkJbG9naWNhbHJlcF93cml0ZV90eXAoY3R4LT5vdXQsIHhpZCwgYXR0 LT5hdHR0eXBpZCk7CiAJCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgZmFsc2UpOwogCX0KIAog CU91dHB1dFBsdWdpblByZXBhcmVXcml0ZShjdHgsIGZhbHNlKTsKLQlsb2dpY2FscmVwX3dy aXRlX3JlbChjdHgtPm91dCwgeGlkLCByZWxhdGlvbik7CisJbG9naWNhbHJlcF93cml0ZV9y ZWwoY3R4LT5vdXQsIHhpZCwgcmVsYXRpb24sIGNvbHVtbnMpOwogCU91dHB1dFBsdWdpbldy aXRlKGN0eCwgZmFsc2UpOwogfQogCkBAIC04MjMsMjEgKzg0OCwyMSBAQCBwZ291dHB1dF9y b3dfZmlsdGVyX2luaXQoUEdPdXRwdXREYXRhICpkYXRhLCBMaXN0ICpwdWJsaWNhdGlvbnMs CiAJewogCQlSZWxhdGlvbglyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihlbnRy eS0+cHVibGlzaF9hc19yZWxpZCk7CiAKLQkJQXNzZXJ0KGVudHJ5LT5jYWNoZV9leHByX2N4 dCA9PSBOVUxMKTsKKwkJQXNzZXJ0KGVudHJ5LT5lbnRyeV9jeHQgPT0gTlVMTCk7CiAKLQkJ LyogQ3JlYXRlIHRoZSBtZW1vcnkgY29udGV4dCBmb3Igcm93IGZpbHRlcnMgKi8KLQkJZW50 cnktPmNhY2hlX2V4cHJfY3h0ID0gQWxsb2NTZXRDb250ZXh0Q3JlYXRlKGRhdGEtPmNhY2hl Y3R4LAotCQkJCQkJCQkJCQkJCSAgIlJvdyBmaWx0ZXIgZXhwcmVzc2lvbnMiLAotCQkJCQkJ CQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCS8qIENyZWF0ZSB0aGUgbWVt b3J5IGNvbnRleHQgZm9yIGVudHJ5IGRhdGEgKHJvdyBmaWx0ZXJzLCAuLi4pICovCisJCWVu dHJ5LT5lbnRyeV9jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoZGF0YS0+Y2FjaGVjdHgs CisJCQkJCQkJCQkJCQkJICAiZW50cnkgcHJpdmF0ZSBjb250ZXh0IiwKKwkJCQkJCQkJCQkJ CQkgIEFMTE9DU0VUX1NNQUxMX1NJWkVTKTsKIAotCQlNZW1vcnlDb250ZXh0Q29weUFuZFNl dElkZW50aWZpZXIoZW50cnktPmNhY2hlX2V4cHJfY3h0LAorCQlNZW1vcnlDb250ZXh0Q29w eUFuZFNldElkZW50aWZpZXIoZW50cnktPmVudHJ5X2N4dCwKIAkJCQkJCQkJCQkgIFJlbGF0 aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CiAKIAkJLyoKIAkJICogTm93IGFsbCB0 aGUgZmlsdGVycyBmb3IgYWxsIHB1YmFjdGlvbnMgYXJlIGtub3duLiBDb21iaW5lIHRoZW0g d2hlbgogCQkgKiB0aGVpciBwdWJhY3Rpb25zIGFyZSB0aGUgc2FtZS4KIAkJICovCi0JCW9s ZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhlbnRyeS0+Y2FjaGVfZXhwcl9jeHQpOwor CQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZW50cnktPmVudHJ5X2N4dCk7CiAJ CWVudHJ5LT5lc3RhdGUgPSBjcmVhdGVfZXN0YXRlX2Zvcl9yZWxhdGlvbihyZWxhdGlvbik7 CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgTlVNX1JPV0ZJTFRFUl9QVUJBQ1RJT05TOyBpZHgr KykKIAkJewpAQCAtODYwLDYgKzg4NSwxMjQgQEAgcGdvdXRwdXRfcm93X2ZpbHRlcl9pbml0 KFBHT3V0cHV0RGF0YSAqZGF0YSwgTGlzdCAqcHVibGljYXRpb25zLAogCX0KIH0KIAorLyoK KyAqIEluaXRpYWxpemUgdGhlIGNvbHVtbiBmaWx0ZXIuCisgKi8KK3N0YXRpYyB2b2lkCitw Z291dHB1dF9jb2x1bW5fZmlsdGVyX2luaXQoUEdPdXRwdXREYXRhICpkYXRhLCBMaXN0ICpw dWJsaWNhdGlvbnMsCisJCQkJCQkJUmVsYXRpb25TeW5jRW50cnkgKmVudHJ5KQoreworCUxp c3RDZWxsICAgKmxjOworCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCisJLyoKKwkgKiBGaW5k IGlmIHRoZXJlIGFyZSBhbnkgcm93IGZpbHRlcnMgZm9yIHRoaXMgcmVsYXRpb24uIElmIHRo ZXJlIGFyZSwgdGhlbgorCSAqIHByZXBhcmUgdGhlIG5lY2Vzc2FyeSBFeHByU3RhdGUgYW5k IGNhY2hlIGl0IGluIGVudHJ5LT5leHByc3RhdGUuIFRvCisJICogYnVpbGQgYW4gZXhwcmVz c2lvbiBzdGF0ZSwgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGZvbGxvd2luZzoKKwkgKgorCSAq IEFsbCB0aGUgZ2l2ZW4gcHVibGljYXRpb24tdGFibGUgbWFwcGluZ3MgbXVzdCBiZSBjaGVj a2VkLgorCSAqCisJICogTXVsdGlwbGUgcHVibGljYXRpb25zIG1pZ2h0IGhhdmUgbXVsdGlw bGUgcm93IGZpbHRlcnMgZm9yIHRoaXMKKwkgKiByZWxhdGlvbi4gU2luY2Ugcm93IGZpbHRl ciB1c2FnZSBkZXBlbmRzIG9uIHRoZSBETUwgb3BlcmF0aW9uLCB0aGVyZQorCSAqIGFyZSBt dWx0aXBsZSBsaXN0cyAob25lIGZvciBlYWNoIG9wZXJhdGlvbikgdG8gd2hpY2ggcm93IGZp bHRlcnMgd2lsbAorCSAqIGJlIGFwcGVuZGVkLgorCSAqCisJICogRk9SIEFMTCBUQUJMRVMg aW1wbGllcyAiZG9uJ3QgdXNlIHJvdyBmaWx0ZXIgZXhwcmVzc2lvbiIgc28gaXQgdGFrZXMK KwkgKiBwcmVjZWRlbmNlLgorCSAqLworCWZvcmVhY2gobGMsIHB1YmxpY2F0aW9ucykKKwl7 CisJCVB1YmxpY2F0aW9uICpwdWIgPSBsZmlyc3QobGMpOworCQlIZWFwVHVwbGUJY2Z0dXBs ZSA9IE5VTEw7CisJCURhdHVtCQljZmRhdHVtID0gMDsKKwkJYm9vbAkJcHViX25vX2ZpbHRl ciA9IGZhbHNlOworCisJCWlmIChwdWItPmFsbHRhYmxlcykKKwkJeworCQkJLyoKKwkJCSAq IElmIHRoZSBwdWJsaWNhdGlvbiBpcyBGT1IgQUxMIFRBQkxFUyB0aGVuIGl0IGlzIHRyZWF0 ZWQgdGhlCisJCQkgKiBzYW1lIGFzIGlmIHRoaXMgdGFibGUgaGFzIG5vIHJvdyBmaWx0ZXJz IChldmVuIGlmIGZvciBvdGhlcgorCQkJICogcHVibGljYXRpb25zIGl0IGRvZXMpLgorCQkJ ICovCisJCQlwdWJfbm9fZmlsdGVyID0gdHJ1ZTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8q CisJCQkgKiBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGEgcm93IGZpbHRlciBpbiB0aGlz IHB1YmxpY2F0aW9uLgorCQkJICovCisJCQljZnR1cGxlID0gU2VhcmNoU3lzQ2FjaGUyKFBV QkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGVudHJ5LT5w dWJsaXNoX2FzX3JlbGlkKSwKKwkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShwdWItPm9p ZCkpOworCisJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZChjZnR1cGxlKSkKKwkJCXsKKwkJCQkv KiBOdWxsIGluZGljYXRlcyBubyBmaWx0ZXIuICovCisJCQkJY2ZkYXR1bSA9IFN5c0NhY2hl R2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgY2Z0dXBsZSwKKwkJCQkJCQkJCQkgIEFudW1f cGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMsCisJCQkJCQkJCQkJICAmcHViX25vX2ZpbHRl cik7CisKKwkJCQkvKgorCQkJCSAqIFdoZW4gbm8gY29sdW1uIGxpc3QgaXMgZGVmaW5lZCwg c28gcHVibGlzaCBhbGwgY29sdW1ucy4KKwkJCQkgKiBPdGhlcndpc2UgbWVyZ2UgdGhlIGNv bHVtbnMgdG8gdGhlIGNvbHVtbiBsaXN0LgorCQkJCSAqLworCQkJCWlmICghcHViX25vX2Zp bHRlcikJLyogd2hlbiBub3QgbnVsbCAqLworCQkJCXsKKwkJCQkJQXJyYXlUeXBlICAqYXJy OworCQkJCQlpbnQJCQluZWxlbXM7CisJCQkJCWludDE2CSAgICplbGVtczsKKworCQkJCQlh cnIgPSBEYXR1bUdldEFycmF5VHlwZVAoY2ZkYXR1bSk7CisJCQkJCW5lbGVtcyA9IEFSUl9E SU1TKGFycilbMF07CisJCQkJCWVsZW1zID0gKGludDE2ICopIEFSUl9EQVRBX1BUUihhcnIp OworCisJCQkJCS8qCisJCQkJCSAqIElmIHRoZSBtZW1vcnkgY29udGV4dCBmb3IgdGhlIGVu dHJ5IGRvZXMgbm90IGV4aXN0IHlldCwKKwkJCQkJICogY3JlYXRlIGl0IG5vdy4gSXQgbWF5 IGFscmVhZHkgZXhpc3QgaWYgdGhlIHJlbGF0aW9uIGhhcworCQkJCQkgKiBhIHJvdyBmaWx0 ZXIuCisJCQkJCSAqLworCQkJCQlpZiAoIWVudHJ5LT5lbnRyeV9jeHQpCisJCQkJCXsKKwkJ CQkJCVJlbGF0aW9uCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKGVudHJ5LT5w dWJsaXNoX2FzX3JlbGlkKTsKKworCQkJCQkJZW50cnktPmVudHJ5X2N4dCA9IEFsbG9jU2V0 Q29udGV4dENyZWF0ZShkYXRhLT5jYWNoZWN0eCwKKwkJCQkJCQkJCQkJCQkJCQkgImVudHJ5 IHByaXZhdGUgY29udGV4dCIsCisJCQkJCQkJCQkJCQkJCQkJIEFMTE9DU0VUX1NNQUxMX1NJ WkVTKTsKKworCQkJCQkJTWVtb3J5Q29udGV4dENvcHlBbmRTZXRJZGVudGlmaWVyKGVudHJ5 LT5lbnRyeV9jeHQsCisJCQkJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo cmVsYXRpb24pKTsKKwkJCQkJfQorCisJCQkJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhlbnRyeS0+ZW50cnlfY3h0KTsKKwkJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuZWxl bXM7IGkrKykKKwkJCQkJCWVudHJ5LT5jb2x1bW5zID0gYm1zX2FkZF9tZW1iZXIoZW50cnkt PmNvbHVtbnMsCisJCQkJCQkJCQkJCQkJCWVsZW1zW2ldKTsKKwkJCQkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGN0eCk7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXB1 Yl9ub19maWx0ZXIgPSB0cnVlOworCQkJfQorCQl9CisKKwkJLyogZm91bmQgcHVibGljYXRp b24gd2l0aCBubyBmaWx0ZXIsIHNvIHdlJ3JlIGRvbmUgKi8KKwkJaWYgKHB1Yl9ub19maWx0 ZXIpCisJCXsKKwkJCWlmIChjZnR1cGxlKQorCQkJCVJlbGVhc2VTeXNDYWNoZShjZnR1cGxl KTsKKworCQkJYm1zX2ZyZWUoZW50cnktPmNvbHVtbnMpOworCQkJZW50cnktPmNvbHVtbnMg PSBOVUxMOworCisJCQlicmVhazsKKwkJfQorCisJCVJlbGVhc2VTeXNDYWNoZShjZnR1cGxl KTsKKwl9CQkJCQkJCS8qIGxvb3AgYWxsIHN1YnNjcmliZWQgcHVibGljYXRpb25zICovCisK K30KKwogLyoKICAqIEluaXRpYWxpemUgdGhlIHNsb3QgZm9yIHN0b3JpbmcgbmV3IGFuZCBv bGQgdHVwbGVzLCBhbmQgYnVpbGQgdGhlIG1hcCB0aGF0CiAgKiB3aWxsIGJlIHVzZWQgdG8g Y29udmVydCB0aGUgcmVsYXRpb24ncyB0dXBsZXMgaW50byB0aGUgYW5jZXN0b3IncyBmb3Jt YXQuCkBAIC0xMjI0LDcgKzEzNjcsNyBAQCBwZ291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29k aW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIAkJCU91dHB1dFBs dWdpblByZXBhcmVXcml0ZShjdHgsIHRydWUpOwogCQkJbG9naWNhbHJlcF93cml0ZV9pbnNl cnQoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLCBuZXdfc2xvdCwKLQkJCQkJCQkJCWRhdGEt PmJpbmFyeSk7CisJCQkJCQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsK IAkJCU91dHB1dFBsdWdpbldyaXRlKGN0eCwgdHJ1ZSk7CiAJCQlicmVhazsKIAkJY2FzZSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgpAQCAtMTI3OCwxMSArMTQyMSwxMyBAQCBw Z291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQl7CiAJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5T RVJUOgogCQkJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChjdHgtPm91dCwgeGlkLCB0YXJn ZXRyZWwsCi0JCQkJCQkJCQkJCW5ld19zbG90LCBkYXRhLT5iaW5hcnkpOworCQkJCQkJCQkJ CQluZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJCQlyZWxlbnRyeS0+Y29sdW1u cyk7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX1VQREFU RToKIAkJCQkJbG9naWNhbHJlcF93cml0ZV91cGRhdGUoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0 cmVsLAotCQkJCQkJCQkJCQlvbGRfc2xvdCwgbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSk7CisJ CQkJCQkJCQkJCW9sZF9zbG90LCBuZXdfc2xvdCwgZGF0YS0+YmluYXJ5LAorCQkJCQkJCQkJ CQlyZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX0RFTEVURToKIAkJCQkJbG9naWNhbHJlcF93cml0ZV9kZWxldGUoY3R4 LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLApAQCAtMTcyOSw4ICsxODc0LDkgQEAgZ2V0X3JlbF9z eW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24gcmVsYXRpb24pCiAJCWVu dHJ5LT5uZXdfc2xvdCA9IE5VTEw7CiAJCWVudHJ5LT5vbGRfc2xvdCA9IE5VTEw7CiAJCW1l bXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnktPmV4cHJzdGF0ZSkpOwot CQllbnRyeS0+Y2FjaGVfZXhwcl9jeHQgPSBOVUxMOworCQllbnRyeS0+ZW50cnlfY3h0ID0g TlVMTDsKIAkJZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQgPSBJbnZhbGlkT2lkOworCQllbnRy eS0+Y29sdW1ucyA9IE5VTEw7CiAJCWVudHJ5LT5hdHRybWFwID0gTlVMTDsKIAl9CiAKQEAg LTE3NzYsNiArMTkyMiw4IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEgKmRh dGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQllbnRyeS0+c2NoZW1hX3NlbnQgPSBmYWxzZTsK IAkJbGlzdF9mcmVlKGVudHJ5LT5zdHJlYW1lZF90eG5zKTsKIAkJZW50cnktPnN0cmVhbWVk X3R4bnMgPSBOSUw7CisJCWJtc19mcmVlKGVudHJ5LT5jb2x1bW5zKTsKKwkJZW50cnktPmNv bHVtbnMgPSBOVUxMOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJpbnNlcnQgPSBmYWxzZTsK IAkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJh Y3Rpb25zLnB1YmRlbGV0ZSA9IGZhbHNlOwpAQCAtMTc5OSwxNyArMTk0NywxOCBAQCBnZXRf cmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikK IAkJLyoKIAkJICogUm93IGZpbHRlciBjYWNoZSBjbGVhbnVwcy4KIAkJICovCi0JCWlmIChl bnRyeS0+Y2FjaGVfZXhwcl9jeHQpCi0JCQlNZW1vcnlDb250ZXh0RGVsZXRlKGVudHJ5LT5j YWNoZV9leHByX2N4dCk7CisJCWlmIChlbnRyeS0+ZW50cnlfY3h0KQorCQkJTWVtb3J5Q29u dGV4dERlbGV0ZShlbnRyeS0+ZW50cnlfY3h0KTsKIAotCQllbnRyeS0+Y2FjaGVfZXhwcl9j eHQgPSBOVUxMOworCQllbnRyeS0+ZW50cnlfY3h0ID0gTlVMTDsKIAkJZW50cnktPmVzdGF0 ZSA9IE5VTEw7CiAJCW1lbXNldChlbnRyeS0+ZXhwcnN0YXRlLCAwLCBzaXplb2YoZW50cnkt PmV4cHJzdGF0ZSkpOwogCiAJCS8qCiAJCSAqIEJ1aWxkIHB1YmxpY2F0aW9uIGNhY2hlLiBX ZSBjYW4ndCB1c2Ugb25lIHByb3ZpZGVkIGJ5IHJlbGNhY2hlIGFzCi0JCSAqIHJlbGNhY2hl IGNvbnNpZGVycyBhbGwgcHVibGljYXRpb25zIGdpdmVuIHJlbGF0aW9uIGlzIGluLCBidXQg aGVyZQotCQkgKiB3ZSBvbmx5IG5lZWQgdG8gY29uc2lkZXIgb25lcyB0aGF0IHRoZSBzdWJz Y3JpYmVyIHJlcXVlc3RlZC4KKwkJICogcmVsY2FjaGUgY29uc2lkZXJzIGFsbCBwdWJsaWNh dGlvbnMgdGhhdCB0aGUgZ2l2ZW4gcmVsYXRpb24gaXMgaW4sCisJCSAqIGJ1dCBoZXJlIHdl IG9ubHkgbmVlZCB0byBjb25zaWRlciBvbmVzIHRoYXQgdGhlIHN1YnNjcmliZXIKKwkJICog cmVxdWVzdGVkLgogCQkgKi8KIAkJZm9yZWFjaChsYywgZGF0YS0+cHVibGljYXRpb25zKQog CQl7CkBAIC0xODc4LDYgKzIwMjcsOSBAQCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXRE YXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJCX0KIAogCQkJLyoKKwkJCSAqIElm IHRoZSByZWxhdGlvbiBpcyB0byBiZSBwdWJsaXNoZWQsIGRldGVybWluZSBhY3Rpb25zIHRv CisJCQkgKiBwdWJsaXNoLCBhbmQgbGlzdCBvZiBjb2x1bW5zLCBpZiBhcHByb3ByaWF0ZS4K KwkJCSAqCiAJCQkgKiBEb24ndCBwdWJsaXNoIGNoYW5nZXMgZm9yIHBhcnRpdGlvbmVkIHRh YmxlcywgYmVjYXVzZQogCQkJICogcHVibGlzaGluZyB0aG9zZSBvZiBpdHMgcGFydGl0aW9u cyBzdWZmaWNlcywgdW5sZXNzIHBhcnRpdGlvbgogCQkJICogY2hhbmdlcyB3b24ndCBiZSBw dWJsaXNoZWQgZHVlIHRvIHB1YnZpYXJvb3QgYmVpbmcgc2V0LgpAQCAtMTkzOCw2ICsyMDkw LDkgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRpb24g cmVsYXRpb24pCiAKIAkJCS8qIEluaXRpYWxpemUgdGhlIHJvdyBmaWx0ZXIgKi8KIAkJCXBn b3V0cHV0X3Jvd19maWx0ZXJfaW5pdChkYXRhLCByZWxfcHVibGljYXRpb25zLCBlbnRyeSk7 CisKKwkJCS8qIEluaXRpYWxpemUgdGhlIGNvbHVtbiBmaWx0ZXIgKi8KKwkJCXBnb3V0cHV0 X2NvbHVtbl9maWx0ZXJfaW5pdChkYXRhLCByZWxfcHVibGljYXRpb25zLCBlbnRyeSk7CiAJ CX0KIAogCQlsaXN0X2ZyZWUocHViaWRzKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNo ZS5jCmluZGV4IGZjY2ZmY2U1NzI5Li5hMmRhNzJmMGQ0OCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jCkBAIC01NTUzLDYgKzU1NTMsOCBAQCBSZWxhdGlvbkJ1aWxkUHVi bGljYXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRl c2MpCiAJCW1lbXNldChwdWJkZXNjLCAwLCBzaXplb2YoUHVibGljYXRpb25EZXNjKSk7CiAJ CXB1YmRlc2MtPnJmX3ZhbGlkX2Zvcl91cGRhdGUgPSB0cnVlOwogCQlwdWJkZXNjLT5yZl92 YWxpZF9mb3JfZGVsZXRlID0gdHJ1ZTsKKwkJcHViZGVzYy0+Y29sc192YWxpZF9mb3JfdXBk YXRlID0gdHJ1ZTsKKwkJcHViZGVzYy0+Y29sc192YWxpZF9mb3JfZGVsZXRlID0gdHJ1ZTsK IAkJcmV0dXJuOwogCX0KIApAQCAtNTU2NSw2ICs1NTY3LDggQEAgUmVsYXRpb25CdWlsZFB1 YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJk ZXNjKQogCW1lbXNldChwdWJkZXNjLCAwLCBzaXplb2YoUHVibGljYXRpb25EZXNjKSk7CiAJ cHViZGVzYy0+cmZfdmFsaWRfZm9yX3VwZGF0ZSA9IHRydWU7CiAJcHViZGVzYy0+cmZfdmFs aWRfZm9yX2RlbGV0ZSA9IHRydWU7CisJcHViZGVzYy0+Y29sc192YWxpZF9mb3JfdXBkYXRl ID0gdHJ1ZTsKKwlwdWJkZXNjLT5jb2xzX3ZhbGlkX2Zvcl9kZWxldGUgPSB0cnVlOwogCiAJ LyogRmV0Y2ggdGhlIHB1YmxpY2F0aW9uIG1lbWJlcnNoaXAgaW5mby4gKi8KIAlwdWJvaWRz ID0gR2V0UmVsYXRpb25QdWJsaWNhdGlvbnMocmVsaWQpOwpAQCAtNTYxNiw3ICs1NjIwLDcg QEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVi bGljYXRpb25EZXNjICpwdWJkZXNjKQogCQkgKi8KIAkJaWYgKCFwdWJmb3JtLT5wdWJhbGx0 YWJsZXMgJiYKIAkJCShwdWJmb3JtLT5wdWJ1cGRhdGUgfHwgcHViZm9ybS0+cHViZGVsZXRl KSAmJgotCQkJY29udGFpbl9pbnZhbGlkX3JmY29sdW1uKHB1YmlkLCByZWxhdGlvbiwgYW5j ZXN0b3JzLAorCQkJcHViX3JmX2NvbnRhaW5zX2ludmFsaWRfY29sdW1uKHB1YmlkLCByZWxh dGlvbiwgYW5jZXN0b3JzLAogCQkJCQkJCQkJIHB1YmZvcm0tPnB1YnZpYXJvb3QpKQogCQl7 CiAJCQlpZiAocHViZm9ybS0+cHVidXBkYXRlKQpAQCAtNTYyNSw2ICs1NjI5LDIzIEBAIFJl bGF0aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1YmxpY2F0 aW9uRGVzYyAqcHViZGVzYykKIAkJCQlwdWJkZXNjLT5yZl92YWxpZF9mb3JfZGVsZXRlID0g ZmFsc2U7CiAJCX0KIAorCQkvKgorCQkgKiBDaGVjayBpZiBhbGwgY29sdW1ucyBhcmUgcGFy dCBvZiB0aGUgUkVQTElDQSBJREVOVElUWSBpbmRleCBvciBub3QuCisJCSAqCisJCSAqIElm IHRoZSBwdWJsaWNhdGlvbiBpcyBGT1IgQUxMIFRBQkxFUyB0aGVuIGl0IG1lYW5zIHRoZSB0 YWJsZSBoYXMgbm8KKwkJICogY29sdW1uIGxpc3QgYW5kIHdlIGNhbiBza2lwIHRoZSB2YWxp ZGF0aW9uLgorCQkgKi8KKwkJaWYgKCFwdWJmb3JtLT5wdWJhbGx0YWJsZXMgJiYKKwkJCShw dWJmb3JtLT5wdWJ1cGRhdGUgfHwgcHViZm9ybS0+cHViZGVsZXRlKSAmJgorCQkJcHViX2Nv bGxpc3RfY29udGFpbnNfaW52YWxpZF9jb2x1bW4ocHViaWQsIHJlbGF0aW9uLCBhbmNlc3Rv cnMsCisJCQkJCQkJCQkgcHViZm9ybS0+cHVidmlhcm9vdCkpCisJCXsKKwkJCWlmIChwdWJm b3JtLT5wdWJ1cGRhdGUpCisJCQkJcHViZGVzYy0+Y29sc192YWxpZF9mb3JfdXBkYXRlID0g ZmFsc2U7CisJCQlpZiAocHViZm9ybS0+cHViZGVsZXRlKQorCQkJCXB1YmRlc2MtPmNvbHNf dmFsaWRfZm9yX2RlbGV0ZSA9IGZhbHNlOworCQl9CisKIAkJUmVsZWFzZVN5c0NhY2hlKHR1 cCk7CiAKIAkJLyoKQEAgLTU2MzYsNiArNTY1NywxNiBAQCBSZWxhdGlvbkJ1aWxkUHVibGlj YXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2MgKnB1YmRlc2Mp CiAJCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSAmJiBwdWJkZXNjLT5wdWJhY3Rp b25zLnB1YnRydW5jYXRlICYmCiAJCQkhcHViZGVzYy0+cmZfdmFsaWRfZm9yX3VwZGF0ZSAm JiAhcHViZGVzYy0+cmZfdmFsaWRfZm9yX2RlbGV0ZSkKIAkJCWJyZWFrOworCisJCS8qCisJ CSAqIElmIHdlIGtub3cgZXZlcnl0aGluZyBpcyByZXBsaWNhdGVkIGFuZCB0aGUgY29sdW1u IGxpc3QgaXMgaW52YWxpZAorCQkgKiBmb3IgdXBkYXRlIGFuZCBkZWxldGUsIHRoZXJlIGlz IG5vIHBvaW50IHRvIGNoZWNrIGZvciBvdGhlcgorCQkgKiBwdWJsaWNhdGlvbnMuCisJCSAq LworCQlpZiAocHViZGVzYy0+cHViYWN0aW9ucy5wdWJpbnNlcnQgJiYgcHViZGVzYy0+cHVi YWN0aW9ucy5wdWJ1cGRhdGUgJiYKKwkJCXB1YmRlc2MtPnB1YmFjdGlvbnMucHViZGVsZXRl ICYmIHB1YmRlc2MtPnB1YmFjdGlvbnMucHVidHJ1bmNhdGUgJiYKKwkJCSFwdWJkZXNjLT5j b2xzX3ZhbGlkX2Zvcl91cGRhdGUgJiYgIXB1YmRlc2MtPmNvbHNfdmFsaWRfZm9yX2RlbGV0 ZSkKKwkJCWJyZWFrOwogCX0KIAogCWlmIChyZWxhdGlvbi0+cmRfcHViZGVzYykKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMgYi9zcmMvYmluL3BnX2R1bXAvcGdf ZHVtcC5jCmluZGV4IDcyNWNkMmU0ZWJjLi5iZTQwYWNkM2UzNyAxMDA2NDQKLS0tIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXAuYworKysgYi9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5j CkBAIC00MTAxLDYgKzQxMDEsNyBAQCBnZXRQdWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpm b3V0LCBUYWJsZUluZm8gdGJsaW5mb1tdLCBpbnQgbnVtVGFibGVzKQogCWludAkJCWlfcHJw dWJpZDsKIAlpbnQJCQlpX3BycmVsaWQ7CiAJaW50CQkJaV9wcnJlbHF1YWw7CisJaW50CQkJ aV9wcmF0dHJzOwogCWludAkJCWksCiAJCQkJaiwKIAkJCQludHVwczsKQEAgLTQxMTQsMTIg KzQxMTUsMjAgQEAgZ2V0UHVibGljYXRpb25UYWJsZXMoQXJjaGl2ZSAqZm91dCwgVGFibGVJ bmZvIHRibGluZm9bXSwgaW50IG51bVRhYmxlcykKIAlpZiAoZm91dC0+cmVtb3RlVmVyc2lv biA+PSAxNTAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LAogCQkJCQkJCSAi U0VMRUNUIHRhYmxlb2lkLCBvaWQsIHBycHViaWQsIHBycmVsaWQsICIKLQkJCQkJCQkgInBn X2NhdGFsb2cucGdfZ2V0X2V4cHIocHJxdWFsLCBwcnJlbGlkKSBBUyBwcnJlbHF1YWwgIgot CQkJCQkJCSAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uX3JlbCIpOworCQkJCQkJ CSAicGdfY2F0YWxvZy5wZ19nZXRfZXhwcihwcnF1YWwsIHBycmVsaWQpIEFTIHBycmVscXVh bCwgIgorCQkJCQkJCSAiKENBU0VcbiIKKwkJCQkJCQkgIiAgV0hFTiBwci5wcmF0dHJzIElT IE5PVCBOVUxMIFRIRU5cbiIKKwkJCQkJCQkgIiAgICAoU0VMRUNUIGFycmF5X2FnZyhhdHRu YW1lKVxuIgorCQkJCQkJCSAiICAgICAgIEZST01cbiIKKwkJCQkJCQkgIiAgICAgICAgIHBn X2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzKDAsIHBnX2NhdGFsb2cuYXJyYXlfdXBwZXIocHIu cHJhdHRyczo6cGdfY2F0YWxvZy5pbnQyW10sIDEpKSBzLFxuIgorCQkJCQkJCSAiICAgICAg ICAgcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGVcbiIKKwkJCQkJCQkgIiAgICAgIFdIRVJFIGF0 dHJlbGlkID0gcHIucHJyZWxpZCBBTkQgYXR0bnVtID0gcHJhdHRyc1tzXSlcbiIKKwkJCQkJ CQkgIiAgRUxTRSBOVUxMIEVORCkgcHJhdHRycyAiCisJCQkJCQkJICJGUk9NIHBnX2NhdGFs b2cucGdfcHVibGljYXRpb25fcmVsIHByIik7CiAJZWxzZQogCQlhcHBlbmRQUUV4cEJ1ZmZl clN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCB0YWJsZW9pZCwgb2lkLCBwcnB1YmlkLCBw cnJlbGlkLCAiCi0JCQkJCQkJICJOVUxMIEFTIHBycmVscXVhbCAiCisJCQkJCQkJICJOVUxM IEFTIHBycmVscXVhbCwgTlVMTCBBUyBwcmF0dHJzICIKIAkJCQkJCQkgIkZST00gcGdfY2F0 YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwiKTsKIAlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91 dCwgcXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7CiAKQEAgLTQxMzAsNiArNDEzOSw3 IEBAIGdldFB1YmxpY2F0aW9uVGFibGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0Ymxp bmZvW10sIGludCBudW1UYWJsZXMpCiAJaV9wcnB1YmlkID0gUFFmbnVtYmVyKHJlcywgInBy cHViaWQiKTsKIAlpX3BycmVsaWQgPSBQUWZudW1iZXIocmVzLCAicHJyZWxpZCIpOwogCWlf cHJyZWxxdWFsID0gUFFmbnVtYmVyKHJlcywgInBycmVscXVhbCIpOworCWlfcHJhdHRycyA9 IFBRZm51bWJlcihyZXMsICJwcmF0dHJzIik7CiAKIAkvKiB0aGlzIGFsbG9jYXRpb24gbWF5 IGJlIG1vcmUgdGhhbiB3ZSBuZWVkICovCiAJcHVicmluZm8gPSBwZ19tYWxsb2MobnR1cHMg KiBzaXplb2YoUHVibGljYXRpb25SZWxJbmZvKSk7CkBAIC00MTc1LDYgKzQxODUsMjggQEAg Z2V0UHVibGljYXRpb25UYWJsZXMoQXJjaGl2ZSAqZm91dCwgVGFibGVJbmZvIHRibGluZm9b XSwgaW50IG51bVRhYmxlcykKIAkJZWxzZQogCQkJcHVicmluZm9bal0ucHVicmVscXVhbCA9 IHBnX3N0cmR1cChQUWdldHZhbHVlKHJlcywgaSwgaV9wcnJlbHF1YWwpKTsKIAorCQlpZiAo IVBRZ2V0aXNudWxsKHJlcywgaSwgaV9wcmF0dHJzKSkKKwkJeworCQkJY2hhcgkgICoqYXR0 bmFtZXM7CisJCQlpbnQJCQluYXR0bmFtZXM7CisJCQlQUUV4cEJ1ZmZlciBhdHRyaWJzOwor CisJCQlpZiAoIXBhcnNlUEdBcnJheShQUWdldHZhbHVlKHJlcywgaSwgaV9wcmF0dHJzKSwK KwkJCQkJCQkgICZhdHRuYW1lcywgJm5hdHRuYW1lcykpCisJCQkJZmF0YWwoImNvdWxkIG5v dCBwYXJzZSAlcyBhcnJheSIsICJwcmF0dHJzIik7CisJCQlhdHRyaWJzID0gY3JlYXRlUFFF eHBCdWZmZXIoKTsKKwkJCWZvciAoaW50IGsgPSAwOyBrIDwgbmF0dG5hbWVzOyBrKyspCisJ CQl7CisJCQkJaWYgKGsgPiAwKQorCQkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihhdHRyaWJz LCAiLCAiKTsKKworCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKGF0dHJpYnMsIGZtdElkKGF0 dG5hbWVzW2tdKSk7CisJCQl9CisJCQlwdWJyaW5mb1tqXS5wdWJyYXR0cnMgPSBhdHRyaWJz LT5kYXRhOworCQl9CisJCWVsc2UKKwkJCXB1YnJpbmZvW2pdLnB1YnJhdHRycyA9IE5VTEw7 CisKIAkJLyogRGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBkdW1wIGl0ICovCiAJCXNlbGVj dER1bXBhYmxlUHVibGljYXRpb25PYmplY3QoJihwdWJyaW5mb1tqXS5kb2JqKSwgZm91dCk7 CiAKQEAgLTQyNDksMTAgKzQyODEsMTMgQEAgZHVtcFB1YmxpY2F0aW9uVGFibGUoQXJjaGl2 ZSAqZm91dCwgY29uc3QgUHVibGljYXRpb25SZWxJbmZvICpwdWJyaW5mbykKIAogCXF1ZXJ5 ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKIAotCWFwcGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LCAi QUxURVIgUFVCTElDQVRJT04gJXMgQUREIFRBQkxFIE9OTFkiLAorCWFwcGVuZFBRRXhwQnVm ZmVyKHF1ZXJ5LCAiQUxURVIgUFVCTElDQVRJT04gJXMgQUREIFRBQkxFIE9OTFkgIiwKIAkJ CQkJICBmbXRJZChwdWJpbmZvLT5kb2JqLm5hbWUpKTsKLQlhcHBlbmRQUUV4cEJ1ZmZlcihx dWVyeSwgIiAlcyIsCi0JCQkJCSAgZm10UXVhbGlmaWVkRHVtcGFibGUodGJpbmZvKSk7CisJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksIGZtdFF1YWxpZmllZER1bXBhYmxlKHRiaW5m bykpOworCisJaWYgKHB1YnJpbmZvLT5wdWJyYXR0cnMpCisJCWFwcGVuZFBRRXhwQnVmZmVy KHF1ZXJ5LCAiICglcykiLCBwdWJyaW5mby0+cHVicmF0dHJzKTsKKwogCWlmIChwdWJyaW5m by0+cHVicmVscXVhbCkKIAl7CiAJCS8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCA3NzJkYzBjZjdh Mi4uMWQyMWMyOTA2ZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgK KysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaApAQCAtNjMyLDYgKzYzMiw3IEBAIHR5 cGVkZWYgc3RydWN0IF9QdWJsaWNhdGlvblJlbEluZm8KIAlQdWJsaWNhdGlvbkluZm8gKnB1 YmxpY2F0aW9uOwogCVRhYmxlSW5mbyAgKnB1YnRhYmxlOwogCWNoYXIJICAgKnB1YnJlbHF1 YWw7CisJY2hhcgkgICAqcHVicmF0dHJzOwogfSBQdWJsaWNhdGlvblJlbEluZm87CiAKIC8q CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCBiL3NyYy9i aW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCmluZGV4IGZkMTA1MmU1ZGI4Li4wNWE3ZTI4 YmRjYyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKKysr IGIvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwKQEAgLTI0MjgsNiArMjQyOCwy OCBAQCBteSAldGVzdHMgPSAoCiAJCXVubGlrZSA9PiB7IGV4Y2x1ZGVfZHVtcF90ZXN0X3Nj aGVtYSA9PiAxLCB9LAogCX0sCiAKKwknQUxURVIgUFVCTElDQVRJT04gcHViMSBBREQgVEFC TEUgdGVzdF9zaXh0aF90YWJsZSAoY29sMywgY29sMiknID0+IHsKKwkJY3JlYXRlX29yZGVy ID0+IDUyLAorCQljcmVhdGVfc3FsID0+CisJCSAgJ0FMVEVSIFBVQkxJQ0FUSU9OIHB1YjEg QUREIFRBQkxFIGR1bXBfdGVzdC50ZXN0X3NpeHRoX3RhYmxlIChjb2wzLCBjb2wyKTsnLAor CQlyZWdleHAgPT4gcXIvXgorCQkJXFFBTFRFUiBQVUJMSUNBVElPTiBwdWIxIEFERCBUQUJM RSBPTkxZIGR1bXBfdGVzdC50ZXN0X3NpeHRoX3RhYmxlIChjb2wyLCBjb2wzKTtcRQorCQkJ L3htLAorCQlsaWtlID0+IHsgJWZ1bGxfcnVucywgc2VjdGlvbl9wb3N0X2RhdGEgPT4gMSwg fSwKKwkJdW5saWtlID0+IHsgZXhjbHVkZV9kdW1wX3Rlc3Rfc2NoZW1hID0+IDEsIH0sCisJ fSwKKworCSdBTFRFUiBQVUJMSUNBVElPTiBwdWIxIEFERCBUQUJMRSB0ZXN0X3NldmVudGhf dGFibGUgKGNvbDMsIGNvbDIpIFdIRVJFIChjb2wxID0gMSknID0+IHsKKwkJY3JlYXRlX29y ZGVyID0+IDUyLAorCQljcmVhdGVfc3FsID0+CisJCSAgJ0FMVEVSIFBVQkxJQ0FUSU9OIHB1 YjEgQUREIFRBQkxFIGR1bXBfdGVzdC50ZXN0X3NldmVudGhfdGFibGUgKGNvbDMsIGNvbDIp IFdIRVJFIChjb2wxID0gMSk7JywKKwkJcmVnZXhwID0+IHFyL14KKwkJCVxRQUxURVIgUFVC TElDQVRJT04gcHViMSBBREQgVEFCTEUgT05MWSBkdW1wX3Rlc3QudGVzdF9zZXZlbnRoX3Rh YmxlIChjb2wyLCBjb2wzKSBXSEVSRSAoKGNvbDEgPSAxKSk7XEUKKwkJCS94bSwKKwkJbGlr ZSA9PiB7ICVmdWxsX3J1bnMsIHNlY3Rpb25fcG9zdF9kYXRhID0+IDEsIH0sCisJCXVubGlr ZSA9PiB7IGV4Y2x1ZGVfZHVtcF90ZXN0X3NjaGVtYSA9PiAxLCB9LAorCX0sCisKIAknQUxU RVIgUFVCTElDQVRJT04gcHViMyBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgZHVtcF90ZXN0 JyA9PiB7CiAJCWNyZWF0ZV9vcmRlciA9PiA1MSwKIAkJY3JlYXRlX3NxbCA9PgpAQCAtMjc3 OCw2ICsyODAwLDQ0IEBAIG15ICV0ZXN0cyA9ICgKIAkJdW5saWtlID0+IHsgZXhjbHVkZV9k dW1wX3Rlc3Rfc2NoZW1hID0+IDEsIH0sCiAJfSwKIAorCSdDUkVBVEUgVEFCTEUgdGVzdF9z aXh0aF90YWJsZScgPT4geworCQljcmVhdGVfb3JkZXIgPT4gNiwKKwkJY3JlYXRlX3NxbCAg ID0+ICdDUkVBVEUgVEFCTEUgZHVtcF90ZXN0LnRlc3Rfc2l4dGhfdGFibGUgKAorCQkJCQkJ ICAgY29sMSBpbnQsCisJCQkJCQkgICBjb2wyIHRleHQsCisJCQkJCQkgICBjb2wzIGJ5dGVh CisJCQkJCSAgICk7JywKKwkJcmVnZXhwID0+IHFyL14KKwkJCVxRQ1JFQVRFIFRBQkxFIGR1 bXBfdGVzdC50ZXN0X3NpeHRoX3RhYmxlIChcRQorCQkJXG5ccytcUWNvbDEgaW50ZWdlcixc RQorCQkJXG5ccytcUWNvbDIgdGV4dCxcRQorCQkJXG5ccytcUWNvbDMgYnl0ZWFcRQorCQkJ XG5cKTsKKwkJCS94bSwKKwkJbGlrZSA9PgorCQkgIHsgJWZ1bGxfcnVucywgJWR1bXBfdGVz dF9zY2hlbWFfcnVucywgc2VjdGlvbl9wcmVfZGF0YSA9PiAxLCB9LAorCQl1bmxpa2UgPT4g eyBleGNsdWRlX2R1bXBfdGVzdF9zY2hlbWEgPT4gMSwgfSwKKwl9LAorCisJJ0NSRUFURSBU QUJMRSB0ZXN0X3NldmVudGhfdGFibGUnID0+IHsKKwkJY3JlYXRlX29yZGVyID0+IDYsCisJ CWNyZWF0ZV9zcWwgICA9PiAnQ1JFQVRFIFRBQkxFIGR1bXBfdGVzdC50ZXN0X3NldmVudGhf dGFibGUgKAorCQkJCQkJICAgY29sMSBpbnQsCisJCQkJCQkgICBjb2wyIHRleHQsCisJCQkJ CQkgICBjb2wzIGJ5dGVhCisJCQkJCSAgICk7JywKKwkJcmVnZXhwID0+IHFyL14KKwkJCVxR Q1JFQVRFIFRBQkxFIGR1bXBfdGVzdC50ZXN0X3NldmVudGhfdGFibGUgKFxFCisJCQlcblxz K1xRY29sMSBpbnRlZ2VyLFxFCisJCQlcblxzK1xRY29sMiB0ZXh0LFxFCisJCQlcblxzK1xR Y29sMyBieXRlYVxFCisJCQlcblwpOworCQkJL3htLAorCQlsaWtlID0+CisJCSAgeyAlZnVs bF9ydW5zLCAlZHVtcF90ZXN0X3NjaGVtYV9ydW5zLCBzZWN0aW9uX3ByZV9kYXRhID0+IDEs IH0sCisJCXVubGlrZSA9PiB7IGV4Y2x1ZGVfZHVtcF90ZXN0X3NjaGVtYSA9PiAxLCB9LAor CX0sCisKIAknQ1JFQVRFIFRBQkxFIHRlc3RfdGFibGVfaWRlbnRpdHknID0+IHsKIAkJY3Jl YXRlX29yZGVyID0+IDMsCiAJCWNyZWF0ZV9zcWwgICA9PiAnQ1JFQVRFIFRBQkxFIGR1bXBf dGVzdC50ZXN0X3RhYmxlX2lkZW50aXR5ICgKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9k ZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggOTkxYmZjMTU0NmIu Ljg4YmI3NWFjNjU4IDEwMDY0NAotLS0gYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYworKysg Yi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpAQCAtMjg5Miw2ICsyODkyLDcgQEAgZGVzY3Jp YmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQlwcmludGZQ UUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkJCQkgICJTRUxFQ1QgcHVibmFtZVxuIgogCQkJCQkJ CQkgICIJCSwgTlVMTFxuIgorCQkJCQkJCQkgICIJCSwgTlVMTFxuIgogCQkJCQkJCQkgICJG Uk9NIHBnX2NhdGFsb2cucGdfcHVibGljYXRpb24gcFxuIgogCQkJCQkJCQkgICIJCUpPSU4g cGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9uYW1lc3BhY2UgcG4gT04gcC5vaWQgPSBwbi5w bnB1YmlkXG4iCiAJCQkJCQkJCSAgIgkJSk9JTiBwZ19jYXRhbG9nLnBnX2NsYXNzIHBjIE9O IHBjLnJlbG5hbWVzcGFjZSA9IHBuLnBubnNwaWRcbiIKQEAgLTI4OTksNiArMjkwMCwxMiBA QCBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJ CQkJCQkgICJVTklPTlxuIgogCQkJCQkJCQkgICJTRUxFQ1QgcHVibmFtZVxuIgogCQkJCQkJ CQkgICIJCSwgcGdfZ2V0X2V4cHIocHIucHJxdWFsLCBjLm9pZClcbiIKKwkJCQkJCQkJICAi CQksIChDQVNFIFdIRU4gcHIucHJhdHRycyBJUyBOT1QgTlVMTCBUSEVOXG4iCisJCQkJCQkJ CSAgIgkJCShTRUxFQ1Qgc3RyaW5nX2FnZyhhdHRuYW1lLCAnLCAnKVxuIgorCQkJCQkJCQkg ICIJCQkgIEZST00gcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5h cnJheV91cHBlcihwci5wcmF0dHJzOjpwZ19jYXRhbG9nLmludDJbXSwgMSkpIHMsXG4iCisJ CQkJCQkJCSAgIgkJCQkgICBwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZVxuIgorCQkJCQkJCQkg ICIJCQkgV0hFUkUgYXR0cmVsaWQgPSBwci5wcnJlbGlkIEFORCBhdHRudW0gPSBwcmF0dHJz W3NdKVxuIgorCQkJCQkJCQkgICIJCSAgIEVMU0UgTlVMTCBFTkQpICIKIAkJCQkJCQkJICAi RlJPTSBwZ19jYXRhbG9nLnBnX3B1YmxpY2F0aW9uIHBcbiIKIAkJCQkJCQkJICAiCQlKT0lO IHBnX2NhdGFsb2cucGdfcHVibGljYXRpb25fcmVsIHByIE9OIHAub2lkID0gcHIucHJwdWJp ZFxuIgogCQkJCQkJCQkgICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBjIE9OIGMub2lk ID0gcHIucHJyZWxpZFxuIgpAQCAtMjkwNiw2ICsyOTEzLDcgQEAgZGVzY3JpYmVPbmVUYWJs ZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQkJCQkJICAiVU5JT05cbiIK IAkJCQkJCQkJICAiU0VMRUNUIHB1Ym5hbWVcbiIKIAkJCQkJCQkJICAiCQksIE5VTExcbiIK KwkJCQkJCQkJICAiCQksIE5VTExcbiIKIAkJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBn X3B1YmxpY2F0aW9uIHBcbiIKIAkJCQkJCQkJICAiV0hFUkUgcC5wdWJhbGx0YWJsZXMgQU5E IHBnX2NhdGFsb2cucGdfcmVsYXRpb25faXNfcHVibGlzaGFibGUoJyVzJylcbiIKIAkJCQkJ CQkJICAiT1JERVIgQlkgMTsiLApAQCAtMjkxNiwxMiArMjkyNCwxNCBAQCBkZXNjcmliZU9u ZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCXByaW50ZlBRRXhw QnVmZmVyKCZidWYsCiAJCQkJCQkJCSAgIlNFTEVDVCBwdWJuYW1lXG4iCiAJCQkJCQkJCSAg IgkJLCBOVUxMXG4iCisJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCiAJCQkJCQkJCSAgIkZST00g cGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBwXG4iCiAJCQkJCQkJCSAgIkpPSU4gcGdfY2F0 YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwgcHIgT04gcC5vaWQgPSBwci5wcnB1YmlkXG4iCiAJ CQkJCQkJCSAgIldIRVJFIHByLnBycmVsaWQgPSAnJXMnXG4iCiAJCQkJCQkJCSAgIlVOSU9O IEFMTFxuIgogCQkJCQkJCQkgICJTRUxFQ1QgcHVibmFtZVxuIgogCQkJCQkJCQkgICIJCSwg TlVMTFxuIgorCQkJCQkJCQkgICIJCSwgTlVMTFxuIgogCQkJCQkJCQkgICJGUk9NIHBnX2Nh dGFsb2cucGdfcHVibGljYXRpb24gcFxuIgogCQkJCQkJCQkgICJXSEVSRSBwLnB1YmFsbHRh YmxlcyBBTkQgcGdfY2F0YWxvZy5wZ19yZWxhdGlvbl9pc19wdWJsaXNoYWJsZSgnJXMnKVxu IgogCQkJCQkJCQkgICJPUkRFUiBCWSAxOyIsCkBAIC0yOTQzLDYgKzI5NTMsMTEgQEAgZGVz Y3JpYmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQlwcmlu dGZQUUV4cEJ1ZmZlcigmYnVmLCAiICAgIFwiJXNcIiIsCiAJCQkJCQkJCSAgUFFnZXR2YWx1 ZShyZXN1bHQsIGksIDApKTsKIAorCQkJCS8qIGNvbHVtbiBsaXN0IChpZiBhbnkpICovCisJ CQkJaWYgKCFQUWdldGlzbnVsbChyZXN1bHQsIGksIDIpKQorCQkJCQlhcHBlbmRQUUV4cEJ1 ZmZlcigmYnVmLCAiICglcykiLAorCQkJCQkJCQkJICBQUWdldHZhbHVlKHJlc3VsdCwgaSwg MikpOworCiAJCQkJLyogcm93IGZpbHRlciAoaWYgYW55KSAqLwogCQkJCWlmICghUFFnZXRp c251bGwocmVzdWx0LCBpLCAxKSkKIAkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwgIiBX SEVSRSAlcyIsCkBAIC01ODg4LDcgKzU5MDMsNyBAQCBsaXN0UHVibGljYXRpb25zKGNvbnN0 IGNoYXIgKnBhdHRlcm4pCiAgKi8KIHN0YXRpYyBib29sCiBhZGRGb290ZXJUb1B1YmxpY2F0 aW9uRGVzYyhQUUV4cEJ1ZmZlciBidWYsIGNoYXIgKmZvb3Rlcm1zZywKLQkJCQkJCSAgIGJv b2wgc2luZ2xlY29sLCBwcmludFRhYmxlQ29udGVudCAqY29udCkKKwkJCQkJCSAgIGJvb2wg YXNfc2NoZW1hLCBwcmludFRhYmxlQ29udGVudCAqY29udCkKIHsKIAlQR3Jlc3VsdCAgICpy ZXM7CiAJaW50CQkJY291bnQgPSAwOwpAQCAtNTkwNSwxNSArNTkyMCwxOSBAQCBhZGRGb290 ZXJUb1B1YmxpY2F0aW9uRGVzYyhQUUV4cEJ1ZmZlciBidWYsIGNoYXIgKmZvb3Rlcm1zZywK IAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogCXsKLQkJaWYgKCFzaW5nbGVjb2wp CisJCWlmIChhc19zY2hlbWEpCisJCQlwcmludGZQUUV4cEJ1ZmZlcihidWYsICIgICAgXCIl c1wiIiwgUFFnZXR2YWx1ZShyZXMsIGksIDApKTsKKwkJZWxzZQogCQl7CiAJCQlwcmludGZQ UUV4cEJ1ZmZlcihidWYsICIgICAgXCIlcy4lc1wiIiwgUFFnZXR2YWx1ZShyZXMsIGksIDAp LAogCQkJCQkJCSAgUFFnZXR2YWx1ZShyZXMsIGksIDEpKTsKKworCQkJaWYgKCFQUWdldGlz bnVsbChyZXMsIGksIDMpKQorCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIiAoJXMpIiwg UFFnZXR2YWx1ZShyZXMsIGksIDMpKTsKKwogCQkJaWYgKCFQUWdldGlzbnVsbChyZXMsIGks IDIpKQogCQkJCWFwcGVuZFBRRXhwQnVmZmVyKGJ1ZiwgIiBXSEVSRSAlcyIsIFBRZ2V0dmFs dWUocmVzLCBpLCAyKSk7CiAJCX0KLQkJZWxzZQotCQkJcHJpbnRmUFFFeHBCdWZmZXIoYnVm LCAiICAgIFwiJXNcIiIsIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSk7CiAKIAkJcHJpbnRUYWJs ZUFkZEZvb3Rlcihjb250LCBidWYtPmRhdGEpOwogCX0KQEAgLTYwNDIsMTEgKzYwNjEsMjIg QEAgZGVzY3JpYmVQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVybikKIAkJCXByaW50 ZlBRRXhwQnVmZmVyKCZidWYsCiAJCQkJCQkJICAiU0VMRUNUIG4ubnNwbmFtZSwgYy5yZWxu YW1lIik7CiAJCQlpZiAocHNldC5zdmVyc2lvbiA+PSAxNTAwMDApCisJCQl7CiAJCQkJYXBw ZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKIAkJCQkJCQkJCSAiLCBwZ19nZXRfZXhwcihwci5w cnF1YWwsIGMub2lkKSIpOworCQkJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCisJCQkJ CQkJCQkgIiwgKENBU0UgV0hFTiBwci5wcmF0dHJzIElTIE5PVCBOVUxMIFRIRU5cbiIKKwkJ CQkJCQkJCSAiICAgICBwZ19jYXRhbG9nLmFycmF5X3RvX3N0cmluZygiCisJCQkJCQkJCQkg IiAgICAgIEFSUkFZKFNFTEVDVCBhdHRuYW1lXG4iCisJCQkJCQkJCQkgIiAgICAgICAgICAg ICAgRlJPTVxuIgorCQkJCQkJCQkJICIgICAgICAgICAgICAgICAgcGdfY2F0YWxvZy5nZW5l cmF0ZV9zZXJpZXMoMCwgcGdfY2F0YWxvZy5hcnJheV91cHBlcihwci5wcmF0dHJzOjpwZ19j YXRhbG9nLmludDJbXSwgMSkpIHMsXG4iCisJCQkJCQkJCQkgIiAgICAgICAgICAgICAgICBw Z19jYXRhbG9nLnBnX2F0dHJpYnV0ZVxuIgorCQkJCQkJCQkJICIgICAgICAgIFdIRVJFIGF0 dHJlbGlkID0gYy5vaWQgQU5EIGF0dG51bSA9IHByYXR0cnNbc10pLCAnLCAnKVxuIgorCQkJ CQkJCQkJICIgICAgICAgRUxTRSBOVUxMIEVORCkiKTsKKwkJCX0KIAkJCWVsc2UKIAkJCQlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAotCQkJCQkJCQkJICIsIE5VTEwiKTsKKwkJCQkJ CQkJCSAiLCBOVUxMLCBOVUxMIik7CiAJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogCQkJ CQkJCSAgIlxuRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGMsXG4iCiAJCQkJCQkJICAiICAg ICBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuLFxuIgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbi5oCmluZGV4IGZlNzczY2Y5YjdkLi43MGUwNTNlMDRmMSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCisrKyBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaApAQCAtODUsNiArODUsMTMgQEAgdHlwZWRl ZiBzdHJ1Y3QgUHVibGljYXRpb25EZXNjCiAJICovCiAJYm9vbAkJcmZfdmFsaWRfZm9yX3Vw ZGF0ZTsKIAlib29sCQlyZl92YWxpZF9mb3JfZGVsZXRlOworCisJLyoKKwkgKiB0cnVlIGlm IHRoZSBjb2x1bW5zIGFyZSBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5IG9yIHRoZSBw dWJsaWNhdGlvbiBhY3Rpb25zCisJICogZG8gbm90IGluY2x1ZGUgVVBEQVRFIG9yIERFTEVU RS4KKwkgKi8KKwlib29sCQljb2xzX3ZhbGlkX2Zvcl91cGRhdGU7CisJYm9vbAkJY29sc192 YWxpZF9mb3JfZGVsZXRlOwogfSBQdWJsaWNhdGlvbkRlc2M7CiAKIHR5cGVkZWYgc3RydWN0 IFB1YmxpY2F0aW9uCkBAIC0xMDAsNiArMTA3LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGlj YXRpb25SZWxJbmZvCiB7CiAJUmVsYXRpb24JcmVsYXRpb247CiAJTm9kZQkgICAqd2hlcmVD bGF1c2U7CisJTGlzdAkgICAqY29sdW1uczsKIH0gUHVibGljYXRpb25SZWxJbmZvOwogCiBl eHRlcm4gUHVibGljYXRpb24gKkdldFB1YmxpY2F0aW9uKE9pZCBwdWJpZCk7CkBAIC0xMjMs OCArMTMxLDExIEBAIHR5cGVkZWYgZW51bSBQdWJsaWNhdGlvblBhcnRPcHQKIH0gUHVibGlj YXRpb25QYXJ0T3B0OwogCiBleHRlcm4gTGlzdCAqR2V0UHVibGljYXRpb25SZWxhdGlvbnMo T2lkIHB1YmlkLCBQdWJsaWNhdGlvblBhcnRPcHQgcHViX3BhcnRvcHQpOworZXh0ZXJuIExp c3QgKkdldFJlbGF0aW9uQ29sdW1uUGFydGlhbFB1YmxpY2F0aW9ucyhPaWQgcmVsaWQpOwor ZXh0ZXJuIExpc3QgKkdldFJlbGF0aW9uQ29sdW1uTGlzdEluUHVibGljYXRpb24oT2lkIHJl bGlkLCBPaWQgcHViaWQpOwogZXh0ZXJuIExpc3QgKkdldEFsbFRhYmxlc1B1YmxpY2F0aW9u cyh2b2lkKTsKIGV4dGVybiBMaXN0ICpHZXRBbGxUYWJsZXNQdWJsaWNhdGlvblJlbGF0aW9u cyhib29sIHB1YnZpYXJvb3QpOworZXh0ZXJuIHZvaWQgR2V0QWN0aW9uc0luUHVibGljYXRp b24oT2lkIHB1YmlkLCBQdWJsaWNhdGlvbkFjdGlvbnMgKmFjdGlvbnMpOwogZXh0ZXJuIExp c3QgKkdldFB1YmxpY2F0aW9uU2NoZW1hcyhPaWQgcHViaWQpOwogZXh0ZXJuIExpc3QgKkdl dFNjaGVtYVB1YmxpY2F0aW9ucyhPaWQgc2NoZW1haWQpOwogZXh0ZXJuIExpc3QgKkdldFNj aGVtYVB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBzY2hlbWFpZCwKQEAgLTE0Myw2ICsxNTQs OCBAQCBleHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJsaWNhdGlvbl9hZGRfcmVsYXRpb24oT2lk IHB1YmlkLCBQdWJsaWNhdGlvblJlbEluZm8gKnByaQogCQkJCQkJCQkJCQkgIGJvb2wgaWZf bm90X2V4aXN0cyk7CiBleHRlcm4gT2JqZWN0QWRkcmVzcyBwdWJsaWNhdGlvbl9hZGRfc2No ZW1hKE9pZCBwdWJpZCwgT2lkIHNjaGVtYWlkLAogCQkJCQkJCQkJCQlib29sIGlmX25vdF9l eGlzdHMpOworZXh0ZXJuIHZvaWQgcHVibGljYXRpb25fc2V0X3RhYmxlX2NvbHVtbnMoUmVs YXRpb24gcHVicmVsLCBIZWFwVHVwbGUgcHVicmVsdHVwLAorCQkJCQkJCQkJCSAgUmVsYXRp b24gdGFyZ2V0cmVsLCBMaXN0ICpjb2x1bW5zKTsKIAogZXh0ZXJuIE9pZAlnZXRfcHVibGlj YXRpb25fb2lkKGNvbnN0IGNoYXIgKnB1Ym5hbWUsIGJvb2wgbWlzc2luZ19vayk7CiBleHRl cm4gY2hhciAqZ2V0X3B1YmxpY2F0aW9uX25hbWUoT2lkIHB1YmlkLCBib29sIG1pc3Npbmdf b2spOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9y ZWwuaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb25fcmVsLmgKaW5kZXgg MGRkMGY0MjVkYjkuLjRmZWI1ODE4OTllIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uX3JlbC5oCisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdf cHVibGljYXRpb25fcmVsLmgKQEAgLTM0LDYgKzM0LDcgQEAgQ0FUQUxPRyhwZ19wdWJsaWNh dGlvbl9yZWwsNjEwNixQdWJsaWNhdGlvblJlbFJlbGF0aW9uSWQpCiAKICNpZmRlZglDQVRB TE9HX1ZBUkxFTgkJCS8qIHZhcmlhYmxlLWxlbmd0aCBmaWVsZHMgc3RhcnQgaGVyZSAqLwog CXBnX25vZGVfdHJlZSBwcnF1YWw7CQkvKiBxdWFsaWZpY2F0aW9ucyAqLworCWludDJ2ZWN0 b3IJcHJhdHRyczsJCS8qIGNvbHVtbnMgdG8gcmVwbGljYXRlICovCiAjZW5kaWYKIH0gRm9y bURhdGFfcGdfcHVibGljYXRpb25fcmVsOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3B1Ymxp Y2F0aW9uY21kcy5oCmluZGV4IDc4MTNjYmNiNmJiLi5hZTg3Y2FmMDg5ZCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmgKQEAgLTMxLDcgKzMxLDkgQEAgZXh0 ZXJuIHZvaWQgUmVtb3ZlUHVibGljYXRpb25TY2hlbWFCeUlkKE9pZCBwc29pZCk7CiBleHRl cm4gT2JqZWN0QWRkcmVzcyBBbHRlclB1YmxpY2F0aW9uT3duZXIoY29uc3QgY2hhciAqbmFt ZSwgT2lkIG5ld093bmVySWQpOwogZXh0ZXJuIHZvaWQgQWx0ZXJQdWJsaWNhdGlvbk93bmVy X29pZChPaWQgcHViaWQsIE9pZCBuZXdPd25lcklkKTsKIGV4dGVybiB2b2lkIEludmFsaWRh dGVQdWJsaWNhdGlvblJlbHMoTGlzdCAqcmVsaWRzKTsKLWV4dGVybiBib29sIGNvbnRhaW5f aW52YWxpZF9yZmNvbHVtbihPaWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0aW9uLAorZXh0ZXJu IGJvb2wgcHViX3JmX2NvbnRhaW5zX2ludmFsaWRfY29sdW1uKE9pZCBwdWJpZCwgUmVsYXRp b24gcmVsYXRpb24sCisJCQkJCQkJCQkgTGlzdCAqYW5jZXN0b3JzLCBib29sIHB1YnZpYXJv b3QpOworZXh0ZXJuIGJvb2wgcHViX2NvbGxpc3RfY29udGFpbnNfaW52YWxpZF9jb2x1bW4o T2lkIHB1YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJCSBMaXN0ICphbmNlc3Rv cnMsIGJvb2wgcHVidmlhcm9vdCk7CiAKICNlbmRpZgkJCQkJCQkvKiBQVUJMSUNBVElPTkNN RFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oIGIv c3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCmluZGV4IDE2MTc3MDJkOWQ2Li4xMzc1 YTE3M2UzYiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisr KyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaApAQCAtMzY1Miw2ICszNjUyLDcg QEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25UYWJsZQogCU5vZGVUYWcJCXR5cGU7CiAJ UmFuZ2VWYXIgICAqcmVsYXRpb247CQkvKiByZWxhdGlvbiB0byBiZSBwdWJsaXNoZWQgKi8K IAlOb2RlCSAgICp3aGVyZUNsYXVzZTsJLyogcXVhbGlmaWNhdGlvbnMgKi8KKwlMaXN0CSAg ICpjb2x1bW5zOwkJLyogTGlzdCBvZiBjb2x1bW5zIGluIGEgcHVibGljYXRpb24gdGFibGUg Ki8KIH0gUHVibGljYXRpb25UYWJsZTsKIAogLyoKQEAgLTM2ODgsNyArMzY4OSw4IEBAIHR5 cGVkZWYgZW51bSBBbHRlclB1YmxpY2F0aW9uQWN0aW9uCiB7CiAJQVBfQWRkT2JqZWN0cywJ CQkJLyogYWRkIG9iamVjdHMgdG8gcHVibGljYXRpb24gKi8KIAlBUF9Ecm9wT2JqZWN0cywJ CQkJLyogcmVtb3ZlIG9iamVjdHMgZnJvbSBwdWJsaWNhdGlvbiAqLwotCUFQX1NldE9iamVj dHMJCQkJLyogc2V0IGxpc3Qgb2Ygb2JqZWN0cyAqLworCUFQX1NldE9iamVjdHMsCQkJCS8q IHNldCBsaXN0IG9mIG9iamVjdHMgKi8KKwlBUF9TZXRDb2x1bW5zCQkJCS8qIGNoYW5nZSBs aXN0IG9mIGNvbHVtbnMgZm9yIGEgdGFibGUgKi8KIH0gQWx0ZXJQdWJsaWNhdGlvbkFjdGlv bjsKIAogdHlwZWRlZiBzdHJ1Y3QgQWx0ZXJQdWJsaWNhdGlvblN0bXQKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIGIvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vbG9naWNhbHByb3RvLmgKaW5kZXggNGQyYzg4MTY0NGEuLmE3NzFhYjhm ZjMzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8u aAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaApAQCAtMjA5 LDEyICsyMDksMTIgQEAgZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9vcmlnaW4oU3Ry aW5nSW5mbyBpbiwgWExvZ1JlY1B0ciAqb3JpZ2luX2xzbik7CiBleHRlcm4gdm9pZCBsb2dp Y2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQs CiAJCQkJCQkJCQlSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqbmV3 c2xvdCwKLQkJCQkJCQkJCWJvb2wgYmluYXJ5KTsKKwkJCQkJCQkJCWJvb2wgYmluYXJ5LCBC aXRtYXBzZXQgKmNvbHVtbnMpOwogZXh0ZXJuIExvZ2ljYWxSZXBSZWxJZCBsb2dpY2FscmVw X3JlYWRfaW5zZXJ0KFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBUdXBsZURhdGEgKm5ld3R1 cCk7CiBleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShTdHJpbmdJbmZvIG91 dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQlSZWxhdGlvbiByZWwsCiAJCQkJCQkJ CQlUdXBsZVRhYmxlU2xvdCAqb2xkc2xvdCwKLQkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpu ZXdzbG90LCBib29sIGJpbmFyeSk7CisJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqbmV3c2xv dCwgYm9vbCBiaW5hcnksIEJpdG1hcHNldCAqY29sdW1ucyk7CiBleHRlcm4gTG9naWNhbFJl cFJlbElkIGxvZ2ljYWxyZXBfcmVhZF91cGRhdGUoU3RyaW5nSW5mbyBpbiwKIAkJCQkJCQkJ CQkJICBib29sICpoYXNfb2xkdHVwbGUsIExvZ2ljYWxSZXBUdXBsZURhdGEgKm9sZHR1cCwK IAkJCQkJCQkJCQkJICBMb2dpY2FsUmVwVHVwbGVEYXRhICpuZXd0dXApOwpAQCAtMjMxLDcg KzIzMSw3IEBAIGV4dGVybiBMaXN0ICpsb2dpY2FscmVwX3JlYWRfdHJ1bmNhdGUoU3RyaW5n SW5mbyBpbiwKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfbWVzc2FnZShTdHJpbmdJ bmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAogCQkJCQkJCQkJ IGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LCBjb25z dCBjaGFyICptZXNzYWdlKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfcmVsKFN0 cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKLQkJCQkJCQkJIFJlbGF0aW9uIHJl bCk7CisJCQkJCQkJCSBSZWxhdGlvbiByZWwsIEJpdG1hcHNldCAqY29sdW1ucyk7CiBleHRl cm4gTG9naWNhbFJlcFJlbGF0aW9uICpsb2dpY2FscmVwX3JlYWRfcmVsKFN0cmluZ0luZm8g aW4pOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV90eXAoU3RyaW5nSW5mbyBvdXQs IFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkgT2lkIHR5cG9pZCk7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDRlMTkxYzEyMGFjLi40 ZWMzYWM1YjE3ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJs aWNhdGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wdWJsaWNhdGlv bi5vdXQKQEAgLTYxMyw2ICs2MTMsMzcyIEBAIERST1AgVEFCTEUgcmZfdGJsX2FiY2RfcGs7 CiBEUk9QIFRBQkxFIHJmX3RibF9hYmNkX25vcGs7CiBEUk9QIFRBQkxFIHJmX3RibF9hYmNk X3BhcnRfcGs7CiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKy0tIGZhaWwgLSBkdXBsaWNhdGUgdGFibGVzIGFyZSBub3QgYWxs b3dlZCBpZiB0aGF0IHRhYmxlIGhhcyBhbnkgY29sdW1uIGxpc3RzCitTRVQgY2xpZW50X21p bl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9kdXBz IEZPUiBUQUJMRSB0ZXN0cHViX3RibDEgKGEpLCB0ZXN0cHViX3RibDEgV0lUSCAocHVibGlz aCA9ICdpbnNlcnQnKTsKK0VSUk9SOiAgY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IGNvbHVt biBsaXN0cyBmb3IgdGFibGUgInRlc3RwdWJfdGJsMSIKK0NSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViX2R1cHMgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMSwgdGVzdHB1Yl90YmwxIChhKSBX SVRIIChwdWJsaXNoID0gJ2luc2VydCcpOworRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1 bmRhbnQgY29sdW1uIGxpc3RzIGZvciB0YWJsZSAidGVzdHB1Yl90YmwxIgorUkVTRVQgY2xp ZW50X21pbl9tZXNzYWdlczsKKy0tIHRlc3QgZm9yIGNvbHVtbiBsaXN0cworU0VUIGNsaWVu dF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJf Zm9ydGFibGUgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMTsKK0NSRUFURSBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnRhYmxlX2luc2VydCBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOworUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDUgKGEg aW50IFBSSU1BUlkgS0VZLCBiIHRleHQsIGMgdGV4dCwKKwlkIGludCBnZW5lcmF0ZWQgYWx3 YXlzIGFzIChhICsgbGVuZ3RoKGIpKSBzdG9yZWQpOworLS0gZXJyb3I6IGNvbHVtbiAieCIg ZG9lcyBub3QgZXhpc3QKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQURE IFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgeCk7CitFUlJPUjogIGNvbHVtbiAieCIgb2YgcmVs YXRpb24gInRlc3RwdWJfdGJsNSIgZG9lcyBub3QgZXhpc3QKKy0tIGVycm9yOiByZXBsaWNh IGlkZW50aXR5ICJhIiBub3QgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbiBsaXN0CitBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGIs IGMpOworVVBEQVRFIHRlc3RwdWJfdGJsNSBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1 cGRhdGUgdGFibGUgInRlc3RwdWJfdGJsNSIKK0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQg YnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5 LgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFIHRlc3Rw dWJfdGJsNTsKKy0tIGVycm9yOiBnZW5lcmF0ZWQgY29sdW1uICJkIiBjYW4ndCBiZSBpbiBs aXN0CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0 cHViX3RibDUgKGEsIGQpOworRVJST1I6ICBjYW5ub3QgcmVmZXJlbmNlIGdlbmVyYXRlZCBj b2x1bW4gImQiIGluIHB1YmxpY2F0aW9uIGNvbHVtbiBsaXN0CistLSBlcnJvcjogc3lzdGVt IGF0dHJpYnV0ZXMgImN0aWQiIG5vdCBhbGxvd2VkIGluIGNvbHVtbiBsaXN0CitBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEs IGN0aWQpOworRVJST1I6ICBjYW5ub3QgcmVmZXJlbmNlIHN5c3RlbSBjb2x1bW4gImN0aWQi IGluIHB1YmxpY2F0aW9uIGNvbHVtbiBsaXN0CistLSBvaworQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhLCBjKTsKK0FMVEVS IFRBQkxFIHRlc3RwdWJfdGJsNSBEUk9QIENPTFVNTiBjOwkJLS0gbm8gZGljZQorRVJST1I6 ICBjYW5ub3QgZHJvcCBjb2x1bW4gImMiIGJlY2F1c2UgaXQgaXMgcGFydCBvZiBwdWJsaWNh dGlvbiAidGVzdHB1Yl9mb3J0YWJsZSIKK0hJTlQ6ICBTcGVjaWZ5IENBU0NBREUgb3IgdXNl IEFMVEVSIFBVQkxJQ0FUSU9OIHRvIHJlbW92ZSB0aGUgY29sdW1uIGZyb20gdGhlIHB1Ymxp Y2F0aW9uLgorLS0gb2s6IGZvciBpbnNlcnQtb25seSBwdWJsaWNhdGlvbiwgdGhlIGNvbHVt biBsaXN0IGlzIGFyYml0cmFyeQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJs ZV9pbnNlcnQgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYiwgYyk7CisvKiBub3QgYWxsIHJl cGxpY2EgaWRlbnRpdGllcyBhcmUgZ29vZCBlbm91Z2ggKi8KK0NSRUFURSBVTklRVUUgSU5E RVggdGVzdHB1Yl90Ymw1X2Jfa2V5IE9OIHRlc3RwdWJfdGJsNSAoYiwgYyk7CitBTFRFUiBU QUJMRSB0ZXN0cHViX3RibDUgQUxURVIgYiBTRVQgTk9UIE5VTEwsIEFMVEVSIGMgU0VUIE5P VCBOVUxMOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw1IFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggdGVzdHB1Yl90Ymw1X2Jfa2V5OworLS0gZXJyb3I6IHJlcGxpY2EgaWRlbnRp dHkgKGIsYykgaXMgY292ZXJlZCBieSBjb2x1bW4gbGlzdCAoYSwgYykKK1VQREFURSB0ZXN0 cHViX3RibDUgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0ZXN0 cHViX3RibDUiCitERVRBSUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlv biBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDU7CistLSBlcnJv cjogY2hhbmdlIHRoZSByZXBsaWNhIGlkZW50aXR5IHRvICJiIiwgYW5kIGNvbHVtbiBsaXN0 IHRvIChhLCBjKQorLS0gdGhlbiB1cGRhdGUgZmFpbHMsIGJlY2F1c2UgKGEsIGMpIGRvZXMg bm90IGNvdmVyIHJlcGxpY2EgaWRlbnRpdHkKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNSBS RVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsNV9iX2tleTsKK0FMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAo YSwgYyk7CitVUERBVEUgdGVzdHB1Yl90Ymw1IFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90 IHVwZGF0ZSB0YWJsZSAidGVzdHB1Yl90Ymw1IgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNl ZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRp dHkuCisvKiBCdXQgaWYgdXBkL2RlbCBhcmUgbm90IHB1Ymxpc2hlZCwgaXQgd29ya3MgT0sg Ki8KK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNB VElPTiB0ZXN0cHViX3RhYmxlX2lucyBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdHJ1bmNh dGUnKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX3RhYmxlX2lucyBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhKTsJCS0tIG9rCitc ZFJwKyB0ZXN0cHViX3RhYmxlX2lucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFB1YmxpY2F0aW9uIHRlc3RwdWJfdGFibGVfaW5zCisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IGYgICAgICAgfCBmICAgICAgIHwgdCAgICAgICAgIHwgZgorVGFibGVzOgorICAgICJwdWJs aWMudGVzdHB1Yl90Ymw1IiAoYSkKKworLS0gd2l0aCBSRVBMSUNBIElERU5USVRZIEZVTEws IGNvbHVtbiBsaXN0cyBhcmUgbm90IGFsbG93ZWQKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3Ri bDYgKGEgaW50LCBiIHRleHQsIGMgdGV4dCk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDYg UkVQTElDQSBJREVOVElUWSBGVUxMOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0 YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw2IChhLCBiLCBjKTsKK1VQREFURSB0ZXN0cHVi X3RibDYgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0ZXN0cHVi X3RibDYiCitERVRBSUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBk b2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDY7CitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDY7IC0tIG9r CitVUERBVEUgdGVzdHB1Yl90Ymw2IFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw2IFNFVCBDT0xVTU5TIChh LCBiLCBjKTsKK1VQREFURSB0ZXN0cHViX3RibDYgU0VUIGEgPSAxOworRVJST1I6ICBjYW5u b3QgdXBkYXRlIHRhYmxlICJ0ZXN0cHViX3RibDYiCitERVRBSUw6ICBDb2x1bW4gbGlzdCB1 c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVu dGl0eS4KKy0tIG1ha2Ugc3VyZSBjaGFuZ2luZyB0aGUgY29sdW1uIGxpc3QgaXMgdXBkYXRl ZCBpbiBTRVQgVEFCTEUKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDcgKGEgaW50IHByaW1h cnkga2V5LCBiIHRleHQsIGMgdGV4dCk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2Zv cnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDcgKGEsIGIpOworXGQrIHRlc3RwdWJfdGJs NworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSAicHVibGljLnRlc3Rw dWJfdGJsNyIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBE ZWZhdWx0IHwgU3RvcmFnZSAgfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBhICAgICAgfCBpbnRlZ2VyIHwg ICAgICAgICAgIHwgbm90IG51bGwgfCAgICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAg ICAgfCAKKyBiICAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAg ICAgIHwgZXh0ZW5kZWQgfCAgICAgICAgICAgICAgfCAKKyBjICAgICAgfCB0ZXh0ICAgIHwg ICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgZXh0ZW5kZWQgfCAgICAgICAgICAg ICAgfCAKK0luZGV4ZXM6CisgICAgInRlc3RwdWJfdGJsN19wa2V5IiBQUklNQVJZIEtFWSwg YnRyZWUgKGEpCitQdWJsaWNhdGlvbnM6CisgICAgInRlc3RwdWJfZm9ydGFibGUiIChhLCBi KQorCistLSBvazogd2UnbGwgc2tpcCB0aGlzIHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJMRSB0ZXN0cHViX3RibDcgKGEsIGIpOworXGQrIHRl c3RwdWJfdGJsNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSAicHVi bGljLnRlc3RwdWJfdGJsNyIKKyBDb2x1bW4gfCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVs bGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSAgfCBTdGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlv biAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KKyBhICAgICAgfCBp bnRlZ2VyIHwgICAgICAgICAgIHwgbm90IG51bGwgfCAgICAgICAgIHwgcGxhaW4gICAgfCAg ICAgICAgICAgICAgfCAKKyBiICAgICAgfCB0ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAg ICAgfCAgICAgICAgIHwgZXh0ZW5kZWQgfCAgICAgICAgICAgICAgfCAKKyBjICAgICAgfCB0 ZXh0ICAgIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgZXh0ZW5kZWQgfCAg ICAgICAgICAgICAgfCAKK0luZGV4ZXM6CisgICAgInRlc3RwdWJfdGJsN19wa2V5IiBQUklN QVJZIEtFWSwgYnRyZWUgKGEpCitQdWJsaWNhdGlvbnM6CisgICAgInRlc3RwdWJfZm9ydGFi bGUiIChhLCBiKQorCistLSBvazogdXBkYXRlIHRoZSBjb2x1bW4gbGlzdAorQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQgVEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBj KTsKK1xkKyB0ZXN0cHViX3RibDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VGFibGUgInB1YmxpYy50ZXN0cHViX3RibDciCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxh dGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFyZ2V0IHwg RGVzY3JpcHRpb24gCistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisg YSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICB8IHBs YWluICAgIHwgICAgICAgICAgICAgIHwgCisgYiAgICAgIHwgdGV4dCAgICB8ICAgICAgICAg ICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCisg YyAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4 dGVuZGVkIHwgICAgICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJ0ZXN0cHViX3RibDdf cGtleSIgUFJJTUFSWSBLRVksIGJ0cmVlIChhKQorUHVibGljYXRpb25zOgorICAgICJ0ZXN0 cHViX2ZvcnRhYmxlIiAoYSwgYykKKworLS0gY29sdW1uIGxpc3QgZm9yIHBhcnRpdGlvbmVk IHRhYmxlcyBoYXMgdG8gY292ZXIgcmVwbGljYSBpZGVudGl0aWVzIGZvcgorLS0gYWxsIGNo aWxkIHJlbGF0aW9ucworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsOCAoYSBpbnQsIGIgdGV4 dCwgYyB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoYSk7CistLSBmaXJzdCBwYXJ0aXRpb24g aGFzIHJlcGxpY2EgaWRlbnRpdHkgImEiCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4XzAg UEFSVElUSU9OIE9GIHRlc3RwdWJfdGJsOCBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMgMiwg cmVtYWluZGVyIDApOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgQUREIFBSSU1BUlkg S0VZIChhKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8wIFJFUExJQ0EgSURFTlRJVFkg VVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw4XzBfcGtleTsKKy0tIHNlY29uZCBwYXJ0aXRpb24g aGFzIHJlcGxpY2EgaWRlbnRpdHkgImIiCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4XzEg UEFSVElUSU9OIE9GIHRlc3RwdWJfdGJsOCBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMgMiwg cmVtYWluZGVyIDEpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgQUREIFBSSU1BUlkg S0VZIChiKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkg VVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw4XzFfcGtleTsKKy0tIG9rOiBjb2x1bW4gbGlzdCBj b3ZlcnMgYm90aCAiYSIgYW5kICJiIgorU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJS T1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2xpc3QgRk9SIFRBQkxFIHRl c3RwdWJfdGJsOCAoYSwgYikgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSAn dHJ1ZScpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKKy0tIG9rOiB0aGUgc2FtZSB0 aGluZywgYnV0IHRyeSBwbGFpbiBBREQgVEFCTEUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfY29sX2xpc3QgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDg7CitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2NvbF9saXN0IEFERCBUQUJMRSB0ZXN0cHViX3RibDggKGEsIGIpOworVVBE QVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9IDE7CistLSBmYWlsdXJlOiBjb2x1bW4gbGlzdCBk b2VzIG5vdCBjb3ZlciByZXBsaWNhIGlkZW50aXR5IGZvciB0aGUgc2Vjb25kIHBhcnRpdGlv bgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfbGlzdCBEUk9QIFRBQkxFIHRlc3Rw dWJfdGJsODsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2xpc3QgQUREIFRBQkxF IHRlc3RwdWJfdGJsOCAoYSwgYyk7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0gMTsK K0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAidGVzdHB1Yl90Ymw4XzEiCitERVRBSUw6 ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0 aGUgcmVwbGljYSBpZGVudGl0eS4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2xp c3QgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDg7CistLSBmYWlsdXJlOiBvbmUgb2YgdGhlIHBh cnRpdGlvbnMgaGFzIFJFUExJQ0EgSURFTlRJVFkgRlVMTAorQUxURVIgVEFCTEUgdGVzdHB1 Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBGVUxMOworQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9jb2xfbGlzdCBBREQgVEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBjKTsKK1VQREFURSB0 ZXN0cHViX3RibDggU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0 ZXN0cHViX3RibDhfMSIKK0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1Ymxp Y2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9jb2xfbGlzdCBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsODsKKy0t IGFkZCB0YWJsZSBhbmQgdGhlbiB0cnkgY2hhbmdpbmcgcmVwbGljYSBpZGVudGl0eQorQUxU RVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0 ZXN0cHViX3RibDhfMV9wa2V5OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfbGlz dCBBREQgVEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBiKTsKKy0tIGZhaWx1cmU6IHJlcGxpY2Eg aWRlbnRpdHkgZnVsbCBjYW4ndCBiZSB1c2VkIHdpdGggYSBjb2x1bW4gbGlzdAorQUxURVIg VEFCTEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBGVUxMOworVVBEQVRFIHRl c3RwdWJfdGJsOCBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRl c3RwdWJfdGJsOF8xIgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGlj YXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCistLSBmYWlsdXJl OiByZXBsaWNhIGlkZW50aXR5IGhhcyB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBjb2x1bW4gbGlz dAorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgRFJPUCBDT05TVFJBSU5UIHRlc3RwdWJf dGJsOF8xX3BrZXk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBBREQgUFJJTUFSWSBL RVkgKGMpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBV U0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMV9wa2V5OworVVBEQVRFIHRlc3RwdWJfdGJsOCBT RVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJfdGJsOF8x IgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBu b3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCitEUk9QIFRBQkxFIHRlc3RwdWJfdGJs ODsKKy0tIGNvbHVtbiBsaXN0IGZvciBwYXJ0aXRpb25lZCB0YWJsZXMgaGFzIHRvIGNvdmVy IHJlcGxpY2EgaWRlbnRpdGllcyBmb3IKKy0tIGFsbCBjaGlsZCByZWxhdGlvbnMKK0NSRUFU RSBUQUJMRSB0ZXN0cHViX3RibDggKGEgaW50LCBiIHRleHQsIGMgdGV4dCkgUEFSVElUSU9O IEJZIEhBU0ggKGEpOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfbGlzdCBBREQg VEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBiKTsKKy0tIGZpcnN0IHBhcnRpdGlvbiBoYXMgcmVw bGljYSBpZGVudGl0eSAiYSIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDhfMCAoYSBpbnQs IGIgdGV4dCwgYyB0ZXh0KTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8wIEFERCBQUklN QVJZIEtFWSAoYSk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBSRVBMSUNBIElERU5U SVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8wX3BrZXk7CistLSBzZWNvbmQgcGFydGl0 aW9uIGhhcyByZXBsaWNhIGlkZW50aXR5ICJiIgorQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJs OF8xIChhIGludCwgYiB0ZXh0LCBjIHRleHQpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4 XzEgQUREIFBSSU1BUlkgS0VZIChjKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw4XzFfcGtleTsKKy0tIG9r OiBhdHRhY2hpbmcgZmlyc3QgcGFydGl0aW9uIHdvcmtzLCBiZWNhdXNlIChhKSBpcyBpbiBj b2x1bW4gbGlzdAorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4IEFUVEFDSCBQQVJUSVRJT04g dGVzdHB1Yl90Ymw4XzAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAw KTsKKy0tIGZhaWx1cmU6IHNlY29uZCBwYXJ0aXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkg KGMpLCB3aGljaCBzaSBub3QgaW4gY29sdW1uIGxpc3QKK0FMVEVSIFRBQkxFIHRlc3RwdWJf dGJsOCBBVFRBQ0ggUEFSVElUSU9OIHRlc3RwdWJfdGJsOF8xIEZPUiBWQUxVRVMgV0lUSCAo bW9kdWx1cyAyLCByZW1haW5kZXIgMSk7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0g MTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAidGVzdHB1Yl90Ymw4XzEiCitERVRB SUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3Zl ciB0aGUgcmVwbGljYSBpZGVudGl0eS4KKy0tIGZhaWx1cmU6IGNoYW5naW5nIHJlcGxpY2Eg aWRlbnRpdHkgdG8gRlVMTCBmb3IgcGFydGl0aW9uIGZhaWxzLCBiZWNhdXNlCistLSBvZiB0 aGUgY29sdW1uIGxpc3Qgb24gdGhlIHBhcmVudAorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4 XzAgUkVQTElDQSBJREVOVElUWSBGVUxMOworVVBEQVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9 IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJfdGJsOF8wIgorREVU QUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292 ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCitEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNSwgdGVz dHB1Yl90Ymw2LCB0ZXN0cHViX3RibDcsIHRlc3RwdWJfdGJsOCwgdGVzdHB1Yl90Ymw4XzE7 CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfdGFibGVfaW5zLCB0ZXN0cHViX2ZvcnRhYmxl LCB0ZXN0cHViX2ZvcnRhYmxlX2luc2VydCwgdGVzdHB1Yl9jb2xfbGlzdDsKKy0tID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0g VGVzdCBjb21iaW5hdGlvbiBvZiBjb2x1bW4gbGlzdCBhbmQgcm93IGZpbHRlcgorU0VUIGNs aWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfYm90aF9maWx0ZXJzOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0NSRUFURSBU QUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEgaW50LCBiIGludCwgYyBpbnQsIFBS SU1BUlkgS0VZIChhLGMpKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVy cyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVy c19wa2V5OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQUREIFRB QkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsKK1xk UnArIHRlc3RwdWJfYm90aF9maWx0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBQdWJsaWNhdGlvbiB0ZXN0cHViX2JvdGhfZmlsdGVycworICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKK1RhYmxlczoKKyAgICAi cHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEp CisKK1xkKyB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMKKyAgICAgICAgICAgICAgICAgICAg ICAgICBUYWJsZSAicHVibGljLnRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyIKKyBDb2x1bW4g fCAgVHlwZSAgIHwgQ29sbGF0aW9uIHwgTnVsbGFibGUgfCBEZWZhdWx0IHwgU3RvcmFnZSB8 IFN0YXRzIHRhcmdldCB8IERlc2NyaXB0aW9uIAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8IG5vdCBudWxs IHwgICAgICAgICB8IHBsYWluICAgfCAgICAgICAgICAgICAgfCAKKyBiICAgICAgfCBpbnRl Z2VyIHwgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgcGxhaW4gICB8ICAgICAg ICAgICAgICB8IAorIGMgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCBub3QgbnVsbCB8 ICAgICAgICAgfCBwbGFpbiAgIHwgICAgICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJ0 ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnNfcGtleSIgUFJJTUFSWSBLRVksIGJ0cmVlIChhLCBj KSBSRVBMSUNBIElERU5USVRZCitQdWJsaWNhdGlvbnM6CisgICAgInRlc3RwdWJfYm90aF9m aWx0ZXJzIiAoYSwgYykgV0hFUkUgKGMgPD4gMSkKKworRFJPUCBUQUJMRSB0ZXN0cHViX3Ri bF9ib3RoX2ZpbHRlcnM7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0ZXJz OworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CistLSBNb3JlIGNvbHVtbiBsaXN0IHRlc3RzIGZvciB2YWxpZGF0aW5nIGNvbHVt biByZWZlcmVuY2VzCitDUkVBVEUgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayhhIGludCwgYiBp bnQsIGMgaW50LCBkIGludCk7CitDUkVBVEUgVEFCTEUgcmZfdGJsX2FiY2RfcGsoYSBpbnQs IGIgaW50LCBjIGludCwgZCBpbnQsIFBSSU1BUlkgS0VZKGEsYikpOworQ1JFQVRFIFRBQkxF IHJmX3RibF9hYmNkX3BhcnRfcGsgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCkgUEFSVElU SU9OIGJ5IFJBTkdFIChhKTsKK0NSRUFURSBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrXzEg KGIgaW50LCBhIGludCBQUklNQVJZIEtFWSk7CitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9w YXJ0X3BrIEFUVEFDSCBQQVJUSVRJT04gcmZfdGJsX2FiY2RfcGFydF9wa18xIEZPUiBWQUxV RVMgRlJPTSAoMSkgVE8gKDEwKTsKKy0tIENhc2UgMS4gUkVQTElDQSBJREVOVElUWSBERUZB VUxUIChtZWFucyB1c2UgcHJpbWFyeSBrZXkgb3Igbm90aGluZykKKy0tIDFhLiBSRVBMSUNB IElERU5USVRZIGlzIERFRkFVTFQgYW5kIHRhYmxlIGhhcyBhIFBLLgorU0VUIGNsaWVudF9t aW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IEZP UiBUQUJMRSByZl90YmxfYWJjZF9wayAoYSwgYik7CitSRVNFVCBjbGllbnRfbWluX21lc3Nh Z2VzOworLS0gb2sgLSAoYSxiKSBjb3ZlcnRzIGFsbCBQSyBjb2xzCitVUERBVEUgcmZfdGJs X2FiY2RfcGsgU0VUIGEgPSAxOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRB QkxFIHJmX3RibF9hYmNkX3BrIChhLCBiLCBjKTsKKy0tIG9rIC0gKGEsYixjKSBjb3ZlcnRz IGFsbCBQSyBjb2xzCitVUERBVEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAxOworQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIChhKTsKKy0t IGZhaWwgLSAiYiIgaXMgbWlzc2luZyBmcm9tIHRoZSBjb2x1bW4gbGlzdAorVVBEQVRFIHJm X3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAi cmZfdGJsX2FiY2RfcGsiCitERVRBSUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJs aWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYik7CistLSBm YWlsIC0gImEiIGlzIG1pc3NpbmcgZnJvbSB0aGUgY29sdW1uIGxpc3QKK1VQREFURSByZl90 YmxfYWJjZF9wayBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJm X3RibF9hYmNkX3BrIgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGlj YXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCistLSAxYi4gUkVQ TElDQSBJREVOVElUWSBpcyBERUZBVUxUIGFuZCB0YWJsZSBoYXMgbm8gUEsKK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIChhKTsKKy0t IG9rIC0gdGhlcmUncyBubyByZXBsaWNhIGlkZW50aXR5LCBzbyBhbnkgY29sdW1uIGxpc3Qg d29ya3MKKy0tIG5vdGU6IGl0IGZhaWxzIGFueXdheSwganVzdCBhIGJpdCBsYXRlciBiZWNh dXNlIFVQREFURSByZXF1aXJlcyBSSQorVVBEQVRFIHJmX3RibF9hYmNkX25vcGsgU0VUIGEg PSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90YmxfYWJjZF9ub3BrIiBi ZWNhdXNlIGl0IGRvZXMgbm90IGhhdmUgYSByZXBsaWNhIGlkZW50aXR5IGFuZCBwdWJsaXNo ZXMgdXBkYXRlcworSElOVDogIFRvIGVuYWJsZSB1cGRhdGluZyB0aGUgdGFibGUsIHNldCBS RVBMSUNBIElERU5USVRZIHVzaW5nIEFMVEVSIFRBQkxFLgorLS0gQ2FzZSAyLiBSRVBMSUNB IElERU5USVRZIEZVTEwKK0FMVEVSIFRBQkxFIHJmX3RibF9hYmNkX3BrIFJFUExJQ0EgSURF TlRJVFkgRlVMTDsKK0FMVEVSIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgUkVQTElDQSBJREVO VElUWSBGVUxMOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3Ri bF9hYmNkX3BrIChjKTsKKy0tIGZhaWwgLSB3aXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTCBu byBjb2x1bW4gbGlzdCBpcyBhbGxvd2VkCitVUERBVEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEg PSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90YmxfYWJjZF9wayIKK0RF VEFJTDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNv dmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYg U0VUIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgKGEsIGIsIGMsIGQpOworLS0gZmFpbCAtIHdp dGggUkVQTElDQSBJREVOVElUWSBGVUxMIG5vIGNvbHVtbiBsaXN0IGlzIGFsbG93ZWQKK1VQ REFURSByZl90YmxfYWJjZF9ub3BrIFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0 ZSB0YWJsZSAicmZfdGJsX2FiY2Rfbm9wayIKK0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQg YnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5 LgorLS0gQ2FzZSAzLiBSRVBMSUNBIElERU5USVRZIE5PVEhJTkcKK0FMVEVSIFRBQkxFIHJm X3RibF9hYmNkX3BrIFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsKK0FMVEVSIFRBQkxFIHJm X3RibF9hYmNkX25vcGsgUkVQTElDQSBJREVOVElUWSBOT1RISU5HOworQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIChhKTsKKy0tIG9rIC0g UkVQTElDQSBJREVOVElUWSBOT1RISU5HIG1lYW5zIGFsbCBjb2x1bW4gbGlzdHMgYXJlIHZh bGlkCistLSBpdCBzdGlsbCBmYWlscyBsYXRlciBiZWNhdXNlIHdpdGhvdXQgUkkgd2UgY2Fu J3QgcmVwbGljYXRlIHVwZGF0ZXMKK1VQREFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9IDE7 CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX3BrIiBiZWNhdXNl IGl0IGRvZXMgbm90IGhhdmUgYSByZXBsaWNhIGlkZW50aXR5IGFuZCBwdWJsaXNoZXMgdXBk YXRlcworSElOVDogIFRvIGVuYWJsZSB1cGRhdGluZyB0aGUgdGFibGUsIHNldCBSRVBMSUNB IElERU5USVRZIHVzaW5nIEFMVEVSIFRBQkxFLgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIChhLCBiLCBjLCBkKTsKKy0tIG9rIC0gUkVQ TElDQSBJREVOVElUWSBOT1RISU5HIG1lYW5zIGFsbCBjb2x1bW4gbGlzdHMgYXJlIHZhbGlk CistLSBpdCBzdGlsbCBmYWlscyBsYXRlciBiZWNhdXNlIHdpdGhvdXQgUkkgd2UgY2FuJ3Qg cmVwbGljYXRlIHVwZGF0ZXMKK1VQREFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9IDE7CitF UlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX3BrIiBiZWNhdXNlIGl0 IGRvZXMgbm90IGhhdmUgYSByZXBsaWNhIGlkZW50aXR5IGFuZCBwdWJsaXNoZXMgdXBkYXRl cworSElOVDogIFRvIGVuYWJsZSB1cGRhdGluZyB0aGUgdGFibGUsIHNldCBSRVBMSUNBIElE RU5USVRZIHVzaW5nIEFMVEVSIFRBQkxFLgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYg U0VUIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgKGQpOworLS0gb2sgLSBSRVBMSUNBIElERU5U SVRZIE5PVEhJTkcgbWVhbnMgYWxsIGNvbHVtbiBsaXN0cyBhcmUgdmFsaWQKKy0tIGl0IHN0 aWxsIGZhaWxzIGxhdGVyIGJlY2F1c2Ugd2l0aG91dCBSSSB3ZSBjYW4ndCByZXBsaWNhdGUg dXBkYXRlcworVVBEQVRFIHJmX3RibF9hYmNkX25vcGsgU0VUIGEgPSAxOworRVJST1I6ICBj YW5ub3QgdXBkYXRlIHRhYmxlICJyZl90YmxfYWJjZF9ub3BrIiBiZWNhdXNlIGl0IGRvZXMg bm90IGhhdmUgYSByZXBsaWNhIGlkZW50aXR5IGFuZCBwdWJsaXNoZXMgdXBkYXRlcworSElO VDogIFRvIGVuYWJsZSB1cGRhdGluZyB0aGUgdGFibGUsIHNldCBSRVBMSUNBIElERU5USVRZ IHVzaW5nIEFMVEVSIFRBQkxFLgorLS0gQ2FzZSA0LiBSRVBMSUNBIElERU5USVRZIElOREVY CitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9wayBBTFRFUiBDT0xVTU4gYyBTRVQgTk9UIE5V TEw7CitDUkVBVEUgVU5JUVVFIElOREVYIGlkeF9hYmNkX3BrX2MgT04gcmZfdGJsX2FiY2Rf cGsoYyk7CitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9wayBSRVBMSUNBIElERU5USVRZIFVT SU5HIElOREVYIGlkeF9hYmNkX3BrX2M7CitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9ub3Br IEFMVEVSIENPTFVNTiBjIFNFVCBOT1QgTlVMTDsKK0NSRUFURSBVTklRVUUgSU5ERVggaWR4 X2FiY2Rfbm9wa19jIE9OIHJmX3RibF9hYmNkX25vcGsoYyk7CitBTFRFUiBUQUJMRSByZl90 YmxfYWJjZF9ub3BrIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggaWR4X2FiY2Rfbm9w a19jOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNk X3BrIChhKTsKKy0tIGZhaWwgLSBjb2x1bW4gbGlzdCAiYSIgZG9lcyBub3QgY292ZXIgdGhl IFJFUExJQ0EgSURFTlRJVFkgSU5ERVggb24gImMiCitVUERBVEUgcmZfdGJsX2FiY2RfcGsg U0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90YmxfYWJjZF9w ayIKK0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMg bm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIChjKTsKKy0tIG9rIC0gY29sdW1uIGxp c3QgImMiIGRvZXMgY292ZXIgdGhlIFJFUExJQ0EgSURFTlRJVFkgSU5ERVggb24gImMiCitV UERBVEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAxOworQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgKGEpOworLS0gZmFpbCAtIGNvbHVt biBsaXN0ICJhIiBkb2VzIG5vdCBjb3ZlciB0aGUgUkVQTElDQSBJREVOVElUWSBJTkRFWCBv biAiYyIKK1VQREFURSByZl90YmxfYWJjZF9ub3BrIFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fu bm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2Rfbm9wayIKK0RFVEFJTDogIENvbHVtbiBs aXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNh IGlkZW50aXR5LgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3Ri bF9hYmNkX25vcGsgKGMpOworLS0gb2sgLSBjb2x1bW4gbGlzdCAiYyIgZG9lcyBjb3ZlciB0 aGUgUkVQTElDQSBJREVOVElUWSBJTkRFWCBvbiAiYyIKK1VQREFURSByZl90YmxfYWJjZF9u b3BrIFNFVCBhID0gMTsKKy0tIFRlc3RzIGZvciBwYXJ0aXRpb25lZCB0YWJsZQorLS0gc2V0 IFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UIHRvIGZhbHNlIGFuZCB0ZXN0IHJvdyBmaWx0 ZXIgZm9yIHBhcnRpdGlvbmVkCistLSB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjYgU0VUIChQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVD0wKTsKKy0tIGZhaWwgLSBjYW5u b3QgdXNlIHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wayAoYSk7CitFUlJP UjogIGNhbm5vdCB1c2UgcHVibGljYXRpb24gY29sdW1uIGxpc3QgZm9yIHJlbGF0aW9uICJy Zl90YmxfYWJjZF9wYXJ0X3BrIgorREVUQUlMOiAgY29sdW1uIGxpc3QgY2Fubm90IGJlIHVz ZWQgZm9yIGEgcGFydGl0aW9uZWQgdGFibGUgd2hlbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25f cm9vdCBpcyBmYWxzZS4KKy0tIG9rIC0gY2FuIHVzZSByb3cgZmlsdGVyIGZvciBwYXJ0aXRp b24KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9w YXJ0X3BrXzEgKGEpOworLS0gb2sgLSAiYSIgaXMgYSBQSyBjb2wKK1VQREFURSByZl90Ymxf YWJjZF9wYXJ0X3BrIFNFVCBhID0gMTsKKy0tIHNldCBQVUJMSVNIX1ZJQV9QQVJUSVRJT05f Uk9PVCB0byB0cnVlIGFuZCB0ZXN0IHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbmVkCistLSB0 YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIChQVUJMSVNIX1ZJQV9QQVJU SVRJT05fUk9PVD0xKTsKKy0tIG9rIC0gY2FuIHVzZSByb3cgZmlsdGVyIGZvciBwYXJ0aXRp b25lZCB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3Ri bF9hYmNkX3BhcnRfcGsgKGEpOworLS0gb2sgLSAiYSIgaXMgYSBQSyBjb2wKK1VQREFURSBy Zl90YmxfYWJjZF9wYXJ0X3BrIFNFVCBhID0gMTsKKy0tIGZhaWwgLSBjYW5ub3Qgc2V0IFBV QkxJU0hfVklBX1BBUlRJVElPTl9ST09UIHRvIGZhbHNlIGlmIGFueSByb3cgZmlsdGVyIGlz CistLSB1c2VkIGZvciBwYXJ0aXRpb25lZCB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjYgU0VUIChQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVD0wKTsKK0VSUk9SOiAgY2Fu bm90IHNldCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlIGZvciBwdWJsaWNh dGlvbiAidGVzdHB1YjYiCitERVRBSUw6ICBUaGUgcHVibGljYXRpb24gY29udGFpbnMgYSBj b2x1bW4gbGlzdCBmb3IgYSBwYXJ0aXRpb25lZCB0YWJsZSAicmZfdGJsX2FiY2RfcGFydF9w ayIgd2hpY2ggaXMgbm90IGFsbG93ZWQgd2hlbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9v dCBpcyBmYWxzZS4KKy0tIE5vdyBjaGFuZ2UgdGhlIHJvb3QgZmlsdGVyIHRvIHVzZSBhIGNv bHVtbiAiYiIKKy0tICh3aGljaCBpcyBub3QgaW4gdGhlIHJlcGxpY2EgaWRlbnRpdHkpCitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9w a18xIChiKTsKKy0tIG9rIC0gd2UgZG9uJ3QgaGF2ZSByb3cgZmlsdGVyIGZvciBwYXJ0aXRp b25lZCB0YWJsZS4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCAoUFVCTElTSF9W SUFfUEFSVElUSU9OX1JPT1Q9MCk7CistLSBmYWlsIC0gImIiIGlzIG5vdCBpbiBSRVBMSUNB IElERU5USVRZIElOREVYCitVUERBVEUgcmZfdGJsX2FiY2RfcGFydF9wayBTRVQgYSA9IDE7 CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX3BhcnRfcGtfMSIK K0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90 IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorLS0gc2V0IFBVQkxJU0hfVklBX1BBUlRJ VElPTl9ST09UIHRvIHRydWUKKy0tIGNhbiB1c2Ugcm93IGZpbHRlciBmb3IgcGFydGl0aW9u ZWQgdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCAoUFVCTElTSF9WSUFf UEFSVElUSU9OX1JPT1Q9MSk7CistLSBvayAtIGNhbiB1c2Ugcm93IGZpbHRlciBmb3IgcGFy dGl0aW9uZWQgdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSBy Zl90YmxfYWJjZF9wYXJ0X3BrIChiKTsKKy0tIGZhaWwgLSAiYiIgaXMgbm90IGluIFJFUExJ Q0EgSURFTlRJVFkgSU5ERVgKK1VQREFURSByZl90YmxfYWJjZF9wYXJ0X3BrIFNFVCBhID0g MTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2RfcGFydF9wa18x IgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBu b3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCitEUk9QIFBVQkxJQ0FUSU9OIHRlc3Rw dWI2OworRFJPUCBUQUJMRSByZl90YmxfYWJjZF9wazsKK0RST1AgVEFCTEUgcmZfdGJsX2Fi Y2Rfbm9wazsKK0RST1AgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wazsKKy0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0gVGVz dCBjYWNoZSBpbnZhbGlkYXRpb24gRk9SIEFMTCBUQUJMRVMgcHVibGljYXRpb24KIFNFVCBj bGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBUQUJMRSB0ZXN0cHViX3Ri bDQoYSBpbnQpOwpAQCAtMTA1OCw2ICsxNDI0LDE1IEBAIEFMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBw dWJfdGVzCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKKy0tIFZl cmlmeSB0aGF0IGl0IGZhaWxzIHRvIGFkZCBhIHNjaGVtYSB3aXRoIGEgY29sdW1uIHNwZWNp ZmljYXRpb24KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxM IFRBQkxFUyBJTiBTQ0hFTUEgZm9vIChhLCBiKTsKK0VSUk9SOiAgc3ludGF4IGVycm9yIGF0 IG9yIG5lYXIgIigiCitMSU5FIDE6IC4uLlRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBB TEwgVEFCTEVTIElOIFNDSEVNQSBmb28gKGEsIGIpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEg Zm9vLCBiYXIgKGEsIGIpOworRVJST1I6ICBjb2x1bW4gc3BlY2lmaWNhdGlvbiBub3QgYWxs b3dlZCBmb3Igc2NoZW1hCitMSU5FIDE6IC4uLiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFM TCBUQUJMRVMgSU4gU0NIRU1BIGZvbywgYmFyIChhLCBiKS4uLgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIC0tIGNs ZWFudXAgcHViX3Rlc3QxIHNjaGVtYSBmb3IgaW52YWxpZGF0aW9uIHRlc3RzCiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRFJPUCBBTEwgVEFCTEVTIElOIFNDSEVN QSBwdWJfdGVzdDE7CiBEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2ZvcnNjaGVtYSwgdGVz dHB1YjRfZm9yc2NoZW1hLCB0ZXN0cHViNV9mb3JzY2hlbWEsIHRlc3RwdWI2X2ZvcnNjaGVt YSwgdGVzdHB1Yl9mb3J0YWJsZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L3B1YmxpY2F0aW9uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNx bAppbmRleCA1NDU3YzU2YjMzZi4uYjM5YTQ5NTM2MzIgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wdWJsaWNhdGlvbi5zcWwKQEAgLTM3Myw2ICszNzMsMjkyIEBAIERST1AgVEFCTEUgcmZf dGJsX2FiY2Rfbm9wazsKIERST1AgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wazsKIC0tID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQog CistLSBmYWlsIC0gZHVwbGljYXRlIHRhYmxlcyBhcmUgbm90IGFsbG93ZWQgaWYgdGhhdCB0 YWJsZSBoYXMgYW55IGNvbHVtbiBsaXN0cworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAn RVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZHVwcyBGT1IgVEFCTEUgdGVz dHB1Yl90YmwxIChhKSwgdGVzdHB1Yl90YmwxIFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7 CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9kdXBzIEZPUiBUQUJMRSB0ZXN0cHViX3Ri bDEsIHRlc3RwdWJfdGJsMSAoYSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKK1JFU0VU IGNsaWVudF9taW5fbWVzc2FnZXM7CisKKy0tIHRlc3QgZm9yIGNvbHVtbiBsaXN0cworU0VU IGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMTsKK0NSRUFURSBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcnRhYmxlX2luc2VydCBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcp OworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3Ri bDUgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHRleHQsIGMgdGV4dCwKKwlkIGludCBnZW5lcmF0 ZWQgYWx3YXlzIGFzIChhICsgbGVuZ3RoKGIpKSBzdG9yZWQpOworLS0gZXJyb3I6IGNvbHVt biAieCIgZG9lcyBub3QgZXhpc3QKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFi bGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgeCk7CistLSBlcnJvcjogcmVwbGljYSBp ZGVudGl0eSAiYSIgbm90IGluY2x1ZGVkIGluIHRoZSBjb2x1bW4gbGlzdAorQUxURVIgUFVC TElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChiLCBj KTsKK1VQREFURSB0ZXN0cHViX3RibDUgU0VUIGEgPSAxOworQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNTsKKy0tIGVycm9yOiBn ZW5lcmF0ZWQgY29sdW1uICJkIiBjYW4ndCBiZSBpbiBsaXN0CitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIGQpOworLS0g ZXJyb3I6IHN5c3RlbSBhdHRyaWJ1dGVzICJjdGlkIiBub3QgYWxsb3dlZCBpbiBjb2x1bW4g bGlzdAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVz dHB1Yl90Ymw1IChhLCBjdGlkKTsKKy0tIG9rCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIGMpOworQUxURVIgVEFCTEUg dGVzdHB1Yl90Ymw1IERST1AgQ09MVU1OIGM7CQktLSBubyBkaWNlCistLSBvazogZm9yIGlu c2VydC1vbmx5IHB1YmxpY2F0aW9uLCB0aGUgY29sdW1uIGxpc3QgaXMgYXJiaXRyYXJ5CitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2luc2VydCBBREQgVEFCTEUgdGVz dHB1Yl90Ymw1IChiLCBjKTsKKworLyogbm90IGFsbCByZXBsaWNhIGlkZW50aXRpZXMgYXJl IGdvb2QgZW5vdWdoICovCitDUkVBVEUgVU5JUVVFIElOREVYIHRlc3RwdWJfdGJsNV9iX2tl eSBPTiB0ZXN0cHViX3RibDUgKGIsIGMpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw1IEFM VEVSIGIgU0VUIE5PVCBOVUxMLCBBTFRFUiBjIFNFVCBOT1QgTlVMTDsKK0FMVEVSIFRBQkxF IHRlc3RwdWJfdGJsNSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJs NV9iX2tleTsKKy0tIGVycm9yOiByZXBsaWNhIGlkZW50aXR5IChiLGMpIGlzIGNvdmVyZWQg YnkgY29sdW1uIGxpc3QgKGEsIGMpCitVUERBVEUgdGVzdHB1Yl90Ymw1IFNFVCBhID0gMTsK K0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRSB0ZXN0cHVi X3RibDU7CisKKy0tIGVycm9yOiBjaGFuZ2UgdGhlIHJlcGxpY2EgaWRlbnRpdHkgdG8gImIi LCBhbmQgY29sdW1uIGxpc3QgdG8gKGEsIGMpCistLSB0aGVuIHVwZGF0ZSBmYWlscywgYmVj YXVzZSAoYSwgYykgZG9lcyBub3QgY292ZXIgcmVwbGljYSBpZGVudGl0eQorQUxURVIgVEFC TEUgdGVzdHB1Yl90Ymw1IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90 Ymw1X2Jfa2V5OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFC TEUgdGVzdHB1Yl90Ymw1IChhLCBjKTsKK1VQREFURSB0ZXN0cHViX3RibDUgU0VUIGEgPSAx OworCisvKiBCdXQgaWYgdXBkL2RlbCBhcmUgbm90IHB1Ymxpc2hlZCwgaXQgd29ya3MgT0sg Ki8KK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNB VElPTiB0ZXN0cHViX3RhYmxlX2lucyBXSVRIIChwdWJsaXNoID0gJ2luc2VydCwgdHJ1bmNh dGUnKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX3RhYmxlX2lucyBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhKTsJCS0tIG9rCitc ZFJwKyB0ZXN0cHViX3RhYmxlX2lucworCistLSB3aXRoIFJFUExJQ0EgSURFTlRJVFkgRlVM TCwgY29sdW1uIGxpc3RzIGFyZSBub3QgYWxsb3dlZAorQ1JFQVRFIFRBQkxFIHRlc3RwdWJf dGJsNiAoYSBpbnQsIGIgdGV4dCwgYyB0ZXh0KTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJs NiBSRVBMSUNBIElERU5USVRZIEZVTEw7CisKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJf Zm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNiAoYSwgYiwgYyk7CitVUERBVEUgdGVz dHB1Yl90Ymw2IFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFi bGUgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDY7CisKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNjsgLS0gb2sKK1VQREFURSB0ZXN0 cHViX3RibDYgU0VUIGEgPSAxOworCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRh YmxlIEFMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNiBTRVQgQ09MVU1OUyAoYSwgYiwgYyk7CitV UERBVEUgdGVzdHB1Yl90Ymw2IFNFVCBhID0gMTsKKworLS0gbWFrZSBzdXJlIGNoYW5naW5n IHRoZSBjb2x1bW4gbGlzdCBpcyB1cGRhdGVkIGluIFNFVCBUQUJMRQorQ1JFQVRFIFRBQkxF IHRlc3RwdWJfdGJsNyAoYSBpbnQgcHJpbWFyeSBrZXksIGIgdGV4dCwgYyB0ZXh0KTsKK0FM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJs NyAoYSwgYik7CitcZCsgdGVzdHB1Yl90Ymw3CistLSBvazogd2UnbGwgc2tpcCB0aGlzIHRh YmxlCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBUQUJMRSB0ZXN0 cHViX3RibDcgKGEsIGIpOworXGQrIHRlc3RwdWJfdGJsNworLS0gb2s6IHVwZGF0ZSB0aGUg Y29sdW1uIGxpc3QKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIFRB QkxFIHRlc3RwdWJfdGJsNyAoYSwgYyk7CitcZCsgdGVzdHB1Yl90Ymw3CisKKy0tIGNvbHVt biBsaXN0IGZvciBwYXJ0aXRpb25lZCB0YWJsZXMgaGFzIHRvIGNvdmVyIHJlcGxpY2EgaWRl bnRpdGllcyBmb3IKKy0tIGFsbCBjaGlsZCByZWxhdGlvbnMKK0NSRUFURSBUQUJMRSB0ZXN0 cHViX3RibDggKGEgaW50LCBiIHRleHQsIGMgdGV4dCkgUEFSVElUSU9OIEJZIEhBU0ggKGEp OworLS0gZmlyc3QgcGFydGl0aW9uIGhhcyByZXBsaWNhIGlkZW50aXR5ICJhIgorQ1JFQVRF IFRBQkxFIHRlc3RwdWJfdGJsOF8wIFBBUlRJVElPTiBPRiB0ZXN0cHViX3RibDggRk9SIFZB TFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKK0FMVEVSIFRBQkxFIHRlc3Rw dWJfdGJsOF8wIEFERCBQUklNQVJZIEtFWSAoYSk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3Ri bDhfMCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8wX3BrZXk7 CistLSBzZWNvbmQgcGFydGl0aW9uIGhhcyByZXBsaWNhIGlkZW50aXR5ICJiIgorQ1JFQVRF IFRBQkxFIHRlc3RwdWJfdGJsOF8xIFBBUlRJVElPTiBPRiB0ZXN0cHViX3RibDggRk9SIFZB TFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAxKTsKK0FMVEVSIFRBQkxFIHRlc3Rw dWJfdGJsOF8xIEFERCBQUklNQVJZIEtFWSAoYik7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3Ri bDhfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8xX3BrZXk7 CisKKy0tIG9rOiBjb2x1bW4gbGlzdCBjb3ZlcnMgYm90aCAiYSIgYW5kICJiIgorU0VUIGNs aWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfY29sX2xpc3QgRk9SIFRBQkxFIHRlc3RwdWJfdGJsOCAoYSwgYikgV0lUSCAocHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgPSAndHJ1ZScpOworUkVTRVQgY2xpZW50X21pbl9tZXNz YWdlczsKKworLS0gb2s6IHRoZSBzYW1lIHRoaW5nLCBidXQgdHJ5IHBsYWluIEFERCBUQUJM RQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfbGlzdCBEUk9QIFRBQkxFIHRlc3Rw dWJfdGJsODsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2xpc3QgQUREIFRBQkxF IHRlc3RwdWJfdGJsOCAoYSwgYik7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0gMTsK KworLS0gZmFpbHVyZTogY29sdW1uIGxpc3QgZG9lcyBub3QgY292ZXIgcmVwbGljYSBpZGVu dGl0eSBmb3IgdGhlIHNlY29uZCBwYXJ0aXRpb24KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfY29sX2xpc3QgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDg7CitBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2NvbF9saXN0IEFERCBUQUJMRSB0ZXN0cHViX3RibDggKGEsIGMpOworVVBE QVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2NvbF9saXN0IERST1AgVEFCTEUgdGVzdHB1Yl90Ymw4OworCistLSBmYWlsdXJlOiBvbmUg b2YgdGhlIHBhcnRpdGlvbnMgaGFzIFJFUExJQ0EgSURFTlRJVFkgRlVMTAorQUxURVIgVEFC TEUgdGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBGVUxMOworQUxURVIgUFVCTElD QVRJT04gdGVzdHB1Yl9jb2xfbGlzdCBBREQgVEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBjKTsK K1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAxOworQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9jb2xfbGlzdCBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsODsKKworLS0gYWRkIHRhYmxl IGFuZCB0aGVuIHRyeSBjaGFuZ2luZyByZXBsaWNhIGlkZW50aXR5CitBTFRFUiBUQUJMRSB0 ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJs OF8xX3BrZXk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9saXN0IEFERCBUQUJM RSB0ZXN0cHViX3RibDggKGEsIGIpOworCistLSBmYWlsdXJlOiByZXBsaWNhIGlkZW50aXR5 IGZ1bGwgY2FuJ3QgYmUgdXNlZCB3aXRoIGEgY29sdW1uIGxpc3QKK0FMVEVSIFRBQkxFIHRl c3RwdWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK1VQREFURSB0ZXN0cHViX3Ri bDggU0VUIGEgPSAxOworCistLSBmYWlsdXJlOiByZXBsaWNhIGlkZW50aXR5IGhhcyB0byBi ZSBjb3ZlcmVkIGJ5IHRoZSBjb2x1bW4gbGlzdAorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4 XzEgRFJPUCBDT05TVFJBSU5UIHRlc3RwdWJfdGJsOF8xX3BrZXk7CitBTFRFUiBUQUJMRSB0 ZXN0cHViX3RibDhfMSBBREQgUFJJTUFSWSBLRVkgKGMpOworQUxURVIgVEFCTEUgdGVzdHB1 Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMV9w a2V5OworVVBEQVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9IDE7CisKK0RST1AgVEFCTEUgdGVz dHB1Yl90Ymw4OworCistLSBjb2x1bW4gbGlzdCBmb3IgcGFydGl0aW9uZWQgdGFibGVzIGhh cyB0byBjb3ZlciByZXBsaWNhIGlkZW50aXRpZXMgZm9yCistLSBhbGwgY2hpbGQgcmVsYXRp b25zCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4IChhIGludCwgYiB0ZXh0LCBjIHRleHQp IFBBUlRJVElPTiBCWSBIQVNIIChhKTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29s X2xpc3QgQUREIFRBQkxFIHRlc3RwdWJfdGJsOCAoYSwgYik7CistLSBmaXJzdCBwYXJ0aXRp b24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgImEiCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4 XzAgKGEgaW50LCBiIHRleHQsIGMgdGV4dCk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhf MCBBREQgUFJJTUFSWSBLRVkgKGEpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgUkVQ TElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMF9wa2V5OworLS0gc2Vj b25kIHBhcnRpdGlvbiBoYXMgcmVwbGljYSBpZGVudGl0eSAiYiIKK0NSRUFURSBUQUJMRSB0 ZXN0cHViX3RibDhfMSAoYSBpbnQsIGIgdGV4dCwgYyB0ZXh0KTsKK0FMVEVSIFRBQkxFIHRl c3RwdWJfdGJsOF8xIEFERCBQUklNQVJZIEtFWSAoYyk7CitBTFRFUiBUQUJMRSB0ZXN0cHVi X3RibDhfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8xX3Br ZXk7CisKKy0tIG9rOiBhdHRhY2hpbmcgZmlyc3QgcGFydGl0aW9uIHdvcmtzLCBiZWNhdXNl IChhKSBpcyBpbiBjb2x1bW4gbGlzdAorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4IEFUVEFD SCBQQVJUSVRJT04gdGVzdHB1Yl90Ymw4XzAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIs IHJlbWFpbmRlciAwKTsKKy0tIGZhaWx1cmU6IHNlY29uZCBwYXJ0aXRpb24gaGFzIHJlcGxp Y2EgaWRlbnRpdHkgKGMpLCB3aGljaCBzaSBub3QgaW4gY29sdW1uIGxpc3QKK0FMVEVSIFRB QkxFIHRlc3RwdWJfdGJsOCBBVFRBQ0ggUEFSVElUSU9OIHRlc3RwdWJfdGJsOF8xIEZPUiBW QUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMSk7CitVUERBVEUgdGVzdHB1Yl90 Ymw4IFNFVCBhID0gMTsKKworLS0gZmFpbHVyZTogY2hhbmdpbmcgcmVwbGljYSBpZGVudGl0 eSB0byBGVUxMIGZvciBwYXJ0aXRpb24gZmFpbHMsIGJlY2F1c2UKKy0tIG9mIHRoZSBjb2x1 bW4gbGlzdCBvbiB0aGUgcGFyZW50CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBSRVBM SUNBIElERU5USVRZIEZVTEw7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0gMTsKKwor RFJPUCBUQUJMRSB0ZXN0cHViX3RibDUsIHRlc3RwdWJfdGJsNiwgdGVzdHB1Yl90Ymw3LCB0 ZXN0cHViX3RibDgsIHRlc3RwdWJfdGJsOF8xOworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHVi X3RhYmxlX2lucywgdGVzdHB1Yl9mb3J0YWJsZSwgdGVzdHB1Yl9mb3J0YWJsZV9pbnNlcnQs IHRlc3RwdWJfY29sX2xpc3Q7CistLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KKworLS0gVGVzdCBjb21iaW5hdGlvbiBvZiBjb2x1 bW4gbGlzdCBhbmQgcm93IGZpbHRlcgorU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJS T1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0ZXJzOworUkVTRVQg Y2xpZW50X21pbl9tZXNzYWdlczsKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2Zp bHRlcnMgKGEgaW50LCBiIGludCwgYyBpbnQsIFBSSU1BUlkgS0VZIChhLGMpKTsKK0FMVEVS IFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVycyBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHRlc3RwdWJfdGJsX2JvdGhfZmlsdGVyc19wa2V5OworQUxURVIgUFVCTElDQVRJ T04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhfZmls dGVycyAoYSxjKSBXSEVSRSAoYyAhPSAxKTsKK1xkUnArIHRlc3RwdWJfYm90aF9maWx0ZXJz CitcZCsgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzCisKK0RST1AgVEFCTEUgdGVzdHB1Yl90 YmxfYm90aF9maWx0ZXJzOworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX2JvdGhfZmlsdGVy czsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorCistLSBNb3JlIGNvbHVtbiBsaXN0IHRlc3RzIGZvciB2YWxpZGF0aW5nIGNv bHVtbiByZWZlcmVuY2VzCitDUkVBVEUgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayhhIGludCwg YiBpbnQsIGMgaW50LCBkIGludCk7CitDUkVBVEUgVEFCTEUgcmZfdGJsX2FiY2RfcGsoYSBp bnQsIGIgaW50LCBjIGludCwgZCBpbnQsIFBSSU1BUlkgS0VZKGEsYikpOworQ1JFQVRFIFRB QkxFIHJmX3RibF9hYmNkX3BhcnRfcGsgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCkgUEFS VElUSU9OIGJ5IFJBTkdFIChhKTsKK0NSRUFURSBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3Br XzEgKGIgaW50LCBhIGludCBQUklNQVJZIEtFWSk7CitBTFRFUiBUQUJMRSByZl90YmxfYWJj ZF9wYXJ0X3BrIEFUVEFDSCBQQVJUSVRJT04gcmZfdGJsX2FiY2RfcGFydF9wa18xIEZPUiBW QUxVRVMgRlJPTSAoMSkgVE8gKDEwKTsKKworLS0gQ2FzZSAxLiBSRVBMSUNBIElERU5USVRZ IERFRkFVTFQgKG1lYW5zIHVzZSBwcmltYXJ5IGtleSBvciBub3RoaW5nKQorCistLSAxYS4g UkVQTElDQSBJREVOVElUWSBpcyBERUZBVUxUIGFuZCB0YWJsZSBoYXMgYSBQSy4KK1NFVCBj bGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViNiBGT1IgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGEsIGIpOworUkVTRVQgY2xpZW50X21p bl9tZXNzYWdlczsKKy0tIG9rIC0gKGEsYikgY292ZXJ0cyBhbGwgUEsgY29scworVVBEQVRF IHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2 IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSwgYiwgYyk7CistLSBvayAtIChhLGIsYykg Y292ZXJ0cyBhbGwgUEsgY29scworVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsK K0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAo YSk7CistLSBmYWlsIC0gImIiIGlzIG1pc3NpbmcgZnJvbSB0aGUgY29sdW1uIGxpc3QKK1VQ REFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGIpOworLS0gZmFpbCAtICJhIiBpcyBt aXNzaW5nIGZyb20gdGhlIGNvbHVtbiBsaXN0CitVUERBVEUgcmZfdGJsX2FiY2RfcGsgU0VU IGEgPSAxOworCistLSAxYi4gUkVQTElDQSBJREVOVElUWSBpcyBERUZBVUxUIGFuZCB0YWJs ZSBoYXMgbm8gUEsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90 YmxfYWJjZF9ub3BrIChhKTsKKy0tIG9rIC0gdGhlcmUncyBubyByZXBsaWNhIGlkZW50aXR5 LCBzbyBhbnkgY29sdW1uIGxpc3Qgd29ya3MKKy0tIG5vdGU6IGl0IGZhaWxzIGFueXdheSwg anVzdCBhIGJpdCBsYXRlciBiZWNhdXNlIFVQREFURSByZXF1aXJlcyBSSQorVVBEQVRFIHJm X3RibF9hYmNkX25vcGsgU0VUIGEgPSAxOworCistLSBDYXNlIDIuIFJFUExJQ0EgSURFTlRJ VFkgRlVMTAorQUxURVIgVEFCTEUgcmZfdGJsX2FiY2RfcGsgUkVQTElDQSBJREVOVElUWSBG VUxMOworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayBSRVBMSUNBIElERU5USVRZIEZV TEw7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rf cGsgKGMpOworLS0gZmFpbCAtIHdpdGggUkVQTElDQSBJREVOVElUWSBGVUxMIG5vIGNvbHVt biBsaXN0IGlzIGFsbG93ZWQKK1VQREFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9IDE7CitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAo YSwgYiwgYywgZCk7CistLSBmYWlsIC0gd2l0aCBSRVBMSUNBIElERU5USVRZIEZVTEwgbm8g Y29sdW1uIGxpc3QgaXMgYWxsb3dlZAorVVBEQVRFIHJmX3RibF9hYmNkX25vcGsgU0VUIGEg PSAxOworCistLSBDYXNlIDMuIFJFUExJQ0EgSURFTlRJVFkgTk9USElORworQUxURVIgVEFC TEUgcmZfdGJsX2FiY2RfcGsgUkVQTElDQSBJREVOVElUWSBOT1RISU5HOworQUxURVIgVEFC TEUgcmZfdGJsX2FiY2Rfbm9wayBSRVBMSUNBIElERU5USVRZIE5PVEhJTkc7CitBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGEpOworLS0g b2sgLSBSRVBMSUNBIElERU5USVRZIE5PVEhJTkcgbWVhbnMgYWxsIGNvbHVtbiBsaXN0cyBh cmUgdmFsaWQKKy0tIGl0IHN0aWxsIGZhaWxzIGxhdGVyIGJlY2F1c2Ugd2l0aG91dCBSSSB3 ZSBjYW4ndCByZXBsaWNhdGUgdXBkYXRlcworVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBh ID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJj ZF9wayAoYSwgYiwgYywgZCk7CistLSBvayAtIFJFUExJQ0EgSURFTlRJVFkgTk9USElORyBt ZWFucyBhbGwgY29sdW1uIGxpc3RzIGFyZSB2YWxpZAorLS0gaXQgc3RpbGwgZmFpbHMgbGF0 ZXIgYmVjYXVzZSB3aXRob3V0IFJJIHdlIGNhbid0IHJlcGxpY2F0ZSB1cGRhdGVzCitVUERB VEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAxOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgKGQpOworLS0gb2sgLSBSRVBMSUNBIElE RU5USVRZIE5PVEhJTkcgbWVhbnMgYWxsIGNvbHVtbiBsaXN0cyBhcmUgdmFsaWQKKy0tIGl0 IHN0aWxsIGZhaWxzIGxhdGVyIGJlY2F1c2Ugd2l0aG91dCBSSSB3ZSBjYW4ndCByZXBsaWNh dGUgdXBkYXRlcworVVBEQVRFIHJmX3RibF9hYmNkX25vcGsgU0VUIGEgPSAxOworCistLSBD YXNlIDQuIFJFUExJQ0EgSURFTlRJVFkgSU5ERVgKK0FMVEVSIFRBQkxFIHJmX3RibF9hYmNk X3BrIEFMVEVSIENPTFVNTiBjIFNFVCBOT1QgTlVMTDsKK0NSRUFURSBVTklRVUUgSU5ERVgg aWR4X2FiY2RfcGtfYyBPTiByZl90YmxfYWJjZF9wayhjKTsKK0FMVEVSIFRBQkxFIHJmX3Ri bF9hYmNkX3BrIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggaWR4X2FiY2RfcGtfYzsK K0FMVEVSIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgQUxURVIgQ09MVU1OIGMgU0VUIE5PVCBO VUxMOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfYWJjZF9ub3BrX2MgT04gcmZfdGJsX2Fi Y2Rfbm9wayhjKTsKK0FMVEVSIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgUkVQTElDQSBJREVO VElUWSBVU0lORyBJTkRFWCBpZHhfYWJjZF9ub3BrX2M7CitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGEpOworLS0gZmFpbCAtIGNvbHVt biBsaXN0ICJhIiBkb2VzIG5vdCBjb3ZlciB0aGUgUkVQTElDQSBJREVOVElUWSBJTkRFWCBv biAiYyIKK1VQREFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGMpOworLS0gb2sgLSBj b2x1bW4gbGlzdCAiYyIgZG9lcyBjb3ZlciB0aGUgUkVQTElDQSBJREVOVElUWSBJTkRFWCBv biAiYyIKK1VQREFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAoYSk7CistLSBmYWls IC0gY29sdW1uIGxpc3QgImEiIGRvZXMgbm90IGNvdmVyIHRoZSBSRVBMSUNBIElERU5USVRZ IElOREVYIG9uICJjIgorVVBEQVRFIHJmX3RibF9hYmNkX25vcGsgU0VUIGEgPSAxOworQUxU RVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX25vcGsgKGMp OworLS0gb2sgLSBjb2x1bW4gbGlzdCAiYyIgZG9lcyBjb3ZlciB0aGUgUkVQTElDQSBJREVO VElUWSBJTkRFWCBvbiAiYyIKK1VQREFURSByZl90YmxfYWJjZF9ub3BrIFNFVCBhID0gMTsK KworLS0gVGVzdHMgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCisKKy0tIHNldCBQVUJMSVNIX1ZJ QV9QQVJUSVRJT05fUk9PVCB0byBmYWxzZSBhbmQgdGVzdCByb3cgZmlsdGVyIGZvciBwYXJ0 aXRpb25lZAorLS0gdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCAoUFVC TElTSF9WSUFfUEFSVElUSU9OX1JPT1Q9MCk7CistLSBmYWlsIC0gY2Fubm90IHVzZSByb3cg ZmlsdGVyIGZvciBwYXJ0aXRpb25lZCB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGsgKGEpOworLS0gb2sgLSBjYW4gdXNl IHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYg U0VUIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGtfMSAoYSk7CistLSBvayAtICJhIiBpcyBh IFBLIGNvbAorVVBEQVRFIHJmX3RibF9hYmNkX3BhcnRfcGsgU0VUIGEgPSAxOworLS0gc2V0 IFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UIHRvIHRydWUgYW5kIHRlc3Qgcm93IGZpbHRl ciBmb3IgcGFydGl0aW9uZWQKKy0tIHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi NiBTRVQgKFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTEpOworLS0gb2sgLSBjYW4gdXNl IHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wayAoYSk7CistLSBvayAtICJh IiBpcyBhIFBLIGNvbAorVVBEQVRFIHJmX3RibF9hYmNkX3BhcnRfcGsgU0VUIGEgPSAxOwor LS0gZmFpbCAtIGNhbm5vdCBzZXQgUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1QgdG8gZmFs c2UgaWYgYW55IHJvdyBmaWx0ZXIgaXMKKy0tIHVzZWQgZm9yIHBhcnRpdGlvbmVkIHRhYmxl CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgKFBVQkxJU0hfVklBX1BBUlRJVElP Tl9ST09UPTApOworLS0gTm93IGNoYW5nZSB0aGUgcm9vdCBmaWx0ZXIgdG8gdXNlIGEgY29s dW1uICJiIgorLS0gKHdoaWNoIGlzIG5vdCBpbiB0aGUgcmVwbGljYSBpZGVudGl0eSkKK0FM VEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3Br XzEgKGIpOworLS0gb2sgLSB3ZSBkb24ndCBoYXZlIHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlv bmVkIHRhYmxlLgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIChQVUJMSVNIX1ZJ QV9QQVJUSVRJT05fUk9PVD0wKTsKKy0tIGZhaWwgLSAiYiIgaXMgbm90IGluIFJFUExJQ0Eg SURFTlRJVFkgSU5ERVgKK1VQREFURSByZl90YmxfYWJjZF9wYXJ0X3BrIFNFVCBhID0gMTsK Ky0tIHNldCBQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVCB0byB0cnVlCistLSBjYW4gdXNl IHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViNiBTRVQgKFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTEpOworLS0gb2sgLSBj YW4gdXNlIHJvdyBmaWx0ZXIgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wayAoYik7CistLSBm YWlsIC0gImIiIGlzIG5vdCBpbiBSRVBMSUNBIElERU5USVRZIElOREVYCitVUERBVEUgcmZf dGJsX2FiY2RfcGFydF9wayBTRVQgYSA9IDE7CisKK0RST1AgUFVCTElDQVRJT04gdGVzdHB1 YjY7CitEUk9QIFRBQkxFIHJmX3RibF9hYmNkX3BrOworRFJPUCBUQUJMRSByZl90YmxfYWJj ZF9ub3BrOworRFJPUCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrOworLS0gPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKIC0tIFRl c3QgY2FjaGUgaW52YWxpZGF0aW9uIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uCiBTRVQg Y2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CiBDUkVBVEUgVEFCTEUgdGVzdHB1Yl90 Ymw0KGEgaW50KTsKQEAgLTYxNCw2ICs5MDAsMTAgQEAgQUxURVIgUFVCTElDQVRJT04gdGVz dHB1YjFfZm9yc2NoZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBub25fZXhpc3RlbnRf c2NoZW0KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRB QkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxLCBwdWJfdGVzdDE7CiBcZFJwKyB0ZXN0cHViMV9m b3JzY2hlbWEKIAorLS0gVmVyaWZ5IHRoYXQgaXQgZmFpbHMgdG8gYWRkIGEgc2NoZW1hIHdp dGggYSBjb2x1bW4gc3BlY2lmaWNhdGlvbgorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFf Zm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBmb28gKGEsIGIpOworQUxURVIg UFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVN QSBmb28sIGJhciAoYSwgYik7CisKIC0tIGNsZWFudXAgcHViX3Rlc3QxIHNjaGVtYSBmb3Ig aW52YWxpZGF0aW9uIHRlc3RzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hl bWEgRFJPUCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBEUk9QIFBVQkxJQ0FU SU9OIHRlc3RwdWIzX2ZvcnNjaGVtYSwgdGVzdHB1YjRfZm9yc2NoZW1hLCB0ZXN0cHViNV9m b3JzY2hlbWEsIHRlc3RwdWI2X2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3J0YWJsZTsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyOV9jb2x1bW5fbGlzdC5wbCBiL3Ny Yy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyOV9jb2x1bW5fbGlzdC5wbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTI2Njk2N2IzZjQKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjlfY29sdW1uX2xpc3QucGwKQEAgLTAs MCArMSwxMTI0IEBACisjIENvcHlyaWdodCAoYykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwg RGV2ZWxvcG1lbnQgR3JvdXAKKworIyBUZXN0IHBhcnRpYWwtY29sdW1uIHB1YmxpY2F0aW9u IG9mIHRhYmxlcwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3JlU1FM OjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFRl c3Q6Ok1vcmU7CisKKyMgY3JlYXRlIHB1Ymxpc2hlciBub2RlCitteSAkbm9kZV9wdWJsaXNo ZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5v ZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRu b2RlX3B1Ymxpc2hlci0+c3RhcnQ7CisKKyMgY3JlYXRlIHN1YnNjcmliZXIgbm9kZQorbXkg JG5vZGVfc3Vic2NyaWJlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygnc3Vi c2NyaWJlcicpOworJG5vZGVfc3Vic2NyaWJlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ ICdsb2dpY2FsJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5hcHBlbmRfY29uZigncG9zdGdyZXNx bC5jb25mJywKKwlxcShtYXhfbG9naWNhbF9yZXBsaWNhdGlvbl93b3JrZXJzID0gNikpOwor JG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRwdWJsaXNoZXJfY29ubnN0ciA9ICRu b2RlX3B1Ymxpc2hlci0+Y29ubnN0ciAuICcgZGJuYW1lPXBvc3RncmVzJzsKKworc3ViIHdh aXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jCit7CisJbXkgKCRub2RlKSA9IEBfOworCisJIyBB bHNvIHdhaXQgZm9yIGluaXRpYWwgdGFibGUgc3luYyB0byBmaW5pc2gKKwlteSAkc3luY2Vk X3F1ZXJ5ID0gIlNFTEVDVCBjb3VudCgxKSA9IDAgRlJPTSBwZ19zdWJzY3JpcHRpb25fcmVs IFdIRVJFIHNyc3Vic3RhdGUgTk9UIElOICgncicsICdzJyk7IjsKKworCSRub2RlLT5wb2xs X3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICRzeW5jZWRfcXVlcnkpCisJCW9yIGRpZSAiVGlt ZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN1YnNjcmliZXIgdG8gc3luY2hyb25pemUgZGF0 YSI7Cit9CisKKyMgc2V0dXAgdGFibGVzIG9uIGJvdGggbm9kZXMKKworIyB0YWIxOiBzaW1w bGUgMToxIHJlcGxpY2F0aW9uCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGFiMSAoYSBpbnQgUFJJTUFSWSBLRVksICJCIiBp bnQsIGMgaW50KQorKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGFiMSAoYSBpbnQgUFJJTUFSWSBLRVksICJCIiBp bnQsIGMgaW50KQorKSk7CisKKyMgdGFiMjogcmVwbGljYXRpb24gZnJvbSByZWd1bGFyIHRv IHRhYmxlIHdpdGggZmV3ZXIgY29sdW1ucworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjIgKGEgaW50IFBSSU1BUlkgS0VZ LCBiIHZhcmNoYXIsIGMgaW50KTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjIgKGEgaW50IFBSSU1BUlkg S0VZLCBiIHZhcmNoYXIpCispKTsKKworIyB0YWIzOiBzaW1wbGUgMToxIHJlcGxpY2F0aW9u IHdpdGggd2VpcmQgY29sdW1uIG5hbWVzCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGFiMyAoImEnIiBpbnQgUFJJTUFSWSBL RVksICJCIiB2YXJjaGFyLCAiYyciIGludCkKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjMgKCJhJyIgaW50 IFBSSU1BUlkgS0VZLCAiYyciIGludCkKKykpOworCisjIHRlc3RfcGFydDogcGFydGl0aW9u ZWQgdGFibGVzLCB3aXRoIHBhcnRpdGlvbmluZyAoaW5jbHVkaW5nIG11bHRpLWxldmVsCisj IHBhcnRpdGlvbmluZywgYW5kIGZld2VyIGNvbHVtbnMgb24gdGhlIHN1YnNjcmliZXIpCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFC TEUgdGVzdF9wYXJ0IChhIGludCBQUklNQVJZIEtFWSwgYiB0ZXh0LCBjIHRpbWVzdGFtcHR6 KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF8xXzEg UEFSVElUSU9OIE9GIHRlc3RfcGFydCBGT1IgVkFMVUVTIElOICgxLDIsMyw0LDUsNik7CisJ Q1JFQVRFIFRBQkxFIHRlc3RfcGFydF8yXzEgUEFSVElUSU9OIE9GIHRlc3RfcGFydCBGT1Ig VkFMVUVTIElOICg3LDgsOSwxMCwxMSwxMikgUEFSVElUSU9OIEJZIExJU1QgKGEpOworCUNS RUFURSBUQUJMRSB0ZXN0X3BhcnRfMl8yIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfMl8xIEZP UiBWQUxVRVMgSU4gKDcsOCw5LDEwKTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydCAoYSBpbnQg UFJJTUFSWSBLRVksIGIgdGV4dCkgUEFSVElUSU9OIEJZIExJU1QgKGEpOworCUNSRUFURSBU QUJMRSB0ZXN0X3BhcnRfMV8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnQgRk9SIFZBTFVFUyBJ TiAoMSwyLDMsNCw1LDYpOworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfMl8xIFBBUlRJVElP TiBPRiB0ZXN0X3BhcnQgRk9SIFZBTFVFUyBJTiAoNyw4LDksMTAsMTEsMTIpIFBBUlRJVElP TiBCWSBMSVNUIChhKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0XzJfMiBQQVJUSVRJT04g T0YgdGVzdF9wYXJ0XzJfMSBGT1IgVkFMVUVTIElOICg3LDgsOSwxMCk7CispKTsKKworIyB0 YWI0OiB0YWJsZSB3aXRoIHVzZXItZGVmaW5lZCBlbnVtIHR5cGVzCiskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVFlQRSB0ZXN0X3R5cCBB UyBFTlVNICgnYmx1ZScsICdyZWQnKTsKKwlDUkVBVEUgVEFCTEUgdGFiNCAoYSBJTlQgUFJJ TUFSWSBLRVksIGIgdGVzdF90eXAsIGMgaW50LCBkIHRleHQpOworKSk7CisKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVFlQRSB0ZXN0 X3R5cCBBUyBFTlVNICgnYmx1ZScsICdyZWQnKTsKKwlDUkVBVEUgVEFCTEUgdGFiNCAoYSBJ TlQgUFJJTUFSWSBLRVksIGIgdGVzdF90eXAsIGQgdGV4dCk7CispKTsKKworCisjIFRFU1Q6 IGNyZWF0ZSBwdWJsaWNhdGlvbiBhbmQgc3Vic2NyaXB0aW9uIGZvciBzb21lIG9mIHRoZSB0 YWJsZXMgd2l0aAorIyBjb2x1bW4gbGlzdHMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiBwdWIxCisJICAgRk9SIFRB QkxFIHRhYjEgKGEsICJCIiksIHRhYjMgKCJhJyIsICJjJyIpLCB0ZXN0X3BhcnQgKGEsIGIp LCB0YWI0IChhLCBiLCBkKQorCSAgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSAndHJ1ZScpOworKSk7CisKKyMgY2hlY2sgdGhhdCB3ZSBnb3QgdGhlIHJpZ2h0IHByYXR0 cnMgdmFsdWVzIGZvciB0aGUgcHVibGljYXRpb24gaW4gdGhlCisjIHBnX3B1YmxpY2F0aW9u X3JlbCBjYXRhbG9nIChvcmRlciBieSByZWxuYW1lLCB0byBnZXQgc3RhYmxlIG9yZGVyaW5n KQorbXkgJHJlc3VsdCA9ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCVNFTEVDVCByZWxuYW1lLCBwcmF0dHJzCisJRlJPTSBwZ19wdWJsaWNhdGlvbl9y ZWwgcGIgSk9JTiBwZ19jbGFzcyBwYyBPTihwYi5wcnJlbGlkID0gcGMub2lkKQorCU9SREVS IEJZIHJlbG5hbWUKKykpOworCitpcygkcmVzdWx0LCBxcSh0YWIxfDEgMgordGFiM3wxIDMK K3RhYjR8MSAyIDQKK3Rlc3RfcGFydHwxIDIpLCAncHVibGljYXRpb24gcmVsYXRpb24gdXBk YXRlZCcpOworCisjIFRFU1Q6IGluc2VydCBkYXRhIGludG8gdGhlIHRhYmxlcywgY3JlYXRl IHN1YnNjcmlwdGlvbiBhbmQgc2VlIGlmIHN5bmMKKyMgcmVwbGljYXRlcyB0aGUgcmlnaHQg Y29sdW1ucworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ SU5TRVJUIElOVE8gdGFiMSBWQUxVRVMgKDEsIDIsIDMpOworCUlOU0VSVCBJTlRPIHRhYjEg VkFMVUVTICg0LCA1LCA2KTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0YWIzIFZBTFVFUyAoMSwgMiwgMyk7CisJ SU5TRVJUIElOVE8gdGFiMyBWQUxVRVMgKDQsIDUsIDYpOworKSk7CisKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjQgVkFM VUVTICgxLCAncmVkJywgMywgJ29oIG15Jyk7CisJSU5TRVJUIElOVE8gdGFiNCBWQUxVRVMg KDIsICdibHVlJywgNCwgJ2hlbGxvJyk7CispKTsKKworIyByZXBsaWNhdGlvbiBvZiBwYXJ0 aXRpb25lZCB0YWJsZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cXEoCisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0IFZBTFVFUyAoMSwgJ2FiYycsICcyMDIxLTA3 LTA0IDEyOjAwOjAwJyk7CisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0IFZBTFVFUyAoMiwgJ2Jj ZCcsICcyMDIxLTA3LTAzIDExOjEyOjEzJyk7CisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0IFZB TFVFUyAoNywgJ2FiYycsICcyMDIxLTA3LTA0IDEyOjAwOjAwJyk7CisJSU5TRVJUIElOVE8g dGVzdF9wYXJ0IFZBTFVFUyAoOCwgJ2JjZCcsICcyMDIxLTA3LTAzIDExOjEyOjEzJyk7Cisp KTsKKworIyBjcmVhdGUgc3Vic2NyaXB0aW9uIGZvciB0aGUgcHVibGljYXRpb24sIHdhaXQg Zm9yIHN5bmMgdG8gY29tcGxldGUsCisjIHRoZW4gY2hlY2sgdGhlIHN5bmMgcmVzdWx0cwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBT VUJTQ1JJUFRJT04gc3ViMSBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHInIFBVQkxJ Q0FUSU9OIHB1YjEKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9z dWJzY3JpYmVyKTsKKworIyB0YWIxOiBvbmx5IChhLGIpIGlzIHJlcGxpY2F0ZWQKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNU ICogRlJPTSB0YWIxIE9SREVSIEJZIGEiKTsKK2lzKCRyZXN1bHQsIHFxKDF8MnwKKzR8NXwp LCAnaW5zZXJ0IG9uIGNvbHVtbiB0YWIxLmMgaXMgbm90IHJlcGxpY2F0ZWQnKTsKKworIyB0 YWIzOiBvbmx5IChhLGMpIGlzIHJlcGxpY2F0ZWQKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShTRUxFQ1QgKiBGUk9NIHRhYjMgT1JE RVIgQlkgImEnIikpOworaXMoJHJlc3VsdCwgcXEoMXwzCis0fDYpLCAnaW5zZXJ0IG9uIGNv bHVtbiB0YWIzLmIgaXMgbm90IHJlcGxpY2F0ZWQnKTsKKworIyB0YWI0OiBvbmx5IChhLGIs ZCkgaXMgcmVwbGljYXRlZAorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRhYjQgT1JERVIgQlkgYSIpOworaXMo JHJlc3VsdCwgcXEoMXxyZWR8b2ggbXkKKzJ8Ymx1ZXxoZWxsbyksICdpbnNlcnQgb24gY29s dW1uIHRhYjQuYyBpcyBub3QgcmVwbGljYXRlZCcpOworCisjIHRlc3RfcGFydDogKGEsYikg aXMgcmVwbGljYXRlZAorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRlc3RfcGFydCBPUkRFUiBCWSBhIik7Citp cygkcmVzdWx0LCBxcSgxfGFiYworMnxiY2QKKzd8YWJjCis4fGJjZCksICdpbnNlcnQgb24g Y29sdW1uIHRlc3RfcGFydC5jIGNvbHVtbnMgaXMgbm90IHJlcGxpY2F0ZWQnKTsKKworCisj IFRFU1Q6IG5vdyBpbnNlcnQgbW9yZSBkYXRhIGludG8gdGhlIHRhYmxlcywgYW5kIHdhaXQg dW50aWwgd2UgcmVwbGljYXRlCisjIHRoZW0gKG5vdCBieSB0YWJsZXN5bmMsIGJ1dCByZWd1 bGFyIGRlY29kaW5nIGFuZCByZXBsaWNhdGlvbikKKworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiMSBWQUxVRVMgKDIsIDMs IDQpOworCUlOU0VSVCBJTlRPIHRhYjEgVkFMVUVTICg1LCA2LCA3KTsKKykpOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0 YWIzIFZBTFVFUyAoMiwgMywgNCk7CisJSU5TRVJUIElOVE8gdGFiMyBWQUxVRVMgKDUsIDYs IDcpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFx KAorCUlOU0VSVCBJTlRPIHRhYjQgVkFMVUVTICgzLCAncmVkJywgNSwgJ2ZvbycpOworCUlO U0VSVCBJTlRPIHRhYjQgVkFMVUVTICg0LCAnYmx1ZScsIDYsICdiYXInKTsKKykpOworCisj IHJlcGxpY2F0aW9uIG9mIHBhcnRpdGlvbmVkIHRhYmxlCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnQgVkFMVUVT ICgzLCAneHh4JywgJzIwMjItMDItMDEgMTA6MDA6MDAnKTsKKwlJTlNFUlQgSU5UTyB0ZXN0 X3BhcnQgVkFMVUVTICg0LCAneXl5JywgJzIwMjItMDMtMDIgMTU6MTI6MTMnKTsKKwlJTlNF UlQgSU5UTyB0ZXN0X3BhcnQgVkFMVUVTICg5LCAnenp6JywgJzIwMjItMDQtMDMgMjE6MDA6 MDAnKTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnQgVkFMVUVTICgxMCwgJ3FxcScsICcyMDIy LTA1LTA0IDIyOjEyOjEzJyk7CispKTsKKworIyB3YWl0IGZvciBjYXRjaHVwIGJlZm9yZSBj aGVja2luZyB0aGUgc3Vic2NyaWJlcgorJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdzdWIxJyk7CisKKyMgdGFiMTogb25seSAoYSxiKSBpcyByZXBsaWNhdGVkCiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVD VCAqIEZST00gdGFiMSBPUkRFUiBCWSBhIik7CitpcygkcmVzdWx0LCBxcSgxfDJ8CisyfDN8 Cis0fDV8Cis1fDZ8KSwgJ2luc2VydCBvbiBjb2x1bW4gdGFiMS5jIGlzIG5vdCByZXBsaWNh dGVkJyk7CisKKyMgdGFiMzogb25seSAoYSxjKSBpcyByZXBsaWNhdGVkCiskcmVzdWx0ID0g JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXEoU0VMRUNUICog RlJPTSB0YWIzIE9SREVSIEJZICJhJyIpKTsKK2lzKCRyZXN1bHQsIHFxKDF8MworMnw0Cis0 fDYKKzV8NyksICdpbnNlcnQgb24gY29sdW1uIHRhYjMuYiBpcyBub3QgcmVwbGljYXRlZCcp OworCisjIHRhYjQ6IG9ubHkgKGEsYixkKSBpcyByZXBsaWNhdGVkCiskcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00g dGFiNCBPUkRFUiBCWSBhIik7CitpcygkcmVzdWx0LCBxcSgxfHJlZHxvaCBteQorMnxibHVl fGhlbGxvCiszfHJlZHxmb28KKzR8Ymx1ZXxiYXIpLCAnaW5zZXJ0IG9uIGNvbHVtbiB0YWI0 LmMgaXMgbm90IHJlcGxpY2F0ZWQnKTsKKworIyB0ZXN0X3BhcnQ6IChhLGIpIGlzIHJlcGxp Y2F0ZWQKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkiU0VMRUNUICogRlJPTSB0ZXN0X3BhcnQgT1JERVIgQlkgYSIpOworaXMoJHJlc3Vs dCwgcXEoMXxhYmMKKzJ8YmNkCiszfHh4eAorNHx5eXkKKzd8YWJjCis4fGJjZAorOXx6enoK KzEwfHFxcSksICdpbnNlcnQgb24gY29sdW1uIHRlc3RfcGFydC5jIGNvbHVtbnMgaXMgbm90 IHJlcGxpY2F0ZWQnKTsKKworCisjIFRFU1Q6IGRvIHNvbWUgdXBkYXRlcyBvbiBzb21lIG9m IHRoZSB0YWJsZXMsIGJvdGggb24gY29sdW1ucyBpbmNsdWRlZAorIyBpbiB0aGUgY29sdW1u IGxpc3QgYW5kIG90aGVyCisKKyMgdGFiMTogdXBkYXRlIG9mIHJlcGxpY2F0ZWQgY29sdW1u Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFVQREFURSB0 YWIxIFNFVCAiQiIgPSAyICogIkIiIHdoZXJlIGEgPSAxKSk7CisKKyMgdGFiMTogdXBkYXRl IG9mIG5vbi1yZXBsaWNhdGVkIGNvbHVtbgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwlxcShVUERBVEUgdGFiMSBTRVQgYyA9IDIqYyB3aGVyZSBhID0gNCkp OworCisjIHRhYjM6IHVwZGF0ZSBvZiBub24tcmVwbGljYXRlZAorJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShVUERBVEUgdGFiMyBTRVQgIkIiID0gIkIi IHx8ICcgdXBkYXRlZCcgd2hlcmUgImEnIiA9IDQpKTsKKworIyB0YWIzOiB1cGRhdGUgb2Yg cmVwbGljYXRlZCBjb2x1bW4KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJcXEoVVBEQVRFIHRhYjMgU0VUICJjJyIgPSAyICogImMnIiB3aGVyZSAiYSciID0g MSkpOworCisjIHRhYjQKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJcXEoVVBEQVRFIHRhYjQgU0VUIGIgPSAnYmx1ZScsIGMgPSBjICogMiwgZCA9IGQgfHwg JyB1cGRhdGVkJyB3aGVyZSBhID0gMSkpOworCisjIHRhYjQKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXEoVVBEQVRFIHRhYjQgU0VUIGIgPSAncmVkJywg YyA9IGMgKiAyLCBkID0gZCB8fCAnIHVwZGF0ZWQnIHdoZXJlIGEgPSAyKSk7CisKKyMgd2Fp dCBmb3IgdGhlIHJlcGxpY2F0aW9uIHRvIGNhdGNoIHVwLCBhbmQgY2hlY2sgdGhlIFVQREFU RSByZXN1bHRzIGdvdAorIyByZXBsaWNhdGVkIGNvcnJlY3RseSwgd2l0aCB0aGUgcmlnaHQg Y29sdW1uIGxpc3QKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScp OworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs CisJcXEoU0VMRUNUICogRlJPTSB0YWIxIE9SREVSIEJZIGEpKTsKK2lzKCRyZXN1bHQsCitx cSgxfDR8CisyfDN8Cis0fDV8Cis1fDZ8KSwgJ29ubHkgdXBkYXRlIG9uIGNvbHVtbiB0YWIx LmIgaXMgcmVwbGljYXRlZCcpOworCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJcXEoU0VMRUNUICogRlJPTSB0YWIzIE9SREVSIEJZICJh JyIpKTsKK2lzKCRyZXN1bHQsCitxcSgxfDYKKzJ8NAorNHw2Cis1fDcpLCAnb25seSB1cGRh dGUgb24gY29sdW1uIHRhYjMuYyBpcyByZXBsaWNhdGVkJyk7CisKKyRyZXN1bHQgPSAkbm9k ZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxcShTRUxFQ1QgKiBGUk9N IHRhYjQgT1JERVIgQlkgYSkpOworCitpcygkcmVzdWx0LCBxcSgxfGJsdWV8b2ggbXkgdXBk YXRlZAorMnxyZWR8aGVsbG8gdXBkYXRlZAorM3xyZWR8Zm9vCis0fGJsdWV8YmFyKSwgJ3Vw ZGF0ZSBvbiBjb2x1bW4gdGFiNC5jIGlzIG5vdCByZXBsaWNhdGVkJyk7CisKKworIyBURVNU OiBhZGQgdGFibGUgd2l0aCBhIGNvbHVtbiBsaXN0LCBpbnNlcnQgZGF0YSwgcmVwbGljYXRl CisKKyMgaW5zZXJ0IHNvbWUgZGF0YSBiZWZvcmUgYWRkaW5nIGl0IHRvIHRoZSBwdWJsaWNh dGlvbgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5T RVJUIElOVE8gdGFiMiBWQUxVRVMgKDEsICdhYmMnLCAzKTsKKykpOworCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBQVUJMSUNBVElPTiBwdWIx IEFERCBUQUJMRSB0YWIyIChhLCBiKSIpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgUkVGUkVTSCBQVUJM SUNBVElPTiIpOworCisjIHdhaXQgZm9yIHRoZSB0YWJsZXN5bmMgdG8gY29tcGxldGUsIGFk ZCBhIGJpdCBtb3JlIGRhdGEgYW5kIHRoZW4gY2hlY2sKKyMgdGhlIHJlc3VsdHMgb2YgdGhl IHJlcGxpY2F0aW9uCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3Jp YmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ SU5TRVJUIElOVE8gdGFiMiBWQUxVRVMgKDIsICdkZWYnLCA2KTsKKykpOworCiskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRh YjIgT1JERVIgQlkgYSIpOworaXMoJHJlc3VsdCwgcXEoMXxhYmMKKzJ8ZGVmKSwgJ2luc2Vy dCBvbiBjb2x1bW4gdGFiMi5jIGlzIG5vdCByZXBsaWNhdGVkJyk7CisKKyMgZG8gYSBjb3Vw bGUgdXBkYXRlcywgY2hlY2sgdGhlIGNvcnJlY3Qgc3R1ZmYgZ2V0cyByZXBsaWNhdGVkCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlVUERBVEUgdGFi MiBTRVQgYyA9IDUgd2hlcmUgYSA9IDE7CisJVVBEQVRFIHRhYjIgU0VUIGIgPSAneHl6JyB3 aGVyZSBhID0gMjsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J3N1YjEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRhYjIgT1JERVIgQlkgYSIpOworaXMoJHJlc3Vs dCwgcXEoMXxhYmMKKzJ8eHl6KSwgJ3VwZGF0ZSBvbiBjb2x1bW4gdGFiMi5jIGlzIG5vdCBy ZXBsaWNhdGVkJyk7CisKKworIyBURVNUOiBhZGQgYSB0YWJsZSB0byB0d28gcHVibGljYXRp b25zIHdpdGggZGlmZmVyZW50IGNvbHVtbiBsaXN0cywgYW5kCisjIGNyZWF0ZSBhIHNpbmds ZSBzdWJzY3JpcHRpb24gcmVwbGljYXRpbmcgYm90aCBwdWJsaWNhdGlvbnMKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWI1 IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50LCBkIGludCk7CisJQ1JFQVRFIFBV QkxJQ0FUSU9OIHB1YjIgRk9SIFRBQkxFIHRhYjUgKGEsIGIpOworCUNSRUFURSBQVUJMSUNB VElPTiBwdWIzIEZPUiBUQUJMRSB0YWI1IChhLCBkKTsKKworCS0tIGluc2VydCBhIGNvdXBs ZSBpbml0aWFsIHJlY29yZHMKKwlJTlNFUlQgSU5UTyB0YWI1IFZBTFVFUyAoMSwgMTEsIDEx MSwgMTExMSk7CisJSU5TRVJUIElOVE8gdGFiNSBWQUxVRVMgKDIsIDIyLCAyMjIsIDIyMjIp OworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlDUkVBVEUgVEFCTEUgdGFiNSAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBkIGludCk7 CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAor CUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNBVElPTiBwdWIyLCBwdWIzCisp KTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCisjIGluc2Vy dCBkYXRhIGFuZCBtYWtlIHN1cmUgYWxsIHRoZSBjb2x1bW5zICh1bmlvbiBvZiB0aGUgY29s dW1ucyBsaXN0cykKKyMgZ2V0IGZ1bGx5IHJlcGxpY2F0ZWQKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjUgVkFMVUVTICgz LCAzMywgMzMzLCAzMzMzKTsKKwlJTlNFUlQgSU5UTyB0YWI1IFZBTFVFUyAoNCwgNDQsIDQ0 NCwgNDQ0NCk7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdz dWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJT RUxFQ1QgKiBGUk9NIHRhYjUgT1JERVIgQlkgYSIpLAorICAgcXEoMXwxMXwxMTExCisyfDIy fDIyMjIKKzN8MzN8MzMzMworNHw0NHw0NDQ0KSwKKyAgICdvdmVybGFwcGluZyBwdWJsaWNh dGlvbnMgd2l0aCBvdmVybGFwcGluZyBjb2x1bW4gbGlzdHMnKTsKKworIyBhbmQgZmluYWxs eSwgc2V0IHRoZSBjb2x1bW4gbGlzdCB0byBBTEwgZm9yIG9uZSBvZiB0aGUgcHVibGljYXRp b25zLAorIyB3aGljaCBtZWFucyByZXBsaWNhdGluZyBhbGwgY29sdW1ucyAocmVtb3Zpbmcg dGhlIGNvbHVtbiBsaXN0KSwgYnV0CisjIGZpcnN0IGFkZCB0aGUgbWlzc2luZyBjb2x1bW4g dG8gdGhlIHRhYmxlIG9uIHN1YnNjcmliZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjMgQUxURVIgVEFCTEUg dGFiNSBTRVQgQ09MVU1OUyBBTEw7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFJFRlJFU0gg UFVCTElDQVRJT047CisJQUxURVIgVEFCTEUgdGFiNSBBREQgQ09MVU1OIGMgSU5UOworKSk7 CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5U TyB0YWI1IFZBTFVFUyAoNSwgNTUsIDU1NSwgNTU1NSk7CispKTsKKworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRhYjUgT1JERVIgQlkgYSIp LAorICAgcXEoMXwxMXwxMTExfAorMnwyMnwyMjIyfAorM3wzM3wzMzMzfAorNHw0NHw0NDQ0 fAorNXw1NXw1NTU1fDU1NSksCisgICAnb3ZlcmxhcHBpbmcgcHVibGljYXRpb25zIHdpdGgg b3ZlcmxhcHBpbmcgY29sdW1uIGxpc3RzJyk7CisKKyMgVEVTVDogY3JlYXRlIGEgdGFibGUg d2l0aCBhIGNvbHVtbiBsaXN0LCB0aGVuIGNoYW5nZSB0aGUgcmVwbGljYQorIyBpZGVudGl0 eSBieSByZXBsYWNpbmcgYSBwcmltYXJ5IGtleSAoYnV0IHVzZSBhIGRpZmZlcmVudCBjb2x1 bW4gaW4KKyMgdGhlIGNvbHVtbiBsaXN0KQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjYgKGEgaW50IFBSSU1BUlkgS0VZ LCBiIGludCwgYyBpbnQsIGQgaW50KTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViNCBGT1Ig VEFCTEUgdGFiNiAoYSwgYik7CisKKwktLSBpbml0aWFsIGRhdGEKKwlJTlNFUlQgSU5UTyB0 YWI2IFZBTFVFUyAoMSwgMjIsIDMzMywgNDQ0NCk7CispKTsKKworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWI2IChhIGlu dCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50LCBkIGludCk7CispKTsKKworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElP TiBzdWIxIFNFVCBQVUJMSUNBVElPTiBwdWI0CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0 aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjYgVkFMVUVTICgyLCAzMywg NDQ0LCA1NTU1KTsKKwlVUERBVEUgdGFiNiBTRVQgYiA9IGIgKiAyLCBjID0gYyAqIDMsIGQg PSBkICogNDsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1 YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNF TEVDVCAqIEZST00gdGFiNiBPUkRFUiBCWSBhIiksCisJcXEoMXw0NHx8CisyfDY2fHwpLCAn cmVwbGljYXRpb24gd2l0aCB0aGUgb3JpZ2luYWwgcHJpbWFyeSBrZXknKTsKKworIyBub3cg cmVkZWZpbmUgdGhlIGNvbnN0cmFpbnQgLSBtb3ZlIHRoZSBwcmltYXJ5IGtleSB0byBhIGRp ZmZlcmVudCBjb2x1bW4KKyMgKHdoaWNoIGlzIHN0aWxsIGNvdmVyZWQgYnkgdGhlIGNvbHVt biBsaXN0LCB0aG91Z2gpCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCUFMVEVSIFRBQkxFIHRhYjYgRFJPUCBDT05TVFJBSU5UIHRhYjZfcGtleTsK KwlBTFRFUiBUQUJMRSB0YWI2IEFERCBQUklNQVJZIEtFWSAoYik7CispKTsKKworIyB3ZSBu ZWVkIHRvIGRvIHRoZSBzYW1lIHRoaW5nIG9uIHRoZSBzdWJzY3JpYmVyCisjIFhYWCBXaGF0 IHdvdWxkIGhhcHBlbiBpZiB0aGlzIGhhcHBlbnMgYmVmb3JlIHRoZSBwdWJsaXNoZXIgQUxU RVI/IE9yCisjIGludGVybGVhdmVkLCBzb21laG93PyBCdXQgdGhhdCBzZWVtcyB1bnJlbGF0 ZWQgdG8gY29sdW1uIGxpc3RzLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCUFMVEVSIFRBQkxFIHRhYjYgRFJPUCBDT05TVFJBSU5UIHRhYjZfcGtl eTsKKwlBTFRFUiBUQUJMRSB0YWI2IEFERCBQUklNQVJZIEtFWSAoYik7CispKTsKKworJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlND UklQVElPTiBzdWIxIFJFRlJFU0ggUFVCTElDQVRJT04KKykpOworCit3YWl0X2Zvcl9zdWJz Y3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiNiBWQUxVRVMgKDMs IDU1LCA2NjYsIDg4ODgpOworCVVQREFURSB0YWI2IFNFVCBiID0gYiAqIDIsIGMgPSBjICog MywgZCA9IGQgKiA0OworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywiU0VMRUNUICogRlJPTSB0YWI2IE9SREVSIEJZIGEiKSwKKyAgIHFxKDF8ODh8fAorMnwx MzJ8fAorM3wxMTB8fCksCisgICAncmVwbGljYXRpb24gd2l0aCB0aGUgbW9kaWZpZWQgcHJp bWFyeSBrZXknKTsKKworCisjIFRFU1Q6IGNyZWF0ZSBhIHRhYmxlIHdpdGggYSBjb2x1bW4g bGlzdCwgdGhlbiBjaGFuZ2UgdGhlIHJlcGxpY2EKKyMgaWRlbnRpdHkgYnkgcmVwbGFjaW5n IGEgcHJpbWFyeSBrZXkgd2l0aCBhIGtleSBvbiBtdWx0aXBsZSBjb2x1bW5zCisjIChhbGwg b2YgdGhlbSBjb3ZlcmVkIGJ5IHRoZSBjb2x1bW4gbGlzdCkKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWI3IChhIGludCBQ UklNQVJZIEtFWSwgYiBpbnQsIGMgaW50LCBkIGludCk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9O IHB1YjUgRk9SIFRBQkxFIHRhYjcgKGEsIGIpOworCisJLS0gc29tZSBpbml0aWFsIGRhdGEK KwlJTlNFUlQgSU5UTyB0YWI3IFZBTFVFUyAoMSwgMjIsIDMzMywgNDQ0NCk7CispKTsKKwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBU QUJMRSB0YWI3IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50LCBkIGludCk7Cisp KTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFM VEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNBVElPTiBwdWI1CispKTsKKword2Fp dF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjcg VkFMVUVTICgyLCAzMywgNDQ0LCA1NTU1KTsKKwlVUERBVEUgdGFiNyBTRVQgYiA9IGIgKiAy LCBjID0gYyAqIDMsIGQgPSBkICogNDsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGFiNyBPUkRFUiBCWSBhIiksCisgICBxcSgx fDQ0fHwKKzJ8NjZ8fCksICdyZXBsaWNhdGlvbiB3aXRoIHRoZSBvcmlnaW5hbCBwcmltYXJ5 IGtleScpOworCisjIG5vdyByZWRlZmluZSB0aGUgY29uc3RyYWludCAtIG1vdmUgdGhlIHBy aW1hcnkga2V5IHRvIGEgZGlmZmVyZW50IGNvbHVtbgorIyAod2hpY2ggaXMgbm90IGNvdmVy ZWQgYnkgdGhlIGNvbHVtbiBsaXN0KQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoCisJQUxURVIgVEFCTEUgdGFiNyBEUk9QIENPTlNUUkFJTlQgdGFiN19w a2V5OworCUFMVEVSIFRBQkxFIHRhYjcgQUREIFBSSU1BUlkgS0VZIChhLCBiKTsKKykpOwor Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQg SU5UTyB0YWI3IFZBTFVFUyAoMywgNTUsIDY2NiwgNzc3Nyk7CisJVVBEQVRFIHRhYjcgU0VU IGIgPSBiICogMiwgYyA9IGMgKiAzLCBkID0gZCAqIDQ7CispKTsKKworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRhYjcgT1JERVIgQlkgYSIp LAorICAgcXEoMXw4OHx8CisyfDEzMnx8CiszfDExMHx8KSwKKyAgICdyZXBsaWNhdGlvbiB3 aXRoIHRoZSBtb2RpZmllZCBwcmltYXJ5IGtleScpOworCisjIG5vdyBzd2l0Y2ggdGhlIHBy aW1hcnkga2V5IGFnYWluIHRvIGFub3RoZXIgY29sdW1ucyBub3QgY292ZXJlZCBieSB0aGUK KyMgY29sdW1uIGxpc3QsIGJ1dCBhbHNvIGdlbmVyYXRlIHdyaXRlcyBiZXR3ZWVuIHRoZSBk cm9wIGFuZCBjcmVhdGlvbgorIyBvZiB0aGUgbmV3IGNvbnN0cmFpbnQKKworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgVEFCTEUgdGFiNyBE Uk9QIENPTlNUUkFJTlQgdGFiN19wa2V5OworCUlOU0VSVCBJTlRPIHRhYjcgVkFMVUVTICg0 LCA3NywgODg4LCA5OTk5KTsKKwktLSB1cGRhdGUvZGVsZXRlIGlzIG5vdCBhbGxvd2VkIGZv ciB0YWJsZXMgd2l0aG91dCBSSQorCUFMVEVSIFRBQkxFIHRhYjcgQUREIFBSSU1BUlkgS0VZ IChiLCBhKTsKKwlVUERBVEUgdGFiNyBTRVQgYiA9IGIgKiAyLCBjID0gYyAqIDMsIGQgPSBk ICogNDsKKwlERUxFVEUgRlJPTSB0YWI3IFdIRVJFIGEgPSAxOworKSk7CisKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorKSk7CisKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0YWI3IE9SREVSIEJZIGEi KSwKKyAgIHFxKDJ8MjY0fHwKKzN8MjIwfHwKKzR8MTU0fHwpLAorICAgJ3JlcGxpY2F0aW9u IHdpdGggdGhlIG1vZGlmaWVkIHByaW1hcnkga2V5Jyk7CisKKworIyBURVNUOiBwYXJ0aXRp b25lZCB0YWJsZXMgKHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSkK KyMgYW5kIHJlcGxpY2EgaWRlbnRpdHkuIFRoZSAobGVhZikgcGFydGl0aW9ucyBtYXkgaGF2 ZSBkaWZmZXJlbnQgUkksIHNvCisjIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHBhcnRpdGlvbiBS SSAod2l0aCByZXNwZWN0IHRvIHRoZSBjb2x1bW4gbGlzdCkKKyMgd2hpbGUgYXR0YWNoaW5n IHRoZSBwYXJ0aXRpb24uCisKKyMgRmlyc3QsIGxldCdzIGNyZWF0ZSBhIHBhcnRpdGlvbmVk IHRhYmxlIHdpdGggdHdvIHBhcnRpdGlvbnMsIGVhY2ggd2l0aAorIyBhIGRpZmZlcmVudCBS SSwgYnV0IGEgY29sdW1uIGxpc3Qgbm90IGNvdmVyaW5nIGFsbCB0aG9zZSBSSS4KKworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxF IHRlc3RfcGFydF9hIChhIGludCwgYiBpbnQsIGMgaW50KSBQQVJUSVRJT04gQlkgTElTVCAo YSk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2FfMSBQQVJUSVRJT04gT0YgdGVzdF9w YXJ0X2EgRk9SIFZBTFVFUyBJTiAoMSwyLDMsNCw1KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3Bh cnRfYV8xIEFERCBQUklNQVJZIEtFWSAoYSk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2Ff MSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9hXzFfcGtleTsKKwor CUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfYV8yIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfYSBG T1IgVkFMVUVTIElOICg2LDcsOCw5LDEwKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYV8y IEFERCBQUklNQVJZIEtFWSAoYik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2FfMiBSRVBM SUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9hXzJfcGtleTsKKworCS0tIGlu aXRpYWwgZGF0YSwgb25lIHJvdyBpbiBlYWNoIHBhcnRpdGlvbgorCUlOU0VSVCBJTlRPIHRl c3RfcGFydF9hIFZBTFVFUyAoMSwgMyk7CisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2EgVkFM VUVTICg2LCA0KTsKKykpOworCisjIGRvIHRoZSBzYW1lIHRoaW5nIG9uIHRoZSBzdWJzY3Jp YmVyICh3aXRoIHRoZSBvcHBvc2l0ZSBjb2x1bW4gb3JkZXIpCiskbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9h IChiIGludCwgYSBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChhKTsKKworCUNSRUFURSBUQUJM RSB0ZXN0X3BhcnRfYV8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfYSBGT1IgVkFMVUVTIElO ICgxLDIsMyw0LDUpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9hXzEgQUREIFBSSU1BUlkg S0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYV8xIFJFUExJQ0EgSURFTlRJVFkg VVNJTkcgSU5ERVggdGVzdF9wYXJ0X2FfMV9wa2V5OworCisJQ1JFQVRFIFRBQkxFIHRlc3Rf cGFydF9hXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9hIEZPUiBWQUxVRVMgSU4gKDYsNyw4 LDksMTApOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9hXzIgQUREIFBSSU1BUlkgS0VZIChi KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYV8yIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcg SU5ERVggdGVzdF9wYXJ0X2FfMl9wa2V5OworKSk7CisKKyMgY3JlYXRlIGEgcHVibGljYXRp b24gcmVwbGljYXRpbmcganVzdCB0aGUgY29sdW1uICJhIiwgd2hpY2ggaXMgbm90IGVub3Vn aAorIyBmb3IgdGhlIHNlY29uZCBwYXJ0aXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiBwdWI2IEZPUiBUQUJM RSB0ZXN0X3BhcnRfYSAoYiwgYSkgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3Qg PSB0cnVlKTsKKwlBTFRFUiBQVUJMSUNBVElPTiBwdWI2IEFERCBUQUJMRSB0ZXN0X3BhcnRf YV8xIChhKTsKKwlBTFRFUiBQVUJMSUNBVElPTiBwdWI2IEFERCBUQUJMRSB0ZXN0X3BhcnRf YV8yIChiKTsKKykpOworCisjIGFkZCB0aGUgcHVibGljYXRpb24gdG8gb3VyIHN1YnNjcmlw dGlvbiwgd2FpdCBmb3Igc3luYyB0byBjb21wbGV0ZQorJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQ VUJMSUNBVElPTiBwdWI2CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5v ZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9hIFZBTFVFUyAoMiwgNSk7CisJSU5T RVJUIElOVE8gdGVzdF9wYXJ0X2EgVkFMVUVTICg3LCA2KTsKKykpOworCiskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCBhLCBiIEZST00gdGVzdF9wYXJ0X2Eg T1JERVIgQlkgYSwgYiIpLAorICAgcXEoMXwzCisyfDUKKzZ8NAorN3w2KSwKKyAgICdwYXJ0 aXRpb25zIHdpdGggZGlmZmVyZW50IHJlcGxpY2EgaWRlbnRpdGllcyBub3QgcmVwbGljYXRl ZCBjb3JyZWN0bHknKTsKKworIyBUaGlzIHRpbWUgc3RhcnQgd2l0aCBhIGNvbHVtbiBsaXN0 IGNvdmVyaW5nIFJJIGZvciBhbGwgcGFydGl0aW9ucywgYnV0CisjIHRoZW4gdXBkYXRlIHRo ZSBjb2x1bW4gbGlzdCB0byBub3QgY292ZXIgY29sdW1uICJiIiAobmVlZGVkIGJ5IHRoZQor IyBzZWNvbmQgcGFydGl0aW9uKQorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2IgKGEgaW50LCBiIGludCkg UEFSVElUSU9OIEJZIExJU1QgKGEpOworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9iXzEg UEFSVElUSU9OIE9GIHRlc3RfcGFydF9iIEZPUiBWQUxVRVMgSU4gKDEsMiwzLDQsNSk7CisJ QUxURVIgVEFCTEUgdGVzdF9wYXJ0X2JfMSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVS IFRBQkxFIHRlc3RfcGFydF9iXzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0 X3BhcnRfYl8xX3BrZXk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2JfMiBQQVJUSVRJ T04gT0YgdGVzdF9wYXJ0X2IgRk9SIFZBTFVFUyBJTiAoNiw3LDgsOSwxMCk7CisJQUxURVIg VEFCTEUgdGVzdF9wYXJ0X2JfMiBBREQgUFJJTUFSWSBLRVkgKGIpOworCUFMVEVSIFRBQkxF IHRlc3RfcGFydF9iXzIgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRf Yl8yX3BrZXk7CisKKwktLSBpbml0aWFsIGRhdGEsIG9uZSByb3cgaW4gZWFjaCBwYXJ0aXRp b25zCisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2IgVkFMVUVTICgxLCAxKTsKKwlJTlNFUlQg SU5UTyB0ZXN0X3BhcnRfYiBWQUxVRVMgKDYsIDIpOworKSk7CisKKyMgZG8gdGhlIHNhbWUg dGhpbmcgb24gdGhlIHN1YnNjcmliZXIKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2IgKGEgaW50LCBiIGlu dCkgUEFSVElUSU9OIEJZIExJU1QgKGEpOworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9i XzEgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9iIEZPUiBWQUxVRVMgSU4gKDEsMiwzLDQsNSk7 CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2JfMSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFM VEVSIFRBQkxFIHRlc3RfcGFydF9iXzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0 ZXN0X3BhcnRfYl8xX3BrZXk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2JfMiBQQVJU SVRJT04gT0YgdGVzdF9wYXJ0X2IgRk9SIFZBTFVFUyBJTiAoNiw3LDgsOSwxMCk7CisJQUxU RVIgVEFCTEUgdGVzdF9wYXJ0X2JfMiBBREQgUFJJTUFSWSBLRVkgKGIpOworCUFMVEVSIFRB QkxFIHRlc3RfcGFydF9iXzIgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3Bh cnRfYl8yX3BrZXk7CispKTsKKworIyBjcmVhdGUgYSBwdWJsaWNhdGlvbiByZXBsaWNhdGlu ZyBib3RoIGNvbHVtbnMsIHdoaWNoIGlzIHN1ZmZpY2llbnQgZm9yCisjIGJvdGggcGFydGl0 aW9ucworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JF QVRFIFBVQkxJQ0FUSU9OIHB1YjcgRk9SIFRBQkxFIHRlc3RfcGFydF9iIChhLCBiKSBXSVRI IChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworKSk7CisKKyMgYWRkIHRo ZSBwdWJsaWNhdGlvbiB0byBvdXIgc3Vic2NyaXB0aW9uLCB3YWl0IGZvciBzeW5jIHRvIGNv bXBsZXRlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ QUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjcKKykpOworCit3 YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVz dF9wYXJ0X2IgVkFMVUVTICgyLCAzKTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYiBWQUxV RVMgKDcsIDQpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn c3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywi U0VMRUNUICogRlJPTSB0ZXN0X3BhcnRfYiBPUkRFUiBCWSBhLCBiIiksCisgICBxcSgxfDEK KzJ8MworNnwyCis3fDQpLAorICAgJ3BhcnRpdGlvbnMgd2l0aCBkaWZmZXJlbnQgcmVwbGlj YSBpZGVudGl0aWVzIG5vdCByZXBsaWNhdGVkIGNvcnJlY3RseScpOworCisKKyMgVEVTVDog VGhpcyB0aW1lIHN0YXJ0IHdpdGggYSBjb2x1bW4gbGlzdCBjb3ZlcmluZyBSSSBmb3IgYWxs IHBhcnRpdGlvbnMsCisjIGJ1dCB0aGVuIHVwZGF0ZSBSSSBmb3Igb25lIG9mIHRoZSBwYXJ0 aXRpb25zIHRvIG5vdCBiZSBjb3ZlcmVkIGJ5IHRoZQorIyBjb2x1bW4gbGlzdCBhbnltb3Jl LgorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVB VEUgVEFCTEUgdGVzdF9wYXJ0X2MgKGEgaW50LCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBC WSBMSVNUIChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfY18xIFBBUlRJVElPTiBP RiB0ZXN0X3BhcnRfYyBGT1IgVkFMVUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxFIHRlc3Rf cGFydF9jXzEgQUREIFBSSU1BUlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRf Y18xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2NfMV9wa2V5Owor CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9jXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9j IEZPUiBWQUxVRVMgSU4gKDIsNCk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2NfMiBBREQg UFJJTUFSWSBLRVkgKGIpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9jXzIgUkVQTElDQSBJ REVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfY18yX3BrZXk7CisKKwktLSBpbml0aWFs IGRhdGEsIG9uZSByb3cgZm9yIGVhY2ggcGFydGl0aW9uCisJSU5TRVJUIElOVE8gdGVzdF9w YXJ0X2MgVkFMVUVTICgxLCAzLCA1KTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYyBWQUxV RVMgKDIsIDQsIDYpOworKSk7CisKKyMgZG8gdGhlIHNhbWUgdGhpbmcgb24gdGhlIHN1YnNj cmliZXIKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlD UkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2MgKGEgaW50LCBiIGludCwgYyBpbnQpIFBBUlRJVElP TiBCWSBMSVNUIChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfY18xIFBBUlRJVElP TiBPRiB0ZXN0X3BhcnRfYyBGT1IgVkFMVUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxFIHRl c3RfcGFydF9jXzEgQUREIFBSSU1BUlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3Bh cnRfY18xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2NfMV9wa2V5 OworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9jXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFy dF9jIEZPUiBWQUxVRVMgSU4gKDIsNCk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2NfMiBB REQgUFJJTUFSWSBLRVkgKGIpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9jXzIgUkVQTElD QSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfY18yX3BrZXk7CispKTsKKworIyBj cmVhdGUgYSBwdWJsaWNhdGlvbiByZXBsaWNhdGluZyBkYXRhIHRocm91Z2ggcGFydGl0aW9u IHJvb3QsIHdpdGggYSBjb2x1bW4KKyMgZmlsdGVyIG9uIHRoZSByb290LCBhbmQgdGhlbiBh ZGQgdGhlIHBhcnRpdGlvbnMgb25lIGJ5IG9uZSB3aXRoIHNlcGFyYXRlCisjIGNvbHVtbiBs aXN0cyAoYnV0IHRob3NlIGFyZSBub3QgYXBwbGllZCkKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiBwdWI4IEZPUiBU QUJMRSB0ZXN0X3BhcnRfYyBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZh bHNlKTsKKwlBTFRFUiBQVUJMSUNBVElPTiBwdWI4IEFERCBUQUJMRSB0ZXN0X3BhcnRfY18x IChhLGMpOworCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjggQUREIFRBQkxFIHRlc3RfcGFydF9j XzIgKGEsYik7CispKTsKKworIyBhZGQgdGhlIHB1YmxpY2F0aW9uIHRvIG91ciBzdWJzY3Jp cHRpb24sIHdhaXQgZm9yIHN5bmMgdG8gY29tcGxldGUKKyRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlEUk9QIFNVQlNDUklQVElPTiBzdWIxOworCUNS RUFURSBTVUJTQ1JJUFRJT04gc3ViMSBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIn IFBVQkxJQ0FUSU9OIHB1Yjg7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCdzdWIxJyk7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9jIFZBTFVFUyAoMywgNywgOCk7CisJ SU5TRVJUIElOVE8gdGVzdF9wYXJ0X2MgVkFMVUVTICg0LCA5LCAxMCk7CispKTsKKworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRlc3RfcGFy dF9jIE9SREVSIEJZIGEsIGIiKSwKKyAgIHFxKDF8fDUKKzJ8NHwKKzN8fDgKKzR8OXwpLAor ICAgJ3BhcnRpdGlvbnMgd2l0aCBkaWZmZXJlbnQgcmVwbGljYSBpZGVudGl0aWVzIG5vdCBy ZXBsaWNhdGVkIGNvcnJlY3RseScpOworCisKKyMgY3JlYXRlIGEgcHVibGljYXRpb24gbm90 IHJlcGxpY2F0aW5nIGRhdGEgdGhyb3VnaCBwYXJ0aXRpb24gcm9vdCwgd2l0aG91dAorIyBh IGNvbHVtbiBsaXN0IG9uIHRoZSByb290LCBhbmQgdGhlbiBhZGQgdGhlIHBhcnRpdGlvbnMg b25lIGJ5IG9uZSB3aXRoCisjIHNlcGFyYXRlIGNvbHVtbiBsaXN0cworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJRFJPUCBQVUJMSUNBVElPTiBwdWI4 OworCUNSRUFURSBQVUJMSUNBVElPTiBwdWI4IEZPUiBUQUJMRSB0ZXN0X3BhcnRfYyBXSVRI IChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlKTsKKwlBTFRFUiBQVUJMSUNB VElPTiBwdWI4IEFERCBUQUJMRSB0ZXN0X3BhcnRfY18xIChhKTsKKwlBTFRFUiBQVUJMSUNB VElPTiBwdWI4IEFERCBUQUJMRSB0ZXN0X3BhcnRfY18yIChhLGIpOworKSk7CisKKyMgYWRk IHRoZSBwdWJsaWNhdGlvbiB0byBvdXIgc3Vic2NyaXB0aW9uLCB3YWl0IGZvciBzeW5jIHRv IGNvbXBsZXRlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgUkVGUkVTSCBQVUJMSUNBVElPTjsKKwlUUlVO Q0FURSB0ZXN0X3BhcnRfYzsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygk bm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXEoCisJVFJVTkNBVEUgdGVzdF9wYXJ0X2M7CisJSU5TRVJUIElOVE8gdGVzdF9w YXJ0X2MgVkFMVUVTICgxLCAzLCA1KTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYyBWQUxV RVMgKDIsIDQsIDYpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywiU0VMRUNUICogRlJPTSB0ZXN0X3BhcnRfYyBPUkRFUiBCWSBhLCBiIiksCisgICBxcSgx fHwKKzJ8NHwpLAorICAgJ3BhcnRpdGlvbnMgd2l0aCBkaWZmZXJlbnQgcmVwbGljYSBpZGVu dGl0aWVzIG5vdCByZXBsaWNhdGVkIGNvcnJlY3RseScpOworCisKKyMgVEVTVDogU3RhcnQg d2l0aCBhIHNpbmdsZSBwYXJ0aXRpb24sIHdpdGggUkkgY29tcGF0aWJsZSB3aXRoIHRoZSBj b2x1bW4KKyMgZmlsdGVyLCBhbmQgdGhlbiBhdHRhY2ggYSBwYXJ0aXRpb24gd2l0aCBpbmNv bXBhdGlibGUgUkkuCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfZCAoYSBpbnQsIGIgaW50KSBQQVJUSVRJ T04gQlkgTElTVCAoYSk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2RfMSBQQVJUSVRJ T04gT0YgdGVzdF9wYXJ0X2QgRk9SIFZBTFVFUyBJTiAoMSwzKTsKKwlBTFRFUiBUQUJMRSB0 ZXN0X3BhcnRfZF8xIEFERCBQUklNQVJZIEtFWSAoYSk7CisJQUxURVIgVEFCTEUgdGVzdF9w YXJ0X2RfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9kXzFfcGtl eTsKKworCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9kIFZBTFVFUyAoMSwgMik7CispKTsKKwor IyBkbyB0aGUgc2FtZSB0aGluZyBvbiB0aGUgc3Vic2NyaWJlciAoaW4gZmFjdCwgY3JlYXRl IGJvdGggcGFydGl0aW9ucyByaWdodAorIyBhd2F5LCBubyBuZWVkIHRvIGRlbGF5IHRoYXQp Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRF IFRBQkxFIHRlc3RfcGFydF9kIChhIGludCwgYiBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChh KTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfZF8xIFBBUlRJVElPTiBPRiB0ZXN0X3Bh cnRfZCBGT1IgVkFMVUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9kXzEg QUREIFBSSU1BUlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfZF8xIFJFUExJ Q0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2RfMV9wa2V5OworCisJQ1JFQVRF IFRBQkxFIHRlc3RfcGFydF9kXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9kIEZPUiBWQUxV RVMgSU4gKDIsNCk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2RfMiBBREQgUFJJTUFSWSBL RVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9kXzIgUkVQTElDQSBJREVOVElUWSBV U0lORyBJTkRFWCB0ZXN0X3BhcnRfZF8yX3BrZXk7CispKTsKKworIyBjcmVhdGUgYSBwdWJs aWNhdGlvbiByZXBsaWNhdGluZyBib3RoIGNvbHVtbnMsIHdoaWNoIGlzIHN1ZmZpY2llbnQg Zm9yCisjIGJvdGggcGFydGl0aW9ucworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjkgRk9SIFRBQkxFIHRlc3Rf cGFydF9kIChhKSBXSVRIIChwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOwor KSk7CisKKyMgYWRkIHRoZSBwdWJsaWNhdGlvbiB0byBvdXIgc3Vic2NyaXB0aW9uLCB3YWl0 IGZvciBzeW5jIHRvIGNvbXBsZXRlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoCisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9O IHB1YjkKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3Jp YmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ SU5TRVJUIElOVE8gdGVzdF9wYXJ0X2QgVkFMVUVTICgzLCA0KTsKKykpOworCiskbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGVzdF9wYXJ0X2Qg T1JERVIgQlkgYSwgYiIpLAorICAgcXEoMXwKKzN8KSwKKyAgICdwYXJ0aXRpb25zIHdpdGgg ZGlmZmVyZW50IHJlcGxpY2EgaWRlbnRpdGllcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHkn KTsKKworIyBURVNUOiBXaXRoIGEgdGFibGUgaW5jbHVkZWQgaW4gbXVsdGlwbGUgcHVibGlj YXRpb25zLCB3ZSBzaG91bGQgdXNlIGEKKyMgdW5pb24gb2YgdGhlIGNvbHVtbiBsaXN0cy4g U28gd2l0aCBjb2x1bW4gbGlzdHMgKGEsYikgYW5kIChhLGMpIHdlCisjIHNob3VsZCByZXBs aWNhdGUgKGEsYixjKS4KKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfbWl4XzEgKGEgaW50IFBSSU1BUlkgS0VZLCBi IGludCwgYyBpbnQpOworCUNSRUFURSBQVUJMSUNBVElPTiBwdWJfbWl4XzEgRk9SIFRBQkxF IHRlc3RfbWl4XzEgKGEsIGIpOworCUNSRUFURSBQVUJMSUNBVElPTiBwdWJfbWl4XzIgRk9S IFRBQkxFIHRlc3RfbWl4XzEgKGEsIGMpOworCisJLS0gaW5pdGlhbCBkYXRhCisJSU5TRVJU IElOVE8gdGVzdF9taXhfMSBWQUxVRVMgKDEsIDIsIDMpOworKSk7CisKKyRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9t aXhfMSAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCk7CisJQUxURVIgU1VCU0NS SVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1Yl9taXhfMSwgcHViX21peF8yOworKSk7 CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5U TyB0ZXN0X21peF8xIFZBTFVFUyAoNCwgNSwgNik7CispKTsKKworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRlc3RfbWl4XzEgT1JERVIgQlkg YSIpLAorICAgcXEoMXwyfDMKKzR8NXw2KSwKKyAgICdhIG1peCBvZiBwdWJsaWNhdGlvbnMg c2hvdWxkIHVzZSBhIHVuaW9uIG9mIGNvbHVtbiBsaXN0Jyk7CisKKworIyBURVNUOiBXaXRo IGEgdGFibGUgaW5jbHVkZWQgaW4gbXVsdGlwbGUgcHVibGljYXRpb25zLCB3ZSBzaG91bGQg dXNlIGEKKyMgdW5pb24gb2YgdGhlIGNvbHVtbiBsaXN0cy4gSWYgYW55IG9mIHRoZSBwdWJs aWNhdGlvbnMgaXMgRk9SIEFMTAorIyBUQUJMRVMsIHdlIHNob3VsZCByZXBsaWNhdGUgYWxs IGNvbHVtbnMuCisKKyMgZHJvcCB1bm5lY2Vzc2FyeSB0YWJsZXMsIHNvIGFzIG5vdCB0byBp bnRlcmZlcmUgd2l0aCB0aGUgRk9SIEFMTCBUQUJMRVMKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCURST1AgVEFCTEUgdGFiMSwgdGFiMiwgdGFiMywg dGFiNCwgdGFiNSwgdGFiNiwgdGFiNywgdGVzdF9taXhfMSwKKwkJCSAgIHRlc3RfcGFydCwg dGVzdF9wYXJ0X2EsIHRlc3RfcGFydF9iLCB0ZXN0X3BhcnRfYywgdGVzdF9wYXJ0X2Q7Cisp KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JF QVRFIFRBQkxFIHRlc3RfbWl4XzIgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQp OworCUNSRUFURSBQVUJMSUNBVElPTiBwdWJfbWl4XzMgRk9SIFRBQkxFIHRlc3RfbWl4XzIg KGEsIGIpOworCUNSRUFURSBQVUJMSUNBVElPTiBwdWJfbWl4XzQgRk9SIEFMTCBUQUJMRVM7 CisKKwktLSBpbml0aWFsIGRhdGEKKwlJTlNFUlQgSU5UTyB0ZXN0X21peF8yIFZBTFVFUyAo MSwgMiwgMyk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X21peF8yIChhIGludCBQUklNQVJZIEtFWSwg YiBpbnQsIGMgaW50KTsKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJ T04gcHViX21peF8zLCBwdWJfbWl4XzQ7CisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgUkVG UkVTSCBQVUJMSUNBVElPTjsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygk bm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9taXhfMiBWQUxVRVMgKDQsIDUsIDYpOwor KSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitp cygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJP TSB0ZXN0X21peF8yIiksCisgICBxcSgxfDJ8MworNHw1fDYpLAorICAgJ2EgbWl4IG9mIHB1 YmxpY2F0aW9ucyBzaG91bGQgdXNlIGEgdW5pb24gb2YgY29sdW1uIGxpc3QnKTsKKworCisj IFRFU1Q6IFdpdGggYSB0YWJsZSBpbmNsdWRlZCBpbiBtdWx0aXBsZSBwdWJsaWNhdGlvbnMs IHdlIHNob3VsZCB1c2UgYQorIyB1bmlvbiBvZiB0aGUgY29sdW1uIGxpc3RzLiBJZiBhbnkg b2YgdGhlIHB1YmxpY2F0aW9ucyBpcyBGT1IgQUxMCisjIFRBQkxFUyBJTiBTQ0hFTUEsIHdl IHNob3VsZCByZXBsaWNhdGUgYWxsIGNvbHVtbnMuCisKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X21peF8zIChhIGlu dCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50KTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHVi X21peF81IEZPUiBUQUJMRSB0ZXN0X21peF8zIChhLCBiKTsKKwlDUkVBVEUgUFVCTElDQVRJ T04gcHViX21peF82IEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJsaWM7CisKKwktLSBp bml0aWFsIGRhdGEKKwlJTlNFUlQgSU5UTyB0ZXN0X21peF8zIFZBTFVFUyAoMSwgMiwgMyk7 CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAor CUNSRUFURSBUQUJMRSB0ZXN0X21peF8zIChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMg aW50KTsKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViX21p eF81LCBwdWJfbWl4XzY7CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5v ZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfbWl4XzMgVkFMVUVTICg0LCA1LCA2KTsKKykp OworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMo JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00g dGVzdF9taXhfMyIpLAorICAgcXEoMXwyfDMKKzR8NXw2KSwKKyAgICdhIG1peCBvZiBwdWJs aWNhdGlvbnMgc2hvdWxkIHVzZSBhIHVuaW9uIG9mIGNvbHVtbiBsaXN0Jyk7CisKKworIyBU RVNUOiBDaGVjayBoYW5kbGluZyBvZiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCAtIGlm IGEgcGFydGl0aW9uIGlzCisjIHB1Ymxpc2hlZCB0aHJvdWdoIHBhcnRpdGlvbiByb290LCB3 ZSBzaG91bGQgb25seSBhcHBseSB0aGUgY29sdW1uIGxpc3QKKyMgZGVmaW5lZCBmb3IgdGhl IHdob2xlIHRhYmxlIChub3QgdGhlIHBhcnRpdGlvbnMpIC0gYm90aCBkdXJpbmcgdGhlIGlu aXRpYWwKKyMgc3luYyBhbmQgd2hlbiByZXBsaWNhdGluZyBjaGFuZ2VzLiBUaGlzIGlzIHdo YXQgd2UgZG8gZm9yIHJvdyBmaWx0ZXJzLgorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9yb290IChhIGludCBQUklN QVJZIEtFWSwgYiBpbnQsIGMgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGEpOworCUNSRUFU RSBUQUJMRSB0ZXN0X3Jvb3RfMSBQQVJUSVRJT04gT0YgdGVzdF9yb290IEZPUiBWQUxVRVMg RlJPTSAoMSkgVE8gKDEwKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9yb290XzIgUEFSVElUSU9O IE9GIHRlc3Rfcm9vdCBGT1IgVkFMVUVTIEZST00gKDEwKSBUTyAoMjApOworCisJQ1JFQVRF IFBVQkxJQ0FUSU9OIHB1Yl9yb290X3RydWUgRk9SIFRBQkxFIHRlc3Rfcm9vdCAoYSkgV0lU SCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVlKTsKKworCS0tIGluaXRpYWwg ZGF0YQorCUlOU0VSVCBJTlRPIHRlc3Rfcm9vdCBWQUxVRVMgKDEsIDIsIDMpOworCUlOU0VS VCBJTlRPIHRlc3Rfcm9vdCBWQUxVRVMgKDEwLCAyMCwgMzApOworKSk7CisKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVz dF9yb290IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50KSBQQVJUSVRJT04gQlkg UkFOR0UgKGEpOworCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3RfMSBQQVJUSVRJT04gT0YgdGVz dF9yb290IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKTsKKwlDUkVBVEUgVEFCTEUgdGVz dF9yb290XzIgUEFSVElUSU9OIE9GIHRlc3Rfcm9vdCBGT1IgVkFMVUVTIEZST00gKDEwKSBU TyAoMjApOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxcSgKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViX3Jv b3RfdHJ1ZTsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJz Y3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CisJSU5TRVJUIElOVE8gdGVzdF9yb290IFZBTFVFUyAoMiwgMywgNCk7CisJSU5TRVJUIElO VE8gdGVzdF9yb290IFZBTFVFUyAoMTEsIDIxLCAzMSk7CispKTsKKworJG5vZGVfcHVibGlz aGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRlc3Rfcm9vdCBPUkRFUiBC WSBhLCBiLCBjIiksCisgICBxcSgxfHwKKzJ8fAorMTB8fAorMTF8fCksCisgICAncHVibGlj YXRpb24gdmlhIHBhcnRpdGlvbiByb290IGFwcGxpZXMgY29sdW1uIGxpc3QnKTsKKworCisj IFRFU1Q6IE11bHRpcGxlIHB1YmxpY2F0aW9ucyB3aGljaCBwdWJsaXNoIHNjaGVtYSBvZiBw YXJlbnQgdGFibGUgYW5kCisjIHBhcnRpdGlvbi4gVGhlIHBhcnRpdGlvbiBpcyBwdWJsaXNo ZWQgdGhyb3VnaCB0d28gcHVibGljYXRpb25zLCBvbmNlCisjIHRocm91Z2ggYSBzY2hlbWEg KHNvIG5vIGNvbHVtbiBsaXN0KSBjb250YWluaW5nIHRoZSBwYXJlbnQsIGFuZCB0aGVuCisj IGFsc28gZGlyZWN0bHkgKHdpdGggYSBjb2x1bW5zIGxpc3QpLiBUaGUgZXhwZWN0ZWQgb3V0 Y29tZSBpcyB0aGVyZSBpcworIyBubyBjb2x1bW4gbGlzdC4KKworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJRFJPUCBQVUJMSUNBVElPTiBwdWIxLCBw dWIyLCBwdWIzLCBwdWI0LCBwdWI1LCBwdWI2LCBwdWI3LCBwdWI4OworCisJQ1JFQVRFIFND SEVNQSBzMTsKKwlDUkVBVEUgVEFCTEUgczEudCAoYSBpbnQsIGIgaW50LCBjIGludCkgUEFS VElUSU9OIEJZIFJBTkdFIChhKTsKKwlDUkVBVEUgVEFCTEUgdF8xIFBBUlRJVElPTiBPRiBz MS50IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKTsKKworCUNSRUFURSBQVUJMSUNBVElP TiBwdWIxIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSBzMTsKKwlDUkVBVEUgUFVCTElDQVRJ T04gcHViMiBGT1IgVEFCTEUgdF8xKGIpOworCisJLS0gaW5pdGlhbCBkYXRhCisJSU5TRVJU IElOVE8gczEudCBWQUxVRVMgKDEsIDIsIDMpOworKSk7CisKKyRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgU0NIRU1BIHMxOworCUNSRUFU RSBUQUJMRSBzMS50IChhIGludCwgYiBpbnQsIGMgaW50KSBQQVJUSVRJT04gQlkgUkFOR0Ug KGEpOworCUNSRUFURSBUQUJMRSB0XzEgUEFSVElUSU9OIE9GIHMxLnQgRk9SIFZBTFVFUyBG Uk9NICgxKSBUTyAoMTApOworCisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgU0VUIFBVQkxJ Q0FUSU9OIHB1YjEsIHB1YjI7CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMo JG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHMxLnQgVkFMVUVTICg0LCA1LCA2KTsKKykpOwor Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gczEu dCBPUkRFUiBCWSBhIiksCisgICBxcSgxfDJ8MworNHw1fDYpLAorICAgJ3R3byBwdWJsaWNh dGlvbnMsIHB1Ymxpc2hpbmcgdGhlIHNhbWUgcmVsYXRpb24nKTsKKworIyBOb3cgcmVzeW5j IHRoZSBzdWJjcmlwdGlvbiwgYnV0IHdpdGggcHVibGljYXRpb25zIGluIHRoZSBvcHBvc2l0 ZSBvcmRlci4KKyMgVGhlIHJlc3VsdCBzaG91bGQgYmUgdGhlIHNhbWUuCisKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlUUlVOQ0FURSBzMS50Owor CisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjIsIHB1YjE7 CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7 CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VS VCBJTlRPIHMxLnQgVkFMVUVTICg3LCA4LCA5KTsKKykpOworCiskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gczEudCBPUkRFUiBCWSBhIiksCisg ICBxcSg3fDh8OSksCisgICAndHdvIHB1YmxpY2F0aW9ucywgcHVibGlzaGluZyB0aGUgc2Ft ZSByZWxhdGlvbicpOworCisKKyMgVEVTVDogT25lIHB1YmxpY2F0aW9uLCBjb250YWluaW5n IGJvdGggdGhlIHBhcmVudCBhbmQgY2hpbGQgcmVsYXRpb25zLgorIyBUaGUgZXhwZWN0ZWQg b3V0Y29tZSBpcyBsaXN0ICJhIiwgYmVjYXVzZSB0aGF0J3MgdGhlIGNvbHVtbiBsaXN0IGRl ZmluZWQKKyMgZm9yIHRoZSB0b3AtbW9zdCBhbmNlc3RvciBhZGRlZCB0byB0aGUgcHVibGlj YXRpb24uCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAor CURST1AgU0NIRU1BIHMxIENBU0NBREU7CisJQ1JFQVRFIFRBQkxFIHQgKGEgaW50LCBiIGlu dCwgYyBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7CisJQ1JFQVRFIFRBQkxFIHRfMSBQ QVJUSVRJT04gT0YgdCBGT1IgVkFMVUVTIEZST00gKDEpIFRPICgxMCkKKwkJICAgUEFSVElU SU9OIEJZIFJBTkdFIChhKTsKKwlDUkVBVEUgVEFCTEUgdF8yIFBBUlRJVElPTiBPRiB0XzEg Rk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMTApOworCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1 YjMgRk9SIFRBQkxFIHRfMSAoYSksIHRfMgorCSAgV0lUSCAoUFVCTElTSF9WSUFfUEFSVElU SU9OX1JPT1QpOworCisJLS0gaW5pdGlhbCBkYXRhCisJSU5TRVJUIElOVE8gdCBWQUxVRVMg KDEsIDIsIDMpOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlEUk9QIFNDSEVNQSBzMSBDQVNDQURFOworCUNSRUFURSBUQUJMRSB0IChh IGludCwgYiBpbnQsIGMgaW50KSBQQVJUSVRJT04gQlkgUkFOR0UgKGEpOworCUNSRUFURSBU QUJMRSB0XzEgUEFSVElUSU9OIE9GIHQgRk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMTApCisJ CSAgIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7CisJQ1JFQVRFIFRBQkxFIHRfMiBQQVJUSVRJ T04gT0YgdF8xIEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKTsKKworCUFMVEVSIFNVQlND UklQVElPTiBzdWIxIFNFVCBQVUJMSUNBVElPTiBwdWIzOworKSk7CisKK3dhaXRfZm9yX3N1 YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCiskbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0IFZBTFVFUyAoNCwg NSwgNik7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIx Jyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxF Q1QgKiBGUk9NIHQgT1JERVIgQlkgYSwgYiwgYyIpLAorICAgcXEoMXx8Cis0fHwpLAorICAg J3B1YmxpY2F0aW9uIGNvbnRhaW5pbmcgYm90aCBwYXJlbnQgYW5kIGNoaWxkIHJlbGF0aW9u Jyk7CisKKworIyBURVNUOiBPbmUgcHVibGljYXRpb24sIGNvbnRhaW5pbmcgYm90aCB0aGUg cGFyZW50IGFuZCBjaGlsZCByZWxhdGlvbnMuCisjIFRoZSBleHBlY3RlZCBvdXRjb21lIGlz IGxpc3QgImEiLCBiZWNhdXNlIHRoYXQncyB0aGUgY29sdW1uIGxpc3QgZGVmaW5lZAorIyBm b3IgdGhlIHRvcC1tb3N0IGFuY2VzdG9yIGFkZGVkIHRvIHRoZSBwdWJsaWNhdGlvbi4KKyMg Tm90ZTogVGhlIGRpZmZlcmVuY2UgZnJvbSB0aGUgcHJlY2VkaW5nIHRlc3QgaXMgdGhhdCBp biB0aGlzIGNhc2UgYm90aAorIyByZWxhdGlvbnMgaGF2ZSBhIGNvbHVtbiBsaXN0IGRlZmlu ZWQuCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCURS T1AgVEFCTEUgdDsKKwlDUkVBVEUgVEFCTEUgdCAoYSBpbnQsIGIgaW50LCBjIGludCkgUEFS VElUSU9OIEJZIFJBTkdFIChhKTsKKwlDUkVBVEUgVEFCTEUgdF8xIFBBUlRJVElPTiBPRiB0 IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKQorCQkgICBQQVJUSVRJT04gQlkgUkFOR0Ug KGEpOworCUNSRUFURSBUQUJMRSB0XzIgUEFSVElUSU9OIE9GIHRfMSBGT1IgVkFMVUVTIEZS T00gKDEpIFRPICgxMCk7CisKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViNCBGT1IgVEFCTEUg dF8xIChhKSwgdF8yIChiKQorCSAgV0lUSCAoUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1Qp OworCisJLS0gaW5pdGlhbCBkYXRhCisJSU5TRVJUIElOVE8gdCBWQUxVRVMgKDEsIDIsIDMp OworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlEUk9QIFRBQkxFIHQ7CisJQ1JFQVRFIFRBQkxFIHQgKGEgaW50LCBiIGludCwgYyBpbnQp IFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7CisJQ1JFQVRFIFRBQkxFIHRfMSBQQVJUSVRJT04g T0YgdCBGT1IgVkFMVUVTIEZST00gKDEpIFRPICgxMCkKKwkJICAgUEFSVElUSU9OIEJZIFJB TkdFIChhKTsKKwlDUkVBVEUgVEFCTEUgdF8yIFBBUlRJVElPTiBPRiB0XzEgRk9SIFZBTFVF UyBGUk9NICgxKSBUTyAoMTApOworCisJQUxURVIgU1VCU0NSSVBUSU9OIHN1YjEgU0VUIFBV QkxJQ0FUSU9OIHB1YjQ7CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5v ZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCUlOU0VSVCBJTlRPIHQgVkFMVUVTICg0LCA1LCA2KTsKKykpOworCiskbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdCBPUkRFUiBC WSBhLCBiLCBjIiksCisgICBxcSgxfHwKKzR8fCksCisgICAncHVibGljYXRpb24gY29udGFp bmluZyBib3RoIHBhcmVudCBhbmQgY2hpbGQgcmVsYXRpb24nKTsKKworCiskbm9kZV9zdWJz Y3JpYmVyLT5zdG9wKCdmYXN0Jyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0b3AoJ2Zhc3QnKTsK KworZG9uZV90ZXN0aW5nKCk7Ci0tIAoyLjM0LjEKCg== --------------lEr06qP8cqAQxdZPUpPbovUB--