Date: Thu, 08 Apr 1999 13:37:56 -0500 From: "Andrew J. Korty" <ajk@purdue.edu> To: freebsd-hackers@freebsd.org Subject: [PATCH] mount and umount support for mortal users Message-ID: <199904081837.NAA26342@poynting.physics.purdue.edu>
next in thread | raw e-mail | index | archive | help
------- =_aaaaaaaaaa0 Content-Type: text/plain; charset="us-ascii" Content-ID: <26335.923596675.1@physics.purdue.edu> These new versions of mount(8) and umount(8) are designed to be installed set-uid root. They behave as normal if invoked by root, but act according to a configuration file otherwise. Mortal users (console users only if desired) are given permission to mount certain devices on a fixed mount point. This mount point must be at least two levels deep, so that the owner and modes on the parent directory can be changed so as to only allow access by the calling user. One or more filesystems may be specified for a given device. I hope someone finds this useful enough to warrant a commit. I've submitted this patch via send-pr; see bin/11031. Andrew J. Korty, Director http://www.physics.purdue.edu/~ajk/ Physics Computer Network 85 73 1F 04 63 D9 9D 65 Purdue University 65 2E 7A A8 81 8C 45 75 ------- =_aaaaaaaaaa0 Content-Type: application/x-patch Content-ID: <26335.923596675.2@physics.purdue.edu> Content-Description: mount and umount support for mortal users Content-Transfer-Encoding: base64 SW5kZXg6IHNyYy9zYmluL21vdW50L01ha2VmaWxlCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9wcm9q ZWN0L2N2cy9QQ04vZnJlZWJzZC9zcmMvc2Jpbi9tb3VudC9NYWtlZmlsZSx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS4xLjEuMgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1yMS4xLjEu MiAtcjEuMwotLS0gTWFrZWZpbGUJMTk5OS8wMi8wMyAwMzowNDoyNgkxLjEuMS4yCisrKyBNYWtl ZmlsZQkxOTk5LzA0LzA4IDE3OjU1OjMxCTEuMwpAQCAtNiw0ICs2LDEyIEBACiBNQU44PQltb3Vu dC44CiAjIFdlIGRvIE5PVCBpbnN0YWxsIHRoZSBnZXRtbnRvcHRzLjMgbWFuIHBhZ2UuCisKKy5p ZmRlZiBNT1JUQUxfTU9VTlQKK0JJTk9XTj0JCXJvb3QKK0JJTk1PREU9CTQ1NTUKK0NGTEFHUys9 CS1ETU9SVEFMCitTUkNTKz0JCWNmLmMgbW9ydGFsLmMKK01BTjU9CQltb3VudGNhcC41CisuZW5k aWYKIAogLmluY2x1ZGUgPGJzZC5wcm9nLm1rPgpJbmRleDogc3JjL3NiaW4vbW91bnQvY2YuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ClJDUyBmaWxlOiBjZi5jCmRpZmYgLU4gY2YuYwotLS0gL2Rldi9udWxsCVRodSBB cHIgIDggMDM6MDU6MDIgMTk5OQorKysgL3RtcC9jdnNrNTc0MTYJVGh1IEFwciAgOCAxMzoxNzoz NiAxOTk5CkBAIC0wLDAgKzEsMTIxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4MCwgMTk4 OSwgMTk5MywgMTk5NAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZv cm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNp bmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUK KyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRo aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkg b2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4g TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBj b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg KiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGxpbnQKK3N0YXRpYyBjb25zdCBjaGFyIHJj c2lkW10gPQorCSIkSWQ6IGNmLmMsdiAxLjIgMTk5OS8wNC8wOCAxODowMjoxMyBhamsgRXhwICQi OworI2VuZGlmIC8qIG5vdCBsaW50ICovCisKKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxz dGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXNleGl0cy5oPgorCisj aW5jbHVkZSAiY2YuaCIKKyNpbmNsdWRlICJtb3J0YWwuaCIKKworc3RhdGljIGludAorQ2FwX0Vy cm9ycyhpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmNhcCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlz d2l0Y2ggKGVycm9yKSB7CisJY2FzZSAxOgorCQl3YXJueCgiJXM6ICVzOiAlczogdW5yZXNvbHZl ZCBcInRjXCIgcmVmZXJlbmNlLCIKKwkJICAgICJjb250aW51aW5nIC4uLiIsIFBBVEhfQ0YsIG5h bWUsIGNhcCk7CisJCWJyZWFrOworCWNhc2UgLTE6CisJCXJldHVybiAwOworCWNhc2UgLTI6CisJ CWVycihFWF9PU0VSUiwgIiVzOiAlczogJXMiLCBQQVRIX0NGLCBuYW1lLCBjYXApOworCWNhc2Ug LTM6CisJCWVycngoRVhfREFUQUVSUiwgIiVzOiAlczogcG9zc2libGUgXCJ0Y1wiIGxvb3AiLAor CQkgICAgUEFUSF9DRiwgbmFtZSwgY2FwKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK2NoYXIgKgor R2V0X0Rldl9DYXAoY29uc3QgY2hhciAqZGV2KQoreworCWNoYXIgKmJhc2U7CisJY2hhciAqYnVm OworCWNoYXIgKm5ldzsKKwlpbnQgcjsKKwljaGFyICpkYl9hcnJheVtdID0geyBQQVRIX0NGLCAo Y2hhciAqKTAgfTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gTlVMTDsKKwluZXcgPSBzdHJkdXAo ZGV2KTsKKwlpZiAoIW5ldykKKwkJZXJyKEVYX09TRVJSLCBOVUxMKTsKKwliYXNlID0gc3RycmNo cihuZXcsICcvJyk7CisJaWYgKGJhc2UpCisJCSsrYmFzZTsKKwllbHNlCisJCWJhc2UgPSBuZXc7 CisJaWYgKCdyJyA9PSAqYmFzZSkKKwkJKytiYXNlOworCXIgPSBjZ2V0ZW50KCZidWYsIGRiX2Fy cmF5LCBiYXNlKTsKKwlmcmVlKG5ldyk7CisJcmV0dXJuIChyID09IDApID8gYnVmIDogTlVMTDsK K30KKworaW50CitHZXRfU3RyKGNoYXIgKmJ1ZiwgY2hhciAqY2FwLCBjaGFyICoqc3RyKQorewor ICAgICAgICByZXR1cm4gQ2FwX0Vycm9ycyhjZ2V0c3RyKGJ1ZiwgY2FwLCBzdHIpLCBjYXAsICpz dHIpOworfQorCitjaGFyICoKK1BhcmVudChjaGFyICpzdHIpCit7CisJc3RhdGljIGNoYXIgKnI7 CisJY2hhciAqcDsKKworCWlmICghc3RyKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAociAhPSBzdHIp IHsKKwkJaWYgKHIpCisJCQlmcmVlKHIpOworCQlyID0gc3RyZHVwKHN0cik7CisJCWlmICghcikK KwkJCWVycihFWF9PU0VSUiwgTlVMTCk7CisJfQorCXAgPSBzdHJyY2hyKHIsICcvJyk7CisJaWYg KCFwIHx8IHAgPT0gc3RyKQorCQllcnJ4KEVYX0RBVEFFUlIsICIlczogbW91bnQgcG9pbnQgbXVz dCBoYXZlIGF0IgorCQkgICAgIiBsZWFzdCB0d28gbGV2ZWxzIiwgc3RyKTsKKwkqcCsrID0gJ1ww JzsKKwlpZiAoISpwKQorCQkodm9pZCkgUGFyZW50KHIpOworCXJldHVybiByOworfQpJbmRleDog c3JjL3NiaW4vbW91bnQvY2YuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBjZi5oCmRpZmYgLU4gY2Yu aAotLS0gL2Rldi9udWxsCVRodSBBcHIgIDggMDM6MDU6MDIgMTk5OQorKysgL3RtcC9jdnNDNTc0 MTYJVGh1IEFwciAgOCAxMzoxNzozNiAxOTk5CkBAIC0wLDAgKzEsNDIgQEAKKy8qLQorICogQ29w eXJpZ2h0IChjKSAxOTgwLCAxOTg5LCAxOTkzLCAxOTk0CisgKglUaGUgUmVnZW50cyBvZiB0aGUg VW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K KyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1 c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNr bm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3Bl ZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBj b250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5v ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAg ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBB UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNkZWZpbmUgUEFUSF9D RgkJIi9ldGMvbW91bnRjYXAiCisjZGVmaW5lIENGX0NPTU1PTgkib3B0cyIKKyNkZWZpbmUgQ0Zf Q09OU09MRQkiY28iCisjZGVmaW5lIENGX0ZTVFlQRQkiZnMiCisjZGVmaW5lIENGX05PREUJIm9u IgorCitjaGFyICpHZXRfRGV2X0NhcChjb25zdCBjaGFyICopOworY2hhciAqUGFyZW50KGNoYXIg Kik7CitpbnQgR2V0X1N0cihjaGFyICosIGNoYXIgKiwgY2hhciAqKik7CkluZGV4OiBzcmMvc2Jp bi9tb3VudC9tb3J0YWwuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBtb3J0YWwuYwpkaWZmIC1OIG1v cnRhbC5jCi0tLSAvZGV2L251bGwJVGh1IEFwciAgOCAwMzowNTowMiAxOTk5CisrKyAvdG1wL2N2 c3g1NzQxNglUaHUgQXByICA4IDEzOjE3OjM2IDE5OTkKQEAgLTAsMCArMSwxNTYgQEAKKy8qLQor ICogQ29weXJpZ2h0IChjKSAxOTgwLCAxOTg5LCAxOTkzLCAxOTk0CisgKglUaGUgUmVnZW50cyBv ZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJl cyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dp bmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5k IGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJz aXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl CisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRP UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg bGludAorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9CisJIiRJZDogbW9ydGFsLmMsdiAxLjMg MTk5OS8wNC8wOCAxODowMjoxMyBhamsgRXhwICQiOworI2VuZGlmIC8qIG5vdCBsaW50ICovCisK KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVk ZSA8ZXJyLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1 ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj aW5jbHVkZSA8c3lzZXhpdHMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNm LmgiCisjaW5jbHVkZSAibW9ydGFsLmgiCisKK2V4dGVybiBjaGFyICpjYXRvcHQoY2hhciAqLCBj b25zdCBjaGFyICopOworZXh0ZXJuIGludCBkZWJ1ZzsKKworbW9ydGFsX21vdW50ZnMoc3BlYywg bmFtZSwgZmxhZ3MsIG9wdGlvbnMsIHVpZCkKKwljb25zdCBjaGFyICpzcGVjLCAqbmFtZSwgKm9w dGlvbnM7CisJaW50IGZsYWdzLCB1aWQ7Cit7CisJY2hhciAqY2FwOwkJLyogY2FwIGtleSBmb3Ig YSBmaWxlc3lzdGVtJ3Mgb3B0aW9ucyAqLworCWNoYXIgKmNmOwkJLyogbW91bnQuY2YgZW50cnkg Ki8KKwljaGFyICpjb21tb25fb3B0czsJLyogY29tbW9uIGZpbGVzeXN0ZW0gb3B0aW9ucyAqLwor CWNoYXIgKmNvbnNvbGU7CQkvKiBmaWxlIHdob3NlIG93bmVyIGlzIG9uIGNvbnNvbGUgKi8KKwlj aGFyICpkaXI7CQkvKiBwYXJlbnQgZGlyZWN0b3J5IG9mIG1vdW50IHBvaW50ICovCisJY2hhciAq ZnNfb3B0czsJCS8qIHRoaXMgZmlsZXN5c3RlbSdzIG9wdGlvbnMgKi8KKwljaGFyICpmc19vcHRz X3g7CS8qIGV4cGFuZGVkIGZpbGVzeXN0ZW0gb3B0aW9ucyAqLworCWNoYXIgKm5vZGU7CQkvKiBt b3VudCBwb2ludCAqLworCWNoYXIgKnRtcF9wOwkJLyogdGVtcCBmaWxlIGZvciBlcnJvciBsb2cg Ki8KKwljaGFyICp0eXBlOwkJLyogY3VycmVudCBmc3R5cGUgd2UncmUgdHJ5aW5nICovCisJY2hh ciAqdHlwZV9saXN0OwkvKiBsaXN0IG9mIGZzdHlwZXMgdG8gdHJ5ICovCisJaW50IGVycl9mZDsJ CS8qIHJlZGlyZWN0ZWQgU1RERVJSX0ZJTEVOTyAqLworCWludCBuYnl0ZXM7CQkvKiBudW1iZXIg b2YgYnl0ZXMgcmVhZCBmcm9tIGxvZ2ZpbGUgKi8KKwlpbnQgcjsJCQkvKiByZXR1cm4gdmFsdWUg ZnJvbSBtb3VudGZzICovCisJY2hhciBlcnJfYnVmW0JVRlNJWl07CS8qIGZvciBkdW1waW5nIGVy cm9yIGZpbGUgKi8KKwljaGFyIHRtcFtdID0gRVJSX1RFTVBMOwkvKiBlcnJvciBsb2dmaWxlIHRl bXBsYXRlICovCisKKwljZiA9IEdldF9EZXZfQ2FwKHNwZWMpOworCWlmICghY2YpCS8qIG5vdCBp biBtb3VudGNhcCwgdGhlcmVmb3JlIG5vdCBwZXJtaXR0ZWQgKi8KKwkJZXJyYyhFWF9OT1BFUk0s IEVQRVJNLCAiJXMiLCBzcGVjKTsKKwkvKgorCSAqIElzIHVzZXIgb24gY29uc29sZT8gIElmIG5v dCwgYWxsb3cgYW55Ym9keSEKKwkgKi8KKwlpZiAoR2V0X1N0cihjZiwgQ0ZfQ09OU09MRSwgJmNv bnNvbGUpKSB7CisJCXN0cnVjdCBzdGF0IHNidWY7CisKKwkJaWYgKC0xID09IHN0YXQoY29uc29s ZSwgJnNidWYpKQorCQkJZXJyKEVYX09TRklMRSwgIiVzIiwgY29uc29sZSk7CisJCWlmIChkZWJ1 ZykKKwkJCXdhcm54KCJydWlkICVkLCAlcyBvd25lZCBieSAlZCIsIHVpZCwgY29uc29sZSwKKwkJ CSAgICBzYnVmLnN0X3VpZCk7CisJCWlmICh1aWQgIT0gc2J1Zi5zdF91aWQpCisJCQllcnJ4KEVY X05PUEVSTSwKKwkJCSAgICAieW91IG11c3QgYmUgb24gY29uc29sZSB0byBtb3VudCB0aGlzIGRl dmljZSIpOworCX0KKwlpZiAoIUdldF9TdHIoY2YsIENGX05PREUsICZub2RlKSkKKwkJbm9kZSA9 IE5VTEw7CisJaWYgKCFHZXRfU3RyKGNmLCBDRl9DT01NT04sICZjb21tb25fb3B0cykpCisJCWNv bW1vbl9vcHRzID0gREVGQVVMVF9PUFRTOworCWlmICghR2V0X1N0cihjZiwgQ0ZfRlNUWVBFLCAm dHlwZV9saXN0KSkKKwkJdHlwZV9saXN0ID0gREVGQVVMVF9GU1RZUEU7CisJZXJyX2ZkID0gZHVw KFNUREVSUl9GSUxFTk8pOworCSh2b2lkKSBjbG9zZShTVERFUlJfRklMRU5PKTsKKwl0bXBfcCA9 IG1rdGVtcCh0bXApOworCWlmICh0bXBfcCkKKwkJKHZvaWQpIG9wZW4odG1wX3AsIE9fUkRXUnxP X0NSRUFULCAwNjAwKTsKKwlpZiAoZGVidWcpCisJCXdhcm54KCJlcnJvciBsb2c6ICVzIiwgdG1w X3ApOworCXdoaWxlICh0eXBlID0gc3Ryc2VwKCZ0eXBlX2xpc3QsICIsIikpIHsKKwkJaWYgKC0x ID09IGFzcHJpbnRmKCZjYXAsICIlc19vcHRzIiwgdHlwZSkpCisJCQllcnIoRVhfT1NFUlIsIE5V TEwpOworCQlpZiAoZGVidWcpCisJCQl3YXJueCgibG9va2luZyB1cCAlcyIsIGNhcCk7CisJCWZz X29wdHNfeCA9IE5VTEw7CisJCWlmIChHZXRfU3RyKGNmLCBjYXAsICZmc19vcHRzKSkgeworCQkJ LyoKKwkJCSAqIFRoaXMgaGFjayBsZXRzIHRoZSB1aWQgYmUgc3Vic3RpdHVlZAorCQkJICogZm9y ICVkIGluIHRoZSBjb25maWcgZmlsZS4gIFdlJ2xsCisJCQkgKiBnZW5lcmFsaXplIHRoaXMgY29k ZSB3aGVuIHdlIGhhdmUgYQorCQkJICogbmVlZC4KKwkJCSAqLworCQkJaWYgKGRlYnVnKQorCQkJ CXdhcm54KCJwYXJzaW5nICVzIiwgZnNfb3B0cyk7CisJCQlpZiAoLTEgPT0gYXNwcmludGYoJmZz X29wdHNfeCwgZnNfb3B0cywgdWlkKSkKKwkJCQllcnIoRVhfT1NFUlIsIE5VTEwpOworCQkJZnJl ZShmc19vcHRzKTsKKwkJfQorCQlmcmVlKGNhcCk7CisJCW9wdGlvbnMgPSBjYXRvcHQoZnNfb3B0 c194LCBjb21tb25fb3B0cyk7CisJCWlmIChkZWJ1ZykKKwkJCXdhcm54KCIlcyAtdCAlcyAtbyAl cyAlcyAlcyIsCisJCQkgICAgUEFUSF9NT1VOVCwgdHlwZSwgb3B0aW9ucywKKwkJCSAgICBzcGVj LCBub2RlID8gbm9kZSA6IG5hbWUpOworCQlpZiAoMCA9PSBzdHJjbXAodHlwZSwgREVGQVVMVF9G U1RZUEUpKQorCQkJdHlwZSA9ICJ1ZnMiOworCQlyID0gbW91bnRmcyh0eXBlLCBzcGVjLCBuYW1l LCBmbGFncywgb3B0aW9ucywgTlVMTCk7CisJCWlmIChyKQorCQkJY29udGludWU7CisJCWRpciA9 IHN0cmR1cChub2RlKTsKKwkJaWYgKCFkaXIpCisJCQllcnIoRVhfT1NFUlIsIE5VTEwpOworCQlk aXIgPSBQYXJlbnQobm9kZSk7CisJCWlmICgtMSA9PSBjaG93bihkaXIsIHVpZCwgLTEpIHx8IC0x ID09IGNobW9kKGRpciwgMDcwMCkpCisJCQllcnIoRVhfT1NFUlIsICIlcyIsIGRpcik7CisJCWZy ZWUoZGlyKTsKKwkJcmV0dXJuIHI7CisJfQorCWlmICh0bXBfcCkgeworCQkodm9pZCkgbHNlZWso U1RERVJSX0ZJTEVOTywgMEwsIFNFRUtfU0VUKTsKKwkJd2hpbGUgKG5ieXRlcyA9IHJlYWQoU1RE RVJSX0ZJTEVOTywgZXJyX2J1Ziwgc2l6ZW9mIGVycl9idWYpKQorCQkJKHZvaWQpIHdyaXRlKGVy cl9mZCwgZXJyX2J1ZiwgbmJ5dGVzKTsKKwkJKHZvaWQpIGNsb3NlKFNUREVSUl9GSUxFTk8pOwor CQkodm9pZCkgdW5saW5rKHRtcF9wKTsKKwl9CisJcmV0dXJuIHI7Cit9CkluZGV4OiBzcmMvc2Jp bi9tb3VudC9tb3J0YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBtb3J0YWwuaApkaWZmIC1OIG1v cnRhbC5oCi0tLSAvZGV2L251bGwJVGh1IEFwciAgOCAwMzowNTowMiAxOTk5CisrKyAvdG1wL2N2 c2g1NzQxNglUaHUgQXByICA4IDEzOjE3OjM2IDE5OTkKQEAgLTAsMCArMSw0MiBAQAorLyotCisg KiBDb3B5cmlnaHQgKGMpIDE5ODAsIDE5ODksIDE5OTMsIDE5OTQKKyAqCVRoZSBSZWdlbnRzIG9m IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVz IG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu ZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2 ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQg aXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNp dHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0 byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUK KyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9S UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRS SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ TkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2RlZmluZSBQ QVRIX01PVU5UCSIvc2Jpbi9tb3VudCIKKyNkZWZpbmUgUEFUSF9VTU9VTlQJIi9zYmluL3Vtb3Vu dCIKKworI2RlZmluZSBFUlJfVEVNUEwJIi90bXAvbW9ydGFsWFhYWFhYIgorCisjZGVmaW5lIERF RkFVTFRfT1BUUwkibm9kZXYsbm9leGVjLG5vc3VpZCxub3N5bWZvbGxvdyIKKyNkZWZpbmUgREVG QVVMVF9GU1RZUEUJImRlZmF1bHQiCisKK3ZvaWQgVXNhZ2Uodm9pZCk7CkluZGV4OiBzcmMvc2Jp bi9tb3VudC9tb3VudC44Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0L2N2cy9QQ04vZnJl ZWJzZC9zcmMvc2Jpbi9tb3VudC9tb3VudC44LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4x CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXIxLjEuMS4xIC1yMS4yCi0tLSBtb3Vu dC44CTE5OTgvMTIvMDMgMTU6Mzg6NTIJMS4xLjEuMQorKysgbW91bnQuOAkxOTk5LzA0LzA4IDE3 OjU1OjMxCTEuMgpAQCAtMzA3LDYgKzMwNywzNiBAQAogVGhlIG9wdGlvbnMgc3BlY2lmaWMgdG8g TkZTIGZpbGVzeXN0ZW1zIGFyZSBkZXNjcmliZWQgaW4gdGhlCiAuWHIgbW91bnRfbmZzIDgKIG1h bnVhbCBwYWdlLgorLlNoIFVTSU5HIE1PVU5UIEFTIEEgTk9OLVJPT1QgVVNFUgorSWYgdGhlIHNv dXJjZXMgaGF2ZSBiZWVuIGNvbXBpbGVkIHdpdGggdGhlIFxzLTFNT1JUQUxcczAgb3B0aW9uLAor dGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGNhbiBhcnJhbmdlIGZvciBub24tcm9vdCB1c2VycyB0 byBtb3VudAorZmlsZXN5c3RlbXMgYmFzZWQgb24gYSBzZXQgb2YgZ3VpZGVsaW5lcyBpbiB0aGUg L2V0Yy9tb3VudGNhcCBmaWxlLgorVGhlc2UgZ3VpZGVsaW5lcyBpbmNsdWRlIGEgbW91bnQgcG9p bnQgdGhhdCB3aWxsIGJlIHVzZWQgcmVnYXJkbGVzcworb2YgdGhlIHVzZXIncyBzcGVjaWZpY2F0 aW9uIChvciB0aGUKKy5YciBmc3RhYiA1CitzcGVjaWZpY2F0aW9uKSwgYSBmaWxlIHdob3NlIG93 bmVyc2hpcCB3aWxsIGRldGVybWluZSB3aGV0aGVyIHRoZQordXNlciBpcyBvbiBjb25zb2xlLCBh bmQgYSBsaXN0IG9mIGZpbGVzeXN0ZW1zIHRvIGF0dGVtcHQgdG8gbW91bnQKK2Zyb20gdGhlIGRl dmljZS4KKy5QcAorVGhlIG1vdW50IHBvaW50IG11c3QgYmUgYXQgbGVhc3QgYSB0d28gbGV2ZWwg ZGlyZXRvcnkgdG8gd29yaywKK3NpbmNlIHRoZSBvd25lciBvZiB0aGUgcGFyZW50IGRpcmVjdG9y eSBvZiB0aGUgbW91bnQgcG9pbnQgaXMKK2NoYW5nZWQgdG8gdGhlIGNhbGxpbmcgdXNlciwgYW5k IGl0cyBwZXJtaXNzaW9ucyBhcmUgY2hhbmdlZCB0bworMDcwMC4gIFdoZW4gdGhlIGRldmljZSBp cyB1bm1vdW50ZWQsIHRoZSBvd25lcnNoaXAgaXMgY2hhbmdlZCBiYWNrCit0byByb290IGFuZCB0 aGUgcGVybWlzc2lvbnMgYXJlIGtlcHQgYXQgMDcwMC4KKy5QcAorVGhpcyBmZWF0dXJlIGlzIG1h aW5seSBkZXNpZ25lZCB0byBnaXZlIGNvbnNvbGUgdXNlcnMgZXhjbHVzaXZlCithY2Nlc3MgdG8g cmVtb3ZhYmxlIG1lZGlhIGRldmljZXMgc3VjaCBhcyBmbG9wcHkgZGlza3MgYW5kIENELVJPTXMs CitidXQgaXQgY2FuIGJlIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzIGFzIHdlbGwuICBHcmFudGlu ZyBhY2Nlc3MKK3RoaXMgd2F5IGlzIG1vcmUgZmxleGlibGUgdGhhbiBjaGFuZ2luZyBwZXJtaXNz aW9ucyBhbmQgb3duZXJzaGlwcworb24gdGhlIHNwZWNpYWwgZGV2aWNlIGFuZCBtb3JlIHNlY3Vy ZSB0aGFuIG1ha2luZyB0aGUgZmlsZXN5c3RlbS1zcGVjaWZpYworbW91bnQgY29tbWFuZCAoXGZJ ZS5nLixcZlAKKy5YciBtb3VudF9tc2RvcyA4ICkKK3NldC11aWQgcm9vdC4gIFN1cHBvcnQgZm9y IHRoaXMgZmVhdHVyZSBjYW4gYmUgYWRkZWQgYnkgc2V0dGluZwordGhlIFxzLTFNT1JUQUxfTU9V TlRcczAgdmFyaWFibGUgaW4gXGZJL2V0Yy9tYWtlLmNvbmZcZlAgYmVmb3JlCitidWlsZGluZwor LlhyIG1vdW50IDgKK2FuZAorLlhyIHVtb3VudCA4IC4KIC5TaCBESUFHTk9TVElDUwogVmFyaW91 cywgbW9zdCBvZiB0aGVtIGFyZSBzZWxmLWV4cGxhbmF0b3J5LgogLlBwCkBAIC0zMzIsNiArMzYy LDcgQEAKIC5YciBtb3VudCAyICwKIC5YciB2ZnNsb2FkIDMgLAogLlhyIGZzdGFiIDUgLAorLlhy IG1vdW50Y2FwIDUgLAogLlhyIG1vdW50X2NkOTY2MCA4ICwKIC5YciBtb3VudF9kZXZmcyA4ICwK IC5YciBtb3VudF9mZGVzYyA4ICwKSW5kZXg6IHNyYy9zYmluL21vdW50L21vdW50LmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL3Byb2plY3QvY3ZzL1BDTi9mcmVlYnNkL3NyYy9zYmluL21vdW50L21v dW50LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lvbiAx LjIKZGlmZiAtdSAtcjEuMS4xLjEgLXIxLjIKLS0tIG1vdW50LmMJMTk5OC8xMi8wMyAxNTozODo1 MgkxLjEuMS4xCisrKyBtb3VudC5jCTE5OTkvMDMvMzAgMTU6MTI6MDkJMS4yCkBAIC0xMjUsNiAr MTI1LDkgQEAKIAlwaWRfdCBwaWQ7CiAJaW50IGFsbCwgY2gsIGksIGluaXRfZmxhZ3MsIG1udHNp emUsIHJ2YWw7CiAJY2hhciAqb3B0aW9uczsKKyNpZmRlZiBNT1JUQUwKKwlpbnQgdWlkOworI2Vu ZGlmIC8qIGRlZmluZWQoTU9SVEFMKSAqLwogCiAJYWxsID0gaW5pdF9mbGFncyA9IDA7CiAJb3B0 aW9ucyA9IE5VTEw7CkBAIC0xNzUsNiArMTc4LDEwIEBACiAJYXJnYyAtPSBvcHRpbmQ7CiAJYXJn diArPSBvcHRpbmQ7CiAKKyNpZmRlZiBNT1JUQUwKKwl1aWQgPSBnZXR1aWQoKTsKKyNlbmRpZiAv KiBkZWZpbmVkKE1PUlRBTCkgKi8KKwogI2RlZmluZQlCQURUWVBFKHR5cGUpCQkJCQkJCVwKIAko c3RyY21wKHR5cGUsIEZTVEFCX1JPKSAmJgkJCQkJXAogCSAgICBzdHJjbXAodHlwZSwgRlNUQUJf UlcpICYmIHN0cmNtcCh0eXBlLCBGU1RBQl9SUSkpCkBAIC0xODIsNiArMTg5LDkgQEAKIAlydmFs ID0gMDsKIAlzd2l0Y2ggKGFyZ2MpIHsKIAljYXNlIDA6CisjaWZkZWYgTU9SVEFMCisJCXNldGV1 aWQodWlkKTsKKyNlbmRpZiAvKiBkZWZpbmVkKE1PUlRBTCkgKi8KIAkJaWYgKChtbnRzaXplID0g Z2V0bW50aW5mbygmbW50YnVmLCBNTlRfTk9XQUlUKSkgPT0gMCkKIAkJCWVycigxLCAiZ2V0bW50 aW5mbyIpOwogCQlpZiAoYWxsKSB7CkBAIC0yMjcsNiArMjM3LDEzIEBACiAJCQkJbW50ZnJvbW5h bWUgPSBmcy0+ZnNfc3BlYzsKIAkJCWVsc2UKIAkJCQltbnRmcm9tbmFtZSA9IG1udGJ1Zi0+Zl9t bnRmcm9tbmFtZTsKKyNpZmRlZiBNT1JUQUwKKwkJCWlmICh1aWQpCisJCQkJcnZhbCA9IG1vcnRh bF9tb3VudGZzKG1udGZyb21uYW1lLAorCQkJCSAgICBtbnRidWYtPmZfbW50b25uYW1lLCBpbml0 X2ZsYWdzLAorCQkJCSAgICBvcHRpb25zLCB1aWQpOworCQkJZWxzZQorI2VuZGlmIC8qIGRlZmlu ZWQoTU9SVEFMKSAqLwogCQkJcnZhbCA9IG1vdW50ZnMobW50YnVmLT5mX2ZzdHlwZW5hbWUsIG1u dGZyb21uYW1lLAogCQkJICAgIG1udGJ1Zi0+Zl9tbnRvbm5hbWUsIGluaXRfZmxhZ3MsIG9wdGlv bnMsIDApOwogCQkJYnJlYWs7CkBAIC0yMzgsNiArMjU1LDEyIEBACiAJCWlmIChCQURUWVBFKGZz LT5mc190eXBlKSkKIAkJCWVycngoMSwgIiVzIGhhcyB1bmtub3duIGZpbGUgc3lzdGVtIHR5cGUi LAogCQkJICAgICphcmd2KTsKKyNpZmRlZiBNT1JUQUwKKwkJaWYgKHVpZCkKKwkJCXJ2YWwgPSBt b3J0YWxfbW91bnRmcyhmcy0+ZnNfc3BlYywgZnMtPmZzX2ZpbGUsCisJCQkgICAgaW5pdF9mbGFn cywgb3B0aW9ucywgdWlkKTsKKwkJZWxzZQorI2VuZGlmIC8qIGRlZmluZWQoTU9SVEFMKSAqLwog CQlydmFsID0gbW91bnRmcyhmcy0+ZnNfdmZzdHlwZSwgZnMtPmZzX3NwZWMsIGZzLT5mc19maWxl LAogCQkgICAgaW5pdF9mbGFncywgb3B0aW9ucywgZnMtPmZzX21udG9wcyk7CiAJCWJyZWFrOwpA QCAtMjQ5LDYgKzI3MiwxMiBAQAogCQkgKi8KIAkJaWYgKHZmc2xpc3QgPT0gTlVMTCAmJiBzdHJw YnJrKGFyZ3ZbMF0sICI6QCIpICE9IE5VTEwpCiAJCQl2ZnN0eXBlID0gIm5mcyI7CisjaWZkZWYg TU9SVEFMCisJCWlmICh1aWQpCisJCQlydmFsID0gbW9ydGFsX21vdW50ZnMoYXJndlswXSwgYXJn dlsxXSwgaW5pdF9mbGFncywKKwkJCSAgICBvcHRpb25zLCB1aWQpOworCQllbHNlCisjZW5kaWYg LyogZGVmaW5lZChNT1JUQUwpICovCiAJCXJ2YWwgPSBtb3VudGZzKHZmc3R5cGUsCiAJCSAgICBh cmd2WzBdLCBhcmd2WzFdLCBpbml0X2ZsYWdzLCBvcHRpb25zLCBOVUxMKTsKIAkJYnJlYWs7Cklu ZGV4OiBzcmMvc2Jpbi9tb3VudC9tb3VudGNhcC41Cj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IG1vdW50 Y2FwLjUKZGlmZiAtTiBtb3VudGNhcC41Ci0tLSAvZGV2L251bGwJVGh1IEFwciAgOCAwMzowNTow MiAxOTk5CisrKyAvdG1wL2N2c2w1NzQxNglUaHUgQXByICA4IDEzOjE3OjM2IDE5OTkKQEAgLTAs MCArMSwxMTYgQEAKKy5cIiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTEsIDE5OTMKKy5cIglUaGUg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNl cnZlZC4KKy5cIgorLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworLlwiIGFyZSBtZXQ6Cisu XCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisuXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy5cIiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g dGhlCisuXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxz IG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKy5cIiAgICBtdXN0 IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisuXCIJVGhpcyBwcm9kdWN0 IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorLlwiCUNh bGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorLlwiIDQuIE5laXRoZXIg dGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0 b3JzCisuXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisuXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3 cml0dGVuIHBlcm1pc3Npb24uCisuXCIKKy5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ IFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorLlwiIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s IFRIRQorLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisuXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF VkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisuXCIgRk9S IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S IENPTlNFUVVFTlRJQUwKKy5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworLlwiIE9SIFNFUlZJQ0VTOyBMT1NT IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorLlwi IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUCisuXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorLlwiIE9VVCBPRiBUSEUg VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg T0YKKy5cIiBTVUNIIERBTUFHRS4KKy5cIgorLlwiCSRJZDogbW91bnRjYXAuNSx2IDEuMSAxOTk5 LzA0LzA4IDE3OjU1OjMyIGFqayBFeHAgJAorLlwiICIKKy5EZCBBcHJpbCA4LCAxOTk5CisuRHQg TU9VTlRDQVAgNQorLk9zIEZyZWVCU0QgMy4yCisuXCIgdHVybiBvZmYgaHlwaGVuYXRpb24KKy5o eW0gOTk5CisuU2ggTkFNRQorLk5tIG1vdW50Y2FwCisuTmQgbW91bnQvdW1vdW50IGNvbmZpZ3Vy YXRpb24gZGF0YWJhc2UgZm9yIG5vbi1yb290IHVzZXJzCisuU2ggU1lOT1BTSVMKKy5ObSBtb3Vu dGNhcAorLlNoIERFU0NSSVBUSU9OCitUaGUKKy5ObQorZmlsZSBpcyBhIHNpbXBsaWZpZWQgdmVy c2lvbiBvZiB0aGUKKy5YciB0ZXJtY2FwIDUKK2RhdGEgYmFzZSB1c2VkIHRvIGRlc2NyaWJlIGhv dworLlhyIG1vdW50IDgKK2FuZAorLlhyIHVtb3VudCA4CitiZWhhdmUgd2hlbiBjYWxsZWQgYnkg bm9uLXJvb3QgdXNlcnMsIHByb3ZpZGluZyB0aGVzZSBwcm9ncmFtcyBoYXZlIGJlZW4KK2NvbXBp bGVkIHdpdGggdGhlIFxzLTFNT1JUQUxcczAgZmxhZyBzZXQuICBUaGlzIGZlYXR1cmUgaXMgcHJp bWFyaWx5CitkZXNpZ25lZCB0byBhbGxvdyBjb25zb2xlIHVzZXJzIHRvIG1vdW50IHJlbW92YWJs ZSBkZXZpY2VzLiAgVGhlCisuTm0KK2ZpbGUgYWxsb3dzIHRoZSBzdXBlci11c2VyIHRvIHNldCBm b3IgYSBnaXZlbiBkZXZpY2UgYSBmaXhlZAorbW91bnQgcG9pbnQsIGEgbGlzdCBvZiBmaWxlc3lz dGVtcyB0byB0cnkgYW5kIHRoZWlyIG9wdGlvbnMsIGFuZAorYSBmaWxlIHdob3NlIG93bmVyc2hp cCB3aWxsIGRldGVybWluZSB3aGV0aGVyIHRoZSB1c2VyIGlzIG9uIGNvbnNvbGUuCitUaGUgXGZC dGM9XGZQIG9wdGlvbiBpcyBhbHNvIHByb3ZpZGVkIGZvciBzdWJzdGl0dXRpb24uCisuU2ggQ0FQ QUJJTElUSUVTCitSZWZlciB0bworLlhyIHRlcm1jYXAgNQorZm9yIGEgZGVzY3JpcHRpb24gb2Yg dGhlIGZpbGUgbGF5b3V0LgorLkJsIC1jb2x1bW4gTmFtZXh4IERlZmF1bHQKKy5JdCBTeSBOYW1l CVR5cGUJRGVzY3JpcHRpb24KKy5JdCAiZnMJc3RyCWNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGZp bGVzeXN0ZW1zIHRvIHRyeSIKKy5JdCAib24Jc3RyCW1vdW50IHBvaW50IChvdmVycmlkZXMgYW55 IG90aGVyIHNwZWNpZmljYXRpb24pIgorLkl0ICJ0YwlzdHIJdGFibGUgY29udGludWF0aW9uIgor LkVsCisuUHAKK0FueSB2YWxpZCBmaWxlc3lzdGVtIG5hbWUgKFxmSWUuZy4sXGZQIG1zZG9zLCBj ZDk2NjAsIFxmSWV0Yy5cZlApCittYXkgYmUgbGlzdGVkIGluIGFuIFxmQmZzPVxmUCBlbnRyeS4g IElmIHRoZSB3b3JkIFxmSWRlZmF1bHRcZlAgaXMKK3VzZWQsCisuWHIgbW91bnQgOCAncworZGVm YXVsdCBmaWxlc3lzdGVtIChjdXJyZW50bHkgXGZJdWZzXGZQKSBpcyB1c2VkLgorLlBwCitGb3Ig ZWFjaCBmaWxlc3lzdGVtCitzcGVjaWZpZWQsIHRoZXJlIG1heSBiZSBhbiBlbnRyeSBvZiBcZihC SWZzXGZQXGZCX29wdHNcZlAsIHdoZXJlCitcZklmc1xmUCBpcyB0aGUgbmFtZSBvZiB0aGUgZmls ZXN5c3RlbSBhcyBpdCBhcHBlYXJzIGluIHRoZSBsaXN0LgorV2hlcmV2ZXIgdGhlIHN0cmluZyBc ZkklZFxmUCBhcHBlYXJzIGluIHRoaXMgc3RyaW5nLCBpdCB3aWxsIGJlCityZXBsYWNlZCBieSB0 aGUgY2FsbGluZyB1c2VyJ3MgdWlkLgorLlBwCitBIHNwZWNpZmllZCBtb3VudCBwb2ludCBtdXN0 IGJlIGF0IGxlYXN0IHR3byBsZXZlbHMgZGVlcCBzbyB0aGF0CisuWHIgbW91bnQgOAorY2FuIHNl dCB0aGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucyBvZiB0aGUgbW91bnQgcG9pbnQncyBwYXJl bnQKK2RpcmVjdG9yeSBzdWNoIHRoYXQgb25seSB0aGUgY2FsbGluZyB1c2VyIGNhbiBhY2Nlc3Mg dGhlIG1vdW50ZWQKK2ZpbGVzeXN0ZW0uCisuU2ggRVhBTVBMRQorVGhlIGZvbGxvd2luZyBleGFt cGxlIHdpbGwgYWxsb3cgYSB1c2VyIHRvIGFjY2VzcyBcZkkvZGV2L2Zsb3BweVxmUCwKK2Fsd2F5 cyBtb3VudGluZyBpdCBvbiBcZkkvY29uc29sZS9mbG9wcHlcZlAuICBUaGUgXGZJLXVcZlAgYW5k CitcZkktbVxmUCBvcHRpb25zIHdpbGwgYmUgcGFzc2VkIHRvCisuWHIgbW91bnRfbXNkb3MgLAor c2V0dGluZyB0aGUgb3duZXJzaGlwIG9uIGVhY2ggZmlsZSB0byB0aGUgY2FsbGluZyB1c2VyIGFu ZCB0aGUKK3Blcm1pc3Npb25zIHRvIDA3MDAuICBUaGUgZmlsZXN5c3RlbSBvbiB0aGUgZmxvcHB5 IGNvdWxkIGJlIGFueSBvZgorXGZJbXNkb3MsIGV4dDJmcyxcZlAgb3IgXGZJdWZzXGZQLCBhbmQg dGhlIG1vdW50IHdvdWxkIHN1Y2NlZWQuCitUaGUgbW91bnQgd2lsbCBvbmx5IGJlIHBlcm1pdHRl ZCBpZiBcZkkvZGV2L2NvbnNvbGVcZlAgaXMgb3duZWQgYnkKK3RoZSBjYWxsaW5nIHVzZXIuICBB ZnRlciB0aGUgbW91bnQgdGFrZXMgcGxhY2UsIFxmSS9jb25zb2xlXGZQIHdpbGwKK2JlIG93bmVk IGJ5IHRoZSBjYWxsaW5nIHVzZXIgYW5kIG1vZGUgMDcwMC4KKy5CZCAtbGl0ZXJhbCAtb2Zmc2V0 IGluZGVudAorY29tbW9uOlxcCisgICAgICAgIDpjbz0vZGV2L2NvbnNvbGU6XFwKKyAgICAgICAg OmNkOTY2MF9vcHRzPXJkb25seTpcXAorICAgICAgICA6bXNkb3Nfb3B0cz0tdT0lZCwtbT03MDA6 CitmbG9wcHk6XFwKKyAgICAgICAgOmZzPW1zZG9zLGV4dDJmcyxkZWZhdWx0OlxcCisgICAgICAg IDpvbj0vY29uc29sZS9mbG9wcHk6XFwKKyAgICAgICAgOnRjPWNvbW1vbjoKKy5FZAorLlNoIFNF RSBBTFNPCisuWHIgbW91bnQgOCAsCisuWHIgdW1vdW50IDggLgorLlNoIEhJU1RPUlkKK1RoZQor Lk5tCitmaWxlIGZvcm1hdCBhcHBlYXJlZCBpbiBGcmVlQlNEIDMuMi4KSW5kZXg6IHNyYy9zYmlu L3Vtb3VudC9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcHJvamVjdC9jdnMvUENOL2Zy ZWVic2Qvc3JjL3NiaW4vdW1vdW50L01ha2VmaWxlLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEu MS4xCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXIxLjEuMS4xIC1yMS4yCi0tLSBN YWtlZmlsZQkxOTk4LzEyLzAzIDE1OjM4OjU4CTEuMS4xLjEKKysrIE1ha2VmaWxlCTE5OTkvMDMv MzAgMTU6MTI6MzUJMS4yCkBAIC04LDQgKzgsMTEgQEAKIENGTEFHUys9IC1JJHtNT1VOVH0KIC5Q QVRIOgkke01PVU5UfQogCisuaWZkZWYgTU9SVEFMX01PVU5UCitCSU5PV049CQlyb290CitCSU5N T0RFPQk0NTU1CitDRkxBR1MrPQktRE1PUlRBTAorU1JDUys9CQljZi5jCisuZW5kaWYKKwogLmlu Y2x1ZGUgPGJzZC5wcm9nLm1rPgpJbmRleDogc3JjL3NiaW4vdW1vdW50L3Vtb3VudC44Cj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0L2N2cy9QQ04vZnJlZWJzZC9zcmMvc2Jpbi91bW91bnQv dW1vdW50LjgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lv biAxLjIKZGlmZiAtdSAtcjEuMS4xLjEgLXIxLjIKLS0tIHVtb3VudC44CTE5OTgvMTIvMDMgMTU6 Mzg6NTkJMS4xLjEuMQorKysgdW1vdW50LjgJMTk5OS8wNC8wOCAxNzo1NTo0MQkxLjIKQEAgLTEx OCw5ICsxMTgsMTkgQEAKIC5JdCBQYSAvZXRjL2ZzdGFiCiBmaWxlc3lzdGVtIHRhYmxlCiAuRWwK Ky5QcAorSWYgdGhlIGNhbGxpbmcgdXNlciBpcyBub3QgdGhlIHN1cGVyLXVzZXIgYW5kCisuWHIg dW1vdW50IDgKK3dhcyBjb21waWxlZCB3aXRoIFxzLTFNT1JUQUxcczAgc2V0LCB0aGUgZGV2aWNl IHdpbGwgYmUgdW5tb3VudGVkCitpZiBmb3VuZCBpbiBcZkkvZXRjL21vdW50Y2FwXGZQLiAgU2Vl CisuWHIgbW91bnQgOAorYW5kCisuWHIgbW91bnRjYXAgNQorZm9yIG1vcmUgaW5mb3JtYXRpb24u CiAuU2ggU0VFIEFMU08KIC5YciB1bm1vdW50IDIgLAogLlhyIGZzdGFiIDUgLAorLlhyIG1vdW50 Y2FwIDUgLAogLlhyIG1vdW50IDgKIC5TaCBCVUdTCiBXaGVuIHVzaW5nIHVuaW9uIGZpbGVzeXN0 ZW1zLApJbmRleDogc3JjL3NiaW4vdW1vdW50L3Vtb3VudC5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9wcm9qZWN0L2N2cy9QQ04vZnJlZWJzZC9zcmMvc2Jpbi91bW91bnQvdW1vdW50LmMsdgpyZXRy aWV2aW5nIHJldmlzaW9uIDEuMS4xLjEKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAt cjEuMS4xLjEgLXIxLjMKLS0tIHVtb3VudC5jCTE5OTgvMTIvMDMgMTU6Mzg6NTkJMS4xLjEuMQor KysgdW1vdW50LmMJMTk5OS8wMy8zMCAyMDoxMTo0MwkxLjMKQEAgLTYwLDYgKzYwLDEyIEBACiAj aW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKKyNpZmRlZiBNT1JUQUwK KyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5c2V4aXRzLmg+CisjaW5jbHVkZSAiY2Yu aCIKKyNlbmRpZiAvKiBkZWZpbmVkKE1PUlRBTCkgKi8KKwogdHlwZWRlZiBlbnVtIHsgTU5UT04s IE1OVEZST00gfSBtbnR3aGF0OwogCiBpbnQJZmFrZSwgZmZsYWcsIHZmbGFnOwpAQCAtODMsNiAr ODksOSBAQAogCWludCBhbGwsIGNoLCBlcnJzLCBtbnRzOwogCWNoYXIgKip0eXBlbGlzdCA9IE5V TEw7CiAJc3RydWN0IHN0YXRmcyAqbW50YnVmOworI2lmZGVmIE1PUlRBTAorCWludCB1aWQ7Cisj ZW5kaWYgLyogZGVmaW5lZChNT1JUQUwpICovCiAKIAkvKiBTdGFydCBkaXNrcyB0cmFuc2ZlcnJp bmcgaW1tZWRpYXRlbHkuICovCiAJc3luYygpOwpAQCAtMTI4LDggKzEzNywxNSBAQAogCWlmICgo bmZzaG9zdCAhPSBOVUxMKSAmJiAodHlwZWxpc3QgPT0gTlVMTCkpCiAJCXR5cGVsaXN0ID0gbWFr ZXZmc2xpc3QoIm5mcyIpOwogCisjaWZkZWYgTU9SVEFMCisJdWlkID0gZ2V0dWlkKCk7CisjZW5k aWYgLyogZGVmaW5lZChNT1JUQUwpICovCisKIAlzd2l0Y2ggKGFsbCkgewogCWNhc2UgMjoKKyNp ZmRlZiBNT1JUQUwKKwkJc2V0ZXVpZCh1aWQpOworI2VuZGlmIC8qIGRlZmluZWQoTU9SVEFMKSAq LwogCQlpZiAoKG1udHMgPSBnZXRtbnRpbmZvKCZtbnRidWYsIE1OVF9OT1dBSVQpKSA9PSAwKSB7 CiAJCQl3YXJuKCJnZXRtbnRpbmZvIik7CiAJCQllcnJzID0gMTsKQEAgLTE0Myw2ICsxNTksOSBA QAogCQl9CiAJCWJyZWFrOwogCWNhc2UgMToKKyNpZmRlZiBNT1JUQUwKKwkJc2V0ZXVpZCh1aWQp OworI2VuZGlmIC8qIGRlZmluZWQoTU9SVEFMKSAqLwogCQlpZiAoc2V0ZnNlbnQoKSA9PSAwKQog CQkJZXJyKDEsICIlcyIsIF9QQVRIX0ZTVEFCKTsKIAkJZXJycyA9IHVtb3VudGFsbCh0eXBlbGlz dCk7CkBAIC0yMTIsNiArMjMxLDExIEBACiAJQ0xJRU5UICpjbHA7CiAJaW50IHNvOwogCWNoYXIg KnR5cGUsICpkZWxpbXAsICpob3N0cCwgKm1udHB0LCAqb3JpZ25hbWUsIHJuYW1lW01BWFBBVEhM RU5dOworI2lmZGVmIE1PUlRBTAorCWNoYXIgKmRldjsKKwljaGFyICpkaXI7CisJaW50IHVpZDsK KyNlbmRpZiAvKiBkZWZpbmVkKE1PUlRBTCkgKi8KIAogCWlmIChyZWFscGF0aChuYW1lLCBybmFt ZSkgPT0gTlVMTCkgewogCQkvKiBDb250aW51ZSBhbmQgbGV0IHRoZSBzeXN0ZW0gY2FsbCBjaGVj ayBpdC4uLiAqLwpAQCAtMjIxLDYgKzI0NSw5IEBACiAJb3JpZ25hbWUgPSBuYW1lOwogCWlmIChz dGF0KG5hbWUsICZzYikgPCAwKSB7CiAJCW1udHB0ID0gcm5hbWU7CisjaWZkZWYgTU9SVEFMCisJ CWRldiA9IG5hbWU7CisjZW5kaWYgLyogZGVmaW5lZChNT1JUQUwpICovCiAJCWlmICgoZ2V0bW50 bmFtZShybmFtZSwgTU5URlJPTSwgJnR5cGUpID09IE5VTEwpICYmCiAJCSAgICAoKG1udHB0ID0g Z2V0bW50bmFtZShuYW1lLCBNTlRPTiwgJnR5cGUpKSA9PSBOVUxMKSkgewogCQkJd2FybngoIiVz OiBub3QgY3VycmVudGx5IG1vdW50ZWQiLCBuYW1lKTsKQEAgLTIzMSw4ICsyNTgsMTQgQEAKIAkJ CXdhcm54KCIlczogbm90IGN1cnJlbnRseSBtb3VudGVkIiwgbmFtZSk7CiAJCQlyZXR1cm4gKDEp OwogCQl9CisjaWZkZWYgTU9SVEFMCisJCWRldiA9IG5hbWU7CisjZW5kaWYgLyogZGVmaW5lZChN T1JUQUwpICovCiAJfSBlbHNlIGlmIChTX0lTRElSKHNiLnN0X21vZGUpKSB7CiAJCW1udHB0ID0g cm5hbWU7CisjaWZkZWYgTU9SVEFMCisJCWRldiA9IG5hbWU7CisjZW5kaWYgLyogZGVmaW5lZChN T1JUQUwpICovCiAJCWlmIChnZXRtbnRuYW1lKG1udHB0LCBNTlRGUk9NLCAmdHlwZSkgPT0gTlVM TCkgewogCQkJd2FybngoIiVzOiBub3QgY3VycmVudGx5IG1vdW50ZWQiLCBuYW1lKTsKIAkJCXJl dHVybiAoMSk7CkBAIC0yNDYsNiArMjc5LDI5IEBACiAJaWYgKGNoZWNrdmZzbmFtZSh0eXBlLCB0 eXBlbGlzdCkpCiAJCXJldHVybiAoMSk7CiAKKyNpZmRlZiBNT1JUQUwKKwl1aWQgPSBnZXR1aWQo KTsKKwlpZiAodWlkKSB7CisJCWNoYXIgKmNhcDsKKwkJc3RydWN0IHN0YXQgc3RhdF9idWY7CisK KwkJY2FwID0gR2V0X0Rldl9DYXAoZGV2KTsKKwkJaWYgKCFjYXApCS8qIG5vdCBpbiBtb3VudC5j ZiwgdGhlcmVmb3JlIG5vdCBwZXJtaXR0ZWQgKi8KKwkJCWVycmMoRVhfTk9QRVJNLCBFUEVSTSwg IiVzIiwgZGV2KTsKKwkJaWYgKCFHZXRfU3RyKGNhcCwgQ0ZfTk9ERSwgJmRpcikpCisJCQllcnJj KEVYX05PUEVSTSwgRVBFUk0sICIlcyIsIGRldik7CisJCWRpciA9IHN0cmR1cChkaXIpOworCQlp ZiAoIWRpcikKKwkJCWVycihFWF9PU0VSUiwgTlVMTCk7CisJCWRpciA9IFBhcmVudChkaXIpOwor CQlpZiAoLTEgPT0gc3RhdChkaXIsICZzdGF0X2J1ZikpCisJCQllcnIoRVhfT1NGSUxFLCAiJXMi LCBkaXIpOworCQlpZiAodWlkICE9IHN0YXRfYnVmLnN0X3VpZCkKKwkJCWVycmMoRVhfTk9QRVJN LCBFUEVSTSwgIiVzIiwgZGlyKTsKKworCX0KKyNlbmRpZiAvKiBkZWZpbmVkKE1PUlRBTCkgKi8K KwogCWhwID0gTlVMTDsKIAlpZiAoIXN0cmNtcCh0eXBlLCAibmZzIikpIHsKIAkJaWYgKChkZWxp bXAgPSBzdHJjaHIobmFtZSwgJ0AnKSkgIT0gTlVMTCkgewpAQCAtMjc0LDYgKzMzMCwxMSBAQAog CQl3YXJuKCIlcyIsIG1udHB0KTsKIAkJcmV0dXJuICgxKTsKIAl9CisKKyNpZmRlZiBNT1JUQUwK KwlpZiAodWlkICYmICgtMSA9PSBjaG93bihkaXIsIDAsIC0xKSB8fCAtMSA9PSBjaG1vZChkaXIs IDA3MDApKSkKKwkJZXJyKEVYX09TRVJSLCAiJXMiLCBkaXIpOworI2VuZGlmIC8qIGRlZmluZWQo TU9SVEFMKSAqLwogCiAJaWYgKChocCAhPSBOVUxMKSAmJiAhKGZmbGFnICYgTU5UX0ZPUkNFKSkg ewogCQkqZGVsaW1wID0gJ1wwJzsK ------- =_aaaaaaaaaa0-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199904081837.NAA26342>