From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: Re: [PATCH] [RFC] Credit2 scheduler prototype Date: Wed, 13 Jan 2010 14:48:11 +0000 Message-ID: References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001517475b500b4791047d0cdc93 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org --001517475b500b4791047d0cdc93 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Keir, What do you think of the attached patches? The first implements something like what you suggest below, but instead of using a sort of "hack" with VPF_migrate, it makes a proper "context_saved" SCHED_OP callback. The second addresses the fact that when sharing runqueues, v->processor may change quickly without an explicit migrate. The last two are the credit2 hypervisor and tool patches, which use these two changes (for reference). I think these patches should be basically NOOP for the existing schedulers, so as far as I'm concerned they're ready to be merged as soon as you're happy with them. Peace, -George On Tue, Dec 8, 2009 at 6:20 PM, Keir Fraser wro= te: > On 08/12/2009 14:48, "George Dunlap" wrote: > >> My main concern is that sharing the runqueue between cores requires >> some changes to the core context switch code. The kinks aren't 100% >> worked out yet, so there's a risk that there will be an impact on the >> correctness of the credit1 scheduler. > > Ah, if that's the problem with selecting a vcpu which happens to still be > 'is_running' then I had some ideas how you could deal with that within th= e > credit2 scheduler. If you see such a vcpu when searching the runqueue, > ignore it, but set VPF_migrating. You'll then get a 'pick_cpu' callback w= hen > descheduling of the vcpu is completed. That should play nice with the laz= y > context switch logic while keeping things work conserving. > > =A0-- Keir > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > --001517475b500b4791047d0cdc93 Content-Type: text/x-patch; charset=US-ASCII; name="context_switch-scheduler-callback.diff" Content-Disposition: attachment; filename="context_switch-scheduler-callback.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4e863kg0 QWRkIGNvbnRleHRfc2F2ZWQgc2NoZWR1bGVyIGNhbGxiYWNrLgoKQmVjYXVzZSBjcmVkaXQyIHNo YXJlcyBhIHJ1bnF1ZXVlIGJldHdlZW4gc2V2ZXJhbCBjcHVzLCBpdCBuZWVkcwp0byBrbm93IHdo ZW4gYSBzY2hlZHVsZWQtb3V0IHByb2Nlc3MgaGFzIGZpbmFsbHkgYmVlbiBjb250ZXh0LXN3aXRj aGVkCmF3YXkgc28gdGhhdCBpdCBjYW4gYmUgYWRkZWQgdG8gdGhlIHJ1bnF1ZXVlIGFnYWluLiAg KE90aGVyd2lzZSBpdCBtYXkKYmUgZ3JhYmJlZCBieSBhbm90aGVyIHByb2Nlc3NvciBiZWZvcmUg dGhlIGNvbnRleHQgaGFzIGJlZW4gcHJvcGVybHkKc2F2ZWQuKQoKU2lnbmVkLW9mZi1ieTogR2Vv cmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxhcEBldS5jaXRyaXguY29tPgoKZGlmZiAtciBjNDRiN2I5 YjYzMDYgeGVuL2NvbW1vbi9zY2hlZHVsZS5jCi0tLSBhL3hlbi9jb21tb24vc2NoZWR1bGUuYwlX ZWQgSmFuIDEzIDEzOjMzOjU3IDIwMTAgKzAwMDAKKysrIGIveGVuL2NvbW1vbi9zY2hlZHVsZS5j CVdlZCBKYW4gMTMgMTM6MzY6MzcgMjAxMCArMDAwMApAQCAtODc3LDYgKzg3Nyw4IEBACiAgICAg LyogQ2hlY2sgZm9yIG1pZ3JhdGlvbiByZXF1ZXN0IC9hZnRlci8gY2xlYXJpbmcgcnVubmluZyBm bGFnLiAqLwogICAgIHNtcF9tYigpOwogCisgICAgU0NIRURfT1AoY29udGV4dF9zYXZlZCwgcHJl dik7CisKICAgICBpZiAoIHVubGlrZWx5KHRlc3RfYml0KF9WUEZfbWlncmF0aW5nLCAmcHJldi0+ cGF1c2VfZmxhZ3MpKSApCiAgICAgICAgIHZjcHVfbWlncmF0ZShwcmV2KTsKIH0KZGlmZiAtciBj NDRiN2I5YjYzMDYgeGVuL2luY2x1ZGUveGVuL3NjaGVkLWlmLmgKLS0tIGEveGVuL2luY2x1ZGUv eGVuL3NjaGVkLWlmLmgJV2VkIEphbiAxMyAxMzozMzo1NyAyMDEwICswMDAwCisrKyBiL3hlbi9p bmNsdWRlL3hlbi9zY2hlZC1pZi5oCVdlZCBKYW4gMTMgMTM6MzY6MzcgMjAxMCArMDAwMApAQCAt NjksNiArNjksNyBAQAogCiAgICAgdm9pZCAgICAgICAgICgqc2xlZXApICAgICAgICAgIChzdHJ1 Y3QgdmNwdSAqKTsKICAgICB2b2lkICAgICAgICAgKCp3YWtlKSAgICAgICAgICAgKHN0cnVjdCB2 Y3B1ICopOworICAgIHZvaWQgICAgICAgICAoKmNvbnRleHRfc2F2ZWQpICAoc3RydWN0IHZjcHUg Kik7CiAKICAgICBzdHJ1Y3QgdGFza19zbGljZSAoKmRvX3NjaGVkdWxlKSAoc190aW1lX3QpOwog Cg== --001517475b500b4791047d0cdc93 Content-Type: text/x-patch; charset=US-ASCII; name="context_switch-vcpu-processor-sync.diff" Content-Disposition: attachment; filename="context_switch-vcpu-processor-sync.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4e86f0y1 U2FmZWx5IGNoYW5nZSBuZXh0LT5wcm9jZXNzb3IgaWYgbmVjZXNzYXJ5LgoKQ3JlZGl0MidzIHNo YXJlZCBydW5xdWV1ZSBtZWFucyB0aGF0IGEgdmNwdSBtYXkgc3dpdGNoIGZyb20gb25lCnBjcHUg dG8gYW5vdGhlciB3aXRob3V0IGFuIGV4cGxpY2l0IG1pZ3JhdGlvbi4gIFdlIG5lZWQgdG8KY2hh bmdlIHYtPnByb2Nlc3NvciB0byBtYXRjaC4gIEhvd2V2ZXIsIHRoaXMgbXVzdCBiZSBkb25lIHdp dGggdGhlCmN1cnJlbnQgdi0+cHJvY2Vzc29yIHNjaGVkdWxlIGxvY2sgaGVsZC4gIFRvIGF2b2lk IGRlYWRsb2NrLApkbyB0aGlzIGFmdGVyIHdlJ3ZlIHJlbGVhc2VkIHRoZSBjdXJyZW50IHByb2Nl c3NvcidzIHNjaGVkdWxlIGxvY2suCgpTaWduZWQtb2ZmLWJ5OiBHZW9yZ2UgRHVubGFwIDxnZW9y Z2UuZHVubGFwQGV1LmNpdHJpeC5jb20+CgpkaWZmIC1yIDY2OTQ0OGZiOWQwYyB4ZW4vY29tbW9u L3NjaGVkdWxlLmMKLS0tIGEveGVuL2NvbW1vbi9zY2hlZHVsZS5jCVdlZCBKYW4gMTMgMTM6NDc6 MTYgMjAxMCArMDAwMAorKysgYi94ZW4vY29tbW9uL3NjaGVkdWxlLmMJV2VkIEphbiAxMyAxNDox NTo1MSAyMDEwICswMDAwCkBAIC0zMDUsNiArMzA1LDIzIEBACiAgICAgdmNwdV93YWtlKHYpOwog fQogCisvKiBTYWZlbHkgY2hhbmdlIHYtPnByb2Nlc3NvciB3aGVuIHJ1bm5pbmcgb24gYSBkaWZm ZXJlbnQgY3B1IHNoYXJpbmcgdGhlIHNhbWUgcnVucXVldWUgKi8KK3N0YXRpYyB2b2lkIF9fdmNw dV9wcm9jZXNzb3Jfc3luYyhzdHJ1Y3QgdmNwdSAqbmV4dCkKK3sKKyAgICB1bnNpZ25lZCBsb25n IGZsYWdzOworICAgIGludCBvbGRfY3B1OworICAgIGludCB0aGlzX2NwdSA9IHNtcF9wcm9jZXNz b3JfaWQoKTsKKworICAgIHZjcHVfc2NoZWR1bGVfbG9ja19pcnFzYXZlKG5leHQsIGZsYWdzKTsK KworICAgIC8qIFN3aXRjaCB0byBuZXcgQ1BVLCB0aGVuIHVubG9jayBvbGQgQ1BVLiAqLworICAg IG9sZF9jcHUgPSBuZXh0LT5wcm9jZXNzb3I7CisgICAgbmV4dC0+cHJvY2Vzc29yID0gdGhpc19j cHU7CisKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKAorICAgICAgICAmcGVyX2NwdShzY2hl ZHVsZV9kYXRhLCBvbGRfY3B1KS5zY2hlZHVsZV9sb2NrLCBmbGFncyk7Cit9CisKIC8qCiAgKiBG b3JjZSBhIFZDUFUgdGhyb3VnaCBhIGRlc2NoZWR1bGUvcmVzY2hlZHVsZSBwYXRoLgogICogRm9y IGV4YW1wbGUsIHVzaW5nIHRoaXMgd2hlbiBzZXR0aW5nIHRoZSBwZXJpb2RpYyB0aW1lciBwZXJp b2QgbWVhbnMgdGhhdApAQCAtODUyLDYgKzg2OSwxMSBAQAogCiAgICAgc3Bpbl91bmxvY2tfaXJx KCZzZC0+c2NoZWR1bGVfbG9jayk7CiAKKyAgICAvKiBTYWZlbHkgY2hhbmdlIHYtPnByb2Nlc3Nv ciBpZiBuZWNlc3NhcnkuICBEbyB0aGlzIGFmdGVyCisgICAgICogcmVsZWFzaW5nIHRoaXMgY3B1 J3MgbG9jayB0byBhdm9pZCBkZWFkbG9jay4gKi8KKyAgICBpZiAoIG5leHQtPnByb2Nlc3NvciAh PSBzbXBfcHJvY2Vzc29yX2lkKCkgKQorICAgICAgICBfX3ZjcHVfcHJvY2Vzc29yX3N5bmMobmV4 dCk7CisKICAgICBwZXJmY19pbmNyKHNjaGVkX2N0eCk7CiAKICAgICBzdG9wX3RpbWVyKCZwcmV2 LT5wZXJpb2RpY190aW1lcik7Cg== --001517475b500b4791047d0cdc93 Content-Type: text/x-patch; charset=US-ASCII; name="credit2-hypervisor.diff" Content-Disposition: attachment; filename="credit2-hypervisor.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4e86waa2 ZGlmZiAtciA3YmQxZGQ5ZmIzMGYgeGVuL2NvbW1vbi9NYWtlZmlsZQotLS0gYS94ZW4vY29tbW9u L01ha2VmaWxlCVdlZCBKYW4gMTMgMTQ6MTU6NTEgMjAxMCArMDAwMAorKysgYi94ZW4vY29tbW9u L01ha2VmaWxlCVdlZCBKYW4gMTMgMTQ6MzY6NTggMjAxMCArMDAwMApAQCAtMTMsNiArMTMsNyBA QAogb2JqLXkgKz0gcGFnZV9hbGxvYy5vCiBvYmoteSArPSByYW5nZXNldC5vCiBvYmoteSArPSBz Y2hlZF9jcmVkaXQubworb2JqLXkgKz0gc2NoZWRfY3JlZGl0Mi5vCiBvYmoteSArPSBzY2hlZF9z ZWRmLm8KIG9iai15ICs9IHNjaGVkdWxlLm8KIG9iai15ICs9IHNodXRkb3duLm8KZGlmZiAtciA3 YmQxZGQ5ZmIzMGYgeGVuL2NvbW1vbi9zY2hlZF9jcmVkaXQyLmMKLS0tIC9kZXYvbnVsbAlUaHUg SmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIveGVuL2NvbW1vbi9zY2hlZF9jcmVkaXQy LmMJV2VkIEphbiAxMyAxNDozNjo1OCAyMDEwICswMDAwCkBAIC0wLDAgKzEsMTAzNyBAQAorCisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgorICogKEMpIDIwMDkgLSBHZW9yZ2UgRHVubGFwIC0gQ2l0cml4 IFN5c3RlbXMgUiZEIFVLLCBMdGQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogICAgICAg IEZpbGU6IGNvbW1vbi9jc2NoZWRfY3JlZGl0Mi5jCisgKiAgICAgIEF1dGhvcjogR2VvcmdlIER1 bmxhcAorICoKKyAqIERlc2NyaXB0aW9uOiBDcmVkaXQtYmFzZWQgU01QIENQVSBzY2hlZHVsZXIK KyAqIEJhc2VkIG9uIGFuIGVhcmxpZXIgdmVyc29uIGJ5IEVtbWFudWVsIEFja2FvdXkuCisgKi8K KworI2luY2x1ZGUgPHhlbi9jb25maWcuaD4KKyNpbmNsdWRlIDx4ZW4vaW5pdC5oPgorI2luY2x1 ZGUgPHhlbi9saWIuaD4KKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDx4ZW4vZG9t YWluLmg+CisjaW5jbHVkZSA8eGVuL2RlbGF5Lmg+CisjaW5jbHVkZSA8eGVuL2V2ZW50Lmg+Cisj aW5jbHVkZSA8eGVuL3RpbWUuaD4KKyNpbmNsdWRlIDx4ZW4vcGVyZmMuaD4KKyNpbmNsdWRlIDx4 ZW4vc2NoZWQtaWYuaD4KKyNpbmNsdWRlIDx4ZW4vc29mdGlycS5oPgorI2luY2x1ZGUgPGFzbS9h dG9taWMuaD4KKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNpbmNsdWRlIDx4ZW4vdHJhY2UuaD4K KworI2lmIF9faTM4Nl9fCisjZGVmaW5lIFBSSV9zdGltZSAibGxkIgorI2Vsc2UKKyNkZWZpbmUg UFJJX3N0aW1lICJsZCIKKyNlbmRpZgorCisjZGVmaW5lIGQycHJpbnRrKHguLi4pCisvLyNkZWZp bmUgZDJwcmludGsgcHJpbnRrCisKKyNkZWZpbmUgVFJDX0NTQ0hFRDJfVElDSyAgICAgICAgVFJD X1NDSEVEX0NMQVNTICsgMQorI2RlZmluZSBUUkNfQ1NDSEVEMl9SVU5RX1BPUyAgICBUUkNfU0NI RURfQ0xBU1MgKyAyCisjZGVmaW5lIFRSQ19DU0NIRUQyX0NSRURJVF9CVVJOIFRSQ19TQ0hFRF9D TEFTUyArIDMKKyNkZWZpbmUgVFJDX0NTQ0hFRDJfQ1JFRElUX0FERCAgVFJDX1NDSEVEX0NMQVNT ICsgNAorI2RlZmluZSBUUkNfQ1NDSEVEMl9USUNLTEVfQ0hFQ0sgVFJDX1NDSEVEX0NMQVNTICsg NQorCisvKgorICogV0FSTklORzogVGhpcyBpcyBzdGlsbCBpbiBhbiBleHBlcmltZW50YWwgcGhh c2UuICBTdGF0dXMgYW5kIHdvcmsgY2FuIGJlIGZvdW5kIGF0IHRoZQorICogY3JlZGl0MiB3aWtp IHBhZ2U6CisgKiAgaHR0cDovL3dpa2kueGVuc291cmNlLmNvbS94ZW53aWtpL0NyZWRpdDJfU2No ZWR1bGVyX0RldmVsb3BtZW50CisgKi8KKworLyogCisgKiBEZXNpZ246CisgKgorICogVk1zICJi dXJuIiBjcmVkaXRzIGJhc2VkIG9uIHRoZWlyIHdlaWdodDsgaGlnaGVyIHdlaWdodCBtZWFucyBj cmVkaXRzIGJ1cm4KKyAqIG1vcmUgc2xvd2x5LgorICogCisgKiB2Y3B1cyBhcmUgaW5zZXJ0ZWQg aW50byB0aGUgcnVucXVldWUgYnkgY3JlZGl0IG9yZGVyLgorICoKKyAqIENyZWRpdHMgYXJlICJy ZXNldCIgd2hlbiB0aGUgbmV4dCB2Y3B1IGluIHRoZSBydW5xdWV1ZSBpcyBsZXNzIHRoYW4gb3Ig ZXF1YWwgdG8gemVyby4gIEF0IHRoYXQKKyAqIHBvaW50LCBldmVyeW9uZSdzIGNyZWRpdHMgYXJl ICJjbGlwcGVkIiB0byBhIHNtYWxsIHZhbHVlLCBhbmQgYSBmaXhlZCBjcmVkaXQgaXMgYWRkZWQg dG8gZXZlcnlvbmUuCisgKgorICogVGhlIHBsYW4gaXMgZm9yIGFsbCBjb3JlcyB0aGF0IHNoYXJl IGFuIEwyIHdpbGwgc2hhcmUgdGhlIHNhbWUgcnVucXVldWUuICBBdCB0aGUgbW9tZW50LCB0aGVy ZSBpcworICogb25lIGdsb2JhbCBydW5xdWV1ZSBmb3IgYWxsIGNvcmVzLgorICovCisKKy8qCisg KiBCYXNpYyBjb25zdGFudHMKKyAqLworI2RlZmluZSBDU0NIRURfREVGQVVMVF9XRUlHSFQgICAg ICAgMjU2CisjZGVmaW5lIENTQ0hFRF9NSU5fVElNRVIgICAgICAgICAgICBNSUNST1NFQ1MoNTAw KQorI2RlZmluZSBDU0NIRURfQ0FSUllPVkVSX01BWCAgICAgICAgQ1NDSEVEX01JTl9USU1FUgor I2RlZmluZSBDU0NIRURfQ1JFRElUX1JFU0VUICAgICAgICAgMAorI2RlZmluZSBDU0NIRURfQ1JF RElUX0lOSVQgICAgICAgICAgTUlMTElTRUNTKDEwKQorI2RlZmluZSBDU0NIRURfTUFYX1RJTUVS ICAgICAgICAgICAgTUlMTElTRUNTKDIpCisKKyNkZWZpbmUgQ1NDSEVEX0lETEVfQ1JFRElUICAg ICAgICAgICAgICAgICAoLSgxPDwzMCkpCisKKy8qCisgKiBGbGFncworICovCisvKiBDU0ZMQUdf c2NoZWR1bGVkOiBJcyB0aGlzIHZjcHUgZWl0aGVyIHJ1bm5pbmcgb24sIG9yIGNvbnRleHQtc3dp dGNoaW5nIG9mZiwKKyAqIGEgcGh5c2ljYWwgY3B1PworICogKyBBY2Nlc3NlZCBvbmx5IHdpdGgg cnVucXVldWUgbG9jayBoZWxkCisgKiArIFNldCB3aGVuIGNob3NlbiBhcyBuZXh0IGluIGNzY2hl ZF9zY2hlZHVsZSgpLgorICogKyBDbGVhcmVkIGFmdGVyIGNvbnRleHQgc3dpdGNoIGhhcyBiZWVu IHNhdmVkIGluIGNzY2hlZF9jb250ZXh0X3NhdmVkKCkKKyAqICsgQ2hlY2tlZCBpbiB2Y3B1X3dh a2UgdG8gc2VlIGlmIHdlIGNhbiBhZGQgdG8gdGhlIHJ1bnF1ZXVlLCBvciBpZiB3ZSBzaG91bGQK KyAqICAgc2V0IENTRkxBR19kZWxheWVkX3J1bnFfYWRkCisgKiArIENoZWNrZWQgdG8gYmUgZmFs c2UgaW4gcnVucV9pbnNlcnQuCisgKi8KKyNkZWZpbmUgX19DU0ZMQUdfc2NoZWR1bGVkIDEKKyNk ZWZpbmUgQ1NGTEFHX3NjaGVkdWxlZCAoMTw8X19DU0ZMQUdfc2NoZWR1bGVkKQorLyogQ1NGTEFH X2RlbGF5ZWRfcnVucV9hZGQ6IERvIHdlIG5lZWQgdG8gYWRkIHRoaXMgdG8gdGhlIHJ1bnF1ZXVl IG9uY2UgaXQnZCBkb25lCisgKiBiZWluZyBjb250ZXh0IHN3aXRjaGVkIG91dD8KKyAqICsgU2V0 IHdoZW4gc2NoZWR1bGluZyBvdXQgaW4gY3NjaGVkX3NjaGVkdWxlKCkgaWYgcHJldiBpcyBydW5u YWJsZQorICogKyBTZXQgaW4gY3NjaGVkX3ZjcHVfd2FrZSBpZiBpdCBmaW5kcyBDU0ZMQUdfc2No ZWR1bGVkIHNldAorICogKyBSZWFkIGluIGNzY2hlZF9jb250ZXh0X3N3aXRjaGVkKCkuICBJZiBz ZXQsIGl0IGFkZHMgcHJldiB0byB0aGUgcnVucXVldWUgYW5kCisgKiAgIGNsZWFycyB0aGUgYml0 LgorICovCisjZGVmaW5lIF9fQ1NGTEFHX2RlbGF5ZWRfcnVucV9hZGQgMgorI2RlZmluZSBDU0ZM QUdfZGVsYXllZF9ydW5xX2FkZCAoMTw8X19DU0ZMQUdfZGVsYXllZF9ydW5xX2FkZCkKKworCisv KgorICogVXNlZnVsIG1hY3JvcworICovCisjZGVmaW5lIENTQ0hFRF9QQ1BVKF9jKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKChzdHJ1Y3Qg Y3NjaGVkX3BjcHUgKilwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIF9jKS5zY2hlZF9wcml2KQorI2Rl ZmluZSBDU0NIRURfVkNQVShfdmNwdSkgICgoc3RydWN0IGNzY2hlZF92Y3B1ICopIChfdmNwdSkt PnNjaGVkX3ByaXYpCisjZGVmaW5lIENTQ0hFRF9ET00oX2RvbSkgICAgKChzdHJ1Y3QgY3NjaGVk X2RvbSAqKSAoX2RvbSktPnNjaGVkX3ByaXYpCisvLyNkZWZpbmUgUlVOUShfY3B1KSAgICAgICAg ICAoJihDU0NIRURfR1JPVVAoX2NwdSktPnJ1bnEpKQorI2RlZmluZSBSVU5RKF9jcHUpICAgICAg ICAgICgmY3NjaGVkX3ByaXYucnVucSkKKworLyoKKyAqIFN5c3RlbS13aWRlIHByaXZhdGUgZGF0 YQorICovCitzdHJ1Y3QgY3NjaGVkX3ByaXZhdGUgeworICAgIHNwaW5sb2NrX3QgbG9jazsKKyAg ICB1aW50MzJfdCBuY3B1czsKKyAgICBzdHJ1Y3QgZG9tYWluICppZGxlX2RvbWFpbjsKKworICAg IC8qIFBlci1ydW5xdWV1ZSBpbmZvICovCisgICAgc3RydWN0IGxpc3RfaGVhZCBydW5xOyAvKiBH bG9iYWwgcnVucXVldWUgKi8KKyAgICBpbnQgbWF4X3dlaWdodDsKKyAgICBzdHJ1Y3QgbGlzdF9o ZWFkIHNkb207CisgICAgc3RydWN0IGxpc3RfaGVhZCBzdmM7ICAvKiBMaXN0IG9mIGFsbCB2Y3B1 cyAqLworfTsKKworc3RydWN0IGNzY2hlZF9wY3B1IHsKKyAgICBpbnQgX2R1bW15OworfTsKKwor LyoKKyAqIFZpcnR1YWwgQ1BVCisgKi8KK3N0cnVjdCBjc2NoZWRfdmNwdSB7CisgICAgc3RydWN0 IGxpc3RfaGVhZCBnbG9iYWxfZWxlbTsgLyogT24gdGhlIGdsb2JhbCB2Y3B1IGxpc3QgKi8KKyAg ICBzdHJ1Y3QgbGlzdF9oZWFkIHNkb21fZWxlbTsgICAvKiBPbiB0aGUgZG9tYWluIHZjcHUgbGlz dCAqLworICAgIHN0cnVjdCBsaXN0X2hlYWQgcnVucV9lbGVtOyAgIC8qIE9uIHRoZSBydW5xdWV1 ZSAgICAgICAgICovCisKKyAgICAvKiBVcC1wb2ludGVycyAqLworICAgIHN0cnVjdCBjc2NoZWRf ZG9tICpzZG9tOworICAgIHN0cnVjdCB2Y3B1ICp2Y3B1OworCisgICAgaW50IHdlaWdodDsKKwor ICAgIGludCBjcmVkaXQ7CisgICAgc190aW1lX3Qgc3RhcnRfdGltZTsgLyogV2hlbiB3ZSB3ZXJl IHNjaGVkdWxlZCAodXNlZCBmb3IgY3JlZGl0KSAqLworICAgIHVuc2lnbmVkIGZsYWdzOyAgICAg IC8qIDE2IGJpdHMgZG9lc24ndCBzZWVtIHRvIHBsYXkgd2VsbCB3aXRoIGNsZWFyX2JpdCgpICov CisKK307CisKKy8qCisgKiBEb21haW4KKyAqLworc3RydWN0IGNzY2hlZF9kb20geworICAgIHN0 cnVjdCBsaXN0X2hlYWQgdmNwdTsKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNkb21fZWxlbTsKKyAg ICBzdHJ1Y3QgZG9tYWluICpkb207CisgICAgdWludDE2X3Qgd2VpZ2h0OworICAgIHVpbnQxNl90 IG5yX3ZjcHVzOworfTsKKworCisvKgorICogR2xvYmFsIHZhcmlhYmxlcworICovCitzdGF0aWMg c3RydWN0IGNzY2hlZF9wcml2YXRlIGNzY2hlZF9wcml2OworCisvKgorICogVGltZS10by1jcmVk aXQsIGNyZWRpdC10by10aW1lLgorICogRklYTUU6IERvIHByZS1jYWxjdWxhdGVkIGRpdmlzaW9u PworICovCitzdGF0aWMgc190aW1lX3QgdDJjKHNfdGltZV90IHRpbWUsIHN0cnVjdCBjc2NoZWRf dmNwdSAqc3ZjKQoreworICAgIHJldHVybiB0aW1lICogY3NjaGVkX3ByaXYubWF4X3dlaWdodCAv IHN2Yy0+d2VpZ2h0OworfQorCitzdGF0aWMgc190aW1lX3QgYzJ0KHNfdGltZV90IGNyZWRpdCwg c3RydWN0IGNzY2hlZF92Y3B1ICpzdmMpCit7CisgICAgcmV0dXJuIGNyZWRpdCAqIHN2Yy0+d2Vp Z2h0IC8gY3NjaGVkX3ByaXYubWF4X3dlaWdodDsKK30KKworLyoKKyAqIFJ1bnF1ZXVlIHJlbGF0 ZWQgY29kZQorICovCisKK3N0YXRpYyAvKmlubGluZSovIGludAorX192Y3B1X29uX3J1bnEoc3Ry dWN0IGNzY2hlZF92Y3B1ICpzdmMpCit7CisgICAgcmV0dXJuICFsaXN0X2VtcHR5KCZzdmMtPnJ1 bnFfZWxlbSk7Cit9CisKK3N0YXRpYyAvKmlubGluZSovIHN0cnVjdCBjc2NoZWRfdmNwdSAqCitf X3J1bnFfZWxlbShzdHJ1Y3QgbGlzdF9oZWFkICplbGVtKQoreworICAgIHJldHVybiBsaXN0X2Vu dHJ5KGVsZW0sIHN0cnVjdCBjc2NoZWRfdmNwdSwgcnVucV9lbGVtKTsKK30KKworc3RhdGljIGlu dAorX19ydW5xX2luc2VydChzdHJ1Y3QgbGlzdF9oZWFkICpydW5xLCBzdHJ1Y3QgY3NjaGVkX3Zj cHUgKnN2YykKK3sKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOworICAgIGludCBwb3MgPSAw OworCisgICAgZDJwcmludGsoInJxaSBkJWR2JWRcbiIsCisgICAgICAgICAgIHN2Yy0+dmNwdS0+ ZG9tYWluLT5kb21haW5faWQsCisgICAgICAgICAgIHN2Yy0+dmNwdS0+dmNwdV9pZCk7CisKKyAg ICAvKiBJZGxlIHZjcHVzIG5vdCBhbGxvd2VkIG9uIHRoZSBydW5xdWV1ZSBhbnltb3JlICovCisg ICAgQlVHX09OKGlzX2lkbGVfdmNwdShzdmMtPnZjcHUpKTsKKyAgICBCVUdfT04oc3ZjLT52Y3B1 LT5pc19ydW5uaW5nKTsKKyAgICBCVUdfT04odGVzdF9iaXQoX19DU0ZMQUdfc2NoZWR1bGVkLCAm c3ZjLT5mbGFncykpOworCisgICAgbGlzdF9mb3JfZWFjaCggaXRlciwgcnVucSApCisgICAgewor ICAgICAgICBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKiBpdGVyX3N2YyA9IF9fcnVucV9lbGVtKGl0ZXIp OworCisgICAgICAgIGlmICggc3ZjLT5jcmVkaXQgPiBpdGVyX3N2Yy0+Y3JlZGl0ICkKKyAgICAg ICAgeworICAgICAgICAgICAgZDJwcmludGsoIiBwJWQgZCVkdiVkXG4iLAorICAgICAgICAgICAg ICAgICAgIHBvcywKKyAgICAgICAgICAgICAgICAgICBpdGVyX3N2Yy0+dmNwdS0+ZG9tYWluLT5k b21haW5faWQsCisgICAgICAgICAgICAgICAgICAgaXRlcl9zdmMtPnZjcHUtPnZjcHVfaWQpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcG9zKys7CisgICAgfQorCisg ICAgbGlzdF9hZGRfdGFpbCgmc3ZjLT5ydW5xX2VsZW0sIGl0ZXIpOworCisgICAgcmV0dXJuIHBv czsKK30KKworc3RhdGljIHZvaWQKK3J1bnFfaW5zZXJ0KHVuc2lnbmVkIGludCBjcHUsIHN0cnVj dCBjc2NoZWRfdmNwdSAqc3ZjKQoreworICAgIHN0cnVjdCBsaXN0X2hlYWQgKiBydW5xID0gUlVO UShjcHUpOworICAgIGludCBwb3MgPSAwOworCisgICAgLyogRklYTUU6IFJ1bnF1ZXVlIHBlciBM MiAqLworICAgIEFTU0VSVCggc3Bpbl9pc19sb2NrZWQoJmNzY2hlZF9wcml2LmxvY2spICk7IAor CisgICAgQlVHX09OKCBfX3ZjcHVfb25fcnVucShzdmMpICk7CisgICAgLyogRklYTUU6IENoZWNr IHJ1bnF1ZXVlIGhhbmRsZXMgdGhpcyBjcHUqLworICAgIC8vQlVHX09OKCBjcHUgIT0gc3ZjLT52 Y3B1LT5wcm9jZXNzb3IgKTsgCisKKyAgICBwb3MgPSBfX3J1bnFfaW5zZXJ0KHJ1bnEsIHN2Yyk7 CisKKyAgICB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb206MTYs dmNwdToxNjsKKyAgICAgICAgICAgIHVuc2lnbmVkIHBvczsKKyAgICAgICAgfSBkOworICAgICAg ICBkLmRvbSA9IHN2Yy0+dmNwdS0+ZG9tYWluLT5kb21haW5faWQ7CisgICAgICAgIGQudmNwdSA9 IHN2Yy0+dmNwdS0+dmNwdV9pZDsKKyAgICAgICAgZC5wb3MgPSBwb3M7CisgICAgICAgIHRyYWNl X3ZhcihUUkNfQ1NDSEVEMl9SVU5RX1BPUywgMSwKKyAgICAgICAgICAgICAgICAgIHNpemVvZihk KSwKKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopJmQpOworICAgIH0KKworICAg IHJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX3J1bnFfcmVtb3ZlKHN0cnVjdCBj c2NoZWRfdmNwdSAqc3ZjKQoreworICAgIEJVR19PTiggIV9fdmNwdV9vbl9ydW5xKHN2YykgKTsK KyAgICBsaXN0X2RlbF9pbml0KCZzdmMtPnJ1bnFfZWxlbSk7Cit9CisKK3ZvaWQgYnVybl9jcmVk aXRzKHN0cnVjdCBjc2NoZWRfdmNwdSAqLCBzX3RpbWVfdCk7CisKKy8qIENoZWNrIHRvIHNlZSBp ZiB0aGUgaXRlbSBvbiB0aGUgcnVucXVldWUgaXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gd2hhdCdz CisgKiBjdXJyZW50bHkgcnVubmluZzsgaWYgc28sIHdha2UgdXAgdGhlIHByb2Nlc3NvciAqLwor c3RhdGljIC8qaW5saW5lKi8gdm9pZAorcnVucV90aWNrbGUodW5zaWduZWQgaW50IGNwdSwgc3Ry dWN0IGNzY2hlZF92Y3B1ICpuZXcsIHNfdGltZV90IG5vdykKK3sKKyAgICBpbnQgaSwgaXBpZD0t MTsKKyAgICBzX3RpbWVfdCBsb3dlc3Q9KDE8PDMwKTsKKworICAgIGQycHJpbnRrKCJycXQgZCVk diVkIGNkJWR2JWRcbiIsCisgICAgICAgICAgICAgbmV3LT52Y3B1LT5kb21haW4tPmRvbWFpbl9p ZCwKKyAgICAgICAgICAgICBuZXctPnZjcHUtPnZjcHVfaWQsCisgICAgICAgICAgICAgY3VycmVu dC0+ZG9tYWluLT5kb21haW5faWQsCisgICAgICAgICAgICAgY3VycmVudC0+dmNwdV9pZCk7CisK KyAgICAvKiBGaW5kIHRoZSBjcHUgaW4gdGhpcyBxdWV1ZSBncm91cCB0aGF0IGhhcyB0aGUgbG93 ZXN0IGNyZWRpdHMgKi8KKyAgICAvKiBGSVhNRTogc2VwYXJhdGUgcnVucXVldWVzICovCisgICAg Zm9yX2VhY2hfb25saW5lX2NwdSAoIGkgKQorICAgIHsKKyAgICAgICAgc3RydWN0IGNzY2hlZF92 Y3B1ICogY29uc3QgY3VyID0KKyAgICAgICAgICAgIENTQ0hFRF9WQ1BVKHBlcl9jcHUoc2NoZWR1 bGVfZGF0YSwgaSkuY3Vycik7CisKKyAgICAgICAgLyogRklYTUU6IGtlZXAgdHJhY2sgb2YgaWRs ZXJzLCBjaG9zZSBmcm9tIHRoZSBtYXNrICovCisgICAgICAgIGlmICggaXNfaWRsZV92Y3B1KGN1 ci0+dmNwdSkgKQorICAgICAgICB7CisgICAgICAgICAgICBpcGlkID0gaTsKKyAgICAgICAgICAg IGxvd2VzdCA9IENTQ0hFRF9JRExFX0NSRURJVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogVXBkYXRlIGNyZWRp dHMgZm9yIGN1cnJlbnQgdG8gc2VlIGlmIHdlIHdhbnQgdG8gcHJlZW1wdCAqLworICAgICAgICAg ICAgYnVybl9jcmVkaXRzKGN1ciwgbm93KTsKKworICAgICAgICAgICAgaWYgKCBjdXItPmNyZWRp dCA8IGxvd2VzdCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaXBpZCA9IGk7Cisg ICAgICAgICAgICAgICAgbG93ZXN0ID0gY3VyLT5jcmVkaXQ7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIC8qIFRSQUNFICovIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBkb206MTYsdmNwdToxNjsKKyAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgY3JlZGl0OworICAgICAgICAgICAgICAgIH0gZDsKKyAgICAgICAgICAgICAg ICBkLmRvbSA9IGN1ci0+dmNwdS0+ZG9tYWluLT5kb21haW5faWQ7CisgICAgICAgICAgICAgICAg ZC52Y3B1ID0gY3VyLT52Y3B1LT52Y3B1X2lkOworICAgICAgICAgICAgICAgIGQuY3JlZGl0ID0g Y3VyLT5jcmVkaXQ7CisgICAgICAgICAgICAgICAgdHJhY2VfdmFyKFRSQ19DU0NIRUQyX1RJQ0tM RV9DSEVDSywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGQpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSZkKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICggaXBpZCAhPSAtMSApCisgICAgeworICAgICAg ICBpbnQgY2RpZmYgPSBsb3dlc3QgLSBuZXctPmNyZWRpdDsKKworICAgICAgICBpZiAoIGxvd2Vz dCA9PSBDU0NIRURfSURMRV9DUkVESVQgfHwgY2RpZmYgPCAwICkgeworICAgICAgICAgICAgZDJw cmludGsoInNpICVkXG4iLCBpcGlkKTsKKyAgICAgICAgICAgIGNwdV9yYWlzZV9zb2Z0aXJxKGlw aWQsIFNDSEVEVUxFX1NPRlRJUlEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg ICAgIC8qIEZJWE1FOiBXYWtlIHVwIGxhdGVyPyAqLzsKKyAgICB9Cit9CisKKy8qCisgKiBDcmVk aXQtcmVsYXRlZCBjb2RlCisgKi8KK3N0YXRpYyB2b2lkIHJlc2V0X2NyZWRpdChpbnQgY3B1LCBz X3RpbWVfdCBub3cpCit7CisgICAgc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKKworICAgIGxpc3Rf Zm9yX2VhY2goIGl0ZXIsICZjc2NoZWRfcHJpdi5zdmMgKQorICAgIHsKKyAgICAgICAgc3RydWN0 IGNzY2hlZF92Y3B1ICogc3ZjID0gbGlzdF9lbnRyeShpdGVyLCBzdHJ1Y3QgY3NjaGVkX3ZjcHUs IGdsb2JhbF9lbGVtKTsKKyAgICAgICAgc190aW1lX3QgY21heDsKKworICAgICAgICBCVUdfT04o IGlzX2lkbGVfdmNwdShzdmMtPnZjcHUpICk7CisKKyAgICAgICAgLyogTWF4aW11bSBhbW91bnQg b2YgY3JlZGl0IHRoYXQgY2FuIGJlIGNhcnJpZWQgb3ZlciAqLworICAgICAgICBjbWF4ID0gQ1ND SEVEX0NBUlJZT1ZFUl9NQVg7CisKKyAgICAgICAgaWYgKCBzdmMtPmNyZWRpdCA+IGNtYXggKQor ICAgICAgICAgICAgc3ZjLT5jcmVkaXQgPSBjbWF4OworICAgICAgICBzdmMtPmNyZWRpdCArPSBD U0NIRURfQ1JFRElUX0lOSVQ7ICAvKiBGaW5kIGEgYmV0dGVyIG5hbWUgKi8KKyAgICAgICAgc3Zj LT5zdGFydF90aW1lID0gbm93OworCisgICAgICAgIC8qIFRyYWNlIGNyZWRpdCAqLworICAgIH0K KworICAgIC8qIE5vIG5lZWQgdG8gcmVzb3J0IHJ1bnF1ZXVlLCBhcyBldmVyeW9uZSdzIG9yZGVy IHNob3VsZCBiZSB0aGUgc2FtZS4gKi8KK30KKwordm9pZCBidXJuX2NyZWRpdHMoc3RydWN0IGNz Y2hlZF92Y3B1ICpzdmMsIHNfdGltZV90IG5vdykKK3sKKyAgICBzX3RpbWVfdCBkZWx0YTsKKwor ICAgIC8qIEFzc2VydCBzdmMgaXMgY3VycmVudCAqLworICAgIEFTU0VSVChzdmM9PUNTQ0hFRF9W Q1BVKHBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgc3ZjLT52Y3B1LT5wcm9jZXNzb3IpLmN1cnIpKTsK KworICAgIGlmICggaXNfaWRsZV92Y3B1KHN2Yy0+dmNwdSkgKQorICAgIHsKKyAgICAgICAgQlVH X09OKHN2Yy0+Y3JlZGl0ICE9IENTQ0hFRF9JRExFX0NSRURJVCk7CisgICAgICAgIHJldHVybjsK KyAgICB9CisKKyAgICBkZWx0YSA9IG5vdyAtIHN2Yy0+c3RhcnRfdGltZTsKKworICAgIGlmICgg ZGVsdGEgPiAwICkgeworICAgICAgICAvKiBUaGlzIHdpbGwgcm91bmQgZG93bjsgc2hvdWxkIHdl IGNvbnNpZGVyIHJvdW5kaW5nIHVwLi4uPyAqLworICAgICAgICBzdmMtPmNyZWRpdCAtPSB0MmMo ZGVsdGEsIHN2Yyk7CisgICAgICAgIHN2Yy0+c3RhcnRfdGltZSA9IG5vdzsKKworICAgICAgICBk MnByaW50aygiYiBkJWR2JWQgYyVkXG4iLAorICAgICAgICAgICAgICAgICBzdmMtPnZjcHUtPmRv bWFpbi0+ZG9tYWluX2lkLAorICAgICAgICAgICAgICAgICBzdmMtPnZjcHUtPnZjcHVfaWQsCisg ICAgICAgICAgICAgICAgIHN2Yy0+Y3JlZGl0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkMnBy aW50aygiJXM6IFRpbWUgd2VudCBiYWNrd2FyZHM/IG5vdyAlIlBSSV9zdGltZSIgc3RhcnQgJSJQ Uklfc3RpbWUiXG4iLAorICAgICAgICAgICAgICAgX19mdW5jX18sIG5vdywgc3ZjLT5zdGFydF90 aW1lKTsKKyAgICB9CisgICAgCisgICAgLyogVFJBQ0UgKi8KKyAgICB7CisgICAgICAgIHN0cnVj dCB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb206MTYsdmNwdToxNjsKKyAgICAgICAgICAgIHVu c2lnbmVkIGNyZWRpdDsKKyAgICAgICAgICAgIGludCBkZWx0YTsKKyAgICAgICAgfSBkOworICAg ICAgICBkLmRvbSA9IHN2Yy0+dmNwdS0+ZG9tYWluLT5kb21haW5faWQ7CisgICAgICAgIGQudmNw dSA9IHN2Yy0+dmNwdS0+dmNwdV9pZDsKKyAgICAgICAgZC5jcmVkaXQgPSBzdmMtPmNyZWRpdDsK KyAgICAgICAgZC5kZWx0YSA9IGRlbHRhOworICAgICAgICB0cmFjZV92YXIoVFJDX0NTQ0hFRDJf Q1JFRElUX0JVUk4sIDEsCisgICAgICAgICAgICAgICAgICBzaXplb2YoZCksCisgICAgICAgICAg ICAgICAgICAodW5zaWduZWQgY2hhciAqKSZkKTsKKyAgICB9Cit9CisKKy8qIEZpbmQgdGhlIGRv bWFpbiB3aXRoIHRoZSBoaWdoZXN0IHdlaWdodC4gKi8KK3ZvaWQgdXBkYXRlX21heF93ZWlnaHQo aW50IG5ld193ZWlnaHQsIGludCBvbGRfd2VpZ2h0KQoreworICAgIGlmICggbmV3X3dlaWdodCA+ IGNzY2hlZF9wcml2Lm1heF93ZWlnaHQgKQorICAgIHsKKyAgICAgICAgY3NjaGVkX3ByaXYubWF4 X3dlaWdodCA9IG5ld193ZWlnaHQ7CisgICAgICAgIHByaW50aygiJXM6IE1heCB3ZWlnaHQgJWRc biIsIF9fZnVuY19fLCBjc2NoZWRfcHJpdi5tYXhfd2VpZ2h0KTsKKyAgICB9CisgICAgZWxzZSBp ZiAoIG9sZF93ZWlnaHQgPT0gY3NjaGVkX3ByaXYubWF4X3dlaWdodCApCisgICAgeworICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOworICAgICAgICBpbnQgbWF4X3dlaWdodCA9IDE7Cisg ICAgICAgIAorICAgICAgICBsaXN0X2Zvcl9lYWNoKCBpdGVyLCAmY3NjaGVkX3ByaXYuc2RvbSAp CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBjc2NoZWRfZG9tICogc2RvbSA9IGxpc3Rf ZW50cnkoaXRlciwgc3RydWN0IGNzY2hlZF9kb20sIHNkb21fZWxlbSk7CisgICAgICAgICAgICAK KyAgICAgICAgICAgIGlmICggc2RvbS0+d2VpZ2h0ID4gbWF4X3dlaWdodCApCisgICAgICAgICAg ICAgICAgbWF4X3dlaWdodCA9IHNkb20tPndlaWdodDsKKyAgICAgICAgfQorICAgICAgICAKKyAg ICAgICAgY3NjaGVkX3ByaXYubWF4X3dlaWdodCA9IG1heF93ZWlnaHQ7CisgICAgICAgIHByaW50 aygiJXM6IE1heCB3ZWlnaHQgJWRcbiIsIF9fZnVuY19fLCBjc2NoZWRfcHJpdi5tYXhfd2VpZ2h0 KTsKKyAgICB9Cit9CisKKy8qCisgKiBJbml0aWFsaXphdGlvbiBjb2RlCisgKi8KK3N0YXRpYyBp bnQKK2NzY2hlZF9wY3B1X2luaXQoaW50IGNwdSkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdz OworICAgIHN0cnVjdCBjc2NoZWRfcGNwdSAqc3BjOworCisgICAgLyogQWxsb2NhdGUgcGVyLVBD UFUgaW5mbyAqLworICAgIHNwYyA9IHhtYWxsb2Moc3RydWN0IGNzY2hlZF9wY3B1KTsKKyAgICBp ZiAoIHNwYyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc3Bpbl9sb2NrX2ly cXNhdmUoJmNzY2hlZF9wcml2LmxvY2ssIGZsYWdzKTsKKworICAgIC8qIEluaXRpYWxpemUvdXBk YXRlIHN5c3RlbS13aWRlIGNvbmZpZyAqLworICAgIHBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgY3B1 KS5zY2hlZF9wcml2ID0gc3BjOworCisgICAgY3NjaGVkX3ByaXYubmNwdXMrKzsKKworICAgIC8q IFN0YXJ0IG9mZiBpZGxpbmcuLi4gKi8KKyAgICBCVUdfT04oIWlzX2lkbGVfdmNwdShwZXJfY3B1 KHNjaGVkdWxlX2RhdGEsIGNwdSkuY3VycikpOworCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmY3NjaGVkX3ByaXYubG9jaywgZmxhZ3MpOworCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZm5k ZWYgTkRFQlVHCitzdGF0aWMgLyppbmxpbmUqLyB2b2lkCitfX2NzY2hlZF92Y3B1X2NoZWNrKHN0 cnVjdCB2Y3B1ICp2YykKK3sKKyAgICBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKiBjb25zdCBzdmMgPSBD U0NIRURfVkNQVSh2Yyk7CisgICAgc3RydWN0IGNzY2hlZF9kb20gKiBjb25zdCBzZG9tID0gc3Zj LT5zZG9tOworCisgICAgQlVHX09OKCBzdmMtPnZjcHUgIT0gdmMgKTsKKyAgICBCVUdfT04oIHNk b20gIT0gQ1NDSEVEX0RPTSh2Yy0+ZG9tYWluKSApOworICAgIGlmICggc2RvbSApCisgICAgewor ICAgICAgICBCVUdfT04oIGlzX2lkbGVfdmNwdSh2YykgKTsKKyAgICAgICAgQlVHX09OKCBzZG9t LT5kb20gIT0gdmMtPmRvbWFpbiApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBC VUdfT04oICFpc19pZGxlX3ZjcHUodmMpICk7CisgICAgfQorfQorI2RlZmluZSBDU0NIRURfVkNQ VV9DSEVDSyhfdmMpICAoX19jc2NoZWRfdmNwdV9jaGVjayhfdmMpKQorI2Vsc2UKKyNkZWZpbmUg Q1NDSEVEX1ZDUFVfQ0hFQ0soX3ZjKQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2NzY2hlZF92Y3B1 X2luaXQoc3RydWN0IHZjcHUgKnZjKQoreworICAgIHN0cnVjdCBkb21haW4gKiBjb25zdCBkb20g PSB2Yy0+ZG9tYWluOworICAgIHN0cnVjdCBjc2NoZWRfZG9tICpzZG9tID0gQ1NDSEVEX0RPTShk b20pOworICAgIHN0cnVjdCBjc2NoZWRfdmNwdSAqc3ZjOworCisgICAgcHJpbnRrKCIlczogSW5p dGlhbGl6aW5nIGQlZHYlZFxuIiwKKyAgICAgICAgICAgX19mdW5jX18sIGRvbS0+ZG9tYWluX2lk LCB2Yy0+dmNwdV9pZCk7CisKKyAgICAvKiBBbGxvY2F0ZSBwZXItVkNQVSBpbmZvICovCisgICAg c3ZjID0geG1hbGxvYyhzdHJ1Y3QgY3NjaGVkX3ZjcHUpOworICAgIGlmICggc3ZjID09IE5VTEwg KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBJTklUX0xJU1RfSEVBRCgmc3ZjLT5nbG9iYWxf ZWxlbSk7CisgICAgSU5JVF9MSVNUX0hFQUQoJnN2Yy0+c2RvbV9lbGVtKTsKKyAgICBJTklUX0xJ U1RfSEVBRCgmc3ZjLT5ydW5xX2VsZW0pOworCisgICAgc3ZjLT5zZG9tID0gc2RvbTsKKyAgICBz dmMtPnZjcHUgPSB2YzsKKyAgICBzdmMtPmZsYWdzID0gMFU7CisgICAgdmMtPnNjaGVkX3ByaXYg PSBzdmM7CisKKyAgICBpZiAoICEgaXNfaWRsZV92Y3B1KHZjKSApCisgICAgeworICAgICAgICBC VUdfT04oIHNkb20gPT0gTlVMTCApOworCisgICAgICAgIHN2Yy0+Y3JlZGl0ID0gQ1NDSEVEX0NS RURJVF9JTklUOworICAgICAgICBzdmMtPndlaWdodCA9IHNkb20tPndlaWdodDsKKworICAgICAg ICBsaXN0X2FkZF90YWlsKCZzdmMtPnNkb21fZWxlbSwgJnNkb20tPnZjcHUpOworICAgICAgICBs aXN0X2FkZF90YWlsKCZzdmMtPmdsb2JhbF9lbGVtLCAmY3NjaGVkX3ByaXYuc3ZjKTsKKyAgICAg ICAgc2RvbS0+bnJfdmNwdXMrKzsKKyAgICB9IAorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEJV R19PTiggc2RvbSAhPSBOVUxMICk7CisgICAgICAgIHN2Yy0+Y3JlZGl0ID0gQ1NDSEVEX0lETEVf Q1JFRElUOworICAgICAgICBzdmMtPndlaWdodCA9IDA7CisgICAgICAgIGlmICggY3NjaGVkX3By aXYuaWRsZV9kb21haW4gPT0gTlVMTCApCisgICAgICAgICAgICBjc2NoZWRfcHJpdi5pZGxlX2Rv bWFpbiA9IGRvbTsKKyAgICB9CisKKyAgICAvKiBBbGxvY2F0ZSBwZXItUENQVSBpbmZvICovCisg ICAgaWYgKCB1bmxpa2VseSghQ1NDSEVEX1BDUFUodmMtPnByb2Nlc3NvcikpICkKKyAgICB7Cisg ICAgICAgIGlmICggY3NjaGVkX3BjcHVfaW5pdCh2Yy0+cHJvY2Vzc29yKSAhPSAwICkKKyAgICAg ICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBDU0NIRURfVkNQVV9DSEVDSyh2Yyk7Cisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjc2NoZWRfdmNwdV9kZXN0cm95KHN0cnVj dCB2Y3B1ICp2YykKK3sKKyAgICBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKiBjb25zdCBzdmMgPSBDU0NI RURfVkNQVSh2Yyk7CisgICAgc3RydWN0IGNzY2hlZF9kb20gKiBjb25zdCBzZG9tID0gc3ZjLT5z ZG9tOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICBCVUdfT04oIHNkb20gPT0gTlVM TCApOworICAgIEJVR19PTiggIWxpc3RfZW1wdHkoJnN2Yy0+cnVucV9lbGVtKSApOworCisgICAg c3Bpbl9sb2NrX2lycXNhdmUoJmNzY2hlZF9wcml2LmxvY2ssIGZsYWdzKTsKKworICAgIC8qIFJl bW92ZSBmcm9tIHNkb20gbGlzdCAqLworICAgIGxpc3RfZGVsX2luaXQoJnN2Yy0+Z2xvYmFsX2Vs ZW0pOworICAgIGxpc3RfZGVsX2luaXQoJnN2Yy0+c2RvbV9lbGVtKTsKKworICAgIHNkb20tPm5y X3ZjcHVzLS07CisKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjc2NoZWRfcHJpdi5sb2Nr LCBmbGFncyk7CisKKyAgICB4ZnJlZShzdmMpOworfQorCitzdGF0aWMgdm9pZAorY3NjaGVkX3Zj cHVfc2xlZXAoc3RydWN0IHZjcHUgKnZjKQoreworICAgIHN0cnVjdCBjc2NoZWRfdmNwdSAqIGNv bnN0IHN2YyA9IENTQ0hFRF9WQ1BVKHZjKTsKKworICAgIEJVR19PTiggaXNfaWRsZV92Y3B1KHZj KSApOworCisgICAgaWYgKCBwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIHZjLT5wcm9jZXNzb3IpLmN1 cnIgPT0gdmMgKQorICAgICAgICBjcHVfcmFpc2Vfc29mdGlycSh2Yy0+cHJvY2Vzc29yLCBTQ0hF RFVMRV9TT0ZUSVJRKTsKKyAgICBlbHNlIGlmICggX192Y3B1X29uX3J1bnEoc3ZjKSApCisgICAg ICAgIF9fcnVucV9yZW1vdmUoc3ZjKTsKK30KKworc3RhdGljIHZvaWQKK2NzY2hlZF92Y3B1X3dh a2Uoc3RydWN0IHZjcHUgKnZjKQoreworICAgIHN0cnVjdCBjc2NoZWRfdmNwdSAqIGNvbnN0IHN2 YyA9IENTQ0hFRF9WQ1BVKHZjKTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gdmMtPnBy b2Nlc3NvcjsKKyAgICBzX3RpbWVfdCBub3cgPSAwOworICAgIGludCBmbGFnczsKKworICAgIGQy cHJpbnRrKCJ3IGQlZHYlZFxuIiwgdmMtPmRvbWFpbi0+ZG9tYWluX2lkLCB2Yy0+dmNwdV9pZCk7 CisKKyAgICBCVUdfT04oIGlzX2lkbGVfdmNwdSh2YykgKTsKKworICAgIC8qIEZJWE1FOiBSdW5x dWV1ZSBwZXIgTDIgKi8KKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmY3NjaGVkX3ByaXYubG9jaywg ZmxhZ3MpOworCisKKyAgICAvKiBNYWtlIHN1cmUgc3ZjIHByaW9yaXR5IG1vZCBoYXBwZW5zIGJl Zm9yZSBydW5xIGNoZWNrICovCisgICAgaWYgKCB1bmxpa2VseShwZXJfY3B1KHNjaGVkdWxlX2Rh dGEsIGNwdSkuY3VyciA9PSB2YykgKQorICAgIHsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQor CisgICAgaWYgKCB1bmxpa2VseShfX3ZjcHVfb25fcnVucShzdmMpKSApCisgICAgeworICAgICAg ICAvKiBJZiB3ZSd2ZSBib29zdGVkIHNvbWVvbmUgdGhhdCdzIGFscmVhZHkgb24gYSBydW5xdWV1 ZSwgcHJpb3JpdGl6ZQorICAgICAgICAgKiBpdCBhbmQgaW5mb3JtIHRoZSBjcHUgaW4gcXVlc3Rp b24uICovCisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIElmIHRoZSBjb250ZXh0 IGhhc24ndCBiZWVuIHNhdmVkIGZvciB0aGlzIHZjcHUgeWV0LCB3ZSBjYW4ndCBwdXQgaXQgb24K KyAgICAgKiBhbm90aGVyIHJ1bnF1ZXVlLiAgSW5zdGVhZCwgd2Ugc2V0IGEgZmxhZyBzbyB0aGF0 IGl0IHdpbGwgYmUgcHV0IG9uIHRoZSBydW5xdWV1ZQorICAgICAqIGFmdGVyIHRoZSBjb250ZXh0 IGhhcyBiZWVuIHNhdmVkLiAqLworICAgIGlmICggdW5saWtlbHkgKHRlc3RfYml0KF9fQ1NGTEFH X3NjaGVkdWxlZCwgJnN2Yy0+ZmxhZ3MpICkgKQorICAgIHsKKyAgICAgICAgc2V0X2JpdChfX0NT RkxBR19kZWxheWVkX3J1bnFfYWRkLCAmc3ZjLT5mbGFncyk7CisgICAgICAgIGdvdG8gb3V0Owor ICAgIH0KKworICAgIG5vdyA9IE5PVygpOworCisgICAgLyogUHV0IHRoZSBWQ1BVIG9uIHRoZSBy dW5xICovCisgICAgcnVucV9pbnNlcnQoY3B1LCBzdmMpOworICAgIHJ1bnFfdGlja2xlKGNwdSwg c3ZjLCBub3cpOworCitvdXQ6CisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3NjaGVkX3By aXYubG9jaywgZmxhZ3MpOyAKKyAgICBkMnByaW50aygidy1cbiIpOworICAgIHJldHVybjsKK30K Kworc3RhdGljIHZvaWQKK2NzY2hlZF9jb250ZXh0X3NhdmVkKHN0cnVjdCB2Y3B1ICp2YykKK3sK KyAgICBpbnQgZmxhZ3M7CisgICAgc3RydWN0IGNzY2hlZF92Y3B1ICogY29uc3Qgc3ZjID0gQ1ND SEVEX1ZDUFUodmMpOworCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNzY2hlZF9wcml2LmxvY2ss IGZsYWdzKTsKKworICAgIC8qIFRoaXMgdmNwdSBpcyBub3cgZWxpZ2libGUgdG8gYmUgcHV0IG9u IHRoZSBydW5xdWV1ZSBhZ2FpbiAqLworICAgIGNsZWFyX2JpdChfX0NTRkxBR19zY2hlZHVsZWQs ICZzdmMtPmZsYWdzKTsKKyAgICAKKyAgICAvKiBJZiBzb21lb25lIHdhbnRzIGl0IHRoZXJlLCBw dXQgaXQgdGhlcmUgKi8KKyAgICBpZiAoIHRlc3RfYml0KF9fQ1NGTEFHX2RlbGF5ZWRfcnVucV9h ZGQsICZzdmMtPmZsYWdzKSApCisgICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY3B1 ID0gdmMtPnByb2Nlc3NvcjsKKworICAgICAgICBjbGVhcl9iaXQoX19DU0ZMQUdfZGVsYXllZF9y dW5xX2FkZCwgJnN2Yy0+ZmxhZ3MpOworCisgICAgICAgIEJVR19PTihfX3ZjcHVfb25fcnVucShz dmMpKTsKKyAgICAgICAgCisgICAgICAgIHJ1bnFfaW5zZXJ0KGNwdSwgc3ZjKTsKKyAgICAgICAg cnVucV90aWNrbGUoY3B1LCBzdmMsIE5PVygpKTsKKyAgICB9CisKKyAgICBzcGluX3VubG9ja19p cnFyZXN0b3JlKCZjc2NoZWRfcHJpdi5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK2Nz Y2hlZF9jcHVfcGljayhzdHJ1Y3QgdmNwdSAqdmMpCit7CisgICAgLyogRklYTUU6IENob3NlIGEg c2NoZWR1bGUgZ3JvdXAgYmFzZWQgb24gbG9hZCAqLworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50Citjc2NoZWRfZG9tX2NudGwoCisgICAgc3RydWN0IGRvbWFpbiAqZCwKKyAgICBzdHJ1 Y3QgeGVuX2RvbWN0bF9zY2hlZHVsZXJfb3AgKm9wKQoreworICAgIHN0cnVjdCBjc2NoZWRfZG9t ICogY29uc3Qgc2RvbSA9IENTQ0hFRF9ET00oZCk7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsK KworICAgIGlmICggb3AtPmNtZCA9PSBYRU5fRE9NQ1RMX1NDSEVET1BfZ2V0aW5mbyApCisgICAg eworICAgICAgICBvcC0+dS5jcmVkaXQyLndlaWdodCA9IHNkb20tPndlaWdodDsKKyAgICB9Cisg ICAgZWxzZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wLT5jbWQgPT0gWEVOX0RPTUNUTF9TQ0hF RE9QX3B1dGluZm8pOworCisgICAgICAgIGlmICggb3AtPnUuY3JlZGl0Mi53ZWlnaHQgIT0gMCAp CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CisgICAgICAg ICAgICBpbnQgb2xkX3dlaWdodDsKKworICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNz Y2hlZF9wcml2LmxvY2ssIGZsYWdzKTsKKworICAgICAgICAgICAgb2xkX3dlaWdodCA9IHNkb20t PndlaWdodDsKKworICAgICAgICAgICAgc2RvbS0+d2VpZ2h0ID0gb3AtPnUuY3JlZGl0Mi53ZWln aHQ7CisKKyAgICAgICAgICAgIC8qIFVwZGF0ZSBtYXggd2VpZ2h0ICovCisgICAgICAgICAgICB1 cGRhdGVfbWF4X3dlaWdodChzZG9tLT53ZWlnaHQsIG9sZF93ZWlnaHQpOworCisgICAgICAgICAg ICAvKiBVcGRhdGUgd2VpZ2h0cyBmb3IgdmNwdXMgKi8KKyAgICAgICAgICAgIGxpc3RfZm9yX2Vh Y2ggKCBpdGVyLCAmc2RvbS0+dmNwdSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg c3RydWN0IGNzY2hlZF92Y3B1ICpzdmMgPSBsaXN0X2VudHJ5KGl0ZXIsIHN0cnVjdCBjc2NoZWRf dmNwdSwgc2RvbV9lbGVtKTsKKworICAgICAgICAgICAgICAgIHN2Yy0+d2VpZ2h0ID0gc2RvbS0+ d2VpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZjc2NoZWRfcHJpdi5sb2NrLCBmbGFncyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY3NjaGVkX2RvbV9pbml0KHN0cnVjdCBkb21haW4g KmRvbSkKK3sKKyAgICBzdHJ1Y3QgY3NjaGVkX2RvbSAqc2RvbTsKKyAgICBpbnQgZmxhZ3M7CisK KyAgICBwcmludGsoIiVzOiBJbml0aWFsaXppbmcgZG9tYWluICVkXG4iLCBfX2Z1bmNfXywgZG9t LT5kb21haW5faWQpOworCisgICAgaWYgKCBpc19pZGxlX2RvbWFpbihkb20pICkKKyAgICAgICAg cmV0dXJuIDA7CisKKyAgICBzZG9tID0geG1hbGxvYyhzdHJ1Y3QgY3NjaGVkX2RvbSk7CisgICAg aWYgKCBzZG9tID09IE5VTEwgKQorICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgIC8qIElu aXRpYWxpemUgY3JlZGl0IGFuZCB3ZWlnaHQgKi8KKyAgICBJTklUX0xJU1RfSEVBRCgmc2RvbS0+ dmNwdSk7CisgICAgSU5JVF9MSVNUX0hFQUQoJnNkb20tPnNkb21fZWxlbSk7CisgICAgc2RvbS0+ ZG9tID0gZG9tOworICAgIHNkb20tPndlaWdodCA9IENTQ0hFRF9ERUZBVUxUX1dFSUdIVDsKKyAg ICBzZG9tLT5ucl92Y3B1cyA9IDA7CisKKyAgICBkb20tPnNjaGVkX3ByaXYgPSBzZG9tOworCisg ICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNzY2hlZF9wcml2LmxvY2ssIGZsYWdzKTsKKworICAgIHVw ZGF0ZV9tYXhfd2VpZ2h0KHNkb20tPndlaWdodCwgMCk7CisgICAgbGlzdF9hZGRfdGFpbCgmc2Rv bS0+c2RvbV9lbGVtLCAmY3NjaGVkX3ByaXYuc2RvbSk7CisKKyAgICBzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZjc2NoZWRfcHJpdi5sb2NrLCBmbGFncyk7CisKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQKK2NzY2hlZF9kb21fZGVzdHJveShzdHJ1Y3QgZG9tYWluICpkb20pCit7Cisg ICAgc3RydWN0IGNzY2hlZF9kb20gKnNkb20gPSBDU0NIRURfRE9NKGRvbSk7CisgICAgaW50IGZs YWdzOworCisgICAgQlVHX09OKCFsaXN0X2VtcHR5KCZzZG9tLT52Y3B1KSk7CisKKyAgICBzcGlu X2xvY2tfaXJxc2F2ZSgmY3NjaGVkX3ByaXYubG9jaywgZmxhZ3MpOworCisgICAgbGlzdF9kZWxf aW5pdCgmc2RvbS0+c2RvbV9lbGVtKTsKKworICAgIHVwZGF0ZV9tYXhfd2VpZ2h0KDAsIHNkb20t PndlaWdodCk7CisKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjc2NoZWRfcHJpdi5sb2Nr LCBmbGFncyk7CisgICAgCisgICAgeGZyZWUoQ1NDSEVEX0RPTShkb20pKTsKK30KKworI2lmIDAK K3N0YXRpYyB2b2lkIGNzY2hlZF9sb2FkX2JhbGFuY2UoaW50IGNwdSkKK3sKKyAgICAvKiBGSVhN RTogRG8gc29tZXRoaW5nLiAqLworfQorI2VuZGlmCisKKy8qIEhvdyBsb25nIHNob3VsZCB3ZSBs ZXQgdGhpcyB2Y3B1IHJ1biBmb3I/ICovCitzdGF0aWMgc190aW1lX3QKK2NzY2hlZF9ydW50aW1l KGludCBjcHUsIHN0cnVjdCBjc2NoZWRfdmNwdSAqc25leHQpCit7CisgICAgc190aW1lX3QgdGlt ZSA9IENTQ0hFRF9NQVhfVElNRVI7CisgICAgc3RydWN0IGxpc3RfaGVhZCAqcnVucSA9IFJVTlEo Y3B1KTsKKworICAgIGlmICggaXNfaWRsZV92Y3B1KHNuZXh0LT52Y3B1KSApCisgICAgICAgIHJl dHVybiBDU0NIRURfTUFYX1RJTUVSOworCisgICAgLyogQmFzaWMgdGltZSAqLworICAgIHRpbWUg PSBjMnQoc25leHQtPmNyZWRpdCwgc25leHQpOworCisgICAgLyogTmV4dCBndXkgb24gcnVucXVl dWUgKi8KKyAgICBpZiAoICEgbGlzdF9lbXB0eShydW5xKSApCisgICAgeworICAgICAgICBzdHJ1 Y3QgY3NjaGVkX3ZjcHUgKnN2YyA9IF9fcnVucV9lbGVtKHJ1bnEtPm5leHQpOworICAgICAgICBz X3RpbWVfdCBudGltZTsKKworICAgICAgICBpZiAoICEgaXNfaWRsZV92Y3B1KHN2Yy0+dmNwdSkg KQorICAgICAgICB7CisgICAgICAgICAgICBudGltZSA9IGMydChzbmV4dC0+Y3JlZGl0IC0gc3Zj LT5jcmVkaXQsIHNuZXh0KTsKKworICAgICAgICAgICAgaWYgKCB0aW1lID4gbnRpbWUgKQorICAg ICAgICAgICAgICAgIHRpbWUgPSBudGltZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENo ZWNrIGxpbWl0cyAqLworICAgIGlmICggdGltZSA8IENTQ0hFRF9NSU5fVElNRVIgKQorICAgICAg ICB0aW1lID0gQ1NDSEVEX01JTl9USU1FUjsKKyAgICBlbHNlIGlmICggdGltZSA+IENTQ0hFRF9N QVhfVElNRVIgKQorICAgICAgICB0aW1lID0gQ1NDSEVEX01BWF9USU1FUjsKKworICAgIHJldHVy biB0aW1lOworfQorCit2b2lkIF9fZHVtcF9leGVjc3RhdGUodm9pZCAqdW51c2VkKTsKKworLyoK KyAqIFRoaXMgZnVuY3Rpb24gaXMgaW4gdGhlIGNyaXRpY2FsIHBhdGguIEl0IGlzIGRlc2lnbmVk IHRvIGJlIHNpbXBsZSBhbmQKKyAqIGZhc3QgZm9yIHRoZSBjb21tb24gY2FzZS4KKyAqLworc3Rh dGljIHN0cnVjdCB0YXNrX3NsaWNlCitjc2NoZWRfc2NoZWR1bGUoc190aW1lX3Qgbm93KQorewor ICAgIGNvbnN0IGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisgICAgc3RydWN0IGxpc3Rf aGVhZCAqIGNvbnN0IHJ1bnEgPSBSVU5RKGNwdSk7CisgICAgLy9zdHJ1Y3QgY3NjaGVkX3BjcHUg KnNwYyA9IENTQ0hFRF9QQ1BVKGNwdSk7CisgICAgc3RydWN0IGNzY2hlZF92Y3B1ICogY29uc3Qg c2N1cnIgPSBDU0NIRURfVkNQVShjdXJyZW50KTsKKyAgICBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKnNu ZXh0ID0gTlVMTDsKKyAgICBzdHJ1Y3QgdGFza19zbGljZSByZXQ7CisgICAgaW50IGZsYWdzOwor CisgICAgQ1NDSEVEX1ZDUFVfQ0hFQ0soY3VycmVudCk7CisKKyAgICBkMnByaW50aygic2MgcCVk IGMgZCVkdiVkIG5vdyAlIlBSSV9zdGltZSJcbiIsCisgICAgICAgICAgICAgY3B1LAorICAgICAg ICAgICAgIHNjdXJyLT52Y3B1LT5kb21haW4tPmRvbWFpbl9pZCwKKyAgICAgICAgICAgICBzY3Vy ci0+dmNwdS0+dmNwdV9pZCwKKyAgICAgICAgICAgICBub3cpOworCisKKyAgICAvKiBGSVhNRTog UnVucXVldWUgcGVyIEwyICovCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNzY2hlZF9wcml2Lmxv Y2ssIGZsYWdzKTsKKworICAgIC8qIFVwZGF0ZSBjcmVkaXRzICovCisgICAgYnVybl9jcmVkaXRz KHNjdXJyLCBub3cpOworCisgICAgLyoKKyAgICAgKiBTZWxlY3QgbmV4dCBydW5uYWJsZSBsb2Nh bCBWQ1BVIChpZSB0b3Agb2YgbG9jYWwgcnVucSkuCisgICAgICoKKyAgICAgKiBJZiB0aGUgY3Vy cmVudCB2Y3B1IGlzIHJ1bm5hYmxlLCBhbmQgaGFzIGhpZ2hlciBjcmVkaXQgdGhhbgorICAgICAq IHRoZSBuZXh0IGd1eSBvbiB0aGUgcXVldWUgKG9yIHRoZXJlIGlzIG5vb25lIGVsc2UpLCB3ZSB3 YW50IHRvIHJ1biBoaW0gYWdhaW4uCisgICAgICoKKyAgICAgKiBJZiB0aGUgY3VycmVudCB2Y3B1 IGlzIHJ1bm5hYmxlLCBhbmQgdGhlIG5leHQgZ3V5IG9uIHRoZSBxdWV1ZQorICAgICAqIGhhcyBo aWdoZXIgY3JlZGl0LCB3ZSB3YW50IHRvIG1hcmsgY3VycmVudCBmb3IgZGVsYXllZCBydW5xdWV1 ZQorICAgICAqIGFkZCwgYW5kIHJlbW92ZSB0aGUgbmV4dCBndXkgZnJvbSB0aGUgcXVldWUuCisg ICAgICoKKyAgICAgKiBJZiB0aGUgY3VycmVudCB2Y3B1IGlzIG5vdCBydW5uYWJsZSwgd2Ugd2Fu dCB0byBjaG9zZSB0aGUgaWRsZQorICAgICAqIHZjcHUgZm9yIHRoaXMgcHJvY2Vzc29yLiAKKyAg ICAgKi8KKyAgICBpZiAoIGxpc3RfZW1wdHkocnVucSkgKQorICAgICAgICBzbmV4dCA9IENTQ0hF RF9WQ1BVKGNzY2hlZF9wcml2LmlkbGVfZG9tYWluLT52Y3B1W2NwdV0pOworICAgIGVsc2UKKyAg ICAgICAgc25leHQgPSBfX3J1bnFfZWxlbShydW5xLT5uZXh0KTsKKworICAgIGlmICggIWlzX2lk bGVfdmNwdShjdXJyZW50KSAmJiB2Y3B1X3J1bm5hYmxlKGN1cnJlbnQpICkKKyAgICB7CisgICAg ICAgIC8qIElmIHRoZSBjdXJyZW50IHZjcHUgaXMgcnVubmFibGUsIGFuZCBoYXMgaGlnaGVyIGNy ZWRpdAorICAgICAgICAgKiB0aGFuIHRoZSBuZXh0IG9uIHRoZSBydW5xdWV1ZSwgcnVuIGhpbSBh Z2Fpbi4KKyAgICAgICAgICogT3RoZXJ3aXNlLCBzZXQgaGltIGZvciBkZWxheWVkIHJ1bnEgYWRk LiAqLworICAgICAgICBpZiAoIHNjdXJyLT5jcmVkaXQgPiBzbmV4dC0+Y3JlZGl0KQorICAgICAg ICAgICAgc25leHQgPSBzY3VycjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0X2JpdChf X0NTRkxBR19kZWxheWVkX3J1bnFfYWRkLCAmc2N1cnItPmZsYWdzKTsKKyAgICB9CisKKyAgICBp ZiAoIHNuZXh0ICE9IHNjdXJyICYmICFpc19pZGxlX3ZjcHUoc25leHQtPnZjcHUpICkKKyAgICB7 CisgICAgICAgIF9fcnVucV9yZW1vdmUoc25leHQpOworICAgICAgICBpZiAoIHNuZXh0LT52Y3B1 LT5pc19ydW5uaW5nICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRrKCJwJWQ6IHNuZXh0 IGQlZHYlZCBydW5uaW5nIG9uIHAlZCEgc2N1cnIgZCVkdiVkXG4iLAorICAgICAgICAgICAgICAg ICAgIGNwdSwKKyAgICAgICAgICAgICAgICAgICBzbmV4dC0+dmNwdS0+ZG9tYWluLT5kb21haW5f aWQsIHNuZXh0LT52Y3B1LT52Y3B1X2lkLAorICAgICAgICAgICAgICAgICAgIHNuZXh0LT52Y3B1 LT5wcm9jZXNzb3IsCisgICAgICAgICAgICAgICAgICAgc2N1cnItPnZjcHUtPmRvbWFpbi0+ZG9t YWluX2lkLAorICAgICAgICAgICAgICAgICAgIHNjdXJyLT52Y3B1LT52Y3B1X2lkKTsKKyAgICAg ICAgICAgIEJVRygpOworICAgICAgICB9CisgICAgICAgIHNldF9iaXQoX19DU0ZMQUdfc2NoZWR1 bGVkLCAmc25leHQtPmZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoICFpc19pZGxlX3ZjcHUoc25l eHQtPnZjcHUpICYmIHNuZXh0LT5jcmVkaXQgPD0gQ1NDSEVEX0NSRURJVF9SRVNFVCApCisgICAg ICAgIHJlc2V0X2NyZWRpdChjcHUsIG5vdyk7CisKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZjc2NoZWRfcHJpdi5sb2NrLCBmbGFncyk7CisKKyNpZiAwCisgICAgLyoKKyAgICAgKiBVcGRh dGUgaWRsZXJzIG1hc2sgaWYgbmVjZXNzYXJ5LiBXaGVuIHdlJ3JlIGlkbGluZywgb3RoZXIgQ1BV cworICAgICAqIHdpbGwgdGlja2xlIHVzIHdoZW4gdGhleSBnZXQgZXh0cmEgd29yay4KKyAgICAg Ki8KKyAgICBpZiAoIGlzX2lkbGVfdmNwdShzbmV4dC0+dmNwdSkgKQorICAgIHsKKyAgICAgICAg aWYgKCAhY3B1X2lzc2V0KGNwdSwgY3NjaGVkX3ByaXYuaWRsZXJzKSApCisgICAgICAgICAgICBj cHVfc2V0KGNwdSwgY3NjaGVkX3ByaXYuaWRsZXJzKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIGNw dV9pc3NldChjcHUsIGNzY2hlZF9wcml2LmlkbGVycykgKQorICAgIHsKKyAgICAgICAgY3B1X2Ns ZWFyKGNwdSwgY3NjaGVkX3ByaXYuaWRsZXJzKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICgg IWlzX2lkbGVfdmNwdShzbmV4dC0+dmNwdSkgKQorICAgICAgICBzbmV4dC0+c3RhcnRfdGltZSA9 IG5vdzsKKyAgICAvKgorICAgICAqIFJldHVybiB0YXNrIHRvIHJ1biBuZXh0Li4uCisgICAgICov CisgICAgcmV0LnRpbWUgPSBjc2NoZWRfcnVudGltZShjcHUsIHNuZXh0KTsKKyAgICByZXQudGFz ayA9IHNuZXh0LT52Y3B1OworCisgICAgQ1NDSEVEX1ZDUFVfQ0hFQ0socmV0LnRhc2spOworICAg IHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitjc2NoZWRfZHVtcF92Y3B1KHN0cnVjdCBj c2NoZWRfdmNwdSAqc3ZjKQoreworICAgIHByaW50aygiWyVpLiVpXSBmbGFncz0leCBjcHU9JWki LAorICAgICAgICAgICAgc3ZjLT52Y3B1LT5kb21haW4tPmRvbWFpbl9pZCwKKyAgICAgICAgICAg IHN2Yy0+dmNwdS0+dmNwdV9pZCwKKyAgICAgICAgICAgIHN2Yy0+ZmxhZ3MsCisgICAgICAgICAg ICBzdmMtPnZjcHUtPnByb2Nlc3Nvcik7CisKKyAgICBwcmludGsoIiBjcmVkaXQ9JSIgUFJJaTMy IiBbdz0ldV0iLCBzdmMtPmNyZWRpdCwgc3ZjLT53ZWlnaHQpOworCisgICAgcHJpbnRrKCJcbiIp OworfQorCitzdGF0aWMgdm9pZAorY3NjaGVkX2R1bXBfcGNwdShpbnQgY3B1KQoreworICAgIHN0 cnVjdCBsaXN0X2hlYWQgKnJ1bnEsICppdGVyOworICAgIC8vc3RydWN0IGNzY2hlZF9wY3B1ICpz cGM7CisgICAgc3RydWN0IGNzY2hlZF92Y3B1ICpzdmM7CisgICAgaW50IGxvb3A7CisgICAgY2hh ciBjcHVzdHJbMTAwXTsKKworICAgIC8vc3BjID0gQ1NDSEVEX1BDUFUoY3B1KTsKKyAgICBydW5x ID0gUlVOUShjcHUpOworCisgICAgY3B1bWFza19zY25wcmludGYoY3B1c3RyLCBzaXplb2YoY3B1 c3RyKSwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsY3B1KSk7CisgICAgcHJpbnRrKCIgc2libGlu Zz0lcywgIiwgY3B1c3RyKTsKKyAgICBjcHVtYXNrX3NjbnByaW50ZihjcHVzdHIsIHNpemVvZihj cHVzdHIpLCBwZXJfY3B1KGNwdV9jb3JlX21hcCxjcHUpKTsKKyAgICBwcmludGsoImNvcmU9JXNc biIsIGNwdXN0cik7CisKKyAgICAvKiBjdXJyZW50IFZDUFUgKi8KKyAgICBzdmMgPSBDU0NIRURf VkNQVShwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIGNwdSkuY3Vycik7CisgICAgaWYgKCBzdmMgKQor ICAgIHsKKyAgICAgICAgcHJpbnRrKCJcdHJ1bjogIik7CisgICAgICAgIGNzY2hlZF9kdW1wX3Zj cHUoc3ZjKTsKKyAgICB9CisKKyAgICBsb29wID0gMDsKKyAgICBsaXN0X2Zvcl9lYWNoKCBpdGVy LCBydW5xICkKKyAgICB7CisgICAgICAgIHN2YyA9IF9fcnVucV9lbGVtKGl0ZXIpOworICAgICAg ICBpZiAoIHN2YyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50aygiXHQlM2Q6ICIsICsr bG9vcCk7CisgICAgICAgICAgICBjc2NoZWRfZHVtcF92Y3B1KHN2Yyk7CisgICAgICAgIH0KKyAg ICB9Cit9CisKK3N0YXRpYyB2b2lkCitjc2NoZWRfZHVtcCh2b2lkKQoreworICAgIHN0cnVjdCBs aXN0X2hlYWQgKml0ZXJfc2RvbSwgKml0ZXJfc3ZjOworICAgIGludCBsb29wOworCisgICAgcHJp bnRrKCJpbmZvOlxuIgorICAgICAgICAgICAiXHRuY3B1cyAgICAgICAgICAgICAgPSAldVxuIgor ICAgICAgICAgICAiXHRkZWZhdWx0LXdlaWdodCAgICAgPSAlZFxuIiwKKyAgICAgICAgICAgY3Nj aGVkX3ByaXYubmNwdXMsCisgICAgICAgICAgIENTQ0hFRF9ERUZBVUxUX1dFSUdIVCk7CisKKyAg ICBwcmludGsoImFjdGl2ZSB2Y3B1czpcbiIpOworICAgIGxvb3AgPSAwOworICAgIGxpc3RfZm9y X2VhY2goIGl0ZXJfc2RvbSwgJmNzY2hlZF9wcml2LnNkb20gKQorICAgIHsKKyAgICAgICAgc3Ry dWN0IGNzY2hlZF9kb20gKnNkb207CisgICAgICAgIHNkb20gPSBsaXN0X2VudHJ5KGl0ZXJfc2Rv bSwgc3RydWN0IGNzY2hlZF9kb20sIHNkb21fZWxlbSk7CisKKyAgICAgICAgbGlzdF9mb3JfZWFj aCggaXRlcl9zdmMsICZzZG9tLT52Y3B1ICkKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0 IGNzY2hlZF92Y3B1ICpzdmM7CisgICAgICAgICAgICBzdmMgPSBsaXN0X2VudHJ5KGl0ZXJfc3Zj LCBzdHJ1Y3QgY3NjaGVkX3ZjcHUsIHNkb21fZWxlbSk7CisKKyAgICAgICAgICAgIHByaW50aygi XHQlM2Q6ICIsICsrbG9vcCk7CisgICAgICAgICAgICBjc2NoZWRfZHVtcF92Y3B1KHN2Yyk7Cisg ICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjc2NoZWRfaW5pdCh2b2lkKQorewor ICAgIHNwaW5fbG9ja19pbml0KCZjc2NoZWRfcHJpdi5sb2NrKTsKKyAgICBJTklUX0xJU1RfSEVB RCgmY3NjaGVkX3ByaXYuc2RvbSk7CisgICAgSU5JVF9MSVNUX0hFQUQoJmNzY2hlZF9wcml2LnN2 Yyk7CisKKyAgICBjc2NoZWRfcHJpdi5uY3B1cyA9IDA7CisKKyAgICAvKiBGSVhNRTogUnVucXVl dWUgcGVyIGwyICovCisgICAgY3NjaGVkX3ByaXYubWF4X3dlaWdodCA9IDE7CisgICAgSU5JVF9M SVNUX0hFQUQoJmNzY2hlZF9wcml2LnJ1bnEpOworfQorCitzdHJ1Y3Qgc2NoZWR1bGVyIHNjaGVk X2NyZWRpdDJfZGVmID0geworICAgIC5uYW1lICAgICAgICAgICA9ICJTTVAgQ3JlZGl0IFNjaGVk dWxlciByZXYyIiwKKyAgICAub3B0X25hbWUgICAgICAgPSAiY3JlZGl0MiIsCisgICAgLnNjaGVk X2lkICAgICAgID0gWEVOX1NDSEVEVUxFUl9DUkVESVQyLAorCisgICAgLmluaXRfZG9tYWluICAg ID0gY3NjaGVkX2RvbV9pbml0LAorICAgIC5kZXN0cm95X2RvbWFpbiA9IGNzY2hlZF9kb21fZGVz dHJveSwKKworICAgIC5pbml0X3ZjcHUgICAgICA9IGNzY2hlZF92Y3B1X2luaXQsCisgICAgLmRl c3Ryb3lfdmNwdSAgID0gY3NjaGVkX3ZjcHVfZGVzdHJveSwKKworICAgIC5zbGVlcCAgICAgICAg ICA9IGNzY2hlZF92Y3B1X3NsZWVwLAorICAgIC53YWtlICAgICAgICAgICA9IGNzY2hlZF92Y3B1 X3dha2UsCisKKyAgICAuYWRqdXN0ICAgICAgICAgPSBjc2NoZWRfZG9tX2NudGwsCisKKyAgICAu cGlja19jcHUgICAgICAgPSBjc2NoZWRfY3B1X3BpY2ssCisgICAgLmRvX3NjaGVkdWxlICAgID0g Y3NjaGVkX3NjaGVkdWxlLAorICAgIC5jb250ZXh0X3NhdmVkICA9IGNzY2hlZF9jb250ZXh0X3Nh dmVkLAorCisgICAgLmR1bXBfY3B1X3N0YXRlID0gY3NjaGVkX2R1bXBfcGNwdSwKKyAgICAuZHVt cF9zZXR0aW5ncyAgPSBjc2NoZWRfZHVtcCwKKyAgICAuaW5pdCAgICAgICAgICAgPSBjc2NoZWRf aW5pdCwKK307CmRpZmYgLXIgN2JkMWRkOWZiMzBmIHhlbi9jb21tb24vc2NoZWR1bGUuYwotLS0g YS94ZW4vY29tbW9uL3NjaGVkdWxlLmMJV2VkIEphbiAxMyAxNDoxNTo1MSAyMDEwICswMDAwCisr KyBiL3hlbi9jb21tb24vc2NoZWR1bGUuYwlXZWQgSmFuIDEzIDE0OjM2OjU4IDIwMTAgKzAwMDAK QEAgLTU4LDkgKzU4LDExIEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2NoZWR1bGVyIHNjaGVk X3NlZGZfZGVmOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzY2hlZHVsZXIgc2NoZWRfY3JlZGl0X2Rl ZjsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2NoZWR1bGVyIHNjaGVkX2NyZWRpdDJfZGVmOwogc3Rh dGljIGNvbnN0IHN0cnVjdCBzY2hlZHVsZXIgKl9faW5pdGRhdGEgc2NoZWR1bGVyc1tdID0gewog ICAgICZzY2hlZF9zZWRmX2RlZiwKICAgICAmc2NoZWRfY3JlZGl0X2RlZiwKKyAgICAmc2NoZWRf Y3JlZGl0Ml9kZWYsCiAgICAgTlVMTAogfTsKIApkaWZmIC1yIDdiZDFkZDlmYjMwZiB4ZW4vaW5j bHVkZS9wdWJsaWMvZG9tY3RsLmgKLS0tIGEveGVuL2luY2x1ZGUvcHVibGljL2RvbWN0bC5oCVdl ZCBKYW4gMTMgMTQ6MTU6NTEgMjAxMCArMDAwMAorKysgYi94ZW4vaW5jbHVkZS9wdWJsaWMvZG9t Y3RsLmgJV2VkIEphbiAxMyAxNDozNjo1OCAyMDEwICswMDAwCkBAIC0yOTUsNiArMjk1LDcgQEAK IC8qIFNjaGVkdWxlciB0eXBlcy4gKi8KICNkZWZpbmUgWEVOX1NDSEVEVUxFUl9TRURGICAgICA0 CiAjZGVmaW5lIFhFTl9TQ0hFRFVMRVJfQ1JFRElUICAgNQorI2RlZmluZSBYRU5fU0NIRURVTEVS X0NSRURJVDIgIDYKIC8qIFNldCBvciBnZXQgaW5mbz8gKi8KICNkZWZpbmUgWEVOX0RPTUNUTF9T Q0hFRE9QX3B1dGluZm8gMAogI2RlZmluZSBYRU5fRE9NQ1RMX1NDSEVET1BfZ2V0aW5mbyAxCkBA IC0zMTMsNiArMzE0LDkgQEAKICAgICAgICAgICAgIHVpbnQxNl90IHdlaWdodDsKICAgICAgICAg ICAgIHVpbnQxNl90IGNhcDsKICAgICAgICAgfSBjcmVkaXQ7CisgICAgICAgIHN0cnVjdCB4ZW5f ZG9tY3RsX3NjaGVkX2NyZWRpdDIgeworICAgICAgICAgICAgdWludDE2X3Qgd2VpZ2h0OworICAg ICAgICB9IGNyZWRpdDI7CiAgICAgfSB1OwogfTsKIHR5cGVkZWYgc3RydWN0IHhlbl9kb21jdGxf c2NoZWR1bGVyX29wIHhlbl9kb21jdGxfc2NoZWR1bGVyX29wX3Q7CmRpZmYgLXIgN2JkMWRkOWZi MzBmIHhlbi9pbmNsdWRlL3B1YmxpYy90cmFjZS5oCi0tLSBhL3hlbi9pbmNsdWRlL3B1YmxpYy90 cmFjZS5oCVdlZCBKYW4gMTMgMTQ6MTU6NTEgMjAxMCArMDAwMAorKysgYi94ZW4vaW5jbHVkZS9w dWJsaWMvdHJhY2UuaAlXZWQgSmFuIDEzIDE0OjM2OjU4IDIwMTAgKzAwMDAKQEAgLTUzLDYgKzUz LDcgQEAKICNkZWZpbmUgVFJDX0hWTV9IQU5ETEVSICAgMHgwMDA4MjAwMCAgIC8qIHZhcmlvdXMg SFZNIGhhbmRsZXJzICAgICAgKi8KIAogI2RlZmluZSBUUkNfU0NIRURfTUlOICAgICAgIDB4MDAw MjEwMDAgICAvKiBKdXN0IHJ1bnN0YXRlIGNoYW5nZXMgKi8KKyNkZWZpbmUgVFJDX1NDSEVEX0NM QVNTICAgICAweDAwMDIyMDAwICAgLyogU2NoZWR1bGVyLXNwZWNpZmljICAgICovCiAjZGVmaW5l IFRSQ19TQ0hFRF9WRVJCT1NFICAgMHgwMDAyODAwMCAgIC8qIE1vcmUgaW5jbHVzaXZlIHNjaGVk dWxpbmcgKi8KIAogLyogVHJhY2UgZXZlbnRzIHBlciBjbGFzcyAqLwo= --001517475b500b4791047d0cdc93 Content-Type: text/x-patch; charset=US-ASCII; name="credit2-tools.diff" Content-Disposition: attachment; filename="credit2-tools.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g4e875ru3 ZGlmZiAtciA2MzUzMWU2NDA4MjggdG9vbHMvbGlieGMvTWFrZWZpbGUKLS0tIGEvdG9vbHMvbGli eGMvTWFrZWZpbGUJTW9uIERlYyAwNyAxNzowMToxMSAyMDA5ICswMDAwCisrKyBiL3Rvb2xzL2xp YnhjL01ha2VmaWxlCU1vbiBEZWMgMjEgMTE6NDU6MDAgMjAwOSArMDAwMApAQCAtMTcsNiArMTcs NyBAQAogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfcHJpdmF0ZS5jCiBDVFJMX1NSQ1MteSAgICAg ICArPSB4Y19zZWRmLmMKIENUUkxfU1JDUy15ICAgICAgICs9IHhjX2NzY2hlZC5jCitDVFJMX1NS Q1MteSAgICAgICArPSB4Y19jc2NoZWQyLmMKIENUUkxfU1JDUy15ICAgICAgICs9IHhjX3RidWYu YwogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfcG0uYwogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNf Y3B1X2hvdHBsdWcuYwpkaWZmIC1yIDYzNTMxZTY0MDgyOCB0b29scy9saWJ4Yy94Y19jc2NoZWQy LmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvdG9v bHMvbGlieGMveGNfY3NjaGVkMi5jCU1vbiBEZWMgMjEgMTE6NDU6MDAgMjAwOSArMDAwMApAQCAt MCwwICsxLDUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKEMpIDIwMDYgLSBFbW1hbnVl bCBBY2thb3V5IC0gWGVuU291cmNlIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICog ICAgICAgIEZpbGU6IHhjX2NzY2hlZC5jCisgKiAgICAgIEF1dGhvcjogRW1tYW51ZWwgQWNrYW91 eQorICoKKyAqIERlc2NyaXB0aW9uOiBYQyBJbnRlcmZhY2UgdG8gdGhlIGNyZWRpdCBzY2hlZHVs ZXIKKyAqCisgKi8KKyNpbmNsdWRlICJ4Y19wcml2YXRlLmgiCisKKworaW50Cit4Y19zY2hlZF9j cmVkaXQyX2RvbWFpbl9zZXQoCisgICAgaW50IHhjX2hhbmRsZSwKKyAgICB1aW50MzJfdCBkb21p ZCwKKyAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9zY2hlZF9jcmVkaXQyICpzZG9tKQoreworICAgIERF Q0xBUkVfRE9NQ1RMOworCisgICAgZG9tY3RsLmNtZCA9IFhFTl9ET01DVExfc2NoZWR1bGVyX29w OworICAgIGRvbWN0bC5kb21haW4gPSAoZG9taWRfdCkgZG9taWQ7CisgICAgZG9tY3RsLnUuc2No ZWR1bGVyX29wLnNjaGVkX2lkID0gWEVOX1NDSEVEVUxFUl9DUkVESVQyOworICAgIGRvbWN0bC51 LnNjaGVkdWxlcl9vcC5jbWQgPSBYRU5fRE9NQ1RMX1NDSEVET1BfcHV0aW5mbzsKKyAgICBkb21j dGwudS5zY2hlZHVsZXJfb3AudS5jcmVkaXQyID0gKnNkb207CisKKyAgICByZXR1cm4gZG9fZG9t Y3RsKHhjX2hhbmRsZSwgJmRvbWN0bCk7Cit9CisKK2ludAoreGNfc2NoZWRfY3JlZGl0Ml9kb21h aW5fZ2V0KAorICAgIGludCB4Y19oYW5kbGUsCisgICAgdWludDMyX3QgZG9taWQsCisgICAgc3Ry dWN0IHhlbl9kb21jdGxfc2NoZWRfY3JlZGl0MiAqc2RvbSkKK3sKKyAgICBERUNMQVJFX0RPTUNU TDsKKyAgICBpbnQgZXJyOworCisgICAgZG9tY3RsLmNtZCA9IFhFTl9ET01DVExfc2NoZWR1bGVy X29wOworICAgIGRvbWN0bC5kb21haW4gPSAoZG9taWRfdCkgZG9taWQ7CisgICAgZG9tY3RsLnUu c2NoZWR1bGVyX29wLnNjaGVkX2lkID0gWEVOX1NDSEVEVUxFUl9DUkVESVQyOworICAgIGRvbWN0 bC51LnNjaGVkdWxlcl9vcC5jbWQgPSBYRU5fRE9NQ1RMX1NDSEVET1BfZ2V0aW5mbzsKKworICAg IGVyciA9IGRvX2RvbWN0bCh4Y19oYW5kbGUsICZkb21jdGwpOworICAgIGlmICggZXJyID09IDAg KQorICAgICAgICAqc2RvbSA9IGRvbWN0bC51LnNjaGVkdWxlcl9vcC51LmNyZWRpdDI7CisKKyAg ICByZXR1cm4gZXJyOworfQpkaWZmIC1yIDYzNTMxZTY0MDgyOCB0b29scy9saWJ4Yy94ZW5jdHJs LmgKLS0tIGEvdG9vbHMvbGlieGMveGVuY3RybC5oCU1vbiBEZWMgMDcgMTc6MDE6MTEgMjAwOSAr MDAwMAorKysgYi90b29scy9saWJ4Yy94ZW5jdHJsLmgJTW9uIERlYyAyMSAxMTo0NTowMCAyMDA5 ICswMDAwCkBAIC00NjksNiArNDY5LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHhlbl9kb21jdGxfc2NoZWRfY3JlZGl0ICpzZG9tKTsKIAoraW50IHhjX3NjaGVkX2NyZWRpdDJf ZG9tYWluX3NldChpbnQgeGNfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4 ZW5fZG9tY3RsX3NjaGVkX2NyZWRpdDIgKnNkb20pOworCitpbnQgeGNfc2NoZWRfY3JlZGl0Ml9k b21haW5fZ2V0KGludCB4Y19oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhl bl9kb21jdGxfc2NoZWRfY3JlZGl0MiAqc2RvbSk7CisKIC8qKgogICogVGhpcyBmdW5jdGlvbiBz ZW5kcyBhIHRyaWdnZXIgdG8gYSBkb21haW4uCiAgKgpkaWZmIC1yIDYzNTMxZTY0MDgyOCB0b29s cy9weXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMKLS0tIGEvdG9vbHMvcHl0aG9uL3hlbi9sb3ds ZXZlbC94Yy94Yy5jCU1vbiBEZWMgMDcgMTc6MDE6MTEgMjAwOSArMDAwMAorKysgYi90b29scy9w eXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMJTW9uIERlYyAyMSAxMTo0NTowMCAyMDA5ICswMDAw CkBAIC0xMzc0LDYgKzEzNzQsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FwIiwg ICAgIHNkb20uY2FwKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICpweXhjX3NjaGVkX2NyZWRpdDJf ZG9tYWluX3NldChYY09iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqa3dkcykKK3sKKyAgICB1aW50MzJfdCBk b21pZDsKKyAgICB1aW50MTZfdCB3ZWlnaHQ7CisgICAgc3RhdGljIGNoYXIgKmt3ZF9saXN0W10g PSB7ICJkb21pZCIsICJ3ZWlnaHQiLCBOVUxMIH07CisgICAgc3RhdGljIGNoYXIga3dkX3R5cGVb XSA9ICJJfEgiOworICAgIHN0cnVjdCB4ZW5fZG9tY3RsX3NjaGVkX2NyZWRpdDIgc2RvbTsKKyAg ICAKKyAgICB3ZWlnaHQgPSAwOworICAgIGlmKCAhUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRz KGFyZ3MsIGt3ZHMsIGt3ZF90eXBlLCBrd2RfbGlzdCwgCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmRvbWlkLCAmd2VpZ2h0KSApCisgICAgICAgIHJldHVybiBOVUxMOwor CisgICAgc2RvbS53ZWlnaHQgPSB3ZWlnaHQ7CisKKyAgICBpZiAoIHhjX3NjaGVkX2NyZWRpdDJf ZG9tYWluX3NldChzZWxmLT54Y19oYW5kbGUsIGRvbWlkLCAmc2RvbSkgIT0gMCApCisgICAgICAg IHJldHVybiBweXhjX2Vycm9yX3RvX2V4Y2VwdGlvbigpOworCisgICAgUHlfSU5DUkVGKHplcm8p OworICAgIHJldHVybiB6ZXJvOworfQorCitzdGF0aWMgUHlPYmplY3QgKnB5eGNfc2NoZWRfY3Jl ZGl0Ml9kb21haW5fZ2V0KFhjT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICB1 aW50MzJfdCBkb21pZDsKKyAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9zY2hlZF9jcmVkaXQyIHNkb207 CisgICAgCisgICAgaWYoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJJIiwgJmRvbWlkKSApCisg ICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIGlmICggeGNfc2NoZWRfY3JlZGl0Ml9kb21h aW5fZ2V0KHNlbGYtPnhjX2hhbmRsZSwgZG9taWQsICZzZG9tKSAhPSAwICkKKyAgICAgICAgcmV0 dXJuIHB5eGNfZXJyb3JfdG9fZXhjZXB0aW9uKCk7CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1 ZSgie3M6SH0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWlnaHQiLCAgc2RvbS53ZWln aHQpOworfQorCiBzdGF0aWMgUHlPYmplY3QgKnB5eGNfZG9tYWluX3NldG1heG1lbShYY09iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgdWludDMyX3QgZG9tOwpAQCAtMTkxMiw2 ICsxOTUxLDI0IEBACiAgICAgICAiUmV0dXJuczogICBbZGljdF1cbiIKICAgICAgICIgd2VpZ2h0 ICAgIFtzaG9ydF06IGRvbWFpbidzIHNjaGVkdWxpbmcgd2VpZ2h0XG4ifSwKIAorICAgIHsgInNj aGVkX2NyZWRpdDJfZG9tYWluX3NldCIsCisgICAgICAoUHlDRnVuY3Rpb24pcHl4Y19zY2hlZF9j cmVkaXQyX2RvbWFpbl9zZXQsCisgICAgICBNRVRIX0tFWVdPUkRTLCAiXG4iCisgICAgICAiU2V0 IHRoZSBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIGEgZG9tYWluIHdoZW4gcnVubmluZyB3aXRo IHRoZVxuIgorICAgICAgIlNNUCBjcmVkaXQyIHNjaGVkdWxlci5cbiIKKyAgICAgICIgZG9taWQg ICAgIFtpbnRdOiAgIGRvbWFpbiBpZCB0byBzZXRcbiIKKyAgICAgICIgd2VpZ2h0ICAgIFtzaG9y dF06IGRvbWFpbidzIHNjaGVkdWxpbmcgd2VpZ2h0XG4iCisgICAgICAiUmV0dXJuczogW2ludF0g MCBvbiBzdWNjZXNzOyAtMSBvbiBlcnJvci5cbiIgfSwKKworICAgIHsgInNjaGVkX2NyZWRpdDJf ZG9tYWluX2dldCIsCisgICAgICAoUHlDRnVuY3Rpb24pcHl4Y19zY2hlZF9jcmVkaXQyX2RvbWFp bl9nZXQsCisgICAgICBNRVRIX1ZBUkFSR1MsICJcbiIKKyAgICAgICJHZXQgdGhlIHNjaGVkdWxp bmcgcGFyYW1ldGVycyBmb3IgYSBkb21haW4gd2hlbiBydW5uaW5nIHdpdGggdGhlXG4iCisgICAg ICAiU01QIGNyZWRpdDIgc2NoZWR1bGVyLlxuIgorICAgICAgIiBkb21pZCAgICAgW2ludF06ICAg ZG9tYWluIGlkIHRvIGdldFxuIgorICAgICAgIlJldHVybnM6ICAgW2RpY3RdXG4iCisgICAgICAi IHdlaWdodCAgICBbc2hvcnRdOiBkb21haW4ncyBzY2hlZHVsaW5nIHdlaWdodFxuIn0sCisKICAg ICB7ICJldnRjaG5fYWxsb2NfdW5ib3VuZCIsIAogICAgICAgKFB5Q0Z1bmN0aW9uKXB5eGNfZXZ0 Y2huX2FsbG9jX3VuYm91bmQsCiAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAi XG4iCkBAIC0yMjcyLDYgKzIzMjksNyBAQAogICAgIC8qIEV4cG9zZSBzb21lIGxpYnhjIGNvbnN0 YW50cyB0byBQeXRob24gKi8KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWEVOX1ND SEVEVUxFUl9TRURGIiwgWEVOX1NDSEVEVUxFUl9TRURGKTsKICAgICBQeU1vZHVsZV9BZGRJbnRD b25zdGFudChtLCAiWEVOX1NDSEVEVUxFUl9DUkVESVQiLCBYRU5fU0NIRURVTEVSX0NSRURJVCk7 CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlhFTl9TQ0hFRFVMRVJfQ1JFRElUMiIs IFhFTl9TQ0hFRFVMRVJfQ1JFRElUMik7CiAKIH0KIApkaWZmIC1yIDYzNTMxZTY0MDgyOCB0b29s cy9weXRob24veGVuL3hlbmQvWGVuZEFQSS5weQotLS0gYS90b29scy9weXRob24veGVuL3hlbmQv WGVuZEFQSS5weQlNb24gRGVjIDA3IDE3OjAxOjExIDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0 aG9uL3hlbi94ZW5kL1hlbmRBUEkucHkJTW9uIERlYyAyMSAxMTo0NTowMCAyMDA5ICswMDAwCkBA IC0xNjI2LDggKzE2MjYsNyBAQAogICAgICAgICBpZiAnd2VpZ2h0JyBpbiB4ZW5pbmZvLmluZm9b J3ZjcHVzX3BhcmFtcyddIFwKICAgICAgICAgICAgYW5kICdjYXAnIGluIHhlbmluZm8uaW5mb1sn dmNwdXNfcGFyYW1zJ106CiAgICAgICAgICAgICB3ZWlnaHQgPSB4ZW5pbmZvLmluZm9bJ3ZjcHVz X3BhcmFtcyddWyd3ZWlnaHQnXQotICAgICAgICAgICAgY2FwID0geGVuaW5mby5pbmZvWyd2Y3B1 c19wYXJhbXMnXVsnY2FwJ10KLSAgICAgICAgICAgIHhlbmRvbS5kb21haW5fc2NoZWRfY3JlZGl0 X3NldCh4ZW5pbmZvLmdldERvbWlkKCksIHdlaWdodCwgY2FwKQorICAgICAgICAgICAgeGVuZG9t LmRvbWFpbl9zY2hlZF9jcmVkaXQyX3NldCh4ZW5pbmZvLmdldERvbWlkKCksIHdlaWdodCkKIAog ICAgIGRlZiBWTV9zZXRfVkNQVXNfbnVtYmVyX2xpdmUoc2VsZiwgXywgdm1fcmVmLCBudW0pOgog ICAgICAgICBkb20gPSBYZW5kRG9tYWluLmluc3RhbmNlKCkuZ2V0X3ZtX2J5X3V1aWQodm1fcmVm KQpkaWZmIC1yIDYzNTMxZTY0MDgyOCB0b29scy9weXRob24veGVuL3hlbmQvWGVuZERvbWFpbi5w eQotLS0gYS90b29scy9weXRob24veGVuL3hlbmQvWGVuZERvbWFpbi5weQlNb24gRGVjIDA3IDE3 OjAxOjExIDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmREb21haW4u cHkJTW9uIERlYyAyMSAxMTo0NTowMCAyMDA5ICswMDAwCkBAIC0xNzU3LDYgKzE3NTcsNjAgQEAK ICAgICAgICAgICAgIGxvZy5leGNlcHRpb24oZXgpCiAgICAgICAgICAgICByYWlzZSBYZW5kRXJy b3Ioc3RyKGV4KSkKIAorICAgIGRlZiBkb21haW5fc2NoZWRfY3JlZGl0Ml9nZXQoc2VsZiwgZG9t aWQpOgorICAgICAgICAiIiJHZXQgY3JlZGl0MiBzY2hlZHVsZXIgcGFyYW1ldGVycyBmb3IgYSBk b21haW4uCisKKyAgICAgICAgQHBhcmFtIGRvbWlkOiBEb21haW4gSUQgb3IgTmFtZQorICAgICAg ICBAdHlwZSBkb21pZDogaW50IG9yIHN0cmluZy4KKyAgICAgICAgQHJ0eXBlOiBkaWN0IHdpdGgg a2V5cyAnd2VpZ2h0JworICAgICAgICBAcmV0dXJuOiBjcmVkaXQyIHNjaGVkdWxlciBwYXJhbWV0 ZXJzCisgICAgICAgICIiIgorICAgICAgICBkb21pbmZvID0gc2VsZi5kb21haW5fbG9va3VwX25y KGRvbWlkKQorICAgICAgICBpZiBub3QgZG9taW5mbzoKKyAgICAgICAgICAgIHJhaXNlIFhlbmRJ bnZhbGlkRG9tYWluKHN0cihkb21pZCkpCisgICAgICAgIAorICAgICAgICBpZiBkb21pbmZvLl9z dGF0ZUdldCgpIGluIChET01fU1RBVEVfUlVOTklORywgRE9NX1NUQVRFX1BBVVNFRCk6CisgICAg ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjLnNjaGVkX2NyZWRpdDJfZG9t YWluX2dldChkb21pbmZvLmdldERvbWlkKCkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9u LCBleDoKKyAgICAgICAgICAgICAgICByYWlzZSBYZW5kRXJyb3Ioc3RyKGV4KSkKKyAgICAgICAg ZWxzZToKKyAgICAgICAgICAgIHJldHVybiB7J3dlaWdodCcgOiBkb21pbmZvLmdldFdlaWdodCgp fQorICAgIAorICAgIGRlZiBkb21haW5fc2NoZWRfY3JlZGl0Ml9zZXQoc2VsZiwgZG9taWQsIHdl aWdodCA9IE5vbmUpOgorICAgICAgICAiIiJTZXQgY3JlZGl0MiBzY2hlZHVsZXIgcGFyYW1ldGVy cyBmb3IgYSBkb21haW4uCisKKyAgICAgICAgQHBhcmFtIGRvbWlkOiBEb21haW4gSUQgb3IgTmFt ZQorICAgICAgICBAdHlwZSBkb21pZDogaW50IG9yIHN0cmluZy4KKyAgICAgICAgQHR5cGUgd2Vp Z2h0OiBpbnQKKyAgICAgICAgQHJ0eXBlOiAwCisgICAgICAgICIiIgorICAgICAgICBzZXRfd2Vp Z2h0ID0gRmFsc2UKKyAgICAgICAgZG9taW5mbyA9IHNlbGYuZG9tYWluX2xvb2t1cF9ucihkb21p ZCkKKyAgICAgICAgaWYgbm90IGRvbWluZm86CisgICAgICAgICAgICByYWlzZSBYZW5kSW52YWxp ZERvbWFpbihzdHIoZG9taWQpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB3ZWlnaHQg aXMgTm9uZToKKyAgICAgICAgICAgICAgICB3ZWlnaHQgPSBpbnQoMCkKKyAgICAgICAgICAgIGVs aWYgd2VpZ2h0IDwgMSBvciB3ZWlnaHQgPiA2NTUzNToKKyAgICAgICAgICAgICAgICByYWlzZSBY ZW5kRXJyb3IoIndlaWdodCBpcyBvdXQgb2YgcmFuZ2UiKQorICAgICAgICAgICAgZWxzZToKKyAg ICAgICAgICAgICAgICBzZXRfd2VpZ2h0ID0gVHJ1ZQorCisgICAgICAgICAgICBhc3NlcnQgdHlw ZSh3ZWlnaHQpID09IGludAorCisgICAgICAgICAgICByYyA9IDAKKyAgICAgICAgICAgIGlmIGRv bWluZm8uX3N0YXRlR2V0KCkgaW4gKERPTV9TVEFURV9SVU5OSU5HLCBET01fU1RBVEVfUEFVU0VE KToKKyAgICAgICAgICAgICAgICByYyA9IHhjLnNjaGVkX2NyZWRpdDJfZG9tYWluX3NldChkb21p bmZvLmdldERvbWlkKCksIHdlaWdodCkKKyAgICAgICAgICAgIGlmIHJjID09IDA6CisgICAgICAg ICAgICAgICAgaWYgc2V0X3dlaWdodDoKKyAgICAgICAgICAgICAgICAgICAgZG9taW5mby5zZXRX ZWlnaHQod2VpZ2h0KQorICAgICAgICAgICAgICAgIHNlbGYubWFuYWdlZF9jb25maWdfc2F2ZShk b21pbmZvKQorICAgICAgICAgICAgcmV0dXJuIHJjCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s IGV4OgorICAgICAgICAgICAgbG9nLmV4Y2VwdGlvbihleCkKKyAgICAgICAgICAgIHJhaXNlIFhl bmRFcnJvcihzdHIoZXgpKQorCiAgICAgZGVmIGRvbWFpbl9tYXhtZW1fc2V0KHNlbGYsIGRvbWlk LCBtZW0pOgogICAgICAgICAiIiJTZXQgdGhlIG1lbW9yeSBsaW1pdCBmb3IgYSBkb21haW4uCiAK ZGlmZiAtciA2MzUzMWU2NDA4MjggdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmREb21haW5JbmZv LnB5Ci0tLSBhL3Rvb2xzL3B5dGhvbi94ZW4veGVuZC9YZW5kRG9tYWluSW5mby5weQlNb24gRGVj IDA3IDE3OjAxOjExIDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmRE b21haW5JbmZvLnB5CU1vbiBEZWMgMjEgMTE6NDU6MDAgMjAwOSArMDAwMApAQCAtMjcxOSw2ICsy NzE5LDEwIEBACiAgICAgICAgICAgICBYZW5kRG9tYWluLmluc3RhbmNlKCkuZG9tYWluX3NjaGVk X2NyZWRpdF9zZXQoc2VsZi5nZXREb21pZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0V2VpZ2h0KCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5n ZXRDYXAoKSkKKyAgICAgICAgZWxpZiBYZW5kTm9kZS5pbnN0YW5jZSgpLnhlbnNjaGVkaW5mbygp ID09ICdjcmVkaXQyJzoKKyAgICAgICAgICAgIGZyb20geGVuLnhlbmQgaW1wb3J0IFhlbmREb21h aW4KKyAgICAgICAgICAgIFhlbmREb21haW4uaW5zdGFuY2UoKS5kb21haW5fc2NoZWRfY3JlZGl0 Ml9zZXQoc2VsZi5nZXREb21pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldFdlaWdodCgpKQogCiAgICAgZGVmIF9p bml0RG9tYWluKHNlbGYpOgogICAgICAgICBsb2cuZGVidWcoJ1hlbmREb21haW5JbmZvLmluaXRE b21haW46ICVzICVzJywKZGlmZiAtciA2MzUzMWU2NDA4MjggdG9vbHMvcHl0aG9uL3hlbi94ZW5k L1hlbmROb2RlLnB5Ci0tLSBhL3Rvb2xzL3B5dGhvbi94ZW4veGVuZC9YZW5kTm9kZS5weQlNb24g RGVjIDA3IDE3OjAxOjExIDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hl bmROb2RlLnB5CU1vbiBEZWMgMjEgMTE6NDU6MDAgMjAwOSArMDAwMApAQCAtNzYwLDYgKzc2MCw4 IEBACiAgICAgICAgICAgICByZXR1cm4gJ3NlZGYnCiAgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0g eGVuLmxvd2xldmVsLnhjLlhFTl9TQ0hFRFVMRVJfQ1JFRElUOgogICAgICAgICAgICAgcmV0dXJu ICdjcmVkaXQnCisgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0geGVuLmxvd2xldmVsLnhjLlhFTl9T Q0hFRFVMRVJfQ1JFRElUMjoKKyAgICAgICAgICAgIHJldHVybiAnY3JlZGl0MicKICAgICAgICAg ZWxzZToKICAgICAgICAgICAgIHJldHVybiAndW5rbm93bicKIApAQCAtOTYxLDYgKzk2Myw4IEBA CiAgICAgICAgICAgICByZXR1cm4gJ3NlZGYnCiAgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0geGVu Lmxvd2xldmVsLnhjLlhFTl9TQ0hFRFVMRVJfQ1JFRElUOgogICAgICAgICAgICAgcmV0dXJuICdj cmVkaXQnCisgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0geGVuLmxvd2xldmVsLnhjLlhFTl9TQ0hF RFVMRVJfQ1JFRElUMjoKKyAgICAgICAgICAgIHJldHVybiAnY3JlZGl0MicKICAgICAgICAgZWxz ZToKICAgICAgICAgICAgIHJldHVybiAndW5rbm93bicKIApkaWZmIC1yIDYzNTMxZTY0MDgyOCB0 b29scy9weXRob24veGVuL3hlbmQvWGVuZFZNTWV0cmljcy5weQotLS0gYS90b29scy9weXRob24v eGVuL3hlbmQvWGVuZFZNTWV0cmljcy5weQlNb24gRGVjIDA3IDE3OjAxOjExIDIwMDkgKzAwMDAK KysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmRWTU1ldHJpY3MucHkJTW9uIERlYyAyMSAx MTo0NTowMCAyMDA5ICswMDAwCkBAIC0xMjksNiArMTI5LDcgQEAKICAgICAgICAgICAgICAgICBw YXJhbXNfbGl2ZVsnY3B1bWFwJWknICUgaV0gPSBcCiAgICAgICAgICAgICAgICAgICAgICIsIi5q b2luKG1hcChzdHIsIGluZm9bJ2NwdW1hcCddKSkKIAorICAgICAgICAgICAgICAgICMgRklYTUU6 IGNyZWRpdDI/PwogICAgICAgICAgICAgcGFyYW1zX2xpdmUudXBkYXRlKHhjLnNjaGVkX2NyZWRp dF9kb21haW5fZ2V0KGRvbWlkKSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHBh cmFtc19saXZlCmRpZmYgLXIgNjM1MzFlNjQwODI4IHRvb2xzL3B5dGhvbi94ZW4veGVuZC9zZXJ2 ZXIvU3J2RG9tYWluLnB5Ci0tLSBhL3Rvb2xzL3B5dGhvbi94ZW4veGVuZC9zZXJ2ZXIvU3J2RG9t YWluLnB5CU1vbiBEZWMgMDcgMTc6MDE6MTEgMjAwOSArMDAwMAorKysgYi90b29scy9weXRob24v eGVuL3hlbmQvc2VydmVyL1NydkRvbWFpbi5weQlNb24gRGVjIDIxIDExOjQ1OjAwIDIwMDkgKzAw MDAKQEAgLTE2Myw2ICsxNjMsMjAgQEAKICAgICAgICAgdmFsID0gZm4ocmVxLmFyZ3MsIHsnZG9t Jzogc2VsZi5kb20uZ2V0TmFtZSgpfSkKICAgICAgICAgcmV0dXJuIHZhbAogCisgICAgZGVmIG9w X2RvbWFpbl9zY2hlZF9jcmVkaXQyX2dldChzZWxmLCBfLCByZXEpOgorICAgICAgICBmbiA9IEZv cm1GbihzZWxmLnhkLmRvbWFpbl9zY2hlZF9jcmVkaXQyX2dldCwKKyAgICAgICAgICAgICAgICAg ICAgW1snZG9tJywgJ3N0ciddXSkKKyAgICAgICAgdmFsID0gZm4ocmVxLmFyZ3MsIHsnZG9tJzog c2VsZi5kb20uZ2V0TmFtZSgpfSkKKyAgICAgICAgcmV0dXJuIHZhbAorCisKKyAgICBkZWYgb3Bf ZG9tYWluX3NjaGVkX2NyZWRpdDJfc2V0KHNlbGYsIF8sIHJlcSk6CisgICAgICAgIGZuID0gRm9y bUZuKHNlbGYueGQuZG9tYWluX3NjaGVkX2NyZWRpdDJfc2V0LAorICAgICAgICAgICAgICAgICAg ICBbWydkb20nLCAnc3RyJ10sCisgICAgICAgICAgICAgICAgICAgICBbJ3dlaWdodCcsICdpbnQn XV0pCisgICAgICAgIHZhbCA9IGZuKHJlcS5hcmdzLCB7J2RvbSc6IHNlbGYuZG9tLmdldE5hbWUo KX0pCisgICAgICAgIHJldHVybiB2YWwKKwogICAgIGRlZiBvcF9tYXhtZW1fc2V0KHNlbGYsIF8s IHJlcSk6CiAgICAgICAgIHJldHVybiBzZWxmLmNhbGwoc2VsZi5kb20uc2V0TWVtb3J5TWF4aW11 bSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbWydtZW1vcnknLCAnaW50J11dLApkaWZmIC1y IDYzNTMxZTY0MDgyOCB0b29scy9weXRob24veGVuL3htL21haW4ucHkKLS0tIGEvdG9vbHMvcHl0 aG9uL3hlbi94bS9tYWluLnB5CU1vbiBEZWMgMDcgMTc6MDE6MTEgMjAwOSArMDAwMAorKysgYi90 b29scy9weXRob24veGVuL3htL21haW4ucHkJTW9uIERlYyAyMSAxMTo0NTowMCAyMDA5ICswMDAw CkBAIC0xNTAsNiArMTUwLDggQEAKICAgICAnc2NoZWQtc2VkZicgIDogKCc8RG9tYWluPiBbb3B0 aW9uc10nLCAnR2V0L3NldCBFREYgcGFyYW1ldGVycy4nKSwKICAgICAnc2NoZWQtY3JlZGl0Jzog KCdbLWQgPERvbWFpbj4gWy13Wz1XRUlHSFRdfC1jWz1DQVBdXV0nLAogICAgICAgICAgICAgICAg ICAgICAgJ0dldC9zZXQgY3JlZGl0IHNjaGVkdWxlciBwYXJhbWV0ZXJzLicpLAorICAgICdzY2hl ZC1jcmVkaXQyJzogKCdbLWQgPERvbWFpbj4gWy13Wz1XRUlHSFRdXScsCisgICAgICAgICAgICAg ICAgICAgICAnR2V0L3NldCBjcmVkaXQyIHNjaGVkdWxlciBwYXJhbWV0ZXJzLicpLAogICAgICdz eXNycScgICAgICAgOiAoJzxEb21haW4+IDxsZXR0ZXI+JywgJ1NlbmQgYSBzeXNycSB0byBhIGRv bWFpbi4nKSwKICAgICAnZGVidWcta2V5cycgIDogKCc8S2V5cz4nLCAnU2VuZCBkZWJ1ZyBrZXlz IHRvIFhlbi4nKSwKICAgICAndHJpZ2dlcicgICAgIDogKCc8RG9tYWluPiA8bm1pfHJlc2V0fGlu aXR8czNyZXN1bWV8cG93ZXI+IFs8VkNQVT5dJywKQEAgLTI2NSw2ICsyNjcsMTAgQEAKICAgICAg ICAoJy13IFdFSUdIVCcsICctLXdlaWdodD1XRUlHSFQnLCAnV2VpZ2h0IChpbnQpJyksCiAgICAg ICAgKCctYyBDQVAnLCAgICAnLS1jYXA9Q0FQJywgICAgICAgJ0NhcCAoaW50KScpLAogICAgICks CisgICAgJ3NjaGVkLWNyZWRpdDInOiAoCisgICAgICAgKCctZCBET01BSU4nLCAnLS1kb21haW49 RE9NQUlOJywgJ0RvbWFpbiB0byBtb2RpZnknKSwKKyAgICAgICAoJy13IFdFSUdIVCcsICctLXdl aWdodD1XRUlHSFQnLCAnV2VpZ2h0IChpbnQpJyksCisgICAgKSwKICAgICAnbGlzdCc6ICgKICAg ICAgICAoJy1sJywgJy0tbG9uZycsICAgICAgICAgJ091dHB1dCBhbGwgVk0gZGV0YWlscyBpbiBT WFAnKSwKICAgICAgICAoJycsICctLWxhYmVsJywgICAgICAgICAgJ0luY2x1ZGUgc2VjdXJpdHkg bGFiZWxzJyksCkBAIC00MDYsNiArNDEyLDcgQEAKICAgICBdCiAKIHNjaGVkdWxlcl9jb21tYW5k cyA9IFsKKyAgICAic2NoZWQtY3JlZGl0MiIsCiAgICAgInNjaGVkLWNyZWRpdCIsCiAgICAgInNj aGVkLXNlZGYiLAogICAgIF0KQEAgLTE3MjAsNiArMTcyNyw4MCBAQAogICAgICAgICAgICAgaWYg cmVzdWx0ICE9IDA6CiAgICAgICAgICAgICAgICAgZXJyKHN0cihyZXN1bHQpKQogCitkZWYgeG1f c2NoZWRfY3JlZGl0MihhcmdzKToKKyAgICAiIiJHZXQvU2V0IG9wdGlvbnMgZm9yIENyZWRpdDIg U2NoZWR1bGVyLiIiIgorICAgIAorICAgIGNoZWNrX3NjaGVkX3R5cGUoJ2NyZWRpdDInKQorCisg ICAgdHJ5OgorICAgICAgICBvcHRzLCBwYXJhbXMgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICJkOnc6 IiwKKyAgICAgICAgICAgIFsiZG9tYWluPSIsICJ3ZWlnaHQ9Il0pCisgICAgZXhjZXB0IGdldG9w dC5HZXRvcHRFcnJvciwgb3B0ZXJyOgorICAgICAgICBlcnIob3B0ZXJyKQorICAgICAgICB1c2Fn ZSgnc2NoZWQtY3JlZGl0MicpCisKKyAgICBkb21pZCA9IE5vbmUKKyAgICB3ZWlnaHQgPSBOb25l CisKKyAgICBmb3IgbywgYSBpbiBvcHRzOgorICAgICAgICBpZiBvIGluIFsiLWQiLCAiLS1kb21h aW4iXToKKyAgICAgICAgICAgIGRvbWlkID0gYQorICAgICAgICBlbGlmIG8gaW4gWyItdyIsICIt LXdlaWdodCJdOgorICAgICAgICAgICAgd2VpZ2h0ID0gaW50KGEpCisKKyAgICBkb21zID0gZmls dGVyKGxhbWJkYSB4IDogZG9taWRfbWF0Y2goZG9taWQsIHgpLAorICAgICAgICAgICAgICAgICAg W3BhcnNlX2RvbXNfaW5mbyhkb20pCisgICAgICAgICAgICAgICAgICBmb3IgZG9tIGluIGdldERv bWFpbnMoTm9uZSwgJ2FsbCcpXSkKKworICAgIGlmIHdlaWdodCBpcyBOb25lOgorICAgICAgICBp ZiBkb21pZCBpcyBub3QgTm9uZSBhbmQgZG9tcyA9PSBbXTogCisgICAgICAgICAgICBlcnIoIkRv bWFpbiAnJXMnIGRvZXMgbm90IGV4aXN0LiIgJSBkb21pZCkKKyAgICAgICAgICAgIHVzYWdlKCdz Y2hlZC1jcmVkaXQyJykKKyAgICAgICAgIyBwcmludCBoZWFkZXIgaWYgd2UgYXJlbid0IHNldHRp bmcgYW55IHBhcmFtZXRlcnMKKyAgICAgICAgcHJpbnQgJyUtMzNzICU0cyAlNnMnICUgKCdOYW1l JywnSUQnLCdXZWlnaHQnKQorICAgICAgICAKKyAgICAgICAgZm9yIGQgaW4gZG9tczoKKyAgICAg ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZXJ2ZXJUeXBlID09IFNFUlZFUl9YRU5f QVBJOgorICAgICAgICAgICAgICAgICAgICBpbmZvID0gc2VydmVyLnhlbmFwaS5WTV9tZXRyaWNz LmdldF9WQ1BVc19wYXJhbXMoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIueGVuYXBp LlZNLmdldF9tZXRyaWNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9zaW5nbGVf dm0oZFsnbmFtZSddKSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg ICAgaW5mbyA9IHNlcnZlci54ZW5kLmRvbWFpbi5zY2hlZF9jcmVkaXQyX2dldChkWyduYW1lJ10p CisgICAgICAgICAgICBleGNlcHQgeG1scnBjbGliLkZhdWx0OgorICAgICAgICAgICAgICAgIHBh c3MKKworICAgICAgICAgICAgaWYgJ3dlaWdodCcgbm90IGluIGluZm86CisgICAgICAgICAgICAg ICAgIyBkb21haW4gZG9lcyBub3Qgc3VwcG9ydCBzY2hlZC1jcmVkaXQyPworICAgICAgICAgICAg ICAgIGluZm8gPSB7J3dlaWdodCc6IC0xfQorCisgICAgICAgICAgICBpbmZvWyd3ZWlnaHQnXSA9 IGludChpbmZvWyd3ZWlnaHQnXSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5mb1snbmFt ZSddICA9IGRbJ25hbWUnXQorICAgICAgICAgICAgaW5mb1snZG9taWQnXSA9IHN0cihkWydkb21p ZCddKQorICAgICAgICAgICAgcHJpbnQoICgiJShuYW1lKS0zMnMgJShkb21pZCk1cyAlKHdlaWdo dCk2ZCIpICUgaW5mbykKKyAgICBlbHNlOgorICAgICAgICBpZiBkb21pZCBpcyBOb25lOgorICAg ICAgICAgICAgIyBwbGFjZSBob2xkZXIgZm9yIHN5c3RlbS13aWRlIHNjaGVkdWxlciBwYXJhbWV0 ZXJzCisgICAgICAgICAgICBlcnIoIk5vIGRvbWFpbiBnaXZlbi4iKQorICAgICAgICAgICAgdXNh Z2UoJ3NjaGVkLWNyZWRpdDInKQorCisgICAgICAgIGlmIHNlcnZlclR5cGUgPT0gU0VSVkVSX1hF Tl9BUEk6CisgICAgICAgICAgICBpZiBkb21zWzBdWydkb21pZCddOgorICAgICAgICAgICAgICAg IHNlcnZlci54ZW5hcGkuVk0uYWRkX3RvX1ZDUFVzX3BhcmFtc19saXZlKAorICAgICAgICAgICAg ICAgICAgICBnZXRfc2luZ2xlX3ZtKGRvbWlkKSwKKyAgICAgICAgICAgICAgICAgICAgIndlaWdo dCIsCisgICAgICAgICAgICAgICAgICAgIHdlaWdodCkKKyAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgc2VydmVyLnhlbmFwaS5WTS5hZGRfdG9fVkNQVXNfcGFyYW1zKAorICAgICAg ICAgICAgICAgICAgICBnZXRfc2luZ2xlX3ZtKGRvbWlkKSwKKyAgICAgICAgICAgICAgICAgICAg IndlaWdodCIsCisgICAgICAgICAgICAgICAgICAgIHdlaWdodCkKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIHJlc3VsdCA9IHNlcnZlci54ZW5kLmRvbWFpbi5zY2hlZF9jcmVkaXQyX3NldChk b21pZCwgd2VpZ2h0KQorICAgICAgICAgICAgaWYgcmVzdWx0ICE9IDA6CisgICAgICAgICAgICAg ICAgZXJyKHN0cihyZXN1bHQpKQorCiBkZWYgeG1faW5mbyhhcmdzKToKICAgICBhcmdfY2hlY2so YXJncywgImluZm8iLCAwLCAxKQogICAgIApAQCAtMzM0MSw2ICszNDIyLDcgQEAKICAgICAjIHNj aGVkdWxlcgogICAgICJzY2hlZC1zZWRmIjogeG1fc2NoZWRfc2VkZiwKICAgICAic2NoZWQtY3Jl ZGl0IjogeG1fc2NoZWRfY3JlZGl0LAorICAgICJzY2hlZC1jcmVkaXQyIjogeG1fc2NoZWRfY3Jl ZGl0MiwKICAgICAjIGJsb2NrCiAgICAgImJsb2NrLWF0dGFjaCI6IHhtX2Jsb2NrX2F0dGFjaCwK ICAgICAiYmxvY2stZGV0YWNoIjogeG1fYmxvY2tfZGV0YWNoLAo= --001517475b500b4791047d0cdc93 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --001517475b500b4791047d0cdc93--