From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from fe2.vsnl.net (fe2.vsnl.net [203.200.235.172]) by ozlabs.org (Postfix) with ESMTP id 167E8DDE00 for ; Fri, 16 Mar 2007 03:49:38 +1100 (EST) Received: from vsnl.net ([172.16.28.40]) by fe2.internal.vsnl.net (vsnl mail server fe2) with ESMTP id <0JEY003GJBL38750@fe2.internal.vsnl.net> for linuxppc-dev@ozlabs.org; Thu, 15 Mar 2007 21:11:37 +0530 (IST) Date: Thu, 15 Mar 2007 20:41:27 +0500 From: rsmadhvesh@vsnl.net Subject: Kprobes for PPC32[Booke] To: linuxppc-dev@ozlabs.org Message-id: MIME-version: 1.0 Content-type: multipart/mixed; boundary="Boundary_(ID_O4IYE6ljKqwoL5DTA2nGkA)" Cc: madhvesh.s@ap.sony.com List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , This is a multi-part message in MIME format. --Boundary_(ID_O4IYE6ljKqwoL5DTA2nGkA) Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT Content-disposition: inline Hi, This is regarding the kprobes support for ppc32 with BOOKE versions. The attached patch contains this code and there is seperate patch which includes some kernel modules to test the same. This is tested for ebony platform(ppc440_gp). Kernel Version: 2.6.16.39 Platform: Ebony But there are some issues which i have noticed while handling debug exception used for single step operation. 1. The single step operation in PPC32 is implemented using debug control register (DBCR) which can be used to generate single step debug exception. This mechanism is used in handling post handler execution of kprobes (see code prepare_single_step) 2. It was noticed that having preempt_disable() at the beginning of kprobe_handler, generates OOPS and kprobes doesnot work. But this is against the original kprobes design implemented in other already working archs (that is, preemption is disabled for the entire duration of pre and post handlers execution). The basic problem noticed is, change in the preempt count after generating single step exception. Even though the preemption is disabled at the beginning of kprobe_handler(), after generating the single step exception, preempt count gets printed as zero in DebugException() handler of traps.c. This causes the problem and system generates OOPS!! To resolve this problem, we have introduced the preempt_disable and preempt_enable_no_resched blocks in pre and post handlers exceptions switch case of kprobe_exceptions_notify(), and by this way we found that the preempt count is consistent and pre and post handlers get executed. So why in PPC32 arch, preempt count gets changed between the debug exceptions? Is this problem already noticed or is it because of some other bug in the kprobes code of the attached patch? 3. In PPC32 it is noticed that interrupts are enabled by default and initially i had suspected this as the cause for problem stated in <2>. But it is found that by disabling interrupts, uncommenting the #if 0 blocks in the attached patch, the same problem appears. But this code is still not tested for kprobes reentrancy (by having interrupts enabled). Does anybody see a issue of enabling interrupts while processing kprobes? 4. While executing the fault handler using the test k-004.c in the attached patch, we noticed the following message being printed repeatedly for every pre handler execution where put_user() gets called to generate fault exception. Debug: sleeping function called from invalid context at /..../k-004.c:39 in_atomic():1, irqs_disabled():1 Even though interrupts are enabled in the code(MSR bits show it as enabled), why the above debug message shows it as disabled? It appears that put_user() will internally call might_sleep() which turns out to be a sleeping function. But this same test didnot report any kind of above message while testing with ARM and MIPS arch even though all interrupts were disabled explicitly. So is it a failure message ? or wrongly printed only in ppc32? After getting this message, the test completes and the system is stable!!! Since this code is implemented with limited ppc32 arch knowledge, some key things may be missing in this. Can somebody review this and provide some inputs for this code? (Note:After porting the above patches to 2.6.20, the same above results are noticed!) Best Regards Madhvesh ================== Madhvesh. R. Sulibhavi Sony India Software Centre Bangalore --Boundary_(ID_O4IYE6ljKqwoL5DTA2nGkA) Content-type: application/octet-stream; NAME=kprobes-ppc-2.6.16.39-20070313.patch Content-transfer-encoding: base64 Content-disposition: attachment; filename=kprobes-ppc-2.6.16.39-20070313.patch SW5kZXg6IGxpbnV4LTIuNi4xNi4zOS9hcmNoL3Bvd2VycGMvbGliL01ha2VmaWxlCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGxpbnV4LTIuNi4xNi4zOS5vcmlnL2FyY2gvcG93ZXJwYy9saWIvTWFr ZWZpbGUJMjAwNy0wMy0xMyAyMDozNzoxMy4xNTc2OTkyNDAgKzA1MzAKKysrIGxpbnV4LTIu Ni4xNi4zOS9hcmNoL3Bvd2VycGMvbGliL01ha2VmaWxlCTIwMDctMDMtMTMgMjA6Mzk6MDQu NTMxNzY3ODA4ICswNTMwCkBAIC0xMyw4ICsxMyw4IEBACiAJCQkgICBzdHJjYXNlLm8KIG9i ai0kKENPTkZJR19QUENfSVNFUklFUykgKz0gZTJhLm8KIG9iai0kKENPTkZJR19YTU9OKQkr PSBzc3RlcC5vCitvYmotJChDT05GSUdfS1BST0JFUykJKz0gc3N0ZXAubwogCiBpZmVxICgk KENPTkZJR19QUEM2NCkseSkKIG9iai0kKENPTkZJR19TTVApCSs9IGxvY2tzLm8KLW9iai0k KENPTkZJR19ERUJVR19LRVJORUwpICs9IHNzdGVwLm8KIGVuZGlmCkluZGV4OiBsaW51eC0y LjYuMTYuMzkvYXJjaC9wcGMvS2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaW51eC0yLjYu MTYuMzkub3JpZy9hcmNoL3BwYy9LY29uZmlnCTIwMDctMDMtMTMgMjA6Mzc6MTMuMTU3Njk5 MjQwICswNTMwCisrKyBsaW51eC0yLjYuMTYuMzkvYXJjaC9wcGMvS2NvbmZpZwkyMDA3LTAz LTEzIDIwOjM5OjA0LjUzMzc2NzUwNCArMDUzMApAQCAtMTM5NywzICsxMzk3LDE3IEBACiBz b3VyY2UgInNlY3VyaXR5L0tjb25maWciCiAKIHNvdXJjZSAiY3J5cHRvL0tjb25maWciCisK K21lbnUgIkluc3RydW1lbnRhdGlvbiBTdXBwb3J0IgorCitjb25maWcgS1BST0JFUworCWJv b2wgIktwcm9iZXMiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwloZWxwCisJICBLcHJv YmVzIGFsbG93cyB5b3UgdG8gdHJhcCBhdCBhbG1vc3QgYW55IGtlcm5lbCBhZGRyZXNzIGFu ZAorCSAgZXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uLiAgcmVnaXN0ZXJfa3Byb2JlKCkg ZXN0YWJsaXNoZXMKKwkgIGEgcHJvYmVwb2ludCBhbmQgc3BlY2lmaWVzIHRoZSBjYWxsYmFj ay4gIEtwcm9iZXMgaXMgdXNlZnVsCisJICBmb3Iga2VybmVsIGRlYnVnZ2luZywgbm9uLWlu dHJ1c2l2ZSBpbnN0cnVtZW50YXRpb24gYW5kIHRlc3RpbmcuCisJICBJZiBpbiBkb3VidCwg c2F5ICJOIi4KKworZW5kbWVudQpJbmRleDogbGludXgtMi42LjE2LjM5L2FyY2gvcHBjL2tl cm5lbC9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaW51eC0yLjYuMTYuMzkub3JpZy9h cmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUJMjAwNy0wMy0xMyAyMDozNzoxMy4xNTg2OTkwODgg KzA1MzAKKysrIGxpbnV4LTIuNi4xNi4zOS9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUJMjAw Ny0wMy0xMyAyMDozOTowNC41MzQ3NjczNTIgKzA1MzAKQEAgLTIxLDYgKzIxLDcgQEAKIG9i ai0kKENPTkZJR19QQ0kpCQkrPSBwY2kubwogb2JqLSQoQ09ORklHX1JBUElESU8pCQkrPSBy aW8ubwogb2JqLSQoQ09ORklHX0tHREIpCQkrPSBwcGMtc3R1Yi5vCitvYmotJChDT05GSUdf S1BST0JFUykJCSs9IGtwcm9iZXMubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vIHNt cC10YnN5bmMubwogb2JqLSQoQ09ORklHX1RBVSkJCSs9IHRlbXAubwogaWZuZGVmIENPTkZJ R19FMjAwCkluZGV4OiBsaW51eC0yLjYuMTYuMzkvYXJjaC9wcGMva2VybmVsL2twcm9iZXMu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAw MDAwMDAgKzAwMDAKKysrIGxpbnV4LTIuNi4xNi4zOS9hcmNoL3BwYy9rZXJuZWwva3Byb2Jl cy5jCTIwMDctMDMtMTMgMjA6NDA6NDAuNDI1MTg5NzkyICswNTMwCkBAIC0wLDAgKzEsMzg3 IEBACisvKgorICogIEtlcm5lbCBQcm9iZXMgKEtQcm9iZXMpCisgKiAgYXJjaC9wcGMva2Vy bmVsL2twcm9iZXMuYworICoKKyAqICBDb3B5cmlnaHQgMjAwNyBTb255IENvcnAuCisgKgor ICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICog IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1 aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRl IDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVk ZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20va2RlYnVnLmg+CisjaW5jbHVk ZSA8YXNtL3NzdGVwLmg+CisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBrcHJvYmUgKiwgY3Vy cmVudF9rcHJvYmUpID0gTlVMTDsKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBrcHJvYmVfY3Rs YmxrLCBrcHJvYmVfY3RsYmxrKTsKKworaW50IF9fa3Byb2JlcyBhcmNoX3ByZXBhcmVfa3By b2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJaW50IHJldCA9IDA7CisJa3Byb2JlX29wY29k ZV90IGluc24gPSAqcC0+YWRkcjsKKworCWlmICgodW5zaWduZWQgbG9uZylwLT5hZGRyICYg MHgwMykgeworCQlwcmludGsoIkF0dGVtcHQgdG8gcmVnaXN0ZXIga3Byb2JlIGF0IGFuIHVu YWxpZ25lZCBhZGRyZXNzXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKElT X01UTVNSRChpbnNuKSB8fCBJU19SRklEKGluc24pIHx8IElTX1JGSShpbnNuKSkgeworCQlw cmludGsoIkNhbm5vdCByZWdpc3RlciBhIGtwcm9iZSBvbiByZmkvcmZpZCBvciBtdG1zcltk XVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJLyogaW5zbiBtdXN0IGJlIG9uIGEg c3BlY2lhbCBleGVjdXRhYmxlIHBhZ2Ugb24gcHBjMzIgKi8KKwlpZiAoIXJldCkgeworCQlw LT5haW5zbi5pbnNuID0gZ2V0X2luc25fc2xvdCgpOworCQlpZiAoIXAtPmFpbnNuLmluc24p CisJCQlyZXQgPSAtRU5PTUVNOworCX0KKworCWlmICghcmV0KSB7CisJCW1lbWNweShwLT5h aW5zbi5pbnNuLCBwLT5hZGRyLCBNQVhfSU5TTl9TSVpFICogc2l6ZW9mKGtwcm9iZV9vcGNv ZGVfdCkpOworCQlwLT5vcGNvZGUgPSAqcC0+YWRkcjsKKwkJZmx1c2hfaWNhY2hlX3Jhbmdl KCh1bnNpZ25lZCBsb25nKSBwLT5haW5zbi5pbnNuLAorCQkJKHVuc2lnbmVkIGxvbmcpIHAt PmFpbnNuLmluc24gKyBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CisJfQorCisJcmV0dXJu IHJldDsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9hcm1fa3Byb2JlKHN0cnVjdCBrcHJv YmUgKnApCit7CisJKnAtPmFkZHIgPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OOworCWZsdXNo X2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZykgcC0+YWRkciwKKwkJCSAgICh1bnNpZ25l ZCBsb25nKSBwLT5hZGRyICsgc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkpOworfQorCit2b2lk IF9fa3Byb2JlcyBhcmNoX2Rpc2FybV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwkq cC0+YWRkciA9IHAtPm9wY29kZTsKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxv bmcpIHAtPmFkZHIsCisJCQkgICAodW5zaWduZWQgbG9uZykgcC0+YWRkciArIHNpemVvZihr cHJvYmVfb3Bjb2RlX3QpKTsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfa3By b2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJZG93bigma3Byb2JlX211dGV4KTsKKwlmcmVl X2luc25fc2xvdChwLT5haW5zbi5pbnNuKTsKKwl1cCgma3Byb2JlX211dGV4KTsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIHByZXBhcmVfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpw LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9ICpw LT5haW5zbi5pbnNuOworCisjaWYgMAorCXJlZ3MtPm1zciAmPSB+KE1TUl9FRSk7IC8qIFR1 cm4gb2ZmICdFeHRlcm5lbCBJbnRyZXJydXB0JyBiaXRzICovCisJcmVncy0+bXNyICY9IH4o TVNSX0NFKTsgLyogVHVybiBvZmYgJ0NyaXRpY2FsIEludHJlcnJ1cHQnIGJpdHMgKi8KKyNl bmRpZgorCXJlZ3MtPm1zciB8PSBNU1JfREU7CisKKwltdHNwcihTUFJOX0RCQ1IwLCBtZnNw cihTUFJOX0RCQ1IwKSB8IERCQ1IwX0lDIHwgREJDUjBfSURNKTsKKwlyZWdzLT5uaXAgPSAo dW5zaWduZWQgbG9uZylwLT5haW5zbi5pbnNuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg c2F2ZV9wcmV2aW91c19rcHJvYmUoc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3sKKwlr Y2ItPnByZXZfa3Byb2JlLmtwID0ga3Byb2JlX3J1bm5pbmcoKTsKKwlrY2ItPnByZXZfa3By b2JlLnN0YXR1cyA9IGtjYi0+a3Byb2JlX3N0YXR1czsKKwlrY2ItPnByZXZfa3Byb2JlLnNh dmVkX21zciA9IGtjYi0+a3Byb2JlX3NhdmVkX21zcjsKK30KKworc3RhdGljIGlubGluZSB2 b2lkIHJlc3RvcmVfcHJldmlvdXNfa3Byb2JlKHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2Ip Cit7CisJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBrY2ItPnByZXZfa3Byb2Jl LmtwOworCWtjYi0+a3Byb2JlX3N0YXR1cyA9IGtjYi0+cHJldl9rcHJvYmUuc3RhdHVzOwor CWtjYi0+a3Byb2JlX3NhdmVkX21zciA9IGtjYi0+cHJldl9rcHJvYmUuc2F2ZWRfbXNyOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2N1cnJlbnRfa3Byb2JlKHN0cnVjdCBrcHJv YmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCXN0cnVjdCBrcHJvYmVfY3RsYmxr ICprY2IpCit7CisJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBwOworCWtjYi0+ a3Byb2JlX3NhdmVkX21zciA9IHJlZ3MtPm1zcjsKK30KKworLyogQ2FsbGVkIHdpdGgga3Jl dHByb2JlX2xvY2sgaGVsZCAqLwordm9pZCBfX2twcm9iZXMgYXJjaF9wcmVwYXJlX2tyZXRw cm9iZShzdHJ1Y3Qga3JldHByb2JlICpycCwKKwkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAq cmVncykKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQga3Byb2JlX2hhbmRsZXIoc3RydWN0 IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqcDsKKwlpbnQgcmV0ID0gMDsK Kwl1bnNpZ25lZCBpbnQgKmFkZHIgPSAodW5zaWduZWQgaW50ICopcmVncy0+bmlwOworCXN0 cnVjdCBrcHJvYmVfY3RsYmxrICprY2I7CisKKworCS8qCisJICogV2UgZG9uJ3Qgd2FudCB0 byBiZSBwcmVlbXB0ZWQgZm9yIHRoZSBlbnRpcmUKKwkgKiBkdXJhdGlvbiBvZiBrcHJvYmUg cHJvY2Vzc2luZworCSAqLworCisJLy9wcmVlbXB0X2Rpc2FibGUoKTsKKwlrY2IgPSBnZXRf a3Byb2JlX2N0bGJsaygpOworCisJLyogQ2hlY2sgd2UncmUgbm90IGFjdHVhbGx5IHJlY3Vy c2luZyAqLworCWlmIChrcHJvYmVfcnVubmluZygpKSB7CisJCXAgPSBnZXRfa3Byb2JlKGFk ZHIpOworCQlpZiAocCkgeworCQkJa3Byb2JlX29wY29kZV90IGluc24gPSAqcC0+YWluc24u aW5zbjsKKwkJCWlmIChrY2ItPmtwcm9iZV9zdGF0dXMgPT0gS1BST0JFX0hJVF9TUyAmJgor CQkJCQlpc190cmFwKGluc24pKSB7CisJCQkJcmVncy0+bXNyICY9IH5NU1JfREU7IC8qIFR1 cm4gb2ZmICd0cmFjZScgYml0cyAqLworCQkJCXJlZ3MtPm1zciB8PSBrY2ItPmtwcm9iZV9z YXZlZF9tc3I7CisJCQkJZ290byBub19rcHJvYmU7CisJCQl9CisJCQkvKiBXZSBoYXZlIHJl ZW50ZXJlZCB0aGUga3Byb2JlX2hhbmRsZXIoKSwgc2luY2UKKwkJCSAqIGFub3RoZXIgcHJv YmUgd2FzIGhpdCB3aGlsZSB3aXRoaW4gdGhlIGhhbmRsZXIuCisJCQkgKiBXZSBoZXJlIHNh dmUgdGhlIG9yaWdpbmFsIGtwcm9iZXMgdmFyaWFibGVzIGFuZAorCQkJICoganVzdCBzaW5n bGUgc3RlcCBvbiB0aGUgaW5zdHJ1Y3Rpb24gb2YgdGhlIG5ldyBwcm9iZQorCQkJICogd2l0 aG91dCBjYWxsaW5nIGFueSB1c2VyIGhhbmRsZXJzLgorCQkJICovCisJCQlzYXZlX3ByZXZp b3VzX2twcm9iZShrY2IpOworCQkJc2V0X2N1cnJlbnRfa3Byb2JlKHAsIHJlZ3MsIGtjYik7 CisJCQlrY2ItPmtwcm9iZV9zYXZlZF9tc3IgPSByZWdzLT5tc3I7CisJCQlrcHJvYmVzX2lu Y19ubWlzc2VkX2NvdW50KHApOworCQkJcHJlcGFyZV9zaW5nbGVzdGVwKHAsIHJlZ3MpOwor CQkJa2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX1JFRU5URVI7CisJCQlyZXR1cm4gMTsK KwkJfSBlbHNlIHsKKwkJCWlmICgqYWRkciAhPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKSB7 CisJCQkJLyogSWYgdHJhcCB2YXJpYW50LCB0aGVuIGl0IGJlbG9uZ3Mgbm90IHRvIHVzICov CisJCQkJa3Byb2JlX29wY29kZV90IGN1cl9pbnNuID0gKmFkZHI7CisJCQkJaWYgKGlzX3Ry YXAoY3VyX2luc24pKQorCQkgICAgICAgCQkJZ290byBub19rcHJvYmU7CisJCQkJLyogVGhl IGJyZWFrcG9pbnQgaW5zdHJ1Y3Rpb24gd2FzIHJlbW92ZWQgYnkKKwkJCQkgKiBhbm90aGVy IGNwdSByaWdodCBhZnRlciB3ZSBoaXQsIG5vIGZ1cnRoZXIKKwkJCQkgKiBoYW5kbGluZyBv ZiB0aGlzIGludGVycnVwdCBpcyBhcHByb3ByaWF0ZQorCQkJCSAqLworCQkJCXJldCA9IDE7 CisJCQkJZ290byBub19rcHJvYmU7CisJCQl9CisJCQlwID0gX19nZXRfY3B1X3ZhcihjdXJy ZW50X2twcm9iZSk7CisJCQlpZiAocC0+YnJlYWtfaGFuZGxlciAmJiBwLT5icmVha19oYW5k bGVyKHAsIHJlZ3MpKSB7CisJCQkJZ290byBzc19wcm9iZTsKKwkJCX0KKwkJfQorCQlnb3Rv IG5vX2twcm9iZTsKKwl9CisKKwlwID0gZ2V0X2twcm9iZShhZGRyKTsKKwlpZiAoIXApIHsK KwkJaWYgKCphZGRyICE9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pIHsKKwkJCS8qCisJCQkg KiBQb3dlclBDIGhhcyBtdWx0aXBsZSB2YXJpYW50cyBvZiB0aGUgInRyYXAiCisJCQkgKiBp bnN0cnVjdGlvbi4gSWYgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gaXMgYQorCQkJICogdHJh cCB2YXJpYW50LCBpdCBjb3VsZCBiZWxvbmcgdG8gc29tZW9uZSBlbHNlCisJCQkgKi8KKwkJ CWtwcm9iZV9vcGNvZGVfdCBjdXJfaW5zbiA9ICphZGRyOworCQkJaWYgKGlzX3RyYXAoY3Vy X2luc24pKQorCQkgICAgICAgCQlnb3RvIG5vX2twcm9iZTsKKwkJCS8qCisJCQkgKiBUaGUg YnJlYWtwb2ludCBpbnN0cnVjdGlvbiB3YXMgcmVtb3ZlZCByaWdodAorCQkJICogYWZ0ZXIg d2UgaGl0IGl0LiAgQW5vdGhlciBjcHUgaGFzIHJlbW92ZWQKKwkJCSAqIGVpdGhlciBhIHBy b2JlcG9pbnQgb3IgYSBkZWJ1Z2dlciBicmVha3BvaW50CisJCQkgKiBhdCB0aGlzIGFkZHJl c3MuICBJbiBlaXRoZXIgY2FzZSwgbm8gZnVydGhlcgorCQkJICogaGFuZGxpbmcgb2YgdGhp cyBpbnRlcnJ1cHQgaXMgYXBwcm9wcmlhdGUuCisJCQkgKi8KKwkJCXJldCA9IDE7CisJCX0K KwkJLyogTm90IG9uZSBvZiBvdXJzOiBsZXQga2VybmVsIGhhbmRsZSBpdCAqLworCQlnb3Rv IG5vX2twcm9iZTsKKwl9CisKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX0FD VElWRTsKKwlzZXRfY3VycmVudF9rcHJvYmUocCwgcmVncywga2NiKTsKKwlpZiAocC0+cHJl X2hhbmRsZXIgJiYgcC0+cHJlX2hhbmRsZXIocCwgcmVncykpCisJCS8qIGhhbmRsZXIgaGFz IGFscmVhZHkgc2V0IHRoaW5ncyB1cCwgc28gc2tpcCBzcyBzZXR1cCAqLworCQlyZXR1cm4g MTsKKworc3NfcHJvYmU6CisJcHJlcGFyZV9zaW5nbGVzdGVwKHAsIHJlZ3MpOworCWtjYi0+ a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfU1M7CisJcmV0dXJuIDE7CisKK25vX2twcm9i ZToKKwkvL3ByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwlyZXR1cm4gcmV0OworfQor CisvKgorICogRnVuY3Rpb24gcmV0dXJuIHByb2JlIHRyYW1wb2xpbmU6CisgKiAJLSBpbml0 X2twcm9iZXMoKSBlc3RhYmxpc2hlcyBhIHByb2JlcG9pbnQgaGVyZQorICogCS0gV2hlbiB0 aGUgcHJvYmVkIGZ1bmN0aW9uIHJldHVybnMsIHRoaXMgcHJvYmUKKyAqIAkJY2F1c2VzIHRo ZSBoYW5kbGVycyB0byBmaXJlCisgKi8KK3ZvaWQga3JldHByb2JlX3RyYW1wb2xpbmVfaG9s ZGVyKHZvaWQpCit7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiB0aGUgcHJvYmUgYXQga3Jl dHByb2JlIHRyYW1wb2xpbmUgaXMgaGl0CisgKi8KK2ludCBfX2twcm9iZXMgdHJhbXBvbGlu ZV9wcm9iZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdz KQoreworICAgICAgICByZXR1cm4gMTsKK30KKworLyoKKyAqIENhbGxlZCBhZnRlciBzaW5n bGUtc3RlcHBpbmcuICBwLT5hZGRyIGlzIHRoZSBhZGRyZXNzIG9mIHRoZQorICogaW5zdHJ1 Y3Rpb24gd2hvc2UgZmlyc3QgYnl0ZSBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgImJyZWFr cG9pbnQiCisgKiBpbnN0cnVjdGlvbi4gIFRvIGF2b2lkIHRoZSBTTVAgcHJvYmxlbXMgdGhh dCBjYW4gb2NjdXIgd2hlbiB3ZQorICogdGVtcG9yYXJpbHkgcHV0IGJhY2sgdGhlIG9yaWdp bmFsIG9wY29kZSB0byBzaW5nbGUtc3RlcCwgd2UKKyAqIHNpbmdsZS1zdGVwcGVkIGEgY29w eSBvZiB0aGUgaW5zdHJ1Y3Rpb24uICBUaGUgYWRkcmVzcyBvZiB0aGlzCisgKiBjb3B5IGlz IHAtPmFpbnNuLmluc24uCisgKi8KK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN1bWVfZXhl Y3V0aW9uKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlu dCByZXQ7CisJdW5zaWduZWQgaW50IGluc24gPSAqcC0+YWluc24uaW5zbjsKKworCXJlZ3Mt Pm5pcCA9ICh1bnNpZ25lZCBsb25nKXAtPmFkZHI7CisJcmV0ID0gZW11bGF0ZV9zdGVwKHJl Z3MsIGluc24pOworCWlmIChyZXQgPT0gMCkKKwkJcmVncy0+bmlwID0gKHVuc2lnbmVkIGxv bmcpcC0+YWRkciArIDQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvc3Rfa3Byb2JlX2hh bmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqY3VyID0g a3Byb2JlX3J1bm5pbmcoKTsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2tw cm9iZV9jdGxibGsoKTsKKworCWlmICghY3VyKQorCQlyZXR1cm4gMDsKKworCWlmICgoa2Ni LT5rcHJvYmVfc3RhdHVzICE9IEtQUk9CRV9SRUVOVEVSKSAmJiBjdXItPnBvc3RfaGFuZGxl cikgeworCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTRE9ORTsKKwkJY3Vy LT5wb3N0X2hhbmRsZXIoY3VyLCByZWdzLCAwKTsKKwl9CisKKwlyZXN1bWVfZXhlY3V0aW9u KGN1ciwgcmVncyk7CisJcmVncy0+bXNyIHw9IGtjYi0+a3Byb2JlX3NhdmVkX21zcjsKKwor CS8qUmVzdG9yZSBiYWNrIHRoZSBvcmlnaW5hbCBzYXZlZCBrcHJvYmVzIHZhcmlhYmxlcyBh bmQgY29udGludWUuICovCisJaWYgKGtjYi0+a3Byb2JlX3N0YXR1cyA9PSBLUFJPQkVfUkVF TlRFUikgeworCQlyZXN0b3JlX3ByZXZpb3VzX2twcm9iZShrY2IpOworCQlnb3RvIG91dDsK Kwl9CisJcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKK291dDoKKwkvL3ByZWVtcHRfZW5hYmxl X25vX3Jlc2NoZWQoKTsKKworCS8qCisJICogaWYgc29tZWJvZHkgZWxzZSBpcyBzaW5nbGVz dGVwcGluZyBhY3Jvc3MgYSBwcm9iZSBwb2ludCwgbXNyCisJICogd2lsbCBoYXZlIERFIHNl dCwgaW4gd2hpY2ggY2FzZSwgY29udGludWUgdGhlIHJlbWFpbmluZyBwcm9jZXNzaW5nCisJ ICogb2YgZG9fZGVidWcsIGFzIGlmIHRoaXMgaXMgbm90IGEgcHJvYmUgaGl0LgorCSAqLwor CWlmIChyZWdzLT5tc3IgJiBNU1JfREUpCisJCXJldHVybiAwOworI2lmIDAKKwlyZWdzLT5t c3IgfD0gKE1TUl9FRSk7IC8qIFR1cm4gb24gJ0V4dGVybmFsIEludHJlcnJ1cHQnIGJpdHMg Ki8KKwlyZWdzLT5tc3IgfD0gKE1TUl9DRSk7IC8qIFR1cm4gb24gJ0NyaXRpY2FsIEludHJl cnJ1cHQnIGJpdHMgKi8KKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxp bmUgaW50IGtwcm9iZV9mYXVsdF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQg dHJhcG5yKQoreworCXN0cnVjdCBrcHJvYmUgKmN1ciA9IGtwcm9iZV9ydW5uaW5nKCk7CisJ c3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CisKKwlp ZiAoY3VyLT5mYXVsdF9oYW5kbGVyICYmIGN1ci0+ZmF1bHRfaGFuZGxlcihjdXIsIHJlZ3Ms IHRyYXBucikpCisJCXJldHVybiAxOworCisJaWYgKGtjYi0+a3Byb2JlX3N0YXR1cyAmIEtQ Uk9CRV9ISVRfU1MpIHsKKwkJcmVzdW1lX2V4ZWN1dGlvbihjdXIsIHJlZ3MpOworCQlyZWdz LT5tc3IgJj0gfk1TUl9ERTsgLyogVHVybiBvZmYgJ3RyYWNlJyBiaXRzICovCisJCXJlZ3Mt Pm1zciB8PSBrY2ItPmtwcm9iZV9zYXZlZF9tc3I7CisKKwkJcmVzZXRfY3VycmVudF9rcHJv YmUoKTsKKwkJLy9wcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJfQorCisjaWYgMAor CXJlZ3MtPm1zciB8PSAoTVNSX0VFKTsgLyogVHVybiBvbiAnRXh0ZXJuYWwgSW50cmVycnVw dCcgYml0cyAqLworCXJlZ3MtPm1zciB8PSAoTVNSX0NFKTsgLyogVHVybiBvbiAnQ3JpdGlj YWwgSW50cmVycnVwdCcgYml0cyAqLworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworLyoK KyAqIFdyYXBwZXIgcm91dGluZSB0byBmb3IgaGFuZGxpbmcgZXhjZXB0aW9ucy4KKyAqLwor aW50IF9fa3Byb2JlcyBrcHJvYmVfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVy X2Jsb2NrICpzZWxmLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0 YSkKK3sKKwlzdHJ1Y3QgZGllX2FyZ3MgKmFyZ3MgPSAoc3RydWN0IGRpZV9hcmdzICopZGF0 YTsKKwlpbnQgcmV0ID0gTk9USUZZX0RPTkU7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2Ug RElFX0JQVDoKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisJCWlmIChrcHJvYmVfaGFuZGxlcihh cmdzLT5yZWdzKSkKKwkJCXJldCA9IE5PVElGWV9TVE9QOworCQlwcmVlbXB0X2VuYWJsZV9u b19yZXNjaGVkKCk7CisJCWJyZWFrOworCWNhc2UgRElFX1NTVEVQOgorCQlwcmVlbXB0X2Rp c2FibGUoKTsKKwkJaWYgKHBvc3Rfa3Byb2JlX2hhbmRsZXIoYXJncy0+cmVncykpCisJCQly ZXQgPSBOT1RJRllfU1RPUDsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCQli cmVhazsKKwljYXNlIERJRV9QQUdFX0ZBVUxUOgorCQkvKiBrcHJvYmVfcnVubmluZygpIG5l ZWRzIHNtcF9wcm9jZXNzb3JfaWQoKSAqLworCQlwcmVlbXB0X2Rpc2FibGUoKTsKKwkJaWYg KGtwcm9iZV9ydW5uaW5nKCkgJiYKKwkJICAgIGtwcm9iZV9mYXVsdF9oYW5kbGVyKGFyZ3Mt PnJlZ3MsIGFyZ3MtPnRyYXBucikpCisJCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJcHJlZW1w dF9lbmFibGUoKTsKKwkJYnJlYWs7CisJY2FzZSBESUVfSUFCUl9NQVRDSDoKKwkJcHJpbnRr KCJcbkRJRV9JQUJSX01BVENIIGlzIGZvdW5kXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2twcm9iZXMgc2V0am1w X3ByZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQor eworCXJldHVybiAxOworfQorCit2b2lkIF9fa3Byb2JlcyBqcHJvYmVfcmV0dXJuKHZvaWQp Cit7Cit9CisKK3ZvaWQgX19rcHJvYmVzIGpwcm9iZV9yZXR1cm5fZW5kKHZvaWQpCit7Cit9 OworCitpbnQgX19rcHJvYmVzIGxvbmdqbXBfYnJlYWtfaGFuZGxlcihzdHJ1Y3Qga3Byb2Jl ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlyZXR1cm4gMTsKK30KKworaW50IF9f aW5pdCBhcmNoX2luaXRfa3Byb2Jlcyh2b2lkKQoreworCXJldHVybiAwOworfQpJbmRleDog bGludXgtMi42LjE2LjM5L2FyY2gvcHBjL2tlcm5lbC9taXNjLlMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gbGludXgtMi42LjE2LjM5Lm9yaWcvYXJjaC9wcGMva2VybmVsL21pc2MuUwkyMDA3LTAz LTEzIDIwOjM3OjEzLjE1ODY5OTA4OCArMDUzMAorKysgbGludXgtMi42LjE2LjM5L2FyY2gv cHBjL2tlcm5lbC9taXNjLlMJMjAwNy0wMy0xMyAyMDozOTowNC41Mzc3NjY4OTYgKzA1MzAK QEAgLTQyNyw3ICs0MjcsNyBAQAogICoKICAqIF9fZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2ln bmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCkKICAqLwotX0dMT0JBTChfX2Zs dXNoX2ljYWNoZV9yYW5nZSkKK19LUFJPQkUoX19mbHVzaF9pY2FjaGVfcmFuZ2UpCiBCRUdJ Tl9GVFJfU0VDVElPTgogCWJscgkJCQkvKiBmb3IgNjAxLCBkbyBub3RoaW5nICovCiBFTkRf RlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSkKSW5kZXg6IGxpbnV4 LTIuNi4xNi4zOS9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBs aW51eC0yLjYuMTYuMzkub3JpZy9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYwkyMDA3LTAzLTEz IDIwOjM3OjEzLjE1ODY5OTA4OCArMDUzMAorKysgbGludXgtMi42LjE2LjM5L2FyY2gvcHBj L2tlcm5lbC90cmFwcy5jCTIwMDctMDMtMTMgMjA6Mzk6MDQuNTM5NzY2NTkyICswNTMwCkBA IC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CisjaW5jbHVkZSA8bGlu dXgva3Byb2Jlcy5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxh c20vdWFjY2Vzcy5oPgpAQCAtMzksNiArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS9yZWcuaD4K ICNpbmNsdWRlIDxhc20veG1vbi5oPgogI2luY2x1ZGUgPGFzbS9wbWMuaD4KKyNpbmNsdWRl IDxhc20va2RlYnVnLmg+CiAKICNpZmRlZiBDT05GSUdfWE1PTgogZXh0ZXJuIGludCB4bW9u X2JwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CkBAIC03MCw2ICs3MiwyMyBAQAogI2VuZGlm CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19LUFJPQkVTCitzdHJ1Y3Qgbm90aWZpZXJfYmxv Y2sgKnBwY19kaWVfY2hhaW47CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRpZV9ub3RpZmll cl9sb2NrKTsKKworaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJf YmxvY2sgKm5iKQoreworCWludCBlcnIgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmZGllX25vdGlmaWVyX2xvY2ssIGZsYWdzKTsKKwllcnIg PSBub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcHBjX2RpZV9jaGFpbiwgbmIpOworCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmRpZV9ub3RpZmllcl9sb2NrLCBmbGFncyk7CisJcmV0dXJu IGVycjsKK30KKworI2VuZGlmCisKIC8qCiAgKiBUcmFwICYgRXhjZXB0aW9uIHN1cHBvcnQK ICAqLwpAQCAtNDAyLDYgKzQyMSwxMSBAQAogCiB2b2lkIGluc3RydWN0aW9uX2JyZWFrcG9p bnRfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworI2lmZGVmIENPTkZJR19L UFJPQkVTCisJaWYgKG5vdGlmeV9kaWUoRElFX0lBQlJfTUFUQ0gsICJpYWJyX21hdGNoIiwg cmVncywgNSwKKwkJCQkJNSwgU0lHVFJBUCkgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsK KyNlbmRpZgogCWlmIChkZWJ1Z2dlcl9pYWJyX21hdGNoKHJlZ3MpKQogCQlyZXR1cm47CiAJ X2V4Y2VwdGlvbihTSUdUUkFQLCByZWdzLCBUUkFQX0JSS1BULCAwKTsKQEAgLTYyMiw3ICs2 NDYsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHByb2dyYW1fY2hlY2tfZXhjZXB0aW9u KHN0cnVjdCBwdF9yZWdzICpyZWdzKQordm9pZCBfX2twcm9iZXMgcHJvZ3JhbV9jaGVja19l eGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgaW50IHJlYXNv biA9IGdldF9yZWFzb24ocmVncyk7CiAJZXh0ZXJuIGludCBkb19tYXRoZW11KHN0cnVjdCBw dF9yZWdzICpyZWdzKTsKQEAgLTY3MSw2ICs2OTUsMTEgQEAKIAl9CiAKIAlpZiAocmVhc29u ICYgUkVBU09OX1RSQVApIHsKKyNpZmRlZiBDT05GSUdfS1BST0JFUworCQlpZiAobm90aWZ5 X2RpZShESUVfQlBULCAiYnJlYWtwb2ludCIsIHJlZ3MsIDUsIDUsIFNJR1RSQVApCisJCQkJ PT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm47CisjZW5kaWYKIAkJLyogdHJhcCBleGNlcHRp b24gKi8KIAkJaWYgKGRlYnVnZ2VyX2JwdChyZWdzKSkKIAkJCXJldHVybjsKQEAgLTc5Myw2 ICs4MjIsMjAgQEAKIHsKIAlpZiAoZGVidWdfc3RhdHVzICYgREJTUl9JQykgewkvKiBpbnN0 cnVjdGlvbiBjb21wbGV0aW9uICovCiAJCXJlZ3MtPm1zciAmPSB+TVNSX0RFOworCisjaWZk ZWYgQ09ORklHX0tQUk9CRVMKKworCS8qIERpc2FibGUgaW5zdHJ1Y3Rpb24gY29tcGxldGlv biAqLworCW10c3ByKFNQUk5fREJDUjAsIG1mc3ByKFNQUk5fREJDUjApICYgfkRCQ1IwX0lD KTsKKworCS8qIENsZWFyIHRoZSBpbnN0cnVjdGlvbiBjb21wbGV0aW9uIGV2ZW50ICovCisJ bXRzcHIoU1BSTl9EQlNSLCBEQlNSX0lDKTsKKworCWlmIChub3RpZnlfZGllKERJRV9TU1RF UCwgInNpbmdsZV9zdGVwIiwgcmVncywgNSwKKwkJCTUsIFNJR1RSQVApID09IE5PVElGWV9T VE9QKQorCQlyZXR1cm47CisjZW5kaWYKKwogCQlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CiAJ CQljdXJyZW50LT50aHJlYWQuZGJjcjAgJj0gfkRCQ1IwX0lDOwogCQl9IGVsc2UgewpJbmRl eDogbGludXgtMi42LjE2LjM5L2FyY2gvcHBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGxpbnV4LTIuNi4xNi4zOS5vcmlnL2FyY2gvcHBjL2tlcm5lbC92bWxp bnV4Lmxkcy5TCTIwMDctMDMtMTMgMjA6Mzc6MTMuMTU5Njk4OTM2ICswNTMwCisrKyBsaW51 eC0yLjYuMTYuMzkvYXJjaC9wcGMva2VybmVsL3ZtbGludXgubGRzLlMJMjAwNy0wMy0xMyAy MDozOTowNC41Mzk3NjY1OTIgKzA1MzAKQEAgLTMzLDYgKzMzLDcgQEAKICAgICAqKC50ZXh0 KQogICAgIFNDSEVEX1RFWFQKICAgICBMT0NLX1RFWFQKKyAgICBLUFJPQkVTX1RFWFQKICAg ICAqKC5maXh1cCkKICAgICAqKC5nb3QxKQogICAgIF9fZ290Ml9zdGFydCA9IC47CkluZGV4 OiBsaW51eC0yLjYuMTYuMzkvYXJjaC9wcGMvbW0vZmF1bHQuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBsaW51eC0yLjYuMTYuMzkub3JpZy9hcmNoL3BwYy9tbS9mYXVsdC5jCTIwMDctMDMtMTMg MjA6Mzc6MTMuMTU5Njk4OTM2ICswNTMwCisrKyBsaW51eC0yLjYuMTYuMzkvYXJjaC9wcGMv bW0vZmF1bHQuYwkyMDA3LTAzLTEzIDIwOjM5OjA0LjU0MTc2NjI4OCArMDUzMApAQCAtMjgs NiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxp bnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9rcHJvYmVzLmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFz bS9wZ3RhYmxlLmg+CkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5o PgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+ CisjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfWE1PTikg fHwgZGVmaW5lZChDT05GSUdfS0dEQikKIGV4dGVybiB2b2lkICgqZGVidWdnZXIpKHN0cnVj dCBwdF9yZWdzICopOwpAQCAtOTIsNyArOTQsNyBAQAogICogdGhlIGVycm9yX2NvZGUgcGFy YW1ldGVyIGlzIEVTUiBmb3IgYSBkYXRhIGZhdWx0LCAwIGZvciBhbiBpbnN0cnVjdGlvbgog ICogZmF1bHQuCiAgKi8KLWludCBkb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdz LCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCitpbnQgX19rcHJvYmVzIGRvX3BhZ2VfZmF1bHQo c3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJICB1bnNp Z25lZCBsb25nIGVycm9yX2NvZGUpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1h OwpAQCAtMTE2LDYgKzExOCwxMyBAQAogCQlpc193cml0ZSA9IGVycm9yX2NvZGUgJiAweDAy MDAwMDAwOwogI2VuZGlmIC8qIENPTkZJR180eHggfHwgQ09ORklHX0JPT0tFICovCiAKKyNp ZmRlZiBDT05GSUdfS1BST0JFUworCWlmIChub3RpZnlfZGllKERJRV9QQUdFX0ZBVUxULCAi cGFnZV9mYXVsdCIsIHJlZ3MsIGVycm9yX2NvZGUsCisJCQkJMTEsIFNJR1NFR1YpID09IE5P VElGWV9TVE9QKSB7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCiAjaWYgZGVmaW5lZChD T05GSUdfWE1PTikgfHwgZGVmaW5lZChDT05GSUdfS0dEQikKIAlpZiAoZGVidWdnZXJfZmF1 bHRfaGFuZGxlciAmJiBUUkFQKHJlZ3MpID09IDB4MzAwKSB7CiAJCWRlYnVnZ2VyX2ZhdWx0 X2hhbmRsZXIocmVncyk7CkluZGV4OiBsaW51eC0yLjYuMTYuMzkvaW5jbHVkZS9hc20tcG93 ZXJwYy9zc3RlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpbnV4LTIuNi4xNi4zOS5vcmlnL2lu Y2x1ZGUvYXNtLXBvd2VycGMvc3N0ZXAuaAkyMDA3LTAzLTEzIDIwOjM3OjEzLjE2MDY5ODc4 NCArMDUzMAorKysgbGludXgtMi42LjE2LjM5L2luY2x1ZGUvYXNtLXBvd2VycGMvc3N0ZXAu aAkyMDA3LTAzLTEzIDIwOjM5OjA0LjU0Mjc2NjEzNiArMDUzMApAQCAtMjEsNiArMjEsNyBA QAogICovCiAjZGVmaW5lIElTX01UTVNSRChpbnN0cikJKCgoaW5zdHIpICYgMHhmYzAwMDdi ZSkgPT0gMHg3YzAwMDEyNCkKICNkZWZpbmUgSVNfUkZJRChpbnN0cikJCSgoKGluc3RyKSAm IDB4ZmMwMDA3ZmUpID09IDB4NGMwMDAwMjQpCisjZGVmaW5lIElTX1JGSShpbnN0cikJCSgo KGluc3RyKSAmIDB4ZmMwMDA3ZmUpID09IDB4NGMwMDAwNjQpCiAKIC8qIEVtdWxhdGUgaW5z dHJ1Y3Rpb25zIHRoYXQgY2F1c2UgYSB0cmFuc2ZlciBvZiBjb250cm9sLiAqLwogZXh0ZXJu IGludCBlbXVsYXRlX3N0ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGludCBp bnN0cik7CkluZGV4OiBsaW51eC0yLjYuMTYuMzkvaW5jbHVkZS9hc20tcHBjL2tkZWJ1Zy5o Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAw MDAwMCArMDAwMAorKysgbGludXgtMi42LjE2LjM5L2luY2x1ZGUvYXNtLXBwYy9rZGVidWcu aAkyMDA3LTAzLTEzIDIwOjM5OjA0LjU0Mjc2NjEzNiArMDUzMApAQCAtMCwwICsxLDYwIEBA CisjaWZuZGVmIF9fUFBDX0tERUJVR19ICisjZGVmaW5lIF9fUFBDX0tERUJVR19ICisjaWZk ZWYgX19LRVJORUxfXworLyoKKyAqICBLZXJuZWwgUHJvYmVzIChLUHJvYmVzKQorICogIGlu Y2x1ZGUvYXNtLXBwYy9rZGVidWcuaAorICoKKyAqICBDb3B5cmlnaHQgMjAwNyBTb255IENv cnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Uu CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKK3N0cnVjdCBwdF9yZWdzOworCitzdHJ1 Y3QgZGllX2FyZ3MgeworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWNvbnN0IGNoYXIgKnN0 cjsKKwlsb25nIGVycjsKKwlpbnQgdHJhcG5yOworCWludCBzaWducjsKK307CisKKy8qCisg ICBOb3RlIC0geW91IHNob3VsZCBuZXZlciB1bnJlZ2lzdGVyIGJlY2F1c2UgdGhhdCBjYW4g cmFjZSB3aXRoIE5NSXMuCisgICBJZiB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gaXQgZmlyc3Qg dW5yZWdpc3RlciAtIHRoZW4gc3luY2hyb25pemVfc2NoZWQgLQorICAgdGhlbiBmcmVlLgor ICovCitpbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAq bmIpOworZXh0ZXJuIHN0cnVjdCBub3RpZmllcl9ibG9jayAqcHBjX2RpZV9jaGFpbjsKKwor LyogR3Jvc3NseSBtaXNuYW1lZC4gKi8KK2VudW0gZGllX3ZhbCB7CisJRElFX09PUFMgPSAx LAorCURJRV9JQUJSX01BVENILAorCURJRV9CUFQsCisJRElFX1NTVEVQLAorCURJRV9QQUdF X0ZBVUxULAorfTsKKworc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X2RpZShlbnVtIGRpZV92 YWwgdmFsLGNoYXIgKnN0cixzdHJ1Y3QgcHRfcmVncyAqcmVncyxsb25nIGVycixpbnQgdHJh cCwgaW50IHNpZykKK3sKKwlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsgLnJlZ3M9cmVncywg LnN0cj1zdHIsIC5lcnI9ZXJyLCAudHJhcG5yPXRyYXAsLnNpZ25yPXNpZyB9OworCXJldHVy biBub3RpZmllcl9jYWxsX2NoYWluKCZwcGNfZGllX2NoYWluLCB2YWwsICZhcmdzKTsKK30K KworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfX1BQQ19LREVCVUdfSCAq LwpJbmRleDogbGludXgtMi42LjE2LjM5L2luY2x1ZGUvYXNtLXBwYy9rcHJvYmVzLmgKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAw ICswMDAwCisrKyBsaW51eC0yLjYuMTYuMzkvaW5jbHVkZS9hc20tcHBjL2twcm9iZXMuaAky MDA3LTAzLTEzIDIwOjM5OjA0LjU0Mzc2NTk4NCArMDUzMApAQCAtMCwwICsxLDcxIEBACisj aWZuZGVmIF9fUFBDX0tQUk9CRVNfSAorI2RlZmluZSBfX1BQQ19LUFJPQkVTX0gKKyNpZmRl ZiBfX0tFUk5FTF9fCisvKgorICogIEtlcm5lbCBQcm9iZXMgKEtQcm9iZXMpCisgKiAgaW5j bHVkZS9hc20tcHBjL2twcm9iZXMuaAorICoKKyAqICBDb3B5cmlnaHQgMjAwNyBTb255IENv cnAuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Uu CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Cisj aW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisKKyNkZWZpbmUgIF9fQVJDSF9XQU5UX0tQUk9C RVNfSU5TTl9TTE9UCisKK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IGtwcm9iZTsKKwordHlw ZWRlZiB1bnNpZ25lZCBpbnQga3Byb2JlX29wY29kZV90OworI2RlZmluZSBCUkVBS1BPSU5U X0lOU1RSVUNUSU9OCTB4N2ZlMDAwMDgJLyogdHJhcCAqLworI2RlZmluZSBNQVhfSU5TTl9T SVpFIDEKKworI2RlZmluZSBJU19UVyhpbnN0cikJCSgoKGluc3RyKSAmIDB4ZmMwMDA3ZmUp ID09IDB4N2MwMDAwMDgpCisjZGVmaW5lIElTX1RXSShpbnN0cikJCSgoKGluc3RyKSAmIDB4 ZmMwMDAwMDApID09IDB4MGMwMDAwMDApCisKKyNkZWZpbmUgSlBST0JFX0VOVFJZKHBlbnRy eSkJKGtwcm9iZV9vcGNvZGVfdCAqKSgoZnVuY19kZXNjcl90ICopcGVudHJ5KQorCisjZGVm aW5lIGlzX3RyYXAoaW5zdHIpCShJU19UVyhpbnN0cikgfHwgSVNfVFdJKGluc3RyKSkKKwor I2RlZmluZSBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMKK3ZvaWQga3JldHByb2JlX3RyYW1w b2xpbmUodm9pZCk7CitleHRlcm4gdm9pZCBhcmNoX3JlbW92ZV9rcHJvYmUoc3RydWN0IGtw cm9iZSAqcCk7CisKKy8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb3B5IG9mIG9yaWdpbmFs IGluc3RydWN0aW9uICovCitzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKKwkvKiBjb3B5 IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uICovCisJa3Byb2JlX29wY29kZV90ICppbnNuOwor fTsKKworc3RydWN0IHByZXZfa3Byb2JlIHsKKwlzdHJ1Y3Qga3Byb2JlICprcDsKKwl1bnNp Z25lZCBsb25nIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIHNhdmVkX21zcjsKK307CisKKy8q IHBlci1jcHUga3Byb2JlIGNvbnRyb2wgYmxvY2sgKi8KK3N0cnVjdCBrcHJvYmVfY3RsYmxr IHsKKwl1bnNpZ25lZCBsb25nIGtwcm9iZV9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBrcHJv YmVfc2F2ZWRfbXNyOworCXN0cnVjdCBwdF9yZWdzIGpwcm9iZV9zYXZlZF9yZWdzOworCXN0 cnVjdCBwcmV2X2twcm9iZSBwcmV2X2twcm9iZTsKK307CisKK2V4dGVybiBpbnQga3Byb2Jl X2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkJ dW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpOworI2VuZGlmIC8qIF9fS0VSTkVMX18g Ki8KKyNlbmRpZgkvKiBfX1BQQ19LUFJPQkVTX0ggKi8K --Boundary_(ID_O4IYE6ljKqwoL5DTA2nGkA) Content-type: application/octet-stream; NAME=kprobes-kernel-test-module-20070313.patch Content-transfer-encoding: base64 Content-disposition: attachment; filename=kprobes-kernel-test-module-20070313.patch SW5kZXg6IGxpbnV4LTIuNi4xNi4zOS9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaW51 eC0yLjYuMTYuMzkub3JpZy9NYWtlZmlsZQkyMDA3LTAzLTEzIDIwOjM3OjEyLjA3NDg2Mzg1 NiArMDUzMAorKysgbGludXgtMi42LjE2LjM5L01ha2VmaWxlCTIwMDctMDMtMTMgMjA6Mzk6 MDYuMjQ0NTA3NDMyICswNTMwCkBAIC01NTksNyArNTU5LDcgQEAKIAogCiBpZmVxICgkKEtC VUlMRF9FWFRNT0QpLCkKLWNvcmUteQkJKz0ga2VybmVsLyBtbS8gZnMvIGlwYy8gc2VjdXJp dHkvIGNyeXB0by8gYmxvY2svCitjb3JlLXkJCSs9IGtlcm5lbC8gbW0vIGZzLyBpcGMvIHNl Y3VyaXR5LyBjcnlwdG8vIGJsb2NrLyBrcHJvYmUtdGVzdHMvCiAKIHZtbGludXgtZGlycwk6 PSAkKHBhdHN1YnN0ICUvLCUsJChmaWx0ZXIgJS8sICQoaW5pdC15KSAkKGluaXQtbSkgXAog CQkgICAgICQoY29yZS15KSAkKGNvcmUtbSkgJChkcml2ZXJzLXkpICQoZHJpdmVycy1tKSBc CkluZGV4OiBsaW51eC0yLjYuMTYuMzkva3Byb2JlLXRlc3RzL0tjb25maWcKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gL2Rldi9udWxsCTE5NzAtMDEtMDEgMDA6MDA6MDAuMDAwMDAwMDAwICswMDAw CisrKyBsaW51eC0yLjYuMTYuMzkva3Byb2JlLXRlc3RzL0tjb25maWcJMjAwNy0wMy0xMyAy MDozOTowNi4yNDU1MDcyODAgKzA1MzAKQEAgLTAsMCArMSwxMyBAQAorIworIyBLcHJvYmVz IHRlc3QgbW9kdWxlcyBjb25maWd1cmF0aW9uCisjCitjb25maWcgS1BST0JFU1RFU1QKKwl0 cmlzdGF0ZSAiS3Byb2JlcyB0ZXN0IG1vZHVsZXMiCisJZGVwZW5kcyBvbiBLUFJPQkVTCisJ ZGVmYXVsdCBtIGlmIEtQUk9CRVM9eQorCWhlbHAKKwkgIFRoaXMgc3VwcG9ydCBpZiBlbmFi bGVkLCB3aWxsIGJlIHVzZWQgdG8gdGVzdCB0aGUga3Byb2JlcyBzdXBwb3J0LgorCisJICBU byBjb21waWxlIHRoaXMga3Byb2JlIHRlc3Qgc3VwcG9ydCBhcyBhIG1vZHVsZSwgY2hvb3Nl IE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgay0wMHgoeCB3aWxsIGJl IGFueSBudW1iZXIgaW4gMSwyLC4uLi45KS4KKwkgIElmIGluIGRvdWJ0LCBzYXkgIk4iCklu ZGV4OiBsaW51eC0yLjYuMTYuMzkva3Byb2JlLXRlc3RzL01ha2VmaWxlCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAor KysgbGludXgtMi42LjE2LjM5L2twcm9iZS10ZXN0cy9NYWtlZmlsZQkyMDA3LTAzLTEzIDIw OjM5OjA2LjI0NTUwNzI4MCArMDUzMApAQCAtMCwwICsxLDUgQEAKKyMKKyMgTWFrZWZpbGUg Zm9yIHRoZSBLcHJvYmVzIHRlc3QgbW9kdWxlcyBrZXJuZWwuCisjCitvYmotJChDT05GSUdf S1BST0JFU1RFU1QpICs9IGstMDAxLm8gay0wMDIubyBrLTAwMy5vIGstMDA0Lm8gay0wMDUu byBrLTAwNi5vIFwKKwkJCQlrLTAwNy5vIGstMDA4Lm8gay0wMDkubwpJbmRleDogbGludXgt Mi42LjE2LjM5L2twcm9iZS10ZXN0cy9rLTAwMS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYv bnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysgbGludXgtMi42 LjE2LjM5L2twcm9iZS10ZXN0cy9rLTAwMS5jCTIwMDctMDMtMTMgMjA6Mzk6MDYuMjQ2NTA3 MTI4ICswNTMwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiAgay0wMDEuYyAtIEEgS3Byb2Jl IHdpdGggcHJvYmUgcG9pbnQgdG8gdGhlIGtlcm5lbCBmdW5jdGlvbiAnZG9fZm9yaycuCisg KgorICogIENvcHlyaWdodCAyMDA3IFNvbnkgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s IE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+ CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgor I2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5o PgorI2luY2x1ZGUgImtwcm9iZXMtdGVzdC5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfUFBD MzIpCitleHRlcm4gdm9pZCBzaG93X2FsbHJlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwor I2VuZGlmCitzdGF0aWMgc3RydWN0IGtwcm9iZSBrXzAwMV9rcHI7CisKK3N0YXRpYyB2b2lk IF9fZXhpdCBrXzAwMV9leGl0X3Byb2JlKHZvaWQpCit7CisJcHJpbnRrKCJcbk1vZHVsZSBl eGl0aW5nIGZyb20gZG9fZm9yayBcbiIpOworCXVucmVnaXN0ZXJfa3Byb2JlKCZrXzAwMV9r cHIpOworfQorCitzdGF0aWMgaW50IGtfMDAxX2JlZm9yZV9ob29rKHN0cnVjdCBrcHJvYmUg KmtfMDAxX2twciwgc3RydWN0IHB0X3JlZ3MgKnApCit7CisJcHJpbnRrKCJcbkJlZm9yZSBo b29rIGluIGRvX2ZvcmsiKTsKKwlwcmludGsoIlxuVGhpcyBpcyB0aGUgS3Byb2JlIHByZSBc biIKKwkgICAgICAgImhhbmRsZXIgZm9yIGluc3RydWN0aW9uIGF0ICVwXG4iLCBrXzAwMV9r cHItPmFkZHIpOworCXByaW50aygiU3RhY2sgRHVtcCA6XG4iKTsKKwlkdW1wX3N0YWNrKCk7 CisJcHJpbnRrKCJUaGUgUmVnaXN0ZXJzIGFyZTpcbiIpOworI2lmIGRlZmluZWQoQ09ORklH X1BQQzMyKQorCXNob3dfYWxscmVncyhwKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IGtfMDAxX2FmdGVyX2hvb2soc3RydWN0IGtwcm9iZSAqa18wMDFfa3ByLAor CQkJICAgIHN0cnVjdCBwdF9yZWdzICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXBy aW50aygiXG5BZnRlciBob29rIGluIGRvX2ZvcmsiKTsKKwlwcmludGsoIlxuVGhpcyBpcyB0 aGUgS3Byb2JlIHBvc3QgXG4iCisJICAgICAgICJoYW5kbGVyIGZvciBpbnN0cnVjdGlvbiBh dCIgIiAlcFxuIiwga18wMDFfa3ByLT5hZGRyKTsKKwlwcmludGsoIlN0YWNrIER1bXAgOlxu Iik7CisJZHVtcF9zdGFjaygpOworCXByaW50aygiVGhlIFJlZ2lzdGVycyBhcmU6XG4iKTsK KyNpZiBkZWZpbmVkKENPTkZJR19QUEMzMikKKwlzaG93X2FsbHJlZ3MocCk7CisjZW5kaWYK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQga18wMDFfaW5pdF9wcm9iZSh2 b2lkKQoreworCXByaW50aygiXG5JbnNlcnRpbmcgdGhlIGtwcm9iZSBmb3IgZG9fZm9ya1xu Iik7CisKKwkvKiBSZWdpc3RlcmluZyBhIGtwcm9iZSAqLworCWtfMDAxX2twci5wcmVfaGFu ZGxlciA9IChrcHJvYmVfcHJlX2hhbmRsZXJfdCkga18wMDFfYmVmb3JlX2hvb2s7CisJa18w MDFfa3ByLnBvc3RfaGFuZGxlciA9IChrcHJvYmVfcG9zdF9oYW5kbGVyX3QpIGtfMDAxX2Fm dGVyX2hvb2s7CisJa18wMDFfa3ByLmFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopIGthbGxz eW1zX2xvb2t1cF9uYW1lKCJkb19mb3JrIik7CisJaWYgKGtfMDAxX2twci5hZGRyID09IE5V TEwpIHsKKwkJcHJpbnRrKCJrYWxsc3ltc19sb29rdXBfbmFtZSBjb3VsZCBub3QgZmluZCBh ZGRyZXNzICIKKwkJICAgICAgICJmb3IgdGhlIHNwZWNpZmllZCBzeW1ib2wgbmFtZVxuIik7 CisJCXJldHVybiAxOworCX0KKworCXByaW50aygiXG5BZGRyZXNzIHdoZXJlIHRoZSBrcHJv YmUgaXMgXG4iCisJICAgICAgICJnb2luZyB0byBiZSBpbnNlcnRlZCAtICVwXG4iLCBrXzAw MV9rcHIuYWRkcik7CisJcmVnaXN0ZXJfa3Byb2JlKCZrXzAwMV9rcHIpOworCXJldHVybiAw OworfQorCittb2R1bGVfaW5pdChrXzAwMV9pbml0X3Byb2JlKTsKK21vZHVsZV9leGl0KGtf MDAxX2V4aXRfcHJvYmUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIktwcm9iZXMgdGVzdCBt b2R1bGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKSW5kZXg6IGxpbnV4LTIuNi4xNi4z OS9rcHJvYmUtdGVzdHMvay0wMDIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3 MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIGxpbnV4LTIuNi4xNi4zOS9r cHJvYmUtdGVzdHMvay0wMDIuYwkyMDA3LTAzLTEzIDIwOjM5OjA2LjI0NzUwNjk3NiArMDUz MApAQCAtMCwwICsxLDk1IEBACisvKgorICogay0wMDIuYyAtIE11bHRpcGxlIEtwcm9iZXMg d2l0aCB0aGUgc2FtZSBwcm9iZSBwb2ludCBmb3IgdGhlIGtlcm5lbAorICogZnVuY3Rpb24g J2RvX2ZvcmsnLgorICoKKyAqICBDb3B5cmlnaHQgMjAwNyBTb255IENvcnAuCisgKgorICog IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg KiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRl IDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxp bnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxp bnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CisjaW5jbHVkZSA8bGlu dXgva2FsbHN5bXMuaD4KKworc3RhdGljIHN0cnVjdCBrcHJvYmUga18wMDJfa3AxOworc3Rh dGljIHN0cnVjdCBrcHJvYmUga18wMDJfa3AyOworCitzdGF0aWMgdm9pZCBfX2V4aXQga18w MDJfZXhpdF9wcm9iZSh2b2lkKQoreworCXByaW50aygiXG5Nb2R1bGUgZXhpdGluZyIpOwor CXByaW50aygiMiBrcHJvYmVzIGZyb20gZG8tZm9ya1xuIik7CisJdW5yZWdpc3Rlcl9rcHJv YmUoJmtfMDAyX2twMik7CisJdW5yZWdpc3Rlcl9rcHJvYmUoJmtfMDAyX2twMSk7Cit9CisK K3N0YXRpYyBpbnQga18wMDJfYmVmb3JlX2hvb2soc3RydWN0IGtwcm9iZSAqa18wMDJfa3Ax LCBzdHJ1Y3QgcHRfcmVncyAqcCkKK3sKKwlwcmludGsoIlxuQmVmb3JlIGhvb2sgMXN0IGRv X2ZvcmtcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtfMDAyX2FmdGVyX2hv b2soc3RydWN0IGtwcm9iZSAqa18wMDJfa3AxLAorCQkJICAgIHN0cnVjdCBwdF9yZWdzICpw LCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXByaW50aygiXG5BZnRlciBob29rIDFzdCBk b19mb3JrXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrXzAwMl9wcmVfaGFu ZGxlcihzdHJ1Y3Qga3Byb2JlICprXzAwMl9rcDIsIHN0cnVjdCBwdF9yZWdzICpwKQorewor CXByaW50aygiXG5CZWZvcmUgaG9vayAybmQgZG9fZm9ya1xuIik7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQga18wMDJfcG9zdF9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKmtfMDAy X2twMiwKKwkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpwLCB1bnNpZ25lZCBsb25nIGZsYWdz KQoreworCXByaW50aygiXG5BZnRlciBob29rIDJuZCBkb19mb3JrXG4iKTsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBfX2luaXQga18wMDJfaW5pdF9wcm9iZSh2b2lkKQorewor CXByaW50aygiXG5JbnNlcnRpbmcgdHdvIGtwcm9iZXMgYXQgdGhlIHNhbWUgcHJvYmUgcG9p bnRcbiIpOworCisJLyogUmVnaXN0ZXJpbmcgYSBrcHJvYmUgKi8KKwlrXzAwMl9rcDEucHJl X2hhbmRsZXIgPSAoa3Byb2JlX3ByZV9oYW5kbGVyX3QpIGtfMDAyX2JlZm9yZV9ob29rOwor CWtfMDAyX2twMS5wb3N0X2hhbmRsZXIgPSAoa3Byb2JlX3Bvc3RfaGFuZGxlcl90KSBrXzAw Ml9hZnRlcl9ob29rOworCisJa18wMDJfa3AyLnByZV9oYW5kbGVyID0gKGtwcm9iZV9wcmVf aGFuZGxlcl90KSBrXzAwMl9wcmVfaGFuZGxlcjsKKwlrXzAwMl9rcDIucG9zdF9oYW5kbGVy ID0gKGtwcm9iZV9wb3N0X2hhbmRsZXJfdCkga18wMDJfcG9zdF9oYW5kbGVyOworCWtfMDAy X2twMi5hZGRyID0ga18wMDJfa3AxLmFkZHIgPQorCSAgICAoa3Byb2JlX29wY29kZV90ICop IGthbGxzeW1zX2xvb2t1cF9uYW1lKCJkb19mb3JrIik7CisJaWYgKChrXzAwMl9rcDEuYWRk ciA9PSBOVUxMKSB8fCAoa18wMDJfa3AyLmFkZHIgPT0gTlVMTCkpIHsKKwkJcHJpbnRrKCJr YWxsc3ltc19sb29rdXBfbmFtZSBjb3VsZCBub3QgZmluZCBhZGRyZXNzICIKKwkJICAgICAg ICJmb3IgdGhlIHNwZWNpZmllZCBzeW1ib2wgbmFtZVxuIik7CisJCXJldHVybiAxOworCX0K KworCXByaW50aygiXG5BZGRyZXNzIHdoZXJlIHRoZSB0d28ga3Byb2JlcyBhcmUgXG4iCisJ ICAgICAgICJnb2luZyB0byBiZSBpbnNlcnRlZCAtICVwIGFuZCAlcFxuIiwga18wMDJfa3Ax LmFkZHIsCisJICAgICAgIGtfMDAyX2twMi5hZGRyKTsKKwlyZWdpc3Rlcl9rcHJvYmUoJmtf MDAyX2twMSk7CisJcmVnaXN0ZXJfa3Byb2JlKCZrXzAwMl9rcDIpOworCisJcmV0dXJuIDA7 Cit9CisKK21vZHVsZV9pbml0KGtfMDAyX2luaXRfcHJvYmUpOworbW9kdWxlX2V4aXQoa18w MDJfZXhpdF9wcm9iZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiS3Byb2JlcyB0ZXN0IG1v ZHVsZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpJbmRleDogbGludXgtMi42LjE2LjM5 L2twcm9iZS10ZXN0cy9rLTAwMy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAkxOTcw LTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysgbGludXgtMi42LjE2LjM5L2tw cm9iZS10ZXN0cy9rLTAwMy5jCTIwMDctMDMtMTMgMjA6Mzk6MDYuMjQ4NTA2ODI0ICswNTMw CkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiAgay0wMDMuYyAtIE11bHRpcGxlIGtwcm9iZXMg d2l0aCB0aGUgZGlmZmVyZW50IHByb2JlIHBvaW50IGZvciB0aGUga2VybmVsCisgKiAgZnVu Y3Rpb24gJ2RvX2ZvcmsnIGFuZCAnc3lzX2dldHRpbWVvZmRheScuCisgKgorICogIENvcHly aWdodCAyMDA3IFNvbnkgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24g MiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s IEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0x MzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxp bnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorCitzdGF0aWMg c3RydWN0IGtwcm9iZSBrXzAwM19rcDE7CitzdGF0aWMgc3RydWN0IGtwcm9iZSBrXzAwM19r cDI7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrXzAwM19leGl0X3Byb2JlKHZvaWQpCit7CisJ cHJpbnRrKCJcbk1vZHVsZSBleGl0aW5nIik7CisJcHJpbnRrKCJcbjIga3Byb2JlcyBmcm9t IGRvLWZvcmsgYW5kIHN5c19nZXR0aW1lb2ZkYXlcbiIpOworCXVucmVnaXN0ZXJfa3Byb2Jl KCZrXzAwM19rcDIpOworCXVucmVnaXN0ZXJfa3Byb2JlKCZrXzAwM19rcDEpOworfQorCitz dGF0aWMgaW50IGtfMDAzX2JlZm9yZV9ob29rKHN0cnVjdCBrcHJvYmUgKmtfMDAzX2twMSwg c3RydWN0IHB0X3JlZ3MgKnApCit7CisJcHJpbnRrKCJcbkJlZm9yZSBob29rIGluIGRvX2Zv cmtcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtfMDAzX2FmdGVyX2hvb2so c3RydWN0IGtwcm9iZSAqa18wMDNfa3AxLAorCQkJICAgIHN0cnVjdCBwdF9yZWdzICpwLCB1 bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXByaW50aygiXG5BZnRlciBob29rIGluIGRvX2Zv cmtcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtfMDAzX3ByZV9oYW5kbGVy KHN0cnVjdCBrcHJvYmUgKmtfMDAzX2twMiwgc3RydWN0IHB0X3JlZ3MgKnApCit7CisJcHJp bnRrKCJcbkJlZm9yZSBob29rIGluIHN5c19nZXR0aW1lb2ZkYXlcbiIpOworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGtfMDAzX3Bvc3RfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICpr XzAwM19rcDIsCisJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcCwgdW5zaWduZWQgbG9uZyBm bGFncykKK3sKKwlwcmludGsoIlxuQWZ0ZXIgaG9vayBpbiBzeXNfZ2V0dGltZW9mZGF5XG4i KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQga18wMDNfaW5pdF9wcm9i ZSh2b2lkKQoreworCXByaW50aygiXG5JbnNlcnRpbmcgdHdvIGtwcm9iZXMgYXQgZGlmZmVy bnQgcHJvYmUgcG9pbnRcbiIpOworCisJLyogUmVnaXN0ZXJpbmcgYSBrcHJvYmUgKi8KKwlr XzAwM19rcDEucHJlX2hhbmRsZXIgPSAoa3Byb2JlX3ByZV9oYW5kbGVyX3QpIGtfMDAzX2Jl Zm9yZV9ob29rOworCWtfMDAzX2twMS5wb3N0X2hhbmRsZXIgPSAoa3Byb2JlX3Bvc3RfaGFu ZGxlcl90KSBrXzAwM19hZnRlcl9ob29rOworCisJa18wMDNfa3AyLnByZV9oYW5kbGVyID0g KGtwcm9iZV9wcmVfaGFuZGxlcl90KSBrXzAwM19wcmVfaGFuZGxlcjsKKwlrXzAwM19rcDIu cG9zdF9oYW5kbGVyID0gKGtwcm9iZV9wb3N0X2hhbmRsZXJfdCkga18wMDNfcG9zdF9oYW5k bGVyOworCWtfMDAzX2twMS5hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSBrYWxsc3ltc19s b29rdXBfbmFtZSgiZG9fZm9yayIpOworCWtfMDAzX2twMi5hZGRyID0KKwkgICAgKGtwcm9i ZV9vcGNvZGVfdCAqKSBrYWxsc3ltc19sb29rdXBfbmFtZSgic3lzX2dldHRpbWVvZmRheSIp OworCisJaWYgKChrXzAwM19rcDEuYWRkciA9PSBOVUxMKSB8IChrXzAwM19rcDIuYWRkciA9 PSBOVUxMKSkgeworCQlwcmludGsoImthbGxzeW1zX2xvb2t1cF9uYW1lIGNvdWxkIG5vdCBm aW5kIGFkZHJlc3MgIgorCQkgICAgICAgImZvciB0aGUgc3BlY2lmaWVkIHN5bWJvbCBuYW1l XG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHJpbnRrKCJcbkFkZHJlc3Mgd2hlcmUgdGhl IGtwcm9iZXMgYXJlIFxuIgorCSAgICAgICAiZ29pbmcgdG8gYmUgaW5zZXJ0ZWQgLSAlcCAg YW5kICAlcFxuIiwga18wMDNfa3AxLmFkZHIsCisJICAgICAgIGtfMDAzX2twMi5hZGRyKTsK KwlyZWdpc3Rlcl9rcHJvYmUoJmtfMDAzX2twMSk7CisJcmVnaXN0ZXJfa3Byb2JlKCZrXzAw M19rcDIpOworCisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KGtfMDAzX2luaXRfcHJv YmUpOworbW9kdWxlX2V4aXQoa18wMDNfZXhpdF9wcm9iZSk7CisKK01PRFVMRV9ERVNDUklQ VElPTigiS3Byb2JlcyB0ZXN0IG1vZHVsZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpJ bmRleDogbGludXgtMi42LjE2LjM5L2twcm9iZS10ZXN0cy9rLTAwNC5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAor KysgbGludXgtMi42LjE2LjM5L2twcm9iZS10ZXN0cy9rLTAwNC5jCTIwMDctMDMtMTMgMjA6 Mzk6MDYuMjQ5NTA2NjcyICswNTMwCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogIGstMDA0 LmMgLSBLcHJvYmVzIHdpdGggdGhlIGZhdWx0IGhhbmRsZXIgZm9yIHRoZSBrZXJuZWwgZnVu Y3Rpb24KKyAqICAnc3lzX2dldHRpbWVvZmRheScuCisgKgorICogIENvcHlyaWdodCAyMDA3 IFNvbnkgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5 IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EK KyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9i ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorI2luY2x1ZGUgImtwcm9iZXMt dGVzdC5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpCitleHRlcm4gdm9pZCBzaG93 X2FsbHJlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworI2VuZGlmCitzdGF0aWMgc3RydWN0 IGtwcm9iZSBrXzAwNF9rcHI7CisKK3ZvaWQga18wMDRfQ1BZX0ZST01fVVNFUihzdHJ1Y3Qg ZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCisJY2hhciB4ID0gJ2EnOwor CisJaWYgKHB1dF91c2VyKHgsIGJ1ZikpIHsKKwkJcHJpbnRrKCJwdXRfdXNlciA6IC1FRkFV TFRcbiIpOworCX0KKworCXByaW50aygiQ1BZX0ZST01fVVNFUlxuIik7Cit9CisKK3N0YXRp YyB2b2lkIF9fZXhpdCBrXzAwNF9leGl0X3Byb2JlKHZvaWQpCit7CisJcHJpbnRrKCJcbk1v ZHVsZSBleGl0aW5nIGZyb20gc3lzX2dldHRpbWVvZmRheSBcbiIpOworCXVucmVnaXN0ZXJf a3Byb2JlKCZrXzAwNF9rcHIpOworfQorCitzdGF0aWMgaW50IGtfMDA0X2JlZm9yZV9ob29r KHN0cnVjdCBrcHJvYmUgKmtfMDA0X2twciwgc3RydWN0IHB0X3JlZ3MgKnApCit7CisJaW50 IGxlbiA9IDUwMDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKworCXByaW50aygiXG5CZWZvcmUg aG9vayBpbiBzeXNfZ2V0dGltZW9mZGF5Iik7CisJcHJpbnRrKCJcblRoaXMgaXMgdGhlIEtw cm9iZSBwcmUgXG4iCisJICAgICAgICJoYW5kbGVyIGZvciBpbnN0cnVjdGlvbiBhdCIgIiVw XG4iLCBrXzAwNF9rcHItPmFkZHIpOworCXByaW50aygiU3RhY2sgRHVtcDpcbiIpOworCWR1 bXBfc3RhY2soKTsKKwlwcmludGsoIlRoZSBSZWdpc3RlcnMgYXJlOlxuIik7CisjaWYgZGVm aW5lZChDT05GSUdfUFBDMzIpCisJc2hvd19hbGxyZWdzKHApOworI2VuZGlmCisJa18wMDRf Q1BZX0ZST01fVVNFUihmaWxlLCBOVUxMLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGtfMDA0X2FmdGVyX2hvb2soc3RydWN0IGtwcm9iZSAqa18wMDRfa3ByLAorCQkJ ICAgIHN0cnVjdCBwdF9yZWdzICpwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXByaW50 aygiXG5BZnRlciBob29rIGluIHN5c19nZXR0aW1lb2ZkYXkiKTsKKwlwcmludGsoIlxuVGhp cyBpcyB0aGUgS3Byb2JlIHBvc3QgXG4iCisJICAgICAgICJoYW5kbGVyIGZvciBpbnN0cnVj dGlvbiBhdCIgIiAlcFxuIiwga18wMDRfa3ByLT5hZGRyKTsKKwlwcmludGsoIlN0YWNrIER1 bXA6XG4iKTsKKwlkdW1wX3N0YWNrKCk7CisJcHJpbnRrKCJUaGUgUmVnaXN0ZXJzIGFyZTpc biIpOworI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKQorCXNob3dfYWxscmVncyhwKTsKKyNl bmRpZgorCXJldHVybiAwOworfQorCitpbnQga18wMDRfZmF1bHRfcHJvYmUoc3RydWN0IGtw cm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCB0cmFwbnIpCit7CisJcHJpbnRr KCJcblRoaXMgaXMgdGhlIEtwcm9iZSBmYXVsdCBcbiIKKwkgICAgICAgImhhbmRsZXIgZm9y IHN5c19nZXR0aW1lb2RkYXlcbiIpOworCXByaW50aygiZmF1bHRfaGFuZGxlcjpwLT5hZGRy PTB4JXBcbiIsIHAtPmFkZHIpOworCXByaW50aygiU3RhY2sgRHVtcDpcbiIpOworCWR1bXBf c3RhY2soKTsKKwlwcmludGsoIlRoZSBSZWdpc3RlcnMgYXJlOlxuIik7CisjaWYgZGVmaW5l ZChDT05GSUdfUFBDMzIpCisJc2hvd19hbGxyZWdzKHJlZ3MpOworI2VuZGlmCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGtfMDA0X2luaXRfcHJvYmUodm9pZCkKK3sK KwlwcmludGsoIlxuSW5zZXJ0aW5nIHRoZSBrcHJvYmVzICBmb3Igc3lzX2dldHRpbWVvZmRh eVxuIik7CisKKwkvKiBSZWdpc3RlcmluZyBhIGtwcm9iZSAqLworCWtfMDA0X2twci5wcmVf aGFuZGxlciA9IChrcHJvYmVfcHJlX2hhbmRsZXJfdCkga18wMDRfYmVmb3JlX2hvb2s7CisJ a18wMDRfa3ByLnBvc3RfaGFuZGxlciA9IChrcHJvYmVfcG9zdF9oYW5kbGVyX3QpIGtfMDA0 X2FmdGVyX2hvb2s7CisJa18wMDRfa3ByLmZhdWx0X2hhbmRsZXIgPSAoa3Byb2JlX2ZhdWx0 X2hhbmRsZXJfdCkga18wMDRfZmF1bHRfcHJvYmU7CisJa18wMDRfa3ByLmFkZHIgPQorCSAg ICAoa3Byb2JlX29wY29kZV90ICopIGthbGxzeW1zX2xvb2t1cF9uYW1lKCJzeXNfZ2V0dGlt ZW9mZGF5Iik7CisJaWYgKGtfMDA0X2twci5hZGRyID09IE5VTEwpIHsKKwkJcHJpbnRrKCJr YWxsc3ltc19sb29rdXBfbmFtZSBjb3VsZCBub3QgZmluZCBhZGRyZXNzICIKKwkJICAgICAg ICJmb3IgdGhlIHNwZWNpZmllZCBzeW1ib2wgbmFtZVxuIik7CisJCXJldHVybiAxOworCX0K KworCXByaW50aygiXG5BZGRyZXNzIHdoZXJlIHRoZSBrcHJvYmUgaXMgXG4iCisJICAgICAg ICJnb2luZyB0byBiZSBpbnNlcnRlZCAtICVwXG4iLCBrXzAwNF9rcHIuYWRkcik7CisJcmVn aXN0ZXJfa3Byb2JlKCZrXzAwNF9rcHIpOworCXJldHVybiAwOworfQorCittb2R1bGVfaW5p dChrXzAwNF9pbml0X3Byb2JlKTsKK21vZHVsZV9leGl0KGtfMDA0X2V4aXRfcHJvYmUpOwor CitNT0RVTEVfREVTQ1JJUFRJT04oIktwcm9iZXMgdGVzdCBtb2R1bGUiKTsKK01PRFVMRV9M SUNFTlNFKCJHUEwiKTsKSW5kZXg6IGxpbnV4LTIuNi4xNi4zOS9rcHJvYmUtdGVzdHMvay0w MDUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4w MDAwMDAwMDAgKzAwMDAKKysrIGxpbnV4LTIuNi4xNi4zOS9rcHJvYmUtdGVzdHMvay0wMDUu YwkyMDA3LTAzLTEzIDIwOjM5OjA2LjI0OTUwNjY3MiArMDUzMApAQCAtMCwwICsxLDcyIEBA CisvKgorICogIGstMDA1LmMgLSBBIEtwcm9iZSB3aXRoIHByb2JlIHBvaW50IHRvIHRoZSBr ZXJuZWwgZnVuY3Rpb24gc3lzX3JlYWQuCisgKgorICogIENvcHlyaWdodCAyMDA3IFNvbnkg Q29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICog IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs ZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLwor CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4K KyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorCitzdGF0aWMgc3RydWN0IGtwcm9iZSBr XzAwNV9rcHI7CitzdGF0aWMgaW50IGtfMDA1X2tyX2twcm9iZV9yZWFkX2NudDsKKworc3Rh dGljIHZvaWQgX19leGl0IGtfMDA1X2V4aXRfcHJvYmUodm9pZCkKK3sKKwlwcmludGsoImtl cm5lbCBrcHJvYmVfcmVhZF9jbnQgaXMgJWQgXG4iLCBrXzAwNV9rcl9rcHJvYmVfcmVhZF9j bnQpOworCXByaW50aygiXG5Nb2R1bGUgZXhpdGluZyBmcm9tIHN5c19yZWFkIFxuIik7CisJ dW5yZWdpc3Rlcl9rcHJvYmUoJmtfMDA1X2twcik7Cit9CisKK3N0YXRpYyBpbnQga18wMDVf YmVmb3JlX2hvb2soc3RydWN0IGtwcm9iZSAqa3ByLCBzdHJ1Y3QgcHRfcmVncyAqcCkKK3sK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrXzAwNV9hZnRlcl9ob29rKHN0cnVjdCBr cHJvYmUgKmtwciwKKwkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcCwgdW5zaWduZWQgbG9uZyBm bGFncykKK3sKKwlrXzAwNV9rcl9rcHJvYmVfcmVhZF9jbnQrKzsKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBfX2luaXQga18wMDVfaW5pdF9wcm9iZSh2b2lkKQoreworCXByaW50 aygiXG5JbnNlcnRpbmcgdGhlIGtwcm9iZSBmb3Igc3lzX3JlYWRcbiIpOworCisJLyogUmVn aXN0ZXJpbmcgYSBrcHJvYmUgKi8KKwlrXzAwNV9rcHIucHJlX2hhbmRsZXIgPSAoa3Byb2Jl X3ByZV9oYW5kbGVyX3QpIGtfMDA1X2JlZm9yZV9ob29rOworCWtfMDA1X2twci5wb3N0X2hh bmRsZXIgPSAoa3Byb2JlX3Bvc3RfaGFuZGxlcl90KSBrXzAwNV9hZnRlcl9ob29rOworCWtf MDA1X2twci5hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSBrYWxsc3ltc19sb29rdXBfbmFt ZSgic3lzX3JlYWQiKTsKKwlpZiAoa18wMDVfa3ByLmFkZHIgPT0gTlVMTCkgeworCQlwcmlu dGsoImthbGxzeW1zX2xvb2t1cF9uYW1lIGNvdWxkIG5vdCBmaW5kIGFkZHJlc3MgIgorCQkg ICAgICAgImZvciB0aGUgc3BlY2lmaWVkIHN5bWJvbCBuYW1lXG4iKTsKKwkJcmV0dXJuIDE7 CisJfQorCisJcHJpbnRrKCJcbkFkZHJlc3Mgd2hlcmUgdGhlIGtwcm9iZSBpcyBcbiIKKwkg ICAgICAgImdvaW5nIHRvIGJlIGluc2VydGVkIC0gJXBcbiIsIGtfMDA1X2twci5hZGRyKTsK KwlyZWdpc3Rlcl9rcHJvYmUoJmtfMDA1X2twcik7CisJcmV0dXJuIDA7Cit9CisKK21vZHVs ZV9pbml0KGtfMDA1X2luaXRfcHJvYmUpOworbW9kdWxlX2V4aXQoa18wMDVfZXhpdF9wcm9i ZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiS3Byb2JlcyB0ZXN0IG1vZHVsZSIpOworTU9E VUxFX0xJQ0VOU0UoIkdQTCIpOwpJbmRleDogbGludXgtMi42LjE2LjM5L2twcm9iZS10ZXN0 cy9rLTAwNi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAw OjAwLjAwMDAwMDAwMCArMDAwMAorKysgbGludXgtMi42LjE2LjM5L2twcm9iZS10ZXN0cy9r LTAwNi5jCTIwMDctMDMtMTMgMjA6Mzk6MDYuMjUwNTA2NTIwICswNTMwCkBAIC0wLDAgKzEs NzIgQEAKKy8qCisgKiAgay0wMDYuYyAtIEEgS3Byb2JlIHdpdGggcHJvYmUgcG9pbnQgdG8g dGhlIGtlcm5lbCBmdW5jdGlvbiBzeXNfd3JpdGUuCisgKgorICogIENvcHlyaWdodCAyMDA3 IFNvbnkgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5 IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EK KyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9k dWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9i ZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgorCitzdGF0aWMgc3RydWN0IGtw cm9iZSBrXzAwNl9rcHI7CitzdGF0aWMgaW50IGtfMDA2X2tyX2twcm9iZV93cml0ZV9jbnQ7 CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrXzAwNl9leGl0X3Byb2JlKHZvaWQpCit7CisJcHJp bnRrKCJrZXJuZWwga3Byb2JlX3dyaXRlX2NudCBpcyAlZCBcbiIsIGtfMDA2X2tyX2twcm9i ZV93cml0ZV9jbnQpOworCXByaW50aygiXG5Nb2R1bGUgZXhpdGluZyBmcm9tIHN5c193cml0 ZSBcbiIpOworCXVucmVnaXN0ZXJfa3Byb2JlKCZrXzAwNl9rcHIpOworfQorCitzdGF0aWMg aW50IGtfMDA2X2JlZm9yZV9ob29rKHN0cnVjdCBrcHJvYmUgKmtwciwgc3RydWN0IHB0X3Jl Z3MgKnApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga18wMDZfYWZ0ZXJfaG9v ayhzdHJ1Y3Qga3Byb2JlICprcHIsCisJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnAsIHVuc2ln bmVkIGxvbmcgZmxhZ3MpCit7CisJa18wMDZfa3Jfa3Byb2JlX3dyaXRlX2NudCsrOworCXJl dHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBrXzAwNl9pbml0X3Byb2JlKHZvaWQp Cit7CisJcHJpbnRrKCJcbkluc2VydGluZyB0aGUga3Byb2JlIGZvciBzeXNfd3JpdGVcbiIp OworCisJLyogUmVnaXN0ZXJpbmcgYSBrcHJvYmUgKi8KKwlrXzAwNl9rcHIucHJlX2hhbmRs ZXIgPSAoa3Byb2JlX3ByZV9oYW5kbGVyX3QpIGtfMDA2X2JlZm9yZV9ob29rOworCWtfMDA2 X2twci5wb3N0X2hhbmRsZXIgPSAoa3Byb2JlX3Bvc3RfaGFuZGxlcl90KSBrXzAwNl9hZnRl cl9ob29rOworCWtfMDA2X2twci5hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSBrYWxsc3lt c19sb29rdXBfbmFtZSgic3lzX3dyaXRlIik7CisJaWYgKGtfMDA2X2twci5hZGRyID09IE5V TEwpIHsKKwkJcHJpbnRrKCJrYWxsc3ltc19sb29rdXBfbmFtZSBjb3VsZCBub3QgZmluZCBh ZGRyZXNzICIKKwkJICAgICAgICJmb3IgdGhlIHNwZWNpZmllZCBzeW1ib2wgbmFtZVxuIik7 CisJCXJldHVybiAxOworCX0KKworCXByaW50aygiXG5BZGRyZXNzIHdoZXJlIHRoZSBrcHJv YmUgaXMgXG4iCisJICAgICAgICJnb2luZyB0byBiZSBpbnNlcnRlZCAtICVwXG4iLCBrXzAw Nl9rcHIuYWRkcik7CisJcmVnaXN0ZXJfa3Byb2JlKCZrXzAwNl9rcHIpOworCXJldHVybiAw OworfQorCittb2R1bGVfaW5pdChrXzAwNl9pbml0X3Byb2JlKTsKK21vZHVsZV9leGl0KGtf MDA2X2V4aXRfcHJvYmUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIktwcm9iZXMgdGVzdCBt b2R1bGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKSW5kZXg6IGxpbnV4LTIuNi4xNi4z OS9rcHJvYmUtdGVzdHMvay0wMDcuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3 MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIGxpbnV4LTIuNi4xNi4zOS9r cHJvYmUtdGVzdHMvay0wMDcuYwkyMDA3LTAzLTEzIDIwOjM5OjA2LjI1MTUwNjM2OCArMDUz MApAQCAtMCwwICsxLDgwIEBACisvKgorICogIGstMDA3LmMgLSBLcHJvYmVzIHdpdGggcHJv YmUgcG9pbnRzIHRvIHRoZSBrZXJuZWwgZnVuY3Rpb25zIF9fa21hbGxvYyBhbmQKKyAqICBr ZnJlZS4KKyAqCisgKiAgQ29weXJpZ2h0IDIwMDcgU29ueSBDb3JwLgorICoKKyAqICBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFs b25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAs IEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9j b25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2th bGxzeW1zLmg+CisKK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlIGtfMDA3X2twLCBrXzAwN19rcDE7 CitpbnQga18wMDdfa21hbGxvY19jb3VudCA9IDA7CitpbnQga18wMDdfa2ZyZWVfY291bnQg PSAwOworCitzdGF0aWMgaW50IGtfMDA3X2ttYWxsb2NfaG5kbHIoc3RydWN0IGtwcm9iZSAq a3ByLCBzdHJ1Y3QgcHRfcmVncyAqcCkKK3sKKwlrXzAwN19rbWFsbG9jX2NvdW50Kys7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga18wMDdfa2ZyZWVfaG5kbHIoc3RydWN0IGtw cm9iZSAqa3ByLCBzdHJ1Y3QgcHRfcmVncyAqcCkKK3sKKwlrXzAwN19rZnJlZV9jb3VudCsr OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBrXzAwN19rbWZfaW5pdCh2 b2lkKQoreworCWludCByZXQ7CisJa18wMDdfa3AuYWRkciA9IChrcHJvYmVfb3Bjb2RlX3Qg Kikga2FsbHN5bXNfbG9va3VwX25hbWUoIl9fa21hbGxvYyIpOworCWtfMDA3X2twLnByZV9o YW5kbGVyID0ga18wMDdfa21hbGxvY19obmRscjsKKwlrXzAwN19rcDEuYWRkciA9IChrcHJv YmVfb3Bjb2RlX3QgKikga2FsbHN5bXNfbG9va3VwX25hbWUoImtmcmVlIik7CisJa18wMDdf a3AxLnByZV9oYW5kbGVyID0ga18wMDdfa2ZyZWVfaG5kbHI7CisJcmV0ID0gcmVnaXN0ZXJf a3Byb2JlKCZrXzAwN19rcCk7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VS UiAicmVnaXN0ZXJfa3Byb2JlIHJldHVybnMgJWQgJWQgXG4iLCByZXQsCisJCSAgICAgICBf X0xJTkVfXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXQgPSByZWdpc3Rlcl9rcHJvYmUo JmtfMDA3X2twMSk7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmVn aXN0ZXJfa3Byb2JlIHJldHVybnMgJWQgJWQgXG4iLCByZXQsCisJCSAgICAgICBfX0xJTkVf Xyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg X19leGl0IGtfMDA3X2ttZl9leGl0KHZvaWQpCit7CisJcHJpbnRrKCIlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlXG5cblxuXG4iKTsKKwlw cmludGsoImttYWxsb2MgY291bnQgaXMgJWQgXG4iLCBrXzAwN19rbWFsbG9jX2NvdW50KTsK KwlwcmludGsoImtmcmVlIGNvdW50IGlzICVkIFxuIiwga18wMDdfa2ZyZWVfY291bnQpOwor CXByaW50aygiXG5cblxuJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUl JSUlJSUlJSUlJSUlJVxuIik7CisJdW5yZWdpc3Rlcl9rcHJvYmUoJmtfMDA3X2twKTsKKwl1 bnJlZ2lzdGVyX2twcm9iZSgma18wMDdfa3AxKTsKKwlwcmludGsoS0VSTl9JTkZPICJrdGlt ZTogZXhpdGluZy4uLlxuIik7Cit9CisKK21vZHVsZV9pbml0KGtfMDA3X2ttZl9pbml0KTsK K21vZHVsZV9leGl0KGtfMDA3X2ttZl9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsK SW5kZXg6IGxpbnV4LTIuNi4xNi4zOS9rcHJvYmUtdGVzdHMvay0wMDguYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDowMC4wMDAwMDAwMDAgKzAwMDAK KysrIGxpbnV4LTIuNi4xNi4zOS9rcHJvYmUtdGVzdHMvay0wMDguYwkyMDA3LTAzLTEzIDIw OjM5OjA2LjI1MjUwNjIxNiArMDUzMApAQCAtMCwwICsxLDY4IEBACisvKgorICogIGstMDA4 LmMgLSBBIEtwcm9iZSB3aXRoIGEgcHJvYmUgcG9pbnQgdG8gdGhlIGtlcm5lbCBmdW5jdGlv bgorICogIGRvX2dldHRpbWVvZmRheSwgd2l0aCBhbiBlbXB0eSBwcmUtaGFuZGxlciB3aGlj aCBjYW4gYmUgdXNlZAorICogIHRvIG1lYXN1cmUgdGhlIEtwcm9iZXMgb3ZlcmhlYWQuCisg KgorICogIENvcHlyaWdodCAyMDA3IFNvbnkgQ29ycC4KKyAqCisgKiAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s IE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+ CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgor I2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5o PgorCitzdGF0aWMgc3RydWN0IGtwcm9iZSBrXzAwOF9rcDE7CisKK3N0YXRpYyB2b2lkIF9f ZXhpdCBrXzAwOF9leGl0X3Byb2JlKHZvaWQpCit7CisJcHJpbnRrKCJcbk1vZHVsZSBleGl0 aW5nICIpOworCXByaW50aygiZnJvbSBnZXR0aW1lb2ZkYXlcbiIpOworCXVucmVnaXN0ZXJf a3Byb2JlKCZrXzAwOF9rcDEpOworfQorCitzdGF0aWMgaW50IGtfMDA4X3ByZV9oYW5kbGVy KHN0cnVjdCBrcHJvYmUgKmtfMDA4X2twMSwgc3RydWN0IHB0X3JlZ3MgKnApCit7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGtfMDA4X2luaXRfcHJvYmUodm9pZCkK K3sKKwlwcmludGsoIlxuSW5zZXJ0aW5nIHRoZSBrcHJvYmUgYXQgZG9fZ2V0dGltZW9mZGF5 XG4iKTsKKworCS8qIFJlZ2lzdGVyaW5nIGEga3Byb2JlICovCisJa18wMDhfa3AxLnByZV9o YW5kbGVyID0gKGtwcm9iZV9wcmVfaGFuZGxlcl90KSBrXzAwOF9wcmVfaGFuZGxlcjsKKwlr XzAwOF9rcDEuYWRkciA9CisJICAgIChrcHJvYmVfb3Bjb2RlX3QgKikga2FsbHN5bXNfbG9v a3VwX25hbWUoImRvX2dldHRpbWVvZmRheSIpOworCisJaWYgKGtfMDA4X2twMS5hZGRyID09 IE5VTEwpIHsKKwkJcHJpbnRrKCJrYWxsc3ltc19sb29rdXBfbmFtZSBjb3VsZCBub3QgZmlu ZCBhZGRyZXNzICIKKwkJICAgICAgICJmb3IgdGhlIHNwZWNpZmllZCBzeW1ib2wgbmFtZVxu Iik7CisJCXJldHVybiAxOworCX0KKworCXByaW50aygiXG5BZGRyZXNzIHdoZXJlIHRoZSBr cHJvYmVzIGFyZSBcbiIKKwkgICAgICAgImdvaW5nIHRvIGJlIGluc2VydGVkIC0gJXAgXG4i LCBrXzAwOF9rcDEuYWRkcik7CisJcmVnaXN0ZXJfa3Byb2JlKCZrXzAwOF9rcDEpOworCisJ cmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KGtfMDA4X2luaXRfcHJvYmUpOworbW9kdWxl X2V4aXQoa18wMDhfZXhpdF9wcm9iZSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiS3Byb2Jl cyB0ZXN0IG1vZHVsZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpJbmRleDogbGludXgt Mi42LjE2LjM5L2twcm9iZS10ZXN0cy9rLTAwOS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYv bnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysgbGludXgtMi42 LjE2LjM5L2twcm9iZS10ZXN0cy9rLTAwOS5jCTIwMDctMDMtMTMgMjA6Mzk6MDYuMjUzNTA2 MDY0ICswNTMwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiAgay0wMDkuYyAtIEEgS3Byb2Jl IHdpdGggYSBwcm9iZSBwb2ludCB0byB0aGUga2VybmVsIGZ1bmN0aW9uCisgKiAgZG9fZ2V0 dGltZW9mZGF5LCB3aXRoIHRoZSBlbXB0eSBwcmUtaGFuZGxlciBhbmQgcG9zdC1oYW5kbGVy CisgKiAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gbWVhc3VyZSB0aGUgS3Byb2JlcyBvdmVyaGVh ZC4KKyAqCisgKiAgQ29weXJpZ2h0IDIwMDcgU29ueSBDb3JwLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJv c3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jl cy5oPgorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisKK3N0YXRpYyBzdHJ1Y3Qga3By b2JlIGtfMDA5X2twMTsKKworc3RhdGljIHZvaWQgX19leGl0IGtfMDA5X2V4aXRfcHJvYmUo dm9pZCkKK3sKKwlwcmludGsoIlxuTW9kdWxlIGV4aXRpbmcgIik7CisJcHJpbnRrKCJmcm9t IGdldHRpbWVvZmRheVxuIik7CisJdW5yZWdpc3Rlcl9rcHJvYmUoJmtfMDA5X2twMSk7Cit9 CisKK3N0YXRpYyBpbnQga18wMDlfcHJlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqa18wMDlf a3AxLCBzdHJ1Y3QgcHRfcmVncyAqcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBrXzAwOV9wb3N0X2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqa18wMDlfa3AxLAorCQkJICAg ICAgc3RydWN0IHB0X3JlZ3MgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGtfMDA5X2luaXRfcHJvYmUodm9pZCkKK3sK KwlwcmludGsoIlxuSW5zZXJ0aW5nIHRoZSBrcHJvYmUgYXQgZG9fZ2V0dGltZW9mZGF5XG4i KTsKKworCS8qIFJlZ2lzdGVyaW5nIGEga3Byb2JlICovCisJa18wMDlfa3AxLnByZV9oYW5k bGVyID0gKGtwcm9iZV9wcmVfaGFuZGxlcl90KSBrXzAwOV9wcmVfaGFuZGxlcjsKKwlrXzAw OV9rcDEucG9zdF9oYW5kbGVyID0gKGtwcm9iZV9wb3N0X2hhbmRsZXJfdCkga18wMDlfcG9z dF9oYW5kbGVyOworCWtfMDA5X2twMS5hZGRyID0KKwkgICAgKGtwcm9iZV9vcGNvZGVfdCAq KSBrYWxsc3ltc19sb29rdXBfbmFtZSgiZG9fZ2V0dGltZW9mZGF5Iik7CisKKwlpZiAoa18w MDlfa3AxLmFkZHIgPT0gTlVMTCkgeworCQlwcmludGsoImthbGxzeW1zX2xvb2t1cF9uYW1l IGNvdWxkIG5vdCBmaW5kIGFkZHJlc3MgIgorCQkgICAgICAgImZvciB0aGUgc3BlY2lmaWVk IHN5bWJvbCBuYW1lXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHJpbnRrKCJcbkFkZHJl c3Mgd2hlcmUgdGhlIGtwcm9iZXMgYXJlIFxuIgorCSAgICAgICAiZ29pbmcgdG8gYmUgaW5z ZXJ0ZWQgLSAlcCBcbiIsIGtfMDA5X2twMS5hZGRyKTsKKwlyZWdpc3Rlcl9rcHJvYmUoJmtf MDA5X2twMSk7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQoa18wMDlfaW5pdF9w cm9iZSk7Cittb2R1bGVfZXhpdChrXzAwOV9leGl0X3Byb2JlKTsKKworTU9EVUxFX0RFU0NS SVBUSU9OKCJLcHJvYmVzIHRlc3QgbW9kdWxlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7 CkluZGV4OiBsaW51eC0yLjYuMTYuMzkvRG9jdW1lbnRhdGlvbi9rcHJvYmUtdGVzdHMudHh0 Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAw MDAwMCArMDAwMAorKysgbGludXgtMi42LjE2LjM5L0RvY3VtZW50YXRpb24va3Byb2JlLXRl c3RzLnR4dAkyMDA3LTAzLTEzIDIwOjM5OjA2LjI1NDUwNTkxMiArMDUzMApAQCAtMCwwICsx LDI5OSBAQAorVGl0bGUJOiBLZXJuZWwgUHJvYmVzIHRlc3QgbW9kdWxlcworCitLcHJvYmVz IGlzIGEga2VybmVsIGRlYnVnZ2luZyB0ZWNobmlxdWUuIFRoaXMgY2FuIGJlIHRlc3RlZCB1 c2luZyBrZXJuZWwKK21vZHVsZXMuIFRoZXNlIGtlcm5lbCBtb2R1bGUgd2lsbCBob29rIHRo ZSB1c2VyIGRlZmluZWQgcHJlIGhhbmRsZXIsIHBvc3QKK2hhbmRsZXIgYW5kIGZhdWx0IGhh bmRsZXIgdG8gdGhlIHByb2JlZCBwb2ludC4KKworV2hlbiBjb25maWd1cmluZyB0aGUga2Vy bmVsIHVzaW5nIG1ha2UgbWVudWNvbmZpZy94Y29uZmlnL29sZGNvbmZpZywKK2Vuc3VyZSB0 aGF0IENPTkZJR19LUFJPQkVTIGlzIHNldCB0byAieSIuICBVbmRlciAiSW5zdHJ1bWVudGF0 aW9uCitTdXBwb3J0IiwgbG9vayBmb3IgIktwcm9iZXMiLgorCitBbmQgYWxzbyBlbnN1cmUg dGhhdCBDT05GSUdfS1BST0JFU1RFU1QgaXMgc2V0IHRvICJtIiwgb25seSBpZgorQ09ORklH X0tQUk9CRVMgaXMgc2V0IHRvICJ5IgorCitUbyBsb2FkIGFuZCB1bmxvYWQgS3Byb2Jlcy1i YXNlZCBpbnN0cnVtZW50YXRpb24gbW9kdWxlcywgbWFrZSBzdXJlCisiTG9hZGFibGUgbW9k dWxlIHN1cHBvcnQiIChDT05GSUdfTU9EVUxFUykgYW5kICJNb2R1bGUgdW5sb2FkaW5nIgor KENPTkZJR19NT0RVTEVfVU5MT0FEKSBhcmUgc2V0IHRvICJ5Ii4KKworWW91IG1heSBhbHNv IHdhbnQgdG8gZW5zdXJlIHRoYXQgQ09ORklHX0tBTExTWU1TIGFuZCBwZXJoYXBzIGV2ZW4K K0NPTkZJR19LQUxMU1lNU19BTEwgYXJlIHNldCB0byAieSIsIHNpbmNlIGthbGxzeW1zX2xv b2t1cF9uYW1lKCkKK2lzIGEgaGFuZHksIHZlcnNpb24taW5kZXBlbmRlbnQgd2F5IHRvIGZp bmQgYSBmdW5jdGlvbidzIGFkZHJlc3MuCisKK1RoZSBLcHJvYmVzIG1vZHVsZXMgYXJlOgor CistIGtwcm9iZS10ZXN0cy9rLTAweC5jICggeCA9IDAsMSwyLi4uLjkgKQorCisKKzEuIGst MDAxLmMKKworQSBLcHJvYmUgd2l0aCBwcm9iZSBwb2ludCB0byB0aGUga2VybmVsIGZ1bmN0 aW9uICdkb19mb3JrJy4KK1RoaXMgd2lsbCB0ZXN0IHRoZSB3b3JraW5nIG9mIEtQUk9CRVMg c3VwcG9ydC4KKworREVTQ1JJUFRJT046CitJdCBoYXMgYSBrZXJuZWwgcHJvYmUgJ2tfMDAx X2twcicgb2YgdGhlIHR5cGUgYHN0cnVjdCBrcHJvYmVgLgorCitUaGlzIG1vZHVsZSBoYXMg dXNlciBkZWZpbmVkIGhhbmRsZXJzIGFzIGZvbGxvd3M6CisxLiBLcHJvYmUncyBwcmUtaGFu ZGxlciAgICA6IGtfMDAxX2JlZm9yZV9ob29rCisyLiBLcHJvYmUncyBwb3N0LWhhbmRsZXIg ICA6IGtfMDAxX2FmdGVyX2hvb2sKKworQW5kIHRoZSBwcm9iZWQgYWRkZHJlc3MgaXMgOiBr YWxsc3ltc19sb29rdXBfbmFtZSgiZG9fZm9yayIpLgorCitXaGVuIHRoaXMgbW9kdWxlIGlz IGluc2VydGVkIHVzaW5nIGluc21vZCwgaXQgcmVnaXN0ZXJzIHRoZSBrXzAwMV9rcHIKK3Vz aW5nICdyZWdpc3Rlcl9rcHJvYmUoJmtfMDAxX2twciknLgorCitXaGVuIHRoZSBhZHJlc3Mg b2YgYSBrZXJuZWwgcm91dGluZSAnZG9fZm9yaycgaXMgaGl0LCBLcHJvYmVzIGNhbGxzCit1 c2VyIGRlZmluZWQgcHJlIGhhbmRsZXIgJ2tfMDAxX2JlZm9yZV9ob29rKCknLiBBcyBwYXJ0 IG9mIHRoZSB0aGlzCitmdW5jdGlvbiBjYWxsIGl0IGR1bXBzIHRoZSBzdGFjayB1c2luZyBk dW1wX3N0YWNrKCkgYW5kIGFsc28gc2hvd3MKK3RoZSByZWdpc3RlciBjb250ZW50IGF0IHRo YXQgcG9pbnQgdXNpbmcga18wMDFfc2hvd19hbGxyZWdzKCkuCisKK0FmdGVyIHRoZSBwcm9i ZWQgaW5zdHJ1Y3Rpb24gc2luZ2xlLXN0ZXBwZWQsIEtwcm9iZXMgY2FsbHMgdGhlIHBvc3QK K2hhbmRsZXIgJ2tfMDAxX2FmdGVyX2hvb2soKScuIFRoaXMgYWxzbyBkb2VzIHRoZSBzYW1l IGR1bXBfc3RhY2sgYW5kCitzaG93cyB0aGUgcmVnaXN0ZXIgY29udGVudCBhdCB0aGF0IHBv aW50IHVzaW5nIGtfMDAxX3Nob3dfYWxscmVncygpLgorCitXaGlsZSB1bmxvYWRpbmcgdGhl IG1vZHVsZSB1c2luZyBybW1vZCgpLCBpdCBkZXJlZ2lzdGVycyB0aGUga18wMDFfa3ByCit1 c2luZyAndW5yZWdpc3Rlcl9rcHJvYmUoKScuCisKKworMi4gay0wMDIuYworCitPQkpFQ1RJ VkUgICA6CitNdWx0aXBsZSBLcHJvYmVzIHdpdGggdGhlIHNhbWUgcHJvYmUgcG9pbnQgZm9y IHRoZSBrZXJuZWwgZnVuY3Rpb24KKydkb19mb3JrJy4KKworREVTQ1JJUFRJT04gOgorCUl0 IGhhcyB0d28ga2VybmVsIHByb2JlcyAna18wMDJfa3AxIGFuZCBrXzAwMl9rcDInIG9mIHRo ZSB0eXBlCitgc3RydWN0IGtwcm9iZWAuCisKK1RoaXMgbW9kdWxlIGhhcyB1c2VyIGRlZmlu ZWQgaGFuZGxlcnMgYXMgZm9sbG93czoKKzEuIEtwcm9iZSdzIHByZS1oYW5kbGVyIGZvciBr XzAwMl9rcDEJOiBrXzAwMl9iZWZvcmVfaG9vaworMiAgS3Byb2JlJ3MgcG9zdC1oYW5kbGVy IGZvciBrXzAwMl9rcDEJOiBrXzAwMl9hZnRlcl9ob29rCiszLiBLcHJvYmUncyBwcmUtaGFu ZGxlciBmb3Iga18wMDJfa3AyCToga18wMDJfcHJlX2hhbmRsZXIKKzQuIEtwcm9iZSdzIHBv c3QtaGFuZGxlciBmb3Iga18wMDJfa3AyCToga18wMDJfcG9zdF9oYW5kbGVyCisKK0FuZCB0 aGUgcHJvYmVkIGFkZGRyZXNzIGZvciBrXzAwMl9rcDEgaXMgOiBrYWxsc3ltc19sb29rdXBf bmFtZSgiZG9fZm9yayIpLgorQW5kIHRoZSBwcm9iZWQgYWRkZHJlc3MgZm9yIGtfMDAyX2tw MiBpcyA6IGthbGxzeW1zX2xvb2t1cF9uYW1lKCJkb19mb3JrIikuCisKK1doZW4gdGhpcyBt b2R1bGUgaXMgaW5zZXJ0ZWQgdXNpbmcgaW5zbW9kLCBpdCByZWdpc3RlcnMgdGhlIGtfMDAy X2twMSBhbmQKK2tfMDAyX2twMiB1c2luZyAncmVnaXN0ZXJfa3Byb2JlKCknLgorCitXaGVu IHRoZSBhZHJlc3Mgb2YgYSBrZXJuZWwgcm91dGluZSAnZG9fZm9yaycgaXMgaGl0LCBLcHJv YmVzIGNhbGxzCit1c2VyIGRlZmluZWQgcHJlIGhhbmRsZXJzICdrXzAwMl9wcmVfaGFuZGxl cicgYW5kICdrXzAwMl9iZWZvcmVfaG9vaycuCisKK0FmdGVyIHRoZSBwcm9iZWQgaW5zdHJ1 Y3Rpb24gc2luZ2xlLXN0ZXBwZWQsIEtwcm9iZXMgY2FsbHMgdGhlIHBvc3QKK2hhbmRsZXJz ICdrXzAwMl9wb3N0X2hhbmRsZXInIGFuZCAna18wMDJfYWZ0ZXJfaG9vaygpJy4KKworV2hp bGUgdW5sb2FkaW5nIHRoZSBtb2R1bGUgdXNpbmcgcm1tb2QoKSwgaXQgZGVyZWdpc3RlcnMg dGhlIGtfMDAyX2twMQorYW5kIGtfMDAyX2twMiB1c2luZyAndW5yZWdpc3Rlcl9rcHJvYmUo KScuCisKKworMy4gay0wMDMuYworCitPQkpFQ1RJVkUgICA6CitNdWx0aXBsZSBrcHJvYmVz IHdpdGggdGhlIGRpZmZlcmVudCBwcm9iZSBwb2ludCBmb3IgdGhlIGtlcm5lbCBmdW5jdGlv bgorJ2RvX2ZvcmsnIGFuZCAnc3lzX2dldHRpbWVvZmRheScuCisKK0RFU0NSSVBUSU9OIDoK K0l0IGhhcyB0d28ga2VybmVsIHByb2JlcyAna18wMDNfa3AxIGFuZCBrXzAwM19rcDInIG9m IHRoZSB0eXBlCitgc3RydWN0IGtwcm9iZWAuCisKK1RoaXMgbW9kdWxlIGhhcyB1c2VyIGRl ZmluZWQgaGFuZGxlcnMgYXMgZm9sbG93czoKKzEuIEtwcm9iZSdzIHByZS1oYW5kbGVyIGZv ciBrXzAwM19rcDEJOiBrXzAwM19iZWZvcmVfaG9vaworMiAgS3Byb2JlJ3MgcG9zdC1oYW5k bGVyIGZvciBrXzAwM19rcDEJOiBrXzAwM19hZnRlcl9ob29rCiszLiBLcHJvYmUncyBwcmUt aGFuZGxlciBmb3Iga18wMDNfa3AyCToga18wMDNfcHJlX2hhbmRsZXIKKzQuIGtwcm9iZSdz IHBvc3QtaGFuZGxlciBmb3Iga18wMDNfa3AyCToga18wMDNfcG9zdF9oYW5kbGVyCisKK0Fu ZCB0aGUgcHJvYmVkIGFkZGRyZXNzIGZvciBrXzAwM19rcDEgaXMgOiBrYWxsc3ltc19sb29r dXBfbmFtZSgiZG9fZm9yayIpLgorQW5kIGZvciBrXzAwM19rcDIgaXMgOiBrYWxsc3ltc19s b29rdXBfbmFtZSgic3lzX2dldHRpbWVvZmRheSIpLgorCitXaGVuIHRoaXMgbW9kdWxlIGlz IGluc2VydGVkIHVzaW5nIGluc21vZCwgaXQgcmVnaXN0ZXJzIHRoZSBrXzAwM19rcDEgYW5k CitrXzAwM19rcDIgdXNpbmcgJ3JlZ2lzdGVyX2twcm9iZSgpJy4KKworV2hlbiB0aGUgYWRy ZXNzIG9mIGEga2VybmVsIHJvdXRpbmUgJ2RvX2ZvcmsnIGlzIGhpdCwgS3Byb2JlcyBjYWxs cwordXNlciBkZWZpbmVkIHByZSBoYW5kbGVycyAna18wMDNfYmVmb3JlX2hvb2snLgorCitX aGVuIHRoZSBhZHJlc3Mgb2YgYSBrZXJuZWwgcm91dGluZSAnc3lzX2dldHRpbWVvZmRheScg aXMgaGl0LCBLcHJvYmVzCitjYWxscyB1c2VyIGRlZmluZWQgcHJlIGhhbmRsZXJzICdrXzAw M19wcmVfaGFuZGxlcicuCisKK0FmdGVyIHRoZSBwcm9iZWQgaW5zdHJ1Y3Rpb24gc2luZ2xl LXN0ZXBwZWQsIEtwcm9iZXMgY2FsbHMgdGhlIHBvc3QKK2hhbmRsZXJzICdrXzAwM19wb3N0 X2hhbmRsZXInIGFuZCAna18wMDNfYWZ0ZXJfaG9vaygpJyBmb3IgZWFjaCBwcm9iZWQKK2Fk ZHJlc3MuCisKK1doaWxlIHVubG9hZGluZyB0aGUgbW9kdWxlIHVzaW5nIHJtbW9kKCksIGl0 IGRlcmVnaXN0ZXJzIHRoZSBrXzAwM19rcDEKK2FuZCBrXzAwM19rcDIgdXNpbmcgJ3VucmVn aXN0ZXJfa3Byb2JlKCknLgorCisKKzQuIGstMDA0LmMKKworS3Byb2JlcyB3aXRoIHRoZSBm YXVsdCBoYW5kbGVyIGZvciB0aGUga2VybmVsIGZ1bmN0aW9uICdzeXNfZ2V0dGltZW9mZGF5 Jy4KKworREVTQ1JJUFRJT046CitJdCBoYXMgYSBrZXJuZWwgcHJvYmUgJ2tfMDA0X2twcicg b2YgdGhlIHR5cGUgYHN0cnVjdCBrcHJvYmVgLgorCitUaGlzIG1vZHVsZSBoYXMgdXNlciBk ZWZpbmVkIGhhbmRsZXJzIGFzIGZvbGxvd3M6CisxLiBLcHJvYmUncyBwcmUtaGFuZGxlciAg ICA6IGtfMDA0X2JlZm9yZV9ob29rCisyLiBLcHJvYmUncyBwb3N0LWhhbmRsZXIgICA6IGtf MDA0X2FmdGVyX2hvb2sKKzMuIEtwcm9iZSdzIGZhdWx0LWhhbmRsZXIgIDoga18wMDRfZmF1 bHRfcHJvYmUKKworQW5kIHRoZSBwcm9iZWQgYWRkZHJlc3MgaXMgOiBrYWxsc3ltc19sb29r dXBfbmFtZSgic3lzX2dldHRpbWVvZmRheSIpLgorCitXaGVuIHRoaXMgbW9kdWxlIGlzIGlu c2VydGVkIHVzaW5nIGluc21vZCwgaXQgcmVnaXN0ZXJzIHRoZSBrXzAwNF9rcHIKK3VzaW5n ICdyZWdpc3Rlcl9rcHJvYmUoJmtfMDA0X2twciknLgorCitXaGVuIHRoZSBhZHJlc3Mgb2Yg YSBrZXJuZWwgcm91dGluZSAnc3lzX2dldHRpbWVvZmRheScgaXMgaGl0LCBLcHJvYmVzCitj YWxscyB1c2VyIGRlZmluZWQgcHJlIGhhbmRsZXIgJ2tfMDA0X2JlZm9yZV9ob29rKCknLiBB cyBwYXJ0IG9mIHRoZSB0aGlzCitmdW5jdGlvbiBjYWxsIGl0IGR1bXBzIHRoZSBzdGFjayB1 c2luZyBkdW1wX3N0YWNrKCkgYW5kIGFsc28gc2hvd3MgdGhlCityZWdpc3RlciBjb250ZW50 IGF0IHRoYXQgcG9pbnQgdXNpbmcga18wMDRfc2hvd19hbGxyZWdzKCkuCitBbmQgYWxzbyBw cmUgaGFuZGxlciBrXzAwNF9iZWZvcmVfaG9vaygpIHRyaWVzIHRvIGdlbmVhcmF0ZSBhIGZh dWx0IGJ5Citkb2luZyBwdXRfdXNlcigpIGZvciBhIG51bGwgYnVmZmVyLgorCitXaGVuIHRo aXMgZmF1bHQgaXMgaGl0LCBLcHJvYmUgY2FsbHMga3Byb2JlJ3MgZmF1bHQgaGFuZGxlciAn a18wMDRfZmF1bHRfcHJvYmUnLgorQWZ0ZXIgdGhlIHByb2JlZCBpbnN0cnVjdGlvbiBzaW5n bGUtc3RlcHBlZCwgS3Byb2JlcyBjYWxscyB0aGUgcG9zdCBoYW5kbGVyCisna18wMDRfYWZ0 ZXJfaG9vaygpJy4gVGhpcyBhbHNvIGRvZXMgdGhlIHNhbWUgZHVtcF9zdGFjayBhbmQgc2hv d3MgdGhlCityZWdpc3RlciBjb250ZW50IGF0IHRoYXQgcG9pbnQgdXNpbmcga18wMDRfc2hv d19hbGxyZWdzKCkuCisKK1doaWxlIHVubG9hZGluZyB0aGUgbW9kdWxlIHVzaW5nIHJtbW9k KCksIGl0IGRlcmVnaXN0ZXJzIHRoZSBrXzAwNF9rcHIgdXNpbmcKKyd1bnJlZ2lzdGVyX2tw cm9iZSgpJy4KKworCis1LiBrLTAwNS5jCisKK0EgS3Byb2JlIHdpdGggcHJvYmUgcG9pbnQg dG8gdGhlIGtlcm5lbCBmdW5jdGlvbiBzeXNfcmVhZC4KKworREVTQ1JJUFRJT046CitJdCBo YXMgYSBrZXJuZWwgcHJvYmUgJ2tfMDA1X2twcicgb2YgdGhlIHR5cGUgYHN0cnVjdCBrcHJv YmVgLgorCitUaGlzIG1vZHVsZSBoYXMgdXNlciBkZWZpbmVkIGhhbmRsZXJzIGFzIGZvbGxv d3M6CisxLiBLcHJvYmUncyBwcmUtaGFuZGxlciAgICA6IGtfMDA1X2JlZm9yZV9ob29rCisy LiBLcHJvYmUncyBwb3N0LWhhbmRsZXIgICA6IGtfMDA1X2FmdGVyX2hvb2sKKworQW5kIHRo ZSBwcm9iZWQgYWRkZHJlc3MgaXMgOiBrYWxsc3ltc19sb29rdXBfbmFtZSgic3lzX3JlYWQi KS4KKworV2hlbiB0aGlzIG1vZHVsZSBpcyBpbnNlcnRlZCB1c2luZyBpbnNtb2QsIGl0IHJl Z2lzdGVycyB0aGUga18wMDVfa3ByCit1c2luZyAncmVnaXN0ZXJfa3Byb2JlKCZrXzAwNV9r cHIpJy4KKworV2hlbiB0aGUgYWRyZXNzIG9mIGEga2VybmVsIHJvdXRpbmUgJ3N5c19yZWFk JyBpcyBoaXQsIEtwcm9iZXMKK2NhbGxzIHVzZXIgZGVmaW5lZCBwcmUgaGFuZGxlciAna18w MDVfYmVmb3JlX2hvb2soKScuCisKK0FmdGVyIHRoZSBwcm9iZWQgaW5zdHJ1Y3Rpb24gc2lu Z2xlLXN0ZXBwZWQsIEtwcm9iZXMgY2FsbHMgdGhlIHBvc3QKK2hhbmRsZXIgJ2tfMDA1X2Fm dGVyX2hvb2soKScuIFRoaXMgd2lsbCBpbmNyZWFzZXMgdGhlIGNvdW50IHZhcmlhYmxlCisn a18wMDVfa3Jfa3Byb2JlX3JlYWRfY250JyBieSBvbmUuCisKK1doaWxlIHVubG9hZGluZyB0 aGUgbW9kdWxlIHVzaW5nIHJtbW9kKCksIGl0IGRlcmVnaXN0ZXJzIHRoZSBrXzAwNV9rcHIK K3VzaW5nICd1bnJlZ2lzdGVyX2twcm9iZSgpJyBhbmQgYWxzbyBwcmludHMgdGhlIHRvdGFs IG51bWJlciBvZiByZWFkIGNvdW50LgorCisKKzYuIGstMDA2LmMKKworQSBLcHJvYmUgd2l0 aCBwcm9iZSBwb2ludCB0byB0aGUga2VybmVsIGZ1bmN0aW9uIHN5c193cml0ZS4KKworREVT Q1JJUFRJT046CitJdCBoYXMgYSBrZXJuZWwgcHJvYmUgJ2tfMDA2X2twcicgb2YgdGhlIHR5 cGUgYHN0cnVjdCBrcHJvYmVgLgorCitUaGlzIG1vZHVsZSBoYXMgdXNlciBkZWZpbmVkIGhh bmRsZXJzIGFzIGZvbGxvd3M6CisxLiBLcHJvYmUncyBwcmUtaGFuZGxlciAgICA6IGtfMDA2 X2JlZm9yZV9ob29rCisyLiBLcHJvYmUncyBwb3N0LWhhbmRsZXIgICA6IGtfMDA2X2FmdGVy X2hvb2sKKworQW5kIHRoZSBwcm9iZWQgYWRkZHJlc3MgaXMgOiBrYWxsc3ltc19sb29rdXBf bmFtZSgic3lzX3dyaXRlIikuCisKK1doZW4gdGhpcyBtb2R1bGUgaXMgaW5zZXJ0ZWQgdXNp bmcgaW5zbW9kLCBpdCByZWdpc3RlcnMgdGhlIGtfMDA2X2twcgordXNpbmcgJ3JlZ2lzdGVy X2twcm9iZSgma18wMDZfa3ByKScuCisKK1doZW4gdGhlIGFkcmVzcyBvZiBhIGtlcm5lbCBy b3V0aW5lICdzeXNfcmVhZCcgaXMgaGl0LCBLcHJvYmVzIGNhbGxzCit1c2VyIGRlZmluZWQg cHJlIGhhbmRsZXIgJ2tfMDA2X2JlZm9yZV9ob29rKCknLgorCitBZnRlciB0aGUgcHJvYmVk IGluc3RydWN0aW9uIHNpbmdsZS1zdGVwcGVkLCBLcHJvYmVzIGNhbGxzIHRoZSBwb3N0Cito YW5kbGVyICdrXzAwNl9hZnRlcl9ob29rKCknLiBUaGlzIHdpbGwgaW5jcmVhc2VzIHRoZSBj b3VudCB2YXJpYWJsZQorJ2tfMDA2X2tyX2twcm9iZV93cml0ZV9jbnQnIGJ5IG9uZS4KKwor V2hpbGUgdW5sb2FkaW5nIHRoZSBtb2R1bGUgdXNpbmcgcm1tb2QoKSwgaXQgZGVyZWdpc3Rl cnMgdGhlIGtfMDA2X2twcgordXNpbmcgJ3VucmVnaXN0ZXJfa3Byb2JlKCknIGFuZCBhbHNv IHByaW50cyB0aGUgdG90YWwgbnVtYmVyIG9mIHdyaXRlCitjb3VudC4KKworCis3LiBrLTAw Ny5jCisKK0twcm9iZXMgd2l0aCBwcm9iZSBwb2ludHMgdG8gdGhlIGtlcm5lbCBmdW5jdGlv bnMgX19rbWFsbG9jIGFuZCBrZnJlZS4KKworREVTQ1JJUFRJT04gOgorSXQgaGFzIHR3byBr ZXJuZWwgcHJvYmVzICdrXzAwN19rcCBhbmQga18wMDdfa3AxJyBvZiB0aGUgdHlwZQorYHN0 cnVjdCBrcHJvYmVgLgorCitUaGlzIG1vZHVsZSBoYXMgdXNlciBkZWZpbmVkIGhhbmRsZXJz IGFzIGZvbGxvd3M6CisxLiBLcHJvYmUncyBwcmUtaGFuZGxlciBmb3Iga18wMDdfa3AJOiBr XzAwN19rbWFsbG9jX2huZGxyCisyLiBLcHJvYmUncyBwcmUtaGFuZGxlciBmb3Iga18wMDdf a3AxCToga18wMDdfa2ZyZWVfaG5kbHIKKworQW5kIHRoZSBwcm9iZWQgYWRkZHJlc3MgZm9y IGtfMDA3X2twIGlzIDoga2FsbHN5bXNfbG9va3VwX25hbWUoIl9fa21hbGxvYyIpLgorQW5k IHRoZSBwcm9iZWQgYWRkZHJlc3MgZm9yIGtfMDA3X2twMSBpczoga2FsbHN5bXNfbG9va3Vw X25hbWUoImtmcmVlIikuCisKK1doZW4gdGhpcyBtb2R1bGUgaXMgaW5zZXJ0ZWQgdXNpbmcg aW5zbW9kLCBpdCByZWdpc3RlcnMgdGhlIGtfMDA3X2twIGFuZAora18wMDdfa3AxIHVzaW5n ICdyZWdpc3Rlcl9rcHJvYmUoKScuCisKK1doZW4gdGhlIGFkcmVzcyBvZiBhIGtlcm5lbCBy b3V0aW5lICdfX2ttYWxsb2MnIGlzIGhpdCwgS3Byb2JlcyBjYWxscwordXNlciBkZWZpbmVk IHByZSBoYW5kbGVycyAna18wMDdfa21hbGxvY19obmRscicuIFRoaXMgd2lsbCBpbmNyZWFz ZXMKK3RoZSBjb3VudCB2YXJpYWJsZSAna18wMDdfa21hbGxvY19jb3VudCcgYnkgb25lLgor CitXaGVuIHRoZSBhZHJlc3Mgb2YgYSBrZXJuZWwgcm91dGluZSAnZnJlZScgaXMgaGl0LCBL cHJvYmVzIGNhbGxzIHVzZXIKK2RlZmluZWQgcHJlIGhhbmRsZXJzICdrXzAwN19rZnJlZV9o bmRscicuIFRoaXMgd2lsbCBpbmNyZWFzZXMgdGhlCitjb3VudCB2YXJpYWJsZSAna18wMDdf a2ZyZWVfY291bnQnIGJ5IG9uZS4KKworQWZ0ZXIgdGhlIHByZSBoYW5kbGVyIGV4Y3V0aW9u IGl0IGRvZXMgdGhlIHNpbmdsZS1zdGVwcGluZyBvZiB0aGUKK3Byb2JlZCBpbnN0cnVjdGlv bi4KKworV2hpbGUgdW5sb2FkaW5nIHRoZSBtb2R1bGUgdXNpbmcgcm1tb2QoKSwgaXQgZGVy ZWdpc3RlcnMgdGhlIGtfMDAzX2twCithbmQga18wMDNfa3AxIHVzaW5nICd1bnJlZ2lzdGVy X2twcm9iZSgpJyBhbmQgYWxzbyBwcmludHMgdGhlIHRvdGFsCitudW1iZXIgb2YgX19rbWFs bG9jIGFuZCBrZnJlZSBjb3VudHMuCisKKworOC4gay0wMDguYworCitBIEtwcm9iZSB3aXRo IGEgcHJvYmUgcG9pbnQgdG8gdGhlIGtlcm5lbCBmdW5jdGlvbiBkb19nZXR0aW1lb2ZkYXks Cit3aXRoIGFuIGVtcHR5IHByZS1oYW5kbGVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG1lYXN1 cmUgdGhlIEtwcm9iZXMKK292ZXJoZWFkLgorCitERVNDUklQVElPTjoKK0l0IGhhcyBhIGtl cm5lbCBwcm9iZSAna18wMDhfa3AxJyBvZiB0aGUgdHlwZSBgc3RydWN0IGtwcm9iZWAuCisK K1RoaXMgbW9kdWxlIGhhcyB1c2VyIGRlZmluZWQgaGFuZGxlcnMgYXMgZm9sbG93czoKKzEu IEtwcm9iZSdzIHByZS1oYW5kbGVyICAgIDoga18wMDhfcHJlX2hhbmRsZXIKKworQW5kIHRo ZSBwcm9iZWQgYWRkZHJlc3MgaXMgOiBrYWxsc3ltc19sb29rdXBfbmFtZSgiZG9fZ2V0dGlt ZW9mZGF5IikuCisKK1doZW4gdGhpcyBtb2R1bGUgaXMgaW5zZXJ0ZWQgdXNpbmcgaW5zbW9k LCBpdCByZWdpc3RlcnMgdGhlIGtfMDA4X2twMQordXNpbmcgJ3JlZ2lzdGVyX2twcm9iZSgm a18wMDhfa3AxKScuCisKK1doZW4gdGhlIGFkcmVzcyBvZiBhIGtlcm5lbCByb3V0aW5lICdk b19nZXR0aW1lb2ZkYXknIGlzIGhpdCwgS3Byb2JlcworY2FsbHMgdXNlciBkZWZpbmVkIGVt cHR5IHByZSBoYW5kbGVyICdrXzAwOF9wcmVfaGFuZGxlcigpJy4KKworQWZ0ZXIgdGhlIHBy ZSBoYW5kbGVyIGV4Y3V0aW9uIGl0IGRvZXMgdGhlIHNpbmdsZS1zdGVwcGluZyBvZiB0aGUg cHJvYmVkCitpbnN0cnVjdGlvbi4KKworV2hpbGUgdW5sb2FkaW5nIHRoZSBtb2R1bGUgdXNp bmcgcm1tb2QoKSwgaXQgZGVyZWdpc3RlcnMgdGhlIGtfMDA4X2twMQordXNpbmcgJ3VucmVn aXN0ZXJfa3Byb2JlKCknLgorCisKKzkuIGstMDA5LmMKKworQSBLcHJvYmUgd2l0aCBhIHBy b2JlIHBvaW50IHRvIHRoZSBrZXJuZWwgZnVuY3Rpb24gZG9fZ2V0dGltZW9mZGF5LAord2l0 aCB0aGUgZW1wdHkgcHJlLWhhbmRsZXIgYW5kIHBvc3QtaGFuZGxlciB3aGljaCBjYW4gYmUg dXNlZCB0bworbWVhc3VyZSB0aGUgS3Byb2JlcyBvdmVyaGVhZC4KKworREVTQ1JJUFRJT046 CitJdCBoYXMgYSBrZXJuZWwgcHJvYmUgJ2tfMDA5X2twMScgb2YgdGhlIHR5cGUgYHN0cnVj dCBrcHJvYmVgLgorCitUaGlzIG1vZHVsZSBoYXMgdXNlciBkZWZpbmVkIGhhbmRsZXJzIGFz IGZvbGxvd3M6CisxLiBLcHJvYmUncyBwcmUtaGFuZGxlciAgICA6IGtfMDA5X3ByZV9oYW5k bGVyCisyLiBLcHJvYmUncyBwb3N0LWhhbmRsZXIgICA6IGtfMDA5X3Bvc3RfaGFuZGxlcgor CitBbmQgdGhlIHByb2JlZCBhZGRkcmVzcyBpcyA6IGthbGxzeW1zX2xvb2t1cF9uYW1lKCJk b19nZXR0aW1lb2ZkYXkiKS4KKworV2hlbiB0aGlzIG1vZHVsZSBpcyBpbnNlcnRlZCB1c2lu ZyBpbnNtb2QsIGl0IHJlZ2lzdGVycyB0aGUga18wMDlfa3AxCit1c2luZyAncmVnaXN0ZXJf a3Byb2JlKCZrXzAwOV9rcDEpJy4KKworV2hlbiB0aGUgYWRyZXNzIG9mIGEga2VybmVsIHJv dXRpbmUgJ2RvX2dldHRpbWVvZmRheScgaXMgaGl0LCBLcHJvYmVzCitjYWxscyB1c2VyIGRl ZmluZWQgZW1wdHkgcHJlIGhhbmRsZXIgJ2tfMDA5X3ByZV9oYW5kbGVyKCknLgorCitBZnRl ciB0aGUgcHJvYmVkIGluc3RydWN0aW9uIHNpbmdsZS1zdGVwcGVkLCBLcHJvYmVzIGNhbGxz IHRoZSBlbXB0eSBwb3N0CitoYW5kbGVyICdrXzAwOV9wb3N0X2hhbmRsZXInLgorCitXaGls ZSB1bmxvYWRpbmcgdGhlIG1vZHVsZSB1c2luZyBybW1vZCgpLCBpdCBkZXJlZ2lzdGVycyB0 aGUga18wMDlfa3AxCit1c2luZyAndW5yZWdpc3Rlcl9rcHJvYmUoKScuCkluZGV4OiBsaW51 eC0yLjYuMTYuMzkva3Byb2JlLXRlc3RzL2twcm9iZXMtdGVzdC5oCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIC9kZXYvbnVsbAkxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMAorKysg bGludXgtMi42LjE2LjM5L2twcm9iZS10ZXN0cy9rcHJvYmVzLXRlc3QuaAkyMDA3LTAzLTEz IDIwOjM5OjA2LjI1NTUwNTc2MCArMDUzMApAQCAtMCwwICsxLDEwMSBAQAorI2lmbmRlZiBf S1BST0JFU19URVNUX0gKKyNkZWZpbmUgX0tQUk9CRVNfVEVTVF9ICisvKgorICogIGtwcm9i ZXMtdGVzdC5oIC0gQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGtwcm9iZXMgdGVzdCBmdW5jdGlv bnMuCisgKgorICogIENvcHlyaWdodCAyMDA3IFNvbnkgQ29ycC4KKyAqCisgKiAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBC b3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaWZkZWYgQ09ORklHX1BQQzMy CisjaW5jbHVkZTxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4K KworI2RlZmluZSBSRUcJCSIlMDhsWCIKKyNkZWZpbmUgUkVHU19QRVJfTElORQk4CisjZGVm aW5lIExBU1RfVk9MQVRJTEUJMTIKKworc3RhdGljIHN0cnVjdCByZWdiaXQgeworCXVuc2ln bmVkIGxvbmcgYml0OworCWNvbnN0IGNoYXIgKm5hbWU7Cit9IG1zcl9iaXRzW10gPSB7CisJ e01TUl9XRSwJIldFIn0sCisJe01TUl9DRSwJIkNFIn0sCisJe01TUl9FRSwJIkVFIn0sCisJ e01TUl9QUiwJIlBSIn0sCisJe01TUl9NRSwJIk1FIn0sCisJe01TUl9EV0UsCSJEV0UifSwK Kwl7TVNSX0RFLAkiREUifSwKKwl7TVNSX0lTLAkiSVMifSwKKwl7TVNSX0RTLAkiRFMifSwK Kwl7MCwJCU5VTEx9Cit9OworCitzdGF0aWMgdm9pZCBwcmludGJpdHModW5zaWduZWQgbG9u ZyB2YWwsIHN0cnVjdCByZWdiaXQgKmJpdHMpCit7CisJY29uc3QgY2hhciAqc2VwID0gIiI7 CisKKwlwcmludGsoIjwiKTsKKwlmb3IgKDsgYml0cy0+Yml0OyArK2JpdHMpCisJCWlmICh2 YWwgJiBiaXRzLT5iaXQpIHsKKwkJCXByaW50aygiJXMlcyIsIHNlcCwgYml0cy0+bmFtZSk7 CisJCQlzZXAgPSAiLCI7CisJCX0KKwlwcmludGsoIj4iKTsKK30KK3ZvaWQgc2hvd19hbGxy ZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKK3sKKwlpbnQgaSwgdHJhcDsKKworCXByaW50 aygiTklQOiAiUkVHIiBMUjogIlJFRyIgQ1RSOiAiUkVHIlxuIiwKKwkgICAgICAgcmVncy0+ bmlwLCByZWdzLT5saW5rLCByZWdzLT5jdHIpOworCXByaW50aygiUkVHUzogJXAgVFJBUDog JTA0bHggICAoJXMpXG4iLAorCSAgICAgICByZWdzLCByZWdzLT50cmFwLCBzeXN0ZW1fdXRz bmFtZS5yZWxlYXNlKTsKKwlwcmludGsoIk1TUjogIlJFRyIgIiwgcmVncy0+bXNyKTsKKwlw cmludGJpdHMocmVncy0+bXNyLCBtc3JfYml0cyk7CisJcHJpbnRrKCIgIENSOiAlMDhsWCAg WEVSOiAlMDhsWFxuIiwgcmVncy0+Y2NyLCByZWdzLT54ZXIpOworCXRyYXAgPSBUUkFQKHJl Z3MpOworCWlmICh0cmFwID09IDB4MzAwIHx8IHRyYXAgPT0gMHg2MDApCisJCXByaW50aygi REFSOiAiUkVHIiwgRFNJU1I6ICJSRUciXG4iLCByZWdzLT5kYXIsIHJlZ3MtPmRzaXNyKTsK KwlwcmludGsoIlRBU0sgPSAlcFslZF0gJyVzJyBUSFJFQUQ6ICVwIiwKKwkgICAgICAgY3Vy cmVudCwgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLCB0YXNrX3RocmVhZF9pbmZvKGN1 cnJlbnQpKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwlwcmludGsoIiBDUFU6ICVkIiwgc21w X3Byb2Nlc3Nvcl9pZCgpKTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKKwlmb3IgKGkg PSAwOyAgaSA8IDMyOyAgaSsrKSB7CisJCWlmICgoaSAlIFJFR1NfUEVSX0xJTkUpID09IDAp CisJCQlwcmludGsoIlxuIiBLRVJOX0lORk8gIkdQUiUwMmQ6ICIsIGkpOworCQlwcmludGso UkVHICIgIiwgcmVncy0+Z3ByW2ldKTsKKwkJaWYgKGkgPT0gTEFTVF9WT0xBVElMRSAmJiAh RlVMTF9SRUdTKHJlZ3MpKQorCQkJYnJlYWs7CisJfQorCXByaW50aygiXG4iKTsKKyNpZmRl ZiBDT05GSUdfS0FMTFNZTVMKKwkvKgorCSAqIExvb2t1cCBOSVAgbGF0ZSBzbyB3ZSBoYXZl IHRoZSBiZXN0IGNoYW5nZSBvZiBnZXR0aW5nIHRoZQorCSAqIGFib3ZlIGluZm8gb3V0IHdp dGhvdXQgZmFpbGluZworCSAqLworCXByaW50aygiTklQIFsiUkVHIl0gIiwgcmVncy0+bmlw KTsKKwlwcmludF9zeW1ib2woIiVzXG4iLCByZWdzLT5uaXApOworCXByaW50aygiTFIgWyJS RUciXSAiLCByZWdzLT5saW5rKTsKKwlwcmludF9zeW1ib2woIiVzXG4iLCByZWdzLT5saW5r KTsKKyNlbmRpZgorfQorI2VuZGlmCisKKworI2VuZGlmCkluZGV4OiBsaW51eC0yLjYuMTYu MzkvYXJjaC9wcGMvS2NvbmZpZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaW51eC0yLjYuMTYuMzku b3JpZy9hcmNoL3BwYy9LY29uZmlnCTIwMDctMDMtMTMgMjA6Mzk6MDQuNTMzNzY3NTA0ICsw NTMwCisrKyBsaW51eC0yLjYuMTYuMzkvYXJjaC9wcGMvS2NvbmZpZwkyMDA3LTAzLTEzIDIw OjM5OjA2LjI1NzUwNTQ1NiArMDUzMApAQCAtMTQxMCw0ICsxNDEwLDUgQEAKIAkgIGZvciBr ZXJuZWwgZGVidWdnaW5nLCBub24taW50cnVzaXZlIGluc3RydW1lbnRhdGlvbiBhbmQgdGVz dGluZy4KIAkgIElmIGluIGRvdWJ0LCBzYXkgIk4iLgogCitzb3VyY2UgImtwcm9iZS10ZXN0 cy9LY29uZmlnIgogZW5kbWVudQo= --Boundary_(ID_O4IYE6ljKqwoL5DTA2nGkA)--