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 1nVd52-0003VU-J5 for pgsql-hackers@arkaria.postgresql.org; Sat, 19 Mar 2022 17:41:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nVd51-0008E2-FI for pgsql-hackers@arkaria.postgresql.org; Sat, 19 Mar 2022 17:41:31 +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 1nVd50-0008Dt-2T for pgsql-hackers@lists.postgresql.org; Sat, 19 Mar 2022 17:41:31 +0000 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nVd4p-0008GR-3K for pgsql-hackers@postgresql.org; Sat, 19 Mar 2022 17:41:29 +0000 Received: by mail-lf1-x12a.google.com with SMTP id t25so18678023lfg.7 for ; Sat, 19 Mar 2022 10:41:18 -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 :from:to:cc:references:in-reply-to; bh=zF0/KjJYEzZgGgALlaqbgTQSkAM9YfP9FVcHtVaWlio=; b=mTGsmbm/dSkCoHE6w6/KlpqYUdybbB3HUqSZF/MVrZSlyAqBSN4G910W8WsnI0VwMI LlqcbRlS9er9CdQFE3/w6w6fPsUJdM0Z7KebwIgf3JtrEPJahZwkzVCURnILq58L3cuC G4g3IQIpqX3f/0BiAEt0ULGv2pE2C5gryZ6Z1njw9F1srRR73hYKTRzs2xvUYyJB4kQz Gk1IC394GJeLx8s/5jLQHbp/gG06XOWHgvJ+AJ+vECO7oryxlMaN2/WsRtBc+kLtay6K FYJJ6ln1ibxHOpkmC38KOV02GVu0llg/Q8AOalCA9CHf7lX4gMgbof1Iu8VpxDp7xRzd G+Cw== 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:from:to:cc:references:in-reply-to; bh=zF0/KjJYEzZgGgALlaqbgTQSkAM9YfP9FVcHtVaWlio=; b=Nkoc60qQhKT6d5xGTxsKmf9Yoqws8I6d5KnUczQojg5IzvXm3KOqJmoAwlPeD0vZ0t 5qGbZoWCl7EZJ4Kcw/VnmeupK89SZkFZK4QkV85M1+c4wXiVQDEp3P7Xmg1/vvlzLstD azYpTZCym/ns06Tah+vCrJFVHw/SzLEmWWBp2k9flxD0uviRI0KEqNAcWWNZJOzRMQHr 3JT+0nTvnO4hRsnXx71zTa4B4iyht16ukhy3UNi97jB/S4xkVgGE9ARnGFEarz3bbb46 jtzH/DBr+87TMCPnlzbs0F+Tx2cj/PnTss63KNV0Ldg6C/QZFoHuVTNz1EigrcROvEjm NOqg== X-Gm-Message-State: AOAM530YB4MYOwJ9Q8kfp6LtOVKGi3AtqDjKylfdOWONRxX7RasxG92T 7Gap5Ig6axY+deRuYVJhvhamDxCqhJDLDjBju9/uIgCUgG73voN2N3v6ctadPuHrYJGsLlH1FHE 1hFo+2uShZbznLEdAbUK8GcuLGCBCH+3spR8JE3rGBPkCToMPeOMeqsW0nzQy9eiTuiDXagyC8O 7Vd5656vpS9Ms+fjoUIGNoItxFhxc+Pl9QDaDa X-Google-Smtp-Source: ABdhPJzaz2oQcWGnzmVeh082U6xvITDt2ZH2tRaOAEX1Kn4B+wrM6b8ww/G1+BNlOsMlHkxgJUQU8Q== X-Received: by 2002:a05:6512:b27:b0:448:23da:dcb0 with SMTP id w39-20020a0565120b2700b0044823dadcb0mr9557686lfu.55.1647711677288; Sat, 19 Mar 2022 10:41:17 -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 k9-20020a192d09000000b004487dfc9d9csm1345698lfj.260.2022.03.19.10.41.16 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 19 Mar 2022 10:41:16 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------VGyEOeHBWKfXFg6cGaZ4Wuf5" Message-ID: <566a06cd-fcb5-3e78-b2f0-8d21d92e5b87@enterprisedb.com> Date: Sat, 19 Mar 2022 18:41:15 +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 From: Tomas Vondra To: Amit Kapila Cc: "houzj.fnst@fujitsu.com" , Peter Eisentraut , 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> <3162f7f0-86ac-e3a9-dc55-0a660cb9bab1@enterprisedb.com> <9f551740-1395-f73d-a792-9d487f8074db@enterprisedb.com> In-Reply-To: <9f551740-1395-f73d-a792-9d487f8074db@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. --------------VGyEOeHBWKfXFg6cGaZ4Wuf5 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 3/19/22 18:11, Tomas Vondra wrote: > Fix a compiler warning reported by cfbot. Apologies, I failed to actually commit the fix. So here we go again. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------VGyEOeHBWKfXFg6cGaZ4Wuf5 Content-Type: text/x-patch; charset=UTF-8; name="0001-Allow-specifying-column-lists-for-logical--20220318c.patch" Content-Disposition: attachment; filename*0="0001-Allow-specifying-column-lists-for-logical--20220318c.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhMWJmZWMyMmZjYjljYTM0N2RiMTAwMWMwNTUxNDIwNzIxY2IxMGJhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVGh1LCAxNyBNYXIgMjAyMiAxOToxNjozOSArMDEwMApTdWJq ZWN0OiBbUEFUQ0hdIEFsbG93IHNwZWNpZnlpbmcgY29sdW1uIGxpc3RzIGZvciBsb2dpY2Fs IHJlcGxpY2F0aW9uCgpUaGlzIGFsbG93cyBzcGVjaWZ5aW5nIGFuIG9wdGlvbmFsIGNvbHVt biBsaXN0IHdoZW4gYWRkaW5nIGEgdGFibGUgdG8KbG9naWNhbCByZXBsaWNhdGlvbi4gQ29s dW1ucyBub3QgaW5jbHVkZWQgb24gdGhpcyBsaXN0IGFyZSBub3Qgc2VudCB0bwp0aGUgc3Vi c2NyaWJlci4gVGhlIGxpc3QgaXMgc3BlY2lmaWVkIGFmdGVyIHRoZSB0YWJsZSBuYW1lLCBl bmNsb3NlZAppbiBwYXJlbnRoZXNlcy4KCkZvciBVUERBVEUvREVMRVRFIHB1YmxpY2F0aW9u cywgdGhlIGNvbHVtbiBsaXN0IG5lZWRzIHRvIGNvdmVyIGFsbApSRVBMSUNBIElERU5USVRZ IGNvbHVtbnMuIEZvciBJTlNFUlQgcHVibGljYXRpb25zLCB0aGUgY29sdW1uIGxpc3QgaXMK YXJiaXRyYXJ5IGFuZCBtYXkgb21pdCBzb21lIFJFUExJQ0EgSURFTlRJVFkgY29sdW1ucy4g RnVydGhlcm1vcmUsIGlmCnRoZSB0YWJsZSB1c2VzIFJFUExJQ0EgSURFTlRJVFkgRlVMTCwg Y29sdW1uIGxpc3QgaXMgbm90IGFsbG93ZWQuCgpUaGUgY29sdW1uIGxpc3QgY2FuIGNvbnRh aW4gb25seSBzaW1wbGUgY29sdW1uIHJlZmVyZW5jZXMuIENvbXBsZXgKZXhwcmVzc2lvbnMs IGZ1bmN0aW9uIGNhbGxzIGV0Yy4gYXJlIG5vdCBhbGxvd2VkLiBUaGlzIHJlc3RyaWN0aW9u IGNvdWxkCmJlIHJlbGF4ZWQgaW4gdGhlIGZ1dHVyZS4KCkR1cmluZyB0aGUgaW5pdGlhbCB0 YWJsZSBzeW5jaHJvbml6YXRpb24sIG9ubHkgY29sdW1ucyBzcGVjaWZpZWQgaW4gdGhlCmNv bHVtbiBsaXN0IGFyZSBjb3BpZWQgdG8gdGhlIHN1YnNjcmliZXIuIElmIHRoZSBzdWJzY3Jp cHRpb24gaGFzCnNldmVyYWwgcHVibGljYXRpb25zLCBjb250YWluaW5nIHRoZSBzYW1lIHRh YmxlIHdpdGggZGlmZmVyZW50IGNvbHVtbgpsaXN0cywgY29sdW1ucyBzcGVjaWZpZWQgaW4g YW55IG9mIHRoZSBsaXN0cyB3aWxsIGJlIGNvcGllZC4gVGhpcwptZWFucyBhbGwgY29sdW1u cyBhcmUgcmVwbGljYXRlZCBpZiB0aGUgdGFibGUgaGFzIG5vIGNvbHVtbiBsaXN0IGF0CmFs bCAod2hpY2ggaXMgdHJlYXRlZCBhcyBjb2x1bW4gbGlzdCB3aXRoIGFsbCBjb2x1bW5zKSwg b2Ygd2hlbiBvZiB0aGUKcHVibGljYXRpb25zIGlzIGRlZmluZWQgYXMgRk9SIEFMTCBUQUJM RVMgKHBvc3NpYmx5IElOIFNDSEVNQSBmb3IgdGhlCnNjaGVtYSBvZiB0aGUgdGFibGUpLgoK Rm9yIHBhcnRpdGlvbmVkIHRhYmxlcywgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgZGV0 ZXJtaW5lcyB3aGV0aGVyCnRoZSBjb2x1bW4gbGlzdCBmb3IgdGhlIHJvb3Qgb3IgbGVhZiBy ZWxhdGlvbiB3aWxsIGJlIHVzZWQuIElmIHRoZQpwYXJhbWV0ZXIgaXMgJ2ZhbHNlJyAodGhl IGRlZmF1bHQpLCB0aGUgbGlzdCBkZWZpbmVkIGZvciB0aGUgbGVhZgpyZWxhdGlvbiBpcyB1 c2VkLiBPdGhlcndpc2UsIHRoZSBjb2x1bW4gbGlzdCBmb3IgdGhlIHJvb3QgcGFydGl0aW9u CndpbGwgYmUgdXNlZC4KClBzcWwgY29tbWFuZHMgXGRScCsgYW5kIFxkIDx0YWJsZS1uYW1l PiBub3cgZGlzcGxheSBhbnkgY29sdW1uIGxpc3RzLgoKQXV0aG9yOiBUb21hcyBWb25kcmEs IFJhaGlsYSBTeWVkClJldmlld2VkLWJ5OiBQZXRlciBFaXNlbnRyYXV0LCBBbHZhcm8gSGVy cmVyYSwgVmlnbmVzaCBDLCBJYnJhciBBaG1lZCwKQW1pdCBLYXBpbGEsIEhvdSB6aiwgUGV0 ZXIgU21pdGgsIFdhbmcgd2VpLCBUYW5nLCBTaGkgeXUKRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQUgyTDI4dmRkQl9ORmRSVnB1eVJCSkVCV2p6NEJTeVRCPV9la3ROUkg4 TkoxamY5NWdAbWFpbC5nbWFpbC5jb20KLS0tCiBkb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dt bCAgICAgICAgICAgICAgICAgIHwgICAxNSArLQogZG9jL3NyYy9zZ21sL3Byb3RvY29sLnNn bWwgICAgICAgICAgICAgICAgICB8ICAgIDMgKy0KIGRvYy9zcmMvc2dtbC9yZWYvYWx0ZXJf cHVibGljYXRpb24uc2dtbCAgICAgfCAgIDE4ICstCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0 ZV9wdWJsaWNhdGlvbi5zZ21sICAgIHwgICAxNyArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9w Z19wdWJsaWNhdGlvbi5jICAgICAgICB8ICAyMjEgKysrKwogc3JjL2JhY2tlbmQvY29tbWFu ZHMvcHVibGljYXRpb25jbWRzLmMgICAgICB8ICAyNzIgKysrKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNSZXBsaWNhdGlvbi5jICAgICAgfCAgIDE5ICstCiBzcmMvYmFja2VuZC9u b2Rlcy9jb3B5ZnVuY3MuYyAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9u b2Rlcy9lcXVhbGZ1bmNzLmMgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9w YXJzZXIvZ3JhbS55ICAgICAgICAgICAgICAgICAgIHwgICAzMyArLQogc3JjL2JhY2tlbmQv cmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICB8ICAgNjEgKy0KIHNyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMgfCAgMTU2ICsrLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdvdXRwdXQuYyB8ICAyMDIgKysrLQogc3JjL2Jh Y2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYyAgICAgICAgICB8ICAgMzMgKy0KIHNyYy9i aW4vcGdfZHVtcC9wZ19kdW1wLmMgICAgICAgICAgICAgICAgICAgfCAgIDQ3ICstCiBzcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5oICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzcmMv YmluL3BnX2R1bXAvdC8wMDJfcGdfZHVtcC5wbCAgICAgICAgICAgIHwgICA2MCArCiBzcmMv YmluL3BzcWwvZGVzY3JpYmUuYyAgICAgICAgICAgICAgICAgICAgIHwgICA0MCArLQogc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oICAgICAgICB8ICAgMTQgKwogc3Jj L2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaCAgICB8ICAgIDEgKwogc3Jj L2luY2x1ZGUvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmggICAgICB8ICAgIDQgKy0KIHNy Yy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICAgICAgICAgfCAgICAxICsKIHNy Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oICAgICAgfCAgICA2ICstCiBz cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCAgIHwgIDM3MiArKysr KysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCAgICAgICAgfCAgMjg3 ICsrKysrCiBzcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzBfY29sdW1uX2xpc3QucGwgIHwg MTEyNCArKysrKysrKysrKysrKysrKysrCiAyNiBmaWxlcyBjaGFuZ2VkLCAyOTE1IGluc2Vy dGlvbnMoKyksIDk0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0 L3N1YnNjcmlwdGlvbi90LzAzMF9jb2x1bW5fbGlzdC5wbAoKZGlmZiAtLWdpdCBhL2RvYy9z cmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKaW5k ZXggNGRjNWIzNGQyMWMuLjg5ODI3YzM3M2JkIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv Y2F0YWxvZ3Muc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbApAQCAtNDQx MCw3ICs0NDEwLDcgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlv biBjb3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKICAgICAgIDwvcGFy YT4KICAgICAgIDxwYXJhPgogICAgICAgIFRoaXMgaXMgYW4gYXJyYXkgb2YgPHN0cnVjdGZp ZWxkPmluZG5hdHRzPC9zdHJ1Y3RmaWVsZD4gdmFsdWVzIHRoYXQKLSAgICAgICBpbmRpY2F0 ZSB3aGljaCB0YWJsZSBjb2x1bW5zIHRoaXMgaW5kZXggaW5kZXhlcy4gIEZvciBleGFtcGxl IGEgdmFsdWUKKyAgICAgICBpbmRpY2F0ZSB3aGljaCB0YWJsZSBjb2x1bW5zIHRoaXMgaW5k ZXggaW5kZXhlcy4gIEZvciBleGFtcGxlLCBhIHZhbHVlCiAgICAgICAgb2YgPGxpdGVyYWw+ MSAzPC9saXRlcmFsPiB3b3VsZCBtZWFuIHRoYXQgdGhlIGZpcnN0IGFuZCB0aGUgdGhpcmQg dGFibGUKICAgICAgICBjb2x1bW5zIG1ha2UgdXAgdGhlIGluZGV4IGVudHJpZXMuICBLZXkg Y29sdW1ucyBjb21lIGJlZm9yZSBub24ta2V5CiAgICAgICAgKGluY2x1ZGVkKSBjb2x1bW5z LiAgQSB6ZXJvIGluIHRoaXMgYXJyYXkgaW5kaWNhdGVzIHRoYXQgdGhlCkBAIC02MjgxLDYg KzYyODEsMTkgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBj b3VudCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKICAgICAgICBSZWZlcmVu Y2UgdG8gc2NoZW1hCiAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgPC9yb3c+CisKKyAg ICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFy YSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPnByYXR0 cnM8L3N0cnVjdGZpZWxkPiA8dHlwZT5pbnQydmVjdG9yPC90eXBlPgorICAgICAgIChyZWZl cmVuY2VzIDxsaW5rIGxpbmtlbmQ9ImNhdGFsb2ctcGctYXR0cmlidXRlIj48c3RydWN0bmFt ZT5wZ19hdHRyaWJ1dGU8L3N0cnVjdG5hbWU+PC9saW5rPi48c3RydWN0ZmllbGQ+YXR0bnVt PC9zdHJ1Y3RmaWVsZD4pCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBU aGlzIGlzIGFuIGFycmF5IG9mIHZhbHVlcyB0aGF0IGluZGljYXRlcyB3aGljaCB0YWJsZSBj b2x1bW5zIGFyZQorICAgICAgIHBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uLiAgRm9yIGV4YW1w bGUsIGEgdmFsdWUgb2YgPGxpdGVyYWw+MSAzPC9saXRlcmFsPgorICAgICAgIHdvdWxkIG1l YW4gdGhhdCB0aGUgZmlyc3QgYW5kIHRoZSB0aGlyZCB0YWJsZSBjb2x1bW5zIGFyZSBwdWJs aXNoZWQuCisgICAgICAgQSBudWxsIHZhbHVlIGluZGljYXRlcyB0aGF0IGFsbCBjb2x1bW5z IGFyZSBwdWJsaXNoZWQuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CiAg ICAgPC90Ym9keT4KICAgIDwvdGdyb3VwPgogICA8L3RhYmxlPgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL3Byb3RvY29sLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcHJvdG9jb2wuc2dtbApp bmRleCA5MTc4Yzc3OWJhOS4uZmI0OTFlOWViZWUgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9wcm90b2NvbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9wcm90b2NvbC5zZ21sCkBAIC03 MDA2LDcgKzcwMDYsOCBAQCBSZWxhdGlvbgogPC9saXN0aXRlbT4KIDwvdmFybGlzdGVudHJ5 PgogPC92YXJpYWJsZWxpc3Q+Ci0gICAgICAgIE5leHQsIHRoZSBmb2xsb3dpbmcgbWVzc2Fn ZSBwYXJ0IGFwcGVhcnMgZm9yIGVhY2ggY29sdW1uIChleGNlcHQgZ2VuZXJhdGVkIGNvbHVt bnMpOgorICAgICAgICBOZXh0LCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgcGFydCBhcHBlYXJz IGZvciBlYWNoIGNvbHVtbiBpbmNsdWRlZCBpbgorICAgICAgICB0aGUgcHVibGljYXRpb24g KGV4Y2VwdCBnZW5lcmF0ZWQgY29sdW1ucyk6CiA8dmFyaWFibGVsaXN0PgogPHZhcmxpc3Rl bnRyeT4KIDx0ZXJtPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJs aWNhdGlvbi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21s CmluZGV4IDMyYjc1ZjZjNzhlLi45ZTlmYzE5ZGY3MSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9z Z21sL3JlZi9hbHRlcl9wdWJsaWNhdGlvbi5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9yZWYv YWx0ZXJfcHVibGljYXRpb24uc2dtbApAQCAtMzAsNyArMzAsNyBAQCBBTFRFUiBQVUJMSUNB VElPTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+ IFJFTkFNRSBUTyA8cgogCiA8cGhyYXNlPndoZXJlIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFy YW1ldGVyIj5wdWJsaWNhdGlvbl9vYmplY3Q8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9w aHJhc2U+CiAKLSAgICBUQUJMRSBbIE9OTFkgXSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFt ZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsgKiBdIFsgV0hFUkUgKCA8cmVwbGFj ZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICkgXSBb LCAuLi4gXQorICAgIFRBQkxFIFsgT05MWSBdIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyAqIF0gWyAoIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IFssIC4uLiBdICkg XSBbIFdIRVJFICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248 L3JlcGxhY2VhYmxlPiApIF0gWywgLi4uIF0KICAgICBBTEwgVEFCTEVTIElOIFNDSEVNQSB7 IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5zY2hlbWFfbmFtZTwvcmVwbGFjZWFi bGU+IHwgQ1VSUkVOVF9TQ0hFTUEgfSBbLCAuLi4gXQogPC9zeW5vcHNpcz4KICA8L3JlZnN5 bm9wc2lzZGl2PgpAQCAtMTEyLDYgKzExMiwxNCBAQCBBTFRFUiBQVUJMSUNBVElPTiA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bmFtZTwvcmVwbGFjZWFibGU+IFJFTkFNRSBU TyA8cgogICAgICAgc3BlY2lmaWVkLCB0aGUgdGFibGUgYW5kIGFsbCBpdHMgZGVzY2VuZGFu dCB0YWJsZXMgKGlmIGFueSkgYXJlCiAgICAgICBhZmZlY3RlZC4gIE9wdGlvbmFsbHksIDxs aXRlcmFsPio8L2xpdGVyYWw+IGNhbiBiZSBzcGVjaWZpZWQgYWZ0ZXIgdGhlIHRhYmxlCiAg ICAgICBuYW1lIHRvIGV4cGxpY2l0bHkgaW5kaWNhdGUgdGhhdCBkZXNjZW5kYW50IHRhYmxl cyBhcmUgaW5jbHVkZWQuCisgICAgIDwvcGFyYT4KKworICAgICA8cGFyYT4KKyAgICAgIE9w dGlvbmFsbHksIGEgY29sdW1uIGxpc3QgY2FuIGJlIHNwZWNpZmllZC4gIFNlZSA8eHJlZgor ICAgICAgbGlua2VuZD0ic3FsLWNyZWF0ZXB1YmxpY2F0aW9uIi8+IGZvciBkZXRhaWxzLgor ICAgICA8L3BhcmE+CisKKyAgICAgPHBhcmE+CiAgICAgICBJZiB0aGUgb3B0aW9uYWwgPGxp dGVyYWw+V0hFUkU8L2xpdGVyYWw+IGNsYXVzZSBpcyBzcGVjaWZpZWQsIHJvd3MgZm9yCiAg ICAgICB3aGljaCB0aGUgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Np b248L3JlcGxhY2VhYmxlPgogICAgICAgZXZhbHVhdGVzIHRvIGZhbHNlIG9yIG51bGwgd2ls bCBub3QgYmUgcHVibGlzaGVkLiBOb3RlIHRoYXQgcGFyZW50aGVzZXMKQEAgLTE3NCw3ICsx ODIsMTMgQEAgQUxURVIgUFVCTElDQVRJT04gbm9pbnNlcnQgU0VUIChwdWJsaXNoID0gJ3Vw ZGF0ZSwgZGVsZXRlJyk7CiAgIDxwYXJhPgogICAgQWRkIHNvbWUgdGFibGVzIHRvIHRoZSBw dWJsaWNhdGlvbjoKIDxwcm9ncmFtbGlzdGluZz4KLUFMVEVSIFBVQkxJQ0FUSU9OIG15cHVi bGljYXRpb24gQUREIFRBQkxFIHVzZXJzLCBkZXBhcnRtZW50czsKK0FMVEVSIFBVQkxJQ0FU SU9OIG15cHVibGljYXRpb24gQUREIFRBQkxFIHVzZXJzICh1c2VyX2lkLCBmaXJzdG5hbWUp LCBkZXBhcnRtZW50czsKKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgorCisgIDxwYXJhPgor ICAgQ2hhbmdlIHRoZSBzZXQgb2YgY29sdW1ucyBwdWJsaXNoZWQgZm9yIGEgdGFibGU6Cis8 cHJvZ3JhbWxpc3Rpbmc+CitBTFRFUiBQVUJMSUNBVElPTiBteXB1YmxpY2F0aW9uIFNFVCBU QUJMRSB1c2VycyAodXNlcl9pZCwgZmlyc3RuYW1lLCBsYXN0bmFtZSksIFRBQkxFIGRlcGFy dG1lbnRzOwogPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+CiAKICAgPHBhcmE+CmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9wdWJsaWNhdGlvbi5zZ21sIGIvZG9jL3Ny Yy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24uc2dtbAppbmRleCA0OTc5YjliNjQ2ZC4u ZmIyZDAxMzM5M2IgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3B1Ymxp Y2F0aW9uLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfcHVibGljYXRpb24u c2dtbApAQCAtMjgsNyArMjgsNyBAQCBDUkVBVEUgUFVCTElDQVRJT04gPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPm5hbWU8L3JlcGxhY2VhYmxlPgogCiA8cGhyYXNlPndoZXJl IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wdWJsaWNhdGlvbl9vYmplY3Q8L3Jl cGxhY2VhYmxlPiBpcyBvbmUgb2Y6PC9waHJhc2U+CiAKLSAgICBUQUJMRSBbIE9OTFkgXSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+ IFsgKiBdIFsgV0hFUkUgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZXhwcmVz c2lvbjwvcmVwbGFjZWFibGU+ICkgXSBbLCAuLi4gXQorICAgIFRBQkxFIFsgT05MWSBdIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4g WyAqIF0gWyAoIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5jb2x1bW5fbmFtZTwv cmVwbGFjZWFibGU+IFssIC4uLiBdICkgXSBbIFdIRVJFICggPHJlcGxhY2VhYmxlIGNsYXNz PSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiApIF0gWywgLi4uIF0KICAg ICBBTEwgVEFCTEVTIElOIFNDSEVNQSB7IDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5zY2hlbWFfbmFtZTwvcmVwbGFjZWFibGU+IHwgQ1VSUkVOVF9TQ0hFTUEgfSBbLCAuLi4g XQogPC9zeW5vcHNpcz4KICA8L3JlZnN5bm9wc2lzZGl2PgpAQCAtODYsNiArODYsMTMgQEAg Q1JFQVRFIFBVQkxJQ0FUSU9OIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5uYW1l PC9yZXBsYWNlYWJsZT4KICAgICAgIDxsaXRlcmFsPlRSVU5DQVRFPC9saXRlcmFsPiBjb21t YW5kcy4KICAgICAgPC9wYXJhPgogCisgICAgIDxwYXJhPgorICAgICAgV2hlbiBhIGNvbHVt biBsaXN0IGlzIHNwZWNpZmllZCwgb25seSB0aGUgbmFtZWQgY29sdW1ucyBhcmUgcmVwbGlj YXRlZC4KKyAgICAgIElmIG5vIGNvbHVtbiBsaXN0IGlzIHNwZWNpZmllZCwgYWxsIGNvbHVt bnMgb2YgdGhlIHRhYmxlIGFyZSByZXBsaWNhdGVkCisgICAgICB0aHJvdWdoIHRoaXMgcHVi bGljYXRpb24sIGluY2x1ZGluZyBhbnkgY29sdW1ucyBhZGRlZCBsYXRlci4gIElmIGEgY29s dW1uCisgICAgICBsaXN0IGlzIHNwZWNpZmllZCwgaXQgbXVzdCBpbmNsdWRlIHRoZSByZXBs aWNhIGlkZW50aXR5IGNvbHVtbnMuCisgICAgIDwvcGFyYT4KKwogICAgICA8cGFyYT4KICAg ICAgIE9ubHkgcGVyc2lzdGVudCBiYXNlIHRhYmxlcyBhbmQgcGFydGl0aW9uZWQgdGFibGVz IGNhbiBiZSBwYXJ0IG9mIGEKICAgICAgIHB1YmxpY2F0aW9uLiAgVGVtcG9yYXJ5IHRhYmxl cywgdW5sb2dnZWQgdGFibGVzLCBmb3JlaWduIHRhYmxlcywKQEAgLTMyNyw2ICszMzQsMTQg QEAgQ1JFQVRFIFBVQkxJQ0FUSU9OIHByb2R1Y3Rpb25fcHVibGljYXRpb24gRk9SIFRBQkxF IHVzZXJzLCBkZXBhcnRtZW50cywgQUxMIFRBQkwKICAgIDxzdHJ1Y3RuYW1lPnNhbGVzPC9z dHJ1Y3RuYW1lPjoKIDxwcm9ncmFtbGlzdGluZz4KIENSRUFURSBQVUJMSUNBVElPTiBzYWxl c19wdWJsaWNhdGlvbiBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgbWFya2V0aW5nLCBzYWxl czsKKzwvcHJvZ3JhbWxpc3Rpbmc+PC9wYXJhPgorCisgIDxwYXJhPgorICAgQ3JlYXRlIGEg cHVibGljYXRpb24gdGhhdCBwdWJsaXNoZXMgYWxsIGNoYW5nZXMgZm9yIHRhYmxlIDxzdHJ1 Y3RuYW1lPnVzZXJzPC9zdHJ1Y3RuYW1lPiwKKyAgIGJ1dCByZXBsaWNhdGVzIG9ubHkgY29s dW1ucyA8c3RydWN0bmFtZT51c2VyX2lkPC9zdHJ1Y3RuYW1lPiBhbmQKKyAgIDxzdHJ1Y3Ru YW1lPmZpcnN0bmFtZTwvc3RydWN0bmFtZT46Cis8cHJvZ3JhbWxpc3Rpbmc+CitDUkVBVEUg UFVCTElDQVRJT04gdXNlcnNfZmlsdGVyZWQgRk9SIFRBQkxFIHVzZXJzICh1c2VyX2lkLCBm aXJzdG5hbWUpOwogPC9wcm9ncmFtbGlzdGluZz48L3BhcmE+CiAgPC9yZWZzZWN0MT4KIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jIGIvc3Jj L2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5jCmluZGV4IDc4OWI4OTVkYjg5Li40 MzJmYzI3ZTU5MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNh dGlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcHVibGljYXRpb24uYwpAQCAt NDUsNiArNDUsOSBAQAogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxz L3N5c2NhY2hlLmgiCiAKK3N0YXRpYyB2b2lkIHB1YmxpY2F0aW9uX3RyYW5zbGF0ZV9jb2x1 bW5zKFJlbGF0aW9uIHRhcmdldHJlbCwgTGlzdCAqY29sdW1ucywKKwkJCQkJCQkJCQkgIGlu dCAqbmF0dHMsIEF0dHJOdW1iZXIgKiphdHRycyk7CisKIC8qCiAgKiBDaGVjayBpZiByZWxh dGlvbiBjYW4gYmUgaW4gZ2l2ZW4gcHVibGljYXRpb24gYW5kIHRocm93cyBhcHByb3ByaWF0 ZQogICogZXJyb3IgaWYgbm90LgpAQCAtMzQ1LDYgKzM0OCw4IEBAIHB1YmxpY2F0aW9uX2Fk ZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCU9pZAkJ CXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZCh0YXJnZXRyZWwpOwogCU9pZAkJCXB1YnJlbG9p ZDsKIAlQdWJsaWNhdGlvbiAqcHViID0gR2V0UHVibGljYXRpb24ocHViaWQpOworCUF0dHJO dW1iZXIgKmF0dGFycmF5ID0gTlVMTDsKKwlpbnQJCQluYXR0cyA9IDA7CiAJT2JqZWN0QWRk cmVzcyBteXNlbGYsCiAJCQkJcmVmZXJlbmNlZDsKIAlMaXN0CSAgICpyZWxpZHMgPSBOSUw7 CkBAIC0zNzIsNiArMzc3LDE0IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHVi aWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCiAJY2hlY2tfcHVibGljYXRpb25fYWRk X3JlbGF0aW9uKHRhcmdldHJlbCk7CiAKKwkvKgorCSAqIFRyYW5zbGF0ZSBjb2x1bW4gbmFt ZXMgdG8gYXR0bnVtcyBhbmQgbWFrZSBzdXJlIHRoZSBjb2x1bW4gbGlzdCBjb250YWlucwor CSAqIG9ubHkgYWxsb3dlZCBlbGVtZW50cyAobm8gc3lzdGVtIG9yIGdlbmVyYXRlZCBjb2x1 bW5zIGV0Yy4pLiBBbHNvIGJ1aWxkCisJICogYW4gYXJyYXkgb2YgYXR0bnVtcywgZm9yIHN0 b3JpbmcgaW4gdGhlIGNhdGFsb2cuCisJICovCisJcHVibGljYXRpb25fdHJhbnNsYXRlX2Nv bHVtbnMocHJpLT5yZWxhdGlvbiwgcHJpLT5jb2x1bW5zLAorCQkJCQkJCQkgICZuYXR0cywg JmF0dGFycmF5KTsKKwogCS8qIEZvcm0gYSB0dXBsZS4gKi8KIAltZW1zZXQodmFsdWVzLCAw LCBzaXplb2YodmFsdWVzKSk7CiAJbWVtc2V0KG51bGxzLCBmYWxzZSwgc2l6ZW9mKG51bGxz KSk7CkBAIC0zOTAsNiArNDAzLDEyIEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQg cHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCWVsc2UKIAkJbnVsbHNbQW51bV9w Z19wdWJsaWNhdGlvbl9yZWxfcHJxdWFsIC0gMV0gPSB0cnVlOwogCisJLyogQWRkIGNvbHVt biBsaXN0LCBpZiBhdmFpbGFibGUgKi8KKwlpZiAocHJpLT5jb2x1bW5zKQorCQl2YWx1ZXNb QW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycyAtIDFdID0gUG9pbnRlckdldERhdHVt KGJ1aWxkaW50MnZlY3RvcihhdHRhcnJheSwgbmF0dHMpKTsKKwllbHNlCisJCW51bGxzW0Fu dW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMgLSAxXSA9IHRydWU7CisKIAl0dXAgPSBo ZWFwX2Zvcm1fdHVwbGUoUmVsYXRpb25HZXREZXNjcihyZWwpLCB2YWx1ZXMsIG51bGxzKTsK IAogCS8qIEluc2VydCB0dXBsZSBpbnRvIGNhdGFsb2cuICovCkBAIC00MTMsNiArNDMyLDEz IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlvbihPaWQgcHViaWQsIFB1YmxpY2F0aW9uUmVs SW5mbyAqcHJpLAogCQkJCQkJCQkJCURFUEVOREVOQ1lfTk9STUFMLCBERVBFTkRFTkNZX05P Uk1BTCwKIAkJCQkJCQkJCQlmYWxzZSk7CiAKKwkvKiBBZGQgZGVwZW5kZW5jeSBvbiB0aGUg Y29sdW1ucywgaWYgYW55IGFyZSBsaXN0ZWQgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IG5h dHRzOyBpKyspCisJeworCQlPYmplY3RBZGRyZXNzU3ViU2V0KHJlZmVyZW5jZWQsIFJlbGF0 aW9uUmVsYXRpb25JZCwgcmVsaWQsIGF0dGFycmF5W2ldKTsKKwkJcmVjb3JkRGVwZW5kZW5j eU9uKCZteXNlbGYsICZyZWZlcmVuY2VkLCBERVBFTkRFTkNZX05PUk1BTCk7CisJfQorCiAJ LyogQ2xvc2UgdGhlIHRhYmxlLiAqLwogCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZl TG9jayk7CiAKQEAgLTQzMiw2ICs0NTgsMTI1IEBAIHB1YmxpY2F0aW9uX2FkZF9yZWxhdGlv bihPaWQgcHViaWQsIFB1YmxpY2F0aW9uUmVsSW5mbyAqcHJpLAogCXJldHVybiBteXNlbGY7 CiB9CiAKKy8qIHFzb3J0IGNvbXBhcmF0b3IgZm9yIGF0dG51bXMgKi8KK3N0YXRpYyBpbnQK K2NvbXBhcmVfaW50MTYoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwlpbnQJ CQlhdiA9ICooY29uc3QgaW50MTYgKikgYTsKKwlpbnQJCQlidiA9ICooY29uc3QgaW50MTYg KikgYjsKKworCS8qIHRoaXMgY2FuJ3Qgb3ZlcmZsb3cgaWYgaW50IGlzIHdpZGVyIHRoYW4g aW50MTYgKi8KKwlyZXR1cm4gKGF2IC0gYnYpOworfQorCisvKgorICogVHJhbnNsYXRlIGEg bGlzdCBvZiBjb2x1bW4gbmFtZXMgdG8gYW4gYXJyYXkgb2YgYXR0cmlidXRlIG51bWJlcnMK KyAqIGFuZCBhIEJpdG1hcHNldCB3aXRoIHRoZW07IHZlcmlmeSB0aGF0IGVhY2ggYXR0cmli dXRlIGlzIGFwcHJvcHJpYXRlCisgKiB0byBoYXZlIGluIGEgcHVibGljYXRpb24gY29sdW1u IGxpc3QgKG5vIHN5c3RlbSBvciBnZW5lcmF0ZWQgYXR0cmlidXRlcywKKyAqIG5vIGR1cGxp Y2F0ZXMpLiAgQWRkaXRpb25hbCBjaGVja3Mgd2l0aCByZXBsaWNhIGlkZW50aXR5IGFyZSBk b25lIGxhdGVyOworICogc2VlIGNoZWNrX3B1YmxpY2F0aW9uX2NvbHVtbnMuCisgKgorICog Tm90ZSB0aGF0IHRoZSBhdHRyaWJ1dGUgbnVtYmVycyBhcmUgKm5vdCogb2Zmc2V0IGJ5Cisg KiBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyOyBzeXN0ZW0gY29sdW1ucyBh cmUgZm9yYmlkZGVuIHNvIHRoaXMKKyAqIGlzIG9rYXkuCisgKi8KK3N0YXRpYyB2b2lkCitw dWJsaWNhdGlvbl90cmFuc2xhdGVfY29sdW1ucyhSZWxhdGlvbiB0YXJnZXRyZWwsIExpc3Qg KmNvbHVtbnMsCisJCQkJCQkJICBpbnQgKm5hdHRzLCBBdHRyTnVtYmVyICoqYXR0cnMpCit7 CisJQXR0ck51bWJlciAqYXR0YXJyYXkgPSBOVUxMOworCUJpdG1hcHNldCAgKnNldCA9IE5V TEw7CisJTGlzdENlbGwgICAqbGM7CisJaW50CQkJbiA9IDA7CisJVHVwbGVEZXNjCXR1cGRl c2MgPSBSZWxhdGlvbkdldERlc2NyKHRhcmdldHJlbCk7CisKKwkvKiBCYWlsIG91dCB3aGVu IG5vIGNvbHVtbiBsaXN0IGRlZmluZWQuICovCisJaWYgKCFjb2x1bW5zKQorCQlyZXR1cm47 CisKKwkvKgorCSAqIFRyYW5zbGF0ZSBsaXN0IG9mIGNvbHVtbnMgdG8gYXR0bnVtcy4gV2Ug cHJvaGliaXQgc3lzdGVtIGF0dHJpYnV0ZXMgYW5kCisJICogbWFrZSBzdXJlIHRoZXJlIGFy ZSBubyBkdXBsaWNhdGUgY29sdW1ucy4KKwkgKi8KKwlhdHRhcnJheSA9IHBhbGxvYyhzaXpl b2YoQXR0ck51bWJlcikgKiBsaXN0X2xlbmd0aChjb2x1bW5zKSk7CisJZm9yZWFjaChsYywg Y29sdW1ucykKKwl7CisJCWNoYXIJICAgKmNvbG5hbWUgPSBzdHJWYWwobGZpcnN0KGxjKSk7 CisJCUF0dHJOdW1iZXIJYXR0bnVtID0gZ2V0X2F0dG51bShSZWxhdGlvbkdldFJlbGlkKHRh cmdldHJlbCksIGNvbG5hbWUpOworCisJCWlmIChhdHRudW0gPT0gSW52YWxpZEF0dHJOdW1i ZXIpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVE X0NPTFVNTiksCisJCQkJCWVycm1zZygiY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiBcIiVz XCIgZG9lcyBub3QgZXhpc3QiLAorCQkJCQkJICAgY29sbmFtZSwgUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUodGFyZ2V0cmVsKSkpOworCisJCWlmICghQXR0ck51bWJlcklzRm9yVXNlckRl ZmluZWRBdHRyKGF0dG51bSkpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9DT0xVTU5fUkVGRVJFTkNFKSwKKwkJCQkJZXJybXNnKCJjYW5ub3Qg cmVmZXJlbmNlIHN5c3RlbSBjb2x1bW4gXCIlc1wiIGluIHB1YmxpY2F0aW9uIGNvbHVtbiBs aXN0IiwKKwkJCQkJCSAgIGNvbG5hbWUpKTsKKworCQlpZiAoVHVwbGVEZXNjQXR0cih0dXBk ZXNjLCBhdHRudW0gLSAxKS0+YXR0Z2VuZXJhdGVkKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJ CQkJZXJyY29kZShFUlJDT0RFX0lOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSksCisJCQkJCWVy cm1zZygiY2Fubm90IHJlZmVyZW5jZSBnZW5lcmF0ZWQgY29sdW1uIFwiJXNcIiBpbiBwdWJs aWNhdGlvbiBjb2x1bW4gbGlzdCIsCisJCQkJCQkgICBjb2xuYW1lKSk7CisKKwkJaWYgKGJt c19pc19tZW1iZXIoYXR0bnVtLCBzZXQpKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJZXJy Y29kZShFUlJDT0RFX0RVUExJQ0FURV9PQkpFQ1QpLAorCQkJCQllcnJtc2coImR1cGxpY2F0 ZSBjb2x1bW4gXCIlc1wiIGluIHB1YmxpY2F0aW9uIGNvbHVtbiBsaXN0IiwKKwkJCQkJCSAg IGNvbG5hbWUpKTsKKworCQlzZXQgPSBibXNfYWRkX21lbWJlcihzZXQsIGF0dG51bSk7CisJ CWF0dGFycmF5W24rK10gPSBhdHRudW07CisJfQorCisJLyogQmUgdGlkeSwgc28gdGhhdCB0 aGUgY2F0YWxvZyByZXByZXNlbnRhdGlvbiBpcyBhbHdheXMgc29ydGVkICovCisJcXNvcnQo YXR0YXJyYXksIG4sIHNpemVvZihBdHRyTnVtYmVyKSwgY29tcGFyZV9pbnQxNik7CisKKwkq bmF0dHMgPSBuOworCSphdHRycyA9IGF0dGFycmF5OworCisJYm1zX2ZyZWUoc2V0KTsKK30K KworLyoKKyAqIFRyYW5zZm9ybSB0aGUgY29sdW1uIGxpc3QgKHJlcHJlc2VudGVkIGJ5IGFu IGFycmF5KSB0byBhIGJpdG1hcHNldC4KKyAqLworQml0bWFwc2V0ICoKK3B1Yl9jb2xsaXN0 X3RvX2JpdG1hcHNldChCaXRtYXBzZXQgKmNvbHVtbnMsIERhdHVtIHB1YmNvbHMsIE1lbW9y eUNvbnRleHQgbWN4dCkKK3sKKwlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOworCUFycmF5 VHlwZSAgKmFycjsKKwlpbnQJCQluZWxlbXM7CisJaW50MTYJICAgKmVsZW1zOworCU1lbW9y eUNvbnRleHQJb2xkY3h0OworCisJLyoKKwkgKiBJZiBhbiBleGlzdGluZyBiaXRtYXAgd2Fz IHByb3ZpZGVkLCB1c2UgaXQuIE90aGVyd2lzZSBqdXN0IHVzZSBOVUxMCisJICogYW5kIGJ1 aWxkIGEgbmV3IGJpdG1hcC4KKwkgKi8KKwlpZiAoY29sdW1ucykKKwkJcmVzdWx0ID0gY29s dW1uczsKKworCWFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChwdWJjb2xzKTsKKwluZWxlbXMg PSBBUlJfRElNUyhhcnIpWzBdOworCWVsZW1zID0gKGludDE2ICopIEFSUl9EQVRBX1BUUihh cnIpOworCisJLyogSWYgYSBtZW1vcnkgY29udGV4dCB3YXMgc3BlY2lmaWVkLCBzd2l0Y2gg dG8gaXQuICovCisJaWYgKG1jeHQpCisJCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhtY3h0KTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCisJCXJlc3Vs dCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwgZWxlbXNbaV0pOworCisJaWYgKG1jeHQpCisJ CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30K KwogLyoKICAqIEluc2VydCBuZXcgcHVibGljYXRpb24gLyBzY2hlbWEgbWFwcGluZy4KICAq LwpAQCAtNTM5LDYgKzY4NCw4MiBAQCBHZXRSZWxhdGlvblB1YmxpY2F0aW9ucyhPaWQgcmVs aWQpCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIEdldHMgYSBsaXN0IG9mIE9JRHMg b2YgYWxsIHBhcnRpYWwtY29sdW1uIHB1YmxpY2F0aW9ucyBvZiB0aGUgZ2l2ZW4KKyAqIHJl bGF0aW9uLCB0aGF0IGlzLCB0aG9zZSB0aGF0IHNwZWNpZnkgYSBjb2x1bW4gbGlzdC4KKyAq LworTGlzdCAqCitHZXRSZWxhdGlvbkNvbHVtblBhcnRpYWxQdWJsaWNhdGlvbnMoT2lkIHJl bGlkKQoreworCUNhdENMaXN0ICAgKnB1YnJlbGxpc3Q7CisJTGlzdAkgICAqcHVicyA9IE5J TDsKKworCXB1YnJlbGxpc3QgPSBTZWFyY2hTeXNDYWNoZUxpc3QxKFBVQkxJQ0FUSU9OUkVM TUFQLAorCQkJCQkJCQkJIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpKTsKKwlmb3IgKGludCBp ID0gMDsgaSA8IHB1YnJlbGxpc3QtPm5fbWVtYmVyczsgaSsrKQorCXsKKwkJSGVhcFR1cGxl CXR1cCA9ICZwdWJyZWxsaXN0LT5tZW1iZXJzW2ldLT50dXBsZTsKKwkJYm9vbAkJaXNudWxs OworCQlGb3JtX3BnX3B1YmxpY2F0aW9uX3JlbAlwdWJyZWw7CisKKwkJKHZvaWQpIFN5c0Nh Y2hlR2V0QXR0cihQVUJMSUNBVElPTlJFTE1BUCwgdHVwLAorCQkJCQkJCSAgIEFudW1fcGdf cHVibGljYXRpb25fcmVsX3ByYXR0cnMsCisJCQkJCQkJICAgJmlzbnVsbCk7CisKKwkJLyog bm8gY29sdW1uIGxpc3QgZm9yIHRoaXMgcHVibGljYXRpb25zL3JlbGF0aW9uICovCisJCWlm IChpc251bGwpCisJCQljb250aW51ZTsKKworCQlwdWJyZWwgPSAoRm9ybV9wZ19wdWJsaWNh dGlvbl9yZWwpIEdFVFNUUlVDVCh0dXApOworCisJCXB1YnMgPSBsYXBwZW5kX29pZChwdWJz LCBwdWJyZWwtPnBycHViaWQpOworCX0KKworCVJlbGVhc2VTeXNDYWNoZUxpc3QocHVicmVs bGlzdCk7CisKKwlyZXR1cm4gcHViczsKK30KKworCisvKgorICogRm9yIGEgcmVsYXRpb24g aW4gYSBwdWJsaWNhdGlvbiB0aGF0IGlzIGtub3duIHRvIGhhdmUgYSBub24tbnVsbCBjb2x1 bW4KKyAqIGxpc3QsIHJldHVybiB0aGUgbGlzdCBvZiBhdHRyaWJ1dGUgbnVtYmVycyB0aGF0 IGFyZSBpbiBpdC4KKyAqLworTGlzdCAqCitHZXRSZWxhdGlvbkNvbHVtbkxpc3RJblB1Ymxp Y2F0aW9uKE9pZCByZWxpZCwgT2lkIHB1YmlkKQoreworCUhlYXBUdXBsZQl0dXA7CisJRGF0 dW0JCWFkYXR1bTsKKwlib29sCQlpc251bGw7CisJQXJyYXlUeXBlICAqYXJyOworCWludAkJ CW5lbGVtczsKKwlpbnQxNgkgICAqZWxlbXM7CisJTGlzdAkgICAqYXR0bm9zID0gTklMOwor CisJdHVwID0gU2VhcmNoU3lzQ2FjaGUyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJICBP YmplY3RJZEdldERhdHVtKHJlbGlkKSwKKwkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShwdWJp ZCkpOworCisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cCkpCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWwgJXUgb2YgcHVibGljYXRpb24gJXUiLCByZWxp ZCwgcHViaWQpOworCisJYWRhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVM TUFQLCB0dXAsCisJCQkJCQkJIEFudW1fcGdfcHVibGljYXRpb25fcmVsX3ByYXR0cnMsICZp c251bGwpOworCWlmIChpc251bGwpCisJCWVsb2coRVJST1IsICJmb3VuZCB1bmV4cGVjdGVk IG51bGwgaW4gcGdfcHVibGljYXRpb25fcmVsLnByYXR0cnMiKTsKKworCWFyciA9IERhdHVt R2V0QXJyYXlUeXBlUChhZGF0dW0pOworCW5lbGVtcyA9IEFSUl9ESU1TKGFycilbMF07CisJ ZWxlbXMgPSAoaW50MTYgKikgQVJSX0RBVEFfUFRSKGFycik7CisKKwlmb3IgKGludCBpID0g MDsgaSA8IG5lbGVtczsgaSsrKQorCQlhdHRub3MgPSBsYXBwZW5kX29pZChhdHRub3MsIGVs ZW1zW2ldKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCisJcmV0dXJuIGF0dG5vczsK K30KKwogLyoKICAqIEdldHMgbGlzdCBvZiByZWxhdGlvbiBvaWRzIGZvciBhIHB1YmxpY2F0 aW9uLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9u Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXgg MWFhZDJlNzY5Y2IuLjBjOTk5M2ExNTViIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJs aWNhdGlvbmNtZHMuYwpAQCAtMjk2LDcgKzI5Niw3IEBAIGNvbnRhaW5faW52YWxpZF9yZmNv bHVtbl93YWxrZXIoTm9kZSAqbm9kZSwgcmZfY29udGV4dCAqY29udGV4dCkKICAqIFJldHVy bnMgdHJ1ZSBpZiBhbnkgaW52YWxpZCBjb2x1bW4gaXMgZm91bmQuCiAgKi8KIGJvb2wKLWNv bnRhaW5faW52YWxpZF9yZmNvbHVtbihPaWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0aW9uLCBM aXN0ICphbmNlc3RvcnMsCitwdWJfcmZfY29udGFpbnNfaW52YWxpZF9jb2x1bW4oT2lkIHB1 YmlkLCBSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCQkJIGJvb2wg cHVidmlhcm9vdCkKIHsKIAlIZWFwVHVwbGUJcmZ0dXBsZTsKQEAgLTM2OCw2ICszNjgsMTE0 IEBAIGNvbnRhaW5faW52YWxpZF9yZmNvbHVtbihPaWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0 aW9uLCBMaXN0ICphbmNlc3RvcnMsCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoKKyAqIENo ZWNrIGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5jZWQgaW4gdGhlIFJFUExJQ0EgSURFTlRJVFkg YXJlIGNvdmVyZWQgYnkKKyAqIHRoZSBjb2x1bW4gbGlzdC4KKyAqCisgKiBSZXR1cm5zIHRy dWUgaWYgYW55IHJlcGxpY2EgaWRlbnRpdHkgY29sdW1uIGlzIG5vdCBjb3ZlcmVkIGJ5IGNv bHVtbiBsaXN0LgorICovCitib29sCitwdWJfY29sbGlzdF9jb250YWluc19pbnZhbGlkX2Nv 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 RlVMTCkKKwkJCXJlc3VsdCA9IHRydWU7CisKKwkJLyogVHJhbnNmb3JtIHRoZSBjb2x1bW4g bGlzdCBkYXR1bSB0byBhIGJpdG1hcHNldC4gKi8KKwkJY29sdW1ucyA9IHB1Yl9jb2xsaXN0 X3RvX2JpdG1hcHNldChOVUxMLCBkYXR1bSwgTlVMTCk7CisKKwkJLyogUmVtZW1iZXIgY29s dW1ucyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBSRVBMSUNBIElERU5USVRZICovCisJCWlkYXR0 cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkJ IElOREVYX0FUVFJfQklUTUFQX0lERU5USVRZX0tFWSk7CisKKwkJLyoKKwkJICogQXR0bnVt cyBpbiB0aGUgYml0bWFwIHJldHVybmVkIGJ5IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFw IGFyZQorCQkgKiBvZmZzZXQgKHRvIGhhbmRsZSBzeXN0ZW0gY29sdW1ucyB0aGUgdXN1YWwg d2F5KSwgd2hpbGUgY29sdW1uIGxpc3QKKwkJICogZG9lcyBub3QgdXNlIG9mZnNldCwgc28g d2UgY2FuJ3QgZG8gYm1zX2lzX3N1YnNldCgpLiBJbnN0ZWFkLCB3ZSBoYXZlCisJCSAqIHRv IGxvb3Agb3ZlciB0aGUgaWRhdHRycyBhbmQgY2hlY2sgYWxsIG9mIHRoZW0gYXJlIGluIHRo ZSBsaXN0LgorCQkgKi8KKwkJeCA9IC0xOworCQl3aGlsZSAoKHggPSBibXNfbmV4dF9tZW1i ZXIoaWRhdHRycywgeCkpID49IDApCisJCXsKKwkJCUF0dHJOdW1iZXIJYXR0bnVtID0gKHgg KyBGaXJzdExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKworCQkJLyoKKwkJCSAq IElmIHB1YnZpYXJvb3QgaXMgdHJ1ZSwgd2UgYXJlIHZhbGlkYXRpbmcgdGhlIGNvbHVtbiBs aXN0IG9mIHRoZQorCQkJICogcGFyZW50IHRhYmxlLCBidXQgdGhlIGJpdG1hcCBjb250YWlu cyB0aGUgcmVwbGljYSBpZGVudGl0eQorCQkJICogaW5mb3JtYXRpb24gb2YgdGhlIGNoaWxk IHRhYmxlLiBUaGUgcGFyZW50L2NoaWxkIGF0dG51bXMgbWF5IG5vdAorCQkJICogbWF0Y2gs IHNvIHRyYW5zbGF0ZSB0aGVtIHRvIHRoZSBwYXJlbnQgLSBnZXQgdGhlIGF0dG5hbWUgZnJv bQorCQkJICogdGhlIGNoaWxkLCBhbmQgbG9vayBpdCB1cCBpbiB0aGUgcGFyZW50LgorCQkJ ICovCisJCQlpZiAocHVidmlhcm9vdCkKKwkJCXsKKwkJCQkvKiBhdHRyaWJ1dGUgbmFtZSBp biB0aGUgY2hpbGQgdGFibGUgKi8KKwkJCQljaGFyICAgKmNvbG5hbWUgPSBnZXRfYXR0bmFt ZShyZWxpZCwgYXR0bnVtLCBmYWxzZSk7CisKKwkJCQkvKgorCQkJCSAqIERldGVybWluZSB0 aGUgYXR0bnVtIGZvciB0aGUgYXR0cmlidXRlIG5hbWUgaW4gcGFyZW50ICh3ZQorCQkJCSAq IGFyZSB1c2luZyB0aGUgY29sdW1uIGxpc3QgZGVmaW5lZCBvbiB0aGUgcGFyZW50KS4KKwkJ CQkgKi8KKwkJCQlhdHRudW0gPSBnZXRfYXR0bnVtKHB1Ymxpc2hfYXNfcmVsaWQsIGNvbG5h bWUpOworCQkJfQorCisJCQkvKiByZXBsaWNhIGlkZW50aXR5IGNvbHVtbiwgbm90IGNvdmVy ZWQgYnkgdGhlIGNvbHVtbiBsaXN0ICovCisJCQlpZiAoIWJtc19pc19tZW1iZXIoYXR0bnVt LCBjb2x1bW5zKSkKKwkJCXsKKwkJCQlyZXN1bHQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJ fQorCQl9CisKKwkJYm1zX2ZyZWUoaWRhdHRycyk7CisJCWJtc19mcmVlKGNvbHVtbnMpOwor CX0KKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQor CiAvKiBjaGVja19mdW5jdGlvbnNfaW5fbm9kZSBjYWxsYmFjayAqLwogc3RhdGljIGJvb2wK IGNvbnRhaW5fbXV0YWJsZV9vcl91c2VyX2Z1bmN0aW9uc19jaGVja2VyKE9pZCBmdW5jX2lk LCB2b2lkICpjb250ZXh0KQpAQCAtNjA5LDYgKzcxNyw0NSBAQCBUcmFuc2Zvcm1QdWJXaGVy ZUNsYXVzZXMoTGlzdCAqdGFibGVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIAl9CiB9 CiAKKworLyoKKyAqIFRyYW5zZm9ybSB0aGUgcHVibGljYXRpb24gY29sdW1uIGxpc3RzIGV4 cHJlc3Npb24gZm9yIGFsbCB0aGUgcmVsYXRpb25zCisgKiBpbiB0aGUgbGlzdC4KKyAqCisg KiBYWFggVGhlIG5hbWUgaXMgYSBiaXQgbWlzbGVhZGluZywgYmVjYXVzZSB3ZSBkb24ndCBy ZWFsbHkgdHJhbnNmb3JtCisgKiBhbnl0aGluZyBoZXJlIC0gd2UgbWVyZWx5IGNoZWNrIHRo ZSBjb2x1bW4gbGlzdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlCisgKiBkZWZpbml0aW9uIG9m IHRoZSBwdWJsaWNhdGlvbiAod2l0aCBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdD1mYWxz ZSkKKyAqIHdlIG9ubHkgYWxsb3cgY29sdW1uIGxpc3RzIG9uIHRoZSBsZWFmIHJlbGF0aW9u cy4gU28gbWF5YmUgcmVuYW1lIGl0PworICovCitzdGF0aWMgdm9pZAorVHJhbnNmb3JtUHVi Q29sdW1uTGlzdChMaXN0ICp0YWJsZXMsIGNvbnN0IGNoYXIgKnF1ZXJ5U3RyaW5nLAorCQkJ CQkgICBib29sIHB1YnZpYXJvb3QpCit7CisJTGlzdENlbGwgICAqbGM7CisKKwlmb3JlYWNo KGxjLCB0YWJsZXMpCisJeworCQlQdWJsaWNhdGlvblJlbEluZm8gKnByaSA9IChQdWJsaWNh dGlvblJlbEluZm8gKikgbGZpcnN0KGxjKTsKKworCQlpZiAocHJpLT5jb2x1bW5zID09IE5J TCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIElmIHRoZSBwdWJsaWNhdGlvbiBkb2Vz bid0IHB1Ymxpc2ggY2hhbmdlcyB2aWEgdGhlIHJvb3QgcGFydGl0aW9uZWQKKwkJICogdGFi bGUsIHRoZSBwYXJ0aXRpb24ncyBjb2x1bW4gbGlzdCB3aWxsIGJlIHVzZWQuIFNvIGRpc2Fs bG93IHVzaW5nCisJCSAqIHRoZSBjb2x1bW4gbGlzdCBvbiBwYXJ0aXRpb25lZCB0YWJsZSBp biB0aGlzIGNhc2UuCisJCSAqLworCQlpZiAoIXB1YnZpYXJvb3QgJiYKKwkJCXByaS0+cmVs YXRpb24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coImNhbm5vdCB1c2UgcHVibGljYXRpb24gY29s dW1uIGxpc3QgZm9yIHJlbGF0aW9uIFwiJXNcIiIsCisJCQkJCQkJUmVsYXRpb25HZXRSZWxh dGlvbk5hbWUocHJpLT5yZWxhdGlvbikpLAorCQkJCQkgZXJyZGV0YWlsKCJjb2x1bW4gbGlz dCBjYW5ub3QgYmUgdXNlZCBmb3IgYSBwYXJ0aXRpb25lZCB0YWJsZSB3aGVuICVzIGlzIGZh bHNlLiIsCisJCQkJCQkJICAgInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IikpKTsKKwl9 Cit9CisKIC8qCiAgKiBDcmVhdGUgbmV3IHB1YmxpY2F0aW9uLgogICovCkBAIC03MjUsNiAr ODcyLDkgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQ dWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCQlUcmFuc2Zvcm1QdWJXaGVyZUNsYXVzZXMocmVs cywgcHN0YXRlLT5wX3NvdXJjZXRleHQsCiAJCQkJCQkJCQkgcHVibGlzaF92aWFfcGFydGl0 aW9uX3Jvb3QpOwogCisJCQlUcmFuc2Zvcm1QdWJDb2x1bW5MaXN0KHJlbHMsIHBzdGF0ZS0+ cF9zb3VyY2V0ZXh0LAorCQkJCQkJCQkgICBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCk7 CisKIAkJCVB1YmxpY2F0aW9uQWRkVGFibGVzKHB1Ym9pZCwgcmVscywgdHJ1ZSwgTlVMTCk7 CiAJCQlDbG9zZVRhYmxlTGlzdChyZWxzKTsKIAkJfQpAQCAtNzg0LDggKzkzNCw4IEBAIEFs dGVyUHVibGljYXRpb25PcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNh dGlvblN0bXQgKnN0bXQsCiAKIAkvKgogCSAqIElmIHRoZSBwdWJsaWNhdGlvbiBkb2Vzbid0 IHB1Ymxpc2ggY2hhbmdlcyB2aWEgdGhlIHJvb3QgcGFydGl0aW9uZWQKLQkgKiB0YWJsZSwg dGhlIHBhcnRpdGlvbidzIHJvdyBmaWx0ZXIgd2lsbCBiZSB1c2VkLiBTbyBkaXNhbGxvdyB1 c2luZyBXSEVSRQotCSAqIGNsYXVzZSBvbiBwYXJ0aXRpb25lZCB0YWJsZSBpbiB0aGlzIGNh c2UuCisJICogdGFibGUsIHRoZSBwYXJ0aXRpb24ncyByb3cgZmlsdGVyIGFuZCBjb2x1bW4g bGlzdCB3aWxsIGJlIHVzZWQuIFNvIGRpc2FsbG93CisJICogdXNpbmcgV0hFUkUgY2xhdXNl IGFuZCBjb2x1bW4gbGlzdHMgb24gcGFydGl0aW9uZWQgdGFibGUgaW4gdGhpcyBjYXNlLgog CSAqLwogCWlmICghcHViZm9ybS0+cHViYWxsdGFibGVzICYmIHB1Ymxpc2hfdmlhX3BhcnRp dGlvbl9yb290X2dpdmVuICYmCiAJCSFwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCkKQEAg LTc5Myw3ICs5NDMsOCBAQCBBbHRlclB1YmxpY2F0aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpw c3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAogCQkvKgogCQkgKiBMb2NrIHRo ZSBwdWJsaWNhdGlvbiBzbyBub2JvZHkgZWxzZSBjYW4gZG8gYW55dGhpbmcgd2l0aCBpdC4g VGhpcwogCQkgKiBwcmV2ZW50cyBjb25jdXJyZW50IGFsdGVyIHRvIGFkZCBwYXJ0aXRpb25l ZCB0YWJsZShzKSB3aXRoIFdIRVJFCi0JCSAqIGNsYXVzZShzKSB3aGljaCB3ZSBkb24ndCBh bGxvdyB3aGVuIG5vdCBwdWJsaXNoaW5nIHZpYSByb290LgorCQkgKiBjbGF1c2UocykgYW5k L29yIGNvbHVtbiBsaXN0cyB3aGljaCB3ZSBkb24ndCBhbGxvdyB3aGVuIG5vdAorCQkgKiBw dWJsaXNoaW5nIHZpYSByb290LgogCQkgKi8KIAkJTG9ja0RhdGFiYXNlT2JqZWN0KFB1Ymxp Y2F0aW9uUmVsYXRpb25JZCwgcHViZm9ybS0+b2lkLCAwLAogCQkJCQkJICAgQWNjZXNzU2hh cmVMb2NrKTsKQEAgLTgwNSwxMyArOTU2LDIxIEBAIEFsdGVyUHVibGljYXRpb25PcHRpb25z KFBhcnNlU3RhdGUgKnBzdGF0ZSwgQWx0ZXJQdWJsaWNhdGlvblN0bXQgKnN0bXQsCiAJCXsK IAkJCUhlYXBUdXBsZQlyZnR1cGxlOwogCQkJT2lkCQkJcmVsaWQgPSBsZmlyc3Rfb2lkKGxj KTsKKwkJCWJvb2wJCWhhc19jb2x1bW5fbGlzdDsKKwkJCWJvb2wJCWhhc19yb3dfZmlsdGVy OwogCiAJCQlyZnR1cGxlID0gU2VhcmNoU3lzQ2FjaGUyKFBVQkxJQ0FUSU9OUkVMTUFQLAog CQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHJlbGlkKSwKIAkJCQkJCQkJCSAgT2JqZWN0 SWRHZXREYXR1bShwdWJmb3JtLT5vaWQpKTsKIAorCQkJaGFzX3Jvd19maWx0ZXIKKwkJCQk9 ICFoZWFwX2F0dGlzbnVsbChyZnR1cGxlLCBBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcnF1 YWwsIE5VTEwpOworCisJCQloYXNfY29sdW1uX2xpc3QKKwkJCQk9ICFoZWFwX2F0dGlzbnVs bChyZnR1cGxlLCBBbnVtX3BnX3B1YmxpY2F0aW9uX3JlbF9wcmF0dHJzLCBOVUxMKTsKKwog CQkJaWYgKEhlYXBUdXBsZUlzVmFsaWQocmZ0dXBsZSkgJiYKLQkJCQkhaGVhcF9hdHRpc251 bGwocmZ0dXBsZSwgQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJxdWFsLCBOVUxMKSkKKwkJ CQkoaGFzX3Jvd19maWx0ZXIgfHwgaGFzX2NvbHVtbl9saXN0KSkKIAkJCXsKIAkJCQlIZWFw VHVwbGUJdHVwbGU7CiAKQEAgLTgyMCw3ICs5NzksOCBAQCBBbHRlclB1YmxpY2F0aW9uT3B0 aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LAog CQkJCXsKIAkJCQkJRm9ybV9wZ19jbGFzcyByZWxmb3JtID0gKEZvcm1fcGdfY2xhc3MpIEdF VFNUUlVDVCh0dXBsZSk7CiAKLQkJCQkJaWYgKHJlbGZvcm0tPnJlbGtpbmQgPT0gUkVMS0lO RF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCQkJaWYgKChyZWxmb3JtLT5yZWxraW5kID09IFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEUpICYmCisJCQkJCQloYXNfcm93X2ZpbHRlcikKIAkJ CQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAogCQkJCQkJCQkgZXJybXNnKCJjYW5ub3Qgc2V0ICVzIGZvciBw dWJsaWNhdGlvbiBcIiVzXCIiLApAQCAtODMxLDYgKzk5MSwxOCBAQCBBbHRlclB1YmxpY2F0 aW9uT3B0aW9ucyhQYXJzZVN0YXRlICpwc3RhdGUsIEFsdGVyUHVibGljYXRpb25TdG10ICpz dG10LAogCQkJCQkJCQkJCSAgIE5hbWVTdHIocmVsZm9ybS0+cmVsbmFtZSksCiAJCQkJCQkJ CQkJICAgInB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IikpKTsKIAorCQkJCQlpZiAoKHJl bGZvcm0tPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkgJiYKKwkJCQkJ CWhhc19jb2x1bW5fbGlzdCkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkJCQkgZXJybXNn KCJjYW5ub3Qgc2V0ICVzIGZvciBwdWJsaWNhdGlvbiBcIiVzXCIiLAorCQkJCQkJCQkJCSJw dWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlIiwKKwkJCQkJCQkJCQlzdG10LT5w dWJuYW1lKSwKKwkJCQkJCQkJIGVycmRldGFpbCgiVGhlIHB1YmxpY2F0aW9uIGNvbnRhaW5z IGEgY29sdW1uIGxpc3QgZm9yIGEgcGFydGl0aW9uZWQgdGFibGUgXCIlc1wiICIKKwkJCQkJ CQkJCQkgICAid2hpY2ggaXMgbm90IGFsbG93ZWQgd2hlbiAlcyBpcyBmYWxzZS4iLAorCQkJ CQkJCQkJCSAgIE5hbWVTdHIocmVsZm9ybS0+cmVsbmFtZSksCisJCQkJCQkJCQkJICAgInB1 Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IikpKTsKKwogCQkJCQlSZWxlYXNlU3lzQ2FjaGUo dHVwbGUpOwogCQkJCX0KIApAQCAtOTc2LDYgKzExNDgsOCBAQCBBbHRlclB1YmxpY2F0aW9u VGFibGVzKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBIZWFwVHVwbGUgdHVwLAogCiAJ CVRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhyZWxzLCBxdWVyeVN0cmluZywgcHViZm9ybS0+ cHVidmlhcm9vdCk7CiAKKwkJVHJhbnNmb3JtUHViQ29sdW1uTGlzdChyZWxzLCBxdWVyeVN0 cmluZywgcHViZm9ybS0+cHVidmlhcm9vdCk7CisKIAkJUHVibGljYXRpb25BZGRUYWJsZXMo cHViaWQsIHJlbHMsIGZhbHNlLCBzdG10KTsKIAl9CiAJZWxzZSBpZiAoc3RtdC0+YWN0aW9u ID09IEFQX0Ryb3BPYmplY3RzKQpAQCAtOTkyLDYgKzExNjYsOCBAQCBBbHRlclB1YmxpY2F0 aW9uVGFibGVzKEFsdGVyUHVibGljYXRpb25TdG10ICpzdG10LCBIZWFwVHVwbGUgdHVwLAog CiAJCVRyYW5zZm9ybVB1YldoZXJlQ2xhdXNlcyhyZWxzLCBxdWVyeVN0cmluZywgcHViZm9y bS0+cHVidmlhcm9vdCk7CiAKKwkJVHJhbnNmb3JtUHViQ29sdW1uTGlzdChyZWxzLCBxdWVy eVN0cmluZywgcHViZm9ybS0+cHVidmlhcm9vdCk7CisKIAkJLyoKIAkJICogVG8gcmVjcmVh dGUgdGhlIHJlbGF0aW9uIGxpc3QgZm9yIHRoZSBwdWJsaWNhdGlvbiwgbG9vayBmb3IKIAkJ ICogZXhpc3RpbmcgcmVsYXRpb25zIHRoYXQgZG8gbm90IG5lZWQgdG8gYmUgZHJvcHBlZC4K QEAgLTEwMDMsNDIgKzExNzksNzkgQEAgQWx0ZXJQdWJsaWNhdGlvblRhYmxlcyhBbHRlclB1 YmxpY2F0aW9uU3RtdCAqc3RtdCwgSGVhcFR1cGxlIHR1cCwKIAkJCVB1YmxpY2F0aW9uUmVs SW5mbyAqb2xkcmVsOwogCQkJYm9vbAkJZm91bmQgPSBmYWxzZTsKIAkJCUhlYXBUdXBsZQly ZnR1cGxlOwotCQkJYm9vbAkJcmZpc251bGwgPSB0cnVlOwogCQkJTm9kZQkgICAqb2xkcmVs d2hlcmVjbGF1c2UgPSBOVUxMOworCQkJQml0bWFwc2V0ICAqb2xkY29sdW1ucyA9IE5VTEw7 CiAKIAkJCS8qIGxvb2sgdXAgdGhlIGNhY2hlIGZvciB0aGUgb2xkIHJlbG1hcCAqLwogCQkJ cmZ0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMihQVUJMSUNBVElPTlJFTE1BUCwKIAkJCQkJCQkJ CSAgT2JqZWN0SWRHZXREYXR1bShvbGRyZWxpZCksCiAJCQkJCQkJCQkgIE9iamVjdElkR2V0 RGF0dW0ocHViaWQpKTsKIAorCQkJLyoKKwkJCSAqIFNlZSBpZiB0aGUgZXhpc3RpbmcgcmVs YXRpb24gY3VycmVudGx5IGhhcyBhIFdIRVJFIGNsYXVzZSBvciBhCisJCQkgKiBjb2x1bW4g bGlzdC4gV2UgbmVlZCB0byBjb21wYXJlIHRob3NlIHRvby4KKwkJCSAqLwogCQkJaWYgKEhl YXBUdXBsZUlzVmFsaWQocmZ0dXBsZSkpCiAJCQl7CisJCQkJYm9vbAkJaXNudWxsID0gdHJ1 ZTsKIAkJCQlEYXR1bQkJd2hlcmVDbGF1c2VEYXR1bTsKKwkJCQlEYXR1bQkJY29sdW1uTGlz dERhdHVtOwogCisJCQkJLyogTG9hZCB0aGUgV0hFUkUgY2xhdXNlIGZvciB0aGlzIHRhYmxl LiAqLwogCQkJCXdoZXJlQ2xhdXNlRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUFVCTElDQVRJ T05SRUxNQVAsIHJmdHVwbGUsCiAJCQkJCQkJCQkJCQkgICBBbnVtX3BnX3B1YmxpY2F0aW9u X3JlbF9wcnF1YWwsCi0JCQkJCQkJCQkJCQkgICAmcmZpc251bGwpOwotCQkJCWlmICghcmZp c251bGwpCisJCQkJCQkJCQkJCQkgICAmaXNudWxsKTsKKwkJCQlpZiAoIWlzbnVsbCkKIAkJ CQkJb2xkcmVsd2hlcmVjbGF1c2UgPSBzdHJpbmdUb05vZGUoVGV4dERhdHVtR2V0Q1N0cmlu Zyh3aGVyZUNsYXVzZURhdHVtKSk7CiAKKwkJCQkvKiBUcmFuc2Zvcm0gdGhlIGludDJ2ZWN0 b3IgY29sdW1uIGxpc3QgdG8gYSBiaXRtYXAuICovCisJCQkJY29sdW1uTGlzdERhdHVtID0g U3lzQ2FjaGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVMTUFQLCByZnR1cGxlLAorCQkJCQkJCQkJ CQkJICAgQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycywKKwkJCQkJCQkJCQkJCSAg ICZpc251bGwpOworCisJCQkJaWYgKCFpc251bGwpCisJCQkJCW9sZGNvbHVtbnMgPSBwdWJf Y29sbGlzdF90b19iaXRtYXBzZXQoTlVMTCwgY29sdW1uTGlzdERhdHVtLCBOVUxMKTsKKwog CQkJCVJlbGVhc2VTeXNDYWNoZShyZnR1cGxlKTsKIAkJCX0KIAogCQkJZm9yZWFjaChuZXds YywgcmVscykKIAkJCXsKIAkJCQlQdWJsaWNhdGlvblJlbEluZm8gKm5ld3B1YnJlbDsKKwkJ CQlPaWQJCQkJCW5ld3JlbGlkOworCQkJCUJpdG1hcHNldAkJICAgKm5ld2NvbHVtbnMgPSBO VUxMOwogCiAJCQkJbmV3cHVicmVsID0gKFB1YmxpY2F0aW9uUmVsSW5mbyAqKSBsZmlyc3Qo bmV3bGMpOworCQkJCW5ld3JlbGlkID0gUmVsYXRpb25HZXRSZWxpZChuZXdwdWJyZWwtPnJl bGF0aW9uKTsKKworCQkJCS8qCisJCQkJICogSWYgdGhlIG5ldyBwdWJsaWNhdGlvbiBoYXMg Y29sdW1uIGxpc3QsIHRyYW5zZm9ybSBpdCB0bworCQkJCSAqIGEgYml0bWFwIHRvby4KKwkJ CQkgKi8KKwkJCQlpZiAobmV3cHVicmVsLT5jb2x1bW5zKQorCQkJCXsKKwkJCQkJTGlzdENl bGwgICAqbGM7CisKKwkJCQkJZm9yZWFjaChsYywgbmV3cHVicmVsLT5jb2x1bW5zKQorCQkJ CQl7CisJCQkJCQljaGFyCSAgICpjb2xuYW1lID0gc3RyVmFsKGxmaXJzdChsYykpOworCQkJ CQkJQXR0ck51bWJlcglhdHRudW0gPSBnZXRfYXR0bnVtKG5ld3JlbGlkLCBjb2xuYW1lKTsK KworCQkJCQkJbmV3Y29sdW1ucyA9IGJtc19hZGRfbWVtYmVyKG5ld2NvbHVtbnMsIGF0dG51 bSk7CisJCQkJCX0KKwkJCQl9CiAKIAkJCQkvKgogCQkJCSAqIENoZWNrIGlmIGFueSBvZiB0 aGUgbmV3IHNldCBvZiByZWxhdGlvbnMgbWF0Y2hlcyB3aXRoIHRoZQogCQkJCSAqIGV4aXN0 aW5nIHJlbGF0aW9ucyBpbiB0aGUgcHVibGljYXRpb24uIEFkZGl0aW9uYWxseSwgaWYgdGhl CiAJCQkJICogcmVsYXRpb24gaGFzIGFuIGFzc29jaWF0ZWQgV0hFUkUgY2xhdXNlLCBjaGVj ayB0aGUgV0hFUkUKLQkJCQkgKiBleHByZXNzaW9ucyBhbHNvIG1hdGNoLiBEcm9wIHRoZSBy ZXN0LgorCQkJCSAqIGV4cHJlc3Npb25zIGFsc28gbWF0Y2guIFNhbWUgZm9yIHRoZSBjb2x1 bW4gbGlzdC4gRHJvcCB0aGUKKwkJCQkgKiByZXN0LgogCQkJCSAqLwogCQkJCWlmIChSZWxh dGlvbkdldFJlbGlkKG5ld3B1YnJlbC0+cmVsYXRpb24pID09IG9sZHJlbGlkKQogCQkJCXsK LQkJCQkJaWYgKGVxdWFsKG9sZHJlbHdoZXJlY2xhdXNlLCBuZXdwdWJyZWwtPndoZXJlQ2xh dXNlKSkKKwkJCQkJaWYgKGVxdWFsKG9sZHJlbHdoZXJlY2xhdXNlLCBuZXdwdWJyZWwtPndo ZXJlQ2xhdXNlKSAmJgorCQkJCQkJYm1zX2VxdWFsKG9sZGNvbHVtbnMsIG5ld2NvbHVtbnMp KQogCQkJCQl7CiAJCQkJCQlmb3VuZCA9IHRydWU7CiAJCQkJCQlicmVhazsKQEAgLTEwNTcs NiArMTI3MCw3IEBAIEFsdGVyUHVibGljYXRpb25UYWJsZXMoQWx0ZXJQdWJsaWNhdGlvblN0 bXQgKnN0bXQsIEhlYXBUdXBsZSB0dXAsCiAJCQl7CiAJCQkJb2xkcmVsID0gcGFsbG9jKHNp emVvZihQdWJsaWNhdGlvblJlbEluZm8pKTsKIAkJCQlvbGRyZWwtPndoZXJlQ2xhdXNlID0g TlVMTDsKKwkJCQlvbGRyZWwtPmNvbHVtbnMgPSBOSUw7CiAJCQkJb2xkcmVsLT5yZWxhdGlv biA9IHRhYmxlX29wZW4ob2xkcmVsaWQsCiAJCQkJCQkJCQkJCSAgU2hhcmVVcGRhdGVFeGNs dXNpdmVMb2NrKTsKIAkJCQlkZWxyZWxzID0gbGFwcGVuZChkZWxyZWxzLCBvbGRyZWwpOwpA QCAtMTExOCw3ICsxMzMyLDcgQEAgQWx0ZXJQdWJsaWNhdGlvblNjaGVtYXMoQWx0ZXJQdWJs aWNhdGlvblN0bXQgKnN0bXQsCiAJfQogCWVsc2UgaWYgKHN0bXQtPmFjdGlvbiA9PSBBUF9E cm9wT2JqZWN0cykKIAkJUHVibGljYXRpb25Ecm9wU2NoZW1hcyhwdWJmb3JtLT5vaWQsIHNj aGVtYWlkbGlzdCwgZmFsc2UpOwotCWVsc2UJCQkJCQkvKiBBUF9TZXRPYmplY3RzICovCisJ ZWxzZSBpZiAoc3RtdC0+YWN0aW9uID09IEFQX1NldE9iamVjdHMpCiAJewogCQlMaXN0CSAg ICpvbGRzY2hlbWFpZHMgPSBHZXRQdWJsaWNhdGlvblNjaGVtYXMocHViZm9ybS0+b2lkKTsK IAkJTGlzdAkgICAqZGVsc2NoZW1hcyA9IE5JTDsKQEAgLTE0MDMsNiArMTYxNyw3IEBAIE9w ZW5UYWJsZUxpc3QoTGlzdCAqdGFibGVzKQogCUxpc3QJICAgKnJlbHMgPSBOSUw7CiAJTGlz dENlbGwgICAqbGM7CiAJTGlzdAkgICAqcmVsaWRzX3dpdGhfcmYgPSBOSUw7CisJTGlzdAkg ICAqcmVsaWRzX3dpdGhfY29sbGlzdCA9IE5JTDsKIAogCS8qCiAJICogT3Blbiwgc2hhcmUt bG9jaywgYW5kIGNoZWNrIGFsbCB0aGUgZXhwbGljaXRseS1zcGVjaWZpZWQgcmVsYXRpb25z CkBAIC0xNDM3LDYgKzE2NTIsMTMgQEAgT3BlblRhYmxlTGlzdChMaXN0ICp0YWJsZXMpCiAJ CQkJCQkgZXJybXNnKCJjb25mbGljdGluZyBvciByZWR1bmRhbnQgV0hFUkUgY2xhdXNlcyBm b3IgdGFibGUgXCIlc1wiIiwKIAkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVs KSkpKTsKIAorCQkJLyogRGlzYWxsb3cgZHVwbGljYXRlIHRhYmxlcyBpZiB0aGVyZSBhcmUg YW55IHdpdGggY29sdW1uIGxpc3RzLiAqLworCQkJaWYgKHQtPmNvbHVtbnMgfHwgbGlzdF9t ZW1iZXJfb2lkKHJlbGlkc193aXRoX2NvbGxpc3QsIG15cmVsaWQpKQorCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0RVUExJQ0FURV9PQkpFQ1QpLAorCQkJ CQkJIGVycm1zZygiY29uZmxpY3Rpbmcgb3IgcmVkdW5kYW50IGNvbHVtbiBsaXN0cyBmb3Ig dGFibGUgXCIlc1wiIiwKKwkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkp KTsKKwogCQkJdGFibGVfY2xvc2UocmVsLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOwog CQkJY29udGludWU7CiAJCX0KQEAgLTE0NDQsMTIgKzE2NjYsMTYgQEAgT3BlblRhYmxlTGlz dChMaXN0ICp0YWJsZXMpCiAJCXB1Yl9yZWwgPSBwYWxsb2Moc2l6ZW9mKFB1YmxpY2F0aW9u UmVsSW5mbykpOwogCQlwdWJfcmVsLT5yZWxhdGlvbiA9IHJlbDsKIAkJcHViX3JlbC0+d2hl cmVDbGF1c2UgPSB0LT53aGVyZUNsYXVzZTsKKwkJcHViX3JlbC0+Y29sdW1ucyA9IHQtPmNv bHVtbnM7CiAJCXJlbHMgPSBsYXBwZW5kKHJlbHMsIHB1Yl9yZWwpOwogCQlyZWxpZHMgPSBs YXBwZW5kX29pZChyZWxpZHMsIG15cmVsaWQpOwogCiAJCWlmICh0LT53aGVyZUNsYXVzZSkK IAkJCXJlbGlkc193aXRoX3JmID0gbGFwcGVuZF9vaWQocmVsaWRzX3dpdGhfcmYsIG15cmVs aWQpOwogCisJCWlmICh0LT5jb2x1bW5zKQorCQkJcmVsaWRzX3dpdGhfY29sbGlzdCA9IGxh cHBlbmRfb2lkKHJlbGlkc193aXRoX2NvbGxpc3QsIG15cmVsaWQpOworCiAJCS8qCiAJCSAq IEFkZCBjaGlsZHJlbiBvZiB0aGlzIHJlbCwgaWYgcmVxdWVzdGVkLCBzbyB0aGF0IHRoZXkg dG9vIGFyZSBhZGRlZAogCQkgKiB0byB0aGUgcHVibGljYXRpb24uICBBIHBhcnRpdGlvbmVk IHRhYmxlIGNhbid0IGhhdmUgYW55IGluaGVyaXRhbmNlCkBAIC0xNDg5LDYgKzE3MTUsMTgg QEAgT3BlblRhYmxlTGlzdChMaXN0ICp0YWJsZXMpCiAJCQkJCQkJCSBlcnJtc2coImNvbmZs aWN0aW5nIG9yIHJlZHVuZGFudCBXSEVSRSBjbGF1c2VzIGZvciB0YWJsZSBcIiVzXCIiLAog CQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CiAKKwkJCQkJLyoK KwkJCQkJICogV2UgZG9uJ3QgYWxsb3cgdG8gc3BlY2lmeSBjb2x1bW4gbGlzdCBmb3IgYm90 aCBwYXJlbnQKKwkJCQkJICogYW5kIGNoaWxkIHRhYmxlIGF0IHRoZSBzYW1lIHRpbWUgYXMg aXQgaXMgbm90IHZlcnkKKwkJCQkJICogY2xlYXIgd2hpY2ggb25lIHNob3VsZCBiZSBnaXZl biBwcmVmZXJlbmNlLgorCQkJCQkgKi8KKwkJCQkJaWYgKGNoaWxkcmVsaWQgIT0gbXlyZWxp ZCAmJgorCQkJCQkJKHQtPmNvbHVtbnMgfHwgbGlzdF9tZW1iZXJfb2lkKHJlbGlkc193aXRo X2NvbGxpc3QsIGNoaWxkcmVsaWQpKSkKKwkJCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkJ CShlcnJjb2RlKEVSUkNPREVfRFVQTElDQVRFX09CSkVDVCksCisJCQkJCQkJCSBlcnJtc2co ImNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBjb2x1bW4gbGlzdHMgZm9yIHRhYmxlIFwiJXNc IiIsCisJCQkJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKTsKKwogCQkJ CQljb250aW51ZTsKIAkJCQl9CiAKQEAgLTE0OTgsMTEgKzE3MzYsMTYgQEAgT3BlblRhYmxl TGlzdChMaXN0ICp0YWJsZXMpCiAJCQkJcHViX3JlbC0+cmVsYXRpb24gPSByZWw7CiAJCQkJ LyogY2hpbGQgaW5oZXJpdHMgV0hFUkUgY2xhdXNlIGZyb20gcGFyZW50ICovCiAJCQkJcHVi X3JlbC0+d2hlcmVDbGF1c2UgPSB0LT53aGVyZUNsYXVzZTsKKwkJCQkvKiBjaGlsZCBpbmhl cml0cyBjb2x1bW4gbGlzdCBmcm9tIHBhcmVudCAqLworCQkJCXB1Yl9yZWwtPmNvbHVtbnMg PSB0LT5jb2x1bW5zOwogCQkJCXJlbHMgPSBsYXBwZW5kKHJlbHMsIHB1Yl9yZWwpOwogCQkJ CXJlbGlkcyA9IGxhcHBlbmRfb2lkKHJlbGlkcywgY2hpbGRyZWxpZCk7CiAKIAkJCQlpZiAo dC0+d2hlcmVDbGF1c2UpCiAJCQkJCXJlbGlkc193aXRoX3JmID0gbGFwcGVuZF9vaWQocmVs aWRzX3dpdGhfcmYsIGNoaWxkcmVsaWQpOworCisJCQkJaWYgKHQtPmNvbHVtbnMpCisJCQkJ CXJlbGlkc193aXRoX2NvbGxpc3QgPSBsYXBwZW5kX29pZChyZWxpZHNfd2l0aF9jb2xsaXN0 LCBjaGlsZHJlbGlkKTsKIAkJCX0KIAkJfQogCX0KQEAgLTE2MTEsNiArMTg1NCwxMSBAQCBQ dWJsaWNhdGlvbkRyb3BUYWJsZXMoT2lkIHB1YmlkLCBMaXN0ICpyZWxzLCBib29sIG1pc3Np bmdfb2spCiAJCVJlbGF0aW9uCXJlbCA9IHB1YnJlbC0+cmVsYXRpb247CiAJCU9pZAkJCXJl bGlkID0gUmVsYXRpb25HZXRSZWxpZChyZWwpOwogCisJCWlmIChwdWJyZWwtPmNvbHVtbnMp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9S KSwKKwkJCQkJZXJybXNnKCJjb2x1bW4gbGlzdCBtdXN0IG5vdCBiZSBzcGVjaWZpZWQgaW4g QUxURVIgUFVCTElDQVRJT04gLi4uIERST1AiKSk7CisKIAkJcHJpZCA9IEdldFN5c0NhY2hl T2lkMihQVUJMSUNBVElPTlJFTE1BUCwgQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfb2lkLAog CQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ocmVsaWQpLAogCQkJCQkJCSAgIE9iamVjdElk R2V0RGF0dW0ocHViaWQpKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNSZXBsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9u LmMKaW5kZXggMDlmNzhmMjI0NDEuLjNlMjgyZWQ5OWFiIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjUmVwbGljYXRpb24uYwpAQCAtNTczLDkgKzU3Myw2IEBAIENoZWNrQ21kUmVw bGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbCwgQ21kVHlwZSBjbWQpCiAJaWYgKGNtZCAhPSBD TURfVVBEQVRFICYmIGNtZCAhPSBDTURfREVMRVRFKQogCQlyZXR1cm47CiAKLQlpZiAocmVs LT5yZF9yZWwtPnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0ZVTEwpCi0JCXJl dHVybjsKLQogCS8qCiAJICogSXQgaXMgb25seSBzYWZlIHRvIGV4ZWN1dGUgVVBEQVRFL0RF TEVURSB3aGVuIGFsbCBjb2x1bW5zLCByZWZlcmVuY2VkCiAJICogaW4gdGhlIHJvdyBmaWx0 ZXJzIGZyb20gcHVibGljYXRpb25zIHdoaWNoIHRoZSByZWxhdGlvbiBpcyBpbiwgYXJlCkBA IC01OTUsMTcgKzU5MiwzMyBAQCBDaGVja0NtZFJlcGxpY2FJZGVudGl0eShSZWxhdGlvbiBy ZWwsIENtZFR5cGUgY21kKQogCQkJCSBlcnJtc2coImNhbm5vdCB1cGRhdGUgdGFibGUgXCIl c1wiIiwKIAkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpLAogCQkJCSBlcnJk ZXRhaWwoIkNvbHVtbiB1c2VkIGluIHRoZSBwdWJsaWNhdGlvbiBXSEVSRSBleHByZXNzaW9u IGlzIG5vdCBwYXJ0IG9mIHRoZSByZXBsaWNhIGlkZW50aXR5LiIpKSk7CisJZWxzZSBpZiAo Y21kID09IENNRF9VUERBVEUgJiYgIXB1YmRlc2MuY29sc192YWxpZF9mb3JfdXBkYXRlKQor CQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9DT0xVTU5f UkVGRVJFTkNFKSwKKwkJCQkgZXJybXNnKCJjYW5ub3QgdXBkYXRlIHRhYmxlIFwiJXNcIiIs CisJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSwKKwkJCQkgZXJyZGV0YWls KCJDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0 aGUgcmVwbGljYSBpZGVudGl0eS4iKSkpOwogCWVsc2UgaWYgKGNtZCA9PSBDTURfREVMRVRF ICYmICFwdWJkZXNjLnJmX3ZhbGlkX2Zvcl9kZWxldGUpCiAJCWVyZXBvcnQoRVJST1IsCiAJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0UpLAogCQkJCSBl cnJtc2coImNhbm5vdCBkZWxldGUgZnJvbSB0YWJsZSBcIiVzXCIiLAogCQkJCQkJUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsKSksCiAJCQkJIGVycmRldGFpbCgiQ29sdW1uIHVzZWQg aW4gdGhlIHB1YmxpY2F0aW9uIFdIRVJFIGV4cHJlc3Npb24gaXMgbm90IHBhcnQgb2YgdGhl IHJlcGxpY2EgaWRlbnRpdHkuIikpKTsKKwllbHNlIGlmIChjbWQgPT0gQ01EX0RFTEVURSAm JiAhcHViZGVzYy5jb2xzX3ZhbGlkX2Zvcl9kZWxldGUpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0UpLAorCQkJCSBl cnJtc2coImNhbm5vdCBkZWxldGUgZnJvbSB0YWJsZSBcIiVzXCIiLAorCQkJCQkJUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsKSksCisJCQkJIGVycmRldGFpbCgiQ29sdW1uIGxpc3Qg dXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRl bnRpdHkuIikpKTsKIAogCS8qIElmIHJlbGF0aW9uIGhhcyByZXBsaWNhIGlkZW50aXR5IHdl IGFyZSBhbHdheXMgZ29vZC4gKi8KIAlpZiAoT2lkSXNWYWxpZChSZWxhdGlvbkdldFJlcGxp Y2FJbmRleChyZWwpKSkKIAkJcmV0dXJuOwogCisJLyogUkVQTElDQSBJREVOVElUWSBGVUxM IGlzIGFsc28gZ29vZCBmb3IgVVBEQVRFL0RFTEVURS4gKi8KKwlpZiAocmVsLT5yZF9yZWwt PnJlbHJlcGxpZGVudCA9PSBSRVBMSUNBX0lERU5USVRZX0ZVTEwpCisJCXJldHVybjsKKwog CS8qCiAJICogVGhpcyBpcyBVUERBVEUvREVMRVRFIGFuZCB0aGVyZSBpcyBubyByZXBsaWNh IGlkZW50aXR5LgogCSAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9jb3B5ZnVu Y3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCmluZGV4IGQ0Zjg0NTVhMmJk Li5hNTA0NDM3ODczZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNz LmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMKQEAgLTQ4NTAsNiArNDg1 MCw3IEBAIF9jb3B5UHVibGljYXRpb25UYWJsZShjb25zdCBQdWJsaWNhdGlvblRhYmxlICpm cm9tKQogCiAJQ09QWV9OT0RFX0ZJRUxEKHJlbGF0aW9uKTsKIAlDT1BZX05PREVfRklFTEQo d2hlcmVDbGF1c2UpOworCUNPUFlfTk9ERV9GSUVMRChjb2x1bW5zKTsKIAogCXJldHVybiBu ZXdub2RlOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5j IGIvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jCmluZGV4IGYxMDAyYWZlN2EwLi40 ZmMxNmNlMDRlMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5j CisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwpAQCAtMjMyMiw2ICsyMzIy LDcgQEAgX2VxdWFsUHVibGljYXRpb25UYWJsZShjb25zdCBQdWJsaWNhdGlvblRhYmxlICph LCBjb25zdCBQdWJsaWNhdGlvblRhYmxlICpiKQogewogCUNPTVBBUkVfTk9ERV9GSUVMRChy ZWxhdGlvbik7CiAJQ09NUEFSRV9OT0RFX0ZJRUxEKHdoZXJlQ2xhdXNlKTsKKwlDT01QQVJF X05PREVfRklFTEQoY29sdW1ucyk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55 CmluZGV4IGEwM2IzM2I1M2JkLi5mZjQ1NzMzOTBjNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcGFyc2VyL2dyYW0ueQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC05 NzUxLDEzICs5NzUxLDE0IEBAIENyZWF0ZVB1YmxpY2F0aW9uU3RtdDoKICAqIHJlbGF0aW9u X2V4cHIgaGVyZS4KICAqLwogUHVibGljYXRpb25PYmpTcGVjOgotCQkJVEFCTEUgcmVsYXRp b25fZXhwciBPcHRXaGVyZUNsYXVzZQorCQkJVEFCTEUgcmVsYXRpb25fZXhwciBvcHRfY29s dW1uX2xpc3QgT3B0V2hlcmVDbGF1c2UKIAkJCQl7CiAJCQkJCSQkID0gbWFrZU5vZGUoUHVi bGljYXRpb25PYmpTcGVjKTsKIAkJCQkJJCQtPnB1Ym9ianR5cGUgPSBQVUJMSUNBVElPTk9C Sl9UQUJMRTsKIAkJCQkJJCQtPnB1YnRhYmxlID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJs ZSk7CiAJCQkJCSQkLT5wdWJ0YWJsZS0+cmVsYXRpb24gPSAkMjsKLQkJCQkJJCQtPnB1YnRh YmxlLT53aGVyZUNsYXVzZSA9ICQzOworCQkJCQkkJC0+cHVidGFibGUtPmNvbHVtbnMgPSAk MzsKKwkJCQkJJCQtPnB1YnRhYmxlLT53aGVyZUNsYXVzZSA9ICQ0OwogCQkJCX0KIAkJCXwg QUxMIFRBQkxFUyBJTl9QIFNDSEVNQSBDb2xJZAogCQkJCXsKQEAgLTk3NzIsMTEgKzk3NzMs MTUgQEAgUHVibGljYXRpb25PYmpTcGVjOgogCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBVQkxJ Q0FUSU9OT0JKX1RBQkxFU19JTl9DVVJfU0NIRU1BOwogCQkJCQkkJC0+bG9jYXRpb24gPSBA NTsKIAkJCQl9Ci0JCQl8IENvbElkIE9wdFdoZXJlQ2xhdXNlCisJCQl8IENvbElkIG9wdF9j b2x1bW5fbGlzdCBPcHRXaGVyZUNsYXVzZQogCQkJCXsKIAkJCQkJJCQgPSBtYWtlTm9kZShQ dWJsaWNhdGlvbk9ialNwZWMpOwogCQkJCQkkJC0+cHVib2JqdHlwZSA9IFBVQkxJQ0FUSU9O T0JKX0NPTlRJTlVBVElPTjsKLQkJCQkJaWYgKCQyKQorCQkJCQkvKgorCQkJCQkgKiBJZiBl aXRoZXIgYSByb3cgZmlsdGVyIG9yIGNvbHVtbiBsaXN0IGlzIHNwZWNpZmllZCwgY3JlYXRl CisJCQkJCSAqIGEgUHVibGljYXRpb25UYWJsZSBvYmplY3QuCisJCQkJCSAqLworCQkJCQlp ZiAoJDIgfHwgJDMpCiAJCQkJCXsKIAkJCQkJCS8qCiAJCQkJCQkgKiBUaGUgT3B0V2hlcmVD bGF1c2UgbXVzdCBiZSBzdG9yZWQgaGVyZSBidXQgaXQgaXMKQEAgLTk3ODYsNyArOTc5MSw4 IEBAIFB1YmxpY2F0aW9uT2JqU3BlYzoKIAkJCQkJCSAqLwogCQkJCQkJJCQtPnB1YnRhYmxl ID0gbWFrZU5vZGUoUHVibGljYXRpb25UYWJsZSk7CiAJCQkJCQkkJC0+cHVidGFibGUtPnJl bGF0aW9uID0gbWFrZVJhbmdlVmFyKE5VTEwsICQxLCBAMSk7Ci0JCQkJCQkkJC0+cHVidGFi bGUtPndoZXJlQ2xhdXNlID0gJDI7CisJCQkJCQkkJC0+cHVidGFibGUtPmNvbHVtbnMgPSAk MjsKKwkJCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2UgPSAkMzsKIAkJCQkJfQogCQkJ CQllbHNlCiAJCQkJCXsKQEAgLTk3OTQsMjMgKzk4MDAsMjUgQEAgUHVibGljYXRpb25PYmpT cGVjOgogCQkJCQl9CiAJCQkJCSQkLT5sb2NhdGlvbiA9IEAxOwogCQkJCX0KLQkJCXwgQ29s SWQgaW5kaXJlY3Rpb24gT3B0V2hlcmVDbGF1c2UKKwkJCXwgQ29sSWQgaW5kaXJlY3Rpb24g b3B0X2NvbHVtbl9saXN0IE9wdFdoZXJlQ2xhdXNlCiAJCQkJewogCQkJCQkkJCA9IG1ha2VO b2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CiAJCQkJCSQkLT5wdWJvYmp0eXBlID0gUFVCTElD QVRJT05PQkpfQ09OVElOVUFUSU9OOwogCQkJCQkkJC0+cHVidGFibGUgPSBtYWtlTm9kZShQ dWJsaWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1YnRhYmxlLT5yZWxhdGlvbiA9IG1ha2VS YW5nZVZhckZyb21RdWFsaWZpZWROYW1lKCQxLCAkMiwgQDEsIHl5c2Nhbm5lcik7Ci0JCQkJ CSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2UgPSAkMzsKKwkJCQkJJCQtPnB1YnRhYmxlLT5j b2x1bW5zID0gJDM7CisJCQkJCSQkLT5wdWJ0YWJsZS0+d2hlcmVDbGF1c2UgPSAkNDsKIAkJ CQkJJCQtPmxvY2F0aW9uID0gQDE7CiAJCQkJfQogCQkJLyogZ3JhbW1hciBsaWtlIHRhYmxl bmFtZSAqICwgT05MWSB0YWJsZW5hbWUsIE9OTFkgKCB0YWJsZW5hbWUgKSAqLwotCQkJfCBl eHRlbmRlZF9yZWxhdGlvbl9leHByIE9wdFdoZXJlQ2xhdXNlCisJCQl8IGV4dGVuZGVkX3Jl bGF0aW9uX2V4cHIgb3B0X2NvbHVtbl9saXN0IE9wdFdoZXJlQ2xhdXNlCiAJCQkJewogCQkJ CQkkJCA9IG1ha2VOb2RlKFB1YmxpY2F0aW9uT2JqU3BlYyk7CiAJCQkJCSQkLT5wdWJvYmp0 eXBlID0gUFVCTElDQVRJT05PQkpfQ09OVElOVUFUSU9OOwogCQkJCQkkJC0+cHVidGFibGUg PSBtYWtlTm9kZShQdWJsaWNhdGlvblRhYmxlKTsKIAkJCQkJJCQtPnB1YnRhYmxlLT5yZWxh dGlvbiA9ICQxOwotCQkJCQkkJC0+cHVidGFibGUtPndoZXJlQ2xhdXNlID0gJDI7CisJCQkJ CSQkLT5wdWJ0YWJsZS0+Y29sdW1ucyA9ICQyOworCQkJCQkkJC0+cHVidGFibGUtPndoZXJl Q2xhdXNlID0gJDM7CiAJCQkJfQogCQkJfCBDVVJSRU5UX1NDSEVNQQogCQkJCXsKQEAgLTE3 NDg4LDYgKzE3NDk2LDEzIEBAIHByZXByb2Nlc3NfcHVib2JqX2xpc3QoTGlzdCAqcHVib2Jq c3BlY19saXN0LCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKIAkJCQkJCWVycm1zZygiV0hF UkUgY2xhdXNlIG5vdCBhbGxvd2VkIGZvciBzY2hlbWEiKSwKIAkJCQkJCXBhcnNlcl9lcnJw b3NpdGlvbihwdWJvYmotPmxvY2F0aW9uKSk7CiAKKwkJCS8qIENvbHVtbiBsaXN0IGlzIG5v dCBhbGxvd2VkIG9uIGEgc2NoZW1hIG9iamVjdCAqLworCQkJaWYgKHB1Ym9iai0+cHVidGFi bGUgJiYgcHVib2JqLT5wdWJ0YWJsZS0+Y29sdW1ucykKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQllcnJtc2coImNv bHVtbiBzcGVjaWZpY2F0aW9uIG5vdCBhbGxvd2VkIGZvciBzY2hlbWEiKSwKKwkJCQkJCXBh cnNlcl9lcnJwb3NpdGlvbihwdWJvYmotPmxvY2F0aW9uKSk7CisKIAkJCS8qCiAJCQkgKiBX ZSBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgZGlmZmVyZW50IHR5cGUgb2Ygc2NoZW1h CiAJCQkgKiBvYmplY3RzIGJhc2VkIG9uIHdoZXRoZXIgbmFtZSBhbmQgcHVidGFibGUgaXMg c2V0LgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90 by5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jCmluZGV4IGM5 YjBlZWVmZDdlLi5mOWRlMWQxNmRjMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9wcm90by5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvcHJvdG8uYwpAQCAtMjksMTYgKzI5LDMwIEBACiAjZGVmaW5lIFRSVU5DQVRFX0NB U0NBREUJCSgxPDwwKQogI2RlZmluZSBUUlVOQ0FURV9SRVNUQVJUX1NFUVMJKDE8PDEpCiAK LXN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfYXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJl bGF0aW9uIHJlbCk7CitzdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dyaXRlX2F0dHJzKFN0cmlu Z0luZm8gb3V0LCBSZWxhdGlvbiByZWwsCisJCQkJCQkJCSAgIEJpdG1hcHNldCAqY29sdW1u cyk7CiBzdGF0aWMgdm9pZCBsb2dpY2FscmVwX3dyaXRlX3R1cGxlKFN0cmluZ0luZm8gb3V0 LCBSZWxhdGlvbiByZWwsCiAJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJ CQkJCQkgICBib29sIGJpbmFyeSk7CisJCQkJCQkJCSAgIGJvb2wgYmluYXJ5LCBCaXRtYXBz ZXQgKmNvbHVtbnMpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF9yZWFkX2F0dHJzKFN0cmlu Z0luZm8gaW4sIExvZ2ljYWxSZXBSZWxhdGlvbiAqcmVsKTsKIHN0YXRpYyB2b2lkIGxvZ2lj YWxyZXBfcmVhZF90dXBsZShTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHVwbGVEYXRhICp0 dXBsZSk7CiAKIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfbmFtZXNwYWNlKFN0cmlu Z0luZm8gb3V0LCBPaWQgbnNwaWQpOwogc3RhdGljIGNvbnN0IGNoYXIgKmxvZ2ljYWxyZXBf cmVhZF9uYW1lc3BhY2UoU3RyaW5nSW5mbyBpbik7CiAKKy8qCisgKiBDaGVjayBpZiBhIGNv bHVtbiBpcyBjb3ZlcmVkIGJ5IGEgY29sdW1uIGxpc3QuCisgKgorICogTmVlZCB0byBiZSBj YXJlZnVsIGFib3V0IE5VTEwsIHdoaWNoIGlzIHRyZWF0ZWQgYXMgYSBjb2x1bW4gbGlzdCBj b3ZlcmluZworICogYWxsIGNvbHVtbnMuCisgKi8KK3N0YXRpYyBib29sCitjb2x1bW5faW5f Y29sdW1uX2xpc3QoaW50IGF0dG51bSwgQml0bWFwc2V0ICpjb2x1bW5zKQoreworCXJldHVy biAoY29sdW1ucyA9PSBOVUxMIHx8IGJtc19pc19tZW1iZXIoYXR0bnVtLCBjb2x1bW5zKSk7 Cit9CisKKwogLyoKICAqIFdyaXRlIEJFR0lOIHRvIHRoZSBvdXRwdXQgc3RyZWFtLgogICov CkBAIC0zOTgsNyArNDEyLDcgQEAgbG9naWNhbHJlcF9yZWFkX29yaWdpbihTdHJpbmdJbmZv IGluLCBYTG9nUmVjUHRyICpvcmlnaW5fbHNuKQogICovCiB2b2lkCiBsb2dpY2FscmVwX3dy aXRlX2luc2VydChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9u IHJlbCwKLQkJCQkJCVR1cGxlVGFibGVTbG90ICpuZXdzbG90LCBib29sIGJpbmFyeSkKKwkJ CQkJCVR1cGxlVGFibGVTbG90ICpuZXdzbG90LCBib29sIGJpbmFyeSwgQml0bWFwc2V0ICpj b2x1bW5zKQogewogCXBxX3NlbmRieXRlKG91dCwgTE9HSUNBTF9SRVBfTVNHX0lOU0VSVCk7 CiAKQEAgLTQxMCw3ICs0MjQsNyBAQCBsb2dpY2FscmVwX3dyaXRlX2luc2VydChTdHJpbmdJ bmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAlwcV9zZW5kaW50 MzIob3V0LCBSZWxhdGlvbkdldFJlbGlkKHJlbCkpOwogCiAJcHFfc2VuZGJ5dGUob3V0LCAn TicpOwkJLyogbmV3IHR1cGxlIGZvbGxvd3MgKi8KLQlsb2dpY2FscmVwX3dyaXRlX3R1cGxl KG91dCwgcmVsLCBuZXdzbG90LCBiaW5hcnkpOworCWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUo b3V0LCByZWwsIG5ld3Nsb3QsIGJpbmFyeSwgY29sdW1ucyk7CiB9CiAKIC8qCkBAIC00NDMs NyArNDU3LDcgQEAgbG9naWNhbHJlcF9yZWFkX2luc2VydChTdHJpbmdJbmZvIGluLCBMb2dp Y2FsUmVwVHVwbGVEYXRhICpuZXd0dXApCiB2b2lkCiBsb2dpY2FscmVwX3dyaXRlX3VwZGF0 ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAkJ CQkJCVR1cGxlVGFibGVTbG90ICpvbGRzbG90LCBUdXBsZVRhYmxlU2xvdCAqbmV3c2xvdCwK LQkJCQkJCWJvb2wgYmluYXJ5KQorCQkJCQkJYm9vbCBiaW5hcnksIEJpdG1hcHNldCAqY29s dW1ucykKIHsKIAlwcV9zZW5kYnl0ZShvdXQsIExPR0lDQUxfUkVQX01TR19VUERBVEUpOwog CkBAIC00NjQsMTEgKzQ3OCwxMSBAQCBsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShTdHJpbmdJ bmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKIAkJCXBxX3NlbmRi eXRlKG91dCwgJ08nKTsJLyogb2xkIHR1cGxlIGZvbGxvd3MgKi8KIAkJZWxzZQogCQkJcHFf c2VuZGJ5dGUob3V0LCAnSycpOwkvKiBvbGQga2V5IGZvbGxvd3MgKi8KLQkJbG9naWNhbHJl cF93cml0ZV90dXBsZShvdXQsIHJlbCwgb2xkc2xvdCwgYmluYXJ5KTsKKwkJbG9naWNhbHJl cF93cml0ZV90dXBsZShvdXQsIHJlbCwgb2xkc2xvdCwgYmluYXJ5LCBjb2x1bW5zKTsKIAl9 CiAKIAlwcV9zZW5kYnl0ZShvdXQsICdOJyk7CQkvKiBuZXcgdHVwbGUgZm9sbG93cyAqLwot CWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUob3V0LCByZWwsIG5ld3Nsb3QsIGJpbmFyeSk7CisJ bG9naWNhbHJlcF93cml0ZV90dXBsZShvdXQsIHJlbCwgbmV3c2xvdCwgYmluYXJ5LCBjb2x1 bW5zKTsKIH0KIAogLyoKQEAgLTUzNyw3ICs1NTEsNyBAQCBsb2dpY2FscmVwX3dyaXRlX2Rl bGV0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwK IAllbHNlCiAJCXBxX3NlbmRieXRlKG91dCwgJ0snKTsJLyogb2xkIGtleSBmb2xsb3dzICov CiAKLQlsb2dpY2FscmVwX3dyaXRlX3R1cGxlKG91dCwgcmVsLCBvbGRzbG90LCBiaW5hcnkp OworCWxvZ2ljYWxyZXBfd3JpdGVfdHVwbGUob3V0LCByZWwsIG9sZHNsb3QsIGJpbmFyeSwg TlVMTCk7CiB9CiAKIC8qCkBAIC02NTIsNyArNjY2LDggQEAgbG9naWNhbHJlcF93cml0ZV9t ZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBs c24sCiAgKiBXcml0ZSByZWxhdGlvbiBkZXNjcmlwdGlvbiB0byB0aGUgb3V0cHV0IHN0cmVh bS4KICAqLwogdm9pZAotbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRy YW5zYWN0aW9uSWQgeGlkLCBSZWxhdGlvbiByZWwpCitsb2dpY2FscmVwX3dyaXRlX3JlbChT dHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsIFJlbGF0aW9uIHJlbCwKKwkJCQkJ IEJpdG1hcHNldCAqY29sdW1ucykKIHsKIAljaGFyCSAgICpyZWxuYW1lOwogCkBAIC02NzQs NyArNjg5LDcgQEAgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5z YWN0aW9uSWQgeGlkLCBSZWxhdGlvbiByZWwpCiAJcHFfc2VuZGJ5dGUob3V0LCByZWwtPnJk X3JlbC0+cmVscmVwbGlkZW50KTsKIAogCS8qIHNlbmQgdGhlIGF0dHJpYnV0ZSBpbmZvICov Ci0JbG9naWNhbHJlcF93cml0ZV9hdHRycyhvdXQsIHJlbCk7CisJbG9naWNhbHJlcF93cml0 ZV9hdHRycyhvdXQsIHJlbCwgY29sdW1ucyk7CiB9CiAKIC8qCkBAIC03NTEsNyArNzY2LDcg QEAgbG9naWNhbHJlcF9yZWFkX3R5cChTdHJpbmdJbmZvIGluLCBMb2dpY2FsUmVwVHlwICps dHlwKQogICovCiBzdGF0aWMgdm9pZAogbG9naWNhbHJlcF93cml0ZV90dXBsZShTdHJpbmdJ bmZvIG91dCwgUmVsYXRpb24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJICAg Ym9vbCBiaW5hcnkpCisJCQkJCSAgIGJvb2wgYmluYXJ5LCBCaXRtYXBzZXQgKmNvbHVtbnMp CiB7CiAJVHVwbGVEZXNjCWRlc2M7CiAJRGF0dW0JICAgKnZhbHVlczsKQEAgLTc2Myw4ICs3 NzgsMTQgQEAgbG9naWNhbHJlcF93cml0ZV90dXBsZShTdHJpbmdJbmZvIG91dCwgUmVsYXRp b24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAogCWZvciAoaSA9IDA7IGkgPCBkZXNj LT5uYXR0czsgaSsrKQogCXsKLQkJaWYgKFR1cGxlRGVzY0F0dHIoZGVzYywgaSktPmF0dGlz ZHJvcHBlZCB8fCBUdXBsZURlc2NBdHRyKGRlc2MsIGkpLT5hdHRnZW5lcmF0ZWQpCisJCUZv cm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIoZGVzYywgaSk7CisKKwkJaWYg KGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0dC0+YXR0Z2VuZXJhdGVkKQorCQkJY29udGludWU7 CisKKwkJaWYgKCFjb2x1bW5faW5fY29sdW1uX2xpc3QoYXR0LT5hdHRudW0sIGNvbHVtbnMp KQogCQkJY29udGludWU7CisKIAkJbmxpdmVhdHRzKys7CiAJfQogCXBxX3NlbmRpbnQxNihv dXQsIG5saXZlYXR0cyk7CkBAIC03ODMsNiArODA0LDkgQEAgbG9naWNhbHJlcF93cml0ZV90 dXBsZShTdHJpbmdJbmZvIG91dCwgUmVsYXRpb24gcmVsLCBUdXBsZVRhYmxlU2xvdCAqc2xv dCwKIAkJaWYgKGF0dC0+YXR0aXNkcm9wcGVkIHx8IGF0dC0+YXR0Z2VuZXJhdGVkKQogCQkJ Y29udGludWU7CiAKKwkJaWYgKCFjb2x1bW5faW5fY29sdW1uX2xpc3QoYXR0LT5hdHRudW0s IGNvbHVtbnMpKQorCQkJY29udGludWU7CisKIAkJaWYgKGlzbnVsbFtpXSkKIAkJewogCQkJ cHFfc2VuZGJ5dGUob3V0LCBMT0dJQ0FMUkVQX0NPTFVNTl9OVUxMKTsKQEAgLTkwNCw3ICs5 MjgsNyBAQCBsb2dpY2FscmVwX3JlYWRfdHVwbGUoU3RyaW5nSW5mbyBpbiwgTG9naWNhbFJl cFR1cGxlRGF0YSAqdHVwbGUpCiAgKiBXcml0ZSByZWxhdGlvbiBhdHRyaWJ1dGUgbWV0YWRh dGEgdG8gdGhlIHN0cmVhbS4KICAqLwogc3RhdGljIHZvaWQKLWxvZ2ljYWxyZXBfd3JpdGVf YXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJlbCkKK2xvZ2ljYWxyZXBfd3JpdGVf YXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJlbCwgQml0bWFwc2V0ICpjb2x1bW5z KQogewogCVR1cGxlRGVzYwlkZXNjOwogCWludAkJCWk7CkBAIC05MTcsOCArOTQxLDE0IEBA IGxvZ2ljYWxyZXBfd3JpdGVfYXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJlbCkK IAkvKiBzZW5kIG51bWJlciBvZiBsaXZlIGF0dHJpYnV0ZXMgKi8KIAlmb3IgKGkgPSAwOyBp IDwgZGVzYy0+bmF0dHM7IGkrKykKIAl7Ci0JCWlmIChUdXBsZURlc2NBdHRyKGRlc2MsIGkp LT5hdHRpc2Ryb3BwZWQgfHwgVHVwbGVEZXNjQXR0cihkZXNjLCBpKS0+YXR0Z2VuZXJhdGVk KQorCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKGRlc2MsIGkpOwor CisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCB8fCBhdHQtPmF0dGdlbmVyYXRlZCkKIAkJCWNv bnRpbnVlOworCisJCWlmICghY29sdW1uX2luX2NvbHVtbl9saXN0KGF0dC0+YXR0bnVtLCBj b2x1bW5zKSkKKwkJCWNvbnRpbnVlOworCiAJCW5saXZlYXR0cysrOwogCX0KIAlwcV9zZW5k aW50MTYob3V0LCBubGl2ZWF0dHMpOwpAQCAtOTM3LDYgKzk2Nyw5IEBAIGxvZ2ljYWxyZXBf d3JpdGVfYXR0cnMoU3RyaW5nSW5mbyBvdXQsIFJlbGF0aW9uIHJlbCkKIAkJaWYgKGF0dC0+ YXR0aXNkcm9wcGVkIHx8IGF0dC0+YXR0Z2VuZXJhdGVkKQogCQkJY29udGludWU7CiAKKwkJ aWYgKCFjb2x1bW5faW5fY29sdW1uX2xpc3QoYXR0LT5hdHRudW0sIGNvbHVtbnMpKQorCQkJ Y29udGludWU7CisKIAkJLyogUkVQTElDQSBJREVOVElUWSBGVUxMIG1lYW5zIGFsbCBjb2x1 bW5zIGFyZSBzZW50IGFzIHBhcnQgb2Yga2V5LiAqLwogCQlpZiAocmVwbGlkZW50ZnVsbCB8 fAogCQkJYm1zX2lzX21lbWJlcihhdHQtPmF0dG51bSAtIEZpcnN0TG93SW52YWxpZEhlYXBB dHRyaWJ1dGVOdW1iZXIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL3RhYmxlc3luYy5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90 YWJsZXN5bmMuYwppbmRleCAxNjU5OTY0NTcxYy4uY2FlYWI4NTNlNGMgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpAQCAtMTEyLDYgKzEx Miw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xt Z3IuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKKyNpbmNsdWRlICJ1dGlscy9hcnJheS5o IgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2Nh Y2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTcwMSwxMiArNzAyLDEz IEBAIGZldGNoX3JlbW90ZV90YWJsZV9pbmZvKGNoYXIgKm5zcG5hbWUsIGNoYXIgKnJlbG5h bWUsCiAJU3RyaW5nSW5mb0RhdGEgY21kOwogCVR1cGxlVGFibGVTbG90ICpzbG90OwogCU9p ZAkJCXRhYmxlUm93W10gPSB7T0lET0lELCBDSEFST0lELCBDSEFST0lEfTsKLQlPaWQJCQlh dHRyUm93W10gPSB7VEVYVE9JRCwgT0lET0lELCBCT09MT0lEfTsKKwlPaWQJCQlhdHRyUm93 W10gPSB7SU5UMk9JRCwgVEVYVE9JRCwgT0lET0lELCBCT09MT0lEfTsKIAlPaWQJCQlxdWFs Um93W10gPSB7VEVYVE9JRH07CiAJYm9vbAkJaXNudWxsOwogCWludAkJCW5hdHQ7CiAJTGlz dENlbGwgICAqbGM7CiAJYm9vbAkJZmlyc3Q7CisJQml0bWFwc2V0ICAqaW5jbHVkZWRfY29s cyA9IE5VTEw7CiAKIAlscmVsLT5uc3BuYW1lID0gbnNwbmFtZTsKIAlscmVsLT5yZWxuYW1l ID0gcmVsbmFtZTsKQEAgLTc0NywxMCArNzQ5LDExMCBAQCBmZXRjaF9yZW1vdGVfdGFibGVf aW5mbyhjaGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLAogCUV4ZWNEcm9wU2luZ2xlVHVw bGVUYWJsZVNsb3Qoc2xvdCk7CiAJd2FscmN2X2NsZWFyX3Jlc3VsdChyZXMpOwogCi0JLyog Tm93IGZldGNoIGNvbHVtbnMuICovCisKKwkvKgorCSAqIEdldCBjb2x1bW4gbGlzdHMgZm9y IGVhY2ggcmVsYXRpb24uCisJICoKKwkgKiBGb3IgaW5pdGlhbCBzeW5jaHJvbml6YXRpb24s IGNvbHVtbiBsaXN0cyBjYW4gYmUgaWdub3JlZCBpbiBmb2xsb3dpbmcKKwkgKiBjYXNlczoK KwkgKgorCSAqIDEpIG9uZSBvZiB0aGUgc3Vic2NyaWJlZCBwdWJsaWNhdGlvbnMgZm9yIHRo ZSB0YWJsZSBoYXNuJ3Qgc3BlY2lmaWVkCisJICogYW55IGNvbHVtbiBsaXN0CisJICoKKwkg KiAyKSBvbmUgb2YgdGhlIHN1YnNjcmliZWQgcHVibGljYXRpb25zIGhhcyBwdWJhbGx0YWJs ZXMgc2V0IHRvIHRydWUKKwkgKgorCSAqIDMpIG9uZSBvZiB0aGUgc3Vic2NyaWJlZCBwdWJs aWNhdGlvbnMgaXMgZGVjbGFyZWQgYXMgQUxMIFRBQkxFUyBJTgorCSAqIFNDSEVNQSB0aGF0 IGluY2x1ZGVzIHRoaXMgcmVsYXRpb24KKwkgKgorCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyBi ZWZvcmUgZmV0Y2hpbmcgaW5mbyBhYm91dCBjb2x1bW4gbmFtZXMgYW5kIHR5cGVzLAorCSAq IHNvIHRoYXQgd2UgY2FuIHNraXAgY29sdW1ucyB0aGF0IHNob3VsZCBub3QgYmUgcmVwbGlj YXRlZC4KKwkgKi8KKwlpZiAod2FscmN2X3NlcnZlcl92ZXJzaW9uKExvZ1JlcFdvcmtlcldh bFJjdkNvbm4pID49IDE1MDAwMCkKKwl7CisJCVdhbFJjdkV4ZWNSZXN1bHQgKnB1YnJlczsK KwkJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJCU9pZAkJCWF0dHJzUm93W10gPSB7SU5UMk9J RH07CisJCVN0cmluZ0luZm9EYXRhIHB1Yl9uYW1lczsKKwkJYm9vbAkJZmlyc3QgPSB0cnVl OworCisJCWluaXRTdHJpbmdJbmZvKCZwdWJfbmFtZXMpOworCQlmb3JlYWNoKGxjLCBNeVN1 YnNjcmlwdGlvbi0+cHVibGljYXRpb25zKQorCQl7CisJCQlpZiAoIWZpcnN0KQorCQkJCWFw cGVuZFN0cmluZ0luZm8oJnB1Yl9uYW1lcywgIiwgIik7CisJCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKCZwdWJfbmFtZXMsIHF1b3RlX2xpdGVyYWxfY3N0cihzdHJWYWwobGZpcnN0KGxj KSkpKTsKKwkJCWZpcnN0ID0gZmFsc2U7CisJCX0KKworCQkvKgorCQkgKiBGZXRjaCBpbmZv IGFib3V0IGNvbHVtbiBsaXN0cyBmb3IgdGhlIHJlbGF0aW9uIChmcm9tIGFsbCB0aGUKKwkJ ICogcHVibGljYXRpb25zKS4gV2UgdW5uZXN0IHRoZSBpbnQydmVjdG9yIHZhbHVlcywgYmVj YXVzZSB0aGF0CisJCSAqIG1ha2VzIGl0IGVhc2llciB0byBjb21iaW5lIGxpc3RzIGJ5IHNp bXBseSBhZGRpbmcgdGhlIGF0dG51bXMKKwkJICogdG8gYSBuZXcgYml0bWFwICh3aXRob3V0 IGhhdmluZyB0byBwYXJzZSB0aGUgaW50MnZlY3RvciBkYXRhKS4KKwkJICogVGhpcyBwcmVz ZXJ2ZXMgTlVMTCB2YWx1ZXMsIHNvIHRoYXQgaWYgb25lIG9mIHRoZSBwdWJsaWNhdGlvbnMK KwkJICogaGFzIG5vIGNvbHVtbiBsaXN0LCB3ZSdsbCBrbm93IHRoYXQuCisJCSAqLworCQly ZXNldFN0cmluZ0luZm8oJmNtZCk7CisJCWFwcGVuZFN0cmluZ0luZm8oJmNtZCwKKwkJCQkJ CSAiU0VMRUNUIERJU1RJTkNUIHVubmVzdCIKKwkJCQkJCSAiICBGUk9NIHBnX3B1YmxpY2F0 aW9uIHAiCisJCQkJCQkgIiAgTEVGVCBPVVRFUiBKT0lOIHBnX3B1YmxpY2F0aW9uX3JlbCBw ciIKKwkJCQkJCSAiICAgICAgIE9OIChwLm9pZCA9IHByLnBycHViaWQgQU5EIHByLnBycmVs aWQgPSAldSkiCisJCQkJCQkgIiAgTEVGVCBPVVRFUiBKT0lOIHVubmVzdChwci5wcmF0dHJz KSBPTiBUUlVFLCIKKwkJCQkJCSAiICBMQVRFUkFMIHBnX2dldF9wdWJsaWNhdGlvbl90YWJs ZXMocC5wdWJuYW1lKSBncHQiCisJCQkJCQkgIiBXSEVSRSBncHQucmVsaWQgPSAldSIKKwkJ CQkJCSAiICAgQU5EIHAucHVibmFtZSBJTiAoICVzICkiLAorCQkJCQkJIGxyZWwtPnJlbW90 ZWlkLAorCQkJCQkJIGxyZWwtPnJlbW90ZWlkLAorCQkJCQkJIHB1Yl9uYW1lcy5kYXRhKTsK KworCQlwdWJyZXMgPSB3YWxyY3ZfZXhlYyhMb2dSZXBXb3JrZXJXYWxSY3ZDb25uLCBjbWQu ZGF0YSwKKwkJCQkJCQkgbGVuZ3Rob2YoYXR0cnNSb3cpLCBhdHRyc1Jvdyk7CisKKwkJaWYg KHB1YnJlcy0+c3RhdHVzICE9IFdBTFJDVl9PS19UVVBMRVMpCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCisJCQkJCSBl cnJtc2coImNvdWxkIG5vdCBmZXRjaCBjb2x1bW4gbGlzdCBpbmZvIGZvciB0YWJsZSBcIiVz LiVzXCIgZnJvbSBwdWJsaXNoZXI6ICVzIiwKKwkJCQkJCQluc3BuYW1lLCByZWxuYW1lLCBw dWJyZXMtPmVycikpKTsKKworCQkvKgorCQkgKiBNZXJnZSB0aGUgY29sdW1uIGxpc3RzIChm cm9tIGRpZmZlcmVudCBwdWJsaWNhdGlvbnMpIGJ5IGNyZWF0aW5nCisJCSAqIGEgc2luZ2xl IGJpdG1hcCB3aXRoIGFsbCB0aGUgYXR0bnVtcy4gSWYgd2UgZmluZCBhIE5VTEwgdmFsdWUs CisJCSAqIHRoYXQgbWVhbnMgb25lIG9mIHRoZSBwdWJsaWNhdGlvbnMgaGFzIG5vIGNvbHVt biBsaXN0IGZvciB0aGUKKwkJICogdGFibGUgd2UncmUgc3luY2luZy4KKwkJICovCisJCXNs b3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QocHVicmVzLT50dXBsZWRlc2MsICZUVFNP cHNNaW5pbWFsVHVwbGUpOworCQl3aGlsZSAodHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QocHVi cmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkpCisJCXsKKwkJCURhdHVtCWNm dmFsID0gc2xvdF9nZXRhdHRyKHNsb3QsIDEsICZpc251bGwpOworCisJCQkvKiBOVUxMIG1l YW5zIGVtcHR5IGNvbHVtbiBsaXN0LCBzbyB3ZSdyZSBkb25lLiAqLworCQkJaWYgKGlzbnVs bCkKKwkJCXsKKwkJCQlibXNfZnJlZShpbmNsdWRlZF9jb2xzKTsKKwkJCQlpbmNsdWRlZF9j b2xzID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaW5jbHVkZWRfY29scyA9IGJt c19hZGRfbWVtYmVyKGluY2x1ZGVkX2NvbHMsCisJCQkJCQkJCQkJRGF0dW1HZXRJbnQxNihj ZnZhbCkpOworCisJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJfQorCQlFeGVjRHJvcFNp bmdsZVR1cGxlVGFibGVTbG90KHNsb3QpOworCisJCXdhbHJjdl9jbGVhcl9yZXN1bHQocHVi cmVzKTsKKworCQlwZnJlZShwdWJfbmFtZXMuZGF0YSk7CisJfQorCisJLyoKKwkgKiBOb3cg ZmV0Y2ggY29sdW1uIG5hbWVzIGFuZCB0eXBlcy4KKwkgKi8KIAlyZXNldFN0cmluZ0luZm8o JmNtZCk7CiAJYXBwZW5kU3RyaW5nSW5mbygmY21kLAotCQkJCQkgIlNFTEVDVCBhLmF0dG5h bWUsIgorCQkJCQkgIlNFTEVDVCBhLmF0dG51bSwiCisJCQkJCSAiICAgICAgIGEuYXR0bmFt ZSwiCiAJCQkJCSAiICAgICAgIGEuYXR0dHlwaWQsIgogCQkJCQkgIiAgICAgICBhLmF0dG51 bSA9IEFOWShpLmluZGtleSkiCiAJCQkJCSAiICBGUk9NIHBnX2NhdGFsb2cucGdfYXR0cmli dXRlIGEiCkBAIC03NzgsMTYgKzg4MCwzNSBAQCBmZXRjaF9yZW1vdGVfdGFibGVfaW5mbyhj aGFyICpuc3BuYW1lLCBjaGFyICpyZWxuYW1lLAogCWxyZWwtPmF0dHR5cHMgPSBwYWxsb2Mw KE1heFR1cGxlQXR0cmlidXRlTnVtYmVyICogc2l6ZW9mKE9pZCkpOwogCWxyZWwtPmF0dGtl eXMgPSBOVUxMOwogCisJLyoKKwkgKiBTdG9yZSB0aGUgY29sdW1ucyBhcyBhIGxpc3Qgb2Yg bmFtZXMuICBJZ25vcmUgdGhvc2UgdGhhdCBhcmUgbm90CisJICogcHJlc2VudCBpbiB0aGUg Y29sdW1uIGxpc3QsIGlmIHRoZXJlIGlzIG9uZS4KKwkgKi8KIAluYXR0ID0gMDsKIAlzbG90 ID0gTWFrZVNpbmdsZVR1cGxlVGFibGVTbG90KHJlcy0+dHVwbGVkZXNjLCAmVFRTT3BzTWlu aW1hbFR1cGxlKTsKIAl3aGlsZSAodHVwbGVzdG9yZV9nZXR0dXBsZXNsb3QocmVzLT50dXBs ZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkpCiAJewotCQlscmVsLT5hdHRuYW1lc1tuYXR0 XSA9Ci0JCQlUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0YXR0cihzbG90LCAxLCAmaXNu dWxsKSk7CisJCWNoYXIJICAgKnJlbF9jb2xuYW1lOworCQlBdHRyTnVtYmVyCWF0dG51bTsK KworCQlhdHRudW0gPSBEYXR1bUdldEludDE2KHNsb3RfZ2V0YXR0cihzbG90LCAxLCAmaXNu dWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKworCQkvKiBJZiB0aGUgY29sdW1uIGlzIG5v dCBpbiB0aGUgY29sdW1uIGxpc3QsIHNraXAgaXQuICovCisJCWlmIChpbmNsdWRlZF9jb2xz ICE9IE5VTEwgJiYgIWJtc19pc19tZW1iZXIoYXR0bnVtLCBpbmNsdWRlZF9jb2xzKSkKKwkJ eworCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJl bF9jb2xuYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90X2dldGF0dHIoc2xvdCwgMiwg JmlzbnVsbCkpOwogCQlBc3NlcnQoIWlzbnVsbCk7Ci0JCWxyZWwtPmF0dHR5cHNbbmF0dF0g PSBEYXR1bUdldE9iamVjdElkKHNsb3RfZ2V0YXR0cihzbG90LCAyLCAmaXNudWxsKSk7CisK KwkJbHJlbC0+YXR0bmFtZXNbbmF0dF0gPSByZWxfY29sbmFtZTsKKwkJbHJlbC0+YXR0dHlw c1tuYXR0XSA9IERhdHVtR2V0T2JqZWN0SWQoc2xvdF9nZXRhdHRyKHNsb3QsIDMsICZpc251 bGwpKTsKIAkJQXNzZXJ0KCFpc251bGwpOwotCQlpZiAoRGF0dW1HZXRCb29sKHNsb3RfZ2V0 YXR0cihzbG90LCAzLCAmaXNudWxsKSkpCisKKwkJaWYgKERhdHVtR2V0Qm9vbChzbG90X2dl dGF0dHIoc2xvdCwgNCwgJmlzbnVsbCkpKQogCQkJbHJlbC0+YXR0a2V5cyA9IGJtc19hZGRf bWVtYmVyKGxyZWwtPmF0dGtleXMsIG5hdHQpOwogCiAJCS8qIFNob3VsZCBuZXZlciBoYXBw ZW4uICovCkBAIC04MjEsNiArOTQyLDkgQEAgZmV0Y2hfcmVtb3RlX3RhYmxlX2luZm8oY2hh ciAqbnNwbmFtZSwgY2hhciAqcmVsbmFtZSwKIAkgKgogCSAqIDMpIG9uZSBvZiB0aGUgc3Vi c2NyaWJlZCBwdWJsaWNhdGlvbnMgaXMgZGVjbGFyZWQgYXMgQUxMIFRBQkxFUyBJTgogCSAq IFNDSEVNQSB0aGF0IGluY2x1ZGVzIHRoaXMgcmVsYXRpb24KKwkgKgorCSAqIFhYWCBEb2Vz IHRoaXMgYWN0dWFsbHkgaGFuZGxlIHB1YmFsbHRhYmxlcyBhbmQgc2NoZW1hIHB1YmxpY2F0 aW9ucworCSAqIGNvcnJlY3RseT8KIAkgKi8KIAlpZiAod2FscmN2X3NlcnZlcl92ZXJzaW9u KExvZ1JlcFdvcmtlcldhbFJjdkNvbm4pID49IDE1MDAwMCkKIAl7CkBAIC05MzAsOCArMTA1 NCwyNCBAQCBjb3B5X3RhYmxlKFJlbGF0aW9uIHJlbCkKIAogCS8qIFJlZ3VsYXIgdGFibGUg d2l0aCBubyByb3cgZmlsdGVyICovCiAJaWYgKGxyZWwucmVsa2luZCA9PSBSRUxLSU5EX1JF TEFUSU9OICYmIHF1YWwgPT0gTklMKQotCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJDT1BZ ICVzIFRPIFNURE9VVCIsCisJeworCQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsICJDT1BZICVz ICgiLAogCQkJCQkJIHF1b3RlX3F1YWxpZmllZF9pZGVudGlmaWVyKGxyZWwubnNwbmFtZSwg bHJlbC5yZWxuYW1lKSk7CisKKwkJLyoKKwkJICogWFhYIERvIHdlIG5lZWQgdG8gbGlzdCB0 aGUgY29sdW1ucyBpbiBhbGwgY2FzZXM/IE1heWJlIHdlJ3JlIHJlcGxpY2F0aW5nCisJCSAq IGFsbCBjb2x1bW5zPworCQkgKi8KKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBscmVsLm5hdHRz OyBpKyspCisJCXsKKwkJCWlmIChpID4gMCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZjbWQsICIsICIpOworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjbWQsIHF1b3Rl X2lkZW50aWZpZXIobHJlbC5hdHRuYW1lc1tpXSkpOworCQl9CisKKwkJYXBwZW5kU3RyaW5n SW5mbygmY21kLCAiKSBUTyBTVERPVVQiKTsKKwl9CiAJZWxzZQogCXsKIAkJLyoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0LmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDVmZGRh YjNhM2Q0Li5mNWU3NjEwYTE3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vcGdvdXRwdXQvcGdvdXRwdXQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9w Z291dHB1dC9wZ291dHB1dC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAidXRpbHMv aW52YWwuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGls cy9tZW11dGlscy5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxz L3N5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5oIgogCkBAIC04NSw3ICs4 Niw4IEBAIHN0YXRpYyBMaXN0ICpMb2FkUHVibGljYXRpb25zKExpc3QgKnB1Ym5hbWVzKTsK IHN0YXRpYyB2b2lkIHB1YmxpY2F0aW9uX2ludmFsaWRhdGlvbl9jYihEYXR1bSBhcmcsIGlu dCBjYWNoZWlkLAogCQkJCQkJCQkJCXVpbnQzMiBoYXNodmFsdWUpOwogc3RhdGljIHZvaWQg c2VuZF9yZWxhdGlvbl9hbmRfYXR0cnMoUmVsYXRpb24gcmVsYXRpb24sIFRyYW5zYWN0aW9u SWQgeGlkLAotCQkJCQkJCQkJTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4KTsKKwkJCQkJ CQkJCUxvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCUJpdG1hcHNldCAq Y29sdW1ucyk7CiBzdGF0aWMgdm9pZCBzZW5kX3JlcGxfb3JpZ2luKExvZ2ljYWxEZWNvZGlu Z0NvbnRleHQgKmN0eCwKIAkJCQkJCQkgUmVwT3JpZ2luSWQgb3JpZ2luX2lkLCBYTG9nUmVj UHRyIG9yaWdpbl9sc24sCiAJCQkJCQkJIGJvb2wgc2VuZF9vcmlnaW4pOwpAQCAtMTQzLDkg KzE0NSw2IEBAIHR5cGVkZWYgc3RydWN0IFJlbGF0aW9uU3luY0VudHJ5CiAJICovCiAJRXhw clN0YXRlICAqZXhwcnN0YXRlW05VTV9ST1dGSUxURVJfUFVCQUNUSU9OU107CiAJRVN0YXRl CSAgICplc3RhdGU7CQkJLyogZXhlY3V0b3Igc3RhdGUgdXNlZCBmb3Igcm93IGZpbHRlciAq LwotCU1lbW9yeUNvbnRleHQgY2FjaGVfZXhwcl9jeHQ7CS8qIHByaXZhdGUgY29udGV4dCBm b3IgZXhwcnN0YXRlIGFuZAotCQkJCQkJCQkJICogZXN0YXRlLCBpZiBhbnkgKi8KLQogCVR1 cGxlVGFibGVTbG90ICpuZXdfc2xvdDsJLyogc2xvdCBmb3Igc3RvcmluZyBuZXcgdHVwbGUg Ki8KIAlUdXBsZVRhYmxlU2xvdCAqb2xkX3Nsb3Q7CS8qIHNsb3QgZm9yIHN0b3Jpbmcgb2xk IHR1cGxlICovCiAKQEAgLTE2NCw2ICsxNjMsMTkgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsYXRp b25TeW5jRW50cnkKIAkgKiBoYXZpbmcgaWRlbnRpY2FsIFR1cGxlRGVzYy4KIAkgKi8KIAlB dHRyTWFwICAgICphdHRybWFwOworCisJLyoKKwkgKiBDb2x1bW5zIGluY2x1ZGVkIGluIHRo ZSBwdWJsaWNhdGlvbiwgb3IgTlVMTCBpZiBhbGwgY29sdW1ucyBhcmUKKwkgKiBpbmNsdWRl ZCBpbXBsaWNpdGx5LiAgTm90ZSB0aGF0IHRoZSBhdHRudW1zIGluIHRoaXMgYml0bWFwIGFy ZSBub3QKKwkgKiBzaGlmdGVkIGJ5IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1i ZXIuCisJICovCisJQml0bWFwc2V0ICAqY29sdW1uczsKKworCS8qCisJICogUHJpdmF0ZSBj b250ZXh0IHRvIHN0b3JlIGFkZGl0aW9uYWwgZGF0YSBmb3IgdGhpcyBlbnRyeSAtIHN0YXRl IGZvcgorCSAqIHRoZSByb3cgZmlsdGVyIGV4cHJlc3Npb25zLCBjb2x1bW4gbGlzdCwgZXRj LgorCSAqLworCU1lbW9yeUNvbnRleHQgZW50cnlfY3h0OwogfSBSZWxhdGlvblN5bmNFbnRy eTsKIAogLyogTWFwIHVzZWQgdG8gcmVtZW1iZXIgd2hpY2ggcmVsYXRpb24gc2NoZW1hcyB3 ZSBzZW50LiAqLwpAQCAtMTg4LDYgKzIwMCw3IEBAIHN0YXRpYyBFU3RhdGUgKmNyZWF0ZV9l c3RhdGVfZm9yX3JlbGF0aW9uKFJlbGF0aW9uIHJlbCk7CiBzdGF0aWMgdm9pZCBwZ291dHB1 dF9yb3dfZmlsdGVyX2luaXQoUEdPdXRwdXREYXRhICpkYXRhLAogCQkJCQkJCQkJIExpc3Qg KnB1YmxpY2F0aW9ucywKIAkJCQkJCQkJCSBSZWxhdGlvblN5bmNFbnRyeSAqZW50cnkpOwor CiBzdGF0aWMgYm9vbCBwZ291dHB1dF9yb3dfZmlsdGVyX2V4ZWNfZXhwcihFeHByU3RhdGUg KnN0YXRlLAogCQkJCQkJCQkJCSAgRXhwckNvbnRleHQgKmVjb250ZXh0KTsKIHN0YXRpYyBi b29sIHBnb3V0cHV0X3Jvd19maWx0ZXIoUmVsYXRpb24gcmVsYXRpb24sIFR1cGxlVGFibGVT bG90ICpvbGRfc2xvdCwKQEAgLTE5NSw2ICsyMDgsMTEgQEAgc3RhdGljIGJvb2wgcGdvdXRw dXRfcm93X2ZpbHRlcihSZWxhdGlvbiByZWxhdGlvbiwgVHVwbGVUYWJsZVNsb3QgKm9sZF9z bG90LAogCQkJCQkJCQlSZWxhdGlvblN5bmNFbnRyeSAqZW50cnksCiAJCQkJCQkJCVJlb3Jk ZXJCdWZmZXJDaGFuZ2VUeXBlICphY3Rpb24pOwogCisvKiBjb2x1bW4gbGlzdCByb3V0aW5l cyAqLworc3RhdGljIHZvaWQgcGdvdXRwdXRfY29sdW1uX2xpc3RfaW5pdChQR091dHB1dERh dGEgKmRhdGEsCisJCQkJCQkJCQkgIExpc3QgKnB1YmxpY2F0aW9ucywKKwkJCQkJCQkJCSAg UmVsYXRpb25TeW5jRW50cnkgKmVudHJ5KTsKKwogLyoKICAqIFNwZWNpZnkgb3V0cHV0IHBs dWdpbiBjYWxsYmFja3MKICAqLwpAQCAtNjAzLDExICs2MjEsMTEgQEAgbWF5YmVfc2VuZF9z Y2hlbWEoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAogCXsKIAkJUmVsYXRpb24JYW5j ZXN0b3IgPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsZW50cnktPnB1Ymxpc2hfYXNfcmVs aWQpOwogCi0JCXNlbmRfcmVsYXRpb25fYW5kX2F0dHJzKGFuY2VzdG9yLCB4aWQsIGN0eCk7 CisJCXNlbmRfcmVsYXRpb25fYW5kX2F0dHJzKGFuY2VzdG9yLCB4aWQsIGN0eCwgcmVsZW50 cnktPmNvbHVtbnMpOwogCQlSZWxhdGlvbkNsb3NlKGFuY2VzdG9yKTsKIAl9CiAKLQlzZW5k X3JlbGF0aW9uX2FuZF9hdHRycyhyZWxhdGlvbiwgeGlkLCBjdHgpOworCXNlbmRfcmVsYXRp b25fYW5kX2F0dHJzKHJlbGF0aW9uLCB4aWQsIGN0eCwgcmVsZW50cnktPmNvbHVtbnMpOwog CiAJaWYgKGluX3N0cmVhbWluZykKIAkJc2V0X3NjaGVtYV9zZW50X2luX3N0cmVhbWVkX3R4 bihyZWxlbnRyeSwgdG9weGlkKTsKQEAgLTYyMCw3ICs2MzgsOCBAQCBtYXliZV9zZW5kX3Nj aGVtYShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAgKi8KIHN0YXRpYyB2b2lkCiBz ZW5kX3JlbGF0aW9uX2FuZF9hdHRycyhSZWxhdGlvbiByZWxhdGlvbiwgVHJhbnNhY3Rpb25J ZCB4aWQsCi0JCQkJCQlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgpCisJCQkJCQlMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCisJCQkJCQlCaXRtYXBzZXQgKmNvbHVtbnMpCiB7 CiAJVHVwbGVEZXNjCWRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKTsKIAlpbnQJ CQlpOwpAQCAtNjQzLDEzICs2NjIsMTcgQEAgc2VuZF9yZWxhdGlvbl9hbmRfYXR0cnMoUmVs YXRpb24gcmVsYXRpb24sIFRyYW5zYWN0aW9uSWQgeGlkLAogCQlpZiAoYXR0LT5hdHR0eXBp ZCA8IEZpcnN0R2VuYmtpT2JqZWN0SWQpCiAJCQljb250aW51ZTsKIAorCQkvKiBTa2lwIHRo aXMgYXR0cmlidXRlIGlmIGl0J3Mgbm90IHByZXNlbnQgaW4gdGhlIGNvbHVtbiBsaXN0ICov CisJCWlmIChjb2x1bW5zICE9IE5VTEwgJiYgIWJtc19pc19tZW1iZXIoYXR0LT5hdHRudW0s IGNvbHVtbnMpKQorCQkJY29udGludWU7CisKIAkJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRl KGN0eCwgZmFsc2UpOwogCQlsb2dpY2FscmVwX3dyaXRlX3R5cChjdHgtPm91dCwgeGlkLCBh dHQtPmF0dHR5cGlkKTsKIAkJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCBmYWxzZSk7CiAJfQog CiAJT3V0cHV0UGx1Z2luUHJlcGFyZVdyaXRlKGN0eCwgZmFsc2UpOwotCWxvZ2ljYWxyZXBf d3JpdGVfcmVsKGN0eC0+b3V0LCB4aWQsIHJlbGF0aW9uKTsKKwlsb2dpY2FscmVwX3dyaXRl X3JlbChjdHgtPm91dCwgeGlkLCByZWxhdGlvbiwgY29sdW1ucyk7CiAJT3V0cHV0UGx1Z2lu V3JpdGUoY3R4LCBmYWxzZSk7CiB9CiAKQEAgLTcwMyw2ICs3MjYsMjggQEAgcGdvdXRwdXRf cm93X2ZpbHRlcl9leGVjX2V4cHIoRXhwclN0YXRlICpzdGF0ZSwgRXhwckNvbnRleHQgKmVj b250ZXh0KQogCXJldHVybiBEYXR1bUdldEJvb2wocmV0KTsKIH0KIAorLyoKKyAqIE1ha2Ug c3VyZSB0aGUgcGVyLWVudHJ5IG1lbW9yeSBjb250ZXh0IGV4aXN0cy4KKyAqLworc3RhdGlj IHZvaWQKK3Bnb3V0cHV0X2Vuc3VyZV9lbnRyeV9jeHQoUEdPdXRwdXREYXRhICpkYXRhLCBS ZWxhdGlvblN5bmNFbnRyeSAqZW50cnkpCit7CisJUmVsYXRpb24JcmVsYXRpb247CisKKwkv KiBUaGUgY29udGV4dCBtYXkgYWxyZWFkeSBleGlzdCwgaW4gd2hpY2ggY2FzZSBiYWlsIG91 dC4gKi8KKwlpZiAoZW50cnktPmVudHJ5X2N4dCkKKwkJcmV0dXJuOworCisJcmVsYXRpb24g PSBSZWxhdGlvbklkR2V0UmVsYXRpb24oZW50cnktPnB1Ymxpc2hfYXNfcmVsaWQpOworCisJ ZW50cnktPmVudHJ5X2N4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShkYXRhLT5jYWNoZWN0 eCwKKwkJCQkJCQkJCQkJICJlbnRyeSBwcml2YXRlIGNvbnRleHQiLAorCQkJCQkJCQkJCQkg QUxMT0NTRVRfU01BTExfU0laRVMpOworCisJTWVtb3J5Q29udGV4dENvcHlBbmRTZXRJZGVu dGlmaWVyKGVudHJ5LT5lbnRyeV9jeHQsCisJCQkJCQkJCQkgIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbGF0aW9uKSk7Cit9CisKIC8qCiAgKiBJbml0aWFsaXplIHRoZSByb3cgZmls dGVyLgogICovCkBAIC04MjMsMjEgKzg2OCwxMyBAQCBwZ291dHB1dF9yb3dfZmlsdGVyX2lu aXQoUEdPdXRwdXREYXRhICpkYXRhLCBMaXN0ICpwdWJsaWNhdGlvbnMsCiAJewogCQlSZWxh dGlvbglyZWxhdGlvbiA9IFJlbGF0aW9uSWRHZXRSZWxhdGlvbihlbnRyeS0+cHVibGlzaF9h c19yZWxpZCk7CiAKLQkJQXNzZXJ0KGVudHJ5LT5jYWNoZV9leHByX2N4dCA9PSBOVUxMKTsK LQotCQkvKiBDcmVhdGUgdGhlIG1lbW9yeSBjb250ZXh0IGZvciByb3cgZmlsdGVycyAqLwot CQllbnRyeS0+Y2FjaGVfZXhwcl9jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoZGF0YS0+ Y2FjaGVjdHgsCi0JCQkJCQkJCQkJCQkJICAiUm93IGZpbHRlciBleHByZXNzaW9ucyIsCi0J CQkJCQkJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKLQotCQlNZW1vcnlDb250 ZXh0Q29weUFuZFNldElkZW50aWZpZXIoZW50cnktPmNhY2hlX2V4cHJfY3h0LAotCQkJCQkJ CQkJCSAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsYXRpb24pKTsKKwkJcGdvdXRwdXRf ZW5zdXJlX2VudHJ5X2N4dChkYXRhLCBlbnRyeSk7CiAKIAkJLyoKIAkJICogTm93IGFsbCB0 aGUgZmlsdGVycyBmb3IgYWxsIHB1YmFjdGlvbnMgYXJlIGtub3duLiBDb21iaW5lIHRoZW0g d2hlbgogCQkgKiB0aGVpciBwdWJhY3Rpb25zIGFyZSB0aGUgc2FtZS4KIAkJICovCi0JCW9s ZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhlbnRyeS0+Y2FjaGVfZXhwcl9jeHQpOwor CQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZW50cnktPmVudHJ5X2N4dCk7CiAJ CWVudHJ5LT5lc3RhdGUgPSBjcmVhdGVfZXN0YXRlX2Zvcl9yZWxhdGlvbihyZWxhdGlvbik7 CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgTlVNX1JPV0ZJTFRFUl9QVUJBQ1RJT05TOyBpZHgr KykKIAkJewpAQCAtODYwLDYgKzg5NywxMDUgQEAgcGdvdXRwdXRfcm93X2ZpbHRlcl9pbml0 KFBHT3V0cHV0RGF0YSAqZGF0YSwgTGlzdCAqcHVibGljYXRpb25zLAogCX0KIH0KIAorLyoK KyAqIEluaXRpYWxpemUgdGhlIGNvbHVtbiBsaXN0LgorICovCitzdGF0aWMgdm9pZAorcGdv dXRwdXRfY29sdW1uX2xpc3RfaW5pdChQR091dHB1dERhdGEgKmRhdGEsIExpc3QgKnB1Ymxp Y2F0aW9ucywKKwkJCQkJCSAgUmVsYXRpb25TeW5jRW50cnkgKmVudHJ5KQoreworCUxpc3RD ZWxsICAgKmxjOworCisJLyoKKwkgKiBGaW5kIGlmIHRoZXJlIGFyZSBhbnkgY29sdW1uIGxp c3RzIGZvciB0aGlzIHJlbGF0aW9uLiBJZiB0aGVyZSBhcmUsCisJICogYnVpbGQgYSBiaXRt YXAgbWVyZ2luZyBhbGwgdGhlIGNvbHVtbiBsaXN0cy4KKwkgKgorCSAqIEFsbCB0aGUgZ2l2 ZW4gcHVibGljYXRpb24tdGFibGUgbWFwcGluZ3MgbXVzdCBiZSBjaGVja2VkLgorCSAqCisJ ICogTXVsdGlwbGUgcHVibGljYXRpb25zIG1pZ2h0IGhhdmUgbXVsdGlwbGUgY29sdW1uIGxp c3RzIGZvciB0aGlzIHJlbGF0aW9uLgorCSAqCisJICogRk9SIEFMTCBUQUJMRVMgYW5kIEZP UiBBTEwgVEFCTEVTIElOIFNDSEVNQSBpbXBsaWVzICJkb24ndCB1c2UgY29sdW1uCisJICog bGlzdCIgc28gaXQgdGFrZXMgcHJlY2VkZW5jZS4KKwkgKi8KKwlmb3JlYWNoKGxjLCBwdWJs aWNhdGlvbnMpCisJeworCQlQdWJsaWNhdGlvbiAqcHViID0gbGZpcnN0KGxjKTsKKwkJSGVh cFR1cGxlCWNmdHVwbGUgPSBOVUxMOworCQlEYXR1bQkJY2ZkYXR1bSA9IDA7CisKKwkJLyoK KwkJICogQXNzdW1lIHRoZXJlJ3Mgbm8gY29sdW1uIGxpc3QuIE9ubHkgaWYgd2UgZmluZCBw Z19wdWJsaWNhdGlvbl9yZWwKKwkJICogZW50cnkgd2l0aCBhIGNvbHVtbiBsaXN0IHdlJ2xs IHN3aXRjaCBpdCB0byBmYWxzZS4KKwkJICovCisJCWJvb2wJCXB1Yl9ub19saXN0ID0gdHJ1 ZTsKKworCQkvKgorCQkgKiBJZiB0aGUgcHVibGljYXRpb24gaXMgRk9SIEFMTCBUQUJMRVMg dGhlbiBpdCBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIGlmCisJCSAqIHRoZXJlIGFyZSBubyBj b2x1bW4gbGlzdHMgKGV2ZW4gaWYgb3RoZXIgcHVibGljYXRpb25zIGhhdmUgYSBsaXN0KS4K KwkJICovCisJCWlmICghcHViLT5hbGx0YWJsZXMpCisJCXsKKwkJCS8qCisJCQkgKiBDaGVj ayBmb3IgdGhlIHByZXNlbmNlIG9mIGEgY29sdW1uIGxpc3QgaW4gdGhpcyBwdWJsaWNhdGlv bi4KKwkJCSAqCisJCQkgKiBOb3RlOiBJZiB3ZSBmaW5kIG5vIHBnX3B1YmxpY2F0aW9uX3Jl bCByb3csIGl0J3MgYSBwdWJsaWNhdGlvbgorCQkJICogZGVmaW5lZCBmb3IgYSB3aG9sZSBz Y2hlbWEsIHNvIGl0IGNhbid0IGhhdmUgYSBjb2x1bW4gbGlzdCwganVzdAorCQkJICogbGlr ZSBhIEZPUiBBTEwgVEFCTEVTIHB1YmxpY2F0aW9uLgorCQkJICovCisJCQljZnR1cGxlID0g U2VhcmNoU3lzQ2FjaGUyKFBVQkxJQ0FUSU9OUkVMTUFQLAorCQkJCQkJCQkJICBPYmplY3RJ ZEdldERhdHVtKGVudHJ5LT5wdWJsaXNoX2FzX3JlbGlkKSwKKwkJCQkJCQkJCSAgT2JqZWN0 SWRHZXREYXR1bShwdWItPm9pZCkpOworCisJCQlpZiAoSGVhcFR1cGxlSXNWYWxpZChjZnR1 cGxlKSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIExvb2t1cCB0aGUgY29sdW1uIGxpc3QgYXR0 cmlidXRlLgorCQkJCSAqCisJCQkJICogTm90ZTogV2UgdXBkYXRlIHRoZSBwdWJfbm9fbGlz dCB2YWx1ZSBkaXJlY3RseSwgYmVjYXVzZSBpZgorCQkJCSAqIHRoZSB2YWx1ZSBpcyBOVUxM LCB3ZSBoYXZlIG5vIGxpc3QgKGFuZCB2aWNlIHZlcnNhKS4KKwkJCQkgKi8KKwkJCQljZmRh dHVtID0gU3lzQ2FjaGVHZXRBdHRyKFBVQkxJQ0FUSU9OUkVMTUFQLCBjZnR1cGxlLAorCQkJ CQkJCQkJCSAgQW51bV9wZ19wdWJsaWNhdGlvbl9yZWxfcHJhdHRycywKKwkJCQkJCQkJCQkg ICZwdWJfbm9fbGlzdCk7CisKKwkJCQkvKgorCQkJCSAqIEJ1aWxkIHRoZSBjb2x1bW4gbGlz dCBiaXRtYXAgaW4gdGhlIHBlci1lbnRyeSBjb250ZXh0LgorCQkJCSAqCisJCQkJICogV2Ug bmVlZCB0byBtZXJnZSBjb2x1bW4gbGlzdHMgZnJvbSBhbGwgcHVibGljYXRpb25zLCBzbyB3 ZQorCQkJCSAqIHVwZGF0ZSB0aGUgc2FtZSBiaXRtYXBzZXQuIElmIHRoZSBjb2x1bW4gbGlz dCBpcyBudWxsLCB3ZQorCQkJCSAqIGludGVycHJldCBpdCBhcyByZXBsaWNhdGluZyBhbGwg Y29sdW1ucy4KKwkJCQkgKi8KKwkJCQlpZiAoIXB1Yl9ub19saXN0KQkvKiB3aGVuIG5vdCBu dWxsICovCisJCQkJeworCQkJCQlwZ291dHB1dF9lbnN1cmVfZW50cnlfY3h0KGRhdGEsIGVu dHJ5KTsKKworCQkJCQllbnRyeS0+Y29sdW1ucyA9IHB1Yl9jb2xsaXN0X3RvX2JpdG1hcHNl dChlbnRyeS0+Y29sdW1ucywKKwkJCQkJCQkJCQkJCQkJCSAgY2ZkYXR1bSwKKwkJCQkJCQkJ CQkJCQkJCSAgZW50cnktPmVudHJ5X2N4dCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoK KwkJICogRm91bmQgYSBwdWJsaWNhdGlvbiB3aXRoIG5vIGNvbHVtbiBsaXN0LCBzbyB3ZSdy ZSBkb25lLiBCdXQgZmlyc3QKKwkJICogZGlzY2FyZCBjb2x1bW4gbGlzdCB3ZSBtaWdodCBo YXZlIGZyb20gcHJlY2VkaW5nIHB1YmxpY2F0aW9ucy4KKwkJICovCisJCWlmIChwdWJfbm9f bGlzdCkKKwkJeworCQkJaWYgKGNmdHVwbGUpCisJCQkJUmVsZWFzZVN5c0NhY2hlKGNmdHVw bGUpOworCisJCQlibXNfZnJlZShlbnRyeS0+Y29sdW1ucyk7CisJCQllbnRyeS0+Y29sdW1u cyA9IE5VTEw7CisKKwkJCWJyZWFrOworCQl9CisKKwkJUmVsZWFzZVN5c0NhY2hlKGNmdHVw bGUpOworCX0JLyogbG9vcCBhbGwgc3Vic2NyaWJlZCBwdWJsaWNhdGlvbnMgKi8KKworfQor CiAvKgogICogSW5pdGlhbGl6ZSB0aGUgc2xvdCBmb3Igc3RvcmluZyBuZXcgYW5kIG9sZCB0 dXBsZXMsIGFuZCBidWlsZCB0aGUgbWFwIHRoYXQKICAqIHdpbGwgYmUgdXNlZCB0byBjb252 ZXJ0IHRoZSByZWxhdGlvbidzIHR1cGxlcyBpbnRvIHRoZSBhbmNlc3RvcidzIGZvcm1hdC4K QEAgLTEyMjQsNyArMTM2MCw3IEBAIHBnb3V0cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAogCQkJT3V0cHV0UGx1Z2lu UHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7CiAJCQlsb2dpY2FscmVwX3dyaXRlX2luc2VydChj dHgtPm91dCwgeGlkLCB0YXJnZXRyZWwsIG5ld19zbG90LAotCQkJCQkJCQkJZGF0YS0+Ymlu YXJ5KTsKKwkJCQkJCQkJCWRhdGEtPmJpbmFyeSwgcmVsZW50cnktPmNvbHVtbnMpOwogCQkJ T3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIAkJCWJyZWFrOwogCQljYXNlIFJFT1JE RVJfQlVGRkVSX0NIQU5HRV9VUERBVEU6CkBAIC0xMjc4LDExICsxNDE0LDEzIEBAIHBnb3V0 cHV0X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJU WE4gKnR4biwKIAkJCXsKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlNFUlQ6 CiAJCQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJl bCwKLQkJCQkJCQkJCQkJbmV3X3Nsb3QsIGRhdGEtPmJpbmFyeSk7CisJCQkJCQkJCQkJCW5l d19zbG90LCBkYXRhLT5iaW5hcnksCisJCQkJCQkJCQkJCXJlbGVudHJ5LT5jb2x1bW5zKTsK IAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfVVBEQVRFOgog CQkJCQlsb2dpY2FscmVwX3dyaXRlX3VwZGF0ZShjdHgtPm91dCwgeGlkLCB0YXJnZXRyZWws Ci0JCQkJCQkJCQkJCW9sZF9zbG90LCBuZXdfc2xvdCwgZGF0YS0+YmluYXJ5KTsKKwkJCQkJ CQkJCQkJb2xkX3Nsb3QsIG5ld19zbG90LCBkYXRhLT5iaW5hcnksCisJCQkJCQkJCQkJCXJl bGVudHJ5LT5jb2x1bW5zKTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBSRU9SREVSX0JVRkZF Ul9DSEFOR0VfREVMRVRFOgogCQkJCQlsb2dpY2FscmVwX3dyaXRlX2RlbGV0ZShjdHgtPm91 dCwgeGlkLCB0YXJnZXRyZWwsCkBAIC0xNzI5LDggKzE4NjcsOSBAQCBnZXRfcmVsX3N5bmNf ZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50cnkt Pm5ld19zbG90ID0gTlVMTDsKIAkJZW50cnktPm9sZF9zbG90ID0gTlVMTDsKIAkJbWVtc2V0 KGVudHJ5LT5leHByc3RhdGUsIDAsIHNpemVvZihlbnRyeS0+ZXhwcnN0YXRlKSk7Ci0JCWVu dHJ5LT5jYWNoZV9leHByX2N4dCA9IE5VTEw7CisJCWVudHJ5LT5lbnRyeV9jeHQgPSBOVUxM OwogCQllbnRyeS0+cHVibGlzaF9hc19yZWxpZCA9IEludmFsaWRPaWQ7CisJCWVudHJ5LT5j b2x1bW5zID0gTlVMTDsKIAkJZW50cnktPmF0dHJtYXAgPSBOVUxMOwogCX0KIApAQCAtMTc3 Niw2ICsxOTE1LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwg UmVsYXRpb24gcmVsYXRpb24pCiAJCWVudHJ5LT5zY2hlbWFfc2VudCA9IGZhbHNlOwogCQls aXN0X2ZyZWUoZW50cnktPnN0cmVhbWVkX3R4bnMpOwogCQllbnRyeS0+c3RyZWFtZWRfdHhu cyA9IE5JTDsKKwkJYm1zX2ZyZWUoZW50cnktPmNvbHVtbnMpOworCQllbnRyeS0+Y29sdW1u cyA9IE5VTEw7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1Ymluc2VydCA9IGZhbHNlOwogCQll bnRyeS0+cHViYWN0aW9ucy5wdWJ1cGRhdGUgPSBmYWxzZTsKIAkJZW50cnktPnB1YmFjdGlv bnMucHViZGVsZXRlID0gZmFsc2U7CkBAIC0xNzk5LDE3ICsxOTQwLDE4IEBAIGdldF9yZWxf c3luY19lbnRyeShQR091dHB1dERhdGEgKmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkv KgogCQkgKiBSb3cgZmlsdGVyIGNhY2hlIGNsZWFudXBzLgogCQkgKi8KLQkJaWYgKGVudHJ5 LT5jYWNoZV9leHByX2N4dCkKLQkJCU1lbW9yeUNvbnRleHREZWxldGUoZW50cnktPmNhY2hl X2V4cHJfY3h0KTsKKwkJaWYgKGVudHJ5LT5lbnRyeV9jeHQpCisJCQlNZW1vcnlDb250ZXh0 RGVsZXRlKGVudHJ5LT5lbnRyeV9jeHQpOwogCi0JCWVudHJ5LT5jYWNoZV9leHByX2N4dCA9 IE5VTEw7CisJCWVudHJ5LT5lbnRyeV9jeHQgPSBOVUxMOwogCQllbnRyeS0+ZXN0YXRlID0g TlVMTDsKIAkJbWVtc2V0KGVudHJ5LT5leHByc3RhdGUsIDAsIHNpemVvZihlbnRyeS0+ZXhw cnN0YXRlKSk7CiAKIAkJLyoKIAkJICogQnVpbGQgcHVibGljYXRpb24gY2FjaGUuIFdlIGNh bid0IHVzZSBvbmUgcHJvdmlkZWQgYnkgcmVsY2FjaGUgYXMKLQkJICogcmVsY2FjaGUgY29u c2lkZXJzIGFsbCBwdWJsaWNhdGlvbnMgZ2l2ZW4gcmVsYXRpb24gaXMgaW4sIGJ1dCBoZXJl Ci0JCSAqIHdlIG9ubHkgbmVlZCB0byBjb25zaWRlciBvbmVzIHRoYXQgdGhlIHN1YnNjcmli ZXIgcmVxdWVzdGVkLgorCQkgKiByZWxjYWNoZSBjb25zaWRlcnMgYWxsIHB1YmxpY2F0aW9u cyB0aGF0IHRoZSBnaXZlbiByZWxhdGlvbiBpcyBpbiwKKwkJICogYnV0IGhlcmUgd2Ugb25s eSBuZWVkIHRvIGNvbnNpZGVyIG9uZXMgdGhhdCB0aGUgc3Vic2NyaWJlcgorCQkgKiByZXF1 ZXN0ZWQuCiAJCSAqLwogCQlmb3JlYWNoKGxjLCBkYXRhLT5wdWJsaWNhdGlvbnMpCiAJCXsK QEAgLTE4NzgsNiArMjAyMCw5IEBAIGdldF9yZWxfc3luY19lbnRyeShQR091dHB1dERhdGEg KmRhdGEsIFJlbGF0aW9uIHJlbGF0aW9uKQogCQkJfQogCiAJCQkvKgorCQkJICogSWYgdGhl IHJlbGF0aW9uIGlzIHRvIGJlIHB1Ymxpc2hlZCwgZGV0ZXJtaW5lIGFjdGlvbnMgdG8KKwkJ CSAqIHB1Ymxpc2gsIGFuZCBsaXN0IG9mIGNvbHVtbnMsIGlmIGFwcHJvcHJpYXRlLgorCQkJ ICoKIAkJCSAqIERvbid0IHB1Ymxpc2ggY2hhbmdlcyBmb3IgcGFydGl0aW9uZWQgdGFibGVz LCBiZWNhdXNlCiAJCQkgKiBwdWJsaXNoaW5nIHRob3NlIG9mIGl0cyBwYXJ0aXRpb25zIHN1 ZmZpY2VzLCB1bmxlc3MgcGFydGl0aW9uCiAJCQkgKiBjaGFuZ2VzIHdvbid0IGJlIHB1Ymxp c2hlZCBkdWUgdG8gcHVidmlhcm9vdCBiZWluZyBzZXQuCkBAIC0xOTM4LDYgKzIwODMsOSBA QCBnZXRfcmVsX3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxh dGlvbikKIAogCQkJLyogSW5pdGlhbGl6ZSB0aGUgcm93IGZpbHRlciAqLwogCQkJcGdvdXRw dXRfcm93X2ZpbHRlcl9pbml0KGRhdGEsIHJlbF9wdWJsaWNhdGlvbnMsIGVudHJ5KTsKKwor CQkJLyogSW5pdGlhbGl6ZSB0aGUgY29sdW1uIGxpc3QgKi8KKwkJCXBnb3V0cHV0X2NvbHVt bl9saXN0X2luaXQoZGF0YSwgcmVsX3B1YmxpY2F0aW9ucywgZW50cnkpOwogCQl9CiAKIAkJ bGlzdF9mcmVlKHB1Ymlkcyk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNo ZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVsY2FjaGUuYwppbmRl eCBmY2NmZmNlNTcyOS4uYTJkYTcyZjBkNDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvcmVs Y2FjaGUuYwpAQCAtNTU1Myw2ICs1NTUzLDggQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9u RGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCQlt ZW1zZXQocHViZGVzYywgMCwgc2l6ZW9mKFB1YmxpY2F0aW9uRGVzYykpOwogCQlwdWJkZXNj LT5yZl92YWxpZF9mb3JfdXBkYXRlID0gdHJ1ZTsKIAkJcHViZGVzYy0+cmZfdmFsaWRfZm9y X2RlbGV0ZSA9IHRydWU7CisJCXB1YmRlc2MtPmNvbHNfdmFsaWRfZm9yX3VwZGF0ZSA9IHRy dWU7CisJCXB1YmRlc2MtPmNvbHNfdmFsaWRfZm9yX2RlbGV0ZSA9IHRydWU7CiAJCXJldHVy bjsKIAl9CiAKQEAgLTU1NjUsNiArNTU2Nyw4IEBAIFJlbGF0aW9uQnVpbGRQdWJsaWNhdGlv bkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1YmxpY2F0aW9uRGVzYyAqcHViZGVzYykKIAlt ZW1zZXQocHViZGVzYywgMCwgc2l6ZW9mKFB1YmxpY2F0aW9uRGVzYykpOwogCXB1YmRlc2Mt PnJmX3ZhbGlkX2Zvcl91cGRhdGUgPSB0cnVlOwogCXB1YmRlc2MtPnJmX3ZhbGlkX2Zvcl9k ZWxldGUgPSB0cnVlOworCXB1YmRlc2MtPmNvbHNfdmFsaWRfZm9yX3VwZGF0ZSA9IHRydWU7 CisJcHViZGVzYy0+Y29sc192YWxpZF9mb3JfZGVsZXRlID0gdHJ1ZTsKIAogCS8qIEZldGNo IHRoZSBwdWJsaWNhdGlvbiBtZW1iZXJzaGlwIGluZm8uICovCiAJcHVib2lkcyA9IEdldFJl bGF0aW9uUHVibGljYXRpb25zKHJlbGlkKTsKQEAgLTU2MTYsNyArNTYyMCw3IEBAIFJlbGF0 aW9uQnVpbGRQdWJsaWNhdGlvbkRlc2MoUmVsYXRpb24gcmVsYXRpb24sIFB1YmxpY2F0aW9u RGVzYyAqcHViZGVzYykKIAkJICovCiAJCWlmICghcHViZm9ybS0+cHViYWxsdGFibGVzICYm CiAJCQkocHViZm9ybS0+cHVidXBkYXRlIHx8IHB1YmZvcm0tPnB1YmRlbGV0ZSkgJiYKLQkJ CWNvbnRhaW5faW52YWxpZF9yZmNvbHVtbihwdWJpZCwgcmVsYXRpb24sIGFuY2VzdG9ycywK KwkJCXB1Yl9yZl9jb250YWluc19pbnZhbGlkX2NvbHVtbihwdWJpZCwgcmVsYXRpb24sIGFu Y2VzdG9ycywKIAkJCQkJCQkJCSBwdWJmb3JtLT5wdWJ2aWFyb290KSkKIAkJewogCQkJaWYg KHB1YmZvcm0tPnB1YnVwZGF0ZSkKQEAgLTU2MjUsNiArNTYyOSwyMyBAQCBSZWxhdGlvbkJ1 aWxkUHVibGljYXRpb25EZXNjKFJlbGF0aW9uIHJlbGF0aW9uLCBQdWJsaWNhdGlvbkRlc2Mg KnB1YmRlc2MpCiAJCQkJcHViZGVzYy0+cmZfdmFsaWRfZm9yX2RlbGV0ZSA9IGZhbHNlOwog CQl9CiAKKwkJLyoKKwkJICogQ2hlY2sgaWYgYWxsIGNvbHVtbnMgYXJlIHBhcnQgb2YgdGhl IFJFUExJQ0EgSURFTlRJVFkgaW5kZXggb3Igbm90LgorCQkgKgorCQkgKiBJZiB0aGUgcHVi bGljYXRpb24gaXMgRk9SIEFMTCBUQUJMRVMgdGhlbiBpdCBtZWFucyB0aGUgdGFibGUgaGFz IG5vCisJCSAqIGNvbHVtbiBsaXN0IGFuZCB3ZSBjYW4gc2tpcCB0aGUgdmFsaWRhdGlvbi4K KwkJICovCisJCWlmICghcHViZm9ybS0+cHViYWxsdGFibGVzICYmCisJCQkocHViZm9ybS0+ cHVidXBkYXRlIHx8IHB1YmZvcm0tPnB1YmRlbGV0ZSkgJiYKKwkJCXB1Yl9jb2xsaXN0X2Nv bnRhaW5zX2ludmFsaWRfY29sdW1uKHB1YmlkLCByZWxhdGlvbiwgYW5jZXN0b3JzLAorCQkJ CQkJCQkJIHB1YmZvcm0tPnB1YnZpYXJvb3QpKQorCQl7CisJCQlpZiAocHViZm9ybS0+cHVi dXBkYXRlKQorCQkJCXB1YmRlc2MtPmNvbHNfdmFsaWRfZm9yX3VwZGF0ZSA9IGZhbHNlOwor CQkJaWYgKHB1YmZvcm0tPnB1YmRlbGV0ZSkKKwkJCQlwdWJkZXNjLT5jb2xzX3ZhbGlkX2Zv cl9kZWxldGUgPSBmYWxzZTsKKwkJfQorCiAJCVJlbGVhc2VTeXNDYWNoZSh0dXApOwogCiAJ CS8qCkBAIC01NjM2LDYgKzU2NTcsMTYgQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9uRGVz YyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCQkJcHVi ZGVzYy0+cHViYWN0aW9ucy5wdWJkZWxldGUgJiYgcHViZGVzYy0+cHViYWN0aW9ucy5wdWJ0 cnVuY2F0ZSAmJgogCQkJIXB1YmRlc2MtPnJmX3ZhbGlkX2Zvcl91cGRhdGUgJiYgIXB1YmRl c2MtPnJmX3ZhbGlkX2Zvcl9kZWxldGUpCiAJCQlicmVhazsKKworCQkvKgorCQkgKiBJZiB3 ZSBrbm93IGV2ZXJ5dGhpbmcgaXMgcmVwbGljYXRlZCBhbmQgdGhlIGNvbHVtbiBsaXN0IGlz IGludmFsaWQKKwkJICogZm9yIHVwZGF0ZSBhbmQgZGVsZXRlLCB0aGVyZSBpcyBubyBwb2lu dCB0byBjaGVjayBmb3Igb3RoZXIKKwkJICogcHVibGljYXRpb25zLgorCQkgKi8KKwkJaWYg KHB1YmRlc2MtPnB1YmFjdGlvbnMucHViaW5zZXJ0ICYmIHB1YmRlc2MtPnB1YmFjdGlvbnMu cHVidXBkYXRlICYmCisJCQlwdWJkZXNjLT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSAmJiBwdWJk ZXNjLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlICYmCisJCQkhcHViZGVzYy0+Y29sc192YWxp ZF9mb3JfdXBkYXRlICYmICFwdWJkZXNjLT5jb2xzX3ZhbGlkX2Zvcl9kZWxldGUpCisJCQli cmVhazsKIAl9CiAKIAlpZiAocmVsYXRpb24tPnJkX3B1YmRlc2MpCmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpp bmRleCA3MjVjZDJlNGViYy4uYmU0MGFjZDNlMzcgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYwpAQCAtNDEw MSw2ICs0MTAxLDcgQEAgZ2V0UHVibGljYXRpb25UYWJsZXMoQXJjaGl2ZSAqZm91dCwgVGFi bGVJbmZvIHRibGluZm9bXSwgaW50IG51bVRhYmxlcykKIAlpbnQJCQlpX3BycHViaWQ7CiAJ aW50CQkJaV9wcnJlbGlkOwogCWludAkJCWlfcHJyZWxxdWFsOworCWludAkJCWlfcHJhdHRy czsKIAlpbnQJCQlpLAogCQkJCWosCiAJCQkJbnR1cHM7CkBAIC00MTE0LDEyICs0MTE1LDIw IEBAIGdldFB1YmxpY2F0aW9uVGFibGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0Ymxp bmZvW10sIGludCBudW1UYWJsZXMpCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTUw MDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKIAkJCQkJCQkgIlNFTEVDVCB0 YWJsZW9pZCwgb2lkLCBwcnB1YmlkLCBwcnJlbGlkLCAiCi0JCQkJCQkJICJwZ19jYXRhbG9n LnBnX2dldF9leHByKHBycXVhbCwgcHJyZWxpZCkgQVMgcHJyZWxxdWFsICIKLQkJCQkJCQkg IkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvbl9yZWwiKTsKKwkJCQkJCQkgInBnX2Nh dGFsb2cucGdfZ2V0X2V4cHIocHJxdWFsLCBwcnJlbGlkKSBBUyBwcnJlbHF1YWwsICIKKwkJ CQkJCQkgIihDQVNFXG4iCisJCQkJCQkJICIgIFdIRU4gcHIucHJhdHRycyBJUyBOT1QgTlVM TCBUSEVOXG4iCisJCQkJCQkJICIgICAgKFNFTEVDVCBhcnJheV9hZ2coYXR0bmFtZSlcbiIK KwkJCQkJCQkgIiAgICAgICBGUk9NXG4iCisJCQkJCQkJICIgICAgICAgICBwZ19jYXRhbG9n LmdlbmVyYXRlX3NlcmllcygwLCBwZ19jYXRhbG9nLmFycmF5X3VwcGVyKHByLnByYXR0cnM6 OnBnX2NhdGFsb2cuaW50MltdLCAxKSkgcyxcbiIKKwkJCQkJCQkgIiAgICAgICAgIHBnX2Nh dGFsb2cucGdfYXR0cmlidXRlXG4iCisJCQkJCQkJICIgICAgICBXSEVSRSBhdHRyZWxpZCA9 IHByLnBycmVsaWQgQU5EIGF0dG51bSA9IHByYXR0cnNbc10pXG4iCisJCQkJCQkJICIgIEVM U0UgTlVMTCBFTkQpIHByYXR0cnMgIgorCQkJCQkJCSAiRlJPTSBwZ19jYXRhbG9nLnBnX3B1 YmxpY2F0aW9uX3JlbCBwciIpOwogCWVsc2UKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVl cnksCiAJCQkJCQkJICJTRUxFQ1QgdGFibGVvaWQsIG9pZCwgcHJwdWJpZCwgcHJyZWxpZCwg IgotCQkJCQkJCSAiTlVMTCBBUyBwcnJlbHF1YWwgIgorCQkJCQkJCSAiTlVMTCBBUyBwcnJl bHF1YWwsIE5VTEwgQVMgcHJhdHRycyAiCiAJCQkJCQkJICJGUk9NIHBnX2NhdGFsb2cucGdf cHVibGljYXRpb25fcmVsIik7CiAJcmVzID0gRXhlY3V0ZVNxbFF1ZXJ5KGZvdXQsIHF1ZXJ5 LT5kYXRhLCBQR1JFU19UVVBMRVNfT0spOwogCkBAIC00MTMwLDYgKzQxMzksNyBAQCBnZXRQ dWJsaWNhdGlvblRhYmxlcyhBcmNoaXZlICpmb3V0LCBUYWJsZUluZm8gdGJsaW5mb1tdLCBp bnQgbnVtVGFibGVzKQogCWlfcHJwdWJpZCA9IFBRZm51bWJlcihyZXMsICJwcnB1YmlkIik7 CiAJaV9wcnJlbGlkID0gUFFmbnVtYmVyKHJlcywgInBycmVsaWQiKTsKIAlpX3BycmVscXVh bCA9IFBRZm51bWJlcihyZXMsICJwcnJlbHF1YWwiKTsKKwlpX3ByYXR0cnMgPSBQUWZudW1i ZXIocmVzLCAicHJhdHRycyIpOwogCiAJLyogdGhpcyBhbGxvY2F0aW9uIG1heSBiZSBtb3Jl IHRoYW4gd2UgbmVlZCAqLwogCXB1YnJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9m KFB1YmxpY2F0aW9uUmVsSW5mbykpOwpAQCAtNDE3NSw2ICs0MTg1LDI4IEBAIGdldFB1Ymxp Y2F0aW9uVGFibGVzKEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBu dW1UYWJsZXMpCiAJCWVsc2UKIAkJCXB1YnJpbmZvW2pdLnB1YnJlbHF1YWwgPSBwZ19zdHJk dXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHJyZWxxdWFsKSk7CiAKKwkJaWYgKCFQUWdldGlz bnVsbChyZXMsIGksIGlfcHJhdHRycykpCisJCXsKKwkJCWNoYXIJICAqKmF0dG5hbWVzOwor CQkJaW50CQkJbmF0dG5hbWVzOworCQkJUFFFeHBCdWZmZXIgYXR0cmliczsKKworCQkJaWYg KCFwYXJzZVBHQXJyYXkoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHJhdHRycyksCisJCQkJCQkJ ICAmYXR0bmFtZXMsICZuYXR0bmFtZXMpKQorCQkJCWZhdGFsKCJjb3VsZCBub3QgcGFyc2Ug JXMgYXJyYXkiLCAicHJhdHRycyIpOworCQkJYXR0cmlicyA9IGNyZWF0ZVBRRXhwQnVmZmVy KCk7CisJCQlmb3IgKGludCBrID0gMDsgayA8IG5hdHRuYW1lczsgaysrKQorCQkJeworCQkJ CWlmIChrID4gMCkKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoYXR0cmlicywgIiwgIik7 CisKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihhdHRyaWJzLCBmbXRJZChhdHRuYW1lc1tr XSkpOworCQkJfQorCQkJcHVicmluZm9bal0ucHVicmF0dHJzID0gYXR0cmlicy0+ZGF0YTsK KwkJfQorCQllbHNlCisJCQlwdWJyaW5mb1tqXS5wdWJyYXR0cnMgPSBOVUxMOworCiAJCS8q IERlY2lkZSB3aGV0aGVyIHdlIHdhbnQgdG8gZHVtcCBpdCAqLwogCQlzZWxlY3REdW1wYWJs ZVB1YmxpY2F0aW9uT2JqZWN0KCYocHVicmluZm9bal0uZG9iaiksIGZvdXQpOwogCkBAIC00 MjQ5LDEwICs0MjgxLDEzIEBAIGR1bXBQdWJsaWNhdGlvblRhYmxlKEFyY2hpdmUgKmZvdXQs IGNvbnN0IFB1YmxpY2F0aW9uUmVsSW5mbyAqcHVicmluZm8pCiAKIAlxdWVyeSA9IGNyZWF0 ZVBRRXhwQnVmZmVyKCk7CiAKLQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwgIkFMVEVSIFBV QkxJQ0FUSU9OICVzIEFERCBUQUJMRSBPTkxZIiwKKwlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVy eSwgIkFMVEVSIFBVQkxJQ0FUSU9OICVzIEFERCBUQUJMRSBPTkxZICIsCiAJCQkJCSAgZm10 SWQocHViaW5mby0+ZG9iai5uYW1lKSk7Ci0JYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksICIg JXMiLAotCQkJCQkgIGZtdFF1YWxpZmllZER1bXBhYmxlKHRiaW5mbykpOworCWFwcGVuZFBR RXhwQnVmZmVyU3RyKHF1ZXJ5LCBmbXRRdWFsaWZpZWREdW1wYWJsZSh0YmluZm8pKTsKKwor CWlmIChwdWJyaW5mby0+cHVicmF0dHJzKQorCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwg IiAoJXMpIiwgcHVicmluZm8tPnB1YnJhdHRycyk7CisKIAlpZiAocHVicmluZm8tPnB1YnJl bHF1YWwpCiAJewogCQkvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAu aCBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKaW5kZXggNzcyZGMwY2Y3YTIuLjFkMjFj MjkwNmYxIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCisrKyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTYzMiw2ICs2MzIsNyBAQCB0eXBlZGVmIHN0 cnVjdCBfUHVibGljYXRpb25SZWxJbmZvCiAJUHVibGljYXRpb25JbmZvICpwdWJsaWNhdGlv bjsKIAlUYWJsZUluZm8gICpwdWJ0YWJsZTsKIAljaGFyCSAgICpwdWJyZWxxdWFsOworCWNo YXIJICAgKnB1YnJhdHRyczsKIH0gUHVibGljYXRpb25SZWxJbmZvOwogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3QvMDAyX3BnX2R1bXAucGwgYi9zcmMvYmluL3BnX2R1 bXAvdC8wMDJfcGdfZHVtcC5wbAppbmRleCBmZDEwNTJlNWRiOC4uMDVhN2UyOGJkY2MgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCisrKyBiL3NyYy9i aW4vcGdfZHVtcC90LzAwMl9wZ19kdW1wLnBsCkBAIC0yNDI4LDYgKzI0MjgsMjggQEAgbXkg JXRlc3RzID0gKAogCQl1bmxpa2UgPT4geyBleGNsdWRlX2R1bXBfdGVzdF9zY2hlbWEgPT4g MSwgfSwKIAl9LAogCisJJ0FMVEVSIFBVQkxJQ0FUSU9OIHB1YjEgQUREIFRBQkxFIHRlc3Rf c2l4dGhfdGFibGUgKGNvbDMsIGNvbDIpJyA9PiB7CisJCWNyZWF0ZV9vcmRlciA9PiA1MiwK KwkJY3JlYXRlX3NxbCA9PgorCQkgICdBTFRFUiBQVUJMSUNBVElPTiBwdWIxIEFERCBUQUJM RSBkdW1wX3Rlc3QudGVzdF9zaXh0aF90YWJsZSAoY29sMywgY29sMik7JywKKwkJcmVnZXhw ID0+IHFyL14KKwkJCVxRQUxURVIgUFVCTElDQVRJT04gcHViMSBBREQgVEFCTEUgT05MWSBk dW1wX3Rlc3QudGVzdF9zaXh0aF90YWJsZSAoY29sMiwgY29sMyk7XEUKKwkJCS94bSwKKwkJ bGlrZSA9PiB7ICVmdWxsX3J1bnMsIHNlY3Rpb25fcG9zdF9kYXRhID0+IDEsIH0sCisJCXVu bGlrZSA9PiB7IGV4Y2x1ZGVfZHVtcF90ZXN0X3NjaGVtYSA9PiAxLCB9LAorCX0sCisKKwkn QUxURVIgUFVCTElDQVRJT04gcHViMSBBREQgVEFCTEUgdGVzdF9zZXZlbnRoX3RhYmxlIChj b2wzLCBjb2wyKSBXSEVSRSAoY29sMSA9IDEpJyA9PiB7CisJCWNyZWF0ZV9vcmRlciA9PiA1 MiwKKwkJY3JlYXRlX3NxbCA9PgorCQkgICdBTFRFUiBQVUJMSUNBVElPTiBwdWIxIEFERCBU QUJMRSBkdW1wX3Rlc3QudGVzdF9zZXZlbnRoX3RhYmxlIChjb2wzLCBjb2wyKSBXSEVSRSAo Y29sMSA9IDEpOycsCisJCXJlZ2V4cCA9PiBxci9eCisJCQlcUUFMVEVSIFBVQkxJQ0FUSU9O IHB1YjEgQUREIFRBQkxFIE9OTFkgZHVtcF90ZXN0LnRlc3Rfc2V2ZW50aF90YWJsZSAoY29s MiwgY29sMykgV0hFUkUgKChjb2wxID0gMSkpO1xFCisJCQkveG0sCisJCWxpa2UgPT4geyAl ZnVsbF9ydW5zLCBzZWN0aW9uX3Bvc3RfZGF0YSA9PiAxLCB9LAorCQl1bmxpa2UgPT4geyBl eGNsdWRlX2R1bXBfdGVzdF9zY2hlbWEgPT4gMSwgfSwKKwl9LAorCiAJJ0FMVEVSIFBVQkxJ Q0FUSU9OIHB1YjMgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIGR1bXBfdGVzdCcgPT4gewog CQljcmVhdGVfb3JkZXIgPT4gNTEsCiAJCWNyZWF0ZV9zcWwgPT4KQEAgLTI3NzgsNiArMjgw MCw0NCBAQCBteSAldGVzdHMgPSAoCiAJCXVubGlrZSA9PiB7IGV4Y2x1ZGVfZHVtcF90ZXN0 X3NjaGVtYSA9PiAxLCB9LAogCX0sCiAKKwknQ1JFQVRFIFRBQkxFIHRlc3Rfc2l4dGhfdGFi bGUnID0+IHsKKwkJY3JlYXRlX29yZGVyID0+IDYsCisJCWNyZWF0ZV9zcWwgICA9PiAnQ1JF QVRFIFRBQkxFIGR1bXBfdGVzdC50ZXN0X3NpeHRoX3RhYmxlICgKKwkJCQkJCSAgIGNvbDEg aW50LAorCQkJCQkJICAgY29sMiB0ZXh0LAorCQkJCQkJICAgY29sMyBieXRlYQorCQkJCQkg ICApOycsCisJCXJlZ2V4cCA9PiBxci9eCisJCQlcUUNSRUFURSBUQUJMRSBkdW1wX3Rlc3Qu dGVzdF9zaXh0aF90YWJsZSAoXEUKKwkJCVxuXHMrXFFjb2wxIGludGVnZXIsXEUKKwkJCVxu XHMrXFFjb2wyIHRleHQsXEUKKwkJCVxuXHMrXFFjb2wzIGJ5dGVhXEUKKwkJCVxuXCk7CisJ CQkveG0sCisJCWxpa2UgPT4KKwkJICB7ICVmdWxsX3J1bnMsICVkdW1wX3Rlc3Rfc2NoZW1h X3J1bnMsIHNlY3Rpb25fcHJlX2RhdGEgPT4gMSwgfSwKKwkJdW5saWtlID0+IHsgZXhjbHVk ZV9kdW1wX3Rlc3Rfc2NoZW1hID0+IDEsIH0sCisJfSwKKworCSdDUkVBVEUgVEFCTEUgdGVz dF9zZXZlbnRoX3RhYmxlJyA9PiB7CisJCWNyZWF0ZV9vcmRlciA9PiA2LAorCQljcmVhdGVf c3FsICAgPT4gJ0NSRUFURSBUQUJMRSBkdW1wX3Rlc3QudGVzdF9zZXZlbnRoX3RhYmxlICgK KwkJCQkJCSAgIGNvbDEgaW50LAorCQkJCQkJICAgY29sMiB0ZXh0LAorCQkJCQkJICAgY29s MyBieXRlYQorCQkJCQkgICApOycsCisJCXJlZ2V4cCA9PiBxci9eCisJCQlcUUNSRUFURSBU QUJMRSBkdW1wX3Rlc3QudGVzdF9zZXZlbnRoX3RhYmxlIChcRQorCQkJXG5ccytcUWNvbDEg aW50ZWdlcixcRQorCQkJXG5ccytcUWNvbDIgdGV4dCxcRQorCQkJXG5ccytcUWNvbDMgYnl0 ZWFcRQorCQkJXG5cKTsKKwkJCS94bSwKKwkJbGlrZSA9PgorCQkgIHsgJWZ1bGxfcnVucywg JWR1bXBfdGVzdF9zY2hlbWFfcnVucywgc2VjdGlvbl9wcmVfZGF0YSA9PiAxLCB9LAorCQl1 bmxpa2UgPT4geyBleGNsdWRlX2R1bXBfdGVzdF9zY2hlbWEgPT4gMSwgfSwKKwl9LAorCiAJ J0NSRUFURSBUQUJMRSB0ZXN0X3RhYmxlX2lkZW50aXR5JyA9PiB7CiAJCWNyZWF0ZV9vcmRl ciA9PiAzLAogCQljcmVhdGVfc3FsICAgPT4gJ0NSRUFURSBUQUJMRSBkdW1wX3Rlc3QudGVz dF90YWJsZV9pZGVudGl0eSAoCmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUu YyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IDk5MWJmYzE1NDZiLi44OGJiNzVh YzY1OCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jp bi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTI4OTIsNiArMjg5Miw3IEBAIGRlc2NyaWJlT25lVGFi bGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCQkJcHJpbnRmUFFFeHBCdWZm ZXIoJmJ1ZiwKIAkJCQkJCQkJICAiU0VMRUNUIHB1Ym5hbWVcbiIKIAkJCQkJCQkJICAiCQks IE5VTExcbiIKKwkJCQkJCQkJICAiCQksIE5VTExcbiIKIAkJCQkJCQkJICAiRlJPTSBwZ19j YXRhbG9nLnBnX3B1YmxpY2F0aW9uIHBcbiIKIAkJCQkJCQkJICAiCQlKT0lOIHBnX2NhdGFs b2cucGdfcHVibGljYXRpb25fbmFtZXNwYWNlIHBuIE9OIHAub2lkID0gcG4ucG5wdWJpZFxu IgogCQkJCQkJCQkgICIJCUpPSU4gcGdfY2F0YWxvZy5wZ19jbGFzcyBwYyBPTiBwYy5yZWxu YW1lc3BhY2UgPSBwbi5wbm5zcGlkXG4iCkBAIC0yODk5LDYgKzI5MDAsMTIgQEAgZGVzY3Jp YmVPbmVUYWJsZURldGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQkJCQkJICAi VU5JT05cbiIKIAkJCQkJCQkJICAiU0VMRUNUIHB1Ym5hbWVcbiIKIAkJCQkJCQkJICAiCQks IHBnX2dldF9leHByKHByLnBycXVhbCwgYy5vaWQpXG4iCisJCQkJCQkJCSAgIgkJLCAoQ0FT RSBXSEVOIHByLnByYXR0cnMgSVMgTk9UIE5VTEwgVEhFTlxuIgorCQkJCQkJCQkgICIJCQko U0VMRUNUIHN0cmluZ19hZ2coYXR0bmFtZSwgJywgJylcbiIKKwkJCQkJCQkJICAiCQkJICBG Uk9NIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzKDAsIHBnX2NhdGFsb2cuYXJyYXlfdXBw ZXIocHIucHJhdHRyczo6cGdfY2F0YWxvZy5pbnQyW10sIDEpKSBzLFxuIgorCQkJCQkJCQkg ICIJCQkJICAgcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGVcbiIKKwkJCQkJCQkJICAiCQkJIFdI RVJFIGF0dHJlbGlkID0gcHIucHJyZWxpZCBBTkQgYXR0bnVtID0gcHJhdHRyc1tzXSlcbiIK KwkJCQkJCQkJICAiCQkgICBFTFNFIE5VTEwgRU5EKSAiCiAJCQkJCQkJCSAgIkZST00gcGdf Y2F0YWxvZy5wZ19wdWJsaWNhdGlvbiBwXG4iCiAJCQkJCQkJCSAgIgkJSk9JTiBwZ19jYXRh bG9nLnBnX3B1YmxpY2F0aW9uX3JlbCBwciBPTiBwLm9pZCA9IHByLnBycHViaWRcbiIKIAkJ CQkJCQkJICAiCQlKT0lOIHBnX2NhdGFsb2cucGdfY2xhc3MgYyBPTiBjLm9pZCA9IHByLnBy cmVsaWRcbiIKQEAgLTI5MDYsNiArMjkxMyw3IEBAIGRlc2NyaWJlT25lVGFibGVEZXRhaWxz KGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCQkJCQkJCSAgIlVOSU9OXG4iCiAJCQkJCQkJ CSAgIlNFTEVDVCBwdWJuYW1lXG4iCiAJCQkJCQkJCSAgIgkJLCBOVUxMXG4iCisJCQkJCQkJ CSAgIgkJLCBOVUxMXG4iCiAJCQkJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNh dGlvbiBwXG4iCiAJCQkJCQkJCSAgIldIRVJFIHAucHViYWxsdGFibGVzIEFORCBwZ19jYXRh bG9nLnBnX3JlbGF0aW9uX2lzX3B1Ymxpc2hhYmxlKCclcycpXG4iCiAJCQkJCQkJCSAgIk9S REVSIEJZIDE7IiwKQEAgLTI5MTYsMTIgKzI5MjQsMTQgQEAgZGVzY3JpYmVPbmVUYWJsZURl dGFpbHMoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQlwcmludGZQUUV4cEJ1ZmZlcigm YnVmLAogCQkJCQkJCQkgICJTRUxFQ1QgcHVibmFtZVxuIgogCQkJCQkJCQkgICIJCSwgTlVM TFxuIgorCQkJCQkJCQkgICIJCSwgTlVMTFxuIgogCQkJCQkJCQkgICJGUk9NIHBnX2NhdGFs b2cucGdfcHVibGljYXRpb24gcFxuIgogCQkJCQkJCQkgICJKT0lOIHBnX2NhdGFsb2cucGdf cHVibGljYXRpb25fcmVsIHByIE9OIHAub2lkID0gcHIucHJwdWJpZFxuIgogCQkJCQkJCQkg ICJXSEVSRSBwci5wcnJlbGlkID0gJyVzJ1xuIgogCQkJCQkJCQkgICJVTklPTiBBTExcbiIK IAkJCQkJCQkJICAiU0VMRUNUIHB1Ym5hbWVcbiIKIAkJCQkJCQkJICAiCQksIE5VTExcbiIK KwkJCQkJCQkJICAiCQksIE5VTExcbiIKIAkJCQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBn X3B1YmxpY2F0aW9uIHBcbiIKIAkJCQkJCQkJICAiV0hFUkUgcC5wdWJhbGx0YWJsZXMgQU5E IHBnX2NhdGFsb2cucGdfcmVsYXRpb25faXNfcHVibGlzaGFibGUoJyVzJylcbiIKIAkJCQkJ CQkJICAiT1JERVIgQlkgMTsiLApAQCAtMjk0Myw2ICsyOTUzLDExIEBAIGRlc2NyaWJlT25l VGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCiAJCQkJcHJpbnRmUFFFeHBC dWZmZXIoJmJ1ZiwgIiAgICBcIiVzXCIiLAogCQkJCQkJCQkgIFBRZ2V0dmFsdWUocmVzdWx0 LCBpLCAwKSk7CiAKKwkJCQkvKiBjb2x1bW4gbGlzdCAoaWYgYW55KSAqLworCQkJCWlmICgh UFFnZXRpc251bGwocmVzdWx0LCBpLCAyKSkKKwkJCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1 ZiwgIiAoJXMpIiwKKwkJCQkJCQkJCSAgUFFnZXR2YWx1ZShyZXN1bHQsIGksIDIpKTsKKwog CQkJCS8qIHJvdyBmaWx0ZXIgKGlmIGFueSkgKi8KIAkJCQlpZiAoIVBRZ2V0aXNudWxsKHJl c3VsdCwgaSwgMSkpCiAJCQkJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsICIgV0hFUkUgJXMi LApAQCAtNTg4OCw3ICs1OTAzLDcgQEAgbGlzdFB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpw YXR0ZXJuKQogICovCiBzdGF0aWMgYm9vbAogYWRkRm9vdGVyVG9QdWJsaWNhdGlvbkRlc2Mo UFFFeHBCdWZmZXIgYnVmLCBjaGFyICpmb290ZXJtc2csCi0JCQkJCQkgICBib29sIHNpbmds ZWNvbCwgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQpCisJCQkJCQkgICBib29sIGFzX3NjaGVt YSwgcHJpbnRUYWJsZUNvbnRlbnQgKmNvbnQpCiB7CiAJUEdyZXN1bHQgICAqcmVzOwogCWlu dAkJCWNvdW50ID0gMDsKQEAgLTU5MDUsMTUgKzU5MjAsMTkgQEAgYWRkRm9vdGVyVG9QdWJs aWNhdGlvbkRlc2MoUFFFeHBCdWZmZXIgYnVmLCBjaGFyICpmb290ZXJtc2csCiAKIAlmb3Ig KGkgPSAwOyBpIDwgY291bnQ7IGkrKykKIAl7Ci0JCWlmICghc2luZ2xlY29sKQorCQlpZiAo YXNfc2NoZW1hKQorCQkJcHJpbnRmUFFFeHBCdWZmZXIoYnVmLCAiICAgIFwiJXNcIiIsIFBR Z2V0dmFsdWUocmVzLCBpLCAwKSk7CisJCWVsc2UKIAkJewogCQkJcHJpbnRmUFFFeHBCdWZm ZXIoYnVmLCAiICAgIFwiJXMuJXNcIiIsIFBRZ2V0dmFsdWUocmVzLCBpLCAwKSwKIAkJCQkJ CQkgIFBRZ2V0dmFsdWUocmVzLCBpLCAxKSk7CisKKwkJCWlmICghUFFnZXRpc251bGwocmVz LCBpLCAzKSkKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIgKCVzKSIsIFBRZ2V0dmFs dWUocmVzLCBpLCAzKSk7CisKIAkJCWlmICghUFFnZXRpc251bGwocmVzLCBpLCAyKSkKIAkJ CQlhcHBlbmRQUUV4cEJ1ZmZlcihidWYsICIgV0hFUkUgJXMiLCBQUWdldHZhbHVlKHJlcywg aSwgMikpOwogCQl9Ci0JCWVsc2UKLQkJCXByaW50ZlBRRXhwQnVmZmVyKGJ1ZiwgIiAgICBc IiVzXCIiLCBQUWdldHZhbHVlKHJlcywgaSwgMCkpOwogCiAJCXByaW50VGFibGVBZGRGb290 ZXIoY29udCwgYnVmLT5kYXRhKTsKIAl9CkBAIC02MDQyLDExICs2MDYxLDIyIEBAIGRlc2Ny aWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJCQlwcmludGZQUUV4cEJ1 ZmZlcigmYnVmLAogCQkJCQkJCSAgIlNFTEVDVCBuLm5zcG5hbWUsIGMucmVsbmFtZSIpOwog CQkJaWYgKHBzZXQuc3ZlcnNpb24gPj0gMTUwMDAwKQorCQkJewogCQkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKCZidWYsCiAJCQkJCQkJCQkgIiwgcGdfZ2V0X2V4cHIocHIucHJxdWFsLCBj Lm9pZCkiKTsKKwkJCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJCQkJCQkJICIs IChDQVNFIFdIRU4gcHIucHJhdHRycyBJUyBOT1QgTlVMTCBUSEVOXG4iCisJCQkJCQkJCQkg IiAgICAgcGdfY2F0YWxvZy5hcnJheV90b19zdHJpbmcoIgorCQkJCQkJCQkJICIgICAgICBB UlJBWShTRUxFQ1QgYXR0bmFtZVxuIgorCQkJCQkJCQkJICIgICAgICAgICAgICAgIEZST01c biIKKwkJCQkJCQkJCSAiICAgICAgICAgICAgICAgIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2Vy aWVzKDAsIHBnX2NhdGFsb2cuYXJyYXlfdXBwZXIocHIucHJhdHRyczo6cGdfY2F0YWxvZy5p bnQyW10sIDEpKSBzLFxuIgorCQkJCQkJCQkJICIgICAgICAgICAgICAgICAgcGdfY2F0YWxv Zy5wZ19hdHRyaWJ1dGVcbiIKKwkJCQkJCQkJCSAiICAgICAgICBXSEVSRSBhdHRyZWxpZCA9 IGMub2lkIEFORCBhdHRudW0gPSBwcmF0dHJzW3NdKSwgJywgJylcbiIKKwkJCQkJCQkJCSAi ICAgICAgIEVMU0UgTlVMTCBFTkQpIik7CisJCQl9CiAJCQllbHNlCiAJCQkJYXBwZW5kUFFF eHBCdWZmZXJTdHIoJmJ1ZiwKLQkJCQkJCQkJCSAiLCBOVUxMIik7CisJCQkJCQkJCQkgIiwg TlVMTCwgTlVMTCIpOwogCQkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCQkgICJc bkZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjLFxuIgogCQkJCQkJCSAgIiAgICAgcGdfY2F0 YWxvZy5wZ19uYW1lc3BhY2UgbixcbiIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHVibGljYXRpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRp b24uaAppbmRleCBmZTc3M2NmOWI3ZC4uYTU2YzExMDI0NjMgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3B1YmxpY2F0aW9uLmgKQEAgLTg1LDYgKzg1LDEzIEBAIHR5cGVkZWYgc3RydWN0 IFB1YmxpY2F0aW9uRGVzYwogCSAqLwogCWJvb2wJCXJmX3ZhbGlkX2Zvcl91cGRhdGU7CiAJ Ym9vbAkJcmZfdmFsaWRfZm9yX2RlbGV0ZTsKKworCS8qCisJICogdHJ1ZSBpZiB0aGUgY29s dW1ucyBhcmUgcGFydCBvZiB0aGUgcmVwbGljYSBpZGVudGl0eSBvciB0aGUgcHVibGljYXRp b24gYWN0aW9ucworCSAqIGRvIG5vdCBpbmNsdWRlIFVQREFURSBvciBERUxFVEUuCisJICov CisJYm9vbAkJY29sc192YWxpZF9mb3JfdXBkYXRlOworCWJvb2wJCWNvbHNfdmFsaWRfZm9y X2RlbGV0ZTsKIH0gUHVibGljYXRpb25EZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQdWJsaWNh dGlvbgpAQCAtMTAwLDYgKzEwNyw3IEBAIHR5cGVkZWYgc3RydWN0IFB1YmxpY2F0aW9uUmVs SW5mbwogewogCVJlbGF0aW9uCXJlbGF0aW9uOwogCU5vZGUJICAgKndoZXJlQ2xhdXNlOwor CUxpc3QJICAgKmNvbHVtbnM7CiB9IFB1YmxpY2F0aW9uUmVsSW5mbzsKIAogZXh0ZXJuIFB1 YmxpY2F0aW9uICpHZXRQdWJsaWNhdGlvbihPaWQgcHViaWQpOwpAQCAtMTIzLDggKzEzMSwx MSBAQCB0eXBlZGVmIGVudW0gUHVibGljYXRpb25QYXJ0T3B0CiB9IFB1YmxpY2F0aW9uUGFy dE9wdDsKIAogZXh0ZXJuIExpc3QgKkdldFB1YmxpY2F0aW9uUmVsYXRpb25zKE9pZCBwdWJp ZCwgUHVibGljYXRpb25QYXJ0T3B0IHB1Yl9wYXJ0b3B0KTsKK2V4dGVybiBMaXN0ICpHZXRS ZWxhdGlvbkNvbHVtblBhcnRpYWxQdWJsaWNhdGlvbnMoT2lkIHJlbGlkKTsKK2V4dGVybiBM aXN0ICpHZXRSZWxhdGlvbkNvbHVtbkxpc3RJblB1YmxpY2F0aW9uKE9pZCByZWxpZCwgT2lk IHB1YmlkKTsKIGV4dGVybiBMaXN0ICpHZXRBbGxUYWJsZXNQdWJsaWNhdGlvbnModm9pZCk7 CiBleHRlcm4gTGlzdCAqR2V0QWxsVGFibGVzUHVibGljYXRpb25SZWxhdGlvbnMoYm9vbCBw dWJ2aWFyb290KTsKK2V4dGVybiB2b2lkIEdldEFjdGlvbnNJblB1YmxpY2F0aW9uKE9pZCBw dWJpZCwgUHVibGljYXRpb25BY3Rpb25zICphY3Rpb25zKTsKIGV4dGVybiBMaXN0ICpHZXRQ dWJsaWNhdGlvblNjaGVtYXMoT2lkIHB1YmlkKTsKIGV4dGVybiBMaXN0ICpHZXRTY2hlbWFQ dWJsaWNhdGlvbnMoT2lkIHNjaGVtYWlkKTsKIGV4dGVybiBMaXN0ICpHZXRTY2hlbWFQdWJs aWNhdGlvblJlbGF0aW9ucyhPaWQgc2NoZW1haWQsCkBAIC0xNDQsNiArMTU1LDkgQEAgZXh0 ZXJuIE9iamVjdEFkZHJlc3MgcHVibGljYXRpb25fYWRkX3JlbGF0aW9uKE9pZCBwdWJpZCwg UHVibGljYXRpb25SZWxJbmZvICpwcmkKIGV4dGVybiBPYmplY3RBZGRyZXNzIHB1YmxpY2F0 aW9uX2FkZF9zY2hlbWEoT2lkIHB1YmlkLCBPaWQgc2NoZW1haWQsCiAJCQkJCQkJCQkJCWJv b2wgaWZfbm90X2V4aXN0cyk7CiAKK2V4dGVybiBCaXRtYXBzZXQgKnB1Yl9jb2xsaXN0X3Rv X2JpdG1hcHNldChCaXRtYXBzZXQgKmNvbHVtbnMsIERhdHVtIHB1YmNvbHMsCisJCQkJCQkJ CQkJICAgTWVtb3J5Q29udGV4dCBtY3h0KTsKKwogZXh0ZXJuIE9pZAlnZXRfcHVibGljYXRp b25fb2lkKGNvbnN0IGNoYXIgKnB1Ym5hbWUsIGJvb2wgbWlzc2luZ19vayk7CiBleHRlcm4g Y2hhciAqZ2V0X3B1YmxpY2F0aW9uX25hbWUoT2lkIHB1YmlkLCBib29sIG1pc3Npbmdfb2sp OwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uX3Jl bC5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbl9yZWwuaAppbmRleCAw ZGQwZjQyNWRiOS4uNGZlYjU4MTg5OWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFs b2cvcGdfcHVibGljYXRpb25fcmVsLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w dWJsaWNhdGlvbl9yZWwuaApAQCAtMzQsNiArMzQsNyBAQCBDQVRBTE9HKHBnX3B1YmxpY2F0 aW9uX3JlbCw2MTA2LFB1YmxpY2F0aW9uUmVsUmVsYXRpb25JZCkKIAogI2lmZGVmCUNBVEFM T0dfVkFSTEVOCQkJLyogdmFyaWFibGUtbGVuZ3RoIGZpZWxkcyBzdGFydCBoZXJlICovCiAJ cGdfbm9kZV90cmVlIHBycXVhbDsJCS8qIHF1YWxpZmljYXRpb25zICovCisJaW50MnZlY3Rv cglwcmF0dHJzOwkJLyogY29sdW1ucyB0byByZXBsaWNhdGUgKi8KICNlbmRpZgogfSBGb3Jt RGF0YV9wZ19wdWJsaWNhdGlvbl9yZWw7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvcHVibGlj YXRpb25jbWRzLmgKaW5kZXggNzgxM2NiY2I2YmIuLmFlODdjYWYwODlkIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaAorKysgYi9zcmMvaW5j bHVkZS9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuaApAQCAtMzEsNyArMzEsOSBAQCBleHRl cm4gdm9pZCBSZW1vdmVQdWJsaWNhdGlvblNjaGVtYUJ5SWQoT2lkIHBzb2lkKTsKIGV4dGVy biBPYmplY3RBZGRyZXNzIEFsdGVyUHVibGljYXRpb25Pd25lcihjb25zdCBjaGFyICpuYW1l LCBPaWQgbmV3T3duZXJJZCk7CiBleHRlcm4gdm9pZCBBbHRlclB1YmxpY2F0aW9uT3duZXJf b2lkKE9pZCBwdWJpZCwgT2lkIG5ld093bmVySWQpOwogZXh0ZXJuIHZvaWQgSW52YWxpZGF0 ZVB1YmxpY2F0aW9uUmVscyhMaXN0ICpyZWxpZHMpOwotZXh0ZXJuIGJvb2wgY29udGFpbl9p bnZhbGlkX3JmY29sdW1uKE9pZCBwdWJpZCwgUmVsYXRpb24gcmVsYXRpb24sCitleHRlcm4g Ym9vbCBwdWJfcmZfY29udGFpbnNfaW52YWxpZF9jb2x1bW4oT2lkIHB1YmlkLCBSZWxhdGlv biByZWxhdGlvbiwKKwkJCQkJCQkJCSBMaXN0ICphbmNlc3RvcnMsIGJvb2wgcHVidmlhcm9v dCk7CitleHRlcm4gYm9vbCBwdWJfY29sbGlzdF9jb250YWluc19pbnZhbGlkX2NvbHVtbihP aWQgcHViaWQsIFJlbGF0aW9uIHJlbGF0aW9uLAogCQkJCQkJCQkJIExpc3QgKmFuY2VzdG9y cywgYm9vbCBwdWJ2aWFyb290KTsKIAogI2VuZGlmCQkJCQkJCS8qIFBVQkxJQ0FUSU9OQ01E U19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggMTYxNzcwMmQ5ZDYuLmI0NDc5 YzcwNDlhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysr IGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBAIC0zNjUyLDYgKzM2NTIsNyBA QCB0eXBlZGVmIHN0cnVjdCBQdWJsaWNhdGlvblRhYmxlCiAJTm9kZVRhZwkJdHlwZTsKIAlS YW5nZVZhciAgICpyZWxhdGlvbjsJCS8qIHJlbGF0aW9uIHRvIGJlIHB1Ymxpc2hlZCAqLwog CU5vZGUJICAgKndoZXJlQ2xhdXNlOwkvKiBxdWFsaWZpY2F0aW9ucyAqLworCUxpc3QJICAg KmNvbHVtbnM7CQkvKiBMaXN0IG9mIGNvbHVtbnMgaW4gYSBwdWJsaWNhdGlvbiB0YWJsZSAq LwogfSBQdWJsaWNhdGlvblRhYmxlOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FscHJvdG8uaAppbmRleCA0ZDJjODgxNjQ0YS4uYTc3MWFiOGZmMzMgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCisrKyBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oCkBAIC0yMDksMTIgKzIwOSwxMiBA QCBleHRlcm4gY2hhciAqbG9naWNhbHJlcF9yZWFkX29yaWdpbihTdHJpbmdJbmZvIGluLCBY TG9nUmVjUHRyICpvcmlnaW5fbHNuKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVf aW5zZXJ0KFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCVJl bGF0aW9uIHJlbCwKIAkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpuZXdzbG90LAotCQkJCQkJ CQkJYm9vbCBiaW5hcnkpOworCQkJCQkJCQkJYm9vbCBiaW5hcnksIEJpdG1hcHNldCAqY29s dW1ucyk7CiBleHRlcm4gTG9naWNhbFJlcFJlbElkIGxvZ2ljYWxyZXBfcmVhZF9pbnNlcnQo U3RyaW5nSW5mbyBpbiwgTG9naWNhbFJlcFR1cGxlRGF0YSAqbmV3dHVwKTsKIGV4dGVybiB2 b2lkIGxvZ2ljYWxyZXBfd3JpdGVfdXBkYXRlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlv bklkIHhpZCwKIAkJCQkJCQkJCVJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCVR1cGxlVGFibGVT bG90ICpvbGRzbG90LAotCQkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKm5ld3Nsb3QsIGJvb2wg YmluYXJ5KTsKKwkJCQkJCQkJCVR1cGxlVGFibGVTbG90ICpuZXdzbG90LCBib29sIGJpbmFy eSwgQml0bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVwUmVsSWQgbG9naWNh bHJlcF9yZWFkX3VwZGF0ZShTdHJpbmdJbmZvIGluLAogCQkJCQkJCQkJCQkgIGJvb2wgKmhh c19vbGR0dXBsZSwgTG9naWNhbFJlcFR1cGxlRGF0YSAqb2xkdHVwLAogCQkJCQkJCQkJCQkg IExvZ2ljYWxSZXBUdXBsZURhdGEgKm5ld3R1cCk7CkBAIC0yMzEsNyArMjMxLDcgQEAgZXh0 ZXJuIExpc3QgKmxvZ2ljYWxyZXBfcmVhZF90cnVuY2F0ZShTdHJpbmdJbmZvIGluLAogZXh0 ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFu c2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCiAJCQkJCQkJCQkgYm9vbCB0cmFuc2Fj dGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3Nh Z2UpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQs IFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCQkgUmVsYXRpb24gcmVsKTsKKwkJCQkJCQkJ IFJlbGF0aW9uIHJlbCwgQml0bWFwc2V0ICpjb2x1bW5zKTsKIGV4dGVybiBMb2dpY2FsUmVw UmVsYXRpb24gKmxvZ2ljYWxyZXBfcmVhZF9yZWwoU3RyaW5nSW5mbyBpbik7CiBleHRlcm4g dm9pZCBsb2dpY2FscmVwX3dyaXRlX3R5cChTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25J ZCB4aWQsCiAJCQkJCQkJCSBPaWQgdHlwb2lkKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wdWJsaWNhdGlvbi5vdXQKaW5kZXggNGUxOTFjMTIwYWMuLjIyN2I1NjExOTE1IDEw MDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dAor KysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dApAQCAtNjEz LDYgKzYxMywzNjkgQEAgRFJPUCBUQUJMRSByZl90YmxfYWJjZF9wazsKIERST1AgVEFCTEUg cmZfdGJsX2FiY2Rfbm9wazsKIERST1AgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wazsKIC0t ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQorLS0gZmFpbCAtIGR1cGxpY2F0ZSB0YWJsZXMgYXJlIG5vdCBhbGxvd2VkIGlmIHRoYXQg dGFibGUgaGFzIGFueSBjb2x1bW4gbGlzdHMKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0g J0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2R1cHMgRk9SIFRBQkxFIHRl c3RwdWJfdGJsMSAoYSksIHRlc3RwdWJfdGJsMSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcp OworRVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgY29sdW1uIGxpc3RzIGZvciB0 YWJsZSAidGVzdHB1Yl90YmwxIgorQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZHVwcyBG T1IgVEFCTEUgdGVzdHB1Yl90YmwxLCB0ZXN0cHViX3RibDEgKGEpIFdJVEggKHB1Ymxpc2gg PSAnaW5zZXJ0Jyk7CitFUlJPUjogIGNvbmZsaWN0aW5nIG9yIHJlZHVuZGFudCBjb2x1bW4g bGlzdHMgZm9yIHRhYmxlICJ0ZXN0cHViX3RibDEiCitSRVNFVCBjbGllbnRfbWluX21lc3Nh Z2VzOworLS0gdGVzdCBmb3IgY29sdW1uIGxpc3RzCitTRVQgY2xpZW50X21pbl9tZXNzYWdl cyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBGT1Ig VEFCTEUgdGVzdHB1Yl90YmwxOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFi bGVfaW5zZXJ0IFdJVEggKHB1Ymxpc2ggPSAnaW5zZXJ0Jyk7CitSRVNFVCBjbGllbnRfbWlu X21lc3NhZ2VzOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSBpbnQgUFJJTUFSWSBL RVksIGIgdGV4dCwgYyB0ZXh0LAorCWQgaW50IGdlbmVyYXRlZCBhbHdheXMgYXMgKGEgKyBs ZW5ndGgoYikpIHN0b3JlZCk7CistLSBlcnJvcjogY29sdW1uICJ4IiBkb2VzIG5vdCBleGlz dAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1 Yl90Ymw1IChhLCB4KTsKK0VSUk9SOiAgY29sdW1uICJ4IiBvZiByZWxhdGlvbiAidGVzdHB1 Yl90Ymw1IiBkb2VzIG5vdCBleGlzdAorLS0gZXJyb3I6IHJlcGxpY2EgaWRlbnRpdHkgImEi IG5vdCBpbmNsdWRlZCBpbiB0aGUgY29sdW1uIGxpc3QKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYiwgYyk7CitVUERBVEUg dGVzdHB1Yl90Ymw1IFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAi dGVzdHB1Yl90Ymw1IgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGlj YXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIERST1AgVEFCTEUgdGVzdHB1Yl90Ymw1OworLS0g ZXJyb3I6IGdlbmVyYXRlZCBjb2x1bW4gImQiIGNhbid0IGJlIGluIGxpc3QKK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwg ZCk7CitFUlJPUjogIGNhbm5vdCByZWZlcmVuY2UgZ2VuZXJhdGVkIGNvbHVtbiAiZCIgaW4g cHVibGljYXRpb24gY29sdW1uIGxpc3QKKy0tIGVycm9yOiBzeXN0ZW0gYXR0cmlidXRlcyAi Y3RpZCIgbm90IGFsbG93ZWQgaW4gY29sdW1uIGxpc3QKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgY3RpZCk7CitFUlJP UjogIGNhbm5vdCByZWZlcmVuY2Ugc3lzdGVtIGNvbHVtbiAiY3RpZCIgaW4gcHVibGljYXRp b24gY29sdW1uIGxpc3QKKy0tIG9rCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRh YmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIGMpOworQUxURVIgVEFCTEUgdGVzdHB1 Yl90Ymw1IERST1AgQ09MVU1OIGM7CQktLSBubyBkaWNlCitFUlJPUjogIGNhbm5vdCBkcm9w IGNvbHVtbiBjIG9mIHRhYmxlIHRlc3RwdWJfdGJsNSBiZWNhdXNlIG90aGVyIG9iamVjdHMg ZGVwZW5kIG9uIGl0CitERVRBSUw6ICBwdWJsaWNhdGlvbiBvZiB0YWJsZSB0ZXN0cHViX3Ri bDUgaW4gcHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZSBkZXBlbmRzIG9uIGNvbHVtbiBj IG9mIHRhYmxlIHRlc3RwdWJfdGJsNQorSElOVDogIFVzZSBEUk9QIC4uLiBDQVNDQURFIHRv IGRyb3AgdGhlIGRlcGVuZGVudCBvYmplY3RzIHRvby4KKy0tIG9rOiBmb3IgaW5zZXJ0LW9u bHkgcHVibGljYXRpb24sIHRoZSBjb2x1bW4gbGlzdCBpcyBhcmJpdHJhcnkKK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGVfaW5zZXJ0IEFERCBUQUJMRSB0ZXN0cHViX3Ri bDUgKGIsIGMpOworLyogbm90IGFsbCByZXBsaWNhIGlkZW50aXRpZXMgYXJlIGdvb2QgZW5v dWdoICovCitDUkVBVEUgVU5JUVVFIElOREVYIHRlc3RwdWJfdGJsNV9iX2tleSBPTiB0ZXN0 cHViX3RibDUgKGIsIGMpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw1IEFMVEVSIGIgU0VU IE5PVCBOVUxMLCBBTFRFUiBjIFNFVCBOT1QgTlVMTDsKK0FMVEVSIFRBQkxFIHRlc3RwdWJf dGJsNSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsNV9iX2tleTsK Ky0tIGVycm9yOiByZXBsaWNhIGlkZW50aXR5IChiLGMpIGlzIGNvdmVyZWQgYnkgY29sdW1u IGxpc3QgKGEsIGMpCitVUERBVEUgdGVzdHB1Yl90Ymw1IFNFVCBhID0gMTsKK0VSUk9SOiAg Y2Fubm90IHVwZGF0ZSB0YWJsZSAidGVzdHB1Yl90Ymw1IgorREVUQUlMOiAgQ29sdW1uIGxp c3QgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2Eg aWRlbnRpdHkuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIERST1AgVEFC TEUgdGVzdHB1Yl90Ymw1OworLS0gZXJyb3I6IGNoYW5nZSB0aGUgcmVwbGljYSBpZGVudGl0 eSB0byAiYiIsIGFuZCBjb2x1bW4gbGlzdCB0byAoYSwgYykKKy0tIHRoZW4gdXBkYXRlIGZh aWxzLCBiZWNhdXNlIChhLCBjKSBkb2VzIG5vdCBjb3ZlciByZXBsaWNhIGlkZW50aXR5CitB TFRFUiBUQUJMRSB0ZXN0cHViX3RibDUgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0 ZXN0cHViX3RibDVfYl9rZXk7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxl IEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIGMpOworVVBEQVRFIHRlc3RwdWJfdGJsNSBT RVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJfdGJsNSIK K0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90 IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorLyogQnV0IGlmIHVwZC9kZWwgYXJlIG5v dCBwdWJsaXNoZWQsIGl0IHdvcmtzIE9LICovCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9 ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgV0lUSCAo cHVibGlzaCA9ICdpbnNlcnQsIHRydW5jYXRlJyk7CitSRVNFVCBjbGllbnRfbWluX21lc3Nh Z2VzOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgQUREIFRBQkxFIHRl c3RwdWJfdGJsNSAoYSk7CQktLSBvaworXGRScCsgdGVzdHB1Yl90YWJsZV9pbnMKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX3RhYmxlX2lu cworICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQgICAgICAg ICB8IGYKK1RhYmxlczoKKyAgICAicHVibGljLnRlc3RwdWJfdGJsNSIgKGEpCisKKy0tIHdp dGggUkVQTElDQSBJREVOVElUWSBGVUxMLCBjb2x1bW4gbGlzdHMgYXJlIG5vdCBhbGxvd2Vk CitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw2IChhIGludCwgYiB0ZXh0LCBjIHRleHQpOwor QUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw2IFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK0FMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNiAo YSwgYiwgYyk7CitVUERBVEUgdGVzdHB1Yl90Ymw2IFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fu bm90IHVwZGF0ZSB0YWJsZSAidGVzdHB1Yl90Ymw2IgorREVUQUlMOiAgQ29sdW1uIGxpc3Qg dXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRl bnRpdHkuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIERST1AgVEFCTEUg dGVzdHB1Yl90Ymw2OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQg VEFCTEUgdGVzdHB1Yl90Ymw2OyAtLSBvaworVVBEQVRFIHRlc3RwdWJfdGJsNiBTRVQgYSA9 IDE7CistLSBtYWtlIHN1cmUgY2hhbmdpbmcgdGhlIGNvbHVtbiBsaXN0IGlzIHVwZGF0ZWQg aW4gU0VUIFRBQkxFCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw3IChhIGludCBwcmltYXJ5 IGtleSwgYiB0ZXh0LCBjIHRleHQpOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0 YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBiKTsKK1xkKyB0ZXN0cHViX3RibDcK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgInB1YmxpYy50ZXN0cHVi X3RibDciCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVm YXVsdCB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24gCistLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgYSAgICAgIHwgaW50ZWdlciB8ICAg ICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAg IHwgCisgYiAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAg ICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4dCAgICB8ICAg ICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAg IHwgCitJbmRleGVzOgorICAgICJ0ZXN0cHViX3RibDdfcGtleSIgUFJJTUFSWSBLRVksIGJ0 cmVlIChhKQorUHVibGljYXRpb25zOgorICAgICJ0ZXN0cHViX2ZvcnRhYmxlIiAoYSwgYikK KworLS0gb2s6IHdlJ2xsIHNraXAgdGhpcyB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9mb3J0YWJsZSBTRVQgVEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBiKTsKK1xkKyB0ZXN0 cHViX3RibDcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGUgInB1Ymxp Yy50ZXN0cHViX3RibDciCisgQ29sdW1uIHwgIFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxh YmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRpb24g CistLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tCisgYSAgICAgIHwgaW50 ZWdlciB8ICAgICAgICAgICB8IG5vdCBudWxsIHwgICAgICAgICB8IHBsYWluICAgIHwgICAg ICAgICAgICAgIHwgCisgYiAgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8ICAgICAgICAg IHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCisgYyAgICAgIHwgdGV4 dCAgICB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IGV4dGVuZGVkIHwgICAg ICAgICAgICAgIHwgCitJbmRleGVzOgorICAgICJ0ZXN0cHViX3RibDdfcGtleSIgUFJJTUFS WSBLRVksIGJ0cmVlIChhKQorUHVibGljYXRpb25zOgorICAgICJ0ZXN0cHViX2ZvcnRhYmxl IiAoYSwgYikKKworLS0gb2s6IHVwZGF0ZSB0aGUgY29sdW1uIGxpc3QKK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIFRBQkxFIHRlc3RwdWJfdGJsNyAoYSwgYyk7 CitcZCsgdGVzdHB1Yl90Ymw3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRh YmxlICJwdWJsaWMudGVzdHB1Yl90Ymw3IgorIENvbHVtbiB8ICBUeXBlICAgfCBDb2xsYXRp b24gfCBOdWxsYWJsZSB8IERlZmF1bHQgfCBTdG9yYWdlICB8IFN0YXRzIHRhcmdldCB8IERl c2NyaXB0aW9uIAorLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQorIGEg ICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCBub3QgbnVsbCB8ICAgICAgICAgfCBwbGFp biAgICB8ICAgICAgICAgICAgICB8IAorIGIgICAgICB8IHRleHQgICAgfCAgICAgICAgICAg fCAgICAgICAgICB8ICAgICAgICAgfCBleHRlbmRlZCB8ICAgICAgICAgICAgICB8IAorIGMg ICAgICB8IHRleHQgICAgfCAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgfCBleHRl bmRlZCB8ICAgICAgICAgICAgICB8IAorSW5kZXhlczoKKyAgICAidGVzdHB1Yl90Ymw3X3Br ZXkiIFBSSU1BUlkgS0VZLCBidHJlZSAoYSkKK1B1YmxpY2F0aW9uczoKKyAgICAidGVzdHB1 Yl9mb3J0YWJsZSIgKGEsIGMpCisKKy0tIGNvbHVtbiBsaXN0IGZvciBwYXJ0aXRpb25lZCB0 YWJsZXMgaGFzIHRvIGNvdmVyIHJlcGxpY2EgaWRlbnRpdGllcyBmb3IKKy0tIGFsbCBjaGls ZCByZWxhdGlvbnMKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDggKGEgaW50LCBiIHRleHQs IGMgdGV4dCkgUEFSVElUSU9OIEJZIEhBU0ggKGEpOworLS0gZmlyc3QgcGFydGl0aW9uIGhh cyByZXBsaWNhIGlkZW50aXR5ICJhIgorQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsOF8wIFBB UlRJVElPTiBPRiB0ZXN0cHViX3RibDggRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJl bWFpbmRlciAwKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8wIEFERCBQUklNQVJZIEtF WSAoYSk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBSRVBMSUNBIElERU5USVRZIFVT SU5HIElOREVYIHRlc3RwdWJfdGJsOF8wX3BrZXk7CistLSBzZWNvbmQgcGFydGl0aW9uIGhh cyByZXBsaWNhIGlkZW50aXR5ICJiIgorQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsOF8xIFBB UlRJVElPTiBPRiB0ZXN0cHViX3RibDggRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJl bWFpbmRlciAxKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIEFERCBQUklNQVJZIEtF WSAoYik7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIFVT SU5HIElOREVYIHRlc3RwdWJfdGJsOF8xX3BrZXk7CistLSBvazogY29sdW1uIGxpc3QgY292 ZXJzIGJvdGggImEiIGFuZCAiYiIKK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9S JzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9saXN0IEZPUiBUQUJMRSB0ZXN0 cHViX3RibDggKGEsIGIpIFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gJ3Ry dWUnKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CistLSBvazogdGhlIHNhbWUgdGhp bmcsIGJ1dCB0cnkgcGxhaW4gQUREIFRBQkxFCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi X2NvbF9saXN0IERST1AgVEFCTEUgdGVzdHB1Yl90Ymw4OworQUxURVIgUFVCTElDQVRJT04g dGVzdHB1Yl9jb2xfbGlzdCBBREQgVEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBiKTsKK1VQREFU RSB0ZXN0cHViX3RibDggU0VUIGEgPSAxOworLS0gZmFpbHVyZTogY29sdW1uIGxpc3QgZG9l cyBub3QgY292ZXIgcmVwbGljYSBpZGVudGl0eSBmb3IgdGhlIHNlY29uZCBwYXJ0aXRpb24K K0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2xpc3QgRFJPUCBUQUJMRSB0ZXN0cHVi X3RibDg7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9saXN0IEFERCBUQUJMRSB0 ZXN0cHViX3RibDggKGEsIGMpOworVVBEQVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9IDE7CitF UlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJfdGJsOF8xIgorREVUQUlMOiAg Q29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIgdGhl IHJlcGxpY2EgaWRlbnRpdHkuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9saXN0 IERST1AgVEFCTEUgdGVzdHB1Yl90Ymw4OworLS0gZmFpbHVyZTogb25lIG9mIHRoZSBwYXJ0 aXRpb25zIGhhcyBSRVBMSUNBIElERU5USVRZIEZVTEwKK0FMVEVSIFRBQkxFIHRlc3RwdWJf dGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfY29sX2xpc3QgQUREIFRBQkxFIHRlc3RwdWJfdGJsOCAoYSwgYyk7CitVUERBVEUgdGVz dHB1Yl90Ymw4IFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAidGVz dHB1Yl90Ymw4XzEiCitERVRBSUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNh dGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfY29sX2xpc3QgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDg7CistLSBh ZGQgdGFibGUgYW5kIHRoZW4gdHJ5IGNoYW5naW5nIHJlcGxpY2EgaWRlbnRpdHkKK0FMVEVS IFRBQkxFIHRlc3RwdWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVz dHB1Yl90Ymw4XzFfcGtleTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2xpc3Qg QUREIFRBQkxFIHRlc3RwdWJfdGJsOCAoYSwgYik7CistLSBmYWlsdXJlOiByZXBsaWNhIGlk ZW50aXR5IGZ1bGwgY2FuJ3QgYmUgdXNlZCB3aXRoIGEgY29sdW1uIGxpc3QKK0FMVEVSIFRB QkxFIHRlc3RwdWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK1VQREFURSB0ZXN0 cHViX3RibDggU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0ZXN0 cHViX3RibDhfMSIKK0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0 aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorLS0gZmFpbHVyZTog cmVwbGljYSBpZGVudGl0eSBoYXMgdG8gYmUgY292ZXJlZCBieSB0aGUgY29sdW1uIGxpc3QK K0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIERST1AgQ09OU1RSQUlOVCB0ZXN0cHViX3Ri bDhfMV9wa2V5OworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgQUREIFBSSU1BUlkgS0VZ IChjKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggdGVzdHB1Yl90Ymw4XzFfcGtleTsKK1VQREFURSB0ZXN0cHViX3RibDggU0VU IGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0ZXN0cHViX3RibDhfMSIK K0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90 IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorRFJPUCBUQUJMRSB0ZXN0cHViX3RibDg7 CistLSBjb2x1bW4gbGlzdCBmb3IgcGFydGl0aW9uZWQgdGFibGVzIGhhcyB0byBjb3ZlciBy ZXBsaWNhIGlkZW50aXRpZXMgZm9yCistLSBhbGwgY2hpbGQgcmVsYXRpb25zCitDUkVBVEUg VEFCTEUgdGVzdHB1Yl90Ymw4IChhIGludCwgYiB0ZXh0LCBjIHRleHQpIFBBUlRJVElPTiBC WSBIQVNIIChhKTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2xpc3QgQUREIFRB QkxFIHRlc3RwdWJfdGJsOCAoYSwgYik7CistLSBmaXJzdCBwYXJ0aXRpb24gaGFzIHJlcGxp Y2EgaWRlbnRpdHkgImEiCitDUkVBVEUgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgKGEgaW50LCBi IHRleHQsIGMgdGV4dCk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBBREQgUFJJTUFS WSBLRVkgKGEpOworQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgUkVQTElDQSBJREVOVElU WSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibDhfMF9wa2V5OworLS0gc2Vjb25kIHBhcnRpdGlv biBoYXMgcmVwbGljYSBpZGVudGl0eSAiYiIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDhf MSAoYSBpbnQsIGIgdGV4dCwgYyB0ZXh0KTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8x IEFERCBQUklNQVJZIEtFWSAoYyk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMSBSRVBM SUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8xX3BrZXk7CistLSBvazog YXR0YWNoaW5nIGZpcnN0IHBhcnRpdGlvbiB3b3JrcywgYmVjYXVzZSAoYSkgaXMgaW4gY29s dW1uIGxpc3QKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOCBBVFRBQ0ggUEFSVElUSU9OIHRl c3RwdWJfdGJsOF8wIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7 CistLSBmYWlsdXJlOiBzZWNvbmQgcGFydGl0aW9uIGhhcyByZXBsaWNhIGlkZW50aXR5IChj KSwgd2hpY2ggc2kgbm90IGluIGNvbHVtbiBsaXN0CitBTFRFUiBUQUJMRSB0ZXN0cHViX3Ri bDggQVRUQUNIIFBBUlRJVElPTiB0ZXN0cHViX3RibDhfMSBGT1IgVkFMVUVTIFdJVEggKG1v ZHVsdXMgMiwgcmVtYWluZGVyIDEpOworVVBEQVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9IDE7 CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInRlc3RwdWJfdGJsOF8xIgorREVUQUlM OiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGljYXRpb24gZG9lcyBub3QgY292ZXIg dGhlIHJlcGxpY2EgaWRlbnRpdHkuCistLSBmYWlsdXJlOiBjaGFuZ2luZyByZXBsaWNhIGlk ZW50aXR5IHRvIEZVTEwgZm9yIHBhcnRpdGlvbiBmYWlscywgYmVjYXVzZQorLS0gb2YgdGhl IGNvbHVtbiBsaXN0IG9uIHRoZSBwYXJlbnQKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8w IFJFUExJQ0EgSURFTlRJVFkgRlVMTDsKK1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAx OworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJ0ZXN0cHViX3RibDhfMCIKK0RFVEFJ TDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0aW9uIGRvZXMgbm90IGNvdmVy IHRoZSByZXBsaWNhIGlkZW50aXR5LgorRFJPUCBUQUJMRSB0ZXN0cHViX3RibDUsIHRlc3Rw dWJfdGJsNiwgdGVzdHB1Yl90Ymw3LCB0ZXN0cHViX3RibDgsIHRlc3RwdWJfdGJsOF8xOwor RFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucywgdGVzdHB1Yl9mb3J0YWJsZSwg dGVzdHB1Yl9mb3J0YWJsZV9pbnNlcnQsIHRlc3RwdWJfY29sX2xpc3Q7CistLSA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0tIFRl c3QgY29tYmluYXRpb24gb2YgY29sdW1uIGxpc3QgYW5kIHJvdyBmaWx0ZXIKK1NFVCBjbGll bnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHVi X2JvdGhfZmlsdGVyczsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitDUkVBVEUgVEFC TEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIChhIGludCwgYiBpbnQsIGMgaW50LCBQUklN QVJZIEtFWSAoYSxjKSk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMg UkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnNf cGtleTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0ZXJzIEFERCBUQUJM RSB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMgKGEsYykgV0hFUkUgKGMgIT0gMSk7CitcZFJw KyB0ZXN0cHViX2JvdGhfZmlsdGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2ZpbHRlcnMKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCitUYWJsZXM6CisgICAgInB1 YmxpYy50ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMiIChhLCBjKSBXSEVSRSAoYyA8PiAxKQor CitcZCsgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzCisgICAgICAgICAgICAgICAgICAgICAg ICAgVGFibGUgInB1YmxpYy50ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMiCisgQ29sdW1uIHwg IFR5cGUgICB8IENvbGxhdGlvbiB8IE51bGxhYmxlIHwgRGVmYXVsdCB8IFN0b3JhZ2UgfCBT dGF0cyB0YXJnZXQgfCBEZXNjcmlwdGlvbiAKKy0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLQorIGEgICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCBub3QgbnVsbCB8 ICAgICAgICAgfCBwbGFpbiAgIHwgICAgICAgICAgICAgIHwgCisgYiAgICAgIHwgaW50ZWdl ciB8ICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICB8IHBsYWluICAgfCAgICAgICAg ICAgICAgfCAKKyBjICAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgbm90IG51bGwgfCAg ICAgICAgIHwgcGxhaW4gICB8ICAgICAgICAgICAgICB8IAorSW5kZXhlczoKKyAgICAidGVz dHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXkiIFBSSU1BUlkgS0VZLCBidHJlZSAoYSwgYykg UkVQTElDQSBJREVOVElUWQorUHVibGljYXRpb25zOgorICAgICJ0ZXN0cHViX2JvdGhfZmls dGVycyIgKGEsIGMpIFdIRVJFIChjIDw+IDEpCisKK0RST1AgVEFCTEUgdGVzdHB1Yl90Ymxf Ym90aF9maWx0ZXJzOworRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViX2JvdGhfZmlsdGVyczsK Ky0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQorLS0gTW9yZSBjb2x1bW4gbGlzdCB0ZXN0cyBmb3IgdmFsaWRhdGluZyBjb2x1bW4g cmVmZXJlbmNlcworQ1JFQVRFIFRBQkxFIHJmX3RibF9hYmNkX25vcGsoYSBpbnQsIGIgaW50 LCBjIGludCwgZCBpbnQpOworQ1JFQVRFIFRBQkxFIHJmX3RibF9hYmNkX3BrKGEgaW50LCBi IGludCwgYyBpbnQsIGQgaW50LCBQUklNQVJZIEtFWShhLGIpKTsKK0NSRUFURSBUQUJMRSBy Zl90YmxfYWJjZF9wYXJ0X3BrIChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQpIFBBUlRJVElP TiBieSBSQU5HRSAoYSk7CitDUkVBVEUgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wa18xIChi IGludCwgYSBpbnQgUFJJTUFSWSBLRVkpOworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2RfcGFy dF9wayBBVFRBQ0ggUEFSVElUSU9OIHJmX3RibF9hYmNkX3BhcnRfcGtfMSBGT1IgVkFMVUVT IEZST00gKDEpIFRPICgxMCk7CistLSBDYXNlIDEuIFJFUExJQ0EgSURFTlRJVFkgREVGQVVM VCAobWVhbnMgdXNlIHByaW1hcnkga2V5IG9yIG5vdGhpbmcpCistLSAxYS4gUkVQTElDQSBJ REVOVElUWSBpcyBERUZBVUxUIGFuZCB0YWJsZSBoYXMgYSBQSy4KK1NFVCBjbGllbnRfbWlu X21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViNiBGT1Ig VEFCTEUgcmZfdGJsX2FiY2RfcGsgKGEsIGIpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdl czsKKy0tIG9rIC0gKGEsYikgY292ZXJ0cyBhbGwgUEsgY29scworVVBEQVRFIHJmX3RibF9h YmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJM RSByZl90YmxfYWJjZF9wayAoYSwgYiwgYyk7CistLSBvayAtIChhLGIsYykgY292ZXJ0cyBh bGwgUEsgY29scworVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSk7CistLSBm YWlsIC0gImIiIGlzIG1pc3NpbmcgZnJvbSB0aGUgY29sdW1uIGxpc3QKK1VQREFURSByZl90 YmxfYWJjZF9wayBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUgdGFibGUgInJm X3RibF9hYmNkX3BrIgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGlj YXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGsgKGIpOworLS0gZmFp bCAtICJhIiBpcyBtaXNzaW5nIGZyb20gdGhlIGNvbHVtbiBsaXN0CitVUERBVEUgcmZfdGJs X2FiY2RfcGsgU0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90 YmxfYWJjZF9wayIKK0RFVEFJTDogIENvbHVtbiBsaXN0IHVzZWQgYnkgdGhlIHB1YmxpY2F0 aW9uIGRvZXMgbm90IGNvdmVyIHRoZSByZXBsaWNhIGlkZW50aXR5LgorLS0gMWIuIFJFUExJ Q0EgSURFTlRJVFkgaXMgREVGQVVMVCBhbmQgdGFibGUgaGFzIG5vIFBLCitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAoYSk7CistLSBv ayAtIHRoZXJlJ3Mgbm8gcmVwbGljYSBpZGVudGl0eSwgc28gYW55IGNvbHVtbiBsaXN0IHdv cmtzCistLSBub3RlOiBpdCBmYWlscyBhbnl3YXksIGp1c3QgYSBiaXQgbGF0ZXIgYmVjYXVz ZSBVUERBVEUgcmVxdWlyZXMgUkkKK1VQREFURSByZl90YmxfYWJjZF9ub3BrIFNFVCBhID0g MTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2Rfbm9wayIgYmVj YXVzZSBpdCBkb2VzIG5vdCBoYXZlIGEgcmVwbGljYSBpZGVudGl0eSBhbmQgcHVibGlzaGVz IHVwZGF0ZXMKK0hJTlQ6ICBUbyBlbmFibGUgdXBkYXRpbmcgdGhlIHRhYmxlLCBzZXQgUkVQ TElDQSBJREVOVElUWSB1c2luZyBBTFRFUiBUQUJMRS4KKy0tIENhc2UgMi4gUkVQTElDQSBJ REVOVElUWSBGVUxMCitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9wayBSRVBMSUNBIElERU5U SVRZIEZVTEw7CitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9ub3BrIFJFUExJQ0EgSURFTlRJ VFkgRlVMTDsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90Ymxf YWJjZF9wayAoYyk7CistLSBmYWlsIC0gd2l0aCBSRVBMSUNBIElERU5USVRZIEZVTEwgbm8g Y29sdW1uIGxpc3QgaXMgYWxsb3dlZAorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0g MTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2RfcGsiCitERVRB SUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3Zl ciB0aGUgcmVwbGljYSBpZGVudGl0eS4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNF VCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIChhLCBiLCBjLCBkKTsKKy0tIGZhaWwgLSB3aXRo IFJFUExJQ0EgSURFTlRJVFkgRlVMTCBubyBjb2x1bW4gbGlzdCBpcyBhbGxvd2VkCitVUERB VEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5vdCB1cGRhdGUg dGFibGUgInJmX3RibF9hYmNkX25vcGsiCitERVRBSUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5 IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4K Ky0tIENhc2UgMy4gUkVQTElDQSBJREVOVElUWSBOT1RISU5HCitBTFRFUiBUQUJMRSByZl90 YmxfYWJjZF9wayBSRVBMSUNBIElERU5USVRZIE5PVEhJTkc7CitBTFRFUiBUQUJMRSByZl90 YmxfYWJjZF9ub3BrIFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsKK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSk7CistLSBvayAtIFJF UExJQ0EgSURFTlRJVFkgTk9USElORyBtZWFucyBhbGwgY29sdW1uIGxpc3RzIGFyZSB2YWxp ZAorLS0gaXQgc3RpbGwgZmFpbHMgbGF0ZXIgYmVjYXVzZSB3aXRob3V0IFJJIHdlIGNhbid0 IHJlcGxpY2F0ZSB1cGRhdGVzCitVUERBVEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAxOwor RVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90YmxfYWJjZF9wayIgYmVjYXVzZSBp dCBkb2VzIG5vdCBoYXZlIGEgcmVwbGljYSBpZGVudGl0eSBhbmQgcHVibGlzaGVzIHVwZGF0 ZXMKK0hJTlQ6ICBUbyBlbmFibGUgdXBkYXRpbmcgdGhlIHRhYmxlLCBzZXQgUkVQTElDQSBJ REVOVElUWSB1c2luZyBBTFRFUiBUQUJMRS4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2 IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSwgYiwgYywgZCk7CistLSBvayAtIFJFUExJ Q0EgSURFTlRJVFkgTk9USElORyBtZWFucyBhbGwgY29sdW1uIGxpc3RzIGFyZSB2YWxpZAor LS0gaXQgc3RpbGwgZmFpbHMgbGF0ZXIgYmVjYXVzZSB3aXRob3V0IFJJIHdlIGNhbid0IHJl cGxpY2F0ZSB1cGRhdGVzCitVUERBVEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAxOworRVJS T1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90YmxfYWJjZF9wayIgYmVjYXVzZSBpdCBk b2VzIG5vdCBoYXZlIGEgcmVwbGljYSBpZGVudGl0eSBhbmQgcHVibGlzaGVzIHVwZGF0ZXMK K0hJTlQ6ICBUbyBlbmFibGUgdXBkYXRpbmcgdGhlIHRhYmxlLCBzZXQgUkVQTElDQSBJREVO VElUWSB1c2luZyBBTFRFUiBUQUJMRS4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNF VCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIChkKTsKKy0tIG9rIC0gUkVQTElDQSBJREVOVElU WSBOT1RISU5HIG1lYW5zIGFsbCBjb2x1bW4gbGlzdHMgYXJlIHZhbGlkCistLSBpdCBzdGls bCBmYWlscyBsYXRlciBiZWNhdXNlIHdpdGhvdXQgUkkgd2UgY2FuJ3QgcmVwbGljYXRlIHVw ZGF0ZXMKK1VQREFURSByZl90YmxfYWJjZF9ub3BrIFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fu bm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2Rfbm9wayIgYmVjYXVzZSBpdCBkb2VzIG5v dCBoYXZlIGEgcmVwbGljYSBpZGVudGl0eSBhbmQgcHVibGlzaGVzIHVwZGF0ZXMKK0hJTlQ6 ICBUbyBlbmFibGUgdXBkYXRpbmcgdGhlIHRhYmxlLCBzZXQgUkVQTElDQSBJREVOVElUWSB1 c2luZyBBTFRFUiBUQUJMRS4KKy0tIENhc2UgNC4gUkVQTElDQSBJREVOVElUWSBJTkRFWAor QUxURVIgVEFCTEUgcmZfdGJsX2FiY2RfcGsgQUxURVIgQ09MVU1OIGMgU0VUIE5PVCBOVUxM OworQ1JFQVRFIFVOSVFVRSBJTkRFWCBpZHhfYWJjZF9wa19jIE9OIHJmX3RibF9hYmNkX3Br KGMpOworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2RfcGsgUkVQTElDQSBJREVOVElUWSBVU0lO RyBJTkRFWCBpZHhfYWJjZF9wa19jOworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayBB TFRFUiBDT0xVTU4gYyBTRVQgTk9UIE5VTEw7CitDUkVBVEUgVU5JUVVFIElOREVYIGlkeF9h YmNkX25vcGtfYyBPTiByZl90YmxfYWJjZF9ub3BrKGMpOworQUxURVIgVEFCTEUgcmZfdGJs X2FiY2Rfbm9wayBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIGlkeF9hYmNkX25vcGtf YzsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9w ayAoYSk7CistLSBmYWlsIC0gY29sdW1uIGxpc3QgImEiIGRvZXMgbm90IGNvdmVyIHRoZSBS RVBMSUNBIElERU5USVRZIElOREVYIG9uICJjIgorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNF VCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2FiY2RfcGsi CitERVRBSUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5v dCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYyk7CistLSBvayAtIGNvbHVtbiBsaXN0 ICJjIiBkb2VzIGNvdmVyIHRoZSBSRVBMSUNBIElERU5USVRZIElOREVYIG9uICJjIgorVVBE QVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIChhKTsKKy0tIGZhaWwgLSBjb2x1bW4g bGlzdCAiYSIgZG9lcyBub3QgY292ZXIgdGhlIFJFUExJQ0EgSURFTlRJVFkgSU5ERVggb24g ImMiCitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CitFUlJPUjogIGNhbm5v dCB1cGRhdGUgdGFibGUgInJmX3RibF9hYmNkX25vcGsiCitERVRBSUw6ICBDb2x1bW4gbGlz dCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlvbiBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBp ZGVudGl0eS4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90Ymxf YWJjZF9ub3BrIChjKTsKKy0tIG9rIC0gY29sdW1uIGxpc3QgImMiIGRvZXMgY292ZXIgdGhl IFJFUExJQ0EgSURFTlRJVFkgSU5ERVggb24gImMiCitVUERBVEUgcmZfdGJsX2FiY2Rfbm9w ayBTRVQgYSA9IDE7CistLSBUZXN0cyBmb3IgcGFydGl0aW9uZWQgdGFibGUKKy0tIHNldCBQ VUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVCB0byBmYWxzZSBhbmQgdGVzdCBjb2x1bW4gbGlz dCBmb3IgcGFydGl0aW9uZWQKKy0tIHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHVi NiBTRVQgKFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTApOworLS0gZmFpbCAtIGNhbm5v dCB1c2UgY29sdW1uIGxpc3QgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wayAoYSk7CitFUlJP UjogIGNhbm5vdCB1c2UgcHVibGljYXRpb24gY29sdW1uIGxpc3QgZm9yIHJlbGF0aW9uICJy Zl90YmxfYWJjZF9wYXJ0X3BrIgorREVUQUlMOiAgY29sdW1uIGxpc3QgY2Fubm90IGJlIHVz ZWQgZm9yIGEgcGFydGl0aW9uZWQgdGFibGUgd2hlbiBwdWJsaXNoX3ZpYV9wYXJ0aXRpb25f cm9vdCBpcyBmYWxzZS4KKy0tIG9rIC0gY2FuIHVzZSBjb2x1bW4gbGlzdCBmb3IgcGFydGl0 aW9uCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rf cGFydF9wa18xIChhKTsKKy0tIG9rIC0gImEiIGlzIGEgUEsgY29sCitVUERBVEUgcmZfdGJs X2FiY2RfcGFydF9wayBTRVQgYSA9IDE7CistLSBzZXQgUFVCTElTSF9WSUFfUEFSVElUSU9O X1JPT1QgdG8gdHJ1ZSBhbmQgdGVzdCBjb2x1bW4gbGlzdCBmb3IgcGFydGl0aW9uZWQKKy0t IHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgKFBVQkxJU0hfVklBX1BB UlRJVElPTl9ST09UPTEpOworLS0gb2sgLSBjYW4gdXNlIGNvbHVtbiBsaXN0IGZvciBwYXJ0 aXRpb25lZCB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJm X3RibF9hYmNkX3BhcnRfcGsgKGEpOworLS0gb2sgLSAiYSIgaXMgYSBQSyBjb2wKK1VQREFU RSByZl90YmxfYWJjZF9wYXJ0X3BrIFNFVCBhID0gMTsKKy0tIGZhaWwgLSBjYW5ub3Qgc2V0 IFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UIHRvIGZhbHNlIGlmIGFueSBjb2x1bW4gbGlz dCBpcworLS0gdXNlZCBmb3IgcGFydGl0aW9uZWQgdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI2IFNFVCAoUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1Q9MCk7CitFUlJPUjog IGNhbm5vdCBzZXQgcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSBmb3IgcHVi bGljYXRpb24gInRlc3RwdWI2IgorREVUQUlMOiAgVGhlIHB1YmxpY2F0aW9uIGNvbnRhaW5z IGEgY29sdW1uIGxpc3QgZm9yIGEgcGFydGl0aW9uZWQgdGFibGUgInJmX3RibF9hYmNkX3Bh cnRfcGsiIHdoaWNoIGlzIG5vdCBhbGxvd2VkIHdoZW4gcHVibGlzaF92aWFfcGFydGl0aW9u X3Jvb3QgaXMgZmFsc2UuCistLSBOb3cgY2hhbmdlIHRoZSByb290IGNvbHVtbiBsaXN0IHRv IHVzZSBhIGNvbHVtbiAiYiIKKy0tICh3aGljaCBpcyBub3QgaW4gdGhlIHJlcGxpY2EgaWRl bnRpdHkpCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2Fi Y2RfcGFydF9wa18xIChiKTsKKy0tIG9rIC0gd2UgZG9uJ3QgaGF2ZSBjb2x1bW4gbGlzdCBm b3IgcGFydGl0aW9uZWQgdGFibGUuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQg KFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTApOworLS0gZmFpbCAtICJiIiBpcyBub3Qg aW4gUkVQTElDQSBJREVOVElUWSBJTkRFWAorVVBEQVRFIHJmX3RibF9hYmNkX3BhcnRfcGsg U0VUIGEgPSAxOworRVJST1I6ICBjYW5ub3QgdXBkYXRlIHRhYmxlICJyZl90YmxfYWJjZF9w YXJ0X3BrXzEiCitERVRBSUw6ICBDb2x1bW4gbGlzdCB1c2VkIGJ5IHRoZSBwdWJsaWNhdGlv biBkb2VzIG5vdCBjb3ZlciB0aGUgcmVwbGljYSBpZGVudGl0eS4KKy0tIHNldCBQVUJMSVNI X1ZJQV9QQVJUSVRJT05fUk9PVCB0byB0cnVlCistLSBjYW4gdXNlIGNvbHVtbiBsaXN0IGZv ciBwYXJ0aXRpb25lZCB0YWJsZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIChQ VUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVD0xKTsKKy0tIG9rIC0gY2FuIHVzZSBjb2x1bW4g bGlzdCBmb3IgcGFydGl0aW9uZWQgdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2 IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrIChiKTsKKy0tIGZhaWwgLSAiYiIgaXMg bm90IGluIFJFUExJQ0EgSURFTlRJVFkgSU5ERVgKK1VQREFURSByZl90YmxfYWJjZF9wYXJ0 X3BrIFNFVCBhID0gMTsKK0VSUk9SOiAgY2Fubm90IHVwZGF0ZSB0YWJsZSAicmZfdGJsX2Fi Y2RfcGFydF9wa18xIgorREVUQUlMOiAgQ29sdW1uIGxpc3QgdXNlZCBieSB0aGUgcHVibGlj YXRpb24gZG9lcyBub3QgY292ZXIgdGhlIHJlcGxpY2EgaWRlbnRpdHkuCitEUk9QIFBVQkxJ Q0FUSU9OIHRlc3RwdWI2OworRFJPUCBUQUJMRSByZl90YmxfYWJjZF9wazsKK0RST1AgVEFC TEUgcmZfdGJsX2FiY2Rfbm9wazsKK0RST1AgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wazsK Ky0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQogLS0gVGVzdCBjYWNoZSBpbnZhbGlkYXRpb24gRk9SIEFMTCBUQUJMRVMgcHVibGlj YXRpb24KIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBUQUJM RSB0ZXN0cHViX3RibDQoYSBpbnQpOwpAQCAtMTA1OCw2ICsxNDIxLDE1IEBAIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEg cHViX3Rlc3QxLCBwdWJfdGVzCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVz dDEiCiAKKy0tIFZlcmlmeSB0aGF0IGl0IGZhaWxzIHRvIGFkZCBhIHNjaGVtYSB3aXRoIGEg Y29sdW1uIHNwZWNpZmljYXRpb24KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNj aGVtYSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgZm9vIChhLCBiKTsKK0VSUk9SOiAgc3lu dGF4IGVycm9yIGF0IG9yIG5lYXIgIigiCitMSU5FIDE6IC4uLlRJT04gdGVzdHB1YjFfZm9y c2NoZW1hIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBmb28gKGEsIGIpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF4KK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxF UyBJTiBTQ0hFTUEgZm9vLCBiYXIgKGEsIGIpOworRVJST1I6ICBjb2x1bW4gc3BlY2lmaWNh dGlvbiBub3QgYWxsb3dlZCBmb3Igc2NoZW1hCitMSU5FIDE6IC4uLiB0ZXN0cHViMV9mb3Jz Y2hlbWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIGZvbywgYmFyIChhLCBiKS4uLgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF4KIC0tIGNsZWFudXAgcHViX3Rlc3QxIHNjaGVtYSBmb3IgaW52YWxpZGF0aW9uIHRl c3RzCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMl9mb3JzY2hlbWEgRFJPUCBBTEwgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDE7CiBEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWIzX2Zv cnNjaGVtYSwgdGVzdHB1YjRfZm9yc2NoZW1hLCB0ZXN0cHViNV9mb3JzY2hlbWEsIHRlc3Rw dWI2X2ZvcnNjaGVtYSwgdGVzdHB1Yl9mb3J0YWJsZTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1 YmxpY2F0aW9uLnNxbAppbmRleCA1NDU3YzU2YjMzZi4uYWViMWI1NzJhZjggMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3B1YmxpY2F0aW9uLnNxbAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL3NxbC9wdWJsaWNhdGlvbi5zcWwKQEAgLTM3Myw2ICszNzMsMjg5IEBAIERS T1AgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wazsKIERST1AgVEFCTEUgcmZfdGJsX2FiY2RfcGFy dF9wazsKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQogCistLSBmYWlsIC0gZHVwbGljYXRlIHRhYmxlcyBhcmUgbm90IGFsbG93 ZWQgaWYgdGhhdCB0YWJsZSBoYXMgYW55IGNvbHVtbiBsaXN0cworU0VUIGNsaWVudF9taW5f bWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZHVwcyBG T1IgVEFCTEUgdGVzdHB1Yl90YmwxIChhKSwgdGVzdHB1Yl90YmwxIFdJVEggKHB1Ymxpc2gg PSAnaW5zZXJ0Jyk7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9kdXBzIEZPUiBUQUJM RSB0ZXN0cHViX3RibDEsIHRlc3RwdWJfdGJsMSAoYSkgV0lUSCAocHVibGlzaCA9ICdpbnNl cnQnKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CisKKy0tIHRlc3QgZm9yIGNvbHVt biBsaXN0cworU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBV QkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRk9SIFRBQkxFIHRlc3RwdWJfdGJsMTsKK0NS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2luc2VydCBXSVRIIChwdWJsaXNo ID0gJ2luc2VydCcpOworUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKK0NSRUFURSBUQUJM RSB0ZXN0cHViX3RibDUgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHRleHQsIGMgdGV4dCwKKwlk IGludCBnZW5lcmF0ZWQgYWx3YXlzIGFzIChhICsgbGVuZ3RoKGIpKSBzdG9yZWQpOworLS0g ZXJyb3I6IGNvbHVtbiAieCIgZG9lcyBub3QgZXhpc3QKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSwgeCk7CistLSBlcnJv cjogcmVwbGljYSBpZGVudGl0eSAiYSIgbm90IGluY2x1ZGVkIGluIHRoZSBjb2x1bW4gbGlz dAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1 Yl90Ymw1IChiLCBjKTsKK1VQREFURSB0ZXN0cHViX3RibDUgU0VUIGEgPSAxOworQUxURVIg UFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNTsK Ky0tIGVycm9yOiBnZW5lcmF0ZWQgY29sdW1uICJkIiBjYW4ndCBiZSBpbiBsaXN0CitBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUg KGEsIGQpOworLS0gZXJyb3I6IHN5c3RlbSBhdHRyaWJ1dGVzICJjdGlkIiBub3QgYWxsb3dl ZCBpbiBjb2x1bW4gbGlzdAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBB REQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhLCBjdGlkKTsKKy0tIG9rCitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBUQUJMRSB0ZXN0cHViX3RibDUgKGEsIGMpOwor QUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw1IERST1AgQ09MVU1OIGM7CQktLSBubyBkaWNlCist LSBvazogZm9yIGluc2VydC1vbmx5IHB1YmxpY2F0aW9uLCB0aGUgY29sdW1uIGxpc3QgaXMg YXJiaXRyYXJ5CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2luc2VydCBB REQgVEFCTEUgdGVzdHB1Yl90Ymw1IChiLCBjKTsKKworLyogbm90IGFsbCByZXBsaWNhIGlk ZW50aXRpZXMgYXJlIGdvb2QgZW5vdWdoICovCitDUkVBVEUgVU5JUVVFIElOREVYIHRlc3Rw dWJfdGJsNV9iX2tleSBPTiB0ZXN0cHViX3RibDUgKGIsIGMpOworQUxURVIgVEFCTEUgdGVz dHB1Yl90Ymw1IEFMVEVSIGIgU0VUIE5PVCBOVUxMLCBBTFRFUiBjIFNFVCBOT1QgTlVMTDsK K0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsNSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVY IHRlc3RwdWJfdGJsNV9iX2tleTsKKy0tIGVycm9yOiByZXBsaWNhIGlkZW50aXR5IChiLGMp IGlzIGNvdmVyZWQgYnkgY29sdW1uIGxpc3QgKGEsIGMpCitVUERBVEUgdGVzdHB1Yl90Ymw1 IFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRFJPUCBU QUJMRSB0ZXN0cHViX3RibDU7CisKKy0tIGVycm9yOiBjaGFuZ2UgdGhlIHJlcGxpY2EgaWRl bnRpdHkgdG8gImIiLCBhbmQgY29sdW1uIGxpc3QgdG8gKGEsIGMpCistLSB0aGVuIHVwZGF0 ZSBmYWlscywgYmVjYXVzZSAoYSwgYykgZG9lcyBub3QgY292ZXIgcmVwbGljYSBpZGVudGl0 eQorQUxURVIgVEFCTEUgdGVzdHB1Yl90Ymw1IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5E RVggdGVzdHB1Yl90Ymw1X2Jfa2V5OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0 YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChhLCBjKTsKK1VQREFURSB0ZXN0cHViX3Ri bDUgU0VUIGEgPSAxOworCisvKiBCdXQgaWYgdXBkL2RlbCBhcmUgbm90IHB1Ymxpc2hlZCwg aXQgd29ya3MgT0sgKi8KK1NFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKK0NS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBXSVRIIChwdWJsaXNoID0gJ2lu c2VydCwgdHJ1bmNhdGUnKTsKK1JFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CitBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX3RhYmxlX2lucyBBREQgVEFCTEUgdGVzdHB1Yl90Ymw1IChh KTsJCS0tIG9rCitcZFJwKyB0ZXN0cHViX3RhYmxlX2lucworCistLSB3aXRoIFJFUExJQ0Eg SURFTlRJVFkgRlVMTCwgY29sdW1uIGxpc3RzIGFyZSBub3QgYWxsb3dlZAorQ1JFQVRFIFRB QkxFIHRlc3RwdWJfdGJsNiAoYSBpbnQsIGIgdGV4dCwgYyB0ZXh0KTsKK0FMVEVSIFRBQkxF IHRlc3RwdWJfdGJsNiBSRVBMSUNBIElERU5USVRZIEZVTEw7CisKK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNiAoYSwgYiwgYyk7 CitVUERBVEUgdGVzdHB1Yl90Ymw2IFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWJfZm9ydGFibGUgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDY7CisKK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgQUREIFRBQkxFIHRlc3RwdWJfdGJsNjsgLS0gb2sK K1VQREFURSB0ZXN0cHViX3RibDYgU0VUIGEgPSAxOworCistLSBtYWtlIHN1cmUgY2hhbmdp bmcgdGhlIGNvbHVtbiBsaXN0IGlzIHVwZGF0ZWQgaW4gU0VUIFRBQkxFCitDUkVBVEUgVEFC TEUgdGVzdHB1Yl90Ymw3IChhIGludCBwcmltYXJ5IGtleSwgYiB0ZXh0LCBjIHRleHQpOwor QUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBBREQgVEFCTEUgdGVzdHB1Yl90 Ymw3IChhLCBiKTsKK1xkKyB0ZXN0cHViX3RibDcKKy0tIG9rOiB3ZSdsbCBza2lwIHRoaXMg dGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgU0VUIFRBQkxFIHRl c3RwdWJfdGJsNyAoYSwgYik7CitcZCsgdGVzdHB1Yl90Ymw3CistLSBvazogdXBkYXRlIHRo ZSBjb2x1bW4gbGlzdAorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3J0YWJsZSBTRVQg VEFCTEUgdGVzdHB1Yl90Ymw3IChhLCBjKTsKK1xkKyB0ZXN0cHViX3RibDcKKworLS0gY29s dW1uIGxpc3QgZm9yIHBhcnRpdGlvbmVkIHRhYmxlcyBoYXMgdG8gY292ZXIgcmVwbGljYSBp ZGVudGl0aWVzIGZvcgorLS0gYWxsIGNoaWxkIHJlbGF0aW9ucworQ1JFQVRFIFRBQkxFIHRl c3RwdWJfdGJsOCAoYSBpbnQsIGIgdGV4dCwgYyB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAo YSk7CistLSBmaXJzdCBwYXJ0aXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgImEiCitDUkVB VEUgVEFCTEUgdGVzdHB1Yl90Ymw4XzAgUEFSVElUSU9OIE9GIHRlc3RwdWJfdGJsOCBGT1Ig VkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDApOworQUxURVIgVEFCTEUgdGVz dHB1Yl90Ymw4XzAgQUREIFBSSU1BUlkgS0VZIChhKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJf dGJsOF8wIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw4XzBfcGtl eTsKKy0tIHNlY29uZCBwYXJ0aXRpb24gaGFzIHJlcGxpY2EgaWRlbnRpdHkgImIiCitDUkVB VEUgVEFCTEUgdGVzdHB1Yl90Ymw4XzEgUEFSVElUSU9OIE9GIHRlc3RwdWJfdGJsOCBGT1Ig VkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDEpOworQUxURVIgVEFCTEUgdGVz dHB1Yl90Ymw4XzEgQUREIFBSSU1BUlkgS0VZIChiKTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJf dGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw4XzFfcGtl eTsKKworLS0gb2s6IGNvbHVtbiBsaXN0IGNvdmVycyBib3RoICJhIiBhbmQgImIiCitTRVQg Y2xpZW50X21pbl9tZXNzYWdlcyA9ICdFUlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVz dHB1Yl9jb2xfbGlzdCBGT1IgVEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBiKSBXSVRIIChwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9ICd0cnVlJyk7CitSRVNFVCBjbGllbnRfbWluX21l c3NhZ2VzOworCistLSBvazogdGhlIHNhbWUgdGhpbmcsIGJ1dCB0cnkgcGxhaW4gQUREIFRB QkxFCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2NvbF9saXN0IERST1AgVEFCTEUgdGVz dHB1Yl90Ymw4OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9jb2xfbGlzdCBBREQgVEFC TEUgdGVzdHB1Yl90Ymw4IChhLCBiKTsKK1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAx OworCistLSBmYWlsdXJlOiBjb2x1bW4gbGlzdCBkb2VzIG5vdCBjb3ZlciByZXBsaWNhIGlk ZW50aXR5IGZvciB0aGUgc2Vjb25kIHBhcnRpdGlvbgorQUxURVIgUFVCTElDQVRJT04gdGVz dHB1Yl9jb2xfbGlzdCBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsODsKK0FMVEVSIFBVQkxJQ0FU SU9OIHRlc3RwdWJfY29sX2xpc3QgQUREIFRBQkxFIHRlc3RwdWJfdGJsOCAoYSwgYyk7CitV UERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfY29sX2xpc3QgRFJPUCBUQUJMRSB0ZXN0cHViX3RibDg7CisKKy0tIGZhaWx1cmU6IG9u ZSBvZiB0aGUgcGFydGl0aW9ucyBoYXMgUkVQTElDQSBJREVOVElUWSBGVUxMCitBTFRFUiBU QUJMRSB0ZXN0cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIEZVTEw7CitBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2NvbF9saXN0IEFERCBUQUJMRSB0ZXN0cHViX3RibDggKGEsIGMp OworVVBEQVRFIHRlc3RwdWJfdGJsOCBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViX2NvbF9saXN0IERST1AgVEFCTEUgdGVzdHB1Yl90Ymw4OworCistLSBhZGQgdGFi bGUgYW5kIHRoZW4gdHJ5IGNoYW5naW5nIHJlcGxpY2EgaWRlbnRpdHkKK0FMVEVSIFRBQkxF IHRlc3RwdWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90 Ymw4XzFfcGtleTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfY29sX2xpc3QgQUREIFRB QkxFIHRlc3RwdWJfdGJsOCAoYSwgYik7CisKKy0tIGZhaWx1cmU6IHJlcGxpY2EgaWRlbnRp dHkgZnVsbCBjYW4ndCBiZSB1c2VkIHdpdGggYSBjb2x1bW4gbGlzdAorQUxURVIgVEFCTEUg dGVzdHB1Yl90Ymw4XzEgUkVQTElDQSBJREVOVElUWSBGVUxMOworVVBEQVRFIHRlc3RwdWJf dGJsOCBTRVQgYSA9IDE7CisKKy0tIGZhaWx1cmU6IHJlcGxpY2EgaWRlbnRpdHkgaGFzIHRv IGJlIGNvdmVyZWQgYnkgdGhlIGNvbHVtbiBsaXN0CitBTFRFUiBUQUJMRSB0ZXN0cHViX3Ri bDhfMSBEUk9QIENPTlNUUkFJTlQgdGVzdHB1Yl90Ymw4XzFfcGtleTsKK0FMVEVSIFRBQkxF IHRlc3RwdWJfdGJsOF8xIEFERCBQUklNQVJZIEtFWSAoYyk7CitBTFRFUiBUQUJMRSB0ZXN0 cHViX3RibDhfMSBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8x X3BrZXk7CitVUERBVEUgdGVzdHB1Yl90Ymw4IFNFVCBhID0gMTsKKworRFJPUCBUQUJMRSB0 ZXN0cHViX3RibDg7CisKKy0tIGNvbHVtbiBsaXN0IGZvciBwYXJ0aXRpb25lZCB0YWJsZXMg aGFzIHRvIGNvdmVyIHJlcGxpY2EgaWRlbnRpdGllcyBmb3IKKy0tIGFsbCBjaGlsZCByZWxh dGlvbnMKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3RibDggKGEgaW50LCBiIHRleHQsIGMgdGV4 dCkgUEFSVElUSU9OIEJZIEhBU0ggKGEpOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9j b2xfbGlzdCBBREQgVEFCTEUgdGVzdHB1Yl90Ymw4IChhLCBiKTsKKy0tIGZpcnN0IHBhcnRp dGlvbiBoYXMgcmVwbGljYSBpZGVudGl0eSAiYSIKK0NSRUFURSBUQUJMRSB0ZXN0cHViX3Ri bDhfMCAoYSBpbnQsIGIgdGV4dCwgYyB0ZXh0KTsKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJs OF8wIEFERCBQUklNQVJZIEtFWSAoYSk7CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDhfMCBS RVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RwdWJfdGJsOF8wX3BrZXk7CistLSBz ZWNvbmQgcGFydGl0aW9uIGhhcyByZXBsaWNhIGlkZW50aXR5ICJiIgorQ1JFQVRFIFRBQkxF IHRlc3RwdWJfdGJsOF8xIChhIGludCwgYiB0ZXh0LCBjIHRleHQpOworQUxURVIgVEFCTEUg dGVzdHB1Yl90Ymw4XzEgQUREIFBSSU1BUlkgS0VZIChjKTsKK0FMVEVSIFRBQkxFIHRlc3Rw dWJfdGJsOF8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90Ymw4XzFf cGtleTsKKworLS0gb2s6IGF0dGFjaGluZyBmaXJzdCBwYXJ0aXRpb24gd29ya3MsIGJlY2F1 c2UgKGEpIGlzIGluIGNvbHVtbiBsaXN0CitBTFRFUiBUQUJMRSB0ZXN0cHViX3RibDggQVRU QUNIIFBBUlRJVElPTiB0ZXN0cHViX3RibDhfMCBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMg MiwgcmVtYWluZGVyIDApOworLS0gZmFpbHVyZTogc2Vjb25kIHBhcnRpdGlvbiBoYXMgcmVw bGljYSBpZGVudGl0eSAoYyksIHdoaWNoIHNpIG5vdCBpbiBjb2x1bW4gbGlzdAorQUxURVIg VEFCTEUgdGVzdHB1Yl90Ymw4IEFUVEFDSCBQQVJUSVRJT04gdGVzdHB1Yl90Ymw4XzEgRk9S IFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAxKTsKK1VQREFURSB0ZXN0cHVi X3RibDggU0VUIGEgPSAxOworCistLSBmYWlsdXJlOiBjaGFuZ2luZyByZXBsaWNhIGlkZW50 aXR5IHRvIEZVTEwgZm9yIHBhcnRpdGlvbiBmYWlscywgYmVjYXVzZQorLS0gb2YgdGhlIGNv bHVtbiBsaXN0IG9uIHRoZSBwYXJlbnQKK0FMVEVSIFRBQkxFIHRlc3RwdWJfdGJsOF8wIFJF UExJQ0EgSURFTlRJVFkgRlVMTDsKK1VQREFURSB0ZXN0cHViX3RibDggU0VUIGEgPSAxOwor CitEUk9QIFRBQkxFIHRlc3RwdWJfdGJsNSwgdGVzdHB1Yl90Ymw2LCB0ZXN0cHViX3RibDcs IHRlc3RwdWJfdGJsOCwgdGVzdHB1Yl90Ymw4XzE7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3Rw dWJfdGFibGVfaW5zLCB0ZXN0cHViX2ZvcnRhYmxlLCB0ZXN0cHViX2ZvcnRhYmxlX2luc2Vy dCwgdGVzdHB1Yl9jb2xfbGlzdDsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLSBUZXN0IGNvbWJpbmF0aW9uIG9mIGNv bHVtbiBsaXN0IGFuZCByb3cgZmlsdGVyCitTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9ICdF UlJPUic7CitDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9ib3RoX2ZpbHRlcnM7CitSRVNF VCBjbGllbnRfbWluX21lc3NhZ2VzOworQ1JFQVRFIFRBQkxFIHRlc3RwdWJfdGJsX2JvdGhf ZmlsdGVycyAoYSBpbnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBLRVkgKGEsYykpOworQUxU RVIgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXk7CitBTFRFUiBQVUJMSUNB VElPTiB0ZXN0cHViX2JvdGhfZmlsdGVycyBBREQgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9m aWx0ZXJzIChhLGMpIFdIRVJFIChjICE9IDEpOworXGRScCsgdGVzdHB1Yl9ib3RoX2ZpbHRl cnMKK1xkKyB0ZXN0cHViX3RibF9ib3RoX2ZpbHRlcnMKKworRFJPUCBUQUJMRSB0ZXN0cHVi X3RibF9ib3RoX2ZpbHRlcnM7CitEUk9QIFBVQkxJQ0FUSU9OIHRlc3RwdWJfYm90aF9maWx0 ZXJzOworLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CisKKy0tIE1vcmUgY29sdW1uIGxpc3QgdGVzdHMgZm9yIHZhbGlkYXRpbmcg Y29sdW1uIHJlZmVyZW5jZXMKK0NSRUFURSBUQUJMRSByZl90YmxfYWJjZF9ub3BrKGEgaW50 LCBiIGludCwgYyBpbnQsIGQgaW50KTsKK0NSRUFURSBUQUJMRSByZl90YmxfYWJjZF9wayhh IGludCwgYiBpbnQsIGMgaW50LCBkIGludCwgUFJJTUFSWSBLRVkoYSxiKSk7CitDUkVBVEUg VEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wayAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50KSBQ QVJUSVRJT04gYnkgUkFOR0UgKGEpOworQ1JFQVRFIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRf cGtfMSAoYiBpbnQsIGEgaW50IFBSSU1BUlkgS0VZKTsKK0FMVEVSIFRBQkxFIHJmX3RibF9h YmNkX3BhcnRfcGsgQVRUQUNIIFBBUlRJVElPTiByZl90YmxfYWJjZF9wYXJ0X3BrXzEgRk9S IFZBTFVFUyBGUk9NICgxKSBUTyAoMTApOworCistLSBDYXNlIDEuIFJFUExJQ0EgSURFTlRJ VFkgREVGQVVMVCAobWVhbnMgdXNlIHByaW1hcnkga2V5IG9yIG5vdGhpbmcpCisKKy0tIDFh LiBSRVBMSUNBIElERU5USVRZIGlzIERFRkFVTFQgYW5kIHRhYmxlIGhhcyBhIFBLLgorU0VU IGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOworQ1JFQVRFIFBVQkxJQ0FUSU9OIHRl c3RwdWI2IEZPUiBUQUJMRSByZl90YmxfYWJjZF9wayAoYSwgYik7CitSRVNFVCBjbGllbnRf bWluX21lc3NhZ2VzOworLS0gb2sgLSAoYSxiKSBjb3ZlcnRzIGFsbCBQSyBjb2xzCitVUERB VEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAxOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BrIChhLCBiLCBjKTsKKy0tIG9rIC0gKGEsYixj KSBjb3ZlcnRzIGFsbCBQSyBjb2xzCitVUERBVEUgcmZfdGJsX2FiY2RfcGsgU0VUIGEgPSAx OworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3Br IChhKTsKKy0tIGZhaWwgLSAiYiIgaXMgbWlzc2luZyBmcm9tIHRoZSBjb2x1bW4gbGlzdAor VVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYik7CistLSBmYWlsIC0gImEiIGlz IG1pc3NpbmcgZnJvbSB0aGUgY29sdW1uIGxpc3QKK1VQREFURSByZl90YmxfYWJjZF9wayBT RVQgYSA9IDE7CisKKy0tIDFiLiBSRVBMSUNBIElERU5USVRZIGlzIERFRkFVTFQgYW5kIHRh YmxlIGhhcyBubyBQSworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJm X3RibF9hYmNkX25vcGsgKGEpOworLS0gb2sgLSB0aGVyZSdzIG5vIHJlcGxpY2EgaWRlbnRp dHksIHNvIGFueSBjb2x1bW4gbGlzdCB3b3JrcworLS0gbm90ZTogaXQgZmFpbHMgYW55d2F5 LCBqdXN0IGEgYml0IGxhdGVyIGJlY2F1c2UgVVBEQVRFIHJlcXVpcmVzIFJJCitVUERBVEUg cmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CisKKy0tIENhc2UgMi4gUkVQTElDQSBJREVO VElUWSBGVUxMCitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9wayBSRVBMSUNBIElERU5USVRZ IEZVTEw7CitBTFRFUiBUQUJMRSByZl90YmxfYWJjZF9ub3BrIFJFUExJQ0EgSURFTlRJVFkg RlVMTDsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJj ZF9wayAoYyk7CistLSBmYWlsIC0gd2l0aCBSRVBMSUNBIElERU5USVRZIEZVTEwgbm8gY29s dW1uIGxpc3QgaXMgYWxsb3dlZAorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsK K0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3Br IChhLCBiLCBjLCBkKTsKKy0tIGZhaWwgLSB3aXRoIFJFUExJQ0EgSURFTlRJVFkgRlVMTCBu byBjb2x1bW4gbGlzdCBpcyBhbGxvd2VkCitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQg YSA9IDE7CisKKy0tIENhc2UgMy4gUkVQTElDQSBJREVOVElUWSBOT1RISU5HCitBTFRFUiBU QUJMRSByZl90YmxfYWJjZF9wayBSRVBMSUNBIElERU5USVRZIE5PVEhJTkc7CitBTFRFUiBU QUJMRSByZl90YmxfYWJjZF9ub3BrIFJFUExJQ0EgSURFTlRJVFkgTk9USElORzsKK0FMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSk7Cist LSBvayAtIFJFUExJQ0EgSURFTlRJVFkgTk9USElORyBtZWFucyBhbGwgY29sdW1uIGxpc3Rz IGFyZSB2YWxpZAorLS0gaXQgc3RpbGwgZmFpbHMgbGF0ZXIgYmVjYXVzZSB3aXRob3V0IFJJ IHdlIGNhbid0IHJlcGxpY2F0ZSB1cGRhdGVzCitVUERBVEUgcmZfdGJsX2FiY2RfcGsgU0VU IGEgPSAxOworQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9h YmNkX3BrIChhLCBiLCBjLCBkKTsKKy0tIG9rIC0gUkVQTElDQSBJREVOVElUWSBOT1RISU5H IG1lYW5zIGFsbCBjb2x1bW4gbGlzdHMgYXJlIHZhbGlkCistLSBpdCBzdGlsbCBmYWlscyBs YXRlciBiZWNhdXNlIHdpdGhvdXQgUkkgd2UgY2FuJ3QgcmVwbGljYXRlIHVwZGF0ZXMKK1VQ REFURSByZl90YmxfYWJjZF9wayBTRVQgYSA9IDE7CitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAoZCk7CistLSBvayAtIFJFUExJQ0Eg SURFTlRJVFkgTk9USElORyBtZWFucyBhbGwgY29sdW1uIGxpc3RzIGFyZSB2YWxpZAorLS0g aXQgc3RpbGwgZmFpbHMgbGF0ZXIgYmVjYXVzZSB3aXRob3V0IFJJIHdlIGNhbid0IHJlcGxp Y2F0ZSB1cGRhdGVzCitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CisKKy0t IENhc2UgNC4gUkVQTElDQSBJREVOVElUWSBJTkRFWAorQUxURVIgVEFCTEUgcmZfdGJsX2Fi Y2RfcGsgQUxURVIgQ09MVU1OIGMgU0VUIE5PVCBOVUxMOworQ1JFQVRFIFVOSVFVRSBJTkRF WCBpZHhfYWJjZF9wa19jIE9OIHJmX3RibF9hYmNkX3BrKGMpOworQUxURVIgVEFCTEUgcmZf dGJsX2FiY2RfcGsgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCBpZHhfYWJjZF9wa19j OworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayBBTFRFUiBDT0xVTU4gYyBTRVQgTk9U IE5VTEw7CitDUkVBVEUgVU5JUVVFIElOREVYIGlkeF9hYmNkX25vcGtfYyBPTiByZl90Ymxf YWJjZF9ub3BrKGMpOworQUxURVIgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayBSRVBMSUNBIElE RU5USVRZIFVTSU5HIElOREVYIGlkeF9hYmNkX25vcGtfYzsKK0FMVEVSIFBVQkxJQ0FUSU9O IHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYSk7CistLSBmYWlsIC0gY29s dW1uIGxpc3QgImEiIGRvZXMgbm90IGNvdmVyIHRoZSBSRVBMSUNBIElERU5USVRZIElOREVY IG9uICJjIgorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wayAoYyk7CistLSBvayAt IGNvbHVtbiBsaXN0ICJjIiBkb2VzIGNvdmVyIHRoZSBSRVBMSUNBIElERU5USVRZIElOREVY IG9uICJjIgorVVBEQVRFIHJmX3RibF9hYmNkX3BrIFNFVCBhID0gMTsKK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9ub3BrIChhKTsKKy0tIGZh aWwgLSBjb2x1bW4gbGlzdCAiYSIgZG9lcyBub3QgY292ZXIgdGhlIFJFUExJQ0EgSURFTlRJ VFkgSU5ERVggb24gImMiCitVUERBVEUgcmZfdGJsX2FiY2Rfbm9wayBTRVQgYSA9IDE7CitB TFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2Rfbm9wayAo Yyk7CistLSBvayAtIGNvbHVtbiBsaXN0ICJjIiBkb2VzIGNvdmVyIHRoZSBSRVBMSUNBIElE RU5USVRZIElOREVYIG9uICJjIgorVVBEQVRFIHJmX3RibF9hYmNkX25vcGsgU0VUIGEgPSAx OworCistLSBUZXN0cyBmb3IgcGFydGl0aW9uZWQgdGFibGUKKworLS0gc2V0IFBVQkxJU0hf VklBX1BBUlRJVElPTl9ST09UIHRvIGZhbHNlIGFuZCB0ZXN0IGNvbHVtbiBsaXN0IGZvciBw YXJ0aXRpb25lZAorLS0gdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCAo UFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1Q9MCk7CistLSBmYWlsIC0gY2Fubm90IHVzZSBj b2x1bW4gbGlzdCBmb3IgcGFydGl0aW9uZWQgdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRl c3RwdWI2IFNFVCBUQUJMRSByZl90YmxfYWJjZF9wYXJ0X3BrIChhKTsKKy0tIG9rIC0gY2Fu IHVzZSBjb2x1bW4gbGlzdCBmb3IgcGFydGl0aW9uCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0 cHViNiBTRVQgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9wa18xIChhKTsKKy0tIG9rIC0gImEi IGlzIGEgUEsgY29sCitVUERBVEUgcmZfdGJsX2FiY2RfcGFydF9wayBTRVQgYSA9IDE7Cist LSBzZXQgUFVCTElTSF9WSUFfUEFSVElUSU9OX1JPT1QgdG8gdHJ1ZSBhbmQgdGVzdCBjb2x1 bW4gbGlzdCBmb3IgcGFydGl0aW9uZWQKKy0tIHRhYmxlCitBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViNiBTRVQgKFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTEpOworLS0gb2sgLSBj YW4gdXNlIGNvbHVtbiBsaXN0IGZvciBwYXJ0aXRpb25lZCB0YWJsZQorQUxURVIgUFVCTElD QVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3BhcnRfcGsgKGEpOworLS0g b2sgLSAiYSIgaXMgYSBQSyBjb2wKK1VQREFURSByZl90YmxfYWJjZF9wYXJ0X3BrIFNFVCBh ID0gMTsKKy0tIGZhaWwgLSBjYW5ub3Qgc2V0IFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09U IHRvIGZhbHNlIGlmIGFueSBjb2x1bW4gbGlzdCBpcworLS0gdXNlZCBmb3IgcGFydGl0aW9u ZWQgdGFibGUKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI2IFNFVCAoUFVCTElTSF9WSUFf UEFSVElUSU9OX1JPT1Q9MCk7CistLSBOb3cgY2hhbmdlIHRoZSByb290IGNvbHVtbiBsaXN0 IHRvIHVzZSBhIGNvbHVtbiAiYiIKKy0tICh3aGljaCBpcyBub3QgaW4gdGhlIHJlcGxpY2Eg aWRlbnRpdHkpCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgVEFCTEUgcmZfdGJs X2FiY2RfcGFydF9wa18xIChiKTsKKy0tIG9rIC0gd2UgZG9uJ3QgaGF2ZSBjb2x1bW4gbGlz dCBmb3IgcGFydGl0aW9uZWQgdGFibGUuCitBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNiBT RVQgKFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UPTApOworLS0gZmFpbCAtICJiIiBpcyBu b3QgaW4gUkVQTElDQSBJREVOVElUWSBJTkRFWAorVVBEQVRFIHJmX3RibF9hYmNkX3BhcnRf cGsgU0VUIGEgPSAxOworLS0gc2V0IFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09UIHRvIHRy dWUKKy0tIGNhbiB1c2UgY29sdW1uIGxpc3QgZm9yIHBhcnRpdGlvbmVkIHRhYmxlCitBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViNiBTRVQgKFBVQkxJU0hfVklBX1BBUlRJVElPTl9ST09U PTEpOworLS0gb2sgLSBjYW4gdXNlIGNvbHVtbiBsaXN0IGZvciBwYXJ0aXRpb25lZCB0YWJs ZQorQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjYgU0VUIFRBQkxFIHJmX3RibF9hYmNkX3Bh cnRfcGsgKGIpOworLS0gZmFpbCAtICJiIiBpcyBub3QgaW4gUkVQTElDQSBJREVOVElUWSBJ TkRFWAorVVBEQVRFIHJmX3RibF9hYmNkX3BhcnRfcGsgU0VUIGEgPSAxOworCitEUk9QIFBV QkxJQ0FUSU9OIHRlc3RwdWI2OworRFJPUCBUQUJMRSByZl90YmxfYWJjZF9wazsKK0RST1Ag VEFCTEUgcmZfdGJsX2FiY2Rfbm9wazsKK0RST1AgVEFCTEUgcmZfdGJsX2FiY2RfcGFydF9w azsKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorCiAtLSBUZXN0IGNhY2hlIGludmFsaWRhdGlvbiBGT1IgQUxMIFRBQkxFUyBw dWJsaWNhdGlvbgogU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRF IFRBQkxFIHRlc3RwdWJfdGJsNChhIGludCk7CkBAIC02MTQsNiArODk3LDEwIEBAIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hF TUEgbm9uX2V4aXN0ZW50X3NjaGVtCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3Jz Y2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rlc3QxOwog XGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCiAKKy0tIFZlcmlmeSB0aGF0IGl0IGZhaWxzIHRv IGFkZCBhIHNjaGVtYSB3aXRoIGEgY29sdW1uIHNwZWNpZmljYXRpb24KK0FMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgZm9v IChhLCBiKTsKK0FMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBBREQgQUxM IFRBQkxFUyBJTiBTQ0hFTUEgZm9vLCBiYXIgKGEsIGIpOworCiAtLSBjbGVhbnVwIHB1Yl90 ZXN0MSBzY2hlbWEgZm9yIGludmFsaWRhdGlvbiB0ZXN0cwogQUxURVIgUFVCTElDQVRJT04g dGVzdHB1YjJfZm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Qx OwogRFJPUCBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3JzY2hlbWEsIHRlc3RwdWI0X2ZvcnNj aGVtYSwgdGVzdHB1YjVfZm9yc2NoZW1hLCB0ZXN0cHViNl9mb3JzY2hlbWEsIHRlc3RwdWJf Zm9ydGFibGU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzBfY29s dW1uX2xpc3QucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMzBfY29sdW1uX2xpc3Qu cGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVjZWFlYzgzY2Ri Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMwX2NvbHVt bl9saXN0LnBsCkBAIC0wLDAgKzEsMTEyNCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjIsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKKyMgVGVzdCBwYXJ0aWFsLWNv bHVtbiBwdWJsaWNhdGlvbiBvZiB0YWJsZXMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCisjIGNyZWF0ZSBwdWJsaXNoZXIgbm9kZQor bXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCdw dWJsaXNoZXInKTsKKyRub2RlX3B1Ymxpc2hlci0+aW5pdChhbGxvd3Nfc3RyZWFtaW5nID0+ ICdsb2dpY2FsJyk7Ciskbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCisjIGNyZWF0ZSBzdWJz Y3JpYmVyIG5vZGUKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpD bHVzdGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxs b3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+YXBwZW5k X2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsCisJcXEobWF4X2xvZ2ljYWxfcmVwbGljYXRpb25f d29ya2VycyA9IDYpKTsKKyRub2RlX3N1YnNjcmliZXItPnN0YXJ0OworCitteSAkcHVibGlz aGVyX2Nvbm5zdHIgPSAkbm9kZV9wdWJsaXNoZXItPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0 Z3Jlcyc7CisKK3N1YiB3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYworeworCW15ICgkbm9k ZSkgPSBAXzsKKworCSMgQWxzbyB3YWl0IGZvciBpbml0aWFsIHRhYmxlIHN5bmMgdG8gZmlu aXNoCisJbXkgJHN5bmNlZF9xdWVyeSA9ICJTRUxFQ1QgY291bnQoMSkgPSAwIEZST00gcGdf c3Vic2NyaXB0aW9uX3JlbCBXSEVSRSBzcnN1YnN0YXRlIE5PVCBJTiAoJ3InLCAncycpOyI7 CisKKwkkbm9kZS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCAkc3luY2VkX3F1ZXJ5 KQorCQlvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBzdWJzY3JpYmVyIHRv IHN5bmNocm9uaXplIGRhdGEiOworfQorCisjIHNldHVwIHRhYmxlcyBvbiBib3RoIG5vZGVz CisKKyMgdGFiMTogc2ltcGxlIDE6MSByZXBsaWNhdGlvbgorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjEgKGEgaW50IFBS SU1BUlkgS0VZLCAiQiIgaW50LCBjIGludCkKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjEgKGEgaW50IFBS SU1BUlkgS0VZLCAiQiIgaW50LCBjIGludCkKKykpOworCisjIHRhYjI6IHJlcGxpY2F0aW9u IGZyb20gcmVndWxhciB0byB0YWJsZSB3aXRoIGZld2VyIGNvbHVtbnMKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWIyIChh IGludCBQUklNQVJZIEtFWSwgYiB2YXJjaGFyLCBjIGludCk7CispKTsKKworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWIy IChhIGludCBQUklNQVJZIEtFWSwgYiB2YXJjaGFyKQorKSk7CisKKyMgdGFiMzogc2ltcGxl IDE6MSByZXBsaWNhdGlvbiB3aXRoIHdlaXJkIGNvbHVtbiBuYW1lcworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjMgKCJh JyIgaW50IFBSSU1BUlkgS0VZLCAiQiIgdmFyY2hhciwgImMnIiBpbnQpCispKTsKKworJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJM RSB0YWIzICgiYSciIGludCBQUklNQVJZIEtFWSwgImMnIiBpbnQpCispKTsKKworIyB0ZXN0 X3BhcnQ6IHBhcnRpdGlvbmVkIHRhYmxlcywgd2l0aCBwYXJ0aXRpb25pbmcgKGluY2x1ZGlu ZyBtdWx0aS1sZXZlbAorIyBwYXJ0aXRpb25pbmcsIGFuZCBmZXdlciBjb2x1bW5zIG9uIHRo ZSBzdWJzY3JpYmVyKQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydCAoYSBpbnQgUFJJTUFSWSBLRVksIGIgdGV4 dCwgYyB0aW1lc3RhbXB0eikgUEFSVElUSU9OIEJZIExJU1QgKGEpOworCUNSRUFURSBUQUJM RSB0ZXN0X3BhcnRfMV8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnQgRk9SIFZBTFVFUyBJTiAo MSwyLDMsNCw1LDYpOworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfMl8xIFBBUlRJVElPTiBP RiB0ZXN0X3BhcnQgRk9SIFZBTFVFUyBJTiAoNyw4LDksMTAsMTEsMTIpIFBBUlRJVElPTiBC WSBMSVNUIChhKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0XzJfMiBQQVJUSVRJT04gT0Yg dGVzdF9wYXJ0XzJfMSBGT1IgVkFMVUVTIElOICg3LDgsOSwxMCk7CispKTsKKworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0 ZXN0X3BhcnQgKGEgaW50IFBSSU1BUlkgS0VZLCBiIHRleHQpIFBBUlRJVElPTiBCWSBMSVNU IChhKTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0XzFfMSBQQVJUSVRJT04gT0YgdGVzdF9w YXJ0IEZPUiBWQUxVRVMgSU4gKDEsMiwzLDQsNSw2KTsKKwlDUkVBVEUgVEFCTEUgdGVzdF9w YXJ0XzJfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0IEZPUiBWQUxVRVMgSU4gKDcsOCw5LDEw LDExLDEyKSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFy dF8yXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF8yXzEgRk9SIFZBTFVFUyBJTiAoNyw4LDks MTApOworKSk7CisKKyMgdGFiNDogdGFibGUgd2l0aCB1c2VyLWRlZmluZWQgZW51bSB0eXBl cworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRF IFRZUEUgdGVzdF90eXAgQVMgRU5VTSAoJ2JsdWUnLCAncmVkJyk7CisJQ1JFQVRFIFRBQkxF IHRhYjQgKGEgSU5UIFBSSU1BUlkgS0VZLCBiIHRlc3RfdHlwLCBjIGludCwgZCB0ZXh0KTsK KykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ Q1JFQVRFIFRZUEUgdGVzdF90eXAgQVMgRU5VTSAoJ2JsdWUnLCAncmVkJyk7CisJQ1JFQVRF IFRBQkxFIHRhYjQgKGEgSU5UIFBSSU1BUlkgS0VZLCBiIHRlc3RfdHlwLCBkIHRleHQpOwor KSk7CisKKworIyBURVNUOiBjcmVhdGUgcHVibGljYXRpb24gYW5kIHN1YnNjcmlwdGlvbiBm b3Igc29tZSBvZiB0aGUgdGFibGVzIHdpdGgKKyMgY29sdW1uIGxpc3RzCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgUFVCTElDQVRJT04g cHViMQorCSAgIEZPUiBUQUJMRSB0YWIxIChhLCAiQiIpLCB0YWIzICgiYSciLCAiYyciKSwg dGVzdF9wYXJ0IChhLCBiKSwgdGFiNCAoYSwgYiwgZCkKKwkgIFdJVEggKHB1Ymxpc2hfdmlh X3BhcnRpdGlvbl9yb290ID0gJ3RydWUnKTsKKykpOworCisjIGNoZWNrIHRoYXQgd2UgZ290 IHRoZSByaWdodCBwcmF0dHJzIHZhbHVlcyBmb3IgdGhlIHB1YmxpY2F0aW9uIGluIHRoZQor IyBwZ19wdWJsaWNhdGlvbl9yZWwgY2F0YWxvZyAob3JkZXIgYnkgcmVsbmFtZSwgdG8gZ2V0 IHN0YWJsZSBvcmRlcmluZykKK215ICRyZXN1bHQgPSAkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCBxcSgKKwlTRUxFQ1QgcmVsbmFtZSwgcHJhdHRycworCUZST00g cGdfcHVibGljYXRpb25fcmVsIHBiIEpPSU4gcGdfY2xhc3MgcGMgT04ocGIucHJyZWxpZCA9 IHBjLm9pZCkKKwlPUkRFUiBCWSByZWxuYW1lCispKTsKKworaXMoJHJlc3VsdCwgcXEodGFi MXwxIDIKK3RhYjN8MSAzCit0YWI0fDEgMiA0Cit0ZXN0X3BhcnR8MSAyKSwgJ3B1YmxpY2F0 aW9uIHJlbGF0aW9uIHVwZGF0ZWQnKTsKKworIyBURVNUOiBpbnNlcnQgZGF0YSBpbnRvIHRo ZSB0YWJsZXMsIGNyZWF0ZSBzdWJzY3JpcHRpb24gYW5kIHNlZSBpZiBzeW5jCisjIHJlcGxp Y2F0ZXMgdGhlIHJpZ2h0IGNvbHVtbnMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjEgVkFMVUVTICgxLCAyLCAzKTsKKwlJ TlNFUlQgSU5UTyB0YWIxIFZBTFVFUyAoNCwgNSwgNik7CispKTsKKworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiMyBWQUxV RVMgKDEsIDIsIDMpOworCUlOU0VSVCBJTlRPIHRhYjMgVkFMVUVTICg0LCA1LCA2KTsKKykp OworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNF UlQgSU5UTyB0YWI0IFZBTFVFUyAoMSwgJ3JlZCcsIDMsICdvaCBteScpOworCUlOU0VSVCBJ TlRPIHRhYjQgVkFMVUVTICgyLCAnYmx1ZScsIDQsICdoZWxsbycpOworKSk7CisKKyMgcmVw bGljYXRpb24gb2YgcGFydGl0aW9uZWQgdGFibGUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfcGFydCBWQUxVRVMgKDEs ICdhYmMnLCAnMjAyMS0wNy0wNCAxMjowMDowMCcpOworCUlOU0VSVCBJTlRPIHRlc3RfcGFy dCBWQUxVRVMgKDIsICdiY2QnLCAnMjAyMS0wNy0wMyAxMToxMjoxMycpOworCUlOU0VSVCBJ TlRPIHRlc3RfcGFydCBWQUxVRVMgKDcsICdhYmMnLCAnMjAyMS0wNy0wNCAxMjowMDowMCcp OworCUlOU0VSVCBJTlRPIHRlc3RfcGFydCBWQUxVRVMgKDgsICdiY2QnLCAnMjAyMS0wNy0w MyAxMToxMjoxMycpOworKSk7CisKKyMgY3JlYXRlIHN1YnNjcmlwdGlvbiBmb3IgdGhlIHB1 YmxpY2F0aW9uLCB3YWl0IGZvciBzeW5jIHRvIGNvbXBsZXRlLAorIyB0aGVuIGNoZWNrIHRo ZSBzeW5jIHJlc3VsdHMKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxcSgKKwlDUkVBVEUgU1VCU0NSSVBUSU9OIHN1YjEgQ09OTkVDVElPTiAnJHB1Ymxpc2hl cl9jb25uc3RyJyBQVUJMSUNBVElPTiBwdWIxCispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0 aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisKKyMgdGFiMTogb25seSAoYSxiKSBpcyBy ZXBsaWNhdGVkCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGFiMSBPUkRFUiBCWSBhIik7CitpcygkcmVzdWx0 LCBxcSgxfDJ8Cis0fDV8KSwgJ2luc2VydCBvbiBjb2x1bW4gdGFiMS5jIGlzIG5vdCByZXBs aWNhdGVkJyk7CisKKyMgdGFiMzogb25seSAoYSxjKSBpcyByZXBsaWNhdGVkCiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXEoU0VMRUNU ICogRlJPTSB0YWIzIE9SREVSIEJZICJhJyIpKTsKK2lzKCRyZXN1bHQsIHFxKDF8MworNHw2 KSwgJ2luc2VydCBvbiBjb2x1bW4gdGFiMy5iIGlzIG5vdCByZXBsaWNhdGVkJyk7CisKKyMg dGFiNDogb25seSAoYSxiLGQpIGlzIHJlcGxpY2F0ZWQKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0YWI0IE9S REVSIEJZIGEiKTsKK2lzKCRyZXN1bHQsIHFxKDF8cmVkfG9oIG15CisyfGJsdWV8aGVsbG8p LCAnaW5zZXJ0IG9uIGNvbHVtbiB0YWI0LmMgaXMgbm90IHJlcGxpY2F0ZWQnKTsKKworIyB0 ZXN0X3BhcnQ6IChhLGIpIGlzIHJlcGxpY2F0ZWQKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0ZXN0X3BhcnQg T1JERVIgQlkgYSIpOworaXMoJHJlc3VsdCwgcXEoMXxhYmMKKzJ8YmNkCis3fGFiYworOHxi Y2QpLCAnaW5zZXJ0IG9uIGNvbHVtbiB0ZXN0X3BhcnQuYyBjb2x1bW5zIGlzIG5vdCByZXBs aWNhdGVkJyk7CisKKworIyBURVNUOiBub3cgaW5zZXJ0IG1vcmUgZGF0YSBpbnRvIHRoZSB0 YWJsZXMsIGFuZCB3YWl0IHVudGlsIHdlIHJlcGxpY2F0ZQorIyB0aGVtIChub3QgYnkgdGFi bGVzeW5jLCBidXQgcmVndWxhciBkZWNvZGluZyBhbmQgcmVwbGljYXRpb24pCisKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRh YjEgVkFMVUVTICgyLCAzLCA0KTsKKwlJTlNFUlQgSU5UTyB0YWIxIFZBTFVFUyAoNSwgNiwg Nyk7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CisJSU5TRVJUIElOVE8gdGFiMyBWQUxVRVMgKDIsIDMsIDQpOworCUlOU0VSVCBJTlRPIHRh YjMgVkFMVUVTICg1LCA2LCA3KTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0YWI0IFZBTFVFUyAoMywgJ3JlZCcs IDUsICdmb28nKTsKKwlJTlNFUlQgSU5UTyB0YWI0IFZBTFVFUyAoNCwgJ2JsdWUnLCA2LCAn YmFyJyk7CispKTsKKworIyByZXBsaWNhdGlvbiBvZiBwYXJ0aXRpb25lZCB0YWJsZQorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8g dGVzdF9wYXJ0IFZBTFVFUyAoMywgJ3h4eCcsICcyMDIyLTAyLTAxIDEwOjAwOjAwJyk7CisJ SU5TRVJUIElOVE8gdGVzdF9wYXJ0IFZBTFVFUyAoNCwgJ3l5eScsICcyMDIyLTAzLTAyIDE1 OjEyOjEzJyk7CisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0IFZBTFVFUyAoOSwgJ3p6eicsICcy MDIyLTA0LTAzIDIxOjAwOjAwJyk7CisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0IFZBTFVFUyAo MTAsICdxcXEnLCAnMjAyMi0wNS0wNCAyMjoxMjoxMycpOworKSk7CisKKyMgd2FpdCBmb3Ig Y2F0Y2h1cCBiZWZvcmUgY2hlY2tpbmcgdGhlIHN1YnNjcmliZXIKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCisjIHRhYjE6IG9ubHkgKGEsYikgaXMg cmVwbGljYXRlZAorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLAorCSJTRUxFQ1QgKiBGUk9NIHRhYjEgT1JERVIgQlkgYSIpOworaXMoJHJlc3Vs dCwgcXEoMXwyfAorMnwzfAorNHw1fAorNXw2fCksICdpbnNlcnQgb24gY29sdW1uIHRhYjEu YyBpcyBub3QgcmVwbGljYXRlZCcpOworCisjIHRhYjM6IG9ubHkgKGEsYykgaXMgcmVwbGlj YXRlZAorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LAorCXFxKFNFTEVDVCAqIEZST00gdGFiMyBPUkRFUiBCWSAiYSciKSk7CitpcygkcmVzdWx0 LCBxcSgxfDMKKzJ8NAorNHw2Cis1fDcpLCAnaW5zZXJ0IG9uIGNvbHVtbiB0YWIzLmIgaXMg bm90IHJlcGxpY2F0ZWQnKTsKKworIyB0YWI0OiBvbmx5IChhLGIsZCkgaXMgcmVwbGljYXRl ZAorJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAor CSJTRUxFQ1QgKiBGUk9NIHRhYjQgT1JERVIgQlkgYSIpOworaXMoJHJlc3VsdCwgcXEoMXxy ZWR8b2ggbXkKKzJ8Ymx1ZXxoZWxsbworM3xyZWR8Zm9vCis0fGJsdWV8YmFyKSwgJ2luc2Vy dCBvbiBjb2x1bW4gdGFiNC5jIGlzIG5vdCByZXBsaWNhdGVkJyk7CisKKyMgdGVzdF9wYXJ0 OiAoYSxiKSBpcyByZXBsaWNhdGVkCiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCAqIEZST00gdGVzdF9wYXJ0IE9SREVSIEJZ IGEiKTsKK2lzKCRyZXN1bHQsIHFxKDF8YWJjCisyfGJjZAorM3x4eHgKKzR8eXl5Cis3fGFi YworOHxiY2QKKzl8enp6CisxMHxxcXEpLCAnaW5zZXJ0IG9uIGNvbHVtbiB0ZXN0X3BhcnQu YyBjb2x1bW5zIGlzIG5vdCByZXBsaWNhdGVkJyk7CisKKworIyBURVNUOiBkbyBzb21lIHVw ZGF0ZXMgb24gc29tZSBvZiB0aGUgdGFibGVzLCBib3RoIG9uIGNvbHVtbnMgaW5jbHVkZWQK KyMgaW4gdGhlIGNvbHVtbiBsaXN0IGFuZCBvdGhlcgorCisjIHRhYjE6IHVwZGF0ZSBvZiBy ZXBsaWNhdGVkIGNvbHVtbgorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwlxcShVUERBVEUgdGFiMSBTRVQgIkIiID0gMiAqICJCIiB3aGVyZSBhID0gMSkpOwor CisjIHRhYjE6IHVwZGF0ZSBvZiBub24tcmVwbGljYXRlZCBjb2x1bW4KKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXEoVVBEQVRFIHRhYjEgU0VUIGMgPSAy KmMgd2hlcmUgYSA9IDQpKTsKKworIyB0YWIzOiB1cGRhdGUgb2Ygbm9uLXJlcGxpY2F0ZWQK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJcXEoVVBEQVRFIHRh YjMgU0VUICJCIiA9ICJCIiB8fCAnIHVwZGF0ZWQnIHdoZXJlICJhJyIgPSA0KSk7CisKKyMg dGFiMzogdXBkYXRlIG9mIHJlcGxpY2F0ZWQgY29sdW1uCiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFVQREFURSB0YWIzIFNFVCAiYyciID0gMiAqICJj JyIgd2hlcmUgImEnIiA9IDEpKTsKKworIyB0YWI0Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCXFxKFVQREFURSB0YWI0IFNFVCBiID0gJ2JsdWUnLCBjID0g YyAqIDIsIGQgPSBkIHx8ICcgdXBkYXRlZCcgd2hlcmUgYSA9IDEpKTsKKworIyB0YWI0Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFVQREFURSB0YWI0 IFNFVCBiID0gJ3JlZCcsIGMgPSBjICogMiwgZCA9IGQgfHwgJyB1cGRhdGVkJyB3aGVyZSBh ID0gMikpOworCisjIHdhaXQgZm9yIHRoZSByZXBsaWNhdGlvbiB0byBjYXRjaCB1cCwgYW5k IGNoZWNrIHRoZSBVUERBVEUgcmVzdWx0cyBnb3QKKyMgcmVwbGljYXRlZCBjb3JyZWN0bHks IHdpdGggdGhlIHJpZ2h0IGNvbHVtbiBsaXN0Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ3N1YjEnKTsKKworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLAorCXFxKFNFTEVDVCAqIEZST00gdGFiMSBPUkRFUiBCWSBhKSk7 CitpcygkcmVzdWx0LAorcXEoMXw0fAorMnwzfAorNHw1fAorNXw2fCksICdvbmx5IHVwZGF0 ZSBvbiBjb2x1bW4gdGFiMS5iIGlzIHJlcGxpY2F0ZWQnKTsKKworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCXFxKFNFTEVDVCAqIEZST00g dGFiMyBPUkRFUiBCWSAiYSciKSk7CitpcygkcmVzdWx0LAorcXEoMXw2CisyfDQKKzR8Ngor NXw3KSwgJ29ubHkgdXBkYXRlIG9uIGNvbHVtbiB0YWIzLmMgaXMgcmVwbGljYXRlZCcpOwor CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ cXEoU0VMRUNUICogRlJPTSB0YWI0IE9SREVSIEJZIGEpKTsKKworaXMoJHJlc3VsdCwgcXEo MXxibHVlfG9oIG15IHVwZGF0ZWQKKzJ8cmVkfGhlbGxvIHVwZGF0ZWQKKzN8cmVkfGZvbwor NHxibHVlfGJhciksICd1cGRhdGUgb24gY29sdW1uIHRhYjQuYyBpcyBub3QgcmVwbGljYXRl ZCcpOworCisKKyMgVEVTVDogYWRkIHRhYmxlIHdpdGggYSBjb2x1bW4gbGlzdCwgaW5zZXJ0 IGRhdGEsIHJlcGxpY2F0ZQorCisjIGluc2VydCBzb21lIGRhdGEgYmVmb3JlIGFkZGluZyBp dCB0byB0aGUgcHVibGljYXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjIgVkFMVUVTICgxLCAnYWJjJywgMyk7Cisp KTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIg UFVCTElDQVRJT04gcHViMSBBREQgVEFCTEUgdGFiMiAoYSwgYikiKTsKKworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFMVEVSIFNVQlNDUklQVElPTiBz dWIxIFJFRlJFU0ggUFVCTElDQVRJT04iKTsKKworIyB3YWl0IGZvciB0aGUgdGFibGVzeW5j IHRvIGNvbXBsZXRlLCBhZGQgYSBiaXQgbW9yZSBkYXRhIGFuZCB0aGVuIGNoZWNrCisjIHRo ZSByZXN1bHRzIG9mIHRoZSByZXBsaWNhdGlvbgord2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5 bmMoJG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjIgVkFMVUVTICgyLCAnZGVmJywgNik7 CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki U0VMRUNUICogRlJPTSB0YWIyIE9SREVSIEJZIGEiKTsKK2lzKCRyZXN1bHQsIHFxKDF8YWJj CisyfGRlZiksICdpbnNlcnQgb24gY29sdW1uIHRhYjIuYyBpcyBub3QgcmVwbGljYXRlZCcp OworCisjIGRvIGEgY291cGxlIHVwZGF0ZXMsIGNoZWNrIHRoZSBjb3JyZWN0IHN0dWZmIGdl dHMgcmVwbGljYXRlZAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cXEoCisJVVBEQVRFIHRhYjIgU0VUIGMgPSA1IHdoZXJlIGEgPSAxOworCVVQREFURSB0YWIy IFNFVCBiID0gJ3h5eicgd2hlcmUgYSA9IDI7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUICogRlJPTSB0YWIyIE9SREVSIEJZ IGEiKTsKK2lzKCRyZXN1bHQsIHFxKDF8YWJjCisyfHh5eiksICd1cGRhdGUgb24gY29sdW1u IHRhYjIuYyBpcyBub3QgcmVwbGljYXRlZCcpOworCisKKyMgVEVTVDogYWRkIGEgdGFibGUg dG8gdHdvIHB1YmxpY2F0aW9ucyB3aXRoIGRpZmZlcmVudCBjb2x1bW4gbGlzdHMsIGFuZAor IyBjcmVhdGUgYSBzaW5nbGUgc3Vic2NyaXB0aW9uIHJlcGxpY2F0aW5nIGJvdGggcHVibGlj YXRpb25zCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlD UkVBVEUgVEFCTEUgdGFiNSAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCwgZCBp bnQpOworCUNSRUFURSBQVUJMSUNBVElPTiBwdWIyIEZPUiBUQUJMRSB0YWI1IChhLCBiKTsK KwlDUkVBVEUgUFVCTElDQVRJT04gcHViMyBGT1IgVEFCTEUgdGFiNSAoYSwgZCk7CisKKwkt LSBpbnNlcnQgYSBjb3VwbGUgaW5pdGlhbCByZWNvcmRzCisJSU5TRVJUIElOVE8gdGFiNSBW QUxVRVMgKDEsIDExLCAxMTEsIDExMTEpOworCUlOU0VSVCBJTlRPIHRhYjUgVkFMVUVTICgy LCAyMiwgMjIyLCAyMjIyKTsKKykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjUgKGEgaW50IFBSSU1BUlkgS0VZ LCBiIGludCwgZCBpbnQpOworKSk7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxcSgKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJ T04gcHViMiwgcHViMworKSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2Rl X3N1YnNjcmliZXIpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1 YjEnKTsKKworIyBpbnNlcnQgZGF0YSBhbmQgbWFrZSBzdXJlIGFsbCB0aGUgY29sdW1ucyAo dW5pb24gb2YgdGhlIGNvbHVtbnMgbGlzdHMpCisjIGdldCBmdWxseSByZXBsaWNhdGVkCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5U TyB0YWI1IFZBTFVFUyAoMywgMzMsIDMzMywgMzMzMyk7CisJSU5TRVJUIElOVE8gdGFiNSBW QUxVRVMgKDQsIDQ0LCA0NDQsIDQ0NDQpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0YWI1IE9SREVSIEJZIGEiKSwKKyAgIHFx KDF8MTF8MTExMQorMnwyMnwyMjIyCiszfDMzfDMzMzMKKzR8NDR8NDQ0NCksCisgICAnb3Zl cmxhcHBpbmcgcHVibGljYXRpb25zIHdpdGggb3ZlcmxhcHBpbmcgY29sdW1uIGxpc3RzJyk7 CisKKyMgYW5kIGZpbmFsbHksIHJlbW92ZSB0aGUgY29sdW1uIGxpc3QgZm9yIG9uZSBvZiB0 aGUgcHVibGljYXRpb25zLCB3aGljaAorIyBtZWFucyByZXBsaWNhdGluZyBhbGwgY29sdW1u cyAocmVtb3ZpbmcgdGhlIGNvbHVtbiBsaXN0KSwgYnV0IGZpcnN0IGFkZAorIyB0aGUgbWlz c2luZyBjb2x1bW4gdG8gdGhlIHRhYmxlIG9uIHN1YnNjcmliZXIKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFBVQkxJQ0FUSU9OIHB1YjMg U0VUIFRBQkxFIHRhYjU7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFJFRlJFU0ggUFVCTElD QVRJT047CisJQUxURVIgVEFCTEUgdGFiNSBBREQgQ09MVU1OIGMgSU5UOworKSk7CisKK3dh aXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCiskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0YWI1 IFZBTFVFUyAoNSwgNTUsIDU1NSwgNTU1NSk7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRhYjUgT1JERVIgQlkgYSIpLAorICAg cXEoMXwxMXwxMTExfAorMnwyMnwyMjIyfAorM3wzM3wzMzMzfAorNHw0NHw0NDQ0fAorNXw1 NXw1NTU1fDU1NSksCisgICAnb3ZlcmxhcHBpbmcgcHVibGljYXRpb25zIHdpdGggb3Zlcmxh cHBpbmcgY29sdW1uIGxpc3RzJyk7CisKKyMgVEVTVDogY3JlYXRlIGEgdGFibGUgd2l0aCBh IGNvbHVtbiBsaXN0LCB0aGVuIGNoYW5nZSB0aGUgcmVwbGljYQorIyBpZGVudGl0eSBieSBy ZXBsYWNpbmcgYSBwcmltYXJ5IGtleSAoYnV0IHVzZSBhIGRpZmZlcmVudCBjb2x1bW4gaW4K KyMgdGhlIGNvbHVtbiBsaXN0KQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRhYjYgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGlu dCwgYyBpbnQsIGQgaW50KTsKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViNCBGT1IgVEFCTEUg dGFiNiAoYSwgYik7CisKKwktLSBpbml0aWFsIGRhdGEKKwlJTlNFUlQgSU5UTyB0YWI2IFZB TFVFUyAoMSwgMjIsIDMzMywgNDQ0NCk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWI2IChhIGludCBQUklN QVJZIEtFWSwgYiBpbnQsIGMgaW50LCBkIGludCk7CispKTsKKworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIx IFNFVCBQVUJMSUNBVElPTiBwdWI0CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5 bmMoJG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjYgVkFMVUVTICgyLCAzMywgNDQ0LCA1 NTU1KTsKKwlVUERBVEUgdGFiNiBTRVQgYiA9IGIgKiAyLCBjID0gYyAqIDMsIGQgPSBkICog NDsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsK KworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAq IEZST00gdGFiNiBPUkRFUiBCWSBhIiksCisJcXEoMXw0NHx8CisyfDY2fHwpLCAncmVwbGlj YXRpb24gd2l0aCB0aGUgb3JpZ2luYWwgcHJpbWFyeSBrZXknKTsKKworIyBub3cgcmVkZWZp bmUgdGhlIGNvbnN0cmFpbnQgLSBtb3ZlIHRoZSBwcmltYXJ5IGtleSB0byBhIGRpZmZlcmVu dCBjb2x1bW4KKyMgKHdoaWNoIGlzIHN0aWxsIGNvdmVyZWQgYnkgdGhlIGNvbHVtbiBsaXN0 LCB0aG91Z2gpCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFx KAorCUFMVEVSIFRBQkxFIHRhYjYgRFJPUCBDT05TVFJBSU5UIHRhYjZfcGtleTsKKwlBTFRF UiBUQUJMRSB0YWI2IEFERCBQUklNQVJZIEtFWSAoYik7CispKTsKKworIyB3ZSBuZWVkIHRv IGRvIHRoZSBzYW1lIHRoaW5nIG9uIHRoZSBzdWJzY3JpYmVyCisjIFhYWCBXaGF0IHdvdWxk IGhhcHBlbiBpZiB0aGlzIGhhcHBlbnMgYmVmb3JlIHRoZSBwdWJsaXNoZXIgQUxURVI/IE9y CisjIGludGVybGVhdmVkLCBzb21laG93PyBCdXQgdGhhdCBzZWVtcyB1bnJlbGF0ZWQgdG8g Y29sdW1uIGxpc3RzLgorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs IHFxKAorCUFMVEVSIFRBQkxFIHRhYjYgRFJPUCBDT05TVFJBSU5UIHRhYjZfcGtleTsKKwlB TFRFUiBUQUJMRSB0YWI2IEFERCBQUklNQVJZIEtFWSAoYik7CispKTsKKworJG5vZGVfc3Vi c2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElP TiBzdWIxIFJFRlJFU0ggUFVCTElDQVRJT04KKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRp b25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGFiNiBWQUxVRVMgKDMsIDU1LCA2 NjYsIDg4ODgpOworCVVQREFURSB0YWI2IFNFVCBiID0gYiAqIDIsIGMgPSBjICogMywgZCA9 IGQgKiA0OworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3Vi MScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VM RUNUICogRlJPTSB0YWI2IE9SREVSIEJZIGEiKSwKKyAgIHFxKDF8ODh8fAorMnwxMzJ8fAor M3wxMTB8fCksCisgICAncmVwbGljYXRpb24gd2l0aCB0aGUgbW9kaWZpZWQgcHJpbWFyeSBr ZXknKTsKKworCisjIFRFU1Q6IGNyZWF0ZSBhIHRhYmxlIHdpdGggYSBjb2x1bW4gbGlzdCwg dGhlbiBjaGFuZ2UgdGhlIHJlcGxpY2EKKyMgaWRlbnRpdHkgYnkgcmVwbGFjaW5nIGEgcHJp bWFyeSBrZXkgd2l0aCBhIGtleSBvbiBtdWx0aXBsZSBjb2x1bW5zCisjIChhbGwgb2YgdGhl bSBjb3ZlcmVkIGJ5IHRoZSBjb2x1bW4gbGlzdCkKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0YWI3IChhIGludCBQUklNQVJZ IEtFWSwgYiBpbnQsIGMgaW50LCBkIGludCk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjUg Rk9SIFRBQkxFIHRhYjcgKGEsIGIpOworCisJLS0gc29tZSBpbml0aWFsIGRhdGEKKwlJTlNF UlQgSU5UTyB0YWI3IFZBTFVFUyAoMSwgMjIsIDMzMywgNDQ0NCk7CispKTsKKworJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0 YWI3IChhIGludCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50LCBkIGludCk7CispKTsKKwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNV QlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNBVElPTiBwdWI1CispKTsKKword2FpdF9mb3Jf c3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRhYjcgVkFMVUVT ICgyLCAzMywgNDQ0LCA1NTU1KTsKKwlVUERBVEUgdGFiNyBTRVQgYiA9IGIgKiAyLCBjID0g YyAqIDMsIGQgPSBkICogNDsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2Nh dGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsIlNFTEVDVCAqIEZST00gdGFiNyBPUkRFUiBCWSBhIiksCisgICBxcSgxfDQ0fHwK KzJ8NjZ8fCksICdyZXBsaWNhdGlvbiB3aXRoIHRoZSBvcmlnaW5hbCBwcmltYXJ5IGtleScp OworCisjIG5vdyByZWRlZmluZSB0aGUgY29uc3RyYWludCAtIG1vdmUgdGhlIHByaW1hcnkg a2V5IHRvIGEgZGlmZmVyZW50IGNvbHVtbgorIyAod2hpY2ggaXMgbm90IGNvdmVyZWQgYnkg dGhlIGNvbHVtbiBsaXN0KQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgcXEoCisJQUxURVIgVEFCTEUgdGFiNyBEUk9QIENPTlNUUkFJTlQgdGFiN19wa2V5Owor CUFMVEVSIFRBQkxFIHRhYjcgQUREIFBSSU1BUlkgS0VZIChhLCBiKTsKKykpOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5UTyB0 YWI3IFZBTFVFUyAoMywgNTUsIDY2NiwgNzc3Nyk7CisJVVBEQVRFIHRhYjcgU0VUIGIgPSBi ICogMiwgYyA9IGMgKiAzLCBkID0gZCAqIDQ7CispKTsKKworJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1YnNjcmliZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRhYjcgT1JERVIgQlkgYSIpLAorICAg cXEoMXw4OHx8CisyfDEzMnx8CiszfDExMHx8KSwKKyAgICdyZXBsaWNhdGlvbiB3aXRoIHRo ZSBtb2RpZmllZCBwcmltYXJ5IGtleScpOworCisjIG5vdyBzd2l0Y2ggdGhlIHByaW1hcnkg a2V5IGFnYWluIHRvIGFub3RoZXIgY29sdW1ucyBub3QgY292ZXJlZCBieSB0aGUKKyMgY29s dW1uIGxpc3QsIGJ1dCBhbHNvIGdlbmVyYXRlIHdyaXRlcyBiZXR3ZWVuIHRoZSBkcm9wIGFu ZCBjcmVhdGlvbgorIyBvZiB0aGUgbmV3IGNvbnN0cmFpbnQKKworJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIgVEFCTEUgdGFiNyBEUk9QIENP TlNUUkFJTlQgdGFiN19wa2V5OworCUlOU0VSVCBJTlRPIHRhYjcgVkFMVUVTICg0LCA3Nywg ODg4LCA5OTk5KTsKKwktLSB1cGRhdGUvZGVsZXRlIGlzIG5vdCBhbGxvd2VkIGZvciB0YWJs ZXMgd2l0aG91dCBSSQorCUFMVEVSIFRBQkxFIHRhYjcgQUREIFBSSU1BUlkgS0VZIChiLCBh KTsKKwlVUERBVEUgdGFiNyBTRVQgYiA9IGIgKiAyLCBjID0gYyAqIDMsIGQgPSBkICogNDsK KwlERUxFVEUgRlJPTSB0YWI3IFdIRVJFIGEgPSAxOworKSk7CisKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0YWI3IE9SREVSIEJZIGEiKSwKKyAg IHFxKDJ8MjY0fHwKKzN8MjIwfHwKKzR8MTU0fHwpLAorICAgJ3JlcGxpY2F0aW9uIHdpdGgg dGhlIG1vZGlmaWVkIHByaW1hcnkga2V5Jyk7CisKKworIyBURVNUOiBwYXJ0aXRpb25lZCB0 YWJsZXMgKHdpdGggcHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSkKKyMgYW5k IHJlcGxpY2EgaWRlbnRpdHkuIFRoZSAobGVhZikgcGFydGl0aW9ucyBtYXkgaGF2ZSBkaWZm ZXJlbnQgUkksIHNvCisjIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHBhcnRpdGlvbiBSSSAod2l0 aCByZXNwZWN0IHRvIHRoZSBjb2x1bW4gbGlzdCkKKyMgd2hpbGUgYXR0YWNoaW5nIHRoZSBw YXJ0aXRpb24uCisKKyMgRmlyc3QsIGxldCdzIGNyZWF0ZSBhIHBhcnRpdGlvbmVkIHRhYmxl IHdpdGggdHdvIHBhcnRpdGlvbnMsIGVhY2ggd2l0aAorIyBhIGRpZmZlcmVudCBSSSwgYnV0 IGEgY29sdW1uIGxpc3Qgbm90IGNvdmVyaW5nIGFsbCB0aG9zZSBSSS4KKworJG5vZGVfcHVi bGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3Rf cGFydF9hIChhIGludCwgYiBpbnQsIGMgaW50KSBQQVJUSVRJT04gQlkgTElTVCAoYSk7CisK KwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2FfMSBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2Eg Rk9SIFZBTFVFUyBJTiAoMSwyLDMsNCw1KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYV8x IEFERCBQUklNQVJZIEtFWSAoYSk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2FfMSBSRVBM SUNBIElERU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9hXzFfcGtleTsKKworCUNSRUFU RSBUQUJMRSB0ZXN0X3BhcnRfYV8yIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfYSBGT1IgVkFM VUVTIElOICg2LDcsOCw5LDEwKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYV8yIEFERCBQ UklNQVJZIEtFWSAoYik7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2FfMiBSRVBMSUNBIElE RU5USVRZIFVTSU5HIElOREVYIHRlc3RfcGFydF9hXzJfcGtleTsKKworCS0tIGluaXRpYWwg ZGF0YSwgb25lIHJvdyBpbiBlYWNoIHBhcnRpdGlvbgorCUlOU0VSVCBJTlRPIHRlc3RfcGFy dF9hIFZBTFVFUyAoMSwgMyk7CisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2EgVkFMVUVTICg2 LCA0KTsKKykpOworCisjIGRvIHRoZSBzYW1lIHRoaW5nIG9uIHRoZSBzdWJzY3JpYmVyICh3 aXRoIHRoZSBvcHBvc2l0ZSBjb2x1bW4gb3JkZXIpCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9hIChiIGlu dCwgYSBpbnQpIFBBUlRJVElPTiBCWSBMSVNUIChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0 X3BhcnRfYV8xIFBBUlRJVElPTiBPRiB0ZXN0X3BhcnRfYSBGT1IgVkFMVUVTIElOICgxLDIs Myw0LDUpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9hXzEgQUREIFBSSU1BUlkgS0VZIChh KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfYV8xIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcg SU5ERVggdGVzdF9wYXJ0X2FfMV9wa2V5OworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9h XzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9hIEZPUiBWQUxVRVMgSU4gKDYsNyw4LDksMTAp OworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9hXzIgQUREIFBSSU1BUlkgS0VZIChiKTsKKwlB TFRFUiBUQUJMRSB0ZXN0X3BhcnRfYV8yIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgg dGVzdF9wYXJ0X2FfMl9wa2V5OworKSk7CisKKyMgY3JlYXRlIGEgcHVibGljYXRpb24gcmVw bGljYXRpbmcganVzdCB0aGUgY29sdW1uICJhIiwgd2hpY2ggaXMgbm90IGVub3VnaAorIyBm b3IgdGhlIHNlY29uZCBwYXJ0aXRpb24KKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIHFxKAorCUNSRUFURSBQVUJMSUNBVElPTiBwdWI2IEZPUiBUQUJMRSB0ZXN0 X3BhcnRfYSAoYiwgYSkgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSB0cnVl KTsKKwlBTFRFUiBQVUJMSUNBVElPTiBwdWI2IEFERCBUQUJMRSB0ZXN0X3BhcnRfYV8xIChh KTsKKwlBTFRFUiBQVUJMSUNBVElPTiBwdWI2IEFERCBUQUJMRSB0ZXN0X3BhcnRfYV8yIChi KTsKKykpOworCisjIGFkZCB0aGUgcHVibGljYXRpb24gdG8gb3VyIHN1YnNjcmlwdGlvbiwg d2FpdCBmb3Igc3luYyB0byBjb21wbGV0ZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNB VElPTiBwdWI2CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vi c2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFx KAorCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9hIFZBTFVFUyAoMiwgNSk7CisJSU5TRVJUIElO VE8gdGVzdF9wYXJ0X2EgVkFMVUVTICg3LCA2KTsKKykpOworCiskbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCBhLCBiIEZST00gdGVzdF9wYXJ0X2EgT1JERVIg QlkgYSwgYiIpLAorICAgcXEoMXwzCisyfDUKKzZ8NAorN3w2KSwKKyAgICdwYXJ0aXRpb25z IHdpdGggZGlmZmVyZW50IHJlcGxpY2EgaWRlbnRpdGllcyBub3QgcmVwbGljYXRlZCBjb3Jy ZWN0bHknKTsKKworIyBUaGlzIHRpbWUgc3RhcnQgd2l0aCBhIGNvbHVtbiBsaXN0IGNvdmVy aW5nIFJJIGZvciBhbGwgcGFydGl0aW9ucywgYnV0CisjIHRoZW4gdXBkYXRlIHRoZSBjb2x1 bW4gbGlzdCB0byBub3QgY292ZXIgY29sdW1uICJiIiAobmVlZGVkIGJ5IHRoZQorIyBzZWNv bmQgcGFydGl0aW9uKQorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2IgKGEgaW50LCBiIGludCkgUEFSVElU SU9OIEJZIExJU1QgKGEpOworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9iXzEgUEFSVElU SU9OIE9GIHRlc3RfcGFydF9iIEZPUiBWQUxVRVMgSU4gKDEsMiwzLDQsNSk7CisJQUxURVIg VEFCTEUgdGVzdF9wYXJ0X2JfMSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRBQkxF IHRlc3RfcGFydF9iXzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRf Yl8xX3BrZXk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2JfMiBQQVJUSVRJT04gT0Yg dGVzdF9wYXJ0X2IgRk9SIFZBTFVFUyBJTiAoNiw3LDgsOSwxMCk7CisJQUxURVIgVEFCTEUg dGVzdF9wYXJ0X2JfMiBBREQgUFJJTUFSWSBLRVkgKGIpOworCUFMVEVSIFRBQkxFIHRlc3Rf cGFydF9iXzIgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfYl8yX3Br ZXk7CisKKwktLSBpbml0aWFsIGRhdGEsIG9uZSByb3cgaW4gZWFjaCBwYXJ0aXRpb25zCisJ SU5TRVJUIElOVE8gdGVzdF9wYXJ0X2IgVkFMVUVTICgxLCAxKTsKKwlJTlNFUlQgSU5UTyB0 ZXN0X3BhcnRfYiBWQUxVRVMgKDYsIDIpOworKSk7CisKKyMgZG8gdGhlIHNhbWUgdGhpbmcg b24gdGhlIHN1YnNjcmliZXIKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2IgKGEgaW50LCBiIGludCkgUEFS VElUSU9OIEJZIExJU1QgKGEpOworCisJQ1JFQVRFIFRBQkxFIHRlc3RfcGFydF9iXzEgUEFS VElUSU9OIE9GIHRlc3RfcGFydF9iIEZPUiBWQUxVRVMgSU4gKDEsMiwzLDQsNSk7CisJQUxU RVIgVEFCTEUgdGVzdF9wYXJ0X2JfMSBBREQgUFJJTUFSWSBLRVkgKGEpOworCUFMVEVSIFRB QkxFIHRlc3RfcGFydF9iXzEgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3Bh cnRfYl8xX3BrZXk7CisKKwlDUkVBVEUgVEFCTEUgdGVzdF9wYXJ0X2JfMiBQQVJUSVRJT04g T0YgdGVzdF9wYXJ0X2IgRk9SIFZBTFVFUyBJTiAoNiw3LDgsOSwxMCk7CisJQUxURVIgVEFC TEUgdGVzdF9wYXJ0X2JfMiBBREQgUFJJTUFSWSBLRVkgKGIpOworCUFMVEVSIFRBQkxFIHRl c3RfcGFydF9iXzIgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfYl8y X3BrZXk7CispKTsKKworIyBjcmVhdGUgYSBwdWJsaWNhdGlvbiByZXBsaWNhdGluZyBib3Ro IGNvbHVtbnMsIHdoaWNoIGlzIHN1ZmZpY2llbnQgZm9yCisjIGJvdGggcGFydGl0aW9ucwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFBV QkxJQ0FUSU9OIHB1YjcgRk9SIFRBQkxFIHRlc3RfcGFydF9iIChhLCBiKSBXSVRIIChwdWJs aXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworKSk7CisKKyMgYWRkIHRoZSBwdWJs aWNhdGlvbiB0byBvdXIgc3Vic2NyaXB0aW9uLCB3YWl0IGZvciBzeW5jIHRvIGNvbXBsZXRl Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQUxURVIg U1VCU0NSSVBUSU9OIHN1YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjcKKykpOworCit3YWl0X2Zv cl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0 X2IgVkFMVUVTICgyLCAzKTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYiBWQUxVRVMgKDcs IDQpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScp OworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNU ICogRlJPTSB0ZXN0X3BhcnRfYiBPUkRFUiBCWSBhLCBiIiksCisgICBxcSgxfDEKKzJ8Mwor NnwyCis3fDQpLAorICAgJ3BhcnRpdGlvbnMgd2l0aCBkaWZmZXJlbnQgcmVwbGljYSBpZGVu dGl0aWVzIG5vdCByZXBsaWNhdGVkIGNvcnJlY3RseScpOworCisKKyMgVEVTVDogVGhpcyB0 aW1lIHN0YXJ0IHdpdGggYSBjb2x1bW4gbGlzdCBjb3ZlcmluZyBSSSBmb3IgYWxsIHBhcnRp dGlvbnMsCisjIGJ1dCB0aGVuIHVwZGF0ZSBSSSBmb3Igb25lIG9mIHRoZSBwYXJ0aXRpb25z IHRvIG5vdCBiZSBjb3ZlcmVkIGJ5IHRoZQorIyBjb2x1bW4gbGlzdCBhbnltb3JlLgorCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFC TEUgdGVzdF9wYXJ0X2MgKGEgaW50LCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBMSVNU IChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfY18xIFBBUlRJVElPTiBPRiB0ZXN0 X3BhcnRfYyBGT1IgVkFMVUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9j XzEgQUREIFBSSU1BUlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfY18xIFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2NfMV9wa2V5OworCisJQ1JF QVRFIFRBQkxFIHRlc3RfcGFydF9jXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9jIEZPUiBW QUxVRVMgSU4gKDIsNCk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2NfMiBBREQgUFJJTUFS WSBLRVkgKGIpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9jXzIgUkVQTElDQSBJREVOVElU WSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfY18yX3BrZXk7CisKKwktLSBpbml0aWFsIGRhdGEs IG9uZSByb3cgZm9yIGVhY2ggcGFydGl0aW9uCisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2Mg VkFMVUVTICgxLCAzLCA1KTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYyBWQUxVRVMgKDIs IDQsIDYpOworKSk7CisKKyMgZG8gdGhlIHNhbWUgdGhpbmcgb24gdGhlIHN1YnNjcmliZXIK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUg VEFCTEUgdGVzdF9wYXJ0X2MgKGEgaW50LCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBM SVNUIChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfY18xIFBBUlRJVElPTiBPRiB0 ZXN0X3BhcnRfYyBGT1IgVkFMVUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFy dF9jXzEgQUREIFBSSU1BUlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfY18x IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2NfMV9wa2V5OworCisJ Q1JFQVRFIFRBQkxFIHRlc3RfcGFydF9jXzIgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9jIEZP UiBWQUxVRVMgSU4gKDIsNCk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2NfMiBBREQgUFJJ TUFSWSBLRVkgKGIpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9jXzIgUkVQTElDQSBJREVO VElUWSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfY18yX3BrZXk7CispKTsKKworIyBjcmVhdGUg YSBwdWJsaWNhdGlvbiByZXBsaWNhdGluZyBkYXRhIHRocm91Z2ggcGFydGl0aW9uIHJvb3Qs IHdpdGggYSBjb2x1bW4KKyMgbGlzdCBvbiB0aGUgcm9vdCwgYW5kIHRoZW4gYWRkIHRoZSBw YXJ0aXRpb25zIG9uZSBieSBvbmUgd2l0aCBzZXBhcmF0ZQorIyBjb2x1bW4gbGlzdHMgKGJ1 dCB0aG9zZSBhcmUgbm90IGFwcGxpZWQpCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViOCBGT1IgVEFCTEUgdGVz dF9wYXJ0X2MgV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSk7CisJ QUxURVIgUFVCTElDQVRJT04gcHViOCBBREQgVEFCTEUgdGVzdF9wYXJ0X2NfMSAoYSxjKTsK KwlBTFRFUiBQVUJMSUNBVElPTiBwdWI4IEFERCBUQUJMRSB0ZXN0X3BhcnRfY18yIChhLGIp OworKSk7CisKKyMgYWRkIHRoZSBwdWJsaWNhdGlvbiB0byBvdXIgc3Vic2NyaXB0aW9uLCB3 YWl0IGZvciBzeW5jIHRvIGNvbXBsZXRlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgcXEoCisJRFJPUCBTVUJTQ1JJUFRJT04gc3ViMTsKKwlDUkVBVEUgU1VC U0NSSVBUSU9OIHN1YjEgQ09OTkVDVElPTiAnJHB1Ymxpc2hlcl9jb25uc3RyJyBQVUJMSUNB VElPTiBwdWI4OworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn c3ViMScpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlJTlNFUlQgSU5UTyB0ZXN0X3BhcnRfYyBWQUxVRVMgKDMsIDcsIDgpOworCUlOU0VSVCBJ TlRPIHRlc3RfcGFydF9jIFZBTFVFUyAoNCwgOSwgMTApOworKSk7CisKKyRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X3BhcnRfYyBPUkRF UiBCWSBhLCBiIiksCisgICBxcSgxfHw1CisyfDR8CiszfHw4Cis0fDl8KSwKKyAgICdwYXJ0 aXRpb25zIHdpdGggZGlmZmVyZW50IHJlcGxpY2EgaWRlbnRpdGllcyBub3QgcmVwbGljYXRl ZCBjb3JyZWN0bHknKTsKKworCisjIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIG5vdCByZXBsaWNh dGluZyBkYXRhIHRocm91Z2ggcGFydGl0aW9uIHJvb3QsIHdpdGhvdXQKKyMgYSBjb2x1bW4g bGlzdCBvbiB0aGUgcm9vdCwgYW5kIHRoZW4gYWRkIHRoZSBwYXJ0aXRpb25zIG9uZSBieSBv bmUgd2l0aAorIyBzZXBhcmF0ZSBjb2x1bW4gbGlzdHMKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCURST1AgUFVCTElDQVRJT04gcHViODsKKwlDUkVB VEUgUFVCTElDQVRJT04gcHViOCBGT1IgVEFCTEUgdGVzdF9wYXJ0X2MgV0lUSCAocHVibGlz aF92aWFfcGFydGl0aW9uX3Jvb3QgPSBmYWxzZSk7CisJQUxURVIgUFVCTElDQVRJT04gcHVi OCBBREQgVEFCTEUgdGVzdF9wYXJ0X2NfMSAoYSk7CisJQUxURVIgUFVCTElDQVRJT04gcHVi OCBBREQgVEFCTEUgdGVzdF9wYXJ0X2NfMiAoYSxiKTsKKykpOworCisjIGFkZCB0aGUgcHVi bGljYXRpb24gdG8gb3VyIHN1YnNjcmlwdGlvbiwgd2FpdCBmb3Igc3luYyB0byBjb21wbGV0 ZQorJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFMVEVS IFNVQlNDUklQVElPTiBzdWIxIFJFRlJFU0ggUFVCTElDQVRJT047CisJVFJVTkNBVEUgdGVz dF9wYXJ0X2M7CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vi c2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFx KAorCVRSVU5DQVRFIHRlc3RfcGFydF9jOworCUlOU0VSVCBJTlRPIHRlc3RfcGFydF9jIFZB TFVFUyAoMSwgMywgNSk7CisJSU5TRVJUIElOVE8gdGVzdF9wYXJ0X2MgVkFMVUVTICgyLCA0 LCA2KTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEn KTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVD VCAqIEZST00gdGVzdF9wYXJ0X2MgT1JERVIgQlkgYSwgYiIpLAorICAgcXEoMXx8CisyfDR8 KSwKKyAgICdwYXJ0aXRpb25zIHdpdGggZGlmZmVyZW50IHJlcGxpY2EgaWRlbnRpdGllcyBu b3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKworCisjIFRFU1Q6IFN0YXJ0IHdpdGggYSBz aW5nbGUgcGFydGl0aW9uLCB3aXRoIFJJIGNvbXBhdGlibGUgd2l0aCB0aGUgY29sdW1uCisj IGxpc3QsIGFuZCB0aGVuIGF0dGFjaCBhIHBhcnRpdGlvbiB3aXRoIGluY29tcGF0aWJsZSBS SS4KKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JF QVRFIFRBQkxFIHRlc3RfcGFydF9kIChhIGludCwgYiBpbnQpIFBBUlRJVElPTiBCWSBMSVNU IChhKTsKKworCUNSRUFURSBUQUJMRSB0ZXN0X3BhcnRfZF8xIFBBUlRJVElPTiBPRiB0ZXN0 X3BhcnRfZCBGT1IgVkFMVUVTIElOICgxLDMpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9k XzEgQUREIFBSSU1BUlkgS0VZIChhKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfZF8xIFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggdGVzdF9wYXJ0X2RfMV9wa2V5OworCisJSU5T RVJUIElOVE8gdGVzdF9wYXJ0X2QgVkFMVUVTICgxLCAyKTsKKykpOworCisjIGRvIHRoZSBz YW1lIHRoaW5nIG9uIHRoZSBzdWJzY3JpYmVyIChpbiBmYWN0LCBjcmVhdGUgYm90aCBwYXJ0 aXRpb25zIHJpZ2h0CisjIGF3YXksIG5vIG5lZWQgdG8gZGVsYXkgdGhhdCkKKyRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUgdGVz dF9wYXJ0X2QgKGEgaW50LCBiIGludCkgUEFSVElUSU9OIEJZIExJU1QgKGEpOworCisJQ1JF QVRFIFRBQkxFIHRlc3RfcGFydF9kXzEgUEFSVElUSU9OIE9GIHRlc3RfcGFydF9kIEZPUiBW QUxVRVMgSU4gKDEsMyk7CisJQUxURVIgVEFCTEUgdGVzdF9wYXJ0X2RfMSBBREQgUFJJTUFS WSBLRVkgKGEpOworCUFMVEVSIFRBQkxFIHRlc3RfcGFydF9kXzEgUkVQTElDQSBJREVOVElU WSBVU0lORyBJTkRFWCB0ZXN0X3BhcnRfZF8xX3BrZXk7CisKKwlDUkVBVEUgVEFCTEUgdGVz dF9wYXJ0X2RfMiBQQVJUSVRJT04gT0YgdGVzdF9wYXJ0X2QgRk9SIFZBTFVFUyBJTiAoMiw0 KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3BhcnRfZF8yIEFERCBQUklNQVJZIEtFWSAoYSk7CisJ QUxURVIgVEFCTEUgdGVzdF9wYXJ0X2RfMiBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVY IHRlc3RfcGFydF9kXzJfcGtleTsKKykpOworCisjIGNyZWF0ZSBhIHB1YmxpY2F0aW9uIHJl cGxpY2F0aW5nIGJvdGggY29sdW1ucywgd2hpY2ggaXMgc3VmZmljaWVudCBmb3IKKyMgYm90 aCBwYXJ0aXRpb25zCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx cSgKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViOSBGT1IgVEFCTEUgdGVzdF9wYXJ0X2QgKGEp IFdJVEggKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290ID0gdHJ1ZSk7CispKTsKKworIyBh ZGQgdGhlIHB1YmxpY2F0aW9uIHRvIG91ciBzdWJzY3JpcHRpb24sIHdhaXQgZm9yIHN5bmMg dG8gY29tcGxldGUKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBx cSgKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViOQorKSk7 CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOworCisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQgSU5U TyB0ZXN0X3BhcnRfZCBWQUxVRVMgKDMsIDQpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+ d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X3BhcnRfZCBPUkRFUiBCWSBh LCBiIiksCisgICBxcSgxfAorM3wpLAorICAgJ3BhcnRpdGlvbnMgd2l0aCBkaWZmZXJlbnQg cmVwbGljYSBpZGVudGl0aWVzIG5vdCByZXBsaWNhdGVkIGNvcnJlY3RseScpOworCisjIFRF U1Q6IFdpdGggYSB0YWJsZSBpbmNsdWRlZCBpbiBtdWx0aXBsZSBwdWJsaWNhdGlvbnMsIHdl IHNob3VsZCB1c2UgYQorIyB1bmlvbiBvZiB0aGUgY29sdW1uIGxpc3RzLiBTbyB3aXRoIGNv bHVtbiBsaXN0cyAoYSxiKSBhbmQgKGEsYykgd2UKKyMgc2hvdWxkIHJlcGxpY2F0ZSAoYSxi LGMpLgorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlD UkVBVEUgVEFCTEUgdGVzdF9taXhfMSAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGlu dCk7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9taXhfMSBGT1IgVEFCTEUgdGVzdF9taXhf MSAoYSwgYik7CisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9taXhfMiBGT1IgVEFCTEUgdGVz dF9taXhfMSAoYSwgYyk7CisKKwktLSBpbml0aWFsIGRhdGEKKwlJTlNFUlQgSU5UTyB0ZXN0 X21peF8xIFZBTFVFUyAoMSwgMiwgMyk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X21peF8xIChhIGlu dCBQUklNQVJZIEtFWSwgYiBpbnQsIGMgaW50KTsKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3Vi MSBTRVQgUFVCTElDQVRJT04gcHViX21peF8xLCBwdWJfbWl4XzI7CispKTsKKword2FpdF9m b3Jfc3Vic2NyaXB0aW9uX3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHRlc3RfbWl4 XzEgVkFMVUVTICg0LCA1LCA2KTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9y X2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGVzdF9taXhfMSBPUkRFUiBCWSBhIiksCisgICBx cSgxfDJ8MworNHw1fDYpLAorICAgJ2EgbWl4IG9mIHB1YmxpY2F0aW9ucyBzaG91bGQgdXNl IGEgdW5pb24gb2YgY29sdW1uIGxpc3QnKTsKKworCisjIFRFU1Q6IFdpdGggYSB0YWJsZSBp bmNsdWRlZCBpbiBtdWx0aXBsZSBwdWJsaWNhdGlvbnMsIHdlIHNob3VsZCB1c2UgYQorIyB1 bmlvbiBvZiB0aGUgY29sdW1uIGxpc3RzLiBJZiBhbnkgb2YgdGhlIHB1YmxpY2F0aW9ucyBp cyBGT1IgQUxMCisjIFRBQkxFUywgd2Ugc2hvdWxkIHJlcGxpY2F0ZSBhbGwgY29sdW1ucy4K KworIyBkcm9wIHVubmVjZXNzYXJ5IHRhYmxlcywgc28gYXMgbm90IHRvIGludGVyZmVyZSB3 aXRoIHRoZSBGT1IgQUxMIFRBQkxFUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoCisJRFJPUCBUQUJMRSB0YWIxLCB0YWIyLCB0YWIzLCB0YWI0LCB0YWI1 LCB0YWI2LCB0YWI3LCB0ZXN0X21peF8xLAorCQkJICAgdGVzdF9wYXJ0LCB0ZXN0X3BhcnRf YSwgdGVzdF9wYXJ0X2IsIHRlc3RfcGFydF9jLCB0ZXN0X3BhcnRfZDsKKykpOworCiskbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlDUkVBVEUgVEFCTEUg dGVzdF9taXhfMiAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50LCBjIGludCk7CisJQ1JFQVRF IFBVQkxJQ0FUSU9OIHB1Yl9taXhfMyBGT1IgVEFCTEUgdGVzdF9taXhfMiAoYSwgYik7CisJ Q1JFQVRFIFBVQkxJQ0FUSU9OIHB1Yl9taXhfNCBGT1IgQUxMIFRBQkxFUzsKKworCS0tIGlu aXRpYWwgZGF0YQorCUlOU0VSVCBJTlRPIHRlc3RfbWl4XzIgVkFMVUVTICgxLCAyLCAzKTsK KykpOworCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ Q1JFQVRFIFRBQkxFIHRlc3RfbWl4XzIgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBp bnQpOworCUFMVEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNBVElPTiBwdWJfbWl4 XzMsIHB1Yl9taXhfNDsKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBSRUZSRVNIIFBVQkxJ Q0FUSU9OOworKSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNj cmliZXIpOworCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgK KwlJTlNFUlQgSU5UTyB0ZXN0X21peF8yIFZBTFVFUyAoNCwgNSwgNik7CispKTsKKworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdzdWIxJyk7CisKK2lzKCRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCJTRUxFQ1QgKiBGUk9NIHRlc3RfbWl4 XzIiKSwKKyAgIHFxKDF8MnwzCis0fDV8NiksCisgICAnYSBtaXggb2YgcHVibGljYXRpb25z IHNob3VsZCB1c2UgYSB1bmlvbiBvZiBjb2x1bW4gbGlzdCcpOworCisKKyMgVEVTVDogV2l0 aCBhIHRhYmxlIGluY2x1ZGVkIGluIG11bHRpcGxlIHB1YmxpY2F0aW9ucywgd2Ugc2hvdWxk IHVzZSBhCisjIHVuaW9uIG9mIHRoZSBjb2x1bW4gbGlzdHMuIElmIGFueSBvZiB0aGUgcHVi bGljYXRpb25zIGlzIEZPUiBBTEwKKyMgVEFCTEVTIElOIFNDSEVNQSwgd2Ugc2hvdWxkIHJl cGxpY2F0ZSBhbGwgY29sdW1ucy4KKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgcXEoCisJQ1JFQVRFIFRBQkxFIHRlc3RfbWl4XzMgKGEgaW50IFBSSU1BUlkg S0VZLCBiIGludCwgYyBpbnQpOworCUNSRUFURSBQVUJMSUNBVElPTiBwdWJfbWl4XzUgRk9S IFRBQkxFIHRlc3RfbWl4XzMgKGEsIGIpOworCUNSRUFURSBQVUJMSUNBVElPTiBwdWJfbWl4 XzYgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1YmxpYzsKKworCS0tIGluaXRpYWwgZGF0 YQorCUlOU0VSVCBJTlRPIHRlc3RfbWl4XzMgVkFMVUVTICgxLCAyLCAzKTsKKykpOworCisk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJQ1JFQVRFIFRB QkxFIHRlc3RfbWl4XzMgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQpOworCUFM VEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNBVElPTiBwdWJfbWl4XzUsIHB1Yl9t aXhfNjsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3Jp YmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ SU5TRVJUIElOVE8gdGVzdF9taXhfMyBWQUxVRVMgKDQsIDUsIDYpOworKSk7CisKKyRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0ZXN0X21peF8z IiksCisgICBxcSgxfDJ8MworNHw1fDYpLAorICAgJ2EgbWl4IG9mIHB1YmxpY2F0aW9ucyBz aG91bGQgdXNlIGEgdW5pb24gb2YgY29sdW1uIGxpc3QnKTsKKworCisjIFRFU1Q6IENoZWNr IGhhbmRsaW5nIG9mIHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290IC0gaWYgYSBwYXJ0aXRp b24gaXMKKyMgcHVibGlzaGVkIHRocm91Z2ggcGFydGl0aW9uIHJvb3QsIHdlIHNob3VsZCBv bmx5IGFwcGx5IHRoZSBjb2x1bW4gbGlzdAorIyBkZWZpbmVkIGZvciB0aGUgd2hvbGUgdGFi bGUgKG5vdCB0aGUgcGFydGl0aW9ucykgLSBib3RoIGR1cmluZyB0aGUgaW5pdGlhbAorIyBz eW5jIGFuZCB3aGVuIHJlcGxpY2F0aW5nIGNoYW5nZXMuIFRoaXMgaXMgd2hhdCB3ZSBkbyBm b3Igcm93IGZpbHRlcnMuCisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3QgKGEgaW50IFBSSU1BUlkgS0VZLCBi IGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7CisJQ1JFQVRFIFRBQkxFIHRl c3Rfcm9vdF8xIFBBUlRJVElPTiBPRiB0ZXN0X3Jvb3QgRk9SIFZBTFVFUyBGUk9NICgxKSBU TyAoMTApOworCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3RfMiBQQVJUSVRJT04gT0YgdGVzdF9y b290IEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCk7CisKKwlDUkVBVEUgUFVCTElDQVRJ T04gcHViX3Jvb3RfdHJ1ZSBGT1IgVEFCTEUgdGVzdF9yb290IChhKSBXSVRIIChwdWJsaXNo X3ZpYV9wYXJ0aXRpb25fcm9vdCA9IHRydWUpOworCisJLS0gaW5pdGlhbCBkYXRhCisJSU5T RVJUIElOVE8gdGVzdF9yb290IFZBTFVFUyAoMSwgMiwgMyk7CisJSU5TRVJUIElOVE8gdGVz dF9yb290IFZBTFVFUyAoMTAsIDIwLCAzMCk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3QgKGEg aW50IFBSSU1BUlkgS0VZLCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7 CisJQ1JFQVRFIFRBQkxFIHRlc3Rfcm9vdF8xIFBBUlRJVElPTiBPRiB0ZXN0X3Jvb3QgRk9S IFZBTFVFUyBGUk9NICgxKSBUTyAoMTApOworCUNSRUFURSBUQUJMRSB0ZXN0X3Jvb3RfMiBQ QVJUSVRJT04gT0YgdGVzdF9yb290IEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCk7Cisp KTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCUFM VEVSIFNVQlNDUklQVElPTiBzdWIxIFNFVCBQVUJMSUNBVElPTiBwdWJfcm9vdF90cnVlOwor KSk7CisKK3dhaXRfZm9yX3N1YnNjcmlwdGlvbl9zeW5jKCRub2RlX3N1YnNjcmliZXIpOwor Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKKwlJTlNFUlQg SU5UTyB0ZXN0X3Jvb3QgVkFMVUVTICgyLCAzLCA0KTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Jv b3QgVkFMVUVTICgxMSwgMjEsIDMxKTsKKykpOworCiskbm9kZV9wdWJsaXNoZXItPndhaXRf Zm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMoJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00gdGVzdF9yb290IE9SREVSIEJZIGEsIGIsIGMi KSwKKyAgIHFxKDF8fAorMnx8CisxMHx8CisxMXx8KSwKKyAgICdwdWJsaWNhdGlvbiB2aWEg cGFydGl0aW9uIHJvb3QgYXBwbGllcyBjb2x1bW4gbGlzdCcpOworCisKKyMgVEVTVDogTXVs dGlwbGUgcHVibGljYXRpb25zIHdoaWNoIHB1Ymxpc2ggc2NoZW1hIG9mIHBhcmVudCB0YWJs ZSBhbmQKKyMgcGFydGl0aW9uLiBUaGUgcGFydGl0aW9uIGlzIHB1Ymxpc2hlZCB0aHJvdWdo IHR3byBwdWJsaWNhdGlvbnMsIG9uY2UKKyMgdGhyb3VnaCBhIHNjaGVtYSAoc28gbm8gY29s dW1uIGxpc3QpIGNvbnRhaW5pbmcgdGhlIHBhcmVudCwgYW5kIHRoZW4KKyMgYWxzbyBkaXJl Y3RseSAod2l0aCBhIGNvbHVtbnMgbGlzdCkuIFRoZSBleHBlY3RlZCBvdXRjb21lIGlzIHRo ZXJlIGlzCisjIG5vIGNvbHVtbiBsaXN0LgorCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCBxcSgKKwlEUk9QIFBVQkxJQ0FUSU9OIHB1YjEsIHB1YjIsIHB1YjMs IHB1YjQsIHB1YjUsIHB1YjYsIHB1YjcsIHB1Yjg7CisKKwlDUkVBVEUgU0NIRU1BIHMxOwor CUNSRUFURSBUQUJMRSBzMS50IChhIGludCwgYiBpbnQsIGMgaW50KSBQQVJUSVRJT04gQlkg UkFOR0UgKGEpOworCUNSRUFURSBUQUJMRSB0XzEgUEFSVElUSU9OIE9GIHMxLnQgRk9SIFZB TFVFUyBGUk9NICgxKSBUTyAoMTApOworCisJQ1JFQVRFIFBVQkxJQ0FUSU9OIHB1YjEgRk9S IEFMTCBUQUJMRVMgSU4gU0NIRU1BIHMxOworCUNSRUFURSBQVUJMSUNBVElPTiBwdWIyIEZP UiBUQUJMRSB0XzEoYik7CisKKwktLSBpbml0aWFsIGRhdGEKKwlJTlNFUlQgSU5UTyBzMS50 IFZBTFVFUyAoMSwgMiwgMyk7CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUNSRUFURSBTQ0hFTUEgczE7CisJQ1JFQVRFIFRBQkxFIHMx LnQgKGEgaW50LCBiIGludCwgYyBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7CisJQ1JF QVRFIFRBQkxFIHRfMSBQQVJUSVRJT04gT0YgczEudCBGT1IgVkFMVUVTIEZST00gKDEpIFRP ICgxMCk7CisKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHVi MSwgcHViMjsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJz Y3JpYmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEo CisJSU5TRVJUIElOVE8gczEudCBWQUxVRVMgKDQsIDUsIDYpOworKSk7CisKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSBzMS50IE9SREVSIEJZ IGEiKSwKKyAgIHFxKDF8MnwzCis0fDV8NiksCisgICAndHdvIHB1YmxpY2F0aW9ucywgcHVi bGlzaGluZyB0aGUgc2FtZSByZWxhdGlvbicpOworCisjIE5vdyByZXN5bmMgdGhlIHN1YmNy aXB0aW9uLCBidXQgd2l0aCBwdWJsaWNhdGlvbnMgaW4gdGhlIG9wcG9zaXRlIG9yZGVyLgor IyBUaGUgcmVzdWx0IHNob3VsZCBiZSB0aGUgc2FtZS4KKworJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCVRSVU5DQVRFIHMxLnQ7CisKKwlBTFRFUiBT VUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04gcHViMiwgcHViMTsKKykpOworCit3 YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3JpYmVyKTsKKworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJSU5TRVJUIElOVE8gczEu dCBWQUxVRVMgKDcsIDgsIDkpOworKSk7CisKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywiU0VMRUNUICogRlJPTSBzMS50IE9SREVSIEJZIGEiKSwKKyAgIHFxKDd8OHw5 KSwKKyAgICd0d28gcHVibGljYXRpb25zLCBwdWJsaXNoaW5nIHRoZSBzYW1lIHJlbGF0aW9u Jyk7CisKKworIyBURVNUOiBPbmUgcHVibGljYXRpb24sIGNvbnRhaW5pbmcgYm90aCB0aGUg cGFyZW50IGFuZCBjaGlsZCByZWxhdGlvbnMuCisjIFRoZSBleHBlY3RlZCBvdXRjb21lIGlz IGxpc3QgImEiLCBiZWNhdXNlIHRoYXQncyB0aGUgY29sdW1uIGxpc3QgZGVmaW5lZAorIyBm b3IgdGhlIHRvcC1tb3N0IGFuY2VzdG9yIGFkZGVkIHRvIHRoZSBwdWJsaWNhdGlvbi4KKwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJRFJPUCBTQ0hF TUEgczEgQ0FTQ0FERTsKKwlDUkVBVEUgVEFCTEUgdCAoYSBpbnQsIGIgaW50LCBjIGludCkg UEFSVElUSU9OIEJZIFJBTkdFIChhKTsKKwlDUkVBVEUgVEFCTEUgdF8xIFBBUlRJVElPTiBP RiB0IEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8gKDEwKQorCQkgICBQQVJUSVRJT04gQlkgUkFO R0UgKGEpOworCUNSRUFURSBUQUJMRSB0XzIgUEFSVElUSU9OIE9GIHRfMSBGT1IgVkFMVUVT IEZST00gKDEpIFRPICgxMCk7CisKKwlDUkVBVEUgUFVCTElDQVRJT04gcHViMyBGT1IgVEFC TEUgdF8xIChhKSwgdF8yCisJICBXSVRIIChQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVCk7 CisKKwktLSBpbml0aWFsIGRhdGEKKwlJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgMiwgMyk7 CispKTsKKworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAor CURST1AgU0NIRU1BIHMxIENBU0NBREU7CisJQ1JFQVRFIFRBQkxFIHQgKGEgaW50LCBiIGlu dCwgYyBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7CisJQ1JFQVRFIFRBQkxFIHRfMSBQ QVJUSVRJT04gT0YgdCBGT1IgVkFMVUVTIEZST00gKDEpIFRPICgxMCkKKwkJICAgUEFSVElU SU9OIEJZIFJBTkdFIChhKTsKKwlDUkVBVEUgVEFCTEUgdF8yIFBBUlRJVElPTiBPRiB0XzEg Rk9SIFZBTFVFUyBGUk9NICgxKSBUTyAoMTApOworCisJQUxURVIgU1VCU0NSSVBUSU9OIHN1 YjEgU0VUIFBVQkxJQ0FUSU9OIHB1YjM7CispKTsKKword2FpdF9mb3Jfc3Vic2NyaXB0aW9u X3N5bmMoJG5vZGVfc3Vic2NyaWJlcik7CisKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHFxKAorCUlOU0VSVCBJTlRPIHQgVkFMVUVTICg0LCA1LCA2KTsKKykp OworCiskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ3N1YjEnKTsKKworaXMo JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIlNFTEVDVCAqIEZST00g dCBPUkRFUiBCWSBhLCBiLCBjIiksCisgICBxcSgxfHwKKzR8fCksCisgICAncHVibGljYXRp b24gY29udGFpbmluZyBib3RoIHBhcmVudCBhbmQgY2hpbGQgcmVsYXRpb24nKTsKKworCisj IFRFU1Q6IE9uZSBwdWJsaWNhdGlvbiwgY29udGFpbmluZyBib3RoIHRoZSBwYXJlbnQgYW5k IGNoaWxkIHJlbGF0aW9ucy4KKyMgVGhlIGV4cGVjdGVkIG91dGNvbWUgaXMgbGlzdCAiYSIs IGJlY2F1c2UgdGhhdCdzIHRoZSBjb2x1bW4gbGlzdCBkZWZpbmVkCisjIGZvciB0aGUgdG9w LW1vc3QgYW5jZXN0b3IgYWRkZWQgdG8gdGhlIHB1YmxpY2F0aW9uLgorIyBOb3RlOiBUaGUg ZGlmZmVyZW5jZSBmcm9tIHRoZSBwcmVjZWRpbmcgdGVzdCBpcyB0aGF0IGluIHRoaXMgY2Fz ZSBib3RoCisjIHJlbGF0aW9ucyBoYXZlIGEgY29sdW1uIGxpc3QgZGVmaW5lZC4KKworJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJRFJPUCBUQUJMRSB0 OworCUNSRUFURSBUQUJMRSB0IChhIGludCwgYiBpbnQsIGMgaW50KSBQQVJUSVRJT04gQlkg UkFOR0UgKGEpOworCUNSRUFURSBUQUJMRSB0XzEgUEFSVElUSU9OIE9GIHQgRk9SIFZBTFVF UyBGUk9NICgxKSBUTyAoMTApCisJCSAgIFBBUlRJVElPTiBCWSBSQU5HRSAoYSk7CisJQ1JF QVRFIFRBQkxFIHRfMiBQQVJUSVRJT04gT0YgdF8xIEZPUiBWQUxVRVMgRlJPTSAoMSkgVE8g KDEwKTsKKworCUNSRUFURSBQVUJMSUNBVElPTiBwdWI0IEZPUiBUQUJMRSB0XzEgKGEpLCB0 XzIgKGIpCisJICBXSVRIIChQVUJMSVNIX1ZJQV9QQVJUSVRJT05fUk9PVCk7CisKKwktLSBp bml0aWFsIGRhdGEKKwlJTlNFUlQgSU5UTyB0IFZBTFVFUyAoMSwgMiwgMyk7CispKTsKKwor JG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHFxKAorCURST1AgVEFC TEUgdDsKKwlDUkVBVEUgVEFCTEUgdCAoYSBpbnQsIGIgaW50LCBjIGludCkgUEFSVElUSU9O IEJZIFJBTkdFIChhKTsKKwlDUkVBVEUgVEFCTEUgdF8xIFBBUlRJVElPTiBPRiB0IEZPUiBW QUxVRVMgRlJPTSAoMSkgVE8gKDEwKQorCQkgICBQQVJUSVRJT04gQlkgUkFOR0UgKGEpOwor CUNSRUFURSBUQUJMRSB0XzIgUEFSVElUSU9OIE9GIHRfMSBGT1IgVkFMVUVTIEZST00gKDEp IFRPICgxMCk7CisKKwlBTFRFUiBTVUJTQ1JJUFRJT04gc3ViMSBTRVQgUFVCTElDQVRJT04g cHViNDsKKykpOworCit3YWl0X2Zvcl9zdWJzY3JpcHRpb25fc3luYygkbm9kZV9zdWJzY3Jp YmVyKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXEoCisJ SU5TRVJUIElOVE8gdCBWQUxVRVMgKDQsIDUsIDYpOworKSk7CisKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnc3ViMScpOworCitpcygkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywiU0VMRUNUICogRlJPTSB0IE9SREVSIEJZIGEsIGIsIGMi KSwKKyAgIHFxKDF8fAorNHx8KSwKKyAgICdwdWJsaWNhdGlvbiBjb250YWluaW5nIGJvdGgg cGFyZW50IGFuZCBjaGlsZCByZWxhdGlvbicpOworCisKKyRub2RlX3N1YnNjcmliZXItPnN0 b3AoJ2Zhc3QnKTsKKyRub2RlX3B1Ymxpc2hlci0+c3RvcCgnZmFzdCcpOworCitkb25lX3Rl c3RpbmcoKTsKLS0gCjIuMzQuMQoK --------------VGyEOeHBWKfXFg6cGaZ4Wuf5--