From mboxrd@z Thu Jan 1 00:00:00 1970 From: Martin Josefsson Subject: [PATCH RFT] Improve iptables error reporting Date: Sun, 12 Aug 2007 01:21:04 +0200 (CEST) Message-ID: Mime-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-1017779964-1203588843-1186874464=:28796" To: netfilter-devel@lists.netfilter.org Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: netfilter-devel-bounces@lists.netfilter.org Errors-To: netfilter-devel-bounces@lists.netfilter.org List-Id: netfilter-devel.vger.kernel.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1017779964-1203588843-1186874464=:28796 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Hi Here's a small patch that reworks the iptables/ip6tables error reporting a bit. The purpose of this patch is to try to provide more resonable error messages. Currently a lot of functions in libiptc sets a pointer called iptc_fn to point to the current function, and then they set errno to an error code. This has at least one major shortcoming: int some_other_function(void) { iptc_fn = some_other_function; ... return 1; } void some_function(void) { iptc_fn = some_function; if (some_other_function()) errno = ENOENT; } Now we have iptc_fn == some_other_function but errno was meant for some_function, a mismatch has occured, which will cause the wrong error message to be printed. What this patch does is to add TC_ERROR (iptc_error/ip6tc_error) which sets both iptc_errfn and iptc_errno at the same time, and it's only called when an error is detected. Thus we don't have any mismatches anymore. Example of error messages: loop: old: # iptables -I INPUT -j tuut iptables: Too many levels of symbolic links new: # iptables -I INPUT -j tuut iptables: Loop found in table chain not found: old: # iptables -I foo -j ACCEPT iptables: No chain/target/match by that name new: # iptables -I foo -j ACCEPT iptables: No chain by that name jump to predefined chain: old: # iptables -I tuut -j INPUT iptables: Invalid argument new: # iptables -I tuut -j INPUT iptables: Can't jump to a built-in target removal of not empty chain: old: # iptables -X tuut iptables: Directory not empty new: # iptables -X tuut iptables: Chain is not empty removal of chain with references: old: # iptables -X tuut iptables: Too many links new: # iptables -X tuut iptables: Can't delete chain with references left Unknown errors will now be displayed like: (this is made up) "Unknown error, iptc_commit: 30 (foo not in phase with the moon)" function, error code and strerror() (might give a clue). (line number can be added if needed) And if something signals an error (return value) but doesn't call iptc_error()/ip6tc_error() it looks like this: "Something forgot to set the error reason" Please test and report success or failure. I'm likely to have missed some/many errors. /Martin ---1017779964-1203588843-1186874464=:28796 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=iptables-errorreport.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=iptables-errorreport.patch ZGlmZiAtWCAvaG9tZS9nYW5kYWxmL2RvbnRkaWZmLm55IC14ICcqLmQnIC14 ICcqLm1hbicgLXggJyouOCcgLXVyTnAgaXB0YWJsZXMtMS4zLjgtMjAwNzA4 MTAub3JpZy9pbmNsdWRlL2xpYmlwdGMvbGliaXA2dGMuaCBpcHRhYmxlcy0x LjMuOC0yMDA3MDgxMC9pbmNsdWRlL2xpYmlwdGMvbGliaXA2dGMuaA0KLS0t IGlwdGFibGVzLTEuMy44LTIwMDcwODEwLm9yaWcvaW5jbHVkZS9saWJpcHRj L2xpYmlwNnRjLmgJMjAwMy0wNS0wNSAyMTozMzo0MC4wMDAwMDAwMDAgKzAy MDANCisrKyBpcHRhYmxlcy0xLjMuOC0yMDA3MDgxMC9pbmNsdWRlL2xpYmlw dGMvbGliaXA2dGMuaAkyMDA3LTA4LTEyIDAwOjA2OjIzLjAwMDAwMDAwMCAr MDIwMA0KQEAgLTE3LDYgKzE3LDEwIEBAIHR5cGVkZWYgY2hhciBpcDZ0X2No YWlubGFiZWxbMzJdOw0KICNkZWZpbmUgSVA2VENfTEFCRUxfUVVFVUUgICAi UVVFVUUiDQogI2RlZmluZSBJUDZUQ19MQUJFTF9SRVRVUk4gIlJFVFVSTiIN CiANCisjaWZuZGVmIFRDX0xJQk5BTUUNCisjZGVmaW5lIFRDX0xJQk5BTUUg ImxpYmlwNnRjIg0KKyNlbmRpZg0KKw0KIC8qIFRyYW5zcGFyZW50IGhhbmRs ZSB0eXBlLiAqLw0KIHR5cGVkZWYgc3RydWN0IGlwNnRjX2hhbmRsZSAqaXA2 dGNfaGFuZGxlX3Q7DQogDQpAQCAtMTQ1LDggKzE0OSwxMSBAQCBpbnQgaXA2 dGNfY29tbWl0KGlwNnRjX2hhbmRsZV90ICpoYW5kbGUpDQogLyogR2V0IHJh dyBzb2NrZXQuICovDQogaW50IGlwNnRjX2dldF9yYXdfc29ja2V0KCk7DQog DQorLyogUmVwb3J0IGVycm9ycyAqLw0KK3ZvaWQgaXA2dGNfZXJyb3IoY29u c3QgY2hhciAqLCBpbnQpOw0KKw0KIC8qIFRyYW5zbGF0ZXMgZXJybm8gbnVt YmVycyBpbnRvIG1vcmUgaHVtYW4tcmVhZGFibGUgZm9ybSB0aGFuIHN0cmVy cm9yLiAqLw0KLWNvbnN0IGNoYXIgKmlwNnRjX3N0cmVycm9yKGludCBlcnIp Ow0KK2NvbnN0IGNoYXIgKmlwNnRjX3N0cmVycm9yKCk7DQogDQogLyogUmV0 dXJuIHByZWZpeCBsZW5ndGgsIG9yIC0xIGlmIG5vdCBjb250aWd1b3VzICov DQogaW50IGlwdjZfcHJlZml4X2xlbmd0aChjb25zdCBzdHJ1Y3QgaW42X2Fk ZHIgKmEpOw0KZGlmZiAtWCAvaG9tZS9nYW5kYWxmL2RvbnRkaWZmLm55IC14 ICcqLmQnIC14ICcqLm1hbicgLXggJyouOCcgLXVyTnAgaXB0YWJsZXMtMS4z LjgtMjAwNzA4MTAub3JpZy9pbmNsdWRlL2xpYmlwdGMvbGliaXB0Yy5oIGlw dGFibGVzLTEuMy44LTIwMDcwODEwL2luY2x1ZGUvbGliaXB0Yy9saWJpcHRj LmgNCi0tLSBpcHRhYmxlcy0xLjMuOC0yMDA3MDgxMC5vcmlnL2luY2x1ZGUv bGliaXB0Yy9saWJpcHRjLmgJMjAwMy0wNS0wMiAxNzozMDoxMS4wMDAwMDAw MDAgKzAyMDANCisrKyBpcHRhYmxlcy0xLjMuOC0yMDA3MDgxMC9pbmNsdWRl L2xpYmlwdGMvbGliaXB0Yy5oCTIwMDctMDgtMTIgMDA6MDY6MzEuMDAwMDAw MDAwICswMjAwDQpAQCAtMjUsNiArMjUsMTAgQEAgdHlwZWRlZiBjaGFyIGlw dF9jaGFpbmxhYmVsWzMyXTsNCiAjZGVmaW5lIElQVENfTEFCRUxfUVVFVUUg ICAiUVVFVUUiDQogI2RlZmluZSBJUFRDX0xBQkVMX1JFVFVSTiAgIlJFVFVS TiINCiANCisjaWZuZGVmIFRDX0xJQk5BTUUNCisjZGVmaW5lIFRDX0xJQk5B TUUgImxpYmlwNHRjIg0KKyNlbmRpZg0KKw0KIC8qIFRyYW5zcGFyZW50IGhh bmRsZSB0eXBlLiAqLw0KIHR5cGVkZWYgc3RydWN0IGlwdGNfaGFuZGxlICpp cHRjX2hhbmRsZV90Ow0KIA0KQEAgLTE1NSw4ICsxNTksMTEgQEAgaW50IGlw dGNfY29tbWl0KGlwdGNfaGFuZGxlX3QgKmhhbmRsZSk7DQogLyogR2V0IHJh dyBzb2NrZXQuICovDQogaW50IGlwdGNfZ2V0X3Jhd19zb2NrZXQoKTsNCiAN CisvKiBSZXBvcnQgZXJyb3JzICovDQordm9pZCBpcHRjX2Vycm9yKGNvbnN0 IGNoYXIgKiwgaW50KTsNCisNCiAvKiBUcmFuc2xhdGVzIGVycm5vIG51bWJl cnMgaW50byBtb3JlIGh1bWFuLXJlYWRhYmxlIGZvcm0gdGhhbiBzdHJlcnJv ci4gKi8NCi1jb25zdCBjaGFyICppcHRjX3N0cmVycm9yKGludCBlcnIpOw0K K2NvbnN0IGNoYXIgKmlwdGNfc3RyZXJyb3IoKTsNCiANCiAjaWZkZWYgX19j cGx1c3BsdXMNCiB9DQpCaW5hcnkgZmlsZXMgaXB0YWJsZXMtMS4zLjgtMjAw NzA4MTAub3JpZy9pcDZ0YWJsZXMgYW5kIGlwdGFibGVzLTEuMy44LTIwMDcw ODEwL2lwNnRhYmxlcyBkaWZmZXINCmRpZmYgLVggL2hvbWUvZ2FuZGFsZi9k b250ZGlmZi5ueSAteCAnKi5kJyAteCAnKi5tYW4nIC14ICcqLjgnIC11ck5w IGlwdGFibGVzLTEuMy44LTIwMDcwODEwLm9yaWcvaXA2dGFibGVzLXJlc3Rv cmUuYyBpcHRhYmxlcy0xLjMuOC0yMDA3MDgxMC9pcDZ0YWJsZXMtcmVzdG9y ZS5jDQotLS0gaXB0YWJsZXMtMS4zLjgtMjAwNzA4MTAub3JpZy9pcDZ0YWJs ZXMtcmVzdG9yZS5jCTIwMDctMDctMjQgMDc6NTI6MDcuMDAwMDAwMDAwICsw MjAwDQorKysgaXB0YWJsZXMtMS4zLjgtMjAwNzA4MTAvaXA2dGFibGVzLXJl c3RvcmUuYwkyMDA3LTA4LTExIDIzOjM5OjI3LjAwMDAwMDAwMCArMDIwMA0K QEAgLTI0MCwxNCArMjQwLDE0IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pDQogCQkJCQkJZXhpdF9lcnJvcihQQVJBTUVURVJfUFJPQkxF TSwNCiAJCQkJCQkJICAgImVycm9yIGZsdXNoaW5nIGNoYWluICINCiAJCQkJ CQkJICAgIiclcyc6JXNcbiIsIGNoYWluLA0KLQkJCQkJCQkgICBzdHJlcnJv cihlcnJubykpOw0KKwkJCQkJCQkgICBpcDZ0Y19zdHJlcnJvcigpKTsNCiAJ CQkJfSBlbHNlIHsNCiAJCQkJCURFQlVHUCgiQ3JlYXRpbmcgbmV3IGNoYWlu ICclcydcbiIsIGNoYWluKTsNCiAJCQkJCWlmICghaXA2dGNfY3JlYXRlX2No YWluKGNoYWluLCAmaGFuZGxlKSkNCiAJCQkJCQlleGl0X2Vycm9yKFBBUkFN RVRFUl9QUk9CTEVNLA0KIAkJCQkJCQkgICAiZXJyb3IgY3JlYXRpbmcgY2hh aW4gIg0KIAkJCQkJCQkgICAiJyVzJzolc1xuIiwgY2hhaW4sDQotCQkJCQkJ CSAgIHN0cmVycm9yKGVycm5vKSk7DQorCQkJCQkJCSAgIGlwNnRjX3N0cmVy cm9yKCkpOw0KIAkJCQl9DQogCQkJfQ0KIA0KQEAgLTI4Niw3ICsyODYsNyBA QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KIAkJCQkJCSJD YW4ndCBzZXQgcG9saWN5IGAlcyciDQogCQkJCQkJIiBvbiBgJXMnIGxpbmUg JXU6ICVzXG4iLA0KIAkJCQkJCWNoYWluLCBwb2xpY3ksIGxpbmUsDQotCQkJ CQkJaXA2dGNfc3RyZXJyb3IoZXJybm8pKTsNCisJCQkJCQlpcDZ0Y19zdHJl cnJvcigpKTsNCiAJCQl9DQogDQogCQkJcmV0ID0gMTsNCmRpZmYgLVggL2hv bWUvZ2FuZGFsZi9kb250ZGlmZi5ueSAteCAnKi5kJyAteCAnKi5tYW4nIC14 ICcqLjgnIC11ck5wIGlwdGFibGVzLTEuMy44LTIwMDcwODEwLm9yaWcvaXA2 dGFibGVzLXNhdmUuYyBpcHRhYmxlcy0xLjMuOC0yMDA3MDgxMC9pcDZ0YWJs ZXMtc2F2ZS5jDQotLS0gaXB0YWJsZXMtMS4zLjgtMjAwNzA4MTAub3JpZy9p cDZ0YWJsZXMtc2F2ZS5jCTIwMDctMDUtMTAgMTc6MDA6MzkuMDAwMDAwMDAw ICswMjAwDQorKysgaXB0YWJsZXMtMS4zLjgtMjAwNzA4MTAvaXA2dGFibGVz LXNhdmUuYwkyMDA3LTA4LTExIDE5OjEyOjUxLjAwMDAwMDAwMCArMDIwMA0K QEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGF0aWMgaW50IGRvX291dHB1dChjb25z dCBjaGFyICp0YWJsZW5hDQogCWggPSBpcDZ0Y19pbml0KHRhYmxlbmFtZSk7 DQogCWlmICghaCkNCiAgCQlleGl0X2Vycm9yKE9USEVSX1BST0JMRU0sICJD YW4ndCBpbml0aWFsaXplOiAlc1xuIiwNCi0JCQkgICBpcDZ0Y19zdHJlcnJv cihlcnJubykpOw0KKwkJCSAgIGlwNnRjX3N0cmVycm9yKCkpOw0KIA0KIAlp ZiAoIWJpbmFyeSkgew0KIAkJdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7DQpk aWZmIC1YIC9ob21lL2dhbmRhbGYvZG9udGRpZmYubnkgLXggJyouZCcgLXgg JyoubWFuJyAteCAnKi44JyAtdXJOcCBpcHRhYmxlcy0xLjMuOC0yMDA3MDgx MC5vcmlnL2lwNnRhYmxlcy1zdGFuZGFsb25lLmMgaXB0YWJsZXMtMS4zLjgt MjAwNzA4MTAvaXA2dGFibGVzLXN0YW5kYWxvbmUuYw0KLS0tIGlwdGFibGVz LTEuMy44LTIwMDcwODEwLm9yaWcvaXA2dGFibGVzLXN0YW5kYWxvbmUuYwky MDA0LTEyLTI3IDIwOjQ5OjI4LjAwMDAwMDAwMCArMDEwMA0KKysrIGlwdGFi bGVzLTEuMy44LTIwMDcwODEwL2lwNnRhYmxlcy1zdGFuZGFsb25lLmMJMjAw Ny0wOC0xMSAxOToxMjo1MS4wMDAwMDAwMDAgKzAyMDANCkBAIC02MCw3ICs2 MCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiANCiAJaWYg KCFyZXQpDQogCQlmcHJpbnRmKHN0ZGVyciwgImlwNnRhYmxlczogJXNcbiIs DQotCQkJaXA2dGNfc3RyZXJyb3IoZXJybm8pKTsNCisJCQlpcDZ0Y19zdHJl cnJvcigpKTsNCiANCiAJZXhpdCghcmV0KTsNCiB9DQpkaWZmIC1YIC9ob21l L2dhbmRhbGYvZG9udGRpZmYubnkgLXggJyouZCcgLXggJyoubWFuJyAteCAn Ki44JyAtdXJOcCBpcHRhYmxlcy0xLjMuOC0yMDA3MDgxMC5vcmlnL2lwNnRh Ymxlcy5jIGlwdGFibGVzLTEuMy44LTIwMDcwODEwL2lwNnRhYmxlcy5jDQot LS0gaXB0YWJsZXMtMS4zLjgtMjAwNzA4MTAub3JpZy9pcDZ0YWJsZXMuYwky MDA3LTA4LTAxIDE3OjE5OjE1LjAwMDAwMDAwMCArMDIwMA0KKysrIGlwdGFi bGVzLTEuMy44LTIwMDcwODEwL2lwNnRhYmxlcy5jCTIwMDctMDgtMTIgMDA6 MDg6MzIuMDAwMDAwMDAwICswMjAwDQpAQCAtMTMzMCw3ICsxMzMwLDkgQEAg bGlzdF9lbnRyaWVzKGNvbnN0IGlwNnRfY2hhaW5sYWJlbCBjaGFpbg0KIAkJ Zm91bmQgPSAxOw0KIAl9DQogDQotCWVycm5vID0gRU5PRU5UOw0KKwlpZiAo IWZvdW5kKQ0KKwkJaXA2dGNfZXJyb3IoX19GVU5DVElPTl9fLCBFTk9FTlQp Ow0KKw0KIAlyZXR1cm4gZm91bmQ7DQogfQ0KIA0KQEAgLTE4OTYsNyArMTg5 OCw3IEBAIGludCBkb19jb21tYW5kNihpbnQgYXJnYywgY2hhciAqYXJndltd LCANCiAJaWYgKCEqaGFuZGxlKQ0KIAkJZXhpdF9lcnJvcihWRVJTSU9OX1BS T0JMRU0sDQogCQkJImNhbid0IGluaXRpYWxpemUgaXA2dGFibGVzIHRhYmxl IGAlcyc6ICVzIiwNCi0JCQkqdGFibGUsIGlwNnRjX3N0cmVycm9yKGVycm5v KSk7DQorCQkJKnRhYmxlLCBpcDZ0Y19zdHJlcnJvcigpKTsNCiANCiAJaWYg KGNvbW1hbmQgPT0gQ01EX0FQUEVORA0KIAkgICAgfHwgY29tbWFuZCA9PSBD TURfREVMRVRFDQpCaW5hcnkgZmlsZXMgaXB0YWJsZXMtMS4zLjgtMjAwNzA4 MTAub3JpZy9pcHRhYmxlcyBhbmQgaXB0YWJsZXMtMS4zLjgtMjAwNzA4MTAv aXB0YWJsZXMgZGlmZmVyDQpCaW5hcnkgZmlsZXMgaXB0YWJsZXMtMS4zLjgt MjAwNzA4MTAub3JpZy9pcHRhYmxlcy1yZXN0b3JlIGFuZCBpcHRhYmxlcy0x LjMuOC0yMDA3MDgxMC9pcHRhYmxlcy1yZXN0b3JlIGRpZmZlcg0KZGlmZiAt WCAvaG9tZS9nYW5kYWxmL2RvbnRkaWZmLm55IC14ICcqLmQnIC14ICcqLm1h bicgLXggJyouOCcgLXVyTnAgaXB0YWJsZXMtMS4zLjgtMjAwNzA4MTAub3Jp Zy9pcHRhYmxlcy1yZXN0b3JlLmMgaXB0YWJsZXMtMS4zLjgtMjAwNzA4MTAv aXB0YWJsZXMtcmVzdG9yZS5jDQotLS0gaXB0YWJsZXMtMS4zLjgtMjAwNzA4 MTAub3JpZy9pcHRhYmxlcy1yZXN0b3JlLmMJMjAwNy0wNy0yNCAwNzo1Mjow Ny4wMDAwMDAwMDAgKzAyMDANCisrKyBpcHRhYmxlcy0xLjMuOC0yMDA3MDgx MC9pcHRhYmxlcy1yZXN0b3JlLmMJMjAwNy0wOC0xMSAyMzozODozMS4wMDAw MDAwMDAgKzAyMDANCkBAIC0yNDMsMTQgKzI0MywxNCBAQCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pDQogCQkJCQkJZXhpdF9lcnJvcihQQVJBTUVU RVJfUFJPQkxFTSwNCiAJCQkJCQkJICAgImVycm9yIGZsdXNoaW5nIGNoYWlu ICINCiAJCQkJCQkJICAgIiclcyc6JXNcbiIsIGNoYWluLA0KLQkJCQkJCQkg ICBzdHJlcnJvcihlcnJubykpOw0KKwkJCQkJCQkgICBpcHRjX3N0cmVycm9y KCkpOw0KIAkJCQl9IGVsc2Ugew0KIAkJCQkJREVCVUdQKCJDcmVhdGluZyBu ZXcgY2hhaW4gJyVzJ1xuIiwgY2hhaW4pOw0KIAkJCQkJaWYgKCFpcHRjX2Ny ZWF0ZV9jaGFpbihjaGFpbiwgJmhhbmRsZSkpDQogCQkJCQkJZXhpdF9lcnJv cihQQVJBTUVURVJfUFJPQkxFTSwNCiAJCQkJCQkJICAgImVycm9yIGNyZWF0 aW5nIGNoYWluICINCiAJCQkJCQkJICAgIiclcyc6JXNcbiIsIGNoYWluLA0K LQkJCQkJCQkgICBzdHJlcnJvcihlcnJubykpOw0KKwkJCQkJCQkgICBpcHRj X3N0cmVycm9yKCkpOw0KIAkJCQl9DQogCQkJfQ0KIA0KQEAgLTI4OSw3ICsy ODksNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQogCQkJCQkJ IkNhbid0IHNldCBwb2xpY3kgYCVzJyINCiAJCQkJCQkiIG9uIGAlcycgbGlu ZSAldTogJXNcbiIsDQogCQkJCQkJY2hhaW4sIHBvbGljeSwgbGluZSwNCi0J CQkJCQlpcHRjX3N0cmVycm9yKGVycm5vKSk7DQorCQkJCQkJaXB0Y19zdHJl cnJvcigpKTsNCiAJCQl9DQogDQogCQkJcmV0ID0gMTsNCkJpbmFyeSBmaWxl cyBpcHRhYmxlcy0xLjMuOC0yMDA3MDgxMC5vcmlnL2lwdGFibGVzLXNhdmUg YW5kIGlwdGFibGVzLTEuMy44LTIwMDcwODEwL2lwdGFibGVzLXNhdmUgZGlm ZmVyDQpkaWZmIC1YIC9ob21lL2dhbmRhbGYvZG9udGRpZmYubnkgLXggJyou ZCcgLXggJyoubWFuJyAteCAnKi44JyAtdXJOcCBpcHRhYmxlcy0xLjMuOC0y MDA3MDgxMC5vcmlnL2lwdGFibGVzLXNhdmUuYyBpcHRhYmxlcy0xLjMuOC0y MDA3MDgxMC9pcHRhYmxlcy1zYXZlLmMNCi0tLSBpcHRhYmxlcy0xLjMuOC0y MDA3MDgxMC5vcmlnL2lwdGFibGVzLXNhdmUuYwkyMDA3LTA1LTEwIDE3OjAw OjM5LjAwMDAwMDAwMCArMDIwMA0KKysrIGlwdGFibGVzLTEuMy44LTIwMDcw ODEwL2lwdGFibGVzLXNhdmUuYwkyMDA3LTA4LTExIDE5OjEyOjUxLjAwMDAw MDAwMCArMDIwMA0KQEAgLTI2OCw3ICsyNjgsNyBAQCBzdGF0aWMgaW50IGRv X291dHB1dChjb25zdCBjaGFyICp0YWJsZW5hDQogCWggPSBpcHRjX2luaXQo dGFibGVuYW1lKTsNCiAJaWYgKCFoKQ0KICAJCWV4aXRfZXJyb3IoT1RIRVJf UFJPQkxFTSwgIkNhbid0IGluaXRpYWxpemU6ICVzXG4iLA0KLQkJCSAgIGlw dGNfc3RyZXJyb3IoZXJybm8pKTsNCisJCQkgICBpcHRjX3N0cmVycm9yKCkp Ow0KIA0KIAlpZiAoIWJpbmFyeSkgew0KIAkJdGltZV90IG5vdyA9IHRpbWUo TlVMTCk7DQpkaWZmIC1YIC9ob21lL2dhbmRhbGYvZG9udGRpZmYubnkgLXgg JyouZCcgLXggJyoubWFuJyAteCAnKi44JyAtdXJOcCBpcHRhYmxlcy0xLjMu OC0yMDA3MDgxMC5vcmlnL2lwdGFibGVzLXN0YW5kYWxvbmUuYyBpcHRhYmxl cy0xLjMuOC0yMDA3MDgxMC9pcHRhYmxlcy1zdGFuZGFsb25lLmMNCi0tLSBp cHRhYmxlcy0xLjMuOC0yMDA3MDgxMC5vcmlnL2lwdGFibGVzLXN0YW5kYWxv bmUuYwkyMDA2LTA2LTE5IDE4OjUzOjAzLjAwMDAwMDAwMCArMDIwMA0KKysr IGlwdGFibGVzLTEuMy44LTIwMDcwODEwL2lwdGFibGVzLXN0YW5kYWxvbmUu YwkyMDA3LTA4LTExIDE5OjEyOjUxLjAwMDAwMDAwMCArMDIwMA0KQEAgLTY2 LDcgKzY2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KIA0K IAlpZiAoIXJldCkgew0KIAkJZnByaW50ZihzdGRlcnIsICJpcHRhYmxlczog JXNcbiIsDQotCQkJaXB0Y19zdHJlcnJvcihlcnJubykpOw0KKwkJCWlwdGNf c3RyZXJyb3IoKSk7DQogCQlpZiAoZXJybm8gPT0gRUFHQUlOKSB7DQogCQkJ ZXhpdChSRVNPVVJDRV9QUk9CTEVNKTsNCiAJCX0NCkJpbmFyeSBmaWxlcyBp cHRhYmxlcy0xLjMuOC0yMDA3MDgxMC5vcmlnL2lwdGFibGVzLXhtbCBhbmQg aXB0YWJsZXMtMS4zLjgtMjAwNzA4MTAvaXB0YWJsZXMteG1sIGRpZmZlcg0K ZGlmZiAtWCAvaG9tZS9nYW5kYWxmL2RvbnRkaWZmLm55IC14ICcqLmQnIC14 ICcqLm1hbicgLXggJyouOCcgLXVyTnAgaXB0YWJsZXMtMS4zLjgtMjAwNzA4 MTAub3JpZy9pcHRhYmxlcy5jIGlwdGFibGVzLTEuMy44LTIwMDcwODEwL2lw dGFibGVzLmMNCi0tLSBpcHRhYmxlcy0xLjMuOC0yMDA3MDgxMC5vcmlnL2lw dGFibGVzLmMJMjAwNy0wOC0wMSAxNzoxOToxNS4wMDAwMDAwMDAgKzAyMDAN CisrKyBpcHRhYmxlcy0xLjMuOC0yMDA3MDgxMC9pcHRhYmxlcy5jCTIwMDct MDgtMTIgMDA6MDg6MTUuMDAwMDAwMDAwICswMjAwDQpAQCAtMTM3MSw3ICsx MzcxLDkgQEAgbGlzdF9lbnRyaWVzKGNvbnN0IGlwdF9jaGFpbmxhYmVsIGNo YWluLA0KIAkJZm91bmQgPSAxOw0KIAl9DQogDQotCWVycm5vID0gRU5PRU5U Ow0KKwlpZiAoIWZvdW5kKQ0KKwkJaXB0Y19lcnJvcihfX0ZVTkNUSU9OX18s IEVOT0VOVCk7DQorDQogCXJldHVybiBmb3VuZDsNCiB9DQogDQpAQCAtMTk2 MSw3ICsxOTYzLDcgQEAgaW50IGRvX2NvbW1hbmQoaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSwgYw0KIAlpZiAoISpoYW5kbGUpDQogCQlleGl0X2Vycm9yKFZF UlNJT05fUFJPQkxFTSwNCiAJCQkgICAiY2FuJ3QgaW5pdGlhbGl6ZSBpcHRh YmxlcyB0YWJsZSBgJXMnOiAlcyIsDQotCQkJICAgKnRhYmxlLCBpcHRjX3N0 cmVycm9yKGVycm5vKSk7DQorCQkJICAgKnRhYmxlLCBpcHRjX3N0cmVycm9y KCkpOw0KIA0KIAlpZiAoY29tbWFuZCA9PSBDTURfQVBQRU5EDQogCSAgICB8 fCBjb21tYW5kID09IENNRF9ERUxFVEUNCmRpZmYgLVggL2hvbWUvZ2FuZGFs Zi9kb250ZGlmZi5ueSAteCAnKi5kJyAteCAnKi5tYW4nIC14ICcqLjgnIC11 ck5wIGlwdGFibGVzLTEuMy44LTIwMDcwODEwLm9yaWcvbGliaXB0Yy9saWJp cDR0Yy5jIGlwdGFibGVzLTEuMy44LTIwMDcwODEwL2xpYmlwdGMvbGliaXA0 dGMuYw0KLS0tIGlwdGFibGVzLTEuMy44LTIwMDcwODEwLm9yaWcvbGliaXB0 Yy9saWJpcDR0Yy5jCTIwMDYtMDctMDUgMTE6MzE6NDUuMDAwMDAwMDAwICsw MjAwDQorKysgaXB0YWJsZXMtMS4zLjgtMjAwNzA4MTAvbGliaXB0Yy9saWJp cDR0Yy5jCTIwMDctMDgtMTIgMDA6MTE6NTUuMDAwMDAwMDAwICswMjAwDQpA QCAtOTMsNiArOTMsNyBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBzb2NrbGVu X3Q7DQogI2RlZmluZSBUQ19JTklUCQkJaXB0Y19pbml0DQogI2RlZmluZSBU Q19GUkVFCQkJaXB0Y19mcmVlDQogI2RlZmluZSBUQ19DT01NSVQJCWlwdGNf Y29tbWl0DQorI2RlZmluZSBUQ19FUlJPUgkJaXB0Y19lcnJvcg0KICNkZWZp bmUgVENfU1RSRVJST1IJCWlwdGNfc3RyZXJyb3INCiAjZGVmaW5lIFRDX05V TV9SVUxFUwkJaXB0Y19udW1fcnVsZXMNCiAjZGVmaW5lIFRDX0dFVF9SVUxF CQlpcHRjX2dldF9ydWxlDQpAQCAtMTE1LDYgKzExNiw4IEBAIHR5cGVkZWYg dW5zaWduZWQgaW50IHNvY2tsZW5fdDsNCiAjZGVmaW5lIEFMSUdOCQkJSVBU X0FMSUdODQogI2RlZmluZSBSRVRVUk4JCQlJUFRfUkVUVVJODQogDQorI2Rl ZmluZSBUQ19FUlIoeCkJCVRDX0VSUk9SKF9fRlVOQ1RJT05fXywgKHgpKQ0K Kw0KICNpbmNsdWRlICJsaWJpcHRjLmMiDQogDQogI2RlZmluZSBJUF9QQVJU U19OQVRJVkUobikJCQlcDQpkaWZmIC1YIC9ob21lL2dhbmRhbGYvZG9udGRp ZmYubnkgLXggJyouZCcgLXggJyoubWFuJyAteCAnKi44JyAtdXJOcCBpcHRh Ymxlcy0xLjMuOC0yMDA3MDgxMC5vcmlnL2xpYmlwdGMvbGliaXA2dGMuYyBp cHRhYmxlcy0xLjMuOC0yMDA3MDgxMC9saWJpcHRjL2xpYmlwNnRjLmMNCi0t LSBpcHRhYmxlcy0xLjMuOC0yMDA3MDgxMC5vcmlnL2xpYmlwdGMvbGliaXA2 dGMuYwkyMDA2LTA3LTA1IDExOjMxOjQ1LjAwMDAwMDAwMCArMDIwMA0KKysr IGlwdGFibGVzLTEuMy44LTIwMDcwODEwL2xpYmlwdGMvbGliaXA2dGMuYwky MDA3LTA4LTEyIDAwOjEyOjMzLjAwMDAwMDAwMCArMDIwMA0KQEAgLTg4LDYg Kzg4LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgc29ja2xlbl90Ow0KICNk ZWZpbmUgVENfSU5JVAkJCWlwNnRjX2luaXQNCiAjZGVmaW5lIFRDX0ZSRUUJ CQlpcDZ0Y19mcmVlDQogI2RlZmluZSBUQ19DT01NSVQJCWlwNnRjX2NvbW1p dA0KKyNkZWZpbmUgVENfRVJST1IJCWlwNnRjX2Vycm9yDQogI2RlZmluZSBU Q19TVFJFUlJPUgkJaXA2dGNfc3RyZXJyb3INCiAjZGVmaW5lIFRDX05VTV9S VUxFUwkJaXA2dGNfbnVtX3J1bGVzDQogI2RlZmluZSBUQ19HRVRfUlVMRQkJ aXA2dGNfZ2V0X3J1bGUNCkBAIC0xMTAsNiArMTExLDggQEAgdHlwZWRlZiB1 bnNpZ25lZCBpbnQgc29ja2xlbl90Ow0KICNkZWZpbmUgQUxJR04JCQlJUDZU X0FMSUdODQogI2RlZmluZSBSRVRVUk4JCQlJUDZUX1JFVFVSTg0KIA0KKyNk ZWZpbmUgVENfRVJSKHgpCQlUQ19FUlJPUihfX0ZVTkNUSU9OX18sICh4KSkN CisNCiAjaW5jbHVkZSAibGliaXB0Yy5jIg0KIA0KICNkZWZpbmUgQklUNihh LCBsKSBcDQpkaWZmIC1YIC9ob21lL2dhbmRhbGYvZG9udGRpZmYubnkgLXgg JyouZCcgLXggJyoubWFuJyAteCAnKi44JyAtdXJOcCBpcHRhYmxlcy0xLjMu OC0yMDA3MDgxMC5vcmlnL2xpYmlwdGMvbGliaXB0Yy5jIGlwdGFibGVzLTEu My44LTIwMDcwODEwL2xpYmlwdGMvbGliaXB0Yy5jDQotLS0gaXB0YWJsZXMt MS4zLjgtMjAwNzA4MTAub3JpZy9saWJpcHRjL2xpYmlwdGMuYwkyMDA3LTA2 LTMwIDEyOjQ3OjU3LjAwMDAwMDAwMCArMDIwMA0KKysrIGlwdGFibGVzLTEu My44LTIwMDcwODEwL2xpYmlwdGMvbGliaXB0Yy5jCTIwMDctMDgtMTIgMDA6 MTM6NDAuMDAwMDAwMDAwICswMjAwDQpAQCAtNDYsNyArNDYsMTMgQEANCiAN CiBzdGF0aWMgaW50IHNvY2tmZCA9IC0xOw0KIHN0YXRpYyBpbnQgc29ja2Zk X3VzZSA9IDA7DQotc3RhdGljIHZvaWQgKmlwdGNfZm4gPSBOVUxMOw0KKw0K Ky8qIFNpbGx5IGdhbWVzIHRvIGdldCBjcHAgdG8gcGVyZm9ybSByZWN1cnNp dmUgbWFjcm8gZXhwYW5zaW9uIHdoZW4gcXVvdGluZyAqLw0KKyNkZWZpbmUg UVVPVEUoeCkgI3gNCisjZGVmaW5lIFFGKHgpIFFVT1RFKHgpDQorDQorc3Rh dGljIGludCBpcHRjX2Vycm5vID0gMDsNCitzdGF0aWMgY2hhciBpcHRjX2Vy cmZuWzY0XTsNCiANCiBzdGF0aWMgY29uc3QgY2hhciAqaG9va25hbWVzW10N CiA9IHsgW0hPT0tfUFJFX1JPVVRJTkddICAiUFJFUk9VVElORyIsDQpAQCAt NDU2LDcgKzQ2Miw3IEBAIHN0YXRpYyBpbnQgY2FjaGVfYWRkX2VudHJ5KFNU UlVDVF9FTlRSWSANCiAJCURFQlVHUF9DKCIldToldTpuZXcgdXNlcmRlZmlu ZWQgY2hhaW4gJXM6ICVwXG4iLCAqbnVtLCBvZmZzZXQsIA0KIAkJCShjaGFy ICopYy0+bmFtZSwgYyk7DQogCQlpZiAoIWMpIHsNCi0JCQllcnJubyA9IC1F Tk9NRU07DQorCQkJVENfRVJSKEVOT01FTSk7DQogCQkJcmV0dXJuIC0xOw0K IAkJfQ0KIA0KQEAgLTQ2OSw3ICs0NzUsNyBAQCBzdGF0aWMgaW50IGNhY2hl X2FkZF9lbnRyeShTVFJVQ1RfRU5UUlkgDQogCQlERUJVR1BfQygiJXU6JXUg bmV3IGJ1aWx0aW4gY2hhaW46ICVwIChydWxlcz0lcClcbiIsIA0KIAkJCSpu dW0sIG9mZnNldCwgYywgJmMtPnJ1bGVzKTsNCiAJCWlmICghYykgew0KLQkJ CWVycm5vID0gLUVOT01FTTsNCisJCQlUQ19FUlIoRU5PTUVNKTsNCiAJCQly ZXR1cm4gLTE7DQogCQl9DQogDQpAQCAtNDg2LDkgKzQ5MiwxMCBAQCBuZXdf cnVsZToNCiANCiAJCWlmICghKHIgPSBpcHRjY19hbGxvY19ydWxlKGgtPmNo YWluX2l0ZXJhdG9yX2N1ciwgDQogCQkJCQkgICBlLT5uZXh0X29mZnNldCkp KSB7DQotCQkJZXJybm8gPSBFTk9NRU07DQorCQkJVENfRVJSKEVOT01FTSk7 DQogCQkJcmV0dXJuIC0xOw0KIAkJfQ0KKw0KIAkJREVCVUdQX0MoIiV1OiV1 IG5vcm1hbCBydWxlOiAlcDogIiwgKm51bSwgb2Zmc2V0LCByKTsNCiANCiAJ CXItPmluZGV4ID0gKm51bTsNCkBAIC01MDQsNyArNTExLDcgQEAgbmV3X3J1 bGU6DQogCQkJdCA9IChTVFJVQ1RfU1RBTkRBUkRfVEFSR0VUICopR0VUX1RB UkdFVChlKTsNCiAJCQlpZiAodC0+dGFyZ2V0LnUudGFyZ2V0X3NpemUNCiAJ CQkgICAgIT0gQUxJR04oc2l6ZW9mKFNUUlVDVF9TVEFOREFSRF9UQVJHRVQp KSkgew0KLQkJCQllcnJubyA9IEVJTlZBTDsNCisJCQkJVENfRVJSKEVJTlZB TCk7DQogCQkJCXJldHVybiAtMTsNCiAJCQl9DQogDQpAQCAtNzcwLDcgKzc3 Nyw3IEBAIGFsbG9jX2hhbmRsZShjb25zdCBjaGFyICp0YWJsZW5hbWUsIHVu c2kNCiANCiAJaCA9IG1hbGxvYyhzaXplb2YoU1RSVUNUX1RDX0hBTkRMRSkp Ow0KIAlpZiAoIWgpIHsNCi0JCWVycm5vID0gRU5PTUVNOw0KKwkJVENfRVJS KEVOT01FTSk7DQogCQlyZXR1cm4gTlVMTDsNCiAJfQ0KIAltZW1zZXQoaCwg MCwgc2l6ZW9mKCpoKSk7DQpAQCAtNzc4LDggKzc4NSwxMCBAQCBhbGxvY19o YW5kbGUoY29uc3QgY2hhciAqdGFibGVuYW1lLCB1bnNpDQogCXN0cmNweSho LT5pbmZvLm5hbWUsIHRhYmxlbmFtZSk7DQogDQogCWgtPmVudHJpZXMgPSBt YWxsb2Moc2l6ZW9mKFNUUlVDVF9HRVRfRU5UUklFUykgKyBzaXplKTsNCi0J aWYgKCFoLT5lbnRyaWVzKQ0KKwlpZiAoIWgtPmVudHJpZXMpIHsNCisJCVRD X0VSUihFTk9NRU0pOw0KIAkJZ290byBvdXRfZnJlZV9oYW5kbGU7DQorCX0N CiANCiAJc3RyY3B5KGgtPmVudHJpZXMtPm5hbWUsIHRhYmxlbmFtZSk7DQog CWgtPmVudHJpZXMtPnNpemUgPSBzaXplOw0KQEAgLTgwMSwxNyArODEwLDIx IEBAIFRDX0lOSVQoY29uc3QgY2hhciAqdGFibGVuYW1lKQ0KIAl1bnNpZ25l ZCBpbnQgdG1wOw0KIAlzb2NrbGVuX3QgczsNCiANCi0JaXB0Y19mbiA9IFRD X0lOSVQ7DQorCS8qIHVnbHkgaGFjayB0byBhdm9pZCB3YXJuaW5ncyBpZiBj YWxsZWQgbXVsdGlwbGUgdGltZXMgKi8NCisJbWVtc2V0KGlwdGNfZXJyZm4s IDAsIDY0KTsNCisJaXB0Y19lcnJubyA9IDA7DQogDQogCWlmIChzdHJsZW4o dGFibGVuYW1lKSA+PSBUQUJMRV9NQVhOQU1FTEVOKSB7DQotCQllcnJubyA9 IEVJTlZBTDsNCisJCVRDX0VSUihFMkJJRyk7DQogCQlyZXR1cm4gTlVMTDsN CiAJfQ0KIAkNCiAJaWYgKHNvY2tmZF91c2UgPT0gMCkgew0KIAkJc29ja2Zk ID0gc29ja2V0KFRDX0FGLCBTT0NLX1JBVywgSVBQUk9UT19SQVcpOw0KLQkJ aWYgKHNvY2tmZCA8IDApDQorCQlpZiAoc29ja2ZkIDwgMCkgew0KKwkJCVRD X0VSUihlcnJubyk7DQogCQkJcmV0dXJuIE5VTEw7DQorCQl9DQogCX0NCiAJ c29ja2ZkX3VzZSsrOw0KIA0KQEAgLTgyMyw2ICs4MzYsNyBAQCBUQ19JTklU KGNvbnN0IGNoYXIgKnRhYmxlbmFtZSkNCiAJCQljbG9zZShzb2NrZmQpOw0K IAkJCXNvY2tmZCA9IC0xOw0KIAkJfQ0KKwkJVENfRVJSKGVycm5vKTsNCiAJ CXJldHVybiBOVUxMOw0KIAl9DQogDQpAQCAtODM1LDYgKzg0OSw3IEBAIFRD X0lOSVQoY29uc3QgY2hhciAqdGFibGVuYW1lKQ0KIAkJCWNsb3NlKHNvY2tm ZCk7DQogCQkJc29ja2ZkID0gLTE7DQogCQl9DQorCQlUQ19FUlIoRU5PTUVN KTsNCiAJCXJldHVybiBOVUxMOw0KIAl9DQogDQpAQCAtODQ2LDggKzg2MSwx MCBAQCBUQ19JTklUKGNvbnN0IGNoYXIgKnRhYmxlbmFtZSkNCiAJdG1wID0g c2l6ZW9mKFNUUlVDVF9HRVRfRU5UUklFUykgKyBoLT5pbmZvLnNpemU7DQog DQogCWlmIChnZXRzb2Nrb3B0KHNvY2tmZCwgVENfSVBQUk9UTywgU09fR0VU X0VOVFJJRVMsIGgtPmVudHJpZXMsDQotCQkgICAgICAgJnRtcCkgPCAwKQ0K KwkJICAgICAgICZ0bXApIDwgMCkgew0KKwkJVENfRVJSKGVycm5vKTsNCiAJ CWdvdG8gZXJyb3I7DQorCX0NCiANCiAjaWZkZWYgSVBUQ19ERUJVRzINCiAJ ew0KQEAgLTg3OSw3ICs4OTYsNiBAQCBUQ19GUkVFKFRDX0hBTkRMRV9UICpo KQ0KIHsNCiAJc3RydWN0IGNoYWluX2hlYWQgKmMsICp0bXA7DQogDQotCWlw dGNfZm4gPSBUQ19GUkVFOw0KIAlpZiAoLS1zb2NrZmRfdXNlID09IDApIHsN CiAJCWNsb3NlKHNvY2tmZCk7DQogCQlzb2NrZmQgPSAtMTsNCkBAIC05MTMs NyArOTI5LDYgQEAgc3RhdGljIGludCBkdW1wX2VudHJ5KFNUUlVDVF9FTlRS WSAqZSwgYw0KIHZvaWQNCiBUQ19EVU1QX0VOVFJJRVMoY29uc3QgVENfSEFO RExFX1QgaGFuZGxlKQ0KIHsNCi0JaXB0Y19mbiA9IFRDX0RVTVBfRU5UUklF UzsNCiAJQ0hFQ0soaGFuZGxlKTsNCiAjaWYgMA0KIAlwcmludGYoImxpYmlw dGMgdiVzLiAldSBieXRlcy5cbiIsDQpAQCAtOTQwLDcgKzk1NSw2IEBAIFRD X0RVTVBfRU5UUklFUyhjb25zdCBUQ19IQU5ETEVfVCBoYW5kbGUNCiAvKiBE b2VzIHRoaXMgY2hhaW4gZXhpc3Q/ICovDQogaW50IFRDX0lTX0NIQUlOKGNv bnN0IGNoYXIgKmNoYWluLCBjb25zdCBUQ19IQU5ETEVfVCBoYW5kbGUpDQog ew0KLQlpcHRjX2ZuID0gVENfSVNfQ0hBSU47DQogCXJldHVybiBpcHRjY19m aW5kX2xhYmVsKGNoYWluLCBoYW5kbGUpICE9IE5VTEw7DQogfQ0KIA0KQEAg LTk2MiwxMSArOTc2LDkgQEAgVENfRklSU1RfQ0hBSU4oVENfSEFORExFX1Qg KmhhbmRsZSkNCiAJc3RydWN0IGNoYWluX2hlYWQgKmMgPSBsaXN0X2VudHJ5 KCgqaGFuZGxlKS0+Y2hhaW5zLm5leHQsDQogCQkJCQkgIHN0cnVjdCBjaGFp bl9oZWFkLCBsaXN0KTsNCiANCi0JaXB0Y19mbiA9IFRDX0ZJUlNUX0NIQUlO Ow0KLQ0KLQ0KIAlpZiAobGlzdF9lbXB0eSgmKCpoYW5kbGUpLT5jaGFpbnMp KSB7DQogCQlERUJVR1AoIjogbm8gY2hhaW5zXG4iKTsNCisJCVRDX0VSUihF Tk9FTlQpOw0KIAkJcmV0dXJuIE5VTEw7DQogCX0NCiANCkBAIC05ODMsOCAr OTk1LDYgQEAgVENfTkVYVF9DSEFJTihUQ19IQU5ETEVfVCAqaGFuZGxlKQ0K IHsNCiAJc3RydWN0IGNoYWluX2hlYWQgKmMgPSAoKmhhbmRsZSktPmNoYWlu X2l0ZXJhdG9yX2N1cjsNCiANCi0JaXB0Y19mbiA9IFRDX05FWFRfQ0hBSU47 DQotDQogCWlmICghYykgew0KIAkJREVCVUdQKCI6IG5vIG1vcmUgY2hhaW5z XG4iKTsNCiAJCXJldHVybiBOVUxMOw0KQEAgLTEwMDMsMTMgKzEwMTMsMTEg QEAgVENfRklSU1RfUlVMRShjb25zdCBjaGFyICpjaGFpbiwgVENfSEFORA0K IAlzdHJ1Y3QgY2hhaW5faGVhZCAqYzsNCiAJc3RydWN0IHJ1bGVfaGVhZCAq cjsNCiANCi0JaXB0Y19mbiA9IFRDX0ZJUlNUX1JVTEU7DQotDQogCURFQlVH UCgiZmlyc3QgcnVsZSglcyk6ICIsIGNoYWluKTsNCiANCiAJYyA9IGlwdGNj X2ZpbmRfbGFiZWwoY2hhaW4sICpoYW5kbGUpOw0KIAlpZiAoIWMpIHsNCi0J CWVycm5vID0gRU5PRU5UOw0KKwkJVENfRVJSKEVOT0VOVCk7DQogCQlyZXR1 cm4gTlVMTDsNCiAJfQ0KIA0KQEAgLTEwMzIsNyArMTA0MCw2IEBAIFRDX05F WFRfUlVMRShjb25zdCBTVFJVQ1RfRU5UUlkgKnByZXYsIFQNCiB7DQogCXN0 cnVjdCBydWxlX2hlYWQgKnI7DQogDQotCWlwdGNfZm4gPSBUQ19ORVhUX1JV TEU7DQogCURFQlVHUCgicnVsZV9pdGVyYXRvcl9jdXI9JXAuLi4iLCAoKmhh bmRsZSktPnJ1bGVfaXRlcmF0b3JfY3VyKTsNCiANCiAJaWYgKCEoKmhhbmRs ZSktPnJ1bGVfaXRlcmF0b3JfY3VyKSB7DQpAQCAtMTA0Myw4ICsxMDUwLDYg QEAgVENfTkVYVF9SVUxFKGNvbnN0IFNUUlVDVF9FTlRSWSAqcHJldiwgVA0K IAlyID0gbGlzdF9lbnRyeSgoKmhhbmRsZSktPnJ1bGVfaXRlcmF0b3JfY3Vy LT5saXN0Lm5leHQsIA0KIAkJCXN0cnVjdCBydWxlX2hlYWQsIGxpc3QpOw0K IA0KLQlpcHRjX2ZuID0gVENfTkVYVF9SVUxFOw0KLQ0KIAlERUJVR1BfQygi bmV4dD0lcCwgaGVhZD0lcC4uLiIsICZyLT5saXN0LCANCiAJCSYoKmhhbmRs ZSktPnJ1bGVfaXRlcmF0b3JfY3VyLT5jaGFpbi0+cnVsZXMpOw0KIA0KQEAg LTEwNjYsMTIgKzEwNzEsMTEgQEAgdW5zaWduZWQgaW50DQogVENfTlVNX1JV TEVTKGNvbnN0IGNoYXIgKmNoYWluLCBUQ19IQU5ETEVfVCAqaGFuZGxlKQ0K IHsNCiAJc3RydWN0IGNoYWluX2hlYWQgKmM7DQotCWlwdGNfZm4gPSBUQ19O VU1fUlVMRVM7DQogCUNIRUNLKCpoYW5kbGUpOw0KIA0KIAljID0gaXB0Y2Nf ZmluZF9sYWJlbChjaGFpbiwgKmhhbmRsZSk7DQogCWlmICghYykgew0KLQkJ ZXJybm8gPSBFTk9FTlQ7DQorCQlUQ19FUlIoRU5PRU5UKTsNCiAJCXJldHVy biAodW5zaWduZWQgaW50KS0xOw0KIAl9DQogCQ0KQEAgLTEwODUsMTMgKzEw ODksMTEgQEAgY29uc3QgU1RSVUNUX0VOVFJZICpUQ19HRVRfUlVMRShjb25z dCBjaA0KIAlzdHJ1Y3QgY2hhaW5faGVhZCAqYzsNCiAJc3RydWN0IHJ1bGVf aGVhZCAqcjsNCiAJDQotCWlwdGNfZm4gPSBUQ19HRVRfUlVMRTsNCi0NCiAJ Q0hFQ0soKmhhbmRsZSk7DQogDQogCWMgPSBpcHRjY19maW5kX2xhYmVsKGNo YWluLCAqaGFuZGxlKTsNCiAJaWYgKCFjKSB7DQotCQllcnJubyA9IEVOT0VO VDsNCisJCVRDX0VSUihFTk9FTlQpOw0KIAkJcmV0dXJuIE5VTEw7DQogCX0N CiANCkBAIC0xMTM0LDggKzExMzYsNiBAQCBjb25zdCBjaGFyICpUQ19HRVRf VEFSR0VUKGNvbnN0IFNUUlVDVF9FDQogCVNUUlVDVF9FTlRSWSAqZSA9IChT VFJVQ1RfRU5UUlkgKiljZTsNCiAJc3RydWN0IHJ1bGVfaGVhZCAqciA9IGNv bnRhaW5lcl9vZihlLCBzdHJ1Y3QgcnVsZV9oZWFkLCBlbnRyeVswXSk7DQog DQotCWlwdGNfZm4gPSBUQ19HRVRfVEFSR0VUOw0KLQ0KIAlzd2l0Y2goci0+ dHlwZSkgew0KIAkJaW50IHNwb3M7DQogCQljYXNlIElQVENDX1JfRkFMTFRI Uk9VR0g6DQpAQCAtMTE2MiwxMyArMTE2Miw5IEBAIFRDX0JVSUxUSU4oY29u c3QgY2hhciAqY2hhaW4sIGNvbnN0IFRDX0gNCiB7DQogCXN0cnVjdCBjaGFp bl9oZWFkICpjOw0KIAkNCi0JaXB0Y19mbiA9IFRDX0JVSUxUSU47DQotDQog CWMgPSBpcHRjY19maW5kX2xhYmVsKGNoYWluLCBoYW5kbGUpOw0KLQlpZiAo IWMpIHsNCi0JCWVycm5vID0gRU5PRU5UOw0KKwlpZiAoIWMpDQogCQlyZXR1 cm4gMDsNCi0JfQ0KIA0KIAlyZXR1cm4gaXB0Y2NfaXNfYnVpbHRpbihjKTsN CiB9DQpAQCAtMTE4MSwxMyArMTE3NywxMSBAQCBUQ19HRVRfUE9MSUNZKGNv bnN0IGNoYXIgKmNoYWluLA0KIHsNCiAJc3RydWN0IGNoYWluX2hlYWQgKmM7 DQogDQotCWlwdGNfZm4gPSBUQ19HRVRfUE9MSUNZOw0KLQ0KIAlERUJVR1Ao ImNhbGxlZCBmb3IgY2hhaW4gJXNcbiIsIGNoYWluKTsNCiANCiAJYyA9IGlw dGNjX2ZpbmRfbGFiZWwoY2hhaW4sICpoYW5kbGUpOw0KIAlpZiAoIWMpIHsN Ci0JCWVycm5vID0gRU5PRU5UOw0KKwkJVENfRVJSKEVOT0VOVCk7DQogCQly ZXR1cm4gTlVMTDsNCiAJfQ0KIA0KQEAgLTEyMDksNyArMTIwMyw3IEBAIGlw dGNjX3N0YW5kYXJkX21hcChzdHJ1Y3QgcnVsZV9oZWFkICpyLCANCiANCiAJ aWYgKHQtPnRhcmdldC51LnRhcmdldF9zaXplDQogCSAgICAhPSBBTElHTihz aXplb2YoU1RSVUNUX1NUQU5EQVJEX1RBUkdFVCkpKSB7DQotCQllcnJubyA9 IEVJTlZBTDsNCisJCVRDX0VSUihFSU5WQUwpOw0KIAkJcmV0dXJuIDA7DQog CX0NCiAJLyogbWVtc2V0IGZvciBtZW1jbXAgY29udmVuaWVuY2Ugb24gZGVs ZXRlL3JlcGxhY2UgKi8NCkBAIC0xMjQ1LDcgKzEyMzksNyBAQCBpcHRjY19t YXBfdGFyZ2V0KGNvbnN0IFRDX0hBTkRMRV9UIGhhbmRsDQogCQlyZXR1cm4g aXB0Y2Nfc3RhbmRhcmRfbWFwKHIsIFJFVFVSTik7DQogCWVsc2UgaWYgKFRD X0JVSUxUSU4odC0+dS51c2VyLm5hbWUsIGhhbmRsZSkpIHsNCiAJCS8qIENh bid0IGp1bXAgdG8gYnVpbHRpbnMuICovDQotCQllcnJubyA9IEVJTlZBTDsN CisJCVRDX0VSUihFSU5WQUwpOw0KIAkJcmV0dXJuIDA7DQogCX0gZWxzZSB7 DQogCQkvKiBNYXliZSBpdCdzIGFuIGV4aXN0aW5nIGNoYWluIG5hbWUuICov DQpAQCAtMTI4NCwxNyArMTI3OCwxNSBAQCBUQ19JTlNFUlRfRU5UUlkoY29u c3QgSVBUX0NIQUlOTEFCRUwgY2hhDQogCXN0cnVjdCBydWxlX2hlYWQgKnI7 DQogCXN0cnVjdCBsaXN0X2hlYWQgKnByZXY7DQogDQotCWlwdGNfZm4gPSBU Q19JTlNFUlRfRU5UUlk7DQotDQogCWlmICghKGMgPSBpcHRjY19maW5kX2xh YmVsKGNoYWluLCAqaGFuZGxlKSkpIHsNCi0JCWVycm5vID0gRU5PRU5UOw0K KwkJVENfRVJSKEVOT0VOVCk7DQogCQlyZXR1cm4gMDsNCiAJfQ0KIA0KIAkv KiBmaXJzdCBydWxlbnVtIGluZGV4ID0gMA0KIAkgICBmaXJzdCBjLT5udW1f cnVsZXMgaW5kZXggPSAxICovDQogCWlmIChydWxlbnVtID4gYy0+bnVtX3J1 bGVzKSB7DQotCQllcnJubyA9IEUyQklHOw0KKwkJVENfRVJSKEUyQklHKTsN CiAJCXJldHVybiAwOw0KIAl9DQogDQpAQCAtMTMxMiw3ICsxMzA0LDcgQEAg VENfSU5TRVJUX0VOVFJZKGNvbnN0IElQVF9DSEFJTkxBQkVMIGNoYQ0KIAl9 DQogDQogCWlmICghKHIgPSBpcHRjY19hbGxvY19ydWxlKGMsIGUtPm5leHRf b2Zmc2V0KSkpIHsNCi0JCWVycm5vID0gRU5PTUVNOw0KKwkJVENfRVJSKEVO T01FTSk7DQogCQlyZXR1cm4gMDsNCiAJfQ0KIA0KQEAgLTEzNDIsMTUgKzEz MzQsMTMgQEAgVENfUkVQTEFDRV9FTlRSWShjb25zdCBJUFRfQ0hBSU5MQUJF TCBjaA0KIAlzdHJ1Y3QgY2hhaW5faGVhZCAqYzsNCiAJc3RydWN0IHJ1bGVf aGVhZCAqciwgKm9sZDsNCiANCi0JaXB0Y19mbiA9IFRDX1JFUExBQ0VfRU5U Ulk7DQotDQogCWlmICghKGMgPSBpcHRjY19maW5kX2xhYmVsKGNoYWluLCAq aGFuZGxlKSkpIHsNCi0JCWVycm5vID0gRU5PRU5UOw0KKwkJVENfRVJSKEVO T0VOVCk7DQogCQlyZXR1cm4gMDsNCiAJfQ0KIA0KIAlpZiAocnVsZW51bSA+ PSBjLT5udW1fcnVsZXMpIHsNCi0JCWVycm5vID0gRTJCSUc7DQorCQlUQ19F UlIoRTJCSUcpOw0KIAkJcmV0dXJuIDA7DQogCX0NCiANCkBAIC0xMzYyLDcg KzEzNTIsNyBAQCBUQ19SRVBMQUNFX0VOVFJZKGNvbnN0IElQVF9DSEFJTkxB QkVMIGNoDQogCX0NCiANCiAJaWYgKCEociA9IGlwdGNjX2FsbG9jX3J1bGUo YywgZS0+bmV4dF9vZmZzZXQpKSkgew0KLQkJZXJybm8gPSBFTk9NRU07DQor CQlUQ19FUlIoRU5PTUVNKTsNCiAJCXJldHVybiAwOw0KIAl9DQogDQpAQCAt MTM5MiwxNiArMTM4MiwxNSBAQCBUQ19BUFBFTkRfRU5UUlkoY29uc3QgSVBU X0NIQUlOTEFCRUwgY2hhDQogCXN0cnVjdCBjaGFpbl9oZWFkICpjOw0KIAlz dHJ1Y3QgcnVsZV9oZWFkICpyOw0KIA0KLQlpcHRjX2ZuID0gVENfQVBQRU5E X0VOVFJZOw0KIAlpZiAoIShjID0gaXB0Y2NfZmluZF9sYWJlbChjaGFpbiwg KmhhbmRsZSkpKSB7DQogCQlERUJVR1AoInVuYWJsZSB0byBmaW5kIGNoYWlu IGAlcydcbiIsIGNoYWluKTsNCi0JCWVycm5vID0gRU5PRU5UOw0KKwkJVENf RVJSKEVOT0VOVCk7DQogCQlyZXR1cm4gMDsNCiAJfQ0KIA0KIAlpZiAoIShy ID0gaXB0Y2NfYWxsb2NfcnVsZShjLCBlLT5uZXh0X29mZnNldCkpKSB7DQog CQlERUJVR1AoInVuYWJsZSB0byBhbGxvY2F0ZSBydWxlIGZvciBjaGFpbiBg JXMnXG4iLCBjaGFpbik7DQotCQllcnJubyA9IEVOT01FTTsNCisJCVRDX0VS UihFTk9NRU0pOw0KIAkJcmV0dXJuIDA7DQogCX0NCiANCkBAIC0xNTAwLDE2 ICsxNDg5LDE1IEBAIFRDX0RFTEVURV9FTlRSWShjb25zdCBJUFRfQ0hBSU5M QUJFTCBjaGENCiAJc3RydWN0IGNoYWluX2hlYWQgKmM7DQogCXN0cnVjdCBy dWxlX2hlYWQgKnIsICppOw0KIA0KLQlpcHRjX2ZuID0gVENfREVMRVRFX0VO VFJZOw0KIAlpZiAoIShjID0gaXB0Y2NfZmluZF9sYWJlbChjaGFpbiwgKmhh bmRsZSkpKSB7DQotCQllcnJubyA9IEVOT0VOVDsNCisJCVRDX0VSUihFTk9F TlQpOw0KIAkJcmV0dXJuIDA7DQogCX0NCiANCiAJLyogQ3JlYXRlIGEgcnVs ZV9oZWFkIGZyb20gb3JpZ2Z3LiAqLw0KIAlyID0gaXB0Y2NfYWxsb2NfcnVs ZShjLCBvcmlnZnctPm5leHRfb2Zmc2V0KTsNCiAJaWYgKCFyKSB7DQotCQll cnJubyA9IEVOT01FTTsNCisJCVRDX0VSUihFTk9NRU0pOw0KIAkJcmV0dXJu IDA7DQogCX0NCiANCkBAIC0xNTU3LDcgKzE1NDUsNyBAQCBUQ19ERUxFVEVf RU5UUlkoY29uc3QgSVBUX0NIQUlOTEFCRUwgY2hhDQogCX0NCiANCiAJZnJl ZShyKTsNCi0JZXJybm8gPSBFTk9FTlQ7DQorCVRDX0VSUihFSU5WQUwpOw0K IAlyZXR1cm4gMDsNCiB9DQogDQpAQCAtMTU3MSwxNSArMTU1OSwxMyBAQCBU Q19ERUxFVEVfTlVNX0VOVFJZKGNvbnN0IElQVF9DSEFJTkxBQkVMDQogCXN0 cnVjdCBjaGFpbl9oZWFkICpjOw0KIAlzdHJ1Y3QgcnVsZV9oZWFkICpyOw0K IA0KLQlpcHRjX2ZuID0gVENfREVMRVRFX05VTV9FTlRSWTsNCi0NCiAJaWYg KCEoYyA9IGlwdGNjX2ZpbmRfbGFiZWwoY2hhaW4sICpoYW5kbGUpKSkgew0K LQkJZXJybm8gPSBFTk9FTlQ7DQorCQlUQ19FUlIoRU5PRU5UKTsNCiAJCXJl dHVybiAwOw0KIAl9DQogDQogCWlmIChydWxlbnVtID49IGMtPm51bV9ydWxl cykgew0KLQkJZXJybm8gPSBFMkJJRzsNCisJCVRDX0VSUihFMkJJRyk7DQog CQlyZXR1cm4gMDsNCiAJfQ0KIA0KQEAgLTE2MTQsOCArMTYwMCw3IEBAIFRD X0NIRUNLX1BBQ0tFVChjb25zdCBJUFRfQ0hBSU5MQUJFTCBjaGENCiAJCVNU UlVDVF9FTlRSWSAqZW50cnksDQogCQlUQ19IQU5ETEVfVCAqaGFuZGxlKQ0K IHsNCi0JaXB0Y19mbiA9IFRDX0NIRUNLX1BBQ0tFVDsNCi0JZXJybm8gPSBF Tk9TWVM7DQorCVRDX0VSUihFTk9TWVMpOw0KIAlyZXR1cm4gTlVMTDsNCiB9 DQogDQpAQCAtMTYyNiw5ICsxNjExLDggQEAgVENfRkxVU0hfRU5UUklFUyhj b25zdCBJUFRfQ0hBSU5MQUJFTCBjaA0KIAlzdHJ1Y3QgY2hhaW5faGVhZCAq YzsNCiAJc3RydWN0IHJ1bGVfaGVhZCAqciwgKnRtcDsNCiANCi0JaXB0Y19m biA9IFRDX0ZMVVNIX0VOVFJJRVM7DQogCWlmICghKGMgPSBpcHRjY19maW5k X2xhYmVsKGNoYWluLCAqaGFuZGxlKSkpIHsNCi0JCWVycm5vID0gRU5PRU5U Ow0KKwkJVENfRVJSKEVOT0VOVCk7DQogCQlyZXR1cm4gMDsNCiAJfQ0KIA0K QEAgLTE2NTAsOSArMTYzNCw4IEBAIFRDX1pFUk9fRU5UUklFUyhjb25zdCBJ UFRfQ0hBSU5MQUJFTCBjaGENCiAJc3RydWN0IGNoYWluX2hlYWQgKmM7DQog CXN0cnVjdCBydWxlX2hlYWQgKnI7DQogDQotCWlwdGNfZm4gPSBUQ19aRVJP X0VOVFJJRVM7DQogCWlmICghKGMgPSBpcHRjY19maW5kX2xhYmVsKGNoYWlu LCAqaGFuZGxlKSkpIHsNCi0JCWVycm5vID0gRU5PRU5UOw0KKwkJVENfRVJS KEVOT0VOVCk7DQogCQlyZXR1cm4gMDsNCiAJfQ0KIA0KQEAgLTE2NzcsMTYg KzE2NjAsMTUgQEAgVENfUkVBRF9DT1VOVEVSKGNvbnN0IElQVF9DSEFJTkxB QkVMIGNoYQ0KIAlzdHJ1Y3QgY2hhaW5faGVhZCAqYzsNCiAJc3RydWN0IHJ1 bGVfaGVhZCAqcjsNCiANCi0JaXB0Y19mbiA9IFRDX1JFQURfQ09VTlRFUjsN CiAJQ0hFQ0soKmhhbmRsZSk7DQogDQogCWlmICghKGMgPSBpcHRjY19maW5k X2xhYmVsKGNoYWluLCAqaGFuZGxlKSkpIHsNCi0JCWVycm5vID0gRU5PRU5U Ow0KKwkJVENfRVJSKEVOT0VOVCk7DQogCQlyZXR1cm4gTlVMTDsNCiAJfQ0K IA0KIAlpZiAoIShyID0gaXB0Y2NfZ2V0X3J1bGVfbnVtKGMsIHJ1bGVudW0p KSkgew0KLQkJZXJybm8gPSBFMkJJRzsNCisJCVRDX0VSUihFMkJJRyk7DQog CQlyZXR1cm4gTlVMTDsNCiAJfQ0KIA0KQEAgLTE3MDEsMTYgKzE2ODMsMTUg QEAgVENfWkVST19DT1VOVEVSKGNvbnN0IElQVF9DSEFJTkxBQkVMIGNoYQ0K IAlzdHJ1Y3QgY2hhaW5faGVhZCAqYzsNCiAJc3RydWN0IHJ1bGVfaGVhZCAq cjsNCiAJDQotCWlwdGNfZm4gPSBUQ19aRVJPX0NPVU5URVI7DQogCUNIRUNL KCpoYW5kbGUpOw0KIA0KIAlpZiAoIShjID0gaXB0Y2NfZmluZF9sYWJlbChj aGFpbiwgKmhhbmRsZSkpKSB7DQotCQllcnJubyA9IEVOT0VOVDsNCisJCVRD X0VSUihFTk9FTlQpOw0KIAkJcmV0dXJuIDA7DQogCX0NCiANCiAJaWYgKCEo ciA9IGlwdGNjX2dldF9ydWxlX251bShjLCBydWxlbnVtKSkpIHsNCi0JCWVy cm5vID0gRTJCSUc7DQorCQlUQ19FUlIoRTJCSUcpOw0KIAkJcmV0dXJuIDA7 DQogCX0NCiANCkBAIC0xNzMyLDE2ICsxNzEzLDE1IEBAIFRDX1NFVF9DT1VO VEVSKGNvbnN0IElQVF9DSEFJTkxBQkVMIGNoYWkNCiAJc3RydWN0IHJ1bGVf aGVhZCAqcjsNCiAJU1RSVUNUX0VOVFJZICplOw0KIA0KLQlpcHRjX2ZuID0g VENfU0VUX0NPVU5URVI7DQogCUNIRUNLKCpoYW5kbGUpOw0KIA0KIAlpZiAo IShjID0gaXB0Y2NfZmluZF9sYWJlbChjaGFpbiwgKmhhbmRsZSkpKSB7DQot CQllcnJubyA9IEVOT0VOVDsNCisJCVRDX0VSUihFTk9FTlQpOw0KIAkJcmV0 dXJuIDA7DQogCX0NCiANCiAJaWYgKCEociA9IGlwdGNjX2dldF9ydWxlX251 bShjLCBydWxlbnVtKSkpIHsNCi0JCWVycm5vID0gRTJCSUc7DQorCQlUQ19F UlIoRTJCSUcpOw0KIAkJcmV0dXJuIDA7DQogCX0NCiANCkBAIC0xNzYzLDgg KzE3NDMsNiBAQCBUQ19DUkVBVEVfQ0hBSU4oY29uc3QgSVBUX0NIQUlOTEFC RUwgY2hhDQogew0KIAlzdGF0aWMgc3RydWN0IGNoYWluX2hlYWQgKmM7DQog DQotCWlwdGNfZm4gPSBUQ19DUkVBVEVfQ0hBSU47DQotDQogCS8qIGZpbmRf bGFiZWwgZG9lc24ndCBjb3ZlciBidWlsdC1pbiB0YXJnZXRzOiBEUk9QLCBB Q0NFUFQsDQogICAgICAgICAgICBRVUVVRSwgUkVUVVJOLiAqLw0KIAlpZiAo aXB0Y2NfZmluZF9sYWJlbChjaGFpbiwgKmhhbmRsZSkNCkBAIC0xNzczLDIw ICsxNzUxLDIwIEBAIFRDX0NSRUFURV9DSEFJTihjb25zdCBJUFRfQ0hBSU5M QUJFTCBjaGENCiAJICAgIHx8IHN0cmNtcChjaGFpbiwgTEFCRUxfUVVFVUUp ID09IDANCiAJICAgIHx8IHN0cmNtcChjaGFpbiwgTEFCRUxfUkVUVVJOKSA9 PSAwKSB7DQogCQlERUJVR1AoIkNoYWluIGAlcycgYWxyZWFkeSBleGlzdHNc biIsIGNoYWluKTsNCi0JCWVycm5vID0gRUVYSVNUOw0KKwkJVENfRVJSKEVF WElTVCk7DQogCQlyZXR1cm4gMDsNCiAJfQ0KIA0KIAlpZiAoc3RybGVuKGNo YWluKSsxID4gc2l6ZW9mKElQVF9DSEFJTkxBQkVMKSkgew0KIAkJREVCVUdQ KCJDaGFpbiBuYW1lIGAlcycgdG9vIGxvbmdcbiIsIGNoYWluKTsNCi0JCWVy cm5vID0gRUlOVkFMOw0KKwkJVENfRVJSKEUyQklHKTsNCiAJCXJldHVybiAw Ow0KIAl9DQogDQogCWMgPSBpcHRjY19hbGxvY19jaGFpbl9oZWFkKGNoYWlu LCAwKTsNCiAJaWYgKCFjKSB7DQogCQlERUJVR1AoIkNhbm5vdCBhbGxvY2F0 ZSBtZW1vcnkgZm9yIGNoYWluIGAlcydcbiIsIGNoYWluKTsNCi0JCWVycm5v ID0gRU5PTUVNOw0KKwkJVENfRVJSKEVOT01FTSk7DQogCQlyZXR1cm4gMDsN CiANCiAJfQ0KQEAgLTE4MDYsOSArMTc4NCw4IEBAIFRDX0dFVF9SRUZFUkVO Q0VTKHVuc2lnbmVkIGludCAqcmVmLCBjb24NCiB7DQogCXN0cnVjdCBjaGFp bl9oZWFkICpjOw0KIA0KLQlpcHRjX2ZuID0gVENfR0VUX1JFRkVSRU5DRVM7 DQogCWlmICghKGMgPSBpcHRjY19maW5kX2xhYmVsKGNoYWluLCAqaGFuZGxl KSkpIHsNCi0JCWVycm5vID0gRU5PRU5UOw0KKwkJVENfRVJSKEVOT0VOVCk7 DQogCQlyZXR1cm4gMDsNCiAJfQ0KIA0KQEAgLTE4MjQsMzQgKzE4MDEsMzMg QEAgVENfREVMRVRFX0NIQUlOKGNvbnN0IElQVF9DSEFJTkxBQkVMIGNoYQ0K IAl1bnNpZ25lZCBpbnQgcmVmZXJlbmNlczsNCiAJc3RydWN0IGNoYWluX2hl YWQgKmM7DQogDQotCWlwdGNfZm4gPSBUQ19ERUxFVEVfQ0hBSU47DQotDQog CWlmICghKGMgPSBpcHRjY19maW5kX2xhYmVsKGNoYWluLCAqaGFuZGxlKSkp IHsNCiAJCURFQlVHUCgiY2Fubm90IGZpbmQgY2hhaW4gYCVzJ1xuIiwgY2hh aW4pOw0KLQkJZXJybm8gPSBFTk9FTlQ7DQorCQlUQ19FUlIoRU5PRU5UKTsN CiAJCXJldHVybiAwOw0KIAl9DQogDQogCWlmIChUQ19CVUlMVElOKGNoYWlu LCAqaGFuZGxlKSkgew0KIAkJREVCVUdQKCJjYW5ub3QgcmVtb3ZlIGJ1aWx0 aW4gY2hhaW4gYCVzJ1xuIiwgY2hhaW4pOw0KLQkJZXJybm8gPSBFSU5WQUw7 DQorCQlUQ19FUlIoRUlOVkFMKTsNCiAJCXJldHVybiAwOw0KIAl9DQogDQog CWlmICghVENfR0VUX1JFRkVSRU5DRVMoJnJlZmVyZW5jZXMsIGNoYWluLCBo YW5kbGUpKSB7DQogCQlERUJVR1AoImNhbm5vdCBnZXQgcmVmZXJlbmNlcyBv biBjaGFpbiBgJXMnXG4iLCBjaGFpbik7DQorCQlUQ19FUlIoRU5PU1lTKTsN CiAJCXJldHVybiAwOw0KIAl9DQogDQogCWlmIChyZWZlcmVuY2VzID4gMCkg ew0KIAkJREVCVUdQKCJjaGFpbiBgJXMnIHN0aWxsIGhhcyByZWZlcmVuY2Vz XG4iLCBjaGFpbik7DQotCQllcnJubyA9IEVNTElOSzsNCisJCVRDX0VSUihF TUxJTkspOw0KIAkJcmV0dXJuIDA7DQogCX0NCiANCiAJaWYgKGMtPm51bV9y dWxlcykgew0KIAkJREVCVUdQKCJjaGFpbiBgJXMnIGlzIG5vdCBlbXB0eVxu IiwgY2hhaW4pOw0KLQkJZXJybm8gPSBFTk9URU1QVFk7DQorCQlUQ19FUlIo RU5PVEVNUFRZKTsNCiAJCXJldHVybiAwOw0KIAl9DQogDQpAQCAtMTg3Niw3 ICsxODUyLDE3IEBAIGludCBUQ19SRU5BTUVfQ0hBSU4oY29uc3QgSVBUX0NI QUlOTEFCRUwNCiAJCSAgICBUQ19IQU5ETEVfVCAqaGFuZGxlKQ0KIHsNCiAJ c3RydWN0IGNoYWluX2hlYWQgKmM7DQotCWlwdGNfZm4gPSBUQ19SRU5BTUVf Q0hBSU47DQorDQorCWlmICghKGMgPSBpcHRjY19maW5kX2xhYmVsKG9sZG5h bWUsICpoYW5kbGUpKQ0KKwkgICAgfHwgVENfQlVJTFRJTihvbGRuYW1lLCAq aGFuZGxlKSkgew0KKwkJVENfRVJSKEVOT0VOVCk7DQorCQlyZXR1cm4gMDsN CisJfQ0KKw0KKwlpZiAoc3RybGVuKG5ld25hbWUpKzEgPiBzaXplb2YoSVBU X0NIQUlOTEFCRUwpKSB7DQorCQlUQ19FUlIoRTJCSUcpOw0KKwkJcmV0dXJu IDA7DQorCX0NCiANCiAJLyogZmluZF9sYWJlbCBkb2Vzbid0IGNvdmVyIGJ1 aWx0LWluIHRhcmdldHM6IERST1AsIEFDQ0VQVCwNCiAgICAgICAgICAgIFFV RVVFLCBSRVRVUk4uICovDQpAQCAtMTg4NSwxOCArMTg3MSw3IEBAIGludCBU Q19SRU5BTUVfQ0hBSU4oY29uc3QgSVBUX0NIQUlOTEFCRUwNCiAJICAgIHx8 IHN0cmNtcChuZXduYW1lLCBMQUJFTF9BQ0NFUFQpID09IDANCiAJICAgIHx8 IHN0cmNtcChuZXduYW1lLCBMQUJFTF9RVUVVRSkgPT0gMA0KIAkgICAgfHwg c3RyY21wKG5ld25hbWUsIExBQkVMX1JFVFVSTikgPT0gMCkgew0KLQkJZXJy bm8gPSBFRVhJU1Q7DQotCQlyZXR1cm4gMDsNCi0JfQ0KLQ0KLQlpZiAoIShj ID0gaXB0Y2NfZmluZF9sYWJlbChvbGRuYW1lLCAqaGFuZGxlKSkNCi0JICAg IHx8IFRDX0JVSUxUSU4ob2xkbmFtZSwgKmhhbmRsZSkpIHsNCi0JCWVycm5v ID0gRU5PRU5UOw0KLQkJcmV0dXJuIDA7DQotCX0NCi0NCi0JaWYgKHN0cmxl bihuZXduYW1lKSsxID4gc2l6ZW9mKElQVF9DSEFJTkxBQkVMKSkgew0KLQkJ ZXJybm8gPSBFSU5WQUw7DQorCQlUQ19FUlIoRUVYSVNUKTsNCiAJCXJldHVy biAwOw0KIAl9DQogDQpAQCAtMTkxNiwxNyArMTg5MSwxNSBAQCBUQ19TRVRf UE9MSUNZKGNvbnN0IElQVF9DSEFJTkxBQkVMIGNoYWluDQogew0KIAlzdHJ1 Y3QgY2hhaW5faGVhZCAqYzsNCiANCi0JaXB0Y19mbiA9IFRDX1NFVF9QT0xJ Q1k7DQotDQogCWlmICghKGMgPSBpcHRjY19maW5kX2xhYmVsKGNoYWluLCAq aGFuZGxlKSkpIHsNCiAJCURFQlVHUCgiY2Fubm90IGZpbmQgY2hhaW4gYCVz J1xuIiwgY2hhaW4pOw0KLQkJZXJybm8gPSBFTk9FTlQ7DQorCQlUQ19FUlIo RU5PRU5UKTsNCiAJCXJldHVybiAwOw0KIAl9DQogDQogCWlmICghaXB0Y2Nf aXNfYnVpbHRpbihjKSkgew0KIAkJREVCVUdQKCJjYW5ub3Qgc2V0IHBvbGlj eSBvZiB1c2VyZGVmaW5lZGNoYWluIGAlcydcbiIsIGNoYWluKTsNCi0JCWVy cm5vID0gRU5PRU5UOw0KKwkJVENfRVJSKEVOT0VOVCk7DQogCQlyZXR1cm4g MDsNCiAJfQ0KIA0KQEAgLTE5MzUsNyArMTkwOCw3IEBAIFRDX1NFVF9QT0xJ Q1koY29uc3QgSVBUX0NIQUlOTEFCRUwgY2hhaW4NCiAJZWxzZSBpZiAoc3Ry Y21wKHBvbGljeSwgTEFCRUxfRFJPUCkgPT0gMCkNCiAJCWMtPnZlcmRpY3Qg PSAtTkZfRFJPUCAtIDE7DQogCWVsc2Ugew0KLQkJZXJybm8gPSBFSU5WQUw7 DQorCQlUQ19FUlIoRUlOVkFMKTsNCiAJCXJldHVybiAwOw0KIAl9DQogDQpA QCAtMjAzNSw3ICsyMDA4LDYgQEAgVENfQ09NTUlUKFRDX0hBTkRMRV9UICpo YW5kbGUpDQogCWludCBuZXdfbnVtYmVyOw0KIAl1bnNpZ25lZCBpbnQgbmV3 X3NpemU7DQogDQotCWlwdGNfZm4gPSBUQ19DT01NSVQ7DQogCUNIRUNLKCpo YW5kbGUpOw0KIA0KIAkvKiBEb24ndCBjb21taXQgaWYgbm90aGluZyBjaGFu Z2VkLiAqLw0KQEAgLTIwNDQsMTMgKzIwMTYsMTMgQEAgVENfQ09NTUlUKFRD X0hBTkRMRV9UICpoYW5kbGUpDQogDQogCW5ld19udW1iZXIgPSBpcHRjY19j b21waWxlX3RhYmxlX3ByZXAoKmhhbmRsZSwgJm5ld19zaXplKTsNCiAJaWYg KG5ld19udW1iZXIgPCAwKSB7DQotCQllcnJubyA9IEVOT01FTTsNCisJCVRD X0VSUihFTk9NRU0pOw0KIAkJZ290byBvdXRfemVybzsNCiAJfQ0KIA0KIAly ZXBsID0gbWFsbG9jKHNpemVvZigqcmVwbCkgKyBuZXdfc2l6ZSk7DQogCWlm ICghcmVwbCkgew0KLQkJZXJybm8gPSBFTk9NRU07DQorCQlUQ19FUlIoRU5P TUVNKTsNCiAJCWdvdG8gb3V0X3plcm87DQogCX0NCiAJbWVtc2V0KHJlcGws IDAsIHNpemVvZigqcmVwbCkgKyBuZXdfc2l6ZSk7DQpAQCAtMjA2NiwxMyAr MjAzOCwxMyBAQCBUQ19DT01NSVQoVENfSEFORExFX1QgKmhhbmRsZSkNCiAJ cmVwbC0+Y291bnRlcnMgPSBtYWxsb2Moc2l6ZW9mKFNUUlVDVF9DT1VOVEVS UykNCiAJCQkJKiAoKmhhbmRsZSktPmluZm8ubnVtX2VudHJpZXMpOw0KIAlp ZiAoIXJlcGwtPmNvdW50ZXJzKSB7DQotCQllcnJubyA9IEVOT01FTTsNCisJ CVRDX0VSUihFTk9NRU0pOw0KIAkJZ290byBvdXRfZnJlZV9yZXBsOw0KIAl9 DQogCS8qIFRoZXNlIGFyZSB0aGUgY291bnRlcnMgd2UncmUgZ29pbmcgdG8g cHV0IGJhY2ssIGxhdGVyLiAqLw0KIAluZXdjb3VudGVycyA9IG1hbGxvYyhj b3VudGVybGVuKTsNCiAJaWYgKCFuZXdjb3VudGVycykgew0KLQkJZXJybm8g PSBFTk9NRU07DQorCQlUQ19FUlIoRU5PTUVNKTsNCiAJCWdvdG8gb3V0X2Zy ZWVfcmVwbF9jb3VudGVyczsNCiAJfQ0KIAltZW1zZXQobmV3Y291bnRlcnMs IDAsIGNvdW50ZXJsZW4pOw0KQEAgLTIwODksNyArMjA2MSw3IEBAIFRDX0NP TU1JVChUQ19IQU5ETEVfVCAqaGFuZGxlKQ0KIA0KIAlyZXQgPSBpcHRjY19j b21waWxlX3RhYmxlKCpoYW5kbGUsIHJlcGwpOw0KIAlpZiAocmV0IDwgMCkg ew0KLQkJZXJybm8gPSByZXQ7DQorCQlUQ19FUlIoRUlOVkFMKTsNCiAJCWdv dG8gb3V0X2ZyZWVfbmV3Y291bnRlcnM7DQogCX0NCiANCkBAIC0yMTA3LDgg KzIwNzksMTAgQEAgVENfQ09NTUlUKFRDX0hBTkRMRV9UICpoYW5kbGUpDQog DQogCXJldCA9IHNldHNvY2tvcHQoc29ja2ZkLCBUQ19JUFBST1RPLCBTT19T RVRfUkVQTEFDRSwgcmVwbCwNCiAJCQkgc2l6ZW9mKCpyZXBsKSArIHJlcGwt PnNpemUpOw0KLQlpZiAocmV0IDwgMCkNCisJaWYgKHJldCA8IDApIHsNCisJ CVRDX0VSUihlcnJubyk7DQogCQlnb3RvIG91dF9mcmVlX25ld2NvdW50ZXJz Ow0KKwl9DQogDQogCS8qIFB1dCBjb3VudGVycyBiYWNrLiAqLw0KIAlzdHJj cHkobmV3Y291bnRlcnMtPm5hbWUsICgqaGFuZGxlKS0+aW5mby5uYW1lKTsN CkBAIC0yMTgzLDggKzIxNTcsMTAgQEAgVENfQ09NTUlUKFRDX0hBTkRMRV9U ICpoYW5kbGUpDQogDQogCXJldCA9IHNldHNvY2tvcHQoc29ja2ZkLCBUQ19J UFBST1RPLCBTT19TRVRfQUREX0NPVU5URVJTLA0KIAkJCSBuZXdjb3VudGVy cywgY291bnRlcmxlbik7DQotCWlmIChyZXQgPCAwKQ0KKwlpZiAocmV0IDwg MCkgew0KKwkJVENfRVJSKGVycm5vKTsNCiAJCWdvdG8gb3V0X2ZyZWVfbmV3 Y291bnRlcnM7DQorCX0NCiANCiAJZnJlZShyZXBsLT5jb3VudGVycyk7DQog CWZyZWUocmVwbCk7DQpAQCAtMjIxMSw1NyArMjE4Nyw5OCBAQCBUQ19HRVRf UkFXX1NPQ0tFVCgpDQogCXJldHVybiBzb2NrZmQ7DQogfQ0KIA0KK3ZvaWQN CitUQ19FUlJPUihjb25zdCBjaGFyICpmdW5jdGlvbiwgaW50IGVycm9yKQ0K K3sNCisJaWYgKHN0cmxlbihpcHRjX2VycmZuKSkNCisJCXByaW50ZigiJXM6 ICVzXG4iLCBUQ19MSUJOQU1FLCBUQ19TVFJFUlJPUigpKTsNCisJc3RybmNw eShpcHRjX2VycmZuLCBmdW5jdGlvbiwgNjMpOw0KKwlpcHRjX2Vycm5vID0g ZXJyb3I7DQorfQ0KKw0KIC8qIFRyYW5zbGF0ZXMgZXJybm8gbnVtYmVycyBp bnRvIG1vcmUgaHVtYW4tcmVhZGFibGUgZm9ybSB0aGFuIHN0cmVycm9yLiAq Lw0KIGNvbnN0IGNoYXIgKg0KLVRDX1NUUkVSUk9SKGludCBlcnIpDQorVENf U1RSRVJST1IoKQ0KIHsNCi0JdW5zaWduZWQgaW50IGk7DQorCXVuc2lnbmVk IGludCBpLCBsZW5ndGg7DQorCXN0YXRpYyBjaGFyIHN0cmJ1ZlsyNTZdOw0K Kw0KIAlzdHJ1Y3QgdGFibGVfc3RydWN0IHsNCi0JCXZvaWQgKmZuOw0KKwkJ Y29uc3QgY2hhciAqZm47DQogCQlpbnQgZXJyOw0KIAkJY29uc3QgY2hhciAq bWVzc2FnZTsNCiAJfSB0YWJsZSBbXSA9DQotCSAgeyB7IFRDX0lOSVQsIEVQ RVJNLCAiUGVybWlzc2lvbiBkZW5pZWQgKHlvdSBtdXN0IGJlIHJvb3QpIiB9 LA0KLQkgICAgeyBUQ19JTklULCBFSU5WQUwsICJNb2R1bGUgaXMgd3Jvbmcg dmVyc2lvbiIgfSwNCi0JICAgIHsgVENfSU5JVCwgRU5PRU5ULCANCi0JCSAg ICAiVGFibGUgZG9lcyBub3QgZXhpc3QgKGRvIHlvdSBuZWVkIHRvIGluc21v ZD8pIiB9LA0KLQkgICAgeyBUQ19ERUxFVEVfQ0hBSU4sIEVOT1RFTVBUWSwg IkNoYWluIGlzIG5vdCBlbXB0eSIgfSwNCi0JICAgIHsgVENfREVMRVRFX0NI QUlOLCBFSU5WQUwsICJDYW4ndCBkZWxldGUgYnVpbHQtaW4gY2hhaW4iIH0s DQotCSAgICB7IFRDX0RFTEVURV9DSEFJTiwgRU1MSU5LLA0KLQkgICAgICAi Q2FuJ3QgZGVsZXRlIGNoYWluIHdpdGggcmVmZXJlbmNlcyBsZWZ0IiB9LA0K LQkgICAgeyBUQ19DUkVBVEVfQ0hBSU4sIEVFWElTVCwgIkNoYWluIGFscmVh ZHkgZXhpc3RzIiB9LA0KLQkgICAgeyBUQ19JTlNFUlRfRU5UUlksIEUyQklH LCAiSW5kZXggb2YgaW5zZXJ0aW9uIHRvbyBiaWciIH0sDQotCSAgICB7IFRD X1JFUExBQ0VfRU5UUlksIEUyQklHLCAiSW5kZXggb2YgcmVwbGFjZW1lbnQg dG9vIGJpZyIgfSwNCi0JICAgIHsgVENfREVMRVRFX05VTV9FTlRSWSwgRTJC SUcsICJJbmRleCBvZiBkZWxldGlvbiB0b28gYmlnIiB9LA0KLQkgICAgeyBU Q19SRUFEX0NPVU5URVIsIEUyQklHLCAiSW5kZXggb2YgY291bnRlciB0b28g YmlnIiB9LA0KLQkgICAgeyBUQ19aRVJPX0NPVU5URVIsIEUyQklHLCAiSW5k ZXggb2YgY291bnRlciB0b28gYmlnIiB9LA0KLQkgICAgeyBUQ19JTlNFUlRf RU5UUlksIEVMT09QLCAiTG9vcCBmb3VuZCBpbiB0YWJsZSIgfSwNCi0JICAg IHsgVENfSU5TRVJUX0VOVFJZLCBFSU5WQUwsICJUYXJnZXQgcHJvYmxlbSIg fSwNCi0JICAgIC8qIEVJTlZBTCBmb3IgQ0hFQ0sgcHJvYmFibHkgbWVhbnMg YmFkIGludGVyZmFjZS4gKi8NCi0JICAgIHsgVENfQ0hFQ0tfUEFDS0VULCBF SU5WQUwsDQotCSAgICAgICJCYWQgYXJndW1lbnRzIChkb2VzIHRoYXQgaW50 ZXJmYWNlIGV4aXN0PykiIH0sDQotCSAgICB7IFRDX0NIRUNLX1BBQ0tFVCwg RU5PU1lTLA0KKwkgIHsgeyBRRihUQ19BUFBFTkRfRU5UUlkpLCBFTk9FTlQs ICJObyBjaGFpbiBieSB0aGF0IG5hbWUiIH0sDQorCSAgICB7IFFGKFRDX0NI RUNLX1BBQ0tFVCksIEVOT1NZUywNCiAJICAgICAgIkNoZWNraW5nIHdpbGwg bW9zdCBsaWtlbHkgbmV2ZXIgZ2V0IGltcGxlbWVudGVkIiB9LA0KLQkgICAg LyogRU5PRU5UIGZvciBERUxFVEUgcHJvYmFibHkgbWVhbnMgbm8gbWF0Y2hp bmcgcnVsZSAqLw0KLQkgICAgeyBUQ19ERUxFVEVfRU5UUlksIEVOT0VOVCwN CisJICAgIHsgUUYoVENfQ09NTUlUKSwgRUlOVkFMLCAiVGFibGUgY29tcGls YXRpb24gZmFpbGVkIiB9LA0KKwkgICAgeyBRRihUQ19DT01NSVQpLCBFTE9P UCwgIkxvb3AgZm91bmQgaW4gdGFibGUiIH0sDQorCSAgICB7IFFGKFRDX0NP TU1JVCksIEVQRVJNLCAiUGVybWlzc2lvbiBkZW5pZWQgKHlvdSBtdXN0IGJl IHJvb3QpIiB9LA0KKwkgICAgeyBRRihUQ19DUkVBVEVfQ0hBSU4pLCBFRVhJ U1QsICJDaGFpbiBhbHJlYWR5IGV4aXN0cyIgfSwNCisJICAgIHsgUUYoVENf Q1JFQVRFX0NIQUlOKSwgRTJCSUcsICJDaGFpbiBuYW1lIHRvbyBsb25nIiB9 LA0KKwkgICAgeyBRRihUQ19ERUxFVEVfQ0hBSU4pLCBFTk9URU1QVFksICJD aGFpbiBpcyBub3QgZW1wdHkiIH0sDQorCSAgICB7IFFGKFRDX0RFTEVURV9D SEFJTiksIEVJTlZBTCwgIkNhbid0IGRlbGV0ZSBidWlsdC1pbiBjaGFpbiIg fSwNCisJICAgIHsgUUYoVENfREVMRVRFX0NIQUlOKSwgRU1MSU5LLA0KKwkg ICAgICAiQ2FuJ3QgZGVsZXRlIGNoYWluIHdpdGggcmVmZXJlbmNlcyBsZWZ0 IiB9LA0KKwkgICAgeyBRRihUQ19ERUxFVEVfQ0hBSU4pLCBFTk9FTlQsICJO byBjaGFpbiBieSB0aGF0IG5hbWUiIH0sDQorCSAgICB7IFFGKFRDX0RFTEVU RV9DSEFJTiksIEVOT1NZUywgIkNvdWxkbid0IGdldCByZWZlcmVuY2UgbGlz dCBmb3IgY2hhaW4iIH0sDQorCSAgICB7IFFGKFRDX0RFTEVURV9FTlRSWSks IEVOT0VOVCwgIk5vIGNoYWluIGJ5IHRoYXQgbmFtZSIgfSwNCisJICAgIHsg UUYoVENfREVMRVRFX0VOVFJZKSwgRUlOVkFMLA0KIAkgICAgICAiQmFkIHJ1 bGUgKGRvZXMgYSBtYXRjaGluZyBydWxlIGV4aXN0IGluIHRoYXQgY2hhaW4/ KSIgfSwNCi0JICAgIHsgVENfU0VUX1BPTElDWSwgRU5PRU5ULA0KLQkgICAg ICAiQmFkIGJ1aWx0LWluIGNoYWluIG5hbWUiIH0sDQotCSAgICB7IFRDX1NF VF9QT0xJQ1ksIEVJTlZBTCwNCi0JICAgICAgIkJhZCBwb2xpY3kgbmFtZSIg fSwNCisJICAgIHsgUUYoVENfREVMRVRFX05VTV9FTlRSWSksIEVOT0VOVCwg Ik5vIGNoYWluIGJ5IHRoYXQgbmFtZSIgfSwNCisJICAgIHsgUUYoVENfREVM RVRFX05VTV9FTlRSWSksIEUyQklHLCAiSW5kZXggb2YgZGVsZXRpb24gdG9v IGJpZyIgfSwNCisJICAgIHsgUUYoVENfRklSU1RfQ0hBSU4pLCBFTk9FTlQs ICJObyBjaGFpbnMgdG8gYmUgZm91bmQiIH0sDQorCSAgICB7IFFGKFRDX0ZJ UlNUX1JVTEUpLCBFTk9FTlQsICJObyBjaGFpbiBieSB0aGF0IG5hbWUiIH0s DQorCSAgICB7IFFGKFRDX0ZMVVNIX0VOVFJJRVMpLCBFTk9FTlQsICJObyBj aGFpbiBieSB0aGF0IG5hbWUiIH0sDQorCSAgICB7IFFGKFRDX0dFVF9QT0xJ Q1kpLCBFTk9FTlQsICJObyBjaGFpbiBieSB0aGF0IG5hbWUiIH0sDQorCSAg ICB7IFFGKFRDX0dFVF9SRUZFUkVOQ0VTKSwgRU5PRU5ULCAiTm8gY2hhaW4g YnkgdGhhdCBuYW1lIiB9LA0KKwkgICAgeyBRRihUQ19HRVRfUlVMRSksIEVO T0VOVCwgIk5vIGNoYWluIGJ5IHRoYXQgbmFtZSIgfSwNCisJICAgIHsgUUYo VENfSU5JVCksIEVQRVJNLCAiUGVybWlzc2lvbiBkZW5pZWQgKHlvdSBtdXN0 IGJlIHJvb3QpIiB9LA0KKwkgICAgeyBRRihUQ19JTklUKSwgRUlOVkFMLCAi TW9kdWxlIGlzIHdyb25nIHZlcnNpb24iIH0sDQorCSAgICB7IFFGKFRDX0lO SVQpLCBFMkJJRywgIlRhYmxlIG5hbWUgdG9vIGxvbmciIH0sDQorCSAgICB7 IFFGKFRDX0lOSVQpLCBFTk9FTlQsIA0KKwkJICAgICJUYWJsZSBkb2VzIG5v dCBleGlzdCAoZG8geW91IG5lZWQgdG8gaW5zbW9kPykiIH0sDQorCSAgICB7 IFFGKFRDX0lOU0VSVF9FTlRSWSksIEUyQklHLCAiSW5kZXggb2YgaW5zZXJ0 aW9uIHRvbyBiaWciIH0sDQorCSAgICB7IFFGKFRDX0lOU0VSVF9FTlRSWSks IEVOT0VOVCwgIk5vIGNoYWluIGJ5IHRoYXQgbmFtZSIgfSwNCisJICAgIHsg UUYoVENfTlVNX1JVTEVTKSwgRU5PRU5ULCAiTm8gY2hhaW4gYnkgdGhhdCBu YW1lIiB9LA0KKwkgICAgeyBRRihUQ19SRUFEX0NPVU5URVIpLCBFMkJJRywg IkluZGV4IG9mIGNvdW50ZXIgcmVhZCB0b28gYmlnIiB9LA0KKwkgICAgeyBR RihUQ19SRUFEX0NPVU5URVIpLCBFTk9FTlQsICJObyBjaGFpbiBieSB0aGF0 IG5hbWUiIH0sDQorCSAgICB7IFFGKFRDX1JFTkFNRV9DSEFJTiksIEUyQklH LCAiQ2hhaW4gbmFtZSB0b28gbG9uZyIgfSwNCisJICAgIHsgUUYoVENfUkVO QU1FX0NIQUlOKSwgRU5PRU5ULCAiTm8gY2hhaW4gYnkgdGhhdCBuYW1lIiB9 LA0KKwkgICAgeyBRRihUQ19SRU5BTUVfQ0hBSU4pLCBFRVhJU1QsICJDaGFp biBhbHJlYWR5IGV4aXN0cyIgfSwNCisJICAgIHsgUUYoVENfUkVQTEFDRV9F TlRSWSksIEUyQklHLCAiSW5kZXggb2YgcmVwbGFjZW1lbnQgdG9vIGJpZyIg fSwNCisJICAgIHsgUUYoVENfUkVQTEFDRV9FTlRSWSksIEVOT0VOVCwgIk5v IGNoYWluIGJ5IHRoYXQgbmFtZSIgfSwNCisJICAgIHsgUUYoVENfU0VUX0NP VU5URVIpLCBFMkJJRywgIkluZGV4IG9mIGNvdW50ZXIgdG9vIGJpZyIgfSwN CisJICAgIHsgUUYoVENfU0VUX0NPVU5URVIpLCBFTk9FTlQsICJObyBjaGFp biBieSB0aGF0IG5hbWUiIH0sDQorCSAgICB7IFFGKFRDX1NFVF9QT0xJQ1kp LCBFTk9FTlQsICJCYWQgYnVpbHQtaW4gY2hhaW4gbmFtZSIgfSwNCisJICAg IHsgUUYoVENfU0VUX1BPTElDWSksIEVJTlZBTCwgIkJhZCBwb2xpY3kgbmFt ZSIgfSwNCisJICAgIHsgUUYoVENfWkVST19DT1VOVEVSKSwgRTJCSUcsICJJ bmRleCBvZiBjb3VudGVyIHRvbyBiaWciIH0sDQorCSAgICB7IFFGKFRDX1pF Uk9fQ09VTlRFUiksIEVOT0VOVCwgIk5vIGNoYWluIGJ5IHRoYXQgbmFtZSIg fSwNCisJICAgIHsgUUYoVENfWkVST19FTlRSSUVTKSwgRU5PRU5ULCAiTm8g Y2hhaW4gYnkgdGhhdCBuYW1lIiB9LA0KKw0KKwkgICAgeyBRRihjYWNoZV9h ZGRfZW50cnkpLCBFSU5WQUwsICJUYXJnZXQgcHJvYmxlbSIgfSwNCisJICAg IHsgUUYoaXB0Y2NfbWFwX3RhcmdldCksIEVJTlZBTCwgIkNhbid0IGp1bXAg dG8gYSBidWlsdC1pbiB0YXJnZXQiIH0sDQorCSAgICB7IFFGKGlwdGNjX3N0 YW5kYXJkX21hcCksIEVJTlZBTCwgIlRhcmdldCBwcm9ibGVtIiB9LA0KKwkg ICAgeyBRRihsaXN0X2VudHJpZXMpLCBFTk9FTlQsICJObyBjaGFpbiBieSB0 aGF0IG5hbWUiIH0sDQogDQotCSAgICB7IE5VTEwsIDAsICJJbmNvbXBhdGli bGUgd2l0aCB0aGlzIGtlcm5lbCIgfSwNCiAJICAgIHsgTlVMTCwgRU5PUFJP VE9PUFQsICJpcHRhYmxlcyB3aG8/IChkbyB5b3UgbmVlZCB0byBpbnNtb2Q/ KSIgfSwNCi0JICAgIHsgTlVMTCwgRU5PU1lTLCAiV2lsbCBiZSBpbXBsZW1l bnRlZCByZWFsIHNvb24uICBJIHByb21pc2UgOykiIH0sDQogCSAgICB7IE5V TEwsIEVOT01FTSwgIk1lbW9yeSBhbGxvY2F0aW9uIHByb2JsZW0iIH0sDQot CSAgICB7IE5VTEwsIEVOT0VOVCwgIk5vIGNoYWluL3RhcmdldC9tYXRjaCBi eSB0aGF0IG5hbWUiIH0sDQogCSAgfTsNCisJICANCisJaWYgKCFzdHJsZW4o aXB0Y19lcnJmbikpDQorCQlyZXR1cm4gIlNvbWV0aGluZyBmb3Jnb3QgdG8g c2V0IHRoZSBlcnJvciByZWFzb24iOw0KIA0KIAlmb3IgKGkgPSAwOyBpIDwg c2l6ZW9mKHRhYmxlKS9zaXplb2Yoc3RydWN0IHRhYmxlX3N0cnVjdCk7IGkr Kykgew0KLQkJaWYgKCghdGFibGVbaV0uZm4gfHwgdGFibGVbaV0uZm4gPT0g aXB0Y19mbikNCi0JCSAgICAmJiB0YWJsZVtpXS5lcnIgPT0gZXJyKQ0KKwkJ aWYgKCghdGFibGVbaV0uZm4gfHwgIXN0cmNtcCh0YWJsZVtpXS5mbiwgaXB0 Y19lcnJmbikpDQorCQkgICAgJiYgdGFibGVbaV0uZXJyID09IGlwdGNfZXJy bm8pDQogCQkJcmV0dXJuIHRhYmxlW2ldLm1lc3NhZ2U7DQogCX0NCiANCi0J cmV0dXJuIHN0cmVycm9yKGVycik7DQorCWxlbmd0aCA9IHNucHJpbnRmKHN0 cmJ1ZiwgMjU2LCAiVW5rbm93biBlcnJvciwgJXM6ICVpIiwgaXB0Y19lcnJm biwgaXB0Y19lcnJubyk7DQorDQorCS8qIEF2b2lkIHByaW50aW5nICIoU3Vj Y2VzcykiICovDQorCWlmIChpcHRjX2Vycm5vKQ0KKwkJc25wcmludGYoc3Ry YnVmICsgbGVuZ3RoLCAyNTYgLSBsZW5ndGgsICIgKCVzKSIsIHN0cmVycm9y KGlwdGNfZXJybm8pKTsNCisNCisJcmV0dXJuIHN0cmJ1ZjsNCiB9DQo= ---1017779964-1203588843-1186874464=:28796--