From mboxrd@z Thu Jan 1 00:00:00 1970 From: Erich Focht Date: Fri, 08 Feb 2002 17:37:02 +0000 Subject: [Linux-ia64] Re: O(1) MQ scheduler J9 patch for IA64 -> K3 patch MIME-Version: 1 Content-Type: multipart/mixed; boundary="-1916692341-1118367128-1013189822=:12699" Message-Id: List-Id: References: In-Reply-To: To: linux-ia64@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. Send mail to mime@docserver.cac.washington.edu for more info. ---1916692341-1118367128-1013189822=:12699 Content-Type: TEXT/PLAIN; charset=US-ASCII On Thu, 7 Feb 2002, David Mosberger wrote: > Erich> I had to add a function smp_call_function_nowait which sends > Erich> an IPI and returns immediately in order to get rid of a > Erich> IA64-specific race condition when the mmu_context wraps > Erich> around. Now it makes a very stable and fast impression, > Erich> interactive work is even possible while doing a "hackbench > Erich> 55" and ping flooding the machine... Tested on 2 CPU BigSur, > Erich> 4 CPU LION, 16 CPU AzusA. > > Hmmh, I'm a bit worried that this is a fragile solution. It would > break if there ever was a scenario where a task migrated from one CPU > to another while the target CPU has interrupts disabled. I do not > think this can happen with Ingo's current scheduler but I'd prefer a > more robust solution. > > A somewhat cheesy solution might be to have a per-CPU flag that > indicates whether a CPU should flush its TLB before switching to the > next task. We could check for this in activate_mm(). Do you want to > try this? OK, I also feel better with the new solution. Didn't want to put it into the runqueues because it really is an IA-64 problem. It's architecture-specific and the CPU flags are in ia64_ctx. The context wrapping is so seldom that the single lock protecting the CPU mask shouldn't matter. But if somebody decides to use this mechanism generally for flush_tlb_all() we'd have to change it... Besides this: the attached patch is for the latest version of the O(1) scheduler (K3). It has a different sys_sched_yield() from Ingo's because that one has a problem with more than 8 CPUs. Also the set_cpus_allowed() function has the limitation that it just works if the current process tries to change its mask. Best regards, Erich ---1916692341-1118367128-1013189822=:12699 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="MQO1_ia64kdb-k3.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="MQO1_ia64kdb-k3.patch" ZGlmZiAtdXJOIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzMvYXJjaC9pYTY0L2tk Yi9rZGJhX2J0LmMgMi40LjE3LWlhNjQta2RidjIuMS1LM2lhNjQvYXJjaC9p YTY0L2tkYi9rZGJhX2J0LmMNCi0tLSAyLjQuMTctaWE2NC1rZGJ2Mi4xLUsz L2FyY2gvaWE2NC9rZGIva2RiYV9idC5jCU1vbiBGZWIgIDQgMTI6NDI6MDUg MjAwMg0KKysrIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzNpYTY0L2FyY2gvaWE2 NC9rZGIva2RiYV9idC5jCUZyaSBGZWIgIDggMTI6MTE6MjQgMjAwMg0KQEAg LTE5Nyw3ICsxOTcsNyBAQA0KIAl9DQogI2lmZGVmIENPTkZJR19TTVANCiAJ ZWxzZSBpZiAodGFza19oYXNfY3B1KHApKSB7DQotCQlzdyA9IGtkYl9zd1tw LT5wcm9jZXNzb3JdOw0KKwkJc3cgPSBrZGJfc3dbcC0+Y3B1XTsNCiAJfQ0K ICNlbmRpZg0KIAllbHNlIHsNCmRpZmYgLXVyTiAyLjQuMTctaWE2NC1rZGJ2 Mi4xLUszL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUyAyLjQuMTctaWE2NC1r ZGJ2Mi4xLUszaWE2NC9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMNCi0tLSAy LjQuMTctaWE2NC1rZGJ2Mi4xLUszL2FyY2gvaWE2NC9rZXJuZWwvZW50cnku UwlNb24gRmViICA0IDEyOjQxOjM3IDIwMDINCisrKyAyLjQuMTctaWE2NC1r ZGJ2Mi4xLUszaWE2NC9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMJRnJpIEZl YiAgOCAxMjoxMToyNCAyMDAyDQpAQCAtMTYxLDcgKzE2MSw4IEBADQogCW1v diByOD1yMTMJCQkvLyByZXR1cm4gcG9pbnRlciB0byBwcmV2aW91c2x5IHJ1 bm5pbmcgdGFzaw0KIAltb3YgcjEzPWluMAkJCS8vIHNldCAiY3VycmVudCIg cG9pbnRlcg0KIAk7Ow0KLShwNikJc3NtIHBzci5pCQkJLy8gcmVuYWJsZSBw c3IuaSBBRlRFUiB0aGUgaWMgYml0IGlzIHNlcmlhbGl6ZWQNCisvLyhwNikJ c3NtIHBzci5pCQkJLy8gaW50ZXJydXB0IGRlbGl2ZXJ5IHNob3VsZCBub3Qg YmUgZW5hYmxlZA0KKwkJCQkJLy8gd2l0aCB0aGUgbmV3IE8oMSkgTVEgc2No ZWR1bGVyDQogCURPX0xPQURfU1dJVENIX1NUQUNLDQogDQogI2lmZGVmIENP TkZJR19TTVANCkBAIC0xNzAsNyArMTcxLDggQEANCiAJYnIucmV0LnNwdGsu bWFueSBycAkJLy8gYm9vZ2llIG9uIG91dCBpbiBuZXcgY29udGV4dA0KIA0K IC5tYXA6DQotCXJzbSBwc3IuaSB8IHBzci5pYw0KKwkvL3JzbSBwc3IuaSB8 IHBzci5pYw0KKwlyc20gcHNyLmljDQogCW1vdmwgcjI1PVBBR0VfS0VSTkVM DQogCTs7DQogCXNybHouZA0KZGlmZiAtdXJOIDIuNC4xNy1pYTY0LWtkYnYy LjEtSzMvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jIDIuNC4xNy1pYTY0 LWtkYnYyLjEtSzNpYTY0L2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYw0K LS0tIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzMvYXJjaC9pYTY0L2tlcm5lbC9p cnFfaWE2NC5jCUZyaSBOb3YgIDkgMjM6MjY6MTcgMjAwMQ0KKysrIDIuNC4x Ny1pYTY0LWtkYnYyLjEtSzNpYTY0L2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lh NjQuYwlGcmkgRmViICA4IDEyOjExOjI0IDIwMDINCkBAIC0xNDgsNiArMTQ4 LDE0IEBADQogCWZsYWdzOgkJU0FfSU5URVJSVVBULA0KIAluYW1lOgkJIklQ SSINCiB9Ow0KKw0KK2V4dGVybiB2b2lkIHNtcF90YXNrX21pZ3JhdGlvbl9p bnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVn cyAqcmVncyk7DQorDQorc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGFza19t aWdyYXRpb25faXJxYWN0aW9uID0gew0KKwloYW5kbGVyOglzbXBfdGFza19t aWdyYXRpb25faW50ZXJydXB0LA0KKwlmbGFnczoJCVNBX0lOVEVSUlVQVCwN CisJbmFtZToJCSJUYXNrIG1pZ3JhdGlvbiINCit9Ow0KICNlbmRpZg0KIA0K IHZvaWQNCkBAIC0xNzIsNiArMTgwLDcgQEANCiAJcmVnaXN0ZXJfcGVyY3B1 X2lycShJQTY0X1NQVVJJT1VTX0lOVF9WRUNUT1IsIE5VTEwpOw0KICNpZmRl ZiBDT05GSUdfU01QDQogCXJlZ2lzdGVyX3BlcmNwdV9pcnEoSUE2NF9JUElf VkVDVE9SLCAmaXBpX2lycWFjdGlvbik7DQorCXJlZ2lzdGVyX3BlcmNwdV9p cnEoSUE2NF9UQVNLX01JR1JBVElPTiwgJnRhc2tfbWlncmF0aW9uX2lycWFj dGlvbik7DQogI2VuZGlmDQogCXBsYXRmb3JtX2lycV9pbml0KCk7DQogfQ0K ZGlmZiAtdXJOIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzMvYXJjaC9pYTY0L2tl cm5lbC9wcm9jZXNzLmMgMi40LjE3LWlhNjQta2RidjIuMS1LM2lhNjQvYXJj aC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMNCi0tLSAyLjQuMTctaWE2NC1rZGJ2 Mi4xLUszL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCU1vbiBGZWIgIDQg MTI6NDE6MzcgMjAwMg0KKysrIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzNpYTY0 L2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCUZyaSBGZWIgIDggMTI6MTE6 MjQgMjAwMg0KQEAgLTEyNSw5ICsxMjUsNiBAQA0KIGNwdV9pZGxlICh2b2lk ICp1bnVzZWQpDQogew0KIAkvKiBlbmRsZXNzIGlkbGUgbG9vcCB3aXRoIG5v IHByaW9yaXR5IGF0IGFsbCAqLw0KLQlpbml0X2lkbGUoKTsNCi0JY3VycmVu dC0+bmljZSA9IDIwOw0KLQljdXJyZW50LT5jb3VudGVyID0gLTEwMDsNCiAN CiANCiAJd2hpbGUgKDEpIHsNCkBAIC0xMzYsMTEgKzEzMywxMCBAQA0KIAkJ CW1pbl94dHAoKTsNCiAjZW5kaWYNCiANCi0JCXdoaWxlICghY3VycmVudC0+ bmVlZF9yZXNjaGVkKSB7DQorCQlpZiAoIWN1cnJlbnQtPm5lZWRfcmVzY2hl ZCkgew0KICNpZmRlZiBDT05GSUdfSUE2NF9TR0lfU04NCiAJCQlzbmlkbGUo KTsNCiAjZW5kaWYNCi0JCQljb250aW51ZTsNCiAJCX0NCiANCiAjaWZkZWYg Q09ORklHX0lBNjRfU0dJX1NODQpkaWZmIC11ck4gMi40LjE3LWlhNjQta2Ri djIuMS1LMy9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMgMi40LjE3LWlhNjQt a2RidjIuMS1LM2lhNjQvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jDQotLS0g Mi40LjE3LWlhNjQta2RidjIuMS1LMy9hcmNoL2lhNjQva2VybmVsL3NldHVw LmMJTW9uIEZlYiAgNCAxMjo0MTozNyAyMDAyDQorKysgMi40LjE3LWlhNjQt a2RidjIuMS1LM2lhNjQvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCUZyaSBG ZWIgIDggMTI6MTE6MjQgMjAwMg0KQEAgLTM3NSwxMCArMzc1LDEwIEBADQog ew0KICNpZmRlZiBDT05GSUdfU01QDQogIwlkZWZpbmUgbHBqCWMtPmxvb3Bz X3Blcl9qaWZmeQ0KLSMJZGVmaW5lIGNwdQljLT5wcm9jZXNzb3INCisjCWRl ZmluZSBjcHVtCWMtPnByb2Nlc3Nvcg0KICNlbHNlDQogIwlkZWZpbmUgbHBq CWxvb3BzX3Blcl9qaWZmeQ0KLSMJZGVmaW5lIGNwdQkwDQorIwlkZWZpbmUg Y3B1bQkwDQogI2VuZGlmDQogCWNoYXIgZmFtaWx5WzMyXSwgZmVhdHVyZXNb MTI4XSwgKmNwOw0KIAlzdHJ1Y3QgY3B1aW5mb19pYTY0ICpjID0gdjsNCkBA IC00MTcsNyArNDE3LDcgQEANCiAJCSAgICJjcHUgTUh6ICAgIDogJWx1LiUw Nmx1XG4iDQogCQkgICAiaXRjIE1IeiAgICA6ICVsdS4lMDZsdVxuIg0KIAkJ ICAgIkJvZ29NSVBTICAgOiAlbHUuJTAybHVcblxuIiwNCi0JCSAgIGNwdSwg Yy0+dmVuZG9yLCBmYW1pbHksIGMtPm1vZGVsLCBjLT5yZXZpc2lvbiwgYy0+ YXJjaHJldiwNCisJCSAgIGNwdW0sIGMtPnZlbmRvciwgZmFtaWx5LCBjLT5t b2RlbCwgYy0+cmV2aXNpb24sIGMtPmFyY2hyZXYsDQogCQkgICBmZWF0dXJl cywgYy0+cHBuLCBjLT5udW1iZXIsDQogCQkgICBjLT5wcm9jX2ZyZXEgLyAx MDAwMDAwLCBjLT5wcm9jX2ZyZXEgJSAxMDAwMDAwLA0KIAkJICAgYy0+aXRj X2ZyZXEgLyAxMDAwMDAwLCBjLT5pdGNfZnJlcSAlIDEwMDAwMDAsDQpkaWZm IC11ck4gMi40LjE3LWlhNjQta2RidjIuMS1LMy9hcmNoL2lhNjQva2VybmVs L3NtcC5jIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzNpYTY0L2FyY2gvaWE2NC9r ZXJuZWwvc21wLmMNCi0tLSAyLjQuMTctaWE2NC1rZGJ2Mi4xLUszL2FyY2gv aWE2NC9rZXJuZWwvc21wLmMJTW9uIEZlYiAgNCAxMjo0MjowNSAyMDAyDQor KysgMi40LjE3LWlhNjQta2RidjIuMS1LM2lhNjQvYXJjaC9pYTY0L2tlcm5l bC9zbXAuYwlGcmkgRmViICA4IDEyOjQyOjM1IDIwMDINCkBAIC0yMDAsNiAr MjAwLDQyIEBADQogfQ0KIA0KIHZvaWQNCitzbXBfc2VuZF9yZXNjaGVkdWxl X2FsbCh2b2lkKQ0KK3sNCisJc2VuZF9JUElfYWxsKElBNjRfSVBJX1JFU0NI RURVTEUpOw0KK30NCisNCitzdGF0aWMgc3BpbmxvY2tfdCBtaWdyYXRpb25f bG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsNCitzdGF0aWMgdGFza190ICpu ZXdfdGFzazsNCisNCisNCisvKg0KKyAqIFRoaXMgZnVuY3Rpb24gc2VuZHMg YSAndGFzayBtaWdyYXRpb24nIElQSSB0byBhbm90aGVyIENQVS4NCisgKiBN dXN0IGJlIGNhbGxlZCBmcm9tIHN5c2NhbGwgY29udGV4dHMsIHdpdGggaW50 ZXJydXB0cyAqZW5hYmxlZCouDQorICovDQordm9pZCBzbXBfbWlncmF0ZV90 YXNrKGludCBjcHUsIHRhc2tfdCAqcCkNCit7DQorCS8qDQorCSAqIFRoZSB0 YXJnZXQgQ1BVIHdpbGwgdW5sb2NrIHRoZSBtaWdyYXRpb24gc3BpbmxvY2s6 DQorCSAqLw0KKwlzcGluX2xvY2soJm1pZ3JhdGlvbl9sb2NrKTsNCisJbmV3 X3Rhc2sgPSBwOw0KKwlwbGF0Zm9ybV9zZW5kX2lwaShjcHUsIElBNjRfVEFT S19NSUdSQVRJT04sIElBNjRfSVBJX0RNX0lOVCwgMCk7DQorfQ0KKw0KKy8q DQorICogVGFzayBtaWdyYXRpb24gY2FsbGJhY2suDQorICovDQorYXNtbGlu a2FnZSB2b2lkIHNtcF90YXNrX21pZ3JhdGlvbl9pbnRlcnJ1cHQoaW50IGly cSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykNCit7DQor CXRhc2tfdCAqcDsNCisNCisJcCA9IG5ld190YXNrOw0KKwlzcGluX3VubG9j aygmbWlncmF0aW9uX2xvY2spOw0KKwlzY2hlZF90YXNrX21pZ3JhdGVkKHAp Ow0KK30NCisNCit2b2lkDQogc21wX2ZsdXNoX3RsYl9hbGwgKHZvaWQpDQog ew0KIAlzbXBfY2FsbF9mdW5jdGlvbiAoKHZvaWQgKCopKHZvaWQgKikpX19m bHVzaF90bGJfYWxsLDAsMSwxKTsNCmRpZmYgLXVyTiAyLjQuMTctaWE2NC1r ZGJ2Mi4xLUszL2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5jIDIuNC4xNy1p YTY0LWtkYnYyLjEtSzNpYTY0L2FyY2gvaWE2NC9rZXJuZWwvc21wYm9vdC5j DQotLS0gMi40LjE3LWlhNjQta2RidjIuMS1LMy9hcmNoL2lhNjQva2VybmVs L3NtcGJvb3QuYwlNb24gRmViICA0IDEyOjQxOjM3IDIwMDINCisrKyAyLjQu MTctaWE2NC1rZGJ2Mi4xLUszaWE2NC9hcmNoL2lhNjQva2VybmVsL3NtcGJv b3QuYwlGcmkgRmViICA4IDEyOjExOjI0IDIwMDINCkBAIC0zNTYsNiArMzU2 LDcgQEANCiAJbG9jYWxfaXJxX2VuYWJsZSgpOw0KIAljYWxpYnJhdGVfZGVs YXkoKTsNCiAJbG9jYWxfY3B1X2RhdGEtPmxvb3BzX3Blcl9qaWZmeSA9IGxv b3BzX3Blcl9qaWZmeTsNCisJaWE2NF9kaXNhYmxlX3RpbWVyKCk7DQogCS8q DQogCSAqIEFsbG93IHRoZSBtYXN0ZXIgdG8gY29udGludWUuDQogCSAqLw0K QEAgLTM3OSw3ICszODAsOCBAQA0KIAlEcHJpbnRrKCJDUFUgJWQgaXMgc2V0 IHRvIGdvLlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsNCiAJd2hpbGUgKCFh dG9taWNfcmVhZCgmc21wX2NvbW1lbmNlZCkpDQogCQk7DQotDQorCS8qIHJl ZW5hYmxlIHRpbWVyIGludGVycnVwdHMgKi8NCisJaWE2NF9jcHVfbG9jYWxf dGljaygpOw0KIAlEcHJpbnRrKCJDUFUgJWQgaXMgc3RhcnRpbmcgaWRsZS5c biIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7DQogCXJldHVybiBjcHVfaWRsZSgp Ow0KIH0NCkBAIC00MTYsMTEgKzQxOCwxMCBAQA0KIAlpZiAoIWlkbGUpDQog CQlwYW5pYygiTm8gaWRsZSBwcm9jZXNzIGZvciBDUFUgJWQiLCBjcHUpOw0K IA0KLQl0YXNrX3NldF9jcHUoaWRsZSwgY3B1KTsJLyogd2Ugc2NoZWR1bGUg dGhlIGZpcnN0IHRhc2sgbWFudWFsbHkgKi8NCisJaW5pdF9pZGxlKGlkbGUs IGNwdSk7DQogDQogCWlhNjRfY3B1X3RvX3NhcGljaWRbY3B1XSA9IHNhcGlj aWQ7DQogDQotCWRlbF9mcm9tX3J1bnF1ZXVlKGlkbGUpOw0KIAl1bmhhc2hf cHJvY2VzcyhpZGxlKTsNCiAJaW5pdF90YXNrc1tjcHVdID0gaWRsZTsNCiAN CkBAIC00ODEsOCArNDgyLDcgQEANCiAJcHJpbnRrKCJCb290IHByb2Nlc3Nv ciBpZCAweCV4LzB4JXhcbiIsIDAsIGJvb3RfY3B1X2lkKTsNCiANCiAJZ2xv YmFsX2lycV9ob2xkZXIgPSAwOw0KLQljdXJyZW50LT5wcm9jZXNzb3IgPSAw Ow0KLQlpbml0X2lkbGUoKTsNCisJY3VycmVudC0+Y3B1ID0gMDsNCiANCiAJ LyoNCiAJICogSWYgU01QIHNob3VsZCBiZSBkaXNhYmxlZCwgdGhlbiByZWFs bHkgZGlzYWJsZSBpdCENCkBAIC01NjksMyArNTY5LDkgQEANCiAJCXNtcF9u dW1fY3B1cyA9IDE7DQogCX0NCiB9DQorDQorLyogTnVtYmVyIG9mIHRpY2tz IHdlIGNvbnNpZGVyIGFuIGlkbGUgdGFza3Mgc3RpbGwgY2FjaGUtaG90Lg0K KyAqIEZvciBJdGFuaXVtOiB3aXRoIDFHQi9zIGJhbmR3aWR0aCB3ZSBuZWVk IDRtcyB0byBmaWxsIHVwIDRNQiBMMyBjYWNoZS4uLg0KKyAqIFNvIGxldCdz IHRyeSAxMCB0aWNrcy4NCisgKi8NCit1bnNpZ25lZCBsb25nIGNhY2hlX2Rl Y2F5X3RpY2tzPTEwOw0KZGlmZiAtdXJOIDIuNC4xNy1pYTY0LWtkYnYyLjEt SzMvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMgMi40LjE3LWlhNjQta2RidjIu MS1LM2lhNjQvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMNCi0tLSAyLjQuMTct aWE2NC1rZGJ2Mi4xLUszL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCUZyaSBO b3YgIDkgMjM6MjY6MTcgMjAwMQ0KKysrIDIuNC4xNy1pYTY0LWtkYnYyLjEt SzNpYTY0L2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCUZyaSBGZWIgIDggMTI6 MTE6MjQgMjAwMg0KQEAgLTIwOSw3ICsyMDksNyBAQA0KIC8qDQogICogRW5j YXBzdWxhdGUgYWNjZXNzIHRvIHRoZSBpdG0gc3RydWN0dXJlIGZvciBTTVAu DQogICovDQotdm9pZCBfX2luaXQNCit2b2lkDQogaWE2NF9jcHVfbG9jYWxf dGljayAodm9pZCkNCiB7DQogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lk KCk7DQpAQCAtMjk4LDMgKzI5OCw5IEBADQogCWVmaV9nZXR0aW1lb2ZkYXko KHN0cnVjdCB0aW1ldmFsICopICZ4dGltZSk7DQogCWlhNjRfaW5pdF9pdG0o KTsNCiB9DQorDQordm9pZCBfX2luaXQgaWE2NF9kaXNhYmxlX3RpbWVyKHZv aWQpDQorew0KKwlpYTY0X3NldF9pdHYoSUE2NF9USU1FUl9WRUNUT1IgfCBJ QTY0X1RJTUVSX01BU0spOw0KK30NCisNCmRpZmYgLXVyTiAyLjQuMTctaWE2 NC1rZGJ2Mi4xLUszL2FyY2gvaWE2NC9tbS9mYXVsdC5jIDIuNC4xNy1pYTY0 LWtkYnYyLjEtSzNpYTY0L2FyY2gvaWE2NC9tbS9mYXVsdC5jDQotLS0gMi40 LjE3LWlhNjQta2RidjIuMS1LMy9hcmNoL2lhNjQvbW0vZmF1bHQuYwlGcmkg Tm92ICA5IDIzOjI2OjE3IDIwMDENCisrKyAyLjQuMTctaWE2NC1rZGJ2Mi4x LUszaWE2NC9hcmNoL2lhNjQvbW0vZmF1bHQuYwlGcmkgRmViICA4IDEyOjEx OjI0IDIwMDINCkBAIC0xOTQsOCArMTk0LDcgQEANCiAgIG91dF9vZl9tZW1v cnk6DQogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7DQogCWlmIChjdXJyZW50 LT5waWQgPT0gMSkgew0KLQkJY3VycmVudC0+cG9saWN5IHw9IFNDSEVEX1lJ RUxEOw0KLQkJc2NoZWR1bGUoKTsNCisJCXlpZWxkKCk7DQogCQlkb3duX3Jl YWQoJm1tLT5tbWFwX3NlbSk7DQogCQlnb3RvIHN1cnZpdmU7DQogCX0NCmRp ZmYgLXVyTiAyLjQuMTctaWE2NC1rZGJ2Mi4xLUszL2FyY2gvaWE2NC9tbS90 bGIuYyAyLjQuMTctaWE2NC1rZGJ2Mi4xLUszaWE2NC9hcmNoL2lhNjQvbW0v dGxiLmMNCi0tLSAyLjQuMTctaWE2NC1rZGJ2Mi4xLUszL2FyY2gvaWE2NC9t bS90bGIuYwlGcmkgTm92ICA5IDIzOjI2OjE3IDIwMDENCisrKyAyLjQuMTct aWE2NC1rZGJ2Mi4xLUszaWE2NC9hcmNoL2lhNjQvbW0vdGxiLmMJRnJpIEZl YiAgOCAxMzowNjoyMSAyMDAyDQpAQCAtMzcsNyArMzcsOCBAQA0KIAlsb2Nr OglTUElOX0xPQ0tfVU5MT0NLRUQsDQogCW5leHQ6CTEsDQogCWxpbWl0Ogko MSA8PCAxNSkgLSAxLAkJLyogc3RhcnQgb3V0IHdpdGggdGhlIHNhZmUgKGFy Y2hpdGVjdGVkKSBsaW1pdCAqLw0KLQltYXhfY3R4OiB+MFUNCisJbWF4X2N0 eDogfjBVLA0KKwlmbHVzaDogMFVMDQogfTsNCiANCiAvKg0KQEAgLTc2LDcg Kzc3LDkgQEANCiAJCQlpYTY0X2N0eC5saW1pdCA9IHRza19jb250ZXh0Ow0K IAl9DQogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsNCi0JZmx1c2hf dGxiX2FsbCgpOw0KKwkvL2ZsdXNoX3RsYl9hbGwoKTsgLyogcG90ZW50aWFs IHJhY2UgY29uZGl0aW9uIHdpdGggTygxKSBzY2hlZHVsZXIgW0VGXSAqLw0K KwlpYTY0X2N0eC5mbHVzaCA9ICgoMTw8c21wX251bV9jcHVzKSAtIDEpICYg figxVUw8PHNtcF9wcm9jZXNzb3JfaWQoKSk7DQorCV9fZmx1c2hfdGxiX2Fs bCgpOw0KIH0NCiANCiBzdGF0aWMgaW5saW5lIHZvaWQNCmRpZmYgLXVyTiAy LjQuMTctaWE2NC1rZGJ2Mi4xLUszL2FyY2gvaWE2NC90b29scy9wcmludF9v ZmZzZXRzLmMgMi40LjE3LWlhNjQta2RidjIuMS1LM2lhNjQvYXJjaC9pYTY0 L3Rvb2xzL3ByaW50X29mZnNldHMuYw0KLS0tIDIuNC4xNy1pYTY0LWtkYnYy LjEtSzMvYXJjaC9pYTY0L3Rvb2xzL3ByaW50X29mZnNldHMuYwlGcmkgTm92 ICA5IDIzOjI2OjE3IDIwMDENCisrKyAyLjQuMTctaWE2NC1rZGJ2Mi4xLUsz aWE2NC9hcmNoL2lhNjQvdG9vbHMvcHJpbnRfb2Zmc2V0cy5jCUZyaSBGZWIg IDggMTI6MTE6MjQgMjAwMg0KQEAgLTU0LDcgKzU0LDcgQEANCiAgICAgeyAi SUE2NF9UQVNLX1BUUkFDRV9PRkZTRVQiLAlvZmZzZXRvZiAoc3RydWN0IHRh c2tfc3RydWN0LCBwdHJhY2UpIH0sDQogICAgIHsgIklBNjRfVEFTS19TSUdQ RU5ESU5HX09GRlNFVCIsCW9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3Qs IHNpZ3BlbmRpbmcpIH0sDQogICAgIHsgIklBNjRfVEFTS19ORUVEX1JFU0NI RURfT0ZGU0VUIiwJb2Zmc2V0b2YgKHN0cnVjdCB0YXNrX3N0cnVjdCwgbmVl ZF9yZXNjaGVkKSB9LA0KLSAgICB7ICJJQTY0X1RBU0tfUFJPQ0VTU09SX09G RlNFVCIsCW9mZnNldG9mIChzdHJ1Y3QgdGFza19zdHJ1Y3QsIHByb2Nlc3Nv cikgfSwNCisgICAgeyAiSUE2NF9UQVNLX1BST0NFU1NPUl9PRkZTRVQiLAlv ZmZzZXRvZiAoc3RydWN0IHRhc2tfc3RydWN0LCBjcHUpIH0sDQogICAgIHsg IklBNjRfVEFTS19USFJFQURfT0ZGU0VUIiwJb2Zmc2V0b2YgKHN0cnVjdCB0 YXNrX3N0cnVjdCwgdGhyZWFkKSB9LA0KICAgICB7ICJJQTY0X1RBU0tfVEhS RUFEX0tTUF9PRkZTRVQiLAlvZmZzZXRvZiAoc3RydWN0IHRhc2tfc3RydWN0 LCB0aHJlYWQua3NwKSB9LA0KICNpZmRlZiBDT05GSUdfUEVSRk1PTg0KZGlm ZiAtdXJOIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzMvaW5jbHVkZS9hc20taWE2 NC9iaXRvcHMuaCAyLjQuMTctaWE2NC1rZGJ2Mi4xLUszaWE2NC9pbmNsdWRl L2FzbS1pYTY0L2JpdG9wcy5oDQotLS0gMi40LjE3LWlhNjQta2RidjIuMS1L My9pbmNsdWRlL2FzbS1pYTY0L2JpdG9wcy5oCU1vbiBGZWIgIDQgMTI6NDE6 MzggMjAwMg0KKysrIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzNpYTY0L2luY2x1 ZGUvYXNtLWlhNjQvYml0b3BzLmgJRnJpIEZlYiAgOCAxMjoxMToyNCAyMDAy DQpAQCAtMjgwLDYgKzI4MCwyMCBAQA0KIAlyZXR1cm4gcmVzdWx0Ow0KIH0N CiANCisvKioNCisgKiBfX2ZmcyAtIGZpbmQgZmlyc3QgYml0IGluIGEgNjQg Yml0IGxvbmcuDQorICoNCisgKiBVbmRlZmluZWQgaWYgbm8gYml0IGV4aXN0 cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZpcnN0Lg0KKyAq Lw0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZw0KK19fZmZzICh1bnNp Z25lZCBsb25nIHgpDQorew0KKwl1bnNpZ25lZCBsb25nIHJlc3VsdDsNCisN CisJX19hc21fXyAoInBvcGNudCAlMD0lMSIgOiAiPXIiIChyZXN1bHQpIDog InIiICh+eCAmICh4IC0gMSkpKTsNCisJcmV0dXJuIHJlc3VsdDsNCit9DQor DQogI2lmZGVmIF9fS0VSTkVMX18NCiANCiAvKg0KQEAgLTM1Nyw2ICszNzEs OCBAQA0KIAl0bXAgPSAqcDsNCiBmb3VuZF9maXJzdDoNCiAJdG1wIHw9IH4w VUwgPDwgc2l6ZTsNCisJaWYgKHRtcCA9PSB+MFVMKSAgICAgICAgLyogQXJl IGFueSBiaXRzIHplcm8/ICovDQorCQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsg LyogTm9wZS4gKi8NCiBmb3VuZF9taWRkbGU6DQogCXJldHVybiByZXN1bHQg KyBmZnoodG1wKTsNCiB9DQpAQCAtMzY2LDggKzM4Miw1MiBAQA0KICAqLw0K ICNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBmaW5k X25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApDQogDQorLyoNCisg KiBGaW5kIG5leHQgYml0IGluIGEgYml0bWFwIHJlYXNvbmFibHkgZWZmaWNp ZW50bHkuLg0KKyAqLw0KK3N0YXRpYyBpbmxpbmUgaW50DQorZmluZF9uZXh0 X2JpdCAodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25l ZCBsb25nIG9mZnNldCkNCit7DQorCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVu c2lnbmVkIGxvbmcgKikgYWRkcikgKyAob2Zmc2V0ID4+IDYpOw0KKwl1bnNp Z25lZCBsb25nIHJlc3VsdCA9IG9mZnNldCAmIH42M1VMOw0KKwl1bnNpZ25l ZCBsb25nIHRtcDsNCisNCisJaWYgKG9mZnNldCA+PSBzaXplKQ0KKwkJcmV0 dXJuIHNpemU7DQorCXNpemUgLT0gcmVzdWx0Ow0KKwlvZmZzZXQgJj0gNjNV TDsNCisJaWYgKG9mZnNldCkgew0KKwkJdG1wID0gKihwKyspOw0KKwkJdG1w ICY9IH4wVUwgPDwgb2Zmc2V0Ow0KKwkJaWYgKHNpemUgPCA2NCkNCisJCQln b3RvIGZvdW5kX2ZpcnN0Ow0KKwkJaWYgKHRtcCkNCisJCQlnb3RvIGZvdW5k X21pZGRsZTsNCisJCXNpemUgLT0gNjQ7DQorCQlyZXN1bHQgKz0gNjQ7DQor CX0NCisJd2hpbGUgKHNpemUgJiB+NjNVTCkgew0KKwkJaWYgKCh0bXAgPSAq KHArKykpKQ0KKwkJCWdvdG8gZm91bmRfbWlkZGxlOw0KKwkJcmVzdWx0ICs9 IDY0Ow0KKwkJc2l6ZSAtPSA2NDsNCisJfQ0KKwlpZiAoIXNpemUpDQorCQly ZXR1cm4gcmVzdWx0Ow0KKwl0bXAgPSAqcDsNCitmb3VuZF9maXJzdDoNCisJ dG1wICY9IH4wVUwgPj4gKDY0LXNpemUpOw0KKwlpZiAodG1wID09IDBVTCkg ICAgICAgIC8qIEFyZSBhbnkgYml0cyBzZXQ/ICovDQorCQlyZXR1cm4gcmVz dWx0ICsgc2l6ZTsgLyogTm9wZS4gKi8NCitmb3VuZF9taWRkbGU6DQorCXJl dHVybiByZXN1bHQgKyBfX2Zmcyh0bXApOw0KK30NCisNCisjZGVmaW5lIGZp bmRfZmlyc3RfYml0KGFkZHIsIHNpemUpIGZpbmRfbmV4dF9iaXQoKGFkZHIp LCAoc2l6ZSksIDApDQorDQogI2lmZGVmIF9fS0VSTkVMX18NCiANCisjZGVm aW5lIF9fY2xlYXJfYml0KG5yLCBhZGRyKSAgICAgICAgY2xlYXJfYml0KG5y LCBhZGRyKQ0KICNkZWZpbmUgZXh0Ml9zZXRfYml0ICAgICAgICAgICAgICAg ICB0ZXN0X2FuZF9zZXRfYml0DQogI2RlZmluZSBleHQyX2NsZWFyX2JpdCAg ICAgICAgICAgICAgIHRlc3RfYW5kX2NsZWFyX2JpdA0KICNkZWZpbmUgZXh0 Ml90ZXN0X2JpdCAgICAgICAgICAgICAgICB0ZXN0X2JpdA0KZGlmZiAtdXJO IDIuNC4xNy1pYTY0LWtkYnYyLjEtSzMvaW5jbHVkZS9hc20taWE2NC9od19p cnEuaCAyLjQuMTctaWE2NC1rZGJ2Mi4xLUszaWE2NC9pbmNsdWRlL2FzbS1p YTY0L2h3X2lycS5oDQotLS0gMi40LjE3LWlhNjQta2RidjIuMS1LMy9pbmNs dWRlL2FzbS1pYTY0L2h3X2lycS5oCVR1ZSBKdWwgMzEgMTk6MzA6MDkgMjAw MQ0KKysrIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzNpYTY0L2luY2x1ZGUvYXNt LWlhNjQvaHdfaXJxLmgJRnJpIEZlYiAgOCAxMjoxMToyNCAyMDAyDQpAQCAt NDksNiArNDksNyBAQA0KICNkZWZpbmUgSUE2NF9QRVJGTU9OX1ZFQ1RPUgkJ MHhlZQkvKiBwZXJmb3JtYW5jIG1vbml0b3IgaW50ZXJydXB0IHZlY3RvciAq Lw0KICNkZWZpbmUgSUE2NF9USU1FUl9WRUNUT1IJCTB4ZWYJLyogdXNlIGhp Z2hlc3QtcHJpbyBncm91cCAxNSBpbnRlcnJ1cHQgZm9yIHRpbWVyICovDQog I2RlZmluZQlJQTY0X01DQV9XQUtFVVBfVkVDVE9SCQkweGYwCS8qIE1DQSB3 YWtldXAgKG11c3QgYmUgPk1DQV9SRU5ERVpfVkVDVE9SKSAqLw0KKyNkZWZp bmUgSUE2NF9UQVNLX01JR1JBVElPTgkJMHhmYgkvKiB0YXNrIG1pZ3JhdGlv biBpbnRlcnJ1cHQgdmVjdG9yICovDQogI2RlZmluZSBJQTY0X0lQSV9SRVND SEVEVUxFCQkweGZkCS8qIFNNUCByZXNjaGVkdWxlICovDQogI2RlZmluZSBJ QTY0X0lQSV9WRUNUT1IJCQkweGZlCS8qIGludGVyLXByb2Nlc3NvciBpbnRl cnJ1cHQgdmVjdG9yICovDQogDQpAQCAtNjUsNiArNjYsOSBAQA0KICAgICAg ICAgSUE2NF9JUElfRE1fRVhUSU5UID0gICAgMHg3LCAgICAvKiBwZW5kIGFu IDgyNTktY29tcGF0aWJsZSBpbnRlcnJ1cHQuICovDQogfTsNCiANCisvKiBi aXQgZm9yIG1hc2tpbmcgYW5kIGRpc2NhcmRpbmcgdGltZXIgaW50ZXJydXB0 cyBvbiBJQTY0ICovDQorI2RlZmluZSBJQTY0X1RJTUVSX01BU0sgICAgICAg ICAoMTw8MTYpDQorDQogZXh0ZXJuIF9fdTggaXNhX2lycV90b192ZWN0b3Jf bWFwWzE2XTsNCiAjZGVmaW5lIGlzYV9pcnFfdG9fdmVjdG9yKHgpCWlzYV9p cnFfdG9fdmVjdG9yX21hcFsoeCldDQogDQpkaWZmIC11ck4gMi40LjE3LWlh NjQta2RidjIuMS1LMy9pbmNsdWRlL2FzbS1pYTY0L21tdV9jb250ZXh0Lmgg Mi40LjE3LWlhNjQta2RidjIuMS1LM2lhNjQvaW5jbHVkZS9hc20taWE2NC9t bXVfY29udGV4dC5oDQotLS0gMi40LjE3LWlhNjQta2RidjIuMS1LMy9pbmNs dWRlL2FzbS1pYTY0L21tdV9jb250ZXh0LmgJRnJpIE5vdiAgOSAyMzoyNjox NyAyMDAxDQorKysgMi40LjE3LWlhNjQta2RidjIuMS1LM2lhNjQvaW5jbHVk ZS9hc20taWE2NC9tbXVfY29udGV4dC5oCUZyaSBGZWIgIDggMTI6NTY6MDkg MjAwMg0KQEAgLTMzLDYgKzMzLDkgQEANCiAJdW5zaWduZWQgaW50IG5leHQ7 CS8qIG5leHQgY29udGV4dCBudW1iZXIgdG8gdXNlICovDQogCXVuc2lnbmVk IGludCBsaW1pdDsJLyogbmV4dCA+PSBsaW1pdCA9PiBtdXN0IGNhbGwgd3Jh cF9tbXVfY29udGV4dCgpICovDQogCXVuc2lnbmVkIGludCBtYXhfY3R4Owkv KiBtYXguIGNvbnRleHQgdmFsdWUgc3VwcG9ydGVkIGJ5IGFsbCBDUFVzICov DQorCXVuc2lnbmVkIGxvbmcgZmx1c2g7ICAgIC8qIENQVSBtYXNrIGZvciB0 aG9zZSB3aGljaCBoYXZlIHRvIHBlcmZvcm0gYQ0KKwkJCQkgKiBsb2NhbCBU TEIgZmx1c2ggYmVmb3JlIHN3aXRjaGluZyB0aGUgY29udGV4dC4NCisJCQkJ ICovDQogfTsNCiANCiBleHRlcm4gc3RydWN0IGlhNjRfY3R4IGlhNjRfY3R4 Ow0KQEAgLTQ0LDYgKzQ3LDI1IEBADQogew0KIH0NCiANCisvKiANCisgKiBX aGVuIHRoZSBjb250ZXh0IGNvdW50ZXIgd3JhcHMgYXJvdW5kIGFsbCBUTEJz IG5lZWQgdG8gYmUgZmx1c2hlZCBiZWNhdXNlDQorICogYW4gb2xkIGNvbnRl eHQgbnVtYmVyIG1pZ2h0IGhhdmUgYmVlbiByZXVzZWQuIFRoaXMgaXMgc2ln bmFsbGVkIGJ5IGEgYml0DQorICogc2V0IGluIGlhNjRfY3R4LmZsdXNoLCB3 aGljaCBpcyBjaGVja2VkIGluIHRoZSByb3V0aW5lIGJlbG93LiBDYWxsZWQg YnkNCisgKiBhY3RpdmF0ZV9tbSgpLiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA8ZWZvY2h0QGVzcy5uZWMuZGU+DQorICovDQor c3RhdGljIGlubGluZSB2b2lkDQorZGVsYXllZF90bGJfZmx1c2ggKHZvaWQp DQorew0KKwlleHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9hbGwgKHZvaWQpOw0K Kw0KKwlpZiAodW5saWtlbHkoaWE2NF9jdHguZmx1c2ggJiAoMTw8c21wX3By b2Nlc3Nvcl9pZCgpKSkpIHsNCisJCXNwaW5fbG9jaygmaWE2NF9jdHgubG9j ayk7DQorCQlfX2ZsdXNoX3RsYl9hbGwoKTsNCisJCWlhNjRfY3R4LmZsdXNo ICY9IH4oMTw8c21wX3Byb2Nlc3Nvcl9pZCgpKTsNCisJCXNwaW5fdW5sb2Nr KCZpYTY0X2N0eC5sb2NrKTsNCisJfQ0KK30NCisNCiBzdGF0aWMgaW5saW5l IHZvaWQNCiBnZXRfbmV3X21tdV9jb250ZXh0IChzdHJ1Y3QgbW1fc3RydWN0 ICptbSkNCiB7DQpAQCAtMTEzLDExICsxMzUsMjggQEANCiAJICogV2UgbWF5 IGdldCBpbnRlcnJ1cHRzIGhlcmUsIGJ1dCB0aGF0J3MgT0sgYmVjYXVzZSBp bnRlcnJ1cHQNCiAJICogaGFuZGxlcnMgY2Fubm90IHRvdWNoIHVzZXItc3Bh Y2UuDQogCSAqLw0KKwlkZWxheWVkX3RsYl9mbHVzaCgpOw0KIAlpYTY0X3Nl dF9rcihJQTY0X0tSX1BUX0JBU0UsIF9fcGEobmV4dC0+cGdkKSk7DQogCWdl dF9tbXVfY29udGV4dChuZXh0KTsNCiAJcmVsb2FkX2NvbnRleHQobmV4dCk7 DQogfQ0KIA0KKy8qDQorICogTmVlZGVkIGZvciB0aGUgTygxKSBNUSBzY2hl ZHVsZXIuDQorICovDQorI2lmIE1BWF9QUklPID49IDE5Mg0KKyMgZXJyb3Ig dXBkYXRlIHRoaXMgZnVuY3Rpb24uICovDQorI2VuZGlmDQorDQorc3RhdGlj IGlubGluZSBpbnQgc2NoZWRfZmluZF9maXJzdF9iaXQodW5zaWduZWQgbG9u ZyAqYikNCit7DQorCWlmICh1bmxpa2VseShiWzBdKSkNCisJCXJldHVybiBf X2ZmcyhiWzBdKTsNCisJaWYgKGJbMV0pDQorCQlyZXR1cm4gNjQgKyBfX2Zm cyhiWzFdKTsNCisJcmV0dXJuIF9fZmZzKGJbMl0pICsgMTI4Ow0KK30NCisN CiAjZGVmaW5lIHN3aXRjaF9tbShwcmV2X21tLG5leHRfbW0sbmV4dF90YXNr LGNwdSkJYWN0aXZhdGVfbW0ocHJldl9tbSwgbmV4dF9tbSkNCiANCiAjIGVu ZGlmIC8qICEgX19BU1NFTUJMWV9fICovDQpkaWZmIC11ck4gMi40LjE3LWlh NjQta2RidjIuMS1LMy9pbmNsdWRlL2FzbS1pYTY0L3BnYWxsb2MuaCAyLjQu MTctaWE2NC1rZGJ2Mi4xLUszaWE2NC9pbmNsdWRlL2FzbS1pYTY0L3BnYWxs b2MuaA0KLS0tIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzMvaW5jbHVkZS9hc20t aWE2NC9wZ2FsbG9jLmgJVHVlIEZlYiAgNSAxNTozMzoxOCAyMDAyDQorKysg Mi40LjE3LWlhNjQta2RidjIuMS1LM2lhNjQvaW5jbHVkZS9hc20taWE2NC9w Z2FsbG9jLmgJRnJpIEZlYiAgOCAxMjoxMToyNCAyMDAyDQpAQCAtMTYwLDkg KzE2MCwxMiBAQA0KIA0KICNpZmRlZiBDT05GSUdfU01QDQogICBleHRlcm4g dm9pZCBzbXBfZmx1c2hfdGxiX2FsbCAodm9pZCk7DQorICBleHRlcm4gdm9p ZCBzbXBfZmx1c2hfdGxiX2FsbF9ub3dhaXQgKHZvaWQpOw0KICMgZGVmaW5l IGZsdXNoX3RsYl9hbGwoKQlzbXBfZmx1c2hfdGxiX2FsbCgpDQorIyBkZWZp bmUgZmx1c2hfdGxiX2FsbF9ub3dhaXQoKQlzbXBfZmx1c2hfdGxiX2FsbF9u b3dhaXQoKQ0KICNlbHNlDQogIyBkZWZpbmUgZmx1c2hfdGxiX2FsbCgpCV9f Zmx1c2hfdGxiX2FsbCgpDQorIyBkZWZpbmUgZmx1c2hfdGxiX2FsbF9ub3dh aXQoKQlfX2ZsdXNoX3RsYl9hbGwoKQ0KICNlbmRpZg0KIA0KIC8qDQpkaWZm IC11ck4gMi40LjE3LWlhNjQta2RidjIuMS1LMy9pbmNsdWRlL2FzbS1pYTY0 L3NtcC5oIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzNpYTY0L2luY2x1ZGUvYXNt LWlhNjQvc21wLmgNCi0tLSAyLjQuMTctaWE2NC1rZGJ2Mi4xLUszL2luY2x1 ZGUvYXNtLWlhNjQvc21wLmgJRnJpIE5vdiAgOSAyMzoyNjoxNyAyMDAxDQor KysgMi40LjE3LWlhNjQta2RidjIuMS1LM2lhNjQvaW5jbHVkZS9hc20taWE2 NC9zbXAuaAlGcmkgRmViICA4IDEyOjExOjI0IDIwMDINCkBAIC0yNyw3ICsy Nyw3IEBADQogI2RlZmluZSBTTVBfSVJRX1JFRElSRUNUSU9OCSgxIDw8IDAp DQogI2RlZmluZSBTTVBfSVBJX1JFRElSRUNUSU9OCSgxIDw8IDEpDQogDQot I2RlZmluZSBzbXBfcHJvY2Vzc29yX2lkKCkJKGN1cnJlbnQtPnByb2Nlc3Nv cikNCisjZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKQkoY3VycmVudC0+Y3B1 KQ0KIA0KIGV4dGVybiBzdHJ1Y3Qgc21wX2Jvb3RfZGF0YSB7DQogCWludCBj cHVfY291bnQ7DQpAQCAtNDgsNiArNDgsOSBAQA0KIA0KIGV4dGVybiB1bnNp Z25lZCBsb25nIGFwX3dha2V1cF92ZWN0b3I7DQogDQorZXh0ZXJuIHZvaWQg c21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KTsNCitleHRlcm4gdm9pZCBz bXBfc2VuZF9yZXNjaGVkdWxlX2FsbCh2b2lkKTsNCisNCiAvKg0KICAqIEZ1 bmN0aW9uIHRvIG1hcCBoYXJkIHNtcCBwcm9jZXNzb3IgaWQgdG8gbG9naWNh bCBpZC4gIFNsb3csIHNvDQogICogZG9uJ3QgdXNlIHRoaXMgaW4gcGVyZm9y bWFuY2UtY3JpdGljYWwgY29kZS4NCkBAIC0xMTAsMTIgKzExMyw2IEBADQog DQogI2RlZmluZSBOT19QUk9DX0lECQkweGZmZmZmZmZmCS8qIG5vIHByb2Nl c3NvciBtYWdpYyBtYXJrZXIgKi8NCiANCi0vKg0KLSAqIEV4dHJhIG92ZXJo ZWFkIHRvIG1vdmUgYSB0YXNrIGZyb20gb25lIGNwdSB0byBhbm90aGVyIChk dWUgdG8gVExCIGFuZCBjYWNoZSBtaXNzZXMpLg0KLSAqIEV4cHJlc3NlZCBp biAibmVnYXRpdmUgbmljZSB2YWx1ZSIgdW5pdHMgKGxhcmdlciBudW1iZXIg bWVhbnMgaGlnaGVyIHByaW9yaXR5L3BlbmFsdHkpLg0KLSAqLw0KLSNkZWZp bmUgUFJPQ19DSEFOR0VfUEVOQUxUWQkyMA0KLQ0KIGV4dGVybiB2b2lkIF9f aW5pdCBpbml0X3NtcF9jb25maWcgKHZvaWQpOw0KIGV4dGVybiB2b2lkIHNt cF9kb190aW1lciAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOw0KIA0KZGlmZiAt dXJOIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzMvaW5jbHVkZS9hc20taWE2NC9z cGlubG9jay5oIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzNpYTY0L2luY2x1ZGUv YXNtLWlhNjQvc3BpbmxvY2suaA0KLS0tIDIuNC4xNy1pYTY0LWtkYnYyLjEt SzMvaW5jbHVkZS9hc20taWE2NC9zcGlubG9jay5oCU1vbiBGZWIgIDQgMTI6 NDE6MzkgMjAwMg0KKysrIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzNpYTY0L2lu Y2x1ZGUvYXNtLWlhNjQvc3BpbmxvY2suaAlGcmkgRmViICA4IDEyOjExOjI0 IDIwMDINCkBAIC04NCw3ICs4NCw3IEBADQogCSJtb3YgcjI5ID0gMVxuIgkJ CQkJCVwNCiAJIjs7XG4iCQkJCQkJCVwNCiAJIjE6XG4iCQkJCQkJCVwNCi0J ImxkNC5iaWFzIHIyID0gWyUwXVxuIgkJCQkJXA0KKwkibGQ0IHIyID0gWyUw XVxuIgkJCQkJXA0KIAkiOztcbiIJCQkJCQkJXA0KIAkiY21wNC5lcSBwMCxw NyA9IHIwLHIyXG4iCQkJCVwNCiAJIihwNykgYnIuY29uZC5zcG50LmZldyAx YiBcbiIJCQkJXA0KZGlmZiAtdXJOIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzMv aW5jbHVkZS9saW51eC9zbXAuaCAyLjQuMTctaWE2NC1rZGJ2Mi4xLUszaWE2 NC9pbmNsdWRlL2xpbnV4L3NtcC5oDQotLS0gMi40LjE3LWlhNjQta2RidjIu MS1LMy9pbmNsdWRlL2xpbnV4L3NtcC5oCUZyaSBGZWIgIDggMTI6MDI6MDYg MjAwMg0KKysrIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzNpYTY0L2luY2x1ZGUv bGludXgvc21wLmgJRnJpIEZlYiAgOCAxMjoxMToyNCAyMDAyDQpAQCAtMjQs MTIgKzI0LDYgQEANCiBleHRlcm4gdm9pZCBzbXBfc2VuZF9zdG9wKHZvaWQp Ow0KIA0KIC8qDQotICogc2VuZHMgYSAncmVzY2hlZHVsZScgZXZlbnQgdG8g YW5vdGhlciBDUFU6DQotICovDQotZXh0ZXJuIHZvaWQgRkFTVENBTEwoc21w X3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KSk7DQotDQotDQotLyoNCiAgKiBC b290IHByb2Nlc3NvciBjYWxsIHRvIGxvYWQgdGhlIG90aGVyIENQVSdzDQog ICovDQogZXh0ZXJuIHZvaWQgc21wX2Jvb3RfY3B1cyh2b2lkKTsNCmRpZmYg LXVyTiAyLjQuMTctaWE2NC1rZGJ2Mi4xLUszL2tkYi9rZGJtYWluLmMgMi40 LjE3LWlhNjQta2RidjIuMS1LM2lhNjQva2RiL2tkYm1haW4uYw0KLS0tIDIu NC4xNy1pYTY0LWtkYnYyLjEtSzMva2RiL2tkYm1haW4uYwlNb24gRmViICA0 IDEyOjQxOjA0IDIwMDINCisrKyAyLjQuMTctaWE2NC1rZGJ2Mi4xLUszaWE2 NC9rZGIva2RibWFpbi5jCUZyaSBGZWIgIDggMTI6MTE6MjQgMjAwMg0KQEAg LTIzNDQsNyArMjM0NCw3IEBADQogCWZvcl9lYWNoX3Rhc2socCkgew0KIAkJ a2RiX3ByaW50ZigiMHglcCAlMDhkICUwOGQgICUxLjFkICAlMy4zZCAgJXMg IDB4JXAlYyVzXG4iLA0KIAkJCSAgICh2b2lkICopcCwgcC0+cGlkLCBwLT5w X3BwdHItPnBpZCwNCi0JCQkgICB0YXNrX2hhc19jcHUocCksIHAtPnByb2Nl c3NvciwNCisJCQkgICB0YXNrX2hhc19jcHUocCksIHAtPmNwdSwNCiAJCQkg ICAocC0+c3RhdGUgPT0gMCk/InJ1biAiOihwLT5zdGF0ZT4wKT8ic3RvcCI6 InVucm4iLA0KIAkJCSAgICh2b2lkICopKCZwLT50aHJlYWQpLA0KIAkJCSAg IChwID09IGN1cnJlbnQpID8gJyonOiAnICcsDQpkaWZmIC11ck4gMi40LjE3 LWlhNjQta2RidjIuMS1LMy9rZXJuZWwvcHJpbnRrLmMgMi40LjE3LWlhNjQt a2RidjIuMS1LM2lhNjQva2VybmVsL3ByaW50ay5jDQotLS0gMi40LjE3LWlh NjQta2RidjIuMS1LMy9rZXJuZWwvcHJpbnRrLmMJRnJpIEZlYiAgOCAxMjow MjowNiAyMDAyDQorKysgMi40LjE3LWlhNjQta2RidjIuMS1LM2lhNjQva2Vy bmVsL3ByaW50ay5jCUZyaSBGZWIgIDggMTI6MTE6MjQgMjAwMg0KQEAgLTI1 LDYgKzI1LDggQEANCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KICNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4NCiAjaW5jbHVkZSA8bGludXgvaW50ZXJy dXB0Lmg+CQkJLyogRm9yIGluX2ludGVycnVwdCgpICovDQorI2luY2x1ZGUg PGxpbnV4L2NvbmZpZy5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0K IA0KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPg0KIA0KZGlmZiAtdXJOIDIu NC4xNy1pYTY0LWtkYnYyLjEtSzMva2VybmVsL3NjaGVkLmMgMi40LjE3LWlh NjQta2RidjIuMS1LM2lhNjQva2VybmVsL3NjaGVkLmMNCi0tLSAyLjQuMTct aWE2NC1rZGJ2Mi4xLUszL2tlcm5lbC9zY2hlZC5jCUZyaSBGZWIgIDggMTI6 MDI6MDYgMjAwMg0KKysrIDIuNC4xNy1pYTY0LWtkYnYyLjEtSzNpYTY0L2tl cm5lbC9zY2hlZC5jCUZyaSBGZWIgIDggMTI6MjE6MDcgMjAwMg0KQEAgLTE1 NCw2ICsxNTQsMTUgQEANCiAjZGVmaW5lIGNwdV9jdXJyKGNwdSkJCShjcHVf cnEoY3B1KS0+Y3VycikNCiAjZGVmaW5lIHJ0X3Rhc2socCkJCSgocCktPnBy aW8gPCBNQVhfUlRfUFJJTykNCiANCisvKiBuZWVkZWQgb24gSUE2NCwgYXJj aC9pYTY0L2tlcm5lbC9oZWFkLlMgcmVsaWVzIG9uIGl0IChFRikgKi8NCitz dHJ1Y3QgdGFza19zdHJ1Y3QgKiBpbml0X3Rhc2tzW05SX0NQVVNdIF9faW5p dGRhdGEgPSB7JmluaXRfdGFzaywgfTsNCisNCisvKiBuZWVkZWQgaW4ga2Ri IChFRikgKi8NCitpbnQgdGFza19oYXNfY3B1KHRhc2tfdCAqcCkNCit7DQor CXJldHVybiAocCA9PSB0YXNrX3JxKHApLT5jdXJyKTsNCit9DQorDQogc3Rh dGljIGlubGluZSBydW5xdWV1ZV90ICpsb2NrX3Rhc2tfcnEodGFza190ICpw LCB1bnNpZ25lZCBsb25nICpmbGFncykNCiB7DQogCXN0cnVjdCBydW5xdWV1 ZSAqX19ycTsNCkBAIC02NzEsNyArNjgwLDcgQEANCiAJdGFza190ICpwID0g Y3VycmVudDsNCiANCiAJaWYgKHAgPT0gcnEtPmlkbGUpIHsNCi0JCWlmIChs b2NhbF9iaF9jb3VudChjcHUpIHx8IGxvY2FsX2lycV9jb3VudChjcHUpID4g MSkNCisJCWlmIChyZWFsbHlfbG9jYWxfYmhfY291bnQoKSB8fCByZWFsbHlf bG9jYWxfaXJxX2NvdW50KCkgPiAxKQ0KIAkJCWtzdGF0LnBlcl9jcHVfc3lz dGVtW2NwdV0gKz0gc3lzdGVtOw0KICNpZiBDT05GSUdfU01QDQogCQlpZGxl X3RpY2soKTsNCkBAIC05NzQsMTYgKzk4MywxNiBAQA0KIA0KIAlwLT5jcHVz X2FsbG93ZWQgPSBuZXdfbWFzazsNCiAJLyoNCi0JICogQ2FuIHRoZSB0YXNr IHJ1biBvbiB0aGUgY3VycmVudCBDUFU/IElmIG5vdCB0aGVuDQorCSAqIENh biB0aGUgdGFzayBydW4gb24gaXRzIGN1cnJlbnQgQ1BVPyBJZiBub3QgdGhl bg0KIAkgKiBtaWdyYXRlIHRoZSBwcm9jZXNzIG9mZiB0byBhIHByb3BlciBD UFUuDQogCSAqLw0KLQlpZiAobmV3X21hc2sgJiAoMVVMIDw8IHNtcF9wcm9j ZXNzb3JfaWQoKSkpDQorCWlmIChuZXdfbWFzayAmICgxVUwgPDwgcC0+Y3B1 KSkNCiAJCXJldHVybjsNCiAjaWYgQ09ORklHX1NNUA0KLQljdXJyZW50LT5z dGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOw0KLQlzbXBfbWlncmF0ZV90 YXNrKF9fZmZzKG5ld19tYXNrKSwgY3VycmVudCk7DQotDQotCXNjaGVkdWxl KCk7DQorCXAtPnN0YXRlID0gVEFTS19VTklOVEVSUlVQVElCTEU7DQorCXNt cF9taWdyYXRlX3Rhc2soX19mZnMobmV3X21hc2spLCBwKTsNCisJaWYgKHAg PT0gY3VycmVudCkNCisJCXNjaGVkdWxlKCk7DQogI2VuZGlmDQogfQ0KIA0K QEAgLTEyMjksNjQgKzEyMzgsMjYgQEANCiANCiBhc21saW5rYWdlIGxvbmcg c3lzX3NjaGVkX3lpZWxkKHZvaWQpDQogew0KLQl0YXNrX3QgKnByZXYgPSBj dXJyZW50LCAqbmV4dDsNCiAJcnVucXVldWVfdCAqcnEgPSB0aGlzX3JxKCk7 DQogCXByaW9fYXJyYXlfdCAqYXJyYXk7DQotCWxpc3RfdCAqcXVldWU7DQot DQotCWlmICh1bmxpa2VseShwcmV2LT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcp KSB7DQotCQlzY2hlZHVsZSgpOw0KLQkJcmV0dXJuIDA7DQotCX0NCi0JcmVs ZWFzZV9rZXJuZWxfbG9jayhwcmV2LCBzbXBfcHJvY2Vzc29yX2lkKCkpOw0K LQlwcmV2LT5zbGVlcF90aW1lc3RhbXAgPSBqaWZmaWVzOw0KLQkvKg0KLQkg KiBEZWNyZWFzZSB0aGUgeWllbGRpbmcgdGFzaydzIHByaW9yaXR5IGJ5IG9u ZSwgdG8gYXZvaWQNCi0JICogbGl2ZWxvY2tzLiBUaGlzIHByaW9yaXR5IGxv c3MgaXMgdGVtcG9yYXJ5LCBpdCdzIHJlY292ZXJlZA0KLQkgKiBvbmNlIHRo ZSBjdXJyZW50IHRpbWVzbGljZSBleHBpcmVzLg0KLQkgKg0KLQkgKiBJZiBw cmlvcml0eSBpcyBhbHJlYWR5IE1BWF9QUklPLTEgdGhlbiB3ZSBzdGlsbA0K LQkgKiByb3VuZHJvYmluIHRoZSB0YXNrIHdpdGhpbiB0aGUgcnVubGlzdC4N Ci0JICovDQorIA0KKyAgICAgICAvKg0KKwkqIERlY3JlYXNlIHRoZSB5aWVs ZGluZyB0YXNrJ3MgcHJpb3JpdHkgYnkgb25lLCB0byBhdm9pZA0KKwkqIGxp dmVsb2Nrcy4gVGhpcyBwcmlvcml0eSBsb3NzIGlzIHRlbXBvcmFyeSwgaXQn cyByZWNvdmVyZWQNCisJKiBvbmNlIHRoZSBjdXJyZW50IHRpbWVzbGljZSBl eHBpcmVzLg0KKwkqDQorCSogSWYgcHJpb3JpdHkgaXMgYWxyZWFkeSBNQVhf UFJJTy0xIHRoZW4gd2Ugc3RpbGwNCisJKiByb3VuZHJvYmluIHRoZSB0YXNr IHdpdGhpbiB0aGUgcnVubGlzdC4NCisJKi8NCiAJc3Bpbl9sb2NrX2lycSgm cnEtPmxvY2spOw0KIAlhcnJheSA9IGN1cnJlbnQtPmFycmF5Ow0KLQkvKg0K LQkgKiBJZiB0aGUgdGFzayBoYXMgcmVhY2hlZCBtYXhpbXVtIHByaW9yaXR5 IChvciBpcyBhIFJUIHRhc2spDQotCSAqIHRoZW4ganVzdCByZXF1ZXVlIHRo ZSB0YXNrIHRvIHRoZSBlbmQgb2YgdGhlIHJ1bnF1ZXVlOg0KLQkgKi8NCi0J aWYgKGxpa2VseShjdXJyZW50LT5wcmlvID09IE1BWF9QUklPLTEgfHwgcnRf dGFzayhjdXJyZW50KSkpIHsNCi0JCWxpc3RfZGVsKCZjdXJyZW50LT5ydW5f bGlzdCk7DQotCQlsaXN0X2FkZF90YWlsKCZjdXJyZW50LT5ydW5fbGlzdCwg YXJyYXktPnF1ZXVlICsgY3VycmVudC0+cHJpbyk7DQotCX0gZWxzZSB7DQot CQlsaXN0X2RlbCgmY3VycmVudC0+cnVuX2xpc3QpOw0KLQkJaWYgKGxpc3Rf ZW1wdHkoYXJyYXktPnF1ZXVlICsgY3VycmVudC0+cHJpbykpDQotCQkJX19j bGVhcl9iaXQoY3VycmVudC0+cHJpbywgYXJyYXktPmJpdG1hcCk7DQotCQlj dXJyZW50LT5wcmlvKys7DQotCQlsaXN0X2FkZF90YWlsKCZjdXJyZW50LT5y dW5fbGlzdCwgYXJyYXktPnF1ZXVlICsgY3VycmVudC0+cHJpbyk7DQotCQlf X3NldF9iaXQoY3VycmVudC0+cHJpbywgYXJyYXktPmJpdG1hcCk7DQotCX0N Ci0JLyoNCi0JICogQ29udGV4dC1zd2l0Y2ggbWFudWFsbHkuIFRoaXMgaXMg ZXF1aXZhbGVudCB0bw0KLQkgKiBjYWxsaW5nIHNjaGVkdWxlKCksIGJ1dCBm YXN0ZXIsIGJlY2F1c2UgeWllbGQoKQ0KLQkgKiBrbm93cyBsb3RzIG9mIHRo aW5ncyB0aGF0IGNhbiBiZSBvcHRpbWl6ZWQgYXdheQ0KLQkgKiBmcm9tIHRo ZSBnZW5lcmljIHNjaGVkdWxlciBwYXRoOg0KLQkgKi8NCi0JcXVldWUgPSBh cnJheS0+cXVldWUgKyBzY2hlZF9maW5kX2ZpcnN0X2JpdChhcnJheS0+Yml0 bWFwKTsNCi0JbmV4dCA9IGxpc3RfZW50cnkocXVldWUtPm5leHQsIHRhc2tf dCwgcnVuX2xpc3QpOw0KLQlwcmVmZXRjaChuZXh0KTsNCi0NCi0JcHJldi0+ bmVlZF9yZXNjaGVkID0gMDsNCi0JaWYgKGxpa2VseShwcmV2ICE9IG5leHQp KSB7DQotCQlycS0+bnJfc3dpdGNoZXMrKzsNCi0JCXJxLT5jdXJyID0gbmV4 dDsNCi0JCWNvbnRleHRfc3dpdGNoKHByZXYsIG5leHQpOw0KLQkJYmFycmll cigpOw0KLQkJcnEgPSB0aGlzX3JxKCk7DQotCX0NCisJZGVxdWV1ZV90YXNr KGN1cnJlbnQsIGFycmF5KTsNCisJaWYgKGxpa2VseSghcnRfdGFzayhjdXJy ZW50KSkpDQorCQlpZiAoY3VycmVudC0+cHJpbyA8IE1BWF9QUklPLTEpDQor CQkJY3VycmVudC0+cHJpbysrOw0KKwllbnF1ZXVlX3Rhc2soY3VycmVudCwg YXJyYXkpOw0KIAlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsNCi0NCi0J cmVhY3F1aXJlX2tlcm5lbF9sb2NrKGN1cnJlbnQpOw0KLQ0KKwlzY2hlZHVs ZSgpOw0KIAlyZXR1cm4gMDsNCiB9DQogDQpkaWZmIC11ck4gMi40LjE3LWlh NjQta2RidjIuMS1LMy9rZXJuZWwvdGltZXIuYyAyLjQuMTctaWE2NC1rZGJ2 Mi4xLUszaWE2NC9rZXJuZWwvdGltZXIuYw0KLS0tIDIuNC4xNy1pYTY0LWtk YnYyLjEtSzMva2VybmVsL3RpbWVyLmMJRnJpIEZlYiAgOCAxMjowMjowNiAy MDAyDQorKysgMi40LjE3LWlhNjQta2RidjIuMS1LM2lhNjQva2VybmVsL3Rp bWVyLmMJRnJpIEZlYiAgOCAxMjoxMToyNCAyMDAyDQpAQCAtNTg0LDE4ICs1 ODQsNyBAQA0KIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpLCBzeXN0 ZW0gPSB1c2VyX3RpY2sgXiAxOw0KIA0KIAl1cGRhdGVfb25lX3Byb2Nlc3Mo cCwgdXNlcl90aWNrLCBzeXN0ZW0sIGNwdSk7DQotCWlmIChwLT5waWQpIHsN Ci0JCWlmICgtLXAtPmNvdW50ZXIgPD0gMCkgew0KLQkJCXAtPmNvdW50ZXIg PSAwOw0KLQkJCXAtPm5lZWRfcmVzY2hlZCA9IDE7DQotCQl9DQotCQlpZiAo cC0+bmljZSA+IDApDQotCQkJa3N0YXQucGVyX2NwdV9uaWNlW2NwdV0gKz0g dXNlcl90aWNrOw0KLQkJZWxzZQ0KLQkJCWtzdGF0LnBlcl9jcHVfdXNlcltj cHVdICs9IHVzZXJfdGljazsNCi0JCWtzdGF0LnBlcl9jcHVfc3lzdGVtW2Nw dV0gKz0gc3lzdGVtOw0KLQl9IGVsc2UgaWYgKHJlYWxseV9sb2NhbF9iaF9j b3VudCgpIHx8IHJlYWxseV9sb2NhbF9pcnFfY291bnQoKSA+IDEpDQotCQlr c3RhdC5wZXJfY3B1X3N5c3RlbVtjcHVdICs9IHN5c3RlbTsNCisJc2NoZWR1 bGVyX3RpY2sodXNlcl90aWNrLCBzeXN0ZW0pOw0KIH0NCiANCiAvKg0K ---1916692341-1118367128-1013189822=:12699--