Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1gL2a0-0001Zg-QB for pgsql-hackers@arkaria.postgresql.org; Fri, 09 Nov 2018 08:55:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gL2Zy-0007Kk-5X for pgsql-hackers@arkaria.postgresql.org; Fri, 09 Nov 2018 08:55:50 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1gL2Zw-0007IX-Vb for pgsql-hackers@lists.postgresql.org; Fri, 09 Nov 2018 08:55:49 +0000 Received: from tama50.ecl.ntt.co.jp ([129.60.39.147]) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gL2Zl-0001d7-Ge for pgsql-hackers@postgresql.org; Fri, 09 Nov 2018 08:55:47 +0000 Received: from vc2.ecl.ntt.co.jp (vc2.ecl.ntt.co.jp [129.60.86.154]) by tama50.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id wA98tQYm029240; Fri, 9 Nov 2018 17:55:26 +0900 Received: from vc2.ecl.ntt.co.jp (localhost [127.0.0.1]) by vc2.ecl.ntt.co.jp (Postfix) with ESMTP id 85015638806; Fri, 9 Nov 2018 17:55:26 +0900 (JST) Received: from jcms-pop21.ecl.ntt.co.jp (jcms-pop21.ecl.ntt.co.jp [129.60.87.134]) by vc2.ecl.ntt.co.jp (Postfix) with ESMTP id EE8CD638441; Fri, 9 Nov 2018 17:55:25 +0900 (JST) Received: from [127.0.0.1] (unknown [129.60.241.61]) by jcms-pop21.ecl.ntt.co.jp (Postfix) with ESMTPSA id 8E8B940033C; Fri, 9 Nov 2018 17:55:25 +0900 (JST) Subject: Re: speeding up planning with partitions From: Amit Langote References: <20181107033207.cdisp33ryrgeidef@alvherre.pgsql> Message-ID: <3be67028-a00a-502c-199a-da00eec8fb6e@lab.ntt.co.jp> Date: Fri, 9 Nov 2018 17:55:05 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------E34CCD0679090A92C6C33EB0" Content-Language: en-US X-CC-Mail-RelayStamp: 1 To: Alvaro Herrera Cc: "Imai, Yoshikazu" , Pg Hackers , David Rowley X-TM-AS-MML: disable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------E34CCD0679090A92C6C33EB0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 2018/11/07 12:44, Amit Langote wrote: > Thanks for looking. > > On 2018/11/07 12:32, Alvaro Herrera wrote: >> ISTM patch 0004 is impossible to review just because of size -- I >> suppose the bulk of it is just code that moves from one file to another, >> but that there are also code changes in it. Maybe it would be better to >> split it so that one patch moves the code to the new files without >> changing it, then another patch does the actual functional changes? If >> git shows the first half as a rename, it's easier to be confident about >> it. > > Okay, will post a new version structured that way shortly. And here are patches structured that way. I've addressed some of the comments posted by Imai-san upthread. Also, since David's patch to postpone PlannerInfo.total_pages calculation went into the tree earlier this week, it's no longer included in this set. With this breakdown, patches are as follows: v5-0001-Store-inheritance-root-parent-index-in-otherrel-s.patch Adds a inh_root_parent field that's set in inheritance child otherrel RelOptInfos to store the RT index of their root parent v5-0002-Overhaul-inheritance-update-delete-planning.patch Patch that adjusts planner so that inheritance_planner can use partition pruning. v5-0003-Lazy-creation-of-RTEs-for-inheritance-children.patch Patch that adjusts planner such that inheritance expansion step is postponed from early subquery_planner to the beginning of set_append_rel_size, so that child tables are added to the Query and PlannerInfo after partition pruning. While the move only benefits partitioning, because non-partition children cannot be pruned until after they're fully opened, the new code handles both partitioned tables and regular inheritance parents. v5-0004-Move-append-expansion-code-into-its-own-file.patch With patch 0003, inheritance expansion is no longer a part of the prep phase of planning, so it seems odd that inheritance expansion code is in optimizer/prep/prepunion.c. This patch moves the code to a new file optimizer/utils/append.c. Also, some of the appendrel translation subroutines are moved over to optimizer/utils/appendinfo.c. No functional changes with this patch. v5-0005-Teach-planner-to-only-process-unpruned-partitions.patch Patch that adds a live_parts field to RelOptInfo which is set in partitioned rels to contain partition indexes of only non-dummy children replace the loops of the following form: for (i = 0; i < rel->nparts; i++) { RelOptInfo *partrel = rel->part_rels[i]; ...some processing } at various points within the planner with: i = -1 while ((i = bms_get_next(rel->live_parts)) >= 0) { RelOptInfo *partrel = rel->part_rels[i]; ...some processing } v5-0006-Do-not-lock-all-partitions-at-the-beginning.patch A simple patch that removes the find_all_inheritors called for partitioned root parent only to lock *all* partitions, in favor of locking only the unpruned partitions. Thanks, Amit --------------E34CCD0679090A92C6C33EB0 Content-Type: text/plain; charset=UTF-8; name="v5-0001-Store-inheritance-root-parent-index-in-otherrel-s.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v5-0001-Store-inheritance-root-parent-index-in-otherrel-s.pa"; filename*1="tch" RnJvbSAwZjY2YjgyYTZhYjk5OGM0ZDc5MGE0ZTJhNjQzNzk1MGVkZjdkZTE4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyNiBPY3QgMjAxOCAxNjo0NTo1OSArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djUgMS82XSBTdG9yZSBpbmhlcml0YW5jZSByb290IHBhcmVudCBpbmRleCBpbiBvdGhlcnJl bCdzCiBSZWxPcHRJbmZvCgpBbHRob3VnaCBpdCdzIHNldCBieSBidWlsZF9zaW1wbGVfcmVs LCBpdCdzIG5vdCBiZWluZyB1c2VkIGJ5IGFueQpjb2RlIHlldC4KLS0tCiBzcmMvYmFja2Vu ZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9yZWxub2RlLmMgfCAxNCArKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvbm9k ZXMvcmVsYXRpb24uaCAgICAgICAgIHwgIDQgKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxOSBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3Mu YyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKaW5kZXggNjk3MzFjY2RlYS4uNTNh NjU3YzBhZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYworKysg Yi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC0yMzcxLDYgKzIzNzEsNyBAQCBf b3V0UmVsT3B0SW5mbyhTdHJpbmdJbmZvIHN0ciwgY29uc3QgUmVsT3B0SW5mbyAqbm9kZSkK IAlXUklURV9CT09MX0ZJRUxEKGNvbnNpZGVyX3BhcnRpdGlvbndpc2Vfam9pbik7CiAJV1JJ VEVfQklUTUFQU0VUX0ZJRUxEKHRvcF9wYXJlbnRfcmVsaWRzKTsKIAlXUklURV9OT0RFX0ZJ RUxEKHBhcnRpdGlvbmVkX2NoaWxkX3JlbHMpOworCVdSSVRFX1VJTlRfRklFTEQoaW5oX3Jv b3RfcGFyZW50KTsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3JlbG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3JlbG5vZGUuYwppbmRleCAzOWY1NzI5YjkxLi4yOWJhMTkzNDlmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0yMTUsOSArMjE1LDIzIEBAIGJ1aWxkX3Np bXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwgUmVsT3B0SW5mbyAqcGFy ZW50KQogCQkJcmVsLT50b3BfcGFyZW50X3JlbGlkcyA9IHBhcmVudC0+dG9wX3BhcmVudF9y ZWxpZHM7CiAJCWVsc2UKIAkJCXJlbC0+dG9wX3BhcmVudF9yZWxpZHMgPSBibXNfY29weShw YXJlbnQtPnJlbGlkcyk7CisKKwkJLyoKKwkJICogRm9yIGluaGVyaXRhbmNlIGNoaWxkIHJl bGF0aW9ucywgd2UgYWxzbyBzZXQgaW5oX3Jvb3RfcGFyZW50LgorCQkgKiBOb3RlIHRoYXQg J3BhcmVudCcgbWlnaHQgaXRzZWxmIGJlIGEgY2hpbGQgKGEgc3ViLXBhcnRpdGlvbmVkCisJ CSAqIHBhcnRpdGlvbiksIGluIHdoaWNoIGNhc2Ugd2Ugc2ltcGx5IHVzZSBpdHMgdmFsdWUg b2YKKwkJICogaW5oX3Jvb3RfcGFyZW50LgorCQkgKi8KKwkJaWYgKHBhcmVudC0+cnRla2lu ZCA9PSBSVEVfUkVMQVRJT04pCisJCQlyZWwtPmluaF9yb290X3BhcmVudCA9IHBhcmVudC0+ aW5oX3Jvb3RfcGFyZW50ID4gMCA/CisJCQkJCQkJCQkJcGFyZW50LT5pbmhfcm9vdF9wYXJl bnQgOgorCQkJCQkJCQkJCXBhcmVudC0+cmVsaWQ7CiAJfQogCWVsc2UKKwl7CiAJCXJlbC0+ dG9wX3BhcmVudF9yZWxpZHMgPSBOVUxMOworCQlyZWwtPmluaF9yb290X3BhcmVudCA9IDA7 CisJfQogCiAJLyogQ2hlY2sgdHlwZSBvZiBydGFibGUgZW50cnkgKi8KIAlzd2l0Y2ggKHJ0 ZS0+cnRla2luZCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oCmluZGV4IDZmZDI0MjAzZGQuLjMyYWMz MzE1YTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKKysrIGIv c3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaApAQCAtNzAzLDYgKzcwMywxMCBAQCB0eXBl ZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJTGlzdAkgICoqcGFydGV4cHJzOwkJLyogTm9uLW51 bGxhYmxlIHBhcnRpdGlvbiBrZXkgZXhwcmVzc2lvbnMuICovCiAJTGlzdAkgICoqbnVsbGFi bGVfcGFydGV4cHJzOyAvKiBOdWxsYWJsZSBwYXJ0aXRpb24ga2V5IGV4cHJlc3Npb25zLiAq LwogCUxpc3QJICAgKnBhcnRpdGlvbmVkX2NoaWxkX3JlbHM7IC8qIExpc3Qgb2YgUlQgaW5k ZXhlcy4gKi8KKworCUluZGV4CQlpbmhfcm9vdF9wYXJlbnQ7CS8qIEZvciBvdGhlcnJlbHMs IHRoaXMgaXMgdGhlIFJUIGluZGV4IG9mCisJCQkJCQkJCQkgKiBpbmhlcml0YW5jZSB0YWJs ZSBtZW50aW9uZWQgaW4gdGhlIHF1ZXJ5CisJCQkJCQkJCQkgKiBmcm9tIHdoaWNoIHRoaXMg cmVsYXRpb24gb3JpZ2luYXRlZCAqLwogfSBSZWxPcHRJbmZvOwogCiAvKgotLSAKMi4xMS4w Cgo= --------------E34CCD0679090A92C6C33EB0 Content-Type: text/plain; charset=UTF-8; name="v5-0002-Overhaul-inheritance-update-delete-planning.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v5-0002-Overhaul-inheritance-update-delete-planning.patch" RnJvbSBmMTRlMDlmMTE5Y2U4NWMzNDRiNTgxYWY2YjE2MjM5ODJkN2NjMmIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogV2VkLCAxNyBPY3QgMjAxOCAxMToxODoxMiArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djUgMi82XSBPdmVyaGF1bCBpbmhlcml0YW5jZSB1cGRhdGUvZGVsZXRlIHBsYW5uaW5nCgpX aXRoIHRoZSBjdXJyZW50IG1ldGhvZCwgaW5oZXJpdGFuY2VfcGxhbm5lciwgd2hpY2ggaGFu ZGxlcyB0aGUKcGxhbm5pbmcgZm9yIHVwZGF0ZS9kZWxldGUgY29tbWFuZHMgdGFyZ2V0aW5n IGluaGVyaXRhbmNlIHRyZWVzLApwZXJmb3JtcyB0aGUgKndob2xlKiBwbGFubmluZyBmb3Ig ZWFjaCBjaGlsZCB0YWJsZS4gIFRoYXQgaW52b2x2ZXMKdHJhbnNsYXRpbmcgdGhlIHF1ZXJ5 IHRyZWUgdG8gc2V0IGEgZ2l2ZW4gY2hpbGQgdGFibGUgaW4gcGxhY2Ugb2YKdGhlIG9yaWdp bmFsIGluaGVyaXRhbmNlIHJvb3QgdGFibGUgYXMgdGhlIHF1ZXJ5J3MgdGFyZ2V0IHRhYmxl LApmb2xsb3dlZCBieSBjYWxsaW5nIGdyb3VwaW5nX3BsYW5uZXIgb24gdGhlIHRyYW5zbGF0 ZWQgcXVlcnkuCgpUaGF0J3MgaW5lZmZpY2llbnQgZm9yIHR3byByZWFzb25zOgoKIDEuIHBh cnRwcnVuZS5jIGNhbm5vdCBiZSB1c2VkIHRvIHBlcmZvcm0gcGFydGl0aW9uIHBydW5pbmcs IGJlY2F1c2UKICAgIGl0IGNhbiBvbmx5IGJlIGludm9rZWQgZnJvbSBxdWVyeV9wbGFubmVy LiAgV2l0aCB0aGUgY3VycmVudAogICAgYXBwcm9hY2gsIHF1ZXJ5X3BsYW5uZXIgb25seSBz ZWVzIHRoZSBpbmRpdmlkdWFsIHBhcnRpdGlvbnMgaW4KICAgIHRoZSBxdWVyeSB0cmVlIGl0 IHJlY2VpdmVzLCBub3QgdGhlIHBhcmVudCBwYXJ0aXRpb25lZCB0YWJsZS4KICAgIFRoaXMg bGVhdmVzIGVhY2ggcGFydGl0aW9uIHRvIGJlIHBydW5lZCB1c2luZyBjb25zdHJhaW50CiAg ICBleGNsdXNpb24uCgogMi4gUmVwZWF0ZWQgaW52b2NhdGlvbiBvZiBxdWVyeV9wbGFubmVy IHJlc3VsdHMgaW4gYWxsb2NhdGluZyBsYXJnZQogICAgYW1vdW50cyBvZiBtZW1vcnksIGVz cGVjaWFsbHkgaWYgdGhlcmUgYXJlIG1hbnkgY2hpbGQgdGFibGVzLgogICAgQWxzbywgaXQg aW52b2x2ZXMgcmVwZWF0ZWRseSBwZXJmb3JtaW5nIHRoZSBzYW1lIHByb2Nlc3NpbmcsCiAg ICBzdWNoIGpvaW50cmVlIHByb2Nlc3NpbmcuCgpUaGlzIGNvbW1pdCBhZGRyZXNzZXMgYm90 aCBvZiB0aGUgaXNzdWVzIGJ5IHJld3JpdGluZyBwb3J0aW9ucyBvZgppbmhlcml0YW5jZV9w bGFubmVyIGFuZCBhZGRpbmcgc29tZSBzdXBwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgdG8KYWxs cGF0aC5jLgoKV2l0aCB0aGUgbmV3IGltcGxlbWVudGF0aW9uLCBpbmhlcml0YW5jZV9wbGFu bmVyIGNhbGxzIHF1ZXJ5X3BsYW5uZXIKb25seSBvbmNlIGF0IHRoZSBiZWdpbm5pbmcgd2l0 aCB0aGUgb3JpZ2luYWwgdW5tb2RpZmllZCBxdWVyeSwgd2hpY2gKY3JlYXRlcyB0aGUgYWNj ZXNzIHBhdGhzIG9mIGluZGl2aWR1YWwgcmVsYXRpb25zIGFmdGVyIHBydW5pbmcgYW55CnVu bmVjZXNzYXJ5IHBhcnRpdGlvbnMuICBJZiB0aGUgcXVlcnkgaW52b2x2ZXMgam9pbiBhZ2Fp bnN0IHRoZSB0YXJnZXQKcmVsYXRpb24sIGpvaW4gcGF0aHMgYXJlIGNyZWF0ZWQgZm9yIGVh Y2ggdGFyZ2V0IGNoaWxkIHJlbGF0aW9uIGJ5CnJlcGxhY2luZyB0aGUgb3JpZ2luYWwgdGFy Z2V0IHRhYmxlIGluIHRoZSBqb2luIHRyZWUgYnkgYSBnaXZlbiBjaGlsZAp0YWJsZS4gIEpv aW4gcmVsYXRpb25zIChSZWxPcHRJbmZvcyB0aGVyZW9mKSBmb3IgYWxsIHRhcmdldCBjaGls ZApyZWxhdGlvbnMgYXJlIGNvbGxlY3RlZCBpbiBhIGdsb2JhbCBsaXN0IGluIFBsYW5uZXJJ bmZvLgoKQWZ0ZXIgY3JlYXRpbmcgdGhlIGpvaW4gcGF0aHMgZm9yIGFsbCB0YXJnZXQgY2hp bGQgcmVsYXRpb25zLCBpdApjYWxscyBncm91cGluZ19wbGFubmVyKCkgb24gZWFjaCBjaGls ZCBqb2luIHJlbGF0aW9uIHRvIGZpbmlzaCB1cCB0aGUKcGF0aHMgc3VjaCB0aGF0IHRoZXkg cHJvZHVjZSBxdWVyeSdzIHRvcC1sZXZlbCB0YXJnZXQgbGlzdCBleHBhbmRlZApwZXIgYSBn aXZlbiBjaGlsZCByZWxhdGlvbidzIGRlc2NyaXB0b3IuICBncm91cGluZ19wbGFubmVyKCkn cwppbnRlcmZhY2UgaXMgbW9kaWZpZWQgc28gdGhhdCB3ZSBjYW4gcGFzcyBpdCB3aGF0J3Mg Y2FsbGVkIGEKJ3BsYW5uZWRfcmVsJywgYSBSZWxPcHRJbmZvIHRoYXQgYWxyZWFkeSBjb250 YWlucyB0aGUgbmVjZXNzYXJ5CnBhdGhzIG5lZWRlZCB0byBwcm9kdWNlIGl0cyBvdXRwdXQu CgpUaGlzIHJlbW92ZXMgc29tZSBleGlzdGluZyBjb2RlIGluIGluaGVyaXRhbmNlX3BsYW5u ZXIgdGhhdCBkZWFsdAp3aXRoIGFueSBzdWJxdWVyeSBSVEVzIGluIHRoZSBxdWVyeS4gIFRo ZSByYXRpb25hbGUgb2YgdGhhdCBjb2RlCndhcyB0aGF0IHRoZSBzdWJxdWVyeSBSVEVzIG1h eSBjaGFuZ2UgZHVyaW5nIGVhY2ggaXRlcmF0aW9uIG9mCnBsYW5uaW5nICh0aGF0IGlzLCBm b3IgZGlmZmVyZW50IGNoaWxkcmVuKSwgc28gZGlmZmVyZW50IGl0ZXJhdGlvbnMKYmV0dGVy IHVzZSBkaWZmZXJlbnQgY29waWVzIG9mIHRob3NlIFJURXMuICBUaGF0IHdhcyBoYW5kbGVk IGJ5Cm1ha2luZyBmcmVzaCBjb3BpZXMgb2YgdGhvc2UgUlRFcyBmb3IgZWFjaCBpdGVyYXRp b24gb2YgcGxhbm5pbmcKd2hpY2ggd2VyZSBhcHBlbmRlZCB0byB0aGUgcmFuZ2UgdGFibGUs IGFjY29tcGFuaWVkIGJ5IG1vZGlmeWluZyBhbGwKZXhwcmVzc2lvbnMgYW5kIGF1eGlsaWFy eSBzdHJ1Y3R1cmVzIHRoYXQgcmVmZXJlbmNlZCB0aGUgb3JpZ2luYWwKc3VicXVlcnkgUlRF cyB0byBpbnN0ZWFkIHJlZmVyZW5jZSB0aGUgY29waWVzICh0aGF0IGlzLCBjaGFuZ2UgdGhl CnZhcm5vcykuICBUaGlzIGNvcHlpbmcgbWVhbnQgd2Ugd291bGQgZW5kIHVwIGFkZGluZyBT ICogTiBuZXcgZW50cmllcwp0byB0aGUgb3JpZ2luYWwgcmFuZ2UgdGFibGUgYnkgdGhlIHRp bWUgd2UgZ290IHRvIHRoZSBsYXN0IHVucHJ1bmVkCmNoaWxkLCB3aGVyZSBTIGlzIHRoZSBu dW1iZXIgb2Ygc3VicXVlcnkgUlRFcyBpbiB0aGUgb3JpZ2luYWwgcXVlcnkKYW5kIE4gdGhl IG51bWJlciBvZiB1bnBydW5lZCBjaGlsZHJlbi4gIFNpbmNlIHdpdGggdGhlIG5ldyBjb2Rl CndlIHBlcmZvcm0gcGxhbm5pbmcganVzdCBvbmNlLCBJIHRoaW5rIHdlIGRvbid0IG5lZWQg dGhpcyBzcGVjaWFsCmhhbmRsaW5nLiAgQWN0dWFsbHksIHRoZXJlIGlzIGEgcmVncmVzc2lv biB0ZXN0IG91dHB1dCBjaGFuZ2UgZHVlCnRvIG5vIGxvbmdlciBoYXZpbmcgY29waWVzIG9m IHN1YnF1ZXJ5IFJURXMgKHNlZSB0aGUgZGlmZiBvZgpwYXJ0aXRpb25fam9pbi5vdXQgZmls ZS4pCgpBbHNvIHdlIG5vIGxvbmdlciBuZWVkIHRoZSBoYWNrIGluIHJlbGF0aW9uX2V4Y2x1 ZGVkX2J5X2NvbnN0cmFpbnRzKCkKaW52b2x2aW5nIHNldHRpbmcgUGxhbm5lckluZm8uaW5o VGFyZ2V0S2luZCB0byBlbmFibGUgY29uc3RyYWludApleGNsdXNpb24gZm9yIHRhcmdldCBj aGlsZCByZWxhdGlvbiBpcyBubyBsb25nZXIgbmVlZGVkLgoKVGhpcyBjb21taXQgcmVtb3Zl cyBpbmhlcml0YW5jZV9wbGFubmVyIGluIGZhdm9yIG9mIHJlYXJyYW5naW5nCnRoaW5ncyBz dWNoIHRoYXQsIG9ubHkgdGhlIHBsYW5uaW5nIHN0ZXBzIHRoYXQgYWZmZWN0IDEgYW5kIDIg YWJvdmUKYXJlIHJlcGVhdGVkIGZvciB1bnBydW5lZCBjaGlsZCByZWxhdGlvbnMuCi0tLQog ZG9jL3NyYy9zZ21sL2RkbC5zZ21sICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTQgKy0K IHNyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgICAgICAgICAgICAgICAgIHwgICAxIC0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgIHwgMjEyICsr KysrKysrKysrKystCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMg ICAgICB8ICAxMCAtCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAg ICAgICB8IDQwMCArKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL29w dGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jICAgIHwgICAxIC0KIHNyYy9iYWNrZW5kL29w dGltaXplci9wcmVwL3ByZXB1bmlvbi5jICAgICAgIHwgIDMzICsrLQogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jICAgICAgICAgfCAgNTAgKy0tLQogc3JjL2luY2x1 ZGUvbm9kZXMvcmVsYXRpb24uaCAgICAgICAgICAgICAgICAgfCAgMTggKy0KIHNyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0IHwgICA0ICstCiAxMCBmaWxl cyBjaGFuZ2VkLCAzNTYgaW5zZXJ0aW9ucygrKSwgMzg3IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9kZGwuc2dtbCBiL2RvYy9zcmMvc2dtbC9kZGwuc2dtbApp bmRleCBiNWVkMWI3OTM5Li44Y2I2OWIxYTQ3IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwv ZGRsLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2RkbC5zZ21sCkBAIC0zOTM1LDE1ICszOTM1 LDYgQEAgRVhQTEFJTiBTRUxFQ1QgY291bnQoKikgRlJPTSBtZWFzdXJlbWVudCBXSEVSRSBs b2dkYXRlICZndDs9IERBVEUgJzIwMDgtMDEtMDEnOwogCiAgICA8bm90ZT4KICAgICA8cGFy YT4KLSAgICAgQ3VycmVudGx5LCBwcnVuaW5nIG9mIHBhcnRpdGlvbnMgZHVyaW5nIHRoZSBw bGFubmluZyBvZiBhbgotICAgICA8Y29tbWFuZD5VUERBVEU8L2NvbW1hbmQ+IG9yIDxjb21t YW5kPkRFTEVURTwvY29tbWFuZD4gY29tbWFuZCBpcwotICAgICBpbXBsZW1lbnRlZCB1c2lu ZyB0aGUgY29uc3RyYWludCBleGNsdXNpb24gbWV0aG9kIChob3dldmVyLCBpdCBpcwotICAg ICBjb250cm9sbGVkIGJ5IHRoZSA8bGl0ZXJhbD5lbmFibGVfcGFydGl0aW9uX3BydW5pbmc8 L2xpdGVyYWw+IHJhdGhlciB0aGFuCi0gICAgIDxsaXRlcmFsPmNvbnN0cmFpbnRfZXhjbHVz aW9uPC9saXRlcmFsPikgJm1kYXNoOyBzZWUgdGhlIGZvbGxvd2luZyBzZWN0aW9uCi0gICAg IGZvciBkZXRhaWxzIGFuZCBjYXZlYXRzIHRoYXQgYXBwbHkuCi0gICAgPC9wYXJhPgotCi0g ICAgPHBhcmE+CiAgICAgIEV4ZWN1dGlvbi10aW1lIHBhcnRpdGlvbiBwcnVuaW5nIGN1cnJl bnRseSBvY2N1cnMgZm9yIHRoZQogICAgICA8bGl0ZXJhbD5BcHBlbmQ8L2xpdGVyYWw+IGFu ZCA8bGl0ZXJhbD5NZXJnZUFwcGVuZDwvbGl0ZXJhbD4gbm9kZSB0eXBlcy4KICAgICA8L3Bh cmE+CkBAIC0zOTY0LDkgKzM5NTUsOCBAQCBFWFBMQUlOIFNFTEVDVCBjb3VudCgqKSBGUk9N IG1lYXN1cmVtZW50IFdIRVJFIGxvZ2RhdGUgJmd0Oz0gREFURSAnMjAwOC0wMS0wMSc7CiAK ICAgIDxwYXJhPgogICAgIDxmaXJzdHRlcm0+Q29uc3RyYWludCBleGNsdXNpb248L2ZpcnN0 dGVybT4gaXMgYSBxdWVyeSBvcHRpbWl6YXRpb24KLSAgICB0ZWNobmlxdWUgc2ltaWxhciB0 byBwYXJ0aXRpb24gcHJ1bmluZy4gIFdoaWxlIGl0IGlzIHByaW1hcmlseSB1c2VkCi0gICAg Zm9yIHBhcnRpdGlvbmluZyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgbGVnYWN5IGluaGVyaXRh bmNlIG1ldGhvZCwgaXQgY2FuIGJlCi0gICAgdXNlZCBmb3Igb3RoZXIgcHVycG9zZXMsIGlu Y2x1ZGluZyB3aXRoIGRlY2xhcmF0aXZlIHBhcnRpdGlvbmluZy4KKyAgICB0ZWNobmlxdWUg c2ltaWxhciB0byBwYXJ0aXRpb24gcHJ1bmluZy4gIEl0IGlzIHByaW1hcmlseSB1c2VkCisg ICAgZm9yIHBhcnRpdGlvbmluZyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgbGVnYWN5IGluaGVy aXRhbmNlIG1ldGhvZC4KICAgIDwvcGFyYT4KIAogICAgPHBhcmE+CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVu Y3MuYwppbmRleCA1M2E2NTdjMGFlLi5hOTUxNTNmZWE3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNz LmMKQEAgLTIzMDksNyArMjMwOSw2IEBAIF9vdXRQbGFubmVySW5mbyhTdHJpbmdJbmZvIHN0 ciwgY29uc3QgUGxhbm5lckluZm8gKm5vZGUpCiAJV1JJVEVfRkxPQVRfRklFTEQodHVwbGVf ZnJhY3Rpb24sICIlLjRmIik7CiAJV1JJVEVfRkxPQVRfRklFTEQobGltaXRfdHVwbGVzLCAi JS4wZiIpOwogCVdSSVRFX1VJTlRfRklFTEQocXVhbF9zZWN1cml0eV9sZXZlbCk7Ci0JV1JJ VEVfRU5VTV9GSUVMRChpbmhUYXJnZXRLaW5kLCBJbmhlcml0YW5jZUtpbmQpOwogCVdSSVRF X0JPT0xfRklFTEQoaGFzSm9pblJURXMpOwogCVdSSVRFX0JPT0xfRklFTEQoaGFzTGF0ZXJh bFJURXMpOwogCVdSSVRFX0JPT0xfRklFTEQoaGFzRGVsZXRlZFJURXMpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXggNzM4YmIzMDg0OC4uOGRlOGQzODNm OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwor KysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC0zNiw2ICsz Niw3IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCiAjaW5jbHVkZSAib3B0 aW1pemVyL3BhdGhzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKKyNpbmNs dWRlICJvcHRpbWl6ZXIvcGxhbm1haW4uaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5l ci5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wcmVwLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3Jlc3RyaWN0aW5mby5oIgpAQCAtMTE5LDYgKzEyMCw5IEBAIHN0YXRpYyB2b2lkIHNldF9u YW1lZHR1cGxlc3RvcmVfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwKIHN0YXRpYyB2b2lkIHNldF93b3JrdGFibGVfcGF0aGxpc3QoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJICAgUmFuZ2VUYmxFbnRyeSAqcnRlKTsK IHN0YXRpYyBSZWxPcHRJbmZvICptYWtlX3JlbF9mcm9tX2pvaW5saXN0KFBsYW5uZXJJbmZv ICpyb290LCBMaXN0ICpqb2lubGlzdCk7CitzdGF0aWMgdm9pZCBpbmhlcml0YW5jZV9tYWtl X3JlbF9mcm9tX2pvaW5saXN0KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJUmVsT3B0SW5m byAqcGFyZW50LAorCQkJCQkJTGlzdCAqam9pbmxpc3QpOwogc3RhdGljIGJvb2wgc3VicXVl cnlfaXNfcHVzaGRvd25fc2FmZShRdWVyeSAqc3VicXVlcnksIFF1ZXJ5ICp0b3BxdWVyeSwK IAkJCQkJCSAgcHVzaGRvd25fc2FmZXR5X2luZm8gKnNhZmV0eUluZm8pOwogc3RhdGljIGJv b2wgcmVjdXJzZV9wdXNoZG93bl9zYWZlKE5vZGUgKnNldE9wLCBRdWVyeSAqdG9wcXVlcnks CkBAIC0yMTcsMTMgKzIyMSwyOCBAQCBtYWtlX29uZV9yZWwoUGxhbm5lckluZm8gKnJvb3Qs IExpc3QgKmpvaW5saXN0KQogCiAJLyoKIAkgKiBHZW5lcmF0ZSBhY2Nlc3MgcGF0aHMgZm9y IHRoZSBlbnRpcmUgam9pbiB0cmVlLgorCSAqCisJICogRm9yIFVQREFURS9ERUxFVEUgb24g YW4gaW5oZXJpdGFuY2UgcGFyZW50LCBqb2luIHBhdGhzIHNob3VsZCBiZQorCSAqIGdlbmVy YXRlZCBmb3IgZWFjaCBjaGlsZCByZXN1bHQgcmVsIHNlcGFyYXRlbHkuCiAJICovCi0JcmVs ID0gbWFrZV9yZWxfZnJvbV9qb2lubGlzdChyb290LCBqb2lubGlzdCk7CisJaWYgKHJvb3Qt PnBhcnNlLT5yZXN1bHRSZWxhdGlvbiAmJgorCQlyb290LT5zaW1wbGVfcnRlX2FycmF5W3Jv b3QtPnBhcnNlLT5yZXN1bHRSZWxhdGlvbl0tPmluaCkKKwl7CisJCXJlbCA9IHJvb3QtPnNp bXBsZV9yZWxfYXJyYXlbcm9vdC0+cGFyc2UtPnJlc3VsdFJlbGF0aW9uXTsKKwkJaW5oZXJp dGFuY2VfbWFrZV9yZWxfZnJvbV9qb2lubGlzdChyb290LCByZWwsIGpvaW5saXN0KTsKKwkJ QXNzZXJ0KGxpc3RfbGVuZ3RoKHJvb3QtPmluaF90YXJnZXRfY2hpbGRfcmVscykgPT0KKwkJ CSAgIGxpc3RfbGVuZ3RoKHJvb3QtPmluaF90YXJnZXRfY2hpbGRfam9pbnJlbHMpKTsKKwl9 CisJZWxzZQorCXsKKwkJcmVsID0gbWFrZV9yZWxfZnJvbV9qb2lubGlzdChyb290LCBqb2lu bGlzdCk7CiAKLQkvKgotCSAqIFRoZSByZXN1bHQgc2hvdWxkIGpvaW4gYWxsIGFuZCBvbmx5 IHRoZSBxdWVyeSdzIGJhc2UgcmVscy4KLQkgKi8KLQlBc3NlcnQoYm1zX2VxdWFsKHJlbC0+ cmVsaWRzLCByb290LT5hbGxfYmFzZXJlbHMpKTsKKwkJLyoKKwkJICogVGhlIHJlc3VsdCBz aG91bGQgam9pbiBhbGwgYW5kIG9ubHkgdGhlIHF1ZXJ5J3MgYmFzZSByZWxzLgorCQkgKi8K KwkJQXNzZXJ0KGJtc19lcXVhbChyZWwtPnJlbGlkcywgcm9vdC0+YWxsX2Jhc2VyZWxzKSk7 CisKKwl9CiAKIAlyZXR1cm4gcmVsOwogfQpAQCAtMTIxOSw2ICsxMjM4LDYzIEBAIHNldF9h cHBlbmRfcmVsX3NpemUoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJ CXNldF9yZWxfY29uc2lkZXJfcGFyYWxsZWwocm9vdCwgY2hpbGRyZWwsIGNoaWxkUlRFKTsK IAogCQkvKgorCQkgKiBJZiB0aGUgcm9vdCBwYXJlbnQgaXMgdGhlIHJlc3VsdCByZWxhdGlv biwgd2UgbmVlZCBhIHJlbHRhcmdldAorCQkgKiBmb3IgdGhlIGNoaWxkIHRoYXQgd2lsbCBi ZSBzdWl0YWJsZSB0byB1c2UgdGhlIGNoaWxkIGFzCisJCSAqIHRhcmdldCByZWxhdGlvbi4K KwkJICovCisJCWlmIChjaGlsZHJlbC0+aW5oX3Jvb3RfcGFyZW50ID4gMCAmJgorCQkJY2hp bGRyZWwtPmluaF9yb290X3BhcmVudCA9PSByb290LT5wYXJzZS0+cmVzdWx0UmVsYXRpb24p CisJCXsKKwkJCVF1ZXJ5CSAgICpwYXJzZSwKKwkJCQkJICAgKm9yaWdfcGFyc2UgPSByb290 LT5wYXJzZTsKKwkJCUxpc3QJICAgKnRsaXN0OworCQkJTGlzdAkgICAqb3RoZXJfZXhwcnM7 CisJCQlMaXN0Q2VsbCAgICpsYzI7CisJCQlSZWxpZHMJCWNoaWxkX3JlbGlkcywKKwkJCQkJ CXRvcF9wYXJlbnRfcmVsaWRzOworCisJCQkvKgorCQkJICogV2UnZCBsaWtlIHRvIGJ1aWxk IHRoZSByZWx0YXJnZXQgYWZyZXNoOyBzYXZlIHRoZSB0cmFuc2xhdGVkCisJCQkgKiB2ZXJz aW9uIG9mIHBhcmVudCdzIGV4cHJlc3Npb25zIGFzaWRlLgorCQkJICovCisJCQlvdGhlcl9l eHBycyA9IGNoaWxkcmVsLT5yZWx0YXJnZXQtPmV4cHJzOworCQkJY2hpbGRyZWwtPnJlbHRh cmdldC0+ZXhwcnMgPSBOSUw7CisKKwkJCS8qCisJCQkgKiBUcmFuc2xhdGUgdGhlIG9yaWdp bmFsIHF1ZXJ5J3MgZXhwcmVzc2lvbnMgdG8gdGhpcyBjaGlsZCwKKwkJCSAqIG1haW5seSBm b3IgdXBkYXRpbmcgdGhlIGNoaWxkcmVsJ3MgcmVsdGFyZ2V0IHNvIHRoYXQgaXQKKwkJCSAq IGNvbnRhaW5zIG5lY2Vzc2FyeSBleHByZXNzaW9ucyBmb3IgdXNpbmcgY2hpbGRyZWwgYXMg dGFyZ2V0CisJCQkgKiByZWxhdGlvbiBjb3JyZWN0bHkuICBXZSBuZWVkIHRvIHVzZSBtdWx0 aWxldmVsIHRyYW5zbGF0aW9uCisJCQkgKiBhcyB3ZSBjYW4gb25seSBhY2Nlc3MgdGhlIG9y aWdpbmFsIHZlcnNpb24gb2YgdGhlIHF1ZXJ5LgorCQkJICovCisJCQljaGlsZF9yZWxpZHMg PSBibXNfbWFrZV9zaW5nbGV0b24oYXBwaW5mby0+Y2hpbGRfcmVsaWQpOworCQkJdG9wX3Bh cmVudF9yZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24oY2hpbGRyZWwtPmluaF9yb290X3Bh cmVudCk7CisJCQlwYXJzZSA9IChRdWVyeSAqKQorCQkJCQlhZGp1c3RfYXBwZW5kcmVsX2F0 dHJzX211bHRpbGV2ZWwocm9vdCwKKwkJCQkJCQkJCQkJCQkgIChOb2RlICopIHJvb3QtPnBh cnNlLAorCQkJCQkJCQkJCQkJCSAgY2hpbGRfcmVsaWRzLAorCQkJCQkJCQkJCQkJCSAgdG9w X3BhcmVudF9yZWxpZHMpOworCQkJcm9vdC0+cGFyc2UgPSBwYXJzZTsKKwkJCXRsaXN0ID0g cHJlcHJvY2Vzc190YXJnZXRsaXN0KHJvb3QpOworCQkJYnVpbGRfYmFzZV9yZWxfdGxpc3Rz KHJvb3QsIHRsaXN0KTsKKwkJCXJvb3QtPnBhcnNlID0gb3JpZ19wYXJzZTsKKworCQkJLyoK KwkJCSAqIFNvbWUgb2YgdGhlIGV4cHJlc3Npb25zIGluIHBhcmVudCdzIHJlbHRhcmdldCBt aWdodCBub3QgYmUKKwkJCSAqIGluIGNoaWxkJ3MganVzdCBidWlsdCBleHByZXNzaW9ucy4g IENoZWNrIHRvIGFkZCBhbnkgdGhhdCBhcmUKKwkJCSAqIG1pc3NpbmcuCisJCQkgKi8KKwkJ CWZvcmVhY2gobGMyLCBvdGhlcl9leHBycykKKwkJCXsKKwkJCQlFeHByICpleHByID0gbGZp cnN0KGxjMik7CisKKwkJCQlpZiAoIWxpc3RfbWVtYmVyKGNoaWxkcmVsLT5yZWx0YXJnZXQt PmV4cHJzLCBleHByKSkKKwkJCQkJY2hpbGRyZWwtPnJlbHRhcmdldC0+ZXhwcnMgPQorCQkJ CQkJCQlsYXBwZW5kKGNoaWxkcmVsLT5yZWx0YXJnZXQtPmV4cHJzLCBleHByKTsKKwkJCX0K KwkJfQorCisJCS8qCiAJCSAqIENvbXB1dGUgdGhlIGNoaWxkJ3Mgc2l6ZS4KIAkJICovCiAJ CXNldF9yZWxfc2l6ZShyb290LCBjaGlsZHJlbCwgY2hpbGRSVGluZGV4LCBjaGlsZFJURSk7 CkBAIC0yNjI0LDYgKzI3MDAsMTMyIEBAIGdlbmVyYXRlX2dhdGhlcl9wYXRocyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBib29sIG92ZXJyaWRlX3Jvd3MpCiB9CiAK IC8qCisgKiBpbmhlcml0YW5jZV9tYWtlX3JlbF9mcm9tX2pvaW5saXN0CisgKgkJUGVyZm9y bSBqb2luIHBsYW5uaW5nIGZvciBhbGwgbm9uLWR1bW15IGxlYWYgaW5oZXJpdGFuY2UgY2hp bGRyZW4KKyAqCQlpbiB0aGVpciByb2xlIGFzIHF1ZXJ5J3MgdGFyZ2V0IHJlbGF0aW9uCisg KgorICogSWYgYSBjaGlsZCByZWxhdGlvbiBpcyBhIHBhcnRpdGlvbmVkIHRhYmxlLCBpdHMg Y2hpbGRyZW4gYXJlIHByb2Nlc3NlZCBpbgorICogdHVybiBieSByZWN1cnNpdmVseSBjYWxs aW5nIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyB2b2lkCitpbmhlcml0YW5jZV9tYWtl X3JlbF9mcm9tX2pvaW5saXN0KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkgICBSZWxP cHRJbmZvICpwYXJlbnQsCisJCQkJCQkJCSAgIExpc3QgKmpvaW5saXN0KQoreworCUxpc3QJ ICAgKmpvaW5faW5mb19saXN0ID0gcm9vdC0+am9pbl9pbmZvX2xpc3Q7CisJTGlzdENlbGwg ICAqbGM7CisjaWZkZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCWludAkJdG9wX3BhcmVudF9y ZWxpZCA9IHBhcmVudC0+aW5oX3Jvb3RfcGFyZW50ID4gMCA/CisJCQkJCQkJICAgcGFyZW50 LT5pbmhfcm9vdF9wYXJlbnQgOgorCQkJCQkJCSAgIHBhcmVudC0+cmVsaWQ7CisJUmVsaWRz CWFsbF9iYXNlcmVsczsKKyNlbmRpZgorCisJLyoKKwkgKiBGb3IgVVBEQVRFL0RFTEVURSBx dWVyaWVzLCB0aGUgdG9wIHBhcmVudCBjYW4gb25seSBldmVyIGJlIGEgdGFibGUuCisJICog QXMgYSBjb250cmFzdCwgaXQgY291bGQgYmUgYSBVTklPTiBBTEwgc3VicXVlcnkgaW4gdGhl IGNhc2Ugb2YgU0VMRUNULgorCSAqLworCUFzc2VydChwbGFubmVyX3J0X2ZldGNoKHRvcF9w YXJlbnRfcmVsaWQsIHJvb3QpLT5ydGVraW5kID09IFJURV9SRUxBVElPTik7CisKKwkvKiBO b3RoaW5nIHRvIGRvLiAqLworCWlmIChJU19EVU1NWV9SRUwocGFyZW50KSkKKwkJcmV0dXJu OworCisJZm9yZWFjaChsYywgcm9vdC0+YXBwZW5kX3JlbF9saXN0KQorCXsKKwkJUmVsT3B0 SW5mbyAqY2hpbGRyZWw7CisJCUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSBsZmlyc3QobGMp OworCQlMaXN0CSAgICp0cmFuc2xhdGVkX2pvaW5saXN0OworCQlSZWxpZHMJCWNoaWxkX3Jl bGlkcywKKwkJCQkJdG9wX3BhcmVudF9yZWxpZHM7CisKKwkJLyogT25seSBjb25zaWRlciB0 aGlzIHBhcmVudCdzIGNoaWxkcmVuLiAqLworCQlpZiAoYXBwaW5mby0+cGFyZW50X3JlbGlk ICE9IHBhcmVudC0+cmVsaWQpCisJCQljb250aW51ZTsKKworCQljaGlsZHJlbCA9IGZpbmRf YmFzZV9yZWwocm9vdCwgYXBwaW5mby0+Y2hpbGRfcmVsaWQpOworCisJCS8qIElnbm9yZSBl eGNsdWRlZC9wcnVuZWQgY2hpbGRyZW4uICovCisJCWlmIChJU19EVU1NWV9SRUwoY2hpbGRy ZWwpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogU3ViLXBhcnRpdGlvbnMgaGF2ZSB0 byBiZSBwcm9jZXNzZWQgcmVjdXJzaXZlbHksIGJlY2F1c2UKKwkJICogQXBwZW5kUmVsSW5m b3MgbGluayBzdWItcGFydGl0aW9ucyB0byB0aGVpciBpbW1lZGlhdGUgcGFyZW50cywgbm90 CisJCSAqIHRoZSByb290IHBhcnRpdGlvbmVkIHRhYmxlLgorCQkgKi8KKwkJaWYgKGNoaWxk cmVsLT5wYXJ0X3NjaGVtZSAhPSBOVUxMKQorCQl7CisJCQlpbmhlcml0YW5jZV9tYWtlX3Jl bF9mcm9tX2pvaW5saXN0KHJvb3QsIGNoaWxkcmVsLCBqb2lubGlzdCk7CisJCQljb250aW51 ZTsKKwkJfQorCisJCS8qCisJCSAqIE1vZGlmeSBqb2lubGlzdCBzdWNoIHRoYXQgcmVsYXRp b25zIGpvaW5lZCB0byB0aGUgdG9wIHBhcmVudCByZWwKKwkJICogYXBwZWFyIHRvIGJlIGpv aW5lZCB0byB0aGUgY2hpbGQgcmVsIGluc3RlYWQuICBEbyB0aGUgc2FtZSBmb3IKKwkJICog YW55IFNwZWNpYWxKb2luSW5mbyBzdHJ1Y3RzLgorCQkgKi8KKwkJY2hpbGRfcmVsaWRzID0g Ym1zX21ha2Vfc2luZ2xldG9uKGFwcGluZm8tPmNoaWxkX3JlbGlkKTsKKwkJQXNzZXJ0KGNo aWxkcmVsLT5pbmhfcm9vdF9wYXJlbnQgPiAwKTsKKwkJdG9wX3BhcmVudF9yZWxpZHMgPSBi bXNfbWFrZV9zaW5nbGV0b24oY2hpbGRyZWwtPmluaF9yb290X3BhcmVudCk7CisJCXRyYW5z bGF0ZWRfam9pbmxpc3QgPSAoTGlzdCAqKQorCQkJCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRy c19tdWx0aWxldmVsKHJvb3QsCisJCQkJCQkJCQkJCQkJCSAgKE5vZGUgKikgam9pbmxpc3Qs CisJCQkJCQkJCQkJCQkJCSAgY2hpbGRfcmVsaWRzLAorCQkJCQkJCQkJCQkJCQkgIHRvcF9w YXJlbnRfcmVsaWRzKTsKKwkJcm9vdC0+am9pbl9pbmZvX2xpc3QgPSAoTGlzdCAqKQorCQkJ CWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXVsdGlsZXZlbChyb290LAorCQkJCQkJCQkJCQkJ ICAoTm9kZSAqKSBqb2luX2luZm9fbGlzdCwKKwkJCQkJCQkJCQkJCSAgY2hpbGRfcmVsaWRz LAorCQkJCQkJCQkJCQkJICB0b3BfcGFyZW50X3JlbGlkcyk7CisKKwkJLyoKKwkJICogU2lu Y2Ugd2UgYWRkZWQgdGhlIGNoaWxkIHJlbCBkaXJlY3RseSBpbnRvIHRoZSBqb2luIHRyZWUs IHdlIG11c3QKKwkJICogbW9kaWZ5IGl0IHRvIGJlIGEgImJhc2UiIHJlbCBpbnN0ZWFkIG9m IGFuICJvdGhlciIgcmVsLCB3aGljaCB0aGUKKwkJICogam9pbiBwbGFubmluZyBjb2RlIGV4 cGVjdHMgdGhlIHJlbGF0aW9ucyBiZWluZyBqb2luZWQgdG8gYmUuCisJCSAqCisJCSAqIE5C OiBEbyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgY2hpbGQgRUMgbWVtYmVycyB0byBiZSBtYXJr ZWQKKwkJICogYXMgbm9uLWNoaWxkIHNvbWVob3c/CisJCSAqLworCQljaGlsZHJlbC0+cmVs b3B0a2luZCA9IFJFTE9QVF9CQVNFUkVMOworCisJCS8qIFJlc2V0IGpvaW4gcGxhbm5pbmcg c3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmVzLiAqLworCQlyb290LT5qb2luX3JlbF9saXN0ID0g TklMOworCQlyb290LT5qb2luX3JlbF9oYXNoID0gTlVMTDsKKworCQkvKiBQZXJmb3JtIGpv aW4gcGxhbm5pbmcgYW5kIHNhdmUgdGhlIHJlc3VsdGluZyBSZWxPcHRJbmZvLiAqLworCQlj aGlsZHJlbCA9IG1ha2VfcmVsX2Zyb21fam9pbmxpc3Qocm9vdCwgdHJhbnNsYXRlZF9qb2lu bGlzdCk7CisKKwkJLyoKKwkJICogUmVtZW1iZXIgdGhpcyBjaGlsZCB0YXJnZXQgcmVsLiAg aW5oZXJpdGFuY2VfcGxhbm5lciB3aWxsIHBlcmZvcm0KKwkJICogdGhlIHJlbWFpbmluZyBz dGVwcyBvZiBwbGFubmluZyBmb3IgZWFjaCBjaGlsZCByZWxhdGlvbiBzZXBhcmF0ZWx5Lgor CQkgKiBTcGVjaWZpY2FsbHksIGl0IHdpbGwgY2FsbCBncm91cGluZ19wbGFubmVyIG9uIGV2 ZXJ5CisJCSAqIFJlbE9wdEluZm8gY29udGFpbmVkIGluIHRoZSBpbmhfdGFyZ2V0X2NoaWxk X2pvaW5yZWxzIGxpc3QsIGVhY2gKKwkJICogb2Ygd2hpY2ggcmVwcmVzZW50cyB0aGUgc291 cmNlIG9mIHR1cGxlcyB0byBiZSBtb2RpZmllZCBmb3IgYSBnaXZlbgorCQkgKiB0YXJnZXQg Y2hpbGQgcmVsLgorCQkgKi8KKwkJcm9vdC0+aW5oX3RhcmdldF9jaGlsZF9yZWxzID0gbGFw cGVuZF9pbnQocm9vdC0+aW5oX3RhcmdldF9jaGlsZF9yZWxzLAorCQkJCQkJCQkJCQkJICBh cHBpbmZvLT5jaGlsZF9yZWxpZCk7CisJCXJvb3QtPmluaF90YXJnZXRfY2hpbGRfam9pbnJl bHMgPQorCQkJCQkJbGFwcGVuZChyb290LT5pbmhfdGFyZ2V0X2NoaWxkX2pvaW5yZWxzLCBj aGlsZHJlbCk7CisKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJCS8qCisJCSAqIFRo ZSBmb2xsb3dpbmcgaW1wbGVtZW50cyBlc3NlbnRpYWxseSB0aGUgc2FtZSBBc3NlcnQgYXMg aW4KKwkJICogbWFrZV9vbmVfcmVsLCBvdXIgY2FsbGVyLgorCQkgKi8KKwkJYWxsX2Jhc2Vy ZWxzID0gYm1zX2NvcHkocm9vdC0+YWxsX2Jhc2VyZWxzKTsKKwkJYWxsX2Jhc2VyZWxzID0g Ym1zX2RlbF9tZW1iZXIoYWxsX2Jhc2VyZWxzLCB0b3BfcGFyZW50X3JlbGlkKTsKKwkJYWxs X2Jhc2VyZWxzID0gYm1zX2FkZF9tZW1iZXIoYWxsX2Jhc2VyZWxzLCBhcHBpbmZvLT5jaGls ZF9yZWxpZCk7CisJCUFzc2VydChibXNfZXF1YWwoY2hpbGRyZWwtPnJlbGlkcywgYWxsX2Jh c2VyZWxzKSk7CisjZW5kaWYKKworCQkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBmb3IgcHJv Y2Vzc2luZyB0aGUgbmV4dCBjaGlsZC4gKi8KKwkJcm9vdC0+am9pbl9pbmZvX2xpc3QgPSBq b2luX2luZm9fbGlzdDsKKwl9Cit9CisKKy8qCiAgKiBtYWtlX3JlbF9mcm9tX2pvaW5saXN0 CiAgKgkgIEJ1aWxkIGFjY2VzcyBwYXRocyB1c2luZyBhICJqb2lubGlzdCIgdG8gZ3VpZGUg dGhlIGpvaW4gcGF0aCBzZWFyY2guCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jCmluZGV4IGRhN2E5MjA4MWEuLjI4YzRiNTNmZWEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTE5OTgsMTIgKzE5OTgsNyBA QCBjcmVhdGVfZ3JvdXBpbmdzZXRzX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEdyb3VwaW5n U2V0c1BhdGggKmJlc3RfcGF0aCkKIAkvKgogCSAqIER1cmluZyBzZXRyZWZzLmMsIHdlJ2xs IG5lZWQgdGhlIGdyb3VwaW5nX21hcCB0byBmaXggdXAgdGhlIGNvbHMgbGlzdHMKIAkgKiBp biBHcm91cGluZ0Z1bmMgbm9kZXMuICBTYXZlIGl0IGZvciBzZXRyZWZzLmMgdG8gdXNlLgot CSAqCi0JICogVGhpcyBkb2Vzbid0IHdvcmsgaWYgd2UncmUgaW4gYW4gaW5oZXJpdGFuY2Ug c3VidHJlZSAoc2VlIG5vdGVzIGluCi0JICogY3JlYXRlX21vZGlmeXRhYmxlX3BsYW4pLiAg Rm9ydHVuYXRlbHkgd2UgY2FuJ3QgYmUgYmVjYXVzZSB0aGVyZSB3b3VsZAotCSAqIG5ldmVy IGJlIGdyb3VwaW5nIGluIGFuIFVQREFURS9ERUxFVEU7IGJ1dCBsZXQncyBBc3NlcnQgdGhh dC4KIAkgKi8KLQlBc3NlcnQocm9vdC0+aW5oVGFyZ2V0S2luZCA9PSBJTkhLSU5EX05PTkUp OwogCUFzc2VydChyb290LT5ncm91cGluZ19tYXAgPT0gTlVMTCk7CiAJcm9vdC0+Z3JvdXBp bmdfbWFwID0gZ3JvdXBpbmdfbWFwOwogCkBAIC0yMTYwLDEyICsyMTU1LDcgQEAgY3JlYXRl X21pbm1heGFnZ19wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNaW5NYXhBZ2dQYXRoICpiZXN0 X3BhdGgpCiAJICogd2l0aCBJbml0UGxhbiBvdXRwdXQgcGFyYW1zLiAgKFdlIGNhbid0IGp1 c3QgZG8gdGhhdCBsb2NhbGx5IGluIHRoZQogCSAqIE1pbk1heEFnZyBub2RlLCBiZWNhdXNl IHBhdGggbm9kZXMgYWJvdmUgaGVyZSBtYXkgaGF2ZSBBZ2cgcmVmZXJlbmNlcwogCSAqIGFz IHdlbGwuKSAgU2F2ZSB0aGUgbW1hZ2dyZWdhdGVzIGxpc3QgdG8gdGVsbCBzZXRyZWZzLmMg dG8gZG8gdGhhdC4KLQkgKgotCSAqIFRoaXMgZG9lc24ndCB3b3JrIGlmIHdlJ3JlIGluIGFu IGluaGVyaXRhbmNlIHN1YnRyZWUgKHNlZSBub3RlcyBpbgotCSAqIGNyZWF0ZV9tb2RpZnl0 YWJsZV9wbGFuKS4gIEZvcnR1bmF0ZWx5IHdlIGNhbid0IGJlIGJlY2F1c2UgdGhlcmUgd291 bGQKLQkgKiBuZXZlciBiZSBhZ2dyZWdhdGVzIGluIGFuIFVQREFURS9ERUxFVEU7IGJ1dCBs ZXQncyBBc3NlcnQgdGhhdC4KIAkgKi8KLQlBc3NlcnQocm9vdC0+aW5oVGFyZ2V0S2luZCA9 PSBJTkhLSU5EX05PTkUpOwogCUFzc2VydChyb290LT5taW5tYXhfYWdncyA9PSBOSUwpOwog CXJvb3QtPm1pbm1heF9hZ2dzID0gYmVzdF9wYXRoLT5tbWFnZ3JlZ2F0ZXM7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBjNzI5YTk5ZjhiLi45M2I4Yzc2 MWMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC0zNyw2ICsz Nyw3IEBACiAjaWZkZWYgT1BUSU1JWkVSX0RFQlVHCiAjaW5jbHVkZSAibm9kZXMvcHJpbnQu aCIKICNlbmRpZgorI2luY2x1ZGUgIm5vZGVzL3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAib3B0 aW1pemVyL2NsYXVzZXMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvY29zdC5oIgogI2luY2x1 ZGUgIm9wdGltaXplci9wYXRobm9kZS5oIgpAQCAtMTI2LDcgKzEyNyw3IEBAIHN0YXRpYyBO b2RlICpwcmVwcm9jZXNzX2V4cHJlc3Npb24oUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmV4 cHIsIGludCBraW5kKTsKIHN0YXRpYyB2b2lkIHByZXByb2Nlc3NfcXVhbF9jb25kaXRpb25z KFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpqdG5vZGUpOwogc3RhdGljIHZvaWQgaW5oZXJp dGFuY2VfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCk7CiBzdGF0aWMgdm9pZCBncm91cGlu Z19wbGFubmVyKFBsYW5uZXJJbmZvICpyb290LCBib29sIGluaGVyaXRhbmNlX3VwZGF0ZSwK LQkJCQkgZG91YmxlIHR1cGxlX2ZyYWN0aW9uKTsKKwkJCQkgUmVsT3B0SW5mbyAqcGxhbm5l ZF9yZWwsIGRvdWJsZSB0dXBsZV9mcmFjdGlvbik7CiBzdGF0aWMgZ3JvdXBpbmdfc2V0c19k YXRhICpwcmVwcm9jZXNzX2dyb3VwaW5nX3NldHMoUGxhbm5lckluZm8gKnJvb3QpOwogc3Rh dGljIExpc3QgKnJlbWFwX3RvX2dyb3VwY2xhdXNlX2lkeChMaXN0ICpncm91cENsYXVzZSwg TGlzdCAqZ3NldHMsCiAJCQkJCQkgaW50ICp0bGVyZWZfdG9fY29sbnVtX21hcCk7CkBAIC02 MzAsNyArNjMxLDYgQEAgc3VicXVlcnlfcGxhbm5lcihQbGFubmVyR2xvYmFsICpnbG9iLCBR dWVyeSAqcGFyc2UsCiAJcm9vdC0+Z3JvdXBpbmdfbWFwID0gTlVMTDsKIAlyb290LT5taW5t YXhfYWdncyA9IE5JTDsKIAlyb290LT5xdWFsX3NlY3VyaXR5X2xldmVsID0gMDsKLQlyb290 LT5pbmhUYXJnZXRLaW5kID0gSU5IS0lORF9OT05FOwogCXJvb3QtPmhhc1JlY3Vyc2lvbiA9 IGhhc1JlY3Vyc2lvbjsKIAlpZiAoaGFzUmVjdXJzaW9uKQogCQlyb290LT53dF9wYXJhbV9p ZCA9IFNTX2Fzc2lnbl9zcGVjaWFsX3BhcmFtKHJvb3QpOwpAQCAtOTcwLDcgKzk3MCw3IEBA IHN1YnF1ZXJ5X3BsYW5uZXIoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAog CQlydF9mZXRjaChwYXJzZS0+cmVzdWx0UmVsYXRpb24sIHBhcnNlLT5ydGFibGUpLT5pbmgp CiAJCWluaGVyaXRhbmNlX3BsYW5uZXIocm9vdCk7CiAJZWxzZQotCQlncm91cGluZ19wbGFu bmVyKHJvb3QsIGZhbHNlLCB0dXBsZV9mcmFjdGlvbik7CisJCWdyb3VwaW5nX3BsYW5uZXIo cm9vdCwgZmFsc2UsIE5VTEwsIHR1cGxlX2ZyYWN0aW9uKTsKIAogCS8qCiAJICogQ2FwdHVy ZSB0aGUgc2V0IG9mIG91dGVyLWxldmVsIHBhcmFtIElEcyB3ZSBoYXZlIGFjY2VzcyB0bywg Zm9yIHVzZSBpbgpAQCAtMTE0NiwxMiArMTE0NiwxOSBAQCBwcmVwcm9jZXNzX3Bodl9leHBy ZXNzaW9uKFBsYW5uZXJJbmZvICpyb290LCBFeHByICpleHByKQogICoJICBpbmhlcml0YW5j ZSBzZXQuCiAgKgogICogV2UgaGF2ZSB0byBoYW5kbGUgdGhpcyBjYXNlIGRpZmZlcmVudGx5 IGZyb20gY2FzZXMgd2hlcmUgYSBzb3VyY2UgcmVsYXRpb24KLSAqIGlzIGFuIGluaGVyaXRh bmNlIHNldC4gU291cmNlIGluaGVyaXRhbmNlIGlzIGV4cGFuZGVkIGF0IHRoZSBib3R0b20g b2YgdGhlCi0gKiBwbGFuIHRyZWUgKHNlZSBhbGxwYXRocy5jKSwgYnV0IHRhcmdldCBpbmhl cml0YW5jZSBoYXMgdG8gYmUgZXhwYW5kZWQgYXQKLSAqIHRoZSB0b3AuICBUaGUgcmVhc29u IGlzIHRoYXQgZm9yIFVQREFURSwgZWFjaCB0YXJnZXQgcmVsYXRpb24gbmVlZHMgYQotICog ZGlmZmVyZW50IHRhcmdldGxpc3QgbWF0Y2hpbmcgaXRzIG93biBjb2x1bW4gc2V0LiAgRm9y dHVuYXRlbHksCi0gKiB0aGUgVVBEQVRFL0RFTEVURSB0YXJnZXQgY2FuIG5ldmVyIGJlIHRo ZSBudWxsYWJsZSBzaWRlIG9mIGFuIG91dGVyIGpvaW4sCi0gKiBzbyBpdCdzIE9LIHRvIGdl bmVyYXRlIHRoZSBwbGFuIHRoaXMgd2F5LgorICogaXMgYW4gaW5oZXJpdGFuY2Ugc2V0LiAg VGhhdCdzIG1haW5seSBiZWNhdXNlIGZvciBVUERBVEUsIGVhY2ggdGFyZ2V0CisgKiByZWxh dGlvbiBuZWVkcyBhIGRpZmZlcmVudCB0YXJnZXRsaXN0IG1hdGNoaW5nIGl0cyBvd24gY29s dW1uIHNldC4gIFNvLCB3ZQorICogbXVzdCBtb2RpZnkgdGhlIHNvdXJjZSBzY2FuL2pvaW4g cGF0aCBmb3IgZWFjaCB0YXJnZXQgcmVsYXRpb24gc3VjaCB0aGF0IGl0CisgKiBwcm9kdWNl cyB0aGUgZGVzaXJlZCB0YXJnZXQgbGlzdC4KKyAqCisgKiBUaGUgc291cmNlIHNjYW4vam9p biBwYXRocyBmb3IgaW5kaXZpZHVhbCB0YXJnZXQgcmVsYXRpb25zIGFyZSBzdGlsbAorICog Y3JlYXRlZCBpbiBhbGxwYXRocy5jIGJ5IGZpcnN0IGV4cGFuZGluZyB0aGUgaW5oZXJpdGFu Y2UgaW4gdGhlIHVzdWFsIHdheQorICogYnkgc2V0X2FwcGVuZF9yZWxfc2l6ZSwgZm9sbG93 ZWQgYnkgam9pbiBwbGFubmluZyBmb3IgZWFjaCB0YXJnZXQgcmVsYXRpb24KKyAqIHNlcGFy YXRlbHkgaW4gbWFrZV9vbmVfcmVsLiAgRmluYWxseSwgd2UgYXBwbHkgZ3JvdXBpbmdfcGxh bm5lciBoZXJlIHRvIGVhY2gKKyAqIGNoaWxkIHNjYW4vam9pbiBwYXRoIHNvIHRoYXQgaXQg cHJvZHVjZXMgdGhlIGRlc2lyZWQgdGFyZ2V0bGlzdC4KKyAqCisgKiBGb3J0dW5hdGVseSwg dGhlIFVQREFURS9ERUxFVEUgdGFyZ2V0IGNhbiBuZXZlciBiZSB0aGUgbnVsbGFibGUgc2lk ZSBvZiBhbgorICogb3V0ZXIgam9pbiwgc28gaXQncyBPSyB0byBnZW5lcmF0ZSB0aGUgcGxh biB0aGlzIHdheS4KICAqCiAgKiBSZXR1cm5zIG5vdGhpbmc7IHRoZSB1c2VmdWwgb3V0cHV0 IGlzIGluIHRoZSBQYXRocyB3ZSBhdHRhY2ggdG8KICAqIHRoZSAoVVBQRVJSRUxfRklOQUws IE5VTEwpIHVwcGVycmVsIHN0b3JlZCBpbiAqcm9vdC4KQEAgLTExNjQsMTQgKzExNzEsOCBA QCBpbmhlcml0YW5jZV9wbGFubmVyKFBsYW5uZXJJbmZvICpyb290KQogewogCVF1ZXJ5CSAg ICpwYXJzZSA9IHJvb3QtPnBhcnNlOwogCWludAkJCXRvcF9wYXJlbnRSVGluZGV4ID0gcGFy c2UtPnJlc3VsdFJlbGF0aW9uOwotCUJpdG1hcHNldCAgKnN1YnF1ZXJ5UlRpbmRleGVzOwot CUJpdG1hcHNldCAgKm1vZGlmaWFibGVBUklpbmRleGVzOwogCWludAkJCW5vbWluYWxSZWxh dGlvbiA9IC0xOwogCUluZGV4CQlyb290UmVsYXRpb24gPSAwOwotCUxpc3QJICAgKmZpbmFs X3J0YWJsZSA9IE5JTDsKLQlpbnQJCQlzYXZlX3JlbF9hcnJheV9zaXplID0gMDsKLQlSZWxP cHRJbmZvICoqc2F2ZV9yZWxfYXJyYXkgPSBOVUxMOwotCUFwcGVuZFJlbEluZm8gKipzYXZl X2FwcGVuZF9yZWxfYXJyYXkgPSBOVUxMOwogCUxpc3QJICAgKnN1YnBhdGhzID0gTklMOwog CUxpc3QJICAgKnN1YnJvb3RzID0gTklMOwogCUxpc3QJICAgKnJlc3VsdFJlbGF0aW9ucyA9 IE5JTDsKQEAgLTExNzksNzAgKzExODAsNjAgQEAgaW5oZXJpdGFuY2VfcGxhbm5lcihQbGFu bmVySW5mbyAqcm9vdCkKIAlMaXN0CSAgICpyZXR1cm5pbmdMaXN0cyA9IE5JTDsKIAlMaXN0 CSAgICpyb3dNYXJrczsKIAlSZWxPcHRJbmZvICpmaW5hbF9yZWw7Ci0JTGlzdENlbGwgICAq bGM7Ci0JSW5kZXgJCXJ0aTsKKwlMaXN0Q2VsbCAgICpsYzEsCisJCQkgICAqbGMyOwogCVJh bmdlVGJsRW50cnkgKnBhcmVudF9ydGU7Ci0JUGxhbm5lckluZm8gKnBhcmVudF9yb290Owot CVF1ZXJ5CSAgICpwYXJlbnRfcGFyc2U7Ci0JQml0bWFwc2V0ICAqcGFyZW50X3JlbGlkcyA9 IGJtc19tYWtlX3NpbmdsZXRvbih0b3BfcGFyZW50UlRpbmRleCk7Ci0JUGxhbm5lckluZm8g KipwYXJlbnRfcm9vdHMgPSBOVUxMOworCUxpc3QJICAgKnRsaXN0LAorCQkJICAgKm9yaWdf dGxpc3Q7CisJc3RhbmRhcmRfcXBfZXh0cmEgcXBfZXh0cmE7CisJUmVsT3B0SW5mbyAqcGxh bm5lZF9yZWw7CisJTGlzdAkgICAqcGFydGl0aW9uZWRfcmVscyA9IE5JTDsKIAorCS8qIElu aGVyaXRhbmNlIGlzIG5ldmVyIHVzZWQgZm9yIGluc2VydC4gKi8KIAlBc3NlcnQocGFyc2Ut PmNvbW1hbmRUeXBlICE9IENNRF9JTlNFUlQpOworCXBhcmVudF9ydGUgPSBwbGFubmVyX3J0 X2ZldGNoKHRvcF9wYXJlbnRSVGluZGV4LCByb290KTsKIAogCS8qCi0JICogV2UgZ2VuZXJh dGUgYSBtb2RpZmllZCBpbnN0YW5jZSBvZiB0aGUgb3JpZ2luYWwgUXVlcnkgZm9yIGVhY2gg dGFyZ2V0Ci0JICogcmVsYXRpb24sIHBsYW4gdGhhdCwgYW5kIHB1dCBhbGwgdGhlIHBsYW5z IGludG8gYSBsaXN0IHRoYXQgd2lsbCBiZQotCSAqIGNvbnRyb2xsZWQgYnkgYSBzaW5nbGUg TW9kaWZ5VGFibGUgbm9kZS4gIEFsbCB0aGUgaW5zdGFuY2VzIHNoYXJlIHRoZQotCSAqIHNh bWUgcmFuZ2V0YWJsZSwgYnV0IGVhY2ggaW5zdGFuY2UgbXVzdCBoYXZlIGl0cyBvd24gc2V0 IG9mIHN1YnF1ZXJ5Ci0JICogUlRFcyB3aXRoaW4gdGhlIGZpbmlzaGVkIHJhbmdldGFibGUg YmVjYXVzZSAoMSkgdGhleSBhcmUgbGlrZWx5IHRvIGdldAotCSAqIHNjcmliYmxlZCBvbiBk dXJpbmcgcGxhbm5pbmcsIGFuZCAoMikgaXQncyBub3QgaW5jb25jZWl2YWJsZSB0aGF0Ci0J ICogc3VicXVlcmllcyBjb3VsZCBnZXQgcGxhbm5lZCBkaWZmZXJlbnRseSBpbiBkaWZmZXJl bnQgY2FzZXMuICBXZSBuZWVkCi0JICogbm90IGNyZWF0ZSBkdXBsaWNhdGUgY29waWVzIG9m IG90aGVyIFJURSBraW5kcywgaW4gcGFydGljdWxhciBub3QgdGhlCi0JICogdGFyZ2V0IHJl bGF0aW9ucywgYmVjYXVzZSB0aGV5IGRvbid0IGhhdmUgZWl0aGVyIG9mIHRob3NlIGlzc3Vl cy4gIE5vdAotCSAqIGhhdmluZyB0byBkdXBsaWNhdGUgdGhlIHRhcmdldCByZWxhdGlvbnMg aXMgaW1wb3J0YW50IGJlY2F1c2UgZG9pbmcgc28KLQkgKiAoMSkgd291bGQgcmVzdWx0IGlu IGEgcmFuZ2V0YWJsZSBvZiBsZW5ndGggTyhOXjIpIGZvciBOIHRhcmdldHMsIHdpdGgKLQkg KiBhdCBsZWFzdCBPKE5eMykgd29yayBleHBlbmRlZCBoZXJlOyBhbmQgKDIpIHdvdWxkIGdy ZWF0bHkgY29tcGxpY2F0ZQotCSAqIG1hbmFnZW1lbnQgb2YgdGhlIHJvd01hcmtzIGxpc3Qu CisJICogR2VuZXJhdGUgdGhlIGFjY2VzcyBwYXRocyBmb3IgYWxsIHJlbGF0aW9ucyBtZW50 aW9uZWQgaW4gdGhlIHF1ZXJ5LAorCSAqIGluY2x1ZGluZyB0aGUgdGFyZ2V0IGluaGVyaXRh bmNlIHNldC4gIFdoZW4gZG9pbmcgdGhlIGpvaW4gcGxhbm5pbmcsCisJICogcmVmZXJlbmNl cyBpbiB0aGUgam9pbiB0cmVlIHRvIHRoZSBvcmlnaW5hbCB0YXJnZXQgcmVsYXRpb24gdGhh dCdzIHRoZQorCSAqIHJvb3QgcGFyZW50IG9mIHRoZSBpbmhlcml0YW5jZSB0cmVlIGlzIHJl cGxhY2VkIGJ5IGVhY2ggb2YgaXRzCisJICogaW5oZXJpdGFuY2UgY2hpbGRyZW4gYW5kIHRo ZSByZXN1bHRpbmcgam9pbnJlbCBSZWxPcHRJbmZvJ3MgYXJlCisJICogYWRkZWQgdG8gcm9v dC0+aW5oX3RhcmdldF9jaGlsZF9qb2lucmVscy4KIAkgKgotCSAqIFRvIGJlZ2luIHdpdGgs IGdlbmVyYXRlIGEgYml0bWFwc2V0IG9mIHRoZSByZWxpZHMgb2YgdGhlIHN1YnF1ZXJ5IFJU RXMuCisJICogRmluYWwgcGxhbm5pbmcgc3RlcHMgKGdyb3VwaW5nX3BsYW5uZXIpIGFyZSBh cHBsaWVkIHRvIHRoZSBiZXN0IHBhdGgKKwkgKiBvZiBlYWNoIG9mIHRob3NlIGNoaWxkIGpv aW5yZWxzIHVzaW5nIGEgbW9kaWZpZWQgaW5zdGFuY2Ugb2YgdGhlCisJICogb3JpZ2luYWwg cXVlcnkgZm9yIGEgZ2l2ZW4gY2hpbGQgdGFyZ2V0IHJlbC4gIEFsbCB0aGUgcGF0aHMgc28g Z2VuZXJhdGVkCisJICogYXJlIHB1dCBpbnRvICBhIGxpc3QgdGhhdCB3aWxsIGJlIGNvbnRy b2xsZWQgYnkgYSBzaW5nbGUgTW9kaWZ5VGFibGUKKwkgKiBub2RlLiAgQWxsIHRoZSBpbnN0 YW5jZXMgc2hhcmUgdGhlIHNhbWUgcmFuZ2V0YWJsZS4KIAkgKi8KLQlzdWJxdWVyeVJUaW5k ZXhlcyA9IE5VTEw7Ci0JcnRpID0gMTsKLQlmb3JlYWNoKGxjLCBwYXJzZS0+cnRhYmxlKQot CXsKLQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gbGZpcnN0X25vZGUoUmFuZ2VUYmxFbnRyeSwg bGMpOwotCi0JCWlmIChydGUtPnJ0ZWtpbmQgPT0gUlRFX1NVQlFVRVJZKQotCQkJc3VicXVl cnlSVGluZGV4ZXMgPSBibXNfYWRkX21lbWJlcihzdWJxdWVyeVJUaW5kZXhlcywgcnRpKTsK LQkJcnRpKys7Ci0JfQogCiAJLyoKLQkgKiBOZXh0LCB3ZSB3YW50IHRvIGlkZW50aWZ5IHdo aWNoIEFwcGVuZFJlbEluZm8gaXRlbXMgY29udGFpbiByZWZlcmVuY2VzCi0JICogdG8gYW55 IG9mIHRoZSBhZm9yZXNhaWQgc3VicXVlcnkgUlRFcy4gIFRoZXNlIGl0ZW1zIHdpbGwgbmVl ZCB0byBiZQotCSAqIGNvcGllZCBhbmQgbW9kaWZpZWQgdG8gYWRqdXN0IHRoZWlyIHN1YnF1 ZXJ5IHJlZmVyZW5jZXM7IHdoZXJlYXMgdGhlCi0JICogb3RoZXIgb25lcyBuZWVkIG5vdCBi ZSB0b3VjaGVkLiAgSXQncyB3b3J0aCBiZWluZyB0ZW5zZSBvdmVyIHRoaXMKLQkgKiBiZWNh dXNlIHdlIGNhbiB1c3VhbGx5IGF2b2lkIHByb2Nlc3NpbmcgbW9zdCBvZiB0aGUgQXBwZW5k UmVsSW5mbwotCSAqIGl0ZW1zLCB0aGVyZWJ5IHNhdmluZyBPKE5eMikgc3BhY2UgYW5kIHRp bWUgd2hlbiB0aGUgdGFyZ2V0IGlzIGEgbGFyZ2UKLQkgKiBpbmhlcml0YW5jZSB0cmVlLiAg V2UgY2FuIGlkZW50aWZ5IEFwcGVuZFJlbEluZm8gaXRlbXMgYnkgdGhlaXIKLQkgKiBjaGls ZF9yZWxpZCwgc2luY2UgdGhhdCBzaG91bGQgYmUgdW5pcXVlIHdpdGhpbiB0aGUgbGlzdC4K KwkgKiBTYXZlIHRoZSB1bm1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIHF1ZXJ5J3MgdGFyZ2V0 bGlzdCB0byBiZSB1c2VkIGJlbG93CisJICogZm9yIHBhc3NpbmcgdG8gZ3JvdXBpbmdfcGxh bm5lciBmb3IgZWFjaCBjaGlsZCB0YXJnZXQgcmVsYXRpb24uCiAJICovCi0JbW9kaWZpYWJs ZUFSSWluZGV4ZXMgPSBOVUxMOwotCWlmIChzdWJxdWVyeVJUaW5kZXhlcyAhPSBOVUxMKQot CXsKLQkJZm9yZWFjaChsYywgcm9vdC0+YXBwZW5kX3JlbF9saXN0KQotCQl7Ci0JCQlBcHBl bmRSZWxJbmZvICphcHBpbmZvID0gbGZpcnN0X25vZGUoQXBwZW5kUmVsSW5mbywgbGMpOwor CW9yaWdfdGxpc3QgPSBsaXN0X2NvcHkocm9vdC0+cGFyc2UtPnRhcmdldExpc3QpOwogCi0J CQlpZiAoYm1zX2lzX21lbWJlcihhcHBpbmZvLT5wYXJlbnRfcmVsaWQsIHN1YnF1ZXJ5UlRp bmRleGVzKSB8fAotCQkJCWJtc19pc19tZW1iZXIoYXBwaW5mby0+Y2hpbGRfcmVsaWQsIHN1 YnF1ZXJ5UlRpbmRleGVzKSB8fAotCQkJCWJtc19vdmVybGFwKHB1bGxfdmFybm9zKChOb2Rl ICopIGFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycyksCi0JCQkJCQkJc3VicXVlcnlSVGluZGV4 ZXMpKQotCQkJCW1vZGlmaWFibGVBUklpbmRleGVzID0gYm1zX2FkZF9tZW1iZXIobW9kaWZp YWJsZUFSSWluZGV4ZXMsCi0JCQkJCQkJCQkJCQkJICBhcHBpbmZvLT5jaGlsZF9yZWxpZCk7 Ci0JCX0KKwkvKiBEbyB0aGUgc2Nhbi9qb2luIHBsYW5uaW5nLiAqLworCXRsaXN0ID0gcHJl cHJvY2Vzc190YXJnZXRsaXN0KHJvb3QpOworCXFwX2V4dHJhLnRsaXN0ID0gdGxpc3Q7CisJ cXBfZXh0cmEuYWN0aXZlV2luZG93cyA9IHFwX2V4dHJhLmdyb3VwQ2xhdXNlID0gTklMOwor CXBsYW5uZWRfcmVsID0gcXVlcnlfcGxhbm5lcihyb290LCB0bGlzdCwgc3RhbmRhcmRfcXBf Y2FsbGJhY2ssICZxcF9leHRyYSk7CisKKwkvKgorCSAqIElmIGl0IHR1cm5lZCBvdXQgZHVy aW5nIHF1ZXJ5IHBsYW5uaW5nIHRoYXQgYWxsIHRoZSBjaGlsZHJlbiBhcmUgZHVtbXkKKwkg KiAocHJ1bmVkIG9yIGV4Y2x1ZGVkIGJ5IGNvbnN0cmFpbnRzKSwgbm8gbmVlZCB0byBkbyB0 aGUgc3RlcHMgYmVsb3cuCisJICogTGV0IGdyb3VwaW5nX3BsYW5uZXIgZmluaXNoIHVwIHRo ZSBmaW5hbCBwYXRoLgorCSAqLworCWlmIChJU19EVU1NWV9SRUwocGxhbm5lZF9yZWwpKQor CXsKKwkJZ3JvdXBpbmdfcGxhbm5lcihyb290LCBmYWxzZSwgcGxhbm5lZF9yZWwsIDAuMCk7 CisJCXJldHVybjsKIAl9CiAKKwlBc3NlcnQocGxhbm5lZF9yZWwtPnJlbGlkID09IHRvcF9w YXJlbnRSVGluZGV4KTsKKwlBc3NlcnQocGxhbm5lZF9yZWwtPnJlbG9wdGtpbmQgPT0gUkVM T1BUX0JBU0VSRUwpOworCiAJLyoKIAkgKiBJZiB0aGUgcGFyZW50IFJURSBpcyBhIHBhcnRp dGlvbmVkIHRhYmxlLCB3ZSBzaG91bGQgdXNlIHRoYXQgYXMgdGhlCiAJICogbm9taW5hbCB0 YXJnZXQgcmVsYXRpb24sIGJlY2F1c2UgdGhlIFJURXMgYWRkZWQgZm9yIHBhcnRpdGlvbmVk IHRhYmxlcwpAQCAtMTI1MCw2NyArMTI0MSw1MCBAQCBpbmhlcml0YW5jZV9wbGFubmVyKFBs YW5uZXJJbmZvICpyb290KQogCSAqIG5vdCBhcHBlYXIgYW55d2hlcmUgZWxzZSBpbiB0aGUg cGxhbiwgc28gdGhlIGNvbmZ1c2lvbiBleHBsYWluZWQgYmVsb3cKIAkgKiBmb3Igbm9uLXBh cnRpdGlvbmluZyBpbmhlcml0YW5jZSBjYXNlcyBpcyBub3QgcG9zc2libGUuCiAJICovCi0J cGFyZW50X3J0ZSA9IHJ0X2ZldGNoKHRvcF9wYXJlbnRSVGluZGV4LCByb290LT5wYXJzZS0+ cnRhYmxlKTsKIAlpZiAocGFyZW50X3J0ZS0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElP TkVEX1RBQkxFKQogCXsKIAkJbm9taW5hbFJlbGF0aW9uID0gdG9wX3BhcmVudFJUaW5kZXg7 CiAJCXJvb3RSZWxhdGlvbiA9IHRvcF9wYXJlbnRSVGluZGV4OworCQlwYXJ0aXRpb25lZF9y ZWxzID0gbGFwcGVuZChwYXJ0aXRpb25lZF9yZWxzLAorCQkJCQkJCQkgICBsaXN0X21ha2Ux X2ludCh0b3BfcGFyZW50UlRpbmRleCkpOwogCX0KIAogCS8qCi0JICogVGhlIFBsYW5uZXJJ bmZvIGZvciBlYWNoIGNoaWxkIGlzIG9idGFpbmVkIGJ5IHRyYW5zbGF0aW5nIHRoZSByZWxl dmFudAotCSAqIG1lbWJlcnMgb2YgdGhlIFBsYW5uZXJJbmZvIGZvciBpdHMgaW1tZWRpYXRl IHBhcmVudCwgd2hpY2ggd2UgZmluZAotCSAqIHVzaW5nIHRoZSBwYXJlbnRfcmVsaWQgaW4g aXRzIEFwcGVuZFJlbEluZm8uICBXZSBzYXZlIHRoZSBQbGFubmVySW5mbwotCSAqIGZvciBl YWNoIHBhcmVudCBpbiBhbiBhcnJheSBpbmRleGVkIGJ5IHJlbGlkIGZvciBmYXN0IHJldHJp ZXZhbC4gU2luY2UKLQkgKiB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFyZW50cyBpcyBsaW1p dGVkIGJ5IHRoZSBudW1iZXIgb2YgUlRFcyBpbiB0aGUKLQkgKiBxdWVyeSwgd2UgdXNlIHRo YXQgbnVtYmVyIHRvIGFsbG9jYXRlIHRoZSBhcnJheS4gQW4gZXh0cmEgZW50cnkgaXMKLQkg KiBuZWVkZWQgc2luY2UgcmVsaWRzIHN0YXJ0IGZyb20gMS4KKwkgKiBHZXQgb24gd2l0aCBm aW5hbGl6aW5nIHRoZSBwYXRoIGZvciBlYWNoIGNoaWxkIHRhcmdldCByZWxhdGlvbiBieQor CSAqIGNhbGxpbmcgZ3JvdXBpbmdfcGxhbm5lciBvbiBpdHMgam9pbnJlbC4gIE5vdGUgdGhh dCB3ZSdyZSByZXN0b3JpbmcKKwkgKiB0aGUgcXVlcnkncyB0YXJnZXRsaXN0IHRvIHRoZSBv cmlnaW5hbCBvbmUgZm9yIGdyb3VwaW5nX3BsYW5uZXIncworCSAqIHRhcmdldGxpc3QgZXhw YW5zaW9uIHN0ZXBzIHRvIHBlcmZvcm0gdGhlIGV4cGFuc2lvbiB3aXRoIGluZGl2aWR1YWwK KwkgKiBjaGlsZCBkZXNjcmlwdG9ycy4KIAkgKi8KLQlwYXJlbnRfcm9vdHMgPSAoUGxhbm5l ckluZm8gKiopIHBhbGxvYzAoKGxpc3RfbGVuZ3RoKHBhcnNlLT5ydGFibGUpICsgMSkgKgot CQkJCQkJCQkJCQlzaXplb2YoUGxhbm5lckluZm8gKikpOwotCXBhcmVudF9yb290c1t0b3Bf cGFyZW50UlRpbmRleF0gPSByb290OwotCi0JLyoKLQkgKiBBbmQgbm93IHdlIGNhbiBnZXQg b24gd2l0aCBnZW5lcmF0aW5nIGEgcGxhbiBmb3IgZWFjaCBjaGlsZCB0YWJsZS4KLQkgKi8K LQlmb3JlYWNoKGxjLCByb290LT5hcHBlbmRfcmVsX2xpc3QpCisJcGFyc2UtPnRhcmdldExp c3QgPSBvcmlnX3RsaXN0OworCWZvcmJvdGgobGMxLCByb290LT5pbmhfdGFyZ2V0X2NoaWxk X3JlbHMsCisJCQlsYzIsIHJvb3QtPmluaF90YXJnZXRfY2hpbGRfam9pbnJlbHMpCiAJewot CQlBcHBlbmRSZWxJbmZvICphcHBpbmZvID0gbGZpcnN0X25vZGUoQXBwZW5kUmVsSW5mbywg bGMpOworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvID0gcm9vdC0+YXBwZW5kX3JlbF9hcnJh eVtsZmlyc3RfaW50KGxjMSldOworCQlSZWxPcHRJbmZvICpjaGlsZF9qb2lucmVsID0gbGZp cnN0KGxjMik7CiAJCVBsYW5uZXJJbmZvICpzdWJyb290OwogCQlSYW5nZVRibEVudHJ5ICpj aGlsZF9ydGU7CiAJCVJlbE9wdEluZm8gKnN1Yl9maW5hbF9yZWw7CiAJCVBhdGgJICAgKnN1 YnBhdGg7Ci0KLQkJLyogYXBwZW5kX3JlbF9saXN0IGNvbnRhaW5zIGFsbCBhcHBlbmQgcmVs czsgaWdub3JlIG90aGVycyAqLwotCQlpZiAoIWJtc19pc19tZW1iZXIoYXBwaW5mby0+cGFy ZW50X3JlbGlkLCBwYXJlbnRfcmVsaWRzKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAq IGV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeSgpIGFsd2F5cyBwcm9jZXNzZXMgYSBwYXJlbnQg YmVmb3JlIGFueSBvZgotCQkgKiB0aGF0IHBhcmVudCdzIGNoaWxkcmVuLCBzbyB0aGUgcGFy ZW50X3Jvb3QgZm9yIHRoaXMgcmVsYXRpb24gc2hvdWxkCi0JCSAqIGFscmVhZHkgYmUgYXZh aWxhYmxlLgotCQkgKi8KLQkJcGFyZW50X3Jvb3QgPSBwYXJlbnRfcm9vdHNbYXBwaW5mby0+ cGFyZW50X3JlbGlkXTsKLQkJQXNzZXJ0KHBhcmVudF9yb290ICE9IE5VTEwpOwotCQlwYXJl bnRfcGFyc2UgPSBwYXJlbnRfcm9vdC0+cGFyc2U7CisJCVJlbGlkcwkJY2hpbGRfcmVsaWRz ID0gYm1zX21ha2Vfc2luZ2xldG9uKGFwcGluZm8tPmNoaWxkX3JlbGlkKSwKKwkJCQkJdG9w X3BhcmVudF9yZWxpZHMgPSBibXNfbWFrZV9zaW5nbGV0b24odG9wX3BhcmVudFJUaW5kZXgp OwogCiAJCS8qCiAJCSAqIFdlIG5lZWQgYSB3b3JraW5nIGNvcHkgb2YgdGhlIFBsYW5uZXJJ bmZvIHNvIHRoYXQgd2UgY2FuIGNvbnRyb2wKIAkJICogcHJvcGFnYXRpb24gb2YgaW5mb3Jt YXRpb24gYmFjayB0byB0aGUgbWFpbiBjb3B5LgogCQkgKi8KIAkJc3Vicm9vdCA9IG1ha2VO b2RlKFBsYW5uZXJJbmZvKTsKLQkJbWVtY3B5KHN1YnJvb3QsIHBhcmVudF9yb290LCBzaXpl b2YoUGxhbm5lckluZm8pKTsKKwkJbWVtY3B5KHN1YnJvb3QsIHJvb3QsIHNpemVvZihQbGFu bmVySW5mbykpOwogCiAJCS8qCiAJCSAqIEdlbmVyYXRlIG1vZGlmaWVkIHF1ZXJ5IHdpdGgg dGhpcyByZWwgYXMgdGFyZ2V0LiAgV2UgZmlyc3QgYXBwbHkKIAkJICogYWRqdXN0X2FwcGVu ZHJlbF9hdHRycywgd2hpY2ggY29waWVzIHRoZSBRdWVyeSBhbmQgY2hhbmdlcwotCQkgKiBy ZWZlcmVuY2VzIHRvIHRoZSBwYXJlbnQgUlRFIHRvIHJlZmVyIHRvIHRoZSBjdXJyZW50IGNo aWxkIFJURSwKLQkJICogdGhlbiBmb29sIGFyb3VuZCB3aXRoIHN1YnF1ZXJ5IFJURXMuCisJ CSAqIHJlZmVyZW5jZXMgdG8gdGhlIHBhcmVudCBSVEUgdG8gcmVmZXIgdG8gdGhlIGN1cnJl bnQgY2hpbGQgUlRFLgogCQkgKi8KIAkJc3Vicm9vdC0+cGFyc2UgPSAoUXVlcnkgKikKLQkJ CWFkanVzdF9hcHBlbmRyZWxfYXR0cnMocGFyZW50X3Jvb3QsCi0JCQkJCQkJCSAgIChOb2Rl ICopIHBhcmVudF9wYXJzZSwKLQkJCQkJCQkJICAgMSwgJmFwcGluZm8pOworCQkJCQlhZGp1 c3RfYXBwZW5kcmVsX2F0dHJzX211bHRpbGV2ZWwocm9vdCwgKE5vZGUgKikgcGFyc2UsCisJ CQkJCQkJCQkJCQkJICBjaGlsZF9yZWxpZHMsCisJCQkJCQkJCQkJCQkJICB0b3BfcGFyZW50 X3JlbGlkcyk7CiAKIAkJLyoKIAkJICogSWYgdGhlcmUgYXJlIHNlY3VyaXR5UXVhbHMgYXR0 YWNoZWQgdG8gdGhlIHBhcmVudCwgbW92ZSB0aGVtIHRvIHRoZQpAQCAtMTMyMiwzMyArMTI5 NiwxMCBAQCBpbmhlcml0YW5jZV9wbGFubmVyKFBsYW5uZXJJbmZvICpyb290KQogCQlwYXJl bnRfcnRlLT5zZWN1cml0eVF1YWxzID0gTklMOwogCiAJCS8qCi0JCSAqIE1hcmsgd2hldGhl ciB3ZSdyZSBwbGFubmluZyBhIHF1ZXJ5IHRvIGEgcGFydGl0aW9uZWQgdGFibGUgb3IgYW4K LQkJICogaW5oZXJpdGFuY2UgcGFyZW50LgorCQkgKiBpbmhlcml0YW5jZV9tYWtlX3JlbF9m cm9tX2pvaW5saXN0IG9ubHkgYWRkcyB0aGUgbGVhZiBwYXJ0aXRpb25zIHRvCisJCSAqIFBs YW5uZXJJbmZvLgogCQkgKi8KLQkJc3Vicm9vdC0+aW5oVGFyZ2V0S2luZCA9Ci0JCQkocm9v dFJlbGF0aW9uICE9IDApID8gSU5IS0lORF9QQVJUSVRJT05FRCA6IElOSEtJTkRfSU5IRVJJ VEVEOwotCi0JCS8qCi0JCSAqIElmIHRoaXMgY2hpbGQgaXMgZnVydGhlciBwYXJ0aXRpb25l ZCwgcmVtZW1iZXIgaXQgYXMgYSBwYXJlbnQuCi0JCSAqIFNpbmNlIGEgcGFydGl0aW9uZWQg dGFibGUgZG9lcyBub3QgaGF2ZSBhbnkgZGF0YSwgd2UgZG9uJ3QgbmVlZCB0bwotCQkgKiBj cmVhdGUgYSBwbGFuIGZvciBpdCwgYW5kIHdlIGNhbiBzdG9wIHByb2Nlc3NpbmcgaXQgaGVy ZS4gIFdlIGRvLAotCQkgKiBob3dldmVyLCBuZWVkIHRvIHJlbWVtYmVyIGl0cyBtb2RpZmll ZCBQbGFubmVySW5mbyBmb3IgdXNlIHdoZW4KLQkJICogcHJvY2Vzc2luZyBpdHMgY2hpbGRy ZW4sIHNpbmNlIHdlJ2xsIHVwZGF0ZSB0aGVpciB2YXJub3MgYmFzZWQgb24KLQkJICogdGhl IGRlbHRhIGZyb20gaW1tZWRpYXRlIHBhcmVudCB0byBjaGlsZCwgbm90IGZyb20gdG9wIHRv IGNoaWxkLgotCQkgKgotCQkgKiBOb3RlOiBhIHZlcnkgbm9uLW9idmlvdXMgcG9pbnQgaXMg dGhhdCB3ZSBoYXZlIG5vdCB5ZXQgYWRkZWQKLQkJICogZHVwbGljYXRlIHN1YnF1ZXJ5IFJU RXMgdG8gdGhlIHN1YnJvb3QncyBydGFibGUuICBXZSBtdXN0bid0LAotCQkgKiBiZWNhdXNl IHRoZW4gaXRzIGNoaWxkcmVuIHdvdWxkIGhhdmUgdHdvIHNldHMgb2YgZHVwbGljYXRlcywK LQkJICogY29uZnVzaW5nIG1hdHRlcnMuCi0JCSAqLwotCQlpZiAoY2hpbGRfcnRlLT5pbmgp Ci0JCXsKLQkJCUFzc2VydChjaGlsZF9ydGUtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJ T05FRF9UQUJMRSk7Ci0JCQlwYXJlbnRfcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocGFyZW50 X3JlbGlkcywgYXBwaW5mby0+Y2hpbGRfcmVsaWQpOwotCQkJcGFyZW50X3Jvb3RzW2FwcGlu Zm8tPmNoaWxkX3JlbGlkXSA9IHN1YnJvb3Q7Ci0KLQkJCWNvbnRpbnVlOwotCQl9CisJCUFz c2VydCghY2hpbGRfcnRlLT5pbmgpOwogCiAJCS8qCiAJCSAqIFNldCB0aGUgbm9taW5hbCB0 YXJnZXQgcmVsYXRpb24gb2YgdGhlIE1vZGlmeVRhYmxlIG5vZGUgaWYgbm90CkBAIC0xMzc0 LDExMSArMTMyNSw4IEBAIGluaGVyaXRhbmNlX3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3Qp CiAJCWlmIChub21pbmFsUmVsYXRpb24gPCAwKQogCQkJbm9taW5hbFJlbGF0aW9uID0gYXBw aW5mby0+Y2hpbGRfcmVsaWQ7CiAKLQkJLyoKLQkJICogVGhlIHJvd01hcmtzIGxpc3QgbWln aHQgY29udGFpbiByZWZlcmVuY2VzIHRvIHN1YnF1ZXJ5IFJURXMsIHNvCi0JCSAqIG1ha2Ug YSBjb3B5IHRoYXQgd2UgY2FuIGFwcGx5IENoYW5nZVZhck5vZGVzIHRvLiAgKEZvcnR1bmF0 ZWx5LCB0aGUKLQkJICogZXhlY3V0b3IgZG9lc24ndCBuZWVkIHRvIHNlZSB0aGUgbW9kaWZp ZWQgY29waWVzIC0tLSB3ZSBjYW4ganVzdAotCQkgKiBwYXNzIGl0IHRoZSBvcmlnaW5hbCBy b3dNYXJrcyBsaXN0LikKLQkJICovCi0JCXN1YnJvb3QtPnJvd01hcmtzID0gY29weU9iamVj dChwYXJlbnRfcm9vdC0+cm93TWFya3MpOwotCi0JCS8qCi0JCSAqIFRoZSBhcHBlbmRfcmVs X2xpc3QgbGlrZXdpc2UgbWlnaHQgY29udGFpbiByZWZlcmVuY2VzIHRvIHN1YnF1ZXJ5Ci0J CSAqIFJURXMgKGlmIGFueSBzdWJxdWVyaWVzIHdlcmUgZmxhdHRlbmFibGUgVU5JT04gQUxM cykuICBTbyBwcmVwYXJlCi0JCSAqIHRvIGFwcGx5IENoYW5nZVZhck5vZGVzIHRvIHRoYXQs IHRvby4gIEFzIGV4cGxhaW5lZCBhYm92ZSwgd2Ugb25seQotCQkgKiB3YW50IHRvIGNvcHkg aXRlbXMgdGhhdCBhY3R1YWxseSBjb250YWluIHN1Y2ggcmVmZXJlbmNlczsgdGhlIHJlc3QK LQkJICogY2FuIGp1c3QgZ2V0IGxpbmtlZCBpbnRvIHRoZSBzdWJyb290J3MgYXBwZW5kX3Jl bF9saXN0LgotCQkgKgotCQkgKiBJZiB3ZSBrbm93IHRoZXJlIGFyZSBubyBzdWNoIHJlZmVy ZW5jZXMsIHdlIGNhbiBqdXN0IHVzZSB0aGUgb3V0ZXIKLQkJICogYXBwZW5kX3JlbF9saXN0 IHVubW9kaWZpZWQuCi0JCSAqLwotCQlpZiAobW9kaWZpYWJsZUFSSWluZGV4ZXMgIT0gTlVM TCkKLQkJewotCQkJTGlzdENlbGwgICAqbGMyOwotCi0JCQlzdWJyb290LT5hcHBlbmRfcmVs X2xpc3QgPSBOSUw7Ci0JCQlmb3JlYWNoKGxjMiwgcGFyZW50X3Jvb3QtPmFwcGVuZF9yZWxf bGlzdCkKLQkJCXsKLQkJCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvMiA9IGxmaXJzdF9ub2Rl KEFwcGVuZFJlbEluZm8sIGxjMik7Ci0KLQkJCQlpZiAoYm1zX2lzX21lbWJlcihhcHBpbmZv Mi0+Y2hpbGRfcmVsaWQsIG1vZGlmaWFibGVBUklpbmRleGVzKSkKLQkJCQkJYXBwaW5mbzIg PSBjb3B5T2JqZWN0KGFwcGluZm8yKTsKLQotCQkJCXN1YnJvb3QtPmFwcGVuZF9yZWxfbGlz dCA9IGxhcHBlbmQoc3Vicm9vdC0+YXBwZW5kX3JlbF9saXN0LAotCQkJCQkJCQkJCQkJICAg YXBwaW5mbzIpOwotCQkJfQotCQl9Ci0KLQkJLyoKLQkJICogQWRkIHBsYWNlaG9sZGVycyB0 byB0aGUgY2hpbGQgUXVlcnkncyByYW5nZXRhYmxlIGxpc3QgdG8gZmlsbCB0aGUKLQkJICog UlQgaW5kZXhlcyBhbHJlYWR5IHJlc2VydmVkIGZvciBzdWJxdWVyaWVzIGluIHByZXZpb3Vz IGNoaWxkcmVuLgotCQkgKiBUaGVzZSB3b24ndCBiZSByZWZlcmVuY2VkLCBzbyB0aGVyZSdz IG5vIG5lZWQgdG8gbWFrZSB0aGVtIHZlcnkKLQkJICogdmFsaWQtbG9va2luZy4KLQkJICov Ci0JCXdoaWxlIChsaXN0X2xlbmd0aChzdWJyb290LT5wYXJzZS0+cnRhYmxlKSA8IGxpc3Rf bGVuZ3RoKGZpbmFsX3J0YWJsZSkpCi0JCQlzdWJyb290LT5wYXJzZS0+cnRhYmxlID0gbGFw cGVuZChzdWJyb290LT5wYXJzZS0+cnRhYmxlLAotCQkJCQkJCQkJCQkgbWFrZU5vZGUoUmFu Z2VUYmxFbnRyeSkpOwotCi0JCS8qCi0JCSAqIElmIHRoaXMgaXNuJ3QgdGhlIGZpcnN0IGNo aWxkIFF1ZXJ5LCBnZW5lcmF0ZSBkdXBsaWNhdGVzIG9mIGFsbAotCQkgKiBzdWJxdWVyeSBS VEVzLCBhbmQgYWRqdXN0IFZhciBudW1iZXJpbmcgdG8gcmVmZXJlbmNlIHRoZQotCQkgKiBk dXBsaWNhdGVzLiBUbyBzaW1wbGlmeSB0aGUgbG9vcCBsb2dpYywgd2Ugc2NhbiB0aGUgb3Jp Z2luYWwgcnRhYmxlCi0JCSAqIG5vdCB0aGUgY29weSBqdXN0IG1hZGUgYnkgYWRqdXN0X2Fw cGVuZHJlbF9hdHRyczsgdGhhdCBzaG91bGQgYmUgT0sKLQkJICogc2luY2Ugc3VicXVlcnkg UlRFcyBjb3VsZG4ndCBjb250YWluIGFueSByZWZlcmVuY2VzIHRvIHRoZSB0YXJnZXQKLQkJ ICogcmVsLgotCQkgKi8KLQkJaWYgKGZpbmFsX3J0YWJsZSAhPSBOSUwgJiYgc3VicXVlcnlS VGluZGV4ZXMgIT0gTlVMTCkKLQkJewotCQkJTGlzdENlbGwgICAqbHI7Ci0KLQkJCXJ0aSA9 IDE7Ci0JCQlmb3JlYWNoKGxyLCBwYXJlbnRfcGFyc2UtPnJ0YWJsZSkKLQkJCXsKLQkJCQlS YW5nZVRibEVudHJ5ICpydGUgPSBsZmlyc3Rfbm9kZShSYW5nZVRibEVudHJ5LCBscik7Ci0K LQkJCQlpZiAoYm1zX2lzX21lbWJlcihydGksIHN1YnF1ZXJ5UlRpbmRleGVzKSkKLQkJCQl7 Ci0JCQkJCUluZGV4CQluZXdydGk7Ci0KLQkJCQkJLyoKLQkJCQkJICogVGhlIFJURSBjYW4n dCBjb250YWluIGFueSByZWZlcmVuY2VzIHRvIGl0cyBvd24gUlQKLQkJCQkJICogaW5kZXgs IGV4Y2VwdCBpbiBpdHMgc2VjdXJpdHlRdWFscywgc28gd2UgY2FuIHNhdmUgYQotCQkJCQkg KiBmZXcgY3ljbGVzIGJ5IGFwcGx5aW5nIENoYW5nZVZhck5vZGVzIHRvIHRoZSByZXN0IG9m Ci0JCQkJCSAqIHRoZSByYW5nZXRhYmxlIGJlZm9yZSB3ZSBhcHBlbmQgdGhlIFJURSB0byBp dC4KLQkJCQkJICovCi0JCQkJCW5ld3J0aSA9IGxpc3RfbGVuZ3RoKHN1YnJvb3QtPnBhcnNl LT5ydGFibGUpICsgMTsKLQkJCQkJQ2hhbmdlVmFyTm9kZXMoKE5vZGUgKikgc3Vicm9vdC0+ cGFyc2UsIHJ0aSwgbmV3cnRpLCAwKTsKLQkJCQkJQ2hhbmdlVmFyTm9kZXMoKE5vZGUgKikg c3Vicm9vdC0+cm93TWFya3MsIHJ0aSwgbmV3cnRpLCAwKTsKLQkJCQkJLyogU2tpcCBwcm9j ZXNzaW5nIHVuY2hhbmdpbmcgcGFydHMgb2YgYXBwZW5kX3JlbF9saXN0ICovCi0JCQkJCWlm IChtb2RpZmlhYmxlQVJJaW5kZXhlcyAhPSBOVUxMKQotCQkJCQl7Ci0JCQkJCQlMaXN0Q2Vs bCAgICpsYzI7Ci0KLQkJCQkJCWZvcmVhY2gobGMyLCBzdWJyb290LT5hcHBlbmRfcmVsX2xp c3QpCi0JCQkJCQl7Ci0JCQkJCQkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbzIgPSBsZmlyc3Rf bm9kZShBcHBlbmRSZWxJbmZvLCBsYzIpOwotCi0JCQkJCQkJaWYgKGJtc19pc19tZW1iZXIo YXBwaW5mbzItPmNoaWxkX3JlbGlkLAotCQkJCQkJCQkJCQkgIG1vZGlmaWFibGVBUklpbmRl eGVzKSkKLQkJCQkJCQkJQ2hhbmdlVmFyTm9kZXMoKE5vZGUgKikgYXBwaW5mbzIsIHJ0aSwg bmV3cnRpLCAwKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlydGUgPSBjb3B5T2JqZWN0KHJ0 ZSk7Ci0JCQkJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIHJ0ZS0+c2VjdXJpdHlRdWFscywg cnRpLCBuZXdydGksIDApOwotCQkJCQlzdWJyb290LT5wYXJzZS0+cnRhYmxlID0gbGFwcGVu ZChzdWJyb290LT5wYXJzZS0+cnRhYmxlLAotCQkJCQkJCQkJCQkJCSBydGUpOwotCQkJCX0K LQkJCQlydGkrKzsKLQkJCX0KLQkJfQotCi0JCS8qIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkg T0ogaW5mbyB0byB0cmFuc2xhdGUsIGFzIHlldCAqLwotCQlBc3NlcnQoc3Vicm9vdC0+am9p bl9pbmZvX2xpc3QgPT0gTklMKTsKLQkJLyogYW5kIHdlIGhhdmVuJ3QgY3JlYXRlZCBQbGFj ZUhvbGRlckluZm9zLCBlaXRoZXIgKi8KLQkJQXNzZXJ0KHN1YnJvb3QtPnBsYWNlaG9sZGVy X2xpc3QgPT0gTklMKTsKLQotCQkvKiBHZW5lcmF0ZSBQYXRoKHMpIGZvciBhY2Nlc3Npbmcg dGhpcyByZXN1bHQgcmVsYXRpb24gKi8KLQkJZ3JvdXBpbmdfcGxhbm5lcihzdWJyb290LCB0 cnVlLCAwLjAgLyogcmV0cmlldmUgYWxsIHR1cGxlcyAqLyApOworCQkvKiBBcHBseSB0aGUg dG9wLWxldmVsIHRhcmdldGxpc3QgdG8gY2hpbGRfam9pbnJlbCdzIHBhdGguICovCisJCWdy b3VwaW5nX3BsYW5uZXIoc3Vicm9vdCwgdHJ1ZSwgY2hpbGRfam9pbnJlbCwgMC4wKTsKIAog CQkvKgogCQkgKiBTZWxlY3QgY2hlYXBlc3QgcGF0aCBpbiBjYXNlIHRoZXJlJ3MgbW9yZSB0 aGFuIG9uZS4gIFdlIGFsd2F5cyBydW4KQEAgLTE0OTAsNDUgKzEzMzgsMTAgQEAgaW5oZXJp dGFuY2VfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCkKIAkJc3VicGF0aCA9IHN1Yl9maW5h bF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGg7CiAKIAkJLyoKLQkJICogSWYgdGhpcyBjaGls ZCByZWwgd2FzIGV4Y2x1ZGVkIGJ5IGNvbnN0cmFpbnQgZXhjbHVzaW9uLCBleGNsdWRlIGl0 Ci0JCSAqIGZyb20gdGhlIHJlc3VsdCBwbGFuLgorCQkgKiBjaGlsZCByZWwgY2Fubm90IGJl IGVtcHR5LCBvciBpbmhlcml0YW5jZV9tYWtlX3JlbF9mcm9tX2pvaW5saXN0CisJCSAqIHdv dWxkbid0IGhhdmUgcHV0IGl0IGluIHRoZSBsaXN0IHRvIGJlZ2luIHdpdGguCiAJCSAqLwot CQlpZiAoSVNfRFVNTVlfUEFUSChzdWJwYXRoKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0J CSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IG5vbi1leGNsdWRlZCBjaGlsZCwgaXRzIHBvc3Qt cGxhbm5pbmcgcnRhYmxlCi0JCSAqIGJlY29tZXMgdGhlIGluaXRpYWwgY29udGVudHMgb2Yg ZmluYWxfcnRhYmxlOyBvdGhlcndpc2UsIGFwcGVuZAotCQkgKiBqdXN0IGl0cyBtb2RpZmll ZCBzdWJxdWVyeSBSVEVzIHRvIGZpbmFsX3J0YWJsZS4KLQkJICovCi0JCWlmIChmaW5hbF9y dGFibGUgPT0gTklMKQotCQkJZmluYWxfcnRhYmxlID0gc3Vicm9vdC0+cGFyc2UtPnJ0YWJs ZTsKLQkJZWxzZQotCQkJZmluYWxfcnRhYmxlID0gbGlzdF9jb25jYXQoZmluYWxfcnRhYmxl LAotCQkJCQkJCQkJICAgbGlzdF9jb3B5X3RhaWwoc3Vicm9vdC0+cGFyc2UtPnJ0YWJsZSwK LQkJCQkJCQkJCQkJCQkgIGxpc3RfbGVuZ3RoKGZpbmFsX3J0YWJsZSkpKTsKLQotCQkvKgot CQkgKiBXZSBuZWVkIHRvIGNvbGxlY3QgYWxsIHRoZSBSZWxPcHRJbmZvcyBmcm9tIGFsbCBj aGlsZCBwbGFucyBpbnRvCi0JCSAqIHRoZSBtYWluIFBsYW5uZXJJbmZvLCBzaW5jZSBzZXRy ZWZzLmMgd2lsbCBuZWVkIHRoZW0uICBXZSB1c2UgdGhlCi0JCSAqIGxhc3QgY2hpbGQncyBz aW1wbGVfcmVsX2FycmF5IChwcmV2aW91cyBvbmVzIGFyZSB0b28gc2hvcnQpLCBzbyB3ZQot CQkgKiBoYXZlIHRvIHByb3BhZ2F0ZSBmb3J3YXJkIHRoZSBSZWxPcHRJbmZvcyB0aGF0IHdl cmUgYWxyZWFkeSBidWlsdAotCQkgKiBpbiBwcmV2aW91cyBjaGlsZHJlbi4KLQkJICovCi0J CUFzc2VydChzdWJyb290LT5zaW1wbGVfcmVsX2FycmF5X3NpemUgPj0gc2F2ZV9yZWxfYXJy YXlfc2l6ZSk7Ci0JCWZvciAocnRpID0gMTsgcnRpIDwgc2F2ZV9yZWxfYXJyYXlfc2l6ZTsg cnRpKyspCi0JCXsKLQkJCVJlbE9wdEluZm8gKmJyZWwgPSBzYXZlX3JlbF9hcnJheVtydGld OwotCi0JCQlpZiAoYnJlbCkKLQkJCQlzdWJyb290LT5zaW1wbGVfcmVsX2FycmF5W3J0aV0g PSBicmVsOwotCQl9Ci0JCXNhdmVfcmVsX2FycmF5X3NpemUgPSBzdWJyb290LT5zaW1wbGVf cmVsX2FycmF5X3NpemU7Ci0JCXNhdmVfcmVsX2FycmF5ID0gc3Vicm9vdC0+c2ltcGxlX3Jl bF9hcnJheTsKLQkJc2F2ZV9hcHBlbmRfcmVsX2FycmF5ID0gc3Vicm9vdC0+YXBwZW5kX3Jl bF9hcnJheTsKLQotCQkvKiBNYWtlIHN1cmUgYW55IGluaXRwbGFucyBmcm9tIHRoaXMgcmVs IGdldCBpbnRvIHRoZSBvdXRlciBsaXN0ICovCi0JCXJvb3QtPmluaXRfcGxhbnMgPSBzdWJy b290LT5pbml0X3BsYW5zOworCQlBc3NlcnQoIUlTX0RVTU1ZX1BBVEgoc3VicGF0aCkpOwog CiAJCS8qIEJ1aWxkIGxpc3Qgb2Ygc3ViLXBhdGhzICovCiAJCXN1YnBhdGhzID0gbGFwcGVu ZChzdWJwYXRocywgc3VicGF0aCk7CkBAIC0xNTYwLDM2ICsxMzczLDYgQEAgaW5oZXJpdGFu Y2VfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCkKIAkgKi8KIAogCS8qCi0JICogSWYgd2Ug bWFuYWdlZCB0byBleGNsdWRlIGV2ZXJ5IGNoaWxkIHJlbCwgcmV0dXJuIGEgZHVtbXkgcGxh bjsgaXQKLQkgKiBkb2Vzbid0IGV2ZW4gbmVlZCBhIE1vZGlmeVRhYmxlIG5vZGUuCi0JICov Ci0JaWYgKHN1YnBhdGhzID09IE5JTCkKLQl7Ci0JCXNldF9kdW1teV9yZWxfcGF0aGxpc3Qo ZmluYWxfcmVsKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogUHV0IGJhY2sgdGhlIGZp bmFsIGFkanVzdGVkIHJ0YWJsZSBpbnRvIHRoZSBtYXN0ZXIgY29weSBvZiB0aGUgUXVlcnku Ci0JICogKFdlIG11c3RuJ3QgZG8gdGhpcyBpZiB3ZSBmb3VuZCBubyBub24tZXhjbHVkZWQg Y2hpbGRyZW4uKQotCSAqLwotCXBhcnNlLT5ydGFibGUgPSBmaW5hbF9ydGFibGU7Ci0Jcm9v dC0+c2ltcGxlX3JlbF9hcnJheV9zaXplID0gc2F2ZV9yZWxfYXJyYXlfc2l6ZTsKLQlyb290 LT5zaW1wbGVfcmVsX2FycmF5ID0gc2F2ZV9yZWxfYXJyYXk7Ci0Jcm9vdC0+YXBwZW5kX3Jl bF9hcnJheSA9IHNhdmVfYXBwZW5kX3JlbF9hcnJheTsKLQotCS8qIE11c3QgcmVjb25zdHJ1 Y3QgbWFzdGVyJ3Mgc2ltcGxlX3J0ZV9hcnJheSwgdG9vICovCi0Jcm9vdC0+c2ltcGxlX3J0 ZV9hcnJheSA9IChSYW5nZVRibEVudHJ5ICoqKQotCQlwYWxsb2MwKChsaXN0X2xlbmd0aChm aW5hbF9ydGFibGUpICsgMSkgKiBzaXplb2YoUmFuZ2VUYmxFbnRyeSAqKSk7Ci0JcnRpID0g MTsKLQlmb3JlYWNoKGxjLCBmaW5hbF9ydGFibGUpCi0JewotCQlSYW5nZVRibEVudHJ5ICpy dGUgPSBsZmlyc3Rfbm9kZShSYW5nZVRibEVudHJ5LCBsYyk7Ci0KLQkJcm9vdC0+c2ltcGxl X3J0ZV9hcnJheVtydGkrK10gPSBydGU7Ci0JfQotCi0JLyoKIAkgKiBJZiB0aGVyZSB3YXMg YSBGT1IgW0tFWV0gVVBEQVRFL1NIQVJFIGNsYXVzZSwgdGhlIExvY2tSb3dzIG5vZGUgd2ls bAogCSAqIGhhdmUgZGVhbHQgd2l0aCBmZXRjaGluZyBub24tbG9ja2VkIG1hcmtlZCByb3dz LCBlbHNlIHdlIG5lZWQgdG8gaGF2ZQogCSAqIE1vZGlmeVRhYmxlIGRvIHRoYXQuCkBAIC0x NjI5LDYgKzE0MTIsMTIgQEAgaW5oZXJpdGFuY2VfcGxhbm5lcihQbGFubmVySW5mbyAqcm9v dCkKICAqIChpbmhlcml0YW5jZV9wbGFubmVyIHdpbGwgY3JlYXRlIGEgc2luZ2xlIE1vZGlm eVRhYmxlIG5vZGUgY292ZXJpbmcgYWxsIHRoZQogICogdGFyZ2V0IHRhYmxlcy4pCiAgKgor ICogSWYgbm9uLU5VTEwsIHBsYW5uZWRfcmVsIGlzIGEgUmVsT3B0SW5mbyBjb250YWluaW5n IHBhdGhzIGZvciB0aGUgcXVlcnkncworICogdG9wLWxldmVsIGpvaW5yZWwsIHdoaWNoIHRo ZSBjYWxsZXIgcHJvZHVjZWQgYnkgaXRzZWxmLiAgSW4gdGhhdCBjYXNlLCB0aGlzCisgKiBm dW5jdGlvbiBvbmx5IG5lZWRzIHRvIGFkanVzdCB0aGUgdGFyZ2V0bGlzdCBvZiBpdHMgY2hl YXBlc3RfdG90YWxfcGF0aC4KKyAqIFRoZSBvbmx5IGNhbGxlciB0aGF0IG1heSBwYXNzIHN1 Y2ggYSBSZWxPcHRJbmZvIGN1cnJlbnRseSBpcworICogaW5oZXJpdGFuY2VfcGxhbm5lci4K KyAqCiAgKiB0dXBsZV9mcmFjdGlvbiBpcyB0aGUgZnJhY3Rpb24gb2YgdHVwbGVzIHdlIGV4 cGVjdCB3aWxsIGJlIHJldHJpZXZlZC4KICAqIHR1cGxlX2ZyYWN0aW9uIGlzIGludGVycHJl dGVkIGFzIGZvbGxvd3M6CiAgKgkgIDA6IGV4cGVjdCBhbGwgdHVwbGVzIHRvIGJlIHJldHJp ZXZlZCAobm9ybWFsIGNhc2UpCkBAIC0xNjQ3LDYgKzE0MzYsNyBAQCBpbmhlcml0YW5jZV9w bGFubmVyKFBsYW5uZXJJbmZvICpyb290KQogICovCiBzdGF0aWMgdm9pZAogZ3JvdXBpbmdf cGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwgYm9vbCBpbmhlcml0YW5jZV91cGRhdGUsCisJ CQkJIFJlbE9wdEluZm8gKnBsYW5uZWRfcmVsLAogCQkJCSBkb3VibGUgdHVwbGVfZnJhY3Rp b24pCiB7CiAJUXVlcnkJICAgKnBhcnNlID0gcm9vdC0+cGFyc2U7CkBAIC0xNjU5LDcgKzE0 NDksNyBAQCBncm91cGluZ19wbGFubmVyKFBsYW5uZXJJbmZvICpyb290LCBib29sIGluaGVy aXRhbmNlX3VwZGF0ZSwKIAlMaXN0CSAgICpmaW5hbF90YXJnZXRzOwogCUxpc3QJICAgKmZp bmFsX3RhcmdldHNfY29udGFpbl9zcmZzOwogCWJvb2wJCWZpbmFsX3RhcmdldF9wYXJhbGxl bF9zYWZlOwotCVJlbE9wdEluZm8gKmN1cnJlbnRfcmVsOworCVJlbE9wdEluZm8gKmN1cnJl bnRfcmVsID0gcGxhbm5lZF9yZWw7CiAJUmVsT3B0SW5mbyAqZmluYWxfcmVsOwogCUxpc3RD ZWxsICAgKmxjOwogCkBAIC0xNjk5LDYgKzE0ODksNyBAQCBncm91cGluZ19wbGFubmVyKFBs YW5uZXJJbmZvICpyb290LCBib29sIGluaGVyaXRhbmNlX3VwZGF0ZSwKIAkJICogc3BlY2lh bCB3b3JrIGZvciByZWN1cnNpdmUgdW5pb25zIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgog CQkgKiBwbGFuX3NldF9vcGVyYXRpb25zLgogCQkgKi8KKwkJQXNzZXJ0KGN1cnJlbnRfcmVs ID09IE5VTEwpOwogCQljdXJyZW50X3JlbCA9IHBsYW5fc2V0X29wZXJhdGlvbnMocm9vdCk7 CiAKIAkJLyoKQEAgLTE4NzgsOCArMTY2OSw5IEBAIGdyb3VwaW5nX3BsYW5uZXIoUGxhbm5l ckluZm8gKnJvb3QsIGJvb2wgaW5oZXJpdGFuY2VfdXBkYXRlLAogCQkgKiBXZSBhbHNvIGdl bmVyYXRlIChpbiBzdGFuZGFyZF9xcF9jYWxsYmFjaykgcGF0aGtleSByZXByZXNlbnRhdGlv bnMKIAkJICogb2YgdGhlIHF1ZXJ5J3Mgc29ydCBjbGF1c2UsIGRpc3RpbmN0IGNsYXVzZSwg ZXRjLgogCQkgKi8KLQkJY3VycmVudF9yZWwgPSBxdWVyeV9wbGFubmVyKHJvb3QsIHRsaXN0 LAotCQkJCQkJCQkJc3RhbmRhcmRfcXBfY2FsbGJhY2ssICZxcF9leHRyYSk7CisJCWlmIChj dXJyZW50X3JlbCA9PSBOVUxMKQorCQkJY3VycmVudF9yZWwgPSBxdWVyeV9wbGFubmVyKHJv b3QsIHRsaXN0LAorCQkJCQkJCQkJCXN0YW5kYXJkX3FwX2NhbGxiYWNrLCAmcXBfZXh0cmEp OwogCiAJCS8qCiAJCSAqIENvbnZlcnQgdGhlIHF1ZXJ5J3MgcmVzdWx0IHRsaXN0IGludG8g UGF0aFRhcmdldCBmb3JtYXQuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cHJlcC9wcmVwam9pbnRyZWUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBq b2ludHJlZS5jCmluZGV4IGNkNmUxMTkwNGUuLjc4YmFlYzAwZGMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jCkBAIC05MTcsNyArOTE3LDYgQEAg cHVsbF91cF9zaW1wbGVfc3VicXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmp0bm9k ZSwgUmFuZ2VUYmxFbnRyeSAqcnRlLAogCXN1YnJvb3QtPmdyb3VwaW5nX21hcCA9IE5VTEw7 CiAJc3Vicm9vdC0+bWlubWF4X2FnZ3MgPSBOSUw7CiAJc3Vicm9vdC0+cXVhbF9zZWN1cml0 eV9sZXZlbCA9IDA7Ci0Jc3Vicm9vdC0+aW5oVGFyZ2V0S2luZCA9IElOSEtJTkRfTk9ORTsK IAlzdWJyb290LT5oYXNSZWN1cnNpb24gPSBmYWxzZTsKIAlzdWJyb290LT53dF9wYXJhbV9p ZCA9IC0xOwogCXN1YnJvb3QtPm5vbl9yZWN1cnNpdmVfcGF0aCA9IE5VTEw7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCmluZGV4IGQ1NzIwNTE4YTguLmVmMWY5 Nzg4ODkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlv bi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCkBAIC0y MjUzLDggKzIyNTMsMzkgQEAgYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKE5vZGUg Km5vZGUsCiAJCQkJCQkJCQkJCSAgY29udGV4dC0+YXBwaW5mb3MpOwogCQlyZXR1cm4gKE5v ZGUgKikgcGh2OwogCX0KKworCS8qCisJICogVGhpcyBpcyBuZWVkZWQsIGJlY2F1c2UgaW5o ZXJpdGFuY2VfbWFrZV9yZWxfZnJvbV9qb2lubGlzdCBuZWVkcyB0bworCSAqIHRyYW5zbGF0 ZSByb290LT5qb2luX2luZm9fbGlzdCBleGVjdXRpbmcgbWFrZV9yZWxfZnJvbV9qb2lubGlz dCBmb3IgYQorCSAqIGdpdmVuIGNoaWxkLgorCSAqLworCWlmIChJc0Eobm9kZSwgU3BlY2lh bEpvaW5JbmZvKSkKKwl7CisJCVNwZWNpYWxKb2luSW5mbyAqb2xkaW5mbyA9IChTcGVjaWFs Sm9pbkluZm8gKikgbm9kZTsKKwkJU3BlY2lhbEpvaW5JbmZvICpuZXdpbmZvID0gbWFrZU5v ZGUoU3BlY2lhbEpvaW5JbmZvKTsKKworCQltZW1jcHkobmV3aW5mbywgb2xkaW5mbywgc2l6 ZW9mKFNwZWNpYWxKb2luSW5mbykpOworCQluZXdpbmZvLT5taW5fbGVmdGhhbmQgPSBhZGp1 c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPm1pbl9sZWZ0aGFuZCwKKwkJCQkJCQkJCQkJCQlj b250ZXh0LT5uYXBwaW5mb3MsCisJCQkJCQkJCQkJCQkJY29udGV4dC0+YXBwaW5mb3MpOwor CQluZXdpbmZvLT5taW5fcmlnaHRoYW5kID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhvbGRpbmZv LT5taW5fcmlnaHRoYW5kLAorCQkJCQkJCQkJCQkJCSBjb250ZXh0LT5uYXBwaW5mb3MsCisJ CQkJCQkJCQkJCQkJIGNvbnRleHQtPmFwcGluZm9zKTsKKwkJbmV3aW5mby0+c3luX2xlZnRo YW5kID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhvbGRpbmZvLT5zeW5fbGVmdGhhbmQsCisJCQkJ CQkJCQkJCQkJY29udGV4dC0+bmFwcGluZm9zLAorCQkJCQkJCQkJCQkJCWNvbnRleHQtPmFw cGluZm9zKTsKKwkJbmV3aW5mby0+c3luX3JpZ2h0aGFuZCA9IGFkanVzdF9jaGlsZF9yZWxp ZHMob2xkaW5mby0+c3luX3JpZ2h0aGFuZCwKKwkJCQkJCQkJCQkJCQkgY29udGV4dC0+bmFw cGluZm9zLAorCQkJCQkJCQkJCQkJCSBjb250ZXh0LT5hcHBpbmZvcyk7CisJCW5ld2luZm8t PnNlbWlfcmhzX2V4cHJzID0KKwkJCQkJKExpc3QgKikgZXhwcmVzc2lvbl90cmVlX211dGF0 b3IoKE5vZGUgKikKKwkJCQkJCQkJCQkJCQkgb2xkaW5mby0+c2VtaV9yaHNfZXhwcnMsCisJ CQkJCQkJCQkJCQkJIGFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvciwKKwkJCQkJCQkJ CQkJCQkgKHZvaWQgKikgY29udGV4dCk7CisJCXJldHVybiAoTm9kZSAqKSBuZXdpbmZvOwor CX0KKwogCS8qIFNob3VsZG4ndCBuZWVkIHRvIGhhbmRsZSBwbGFubmVyIGF1eGlsaWFyeSBu b2RlcyBoZXJlICovCi0JQXNzZXJ0KCFJc0Eobm9kZSwgU3BlY2lhbEpvaW5JbmZvKSk7CiAJ QXNzZXJ0KCFJc0Eobm9kZSwgQXBwZW5kUmVsSW5mbykpOwogCUFzc2VydCghSXNBKG5vZGUs IFBsYWNlSG9sZGVySW5mbykpOwogCUFzc2VydCghSXNBKG5vZGUsIE1pbk1heEFnZ0luZm8p KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCAwYzg4YzkwZGU0 Li5lZDA5NTNmOWUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w bGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBA IC0xMjY0LDM2ICsxMjY0LDYgQEAgZ2V0X3JlbGF0aW9uX2NvbnN0cmFpbnRzKFBsYW5uZXJJ bmZvICpyb290LAogCQl9CiAJfQogCi0JLyoKLQkgKiBBcHBlbmQgcGFydGl0aW9uIHByZWRp Y2F0ZXMsIGlmIGFueS4KLQkgKgotCSAqIEZvciBzZWxlY3RzLCBwYXJ0aXRpb24gcHJ1bmlu ZyB1c2VzIHRoZSBwYXJlbnQgdGFibGUncyBwYXJ0aXRpb24gYm91bmQKLQkgKiBkZXNjcmlw dG9yLCBpbnN0ZWFkIG9mIGNvbnN0cmFpbnQgZXhjbHVzaW9uIHdoaWNoIGlzIGRyaXZlbiBi eSB0aGUKLQkgKiBpbmRpdmlkdWFsIHBhcnRpdGlvbidzIHBhcnRpdGlvbiBjb25zdHJhaW50 LgotCSAqLwotCWlmIChlbmFibGVfcGFydGl0aW9uX3BydW5pbmcgJiYgcm9vdC0+cGFyc2Ut PmNvbW1hbmRUeXBlICE9IENNRF9TRUxFQ1QpCi0JewotCQlMaXN0CSAgICpwY3F1YWwgPSBS ZWxhdGlvbkdldFBhcnRpdGlvblF1YWwocmVsYXRpb24pOwotCi0JCWlmIChwY3F1YWwpCi0J CXsKLQkJCS8qCi0JCQkgKiBSdW4gdGhlIHBhcnRpdGlvbiBxdWFscyB0aHJvdWdoIGNvbnN0 LXNpbXBsaWZpY2F0aW9uIHNpbWlsYXIgdG8KLQkJCSAqIGNoZWNrIGNvbnN0cmFpbnRzLiAg V2Ugc2tpcCBjYW5vbmljYWxpemVfcXVhbCwgdGhvdWdoLCBiZWNhdXNlCi0JCQkgKiBwYXJ0 aXRpb24gcXVhbHMgc2hvdWxkIGJlIGluIGNhbm9uaWNhbCBmb3JtIGFscmVhZHk7IGFsc28s Ci0JCQkgKiBzaW5jZSB0aGUgcXVhbCBpcyBpbiBpbXBsaWNpdC1BTkQgZm9ybWF0LCB3ZSdk IGhhdmUgdG8KLQkJCSAqIGV4cGxpY2l0bHkgY29udmVydCBpdCB0byBleHBsaWNpdC1BTkQg Zm9ybWF0IGFuZCBiYWNrIGFnYWluLgotCQkJICovCi0JCQlwY3F1YWwgPSAoTGlzdCAqKSBl dmFsX2NvbnN0X2V4cHJlc3Npb25zKHJvb3QsIChOb2RlICopIHBjcXVhbCk7Ci0KLQkJCS8q IEZpeCBWYXJzIHRvIGhhdmUgdGhlIGRlc2lyZWQgdmFybm8gKi8KLQkJCWlmICh2YXJubyAh PSAxKQotCQkJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIHBjcXVhbCwgMSwgdmFybm8sIDAp OwotCi0JCQlyZXN1bHQgPSBsaXN0X2NvbmNhdChyZXN1bHQsIHBjcXVhbCk7Ci0JCX0KLQl9 Ci0KIAloZWFwX2Nsb3NlKHJlbGF0aW9uLCBOb0xvY2spOwogCiAJcmV0dXJuIHJlc3VsdDsK QEAgLTE0MjAsMzEgKzEzOTAsMTUgQEAgcmVsYXRpb25fZXhjbHVkZWRfYnlfY29uc3RyYWlu dHMoUGxhbm5lckluZm8gKnJvb3QsCiAJc3dpdGNoIChjb25zdHJhaW50X2V4Y2x1c2lvbikK IAl7CiAJCWNhc2UgQ09OU1RSQUlOVF9FWENMVVNJT05fT0ZGOgotCi0JCQkvKgotCQkJICog RG9uJ3QgcHJ1bmUgaWYgZmVhdHVyZSB0dXJuZWQgb2ZmIC0tIGV4Y2VwdCBpZiB0aGUgcmVs YXRpb24gaXMKLQkJCSAqIGEgcGFydGl0aW9uLiAgV2hpbGUgcGFydHBydW5lLmMtc3R5bGUg cGFydGl0aW9uIHBydW5pbmcgaXMgbm90Ci0JCQkgKiB5ZXQgaW4gdXNlIGZvciBhbGwgY2Fz ZXMgKHVwZGF0ZS9kZWxldGUgaXMgbm90IGhhbmRsZWQpLCBpdAotCQkJICogd291bGQgYmUg YSBVSSBob3Jyb3IgdG8gdXNlIGRpZmZlcmVudCB1c2VyLXZpc2libGUgY29udHJvbHMKLQkJ CSAqIGRlcGVuZGluZyBvbiBzdWNoIGEgdm9sYXRpbGUgaW1wbGVtZW50YXRpb24gZGV0YWls LiAgVGhlcmVmb3JlLAotCQkJICogZm9yIHBhcnRpdGlvbmVkIHRhYmxlcyB3ZSB1c2UgZW5h YmxlX3BhcnRpdGlvbl9wcnVuaW5nIHRvCi0JCQkgKiBjb250cm9sIHRoaXMgYmVoYXZpb3Iu Ci0JCQkgKi8KLQkJCWlmIChyb290LT5pbmhUYXJnZXRLaW5kID09IElOSEtJTkRfUEFSVElU SU9ORUQpCi0JCQkJYnJlYWs7CiAJCQlyZXR1cm4gZmFsc2U7CiAKIAkJY2FzZSBDT05TVFJB SU5UX0VYQ0xVU0lPTl9QQVJUSVRJT046CiAKIAkJCS8qCiAJCQkgKiBXaGVuIGNvbnN0cmFp bnRfZXhjbHVzaW9uIGlzIHNldCB0byAncGFydGl0aW9uJyB3ZSBvbmx5IGhhbmRsZQotCQkJ ICogT1RIRVJfTUVNQkVSX1JFTHMsIG9yIEJBU0VSRUxzIGluIGNhc2VzIHdoZXJlIHRoZSBy ZXN1bHQgdGFyZ2V0Ci0JCQkgKiBpcyBhbiBpbmhlcml0YW5jZSBwYXJlbnQgb3IgYSBwYXJ0 aXRpb25lZCB0YWJsZS4KKwkJCSAqIE9USEVSX01FTUJFUl9SRUxzLgogCQkJICovCi0JCQlp ZiAoKHJlbC0+cmVsb3B0a2luZCAhPSBSRUxPUFRfT1RIRVJfTUVNQkVSX1JFTCkgJiYKLQkJ CQkhKHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfQkFTRVJFTCAmJgotCQkJCSAgcm9vdC0+ aW5oVGFyZ2V0S2luZCAhPSBJTkhLSU5EX05PTkUgJiYKLQkJCQkgIHJlbC0+cmVsaWQgPT0g cm9vdC0+cGFyc2UtPnJlc3VsdFJlbGF0aW9uKSkKKwkJCWlmIChyZWwtPnJlbG9wdGtpbmQg IT0gUkVMT1BUX09USEVSX01FTUJFUl9SRUwpCiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJYnJl YWs7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmggYi9zcmMv aW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oCmluZGV4IDMyYWMzMzE1YTQuLjI5MzM5ZDZjNzIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbm9kZXMvcmVsYXRpb24uaApAQCAtMzE5LDkgKzMxOSw2IEBAIHR5cGVkZWYgc3Ry dWN0IFBsYW5uZXJJbmZvCiAJSW5kZXgJCXF1YWxfc2VjdXJpdHlfbGV2ZWw7CS8qIG1pbmlt dW0gc2VjdXJpdHlfbGV2ZWwgZm9yIHF1YWxzICovCiAJLyogTm90ZTogcXVhbF9zZWN1cml0 eV9sZXZlbCBpcyB6ZXJvIGlmIHRoZXJlIGFyZSBubyBzZWN1cml0eVF1YWxzICovCiAKLQlJ bmhlcml0YW5jZUtpbmQgaW5oVGFyZ2V0S2luZDsJLyogaW5kaWNhdGVzIGlmIHRoZSB0YXJn ZXQgcmVsYXRpb24gaXMgYW4KLQkJCQkJCQkJCSAqIGluaGVyaXRhbmNlIGNoaWxkIG9yIHBh cnRpdGlvbiBvciBhCi0JCQkJCQkJCQkgKiBwYXJ0aXRpb25lZCB0YWJsZSAqLwogCWJvb2wJ CWhhc0pvaW5SVEVzOwkvKiB0cnVlIGlmIGFueSBSVEVzIGFyZSBSVEVfSk9JTiBraW5kICov CiAJYm9vbAkJaGFzTGF0ZXJhbFJURXM7IC8qIHRydWUgaWYgYW55IFJURXMgYXJlIG1hcmtl ZCBMQVRFUkFMICovCiAJYm9vbAkJaGFzRGVsZXRlZFJURXM7IC8qIHRydWUgaWYgYW55IFJU RSB3YXMgZGVsZXRlZCBmcm9tIGpvaW50cmVlICovCkBAIC0zNDMsNiArMzQwLDIxIEBAIHR5 cGVkZWYgc3RydWN0IFBsYW5uZXJJbmZvCiAKIAkvKiBEb2VzIHRoaXMgcXVlcnkgbW9kaWZ5 IGFueSBwYXJ0aXRpb24ga2V5IGNvbHVtbnM/ICovCiAJYm9vbAkJcGFydENvbHNVcGRhdGVk OworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgc2V0IGR1cmluZyBxdWVy eSBwbGFubmluZyBwb3J0aW9uIG9mIGFuCisJICogaW5oZXJpdGVkIFVQREFURS9ERUVMRVRF IG9wZXJhdGlvbi4KKwkgKi8KKworCS8qIFJUIGluZGV4ZXMgb2YgY2hpbGQgdGFyZ2V0IHJl bHMgKi8KKwlMaXN0CSAgICppbmhfdGFyZ2V0X2NoaWxkX3JlbHM7CisKKwkvKgorCSAqIFJl bE9wdEluZm9zIHJlcHJlc2VudGluZyB0aGUgb3V0cHV0IG9mIG1ha2VfcmVsX2Zyb21fam9p bmxpc3QoKSBmb3IKKwkgKiBhIGVhY2ggY2hpbGQgcmVsIGluIHRoZSBhYm92ZSBsaXN0LCBh Y3RpbmcgYXMgdGhlIHRhcmdldCByZWxhdGlvbiBpbgorCSAqIHBsYWNlIG9mIHRoZSBvcmln aW5hbCBwYXJlbnQgdGFyZ2V0IHJlbGF0aW9uLgorCSAqLworCUxpc3QJICAgKmluaF90YXJn ZXRfY2hpbGRfam9pbnJlbHM7CiB9IFBsYW5uZXJJbmZvOwogCiAKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4ub3V0IGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fam9pbi5vdXQKaW5kZXggM2JhM2FhZjJkOC4u YTUzOTI4MDg1MSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRp b25fam9pbi5vdXQKQEAgLTE3ODEsNyArMTc4MSw3IEBAIFdIRVJFIEVYSVNUUyAoCiAgICAg ICAgICAgICAgICBGaWx0ZXI6IChjIElTIE5VTEwpCiAgICAgICAgICAtPiAgTmVzdGVkIExv b3AKICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBpbnQ0X3RibAotICAgICAgICAg ICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gc3NfMQorICAgICAgICAgICAgICAgLT4gIFN1 YnF1ZXJ5IFNjYW4gb24gc3MKICAgICAgICAgICAgICAgICAgICAgIC0+ICBMaW1pdAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDhfdGJsIGludDhf dGJsXzEKICAgIC0+ICBOZXN0ZWQgTG9vcCBTZW1pIEpvaW4KQEAgLTE3ODksNyArMTc4OSw3 IEBAIFdIRVJFIEVYSVNUUyAoCiAgICAgICAgICAgICAgICBGaWx0ZXI6IChjIElTIE5VTEwp CiAgICAgICAgICAtPiAgTmVzdGVkIExvb3AKICAgICAgICAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBpbnQ0X3RibAotICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gc3Nf MgorICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gc3MKICAgICAgICAgICAg ICAgICAgICAgIC0+ICBMaW1pdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGludDhfdGJsIGludDhfdGJsXzIKICgyOCByb3dzKQotLSAKMi4xMS4wCgo= --------------E34CCD0679090A92C6C33EB0 Content-Type: text/plain; charset=UTF-8; name="v5-0003-Lazy-creation-of-RTEs-for-inheritance-children.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v5-0003-Lazy-creation-of-RTEs-for-inheritance-children.patch" RnJvbSA0MmM5Yzg3OWYxNzkzZWExZmI1YTYzMjhlODUzMTM5YTQwY2ZjYzhkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogV2VkLCAxNyBPY3QgMjAxOCAxODoxNDoxMyArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djUgMy82XSBMYXp5IGNyZWF0aW9uIG9mIFJURXMgZm9yIGluaGVyaXRhbmNlIGNoaWxkcmVu CgpDdXJyZW50bHksIGV4cGFuZF9pbmhlcml0ZWRfdGFibGVzIGNhbGxlZCBmcm9tIHN1YnF1 ZXJ5X3BsYW5uZXIgb3BlbnMKYWxsIGluaGVyaXRhbmNlIGNoaWxkIHRhYmxlcyBhbmQgYWRk cyB0aGVtIHRvIHRoZSBxdWVyeSdzIHJhbmdlCnRhYmxlIGFuZCBQbGFubmVySW5mbyBpbiB0 aGUgZm9ybSBvZiBBcHBlbmRSZWxJbmZvJ3MgaW5pdGlhbGx5IGFuZApsYXRlciBSZWxPcHRJ bmZvJ3MuICBGb3IgcGFydGl0aW9uaW5nLCB0aGF0J3MgcHJldHR5IHdhc3RlZnVsLCBiZWNh dXNlCml0J3MgcG9zc2libGUgdG8gZGV0ZXJtaW5lIG9ubHkgdGhlIHBhcnRpdGlvbnMgdGhh dCB3aWxsIG5lZWQgdG8gYmUKc2Nhbm5lZCB1c2luZyBwYXJ0aXRpb24gcHJ1bmluZywgd2hp Y2ggZG9lc24ndCByZXF1aXJlIG9wZW5pbmcgdGhlCnBhcnRpdGlvbnMgdGhlbXNlbHZlcy4g IEhvd2V2ZXIsIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgYWJvdmUKcHJvY2Vzc2luZyBoYXBw ZW5zIGlzIHRvbyBlYXJseSB0byBwZXJmb3JtIHBhcnRpdGlvbiBwcnVuaW5nLgoKVGhpcyBj b21taXQgcmVhcnJhbmdlcyB0aGluZ3Mgd2l0aGluIHRoZSBwbGFubmVyIHNvIHRoYXQgaW5o ZXJpdGFuY2UKY2hpbGQgcmVsYXRpb25zIGNhbiBiZSBhZGRlZCB0byB0aGUgUXVlcnkgYW5k IFBsYW5uZXJJbmZvIHdoZW4KcGVmb3JtaW5nIHNldF9hcHBlbmRfcmVsX3NpemUgb24gdGhl IHBhcmVudCB0YWJsZS4gIEFsdGhvdWdoIHRoZSBsYXRlCmluaXRpYWxpemF0aW9uIGFwcHJv YWNoIG9ubHkgYmVuZWZpdHMgdGhlIHBhcnRpdGlvbmluZyBjYXNlLCBpdCBzZWVtcwp1bmRl c2lyYWJsZSB0byBkbyBpdCBvbmx5IGZvciBwYXJ0aXRpb25lZCB0YWJsZXMsIGJlY2F1c2Ug aXQgbWVhbnMKYWRkaW5nIGNvZGUgdG8gaGFuZGxlIHBhcnRpdGlvbnMgc3BlY2lhbGx5IGF0 IHZhcmlvdXMgcGxhY2VzIHdpdGhpbgp0aGUgcGxhbm5lci4gIFNvLCAqYWxsKiBpbmhlcml0 YW5jZSBwYXJlbnQgdGFibGVzIGFyZSBleHBhbmRlZCBhdApzZXRfYXBwZW5kX3JlbF9zaXpl LiAgQWxsIHVucHJ1bmVkIHBhcnRpdGlvbnMgYXJlIGFkZGVkIHRvIFF1ZXJ5CmluIHRoZSBm b3JtIG9mIHRoZWlyIFJhbmdlVGJsRW50cnkncyBhZGRlZCB0byB0aGUgcmFuZ2UgdGFibGUg YW5kIHRvClBsYW5uZXJJbmZvIGluIHRoZSBmb3JtIG9mIGFuIEFwcGVuZFJlbEluZm8gYW5k IGEgUmVsT3B0SW5mbyBmb3IgZWFjaC4KCkZvciBwYXJ0aXRpb25pbmcsIGFsdGhvdWdoIHdl IGRvbid0IGNyZWF0ZSBhIFJhbmdlVGJsRW50cnkgYW5kClJlbE9wdEluZm8gZm9yIHBydW5l ZCBwYXJ0aXRpb25zIGF0IHNldF9hcHBlbmRfcmVsX3NpemUgdGltZSwKcGFydGl0aW9ud2lz ZSBqb2luIGNvZGUgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgZXZlbiB0aG91Z2ggcGFydGl0 aW9ucwptYXkgaGF2ZSBiZWVuIHBydW5lZCwgdGhleSdkIHN0aWxsIG93biBhIFJlbE9wdElu Zm8gdG8gaGFuZGxlIHRoZQpvdXRlciBqb2luIGNhc2Ugd2hlcmUgdGhlIHBydW5lZCBwYXJ0 aXRpb24gYXBwZWFycyBvbiB0aGUgbnVsbGFibGUKc2lkZSBvZiBqb2luLiAgUGFydGl0aW9u d2lzZSBqb2luIGNvZGUgZGVhbHMgd2l0aCB0aGF0IGJ5IGFsbG9jYXRpbmcKZHVtbXkgUmVs T3B0SW5mb3MgZm9yIHBydW5lZCBwYXJ0aXRpb25zIHRoYXQgYXJlIGJhc2VkIG1vc3RseSBv bgp0aGVpciBwYXJlbnQncyBwcm9wZXJ0aWVzLgoKVGhlcmUgYXJlIHNvbWUgcmVncmVzc2lv biB0ZXN0IGRpZmZzOgoKIDEuIENhdXNlZCBieSB0aGUgZmFjdCB0aGF0IHdlIG5vIGxvbmdl ciBhbGxvY2F0ZSBhIGR1cGxpY2F0ZSBSVAogICAgZW50cnkgZm9yIGEgcGFydGl0aW9uZWQg dGFibGUgaW4gaXRzIHJvbGUgYXMgY2hpbGQgYW5kIGFsc28gdGhhdAogICAgdGhlIGluZGl2 aWR1YWwgcGFydGl0aW9uIFJUIGVudHJpZXMgYXJlIG5vdyBjcmVhdGVkIGluIHRoZSBvcmRl cgogICAgaW4gd2hpY2ggdGhlaXIgcGFyZW50J3MgYXJlIHByb2Nlc3NlZCwgd2hlcmVhcyBw cmV2aW91c2x5IHRoZXknZAogICAgYmUgYWRkZWQgdG8gdGhlIHJhbmdlIHRhYmxlIGluIHRo ZSBvcmRlciBvZiBkZXB0aC1maXJzdCBleHBhbnNpb24KICAgIG9mIGluaGVyaXRhbmNlIHRy ZWUuCgogMi4gVGhvc2UgaW4gcG9zdGdyZXNfZmR3Lm91dCBhcmUgY2F1c2VkIGJ5IHRoZSBm YWN0IHRoYXQganVuayBjb2x1bW5zCiAgICByZXF1aXJlZCBmb3Igcm93IG1hcmtpbmcgYXJl IGFkZGVkIHRvIHJlbHRhcmdldC0+ZXhwcnMgbGF0ZXIgdGhhbgogICAgdXNlciBjb2x1bW5z LCBiZWNhdXNlIHRoZSByb3cgbWFya2luZyBqdW5rIGNvbHVtbnMgYXJlbnQgYWRkZWQKICAg IHVudGlsIGFmdGVyIHRoZSBpbmhlcml0YW5jZSBpcyBleHBhbmRlZCB3aGljaCBhcyBvZiB0 aGlzIGNvbW1pdAogICAgaXMgbGF0ZXIgdGhhbiBpdCB1c2VkIHRvIGJlLgotLS0KIGNvbnRy aWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgICAgfCAgMzIgKy0K IHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgICAgICAgICAgICAgfCAy MDQgKy0tLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jICAgICAg ICAgICAgIHwgIDYyICsrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4u YyAgICAgICAgICAgIHwgIDU4IC0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bmVyLmMgICAgICAgICAgICAgIHwgIDU0ICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9zZXRyZWZzLmMgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9iYWNrZW5kL29wdGltaXpl ci9wcmVwL3ByZXB0bGlzdC5jICAgICAgICAgICAgfCAgMTEgKy0KIHNyYy9iYWNrZW5kL29w dGltaXplci9wcmVwL3ByZXB1bmlvbi5jICAgICAgICAgICAgfCA4MTggKysrKysrKysrKysr KysrLS0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvTWFrZWZpbGUgICAgICAg ICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5j ICAgICAgICAgICAgICB8ICA0MSArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVs bm9kZS5jICAgICAgICAgICAgICB8ICA4MCArLS0KIHNyYy9iYWNrZW5kL3BhcnRpdGlvbmlu Zy9wYXJ0cHJ1bmUuYyAgICAgICAgICAgICAgfCAgNDMgKy0KIHNyYy9pbmNsdWRlL25vZGVz L3JlbGF0aW9uLmggICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwogc3JjL2luY2x1ZGUv b3B0aW1pemVyL3BhdGhub2RlLmggICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5j bHVkZS9vcHRpbWl6ZXIvcGxhbmNhdC5oICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBz cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcHJlcC5oICAgICAgICAgICAgICAgICAgICAgIHwgIDE1 ICstCiBzcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmggICAgICAgICAgICAg IHwgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0ICAgICAgICAg ICAgICAgIHwgIDIyICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9h Z2dyZWdhdGUub3V0IHwgICA0ICstCiAxOSBmaWxlcyBjaGFuZ2VkLCA4MzQgaW5zZXJ0aW9u cygrKSwgNjMxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9l eHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4IDIxYTJlZjVhZDMuLmM5MzBiZjdiYWIg MTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zk dy5vdXQKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3 Lm91dApAQCAtNzA4NSwxNSArNzA4NSwxNSBAQCBzZWxlY3QgKiBmcm9tIGJhciB3aGVyZSBm MSBpbiAoc2VsZWN0IGYxIGZyb20gZm9vKSBmb3IgdXBkYXRlOwogICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0OiBiYXIyLmYxLCBiYXIyLmYyLCBiYXIyLmN0aWQsIGJhcjIuKiwgYmFy Mi50YWJsZW9pZAogICAgICAgICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGYx LCBmMiwgZjMsIGN0aWQgRlJPTSBwdWJsaWMubG9jdDIgRk9SIFVQREFURQogICAgICAgICAg LT4gIEhhc2gKLSAgICAgICAgICAgICAgIE91dHB1dDogZm9vLmN0aWQsIGZvby4qLCBmb28u dGFibGVvaWQsIGZvby5mMQorICAgICAgICAgICAgICAgT3V0cHV0OiBmb28uZjEsIGZvby5j dGlkLCBmb28uKiwgZm9vLnRhYmxlb2lkCiAgICAgICAgICAgICAgICAtPiAgSGFzaEFnZ3Jl Z2F0ZQotICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmb28uY3RpZCwgZm9vLiosIGZv by50YWJsZW9pZCwgZm9vLmYxCisgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGZvby5m MSwgZm9vLmN0aWQsIGZvby4qLCBmb28udGFibGVvaWQKICAgICAgICAgICAgICAgICAgICAg IEdyb3VwIEtleTogZm9vLmYxCiAgICAgICAgICAgICAgICAgICAgICAtPiAgQXBwZW5kCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmZvbwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmb28uY3RpZCwgZm9v LiosIGZvby50YWJsZW9pZCwgZm9vLmYxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IGZvby5mMSwgZm9vLmN0aWQsIGZvby4qLCBmb28udGFibGVvaWQKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBGb3JlaWduIFNjYW4gb24gcHVibGljLmZv bzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogZm9vMi5jdGlk LCBmb28yLiosIGZvbzIudGFibGVvaWQsIGZvbzIuZjEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogZm9vMi5mMSwgZm9vMi5jdGlkLCBmb28yLiosIGZvbzIu dGFibGVvaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6 IFNFTEVDVCBmMSwgZjIsIGYzLCBjdGlkIEZST00gcHVibGljLmxvY3QxCiAoMjMgcm93cykK IApAQCAtNzEyMywxNSArNzEyMywxNSBAQCBzZWxlY3QgKiBmcm9tIGJhciB3aGVyZSBmMSBp biAoc2VsZWN0IGYxIGZyb20gZm9vKSBmb3Igc2hhcmU7CiAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IGJhcjIuZjEsIGJhcjIuZjIsIGJhcjIuY3RpZCwgYmFyMi4qLCBiYXIyLnRh Ymxlb2lkCiAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgZjEsIGYy LCBmMywgY3RpZCBGUk9NIHB1YmxpYy5sb2N0MiBGT1IgU0hBUkUKICAgICAgICAgIC0+ICBI YXNoCi0gICAgICAgICAgICAgICBPdXRwdXQ6IGZvby5jdGlkLCBmb28uKiwgZm9vLnRhYmxl b2lkLCBmb28uZjEKKyAgICAgICAgICAgICAgIE91dHB1dDogZm9vLmYxLCBmb28uY3RpZCwg Zm9vLiosIGZvby50YWJsZW9pZAogICAgICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUK LSAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogZm9vLmN0aWQsIGZvby4qLCBmb28udGFi bGVvaWQsIGZvby5mMQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmb28uZjEsIGZv by5jdGlkLCBmb28uKiwgZm9vLnRhYmxlb2lkCiAgICAgICAgICAgICAgICAgICAgICBHcm91 cCBLZXk6IGZvby5mMQogICAgICAgICAgICAgICAgICAgICAgLT4gIEFwcGVuZAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5mb28KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogZm9vLmN0aWQsIGZvby4qLCBm b28udGFibGVvaWQsIGZvby5mMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T3V0cHV0OiBmb28uZjEsIGZvby5jdGlkLCBmb28uKiwgZm9vLnRhYmxlb2lkCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5mb28yCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGZvbzIuY3RpZCwgZm9v Mi4qLCBmb28yLnRhYmxlb2lkLCBmb28yLmYxCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IGZvbzIuZjEsIGZvbzIuY3RpZCwgZm9vMi4qLCBmb28yLnRhYmxl b2lkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxF Q1QgZjEsIGYyLCBmMywgY3RpZCBGUk9NIHB1YmxpYy5sb2N0MQogKDIzIHJvd3MpCiAKQEAg LTcxNjAsMTUgKzcxNjAsMTUgQEAgdXBkYXRlIGJhciBzZXQgZjIgPSBmMiArIDEwMCB3aGVy ZSBmMSBpbiAoc2VsZWN0IGYxIGZyb20gZm9vKTsKICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuYmFyCiAgICAgICAgICAgICAgICBPdXRwdXQ6IGJhci5mMSwgYmFyLmYyLCBi YXIuY3RpZAogICAgICAgICAgLT4gIEhhc2gKLSAgICAgICAgICAgICAgIE91dHB1dDogZm9v LmN0aWQsIGZvby4qLCBmb28udGFibGVvaWQsIGZvby5mMQorICAgICAgICAgICAgICAgT3V0 cHV0OiBmb28uZjEsIGZvby5jdGlkLCBmb28udGFibGVvaWQsIGZvby4qCiAgICAgICAgICAg ICAgICAtPiAgSGFzaEFnZ3JlZ2F0ZQotICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBm b28uY3RpZCwgZm9vLiosIGZvby50YWJsZW9pZCwgZm9vLmYxCisgICAgICAgICAgICAgICAg ICAgICBPdXRwdXQ6IGZvby5mMSwgZm9vLmN0aWQsIGZvby50YWJsZW9pZCwgZm9vLioKICAg ICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTogZm9vLmYxCiAgICAgICAgICAgICAgICAg ICAgICAtPiAgQXBwZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmZvbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0 cHV0OiBmb28uY3RpZCwgZm9vLiosIGZvby50YWJsZW9pZCwgZm9vLmYxCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGZvby5mMSwgZm9vLmN0aWQsIGZvby50 YWJsZW9pZCwgZm9vLioKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBGb3JlaWdu IFNjYW4gb24gcHVibGljLmZvbzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogZm9vMi5jdGlkLCBmb28yLiosIGZvbzIudGFibGVvaWQsIGZvbzIuZjEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogZm9vMi5mMSwgZm9vMi5j dGlkLCBmb28yLnRhYmxlb2lkLCBmb28yLioKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBmMSwgZjIsIGYzLCBjdGlkIEZST00gcHVibGlj LmxvY3QxCiAgICAtPiAgSGFzaCBKb2luCiAgICAgICAgICBPdXRwdXQ6IGJhcjIuZjEsIChi YXIyLmYyICsgMTAwKSwgYmFyMi5mMywgYmFyMi5jdGlkLCBmb28uY3RpZCwgZm9vLiosIGZv by50YWJsZW9pZApAQCAtNzE3OCwxNSArNzE3OCwxNSBAQCB1cGRhdGUgYmFyIHNldCBmMiA9 IGYyICsgMTAwIHdoZXJlIGYxIGluIChzZWxlY3QgZjEgZnJvbSBmb28pOwogICAgICAgICAg ICAgICAgT3V0cHV0OiBiYXIyLmYxLCBiYXIyLmYyLCBiYXIyLmYzLCBiYXIyLmN0aWQKICAg ICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBmMSwgZjIsIGYzLCBjdGlkIEZST00g cHVibGljLmxvY3QyIEZPUiBVUERBVEUKICAgICAgICAgIC0+ICBIYXNoCi0gICAgICAgICAg ICAgICBPdXRwdXQ6IGZvby5jdGlkLCBmb28uKiwgZm9vLnRhYmxlb2lkLCBmb28uZjEKKyAg ICAgICAgICAgICAgIE91dHB1dDogZm9vLmYxLCBmb28uY3RpZCwgZm9vLnRhYmxlb2lkLCBm b28uKgogICAgICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKLSAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogZm9vLmN0aWQsIGZvby4qLCBmb28udGFibGVvaWQsIGZvby5mMQor ICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmb28uZjEsIGZvby5jdGlkLCBmb28udGFi bGVvaWQsIGZvby4qCiAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IGZvby5mMQog ICAgICAgICAgICAgICAgICAgICAgLT4gIEFwcGVuZAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5mb28KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE91dHB1dDogZm9vLmN0aWQsIGZvby4qLCBmb28udGFibGVvaWQsIGZv by5mMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmb28uZjEs IGZvby5jdGlkLCBmb28udGFibGVvaWQsIGZvby4qCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5mb28yCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPdXRwdXQ6IGZvbzIuY3RpZCwgZm9vMi4qLCBmb28yLnRhYmxl b2lkLCBmb28yLmYxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IGZvbzIuZjEsIGZvbzIuY3RpZCwgZm9vMi50YWJsZW9pZCwgZm9vMi4qCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgZjEsIGYyLCBmMywg Y3RpZCBGUk9NIHB1YmxpYy5sb2N0MQogKDM5IHJvd3MpCiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9hbGxwYXRocy5jCmluZGV4IDhkZThkMzgzZjkuLjZlZTgwMGQ4NGEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtNDQsNyArNDQsNiBAQAog I2luY2x1ZGUgIm9wdGltaXplci92YXIuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY2xh dXNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgotI2luY2x1ZGUgInBhcnRp dGlvbmluZy9wYXJ0cHJ1bmUuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5o IgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogCkBAIC05NDMsOCArOTQyLDYgQEAg c2V0X2FwcGVuZF9yZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs LAogCWRvdWJsZQkgICAqcGFyZW50X2F0dHJzaXplczsKIAlpbnQJCQluYXR0cnM7CiAJTGlz dENlbGwgICAqbDsKLQlSZWxpZHMJCWxpdmVfY2hpbGRyZW4gPSBOVUxMOwotCWJvb2wJCWRp ZF9wcnVuaW5nID0gZmFsc2U7CiAKIAkvKiBHdWFyZCBhZ2FpbnN0IHN0YWNrIG92ZXJmbG93 IGR1ZSB0byBvdmVybHkgZGVlcCBpbmhlcml0YW5jZSB0cmVlLiAqLwogCWNoZWNrX3N0YWNr X2RlcHRoKCk7CkBAIC05NTIsMjkgKzk0OSwyMiBAQCBzZXRfYXBwZW5kX3JlbF9zaXplKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJQXNzZXJ0KElTX1NJTVBMRV9S RUwocmVsKSk7CiAKIAkvKgotCSAqIEluaXRpYWxpemUgcGFydGl0aW9uZWRfY2hpbGRfcmVs cyB0byBjb250YWluIHRoaXMgUlQgaW5kZXguCi0JICoKLQkgKiBOb3RlIHRoYXQgZHVyaW5n IHRoZSBzZXRfYXBwZW5kX3JlbF9wYXRobGlzdCgpIHBoYXNlLCB3ZSB3aWxsIGJ1YmJsZSB1 cAotCSAqIHRoZSBpbmRleGVzIG9mIHBhcnRpdGlvbmVkIHJlbGF0aW9ucyB0aGF0IGFwcGVh ciBkb3duIGluIHRoZSB0cmVlLCBzbwotCSAqIHRoYXQgd2hlbiB3ZSd2ZSBjcmVhdGVkIFBh dGhzIGZvciBhbGwgdGhlIGNoaWxkcmVuLCB0aGUgcm9vdAotCSAqIHBhcnRpdGlvbmVkIHRh YmxlJ3MgbGlzdCB3aWxsIGNvbnRhaW4gYWxsIHN1Y2ggaW5kZXhlcy4KKwkgKiBBZGQgYXBw ZW5kIGNoaWxkcmVuIHRvIHRoZSBQbGFubmVySW5mby4KIAkgKi8KLQlpZiAocnRlLT5yZWxr aW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCXJlbC0+cGFydGl0aW9uZWRf Y2hpbGRfcmVscyA9IGxpc3RfbWFrZTFfaW50KHJ0aSk7CisJZXhwYW5kX2FwcGVuZF9yZWwo cm9vdCwgcmVsLCBydGUsIHJ0aSk7CisKKwkvKiBEaWQgd2UgZmluZCBvdXQgdGhhdCBub25l IG9mIHRoZSBjaGlsZHJlbiBwcm9kdWNlIGFueSBvdXRwdXQ/ICovCisJaWYgKElTX0RVTU1Z X1JFTChyZWwpKQorCQlyZXR1cm47CiAKIAkvKgotCSAqIElmIHRoZSBwYXJ0aXRpb25lZCBy ZWxhdGlvbiBoYXMgYW55IGJhc2VyZXN0cmljdGluZm8gcXVhbHMgdGhlbiB3ZQotCSAqIGF0 dGVtcHQgdG8gdXNlIHRoZXNlIHF1YWxzIHRvIHBydW5lIGF3YXkgcGFydGl0aW9ucyB0aGF0 IGNhbm5vdAotCSAqIHBvc3NpYmx5IGNvbnRhaW4gYW55IHR1cGxlcyBtYXRjaGluZyB0aGVz ZSBxdWFscy4gIEluIHRoaXMgY2FzZSB3ZSdsbAotCSAqIHN0b3JlIHRoZSByZWxpZHMgb2Yg YWxsIHBhcnRpdGlvbnMgd2hpY2ggY291bGQgcG9zc2libHkgY29udGFpbiBhCi0JICogbWF0 Y2hpbmcgdHVwbGUsIGFuZCBza2lwIGFueXRoaW5nIGVsc2UgaW4gdGhlIGxvb3AgYmVsb3cu CisJICogSWYgd2Ugb25seSBuZWVkIHRvIHNjYW4gdGhlIHBhcmVudCBiZWNhdXNlIGFsbCBv ZiB0aGUgY2hpbGRyZW4gYXJlCisJICogZWl0aGVyIHBydW5lZCBvciBleGNsdWRlZCwgZG8g c28gcmlnaHQgYXdheSBhbmQgcmV0dXJuLgogCSAqLwotCWlmIChlbmFibGVfcGFydGl0aW9u X3BydW5pbmcgJiYKLQkJcnRlLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUgJiYKLQkJcmVsLT5iYXNlcmVzdHJpY3RpbmZvICE9IE5JTCkKKwlpZiAoIXJ0ZS0+aW5o KQogCXsKLQkJbGl2ZV9jaGlsZHJlbiA9IHBydW5lX2FwcGVuZF9yZWxfcGFydGl0aW9ucyhy ZWwpOwotCQlkaWRfcHJ1bmluZyA9IHRydWU7CisJCXNldF9yZWxfc2l6ZShyb290LCByZWws IHJ0aSwgcnRlKTsKKwkJcmV0dXJuOwogCX0KIAogCS8qCkBAIC0xMDE0LDEyICsxMDA0LDgg QEAgc2V0X2FwcGVuZF9yZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsLAogCQlpbnQJCQljaGlsZFJUaW5kZXg7CiAJCVJhbmdlVGJsRW50cnkgKmNoaWxkUlRF OwogCQlSZWxPcHRJbmZvICpjaGlsZHJlbDsKLQkJTGlzdAkgICAqY2hpbGRxdWFsczsKLQkJ SW5kZXgJCWNxX21pbl9zZWN1cml0eTsKLQkJYm9vbAkJaGF2ZV9jb25zdF9mYWxzZV9jcTsK IAkJTGlzdENlbGwgICAqcGFyZW50dmFyczsKIAkJTGlzdENlbGwgICAqY2hpbGR2YXJzOwot CQlMaXN0Q2VsbCAgICpsYzsKIAogCQkvKiBhcHBlbmRfcmVsX2xpc3QgY29udGFpbnMgYWxs IGFwcGVuZCByZWxzOyBpZ25vcmUgb3RoZXJzICovCiAJCWlmIChhcHBpbmZvLT5wYXJlbnRf cmVsaWQgIT0gcGFyZW50UlRpbmRleCkKQEAgLTEwMjcsMTggKzEwMTMsMzEgQEAgc2V0X2Fw cGVuZF9yZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJ CWNoaWxkUlRpbmRleCA9IGFwcGluZm8tPmNoaWxkX3JlbGlkOwogCQljaGlsZFJURSA9IHJv b3QtPnNpbXBsZV9ydGVfYXJyYXlbY2hpbGRSVGluZGV4XTsKKwkJQXNzZXJ0KGNoaWxkUlRF ICE9IE5VTEwpOwogCi0JCS8qCi0JCSAqIFRoZSBjaGlsZCByZWwncyBSZWxPcHRJbmZvIHdh cyBhbHJlYWR5IGNyZWF0ZWQgZHVyaW5nCi0JCSAqIGFkZF9iYXNlX3JlbHNfdG9fcXVlcnku Ci0JCSAqLworCQkvKiBUaGUgY2hpbGQgcmVsJ3MgUmVsT3B0SW5mbyBpcyBjcmVhdGVkIGR1 cmluZyBleHBhbmRfYXBwZW5kX3JlbCAqLwogCQljaGlsZHJlbCA9IGZpbmRfYmFzZV9yZWwo cm9vdCwgY2hpbGRSVGluZGV4KTsKIAkJQXNzZXJ0KGNoaWxkcmVsLT5yZWxvcHRraW5kID09 IFJFTE9QVF9PVEhFUl9NRU1CRVJfUkVMKTsKIAogCQkvKgotCQkgKiBDb3B5L01vZGlmeSB0 YXJnZXRsaXN0LiBFdmVuIGlmIHRoaXMgY2hpbGQgaXMgZGVlbWVkIGVtcHR5LCB3ZSBuZWVk Ci0JCSAqIGl0cyB0YXJnZXRsaXN0IGluIGNhc2UgaXQgZmFsbHMgb24gbnVsbGFibGUgc2lk ZSBpbiBhIGNoaWxkLWpvaW4KLQkJICogYmVjYXVzZSBvZiBwYXJ0aXRpb253aXNlIGpvaW4u CisJCSAqIENoaWxkIHJlbGF0aW9uIG1heSBoYXZlIGJlIG1hcmtlZCBkdW1teSBpZiBidWls ZF9hcHBlbmRfY2hpbGRfcmVsCisJCSAqIGZvdW5kIHNlbGYtY29udHJhZGljdG9yeSBxdWFs cy4KKwkJICovCisJCWlmIChJU19EVU1NWV9SRUwoY2hpbGRyZWwpKQorCQkJY29udGludWU7 CisKKwkJaWYgKHJlbGF0aW9uX2V4Y2x1ZGVkX2J5X2NvbnN0cmFpbnRzKHJvb3QsIGNoaWxk cmVsLCBjaGlsZFJURSkpCisJCXsKKwkJCS8qCisJCQkgKiBUaGlzIGNoaWxkIG5lZWQgbm90 IGJlIHNjYW5uZWQsIHNvIHdlIGNhbiBvbWl0IGl0IGZyb20gdGhlCisJCQkgKiBhcHBlbmRy ZWwuCisJCQkgKi8KKwkJCXNldF9kdW1teV9yZWxfcGF0aGxpc3QoY2hpbGRyZWwpOworCQkJ Y29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBDb3B5L01vZGlmeSB0YXJnZXRsaXN0Lgog CQkgKgogCQkgKiBOQjogdGhlIHJlc3VsdGluZyBjaGlsZHJlbC0+cmVsdGFyZ2V0LT5leHBy cyBtYXkgY29udGFpbiBhcmJpdHJhcnkKIAkJICogZXhwcmVzc2lvbnMsIHdoaWNoIG90aGVy d2lzZSB3b3VsZCBub3Qgb2NjdXIgaW4gYSByZWwncyB0YXJnZXRsaXN0LgpAQCAtMTA2Nywx NDQgKzEwNjYsNiBAQCBzZXRfYXBwZW5kX3JlbF9zaXplKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQlhZGRfY2hpbGRfcmVsX2VxdWl2YWxlbmNlcyhyb290LCBh cHBpbmZvLCByZWwsIGNoaWxkcmVsKTsKIAkJY2hpbGRyZWwtPmhhc19lY2xhc3Nfam9pbnMg PSByZWwtPmhhc19lY2xhc3Nfam9pbnM7CiAKLQkJLyoKLQkJICogV2UgaGF2ZSB0byBjb3B5 IHRoZSBwYXJlbnQncyBxdWFscyB0byB0aGUgY2hpbGQsIHdpdGggYXBwcm9wcmlhdGUKLQkJ ICogc3Vic3RpdHV0aW9uIG9mIHZhcmlhYmxlcy4gIEhvd2V2ZXIsIG9ubHkgdGhlIGJhc2Vy ZXN0cmljdGluZm8KLQkJICogcXVhbHMgYXJlIG5lZWRlZCBiZWZvcmUgd2UgY2FuIGNoZWNr IGZvciBjb25zdHJhaW50IGV4Y2x1c2lvbjsgc28KLQkJICogZG8gdGhhdCBmaXJzdCBhbmQg dGhlbiBjaGVjayB0byBzZWUgaWYgd2UgY2FuIGRpc3JlZ2FyZCB0aGlzIGNoaWxkLgotCQkg KgotCQkgKiBUaGUgY2hpbGQgcmVsJ3MgdGFyZ2V0bGlzdCBtaWdodCBjb250YWluIG5vbi1W YXIgZXhwcmVzc2lvbnMsIHdoaWNoCi0JCSAqIG1lYW5zIHRoYXQgc3Vic3RpdHV0aW9uIGlu dG8gdGhlIHF1YWxzIGNvdWxkIHByb2R1Y2Ugb3Bwb3J0dW5pdGllcwotCQkgKiBmb3IgY29u c3Qtc2ltcGxpZmljYXRpb24sIGFuZCBwZXJoYXBzIGV2ZW4gcHNldWRvY29uc3RhbnQgcXVh bHMuCi0JCSAqIFRoZXJlZm9yZSwgdHJhbnNmb3JtIGVhY2ggUmVzdHJpY3RJbmZvIHNlcGFy YXRlbHkgdG8gc2VlIGlmIGl0Ci0JCSAqIHJlZHVjZXMgdG8gYSBjb25zdGFudCBvciBwc2V1 ZG9jb25zdGFudC4gIChXZSBtdXN0IHByb2Nlc3MgdGhlbQotCQkgKiBzZXBhcmF0ZWx5IHRv IGtlZXAgdHJhY2sgb2YgdGhlIHNlY3VyaXR5IGxldmVsIG9mIGVhY2ggcXVhbC4pCi0JCSAq LwotCQljaGlsZHF1YWxzID0gTklMOwotCQljcV9taW5fc2VjdXJpdHkgPSBVSU5UX01BWDsK LQkJaGF2ZV9jb25zdF9mYWxzZV9jcSA9IGZhbHNlOwotCQlmb3JlYWNoKGxjLCByZWwtPmJh c2VyZXN0cmljdGluZm8pCi0JCXsKLQkJCVJlc3RyaWN0SW5mbyAqcmluZm8gPSAoUmVzdHJp Y3RJbmZvICopIGxmaXJzdChsYyk7Ci0JCQlOb2RlCSAgICpjaGlsZHF1YWw7Ci0JCQlMaXN0 Q2VsbCAgICpsYzI7Ci0KLQkJCUFzc2VydChJc0EocmluZm8sIFJlc3RyaWN0SW5mbykpOwot CQkJY2hpbGRxdWFsID0gYWRqdXN0X2FwcGVuZHJlbF9hdHRycyhyb290LAotCQkJCQkJCQkJ CQkgICAoTm9kZSAqKSByaW5mby0+Y2xhdXNlLAotCQkJCQkJCQkJCQkgICAxLCAmYXBwaW5m byk7Ci0JCQljaGlsZHF1YWwgPSBldmFsX2NvbnN0X2V4cHJlc3Npb25zKHJvb3QsIGNoaWxk cXVhbCk7Ci0JCQkvKiBjaGVjayBmb3IgZmxhdC1vdXQgY29uc3RhbnQgKi8KLQkJCWlmIChj aGlsZHF1YWwgJiYgSXNBKGNoaWxkcXVhbCwgQ29uc3QpKQotCQkJewotCQkJCWlmICgoKENv bnN0ICopIGNoaWxkcXVhbCktPmNvbnN0aXNudWxsIHx8Ci0JCQkJCSFEYXR1bUdldEJvb2wo KChDb25zdCAqKSBjaGlsZHF1YWwpLT5jb25zdHZhbHVlKSkKLQkJCQl7Ci0JCQkJCS8qIFJl c3RyaWN0aW9uIHJlZHVjZXMgdG8gY29uc3RhbnQgRkFMU0Ugb3IgTlVMTCAqLwotCQkJCQlo YXZlX2NvbnN0X2ZhbHNlX2NxID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCS8q IFJlc3RyaWN0aW9uIHJlZHVjZXMgdG8gY29uc3RhbnQgVFJVRSwgc28gZHJvcCBpdCAqLwot CQkJCWNvbnRpbnVlOwotCQkJfQotCQkJLyogbWlnaHQgaGF2ZSBnb3R0ZW4gYW4gQU5EIGNs YXVzZSwgaWYgc28gZmxhdHRlbiBpdCAqLwotCQkJZm9yZWFjaChsYzIsIG1ha2VfYW5kc19p bXBsaWNpdCgoRXhwciAqKSBjaGlsZHF1YWwpKQotCQkJewotCQkJCU5vZGUJICAgKm9uZWNx ID0gKE5vZGUgKikgbGZpcnN0KGxjMik7Ci0JCQkJYm9vbAkJcHNldWRvY29uc3RhbnQ7Ci0K LQkJCQkvKiBjaGVjayBmb3IgcHNldWRvY29uc3RhbnQgKG5vIFZhcnMgb3Igdm9sYXRpbGUg ZnVuY3Rpb25zKSAqLwotCQkJCXBzZXVkb2NvbnN0YW50ID0KLQkJCQkJIWNvbnRhaW5fdmFy c19vZl9sZXZlbChvbmVjcSwgMCkgJiYKLQkJCQkJIWNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rp b25zKG9uZWNxKTsKLQkJCQlpZiAocHNldWRvY29uc3RhbnQpCi0JCQkJewotCQkJCQkvKiB0 ZWxsIGNyZWF0ZXBsYW4uYyB0byBjaGVjayBmb3IgZ2F0aW5nIHF1YWxzICovCi0JCQkJCXJv b3QtPmhhc1BzZXVkb0NvbnN0YW50UXVhbHMgPSB0cnVlOwotCQkJCX0KLQkJCQkvKiByZWNv bnN0aXR1dGUgUmVzdHJpY3RJbmZvIHdpdGggYXBwcm9wcmlhdGUgcHJvcGVydGllcyAqLwot CQkJCWNoaWxkcXVhbHMgPSBsYXBwZW5kKGNoaWxkcXVhbHMsCi0JCQkJCQkJCQkgbWFrZV9y ZXN0cmljdGluZm8oKEV4cHIgKikgb25lY3EsCi0JCQkJCQkJCQkJCQkJICAgcmluZm8tPmlz X3B1c2hlZF9kb3duLAotCQkJCQkJCQkJCQkJCSAgIHJpbmZvLT5vdXRlcmpvaW5fZGVsYXll ZCwKLQkJCQkJCQkJCQkJCQkgICBwc2V1ZG9jb25zdGFudCwKLQkJCQkJCQkJCQkJCQkgICBy aW5mby0+c2VjdXJpdHlfbGV2ZWwsCi0JCQkJCQkJCQkJCQkJICAgTlVMTCwgTlVMTCwgTlVM TCkpOwotCQkJCS8qIHRyYWNrIG1pbmltdW0gc2VjdXJpdHkgbGV2ZWwgYW1vbmcgY2hpbGQg cXVhbHMgKi8KLQkJCQljcV9taW5fc2VjdXJpdHkgPSBNaW4oY3FfbWluX3NlY3VyaXR5LCBy aW5mby0+c2VjdXJpdHlfbGV2ZWwpOwotCQkJfQotCQl9Ci0KLQkJLyoKLQkJICogSW4gYWRk aXRpb24gdG8gdGhlIHF1YWxzIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdlIG1pZ2h0 IGhhdmUKLQkJICogc2VjdXJpdHlRdWFscyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwYXJ0aWN1 bGFyIGNoaWxkIG5vZGUuCi0JCSAqIChDdXJyZW50bHkgdGhpcyBjYW4gb25seSBoYXBwZW4g aW4gYXBwZW5kcmVscyBvcmlnaW5hdGluZyBmcm9tCi0JCSAqIFVOSU9OIEFMTDsgaW5oZXJp dGFuY2UgY2hpbGQgdGFibGVzIGRvbid0IGhhdmUgdGhlaXIgb3duCi0JCSAqIHNlY3VyaXR5 UXVhbHMsIHNlZSBleHBhbmRfaW5oZXJpdGVkX3J0ZW50cnkoKS4pCVB1bGwgYW55IHN1Y2gK LQkJICogc2VjdXJpdHlRdWFscyB1cCBpbnRvIHRoZSBiYXNlcmVzdHJpY3RpbmZvIGZvciB0 aGUgY2hpbGQuICBUaGlzIGlzCi0JCSAqIHNpbWlsYXIgdG8gcHJvY2Vzc19zZWN1cml0eV9i YXJyaWVyX3F1YWxzKCkgZm9yIHRoZSBwYXJlbnQgcmVsLAotCQkgKiBleGNlcHQgdGhhdCB3 ZSBjYW4ndCBtYWtlIGFueSBnZW5lcmFsIGRlZHVjdGlvbnMgZnJvbSBzdWNoIHF1YWxzLAot CQkgKiBzaW5jZSB0aGV5IGRvbid0IGhvbGQgZm9yIHRoZSB3aG9sZSBhcHBlbmRyZWwuCi0J CSAqLwotCQlpZiAoY2hpbGRSVEUtPnNlY3VyaXR5UXVhbHMpCi0JCXsKLQkJCUluZGV4CQlz ZWN1cml0eV9sZXZlbCA9IDA7Ci0KLQkJCWZvcmVhY2gobGMsIGNoaWxkUlRFLT5zZWN1cml0 eVF1YWxzKQotCQkJewotCQkJCUxpc3QJICAgKnF1YWxzZXQgPSAoTGlzdCAqKSBsZmlyc3Qo bGMpOwotCQkJCUxpc3RDZWxsICAgKmxjMjsKLQotCQkJCWZvcmVhY2gobGMyLCBxdWFsc2V0 KQotCQkJCXsKLQkJCQkJRXhwcgkgICAqcXVhbCA9IChFeHByICopIGxmaXJzdChsYzIpOwot Ci0JCQkJCS8qIG5vdCBsaWtlbHkgdGhhdCB3ZSdkIHNlZSBjb25zdGFudHMgaGVyZSwgc28g bm8gY2hlY2sgKi8KLQkJCQkJY2hpbGRxdWFscyA9IGxhcHBlbmQoY2hpbGRxdWFscywKLQkJ CQkJCQkJCQkgbWFrZV9yZXN0cmljdGluZm8ocXVhbCwKLQkJCQkJCQkJCQkJCQkJICAgdHJ1 ZSwgZmFsc2UsIGZhbHNlLAotCQkJCQkJCQkJCQkJCQkgICBzZWN1cml0eV9sZXZlbCwKLQkJ CQkJCQkJCQkJCQkJICAgTlVMTCwgTlVMTCwgTlVMTCkpOwotCQkJCQljcV9taW5fc2VjdXJp dHkgPSBNaW4oY3FfbWluX3NlY3VyaXR5LCBzZWN1cml0eV9sZXZlbCk7Ci0JCQkJfQotCQkJ CXNlY3VyaXR5X2xldmVsKys7Ci0JCQl9Ci0JCQlBc3NlcnQoc2VjdXJpdHlfbGV2ZWwgPD0g cm9vdC0+cXVhbF9zZWN1cml0eV9sZXZlbCk7Ci0JCX0KLQotCQkvKgotCQkgKiBPSywgd2Un dmUgZ290IGFsbCB0aGUgYmFzZXJlc3RyaWN0aW5mbyBxdWFscyBmb3IgdGhpcyBjaGlsZC4K LQkJICovCi0JCWNoaWxkcmVsLT5iYXNlcmVzdHJpY3RpbmZvID0gY2hpbGRxdWFsczsKLQkJ Y2hpbGRyZWwtPmJhc2VyZXN0cmljdF9taW5fc2VjdXJpdHkgPSBjcV9taW5fc2VjdXJpdHk7 Ci0KLQkJaWYgKGhhdmVfY29uc3RfZmFsc2VfY3EpCi0JCXsKLQkJCS8qCi0JCQkgKiBTb21l IHJlc3RyaWN0aW9uIGNsYXVzZSByZWR1Y2VkIHRvIGNvbnN0YW50IEZBTFNFIG9yIE5VTEwg YWZ0ZXIKLQkJCSAqIHN1YnN0aXR1dGlvbiwgc28gdGhpcyBjaGlsZCBuZWVkIG5vdCBiZSBz Y2FubmVkLgotCQkJICovCi0JCQlzZXRfZHVtbXlfcmVsX3BhdGhsaXN0KGNoaWxkcmVsKTsK LQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGRpZF9wcnVuaW5nICYmICFibXNfaXNfbWVt YmVyKGFwcGluZm8tPmNoaWxkX3JlbGlkLCBsaXZlX2NoaWxkcmVuKSkKLQkJewotCQkJLyog VGhpcyBwYXJ0aXRpb24gd2FzIHBydW5lZDsgc2tpcCBpdC4gKi8KLQkJCXNldF9kdW1teV9y ZWxfcGF0aGxpc3QoY2hpbGRyZWwpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAocmVs YXRpb25fZXhjbHVkZWRfYnlfY29uc3RyYWludHMocm9vdCwgY2hpbGRyZWwsIGNoaWxkUlRF KSkKLQkJewotCQkJLyoKLQkJCSAqIFRoaXMgY2hpbGQgbmVlZCBub3QgYmUgc2Nhbm5lZCwg c28gd2UgY2FuIG9taXQgaXQgZnJvbSB0aGUKLQkJCSAqIGFwcGVuZHJlbC4KLQkJCSAqLwot CQkJc2V0X2R1bW15X3JlbF9wYXRobGlzdChjaGlsZHJlbCk7Ci0JCQljb250aW51ZTsKLQkJ fQotCiAJCS8qIENFIGZhaWxlZCwgc28gZmluaXNoIGNvcHlpbmcvbW9kaWZ5aW5nIGpvaW4g cXVhbHMuICovCiAJCWNoaWxkcmVsLT5qb2luaW5mbyA9IChMaXN0ICopCiAJCQlhZGp1c3Rf YXBwZW5kcmVsX2F0dHJzKHJvb3QsCkBAIC0xMjc1LDcgKzExMzYsNyBAQCBzZXRfYXBwZW5k X3JlbF9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJ CQkJCQkJICBjaGlsZF9yZWxpZHMsCiAJCQkJCQkJCQkJCQkJICB0b3BfcGFyZW50X3JlbGlk cyk7CiAJCQlyb290LT5wYXJzZSA9IHBhcnNlOwotCQkJdGxpc3QgPSBwcmVwcm9jZXNzX3Rh cmdldGxpc3Qocm9vdCk7CisJCQl0bGlzdCA9IHByZXByb2Nlc3NfdGFyZ2V0bGlzdChyb290 LCB0cnVlKTsKIAkJCWJ1aWxkX2Jhc2VfcmVsX3RsaXN0cyhyb290LCB0bGlzdCk7CiAJCQly b290LT5wYXJzZSA9IG9yaWdfcGFyc2U7CiAKQEAgLTI3NDQsNiArMjYwNSw3IEBAIGluaGVy aXRhbmNlX21ha2VfcmVsX2Zyb21fam9pbmxpc3QoUGxhbm5lckluZm8gKnJvb3QsCiAJCQlj b250aW51ZTsKIAogCQljaGlsZHJlbCA9IGZpbmRfYmFzZV9yZWwocm9vdCwgYXBwaW5mby0+ Y2hpbGRfcmVsaWQpOworCQlBc3NlcnQoY2hpbGRyZWwgIT0gTlVMTCk7CiAKIAkJLyogSWdu b3JlIGV4Y2x1ZGVkL3BydW5lZCBjaGlsZHJlbi4gKi8KIAkJaWYgKElTX0RVTU1ZX1JFTChj aGlsZHJlbCkpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lu cmVscy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCBk M2QyMWZlZDVkLi5kYTA4MzFkZTRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pv aW5yZWxzLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5v ZGUuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJvcHRpbWl6 ZXIvcHJlcC5oIgorI2luY2x1ZGUgIm9wdGltaXplci90bGlzdC5oIgogI2luY2x1ZGUgInBh cnRpdGlvbmluZy9wYXJ0Ym91bmRzLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgi CiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAgLTQ2LDYgKzQ3LDkgQEAgc3RhdGlj IHZvaWQgdHJ5X3BhcnRpdGlvbndpc2Vfam9pbihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsMSwKIAkJCQkJICAgTGlzdCAqcGFyZW50X3Jlc3RyaWN0bGlzdCk7CiBzdGF0 aWMgaW50IG1hdGNoX2V4cHJfdG9fcGFydGl0aW9uX2tleXMoRXhwciAqZXhwciwgUmVsT3B0 SW5mbyAqcmVsLAogCQkJCQkJCSBib29sIHN0cmljdF9vcCk7CitzdGF0aWMgUmVsT3B0SW5m byAqYnVpbGRfZHVtbXlfcGFydGl0aW9uX3JlbChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJ CQkJCVJlbE9wdEluZm8gKnBhcmVudCwKKwkJCQkJCQkJCWludCBwYXJ0aWR4KTsKIAogCiAv KgpAQCAtMTM3Niw2ICsxMzgwLDExIEBAIHRyeV9wYXJ0aXRpb253aXNlX2pvaW4oUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbDEsIFJlbE9wdEluZm8gKnJlbDIsCiAJCUFw cGVuZFJlbEluZm8gKiphcHBpbmZvczsKIAkJaW50CQkJbmFwcGluZm9zOwogCisJCWlmIChj aGlsZF9yZWwxID09IE5VTEwpCisJCQljaGlsZF9yZWwxID0gYnVpbGRfZHVtbXlfcGFydGl0 aW9uX3JlbChyb290LCByZWwxLCBjbnRfcGFydHMpOworCQlpZiAoY2hpbGRfcmVsMiA9PSBO VUxMKQorCQkJY2hpbGRfcmVsMiA9IGJ1aWxkX2R1bW15X3BhcnRpdGlvbl9yZWwocm9vdCwg cmVsMiwgY250X3BhcnRzKTsKKwogCQkvKiBXZSBzaG91bGQgbmV2ZXIgdHJ5IHRvIGpvaW4g dHdvIG92ZXJsYXBwaW5nIHNldHMgb2YgcmVscy4gKi8KIAkJQXNzZXJ0KCFibXNfb3Zlcmxh cChjaGlsZF9yZWwxLT5yZWxpZHMsIGNoaWxkX3JlbDItPnJlbGlkcykpOwogCQljaGlsZF9q b2lucmVsaWRzID0gYm1zX3VuaW9uKGNoaWxkX3JlbDEtPnJlbGlkcywgY2hpbGRfcmVsMi0+ cmVsaWRzKTsKQEAgLTE1ODIsMyArMTU5MSw1NiBAQCBtYXRjaF9leHByX3RvX3BhcnRpdGlv bl9rZXlzKEV4cHIgKmV4cHIsIFJlbE9wdEluZm8gKnJlbCwgYm9vbCBzdHJpY3Rfb3ApCiAK IAlyZXR1cm4gLTE7CiB9CisKKy8qCisgKiBidWlsZF9kdW1teV9wYXJ0aXRpb25fcmVsCisg KgkJQnVpbGQgYSBSZWxPcHRJbmZvIGFuZCBBcHBlbmRSZWxJbmZvIGZvciBhIHBydW5lZCBw YXJ0aXRpb24KKyAqCisgKiBUaGlzIGRvZXMgbm90IHJlc3VsdCBpbiBvcGVuaW5nIHRoZSBy ZWxhdGlvbiBvciBhIHJhbmdlIHRhYmxlIGVudHJ5IGJlaW5nCisgKiBjcmVhdGVkLiAgQWxz bywgdGhlIFJlbE9wdEluZm8gdGh1cyBjcmVhdGVkIGlzIG5vdCBzdG9yZWQgYW55d2hlcmUg ZWxzZQorICogYmVzaWRlIHRoZSBwYXJlbnQncyBwYXJ0X3JlbHMgYXJyYXkuCisgKgorICog VGhlIG9ubHkgcmVhc29uIHRoaXMgZXhpc3RzIGlzIGJlY2F1c2UgcGFydGl0aW9uLXdpc2Ug am9pbiwgaW4gc29tZSBjYXNlcywKKyAqIG5lZWRzIGEgUmVsT3B0SW5mbyB0byByZXByZXNl bnQgYW4gZW1wdHkgcmVsYXRpb24gdGhhdCdzIG9uIHRoZSBudWxsYWJsZQorICogc2lkZSBv ZiBhbiBvdXRlciBqb2luLCBzbyB0aGF0IGEgUGF0aCByZXByZXNlbnRpbmcgdGhlIG91dGVy IGpvaW4gY2FuIGJlCisgKiBjcmVhdGVkLgorICovCitSZWxPcHRJbmZvICoKK2J1aWxkX2R1 bW15X3BhcnRpdGlvbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnBhcmVu dCwgaW50IHBhcnRpZHgpCit7CisJUmFuZ2VUYmxFbnRyeSAqcGFyZW50cnRlID0gcm9vdC0+ c2ltcGxlX3J0ZV9hcnJheVtwYXJlbnQtPnJlbGlkXTsKKwlSZWxPcHRJbmZvICpyZWw7CisK KwlBc3NlcnQocGFyZW50LT5wYXJ0X3JlbHNbcGFydGlkeF0gPT0gTlVMTCk7CisKKwkvKiBD cmVhdGUgbWluaW1hbGx5IHZhbGlkLWxvb2tpbmcgUmVsT3B0SW5mbyB3aXRoIHBhcmVudCdz IHJlbGlkLiAqLworCXJlbCA9IG1ha2VOb2RlKFJlbE9wdEluZm8pOworCXJlbC0+cmVsb3B0 a2luZCA9IFJFTE9QVF9PVEhFUl9NRU1CRVJfUkVMOworCXJlbC0+cmVsaWQgPSBwYXJlbnQt PnJlbGlkOworCXJlbC0+cmVsaWRzID0gYm1zX2NvcHkocGFyZW50LT5yZWxpZHMpOworCWlm IChwYXJlbnQtPnRvcF9wYXJlbnRfcmVsaWRzKQorCQlyZWwtPnRvcF9wYXJlbnRfcmVsaWRz ID0gcGFyZW50LT50b3BfcGFyZW50X3JlbGlkczsKKwllbHNlCisJCXJlbC0+dG9wX3BhcmVu dF9yZWxpZHMgPSBibXNfY29weShwYXJlbnQtPnJlbGlkcyk7CisJcmVsLT5yZWx0YXJnZXQg PSBjb3B5X3BhdGh0YXJnZXQocGFyZW50LT5yZWx0YXJnZXQpOworCXBhcmVudC0+cGFydF9y ZWxzW3BhcnRpZHhdID0gcmVsOworCW1hcmtfZHVtbXlfcmVsKHJlbCk7CisKKwkvKgorCSAq IE5vdyB3ZSdsbCBuZWVkIGEgKG5vLW9wKSBBcHBlbmRSZWxJbmZvIGZvciBwYXJlbnQsIGJl Y2F1c2Ugd2UncmUKKwkgKiBzZXR0aW5nIHRoZSBkdW1teSBwYXJ0aXRpb24ncyByZWxpZCB0 byBiZSBzYW1lIGFzIHRoZSBwYXJlbnQncy4KKwkgKi8KKwlpZiAocm9vdC0+YXBwZW5kX3Jl bF9hcnJheVtwYXJlbnQtPnJlbGlkXSA9PSBOVUxMKQorCXsKKwkJLyogUGFzcyBwYXJlbnQn cyBpbmZvIGFzIGZvciBib3RoIHRoZSBwYXJlbnQgcmVsIGFuZCBjaGlsZCByZWwuICovCisJ CUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSBtYWtlX2FwcGVuZF9yZWxfaW5mbyhwYXJlbnQs IHBhcmVudHJ0ZSwKKwkJCQkJCQkJCQkJCQkgIHBhcmVudC0+dHVwZGVzYywKKwkJCQkJCQkJ CQkJCQkgIHBhcmVudHJ0ZS0+cmVsaWQsCisJCQkJCQkJCQkJCQkJICBwYXJlbnQtPnJlbHR5 cGUsCisJCQkJCQkJCQkJCQkJICBwYXJlbnQtPnJlbGlkKTsKKworCQlyb290LT5hcHBlbmRf cmVsX2FycmF5W3BhcmVudC0+cmVsaWRdID0gYXBwaW5mbzsKKwl9CisKKwlyZXR1cm4gcmVs OworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFu LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYwppbmRleCAwMTMz NWRiNTExLi43NjM2YWE4MmM0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9pbml0c3BsYW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0 c3BsYW4uYwpAQCAtNjE2LDY0ICs2MTYsNiBAQCBjcmVhdGVfbGF0ZXJhbF9qb2luX2luZm8o UGxhbm5lckluZm8gKnJvb3QpCiAJCQkJYm1zX2FkZF9tZW1iZXIoYnJlbDItPmxhdGVyYWxf cmVmZXJlbmNlcnMsIHJ0aSk7CiAJCX0KIAl9Ci0KLQkvKgotCSAqIExhc3RseSwgcHJvcGFn YXRlIGxhdGVyYWxfcmVsaWRzIGFuZCBsYXRlcmFsX3JlZmVyZW5jZXJzIGZyb20gYXBwZW5k cmVsCi0JICogcGFyZW50IHJlbHMgdG8gdGhlaXIgY2hpbGQgcmVscy4gIFdlIGludGVudGlv bmFsbHkgZ2l2ZSBlYWNoIGNoaWxkIHJlbAotCSAqIHRoZSBzYW1lIG1pbmltdW0gcGFyYW1l dGVyaXphdGlvbiwgZXZlbiB0aG91Z2ggaXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0Ci0JICog c29tZSBkb24ndCByZWZlcmVuY2UgYWxsIHRoZSBsYXRlcmFsIHJlbHMuICBUaGlzIGlzIGJl Y2F1c2UgYW55IGFwcGVuZAotCSAqIHBhdGggZm9yIHRoZSBwYXJlbnQgd2lsbCBoYXZlIHRv IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyaXphdGlvbiBmb3IKLQkgKiBldmVyeSBjaGlsZCBh bnl3YXksIGFuZCB0aGVyZSdzIG5vIHZhbHVlIGluIGZvcmNpbmcgZXh0cmEKLQkgKiByZXBh cmFtZXRlcml6ZV9wYXRoKCkgY2FsbHMuICBTaW1pbGFybHksIGEgbGF0ZXJhbCByZWZlcmVu Y2UgdG8gdGhlCi0JICogcGFyZW50IHByZXZlbnRzIHVzZSBvZiBvdGhlcndpc2UtbW92YWJs ZSBqb2luIHJlbHMgZm9yIGVhY2ggY2hpbGQuCi0JICovCi0JZm9yIChydGkgPSAxOyBydGkg PCByb290LT5zaW1wbGVfcmVsX2FycmF5X3NpemU7IHJ0aSsrKQotCXsKLQkJUmVsT3B0SW5m byAqYnJlbCA9IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcnRpXTsKLQkJUmFuZ2VUYmxFbnRy eSAqYnJ0ZSA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbcnRpXTsKLQotCQkvKgotCQkgKiBT a2lwIGVtcHR5IHNsb3RzLiBBbHNvIHNraXAgbm9uLXNpbXBsZSByZWxhdGlvbnMgaS5lLiBk ZWFkCi0JCSAqIHJlbGF0aW9ucy4KLQkJICovCi0JCWlmIChicmVsID09IE5VTEwgfHwgIUlT X1NJTVBMRV9SRUwoYnJlbCkpCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBJbiB0aGUg Y2FzZSBvZiB0YWJsZSBpbmhlcml0YW5jZSwgdGhlIHBhcmVudCBSVEUgaXMgZGlyZWN0bHkg bGlua2VkCi0JCSAqIHRvIGV2ZXJ5IGNoaWxkIHRhYmxlIHZpYSBhbiBBcHBlbmRSZWxJbmZv LiAgSW4gdGhlIGNhc2Ugb2YgdGFibGUKLQkJICogcGFydGl0aW9uaW5nLCB0aGUgaW5oZXJp dGFuY2UgaGllcmFyY2h5IGlzIGV4cGFuZGVkIG9uZSBsZXZlbCBhdCBhCi0JCSAqIHRpbWUg cmF0aGVyIHRoYW4gZmxhdHRlbmVkLiAgVGhlcmVmb3JlLCBhbiBvdGhlciBtZW1iZXIgcmVs IHRoYXQgaXMKLQkJICogYSBwYXJ0aXRpb25lZCB0YWJsZSBtYXkgaGF2ZSBjaGlsZHJlbiBv ZiBpdHMgb3duLCBhbmQgbXVzdAotCQkgKiB0aGVyZWZvcmUgYmUgbWFya2VkIHdpdGggdGhl IGFwcHJvcHJpYXRlIGxhdGVyYWwgaW5mbyBzbyB0aGF0IHRob3NlCi0JCSAqIGNoaWxkcmVu IGV2ZW50dWFsbHkgZ2V0IG1hcmtlZCBhbHNvLgotCQkgKi8KLQkJQXNzZXJ0KGJydGUpOwot CQlpZiAoYnJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfT1RIRVJfTUVNQkVSX1JFTCAmJgot CQkJKGJydGUtPnJ0ZWtpbmQgIT0gUlRFX1JFTEFUSU9OIHx8Ci0JCQkgYnJ0ZS0+cmVsa2lu ZCAhPSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlm IChicnRlLT5pbmgpCi0JCXsKLQkJCWZvcmVhY2gobGMsIHJvb3QtPmFwcGVuZF9yZWxfbGlz dCkKLQkJCXsKLQkJCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvID0gKEFwcGVuZFJlbEluZm8g KikgbGZpcnN0KGxjKTsKLQkJCQlSZWxPcHRJbmZvICpjaGlsZHJlbDsKLQotCQkJCWlmIChh cHBpbmZvLT5wYXJlbnRfcmVsaWQgIT0gcnRpKQotCQkJCQljb250aW51ZTsKLQkJCQljaGls ZHJlbCA9IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbYXBwaW5mby0+Y2hpbGRfcmVsaWRdOwot CQkJCUFzc2VydChjaGlsZHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfT1RIRVJfTUVNQkVS X1JFTCk7Ci0JCQkJQXNzZXJ0KGNoaWxkcmVsLT5kaXJlY3RfbGF0ZXJhbF9yZWxpZHMgPT0g TlVMTCk7Ci0JCQkJY2hpbGRyZWwtPmRpcmVjdF9sYXRlcmFsX3JlbGlkcyA9IGJyZWwtPmRp cmVjdF9sYXRlcmFsX3JlbGlkczsKLQkJCQlBc3NlcnQoY2hpbGRyZWwtPmxhdGVyYWxfcmVs aWRzID09IE5VTEwpOwotCQkJCWNoaWxkcmVsLT5sYXRlcmFsX3JlbGlkcyA9IGJyZWwtPmxh dGVyYWxfcmVsaWRzOwotCQkJCUFzc2VydChjaGlsZHJlbC0+bGF0ZXJhbF9yZWZlcmVuY2Vy cyA9PSBOVUxMKTsKLQkJCQljaGlsZHJlbC0+bGF0ZXJhbF9yZWZlcmVuY2VycyA9IGJyZWwt PmxhdGVyYWxfcmVmZXJlbmNlcnM7Ci0JCQl9Ci0JCX0KLQl9CiB9CiAKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDkzYjhjNzYxYzIuLjg0NzQ2YTliYzkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTIzLDYgKzIzLDcg QEAKICNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0 LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0 YWxvZy9wZ19pbmhlcml0cy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9y LmgiCkBAIC02OTksMjcgKzcwMCwyNCBAQCBzdWJxdWVyeV9wbGFubmVyKFBsYW5uZXJHbG9i YWwgKmdsb2IsIFF1ZXJ5ICpwYXJzZSwKIAkJfQogCQlpZiAocnRlLT5sYXRlcmFsKQogCQkJ cm9vdC0+aGFzTGF0ZXJhbFJURXMgPSB0cnVlOworCisJCS8qCisJCSAqIFdoaWxlIGF0IGl0 LCBhbHNvIHVwZGF0ZSB0aGUgaW5oIHN0YXR1cy4gIElmIHRoZSByZWxhdGlvbiBkb2Vzbid0 CisJCSAqIG9yIGNhbid0IGhhdmUgYW55IGNoaWxkcmVuLCB0aGVyZSBpcyBubyBwb2ludCBp biBsZXR0aW5nIGluaCBiZSBzZXQKKwkJICogdG8gdHJ1ZS4gIE5vdGUgdGhhdCB3ZSBkbyB0 aGlzIGJlZm9yZSBwcm9jZXNzaW5nIHJvd21hcmtzLCBzbyB0aGF0CisJCSAqIHRoZSBjb3Jy ZWN0IGluZm9ybWF0aW9uIGZvciBzZXR0aW5nIGlzUGFyZW50IGZpZWxkIG9mIFBsYW5Sb3dN YXJrcy4KKwkJICovCisJCWlmIChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKQorCQkJ cnRlLT5pbmggPSBydGUtPmluaCAmJiBoYXNfc3ViY2xhc3MocnRlLT5yZWxpZCk7CiAJfQog CiAJLyoKIAkgKiBQcmVwcm9jZXNzIFJvd01hcmsgaW5mb3JtYXRpb24uICBXZSBuZWVkIHRv IGRvIHRoaXMgYWZ0ZXIgc3VicXVlcnkKLQkgKiBwdWxsdXAgKHNvIHRoYXQgYWxsIG5vbi1p bmhlcml0ZWQgUlRFcyBhcmUgcHJlc2VudCkgYW5kIGJlZm9yZQotCSAqIGluaGVyaXRhbmNl IGV4cGFuc2lvbiAoc28gdGhhdCB0aGUgaW5mbyBpcyBhdmFpbGFibGUgZm9yCi0JICogZXhw YW5kX2luaGVyaXRlZF90YWJsZXMgdG8gZXhhbWluZSBhbmQgbW9kaWZ5KS4KKwkgKiBwdWxs dXAgKHNvIHRoYXQgYWxsIG5vbi1pbmhlcml0ZWQgUlRFcyBhcmUgcHJlc2VudCkuCiAJICov CiAJcHJlcHJvY2Vzc19yb3dtYXJrcyhyb290KTsKIAogCS8qCi0JICogRXhwYW5kIGFueSBy YW5nZXRhYmxlIGVudHJpZXMgdGhhdCBhcmUgaW5oZXJpdGFuY2Ugc2V0cyBpbnRvICJhcHBl bmQKLQkgKiByZWxhdGlvbnMiLiAgVGhpcyBjYW4gYWRkIGVudHJpZXMgdG8gdGhlIHJhbmdl dGFibGUsIGJ1dCB0aGV5IG11c3QgYmUKLQkgKiBwbGFpbiBiYXNlIHJlbGF0aW9ucyBub3Qg am9pbnMsIHNvIGl0J3MgT0sgKGFuZCBtYXJnaW5hbGx5IG1vcmUKLQkgKiBlZmZpY2llbnQp IHRvIGRvIGl0IGFmdGVyIGNoZWNraW5nIGZvciBqb2luIFJURXMuICBXZSBtdXN0IGRvIGl0 IGFmdGVyCi0JICogcHVsbGluZyB1cCBzdWJxdWVyaWVzLCBlbHNlIHdlJ2QgZmFpbCB0byBo YW5kbGUgaW5oZXJpdGVkIHRhYmxlcyBpbgotCSAqIHN1YnF1ZXJpZXMuCi0JICovCi0JZXhw YW5kX2luaGVyaXRlZF90YWJsZXMocm9vdCk7Ci0KLQkvKgogCSAqIFNldCBoYXNIYXZpbmdR dWFsIHRvIHJlbWVtYmVyIGlmIEhBVklORyBjbGF1c2UgaXMgcHJlc2VudC4gIE5lZWRlZAog CSAqIGJlY2F1c2UgcHJlcHJvY2Vzc19leHByZXNzaW9uIHdpbGwgcmVkdWNlIGEgY29uc3Rh bnQtdHJ1ZSBjb25kaXRpb24gdG8KIAkgKiBhbiBlbXB0eSBxdWFsIGxpc3QgLi4uIGJ1dCAi SEFWSU5HIFRSVUUiIGlzIG5vdCBhIHNlbWFudGljIG5vLW9wLgpAQCAtMTIxNSw3ICsxMjEz LDcgQEAgaW5oZXJpdGFuY2VfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCkKIAlvcmlnX3Rs aXN0ID0gbGlzdF9jb3B5KHJvb3QtPnBhcnNlLT50YXJnZXRMaXN0KTsKIAogCS8qIERvIHRo ZSBzY2FuL2pvaW4gcGxhbm5pbmcuICovCi0JdGxpc3QgPSBwcmVwcm9jZXNzX3RhcmdldGxp c3Qocm9vdCk7CisJdGxpc3QgPSBwcmVwcm9jZXNzX3RhcmdldGxpc3Qocm9vdCwgZmFsc2Up OwogCXFwX2V4dHJhLnRsaXN0ID0gdGxpc3Q7CiAJcXBfZXh0cmEuYWN0aXZlV2luZG93cyA9 IHFwX2V4dHJhLmdyb3VwQ2xhdXNlID0gTklMOwogCXBsYW5uZWRfcmVsID0gcXVlcnlfcGxh bm5lcihyb290LCB0bGlzdCwgc3RhbmRhcmRfcXBfY2FsbGJhY2ssICZxcF9leHRyYSk7CkBA IC0xMjIzLDkgKzEyMjEsMTAgQEAgaW5oZXJpdGFuY2VfcGxhbm5lcihQbGFubmVySW5mbyAq cm9vdCkKIAkvKgogCSAqIElmIGl0IHR1cm5lZCBvdXQgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5n IHRoYXQgYWxsIHRoZSBjaGlsZHJlbiBhcmUgZHVtbXkKIAkgKiAocHJ1bmVkIG9yIGV4Y2x1 ZGVkIGJ5IGNvbnN0cmFpbnRzKSwgbm8gbmVlZCB0byBkbyB0aGUgc3RlcHMgYmVsb3cuCi0J ICogTGV0IGdyb3VwaW5nX3BsYW5uZXIgZmluaXNoIHVwIHRoZSBmaW5hbCBwYXRoLgorCSAq IEZvciByZWd1bGFyIGluaGVyaXRhbmNlIGNhc2UsIGl0J3MgcG9zc2libGUgdGhhdCB3ZSBv bmx5IG5lZWQgdG8gbW9kaWZ5CisJICogdGhlIHBhcmVudCB0YWJsZS4gIExldCBncm91cGlu Z19wbGFubmVyIGZpbmlzaCB1cCB0aGUgZmluYWwgcGF0aC4KIAkgKi8KLQlpZiAoSVNfRFVN TVlfUkVMKHBsYW5uZWRfcmVsKSkKKwlpZiAoIXBhcmVudF9ydGUtPmluaCB8fCBJU19EVU1N WV9SRUwocGxhbm5lZF9yZWwpKQogCXsKIAkJZ3JvdXBpbmdfcGxhbm5lcihyb290LCBmYWxz ZSwgcGxhbm5lZF9yZWwsIDAuMCk7CiAJCXJldHVybjsKQEAgLTE1ODAsNyArMTU3OSw3IEBA IGdyb3VwaW5nX3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsIGJvb2wgaW5oZXJpdGFuY2Vf dXBkYXRlLAogCQl9CiAKIAkJLyogUHJlcHJvY2VzcyB0YXJnZXRsaXN0ICovCi0JCXRsaXN0 ID0gcHJlcHJvY2Vzc190YXJnZXRsaXN0KHJvb3QpOworCQl0bGlzdCA9IHByZXByb2Nlc3Nf dGFyZ2V0bGlzdChyb290LCBpbmhlcml0YW5jZV91cGRhdGUpOwogCiAJCS8qCiAJCSAqIFdl IGFyZSBub3cgZG9uZSBoYWNraW5nIHVwIHRoZSBxdWVyeSdzIHRhcmdldGxpc3QuICBNb3N0 IG9mIHRoZQpAQCAtMTY3NCw2ICsxNjczLDE1IEBAIGdyb3VwaW5nX3BsYW5uZXIoUGxhbm5l ckluZm8gKnJvb3QsIGJvb2wgaW5oZXJpdGFuY2VfdXBkYXRlLAogCQkJCQkJCQkJCXN0YW5k YXJkX3FwX2NhbGxiYWNrLCAmcXBfZXh0cmEpOwogCiAJCS8qCisJCSAqIFF1ZXJ5IHBsYW5u aW5nIG1heSBoYXZlIGFkZGVkIHNvbWUgY29sdW1ucyB0byB0aGUgdG9wLWxldmVsIHRsaXN0 LAorCQkgKiB3aGljaCBoYXBwZW5zIHdoZW4gdGhlcmUgYXJlIHJvdyBtYXJrcyBhcHBsaWVk IHRvIGluaGVyaXRhbmNlCisJCSAqIHBhcmVudCByZWxhdGlvbnMgKGFkZGl0aW9uYWwganVu ayBjb2x1bW5zIG5lZWRlZCBmb3IgYXBwbHlpbmcgcm93CisJCSAqIG1hcmtzIGFyZSBhZGRl ZCBhZnRlciBleHBhbmRpbmcgaW5oZXJpdGFuY2UuKQorCQkgKi8KKwkJaWYgKGxpc3RfbGVu Z3RoKHRsaXN0KSA8IGxpc3RfbGVuZ3RoKHJvb3QtPnByb2Nlc3NlZF90bGlzdCkpCisJCQl0 bGlzdCA9IHJvb3QtPnByb2Nlc3NlZF90bGlzdDsKKworCQkvKgogCQkgKiBDb252ZXJ0IHRo ZSBxdWVyeSdzIHJlc3VsdCB0bGlzdCBpbnRvIFBhdGhUYXJnZXQgZm9ybWF0LgogCQkgKgog CQkgKiBOb3RlOiBpdCdzIGRlc2lyYWJsZSB0byBub3QgZG8gdGhpcyB0aWxsIGFmdGVyIHF1 ZXJ5X3BsYW5uZXIoKSwKQEAgLTIzNjAsNyArMjM2OCw3IEBAIHByZXByb2Nlc3Nfcm93bWFy a3MoUGxhbm5lckluZm8gKnJvb3QpCiAJCW5ld3JjLT5hbGxNYXJrVHlwZXMgPSAoMSA8PCBu ZXdyYy0+bWFya1R5cGUpOwogCQluZXdyYy0+c3RyZW5ndGggPSByYy0+c3RyZW5ndGg7CiAJ CW5ld3JjLT53YWl0UG9saWN5ID0gcmMtPndhaXRQb2xpY3k7Ci0JCW5ld3JjLT5pc1BhcmVu dCA9IGZhbHNlOworCQluZXdyYy0+aXNQYXJlbnQgPSBydGUtPmluaDsKIAogCQlwcm93bWFy a3MgPSBsYXBwZW5kKHByb3dtYXJrcywgbmV3cmMpOwogCX0KQEAgLTIzODUsNyArMjM5Myw3 IEBAIHByZXByb2Nlc3Nfcm93bWFya3MoUGxhbm5lckluZm8gKnJvb3QpCiAJCW5ld3JjLT5h bGxNYXJrVHlwZXMgPSAoMSA8PCBuZXdyYy0+bWFya1R5cGUpOwogCQluZXdyYy0+c3RyZW5n dGggPSBMQ1NfTk9ORTsKIAkJbmV3cmMtPndhaXRQb2xpY3kgPSBMb2NrV2FpdEJsb2NrOwkv KiBkb2Vzbid0IG1hdHRlciAqLwotCQluZXdyYy0+aXNQYXJlbnQgPSBmYWxzZTsKKwkJbmV3 cmMtPmlzUGFyZW50ID0gcnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTiA/IHJ0ZS0+aW5o IDogZmFsc2U7CiAKIAkJcHJvd21hcmtzID0gbGFwcGVuZChwcm93bWFya3MsIG5ld3JjKTsK IAl9CkBAIC02NzY1LDYgKzY3NzMsMTAgQEAgYXBwbHlfc2NhbmpvaW5fdGFyZ2V0X3RvX3Bh dGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJaW50CQkJbmFwcGluZm9zOwogCQkJTGlzdAkg ICAqY2hpbGRfc2NhbmpvaW5fdGFyZ2V0cyA9IE5JTDsKIAorCQkJLyogU2tpcCBwcm9jZXNz aW5nIHBydW5lZCBwYXJ0aXRpb25zLiAqLworCQkJaWYgKGNoaWxkX3JlbCA9PSBOVUxMKQor CQkJCWNvbnRpbnVlOworCiAJCQkvKiBUcmFuc2xhdGUgc2Nhbi9qb2luIHRhcmdldHMgZm9y IHRoaXMgY2hpbGQuICovCiAJCQlhcHBpbmZvcyA9IGZpbmRfYXBwaW5mb3NfYnlfcmVsaWRz KHJvb3QsIGNoaWxkX3JlbC0+cmVsaWRzLAogCQkJCQkJCQkJCQkgICAmbmFwcGluZm9zKTsK QEAgLTY4NjYsNiArNjg3OCwxMCBAQCBjcmVhdGVfcGFydGl0aW9ud2lzZV9ncm91cGluZ19w YXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJUmVsT3B0SW5mbyAqY2hpbGRfZ3JvdXBlZF9y ZWw7CiAJCVJlbE9wdEluZm8gKmNoaWxkX3BhcnRpYWxseV9ncm91cGVkX3JlbDsKIAorCQkv KiBTa2lwIHByb2Nlc3NpbmcgcHJ1bmVkIHBhcnRpdGlvbnMuICovCisJCWlmIChjaGlsZF9p bnB1dF9yZWwgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCiAJCS8qIElucHV0IGNoaWxkIHJl bCBtdXN0IGhhdmUgYSBwYXRoICovCiAJCUFzc2VydChjaGlsZF9pbnB1dF9yZWwtPnBhdGhs aXN0ICE9IE5JTCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRl eCA2ZDZlZjFjMzc2Li40NTQ4NzA2MDlhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9zZXRyZWZzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v c2V0cmVmcy5jCkBAIC0zMjYsNiArMzI2LDEyIEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxl KFBsYW5uZXJJbmZvICpyb290LCBib29sIHJlY3Vyc2luZykKIAkJCQkJCQkJCQkJCQkgIFVQ UEVSUkVMX0ZJTkFMLCBOVUxMKSkpCiAJCQkJCWFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKHJl bC0+c3Vicm9vdCwgdHJ1ZSk7CiAJCQl9CisJCQkvKgorCQkJICogQSBOVUxMIHJlbCBhbHNv IG1lYW5zIGFuIHVucGxhbm5lZCBzdWJxdWVyeSBydGUsIHNvIGFwcGx5CisJCQkgKiBmbGF0 dGVuX3VucGxhbm5lZF9ydGVzLgorCQkJICovCisJCQllbHNlCisJCQkJZmxhdHRlbl91bnBs YW5uZWRfcnRlcyhnbG9iLCBydGUpOwogCQl9CiAJCXJ0aSsrOwogCX0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB0bGlzdC5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3ByZXAvcHJlcHRsaXN0LmMKaW5kZXggODYwM2ZlZWYyYi4uOWMwYTFjMWIx YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHRsaXN0LmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHRsaXN0LmMKQEAgLTY3LDcg KzY3LDcgQEAgc3RhdGljIExpc3QgKmV4cGFuZF90YXJnZXRsaXN0KExpc3QgKnRsaXN0LCBp bnQgY29tbWFuZF90eXBlLAogICogaXMgYWxzbyBwcmVwcm9jZXNzZWQgKGFuZCB1cGRhdGVk IGluLXBsYWNlKS4KICAqLwogTGlzdCAqCi1wcmVwcm9jZXNzX3RhcmdldGxpc3QoUGxhbm5l ckluZm8gKnJvb3QpCitwcmVwcm9jZXNzX3RhcmdldGxpc3QoUGxhbm5lckluZm8gKnJvb3Qs IGJvb2wgaW5oZXJpdGFuY2VfdXBkYXRlKQogewogCVF1ZXJ5CSAgICpwYXJzZSA9IHJvb3Qt PnBhcnNlOwogCWludAkJCXJlc3VsdF9yZWxhdGlvbiA9IHBhcnNlLT5yZXN1bHRSZWxhdGlv bjsKQEAgLTEzNCw2ICsxMzQsMTUgQEAgcHJlcHJvY2Vzc190YXJnZXRsaXN0KFBsYW5uZXJJ bmZvICpyb290KQogCQlpZiAocmMtPnJ0aSAhPSByYy0+cHJ0aSkKIAkJCWNvbnRpbnVlOwog CisJCS8qCisJCSAqIEZvciBpbmhlcml0YW5jZSBwYXJlbnQgcm93IG1hcmtzLCB3ZSBkZWZl ciBhZGRpbmcganVuayBjb2x1bW5zCisJCSAqIHVudGlsIHdlJ3ZlIGFkZGVkIGNoaWxkIHJv dyBtYXJrcywgYmVjYXVzZSBzb21lIGNoaWxkcmVuIG1pZ2h0CisJCSAqIHJlcXVpcmUgZGlm ZmVyZW50IHJvdyBtYXJrIHR5cGVzIHdoaWNoIGFmZmVjdHMgd2hpY2gganVuayBjb2x1bW5z CisJCSAqIGFyZSBuZWVkZWQgaW4gdGhlIHRvcC1sZXZlbCB0bGlzdC4KKwkJICovCisJCWlm IChyYy0+aXNQYXJlbnQgJiYgIWluaGVyaXRhbmNlX3VwZGF0ZSkKKwkJCWNvbnRpbnVlOwor CiAJCWlmIChyYy0+YWxsTWFya1R5cGVzICYgfigxIDw8IFJPV19NQVJLX0NPUFkpKQogCQl7 CiAJCQkvKiBOZWVkIHRvIGZldGNoIFRJRCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJl cC9wcmVwdW5pb24uYwppbmRleCBlZjFmOTc4ODg5Li5jNjgxNzc1N2U3IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwpAQCAtMzksMTUgKzM5LDE5IEBACiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAj aW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2NsYXVz ZXMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgIm9wdGltaXpl ci9wYXRobm9kZS5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgogI2luY2x1ZGUg Im9wdGltaXplci9wbGFubWFpbi5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgi CiAjaW5jbHVkZSAib3B0aW1pemVyL3ByZXAuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcmVz dHJpY3RpbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3RsaXN0LmgiCisjaW5jbHVkZSAi b3B0aW1pemVyL3Zhci5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jb2VyY2UuaCIKICNp bmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVkZSAicGFydGl0aW9uaW5nL3Bh cnRwcnVuZS5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0 aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3NlbGZ1bmNzLmgiCkBAIC0xMDAsMjIgKzEw NCwyMiBAQCBzdGF0aWMgTGlzdCAqZ2VuZXJhdGVfYXBwZW5kX3RsaXN0KExpc3QgKmNvbFR5 cGVzLCBMaXN0ICpjb2xDb2xsYXRpb25zLAogCQkJCQkgIExpc3QgKnJlZm5hbWVzX3RsaXN0 KTsKIHN0YXRpYyBMaXN0ICpnZW5lcmF0ZV9zZXRvcF9ncm91cGxpc3QoU2V0T3BlcmF0aW9u U3RtdCAqb3AsIExpc3QgKnRhcmdldGxpc3QpOwogc3RhdGljIHZvaWQgZXhwYW5kX2luaGVy aXRlZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpydGUsCi0J CQkJCQkgSW5kZXggcnRpKTsKKwkJCQkJCSBJbmRleCBydGksIFJlbE9wdEluZm8gKnJlbCk7 CiBzdGF0aWMgdm9pZCBleHBhbmRfcGFydGl0aW9uZWRfcnRlbnRyeShQbGFubmVySW5mbyAq cm9vdCwKIAkJCQkJCSAgIFJhbmdlVGJsRW50cnkgKnBhcmVudHJ0ZSwKLQkJCQkJCSAgIElu ZGV4IHBhcmVudFJUaW5kZXgsIFJlbGF0aW9uIHBhcmVudHJlbCwKLQkJCQkJCSAgIFBsYW5S b3dNYXJrICp0b3BfcGFyZW50cmMsIExPQ0tNT0RFIGxvY2ttb2RlLAotCQkJCQkJICAgTGlz dCAqKmFwcGluZm9zKTsKLXN0YXRpYyB2b2lkIGV4cGFuZF9zaW5nbGVfaW5oZXJpdGFuY2Vf Y2hpbGQoUGxhbm5lckluZm8gKnJvb3QsCi0JCQkJCQkJCVJhbmdlVGJsRW50cnkgKnBhcmVu dHJ0ZSwKLQkJCQkJCQkJSW5kZXggcGFyZW50UlRpbmRleCwgUmVsYXRpb24gcGFyZW50cmVs LAotCQkJCQkJCQlQbGFuUm93TWFyayAqdG9wX3BhcmVudHJjLCBSZWxhdGlvbiBjaGlsZHJl bCwKLQkJCQkJCQkJTGlzdCAqKmFwcGluZm9zLCBSYW5nZVRibEVudHJ5ICoqY2hpbGRydGVf cCwKLQkJCQkJCQkJSW5kZXggKmNoaWxkUlRpbmRleF9wKTsKLXN0YXRpYyB2b2lkIG1ha2Vf aW5oX3RyYW5zbGF0aW9uX2xpc3QoUmVsYXRpb24gb2xkcmVsYXRpb24sCi0JCQkJCQkgIFJl bGF0aW9uIG5ld3JlbGF0aW9uLAotCQkJCQkJICBJbmRleCBuZXd2YXJubywKLQkJCQkJCSAg TGlzdCAqKnRyYW5zbGF0ZWRfdmFycyk7CisJCQkJCQkgICBJbmRleCBwYXJlbnRSVGluZGV4 LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwpOworc3RhdGljIFJlbE9wdEluZm8gKmFkZF9pbmhl cml0YW5jZV9jaGlsZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkgIFJhbmdlVGJs RW50cnkgKnBhcmVudHJ0ZSwKKwkJCQkJCSAgSW5kZXggcGFyZW50UlRpbmRleCwgUmVsT3B0 SW5mbyAqcGFyZW50cmVsLAorCQkJCQkJICBQbGFuUm93TWFyayAqdG9wX3BhcmVudHJjLCBS ZWxhdGlvbiBjaGlsZHJlbCk7CitzdGF0aWMgdm9pZCBtYWtlX2luaF90cmFuc2xhdGlvbl9s aXN0KFR1cGxlRGVzYyBvbGRfdHVwZGVzYywKKwkJCQkJCSAgVHVwbGVEZXNjIG5ld190dXBk ZXNjLAorCQkJCQkJICBPaWQgZnJvbV9yZWwsIE9pZCB0b19yZWwsCisJCQkJCQkgIEluZGV4 IG5ld3Zhcm5vLCBMaXN0ICoqdHJhbnNsYXRlZF92YXJzKTsKK3N0YXRpYyBSZWxPcHRJbmZv ICpidWlsZF9hcHBlbmRfY2hpbGRfcmVsKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkgICBS ZWxPcHRJbmZvICpwYXJlbnQsCisJCQkJCSAgIEluZGV4IGNoaWxkUlRpbmRleCk7CitzdGF0 aWMgTGlzdCAqYWRkX3Jvd21hcmtfanVua19jb2x1bW5zKFBsYW5uZXJJbmZvICpyb290LCBQ bGFuUm93TWFyayAqcmMpOwogc3RhdGljIEJpdG1hcHNldCAqdHJhbnNsYXRlX2NvbF9wcml2 cyhjb25zdCBCaXRtYXBzZXQgKnBhcmVudF9wcml2cywKIAkJCQkJTGlzdCAqdHJhbnNsYXRl ZF92YXJzKTsKIHN0YXRpYyBOb2RlICphZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3Io Tm9kZSAqbm9kZSwKQEAgLTE0NjMsNDIgKzE0NjcsMTA3IEBAIGdlbmVyYXRlX3NldG9wX2dy b3VwbGlzdChTZXRPcGVyYXRpb25TdG10ICpvcCwgTGlzdCAqdGFyZ2V0bGlzdCkKIAogCiAv KgotICogZXhwYW5kX2luaGVyaXRlZF90YWJsZXMKLSAqCQlFeHBhbmQgZWFjaCByYW5nZXRh YmxlIGVudHJ5IHRoYXQgcmVwcmVzZW50cyBhbiBpbmhlcml0YW5jZSBzZXQKLSAqCQlpbnRv IGFuICJhcHBlbmQgcmVsYXRpb24iLiAgQXQgdGhlIGNvbmNsdXNpb24gb2YgdGhpcyBwcm9j ZXNzLAotICoJCXRoZSAiaW5oIiBmbGFnIGlzIHNldCBpbiBhbGwgYW5kIG9ubHkgdGhvc2Ug UlRFcyB0aGF0IGFyZSBhcHBlbmQKLSAqCQlyZWxhdGlvbiBwYXJlbnRzLgorICogZXhwYW5k X2FwcGVuZF9yZWwKKyAqCQlUaGlzIGluaXRpYWxpemVzIFJlbE9wdEluZm9zIGZvciBhbiBh cHBlbmRyZWwncyBjaGlsZCByZWxhdGlvbnMuCisgKgorICogJ3JlbCcgaXMgdGhlIGFwcGVu ZHJlbCBwYXJlbnQsIHdob3NlIHJhbmdlIHRhYmxlIGVudHJ5ICgncnRlJykgaGFzIGJlZW4K KyAqIG1hcmtlZCB0byByZXF1aXJlIGFkZGluZyBjaGlsZHJlbi4gIEFuIGFwcGVuZHJlbCBw YXJlbnQgY291bGQgZWl0aGVyCisgKiBiZSBhIHN1YnF1ZXJ5IChpZiB3ZSBmbGF0dGVuZWQg VU5JT04gQUxMIHF1ZXJ5KSBvciBhIHRhYmxlIHRoYXQncyBrbm93bgorICogdG8gaGF2ZSBp bmhlcml0YW5jZSBjaGlsZHJlbi4gIFRoZSBsYXR0ZXIgY29uc2lzdHMgb2YgYm90aCByZWd1 bGFyCisgKiBpbmhlcml0YW5jZSBwYXJlbnRzIGFuZCBwYXJ0aXRpb25lZCB0YWJsZXMuCisg KgorICogRm9yIGEgc3VicXVlcnkgcGFyZW50LCB0aGVyZSBpcyBub3QgbXVjaCB0byBiZSBk b25lIGhlcmUgYmVjYXVzZSB0aGUKKyAqIGNoaWxkcmVuJ3MgUlRFcyBhcmUgYWxyZWFkeSBw cmVzZW50IGluIHRoZSBxdWVyeSwgc28gd2UganVzdCBpbml0aWFsaXplCisgKiBSZWxPcHRJ bmZvcyBmb3IgdGhlbS4gIEFsc28sIHRoZSBBcHBlbmRSZWxJbmZvcyBmb3IgY2hpbGQgc3Vi cXVlcmllcworICogaGF2ZSBhbHJlYWR5IGJlZW4gYWRkZWQuCisgKgorICogRm9yIHRhYmxl cywgd2UgbmVlZCB0byBhZGQgdGhlIGNoaWxkcmVuIHRvIHRoZSByYW5nZSB0YWJsZSBhbmQg aW5pdGlhbGl6ZQorICogQXBwZW5kUmVsSW5mb3MsIFJlbE9wdEluZm9zLCBhbmQgUGxhblJv d01hcmtzIChpZiBhbnkpIGZvciB0aGVtLiAgRm9yCisgKiBhIHBhcnRpdGlvbmVkIHBhcmVu dCwgd2Ugb25seSBhZGQgdGhlIGNoaWxkcmVuIHJlbWFpbmluZyBhZnRlciBwcnVuaW5nLgor ICogRm9yIHJlZ3VsYXIgaW5oZXJpdGFuY2UgcGFyZW50cywgd2UgZmluZCB0aGUgY2hpbGRy ZW4gdXNpbmcKKyAqIGZpbmRfYWxsX2luaGVyaXRvcnMgYW5kIGFkZCBhbGwgb2YgdGhlbS4K KyAqCisgKiBJZiBpdCB0dXJucyBvdXQgdGhhdCB0aGVyZSBhcmUgbm8gY2hpbGRyZW4sIHRo ZW4gd2Ugc2V0IHJ0ZS0+aW5oIHRvIGZhbHNlCisgKiB0byBsZXQgdGhlIGNhbGxlciBrbm93 IHRoYXQgb25seSB0aGUgcGFyZW50IHRhYmxlIG5lZWRzIHRvIGJlIHNjYW5uZWQuICBUaGUK KyAqIGNhbGxlciBjYW4gYWNjb3JkaW5nbHkgc3dpdGNoIHRvIGEgbm9uLUFwcGVuZCBwYXRo LiAgRm9yIGEgcGFydGl0aW9uZWQKKyAqIHBhcmVudCwgdGhhdCBtZWFucyBhbiBlbXB0eSBy ZWxhdGlvbiBiZWNhdXNlIHBhcmVudHMgdGhlbXNlbHZlcyBjb250YWluIG5vCisgKiBkYXRh LgorICoKKyAqIEZvciB0aGUgcmVndWxhciBpbmhlcml0YW5jZSBjYXNlLCB0aGUgcGFyZW50 IGFsc28gZ2V0cyBhbm90aGVyIFJURSB3aXRoCisgKiBpbmggPSBmYWxzZSB0byByZXByZXNl bnQgaXQgYXMgYW4gYXBwZW5kcmVsIGNoaWxkLiAgVGhlIG9yaWdpbmFsIFJURSBpcworICog Y29uc2lkZXJlZCB0byByZXByZXNlbnQgdGhlIHdob2xlIGluaGVyaXRhbmNlIHNldC4KICAq Lwogdm9pZAotZXhwYW5kX2luaGVyaXRlZF90YWJsZXMoUGxhbm5lckluZm8gKnJvb3QpCitl eHBhbmRfYXBwZW5kX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBS YW5nZVRibEVudHJ5ICpydGUsCisJCQkJICBJbmRleCBydGkpCiB7Ci0JSW5kZXgJCW5ydGVz OwotCUluZGV4CQlydGk7Ci0JTGlzdENlbGwgICAqcmw7CisJQXNzZXJ0KHJ0ZS0+aW5oKTsK KwkvKiBJbmhlcml0YW5jZSBwYXJlbnQgKHBhcnRpdGlvbmVkIG9yIG5vdCkgb3IgVU5JT04g QUxMIHBhcmVudCBzdWJxdWVyeS4gKi8KKwlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9S RUxBVElPTiB8fCBydGUtPnJ0ZWtpbmQgPT0gUlRFX1NVQlFVRVJZKTsKIAogCS8qCi0JICog ZXhwYW5kX2luaGVyaXRlZF9ydGVudHJ5IG1heSBhZGQgUlRFcyB0byBwYXJzZS0+cnRhYmxl LiBUaGUgZnVuY3Rpb24gaXMKLQkgKiBleHBlY3RlZCB0byByZWN1cnNpdmVseSBoYW5kbGUg YW55IFJURXMgdGhhdCBpdCBjcmVhdGVzIHdpdGggaW5oPXRydWUuCi0JICogU28ganVzdCBz Y2FuIGFzIGZhciBhcyB0aGUgb3JpZ2luYWwgZW5kIG9mIHRoZSBydGFibGUgbGlzdC4KKwkg KiBVTklPTiBBTEwgY2hpbGRyZW4gYWxyZWFkeSBnb3QgUlRFcyBhbmQgQXBwZW5kUmVsSW5m b3MsIHNvIGp1c3QgYnVpbGQKKwkgKiBSZWxPcHRJbmZvcyBhbmQgcmV0dXJuLgorCSAqCisJ ICogSXQgbWlnaHQgYmUgYSBiaXQgb2RkIHRoYXQgdGhpcyBjb2RlIGlzIGluIHRoaXMsIGJl Y2F1c2UgdGhlcmUgaXMKKwkgKiBub3RoaW5nIHRvIGV4cGFuZCByZWFsbHkuCiAJICovCi0J bnJ0ZXMgPSBsaXN0X2xlbmd0aChyb290LT5wYXJzZS0+cnRhYmxlKTsKLQlybCA9IGxpc3Rf aGVhZChyb290LT5wYXJzZS0+cnRhYmxlKTsKLQlmb3IgKHJ0aSA9IDE7IHJ0aSA8PSBucnRl czsgcnRpKyspCisJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkpCiAJewotCQlS YW5nZVRibEVudHJ5ICpydGUgPSAoUmFuZ2VUYmxFbnRyeSAqKSBsZmlyc3QocmwpOworCQlM aXN0Q2VsbCAgICpsOwogCi0JCWV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeShyb290LCBydGUs IHJ0aSk7Ci0JCXJsID0gbG5leHQocmwpOworCQkvKgorCQkgKiBXZSBkb24ndCBuZWVkIHRv IHVzZSBleHBhbmRfcGxhbm5lcl9hcnJheXMgaW4gdGhpcyBjYXNlLCBiZWNhdXNlCisJCSAq IG5vIG5ldyBjaGlsZCBSVEVzIGFyZSBjcmVhdGVkLiAgc2V0dXBfc2ltcGxlX3JlbF9hcnJh eXMoKSBhbmQKKwkJICogc2V0dXBfYXBwZW5kX3JlbF9hcnJheSB3b3VsZCd2ZSBjb25zaWRl cmVkIHRoZXNlIGNoaWxkIFJURXMgd2hlbgorCQkgKiBhbGxvY2F0aW5nIHNwYWNlIGZvciB2 YXJpb3VzIGFycmF5cy4KKwkJICovCisJCWZvcmVhY2gobCwgcm9vdC0+YXBwZW5kX3JlbF9s aXN0KQorCQl7CisJCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvID0gbGZpcnN0KGwpOworCQkJ SW5kZXgJCWNoaWxkUlRpbmRleCA9IGFwcGluZm8tPmNoaWxkX3JlbGlkOworCisJCQlpZiAo YXBwaW5mby0+cGFyZW50X3JlbGlkICE9IHJ0aSkKKwkJCQljb250aW51ZTsKKworCQkJQXNz ZXJ0KGNoaWxkUlRpbmRleCA8IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlfc2l6ZSk7CisJCQlB c3NlcnQocm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtjaGlsZFJUaW5kZXhdICE9IE5VTEwpOwor CisJCQkvKgorCQkJICogV2Ugc2V0IHRoZSBjb3JyZWN0IHZhbHVlIG9mIGJhc2VyZXN0cmlj aW5mbyBhbmQKKwkJCSAqIGJhc2VyZXN0cmljdF9taW5fc2VjdXJpdHkgYmVsb3cuCisJCQkg Ki8KKwkJCXJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbY2hpbGRSVGluZGV4XSA9CisJCQkJYnVp bGRfYXBwZW5kX2NoaWxkX3JlbChyb290LCByZWwsIGFwcGluZm8tPmNoaWxkX3JlbGlkKTsK KwkJfQorCX0KKwllbHNlCisJeworCQlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9SRUxB VElPTik7CisJCUFzc2VydChoYXNfc3ViY2xhc3MocnRlLT5yZWxpZCkpOworCisJCS8qCisJ CSAqIFRoZSByZXdyaXRlciBzaG91bGQgYWxyZWFkeSBoYXZlIG9idGFpbmVkIGFuIGFwcHJv cHJpYXRlIGxvY2sgb24KKwkJICogZWFjaCByZWxhdGlvbiBuYW1lZCBpbiB0aGUgcXVlcnku ICBIb3dldmVyLCBmb3IgZWFjaCBjaGlsZCByZWxhdGlvbgorCQkgKiB3ZSBhZGQgdG8gdGhl IHF1ZXJ5LCB3ZSBtdXN0IG9idGFpbiBhbiBhcHByb3ByaWF0ZSBsb2NrLCBiZWNhdXNlCisJ CSAqIHRoaXMgd2lsbCBiZSB0aGUgZmlyc3QgdXNlIG9mIHRob3NlIHJlbGF0aW9ucyBpbiB0 aGUKKwkJICogcGFyc2UvcmV3cml0ZS9wbGFuIHBpcGVsaW5lLiAgQ2hpbGQgcmVscyBzaG91 bGQgdXNlIHRoZSBzYW1lCisJCSAqIGxvY2ttb2RlIGFzIHRoZWlyIHBhcmVudC4KKwkJICov CisJCUFzc2VydChydGUtPnJlbGxvY2ttb2RlICE9IE5vTG9jayk7CisKKwkJaWYgKHJ0ZS0+ cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCQkJZXhwYW5kX3BhcnRp dGlvbmVkX3J0ZW50cnkocm9vdCwgcnRlLCBydGksIHJlbCk7CisJCWVsc2UKKwkJCWV4cGFu ZF9pbmhlcml0ZWRfcnRlbnRyeShyb290LCBydGUsIHJ0aSwgcmVsKTsKIAl9CiB9CiAKIC8q CiAgKiBleHBhbmRfaW5oZXJpdGVkX3J0ZW50cnkKLSAqCQlDaGVjayB3aGV0aGVyIGEgcmFu Z2V0YWJsZSBlbnRyeSByZXByZXNlbnRzIGFuIGluaGVyaXRhbmNlIHNldC4KLSAqCQlJZiBz bywgYWRkIGVudHJpZXMgZm9yIGFsbCB0aGUgY2hpbGQgdGFibGVzIHRvIHRoZSBxdWVyeSdz Ci0gKgkJcmFuZ2V0YWJsZSwgYW5kIGJ1aWxkIEFwcGVuZFJlbEluZm8gbm9kZXMgZm9yIGFs bCB0aGUgY2hpbGQgdGFibGVzCi0gKgkJYW5kIGFkZCB0aGVtIHRvIHJvb3QtPmFwcGVuZF9y ZWxfbGlzdC4gIElmIG5vdCwgY2xlYXIgdGhlIGVudHJ5J3MKLSAqCQkiaW5oIiBmbGFnIHRv IHByZXZlbnQgbGF0ZXIgY29kZSBmcm9tIGxvb2tpbmcgZm9yIEFwcGVuZFJlbEluZm9zLgor ICoJCUFkZCBlbnRyaWVzIGZvciBhbGwgdGhlIGNoaWxkIHRhYmxlcyB0byB0aGUgcXVlcnkn cyByYW5nZXRhYmxlLCBhbmQKKyAqCQlidWlsZCBBcHBlbmRSZWxJbmZvIG5vZGVzIGZvciBh bGwgdGhlIGNoaWxkIHRhYmxlcyBhbmQgYWRkIHRoZW0gdG8KKyAqCQlyb290LT5hcHBlbmRf cmVsX2xpc3QuCiAgKgogICogTm90ZSB0aGF0IHRoZSBvcmlnaW5hbCBSVEUgaXMgY29uc2lk ZXJlZCB0byByZXByZXNlbnQgdGhlIHdob2xlCiAgKiBpbmhlcml0YW5jZSBzZXQuICBUaGUg Zmlyc3Qgb2YgdGhlIGdlbmVyYXRlZCBSVEVzIGlzIGFuIFJURSBmb3IgdGhlIHNhbWUKQEAg LTE1MDksNDUgKzE1NzgsMjIgQEAgZXhwYW5kX2luaGVyaXRlZF90YWJsZXMoUGxhbm5lcklu Zm8gKnJvb3QpCiAgKiByZWd1bGFyIGluaGVyaXRhbmNlLCBhIHBhcmVudCBSVEUgbXVzdCBh bHdheXMgaGF2ZSBhdCBsZWFzdCB0d28gYXNzb2NpYXRlZAogICogQXBwZW5kUmVsSW5mb3M6 IG9uZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJlbnQgdGFibGUgYXMgYSBzaW1wbGUgbWVt YmVyIG9mCiAgKiBpbmhlcml0YW5jZSBzZXQgYW5kIG9uZSBvciBtb3JlIGNvcnJlc3BvbmRp bmcgdG8gdGhlIGFjdHVhbCBjaGlsZHJlbi4KLSAqIFNpbmNlIGEgcGFydGl0aW9uZWQgdGFi bGUgaXMgbm90IHNjYW5uZWQsIGl0IG1pZ2h0IGhhdmUgb25seSBvbmUgYXNzb2NpYXRlZAot ICogQXBwZW5kUmVsSW5mby4KICAqLwogc3RhdGljIHZvaWQKLWV4cGFuZF9pbmhlcml0ZWRf cnRlbnRyeShQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlLCBJbmRleCBy dGkpCitleHBhbmRfaW5oZXJpdGVkX3J0ZW50cnkoUGxhbm5lckluZm8gKnJvb3QsIFJhbmdl VGJsRW50cnkgKnJ0ZSwgSW5kZXggcnRpLAorCQkJCQkJIFJlbE9wdEluZm8gKnJlbCkKIHsK IAlPaWQJCQlwYXJlbnRPSUQ7CiAJUGxhblJvd01hcmsgKm9sZHJjOwotCVJlbGF0aW9uCW9s ZHJlbGF0aW9uOwotCUxPQ0tNT0RFCWxvY2ttb2RlOworCUxPQ0tNT0RFCWxvY2ttb2RlID0g cnRlLT5yZWxsb2NrbW9kZTsKIAlMaXN0CSAgICppbmhPSURzOwogCUxpc3RDZWxsICAgKmw7 CisJaW50CQkJbnVtX2NoaWxkcmVuOworCWludAkJCW51bV9jaGlsZHJlbl9hZGRlZCA9IDA7 CiAKLQkvKiBEb2VzIFJUIGVudHJ5IGFsbG93IGluaGVyaXRhbmNlPyAqLwotCWlmICghcnRl LT5pbmgpCi0JCXJldHVybjsKLQkvKiBJZ25vcmUgYW55IGFscmVhZHktZXhwYW5kZWQgVU5J T04gQUxMIG5vZGVzICovCi0JaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCi0J ewotCQlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9TVUJRVUVSWSk7Ci0JCXJldHVybjsK LQl9Ci0JLyogRmFzdCBwYXRoIGZvciBjb21tb24gY2FzZSBvZiBjaGlsZGxlc3MgdGFibGUg Ki8KKwlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTik7CisJQXNzZXJ0KGxv Y2ttb2RlICE9IE5vTG9jayk7CiAJcGFyZW50T0lEID0gcnRlLT5yZWxpZDsKLQlpZiAoIWhh c19zdWJjbGFzcyhwYXJlbnRPSUQpKQotCXsKLQkJLyogQ2xlYXIgZmxhZyBiZWZvcmUgcmV0 dXJuaW5nICovCi0JCXJ0ZS0+aW5oID0gZmFsc2U7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgot CSAqIFRoZSByZXdyaXRlciBzaG91bGQgYWxyZWFkeSBoYXZlIG9idGFpbmVkIGFuIGFwcHJv cHJpYXRlIGxvY2sgb24gZWFjaAotCSAqIHJlbGF0aW9uIG5hbWVkIGluIHRoZSBxdWVyeS4g IEhvd2V2ZXIsIGZvciBlYWNoIGNoaWxkIHJlbGF0aW9uIHdlIGFkZAotCSAqIHRvIHRoZSBx dWVyeSwgd2UgbXVzdCBvYnRhaW4gYW4gYXBwcm9wcmlhdGUgbG9jaywgYmVjYXVzZSB0aGlz IHdpbGwgYmUKLQkgKiB0aGUgZmlyc3QgdXNlIG9mIHRob3NlIHJlbGF0aW9ucyBpbiB0aGUg cGFyc2UvcmV3cml0ZS9wbGFuIHBpcGVsaW5lLgotCSAqIENoaWxkIHJlbHMgc2hvdWxkIHVz ZSB0aGUgc2FtZSBsb2NrbW9kZSBhcyB0aGVpciBwYXJlbnQuCi0JICovCi0JbG9ja21vZGUg PSBydGUtPnJlbGxvY2ttb2RlOwogCiAJLyogU2NhbiBmb3IgYWxsIG1lbWJlcnMgb2YgaW5o ZXJpdGFuY2Ugc2V0LCBhY3F1aXJlIG5lZWRlZCBsb2NrcyAqLwogCWluaE9JRHMgPSBmaW5k X2FsbF9pbmhlcml0b3JzKHBhcmVudE9JRCwgbG9ja21vZGUsIE5VTEwpOwpAQCAtMTU1Nyw3 ICsxNjAzLDggQEAgZXhwYW5kX2luaGVyaXRlZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290 LCBSYW5nZVRibEVudHJ5ICpydGUsIEluZGV4IHJ0aSkKIAkgKiBjYXNlLiAgVGhpcyBjb3Vs ZCBoYXBwZW4gZGVzcGl0ZSBhYm92ZSBoYXNfc3ViY2xhc3MoKSBjaGVjaywgaWYgdGFibGUK IAkgKiBvbmNlIGhhZCBhIGNoaWxkIGJ1dCBubyBsb25nZXIgZG9lcy4KIAkgKi8KLQlpZiAo bGlzdF9sZW5ndGgoaW5oT0lEcykgPCAyKQorCW51bV9jaGlsZHJlbiA9IGxpc3RfbGVuZ3Ro KGluaE9JRHMpOworCWlmIChudW1fY2hpbGRyZW4gPCAyKQogCXsKIAkJLyogQ2xlYXIgZmxh ZyBiZWZvcmUgcmV0dXJuaW5nICovCiAJCXJ0ZS0+aW5oID0gZmFsc2U7CkBAIC0xNTY1LDI3 NyArMTYxMiwyNDYgQEAgZXhwYW5kX2luaGVyaXRlZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpy b290LCBSYW5nZVRibEVudHJ5ICpydGUsIEluZGV4IHJ0aSkKIAl9CiAKIAkvKgotCSAqIElm IHBhcmVudCByZWxhdGlvbiBpcyBzZWxlY3RlZCBGT1IgVVBEQVRFL1NIQVJFLCB3ZSBuZWVk IHRvIG1hcmsgaXRzCi0JICogUGxhblJvd01hcmsgYXMgaXNQYXJlbnQgPSB0cnVlLCBhbmQg Z2VuZXJhdGUgYSBuZXcgUGxhblJvd01hcmsgZm9yIGVhY2gKLQkgKiBjaGlsZC4KKwkgKiBJ ZiBwYXJlbnQgcmVsYXRpb24gaXMgc2VsZWN0ZWQgRk9SIFVQREFURS9TSEFSRSwgcHJlcHJv Y2Vzc19yb3dtYXJrcworCSAqIHNob3VsZCd2ZSBzZXQgaXNQYXJlbnQgPSB0cnVlLiAgV2Un bGwgZ2VuZXJhdGUgYSBuZXcgUGxhblJvd01hcmsgZm9yCisJICogZWFjaCBjaGlsZC4KIAkg Ki8KIAlvbGRyYyA9IGdldF9wbGFuX3Jvd21hcmsocm9vdC0+cm93TWFya3MsIHJ0aSk7Ci0J aWYgKG9sZHJjKQotCQlvbGRyYy0+aXNQYXJlbnQgPSB0cnVlOworCUFzc2VydChvbGRyYyA9 PSBOVUxMIHx8IG9sZHJjLT5pc1BhcmVudCk7CiAKIAkvKgotCSAqIE11c3Qgb3BlbiB0aGUg cGFyZW50IHJlbGF0aW9uIHRvIGV4YW1pbmUgaXRzIHR1cGRlc2MuICBXZSBuZWVkIG5vdCBs b2NrCi0JICogaXQ7IHdlIGFzc3VtZSB0aGUgcmV3cml0ZXIgYWxyZWFkeSBkaWQuCisJICog TXVzdCBleHBhbmQgUGxhbm5lckluZm8gYXJyYXlzIGJ5IG51bV9jaGlsZHJlbiBiZWZvcmUg d2UgY2FuIGFkZAorCSAqIGNoaWxkcmVuLgogCSAqLwotCW9sZHJlbGF0aW9uID0gaGVhcF9v cGVuKHBhcmVudE9JRCwgTm9Mb2NrKTsKKwlleHBhbmRfcGxhbm5lcl9hcnJheXMocm9vdCwg bnVtX2NoaWxkcmVuKTsKIAotCS8qIFNjYW4gdGhlIGluaGVyaXRhbmNlIHNldCBhbmQgZXhw YW5kIGl0ICovCi0JaWYgKFJlbGF0aW9uR2V0UGFydGl0aW9uRGVzYyhvbGRyZWxhdGlvbikg IT0gTlVMTCkKKwlmb3JlYWNoKGwsIGluaE9JRHMpCiAJewotCQlBc3NlcnQocnRlLT5yZWxr aW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpOworCQlPaWQJCQljaGlsZE9JRCA9 IGxmaXJzdF9vaWQobCk7CisJCVJlbGF0aW9uCW5ld3JlbGF0aW9uOworCQlSZWxPcHRJbmZv ICpjaGlsZHJlbDsKKworCQkvKiBBbHJlYWR5IGxvY2tlZCBhYm92ZS4gKi8KKwkJbmV3cmVs YXRpb24gPSBoZWFwX29wZW4oY2hpbGRPSUQsIE5vTG9jayk7CiAKIAkJLyoKLQkJICogSWYg dGhpcyB0YWJsZSBoYXMgcGFydGl0aW9ucywgcmVjdXJzaXZlbHkgZXhwYW5kIHRoZW0gaW4g dGhlIG9yZGVyCi0JCSAqIGluIHdoaWNoIHRoZXkgYXBwZWFyIGluIHRoZSBQYXJ0aXRpb25E ZXNjLiAgV2hpbGUgYXQgaXQsIGFsc28KLQkJICogZXh0cmFjdCB0aGUgcGFydGl0aW9uIGtl eSBjb2x1bW5zIG9mIGFsbCB0aGUgcGFydGl0aW9uZWQgdGFibGVzLgorCQkgKiBJdCBpcyBw b3NzaWJsZSB0aGF0IHRoZSBwYXJlbnQgdGFibGUgaGFzIGNoaWxkcmVuIHRoYXQgYXJlIHRl bXAKKwkJICogdGFibGVzIG9mIG90aGVyIGJhY2tlbmRzLiAgV2UgY2Fubm90IHNhZmVseSBh Y2Nlc3Mgc3VjaCB0YWJsZXMKKwkJICogKGJlY2F1c2Ugb2YgYnVmZmVyaW5nIGlzc3Vlcyks IGFuZCB0aGUgYmVzdCB0aGluZyB0byBkbyBzZWVtcworCQkgKiB0byBiZSB0byBzaWxlbnRs eSBpZ25vcmUgdGhlbS4KIAkJICovCi0JCWV4cGFuZF9wYXJ0aXRpb25lZF9ydGVudHJ5KHJv b3QsIHJ0ZSwgcnRpLCBvbGRyZWxhdGlvbiwgb2xkcmMsCi0JCQkJCQkJCSAgIGxvY2ttb2Rl LCAmcm9vdC0+YXBwZW5kX3JlbF9saXN0KTsKLQl9Ci0JZWxzZQotCXsKLQkJTGlzdAkgICAq YXBwaW5mb3MgPSBOSUw7Ci0JCVJhbmdlVGJsRW50cnkgKmNoaWxkcnRlOwotCQlJbmRleAkJ Y2hpbGRSVGluZGV4OwotCi0JCS8qCi0JCSAqIFRoaXMgdGFibGUgaGFzIG5vIHBhcnRpdGlv bnMuICBFeHBhbmQgYW55IHBsYWluIGluaGVyaXRhbmNlCi0JCSAqIGNoaWxkcmVuIGluIHRo ZSBvcmRlciB0aGUgT0lEcyB3ZXJlIHJldHVybmVkIGJ5Ci0JCSAqIGZpbmRfYWxsX2luaGVy aXRvcnMuCi0JCSAqLwotCQlmb3JlYWNoKGwsIGluaE9JRHMpCisJCWlmIChSRUxBVElPTl9J U19PVEhFUl9URU1QKG5ld3JlbGF0aW9uKSkKIAkJewotCQkJT2lkCQkJY2hpbGRPSUQgPSBs Zmlyc3Rfb2lkKGwpOwotCQkJUmVsYXRpb24JbmV3cmVsYXRpb247Ci0KLQkJCS8qIE9wZW4g cmVsIGlmIG5lZWRlZDsgd2UgYWxyZWFkeSBoYXZlIHJlcXVpcmVkIGxvY2tzICovCi0JCQlp ZiAoY2hpbGRPSUQgIT0gcGFyZW50T0lEKQotCQkJCW5ld3JlbGF0aW9uID0gaGVhcF9vcGVu KGNoaWxkT0lELCBOb0xvY2spOwotCQkJZWxzZQotCQkJCW5ld3JlbGF0aW9uID0gb2xkcmVs YXRpb247Ci0KLQkJCS8qCi0JCQkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBwYXJlbnQg dGFibGUgaGFzIGNoaWxkcmVuIHRoYXQgYXJlIHRlbXAKLQkJCSAqIHRhYmxlcyBvZiBvdGhl ciBiYWNrZW5kcy4gIFdlIGNhbm5vdCBzYWZlbHkgYWNjZXNzIHN1Y2ggdGFibGVzCi0JCQkg KiAoYmVjYXVzZSBvZiBidWZmZXJpbmcgaXNzdWVzKSwgYW5kIHRoZSBiZXN0IHRoaW5nIHRv IGRvIHNlZW1zCi0JCQkgKiB0byBiZSB0byBzaWxlbnRseSBpZ25vcmUgdGhlbS4KLQkJCSAq LwotCQkJaWYgKGNoaWxkT0lEICE9IHBhcmVudE9JRCAmJiBSRUxBVElPTl9JU19PVEhFUl9U RU1QKG5ld3JlbGF0aW9uKSkKLQkJCXsKLQkJCQloZWFwX2Nsb3NlKG5ld3JlbGF0aW9uLCBs b2NrbW9kZSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCWV4cGFuZF9zaW5nbGVfaW5o ZXJpdGFuY2VfY2hpbGQocm9vdCwgcnRlLCBydGksIG9sZHJlbGF0aW9uLCBvbGRyYywKLQkJ CQkJCQkJCQkJbmV3cmVsYXRpb24sCi0JCQkJCQkJCQkJCSZhcHBpbmZvcywgJmNoaWxkcnRl LAotCQkJCQkJCQkJCQkmY2hpbGRSVGluZGV4KTsKLQotCQkJLyogQ2xvc2UgY2hpbGQgcmVs YXRpb25zLCBidXQga2VlcCBsb2NrcyAqLwotCQkJaWYgKGNoaWxkT0lEICE9IHBhcmVudE9J RCkKLQkJCQloZWFwX2Nsb3NlKG5ld3JlbGF0aW9uLCBOb0xvY2spOworCQkJaGVhcF9jbG9z ZShuZXdyZWxhdGlvbiwgbG9ja21vZGUpOworCQkJY29udGludWU7CiAJCX0KIAotCQkvKgot CQkgKiBJZiBhbGwgdGhlIGNoaWxkcmVuIHdlcmUgdGVtcCB0YWJsZXMsIHByZXRlbmQgaXQn cyBhCi0JCSAqIG5vbi1pbmhlcml0YW5jZSBzaXR1YXRpb247IHdlIGRvbid0IG5lZWQgQXBw ZW5kIG5vZGUgaW4gdGhhdCBjYXNlLgotCQkgKiBUaGUgZHVwbGljYXRlIFJURSB3ZSBhZGRl ZCBmb3IgdGhlIHBhcmVudCB0YWJsZSBpcyBoYXJtbGVzcywgc28gd2UKLQkJICogZG9uJ3Qg Ym90aGVyIHRvIGdldCByaWQgb2YgaXQ7IGRpdHRvIGZvciB0aGUgdXNlbGVzcyBQbGFuUm93 TWFyawotCQkgKiBub2RlLgotCQkgKi8KLQkJaWYgKGxpc3RfbGVuZ3RoKGFwcGluZm9zKSA8 IDIpCi0JCQlydGUtPmluaCA9IGZhbHNlOwotCQllbHNlCi0JCQlyb290LT5hcHBlbmRfcmVs X2xpc3QgPSBsaXN0X2NvbmNhdChyb290LT5hcHBlbmRfcmVsX2xpc3QsCi0JCQkJCQkJCQkJ CQlhcHBpbmZvcyk7CisJCWNoaWxkcmVsID0gYWRkX2luaGVyaXRhbmNlX2NoaWxkX3JlbChy b290LCBydGUsIHJ0aSwgcmVsLCBvbGRyYywKKwkJCQkJCQkJCQkJIG5ld3JlbGF0aW9uKTsK KwkJQXNzZXJ0KGNoaWxkcmVsICE9IE5VTEwpOwogCisJCS8qIENsb3NlIGNoaWxkIHJlbGF0 aW9ucywgYnV0IGtlZXAgbG9ja3MgKi8KKwkJaGVhcF9jbG9zZShuZXdyZWxhdGlvbiwgTm9M b2NrKTsKKwkJbnVtX2NoaWxkcmVuX2FkZGVkKys7CiAJfQogCi0JaGVhcF9jbG9zZShvbGRy ZWxhdGlvbiwgTm9Mb2NrKTsKKwkvKgorCSAqIElmIGFsbCBjaGlsZHJlbiwgaW5jbHVkaW5n IHRoZSBwYXJlbnQgKGFzIGNoaWxkIHJlbCksIHdlcmUKKwkgKiBleGNsdWRlZCwgbWFyayB0 aGUgcGFyZW50IHJlbCBhcyBlbXB0eS4gIElmIGFsbCB0aGUgY2hpbGRyZW4gd2VyZSB0ZW1w CisJICogdGFibGVzLCBwcmV0ZW5kIGl0J3MgYSBub24taW5oZXJpdGFuY2Ugc2l0dWF0aW9u OyB3ZSBkb24ndCBuZWVkIEFwcGVuZAorCSAqIG5vZGUgaW4gdGhhdCBjYXNlLiAgVGhlIGR1 cGxpY2F0ZSBSVEUgd2UgYWRkZWQgZm9yIHRoZSBwYXJlbnQgdGFibGUgaXMKKwkgKiBoYXJt bGVzcywgc28gd2UgZG9uJ3QgYm90aGVyIHRvIGdldCByaWQgb2YgaXQ7IGRpdHRvIGZvciB0 aGUgdXNlbGVzcworCSAqIFBsYW5Sb3dNYXJrIG5vZGUuCisJICovCisJaWYgKG51bV9jaGls ZHJlbl9hZGRlZCA9PSAwKQorCQltYXJrX2R1bW15X3JlbChyZWwpOworCWVsc2UgaWYgKG51 bV9jaGlsZHJlbl9hZGRlZCA9PSAxKQorCQlydGUtPmluaCA9IGZhbHNlOworCisJLyoKKwkg KiBBZGQganVuayBjb2x1bW5zIG5lZWRlZCBieSB0aGUgcm93IG1hcmsgaWYgYW55IGFuZCBh bHNvIGFkZCB0aGUKKwkgKiByZWxldmFudCBleHByZXNzaW9ucyB0byB0aGUgcm9vdCBwYXJl bnQncyByZWx0YXJnZXQuCisJICovCisJaWYgKG9sZHJjKQorCXsKKwkJTGlzdCAgICp0bGlz dCA9IGFkZF9yb3dtYXJrX2p1bmtfY29sdW1ucyhyb290LCBvbGRyYyk7CisKKwkJYnVpbGRf YmFzZV9yZWxfdGxpc3RzKHJvb3QsIHRsaXN0KTsKKwl9CiB9CiAKIC8qCiAgKiBleHBhbmRf cGFydGl0aW9uZWRfcnRlbnRyeQotICoJCVJlY3Vyc2l2ZWx5IGV4cGFuZCBhbiBSVEUgZm9y IGEgcGFydGl0aW9uZWQgdGFibGUuCisgKgkJUHJ1bmVzIHVubmVjZXNzYXJ5IHBhcnRpdGlv bnMgb2YgYSBwYXJ0aXRpb25lZCB0YWJsZSBhbmQgYWRkcworICoJCXJlbWFpbmluZyBvbmVz IHRvIHRoZSBRdWVyeSBhbmQgdGhlIFBsYW5uZXJJbmZvCiAgKgotICogTm90ZSB0aGF0IFJl bGF0aW9uR2V0UGFydGl0aW9uRGlzcGF0Y2hJbmZvIHdpbGwgZXhwYW5kIHBhcnRpdGlvbnMg aW4gdGhlCi0gKiBzYW1lIG9yZGVyIGFzIHRoaXMgY29kZS4KKyAqIFBhcnRpdGlvbnMgYXJl IGFkZGVkIHRvIHRoZSBxdWVyeSBpbiBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBmb3VuZCBp bgorICogdGhlIHBhcmVudCdzIFBhcnRpdGlvbkRlc2MuCisgKgorICogTm90ZTogZXZlbiB0 aG91Z2ggb25seSB0aGUgdW5wcnVuZWQgcGFydGl0aW9ucyB3aWxsIGJlIGFkZGVkIHRvIHRo ZQorICogcmVzdWx0aW5nIHBsYW4sIHRoaXMgc3RpbGwgbG9ja3MgKmFsbCogcGFydGl0aW9u cyB2aWEgZmluZF9hbGxfaW5oZXJpdG9ycworICogaW4gb3JkZXIgdG8gYXZvaWQgcGFydGl0 aW9ucyBiZWluZyBsb2NrZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiBvdGhlcgorICog cGxhY2VzIGluIHRoZSBiYWNrZW5kIHRoYXQgbWF5IGxvY2sgcGFydGl0aW9ucy4KICAqLwog c3RhdGljIHZvaWQKIGV4cGFuZF9wYXJ0aXRpb25lZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpy b290LCBSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCi0JCQkJCQkgICBJbmRleCBwYXJlbnRS VGluZGV4LCBSZWxhdGlvbiBwYXJlbnRyZWwsCi0JCQkJCQkgICBQbGFuUm93TWFyayAqdG9w X3BhcmVudHJjLCBMT0NLTU9ERSBsb2NrbW9kZSwKLQkJCQkJCSAgIExpc3QgKiphcHBpbmZv cykKKwkJCQkJCSAgIEluZGV4IHBhcmVudFJUaW5kZXgsIFJlbE9wdEluZm8gKnBhcmVudHJl bCkKIHsKKwlMT0NLTU9ERQlsb2NrbW9kZSA9IHBhcmVudHJ0ZS0+cmVsbG9ja21vZGU7CisJ UGxhblJvd01hcmsgKnJvb3RyYyA9IE5VTEw7CiAJaW50CQkJaTsKLQlSYW5nZVRibEVudHJ5 ICpjaGlsZHJ0ZTsKLQlJbmRleAkJY2hpbGRSVGluZGV4OwotCVBhcnRpdGlvbkRlc2MgcGFy dGRlc2MgPSBSZWxhdGlvbkdldFBhcnRpdGlvbkRlc2MocGFyZW50cmVsKTsKKwlCaXRtYXBz ZXQgICpwYXJ0aW5kZXhlczsKKwlJbmRleAkJcm9vdFBhcmVudFJUaW5kZXggPSBwYXJlbnRy ZWwtPmluaF9yb290X3BhcmVudCA+IDAgPworCQkJCQkJCQkJcGFyZW50cmVsLT5pbmhfcm9v dF9wYXJlbnQgOgorCQkJCQkJCQkJcGFyZW50UlRpbmRleDsKIAotCWNoZWNrX3N0YWNrX2Rl cHRoKCk7Ci0KLQkvKiBBIHBhcnRpdGlvbmVkIHRhYmxlIHNob3VsZCBhbHdheXMgaGF2ZSBh IHBhcnRpdGlvbiBkZXNjcmlwdG9yLiAqLwotCUFzc2VydChwYXJ0ZGVzYyk7Ci0KLQlBc3Nl cnQocGFyZW50cnRlLT5pbmgpOworCS8qIElmIHJvb3QgcGFydGl0aW9uZWQgdGFibGUsIGxv Y2sgKmFsbCogcGFydGl0aW9ucyBpbiB0aGUgdHJlZS4gKi8KKwlpZiAocGFyZW50UlRpbmRl eCA9PSByb290UGFyZW50UlRpbmRleCkKKwkJKHZvaWQpIGZpbmRfYWxsX2luaGVyaXRvcnMo cGFyZW50cnRlLT5yZWxpZCwgbG9ja21vZGUsIE5VTEwpOwogCiAJLyoKLQkgKiBOb3RlIGRv d24gd2hldGhlciBhbnkgcGFydGl0aW9uIGtleSBjb2xzIGFyZSBiZWluZyB1cGRhdGVkLiBU aG91Z2ggaXQncwotCSAqIHRoZSByb290IHBhcnRpdGlvbmVkIHRhYmxlJ3MgdXBkYXRlZENv bHMgd2UgYXJlIGludGVyZXN0ZWQgaW4sIHdlCi0JICogaW5zdGVhZCB1c2UgcGFyZW50cnRl IHRvIGdldCB0aGUgdXBkYXRlZENvbHMuIFRoaXMgaXMgY29udmVuaWVudAotCSAqIGJlY2F1 c2UgcGFyZW50cnRlIGFscmVhZHkgaGFzIHRoZSByb290IHBhcnRyZWwncyB1cGRhdGVkQ29s cyB0cmFuc2xhdGVkCi0JICogdG8gbWF0Y2ggdGhlIGF0dHJpYnV0ZSBvcmRlcmluZyBvZiBw YXJlbnRyZWwuCisJICogSW5pdGlhbGl6ZSBwYXJ0aXRpb25lZF9jaGlsZF9yZWxzIHRvIGNv bnRhaW4gdGhpcyBSVCBpbmRleC4KKwkgKgorCSAqIE5vdGUgdGhhdCBkdXJpbmcgdGhlIHNl dF9hcHBlbmRfcmVsX3BhdGhsaXN0KCkgcGhhc2UsIHZhbHVlcyBvZiB0aGUKKwkgKiBpbmRl eGVzIG9mIHBhcnRpdGlvbmVkIHJlbGF0aW9ucyB0aGF0IGFwcGVhciBkb3duIGluIHRoZSB0 cmVlIHdpbGwgYmUKKwkgKiBidWJibGVkIHVwIGludG8gcm9vdCBwYXJlbnQncyBsaXN0IHNv IHRoYXQgd2hlbiB3ZSd2ZSBjcmVhdGVkIFBhdGhzIGZvcgorCSAqIGFsbCB0aGUgY2hpbGRy ZW4sIHRoZSByb290IHRhYmxlJ3MgbGlzdCB3aWxsIGNvbnRhaW4gYWxsIHN1Y2ggaW5kZXhl cy4KIAkgKi8KLQlpZiAoIXJvb3QtPnBhcnRDb2xzVXBkYXRlZCkKLQkJcm9vdC0+cGFydENv bHNVcGRhdGVkID0KLQkJCWhhc19wYXJ0aXRpb25fYXR0cnMocGFyZW50cmVsLCBwYXJlbnRy dGUtPnVwZGF0ZWRDb2xzLCBOVUxMKTsKKwlwYXJlbnRyZWwtPnBhcnRpdGlvbmVkX2NoaWxk X3JlbHMgPSBsaXN0X21ha2UxX2ludChwYXJlbnRSVGluZGV4KTsKIAotCS8qIEZpcnN0IGV4 cGFuZCB0aGUgcGFydGl0aW9uZWQgdGFibGUgaXRzZWxmLiAqLwotCWV4cGFuZF9zaW5nbGVf aW5oZXJpdGFuY2VfY2hpbGQocm9vdCwgcGFyZW50cnRlLCBwYXJlbnRSVGluZGV4LCBwYXJl bnRyZWwsCi0JCQkJCQkJCQl0b3BfcGFyZW50cmMsIHBhcmVudHJlbCwKLQkJCQkJCQkJCWFw cGluZm9zLCAmY2hpbGRydGUsICZjaGlsZFJUaW5kZXgpOworCS8qIFBlcmZvcm0gcHJ1bmlu Zy4gKi8KKwlwYXJ0aW5kZXhlcyA9IHBydW5lX2FwcGVuZF9yZWxfcGFydGl0aW9ucyhwYXJl bnRyZWwpOworCisJLyogTXVzdCBleHBhbmQgUGxhbm5lckluZm8gYXJyYXlzIGJlZm9yZSB3 ZSBjYW4gYWRkIGNoaWxkcmVuLiAqLworCWV4cGFuZF9wbGFubmVyX2FycmF5cyhyb290LCBi bXNfbnVtX21lbWJlcnMocGFydGluZGV4ZXMpKTsKIAogCS8qCi0JICogSWYgdGhlIHBhcnRp dGlvbmVkIHRhYmxlIGhhcyBubyBwYXJ0aXRpb25zLCB0cmVhdCB0aGlzIGFzIHRoZQotCSAq IG5vbi1pbmhlcml0YW5jZSBjYXNlLgorCSAqIEZvciBwYXJ0aXRpb25lZCB0YWJsZXMsIHdl IGFsc28gc3RvcmUgdGhlIHBhcnRpdGlvbiBSZWxPcHRJbmZvCisJICogcG9pbnRlcnMgaW4g dGhlIHBhcmVudCdzIFJlbE9wdEluZm8uCiAJICovCi0JaWYgKHBhcnRkZXNjLT5ucGFydHMg PT0gMCkKLQl7Ci0JCXBhcmVudHJ0ZS0+aW5oID0gZmFsc2U7Ci0JCXJldHVybjsKLQl9CisJ cGFyZW50cmVsLT5wYXJ0X3JlbHMgPSAoUmVsT3B0SW5mbyAqKikgcGFsbG9jMChzaXplb2Yo UmVsT3B0SW5mbyAqKSAqCisJCQkJCQkJCQkJCQkgICBwYXJlbnRyZWwtPm5wYXJ0cyk7CiAK LQlmb3IgKGkgPSAwOyBpIDwgcGFydGRlc2MtPm5wYXJ0czsgaSsrKQorCXJvb3RyYyA9IGdl dF9wbGFuX3Jvd21hcmsocm9vdC0+cm93TWFya3MsIHJvb3RQYXJlbnRSVGluZGV4KTsKKwlB c3NlcnQocm9vdHJjID09IE5VTEwgfHwgcm9vdHJjLT5pc1BhcmVudCk7CisJaSA9IC0xOwor CXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwYXJ0aW5kZXhlcywgaSkpID49IDApCiAJ ewotCQlPaWQJCQljaGlsZE9JRCA9IHBhcnRkZXNjLT5vaWRzW2ldOwotCQlSZWxhdGlvbglj aGlsZHJlbDsKKwkJT2lkCQljaGlsZE9JRCA9IHBhcmVudHJlbC0+cGFydF9vaWRzW2ldOwor CQlSZWxhdGlvbgluZXdyZWxhdGlvbjsKKwkJUmVsT3B0SW5mbyAqY2hpbGRyZWw7CiAKLQkJ LyogT3BlbiByZWw7IHdlIGFscmVhZHkgaGF2ZSByZXF1aXJlZCBsb2NrcyAqLwotCQljaGls ZHJlbCA9IGhlYXBfb3BlbihjaGlsZE9JRCwgTm9Mb2NrKTsKKwkJLyogQWxyZWFkeSBsb2Nr ZWQgYWJvdmUuICovCisJCW5ld3JlbGF0aW9uID0gaGVhcF9vcGVuKGNoaWxkT0lELCBOb0xv Y2spOworCQlBc3NlcnQoIVJFTEFUSU9OX0lTX09USEVSX1RFTVAobmV3cmVsYXRpb24pKTsK IAogCQkvKgotCQkgKiBUZW1wb3JhcnkgcGFydGl0aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIg c2Vzc2lvbnMgc2hvdWxkIGhhdmUgYmVlbgotCQkgKiBkaXNhbGxvd2VkIGF0IGRlZmluaXRp b24sIGJ1dCBmb3IgcGFyYW5vaWEncyBzYWtlLCBsZXQncyBkb3VibGUKLQkJICogY2hlY2su CisJCSAqIEEgcGFydGl0aW9uZWQgY2hpbGQgdGFibGUgd2l0aCAwIGNoaWxkcmVuIGlzIGEg ZHVtbXkgcmVsLCBzbyBkb24ndAorCQkgKiBib3RoZXIgY3JlYXRpbmcgcGxhbm5lciBvYmpl Y3RzIGZvciBpdC4KIAkJICovCi0JCWlmIChSRUxBVElPTl9JU19PVEhFUl9URU1QKGNoaWxk cmVsKSkKLQkJCWVsb2coRVJST1IsICJ0ZW1wb3JhcnkgcmVsYXRpb24gZnJvbSBhbm90aGVy IHNlc3Npb24gZm91bmQgYXMgcGFydGl0aW9uIik7CisJCWlmIChuZXdyZWxhdGlvbi0+cmRf cmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUgJiYKKwkJCVJlbGF0 aW9uR2V0UGFydGl0aW9uRGVzYyhuZXdyZWxhdGlvbiktPm5wYXJ0cyA9PSAwKQorCQl7CisJ CQloZWFwX2Nsb3NlKG5ld3JlbGF0aW9uLCBOb0xvY2spOworCQkJY29udGludWU7CisJCX0K IAotCQlleHBhbmRfc2luZ2xlX2luaGVyaXRhbmNlX2NoaWxkKHJvb3QsIHBhcmVudHJ0ZSwg cGFyZW50UlRpbmRleCwKLQkJCQkJCQkJCQlwYXJlbnRyZWwsIHRvcF9wYXJlbnRyYywgY2hp bGRyZWwsCi0JCQkJCQkJCQkJYXBwaW5mb3MsICZjaGlsZHJ0ZSwgJmNoaWxkUlRpbmRleCk7 CisJCWNoaWxkcmVsID0gYWRkX2luaGVyaXRhbmNlX2NoaWxkX3JlbChyb290LCBwYXJlbnRy dGUsIHBhcmVudFJUaW5kZXgsCisJCQkJCQkJCQkJCSBwYXJlbnRyZWwsIHJvb3RyYywgbmV3 cmVsYXRpb24pOworCQlBc3NlcnQoY2hpbGRyZWwgIT0gTlVMTCk7CisJCXBhcmVudHJlbC0+ cGFydF9yZWxzW2ldID0gY2hpbGRyZWw7CiAKLQkJLyogSWYgdGhpcyBjaGlsZCBpcyBpdHNl bGYgcGFydGl0aW9uZWQsIHJlY3Vyc2UgKi8KLQkJaWYgKGNoaWxkcmVsLT5yZF9yZWwtPnJl bGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKLQkJCWV4cGFuZF9wYXJ0aXRp b25lZF9ydGVudHJ5KHJvb3QsIGNoaWxkcnRlLCBjaGlsZFJUaW5kZXgsCi0JCQkJCQkJCQkg ICBjaGlsZHJlbCwgdG9wX3BhcmVudHJjLCBsb2NrbW9kZSwKLQkJCQkJCQkJCSAgIGFwcGlu Zm9zKTsKKwkJLyogQ2xvc2UgY2hpbGQgcmVsYXRpb25zLCBidXQga2VlcCBsb2NrcyAqLwor CQloZWFwX2Nsb3NlKG5ld3JlbGF0aW9uLCBOb0xvY2spOworCX0KIAotCQkvKiBDbG9zZSBj aGlsZCByZWxhdGlvbiwgYnV0IGtlZXAgbG9ja3MgKi8KLQkJaGVhcF9jbG9zZShjaGlsZHJl bCwgTm9Mb2NrKTsKKwkvKgorCSAqIEFkZCBqdW5rIGNvbHVtbnMgbmVlZGVkIGJ5IHRoZSBy b3cgbWFyayBpZiBhbnkgYW5kIGFsc28gYWRkIHRoZQorCSAqIHJlbGV2YW50IGV4cHJlc3Np b25zIHRvIHRoZSByb290IHBhcmVudCdzIHJlbHRhcmdldC4KKwkgKi8KKwlpZiAocm9vdHJj KQorCXsKKwkJTGlzdCAgICp0bGlzdCA9IGFkZF9yb3dtYXJrX2p1bmtfY29sdW1ucyhyb290 LCByb290cmMpOworCisJCWJ1aWxkX2Jhc2VfcmVsX3RsaXN0cyhyb290LCB0bGlzdCk7CiAJ fQogfQogCiAvKgotICogZXhwYW5kX3NpbmdsZV9pbmhlcml0YW5jZV9jaGlsZAotICoJCUJ1 aWxkIGEgUmFuZ2VUYmxFbnRyeSBhbmQgYW4gQXBwZW5kUmVsSW5mbywgaWYgYXBwcm9wcmlh dGUsIHBsdXMKLSAqCQltYXliZSBhIFBsYW5Sb3dNYXJrLgorICogYWRkX2luaGVyaXRhbmNl X2NoaWxkX3JlbAorICoJCUJ1aWxkIGEgUmFuZ2VUYmxFbnRyeSwgYW4gQXBwZW5kUmVsSW5m bywgYSBQbGFuUm93TWFyaywgYW5kIGZpbmFsbHkKKyAqCQlhIFJlbE9wdEluZm8gZm9yIGFu IGluaGVyaXRhbmNlIGNoaWxkIHJlbGF0aW9uLgogICoKLSAqIFdlIG5vdyBleHBhbmQgdGhl IHBhcnRpdGlvbiBoaWVyYXJjaHkgbGV2ZWwgYnkgbGV2ZWwsIGNyZWF0aW5nIGEKLSAqIGNv cnJlc3BvbmRpbmcgaGllcmFyY2h5IG9mIEFwcGVuZFJlbEluZm9zIGFuZCBSZWxPcHRJbmZv cywgd2hlcmUgZWFjaAotICogcGFydGl0aW9uZWQgZGVzY2VuZGFudCBhY3RzIGFzIGEgcGFy ZW50IG9mIGl0cyBpbW1lZGlhdGUgcGFydGl0aW9ucy4KLSAqIChUaGlzIGlzIGEgZGlmZmVy ZW5jZSBmcm9tIHdoYXQgb2xkZXIgdmVyc2lvbnMgb2YgUG9zdGdyZVNRTCBkaWQgYW5kIHdo YXQKLSAqIGlzIHN0aWxsIGRvbmUgaW4gdGhlIGNhc2Ugb2YgdGFibGUgaW5oZXJpdGFuY2Ug Zm9yIHVucGFydGl0aW9uZWQgdGFibGVzLAotICogd2hlcmUgdGhlIGhpZXJhcmNoeSBpcyBm bGF0dGVuZWQgZHVyaW5nIFJURSBleHBhbnNpb24uKQorICogVGhlIHJldHVybiB2YWx1ZSBp cyB0aGUgUmVsT3B0SW5mbyB0aGF0J3MgYWRkZWQuCiAgKgogICogUGxhblJvd01hcmtzIHN0 aWxsIGNhcnJ5IHRoZSB0b3AtcGFyZW50J3MgUlRJLCBhbmQgdGhlIHRvcC1wYXJlbnQncwog ICogYWxsTWFya1R5cGVzIGZpZWxkIHN0aWxsIGFjY3VtdWxhdGVzIHZhbHVlcyBmcm9tIGFs bCBkZXNjZW5kZW50cy4KICAqCiAgKiAicGFyZW50cnRlIiBhbmQgInBhcmVudFJUaW5kZXgi IGFyZSBpbW1lZGlhdGUgcGFyZW50J3MgUlRFIGFuZAogICogUlRJLiAidG9wX3BhcmVudHJj IiBpcyB0b3AgcGFyZW50J3MgUGxhblJvd01hcmsuCi0gKgotICogVGhlIGNoaWxkIFJhbmdl VGJsRW50cnkgYW5kIGl0cyBSVEkgYXJlIHJldHVybmVkIGluICJjaGlsZHJ0ZV9wIiBhbmQK LSAqICJjaGlsZFJUaW5kZXhfcCIgcmVzcC4KICAqLwotc3RhdGljIHZvaWQKLWV4cGFuZF9z aW5nbGVfaW5oZXJpdGFuY2VfY2hpbGQoUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50 cnkgKnBhcmVudHJ0ZSwKLQkJCQkJCQkJSW5kZXggcGFyZW50UlRpbmRleCwgUmVsYXRpb24g cGFyZW50cmVsLAotCQkJCQkJCQlQbGFuUm93TWFyayAqdG9wX3BhcmVudHJjLCBSZWxhdGlv biBjaGlsZHJlbCwKLQkJCQkJCQkJTGlzdCAqKmFwcGluZm9zLCBSYW5nZVRibEVudHJ5ICoq Y2hpbGRydGVfcCwKLQkJCQkJCQkJSW5kZXggKmNoaWxkUlRpbmRleF9wKQorc3RhdGljIFJl bE9wdEluZm8gKgorYWRkX2luaGVyaXRhbmNlX2NoaWxkX3JlbChQbGFubmVySW5mbyAqcm9v dCwgUmFuZ2VUYmxFbnRyeSAqcGFyZW50cnRlLAorCQkJCQkJICBJbmRleCBwYXJlbnRSVGlu ZGV4LCBSZWxPcHRJbmZvICpwYXJlbnRyZWwsCisJCQkJCQkgIFBsYW5Sb3dNYXJrICp0b3Bf cGFyZW50cmMsIFJlbGF0aW9uIGNoaWxkcmVsKQogewogCVF1ZXJ5CSAgICpwYXJzZSA9IHJv b3QtPnBhcnNlOwotCU9pZAkJCXBhcmVudE9JRCA9IFJlbGF0aW9uR2V0UmVsaWQocGFyZW50 cmVsKTsKIAlPaWQJCQljaGlsZE9JRCA9IFJlbGF0aW9uR2V0UmVsaWQoY2hpbGRyZWwpOwog CVJhbmdlVGJsRW50cnkgKmNoaWxkcnRlOwogCUluZGV4CQljaGlsZFJUaW5kZXg7CiAJQXBw ZW5kUmVsSW5mbyAqYXBwaW5mbzsKKwlSZWxPcHRJbmZvICpjaGlsZHJlbG9wdDsKIAogCS8q CiAJICogQnVpbGQgYW4gUlRFIGZvciB0aGUgY2hpbGQsIGFuZCBhdHRhY2ggdG8gcXVlcnkn cyByYW5nZXRhYmxlIGxpc3QuIFdlCiAJICogY29weSBtb3N0IGZpZWxkcyBvZiB0aGUgcGFy ZW50J3MgUlRFLCBidXQgcmVwbGFjZSByZWxhdGlvbiBPSUQgYW5kCi0JICogcmVsa2luZCwg YW5kIHNldCBpbmggPSBmYWxzZS4gIEFsc28sIHNldCByZXF1aXJlZFBlcm1zIHRvIHplcm8g c2luY2UKLQkgKiBhbGwgcmVxdWlyZWQgcGVybWlzc2lvbnMgY2hlY2tzIGFyZSBkb25lIG9u IHRoZSBvcmlnaW5hbCBSVEUuIExpa2V3aXNlLAotCSAqIHNldCB0aGUgY2hpbGQncyBzZWN1 cml0eVF1YWxzIHRvIGVtcHR5LCBiZWNhdXNlIHdlIG9ubHkgd2FudCB0byBhcHBseQotCSAq IHRoZSBwYXJlbnQncyBSTFMgY29uZGl0aW9ucyByZWdhcmRsZXNzIG9mIHdoYXQgUkxTIHBy b3BlcnRpZXMKKwkgKiByZWxraW5kLCBhbmQgc2V0IGluaCBhcHByb3ByaWF0ZWx5LiAgQWxz bywgc2V0IHJlcXVpcmVkUGVybXMgdG8gemVybworCSAqIHNpbmNlIGFsbCByZXF1aXJlZCBw ZXJtaXNzaW9ucyBjaGVja3MgYXJlIGRvbmUgb24gdGhlIG9yaWdpbmFsIFJURS4KKwkgKiBM aWtld2lzZSwgc2V0IHRoZSBjaGlsZCdzIHNlY3VyaXR5UXVhbHMgdG8gZW1wdHksIGJlY2F1 c2Ugd2Ugb25seSB3YW50CisJICogdG8gYXBwbHkgdGhlIHBhcmVudCdzIFJMUyBjb25kaXRp b25zIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBSTFMgcHJvcGVydGllcwogCSAqIGluZGl2aWR1YWwg Y2hpbGRyZW4gbWF5IGhhdmUuICAoVGhpcyBpcyBhbiBpbnRlbnRpb25hbCBjaG9pY2UgdG8g bWFrZQogCSAqIGluaGVyaXRlZCBSTFMgd29yayBsaWtlIHJlZ3VsYXIgcGVybWlzc2lvbnMg Y2hlY2tzLikgVGhlIHBhcmVudAogCSAqIHNlY3VyaXR5UXVhbHMgd2lsbCBiZSBwcm9wYWdh dGVkIHRvIGNoaWxkcmVuIGFsb25nIHdpdGggb3RoZXIgYmFzZQogCSAqIHJlc3RyaWN0aW9u IGNsYXVzZXMsIHNvIHdlIGRvbid0IG5lZWQgdG8gZG8gaXQgaGVyZS4KIAkgKi8KIAljaGls ZHJ0ZSA9IGNvcHlPYmplY3QocGFyZW50cnRlKTsKLQkqY2hpbGRydGVfcCA9IGNoaWxkcnRl OwogCWNoaWxkcnRlLT5yZWxpZCA9IGNoaWxkT0lEOwogCWNoaWxkcnRlLT5yZWxraW5kID0g Y2hpbGRyZWwtPnJkX3JlbC0+cmVsa2luZDsKLQkvKiBBIHBhcnRpdGlvbmVkIGNoaWxkIHdp bGwgbmVlZCB0byBiZSBleHBhbmRlZCBmdXJ0aGVyLiAqLwotCWlmIChjaGlsZE9JRCAhPSBw YXJlbnRPSUQgJiYKLQkJY2hpbGRydGUtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSkKLQkJY2hpbGRydGUtPmluaCA9IHRydWU7Ci0JZWxzZQotCQljaGlsZHJ0ZS0+ aW5oID0gZmFsc2U7CisJLyoKKwkgKiBBIHBhcnRpdGlvbmVkIGNoaWxkIHdpbGwgbmVlZCB0 byBiZSBleHBhbmRlZCBhcyBhbiBhcHBlbmQgcGFyZW50CisJICogaXRzZWxmLCBzbyBzZXQg aXRzIGluaCB0byB0cnVlLgorCSAqLworCWNoaWxkcnRlLT5pbmggPSAoY2hpbGRydGUtPnJl bGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSk7CiAJY2hpbGRydGUtPnJlcXVp cmVkUGVybXMgPSAwOwogCWNoaWxkcnRlLT5zZWN1cml0eVF1YWxzID0gTklMOwogCXBhcnNl LT5ydGFibGUgPSBsYXBwZW5kKHBhcnNlLT5ydGFibGUsIGNoaWxkcnRlKTsKIAljaGlsZFJU aW5kZXggPSBsaXN0X2xlbmd0aChwYXJzZS0+cnRhYmxlKTsKLQkqY2hpbGRSVGluZGV4X3Ag PSBjaGlsZFJUaW5kZXg7CisKKwkvKiBDcmVhdGUgYW4gQXBwZW5kUmVsSW5mbyBhbmQgYWRk IGl0IHRvIHBsYW5uZXIncyBnbG9iYWwgbGlzdC4gKi8KKwlhcHBpbmZvID0gbWFrZV9hcHBl bmRfcmVsX2luZm8ocGFyZW50cmVsLCBwYXJlbnRydGUsCisJCQkJCQkJCSAgIGNoaWxkcmVs LT5yZF9hdHQsCisJCQkJCQkJCSAgIGNoaWxkT0lELAorCQkJCQkJCQkgICBjaGlsZHJlbC0+ cmRfcmVsLT5yZWx0eXBlLAorCQkJCQkJCQkgICBjaGlsZFJUaW5kZXgpOworCXJvb3QtPmFw cGVuZF9yZWxfbGlzdCA9IGxhcHBlbmQocm9vdC0+YXBwZW5kX3JlbF9saXN0LCBhcHBpbmZv KTsKIAogCS8qCi0JICogV2UgbmVlZCBhbiBBcHBlbmRSZWxJbmZvIGlmIHBhdGhzIHdpbGwg YmUgYnVpbHQgZm9yIHRoZSBjaGlsZCBSVEUuIElmCi0JICogY2hpbGRydGUtPmluaCBpcyB0 cnVlLCB0aGVuIHdlJ2xsIGFsd2F5cyBuZWVkIHRvIGdlbmVyYXRlIGFwcGVuZCBwYXRocwot CSAqIGZvciBpdC4gIElmIGNoaWxkcnRlLT5pbmggaXMgZmFsc2UsIHdlIG11c3Qgc2NhbiBp dCBpZiBpdCdzIG5vdCBhCi0JICogcGFydGl0aW9uZWQgdGFibGU7IGJ1dCBpZiBpdCBpcyBh IHBhcnRpdGlvbmVkIHRhYmxlLCB0aGVuIGl0IG5ldmVyIGhhcwotCSAqIGFueSBkYXRhIG9m IGl0cyBvd24gYW5kIG5lZWQgbm90IGJlIHNjYW5uZWQuCisJICogVHJhbnNsYXRlIHRoZSBj b2x1bW4gcGVybWlzc2lvbnMgYml0bWFwcyB0byB0aGUgY2hpbGQncyBhdHRudW1zICh3ZQor CSAqIGhhdmUgdG8gYnVpbGQgdGhlIHRyYW5zbGF0ZWRfdmFycyBsaXN0IGJlZm9yZSB3ZSBj YW4gZG8gdGhpcykuIEJ1dAorCSAqIGlmIHRoaXMgaXMgdGhlIHBhcmVudCB0YWJsZSwgbGVh dmUgY29weU9iamVjdCdzIHJlc3VsdCBhbG9uZS4KKwkgKgorCSAqIE5vdGU6IHdlIG5lZWQg dG8gZG8gdGhpcyBldmVuIHRob3VnaCB0aGUgZXhlY3V0b3Igd29uJ3QgcnVuIGFueQorCSAq IHBlcm1pc3Npb25zIGNoZWNrcyBvbiB0aGUgY2hpbGQgUlRFLiAgVGhlIGluc2VydGVkQ29s cy91cGRhdGVkQ29scworCSAqIGJpdG1hcHMgbWF5IGJlIGV4YW1pbmVkIGZvciB0cmlnZ2Vy LWZpcmluZyBwdXJwb3Nlcy4KIAkgKi8KLQlpZiAoY2hpbGRydGUtPnJlbGtpbmQgIT0gUkVM S0lORF9QQVJUSVRJT05FRF9UQUJMRSB8fCBjaGlsZHJ0ZS0+aW5oKQorCWlmIChjaGlsZHJ0 ZS0+cmVsaWQgIT0gcGFyZW50cnRlLT5yZWxpZCkKIAl7Ci0JCWFwcGluZm8gPSBtYWtlTm9k ZShBcHBlbmRSZWxJbmZvKTsKLQkJYXBwaW5mby0+cGFyZW50X3JlbGlkID0gcGFyZW50UlRp bmRleDsKLQkJYXBwaW5mby0+Y2hpbGRfcmVsaWQgPSBjaGlsZFJUaW5kZXg7Ci0JCWFwcGlu Zm8tPnBhcmVudF9yZWx0eXBlID0gcGFyZW50cmVsLT5yZF9yZWwtPnJlbHR5cGU7Ci0JCWFw cGluZm8tPmNoaWxkX3JlbHR5cGUgPSBjaGlsZHJlbC0+cmRfcmVsLT5yZWx0eXBlOwotCQlt YWtlX2luaF90cmFuc2xhdGlvbl9saXN0KHBhcmVudHJlbCwgY2hpbGRyZWwsIGNoaWxkUlRp bmRleCwKLQkJCQkJCQkJICAmYXBwaW5mby0+dHJhbnNsYXRlZF92YXJzKTsKLQkJYXBwaW5m by0+cGFyZW50X3JlbG9pZCA9IHBhcmVudE9JRDsKLQkJKmFwcGluZm9zID0gbGFwcGVuZCgq YXBwaW5mb3MsIGFwcGluZm8pOwotCi0JCS8qCi0JCSAqIFRyYW5zbGF0ZSB0aGUgY29sdW1u IHBlcm1pc3Npb25zIGJpdG1hcHMgdG8gdGhlIGNoaWxkJ3MgYXR0bnVtcyAod2UKLQkJICog aGF2ZSB0byBidWlsZCB0aGUgdHJhbnNsYXRlZF92YXJzIGxpc3QgYmVmb3JlIHdlIGNhbiBk byB0aGlzKS4gQnV0Ci0JCSAqIGlmIHRoaXMgaXMgdGhlIHBhcmVudCB0YWJsZSwgbGVhdmUg Y29weU9iamVjdCdzIHJlc3VsdCBhbG9uZS4KLQkJICoKLQkJICogTm90ZTogd2UgbmVlZCB0 byBkbyB0aGlzIGV2ZW4gdGhvdWdoIHRoZSBleGVjdXRvciB3b24ndCBydW4gYW55Ci0JCSAq IHBlcm1pc3Npb25zIGNoZWNrcyBvbiB0aGUgY2hpbGQgUlRFLiAgVGhlIGluc2VydGVkQ29s cy91cGRhdGVkQ29scwotCQkgKiBiaXRtYXBzIG1heSBiZSBleGFtaW5lZCBmb3IgdHJpZ2dl ci1maXJpbmcgcHVycG9zZXMuCi0JCSAqLwotCQlpZiAoY2hpbGRPSUQgIT0gcGFyZW50T0lE KQotCQl7Ci0JCQljaGlsZHJ0ZS0+c2VsZWN0ZWRDb2xzID0gdHJhbnNsYXRlX2NvbF9wcml2 cyhwYXJlbnRydGUtPnNlbGVjdGVkQ29scywKLQkJCQkJCQkJCQkJCQkJIGFwcGluZm8tPnRy YW5zbGF0ZWRfdmFycyk7Ci0JCQljaGlsZHJ0ZS0+aW5zZXJ0ZWRDb2xzID0gdHJhbnNsYXRl X2NvbF9wcml2cyhwYXJlbnRydGUtPmluc2VydGVkQ29scywKLQkJCQkJCQkJCQkJCQkJIGFw cGluZm8tPnRyYW5zbGF0ZWRfdmFycyk7Ci0JCQljaGlsZHJ0ZS0+dXBkYXRlZENvbHMgPSB0 cmFuc2xhdGVfY29sX3ByaXZzKHBhcmVudHJ0ZS0+dXBkYXRlZENvbHMsCi0JCQkJCQkJCQkJ CQkJCWFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycyk7Ci0JCX0KKwkJY2hpbGRydGUtPnNlbGVj dGVkQ29scyA9IHRyYW5zbGF0ZV9jb2xfcHJpdnMocGFyZW50cnRlLT5zZWxlY3RlZENvbHMs CisJCQkJCQkJCQkJCQkJIGFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycyk7CisJCWNoaWxkcnRl LT5pbnNlcnRlZENvbHMgPSB0cmFuc2xhdGVfY29sX3ByaXZzKHBhcmVudHJ0ZS0+aW5zZXJ0 ZWRDb2xzLAorCQkJCQkJCQkJCQkJCSBhcHBpbmZvLT50cmFuc2xhdGVkX3ZhcnMpOworCQlj aGlsZHJ0ZS0+dXBkYXRlZENvbHMgPSB0cmFuc2xhdGVfY29sX3ByaXZzKHBhcmVudHJ0ZS0+ dXBkYXRlZENvbHMsCisJCQkJCQkJCQkJCQkJYXBwaW5mby0+dHJhbnNsYXRlZF92YXJzKTsK IAl9CiAKIAkvKgpAQCAtMTg2Nyw2ICsxODgzLDI0IEBAIGV4cGFuZF9zaW5nbGVfaW5oZXJp dGFuY2VfY2hpbGQoUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnBhcmVudHJ0 ZSwKIAogCQlyb290LT5yb3dNYXJrcyA9IGxhcHBlbmQocm9vdC0+cm93TWFya3MsIGNoaWxk cmMpOwogCX0KKworCS8qCisJICogQWRkIHRoZSBSZWxPcHRJbmZvLiAgRXZlbiB0aG91Z2gg d2UgbWF5IG5vdCByZWFsbHkgc2NhbiB0aGlzIHJlbGF0aW9uCisJICogZm9yIHJlYXNvbnMg c3VjaCBhcyBjb250cmFkaWN0b3J5IHF1YWxzLCB3ZSBzdGlsbCBuZWVkIG5lZWQgdG8gY3Jl YXRlCisJICogb25lLCBiZWNhdXNlIGZvciBldmVyeSBSVEUgaW4gdGhlIHF1ZXJ5J3MgcmFu Z2UgdGFibGUsIHRoZXJlIG11c3QgYmUgYW4KKwkgKiBhY2NvbXBhbnlpbmcgUmVsT3B0SW5m by4KKwkgKi8KKworCS8qIEZpcnN0LCBzdG9yZSB0aGUgUlRFIGFuZCBhcHBpbmZvcyBpbnRv IHBsYW5uZXIgYXJyYXlzLiAqLworCUFzc2VydChyb290LT5zaW1wbGVfcnRlX2FycmF5W2No aWxkUlRpbmRleF0gPT0gTlVMTCk7CisJcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtjaGlsZFJU aW5kZXhdID0gY2hpbGRydGU7CisJQXNzZXJ0KHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbY2hp bGRSVGluZGV4XSA9PSBOVUxMKTsKKwlyb290LT5hcHBlbmRfcmVsX2FycmF5W2NoaWxkUlRp bmRleF0gPSBhcHBpbmZvOworCisJY2hpbGRyZWxvcHQgPSBidWlsZF9hcHBlbmRfY2hpbGRf cmVsKHJvb3QsIHBhcmVudHJlbCwgY2hpbGRSVGluZGV4KTsKKwlBc3NlcnQoY2hpbGRyZWxv cHQgIT0gTlVMTCk7CisKKwlyZXR1cm4gY2hpbGRyZWxvcHQ7CiB9CiAKIC8qCkBAIC0xODc3 LDE0ICsxOTExLDExIEBAIGV4cGFuZF9zaW5nbGVfaW5oZXJpdGFuY2VfY2hpbGQoUGxhbm5l ckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnBhcmVudHJ0ZSwKICAqIEZvciBwYXJhbm9p YSdzIHNha2UsIHdlIG1hdGNoIHR5cGUvY29sbGF0aW9uIGFzIHdlbGwgYXMgYXR0cmlidXRl IG5hbWUuCiAgKi8KIHN0YXRpYyB2b2lkCi1tYWtlX2luaF90cmFuc2xhdGlvbl9saXN0KFJl bGF0aW9uIG9sZHJlbGF0aW9uLCBSZWxhdGlvbiBuZXdyZWxhdGlvbiwKLQkJCQkJCSAgSW5k ZXggbmV3dmFybm8sCi0JCQkJCQkgIExpc3QgKip0cmFuc2xhdGVkX3ZhcnMpCittYWtlX2lu aF90cmFuc2xhdGlvbl9saXN0KFR1cGxlRGVzYyBvbGRfdHVwZGVzYywgVHVwbGVEZXNjIG5l d190dXBkZXNjLAorCQkJCQkJICBPaWQgZnJvbV9yZWwsIE9pZCB0b19yZWwsCisJCQkJCQkg IEluZGV4IG5ld3Zhcm5vLCBMaXN0ICoqdHJhbnNsYXRlZF92YXJzKQogewogCUxpc3QJICAg KnZhcnMgPSBOSUw7Ci0JVHVwbGVEZXNjCW9sZF90dXBkZXNjID0gUmVsYXRpb25HZXREZXNj cihvbGRyZWxhdGlvbik7Ci0JVHVwbGVEZXNjCW5ld190dXBkZXNjID0gUmVsYXRpb25HZXRE ZXNjcihuZXdyZWxhdGlvbik7Ci0JT2lkCQkJbmV3X3JlbGlkID0gUmVsYXRpb25HZXRSZWxp ZChuZXdyZWxhdGlvbik7CiAJaW50CQkJb2xkbmF0dHMgPSBvbGRfdHVwZGVzYy0+bmF0dHM7 CiAJaW50CQkJbmV3bmF0dHMgPSBuZXdfdHVwZGVzYy0+bmF0dHM7CiAJaW50CQkJb2xkX2F0 dG5vOwpAQCAtMTkxNCw3ICsxOTQ1LDcgQEAgbWFrZV9pbmhfdHJhbnNsYXRpb25fbGlzdChS ZWxhdGlvbiBvbGRyZWxhdGlvbiwgUmVsYXRpb24gbmV3cmVsYXRpb24sCiAJCSAqIFdoZW4g d2UgYXJlIGdlbmVyYXRpbmcgdGhlICJ0cmFuc2xhdGlvbiBsaXN0IiBmb3IgdGhlIHBhcmVu dCB0YWJsZQogCQkgKiBvZiBhbiBpbmhlcml0YW5jZSBzZXQsIG5vIG5lZWQgdG8gc2VhcmNo IGZvciBtYXRjaGVzLgogCQkgKi8KLQkJaWYgKG9sZHJlbGF0aW9uID09IG5ld3JlbGF0aW9u KQorCQlpZiAoZnJvbV9yZWwgPT0gdG9fcmVsKQogCQl7CiAJCQl2YXJzID0gbGFwcGVuZCh2 YXJzLCBtYWtlVmFyKG5ld3Zhcm5vLAogCQkJCQkJCQkJCSAoQXR0ck51bWJlcikgKG9sZF9h dHRubyArIDEpLApAQCAtMTk0MCwxMCArMTk3MSwxMCBAQCBtYWtlX2luaF90cmFuc2xhdGlv bl9saXN0KFJlbGF0aW9uIG9sZHJlbGF0aW9uLCBSZWxhdGlvbiBuZXdyZWxhdGlvbiwKIAkJ ewogCQkJSGVhcFR1cGxlCW5ld3R1cDsKIAotCQkJbmV3dHVwID0gU2VhcmNoU3lzQ2FjaGVB dHROYW1lKG5ld19yZWxpZCwgYXR0bmFtZSk7CisJCQluZXd0dXAgPSBTZWFyY2hTeXNDYWNo ZUF0dE5hbWUodG9fcmVsLCBhdHRuYW1lKTsKIAkJCWlmICghbmV3dHVwKQogCQkJCWVsb2co RVJST1IsICJjb3VsZCBub3QgZmluZCBpbmhlcml0ZWQgYXR0cmlidXRlIFwiJXNcIiBvZiBy ZWxhdGlvbiBcIiVzXCIiLAotCQkJCQkgYXR0bmFtZSwgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUobmV3cmVsYXRpb24pKTsKKwkJCQkJIGF0dG5hbWUsIGdldF9yZWxfbmFtZSh0b19yZWwp KTsKIAkJCW5ld19hdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChuZXd0 dXApKS0+YXR0bnVtIC0gMTsKIAkJCVJlbGVhc2VTeXNDYWNoZShuZXd0dXApOwogCkBAIC0x OTUzLDEwICsxOTg0LDEwIEBAIG1ha2VfaW5oX3RyYW5zbGF0aW9uX2xpc3QoUmVsYXRpb24g b2xkcmVsYXRpb24sIFJlbGF0aW9uIG5ld3JlbGF0aW9uLAogCQkvKiBGb3VuZCBpdCwgY2hl Y2sgdHlwZSBhbmQgY29sbGF0aW9uIG1hdGNoICovCiAJCWlmIChhdHR0eXBpZCAhPSBhdHQt PmF0dHR5cGlkIHx8IGF0dHR5cG1vZCAhPSBhdHQtPmF0dHR5cG1vZCkKIAkJCWVsb2coRVJS T1IsICJhdHRyaWJ1dGUgXCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNcIiBkb2VzIG5vdCBtYXRj aCBwYXJlbnQncyB0eXBlIiwKLQkJCQkgYXR0bmFtZSwgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUobmV3cmVsYXRpb24pKTsKKwkJCQkgYXR0bmFtZSwgZ2V0X3JlbF9uYW1lKHRvX3JlbCkp OwogCQlpZiAoYXR0Y29sbGF0aW9uICE9IGF0dC0+YXR0Y29sbGF0aW9uKQogCQkJZWxvZyhF UlJPUiwgImF0dHJpYnV0ZSBcIiVzXCIgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMgbm90IG1h dGNoIHBhcmVudCdzIGNvbGxhdGlvbiIsCi0JCQkJIGF0dG5hbWUsIFJlbGF0aW9uR2V0UmVs YXRpb25OYW1lKG5ld3JlbGF0aW9uKSk7CisJCQkJIGF0dG5hbWUsIGdldF9yZWxfbmFtZSh0 b19yZWwpKTsKIAogCQl2YXJzID0gbGFwcGVuZCh2YXJzLCBtYWtlVmFyKG5ld3Zhcm5vLAog CQkJCQkJCQkJIChBdHRyTnVtYmVyKSAobmV3X2F0dG5vICsgMSksCkBAIC0yMDIzLDYgKzIw NTQsMjU1IEBAIHRyYW5zbGF0ZV9jb2xfcHJpdnMoY29uc3QgQml0bWFwc2V0ICpwYXJlbnRf cHJpdnMsCiB9CiAKIC8qCisgKglidWlsZF9hcHBlbmRfY2hpbGRfcmVsCisgKgkJQnVpbGQg YSBSZWxPcHRJbmZvIGZvciBjaGlsZCByZWxhdGlvbiBvZiBhbiBhcHBlbmQgcmVsCisgKgor ICogQWZ0ZXIgY3JlYXRpbmcgdGhlIFJlbE9wdEluZm8gZm9yIHRoZSBnaXZlbiBjaGlsZCBS VCBpbmRleCwgaXQgZ29lcyBvbiB0bworICogaW5pdGlhbGl6ZSBzb21lIG9mIGl0cyBmaWVs ZHMgYmFzZSBvbiB0aGUgcGFyZW50IFJlbE9wdEluZm8uCisgKgorICogSWYgdGhlIHF1YWxz IGluIGJhc2VyZXN0cmljdGluZm8gdHVybnMgb3V0IHRvIGJlIHNlbGYtY29udHJhZGljdG9y eSwgdGhlCisgKiBSZWxPcHRJbmZvIGlzIG1hcmtlZCBkdW1teSBiZWZvcmUgcmV0dXJuaW5n LgorICovCitzdGF0aWMgUmVsT3B0SW5mbyAqCitidWlsZF9hcHBlbmRfY2hpbGRfcmVsKFBs YW5uZXJJbmZvICpyb290LAorCQkJCQkgICBSZWxPcHRJbmZvICpwYXJlbnQsCisJCQkJCSAg IEluZGV4IGNoaWxkUlRpbmRleCkKK3sKKwlSZWxPcHRJbmZvICpjaGlsZHJlbDsKKwlSYW5n ZVRibEVudHJ5ICpjaGlsZFJURSA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbY2hpbGRSVGlu ZGV4XTsKKwlBcHBlbmRSZWxJbmZvICphcHBpbmZvID0gcm9vdC0+YXBwZW5kX3JlbF9hcnJh eVtjaGlsZFJUaW5kZXhdOworCUxpc3QJICAgKmNoaWxkcXVhbHM7CisJTGlzdENlbGwgICAq bGM7CisJYm9vbAkJaGF2ZV9jb25zdF9mYWxzZV9jcTsKKwlJbmRleAkJY3FfbWluX3NlY3Vy aXR5OworCisJLyogQnVpbGQgdGhlIFJlbE9wdEluZm8uICovCisJY2hpbGRyZWwgPSBidWls ZF9zaW1wbGVfcmVsKHJvb3QsIGNoaWxkUlRpbmRleCwgcGFyZW50KTsKKworCS8qCisJICog UHJvcGFnYXRlIGxhdGVyYWxfcmVsaWRzIGFuZCBsYXRlcmFsX3JlZmVyZW5jZXJzIGZyb20g YXBwZW5kcmVsCisJICogcGFyZW50IHJlbHMgdG8gdGhlaXIgY2hpbGQgcmVscy4gIFdlIGlu dGVudGlvbmFsbHkgZ2l2ZSBlYWNoIGNoaWxkIHJlbAorCSAqIHRoZSBzYW1lIG1pbmltdW0g cGFyYW1ldGVyaXphdGlvbiwgZXZlbiB0aG91Z2ggaXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0 CisJICogc29tZSBkb24ndCByZWZlcmVuY2UgYWxsIHRoZSBsYXRlcmFsIHJlbHMuICBUaGlz IGlzIGJlY2F1c2UgYW55IGFwcGVuZAorCSAqIHBhdGggZm9yIHRoZSBwYXJlbnQgd2lsbCBo YXZlIHRvIGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyaXphdGlvbiBmb3IKKwkgKiBldmVyeSBj aGlsZCBhbnl3YXksIGFuZCB0aGVyZSdzIG5vIHZhbHVlIGluIGZvcmNpbmcgZXh0cmEKKwkg KiByZXBhcmFtZXRlcml6ZV9wYXRoKCkgY2FsbHMuICBTaW1pbGFybHksIGEgbGF0ZXJhbCBy ZWZlcmVuY2UgdG8gdGhlCisJICogcGFyZW50IHByZXZlbnRzIHVzZSBvZiBvdGhlcndpc2Ut bW92YWJsZSBqb2luIHJlbHMgZm9yIGVhY2ggY2hpbGQuCisJICovCisJY2hpbGRyZWwtPmRp cmVjdF9sYXRlcmFsX3JlbGlkcyA9IHBhcmVudC0+ZGlyZWN0X2xhdGVyYWxfcmVsaWRzOwor CWNoaWxkcmVsLT5sYXRlcmFsX3JlbGlkcyA9IHBhcmVudC0+bGF0ZXJhbF9yZWxpZHM7CisJ Y2hpbGRyZWwtPmxhdGVyYWxfcmVmZXJlbmNlcnMgPSBwYXJlbnQtPmxhdGVyYWxfcmVmZXJl bmNlcnM7CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gY29weSB0aGUgcGFyZW50J3MgcXVhbHMg dG8gdGhlIGNoaWxkLCB3aXRoIGFwcHJvcHJpYXRlCisJICogc3Vic3RpdHV0aW9uIG9mIHZh cmlhYmxlcy4gIEhvd2V2ZXIsIG9ubHkgdGhlIGJhc2VyZXN0cmljdGluZm8KKwkgKiBxdWFs cyBhcmUgbmVlZGVkIGJlZm9yZSB3ZSBjYW4gY2hlY2sgZm9yIGNvbnN0cmFpbnQgZXhjbHVz aW9uOyBzbworCSAqIGRvIHRoYXQgZmlyc3QgYW5kIHRoZW4gY2hlY2sgdG8gc2VlIGlmIHdl IGNhbiBkaXNyZWdhcmQgdGhpcyBjaGlsZC4KKwkgKgorCSAqIFRoZSBjaGlsZCByZWwncyB0 YXJnZXRsaXN0IG1pZ2h0IGNvbnRhaW4gbm9uLVZhciBleHByZXNzaW9ucywgd2hpY2gKKwkg KiBtZWFucyB0aGF0IHN1YnN0aXR1dGlvbiBpbnRvIHRoZSBxdWFscyBjb3VsZCBwcm9kdWNl IG9wcG9ydHVuaXRpZXMKKwkgKiBmb3IgY29uc3Qtc2ltcGxpZmljYXRpb24sIGFuZCBwZXJo YXBzIGV2ZW4gcHNldWRvY29uc3RhbnQgcXVhbHMuCisJICogVGhlcmVmb3JlLCB0cmFuc2Zv cm0gZWFjaCBSZXN0cmljdEluZm8gc2VwYXJhdGVseSB0byBzZWUgaWYgaXQKKwkgKiByZWR1 Y2VzIHRvIGEgY29uc3RhbnQgb3IgcHNldWRvY29uc3RhbnQuICAoV2UgbXVzdCBwcm9jZXNz IHRoZW0KKwkgKiBzZXBhcmF0ZWx5IHRvIGtlZXAgdHJhY2sgb2YgdGhlIHNlY3VyaXR5IGxl dmVsIG9mIGVhY2ggcXVhbC4pCisJICovCisJY2hpbGRxdWFscyA9IGZhbHNlOworCWNxX21p bl9zZWN1cml0eSA9IFVJTlRfTUFYOworCWhhdmVfY29uc3RfZmFsc2VfY3EgPSBmYWxzZTsK Kwlmb3JlYWNoKGxjLCBwYXJlbnQtPmJhc2VyZXN0cmljdGluZm8pCisJeworCQlSZXN0cmlj dEluZm8gKnJpbmZvID0gKFJlc3RyaWN0SW5mbyAqKSBsZmlyc3QobGMpOworCQlOb2RlCSAg ICpjaGlsZHF1YWwgPSAoTm9kZSAqKSByaW5mby0+Y2xhdXNlOworCQlMaXN0Q2VsbCAgICps YzI7CisKKwkJQXNzZXJ0KElzQShyaW5mbywgUmVzdHJpY3RJbmZvKSk7CisJCWNoaWxkcXVh bCA9IGFkanVzdF9hcHBlbmRyZWxfYXR0cnMocm9vdCwgY2hpbGRxdWFsLAorCQkJCQkJCQkJ CSAgIDEsICZhcHBpbmZvKTsKKwkJY2hpbGRxdWFsID0gZXZhbF9jb25zdF9leHByZXNzaW9u cyhyb290LCBjaGlsZHF1YWwpOworCQkvKiBjaGVjayBmb3IgZmxhdC1vdXQgY29uc3RhbnQg Ki8KKwkJaWYgKGNoaWxkcXVhbCAmJiBJc0EoY2hpbGRxdWFsLCBDb25zdCkpCisJCXsKKwkJ CWlmICgoKENvbnN0ICopIGNoaWxkcXVhbCktPmNvbnN0aXNudWxsIHx8CisJCQkJIURhdHVt R2V0Qm9vbCgoKENvbnN0ICopIGNoaWxkcXVhbCktPmNvbnN0dmFsdWUpKQorCQkJeworCQkJ CS8qIFJlc3RyaWN0aW9uIHJlZHVjZXMgdG8gY29uc3RhbnQgRkFMU0Ugb3IgTlVMTCAqLwor CQkJCWhhdmVfY29uc3RfZmFsc2VfY3EgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQkJ LyogUmVzdHJpY3Rpb24gcmVkdWNlcyB0byBjb25zdGFudCBUUlVFLCBzbyBkcm9wIGl0ICov CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBtaWdodCBoYXZlIGdvdHRlbiBhbiBBTkQgY2xh dXNlLCBpZiBzbyBmbGF0dGVuIGl0ICovCisJCWZvcmVhY2gobGMyLCBtYWtlX2FuZHNfaW1w bGljaXQoKEV4cHIgKikgY2hpbGRxdWFsKSkKKwkJeworCQkJTm9kZQkgICAqb25lY3EgPSAo Tm9kZSAqKSBsZmlyc3QobGMyKTsKKwkJCWJvb2wJCXBzZXVkb2NvbnN0YW50OworCisJCQkv KiBjaGVjayBmb3IgcHNldWRvY29uc3RhbnQgKG5vIFZhcnMgb3Igdm9sYXRpbGUgZnVuY3Rp b25zKSAqLworCQkJcHNldWRvY29uc3RhbnQgPQorCQkJCQkhY29udGFpbl92YXJzX29mX2xl dmVsKG9uZWNxLCAwKSAmJgorCQkJCQkhY29udGFpbl92b2xhdGlsZV9mdW5jdGlvbnMob25l Y3EpOworCQkJaWYgKHBzZXVkb2NvbnN0YW50KQorCQkJeworCQkJCS8qIHRlbGwgY3JlYXRl cGxhbi5jIHRvIGNoZWNrIGZvciBnYXRpbmcgcXVhbHMgKi8KKwkJCQlyb290LT5oYXNQc2V1 ZG9Db25zdGFudFF1YWxzID0gdHJ1ZTsKKwkJCX0KKwkJCS8qIHJlY29uc3RpdHV0ZSBSZXN0 cmljdEluZm8gd2l0aCBhcHByb3ByaWF0ZSBwcm9wZXJ0aWVzICovCisJCQljaGlsZHF1YWxz ID0gbGFwcGVuZChjaGlsZHF1YWxzLAorCQkJCQkJCQkgbWFrZV9yZXN0cmljdGluZm8oKEV4 cHIgKikgb25lY3EsCisJCQkJCQkJCQkJCQkgICByaW5mby0+aXNfcHVzaGVkX2Rvd24sCisJ CQkJCQkJCQkJCQkgICByaW5mby0+b3V0ZXJqb2luX2RlbGF5ZWQsCisJCQkJCQkJCQkJCQkg ICBwc2V1ZG9jb25zdGFudCwKKwkJCQkJCQkJCQkJCSAgIHJpbmZvLT5zZWN1cml0eV9sZXZl bCwKKwkJCQkJCQkJCQkJCSAgIE5VTEwsIE5VTEwsIE5VTEwpKTsKKwkJCWNxX21pbl9zZWN1 cml0eSA9IE1pbihjcV9taW5fc2VjdXJpdHksIHJpbmZvLT5zZWN1cml0eV9sZXZlbCk7CisJ CX0KKwl9CisKKwkvKgorCSAqIEluIGFkZGl0aW9uIHRvIHRoZSBxdWFscyBpbmhlcml0ZWQg ZnJvbSB0aGUgcGFyZW50LCB3ZSBtaWdodAorCSAqIGhhdmUgc2VjdXJpdHlRdWFscyBhc3Nv Y2lhdGVkIHdpdGggdGhpcyBwYXJ0aWN1bGFyIGNoaWxkIG5vZGUuCisJICogKEN1cnJlbnRs eSB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpbiBhcHBlbmRyZWxzIG9yaWdpbmF0aW5nIGZyb20K KwkgKiBVTklPTiBBTEw7IGluaGVyaXRhbmNlIGNoaWxkIHRhYmxlcyBkb24ndCBoYXZlIHRo ZWlyIG93bgorCSAqIHNlY3VyaXR5UXVhbHMuKQlQdWxsIGFueSBzdWNoIHNlY3VyaXR5UXVh bHMgdXAgaW50byB0aGUKKwkgKiBiYXNlcmVzdHJpY3RpbmZvIGZvciB0aGUgY2hpbGQuICBU aGlzIGlzIHNpbWlsYXIgdG8KKwkgKiBwcm9jZXNzX3NlY3VyaXR5X2JhcnJpZXJfcXVhbHMo KSBmb3IgdGhlIHBhcmVudCByZWwsIGV4Y2VwdAorCSAqIHRoYXQgd2UgY2FuJ3QgbWFrZSBh bnkgZ2VuZXJhbCBkZWR1Y3Rpb25zIGZyb20gc3VjaCBxdWFscywKKwkgKiBzaW5jZSB0aGV5 IGRvbid0IGhvbGQgZm9yIHRoZSB3aG9sZSBhcHBlbmRyZWwuCisJICovCisJaWYgKGNoaWxk UlRFLT5zZWN1cml0eVF1YWxzKQorCXsKKwkJSW5kZXgJCXNlY3VyaXR5X2xldmVsID0gMDsK KworCQlmb3JlYWNoKGxjLCBjaGlsZFJURS0+c2VjdXJpdHlRdWFscykKKwkJeworCQkJTGlz dAkgICAqcXVhbHNldCA9IChMaXN0ICopIGxmaXJzdChsYyk7CisJCQlMaXN0Q2VsbCAgICps YzI7CisKKwkJCWZvcmVhY2gobGMyLCBxdWFsc2V0KQorCQkJeworCQkJCUV4cHIJICAgKnF1 YWwgPSAoRXhwciAqKSBsZmlyc3QobGMyKTsKKworCQkJCS8qCisJCQkJICogbm90IGxpa2Vs eSB0aGF0IHdlJ2Qgc2VlIGNvbnN0YW50cyBoZXJlLCBzbyBubworCQkJCSAqIGNoZWNrCisJ CQkJICovCisJCQkJY2hpbGRxdWFscyA9IGxhcHBlbmQoY2hpbGRxdWFscywKKwkJCQkJCQkJ CSBtYWtlX3Jlc3RyaWN0aW5mbyhxdWFsLAorCQkJCQkJCQkJCQkJCSAgIHRydWUsCisJCQkJ CQkJCQkJCQkJICAgZmFsc2UsCisJCQkJCQkJCQkJCQkJICAgZmFsc2UsCisJCQkJCQkJCQkJ CQkJICAgc2VjdXJpdHlfbGV2ZWwsCisJCQkJCQkJCQkJCQkJICAgTlVMTCwgTlVMTCwKKwkJ CQkJCQkJCQkJCQkgICBOVUxMKSk7CisJCQkJY3FfbWluX3NlY3VyaXR5ID0gTWluKGNxX21p bl9zZWN1cml0eSwgc2VjdXJpdHlfbGV2ZWwpOworCQkJfQorCQkJc2VjdXJpdHlfbGV2ZWwr KzsKKwkJfQorCQlBc3NlcnQoc2VjdXJpdHlfbGV2ZWwgPD0gcm9vdC0+cXVhbF9zZWN1cml0 eV9sZXZlbCk7CisJfQorCisJLyogU2V0IGNoaWxkJ3MgdmVyc2lvbiBvZiBiYXNlcmVzdHJp Y3RpbmZvLiAqLworCWNoaWxkcmVsLT5iYXNlcmVzdHJpY3RpbmZvID0gY2hpbGRxdWFsczsK KwljaGlsZHJlbC0+YmFzZXJlc3RyaWN0X21pbl9zZWN1cml0eSA9IGNxX21pbl9zZWN1cml0 eTsKKworCWlmIChoYXZlX2NvbnN0X2ZhbHNlX2NxKQorCXsKKwkJLyoKKwkJICogU29tZSBy ZXN0cmljdGlvbiBjbGF1c2UgcmVkdWNlZCB0byBjb25zdGFudCBGQUxTRSBvciBOVUxMIGFm dGVyCisJCSAqIHN1YnN0aXR1dGlvbiwgc28gdGhpcyBjaGlsZCBuZWVkIG5vdCBiZSBzY2Fu bmVkLgorCQkgKi8KKwkJc2V0X2R1bW15X3JlbF9wYXRobGlzdChjaGlsZHJlbCk7CisJfQor CisJcmV0dXJuIGNoaWxkcmVsOworfQorCisvKgorICogYWRkX3Jvd21hcmtfanVua19jb2x1 bW5zCisgKiAJCUFkZCBuZWNlc3NhcnkganVuayBjb2x1bW5zIGZvciByb3dtYXJrZWQgaW5o ZXJpdGFuY2UgcGFyZW50IHJlbC4KKyAqCisgKiBUaGVzZSB2YWx1ZXMgYXJlIG5lZWRlZCBm b3IgbG9ja2luZyBvZiByZWxzIHNlbGVjdGVkIEZPUiBVUERBVEUvU0hBUkUsIGFuZAorICog dG8gZG8gRXZhbFBsYW5RdWFsIHJlY2hlY2tpbmcuICBTZWUgY29tbWVudHMgZm9yIFBsYW5S b3dNYXJrIGluCisgKiBwbGFubm9kZXMuaC4KKyAqLworc3RhdGljIExpc3QgKgorYWRkX3Jv d21hcmtfanVua19jb2x1bW5zKFBsYW5uZXJJbmZvICpyb290LCBQbGFuUm93TWFyayAqcmMp Cit7CisJTGlzdCAgICp0bGlzdCA9IHJvb3QtPnByb2Nlc3NlZF90bGlzdDsKKwlWYXIJCSAg ICp2YXI7CisJY2hhcgkJcmVzbmFtZVszMl07CisJVGFyZ2V0RW50cnkgKnRsZTsKKworCWlm IChyYy0+YWxsTWFya1R5cGVzICYgfigxIDw8IFJPV19NQVJLX0NPUFkpKQorCXsKKwkJLyog TmVlZCB0byBmZXRjaCBUSUQgKi8KKwkJdmFyID0gbWFrZVZhcihyYy0+cnRpLAorCQkJCQkg IFNlbGZJdGVtUG9pbnRlckF0dHJpYnV0ZU51bWJlciwKKwkJCQkJICBUSURPSUQsCisJCQkJ CSAgLTEsCisJCQkJCSAgSW52YWxpZE9pZCwKKwkJCQkJICAwKTsKKwkJc25wcmludGYocmVz bmFtZSwgc2l6ZW9mKHJlc25hbWUpLCAiY3RpZCV1IiwgcmMtPnJvd21hcmtJZCk7CisJCXRs ZSA9IG1ha2VUYXJnZXRFbnRyeSgoRXhwciAqKSB2YXIsCisJCQkJCQkJICBsaXN0X2xlbmd0 aCh0bGlzdCkgKyAxLAorCQkJCQkJCSAgcHN0cmR1cChyZXNuYW1lKSwKKwkJCQkJCQkgIHRy dWUpOworCQl0bGlzdCA9IGxhcHBlbmQodGxpc3QsIHRsZSk7CisJfQorCWlmIChyYy0+YWxs TWFya1R5cGVzICYgKDEgPDwgUk9XX01BUktfQ09QWSkpCisJeworCQkvKiBOZWVkIHRoZSB3 aG9sZSByb3cgYXMgYSBqdW5rIHZhciAqLworCQl2YXIgPSBtYWtlV2hvbGVSb3dWYXIocm9v dC0+c2ltcGxlX3J0ZV9hcnJheVtyYy0+cnRpXSwKKwkJCQkJCQkgIHJjLT5ydGksCisJCQkJ CQkJICAwLAorCQkJCQkJCSAgZmFsc2UpOworCQlzbnByaW50ZihyZXNuYW1lLCBzaXplb2Yo cmVzbmFtZSksICJ3aG9sZXJvdyV1IiwgcmMtPnJvd21hcmtJZCk7CisJCXRsZSA9IG1ha2VU YXJnZXRFbnRyeSgoRXhwciAqKSB2YXIsCisJCQkJCQkJICBsaXN0X2xlbmd0aCh0bGlzdCkg KyAxLAorCQkJCQkJCSAgcHN0cmR1cChyZXNuYW1lKSwKKwkJCQkJCQkgIHRydWUpOworCQl0 bGlzdCA9IGxhcHBlbmQodGxpc3QsIHRsZSk7CisJfQorCisJLyogRm9yIGluaGVyaXRhbmNl IGNhc2VzLCBhbHdheXMgZmV0Y2ggdGhlIHRhYmxlb2lkIHRvby4gKi8KKwl2YXIgPSBtYWtl VmFyKHJjLT5ydGksCisJCQkJICBUYWJsZU9pZEF0dHJpYnV0ZU51bWJlciwKKwkJCQkgIE9J RE9JRCwKKwkJCQkgIC0xLAorCQkJCSAgSW52YWxpZE9pZCwKKwkJCQkgIDApOworCXNucHJp bnRmKHJlc25hbWUsIHNpemVvZihyZXNuYW1lKSwgInRhYmxlb2lkJXUiLCByYy0+cm93bWFy a0lkKTsKKwl0bGUgPSBtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgdmFyLAorCQkJCQkJICBs aXN0X2xlbmd0aCh0bGlzdCkgKyAxLAorCQkJCQkJICBwc3RyZHVwKHJlc25hbWUpLAorCQkJ CQkJICB0cnVlKTsKKwl0bGlzdCA9IGxhcHBlbmQodGxpc3QsIHRsZSk7CisKKwlyZXR1cm4g dGxpc3Q7Cit9CisKK0FwcGVuZFJlbEluZm8gKgorbWFrZV9hcHBlbmRfcmVsX2luZm8oUmVs T3B0SW5mbyAqcGFyZW50cmVsLCBSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCisJCQkJCSBU dXBsZURlc2MgY2hpbGRkZXNjLCBPaWQgY2hpbGRvaWQsIE9pZCBjaGlsZHJlbHR5cGUsCisJ CQkJCSBJbmRleCBjaGlsZFJUaW5kZXgpCit7CisJQXBwZW5kUmVsSW5mbyAgKmFwcGluZm8g PSBtYWtlTm9kZShBcHBlbmRSZWxJbmZvKTsKKworCWFwcGluZm8tPnBhcmVudF9yZWxpZCA9 IHBhcmVudHJlbC0+cmVsaWQ7CisJYXBwaW5mby0+Y2hpbGRfcmVsaWQgPSBjaGlsZFJUaW5k ZXg7CisJYXBwaW5mby0+cGFyZW50X3JlbHR5cGUgPSBwYXJlbnRyZWwtPnJlbHR5cGU7CisJ YXBwaW5mby0+Y2hpbGRfcmVsdHlwZSA9IGNoaWxkcmVsdHlwZTsKKwltYWtlX2luaF90cmFu c2xhdGlvbl9saXN0KHBhcmVudHJlbC0+dHVwZGVzYywgY2hpbGRkZXNjLAorCQkJCQkJCSAg cGFyZW50cnRlLT5yZWxpZCwgY2hpbGRvaWQsCisJCQkJCQkJICBjaGlsZFJUaW5kZXgsCisJ CQkJCQkJICAmYXBwaW5mby0+dHJhbnNsYXRlZF92YXJzKTsKKwlhcHBpbmZvLT5wYXJlbnRf cmVsb2lkID0gcGFyZW50cnRlLT5yZWxpZDsKKworCXJldHVybiBhcHBpbmZvOworfQorCisv KgogICogYWRqdXN0X2FwcGVuZHJlbF9hdHRycwogICoJICBDb3B5IHRoZSBzcGVjaWZpZWQg cXVlcnkgb3IgZXhwcmVzc2lvbiBhbmQgdHJhbnNsYXRlIFZhcnMgcmVmZXJyaW5nIHRvIGEK ICAqCSAgcGFyZW50IHJlbCB0byByZWZlciB0byB0aGUgY29ycmVzcG9uZGluZyBjaGlsZCBy ZWwgaW5zdGVhZC4gIFdlIGFsc28KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvTWFrZWZpbGUK aW5kZXggYzU0ZDBhNjkwZC4uZGE5Y2NmMzJiNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDYgQEAgdG9wX2J1aWxkZGlyID0gLi4vLi4vLi4v Li4KIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIAogT0JK UyA9IGNsYXVzZXMubyBqb2luaW5mby5vIG9yY2xhdXNlcy5vIHBhdGhub2RlLm8gcGxhY2Vo b2xkZXIubyBcCi0gICAgICAgcGxhbmNhdC5vIHByZWR0ZXN0Lm8gcmVsbm9kZS5vIHJlc3Ry aWN0aW5mby5vIHRsaXN0Lm8gdmFyLm8KKwkgICBwbGFuY2F0Lm8gcHJlZHRlc3QubyByZWxu b2RlLm8gcmVzdHJpY3RpbmZvLm8gdGxpc3QubyB2YXIubwogCiBpbmNsdWRlICQodG9wX3Ny Y2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w bGFuY2F0LmMKaW5kZXggZWQwOTUzZjllMS4uY2U4YThmYjc4ZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtMTA2LDcgKzEwNiw3IEBAIHN0YXRpYyB2b2lk IHNldF9iYXNlcmVsX3BhcnRpdGlvbl9rZXlfZXhwcnMoUmVsYXRpb24gcmVsYXRpb24sCiAg Ki8KIHZvaWQKIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVs YXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCi0JCQkJICBSZWxPcHRJbmZvICpyZWwp CisJCQkJICBCaXRtYXBzZXQgKnVwZGF0ZWRDb2xzLCBSZWxPcHRJbmZvICpyZWwpCiB7CiAJ SW5kZXgJCXZhcm5vID0gcmVsLT5yZWxpZDsKIAlSZWxhdGlvbglyZWxhdGlvbjsKQEAgLTQ0 NCwxMSArNDQ0LDMyIEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBP aWQgcmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJZ2V0X3JlbGF0aW9uX2Zv cmVpZ25fa2V5cyhyb290LCByZWwsIHJlbGF0aW9uLCBpbmhwYXJlbnQpOwogCiAJLyoKLQkg KiBDb2xsZWN0IGluZm8gYWJvdXQgcmVsYXRpb24ncyBwYXJ0aXRpb25pbmcgc2NoZW1lLCBp ZiBhbnkuIE9ubHkKLQkgKiBpbmhlcml0YW5jZSBwYXJlbnRzIG1heSBiZSBwYXJ0aXRpb25l ZC4KKwkgKiBDb2xsZWN0IHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgaW5oZXJp dGFuY2UgcGFyZW50cy4KIAkgKi8KLQlpZiAoaW5ocGFyZW50ICYmIHJlbGF0aW9uLT5yZF9y ZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKLQkJc2V0X3JlbGF0 aW9uX3BhcnRpdGlvbl9pbmZvKHJvb3QsIHJlbCwgcmVsYXRpb24pOworCWlmIChpbmhwYXJl bnQpCisJeworCQkvKgorCQkgKiBXZSdsbCBuZWVkIHRoZSBUdXBsZURlc2Mgd2hlbiBpbml0 aWFsaXppbmcgdGhlIGNoaWxkIHJlbGF0aW9uLgorCQkgKiBBIGNvcHkgaXMgYmVpbmcgbWFk ZSBiZWNhdXNlIGNvbmN1cnJlbnQgY2hhbmdlcyBtaWdodCBkcm9wCisJCSAqIHRoZSByZWxj YWNoZSBlbnRyeS4gIFRoYXQncyBwb3NzaWJsZSBiZWNhdXNlIEFMVEVSIFRBQkxFCisJCSAq IGNoaWxkX3RhYmxlIE5PIElOSEVSSVQgcGFyZW50X3RhYmxlIG9ubHkgcmVxdWlyZXMgYW4K KwkJICogQWNjZXNzU2hhcmVMb2NrIG9uIHBhcmVudF90YWJsZS4KKwkJICovCisJCXJlbC0+ dHVwZGVzYyA9IENyZWF0ZVR1cGxlRGVzY0NvcHkoUmVsYXRpb25HZXREZXNjcihyZWxhdGlv bikpOworCQlyZWwtPnJlbHR5cGUgPSBSZWxhdGlvbkdldEZvcm0ocmVsYXRpb24pLT5yZWx0 eXBlOworCisJCS8qCisJCSAqIElmIHBhcnRpdGlvbmVkLCBhbHNvIHNhdmUgdGhlIGluZm9y bWF0aW9uIG9mIHBhcnRpdGlvbmluZyBzY2hlbWUsCisJCSAqIGFuZCB3aGV0aGVyIHRoZSBx dWVyeSB1cGRhdGVzIGFueSBvZiB0aGUgcGFydGl0aW9uIGtleSBjb2x1bW5zLgorCQkgKi8K KwkJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSkKKwkJeworCQkJc2V0X3JlbGF0aW9uX3BhcnRpdGlvbl9pbmZvKHJvb3QsIHJl bCwgcmVsYXRpb24pOworCQkJaWYgKCFyb290LT5wYXJ0Q29sc1VwZGF0ZWQpCisJCQkJcm9v dC0+cGFydENvbHNVcGRhdGVkID0KKwkJCQkJaGFzX3BhcnRpdGlvbl9hdHRycyhyZWxhdGlv biwgdXBkYXRlZENvbHMsIE5VTEwpOworCQl9CisJfQogCiAJaGVhcF9jbG9zZShyZWxhdGlv biwgTm9Mb2NrKTsKIApAQCAtMTg1NCwxNiArMTg3NSwyMCBAQCBzZXRfcmVsYXRpb25fcGFy dGl0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJ CQlSZWxhdGlvbiByZWxhdGlvbikKIHsKIAlQYXJ0aXRpb25EZXNjIHBhcnRkZXNjOwotCVBh cnRpdGlvbktleSBwYXJ0a2V5OwogCiAJQXNzZXJ0KHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtp bmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSk7CiAKIAlwYXJ0ZGVzYyA9IFJlbGF0 aW9uR2V0UGFydGl0aW9uRGVzYyhyZWxhdGlvbik7Ci0JcGFydGtleSA9IFJlbGF0aW9uR2V0 UGFydGl0aW9uS2V5KHJlbGF0aW9uKTsKIAlyZWwtPnBhcnRfc2NoZW1lID0gZmluZF9wYXJ0 aXRpb25fc2NoZW1lKHJvb3QsIHJlbGF0aW9uKTsKIAlBc3NlcnQocGFydGRlc2MgIT0gTlVM TCAmJiByZWwtPnBhcnRfc2NoZW1lICE9IE5VTEwpOwotCXJlbC0+Ym91bmRpbmZvID0gcGFy dGl0aW9uX2JvdW5kc19jb3B5KHBhcnRkZXNjLT5ib3VuZGluZm8sIHBhcnRrZXkpOwogCXJl bC0+bnBhcnRzID0gcGFydGRlc2MtPm5wYXJ0czsKKworCS8qCisJICogU2luY2Ugd2UgbXVz dCd2ZSB0YWtlbiBhIGxvY2sgb24gdGhlIHRhYmxlLCBpdCdzIG9rYXkgdG8gc2ltcGx5IGNv cHkKKwkgKiB0aGUgcG9pbnRlcnMgdG8gcmVsY2FjaGUgZGF0YSBoZXJlLgorCSAqLworCXJl bC0+cGFydF9vaWRzID0gcGFydGRlc2MtPm9pZHM7CisJcmVsLT5ib3VuZGluZm8gPSBwYXJ0 ZGVzYy0+Ym91bmRpbmZvOwogCXNldF9iYXNlcmVsX3BhcnRpdGlvbl9rZXlfZXhwcnMocmVs YXRpb24sIHJlbCk7CiAJcmVsLT5wYXJ0aXRpb25fcXVhbCA9IFJlbGF0aW9uR2V0UGFydGl0 aW9uUXVhbChyZWxhdGlvbik7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2Rl LmMKaW5kZXggMjliYTE5MzQ5Zi4uYzIzZGI5ZDc4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL3JlbG5vZGUuYwpAQCAtMTMwLDYgKzEzMCwzNyBAQCBzZXR1cF9hcHBlbmRfcmVs X2FycmF5KFBsYW5uZXJJbmZvICpyb290KQogCX0KIH0KIAorLyogRXhwYW5kIHRoZSBQbGFu bmVySW5mbyBhcnJheXMgYnkgYWRkX3NpemUgbWVtYmVycyBhbmQgemVyby1pbml0IGl0LiAq Lwordm9pZAorZXhwYW5kX3BsYW5uZXJfYXJyYXlzKFBsYW5uZXJJbmZvICpyb290LCBpbnQg YWRkX3NpemUpCit7CisJaW50CQluZXdfc2l6ZSA9IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlf c2l6ZSArIGFkZF9zaXplOworCisJcm9vdC0+c2ltcGxlX3J0ZV9hcnJheSA9IChSYW5nZVRi bEVudHJ5ICoqKQorCQkJCQkJCXJlcGFsbG9jKHJvb3QtPnNpbXBsZV9ydGVfYXJyYXksCisJ CQkJCQkJCQkgc2l6ZW9mKFJhbmdlVGJsRW50cnkgKikgKiBuZXdfc2l6ZSk7CisJcm9vdC0+ c2ltcGxlX3JlbF9hcnJheSA9IChSZWxPcHRJbmZvICoqKQorCQkJCQkJCQlyZXBhbGxvYyhy b290LT5zaW1wbGVfcmVsX2FycmF5LAorCQkJCQkJCQkJCSBzaXplb2YoUmVsT3B0SW5mbyAq KSAqIG5ld19zaXplKTsKKwlpZiAocm9vdC0+YXBwZW5kX3JlbF9hcnJheSkKKwkJcm9vdC0+ YXBwZW5kX3JlbF9hcnJheSA9IChBcHBlbmRSZWxJbmZvICoqKQorCQkJCQkJCQkJcmVwYWxs b2Mocm9vdC0+YXBwZW5kX3JlbF9hcnJheSwKKwkJCQkJCQkJCSBzaXplb2YoQXBwZW5kUmVs SW5mbyAqKSAqIG5ld19zaXplKTsKKwllbHNlCisJCXJvb3QtPmFwcGVuZF9yZWxfYXJyYXkg PSAoQXBwZW5kUmVsSW5mbyAqKikKKwkJCQkJCQkJCXBhbGxvYzAoc2l6ZW9mKEFwcGVuZFJl bEluZm8gKikgKgorCQkJCQkJCQkJCQluZXdfc2l6ZSk7CisKKwkvKiBTZXQgdGhlIGNvbnRl bnRzIG9mIGp1c3QgYWxsb2NhdGVkIG1lbW9yeSB0byAwLiAqLworCU1lbVNldChyb290LT5z aW1wbGVfcnRlX2FycmF5ICsgcm9vdC0+c2ltcGxlX3JlbF9hcnJheV9zaXplLAorCQkgICAw LCBzaXplb2YoUmFuZ2VUYmxFbnRyeSAqKSAqIGFkZF9zaXplKTsKKwlNZW1TZXQocm9vdC0+ c2ltcGxlX3JlbF9hcnJheSArIHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlfc2l6ZSwKKwkJICAg MCwgc2l6ZW9mKFJlbE9wdEluZm8gKikgKiBhZGRfc2l6ZSk7CisJTWVtU2V0KHJvb3QtPmFw cGVuZF9yZWxfYXJyYXkgKyByb290LT5zaW1wbGVfcmVsX2FycmF5X3NpemUsCisJCSAgIDAs IHNpemVvZihBcHBlbmRSZWxJbmZvICopICogYWRkX3NpemUpOworCXJvb3QtPnNpbXBsZV9y ZWxfYXJyYXlfc2l6ZSA9IG5ld19zaXplOworfQorCiAvKgogICogYnVpbGRfc2ltcGxlX3Jl bAogICoJICBDb25zdHJ1Y3QgYSBuZXcgUmVsT3B0SW5mbyBmb3IgYSBiYXNlIHJlbGF0aW9u IG9yICdvdGhlcicgcmVsYXRpb24uCkBAIC0yMzgsNyArMjY5LDggQEAgYnVpbGRfc2ltcGxl X3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBSZWxPcHRJbmZvICpwYXJlbnQp CiAJewogCQljYXNlIFJURV9SRUxBVElPTjoKIAkJCS8qIFRhYmxlIC0tLSByZXRyaWV2ZSBz dGF0aXN0aWNzIGZyb20gdGhlIHN5c3RlbSBjYXRhbG9ncyAqLwotCQkJZ2V0X3JlbGF0aW9u X2luZm8ocm9vdCwgcnRlLT5yZWxpZCwgcnRlLT5pbmgsIHJlbCk7CisJCQlnZXRfcmVsYXRp b25faW5mbyhyb290LCBydGUtPnJlbGlkLCBydGUtPmluaCwgcnRlLT51cGRhdGVkQ29scywK KwkJCQkJCQkgIHJlbCk7CiAJCQlicmVhazsKIAkJY2FzZSBSVEVfU1VCUVVFUlk6CiAJCWNh c2UgUlRFX0ZVTkNUSU9OOgpAQCAtMjc5LDUyICszMTEsNiBAQCBidWlsZF9zaW1wbGVfcmVs KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdEluZm8gKnBhcmVudCkKIAkJ cm9vdC0+cXVhbF9zZWN1cml0eV9sZXZlbCA9IE1heChyb290LT5xdWFsX3NlY3VyaXR5X2xl dmVsLAogCQkJCQkJCQkJCWxpc3RfbGVuZ3RoKHJ0ZS0+c2VjdXJpdHlRdWFscykpOwogCi0J LyoKLQkgKiBJZiB0aGlzIHJlbCBpcyBhbiBhcHBlbmRyZWwgcGFyZW50LCByZWN1cnNlIHRv IGJ1aWxkICJvdGhlciByZWwiCi0JICogUmVsT3B0SW5mb3MgZm9yIGl0cyBjaGlsZHJlbi4g IFRoZXkgYXJlICJvdGhlciByZWxzIiBiZWNhdXNlIHRoZXkgYXJlCi0JICogbm90IGluIHRo ZSBtYWluIGpvaW4gdHJlZSwgYnV0IHdlIHdpbGwgbmVlZCBSZWxPcHRJbmZvcyB0byBwbGFu IGFjY2VzcwotCSAqIHRvIHRoZW0uCi0JICovCi0JaWYgKHJ0ZS0+aW5oKQotCXsKLQkJTGlz dENlbGwgICAqbDsKLQkJaW50CQkJbnBhcnRzID0gcmVsLT5ucGFydHM7Ci0JCWludAkJCWNu dF9wYXJ0cyA9IDA7Ci0KLQkJaWYgKG5wYXJ0cyA+IDApCi0JCQlyZWwtPnBhcnRfcmVscyA9 IChSZWxPcHRJbmZvICoqKQotCQkJCXBhbGxvYyhzaXplb2YoUmVsT3B0SW5mbyAqKSAqIG5w YXJ0cyk7Ci0KLQkJZm9yZWFjaChsLCByb290LT5hcHBlbmRfcmVsX2xpc3QpCi0JCXsKLQkJ CUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSAoQXBwZW5kUmVsSW5mbyAqKSBsZmlyc3QobCk7 Ci0JCQlSZWxPcHRJbmZvICpjaGlsZHJlbDsKLQotCQkJLyogYXBwZW5kX3JlbF9saXN0IGNv bnRhaW5zIGFsbCBhcHBlbmQgcmVsczsgaWdub3JlIG90aGVycyAqLwotCQkJaWYgKGFwcGlu Zm8tPnBhcmVudF9yZWxpZCAhPSByZWxpZCkKLQkJCQljb250aW51ZTsKLQotCQkJY2hpbGRy ZWwgPSBidWlsZF9zaW1wbGVfcmVsKHJvb3QsIGFwcGluZm8tPmNoaWxkX3JlbGlkLAotCQkJ CQkJCQkJCXJlbCk7Ci0KLQkJCS8qIE5vdGhpbmcgbW9yZSB0byBkbyBmb3IgYW4gdW5wYXJ0 aXRpb25lZCB0YWJsZS4gKi8KLQkJCWlmICghcmVsLT5wYXJ0X3NjaGVtZSkKLQkJCQljb250 aW51ZTsKLQotCQkJLyoKLQkJCSAqIFRoZSBvcmRlciBvZiBwYXJ0aXRpb24gT0lEcyBpbiBh cHBlbmRfcmVsX2xpc3QgaXMgdGhlIHNhbWUgYXMKLQkJCSAqIHRoZSBvcmRlciBpbiB0aGUg UGFydGl0aW9uRGVzYywgc28gdGhlIG9yZGVyIG9mIHBhcnRfcmVscyB3aWxsCi0JCQkgKiBh bHNvIG1hdGNoIHRoZSBQYXJ0aXRpb25EZXNjLiAgU2VlIGV4cGFuZF9wYXJ0aXRpb25lZF9y dGVudHJ5LgotCQkJICovCi0JCQlBc3NlcnQoY250X3BhcnRzIDwgbnBhcnRzKTsKLQkJCXJl bC0+cGFydF9yZWxzW2NudF9wYXJ0c10gPSBjaGlsZHJlbDsKLQkJCWNudF9wYXJ0cysrOwot CQl9Ci0KLQkJLyogV2Ugc2hvdWxkIGhhdmUgc2VlbiBhbGwgdGhlIGNoaWxkIHBhcnRpdGlv bnMuICovCi0JCUFzc2VydChjbnRfcGFydHMgPT0gbnBhcnRzKTsKLQl9Ci0KIAlyZXR1cm4g cmVsOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBy dW5lLmMgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKaW5kZXggZDZj YTAzZGU0YS4uYmYxN2FlMjJiYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFydGl0aW9u aW5nL3BhcnRwcnVuZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1 bmUuYwpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgog I2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9jbGF1 c2VzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJvcHRpbWl6 ZXIvcGF0aG5vZGUuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5oIgogI2luY2x1 ZGUgIm9wdGltaXplci9wcmVkdGVzdC5oIgpAQCAtNDM2LDE3ICs0MzcsMjMgQEAgbWFrZV9w YXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnBhcmVudHJlbCwKIAkJICogaXMsIG5vdCBwcnVuZWQgYWxyZWFkeSkuCiAJCSAqLwogCQlz dWJwbGFuX21hcCA9IChpbnQgKikgcGFsbG9jKG5wYXJ0cyAqIHNpemVvZihpbnQpKTsKKwkJ bWVtc2V0KHN1YnBsYW5fbWFwLCAtMSwgbnBhcnRzICogc2l6ZW9mKGludCkpOwogCQlzdWJw YXJ0X21hcCA9IChpbnQgKikgcGFsbG9jKG5wYXJ0cyAqIHNpemVvZihpbnQpKTsKKwkJbWVt c2V0KHN1YnBhcnRfbWFwLCAtMSwgbnBhcnRzICogc2l6ZW9mKGludCkpOwogCQlwcmVzZW50 X3BhcnRzID0gTlVMTDsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbnBhcnRzOyBpKyspCiAJCXsK IAkJCVJlbE9wdEluZm8gKnBhcnRyZWwgPSBzdWJwYXJ0LT5wYXJ0X3JlbHNbaV07Ci0JCQlp bnQJCQlzdWJwbGFuaWR4ID0gcmVsaWRfc3VicGxhbl9tYXBbcGFydHJlbC0+cmVsaWRdIC0g MTsKLQkJCWludAkJCXN1YnBhcnRpZHggPSByZWxpZF9zdWJwYXJ0X21hcFtwYXJ0cmVsLT5y ZWxpZF0gLSAxOworCQkJaW50CQkJc3VicGxhbmlkeDsKKwkJCWludAkJCXN1YnBhcnRpZHg7 CiAKLQkJCXN1YnBsYW5fbWFwW2ldID0gc3VicGxhbmlkeDsKLQkJCXN1YnBhcnRfbWFwW2ld ID0gc3VicGFydGlkeDsKKwkJCS8qIFNraXAgcHJvY2Vzc2luZyBwcnVuZWQgcGFydGl0aW9u cy4gKi8KKwkJCWlmIChwYXJ0cmVsID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCXN1 YnBsYW5fbWFwW2ldID0gc3VicGxhbmlkeCA9IHJlbGlkX3N1YnBsYW5fbWFwW3BhcnRyZWwt PnJlbGlkXSAtIDE7CisJCQlzdWJwYXJ0X21hcFtpXSA9IHN1YnBhcnRpZHggPSByZWxpZF9z dWJwYXJ0X21hcFtwYXJ0cmVsLT5yZWxpZF0gLSAxOwogCQkJaWYgKHN1YnBsYW5pZHggPj0g MCkKIAkJCXsKIAkJCQlwcmVzZW50X3BhcnRzID0gYm1zX2FkZF9tZW1iZXIocHJlc2VudF9w YXJ0cywgaSk7CkBAIC01NDAsMjMgKzU0NywyMCBAQCBnZW5fcGFydHBydW5lX3N0ZXBzKFJl bE9wdEluZm8gKnJlbCwgTGlzdCAqY2xhdXNlcywgYm9vbCAqY29udHJhZGljdG9yeSkKIAog LyoKICAqIHBydW5lX2FwcGVuZF9yZWxfcGFydGl0aW9ucwotICoJCVJldHVybnMgUlQgaW5k ZXhlcyBvZiB0aGUgbWluaW11bSBzZXQgb2YgY2hpbGQgcGFydGl0aW9ucyB3aGljaCBtdXN0 Ci0gKgkJYmUgc2Nhbm5lZCB0byBzYXRpc2Z5IHJlbCdzIGJhc2VyZXN0cmljdGluZm8gcXVh bHMuCisgKgkJUmV0dXJucyBpbmRleGVzIGludG8gcmVsLT5wYXJ0X3JlbHMgb2YgdGhlIG1p bmltdW0gc2V0IG9mIGNoaWxkCisgKgkJcGFydGl0aW9ucyB3aGljaCBtdXN0IGJlIHNjYW5u ZWQgdG8gc2F0aXNmeSByZWwncyBiYXNlcmVzdHJpY3RpbmZvCisgKgkJcXVhbHMuCiAgKgog ICogQ2FsbGVycyBtdXN0IGVuc3VyZSB0aGF0ICdyZWwnIGlzIGEgcGFydGl0aW9uZWQgdGFi bGUuCiAgKi8KLVJlbGlkcworQml0bWFwc2V0ICoKIHBydW5lX2FwcGVuZF9yZWxfcGFydGl0 aW9ucyhSZWxPcHRJbmZvICpyZWwpCiB7Ci0JUmVsaWRzCQlyZXN1bHQ7CiAJTGlzdAkgICAq Y2xhdXNlcyA9IHJlbC0+YmFzZXJlc3RyaWN0aW5mbzsKIAlMaXN0CSAgICpwcnVuaW5nX3N0 ZXBzOwogCWJvb2wJCWNvbnRyYWRpY3Rvcnk7CiAJUGFydGl0aW9uUHJ1bmVDb250ZXh0IGNv bnRleHQ7Ci0JQml0bWFwc2V0ICAqcGFydGluZGV4ZXM7Ci0JaW50CQkJaTsKIAotCUFzc2Vy dChjbGF1c2VzICE9IE5JTCk7CiAJQXNzZXJ0KHJlbC0+cGFydF9zY2hlbWUgIT0gTlVMTCk7 CiAKIAkvKiBJZiB0aGVyZSBhcmUgbm8gcGFydGl0aW9ucywgcmV0dXJuIHRoZSBlbXB0eSBz ZXQgKi8KQEAgLTU2NCw2ICs1NjgsMTMgQEAgcHJ1bmVfYXBwZW5kX3JlbF9wYXJ0aXRpb25z KFJlbE9wdEluZm8gKnJlbCkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgorCSAqIElmIHBydW5p bmcgaXMgZGlzYWJsZWQgb3IgaWYgdGhlcmUgYXJlIG5vIGNsYXVzZXMgdG8gcHJ1bmUgd2l0 aCwKKwkgKiByZXR1cm4gYWxsIHBhcnRpdGlvbnMuCisJICovCisJaWYgKCFlbmFibGVfcGFy dGl0aW9uX3BydW5pbmcgfHwgY2xhdXNlcyA9PSBOSUwpCisJCXJldHVybiBibXNfYWRkX3Jh bmdlKE5VTEwsIDAsIHJlbC0+bnBhcnRzIC0gMSk7CisKKwkvKgogCSAqIFByb2Nlc3MgY2xh dXNlcy4gIElmIHRoZSBjbGF1c2VzIGFyZSBmb3VuZCB0byBiZSBjb250cmFkaWN0b3J5LCB3 ZSBjYW4KIAkgKiByZXR1cm4gdGhlIGVtcHR5IHNldC4KIAkgKi8KQEAgLTU5MCwxNSArNjAx LDcgQEAgcHJ1bmVfYXBwZW5kX3JlbF9wYXJ0aXRpb25zKFJlbE9wdEluZm8gKnJlbCkKIAlj b250ZXh0LmV2YWxleGVjcGFyYW1zID0gZmFsc2U7CiAKIAkvKiBBY3R1YWwgcHJ1bmluZyBo YXBwZW5zIGhlcmUuICovCi0JcGFydGluZGV4ZXMgPSBnZXRfbWF0Y2hpbmdfcGFydGl0aW9u cygmY29udGV4dCwgcHJ1bmluZ19zdGVwcyk7Ci0KLQkvKiBBZGQgc2VsZWN0ZWQgcGFydGl0 aW9ucycgUlQgaW5kZXhlcyB0byByZXN1bHQuICovCi0JaSA9IC0xOwotCXJlc3VsdCA9IE5V TEw7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHBhcnRpbmRleGVzLCBpKSkgPj0g MCkKLQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIocmVzdWx0LCByZWwtPnBhcnRfcmVsc1tp XS0+cmVsaWQpOwotCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gZ2V0X21hdGNoaW5nX3Bh cnRpdGlvbnMoJmNvbnRleHQsIHBydW5pbmdfc3RlcHMpOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaCBiL3NyYy9pbmNsdWRlL25vZGVzL3Jl bGF0aW9uLmgKaW5kZXggMjkzMzlkNmM3Mi4uNmI2MTRlNDc5NCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxh dGlvbi5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIFJFTEFUSU9OX0gKIAogI2luY2x1 ZGUgImFjY2Vzcy9zZGlyLmgiCisjaW5jbHVkZSAiYWNjZXNzL3R1cGRlc2MuaCIKICNpbmNs dWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKICNpbmNsdWRlICJu b2Rlcy9wYXJhbXMuaCIKQEAgLTcxMCw2ICs3MTEsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxP cHRJbmZvCiAJaW50CQkJbnBhcnRzOwkJCS8qIG51bWJlciBvZiBwYXJ0aXRpb25zICovCiAJ c3RydWN0IFBhcnRpdGlvbkJvdW5kSW5mb0RhdGEgKmJvdW5kaW5mbzsJLyogUGFydGl0aW9u IGJvdW5kcyAqLwogCUxpc3QJICAgKnBhcnRpdGlvbl9xdWFsOyAvKiBwYXJ0aXRpb24gY29u c3RyYWludCAqLworCU9pZAkJICAgKnBhcnRfb2lkczsJCS8qIHBhcnRpdGlvbiBPSURzICov CiAJc3RydWN0IFJlbE9wdEluZm8gKipwYXJ0X3JlbHM7CS8qIEFycmF5IG9mIFJlbE9wdElu Zm9zIG9mIHBhcnRpdGlvbnMsCiAJCQkJCQkJCQkgKiBzdG9yZWQgaW4gdGhlIHNhbWUgb3Jk ZXIgb2YgYm91bmRzICovCiAJTGlzdAkgICoqcGFydGV4cHJzOwkJLyogTm9uLW51bGxhYmxl IHBhcnRpdGlvbiBrZXkgZXhwcmVzc2lvbnMuICovCkBAIC03MTksNiArNzIxLDEyIEBAIHR5 cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAlJbmRleAkJaW5oX3Jvb3RfcGFyZW50OwkvKiBG b3Igb3RoZXJyZWxzLCB0aGlzIGlzIHRoZSBSVCBpbmRleCBvZgogCQkJCQkJCQkJICogaW5o ZXJpdGFuY2UgdGFibGUgbWVudGlvbmVkIGluIHRoZSBxdWVyeQogCQkJCQkJCQkJICogZnJv bSB3aGljaCB0aGlzIHJlbGF0aW9uIG9yaWdpbmF0ZWQgKi8KKwkvKgorCSAqIFNldCBvbmx5 IGlmIHRoaXMgaXMgYW4gaW5oZXJpdGFuY2UgcGFyZW50IHJlbGF0aW9uLiAgVGhpcyBpbmZv cm1hdGlvbgorCSAqIGlzIG5lZWRlZCB3aGVuIGluaXRpYWxpemluZyB0aGUgcGxhbm5pbmcg aW5mbyBmb3IgY2hpbGRyZW4uCisJICovCisJVHVwbGVEZXNjCXR1cGRlc2M7CQkvKiBBICJj b3B5IiBvZiB0aGUgdGFibGUncyB0dXBsZSBkZXNyaXB0b3IgKi8KKwlPaWQJCQlyZWx0eXBl OwkJLyogVGFibGUncyByZWx0eXBlICovCiB9IFJlbE9wdEluZm87CiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29w dGltaXplci9wYXRobm9kZS5oCmluZGV4IDgxYWJjZjUzYTguLmIxYmFhMzExN2EgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCisrKyBiL3NyYy9pbmNs dWRlL29wdGltaXplci9wYXRobm9kZS5oCkBAIC0yNjEsNiArMjYxLDcgQEAgZXh0ZXJuIFBh dGggKnJlcGFyYW1ldGVyaXplX3BhdGhfYnlfY2hpbGQoUGxhbm5lckluZm8gKnJvb3QsIFBh dGggKnBhdGgsCiAgKi8KIGV4dGVybiB2b2lkIHNldHVwX3NpbXBsZV9yZWxfYXJyYXlzKFBs YW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lkIHNldHVwX2FwcGVuZF9yZWxfYXJyYXko UGxhbm5lckluZm8gKnJvb3QpOworZXh0ZXJuIHZvaWQgZXhwYW5kX3BsYW5uZXJfYXJyYXlz KFBsYW5uZXJJbmZvICpyb290LCBpbnQgYWRkX3NpemUpOwogZXh0ZXJuIFJlbE9wdEluZm8g KmJ1aWxkX3NpbXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwKIAkJCQkg UmVsT3B0SW5mbyAqcGFyZW50KTsKIGV4dGVybiBSZWxPcHRJbmZvICpmaW5kX2Jhc2VfcmVs KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3BsYW5jYXQuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFuY2F0 LmgKaW5kZXggN2Q1M2NiYmI4Ny4uZWRhZjJhM2I0ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3BsYW5jYXQuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxh bmNhdC5oCkBAIC0yNiw3ICsyNiw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBnZXRfcmVsYXRp b25faW5mb19ob29rX3R5cGUgZ2V0X3JlbGF0aW9uX2luZm9faG9vazsKIAogCiBleHRlcm4g dm9pZCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9u T2JqZWN0SWQsCi0JCQkJICBib29sIGluaHBhcmVudCwgUmVsT3B0SW5mbyAqcmVsKTsKKwkJ CQkgIGJvb2wgaW5ocGFyZW50LCBCaXRtYXBzZXQgKnVwZGF0ZWRDb2xzLCBSZWxPcHRJbmZv ICpyZWwpOwogCiBleHRlcm4gTGlzdCAqaW5mZXJfYXJiaXRlcl9pbmRleGVzKFBsYW5uZXJJ bmZvICpyb290KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3ByZXAu aCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wcmVwLmgKaW5kZXggMzg2MDg3NzBhMi4uZThl MjFlMmVkNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3ByZXAuaAorKysg Yi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcHJlcC5oCkBAIC0zOCw3ICszOCw3IEBAIGV4dGVy biBFeHByICpjYW5vbmljYWxpemVfcXVhbChFeHByICpxdWFsLCBib29sIGlzX2NoZWNrKTsK IC8qCiAgKiBwcm90b3R5cGVzIGZvciBwcmVwdGxpc3QuYwogICovCi1leHRlcm4gTGlzdCAq cHJlcHJvY2Vzc190YXJnZXRsaXN0KFBsYW5uZXJJbmZvICpyb290KTsKK2V4dGVybiBMaXN0 ICpwcmVwcm9jZXNzX3RhcmdldGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIGJvb2wgaW5oZXJp dGFuY2VfdXBkYXRlKTsKIAogZXh0ZXJuIFBsYW5Sb3dNYXJrICpnZXRfcGxhbl9yb3dtYXJr KExpc3QgKnJvd21hcmtzLCBJbmRleCBydGluZGV4KTsKIApAQCAtNDYsMTIgKzQ2LDE2IEBA IGV4dGVybiBQbGFuUm93TWFyayAqZ2V0X3BsYW5fcm93bWFyayhMaXN0ICpyb3dtYXJrcywg SW5kZXggcnRpbmRleCk7CiAgKiBwcm90b3R5cGVzIGZvciBwcmVwdW5pb24uYwogICovCiBl eHRlcm4gUmVsT3B0SW5mbyAqcGxhbl9zZXRfb3BlcmF0aW9ucyhQbGFubmVySW5mbyAqcm9v dCk7Ci0KLWV4dGVybiB2b2lkIGV4cGFuZF9pbmhlcml0ZWRfdGFibGVzKFBsYW5uZXJJbmZv ICpyb290KTsKLQorZXh0ZXJuIHZvaWQgZXhwYW5kX2FwcGVuZF9yZWwoUGxhbm5lckluZm8g KnJvb3QsCisJCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJIFJhbmdlVGJsRW50cnkg KnJ0ZSwKKwkJCQkJCSBJbmRleCBydGkpOwogZXh0ZXJuIE5vZGUgKmFkanVzdF9hcHBlbmRy ZWxfYXR0cnMoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKm5vZGUsCiAJCQkJCSAgIGludCBu YXBwaW5mb3MsIEFwcGVuZFJlbEluZm8gKiphcHBpbmZvcyk7Ci0KK2V4dGVybiBBcHBlbmRS ZWxJbmZvICptYWtlX2FwcGVuZF9yZWxfaW5mbyhSZWxPcHRJbmZvICpwYXJlbnRyZWwsCisJ CQkJCSBSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCisJCQkJCSBUdXBsZURlc2MgY2hpbGRk ZXNjLCBPaWQgY2hpbGRvaWQsIE9pZCBjaGlsZHJlbHR5cGUsCisJCQkJCSBJbmRleCBjaGls ZFJUaW5kZXgpOwogZXh0ZXJuIE5vZGUgKmFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXVsdGls ZXZlbChQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwKIAkJCQkJCQkJICBSZWxpZHMg Y2hpbGRfcmVsaWRzLAogCQkJCQkJCQkgIFJlbGlkcyB0b3BfcGFyZW50X3JlbGlkcyk7CkBA IC02NCw1ICs2OCw0IEBAIGV4dGVybiBTcGVjaWFsSm9pbkluZm8gKmJ1aWxkX2NoaWxkX2pv aW5fc2ppbmZvKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJUmVsaWRzIGxlZnRfcmVsaWRz LCBSZWxpZHMgcmlnaHRfcmVsaWRzKTsKIGV4dGVybiBSZWxpZHMgYWRqdXN0X2NoaWxkX3Jl bGlkc19tdWx0aWxldmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgcmVsaWRzLAogCQkJ CQkJCSAgIFJlbGlkcyBjaGlsZF9yZWxpZHMsIFJlbGlkcyB0b3BfcGFyZW50X3JlbGlkcyk7 Ci0KICNlbmRpZgkJCQkJCQkvKiBQUkVQX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuaCBiL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9w YXJ0cHJ1bmUuaAppbmRleCBlMDdhYWFmNzk4Li5hYzBhOTc5MDEwIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmgKKysrIGIvc3JjL2luY2x1ZGUv cGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oCkBAIC03Niw3ICs3Niw3IEBAIGV4dGVybiBQYXJ0 aXRpb25QcnVuZUluZm8gKm1ha2VfcGFydGl0aW9uX3BydW5laW5mbyhQbGFubmVySW5mbyAq cm9vdCwKIAkJCQkJCSBMaXN0ICpzdWJwYXRocywKIAkJCQkJCSBMaXN0ICpwYXJ0aXRpb25l ZF9yZWxzLAogCQkJCQkJIExpc3QgKnBydW5lcXVhbCk7Ci1leHRlcm4gUmVsaWRzIHBydW5l X2FwcGVuZF9yZWxfcGFydGl0aW9ucyhSZWxPcHRJbmZvICpyZWwpOworZXh0ZXJuIEJpdG1h cHNldCAqcHJ1bmVfYXBwZW5kX3JlbF9wYXJ0aXRpb25zKFJlbE9wdEluZm8gKnJlbCk7CiBl eHRlcm4gQml0bWFwc2V0ICpnZXRfbWF0Y2hpbmdfcGFydGl0aW9ucyhQYXJ0aXRpb25QcnVu ZUNvbnRleHQgKmNvbnRleHQsCiAJCQkJCQlMaXN0ICpwcnVuaW5nX3N0ZXBzKTsKIApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKaW5kZXggMWY1Mzc4MDgwZC4uNzNmNjg0Zjk5 MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CkBAIC01NTQ3LDI5ICs1NTQ3 LDI5IEBAIHNlbGVjdCB0MS5iLCBzcy5waHYgZnJvbSBqb2luX3V0MSB0MSBsZWZ0IGpvaW4g bGF0ZXJhbAogICAgICAgICAgICAgICAoc2VsZWN0IHQyLmEgYXMgdDJhLCB0My5hIHQzYSwg bGVhc3QodDEuYSwgdDIuYSwgdDMuYSkgcGh2CiAJCQkJCSAgZnJvbSBqb2luX3B0MSB0MiBq b2luIGpvaW5fdXQxIHQzIG9uIHQyLmEgPSB0My5iKSBzcwogICAgICAgICAgICAgICBvbiB0 MS5hID0gc3MudDJhIG9yZGVyIGJ5IHQxLmE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgU29ydAotICAgT3V0cHV0OiB0 MS5iLCAoTEVBU1QodDEuYSwgdDIuYSwgdDMuYSkpLCB0MS5hCisgICBPdXRwdXQ6IHQxLmIs IChMRUFTVCh0MS5hLCB0Ml8xLmEsIHQzLmEpKSwgdDEuYQogICAgU29ydCBLZXk6IHQxLmEK ICAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KLSAgICAgICAgIE91dHB1dDogdDEuYiwg KExFQVNUKHQxLmEsIHQyLmEsIHQzLmEpKSwgdDEuYQorICAgICAgICAgT3V0cHV0OiB0MS5i LCAoTEVBU1QodDEuYSwgdDJfMS5hLCB0My5hKSksIHQxLmEKICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuam9pbl91dDEgdDEKICAgICAgICAgICAgICAgIE91dHB1dDogdDEu YSwgdDEuYiwgdDEuYwogICAgICAgICAgLT4gIEhhc2ggSm9pbgotICAgICAgICAgICAgICAg T3V0cHV0OiB0Mi5hLCBMRUFTVCh0MS5hLCB0Mi5hLCB0My5hKQotICAgICAgICAgICAgICAg SGFzaCBDb25kOiAodDMuYiA9IHQyLmEpCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEu YSwgTEVBU1QodDEuYSwgdDJfMS5hLCB0My5hKQorICAgICAgICAgICAgICAgSGFzaCBDb25k OiAodDMuYiA9IHQyXzEuYSkKICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuam9pbl91dDEgdDMKICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDMuYSwgdDMu YiwgdDMuYwogICAgICAgICAgICAgICAgLT4gIEhhc2gKLSAgICAgICAgICAgICAgICAgICAg IE91dHB1dDogdDIuYQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLmEKICAg ICAgICAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuam9pbl9wdDFwMXAxIHQyCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKHQxLmEgPSB0Mi5hKQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5qb2luX3B0MXAyIHQyXzEKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuam9pbl9w dDFwMXAxIHQyXzEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog dDJfMS5hCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh0MS5h ID0gdDJfMS5hKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5qb2luX3B0MXAyIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyLmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHQxLmEgPSB0Mi5hKQogKDIxIHJvd3MpCiAKIHNlbGVjdCB0MS5iLCBzcy5waHYgZnJv bSBqb2luX3V0MSB0MSBsZWZ0IGpvaW4gbGF0ZXJhbApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fYWdncmVnYXRlLm91dCBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2FnZ3JlZ2F0ZS5vdXQKaW5kZXggNmJjMTA2ODMx ZS4uMTQ1MGNlZjA1NyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9w YXJ0aXRpb25fYWdncmVnYXRlLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BhcnRpdGlvbl9hZ2dyZWdhdGUub3V0CkBAIC0xNDQsNyArMTQ0LDcgQEAgU0VMRUNUIGMs IHN1bShhKSBGUk9NIHBhZ2dfdGFiIFdIRVJFIDEgPSAyIEdST1VQIEJZIGM7CiAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICBIYXNoQWdncmVnYXRlCi0gICBHcm91cCBLZXk6IHBhZ2dfdGFiLmMKKyAgIEdy b3VwIEtleTogYwogICAgLT4gIFJlc3VsdAogICAgICAgICAgT25lLVRpbWUgRmlsdGVyOiBm YWxzZQogKDQgcm93cykKQEAgLTE1OSw3ICsxNTksNyBAQCBTRUxFQ1QgYywgc3VtKGEpIEZS T00gcGFnZ190YWIgV0hFUkUgYyA9ICd4JyBHUk9VUCBCWSBjOwogICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAg R3JvdXBBZ2dyZWdhdGUKLSAgIEdyb3VwIEtleTogcGFnZ190YWIuYworICAgR3JvdXAgS2V5 OiBjCiAgICAtPiAgUmVzdWx0CiAgICAgICAgICBPbmUtVGltZSBGaWx0ZXI6IGZhbHNlCiAo NCByb3dzKQotLSAKMi4xMS4wCgo= --------------E34CCD0679090A92C6C33EB0 Content-Type: text/plain; charset=UTF-8; name="v5-0004-Move-append-expansion-code-into-its-own-file.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v5-0004-Move-append-expansion-code-into-its-own-file.patch" RnJvbSA2OGM1NjU0NDhiMTFlNGMxMjk0NDExYjE4NDFhNmQ1MjdiZGI5NzI2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogV2VkLCA3IE5vdiAyMDE4IDE2OjUxOjMxICswOTAwClN1YmplY3Q6IFtQQVRDSCB2 NSA0LzZdIE1vdmUgYXBwZW5kIGV4cGFuc2lvbiBjb2RlIGludG8gaXRzIG93biBmaWxlCgpU aGlzIGNvbW1pdCBtb3ZlcyBleHBhbmRfYXBwZW5kX3JlbCBhbmQgdW5kZXJsaW5ncyB0bwpv cHRpbWl6ZXIvdXRpbHMvYXBwZW5kLmMuCgpBbHNvLCBhbGwgb2YgdGhlIEFwcGVuZFJlbElu Zm8gYmFzZWQKZXhwcmVzc2lvbiBtYW5pcHVsYXRpb24gcm91dGluZXMgYXJlIG1vdmVkIHRv Cm9wdGltaXplci91dGlscy9hcHBlbmRpbmZvLmMuCgpUaGlzIGNvbW1pdCBvbmx5IG1vdmVz IHRoZSBjb2RlIGFuZCBjb250YWlucyBubyBmdW5jdGlvbmFsIGNoYW5nZXMuCi0tLQogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgIHwgICAgMiArCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMgfCAgICAxICsKIHNyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcHJlcC9wcmVwdW5pb24uYyAgfCAxNTE2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL01ha2VmaWxlICAgICB8ICAgIDUg Ky0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZC5jICAgICB8ICA3MTkgKysr KysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMg fCAgODUxICsrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9w YXRobm9kZS5jICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5v ZGUuYyAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5j ICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvYXBwZW5kLmggICAgICAgICAg fCAgIDI4ICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9hcHBlbmRpbmZvLmggICAgICB8ICAg NDMgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3ByZXAuaCAgICAgICAgICAgIHwgICAyMSAt CiAxNCBmaWxlcyBjaGFuZ2VkLCAxNjUyIGluc2VydGlvbnMoKyksIDE1MzkgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBw ZW5kLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9h cHBlbmRpbmZvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIv YXBwZW5kLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvYXBw ZW5kaW5mby5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxs cGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMKaW5kZXgg NmVlODAwZDg0YS4uMGQwNTE2ODFlNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9h bGxwYXRocy5jCkBAIC0zMCw2ICszMCw4IEBACiAjaWZkZWYgT1BUSU1JWkVSX0RFQlVHCiAj aW5jbHVkZSAibm9kZXMvcHJpbnQuaCIKICNlbmRpZgorI2luY2x1ZGUgIm9wdGltaXplci9h cHBlbmQuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvYXBwZW5kaW5mby5oIgogI2luY2x1ZGUg Im9wdGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNp bmNsdWRlICJvcHRpbWl6ZXIvZ2Vxby5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv ZXF1aXZjbGFzcy5jCmluZGV4IGIyMmIzNmVjMGUuLjVhY2UyOGVhYjAgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNp bmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3Mu aCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIv YXBwZW5kaW5mby5oIgogI2luY2x1ZGUgIm9wdGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVk ZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgi CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCBkYTA4MzFkZTRl Li42ZTMyMWVjOWU3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9q b2lucmVscy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMK QEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2FwcGVuZGluZm8uaCIKICNpbmNs dWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9qb2luaW5m by5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRobm9kZS5oIgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDg0NzQ2YTliYzkuLjIxNmNhZGZiYTkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNp bmNsdWRlICJub2Rlcy9wcmludC5oIgogI2VuZGlmCiAjaW5jbHVkZSAibm9kZXMvcmVsYXRp b24uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvYXBwZW5kaW5mby5oIgogI2luY2x1ZGUgIm9w dGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNs dWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wcmVwL3ByZXB1bmlvbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAv cHJlcHVuaW9uLmMKaW5kZXggYzY4MTc3NTdlNy4uNzBmMzdjNTkzZiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKQEAgLTEyLDExICsxMiw2IEBACiAgKiBj YXNlLCBidXQgbW9zdCBvZiB0aGUgaGVhdnkgbGlmdGluZyBmb3IgdGhhdCBpcyBkb25lIGVs c2V3aGVyZSwKICAqIG5vdGFibHkgaW4gcHJlcGpvaW50cmVlLmMgYW5kIGFsbHBhdGhzLmMu CiAgKgotICogVGhlcmUgaXMgYWxzbyBzb21lIGNvZGUgaGVyZSB0byBzdXBwb3J0IHBsYW5u aW5nIG9mIHF1ZXJpZXMgdGhhdCB1c2UKLSAqIGluaGVyaXRhbmNlIChTRUxFQ1QgRlJPTSBm b28qKS4gIEluaGVyaXRhbmNlIHRyZWVzIGFyZSBjb252ZXJ0ZWQgaW50bwotICogYXBwZW5k IHJlbGF0aW9ucywgYW5kIHRoZW5jZWZvcnRoIHNoYXJlIGNvZGUgd2l0aCB0aGUgVU5JT04g QUxMIGNhc2UuCi0gKgotICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE4 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKICAqCkBAIC0zOSwzMiArMzQsMjEgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNp bmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3Mu aCIKLSNpbmNsdWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgogI2luY2x1ZGUgIm9wdGltaXpl ci9jb3N0LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCiAjaW5jbHVkZSAi b3B0aW1pemVyL3BhdGhzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5tYWluLmgiCiAj aW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcHJl cC5oIgotI2luY2x1ZGUgIm9wdGltaXplci9yZXN0cmljdGluZm8uaCIKICNpbmNsdWRlICJv cHRpbWl6ZXIvdGxpc3QuaCIKLSNpbmNsdWRlICJvcHRpbWl6ZXIvdmFyLmgiCiAjaW5jbHVk ZSAicGFyc2VyL3BhcnNlX2NvZXJjZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUu aCIKLSNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydHBydW5lLmgiCiAjaW5jbHVkZSAidXRp bHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAjaW5jbHVkZSAidXRp bHMvc2VsZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5oIgogCiAKLXR5cGVk ZWYgc3RydWN0Ci17Ci0JUGxhbm5lckluZm8gKnJvb3Q7Ci0JaW50CQkJbmFwcGluZm9zOwot CUFwcGVuZFJlbEluZm8gKiphcHBpbmZvczsKLX0gYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19j b250ZXh0OwotCiBzdGF0aWMgUmVsT3B0SW5mbyAqcmVjdXJzZV9zZXRfb3BlcmF0aW9ucyhO b2RlICpzZXRPcCwgUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCSAgIExpc3QgKmNvbFR5cGVz LCBMaXN0ICpjb2xDb2xsYXRpb25zLAogCQkJCQkgICBib29sIGp1bmtPSywKQEAgLTEwMywz MSArODcsNiBAQCBzdGF0aWMgTGlzdCAqZ2VuZXJhdGVfYXBwZW5kX3RsaXN0KExpc3QgKmNv bFR5cGVzLCBMaXN0ICpjb2xDb2xsYXRpb25zLAogCQkJCQkgIExpc3QgKmlucHV0X3RsaXN0 cywKIAkJCQkJICBMaXN0ICpyZWZuYW1lc190bGlzdCk7CiBzdGF0aWMgTGlzdCAqZ2VuZXJh dGVfc2V0b3BfZ3JvdXBsaXN0KFNldE9wZXJhdGlvblN0bXQgKm9wLCBMaXN0ICp0YXJnZXRs aXN0KTsKLXN0YXRpYyB2b2lkIGV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeShQbGFubmVySW5m byAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlLAotCQkJCQkJIEluZGV4IHJ0aSwgUmVsT3B0 SW5mbyAqcmVsKTsKLXN0YXRpYyB2b2lkIGV4cGFuZF9wYXJ0aXRpb25lZF9ydGVudHJ5KFBs YW5uZXJJbmZvICpyb290LAotCQkJCQkJICAgUmFuZ2VUYmxFbnRyeSAqcGFyZW50cnRlLAot CQkJCQkJICAgSW5kZXggcGFyZW50UlRpbmRleCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsKTsK LXN0YXRpYyBSZWxPcHRJbmZvICphZGRfaW5oZXJpdGFuY2VfY2hpbGRfcmVsKFBsYW5uZXJJ bmZvICpyb290LAotCQkJCQkJICBSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCi0JCQkJCQkg IEluZGV4IHBhcmVudFJUaW5kZXgsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKLQkJCQkJCSAg UGxhblJvd01hcmsgKnRvcF9wYXJlbnRyYywgUmVsYXRpb24gY2hpbGRyZWwpOwotc3RhdGlj IHZvaWQgbWFrZV9pbmhfdHJhbnNsYXRpb25fbGlzdChUdXBsZURlc2Mgb2xkX3R1cGRlc2Ms Ci0JCQkJCQkgIFR1cGxlRGVzYyBuZXdfdHVwZGVzYywKLQkJCQkJCSAgT2lkIGZyb21fcmVs LCBPaWQgdG9fcmVsLAotCQkJCQkJICBJbmRleCBuZXd2YXJubywgTGlzdCAqKnRyYW5zbGF0 ZWRfdmFycyk7Ci1zdGF0aWMgUmVsT3B0SW5mbyAqYnVpbGRfYXBwZW5kX2NoaWxkX3JlbChQ bGFubmVySW5mbyAqcm9vdCwKLQkJCQkJICAgUmVsT3B0SW5mbyAqcGFyZW50LAotCQkJCQkg ICBJbmRleCBjaGlsZFJUaW5kZXgpOwotc3RhdGljIExpc3QgKmFkZF9yb3dtYXJrX2p1bmtf Y29sdW1ucyhQbGFubmVySW5mbyAqcm9vdCwgUGxhblJvd01hcmsgKnJjKTsKLXN0YXRpYyBC aXRtYXBzZXQgKnRyYW5zbGF0ZV9jb2xfcHJpdnMoY29uc3QgQml0bWFwc2V0ICpwYXJlbnRf cHJpdnMsCi0JCQkJCUxpc3QgKnRyYW5zbGF0ZWRfdmFycyk7Ci1zdGF0aWMgTm9kZSAqYWRq dXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKE5vZGUgKm5vZGUsCi0JCQkJCQkJICAgYWRq dXN0X2FwcGVuZHJlbF9hdHRyc19jb250ZXh0ICpjb250ZXh0KTsKLXN0YXRpYyBSZWxpZHMg YWRqdXN0X2NoaWxkX3JlbGlkcyhSZWxpZHMgcmVsaWRzLCBpbnQgbmFwcGluZm9zLAotCQkJ CQlBcHBlbmRSZWxJbmZvICoqYXBwaW5mb3MpOwotc3RhdGljIExpc3QgKmFkanVzdF9pbmhl cml0ZWRfdGxpc3QoTGlzdCAqdGxpc3QsCi0JCQkJCSAgIEFwcGVuZFJlbEluZm8gKmNvbnRl eHQpOwogCiAKIC8qCkBAIC0xNDY0LDE0NzggKzE0MjMsMyBAQCBnZW5lcmF0ZV9zZXRvcF9n cm91cGxpc3QoU2V0T3BlcmF0aW9uU3RtdCAqb3AsIExpc3QgKnRhcmdldGxpc3QpCiAJQXNz ZXJ0KGxnID09IE5VTEwpOwogCXJldHVybiBncm91cGxpc3Q7CiB9Ci0KLQotLyoKLSAqIGV4 cGFuZF9hcHBlbmRfcmVsCi0gKgkJVGhpcyBpbml0aWFsaXplcyBSZWxPcHRJbmZvcyBmb3Ig YW4gYXBwZW5kcmVsJ3MgY2hpbGQgcmVsYXRpb25zLgotICoKLSAqICdyZWwnIGlzIHRoZSBh cHBlbmRyZWwgcGFyZW50LCB3aG9zZSByYW5nZSB0YWJsZSBlbnRyeSAoJ3J0ZScpIGhhcyBi ZWVuCi0gKiBtYXJrZWQgdG8gcmVxdWlyZSBhZGRpbmcgY2hpbGRyZW4uICBBbiBhcHBlbmRy ZWwgcGFyZW50IGNvdWxkIGVpdGhlcgotICogYmUgYSBzdWJxdWVyeSAoaWYgd2UgZmxhdHRl bmVkIFVOSU9OIEFMTCBxdWVyeSkgb3IgYSB0YWJsZSB0aGF0J3Mga25vd24KLSAqIHRvIGhh dmUgaW5oZXJpdGFuY2UgY2hpbGRyZW4uICBUaGUgbGF0dGVyIGNvbnNpc3RzIG9mIGJvdGgg cmVndWxhcgotICogaW5oZXJpdGFuY2UgcGFyZW50cyBhbmQgcGFydGl0aW9uZWQgdGFibGVz LgotICoKLSAqIEZvciBhIHN1YnF1ZXJ5IHBhcmVudCwgdGhlcmUgaXMgbm90IG11Y2ggdG8g YmUgZG9uZSBoZXJlIGJlY2F1c2UgdGhlCi0gKiBjaGlsZHJlbidzIFJURXMgYXJlIGFscmVh ZHkgcHJlc2VudCBpbiB0aGUgcXVlcnksIHNvIHdlIGp1c3QgaW5pdGlhbGl6ZQotICogUmVs T3B0SW5mb3MgZm9yIHRoZW0uICBBbHNvLCB0aGUgQXBwZW5kUmVsSW5mb3MgZm9yIGNoaWxk IHN1YnF1ZXJpZXMKLSAqIGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkLgotICoKLSAqIEZvciB0 YWJsZXMsIHdlIG5lZWQgdG8gYWRkIHRoZSBjaGlsZHJlbiB0byB0aGUgcmFuZ2UgdGFibGUg YW5kIGluaXRpYWxpemUKLSAqIEFwcGVuZFJlbEluZm9zLCBSZWxPcHRJbmZvcywgYW5kIFBs YW5Sb3dNYXJrcyAoaWYgYW55KSBmb3IgdGhlbS4gIEZvcgotICogYSBwYXJ0aXRpb25lZCBw YXJlbnQsIHdlIG9ubHkgYWRkIHRoZSBjaGlsZHJlbiByZW1haW5pbmcgYWZ0ZXIgcHJ1bmlu Zy4KLSAqIEZvciByZWd1bGFyIGluaGVyaXRhbmNlIHBhcmVudHMsIHdlIGZpbmQgdGhlIGNo aWxkcmVuIHVzaW5nCi0gKiBmaW5kX2FsbF9pbmhlcml0b3JzIGFuZCBhZGQgYWxsIG9mIHRo ZW0uCi0gKgotICogSWYgaXQgdHVybnMgb3V0IHRoYXQgdGhlcmUgYXJlIG5vIGNoaWxkcmVu LCB0aGVuIHdlIHNldCBydGUtPmluaCB0byBmYWxzZQotICogdG8gbGV0IHRoZSBjYWxsZXIg a25vdyB0aGF0IG9ubHkgdGhlIHBhcmVudCB0YWJsZSBuZWVkcyB0byBiZSBzY2FubmVkLiAg VGhlCi0gKiBjYWxsZXIgY2FuIGFjY29yZGluZ2x5IHN3aXRjaCB0byBhIG5vbi1BcHBlbmQg cGF0aC4gIEZvciBhIHBhcnRpdGlvbmVkCi0gKiBwYXJlbnQsIHRoYXQgbWVhbnMgYW4gZW1w dHkgcmVsYXRpb24gYmVjYXVzZSBwYXJlbnRzIHRoZW1zZWx2ZXMgY29udGFpbiBubwotICog ZGF0YS4KLSAqCi0gKiBGb3IgdGhlIHJlZ3VsYXIgaW5oZXJpdGFuY2UgY2FzZSwgdGhlIHBh cmVudCBhbHNvIGdldHMgYW5vdGhlciBSVEUgd2l0aAotICogaW5oID0gZmFsc2UgdG8gcmVw cmVzZW50IGl0IGFzIGFuIGFwcGVuZHJlbCBjaGlsZC4gIFRoZSBvcmlnaW5hbCBSVEUgaXMK LSAqIGNvbnNpZGVyZWQgdG8gcmVwcmVzZW50IHRoZSB3aG9sZSBpbmhlcml0YW5jZSBzZXQu Ci0gKi8KLXZvaWQKLWV4cGFuZF9hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwsIFJhbmdlVGJsRW50cnkgKnJ0ZSwKLQkJCQkgIEluZGV4IHJ0aSkKLXsK LQlBc3NlcnQocnRlLT5pbmgpOwotCS8qIEluaGVyaXRhbmNlIHBhcmVudCAocGFydGl0aW9u ZWQgb3Igbm90KSBvciBVTklPTiBBTEwgcGFyZW50IHN1YnF1ZXJ5LiAqLwotCUFzc2VydChy dGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OIHx8IHJ0ZS0+cnRla2luZCA9PSBSVEVfU1VC UVVFUlkpOwotCi0JLyoKLQkgKiBVTklPTiBBTEwgY2hpbGRyZW4gYWxyZWFkeSBnb3QgUlRF cyBhbmQgQXBwZW5kUmVsSW5mb3MsIHNvIGp1c3QgYnVpbGQKLQkgKiBSZWxPcHRJbmZvcyBh bmQgcmV0dXJuLgotCSAqCi0JICogSXQgbWlnaHQgYmUgYSBiaXQgb2RkIHRoYXQgdGhpcyBj b2RlIGlzIGluIHRoaXMsIGJlY2F1c2UgdGhlcmUgaXMKLQkgKiBub3RoaW5nIHRvIGV4cGFu ZCByZWFsbHkuCi0JICovCi0JaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkpCi0J ewotCQlMaXN0Q2VsbCAgICpsOwotCi0JCS8qCi0JCSAqIFdlIGRvbid0IG5lZWQgdG8gdXNl IGV4cGFuZF9wbGFubmVyX2FycmF5cyBpbiB0aGlzIGNhc2UsIGJlY2F1c2UKLQkJICogbm8g bmV3IGNoaWxkIFJURXMgYXJlIGNyZWF0ZWQuICBzZXR1cF9zaW1wbGVfcmVsX2FycmF5cygp IGFuZAotCQkgKiBzZXR1cF9hcHBlbmRfcmVsX2FycmF5IHdvdWxkJ3ZlIGNvbnNpZGVyZWQg dGhlc2UgY2hpbGQgUlRFcyB3aGVuCi0JCSAqIGFsbG9jYXRpbmcgc3BhY2UgZm9yIHZhcmlv dXMgYXJyYXlzLgotCQkgKi8KLQkJZm9yZWFjaChsLCByb290LT5hcHBlbmRfcmVsX2xpc3Qp Ci0JCXsKLQkJCUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSBsZmlyc3QobCk7Ci0JCQlJbmRl eAkJY2hpbGRSVGluZGV4ID0gYXBwaW5mby0+Y2hpbGRfcmVsaWQ7Ci0KLQkJCWlmIChhcHBp bmZvLT5wYXJlbnRfcmVsaWQgIT0gcnRpKQotCQkJCWNvbnRpbnVlOwotCi0JCQlBc3NlcnQo Y2hpbGRSVGluZGV4IDwgcm9vdC0+c2ltcGxlX3JlbF9hcnJheV9zaXplKTsKLQkJCUFzc2Vy dChyb290LT5zaW1wbGVfcnRlX2FycmF5W2NoaWxkUlRpbmRleF0gIT0gTlVMTCk7Ci0KLQkJ CS8qCi0JCQkgKiBXZSBzZXQgdGhlIGNvcnJlY3QgdmFsdWUgb2YgYmFzZXJlc3RyaWNpbmZv IGFuZAotCQkJICogYmFzZXJlc3RyaWN0X21pbl9zZWN1cml0eSBiZWxvdy4KLQkJCSAqLwot CQkJcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtjaGlsZFJUaW5kZXhdID0KLQkJCQlidWlsZF9h cHBlbmRfY2hpbGRfcmVsKHJvb3QsIHJlbCwgYXBwaW5mby0+Y2hpbGRfcmVsaWQpOwotCQl9 Ci0JfQotCWVsc2UKLQl7Ci0JCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9O KTsKLQkJQXNzZXJ0KGhhc19zdWJjbGFzcyhydGUtPnJlbGlkKSk7Ci0KLQkJLyoKLQkJICog VGhlIHJld3JpdGVyIHNob3VsZCBhbHJlYWR5IGhhdmUgb2J0YWluZWQgYW4gYXBwcm9wcmlh dGUgbG9jayBvbgotCQkgKiBlYWNoIHJlbGF0aW9uIG5hbWVkIGluIHRoZSBxdWVyeS4gIEhv d2V2ZXIsIGZvciBlYWNoIGNoaWxkIHJlbGF0aW9uCi0JCSAqIHdlIGFkZCB0byB0aGUgcXVl cnksIHdlIG11c3Qgb2J0YWluIGFuIGFwcHJvcHJpYXRlIGxvY2ssIGJlY2F1c2UKLQkJICog dGhpcyB3aWxsIGJlIHRoZSBmaXJzdCB1c2Ugb2YgdGhvc2UgcmVsYXRpb25zIGluIHRoZQot CQkgKiBwYXJzZS9yZXdyaXRlL3BsYW4gcGlwZWxpbmUuICBDaGlsZCByZWxzIHNob3VsZCB1 c2UgdGhlIHNhbWUKLQkJICogbG9ja21vZGUgYXMgdGhlaXIgcGFyZW50LgotCQkgKi8KLQkJ QXNzZXJ0KHJ0ZS0+cmVsbG9ja21vZGUgIT0gTm9Mb2NrKTsKLQotCQlpZiAocnRlLT5yZWxr aW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCQlleHBhbmRfcGFydGl0aW9u ZWRfcnRlbnRyeShyb290LCBydGUsIHJ0aSwgcmVsKTsKLQkJZWxzZQotCQkJZXhwYW5kX2lu aGVyaXRlZF9ydGVudHJ5KHJvb3QsIHJ0ZSwgcnRpLCByZWwpOwotCX0KLX0KLQotLyoKLSAq IGV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeQotICoJCUFkZCBlbnRyaWVzIGZvciBhbGwgdGhl IGNoaWxkIHRhYmxlcyB0byB0aGUgcXVlcnkncyByYW5nZXRhYmxlLCBhbmQKLSAqCQlidWls ZCBBcHBlbmRSZWxJbmZvIG5vZGVzIGZvciBhbGwgdGhlIGNoaWxkIHRhYmxlcyBhbmQgYWRk IHRoZW0gdG8KLSAqCQlyb290LT5hcHBlbmRfcmVsX2xpc3QuCi0gKgotICogTm90ZSB0aGF0 IHRoZSBvcmlnaW5hbCBSVEUgaXMgY29uc2lkZXJlZCB0byByZXByZXNlbnQgdGhlIHdob2xl Ci0gKiBpbmhlcml0YW5jZSBzZXQuICBUaGUgZmlyc3Qgb2YgdGhlIGdlbmVyYXRlZCBSVEVz IGlzIGFuIFJURSBmb3IgdGhlIHNhbWUKLSAqIHRhYmxlLCBidXQgd2l0aCBpbmggPSBmYWxz ZSwgdG8gcmVwcmVzZW50IHRoZSBwYXJlbnQgdGFibGUgaW4gaXRzIHJvbGUKLSAqIGFzIGEg c2ltcGxlIG1lbWJlciBvZiB0aGUgaW5oZXJpdGFuY2Ugc2V0LgotICoKLSAqIEEgY2hpbGRs ZXNzIHRhYmxlIGlzIG5ldmVyIGNvbnNpZGVyZWQgdG8gYmUgYW4gaW5oZXJpdGFuY2Ugc2V0 LiBGb3IKLSAqIHJlZ3VsYXIgaW5oZXJpdGFuY2UsIGEgcGFyZW50IFJURSBtdXN0IGFsd2F5 cyBoYXZlIGF0IGxlYXN0IHR3byBhc3NvY2lhdGVkCi0gKiBBcHBlbmRSZWxJbmZvczogb25l IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhcmVudCB0YWJsZSBhcyBhIHNpbXBsZSBtZW1iZXIg b2YKLSAqIGluaGVyaXRhbmNlIHNldCBhbmQgb25lIG9yIG1vcmUgY29ycmVzcG9uZGluZyB0 byB0aGUgYWN0dWFsIGNoaWxkcmVuLgotICovCi1zdGF0aWMgdm9pZAotZXhwYW5kX2luaGVy aXRlZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpydGUsIElu ZGV4IHJ0aSwKLQkJCQkJCSBSZWxPcHRJbmZvICpyZWwpCi17Ci0JT2lkCQkJcGFyZW50T0lE OwotCVBsYW5Sb3dNYXJrICpvbGRyYzsKLQlMT0NLTU9ERQlsb2NrbW9kZSA9IHJ0ZS0+cmVs bG9ja21vZGU7Ci0JTGlzdAkgICAqaW5oT0lEczsKLQlMaXN0Q2VsbCAgICpsOwotCWludAkJ CW51bV9jaGlsZHJlbjsKLQlpbnQJCQludW1fY2hpbGRyZW5fYWRkZWQgPSAwOwotCi0JQXNz ZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pOwotCUFzc2VydChsb2NrbW9kZSAh PSBOb0xvY2spOwotCXBhcmVudE9JRCA9IHJ0ZS0+cmVsaWQ7Ci0KLQkvKiBTY2FuIGZvciBh bGwgbWVtYmVycyBvZiBpbmhlcml0YW5jZSBzZXQsIGFjcXVpcmUgbmVlZGVkIGxvY2tzICov Ci0JaW5oT0lEcyA9IGZpbmRfYWxsX2luaGVyaXRvcnMocGFyZW50T0lELCBsb2NrbW9kZSwg TlVMTCk7Ci0KLQkvKgotCSAqIENoZWNrIHRoYXQgdGhlcmUncyBhdCBsZWFzdCBvbmUgZGVz Y2VuZGFudCwgZWxzZSB0cmVhdCBhcyBuby1jaGlsZAotCSAqIGNhc2UuICBUaGlzIGNvdWxk IGhhcHBlbiBkZXNwaXRlIGFib3ZlIGhhc19zdWJjbGFzcygpIGNoZWNrLCBpZiB0YWJsZQot CSAqIG9uY2UgaGFkIGEgY2hpbGQgYnV0IG5vIGxvbmdlciBkb2VzLgotCSAqLwotCW51bV9j aGlsZHJlbiA9IGxpc3RfbGVuZ3RoKGluaE9JRHMpOwotCWlmIChudW1fY2hpbGRyZW4gPCAy KQotCXsKLQkJLyogQ2xlYXIgZmxhZyBiZWZvcmUgcmV0dXJuaW5nICovCi0JCXJ0ZS0+aW5o ID0gZmFsc2U7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIElmIHBhcmVudCByZWxhdGlv biBpcyBzZWxlY3RlZCBGT1IgVVBEQVRFL1NIQVJFLCBwcmVwcm9jZXNzX3Jvd21hcmtzCi0J ICogc2hvdWxkJ3ZlIHNldCBpc1BhcmVudCA9IHRydWUuICBXZSdsbCBnZW5lcmF0ZSBhIG5l dyBQbGFuUm93TWFyayBmb3IKLQkgKiBlYWNoIGNoaWxkLgotCSAqLwotCW9sZHJjID0gZ2V0 X3BsYW5fcm93bWFyayhyb290LT5yb3dNYXJrcywgcnRpKTsKLQlBc3NlcnQob2xkcmMgPT0g TlVMTCB8fCBvbGRyYy0+aXNQYXJlbnQpOwotCi0JLyoKLQkgKiBNdXN0IGV4cGFuZCBQbGFu bmVySW5mbyBhcnJheXMgYnkgbnVtX2NoaWxkcmVuIGJlZm9yZSB3ZSBjYW4gYWRkCi0JICog Y2hpbGRyZW4uCi0JICovCi0JZXhwYW5kX3BsYW5uZXJfYXJyYXlzKHJvb3QsIG51bV9jaGls ZHJlbik7Ci0KLQlmb3JlYWNoKGwsIGluaE9JRHMpCi0JewotCQlPaWQJCQljaGlsZE9JRCA9 IGxmaXJzdF9vaWQobCk7Ci0JCVJlbGF0aW9uCW5ld3JlbGF0aW9uOwotCQlSZWxPcHRJbmZv ICpjaGlsZHJlbDsKLQotCQkvKiBBbHJlYWR5IGxvY2tlZCBhYm92ZS4gKi8KLQkJbmV3cmVs YXRpb24gPSBoZWFwX29wZW4oY2hpbGRPSUQsIE5vTG9jayk7Ci0KLQkJLyoKLQkJICogSXQg aXMgcG9zc2libGUgdGhhdCB0aGUgcGFyZW50IHRhYmxlIGhhcyBjaGlsZHJlbiB0aGF0IGFy ZSB0ZW1wCi0JCSAqIHRhYmxlcyBvZiBvdGhlciBiYWNrZW5kcy4gIFdlIGNhbm5vdCBzYWZl bHkgYWNjZXNzIHN1Y2ggdGFibGVzCi0JCSAqIChiZWNhdXNlIG9mIGJ1ZmZlcmluZyBpc3N1 ZXMpLCBhbmQgdGhlIGJlc3QgdGhpbmcgdG8gZG8gc2VlbXMKLQkJICogdG8gYmUgdG8gc2ls ZW50bHkgaWdub3JlIHRoZW0uCi0JCSAqLwotCQlpZiAoUkVMQVRJT05fSVNfT1RIRVJfVEVN UChuZXdyZWxhdGlvbikpCi0JCXsKLQkJCWhlYXBfY2xvc2UobmV3cmVsYXRpb24sIGxvY2tt b2RlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJY2hpbGRyZWwgPSBhZGRfaW5oZXJpdGFu Y2VfY2hpbGRfcmVsKHJvb3QsIHJ0ZSwgcnRpLCByZWwsIG9sZHJjLAotCQkJCQkJCQkJCQkg bmV3cmVsYXRpb24pOwotCQlBc3NlcnQoY2hpbGRyZWwgIT0gTlVMTCk7Ci0KLQkJLyogQ2xv c2UgY2hpbGQgcmVsYXRpb25zLCBidXQga2VlcCBsb2NrcyAqLwotCQloZWFwX2Nsb3NlKG5l d3JlbGF0aW9uLCBOb0xvY2spOwotCQludW1fY2hpbGRyZW5fYWRkZWQrKzsKLQl9Ci0KLQkv KgotCSAqIElmIGFsbCBjaGlsZHJlbiwgaW5jbHVkaW5nIHRoZSBwYXJlbnQgKGFzIGNoaWxk IHJlbCksIHdlcmUKLQkgKiBleGNsdWRlZCwgbWFyayB0aGUgcGFyZW50IHJlbCBhcyBlbXB0 eS4gIElmIGFsbCB0aGUgY2hpbGRyZW4gd2VyZSB0ZW1wCi0JICogdGFibGVzLCBwcmV0ZW5k IGl0J3MgYSBub24taW5oZXJpdGFuY2Ugc2l0dWF0aW9uOyB3ZSBkb24ndCBuZWVkIEFwcGVu ZAotCSAqIG5vZGUgaW4gdGhhdCBjYXNlLiAgVGhlIGR1cGxpY2F0ZSBSVEUgd2UgYWRkZWQg Zm9yIHRoZSBwYXJlbnQgdGFibGUgaXMKLQkgKiBoYXJtbGVzcywgc28gd2UgZG9uJ3QgYm90 aGVyIHRvIGdldCByaWQgb2YgaXQ7IGRpdHRvIGZvciB0aGUgdXNlbGVzcwotCSAqIFBsYW5S b3dNYXJrIG5vZGUuCi0JICovCi0JaWYgKG51bV9jaGlsZHJlbl9hZGRlZCA9PSAwKQotCQlt YXJrX2R1bW15X3JlbChyZWwpOwotCWVsc2UgaWYgKG51bV9jaGlsZHJlbl9hZGRlZCA9PSAx KQotCQlydGUtPmluaCA9IGZhbHNlOwotCi0JLyoKLQkgKiBBZGQganVuayBjb2x1bW5zIG5l ZWRlZCBieSB0aGUgcm93IG1hcmsgaWYgYW55IGFuZCBhbHNvIGFkZCB0aGUKLQkgKiByZWxl dmFudCBleHByZXNzaW9ucyB0byB0aGUgcm9vdCBwYXJlbnQncyByZWx0YXJnZXQuCi0JICov Ci0JaWYgKG9sZHJjKQotCXsKLQkJTGlzdCAgICp0bGlzdCA9IGFkZF9yb3dtYXJrX2p1bmtf Y29sdW1ucyhyb290LCBvbGRyYyk7Ci0KLQkJYnVpbGRfYmFzZV9yZWxfdGxpc3RzKHJvb3Qs IHRsaXN0KTsKLQl9Ci19Ci0KLS8qCi0gKiBleHBhbmRfcGFydGl0aW9uZWRfcnRlbnRyeQot ICoJCVBydW5lcyB1bm5lY2Vzc2FyeSBwYXJ0aXRpb25zIG9mIGEgcGFydGl0aW9uZWQgdGFi bGUgYW5kIGFkZHMKLSAqCQlyZW1haW5pbmcgb25lcyB0byB0aGUgUXVlcnkgYW5kIHRoZSBQ bGFubmVySW5mbwotICoKLSAqIFBhcnRpdGlvbnMgYXJlIGFkZGVkIHRvIHRoZSBxdWVyeSBp biBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBmb3VuZCBpbgotICogdGhlIHBhcmVudCdzIFBh cnRpdGlvbkRlc2MuCi0gKgotICogTm90ZTogZXZlbiB0aG91Z2ggb25seSB0aGUgdW5wcnVu ZWQgcGFydGl0aW9ucyB3aWxsIGJlIGFkZGVkIHRvIHRoZQotICogcmVzdWx0aW5nIHBsYW4s IHRoaXMgc3RpbGwgbG9ja3MgKmFsbCogcGFydGl0aW9ucyB2aWEgZmluZF9hbGxfaW5oZXJp dG9ycwotICogaW4gb3JkZXIgdG8gYXZvaWQgcGFydGl0aW9ucyBiZWluZyBsb2NrZWQgaW4g YSBkaWZmZXJlbnQgb3JkZXIgdGhhbiBvdGhlcgotICogcGxhY2VzIGluIHRoZSBiYWNrZW5k IHRoYXQgbWF5IGxvY2sgcGFydGl0aW9ucy4KLSAqLwotc3RhdGljIHZvaWQKLWV4cGFuZF9w YXJ0aXRpb25lZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpw YXJlbnRydGUsCi0JCQkJCQkgICBJbmRleCBwYXJlbnRSVGluZGV4LCBSZWxPcHRJbmZvICpw YXJlbnRyZWwpCi17Ci0JTE9DS01PREUJbG9ja21vZGUgPSBwYXJlbnRydGUtPnJlbGxvY2tt b2RlOwotCVBsYW5Sb3dNYXJrICpyb290cmMgPSBOVUxMOwotCWludAkJCWk7Ci0JQml0bWFw c2V0ICAqcGFydGluZGV4ZXM7Ci0JSW5kZXgJCXJvb3RQYXJlbnRSVGluZGV4ID0gcGFyZW50 cmVsLT5pbmhfcm9vdF9wYXJlbnQgPiAwID8KLQkJCQkJCQkJCXBhcmVudHJlbC0+aW5oX3Jv b3RfcGFyZW50IDoKLQkJCQkJCQkJCXBhcmVudFJUaW5kZXg7Ci0KLQkvKiBJZiByb290IHBh cnRpdGlvbmVkIHRhYmxlLCBsb2NrICphbGwqIHBhcnRpdGlvbnMgaW4gdGhlIHRyZWUuICov Ci0JaWYgKHBhcmVudFJUaW5kZXggPT0gcm9vdFBhcmVudFJUaW5kZXgpCi0JCSh2b2lkKSBm aW5kX2FsbF9pbmhlcml0b3JzKHBhcmVudHJ0ZS0+cmVsaWQsIGxvY2ttb2RlLCBOVUxMKTsK LQotCS8qCi0JICogSW5pdGlhbGl6ZSBwYXJ0aXRpb25lZF9jaGlsZF9yZWxzIHRvIGNvbnRh aW4gdGhpcyBSVCBpbmRleC4KLQkgKgotCSAqIE5vdGUgdGhhdCBkdXJpbmcgdGhlIHNldF9h cHBlbmRfcmVsX3BhdGhsaXN0KCkgcGhhc2UsIHZhbHVlcyBvZiB0aGUKLQkgKiBpbmRleGVz IG9mIHBhcnRpdGlvbmVkIHJlbGF0aW9ucyB0aGF0IGFwcGVhciBkb3duIGluIHRoZSB0cmVl IHdpbGwgYmUKLQkgKiBidWJibGVkIHVwIGludG8gcm9vdCBwYXJlbnQncyBsaXN0IHNvIHRo YXQgd2hlbiB3ZSd2ZSBjcmVhdGVkIFBhdGhzIGZvcgotCSAqIGFsbCB0aGUgY2hpbGRyZW4s IHRoZSByb290IHRhYmxlJ3MgbGlzdCB3aWxsIGNvbnRhaW4gYWxsIHN1Y2ggaW5kZXhlcy4K LQkgKi8KLQlwYXJlbnRyZWwtPnBhcnRpdGlvbmVkX2NoaWxkX3JlbHMgPSBsaXN0X21ha2Ux X2ludChwYXJlbnRSVGluZGV4KTsKLQotCS8qIFBlcmZvcm0gcHJ1bmluZy4gKi8KLQlwYXJ0 aW5kZXhlcyA9IHBydW5lX2FwcGVuZF9yZWxfcGFydGl0aW9ucyhwYXJlbnRyZWwpOwotCi0J LyogTXVzdCBleHBhbmQgUGxhbm5lckluZm8gYXJyYXlzIGJlZm9yZSB3ZSBjYW4gYWRkIGNo aWxkcmVuLiAqLwotCWV4cGFuZF9wbGFubmVyX2FycmF5cyhyb290LCBibXNfbnVtX21lbWJl cnMocGFydGluZGV4ZXMpKTsKLQotCS8qCi0JICogRm9yIHBhcnRpdGlvbmVkIHRhYmxlcywg d2UgYWxzbyBzdG9yZSB0aGUgcGFydGl0aW9uIFJlbE9wdEluZm8KLQkgKiBwb2ludGVycyBp biB0aGUgcGFyZW50J3MgUmVsT3B0SW5mby4KLQkgKi8KLQlwYXJlbnRyZWwtPnBhcnRfcmVs cyA9IChSZWxPcHRJbmZvICoqKSBwYWxsb2MwKHNpemVvZihSZWxPcHRJbmZvICopICoKLQkJ CQkJCQkJCQkJCSAgIHBhcmVudHJlbC0+bnBhcnRzKTsKLQotCXJvb3RyYyA9IGdldF9wbGFu X3Jvd21hcmsocm9vdC0+cm93TWFya3MsIHJvb3RQYXJlbnRSVGluZGV4KTsKLQlBc3NlcnQo cm9vdHJjID09IE5VTEwgfHwgcm9vdHJjLT5pc1BhcmVudCk7Ci0JaSA9IC0xOwotCXdoaWxl ICgoaSA9IGJtc19uZXh0X21lbWJlcihwYXJ0aW5kZXhlcywgaSkpID49IDApCi0JewotCQlP aWQJCWNoaWxkT0lEID0gcGFyZW50cmVsLT5wYXJ0X29pZHNbaV07Ci0JCVJlbGF0aW9uCW5l d3JlbGF0aW9uOwotCQlSZWxPcHRJbmZvICpjaGlsZHJlbDsKLQotCQkvKiBBbHJlYWR5IGxv Y2tlZCBhYm92ZS4gKi8KLQkJbmV3cmVsYXRpb24gPSBoZWFwX29wZW4oY2hpbGRPSUQsIE5v TG9jayk7Ci0JCUFzc2VydCghUkVMQVRJT05fSVNfT1RIRVJfVEVNUChuZXdyZWxhdGlvbikp OwotCi0JCS8qCi0JCSAqIEEgcGFydGl0aW9uZWQgY2hpbGQgdGFibGUgd2l0aCAwIGNoaWxk cmVuIGlzIGEgZHVtbXkgcmVsLCBzbyBkb24ndAotCQkgKiBib3RoZXIgY3JlYXRpbmcgcGxh bm5lciBvYmplY3RzIGZvciBpdC4KLQkJICovCi0JCWlmIChuZXdyZWxhdGlvbi0+cmRfcmVs LT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUgJiYKLQkJCVJlbGF0aW9u R2V0UGFydGl0aW9uRGVzYyhuZXdyZWxhdGlvbiktPm5wYXJ0cyA9PSAwKQotCQl7Ci0JCQlo ZWFwX2Nsb3NlKG5ld3JlbGF0aW9uLCBOb0xvY2spOwotCQkJY29udGludWU7Ci0JCX0KLQot CQljaGlsZHJlbCA9IGFkZF9pbmhlcml0YW5jZV9jaGlsZF9yZWwocm9vdCwgcGFyZW50cnRl LCBwYXJlbnRSVGluZGV4LAotCQkJCQkJCQkJCQkgcGFyZW50cmVsLCByb290cmMsIG5ld3Jl bGF0aW9uKTsKLQkJQXNzZXJ0KGNoaWxkcmVsICE9IE5VTEwpOwotCQlwYXJlbnRyZWwtPnBh cnRfcmVsc1tpXSA9IGNoaWxkcmVsOwotCi0JCS8qIENsb3NlIGNoaWxkIHJlbGF0aW9ucywg YnV0IGtlZXAgbG9ja3MgKi8KLQkJaGVhcF9jbG9zZShuZXdyZWxhdGlvbiwgTm9Mb2NrKTsK LQl9Ci0KLQkvKgotCSAqIEFkZCBqdW5rIGNvbHVtbnMgbmVlZGVkIGJ5IHRoZSByb3cgbWFy ayBpZiBhbnkgYW5kIGFsc28gYWRkIHRoZQotCSAqIHJlbGV2YW50IGV4cHJlc3Npb25zIHRv IHRoZSByb290IHBhcmVudCdzIHJlbHRhcmdldC4KLQkgKi8KLQlpZiAocm9vdHJjKQotCXsK LQkJTGlzdCAgICp0bGlzdCA9IGFkZF9yb3dtYXJrX2p1bmtfY29sdW1ucyhyb290LCByb290 cmMpOwotCi0JCWJ1aWxkX2Jhc2VfcmVsX3RsaXN0cyhyb290LCB0bGlzdCk7Ci0JfQotfQot Ci0vKgotICogYWRkX2luaGVyaXRhbmNlX2NoaWxkX3JlbAotICoJCUJ1aWxkIGEgUmFuZ2VU YmxFbnRyeSwgYW4gQXBwZW5kUmVsSW5mbywgYSBQbGFuUm93TWFyaywgYW5kIGZpbmFsbHkK LSAqCQlhIFJlbE9wdEluZm8gZm9yIGFuIGluaGVyaXRhbmNlIGNoaWxkIHJlbGF0aW9uLgot ICoKLSAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIFJlbE9wdEluZm8gdGhhdCdzIGFkZGVk LgotICoKLSAqIFBsYW5Sb3dNYXJrcyBzdGlsbCBjYXJyeSB0aGUgdG9wLXBhcmVudCdzIFJU SSwgYW5kIHRoZSB0b3AtcGFyZW50J3MKLSAqIGFsbE1hcmtUeXBlcyBmaWVsZCBzdGlsbCBh Y2N1bXVsYXRlcyB2YWx1ZXMgZnJvbSBhbGwgZGVzY2VuZGVudHMuCi0gKgotICogInBhcmVu dHJ0ZSIgYW5kICJwYXJlbnRSVGluZGV4IiBhcmUgaW1tZWRpYXRlIHBhcmVudCdzIFJURSBh bmQKLSAqIFJUSS4gInRvcF9wYXJlbnRyYyIgaXMgdG9wIHBhcmVudCdzIFBsYW5Sb3dNYXJr LgotICovCi1zdGF0aWMgUmVsT3B0SW5mbyAqCi1hZGRfaW5oZXJpdGFuY2VfY2hpbGRfcmVs KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCi0JCQkJCQkg IEluZGV4IHBhcmVudFJUaW5kZXgsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKLQkJCQkJCSAg UGxhblJvd01hcmsgKnRvcF9wYXJlbnRyYywgUmVsYXRpb24gY2hpbGRyZWwpCi17Ci0JUXVl cnkJICAgKnBhcnNlID0gcm9vdC0+cGFyc2U7Ci0JT2lkCQkJY2hpbGRPSUQgPSBSZWxhdGlv bkdldFJlbGlkKGNoaWxkcmVsKTsKLQlSYW5nZVRibEVudHJ5ICpjaGlsZHJ0ZTsKLQlJbmRl eAkJY2hpbGRSVGluZGV4OwotCUFwcGVuZFJlbEluZm8gKmFwcGluZm87Ci0JUmVsT3B0SW5m byAqY2hpbGRyZWxvcHQ7Ci0KLQkvKgotCSAqIEJ1aWxkIGFuIFJURSBmb3IgdGhlIGNoaWxk LCBhbmQgYXR0YWNoIHRvIHF1ZXJ5J3MgcmFuZ2V0YWJsZSBsaXN0LiBXZQotCSAqIGNvcHkg bW9zdCBmaWVsZHMgb2YgdGhlIHBhcmVudCdzIFJURSwgYnV0IHJlcGxhY2UgcmVsYXRpb24g T0lEIGFuZAotCSAqIHJlbGtpbmQsIGFuZCBzZXQgaW5oIGFwcHJvcHJpYXRlbHkuICBBbHNv LCBzZXQgcmVxdWlyZWRQZXJtcyB0byB6ZXJvCi0JICogc2luY2UgYWxsIHJlcXVpcmVkIHBl cm1pc3Npb25zIGNoZWNrcyBhcmUgZG9uZSBvbiB0aGUgb3JpZ2luYWwgUlRFLgotCSAqIExp a2V3aXNlLCBzZXQgdGhlIGNoaWxkJ3Mgc2VjdXJpdHlRdWFscyB0byBlbXB0eSwgYmVjYXVz ZSB3ZSBvbmx5IHdhbnQKLQkgKiB0byBhcHBseSB0aGUgcGFyZW50J3MgUkxTIGNvbmRpdGlv bnMgcmVnYXJkbGVzcyBvZiB3aGF0IFJMUyBwcm9wZXJ0aWVzCi0JICogaW5kaXZpZHVhbCBj aGlsZHJlbiBtYXkgaGF2ZS4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGNob2ljZSB0byBt YWtlCi0JICogaW5oZXJpdGVkIFJMUyB3b3JrIGxpa2UgcmVndWxhciBwZXJtaXNzaW9ucyBj aGVja3MuKSBUaGUgcGFyZW50Ci0JICogc2VjdXJpdHlRdWFscyB3aWxsIGJlIHByb3BhZ2F0 ZWQgdG8gY2hpbGRyZW4gYWxvbmcgd2l0aCBvdGhlciBiYXNlCi0JICogcmVzdHJpY3Rpb24g Y2xhdXNlcywgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBpdCBoZXJlLgotCSAqLwotCWNoaWxk cnRlID0gY29weU9iamVjdChwYXJlbnRydGUpOwotCWNoaWxkcnRlLT5yZWxpZCA9IGNoaWxk T0lEOwotCWNoaWxkcnRlLT5yZWxraW5kID0gY2hpbGRyZWwtPnJkX3JlbC0+cmVsa2luZDsK LQkvKgotCSAqIEEgcGFydGl0aW9uZWQgY2hpbGQgd2lsbCBuZWVkIHRvIGJlIGV4cGFuZGVk IGFzIGFuIGFwcGVuZCBwYXJlbnQKLQkgKiBpdHNlbGYsIHNvIHNldCBpdHMgaW5oIHRvIHRy dWUuCi0JICovCi0JY2hpbGRydGUtPmluaCA9IChjaGlsZHJ0ZS0+cmVsa2luZCA9PSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKTsKLQljaGlsZHJ0ZS0+cmVxdWlyZWRQZXJtcyA9IDA7 Ci0JY2hpbGRydGUtPnNlY3VyaXR5UXVhbHMgPSBOSUw7Ci0JcGFyc2UtPnJ0YWJsZSA9IGxh cHBlbmQocGFyc2UtPnJ0YWJsZSwgY2hpbGRydGUpOwotCWNoaWxkUlRpbmRleCA9IGxpc3Rf bGVuZ3RoKHBhcnNlLT5ydGFibGUpOwotCi0JLyogQ3JlYXRlIGFuIEFwcGVuZFJlbEluZm8g YW5kIGFkZCBpdCB0byBwbGFubmVyJ3MgZ2xvYmFsIGxpc3QuICovCi0JYXBwaW5mbyA9IG1h a2VfYXBwZW5kX3JlbF9pbmZvKHBhcmVudHJlbCwgcGFyZW50cnRlLAotCQkJCQkJCQkgICBj aGlsZHJlbC0+cmRfYXR0LAotCQkJCQkJCQkgICBjaGlsZE9JRCwKLQkJCQkJCQkJICAgY2hp bGRyZWwtPnJkX3JlbC0+cmVsdHlwZSwKLQkJCQkJCQkJICAgY2hpbGRSVGluZGV4KTsKLQly b290LT5hcHBlbmRfcmVsX2xpc3QgPSBsYXBwZW5kKHJvb3QtPmFwcGVuZF9yZWxfbGlzdCwg YXBwaW5mbyk7Ci0KLQkvKgotCSAqIFRyYW5zbGF0ZSB0aGUgY29sdW1uIHBlcm1pc3Npb25z IGJpdG1hcHMgdG8gdGhlIGNoaWxkJ3MgYXR0bnVtcyAod2UKLQkgKiBoYXZlIHRvIGJ1aWxk IHRoZSB0cmFuc2xhdGVkX3ZhcnMgbGlzdCBiZWZvcmUgd2UgY2FuIGRvIHRoaXMpLiBCdXQK LQkgKiBpZiB0aGlzIGlzIHRoZSBwYXJlbnQgdGFibGUsIGxlYXZlIGNvcHlPYmplY3QncyBy ZXN1bHQgYWxvbmUuCi0JICoKLQkgKiBOb3RlOiB3ZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiB0 aG91Z2ggdGhlIGV4ZWN1dG9yIHdvbid0IHJ1biBhbnkKLQkgKiBwZXJtaXNzaW9ucyBjaGVj a3Mgb24gdGhlIGNoaWxkIFJURS4gIFRoZSBpbnNlcnRlZENvbHMvdXBkYXRlZENvbHMKLQkg KiBiaXRtYXBzIG1heSBiZSBleGFtaW5lZCBmb3IgdHJpZ2dlci1maXJpbmcgcHVycG9zZXMu Ci0JICovCi0JaWYgKGNoaWxkcnRlLT5yZWxpZCAhPSBwYXJlbnRydGUtPnJlbGlkKQotCXsK LQkJY2hpbGRydGUtPnNlbGVjdGVkQ29scyA9IHRyYW5zbGF0ZV9jb2xfcHJpdnMocGFyZW50 cnRlLT5zZWxlY3RlZENvbHMsCi0JCQkJCQkJCQkJCQkJIGFwcGluZm8tPnRyYW5zbGF0ZWRf dmFycyk7Ci0JCWNoaWxkcnRlLT5pbnNlcnRlZENvbHMgPSB0cmFuc2xhdGVfY29sX3ByaXZz KHBhcmVudHJ0ZS0+aW5zZXJ0ZWRDb2xzLAotCQkJCQkJCQkJCQkJCSBhcHBpbmZvLT50cmFu c2xhdGVkX3ZhcnMpOwotCQljaGlsZHJ0ZS0+dXBkYXRlZENvbHMgPSB0cmFuc2xhdGVfY29s X3ByaXZzKHBhcmVudHJ0ZS0+dXBkYXRlZENvbHMsCi0JCQkJCQkJCQkJCQkJYXBwaW5mby0+ dHJhbnNsYXRlZF92YXJzKTsKLQl9Ci0KLQkvKgotCSAqIEJ1aWxkIGEgUGxhblJvd01hcmsg aWYgcGFyZW50IGlzIG1hcmtlZCBGT1IgVVBEQVRFL1NIQVJFLgotCSAqLwotCWlmICh0b3Bf cGFyZW50cmMpCi0JewotCQlQbGFuUm93TWFyayAqY2hpbGRyYyA9IG1ha2VOb2RlKFBsYW5S b3dNYXJrKTsKLQotCQljaGlsZHJjLT5ydGkgPSBjaGlsZFJUaW5kZXg7Ci0JCWNoaWxkcmMt PnBydGkgPSB0b3BfcGFyZW50cmMtPnJ0aTsKLQkJY2hpbGRyYy0+cm93bWFya0lkID0gdG9w X3BhcmVudHJjLT5yb3dtYXJrSWQ7Ci0JCS8qIFJlc2VsZWN0IHJvd21hcmsgdHlwZSwgYmVj YXVzZSByZWxraW5kIG1pZ2h0IG5vdCBtYXRjaCBwYXJlbnQgKi8KLQkJY2hpbGRyYy0+bWFy a1R5cGUgPSBzZWxlY3Rfcm93bWFya190eXBlKGNoaWxkcnRlLAotCQkJCQkJCQkJCQkJdG9w X3BhcmVudHJjLT5zdHJlbmd0aCk7Ci0JCWNoaWxkcmMtPmFsbE1hcmtUeXBlcyA9ICgxIDw8 IGNoaWxkcmMtPm1hcmtUeXBlKTsKLQkJY2hpbGRyYy0+c3RyZW5ndGggPSB0b3BfcGFyZW50 cmMtPnN0cmVuZ3RoOwotCQljaGlsZHJjLT53YWl0UG9saWN5ID0gdG9wX3BhcmVudHJjLT53 YWl0UG9saWN5OwotCi0JCS8qCi0JCSAqIFdlIG1hcmsgUm93TWFya3MgZm9yIHBhcnRpdGlv bmVkIGNoaWxkIHRhYmxlcyBhcyBwYXJlbnQgUm93TWFya3Mgc28KLQkJICogdGhhdCB0aGUg ZXhlY3V0b3IgaWdub3JlcyB0aGVtIChleGNlcHQgdGhlaXIgZXhpc3RlbmNlIG1lYW5zIHRo YXQKLQkJICogdGhlIGNoaWxkIHRhYmxlcyBiZSBsb2NrZWQgdXNpbmcgYXBwcm9wcmlhdGUg bW9kZSkuCi0JCSAqLwotCQljaGlsZHJjLT5pc1BhcmVudCA9IChjaGlsZHJ0ZS0+cmVsa2lu ZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKTsKLQotCQkvKiBJbmNsdWRlIGNoaWxk J3Mgcm93bWFyayB0eXBlIGluIHRvcCBwYXJlbnQncyBhbGxNYXJrVHlwZXMgKi8KLQkJdG9w X3BhcmVudHJjLT5hbGxNYXJrVHlwZXMgfD0gY2hpbGRyYy0+YWxsTWFya1R5cGVzOwotCi0J CXJvb3QtPnJvd01hcmtzID0gbGFwcGVuZChyb290LT5yb3dNYXJrcywgY2hpbGRyYyk7Ci0J fQotCi0JLyoKLQkgKiBBZGQgdGhlIFJlbE9wdEluZm8uICBFdmVuIHRob3VnaCB3ZSBtYXkg bm90IHJlYWxseSBzY2FuIHRoaXMgcmVsYXRpb24KLQkgKiBmb3IgcmVhc29ucyBzdWNoIGFz IGNvbnRyYWRpY3RvcnkgcXVhbHMsIHdlIHN0aWxsIG5lZWQgbmVlZCB0byBjcmVhdGUKLQkg KiBvbmUsIGJlY2F1c2UgZm9yIGV2ZXJ5IFJURSBpbiB0aGUgcXVlcnkncyByYW5nZSB0YWJs ZSwgdGhlcmUgbXVzdCBiZSBhbgotCSAqIGFjY29tcGFueWluZyBSZWxPcHRJbmZvLgotCSAq LwotCi0JLyogRmlyc3QsIHN0b3JlIHRoZSBSVEUgYW5kIGFwcGluZm9zIGludG8gcGxhbm5l ciBhcnJheXMuICovCi0JQXNzZXJ0KHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbY2hpbGRSVGlu ZGV4XSA9PSBOVUxMKTsKLQlyb290LT5zaW1wbGVfcnRlX2FycmF5W2NoaWxkUlRpbmRleF0g PSBjaGlsZHJ0ZTsKLQlBc3NlcnQocm9vdC0+YXBwZW5kX3JlbF9hcnJheVtjaGlsZFJUaW5k ZXhdID09IE5VTEwpOwotCXJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbY2hpbGRSVGluZGV4XSA9 IGFwcGluZm87Ci0KLQljaGlsZHJlbG9wdCA9IGJ1aWxkX2FwcGVuZF9jaGlsZF9yZWwocm9v dCwgcGFyZW50cmVsLCBjaGlsZFJUaW5kZXgpOwotCUFzc2VydChjaGlsZHJlbG9wdCAhPSBO VUxMKTsKLQotCXJldHVybiBjaGlsZHJlbG9wdDsKLX0KLQotLyoKLSAqIG1ha2VfaW5oX3Ry YW5zbGF0aW9uX2xpc3QKLSAqCSAgQnVpbGQgdGhlIGxpc3Qgb2YgdHJhbnNsYXRpb25zIGZy b20gcGFyZW50IFZhcnMgdG8gY2hpbGQgVmFycyBmb3IKLSAqCSAgYW4gaW5oZXJpdGFuY2Ug Y2hpbGQuCi0gKgotICogRm9yIHBhcmFub2lhJ3Mgc2FrZSwgd2UgbWF0Y2ggdHlwZS9jb2xs YXRpb24gYXMgd2VsbCBhcyBhdHRyaWJ1dGUgbmFtZS4KLSAqLwotc3RhdGljIHZvaWQKLW1h a2VfaW5oX3RyYW5zbGF0aW9uX2xpc3QoVHVwbGVEZXNjIG9sZF90dXBkZXNjLCBUdXBsZURl c2MgbmV3X3R1cGRlc2MsCi0JCQkJCQkgIE9pZCBmcm9tX3JlbCwgT2lkIHRvX3JlbCwKLQkJ CQkJCSAgSW5kZXggbmV3dmFybm8sIExpc3QgKip0cmFuc2xhdGVkX3ZhcnMpCi17Ci0JTGlz dAkgICAqdmFycyA9IE5JTDsKLQlpbnQJCQlvbGRuYXR0cyA9IG9sZF90dXBkZXNjLT5uYXR0 czsKLQlpbnQJCQluZXduYXR0cyA9IG5ld190dXBkZXNjLT5uYXR0czsKLQlpbnQJCQlvbGRf YXR0bm87Ci0JaW50CQkJbmV3X2F0dG5vID0gMDsKLQotCWZvciAob2xkX2F0dG5vID0gMDsg b2xkX2F0dG5vIDwgb2xkbmF0dHM7IG9sZF9hdHRubysrKQotCXsKLQkJRm9ybV9wZ19hdHRy aWJ1dGUgYXR0OwotCQljaGFyCSAgICphdHRuYW1lOwotCQlPaWQJCQlhdHR0eXBpZDsKLQkJ aW50MzIJCWF0dHR5cG1vZDsKLQkJT2lkCQkJYXR0Y29sbGF0aW9uOwotCi0JCWF0dCA9IFR1 cGxlRGVzY0F0dHIob2xkX3R1cGRlc2MsIG9sZF9hdHRubyk7Ci0JCWlmIChhdHQtPmF0dGlz ZHJvcHBlZCkKLQkJewotCQkJLyogSnVzdCBwdXQgTlVMTCBpbnRvIHRoaXMgbGlzdCBlbnRy eSAqLwotCQkJdmFycyA9IGxhcHBlbmQodmFycywgTlVMTCk7Ci0JCQljb250aW51ZTsKLQkJ fQotCQlhdHRuYW1lID0gTmFtZVN0cihhdHQtPmF0dG5hbWUpOwotCQlhdHR0eXBpZCA9IGF0 dC0+YXR0dHlwaWQ7Ci0JCWF0dHR5cG1vZCA9IGF0dC0+YXR0dHlwbW9kOwotCQlhdHRjb2xs YXRpb24gPSBhdHQtPmF0dGNvbGxhdGlvbjsKLQotCQkvKgotCQkgKiBXaGVuIHdlIGFyZSBn ZW5lcmF0aW5nIHRoZSAidHJhbnNsYXRpb24gbGlzdCIgZm9yIHRoZSBwYXJlbnQgdGFibGUK LQkJICogb2YgYW4gaW5oZXJpdGFuY2Ugc2V0LCBubyBuZWVkIHRvIHNlYXJjaCBmb3IgbWF0 Y2hlcy4KLQkJICovCi0JCWlmIChmcm9tX3JlbCA9PSB0b19yZWwpCi0JCXsKLQkJCXZhcnMg PSBsYXBwZW5kKHZhcnMsIG1ha2VWYXIobmV3dmFybm8sCi0JCQkJCQkJCQkJIChBdHRyTnVt YmVyKSAob2xkX2F0dG5vICsgMSksCi0JCQkJCQkJCQkJIGF0dHR5cGlkLAotCQkJCQkJCQkJ CSBhdHR0eXBtb2QsCi0JCQkJCQkJCQkJIGF0dGNvbGxhdGlvbiwKLQkJCQkJCQkJCQkgMCkp OwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBPdGhlcndpc2Ugd2UgaGF2ZSB0 byBzZWFyY2ggZm9yIHRoZSBtYXRjaGluZyBjb2x1bW4gYnkgbmFtZS4KLQkJICogVGhlcmUn cyBubyBndWFyYW50ZWUgaXQnbGwgaGF2ZSB0aGUgc2FtZSBjb2x1bW4gcG9zaXRpb24sIGJl Y2F1c2UKLQkJICogb2YgY2FzZXMgbGlrZSBBTFRFUiBUQUJMRSBBREQgQ09MVU1OIGFuZCBt dWx0aXBsZSBpbmhlcml0YW5jZS4KLQkJICogSG93ZXZlciwgaW4gc2ltcGxlIGNhc2VzLCB0 aGUgcmVsYXRpdmUgb3JkZXIgb2YgY29sdW1ucyBpcyBtb3N0bHkKLQkJICogdGhlIHNhbWUg aW4gYm90aCByZWxhdGlvbnMsIHNvIHRyeSB0aGUgY29sdW1uIG9mIG5ld3JlbGF0aW9uIHRo YXQKLQkJICogZm9sbG93cyBpbW1lZGlhdGVseSBhZnRlciB0aGUgb25lIHRoYXQgd2UganVz dCBmb3VuZCwgYW5kIGlmIHRoYXQKLQkJICogZmFpbHMsIGxldCBzeXNjYWNoZSBoYW5kbGUg aXQuCi0JCSAqLwotCQlpZiAobmV3X2F0dG5vID49IG5ld25hdHRzIHx8Ci0JCQkoYXR0ID0g VHVwbGVEZXNjQXR0cihuZXdfdHVwZGVzYywgbmV3X2F0dG5vKSktPmF0dGlzZHJvcHBlZCB8 fAotCQkJc3RyY21wKGF0dG5hbWUsIE5hbWVTdHIoYXR0LT5hdHRuYW1lKSkgIT0gMCkKLQkJ ewotCQkJSGVhcFR1cGxlCW5ld3R1cDsKLQotCQkJbmV3dHVwID0gU2VhcmNoU3lzQ2FjaGVB dHROYW1lKHRvX3JlbCwgYXR0bmFtZSk7Ci0JCQlpZiAoIW5ld3R1cCkKLQkJCQllbG9nKEVS Uk9SLCAiY291bGQgbm90IGZpbmQgaW5oZXJpdGVkIGF0dHJpYnV0ZSBcIiVzXCIgb2YgcmVs YXRpb24gXCIlc1wiIiwKLQkJCQkJIGF0dG5hbWUsIGdldF9yZWxfbmFtZSh0b19yZWwpKTsK LQkJCW5ld19hdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVChuZXd0dXAp KS0+YXR0bnVtIC0gMTsKLQkJCVJlbGVhc2VTeXNDYWNoZShuZXd0dXApOwotCi0JCQlhdHQg PSBUdXBsZURlc2NBdHRyKG5ld190dXBkZXNjLCBuZXdfYXR0bm8pOwotCQl9Ci0KLQkJLyog Rm91bmQgaXQsIGNoZWNrIHR5cGUgYW5kIGNvbGxhdGlvbiBtYXRjaCAqLwotCQlpZiAoYXR0 dHlwaWQgIT0gYXR0LT5hdHR0eXBpZCB8fCBhdHR0eXBtb2QgIT0gYXR0LT5hdHR0eXBtb2Qp Ci0JCQllbG9nKEVSUk9SLCAiYXR0cmlidXRlIFwiJXNcIiBvZiByZWxhdGlvbiBcIiVzXCIg ZG9lcyBub3QgbWF0Y2ggcGFyZW50J3MgdHlwZSIsCi0JCQkJIGF0dG5hbWUsIGdldF9yZWxf bmFtZSh0b19yZWwpKTsKLQkJaWYgKGF0dGNvbGxhdGlvbiAhPSBhdHQtPmF0dGNvbGxhdGlv bikKLQkJCWVsb2coRVJST1IsICJhdHRyaWJ1dGUgXCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNc IiBkb2VzIG5vdCBtYXRjaCBwYXJlbnQncyBjb2xsYXRpb24iLAotCQkJCSBhdHRuYW1lLCBn ZXRfcmVsX25hbWUodG9fcmVsKSk7Ci0KLQkJdmFycyA9IGxhcHBlbmQodmFycywgbWFrZVZh cihuZXd2YXJubywKLQkJCQkJCQkJCSAoQXR0ck51bWJlcikgKG5ld19hdHRubyArIDEpLAot CQkJCQkJCQkJIGF0dHR5cGlkLAotCQkJCQkJCQkJIGF0dHR5cG1vZCwKLQkJCQkJCQkJCSBh dHRjb2xsYXRpb24sCi0JCQkJCQkJCQkgMCkpOwotCQluZXdfYXR0bm8rKzsKLQl9Ci0KLQkq dHJhbnNsYXRlZF92YXJzID0gdmFyczsKLX0KLQotLyoKLSAqIHRyYW5zbGF0ZV9jb2xfcHJp dnMKLSAqCSAgVHJhbnNsYXRlIGEgYml0bWFwc2V0IHJlcHJlc2VudGluZyBwZXItY29sdW1u IHByaXZpbGVnZXMgZnJvbSB0aGUKLSAqCSAgcGFyZW50IHJlbCdzIGF0dHJpYnV0ZSBudW1i ZXJpbmcgdG8gdGhlIGNoaWxkJ3MuCi0gKgotICogVGhlIG9ubHkgc3VycHJpc2UgaGVyZSBp cyB0aGF0IHdlIGRvbid0IHRyYW5zbGF0ZSBhIHBhcmVudCB3aG9sZS1yb3cKLSAqIHJlZmVy ZW5jZSBpbnRvIGEgY2hpbGQgd2hvbGUtcm93IHJlZmVyZW5jZS4gIFRoYXQgd291bGQgbWVh biByZXF1aXJpbmcKLSAqIHBlcm1pc3Npb25zIG9uIGFsbCBjaGlsZCBjb2x1bW5zLCB3aGlj aCBpcyBvdmVybHkgc3RyaWN0LCBzaW5jZSB0aGUKLSAqIHF1ZXJ5IGlzIHJlYWxseSBvbmx5 IGdvaW5nIHRvIHJlZmVyZW5jZSB0aGUgaW5oZXJpdGVkIGNvbHVtbnMuICBJbnN0ZWFkCi0g KiB3ZSBzZXQgdGhlIHBlci1jb2x1bW4gYml0cyBmb3IgYWxsIGluaGVyaXRlZCBjb2x1bW5z LgotICovCi1zdGF0aWMgQml0bWFwc2V0ICoKLXRyYW5zbGF0ZV9jb2xfcHJpdnMoY29uc3Qg Qml0bWFwc2V0ICpwYXJlbnRfcHJpdnMsCi0JCQkJCUxpc3QgKnRyYW5zbGF0ZWRfdmFycykK LXsKLQlCaXRtYXBzZXQgICpjaGlsZF9wcml2cyA9IE5VTEw7Ci0JYm9vbAkJd2hvbGVfcm93 OwotCWludAkJCWF0dG5vOwotCUxpc3RDZWxsICAgKmxjOwotCi0JLyogU3lzdGVtIGF0dHJp YnV0ZXMgaGF2ZSB0aGUgc2FtZSBudW1iZXJzIGluIGFsbCB0YWJsZXMgKi8KLQlmb3IgKGF0 dG5vID0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciArIDE7IGF0dG5vIDwg MDsgYXR0bm8rKykKLQl7Ci0JCWlmIChibXNfaXNfbWVtYmVyKGF0dG5vIC0gRmlyc3RMb3dJ bnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciwKLQkJCQkJCSAgcGFyZW50X3ByaXZzKSkKLQkJ CWNoaWxkX3ByaXZzID0gYm1zX2FkZF9tZW1iZXIoY2hpbGRfcHJpdnMsCi0JCQkJCQkJCQkJ IGF0dG5vIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7Ci0JfQotCi0J LyogQ2hlY2sgaWYgcGFyZW50IGhhcyB3aG9sZS1yb3cgcmVmZXJlbmNlICovCi0Jd2hvbGVf cm93ID0gYm1zX2lzX21lbWJlcihJbnZhbGlkQXR0ck51bWJlciAtIEZpcnN0TG93SW52YWxp ZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCi0JCQkJCQkJICBwYXJlbnRfcHJpdnMpOwotCi0JLyog QW5kIG5vdyB0cmFuc2xhdGUgdGhlIHJlZ3VsYXIgdXNlciBhdHRyaWJ1dGVzLCB1c2luZyB0 aGUgdmFycyBsaXN0ICovCi0JYXR0bm8gPSBJbnZhbGlkQXR0ck51bWJlcjsKLQlmb3JlYWNo KGxjLCB0cmFuc2xhdGVkX3ZhcnMpCi0JewotCQlWYXIJCSAgICp2YXIgPSBsZmlyc3Rfbm9k ZShWYXIsIGxjKTsKLQotCQlhdHRubysrOwotCQlpZiAodmFyID09IE5VTEwpCQkvKiBpZ25v cmUgZHJvcHBlZCBjb2x1bW5zICovCi0JCQljb250aW51ZTsKLQkJaWYgKHdob2xlX3JvdyB8 fAotCQkJYm1zX2lzX21lbWJlcihhdHRubyAtIEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1 dGVOdW1iZXIsCi0JCQkJCQkgIHBhcmVudF9wcml2cykpCi0JCQljaGlsZF9wcml2cyA9IGJt c19hZGRfbWVtYmVyKGNoaWxkX3ByaXZzLAotCQkJCQkJCQkJCSB2YXItPnZhcmF0dG5vIC0g Rmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7Ci0JfQotCi0JcmV0dXJuIGNo aWxkX3ByaXZzOwotfQotCi0vKgotICoJYnVpbGRfYXBwZW5kX2NoaWxkX3JlbAotICoJCUJ1 aWxkIGEgUmVsT3B0SW5mbyBmb3IgY2hpbGQgcmVsYXRpb24gb2YgYW4gYXBwZW5kIHJlbAot ICoKLSAqIEFmdGVyIGNyZWF0aW5nIHRoZSBSZWxPcHRJbmZvIGZvciB0aGUgZ2l2ZW4gY2hp bGQgUlQgaW5kZXgsIGl0IGdvZXMgb24gdG8KLSAqIGluaXRpYWxpemUgc29tZSBvZiBpdHMg ZmllbGRzIGJhc2Ugb24gdGhlIHBhcmVudCBSZWxPcHRJbmZvLgotICoKLSAqIElmIHRoZSBx dWFscyBpbiBiYXNlcmVzdHJpY3RpbmZvIHR1cm5zIG91dCB0byBiZSBzZWxmLWNvbnRyYWRp Y3RvcnksIHRoZQotICogUmVsT3B0SW5mbyBpcyBtYXJrZWQgZHVtbXkgYmVmb3JlIHJldHVy bmluZy4KLSAqLwotc3RhdGljIFJlbE9wdEluZm8gKgotYnVpbGRfYXBwZW5kX2NoaWxkX3Jl bChQbGFubmVySW5mbyAqcm9vdCwKLQkJCQkJICAgUmVsT3B0SW5mbyAqcGFyZW50LAotCQkJ CQkgICBJbmRleCBjaGlsZFJUaW5kZXgpCi17Ci0JUmVsT3B0SW5mbyAqY2hpbGRyZWw7Ci0J UmFuZ2VUYmxFbnRyeSAqY2hpbGRSVEUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W2NoaWxk UlRpbmRleF07Ci0JQXBwZW5kUmVsSW5mbyAqYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxf YXJyYXlbY2hpbGRSVGluZGV4XTsKLQlMaXN0CSAgICpjaGlsZHF1YWxzOwotCUxpc3RDZWxs ICAgKmxjOwotCWJvb2wJCWhhdmVfY29uc3RfZmFsc2VfY3E7Ci0JSW5kZXgJCWNxX21pbl9z ZWN1cml0eTsKLQotCS8qIEJ1aWxkIHRoZSBSZWxPcHRJbmZvLiAqLwotCWNoaWxkcmVsID0g YnVpbGRfc2ltcGxlX3JlbChyb290LCBjaGlsZFJUaW5kZXgsIHBhcmVudCk7Ci0KLQkvKgot CSAqIFByb3BhZ2F0ZSBsYXRlcmFsX3JlbGlkcyBhbmQgbGF0ZXJhbF9yZWZlcmVuY2VycyBm cm9tIGFwcGVuZHJlbAotCSAqIHBhcmVudCByZWxzIHRvIHRoZWlyIGNoaWxkIHJlbHMuICBX ZSBpbnRlbnRpb25hbGx5IGdpdmUgZWFjaCBjaGlsZCByZWwKLQkgKiB0aGUgc2FtZSBtaW5p bXVtIHBhcmFtZXRlcml6YXRpb24sIGV2ZW4gdGhvdWdoIGl0J3MgcXVpdGUgcG9zc2libGUg dGhhdAotCSAqIHNvbWUgZG9uJ3QgcmVmZXJlbmNlIGFsbCB0aGUgbGF0ZXJhbCByZWxzLiAg VGhpcyBpcyBiZWNhdXNlIGFueSBhcHBlbmQKLQkgKiBwYXRoIGZvciB0aGUgcGFyZW50IHdp bGwgaGF2ZSB0byBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlcml6YXRpb24gZm9yCi0JICogZXZl cnkgY2hpbGQgYW55d2F5LCBhbmQgdGhlcmUncyBubyB2YWx1ZSBpbiBmb3JjaW5nIGV4dHJh Ci0JICogcmVwYXJhbWV0ZXJpemVfcGF0aCgpIGNhbGxzLiAgU2ltaWxhcmx5LCBhIGxhdGVy YWwgcmVmZXJlbmNlIHRvIHRoZQotCSAqIHBhcmVudCBwcmV2ZW50cyB1c2Ugb2Ygb3RoZXJ3 aXNlLW1vdmFibGUgam9pbiByZWxzIGZvciBlYWNoIGNoaWxkLgotCSAqLwotCWNoaWxkcmVs LT5kaXJlY3RfbGF0ZXJhbF9yZWxpZHMgPSBwYXJlbnQtPmRpcmVjdF9sYXRlcmFsX3JlbGlk czsKLQljaGlsZHJlbC0+bGF0ZXJhbF9yZWxpZHMgPSBwYXJlbnQtPmxhdGVyYWxfcmVsaWRz OwotCWNoaWxkcmVsLT5sYXRlcmFsX3JlZmVyZW5jZXJzID0gcGFyZW50LT5sYXRlcmFsX3Jl ZmVyZW5jZXJzOwotCi0JLyoKLQkgKiBXZSBoYXZlIHRvIGNvcHkgdGhlIHBhcmVudCdzIHF1 YWxzIHRvIHRoZSBjaGlsZCwgd2l0aCBhcHByb3ByaWF0ZQotCSAqIHN1YnN0aXR1dGlvbiBv ZiB2YXJpYWJsZXMuICBIb3dldmVyLCBvbmx5IHRoZSBiYXNlcmVzdHJpY3RpbmZvCi0JICog cXVhbHMgYXJlIG5lZWRlZCBiZWZvcmUgd2UgY2FuIGNoZWNrIGZvciBjb25zdHJhaW50IGV4 Y2x1c2lvbjsgc28KLQkgKiBkbyB0aGF0IGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRvIHNlZSBp ZiB3ZSBjYW4gZGlzcmVnYXJkIHRoaXMgY2hpbGQuCi0JICoKLQkgKiBUaGUgY2hpbGQgcmVs J3MgdGFyZ2V0bGlzdCBtaWdodCBjb250YWluIG5vbi1WYXIgZXhwcmVzc2lvbnMsIHdoaWNo Ci0JICogbWVhbnMgdGhhdCBzdWJzdGl0dXRpb24gaW50byB0aGUgcXVhbHMgY291bGQgcHJv ZHVjZSBvcHBvcnR1bml0aWVzCi0JICogZm9yIGNvbnN0LXNpbXBsaWZpY2F0aW9uLCBhbmQg cGVyaGFwcyBldmVuIHBzZXVkb2NvbnN0YW50IHF1YWxzLgotCSAqIFRoZXJlZm9yZSwgdHJh bnNmb3JtIGVhY2ggUmVzdHJpY3RJbmZvIHNlcGFyYXRlbHkgdG8gc2VlIGlmIGl0Ci0JICog cmVkdWNlcyB0byBhIGNvbnN0YW50IG9yIHBzZXVkb2NvbnN0YW50LiAgKFdlIG11c3QgcHJv Y2VzcyB0aGVtCi0JICogc2VwYXJhdGVseSB0byBrZWVwIHRyYWNrIG9mIHRoZSBzZWN1cml0 eSBsZXZlbCBvZiBlYWNoIHF1YWwuKQotCSAqLwotCWNoaWxkcXVhbHMgPSBmYWxzZTsKLQlj cV9taW5fc2VjdXJpdHkgPSBVSU5UX01BWDsKLQloYXZlX2NvbnN0X2ZhbHNlX2NxID0gZmFs c2U7Ci0JZm9yZWFjaChsYywgcGFyZW50LT5iYXNlcmVzdHJpY3RpbmZvKQotCXsKLQkJUmVz dHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKikgbGZpcnN0KGxjKTsKLQkJTm9k ZQkgICAqY2hpbGRxdWFsID0gKE5vZGUgKikgcmluZm8tPmNsYXVzZTsKLQkJTGlzdENlbGwg ICAqbGMyOwotCi0JCUFzc2VydChJc0EocmluZm8sIFJlc3RyaWN0SW5mbykpOwotCQljaGls ZHF1YWwgPSBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzKHJvb3QsIGNoaWxkcXVhbCwKLQkJCQkJ CQkJCQkgICAxLCAmYXBwaW5mbyk7Ci0JCWNoaWxkcXVhbCA9IGV2YWxfY29uc3RfZXhwcmVz c2lvbnMocm9vdCwgY2hpbGRxdWFsKTsKLQkJLyogY2hlY2sgZm9yIGZsYXQtb3V0IGNvbnN0 YW50ICovCi0JCWlmIChjaGlsZHF1YWwgJiYgSXNBKGNoaWxkcXVhbCwgQ29uc3QpKQotCQl7 Ci0JCQlpZiAoKChDb25zdCAqKSBjaGlsZHF1YWwpLT5jb25zdGlzbnVsbCB8fAotCQkJCSFE YXR1bUdldEJvb2woKChDb25zdCAqKSBjaGlsZHF1YWwpLT5jb25zdHZhbHVlKSkKLQkJCXsK LQkJCQkvKiBSZXN0cmljdGlvbiByZWR1Y2VzIHRvIGNvbnN0YW50IEZBTFNFIG9yIE5VTEwg Ki8KLQkJCQloYXZlX2NvbnN0X2ZhbHNlX2NxID0gdHJ1ZTsKLQkJCQlicmVhazsKLQkJCX0K LQkJCS8qIFJlc3RyaWN0aW9uIHJlZHVjZXMgdG8gY29uc3RhbnQgVFJVRSwgc28gZHJvcCBp dCAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJLyogbWlnaHQgaGF2ZSBnb3R0ZW4gYW4gQU5E IGNsYXVzZSwgaWYgc28gZmxhdHRlbiBpdCAqLwotCQlmb3JlYWNoKGxjMiwgbWFrZV9hbmRz X2ltcGxpY2l0KChFeHByICopIGNoaWxkcXVhbCkpCi0JCXsKLQkJCU5vZGUJICAgKm9uZWNx ID0gKE5vZGUgKikgbGZpcnN0KGxjMik7Ci0JCQlib29sCQlwc2V1ZG9jb25zdGFudDsKLQot CQkJLyogY2hlY2sgZm9yIHBzZXVkb2NvbnN0YW50IChubyBWYXJzIG9yIHZvbGF0aWxlIGZ1 bmN0aW9ucykgKi8KLQkJCXBzZXVkb2NvbnN0YW50ID0KLQkJCQkJIWNvbnRhaW5fdmFyc19v Zl9sZXZlbChvbmVjcSwgMCkgJiYKLQkJCQkJIWNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25z KG9uZWNxKTsKLQkJCWlmIChwc2V1ZG9jb25zdGFudCkKLQkJCXsKLQkJCQkvKiB0ZWxsIGNy ZWF0ZXBsYW4uYyB0byBjaGVjayBmb3IgZ2F0aW5nIHF1YWxzICovCi0JCQkJcm9vdC0+aGFz UHNldWRvQ29uc3RhbnRRdWFscyA9IHRydWU7Ci0JCQl9Ci0JCQkvKiByZWNvbnN0aXR1dGUg UmVzdHJpY3RJbmZvIHdpdGggYXBwcm9wcmlhdGUgcHJvcGVydGllcyAqLwotCQkJY2hpbGRx dWFscyA9IGxhcHBlbmQoY2hpbGRxdWFscywKLQkJCQkJCQkJIG1ha2VfcmVzdHJpY3RpbmZv KChFeHByICopIG9uZWNxLAotCQkJCQkJCQkJCQkJICAgcmluZm8tPmlzX3B1c2hlZF9kb3du LAotCQkJCQkJCQkJCQkJICAgcmluZm8tPm91dGVyam9pbl9kZWxheWVkLAotCQkJCQkJCQkJ CQkJICAgcHNldWRvY29uc3RhbnQsCi0JCQkJCQkJCQkJCQkgICByaW5mby0+c2VjdXJpdHlf bGV2ZWwsCi0JCQkJCQkJCQkJCQkgICBOVUxMLCBOVUxMLCBOVUxMKSk7Ci0JCQljcV9taW5f c2VjdXJpdHkgPSBNaW4oY3FfbWluX3NlY3VyaXR5LCByaW5mby0+c2VjdXJpdHlfbGV2ZWwp OwotCQl9Ci0JfQotCi0JLyoKLQkgKiBJbiBhZGRpdGlvbiB0byB0aGUgcXVhbHMgaW5oZXJp dGVkIGZyb20gdGhlIHBhcmVudCwgd2UgbWlnaHQKLQkgKiBoYXZlIHNlY3VyaXR5UXVhbHMg YXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFydGljdWxhciBjaGlsZCBub2RlLgotCSAqIChDdXJy ZW50bHkgdGhpcyBjYW4gb25seSBoYXBwZW4gaW4gYXBwZW5kcmVscyBvcmlnaW5hdGluZyBm cm9tCi0JICogVU5JT04gQUxMOyBpbmhlcml0YW5jZSBjaGlsZCB0YWJsZXMgZG9uJ3QgaGF2 ZSB0aGVpciBvd24KLQkgKiBzZWN1cml0eVF1YWxzLikJUHVsbCBhbnkgc3VjaCBzZWN1cml0 eVF1YWxzIHVwIGludG8gdGhlCi0JICogYmFzZXJlc3RyaWN0aW5mbyBmb3IgdGhlIGNoaWxk LiAgVGhpcyBpcyBzaW1pbGFyIHRvCi0JICogcHJvY2Vzc19zZWN1cml0eV9iYXJyaWVyX3F1 YWxzKCkgZm9yIHRoZSBwYXJlbnQgcmVsLCBleGNlcHQKLQkgKiB0aGF0IHdlIGNhbid0IG1h a2UgYW55IGdlbmVyYWwgZGVkdWN0aW9ucyBmcm9tIHN1Y2ggcXVhbHMsCi0JICogc2luY2Ug dGhleSBkb24ndCBob2xkIGZvciB0aGUgd2hvbGUgYXBwZW5kcmVsLgotCSAqLwotCWlmIChj aGlsZFJURS0+c2VjdXJpdHlRdWFscykKLQl7Ci0JCUluZGV4CQlzZWN1cml0eV9sZXZlbCA9 IDA7Ci0KLQkJZm9yZWFjaChsYywgY2hpbGRSVEUtPnNlY3VyaXR5UXVhbHMpCi0JCXsKLQkJ CUxpc3QJICAgKnF1YWxzZXQgPSAoTGlzdCAqKSBsZmlyc3QobGMpOwotCQkJTGlzdENlbGwg ICAqbGMyOwotCi0JCQlmb3JlYWNoKGxjMiwgcXVhbHNldCkKLQkJCXsKLQkJCQlFeHByCSAg ICpxdWFsID0gKEV4cHIgKikgbGZpcnN0KGxjMik7Ci0KLQkJCQkvKgotCQkJCSAqIG5vdCBs aWtlbHkgdGhhdCB3ZSdkIHNlZSBjb25zdGFudHMgaGVyZSwgc28gbm8KLQkJCQkgKiBjaGVj awotCQkJCSAqLwotCQkJCWNoaWxkcXVhbHMgPSBsYXBwZW5kKGNoaWxkcXVhbHMsCi0JCQkJ CQkJCQkgbWFrZV9yZXN0cmljdGluZm8ocXVhbCwKLQkJCQkJCQkJCQkJCQkgICB0cnVlLAot CQkJCQkJCQkJCQkJCSAgIGZhbHNlLAotCQkJCQkJCQkJCQkJCSAgIGZhbHNlLAotCQkJCQkJ CQkJCQkJCSAgIHNlY3VyaXR5X2xldmVsLAotCQkJCQkJCQkJCQkJCSAgIE5VTEwsIE5VTEws Ci0JCQkJCQkJCQkJCQkJICAgTlVMTCkpOwotCQkJCWNxX21pbl9zZWN1cml0eSA9IE1pbihj cV9taW5fc2VjdXJpdHksIHNlY3VyaXR5X2xldmVsKTsKLQkJCX0KLQkJCXNlY3VyaXR5X2xl dmVsKys7Ci0JCX0KLQkJQXNzZXJ0KHNlY3VyaXR5X2xldmVsIDw9IHJvb3QtPnF1YWxfc2Vj dXJpdHlfbGV2ZWwpOwotCX0KLQotCS8qIFNldCBjaGlsZCdzIHZlcnNpb24gb2YgYmFzZXJl c3RyaWN0aW5mby4gKi8KLQljaGlsZHJlbC0+YmFzZXJlc3RyaWN0aW5mbyA9IGNoaWxkcXVh bHM7Ci0JY2hpbGRyZWwtPmJhc2VyZXN0cmljdF9taW5fc2VjdXJpdHkgPSBjcV9taW5fc2Vj dXJpdHk7Ci0KLQlpZiAoaGF2ZV9jb25zdF9mYWxzZV9jcSkKLQl7Ci0JCS8qCi0JCSAqIFNv bWUgcmVzdHJpY3Rpb24gY2xhdXNlIHJlZHVjZWQgdG8gY29uc3RhbnQgRkFMU0Ugb3IgTlVM TCBhZnRlcgotCQkgKiBzdWJzdGl0dXRpb24sIHNvIHRoaXMgY2hpbGQgbmVlZCBub3QgYmUg c2Nhbm5lZC4KLQkJICovCi0JCXNldF9kdW1teV9yZWxfcGF0aGxpc3QoY2hpbGRyZWwpOwot CX0KLQotCXJldHVybiBjaGlsZHJlbDsKLX0KLQotLyoKLSAqIGFkZF9yb3dtYXJrX2p1bmtf Y29sdW1ucwotICogCQlBZGQgbmVjZXNzYXJ5IGp1bmsgY29sdW1ucyBmb3Igcm93bWFya2Vk IGluaGVyaXRhbmNlIHBhcmVudCByZWwuCi0gKgotICogVGhlc2UgdmFsdWVzIGFyZSBuZWVk ZWQgZm9yIGxvY2tpbmcgb2YgcmVscyBzZWxlY3RlZCBGT1IgVVBEQVRFL1NIQVJFLCBhbmQK LSAqIHRvIGRvIEV2YWxQbGFuUXVhbCByZWNoZWNraW5nLiAgU2VlIGNvbW1lbnRzIGZvciBQ bGFuUm93TWFyayBpbgotICogcGxhbm5vZGVzLmguCi0gKi8KLXN0YXRpYyBMaXN0ICoKLWFk ZF9yb3dtYXJrX2p1bmtfY29sdW1ucyhQbGFubmVySW5mbyAqcm9vdCwgUGxhblJvd01hcmsg KnJjKQotewotCUxpc3QgICAqdGxpc3QgPSByb290LT5wcm9jZXNzZWRfdGxpc3Q7Ci0JVmFy CQkgICAqdmFyOwotCWNoYXIJCXJlc25hbWVbMzJdOwotCVRhcmdldEVudHJ5ICp0bGU7Ci0K LQlpZiAocmMtPmFsbE1hcmtUeXBlcyAmIH4oMSA8PCBST1dfTUFSS19DT1BZKSkKLQl7Ci0J CS8qIE5lZWQgdG8gZmV0Y2ggVElEICovCi0JCXZhciA9IG1ha2VWYXIocmMtPnJ0aSwKLQkJ CQkJICBTZWxmSXRlbVBvaW50ZXJBdHRyaWJ1dGVOdW1iZXIsCi0JCQkJCSAgVElET0lELAot CQkJCQkgIC0xLAotCQkJCQkgIEludmFsaWRPaWQsCi0JCQkJCSAgMCk7Ci0JCXNucHJpbnRm KHJlc25hbWUsIHNpemVvZihyZXNuYW1lKSwgImN0aWQldSIsIHJjLT5yb3dtYXJrSWQpOwot CQl0bGUgPSBtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgdmFyLAotCQkJCQkJCSAgbGlzdF9s ZW5ndGgodGxpc3QpICsgMSwKLQkJCQkJCQkgIHBzdHJkdXAocmVzbmFtZSksCi0JCQkJCQkJ ICB0cnVlKTsKLQkJdGxpc3QgPSBsYXBwZW5kKHRsaXN0LCB0bGUpOwotCX0KLQlpZiAocmMt PmFsbE1hcmtUeXBlcyAmICgxIDw8IFJPV19NQVJLX0NPUFkpKQotCXsKLQkJLyogTmVlZCB0 aGUgd2hvbGUgcm93IGFzIGEganVuayB2YXIgKi8KLQkJdmFyID0gbWFrZVdob2xlUm93VmFy KHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbcmMtPnJ0aV0sCi0JCQkJCQkJICByYy0+cnRpLAot CQkJCQkJCSAgMCwKLQkJCQkJCQkgIGZhbHNlKTsKLQkJc25wcmludGYocmVzbmFtZSwgc2l6 ZW9mKHJlc25hbWUpLCAid2hvbGVyb3cldSIsIHJjLT5yb3dtYXJrSWQpOwotCQl0bGUgPSBt YWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgdmFyLAotCQkJCQkJCSAgbGlzdF9sZW5ndGgodGxp c3QpICsgMSwKLQkJCQkJCQkgIHBzdHJkdXAocmVzbmFtZSksCi0JCQkJCQkJICB0cnVlKTsK LQkJdGxpc3QgPSBsYXBwZW5kKHRsaXN0LCB0bGUpOwotCX0KLQotCS8qIEZvciBpbmhlcml0 YW5jZSBjYXNlcywgYWx3YXlzIGZldGNoIHRoZSB0YWJsZW9pZCB0b28uICovCi0JdmFyID0g bWFrZVZhcihyYy0+cnRpLAotCQkJCSAgVGFibGVPaWRBdHRyaWJ1dGVOdW1iZXIsCi0JCQkJ ICBPSURPSUQsCi0JCQkJICAtMSwKLQkJCQkgIEludmFsaWRPaWQsCi0JCQkJICAwKTsKLQlz bnByaW50ZihyZXNuYW1lLCBzaXplb2YocmVzbmFtZSksICJ0YWJsZW9pZCV1IiwgcmMtPnJv d21hcmtJZCk7Ci0JdGxlID0gbWFrZVRhcmdldEVudHJ5KChFeHByICopIHZhciwKLQkJCQkJ CSAgbGlzdF9sZW5ndGgodGxpc3QpICsgMSwKLQkJCQkJCSAgcHN0cmR1cChyZXNuYW1lKSwK LQkJCQkJCSAgdHJ1ZSk7Ci0JdGxpc3QgPSBsYXBwZW5kKHRsaXN0LCB0bGUpOwotCi0JcmV0 dXJuIHRsaXN0OwotfQotCi1BcHBlbmRSZWxJbmZvICoKLW1ha2VfYXBwZW5kX3JlbF9pbmZv KFJlbE9wdEluZm8gKnBhcmVudHJlbCwgUmFuZ2VUYmxFbnRyeSAqcGFyZW50cnRlLAotCQkJ CQkgVHVwbGVEZXNjIGNoaWxkZGVzYywgT2lkIGNoaWxkb2lkLCBPaWQgY2hpbGRyZWx0eXBl LAotCQkJCQkgSW5kZXggY2hpbGRSVGluZGV4KQotewotCUFwcGVuZFJlbEluZm8gICphcHBp bmZvID0gbWFrZU5vZGUoQXBwZW5kUmVsSW5mbyk7Ci0KLQlhcHBpbmZvLT5wYXJlbnRfcmVs aWQgPSBwYXJlbnRyZWwtPnJlbGlkOwotCWFwcGluZm8tPmNoaWxkX3JlbGlkID0gY2hpbGRS VGluZGV4OwotCWFwcGluZm8tPnBhcmVudF9yZWx0eXBlID0gcGFyZW50cmVsLT5yZWx0eXBl OwotCWFwcGluZm8tPmNoaWxkX3JlbHR5cGUgPSBjaGlsZHJlbHR5cGU7Ci0JbWFrZV9pbmhf dHJhbnNsYXRpb25fbGlzdChwYXJlbnRyZWwtPnR1cGRlc2MsIGNoaWxkZGVzYywKLQkJCQkJ CQkgIHBhcmVudHJ0ZS0+cmVsaWQsIGNoaWxkb2lkLAotCQkJCQkJCSAgY2hpbGRSVGluZGV4 LAotCQkJCQkJCSAgJmFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycyk7Ci0JYXBwaW5mby0+cGFy ZW50X3JlbG9pZCA9IHBhcmVudHJ0ZS0+cmVsaWQ7Ci0KLQlyZXR1cm4gYXBwaW5mbzsKLX0K LQotLyoKLSAqIGFkanVzdF9hcHBlbmRyZWxfYXR0cnMKLSAqCSAgQ29weSB0aGUgc3BlY2lm aWVkIHF1ZXJ5IG9yIGV4cHJlc3Npb24gYW5kIHRyYW5zbGF0ZSBWYXJzIHJlZmVycmluZyB0 byBhCi0gKgkgIHBhcmVudCByZWwgdG8gcmVmZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY2hp bGQgcmVsIGluc3RlYWQuICBXZSBhbHNvCi0gKgkgIHVwZGF0ZSBydGluZGV4ZXMgYXBwZWFy aW5nIG91dHNpZGUgVmFycywgc3VjaCBhcyByZXN1bHRSZWxhdGlvbiBhbmQKLSAqCSAgam9p bnRyZWUgcmVsaWRzLgotICoKLSAqIE5vdGU6IHRoaXMgaXMgb25seSBhcHBsaWVkIGFmdGVy IGNvbnZlcnNpb24gb2Ygc3VibGlua3MgdG8gc3VicGxhbnMsCi0gKiBzbyB3ZSBkb24ndCBu ZWVkIHRvIGNvcGUgd2l0aCByZWN1cnNpb24gaW50byBzdWItcXVlcmllcy4KLSAqCi0gKiBO b3RlOiB0aGlzIGlzIG5vdCBodWdlbHkgZGlmZmVyZW50IGZyb20gd2hhdCBwdWxsdXBfcmVw bGFjZV92YXJzKCkgZG9lczsKLSAqIG1heWJlIHdlIHNob3VsZCB0cnkgdG8gZm9sZCB0aGUg dHdvIHJvdXRpbmVzIHRvZ2V0aGVyLgotICovCi1Ob2RlICoKLWFkanVzdF9hcHBlbmRyZWxf YXR0cnMoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKm5vZGUsIGludCBuYXBwaW5mb3MsCi0J CQkJCSAgIEFwcGVuZFJlbEluZm8gKiphcHBpbmZvcykKLXsKLQlOb2RlCSAgICpyZXN1bHQ7 Ci0JYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19jb250ZXh0IGNvbnRleHQ7Ci0KLQljb250ZXh0 LnJvb3QgPSByb290OwotCWNvbnRleHQubmFwcGluZm9zID0gbmFwcGluZm9zOwotCWNvbnRl eHQuYXBwaW5mb3MgPSBhcHBpbmZvczsKLQotCS8qIElmIHRoZXJlJ3Mgbm90aGluZyB0byBh ZGp1c3QsIGRvbid0IGNhbGwgdGhpcyBmdW5jdGlvbi4gKi8KLQlBc3NlcnQobmFwcGluZm9z ID49IDEgJiYgYXBwaW5mb3MgIT0gTlVMTCk7Ci0KLQkvKgotCSAqIE11c3QgYmUgcHJlcGFy ZWQgdG8gc3RhcnQgd2l0aCBhIFF1ZXJ5IG9yIGEgYmFyZSBleHByZXNzaW9uIHRyZWUuCi0J ICovCi0JaWYgKG5vZGUgJiYgSXNBKG5vZGUsIFF1ZXJ5KSkKLQl7Ci0JCVF1ZXJ5CSAgICpu ZXdub2RlOwotCQlpbnQJCQljbnQ7Ci0KLQkJbmV3bm9kZSA9IHF1ZXJ5X3RyZWVfbXV0YXRv cigoUXVlcnkgKikgbm9kZSwKLQkJCQkJCQkJCSBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211 dGF0b3IsCi0JCQkJCQkJCQkgKHZvaWQgKikgJmNvbnRleHQsCi0JCQkJCQkJCQkgUVRXX0lH Tk9SRV9SQ19TVUJRVUVSSUVTKTsKLQkJZm9yIChjbnQgPSAwOyBjbnQgPCBuYXBwaW5mb3M7 IGNudCsrKQotCQl7Ci0JCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvID0gYXBwaW5mb3NbY250 XTsKLQotCQkJaWYgKG5ld25vZGUtPnJlc3VsdFJlbGF0aW9uID09IGFwcGluZm8tPnBhcmVu dF9yZWxpZCkKLQkJCXsKLQkJCQluZXdub2RlLT5yZXN1bHRSZWxhdGlvbiA9IGFwcGluZm8t PmNoaWxkX3JlbGlkOwotCQkJCS8qIEZpeCB0bGlzdCByZXNub3MgdG9vLCBpZiBpdCdzIGlu aGVyaXRlZCBVUERBVEUgKi8KLQkJCQlpZiAobmV3bm9kZS0+Y29tbWFuZFR5cGUgPT0gQ01E X1VQREFURSkKLQkJCQkJbmV3bm9kZS0+dGFyZ2V0TGlzdCA9Ci0JCQkJCQlhZGp1c3RfaW5o ZXJpdGVkX3RsaXN0KG5ld25vZGUtPnRhcmdldExpc3QsCi0JCQkJCQkJCQkJCSAgIGFwcGlu Zm8pOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJcmVzdWx0ID0gKE5vZGUgKikgbmV3 bm9kZTsKLQl9Ci0JZWxzZQotCQlyZXN1bHQgPSBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211 dGF0b3Iobm9kZSwgJmNvbnRleHQpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGlj IE5vZGUgKgotYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yKE5vZGUgKm5vZGUsCi0J CQkJCQkJICAgYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19jb250ZXh0ICpjb250ZXh0KQotewot CUFwcGVuZFJlbEluZm8gKiphcHBpbmZvcyA9IGNvbnRleHQtPmFwcGluZm9zOwotCWludAkJ CW5hcHBpbmZvcyA9IGNvbnRleHQtPm5hcHBpbmZvczsKLQlpbnQJCQljbnQ7Ci0KLQlpZiAo bm9kZSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAoSXNBKG5vZGUsIFZhcikpCi0J ewotCQlWYXIJCSAgICp2YXIgPSAoVmFyICopIGNvcHlPYmplY3Qobm9kZSk7Ci0JCUFwcGVu ZFJlbEluZm8gKmFwcGluZm8gPSBOVUxMOwotCi0JCWZvciAoY250ID0gMDsgY250IDwgbmFw cGluZm9zOyBjbnQrKykKLQkJewotCQkJaWYgKHZhci0+dmFybm8gPT0gYXBwaW5mb3NbY250 XS0+cGFyZW50X3JlbGlkKQotCQkJewotCQkJCWFwcGluZm8gPSBhcHBpbmZvc1tjbnRdOwot CQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKHZhci0+dmFybGV2ZWxzdXAgPT0gMCAm JiBhcHBpbmZvKQotCQl7Ci0JCQl2YXItPnZhcm5vID0gYXBwaW5mby0+Y2hpbGRfcmVsaWQ7 Ci0JCQl2YXItPnZhcm5vb2xkID0gYXBwaW5mby0+Y2hpbGRfcmVsaWQ7Ci0JCQlpZiAodmFy LT52YXJhdHRubyA+IDApCi0JCQl7Ci0JCQkJTm9kZQkgICAqbmV3bm9kZTsKLQotCQkJCWlm ICh2YXItPnZhcmF0dG5vID4gbGlzdF9sZW5ndGgoYXBwaW5mby0+dHJhbnNsYXRlZF92YXJz KSkKLQkJCQkJZWxvZyhFUlJPUiwgImF0dHJpYnV0ZSAlZCBvZiByZWxhdGlvbiBcIiVzXCIg ZG9lcyBub3QgZXhpc3QiLAotCQkJCQkJIHZhci0+dmFyYXR0bm8sIGdldF9yZWxfbmFtZShh cHBpbmZvLT5wYXJlbnRfcmVsb2lkKSk7Ci0JCQkJbmV3bm9kZSA9IGNvcHlPYmplY3QobGlz dF9udGgoYXBwaW5mby0+dHJhbnNsYXRlZF92YXJzLAotCQkJCQkJCQkJCQkgIHZhci0+dmFy YXR0bm8gLSAxKSk7Ci0JCQkJaWYgKG5ld25vZGUgPT0gTlVMTCkKLQkJCQkJZWxvZyhFUlJP UiwgImF0dHJpYnV0ZSAlZCBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3QgZXhpc3QiLAot CQkJCQkJIHZhci0+dmFyYXR0bm8sIGdldF9yZWxfbmFtZShhcHBpbmZvLT5wYXJlbnRfcmVs b2lkKSk7Ci0JCQkJcmV0dXJuIG5ld25vZGU7Ci0JCQl9Ci0JCQllbHNlIGlmICh2YXItPnZh cmF0dG5vID09IDApCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBXaG9sZS1yb3cgVmFyOiBpZiB3 ZSBhcmUgZGVhbGluZyB3aXRoIG5hbWVkIHJvd3R5cGVzLCB3ZQotCQkJCSAqIGNhbiB1c2Ug YSB3aG9sZS1yb3cgVmFyIGZvciB0aGUgY2hpbGQgdGFibGUgcGx1cyBhIGNvZXJjaW9uCi0J CQkJICogc3RlcCB0byBjb252ZXJ0IHRoZSB0dXBsZSBsYXlvdXQgdG8gdGhlIHBhcmVudCdz IHJvd3R5cGUuCi0JCQkJICogT3RoZXJ3aXNlIHdlIGhhdmUgdG8gZ2VuZXJhdGUgYSBSb3dF eHByLgotCQkJCSAqLwotCQkJCWlmIChPaWRJc1ZhbGlkKGFwcGluZm8tPmNoaWxkX3JlbHR5 cGUpKQotCQkJCXsKLQkJCQkJQXNzZXJ0KHZhci0+dmFydHlwZSA9PSBhcHBpbmZvLT5wYXJl bnRfcmVsdHlwZSk7Ci0JCQkJCWlmIChhcHBpbmZvLT5wYXJlbnRfcmVsdHlwZSAhPSBhcHBp bmZvLT5jaGlsZF9yZWx0eXBlKQotCQkJCQl7Ci0JCQkJCQlDb252ZXJ0Um93dHlwZUV4cHIg KnIgPSBtYWtlTm9kZShDb252ZXJ0Um93dHlwZUV4cHIpOwotCi0JCQkJCQlyLT5hcmcgPSAo RXhwciAqKSB2YXI7Ci0JCQkJCQlyLT5yZXN1bHR0eXBlID0gYXBwaW5mby0+cGFyZW50X3Jl bHR5cGU7Ci0JCQkJCQlyLT5jb252ZXJ0Zm9ybWF0ID0gQ09FUkNFX0lNUExJQ0lUX0NBU1Q7 Ci0JCQkJCQlyLT5sb2NhdGlvbiA9IC0xOwotCQkJCQkJLyogTWFrZSBzdXJlIHRoZSBWYXIg bm9kZSBoYXMgdGhlIHJpZ2h0IHR5cGUgSUQsIHRvbyAqLwotCQkJCQkJdmFyLT52YXJ0eXBl ID0gYXBwaW5mby0+Y2hpbGRfcmVsdHlwZTsKLQkJCQkJCXJldHVybiAoTm9kZSAqKSByOwot CQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIEJ1aWxk IGEgUm93RXhwciBjb250YWluaW5nIHRoZSB0cmFuc2xhdGVkIHZhcmlhYmxlcy4KLQkJCQkJ ICoKLQkJCQkJICogSW4gcHJhY3RpY2UgdmFyLT52YXJ0eXBlIHdpbGwgYWx3YXlzIGJlIFJF Q09SRE9JRCBoZXJlLAotCQkJCQkgKiBzbyB3ZSBuZWVkIHRvIGNvbWUgdXAgd2l0aCBzb21l IHN1aXRhYmxlIGNvbHVtbiBuYW1lcy4KLQkJCQkJICogV2UgdXNlIHRoZSBwYXJlbnQgUlRF J3MgY29sdW1uIG5hbWVzLgotCQkJCQkgKgotCQkJCQkgKiBOb3RlOiB3ZSBjYW4ndCBnZXQg aGVyZSBmb3IgaW5oZXJpdGFuY2UgY2FzZXMsIHNvIHRoZXJlCi0JCQkJCSAqIGlzIG5vIG5l ZWQgdG8gd29ycnkgdGhhdCB0cmFuc2xhdGVkX3ZhcnMgbWlnaHQgY29udGFpbgotCQkJCQkg KiBzb21lIGR1bW15IE5VTExzLgotCQkJCQkgKi8KLQkJCQkJUm93RXhwciAgICAqcm93ZXhw cjsKLQkJCQkJTGlzdAkgICAqZmllbGRzOwotCQkJCQlSYW5nZVRibEVudHJ5ICpydGU7Ci0K LQkJCQkJcnRlID0gcnRfZmV0Y2goYXBwaW5mby0+cGFyZW50X3JlbGlkLAotCQkJCQkJCQkg ICBjb250ZXh0LT5yb290LT5wYXJzZS0+cnRhYmxlKTsKLQkJCQkJZmllbGRzID0gY29weU9i amVjdChhcHBpbmZvLT50cmFuc2xhdGVkX3ZhcnMpOwotCQkJCQlyb3dleHByID0gbWFrZU5v ZGUoUm93RXhwcik7Ci0JCQkJCXJvd2V4cHItPmFyZ3MgPSBmaWVsZHM7Ci0JCQkJCXJvd2V4 cHItPnJvd190eXBlaWQgPSB2YXItPnZhcnR5cGU7Ci0JCQkJCXJvd2V4cHItPnJvd19mb3Jt YXQgPSBDT0VSQ0VfSU1QTElDSVRfQ0FTVDsKLQkJCQkJcm93ZXhwci0+Y29sbmFtZXMgPSBj b3B5T2JqZWN0KHJ0ZS0+ZXJlZi0+Y29sbmFtZXMpOwotCQkJCQlyb3dleHByLT5sb2NhdGlv biA9IC0xOwotCi0JCQkJCXJldHVybiAoTm9kZSAqKSByb3dleHByOwotCQkJCX0KLQkJCX0K LQkJCS8qIHN5c3RlbSBhdHRyaWJ1dGVzIGRvbid0IG5lZWQgYW55IG90aGVyIHRyYW5zbGF0 aW9uICovCi0JCX0KLQkJcmV0dXJuIChOb2RlICopIHZhcjsKLQl9Ci0JaWYgKElzQShub2Rl LCBDdXJyZW50T2ZFeHByKSkKLQl7Ci0JCUN1cnJlbnRPZkV4cHIgKmNleHByID0gKEN1cnJl bnRPZkV4cHIgKikgY29weU9iamVjdChub2RlKTsKLQotCQlmb3IgKGNudCA9IDA7IGNudCA8 IG5hcHBpbmZvczsgY250KyspCi0JCXsKLQkJCUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSBh cHBpbmZvc1tjbnRdOwotCi0JCQlpZiAoY2V4cHItPmN2YXJubyA9PSBhcHBpbmZvLT5wYXJl bnRfcmVsaWQpCi0JCQl7Ci0JCQkJY2V4cHItPmN2YXJubyA9IGFwcGluZm8tPmNoaWxkX3Jl bGlkOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJldHVybiAoTm9kZSAqKSBjZXhwcjsK LQl9Ci0JaWYgKElzQShub2RlLCBSYW5nZVRibFJlZikpCi0JewotCQlSYW5nZVRibFJlZiAq cnRyID0gKFJhbmdlVGJsUmVmICopIGNvcHlPYmplY3Qobm9kZSk7Ci0KLQkJZm9yIChjbnQg PSAwOyBjbnQgPCBuYXBwaW5mb3M7IGNudCsrKQotCQl7Ci0JCQlBcHBlbmRSZWxJbmZvICph cHBpbmZvID0gYXBwaW5mb3NbY250XTsKLQotCQkJaWYgKHJ0ci0+cnRpbmRleCA9PSBhcHBp bmZvLT5wYXJlbnRfcmVsaWQpCi0JCQl7Ci0JCQkJcnRyLT5ydGluZGV4ID0gYXBwaW5mby0+ Y2hpbGRfcmVsaWQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChOb2RlICop IHJ0cjsKLQl9Ci0JaWYgKElzQShub2RlLCBKb2luRXhwcikpCi0JewotCQkvKiBDb3B5IHRo ZSBKb2luRXhwciBub2RlIHdpdGggY29ycmVjdCBtdXRhdGlvbiBvZiBzdWJub2RlcyAqLwot CQlKb2luRXhwciAgICpqOwotCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvOwotCi0JCWogPSAo Sm9pbkV4cHIgKikgZXhwcmVzc2lvbl90cmVlX211dGF0b3Iobm9kZSwKLQkJCQkJCQkJCQkJ CSBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IsCi0JCQkJCQkJCQkJCQkgKHZvaWQg KikgY29udGV4dCk7Ci0JCS8qIG5vdyBmaXggSm9pbkV4cHIncyBydGluZGV4IChwcm9iYWJs eSBuZXZlciBoYXBwZW5zKSAqLwotCQlmb3IgKGNudCA9IDA7IGNudCA8IG5hcHBpbmZvczsg Y250KyspCi0JCXsKLQkJCWFwcGluZm8gPSBhcHBpbmZvc1tjbnRdOwotCi0JCQlpZiAoai0+ cnRpbmRleCA9PSBhcHBpbmZvLT5wYXJlbnRfcmVsaWQpCi0JCQl7Ci0JCQkJai0+cnRpbmRl eCA9IGFwcGluZm8tPmNoaWxkX3JlbGlkOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJl dHVybiAoTm9kZSAqKSBqOwotCX0KLQlpZiAoSXNBKG5vZGUsIFBsYWNlSG9sZGVyVmFyKSkK LQl7Ci0JCS8qIENvcHkgdGhlIFBsYWNlSG9sZGVyVmFyIG5vZGUgd2l0aCBjb3JyZWN0IG11 dGF0aW9uIG9mIHN1Ym5vZGVzICovCi0JCVBsYWNlSG9sZGVyVmFyICpwaHY7Ci0KLQkJcGh2 ID0gKFBsYWNlSG9sZGVyVmFyICopIGV4cHJlc3Npb25fdHJlZV9tdXRhdG9yKG5vZGUsCi0J CQkJCQkJCQkJCQkJCSBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IsCi0JCQkJCQkJ CQkJCQkJCSAodm9pZCAqKSBjb250ZXh0KTsKLQkJLyogbm93IGZpeCBQbGFjZUhvbGRlclZh cidzIHJlbGlkIHNldHMgKi8KLQkJaWYgKHBodi0+cGhsZXZlbHN1cCA9PSAwKQotCQkJcGh2 LT5waHJlbHMgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKHBodi0+cGhyZWxzLCBjb250ZXh0LT5u YXBwaW5mb3MsCi0JCQkJCQkJCQkJCSAgY29udGV4dC0+YXBwaW5mb3MpOwotCQlyZXR1cm4g KE5vZGUgKikgcGh2OwotCX0KLQotCS8qCi0JICogVGhpcyBpcyBuZWVkZWQsIGJlY2F1c2Ug aW5oZXJpdGFuY2VfbWFrZV9yZWxfZnJvbV9qb2lubGlzdCBuZWVkcyB0bwotCSAqIHRyYW5z bGF0ZSByb290LT5qb2luX2luZm9fbGlzdCBleGVjdXRpbmcgbWFrZV9yZWxfZnJvbV9qb2lu bGlzdCBmb3IgYQotCSAqIGdpdmVuIGNoaWxkLgotCSAqLwotCWlmIChJc0Eobm9kZSwgU3Bl Y2lhbEpvaW5JbmZvKSkKLQl7Ci0JCVNwZWNpYWxKb2luSW5mbyAqb2xkaW5mbyA9IChTcGVj aWFsSm9pbkluZm8gKikgbm9kZTsKLQkJU3BlY2lhbEpvaW5JbmZvICpuZXdpbmZvID0gbWFr ZU5vZGUoU3BlY2lhbEpvaW5JbmZvKTsKLQotCQltZW1jcHkobmV3aW5mbywgb2xkaW5mbywg c2l6ZW9mKFNwZWNpYWxKb2luSW5mbykpOwotCQluZXdpbmZvLT5taW5fbGVmdGhhbmQgPSBh ZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPm1pbl9sZWZ0aGFuZCwKLQkJCQkJCQkJCQkJ CQljb250ZXh0LT5uYXBwaW5mb3MsCi0JCQkJCQkJCQkJCQkJY29udGV4dC0+YXBwaW5mb3Mp OwotCQluZXdpbmZvLT5taW5fcmlnaHRoYW5kID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhvbGRp bmZvLT5taW5fcmlnaHRoYW5kLAotCQkJCQkJCQkJCQkJCSBjb250ZXh0LT5uYXBwaW5mb3Ms Ci0JCQkJCQkJCQkJCQkJIGNvbnRleHQtPmFwcGluZm9zKTsKLQkJbmV3aW5mby0+c3luX2xl ZnRoYW5kID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhvbGRpbmZvLT5zeW5fbGVmdGhhbmQsCi0J CQkJCQkJCQkJCQkJY29udGV4dC0+bmFwcGluZm9zLAotCQkJCQkJCQkJCQkJCWNvbnRleHQt PmFwcGluZm9zKTsKLQkJbmV3aW5mby0+c3luX3JpZ2h0aGFuZCA9IGFkanVzdF9jaGlsZF9y ZWxpZHMob2xkaW5mby0+c3luX3JpZ2h0aGFuZCwKLQkJCQkJCQkJCQkJCQkgY29udGV4dC0+ bmFwcGluZm9zLAotCQkJCQkJCQkJCQkJCSBjb250ZXh0LT5hcHBpbmZvcyk7Ci0JCW5ld2lu Zm8tPnNlbWlfcmhzX2V4cHJzID0KLQkJCQkJKExpc3QgKikgZXhwcmVzc2lvbl90cmVlX211 dGF0b3IoKE5vZGUgKikKLQkJCQkJCQkJCQkJCQkgb2xkaW5mby0+c2VtaV9yaHNfZXhwcnMs Ci0JCQkJCQkJCQkJCQkJIGFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvciwKLQkJCQkJ CQkJCQkJCQkgKHZvaWQgKikgY29udGV4dCk7Ci0JCXJldHVybiAoTm9kZSAqKSBuZXdpbmZv OwotCX0KLQotCS8qIFNob3VsZG4ndCBuZWVkIHRvIGhhbmRsZSBwbGFubmVyIGF1eGlsaWFy eSBub2RlcyBoZXJlICovCi0JQXNzZXJ0KCFJc0Eobm9kZSwgQXBwZW5kUmVsSW5mbykpOwot CUFzc2VydCghSXNBKG5vZGUsIFBsYWNlSG9sZGVySW5mbykpOwotCUFzc2VydCghSXNBKG5v ZGUsIE1pbk1heEFnZ0luZm8pKTsKLQotCS8qCi0JICogV2UgaGF2ZSB0byBwcm9jZXNzIFJl c3RyaWN0SW5mbyBub2RlcyBzcGVjaWFsbHkuICAoTm90ZTogYWx0aG91Z2gKLQkgKiBzZXRf YXBwZW5kX3JlbF9wYXRobGlzdCB3aWxsIGhpZGUgUmVzdHJpY3RJbmZvcyBpbiB0aGUgcGFy ZW50J3MKLQkgKiBiYXNlcmVzdHJpY3RpbmZvIGxpc3QgZnJvbSB1cywgaXQgZG9lc24ndCBo aWRlIHRob3NlIGluIGpvaW5pbmZvLikKLQkgKi8KLQlpZiAoSXNBKG5vZGUsIFJlc3RyaWN0 SW5mbykpCi0JewotCQlSZXN0cmljdEluZm8gKm9sZGluZm8gPSAoUmVzdHJpY3RJbmZvICop IG5vZGU7Ci0JCVJlc3RyaWN0SW5mbyAqbmV3aW5mbyA9IG1ha2VOb2RlKFJlc3RyaWN0SW5m byk7Ci0KLQkJLyogQ29weSBhbGwgZmxhdC1jb3BpYWJsZSBmaWVsZHMgKi8KLQkJbWVtY3B5 KG5ld2luZm8sIG9sZGluZm8sIHNpemVvZihSZXN0cmljdEluZm8pKTsKLQotCQkvKiBSZWN1 cnNpdmVseSBmaXggdGhlIGNsYXVzZSBpdHNlbGYgKi8KLQkJbmV3aW5mby0+Y2xhdXNlID0g KEV4cHIgKikKLQkJCWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBv bGRpbmZvLT5jbGF1c2UsIGNvbnRleHQpOwotCi0JCS8qIGFuZCB0aGUgbW9kaWZpZWQgdmVy c2lvbiwgaWYgYW4gT1IgY2xhdXNlICovCi0JCW5ld2luZm8tPm9yY2xhdXNlID0gKEV4cHIg KikKLQkJCWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcigoTm9kZSAqKSBvbGRpbmZv LT5vcmNsYXVzZSwgY29udGV4dCk7Ci0KLQkJLyogYWRqdXN0IHJlbGlkIHNldHMgdG9vICov Ci0JCW5ld2luZm8tPmNsYXVzZV9yZWxpZHMgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGlu Zm8tPmNsYXVzZV9yZWxpZHMsCi0JCQkJCQkJCQkJCQkJIGNvbnRleHQtPm5hcHBpbmZvcywK LQkJCQkJCQkJCQkJCQkgY29udGV4dC0+YXBwaW5mb3MpOwotCQluZXdpbmZvLT5yZXF1aXJl ZF9yZWxpZHMgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPnJlcXVpcmVkX3JlbGlk cywKLQkJCQkJCQkJCQkJCQkgICBjb250ZXh0LT5uYXBwaW5mb3MsCi0JCQkJCQkJCQkJCQkJ ICAgY29udGV4dC0+YXBwaW5mb3MpOwotCQluZXdpbmZvLT5vdXRlcl9yZWxpZHMgPSBhZGp1 c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPm91dGVyX3JlbGlkcywKLQkJCQkJCQkJCQkJCQlj b250ZXh0LT5uYXBwaW5mb3MsCi0JCQkJCQkJCQkJCQkJY29udGV4dC0+YXBwaW5mb3MpOwot CQluZXdpbmZvLT5udWxsYWJsZV9yZWxpZHMgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGlu Zm8tPm51bGxhYmxlX3JlbGlkcywKLQkJCQkJCQkJCQkJCQkgICBjb250ZXh0LT5uYXBwaW5m b3MsCi0JCQkJCQkJCQkJCQkJICAgY29udGV4dC0+YXBwaW5mb3MpOwotCQluZXdpbmZvLT5s ZWZ0X3JlbGlkcyA9IGFkanVzdF9jaGlsZF9yZWxpZHMob2xkaW5mby0+bGVmdF9yZWxpZHMs Ci0JCQkJCQkJCQkJCQkgICBjb250ZXh0LT5uYXBwaW5mb3MsCi0JCQkJCQkJCQkJCQkgICBj b250ZXh0LT5hcHBpbmZvcyk7Ci0JCW5ld2luZm8tPnJpZ2h0X3JlbGlkcyA9IGFkanVzdF9j aGlsZF9yZWxpZHMob2xkaW5mby0+cmlnaHRfcmVsaWRzLAotCQkJCQkJCQkJCQkJCWNvbnRl eHQtPm5hcHBpbmZvcywKLQkJCQkJCQkJCQkJCQljb250ZXh0LT5hcHBpbmZvcyk7Ci0KLQkJ LyoKLQkJICogUmVzZXQgY2FjaGVkIGRlcml2YXRpdmUgZmllbGRzLCBzaW5jZSB0aGVzZSBt aWdodCBuZWVkIHRvIGhhdmUKLQkJICogZGlmZmVyZW50IHZhbHVlcyB3aGVuIGNvbnNpZGVy aW5nIHRoZSBjaGlsZCByZWxhdGlvbi4gIE5vdGUgd2UKLQkJICogZG9uJ3QgcmVzZXQgbGVm dF9lYy9yaWdodF9lYzogZWFjaCBjaGlsZCB2YXJpYWJsZSBpcyBpbXBsaWNpdGx5Ci0JCSAq IGVxdWl2YWxlbnQgdG8gaXRzIHBhcmVudCwgc28gc3RpbGwgYSBtZW1iZXIgb2YgdGhlIHNh bWUgRUMgaWYgYW55LgotCQkgKi8KLQkJbmV3aW5mby0+ZXZhbF9jb3N0LnN0YXJ0dXAgPSAt MTsKLQkJbmV3aW5mby0+bm9ybV9zZWxlYyA9IC0xOwotCQluZXdpbmZvLT5vdXRlcl9zZWxl YyA9IC0xOwotCQluZXdpbmZvLT5sZWZ0X2VtID0gTlVMTDsKLQkJbmV3aW5mby0+cmlnaHRf ZW0gPSBOVUxMOwotCQluZXdpbmZvLT5zY2Fuc2VsX2NhY2hlID0gTklMOwotCQluZXdpbmZv LT5sZWZ0X2J1Y2tldHNpemUgPSAtMTsKLQkJbmV3aW5mby0+cmlnaHRfYnVja2V0c2l6ZSA9 IC0xOwotCQluZXdpbmZvLT5sZWZ0X21jdmZyZXEgPSAtMTsKLQkJbmV3aW5mby0+cmlnaHRf bWN2ZnJlcSA9IC0xOwotCi0JCXJldHVybiAoTm9kZSAqKSBuZXdpbmZvOwotCX0KLQotCS8q Ci0JICogTk9URTogd2UgZG8gbm90IG5lZWQgdG8gcmVjdXJzZSBpbnRvIHN1YmxpbmtzLCBi ZWNhdXNlIHRoZXkgc2hvdWxkCi0JICogYWxyZWFkeSBoYXZlIGJlZW4gY29udmVydGVkIHRv IHN1YnBsYW5zIGJlZm9yZSB3ZSBzZWUgdGhlbS4KLQkgKi8KLQlBc3NlcnQoIUlzQShub2Rl LCBTdWJMaW5rKSk7Ci0JQXNzZXJ0KCFJc0Eobm9kZSwgUXVlcnkpKTsKLQotCXJldHVybiBl eHByZXNzaW9uX3RyZWVfbXV0YXRvcihub2RlLCBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211 dGF0b3IsCi0JCQkJCQkJCSAgICh2b2lkICopIGNvbnRleHQpOwotfQotCi0vKgotICogU3Vi c3RpdHV0ZSBjaGlsZCByZWxpZHMgZm9yIHBhcmVudCByZWxpZHMgaW4gYSBSZWxpZCBzZXQu ICBUaGUgYXJyYXkgb2YKLSAqIGFwcGluZm9zIHNwZWNpZmllcyB0aGUgc3Vic3RpdHV0aW9u cyB0byBiZSBwZXJmb3JtZWQuCi0gKi8KLXN0YXRpYyBSZWxpZHMKLWFkanVzdF9jaGlsZF9y ZWxpZHMoUmVsaWRzIHJlbGlkcywgaW50IG5hcHBpbmZvcywgQXBwZW5kUmVsSW5mbyAqKmFw cGluZm9zKQotewotCUJpdG1hcHNldCAgKnJlc3VsdCA9IE5VTEw7Ci0JaW50CQkJY250Owot Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBuYXBwaW5mb3M7IGNudCsrKQotCXsKLQkJQXBwZW5k UmVsSW5mbyAqYXBwaW5mbyA9IGFwcGluZm9zW2NudF07Ci0KLQkJLyogUmVtb3ZlIHBhcmVu dCwgYWRkIGNoaWxkICovCi0JCWlmIChibXNfaXNfbWVtYmVyKGFwcGluZm8tPnBhcmVudF9y ZWxpZCwgcmVsaWRzKSkKLQkJewotCQkJLyogTWFrZSBhIGNvcHkgaWYgd2UgYXJlIGNoYW5n aW5nIHRoZSBzZXQuICovCi0JCQlpZiAoIXJlc3VsdCkKLQkJCQlyZXN1bHQgPSBibXNfY29w eShyZWxpZHMpOwotCi0JCQlyZXN1bHQgPSBibXNfZGVsX21lbWJlcihyZXN1bHQsIGFwcGlu Zm8tPnBhcmVudF9yZWxpZCk7Ci0JCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQs IGFwcGluZm8tPmNoaWxkX3JlbGlkKTsKLQkJfQotCX0KLQotCS8qIElmIHdlIG1hZGUgYW55 IGNoYW5nZXMsIHJldHVybiB0aGUgbW9kaWZpZWQgY29weS4gKi8KLQlpZiAocmVzdWx0KQot CQlyZXR1cm4gcmVzdWx0OwotCi0JLyogT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG9yaWdpbmFs IHNldCB3aXRob3V0IG1vZGlmaWNhdGlvbi4gKi8KLQlyZXR1cm4gcmVsaWRzOwotfQotCi0v KgotICogUmVwbGFjZSBhbnkgcmVsaWQgcHJlc2VudCBpbiB0b3BfcGFyZW50X3JlbGlkcyB3 aXRoIGl0cyBjaGlsZCBpbgotICogY2hpbGRfcmVsaWRzLiBNZW1iZXJzIG9mIGNoaWxkX3Jl bGlkcyBjYW4gYmUgbXVsdGlwbGUgbGV2ZWxzIGJlbG93IHRvcAotICogcGFyZW50IGluIHRo ZSBwYXJ0aXRpb24gaGllcmFyY2h5LgotICovCi1SZWxpZHMKLWFkanVzdF9jaGlsZF9yZWxp ZHNfbXVsdGlsZXZlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcywKLQkJCQkJ CQkgICBSZWxpZHMgY2hpbGRfcmVsaWRzLCBSZWxpZHMgdG9wX3BhcmVudF9yZWxpZHMpCi17 Ci0JQXBwZW5kUmVsSW5mbyAqKmFwcGluZm9zOwotCWludAkJCW5hcHBpbmZvczsKLQlSZWxp ZHMJCXBhcmVudF9yZWxpZHMgPSBOVUxMOwotCVJlbGlkcwkJcmVzdWx0OwotCVJlbGlkcwkJ dG1wX3Jlc3VsdCA9IE5VTEw7Ci0JaW50CQkJY250OwotCi0JLyoKLQkgKiBJZiB0aGUgZ2l2 ZW4gcmVsaWRzIHNldCBkb2Vzbid0IGNvbnRhaW4gYW55IG9mIHRoZSB0b3AgcGFyZW50IHJl bGlkcywKLQkgKiBpdCB3aWxsIHJlbWFpbiB1bmNoYW5nZWQuCi0JICovCi0JaWYgKCFibXNf b3ZlcmxhcChyZWxpZHMsIHRvcF9wYXJlbnRfcmVsaWRzKSkKLQkJcmV0dXJuIHJlbGlkczsK LQotCWFwcGluZm9zID0gZmluZF9hcHBpbmZvc19ieV9yZWxpZHMocm9vdCwgY2hpbGRfcmVs aWRzLCAmbmFwcGluZm9zKTsKLQotCS8qIENvbnN0cnVjdCByZWxpZHMgc2V0IGZvciB0aGUg aW1tZWRpYXRlIHBhcmVudCBvZiB0aGUgZ2l2ZW4gY2hpbGQuICovCi0JZm9yIChjbnQgPSAw OyBjbnQgPCBuYXBwaW5mb3M7IGNudCsrKQotCXsKLQkJQXBwZW5kUmVsSW5mbyAqYXBwaW5m byA9IGFwcGluZm9zW2NudF07Ci0KLQkJcGFyZW50X3JlbGlkcyA9IGJtc19hZGRfbWVtYmVy KHBhcmVudF9yZWxpZHMsIGFwcGluZm8tPnBhcmVudF9yZWxpZCk7Ci0JfQotCi0JLyogUmVj dXJzZSBpZiBpbW1lZGlhdGUgcGFyZW50IGlzIG5vdCB0aGUgdG9wIHBhcmVudC4gKi8KLQlp ZiAoIWJtc19lcXVhbChwYXJlbnRfcmVsaWRzLCB0b3BfcGFyZW50X3JlbGlkcykpCi0Jewot CQl0bXBfcmVzdWx0ID0gYWRqdXN0X2NoaWxkX3JlbGlkc19tdWx0aWxldmVsKHJvb3QsIHJl bGlkcywKLQkJCQkJCQkJCQkJCQlwYXJlbnRfcmVsaWRzLAotCQkJCQkJCQkJCQkJCXRvcF9w YXJlbnRfcmVsaWRzKTsKLQkJcmVsaWRzID0gdG1wX3Jlc3VsdDsKLQl9Ci0KLQlyZXN1bHQg PSBhZGp1c3RfY2hpbGRfcmVsaWRzKHJlbGlkcywgbmFwcGluZm9zLCBhcHBpbmZvcyk7Ci0K LQkvKiBGcmVlIG1lbW9yeSBjb25zdW1lZCBieSBhbnkgaW50ZXJtZWRpYXRlIHJlc3VsdC4g Ki8KLQlpZiAodG1wX3Jlc3VsdCkKLQkJYm1zX2ZyZWUodG1wX3Jlc3VsdCk7Ci0JYm1zX2Zy ZWUocGFyZW50X3JlbGlkcyk7Ci0JcGZyZWUoYXBwaW5mb3MpOwotCi0JcmV0dXJuIHJlc3Vs dDsKLX0KLQotLyoKLSAqIEFkanVzdCB0aGUgdGFyZ2V0bGlzdCBlbnRyaWVzIG9mIGFuIGlu aGVyaXRlZCBVUERBVEUgb3BlcmF0aW9uCi0gKgotICogVGhlIGV4cHJlc3Npb25zIGhhdmUg YWxyZWFkeSBiZWVuIGZpeGVkLCBidXQgd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdAotICog dGhlIHRhcmdldCByZXNub3MgbWF0Y2ggdGhlIGNoaWxkIHRhYmxlICh0aGV5IG1heSBub3Qs IGluIHRoZSBjYXNlIG9mCi0gKiBhIGNvbHVtbiB0aGF0IHdhcyBhZGRlZCBhZnRlci10aGUt ZmFjdCBieSBBTFRFUiBUQUJMRSkuICBJbiBzb21lIGNhc2VzCi0gKiB0aGlzIGNhbiBmb3Jj ZSB1cyB0byByZS1vcmRlciB0aGUgdGxpc3QgdG8gcHJlc2VydmUgcmVzbm8gb3JkZXJpbmcu Ci0gKiAoV2UgZG8gYWxsIHRoaXMgd29yayBpbiBzcGVjaWFsIGNhc2VzIHNvIHRoYXQgcHJl cHRsaXN0LmMgaXMgZmFzdCBmb3IKLSAqIHRoZSB0eXBpY2FsIGNhc2UuKQotICoKLSAqIFRo ZSBnaXZlbiB0bGlzdCBoYXMgYWxyZWFkeSBiZWVuIHRocm91Z2ggZXhwcmVzc2lvbl90cmVl X211dGF0b3I7Ci0gKiB0aGVyZWZvcmUgdGhlIFRhcmdldEVudHJ5IG5vZGVzIGFyZSBmcmVz aCBjb3BpZXMgdGhhdCBpdCdzIG9rYXkgdG8KLSAqIHNjcmliYmxlIG9uLgotICoKLSAqIE5v dGUgdGhhdCB0aGlzIGlzIG5vdCBuZWVkZWQgZm9yIElOU0VSVCBiZWNhdXNlIElOU0VSVCBp c24ndCBpbmhlcml0YWJsZS4KLSAqLwotc3RhdGljIExpc3QgKgotYWRqdXN0X2luaGVyaXRl ZF90bGlzdChMaXN0ICp0bGlzdCwgQXBwZW5kUmVsSW5mbyAqY29udGV4dCkKLXsKLQlib29s CQljaGFuZ2VkX2l0ID0gZmFsc2U7Ci0JTGlzdENlbGwgICAqdGw7Ci0JTGlzdAkgICAqbmV3 X3RsaXN0OwotCWJvb2wJCW1vcmU7Ci0JaW50CQkJYXR0cm5vOwotCi0JLyogVGhpcyBzaG91 bGQgb25seSBoYXBwZW4gZm9yIGFuIGluaGVyaXRhbmNlIGNhc2UsIG5vdCBVTklPTiBBTEwg Ki8KLQlBc3NlcnQoT2lkSXNWYWxpZChjb250ZXh0LT5wYXJlbnRfcmVsb2lkKSk7Ci0KLQkv KiBTY2FuIHRsaXN0IGFuZCB1cGRhdGUgcmVzbm9zIHRvIG1hdGNoIGF0dG51bXMgb2YgY2hp bGQgcmVsICovCi0JZm9yZWFjaCh0bCwgdGxpc3QpCi0JewotCQlUYXJnZXRFbnRyeSAqdGxl ID0gKFRhcmdldEVudHJ5ICopIGxmaXJzdCh0bCk7Ci0JCVZhcgkJICAgKmNoaWxkdmFyOwot Ci0JCWlmICh0bGUtPnJlc2p1bmspCi0JCQljb250aW51ZTsJCQkvKiBpZ25vcmUganVuayBp dGVtcyAqLwotCi0JCS8qIExvb2sgdXAgdGhlIHRyYW5zbGF0aW9uIG9mIHRoaXMgY29sdW1u OiBpdCBtdXN0IGJlIGEgVmFyICovCi0JCWlmICh0bGUtPnJlc25vIDw9IDAgfHwKLQkJCXRs ZS0+cmVzbm8gPiBsaXN0X2xlbmd0aChjb250ZXh0LT50cmFuc2xhdGVkX3ZhcnMpKQotCQkJ ZWxvZyhFUlJPUiwgImF0dHJpYnV0ZSAlZCBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3Qg ZXhpc3QiLAotCQkJCSB0bGUtPnJlc25vLCBnZXRfcmVsX25hbWUoY29udGV4dC0+cGFyZW50 X3JlbG9pZCkpOwotCQljaGlsZHZhciA9IChWYXIgKikgbGlzdF9udGgoY29udGV4dC0+dHJh bnNsYXRlZF92YXJzLCB0bGUtPnJlc25vIC0gMSk7Ci0JCWlmIChjaGlsZHZhciA9PSBOVUxM IHx8ICFJc0EoY2hpbGR2YXIsIFZhcikpCi0JCQllbG9nKEVSUk9SLCAiYXR0cmlidXRlICVk IG9mIHJlbGF0aW9uIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCi0JCQkJIHRsZS0+cmVzbm8s IGdldF9yZWxfbmFtZShjb250ZXh0LT5wYXJlbnRfcmVsb2lkKSk7Ci0KLQkJaWYgKHRsZS0+ cmVzbm8gIT0gY2hpbGR2YXItPnZhcmF0dG5vKQotCQl7Ci0JCQl0bGUtPnJlc25vID0gY2hp bGR2YXItPnZhcmF0dG5vOwotCQkJY2hhbmdlZF9pdCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQkv KgotCSAqIElmIHdlIGNoYW5nZWQgYW55dGhpbmcsIHJlLXNvcnQgdGhlIHRsaXN0IGJ5IHJl c25vLCBhbmQgbWFrZSBzdXJlCi0JICogcmVzanVuayBlbnRyaWVzIGhhdmUgcmVzbm9zIGFi b3ZlIHRoZSBsYXN0IHJlYWwgcmVzbm8uICBUaGUgc29ydAotCSAqIGFsZ29yaXRobSBpcyBh IGJpdCBzdHVwaWQsIGJ1dCBmb3Igc3VjaCBhIHNlbGRvbS10YWtlbiBwYXRoLCBzbWFsbCBp cwotCSAqIHByb2JhYmx5IGJldHRlciB0aGFuIGZhc3QuCi0JICovCi0JaWYgKCFjaGFuZ2Vk X2l0KQotCQlyZXR1cm4gdGxpc3Q7Ci0KLQluZXdfdGxpc3QgPSBOSUw7Ci0JbW9yZSA9IHRy dWU7Ci0JZm9yIChhdHRybm8gPSAxOyBtb3JlOyBhdHRybm8rKykKLQl7Ci0JCW1vcmUgPSBm YWxzZTsKLQkJZm9yZWFjaCh0bCwgdGxpc3QpCi0JCXsKLQkJCVRhcmdldEVudHJ5ICp0bGUg PSAoVGFyZ2V0RW50cnkgKikgbGZpcnN0KHRsKTsKLQotCQkJaWYgKHRsZS0+cmVzanVuaykK LQkJCQljb250aW51ZTsJCS8qIGlnbm9yZSBqdW5rIGl0ZW1zICovCi0KLQkJCWlmICh0bGUt PnJlc25vID09IGF0dHJubykKLQkJCQluZXdfdGxpc3QgPSBsYXBwZW5kKG5ld190bGlzdCwg dGxlKTsKLQkJCWVsc2UgaWYgKHRsZS0+cmVzbm8gPiBhdHRybm8pCi0JCQkJbW9yZSA9IHRy dWU7Ci0JCX0KLQl9Ci0KLQlmb3JlYWNoKHRsLCB0bGlzdCkKLQl7Ci0JCVRhcmdldEVudHJ5 ICp0bGUgPSAoVGFyZ2V0RW50cnkgKikgbGZpcnN0KHRsKTsKLQotCQlpZiAoIXRsZS0+cmVz anVuaykKLQkJCWNvbnRpbnVlOwkJCS8qIGhlcmUsIGlnbm9yZSBub24tanVuayBpdGVtcyAq LwotCi0JCXRsZS0+cmVzbm8gPSBhdHRybm87Ci0JCW5ld190bGlzdCA9IGxhcHBlbmQobmV3 X3RsaXN0LCB0bGUpOwotCQlhdHRybm8rKzsKLQl9Ci0KLQlyZXR1cm4gbmV3X3RsaXN0Owot fQotCi0vKgotICogYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdWx0aWxldmVsCi0gKgkgIEFw cGx5IFZhciB0cmFuc2xhdGlvbnMgZnJvbSBhIHRvcGxldmVsIGFwcGVuZHJlbCBwYXJlbnQg ZG93biB0byBhIGNoaWxkLgotICoKLSAqIEluIHNvbWUgY2FzZXMgd2UgbmVlZCB0byB0cmFu c2xhdGUgZXhwcmVzc2lvbnMgcmVmZXJlbmNpbmcgYSBwYXJlbnQgcmVsYXRpb24KLSAqIHRv IHJlZmVyZW5jZSBhbiBhcHBlbmRyZWwgY2hpbGQgdGhhdCdzIG11bHRpcGxlIGxldmVscyBy ZW1vdmVkIGZyb20gaXQuCi0gKi8KLU5vZGUgKgotYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19t dWx0aWxldmVsKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpub2RlLAotCQkJCQkJCQkgIFJl bGlkcyBjaGlsZF9yZWxpZHMsCi0JCQkJCQkJCSAgUmVsaWRzIHRvcF9wYXJlbnRfcmVsaWRz KQotewotCUFwcGVuZFJlbEluZm8gKiphcHBpbmZvczsKLQlCaXRtYXBzZXQgICpwYXJlbnRf cmVsaWRzID0gTlVMTDsKLQlpbnQJCQluYXBwaW5mb3M7Ci0JaW50CQkJY250OwotCi0JQXNz ZXJ0KGJtc19udW1fbWVtYmVycyhjaGlsZF9yZWxpZHMpID09IGJtc19udW1fbWVtYmVycyh0 b3BfcGFyZW50X3JlbGlkcykpOwotCi0JYXBwaW5mb3MgPSBmaW5kX2FwcGluZm9zX2J5X3Jl bGlkcyhyb290LCBjaGlsZF9yZWxpZHMsICZuYXBwaW5mb3MpOwotCi0JLyogQ29uc3RydWN0 IHJlbGlkcyBzZXQgZm9yIHRoZSBpbW1lZGlhdGUgcGFyZW50IG9mIGdpdmVuIGNoaWxkLiAq LwotCWZvciAoY250ID0gMDsgY250IDwgbmFwcGluZm9zOyBjbnQrKykKLQl7Ci0JCUFwcGVu ZFJlbEluZm8gKmFwcGluZm8gPSBhcHBpbmZvc1tjbnRdOwotCi0JCXBhcmVudF9yZWxpZHMg PSBibXNfYWRkX21lbWJlcihwYXJlbnRfcmVsaWRzLCBhcHBpbmZvLT5wYXJlbnRfcmVsaWQp OwotCX0KLQotCS8qIFJlY3Vyc2UgaWYgaW1tZWRpYXRlIHBhcmVudCBpcyBub3QgdGhlIHRv cCBwYXJlbnQuICovCi0JaWYgKCFibXNfZXF1YWwocGFyZW50X3JlbGlkcywgdG9wX3BhcmVu dF9yZWxpZHMpKQotCQlub2RlID0gYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdWx0aWxldmVs KHJvb3QsIG5vZGUsIHBhcmVudF9yZWxpZHMsCi0JCQkJCQkJCQkJCQkgdG9wX3BhcmVudF9y ZWxpZHMpOwotCi0JLyogTm93IHRyYW5zbGF0ZSBmb3IgdGhpcyBjaGlsZCAqLwotCW5vZGUg PSBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzKHJvb3QsIG5vZGUsIG5hcHBpbmZvcywgYXBwaW5m b3MpOwotCi0JcGZyZWUoYXBwaW5mb3MpOwotCi0JcmV0dXJuIG5vZGU7Ci19Ci0KLS8qCi0g KiBDb25zdHJ1Y3QgdGhlIFNwZWNpYWxKb2luSW5mbyBmb3IgYSBjaGlsZC1qb2luIGJ5IHRy YW5zbGF0aW5nCi0gKiBTcGVjaWFsSm9pbkluZm8gZm9yIHRoZSBqb2luIGJldHdlZW4gcGFy ZW50cy4gbGVmdF9yZWxpZHMgYW5kIHJpZ2h0X3JlbGlkcwotICogYXJlIHRoZSByZWxpZHMg b2YgbGVmdCBhbmQgcmlnaHQgc2lkZSBvZiB0aGUgam9pbiByZXNwZWN0aXZlbHkuCi0gKi8K LVNwZWNpYWxKb2luSW5mbyAqCi1idWlsZF9jaGlsZF9qb2luX3NqaW5mbyhQbGFubmVySW5m byAqcm9vdCwgU3BlY2lhbEpvaW5JbmZvICpwYXJlbnRfc2ppbmZvLAotCQkJCQkJUmVsaWRz IGxlZnRfcmVsaWRzLCBSZWxpZHMgcmlnaHRfcmVsaWRzKQotewotCVNwZWNpYWxKb2luSW5m byAqc2ppbmZvID0gbWFrZU5vZGUoU3BlY2lhbEpvaW5JbmZvKTsKLQlBcHBlbmRSZWxJbmZv ICoqbGVmdF9hcHBpbmZvczsKLQlpbnQJCQlsZWZ0X25hcHBpbmZvczsKLQlBcHBlbmRSZWxJ bmZvICoqcmlnaHRfYXBwaW5mb3M7Ci0JaW50CQkJcmlnaHRfbmFwcGluZm9zOwotCi0JbWVt Y3B5KHNqaW5mbywgcGFyZW50X3NqaW5mbywgc2l6ZW9mKFNwZWNpYWxKb2luSW5mbykpOwot CWxlZnRfYXBwaW5mb3MgPSBmaW5kX2FwcGluZm9zX2J5X3JlbGlkcyhyb290LCBsZWZ0X3Jl bGlkcywKLQkJCQkJCQkJCQkJJmxlZnRfbmFwcGluZm9zKTsKLQlyaWdodF9hcHBpbmZvcyA9 IGZpbmRfYXBwaW5mb3NfYnlfcmVsaWRzKHJvb3QsIHJpZ2h0X3JlbGlkcywKLQkJCQkJCQkJ CQkJICZyaWdodF9uYXBwaW5mb3MpOwotCi0Jc2ppbmZvLT5taW5fbGVmdGhhbmQgPSBhZGp1 c3RfY2hpbGRfcmVsaWRzKHNqaW5mby0+bWluX2xlZnRoYW5kLAotCQkJCQkJCQkJCQkgICBs ZWZ0X25hcHBpbmZvcywgbGVmdF9hcHBpbmZvcyk7Ci0Jc2ppbmZvLT5taW5fcmlnaHRoYW5k ID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhzamluZm8tPm1pbl9yaWdodGhhbmQsCi0JCQkJCQkJ CQkJCQlyaWdodF9uYXBwaW5mb3MsCi0JCQkJCQkJCQkJCQlyaWdodF9hcHBpbmZvcyk7Ci0J c2ppbmZvLT5zeW5fbGVmdGhhbmQgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKHNqaW5mby0+c3lu X2xlZnRoYW5kLAotCQkJCQkJCQkJCQkgICBsZWZ0X25hcHBpbmZvcywgbGVmdF9hcHBpbmZv cyk7Ci0Jc2ppbmZvLT5zeW5fcmlnaHRoYW5kID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhzamlu Zm8tPnN5bl9yaWdodGhhbmQsCi0JCQkJCQkJCQkJCQlyaWdodF9uYXBwaW5mb3MsCi0JCQkJ CQkJCQkJCQlyaWdodF9hcHBpbmZvcyk7Ci0Jc2ppbmZvLT5zZW1pX3Joc19leHBycyA9IChM aXN0ICopIGFkanVzdF9hcHBlbmRyZWxfYXR0cnMocm9vdCwKLQkJCQkJCQkJCQkJCQkJCSAo Tm9kZSAqKSBzamluZm8tPnNlbWlfcmhzX2V4cHJzLAotCQkJCQkJCQkJCQkJCQkJIHJpZ2h0 X25hcHBpbmZvcywKLQkJCQkJCQkJCQkJCQkJCSByaWdodF9hcHBpbmZvcyk7Ci0KLQlwZnJl ZShsZWZ0X2FwcGluZm9zKTsKLQlwZnJlZShyaWdodF9hcHBpbmZvcyk7Ci0KLQlyZXR1cm4g c2ppbmZvOwotfQotCi0vKgotICogZmluZF9hcHBpbmZvc19ieV9yZWxpZHMKLSAqIAkJRmlu ZCBBcHBlbmRSZWxJbmZvIHN0cnVjdHVyZXMgZm9yIGFsbCByZWxhdGlvbnMgc3BlY2lmaWVk IGJ5IHJlbGlkcy4KLSAqCi0gKiBUaGUgQXBwZW5kUmVsSW5mb3MgYXJlIHJldHVybmVkIGlu IGFuIGFycmF5LCB3aGljaCBjYW4gYmUgcGZyZWUnZCBieSB0aGUKLSAqIGNhbGxlci4gKm5h cHBpbmZvcyBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBhcnJheS4K LSAqLwotQXBwZW5kUmVsSW5mbyAqKgotZmluZF9hcHBpbmZvc19ieV9yZWxpZHMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMsIGludCAqbmFwcGluZm9zKQotewotCUFwcGVu ZFJlbEluZm8gKiphcHBpbmZvczsKLQlpbnQJCQljbnQgPSAwOwotCWludAkJCWk7Ci0KLQkq bmFwcGluZm9zID0gYm1zX251bV9tZW1iZXJzKHJlbGlkcyk7Ci0JYXBwaW5mb3MgPSAoQXBw ZW5kUmVsSW5mbyAqKikgcGFsbG9jKHNpemVvZihBcHBlbmRSZWxJbmZvICopICogKm5hcHBp bmZvcyk7Ci0KLQlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHJlbGlk cywgaSkpID49IDApCi0JewotCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvID0gcm9vdC0+YXBw ZW5kX3JlbF9hcnJheVtpXTsKLQotCQlpZiAoIWFwcGluZm8pCi0JCQllbG9nKEVSUk9SLCAi Y2hpbGQgcmVsICVkIG5vdCBmb3VuZCBpbiBhcHBlbmRfcmVsX2FycmF5IiwgaSk7Ci0KLQkJ YXBwaW5mb3NbY250KytdID0gYXBwaW5mbzsKLQl9Ci0JcmV0dXJuIGFwcGluZm9zOwotfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvTWFrZWZpbGUgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9NYWtlZmlsZQppbmRleCBkYTljY2YzMmI0Li5kMTY2 MDMwYTEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9NYWtlZmls ZQorKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9NYWtlZmlsZQpAQCAtMTIsNyAr MTIsOCBAQCBzdWJkaXIgPSBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbAogdG9wX2J1aWxk ZGlyID0gLi4vLi4vLi4vLi4KIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmls ZS5nbG9iYWwKIAotT0JKUyA9IGNsYXVzZXMubyBqb2luaW5mby5vIG9yY2xhdXNlcy5vIHBh dGhub2RlLm8gcGxhY2Vob2xkZXIubyBcCi0JICAgcGxhbmNhdC5vIHByZWR0ZXN0Lm8gcmVs bm9kZS5vIHJlc3RyaWN0aW5mby5vIHRsaXN0Lm8gdmFyLm8KK09CSlMgPSBhcHBlbmQubyBh cHBlbmRpbmZvLm8gY2xhdXNlcy5vIGpvaW5pbmZvLm8gb3JjbGF1c2VzLm8gcGF0aG5vZGUu byBcCisJICAgcGxhY2Vob2xkZXIubyBwbGFuY2F0Lm8gcHJlZHRlc3QubyByZWxub2RlLm8g cmVzdHJpY3RpbmZvLm8gdGxpc3QubyBcCisJICAgdmFyLm8KIAogaW5jbHVkZSAkKHRvcF9z cmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvYXBwZW5kLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9h cHBlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iYmM1Nzk4 MTdhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBw ZW5kLmMKQEAgLTAsMCArMSw3MTkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAq IGFwcGVuZC5jCisgKgkgIFJvdXRpbmVzIHRvIHByb2Nlc3MgY2hpbGRyZW4gb2YgYW4gYXBw ZW5kcmVsIHBhcmVudAorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE4 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29w eXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3Ju aWEKKyAqCisgKgorICogSURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvYXBwZW5kLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lu Y2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUg ImFjY2Vzcy9zeXNhdHRyLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wYXJ0aXRpb24uaCIKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhl cml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgorI2luY2x1ZGUgIm5vZGVz L21ha2VmdW5jcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9hcHBlbmQuaCIKKyNpbmNsdWRl ICJvcHRpbWl6ZXIvYXBwZW5kaW5mby5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jbGF1c2Vz LmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCisjaW5jbHVkZSAib3B0aW1p emVyL3BhdGhzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKKyNpbmNsdWRl ICJvcHRpbWl6ZXIvcGxhbm1haW4uaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5o IgorI2luY2x1ZGUgIm9wdGltaXplci9wcmVwLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3Jl c3RyaWN0aW5mby5oIgorI2luY2x1ZGUgIm9wdGltaXplci90bGlzdC5oIgorI2luY2x1ZGUg Im9wdGltaXplci92YXIuaCIKKyNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFydHBydW5lLmgi CisjaW5jbHVkZSAidXRpbHMvcmVsLmgiCisKK3N0YXRpYyB2b2lkIGV4cGFuZF9pbmhlcml0 ZWRfcnRlbnRyeShQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlLAorCQkJ CQkJIEluZGV4IHJ0aSwgUmVsT3B0SW5mbyAqcmVsKTsKK3N0YXRpYyB2b2lkIGV4cGFuZF9w YXJ0aXRpb25lZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJICAgUmFuZ2VU YmxFbnRyeSAqcGFyZW50cnRlLAorCQkJCQkJICAgSW5kZXggcGFyZW50UlRpbmRleCwgUmVs T3B0SW5mbyAqcGFyZW50cmVsKTsKK3N0YXRpYyBSZWxPcHRJbmZvICphZGRfaW5oZXJpdGFu Y2VfY2hpbGRfcmVsKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJICBSYW5nZVRibEVudHJ5 ICpwYXJlbnRydGUsCisJCQkJCQkgIEluZGV4IHBhcmVudFJUaW5kZXgsIFJlbE9wdEluZm8g KnBhcmVudHJlbCwKKwkJCQkJCSAgUGxhblJvd01hcmsgKnRvcF9wYXJlbnRyYywgUmVsYXRp b24gY2hpbGRyZWwpOworc3RhdGljIFJlbE9wdEluZm8gKmJ1aWxkX2FwcGVuZF9jaGlsZF9y ZWwoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCSAgIFJlbE9wdEluZm8gKnBhcmVudCwKKwkJ CQkJICAgSW5kZXggY2hpbGRSVGluZGV4KTsKK3N0YXRpYyBMaXN0ICphZGRfcm93bWFya19q dW5rX2NvbHVtbnMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW5Sb3dNYXJrICpyYyk7CisKKwor LyoKKyAqIGV4cGFuZF9hcHBlbmRfcmVsCisgKgkJVGhpcyBpbml0aWFsaXplcyBSZWxPcHRJ bmZvcyBmb3IgYW4gYXBwZW5kcmVsJ3MgY2hpbGQgcmVsYXRpb25zLgorICoKKyAqICdyZWwn IGlzIHRoZSBhcHBlbmRyZWwgcGFyZW50LCB3aG9zZSByYW5nZSB0YWJsZSBlbnRyeSAoJ3J0 ZScpIGhhcyBiZWVuCisgKiBtYXJrZWQgdG8gcmVxdWlyZSBhZGRpbmcgY2hpbGRyZW4uICBB biBhcHBlbmRyZWwgcGFyZW50IGNvdWxkIGVpdGhlcgorICogYmUgYSBzdWJxdWVyeSAoaWYg d2UgZmxhdHRlbmVkIFVOSU9OIEFMTCBxdWVyeSkgb3IgYSB0YWJsZSB0aGF0J3Mga25vd24K KyAqIHRvIGhhdmUgaW5oZXJpdGFuY2UgY2hpbGRyZW4uICBUaGUgbGF0dGVyIGNvbnNpc3Rz IG9mIGJvdGggcmVndWxhcgorICogaW5oZXJpdGFuY2UgcGFyZW50cyBhbmQgcGFydGl0aW9u ZWQgdGFibGVzLgorICoKKyAqIEZvciBhIHN1YnF1ZXJ5IHBhcmVudCwgdGhlcmUgaXMgbm90 IG11Y2ggdG8gYmUgZG9uZSBoZXJlIGJlY2F1c2UgdGhlCisgKiBjaGlsZHJlbidzIFJURXMg YXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgcXVlcnksIHNvIHdlIGp1c3QgaW5pdGlhbGl6 ZQorICogUmVsT3B0SW5mb3MgZm9yIHRoZW0uICBBbHNvLCB0aGUgQXBwZW5kUmVsSW5mb3Mg Zm9yIGNoaWxkIHN1YnF1ZXJpZXMKKyAqIGhhdmUgYWxyZWFkeSBiZWVuIGFkZGVkLgorICoK KyAqIEZvciB0YWJsZXMsIHdlIG5lZWQgdG8gYWRkIHRoZSBjaGlsZHJlbiB0byB0aGUgcmFu Z2UgdGFibGUgYW5kIGluaXRpYWxpemUKKyAqIEFwcGVuZFJlbEluZm9zLCBSZWxPcHRJbmZv cywgYW5kIFBsYW5Sb3dNYXJrcyAoaWYgYW55KSBmb3IgdGhlbS4gIEZvcgorICogYSBwYXJ0 aXRpb25lZCBwYXJlbnQsIHdlIG9ubHkgYWRkIHRoZSBjaGlsZHJlbiByZW1haW5pbmcgYWZ0 ZXIgcHJ1bmluZy4KKyAqIEZvciByZWd1bGFyIGluaGVyaXRhbmNlIHBhcmVudHMsIHdlIGZp bmQgdGhlIGNoaWxkcmVuIHVzaW5nCisgKiBmaW5kX2FsbF9pbmhlcml0b3JzIGFuZCBhZGQg YWxsIG9mIHRoZW0uCisgKgorICogSWYgaXQgdHVybnMgb3V0IHRoYXQgdGhlcmUgYXJlIG5v IGNoaWxkcmVuLCB0aGVuIHdlIHNldCBydGUtPmluaCB0byBmYWxzZQorICogdG8gbGV0IHRo ZSBjYWxsZXIga25vdyB0aGF0IG9ubHkgdGhlIHBhcmVudCB0YWJsZSBuZWVkcyB0byBiZSBz Y2FubmVkLiAgVGhlCisgKiBjYWxsZXIgY2FuIGFjY29yZGluZ2x5IHN3aXRjaCB0byBhIG5v bi1BcHBlbmQgcGF0aC4gIEZvciBhIHBhcnRpdGlvbmVkCisgKiBwYXJlbnQsIHRoYXQgbWVh bnMgYW4gZW1wdHkgcmVsYXRpb24gYmVjYXVzZSBwYXJlbnRzIHRoZW1zZWx2ZXMgY29udGFp biBubworICogZGF0YS4KKyAqCisgKiBGb3IgdGhlIHJlZ3VsYXIgaW5oZXJpdGFuY2UgY2Fz ZSwgdGhlIHBhcmVudCBhbHNvIGdldHMgYW5vdGhlciBSVEUgd2l0aAorICogaW5oID0gZmFs c2UgdG8gcmVwcmVzZW50IGl0IGFzIGFuIGFwcGVuZHJlbCBjaGlsZC4gIFRoZSBvcmlnaW5h bCBSVEUgaXMKKyAqIGNvbnNpZGVyZWQgdG8gcmVwcmVzZW50IHRoZSB3aG9sZSBpbmhlcml0 YW5jZSBzZXQuCisgKi8KK3ZvaWQKK2V4cGFuZF9hcHBlbmRfcmVsKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpyZWwsIFJhbmdlVGJsRW50cnkgKnJ0ZSwKKwkJCQkgIEluZGV4 IHJ0aSkKK3sKKwlBc3NlcnQocnRlLT5pbmgpOworCS8qIEluaGVyaXRhbmNlIHBhcmVudCAo cGFydGl0aW9uZWQgb3Igbm90KSBvciBVTklPTiBBTEwgcGFyZW50IHN1YnF1ZXJ5LiAqLwor CUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OIHx8IHJ0ZS0+cnRla2luZCA9 PSBSVEVfU1VCUVVFUlkpOworCisJLyoKKwkgKiBVTklPTiBBTEwgY2hpbGRyZW4gYWxyZWFk eSBnb3QgUlRFcyBhbmQgQXBwZW5kUmVsSW5mb3MsIHNvIGp1c3QgYnVpbGQKKwkgKiBSZWxP cHRJbmZvcyBhbmQgcmV0dXJuLgorCSAqCisJICogSXQgbWlnaHQgYmUgYSBiaXQgb2RkIHRo YXQgdGhpcyBjb2RlIGlzIGluIHRoaXMsIGJlY2F1c2UgdGhlcmUgaXMKKwkgKiBub3RoaW5n IHRvIGV4cGFuZCByZWFsbHkuCisJICovCisJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfU1VC UVVFUlkpCisJeworCQlMaXN0Q2VsbCAgICpsOworCisJCS8qCisJCSAqIFdlIGRvbid0IG5l ZWQgdG8gdXNlIGV4cGFuZF9wbGFubmVyX2FycmF5cyBpbiB0aGlzIGNhc2UsIGJlY2F1c2UK KwkJICogbm8gbmV3IGNoaWxkIFJURXMgYXJlIGNyZWF0ZWQuICBzZXR1cF9zaW1wbGVfcmVs X2FycmF5cygpIGFuZAorCQkgKiBzZXR1cF9hcHBlbmRfcmVsX2FycmF5IHdvdWxkJ3ZlIGNv bnNpZGVyZWQgdGhlc2UgY2hpbGQgUlRFcyB3aGVuCisJCSAqIGFsbG9jYXRpbmcgc3BhY2Ug Zm9yIHZhcmlvdXMgYXJyYXlzLgorCQkgKi8KKwkJZm9yZWFjaChsLCByb290LT5hcHBlbmRf cmVsX2xpc3QpCisJCXsKKwkJCUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSBsZmlyc3QobCk7 CisJCQlJbmRleAkJY2hpbGRSVGluZGV4ID0gYXBwaW5mby0+Y2hpbGRfcmVsaWQ7CisKKwkJ CWlmIChhcHBpbmZvLT5wYXJlbnRfcmVsaWQgIT0gcnRpKQorCQkJCWNvbnRpbnVlOworCisJ CQlBc3NlcnQoY2hpbGRSVGluZGV4IDwgcm9vdC0+c2ltcGxlX3JlbF9hcnJheV9zaXplKTsK KwkJCUFzc2VydChyb290LT5zaW1wbGVfcnRlX2FycmF5W2NoaWxkUlRpbmRleF0gIT0gTlVM TCk7CisKKwkJCS8qCisJCQkgKiBXZSBzZXQgdGhlIGNvcnJlY3QgdmFsdWUgb2YgYmFzZXJl c3RyaWNpbmZvIGFuZAorCQkJICogYmFzZXJlc3RyaWN0X21pbl9zZWN1cml0eSBiZWxvdy4K KwkJCSAqLworCQkJcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtjaGlsZFJUaW5kZXhdID0KKwkJ CQlidWlsZF9hcHBlbmRfY2hpbGRfcmVsKHJvb3QsIHJlbCwgYXBwaW5mby0+Y2hpbGRfcmVs aWQpOworCQl9CisJfQorCWVsc2UKKwl7CisJCUFzc2VydChydGUtPnJ0ZWtpbmQgPT0gUlRF X1JFTEFUSU9OKTsKKwkJQXNzZXJ0KGhhc19zdWJjbGFzcyhydGUtPnJlbGlkKSk7CisKKwkJ LyoKKwkJICogVGhlIHJld3JpdGVyIHNob3VsZCBhbHJlYWR5IGhhdmUgb2J0YWluZWQgYW4g YXBwcm9wcmlhdGUgbG9jayBvbgorCQkgKiBlYWNoIHJlbGF0aW9uIG5hbWVkIGluIHRoZSBx dWVyeS4gIEhvd2V2ZXIsIGZvciBlYWNoIGNoaWxkIHJlbGF0aW9uCisJCSAqIHdlIGFkZCB0 byB0aGUgcXVlcnksIHdlIG11c3Qgb2J0YWluIGFuIGFwcHJvcHJpYXRlIGxvY2ssIGJlY2F1 c2UKKwkJICogdGhpcyB3aWxsIGJlIHRoZSBmaXJzdCB1c2Ugb2YgdGhvc2UgcmVsYXRpb25z IGluIHRoZQorCQkgKiBwYXJzZS9yZXdyaXRlL3BsYW4gcGlwZWxpbmUuICBDaGlsZCByZWxz IHNob3VsZCB1c2UgdGhlIHNhbWUKKwkJICogbG9ja21vZGUgYXMgdGhlaXIgcGFyZW50Lgor CQkgKi8KKwkJQXNzZXJ0KHJ0ZS0+cmVsbG9ja21vZGUgIT0gTm9Mb2NrKTsKKworCQlpZiAo cnRlLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCisJCQlleHBhbmRf cGFydGl0aW9uZWRfcnRlbnRyeShyb290LCBydGUsIHJ0aSwgcmVsKTsKKwkJZWxzZQorCQkJ ZXhwYW5kX2luaGVyaXRlZF9ydGVudHJ5KHJvb3QsIHJ0ZSwgcnRpLCByZWwpOworCX0KK30K KworLyoKKyAqIGV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeQorICoJCUFkZCBlbnRyaWVzIGZv ciBhbGwgdGhlIGNoaWxkIHRhYmxlcyB0byB0aGUgcXVlcnkncyByYW5nZXRhYmxlLCBhbmQK KyAqCQlidWlsZCBBcHBlbmRSZWxJbmZvIG5vZGVzIGZvciBhbGwgdGhlIGNoaWxkIHRhYmxl cyBhbmQgYWRkIHRoZW0gdG8KKyAqCQlyb290LT5hcHBlbmRfcmVsX2xpc3QuCisgKgorICog Tm90ZSB0aGF0IHRoZSBvcmlnaW5hbCBSVEUgaXMgY29uc2lkZXJlZCB0byByZXByZXNlbnQg dGhlIHdob2xlCisgKiBpbmhlcml0YW5jZSBzZXQuICBUaGUgZmlyc3Qgb2YgdGhlIGdlbmVy YXRlZCBSVEVzIGlzIGFuIFJURSBmb3IgdGhlIHNhbWUKKyAqIHRhYmxlLCBidXQgd2l0aCBp bmggPSBmYWxzZSwgdG8gcmVwcmVzZW50IHRoZSBwYXJlbnQgdGFibGUgaW4gaXRzIHJvbGUK KyAqIGFzIGEgc2ltcGxlIG1lbWJlciBvZiB0aGUgaW5oZXJpdGFuY2Ugc2V0LgorICoKKyAq IEEgY2hpbGRsZXNzIHRhYmxlIGlzIG5ldmVyIGNvbnNpZGVyZWQgdG8gYmUgYW4gaW5oZXJp dGFuY2Ugc2V0LiBGb3IKKyAqIHJlZ3VsYXIgaW5oZXJpdGFuY2UsIGEgcGFyZW50IFJURSBt dXN0IGFsd2F5cyBoYXZlIGF0IGxlYXN0IHR3byBhc3NvY2lhdGVkCisgKiBBcHBlbmRSZWxJ bmZvczogb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhcmVudCB0YWJsZSBhcyBhIHNpbXBs ZSBtZW1iZXIgb2YKKyAqIGluaGVyaXRhbmNlIHNldCBhbmQgb25lIG9yIG1vcmUgY29ycmVz cG9uZGluZyB0byB0aGUgYWN0dWFsIGNoaWxkcmVuLgorICovCitzdGF0aWMgdm9pZAorZXhw YW5kX2luaGVyaXRlZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5 ICpydGUsIEluZGV4IHJ0aSwKKwkJCQkJCSBSZWxPcHRJbmZvICpyZWwpCit7CisJT2lkCQkJ cGFyZW50T0lEOworCVBsYW5Sb3dNYXJrICpvbGRyYzsKKwlMT0NLTU9ERQlsb2NrbW9kZSA9 IHJ0ZS0+cmVsbG9ja21vZGU7CisJTGlzdAkgICAqaW5oT0lEczsKKwlMaXN0Q2VsbCAgICps OworCWludAkJCW51bV9jaGlsZHJlbjsKKwlpbnQJCQludW1fY2hpbGRyZW5fYWRkZWQgPSAw OworCisJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04pOworCUFzc2VydChs b2NrbW9kZSAhPSBOb0xvY2spOworCXBhcmVudE9JRCA9IHJ0ZS0+cmVsaWQ7CisKKwkvKiBT Y2FuIGZvciBhbGwgbWVtYmVycyBvZiBpbmhlcml0YW5jZSBzZXQsIGFjcXVpcmUgbmVlZGVk IGxvY2tzICovCisJaW5oT0lEcyA9IGZpbmRfYWxsX2luaGVyaXRvcnMocGFyZW50T0lELCBs b2NrbW9kZSwgTlVMTCk7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlcmUncyBhdCBsZWFz dCBvbmUgZGVzY2VuZGFudCwgZWxzZSB0cmVhdCBhcyBuby1jaGlsZAorCSAqIGNhc2UuICBU aGlzIGNvdWxkIGhhcHBlbiBkZXNwaXRlIGFib3ZlIGhhc19zdWJjbGFzcygpIGNoZWNrLCBp ZiB0YWJsZQorCSAqIG9uY2UgaGFkIGEgY2hpbGQgYnV0IG5vIGxvbmdlciBkb2VzLgorCSAq LworCW51bV9jaGlsZHJlbiA9IGxpc3RfbGVuZ3RoKGluaE9JRHMpOworCWlmIChudW1fY2hp bGRyZW4gPCAyKQorCXsKKwkJLyogQ2xlYXIgZmxhZyBiZWZvcmUgcmV0dXJuaW5nICovCisJ CXJ0ZS0+aW5oID0gZmFsc2U7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHBhcmVu dCByZWxhdGlvbiBpcyBzZWxlY3RlZCBGT1IgVVBEQVRFL1NIQVJFLCBwcmVwcm9jZXNzX3Jv d21hcmtzCisJICogc2hvdWxkJ3ZlIHNldCBpc1BhcmVudCA9IHRydWUuICBXZSdsbCBnZW5l cmF0ZSBhIG5ldyBQbGFuUm93TWFyayBmb3IKKwkgKiBlYWNoIGNoaWxkLgorCSAqLworCW9s ZHJjID0gZ2V0X3BsYW5fcm93bWFyayhyb290LT5yb3dNYXJrcywgcnRpKTsKKwlBc3NlcnQo b2xkcmMgPT0gTlVMTCB8fCBvbGRyYy0+aXNQYXJlbnQpOworCisJLyoKKwkgKiBNdXN0IGV4 cGFuZCBQbGFubmVySW5mbyBhcnJheXMgYnkgbnVtX2NoaWxkcmVuIGJlZm9yZSB3ZSBjYW4g YWRkCisJICogY2hpbGRyZW4uCisJICovCisJZXhwYW5kX3BsYW5uZXJfYXJyYXlzKHJvb3Qs IG51bV9jaGlsZHJlbik7CisKKwlmb3JlYWNoKGwsIGluaE9JRHMpCisJeworCQlPaWQJCQlj aGlsZE9JRCA9IGxmaXJzdF9vaWQobCk7CisJCVJlbGF0aW9uCW5ld3JlbGF0aW9uOworCQlS ZWxPcHRJbmZvICpjaGlsZHJlbDsKKworCQkvKiBBbHJlYWR5IGxvY2tlZCBhYm92ZS4gKi8K KwkJbmV3cmVsYXRpb24gPSBoZWFwX29wZW4oY2hpbGRPSUQsIE5vTG9jayk7CisKKwkJLyoK KwkJICogSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgcGFyZW50IHRhYmxlIGhhcyBjaGlsZHJl biB0aGF0IGFyZSB0ZW1wCisJCSAqIHRhYmxlcyBvZiBvdGhlciBiYWNrZW5kcy4gIFdlIGNh bm5vdCBzYWZlbHkgYWNjZXNzIHN1Y2ggdGFibGVzCisJCSAqIChiZWNhdXNlIG9mIGJ1ZmZl cmluZyBpc3N1ZXMpLCBhbmQgdGhlIGJlc3QgdGhpbmcgdG8gZG8gc2VlbXMKKwkJICogdG8g YmUgdG8gc2lsZW50bHkgaWdub3JlIHRoZW0uCisJCSAqLworCQlpZiAoUkVMQVRJT05fSVNf T1RIRVJfVEVNUChuZXdyZWxhdGlvbikpCisJCXsKKwkJCWhlYXBfY2xvc2UobmV3cmVsYXRp b24sIGxvY2ttb2RlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY2hpbGRyZWwgPSBhZGRf aW5oZXJpdGFuY2VfY2hpbGRfcmVsKHJvb3QsIHJ0ZSwgcnRpLCByZWwsIG9sZHJjLAorCQkJ CQkJCQkJCQkgbmV3cmVsYXRpb24pOworCQlBc3NlcnQoY2hpbGRyZWwgIT0gTlVMTCk7CisK KwkJLyogQ2xvc2UgY2hpbGQgcmVsYXRpb25zLCBidXQga2VlcCBsb2NrcyAqLworCQloZWFw X2Nsb3NlKG5ld3JlbGF0aW9uLCBOb0xvY2spOworCQludW1fY2hpbGRyZW5fYWRkZWQrKzsK Kwl9CisKKwkvKgorCSAqIElmIGFsbCBjaGlsZHJlbiwgaW5jbHVkaW5nIHRoZSBwYXJlbnQg KGFzIGNoaWxkIHJlbCksIHdlcmUKKwkgKiBleGNsdWRlZCwgbWFyayB0aGUgcGFyZW50IHJl bCBhcyBlbXB0eS4gIElmIGFsbCB0aGUgY2hpbGRyZW4gd2VyZSB0ZW1wCisJICogdGFibGVz LCBwcmV0ZW5kIGl0J3MgYSBub24taW5oZXJpdGFuY2Ugc2l0dWF0aW9uOyB3ZSBkb24ndCBu ZWVkIEFwcGVuZAorCSAqIG5vZGUgaW4gdGhhdCBjYXNlLiAgVGhlIGR1cGxpY2F0ZSBSVEUg d2UgYWRkZWQgZm9yIHRoZSBwYXJlbnQgdGFibGUgaXMKKwkgKiBoYXJtbGVzcywgc28gd2Ug ZG9uJ3QgYm90aGVyIHRvIGdldCByaWQgb2YgaXQ7IGRpdHRvIGZvciB0aGUgdXNlbGVzcwor CSAqIFBsYW5Sb3dNYXJrIG5vZGUuCisJICovCisJaWYgKG51bV9jaGlsZHJlbl9hZGRlZCA9 PSAwKQorCQltYXJrX2R1bW15X3JlbChyZWwpOworCWVsc2UgaWYgKG51bV9jaGlsZHJlbl9h ZGRlZCA9PSAxKQorCQlydGUtPmluaCA9IGZhbHNlOworCisJLyoKKwkgKiBBZGQganVuayBj b2x1bW5zIG5lZWRlZCBieSB0aGUgcm93IG1hcmsgaWYgYW55IGFuZCBhbHNvIGFkZCB0aGUK KwkgKiByZWxldmFudCBleHByZXNzaW9ucyB0byB0aGUgcm9vdCBwYXJlbnQncyByZWx0YXJn ZXQuCisJICovCisJaWYgKG9sZHJjKQorCXsKKwkJTGlzdCAgICp0bGlzdCA9IGFkZF9yb3dt YXJrX2p1bmtfY29sdW1ucyhyb290LCBvbGRyYyk7CisKKwkJYnVpbGRfYmFzZV9yZWxfdGxp c3RzKHJvb3QsIHRsaXN0KTsKKwl9Cit9CisKKy8qCisgKiBleHBhbmRfcGFydGl0aW9uZWRf cnRlbnRyeQorICoJCVBydW5lcyB1bm5lY2Vzc2FyeSBwYXJ0aXRpb25zIG9mIGEgcGFydGl0 aW9uZWQgdGFibGUgYW5kIGFkZHMKKyAqCQlyZW1haW5pbmcgb25lcyB0byB0aGUgUXVlcnkg YW5kIHRoZSBQbGFubmVySW5mbworICoKKyAqIFBhcnRpdGlvbnMgYXJlIGFkZGVkIHRvIHRo ZSBxdWVyeSBpbiBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBmb3VuZCBpbgorICogdGhlIHBh cmVudCdzIFBhcnRpdGlvbkRlc2MuCisgKgorICogTm90ZTogZXZlbiB0aG91Z2ggb25seSB0 aGUgdW5wcnVuZWQgcGFydGl0aW9ucyB3aWxsIGJlIGFkZGVkIHRvIHRoZQorICogcmVzdWx0 aW5nIHBsYW4sIHRoaXMgc3RpbGwgbG9ja3MgKmFsbCogcGFydGl0aW9ucyB2aWEgZmluZF9h bGxfaW5oZXJpdG9ycworICogaW4gb3JkZXIgdG8gYXZvaWQgcGFydGl0aW9ucyBiZWluZyBs b2NrZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiBvdGhlcgorICogcGxhY2VzIGluIHRo ZSBiYWNrZW5kIHRoYXQgbWF5IGxvY2sgcGFydGl0aW9ucy4KKyAqLworc3RhdGljIHZvaWQK K2V4cGFuZF9wYXJ0aXRpb25lZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRi bEVudHJ5ICpwYXJlbnRydGUsCisJCQkJCQkgICBJbmRleCBwYXJlbnRSVGluZGV4LCBSZWxP cHRJbmZvICpwYXJlbnRyZWwpCit7CisJTE9DS01PREUJbG9ja21vZGUgPSBwYXJlbnRydGUt PnJlbGxvY2ttb2RlOworCVBsYW5Sb3dNYXJrICpyb290cmMgPSBOVUxMOworCWludAkJCWk7 CisJQml0bWFwc2V0ICAqcGFydGluZGV4ZXM7CisJSW5kZXgJCXJvb3RQYXJlbnRSVGluZGV4 ID0gcGFyZW50cmVsLT5pbmhfcm9vdF9wYXJlbnQgPiAwID8KKwkJCQkJCQkJCXBhcmVudHJl bC0+aW5oX3Jvb3RfcGFyZW50IDoKKwkJCQkJCQkJCXBhcmVudFJUaW5kZXg7CisKKwkvKiBJ ZiByb290IHBhcnRpdGlvbmVkIHRhYmxlLCBsb2NrICphbGwqIHBhcnRpdGlvbnMgaW4gdGhl IHRyZWUuICovCisJaWYgKHBhcmVudFJUaW5kZXggPT0gcm9vdFBhcmVudFJUaW5kZXgpCisJ CSh2b2lkKSBmaW5kX2FsbF9pbmhlcml0b3JzKHBhcmVudHJ0ZS0+cmVsaWQsIGxvY2ttb2Rl LCBOVUxMKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBwYXJ0aXRpb25lZF9jaGlsZF9yZWxz IHRvIGNvbnRhaW4gdGhpcyBSVCBpbmRleC4KKwkgKgorCSAqIE5vdGUgdGhhdCBkdXJpbmcg dGhlIHNldF9hcHBlbmRfcmVsX3BhdGhsaXN0KCkgcGhhc2UsIHZhbHVlcyBvZiB0aGUKKwkg KiBpbmRleGVzIG9mIHBhcnRpdGlvbmVkIHJlbGF0aW9ucyB0aGF0IGFwcGVhciBkb3duIGlu IHRoZSB0cmVlIHdpbGwgYmUKKwkgKiBidWJibGVkIHVwIGludG8gcm9vdCBwYXJlbnQncyBs aXN0IHNvIHRoYXQgd2hlbiB3ZSd2ZSBjcmVhdGVkIFBhdGhzIGZvcgorCSAqIGFsbCB0aGUg Y2hpbGRyZW4sIHRoZSByb290IHRhYmxlJ3MgbGlzdCB3aWxsIGNvbnRhaW4gYWxsIHN1Y2gg aW5kZXhlcy4KKwkgKi8KKwlwYXJlbnRyZWwtPnBhcnRpdGlvbmVkX2NoaWxkX3JlbHMgPSBs aXN0X21ha2UxX2ludChwYXJlbnRSVGluZGV4KTsKKworCS8qIFBlcmZvcm0gcHJ1bmluZy4g Ki8KKwlwYXJ0aW5kZXhlcyA9IHBydW5lX2FwcGVuZF9yZWxfcGFydGl0aW9ucyhwYXJlbnRy ZWwpOworCisJLyogTXVzdCBleHBhbmQgUGxhbm5lckluZm8gYXJyYXlzIGJlZm9yZSB3ZSBj YW4gYWRkIGNoaWxkcmVuLiAqLworCWV4cGFuZF9wbGFubmVyX2FycmF5cyhyb290LCBibXNf bnVtX21lbWJlcnMocGFydGluZGV4ZXMpKTsKKworCS8qCisJICogRm9yIHBhcnRpdGlvbmVk IHRhYmxlcywgd2UgYWxzbyBzdG9yZSB0aGUgcGFydGl0aW9uIFJlbE9wdEluZm8KKwkgKiBw b2ludGVycyBpbiB0aGUgcGFyZW50J3MgUmVsT3B0SW5mby4KKwkgKi8KKwlwYXJlbnRyZWwt PnBhcnRfcmVscyA9IChSZWxPcHRJbmZvICoqKSBwYWxsb2MwKHNpemVvZihSZWxPcHRJbmZv ICopICoKKwkJCQkJCQkJCQkJCSAgIHBhcmVudHJlbC0+bnBhcnRzKTsKKworCXJvb3RyYyA9 IGdldF9wbGFuX3Jvd21hcmsocm9vdC0+cm93TWFya3MsIHJvb3RQYXJlbnRSVGluZGV4KTsK KwlBc3NlcnQocm9vdHJjID09IE5VTEwgfHwgcm9vdHJjLT5pc1BhcmVudCk7CisJaSA9IC0x OworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwYXJ0aW5kZXhlcywgaSkpID49IDAp CisJeworCQlPaWQJCWNoaWxkT0lEID0gcGFyZW50cmVsLT5wYXJ0X29pZHNbaV07CisJCVJl bGF0aW9uCW5ld3JlbGF0aW9uOworCQlSZWxPcHRJbmZvICpjaGlsZHJlbDsKKworCQkvKiBB bHJlYWR5IGxvY2tlZCBhYm92ZS4gKi8KKwkJbmV3cmVsYXRpb24gPSBoZWFwX29wZW4oY2hp bGRPSUQsIE5vTG9jayk7CisJCUFzc2VydCghUkVMQVRJT05fSVNfT1RIRVJfVEVNUChuZXdy ZWxhdGlvbikpOworCisJCS8qCisJCSAqIEEgcGFydGl0aW9uZWQgY2hpbGQgdGFibGUgd2l0 aCAwIGNoaWxkcmVuIGlzIGEgZHVtbXkgcmVsLCBzbyBkb24ndAorCQkgKiBib3RoZXIgY3Jl YXRpbmcgcGxhbm5lciBvYmplY3RzIGZvciBpdC4KKwkJICovCisJCWlmIChuZXdyZWxhdGlv bi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUgJiYKKwkJ CVJlbGF0aW9uR2V0UGFydGl0aW9uRGVzYyhuZXdyZWxhdGlvbiktPm5wYXJ0cyA9PSAwKQor CQl7CisJCQloZWFwX2Nsb3NlKG5ld3JlbGF0aW9uLCBOb0xvY2spOworCQkJY29udGludWU7 CisJCX0KKworCQljaGlsZHJlbCA9IGFkZF9pbmhlcml0YW5jZV9jaGlsZF9yZWwocm9vdCwg cGFyZW50cnRlLCBwYXJlbnRSVGluZGV4LAorCQkJCQkJCQkJCQkgcGFyZW50cmVsLCByb290 cmMsIG5ld3JlbGF0aW9uKTsKKwkJQXNzZXJ0KGNoaWxkcmVsICE9IE5VTEwpOworCQlwYXJl bnRyZWwtPnBhcnRfcmVsc1tpXSA9IGNoaWxkcmVsOworCisJCS8qIENsb3NlIGNoaWxkIHJl bGF0aW9ucywgYnV0IGtlZXAgbG9ja3MgKi8KKwkJaGVhcF9jbG9zZShuZXdyZWxhdGlvbiwg Tm9Mb2NrKTsKKwl9CisKKwkvKgorCSAqIEFkZCBqdW5rIGNvbHVtbnMgbmVlZGVkIGJ5IHRo ZSByb3cgbWFyayBpZiBhbnkgYW5kIGFsc28gYWRkIHRoZQorCSAqIHJlbGV2YW50IGV4cHJl c3Npb25zIHRvIHRoZSByb290IHBhcmVudCdzIHJlbHRhcmdldC4KKwkgKi8KKwlpZiAocm9v dHJjKQorCXsKKwkJTGlzdCAgICp0bGlzdCA9IGFkZF9yb3dtYXJrX2p1bmtfY29sdW1ucyhy b290LCByb290cmMpOworCisJCWJ1aWxkX2Jhc2VfcmVsX3RsaXN0cyhyb290LCB0bGlzdCk7 CisJfQorfQorCisvKgorICogYWRkX2luaGVyaXRhbmNlX2NoaWxkX3JlbAorICoJCUJ1aWxk IGEgUmFuZ2VUYmxFbnRyeSwgYW4gQXBwZW5kUmVsSW5mbywgYSBQbGFuUm93TWFyaywgYW5k IGZpbmFsbHkKKyAqCQlhIFJlbE9wdEluZm8gZm9yIGFuIGluaGVyaXRhbmNlIGNoaWxkIHJl bGF0aW9uLgorICoKKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIFJlbE9wdEluZm8gdGhh dCdzIGFkZGVkLgorICoKKyAqIFBsYW5Sb3dNYXJrcyBzdGlsbCBjYXJyeSB0aGUgdG9wLXBh cmVudCdzIFJUSSwgYW5kIHRoZSB0b3AtcGFyZW50J3MKKyAqIGFsbE1hcmtUeXBlcyBmaWVs ZCBzdGlsbCBhY2N1bXVsYXRlcyB2YWx1ZXMgZnJvbSBhbGwgZGVzY2VuZGVudHMuCisgKgor ICogInBhcmVudHJ0ZSIgYW5kICJwYXJlbnRSVGluZGV4IiBhcmUgaW1tZWRpYXRlIHBhcmVu dCdzIFJURSBhbmQKKyAqIFJUSS4gInRvcF9wYXJlbnRyYyIgaXMgdG9wIHBhcmVudCdzIFBs YW5Sb3dNYXJrLgorICovCitzdGF0aWMgUmVsT3B0SW5mbyAqCithZGRfaW5oZXJpdGFuY2Vf Y2hpbGRfcmVsKFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUs CisJCQkJCQkgIEluZGV4IHBhcmVudFJUaW5kZXgsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwK KwkJCQkJCSAgUGxhblJvd01hcmsgKnRvcF9wYXJlbnRyYywgUmVsYXRpb24gY2hpbGRyZWwp Cit7CisJUXVlcnkJICAgKnBhcnNlID0gcm9vdC0+cGFyc2U7CisJT2lkCQkJY2hpbGRPSUQg PSBSZWxhdGlvbkdldFJlbGlkKGNoaWxkcmVsKTsKKwlSYW5nZVRibEVudHJ5ICpjaGlsZHJ0 ZTsKKwlJbmRleAkJY2hpbGRSVGluZGV4OworCUFwcGVuZFJlbEluZm8gKmFwcGluZm87CisJ UmVsT3B0SW5mbyAqY2hpbGRyZWxvcHQ7CisKKwkvKgorCSAqIEJ1aWxkIGFuIFJURSBmb3Ig dGhlIGNoaWxkLCBhbmQgYXR0YWNoIHRvIHF1ZXJ5J3MgcmFuZ2V0YWJsZSBsaXN0LiBXZQor CSAqIGNvcHkgbW9zdCBmaWVsZHMgb2YgdGhlIHBhcmVudCdzIFJURSwgYnV0IHJlcGxhY2Ug cmVsYXRpb24gT0lEIGFuZAorCSAqIHJlbGtpbmQsIGFuZCBzZXQgaW5oIGFwcHJvcHJpYXRl bHkuICBBbHNvLCBzZXQgcmVxdWlyZWRQZXJtcyB0byB6ZXJvCisJICogc2luY2UgYWxsIHJl cXVpcmVkIHBlcm1pc3Npb25zIGNoZWNrcyBhcmUgZG9uZSBvbiB0aGUgb3JpZ2luYWwgUlRF LgorCSAqIExpa2V3aXNlLCBzZXQgdGhlIGNoaWxkJ3Mgc2VjdXJpdHlRdWFscyB0byBlbXB0 eSwgYmVjYXVzZSB3ZSBvbmx5IHdhbnQKKwkgKiB0byBhcHBseSB0aGUgcGFyZW50J3MgUkxT IGNvbmRpdGlvbnMgcmVnYXJkbGVzcyBvZiB3aGF0IFJMUyBwcm9wZXJ0aWVzCisJICogaW5k aXZpZHVhbCBjaGlsZHJlbiBtYXkgaGF2ZS4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGNo b2ljZSB0byBtYWtlCisJICogaW5oZXJpdGVkIFJMUyB3b3JrIGxpa2UgcmVndWxhciBwZXJt aXNzaW9ucyBjaGVja3MuKSBUaGUgcGFyZW50CisJICogc2VjdXJpdHlRdWFscyB3aWxsIGJl IHByb3BhZ2F0ZWQgdG8gY2hpbGRyZW4gYWxvbmcgd2l0aCBvdGhlciBiYXNlCisJICogcmVz dHJpY3Rpb24gY2xhdXNlcywgc28gd2UgZG9uJ3QgbmVlZCB0byBkbyBpdCBoZXJlLgorCSAq LworCWNoaWxkcnRlID0gY29weU9iamVjdChwYXJlbnRydGUpOworCWNoaWxkcnRlLT5yZWxp ZCA9IGNoaWxkT0lEOworCWNoaWxkcnRlLT5yZWxraW5kID0gY2hpbGRyZWwtPnJkX3JlbC0+ cmVsa2luZDsKKwkvKgorCSAqIEEgcGFydGl0aW9uZWQgY2hpbGQgd2lsbCBuZWVkIHRvIGJl IGV4cGFuZGVkIGFzIGFuIGFwcGVuZCBwYXJlbnQKKwkgKiBpdHNlbGYsIHNvIHNldCBpdHMg aW5oIHRvIHRydWUuCisJICovCisJY2hpbGRydGUtPmluaCA9IChjaGlsZHJ0ZS0+cmVsa2lu ZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKTsKKwljaGlsZHJ0ZS0+cmVxdWlyZWRQ ZXJtcyA9IDA7CisJY2hpbGRydGUtPnNlY3VyaXR5UXVhbHMgPSBOSUw7CisJcGFyc2UtPnJ0 YWJsZSA9IGxhcHBlbmQocGFyc2UtPnJ0YWJsZSwgY2hpbGRydGUpOworCWNoaWxkUlRpbmRl eCA9IGxpc3RfbGVuZ3RoKHBhcnNlLT5ydGFibGUpOworCisJLyogQ3JlYXRlIGFuIEFwcGVu ZFJlbEluZm8gYW5kIGFkZCBpdCB0byBwbGFubmVyJ3MgZ2xvYmFsIGxpc3QuICovCisJYXBw aW5mbyA9IG1ha2VfYXBwZW5kX3JlbF9pbmZvKHBhcmVudHJlbCwgcGFyZW50cnRlLAorCQkJ CQkJCQkgICBjaGlsZHJlbC0+cmRfYXR0LAorCQkJCQkJCQkgICBjaGlsZE9JRCwKKwkJCQkJ CQkJICAgY2hpbGRyZWwtPnJkX3JlbC0+cmVsdHlwZSwKKwkJCQkJCQkJICAgY2hpbGRSVGlu ZGV4KTsKKwlyb290LT5hcHBlbmRfcmVsX2xpc3QgPSBsYXBwZW5kKHJvb3QtPmFwcGVuZF9y ZWxfbGlzdCwgYXBwaW5mbyk7CisKKwkvKgorCSAqIFRyYW5zbGF0ZSB0aGUgY29sdW1uIHBl cm1pc3Npb25zIGJpdG1hcHMgdG8gdGhlIGNoaWxkJ3MgYXR0bnVtcyAod2UKKwkgKiBoYXZl IHRvIGJ1aWxkIHRoZSB0cmFuc2xhdGVkX3ZhcnMgbGlzdCBiZWZvcmUgd2UgY2FuIGRvIHRo aXMpLiBCdXQKKwkgKiBpZiB0aGlzIGlzIHRoZSBwYXJlbnQgdGFibGUsIGxlYXZlIGNvcHlP YmplY3QncyByZXN1bHQgYWxvbmUuCisJICoKKwkgKiBOb3RlOiB3ZSBuZWVkIHRvIGRvIHRo aXMgZXZlbiB0aG91Z2ggdGhlIGV4ZWN1dG9yIHdvbid0IHJ1biBhbnkKKwkgKiBwZXJtaXNz aW9ucyBjaGVja3Mgb24gdGhlIGNoaWxkIFJURS4gIFRoZSBpbnNlcnRlZENvbHMvdXBkYXRl ZENvbHMKKwkgKiBiaXRtYXBzIG1heSBiZSBleGFtaW5lZCBmb3IgdHJpZ2dlci1maXJpbmcg cHVycG9zZXMuCisJICovCisJaWYgKGNoaWxkcnRlLT5yZWxpZCAhPSBwYXJlbnRydGUtPnJl bGlkKQorCXsKKwkJY2hpbGRydGUtPnNlbGVjdGVkQ29scyA9IHRyYW5zbGF0ZV9jb2xfcHJp dnMocGFyZW50cnRlLT5zZWxlY3RlZENvbHMsCisJCQkJCQkJCQkJCQkJIGFwcGluZm8tPnRy YW5zbGF0ZWRfdmFycyk7CisJCWNoaWxkcnRlLT5pbnNlcnRlZENvbHMgPSB0cmFuc2xhdGVf Y29sX3ByaXZzKHBhcmVudHJ0ZS0+aW5zZXJ0ZWRDb2xzLAorCQkJCQkJCQkJCQkJCSBhcHBp bmZvLT50cmFuc2xhdGVkX3ZhcnMpOworCQljaGlsZHJ0ZS0+dXBkYXRlZENvbHMgPSB0cmFu c2xhdGVfY29sX3ByaXZzKHBhcmVudHJ0ZS0+dXBkYXRlZENvbHMsCisJCQkJCQkJCQkJCQkJ YXBwaW5mby0+dHJhbnNsYXRlZF92YXJzKTsKKwl9CisKKwkvKgorCSAqIEJ1aWxkIGEgUGxh blJvd01hcmsgaWYgcGFyZW50IGlzIG1hcmtlZCBGT1IgVVBEQVRFL1NIQVJFLgorCSAqLwor CWlmICh0b3BfcGFyZW50cmMpCisJeworCQlQbGFuUm93TWFyayAqY2hpbGRyYyA9IG1ha2VO b2RlKFBsYW5Sb3dNYXJrKTsKKworCQljaGlsZHJjLT5ydGkgPSBjaGlsZFJUaW5kZXg7CisJ CWNoaWxkcmMtPnBydGkgPSB0b3BfcGFyZW50cmMtPnJ0aTsKKwkJY2hpbGRyYy0+cm93bWFy a0lkID0gdG9wX3BhcmVudHJjLT5yb3dtYXJrSWQ7CisJCS8qIFJlc2VsZWN0IHJvd21hcmsg dHlwZSwgYmVjYXVzZSByZWxraW5kIG1pZ2h0IG5vdCBtYXRjaCBwYXJlbnQgKi8KKwkJY2hp bGRyYy0+bWFya1R5cGUgPSBzZWxlY3Rfcm93bWFya190eXBlKGNoaWxkcnRlLAorCQkJCQkJ CQkJCQkJdG9wX3BhcmVudHJjLT5zdHJlbmd0aCk7CisJCWNoaWxkcmMtPmFsbE1hcmtUeXBl cyA9ICgxIDw8IGNoaWxkcmMtPm1hcmtUeXBlKTsKKwkJY2hpbGRyYy0+c3RyZW5ndGggPSB0 b3BfcGFyZW50cmMtPnN0cmVuZ3RoOworCQljaGlsZHJjLT53YWl0UG9saWN5ID0gdG9wX3Bh cmVudHJjLT53YWl0UG9saWN5OworCisJCS8qCisJCSAqIFdlIG1hcmsgUm93TWFya3MgZm9y IHBhcnRpdGlvbmVkIGNoaWxkIHRhYmxlcyBhcyBwYXJlbnQgUm93TWFya3Mgc28KKwkJICog dGhhdCB0aGUgZXhlY3V0b3IgaWdub3JlcyB0aGVtIChleGNlcHQgdGhlaXIgZXhpc3RlbmNl IG1lYW5zIHRoYXQKKwkJICogdGhlIGNoaWxkIHRhYmxlcyBiZSBsb2NrZWQgdXNpbmcgYXBw cm9wcmlhdGUgbW9kZSkuCisJCSAqLworCQljaGlsZHJjLT5pc1BhcmVudCA9IChjaGlsZHJ0 ZS0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKTsKKworCQkvKiBJbmNs dWRlIGNoaWxkJ3Mgcm93bWFyayB0eXBlIGluIHRvcCBwYXJlbnQncyBhbGxNYXJrVHlwZXMg Ki8KKwkJdG9wX3BhcmVudHJjLT5hbGxNYXJrVHlwZXMgfD0gY2hpbGRyYy0+YWxsTWFya1R5 cGVzOworCisJCXJvb3QtPnJvd01hcmtzID0gbGFwcGVuZChyb290LT5yb3dNYXJrcywgY2hp bGRyYyk7CisJfQorCisJLyoKKwkgKiBBZGQgdGhlIFJlbE9wdEluZm8uICBFdmVuIHRob3Vn aCB3ZSBtYXkgbm90IHJlYWxseSBzY2FuIHRoaXMgcmVsYXRpb24KKwkgKiBmb3IgcmVhc29u cyBzdWNoIGFzIGNvbnRyYWRpY3RvcnkgcXVhbHMsIHdlIHN0aWxsIG5lZWQgbmVlZCB0byBj cmVhdGUKKwkgKiBvbmUsIGJlY2F1c2UgZm9yIGV2ZXJ5IFJURSBpbiB0aGUgcXVlcnkncyBy YW5nZSB0YWJsZSwgdGhlcmUgbXVzdCBiZSBhbgorCSAqIGFjY29tcGFueWluZyBSZWxPcHRJ bmZvLgorCSAqLworCisJLyogRmlyc3QsIHN0b3JlIHRoZSBSVEUgYW5kIGFwcGluZm9zIGlu dG8gcGxhbm5lciBhcnJheXMuICovCisJQXNzZXJ0KHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlb Y2hpbGRSVGluZGV4XSA9PSBOVUxMKTsKKwlyb290LT5zaW1wbGVfcnRlX2FycmF5W2NoaWxk UlRpbmRleF0gPSBjaGlsZHJ0ZTsKKwlBc3NlcnQocm9vdC0+YXBwZW5kX3JlbF9hcnJheVtj aGlsZFJUaW5kZXhdID09IE5VTEwpOworCXJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbY2hpbGRS VGluZGV4XSA9IGFwcGluZm87CisKKwljaGlsZHJlbG9wdCA9IGJ1aWxkX2FwcGVuZF9jaGls ZF9yZWwocm9vdCwgcGFyZW50cmVsLCBjaGlsZFJUaW5kZXgpOworCUFzc2VydChjaGlsZHJl bG9wdCAhPSBOVUxMKTsKKworCXJldHVybiBjaGlsZHJlbG9wdDsKK30KKworLyoKKyAqCWJ1 aWxkX2FwcGVuZF9jaGlsZF9yZWwKKyAqCQlCdWlsZCBhIFJlbE9wdEluZm8gZm9yIGNoaWxk IHJlbGF0aW9uIG9mIGFuIGFwcGVuZCByZWwKKyAqCisgKiBBZnRlciBjcmVhdGluZyB0aGUg UmVsT3B0SW5mbyBmb3IgdGhlIGdpdmVuIGNoaWxkIFJUIGluZGV4LCBpdCBnb2VzIG9uIHRv CisgKiBpbml0aWFsaXplIHNvbWUgb2YgaXRzIGZpZWxkcyBiYXNlIG9uIHRoZSBwYXJlbnQg UmVsT3B0SW5mby4KKyAqCisgKiBJZiB0aGUgcXVhbHMgaW4gYmFzZXJlc3RyaWN0aW5mbyB0 dXJucyBvdXQgdG8gYmUgc2VsZi1jb250cmFkaWN0b3J5LCB0aGUKKyAqIFJlbE9wdEluZm8g aXMgbWFya2VkIGR1bW15IGJlZm9yZSByZXR1cm5pbmcuCisgKi8KK3N0YXRpYyBSZWxPcHRJ bmZvICoKK2J1aWxkX2FwcGVuZF9jaGlsZF9yZWwoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJ CSAgIFJlbE9wdEluZm8gKnBhcmVudCwKKwkJCQkJICAgSW5kZXggY2hpbGRSVGluZGV4KQor eworCVJlbE9wdEluZm8gKmNoaWxkcmVsOworCVJhbmdlVGJsRW50cnkgKmNoaWxkUlRFID0g cm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtjaGlsZFJUaW5kZXhdOworCUFwcGVuZFJlbEluZm8g KmFwcGluZm8gPSByb290LT5hcHBlbmRfcmVsX2FycmF5W2NoaWxkUlRpbmRleF07CisJTGlz dAkgICAqY2hpbGRxdWFsczsKKwlMaXN0Q2VsbCAgICpsYzsKKwlib29sCQloYXZlX2NvbnN0 X2ZhbHNlX2NxOworCUluZGV4CQljcV9taW5fc2VjdXJpdHk7CisKKwkvKiBCdWlsZCB0aGUg UmVsT3B0SW5mby4gKi8KKwljaGlsZHJlbCA9IGJ1aWxkX3NpbXBsZV9yZWwocm9vdCwgY2hp bGRSVGluZGV4LCBwYXJlbnQpOworCisJLyoKKwkgKiBQcm9wYWdhdGUgbGF0ZXJhbF9yZWxp ZHMgYW5kIGxhdGVyYWxfcmVmZXJlbmNlcnMgZnJvbSBhcHBlbmRyZWwKKwkgKiBwYXJlbnQg cmVscyB0byB0aGVpciBjaGlsZCByZWxzLiAgV2UgaW50ZW50aW9uYWxseSBnaXZlIGVhY2gg Y2hpbGQgcmVsCisJICogdGhlIHNhbWUgbWluaW11bSBwYXJhbWV0ZXJpemF0aW9uLCBldmVu IHRob3VnaCBpdCdzIHF1aXRlIHBvc3NpYmxlIHRoYXQKKwkgKiBzb21lIGRvbid0IHJlZmVy ZW5jZSBhbGwgdGhlIGxhdGVyYWwgcmVscy4gIFRoaXMgaXMgYmVjYXVzZSBhbnkgYXBwZW5k CisJICogcGF0aCBmb3IgdGhlIHBhcmVudCB3aWxsIGhhdmUgdG8gaGF2ZSB0aGUgc2FtZSBw YXJhbWV0ZXJpemF0aW9uIGZvcgorCSAqIGV2ZXJ5IGNoaWxkIGFueXdheSwgYW5kIHRoZXJl J3Mgbm8gdmFsdWUgaW4gZm9yY2luZyBleHRyYQorCSAqIHJlcGFyYW1ldGVyaXplX3BhdGgo KSBjYWxscy4gIFNpbWlsYXJseSwgYSBsYXRlcmFsIHJlZmVyZW5jZSB0byB0aGUKKwkgKiBw YXJlbnQgcHJldmVudHMgdXNlIG9mIG90aGVyd2lzZS1tb3ZhYmxlIGpvaW4gcmVscyBmb3Ig ZWFjaCBjaGlsZC4KKwkgKi8KKwljaGlsZHJlbC0+ZGlyZWN0X2xhdGVyYWxfcmVsaWRzID0g cGFyZW50LT5kaXJlY3RfbGF0ZXJhbF9yZWxpZHM7CisJY2hpbGRyZWwtPmxhdGVyYWxfcmVs aWRzID0gcGFyZW50LT5sYXRlcmFsX3JlbGlkczsKKwljaGlsZHJlbC0+bGF0ZXJhbF9yZWZl cmVuY2VycyA9IHBhcmVudC0+bGF0ZXJhbF9yZWZlcmVuY2VyczsKKworCS8qCisJICogV2Ug aGF2ZSB0byBjb3B5IHRoZSBwYXJlbnQncyBxdWFscyB0byB0aGUgY2hpbGQsIHdpdGggYXBw cm9wcmlhdGUKKwkgKiBzdWJzdGl0dXRpb24gb2YgdmFyaWFibGVzLiAgSG93ZXZlciwgb25s eSB0aGUgYmFzZXJlc3RyaWN0aW5mbworCSAqIHF1YWxzIGFyZSBuZWVkZWQgYmVmb3JlIHdl IGNhbiBjaGVjayBmb3IgY29uc3RyYWludCBleGNsdXNpb247IHNvCisJICogZG8gdGhhdCBm aXJzdCBhbmQgdGhlbiBjaGVjayB0byBzZWUgaWYgd2UgY2FuIGRpc3JlZ2FyZCB0aGlzIGNo aWxkLgorCSAqCisJICogVGhlIGNoaWxkIHJlbCdzIHRhcmdldGxpc3QgbWlnaHQgY29udGFp biBub24tVmFyIGV4cHJlc3Npb25zLCB3aGljaAorCSAqIG1lYW5zIHRoYXQgc3Vic3RpdHV0 aW9uIGludG8gdGhlIHF1YWxzIGNvdWxkIHByb2R1Y2Ugb3Bwb3J0dW5pdGllcworCSAqIGZv ciBjb25zdC1zaW1wbGlmaWNhdGlvbiwgYW5kIHBlcmhhcHMgZXZlbiBwc2V1ZG9jb25zdGFu dCBxdWFscy4KKwkgKiBUaGVyZWZvcmUsIHRyYW5zZm9ybSBlYWNoIFJlc3RyaWN0SW5mbyBz ZXBhcmF0ZWx5IHRvIHNlZSBpZiBpdAorCSAqIHJlZHVjZXMgdG8gYSBjb25zdGFudCBvciBw c2V1ZG9jb25zdGFudC4gIChXZSBtdXN0IHByb2Nlc3MgdGhlbQorCSAqIHNlcGFyYXRlbHkg dG8ga2VlcCB0cmFjayBvZiB0aGUgc2VjdXJpdHkgbGV2ZWwgb2YgZWFjaCBxdWFsLikKKwkg Ki8KKwljaGlsZHF1YWxzID0gZmFsc2U7CisJY3FfbWluX3NlY3VyaXR5ID0gVUlOVF9NQVg7 CisJaGF2ZV9jb25zdF9mYWxzZV9jcSA9IGZhbHNlOworCWZvcmVhY2gobGMsIHBhcmVudC0+ YmFzZXJlc3RyaWN0aW5mbykKKwl7CisJCVJlc3RyaWN0SW5mbyAqcmluZm8gPSAoUmVzdHJp Y3RJbmZvICopIGxmaXJzdChsYyk7CisJCU5vZGUJICAgKmNoaWxkcXVhbCA9IChOb2RlICop IHJpbmZvLT5jbGF1c2U7CisJCUxpc3RDZWxsICAgKmxjMjsKKworCQlBc3NlcnQoSXNBKHJp bmZvLCBSZXN0cmljdEluZm8pKTsKKwkJY2hpbGRxdWFsID0gYWRqdXN0X2FwcGVuZHJlbF9h dHRycyhyb290LCBjaGlsZHF1YWwsCisJCQkJCQkJCQkJICAgMSwgJmFwcGluZm8pOworCQlj aGlsZHF1YWwgPSBldmFsX2NvbnN0X2V4cHJlc3Npb25zKHJvb3QsIGNoaWxkcXVhbCk7CisJ CS8qIGNoZWNrIGZvciBmbGF0LW91dCBjb25zdGFudCAqLworCQlpZiAoY2hpbGRxdWFsICYm IElzQShjaGlsZHF1YWwsIENvbnN0KSkKKwkJeworCQkJaWYgKCgoQ29uc3QgKikgY2hpbGRx dWFsKS0+Y29uc3Rpc251bGwgfHwKKwkJCQkhRGF0dW1HZXRCb29sKCgoQ29uc3QgKikgY2hp bGRxdWFsKS0+Y29uc3R2YWx1ZSkpCisJCQl7CisJCQkJLyogUmVzdHJpY3Rpb24gcmVkdWNl cyB0byBjb25zdGFudCBGQUxTRSBvciBOVUxMICovCisJCQkJaGF2ZV9jb25zdF9mYWxzZV9j cSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBSZXN0cmljdGlvbiByZWR1Y2Vz IHRvIGNvbnN0YW50IFRSVUUsIHNvIGRyb3AgaXQgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJ CS8qIG1pZ2h0IGhhdmUgZ290dGVuIGFuIEFORCBjbGF1c2UsIGlmIHNvIGZsYXR0ZW4gaXQg Ki8KKwkJZm9yZWFjaChsYzIsIG1ha2VfYW5kc19pbXBsaWNpdCgoRXhwciAqKSBjaGlsZHF1 YWwpKQorCQl7CisJCQlOb2RlCSAgICpvbmVjcSA9IChOb2RlICopIGxmaXJzdChsYzIpOwor CQkJYm9vbAkJcHNldWRvY29uc3RhbnQ7CisKKwkJCS8qIGNoZWNrIGZvciBwc2V1ZG9jb25z dGFudCAobm8gVmFycyBvciB2b2xhdGlsZSBmdW5jdGlvbnMpICovCisJCQlwc2V1ZG9jb25z dGFudCA9CisJCQkJCSFjb250YWluX3ZhcnNfb2ZfbGV2ZWwob25lY3EsIDApICYmCisJCQkJ CSFjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucyhvbmVjcSk7CisJCQlpZiAocHNldWRvY29u c3RhbnQpCisJCQl7CisJCQkJLyogdGVsbCBjcmVhdGVwbGFuLmMgdG8gY2hlY2sgZm9yIGdh dGluZyBxdWFscyAqLworCQkJCXJvb3QtPmhhc1BzZXVkb0NvbnN0YW50UXVhbHMgPSB0cnVl OworCQkJfQorCQkJLyogcmVjb25zdGl0dXRlIFJlc3RyaWN0SW5mbyB3aXRoIGFwcHJvcHJp YXRlIHByb3BlcnRpZXMgKi8KKwkJCWNoaWxkcXVhbHMgPSBsYXBwZW5kKGNoaWxkcXVhbHMs CisJCQkJCQkJCSBtYWtlX3Jlc3RyaWN0aW5mbygoRXhwciAqKSBvbmVjcSwKKwkJCQkJCQkJ CQkJCSAgIHJpbmZvLT5pc19wdXNoZWRfZG93biwKKwkJCQkJCQkJCQkJCSAgIHJpbmZvLT5v dXRlcmpvaW5fZGVsYXllZCwKKwkJCQkJCQkJCQkJCSAgIHBzZXVkb2NvbnN0YW50LAorCQkJ CQkJCQkJCQkJICAgcmluZm8tPnNlY3VyaXR5X2xldmVsLAorCQkJCQkJCQkJCQkJICAgTlVM TCwgTlVMTCwgTlVMTCkpOworCQkJY3FfbWluX3NlY3VyaXR5ID0gTWluKGNxX21pbl9zZWN1 cml0eSwgcmluZm8tPnNlY3VyaXR5X2xldmVsKTsKKwkJfQorCX0KKworCS8qCisJICogSW4g YWRkaXRpb24gdG8gdGhlIHF1YWxzIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdlIG1p Z2h0CisJICogaGF2ZSBzZWN1cml0eVF1YWxzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhcnRp Y3VsYXIgY2hpbGQgbm9kZS4KKwkgKiAoQ3VycmVudGx5IHRoaXMgY2FuIG9ubHkgaGFwcGVu IGluIGFwcGVuZHJlbHMgb3JpZ2luYXRpbmcgZnJvbQorCSAqIFVOSU9OIEFMTDsgaW5oZXJp dGFuY2UgY2hpbGQgdGFibGVzIGRvbid0IGhhdmUgdGhlaXIgb3duCisJICogc2VjdXJpdHlR dWFscy4pCVB1bGwgYW55IHN1Y2ggc2VjdXJpdHlRdWFscyB1cCBpbnRvIHRoZQorCSAqIGJh c2VyZXN0cmljdGluZm8gZm9yIHRoZSBjaGlsZC4gIFRoaXMgaXMgc2ltaWxhciB0bworCSAq IHByb2Nlc3Nfc2VjdXJpdHlfYmFycmllcl9xdWFscygpIGZvciB0aGUgcGFyZW50IHJlbCwg ZXhjZXB0CisJICogdGhhdCB3ZSBjYW4ndCBtYWtlIGFueSBnZW5lcmFsIGRlZHVjdGlvbnMg ZnJvbSBzdWNoIHF1YWxzLAorCSAqIHNpbmNlIHRoZXkgZG9uJ3QgaG9sZCBmb3IgdGhlIHdo b2xlIGFwcGVuZHJlbC4KKwkgKi8KKwlpZiAoY2hpbGRSVEUtPnNlY3VyaXR5UXVhbHMpCisJ eworCQlJbmRleAkJc2VjdXJpdHlfbGV2ZWwgPSAwOworCisJCWZvcmVhY2gobGMsIGNoaWxk UlRFLT5zZWN1cml0eVF1YWxzKQorCQl7CisJCQlMaXN0CSAgICpxdWFsc2V0ID0gKExpc3Qg KikgbGZpcnN0KGxjKTsKKwkJCUxpc3RDZWxsICAgKmxjMjsKKworCQkJZm9yZWFjaChsYzIs IHF1YWxzZXQpCisJCQl7CisJCQkJRXhwcgkgICAqcXVhbCA9IChFeHByICopIGxmaXJzdChs YzIpOworCisJCQkJLyoKKwkJCQkgKiBub3QgbGlrZWx5IHRoYXQgd2UnZCBzZWUgY29uc3Rh bnRzIGhlcmUsIHNvIG5vCisJCQkJICogY2hlY2sKKwkJCQkgKi8KKwkJCQljaGlsZHF1YWxz ID0gbGFwcGVuZChjaGlsZHF1YWxzLAorCQkJCQkJCQkJIG1ha2VfcmVzdHJpY3RpbmZvKHF1 YWwsCisJCQkJCQkJCQkJCQkJICAgdHJ1ZSwKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSwKKwkJ CQkJCQkJCQkJCQkgICBmYWxzZSwKKwkJCQkJCQkJCQkJCQkgICBzZWN1cml0eV9sZXZlbCwK KwkJCQkJCQkJCQkJCQkgICBOVUxMLCBOVUxMLAorCQkJCQkJCQkJCQkJCSAgIE5VTEwpKTsK KwkJCQljcV9taW5fc2VjdXJpdHkgPSBNaW4oY3FfbWluX3NlY3VyaXR5LCBzZWN1cml0eV9s ZXZlbCk7CisJCQl9CisJCQlzZWN1cml0eV9sZXZlbCsrOworCQl9CisJCUFzc2VydChzZWN1 cml0eV9sZXZlbCA8PSByb290LT5xdWFsX3NlY3VyaXR5X2xldmVsKTsKKwl9CisKKwkvKiBT ZXQgY2hpbGQncyB2ZXJzaW9uIG9mIGJhc2VyZXN0cmljdGluZm8uICovCisJY2hpbGRyZWwt PmJhc2VyZXN0cmljdGluZm8gPSBjaGlsZHF1YWxzOworCWNoaWxkcmVsLT5iYXNlcmVzdHJp Y3RfbWluX3NlY3VyaXR5ID0gY3FfbWluX3NlY3VyaXR5OworCisJaWYgKGhhdmVfY29uc3Rf ZmFsc2VfY3EpCisJeworCQkvKgorCQkgKiBTb21lIHJlc3RyaWN0aW9uIGNsYXVzZSByZWR1 Y2VkIHRvIGNvbnN0YW50IEZBTFNFIG9yIE5VTEwgYWZ0ZXIKKwkJICogc3Vic3RpdHV0aW9u LCBzbyB0aGlzIGNoaWxkIG5lZWQgbm90IGJlIHNjYW5uZWQuCisJCSAqLworCQlzZXRfZHVt bXlfcmVsX3BhdGhsaXN0KGNoaWxkcmVsKTsKKwl9CisKKwlyZXR1cm4gY2hpbGRyZWw7Cit9 CisKKy8qCisgKiBhZGRfcm93bWFya19qdW5rX2NvbHVtbnMKKyAqIAkJQWRkIG5lY2Vzc2Fy eSBqdW5rIGNvbHVtbnMgZm9yIHJvd21hcmtlZCBpbmhlcml0YW5jZSBwYXJlbnQgcmVsLgor ICoKKyAqIFRoZXNlIHZhbHVlcyBhcmUgbmVlZGVkIGZvciBsb2NraW5nIG9mIHJlbHMgc2Vs ZWN0ZWQgRk9SIFVQREFURS9TSEFSRSwgYW5kCisgKiB0byBkbyBFdmFsUGxhblF1YWwgcmVj aGVja2luZy4gIFNlZSBjb21tZW50cyBmb3IgUGxhblJvd01hcmsgaW4KKyAqIHBsYW5ub2Rl cy5oLgorICovCitzdGF0aWMgTGlzdCAqCithZGRfcm93bWFya19qdW5rX2NvbHVtbnMoUGxh bm5lckluZm8gKnJvb3QsIFBsYW5Sb3dNYXJrICpyYykKK3sKKwlMaXN0ICAgKnRsaXN0ID0g cm9vdC0+cHJvY2Vzc2VkX3RsaXN0OworCVZhcgkJICAgKnZhcjsKKwljaGFyCQlyZXNuYW1l WzMyXTsKKwlUYXJnZXRFbnRyeSAqdGxlOworCisJaWYgKHJjLT5hbGxNYXJrVHlwZXMgJiB+ KDEgPDwgUk9XX01BUktfQ09QWSkpCisJeworCQkvKiBOZWVkIHRvIGZldGNoIFRJRCAqLwor CQl2YXIgPSBtYWtlVmFyKHJjLT5ydGksCisJCQkJCSAgU2VsZkl0ZW1Qb2ludGVyQXR0cmli dXRlTnVtYmVyLAorCQkJCQkgIFRJRE9JRCwKKwkJCQkJICAtMSwKKwkJCQkJICBJbnZhbGlk T2lkLAorCQkJCQkgIDApOworCQlzbnByaW50ZihyZXNuYW1lLCBzaXplb2YocmVzbmFtZSks ICJjdGlkJXUiLCByYy0+cm93bWFya0lkKTsKKwkJdGxlID0gbWFrZVRhcmdldEVudHJ5KChF eHByICopIHZhciwKKwkJCQkJCQkgIGxpc3RfbGVuZ3RoKHRsaXN0KSArIDEsCisJCQkJCQkJ ICBwc3RyZHVwKHJlc25hbWUpLAorCQkJCQkJCSAgdHJ1ZSk7CisJCXRsaXN0ID0gbGFwcGVu ZCh0bGlzdCwgdGxlKTsKKwl9CisJaWYgKHJjLT5hbGxNYXJrVHlwZXMgJiAoMSA8PCBST1df TUFSS19DT1BZKSkKKwl7CisJCS8qIE5lZWQgdGhlIHdob2xlIHJvdyBhcyBhIGp1bmsgdmFy ICovCisJCXZhciA9IG1ha2VXaG9sZVJvd1Zhcihyb290LT5zaW1wbGVfcnRlX2FycmF5W3Jj LT5ydGldLAorCQkJCQkJCSAgcmMtPnJ0aSwKKwkJCQkJCQkgIDAsCisJCQkJCQkJICBmYWxz ZSk7CisJCXNucHJpbnRmKHJlc25hbWUsIHNpemVvZihyZXNuYW1lKSwgIndob2xlcm93JXUi LCByYy0+cm93bWFya0lkKTsKKwkJdGxlID0gbWFrZVRhcmdldEVudHJ5KChFeHByICopIHZh ciwKKwkJCQkJCQkgIGxpc3RfbGVuZ3RoKHRsaXN0KSArIDEsCisJCQkJCQkJICBwc3RyZHVw KHJlc25hbWUpLAorCQkJCQkJCSAgdHJ1ZSk7CisJCXRsaXN0ID0gbGFwcGVuZCh0bGlzdCwg dGxlKTsKKwl9CisKKwkvKiBGb3IgaW5oZXJpdGFuY2UgY2FzZXMsIGFsd2F5cyBmZXRjaCB0 aGUgdGFibGVvaWQgdG9vLiAqLworCXZhciA9IG1ha2VWYXIocmMtPnJ0aSwKKwkJCQkgIFRh YmxlT2lkQXR0cmlidXRlTnVtYmVyLAorCQkJCSAgT0lET0lELAorCQkJCSAgLTEsCisJCQkJ ICBJbnZhbGlkT2lkLAorCQkJCSAgMCk7CisJc25wcmludGYocmVzbmFtZSwgc2l6ZW9mKHJl c25hbWUpLCAidGFibGVvaWQldSIsIHJjLT5yb3dtYXJrSWQpOworCXRsZSA9IG1ha2VUYXJn ZXRFbnRyeSgoRXhwciAqKSB2YXIsCisJCQkJCQkgIGxpc3RfbGVuZ3RoKHRsaXN0KSArIDEs CisJCQkJCQkgIHBzdHJkdXAocmVzbmFtZSksCisJCQkJCQkgIHRydWUpOworCXRsaXN0ID0g bGFwcGVuZCh0bGlzdCwgdGxlKTsKKworCXJldHVybiB0bGlzdDsKK30KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZGluZm8uYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL2FwcGVuZGluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi45NTAyNTM1ZTUzCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5jCkBAIC0wLDAgKzEsODUxIEBACisvKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBhcHBlbmRpbmZvLmMKKyAqCSAgUm91dGluZXMg Zm9yIG1hcHBpbmcgYmV0d2VlbiBhcHBlbmQgcGFyZW50KHMpIGFuZCBjaGlsZHJlbgorICoK KyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDE4LCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBS ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYXBwZW5kaW5m by5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpbmNsdWRlICJwb3N0Z3Jl cy5oIgorCisjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWlscy5oIgorI2luY2x1ZGUgImFj Y2Vzcy9zeXNhdHRyLmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVk ZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2FwcGVuZGluZm8u aCIKKyNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCisjaW5jbHVkZSAidXRpbHMvcmVs LmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvc3lz Y2FjaGUuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKwlQbGFubmVySW5mbyAqcm9vdDsKKwlp bnQJCQluYXBwaW5mb3M7CisJQXBwZW5kUmVsSW5mbyAqKmFwcGluZm9zOworfSBhZGp1c3Rf YXBwZW5kcmVsX2F0dHJzX2NvbnRleHQ7CisKK3N0YXRpYyB2b2lkIG1ha2VfaW5oX3RyYW5z bGF0aW9uX2xpc3QoVHVwbGVEZXNjIG9sZF90dXBkZXNjLAorCQkJCQkJICBUdXBsZURlc2Mg bmV3X3R1cGRlc2MsCisJCQkJCQkgIE9pZCBmcm9tX3JlbCwgT2lkIHRvX3JlbCwKKwkJCQkJ CSAgSW5kZXggbmV3dmFybm8sIExpc3QgKip0cmFuc2xhdGVkX3ZhcnMpOworc3RhdGljIE5v ZGUgKmFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcihOb2RlICpub2RlLAorCQkJCQkJ CSAgIGFkanVzdF9hcHBlbmRyZWxfYXR0cnNfY29udGV4dCAqY29udGV4dCk7CitzdGF0aWMg UmVsaWRzIGFkanVzdF9jaGlsZF9yZWxpZHMoUmVsaWRzIHJlbGlkcywgaW50IG5hcHBpbmZv cywKKwkJCQkJQXBwZW5kUmVsSW5mbyAqKmFwcGluZm9zKTsKK3N0YXRpYyBMaXN0ICphZGp1 c3RfaW5oZXJpdGVkX3RsaXN0KExpc3QgKnRsaXN0LAorCQkJCQkgICBBcHBlbmRSZWxJbmZv ICpjb250ZXh0KTsKKworQXBwZW5kUmVsSW5mbyAqCittYWtlX2FwcGVuZF9yZWxfaW5mbyhS ZWxPcHRJbmZvICpwYXJlbnRyZWwsIFJhbmdlVGJsRW50cnkgKnBhcmVudHJ0ZSwKKwkJCQkJ IFR1cGxlRGVzYyBjaGlsZGRlc2MsIE9pZCBjaGlsZG9pZCwgT2lkIGNoaWxkcmVsdHlwZSwK KwkJCQkJIEluZGV4IGNoaWxkUlRpbmRleCkKK3sKKwlBcHBlbmRSZWxJbmZvICAqYXBwaW5m byA9IG1ha2VOb2RlKEFwcGVuZFJlbEluZm8pOworCisJYXBwaW5mby0+cGFyZW50X3JlbGlk ID0gcGFyZW50cmVsLT5yZWxpZDsKKwlhcHBpbmZvLT5jaGlsZF9yZWxpZCA9IGNoaWxkUlRp bmRleDsKKwlhcHBpbmZvLT5wYXJlbnRfcmVsdHlwZSA9IHBhcmVudHJlbC0+cmVsdHlwZTsK KwlhcHBpbmZvLT5jaGlsZF9yZWx0eXBlID0gY2hpbGRyZWx0eXBlOworCW1ha2VfaW5oX3Ry YW5zbGF0aW9uX2xpc3QocGFyZW50cmVsLT50dXBkZXNjLCBjaGlsZGRlc2MsCisJCQkJCQkJ ICBwYXJlbnRydGUtPnJlbGlkLCBjaGlsZG9pZCwKKwkJCQkJCQkgIGNoaWxkUlRpbmRleCwK KwkJCQkJCQkgICZhcHBpbmZvLT50cmFuc2xhdGVkX3ZhcnMpOworCWFwcGluZm8tPnBhcmVu dF9yZWxvaWQgPSBwYXJlbnRydGUtPnJlbGlkOworCisJcmV0dXJuIGFwcGluZm87Cit9CisK Ky8qCisgKiBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzCisgKgkgIENvcHkgdGhlIHNwZWNpZmll ZCBxdWVyeSBvciBleHByZXNzaW9uIGFuZCB0cmFuc2xhdGUgVmFycyByZWZlcnJpbmcgdG8g YQorICoJICBwYXJlbnQgcmVsIHRvIHJlZmVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNoaWxk IHJlbCBpbnN0ZWFkLiAgV2UgYWxzbworICoJICB1cGRhdGUgcnRpbmRleGVzIGFwcGVhcmlu ZyBvdXRzaWRlIFZhcnMsIHN1Y2ggYXMgcmVzdWx0UmVsYXRpb24gYW5kCisgKgkgIGpvaW50 cmVlIHJlbGlkcy4KKyAqCisgKiBOb3RlOiB0aGlzIGlzIG9ubHkgYXBwbGllZCBhZnRlciBj b252ZXJzaW9uIG9mIHN1YmxpbmtzIHRvIHN1YnBsYW5zLAorICogc28gd2UgZG9uJ3QgbmVl ZCB0byBjb3BlIHdpdGggcmVjdXJzaW9uIGludG8gc3ViLXF1ZXJpZXMuCisgKgorICogTm90 ZTogdGhpcyBpcyBub3QgaHVnZWx5IGRpZmZlcmVudCBmcm9tIHdoYXQgcHVsbHVwX3JlcGxh Y2VfdmFycygpIGRvZXM7CisgKiBtYXliZSB3ZSBzaG91bGQgdHJ5IHRvIGZvbGQgdGhlIHR3 byByb3V0aW5lcyB0b2dldGhlci4KKyAqLworTm9kZSAqCithZGp1c3RfYXBwZW5kcmVsX2F0 dHJzKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpub2RlLCBpbnQgbmFwcGluZm9zLAorCQkJ CQkgICBBcHBlbmRSZWxJbmZvICoqYXBwaW5mb3MpCit7CisJTm9kZQkgICAqcmVzdWx0Owor CWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfY29udGV4dCBjb250ZXh0OworCisJY29udGV4dC5y b290ID0gcm9vdDsKKwljb250ZXh0Lm5hcHBpbmZvcyA9IG5hcHBpbmZvczsKKwljb250ZXh0 LmFwcGluZm9zID0gYXBwaW5mb3M7CisKKwkvKiBJZiB0aGVyZSdzIG5vdGhpbmcgdG8gYWRq dXN0LCBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24uICovCisJQXNzZXJ0KG5hcHBpbmZvcyA+ PSAxICYmIGFwcGluZm9zICE9IE5VTEwpOworCisJLyoKKwkgKiBNdXN0IGJlIHByZXBhcmVk IHRvIHN0YXJ0IHdpdGggYSBRdWVyeSBvciBhIGJhcmUgZXhwcmVzc2lvbiB0cmVlLgorCSAq LworCWlmIChub2RlICYmIElzQShub2RlLCBRdWVyeSkpCisJeworCQlRdWVyeQkgICAqbmV3 bm9kZTsKKwkJaW50CQkJY250OworCisJCW5ld25vZGUgPSBxdWVyeV90cmVlX211dGF0b3Io KFF1ZXJ5ICopIG5vZGUsCisJCQkJCQkJCQkgYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRh dG9yLAorCQkJCQkJCQkJICh2b2lkICopICZjb250ZXh0LAorCQkJCQkJCQkJIFFUV19JR05P UkVfUkNfU1VCUVVFUklFUyk7CisJCWZvciAoY250ID0gMDsgY250IDwgbmFwcGluZm9zOyBj bnQrKykKKwkJeworCQkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbyA9IGFwcGluZm9zW2NudF07 CisKKwkJCWlmIChuZXdub2RlLT5yZXN1bHRSZWxhdGlvbiA9PSBhcHBpbmZvLT5wYXJlbnRf cmVsaWQpCisJCQl7CisJCQkJbmV3bm9kZS0+cmVzdWx0UmVsYXRpb24gPSBhcHBpbmZvLT5j aGlsZF9yZWxpZDsKKwkJCQkvKiBGaXggdGxpc3QgcmVzbm9zIHRvbywgaWYgaXQncyBpbmhl cml0ZWQgVVBEQVRFICovCisJCQkJaWYgKG5ld25vZGUtPmNvbW1hbmRUeXBlID09IENNRF9V UERBVEUpCisJCQkJCW5ld25vZGUtPnRhcmdldExpc3QgPQorCQkJCQkJYWRqdXN0X2luaGVy aXRlZF90bGlzdChuZXdub2RlLT50YXJnZXRMaXN0LAorCQkJCQkJCQkJCQkgICBhcHBpbmZv KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXJlc3VsdCA9IChOb2RlICopIG5ld25v ZGU7CisJfQorCWVsc2UKKwkJcmVzdWx0ID0gYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRh dG9yKG5vZGUsICZjb250ZXh0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBO b2RlICoKK2FkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvcihOb2RlICpub2RlLAorCQkJ CQkJCSAgIGFkanVzdF9hcHBlbmRyZWxfYXR0cnNfY29udGV4dCAqY29udGV4dCkKK3sKKwlB cHBlbmRSZWxJbmZvICoqYXBwaW5mb3MgPSBjb250ZXh0LT5hcHBpbmZvczsKKwlpbnQJCQlu YXBwaW5mb3MgPSBjb250ZXh0LT5uYXBwaW5mb3M7CisJaW50CQkJY250OworCisJaWYgKG5v ZGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKElzQShub2RlLCBWYXIpKQorCXsK KwkJVmFyCQkgICAqdmFyID0gKFZhciAqKSBjb3B5T2JqZWN0KG5vZGUpOworCQlBcHBlbmRS ZWxJbmZvICphcHBpbmZvID0gTlVMTDsKKworCQlmb3IgKGNudCA9IDA7IGNudCA8IG5hcHBp bmZvczsgY250KyspCisJCXsKKwkJCWlmICh2YXItPnZhcm5vID09IGFwcGluZm9zW2NudF0t PnBhcmVudF9yZWxpZCkKKwkJCXsKKwkJCQlhcHBpbmZvID0gYXBwaW5mb3NbY250XTsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICh2YXItPnZhcmxldmVsc3VwID09IDAgJiYg YXBwaW5mbykKKwkJeworCQkJdmFyLT52YXJubyA9IGFwcGluZm8tPmNoaWxkX3JlbGlkOwor CQkJdmFyLT52YXJub29sZCA9IGFwcGluZm8tPmNoaWxkX3JlbGlkOworCQkJaWYgKHZhci0+ dmFyYXR0bm8gPiAwKQorCQkJeworCQkJCU5vZGUJICAgKm5ld25vZGU7CisKKwkJCQlpZiAo dmFyLT52YXJhdHRubyA+IGxpc3RfbGVuZ3RoKGFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycykp CisJCQkJCWVsb2coRVJST1IsICJhdHRyaWJ1dGUgJWQgb2YgcmVsYXRpb24gXCIlc1wiIGRv ZXMgbm90IGV4aXN0IiwKKwkJCQkJCSB2YXItPnZhcmF0dG5vLCBnZXRfcmVsX25hbWUoYXBw aW5mby0+cGFyZW50X3JlbG9pZCkpOworCQkJCW5ld25vZGUgPSBjb3B5T2JqZWN0KGxpc3Rf bnRoKGFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycywKKwkJCQkJCQkJCQkJICB2YXItPnZhcmF0 dG5vIC0gMSkpOworCQkJCWlmIChuZXdub2RlID09IE5VTEwpCisJCQkJCWVsb2coRVJST1Is ICJhdHRyaWJ1dGUgJWQgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMgbm90IGV4aXN0IiwKKwkJ CQkJCSB2YXItPnZhcmF0dG5vLCBnZXRfcmVsX25hbWUoYXBwaW5mby0+cGFyZW50X3JlbG9p ZCkpOworCQkJCXJldHVybiBuZXdub2RlOworCQkJfQorCQkJZWxzZSBpZiAodmFyLT52YXJh dHRubyA9PSAwKQorCQkJeworCQkJCS8qCisJCQkJICogV2hvbGUtcm93IFZhcjogaWYgd2Ug YXJlIGRlYWxpbmcgd2l0aCBuYW1lZCByb3d0eXBlcywgd2UKKwkJCQkgKiBjYW4gdXNlIGEg d2hvbGUtcm93IFZhciBmb3IgdGhlIGNoaWxkIHRhYmxlIHBsdXMgYSBjb2VyY2lvbgorCQkJ CSAqIHN0ZXAgdG8gY29udmVydCB0aGUgdHVwbGUgbGF5b3V0IHRvIHRoZSBwYXJlbnQncyBy b3d0eXBlLgorCQkJCSAqIE90aGVyd2lzZSB3ZSBoYXZlIHRvIGdlbmVyYXRlIGEgUm93RXhw ci4KKwkJCQkgKi8KKwkJCQlpZiAoT2lkSXNWYWxpZChhcHBpbmZvLT5jaGlsZF9yZWx0eXBl KSkKKwkJCQl7CisJCQkJCUFzc2VydCh2YXItPnZhcnR5cGUgPT0gYXBwaW5mby0+cGFyZW50 X3JlbHR5cGUpOworCQkJCQlpZiAoYXBwaW5mby0+cGFyZW50X3JlbHR5cGUgIT0gYXBwaW5m by0+Y2hpbGRfcmVsdHlwZSkKKwkJCQkJeworCQkJCQkJQ29udmVydFJvd3R5cGVFeHByICpy ID0gbWFrZU5vZGUoQ29udmVydFJvd3R5cGVFeHByKTsKKworCQkJCQkJci0+YXJnID0gKEV4 cHIgKikgdmFyOworCQkJCQkJci0+cmVzdWx0dHlwZSA9IGFwcGluZm8tPnBhcmVudF9yZWx0 eXBlOworCQkJCQkJci0+Y29udmVydGZvcm1hdCA9IENPRVJDRV9JTVBMSUNJVF9DQVNUOwor CQkJCQkJci0+bG9jYXRpb24gPSAtMTsKKwkJCQkJCS8qIE1ha2Ugc3VyZSB0aGUgVmFyIG5v ZGUgaGFzIHRoZSByaWdodCB0eXBlIElELCB0b28gKi8KKwkJCQkJCXZhci0+dmFydHlwZSA9 IGFwcGluZm8tPmNoaWxkX3JlbHR5cGU7CisJCQkJCQlyZXR1cm4gKE5vZGUgKikgcjsKKwkJ CQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBCdWlsZCBh IFJvd0V4cHIgY29udGFpbmluZyB0aGUgdHJhbnNsYXRlZCB2YXJpYWJsZXMuCisJCQkJCSAq CisJCQkJCSAqIEluIHByYWN0aWNlIHZhci0+dmFydHlwZSB3aWxsIGFsd2F5cyBiZSBSRUNP UkRPSUQgaGVyZSwKKwkJCQkJICogc28gd2UgbmVlZCB0byBjb21lIHVwIHdpdGggc29tZSBz dWl0YWJsZSBjb2x1bW4gbmFtZXMuCisJCQkJCSAqIFdlIHVzZSB0aGUgcGFyZW50IFJURSdz IGNvbHVtbiBuYW1lcy4KKwkJCQkJICoKKwkJCQkJICogTm90ZTogd2UgY2FuJ3QgZ2V0IGhl cmUgZm9yIGluaGVyaXRhbmNlIGNhc2VzLCBzbyB0aGVyZQorCQkJCQkgKiBpcyBubyBuZWVk IHRvIHdvcnJ5IHRoYXQgdHJhbnNsYXRlZF92YXJzIG1pZ2h0IGNvbnRhaW4KKwkJCQkJICog c29tZSBkdW1teSBOVUxMcy4KKwkJCQkJICovCisJCQkJCVJvd0V4cHIgICAgKnJvd2V4cHI7 CisJCQkJCUxpc3QJICAgKmZpZWxkczsKKwkJCQkJUmFuZ2VUYmxFbnRyeSAqcnRlOworCisJ CQkJCXJ0ZSA9IHJ0X2ZldGNoKGFwcGluZm8tPnBhcmVudF9yZWxpZCwKKwkJCQkJCQkJICAg Y29udGV4dC0+cm9vdC0+cGFyc2UtPnJ0YWJsZSk7CisJCQkJCWZpZWxkcyA9IGNvcHlPYmpl Y3QoYXBwaW5mby0+dHJhbnNsYXRlZF92YXJzKTsKKwkJCQkJcm93ZXhwciA9IG1ha2VOb2Rl KFJvd0V4cHIpOworCQkJCQlyb3dleHByLT5hcmdzID0gZmllbGRzOworCQkJCQlyb3dleHBy LT5yb3dfdHlwZWlkID0gdmFyLT52YXJ0eXBlOworCQkJCQlyb3dleHByLT5yb3dfZm9ybWF0 ID0gQ09FUkNFX0lNUExJQ0lUX0NBU1Q7CisJCQkJCXJvd2V4cHItPmNvbG5hbWVzID0gY29w eU9iamVjdChydGUtPmVyZWYtPmNvbG5hbWVzKTsKKwkJCQkJcm93ZXhwci0+bG9jYXRpb24g PSAtMTsKKworCQkJCQlyZXR1cm4gKE5vZGUgKikgcm93ZXhwcjsKKwkJCQl9CisJCQl9CisJ CQkvKiBzeXN0ZW0gYXR0cmlidXRlcyBkb24ndCBuZWVkIGFueSBvdGhlciB0cmFuc2xhdGlv biAqLworCQl9CisJCXJldHVybiAoTm9kZSAqKSB2YXI7CisJfQorCWlmIChJc0Eobm9kZSwg Q3VycmVudE9mRXhwcikpCisJeworCQlDdXJyZW50T2ZFeHByICpjZXhwciA9IChDdXJyZW50 T2ZFeHByICopIGNvcHlPYmplY3Qobm9kZSk7CisKKwkJZm9yIChjbnQgPSAwOyBjbnQgPCBu YXBwaW5mb3M7IGNudCsrKQorCQl7CisJCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvID0gYXBw aW5mb3NbY250XTsKKworCQkJaWYgKGNleHByLT5jdmFybm8gPT0gYXBwaW5mby0+cGFyZW50 X3JlbGlkKQorCQkJeworCQkJCWNleHByLT5jdmFybm8gPSBhcHBpbmZvLT5jaGlsZF9yZWxp ZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZXR1cm4gKE5vZGUgKikgY2V4cHI7CisJ fQorCWlmIChJc0Eobm9kZSwgUmFuZ2VUYmxSZWYpKQorCXsKKwkJUmFuZ2VUYmxSZWYgKnJ0 ciA9IChSYW5nZVRibFJlZiAqKSBjb3B5T2JqZWN0KG5vZGUpOworCisJCWZvciAoY250ID0g MDsgY250IDwgbmFwcGluZm9zOyBjbnQrKykKKwkJeworCQkJQXBwZW5kUmVsSW5mbyAqYXBw aW5mbyA9IGFwcGluZm9zW2NudF07CisKKwkJCWlmIChydHItPnJ0aW5kZXggPT0gYXBwaW5m by0+cGFyZW50X3JlbGlkKQorCQkJeworCQkJCXJ0ci0+cnRpbmRleCA9IGFwcGluZm8tPmNo aWxkX3JlbGlkOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXJldHVybiAoTm9kZSAqKSBy dHI7CisJfQorCWlmIChJc0Eobm9kZSwgSm9pbkV4cHIpKQorCXsKKwkJLyogQ29weSB0aGUg Sm9pbkV4cHIgbm9kZSB3aXRoIGNvcnJlY3QgbXV0YXRpb24gb2Ygc3Vibm9kZXMgKi8KKwkJ Sm9pbkV4cHIgICAqajsKKwkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbzsKKworCQlqID0gKEpv aW5FeHByICopIGV4cHJlc3Npb25fdHJlZV9tdXRhdG9yKG5vZGUsCisJCQkJCQkJCQkJCQkg YWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yLAorCQkJCQkJCQkJCQkJICh2b2lkICop IGNvbnRleHQpOworCQkvKiBub3cgZml4IEpvaW5FeHByJ3MgcnRpbmRleCAocHJvYmFibHkg bmV2ZXIgaGFwcGVucykgKi8KKwkJZm9yIChjbnQgPSAwOyBjbnQgPCBuYXBwaW5mb3M7IGNu dCsrKQorCQl7CisJCQlhcHBpbmZvID0gYXBwaW5mb3NbY250XTsKKworCQkJaWYgKGotPnJ0 aW5kZXggPT0gYXBwaW5mby0+cGFyZW50X3JlbGlkKQorCQkJeworCQkJCWotPnJ0aW5kZXgg PSBhcHBpbmZvLT5jaGlsZF9yZWxpZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZXR1 cm4gKE5vZGUgKikgajsKKwl9CisJaWYgKElzQShub2RlLCBQbGFjZUhvbGRlclZhcikpCisJ eworCQkvKiBDb3B5IHRoZSBQbGFjZUhvbGRlclZhciBub2RlIHdpdGggY29ycmVjdCBtdXRh dGlvbiBvZiBzdWJub2RlcyAqLworCQlQbGFjZUhvbGRlclZhciAqcGh2OworCisJCXBodiA9 IChQbGFjZUhvbGRlclZhciAqKSBleHByZXNzaW9uX3RyZWVfbXV0YXRvcihub2RlLAorCQkJ CQkJCQkJCQkJCQkgYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yLAorCQkJCQkJCQkJ CQkJCQkgKHZvaWQgKikgY29udGV4dCk7CisJCS8qIG5vdyBmaXggUGxhY2VIb2xkZXJWYXIn cyByZWxpZCBzZXRzICovCisJCWlmIChwaHYtPnBobGV2ZWxzdXAgPT0gMCkKKwkJCXBodi0+ cGhyZWxzID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhwaHYtPnBocmVscywgY29udGV4dC0+bmFw cGluZm9zLAorCQkJCQkJCQkJCQkgIGNvbnRleHQtPmFwcGluZm9zKTsKKwkJcmV0dXJuIChO b2RlICopIHBodjsKKwl9CisKKwkvKgorCSAqIFRoaXMgaXMgbmVlZGVkLCBiZWNhdXNlIGlu aGVyaXRhbmNlX21ha2VfcmVsX2Zyb21fam9pbmxpc3QgbmVlZHMgdG8KKwkgKiB0cmFuc2xh dGUgcm9vdC0+am9pbl9pbmZvX2xpc3QgZXhlY3V0aW5nIG1ha2VfcmVsX2Zyb21fam9pbmxp c3QgZm9yIGEKKwkgKiBnaXZlbiBjaGlsZC4KKwkgKi8KKwlpZiAoSXNBKG5vZGUsIFNwZWNp YWxKb2luSW5mbykpCisJeworCQlTcGVjaWFsSm9pbkluZm8gKm9sZGluZm8gPSAoU3BlY2lh bEpvaW5JbmZvICopIG5vZGU7CisJCVNwZWNpYWxKb2luSW5mbyAqbmV3aW5mbyA9IG1ha2VO b2RlKFNwZWNpYWxKb2luSW5mbyk7CisKKwkJbWVtY3B5KG5ld2luZm8sIG9sZGluZm8sIHNp emVvZihTcGVjaWFsSm9pbkluZm8pKTsKKwkJbmV3aW5mby0+bWluX2xlZnRoYW5kID0gYWRq dXN0X2NoaWxkX3JlbGlkcyhvbGRpbmZvLT5taW5fbGVmdGhhbmQsCisJCQkJCQkJCQkJCQkJ Y29udGV4dC0+bmFwcGluZm9zLAorCQkJCQkJCQkJCQkJCWNvbnRleHQtPmFwcGluZm9zKTsK KwkJbmV3aW5mby0+bWluX3JpZ2h0aGFuZCA9IGFkanVzdF9jaGlsZF9yZWxpZHMob2xkaW5m by0+bWluX3JpZ2h0aGFuZCwKKwkJCQkJCQkJCQkJCQkgY29udGV4dC0+bmFwcGluZm9zLAor CQkJCQkJCQkJCQkJCSBjb250ZXh0LT5hcHBpbmZvcyk7CisJCW5ld2luZm8tPnN5bl9sZWZ0 aGFuZCA9IGFkanVzdF9jaGlsZF9yZWxpZHMob2xkaW5mby0+c3luX2xlZnRoYW5kLAorCQkJ CQkJCQkJCQkJCWNvbnRleHQtPm5hcHBpbmZvcywKKwkJCQkJCQkJCQkJCQljb250ZXh0LT5h cHBpbmZvcyk7CisJCW5ld2luZm8tPnN5bl9yaWdodGhhbmQgPSBhZGp1c3RfY2hpbGRfcmVs aWRzKG9sZGluZm8tPnN5bl9yaWdodGhhbmQsCisJCQkJCQkJCQkJCQkJIGNvbnRleHQtPm5h cHBpbmZvcywKKwkJCQkJCQkJCQkJCQkgY29udGV4dC0+YXBwaW5mb3MpOworCQluZXdpbmZv LT5zZW1pX3Joc19leHBycyA9CisJCQkJCShMaXN0ICopIGV4cHJlc3Npb25fdHJlZV9tdXRh dG9yKChOb2RlICopCisJCQkJCQkJCQkJCQkJIG9sZGluZm8tPnNlbWlfcmhzX2V4cHJzLAor CQkJCQkJCQkJCQkJCSBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IsCisJCQkJCQkJ CQkJCQkJICh2b2lkICopIGNvbnRleHQpOworCQlyZXR1cm4gKE5vZGUgKikgbmV3aW5mbzsK Kwl9CisKKwkvKiBTaG91bGRuJ3QgbmVlZCB0byBoYW5kbGUgcGxhbm5lciBhdXhpbGlhcnkg bm9kZXMgaGVyZSAqLworCUFzc2VydCghSXNBKG5vZGUsIEFwcGVuZFJlbEluZm8pKTsKKwlB c3NlcnQoIUlzQShub2RlLCBQbGFjZUhvbGRlckluZm8pKTsKKwlBc3NlcnQoIUlzQShub2Rl LCBNaW5NYXhBZ2dJbmZvKSk7CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gcHJvY2VzcyBSZXN0 cmljdEluZm8gbm9kZXMgc3BlY2lhbGx5LiAgKE5vdGU6IGFsdGhvdWdoCisJICogc2V0X2Fw cGVuZF9yZWxfcGF0aGxpc3Qgd2lsbCBoaWRlIFJlc3RyaWN0SW5mb3MgaW4gdGhlIHBhcmVu dCdzCisJICogYmFzZXJlc3RyaWN0aW5mbyBsaXN0IGZyb20gdXMsIGl0IGRvZXNuJ3QgaGlk ZSB0aG9zZSBpbiBqb2luaW5mby4pCisJICovCisJaWYgKElzQShub2RlLCBSZXN0cmljdElu Zm8pKQorCXsKKwkJUmVzdHJpY3RJbmZvICpvbGRpbmZvID0gKFJlc3RyaWN0SW5mbyAqKSBu b2RlOworCQlSZXN0cmljdEluZm8gKm5ld2luZm8gPSBtYWtlTm9kZShSZXN0cmljdEluZm8p OworCisJCS8qIENvcHkgYWxsIGZsYXQtY29waWFibGUgZmllbGRzICovCisJCW1lbWNweShu ZXdpbmZvLCBvbGRpbmZvLCBzaXplb2YoUmVzdHJpY3RJbmZvKSk7CisKKwkJLyogUmVjdXJz aXZlbHkgZml4IHRoZSBjbGF1c2UgaXRzZWxmICovCisJCW5ld2luZm8tPmNsYXVzZSA9IChF eHByICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xk aW5mby0+Y2xhdXNlLCBjb250ZXh0KTsKKworCQkvKiBhbmQgdGhlIG1vZGlmaWVkIHZlcnNp b24sIGlmIGFuIE9SIGNsYXVzZSAqLworCQluZXdpbmZvLT5vcmNsYXVzZSA9IChFeHByICop CisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoKE5vZGUgKikgb2xkaW5mby0+ b3JjbGF1c2UsIGNvbnRleHQpOworCisJCS8qIGFkanVzdCByZWxpZCBzZXRzIHRvbyAqLwor CQluZXdpbmZvLT5jbGF1c2VfcmVsaWRzID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhvbGRpbmZv LT5jbGF1c2VfcmVsaWRzLAorCQkJCQkJCQkJCQkJCSBjb250ZXh0LT5uYXBwaW5mb3MsCisJ CQkJCQkJCQkJCQkJIGNvbnRleHQtPmFwcGluZm9zKTsKKwkJbmV3aW5mby0+cmVxdWlyZWRf cmVsaWRzID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhvbGRpbmZvLT5yZXF1aXJlZF9yZWxpZHMs CisJCQkJCQkJCQkJCQkJICAgY29udGV4dC0+bmFwcGluZm9zLAorCQkJCQkJCQkJCQkJCSAg IGNvbnRleHQtPmFwcGluZm9zKTsKKwkJbmV3aW5mby0+b3V0ZXJfcmVsaWRzID0gYWRqdXN0 X2NoaWxkX3JlbGlkcyhvbGRpbmZvLT5vdXRlcl9yZWxpZHMsCisJCQkJCQkJCQkJCQkJY29u dGV4dC0+bmFwcGluZm9zLAorCQkJCQkJCQkJCQkJCWNvbnRleHQtPmFwcGluZm9zKTsKKwkJ bmV3aW5mby0+bnVsbGFibGVfcmVsaWRzID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhvbGRpbmZv LT5udWxsYWJsZV9yZWxpZHMsCisJCQkJCQkJCQkJCQkJICAgY29udGV4dC0+bmFwcGluZm9z LAorCQkJCQkJCQkJCQkJCSAgIGNvbnRleHQtPmFwcGluZm9zKTsKKwkJbmV3aW5mby0+bGVm dF9yZWxpZHMgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPmxlZnRfcmVsaWRzLAor CQkJCQkJCQkJCQkJICAgY29udGV4dC0+bmFwcGluZm9zLAorCQkJCQkJCQkJCQkJICAgY29u dGV4dC0+YXBwaW5mb3MpOworCQluZXdpbmZvLT5yaWdodF9yZWxpZHMgPSBhZGp1c3RfY2hp bGRfcmVsaWRzKG9sZGluZm8tPnJpZ2h0X3JlbGlkcywKKwkJCQkJCQkJCQkJCQljb250ZXh0 LT5uYXBwaW5mb3MsCisJCQkJCQkJCQkJCQkJY29udGV4dC0+YXBwaW5mb3MpOworCisJCS8q CisJCSAqIFJlc2V0IGNhY2hlZCBkZXJpdmF0aXZlIGZpZWxkcywgc2luY2UgdGhlc2UgbWln aHQgbmVlZCB0byBoYXZlCisJCSAqIGRpZmZlcmVudCB2YWx1ZXMgd2hlbiBjb25zaWRlcmlu ZyB0aGUgY2hpbGQgcmVsYXRpb24uICBOb3RlIHdlCisJCSAqIGRvbid0IHJlc2V0IGxlZnRf ZWMvcmlnaHRfZWM6IGVhY2ggY2hpbGQgdmFyaWFibGUgaXMgaW1wbGljaXRseQorCQkgKiBl cXVpdmFsZW50IHRvIGl0cyBwYXJlbnQsIHNvIHN0aWxsIGEgbWVtYmVyIG9mIHRoZSBzYW1l IEVDIGlmIGFueS4KKwkJICovCisJCW5ld2luZm8tPmV2YWxfY29zdC5zdGFydHVwID0gLTE7 CisJCW5ld2luZm8tPm5vcm1fc2VsZWMgPSAtMTsKKwkJbmV3aW5mby0+b3V0ZXJfc2VsZWMg PSAtMTsKKwkJbmV3aW5mby0+bGVmdF9lbSA9IE5VTEw7CisJCW5ld2luZm8tPnJpZ2h0X2Vt ID0gTlVMTDsKKwkJbmV3aW5mby0+c2NhbnNlbF9jYWNoZSA9IE5JTDsKKwkJbmV3aW5mby0+ bGVmdF9idWNrZXRzaXplID0gLTE7CisJCW5ld2luZm8tPnJpZ2h0X2J1Y2tldHNpemUgPSAt MTsKKwkJbmV3aW5mby0+bGVmdF9tY3ZmcmVxID0gLTE7CisJCW5ld2luZm8tPnJpZ2h0X21j dmZyZXEgPSAtMTsKKworCQlyZXR1cm4gKE5vZGUgKikgbmV3aW5mbzsKKwl9CisKKwkvKgor CSAqIE5PVEU6IHdlIGRvIG5vdCBuZWVkIHRvIHJlY3Vyc2UgaW50byBzdWJsaW5rcywgYmVj YXVzZSB0aGV5IHNob3VsZAorCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBz dWJwbGFucyBiZWZvcmUgd2Ugc2VlIHRoZW0uCisJICovCisJQXNzZXJ0KCFJc0Eobm9kZSwg U3ViTGluaykpOworCUFzc2VydCghSXNBKG5vZGUsIFF1ZXJ5KSk7CisKKwlyZXR1cm4gZXhw cmVzc2lvbl90cmVlX211dGF0b3Iobm9kZSwgYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRh dG9yLAorCQkJCQkJCQkgICAodm9pZCAqKSBjb250ZXh0KTsKK30KKworLyoKKyAqIFN1YnN0 aXR1dGUgY2hpbGQgcmVsaWRzIGZvciBwYXJlbnQgcmVsaWRzIGluIGEgUmVsaWQgc2V0LiAg VGhlIGFycmF5IG9mCisgKiBhcHBpbmZvcyBzcGVjaWZpZXMgdGhlIHN1YnN0aXR1dGlvbnMg dG8gYmUgcGVyZm9ybWVkLgorICovCitzdGF0aWMgUmVsaWRzCithZGp1c3RfY2hpbGRfcmVs aWRzKFJlbGlkcyByZWxpZHMsIGludCBuYXBwaW5mb3MsIEFwcGVuZFJlbEluZm8gKiphcHBp bmZvcykKK3sKKwlCaXRtYXBzZXQgICpyZXN1bHQgPSBOVUxMOworCWludAkJCWNudDsKKwor CWZvciAoY250ID0gMDsgY250IDwgbmFwcGluZm9zOyBjbnQrKykKKwl7CisJCUFwcGVuZFJl bEluZm8gKmFwcGluZm8gPSBhcHBpbmZvc1tjbnRdOworCisJCS8qIFJlbW92ZSBwYXJlbnQs IGFkZCBjaGlsZCAqLworCQlpZiAoYm1zX2lzX21lbWJlcihhcHBpbmZvLT5wYXJlbnRfcmVs aWQsIHJlbGlkcykpCisJCXsKKwkJCS8qIE1ha2UgYSBjb3B5IGlmIHdlIGFyZSBjaGFuZ2lu ZyB0aGUgc2V0LiAqLworCQkJaWYgKCFyZXN1bHQpCisJCQkJcmVzdWx0ID0gYm1zX2NvcHko cmVsaWRzKTsKKworCQkJcmVzdWx0ID0gYm1zX2RlbF9tZW1iZXIocmVzdWx0LCBhcHBpbmZv LT5wYXJlbnRfcmVsaWQpOworCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIocmVzdWx0LCBh cHBpbmZvLT5jaGlsZF9yZWxpZCk7CisJCX0KKwl9CisKKwkvKiBJZiB3ZSBtYWRlIGFueSBj aGFuZ2VzLCByZXR1cm4gdGhlIG1vZGlmaWVkIGNvcHkuICovCisJaWYgKHJlc3VsdCkKKwkJ cmV0dXJuIHJlc3VsdDsKKworCS8qIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBvcmlnaW5hbCBz ZXQgd2l0aG91dCBtb2RpZmljYXRpb24uICovCisJcmV0dXJuIHJlbGlkczsKK30KKworLyoK KyAqIFJlcGxhY2UgYW55IHJlbGlkIHByZXNlbnQgaW4gdG9wX3BhcmVudF9yZWxpZHMgd2l0 aCBpdHMgY2hpbGQgaW4KKyAqIGNoaWxkX3JlbGlkcy4gTWVtYmVycyBvZiBjaGlsZF9yZWxp ZHMgY2FuIGJlIG11bHRpcGxlIGxldmVscyBiZWxvdyB0b3AKKyAqIHBhcmVudCBpbiB0aGUg cGFydGl0aW9uIGhpZXJhcmNoeS4KKyAqLworUmVsaWRzCithZGp1c3RfY2hpbGRfcmVsaWRz X211bHRpbGV2ZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMsCisJCQkJCQkJ ICAgUmVsaWRzIGNoaWxkX3JlbGlkcywgUmVsaWRzIHRvcF9wYXJlbnRfcmVsaWRzKQorewor CUFwcGVuZFJlbEluZm8gKiphcHBpbmZvczsKKwlpbnQJCQluYXBwaW5mb3M7CisJUmVsaWRz CQlwYXJlbnRfcmVsaWRzID0gTlVMTDsKKwlSZWxpZHMJCXJlc3VsdDsKKwlSZWxpZHMJCXRt cF9yZXN1bHQgPSBOVUxMOworCWludAkJCWNudDsKKworCS8qCisJICogSWYgdGhlIGdpdmVu IHJlbGlkcyBzZXQgZG9lc24ndCBjb250YWluIGFueSBvZiB0aGUgdG9wIHBhcmVudCByZWxp ZHMsCisJICogaXQgd2lsbCByZW1haW4gdW5jaGFuZ2VkLgorCSAqLworCWlmICghYm1zX292 ZXJsYXAocmVsaWRzLCB0b3BfcGFyZW50X3JlbGlkcykpCisJCXJldHVybiByZWxpZHM7CisK KwlhcHBpbmZvcyA9IGZpbmRfYXBwaW5mb3NfYnlfcmVsaWRzKHJvb3QsIGNoaWxkX3JlbGlk cywgJm5hcHBpbmZvcyk7CisKKwkvKiBDb25zdHJ1Y3QgcmVsaWRzIHNldCBmb3IgdGhlIGlt bWVkaWF0ZSBwYXJlbnQgb2YgdGhlIGdpdmVuIGNoaWxkLiAqLworCWZvciAoY250ID0gMDsg Y250IDwgbmFwcGluZm9zOyBjbnQrKykKKwl7CisJCUFwcGVuZFJlbEluZm8gKmFwcGluZm8g PSBhcHBpbmZvc1tjbnRdOworCisJCXBhcmVudF9yZWxpZHMgPSBibXNfYWRkX21lbWJlcihw YXJlbnRfcmVsaWRzLCBhcHBpbmZvLT5wYXJlbnRfcmVsaWQpOworCX0KKworCS8qIFJlY3Vy c2UgaWYgaW1tZWRpYXRlIHBhcmVudCBpcyBub3QgdGhlIHRvcCBwYXJlbnQuICovCisJaWYg KCFibXNfZXF1YWwocGFyZW50X3JlbGlkcywgdG9wX3BhcmVudF9yZWxpZHMpKQorCXsKKwkJ dG1wX3Jlc3VsdCA9IGFkanVzdF9jaGlsZF9yZWxpZHNfbXVsdGlsZXZlbChyb290LCByZWxp ZHMsCisJCQkJCQkJCQkJCQkJcGFyZW50X3JlbGlkcywKKwkJCQkJCQkJCQkJCQl0b3BfcGFy ZW50X3JlbGlkcyk7CisJCXJlbGlkcyA9IHRtcF9yZXN1bHQ7CisJfQorCisJcmVzdWx0ID0g YWRqdXN0X2NoaWxkX3JlbGlkcyhyZWxpZHMsIG5hcHBpbmZvcywgYXBwaW5mb3MpOworCisJ LyogRnJlZSBtZW1vcnkgY29uc3VtZWQgYnkgYW55IGludGVybWVkaWF0ZSByZXN1bHQuICov CisJaWYgKHRtcF9yZXN1bHQpCisJCWJtc19mcmVlKHRtcF9yZXN1bHQpOworCWJtc19mcmVl KHBhcmVudF9yZWxpZHMpOworCXBmcmVlKGFwcGluZm9zKTsKKworCXJldHVybiByZXN1bHQ7 Cit9CisKKy8qCisgKiBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211bHRpbGV2ZWwKKyAqCSAg QXBwbHkgVmFyIHRyYW5zbGF0aW9ucyBmcm9tIGEgdG9wbGV2ZWwgYXBwZW5kcmVsIHBhcmVu dCBkb3duIHRvIGEgY2hpbGQuCisgKgorICogSW4gc29tZSBjYXNlcyB3ZSBuZWVkIHRvIHRy YW5zbGF0ZSBleHByZXNzaW9ucyByZWZlcmVuY2luZyBhIHBhcmVudCByZWxhdGlvbgorICog dG8gcmVmZXJlbmNlIGFuIGFwcGVuZHJlbCBjaGlsZCB0aGF0J3MgbXVsdGlwbGUgbGV2ZWxz IHJlbW92ZWQgZnJvbSBpdC4KKyAqLworTm9kZSAqCithZGp1c3RfYXBwZW5kcmVsX2F0dHJz X211bHRpbGV2ZWwoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKm5vZGUsCisJCQkJCQkJCSAg UmVsaWRzIGNoaWxkX3JlbGlkcywKKwkJCQkJCQkJICBSZWxpZHMgdG9wX3BhcmVudF9yZWxp ZHMpCit7CisJQXBwZW5kUmVsSW5mbyAqKmFwcGluZm9zOworCUJpdG1hcHNldCAgKnBhcmVu dF9yZWxpZHMgPSBOVUxMOworCWludAkJCW5hcHBpbmZvczsKKwlpbnQJCQljbnQ7CisKKwlB c3NlcnQoYm1zX251bV9tZW1iZXJzKGNoaWxkX3JlbGlkcykgPT0gYm1zX251bV9tZW1iZXJz KHRvcF9wYXJlbnRfcmVsaWRzKSk7CisKKwlhcHBpbmZvcyA9IGZpbmRfYXBwaW5mb3NfYnlf cmVsaWRzKHJvb3QsIGNoaWxkX3JlbGlkcywgJm5hcHBpbmZvcyk7CisKKwkvKiBDb25zdHJ1 Y3QgcmVsaWRzIHNldCBmb3IgdGhlIGltbWVkaWF0ZSBwYXJlbnQgb2YgZ2l2ZW4gY2hpbGQu ICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBuYXBwaW5mb3M7IGNudCsrKQorCXsKKwkJQXBw ZW5kUmVsSW5mbyAqYXBwaW5mbyA9IGFwcGluZm9zW2NudF07CisKKwkJcGFyZW50X3JlbGlk cyA9IGJtc19hZGRfbWVtYmVyKHBhcmVudF9yZWxpZHMsIGFwcGluZm8tPnBhcmVudF9yZWxp ZCk7CisJfQorCisJLyogUmVjdXJzZSBpZiBpbW1lZGlhdGUgcGFyZW50IGlzIG5vdCB0aGUg dG9wIHBhcmVudC4gKi8KKwlpZiAoIWJtc19lcXVhbChwYXJlbnRfcmVsaWRzLCB0b3BfcGFy ZW50X3JlbGlkcykpCisJCW5vZGUgPSBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211bHRpbGV2 ZWwocm9vdCwgbm9kZSwgcGFyZW50X3JlbGlkcywKKwkJCQkJCQkJCQkJCSB0b3BfcGFyZW50 X3JlbGlkcyk7CisKKwkvKiBOb3cgdHJhbnNsYXRlIGZvciB0aGlzIGNoaWxkICovCisJbm9k ZSA9IGFkanVzdF9hcHBlbmRyZWxfYXR0cnMocm9vdCwgbm9kZSwgbmFwcGluZm9zLCBhcHBp bmZvcyk7CisKKwlwZnJlZShhcHBpbmZvcyk7CisKKwlyZXR1cm4gbm9kZTsKK30KKworLyoK KyAqIENvbnN0cnVjdCB0aGUgU3BlY2lhbEpvaW5JbmZvIGZvciBhIGNoaWxkLWpvaW4gYnkg dHJhbnNsYXRpbmcKKyAqIFNwZWNpYWxKb2luSW5mbyBmb3IgdGhlIGpvaW4gYmV0d2VlbiBw YXJlbnRzLiBsZWZ0X3JlbGlkcyBhbmQgcmlnaHRfcmVsaWRzCisgKiBhcmUgdGhlIHJlbGlk cyBvZiBsZWZ0IGFuZCByaWdodCBzaWRlIG9mIHRoZSBqb2luIHJlc3BlY3RpdmVseS4KKyAq LworU3BlY2lhbEpvaW5JbmZvICoKK2J1aWxkX2NoaWxkX2pvaW5fc2ppbmZvKFBsYW5uZXJJ bmZvICpyb290LCBTcGVjaWFsSm9pbkluZm8gKnBhcmVudF9zamluZm8sCisJCQkJCQlSZWxp ZHMgbGVmdF9yZWxpZHMsIFJlbGlkcyByaWdodF9yZWxpZHMpCit7CisJU3BlY2lhbEpvaW5J bmZvICpzamluZm8gPSBtYWtlTm9kZShTcGVjaWFsSm9pbkluZm8pOworCUFwcGVuZFJlbElu Zm8gKipsZWZ0X2FwcGluZm9zOworCWludAkJCWxlZnRfbmFwcGluZm9zOworCUFwcGVuZFJl bEluZm8gKipyaWdodF9hcHBpbmZvczsKKwlpbnQJCQlyaWdodF9uYXBwaW5mb3M7CisKKwlt ZW1jcHkoc2ppbmZvLCBwYXJlbnRfc2ppbmZvLCBzaXplb2YoU3BlY2lhbEpvaW5JbmZvKSk7 CisJbGVmdF9hcHBpbmZvcyA9IGZpbmRfYXBwaW5mb3NfYnlfcmVsaWRzKHJvb3QsIGxlZnRf cmVsaWRzLAorCQkJCQkJCQkJCQkmbGVmdF9uYXBwaW5mb3MpOworCXJpZ2h0X2FwcGluZm9z ID0gZmluZF9hcHBpbmZvc19ieV9yZWxpZHMocm9vdCwgcmlnaHRfcmVsaWRzLAorCQkJCQkJ CQkJCQkgJnJpZ2h0X25hcHBpbmZvcyk7CisKKwlzamluZm8tPm1pbl9sZWZ0aGFuZCA9IGFk anVzdF9jaGlsZF9yZWxpZHMoc2ppbmZvLT5taW5fbGVmdGhhbmQsCisJCQkJCQkJCQkJCSAg IGxlZnRfbmFwcGluZm9zLCBsZWZ0X2FwcGluZm9zKTsKKwlzamluZm8tPm1pbl9yaWdodGhh bmQgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKHNqaW5mby0+bWluX3JpZ2h0aGFuZCwKKwkJCQkJ CQkJCQkJCXJpZ2h0X25hcHBpbmZvcywKKwkJCQkJCQkJCQkJCXJpZ2h0X2FwcGluZm9zKTsK KwlzamluZm8tPnN5bl9sZWZ0aGFuZCA9IGFkanVzdF9jaGlsZF9yZWxpZHMoc2ppbmZvLT5z eW5fbGVmdGhhbmQsCisJCQkJCQkJCQkJCSAgIGxlZnRfbmFwcGluZm9zLCBsZWZ0X2FwcGlu Zm9zKTsKKwlzamluZm8tPnN5bl9yaWdodGhhbmQgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKHNq aW5mby0+c3luX3JpZ2h0aGFuZCwKKwkJCQkJCQkJCQkJCXJpZ2h0X25hcHBpbmZvcywKKwkJ CQkJCQkJCQkJCXJpZ2h0X2FwcGluZm9zKTsKKwlzamluZm8tPnNlbWlfcmhzX2V4cHJzID0g KExpc3QgKikgYWRqdXN0X2FwcGVuZHJlbF9hdHRycyhyb290LAorCQkJCQkJCQkJCQkJCQkJ IChOb2RlICopIHNqaW5mby0+c2VtaV9yaHNfZXhwcnMsCisJCQkJCQkJCQkJCQkJCQkgcmln aHRfbmFwcGluZm9zLAorCQkJCQkJCQkJCQkJCQkJIHJpZ2h0X2FwcGluZm9zKTsKKworCXBm cmVlKGxlZnRfYXBwaW5mb3MpOworCXBmcmVlKHJpZ2h0X2FwcGluZm9zKTsKKworCXJldHVy biBzamluZm87Cit9CisKKy8qCisgKiBmaW5kX2FwcGluZm9zX2J5X3JlbGlkcworICogCQlG aW5kIEFwcGVuZFJlbEluZm8gc3RydWN0dXJlcyBmb3IgYWxsIHJlbGF0aW9ucyBzcGVjaWZp ZWQgYnkgcmVsaWRzLgorICoKKyAqIFRoZSBBcHBlbmRSZWxJbmZvcyBhcmUgcmV0dXJuZWQg aW4gYW4gYXJyYXksIHdoaWNoIGNhbiBiZSBwZnJlZSdkIGJ5IHRoZQorICogY2FsbGVyLiAq bmFwcGluZm9zIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGFycmF5 LgorICovCitBcHBlbmRSZWxJbmZvICoqCitmaW5kX2FwcGluZm9zX2J5X3JlbGlkcyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcywgaW50ICpuYXBwaW5mb3MpCit7CisJQXBw ZW5kUmVsSW5mbyAqKmFwcGluZm9zOworCWludAkJCWNudCA9IDA7CisJaW50CQkJaTsKKwor CSpuYXBwaW5mb3MgPSBibXNfbnVtX21lbWJlcnMocmVsaWRzKTsKKwlhcHBpbmZvcyA9IChB cHBlbmRSZWxJbmZvICoqKSBwYWxsb2Moc2l6ZW9mKEFwcGVuZFJlbEluZm8gKikgKiAqbmFw cGluZm9zKTsKKworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocmVs aWRzLCBpKSkgPj0gMCkKKwl7CisJCUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSByb290LT5h cHBlbmRfcmVsX2FycmF5W2ldOworCisJCWlmICghYXBwaW5mbykKKwkJCWVsb2coRVJST1Is ICJjaGlsZCByZWwgJWQgbm90IGZvdW5kIGluIGFwcGVuZF9yZWxfYXJyYXkiLCBpKTsKKwor CQlhcHBpbmZvc1tjbnQrK10gPSBhcHBpbmZvOworCX0KKwlyZXR1cm4gYXBwaW5mb3M7Cit9 CisKKy8qCisgKiBtYWtlX2luaF90cmFuc2xhdGlvbl9saXN0CisgKgkgIEJ1aWxkIHRoZSBs aXN0IG9mIHRyYW5zbGF0aW9ucyBmcm9tIHBhcmVudCBWYXJzIHRvIGNoaWxkIFZhcnMgZm9y CisgKgkgIGFuIGluaGVyaXRhbmNlIGNoaWxkLgorICoKKyAqIEZvciBwYXJhbm9pYSdzIHNh a2UsIHdlIG1hdGNoIHR5cGUvY29sbGF0aW9uIGFzIHdlbGwgYXMgYXR0cmlidXRlIG5hbWUu CisgKi8KK3N0YXRpYyB2b2lkCittYWtlX2luaF90cmFuc2xhdGlvbl9saXN0KFR1cGxlRGVz YyBvbGRfdHVwZGVzYywgVHVwbGVEZXNjIG5ld190dXBkZXNjLAorCQkJCQkJICBPaWQgZnJv bV9yZWwsIE9pZCB0b19yZWwsCisJCQkJCQkgIEluZGV4IG5ld3Zhcm5vLCBMaXN0ICoqdHJh bnNsYXRlZF92YXJzKQoreworCUxpc3QJICAgKnZhcnMgPSBOSUw7CisJaW50CQkJb2xkbmF0 dHMgPSBvbGRfdHVwZGVzYy0+bmF0dHM7CisJaW50CQkJbmV3bmF0dHMgPSBuZXdfdHVwZGVz Yy0+bmF0dHM7CisJaW50CQkJb2xkX2F0dG5vOworCWludAkJCW5ld19hdHRubyA9IDA7CisK Kwlmb3IgKG9sZF9hdHRubyA9IDA7IG9sZF9hdHRubyA8IG9sZG5hdHRzOyBvbGRfYXR0bm8r KykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dDsKKwkJY2hhcgkgICAqYXR0bmFtZTsK KwkJT2lkCQkJYXR0dHlwaWQ7CisJCWludDMyCQlhdHR0eXBtb2Q7CisJCU9pZAkJCWF0dGNv bGxhdGlvbjsKKworCQlhdHQgPSBUdXBsZURlc2NBdHRyKG9sZF90dXBkZXNjLCBvbGRfYXR0 bm8pOworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQpCisJCXsKKwkJCS8qIEp1c3QgcHV0IE5V TEwgaW50byB0aGlzIGxpc3QgZW50cnkgKi8KKwkJCXZhcnMgPSBsYXBwZW5kKHZhcnMsIE5V TEwpOworCQkJY29udGludWU7CisJCX0KKwkJYXR0bmFtZSA9IE5hbWVTdHIoYXR0LT5hdHRu YW1lKTsKKwkJYXR0dHlwaWQgPSBhdHQtPmF0dHR5cGlkOworCQlhdHR0eXBtb2QgPSBhdHQt PmF0dHR5cG1vZDsKKwkJYXR0Y29sbGF0aW9uID0gYXR0LT5hdHRjb2xsYXRpb247CisKKwkJ LyoKKwkJICogV2hlbiB3ZSBhcmUgZ2VuZXJhdGluZyB0aGUgInRyYW5zbGF0aW9uIGxpc3Qi IGZvciB0aGUgcGFyZW50IHRhYmxlCisJCSAqIG9mIGFuIGluaGVyaXRhbmNlIHNldCwgbm8g bmVlZCB0byBzZWFyY2ggZm9yIG1hdGNoZXMuCisJCSAqLworCQlpZiAoZnJvbV9yZWwgPT0g dG9fcmVsKQorCQl7CisJCQl2YXJzID0gbGFwcGVuZCh2YXJzLCBtYWtlVmFyKG5ld3Zhcm5v LAorCQkJCQkJCQkJCSAoQXR0ck51bWJlcikgKG9sZF9hdHRubyArIDEpLAorCQkJCQkJCQkJ CSBhdHR0eXBpZCwKKwkJCQkJCQkJCQkgYXR0dHlwbW9kLAorCQkJCQkJCQkJCSBhdHRjb2xs YXRpb24sCisJCQkJCQkJCQkJIDApKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJ ICogT3RoZXJ3aXNlIHdlIGhhdmUgdG8gc2VhcmNoIGZvciB0aGUgbWF0Y2hpbmcgY29sdW1u IGJ5IG5hbWUuCisJCSAqIFRoZXJlJ3Mgbm8gZ3VhcmFudGVlIGl0J2xsIGhhdmUgdGhlIHNh bWUgY29sdW1uIHBvc2l0aW9uLCBiZWNhdXNlCisJCSAqIG9mIGNhc2VzIGxpa2UgQUxURVIg VEFCTEUgQUREIENPTFVNTiBhbmQgbXVsdGlwbGUgaW5oZXJpdGFuY2UuCisJCSAqIEhvd2V2 ZXIsIGluIHNpbXBsZSBjYXNlcywgdGhlIHJlbGF0aXZlIG9yZGVyIG9mIGNvbHVtbnMgaXMg bW9zdGx5CisJCSAqIHRoZSBzYW1lIGluIGJvdGggcmVsYXRpb25zLCBzbyB0cnkgdGhlIGNv bHVtbiBvZiBuZXdyZWxhdGlvbiB0aGF0CisJCSAqIGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0 ZXIgdGhlIG9uZSB0aGF0IHdlIGp1c3QgZm91bmQsIGFuZCBpZiB0aGF0CisJCSAqIGZhaWxz LCBsZXQgc3lzY2FjaGUgaGFuZGxlIGl0LgorCQkgKi8KKwkJaWYgKG5ld19hdHRubyA+PSBu ZXduYXR0cyB8fAorCQkJKGF0dCA9IFR1cGxlRGVzY0F0dHIobmV3X3R1cGRlc2MsIG5ld19h dHRubykpLT5hdHRpc2Ryb3BwZWQgfHwKKwkJCXN0cmNtcChhdHRuYW1lLCBOYW1lU3RyKGF0 dC0+YXR0bmFtZSkpICE9IDApCisJCXsKKwkJCUhlYXBUdXBsZQluZXd0dXA7CisKKwkJCW5l d3R1cCA9IFNlYXJjaFN5c0NhY2hlQXR0TmFtZSh0b19yZWwsIGF0dG5hbWUpOworCQkJaWYg KCFuZXd0dXApCisJCQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIGluaGVyaXRlZCBh dHRyaWJ1dGUgXCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNcIiIsCisJCQkJCSBhdHRuYW1lLCBn ZXRfcmVsX25hbWUodG9fcmVsKSk7CisJCQluZXdfYXR0bm8gPSAoKEZvcm1fcGdfYXR0cmli dXRlKSBHRVRTVFJVQ1QobmV3dHVwKSktPmF0dG51bSAtIDE7CisJCQlSZWxlYXNlU3lzQ2Fj aGUobmV3dHVwKTsKKworCQkJYXR0ID0gVHVwbGVEZXNjQXR0cihuZXdfdHVwZGVzYywgbmV3 X2F0dG5vKTsKKwkJfQorCisJCS8qIEZvdW5kIGl0LCBjaGVjayB0eXBlIGFuZCBjb2xsYXRp b24gbWF0Y2ggKi8KKwkJaWYgKGF0dHR5cGlkICE9IGF0dC0+YXR0dHlwaWQgfHwgYXR0dHlw bW9kICE9IGF0dC0+YXR0dHlwbW9kKQorCQkJZWxvZyhFUlJPUiwgImF0dHJpYnV0ZSBcIiVz XCIgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMgbm90IG1hdGNoIHBhcmVudCdzIHR5cGUiLAor CQkJCSBhdHRuYW1lLCBnZXRfcmVsX25hbWUodG9fcmVsKSk7CisJCWlmIChhdHRjb2xsYXRp b24gIT0gYXR0LT5hdHRjb2xsYXRpb24pCisJCQllbG9nKEVSUk9SLCAiYXR0cmlidXRlIFwi JXNcIiBvZiByZWxhdGlvbiBcIiVzXCIgZG9lcyBub3QgbWF0Y2ggcGFyZW50J3MgY29sbGF0 aW9uIiwKKwkJCQkgYXR0bmFtZSwgZ2V0X3JlbF9uYW1lKHRvX3JlbCkpOworCisJCXZhcnMg PSBsYXBwZW5kKHZhcnMsIG1ha2VWYXIobmV3dmFybm8sCisJCQkJCQkJCQkgKEF0dHJOdW1i ZXIpIChuZXdfYXR0bm8gKyAxKSwKKwkJCQkJCQkJCSBhdHR0eXBpZCwKKwkJCQkJCQkJCSBh dHR0eXBtb2QsCisJCQkJCQkJCQkgYXR0Y29sbGF0aW9uLAorCQkJCQkJCQkJIDApKTsKKwkJ bmV3X2F0dG5vKys7CisJfQorCisJKnRyYW5zbGF0ZWRfdmFycyA9IHZhcnM7Cit9CisKKy8q CisgKiB0cmFuc2xhdGVfY29sX3ByaXZzCisgKgkgIFRyYW5zbGF0ZSBhIGJpdG1hcHNldCBy ZXByZXNlbnRpbmcgcGVyLWNvbHVtbiBwcml2aWxlZ2VzIGZyb20gdGhlCisgKgkgIHBhcmVu dCByZWwncyBhdHRyaWJ1dGUgbnVtYmVyaW5nIHRvIHRoZSBjaGlsZCdzLgorICoKKyAqIFRo ZSBvbmx5IHN1cnByaXNlIGhlcmUgaXMgdGhhdCB3ZSBkb24ndCB0cmFuc2xhdGUgYSBwYXJl bnQgd2hvbGUtcm93CisgKiByZWZlcmVuY2UgaW50byBhIGNoaWxkIHdob2xlLXJvdyByZWZl cmVuY2UuICBUaGF0IHdvdWxkIG1lYW4gcmVxdWlyaW5nCisgKiBwZXJtaXNzaW9ucyBvbiBh bGwgY2hpbGQgY29sdW1ucywgd2hpY2ggaXMgb3Zlcmx5IHN0cmljdCwgc2luY2UgdGhlCisg KiBxdWVyeSBpcyByZWFsbHkgb25seSBnb2luZyB0byByZWZlcmVuY2UgdGhlIGluaGVyaXRl ZCBjb2x1bW5zLiAgSW5zdGVhZAorICogd2Ugc2V0IHRoZSBwZXItY29sdW1uIGJpdHMgZm9y IGFsbCBpbmhlcml0ZWQgY29sdW1ucy4KKyAqLworQml0bWFwc2V0ICoKK3RyYW5zbGF0ZV9j b2xfcHJpdnMoY29uc3QgQml0bWFwc2V0ICpwYXJlbnRfcHJpdnMsCisJCQkJCUxpc3QgKnRy YW5zbGF0ZWRfdmFycykKK3sKKwlCaXRtYXBzZXQgICpjaGlsZF9wcml2cyA9IE5VTEw7CisJ Ym9vbAkJd2hvbGVfcm93OworCWludAkJCWF0dG5vOworCUxpc3RDZWxsICAgKmxjOworCisJ LyogU3lzdGVtIGF0dHJpYnV0ZXMgaGF2ZSB0aGUgc2FtZSBudW1iZXJzIGluIGFsbCB0YWJs ZXMgKi8KKwlmb3IgKGF0dG5vID0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJl ciArIDE7IGF0dG5vIDwgMDsgYXR0bm8rKykKKwl7CisJCWlmIChibXNfaXNfbWVtYmVyKGF0 dG5vIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlciwKKwkJCQkJCSAgcGFy ZW50X3ByaXZzKSkKKwkJCWNoaWxkX3ByaXZzID0gYm1zX2FkZF9tZW1iZXIoY2hpbGRfcHJp dnMsCisJCQkJCQkJCQkJIGF0dG5vIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51 bWJlcik7CisJfQorCisJLyogQ2hlY2sgaWYgcGFyZW50IGhhcyB3aG9sZS1yb3cgcmVmZXJl bmNlICovCisJd2hvbGVfcm93ID0gYm1zX2lzX21lbWJlcihJbnZhbGlkQXR0ck51bWJlciAt IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCisJCQkJCQkJICBwYXJlbnRf cHJpdnMpOworCisJLyogQW5kIG5vdyB0cmFuc2xhdGUgdGhlIHJlZ3VsYXIgdXNlciBhdHRy aWJ1dGVzLCB1c2luZyB0aGUgdmFycyBsaXN0ICovCisJYXR0bm8gPSBJbnZhbGlkQXR0ck51 bWJlcjsKKwlmb3JlYWNoKGxjLCB0cmFuc2xhdGVkX3ZhcnMpCisJeworCQlWYXIJCSAgICp2 YXIgPSBsZmlyc3Rfbm9kZShWYXIsIGxjKTsKKworCQlhdHRubysrOworCQlpZiAodmFyID09 IE5VTEwpCQkvKiBpZ25vcmUgZHJvcHBlZCBjb2x1bW5zICovCisJCQljb250aW51ZTsKKwkJ aWYgKHdob2xlX3JvdyB8fAorCQkJYm1zX2lzX21lbWJlcihhdHRubyAtIEZpcnN0TG93SW52 YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIsCisJCQkJCQkgIHBhcmVudF9wcml2cykpCisJCQlj aGlsZF9wcml2cyA9IGJtc19hZGRfbWVtYmVyKGNoaWxkX3ByaXZzLAorCQkJCQkJCQkJCSB2 YXItPnZhcmF0dG5vIC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcik7CisJ fQorCisJcmV0dXJuIGNoaWxkX3ByaXZzOworfQorCisvKgorICogQWRqdXN0IHRoZSB0YXJn ZXRsaXN0IGVudHJpZXMgb2YgYW4gaW5oZXJpdGVkIFVQREFURSBvcGVyYXRpb24KKyAqCisg KiBUaGUgZXhwcmVzc2lvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZml4ZWQsIGJ1dCB3ZSBoYXZl IHRvIG1ha2Ugc3VyZSB0aGF0CisgKiB0aGUgdGFyZ2V0IHJlc25vcyBtYXRjaCB0aGUgY2hp bGQgdGFibGUgKHRoZXkgbWF5IG5vdCwgaW4gdGhlIGNhc2Ugb2YKKyAqIGEgY29sdW1uIHRo YXQgd2FzIGFkZGVkIGFmdGVyLXRoZS1mYWN0IGJ5IEFMVEVSIFRBQkxFKS4gIEluIHNvbWUg Y2FzZXMKKyAqIHRoaXMgY2FuIGZvcmNlIHVzIHRvIHJlLW9yZGVyIHRoZSB0bGlzdCB0byBw cmVzZXJ2ZSByZXNubyBvcmRlcmluZy4KKyAqIChXZSBkbyBhbGwgdGhpcyB3b3JrIGluIHNw ZWNpYWwgY2FzZXMgc28gdGhhdCBwcmVwdGxpc3QuYyBpcyBmYXN0IGZvcgorICogdGhlIHR5 cGljYWwgY2FzZS4pCisgKgorICogVGhlIGdpdmVuIHRsaXN0IGhhcyBhbHJlYWR5IGJlZW4g dGhyb3VnaCBleHByZXNzaW9uX3RyZWVfbXV0YXRvcjsKKyAqIHRoZXJlZm9yZSB0aGUgVGFy Z2V0RW50cnkgbm9kZXMgYXJlIGZyZXNoIGNvcGllcyB0aGF0IGl0J3Mgb2theSB0bworICog c2NyaWJibGUgb24uCisgKgorICogTm90ZSB0aGF0IHRoaXMgaXMgbm90IG5lZWRlZCBmb3Ig SU5TRVJUIGJlY2F1c2UgSU5TRVJUIGlzbid0IGluaGVyaXRhYmxlLgorICovCitzdGF0aWMg TGlzdCAqCithZGp1c3RfaW5oZXJpdGVkX3RsaXN0KExpc3QgKnRsaXN0LCBBcHBlbmRSZWxJ bmZvICpjb250ZXh0KQoreworCWJvb2wJCWNoYW5nZWRfaXQgPSBmYWxzZTsKKwlMaXN0Q2Vs bCAgICp0bDsKKwlMaXN0CSAgICpuZXdfdGxpc3Q7CisJYm9vbAkJbW9yZTsKKwlpbnQJCQlh dHRybm87CisKKwkvKiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBmb3IgYW4gaW5oZXJpdGFu Y2UgY2FzZSwgbm90IFVOSU9OIEFMTCAqLworCUFzc2VydChPaWRJc1ZhbGlkKGNvbnRleHQt PnBhcmVudF9yZWxvaWQpKTsKKworCS8qIFNjYW4gdGxpc3QgYW5kIHVwZGF0ZSByZXNub3Mg dG8gbWF0Y2ggYXR0bnVtcyBvZiBjaGlsZCByZWwgKi8KKwlmb3JlYWNoKHRsLCB0bGlzdCkK Kwl7CisJCVRhcmdldEVudHJ5ICp0bGUgPSAoVGFyZ2V0RW50cnkgKikgbGZpcnN0KHRsKTsK KwkJVmFyCQkgICAqY2hpbGR2YXI7CisKKwkJaWYgKHRsZS0+cmVzanVuaykKKwkJCWNvbnRp bnVlOwkJCS8qIGlnbm9yZSBqdW5rIGl0ZW1zICovCisKKwkJLyogTG9vayB1cCB0aGUgdHJh bnNsYXRpb24gb2YgdGhpcyBjb2x1bW46IGl0IG11c3QgYmUgYSBWYXIgKi8KKwkJaWYgKHRs ZS0+cmVzbm8gPD0gMCB8fAorCQkJdGxlLT5yZXNubyA+IGxpc3RfbGVuZ3RoKGNvbnRleHQt PnRyYW5zbGF0ZWRfdmFycykpCisJCQllbG9nKEVSUk9SLCAiYXR0cmlidXRlICVkIG9mIHJl bGF0aW9uIFwiJXNcIiBkb2VzIG5vdCBleGlzdCIsCisJCQkJIHRsZS0+cmVzbm8sIGdldF9y ZWxfbmFtZShjb250ZXh0LT5wYXJlbnRfcmVsb2lkKSk7CisJCWNoaWxkdmFyID0gKFZhciAq KSBsaXN0X250aChjb250ZXh0LT50cmFuc2xhdGVkX3ZhcnMsIHRsZS0+cmVzbm8gLSAxKTsK KwkJaWYgKGNoaWxkdmFyID09IE5VTEwgfHwgIUlzQShjaGlsZHZhciwgVmFyKSkKKwkJCWVs b2coRVJST1IsICJhdHRyaWJ1dGUgJWQgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMgbm90IGV4 aXN0IiwKKwkJCQkgdGxlLT5yZXNubywgZ2V0X3JlbF9uYW1lKGNvbnRleHQtPnBhcmVudF9y ZWxvaWQpKTsKKworCQlpZiAodGxlLT5yZXNubyAhPSBjaGlsZHZhci0+dmFyYXR0bm8pCisJ CXsKKwkJCXRsZS0+cmVzbm8gPSBjaGlsZHZhci0+dmFyYXR0bm87CisJCQljaGFuZ2VkX2l0 ID0gdHJ1ZTsKKwkJfQorCX0KKworCS8qCisJICogSWYgd2UgY2hhbmdlZCBhbnl0aGluZywg cmUtc29ydCB0aGUgdGxpc3QgYnkgcmVzbm8sIGFuZCBtYWtlIHN1cmUKKwkgKiByZXNqdW5r IGVudHJpZXMgaGF2ZSByZXNub3MgYWJvdmUgdGhlIGxhc3QgcmVhbCByZXNuby4gIFRoZSBz b3J0CisJICogYWxnb3JpdGhtIGlzIGEgYml0IHN0dXBpZCwgYnV0IGZvciBzdWNoIGEgc2Vs ZG9tLXRha2VuIHBhdGgsIHNtYWxsIGlzCisJICogcHJvYmFibHkgYmV0dGVyIHRoYW4gZmFz dC4KKwkgKi8KKwlpZiAoIWNoYW5nZWRfaXQpCisJCXJldHVybiB0bGlzdDsKKworCW5ld190 bGlzdCA9IE5JTDsKKwltb3JlID0gdHJ1ZTsKKwlmb3IgKGF0dHJubyA9IDE7IG1vcmU7IGF0 dHJubysrKQorCXsKKwkJbW9yZSA9IGZhbHNlOworCQlmb3JlYWNoKHRsLCB0bGlzdCkKKwkJ eworCQkJVGFyZ2V0RW50cnkgKnRsZSA9IChUYXJnZXRFbnRyeSAqKSBsZmlyc3QodGwpOwor CisJCQlpZiAodGxlLT5yZXNqdW5rKQorCQkJCWNvbnRpbnVlOwkJLyogaWdub3JlIGp1bmsg aXRlbXMgKi8KKworCQkJaWYgKHRsZS0+cmVzbm8gPT0gYXR0cm5vKQorCQkJCW5ld190bGlz dCA9IGxhcHBlbmQobmV3X3RsaXN0LCB0bGUpOworCQkJZWxzZSBpZiAodGxlLT5yZXNubyA+ IGF0dHJubykKKwkJCQltb3JlID0gdHJ1ZTsKKwkJfQorCX0KKworCWZvcmVhY2godGwsIHRs aXN0KQorCXsKKwkJVGFyZ2V0RW50cnkgKnRsZSA9IChUYXJnZXRFbnRyeSAqKSBsZmlyc3Qo dGwpOworCisJCWlmICghdGxlLT5yZXNqdW5rKQorCQkJY29udGludWU7CQkJLyogaGVyZSwg aWdub3JlIG5vbi1qdW5rIGl0ZW1zICovCisKKwkJdGxlLT5yZXNubyA9IGF0dHJubzsKKwkJ bmV3X3RsaXN0ID0gbGFwcGVuZChuZXdfdGxpc3QsIHRsZSk7CisJCWF0dHJubysrOworCX0K KworCXJldHVybiBuZXdfdGxpc3Q7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wYXRobm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0 aG5vZGUuYwppbmRleCBkNTBkODZiMjUyLi44Y2U4ODg3NmM0IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3BhdGhub2RlLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJm b3JlaWduL2Zkd2FwaS5oIgogI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIKICNpbmNs dWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvYXBwZW5kaW5m by5oIgogI2luY2x1ZGUgIm9wdGltaXplci9jbGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL2Nvc3QuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCBjMjNkYjlkNzhkLi41MmExMWY0MzRm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKKysr IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0xNyw2ICsxNyw3 IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNp bmNsdWRlICJvcHRpbWl6ZXIvYXBwZW5kaW5mby5oIgogI2luY2x1ZGUgIm9wdGltaXplci9j bGF1c2VzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2Nvc3QuaCIKICNpbmNsdWRlICJvcHRp bWl6ZXIvcGF0aG5vZGUuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmlu Zy9wYXJ0cHJ1bmUuYyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYwpp bmRleCBiZjE3YWUyMmJhLi45MTIwZmNiMGQzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9w YXJ0aXRpb25pbmcvcGFydHBydW5lLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5n L3BhcnRwcnVuZS5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1 bmNzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2FwcGVuZGluZm8uaCIKICNpbmNsdWRlICJv cHRpbWl6ZXIvY2xhdXNlcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5j bHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9v cHRpbWl6ZXIvYXBwZW5kLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvYXBwZW5kLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNWI0NDUzMDI3OQotLS0gL2Rl di9udWxsCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9hcHBlbmQuaApAQCAtMCwwICsx LDI4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBhcHBlbmQuaAorICoJICBw cm90b3R5cGVzIGZvciBhcHBlbmQuYy4KKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0 IChjKSAxOTk2LTIwMTgsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL29wdGltaXplci9hcHBlbmQu aAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaWZuZGVmIEFQUEVORF9ICisj ZGVmaW5lIEFQUEVORF9ICisKKyNpbmNsdWRlICJub2Rlcy9yZWxhdGlvbi5oIgorCisvKgor ICogYXBwZW5kLmMKKyAqCSAgdXRpbGl0aWVzIGZvciBkZWFsaW5nIHdpdGggYXBwZW5kIHJl bGF0aW9ucworICovCitleHRlcm4gdm9pZCBleHBhbmRfYXBwZW5kX3JlbChQbGFubmVySW5m byAqcm9vdCwKKwkJCQkJCSBSZWxPcHRJbmZvICpyZWwsCisJCQkJCQkgUmFuZ2VUYmxFbnRy eSAqcnRlLAorCQkJCQkJIEluZGV4IHJ0aSk7CisKKyNlbmRpZgkJCQkJCQkvKiBBUFBFTkRf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2FwcGVuZGluZm8uaCBi L3NyYy9pbmNsdWRlL29wdGltaXplci9hcHBlbmRpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uZTIwNWU3OGU2ZAotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbmNsdWRlL29wdGltaXplci9hcHBlbmRpbmZvLmgKQEAgLTAsMCArMSw0MyBAQAorLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogYXBwZW5kaW5mby5oCisgKgkgIFJvdXRpbmVz IGZvciBtYXBwaW5nIGV4cHJlc3Npb25zIGJldHdlZW4gYXBwZW5kIHJlbCBwYXJlbnQocykg YW5kCisgKgkgIGNoaWxkcmVuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMTgsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL29wdGltaXplci9hcHBlbmRpbmZvLmgKKyAq CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworI2lmbmRlZiBBUFBFTkRJTkZPX0gKKyNk ZWZpbmUgQVBQRU5ESU5GT19ICisKKyNpbmNsdWRlICJub2Rlcy9wbGFubm9kZXMuaCIKKyNp bmNsdWRlICJub2Rlcy9yZWxhdGlvbi5oIgorI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgi CisKK2V4dGVybiBBcHBlbmRSZWxJbmZvICptYWtlX2FwcGVuZF9yZWxfaW5mbyhSZWxPcHRJ bmZvICpwYXJlbnRyZWwsCisJCQkJCSBSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCisJCQkJ CSBUdXBsZURlc2MgY2hpbGRkZXNjLCBPaWQgY2hpbGRvaWQsIE9pZCBjaGlsZHJlbHR5cGUs CisJCQkJCSBJbmRleCBjaGlsZFJUaW5kZXgpOworZXh0ZXJuIEJpdG1hcHNldCAqdHJhbnNs YXRlX2NvbF9wcml2cyhjb25zdCBCaXRtYXBzZXQgKnBhcmVudF9wcml2cywKKwkJCQkJTGlz dCAqdHJhbnNsYXRlZF92YXJzKTsKK2V4dGVybiBOb2RlICphZGp1c3RfYXBwZW5kcmVsX2F0 dHJzKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpub2RlLAorCQkJCQkgICBpbnQgbmFwcGlu Zm9zLCBBcHBlbmRSZWxJbmZvICoqYXBwaW5mb3MpOworCitleHRlcm4gTm9kZSAqYWRqdXN0 X2FwcGVuZHJlbF9hdHRyc19tdWx0aWxldmVsKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpu b2RlLAorCQkJCQkJCQkgIFJlbGlkcyBjaGlsZF9yZWxpZHMsCisJCQkJCQkJCSAgUmVsaWRz IHRvcF9wYXJlbnRfcmVsaWRzKTsKKworZXh0ZXJuIEFwcGVuZFJlbEluZm8gKipmaW5kX2Fw cGluZm9zX2J5X3JlbGlkcyhQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCVJlbGlkcyByZWxp ZHMsIGludCAqbmFwcGluZm9zKTsKKworZXh0ZXJuIFNwZWNpYWxKb2luSW5mbyAqYnVpbGRf Y2hpbGRfam9pbl9zamluZm8oUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQlTcGVjaWFsSm9p bkluZm8gKnBhcmVudF9zamluZm8sCisJCQkJCQlSZWxpZHMgbGVmdF9yZWxpZHMsIFJlbGlk cyByaWdodF9yZWxpZHMpOworZXh0ZXJuIFJlbGlkcyBhZGp1c3RfY2hpbGRfcmVsaWRzX211 bHRpbGV2ZWwoUGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMsCisJCQkJCQkJICAg UmVsaWRzIGNoaWxkX3JlbGlkcywgUmVsaWRzIHRvcF9wYXJlbnRfcmVsaWRzKTsKKworI2Vu ZGlmCQkJCQkJCS8qIEFQUEVORElORk9fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv b3B0aW1pemVyL3ByZXAuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wcmVwLmgKaW5kZXgg ZThlMjFlMmVkNS4uMGUyY2RiYzUzOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3ByZXAuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcHJlcC5oCkBAIC00Niwy NiArNDYsNSBAQCBleHRlcm4gUGxhblJvd01hcmsgKmdldF9wbGFuX3Jvd21hcmsoTGlzdCAq cm93bWFya3MsIEluZGV4IHJ0aW5kZXgpOwogICogcHJvdG90eXBlcyBmb3IgcHJlcHVuaW9u LmMKICAqLwogZXh0ZXJuIFJlbE9wdEluZm8gKnBsYW5fc2V0X29wZXJhdGlvbnMoUGxhbm5l ckluZm8gKnJvb3QpOwotZXh0ZXJuIHZvaWQgZXhwYW5kX2FwcGVuZF9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsCi0JCQkJCQkgUmVsT3B0SW5mbyAqcmVsLAotCQkJCQkJIFJhbmdlVGJsRW50 cnkgKnJ0ZSwKLQkJCQkJCSBJbmRleCBydGkpOwotZXh0ZXJuIE5vZGUgKmFkanVzdF9hcHBl bmRyZWxfYXR0cnMoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKm5vZGUsCi0JCQkJCSAgIGlu dCBuYXBwaW5mb3MsIEFwcGVuZFJlbEluZm8gKiphcHBpbmZvcyk7Ci1leHRlcm4gQXBwZW5k UmVsSW5mbyAqbWFrZV9hcHBlbmRfcmVsX2luZm8oUmVsT3B0SW5mbyAqcGFyZW50cmVsLAot CQkJCQkgUmFuZ2VUYmxFbnRyeSAqcGFyZW50cnRlLAotCQkJCQkgVHVwbGVEZXNjIGNoaWxk ZGVzYywgT2lkIGNoaWxkb2lkLCBPaWQgY2hpbGRyZWx0eXBlLAotCQkJCQkgSW5kZXggY2hp bGRSVGluZGV4KTsKLWV4dGVybiBOb2RlICphZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211bHRp bGV2ZWwoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKm5vZGUsCi0JCQkJCQkJCSAgUmVsaWRz IGNoaWxkX3JlbGlkcywKLQkJCQkJCQkJICBSZWxpZHMgdG9wX3BhcmVudF9yZWxpZHMpOwog Ci1leHRlcm4gQXBwZW5kUmVsSW5mbyAqKmZpbmRfYXBwaW5mb3NfYnlfcmVsaWRzKFBsYW5u ZXJJbmZvICpyb290LAotCQkJCQkJUmVsaWRzIHJlbGlkcywgaW50ICpuYXBwaW5mb3MpOwot Ci1leHRlcm4gU3BlY2lhbEpvaW5JbmZvICpidWlsZF9jaGlsZF9qb2luX3NqaW5mbyhQbGFu bmVySW5mbyAqcm9vdCwKLQkJCQkJCVNwZWNpYWxKb2luSW5mbyAqcGFyZW50X3NqaW5mbywK LQkJCQkJCVJlbGlkcyBsZWZ0X3JlbGlkcywgUmVsaWRzIHJpZ2h0X3JlbGlkcyk7Ci1leHRl cm4gUmVsaWRzIGFkanVzdF9jaGlsZF9yZWxpZHNfbXVsdGlsZXZlbChQbGFubmVySW5mbyAq cm9vdCwgUmVsaWRzIHJlbGlkcywKLQkJCQkJCQkgICBSZWxpZHMgY2hpbGRfcmVsaWRzLCBS ZWxpZHMgdG9wX3BhcmVudF9yZWxpZHMpOwogI2VuZGlmCQkJCQkJCS8qIFBSRVBfSCAqLwot LSAKMi4xMS4wCgo= --------------E34CCD0679090A92C6C33EB0 Content-Type: text/plain; charset=UTF-8; name="v5-0005-Teach-planner-to-only-process-unpruned-partitions.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v5-0005-Teach-planner-to-only-process-unpruned-partitions.pa"; filename*1="tch" RnJvbSBiODY5ZGYxNmFkNTZlYjc5NzAwODVmZTZjYmYyMGNkMGQ1YWIzYmU4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAxNSBPY3QgMjAxOCAxMDo1OToyNCArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djUgNS82XSBUZWFjaCBwbGFubmVyIHRvIG9ubHkgcHJvY2VzcyB1bnBydW5lZCBwYXJ0aXRp b25zCgpUaGlzIGFkZHMgYSBiaXRtYXBzZXQgZmllbGQgbGl2ZV9wYXJ0cyB0byBSZWxPcHRJ bmZvIGFuZCBzdG9yZXMKdGhlIHBhcnRpdGlvbiBpbmRleGVzIG9mIG5vbi1kdW1teSBwYXJ0 aXRpb25zIGluIGl0LCBtZWFuaW5nIGl0CmNvbnRhaW5zIGluZGV4ZXMgb2Ygb25seSB0aG9z ZSBwYXJ0aXRpb25zIHRoYXQgaGF2ZSBhIG5vbi1OVUxMClJlbE9wdEluZm8gcHJlc2VudCBp biBpdHMgcGFyZW50J3MgUmVsT3B0SW5mbydzIHBhcnRfcmVscyBhcnJheS4KClRoaXMgc3Bl ZWRzIHVwIHByb2Nlc3NpbmcgcGFydGl0aW9uZWQgdGFibGUncyBwYXJ0aXRpb25zIGNvbXBh cmVkCnRvIGdvaW5nIHRocm91Z2ggdGhlIHdob2xlIHBhcnRfcmVscyBhcnJheSBpbiBhIG51 bWJlciBvZiBwbGFjZXMuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJl bHMuYyB8ICAzICsrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICB8 IDE4ICsrKysrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBw ZW5kLmMgICB8ICA4ICsrKysrKysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxu b2RlLmMgIHwgIDMgKysrCiBzcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMg IHwgMTggKysrKystLS0tLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5o ICAgICAgICAgIHwgIDIgKysKIDYgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwg MjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvam9pbnJlbHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMK aW5kZXggNmUzMjFlYzllNy4uNzY1MzFhMDVjZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9qb2lucmVscy5jCkBAIC0xNDI0LDYgKzE0MjQsOSBAQCB0cnlfcGFydGl0aW9ud2lz ZV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwxLCBSZWxPcHRJbmZv ICpyZWwyLAogCQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhfcGF0aHMocm9vdCwgY2hpbGRfcmVs MSwgY2hpbGRfcmVsMiwKIAkJCQkJCQkJCWNoaWxkX2pvaW5yZWwsIGNoaWxkX3NqaW5mbywK IAkJCQkJCQkJCWNoaWxkX3Jlc3RyaWN0bGlzdCk7CisJCWlmICghSVNfRFVNTVlfUkVMKGNo aWxkX2pvaW5yZWwpKQorCQkJam9pbnJlbC0+bGl2ZV9wYXJ0cyA9IGJtc19hZGRfbWVtYmVy KGpvaW5yZWwtPmxpdmVfcGFydHMsCisJCQkJCQkJCQkJCQkgY250X3BhcnRzKTsKIAl9CiB9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCAyMTZjYWRmYmE5 Li5jNjBjNDkxYjYxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9w bGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBA IC02NzY2LDcgKzY3NjYsOSBAQCBhcHBseV9zY2Fuam9pbl90YXJnZXRfdG9fcGF0aHMoUGxh bm5lckluZm8gKnJvb3QsCiAJCUxpc3QJICAgKmxpdmVfY2hpbGRyZW4gPSBOSUw7CiAKIAkJ LyogQWRqdXN0IGVhY2ggcGFydGl0aW9uLiAqLwotCQlmb3IgKHBhcnRpdGlvbl9pZHggPSAw OyBwYXJ0aXRpb25faWR4IDwgcmVsLT5ucGFydHM7IHBhcnRpdGlvbl9pZHgrKykKKwkJcGFy dGl0aW9uX2lkeCA9IC0xOworCQl3aGlsZSAoKHBhcnRpdGlvbl9pZHggPSBibXNfbmV4dF9t ZW1iZXIocmVsLT5saXZlX3BhcnRzLAorCQkJCQkJCQkJCQkJcGFydGl0aW9uX2lkeCkpID49 IDApCiAJCXsKIAkJCVJlbE9wdEluZm8gKmNoaWxkX3JlbCA9IHJlbC0+cGFydF9yZWxzW3Bh cnRpdGlvbl9pZHhdOwogCQkJTGlzdENlbGwgICAqbGM7CkBAIC02Nzc0LDkgKzY3NzYsNyBA QCBhcHBseV9zY2Fuam9pbl90YXJnZXRfdG9fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJ CQlpbnQJCQluYXBwaW5mb3M7CiAJCQlMaXN0CSAgICpjaGlsZF9zY2Fuam9pbl90YXJnZXRz ID0gTklMOwogCi0JCQkvKiBTa2lwIHByb2Nlc3NpbmcgcHJ1bmVkIHBhcnRpdGlvbnMuICov Ci0JCQlpZiAoY2hpbGRfcmVsID09IE5VTEwpCi0JCQkJY29udGludWU7CisJCQlBc3NlcnQo Y2hpbGRfcmVsICE9IE5VTEwpOwogCiAJCQkvKiBUcmFuc2xhdGUgc2Nhbi9qb2luIHRhcmdl dHMgZm9yIHRoaXMgY2hpbGQuICovCiAJCQlhcHBpbmZvcyA9IGZpbmRfYXBwaW5mb3NfYnlf cmVsaWRzKHJvb3QsIGNoaWxkX3JlbC0+cmVsaWRzLApAQCAtNjg1Nyw3ICs2ODU3LDYgQEAg Y3JlYXRlX3BhcnRpdGlvbndpc2VfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8gKnJvb3Qs CiAJCQkJCQkJCQlQYXJ0aXRpb253aXNlQWdncmVnYXRlVHlwZSBwYXR5cGUsCiAJCQkJCQkJ CQlHcm91cFBhdGhFeHRyYURhdGEgKmV4dHJhKQogewotCWludAkJCW5wYXJ0cyA9IGlucHV0 X3JlbC0+bnBhcnRzOwogCWludAkJCWNudF9wYXJ0czsKIAlMaXN0CSAgICpncm91cGVkX2xp dmVfY2hpbGRyZW4gPSBOSUw7CiAJTGlzdAkgICAqcGFydGlhbGx5X2dyb3VwZWRfbGl2ZV9j aGlsZHJlbiA9IE5JTDsKQEAgLTY4NjksNyArNjg2OCw5IEBAIGNyZWF0ZV9wYXJ0aXRpb253 aXNlX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkgICBwYXJ0aWFsbHlf Z3JvdXBlZF9yZWwgIT0gTlVMTCk7CiAKIAkvKiBBZGQgcGF0aHMgZm9yIHBhcnRpdGlvbndp c2UgYWdncmVnYXRpb24vZ3JvdXBpbmcuICovCi0JZm9yIChjbnRfcGFydHMgPSAwOyBjbnRf cGFydHMgPCBucGFydHM7IGNudF9wYXJ0cysrKQorCWNudF9wYXJ0cyA9IC0xOworCXdoaWxl ICgoY250X3BhcnRzID0gYm1zX25leHRfbWVtYmVyKGlucHV0X3JlbC0+bGl2ZV9wYXJ0cywK KwkJCQkJCQkJCQljbnRfcGFydHMpKSA+PSAwKQogCXsKIAkJUmVsT3B0SW5mbyAqY2hpbGRf aW5wdXRfcmVsID0gaW5wdXRfcmVsLT5wYXJ0X3JlbHNbY250X3BhcnRzXTsKIAkJUGF0aFRh cmdldCAqY2hpbGRfdGFyZ2V0ID0gY29weV9wYXRodGFyZ2V0KHRhcmdldCk7CkBAIC02ODc5 LDkgKzY4ODAsOCBAQCBjcmVhdGVfcGFydGl0aW9ud2lzZV9ncm91cGluZ19wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwKIAkJUmVsT3B0SW5mbyAqY2hpbGRfZ3JvdXBlZF9yZWw7CiAJCVJl bE9wdEluZm8gKmNoaWxkX3BhcnRpYWxseV9ncm91cGVkX3JlbDsKIAotCQkvKiBTa2lwIHBy b2Nlc3NpbmcgcHJ1bmVkIHBhcnRpdGlvbnMuICovCi0JCWlmIChjaGlsZF9pbnB1dF9yZWwg PT0gTlVMTCkKLQkJCWNvbnRpbnVlOworCQkvKiBBIGxpdmUgcGFydGl0aW9uIG11c3QgaGF2 ZSBhIFJlbE9wdEluZm8uICovCisJCUFzc2VydChjaGlsZF9pbnB1dF9yZWwgIT0gTlVMTCk7 CiAKIAkJLyogSW5wdXQgY2hpbGQgcmVsIG11c3QgaGF2ZSBhIHBhdGggKi8KIAkJQXNzZXJ0 KGNoaWxkX2lucHV0X3JlbC0+cGF0aGxpc3QgIT0gTklMKTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvYXBwZW5kLmMKaW5kZXggYmJjNTc5ODE3YS4uMmNhOGU4ZDBmZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kLmMKQEAgLTMwNyw2ICszMDcsNyBAQCBleHBhbmRf cGFydGl0aW9uZWRfcnRlbnRyeShQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAq cGFyZW50cnRlLAogCiAJLyogUGVyZm9ybSBwcnVuaW5nLiAqLwogCXBhcnRpbmRleGVzID0g cHJ1bmVfYXBwZW5kX3JlbF9wYXJ0aXRpb25zKHBhcmVudHJlbCk7CisJcGFyZW50cmVsLT5s aXZlX3BhcnRzID0gcGFydGluZGV4ZXM7CiAKIAkvKiBNdXN0IGV4cGFuZCBQbGFubmVySW5m byBhcnJheXMgYmVmb3JlIHdlIGNhbiBhZGQgY2hpbGRyZW4uICovCiAJZXhwYW5kX3BsYW5u ZXJfYXJyYXlzKHJvb3QsIGJtc19udW1fbWVtYmVycyhwYXJ0aW5kZXhlcykpOwpAQCAtMzQ3 LDYgKzM0OCwxMyBAQCBleHBhbmRfcGFydGl0aW9uZWRfcnRlbnRyeShQbGFubmVySW5mbyAq cm9vdCwgUmFuZ2VUYmxFbnRyeSAqcGFyZW50cnRlLAogCQlBc3NlcnQoY2hpbGRyZWwgIT0g TlVMTCk7CiAJCXBhcmVudHJlbC0+cGFydF9yZWxzW2ldID0gY2hpbGRyZWw7CiAKKwkJLyoK KwkJICogSWYgcGFydGl0aW9uIGlzIGV4Y2x1ZGVkIGJ5IGNvbnN0cmFpbnRzLCByZW1vdmUg aXQgZnJvbQorCQkgKiBsaXZlX3BhcnRzLCB0b28uCisJCSAqLworCQlpZiAoSVNfRFVNTVlf UkVMKGNoaWxkcmVsKSkKKwkJCXBhcmVudHJlbC0+bGl2ZV9wYXJ0cyA9IGJtc19kZWxfbWVt YmVyKHBhcmVudHJlbC0+bGl2ZV9wYXJ0cywgaSk7CisKIAkJLyogQ2xvc2UgY2hpbGQgcmVs YXRpb25zLCBidXQga2VlcCBsb2NrcyAqLwogCQloZWFwX2Nsb3NlKG5ld3JlbGF0aW9uLCBO b0xvY2spOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Jl bG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCA1 MmExMWY0MzRmLi42YzdlYWZlNmRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9yZWxub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVs bm9kZS5jCkBAIC0xNzQ4LDYgKzE3NDgsOSBAQCBidWlsZF9qb2lucmVsX3BhcnRpdGlvbl9p bmZvKFJlbE9wdEluZm8gKmpvaW5yZWwsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAkJam9p bnJlbC0+cGFydGV4cHJzW2NudF0gPSBwYXJ0ZXhwcjsKIAkJam9pbnJlbC0+bnVsbGFibGVf cGFydGV4cHJzW2NudF0gPSBudWxsYWJsZV9wYXJ0ZXhwcjsKIAl9CisKKwkvKiBQYXJ0aXRp b25zIHdpbGwgYmUgYWRkZWQgYnkgdHJ5X3BhcnRpdGlvbndpc2Vfam9pbi4gKi8KKwlqb2lu cmVsLT5saXZlX3BhcnRzID0gTlVMTDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmlu Zy9wYXJ0cHJ1bmUuYwppbmRleCA5MTIwZmNiMGQzLi4yZWQ1YzllOGRkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKKysrIGIvc3JjL2JhY2tl bmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCkBAIC00NDEsMjkgKzQ0MSwyMSBAQCBtYWtl X3BhcnRpdGlvbmVkcmVsX3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcGFyZW50cmVsLAogCQltZW1zZXQoc3VicGxhbl9tYXAsIC0xLCBucGFydHMgKiBzaXpl b2YoaW50KSk7CiAJCXN1YnBhcnRfbWFwID0gKGludCAqKSBwYWxsb2MobnBhcnRzICogc2l6 ZW9mKGludCkpOwogCQltZW1zZXQoc3VicGFydF9tYXAsIC0xLCBucGFydHMgKiBzaXplb2Yo aW50KSk7Ci0JCXByZXNlbnRfcGFydHMgPSBOVUxMOworCQlwcmVzZW50X3BhcnRzID0gYm1z X2NvcHkoc3VicGFydC0+bGl2ZV9wYXJ0cyk7CiAKLQkJZm9yIChpID0gMDsgaSA8IG5wYXJ0 czsgaSsrKQorCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwcmVz ZW50X3BhcnRzLCBpKSkgPj0gMCkKIAkJewogCQkJUmVsT3B0SW5mbyAqcGFydHJlbCA9IHN1 YnBhcnQtPnBhcnRfcmVsc1tpXTsKIAkJCWludAkJCXN1YnBsYW5pZHg7CiAJCQlpbnQJCQlz dWJwYXJ0aWR4OwogCi0JCQkvKiBTa2lwIHByb2Nlc3NpbmcgcHJ1bmVkIHBhcnRpdGlvbnMu ICovCi0JCQlpZiAocGFydHJlbCA9PSBOVUxMKQotCQkJCWNvbnRpbnVlOwotCisJCQlBc3Nl cnQocGFydHJlbCAhPSBOVUxMKTsKIAkJCXN1YnBsYW5fbWFwW2ldID0gc3VicGxhbmlkeCA9 IHJlbGlkX3N1YnBsYW5fbWFwW3BhcnRyZWwtPnJlbGlkXSAtIDE7CiAJCQlzdWJwYXJ0X21h cFtpXSA9IHN1YnBhcnRpZHggPSByZWxpZF9zdWJwYXJ0X21hcFtwYXJ0cmVsLT5yZWxpZF0g LSAxOworCQkJLyogUmVjb3JkIGZpbmRpbmcgdGhpcyBzdWJwbGFuICovCiAJCQlpZiAoc3Vi cGxhbmlkeCA+PSAwKQotCQkJewotCQkJCXByZXNlbnRfcGFydHMgPSBibXNfYWRkX21lbWJl cihwcmVzZW50X3BhcnRzLCBpKTsKLQotCQkJCS8qIFJlY29yZCBmaW5kaW5nIHRoaXMgc3Vi cGxhbiAgKi8KIAkJCQlzdWJwbGFuc2ZvdW5kID0gYm1zX2FkZF9tZW1iZXIoc3VicGxhbnNm b3VuZCwgc3VicGxhbmlkeCk7Ci0JCQl9Ci0JCQllbHNlIGlmIChzdWJwYXJ0aWR4ID49IDAp Ci0JCQkJcHJlc2VudF9wYXJ0cyA9IGJtc19hZGRfbWVtYmVyKHByZXNlbnRfcGFydHMsIGkp OwogCQl9CiAKIAkJcGluZm8gPSBtYWtlTm9kZShQYXJ0aXRpb25lZFJlbFBydW5lSW5mbyk7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcmVsYXRpb24uaAppbmRleCA2YjYxNGU0Nzk0Li43ZTVlNGUyYzZhIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oCisrKyBiL3NyYy9pbmNsdWRl L25vZGVzL3JlbGF0aW9uLmgKQEAgLTcxNCw2ICs3MTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBS ZWxPcHRJbmZvCiAJT2lkCQkgICAqcGFydF9vaWRzOwkJLyogcGFydGl0aW9uIE9JRHMgKi8K IAlzdHJ1Y3QgUmVsT3B0SW5mbyAqKnBhcnRfcmVsczsJLyogQXJyYXkgb2YgUmVsT3B0SW5m b3Mgb2YgcGFydGl0aW9ucywKIAkJCQkJCQkJCSAqIHN0b3JlZCBpbiB0aGUgc2FtZSBvcmRl ciBvZiBib3VuZHMgKi8KKwlCaXRtYXBzZXQgICpsaXZlX3BhcnRzOwkJLyogU2V0IG9mIGxp dmUgcGFydGl0aW9uczsgY29udGFpbnMgaW5kZXhlcworCQkJCQkJCQkgKiBpbnRvIHBhcnRf cmVscyBhcnJheSAqLwogCUxpc3QJICAqKnBhcnRleHByczsJCS8qIE5vbi1udWxsYWJsZSBw YXJ0aXRpb24ga2V5IGV4cHJlc3Npb25zLiAqLwogCUxpc3QJICAqKm51bGxhYmxlX3BhcnRl eHByczsgLyogTnVsbGFibGUgcGFydGl0aW9uIGtleSBleHByZXNzaW9ucy4gKi8KIAlMaXN0 CSAgICpwYXJ0aXRpb25lZF9jaGlsZF9yZWxzOyAvKiBMaXN0IG9mIFJUIGluZGV4ZXMuICov Ci0tIAoyLjExLjAKCg== --------------E34CCD0679090A92C6C33EB0 Content-Type: text/plain; charset=UTF-8; name="v5-0006-Do-not-lock-all-partitions-at-the-beginning.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v5-0006-Do-not-lock-all-partitions-at-the-beginning.patch" RnJvbSAyODlmZmYxYTUwZGVlYWQ0YjJiNzQzZDYyMDU2YjYxM2E5MTZjMjIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAxMiBPY3QgMjAxOCAxOToxMjo1MyArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djUgNi82XSBEbyBub3QgbG9jayBhbGwgcGFydGl0aW9ucyBhdCB0aGUgYmVnaW5uaW5nCgot LS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZC5jIHwgNyArLS0tLS0tCiAx IGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmQuYwppbmRleCAyY2E4ZThkMGZmLi5mMTYyN2FlZjMz IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmQuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmQuYwpAQCAtMjkxLDEwICsyOTEs NiBAQCBleHBhbmRfcGFydGl0aW9uZWRfcnRlbnRyeShQbGFubmVySW5mbyAqcm9vdCwgUmFu Z2VUYmxFbnRyeSAqcGFyZW50cnRlLAogCQkJCQkJCQkJcGFyZW50cmVsLT5pbmhfcm9vdF9w YXJlbnQgOgogCQkJCQkJCQkJcGFyZW50UlRpbmRleDsKIAotCS8qIElmIHJvb3QgcGFydGl0 aW9uZWQgdGFibGUsIGxvY2sgKmFsbCogcGFydGl0aW9ucyBpbiB0aGUgdHJlZS4gKi8KLQlp ZiAocGFyZW50UlRpbmRleCA9PSByb290UGFyZW50UlRpbmRleCkKLQkJKHZvaWQpIGZpbmRf YWxsX2luaGVyaXRvcnMocGFyZW50cnRlLT5yZWxpZCwgbG9ja21vZGUsIE5VTEwpOwotCiAJ LyoKIAkgKiBJbml0aWFsaXplIHBhcnRpdGlvbmVkX2NoaWxkX3JlbHMgdG8gY29udGFpbiB0 aGlzIFJUIGluZGV4LgogCSAqCkBAIC0zMjgsOCArMzI0LDcgQEAgZXhwYW5kX3BhcnRpdGlv bmVkX3J0ZW50cnkoUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnBhcmVudHJ0 ZSwKIAkJUmVsYXRpb24JbmV3cmVsYXRpb247CiAJCVJlbE9wdEluZm8gKmNoaWxkcmVsOwog Ci0JCS8qIEFscmVhZHkgbG9ja2VkIGFib3ZlLiAqLwotCQluZXdyZWxhdGlvbiA9IGhlYXBf b3BlbihjaGlsZE9JRCwgTm9Mb2NrKTsKKwkJbmV3cmVsYXRpb24gPSBoZWFwX29wZW4oY2hp bGRPSUQsIGxvY2ttb2RlKTsKIAkJQXNzZXJ0KCFSRUxBVElPTl9JU19PVEhFUl9URU1QKG5l d3JlbGF0aW9uKSk7CiAKIAkJLyoKLS0gCjIuMTEuMAoK --------------E34CCD0679090A92C6C33EB0--